aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2016-08-31 23:31:37 +0000
committerHans Wennborg <hans@hanshq.net>2016-08-31 23:31:37 +0000
commitcfc78ffbcac3339d9604be3b136d18c2dde47981 (patch)
tree2af5b1835ea9edd847fedfa9733d996a92aef99b
parent8f53081a5431b87cab41bab1f8f56bd75fcc089b (diff)
Creating release candidate final from release_390 branchsvn-tags/RELEASE_390
git-svn-id: https://llvm.org/svn/llvm-project/openmp/tags/RELEASE_390@280323 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--final/CMakeLists.txt5
-rw-r--r--final/CREDITS.txt57
-rw-r--r--final/LICENSE.txt174
-rwxr-xr-xfinal/offload/Makefile224
-rwxr-xr-xfinal/offload/README.txt129
-rw-r--r--final/offload/doc/Reference.pdf115996
-rwxr-xr-xfinal/offload/doc/doxygen/config2328
-rwxr-xr-xfinal/offload/doc/doxygen/header.tex90
-rw-r--r--final/offload/src/cean_util.cpp344
-rw-r--r--final/offload/src/cean_util.h101
-rw-r--r--final/offload/src/coi/coi_client.cpp350
-rw-r--r--final/offload/src/coi/coi_client.h118
-rw-r--r--final/offload/src/coi/coi_server.cpp130
-rw-r--r--final/offload/src/coi/coi_server.h74
-rw-r--r--final/offload/src/compiler_if_host.cpp323
-rw-r--r--final/offload/src/compiler_if_host.h133
-rw-r--r--final/offload/src/compiler_if_target.cpp44
-rw-r--r--final/offload/src/compiler_if_target.h50
-rw-r--r--final/offload/src/dv_util.cpp131
-rw-r--r--final/offload/src/dv_util.h63
-rw-r--r--final/offload/src/liboffload_error.c452
-rw-r--r--final/offload/src/liboffload_error_codes.h276
-rw-r--r--final/offload/src/liboffload_msg.c35
-rw-r--r--final/offload/src/liboffload_msg.h326
-rw-r--r--final/offload/src/mic_lib.f90441
-rw-r--r--final/offload/src/offload.h474
-rw-r--r--final/offload/src/offload_common.cpp170
-rw-r--r--final/offload/src/offload_common.h444
-rw-r--r--final/offload/src/offload_engine.cpp531
-rw-r--r--final/offload/src/offload_engine.h482
-rw-r--r--final/offload/src/offload_env.cpp354
-rw-r--r--final/offload/src/offload_env.h91
-rw-r--r--final/offload/src/offload_host.cpp4360
-rw-r--r--final/offload/src/offload_host.h343
-rw-r--r--final/offload/src/offload_myo_host.cpp805
-rw-r--r--final/offload/src/offload_myo_host.h80
-rw-r--r--final/offload/src/offload_myo_target.cpp184
-rw-r--r--final/offload/src/offload_myo_target.h54
-rw-r--r--final/offload/src/offload_omp_host.cpp851
-rw-r--r--final/offload/src/offload_omp_target.cpp1021
-rw-r--r--final/offload/src/offload_orsl.cpp84
-rw-r--r--final/offload/src/offload_orsl.h25
-rw-r--r--final/offload/src/offload_table.cpp375
-rw-r--r--final/offload/src/offload_table.h301
-rw-r--r--final/offload/src/offload_target.cpp754
-rw-r--r--final/offload/src/offload_target.h100
-rw-r--r--final/offload/src/offload_target_main.cpp17
-rw-r--r--final/offload/src/offload_timer.h172
-rw-r--r--final/offload/src/offload_timer_host.cpp359
-rw-r--r--final/offload/src/offload_timer_target.cpp67
-rw-r--r--final/offload/src/offload_trace.cpp309
-rw-r--r--final/offload/src/offload_trace.h52
-rw-r--r--final/offload/src/offload_util.cpp206
-rw-r--r--final/offload/src/offload_util.h153
-rw-r--r--final/offload/src/ofldbegin.cpp164
-rw-r--r--final/offload/src/ofldend.cpp77
-rw-r--r--final/offload/src/orsl-lite/include/orsl-lite.h221
-rw-r--r--final/offload/src/orsl-lite/lib/orsl-lite.c337
-rw-r--r--final/offload/src/orsl-lite/version.txt1
-rw-r--r--final/offload/src/rdtsc.h17
-rw-r--r--final/offload/src/use_mpss2.txt1
-rw-r--r--final/offload/src/use_mpss_win.txt1
-rw-r--r--final/runtime/Build_With_CMake.txt229
-rw-r--r--final/runtime/CMakeLists.txt375
-rw-r--r--final/runtime/README.txt115
-rw-r--r--final/runtime/cmake/LibompCheckFortranFlag.cmake73
-rw-r--r--final/runtime/cmake/LibompCheckLinkerFlag.cmake68
-rw-r--r--final/runtime/cmake/LibompDefinitions.cmake32
-rw-r--r--final/runtime/cmake/LibompExports.cmake98
-rw-r--r--final/runtime/cmake/LibompGetArchitecture.cmake66
-rw-r--r--final/runtime/cmake/LibompHandleFlags.cmake207
-rw-r--r--final/runtime/cmake/LibompMicroTests.cmake225
-rw-r--r--final/runtime/cmake/LibompUtils.cmake191
-rw-r--r--final/runtime/cmake/config-ix.cmake267
-rw-r--r--final/runtime/doc/Reference.pdf13882
-rw-r--r--final/runtime/doc/doxygen/config1822
-rw-r--r--final/runtime/doc/doxygen/header.tex77
-rw-r--r--final/runtime/doc/doxygen/libomp_interface.h333
-rw-r--r--final/runtime/src/CMakeLists.txt332
-rw-r--r--final/runtime/src/dllexports1010
-rw-r--r--final/runtime/src/exports_so.txt129
-rw-r--r--final/runtime/src/extractExternal.cpp497
-rw-r--r--final/runtime/src/i18n/en_US.txt477
-rw-r--r--final/runtime/src/include/30/omp.h.var165
-rw-r--r--final/runtime/src/include/30/omp_lib.f.var644
-rw-r--r--final/runtime/src/include/30/omp_lib.f90.var365
-rw-r--r--final/runtime/src/include/30/omp_lib.h.var649
-rw-r--r--final/runtime/src/include/30/ompt.h.var488
-rw-r--r--final/runtime/src/include/40/omp.h.var161
-rw-r--r--final/runtime/src/include/40/omp_lib.f.var769
-rw-r--r--final/runtime/src/include/40/omp_lib.f90.var455
-rw-r--r--final/runtime/src/include/40/omp_lib.h.var567
-rw-r--r--final/runtime/src/include/40/ompt.h.var515
-rw-r--r--final/runtime/src/include/45/omp.h.var198
-rw-r--r--final/runtime/src/include/45/omp_lib.f.var840
-rw-r--r--final/runtime/src/include/45/omp_lib.f90.var524
-rw-r--r--final/runtime/src/include/45/omp_lib.h.var644
-rw-r--r--final/runtime/src/include/45/ompt.h.var515
-rw-r--r--final/runtime/src/kmp.h3664
-rw-r--r--final/runtime/src/kmp_affinity.cpp4821
-rw-r--r--final/runtime/src/kmp_affinity.h319
-rw-r--r--final/runtime/src/kmp_alloc.c2083
-rw-r--r--final/runtime/src/kmp_atomic.c2907
-rw-r--r--final/runtime/src/kmp_atomic.h1045
-rw-r--r--final/runtime/src/kmp_barrier.cpp1764
-rw-r--r--final/runtime/src/kmp_cancel.cpp282
-rw-r--r--final/runtime/src/kmp_config.h.cmake110
-rw-r--r--final/runtime/src/kmp_csupport.c3329
-rw-r--r--final/runtime/src/kmp_debug.c142
-rw-r--r--final/runtime/src/kmp_debug.h131
-rw-r--r--final/runtime/src/kmp_debugger.c315
-rw-r--r--final/runtime/src/kmp_debugger.h51
-rw-r--r--final/runtime/src/kmp_dispatch.cpp2768
-rw-r--r--final/runtime/src/kmp_environment.c596
-rw-r--r--final/runtime/src/kmp_environment.h81
-rw-r--r--final/runtime/src/kmp_error.c523
-rw-r--r--final/runtime/src/kmp_error.h57
-rw-r--r--final/runtime/src/kmp_ftn_cdecl.c35
-rw-r--r--final/runtime/src/kmp_ftn_entry.h1480
-rw-r--r--final/runtime/src/kmp_ftn_extra.c33
-rw-r--r--final/runtime/src/kmp_ftn_os.h620
-rw-r--r--final/runtime/src/kmp_ftn_stdcall.c35
-rw-r--r--final/runtime/src/kmp_global.c478
-rw-r--r--final/runtime/src/kmp_gsupport.c1610
-rw-r--r--final/runtime/src/kmp_i18n.c974
-rw-r--r--final/runtime/src/kmp_i18n.h193
-rw-r--r--final/runtime/src/kmp_import.c42
-rw-r--r--final/runtime/src/kmp_io.c248
-rw-r--r--final/runtime/src/kmp_io.h44
-rw-r--r--final/runtime/src/kmp_itt.c147
-rw-r--r--final/runtime/src/kmp_itt.h312
-rw-r--r--final/runtime/src/kmp_itt.inl1148
-rw-r--r--final/runtime/src/kmp_lock.cpp4258
-rw-r--r--final/runtime/src/kmp_lock.h1320
-rw-r--r--final/runtime/src/kmp_omp.h234
-rw-r--r--final/runtime/src/kmp_os.h716
-rw-r--r--final/runtime/src/kmp_platform.h171
-rw-r--r--final/runtime/src/kmp_runtime.c7618
-rw-r--r--final/runtime/src/kmp_safe_c_api.h62
-rw-r--r--final/runtime/src/kmp_sched.cpp974
-rw-r--r--final/runtime/src/kmp_settings.c5636
-rw-r--r--final/runtime/src/kmp_settings.h50
-rw-r--r--final/runtime/src/kmp_stats.cpp709
-rw-r--r--final/runtime/src/kmp_stats.h904
-rw-r--r--final/runtime/src/kmp_stats_timing.cpp144
-rw-r--r--final/runtime/src/kmp_stats_timing.h112
-rw-r--r--final/runtime/src/kmp_str.c883
-rw-r--r--final/runtime/src/kmp_str.h119
-rw-r--r--final/runtime/src/kmp_stub.c270
-rw-r--r--final/runtime/src/kmp_stub.h61
-rw-r--r--final/runtime/src/kmp_taskdeps.cpp587
-rw-r--r--final/runtime/src/kmp_tasking.c3102
-rw-r--r--final/runtime/src/kmp_taskq.c2032
-rw-r--r--final/runtime/src/kmp_threadprivate.c733
-rw-r--r--final/runtime/src/kmp_utility.c429
-rw-r--r--final/runtime/src/kmp_version.c212
-rw-r--r--final/runtime/src/kmp_version.h68
-rw-r--r--final/runtime/src/kmp_wait_release.cpp26
-rw-r--r--final/runtime/src/kmp_wait_release.h598
-rw-r--r--final/runtime/src/kmp_wrapper_getpid.h56
-rw-r--r--final/runtime/src/kmp_wrapper_malloc.h205
-rw-r--r--final/runtime/src/libomp.rc.var70
-rw-r--r--final/runtime/src/ompt-event-specific.h152
-rw-r--r--final/runtime/src/ompt-general.c535
-rw-r--r--final/runtime/src/ompt-internal.h93
-rw-r--r--final/runtime/src/ompt-specific.c332
-rw-r--r--final/runtime/src/ompt-specific.h90
-rw-r--r--final/runtime/src/test-touch.c31
-rw-r--r--final/runtime/src/thirdparty/ittnotify/disable_warnings.h29
-rw-r--r--final/runtime/src/thirdparty/ittnotify/ittnotify.h3804
-rw-r--r--final/runtime/src/thirdparty/ittnotify/ittnotify_config.h478
-rw-r--r--final/runtime/src/thirdparty/ittnotify/ittnotify_static.c1051
-rw-r--r--final/runtime/src/thirdparty/ittnotify/ittnotify_static.h316
-rw-r--r--final/runtime/src/thirdparty/ittnotify/ittnotify_types.h67
-rw-r--r--final/runtime/src/thirdparty/ittnotify/legacy/ittnotify.h972
-rw-r--r--final/runtime/src/z_Linux_asm.s1807
-rw-r--r--final/runtime/src/z_Linux_util.c2659
-rw-r--r--final/runtime/src/z_Windows_NT-586_asm.asm1402
-rw-r--r--final/runtime/src/z_Windows_NT-586_util.c163
-rw-r--r--final/runtime/src/z_Windows_NT_util.c1974
-rw-r--r--final/runtime/test/CMakeLists.txt99
-rw-r--r--final/runtime/test/api/has_openmp.c23
-rw-r--r--final/runtime/test/api/kmp_aligned_malloc.c62
-rw-r--r--final/runtime/test/api/omp_get_num_threads.c39
-rw-r--r--final/runtime/test/api/omp_get_wtick.c24
-rw-r--r--final/runtime/test/api/omp_get_wtime.c33
-rw-r--r--final/runtime/test/api/omp_in_parallel.c39
-rw-r--r--final/runtime/test/atomic/omp_atomic.c366
-rw-r--r--final/runtime/test/barrier/omp_barrier.c44
-rw-r--r--final/runtime/test/critical/omp_critical.c37
-rw-r--r--final/runtime/test/env/kmp_set_dispatch_buf.c76
-rw-r--r--final/runtime/test/env/omp_wait_policy.c40
-rw-r--r--final/runtime/test/flush/omp_flush.c45
-rw-r--r--final/runtime/test/lit.cfg105
-rw-r--r--final/runtime/test/lit.site.cfg.in18
-rw-r--r--final/runtime/test/lock/omp_lock.c47
-rw-r--r--final/runtime/test/lock/omp_nest_lock.c45
-rw-r--r--final/runtime/test/lock/omp_test_lock.c47
-rw-r--r--final/runtime/test/lock/omp_test_nest_lock.c47
-rw-r--r--final/runtime/test/master/omp_master.c38
-rw-r--r--final/runtime/test/master/omp_master_3.c44
-rw-r--r--final/runtime/test/misc_bugs/many-microtask-args.c38
-rw-r--r--final/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c81
-rw-r--r--final/runtime/test/omp_my_sleep.h33
-rw-r--r--final/runtime/test/omp_testsuite.h79
-rw-r--r--final/runtime/test/ompt/callback.h108
-rw-r--r--final/runtime/test/ompt/parallel/nested.c239
-rw-r--r--final/runtime/test/ompt/parallel/nested_serialized.c105
-rw-r--r--final/runtime/test/ompt/parallel/normal.c68
-rw-r--r--final/runtime/test/ompt/parallel/serialized.c23
-rw-r--r--final/runtime/test/ompt/worksharing/for/auto.c7
-rw-r--r--final/runtime/test/ompt/worksharing/for/auto_serialized.c7
-rw-r--r--final/runtime/test/ompt/worksharing/for/base.h35
-rw-r--r--final/runtime/test/ompt/worksharing/for/base_serialized.h20
-rw-r--r--final/runtime/test/ompt/worksharing/for/dynamic.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/dynamic_serialized.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/guided.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/guided_serialized.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/runtime.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/runtime_serialized.c5
-rw-r--r--final/runtime/test/ompt/worksharing/for/static.c7
-rw-r--r--final/runtime/test/ompt/worksharing/for/static_serialized.c7
-rw-r--r--final/runtime/test/parallel/omp_nested.c41
-rw-r--r--final/runtime/test/parallel/omp_parallel_copyin.c47
-rw-r--r--final/runtime/test/parallel/omp_parallel_default.c43
-rw-r--r--final/runtime/test/parallel/omp_parallel_firstprivate.c46
-rw-r--r--final/runtime/test/parallel/omp_parallel_if.c40
-rw-r--r--final/runtime/test/parallel/omp_parallel_num_threads.c46
-rw-r--r--final/runtime/test/parallel/omp_parallel_private.c46
-rw-r--r--final/runtime/test/parallel/omp_parallel_reduction.c254
-rw-r--r--final/runtime/test/parallel/omp_parallel_shared.c46
-rw-r--r--final/runtime/test/tasking/kmp_taskloop.c158
-rw-r--r--final/runtime/test/tasking/nested_parallel_tasking.c32
-rw-r--r--final/runtime/test/tasking/omp_task.c52
-rw-r--r--final/runtime/test/tasking/omp_task_final.c65
-rw-r--r--final/runtime/test/tasking/omp_task_firstprivate.c51
-rw-r--r--final/runtime/test/tasking/omp_task_if.c43
-rw-r--r--final/runtime/test/tasking/omp_task_imp_firstprivate.c47
-rw-r--r--final/runtime/test/tasking/omp_task_priority.c22
-rw-r--r--final/runtime/test/tasking/omp_task_private.c53
-rw-r--r--final/runtime/test/tasking/omp_task_shared.c41
-rw-r--r--final/runtime/test/tasking/omp_taskwait.c74
-rw-r--r--final/runtime/test/tasking/omp_taskyield.c58
-rw-r--r--final/runtime/test/threadprivate/omp_threadprivate.c102
-rw-r--r--final/runtime/test/threadprivate/omp_threadprivate_for.c48
-rw-r--r--final/runtime/test/worksharing/for/bug_set_schedule_0.c40
-rw-r--r--final/runtime/test/worksharing/for/kmp_doacross_check.c56
-rw-r--r--final/runtime/test/worksharing/for/kmp_set_dispatch_buf.c91
-rw-r--r--final/runtime/test/worksharing/for/omp_for_bigbounds.c67
-rw-r--r--final/runtime/test/worksharing/for/omp_for_collapse.c51
-rw-r--r--final/runtime/test/worksharing/for/omp_for_firstprivate.c55
-rw-r--r--final/runtime/test/worksharing/for/omp_for_lastprivate.c52
-rw-r--r--final/runtime/test/worksharing/for/omp_for_nowait.c77
-rw-r--r--final/runtime/test/worksharing/for/omp_for_ordered.c60
-rw-r--r--final/runtime/test/worksharing/for/omp_for_private.c63
-rw-r--r--final/runtime/test/worksharing/for/omp_for_reduction.c339
-rw-r--r--final/runtime/test/worksharing/for/omp_for_schedule_auto.c69
-rw-r--r--final/runtime/test/worksharing/for/omp_for_schedule_dynamic.c89
-rw-r--r--final/runtime/test/worksharing/for/omp_for_schedule_guided.c217
-rw-r--r--final/runtime/test/worksharing/for/omp_for_schedule_static.c154
-rw-r--r--final/runtime/test/worksharing/for/omp_for_schedule_static_3.c202
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_firstprivate.c35
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_if.c42
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_lastprivate.c37
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_ordered.c64
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_private.c50
-rw-r--r--final/runtime/test/worksharing/for/omp_parallel_for_reduction.c266
-rw-r--r--final/runtime/test/worksharing/sections/omp_parallel_sections_firstprivate.c54
-rw-r--r--final/runtime/test/worksharing/sections/omp_parallel_sections_lastprivate.c71
-rw-r--r--final/runtime/test/worksharing/sections/omp_parallel_sections_private.c64
-rw-r--r--final/runtime/test/worksharing/sections/omp_parallel_sections_reduction.c508
-rw-r--r--final/runtime/test/worksharing/sections/omp_section_firstprivate.c55
-rw-r--r--final/runtime/test/worksharing/sections/omp_section_lastprivate.c76
-rw-r--r--final/runtime/test/worksharing/sections/omp_section_private.c66
-rw-r--r--final/runtime/test/worksharing/sections/omp_sections_nowait.c104
-rw-r--r--final/runtime/test/worksharing/sections/omp_sections_reduction.c543
-rw-r--r--final/runtime/test/worksharing/single/omp_single.c44
-rw-r--r--final/runtime/test/worksharing/single/omp_single_copyprivate.c60
-rw-r--r--final/runtime/test/worksharing/single/omp_single_nowait.c73
-rw-r--r--final/runtime/test/worksharing/single/omp_single_private.c57
-rwxr-xr-xfinal/runtime/tools/check-depends.pl506
-rwxr-xr-xfinal/runtime/tools/check-execstack.pl146
-rwxr-xr-xfinal/runtime/tools/check-instruction-set.pl321
-rwxr-xr-xfinal/runtime/tools/generate-def.pl321
-rw-r--r--final/runtime/tools/lib/Build.pm264
-rw-r--r--final/runtime/tools/lib/LibOMP.pm85
-rw-r--r--final/runtime/tools/lib/Platform.pm473
-rw-r--r--final/runtime/tools/lib/Uname.pm635
-rw-r--r--final/runtime/tools/lib/tools.pm1981
-rwxr-xr-xfinal/runtime/tools/message-converter.pl775
-rw-r--r--final/testsuite/LICENSE34
-rw-r--r--final/testsuite/LLVM-IR/lit.cfg78
-rw-r--r--final/testsuite/LLVM-IR/lit.site.cfg.in30
-rw-r--r--final/testsuite/LLVM-IR/lit.tmp1
-rw-r--r--final/testsuite/Makefile254
-rw-r--r--final/testsuite/README_LLVM_OPENMP46
-rw-r--r--final/testsuite/README_OpenMP_Validation_Suite334
-rwxr-xr-xfinal/testsuite/adding_xfails.py32
-rw-r--r--final/testsuite/bin/Makefile23
-rwxr-xr-xfinal/testsuite/bin/distribute.sh125
-rw-r--r--final/testsuite/bin/header6
-rw-r--r--final/testsuite/bin/lit.cfg78
-rw-r--r--final/testsuite/bin/lit.site.cfg.in30
-rw-r--r--final/testsuite/bin/lit.tmp1
-rw-r--r--final/testsuite/c/has_openmp.c30
-rw-r--r--final/testsuite/c/omp_atomic.c434
-rw-r--r--final/testsuite/c/omp_barrier.c41
-rw-r--r--final/testsuite/c/omp_critical.c42
-rw-r--r--final/testsuite/c/omp_flush.c50
-rw-r--r--final/testsuite/c/omp_for_collapse.c56
-rw-r--r--final/testsuite/c/omp_for_firstprivate.c55
-rw-r--r--final/testsuite/c/omp_for_lastprivate.c52
-rw-r--r--final/testsuite/c/omp_for_nowait.c57
-rw-r--r--final/testsuite/c/omp_for_ordered.c60
-rw-r--r--final/testsuite/c/omp_for_private.c64
-rw-r--r--final/testsuite/c/omp_for_reduction.c429
-rw-r--r--final/testsuite/c/omp_for_schedule_auto.c55
-rw-r--r--final/testsuite/c/omp_for_schedule_dynamic.c111
-rw-r--r--final/testsuite/c/omp_for_schedule_guided.c225
-rw-r--r--final/testsuite/c/omp_for_schedule_static.c165
-rw-r--r--final/testsuite/c/omp_for_schedule_static_3.c212
-rw-r--r--final/testsuite/c/omp_get_num_threads.c39
-rw-r--r--final/testsuite/c/omp_get_wtick.c24
-rw-r--r--final/testsuite/c/omp_get_wtime.c38
-rw-r--r--final/testsuite/c/omp_in_parallel.c51
-rw-r--r--final/testsuite/c/omp_lock.c45
-rw-r--r--final/testsuite/c/omp_master.c37
-rw-r--r--final/testsuite/c/omp_master_3.c44
-rw-r--r--final/testsuite/c/omp_nest_lock.c45
-rw-r--r--final/testsuite/c/omp_nested.c42
-rw-r--r--final/testsuite/c/omp_parallel_copyin.c47
-rw-r--r--final/testsuite/c/omp_parallel_default.c44
-rw-r--r--final/testsuite/c/omp_parallel_firstprivate.c48
-rw-r--r--final/testsuite/c/omp_parallel_for_firstprivate.c36
-rw-r--r--final/testsuite/c/omp_parallel_for_if.c38
-rw-r--r--final/testsuite/c/omp_parallel_for_lastprivate.c34
-rw-r--r--final/testsuite/c/omp_parallel_for_ordered.c62
-rw-r--r--final/testsuite/c/omp_parallel_for_private.c48
-rw-r--r--final/testsuite/c/omp_parallel_for_reduction.c280
-rw-r--r--final/testsuite/c/omp_parallel_if.c40
-rw-r--r--final/testsuite/c/omp_parallel_num_threads.c46
-rw-r--r--final/testsuite/c/omp_parallel_private.c50
-rw-r--r--final/testsuite/c/omp_parallel_reduction.c278
-rw-r--r--final/testsuite/c/omp_parallel_sections_firstprivate.c49
-rw-r--r--final/testsuite/c/omp_parallel_sections_lastprivate.c70
-rw-r--r--final/testsuite/c/omp_parallel_sections_private.c65
-rw-r--r--final/testsuite/c/omp_parallel_sections_reduction.c568
-rw-r--r--final/testsuite/c/omp_parallel_shared.c43
-rw-r--r--final/testsuite/c/omp_section_firstprivate.c52
-rw-r--r--final/testsuite/c/omp_section_lastprivate.c73
-rw-r--r--final/testsuite/c/omp_section_private.c69
-rw-r--r--final/testsuite/c/omp_sections_nowait.c66
-rw-r--r--final/testsuite/c/omp_sections_reduction.c613
-rw-r--r--final/testsuite/c/omp_single.c43
-rw-r--r--final/testsuite/c/omp_single_copyprivate.c50
-rw-r--r--final/testsuite/c/omp_single_nowait.c60
-rw-r--r--final/testsuite/c/omp_single_private.c56
-rw-r--r--final/testsuite/c/omp_task.c52
-rw-r--r--final/testsuite/c/omp_task_final.c52
-rw-r--r--final/testsuite/c/omp_task_firstprivate.c51
-rw-r--r--final/testsuite/c/omp_task_if.c43
-rw-r--r--final/testsuite/c/omp_task_imp_firstprivate.c51
-rw-r--r--final/testsuite/c/omp_task_private.c53
-rw-r--r--final/testsuite/c/omp_task_shared.c47
-rw-r--r--final/testsuite/c/omp_task_untied.c69
-rw-r--r--final/testsuite/c/omp_taskwait.c75
-rw-r--r--final/testsuite/c/omp_taskyield.c59
-rw-r--r--final/testsuite/c/omp_test_lock.c47
-rw-r--r--final/testsuite/c/omp_test_nest_lock.c48
-rw-r--r--final/testsuite/c/omp_threadprivate.c97
-rw-r--r--final/testsuite/c/omp_threadprivate_for.c44
-rw-r--r--final/testsuite/common_utility.f57
-rw-r--r--final/testsuite/fortran/OMP1_TEST36
-rw-r--r--final/testsuite/fortran/OMP2_TEST5
-rw-r--r--final/testsuite/fortran/common_utility.f57
-rw-r--r--final/testsuite/fortran/do_collapse.f67
-rw-r--r--final/testsuite/fortran/do_firstprivate.f56
-rw-r--r--final/testsuite/fortran/do_lastprivate.f39
-rw-r--r--final/testsuite/fortran/do_ordered.f73
-rw-r--r--final/testsuite/fortran/do_private.f67
-rw-r--r--final/testsuite/fortran/do_reduction.f514
-rw-r--r--final/testsuite/fortran/do_schedule_dynamic.f90
-rw-r--r--final/testsuite/fortran/do_schedule_guided.f174
-rw-r--r--final/testsuite/fortran/do_schedule_static.f70
-rw-r--r--final/testsuite/fortran/has_openmp.f25
-rw-r--r--final/testsuite/fortran/omp_atomic.f588
-rw-r--r--final/testsuite/fortran/omp_barrier.f50
-rw-r--r--final/testsuite/fortran/omp_copyin.f47
-rw-r--r--final/testsuite/fortran/omp_critical.f59
-rw-r--r--final/testsuite/fortran/omp_flush.f49
-rw-r--r--final/testsuite/fortran/omp_get_num_threads.f37
-rw-r--r--final/testsuite/fortran/omp_get_wticks.f28
-rw-r--r--final/testsuite/fortran/omp_in_parallel.f41
-rw-r--r--final/testsuite/fortran/omp_lock.f58
-rw-r--r--final/testsuite/fortran/omp_master.f39
-rw-r--r--final/testsuite/fortran/omp_master_3.f49
-rw-r--r--final/testsuite/fortran/omp_nest_lock.f59
-rw-r--r--final/testsuite/fortran/omp_nested.f53
-rw-r--r--final/testsuite/fortran/omp_num_threads.f60
-rw-r--r--final/testsuite/fortran/omp_single.f40
-rw-r--r--final/testsuite/fortran/omp_task.f50
-rw-r--r--final/testsuite/fortran/omp_task_firstprivate.f54
-rw-r--r--final/testsuite/fortran/omp_task_if.f45
-rw-r--r--final/testsuite/fortran/omp_task_private.f55
-rw-r--r--final/testsuite/fortran/omp_task_shared.f47
-rw-r--r--final/testsuite/fortran/omp_task_untied.f63
-rw-r--r--final/testsuite/fortran/omp_taskwait.f83
-rw-r--r--final/testsuite/fortran/omp_test_nest_lock.f61
-rw-r--r--final/testsuite/fortran/omp_testlock.f57
-rw-r--r--final/testsuite/fortran/omp_testsuite.f2
-rw-r--r--final/testsuite/fortran/omp_threadprivate.f89
-rw-r--r--final/testsuite/fortran/omp_workshare.f142
-rw-r--r--final/testsuite/fortran/omp_workshare_default.f36
-rw-r--r--final/testsuite/fortran/omp_wtime.f43
-rw-r--r--final/testsuite/fortran/par_do_firstprivate.f26
-rw-r--r--final/testsuite/fortran/par_do_if.f32
-rw-r--r--final/testsuite/fortran/par_do_lastprivate.f28
-rw-r--r--final/testsuite/fortran/par_do_ordered.f67
-rw-r--r--final/testsuite/fortran/par_do_private.f46
-rw-r--r--final/testsuite/fortran/par_do_reduction.f415
-rw-r--r--final/testsuite/fortran/par_section_firstprivate.f34
-rw-r--r--final/testsuite/fortran/par_section_lastprivate.f51
-rw-r--r--final/testsuite/fortran/par_section_private.f86
-rw-r--r--final/testsuite/fortran/par_section_reduct.f631
-rw-r--r--final/testsuite/fortran/section_firstprivate.f41
-rw-r--r--final/testsuite/fortran/section_lastprivate.f62
-rw-r--r--final/testsuite/fortran/section_private.f55
-rw-r--r--final/testsuite/fortran/section_reduction.f743
-rw-r--r--final/testsuite/fortran/single_copyprivate.f41
-rw-r--r--final/testsuite/fortran/single_nowait.f50
-rw-r--r--final/testsuite/fortran/single_private.f51
-rw-r--r--final/testsuite/fortran/testlist-f.txt45
-rw-r--r--final/testsuite/omp_my_sleep.f26
-rw-r--r--final/testsuite/omp_my_sleep.h35
-rw-r--r--final/testsuite/omp_testsuite.f14
-rw-r--r--final/testsuite/omp_testsuite.h164
-rw-r--r--final/testsuite/ompts-c.conf19
-rw-r--r--final/testsuite/ompts-f.conf1
-rwxr-xr-xfinal/testsuite/ompts.conf26
-rwxr-xr-xfinal/testsuite/ompts_makeHeader.pl101
-rwxr-xr-xfinal/testsuite/ompts_parser.pl167
-rwxr-xr-xfinal/testsuite/ompts_parserFunctions.pm280
-rw-r--r--final/testsuite/ompts_standaloneProc.c51
-rw-r--r--final/testsuite/ompts_standaloneProc.f68
-rwxr-xr-xfinal/testsuite/runtest.pl592
-rwxr-xr-xfinal/testsuite/template_parser_c.pl114
-rwxr-xr-xfinal/testsuite/template_parser_fortran.pl115
-rw-r--r--final/testsuite/testlist-c.txt68
-rw-r--r--final/testsuite/testlist-f.txt63
-rw-r--r--final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.c67
-rw-r--r--final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.f90
-rw-r--r--final/www/README.txt115
-rw-r--r--final/www/Reference.pdf13882
-rw-r--r--final/www/content.css27
-rw-r--r--final/www/index.html238
-rw-r--r--final/www/menu.css39
456 files changed, 287825 insertions, 0 deletions
diff --git a/final/CMakeLists.txt b/final/CMakeLists.txt
new file mode 100644
index 0000000..3d60633
--- /dev/null
+++ b/final/CMakeLists.txt
@@ -0,0 +1,5 @@
+cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+
+set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing")
+
+add_subdirectory(runtime)
diff --git a/final/CREDITS.txt b/final/CREDITS.txt
new file mode 100644
index 0000000..a8ab67a
--- /dev/null
+++ b/final/CREDITS.txt
@@ -0,0 +1,57 @@
+This file is a partial list of people who have contributed to the LLVM/openmp
+project. If you have contributed a patch or made some other contribution to
+LLVM/openmp, please submit a patch to this file to add yourself, and it will be
+done!
+
+The list is sorted by surname and formatted to allow easy grepping and
+beautification by scripts. The fields are: name (N), email (E), web-address
+(W), PGP key ID and fingerprint (P), description (D), and snail-mail address
+(S).
+
+N: Carlo Bertolli
+W: http://ibm.com
+D: IBM contributor to PowerPC support in CMake files and elsewhere.
+
+N: Sunita Chandrasekaran
+D: Contributor to testsuite from OpenUH
+
+N: Barbara Chapman
+D: Contributor to testsuite from OpenUH
+
+N: University of Houston
+W: http://web.cs.uh.edu/~openuh/download/
+D: OpenUH test suite
+
+N: Intel Corporation OpenMP runtime team
+W: http://openmprtl.org
+D: Created the runtime.
+
+N: John Mellor-Crummey and other members of the OpenMP Tools Working Group
+E: johnmc@rice.edu
+D: OpenMP Tools Interface (OMPT)
+
+N: Matthias Muller
+D: Contributor to testsuite from OpenUH
+
+N: Tal Nevo
+E: tal@scalemp.com
+D: ScaleMP contributor to improve runtime performance there.
+W: http://scalemp.com
+
+N: Pavel Neytchev
+D: Contributor to testsuite from OpenUH
+
+N: Steven Noonan
+E: steven@uplinklabs.net
+D: Patches for the ARM architecture and removal of several inconsistencies.
+
+N: Alp Toker
+E: alp@nuanti.com
+D: Making build work for FreeBSD.
+
+N: Cheng Wang
+D: Contributor to testsuite from OpenUH
+
+N: Diego Caballero
+E: diego.l.caballero@gmail.com
+D: Fork performance improvements
diff --git a/final/LICENSE.txt b/final/LICENSE.txt
new file mode 100644
index 0000000..d858552
--- /dev/null
+++ b/final/LICENSE.txt
@@ -0,0 +1,174 @@
+==============================================================================
+
+The software contained in this directory tree is dual licensed under both the
+University of Illinois "BSD-Like" license and the MIT license. As a user of
+this code you may choose to use it under either license. As a contributor,
+you agree to allow your code to be used under both. The full text of the
+relevant licenses is included below.
+
+In addition, a license agreement from the copyright/patent holders of the
+software contained in this directory tree is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 1997-2016 Intel Corporation
+
+All rights reserved.
+
+Developed by:
+ OpenMP Runtime Team
+ Intel Corporation
+ http://www.openmprtl.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of Intel Corporation OpenMP Runtime Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this Software without specific prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 1997-2016 Intel Corporation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+==============================================================================
+
+Intel Corporation
+
+Software Grant License Agreement ("Agreement")
+
+Except for the license granted herein to you, Intel Corporation ("Intel") reserves
+all right, title, and interest in and to the Software (defined below).
+
+Definition
+
+"Software" means the code and documentation as well as any original work of
+authorship, including any modifications or additions to an existing work, that
+is intentionally submitted by Intel to llvm.org (http://llvm.org) ("LLVM") for
+inclusion in, or documentation of, any of the products owned or managed by LLVM
+(the "Work"). For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to LLVM or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that are
+managed by, or on behalf of, LLVM for the purpose of discussing and improving
+the Work, but excluding communication that is conspicuously marked otherwise.
+
+1. Grant of Copyright License. Subject to the terms and conditions of this
+ Agreement, Intel hereby grants to you and to recipients of the Software
+ distributed by LLVM a perpetual, worldwide, non-exclusive, no-charge,
+ royalty-free, irrevocable copyright license to reproduce, prepare derivative
+ works of, publicly display, publicly perform, sublicense, and distribute the
+ Software and such derivative works.
+
+2. Grant of Patent License. Subject to the terms and conditions of this
+ Agreement, Intel hereby grants you and to recipients of the Software
+ distributed by LLVM a perpetual, worldwide, non-exclusive, no-charge,
+ royalty-free, irrevocable (except as stated in this section) patent license
+ to make, have made, use, offer to sell, sell, import, and otherwise transfer
+ the Work, where such license applies only to those patent claims licensable
+ by Intel that are necessarily infringed by Intel's Software alone or by
+ combination of the Software with the Work to which such Software was
+ submitted. If any entity institutes patent litigation against Intel or any
+ other entity (including a cross-claim or counterclaim in a lawsuit) alleging
+ that Intel's Software, or the Work to which Intel has contributed constitutes
+ direct or contributory patent infringement, then any patent licenses granted
+ to that entity under this Agreement for the Software or Work shall terminate
+ as of the date such litigation is filed.
+
+Unless required by applicable law or agreed to in writing, the software is
+provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+either express or implied, including, without limitation, any warranties or
+conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE.
+
+==============================================================================
+
+ARM Limited
+
+Software Grant License Agreement ("Agreement")
+
+Except for the license granted herein to you, ARM Limited ("ARM") reserves all
+right, title, and interest in and to the Software (defined below).
+
+Definition
+
+"Software" means the code and documentation as well as any original work of
+authorship, including any modifications or additions to an existing work, that
+is intentionally submitted by ARM to llvm.org (http://llvm.org) ("LLVM") for
+inclusion in, or documentation of, any of the products owned or managed by LLVM
+(the "Work"). For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to LLVM or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that are
+managed by, or on behalf of, LLVM for the purpose of discussing and improving
+the Work, but excluding communication that is conspicuously marked otherwise.
+
+1. Grant of Copyright License. Subject to the terms and conditions of this
+ Agreement, ARM hereby grants to you and to recipients of the Software
+ distributed by LLVM a perpetual, worldwide, non-exclusive, no-charge,
+ royalty-free, irrevocable copyright license to reproduce, prepare derivative
+ works of, publicly display, publicly perform, sublicense, and distribute the
+ Software and such derivative works.
+
+2. Grant of Patent License. Subject to the terms and conditions of this
+ Agreement, ARM hereby grants you and to recipients of the Software
+ distributed by LLVM a perpetual, worldwide, non-exclusive, no-charge,
+ royalty-free, irrevocable (except as stated in this section) patent license
+ to make, have made, use, offer to sell, sell, import, and otherwise transfer
+ the Work, where such license applies only to those patent claims licensable
+ by ARM that are necessarily infringed by ARM's Software alone or by
+ combination of the Software with the Work to which such Software was
+ submitted. If any entity institutes patent litigation against ARM or any
+ other entity (including a cross-claim or counterclaim in a lawsuit) alleging
+ that ARM's Software, or the Work to which ARM has contributed constitutes
+ direct or contributory patent infringement, then any patent licenses granted
+ to that entity under this Agreement for the Software or Work shall terminate
+ as of the date such litigation is filed.
+
+Unless required by applicable law or agreed to in writing, the software is
+provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+either express or implied, including, without limitation, any warranties or
+conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE.
+
+==============================================================================
diff --git a/final/offload/Makefile b/final/offload/Makefile
new file mode 100755
index 0000000..75e3744
--- /dev/null
+++ b/final/offload/Makefile
@@ -0,0 +1,224 @@
+#
+##//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# MAKEFILE PARAMETERS
+#
+# root_dir - path to root directory of liboffload
+# build_dir - path to build directory
+# mpss_dir - path to root directory of mpss
+# mpss_version - version of the mpss (e.g., version "3.3.x" would be "33")
+# libiomp_host_dir - path to host libiomp directory (unnecessary if compiler_host is icc)
+# libiomp_target_dir - path to target libiomp directory (unnecesarry if compiler_target is icc)
+# omp_header_dir - path to omp.h (unnecessary if compiler_host and compiler_target are icc)
+# os_host - host operating system
+# os_target - target operating system
+# compiler_host - host compiler
+# compiler_target - target compiler
+# options_host - additional options for host compiler
+# options_target - additional options for target compiler
+#
+
+# Directories
+root_dir?=.
+build_dir?=$(root_dir)/build
+build_host_dir=$(build_dir)/host
+build_target_dir=$(build_dir)/target
+obj_host_dir=$(build_dir)/obj_host
+obj_target_dir=$(build_dir)/obj_target
+source_dir=$(root_dir)/src
+imported_dir=$(source_dir)/imported
+
+# OS
+os_host?=linux
+os_target?=linux
+ifneq ($(os_host)_$(os_target), linux_linux)
+ $(error "Only linux is supported")
+endif
+
+# Compilers
+compiler_host?=gcc
+compiler_target?=gcc
+
+# MPSS
+mpss_version?=30
+mpss_dir?=/
+mpss_present=$(shell if test -d $(mpss_dir); then echo OK; else echo KO; fi)
+ifneq ($(mpss_present), OK)
+ $(error "Cannot find MPSS directory $(mpss_dir)")
+endif
+
+ifeq ($(shell test $(mpss_version) -gt 33; echo $$?), 0)
+ coi_dir=$(mpss_dir)/sysroots/k1om-mpss-linux/usr
+ coi_include=$(coi_dir)/include/intel-coi
+ coi_lib_host=$(mpss_dir)/lib64
+ coi_lib_device=$(coi_dir)/lib64
+else
+ coi_dir=$(mpss_dir)/opt/intel/mic/coi
+ coi_include=$(coi_dir)/include
+ coi_lib_host=$(coi_dir)/host-linux-release/lib
+ coi_lib_device=$(coi_dir)/device-linux-release/lib
+endif
+myo_dir=$(mpss_dir)/opt/intel/mic/myo
+
+# Sources
+src_liboffload_common=dv_util.cpp liboffload_error.c liboffload_msg.c offload_common.cpp offload_table.cpp offload_trace.cpp offload_util.cpp
+
+src_liboffload_host=$(src_liboffload_common) cean_util.cpp coi/coi_client.cpp compiler_if_host.cpp offload_engine.cpp offload_env.cpp offload_host.cpp offload_omp_host.cpp offload_timer_host.cpp offload_orsl.cpp orsl-lite/lib/orsl-lite.c offload_myo_host.cpp
+src_liboffload_host:=$(foreach file,$(src_liboffload_host),$(source_dir)/$(file))
+
+src_liboffload_target=$(src_liboffload_common) coi/coi_server.cpp compiler_if_target.cpp offload_omp_target.cpp offload_target.cpp offload_timer_target.cpp offload_myo_target.cpp
+src_liboffload_target:=$(foreach file,$(src_liboffload_target),$(source_dir)/$(file))
+
+src_ofld=ofldbegin.cpp ofldend.cpp
+src_ofld:=$(foreach file,$(src_ofld),$(source_dir)/$(file))
+
+headers=$(wildcard $(source_dir)/*.h) $(wildcard $(source_dir)/coi/*.h) $(wildcard $(source_dir)/orsl-lite/include/*.h)
+ifneq ($(omp_header_dir), )
+ headers+=$(imported_dir)/omp.h
+endif
+
+# Objects
+obj_liboffload_host=$(notdir $(src_liboffload_host))
+obj_liboffload_host:=$(obj_liboffload_host:.cpp=.o)
+obj_liboffload_host:=$(obj_liboffload_host:.c=.o)
+obj_liboffload_host:=$(foreach file,$(obj_liboffload_host),$(obj_host_dir)/$(file))
+
+obj_liboffload_target=$(notdir $(src_liboffload_target))
+obj_liboffload_target:=$(obj_liboffload_target:.cpp=.o)
+obj_liboffload_target:=$(obj_liboffload_target:.c=.o)
+obj_liboffload_target:=$(foreach file,$(obj_liboffload_target),$(obj_target_dir)/$(file))
+
+obj_ofld=$(notdir $(src_ofld))
+obj_ofld:=$(obj_ofld:.cpp=.o)
+obj_ofld_host=$(foreach file,$(obj_ofld),$(build_host_dir)/$(file))
+obj_ofld_target=$(foreach file,$(obj_ofld),$(build_target_dir)/$(file))
+
+# Options
+opts_common=-O2 -w -fpic -c -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -I$(coi_include) -I$(myo_dir)/include -I$(source_dir)
+ifneq ($(omp_header_dir), )
+ opts_common+=-I$(imported_dir)
+endif
+
+opts_liboffload=-shared -Wl,-soname,liboffload.so.5 -ldl -lstdc++ -liomp5
+
+opts_liboffload_host=$(opts_liboffload) -L$(coi_lib_host) -lcoi_host -L$(myo_dir)/lib -lmyo-client
+ifneq ($(libiomp_host_dir), )
+ opts_liboffload_host+=-L$(libiomp_host_dir)
+endif
+
+opts_liboffload_target=$(opts_liboffload) -L$(coi_lib_device) -lcoi_device -L$(myo_dir)/lib -lmyo-service
+ifneq ($(libiomp_target_dir), )
+ opts_liboffload_target+=-L$(libiomp_target_dir)
+endif
+
+options_host?=
+opts_host=$(options_host) -DHOST_LIBRARY=1 -DMPSS_VERSION=$(mpss_version)
+ifeq ($(os_host), linux)
+ opts_host+=-DLINUX
+endif
+
+options_target?=
+opts_target=$(options_target) -DHOST_LIBRARY=0
+ifeq ($(os_target), linux)
+ opts_target+=-DLINUX
+endif
+ifeq ($(compiler_target), icc)
+ opts_target+=-mmic
+endif
+
+# Make targets
+.PHONY: all clean info
+
+all: info $(build_host_dir)/liboffload.so $(build_target_dir)/liboffload.so $(obj_ofld_host) $(obj_ofld_target)
+
+
+$(build_host_dir)/liboffload.so: $(build_host_dir)/liboffload.so.5 | $(build_host_dir)
+ ln -f $< $@
+
+$(build_host_dir)/liboffload.so.5: $(obj_liboffload_host) | $(build_host_dir)
+ $(compiler_host) $(opts_liboffload_host) $(opts_host) $^ -o $@
+
+$(obj_host_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_host_dir)
+ $(compiler_host) $(opts_common) $(opts_host) $< -o $@
+
+$(obj_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_host_dir)
+ $(compiler_host) $(opts_common) $(opts_host) $< -o $@
+
+$(obj_host_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_host_dir)
+ $(compiler_host) $(opts_common) $(opts_host) $< -o $@
+
+$(obj_host_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_host_dir)
+ $(compiler_host) $(opts_common) $(opts_host) $< -o $@
+
+
+$(build_target_dir)/liboffload.so: $(build_target_dir)/liboffload.so.5 | $(build_target_dir)
+ ln -f $< $@
+
+$(build_target_dir)/liboffload.so.5: $(obj_liboffload_target) | $(build_target_dir)
+ $(compiler_target) $(opts_liboffload_target) $(opts_target) $^ -o $@
+
+$(obj_target_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_target_dir)
+ $(compiler_target) $(opts_common) $(opts_target) $< -o $@
+
+$(obj_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_target_dir)
+ $(compiler_target) $(opts_common) $(opts_target) $< -o $@
+
+$(obj_target_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_target_dir)
+ $(compiler_target) $(opts_common) $(opts_target) $< -o $@
+
+$(obj_target_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_target_dir)
+ $(compiler_target) $(opts_common) $(opts_target) $< -o $@
+
+
+$(build_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_host_dir)
+ $(compiler_host) $(opts_common) $(opts_host) $< -o $@
+
+$(build_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_target_dir)
+ $(compiler_target) $(opts_common) $(opts_target) $< -o $@
+
+
+$(imported_dir)/omp.h: $(omp_header_dir)/omp.h | $(imported_dir)
+ cp $< $@
+
+
+$(build_host_dir) $(build_target_dir) $(obj_host_dir) $(obj_target_dir): | $(build_dir)
+ $(shell mkdir -p $@ >/dev/null 2>/dev/null)
+ @echo "Created $@ directory"
+
+$(build_dir):
+ $(shell mkdir -p $@ >/dev/null 2>/dev/null)
+ @echo "Created $@ directory"
+
+$(imported_dir):
+ $(shell mkdir -p $@ >/dev/null 2>/dev/null)
+ @echo "Created $@ directory"
+
+
+clean:
+ $(shell rm -rf $(build_dir))
+ @echo "Remove $(build_dir) directory"
+
+
+info:
+ @echo "root_dir = $(root_dir)"
+ @echo "build_dir = $(build_dir)"
+ @echo "mpss_dir = $(mpss_dir)"
+ @echo "mpss_version = $(mpss_version)"
+ @echo "libiomp_host_dir = $(libiomp_host_dir)"
+ @echo "libiomp_target_dir = $(libiomp_target_dir)"
+ @echo "omp_header_dir = $(omp_header_dir)"
+ @echo "os_host = $(os_host)"
+ @echo "os_target = $(os_target)"
+ @echo "compiler_host = $(compiler_host)"
+ @echo "compiler_target = $(compiler_target)"
+ @echo "options_host = $(options_host)"
+ @echo "options_target = $(options_target)"
+
diff --git a/final/offload/README.txt b/final/offload/README.txt
new file mode 100755
index 0000000..eb9fb1d
--- /dev/null
+++ b/final/offload/README.txt
@@ -0,0 +1,129 @@
+
+ README for Intel(R) Offload Runtime Library
+ ===========================================
+
+How to Build Documentation
+==========================
+
+The main documentation is in Doxygen* format, and this distribution
+should come with pre-built PDF documentation in doc/Reference.pdf.
+However, an HTML version can be built by executing:
+
+% doxygen doc/doxygen/config
+
+in this directory.
+
+That will produce HTML documentation in the doc/doxygen/generated
+directory, which can be accessed by pointing a web browser at the
+index.html file there.
+
+If you don't have Doxygen installed, you can download it from
+www.doxygen.org.
+
+
+Software Requirements
+=====================
+
+Intel(R) Offload Runtime Library requires additional software:
+
+1) Intel(R) OpenMP* Runtime Library. You can either download the source
+code for that (from openmprtl.org or openmp.llvm.org) or simply use the
+compiled version distributed with the Intel compilers.
+2) Intel(R) COI Runtime Library and Intel(R) MYO Runtime Library. These
+libraries are part of Intel(R) Manycore Platform Software Stack (MPSS). You
+can download MPSS source code or binaries from
+software.intel.com/en-us/articles/intel-manycore-platform-software-stack-mpss.
+Binaries include host libraries for Intel(R) 64 Architecture and target
+libraries for Intel(R) Many Integrated Core Architecture.
+
+Also you will require all of the libraries that enable the target code to run
+on device. If you target the Intel(R) Xeon Phi (TM) coprocessor, these
+libraries can be taken from MPSS too.
+
+
+How to Build the Intel(R) Offload Runtime Library
+=================================================
+
+The Makefile at the top-level will attempt to detect what it needs to
+build the Intel(R) Offload Runtime Library. To see the default settings,
+type:
+
+make info
+
+You can change the Makefile's behavior with the following options:
+
+root_dir: The path to the top-level directory containing the
+ top-level Makefile. By default, this will take on the
+ value of the current working directory.
+
+build_dir: The path to the build directory. By default, this will
+ take on value [root_dir]/build.
+
+mpss_dir: The path to the Intel(R) Manycore Platform Software
+ Stack install directory. By default, this will take on
+ the value of operating system's root directory.
+
+libiomp_host_dir: The path to the host Intel(R) OpenMP* Runtime Library.
+ This option is required when the host compiler is other
+ than icc.
+
+libiomp_target_dir: The path to the target Intel(R) OpenMP* Runtime
+ Library. This option is required when the target
+ compiler is other than icc.
+
+omp_header_dir: The path to the header file <omp.h> of Intel(R) OpenMP*
+ Runtime Library. This option is required if either host
+ or target compiler is other than icc.
+
+os_host: Operating system on host. Currently supports only
+ "linux" which is set by default.
+
+os_target: Operating system on target device. Currently supports
+ only "linux" which is set by default.
+
+compiler_host: Which compiler to use for the build of the host part.
+ Defaults to "gcc"*. Also supports "icc" and "clang"*.
+ You should provide the full path to the compiler or it
+ should be in the user's path.
+
+compiler_host: Which compiler to use for the build of the target part.
+ Defaults to "gcc"*. Also supports "icc" and "clang"*.
+ You should provide the full path to the compiler or it
+ should be in the user's path.
+
+options_host: Additional options for the host compiler.
+
+options_target: Additional options for the target compiler.
+
+To use any of the options above, simple add <option_name>=<value>. For
+example, if you want to build with icc instead of gcc, type:
+
+make compiler_host=icc compiler_target=icc
+
+
+Supported RTL Build Configurations
+==================================
+
+Supported Architectures: Intel(R) 64, and Intel(R) Many Integrated
+Core Architecture
+
+ ---------------------------------------------
+ | icc/icl | gcc | clang |
+--------------|---------------|---------------------------|
+| Linux* OS | Yes | Yes(1) | Yes(1) |
+| OS X* | No | No | No |
+| Windows* OS | No | No | No |
+-----------------------------------------------------------
+
+(1) Liboffload requires _rdtsc intrinsic, which may be unsupported by some
+ versions of compiler. In this case you need to include src/rdtsc.h
+ manually by using Makefile options options_host and options_target:
+
+ make options_host="-include src/rdtsc.h" options_target="-include src/rdtsc.h"
+
+-----------------------------------------------------------------------
+
+Notices
+=======
+
+*Other names and brands may be claimed as the property of others.
diff --git a/final/offload/doc/Reference.pdf b/final/offload/doc/Reference.pdf
new file mode 100644
index 0000000..b9176f0
--- /dev/null
+++ b/final/offload/doc/Reference.pdf
@@ -0,0 +1,115996 @@
+%PDF-1.4
+%ÐÔÅØ
+5 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+8 0 obj
+(\376\377\000N\000a\000m\000e\000s\000p\000a\000c\000e\000\040\000I\000n\000d\000e\000x)
+endobj
+9 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+12 0 obj
+(\376\377\000N\000a\000m\000e\000s\000p\000a\000c\000e\000\040\000L\000i\000s\000t)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+16 0 obj
+(\376\377\000H\000i\000e\000r\000a\000r\000c\000h\000i\000c\000a\000l\000\040\000I\000n\000d\000e\000x)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+20 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000H\000i\000e\000r\000a\000r\000c\000h\000y)
+endobj
+21 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+24 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+28 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t)
+endobj
+29 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+32 0 obj
+(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x)
+endobj
+33 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+36 0 obj
+(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t)
+endobj
+37 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+40 0 obj
+(\376\377\000N\000a\000m\000e\000s\000p\000a\000c\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+41 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+44 0 obj
+(\376\377\000C\000O\000I\000\040\000N\000a\000m\000e\000s\000p\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsection.5.1.1) >>
+endobj
+48 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+49 0 obj
+<< /S /GoTo /D (section*.4) >>
+endobj
+52 0 obj
+(\376\377\000f\000i\000n\000i)
+endobj
+53 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+56 0 obj
+(\376\377\000i\000n\000i\000t)
+endobj
+57 0 obj
+<< /S /GoTo /D (subsection.5.1.2) >>
+endobj
+60 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+61 0 obj
+<< /S /GoTo /D (section*.6) >>
+endobj
+64 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000C\000o\000p\000y)
+endobj
+65 0 obj
+<< /S /GoTo /D (section*.7) >>
+endobj
+68 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000C\000r\000e\000a\000t\000e)
+endobj
+69 0 obj
+<< /S /GoTo /D (section*.8) >>
+endobj
+72 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000C\000r\000e\000a\000t\000e\000F\000r\000o\000m\000M\000e\000m\000o\000r\000y)
+endobj
+73 0 obj
+<< /S /GoTo /D (section*.9) >>
+endobj
+76 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000D\000e\000s\000t\000r\000o\000y)
+endobj
+77 0 obj
+<< /S /GoTo /D (section*.10) >>
+endobj
+80 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000G\000e\000t\000S\000i\000n\000k\000A\000d\000d\000r\000e\000s\000s)
+endobj
+81 0 obj
+<< /S /GoTo /D (section*.11) >>
+endobj
+84 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000M\000a\000p)
+endobj
+85 0 obj
+<< /S /GoTo /D (section*.12) >>
+endobj
+88 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000R\000e\000a\000d)
+endobj
+89 0 obj
+<< /S /GoTo /D (section*.13) >>
+endobj
+92 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000S\000e\000t\000S\000t\000a\000t\000e)
+endobj
+93 0 obj
+<< /S /GoTo /D (section*.14) >>
+endobj
+96 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000U\000n\000m\000a\000p)
+endobj
+97 0 obj
+<< /S /GoTo /D (section*.15) >>
+endobj
+100 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000W\000r\000i\000t\000e)
+endobj
+101 0 obj
+<< /S /GoTo /D (section*.16) >>
+endobj
+104 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e\000G\000e\000t\000C\000o\000u\000n\000t)
+endobj
+105 0 obj
+<< /S /GoTo /D (section*.17) >>
+endobj
+108 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e\000G\000e\000t\000H\000a\000n\000d\000l\000e)
+endobj
+109 0 obj
+<< /S /GoTo /D (section*.18) >>
+endobj
+112 0 obj
+(\376\377\000E\000v\000e\000n\000t\000W\000a\000i\000t)
+endobj
+113 0 obj
+<< /S /GoTo /D (section*.19) >>
+endobj
+116 0 obj
+(\376\377\000i\000s\000\137\000a\000v\000a\000i\000l\000a\000b\000l\000e)
+endobj
+117 0 obj
+<< /S /GoTo /D (section*.20) >>
+endobj
+120 0 obj
+(\376\377\000l\000i\000b\000\137\000h\000a\000n\000d\000l\000e)
+endobj
+121 0 obj
+<< /S /GoTo /D (section*.21) >>
+endobj
+124 0 obj
+(\376\377\000P\000e\000r\000f\000G\000e\000t\000C\000y\000c\000l\000e\000F\000r\000e\000q\000u\000e\000n\000c\000y)
+endobj
+125 0 obj
+<< /S /GoTo /D (section*.22) >>
+endobj
+128 0 obj
+(\376\377\000P\000i\000p\000e\000l\000i\000n\000e\000C\000r\000e\000a\000t\000e)
+endobj
+129 0 obj
+<< /S /GoTo /D (section*.23) >>
+endobj
+132 0 obj
+(\376\377\000P\000i\000p\000e\000l\000i\000n\000e\000D\000e\000s\000t\000r\000o\000y)
+endobj
+133 0 obj
+<< /S /GoTo /D (section*.24) >>
+endobj
+136 0 obj
+(\376\377\000P\000i\000p\000e\000l\000i\000n\000e\000R\000u\000n\000F\000u\000n\000c\000t\000i\000o\000n)
+endobj
+137 0 obj
+<< /S /GoTo /D (section*.25) >>
+endobj
+140 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000C\000r\000e\000a\000t\000e\000F\000r\000o\000m\000M\000e\000m\000o\000r\000y)
+endobj
+141 0 obj
+<< /S /GoTo /D (section*.26) >>
+endobj
+144 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000D\000e\000s\000t\000r\000o\000y)
+endobj
+145 0 obj
+<< /S /GoTo /D (section*.27) >>
+endobj
+148 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000G\000e\000t\000F\000u\000n\000c\000t\000i\000o\000n\000H\000a\000n\000d\000l\000e\000s)
+endobj
+149 0 obj
+<< /S /GoTo /D (section*.28) >>
+endobj
+152 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000L\000o\000a\000d\000L\000i\000b\000r\000a\000r\000y\000F\000r\000o\000m\000M\000e\000m\000o\000r\000y)
+endobj
+153 0 obj
+<< /S /GoTo /D (section*.29) >>
+endobj
+156 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000R\000e\000g\000i\000s\000t\000e\000r\000L\000i\000b\000r\000a\000r\000i\000e\000s)
+endobj
+157 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+160 0 obj
+(\376\377\000O\000R\000S\000L\000\040\000N\000a\000m\000e\000s\000p\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+164 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+165 0 obj
+<< /S /GoTo /D (section*.32) >>
+endobj
+168 0 obj
+(\376\377\000i\000n\000i\000t)
+endobj
+169 0 obj
+<< /S /GoTo /D (section*.33) >>
+endobj
+172 0 obj
+(\376\377\000r\000e\000l\000e\000a\000s\000e)
+endobj
+173 0 obj
+<< /S /GoTo /D (section*.34) >>
+endobj
+176 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e)
+endobj
+177 0 obj
+<< /S /GoTo /D (section*.35) >>
+endobj
+180 0 obj
+(\376\377\000t\000r\000y\000\137\000r\000e\000s\000e\000r\000v\000e)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+184 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+185 0 obj
+<< /S /GoTo /D (section*.36) >>
+endobj
+188 0 obj
+(\376\377\000i\000s\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+189 0 obj
+<< /S /GoTo /D (section*.37) >>
+endobj
+192 0 obj
+(\376\377\000m\000y\000\137\000t\000a\000g)
+endobj
+193 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+196 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+197 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+200 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000t\000u\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.6.1.1) >>
+endobj
+204 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsection.6.1.2) >>
+endobj
+208 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+209 0 obj
+<< /S /GoTo /D (section*.39) >>
+endobj
+212 0 obj
+(\376\377\000d\000a\000t\000a\000\137\000r\000e\000c\000e\000i\000v\000e\000d)
+endobj
+213 0 obj
+<< /S /GoTo /D (section*.40) >>
+endobj
+216 0 obj
+(\376\377\000d\000a\000t\000a\000\137\000s\000e\000n\000t)
+endobj
+217 0 obj
+<< /S /GoTo /D (section*.41) >>
+endobj
+220 0 obj
+(\376\377\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+221 0 obj
+<< /S /GoTo /D (section*.42) >>
+endobj
+224 0 obj
+(\376\377\000r\000e\000s\000u\000l\000t)
+endobj
+225 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+228 0 obj
+(\376\377\000a\000r\000r\000\137\000d\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+229 0 obj
+<< /S /GoTo /D (subsection.6.2.1) >>
+endobj
+232 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.6.2.2) >>
+endobj
+236 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+237 0 obj
+<< /S /GoTo /D (section*.44) >>
+endobj
+240 0 obj
+(\376\377\000b\000a\000s\000e)
+endobj
+241 0 obj
+<< /S /GoTo /D (section*.45) >>
+endobj
+244 0 obj
+(\376\377\000d\000i\000m)
+endobj
+245 0 obj
+<< /S /GoTo /D (section*.46) >>
+endobj
+248 0 obj
+(\376\377\000r\000a\000n\000k)
+endobj
+249 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+252 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+253 0 obj
+<< /S /GoTo /D (subsection.6.3.1) >>
+endobj
+256 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+257 0 obj
+<< /S /GoTo /D (subsection.6.3.2) >>
+endobj
+260 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+261 0 obj
+<< /S /GoTo /D (section*.48) >>
+endobj
+264 0 obj
+(\376\377\000B\000a\000s\000e)
+endobj
+265 0 obj
+<< /S /GoTo /D (section*.49) >>
+endobj
+268 0 obj
+(\376\377\000D\000i\000m)
+endobj
+269 0 obj
+<< /S /GoTo /D (section*.50) >>
+endobj
+272 0 obj
+(\376\377\000F\000l\000a\000g\000s)
+endobj
+273 0 obj
+<< /S /GoTo /D (section*.51) >>
+endobj
+276 0 obj
+(\376\377\000L\000e\000n)
+endobj
+277 0 obj
+<< /S /GoTo /D (section*.52) >>
+endobj
+280 0 obj
+(\376\377\000O\000f\000f\000s\000e\000t)
+endobj
+281 0 obj
+<< /S /GoTo /D (section*.53) >>
+endobj
+284 0 obj
+(\376\377\000R\000a\000n\000k)
+endobj
+285 0 obj
+<< /S /GoTo /D (section*.54) >>
+endobj
+288 0 obj
+(\376\377\000R\000e\000s\000e\000r\000v\000e\000d)
+endobj
+289 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+292 0 obj
+(\376\377\000A\000u\000t\000o\000D\000a\000t\000a\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+296 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.6.4.2) >>
+endobj
+300 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+301 0 obj
+<< /S /GoTo /D (section*.58) >>
+endobj
+304 0 obj
+(\376\377\000A\000u\000t\000o\000D\000a\000t\000a)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsection.6.4.3) >>
+endobj
+308 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+309 0 obj
+<< /S /GoTo /D (section*.59) >>
+endobj
+312 0 obj
+(\376\377\000a\000d\000d\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+313 0 obj
+<< /S /GoTo /D (section*.60) >>
+endobj
+316 0 obj
+(\376\377\000g\000e\000t\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+317 0 obj
+<< /S /GoTo /D (section*.61) >>
+endobj
+320 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r\000<)
+endobj
+321 0 obj
+<< /S /GoTo /D (section*.62) >>
+endobj
+324 0 obj
+(\376\377\000r\000e\000m\000o\000v\000e\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsection.6.4.4) >>
+endobj
+328 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+329 0 obj
+<< /S /GoTo /D (section*.63) >>
+endobj
+332 0 obj
+(\376\377\000c\000p\000u\000\137\000a\000d\000d\000r)
+endobj
+333 0 obj
+<< /S /GoTo /D (section*.64) >>
+endobj
+336 0 obj
+(\376\377\000r\000e\000f\000\137\000c\000o\000u\000n\000t)
+endobj
+337 0 obj
+<< /S /GoTo /D (section.6.5) >>
+endobj
+340 0 obj
+(\376\377\000V\000a\000r\000L\000i\000s\000t\000:\000:\000B\000u\000f\000E\000n\000t\000r\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsection.6.5.1) >>
+endobj
+344 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.6.5.2) >>
+endobj
+348 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+349 0 obj
+<< /S /GoTo /D (section*.66) >>
+endobj
+352 0 obj
+(\376\377\000a\000d\000d\000r)
+endobj
+353 0 obj
+<< /S /GoTo /D (section*.67) >>
+endobj
+356 0 obj
+(\376\377\000n\000a\000m\000e)
+endobj
+357 0 obj
+<< /S /GoTo /D (section.6.6) >>
+endobj
+360 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r\000:\000:\000C\000a\000r\000d\000E\000n\000v\000V\000a\000r\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.6.6.1) >>
+endobj
+364 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.6.6.2) >>
+endobj
+368 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+369 0 obj
+<< /S /GoTo /D (section*.70) >>
+endobj
+372 0 obj
+(\376\377\000C\000a\000r\000d\000E\000n\000v\000V\000a\000r\000s)
+endobj
+373 0 obj
+<< /S /GoTo /D (section*.71) >>
+endobj
+376 0 obj
+(\376\377\000C\000a\000r\000d\000E\000n\000v\000V\000a\000r\000s)
+endobj
+377 0 obj
+<< /S /GoTo /D (section*.72) >>
+endobj
+380 0 obj
+(\376\377\000C\000a\000r\000d\000E\000n\000v\000V\000a\000r\000s)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsection.6.6.3) >>
+endobj
+384 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+385 0 obj
+<< /S /GoTo /D (section*.73) >>
+endobj
+388 0 obj
+(\376\377\000a\000d\000d\000\137\000n\000e\000w\000\137\000e\000n\000v\000\137\000v\000a\000r)
+endobj
+389 0 obj
+<< /S /GoTo /D (section*.74) >>
+endobj
+392 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000v\000a\000r)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsection.6.6.4) >>
+endobj
+396 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+397 0 obj
+<< /S /GoTo /D (section*.75) >>
+endobj
+400 0 obj
+(\376\377\000c\000a\000r\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+401 0 obj
+<< /S /GoTo /D (section*.76) >>
+endobj
+404 0 obj
+(\376\377\000e\000n\000v\000\137\000v\000a\000r\000s)
+endobj
+405 0 obj
+<< /S /GoTo /D (section.6.7) >>
+endobj
+408 0 obj
+(\376\377\000C\000e\000a\000n\000R\000e\000a\000d\000D\000i\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.6.7.1) >>
+endobj
+412 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+413 0 obj
+<< /S /GoTo /D (subsection.6.7.2) >>
+endobj
+416 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+417 0 obj
+<< /S /GoTo /D (section*.78) >>
+endobj
+420 0 obj
+(\376\377\000c\000o\000u\000n\000t)
+endobj
+421 0 obj
+<< /S /GoTo /D (section*.79) >>
+endobj
+424 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+425 0 obj
+<< /S /GoTo /D (section.6.8) >>
+endobj
+428 0 obj
+(\376\377\000C\000e\000a\000n\000R\000e\000a\000d\000R\000a\000n\000g\000e\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsection.6.8.1) >>
+endobj
+432 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsection.6.8.2) >>
+endobj
+436 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+437 0 obj
+<< /S /GoTo /D (section*.81) >>
+endobj
+440 0 obj
+(\376\377\000c\000u\000r\000r\000e\000n\000t\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+441 0 obj
+<< /S /GoTo /D (section*.82) >>
+endobj
+444 0 obj
+(\376\377\000D\000i\000m)
+endobj
+445 0 obj
+<< /S /GoTo /D (section*.83) >>
+endobj
+448 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+449 0 obj
+<< /S /GoTo /D (section*.84) >>
+endobj
+452 0 obj
+(\376\377\000l\000a\000s\000t\000\137\000n\000o\000n\000c\000o\000n\000t\000\137\000i\000n\000d)
+endobj
+453 0 obj
+<< /S /GoTo /D (section*.85) >>
+endobj
+456 0 obj
+(\376\377\000p\000t\000r)
+endobj
+457 0 obj
+<< /S /GoTo /D (section*.86) >>
+endobj
+460 0 obj
+(\376\377\000r\000a\000n\000g\000e\000\137\000m\000a\000x\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+461 0 obj
+<< /S /GoTo /D (section*.87) >>
+endobj
+464 0 obj
+(\376\377\000r\000a\000n\000g\000e\000\137\000s\000i\000z\000e)
+endobj
+465 0 obj
+<< /S /GoTo /D (section.6.9) >>
+endobj
+468 0 obj
+(\376\377\000d\000i\000m\000\137\000d\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsection.6.9.1) >>
+endobj
+472 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsection.6.9.2) >>
+endobj
+476 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+477 0 obj
+<< /S /GoTo /D (section*.89) >>
+endobj
+480 0 obj
+(\376\377\000l\000i\000n\000d\000e\000x)
+endobj
+481 0 obj
+<< /S /GoTo /D (section*.90) >>
+endobj
+484 0 obj
+(\376\377\000l\000o\000w\000e\000r)
+endobj
+485 0 obj
+<< /S /GoTo /D (section*.91) >>
+endobj
+488 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+489 0 obj
+<< /S /GoTo /D (section*.92) >>
+endobj
+492 0 obj
+(\376\377\000s\000t\000r\000i\000d\000e)
+endobj
+493 0 obj
+<< /S /GoTo /D (section*.93) >>
+endobj
+496 0 obj
+(\376\377\000u\000p\000p\000e\000r)
+endobj
+497 0 obj
+<< /S /GoTo /D (section.6.10) >>
+endobj
+500 0 obj
+(\376\377\000D\000i\000m\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsection.6.10.1) >>
+endobj
+504 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsection.6.10.2) >>
+endobj
+508 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+509 0 obj
+<< /S /GoTo /D (section*.95) >>
+endobj
+512 0 obj
+(\376\377\000E\000x\000t\000e\000n\000t)
+endobj
+513 0 obj
+<< /S /GoTo /D (section*.96) >>
+endobj
+516 0 obj
+(\376\377\000L\000o\000w\000e\000r\000B\000o\000u\000n\000d)
+endobj
+517 0 obj
+<< /S /GoTo /D (section*.97) >>
+endobj
+520 0 obj
+(\376\377\000M\000u\000l\000t)
+endobj
+521 0 obj
+<< /S /GoTo /D (section.6.11) >>
+endobj
+524 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.6.11.1) >>
+endobj
+528 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+529 0 obj
+<< /S /GoTo /D (subsection.6.11.2) >>
+endobj
+532 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+533 0 obj
+<< /S /GoTo /D (section*.106) >>
+endobj
+536 0 obj
+(\376\377\000P\000t\000r\000S\000e\000t)
+endobj
+537 0 obj
+<< /S /GoTo /D (section*.107) >>
+endobj
+540 0 obj
+(\376\377\000S\000i\000g\000n\000a\000l\000M\000a\000p)
+endobj
+541 0 obj
+<< /S /GoTo /D (subsection.6.11.3) >>
+endobj
+544 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+545 0 obj
+<< /S /GoTo /D (section*.108) >>
+endobj
+548 0 obj
+(\376\377\000a\000n\000o\000n\000y\000m\000o\000u\000s\000\040\000e\000n\000u\000m)
+endobj
+549 0 obj
+<< /S /GoTo /D (subsection.6.11.4) >>
+endobj
+552 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+553 0 obj
+<< /S /GoTo /D (section*.109) >>
+endobj
+556 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e)
+endobj
+557 0 obj
+<< /S /GoTo /D (section*.110) >>
+endobj
+560 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e)
+endobj
+561 0 obj
+<< /S /GoTo /D (subsection.6.11.5) >>
+endobj
+564 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+565 0 obj
+<< /S /GoTo /D (section*.111) >>
+endobj
+568 0 obj
+(\376\377\000a\000d\000d\000\137\000l\000i\000b)
+endobj
+569 0 obj
+<< /S /GoTo /D (section*.112) >>
+endobj
+572 0 obj
+(\376\377\000a\000d\000d\000\137\000s\000i\000g\000n\000a\000l)
+endobj
+573 0 obj
+<< /S /GoTo /D (section*.113) >>
+endobj
+576 0 obj
+(\376\377\000c\000o\000m\000p\000u\000t\000e)
+endobj
+577 0 obj
+<< /S /GoTo /D (section*.114) >>
+endobj
+580 0 obj
+(\376\377\000d\000e\000s\000t\000r\000o\000y\000\137\000t\000h\000r\000e\000a\000d\000\137\000d\000a\000t\000a)
+endobj
+581 0 obj
+<< /S /GoTo /D (section*.115) >>
+endobj
+584 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000a\000u\000t\000o\000\137\000d\000a\000t\000a)
+endobj
+585 0 obj
+<< /S /GoTo /D (section*.116) >>
+endobj
+588 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+589 0 obj
+<< /S /GoTo /D (section*.117) >>
+endobj
+592 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000s\000i\000g\000n\000a\000l)
+endobj
+593 0 obj
+<< /S /GoTo /D (section*.118) >>
+endobj
+596 0 obj
+(\376\377\000f\000i\000n\000i\000\137\000p\000r\000o\000c\000e\000s\000s)
+endobj
+597 0 obj
+<< /S /GoTo /D (section*.119) >>
+endobj
+600 0 obj
+(\376\377\000g\000e\000t\000\137\000a\000u\000t\000o\000\137\000v\000a\000r\000s)
+endobj
+601 0 obj
+<< /S /GoTo /D (section*.120) >>
+endobj
+604 0 obj
+(\376\377\000g\000e\000t\000\137\000l\000o\000g\000i\000c\000a\000l\000\137\000i\000n\000d\000e\000x)
+endobj
+605 0 obj
+<< /S /GoTo /D (section*.121) >>
+endobj
+608 0 obj
+(\376\377\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000i\000n\000d\000e\000x)
+endobj
+609 0 obj
+<< /S /GoTo /D (section*.122) >>
+endobj
+612 0 obj
+(\376\377\000g\000e\000t\000\137\000p\000i\000p\000e\000l\000i\000n\000e)
+endobj
+613 0 obj
+<< /S /GoTo /D (section*.123) >>
+endobj
+616 0 obj
+(\376\377\000g\000e\000t\000\137\000p\000r\000o\000c\000e\000s\000s)
+endobj
+617 0 obj
+<< /S /GoTo /D (section*.124) >>
+endobj
+620 0 obj
+(\376\377\000i\000n\000i\000t)
+endobj
+621 0 obj
+<< /S /GoTo /D (section*.125) >>
+endobj
+624 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+625 0 obj
+<< /S /GoTo /D (section*.126) >>
+endobj
+628 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000p\000r\000o\000c\000e\000s\000s)
+endobj
+629 0 obj
+<< /S /GoTo /D (section*.127) >>
+endobj
+632 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+633 0 obj
+<< /S /GoTo /D (section*.128) >>
+endobj
+636 0 obj
+(\376\377\000i\000n\000s\000e\000r\000t\000\137\000a\000u\000t\000o\000\137\000d\000a\000t\000a)
+endobj
+637 0 obj
+<< /S /GoTo /D (section*.129) >>
+endobj
+640 0 obj
+(\376\377\000i\000n\000s\000e\000r\000t\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+641 0 obj
+<< /S /GoTo /D (section*.130) >>
+endobj
+644 0 obj
+(\376\377\000l\000o\000a\000d\000\137\000l\000i\000b\000r\000a\000r\000i\000e\000s)
+endobj
+645 0 obj
+<< /S /GoTo /D (section*.131) >>
+endobj
+648 0 obj
+(\376\377\000r\000e\000m\000o\000v\000e\000\137\000a\000u\000t\000o\000\137\000d\000a\000t\000a)
+endobj
+649 0 obj
+<< /S /GoTo /D (section*.132) >>
+endobj
+652 0 obj
+(\376\377\000r\000e\000m\000o\000v\000e\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+653 0 obj
+<< /S /GoTo /D (section*.133) >>
+endobj
+656 0 obj
+(\376\377\000s\000e\000t\000\137\000i\000n\000d\000e\000x\000e\000s)
+endobj
+657 0 obj
+<< /S /GoTo /D (subsection.6.11.6) >>
+endobj
+660 0 obj
+(\376\377\000F\000r\000i\000e\000n\000d\000s\000\040\000A\000n\000d\000\040\000R\000e\000l\000a\000t\000e\000d\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+661 0 obj
+<< /S /GoTo /D (section*.134) >>
+endobj
+664 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000i\000n\000i\000\137\000l\000i\000b\000r\000a\000r\000y)
+endobj
+665 0 obj
+<< /S /GoTo /D (section*.135) >>
+endobj
+668 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000o\000n\000c\000e)
+endobj
+669 0 obj
+<< /S /GoTo /D (subsection.6.11.7) >>
+endobj
+672 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+673 0 obj
+<< /S /GoTo /D (section*.136) >>
+endobj
+676 0 obj
+(\376\377\000c\000\137\000s\000i\000g\000n\000a\000l\000\137\000m\000a\000x)
+endobj
+677 0 obj
+<< /S /GoTo /D (section*.137) >>
+endobj
+680 0 obj
+(\376\377\000c\000\137\000s\000i\000g\000n\000a\000l\000\137\000n\000a\000m\000e\000s)
+endobj
+681 0 obj
+<< /S /GoTo /D (section*.138) >>
+endobj
+684 0 obj
+(\376\377\000m\000\137\000f\000u\000n\000c\000\137\000n\000a\000m\000e\000s)
+endobj
+685 0 obj
+<< /S /GoTo /D (section*.139) >>
+endobj
+688 0 obj
+(\376\377\000m\000\137\000f\000u\000n\000c\000s)
+endobj
+689 0 obj
+<< /S /GoTo /D (section*.140) >>
+endobj
+692 0 obj
+(\376\377\000m\000\137\000i\000m\000a\000g\000e\000s)
+endobj
+693 0 obj
+<< /S /GoTo /D (section*.141) >>
+endobj
+696 0 obj
+(\376\377\000m\000\137\000i\000n\000d\000e\000x)
+endobj
+697 0 obj
+<< /S /GoTo /D (section*.142) >>
+endobj
+700 0 obj
+(\376\377\000m\000\137\000l\000o\000c\000k)
+endobj
+701 0 obj
+<< /S /GoTo /D (section*.143) >>
+endobj
+704 0 obj
+(\376\377\000m\000\137\000p\000e\000r\000s\000i\000s\000t\000\137\000l\000i\000s\000t)
+endobj
+705 0 obj
+<< /S /GoTo /D (section*.144) >>
+endobj
+708 0 obj
+(\376\377\000m\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000i\000n\000d\000e\000x)
+endobj
+709 0 obj
+<< /S /GoTo /D (section*.145) >>
+endobj
+712 0 obj
+(\376\377\000m\000\137\000p\000r\000o\000c\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+713 0 obj
+<< /S /GoTo /D (section*.146) >>
+endobj
+716 0 obj
+(\376\377\000m\000\137\000p\000r\000o\000c\000e\000s\000s)
+endobj
+717 0 obj
+<< /S /GoTo /D (section*.147) >>
+endobj
+720 0 obj
+(\376\377\000m\000\137\000p\000t\000r\000\137\000l\000o\000c\000k)
+endobj
+721 0 obj
+<< /S /GoTo /D (section*.148) >>
+endobj
+724 0 obj
+(\376\377\000m\000\137\000p\000t\000r\000\137\000s\000e\000t)
+endobj
+725 0 obj
+<< /S /GoTo /D (section*.149) >>
+endobj
+728 0 obj
+(\376\377\000m\000\137\000r\000e\000a\000d\000y)
+endobj
+729 0 obj
+<< /S /GoTo /D (section*.150) >>
+endobj
+732 0 obj
+(\376\377\000m\000\137\000s\000i\000g\000n\000a\000l\000\137\000l\000o\000c\000k)
+endobj
+733 0 obj
+<< /S /GoTo /D (section*.151) >>
+endobj
+736 0 obj
+(\376\377\000m\000\137\000s\000i\000g\000n\000a\000l\000\137\000m\000a\000p)
+endobj
+737 0 obj
+<< /S /GoTo /D (section.6.12) >>
+endobj
+740 0 obj
+(\376\377\000F\000u\000n\000c\000T\000a\000b\000l\000e\000:\000:\000E\000n\000t\000r\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+741 0 obj
+<< /S /GoTo /D (subsection.6.12.1) >>
+endobj
+744 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+745 0 obj
+<< /S /GoTo /D (subsection.6.12.2) >>
+endobj
+748 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+749 0 obj
+<< /S /GoTo /D (section*.153) >>
+endobj
+752 0 obj
+(\376\377\000f\000u\000n\000c)
+endobj
+753 0 obj
+<< /S /GoTo /D (section*.154) >>
+endobj
+756 0 obj
+(\376\377\000n\000a\000m\000e)
+endobj
+757 0 obj
+<< /S /GoTo /D (section.6.13) >>
+endobj
+760 0 obj
+(\376\377\000V\000a\000r\000T\000a\000b\000l\000e\000:\000:\000E\000n\000t\000r\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+761 0 obj
+<< /S /GoTo /D (subsection.6.13.1) >>
+endobj
+764 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+765 0 obj
+<< /S /GoTo /D (subsection.6.13.2) >>
+endobj
+768 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+769 0 obj
+<< /S /GoTo /D (section*.156) >>
+endobj
+772 0 obj
+(\376\377\000a\000d\000d\000r)
+endobj
+773 0 obj
+<< /S /GoTo /D (section*.157) >>
+endobj
+776 0 obj
+(\376\377\000n\000a\000m\000e)
+endobj
+777 0 obj
+<< /S /GoTo /D (section.6.14) >>
+endobj
+780 0 obj
+(\376\377\000F\000p\000t\000r\000T\000a\000b\000l\000e\000E\000n\000t\000r\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+781 0 obj
+<< /S /GoTo /D (subsection.6.14.1) >>
+endobj
+784 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+785 0 obj
+<< /S /GoTo /D (subsection.6.14.2) >>
+endobj
+788 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+789 0 obj
+<< /S /GoTo /D (section*.159) >>
+endobj
+792 0 obj
+(\376\377\000f\000u\000n\000c\000A\000d\000d\000r)
+endobj
+793 0 obj
+<< /S /GoTo /D (section*.160) >>
+endobj
+796 0 obj
+(\376\377\000f\000u\000n\000c\000N\000a\000m\000e)
+endobj
+797 0 obj
+<< /S /GoTo /D (section*.161) >>
+endobj
+800 0 obj
+(\376\377\000l\000o\000c\000a\000l\000T\000h\000u\000n\000k\000A\000d\000d\000r)
+endobj
+801 0 obj
+<< /S /GoTo /D (section.6.15) >>
+endobj
+804 0 obj
+(\376\377\000F\000u\000n\000c\000L\000i\000s\000t\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+805 0 obj
+<< /S /GoTo /D (subsection.6.15.1) >>
+endobj
+808 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+809 0 obj
+<< /S /GoTo /D (subsection.6.15.2) >>
+endobj
+812 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+813 0 obj
+<< /S /GoTo /D (section*.165) >>
+endobj
+816 0 obj
+(\376\377\000F\000u\000n\000c\000L\000i\000s\000t)
+endobj
+817 0 obj
+<< /S /GoTo /D (subsection.6.15.3) >>
+endobj
+820 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+821 0 obj
+<< /S /GoTo /D (section*.166) >>
+endobj
+824 0 obj
+(\376\377\000a\000d\000d\000\137\000t\000a\000b\000l\000e)
+endobj
+825 0 obj
+<< /S /GoTo /D (section*.167) >>
+endobj
+828 0 obj
+(\376\377\000d\000u\000m\000p)
+endobj
+829 0 obj
+<< /S /GoTo /D (section*.168) >>
+endobj
+832 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000a\000d\000d\000r)
+endobj
+833 0 obj
+<< /S /GoTo /D (section*.169) >>
+endobj
+836 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000n\000a\000m\000e)
+endobj
+837 0 obj
+<< /S /GoTo /D (section*.170) >>
+endobj
+840 0 obj
+(\376\377\000m\000a\000x\000\137\000n\000a\000m\000e\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+841 0 obj
+<< /S /GoTo /D (subsection.6.15.4) >>
+endobj
+844 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+845 0 obj
+<< /S /GoTo /D (section*.171) >>
+endobj
+848 0 obj
+(\376\377\000m\000\137\000m\000a\000x\000\137\000n\000a\000m\000e\000\137\000l\000e\000n)
+endobj
+849 0 obj
+<< /S /GoTo /D (section.6.16) >>
+endobj
+852 0 obj
+(\376\377\000F\000u\000n\000c\000T\000a\000b\000l\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+853 0 obj
+<< /S /GoTo /D (subsection.6.16.1) >>
+endobj
+856 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+857 0 obj
+<< /S /GoTo /D (subsection.6.16.2) >>
+endobj
+860 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+861 0 obj
+<< /S /GoTo /D (section*.174) >>
+endobj
+864 0 obj
+(\376\377\000e\000n\000t\000r\000i\000e\000s)
+endobj
+865 0 obj
+<< /S /GoTo /D (section*.175) >>
+endobj
+868 0 obj
+(\376\377\000m\000a\000x\000\137\000n\000a\000m\000e\000\137\000l\000e\000n)
+endobj
+869 0 obj
+<< /S /GoTo /D (section.6.17) >>
+endobj
+872 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+873 0 obj
+<< /S /GoTo /D (subsection.6.17.1) >>
+endobj
+876 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+877 0 obj
+<< /S /GoTo /D (subsection.6.17.2) >>
+endobj
+880 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+881 0 obj
+<< /S /GoTo /D (section*.177) >>
+endobj
+884 0 obj
+(\376\377\000c\000o\000n\000s\000o\000l\000e\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+885 0 obj
+<< /S /GoTo /D (section*.178) >>
+endobj
+888 0 obj
+(\376\377\000d\000a\000t\000a)
+endobj
+889 0 obj
+<< /S /GoTo /D (section*.179) >>
+endobj
+892 0 obj
+(\376\377\000d\000a\000t\000a\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+893 0 obj
+<< /S /GoTo /D (section*.180) >>
+endobj
+896 0 obj
+(\376\377\000i\000n\000\137\000d\000a\000t\000a\000l\000e\000n)
+endobj
+897 0 obj
+<< /S /GoTo /D (section*.181) >>
+endobj
+900 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+901 0 obj
+<< /S /GoTo /D (section*.182) >>
+endobj
+904 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\137\000l\000e\000v\000e\000l)
+endobj
+905 0 obj
+<< /S /GoTo /D (section*.183) >>
+endobj
+908 0 obj
+(\376\377\000o\000u\000t\000\137\000d\000a\000t\000a\000l\000e\000n)
+endobj
+909 0 obj
+<< /S /GoTo /D (section*.184) >>
+endobj
+912 0 obj
+(\376\377\000t\000i\000m\000e\000r\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+913 0 obj
+<< /S /GoTo /D (section*.185) >>
+endobj
+916 0 obj
+(\376\377\000v\000a\000r\000s\000\137\000n\000u\000m)
+endobj
+917 0 obj
+<< /S /GoTo /D (section.6.18) >>
+endobj
+920 0 obj
+(\376\377\000I\000m\000a\000g\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+921 0 obj
+<< /S /GoTo /D (subsection.6.18.1) >>
+endobj
+924 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+925 0 obj
+<< /S /GoTo /D (subsection.6.18.2) >>
+endobj
+928 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+929 0 obj
+<< /S /GoTo /D (section*.187) >>
+endobj
+932 0 obj
+(\376\377\000d\000a\000t\000a)
+endobj
+933 0 obj
+<< /S /GoTo /D (section*.188) >>
+endobj
+936 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+937 0 obj
+<< /S /GoTo /D (section.6.19) >>
+endobj
+940 0 obj
+(\376\377\000I\000n\000i\000t\000T\000a\000b\000l\000e\000E\000n\000t\000r\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+941 0 obj
+<< /S /GoTo /D (subsection.6.19.1) >>
+endobj
+944 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+945 0 obj
+<< /S /GoTo /D (subsection.6.19.2) >>
+endobj
+948 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+949 0 obj
+<< /S /GoTo /D (section*.190) >>
+endobj
+952 0 obj
+(\376\377\000f\000u\000n\000c)
+endobj
+953 0 obj
+<< /S /GoTo /D (section.6.20) >>
+endobj
+956 0 obj
+(\376\377\000V\000a\000r\000L\000i\000s\000t\000:\000:\000I\000t\000e\000r\000a\000t\000o\000r\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+957 0 obj
+<< /S /GoTo /D (subsection.6.20.1) >>
+endobj
+960 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+961 0 obj
+<< /S /GoTo /D (subsection.6.20.2) >>
+endobj
+964 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+965 0 obj
+<< /S /GoTo /D (section*.194) >>
+endobj
+968 0 obj
+(\376\377\000I\000t\000e\000r\000a\000t\000o\000r)
+endobj
+969 0 obj
+<< /S /GoTo /D (section*.195) >>
+endobj
+972 0 obj
+(\376\377\000I\000t\000e\000r\000a\000t\000o\000r)
+endobj
+973 0 obj
+<< /S /GoTo /D (subsection.6.20.3) >>
+endobj
+976 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+977 0 obj
+<< /S /GoTo /D (section*.196) >>
+endobj
+980 0 obj
+(\376\377\000n\000e\000w\000\137\000n\000o\000d\000e)
+endobj
+981 0 obj
+<< /S /GoTo /D (section*.197) >>
+endobj
+984 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r\000!\000=)
+endobj
+985 0 obj
+<< /S /GoTo /D (section*.198) >>
+endobj
+988 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r)
+endobj
+989 0 obj
+<< /S /GoTo /D (section*.199) >>
+endobj
+992 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r\000+\000+)
+endobj
+993 0 obj
+<< /S /GoTo /D (section*.200) >>
+endobj
+996 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r\000=\000=)
+endobj
+997 0 obj
+<< /S /GoTo /D (subsection.6.20.4) >>
+endobj
+1000 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1001 0 obj
+<< /S /GoTo /D (section*.201) >>
+endobj
+1004 0 obj
+(\376\377\000m\000\137\000e\000n\000t\000r\000y)
+endobj
+1005 0 obj
+<< /S /GoTo /D (section*.202) >>
+endobj
+1008 0 obj
+(\376\377\000m\000\137\000n\000o\000d\000e)
+endobj
+1009 0 obj
+<< /S /GoTo /D (section.6.21) >>
+endobj
+1012 0 obj
+(\376\377\000k\000m\000p\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1013 0 obj
+<< /S /GoTo /D (subsection.6.21.1) >>
+endobj
+1016 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1017 0 obj
+<< /S /GoTo /D (subsection.6.21.2) >>
+endobj
+1020 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1021 0 obj
+<< /S /GoTo /D (section*.204) >>
+endobj
+1024 0 obj
+(\376\377\000m\000a\000s\000k)
+endobj
+1025 0 obj
+<< /S /GoTo /D (section.6.22) >>
+endobj
+1028 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1029 0 obj
+<< /S /GoTo /D (subsection.6.22.1) >>
+endobj
+1032 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1033 0 obj
+<< /S /GoTo /D (subsection.6.22.2) >>
+endobj
+1036 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1037 0 obj
+<< /S /GoTo /D (section*.206) >>
+endobj
+1040 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1041 0 obj
+<< /S /GoTo /D (section.6.23) >>
+endobj
+1044 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1045 0 obj
+<< /S /GoTo /D (subsection.6.23.1) >>
+endobj
+1048 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1049 0 obj
+<< /S /GoTo /D (subsection.6.23.2) >>
+endobj
+1052 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1053 0 obj
+<< /S /GoTo /D (section*.208) >>
+endobj
+1056 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1057 0 obj
+<< /S /GoTo /D (section.6.24) >>
+endobj
+1060 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1061 0 obj
+<< /S /GoTo /D (subsection.6.24.1) >>
+endobj
+1064 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1065 0 obj
+<< /S /GoTo /D (subsection.6.24.2) >>
+endobj
+1068 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1069 0 obj
+<< /S /GoTo /D (section*.210) >>
+endobj
+1072 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1073 0 obj
+<< /S /GoTo /D (section.6.25) >>
+endobj
+1076 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1077 0 obj
+<< /S /GoTo /D (subsection.6.25.1) >>
+endobj
+1080 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1081 0 obj
+<< /S /GoTo /D (subsection.6.25.2) >>
+endobj
+1084 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1085 0 obj
+<< /S /GoTo /D (section*.212) >>
+endobj
+1088 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1089 0 obj
+<< /S /GoTo /D (section.6.26) >>
+endobj
+1092 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1093 0 obj
+<< /S /GoTo /D (subsection.6.26.1) >>
+endobj
+1096 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1097 0 obj
+<< /S /GoTo /D (subsection.6.26.2) >>
+endobj
+1100 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1101 0 obj
+<< /S /GoTo /D (section*.214) >>
+endobj
+1104 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1105 0 obj
+<< /S /GoTo /D (section.6.27) >>
+endobj
+1108 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1109 0 obj
+<< /S /GoTo /D (subsection.6.27.1) >>
+endobj
+1112 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1113 0 obj
+<< /S /GoTo /D (subsection.6.27.2) >>
+endobj
+1116 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1117 0 obj
+<< /S /GoTo /D (section*.216) >>
+endobj
+1120 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1121 0 obj
+<< /S /GoTo /D (section.6.28) >>
+endobj
+1124 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1125 0 obj
+<< /S /GoTo /D (subsection.6.28.1) >>
+endobj
+1128 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1129 0 obj
+<< /S /GoTo /D (subsection.6.28.2) >>
+endobj
+1132 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1133 0 obj
+<< /S /GoTo /D (section*.218) >>
+endobj
+1136 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1137 0 obj
+<< /S /GoTo /D (section.6.29) >>
+endobj
+1140 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1141 0 obj
+<< /S /GoTo /D (subsection.6.29.1) >>
+endobj
+1144 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1145 0 obj
+<< /S /GoTo /D (subsection.6.29.2) >>
+endobj
+1148 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1149 0 obj
+<< /S /GoTo /D (section*.220) >>
+endobj
+1152 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1153 0 obj
+<< /S /GoTo /D (section.6.30) >>
+endobj
+1156 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1157 0 obj
+<< /S /GoTo /D (subsection.6.30.1) >>
+endobj
+1160 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1161 0 obj
+<< /S /GoTo /D (subsection.6.30.2) >>
+endobj
+1164 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1165 0 obj
+<< /S /GoTo /D (section*.222) >>
+endobj
+1168 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1169 0 obj
+<< /S /GoTo /D (section.6.31) >>
+endobj
+1172 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1173 0 obj
+<< /S /GoTo /D (subsection.6.31.1) >>
+endobj
+1176 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1177 0 obj
+<< /S /GoTo /D (subsection.6.31.2) >>
+endobj
+1180 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1181 0 obj
+<< /S /GoTo /D (section*.224) >>
+endobj
+1184 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1185 0 obj
+<< /S /GoTo /D (section.6.32) >>
+endobj
+1188 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1189 0 obj
+<< /S /GoTo /D (subsection.6.32.1) >>
+endobj
+1192 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1193 0 obj
+<< /S /GoTo /D (subsection.6.32.2) >>
+endobj
+1196 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1197 0 obj
+<< /S /GoTo /D (section*.226) >>
+endobj
+1200 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1201 0 obj
+<< /S /GoTo /D (section.6.33) >>
+endobj
+1204 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1205 0 obj
+<< /S /GoTo /D (subsection.6.33.1) >>
+endobj
+1208 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1209 0 obj
+<< /S /GoTo /D (subsection.6.33.2) >>
+endobj
+1212 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1213 0 obj
+<< /S /GoTo /D (section*.228) >>
+endobj
+1216 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1217 0 obj
+<< /S /GoTo /D (section.6.34) >>
+endobj
+1220 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1221 0 obj
+<< /S /GoTo /D (subsection.6.34.1) >>
+endobj
+1224 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1225 0 obj
+<< /S /GoTo /D (subsection.6.34.2) >>
+endobj
+1228 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1229 0 obj
+<< /S /GoTo /D (section*.230) >>
+endobj
+1232 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1233 0 obj
+<< /S /GoTo /D (section.6.35) >>
+endobj
+1236 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1237 0 obj
+<< /S /GoTo /D (subsection.6.35.1) >>
+endobj
+1240 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1241 0 obj
+<< /S /GoTo /D (subsection.6.35.2) >>
+endobj
+1244 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1245 0 obj
+<< /S /GoTo /D (section*.232) >>
+endobj
+1248 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1249 0 obj
+<< /S /GoTo /D (section.6.36) >>
+endobj
+1252 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1253 0 obj
+<< /S /GoTo /D (subsection.6.36.1) >>
+endobj
+1256 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1257 0 obj
+<< /S /GoTo /D (subsection.6.36.2) >>
+endobj
+1260 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1261 0 obj
+<< /S /GoTo /D (section*.234) >>
+endobj
+1264 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1265 0 obj
+<< /S /GoTo /D (section.6.37) >>
+endobj
+1268 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1269 0 obj
+<< /S /GoTo /D (subsection.6.37.1) >>
+endobj
+1272 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1273 0 obj
+<< /S /GoTo /D (subsection.6.37.2) >>
+endobj
+1276 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1277 0 obj
+<< /S /GoTo /D (section*.236) >>
+endobj
+1280 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1281 0 obj
+<< /S /GoTo /D (section.6.38) >>
+endobj
+1284 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1285 0 obj
+<< /S /GoTo /D (subsection.6.38.1) >>
+endobj
+1288 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1289 0 obj
+<< /S /GoTo /D (subsection.6.38.2) >>
+endobj
+1292 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1293 0 obj
+<< /S /GoTo /D (section*.238) >>
+endobj
+1296 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1297 0 obj
+<< /S /GoTo /D (section.6.39) >>
+endobj
+1300 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1301 0 obj
+<< /S /GoTo /D (subsection.6.39.1) >>
+endobj
+1304 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1305 0 obj
+<< /S /GoTo /D (subsection.6.39.2) >>
+endobj
+1308 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1309 0 obj
+<< /S /GoTo /D (section*.240) >>
+endobj
+1312 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1313 0 obj
+<< /S /GoTo /D (section.6.40) >>
+endobj
+1316 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1317 0 obj
+<< /S /GoTo /D (subsection.6.40.1) >>
+endobj
+1320 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1321 0 obj
+<< /S /GoTo /D (subsection.6.40.2) >>
+endobj
+1324 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1325 0 obj
+<< /S /GoTo /D (section*.242) >>
+endobj
+1328 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1329 0 obj
+<< /S /GoTo /D (section.6.41) >>
+endobj
+1332 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1333 0 obj
+<< /S /GoTo /D (subsection.6.41.1) >>
+endobj
+1336 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1337 0 obj
+<< /S /GoTo /D (subsection.6.41.2) >>
+endobj
+1340 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1341 0 obj
+<< /S /GoTo /D (section*.244) >>
+endobj
+1344 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+1345 0 obj
+<< /S /GoTo /D (section.6.42) >>
+endobj
+1348 0 obj
+(\376\377\000M\000a\000r\000s\000h\000a\000l\000l\000e\000r\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1349 0 obj
+<< /S /GoTo /D (subsection.6.42.1) >>
+endobj
+1352 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1353 0 obj
+<< /S /GoTo /D (subsection.6.42.2) >>
+endobj
+1356 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1357 0 obj
+<< /S /GoTo /D (section*.247) >>
+endobj
+1360 0 obj
+(\376\377\000M\000a\000r\000s\000h\000a\000l\000l\000e\000r)
+endobj
+1361 0 obj
+<< /S /GoTo /D (subsection.6.42.3) >>
+endobj
+1364 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1365 0 obj
+<< /S /GoTo /D (section*.248) >>
+endobj
+1368 0 obj
+(\376\377\000g\000e\000t\000\137\000b\000u\000f\000f\000e\000r\000\137\000s\000i\000z\000e)
+endobj
+1369 0 obj
+<< /S /GoTo /D (section*.249) >>
+endobj
+1372 0 obj
+(\376\377\000g\000e\000t\000\137\000b\000u\000f\000f\000e\000r\000\137\000s\000t\000a\000r\000t)
+endobj
+1373 0 obj
+<< /S /GoTo /D (section*.250) >>
+endobj
+1376 0 obj
+(\376\377\000g\000e\000t\000\137\000t\000f\000r\000\137\000s\000i\000z\000e)
+endobj
+1377 0 obj
+<< /S /GoTo /D (section*.251) >>
+endobj
+1380 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000b\000u\000f\000f\000e\000r)
+endobj
+1381 0 obj
+<< /S /GoTo /D (section*.252) >>
+endobj
+1384 0 obj
+(\376\377\000r\000e\000c\000e\000i\000v\000e\000\137\000d\000a\000t\000a)
+endobj
+1385 0 obj
+<< /S /GoTo /D (section*.253) >>
+endobj
+1388 0 obj
+(\376\377\000r\000e\000c\000e\000i\000v\000e\000\137\000f\000u\000n\000c\000\137\000p\000t\000r)
+endobj
+1389 0 obj
+<< /S /GoTo /D (section*.254) >>
+endobj
+1392 0 obj
+(\376\377\000s\000e\000n\000d\000\137\000d\000a\000t\000a)
+endobj
+1393 0 obj
+<< /S /GoTo /D (section*.255) >>
+endobj
+1396 0 obj
+(\376\377\000s\000e\000n\000d\000\137\000f\000u\000n\000c\000\137\000p\000t\000r)
+endobj
+1397 0 obj
+<< /S /GoTo /D (subsection.6.42.4) >>
+endobj
+1400 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1401 0 obj
+<< /S /GoTo /D (section*.256) >>
+endobj
+1404 0 obj
+(\376\377\000b\000u\000f\000f\000e\000r\000\137\000p\000t\000r)
+endobj
+1405 0 obj
+<< /S /GoTo /D (section*.257) >>
+endobj
+1408 0 obj
+(\376\377\000b\000u\000f\000f\000e\000r\000\137\000s\000i\000z\000e)
+endobj
+1409 0 obj
+<< /S /GoTo /D (section*.258) >>
+endobj
+1412 0 obj
+(\376\377\000b\000u\000f\000f\000e\000r\000\137\000s\000t\000a\000r\000t)
+endobj
+1413 0 obj
+<< /S /GoTo /D (section*.259) >>
+endobj
+1416 0 obj
+(\376\377\000t\000f\000r\000\137\000s\000i\000z\000e)
+endobj
+1417 0 obj
+<< /S /GoTo /D (section.6.43) >>
+endobj
+1420 0 obj
+(\376\377\000M\000e\000m\000R\000a\000n\000g\000e\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1421 0 obj
+<< /S /GoTo /D (subsection.6.43.1) >>
+endobj
+1424 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1425 0 obj
+<< /S /GoTo /D (subsection.6.43.2) >>
+endobj
+1428 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1429 0 obj
+<< /S /GoTo /D (section*.262) >>
+endobj
+1432 0 obj
+(\376\377\000M\000e\000m\000R\000a\000n\000g\000e)
+endobj
+1433 0 obj
+<< /S /GoTo /D (section*.263) >>
+endobj
+1436 0 obj
+(\376\377\000M\000e\000m\000R\000a\000n\000g\000e)
+endobj
+1437 0 obj
+<< /S /GoTo /D (subsection.6.43.3) >>
+endobj
+1440 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1441 0 obj
+<< /S /GoTo /D (section*.264) >>
+endobj
+1444 0 obj
+(\376\377\000c\000o\000n\000t\000a\000i\000n\000s)
+endobj
+1445 0 obj
+<< /S /GoTo /D (section*.265) >>
+endobj
+1448 0 obj
+(\376\377\000e\000n\000d)
+endobj
+1449 0 obj
+<< /S /GoTo /D (section*.266) >>
+endobj
+1452 0 obj
+(\376\377\000l\000e\000n\000g\000t\000h)
+endobj
+1453 0 obj
+<< /S /GoTo /D (section*.267) >>
+endobj
+1456 0 obj
+(\376\377\000o\000v\000e\000r\000l\000a\000p\000s)
+endobj
+1457 0 obj
+<< /S /GoTo /D (section*.268) >>
+endobj
+1460 0 obj
+(\376\377\000s\000t\000a\000r\000t)
+endobj
+1461 0 obj
+<< /S /GoTo /D (subsection.6.43.4) >>
+endobj
+1464 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1465 0 obj
+<< /S /GoTo /D (section*.269) >>
+endobj
+1468 0 obj
+(\376\377\000m\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+1469 0 obj
+<< /S /GoTo /D (section*.270) >>
+endobj
+1472 0 obj
+(\376\377\000m\000\137\000s\000t\000a\000r\000t)
+endobj
+1473 0 obj
+<< /S /GoTo /D (section.6.44) >>
+endobj
+1476 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000\040\000M\000o\000d\000u\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1477 0 obj
+<< /S /GoTo /D (subsection.6.44.1) >>
+endobj
+1480 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1481 0 obj
+<< /S /GoTo /D (subsection.6.44.2) >>
+endobj
+1484 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1485 0 obj
+<< /S /GoTo /D (section*.273) >>
+endobj
+1488 0 obj
+(\376\377\000d\000e\000f\000a\000u\000l\000t\000\137\000t\000a\000r\000g\000e\000t\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+1489 0 obj
+<< /S /GoTo /D (section*.274) >>
+endobj
+1492 0 obj
+(\376\377\000d\000e\000f\000a\000u\000l\000t\000\137\000t\000a\000r\000g\000e\000t\000\137\000t\000y\000p\000e)
+endobj
+1493 0 obj
+<< /S /GoTo /D (section*.275) >>
+endobj
+1496 0 obj
+(\376\377\000t\000a\000r\000g\000e\000t\000\137\000m\000i\000c)
+endobj
+1497 0 obj
+<< /S /GoTo /D (section.6.45) >>
+endobj
+1500 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1501 0 obj
+<< /S /GoTo /D (subsection.6.45.1) >>
+endobj
+1504 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1505 0 obj
+<< /S /GoTo /D (subsection.6.45.2) >>
+endobj
+1508 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1509 0 obj
+<< /S /GoTo /D (section*.281) >>
+endobj
+1512 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r)
+endobj
+1513 0 obj
+<< /S /GoTo /D (section*.282) >>
+endobj
+1516 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r)
+endobj
+1517 0 obj
+<< /S /GoTo /D (subsection.6.45.3) >>
+endobj
+1520 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1521 0 obj
+<< /S /GoTo /D (section*.283) >>
+endobj
+1524 0 obj
+(\376\377\000a\000d\000d\000\137\000e\000n\000v\000\137\000v\000a\000r)
+endobj
+1525 0 obj
+<< /S /GoTo /D (section*.284) >>
+endobj
+1528 0 obj
+(\376\377\000a\000n\000a\000l\000y\000z\000e\000\137\000e\000n\000v\000\137\000v\000a\000r)
+endobj
+1529 0 obj
+<< /S /GoTo /D (section*.285) >>
+endobj
+1532 0 obj
+(\376\377\000c\000r\000e\000a\000t\000e\000\137\000e\000n\000v\000i\000r\000o\000n\000\137\000f\000o\000r\000\137\000c\000a\000r\000d)
+endobj
+1533 0 obj
+<< /S /GoTo /D (section*.286) >>
+endobj
+1536 0 obj
+(\376\377\000g\000e\000t\000\137\000c\000a\000r\000d)
+endobj
+1537 0 obj
+<< /S /GoTo /D (section*.287) >>
+endobj
+1540 0 obj
+(\376\377\000g\000e\000t\000\137\000e\000n\000v\000\137\000v\000a\000r\000\137\000k\000i\000n\000d)
+endobj
+1541 0 obj
+<< /S /GoTo /D (section*.288) >>
+endobj
+1544 0 obj
+(\376\377\000m\000i\000c\000\137\000p\000a\000r\000s\000e\000\137\000e\000n\000v\000\137\000v\000a\000r\000\137\000l\000i\000s\000t)
+endobj
+1545 0 obj
+<< /S /GoTo /D (section*.289) >>
+endobj
+1548 0 obj
+(\376\377\000s\000e\000t\000\137\000p\000r\000e\000f\000i\000x)
+endobj
+1549 0 obj
+<< /S /GoTo /D (subsection.6.45.4) >>
+endobj
+1552 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1553 0 obj
+<< /S /GoTo /D (section*.290) >>
+endobj
+1556 0 obj
+(\376\377\000a\000n\000y\000\137\000c\000a\000r\000d)
+endobj
+1557 0 obj
+<< /S /GoTo /D (section*.291) >>
+endobj
+1560 0 obj
+(\376\377\000c\000a\000r\000d\000\137\000s\000p\000e\000c\000\137\000l\000i\000s\000t)
+endobj
+1561 0 obj
+<< /S /GoTo /D (section*.292) >>
+endobj
+1564 0 obj
+(\376\377\000c\000o\000m\000m\000o\000n\000\137\000v\000a\000r\000s)
+endobj
+1565 0 obj
+<< /S /GoTo /D (section*.293) >>
+endobj
+1568 0 obj
+(\376\377\000p\000r\000e\000f\000i\000x)
+endobj
+1569 0 obj
+<< /S /GoTo /D (section.6.46) >>
+endobj
+1572 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000l\000o\000c\000k\000e\000r\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1573 0 obj
+<< /S /GoTo /D (subsection.6.46.1) >>
+endobj
+1576 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1577 0 obj
+<< /S /GoTo /D (subsection.6.46.2) >>
+endobj
+1580 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1581 0 obj
+<< /S /GoTo /D (section*.296) >>
+endobj
+1584 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000l\000o\000c\000k\000e\000r\000\137\000t)
+endobj
+1585 0 obj
+<< /S /GoTo /D (section*.297) >>
+endobj
+1588 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000l\000o\000c\000k\000e\000r\000\137\000t)
+endobj
+1589 0 obj
+<< /S /GoTo /D (subsection.6.46.3) >>
+endobj
+1592 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1593 0 obj
+<< /S /GoTo /D (section*.298) >>
+endobj
+1596 0 obj
+(\376\377\000m\000\137\000m\000u\000t\000e\000x)
+endobj
+1597 0 obj
+<< /S /GoTo /D (section.6.47) >>
+endobj
+1600 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1601 0 obj
+<< /S /GoTo /D (subsection.6.47.1) >>
+endobj
+1604 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1605 0 obj
+<< /S /GoTo /D (subsection.6.47.2) >>
+endobj
+1608 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1609 0 obj
+<< /S /GoTo /D (section*.301) >>
+endobj
+1612 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000t)
+endobj
+1613 0 obj
+<< /S /GoTo /D (section*.302) >>
+endobj
+1616 0 obj
+(\376\377\000m\000u\000t\000e\000x\000\137\000t)
+endobj
+1617 0 obj
+<< /S /GoTo /D (subsection.6.47.3) >>
+endobj
+1620 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1621 0 obj
+<< /S /GoTo /D (section*.303) >>
+endobj
+1624 0 obj
+(\376\377\000l\000o\000c\000k)
+endobj
+1625 0 obj
+<< /S /GoTo /D (section*.304) >>
+endobj
+1628 0 obj
+(\376\377\000u\000n\000l\000o\000c\000k)
+endobj
+1629 0 obj
+<< /S /GoTo /D (subsection.6.47.4) >>
+endobj
+1632 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1633 0 obj
+<< /S /GoTo /D (section*.305) >>
+endobj
+1636 0 obj
+(\376\377\000m\000\137\000l\000o\000c\000k)
+endobj
+1637 0 obj
+<< /S /GoTo /D (section.6.48) >>
+endobj
+1640 0 obj
+(\376\377\000M\000y\000o\000T\000a\000b\000l\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1641 0 obj
+<< /S /GoTo /D (subsection.6.48.1) >>
+endobj
+1644 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1645 0 obj
+<< /S /GoTo /D (subsection.6.48.2) >>
+endobj
+1648 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1649 0 obj
+<< /S /GoTo /D (section*.308) >>
+endobj
+1652 0 obj
+(\376\377\000M\000y\000o\000T\000a\000b\000l\000e)
+endobj
+1653 0 obj
+<< /S /GoTo /D (subsection.6.48.3) >>
+endobj
+1656 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1657 0 obj
+<< /S /GoTo /D (section*.309) >>
+endobj
+1660 0 obj
+(\376\377\000v\000a\000r\000\137\000t\000a\000b)
+endobj
+1661 0 obj
+<< /S /GoTo /D (section*.310) >>
+endobj
+1664 0 obj
+(\376\377\000v\000a\000r\000\137\000t\000a\000b\000\137\000l\000e\000n)
+endobj
+1665 0 obj
+<< /S /GoTo /D (section.6.49) >>
+endobj
+1668 0 obj
+(\376\377\000M\000y\000o\000W\000r\000a\000p\000p\000e\000r\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1669 0 obj
+<< /S /GoTo /D (subsection.6.49.1) >>
+endobj
+1672 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1673 0 obj
+<< /S /GoTo /D (subsection.6.49.2) >>
+endobj
+1676 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1677 0 obj
+<< /S /GoTo /D (section*.314) >>
+endobj
+1680 0 obj
+(\376\377\000M\000y\000o\000W\000r\000a\000p\000p\000e\000r)
+endobj
+1681 0 obj
+<< /S /GoTo /D (subsection.6.49.3) >>
+endobj
+1684 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1685 0 obj
+<< /S /GoTo /D (section*.315) >>
+endobj
+1688 0 obj
+(\376\377\000A\000c\000q\000u\000i\000r\000e)
+endobj
+1689 0 obj
+<< /S /GoTo /D (section*.316) >>
+endobj
+1692 0 obj
+(\376\377\000C\000h\000e\000c\000k\000R\000e\000s\000u\000l\000t)
+endobj
+1693 0 obj
+<< /S /GoTo /D (section*.317) >>
+endobj
+1696 0 obj
+(\376\377\000G\000e\000t\000R\000e\000s\000u\000l\000t)
+endobj
+1697 0 obj
+<< /S /GoTo /D (section*.318) >>
+endobj
+1700 0 obj
+(\376\377\000H\000o\000s\000t\000F\000p\000t\000r\000T\000a\000b\000l\000e\000R\000e\000g\000i\000s\000t\000e\000r)
+endobj
+1701 0 obj
+<< /S /GoTo /D (section*.319) >>
+endobj
+1704 0 obj
+(\376\377\000H\000o\000s\000t\000V\000a\000r\000T\000a\000b\000l\000e\000P\000r\000o\000p\000a\000g\000a\000t\000e)
+endobj
+1705 0 obj
+<< /S /GoTo /D (section*.320) >>
+endobj
+1708 0 obj
+(\376\377\000i\000s\000\137\000a\000v\000a\000i\000l\000a\000b\000l\000e)
+endobj
+1709 0 obj
+<< /S /GoTo /D (section*.321) >>
+endobj
+1712 0 obj
+(\376\377\000L\000i\000b\000F\000i\000n\000i)
+endobj
+1713 0 obj
+<< /S /GoTo /D (section*.322) >>
+endobj
+1716 0 obj
+(\376\377\000L\000i\000b\000I\000n\000i\000t)
+endobj
+1717 0 obj
+<< /S /GoTo /D (section*.323) >>
+endobj
+1720 0 obj
+(\376\377\000L\000o\000a\000d\000L\000i\000b\000r\000a\000r\000y)
+endobj
+1721 0 obj
+<< /S /GoTo /D (section*.324) >>
+endobj
+1724 0 obj
+(\376\377\000R\000e\000l\000e\000a\000s\000e)
+endobj
+1725 0 obj
+<< /S /GoTo /D (section*.325) >>
+endobj
+1728 0 obj
+(\376\377\000R\000e\000m\000o\000t\000e\000C\000a\000l\000l)
+endobj
+1729 0 obj
+<< /S /GoTo /D (section*.326) >>
+endobj
+1732 0 obj
+(\376\377\000R\000e\000m\000o\000t\000e\000T\000h\000u\000n\000k\000C\000a\000l\000l)
+endobj
+1733 0 obj
+<< /S /GoTo /D (section*.327) >>
+endobj
+1736 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000A\000l\000i\000g\000n\000e\000d\000F\000r\000e\000e)
+endobj
+1737 0 obj
+<< /S /GoTo /D (section*.328) >>
+endobj
+1740 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000A\000l\000i\000g\000n\000e\000d\000M\000a\000l\000l\000o\000c)
+endobj
+1741 0 obj
+<< /S /GoTo /D (section*.329) >>
+endobj
+1744 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000F\000r\000e\000e)
+endobj
+1745 0 obj
+<< /S /GoTo /D (section*.330) >>
+endobj
+1748 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000M\000a\000l\000l\000o\000c)
+endobj
+1749 0 obj
+<< /S /GoTo /D (section*.331) >>
+endobj
+1752 0 obj
+(\376\377\000U\000n\000l\000o\000a\000d\000L\000i\000b\000r\000a\000r\000y)
+endobj
+1753 0 obj
+<< /S /GoTo /D (subsection.6.49.4) >>
+endobj
+1756 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1757 0 obj
+<< /S /GoTo /D (section*.332) >>
+endobj
+1760 0 obj
+(\376\377\000m\000\137\000a\000c\000q\000u\000i\000r\000e)
+endobj
+1761 0 obj
+<< /S /GoTo /D (section*.333) >>
+endobj
+1764 0 obj
+(\376\377\000m\000\137\000g\000e\000t\000\137\000r\000e\000s\000u\000l\000t)
+endobj
+1765 0 obj
+<< /S /GoTo /D (section*.334) >>
+endobj
+1768 0 obj
+(\376\377\000m\000\137\000h\000o\000s\000t\000\137\000f\000p\000t\000r\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+1769 0 obj
+<< /S /GoTo /D (section*.335) >>
+endobj
+1772 0 obj
+(\376\377\000m\000\137\000h\000o\000s\000t\000\137\000v\000a\000r\000\137\000t\000a\000b\000l\000e\000\137\000p\000r\000o\000p\000a\000g\000a\000t\000e)
+endobj
+1773 0 obj
+<< /S /GoTo /D (section*.336) >>
+endobj
+1776 0 obj
+(\376\377\000m\000\137\000i\000s\000\137\000a\000v\000a\000i\000l\000a\000b\000l\000e)
+endobj
+1777 0 obj
+<< /S /GoTo /D (section*.337) >>
+endobj
+1780 0 obj
+(\376\377\000m\000\137\000l\000i\000b\000\137\000f\000i\000n\000i)
+endobj
+1781 0 obj
+<< /S /GoTo /D (section*.338) >>
+endobj
+1784 0 obj
+(\376\377\000m\000\137\000l\000i\000b\000\137\000h\000a\000n\000d\000l\000e)
+endobj
+1785 0 obj
+<< /S /GoTo /D (section*.339) >>
+endobj
+1788 0 obj
+(\376\377\000m\000\137\000l\000i\000b\000\137\000i\000n\000i\000t)
+endobj
+1789 0 obj
+<< /S /GoTo /D (section*.340) >>
+endobj
+1792 0 obj
+(\376\377\000m\000\137\000r\000e\000l\000e\000a\000s\000e)
+endobj
+1793 0 obj
+<< /S /GoTo /D (section*.341) >>
+endobj
+1796 0 obj
+(\376\377\000m\000\137\000r\000e\000m\000o\000t\000e\000\137\000c\000a\000l\000l)
+endobj
+1797 0 obj
+<< /S /GoTo /D (section*.342) >>
+endobj
+1800 0 obj
+(\376\377\000m\000\137\000r\000e\000m\000o\000t\000e\000\137\000t\000h\000u\000n\000k\000\137\000c\000a\000l\000l)
+endobj
+1801 0 obj
+<< /S /GoTo /D (section*.343) >>
+endobj
+1804 0 obj
+(\376\377\000m\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+1805 0 obj
+<< /S /GoTo /D (section*.344) >>
+endobj
+1808 0 obj
+(\376\377\000m\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+1809 0 obj
+<< /S /GoTo /D (section*.345) >>
+endobj
+1812 0 obj
+(\376\377\000m\000\137\000s\000h\000a\000r\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+1813 0 obj
+<< /S /GoTo /D (section*.346) >>
+endobj
+1816 0 obj
+(\376\377\000m\000\137\000s\000h\000a\000r\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+1817 0 obj
+<< /S /GoTo /D (section.6.50) >>
+endobj
+1820 0 obj
+(\376\377\000T\000a\000b\000l\000e\000L\000i\000s\000t\000<\000\040\000T\000\040\000>\000:\000:\000N\000o\000d\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1821 0 obj
+<< /S /GoTo /D (subsection.6.50.1) >>
+endobj
+1824 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1825 0 obj
+<< /S /GoTo /D (subsection.6.50.2) >>
+endobj
+1828 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1829 0 obj
+<< /S /GoTo /D (section*.349) >>
+endobj
+1832 0 obj
+(\376\377\000n\000e\000x\000t)
+endobj
+1833 0 obj
+<< /S /GoTo /D (section*.350) >>
+endobj
+1836 0 obj
+(\376\377\000p\000r\000e\000v)
+endobj
+1837 0 obj
+<< /S /GoTo /D (section*.351) >>
+endobj
+1840 0 obj
+(\376\377\000t\000a\000b\000l\000e)
+endobj
+1841 0 obj
+<< /S /GoTo /D (section.6.51) >>
+endobj
+1844 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1845 0 obj
+<< /S /GoTo /D (subsection.6.51.1) >>
+endobj
+1848 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1849 0 obj
+<< /S /GoTo /D (subsection.6.51.2) >>
+endobj
+1852 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1853 0 obj
+<< /S /GoTo /D (section*.353) >>
+endobj
+1856 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+1857 0 obj
+<< /S /GoTo /D (section.6.52) >>
+endobj
+1860 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1861 0 obj
+<< /S /GoTo /D (subsection.6.52.1) >>
+endobj
+1864 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1865 0 obj
+<< /S /GoTo /D (subsection.6.52.2) >>
+endobj
+1868 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1869 0 obj
+<< /S /GoTo /D (section*.355) >>
+endobj
+1872 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+1873 0 obj
+<< /S /GoTo /D (section.6.53) >>
+endobj
+1876 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r\000\137\000o\000f\000\137\000d\000e\000v\000i\000c\000e\000s\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1877 0 obj
+<< /S /GoTo /D (subsection.6.53.1) >>
+endobj
+1880 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1881 0 obj
+<< /S /GoTo /D (subsection.6.53.2) >>
+endobj
+1884 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1885 0 obj
+<< /S /GoTo /D (section*.357) >>
+endobj
+1888 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r\000\137\000o\000f\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+1889 0 obj
+<< /S /GoTo /D (section.6.54) >>
+endobj
+1892 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1893 0 obj
+<< /S /GoTo /D (subsection.6.54.1) >>
+endobj
+1896 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1897 0 obj
+<< /S /GoTo /D (subsection.6.54.2) >>
+endobj
+1900 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1901 0 obj
+<< /S /GoTo /D (section*.359) >>
+endobj
+1904 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t)
+endobj
+1905 0 obj
+<< /S /GoTo /D (section.6.55) >>
+endobj
+1908 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000i\000g\000n\000a\000l\000e\000d\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1909 0 obj
+<< /S /GoTo /D (subsection.6.55.1) >>
+endobj
+1912 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1913 0 obj
+<< /S /GoTo /D (subsection.6.55.2) >>
+endobj
+1916 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1917 0 obj
+<< /S /GoTo /D (section*.361) >>
+endobj
+1920 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000i\000g\000n\000a\000l\000e\000d)
+endobj
+1921 0 obj
+<< /S /GoTo /D (section.6.56) >>
+endobj
+1924 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000t\000u\000s\000\040\000T\000y\000p\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1925 0 obj
+<< /S /GoTo /D (subsection.6.56.1) >>
+endobj
+1928 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1929 0 obj
+<< /S /GoTo /D (subsection.6.56.2) >>
+endobj
+1932 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1933 0 obj
+<< /S /GoTo /D (section*.363) >>
+endobj
+1936 0 obj
+(\376\377\000d\000a\000t\000a\000\137\000r\000e\000c\000e\000i\000v\000e\000d)
+endobj
+1937 0 obj
+<< /S /GoTo /D (section*.364) >>
+endobj
+1940 0 obj
+(\376\377\000d\000a\000t\000a\000\137\000s\000e\000n\000t)
+endobj
+1941 0 obj
+<< /S /GoTo /D (section*.365) >>
+endobj
+1944 0 obj
+(\376\377\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+1945 0 obj
+<< /S /GoTo /D (section*.366) >>
+endobj
+1948 0 obj
+(\376\377\000r\000e\000s\000u\000l\000t)
+endobj
+1949 0 obj
+<< /S /GoTo /D (section.6.57) >>
+endobj
+1952 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+1953 0 obj
+<< /S /GoTo /D (subsection.6.57.1) >>
+endobj
+1956 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+1957 0 obj
+<< /S /GoTo /D (subsection.6.57.2) >>
+endobj
+1960 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1961 0 obj
+<< /S /GoTo /D (section*.373) >>
+endobj
+1964 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000L\000i\000s\000t)
+endobj
+1965 0 obj
+<< /S /GoTo /D (section*.374) >>
+endobj
+1968 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000L\000i\000s\000t)
+endobj
+1969 0 obj
+<< /S /GoTo /D (subsection.6.57.3) >>
+endobj
+1972 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1973 0 obj
+<< /S /GoTo /D (section*.375) >>
+endobj
+1976 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r)
+endobj
+1977 0 obj
+<< /S /GoTo /D (section*.376) >>
+endobj
+1980 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r)
+endobj
+1981 0 obj
+<< /S /GoTo /D (section*.377) >>
+endobj
+1984 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r)
+endobj
+1985 0 obj
+<< /S /GoTo /D (section*.378) >>
+endobj
+1988 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r)
+endobj
+1989 0 obj
+<< /S /GoTo /D (subsection.6.57.4) >>
+endobj
+1992 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+1993 0 obj
+<< /S /GoTo /D (section*.379) >>
+endobj
+1996 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+1997 0 obj
+<< /S /GoTo /D (section*.380) >>
+endobj
+2000 0 obj
+(\376\377\000c\000l\000e\000a\000n\000u\000p)
+endobj
+2001 0 obj
+<< /S /GoTo /D (section*.381) >>
+endobj
+2004 0 obj
+(\376\377\000c\000o\000m\000p\000u\000t\000e)
+endobj
+2005 0 obj
+<< /S /GoTo /D (section*.382) >>
+endobj
+2008 0 obj
+(\376\377\000f\000i\000n\000d\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+2009 0 obj
+<< /S /GoTo /D (section*.383) >>
+endobj
+2012 0 obj
+(\376\377\000g\000a\000t\000h\000e\000r\000\137\000c\000o\000p\000y\000i\000n\000\137\000d\000a\000t\000a)
+endobj
+2013 0 obj
+<< /S /GoTo /D (section*.384) >>
+endobj
+2016 0 obj
+(\376\377\000g\000a\000t\000h\000e\000r\000\137\000c\000o\000p\000y\000o\000u\000t\000\137\000d\000a\000t\000a)
+endobj
+2017 0 obj
+<< /S /GoTo /D (section*.385) >>
+endobj
+2020 0 obj
+(\376\377\000g\000e\000n\000\137\000v\000a\000r\000\137\000d\000e\000s\000c\000s\000\137\000f\000o\000r\000\137\000p\000o\000i\000n\000t\000e\000r\000\137\000a\000r\000r\000a\000y)
+endobj
+2021 0 obj
+<< /S /GoTo /D (section*.386) >>
+endobj
+2024 0 obj
+(\376\377\000g\000e\000t\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+2025 0 obj
+<< /S /GoTo /D (section*.387) >>
+endobj
+2028 0 obj
+(\376\377\000g\000e\000t\000\137\000t\000i\000m\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2029 0 obj
+<< /S /GoTo /D (section*.388) >>
+endobj
+2032 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000m\000i\000c\000\137\000a\000d\000d\000r\000e\000s\000s)
+endobj
+2033 0 obj
+<< /S /GoTo /D (section*.389) >>
+endobj
+2036 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000s\000t\000a\000t\000i\000c\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+2037 0 obj
+<< /S /GoTo /D (section*.390) >>
+endobj
+2040 0 obj
+(\376\377\000i\000s\000\137\000s\000i\000g\000n\000a\000l\000e\000d)
+endobj
+2041 0 obj
+<< /S /GoTo /D (section*.391) >>
+endobj
+2044 0 obj
+(\376\377\000m\000e\000r\000g\000e\000\137\000v\000a\000r\000\137\000d\000e\000s\000c\000s)
+endobj
+2045 0 obj
+<< /S /GoTo /D (section*.392) >>
+endobj
+2048 0 obj
+(\376\377\000n\000u\000l\000l\000i\000f\000y\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000t\000a\000c\000k)
+endobj
+2049 0 obj
+<< /S /GoTo /D (section*.393) >>
+endobj
+2052 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d)
+endobj
+2053 0 obj
+<< /S /GoTo /D (section*.394) >>
+endobj
+2056 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d)
+endobj
+2057 0 obj
+<< /S /GoTo /D (section*.395) >>
+endobj
+2060 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000i\000n\000i\000s\000h)
+endobj
+2061 0 obj
+<< /S /GoTo /D (section*.396) >>
+endobj
+2064 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000c\000k\000\137\000m\000e\000m\000o\000r\000y\000\137\000m\000a\000n\000a\000g\000e\000r)
+endobj
+2065 0 obj
+<< /S /GoTo /D (section*.397) >>
+endobj
+2068 0 obj
+(\376\377\000r\000e\000c\000e\000i\000v\000e\000\137\000p\000o\000i\000n\000t\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2069 0 obj
+<< /S /GoTo /D (section*.398) >>
+endobj
+2072 0 obj
+(\376\377\000r\000e\000c\000i\000e\000v\000e\000\137\000n\000o\000n\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s\000\137\000p\000o\000i\000n\000t\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2073 0 obj
+<< /S /GoTo /D (section*.399) >>
+endobj
+2076 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000c\000o\000i\000\137\000e\000r\000r\000o\000r)
+endobj
+2077 0 obj
+<< /S /GoTo /D (section*.400) >>
+endobj
+2080 0 obj
+(\376\377\000s\000c\000a\000t\000t\000e\000r\000\137\000c\000o\000p\000y\000i\000n\000\137\000d\000a\000t\000a)
+endobj
+2081 0 obj
+<< /S /GoTo /D (section*.401) >>
+endobj
+2084 0 obj
+(\376\377\000s\000c\000a\000t\000t\000e\000r\000\137\000c\000o\000p\000y\000o\000u\000t\000\137\000d\000a\000t\000a)
+endobj
+2085 0 obj
+<< /S /GoTo /D (section*.402) >>
+endobj
+2088 0 obj
+(\376\377\000s\000e\000n\000d\000\137\000n\000o\000n\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s\000\137\000p\000o\000i\000n\000t\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2089 0 obj
+<< /S /GoTo /D (section*.403) >>
+endobj
+2092 0 obj
+(\376\377\000s\000e\000n\000d\000\137\000p\000o\000i\000n\000t\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2093 0 obj
+<< /S /GoTo /D (section*.404) >>
+endobj
+2096 0 obj
+(\376\377\000s\000e\000t\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+2097 0 obj
+<< /S /GoTo /D (section*.405) >>
+endobj
+2100 0 obj
+(\376\377\000s\000e\000t\000u\000p\000\137\000d\000e\000s\000c\000r\000i\000p\000t\000o\000r\000s)
+endobj
+2101 0 obj
+<< /S /GoTo /D (section*.406) >>
+endobj
+2104 0 obj
+(\376\377\000s\000e\000t\000u\000p\000\137\000m\000i\000s\000c\000\137\000d\000a\000t\000a)
+endobj
+2105 0 obj
+<< /S /GoTo /D (section*.407) >>
+endobj
+2108 0 obj
+(\376\377\000t\000r\000a\000n\000s\000l\000a\000t\000e\000\137\000c\000o\000i\000\137\000e\000r\000r\000o\000r)
+endobj
+2109 0 obj
+<< /S /GoTo /D (section*.408) >>
+endobj
+2112 0 obj
+(\376\377\000w\000a\000i\000t\000\137\000d\000e\000p\000e\000n\000d\000e\000n\000c\000i\000e\000s)
+endobj
+2113 0 obj
+<< /S /GoTo /D (subsection.6.57.5) >>
+endobj
+2116 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2117 0 obj
+<< /S /GoTo /D (section*.409) >>
+endobj
+2120 0 obj
+(\376\377\000m\000\137\000b\000u\000f\000f\000e\000r\000s)
+endobj
+2121 0 obj
+<< /S /GoTo /D (section*.410) >>
+endobj
+2124 0 obj
+(\376\377\000m\000\137\000c\000o\000m\000p\000u\000t\000e\000\137\000b\000u\000f\000f\000e\000r\000s)
+endobj
+2125 0 obj
+<< /S /GoTo /D (section*.411) >>
+endobj
+2128 0 obj
+(\376\377\000m\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000b\000u\000f\000f\000e\000r\000s)
+endobj
+2129 0 obj
+<< /S /GoTo /D (section*.412) >>
+endobj
+2132 0 obj
+(\376\377\000m\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000s\000t\000a\000c\000k)
+endobj
+2133 0 obj
+<< /S /GoTo /D (section*.413) >>
+endobj
+2136 0 obj
+(\376\377\000m\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+2137 0 obj
+<< /S /GoTo /D (section*.414) >>
+endobj
+2140 0 obj
+(\376\377\000m\000\137\000f\000u\000n\000c\000\137\000d\000e\000s\000c)
+endobj
+2141 0 obj
+<< /S /GoTo /D (section*.415) >>
+endobj
+2144 0 obj
+(\376\377\000m\000\137\000f\000u\000n\000c\000\137\000d\000e\000s\000c\000\137\000s\000i\000z\000e)
+endobj
+2145 0 obj
+<< /S /GoTo /D (section*.416) >>
+endobj
+2148 0 obj
+(\376\377\000m\000\137\000i\000n)
+endobj
+2149 0 obj
+<< /S /GoTo /D (section*.417) >>
+endobj
+2152 0 obj
+(\376\377\000m\000\137\000i\000n\000\137\000d\000a\000t\000a\000l\000e\000n)
+endobj
+2153 0 obj
+<< /S /GoTo /D (section*.418) >>
+endobj
+2156 0 obj
+(\376\377\000m\000\137\000i\000n\000\137\000d\000e\000p\000s)
+endobj
+2157 0 obj
+<< /S /GoTo /D (section*.419) >>
+endobj
+2160 0 obj
+(\376\377\000m\000\137\000i\000n\000\137\000d\000e\000p\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+2161 0 obj
+<< /S /GoTo /D (section*.420) >>
+endobj
+2164 0 obj
+(\376\377\000m\000\137\000i\000n\000o\000u\000t\000\137\000b\000u\000f)
+endobj
+2165 0 obj
+<< /S /GoTo /D (section*.421) >>
+endobj
+2168 0 obj
+(\376\377\000m\000\137\000i\000s\000\137\000m\000a\000n\000d\000a\000t\000o\000r\000y)
+endobj
+2169 0 obj
+<< /S /GoTo /D (section*.422) >>
+endobj
+2172 0 obj
+(\376\377\000m\000\137\000i\000s\000\137\000o\000p\000e\000n\000m\000p)
+endobj
+2173 0 obj
+<< /S /GoTo /D (section*.423) >>
+endobj
+2176 0 obj
+(\376\377\000m\000\137\000n\000e\000e\000d\000\137\000r\000u\000n\000f\000u\000n\000c\000t\000i\000o\000n)
+endobj
+2177 0 obj
+<< /S /GoTo /D (section*.424) >>
+endobj
+2180 0 obj
+(\376\377\000m\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+2181 0 obj
+<< /S /GoTo /D (section*.425) >>
+endobj
+2184 0 obj
+(\376\377\000m\000\137\000o\000u\000t)
+endobj
+2185 0 obj
+<< /S /GoTo /D (section*.426) >>
+endobj
+2188 0 obj
+(\376\377\000m\000\137\000o\000u\000t\000\137\000d\000a\000t\000a\000l\000e\000n)
+endobj
+2189 0 obj
+<< /S /GoTo /D (section*.427) >>
+endobj
+2192 0 obj
+(\376\377\000m\000\137\000o\000u\000t\000\137\000d\000e\000p\000s)
+endobj
+2193 0 obj
+<< /S /GoTo /D (section*.428) >>
+endobj
+2196 0 obj
+(\376\377\000m\000\137\000o\000u\000t\000\137\000d\000e\000p\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+2197 0 obj
+<< /S /GoTo /D (section*.429) >>
+endobj
+2200 0 obj
+(\376\377\000m\000\137\000s\000t\000a\000c\000k\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+2201 0 obj
+<< /S /GoTo /D (section*.430) >>
+endobj
+2204 0 obj
+(\376\377\000m\000\137\000s\000t\000a\000t\000u\000s)
+endobj
+2205 0 obj
+<< /S /GoTo /D (section*.431) >>
+endobj
+2208 0 obj
+(\376\377\000m\000\137\000t\000i\000m\000e\000r\000\137\000d\000a\000t\000a)
+endobj
+2209 0 obj
+<< /S /GoTo /D (section*.432) >>
+endobj
+2212 0 obj
+(\376\377\000m\000\137\000v\000a\000r\000s)
+endobj
+2213 0 obj
+<< /S /GoTo /D (section*.433) >>
+endobj
+2216 0 obj
+(\376\377\000m\000\137\000v\000a\000r\000s\000\137\000e\000x\000t\000r\000a)
+endobj
+2217 0 obj
+<< /S /GoTo /D (section*.434) >>
+endobj
+2220 0 obj
+(\376\377\000m\000\137\000v\000a\000r\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+2221 0 obj
+<< /S /GoTo /D (section.6.58) >>
+endobj
+2224 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2225 0 obj
+<< /S /GoTo /D (subsection.6.58.1) >>
+endobj
+2228 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2229 0 obj
+<< /S /GoTo /D (subsection.6.58.2) >>
+endobj
+2232 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2233 0 obj
+<< /S /GoTo /D (section*.436) >>
+endobj
+2236 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2237 0 obj
+<< /S /GoTo /D (section.6.59) >>
+endobj
+2240 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2241 0 obj
+<< /S /GoTo /D (subsection.6.59.1) >>
+endobj
+2244 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2245 0 obj
+<< /S /GoTo /D (subsection.6.59.2) >>
+endobj
+2248 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2249 0 obj
+<< /S /GoTo /D (section*.438) >>
+endobj
+2252 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2253 0 obj
+<< /S /GoTo /D (section.6.60) >>
+endobj
+2256 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2257 0 obj
+<< /S /GoTo /D (subsection.6.60.1) >>
+endobj
+2260 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2261 0 obj
+<< /S /GoTo /D (subsection.6.60.2) >>
+endobj
+2264 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2265 0 obj
+<< /S /GoTo /D (section*.440) >>
+endobj
+2268 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2269 0 obj
+<< /S /GoTo /D (section.6.61) >>
+endobj
+2272 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2273 0 obj
+<< /S /GoTo /D (subsection.6.61.1) >>
+endobj
+2276 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2277 0 obj
+<< /S /GoTo /D (subsection.6.61.2) >>
+endobj
+2280 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2281 0 obj
+<< /S /GoTo /D (section*.442) >>
+endobj
+2284 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2285 0 obj
+<< /S /GoTo /D (section.6.62) >>
+endobj
+2288 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2289 0 obj
+<< /S /GoTo /D (subsection.6.62.1) >>
+endobj
+2292 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2293 0 obj
+<< /S /GoTo /D (subsection.6.62.2) >>
+endobj
+2296 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2297 0 obj
+<< /S /GoTo /D (section*.444) >>
+endobj
+2300 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2301 0 obj
+<< /S /GoTo /D (section.6.63) >>
+endobj
+2304 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2305 0 obj
+<< /S /GoTo /D (subsection.6.63.1) >>
+endobj
+2308 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2309 0 obj
+<< /S /GoTo /D (subsection.6.63.2) >>
+endobj
+2312 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2313 0 obj
+<< /S /GoTo /D (section*.446) >>
+endobj
+2316 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2317 0 obj
+<< /S /GoTo /D (section.6.64) >>
+endobj
+2320 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2321 0 obj
+<< /S /GoTo /D (subsection.6.64.1) >>
+endobj
+2324 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2325 0 obj
+<< /S /GoTo /D (subsection.6.64.2) >>
+endobj
+2328 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2329 0 obj
+<< /S /GoTo /D (section*.448) >>
+endobj
+2332 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2333 0 obj
+<< /S /GoTo /D (section.6.65) >>
+endobj
+2336 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2337 0 obj
+<< /S /GoTo /D (subsection.6.65.1) >>
+endobj
+2340 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2341 0 obj
+<< /S /GoTo /D (subsection.6.65.2) >>
+endobj
+2344 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2345 0 obj
+<< /S /GoTo /D (section*.450) >>
+endobj
+2348 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2349 0 obj
+<< /S /GoTo /D (section.6.66) >>
+endobj
+2352 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2353 0 obj
+<< /S /GoTo /D (subsection.6.66.1) >>
+endobj
+2356 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2357 0 obj
+<< /S /GoTo /D (subsection.6.66.2) >>
+endobj
+2360 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2361 0 obj
+<< /S /GoTo /D (section*.452) >>
+endobj
+2364 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2365 0 obj
+<< /S /GoTo /D (section.6.67) >>
+endobj
+2368 0 obj
+(\376\377\000o\000m\000p\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2369 0 obj
+<< /S /GoTo /D (subsection.6.67.1) >>
+endobj
+2372 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2373 0 obj
+<< /S /GoTo /D (subsection.6.67.2) >>
+endobj
+2376 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2377 0 obj
+<< /S /GoTo /D (section*.454) >>
+endobj
+2380 0 obj
+(\376\377\000l\000o\000c\000k)
+endobj
+2381 0 obj
+<< /S /GoTo /D (section.6.68) >>
+endobj
+2384 0 obj
+(\376\377\000o\000m\000p\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2385 0 obj
+<< /S /GoTo /D (subsection.6.68.1) >>
+endobj
+2388 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2389 0 obj
+<< /S /GoTo /D (subsection.6.68.2) >>
+endobj
+2392 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2393 0 obj
+<< /S /GoTo /D (section*.456) >>
+endobj
+2396 0 obj
+(\376\377\000l\000o\000c\000k)
+endobj
+2397 0 obj
+<< /S /GoTo /D (section.6.69) >>
+endobj
+2400 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2401 0 obj
+<< /S /GoTo /D (subsection.6.69.1) >>
+endobj
+2404 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2405 0 obj
+<< /S /GoTo /D (subsection.6.69.2) >>
+endobj
+2408 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2409 0 obj
+<< /S /GoTo /D (section*.458) >>
+endobj
+2412 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2413 0 obj
+<< /S /GoTo /D (section.6.70) >>
+endobj
+2416 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2417 0 obj
+<< /S /GoTo /D (subsection.6.70.1) >>
+endobj
+2420 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2421 0 obj
+<< /S /GoTo /D (subsection.6.70.2) >>
+endobj
+2424 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2425 0 obj
+<< /S /GoTo /D (section*.460) >>
+endobj
+2428 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2429 0 obj
+<< /S /GoTo /D (section.6.71) >>
+endobj
+2432 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2433 0 obj
+<< /S /GoTo /D (subsection.6.71.1) >>
+endobj
+2436 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2437 0 obj
+<< /S /GoTo /D (subsection.6.71.2) >>
+endobj
+2440 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2441 0 obj
+<< /S /GoTo /D (section*.462) >>
+endobj
+2444 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2445 0 obj
+<< /S /GoTo /D (section.6.72) >>
+endobj
+2448 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2449 0 obj
+<< /S /GoTo /D (subsection.6.72.1) >>
+endobj
+2452 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2453 0 obj
+<< /S /GoTo /D (subsection.6.72.2) >>
+endobj
+2456 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2457 0 obj
+<< /S /GoTo /D (section*.464) >>
+endobj
+2460 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2461 0 obj
+<< /S /GoTo /D (section.6.73) >>
+endobj
+2464 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2465 0 obj
+<< /S /GoTo /D (subsection.6.73.1) >>
+endobj
+2468 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2469 0 obj
+<< /S /GoTo /D (subsection.6.73.2) >>
+endobj
+2472 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2473 0 obj
+<< /S /GoTo /D (section*.466) >>
+endobj
+2476 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2477 0 obj
+<< /S /GoTo /D (section.6.74) >>
+endobj
+2480 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2481 0 obj
+<< /S /GoTo /D (subsection.6.74.1) >>
+endobj
+2484 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2485 0 obj
+<< /S /GoTo /D (subsection.6.74.2) >>
+endobj
+2488 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2489 0 obj
+<< /S /GoTo /D (section*.468) >>
+endobj
+2492 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2493 0 obj
+<< /S /GoTo /D (section.6.75) >>
+endobj
+2496 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2497 0 obj
+<< /S /GoTo /D (subsection.6.75.1) >>
+endobj
+2500 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2501 0 obj
+<< /S /GoTo /D (subsection.6.75.2) >>
+endobj
+2504 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2505 0 obj
+<< /S /GoTo /D (section*.470) >>
+endobj
+2508 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2509 0 obj
+<< /S /GoTo /D (section.6.76) >>
+endobj
+2512 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2513 0 obj
+<< /S /GoTo /D (subsection.6.76.1) >>
+endobj
+2516 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2517 0 obj
+<< /S /GoTo /D (subsection.6.76.2) >>
+endobj
+2520 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2521 0 obj
+<< /S /GoTo /D (section*.472) >>
+endobj
+2524 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2525 0 obj
+<< /S /GoTo /D (section.6.77) >>
+endobj
+2528 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2529 0 obj
+<< /S /GoTo /D (subsection.6.77.1) >>
+endobj
+2532 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2533 0 obj
+<< /S /GoTo /D (subsection.6.77.2) >>
+endobj
+2536 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2537 0 obj
+<< /S /GoTo /D (section*.474) >>
+endobj
+2540 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2541 0 obj
+<< /S /GoTo /D (section.6.78) >>
+endobj
+2544 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000:\000:\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2545 0 obj
+<< /S /GoTo /D (subsection.6.78.1) >>
+endobj
+2548 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2549 0 obj
+<< /S /GoTo /D (subsection.6.78.2) >>
+endobj
+2552 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2553 0 obj
+<< /S /GoTo /D (section*.476) >>
+endobj
+2556 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+2557 0 obj
+<< /S /GoTo /D (section.6.79) >>
+endobj
+2560 0 obj
+(\376\377\000O\000R\000S\000L\000B\000u\000s\000y\000S\000e\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2561 0 obj
+<< /S /GoTo /D (subsection.6.79.1) >>
+endobj
+2564 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2565 0 obj
+<< /S /GoTo /D (subsection.6.79.2) >>
+endobj
+2568 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2569 0 obj
+<< /S /GoTo /D (section*.478) >>
+endobj
+2572 0 obj
+(\376\377\000t\000y\000p\000e)
+endobj
+2573 0 obj
+<< /S /GoTo /D (section.6.80) >>
+endobj
+2576 0 obj
+(\376\377\000P\000e\000r\000s\000i\000s\000t\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2577 0 obj
+<< /S /GoTo /D (subsection.6.80.1) >>
+endobj
+2580 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2581 0 obj
+<< /S /GoTo /D (subsection.6.80.2) >>
+endobj
+2584 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2585 0 obj
+<< /S /GoTo /D (section*.481) >>
+endobj
+2588 0 obj
+(\376\377\000P\000e\000r\000s\000i\000s\000t\000D\000a\000t\000a)
+endobj
+2589 0 obj
+<< /S /GoTo /D (subsection.6.80.3) >>
+endobj
+2592 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2593 0 obj
+<< /S /GoTo /D (section*.482) >>
+endobj
+2596 0 obj
+(\376\377\000c\000p\000u\000\137\000s\000t\000a\000c\000k\000\137\000a\000d\000d\000r)
+endobj
+2597 0 obj
+<< /S /GoTo /D (section*.483) >>
+endobj
+2600 0 obj
+(\376\377\000r\000o\000u\000t\000i\000n\000e\000\137\000i\000d)
+endobj
+2601 0 obj
+<< /S /GoTo /D (section*.484) >>
+endobj
+2604 0 obj
+(\376\377\000s\000t\000a\000c\000k\000\137\000c\000p\000u\000\137\000a\000d\000d\000r)
+endobj
+2605 0 obj
+<< /S /GoTo /D (section*.485) >>
+endobj
+2608 0 obj
+(\376\377\000s\000t\000a\000c\000k\000\137\000p\000t\000r\000\137\000d\000a\000t\000a)
+endobj
+2609 0 obj
+<< /S /GoTo /D (section.6.81) >>
+endobj
+2612 0 obj
+(\376\377\000P\000t\000r\000D\000a\000t\000a\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2613 0 obj
+<< /S /GoTo /D (subsection.6.81.1) >>
+endobj
+2616 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2617 0 obj
+<< /S /GoTo /D (subsection.6.81.2) >>
+endobj
+2620 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2621 0 obj
+<< /S /GoTo /D (section*.489) >>
+endobj
+2624 0 obj
+(\376\377\000P\000t\000r\000D\000a\000t\000a)
+endobj
+2625 0 obj
+<< /S /GoTo /D (section*.490) >>
+endobj
+2628 0 obj
+(\376\377\000P\000t\000r\000D\000a\000t\000a)
+endobj
+2629 0 obj
+<< /S /GoTo /D (subsection.6.81.3) >>
+endobj
+2632 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2633 0 obj
+<< /S /GoTo /D (section*.491) >>
+endobj
+2636 0 obj
+(\376\377\000a\000d\000d\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2637 0 obj
+<< /S /GoTo /D (section*.492) >>
+endobj
+2640 0 obj
+(\376\377\000g\000e\000t\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2641 0 obj
+<< /S /GoTo /D (section*.493) >>
+endobj
+2644 0 obj
+(\376\377\000o\000p\000e\000r\000a\000t\000o\000r\000<)
+endobj
+2645 0 obj
+<< /S /GoTo /D (section*.494) >>
+endobj
+2648 0 obj
+(\376\377\000r\000e\000m\000o\000v\000e\000\137\000r\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2649 0 obj
+<< /S /GoTo /D (subsection.6.81.4) >>
+endobj
+2652 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2653 0 obj
+<< /S /GoTo /D (section*.495) >>
+endobj
+2656 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000d\000i\000s\000p)
+endobj
+2657 0 obj
+<< /S /GoTo /D (section*.496) >>
+endobj
+2660 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000p\000t\000r\000\137\000d\000a\000t\000a\000\137\000l\000o\000c\000k)
+endobj
+2661 0 obj
+<< /S /GoTo /D (section*.497) >>
+endobj
+2664 0 obj
+(\376\377\000c\000p\000u\000\137\000a\000d\000d\000r)
+endobj
+2665 0 obj
+<< /S /GoTo /D (section*.498) >>
+endobj
+2668 0 obj
+(\376\377\000c\000p\000u\000\137\000b\000u\000f)
+endobj
+2669 0 obj
+<< /S /GoTo /D (section*.499) >>
+endobj
+2672 0 obj
+(\376\377\000i\000s\000\137\000s\000t\000a\000t\000i\000c)
+endobj
+2673 0 obj
+<< /S /GoTo /D (section*.500) >>
+endobj
+2676 0 obj
+(\376\377\000m\000i\000c\000\137\000a\000d\000d\000r)
+endobj
+2677 0 obj
+<< /S /GoTo /D (section*.501) >>
+endobj
+2680 0 obj
+(\376\377\000m\000i\000c\000\137\000b\000u\000f)
+endobj
+2681 0 obj
+<< /S /GoTo /D (section*.502) >>
+endobj
+2684 0 obj
+(\376\377\000m\000i\000c\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+2685 0 obj
+<< /S /GoTo /D (section*.503) >>
+endobj
+2688 0 obj
+(\376\377\000r\000e\000f\000\137\000c\000o\000u\000n\000t)
+endobj
+2689 0 obj
+<< /S /GoTo /D (section.6.82) >>
+endobj
+2692 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r\000:\000:\000R\000e\000a\000d\000A\000r\000r\000E\000l\000e\000m\000e\000n\000t\000s\000<\000\040\000T\000\040\000>\000\040\000C\000l\000a\000s\000s\000\040\000T\000e\000m\000p\000l\000a\000t\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2693 0 obj
+<< /S /GoTo /D (subsection.6.82.1) >>
+endobj
+2696 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2697 0 obj
+<< /S /GoTo /D (subsection.6.82.2) >>
+endobj
+2700 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2701 0 obj
+<< /S /GoTo /D (section*.507) >>
+endobj
+2704 0 obj
+(\376\377\000R\000e\000a\000d\000A\000r\000r\000E\000l\000e\000m\000e\000n\000t\000s)
+endobj
+2705 0 obj
+<< /S /GoTo /D (subsection.6.82.3) >>
+endobj
+2708 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2709 0 obj
+<< /S /GoTo /D (section*.508) >>
+endobj
+2712 0 obj
+(\376\377\000r\000e\000a\000d\000\137\000n\000e\000x\000t)
+endobj
+2713 0 obj
+<< /S /GoTo /D (subsection.6.82.4) >>
+endobj
+2716 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2717 0 obj
+<< /S /GoTo /D (section*.509) >>
+endobj
+2720 0 obj
+(\376\377\000b\000a\000s\000e)
+endobj
+2721 0 obj
+<< /S /GoTo /D (section*.510) >>
+endobj
+2724 0 obj
+(\376\377\000c\000o\000u\000n\000t)
+endobj
+2725 0 obj
+<< /S /GoTo /D (section*.511) >>
+endobj
+2728 0 obj
+(\376\377\000e\000l\000\137\000s\000i\000z\000e)
+endobj
+2729 0 obj
+<< /S /GoTo /D (section*.512) >>
+endobj
+2732 0 obj
+(\376\377\000i\000s\000\137\000e\000m\000p\000t\000y)
+endobj
+2733 0 obj
+<< /S /GoTo /D (section*.513) >>
+endobj
+2736 0 obj
+(\376\377\000l\000e\000n\000g\000t\000h\000\137\000c\000u\000r)
+endobj
+2737 0 obj
+<< /S /GoTo /D (section*.514) >>
+endobj
+2740 0 obj
+(\376\377\000o\000f\000f\000s\000e\000t)
+endobj
+2741 0 obj
+<< /S /GoTo /D (section*.515) >>
+endobj
+2744 0 obj
+(\376\377\000r\000a\000n\000g\000e\000s)
+endobj
+2745 0 obj
+<< /S /GoTo /D (section*.516) >>
+endobj
+2748 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+2749 0 obj
+<< /S /GoTo /D (section*.517) >>
+endobj
+2752 0 obj
+(\376\377\000v\000a\000l)
+endobj
+2753 0 obj
+<< /S /GoTo /D (section.6.83) >>
+endobj
+2756 0 obj
+(\376\377\000R\000e\000f\000I\000n\000f\000o\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2757 0 obj
+<< /S /GoTo /D (subsection.6.83.1) >>
+endobj
+2760 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2761 0 obj
+<< /S /GoTo /D (subsection.6.83.2) >>
+endobj
+2764 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2765 0 obj
+<< /S /GoTo /D (section*.520) >>
+endobj
+2768 0 obj
+(\376\377\000R\000e\000f\000I\000n\000f\000o)
+endobj
+2769 0 obj
+<< /S /GoTo /D (subsection.6.83.3) >>
+endobj
+2772 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2773 0 obj
+<< /S /GoTo /D (section*.521) >>
+endobj
+2776 0 obj
+(\376\377\000c\000o\000u\000n\000t)
+endobj
+2777 0 obj
+<< /S /GoTo /D (section*.522) >>
+endobj
+2780 0 obj
+(\376\377\000i\000s\000\137\000a\000d\000d\000e\000d)
+endobj
+2781 0 obj
+<< /S /GoTo /D (section.6.84) >>
+endobj
+2784 0 obj
+(\376\377\000T\000a\000b\000l\000e\000L\000i\000s\000t\000<\000\040\000T\000\040\000>\000\040\000C\000l\000a\000s\000s\000\040\000T\000e\000m\000p\000l\000a\000t\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2785 0 obj
+<< /S /GoTo /D (subsection.6.84.1) >>
+endobj
+2788 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2789 0 obj
+<< /S /GoTo /D (subsection.6.84.2) >>
+endobj
+2792 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2793 0 obj
+<< /S /GoTo /D (section*.528) >>
+endobj
+2796 0 obj
+(\376\377\000T\000a\000b\000l\000e)
+endobj
+2797 0 obj
+<< /S /GoTo /D (subsection.6.84.3) >>
+endobj
+2800 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2801 0 obj
+<< /S /GoTo /D (section*.529) >>
+endobj
+2804 0 obj
+(\376\377\000T\000a\000b\000l\000e\000L\000i\000s\000t)
+endobj
+2805 0 obj
+<< /S /GoTo /D (subsection.6.84.4) >>
+endobj
+2808 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2809 0 obj
+<< /S /GoTo /D (section*.530) >>
+endobj
+2812 0 obj
+(\376\377\000a\000d\000d\000\137\000t\000a\000b\000l\000e)
+endobj
+2813 0 obj
+<< /S /GoTo /D (section*.531) >>
+endobj
+2816 0 obj
+(\376\377\000r\000e\000m\000o\000v\000e\000\137\000t\000a\000b\000l\000e)
+endobj
+2817 0 obj
+<< /S /GoTo /D (subsection.6.84.5) >>
+endobj
+2820 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2821 0 obj
+<< /S /GoTo /D (section*.532) >>
+endobj
+2824 0 obj
+(\376\377\000m\000\137\000h\000e\000a\000d)
+endobj
+2825 0 obj
+<< /S /GoTo /D (section*.533) >>
+endobj
+2828 0 obj
+(\376\377\000m\000\137\000l\000o\000c\000k)
+endobj
+2829 0 obj
+<< /S /GoTo /D (section.6.85) >>
+endobj
+2832 0 obj
+(\376\377\000T\000a\000r\000g\000e\000t\000I\000m\000a\000g\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2833 0 obj
+<< /S /GoTo /D (subsection.6.85.1) >>
+endobj
+2836 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2837 0 obj
+<< /S /GoTo /D (subsection.6.85.2) >>
+endobj
+2840 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2841 0 obj
+<< /S /GoTo /D (section*.536) >>
+endobj
+2844 0 obj
+(\376\377\000T\000a\000r\000g\000e\000t\000I\000m\000a\000g\000e)
+endobj
+2845 0 obj
+<< /S /GoTo /D (subsection.6.85.3) >>
+endobj
+2848 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2849 0 obj
+<< /S /GoTo /D (section*.537) >>
+endobj
+2852 0 obj
+(\376\377\000d\000a\000t\000a)
+endobj
+2853 0 obj
+<< /S /GoTo /D (section*.538) >>
+endobj
+2856 0 obj
+(\376\377\000n\000a\000m\000e)
+endobj
+2857 0 obj
+<< /S /GoTo /D (section*.539) >>
+endobj
+2860 0 obj
+(\376\377\000o\000f\000f\000s\000e\000t)
+endobj
+2861 0 obj
+<< /S /GoTo /D (section*.540) >>
+endobj
+2864 0 obj
+(\376\377\000o\000r\000i\000g\000i\000n)
+endobj
+2865 0 obj
+<< /S /GoTo /D (section*.541) >>
+endobj
+2868 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+2869 0 obj
+<< /S /GoTo /D (section.6.86) >>
+endobj
+2872 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2873 0 obj
+<< /S /GoTo /D (subsection.6.86.1) >>
+endobj
+2876 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2877 0 obj
+<< /S /GoTo /D (subsection.6.86.2) >>
+endobj
+2880 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2881 0 obj
+<< /S /GoTo /D (section*.544) >>
+endobj
+2884 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d)
+endobj
+2885 0 obj
+<< /S /GoTo /D (section*.545) >>
+endobj
+2888 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d)
+endobj
+2889 0 obj
+<< /S /GoTo /D (subsection.6.86.3) >>
+endobj
+2892 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2893 0 obj
+<< /S /GoTo /D (section*.546) >>
+endobj
+2896 0 obj
+(\376\377\000g\000e\000t\000\137\000a\000u\000t\000o\000\137\000v\000a\000r\000s)
+endobj
+2897 0 obj
+<< /S /GoTo /D (section*.547) >>
+endobj
+2900 0 obj
+(\376\377\000g\000e\000t\000\137\000p\000i\000p\000e\000l\000i\000n\000e)
+endobj
+2901 0 obj
+<< /S /GoTo /D (section*.548) >>
+endobj
+2904 0 obj
+(\376\377\000s\000e\000t\000\137\000p\000i\000p\000e\000l\000i\000n\000e)
+endobj
+2905 0 obj
+<< /S /GoTo /D (subsection.6.86.4) >>
+endobj
+2908 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2909 0 obj
+<< /S /GoTo /D (section*.549) >>
+endobj
+2912 0 obj
+(\376\377\000m\000\137\000a\000d\000d\000r\000\137\000c\000o\000i\000p\000i\000p\000e\000\137\000c\000o\000u\000n\000t\000e\000r)
+endobj
+2913 0 obj
+<< /S /GoTo /D (section*.550) >>
+endobj
+2916 0 obj
+(\376\377\000m\000\137\000a\000u\000t\000o\000\137\000v\000a\000r\000s)
+endobj
+2917 0 obj
+<< /S /GoTo /D (section*.551) >>
+endobj
+2920 0 obj
+(\376\377\000m\000\137\000p\000i\000p\000e\000l\000i\000n\000e\000s)
+endobj
+2921 0 obj
+<< /S /GoTo /D (section.6.87) >>
+endobj
+2924 0 obj
+(\376\377\000V\000a\000r\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+2925 0 obj
+<< /S /GoTo /D (subsection.6.87.1) >>
+endobj
+2928 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+2929 0 obj
+<< /S /GoTo /D (subsection.6.87.2) >>
+endobj
+2932 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+2933 0 obj
+<< /S /GoTo /D (section*.553) >>
+endobj
+2936 0 obj
+(\376\377\000"\000@\0005)
+endobj
+2937 0 obj
+<< /S /GoTo /D (section*.554) >>
+endobj
+2940 0 obj
+(\376\377\000"\000@\0007)
+endobj
+2941 0 obj
+<< /S /GoTo /D (section*.555) >>
+endobj
+2944 0 obj
+(\376\377\000a\000l\000i\000g\000n)
+endobj
+2945 0 obj
+<< /S /GoTo /D (section*.556) >>
+endobj
+2948 0 obj
+(\376\377\000a\000l\000l\000o\000c)
+endobj
+2949 0 obj
+<< /S /GoTo /D (section*.557) >>
+endobj
+2952 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000d\000i\000s\000p)
+endobj
+2953 0 obj
+<< /S /GoTo /D (section*.558) >>
+endobj
+2956 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000i\000f)
+endobj
+2957 0 obj
+<< /S /GoTo /D (section*.559) >>
+endobj
+2960 0 obj
+(\376\377\000b\000i\000t\000s)
+endobj
+2961 0 obj
+<< /S /GoTo /D (section*.560) >>
+endobj
+2964 0 obj
+(\376\377\000b\000i\000t\000s)
+endobj
+2965 0 obj
+<< /S /GoTo /D (section*.561) >>
+endobj
+2968 0 obj
+(\376\377\000c\000o\000u\000n\000t)
+endobj
+2969 0 obj
+<< /S /GoTo /D (section*.562) >>
+endobj
+2972 0 obj
+(\376\377\000d\000i\000r\000e\000c\000t\000i\000o\000n)
+endobj
+2973 0 obj
+<< /S /GoTo /D (section*.563) >>
+endobj
+2976 0 obj
+(\376\377\000d\000i\000s\000p)
+endobj
+2977 0 obj
+<< /S /GoTo /D (section*.564) >>
+endobj
+2980 0 obj
+(\376\377\000d\000s\000t)
+endobj
+2981 0 obj
+<< /S /GoTo /D (section*.565) >>
+endobj
+2984 0 obj
+(\376\377\000f\000l\000a\000g\000s)
+endobj
+2985 0 obj
+<< /S /GoTo /D (section*.566) >>
+endobj
+2988 0 obj
+(\376\377\000f\000r\000e\000e\000\137\000i\000f)
+endobj
+2989 0 obj
+<< /S /GoTo /D (section*.567) >>
+endobj
+2992 0 obj
+(\376\377\000h\000a\000s\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+2993 0 obj
+<< /S /GoTo /D (section*.568) >>
+endobj
+2996 0 obj
+(\376\377\000i\000n)
+endobj
+2997 0 obj
+<< /S /GoTo /D (section*.569) >>
+endobj
+3000 0 obj
+(\376\377\000i\000n\000t\000o)
+endobj
+3001 0 obj
+<< /S /GoTo /D (section*.570) >>
+endobj
+3004 0 obj
+(\376\377\000i\000s\000\137\000n\000o\000n\000c\000o\000n\000t\000\137\000d\000s\000t)
+endobj
+3005 0 obj
+<< /S /GoTo /D (section*.571) >>
+endobj
+3008 0 obj
+(\376\377\000i\000s\000\137\000n\000o\000n\000c\000o\000n\000t\000\137\000s\000r\000c)
+endobj
+3009 0 obj
+<< /S /GoTo /D (section*.572) >>
+endobj
+3012 0 obj
+(\376\377\000i\000s\000\137\000s\000t\000a\000c\000k\000\137\000b\000u\000f)
+endobj
+3013 0 obj
+<< /S /GoTo /D (section*.573) >>
+endobj
+3016 0 obj
+(\376\377\000i\000s\000\137\000s\000t\000a\000t\000i\000c)
+endobj
+3017 0 obj
+<< /S /GoTo /D (section*.574) >>
+endobj
+3020 0 obj
+(\376\377\000i\000s\000\137\000s\000t\000a\000t\000i\000c\000\137\000d\000s\000t\000n)
+endobj
+3021 0 obj
+<< /S /GoTo /D (section*.575) >>
+endobj
+3024 0 obj
+(\376\377\000m\000i\000c\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+3025 0 obj
+<< /S /GoTo /D (section*.576) >>
+endobj
+3028 0 obj
+(\376\377\000o\000f\000f\000s\000e\000t)
+endobj
+3029 0 obj
+<< /S /GoTo /D (section*.577) >>
+endobj
+3032 0 obj
+(\376\377\000o\000u\000t)
+endobj
+3033 0 obj
+<< /S /GoTo /D (section*.578) >>
+endobj
+3036 0 obj
+(\376\377\000p\000t\000r)
+endobj
+3037 0 obj
+<< /S /GoTo /D (section*.579) >>
+endobj
+3040 0 obj
+(\376\377\000p\000t\000r\000\137\000a\000r\000r\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+3041 0 obj
+<< /S /GoTo /D (section*.580) >>
+endobj
+3044 0 obj
+(\376\377\000s\000i\000n\000k\000\137\000a\000d\000d\000r)
+endobj
+3045 0 obj
+<< /S /GoTo /D (section*.581) >>
+endobj
+3048 0 obj
+(\376\377\000s\000i\000z\000e)
+endobj
+3049 0 obj
+<< /S /GoTo /D (section*.582) >>
+endobj
+3052 0 obj
+(\376\377\000s\000r\000c)
+endobj
+3053 0 obj
+<< /S /GoTo /D (section*.583) >>
+endobj
+3056 0 obj
+(\376\377\000t\000y\000p\000e)
+endobj
+3057 0 obj
+<< /S /GoTo /D (section.6.88) >>
+endobj
+3060 0 obj
+(\376\377\000V\000a\000r\000D\000e\000s\000c\0002\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3061 0 obj
+<< /S /GoTo /D (subsection.6.88.1) >>
+endobj
+3064 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3065 0 obj
+<< /S /GoTo /D (subsection.6.88.2) >>
+endobj
+3068 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3069 0 obj
+<< /S /GoTo /D (section*.585) >>
+endobj
+3072 0 obj
+(\376\377\000d\000n\000a\000m\000e)
+endobj
+3073 0 obj
+<< /S /GoTo /D (section*.586) >>
+endobj
+3076 0 obj
+(\376\377\000s\000n\000a\000m\000e)
+endobj
+3077 0 obj
+<< /S /GoTo /D (section.6.89) >>
+endobj
+3080 0 obj
+(\376\377\000V\000a\000r\000D\000e\000s\000c\0003\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3081 0 obj
+<< /S /GoTo /D (subsection.6.89.1) >>
+endobj
+3084 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3085 0 obj
+<< /S /GoTo /D (subsection.6.89.2) >>
+endobj
+3088 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3089 0 obj
+<< /S /GoTo /D (section*.588) >>
+endobj
+3092 0 obj
+(\376\377\000a\000l\000i\000g\000n\000\137\000a\000r\000r\000a\000y)
+endobj
+3093 0 obj
+<< /S /GoTo /D (section*.589) >>
+endobj
+3096 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000e\000l\000e\000m\000e\000n\000t\000s)
+endobj
+3097 0 obj
+<< /S /GoTo /D (section*.590) >>
+endobj
+3100 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000i\000f\000\137\000a\000r\000r\000a\000y)
+endobj
+3101 0 obj
+<< /S /GoTo /D (section*.591) >>
+endobj
+3104 0 obj
+(\376\377\000a\000l\000l\000o\000c\000\137\000s\000t\000a\000r\000t)
+endobj
+3105 0 obj
+<< /S /GoTo /D (section*.592) >>
+endobj
+3108 0 obj
+(\376\377\000a\000r\000r\000a\000y\000\137\000f\000i\000e\000l\000d\000s)
+endobj
+3109 0 obj
+<< /S /GoTo /D (section*.593) >>
+endobj
+3112 0 obj
+(\376\377\000e\000x\000t\000e\000n\000t\000\137\000e\000l\000e\000m\000e\000n\000t\000s)
+endobj
+3113 0 obj
+<< /S /GoTo /D (section*.594) >>
+endobj
+3116 0 obj
+(\376\377\000e\000x\000t\000e\000n\000t\000\137\000s\000t\000a\000r\000t)
+endobj
+3117 0 obj
+<< /S /GoTo /D (section*.595) >>
+endobj
+3120 0 obj
+(\376\377\000f\000r\000e\000e\000\137\000i\000f\000\137\000a\000r\000r\000a\000y)
+endobj
+3121 0 obj
+<< /S /GoTo /D (section*.596) >>
+endobj
+3124 0 obj
+(\376\377\000i\000n\000t\000o\000\137\000e\000l\000e\000m\000e\000n\000t\000s)
+endobj
+3125 0 obj
+<< /S /GoTo /D (section*.597) >>
+endobj
+3128 0 obj
+(\376\377\000i\000n\000t\000o\000\137\000s\000t\000a\000r\000t)
+endobj
+3129 0 obj
+<< /S /GoTo /D (section*.598) >>
+endobj
+3132 0 obj
+(\376\377\000p\000t\000r\000\137\000a\000r\000r\000a\000y)
+endobj
+3133 0 obj
+<< /S /GoTo /D (section.6.90) >>
+endobj
+3136 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000D\000e\000s\000c\000r\000i\000p\000t\000o\000r\000:\000:\000V\000a\000r\000E\000x\000t\000r\000a\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3137 0 obj
+<< /S /GoTo /D (subsection.6.90.1) >>
+endobj
+3140 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3141 0 obj
+<< /S /GoTo /D (subsection.6.90.2) >>
+endobj
+3144 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3145 0 obj
+<< /S /GoTo /D (section*.600) >>
+endobj
+3148 0 obj
+(\376\377\000a\000u\000t\000o\000\137\000d\000a\000t\000a)
+endobj
+3149 0 obj
+<< /S /GoTo /D (section*.601) >>
+endobj
+3152 0 obj
+(\376\377\000c\000p\000u\000\137\000d\000i\000s\000p)
+endobj
+3153 0 obj
+<< /S /GoTo /D (section*.602) >>
+endobj
+3156 0 obj
+(\376\377\000c\000p\000u\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+3157 0 obj
+<< /S /GoTo /D (section*.603) >>
+endobj
+3160 0 obj
+(\376\377\000d\000s\000t\000\137\000d\000a\000t\000a)
+endobj
+3161 0 obj
+<< /S /GoTo /D (section*.604) >>
+endobj
+3164 0 obj
+(\376\377\000i\000s\000\137\000a\000r\000r\000\137\000p\000t\000r\000\137\000e\000l)
+endobj
+3165 0 obj
+<< /S /GoTo /D (section*.605) >>
+endobj
+3168 0 obj
+(\376\377\000p\000t\000r\000\137\000a\000r\000r\000\137\000o\000f\000f\000s\000e\000t)
+endobj
+3169 0 obj
+<< /S /GoTo /D (section*.606) >>
+endobj
+3172 0 obj
+(\376\377\000r\000e\000a\000d\000\137\000r\000n\000g\000\137\000d\000s\000t)
+endobj
+3173 0 obj
+<< /S /GoTo /D (section*.607) >>
+endobj
+3176 0 obj
+(\376\377\000r\000e\000a\000d\000\137\000r\000n\000g\000\137\000s\000r\000c)
+endobj
+3177 0 obj
+<< /S /GoTo /D (section*.608) >>
+endobj
+3180 0 obj
+(\376\377\000s\000r\000c\000\137\000d\000a\000t\000a)
+endobj
+3181 0 obj
+<< /S /GoTo /D (section.6.91) >>
+endobj
+3184 0 obj
+(\376\377\000V\000a\000r\000L\000i\000s\000t\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3185 0 obj
+<< /S /GoTo /D (subsection.6.91.1) >>
+endobj
+3188 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3189 0 obj
+<< /S /GoTo /D (subsection.6.91.2) >>
+endobj
+3192 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3193 0 obj
+<< /S /GoTo /D (section*.613) >>
+endobj
+3196 0 obj
+(\376\377\000V\000a\000r\000L\000i\000s\000t)
+endobj
+3197 0 obj
+<< /S /GoTo /D (subsection.6.91.3) >>
+endobj
+3200 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3201 0 obj
+<< /S /GoTo /D (section*.614) >>
+endobj
+3204 0 obj
+(\376\377\000b\000e\000g\000i\000n)
+endobj
+3205 0 obj
+<< /S /GoTo /D (section*.615) >>
+endobj
+3208 0 obj
+(\376\377\000d\000u\000m\000p)
+endobj
+3209 0 obj
+<< /S /GoTo /D (section*.616) >>
+endobj
+3212 0 obj
+(\376\377\000e\000n\000d)
+endobj
+3213 0 obj
+<< /S /GoTo /D (section*.617) >>
+endobj
+3216 0 obj
+(\376\377\000t\000a\000b\000l\000e\000\137\000c\000o\000p\000y)
+endobj
+3217 0 obj
+<< /S /GoTo /D (section*.618) >>
+endobj
+3220 0 obj
+(\376\377\000t\000a\000b\000l\000e\000\137\000p\000a\000t\000c\000h\000\137\000n\000a\000m\000e\000s)
+endobj
+3221 0 obj
+<< /S /GoTo /D (section*.619) >>
+endobj
+3224 0 obj
+(\376\377\000t\000a\000b\000l\000e\000\137\000s\000i\000z\000e)
+endobj
+3225 0 obj
+<< /S /GoTo /D (section.6.92) >>
+endobj
+3228 0 obj
+(\376\377\000V\000a\000r\000T\000a\000b\000l\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3229 0 obj
+<< /S /GoTo /D (subsection.6.92.1) >>
+endobj
+3232 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3233 0 obj
+<< /S /GoTo /D (subsection.6.92.2) >>
+endobj
+3236 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3237 0 obj
+<< /S /GoTo /D (section*.622) >>
+endobj
+3240 0 obj
+(\376\377\000e\000n\000t\000r\000i\000e\000s)
+endobj
+3241 0 obj
+<< /S /GoTo /D (section.6.93) >>
+endobj
+3244 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r\000:\000:\000V\000a\000r\000V\000a\000l\000u\000e\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3245 0 obj
+<< /S /GoTo /D (subsection.6.93.1) >>
+endobj
+3248 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3249 0 obj
+<< /S /GoTo /D (subsection.6.93.2) >>
+endobj
+3252 0 obj
+(\376\377\000C\000o\000n\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000\046\000\040\000D\000e\000s\000t\000r\000u\000c\000t\000o\000r\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3253 0 obj
+<< /S /GoTo /D (section*.625) >>
+endobj
+3256 0 obj
+(\376\377\000V\000a\000r\000V\000a\000l\000u\000e)
+endobj
+3257 0 obj
+<< /S /GoTo /D (section*.626) >>
+endobj
+3260 0 obj
+(\376\377\000V\000a\000r\000V\000a\000l\000u\000e)
+endobj
+3261 0 obj
+<< /S /GoTo /D (subsection.6.93.3) >>
+endobj
+3264 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3265 0 obj
+<< /S /GoTo /D (section*.627) >>
+endobj
+3268 0 obj
+(\376\377\000e\000n\000v\000\137\000v\000a\000r)
+endobj
+3269 0 obj
+<< /S /GoTo /D (section*.628) >>
+endobj
+3272 0 obj
+(\376\377\000e\000n\000v\000\137\000v\000a\000r\000\137\000v\000a\000l\000u\000e)
+endobj
+3273 0 obj
+<< /S /GoTo /D (section*.629) >>
+endobj
+3276 0 obj
+(\376\377\000l\000e\000n\000g\000t\000h)
+endobj
+3277 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+3280 0 obj
+(\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3281 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+3284 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000u\000t\000i\000l\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3285 0 obj
+<< /S /GoTo /D (subsection.7.1.1) >>
+endobj
+3288 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3289 0 obj
+<< /S /GoTo /D (section*.633) >>
+endobj
+3292 0 obj
+(\376\377\000f\000p\000p)
+endobj
+3293 0 obj
+<< /S /GoTo /D (subsection.7.1.2) >>
+endobj
+3296 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3297 0 obj
+<< /S /GoTo /D (section*.634) >>
+endobj
+3300 0 obj
+(\376\377\000\137\000\137\000a\000r\000r\000\137\000d\000a\000t\000a\000\137\000o\000f\000f\000s\000e\000t\000\137\000a\000n\000d\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3301 0 obj
+<< /S /GoTo /D (section*.635) >>
+endobj
+3304 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000g\000e\000t\000\137\000t\000r\000a\000n\000s\000f\000\137\000s\000i\000z\000e)
+endobj
+3305 0 obj
+<< /S /GoTo /D (section*.636) >>
+endobj
+3308 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000r\000a\000n\000g\000e\000s\000\137\000m\000a\000t\000c\000h)
+endobj
+3309 0 obj
+<< /S /GoTo /D (section*.637) >>
+endobj
+3312 0 obj
+(\376\377\000g\000e\000n\000e\000r\000a\000t\000e\000\137\000m\000e\000m\000\137\000r\000a\000n\000g\000e\000s)
+endobj
+3313 0 obj
+<< /S /GoTo /D (section*.638) >>
+endobj
+3316 0 obj
+(\376\377\000g\000e\000n\000e\000r\000a\000t\000e\000\137\000m\000e\000m\000\137\000r\000a\000n\000g\000e\000s\000\137\000o\000n\000e\000\137\000r\000a\000n\000k)
+endobj
+3317 0 obj
+<< /S /GoTo /D (section*.639) >>
+endobj
+3320 0 obj
+(\376\377\000g\000e\000n\000e\000r\000a\000t\000e\000\137\000o\000n\000e\000\137\000r\000a\000n\000g\000e)
+endobj
+3321 0 obj
+<< /S /GoTo /D (section*.640) >>
+endobj
+3324 0 obj
+(\376\377\000g\000e\000t\000\137\000n\000e\000x\000t\000\137\000r\000a\000n\000g\000e)
+endobj
+3325 0 obj
+<< /S /GoTo /D (section*.641) >>
+endobj
+3328 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000r\000e\000a\000d\000\137\000r\000a\000n\000g\000e\000s\000\137\000a\000r\000r\000\137\000d\000e\000s\000c)
+endobj
+3329 0 obj
+<< /S /GoTo /D (section*.642) >>
+endobj
+3332 0 obj
+(\376\377\000i\000s\000\137\000a\000r\000r\000\137\000d\000e\000s\000c\000\137\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s)
+endobj
+3333 0 obj
+<< /S /GoTo /D (subsection.7.1.3) >>
+endobj
+3336 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3337 0 obj
+<< /S /GoTo /D (section*.643) >>
+endobj
+3340 0 obj
+(\376\377\000l\000a\000s\000t\000\137\000l\000e\000f\000t)
+endobj
+3341 0 obj
+<< /S /GoTo /D (section*.644) >>
+endobj
+3344 0 obj
+(\376\377\000l\000a\000s\000t\000\137\000r\000i\000g\000h\000t)
+endobj
+3345 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+3348 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000u\000t\000i\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3349 0 obj
+<< /S /GoTo /D (subsection.7.2.1) >>
+endobj
+3352 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3353 0 obj
+<< /S /GoTo /D (section*.648) >>
+endobj
+3356 0 obj
+(\376\377\000\137\000\137\000a\000r\000r\000\137\000d\000e\000s\000c\000\137\000d\000u\000m\000p)
+endobj
+3357 0 obj
+<< /S /GoTo /D (section*.649) >>
+endobj
+3360 0 obj
+(\376\377\000\137\000\137\000a\000r\000r\000\137\000d\000e\000s\000c\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3361 0 obj
+<< /S /GoTo /D (subsection.7.2.2) >>
+endobj
+3364 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3365 0 obj
+<< /S /GoTo /D (section*.650) >>
+endobj
+3368 0 obj
+(\376\377\000\137\000\137\000a\000r\000r\000\137\000d\000a\000t\000a\000\137\000o\000f\000f\000s\000e\000t\000\137\000a\000n\000d\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3369 0 obj
+<< /S /GoTo /D (section*.651) >>
+endobj
+3372 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000g\000e\000t\000\137\000t\000r\000a\000n\000s\000f\000\137\000s\000i\000z\000e)
+endobj
+3373 0 obj
+<< /S /GoTo /D (section*.652) >>
+endobj
+3376 0 obj
+(\376\377\000c\000e\000a\000n\000\137\000r\000a\000n\000g\000e\000s\000\137\000m\000a\000t\000c\000h)
+endobj
+3377 0 obj
+<< /S /GoTo /D (section*.653) >>
+endobj
+3380 0 obj
+(\376\377\000g\000e\000t\000\137\000n\000e\000x\000t\000\137\000r\000a\000n\000g\000e)
+endobj
+3381 0 obj
+<< /S /GoTo /D (section*.654) >>
+endobj
+3384 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000r\000e\000a\000d\000\137\000r\000a\000n\000g\000e\000s\000\137\000a\000r\000r\000\137\000d\000e\000s\000c)
+endobj
+3385 0 obj
+<< /S /GoTo /D (section*.655) >>
+endobj
+3388 0 obj
+(\376\377\000i\000s\000\137\000a\000r\000r\000\137\000d\000e\000s\000c\000\137\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s)
+endobj
+3389 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+3392 0 obj
+(\376\377\000c\000o\000i\000/\000c\000o\000i\000\137\000c\000l\000i\000e\000n\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3393 0 obj
+<< /S /GoTo /D (subsection.7.3.1) >>
+endobj
+3396 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3397 0 obj
+<< /S /GoTo /D (section*.660) >>
+endobj
+3400 0 obj
+(\376\377\000C\000O\000I\000\137\000V\000E\000R\000S\000I\000O\000N\0001)
+endobj
+3401 0 obj
+<< /S /GoTo /D (section*.661) >>
+endobj
+3404 0 obj
+(\376\377\000C\000O\000I\000\137\000V\000E\000R\000S\000I\000O\000N\0002)
+endobj
+3405 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+3408 0 obj
+(\376\377\000c\000o\000i\000/\000c\000o\000i\000\137\000c\000l\000i\000e\000n\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3409 0 obj
+<< /S /GoTo /D (subsection.7.4.1) >>
+endobj
+3412 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3413 0 obj
+<< /S /GoTo /D (section*.665) >>
+endobj
+3416 0 obj
+(\376\377\000M\000I\000C\000\137\000E\000N\000G\000I\000N\000E\000S\000\137\000M\000A\000X)
+endobj
+3417 0 obj
+<< /S /GoTo /D (section.7.5) >>
+endobj
+3420 0 obj
+(\376\377\000c\000o\000i\000/\000c\000o\000i\000\137\000s\000e\000r\000v\000e\000r\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3421 0 obj
+<< /S /GoTo /D (subsection.7.5.1) >>
+endobj
+3424 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3425 0 obj
+<< /S /GoTo /D (section*.667) >>
+endobj
+3428 0 obj
+(\376\377\000s\000e\000r\000v\000e\000r\000\137\000c\000o\000m\000p\000u\000t\000e)
+endobj
+3429 0 obj
+<< /S /GoTo /D (section*.668) >>
+endobj
+3432 0 obj
+(\376\377\000s\000e\000r\000v\000e\000r\000\137\000i\000n\000i\000t)
+endobj
+3433 0 obj
+<< /S /GoTo /D (section*.669) >>
+endobj
+3436 0 obj
+(\376\377\000s\000e\000r\000v\000e\000r\000\137\000v\000a\000r\000\137\000t\000a\000b\000l\000e\000\137\000c\000o\000p\000y)
+endobj
+3437 0 obj
+<< /S /GoTo /D (section*.670) >>
+endobj
+3440 0 obj
+(\376\377\000s\000e\000r\000v\000e\000r\000\137\000v\000a\000r\000\137\000t\000a\000b\000l\000e\000\137\000s\000i\000z\000e)
+endobj
+3441 0 obj
+<< /S /GoTo /D (section.7.6) >>
+endobj
+3444 0 obj
+(\376\377\000c\000o\000i\000/\000c\000o\000i\000\137\000s\000e\000r\000v\000e\000r\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3445 0 obj
+<< /S /GoTo /D (subsection.7.6.1) >>
+endobj
+3448 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3449 0 obj
+<< /S /GoTo /D (section*.672) >>
+endobj
+3452 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000A\000d\000d\000R\000e\000f)
+endobj
+3453 0 obj
+<< /S /GoTo /D (section*.673) >>
+endobj
+3456 0 obj
+(\376\377\000B\000u\000f\000f\000e\000r\000R\000e\000l\000e\000a\000s\000e\000R\000e\000f)
+endobj
+3457 0 obj
+<< /S /GoTo /D (section*.674) >>
+endobj
+3460 0 obj
+(\376\377\000E\000n\000g\000i\000n\000e\000G\000e\000t\000I\000n\000d\000e\000x)
+endobj
+3461 0 obj
+<< /S /GoTo /D (section*.675) >>
+endobj
+3464 0 obj
+(\376\377\000P\000i\000p\000e\000l\000i\000n\000e\000S\000t\000a\000r\000t\000E\000x\000e\000c\000u\000t\000i\000n\000g\000R\000u\000n\000F\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+3465 0 obj
+<< /S /GoTo /D (section*.676) >>
+endobj
+3468 0 obj
+(\376\377\000P\000r\000o\000c\000e\000s\000s\000W\000a\000i\000t\000F\000o\000r\000S\000h\000u\000t\000d\000o\000w\000n)
+endobj
+3469 0 obj
+<< /S /GoTo /D (section.7.7) >>
+endobj
+3472 0 obj
+(\376\377\000c\000o\000m\000p\000i\000l\000e\000r\000\137\000i\000f\000\137\000h\000o\000s\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3473 0 obj
+<< /S /GoTo /D (subsection.7.7.1) >>
+endobj
+3476 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3477 0 obj
+<< /S /GoTo /D (section*.679) >>
+endobj
+3480 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000C\000A\000L\000L\000\137\000C\000O\000U\000N\000T)
+endobj
+3481 0 obj
+<< /S /GoTo /D (section*.680) >>
+endobj
+3484 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D)
+endobj
+3485 0 obj
+<< /S /GoTo /D (section*.681) >>
+endobj
+3488 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0001)
+endobj
+3489 0 obj
+<< /S /GoTo /D (section*.682) >>
+endobj
+3492 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0002)
+endobj
+3493 0 obj
+<< /S /GoTo /D (section*.683) >>
+endobj
+3496 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000w\000r\000a\000p)
+endobj
+3497 0 obj
+<< /S /GoTo /D (section*.684) >>
+endobj
+3500 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E)
+endobj
+3501 0 obj
+<< /S /GoTo /D (section*.685) >>
+endobj
+3504 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E\0001)
+endobj
+3505 0 obj
+<< /S /GoTo /D (subsection.7.7.2) >>
+endobj
+3508 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3509 0 obj
+<< /S /GoTo /D (section*.686) >>
+endobj
+3512 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000c\000a\000l\000l\000\137\000c\000o\000u\000n\000t)
+endobj
+3513 0 obj
+<< /S /GoTo /D (section.7.8) >>
+endobj
+3516 0 obj
+(\376\377\000c\000o\000m\000p\000i\000l\000e\000r\000\137\000i\000f\000\137\000h\000o\000s\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3517 0 obj
+<< /S /GoTo /D (subsection.7.8.1) >>
+endobj
+3520 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3521 0 obj
+<< /S /GoTo /D (subsection.7.8.2) >>
+endobj
+3524 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3525 0 obj
+<< /S /GoTo /D (section*.689) >>
+endobj
+3528 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000C\000A\000L\000L\000\137\000C\000O\000U\000N\000T)
+endobj
+3529 0 obj
+<< /S /GoTo /D (section*.690) >>
+endobj
+3532 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D)
+endobj
+3533 0 obj
+<< /S /GoTo /D (section*.691) >>
+endobj
+3536 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0001)
+endobj
+3537 0 obj
+<< /S /GoTo /D (section*.692) >>
+endobj
+3540 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0002)
+endobj
+3541 0 obj
+<< /S /GoTo /D (section*.693) >>
+endobj
+3544 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E)
+endobj
+3545 0 obj
+<< /S /GoTo /D (section*.694) >>
+endobj
+3548 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E\0001)
+endobj
+3549 0 obj
+<< /S /GoTo /D (subsection.7.8.3) >>
+endobj
+3552 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3553 0 obj
+<< /S /GoTo /D (section*.695) >>
+endobj
+3556 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000C\000A\000L\000L\000\137\000C\000O\000U\000N\000T)
+endobj
+3557 0 obj
+<< /S /GoTo /D (section*.696) >>
+endobj
+3560 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D)
+endobj
+3561 0 obj
+<< /S /GoTo /D (section*.697) >>
+endobj
+3564 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0001)
+endobj
+3565 0 obj
+<< /S /GoTo /D (section*.698) >>
+endobj
+3568 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000F\000F\000L\000O\000A\000D\0002)
+endobj
+3569 0 obj
+<< /S /GoTo /D (section*.699) >>
+endobj
+3572 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E)
+endobj
+3573 0 obj
+<< /S /GoTo /D (section*.700) >>
+endobj
+3576 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000A\000C\000Q\000U\000I\000R\000E\0001)
+endobj
+3577 0 obj
+<< /S /GoTo /D (section.7.9) >>
+endobj
+3580 0 obj
+(\376\377\000c\000o\000m\000p\000i\000l\000e\000r\000\137\000i\000f\000\137\000t\000a\000r\000g\000e\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3581 0 obj
+<< /S /GoTo /D (subsection.7.9.1) >>
+endobj
+3584 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3585 0 obj
+<< /S /GoTo /D (section*.702) >>
+endobj
+3588 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000E\000N\000T\000E\000R)
+endobj
+3589 0 obj
+<< /S /GoTo /D (section*.703) >>
+endobj
+3592 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000L\000E\000A\000V\000E)
+endobj
+3593 0 obj
+<< /S /GoTo /D (section*.704) >>
+endobj
+3596 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000M\000A\000I\000N)
+endobj
+3597 0 obj
+<< /S /GoTo /D (section.7.10) >>
+endobj
+3600 0 obj
+(\376\377\000c\000o\000m\000p\000i\000l\000e\000r\000\137\000i\000f\000\137\000t\000a\000r\000g\000e\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3601 0 obj
+<< /S /GoTo /D (subsection.7.10.1) >>
+endobj
+3604 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+3605 0 obj
+<< /S /GoTo /D (subsection.7.10.2) >>
+endobj
+3608 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3609 0 obj
+<< /S /GoTo /D (section*.707) >>
+endobj
+3612 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000E\000N\000T\000E\000R)
+endobj
+3613 0 obj
+<< /S /GoTo /D (section*.708) >>
+endobj
+3616 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000L\000E\000A\000V\000E)
+endobj
+3617 0 obj
+<< /S /GoTo /D (section*.709) >>
+endobj
+3620 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000M\000A\000I\000N)
+endobj
+3621 0 obj
+<< /S /GoTo /D (subsection.7.10.3) >>
+endobj
+3624 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3625 0 obj
+<< /S /GoTo /D (section*.710) >>
+endobj
+3628 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000E\000N\000T\000E\000R)
+endobj
+3629 0 obj
+<< /S /GoTo /D (section*.711) >>
+endobj
+3632 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000L\000E\000A\000V\000E)
+endobj
+3633 0 obj
+<< /S /GoTo /D (section*.712) >>
+endobj
+3636 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000A\000R\000G\000E\000T\000\137\000M\000A\000I\000N)
+endobj
+3637 0 obj
+<< /S /GoTo /D (section.7.11) >>
+endobj
+3640 0 obj
+(\376\377\000d\000v\000\137\000u\000t\000i\000l\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3641 0 obj
+<< /S /GoTo /D (subsection.7.11.1) >>
+endobj
+3644 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3645 0 obj
+<< /S /GoTo /D (section*.714) >>
+endobj
+3648 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000d\000a\000t\000a\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3649 0 obj
+<< /S /GoTo /D (section*.715) >>
+endobj
+3652 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000d\000a\000t\000a\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3653 0 obj
+<< /S /GoTo /D (section*.716) >>
+endobj
+3656 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000i\000s\000\137\000a\000l\000l\000o\000c\000a\000t\000e\000d)
+endobj
+3657 0 obj
+<< /S /GoTo /D (section*.717) >>
+endobj
+3660 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000i\000s\000\137\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s)
+endobj
+3661 0 obj
+<< /S /GoTo /D (section*.718) >>
+endobj
+3664 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000r\000e\000a\000d\000\137\000r\000a\000n\000g\000e\000s\000\137\000d\000v)
+endobj
+3665 0 obj
+<< /S /GoTo /D (section.7.12) >>
+endobj
+3668 0 obj
+(\376\377\000d\000v\000\137\000u\000t\000i\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3669 0 obj
+<< /S /GoTo /D (subsection.7.12.1) >>
+endobj
+3672 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3673 0 obj
+<< /S /GoTo /D (section*.723) >>
+endobj
+3676 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000d\000e\000s\000c\000\137\000d\000u\000m\000p)
+endobj
+3677 0 obj
+<< /S /GoTo /D (section*.724) >>
+endobj
+3680 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c\000F\000l\000a\000g\000s\000C\000o\000n\000t\000i\000g\000u\000o\000u\000s)
+endobj
+3681 0 obj
+<< /S /GoTo /D (section*.725) >>
+endobj
+3684 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c\000F\000l\000a\000g\000s\000D\000e\000f\000i\000n\000e\000d)
+endobj
+3685 0 obj
+<< /S /GoTo /D (section*.726) >>
+endobj
+3688 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c\000F\000l\000a\000g\000s\000N\000o\000d\000e\000a\000l\000l\000o\000c)
+endobj
+3689 0 obj
+<< /S /GoTo /D (section*.727) >>
+endobj
+3692 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c\000M\000a\000x\000A\000r\000r\000a\000y\000R\000a\000n\000k)
+endobj
+3693 0 obj
+<< /S /GoTo /D (subsection.7.12.2) >>
+endobj
+3696 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3697 0 obj
+<< /S /GoTo /D (section*.728) >>
+endobj
+3700 0 obj
+(\376\377\000A\000r\000r\000D\000e\000s\000c)
+endobj
+3701 0 obj
+<< /S /GoTo /D (section*.729) >>
+endobj
+3704 0 obj
+(\376\377\000D\000i\000m\000D\000e\000s\000c)
+endobj
+3705 0 obj
+<< /S /GoTo /D (section*.730) >>
+endobj
+3708 0 obj
+(\376\377\000d\000v\000\137\000s\000i\000z\000e)
+endobj
+3709 0 obj
+<< /S /GoTo /D (section*.731) >>
+endobj
+3712 0 obj
+(\376\377\000p\000A\000r\000r\000D\000e\000s\000c)
+endobj
+3713 0 obj
+<< /S /GoTo /D (subsection.7.12.3) >>
+endobj
+3716 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3717 0 obj
+<< /S /GoTo /D (section*.732) >>
+endobj
+3720 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000d\000a\000t\000a\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3721 0 obj
+<< /S /GoTo /D (section*.733) >>
+endobj
+3724 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000d\000a\000t\000a\000\137\000l\000e\000n\000g\000t\000h)
+endobj
+3725 0 obj
+<< /S /GoTo /D (section*.734) >>
+endobj
+3728 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000i\000s\000\137\000a\000l\000l\000o\000c\000a\000t\000e\000d)
+endobj
+3729 0 obj
+<< /S /GoTo /D (section*.735) >>
+endobj
+3732 0 obj
+(\376\377\000\137\000\137\000d\000v\000\137\000i\000s\000\137\000c\000o\000n\000t\000i\000g\000u\000o\000u\000s)
+endobj
+3733 0 obj
+<< /S /GoTo /D (section*.736) >>
+endobj
+3736 0 obj
+(\376\377\000i\000n\000i\000t\000\137\000r\000e\000a\000d\000\137\000r\000a\000n\000g\000e\000s\000\137\000d\000v)
+endobj
+3737 0 obj
+<< /S /GoTo /D (section.7.13) >>
+endobj
+3740 0 obj
+(\376\377\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000r\000r\000o\000r\000.\000c\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3741 0 obj
+<< /S /GoTo /D (subsection.7.13.1) >>
+endobj
+3744 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3745 0 obj
+<< /S /GoTo /D (section*.739) >>
+endobj
+3748 0 obj
+(\376\377\000v\000a\000\137\000c\000o\000p\000y)
+endobj
+3749 0 obj
+<< /S /GoTo /D (subsection.7.13.2) >>
+endobj
+3752 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3753 0 obj
+<< /S /GoTo /D (section*.740) >>
+endobj
+3756 0 obj
+(\376\377\000\137\000\137\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000r\000r\000o\000r\000\137\000s\000u\000p\000p\000o\000r\000t)
+endobj
+3757 0 obj
+<< /S /GoTo /D (section*.741) >>
+endobj
+3760 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000h\000o\000s\000t\000\137\000s\000t\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3761 0 obj
+<< /S /GoTo /D (section*.742) >>
+endobj
+3764 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000m\000e\000s\000s\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3765 0 obj
+<< /S /GoTo /D (section*.743) >>
+endobj
+3768 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000t\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3769 0 obj
+<< /S /GoTo /D (section.7.14) >>
+endobj
+3772 0 obj
+(\376\377\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000r\000r\000o\000r\000\137\000c\000o\000d\000e\000s\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3773 0 obj
+<< /S /GoTo /D (subsection.7.14.1) >>
+endobj
+3776 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3777 0 obj
+<< /S /GoTo /D (section*.747) >>
+endobj
+3780 0 obj
+(\376\377\000L\000I\000B\000O\000F\000F\000L\000O\000A\000D\000\137\000A\000B\000O\000R\000T)
+endobj
+3781 0 obj
+<< /S /GoTo /D (section*.748) >>
+endobj
+3784 0 obj
+(\376\377\000L\000I\000B\000O\000F\000F\000L\000O\000A\000D\000\137\000E\000R\000R\000O\000R)
+endobj
+3785 0 obj
+<< /S /GoTo /D (section*.749) >>
+endobj
+3788 0 obj
+(\376\377\000t\000e\000s\000t\000\137\000m\000s\000g\000\137\000c\000a\000t)
+endobj
+3789 0 obj
+<< /S /GoTo /D (section*.750) >>
+endobj
+3792 0 obj
+(\376\377\000t\000e\000s\000t\000\137\000m\000s\000g\000\137\000c\000a\000t\0001)
+endobj
+3793 0 obj
+<< /S /GoTo /D (subsection.7.14.2) >>
+endobj
+3796 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3797 0 obj
+<< /S /GoTo /D (section*.751) >>
+endobj
+3800 0 obj
+(\376\377\000e\000r\000r\000o\000r\000\137\000t\000y\000p\000e\000s)
+endobj
+3801 0 obj
+<< /S /GoTo /D (section*.752) >>
+endobj
+3804 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000H\000o\000s\000t\000P\000h\000a\000s\000e)
+endobj
+3805 0 obj
+<< /S /GoTo /D (section*.753) >>
+endobj
+3808 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000T\000a\000r\000g\000e\000t\000P\000h\000a\000s\000e)
+endobj
+3809 0 obj
+<< /S /GoTo /D (subsection.7.14.3) >>
+endobj
+3812 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3813 0 obj
+<< /S /GoTo /D (section*.754) >>
+endobj
+3816 0 obj
+(\376\377\000\137\000\137\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000r\000r\000o\000r\000\137\000s\000u\000p\000p\000o\000r\000t)
+endobj
+3817 0 obj
+<< /S /GoTo /D (section*.755) >>
+endobj
+3820 0 obj
+(\376\377\000\137\000\137\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\137\000s\000u\000p\000p\000o\000r\000t)
+endobj
+3821 0 obj
+<< /S /GoTo /D (section*.756) >>
+endobj
+3824 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000m\000e\000s\000s\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3825 0 obj
+<< /S /GoTo /D (section*.757) >>
+endobj
+3828 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000h\000o\000s\000t\000\137\000s\000t\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3829 0 obj
+<< /S /GoTo /D (section*.758) >>
+endobj
+3832 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000m\000e\000s\000s\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3833 0 obj
+<< /S /GoTo /D (section*.759) >>
+endobj
+3836 0 obj
+(\376\377\000r\000e\000p\000o\000r\000t\000\137\000g\000e\000t\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000t\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3837 0 obj
+<< /S /GoTo /D (section*.760) >>
+endobj
+3840 0 obj
+(\376\377\000w\000r\000i\000t\000e\000\137\000m\000e\000s\000s\000a\000g\000e)
+endobj
+3841 0 obj
+<< /S /GoTo /D (section.7.15) >>
+endobj
+3844 0 obj
+(\376\377\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000s\000g\000.\000c\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3845 0 obj
+<< /S /GoTo /D (subsection.7.15.1) >>
+endobj
+3848 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3849 0 obj
+<< /S /GoTo /D (section*.763) >>
+endobj
+3852 0 obj
+(\376\377\000D\000Y\000N\000A\000R\000T\000\137\000S\000T\000D\000E\000R\000R\000\137\000P\000U\000T\000S)
+endobj
+3853 0 obj
+<< /S /GoTo /D (subsection.7.15.2) >>
+endobj
+3856 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3857 0 obj
+<< /S /GoTo /D (section*.764) >>
+endobj
+3860 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000m\000e\000s\000s\000a\000g\000e\000\137\000s\000t\000r)
+endobj
+3861 0 obj
+<< /S /GoTo /D (section*.765) >>
+endobj
+3864 0 obj
+(\376\377\000w\000r\000i\000t\000e\000\137\000m\000e\000s\000s\000a\000g\000e)
+endobj
+3865 0 obj
+<< /S /GoTo /D (section.7.16) >>
+endobj
+3868 0 obj
+(\376\377\000l\000i\000b\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000s\000g\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3869 0 obj
+<< /S /GoTo /D (subsection.7.16.1) >>
+endobj
+3872 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3873 0 obj
+<< /S /GoTo /D (section*.769) >>
+endobj
+3876 0 obj
+(\376\377\000M\000E\000S\000S\000A\000G\000E\000\137\000T\000A\000B\000L\000E\000\137\000N\000A\000M\000E)
+endobj
+3877 0 obj
+<< /S /GoTo /D (subsection.7.16.2) >>
+endobj
+3880 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3881 0 obj
+<< /S /GoTo /D (section*.770) >>
+endobj
+3884 0 obj
+(\376\377\000a\000n\000o\000n\000y\000m\000o\000u\000s\000\040\000e\000n\000u\000m)
+endobj
+3885 0 obj
+<< /S /GoTo /D (subsection.7.16.3) >>
+endobj
+3888 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3889 0 obj
+<< /S /GoTo /D (section*.771) >>
+endobj
+3892 0 obj
+(\376\377\000M\000E\000S\000S\000A\000G\000E\000\137\000T\000A\000B\000L\000E\000\137\000N\000A\000M\000E)
+endobj
+3893 0 obj
+<< /S /GoTo /D (section.7.17) >>
+endobj
+3896 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000.\000f\0009\0000\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3897 0 obj
+<< /S /GoTo /D (section.7.18) >>
+endobj
+3900 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+3901 0 obj
+<< /S /GoTo /D (subsection.7.18.1) >>
+endobj
+3904 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3905 0 obj
+<< /S /GoTo /D (section*.778) >>
+endobj
+3908 0 obj
+(\376\377\000D\000E\000F\000A\000U\000L\000T\000\137\000T\000A\000R\000G\000E\000T\000\137\000N\000U\000M\000B\000E\000R)
+endobj
+3909 0 obj
+<< /S /GoTo /D (section*.779) >>
+endobj
+3912 0 obj
+(\376\377\000D\000E\000F\000A\000U\000L\000T\000\137\000T\000A\000R\000G\000E\000T\000\137\000T\000Y\000P\000E)
+endobj
+3913 0 obj
+<< /S /GoTo /D (section*.780) >>
+endobj
+3916 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000S\000T\000A\000T\000U\000S\000\137\000I\000N\000I\000T)
+endobj
+3917 0 obj
+<< /S /GoTo /D (section*.781) >>
+endobj
+3920 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000S\000T\000A\000T\000U\000S\000\137\000I\000N\000I\000T\000I\000A\000L\000I\000Z\000E\000R)
+endobj
+3921 0 obj
+<< /S /GoTo /D (section*.782) >>
+endobj
+3924 0 obj
+(\376\377\000T\000A\000R\000G\000E\000T\000\137\000A\000T\000T\000R\000I\000B\000U\000T\000E)
+endobj
+3925 0 obj
+<< /S /GoTo /D (subsection.7.18.2) >>
+endobj
+3928 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3929 0 obj
+<< /S /GoTo /D (section*.783) >>
+endobj
+3932 0 obj
+(\376\377\000T\000A\000R\000G\000E\000T\000\137\000T\000Y\000P\000E)
+endobj
+3933 0 obj
+<< /S /GoTo /D (subsection.7.18.3) >>
+endobj
+3936 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3937 0 obj
+<< /S /GoTo /D (section*.784) >>
+endobj
+3940 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000s\000u\000l\000t)
+endobj
+3941 0 obj
+<< /S /GoTo /D (section*.785) >>
+endobj
+3944 0 obj
+(\376\377\000T\000A\000R\000G\000E\000T\000\137\000T\000Y\000P\000E)
+endobj
+3945 0 obj
+<< /S /GoTo /D (subsection.7.18.4) >>
+endobj
+3948 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+3949 0 obj
+<< /S /GoTo /D (section*.786) >>
+endobj
+3952 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+3953 0 obj
+<< /S /GoTo /D (section*.787) >>
+endobj
+3956 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+3957 0 obj
+<< /S /GoTo /D (section*.788) >>
+endobj
+3960 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r\000\137\000o\000f\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+3961 0 obj
+<< /S /GoTo /D (section*.789) >>
+endobj
+3964 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t)
+endobj
+3965 0 obj
+<< /S /GoTo /D (section*.790) >>
+endobj
+3968 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+3969 0 obj
+<< /S /GoTo /D (section*.791) >>
+endobj
+3972 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+3973 0 obj
+<< /S /GoTo /D (section*.792) >>
+endobj
+3976 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+3977 0 obj
+<< /S /GoTo /D (section*.793) >>
+endobj
+3980 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+3981 0 obj
+<< /S /GoTo /D (section*.794) >>
+endobj
+3984 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000i\000g\000n\000a\000l\000e\000d)
+endobj
+3985 0 obj
+<< /S /GoTo /D (section*.795) >>
+endobj
+3988 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+3989 0 obj
+<< /S /GoTo /D (section*.796) >>
+endobj
+3992 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+3993 0 obj
+<< /S /GoTo /D (section*.797) >>
+endobj
+3996 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+3997 0 obj
+<< /S /GoTo /D (section*.798) >>
+endobj
+4000 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4001 0 obj
+<< /S /GoTo /D (section*.799) >>
+endobj
+4004 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4005 0 obj
+<< /S /GoTo /D (section*.800) >>
+endobj
+4008 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4009 0 obj
+<< /S /GoTo /D (section*.801) >>
+endobj
+4012 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4013 0 obj
+<< /S /GoTo /D (section*.802) >>
+endobj
+4016 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4017 0 obj
+<< /S /GoTo /D (section*.803) >>
+endobj
+4020 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4021 0 obj
+<< /S /GoTo /D (section*.804) >>
+endobj
+4024 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4025 0 obj
+<< /S /GoTo /D (section*.805) >>
+endobj
+4028 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4029 0 obj
+<< /S /GoTo /D (section*.806) >>
+endobj
+4032 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4033 0 obj
+<< /S /GoTo /D (section*.807) >>
+endobj
+4036 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4037 0 obj
+<< /S /GoTo /D (section*.808) >>
+endobj
+4040 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4041 0 obj
+<< /S /GoTo /D (section*.809) >>
+endobj
+4044 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4045 0 obj
+<< /S /GoTo /D (section*.810) >>
+endobj
+4048 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4049 0 obj
+<< /S /GoTo /D (section*.811) >>
+endobj
+4052 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4053 0 obj
+<< /S /GoTo /D (section*.812) >>
+endobj
+4056 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4057 0 obj
+<< /S /GoTo /D (section*.813) >>
+endobj
+4060 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4061 0 obj
+<< /S /GoTo /D (section*.814) >>
+endobj
+4064 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4065 0 obj
+<< /S /GoTo /D (section*.815) >>
+endobj
+4068 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4069 0 obj
+<< /S /GoTo /D (section*.816) >>
+endobj
+4072 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4073 0 obj
+<< /S /GoTo /D (section*.817) >>
+endobj
+4076 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+4077 0 obj
+<< /S /GoTo /D (section*.818) >>
+endobj
+4080 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4081 0 obj
+<< /S /GoTo /D (section*.819) >>
+endobj
+4084 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4085 0 obj
+<< /S /GoTo /D (section*.820) >>
+endobj
+4088 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4089 0 obj
+<< /S /GoTo /D (section*.821) >>
+endobj
+4092 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+4093 0 obj
+<< /S /GoTo /D (section*.822) >>
+endobj
+4096 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4097 0 obj
+<< /S /GoTo /D (section*.823) >>
+endobj
+4100 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4101 0 obj
+<< /S /GoTo /D (section*.824) >>
+endobj
+4104 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4105 0 obj
+<< /S /GoTo /D (section*.825) >>
+endobj
+4108 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4109 0 obj
+<< /S /GoTo /D (section*.826) >>
+endobj
+4112 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+4113 0 obj
+<< /S /GoTo /D (section*.827) >>
+endobj
+4116 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4117 0 obj
+<< /S /GoTo /D (section*.828) >>
+endobj
+4120 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4121 0 obj
+<< /S /GoTo /D (section*.829) >>
+endobj
+4124 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4125 0 obj
+<< /S /GoTo /D (section*.830) >>
+endobj
+4128 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4129 0 obj
+<< /S /GoTo /D (section*.831) >>
+endobj
+4132 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4133 0 obj
+<< /S /GoTo /D (section*.832) >>
+endobj
+4136 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4137 0 obj
+<< /S /GoTo /D (section*.833) >>
+endobj
+4140 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4141 0 obj
+<< /S /GoTo /D (section*.834) >>
+endobj
+4144 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4145 0 obj
+<< /S /GoTo /D (section*.835) >>
+endobj
+4148 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4149 0 obj
+<< /S /GoTo /D (section*.836) >>
+endobj
+4152 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+4153 0 obj
+<< /S /GoTo /D (section.7.19) >>
+endobj
+4156 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000c\000o\000m\000m\000o\000n\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4157 0 obj
+<< /S /GoTo /D (subsection.7.19.1) >>
+endobj
+4160 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4161 0 obj
+<< /S /GoTo /D (section*.838) >>
+endobj
+4164 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000A\000L\000L\000O\000C)
+endobj
+4165 0 obj
+<< /S /GoTo /D (section.7.20) >>
+endobj
+4168 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000c\000o\000m\000m\000o\000n\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4169 0 obj
+<< /S /GoTo /D (subsection.7.20.1) >>
+endobj
+4172 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+4173 0 obj
+<< /S /GoTo /D (subsection.7.20.2) >>
+endobj
+4176 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4177 0 obj
+<< /S /GoTo /D (section*.845) >>
+endobj
+4180 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000D\000E\000B\000U\000G\000\137\000D\000U\000M\000P\000\137\000B\000Y\000T\000E\000S)
+endobj
+4181 0 obj
+<< /S /GoTo /D (section*.846) >>
+endobj
+4184 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000D\000E\000B\000U\000G\000\137\000L\000O\000G)
+endobj
+4185 0 obj
+<< /S /GoTo /D (section*.847) >>
+endobj
+4188 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000D\000E\000B\000U\000G\000\137\000P\000R\000I\000N\000T\000\137\000P\000R\000E\000F\000I\000X)
+endobj
+4189 0 obj
+<< /S /GoTo /D (section*.848) >>
+endobj
+4192 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000D\000O\000\137\000T\000R\000A\000C\000E)
+endobj
+4193 0 obj
+<< /S /GoTo /D (section*.849) >>
+endobj
+4196 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000F\000R\000E\000E)
+endobj
+4197 0 obj
+<< /S /GoTo /D (section*.850) >>
+endobj
+4200 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000A\000L\000L\000O\000C)
+endobj
+4201 0 obj
+<< /S /GoTo /D (section*.851) >>
+endobj
+4204 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000P\000R\000E\000F\000I\000X)
+endobj
+4205 0 obj
+<< /S /GoTo /D (section*.852) >>
+endobj
+4208 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000R\000A\000C\000E)
+endobj
+4209 0 obj
+<< /S /GoTo /D (section*.853) >>
+endobj
+4212 0 obj
+(\376\377\000V\000A\000R\000\137\000T\000Y\000P\000E\000\137\000I\000S\000\137\000D\000V\000\137\000D\000A\000T\000A)
+endobj
+4213 0 obj
+<< /S /GoTo /D (section*.854) >>
+endobj
+4216 0 obj
+(\376\377\000V\000A\000R\000\137\000T\000Y\000P\000E\000\137\000I\000S\000\137\000D\000V\000\137\000D\000A\000T\000A\000\137\000S\000L\000I\000C\000E)
+endobj
+4217 0 obj
+<< /S /GoTo /D (section*.855) >>
+endobj
+4220 0 obj
+(\376\377\000V\000A\000R\000\137\000T\000Y\000P\000E\000\137\000I\000S\000\137\000P\000T\000R)
+endobj
+4221 0 obj
+<< /S /GoTo /D (section*.856) >>
+endobj
+4224 0 obj
+(\376\377\000V\000A\000R\000\137\000T\000Y\000P\000E\000\137\000I\000S\000\137\000S\000C\000A\000L\000A\000R)
+endobj
+4225 0 obj
+<< /S /GoTo /D (subsection.7.20.3) >>
+endobj
+4228 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4229 0 obj
+<< /S /GoTo /D (section*.857) >>
+endobj
+4232 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D)
+endobj
+4233 0 obj
+<< /S /GoTo /D (subsection.7.20.4) >>
+endobj
+4236 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4237 0 obj
+<< /S /GoTo /D (section*.858) >>
+endobj
+4240 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000I\000t\000e\000m\000T\000y\000p\000e)
+endobj
+4241 0 obj
+<< /S /GoTo /D (section*.859) >>
+endobj
+4244 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000P\000a\000r\000a\000m\000e\000t\000e\000r\000T\000y\000p\000e)
+endobj
+4245 0 obj
+<< /S /GoTo /D (subsection.7.20.5) >>
+endobj
+4248 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4249 0 obj
+<< /S /GoTo /D (section*.860) >>
+endobj
+4252 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000A\000L\000L\000O\000C)
+endobj
+4253 0 obj
+<< /S /GoTo /D (subsection.7.20.6) >>
+endobj
+4256 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4257 0 obj
+<< /S /GoTo /D (section*.861) >>
+endobj
+4260 0 obj
+(\376\377\000c\000o\000n\000s\000o\000l\000e\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+4261 0 obj
+<< /S /GoTo /D (section*.862) >>
+endobj
+4264 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000i\000g\000n\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4265 0 obj
+<< /S /GoTo /D (section*.863) >>
+endobj
+4268 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000l\000o\000c\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4269 0 obj
+<< /S /GoTo /D (section*.864) >>
+endobj
+4272 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000l\000o\000c\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4273 0 obj
+<< /S /GoTo /D (section*.865) >>
+endobj
+4276 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000l\000o\000c\000\137\000i\000f\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4277 0 obj
+<< /S /GoTo /D (section*.866) >>
+endobj
+4280 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000l\000o\000c\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4281 0 obj
+<< /S /GoTo /D (section*.867) >>
+endobj
+4284 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000a\000l\000l\000o\000c\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4285 0 obj
+<< /S /GoTo /D (section*.868) >>
+endobj
+4288 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000e\000x\000t\000e\000n\000t\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4289 0 obj
+<< /S /GoTo /D (section*.869) >>
+endobj
+4292 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000e\000x\000t\000e\000n\000t\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4293 0 obj
+<< /S /GoTo /D (section*.870) >>
+endobj
+4296 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000e\000x\000t\000e\000n\000t\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4297 0 obj
+<< /S /GoTo /D (section*.871) >>
+endobj
+4300 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000e\000x\000t\000e\000n\000t\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4301 0 obj
+<< /S /GoTo /D (section*.872) >>
+endobj
+4304 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000f\000r\000e\000e\000\137\000i\000f\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4305 0 obj
+<< /S /GoTo /D (section*.873) >>
+endobj
+4308 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000i\000n\000t\000o\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4309 0 obj
+<< /S /GoTo /D (section*.874) >>
+endobj
+4312 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000i\000n\000t\000o\000\137\000e\000l\000e\000m\000e\000n\000t\000s\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4313 0 obj
+<< /S /GoTo /D (section*.875) >>
+endobj
+4316 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000i\000n\000t\000o\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000a\000r\000r\000a\000y)
+endobj
+4317 0 obj
+<< /S /GoTo /D (section*.876) >>
+endobj
+4320 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000i\000n\000t\000o\000\137\000s\000t\000a\000r\000t\000\137\000i\000s\000\137\000s\000c\000a\000l\000a\000r)
+endobj
+4321 0 obj
+<< /S /GoTo /D (section*.877) >>
+endobj
+4324 0 obj
+(\376\377\000m\000i\000c\000\137\000i\000n\000d\000e\000x)
+endobj
+4325 0 obj
+<< /S /GoTo /D (section*.878) >>
+endobj
+4328 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+4329 0 obj
+<< /S /GoTo /D (section*.879) >>
+endobj
+4332 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\137\000l\000e\000v\000e\000l)
+endobj
+4333 0 obj
+<< /S /GoTo /D (section*.880) >>
+endobj
+4336 0 obj
+(\376\377\000p\000r\000e\000f\000i\000x)
+endobj
+4337 0 obj
+<< /S /GoTo /D (section.7.21) >>
+endobj
+4340 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000g\000i\000n\000e\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4341 0 obj
+<< /S /GoTo /D (subsection.7.21.1) >>
+endobj
+4344 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4345 0 obj
+<< /S /GoTo /D (section*.883) >>
+endobj
+4348 0 obj
+(\376\377\000h\000o\000s\000t\000\137\000e\000n\000t\000r\000y\000\137\000c\000m\000p)
+endobj
+4349 0 obj
+<< /S /GoTo /D (section*.884) >>
+endobj
+4352 0 obj
+(\376\377\000t\000a\000r\000g\000e\000t\000\137\000e\000n\000t\000r\000y\000\137\000c\000m\000p)
+endobj
+4353 0 obj
+<< /S /GoTo /D (section.7.22) >>
+endobj
+4356 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000g\000i\000n\000e\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4357 0 obj
+<< /S /GoTo /D (subsection.7.22.1) >>
+endobj
+4360 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4361 0 obj
+<< /S /GoTo /D (section*.888) >>
+endobj
+4364 0 obj
+(\376\377\000c\000h\000e\000c\000k\000\137\000r\000e\000s\000u\000l\000t)
+endobj
+4365 0 obj
+<< /S /GoTo /D (subsection.7.22.2) >>
+endobj
+4368 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4369 0 obj
+<< /S /GoTo /D (section*.889) >>
+endobj
+4372 0 obj
+(\376\377\000A\000u\000t\000o\000S\000e\000t)
+endobj
+4373 0 obj
+<< /S /GoTo /D (section*.890) >>
+endobj
+4376 0 obj
+(\376\377\000P\000e\000r\000s\000i\000s\000t\000D\000a\000t\000a\000L\000i\000s\000t)
+endobj
+4377 0 obj
+<< /S /GoTo /D (section*.891) >>
+endobj
+4380 0 obj
+(\376\377\000P\000t\000r\000D\000a\000t\000a\000L\000i\000s\000t)
+endobj
+4381 0 obj
+<< /S /GoTo /D (section*.892) >>
+endobj
+4384 0 obj
+(\376\377\000T\000a\000r\000g\000e\000t\000I\000m\000a\000g\000e\000L\000i\000s\000t)
+endobj
+4385 0 obj
+<< /S /GoTo /D (section.7.23) >>
+endobj
+4388 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000v\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4389 0 obj
+<< /S /GoTo /D (section.7.24) >>
+endobj
+4392 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000v\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4393 0 obj
+<< /S /GoTo /D (subsection.7.24.1) >>
+endobj
+4396 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4397 0 obj
+<< /S /GoTo /D (section*.895) >>
+endobj
+4400 0 obj
+(\376\377\000M\000i\000c\000E\000n\000v\000V\000a\000r\000K\000i\000n\000d)
+endobj
+4401 0 obj
+<< /S /GoTo /D (section.7.25) >>
+endobj
+4404 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000h\000o\000s\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4405 0 obj
+<< /S /GoTo /D (subsection.7.25.1) >>
+endobj
+4408 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4409 0 obj
+<< /S /GoTo /D (section*.899) >>
+endobj
+4412 0 obj
+(\376\377\000G\000E\000T\000\137\000O\000F\000F\000L\000O\000A\000D\000\137\000N\000U\000M\000B\000E\000R)
+endobj
+4413 0 obj
+<< /S /GoTo /D (section*.900) >>
+endobj
+4416 0 obj
+(\376\377\000P\000A\000T\000H\000\137\000S\000E\000P\000A\000R\000A\000T\000O\000R)
+endobj
+4417 0 obj
+<< /S /GoTo /D (subsection.7.25.2) >>
+endobj
+4420 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4421 0 obj
+<< /S /GoTo /D (section*.901) >>
+endobj
+4424 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000l\000o\000a\000d\000e\000d)
+endobj
+4425 0 obj
+<< /S /GoTo /D (section*.902) >>
+endobj
+4428 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000u\000n\000l\000o\000a\000d\000e\000d)
+endobj
+4429 0 obj
+<< /S /GoTo /D (section*.903) >>
+endobj
+4432 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000c\000o\000n\000s\000o\000l\000e\000\137\000t\000r\000a\000c\000e)
+endobj
+4433 0 obj
+<< /S /GoTo /D (section*.904) >>
+endobj
+4436 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000i\000n\000i\000\137\000l\000i\000b\000r\000a\000r\000y)
+endobj
+4437 0 obj
+<< /S /GoTo /D (section*.905) >>
+endobj
+4440 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000l\000i\000b\000r\000a\000r\000y)
+endobj
+4441 0 obj
+<< /S /GoTo /D (section*.906) >>
+endobj
+4444 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000o\000n\000c\000e)
+endobj
+4445 0 obj
+<< /S /GoTo /D (section*.907) >>
+endobj
+4448 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000i\000m\000a\000g\000e)
+endobj
+4449 0 obj
+<< /S /GoTo /D (section*.908) >>
+endobj
+4452 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000n\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000i\000m\000a\000g\000e)
+endobj
+4453 0 obj
+<< /S /GoTo /D (section*.909) >>
+endobj
+4456 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+4457 0 obj
+<< /S /GoTo /D (section*.910) >>
+endobj
+4460 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+4461 0 obj
+<< /S /GoTo /D (section*.911) >>
+endobj
+4464 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r\000\137\000o\000f\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+4465 0 obj
+<< /S /GoTo /D (section*.912) >>
+endobj
+4468 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t)
+endobj
+4469 0 obj
+<< /S /GoTo /D (section*.913) >>
+endobj
+4472 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000i\000g\000n\000a\000l\000e\000d)
+endobj
+4473 0 obj
+<< /S /GoTo /D (section*.914) >>
+endobj
+4476 0 obj
+(\376\377\000g\000e\000t\000\137\000a\000r\000r\000\137\000d\000e\000s\000c\000\137\000n\000u\000m\000b\000e\000r\000s)
+endobj
+4477 0 obj
+<< /S /GoTo /D (section*.915) >>
+endobj
+4480 0 obj
+(\376\377\000m\000a\000k\000e\000\137\000a\000r\000r\000\137\000d\000e\000s\000c)
+endobj
+4481 0 obj
+<< /S /GoTo /D (section*.916) >>
+endobj
+4484 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000s\000r\000c\000\137\000b\000a\000s\000e)
+endobj
+4485 0 obj
+<< /S /GoTo /D (subsection.7.25.3) >>
+endobj
+4488 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4489 0 obj
+<< /S /GoTo /D (section*.917) >>
+endobj
+4492 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000a\000p\000i\000\137\000m\000a\000j\000o\000r\000\137\000v\000e\000r\000s\000i\000o\000n)
+endobj
+4493 0 obj
+<< /S /GoTo /D (section*.918) >>
+endobj
+4496 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000a\000p\000i\000\137\000m\000i\000n\000o\000r\000\137\000v\000e\000r\000s\000i\000o\000n)
+endobj
+4497 0 obj
+<< /S /GoTo /D (section*.919) >>
+endobj
+4500 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000i\000s\000\137\000a\000t\000t\000a\000c\000h\000e\000d)
+endobj
+4501 0 obj
+<< /S /GoTo /D (section*.920) >>
+endobj
+4504 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000e\000x\000e\000\137\000n\000a\000m\000e)
+endobj
+4505 0 obj
+<< /S /GoTo /D (section*.921) >>
+endobj
+4508 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000i\000d)
+endobj
+4509 0 obj
+<< /S /GoTo /D (section*.922) >>
+endobj
+4512 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000p\000i\000d)
+endobj
+4513 0 obj
+<< /S /GoTo /D (section*.923) >>
+endobj
+4516 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000a\000c\000t\000i\000v\000e\000\137\000w\000a\000i\000t)
+endobj
+4517 0 obj
+<< /S /GoTo /D (section*.924) >>
+endobj
+4520 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000t\000y\000p\000e)
+endobj
+4521 0 obj
+<< /S /GoTo /D (section*.925) >>
+endobj
+4524 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000s\000e\000\137\0002\000m\000b\000\137\000b\000u\000f\000f\000e\000r\000s)
+endobj
+4525 0 obj
+<< /S /GoTo /D (section*.926) >>
+endobj
+4528 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000s\000e\000\137\000a\000s\000y\000n\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000r\000e\000a\000d)
+endobj
+4529 0 obj
+<< /S /GoTo /D (section*.927) >>
+endobj
+4532 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000s\000e\000\137\000a\000s\000y\000n\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000w\000r\000i\000t\000e)
+endobj
+4533 0 obj
+<< /S /GoTo /D (section*.928) >>
+endobj
+4536 0 obj
+(\376\377\000\137\000\137\000o\000m\000p\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m)
+endobj
+4537 0 obj
+<< /S /GoTo /D (section*.929) >>
+endobj
+4540 0 obj
+(\376\377\000\137\000\137\000t\000a\000r\000g\000e\000t\000\137\000e\000x\000e)
+endobj
+4541 0 obj
+<< /S /GoTo /D (section*.930) >>
+endobj
+4544 0 obj
+(\376\377\000\137\000\137\000t\000a\000r\000g\000e\000t\000\137\000l\000i\000b\000s)
+endobj
+4545 0 obj
+<< /S /GoTo /D (section*.931) >>
+endobj
+4548 0 obj
+(\376\377\000\137\000\137\000t\000a\000r\000g\000e\000t\000\137\000l\000i\000b\000s\000\137\000l\000i\000s\000t)
+endobj
+4549 0 obj
+<< /S /GoTo /D (section*.932) >>
+endobj
+4552 0 obj
+(\376\377\000\137\000\137\000t\000a\000r\000g\000e\000t\000\137\000l\000i\000b\000s\000\137\000l\000o\000c\000k)
+endobj
+4553 0 obj
+<< /S /GoTo /D (section*.933) >>
+endobj
+4556 0 obj
+(\376\377\000c\000o\000n\000s\000o\000l\000e\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+4557 0 obj
+<< /S /GoTo /D (section*.934) >>
+endobj
+4560 0 obj
+(\376\377\000c\000p\000u\000\137\000f\000r\000e\000q\000u\000e\000n\000c\000y)
+endobj
+4561 0 obj
+<< /S /GoTo /D (section*.935) >>
+endobj
+4564 0 obj
+(\376\377\000h\000t\000r\000a\000c\000e\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4565 0 obj
+<< /S /GoTo /D (section*.936) >>
+endobj
+4568 0 obj
+(\376\377\000m\000i\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000s\000i\000z\000e)
+endobj
+4569 0 obj
+<< /S /GoTo /D (section*.937) >>
+endobj
+4572 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s)
+endobj
+4573 0 obj
+<< /S /GoTo /D (section*.938) >>
+endobj
+4576 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+4577 0 obj
+<< /S /GoTo /D (section*.939) >>
+endobj
+4580 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000v\000\137\000v\000a\000r\000s)
+endobj
+4581 0 obj
+<< /S /GoTo /D (section*.940) >>
+endobj
+4584 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000p\000a\000t\000h)
+endobj
+4585 0 obj
+<< /S /GoTo /D (section*.941) >>
+endobj
+4588 0 obj
+(\376\377\000m\000i\000c\000\137\000p\000r\000o\000x\000y\000\137\000f\000s\000\137\000r\000o\000o\000t)
+endobj
+4589 0 obj
+<< /S /GoTo /D (section*.942) >>
+endobj
+4592 0 obj
+(\376\377\000m\000i\000c\000\137\000p\000r\000o\000x\000y\000\137\000i\000o)
+endobj
+4593 0 obj
+<< /S /GoTo /D (section*.943) >>
+endobj
+4596 0 obj
+(\376\377\000m\000i\000c\000\137\000s\000t\000a\000c\000k\000\137\000s\000i\000z\000e)
+endobj
+4597 0 obj
+<< /S /GoTo /D (section*.944) >>
+endobj
+4600 0 obj
+(\376\377\000m\000i\000c\000\137\000t\000h\000r\000e\000a\000d\000\137\000k\000e\000y)
+endobj
+4601 0 obj
+<< /S /GoTo /D (section*.945) >>
+endobj
+4604 0 obj
+(\376\377\000m\000i\000c\000\137\000u\000s\000e\000\137\0002\000m\000b\000\137\000b\000u\000f\000f\000e\000r\000s\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4605 0 obj
+<< /S /GoTo /D (section*.946) >>
+endobj
+4608 0 obj
+(\376\377\000m\000i\000c\000\137\000u\000s\000e\000\137\000a\000s\000y\000n\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000r\000e\000a\000d\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4609 0 obj
+<< /S /GoTo /D (section*.947) >>
+endobj
+4612 0 obj
+(\376\377\000m\000i\000c\000\137\000u\000s\000e\000\137\000a\000s\000y\000n\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000w\000r\000i\000t\000e\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4613 0 obj
+<< /S /GoTo /D (section*.948) >>
+endobj
+4616 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000a\000c\000t\000i\000v\000e\000\137\000w\000a\000i\000t\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4617 0 obj
+<< /S /GoTo /D (section*.949) >>
+endobj
+4620 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4621 0 obj
+<< /S /GoTo /D (section*.950) >>
+endobj
+4624 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+4625 0 obj
+<< /S /GoTo /D (section*.951) >>
+endobj
+4628 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4629 0 obj
+<< /S /GoTo /D (section*.952) >>
+endobj
+4632 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4633 0 obj
+<< /S /GoTo /D (section*.953) >>
+endobj
+4636 0 obj
+(\376\377\000p\000r\000e\000f\000i\000x)
+endobj
+4637 0 obj
+<< /S /GoTo /D (section*.954) >>
+endobj
+4640 0 obj
+(\376\377\000s\000t\000a\000c\000k\000\137\000a\000l\000l\000o\000c\000\137\000l\000o\000c\000k)
+endobj
+4641 0 obj
+<< /S /GoTo /D (section*.955) >>
+endobj
+4644 0 obj
+(\376\377\000t\000i\000m\000e\000r\000\137\000e\000n\000v\000n\000a\000m\000e)
+endobj
+4645 0 obj
+<< /S /GoTo /D (section*.956) >>
+endobj
+4648 0 obj
+(\376\377\000v\000a\000r\000d\000e\000s\000c\000\137\000d\000i\000r\000e\000c\000t\000i\000o\000n\000\137\000a\000s\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+4649 0 obj
+<< /S /GoTo /D (section*.957) >>
+endobj
+4652 0 obj
+(\376\377\000v\000a\000r\000d\000e\000s\000c\000\137\000t\000y\000p\000e\000\137\000a\000s\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+4653 0 obj
+<< /S /GoTo /D (section.7.26) >>
+endobj
+4656 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000h\000o\000s\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4657 0 obj
+<< /S /GoTo /D (subsection.7.26.1) >>
+endobj
+4660 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+4661 0 obj
+<< /S /GoTo /D (subsection.7.26.2) >>
+endobj
+4664 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4665 0 obj
+<< /S /GoTo /D (section*.963) >>
+endobj
+4668 0 obj
+(\376\377\000M\000A\000X\000\137\000T\000A\000R\000G\000E\000T\000\137\000N\000A\000M\000E)
+endobj
+4669 0 obj
+<< /S /GoTo /D (subsection.7.26.3) >>
+endobj
+4672 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4673 0 obj
+<< /S /GoTo /D (section*.964) >>
+endobj
+4676 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000I\000n\000i\000t\000T\000y\000p\000e)
+endobj
+4677 0 obj
+<< /S /GoTo /D (subsection.7.26.4) >>
+endobj
+4680 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4681 0 obj
+<< /S /GoTo /D (section*.965) >>
+endobj
+4684 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000l\000o\000a\000d\000e\000d)
+endobj
+4685 0 obj
+<< /S /GoTo /D (section*.966) >>
+endobj
+4688 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000u\000n\000l\000o\000a\000d\000e\000d)
+endobj
+4689 0 obj
+<< /S /GoTo /D (section*.967) >>
+endobj
+4692 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000l\000i\000b\000r\000a\000r\000y)
+endobj
+4693 0 obj
+<< /S /GoTo /D (section*.968) >>
+endobj
+4696 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000i\000m\000a\000g\000e)
+endobj
+4697 0 obj
+<< /S /GoTo /D (section*.969) >>
+endobj
+4700 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000n\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000i\000m\000a\000g\000e)
+endobj
+4701 0 obj
+<< /S /GoTo /D (subsection.7.26.5) >>
+endobj
+4704 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4705 0 obj
+<< /S /GoTo /D (section*.970) >>
+endobj
+4708 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000a\000p\000i\000\137\000m\000a\000j\000o\000r\000\137\000v\000e\000r\000s\000i\000o\000n)
+endobj
+4709 0 obj
+<< /S /GoTo /D (section*.971) >>
+endobj
+4712 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000a\000p\000i\000\137\000m\000i\000n\000o\000r\000\137\000v\000e\000r\000s\000i\000o\000n)
+endobj
+4713 0 obj
+<< /S /GoTo /D (section*.972) >>
+endobj
+4716 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000i\000s\000\137\000a\000t\000t\000a\000c\000h\000e\000d)
+endobj
+4717 0 obj
+<< /S /GoTo /D (section*.973) >>
+endobj
+4720 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000e\000x\000e\000\137\000n\000a\000m\000e)
+endobj
+4721 0 obj
+<< /S /GoTo /D (section*.974) >>
+endobj
+4724 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000i\000d)
+endobj
+4725 0 obj
+<< /S /GoTo /D (section*.975) >>
+endobj
+4728 0 obj
+(\376\377\000\137\000\137\000d\000b\000g\000\137\000t\000a\000r\000g\000e\000t\000\137\000s\000o\000\137\000p\000i\000d)
+endobj
+4729 0 obj
+<< /S /GoTo /D (section*.976) >>
+endobj
+4732 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t\000\137\000t\000y\000p\000e)
+endobj
+4733 0 obj
+<< /S /GoTo /D (section*.977) >>
+endobj
+4736 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000s\000e\000\137\0002\000m\000b\000\137\000b\000u\000f\000f\000e\000r\000s)
+endobj
+4737 0 obj
+<< /S /GoTo /D (section*.978) >>
+endobj
+4740 0 obj
+(\376\377\000\137\000\137\000o\000m\000p\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m)
+endobj
+4741 0 obj
+<< /S /GoTo /D (section*.979) >>
+endobj
+4744 0 obj
+(\376\377\000\137\000\137\000t\000a\000r\000g\000e\000t\000\137\000e\000x\000e)
+endobj
+4745 0 obj
+<< /S /GoTo /D (section*.980) >>
+endobj
+4748 0 obj
+(\376\377\000c\000p\000u\000\137\000f\000r\000e\000q\000u\000e\000n\000c\000y)
+endobj
+4749 0 obj
+<< /S /GoTo /D (section*.981) >>
+endobj
+4752 0 obj
+(\376\377\000m\000i\000c\000\137\000b\000u\000f\000f\000e\000r\000\137\000s\000i\000z\000e)
+endobj
+4753 0 obj
+<< /S /GoTo /D (section*.982) >>
+endobj
+4756 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s)
+endobj
+4757 0 obj
+<< /S /GoTo /D (section*.983) >>
+endobj
+4760 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+4761 0 obj
+<< /S /GoTo /D (section*.984) >>
+endobj
+4764 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000v\000\137\000v\000a\000r\000s)
+endobj
+4765 0 obj
+<< /S /GoTo /D (section*.985) >>
+endobj
+4768 0 obj
+(\376\377\000m\000i\000c\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000p\000a\000t\000h)
+endobj
+4769 0 obj
+<< /S /GoTo /D (section*.986) >>
+endobj
+4772 0 obj
+(\376\377\000m\000i\000c\000\137\000p\000r\000o\000x\000y\000\137\000f\000s\000\137\000r\000o\000o\000t)
+endobj
+4773 0 obj
+<< /S /GoTo /D (section*.987) >>
+endobj
+4776 0 obj
+(\376\377\000m\000i\000c\000\137\000p\000r\000o\000x\000y\000\137\000i\000o)
+endobj
+4777 0 obj
+<< /S /GoTo /D (section*.988) >>
+endobj
+4780 0 obj
+(\376\377\000m\000i\000c\000\137\000s\000t\000a\000c\000k\000\137\000s\000i\000z\000e)
+endobj
+4781 0 obj
+<< /S /GoTo /D (section*.989) >>
+endobj
+4784 0 obj
+(\376\377\000m\000i\000c\000\137\000t\000h\000r\000e\000a\000d\000\137\000k\000e\000y)
+endobj
+4785 0 obj
+<< /S /GoTo /D (section.7.27) >>
+endobj
+4788 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000h\000o\000s\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4789 0 obj
+<< /S /GoTo /D (subsection.7.27.1) >>
+endobj
+4792 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4793 0 obj
+<< /S /GoTo /D (section*.995) >>
+endobj
+4796 0 obj
+(\376\377\000M\000Y\000O\000\137\000T\000A\000B\000L\000E\000\137\000E\000N\000D\000\137\000M\000A\000R\000K\000E\000R)
+endobj
+4797 0 obj
+<< /S /GoTo /D (section*.996) >>
+endobj
+4800 0 obj
+(\376\377\000M\000Y\000O\000\137\000V\000E\000R\000S\000I\000O\000N\0001)
+endobj
+4801 0 obj
+<< /S /GoTo /D (subsection.7.27.2) >>
+endobj
+4804 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4805 0 obj
+<< /S /GoTo /D (section*.997) >>
+endobj
+4808 0 obj
+(\376\377\000M\000y\000o\000T\000a\000b\000l\000e\000L\000i\000s\000t)
+endobj
+4809 0 obj
+<< /S /GoTo /D (subsection.7.27.3) >>
+endobj
+4812 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4813 0 obj
+<< /S /GoTo /D (section*.998) >>
+endobj
+4816 0 obj
+(\376\377\000\137\000\137\000c\000i\000l\000k\000r\000t\000s\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0003\0002)
+endobj
+4817 0 obj
+<< /S /GoTo /D (section*.999) >>
+endobj
+4820 0 obj
+(\376\377\000\137\000\137\000c\000i\000l\000k\000r\000t\000s\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0006\0004)
+endobj
+4821 0 obj
+<< /S /GoTo /D (section*.1000) >>
+endobj
+4824 0 obj
+(\376\377\000\137\000\137\000i\000n\000t\000e\000l\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0003\0002\000\137\000o\000f\000f\000l\000o\000a\000d)
+endobj
+4825 0 obj
+<< /S /GoTo /D (section*.1001) >>
+endobj
+4828 0 obj
+(\376\377\000\137\000\137\000i\000n\000t\000e\000l\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0006\0004\000\137\000o\000f\000f\000l\000o\000a\000d)
+endobj
+4829 0 obj
+<< /S /GoTo /D (section*.1002) >>
+endobj
+4832 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000f\000p\000t\000r\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+4833 0 obj
+<< /S /GoTo /D (section*.1003) >>
+endobj
+4836 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000s\000h\000a\000r\000e\000d\000\137\000i\000n\000i\000t\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+4837 0 obj
+<< /S /GoTo /D (section*.1004) >>
+endobj
+4840 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000s\000h\000a\000r\000e\000d\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+4841 0 obj
+<< /S /GoTo /D (section*.1005) >>
+endobj
+4844 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000F\000i\000n\000i)
+endobj
+4845 0 obj
+<< /S /GoTo /D (section*.1006) >>
+endobj
+4848 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000I\000n\000i\000t)
+endobj
+4849 0 obj
+<< /S /GoTo /D (section*.1007) >>
+endobj
+4852 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000I\000n\000i\000t\000\137\000o\000n\000c\000e)
+endobj
+4853 0 obj
+<< /S /GoTo /D (section*.1008) >>
+endobj
+4856 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000i\000R\000e\000m\000o\000t\000e\000I\000T\000h\000u\000n\000k\000C\000a\000l\000l)
+endobj
+4857 0 obj
+<< /S /GoTo /D (section*.1009) >>
+endobj
+4860 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000I\000s\000A\000v\000a\000i\000l\000a\000b\000l\000e)
+endobj
+4861 0 obj
+<< /S /GoTo /D (section*.1010) >>
+endobj
+4864 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000o\000a\000d\000L\000i\000b\000r\000a\000r\000y)
+endobj
+4865 0 obj
+<< /S /GoTo /D (section*.1011) >>
+endobj
+4868 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000o\000a\000d\000L\000i\000b\000r\000a\000r\000y\000\137\000o\000n\000c\000e)
+endobj
+4869 0 obj
+<< /S /GoTo /D (section*.1012) >>
+endobj
+4872 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000g\000i\000s\000t\000e\000r\000T\000a\000b\000l\000e\000s)
+endobj
+4873 0 obj
+<< /S /GoTo /D (section*.1013) >>
+endobj
+4876 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+4877 0 obj
+<< /S /GoTo /D (section*.1014) >>
+endobj
+4880 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+4881 0 obj
+<< /S /GoTo /D (section*.1015) >>
+endobj
+4884 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+4885 0 obj
+<< /S /GoTo /D (section*.1016) >>
+endobj
+4888 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+4889 0 obj
+<< /S /GoTo /D (section*.1017) >>
+endobj
+4892 0 obj
+(\376\377\000f\000p\000t\000r\000\137\000t\000a\000b\000l\000e\000\137\000e\000n\000t\000r\000i\000e\000s)
+endobj
+4893 0 obj
+<< /S /GoTo /D (section*.1018) >>
+endobj
+4896 0 obj
+(\376\377\000s\000h\000a\000r\000e\000d\000\137\000t\000a\000b\000l\000e\000\137\000e\000n\000t\000r\000i\000e\000s)
+endobj
+4897 0 obj
+<< /S /GoTo /D (subsection.7.27.4) >>
+endobj
+4900 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4901 0 obj
+<< /S /GoTo /D (section*.1019) >>
+endobj
+4904 0 obj
+(\376\377\000\137\000\137\000m\000y\000o\000\137\000t\000a\000b\000l\000e\000\137\000l\000i\000s\000t)
+endobj
+4905 0 obj
+<< /S /GoTo /D (section*.1020) >>
+endobj
+4908 0 obj
+(\376\377\000\137\000\137\000m\000y\000o\000\137\000t\000a\000b\000l\000e\000\137\000l\000o\000c\000k)
+endobj
+4909 0 obj
+<< /S /GoTo /D (section*.1021) >>
+endobj
+4912 0 obj
+(\376\377\000\137\000\137\000m\000y\000o\000\137\000t\000a\000b\000l\000e\000s)
+endobj
+4913 0 obj
+<< /S /GoTo /D (section*.1022) >>
+endobj
+4916 0 obj
+(\376\377\000m\000y\000o\000\137\000i\000s\000\137\000a\000v\000a\000i\000l\000a\000b\000l\000e)
+endobj
+4917 0 obj
+<< /S /GoTo /D (section*.1023) >>
+endobj
+4920 0 obj
+(\376\377\000m\000y\000o\000\137\000w\000r\000a\000p\000p\000e\000r)
+endobj
+4921 0 obj
+<< /S /GoTo /D (section.7.28) >>
+endobj
+4924 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000h\000o\000s\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4925 0 obj
+<< /S /GoTo /D (subsection.7.28.1) >>
+endobj
+4928 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4929 0 obj
+<< /S /GoTo /D (section*.1028) >>
+endobj
+4932 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000F\000P\000T\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+4933 0 obj
+<< /S /GoTo /D (section*.1029) >>
+endobj
+4936 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000F\000P\000T\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+4937 0 obj
+<< /S /GoTo /D (section*.1030) >>
+endobj
+4940 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000I\000N\000I\000T\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+4941 0 obj
+<< /S /GoTo /D (section*.1031) >>
+endobj
+4944 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000I\000N\000I\000T\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+4945 0 obj
+<< /S /GoTo /D (section*.1032) >>
+endobj
+4948 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+4949 0 obj
+<< /S /GoTo /D (section*.1033) >>
+endobj
+4952 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+4953 0 obj
+<< /S /GoTo /D (subsection.7.28.2) >>
+endobj
+4956 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4957 0 obj
+<< /S /GoTo /D (section*.1034) >>
+endobj
+4960 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000T\000a\000b\000l\000e\000E\000n\000t\000r\000y)
+endobj
+4961 0 obj
+<< /S /GoTo /D (subsection.7.28.3) >>
+endobj
+4964 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4965 0 obj
+<< /S /GoTo /D (section*.1035) >>
+endobj
+4968 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000F\000i\000n\000i)
+endobj
+4969 0 obj
+<< /S /GoTo /D (section*.1036) >>
+endobj
+4972 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000g\000i\000s\000t\000e\000r\000T\000a\000b\000l\000e\000s)
+endobj
+4973 0 obj
+<< /S /GoTo /D (section.7.29) >>
+endobj
+4976 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000t\000a\000r\000g\000e\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+4977 0 obj
+<< /S /GoTo /D (subsection.7.29.1) >>
+endobj
+4980 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+4981 0 obj
+<< /S /GoTo /D (section*.1038) >>
+endobj
+4984 0 obj
+(\376\377\000\137\000\137\000c\000i\000l\000k\000r\000t\000s\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0003\0002)
+endobj
+4985 0 obj
+<< /S /GoTo /D (section*.1039) >>
+endobj
+4988 0 obj
+(\376\377\000\137\000\137\000c\000i\000l\000k\000r\000t\000s\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0006\0004)
+endobj
+4989 0 obj
+<< /S /GoTo /D (section*.1040) >>
+endobj
+4992 0 obj
+(\376\377\000\137\000\137\000i\000n\000t\000e\000l\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0003\0002\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000w\000r\000a\000p\000p\000e\000r)
+endobj
+4993 0 obj
+<< /S /GoTo /D (section*.1041) >>
+endobj
+4996 0 obj
+(\376\377\000\137\000\137\000i\000n\000t\000e\000l\000\137\000c\000i\000l\000k\000\137\000f\000o\000r\000\137\0006\0004\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000w\000r\000a\000p\000p\000e\000r)
+endobj
+4997 0 obj
+<< /S /GoTo /D (section*.1042) >>
+endobj
+5000 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000f\000p\000t\000r\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+5001 0 obj
+<< /S /GoTo /D (section*.1043) >>
+endobj
+5004 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000o\000n\000c\000e\000\137\000i\000n\000i\000t)
+endobj
+5005 0 obj
+<< /S /GoTo /D (section*.1044) >>
+endobj
+5008 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000s\000h\000a\000r\000e\000d\000\137\000t\000a\000b\000l\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+5009 0 obj
+<< /S /GoTo /D (section*.1045) >>
+endobj
+5012 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000A\000c\000q\000u\000i\000r\000e)
+endobj
+5013 0 obj
+<< /S /GoTo /D (section*.1046) >>
+endobj
+5016 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000i\000b\000F\000i\000n\000i)
+endobj
+5017 0 obj
+<< /S /GoTo /D (section*.1047) >>
+endobj
+5020 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000i\000b\000I\000n\000i\000t)
+endobj
+5021 0 obj
+<< /S /GoTo /D (section*.1048) >>
+endobj
+5024 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000g\000i\000s\000t\000e\000r\000T\000a\000b\000l\000e\000s)
+endobj
+5025 0 obj
+<< /S /GoTo /D (section*.1049) >>
+endobj
+5028 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000l\000e\000a\000s\000e)
+endobj
+5029 0 obj
+<< /S /GoTo /D (section*.1050) >>
+endobj
+5032 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+5033 0 obj
+<< /S /GoTo /D (section*.1051) >>
+endobj
+5036 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000a\000l\000i\000g\000n\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+5037 0 obj
+<< /S /GoTo /D (section*.1052) >>
+endobj
+5040 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000f\000r\000e\000e)
+endobj
+5041 0 obj
+<< /S /GoTo /D (section*.1053) >>
+endobj
+5044 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000s\000h\000a\000r\000e\000d\000\137\000m\000a\000l\000l\000o\000c)
+endobj
+5045 0 obj
+<< /S /GoTo /D (section*.1054) >>
+endobj
+5048 0 obj
+(\376\377\000C\000h\000e\000c\000k\000R\000e\000s\000u\000l\000t)
+endobj
+5049 0 obj
+<< /S /GoTo /D (section.7.30) >>
+endobj
+5052 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000\137\000t\000a\000r\000g\000e\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5053 0 obj
+<< /S /GoTo /D (subsection.7.30.1) >>
+endobj
+5056 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5057 0 obj
+<< /S /GoTo /D (section*.1058) >>
+endobj
+5060 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000F\000P\000T\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+5061 0 obj
+<< /S /GoTo /D (section*.1059) >>
+endobj
+5064 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000F\000P\000T\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+5065 0 obj
+<< /S /GoTo /D (section*.1060) >>
+endobj
+5068 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+5069 0 obj
+<< /S /GoTo /D (section*.1061) >>
+endobj
+5072 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000M\000Y\000O\000\137\000S\000H\000A\000R\000E\000D\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+5073 0 obj
+<< /S /GoTo /D (subsection.7.30.2) >>
+endobj
+5076 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5077 0 obj
+<< /S /GoTo /D (section*.1062) >>
+endobj
+5080 0 obj
+(\376\377\000F\000p\000t\000r\000T\000a\000b\000l\000e\000E\000n\000t\000r\000y)
+endobj
+5081 0 obj
+<< /S /GoTo /D (section*.1063) >>
+endobj
+5084 0 obj
+(\376\377\000S\000h\000a\000r\000e\000d\000T\000a\000b\000l\000e\000E\000n\000t\000r\000y)
+endobj
+5085 0 obj
+<< /S /GoTo /D (subsection.7.30.3) >>
+endobj
+5088 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5089 0 obj
+<< /S /GoTo /D (section*.1064) >>
+endobj
+5092 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000A\000c\000q\000u\000i\000r\000e)
+endobj
+5093 0 obj
+<< /S /GoTo /D (section*.1065) >>
+endobj
+5096 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000i\000b\000F\000i\000n\000i)
+endobj
+5097 0 obj
+<< /S /GoTo /D (section*.1066) >>
+endobj
+5100 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000L\000i\000b\000I\000n\000i\000t)
+endobj
+5101 0 obj
+<< /S /GoTo /D (section*.1067) >>
+endobj
+5104 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000g\000i\000s\000t\000e\000r\000T\000a\000b\000l\000e\000s)
+endobj
+5105 0 obj
+<< /S /GoTo /D (section*.1068) >>
+endobj
+5108 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000m\000y\000o\000R\000e\000l\000e\000a\000s\000e)
+endobj
+5109 0 obj
+<< /S /GoTo /D (section.7.31) >>
+endobj
+5112 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000o\000m\000p\000\137\000h\000o\000s\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5113 0 obj
+<< /S /GoTo /D (subsection.7.31.1) >>
+endobj
+5116 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5117 0 obj
+<< /S /GoTo /D (section*.1070) >>
+endobj
+5120 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5121 0 obj
+<< /S /GoTo /D (section*.1071) >>
+endobj
+5124 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5125 0 obj
+<< /S /GoTo /D (section*.1072) >>
+endobj
+5128 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5129 0 obj
+<< /S /GoTo /D (section*.1073) >>
+endobj
+5132 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5133 0 obj
+<< /S /GoTo /D (section*.1074) >>
+endobj
+5136 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5137 0 obj
+<< /S /GoTo /D (section*.1075) >>
+endobj
+5140 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5141 0 obj
+<< /S /GoTo /D (section*.1076) >>
+endobj
+5144 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5145 0 obj
+<< /S /GoTo /D (section*.1077) >>
+endobj
+5148 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5149 0 obj
+<< /S /GoTo /D (section*.1078) >>
+endobj
+5152 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5153 0 obj
+<< /S /GoTo /D (section*.1079) >>
+endobj
+5156 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5157 0 obj
+<< /S /GoTo /D (section*.1080) >>
+endobj
+5160 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5161 0 obj
+<< /S /GoTo /D (section*.1081) >>
+endobj
+5164 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5165 0 obj
+<< /S /GoTo /D (section*.1082) >>
+endobj
+5168 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5169 0 obj
+<< /S /GoTo /D (section*.1083) >>
+endobj
+5172 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5173 0 obj
+<< /S /GoTo /D (section*.1084) >>
+endobj
+5176 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5177 0 obj
+<< /S /GoTo /D (section*.1085) >>
+endobj
+5180 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5181 0 obj
+<< /S /GoTo /D (section*.1086) >>
+endobj
+5184 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5185 0 obj
+<< /S /GoTo /D (section*.1087) >>
+endobj
+5188 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5189 0 obj
+<< /S /GoTo /D (section*.1088) >>
+endobj
+5192 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5193 0 obj
+<< /S /GoTo /D (section*.1089) >>
+endobj
+5196 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5197 0 obj
+<< /S /GoTo /D (section*.1090) >>
+endobj
+5200 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5201 0 obj
+<< /S /GoTo /D (section*.1091) >>
+endobj
+5204 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5205 0 obj
+<< /S /GoTo /D (section*.1092) >>
+endobj
+5208 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+5209 0 obj
+<< /S /GoTo /D (section*.1093) >>
+endobj
+5212 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5213 0 obj
+<< /S /GoTo /D (section*.1094) >>
+endobj
+5216 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000i\000n\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5217 0 obj
+<< /S /GoTo /D (section*.1095) >>
+endobj
+5220 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5221 0 obj
+<< /S /GoTo /D (section*.1096) >>
+endobj
+5224 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5225 0 obj
+<< /S /GoTo /D (section*.1097) >>
+endobj
+5228 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+5229 0 obj
+<< /S /GoTo /D (section*.1098) >>
+endobj
+5232 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5233 0 obj
+<< /S /GoTo /D (section*.1099) >>
+endobj
+5236 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5237 0 obj
+<< /S /GoTo /D (section*.1100) >>
+endobj
+5240 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5241 0 obj
+<< /S /GoTo /D (section*.1101) >>
+endobj
+5244 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5245 0 obj
+<< /S /GoTo /D (section*.1102) >>
+endobj
+5248 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+5249 0 obj
+<< /S /GoTo /D (section*.1103) >>
+endobj
+5252 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5253 0 obj
+<< /S /GoTo /D (section*.1104) >>
+endobj
+5256 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000i\000n\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5257 0 obj
+<< /S /GoTo /D (section*.1105) >>
+endobj
+5260 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5261 0 obj
+<< /S /GoTo /D (section*.1106) >>
+endobj
+5264 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5265 0 obj
+<< /S /GoTo /D (section*.1107) >>
+endobj
+5268 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5269 0 obj
+<< /S /GoTo /D (section*.1108) >>
+endobj
+5272 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5273 0 obj
+<< /S /GoTo /D (section*.1109) >>
+endobj
+5276 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5277 0 obj
+<< /S /GoTo /D (section*.1110) >>
+endobj
+5280 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5281 0 obj
+<< /S /GoTo /D (section*.1111) >>
+endobj
+5284 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5285 0 obj
+<< /S /GoTo /D (section*.1112) >>
+endobj
+5288 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5289 0 obj
+<< /S /GoTo /D (section*.1113) >>
+endobj
+5292 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5293 0 obj
+<< /S /GoTo /D (section.7.32) >>
+endobj
+5296 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000o\000m\000p\000\137\000t\000a\000r\000g\000e\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5297 0 obj
+<< /S /GoTo /D (subsection.7.32.1) >>
+endobj
+5300 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5301 0 obj
+<< /S /GoTo /D (section*.1115) >>
+endobj
+5304 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000l\000r\000b)
+endobj
+5305 0 obj
+<< /S /GoTo /D (section*.1116) >>
+endobj
+5308 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5309 0 obj
+<< /S /GoTo /D (section*.1117) >>
+endobj
+5312 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000l\000r\000b)
+endobj
+5313 0 obj
+<< /S /GoTo /D (section*.1118) >>
+endobj
+5316 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5317 0 obj
+<< /S /GoTo /D (section*.1119) >>
+endobj
+5320 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000l\000r\000b)
+endobj
+5321 0 obj
+<< /S /GoTo /D (section*.1120) >>
+endobj
+5324 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5325 0 obj
+<< /S /GoTo /D (section*.1121) >>
+endobj
+5328 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5329 0 obj
+<< /S /GoTo /D (section*.1122) >>
+endobj
+5332 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5333 0 obj
+<< /S /GoTo /D (section*.1123) >>
+endobj
+5336 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5337 0 obj
+<< /S /GoTo /D (section*.1124) >>
+endobj
+5340 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5341 0 obj
+<< /S /GoTo /D (section*.1125) >>
+endobj
+5344 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000l\000r\000b)
+endobj
+5345 0 obj
+<< /S /GoTo /D (section*.1126) >>
+endobj
+5348 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5349 0 obj
+<< /S /GoTo /D (section*.1127) >>
+endobj
+5352 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000l\000r\000b)
+endobj
+5353 0 obj
+<< /S /GoTo /D (section*.1128) >>
+endobj
+5356 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5357 0 obj
+<< /S /GoTo /D (section*.1129) >>
+endobj
+5360 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000l\000r\000b)
+endobj
+5361 0 obj
+<< /S /GoTo /D (section*.1130) >>
+endobj
+5364 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000l\000r\000b)
+endobj
+5365 0 obj
+<< /S /GoTo /D (section*.1131) >>
+endobj
+5368 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5369 0 obj
+<< /S /GoTo /D (section*.1132) >>
+endobj
+5372 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5373 0 obj
+<< /S /GoTo /D (section*.1133) >>
+endobj
+5376 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000l\000r\000b)
+endobj
+5377 0 obj
+<< /S /GoTo /D (section*.1134) >>
+endobj
+5380 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5381 0 obj
+<< /S /GoTo /D (section*.1135) >>
+endobj
+5384 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5385 0 obj
+<< /S /GoTo /D (section*.1136) >>
+endobj
+5388 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5389 0 obj
+<< /S /GoTo /D (section*.1137) >>
+endobj
+5392 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000l\000r\000b)
+endobj
+5393 0 obj
+<< /S /GoTo /D (section*.1138) >>
+endobj
+5396 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5397 0 obj
+<< /S /GoTo /D (section*.1139) >>
+endobj
+5400 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000l\000r\000b)
+endobj
+5401 0 obj
+<< /S /GoTo /D (section*.1140) >>
+endobj
+5404 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5405 0 obj
+<< /S /GoTo /D (section*.1141) >>
+endobj
+5408 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000l\000r\000b)
+endobj
+5409 0 obj
+<< /S /GoTo /D (section*.1142) >>
+endobj
+5412 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000l\000r\000b)
+endobj
+5413 0 obj
+<< /S /GoTo /D (section*.1143) >>
+endobj
+5416 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5417 0 obj
+<< /S /GoTo /D (section*.1144) >>
+endobj
+5420 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5421 0 obj
+<< /S /GoTo /D (section*.1145) >>
+endobj
+5424 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000l\000r\000b)
+endobj
+5425 0 obj
+<< /S /GoTo /D (section*.1146) >>
+endobj
+5428 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5429 0 obj
+<< /S /GoTo /D (section*.1147) >>
+endobj
+5432 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000l\000r\000b)
+endobj
+5433 0 obj
+<< /S /GoTo /D (section*.1148) >>
+endobj
+5436 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5437 0 obj
+<< /S /GoTo /D (section*.1149) >>
+endobj
+5440 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000l\000r\000b)
+endobj
+5441 0 obj
+<< /S /GoTo /D (section*.1150) >>
+endobj
+5444 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000l\000r\000b)
+endobj
+5445 0 obj
+<< /S /GoTo /D (section*.1151) >>
+endobj
+5448 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5449 0 obj
+<< /S /GoTo /D (section*.1152) >>
+endobj
+5452 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5453 0 obj
+<< /S /GoTo /D (section*.1153) >>
+endobj
+5456 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5457 0 obj
+<< /S /GoTo /D (section*.1154) >>
+endobj
+5460 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5461 0 obj
+<< /S /GoTo /D (section*.1155) >>
+endobj
+5464 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5465 0 obj
+<< /S /GoTo /D (section*.1156) >>
+endobj
+5468 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5469 0 obj
+<< /S /GoTo /D (section*.1157) >>
+endobj
+5472 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5473 0 obj
+<< /S /GoTo /D (section*.1158) >>
+endobj
+5476 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5477 0 obj
+<< /S /GoTo /D (section*.1159) >>
+endobj
+5480 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+5481 0 obj
+<< /S /GoTo /D (section*.1160) >>
+endobj
+5484 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000l\000r\000b)
+endobj
+5485 0 obj
+<< /S /GoTo /D (section*.1161) >>
+endobj
+5488 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5489 0 obj
+<< /S /GoTo /D (section*.1162) >>
+endobj
+5492 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000i\000n\000t\000\137\000f\000r\000o\000m\000\137\000h\000o\000s\000t)
+endobj
+5493 0 obj
+<< /S /GoTo /D (section*.1163) >>
+endobj
+5496 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000l\000r\000b)
+endobj
+5497 0 obj
+<< /S /GoTo /D (section*.1164) >>
+endobj
+5500 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5501 0 obj
+<< /S /GoTo /D (section*.1165) >>
+endobj
+5504 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000l\000r\000b)
+endobj
+5505 0 obj
+<< /S /GoTo /D (section*.1166) >>
+endobj
+5508 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5509 0 obj
+<< /S /GoTo /D (section*.1167) >>
+endobj
+5512 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+5513 0 obj
+<< /S /GoTo /D (section*.1168) >>
+endobj
+5516 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000l\000r\000b)
+endobj
+5517 0 obj
+<< /S /GoTo /D (section*.1169) >>
+endobj
+5520 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5521 0 obj
+<< /S /GoTo /D (section*.1170) >>
+endobj
+5524 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000l\000r\000b)
+endobj
+5525 0 obj
+<< /S /GoTo /D (section*.1171) >>
+endobj
+5528 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5529 0 obj
+<< /S /GoTo /D (section*.1172) >>
+endobj
+5532 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5533 0 obj
+<< /S /GoTo /D (section*.1173) >>
+endobj
+5536 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5537 0 obj
+<< /S /GoTo /D (section*.1174) >>
+endobj
+5540 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5541 0 obj
+<< /S /GoTo /D (section*.1175) >>
+endobj
+5544 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5545 0 obj
+<< /S /GoTo /D (section*.1176) >>
+endobj
+5548 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000n\000d\000\137\000i\000n\000t\000\137\000t\000o\000\137\000h\000o\000s\000t)
+endobj
+5549 0 obj
+<< /S /GoTo /D (section*.1177) >>
+endobj
+5552 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000\137\000d\000e\000v\000i\000c\000e)
+endobj
+5553 0 obj
+<< /S /GoTo /D (section*.1178) >>
+endobj
+5556 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000l\000r\000b)
+endobj
+5557 0 obj
+<< /S /GoTo /D (section*.1179) >>
+endobj
+5560 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5561 0 obj
+<< /S /GoTo /D (section*.1180) >>
+endobj
+5564 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5565 0 obj
+<< /S /GoTo /D (section*.1181) >>
+endobj
+5568 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5569 0 obj
+<< /S /GoTo /D (section*.1182) >>
+endobj
+5572 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5573 0 obj
+<< /S /GoTo /D (section*.1183) >>
+endobj
+5576 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5577 0 obj
+<< /S /GoTo /D (section*.1184) >>
+endobj
+5580 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000l\000r\000b)
+endobj
+5581 0 obj
+<< /S /GoTo /D (section*.1185) >>
+endobj
+5584 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5585 0 obj
+<< /S /GoTo /D (section*.1186) >>
+endobj
+5588 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000l\000r\000b)
+endobj
+5589 0 obj
+<< /S /GoTo /D (section*.1187) >>
+endobj
+5592 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5593 0 obj
+<< /S /GoTo /D (section*.1188) >>
+endobj
+5596 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000l\000r\000b)
+endobj
+5597 0 obj
+<< /S /GoTo /D (section*.1189) >>
+endobj
+5600 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5601 0 obj
+<< /S /GoTo /D (section*.1190) >>
+endobj
+5604 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5605 0 obj
+<< /S /GoTo /D (section*.1191) >>
+endobj
+5608 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5609 0 obj
+<< /S /GoTo /D (section*.1192) >>
+endobj
+5612 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5613 0 obj
+<< /S /GoTo /D (section*.1193) >>
+endobj
+5616 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5617 0 obj
+<< /S /GoTo /D (section*.1194) >>
+endobj
+5620 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5621 0 obj
+<< /S /GoTo /D (section*.1195) >>
+endobj
+5624 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5625 0 obj
+<< /S /GoTo /D (section*.1196) >>
+endobj
+5628 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5629 0 obj
+<< /S /GoTo /D (section*.1197) >>
+endobj
+5632 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000t\000a\000r\000g\000e\000t)
+endobj
+5633 0 obj
+<< /S /GoTo /D (section.7.33) >>
+endobj
+5636 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000o\000r\000s\000l\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5637 0 obj
+<< /S /GoTo /D (section.7.34) >>
+endobj
+5640 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000o\000r\000s\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5641 0 obj
+<< /S /GoTo /D (section.7.35) >>
+endobj
+5644 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000b\000l\000e\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5645 0 obj
+<< /S /GoTo /D (subsection.7.35.1) >>
+endobj
+5648 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5649 0 obj
+<< /S /GoTo /D (section*.1205) >>
+endobj
+5652 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000t\000a\000b\000l\000e\000s)
+endobj
+5653 0 obj
+<< /S /GoTo /D (section*.1206) >>
+endobj
+5656 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000n\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000t\000a\000b\000l\000e\000s)
+endobj
+5657 0 obj
+<< /S /GoTo /D (section*.1207) >>
+endobj
+5660 0 obj
+(\376\377\000k\000m\000p\000\137\000c\000r\000e\000a\000t\000e\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000l\000r\000b)
+endobj
+5661 0 obj
+<< /S /GoTo /D (section*.1208) >>
+endobj
+5664 0 obj
+(\376\377\000k\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000l\000r\000b)
+endobj
+5665 0 obj
+<< /S /GoTo /D (section*.1209) >>
+endobj
+5668 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000l\000r\000b)
+endobj
+5669 0 obj
+<< /S /GoTo /D (section*.1210) >>
+endobj
+5672 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5673 0 obj
+<< /S /GoTo /D (section*.1211) >>
+endobj
+5676 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000x\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5677 0 obj
+<< /S /GoTo /D (section*.1212) >>
+endobj
+5680 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000l\000r\000b)
+endobj
+5681 0 obj
+<< /S /GoTo /D (section*.1213) >>
+endobj
+5684 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000l\000r\000b)
+endobj
+5685 0 obj
+<< /S /GoTo /D (section*.1214) >>
+endobj
+5688 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000l\000r\000b)
+endobj
+5689 0 obj
+<< /S /GoTo /D (section*.1215) >>
+endobj
+5692 0 obj
+(\376\377\000k\000m\000p\000\137\000g\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000l\000r\000b)
+endobj
+5693 0 obj
+<< /S /GoTo /D (section*.1216) >>
+endobj
+5696 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000l\000r\000b)
+endobj
+5697 0 obj
+<< /S /GoTo /D (section*.1217) >>
+endobj
+5700 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5701 0 obj
+<< /S /GoTo /D (section*.1218) >>
+endobj
+5704 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000b\000l\000o\000c\000k\000t\000i\000m\000e\000\137\000l\000r\000b)
+endobj
+5705 0 obj
+<< /S /GoTo /D (section*.1219) >>
+endobj
+5708 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000d\000e\000f\000a\000u\000l\000t\000s\000\137\000l\000r\000b)
+endobj
+5709 0 obj
+<< /S /GoTo /D (section*.1220) >>
+endobj
+5712 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000l\000r\000b)
+endobj
+5713 0 obj
+<< /S /GoTo /D (section*.1221) >>
+endobj
+5716 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000s\000e\000r\000i\000a\000l\000\137\000l\000r\000b)
+endobj
+5717 0 obj
+<< /S /GoTo /D (section*.1222) >>
+endobj
+5720 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000h\000r\000o\000u\000g\000h\000p\000u\000t\000\137\000l\000r\000b)
+endobj
+5721 0 obj
+<< /S /GoTo /D (section*.1223) >>
+endobj
+5724 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000l\000i\000b\000r\000a\000r\000y\000\137\000t\000u\000r\000n\000a\000r\000o\000u\000n\000d\000\137\000l\000r\000b)
+endobj
+5725 0 obj
+<< /S /GoTo /D (section*.1224) >>
+endobj
+5728 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000l\000r\000b)
+endobj
+5729 0 obj
+<< /S /GoTo /D (section*.1225) >>
+endobj
+5732 0 obj
+(\376\377\000k\000m\000p\000\137\000s\000e\000t\000\137\000s\000t\000a\000c\000k\000s\000i\000z\000e\000\137\000s\000\137\000l\000r\000b)
+endobj
+5733 0 obj
+<< /S /GoTo /D (section*.1226) >>
+endobj
+5736 0 obj
+(\376\377\000k\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000a\000f\000f\000i\000n\000i\000t\000y\000\137\000m\000a\000s\000k\000\137\000p\000r\000o\000c\000\137\000l\000r\000b)
+endobj
+5737 0 obj
+<< /S /GoTo /D (section*.1227) >>
+endobj
+5740 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5741 0 obj
+<< /S /GoTo /D (section*.1228) >>
+endobj
+5744 0 obj
+(\376\377\000o\000m\000p\000\137\000d\000e\000s\000t\000r\000o\000y\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5745 0 obj
+<< /S /GoTo /D (section*.1229) >>
+endobj
+5748 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000l\000r\000b)
+endobj
+5749 0 obj
+<< /S /GoTo /D (section*.1230) >>
+endobj
+5752 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000m\000a\000x\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000l\000r\000b)
+endobj
+5753 0 obj
+<< /S /GoTo /D (section*.1231) >>
+endobj
+5756 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000l\000r\000b)
+endobj
+5757 0 obj
+<< /S /GoTo /D (section*.1232) >>
+endobj
+5760 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000n\000u\000m\000\137\000p\000r\000o\000c\000s\000\137\000l\000r\000b)
+endobj
+5761 0 obj
+<< /S /GoTo /D (section*.1233) >>
+endobj
+5764 0 obj
+(\376\377\000o\000m\000p\000\137\000g\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000l\000r\000b)
+endobj
+5765 0 obj
+<< /S /GoTo /D (section*.1234) >>
+endobj
+5768 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5769 0 obj
+<< /S /GoTo /D (section*.1235) >>
+endobj
+5772 0 obj
+(\376\377\000o\000m\000p\000\137\000i\000n\000i\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5773 0 obj
+<< /S /GoTo /D (section*.1236) >>
+endobj
+5776 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000d\000y\000n\000a\000m\000i\000c\000\137\000l\000r\000b)
+endobj
+5777 0 obj
+<< /S /GoTo /D (section*.1237) >>
+endobj
+5780 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5781 0 obj
+<< /S /GoTo /D (section*.1238) >>
+endobj
+5784 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5785 0 obj
+<< /S /GoTo /D (section*.1239) >>
+endobj
+5788 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000e\000s\000t\000e\000d\000\137\000l\000r\000b)
+endobj
+5789 0 obj
+<< /S /GoTo /D (section*.1240) >>
+endobj
+5792 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s\000\137\000l\000r\000b)
+endobj
+5793 0 obj
+<< /S /GoTo /D (section*.1241) >>
+endobj
+5796 0 obj
+(\376\377\000o\000m\000p\000\137\000s\000e\000t\000\137\000s\000c\000h\000e\000d\000u\000l\000e\000\137\000l\000r\000b)
+endobj
+5797 0 obj
+<< /S /GoTo /D (section*.1242) >>
+endobj
+5800 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5801 0 obj
+<< /S /GoTo /D (section*.1243) >>
+endobj
+5804 0 obj
+(\376\377\000o\000m\000p\000\137\000t\000e\000s\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5805 0 obj
+<< /S /GoTo /D (section*.1244) >>
+endobj
+5808 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5809 0 obj
+<< /S /GoTo /D (section*.1245) >>
+endobj
+5812 0 obj
+(\376\377\000o\000m\000p\000\137\000u\000n\000s\000e\000t\000\137\000n\000e\000s\000t\000\137\000l\000o\000c\000k\000\137\000l\000r\000b)
+endobj
+5813 0 obj
+<< /S /GoTo /D (subsection.7.35.2) >>
+endobj
+5816 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5817 0 obj
+<< /S /GoTo /D (section*.1246) >>
+endobj
+5820 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000s)
+endobj
+5821 0 obj
+<< /S /GoTo /D (section*.1247) >>
+endobj
+5824 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000v\000a\000r\000s)
+endobj
+5825 0 obj
+<< /S /GoTo /D (section*.1248) >>
+endobj
+5828 0 obj
+(\376\377\000p\000r\000e\000d\000e\000f\000i\000n\000e\000d\000\137\000e\000n\000t\000r\000i\000e\000s)
+endobj
+5829 0 obj
+<< /S /GoTo /D (section*.1249) >>
+endobj
+5832 0 obj
+(\376\377\000p\000r\000e\000d\000e\000f\000i\000n\000e\000d\000\137\000t\000a\000b\000l\000e)
+endobj
+5833 0 obj
+<< /S /GoTo /D (section.7.36) >>
+endobj
+5836 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000b\000l\000e\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5837 0 obj
+<< /S /GoTo /D (subsection.7.36.1) >>
+endobj
+5840 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+5841 0 obj
+<< /S /GoTo /D (subsection.7.36.2) >>
+endobj
+5844 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5845 0 obj
+<< /S /GoTo /D (section*.1254) >>
+endobj
+5848 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000E\000N\000T\000R\000Y\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+5849 0 obj
+<< /S /GoTo /D (section*.1255) >>
+endobj
+5852 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000E\000N\000T\000R\000Y\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+5853 0 obj
+<< /S /GoTo /D (section*.1256) >>
+endobj
+5856 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000F\000U\000N\000C\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+5857 0 obj
+<< /S /GoTo /D (section*.1257) >>
+endobj
+5860 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000F\000U\000N\000C\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+5861 0 obj
+<< /S /GoTo /D (section*.1258) >>
+endobj
+5864 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000V\000A\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000E\000N\000D)
+endobj
+5865 0 obj
+<< /S /GoTo /D (section*.1259) >>
+endobj
+5868 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000V\000A\000R\000\137\000T\000A\000B\000L\000E\000\137\000S\000E\000C\000T\000I\000O\000N\000\137\000S\000T\000A\000R\000T)
+endobj
+5869 0 obj
+<< /S /GoTo /D (subsection.7.36.3) >>
+endobj
+5872 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5873 0 obj
+<< /S /GoTo /D (section*.1260) >>
+endobj
+5876 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000t\000a\000b\000l\000e\000s)
+endobj
+5877 0 obj
+<< /S /GoTo /D (section*.1261) >>
+endobj
+5880 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000n\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000t\000a\000b\000l\000e\000s)
+endobj
+5881 0 obj
+<< /S /GoTo /D (subsection.7.36.4) >>
+endobj
+5884 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5885 0 obj
+<< /S /GoTo /D (section*.1262) >>
+endobj
+5888 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000t\000r\000i\000e\000s)
+endobj
+5889 0 obj
+<< /S /GoTo /D (section*.1263) >>
+endobj
+5892 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000s)
+endobj
+5893 0 obj
+<< /S /GoTo /D (section*.1264) >>
+endobj
+5896 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000v\000a\000r\000s)
+endobj
+5897 0 obj
+<< /S /GoTo /D (section.7.37) >>
+endobj
+5900 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5901 0 obj
+<< /S /GoTo /D (subsection.7.37.1) >>
+endobj
+5904 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5905 0 obj
+<< /S /GoTo /D (section*.1268) >>
+endobj
+5908 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000\137\000w\000i\000t\000h\000\137\000p\000a\000r\000m\000s)
+endobj
+5909 0 obj
+<< /S /GoTo /D (subsection.7.37.2) >>
+endobj
+5912 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5913 0 obj
+<< /S /GoTo /D (section*.1269) >>
+endobj
+5916 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000\137\000i\000n\000i\000t)
+endobj
+5917 0 obj
+<< /S /GoTo /D (section*.1270) >>
+endobj
+5920 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+5921 0 obj
+<< /S /GoTo /D (section*.1271) >>
+endobj
+5924 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000g\000e\000t\000\137\000p\000h\000y\000s\000i\000c\000a\000l\000\137\000d\000e\000v\000i\000c\000e\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+5925 0 obj
+<< /S /GoTo /D (section*.1272) >>
+endobj
+5928 0 obj
+(\376\377\000\137\000O\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r\000\137\000o\000f\000\137\000d\000e\000v\000i\000c\000e\000s)
+endobj
+5929 0 obj
+<< /S /GoTo /D (subsection.7.37.3) >>
+endobj
+5932 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5933 0 obj
+<< /S /GoTo /D (section*.1273) >>
+endobj
+5936 0 obj
+(\376\377\000a\000d\000d\000\137\000r\000e\000f\000\137\000l\000o\000c\000k)
+endobj
+5937 0 obj
+<< /S /GoTo /D (section*.1274) >>
+endobj
+5940 0 obj
+(\376\377\000c\000o\000n\000s\000o\000l\000e\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+5941 0 obj
+<< /S /GoTo /D (section*.1275) >>
+endobj
+5944 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+5945 0 obj
+<< /S /GoTo /D (section*.1276) >>
+endobj
+5948 0 obj
+(\376\377\000m\000i\000c\000\137\000f\000r\000e\000q\000u\000e\000n\000c\000y)
+endobj
+5949 0 obj
+<< /S /GoTo /D (section*.1277) >>
+endobj
+5952 0 obj
+(\376\377\000m\000i\000c\000\137\000i\000n\000d\000e\000x)
+endobj
+5953 0 obj
+<< /S /GoTo /D (section*.1278) >>
+endobj
+5956 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000n\000u\000m\000b\000e\000r)
+endobj
+5957 0 obj
+<< /S /GoTo /D (section*.1279) >>
+endobj
+5960 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000e\000p\000o\000r\000t\000\137\000l\000e\000v\000e\000l)
+endobj
+5961 0 obj
+<< /S /GoTo /D (section*.1280) >>
+endobj
+5964 0 obj
+(\376\377\000p\000r\000e\000f\000i\000x)
+endobj
+5965 0 obj
+<< /S /GoTo /D (section*.1281) >>
+endobj
+5968 0 obj
+(\376\377\000r\000e\000f\000\137\000d\000a\000t\000a)
+endobj
+5969 0 obj
+<< /S /GoTo /D (section*.1282) >>
+endobj
+5972 0 obj
+(\376\377\000v\000a\000r\000d\000e\000s\000c\000\137\000d\000i\000r\000e\000c\000t\000i\000o\000n\000\137\000a\000s\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+5973 0 obj
+<< /S /GoTo /D (section*.1283) >>
+endobj
+5976 0 obj
+(\376\377\000v\000a\000r\000d\000e\000s\000c\000\137\000t\000y\000p\000e\000\137\000a\000s\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+5977 0 obj
+<< /S /GoTo /D (section.7.38) >>
+endobj
+5980 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+5981 0 obj
+<< /S /GoTo /D (subsection.7.38.1) >>
+endobj
+5984 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5985 0 obj
+<< /S /GoTo /D (section*.1287) >>
+endobj
+5988 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000\137\000i\000n\000i\000t)
+endobj
+5989 0 obj
+<< /S /GoTo /D (subsection.7.38.2) >>
+endobj
+5992 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+5993 0 obj
+<< /S /GoTo /D (section*.1288) >>
+endobj
+5996 0 obj
+(\376\377\000m\000i\000c\000\137\000e\000n\000g\000i\000n\000e\000s\000\137\000t\000o\000t\000a\000l)
+endobj
+5997 0 obj
+<< /S /GoTo /D (section*.1289) >>
+endobj
+6000 0 obj
+(\376\377\000m\000i\000c\000\137\000f\000r\000e\000q\000u\000e\000n\000c\000y)
+endobj
+6001 0 obj
+<< /S /GoTo /D (section*.1290) >>
+endobj
+6004 0 obj
+(\376\377\000m\000i\000c\000\137\000i\000n\000d\000e\000x)
+endobj
+6005 0 obj
+<< /S /GoTo /D (section.7.39) >>
+endobj
+6008 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000\137\000m\000a\000i\000n\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6009 0 obj
+<< /S /GoTo /D (subsection.7.39.1) >>
+endobj
+6012 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6013 0 obj
+<< /S /GoTo /D (section*.1292) >>
+endobj
+6016 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000a\000r\000g\000e\000t\000\137\000m\000a\000i\000n)
+endobj
+6017 0 obj
+<< /S /GoTo /D (section*.1293) >>
+endobj
+6020 0 obj
+(\376\377\000m\000a\000i\000n)
+endobj
+6021 0 obj
+<< /S /GoTo /D (section.7.40) >>
+endobj
+6024 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000i\000m\000e\000r\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6025 0 obj
+<< /S /GoTo /D (subsection.7.40.1) >>
+endobj
+6028 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6029 0 obj
+<< /S /GoTo /D (section*.1296) >>
+endobj
+6032 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000I\000M\000E\000R\000\137\000D\000A\000T\000A\000L\000E\000N)
+endobj
+6033 0 obj
+<< /S /GoTo /D (section*.1297) >>
+endobj
+6036 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000I\000M\000E\000R\000\137\000I\000N\000I\000T)
+endobj
+6037 0 obj
+<< /S /GoTo /D (section*.1298) >>
+endobj
+6040 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000I\000M\000E\000R\000\137\000S\000T\000A\000R\000T)
+endobj
+6041 0 obj
+<< /S /GoTo /D (section*.1299) >>
+endobj
+6044 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000I\000M\000E\000R\000\137\000S\000T\000O\000P)
+endobj
+6045 0 obj
+<< /S /GoTo /D (section*.1300) >>
+endobj
+6048 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000T\000I\000M\000E\000R\000\137\000T\000A\000R\000G\000E\000T\000\137\000D\000A\000T\000A)
+endobj
+6049 0 obj
+<< /S /GoTo /D (subsection.7.40.2) >>
+endobj
+6052 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6053 0 obj
+<< /S /GoTo /D (section*.1301) >>
+endobj
+6056 0 obj
+(\376\377\000t\000i\000m\000e\000r\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+6057 0 obj
+<< /S /GoTo /D (section.7.41) >>
+endobj
+6060 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000i\000m\000e\000r\000\137\000h\000o\000s\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6061 0 obj
+<< /S /GoTo /D (subsection.7.41.1) >>
+endobj
+6064 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6065 0 obj
+<< /S /GoTo /D (section*.1303) >>
+endobj
+6068 0 obj
+(\376\377\000t\000i\000m\000e\000r\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+6069 0 obj
+<< /S /GoTo /D (section.7.42) >>
+endobj
+6072 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000i\000m\000e\000r\000\137\000t\000a\000r\000g\000e\000t\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6073 0 obj
+<< /S /GoTo /D (subsection.7.42.1) >>
+endobj
+6076 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6077 0 obj
+<< /S /GoTo /D (section*.1305) >>
+endobj
+6080 0 obj
+(\376\377\000t\000i\000m\000e\000r\000\137\000e\000n\000a\000b\000l\000e\000d)
+endobj
+6081 0 obj
+<< /S /GoTo /D (section.7.43) >>
+endobj
+6084 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000r\000a\000c\000e\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6085 0 obj
+<< /S /GoTo /D (subsection.7.43.1) >>
+endobj
+6088 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6089 0 obj
+<< /S /GoTo /D (section*.1308) >>
+endobj
+6092 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000i\000g\000n\000a\000l)
+endobj
+6093 0 obj
+<< /S /GoTo /D (section*.1309) >>
+endobj
+6096 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000g\000e)
+endobj
+6097 0 obj
+<< /S /GoTo /D (section*.1310) >>
+endobj
+6100 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000g\000e\000\137\000p\000r\000i\000n\000t)
+endobj
+6101 0 obj
+<< /S /GoTo /D (subsection.7.43.2) >>
+endobj
+6104 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6105 0 obj
+<< /S /GoTo /D (section*.1311) >>
+endobj
+6108 0 obj
+(\376\377\000m\000i\000c\000\137\000i\000n\000d\000e\000x)
+endobj
+6109 0 obj
+<< /S /GoTo /D (section*.1312) >>
+endobj
+6112 0 obj
+(\376\377\000p\000r\000e\000f\000i\000x)
+endobj
+6113 0 obj
+<< /S /GoTo /D (section.7.44) >>
+endobj
+6116 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000t\000r\000a\000c\000e\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6117 0 obj
+<< /S /GoTo /D (subsection.7.44.1) >>
+endobj
+6120 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6121 0 obj
+<< /S /GoTo /D (section*.1315) >>
+endobj
+6124 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000T\000r\000a\000c\000e\000S\000t\000a\000g\000e)
+endobj
+6125 0 obj
+<< /S /GoTo /D (subsection.7.44.2) >>
+endobj
+6128 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6129 0 obj
+<< /S /GoTo /D (section*.1316) >>
+endobj
+6132 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000s\000t\000a\000g\000e\000\137\000p\000r\000i\000n\000t)
+endobj
+6133 0 obj
+<< /S /GoTo /D (section.7.45) >>
+endobj
+6136 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000t\000i\000l\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6137 0 obj
+<< /S /GoTo /D (subsection.7.45.1) >>
+endobj
+6140 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6141 0 obj
+<< /S /GoTo /D (section*.1318) >>
+endobj
+6144 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000p\000a\000r\000s\000e\000\137\000i\000n\000t\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+6145 0 obj
+<< /S /GoTo /D (section*.1319) >>
+endobj
+6148 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000p\000a\000r\000s\000e\000\137\000s\000i\000z\000e\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+6149 0 obj
+<< /S /GoTo /D (section*.1320) >>
+endobj
+6152 0 obj
+(\376\377\000D\000L\000\137\000s\000y\000m)
+endobj
+6153 0 obj
+<< /S /GoTo /D (section*.1321) >>
+endobj
+6156 0 obj
+(\376\377\000g\000e\000t\000\137\000e\000l\000\137\000v\000a\000l\000u\000e)
+endobj
+6157 0 obj
+<< /S /GoTo /D (section.7.46) >>
+endobj
+6160 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000u\000t\000i\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6161 0 obj
+<< /S /GoTo /D (subsection.7.46.1) >>
+endobj
+6164 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6165 0 obj
+<< /S /GoTo /D (section*.1326) >>
+endobj
+6168 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000r\000u\000n\000\137\000o\000n\000c\000e)
+endobj
+6169 0 obj
+<< /S /GoTo /D (section*.1327) >>
+endobj
+6172 0 obj
+(\376\377\000D\000L\000\137\000a\000d\000d\000r)
+endobj
+6173 0 obj
+<< /S /GoTo /D (section*.1328) >>
+endobj
+6176 0 obj
+(\376\377\000D\000L\000\137\000c\000l\000o\000s\000e)
+endobj
+6177 0 obj
+<< /S /GoTo /D (section*.1329) >>
+endobj
+6180 0 obj
+(\376\377\000D\000L\000\137\000o\000p\000e\000n)
+endobj
+6181 0 obj
+<< /S /GoTo /D (section*.1330) >>
+endobj
+6184 0 obj
+(\376\377\000O\000F\000F\000L\000O\000A\000D\000\137\000O\000N\000C\000E\000\137\000C\000O\000N\000T\000R\000O\000L\000\137\000I\000N\000I\000T)
+endobj
+6185 0 obj
+<< /S /GoTo /D (section*.1331) >>
+endobj
+6188 0 obj
+(\376\377\000t\000h\000r\000e\000a\000d\000\137\000g\000e\000t\000s\000p\000e\000c\000i\000f\000i\000c)
+endobj
+6189 0 obj
+<< /S /GoTo /D (section*.1332) >>
+endobj
+6192 0 obj
+(\376\377\000t\000h\000r\000e\000a\000d\000\137\000k\000e\000y\000\137\000c\000r\000e\000a\000t\000e)
+endobj
+6193 0 obj
+<< /S /GoTo /D (section*.1333) >>
+endobj
+6196 0 obj
+(\376\377\000t\000h\000r\000e\000a\000d\000\137\000k\000e\000y\000\137\000d\000e\000l\000e\000t\000e)
+endobj
+6197 0 obj
+<< /S /GoTo /D (section*.1334) >>
+endobj
+6200 0 obj
+(\376\377\000t\000h\000r\000e\000a\000d\000\137\000s\000e\000t\000s\000p\000e\000c\000i\000f\000i\000c)
+endobj
+6201 0 obj
+<< /S /GoTo /D (subsection.7.46.2) >>
+endobj
+6204 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6205 0 obj
+<< /S /GoTo /D (section*.1335) >>
+endobj
+6208 0 obj
+(\376\377\000O\000f\000f\000l\000o\000a\000d\000O\000n\000c\000e\000C\000o\000n\000t\000r\000o\000l)
+endobj
+6209 0 obj
+<< /S /GoTo /D (subsection.7.46.3) >>
+endobj
+6212 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6213 0 obj
+<< /S /GoTo /D (section*.1336) >>
+endobj
+6216 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000p\000a\000r\000s\000e\000\137\000i\000n\000t\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+6217 0 obj
+<< /S /GoTo /D (section*.1337) >>
+endobj
+6220 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000p\000a\000r\000s\000e\000\137\000s\000i\000z\000e\000\137\000s\000t\000r\000i\000n\000g)
+endobj
+6221 0 obj
+<< /S /GoTo /D (section*.1338) >>
+endobj
+6224 0 obj
+(\376\377\000D\000L\000\137\000s\000y\000m)
+endobj
+6225 0 obj
+<< /S /GoTo /D (section*.1339) >>
+endobj
+6228 0 obj
+(\376\377\000g\000e\000t\000\137\000e\000l\000\137\000v\000a\000l\000u\000e)
+endobj
+6229 0 obj
+<< /S /GoTo /D (section.7.47) >>
+endobj
+6232 0 obj
+(\376\377\000o\000f\000l\000d\000b\000e\000g\000i\000n\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6233 0 obj
+<< /S /GoTo /D (subsection.7.47.1) >>
+endobj
+6236 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6237 0 obj
+<< /S /GoTo /D (section*.1343) >>
+endobj
+6240 0 obj
+(\376\377\000A\000L\000L\000O\000C\000A\000T\000E)
+endobj
+6241 0 obj
+<< /S /GoTo /D (section*.1344) >>
+endobj
+6244 0 obj
+(\376\377\000D\000L\000L\000\137\000L\000O\000C\000A\000L)
+endobj
+6245 0 obj
+<< /S /GoTo /D (subsection.7.47.2) >>
+endobj
+6248 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6249 0 obj
+<< /S /GoTo /D (section*.1345) >>
+endobj
+6252 0 obj
+(\376\377\000m\000a\000i\000n)
+endobj
+6253 0 obj
+<< /S /GoTo /D (section*.1346) >>
+endobj
+6256 0 obj
+(\376\377\000M\000A\000I\000N\000\137\000\137)
+endobj
+6257 0 obj
+<< /S /GoTo /D (section*.1347) >>
+endobj
+6260 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000i\000n\000i)
+endobj
+6261 0 obj
+<< /S /GoTo /D (section*.1348) >>
+endobj
+6264 0 obj
+(\376\377\000o\000f\000f\000l\000o\000a\000d\000\137\000i\000n\000i\000t)
+endobj
+6265 0 obj
+<< /S /GoTo /D (subsection.7.47.3) >>
+endobj
+6268 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6269 0 obj
+<< /S /GoTo /D (section*.1349) >>
+endobj
+6272 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000t\000r\000y\000\137\000n\000o\000d\000e)
+endobj
+6273 0 obj
+<< /S /GoTo /D (section*.1350) >>
+endobj
+6276 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000t\000r\000y\000\137\000t\000a\000b\000l\000e\000\137\000s\000t\000a\000r\000t)
+endobj
+6277 0 obj
+<< /S /GoTo /D (section*.1351) >>
+endobj
+6280 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000\137\000n\000o\000d\000e)
+endobj
+6281 0 obj
+<< /S /GoTo /D (section*.1352) >>
+endobj
+6284 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000\137\000t\000a\000b\000l\000e\000\137\000s\000t\000a\000r\000t)
+endobj
+6285 0 obj
+<< /S /GoTo /D (section*.1353) >>
+endobj
+6288 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000v\000a\000r\000\137\000n\000o\000d\000e)
+endobj
+6289 0 obj
+<< /S /GoTo /D (section*.1354) >>
+endobj
+6292 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000v\000a\000r\000\137\000t\000a\000b\000l\000e\000\137\000s\000t\000a\000r\000t)
+endobj
+6293 0 obj
+<< /S /GoTo /D (section.7.48) >>
+endobj
+6296 0 obj
+(\376\377\000o\000f\000l\000d\000e\000n\000d\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6297 0 obj
+<< /S /GoTo /D (subsection.7.48.1) >>
+endobj
+6300 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6301 0 obj
+<< /S /GoTo /D (section*.1357) >>
+endobj
+6304 0 obj
+(\376\377\000A\000L\000L\000O\000C\000A\000T\000E)
+endobj
+6305 0 obj
+<< /S /GoTo /D (subsection.7.48.2) >>
+endobj
+6308 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6309 0 obj
+<< /S /GoTo /D (section*.1358) >>
+endobj
+6312 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000e\000n\000t\000r\000y\000\137\000t\000a\000b\000l\000e\000\137\000e\000n\000d)
+endobj
+6313 0 obj
+<< /S /GoTo /D (section*.1359) >>
+endobj
+6316 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000f\000u\000n\000c\000\137\000t\000a\000b\000l\000e\000\137\000e\000n\000d)
+endobj
+6317 0 obj
+<< /S /GoTo /D (section*.1360) >>
+endobj
+6320 0 obj
+(\376\377\000\137\000\137\000o\000f\000f\000l\000o\000a\000d\000\137\000v\000a\000r\000\137\000t\000a\000b\000l\000e\000\137\000e\000n\000d)
+endobj
+6321 0 obj
+<< /S /GoTo /D (section.7.49) >>
+endobj
+6324 0 obj
+(\376\377\000o\000r\000s\000l\000-\000l\000i\000t\000e\000/\000i\000n\000c\000l\000u\000d\000e\000/\000o\000r\000s\000l\000-\000l\000i\000t\000e\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6325 0 obj
+<< /S /GoTo /D (subsection.7.49.1) >>
+endobj
+6328 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6329 0 obj
+<< /S /GoTo /D (section*.1366) >>
+endobj
+6332 0 obj
+(\376\377\000O\000R\000S\000L\000\137\000M\000A\000X\000\137\000C\000A\000R\000D\000S)
+endobj
+6333 0 obj
+<< /S /GoTo /D (section*.1367) >>
+endobj
+6336 0 obj
+(\376\377\000O\000R\000S\000L\000\137\000M\000A\000X\000\137\000T\000A\000G\000\137\000L\000E\000N)
+endobj
+6337 0 obj
+<< /S /GoTo /D (subsection.7.49.2) >>
+endobj
+6340 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6341 0 obj
+<< /S /GoTo /D (section*.1368) >>
+endobj
+6344 0 obj
+(\376\377\000B\000u\000s\000y\000S\000e\000t\000T\000y\000p\000e)
+endobj
+6345 0 obj
+<< /S /GoTo /D (section*.1369) >>
+endobj
+6348 0 obj
+(\376\377\000O\000R\000S\000L\000B\000u\000s\000y\000S\000e\000t)
+endobj
+6349 0 obj
+<< /S /GoTo /D (section*.1370) >>
+endobj
+6352 0 obj
+(\376\377\000O\000R\000S\000L\000P\000a\000r\000t\000i\000a\000l\000G\000r\000a\000n\000u\000l\000a\000r\000i\000t\000y)
+endobj
+6353 0 obj
+<< /S /GoTo /D (section*.1371) >>
+endobj
+6356 0 obj
+(\376\377\000O\000R\000S\000L\000T\000a\000g)
+endobj
+6357 0 obj
+<< /S /GoTo /D (subsection.7.49.3) >>
+endobj
+6360 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6361 0 obj
+<< /S /GoTo /D (section*.1372) >>
+endobj
+6364 0 obj
+(\376\377\000O\000R\000S\000L\000B\000u\000s\000y\000S\000e\000t\000T\000y\000p\000e)
+endobj
+6365 0 obj
+<< /S /GoTo /D (section*.1373) >>
+endobj
+6368 0 obj
+(\376\377\000O\000R\000S\000L\000P\000a\000r\000t\000i\000a\000l\000G\000r\000a\000n\000u\000l\000a\000r\000i\000t\000y)
+endobj
+6369 0 obj
+<< /S /GoTo /D (subsection.7.49.4) >>
+endobj
+6372 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6373 0 obj
+<< /S /GoTo /D (section*.1374) >>
+endobj
+6376 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000l\000e\000a\000s\000e)
+endobj
+6377 0 obj
+<< /S /GoTo /D (section*.1375) >>
+endobj
+6380 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e)
+endobj
+6381 0 obj
+<< /S /GoTo /D (section*.1376) >>
+endobj
+6384 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e\000P\000a\000r\000t\000i\000a\000l)
+endobj
+6385 0 obj
+<< /S /GoTo /D (section*.1377) >>
+endobj
+6388 0 obj
+(\376\377\000O\000R\000S\000L\000T\000r\000y\000R\000e\000s\000e\000r\000v\000e)
+endobj
+6389 0 obj
+<< /S /GoTo /D (section.7.50) >>
+endobj
+6392 0 obj
+(\376\377\000o\000r\000s\000l\000-\000l\000i\000t\000e\000/\000l\000i\000b\000/\000o\000r\000s\000l\000-\000l\000i\000t\000e\000.\000c\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+6393 0 obj
+<< /S /GoTo /D (subsection.7.50.1) >>
+endobj
+6396 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6397 0 obj
+<< /S /GoTo /D (section*.1381) >>
+endobj
+6400 0 obj
+(\376\377\000D\000I\000S\000A\000B\000L\000E\000\137\000S\000Y\000M\000B\000O\000L\000\137\000V\000E\000R\000S\000I\000O\000N\000I\000N\000G)
+endobj
+6401 0 obj
+<< /S /GoTo /D (section*.1382) >>
+endobj
+6404 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000l\000e\000a\000s\000e\0000)
+endobj
+6405 0 obj
+<< /S /GoTo /D (section*.1383) >>
+endobj
+6408 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e\0000)
+endobj
+6409 0 obj
+<< /S /GoTo /D (section*.1384) >>
+endobj
+6412 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e\000P\000a\000r\000t\000i\000a\000l\0000)
+endobj
+6413 0 obj
+<< /S /GoTo /D (section*.1385) >>
+endobj
+6416 0 obj
+(\376\377\000O\000R\000S\000L\000T\000r\000y\000R\000e\000s\000e\000r\000v\000e\0000)
+endobj
+6417 0 obj
+<< /S /GoTo /D (subsection.7.50.2) >>
+endobj
+6420 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6421 0 obj
+<< /S /GoTo /D (section*.1386) >>
+endobj
+6424 0 obj
+(\376\377\000c\000a\000n\000\137\000r\000e\000l\000e\000a\000s\000e\000\137\000c\000a\000r\000d)
+endobj
+6425 0 obj
+<< /S /GoTo /D (section*.1387) >>
+endobj
+6428 0 obj
+(\376\377\000c\000a\000n\000\137\000r\000e\000s\000e\000r\000v\000e\000\137\000c\000a\000r\000d)
+endobj
+6429 0 obj
+<< /S /GoTo /D (section*.1388) >>
+endobj
+6432 0 obj
+(\376\377\000c\000h\000e\000c\000k\000\137\000a\000r\000g\000s)
+endobj
+6433 0 obj
+<< /S /GoTo /D (section*.1389) >>
+endobj
+6436 0 obj
+(\376\377\000c\000h\000e\000c\000k\000\137\000b\000s\000e\000t\000s)
+endobj
+6437 0 obj
+<< /S /GoTo /D (section*.1390) >>
+endobj
+6440 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000l\000e\000a\000s\000e\0000)
+endobj
+6441 0 obj
+<< /S /GoTo /D (section*.1391) >>
+endobj
+6444 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e\0000)
+endobj
+6445 0 obj
+<< /S /GoTo /D (section*.1392) >>
+endobj
+6448 0 obj
+(\376\377\000O\000R\000S\000L\000R\000e\000s\000e\000r\000v\000e\000P\000a\000r\000t\000i\000a\000l\0000)
+endobj
+6449 0 obj
+<< /S /GoTo /D (section*.1393) >>
+endobj
+6452 0 obj
+(\376\377\000O\000R\000S\000L\000T\000r\000y\000R\000e\000s\000e\000r\000v\000e\0000)
+endobj
+6453 0 obj
+<< /S /GoTo /D (section*.1394) >>
+endobj
+6456 0 obj
+(\376\377\000r\000e\000l\000e\000a\000s\000e\000\137\000c\000a\000r\000d)
+endobj
+6457 0 obj
+<< /S /GoTo /D (section*.1395) >>
+endobj
+6460 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000\137\000c\000a\000r\000d)
+endobj
+6461 0 obj
+<< /S /GoTo /D (section*.1396) >>
+endobj
+6464 0 obj
+(\376\377\000s\000t\000a\000t\000e\000\137\000l\000o\000c\000k)
+endobj
+6465 0 obj
+<< /S /GoTo /D (section*.1397) >>
+endobj
+6468 0 obj
+(\376\377\000s\000t\000a\000t\000e\000\137\000s\000i\000g\000n\000a\000l\000\137\000r\000e\000l\000e\000a\000s\000e)
+endobj
+6469 0 obj
+<< /S /GoTo /D (section*.1398) >>
+endobj
+6472 0 obj
+(\376\377\000s\000t\000a\000t\000e\000\137\000u\000n\000l\000o\000c\000k)
+endobj
+6473 0 obj
+<< /S /GoTo /D (section*.1399) >>
+endobj
+6476 0 obj
+(\376\377\000s\000t\000a\000t\000e\000\137\000w\000a\000i\000t\000\137\000f\000o\000r\000\137\000r\000e\000l\000e\000a\000s\000e)
+endobj
+6477 0 obj
+<< /S /GoTo /D (subsection.7.50.3) >>
+endobj
+6480 0 obj
+(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+6481 0 obj
+<< /S /GoTo /D (section*.1400) >>
+endobj
+6484 0 obj
+(\376\377\000o\000w\000n\000e\000r)
+endobj
+6485 0 obj
+<< /S /GoTo /D (section*.1401) >>
+endobj
+6488 0 obj
+(\376\377\000r\000s\000r\000v\000\137\000c\000n\000t)
+endobj
+6489 0 obj
+<< /S /GoTo /D (section*.1402) >>
+endobj
+6492 0 obj
+(\376\377\000r\000s\000r\000v\000\137\000d\000a\000t\000a)
+endobj
+6493 0 obj
+<< /S /GoTo /D (section*.1403) >>
+endobj
+6496 0 obj
+(\376\377\000I\000n\000d\000e\000x)
+endobj
+6497 0 obj
+<< /S /GoTo /D [6498 0 R /Fit ] >>
+endobj
+6500 0 obj <<
+/Length 240
+/Filter /FlateDecode
+>>
+stream
+xÚ…ÐÁjÃ0 à{žBÇø`M’íÄéme[Ù †ok-uKaMGHa}û9qX ;ì$ÙüþL°‚EAÿÔy(l˜„3ZÏàLƒR[ø(ŸÛ>~ªUxÓ zN‰!lÑ’€C¡:'—âªßà ›T#ôMôm·$2§õVi©}ù~nûÃ1æÃëaÓ)¦rÝ)m¨¼\IÂÚ5Õ@jöHâ@[B“¦ÑElc~ÙÇ Þ(„±8©Ä}_ö±ÍŒ¯'°jêi3C´TÈâ³'é<xÿÕåÆç"Äv2yæìÌÚýóå¡øwñ]©
+endstream
+endobj
+6498 0 obj <<
+/Type /Page
+/Contents 6500 0 R
+/Resources 6499 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+>> endobj
+6501 0 obj <<
+/D [6498 0 R /XYZ 70.866 771.024 null]
+>> endobj
+6499 0 obj <<
+/Font << /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6506 0 obj <<
+/Length 966
+/Filter /FlateDecode
+>>
+stream
+xÚ•VKÛ8 ¾çWØCm`â‘rœc;è-ÐÝîN
+h{Pm%êH©[Ìþú%E:ïº'S$ýññ‘–¥Ø)ÞÌ~ÌRxJ‘Š…Lª²‹ªJª¬õnöù« ØÞ ™äËJü ž;Q¨<QEr+žfÎ$c½ZÍîU.ªdY–¹X­E¥’
+Ë4‘e*Vø=®ây¶¨¢?öƒÝÙô`½#Íï~°µ‰¿®ÞÝ?êFŠyš&K¥â­Lû"V2êãy®Ò¨ö»½mMÇÇŽs=ÓÁw7”Îl¥$âTE†4ƒçç–½Þ±Ô˜MœÊ¨3|^#â„ï¼›‡Ä8œ­;¿ï|múÞO‰¼M¡u ± =Ö uɲ(Îë¶ÒÍÊ,ÒA @Íèì‘•˜:ê8 /Ó€:ŸWÑjkzCNþ„‰ž ¬«Û±aûÓÓëìE…bÄ"Ò®™Ì $Ѻ~€ò ÊX3¯
+>ïº1;Ý}ïñ"º£0ŸŒw,!‹ÃŒLf’>l-»uœó@ß®6ôð;Ÿ— œOƒ¹÷ôÒñö´nêÃ~Œa’'lkrHì>ŒØq¸ãøTûÑ1ÖôÇv_¼:ðÒøzÜÑ—c÷SvûpË2ÒfËö/™J†âî—êÁOAQD/[ö9¢õÉû’=ü‡¼^]ÿÖ¨üÕüŸŸú™Qb äg%’Ÿ-Ë$ƒñ)TR–<zö2ð¿Ò÷ƒ
+endstream
+endobj
+6505 0 obj <<
+/Type /Page
+/Contents 6506 0 R
+/Resources 6504 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+>> endobj
+6504 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6511 0 obj <<
+/Length 130
+/Filter /FlateDecode
+>>
+stream
+xڕͽ
+A à>O1¥61·?Ùl+¨p¸Ýq•‡rpWXùú; « ÌðEp‡àDêü
+:aSE1c ו†Q0y×C8VÃó½\‘r䜢ç:“|,ùeæâä?â¾Ñî˜3*W ŠvC¨É)ó%«‹m°™çíØúïÛC£Ë+Å
+endstream
+endobj
+6510 0 obj <<
+/Type /Page
+/Contents 6511 0 R
+/Resources 6509 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+>> endobj
+6509 0 obj <<
+/Font << /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6558 0 obj <<
+/Length 1127
+/Filter /FlateDecode
+>>
+stream
+xÚí›Mw£6†÷þZÂUŸHZv2Ifæd:SÇí,ÒY¬$œbÈ
+ƒøLøLÈ““8ÈóªßòÊW ²ðÎ¥Èyhó"²¼|/|/´æåI †"Æ
++çž óQη:/²´×5|,,ÀÓ|®‹Ë(ùóçå2ÓyÞ¡vÈšÇ2ÜPôcpßY:d3¼c“<×Á²“j i¨8=˜ôKãE²¬Ðß/tíß’U×TäöpÄB=%Ô_êµakÉ‘5“‰?Mn£D›$ä$]'=›øÌŠ;¸ï‚dw7´­ºc,ãô/—pG'Å—!'èîùqŒmÖw²£j¥rº˜}›áúk˜ ècN g„«ÙÕW–æ
+–[†]™v<·“~ÎÌZ‹·KtH]žùi~yñR}f·8“úÄVe–µ:.vØa…™ÄfT Å)Ì´µ€G7>pêËt¬ƒ\öÿ$Vø«­ð¹®ŠjǼë%6ã"PK‰ÍÌŠ˜
+?]Ìþž¶
+endstream
+endobj
+6557 0 obj <<
+/Type /Page
+/Contents 6558 0 R
+/Resources 6556 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+/Annots [ 6512 0 R 6513 0 R 6514 0 R 6515 0 R 6516 0 R 6517 0 R 6518 0 R 6519 0 R 6520 0 R 6521 0 R 6522 0 R 6523 0 R 6524 0 R 6525 0 R 6526 0 R 6527 0 R 6528 0 R 6529 0 R 6530 0 R 6531 0 R 6532 0 R 6533 0 R 6534 0 R 6535 0 R 6536 0 R 6537 0 R 6538 0 R 6539 0 R 6540 0 R 6541 0 R 6542 0 R 6543 0 R 6544 0 R 6545 0 R 6546 0 R 6547 0 R 6548 0 R 6549 0 R 6550 0 R 6551 0 R 6552 0 R 6553 0 R 6554 0 R ]
+>> endobj
+6512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 616.35 162.419 626.649]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+6513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 604.269 173.999 614.609]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+6514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 583.816 163.647 592.515]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+6515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 569.965 172.628 580.484]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+6516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 549.561 136.506 558.363]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+6517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 537.481 148.58 546.229]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+6518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 515.306 128.033 524.005]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+6519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 503.226 140.609 511.844]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+6520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 479.329 204.389 489.75]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+6521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 467.249 219.575 477.719]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+6522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 456.872 238.777 465.491]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1.1) >>
+>> endobj
+6523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 444.922 153.06 453.464]
+/Subtype /Link
+/A << /S /GoTo /D (section*.4) >>
+>> endobj
+6524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.76 153.06 441.294]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+6525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 420.577 236.607 429.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1.2) >>
+>> endobj
+6526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.707 185.912 417.227]
+/Subtype /Link
+/A << /S /GoTo /D (section*.6) >>
+>> endobj
+6527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 396.38 192.161 405.128]
+/Subtype /Link
+/A << /S /GoTo /D (section*.7) >>
+>> endobj
+6528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.511 245.322 393.03]
+/Subtype /Link
+/A << /S /GoTo /D (section*.8) >>
+>> endobj
+6529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.412 195.874 380.873]
+/Subtype /Link
+/A << /S /GoTo /D (section*.9) >>
+>> endobj
+6530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.085 230.035 368.833]
+/Subtype /Link
+/A << /S /GoTo /D (section*.10) >>
+>> endobj
+6531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.265 182.693 356.676]
+/Subtype /Link
+/A << /S /GoTo /D (section*.11) >>
+>> endobj
+6532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 335.888 186.683 344.578]
+/Subtype /Link
+/A << /S /GoTo /D (section*.12) >>
+>> endobj
+6533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 323.789 199.648 332.538]
+/Subtype /Link
+/A << /S /GoTo /D (section*.13) >>
+>> endobj
+6534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 309.969 194.152 320.381]
+/Subtype /Link
+/A << /S /GoTo /D (section*.14) >>
+>> endobj
+6535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.592 186.306 308.283]
+/Subtype /Link
+/A << /S /GoTo /D (section*.15) >>
+>> endobj
+6536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.647 207.888 296.242]
+/Subtype /Link
+/A << /S /GoTo /D (section*.16) >>
+>> endobj
+6537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.548 212.371 284.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.17) >>
+>> endobj
+6538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 263.297 181.877 271.916]
+/Subtype /Link
+/A << /S /GoTo /D (section*.18) >>
+>> endobj
+6539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 251.199 186.1 259.817]
+/Subtype /Link
+/A << /S /GoTo /D (section*.19) >>
+>> endobj
+6540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.1 180.712 247.719]
+/Subtype /Link
+/A << /S /GoTo /D (section*.20) >>
+>> endobj
+6541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.231 236.419 235.75]
+/Subtype /Link
+/A << /S /GoTo /D (section*.21) >>
+>> endobj
+6542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.182 200.401 223.652]
+/Subtype /Link
+/A << /S /GoTo /D (section*.22) >>
+>> endobj
+6543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.034 204.113 211.423]
+/Subtype /Link
+/A << /S /GoTo /D (section*.23) >>
+>> endobj
+6544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.985 224.323 199.325]
+/Subtype /Link
+/A << /S /GoTo /D (section*.24) >>
+>> endobj
+6545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.837 254.055 187.357]
+/Subtype /Link
+/A << /S /GoTo /D (section*.25) >>
+>> endobj
+6546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.739 204.607 175.128]
+/Subtype /Link
+/A << /S /GoTo /D (section*.26) >>
+>> endobj
+6547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.411 255.714 163.16]
+/Subtype /Link
+/A << /S /GoTo /D (section*.27) >>
+>> endobj
+6548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.542 274.669 150.931]
+/Subtype /Link
+/A << /S /GoTo /D (section*.28) >>
+>> endobj
+6549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.367 241.789 138.833]
+/Subtype /Link
+/A << /S /GoTo /D (section*.29) >>
+>> endobj
+6550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 116.394 228.048 126.864]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+6551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 106.017 238.777 114.636]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+6552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.919 153.06 102.537]
+/Subtype /Link
+/A << /S /GoTo /D (section*.32) >>
+>> endobj
+6553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.82 171.001 90.439]
+/Subtype /Link
+/A << /S /GoTo /D (section*.33) >>
+>> endobj
+6554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 171.539 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section*.34) >>
+>> endobj
+6559 0 obj <<
+/D [6557 0 R /XYZ 70.866 640.977 null]
+>> endobj
+6556 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6619 0 obj <<
+/Length 1802
+/Filter /FlateDecode
+>>
+stream
+xÚí\ÉnÛH½ë+ú4 jwõÞÆ\&^² Ž0—$F¢ a,)£ÅÁüýT“”".ÚLZXK∮¦êu½zU½0ò@ù³ó¦ß¹¸µ‚Xê´¤O £Vkb§HH¾DW?ôo>ô?w¿õßÉ$åÜáoW>ëÜô;ÿt
+gÉÏôÉ1‘JP%þû‘|î|ê°üå2;³‡Üà]þºRm¼.HF5SÄh lõ‹Y·'Xôoõ¥@F¤s½ë¥ðë»õÕŒ«$Ž'ŠãÎ’y’ ýÔå*JÒñW߆|é9g"Úí)¥²¿t›?é×b!¨Üyå)@zRQ!駀˜¤žW”SŽ¿*þêň¨hïr=&Ý76ºž–ãd²ˆ£é¤Œ0£^µckBoËÞ@­…¢³GóšÀ’ùÃ]hê 4Š,|œe–ŒÉ#+™¬€–aVœN§‰-G [¡-3×»GµTÊ3b¸D~oF¥Šj•ÒÜä ?TÂœQ\žï‹[µ™ú{VRc%éq$S‘ïÑþ‰®ãù|/‹J‰©Üˆ•:
+5ÓŽ9ÌÜœhǨ”¦É¼ Ne–¸´Ù˜ï¿2&¦ñ°ŽâP;8ÓÆÈŃ5Å‘çèÏeîáÏ‹,}-‹ì?î’û.ÊŠd–LYa¥;×¼e¶2™@•€Þ.O(œR™J¸Nñȧ“lJ'óA®~ÔkÉψ6žãqVLÞ×+Eö>÷Â8õt¼ˆcþàÓ:õ5ô¬ÉÆ–*DûºDrò¥‘õ–µ W•Í eEME€i`!ïKÁÛ‰ŠckôQc"²Ú¶1ZÒød–€0+©…™ ¶^éÄçõ§QžÕ‹xk¬€¬&(Œ¨ÙÝBÙ‹·£Òd–ÏczÒÅÀ]¦Ì\îS )€Ÿ°¥Ö”ʧY2_>VãÊÁ¹Ë‰çšÞ&@ãTYøy)‚ñųYM adrpD3E¥hhX:9–YâbãóÁst½"^U-٭Ѓ¤`«ÐÍßPŸÚ}šÃ×Aó7ôiAóçIä{<¯°ƒòl‰ ÍLrèäŽÆ[³x€à$̼b'—qPÚ^‡¢¨ZwxD.ªþ˜Í®Ñ8]ˆjdŽÐ+•»„—˜ Ë™W•s2•#‚Ê9Чî˜Î曕L™@ MHÝØ°¿®êÃU`æS@Àícü0­¢ÿÉûï’
+WÛPc‚÷÷ó¤Ò,ÕÚ÷Ÿ"ÜÕÔVÀÞ?Åä¿+í­,´pÁ÷-ù~Ë2\U´¾b].¦¿4ýÆþ§M{'Ym–±î¸2V†2¶YÉÅÙÁt二½šNæ¿Ú6Ó¼ ýmíú–D«wV¹‚ÉWëȺڵ@e©eàí£x{»ï{uÎ÷SYÔtdn—“A:9Kó'q-…(s^ŒPçËxX·õUiÊœ%ÂïÍǬÙd³·¥Æf–À­úú;WÁ¥ ²gOÊŽxKÁŠ"õ?ä5V cA5ÓDKy3ˆ5å.3Ä
+=¸“õàÔ[Iüö©ª*pçãV8²‘QÉЊ… ›mÔ¢pà’Ö$×°
+ÎçoYÓÒy}?ÜLü%OyF½¼¼ŠgÃâÿ ËCªñ*ó&.”:×t®Cê|)Ž¯ìÂÔaùªµdYGeÞ¸¹­Äüý²þ¾¸EnþÕî.Éî¯X½gMñBùo¨‘°¾Øn?BÆÊs¯ìŸÃ?=á¨æ¼Jça ·µÊgû.
+¨b¶\$d9±‚rhzIí0€½·ÊØ7{ã†ï¼=H›"¼Û³R¥CŒ¿¸)W"O®nsÞ$ËŠ*°åóÊ^peÝ5ÚÊP Ø#.ÑN¡Tj£⨈¬5ø$N¤Ê‘‡ò©<úG@Õ
+endstream
+endobj
+6618 0 obj <<
+/Type /Page
+/Contents 6619 0 R
+/Resources 6617 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+/Annots [ 6555 0 R 6560 0 R 6561 0 R 6562 0 R 6563 0 R 6564 0 R 6565 0 R 6566 0 R 6567 0 R 6568 0 R 6569 0 R 6570 0 R 6571 0 R 6572 0 R 6573 0 R 6574 0 R 6575 0 R 6576 0 R 6577 0 R 6578 0 R 6579 0 R 6580 0 R 6581 0 R 6582 0 R 6583 0 R 6584 0 R 6585 0 R 6586 0 R 6587 0 R 6588 0 R 6589 0 R 6590 0 R 6591 0 R 6592 0 R 6593 0 R 6594 0 R 6595 0 R 6596 0 R 6597 0 R 6598 0 R 6599 0 R 6600 0 R 6601 0 R 6602 0 R 6603 0 R 6604 0 R 6605 0 R 6606 0 R 6607 0 R 6608 0 R 6609 0 R 6610 0 R 6611 0 R 6612 0 R 6613 0 R 6614 0 R 6615 0 R ]
+>> endobj
+6555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.146 184.997 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (section*.35) >>
+>> endobj
+6560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 747.772 236.607 756.391]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+6561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 735.627 183.025 744.246]
+/Subtype /Link
+/A << /S /GoTo /D (section*.36) >>
+>> endobj
+6562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.636 169.109 731.94]
+/Subtype /Link
+/A << /S /GoTo /D (section*.37) >>
+>> endobj
+6563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 701.231 178.477 710.033]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+6564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 689.104 238.636 697.853]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+6565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.238 221.956 685.578]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.1) >>
+>> endobj
+6566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 664.815 258.7 673.433]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.2) >>
+>> endobj
+6567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 652.67 195.936 661.288]
+/Subtype /Link
+/A << /S /GoTo /D (section*.39) >>
+>> endobj
+6568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 640.525 179.223 649.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.40) >>
+>> endobj
+6569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 628.38 200.778 636.999]
+/Subtype /Link
+/A << /S /GoTo /D (section*.41) >>
+>> endobj
+6570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 616.236 163.523 624.854]
+/Subtype /Link
+/A << /S /GoTo /D (section*.42) >>
+>> endobj
+6571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 604.091 212.473 612.839]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+6572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 590.225 221.956 600.565]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+6573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 579.801 258.7 588.42]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+6574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 567.657 161.04 576.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.44) >>
+>> endobj
+6575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 555.512 156.046 564.13]
+/Subtype /Link
+/A << /S /GoTo /D (section*.45) >>
+>> endobj
+6576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 543.367 158.951 551.986]
+/Subtype /Link
+/A << /S /GoTo /D (section*.46) >>
+>> endobj
+6577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 531.222 211.729 539.971]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+6578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 517.356 221.956 527.696]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+6579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 506.933 258.7 515.551]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+6580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 494.788 162.035 503.407]
+/Subtype /Link
+/A << /S /GoTo /D (section*.48) >>
+>> endobj
+6581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 482.643 157.534 491.262]
+/Subtype /Link
+/A << /S /GoTo /D (section*.49) >>
+>> endobj
+6582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 468.652 163.523 479.117]
+/Subtype /Link
+/A << /S /GoTo /D (section*.50) >>
+>> endobj
+6583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 458.354 156.557 466.972]
+/Subtype /Link
+/A << /S /GoTo /D (section*.51) >>
+>> endobj
+6584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 446.209 165.523 454.958]
+/Subtype /Link
+/A << /S /GoTo /D (section*.52) >>
+>> endobj
+6585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 434.064 162.528 442.683]
+/Subtype /Link
+/A << /S /GoTo /D (section*.53) >>
+>> endobj
+6586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 421.92 180.012 430.538]
+/Subtype /Link
+/A << /S /GoTo /D (section*.54) >>
+>> endobj
+6587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 409.775 215.325 418.523]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+6588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 395.909 221.956 406.249]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+6589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 385.485 303.315 394.234]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.2) >>
+>> endobj
+6590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 373.341 178.712 381.959]
+/Subtype /Link
+/A << /S /GoTo /D (section*.58) >>
+>> endobj
+6591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 361.196 274.148 369.814]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.3) >>
+>> endobj
+6592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 349.051 197.389 357.741]
+/Subtype /Link
+/A << /S /GoTo /D (section*.59) >>
+>> endobj
+6593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 335.059 194.896 345.597]
+/Subtype /Link
+/A << /S /GoTo /D (section*.60) >>
+>> endobj
+6594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 323.04 182.642 333.219]
+/Subtype /Link
+/A << /S /GoTo /D (section*.61) >>
+>> endobj
+6595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 312.617 211.968 321.307]
+/Subtype /Link
+/A << /S /GoTo /D (section*.62) >>
+>> endobj
+6596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 300.472 258.7 309.091]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.4) >>
+>> endobj
+6597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 286.606 177.224 296.946]
+/Subtype /Link
+/A << /S /GoTo /D (section*.63) >>
+>> endobj
+6598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 276.183 177.224 284.873]
+/Subtype /Link
+/A << /S /GoTo /D (section*.64) >>
+>> endobj
+6599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 262.267 246.266 272.787]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+6600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 250.172 221.956 260.512]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.5.1) >>
+>> endobj
+6601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.748 258.7 248.367]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.5.2) >>
+>> endobj
+6602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.604 159.542 236.222]
+/Subtype /Link
+/A << /S /GoTo /D (section*.66) >>
+>> endobj
+6603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.459 164.026 223.916]
+/Subtype /Link
+/A << /S /GoTo /D (section*.67) >>
+>> endobj
+6604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 203.314 279.379 212.063]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+6605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 189.448 221.956 199.788]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.6.1) >>
+>> endobj
+6606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 179.025 303.315 187.773]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.6.2) >>
+>> endobj
+6607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.88 194.107 175.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.70) >>
+>> endobj
+6608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.735 194.107 163.484]
+/Subtype /Link
+/A << /S /GoTo /D (section*.71) >>
+>> endobj
+6609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 142.59 201.848 151.339]
+/Subtype /Link
+/A << /S /GoTo /D (section*.72) >>
+>> endobj
+6610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 130.446 274.148 139.064]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.6.3) >>
+>> endobj
+6611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.301 209.009 126.919]
+/Subtype /Link
+/A << /S /GoTo /D (section*.73) >>
+>> endobj
+6612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.156 171.512 114.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.74) >>
+>> endobj
+6613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 94.012 258.7 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.6.4) >>
+>> endobj
+6614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.867 192.574 90.485]
+/Subtype /Link
+/A << /S /GoTo /D (section*.75) >>
+>> endobj
+6615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 175.816 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section*.76) >>
+>> endobj
+6617 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6683 0 obj <<
+/Length 1961
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsG¾ûWì)%4LÏ£gæ
+6©¢IlÝ!-FUÒJу@~}z´+ãÝI+vm ž…ŒVÝ¢¿oº¿ž—yr›ðä׋çËg/­L,sˆ2~H g11N0„d8IÞö^üþfxõfxÓ7|•(®˜Ž>]{ïâjxñ÷Ð[<;CÖ2+T2ž_¼}Ç“ ½÷*áL:›ü³{rž(-™V’^Ï’›‹?/xñår;«ÛÂàuñu•¾÷u­f–|!0¾ÿºÈL
+Áú~8 ´bÆéj’±•"z=ÊnÓu¥ŽRÈK©=UJe,ž‡‹§Å³e¢— ³ŒuóâIH꧋a-×Ï"gŒ·+ü›z+
+Ë8êVXf¬·d˜%Ky"]dãE0;΄èįËPÉï4›T &eäÒ·p‰’$•êòrS+Œš‹X
+?ƒ¯¼Rñ}TH#IFùdV™6# ‘!=á-¡*(0}¸´$¢¼,kïÓ’®–ºìóˆ,“ú)æ|ú 2!Ïåv^$»8ä-iyb‚FJsBWÊÛrfµ«ÎŸb.fRˆð2êB2ÃM¢cØJÿ ¤ÇsCJ«)“t=.žœ˜ñ±ÆDä›tÒ0 ¬NS¸8%ÔrîB5žrq=¥mLCóA3Òõ©ÏŸk3ZEÁÙF14åöláKö?^2Ôe˜3"¢ð(Ä¥­ïŒC‘Ö…‚™Nr%bð(ca»\Ö3‘Ù¯©ÄèwýòâîâÞ …Ëéü²‘À÷ ½UÝ8h* ¿ªÑ¯ýŠƒ—ù†’OTù­ò)Ö"uTù]¨ü"°WŸ7i}Û”æSÃchšßî+üç‹m})……ïSñÖ óÈëí¬FvuüCbpHÅ@®b®²Ûi–ž1Tœƒ•ÀAEôêbFŸ©d *™vU›+)™aï}Y¦b|£­lŸf@C2æÍꦾÏEk“B›”Ž eÌÍô6Í^–·[Ƙ·Žù Dü]:‘õtrU¬ß§ù‚ó.wßÏ*”P­’þÈ(£PP™û2_l‹mòiÂj„ÔŠ#òöoUÎÛ‹lýU÷-
+ÿr§@îiBèíß>ÚïK®~vöšsÖê
+ ]gG]Ç$|˜Ì‡¢ÿì%igÇ
+ô{.*Úî/.¹ÿ`eg†aFÁþÈí!¨„‰
+ sRwÁ)²d$î_ÜNÇE¨¼L :ðkYPe¿Ý
+endstream
+endobj
+6682 0 obj <<
+/Type /Page
+/Contents 6683 0 R
+/Resources 6681 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6503 0 R
+/Annots [ 6616 0 R 6623 0 R 6624 0 R 6625 0 R 6626 0 R 6627 0 R 6628 0 R 6629 0 R 6630 0 R 6631 0 R 6632 0 R 6633 0 R 6634 0 R 6635 0 R 6636 0 R 6637 0 R 6638 0 R 6639 0 R 6640 0 R 6641 0 R 6642 0 R 6643 0 R 6644 0 R 6645 0 R 6646 0 R 6647 0 R 6648 0 R 6649 0 R 6650 0 R 6651 0 R 6652 0 R 6653 0 R 6654 0 R 6655 0 R 6656 0 R 6657 0 R 6658 0 R 6659 0 R 6660 0 R 6661 0 R 6662 0 R 6663 0 R 6664 0 R 6665 0 R 6666 0 R 6667 0 R 6668 0 R 6669 0 R 6670 0 R 6671 0 R 6672 0 R 6673 0 R 6674 0 R 6675 0 R 6676 0 R 6677 0 R 6678 0 R 6679 0 R ]
+>> endobj
+6616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 759.917 238.143 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+6623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 746.087 221.956 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.7.1) >>
+>> endobj
+6624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 735.699 258.7 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.7.2) >>
+>> endobj
+6625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 163.532 732.048]
+/Subtype /Link
+/A << /S /GoTo /D (section*.78) >>
+>> endobj
+6626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 157.409 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.79) >>
+>> endobj
+6627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 697.526 253.108 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+6628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 685.543 221.956 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.8.1) >>
+>> endobj
+6629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.156 258.7 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.8.2) >>
+>> endobj
+6630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 203.037 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.81) >>
+>> endobj
+6631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 157.534 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.82) >>
+>> endobj
+6632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 178.219 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.83) >>
+>> endobj
+6633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 205.871 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.84) >>
+>> endobj
+6634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.891 152.064 623.07]
+/Subtype /Link
+/A << /S /GoTo /D (section*.85) >>
+>> endobj
+6635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.657 218.137 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.86) >>
+>> endobj
+6636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.548 183.473 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.87) >>
+>> endobj
+6637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 578.287 215.961 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.9) >>
+>> endobj
+6638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 564.456 221.956 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.9.1) >>
+>> endobj
+6639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 554.069 258.7 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.9.2) >>
+>> endobj
+6640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 164.752 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.89) >>
+>> endobj
+6641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 162.797 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.90) >>
+>> endobj
+6642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 157.409 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.91) >>
+>> endobj
+6643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 163.658 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.92) >>
+>> endobj
+6644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.804 164.528 501.983]
+/Subtype /Link
+/A << /S /GoTo /D (section*.93) >>
+>> endobj
+6645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 481.417 215.71 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.10) >>
+>> endobj
+6646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 467.587 221.956 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.10.1) >>
+>> endobj
+6647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.2 258.7 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.10.2) >>
+>> endobj
+6648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 445.091 167.02 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.95) >>
+>> endobj
+6649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 191.713 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.96) >>
+>> endobj
+6650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 158.538 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.97) >>
+>> endobj
+6651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 406.918 207.264 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.11) >>
+>> endobj
+6652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 394.935 221.956 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.1) >>
+>> endobj
+6653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 382.777 271.082 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.2) >>
+>> endobj
+6654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 166.518 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.106) >>
+>> endobj
+6655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 183.957 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.107) >>
+>> endobj
+6656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 348.222 290.413 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.3) >>
+>> endobj
+6657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.342 212.64 344.57]
+/Subtype /Link
+/A << /S /GoTo /D (section*.108) >>
+>> endobj
+6658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 324.004 303.315 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.4) >>
+>> endobj
+6659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 169.513 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.109) >>
+>> endobj
+6660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 177.254 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.110) >>
+>> endobj
+6661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 287.678 274.148 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.5) >>
+>> endobj
+6662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 275.57 168.751 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.111) >>
+>> endobj
+6663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 183.204 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.112) >>
+>> endobj
+6664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 175.986 259.809]
+/Subtype /Link
+/A << /S /GoTo /D (section*.113) >>
+>> endobj
+6665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.473 220.055 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.114) >>
+>> endobj
+6666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 197.407 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.115) >>
+>> endobj
+6667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.305 190.422 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.116) >>
+>> endobj
+6668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 182.702 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.117) >>
+>> endobj
+6669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.087 187.679 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section*.118) >>
+>> endobj
+6670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 194.681 187.157]
+/Subtype /Link
+/A << /S /GoTo /D (section*.119) >>
+>> endobj
+6671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 207.09 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.120) >>
+>> endobj
+6672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 213.797 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.121) >>
+>> endobj
+6673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 188.189 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.122) >>
+>> endobj
+6674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 188.683 138.722]
+/Subtype /Link
+/A << /S /GoTo /D (section*.123) >>
+>> endobj
+6675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 153.06 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.124) >>
+>> endobj
+6676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 181.931 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.125) >>
+>> endobj
+6677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.218 187.678 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.126) >>
+>> endobj
+6678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.109 187.427 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.127) >>
+>> endobj
+6679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 205.234 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.128) >>
+>> endobj
+6681 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6744 0 obj <<
+/Length 2181
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ksã6¾ûWð´%„Å£rK摪ÔîlmFµ—Ù8íQE¯%g“ŸEڢʔ ÇÉ—[¢û£º?ô Mˆg7Ͼ¿únzõ÷÷Ve–9cT6½Î3kL†N2#²é<û4zó¯Ów¦Ç?MÈ€“ÒÑ_·Þ»z7½úß• ·x&Yˬ„l¶ºúôÏæôÞgÊÙìÿå•« ´bý¼Ì>^ýûŠW7·—swS ü±º]з+€3Ãu†F0^ßðb½-îÆà£]û¾„Q è†ü_Hsê¾Hîá¦ÐÆ0!Túvw€D¤+uHtÌÚy¾ËKÌZoÙ§‰ÒrÄÆ­Íþ?å·¨Â^S4±F¤­´v̲l¢“ÙDH&¸Û+y¹ÉçÃj˸u‚cBËAdâ ÑK¢×HÒtñùn,ø('2 =ZÛc;;¡“»ž²³äL T–¶{¥ß«Í˜ÔúËXêQZÌäqÐf¨qòZCV³bÊ I2ÌìáóûÝ&
+‹Ž4Ýl.LP˜3T~Òfßq(Ü$Š³%„joÙRÔ«xsý_ÎU8©D`šª…ÀTwH®›È„+׋PX ¤—Ë°”¬X'›°‡¹,9‘ßZ>„»zø‰0Ë‘…sCX~¦„n–“ ÕŸãÃakŽ?â.Ö‹Ý ~‡,ù-!ƒìnÀKAê‰ò‰¥p ›Ÿx³ž-§nEZ;Ç1VÎœ ‹û ûÏbõÙ÷ŽÊ˜é3Ù§£§¿àk®{zßLÑšxPlåógUºL+–LÚA°L‰½$n«…°]ܬóeÈߪ°ä¹œQMØUþk«3.ufž¿P…%mûÓ |'GÅ “rÌ!ô¤ÓpØšN‡°ë|Õ.² ŠÄ¤HLZ…˜Di¯ ô@ZJcô 
+Z0Å)=Ȭ©º"×T…ö",Ckb€¢`€º ä‘à†§öðsˆÄ™ÅfæpŠGB3§M ‘$ÔøÈ£–Iµ5—Ѐýc3ENÖ1ýÝWÌÆ07I2Pl±ÊoŠ€½1ú• ­©øCå"ÚKÒÊwXþHkûY&W¼ŸÉŸvå3*†ÅI(Qï(ÏÆ’~ní•X}A›j¯g÷KÝ ÓRÄ0<IR²ÚÕ¿-m¨C…–Iúû¸–3§twYƒV©š'B=ŸPTþ)ÕŸOZ3Q I’¢j>Ü~ñã·íb,U­¢<c€[C‰‰i‚wÆ- 2mÿÅ%Ã8ˆþA Qb üÞq=1p· Ö©ŽIt1@©NuÆ5A×¾u~_6^³™â^ç`Ó 2)2­þž‰®.FÓCS•ìœy$S±m•/Š»”Ó¼VN#ã6Fª…eÖâ©A##éJÓ
+è£ÿUÀè~¶«gr¯Ë‰é»"0 …N\P|)LJ”èÒ¾”Ì h+Ÿ‰ý\ÖÛb—/–õxóÛb;«&¡oC#Y‚×ݧ |Nåp^«[á¼5'™ì;7£ÀœKj ŽÁ=Ì~4¶õäåyàh=Éo÷8
+ÓjQ+”ÿ"ÊŸh`ètËŨ},ýÏý¨tÜpj\žážUUŠªÃÜ¿ìéuJ]§¨:X­¨Z¹“|>omi.RTàØeŠªBå7£ê£‹ªB½Ý…Ôp@Õ£{ò4½bªÓöRc*©HžV!…Õ«ö@×)¬Æ «Åê·Ð*8É“¿Lõ:ÿ¥
+s)ÈH<2së±:T2¦5 ¤l‚.‹õÍîK{{K%Ã $9Èh!öÕ'½…sÒÛ£·‚®7<Æð¾—â”/ðGêø5<Ò©c°Ùá Ðv10ÿ¦
+†ŸìwÙÁ^_¡ïªÒÈNŸ {üMU¥©´Î™ÊWÂu&ÙÜÈÌŸKZ›ê—Å1òï)€hG
+endstream
+endobj
+6743 0 obj <<
+/Type /Page
+/Contents 6744 0 R
+/Resources 6742 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6680 0 R 6684 0 R 6685 0 R 6686 0 R 6687 0 R 6688 0 R 6689 0 R 6690 0 R 6691 0 R 6692 0 R 6693 0 R 6694 0 R 6695 0 R 6696 0 R 6697 0 R 6698 0 R 6699 0 R 6700 0 R 6701 0 R 6702 0 R 6703 0 R 6704 0 R 6705 0 R 6706 0 R 6707 0 R 6708 0 R 6709 0 R 6710 0 R 6711 0 R 6712 0 R 6713 0 R 6714 0 R 6715 0 R 6716 0 R 6717 0 R 6718 0 R 6719 0 R 6720 0 R 6721 0 R 6722 0 R 6723 0 R 6724 0 R 6725 0 R 6726 0 R 6727 0 R 6728 0 R 6729 0 R 6730 0 R 6731 0 R 6732 0 R 6733 0 R 6734 0 R 6735 0 R 6736 0 R 6737 0 R 6738 0 R 6739 0 R 6740 0 R ]
+>> endobj
+6680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.195 198.249 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.129) >>
+>> endobj
+6684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 193.201 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.130) >>
+>> endobj
+6685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 735.699 212.488 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.131) >>
+>> endobj
+6686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.869 205.503 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.132) >>
+>> endobj
+6687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 187.15 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.133) >>
+>> endobj
+6688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 699.373 322.727 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.6) >>
+>> endobj
+6689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.494 217.473 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section*.134) >>
+>> endobj
+6690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.385 240.14 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.135) >>
+>> endobj
+6691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 663.047 258.7 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.11.7) >>
+>> endobj
+6692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 192.897 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.136) >>
+>> endobj
+6693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.983 202.867 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.137) >>
+>> endobj
+6694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 199.379 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.138) >>
+>> endobj
+6695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 173.727 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section*.139) >>
+>> endobj
+6696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.657 181.196 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.140) >>
+>> endobj
+6697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 173.458 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.141) >>
+>> endobj
+6698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 168.06 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.142) >>
+>> endobj
+6699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.456 192.888 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.143) >>
+>> endobj
+6700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.298 208.803 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.144) >>
+>> endobj
+6701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.239 203.271 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.145) >>
+>> endobj
+6702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.13 183.689 538.309]
+/Subtype /Link
+/A << /S /GoTo /D (section*.146) >>
+>> endobj
+6703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 181.752 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.147) >>
+>> endobj
+6704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.913 177.95 514.092]
+/Subtype /Link
+/A << /S /GoTo /D (section*.148) >>
+>> endobj
+6705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.755 174.722 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.149) >>
+>> endobj
+6706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.57 194.708 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.150) >>
+>> endobj
+6707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.461 196.385 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.151) >>
+>> endobj
+6708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 455.429 246.634 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.12) >>
+>> endobj
+6709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 443.37 221.956 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.12.1) >>
+>> endobj
+6710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 432.982 258.7 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.12.2) >>
+>> endobj
+6711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 158.547 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.153) >>
+>> endobj
+6712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 164.026 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (section*.154) >>
+>> endobj
+6713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 394.886 240.026 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.13) >>
+>> endobj
+6714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 382.826 221.956 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.13.1) >>
+>> endobj
+6715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 372.439 258.7 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.13.2) >>
+>> endobj
+6716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 159.542 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.156) >>
+>> endobj
+6717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 164.026 356.679]
+/Subtype /Link
+/A << /S /GoTo /D (section*.157) >>
+>> endobj
+6718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 334.342 237.659 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.14) >>
+>> endobj
+6719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 322.283 221.956 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.14.1) >>
+>> endobj
+6720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 311.896 258.7 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.14.2) >>
+>> endobj
+6721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 177.484 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.159) >>
+>> endobj
+6722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 182.46 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.160) >>
+>> endobj
+6723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 275.57 203.889 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.161) >>
+>> endobj
+6724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 263.461 212.097 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.15) >>
+>> endobj
+6725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 249.631 221.956 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.15.1) >>
+>> endobj
+6726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.244 303.315 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.15.2) >>
+>> endobj
+6727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 175.484 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.165) >>
+>> endobj
+6728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 215.026 274.148 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.15.3) >>
+>> endobj
+6729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 202.917 179.044 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.166) >>
+>> endobj
+6730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.087 164.026 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.167) >>
+>> endobj
+6731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 178.7 177.224 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.168) >>
+>> endobj
+6732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 181.707 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.169) >>
+>> endobj
+6733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 211.842 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.170) >>
+>> endobj
+6734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 258.7 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.15.4) >>
+>> endobj
+6735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 210.076 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.171) >>
+>> endobj
+6736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 118.157 220.453 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.16) >>
+>> endobj
+6737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 104.326 221.956 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.16.1) >>
+>> endobj
+6738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 93.939 258.7 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.16.2) >>
+>> endobj
+6739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.831 168.643 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.174) >>
+>> endobj
+6740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 199.379 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.175) >>
+>> endobj
+6742 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6806 0 obj <<
+/Length 2273
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ks¹¾ëWL.)²¶„h<\åKüHy+ÙTÖª\œ=ÐÔÈÅZ‘tHj7›_ŸÆÌš'94 ­-ád™¤úvOýuñìSƳ¿^üåêâû·Vf–9­evu“ά֙qÀ´È®®³“WÿøñêÍWï§?_ý)®€£ßî¼wñæêâ?‚Þâ™8²–YPÙ|yñágž]Ó{?dœIg³ßŠO.3…’¡’ôómöþ⟼º¸ÒÎæSeð§êrÖ.×"³„¥ãûËÕL˜é¥|òön5ß-Ö«×ùv¾™^
+œ,>ïÖô;y¿ó/©ÉÝ|W¾ðS~3•|’oòÕ</¾ÏþB²—ä„M/±üGÇüŸþjL
+ïDbõíÛîÏ
+CÛ§‚+ø–œó¦O8œW¾¶5_Céë¿çËyu/¿žífÕOëùÝ2_íf}÷H>•‚YâŒÆM<_¯¶ëÛ¼ËbÂ
+-CçEgF˜¼¢Ò¶´„¢]ßÜló]·ÞXL Î4àLÝ̴Ū'ÆÊ2AѤ
+&¹(,©ûM/‡%¡J)}â©,N!Òãc®ð-0û˜“%©õ°˜6)Ú‘£­‘4u—:E9Ãýeù¹'òà—2I<j§0¨KüRZ¬Ú¨™ß «Åî÷¾™T1Ñ2.›ÀËÙö—¾ÃP$j­iéÆ6Aw³Í§¼g»(pr²‚°ÀÉÉZ°'ö6õŽâî©äÓ‰ÂGß•ô×IŒ4c ­Ñ9öI¾NÛ‘FùÔ³Vz ¹z¢LZ$ éMÜ™û_
+¬¤æ3°Žq:*
+CÊéS¬ì#‹1P‰œÀ&ìqV¦6OÇ€áÏo¶ XYù’%c€*`†Ë&h­ÑkІ§É%§t‘?Åhìð¶#Œ(ThM aD–¤µ£…Q8ð^Õ¯=3®§‡ g+Ó6´&MùxzQ¨“ÃÖWÊAIJÐÅÀTš” k‚†(#«ð[©+$‰ S²ÛtȤ‰Mɤ‰‚5‘¡‰ü£ù´ˆ ‰Èã1„ì8e—‹í(#Á5±S²chb@ƒíº=DÊþé‡1\íIÙ‰–¯û…ºçª‹´ ;ßtøDÐE¾Â Œ10N0‡r¬.Š
+“Î}5 pR…)AuBv39©° ñ øø%$•TØ—8òÜÉ”_—·a2å éý†êAú7FÄ€ôOlÓ¢‰yŠþˆMÅšiÞ‚¢ÃÙ ’SB¸&èP°$ùt Pª
+endstream
+endobj
+6805 0 obj <<
+/Type /Page
+/Contents 6806 0 R
+/Resources 6804 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6741 0 R 6746 0 R 6747 0 R 6748 0 R 6749 0 R 6750 0 R 6751 0 R 6752 0 R 6753 0 R 6754 0 R 6755 0 R 6756 0 R 6757 0 R 6758 0 R 6759 0 R 6760 0 R 6761 0 R 6762 0 R 6763 0 R 6764 0 R 6765 0 R 6766 0 R 6767 0 R 6768 0 R 6769 0 R 6770 0 R 6771 0 R 6772 0 R 6773 0 R 6774 0 R 6775 0 R 6776 0 R 6777 0 R 6778 0 R 6779 0 R 6780 0 R 6781 0 R 6782 0 R 6783 0 R 6784 0 R 6785 0 R 6786 0 R 6787 0 R 6788 0 R 6789 0 R 6790 0 R 6791 0 R 6792 0 R 6793 0 R 6794 0 R 6795 0 R 6796 0 R 6797 0 R 6798 0 R 6799 0 R 6800 0 R 6801 0 R 6802 0 R ]
+>> endobj
+6741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 758.195 254.722 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.17) >>
+>> endobj
+6746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 746.087 221.956 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.17.1) >>
+>> endobj
+6747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 735.699 258.7 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.17.2) >>
+>> endobj
+6748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 207.449 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.177) >>
+>> endobj
+6749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 159.049 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.178) >>
+>> endobj
+6750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 184.208 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.179) >>
+>> endobj
+6751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 181.214 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.180) >>
+>> endobj
+6752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 202.051 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.181) >>
+>> endobj
+6753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.326 216.693 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.182) >>
+>> endobj
+6754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 186.701 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.183) >>
+>> endobj
+6755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 196.474 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.184) >>
+>> endobj
+6756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 178.892 635.178]
+/Subtype /Link
+/A << /S /GoTo /D (section*.185) >>
+>> endobj
+6757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 612.766 204.269 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.18) >>
+>> endobj
+6758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 600.782 221.956 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.18.1) >>
+>> endobj
+6759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 590.395 258.7 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.18.2) >>
+>> endobj
+6760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 159.049 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.187) >>
+>> endobj
+6761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 157.409 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.188) >>
+>> endobj
+6762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 552.298 233.678 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.19) >>
+>> endobj
+6763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 540.239 221.956 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.19.1) >>
+>> endobj
+6764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 529.852 258.7 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.19.2) >>
+>> endobj
+6765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 158.547 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.190) >>
+>> endobj
+6766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 505.635 238.789 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.20) >>
+>> endobj
+6767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 491.804 221.956 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.20.1) >>
+>> endobj
+6768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 303.315 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.20.2) >>
+>> endobj
+6769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 169.916 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.194) >>
+>> endobj
+6770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.2 169.916 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.195) >>
+>> endobj
+6771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 274.148 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.20.3) >>
+>> endobj
+6772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 181.034 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.196) >>
+>> endobj
+6773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.152 182.63 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.197) >>
+>> endobj
+6774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 407.044 179.883 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (section*.198) >>
+>> endobj
+6775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.935 185.374 405.113]
+/Subtype /Link
+/A << /S /GoTo /D (section*.199) >>
+>> endobj
+6776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.826 185.374 393.005]
+/Subtype /Link
+/A << /S /GoTo /D (section*.200) >>
+>> endobj
+6777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 372.439 258.7 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.20.4) >>
+>> endobj
+6778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.56 172.499 368.787]
+/Subtype /Link
+/A << /S /GoTo /D (section*.201) >>
+>> endobj
+6779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 172.239 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.202) >>
+>> endobj
+6780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 334.266 281.952 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.21) >>
+>> endobj
+6781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 322.283 221.956 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.21.1) >>
+>> endobj
+6782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 311.896 258.7 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.21.2) >>
+>> endobj
+6783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 163.021 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.204) >>
+>> endobj
+6784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 285.831 346.563 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.22) >>
+>> endobj
+6785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 273.848 221.956 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.22.1) >>
+>> endobj
+6786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 263.461 303.315 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.22.2) >>
+>> endobj
+6787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 266.626 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.206) >>
+>> endobj
+6788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 237.396 350.777 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.23) >>
+>> endobj
+6789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 225.413 221.956 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.23.1) >>
+>> endobj
+6790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 215.026 303.315 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.23.2) >>
+>> endobj
+6791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 270.84 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.208) >>
+>> endobj
+6792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 188.962 354.776 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.24) >>
+>> endobj
+6793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 176.979 221.956 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.24.1) >>
+>> endobj
+6794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 166.591 303.315 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.24.2) >>
+>> endobj
+6795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 274.839 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section*.210) >>
+>> endobj
+6796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 140.527 350.293 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.25) >>
+>> endobj
+6797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 128.544 221.956 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.25.1) >>
+>> endobj
+6798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 118.157 303.315 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.25.2) >>
+>> endobj
+6799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 270.356 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.212) >>
+>> endobj
+6800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 92.092 309.461 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.26) >>
+>> endobj
+6801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 80.109 221.956 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.26.1) >>
+>> endobj
+6802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 69.722 303.315 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.26.2) >>
+>> endobj
+6804 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6867 0 obj <<
+/Length 2569
+/Filter /FlateDecode
+>>
+stream
+xÚíKwÛ6€÷þ\Í‘Æ
+®å8æÊN$㯀‹
+¥°ÒTÎ*!Û
+¸þ8¬2^H_¿ìTuèÂî.#D+…s)ðýj3tšÞ¨ˆÎ
+´*E.ßý"%ܬ7ÿ’A‚Š ÒPt{äÍò®½Þö“ªÞž)©a!NÏŒ1Ûöð¿ìcÿàK-šZ¡^ lbÒoµÕ™RA¸ èJ†m­
+8˜Î'!eþv
+rqu{|ج¯W#}FQoEËPPÔ]µMkÐtš3p~ñýÍfu÷îTËÅòbµý¯ŸVõ¿Ww«›‹U¿kyx}‰zNöé„£yÛ ü§^ Ôé™svñfµY®¯V—Û˜¼YÝ_ÜQ©f±þ¸YßÞ 3Â+Ê1!WûB.‡GÀ6ÖßÞÞÜo¶á}¸ØÜÞmcþ·]è?½vªíËon/®W7›åØç¡©*_k µÞ÷ò÷¤eÐ=‹fPA–
+ÊÐŒrdë]fVêDa$2Ô
+³„y¿YnMý~ý¿SJ¥£¶4"r„”è{á¾!Š´Dj**Ø”Xâ<A¾p½Qtï…†nö›£ùM˜ýæ(~Cé&†9•X3.ÇoÊ‘­ßt™YYšîî 2Ô NGb¯cY:>,2DÊÒÁ˜”8®T”Èg{êLßÐm)…²—`´Ì±'©…GŽé›X’ÅìépkO]ð´=•3[{ê2cOÅ5ØÙS·E.3þ
+++‚4ä¨݈ç9T/ÞÒ»­zåàVõºàIÕ+GnU¯ ÌQ½bn«z]p‰
+ÕáDóÌÍþiÔ&àèãQ;›MYÄ1ßlìl6ŸÈÇ®@gE(Þ©Af r
+3̆Ù˜MÂÌ7›ò
+´f“T`Ü.PÂ|M4œ¸‘tÙტœwÁ¢ð’cþêÕ·&W=Àz$à)÷`@ÖîÑ¿ÒLù(Ç·ò‘T`óûÝíÃûß?>lÆ÷¡òèxT°ô=tÉÒ[e¿°‡P8¹÷èÓQ“6ûÌûŒïÄzö™RŸÉ˜©‰÷ýèfjbAp`7Bã3åÈÖgºÌGøLqv>Ó­Àtb¦ÜÑD©M‰ÙÛ^¼÷-é ö«œ”ÁÉ-Aq¿W?sç×/iŽCfbAÊe‹Q1¶õ¢vR‹Š[+J¯2WŠJá;'êà71í›ÅÍ’zàÍåžî§-=ö>H?â¢ÙÚ~1}ò°)êSÃÙóqÃÇ›å™>Š)O)±ÜŠ”£|9³< ÈÆŠf¾•W µ¢¤Y¹ÙäàYœœò÷¨‘zjäÜðyUÎñÅÊ:´ap£X’Ó6WŽÀ%à)=b@Ö~”óN߃ øqIðºWƒñ³‹¥D"Ä7`J,:ïϪ=àœ)¥EÞ‡ÌGFÜä»Ò|tñgò±OÄâ÷òX\‰
+B•£JåÄV•ºÈ¼Sþ¤†
+Äm¦!­Àx†vô @Éãð.p\Ü3Ÿ‘ñÏÚÌĦ,',ê~rÁœc‹ã‚Og¢r´TÙÎTŠm©‹4¦RàÖ—Ü#|©¾³¥.¿È]¼ÿÆú¬b0aØôg‡yb‡ñXÏSê0ó=^ å¦{<ô› …)6“ó ¦˜ß
+L—¿Ç'4¾Ö%<¹Ýr–ð`Î)Å.~_¹aù.Ëú[ìs¿Ê²»û&ËO؇›ñnBÍ
+=Ò›ø˜¦Kœ<xI‘fs\jt
+^éžó)ãºM*ªœ¨}ºÈ=§SKMÏ2 M¨¿È¶‹,ñ&%•|öEA&©U¸æ:©;Lob¥Û¬ú¢$rÆT!.Ú³uä‚!ÄC†„m#÷çz½î³ÿá!>S
+endstream
+endobj
+6866 0 obj <<
+/Type /Page
+/Contents 6867 0 R
+/Resources 6865 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6803 0 R 6807 0 R 6808 0 R 6809 0 R 6810 0 R 6811 0 R 6812 0 R 6813 0 R 6814 0 R 6815 0 R 6816 0 R 6817 0 R 6818 0 R 6819 0 R 6820 0 R 6821 0 R 6822 0 R 6823 0 R 6824 0 R 6825 0 R 6826 0 R 6827 0 R 6828 0 R 6829 0 R 6830 0 R 6831 0 R 6832 0 R 6833 0 R 6834 0 R 6835 0 R 6836 0 R 6837 0 R 6838 0 R 6839 0 R 6840 0 R 6841 0 R 6842 0 R 6843 0 R 6844 0 R 6845 0 R 6846 0 R 6847 0 R 6848 0 R 6849 0 R 6850 0 R 6851 0 R 6852 0 R 6853 0 R 6854 0 R 6855 0 R 6856 0 R 6857 0 R 6858 0 R 6859 0 R 6860 0 R 6861 0 R 6862 0 R 6863 0 R ]
+>> endobj
+6803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 229.524 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (section*.214) >>
+>> endobj
+6807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 745.961 321.054 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.27) >>
+>> endobj
+6808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 733.978 221.956 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.27.1) >>
+>> endobj
+6809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 723.591 303.315 732.339]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.27.2) >>
+>> endobj
+6810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 241.117 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.216) >>
+>> endobj
+6811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 697.526 308.133 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.28) >>
+>> endobj
+6812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 685.543 221.956 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.28.1) >>
+>> endobj
+6813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.156 303.315 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.28.2) >>
+>> endobj
+6814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 228.197 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.218) >>
+>> endobj
+6815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 649.092 327.815 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.29) >>
+>> endobj
+6816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 637.108 221.956 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.29.1) >>
+>> endobj
+6817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.721 303.315 635.47]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.29.2) >>
+>> endobj
+6818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.766 247.878 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.220) >>
+>> endobj
+6819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 600.657 320.104 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.30) >>
+>> endobj
+6820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 588.674 221.956 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.30.1) >>
+>> endobj
+6821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 578.287 303.315 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.30.2) >>
+>> endobj
+6822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.331 240.167 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.222) >>
+>> endobj
+6823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 552.222 354.274 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.31) >>
+>> endobj
+6824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 540.239 221.956 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.31.1) >>
+>> endobj
+6825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 529.852 303.315 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.31.2) >>
+>> endobj
+6826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 515.896 274.337 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.224) >>
+>> endobj
+6827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 503.787 308.958 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.32) >>
+>> endobj
+6828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 491.804 221.956 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.32.1) >>
+>> endobj
+6829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 303.315 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.32.2) >>
+>> endobj
+6830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.461 229.022 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (section*.226) >>
+>> endobj
+6831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 455.353 320.552 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.33) >>
+>> endobj
+6832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 443.37 221.956 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.33.1) >>
+>> endobj
+6833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 432.982 303.315 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.33.2) >>
+>> endobj
+6834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 240.615 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.228) >>
+>> endobj
+6835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 406.918 314.177 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.34) >>
+>> endobj
+6836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 394.935 221.956 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.34.1) >>
+>> endobj
+6837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 384.548 303.315 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.34.2) >>
+>> endobj
+6838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 234.24 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (section*.230) >>
+>> endobj
+6839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 358.483 332.414 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.35) >>
+>> endobj
+6840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 346.5 221.956 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.35.1) >>
+>> endobj
+6841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 336.113 303.315 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.35.2) >>
+>> endobj
+6842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 252.477 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.232) >>
+>> endobj
+6843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 310.049 307.631 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.36) >>
+>> endobj
+6844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 298.065 221.956 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.36.1) >>
+>> endobj
+6845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 287.678 303.315 296.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.36.2) >>
+>> endobj
+6846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 227.694 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.234) >>
+>> endobj
+6847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 261.614 353.727 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.37) >>
+>> endobj
+6848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 249.631 221.956 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.37.1) >>
+>> endobj
+6849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.244 303.315 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.37.2) >>
+>> endobj
+6850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 273.79 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.236) >>
+>> endobj
+6851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 213.179 354.444 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.38) >>
+>> endobj
+6852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 201.196 221.956 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.38.1) >>
+>> endobj
+6853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 190.809 303.315 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.38.2) >>
+>> endobj
+6854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 274.507 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.238) >>
+>> endobj
+6855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 164.744 327.313 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.39) >>
+>> endobj
+6856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 152.761 221.956 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.39.1) >>
+>> endobj
+6857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 303.315 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.39.2) >>
+>> endobj
+6858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 247.376 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.240) >>
+>> endobj
+6859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 116.31 319.602 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.40) >>
+>> endobj
+6860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 104.326 221.956 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.40.1) >>
+>> endobj
+6861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 93.939 303.315 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.40.2) >>
+>> endobj
+6862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 239.665 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.242) >>
+>> endobj
+6863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 67.875 364.244 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.41) >>
+>> endobj
+6865 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6928 0 obj <<
+/Length 2256
+/Filter /FlateDecode
+>>
+stream
+xÚí]YsÛF~ׯÀÓùÀÎô\=óº>R•*gkmU^œ<À¤°ÌC!©l¼¿~—L
+R!8‡•4])Í«û®'¡qÀ E ØMŽxû¬t£€³XDLÈ‚Óºäø°Þeû
+KJU¯÷x‘y<dæÌY´ùl•kJè1TΔP˜ã5º"õþ,z¿ÔÕ'Л1ô®çêöd§Ï™¨ògQy¸§= °A ª  G‘SrYè„KýûyTo »™ê_«jR#[½M×wÙesddÐÈÓ©)Nè g4†¥°îüùIg4ž"ÈÐáö#P´ä`­‹íÕ3Û«çZn”õ3ʺo FÅ1˜qb¾a -Ö»Îp§þî§:Ÿ7ê®êáq§Òß{Kñ‹ª`™­ïö¿w€eÿ³Š¿ÂžM^]–G’eF·Lï»@„Q Ïëýíƒñèÿ“Þœ}BÂÉMàÄÇ
+3˜î¬BM4 ù‰²–ôÀ&šXPÒõ [8ÆðE¿¹°kÖïE(X1ö|Mkfà([¥i¦¤ì鶸Lj•#ëÜо‹œºì”®¡ñ©@
+“(E ‡Í³IΗ”d=϶\|(áùÍææa™Ñ™5VDmwݹÉH¥Ç.í jÄù7étÝ¥ÃO”i(ç»)a"}X†F°-ù„ ›Û Ú1¾z:¸Ýäéx­G`ê-X¥›\×SÆè‡Â~:³qª*|ýæÃQ„ô—ÛtžÿP7 Yì2‘çÐ\+ j²ýt¸¢dœÌ»Ü†Ü MZ]¬dÁ#SR"¬QT©Úa^¤0&Ê%ÊGTíwµïäL¦)XÌ_­óq¢?™HÐßœ±6óØ)NB©,
+#â”ÁѸß3b`bòúÅ’WG Ž/ZÑŽŽúx—ëÌq¯èx͈á9€J›ÐVçþW¡
+ão…YÎö4Ö›éÎГU1”>Ù7fʃ•2
+´ì“É7v8iGØ'“S²’úõ¦IÇá’QKÖ3˼}Dz\ßZ;[GÐ7S2èNfSXÀæ|9/#ïš|c]+ÆZ0v”ÿ—£µ4¦É÷ã¢;Ú‰‚(–W— U>¬aZ3ÁS}†Á©rñ`Å •†ƒ •”t½ ÝMÊÁ4_E ]ƒi¿Ãp —z®²8k0íõ‰Œ~ŒÿU¢å¨Áv¹Øí»[€DôŽ±ÜpÕ*Û+Yz°Û zº½‹r“a:ùèSµÏ;˘ÿÕd·úÛÒÇל¶i*Žßºçq‹ÆˆÝ&W÷ò~À§p˜ÑV&Þ€tj`Ã)où<léþŒQ`Ì…GË… ŒníÒ|”zçk& C+Çe6l$1! žê•÷Yß^#~ºá,ód‚ËãC–¡
+æl»Þ+Lúõ+R }i×Ç÷$·¿²©Ð—ƒŸOì¤ç“Çk[kmñW›óÿ
+endstream
+endobj
+6927 0 obj <<
+/Type /Page
+/Contents 6928 0 R
+/Resources 6926 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6864 0 R 6868 0 R 6869 0 R 6870 0 R 6871 0 R 6872 0 R 6873 0 R 6874 0 R 6875 0 R 6876 0 R 6877 0 R 6878 0 R 6879 0 R 6880 0 R 6881 0 R 6882 0 R 6883 0 R 6884 0 R 6885 0 R 6886 0 R 6887 0 R 6888 0 R 6889 0 R 6890 0 R 6891 0 R 6892 0 R 6893 0 R 6894 0 R 6895 0 R 6896 0 R 6897 0 R 6898 0 R 6899 0 R 6900 0 R 6901 0 R 6902 0 R 6903 0 R 6904 0 R 6905 0 R 6906 0 R 6907 0 R 6908 0 R 6909 0 R 6910 0 R 6911 0 R 6912 0 R 6913 0 R 6914 0 R 6915 0 R 6916 0 R 6917 0 R 6918 0 R 6919 0 R 6920 0 R 6921 0 R 6922 0 R 6923 0 R 6924 0 R ]
+>> endobj
+6864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 758.195 221.956 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.41.1) >>
+>> endobj
+6868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 747.808 303.315 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.41.2) >>
+>> endobj
+6869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 284.307 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.244) >>
+>> endobj
+6870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 723.591 220.059 732.339]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.42) >>
+>> endobj
+6871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 709.761 221.956 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.42.1) >>
+>> endobj
+6872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 699.373 303.315 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.42.2) >>
+>> endobj
+6873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 183.446 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.247) >>
+>> endobj
+6874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.156 274.148 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.42.3) >>
+>> endobj
+6875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 198.806 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.248) >>
+>> endobj
+6876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 200.796 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.249) >>
+>> endobj
+6877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.983 184.298 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.250) >>
+>> endobj
+6878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 178.766 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.251) >>
+>> endobj
+6879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 190.951 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.252) >>
+>> endobj
+6880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.782 204.14 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section*.253) >>
+>> endobj
+6881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 181.716 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.254) >>
+>> endobj
+6882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.565 194.905 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section*.255) >>
+>> endobj
+6883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 258.7 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.42.4) >>
+>> endobj
+6884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.348 177.771 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (section*.256) >>
+>> endobj
+6885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 183.115 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (section*.257) >>
+>> endobj
+6886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 185.105 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section*.258) >>
+>> endobj
+6887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 168.607 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.259) >>
+>> endobj
+6888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 503.787 224.551 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.43) >>
+>> endobj
+6889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 491.804 221.956 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.43.1) >>
+>> endobj
+6890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 303.315 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.43.2) >>
+>> endobj
+6891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.461 187.938 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.262) >>
+>> endobj
+6892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 187.938 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.263) >>
+>> endobj
+6893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 274.148 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.43.3) >>
+>> endobj
+6894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 174.991 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.264) >>
+>> endobj
+6895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 156.557 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.265) >>
+>> endobj
+6896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 166.025 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.266) >>
+>> endobj
+6897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.935 175.26 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.267) >>
+>> endobj
+6898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.548 159.399 393.005]
+/Subtype /Link
+/A << /S /GoTo /D (section*.268) >>
+>> endobj
+6899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 372.439 258.7 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.43.4) >>
+>> endobj
+6900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 176.722 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.269) >>
+>> endobj
+6901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 170.095 356.679]
+/Subtype /Link
+/A << /S /GoTo /D (section*.270) >>
+>> endobj
+6902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 336.113 211.335 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.44) >>
+>> endobj
+6903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 322.283 221.956 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.44.1) >>
+>> endobj
+6904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 311.896 258.7 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.44.2) >>
+>> endobj
+6905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 227.936 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.273) >>
+>> endobj
+6906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 214.577 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.274) >>
+>> endobj
+6907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 181.698 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.275) >>
+>> endobj
+6908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 263.461 221.888 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.45) >>
+>> endobj
+6909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 249.631 221.956 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.45.1) >>
+>> endobj
+6910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.244 303.315 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.45.2) >>
+>> endobj
+6911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 184.137 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.281) >>
+>> endobj
+6912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.026 191.878 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.282) >>
+>> endobj
+6913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 202.917 274.148 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.45.3) >>
+>> endobj
+6914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 189.517 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.283) >>
+>> endobj
+6915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.929 205.324 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.284) >>
+>> endobj
+6916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 233.056 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.285) >>
+>> endobj
+6917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 174.731 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.286) >>
+>> endobj
+6918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 206.696 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.287) >>
+>> endobj
+6919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.544 228.34 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.288) >>
+>> endobj
+6920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.435 178.712 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section*.289) >>
+>> endobj
+6921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 106.048 258.7 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.45.4) >>
+>> endobj
+6922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.169 176.587 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.290) >>
+>> endobj
+6923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.109 195.389 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.291) >>
+>> endobj
+6924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 195.919 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section*.292) >>
+>> endobj
+6926 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+6989 0 obj <<
+/Length 1892
+/Filter /FlateDecode
+>>
+stream
+xÚí]MsÛ6½ëWðÔ‘Bð¹
+@bÜ™‡ò*³ÄlŸúÆÐú£ô”kÂM³ÀÖ¡è駳¢{Ñ£CÑs
+• ËUô
+½Ua @,‡È:
+„óíbº“Íš’¢¼:'7¥Ÿ˜®šà¾®¡£¥ õ°r0q(Tn»h‹„„‚Ç ÁØ5 vâ"C÷Á»Òìé> Q"™ðÐ}È,q&ök›0*Œ¡ÇHçZ;&ï@¼ùšÅc91|‰¯²7ó䔾€ÆO‚&~ˆ²- _&
+gB? ŸòÉîý
+¸o¼Ëi³y
+å#ÒhI‹âˆš›$um¦’x¥ŸÙsp–W}® @RÚÀªÞ¬â@„ÑÝõC©¾•¬BKÀ‹Vúír㤕!Ú€§š©UÕéÇUêÚŒh$~Íúpj4e«NÓÊBAÅ3§Ù2…öà™£V0©«ž×-ëwÊ°0,Ï÷X¢$ï>,¤è{øS9,ÐÒýñK†E§å°xè´}›.Ž .…¿U^ˆªß½#p6`<sŠ)'¯:^µ¯¾>¥-‡„!†©îùf¦@}œ´”Y’lÏ2¯2D0áÃcvl.Vy“! é‘„äQꬶ ÕÙ±ÐNöšïØŸ]¹ÏÂ5ú{Å.T=f‡2;°… I'uöð‹c(’1ëy2XÉ0´t2Ø~†õ÷Yrì¡ÏÛxqÝ”+nB¿ög•U„Ïþ£!jdNõ÷XPê¡Ç™cÓGЬ]F¦}ôõ 'V«²dtïum½Gj뎳f}€+â\üCŠ"ÎÙb¿ë<1K´ôáY%¯8:¶(¸Ô™K9j®ÿ2¢41ü˜ÿ1²‹˜RŽ¨ã¨ùY I*eľÔÿ Y&î
+endstream
+endobj
+6988 0 obj <<
+/Type /Page
+/Contents 6989 0 R
+/Resources 6987 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6925 0 R 6929 0 R 6930 0 R 6931 0 R 6932 0 R 6933 0 R 6934 0 R 6935 0 R 6936 0 R 6937 0 R 6938 0 R 6939 0 R 6940 0 R 6941 0 R 6942 0 R 6943 0 R 6944 0 R 6945 0 R 6946 0 R 6947 0 R 6948 0 R 6949 0 R 6950 0 R 6951 0 R 6952 0 R 6953 0 R 6954 0 R 6955 0 R 6956 0 R 6957 0 R 6958 0 R 6959 0 R 6960 0 R 6961 0 R 6962 0 R 6963 0 R 6964 0 R 6965 0 R 6966 0 R 6967 0 R 6968 0 R 6969 0 R 6970 0 R 6971 0 R 6972 0 R 6973 0 R 6974 0 R 6975 0 R 6976 0 R 6977 0 R 6978 0 R 6979 0 R 6980 0 R 6981 0 R 6982 0 R 6983 0 R 6984 0 R 6985 0 R ]
+>> endobj
+6925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.195 163.523 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (section*.293) >>
+>> endobj
+6929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 747.808 235.911 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.46) >>
+>> endobj
+6930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 733.978 221.956 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.46.1) >>
+>> endobj
+6931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 723.591 303.315 732.339]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.46.2) >>
+>> endobj
+6932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 198.16 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.296) >>
+>> endobj
+6933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 205.901 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.297) >>
+>> endobj
+6934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 687.265 258.7 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.46.3) >>
+>> endobj
+6935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 176.354 683.613]
+/Subtype /Link
+/A << /S /GoTo /D (section*.298) >>
+>> endobj
+6936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 663.047 209.129 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.47) >>
+>> endobj
+6937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 649.217 221.956 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.47.1) >>
+>> endobj
+6938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 638.83 303.315 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.47.2) >>
+>> endobj
+6939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 171.378 635.178]
+/Subtype /Link
+/A << /S /GoTo /D (section*.301) >>
+>> endobj
+6940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 179.119 623.07]
+/Subtype /Link
+/A << /S /GoTo /D (section*.302) >>
+>> endobj
+6941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 602.504 274.148 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.47.3) >>
+>> endobj
+6942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 157.364 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.303) >>
+>> endobj
+6943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 167.334 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.304) >>
+>> endobj
+6944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 258.7 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.47.4) >>
+>> endobj
+6945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 168.06 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.305) >>
+>> endobj
+6946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 540.19 217.279 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.48) >>
+>> endobj
+6947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 528.13 221.956 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.48.1) >>
+>> endobj
+6948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 517.743 303.315 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.48.2) >>
+>> endobj
+6949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.864 179.528 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.308) >>
+>> endobj
+6950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 493.526 258.7 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.48.3) >>
+>> endobj
+6951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 169.522 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.309) >>
+>> endobj
+6952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 184.711 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.310) >>
+>> endobj
+6953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 455.429 229.258 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.49) >>
+>> endobj
+6954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 443.37 221.956 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.49.1) >>
+>> endobj
+6955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 432.982 303.315 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.49.2) >>
+>> endobj
+6956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.103 192.646 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.314) >>
+>> endobj
+6957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 408.765 274.148 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.49.3) >>
+>> endobj
+6958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.935 171.996 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.315) >>
+>> endobj
+6959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.548 192.242 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.316) >>
+>> endobj
+6960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 181.465 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.317) >>
+>> endobj
+6961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 230.528 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.318) >>
+>> endobj
+6962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 235.899 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.319) >>
+>> endobj
+6963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 186.1 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.320) >>
+>> endobj
+6964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 168.006 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.321) >>
+>> endobj
+6965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 311.896 165.523 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.322) >>
+>> endobj
+6966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.016 189.122 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.323) >>
+>> endobj
+6967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 174.489 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.324) >>
+>> endobj
+6968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 275.57 188.432 284.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.325) >>
+>> endobj
+6969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 263.461 213.349 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.326) >>
+>> endobj
+6970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 218.441 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.327) >>
+>> endobj
+6971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 226.314 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.328) >>
+>> endobj
+6972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 188.539 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.329) >>
+>> endobj
+6973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.026 196.411 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.330) >>
+>> endobj
+6974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.147 197.586 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.331) >>
+>> endobj
+6975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 190.809 258.7 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.49.4) >>
+>> endobj
+6976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.979 181.698 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.332) >>
+>> endobj
+6977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 189.911 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.333) >>
+>> endobj
+6978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 241.036 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section*.334) >>
+>> endobj
+6979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 250.792 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.335) >>
+>> endobj
+6980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 196.797 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.336) >>
+>> endobj
+6981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 175.951 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section*.337) >>
+>> endobj
+6982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 191.408 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.338) >>
+>> endobj
+6983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 175.951 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.339) >>
+>> endobj
+6984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.831 181.698 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.340) >>
+>> endobj
+6985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 196.878 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.341) >>
+>> endobj
+6987 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7050 0 obj <<
+/Length 2370
+/Filter /FlateDecode
+>>
+stream
+xÚí]K“Û6¾Ï¯àiK:Fã ×Vqâ­Mí:µñÜœh g¬Z½VlòïÓ|i’¨fx±=§?²»ñõ×
+K@²‰Š-Z*·_ÒMvçOT&l XÄrë¦óÙÃÒ‡Ë
+7€”0Îë+n=64±ê ¾ñ˜Ð؉.xûöÃê.O˜6£» >¥í§»ò?~ÊîÇœŽ²M¶œf­o®3ÐEÔRðy  Œ'Z«ÑwÙ.Íq Nü.ÛNK¿ÎÖ»ÙjÙõ£`WÛ,U?¡ÇÅ S¯Yéëg‹ÏÙ¦òtºK«­¦ûE¶Ü¥èð1Œ:>gÚnM8cÀ%¬e–øßvm©:IÕµçêSMŸa•VŽ¯7E ~ívzˆÃ ÆaWWìŽà–bÄsb"±å±²£§ ÔS‹ÙÔ#”'ŒÊD1RJ†e&‰±¹%MŒª¯ùìóÛ·«ûŸ)å«Ô§Ó•&<¸B9g]ì‡lç4 /„FeÀż+9h6Íüs!FÅxÚ|.DJîB/Çãýcmÿçr—m
+5šN³^êT¨¯º8ã`zú df˜Ëm™ µÌ|·Zn»£U•”;¸¾Ñ9Á¨þ¸©B;ñàT¼ZG:²òæIÚD
+‘6‘ˆæ6„Å4Å涴$¹=ÉœœhÒ("„‹xš7󙈀Ì@àB7x³•pÚò«{ g³+³ØEB‡]Yu!µ%ŠG¹!ÁáqŽ]j ú¤¶G¬¤…¹þ’‘ß·³i:÷ C8WáØŒ¡L¹Ø'‡§ÐcYXŒ±q‘CUàö/Oþø9J-:Å” ÂåÅ„ „K°p1ý…‹àÝC¸ %þ=„K8d%\šˆçXÙjc`ç´¬tÁÏÑ2þr hI‰’Ê…>®š€‚½M¤1¢ûbƒ÷ÑD8tÀƘq‘œ¢îP‰¢pðJ5±[IÑZZG‰á"2£éZ¸Ð«{ÿ„‹Œ‚‚0î>Ž½íç[€²¯šú‹ùI=Ù?È–g–-¦áëA¶¼Ü|‹°È÷*Æ|KnIé>´‰fyä|m33ÜAö³&JaãYsÚ´Æ8ˆMÚl/Ÿv˜nq¦[@›¹ŠÒBF´‚Ò"·$ÕEó-ÀKiá`o²uNZ‚ŽvO+·öºÞž+ÏÅÕ©b¨ÎAEEÑþ“
+b¨ÎOqäS«³ÀþœËÕ-±zñp“zÚk|žÅ§¯kYàñ0cÅ/–Ö¶Jö)q\¶°·.qh ˜¾¨Ä…ƒW%®‰½=,Ó_Zß”†WUØN¤SØÉV…íÅ
+›
+[paë?[žKxQãVC¡E6í÷e`†RZÊljêQÊ¸É QŒn-·¤,»¤”E
+ÇÏwÜæ'r8ø¾DB¹C
+N!UžHí¦P棩Š!äûöªš6…!jª“ó‹e1©·A
+s'f~ü–p1ý ¦udÏd*½æû’7T”†]òoEĤl¼´`i…&槪#öÛ¬ü2e|Ã
+endstream
+endobj
+7049 0 obj <<
+/Type /Page
+/Contents 7050 0 R
+/Resources 7048 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 6745 0 R
+/Annots [ 6986 0 R 6990 0 R 6991 0 R 6992 0 R 6993 0 R 6994 0 R 6995 0 R 6996 0 R 6997 0 R 6998 0 R 6999 0 R 7000 0 R 7001 0 R 7002 0 R 7003 0 R 7004 0 R 7005 0 R 7006 0 R 7007 0 R 7008 0 R 7009 0 R 7010 0 R 7011 0 R 7012 0 R 7013 0 R 7014 0 R 7015 0 R 7016 0 R 7017 0 R 7018 0 R 7019 0 R 7020 0 R 7021 0 R 7022 0 R 7023 0 R 7024 0 R 7025 0 R 7026 0 R 7027 0 R 7028 0 R 7029 0 R 7030 0 R 7031 0 R 7032 0 R 7033 0 R 7034 0 R 7035 0 R 7036 0 R 7037 0 R 7038 0 R 7039 0 R 7040 0 R 7041 0 R 7042 0 R 7043 0 R 7044 0 R 7045 0 R 7046 0 R ]
+>> endobj
+6986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 222.037 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.342) >>
+>> endobj
+6990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 230.519 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (section*.343) >>
+>> endobj
+6991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 240.974 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.344) >>
+>> endobj
+6992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 198.384 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (section*.345) >>
+>> endobj
+6993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 208.839 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.346) >>
+>> endobj
+6994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 699.133 266.832 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.50) >>
+>> endobj
+6995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 685.543 221.956 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.50.1) >>
+>> endobj
+6996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.156 258.7 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.50.2) >>
+>> endobj
+6997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 158.278 671.504]
+/Subtype /Link
+/A << /S /GoTo /D (section*.349) >>
+>> endobj
+6998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.217 158.771 659.396]
+/Subtype /Link
+/A << /S /GoTo /D (section*.350) >>
+>> endobj
+6999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 160.86 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.351) >>
+>> endobj
+7000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 624.874 326.55 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.51) >>
+>> endobj
+7001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 612.891 221.956 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.51.1) >>
+>> endobj
+7002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 602.504 303.315 611.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.51.2) >>
+>> endobj
+7003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.548 246.613 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.353) >>
+>> endobj
+7004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 576.44 361.895 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.52) >>
+>> endobj
+7005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 564.456 221.956 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.52.1) >>
+>> endobj
+7006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 554.069 303.315 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.52.2) >>
+>> endobj
+7007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.113 281.958 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (section*.355) >>
+>> endobj
+7008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 529.852 326.048 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.53) >>
+>> endobj
+7009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 516.022 221.956 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.53.1) >>
+>> endobj
+7010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 505.635 303.315 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.53.2) >>
+>> endobj
+7011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 246.111 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.357) >>
+>> endobj
+7012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 479.696 275.461 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.54) >>
+>> endobj
+7013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 467.587 221.956 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.54.1) >>
+>> endobj
+7014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.2 303.315 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.54.2) >>
+>> endobj
+7015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.37 195.524 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (section*.359) >>
+>> endobj
+7016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 431.135 285.073 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.55) >>
+>> endobj
+7017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 419.152 221.956 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.55.1) >>
+>> endobj
+7018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 408.765 303.315 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.55.2) >>
+>> endobj
+7019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 205.136 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (section*.361) >>
+>> endobj
+7020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 382.777 259.842 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.56) >>
+>> endobj
+7021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 370.717 221.956 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.56.1) >>
+>> endobj
+7022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.33 258.7 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.56.2) >>
+>> endobj
+7023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 195.936 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.363) >>
+>> endobj
+7024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 179.223 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.364) >>
+>> endobj
+7025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 200.778 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.365) >>
+>> endobj
+7026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 311.896 163.523 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.366) >>
+>> endobj
+7027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 298.065 248.105 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.57) >>
+>> endobj
+7028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 285.957 221.956 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.57.1) >>
+>> endobj
+7029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 273.799 271.082 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.57.2) >>
+>> endobj
+7030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 263.461 179.205 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section*.373) >>
+>> endobj
+7031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 251.352 179.205 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.374) >>
+>> endobj
+7032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.244 303.315 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.57.3) >>
+>> endobj
+7033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.413 211.493 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.375) >>
+>> endobj
+7034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.305 219.233 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.376) >>
+>> endobj
+7035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.196 219.233 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.377) >>
+>> endobj
+7036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.087 211.493 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.378) >>
+>> endobj
+7037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 178.7 274.148 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.57.4) >>
+>> endobj
+7038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.87 194.403 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.379) >>
+>> endobj
+7039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.761 172.911 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.380) >>
+>> endobj
+7040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.653 175.986 150.831]
+/Subtype /Link
+/A << /S /GoTo /D (section*.381) >>
+>> endobj
+7041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.544 190.422 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.382) >>
+>> endobj
+7042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 216.568 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.383) >>
+>> endobj
+7043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 221.875 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.384) >>
+>> endobj
+7044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 266.016 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section*.385) >>
+>> endobj
+7045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 217.742 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (section*.386) >>
+>> endobj
+7046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 197.891 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.387) >>
+>> endobj
+7048 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7111 0 obj <<
+/Length 3048
+/Filter /FlateDecode
+>>
+stream
+xÚí]]wã¶}÷¯àSô`À
+e¹¸¿ßåû} Û¬Yö±ù­ÖºúŽû?LiìKš&ªÀ U½\mje· ˜Õ&»’ î1I9F?§ ’¢#K%èþ°8DÙd)`cJa»=ì"˜ŽÓ'm
+LL€ 1ï‡E›¿äDÜkˆKlÔ
++"®UåÕ¸÷ù~ÙIv–›×îëÏKªK4RŠq‡!Š¹à³ãÓÓêáCŒMÀœ!_Ð_Øq"†x‰XYB²TbÄáC<ñ©SÀ’”µB‡°”c—sÉgÿŠD+5E¤¡yGŠ0ílþÁ9l$
+
+†..…4%\ˆc°ökIÕ—ˆ($P\êD²­O5ŠÏbCZEGû””hQÚúz˜·d˜ÅºÊ°Ü¬b•WÇ’LKÌw6ÄÌw»M'¹“^ûF)AhUC÷ËÅ!zsWj-C¡™Ó8Z¬•†Œ6 •¶>œ~X1±†Äb™Ù7… ¡cQ•šjdƒ(¤ã¼õ$è"…HžXePˆ ¡²!…¼äß1}å3itÉ)¬úät
+£‘µo0è\©®hÔÎiû¼ˆîi·cE¦‰ U@`ÒT–¼´$©$}A‰ Ð¥Te5@?/©HÂúøZÓöBÜ3›õÆX(ù„îä0öÓÐëHÁBÿ€Äòš¤˜3ÖAY~`c4P
+'5u ‰40àP퉠í9}R“¨ÖRŒì‰0¤à¼%òrÅÍçˆç -‰1°!rõplý¾[~2 ' ÓäšÁs‡Â ‹ŽÛøãFN2HûÈ.ÆÅ"âV–¤€—‡È´µz¶Ú6»Îód”S€¸ÊµR3¡];Éô»VUA%k•:ºéÀÛÇš¦|+´)@­!Fš4–d
+-(‹ÒÖ÷È{_ß:><øZW¾‹4ùÁÔž’êNœüƒÃn}­F¤p8YÒÍìÂr³Þ£Ý"“”]àZúYè÷Ó|(™h4„FDh5ÿõ±ÈëFNJÔ,2¼¬ø5»¹Ãn3÷¤ËËÆÕØÊÆÕ
+ûš­@¤¯:˜œ’~”ÊâÔxІS§ ÏœêÔ¾œNé|›A¹_ý×—h:aµ›8|U±ÊFðÁ´¥ÐéCfÚrW>‡­g§»“½bš=yMIлx¼×Áf¹¼Þª¯Ú²Î=Ó\‡pþùËS^tÛ=ÅŒ¯šGæüS=
+óƒãXͬKQ"ò–°úèeÒxȆM§÷ù¶»‘çjŠO_†W¦êÓOÀ+²¤›™‘^^‡lxu
+ùÌ«V9t—Mr–vF† ‡ …ÆNS뉸A\E ‹Ãw@,@£RP½8W u£MÀ^ÀKcS Úµ®tv¦ˆ8žX
+¦jæ§qù•­JÒ:ÆeŠz,­•¡Ï;SèÀ“`"2çdˆy¦¬©”™ø4BÎ ƒçÇy—s‘4ä™$1Ä[2B áÓx̆O§˜±Â¦‘SŒJÌ©1ŠülyŠÂ·„ÍJ?§Æc6œ:Å<WÔ¤’± ZQ»4ZÔtfÚŠÖž×R”´´NZÞµKQ%ð–”ÃËg™ùC¦è¶J€l4“Æ„Èñ£®}ç±q)0}ç1º3zЛN¯tôÙÞ®cTÃ3¸â%—,µ/´»çîs;í
+È­)¹ý[o‰Ü´á
+endstream
+endobj
+7110 0 obj <<
+/Type /Page
+/Contents 7111 0 R
+/Resources 7109 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7047 0 R 7051 0 R 7052 0 R 7053 0 R 7054 0 R 7055 0 R 7056 0 R 7057 0 R 7058 0 R 7059 0 R 7060 0 R 7061 0 R 7062 0 R 7063 0 R 7064 0 R 7065 0 R 7066 0 R 7067 0 R 7068 0 R 7069 0 R 7070 0 R 7071 0 R 7072 0 R 7073 0 R 7074 0 R 7075 0 R 7076 0 R 7077 0 R 7078 0 R 7079 0 R 7080 0 R 7081 0 R 7082 0 R 7083 0 R 7084 0 R 7085 0 R 7086 0 R 7087 0 R 7088 0 R 7089 0 R 7090 0 R 7091 0 R 7092 0 R 7093 0 R 7094 0 R 7095 0 R 7096 0 R 7097 0 R 7098 0 R 7099 0 R 7100 0 R 7101 0 R 7102 0 R 7103 0 R 7104 0 R 7105 0 R 7106 0 R 7107 0 R ]
+>> endobj
+7047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 205.351 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.388) >>
+>> endobj
+7051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 746.087 211.582 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.389) >>
+>> endobj
+7052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 184.693 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.390) >>
+>> endobj
+7053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 209.117 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.391) >>
+>> endobj
+7054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 214.559 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section*.392) >>
+>> endobj
+7055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 168.518 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.393) >>
+>> endobj
+7056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 168.518 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section*.394) >>
+>> endobj
+7057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 192.673 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.395) >>
+>> endobj
+7058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 266.976 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.396) >>
+>> endobj
+7059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.217 221.589 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.397) >>
+>> endobj
+7060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.983 282.864 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.398) >>
+>> endobj
+7061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 625 202.221 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.399) >>
+>> endobj
+7062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.842 218.056 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.400) >>
+>> endobj
+7063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.733 223.364 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.401) >>
+>> endobj
+7064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.548 273.897 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.402) >>
+>> endobj
+7065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.565 212.353 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.403) >>
+>> endobj
+7066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 217.24 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (section*.404) >>
+>> endobj
+7067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.348 210.739 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.405) >>
+>> endobj
+7068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.239 205.862 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.406) >>
+>> endobj
+7069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 212.739 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.407) >>
+>> endobj
+7070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 216.46 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.408) >>
+>> endobj
+7071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 505.635 258.7 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.57.5) >>
+>> endobj
+7072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 179.259 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.409) >>
+>> endobj
+7073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.696 216.873 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section*.410) >>
+>> endobj
+7074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 211.618 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (section*.411) >>
+>> endobj
+7075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.429 205.405 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.412) >>
+>> endobj
+7076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 445.091 177.941 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.413) >>
+>> endobj
+7077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 191.408 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (section*.414) >>
+>> endobj
+7078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 210.444 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.415) >>
+>> endobj
+7079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 159.273 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.416) >>
+>> endobj
+7080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 396.656 191.91 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.417) >>
+>> endobj
+7081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.826 181.94 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.418) >>
+>> endobj
+7082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.717 202.114 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.419) >>
+>> endobj
+7083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 187.248 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (section*.420) >>
+>> endobj
+7084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.451 204.625 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.421) >>
+>> endobj
+7085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.391 194.394 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.422) >>
+>> endobj
+7086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 219.957 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (section*.423) >>
+>> endobj
+7087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 311.896 212.748 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section*.424) >>
+>> endobj
+7088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 164.761 308.244]
+/Subtype /Link
+/A << /S /GoTo /D (section*.425) >>
+>> endobj
+7089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 197.398 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.426) >>
+>> endobj
+7090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.848 187.427 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.427) >>
+>> endobj
+7091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.739 207.601 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.428) >>
+>> endobj
+7092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 207.413 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.429) >>
+>> endobj
+7093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.244 176.22 247.701]
+/Subtype /Link
+/A << /S /GoTo /D (section*.430) >>
+>> endobj
+7094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 192.897 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.431) >>
+>> endobj
+7095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.026 169.011 223.483]
+/Subtype /Link
+/A << /S /GoTo /D (section*.432) >>
+>> endobj
+7096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 202.917 191.812 211.375]
+/Subtype /Link
+/A << /S /GoTo /D (section*.433) >>
+>> endobj
+7097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 189.185 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.434) >>
+>> endobj
+7098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 176.853 316.481 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.58) >>
+>> endobj
+7099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 164.87 221.956 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.58.1) >>
+>> endobj
+7100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 154.483 303.315 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.58.2) >>
+>> endobj
+7101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 236.544 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.436) >>
+>> endobj
+7102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 128.418 336.655 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.59) >>
+>> endobj
+7103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 116.435 221.956 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.59.1) >>
+>> endobj
+7104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 106.048 303.315 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.59.2) >>
+>> endobj
+7105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 256.718 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.438) >>
+>> endobj
+7106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 79.984 317.432 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.60) >>
+>> endobj
+7107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 68 221.956 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.60.1) >>
+>> endobj
+7109 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7173 0 obj <<
+/Length 2431
+/Filter /FlateDecode
+>>
+stream
+xÚíKs7€ïúsڢĢñj Ç“­MÕfkcÝ\9(ã°bI^™®Íþûm3Î` l´X–8'=HáÓ`€îoz@ŒlÞ6²ùûÅß®.þú½×Á9Ý\ýÚ Þ¹ƒš«ÛæÍêÛýxõÝW¯/¾ú¡1Ò¥ýõ赋ï®.þsô’làSCÞ ¯LsswñægÙÜÒk?4Rèà›ÿîßy׫…5š¾×¼¾ø÷…lÿ¹C;oÛjÿ]c{ÿ.H/šGBvÿ°N
+u¹Ft«oî?ì/×`WovôB¿úËáË«MïµKXu/¿z¸ùx·¹ß]ï¶÷ûCëþ§æÍZK³—kkÝá‹-þé³ÿ€¿i ó·r¡=¦aÿ6„÷ЬA áЛwïÇg¬Ö«M`UîôÒ@
+ŸÎíĤ3§0¶D¿£–öÌ·›Ýiè¡æ`¢£ïuʼýßýõÝöfÌU@C™åXÐHëîú±;ÜÞ( èžÓ¸âišF§ÎŒN–(Щv|úO³.×äjòìÒBIÛ F!)ÊTŒe…±%'¼1ú»í/ß|33E"Ÿæ
+D›¦€8Åê«Íîzûnsû)ƒÞ2èöýT²iÔ°/ér9Ñ׋¼Ìv$Ê"yñ%ò"i¬rÈ‹ŒÚ—ÈK=³“—>s&2a´ç` |ÊÌDfÖqp•&‘·Cî¤0¡WçSöŠ4?èu:çÆbŠ*P$G×jŽfN½"Å–LG?®H àV‘pV‘˜­"%Ì{ŠÊ”ÇsB’%ÑH®Ç*I–d|Š­±åÍ3LÑG’]@Ñ 7ãy°xÌ¥_9º,S‹ÇT{LIÆYêiÏQ„‰-I¯ <†ÙzLÂœŸ”ÖH%ê±J’ÊHL±ÓJá9Û9Ô3˜€£øªK<ÃHAi˜Ã3t‹K1 àÎ3úà¼gÔ3;Ïè3ï/©—?ÞMK¿ Šƒœ@
+D ÷ýãÃÍ”òCÊpP ¬ UJ­+Æ÷¬óÁ Λ±ÓëÅeNæ2zq™Ó¸ ]'yÃQ“‰-9SR“a`v.ÓgfC´·XºÈ±&¥Îh%…”À
+CgQ¯ –€Z,õŠzpç}ðö~;9I½•ƒ‰4D‡úps©äê÷)Í'à€Òå„”Z£^>ã¥eGbõÚS4rn”úì¢O”åD_/šQ«%ËW,)u@Ï¡ÔbȇPJÔ”bh°>…梨ʲ€)ŽRð´gX«Ÿý¼å,jdäCt¡; ®@>L¬ƒ9Ž¢FlÉa©{0p[÷ès³êÁ€Ü«Gï•NÏG^Î@ Vh4içÎÎS@ïâà*0B»”[wÈâ‹p:ºˆOµÅmžØm|¯¯·9E Åį†£„[ÒÝ¢þ¼Û0@[·I sqZ C0h  Gš ÔJÍŽÅnP:Ï,¥‘zq§ñš 4èQ@ǃ;MOEò*édGgÑV¹Ñì[Rúx5ÃPò ,`CÃÅ«Ü6ƒ¹I¡Ã8,aµ`ùu/\
+‡ø,‡è“„ö5]ï{&+©ëqU^qÁÎJþ¹¹ûeÓÉÆõîº@;â–>”$öW5s~¹ŒµéCbœ=kk;
+)¾ /Æ„PŸu@á%dýÒˆG[ 4AXgS`& Ç`ë\-Ô‘ùY—BgpP¢¾_éRÝúE©7(|™“çH|Š÷5‚ß×ðK–=Y–õK–å̲~ɲ_Q–ýs˜‡‚ʽnÓV}å>¶¤)£–îÀmé>˜[Ž(éʆ‰ö '}æü~32§€K= åÖ”ÒUÏïÒUe
+êZX?þSX²êɲjX*ê\©4[Q×ñCD• ¹õØ’4G'FݯG¢ÆA‚ÌîÓ¥=5.m”˜@§«Ú?Ô¹–µUv—.5ºTAYâp|0TK)‚†b­¨ævVÑçæ­¢ÙIEr¨Ùu4Rrj¼-Ü©@+Ÿûu»Î^·;?ž ‹aÔ%F]|Ï—½@¿¨#?ûž½rFøÊ%ÝÈ-¹n©sV1˜­b$Ì|EÇV;
+Œ†Ù*MÂÌ…Ï@i­7^Ž…š;óô%ŸáJï•hâ&ÆëN°dçP°”ÁG‰&¶äTñGFÀ­g$à¬g00[ÏH˜™méâjˆÀÁ¥
+÷`a¤¸O~(.Ä0€;Aêƒó‚TÏì)af÷ –ƒÝßNlåí$| Ñ;Iú0ý‹¹œÌ\–BOc.ZlYž?·¿9}Ü\ꉭº$ÄlÀŒ]R÷v,¦Ø‰°ú\ï혤/¦žÆ½OÖŸó,îý™°¶ t&èÚ<ž‰ EqÓáº3ñÇv»²ÿºÔ¾ 
+endstream
+endobj
+7172 0 obj <<
+/Type /Page
+/Contents 7173 0 R
+/Resources 7171 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7108 0 R 7113 0 R 7114 0 R 7115 0 R 7116 0 R 7117 0 R 7118 0 R 7119 0 R 7120 0 R 7121 0 R 7122 0 R 7123 0 R 7124 0 R 7125 0 R 7126 0 R 7127 0 R 7128 0 R 7129 0 R 7130 0 R 7131 0 R 7132 0 R 7133 0 R 7134 0 R 7135 0 R 7136 0 R 7137 0 R 7138 0 R 7139 0 R 7140 0 R 7141 0 R 7142 0 R 7143 0 R 7144 0 R 7145 0 R 7146 0 R 7147 0 R 7148 0 R 7149 0 R 7150 0 R 7151 0 R 7152 0 R 7153 0 R 7154 0 R 7155 0 R 7156 0 R 7157 0 R 7158 0 R 7159 0 R 7160 0 R 7161 0 R 7162 0 R 7163 0 R 7164 0 R 7165 0 R 7166 0 R 7167 0 R 7168 0 R 7169 0 R ]
+>> endobj
+7108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 759.917 303.315 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.60.2) >>
+>> endobj
+7113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 237.495 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.440) >>
+>> endobj
+7114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 733.852 334.118 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.61) >>
+>> endobj
+7115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 721.869 221.956 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.61.1) >>
+>> endobj
+7116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 711.482 303.315 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.61.2) >>
+>> endobj
+7117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.526 254.181 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.442) >>
+>> endobj
+7118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 685.418 310.967 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.62) >>
+>> endobj
+7119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 673.435 221.956 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.62.1) >>
+>> endobj
+7120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 663.047 303.315 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.62.2) >>
+>> endobj
+7121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 231.03 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.444) >>
+>> endobj
+7122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 636.983 326.55 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.63) >>
+>> endobj
+7123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 625 221.956 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.63.1) >>
+>> endobj
+7124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 614.613 303.315 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.63.2) >>
+>> endobj
+7125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.657 246.613 610.961]
+/Subtype /Link
+/A << /S /GoTo /D (section*.446) >>
+>> endobj
+7126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 588.548 319.933 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.64) >>
+>> endobj
+7127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 576.565 221.956 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.64.1) >>
+>> endobj
+7128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 303.315 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.64.2) >>
+>> endobj
+7129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 239.996 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.448) >>
+>> endobj
+7130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 540.113 298.809 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.65) >>
+>> endobj
+7131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 528.13 221.956 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.65.1) >>
+>> endobj
+7132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 517.743 303.315 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.65.2) >>
+>> endobj
+7133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 218.872 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.450) >>
+>> endobj
+7134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 491.679 318.983 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.66) >>
+>> endobj
+7135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 479.696 221.956 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.66.1) >>
+>> endobj
+7136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 469.308 303.315 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.66.2) >>
+>> endobj
+7137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 239.046 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.452) >>
+>> endobj
+7138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 443.244 247.656 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.67) >>
+>> endobj
+7139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 431.261 221.956 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.67.1) >>
+>> endobj
+7140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 420.874 258.7 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.67.2) >>
+>> endobj
+7141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 157.364 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.454) >>
+>> endobj
+7142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 394.809 267.83 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.68) >>
+>> endobj
+7143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 382.826 221.956 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.68.1) >>
+>> endobj
+7144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 372.439 258.7 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.68.2) >>
+>> endobj
+7145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 157.364 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.456) >>
+>> endobj
+7146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 346.375 316.93 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.69) >>
+>> endobj
+7147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 334.391 221.956 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.69.1) >>
+>> endobj
+7148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 324.004 303.315 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.69.2) >>
+>> endobj
+7149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 236.993 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.458) >>
+>> endobj
+7150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 297.94 299.311 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.70) >>
+>> endobj
+7151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 285.957 221.956 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.70.1) >>
+>> endobj
+7152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 275.57 303.315 284.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.70.2) >>
+>> endobj
+7153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 219.374 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.460) >>
+>> endobj
+7154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 249.505 319.485 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.71) >>
+>> endobj
+7155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 237.522 221.956 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.71.1) >>
+>> endobj
+7156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 227.135 303.315 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.71.2) >>
+>> endobj
+7157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 239.548 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.462) >>
+>> endobj
+7158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 201.07 310.465 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.72) >>
+>> endobj
+7159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 189.087 221.956 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.72.1) >>
+>> endobj
+7160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 178.7 303.315 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.72.2) >>
+>> endobj
+7161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 230.528 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.464) >>
+>> endobj
+7162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 152.636 334.028 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.73) >>
+>> endobj
+7163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 140.653 221.956 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.73.1) >>
+>> endobj
+7164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 130.265 303.315 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.73.2) >>
+>> endobj
+7165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 254.091 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.466) >>
+>> endobj
+7166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 104.201 319.431 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.74) >>
+>> endobj
+7167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 92.218 221.956 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.74.1) >>
+>> endobj
+7168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 81.831 303.315 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.74.2) >>
+>> endobj
+7169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 239.494 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.468) >>
+>> endobj
+7171 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7234 0 obj <<
+/Length 2204
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsãƾëWà”"Ï»{¶\©Š÷‘Š+±‰·µ\ÚbE"t쟈'AaV©]ÍiW"ØÐ=ýÍ×Ä“Ï OþzõÃü껨dÎZ•Ìoà ­MÀIfE2_%'oþiþþ§ùÍô×ù‰æšIéèÛÏ®Þϯþs%è#žˆGCˆ ¥N–÷WåÉŠ>û1áL9Lþ{<ò>ÑF1£ýÿ.¹¹ú×/N.·³û\¼.NW›“ÓEð¬`¼<]ËÀLgVðÉýzÙ</!“Ü¿#mßy‘ÜãI5¡…$lgªàwëOoÞlïZp #T
+HjíáAßÁ0ʃ,Y²4TyŒ.¥Ç)ðé1´Ô§ ›vPÊ Ô!Sk.îLT)4³dp<°À”q5P< ÕW‘ªùaºSŽ#³Ä\õ×Fu3nS6çÔÍ ½EuóG^¬n,yZ;@ÝxKjˆ¶
+£ãS"£aF?Yî±
+Eãuʨ7/FÖÍÚmeèq«(L‚¯èå᭾ϫFíë|=ªÖ& sKJësŸ-:>I!Q2iey±Zíêk ÄÄ쬻ÓT f TWÓn{ÈÖ›´%®–âi(Ú÷^FÝÁ¤Î-Érw½jD•cäàP¡VœYUFîKbKDãD¢•fjä¼­fsK~Ω‡²JâYÇ)f$ŽKW\DCV•R@ˆÕD–¸(ÖñC¶ëÞFÓߌ
+he¼÷´“B;C\»¬]_0© n[KãÃeܶö–´³Ý÷€Ìh¯½Ùú~ÔiÍ™Ai²¤°ÀüäóöpÛ¸! !6¾dÈ‹ä^ï["®é@Aq’È4Œ«¨épž[’ðtÿ1+ƒìQ 1àãîðZ¼Û@¥çH[ª°LËp`
+ÞáýÜ£mêø†»Kþ Ôq“0æ¤ì‘NÐ7üs•ÌÚâþÔïk?ëò[þ`ö¦
+endstream
+endobj
+7233 0 obj <<
+/Type /Page
+/Contents 7234 0 R
+/Resources 7232 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7170 0 R 7174 0 R 7175 0 R 7176 0 R 7177 0 R 7178 0 R 7179 0 R 7180 0 R 7181 0 R 7182 0 R 7183 0 R 7184 0 R 7185 0 R 7186 0 R 7187 0 R 7188 0 R 7189 0 R 7190 0 R 7191 0 R 7192 0 R 7193 0 R 7194 0 R 7195 0 R 7196 0 R 7197 0 R 7198 0 R 7199 0 R 7200 0 R 7201 0 R 7202 0 R 7203 0 R 7204 0 R 7205 0 R 7206 0 R 7207 0 R 7208 0 R 7209 0 R 7210 0 R 7211 0 R 7212 0 R 7213 0 R 7214 0 R 7215 0 R 7216 0 R 7217 0 R 7218 0 R 7219 0 R 7220 0 R 7221 0 R 7222 0 R 7223 0 R 7224 0 R 7225 0 R 7226 0 R 7227 0 R 7228 0 R 7229 0 R 7230 0 R ]
+>> endobj
+7170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 758.07 301.803 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.75) >>
+>> endobj
+7174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 746.087 221.956 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.75.1) >>
+>> endobj
+7175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 735.699 303.315 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.75.2) >>
+>> endobj
+7176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 221.867 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.470) >>
+>> endobj
+7177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 709.635 321.977 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.76) >>
+>> endobj
+7178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 697.652 221.956 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.76.1) >>
+>> endobj
+7179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 687.265 303.315 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.76.2) >>
+>> endobj
+7180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.309 242.04 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.472) >>
+>> endobj
+7181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 661.2 309.281 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.77) >>
+>> endobj
+7182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 649.217 221.956 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.77.1) >>
+>> endobj
+7183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 638.83 303.315 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.77.2) >>
+>> endobj
+7184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 624.874 229.344 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.474) >>
+>> endobj
+7185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 612.766 329.455 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.78) >>
+>> endobj
+7186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 600.782 221.956 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.78.1) >>
+>> endobj
+7187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 590.395 303.315 599.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.78.2) >>
+>> endobj
+7188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.44 249.518 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.476) >>
+>> endobj
+7189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 564.407 237.157 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.79) >>
+>> endobj
+7190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 552.348 221.956 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.79.1) >>
+>> endobj
+7191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 541.961 258.7 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.79.2) >>
+>> endobj
+7192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.081 158.547 538.309]
+/Subtype /Link
+/A << /S /GoTo /D (section*.478) >>
+>> endobj
+7193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 517.743 225.241 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.80) >>
+>> endobj
+7194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 503.913 221.956 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.80.1) >>
+>> endobj
+7195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 493.526 303.315 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.80.2) >>
+>> endobj
+7196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 187.49 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.481) >>
+>> endobj
+7197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 469.308 258.7 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.80.3) >>
+>> endobj
+7198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.478 201.2 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.482) >>
+>> endobj
+7199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 445.091 179.214 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.483) >>
+>> endobj
+7200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.261 201.2 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.484) >>
+>> endobj
+7201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.152 196.716 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.485) >>
+>> endobj
+7202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 408.765 208.609 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.81) >>
+>> endobj
+7203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 394.935 221.956 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.81.1) >>
+>> endobj
+7204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 384.548 303.315 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.81.2) >>
+>> endobj
+7205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 171.996 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.489) >>
+>> endobj
+7206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 171.996 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.490) >>
+>> endobj
+7207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 348.222 274.148 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.81.3) >>
+>> endobj
+7208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 197.389 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section*.491) >>
+>> endobj
+7209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 194.896 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (section*.492) >>
+>> endobj
+7210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.174 182.642 320.353]
+/Subtype /Link
+/A << /S /GoTo /D (section*.493) >>
+>> endobj
+7211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 211.968 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.494) >>
+>> endobj
+7212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 287.678 258.7 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.81.4) >>
+>> endobj
+7213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.848 179.707 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.495) >>
+>> endobj
+7214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.739 213.394 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.496) >>
+>> endobj
+7215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 177.224 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.497) >>
+>> endobj
+7216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.522 171.566 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.498) >>
+>> endobj
+7217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 172.23 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.499) >>
+>> endobj
+7218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.026 176.713 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.500) >>
+>> endobj
+7219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 202.917 171.055 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.501) >>
+>> endobj
+7220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 180.703 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section*.502) >>
+>> endobj
+7221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 178.7 177.224 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.503) >>
+>> endobj
+7222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 164.87 388.576 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.82) >>
+>> endobj
+7223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 152.761 221.956 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.82.1) >>
+>> endobj
+7224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 303.315 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.82.2) >>
+>> endobj
+7225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 212.353 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.507) >>
+>> endobj
+7226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 118.157 274.148 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.82.3) >>
+>> endobj
+7227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 179.447 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.508) >>
+>> endobj
+7228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 93.939 258.7 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.82.4) >>
+>> endobj
+7229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.831 161.04 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.509) >>
+>> endobj
+7230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 163.532 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section*.510) >>
+>> endobj
+7232 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7295 0 obj <<
+/Length 1754
+/Filter /FlateDecode
+>>
+stream
+xÚí\KÛ6¾ûWèT؇eø(Š¢I¶HЦèÆè%ÉÁ±µŽQ¿jËiÓ_ßÑkmI”-[ÚMó'keÈoøÍÇáˆ4˜4ø¹÷Ó°÷ìÖˆÀ«µ†÷Pb´Àr¢Y0œïúÏ{3|ùføvðaø:TÎ-þïÊw½—ÃÞ_=†_Ñ€=2†.ƒñ¢÷î &øÝë€aMðwòä"J%þ}¼íýÞ£ÙäR;›ifð.›®TÓe’MU
+1jŠ#ngÿ˜ê‡É¸ùüƒw7R¨>Ü(•}è‡z„}3¦YÑ74óh9‚F §?9aÔ¦0̶.à#QZÂo‰¼ ±%üZJcm±Ž¾”aZz¼;ÆÛ ,ƒÛ¤¾Ÿ‡ËiôɹVDi@
+á,¥kyΉe²ÈU1„ n
+£ƒÇö¢ÚT=iI¤Õ•¼,SM:0Ž»çüsþ2Û&‹ðÙ-cE
+[Œeg²TpÅT½óŽ „Ò„â.AQÚÏ´Ú@&µáÕeÃÁ¯•óvõ+‡ÂL©“a.VñqOrÚ:€J4.­$m<"4$–ðãîÚx¤/G÷‰Z
+G*_îêœ0î&0Íx ãÕÓ²ˆAYbI*‘Žø)UÊ- ¸]&¢W.·CS›j×”£–DÞ4_c’ü³"´ïù{,þTDÚªÆT…:ÛfF¯£iè<
+iðüó$øNñ¯¥vjz“u¶?ý´‰ DumÉé®去-Yyð›Ut—<s¿ªý~µ •Í÷«ÚïW/q¤s¿š²G%*)ó4~×yÿÙ-’ƾ©®¤/ßSAu@@>´Þ¹¡²À½ÿ;Z 7Â͹ƒo„ï6è‚m¦ÙªÔm ˆ¦:àŠ'0mT03ØÔRÜ9›v8좕ë¤[nxƒBÜ$Á‹ƒ¦¯óm¶Õs;ÿF÷É“š#ëS'Mê<S’e ‹˜BKÂdc®gëp>[V˜%õ‰²e¢DtBRbŽmÊ( Q’"[ö))Üc‰ÄÏû”jQ¶à‘lxC=ÊÕÖ‘k¥ïZé.ñžîZáñÕKšuÐÇ[¢š?4n\w¨X†u1(`º…Ò ãÕ,^´Õq9eD¢
+_…Ñ|6­›YêAx
+ò×öæñ{åýƒôyO»rJUIK@_V­6š®Ñ*+PY'æl»®*êy; ¨¿&–­ùY@C|e·ê
+endstream
+endobj
+7294 0 obj <<
+/Type /Page
+/Contents 7295 0 R
+/Resources 7293 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7231 0 R 7235 0 R 7236 0 R 7237 0 R 7238 0 R 7239 0 R 7240 0 R 7241 0 R 7242 0 R 7243 0 R 7244 0 R 7245 0 R 7246 0 R 7247 0 R 7248 0 R 7249 0 R 7250 0 R 7251 0 R 7252 0 R 7253 0 R 7254 0 R 7255 0 R 7256 0 R 7257 0 R 7258 0 R 7259 0 R 7260 0 R 7261 0 R 7262 0 R 7263 0 R 7264 0 R 7265 0 R 7266 0 R 7267 0 R 7268 0 R 7269 0 R 7270 0 R 7271 0 R 7272 0 R 7273 0 R 7274 0 R 7275 0 R 7276 0 R 7277 0 R 7278 0 R 7279 0 R 7280 0 R 7281 0 R 7282 0 R 7283 0 R 7284 0 R 7285 0 R 7286 0 R 7287 0 R 7288 0 R 7289 0 R 7290 0 R 7291 0 R ]
+>> endobj
+7231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 167.612 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.511) >>
+>> endobj
+7235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 746.037 175.718 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.512) >>
+>> endobj
+7236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 181.707 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.513) >>
+>> endobj
+7237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 163.532 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (section*.514) >>
+>> endobj
+7238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 168.921 719.939]
+/Subtype /Link
+/A << /S /GoTo /D (section*.515) >>
+>> endobj
+7239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 157.409 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.516) >>
+>> endobj
+7240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 152.836 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.517) >>
+>> endobj
+7241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 675.156 207.99 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.83) >>
+>> endobj
+7242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 661.326 221.956 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.83.1) >>
+>> endobj
+7243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 650.939 303.315 659.687]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.83.2) >>
+>> endobj
+7244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 170.239 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.520) >>
+>> endobj
+7245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.721 258.7 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.83.3) >>
+>> endobj
+7246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 163.532 623.07]
+/Subtype /Link
+/A << /S /GoTo /D (section*.521) >>
+>> endobj
+7247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 602.504 176.229 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.522) >>
+>> endobj
+7248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 588.674 278.067 599.144]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.84) >>
+>> endobj
+7249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 576.565 221.956 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.84.1) >>
+>> endobj
+7250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 564.407 271.082 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.84.2) >>
+>> endobj
+7251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 162.77 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.528) >>
+>> endobj
+7252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 541.961 303.315 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.84.3) >>
+>> endobj
+7253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 176.722 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.529) >>
+>> endobj
+7254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 517.743 274.148 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.84.4) >>
+>> endobj
+7255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 179.044 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.530) >>
+>> endobj
+7256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 193.623 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.531) >>
+>> endobj
+7257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 258.7 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.84.5) >>
+>> endobj
+7258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 172.239 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.532) >>
+>> endobj
+7259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.2 168.06 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.533) >>
+>> endobj
+7260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 443.244 229.105 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.85) >>
+>> endobj
+7261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 431.261 221.956 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.85.1) >>
+>> endobj
+7262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 420.874 303.315 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.85.2) >>
+>> endobj
+7263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 191.354 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.536) >>
+>> endobj
+7264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 396.656 258.7 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.85.3) >>
+>> endobj
+7265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.548 159.049 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.537) >>
+>> endobj
+7266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 164.026 380.896]
+/Subtype /Link
+/A << /S /GoTo /D (section*.538) >>
+>> endobj
+7267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 163.532 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (section*.539) >>
+>> endobj
+7268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 163.658 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.540) >>
+>> endobj
+7269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 157.409 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.541) >>
+>> endobj
+7270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 324.004 207.757 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.86) >>
+>> endobj
+7271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 310.174 221.956 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.86.1) >>
+>> endobj
+7272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 299.787 303.315 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.86.2) >>
+>> endobj
+7273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 170.006 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.544) >>
+>> endobj
+7274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 275.57 177.747 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.545) >>
+>> endobj
+7275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 263.461 274.148 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.86.3) >>
+>> endobj
+7276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 194.681 259.809]
+/Subtype /Link
+/A << /S /GoTo /D (section*.546) >>
+>> endobj
+7277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 188.189 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.547) >>
+>> endobj
+7278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.413 187.687 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.548) >>
+>> endobj
+7279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 215.026 258.7 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.86.4) >>
+>> endobj
+7280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.196 235.002 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.549) >>
+>> endobj
+7281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 189.687 199.266]
+/Subtype /Link
+/A << /S /GoTo /D (section*.550) >>
+>> endobj
+7282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.979 187.678 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.551) >>
+>> endobj
+7283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 166.591 213.101 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.87) >>
+>> endobj
+7284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 152.761 221.956 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.87.1) >>
+>> endobj
+7285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 258.7 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.87.2) >>
+>> endobj
+7286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 158.673 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.553) >>
+>> endobj
+7287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 158.673 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.554) >>
+>> endobj
+7288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 160.538 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.555) >>
+>> endobj
+7289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 160.036 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.556) >>
+>> endobj
+7290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.109 179.707 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.557) >>
+>> endobj
+7291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 167.746 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.558) >>
+>> endobj
+7293 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7356 0 obj <<
+/Length 1968
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ6¾ëWð(ŒbñX
+rK—’À‰Rç2YÝl?·V;7êÓ výP†´ÒjË;]µ3máÎϺ<›®¶ëÞ¢'`p^ *ÞK»hOѪ"+aG=ŠöèqžK2Ì’¤Båj½š¯«r·®×
+f”½V3%z;ó\ ÎóxvUŠY '8hæ4úp(’d´êPãõîj_o¶™·Ê‡òäPn€Cqɬ2>Š$¡ª|8ÛÆó™àÓß;4 ”PøÐl¥„¢®ùS®ö¾]
+¡®•’V™œ«àNGÜÉñCüa5Öùã¶Z­·:Òh˜ãú†œ¤”$EÕ7X__gI+—E%sø‚ ƒF¤è¶zؤW¨öcÐ(T×÷-Û ãBÛæ"Q-„»í¦‰„æ" ñtH4‚0Ì“p„ÆÕFT¡¸\’eÖVEo¼éÒ‰T;ð¡-Sê:»©—Š§àC#ôFº¼CÖÜ ÉÒUWéK¹H‘ÕpdÎØ‘`EVC’Œ©œ9^,Z¼bQî8;ú‘¦µÙÌi²ôïèiÒ*F¥ D~N0DÞÙIÄR¿!õm¿ÞµV‚œ•š(Ñ0N××RüŸ‘íùô×™á”w¼J²¹˜QÀ²ÓKJ|.ˆ¸îçÛòï“ë™äÓd“Ì`ºš·!T°ÛA¡¦NôA!s ÚH0˜]ƒÓWÉ6N—É¢4{I‰Dz×u€¸ÏÝîG ÞàŸÂÖ¢´õÏÉí§dSY:ÞÆÕ»õüþ6Yå]ŶÁó‚M%ÛH‹U|›<ªƒ(½ŸÒÅЧËúƒN™ë?Âúõ€ú/µ¸V@•! >I@u! Ž#9y
+[‡€:Φµ€ZÑI¼LoV]­@θq‘D`hÔ¨V `KIŠ$=´‰Á✜¾¶Àr2Óƒ²¿1HX£jb¾\wîw:¦‰¤¢×q÷s¥$‰XjM–I¾>³6JÐ>ZZš(ê<y Zi˜w„n-I»#tÕÜCƒAèk½¨tE§º¦ò ƒH!uŒ÷/Z¼Fžæ_B3©¬ÿ"I°w’â½âÓöq ŽKœ‡Plß:k¬r`‚œC‚dbÜ!;””ã•’¸z˜¤ÉrÑlç:À=nÕ7Aæ5M’ãüe›tžÃFM@<ÌÁ¨£n\8gnwÔ­/=.pyï@Ú–VžŽ® B‹ á^Q\E"ŽQ¸q&´ŠüÂm‡LÀ
+ƒÌ[ÇÕl.É€:” *&¹ð¡I‚u•sA å#V ¹—éü뜶„¹åÊôm.)¿sè`˜xèd|ƒo÷„íA|uúÀ—$)‡Çâp"Äy
+Å™ör1—$­Àݪ1é€|q2›ÝuÇË=¥w×ùí%ëxQÛÂXo^¼(w›f0ݼþ²­0;¶éÔ±ã$¹øm‘Eôi»FŽ‡]£q;zð1 ²õà]£|‹´÷hÁ³6k×IŒø¾;;°EqŽÕãªH(Š pÀœ®.ØYäÀµF.!D‡Ó¢ƒîÏóùÞ¥:Òó»ûþ4,g\ùHóÁ8f•ê¿QNb˜­õwWxï¼¹#µ¼I’‘xh6D[ > Ô®~™JjIO¨r+ÆUxù@‘,^Q˜~×’„}ã­P•5øžP’ðq G.Iƒ=8iF:Q1å ®³»5šž>tK¦uɲ=ödƒSvciŠåá
+ù«óШÈ%)00éAe50¹¯2ÌKž1ÏÝŸ—¬Èq“Ä‹î£ ÜR4ÇôÈzƘRŽäÄy=ª§«›l5V펫öÕvÝ¡Á­†º#«anÅÍØKIwŽE’.%àXãï\k_q× $„üó¸ÖÎØ­ô;9Me–›½ÛBPî©Ç“÷0ùqâv~?ÚÅ‘ÇÖ(¥ƒÚäÇOiVµÜ_.ã,Ò}7öÙ.°ã­|<±¡?®áŒ5Ótý;#Myš8åŸ4¦‰´ˆÆæ4&'a=ÉpwýËŸiSõ?Á¸Ïø
+endstream
+endobj
+7355 0 obj <<
+/Type /Page
+/Contents 7356 0 R
+/Resources 7354 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7292 0 R 7296 0 R 7297 0 R 7298 0 R 7299 0 R 7300 0 R 7301 0 R 7302 0 R 7303 0 R 7304 0 R 7305 0 R 7306 0 R 7307 0 R 7308 0 R 7309 0 R 7310 0 R 7311 0 R 7312 0 R 7313 0 R 7314 0 R 7315 0 R 7316 0 R 7317 0 R 7318 0 R 7319 0 R 7320 0 R 7321 0 R 7322 0 R 7323 0 R 7324 0 R 7325 0 R 7326 0 R 7327 0 R 7328 0 R 7329 0 R 7330 0 R 7331 0 R 7332 0 R 7333 0 R 7334 0 R 7335 0 R 7336 0 R 7337 0 R 7338 0 R 7339 0 R 7340 0 R 7341 0 R 7342 0 R 7343 0 R 7344 0 R 7345 0 R 7346 0 R 7347 0 R 7348 0 R 7349 0 R 7350 0 R 7351 0 R 7352 0 R ]
+>> endobj
+7292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 155.552 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.559) >>
+>> endobj
+7296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 155.552 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.560) >>
+>> endobj
+7297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 735.699 163.532 744.157]
+/Subtype /Link
+/A << /S /GoTo /D (section*.561) >>
+>> endobj
+7298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 175.484 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.562) >>
+>> endobj
+7299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.761 158.045 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.563) >>
+>> endobj
+7300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 153.562 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.564) >>
+>> endobj
+7301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 160.538 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section*.565) >>
+>> endobj
+7302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 164.761 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.566) >>
+>> endobj
+7303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 183.706 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.567) >>
+>> endobj
+7304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 148.577 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.568) >>
+>> endobj
+7305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 156.054 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.569) >>
+>> endobj
+7306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 198.393 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.570) >>
+>> endobj
+7307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 198.384 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.571) >>
+>> endobj
+7308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 602.504 187.562 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section*.572) >>
+>> endobj
+7309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 172.23 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.573) >>
+>> endobj
+7310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 192.404 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.574) >>
+>> endobj
+7311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 180.703 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (section*.575) >>
+>> endobj
+7312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 163.532 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (section*.576) >>
+>> endobj
+7313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 154.064 550.418]
+/Subtype /Link
+/A << /S /GoTo /D (section*.577) >>
+>> endobj
+7314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.13 152.064 538.309]
+/Subtype /Link
+/A << /S /GoTo /D (section*.578) >>
+>> endobj
+7315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 191.408 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.579) >>
+>> endobj
+7316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 178.712 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.580) >>
+>> endobj
+7317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 157.409 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.581) >>
+>> endobj
+7318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 153.553 489.874]
+/Subtype /Link
+/A << /S /GoTo /D (section*.582) >>
+>> endobj
+7319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 158.547 477.766]
+/Subtype /Link
+/A << /S /GoTo /D (section*.583) >>
+>> endobj
+7320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 457.2 218.086 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.88) >>
+>> endobj
+7321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 443.37 221.956 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.88.1) >>
+>> endobj
+7322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 432.982 258.7 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.88.2) >>
+>> endobj
+7323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 169.011 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.585) >>
+>> endobj
+7324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 168.509 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (section*.586) >>
+>> endobj
+7325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 396.656 218.086 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.89) >>
+>> endobj
+7326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 382.826 221.956 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.89.1) >>
+>> endobj
+7327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 372.439 258.7 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.89.2) >>
+>> endobj
+7328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 183.832 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.588) >>
+>> endobj
+7329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 199.639 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.589) >>
+>> endobj
+7330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.342 191.041 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section*.590) >>
+>> endobj
+7331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 181.061 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.591) >>
+>> endobj
+7332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.125 185.823 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section*.592) >>
+>> endobj
+7333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 205.36 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.593) >>
+>> endobj
+7334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 186.782 296.135]
+/Subtype /Link
+/A << /S /GoTo /D (section*.594) >>
+>> endobj
+7335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.799 188.055 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section*.595) >>
+>> endobj
+7336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 263.461 195.658 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.596) >>
+>> endobj
+7337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 251.352 177.08 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.597) >>
+>> endobj
+7338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.473 175.359 247.701]
+/Subtype /Link
+/A << /S /GoTo /D (section*.598) >>
+>> endobj
+7339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 225.413 288.39 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.90) >>
+>> endobj
+7340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 213.305 221.956 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.90.1) >>
+>> endobj
+7341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 202.917 258.7 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.90.2) >>
+>> endobj
+7342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 179.725 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.600) >>
+>> endobj
+7343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.979 175.726 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.601) >>
+>> endobj
+7344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.87 181.214 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.602) >>
+>> endobj
+7345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 174.238 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.603) >>
+>> endobj
+7346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.653 186.154 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.604) >>
+>> endobj
+7347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.544 191.408 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.605) >>
+>> endobj
+7348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 191.139 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.606) >>
+>> endobj
+7349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 191.13 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.607) >>
+>> endobj
+7350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 174.229 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.608) >>
+>> endobj
+7351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 81.831 205.489 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.91) >>
+>> endobj
+7352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 68 221.956 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.91.1) >>
+>> endobj
+7354 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7416 0 obj <<
+/Length 2517
+/Filter /FlateDecode
+>>
+stream
+xÚí]]oÛÈ}÷¯àS!=h2wî|îÛ6qYÔÅÙ}PdÚjK®-§»ýõ½CRZ 9”ÉpR¸r"éiî™û5‡4Ïn2žýtò×Ë“Wo-f–9­1»¼Î gVëÌ8Á4d—WÙÇÉë÷ç—§ç—Óß.Î$—LGïn<wrzyò¯ §x;CÖ2+d¶¸;ùøϮ蹟3ÎÐÙìßÅ+ï2©)‰ôómvqò÷^}¸ÒÎÃMeðCõq¥Úû¸À-3dÞh`|û5sÀÄtfŒž¼^¯7Ó¨ÉÓb³¦Ÿ„±“¿”oò½ç¦0Ù>ýf½xºËW›ùf¹^_mû™²3är¦3¥tù :ÿ«÷Ò›òßÄ™ê;Õ×7C`ÖB6Á€Ö¹XÍL ŸÌþ¶|ÜÔ—B8ùñ­_ irpÄ,扂×Xòú,¿û”Wt}û´ZL­‘—á/pe¾3'ôaµ,×òS~³l,u|äó7á3™|õtwßX|Tãâÿ/?_]5×^Ã:½l柦‚OnófÝš3ÉE¦©pB'NT¢¹]Õ©42îJKà°D^¬ï§È'Ô G÷v5ý\ò‚Ikú»Üh&¤Iár²Ä¥-‘ïç›ÅçªULQÉœ
+‹Ò!ËûM´“âØ×ý™çÍ]°èì7¾oæ›y‡‰ÁѬ©í3Û¡«˜ÚÌÕ(ÆfxP3Ðꉙ’Ì8Õà8–‘þl¹8]ùøþ¥Šù?üPýP>Ü>q_Fã~3èkëŽ †Ûž1ÇþâM3†ã8”O¸¡ÁOäc¼N¯_½¥¸á¨AÚ7H5^ÿJ+íßXk£ 3¶§dÏ{‹ó±WºOfè˜"â±kéHá&R=ºqq[ªÇ¢J‰L#”bL¦3C†Ê2à¥!„êx÷ËT(ÚMÍÙŽ¡.q¡
+†).úz,C­R¸,ÖM·‡¸^j`T
+\ƒLiÃDm-ÜÈ´¯çRA^pÞæ«›ÍçÆ:ƒÑoSب}éÏL;fÐÇ«üiÈý™¼]n§êp)iÿÜ–=εÛn&…¥ÌíÂÌm|g´ '‹|¾Šl{z“áIC©IySrCWZÒ²y?m–·lq_I,v_ÿ`ýB«/€¿e9á‘i];"#>G“rÎýÇ}~EëÝ¡ÿ“päe±ëS¹]ßß·–¹c·‘"æºnÊ®?cŸÌoSsEXoGº‡ë¦I…ºÈÅú®)bß‚dh ·…H’‘†q]âºrûü!VÎRñK_5¤&VIb^ùÆ7RC;ÊùI¾§æ„ ëëëÇ|Ó„œ–×%@œV×ÖV·Ò9…ˆ”x”‘) …" 2ÄŒW°ˆîèιÛ •L+&¤–Os¦(VJ } v ªAø} œ9p%èMŒ’àå0F¤À4þgbn¦À‰š×±Ý@©Uh¿¯”P!t›ˆã+2ÿwÊ\§Õ8oe®—Ĉ>Ä%—1gdâzKÆTQ¦âÐMuhB;"õR  2 .„¾Û‰Éö¤
+y“¯òÒ£›<¨¯ÎÐjfɯCâ‘c€¢°¤«.÷.¿‹QÈ1åR@
+.˜°@ÖÈ»G#wăžgC0ml{:ÇP¾µ2qÈ’´ª scy(î ä´2¥a¡×«È iRšM€©€qPѯûφê2í</g,õÜ&
+endstream
+endobj
+7415 0 obj <<
+/Type /Page
+/Contents 7416 0 R
+/Resources 7414 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7112 0 R
+/Annots [ 7353 0 R 7357 0 R 7358 0 R 7359 0 R 7360 0 R 7361 0 R 7362 0 R 7363 0 R 7364 0 R 7365 0 R 7366 0 R 7367 0 R 7368 0 R 7369 0 R 7370 0 R 7371 0 R 7372 0 R 7373 0 R 7374 0 R 7375 0 R 7376 0 R 7377 0 R 7378 0 R 7379 0 R 7380 0 R 7381 0 R 7382 0 R 7383 0 R 7384 0 R 7385 0 R 7386 0 R 7387 0 R 7388 0 R 7389 0 R 7390 0 R 7391 0 R 7392 0 R 7393 0 R 7394 0 R 7395 0 R 7396 0 R 7397 0 R 7398 0 R 7399 0 R 7400 0 R 7401 0 R 7402 0 R 7403 0 R 7404 0 R 7405 0 R 7406 0 R 7407 0 R 7408 0 R 7409 0 R 7410 0 R 7411 0 R 7412 0 R ]
+>> endobj
+7353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 759.917 303.315 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.91.2) >>
+>> endobj
+7357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.772 168.876 756.391]
+/Subtype /Link
+/A << /S /GoTo /D (section*.613) >>
+>> endobj
+7358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 735.627 274.148 744.246]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.91.3) >>
+>> endobj
+7359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.636 163.532 732.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.614) >>
+>> endobj
+7360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.616 164.026 719.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.615) >>
+>> endobj
+7361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.193 156.557 707.812]
+/Subtype /Link
+/A << /S /GoTo /D (section*.616) >>
+>> endobj
+7362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.278 182.756 695.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.617) >>
+>> endobj
+7363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.182 216.155 683.522]
+/Subtype /Link
+/A << /S /GoTo /D (section*.618) >>
+>> endobj
+7364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 662.759 179.896 671.377]
+/Subtype /Link
+/A << /S /GoTo /D (section*.619) >>
+>> endobj
+7365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 650.614 213.845 659.363]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.92) >>
+>> endobj
+7366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 636.748 221.956 647.088]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.92.1) >>
+>> endobj
+7367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.325 258.7 634.943]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.92.2) >>
+>> endobj
+7368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.18 168.643 622.798]
+/Subtype /Link
+/A << /S /GoTo /D (section*.622) >>
+>> endobj
+7369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 602.035 262.496 610.784]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.93) >>
+>> endobj
+7370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 588.169 221.956 598.509]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.93.1) >>
+>> endobj
+7371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 577.746 303.315 586.494]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.93.2) >>
+>> endobj
+7372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 565.601 177.224 574.219]
+/Subtype /Link
+/A << /S /GoTo /D (section*.625) >>
+>> endobj
+7373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 553.456 184.965 562.075]
+/Subtype /Link
+/A << /S /GoTo /D (section*.626) >>
+>> endobj
+7374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 541.311 258.7 549.93]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.93.3) >>
+>> endobj
+7375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.167 171.333 537.624]
+/Subtype /Link
+/A << /S /GoTo /D (section*.627) >>
+>> endobj
+7376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.022 195.766 525.64]
+/Subtype /Link
+/A << /S /GoTo /D (section*.628) >>
+>> endobj
+7377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.03 166.025 513.496]
+/Subtype /Link
+/A << /S /GoTo /D (section*.629) >>
+>> endobj
+7378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 482.625 170.004 491.325]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+7379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 468.777 221.314 479.189]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+7380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 456.583 235.71 467.044]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.1.1) >>
+>> endobj
+7381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 444.488 154.064 454.899]
+/Subtype /Link
+/A << /S /GoTo /D (section*.633) >>
+>> endobj
+7382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 434.064 238.777 442.683]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.1.2) >>
+>> endobj
+7383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.073 250.684 430.61]
+/Subtype /Link
+/A << /S /GoTo /D (section*.634) >>
+>> endobj
+7384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 407.928 221.329 418.465]
+/Subtype /Link
+/A << /S /GoTo /D (section*.635) >>
+>> endobj
+7385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 395.783 219.231 406.249]
+/Subtype /Link
+/A << /S /GoTo /D (section*.636) >>
+>> endobj
+7386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 383.638 230.6 393.943]
+/Subtype /Link
+/A << /S /GoTo /D (section*.637) >>
+>> endobj
+7387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 371.494 269.361 381.959]
+/Subtype /Link
+/A << /S /GoTo /D (section*.638) >>
+>> endobj
+7388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 359.349 221.149 369.653]
+/Subtype /Link
+/A << /S /GoTo /D (section*.639) >>
+>> endobj
+7389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 347.204 200.034 357.508]
+/Subtype /Link
+/A << /S /GoTo /D (section*.640) >>
+>> endobj
+7390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 335.059 241.126 345.525]
+/Subtype /Link
+/A << /S /GoTo /D (section*.641) >>
+>> endobj
+7391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.915 231.012 333.38]
+/Subtype /Link
+/A << /S /GoTo /D (section*.642) >>
+>> endobj
+7392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 312.617 236.607 321.235]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.1.3) >>
+>> endobj
+7393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 300.472 170.741 309.162]
+/Subtype /Link
+/A << /S /GoTo /D (section*.643) >>
+>> endobj
+7394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 286.48 176.354 296.946]
+/Subtype /Link
+/A << /S /GoTo /D (section*.644) >>
+>> endobj
+7395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 276.183 211.846 284.873]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+7396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 264.038 269.163 272.728]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.2.1) >>
+>> endobj
+7397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 250.172 206.83 260.512]
+/Subtype /Link
+/A << /S /GoTo /D (section*.648) >>
+>> endobj
+7398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.901 208.83 248.367]
+/Subtype /Link
+/A << /S /GoTo /D (section*.649) >>
+>> endobj
+7399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 227.604 238.777 236.222]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.2.2) >>
+>> endobj
+7400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.612 250.684 224.149]
+/Subtype /Link
+/A << /S /GoTo /D (section*.650) >>
+>> endobj
+7401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.467 221.329 212.004]
+/Subtype /Link
+/A << /S /GoTo /D (section*.651) >>
+>> endobj
+7402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.322 219.231 199.788]
+/Subtype /Link
+/A << /S /GoTo /D (section*.652) >>
+>> endobj
+7403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 177.178 200.034 187.482]
+/Subtype /Link
+/A << /S /GoTo /D (section*.653) >>
+>> endobj
+7404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 165.033 241.126 175.498]
+/Subtype /Link
+/A << /S /GoTo /D (section*.654) >>
+>> endobj
+7405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.888 231.012 163.354]
+/Subtype /Link
+/A << /S /GoTo /D (section*.655) >>
+>> endobj
+7406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 140.869 236.754 151.339]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+7407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 130.446 269.163 139.136]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.3.1) >>
+>> endobj
+7408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.301 206.113 127.05]
+/Subtype /Link
+/A << /S /GoTo /D (section*.660) >>
+>> endobj
+7409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.156 206.113 114.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.661) >>
+>> endobj
+7410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 94.012 227.285 102.76]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+7411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 81.867 269.163 90.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.4.1) >>
+>> endobj
+7412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 224.279 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (section*.665) >>
+>> endobj
+7414 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7477 0 obj <<
+/Length 2169
+/Filter /FlateDecode
+>>
+stream
+xÚí]MsG½ëWìL¦ç{ŽJŒ\N9r"“äàä@`%S…@‘ÛɯOÏ®ÙÁ.3q9a.aýVݯ§ûõÌMîš¼¼øvrñÍ•á‰!V)žLnM‰Q*Ñ–Édž¼|÷æz2¾ž¼þ>ù>TÆ,¾»ñÜÅxrñçàS4Ò1Ä0‘Ìî/ÞýN“9>÷}B ·&ù˜¿ò>’)8>^&o/~º »‹ÛÚy¼Û¼Ù]®{—k$1ˆ¥€Ðâr5‘ÀRƒÙzñ þk^pA”fùû˜:tmè[^X¸&\±ê<¥Ã§ƒC&øXÒ™=< GL›ÁÕb™nݤ·C|Uú˜®fi~Åž¼)…oŽ¤”ÛªòCþ ÿû
+L£W@ÅÎõà'#fˆâ&#@mmoÎÙàj³še‹õjëßëÙæ>]eÓüW5ÿΣkþå@ &ÓÖ½¦ËÍTRŠP‹yŽ™@1‰=rI¢³¤ˆb‹?[ß?l²FzHöÿŽÔ©¦­’Ç2ÊÛ¾!f‚X.B„-i.·ø‹Õ"kÄ×°óKϯ3èø.ãW#‹ £%…–rüwÚ†k€HÉCàìT¯âfÓ?†Œ–i™agC@fT!½¡Š<[?¸rÿWƒêBŸe«¿<F`¤" O,L” :Ñ’Ó•Àþ¸÷q»Ø¹$ð>òÓâï! ¯­”R‘À‡ ŒË Þ¹ª®:E¡ˆRÈ|¡â,‰çŠ€*ï{ÉSÔi»énjE•jå‡éìq½“*éo”2ìƒZÅË ý¢µý?{UöÑ(ßnnw½œÏ]ëZÚêØ>kŸõ8­2ø³³oÒe:}J[.tt±‡‹Ç«»Å*}™f¯VóÔùúSÝÁ\ñHåÓý¼[7~\<¤KôôÛ û¸‘ ƒlü)§öl“-Vw7›U1Pzj0¼7|\ÏÒ§§_‡è®é"»rþZ?¾}¿Éæk×~lT* ÎŽ‚êÙ®@
+¢­¬wºìï°ój“‚lâE91ÂKV‰úvkI‰].,n[ %Í¡@º ?¯A¾_?e½çâ’ÿ‹+ßWÚ =O&!ˆÞ Sˆ‡ño[³ùæêêõ›ËmºŸa©-¶ý^ª%‚Éí^ìÀ]¾~ݦ÷-ÁeÁ’þ¡œÕ0ßü|=i.æôœ”Þ±Å\a¸’Vòï(A”&’A
+œkÕqdkCÊø#3Ší´UäC@%õPç³ôlU|?&)J˜±=Wq°„`
+{ùÝO?¿º×d%=OBI@÷¬ T«M
+TvgIg1gÓå²-íÝù#Ôh"˜ª®7«¬y¢Óž{)ˆ‚Ú±MLçQ©@B(ÉŒJ%!ùñQi
+¥ÍÑ<EÚp®‰Ô¯3ĤŽÒæÔèÔbaiâ"DƒŒ†@˜(m‚D¯ëò œ0nD QÕÍÁà ›zHˆƒnœRb‹C¥G›Y_в—ÝG=Kms€'hf,¡,€¶aùçuÔºþ¨*°ç©m¸EÉúV«í¼ÕÊ´"ÖoµØmµ:KÄñ­Ö
+d6}¼Kûß—¢¬= w¨Ð´n°ÚxCJÿ¶­9ºrK—3$Šs«GWnoÔråÞ‡_OÆ7ίVÇe¬êt&(‘!ÎÁ:CܘŽÜðF-¹±ûz|ùK£ÇSÀ‰3D„8ë ±®gbýQKnìÃþpùêºq+)ñ¹°,ÝøÌ!Ú¥Exˆû’!Ð@oÀ¢ÿÛܵýÎÚYÆþ“4ù= ùL$×j­â!»=Ù¡¯ÙÖ×ñÝ þ<¥ËC î,m?úé±jéZTË
+lì²!d—
+%0°Ké ¹ÛºqõäÆ>lì²!d— RzÌé–hH±Žw"ú£–Ü؇]ö1†<sˆ 6ßì8 Wº».Ïø&EìR:C¢ãF—?h™{¨±p‡]œÁ’eÍpÚ•ž˜%-öAcÑfAyA5†$ÀÁ_gºüõG-¹±‹ö1†<7ƒíhlþ¡…(`òж’0ãµGÉpugÎ5;u¶ÉËþŸ›'m¼í¸ÙHúvÿªóbŠ5ÿÖ&ÈŸ¬Õî;”º×¾}‚p } ´ ±=WÅWWå1oÍné^¦àIK´ÔUÀi6mÔ¨Áûû¨­òP"8¯@.ÓÕ]ö¾q†›ø±ÂGËÅÖ]mß|†$9|[Fý{Ïò`I™¸jã¾5ä6?µ$)ÃWUëÓ‡ÅbQÿcý&
+endstream
+endobj
+7476 0 obj <<
+/Type /Page
+/Contents 7477 0 R
+/Resources 7475 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7413 0 R 7417 0 R 7418 0 R 7419 0 R 7420 0 R 7421 0 R 7422 0 R 7423 0 R 7424 0 R 7425 0 R 7426 0 R 7427 0 R 7428 0 R 7429 0 R 7430 0 R 7431 0 R 7432 0 R 7433 0 R 7434 0 R 7435 0 R 7436 0 R 7437 0 R 7438 0 R 7439 0 R 7440 0 R 7441 0 R 7442 0 R 7443 0 R 7444 0 R 7445 0 R 7446 0 R 7447 0 R 7448 0 R 7449 0 R 7450 0 R 7451 0 R 7452 0 R 7453 0 R 7454 0 R 7455 0 R 7456 0 R 7457 0 R 7458 0 R 7459 0 R 7460 0 R 7461 0 R 7462 0 R 7463 0 R 7464 0 R 7465 0 R 7466 0 R 7467 0 R 7468 0 R 7469 0 R 7470 0 R 7471 0 R 7472 0 R 7473 0 R ]
+>> endobj
+7413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 758.195 240.331 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+7417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 747.808 238.777 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.5.1) >>
+>> endobj
+7418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.978 204.167 744.157]
+/Subtype /Link
+/A << /S /GoTo /D (section*.667) >>
+>> endobj
+7419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 181.241 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.668) >>
+>> endobj
+7420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.711 226.395 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.669) >>
+>> endobj
+7421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 223.534 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.670) >>
+>> endobj
+7422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 687.265 230.863 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+7423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 675.156 269.163 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.6.1) >>
+>> endobj
+7424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 195.156 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.672) >>
+>> endobj
+7425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 212.093 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.673) >>
+>> endobj
+7426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.983 205.629 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.674) >>
+>> endobj
+7427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 624.874 287.203 635.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.675) >>
+>> endobj
+7428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 244.48 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (section*.676) >>
+>> endobj
+7429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 600.782 248.948 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.7) >>
+>> endobj
+7430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 590.395 238.777 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.7.1) >>
+>> endobj
+7431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 244.704 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (section*.679) >>
+>> endobj
+7432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 229.524 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.680) >>
+>> endobj
+7433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 234.509 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.681) >>
+>> endobj
+7434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 234.509 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section*.682) >>
+>> endobj
+7435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.13 221.23 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section*.683) >>
+>> endobj
+7436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.389 267.621 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.684) >>
+>> endobj
+7437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.28 272.607 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (section*.685) >>
+>> endobj
+7438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 493.526 236.607 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.7.2) >>
+>> endobj
+7439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 210.354 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section*.686) >>
+>> endobj
+7440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 467.587 239.479 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.8) >>
+>> endobj
+7441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 455.478 221.956 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.8.1) >>
+>> endobj
+7442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 269.163 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.8.2) >>
+>> endobj
+7443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 244.704 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.689) >>
+>> endobj
+7444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 229.524 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (section*.690) >>
+>> endobj
+7445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 234.509 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.691) >>
+>> endobj
+7446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 396.656 234.509 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.692) >>
+>> endobj
+7447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.194 267.621 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.693) >>
+>> endobj
+7448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.085 272.607 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.694) >>
+>> endobj
+7449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.33 238.777 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.8.3) >>
+>> endobj
+7450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 244.704 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (section*.695) >>
+>> endobj
+7451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 229.524 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.696) >>
+>> endobj
+7452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 234.509 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.697) >>
+>> endobj
+7453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 311.896 234.509 320.644]
+/Subtype /Link
+/A << /S /GoTo /D (section*.698) >>
+>> endobj
+7454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.433 267.621 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.699) >>
+>> endobj
+7455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.324 272.607 296.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.700) >>
+>> endobj
+7456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 273.722 254.928 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.9) >>
+>> endobj
+7457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 263.461 238.777 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.9.1) >>
+>> endobj
+7458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 251.352 257.158 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.702) >>
+>> endobj
+7459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.244 255.678 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.703) >>
+>> endobj
+7460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 249.187 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.704) >>
+>> endobj
+7461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 213.179 245.46 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.10) >>
+>> endobj
+7462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 201.196 221.956 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.10.1) >>
+>> endobj
+7463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 190.809 269.163 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.10.2) >>
+>> endobj
+7464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 178.7 257.158 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.707) >>
+>> endobj
+7465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 255.678 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.708) >>
+>> endobj
+7466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 249.187 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.709) >>
+>> endobj
+7467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 238.777 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.10.3) >>
+>> endobj
+7468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 257.158 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.710) >>
+>> endobj
+7469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 255.678 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.711) >>
+>> endobj
+7470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 249.187 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (section*.712) >>
+>> endobj
+7471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 92.218 211.343 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.11) >>
+>> endobj
+7472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 81.831 238.777 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.11.1) >>
+>> endobj
+7473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 205.853 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.714) >>
+>> endobj
+7475 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7539 0 obj <<
+/Length 2565
+/Filter /FlateDecode
+>>
+stream
+xÚíM{Û6Çïþ<J£ÀàýèÔvvû$v×V}Ò´2£è©-¹’Üf÷Óï@$¾€iÀé6âÉŽmÎ/ü fMæ MÞž¼™œ|wixbˆUŠ'“‰¦Ä(•h D±dr—|}}5¹¸šÜŽü*€Å§¿;¹˜œü~ÂðW4aφŒ!D2{8ùð+Mîðw?$”pk’?wùɉ¿¿OnOþuBóÿ\fg=Ï Þ¼-Yg‚†ÏhŨ}ÖñuØgÓe‚pÍúØ9LȒØЄªZxìî¦?˜t§#
+çŠ!:(<œX(¼ŒÜ«ðpd¡ð2r¶Znó§ÕÓ¦)q>h»»¶t1’'§ £6Ñåbë“Eá‚ –‹ I6³¤¹Ì ëtzç 8Ñ:
+T+"T:ft4]ÎS†FÎl4PœÔTÑùL-iWS{´2í'Z¸
+£ÿ+ªÕŸ8U8 ÞEô=?>bÂBJ„ ØRhhÇ~Ú.îɧñ)h3º\ܧÙw7éÇ1§£t.gic´ ;öµÉû/tó±ÇáQùЛ/COØøTk5z?­W™ÿÏÓ_(\Ì«eþ“Õìé!]n§ø£1-ƒ¢í·ìUÞ'ÄQx
+règù
+
+g–P£CÞÓB»Â™ÁUwPx8±Px¹WááÈBáeäÐÏIÛµ~Ó¥ŸERE¬6úYœ%­m—~–мŸ¥
+íÐÏŽ.úY*è¡ŸE¾X´mý,<ëg¹_ü{õñJùÊ+)!q —‰°‚e`Ã3K*_šÒõzµK:"³^í-BÀ‘göÛ‡›[ÂX3Ç–
+‹V ušå3Ûç’‹>ëý«»¹C>ó•ò™B`äÁCNÃ}-´žœ!(:jl“†a¢°",ÏðlŸô]’(®#PÂAW©›§ÇGÄž
+:Ú66Á‡ãA}¹Pšh€ê.±N«>¬üÄ®5Op”nXß0²]õÒYb‡WóÔÇ4®Î 1˜Æ%¡Êü´Úl}J¥D
+gšVUèf;§*Hb]ðNÅ“Ÿâ²N]7§ ú´0†ÐÚ&ÚmV
+«0 6 w唲ÃàÌ’4yBêìÍõͤ‘îè’žÿ¦×ÔÖá;•ãaþ‚ñÃÙ¤´ˆ1~hIèü¾ûÅÍÍõMcá|¿.ã—o‰Ûtã­J"­J¸°Dª°v CÀd–¸Ê{6s_PbœÆb0µÁ8U™³é¶YF†!»ÜñìÑ®*Žá†¨m•T…¸8:‚ªÐHÝEUáÌBUe&ªŠ5/žØAO‡ô¤ÛC/K4hOè•×..–®œVVÖÿv=ß²ªGaƒù
+T“á—îS l=ŽPB5>Á „])Q€ÓogˆæÛöG¨ÑÑcõPè Ÿ:€#+euê\Çܬ6Û?M7³£ƒ»ËÚñ6Ö³k³•g—òz˜ ÜÅÁm7iÅp§ÇÐê_oá” &èžB_ ­…kgHÑ^…ëì¼p](\‡S‹Âu…:®}^O9Ëìe€œ{Zh—3E¿~G9‡³ 9—á{kAÀ(²u6¸n=­«ì}¢f”]‚Xëî§H]ëÃØ'e•6A‰ ë¿×”h‘Yâf½™-c Q§BT‰{ªÍœp)"`žDj\O5 •ÉŽu½m¨‘Dày°Ùõ¡£Îì,îRgŽÀÌëÌæþF¡phÑ(ThŠ@Í…jÔ¡Q¨Ó´xa£0…GŒIÁܦßeN‹)Q"l
+¦=BeêÐ"ÔO£å¡>=žî†(C¥h‰*è"Ópf¡Ó2óP‹P8¶hª`´E æ-B5êÐ"´wFXtV­áOœ LŽÛÔŸÇóÂ,>c%@q=¦¼ˆ–‡L±¿Éxü‰Ä=G)<Ù¨"É>í_n5rg…ð0÷¦¸ÏïÓÿ°™÷¼6¨˜8îkƒ{ºrmðKÆXZ^õujÿ|u–÷KÕ*ìýbøëªû&øc‰”Í,©â²ÂíäüâæÆ—µB¬e°.JÕ†U±?þ”
+V¹¢`‡€²Ôa‹â ²Y¨—Ã%Ãøs°{2ásŠÚÉ@gI°Ã¹ÀÄ,XL†S‹T`;d2¢gf‰Œ;£NÙ;½ØYõŠ©Æae1bg´„g®/±s¿› Çü6ÐÙ}ßrC ±óa¯ò>ûöû‹ÛÛ³·¾-×Q›W7 kb0h ±:ï&˜œ½ywá œÝ;ÛB8p 6 *Ì«³÷ÍÏt‚£«ìygÆpu5žI7ô·öšxÙ õ}H±Äú|DñNÛR&µí>¼ µm ø—D7>/>×Ñÿ—j
+endstream
+endobj
+7538 0 obj <<
+/Type /Page
+/Contents 7539 0 R
+/Resources 7537 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7474 0 R 7479 0 R 7480 0 R 7481 0 R 7482 0 R 7483 0 R 7484 0 R 7485 0 R 7486 0 R 7487 0 R 7488 0 R 7489 0 R 7490 0 R 7491 0 R 7492 0 R 7493 0 R 7494 0 R 7495 0 R 7496 0 R 7497 0 R 7498 0 R 7499 0 R 7500 0 R 7501 0 R 7502 0 R 7503 0 R 7504 0 R 7505 0 R 7506 0 R 7507 0 R 7508 0 R 7509 0 R 7510 0 R 7511 0 R 7512 0 R 7513 0 R 7514 0 R 7515 0 R 7516 0 R 7517 0 R 7518 0 R 7519 0 R 7520 0 R 7521 0 R 7522 0 R 7523 0 R 7524 0 R 7525 0 R 7526 0 R 7527 0 R 7528 0 R 7529 0 R 7530 0 R 7531 0 R 7532 0 R 7533 0 R 7534 0 R 7535 0 R ]
+>> endobj
+7474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 205.853 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.715) >>
+>> endobj
+7479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 206.337 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.716) >>
+>> endobj
+7480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 213.815 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.717) >>
+>> endobj
+7481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 217.473 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.718) >>
+>> endobj
+7482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 711.482 201.875 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.12) >>
+>> endobj
+7483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 699.373 269.163 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.12.1) >>
+>> endobj
+7484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.543 205.342 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.723) >>
+>> endobj
+7485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.309 241.252 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.724) >>
+>> endobj
+7486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 226.798 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.725) >>
+>> endobj
+7487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 235.764 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.726) >>
+>> endobj
+7488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 637.059 232.904 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.727) >>
+>> endobj
+7489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 624.951 235.71 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.12.2) >>
+>> endobj
+7490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 173.978 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.728) >>
+>> endobj
+7491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 602.504 177.959 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.729) >>
+>> endobj
+7492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 170.105 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.730) >>
+>> endobj
+7493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.565 178.963 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.731) >>
+>> endobj
+7494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 238.777 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.12.3) >>
+>> endobj
+7495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 205.853 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.732) >>
+>> endobj
+7496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.113 205.853 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.733) >>
+>> endobj
+7497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 206.337 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.734) >>
+>> endobj
+7498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 515.896 213.815 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.735) >>
+>> endobj
+7499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 217.473 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.736) >>
+>> endobj
+7500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 493.526 234.808 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.13) >>
+>> endobj
+7501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 269.163 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.13.1) >>
+>> endobj
+7502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 172.741 477.766]
+/Subtype /Link
+/A << /S /GoTo /D (section*.739) >>
+>> endobj
+7503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.2 238.777 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.13.2) >>
+>> endobj
+7504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.37 239.584 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (section*.740) >>
+>> endobj
+7505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 239.592 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.741) >>
+>> endobj
+7506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 233.863 429.331]
+/Subtype /Link
+/A << /S /GoTo /D (section*.742) >>
+>> endobj
+7507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 245.573 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (section*.743) >>
+>> endobj
+7508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 396.656 262.774 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.14) >>
+>> endobj
+7509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 384.548 269.163 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.14.1) >>
+>> endobj
+7510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 231.523 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.747) >>
+>> endobj
+7511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 233.012 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.748) >>
+>> endobj
+7512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 191.408 356.679]
+/Subtype /Link
+/A << /S /GoTo /D (section*.749) >>
+>> endobj
+7513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 196.394 344.57]
+/Subtype /Link
+/A << /S /GoTo /D (section*.750) >>
+>> endobj
+7514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 322.233 276.39 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.14.2) >>
+>> endobj
+7515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.125 185.186 320.353]
+/Subtype /Link
+/A << /S /GoTo /D (section*.751) >>
+>> endobj
+7516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 214.362 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.752) >>
+>> endobj
+7517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 220.764 296.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.753) >>
+>> endobj
+7518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 275.57 238.777 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.14.3) >>
+>> endobj
+7519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.739 239.584 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section*.754) >>
+>> endobj
+7520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 244.434 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.755) >>
+>> endobj
+7521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 237.002 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.756) >>
+>> endobj
+7522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 239.592 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.757) >>
+>> endobj
+7523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 233.863 223.483]
+/Subtype /Link
+/A << /S /GoTo /D (section*.758) >>
+>> endobj
+7524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 245.573 211.375]
+/Subtype /Link
+/A << /S /GoTo /D (section*.759) >>
+>> endobj
+7525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.962 200.267 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.760) >>
+>> endobj
+7526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 176.853 233.266 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.15) >>
+>> endobj
+7527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 166.591 269.163 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.15.1) >>
+>> endobj
+7528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 245.69 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.763) >>
+>> endobj
+7529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 142.374 238.777 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.15.2) >>
+>> endobj
+7530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 237.002 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.764) >>
+>> endobj
+7531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 200.267 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.765) >>
+>> endobj
+7532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 104.201 233.768 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.16) >>
+>> endobj
+7533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 93.939 269.163 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.16.1) >>
+>> endobj
+7534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.831 246.712 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.769) >>
+>> endobj
+7535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 67.951 276.39 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.16.2) >>
+>> endobj
+7537 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7600 0 obj <<
+/Length 3464
+/Filter /FlateDecode
+>>
+stream
+xÚíËr¹†÷zŠ^’ "¸
+ü÷}ñî⯴®\UÎöc]àÛººR5ªË$%@U¡ê+¼XoÖS¦&_6OÓ×f²ÄÿA'Oe== øu&™œéL)¨¾¨,ÿ•µ°ï[´5a\ÔíÔî€b&1†3Æ £¶joM1i “¿M5,¶Ó¶ÿjñaÊéä~YõÁO›ë§‡åz·Ø­°ZÁ¨V?XSø”1¶6tµvÐئjì×WïÞ]¾¸:43ŠH[h¡ E7õ­m÷n‹x
+-Ë´+ ˆ‘²ÂÎ/Ÿ½Š@9ÃÎç<•3K ã!õÍå뫶R´á'$”Ê
+™1! ¥üÀz:ñV×¥pA¸4¹$VÈ©pEŒ­JÒBUôûÕ‡©¤rkieüç+?¼]ÞN,·Ëõõ²Ý±@éÉ»=£ƒîì{œû¨Q]oª®ßÜþ“R±YÜ»QÝ µ8õ†ïqbgopN,“áXí:ƒ°jb|½¸Þnê‰p‰=Ã׫r<˜§lr0;jmä К
+Òm‚åh¥»ƒ ”À)¬Eÿ?÷twi·{ê´îU?_nÝ×Å·•ëÞVmOá26b+_·ü°f Í aRÊ2¢EÒ:D
+bDU’>lñ Ÿ˜ E¹„È@ÖèdÐ!y»||ºßµûšvê¶;šO걤PD
+ 4 V¢eH½Ý.fizÖzTëÒJb G.Ï•ÃGÈ àZêMð1¥§S½Ò›ÔcBÏ@­„Þ„>,îï7×û>Âœ%Þ’¸áDË!q,IùSúC4žNöo’Š<»yX-§¿ÙüÁâR©)®ØyEbIR Oêe {E6ÉG™ŒÝ+²‰ʘ#%FeÊëKĈ% õaˆÓÉ^ŒMò#NÆ‹ûZŽÍ ìyi4\,­¼:ºþôð9Ò¡ØüûS‘")Óù² î¯c\o—‹Ý2–@Åâ*Õ¥b™
+±‹Ûúû×X²ÇµL4ÇÕ=U-ôÃâñSê®K0‘*1> "„î[Ÿ§¶)€Ÿ¦øuÇM¸Ý«~!‰àAýXãÚ'þwÛM™Ë-N†Âæ@[L²û-`‰Ò9Ðî|(‡ºËîònŽ¦æ(}ËZm·€²'ë
+âþ®îc—L]æ:Òíc*2-ÛÜ;éh·t£¶…îNBR¥s@¹%Z¶Ú¸+;¢‰æ2TQ"™ ¡‹ÔÓË‹X\º1WDȹ,ˆI3ÄhéHo´&sÑ’Ñ{£5Ñ]ò3æÈwçH¤•#âœÊyÚñZ§X•CdšNô2m fHÜcšépQ‹ËŒ4+дpsª Þ— q·?†¥”‘´k¯µD)%Öß|ï×h2ÑK´‰¼©æ\<Ýïbk>ª pÎæåŽYëÏíÈßÑS?ßÕ­RÀ lÌþ>7–Pž!ÇËGÕù
+ì5Û¬Àîn»yúx÷ùiÏ\°º•Ñ×æÐjﮥ£…²]æ‚9§Î•kï )BWôWôûõŸŽôúo2Gè?¹{ý7+°{B2W“õ}°¾‰›Ààr=_Ñrc5äw˜€¢ ¬¸Hל뺂„’¾Ë€ô&˜Ã¶s¨âjà®~hÉ[5ˆÅðØ8ø+ˆ\”7Þb\÷ššsXô-”çÄH3bZÀÅ’ÔÚ® ¾{¡×éH9ÂÉ5Ø;¢Yƒ}
+yŽÞ#œLŒ‰Þ݇•å·±Vï‚=­ã25U9iP¥ÜÌþÛEÀNœBpÇæ¦û0ž¡y±ÁpM¶oÇÖ¦ÒX”Ê€75¨
+Óf¶7 Ùyµ+÷îžP#¢ '^•C­X’0D­éL¯Ö&óæëzý€V·?o²ü­å9ÜößÚµ çØ"[X[¸G•_±¨å‰%Z¡_žéL/Ï&3z×YI¤úÒ™Ö}t´ ™»»írqóØqrpË üªÍ¯öÌyOß%-%ƘÀÝÈN|È¢6–¤Ž¼dQ› éMÐdºÀ:þ2ú
+#3€ÝfÕ-pÇ«O5 }ûŠÌ}ZE¸ä‰QSg•VëUÏþw:²Üþ6²;­ëÒ¹\åÀâpïŽ 7±÷”øãJìûƲ|Âw¸^ LçHûâHnµ¢×td­×&2¾÷á¶I¤.<dÏÎ6¿{B,ëvÞ¶cUHÅÙ £·,ÓÃÝ ¡#ÄÖ”8v¦Õ½ÎN¬ghì€ÒÉnDh‘»ö?@êß÷rí»é´j’ Oê&Tšô?v$•({:E©Âb§p(;ggP€?IÀwÊ—/mòÿ
+endstream
+endobj
+7599 0 obj <<
+/Type /Page
+/Contents 7600 0 R
+/Resources 7598 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7536 0 R 7540 0 R 7541 0 R 7542 0 R 7543 0 R 7544 0 R 7545 0 R 7546 0 R 7547 0 R 7548 0 R 7549 0 R 7550 0 R 7551 0 R 7552 0 R 7553 0 R 7554 0 R 7555 0 R 7556 0 R 7557 0 R 7558 0 R 7559 0 R 7560 0 R 7561 0 R 7562 0 R 7563 0 R 7564 0 R 7565 0 R 7566 0 R 7567 0 R 7568 0 R 7569 0 R 7570 0 R 7571 0 R 7572 0 R 7573 0 R 7574 0 R 7575 0 R 7576 0 R 7577 0 R 7578 0 R 7579 0 R 7580 0 R 7581 0 R 7582 0 R 7583 0 R 7584 0 R 7585 0 R 7586 0 R 7587 0 R 7588 0 R 7589 0 R 7590 0 R 7591 0 R 7592 0 R 7593 0 R 7594 0 R 7595 0 R 7596 0 R ]
+>> endobj
+7536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.146 212.64 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (section*.770) >>
+>> endobj
+7540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 747.808 236.607 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.16.3) >>
+>> endobj
+7541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 735.699 246.712 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (section*.771) >>
+>> endobj
+7542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 723.591 210.976 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.17) >>
+>> endobj
+7543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 711.482 204.637 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.18) >>
+>> endobj
+7544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 699.373 269.163 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.18.1) >>
+>> endobj
+7545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 264.125 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (section*.778) >>
+>> endobj
+7546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 248.694 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.779) >>
+>> endobj
+7547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 242.713 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.780) >>
+>> endobj
+7548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 276.596 659.687]
+/Subtype /Link
+/A << /S /GoTo /D (section*.781) >>
+>> endobj
+7549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 231.012 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.782) >>
+>> endobj
+7550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 624.951 235.71 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.18.2) >>
+>> endobj
+7551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 204.616 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (section*.783) >>
+>> endobj
+7552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 600.733 276.39 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.18.3) >>
+>> endobj
+7553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 198.886 599.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.784) >>
+>> endobj
+7554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 204.616 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (section*.785) >>
+>> endobj
+7555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 238.777 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.18.4) >>
+>> endobj
+7556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 251.832 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.786) >>
+>> endobj
+7557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.113 287.177 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section*.787) >>
+>> endobj
+7558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 251.33 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (section*.788) >>
+>> endobj
+7559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 200.742 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.789) >>
+>> endobj
+7560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 255.185 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (section*.790) >>
+>> endobj
+7561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.679 265.64 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.791) >>
+>> endobj
+7562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 223.05 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.792) >>
+>> endobj
+7563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 233.505 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (section*.793) >>
+>> endobj
+7564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 210.354 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section*.794) >>
+>> endobj
+7565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.244 266.626 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (section*.795) >>
+>> endobj
+7566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 270.84 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (section*.796) >>
+>> endobj
+7567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 274.839 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.797) >>
+>> endobj
+7568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 270.356 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (section*.798) >>
+>> endobj
+7569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 229.524 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (section*.799) >>
+>> endobj
+7570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.701 241.117 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.800) >>
+>> endobj
+7571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 228.197 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.801) >>
+>> endobj
+7572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 247.878 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.802) >>
+>> endobj
+7573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 240.167 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.803) >>
+>> endobj
+7574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 274.337 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section*.804) >>
+>> endobj
+7575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 229.022 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (section*.805) >>
+>> endobj
+7576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 240.615 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.806) >>
+>> endobj
+7577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 234.24 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.807) >>
+>> endobj
+7578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 252.477 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.808) >>
+>> endobj
+7579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 227.694 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.809) >>
+>> endobj
+7580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 273.79 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.810) >>
+>> endobj
+7581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 274.507 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.811) >>
+>> endobj
+7582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 247.376 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.812) >>
+>> endobj
+7583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 239.665 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.813) >>
+>> endobj
+7584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 284.307 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.814) >>
+>> endobj
+7585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 236.544 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.815) >>
+>> endobj
+7586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.962 256.718 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.816) >>
+>> endobj
+7587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 233.478 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.817) >>
+>> endobj
+7588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 237.495 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.818) >>
+>> endobj
+7589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 254.181 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.819) >>
+>> endobj
+7590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 231.03 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.820) >>
+>> endobj
+7591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 228.663 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.821) >>
+>> endobj
+7592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 246.613 126.614]
+/Subtype /Link
+/A << /S /GoTo /D (section*.822) >>
+>> endobj
+7593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 239.996 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.823) >>
+>> endobj
+7594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 218.872 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.824) >>
+>> endobj
+7595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 239.046 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.825) >>
+>> endobj
+7596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 68 232.976 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.826) >>
+>> endobj
+7598 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7661 0 obj <<
+/Length 3110
+/Filter /FlateDecode
+>>
+stream
+xÚíKwÛ¸Ç÷þ\J £x?–NlçdN2NmMN礳ÐÈ´£S[re¥M¾}/HB&Hˆ"t¦¸òKÆîÿâ^<qvŸáìÍÉ«ÙÉ_.5Ë42R²lv—)Œ´”™2I’Ín³O“×W?Ï.~žÝL›ý”qÌ¥þ»õ·“‹ÙÉ?Oü gdWÖHSž-O>ý†³[øÛOFÌèìßÅ'3.œÁ÷ÙÍÉ_Opõpe9›ûªÀëêq¹¨=.áI,2% Âî×Oíç!B#¡iñI*»žÞÜì&€´(ê#Ÿóm
+M@I
+l ‡&â™Nu¦ÕD~0N ª "–bY†pulØ8 åÏ4¤ÿeÇ-å…Oê4Q0”$¡¤ÏtZg®¦O¾<†ü6GŒë\˜iŸ»ý¼Éç·ÏeP…¸JÁ¥ #"›Ü°Û6ttÔÙ©6H@Ý ˆ^0FŠ¨B€’Ñ}„ÏtBð˜‹Ïùí—‡<Hhl ¡à=)ØH´ n«r€£–ZCç¨ا-‰;æ6é‚YQø¯PeS2æC»rB¨à)Àઠç·Ý3h!è˜ ÈbÌ ±W뙌Ia¯Pëe­ñHg­/È}©  ˜J4ªêÈ®DP Nu,%¢½Ê ˜H3ª¡å½tzC¢ )!5$… $bª1®/«p|¡!¾à$U[;'>µÃ>1…Ì-ÅëRl-½ñº‡Ü÷Ñúm¾?äHC 7Ào Š¨N1ôlKšõ³Ôxª³Ô:5ì¼ÝˆE<ÔXxÐyPŠ –)ÀÂo#}ð>êô@˜AJ7o.fz* ž¬ïþŽ1[Ïã\„ID”É$‡\\Eþ24|B³U Â.ÖëZ<=MO©Ò“Ë%$pÅw×ùÝ”áI¾ÉW‹<àüô1¤UPwíjH¸h7+"Sè­åäòËj±]®We•ž¯_óÕv^üªQ¥š±#JTûÕ/#Ÿð\]^¾»:;;uæ Áª2Ò§Û
+RB•Ô÷gïÞ]½nµ6cwÀóa¨{ÕTÅýt›š«ŽJ’\{Žïó ·Ç¹:¢¦ò;xžoçP½·•ÌŸ›é)“åSÈ ÌéñÕq¨Æå¾ǾC,êš–uý~¾Ø¬]Eƒ´èjî~¦dÒªz¥ÌQ֧ע~½Œ‹SßËØ‚­2Íó‹W¿¼ ¿ØaIš
+* m8(‰ô‘çCÉ
++–x%@¨/£ȳÙY;«¥£[¤idÝZ°+"÷ùTZ€’˜Û…r@ ñP§…:´S ÑÈêÈN-Ä#<¤ÓB#oÇHñ$PÈ×9k@oÞ½ tQ\ýÈY™ê˜}ƒÜ– ’· ZD
+™AIÔí§9 ³x¨“YÚ)³häNfuä‡Ùu;ÐÕc|ÔËZ%F˜!ñãˆEn#ªŒJ²ëaûk<ÔkÚi¬Ñȱ֑7¯ÏÞµìÕ(5šfÓ4 AÚÐÀ$7+'^gSBñäÛS~›ßõXìÃ89òÙmõ½³±µZ¤_õ}oч,<´Öª°p^ZøEµÑ1ßدó—e;ÓoÚý”LBëÜ° úÊ­{z»Í_*°5.G#bÄxO-˜r0ÙÒpóm¾Ù[åÚ°#¯\=ÜCˆq±k?¡S.CbÜn8N0ßj bRŽS.=¢DݵA‹ ˆe©SUø¡bùãüw»_ã!ï!‚•õÒC/‹õêyÚ‚NE˜gŒŠâL†˜½šö”¢ âÖç+×–·­dÊ°qâyˆ„Šü´1Gb{ñù}h ÜŽÄC”EÍZ
+¨.KÂÕHâüay¿
+Y’*fÖ@5.ΫC—Ï!_nEÒDƒ‹3ϼ×Ü”q‘]õþ­5u¡Fód¾¶?æíÍ·¦ÓY/ÆÈ0âÌ×î š/&TdlR‡æ¹íÄB§Ò‰´5âX.%PÅÖ†ëÜeð ±O@¤¦8¯Þ.Ù0GM¼,`ÕHr3LT„)M
+Z
+­wûº…d Q00“­’Ò4Ðû“JÈ€íù@T1Ô£¥,ã‘Œ—²¬#Œiц­ýª°§Ë¡Y9ÕÅÑ T%Q·Å§—*âÑNú°*¢Á;UÔÁªˆG:UÔ‘ážÃh<ê`¨ˆ´‡Ú$±‡Ü PA4؉ (æCˆ .ά3Â5@R8A¿Š;û…n!©:”@Ê ì]q{Ïœ<¬õI:@ñh':º—B¢Ñ;‰ÔщG:‘xoì'„ £<:åѳó°PE^<UɃRœ]`ï6ypÝ/bP;X*™ ç ŠI€Ôvœ–7Á]‚¤)6PÂGvwlœï'a¯Ÿ¨ ¹;O1žkGŽvWO-WÛuø~
+aw(ø#•íš,ïLj»û1ü·íÈn «ìÆCv*FS>ªâeN|œÔÃ","Uq3[Y@IŠÉ^²ˆ‡:YÔ¡=d ÞÉÂ{Û.YÄ#,êÈ=c·FŒzë¡o7_#¯Ørzö¦BÕKñP§‡:´{6¢ÌR  Ds†5Þ÷yzté‡ì^FeƘê€Z¤Dxààá,öú/'(iw ×±ÄCXêÐ^b‰G;±xïÛ%–häN,ÞÛ»ñ(ò¨*1xe¹Õ¶ $ƒDÇ­$‡þ^•%q·:uu[^µ–5P=nYMÕÖD¡Ö•3ÇËK°0±ë&£Ü’=Τ,‡aâÝ ú{Þ^)éظßѸÅ!ó|xëb{•k_¬^n„ÚäOëŽ~|‰)Ø|‰>û¡p%ÿšR©SûÖã5¡€AqÜu³ iœ©÷´)ŽÌÿÚÞLŽ¶Sl)îjŽ”­-Ť÷í šÁžàrbI¸ý|÷ËU>%ðBÃ/FRÇ4MRlÑìhß=wƒñ~¤[`wõ[Ö…§è´”x³î‹Ý¸`Åikž k1 {³7d¦¼?ÛùÏj¼êë×eý^žðØ
+endstream
+endobj
+7660 0 obj <<
+/Type /Page
+/Contents 7661 0 R
+/Resources 7659 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7597 0 R 7601 0 R 7602 0 R 7603 0 R 7604 0 R 7605 0 R 7606 0 R 7607 0 R 7608 0 R 7609 0 R 7610 0 R 7611 0 R 7612 0 R 7613 0 R 7614 0 R 7615 0 R 7616 0 R 7617 0 R 7618 0 R 7619 0 R 7620 0 R 7621 0 R 7622 0 R 7623 0 R 7624 0 R 7625 0 R 7626 0 R 7627 0 R 7628 0 R 7629 0 R 7630 0 R 7631 0 R 7632 0 R 7633 0 R 7634 0 R 7635 0 R 7636 0 R 7637 0 R 7638 0 R 7639 0 R 7640 0 R 7641 0 R 7642 0 R 7643 0 R 7644 0 R 7645 0 R 7646 0 R 7647 0 R 7648 0 R 7649 0 R 7650 0 R 7651 0 R 7652 0 R 7653 0 R 7654 0 R 7655 0 R 7656 0 R 7657 0 R ]
+>> endobj
+7597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 236.993 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.827) >>
+>> endobj
+7601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 219.374 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.828) >>
+>> endobj
+7602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 239.548 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.829) >>
+>> endobj
+7603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 230.528 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.830) >>
+>> endobj
+7604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 254.091 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.831) >>
+>> endobj
+7605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.526 239.494 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.832) >>
+>> endobj
+7606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 221.867 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.833) >>
+>> endobj
+7607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.309 242.04 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.834) >>
+>> endobj
+7608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 229.344 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.835) >>
+>> endobj
+7609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 249.518 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.836) >>
+>> endobj
+7610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 637.108 251.71 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.19) >>
+>> endobj
+7611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.721 238.777 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.19.1) >>
+>> endobj
+7612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 224.045 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (section*.838) >>
+>> endobj
+7613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 602.504 242.241 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.20) >>
+>> endobj
+7614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 588.674 221.956 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.1) >>
+>> endobj
+7615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 578.287 269.163 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.2) >>
+>> endobj
+7616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 281.313 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.845) >>
+>> endobj
+7617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 241.225 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.846) >>
+>> endobj
+7618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 284.801 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section*.847) >>
+>> endobj
+7619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 234.24 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (section*.848) >>
+>> endobj
+7620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 211.089 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.849) >>
+>> endobj
+7621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 224.045 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (section*.850) >>
+>> endobj
+7622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 219.562 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.851) >>
+>> endobj
+7623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.417 217.563 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.852) >>
+>> endobj
+7624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 241.207 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (section*.853) >>
+>> endobj
+7625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.2 270.347 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section*.854) >>
+>> endobj
+7626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 445.091 219.544 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.855) >>
+>> endobj
+7627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 237.486 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.856) >>
+>> endobj
+7628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 419.103 235.71 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.3) >>
+>> endobj
+7629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 183.949 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.857) >>
+>> endobj
+7630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 394.886 276.39 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.4) >>
+>> endobj
+7631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.777 206.803 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.858) >>
+>> endobj
+7632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.668 230.77 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.859) >>
+>> endobj
+7633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.33 238.777 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.5) >>
+>> endobj
+7634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 224.045 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (section*.860) >>
+>> endobj
+7635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 336.113 236.607 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.20.6) >>
+>> endobj
+7636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 324.004 207.449 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.861) >>
+>> endobj
+7637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 211.215 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section*.862) >>
+>> endobj
+7638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 250.317 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.863) >>
+>> endobj
+7639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 254.163 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.864) >>
+>> endobj
+7640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 218.424 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section*.865) >>
+>> endobj
+7641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 231.738 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section*.866) >>
+>> endobj
+7642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 235.585 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.867) >>
+>> endobj
+7643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 256.037 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.868) >>
+>> endobj
+7644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 259.883 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.869) >>
+>> endobj
+7645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 237.459 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.870) >>
+>> endobj
+7646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 241.305 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.871) >>
+>> endobj
+7647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.962 215.438 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section*.872) >>
+>> endobj
+7648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 246.335 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.873) >>
+>> endobj
+7649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 250.182 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.874) >>
+>> endobj
+7650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 227.757 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section*.875) >>
+>> endobj
+7651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 231.604 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.876) >>
+>> endobj
+7652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 179.932 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.877) >>
+>> endobj
+7653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 202.051 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section*.878) >>
+>> endobj
+7654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.326 216.693 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.879) >>
+>> endobj
+7655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.218 163.523 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section*.880) >>
+>> endobj
+7656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 79.984 244.115 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.21) >>
+>> endobj
+7657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 69.722 238.777 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.21.1) >>
+>> endobj
+7659 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7722 0 obj <<
+/Length 3191
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËÛ¸¾û¯àÑ:ÅûqÌ6ζÛÍ&MÜ^Ò=Ð2í°kK^IΣ}|È R¤ü²kóä—<Ÿ„ù¾Á
+ÈzØ’K%è)Z,…å9õ'öïTÓFŠS`L5\mv%K΀L4YŠ6åðîÓíu棓äà`7ˆÄ'‰”°–àw`iŸâ`?´ÁˆhíB{eˆþÓ;?ªécL"&™Ò•t9°
+"çb) >Ý\ýc¶I/=Îe]˜B¢b€s„^ËP°¨9¯yu¯³óq±¤JŸ¾Êo²ò»wÙÕ—m³õ*kS€KülÌ蠷¨†Þ‰ÖÙˆ,–JÉÓ×éj»)Çøež§ë|ŸoÖÕo6«û[{
+¿ZÓu'˜+óÄ°3ª¤oTAZwPW³Õ‚âÓßüñ˜A*£àõ:p~å©Ò’Kò6ÛÝßì;¢àøiÎ”ß Xö:z ‰ã¦+-ås¾ àó¯wÙ%¨Žf:‚aœ<¿Ôæñšzacþý~ó>ëÐ[>ã‘|¬é#dÇîà¿];áîòÝþeºOÎw'h6ǘ€®âÉÛý¶w€ žy™×eÈ.–N¿M¯3߸3cæ‘ž>ÒKÁ‘2Ýl“^ZHùªŠ±´Ì £K ›š}ZhÓêînÒêBOHrŸæêbÀß aa:þæãýM5ÂRÄð7UðUtý=m-I¦Ï}Kªô:·¦|HŠy½¦<[/Àûoí×ôa=yÈ–Û©2,.=Ù²ÆêIæÀtJü:_•lþ÷BÙyëùú²»«:ÏWýó:_‰ÑñK‚3â—µ$˜y8&˜<Q Læ5-d‰yìø¨ò)áêdzsßù–AB©DH…%A`QYZb´:xóêÕÏo^¼ìâR ,.Å]pæâþò¯×?œ½ëìL(ö]û="l/E`4 ý×­…çóí’
+H&e0ˆ¸Kªxi‰‚¥ôýÙÛï^œ¿y×Í2Ì<M;ä‹)õDÏjôÕýzå—ÝœŽ±çºõÙ7¾®
+8™
+ WbÆ/Œšìù™lÁWÁ `q†02¦:l¸¼¸öI—"!x H”s³÷œ[k¤€`!ù²/w`wߌBÇ"$ÅaÓú¤7lfžì^<óºˆiÒ!®´
+‘ÎD ýÒ!܃¡Ò ‡¬¥ÓÄ<*pØZ:MØAéC¤Ó„¼_ûÅÕœU3F5X"£tˆj&ZèW ²Ul…_‡áŠ#AD `é .òj³Þmn2“5’<,% æ¢îËM³îò^15ÏãùÌ /öUÏç©zùl I5šÎp+:7ËM ßL`àµ4*ÌÚPõ&¿(ùܬl’›¹åÑ×)IB(>ÑB?ÅÁ¨Ë~Çp<¸æx9_çûŠ‡ƒ'.è7àøÆWÉ …ÄŽO´ÐÏq0ÄÏñpàšãMä#­9ÞõrÜMŠ R”OMa ÚŸzã9ðšÌóÄ ]t±hh¢…~ •|¼†Âk 5‘·Ùu¾Ûg[_n¯d20%ðrÚúȹ­8êT1óT üMèÌ%â,dktª…~:ƒ!ÊÄx:‡×tn"߯ qYbšRŒ¨i}h/¡µásV3HaÆ‹ØB@†4+-Z­¶Þ 1!ªt d%à{å"÷n2r)´‹y™ÙZˆOù*ó³^óÈ–ô¢5ÌUyÓE%·fõæ|NBü”·MDÅ <XÂD§|8rMù&ò0åÃ1kÊ71ï>ZÊÝå«ôÆCz
+l'1†šR˜Þpk¨õ&"ZÄ€i%\è~Åq¦ž–¨Ä$QAŽiOä#ˆ
+dê1¢
+G®EÕDn9º•šK¤ ‰
+Óˆ†Ù²ÓŸ…XYx^µÄ-–Dœæé…†7Ùˆ*t‚•x®eèÓ’g;Ö<¤*pª…Þ³kˆp=¢–6dUKë`¦w¹ÖS(_¤‚<1ó6ýïÆ»ÂÓ2ªÝTÁª5ºŸ0³Ú«?<7Ø0=G« ú!°d!UˆS-ôë a>F>ስ|Ãê ‡¬ÕÓ€¼Í׃â =ˆ§:k'šv ‘"!U+ ô+cH Éé#ÖÊiBæ;Ÿr(äA2¢âÈØ¥z1ÝïÓÕGÏ“"“?­©.»)Ïë©z‰M‹ébG€¬˜í`kOŠ
+–ëTÄ@µ09°íS@çéRúIW~?
+B˜1Aw7LµÐOAñ˜IÁpÔš‚MØ›üb×½.j~¨Ö·áží,¦!çS-ôs IªFr/µæ^öÀ½Î|íViPmŠë
+endstream
+endobj
+7721 0 obj <<
+/Type /Page
+/Contents 7722 0 R
+/Resources 7720 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7658 0 R 7662 0 R 7663 0 R 7664 0 R 7665 0 R 7666 0 R 7667 0 R 7668 0 R 7669 0 R 7670 0 R 7671 0 R 7672 0 R 7673 0 R 7674 0 R 7675 0 R 7676 0 R 7677 0 R 7678 0 R 7679 0 R 7680 0 R 7681 0 R 7682 0 R 7683 0 R 7684 0 R 7685 0 R 7686 0 R 7687 0 R 7688 0 R 7689 0 R 7690 0 R 7691 0 R 7692 0 R 7693 0 R 7694 0 R 7695 0 R 7696 0 R 7697 0 R 7698 0 R 7699 0 R 7700 0 R 7701 0 R 7702 0 R 7703 0 R 7704 0 R 7705 0 R 7706 0 R 7707 0 R 7708 0 R 7709 0 R 7710 0 R 7711 0 R 7712 0 R 7713 0 R 7714 0 R 7715 0 R 7716 0 R 7717 0 R 7718 0 R ]
+>> endobj
+7658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.146 202.141 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.883) >>
+>> endobj
+7662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 208.121 756.265]
+/Subtype /Link
+/A << /S /GoTo /D (section*.884) >>
+>> endobj
+7663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 733.852 234.647 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.22) >>
+>> endobj
+7664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 723.591 269.163 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.22.1) >>
+>> endobj
+7665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 189.992 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.888) >>
+>> endobj
+7666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 697.603 235.71 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.22.2) >>
+>> endobj
+7667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 173.234 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (section*.889) >>
+>> endobj
+7668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 201.441 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.890) >>
+>> endobj
+7669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 185.948 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.891) >>
+>> endobj
+7670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 205.306 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.892) >>
+>> endobj
+7671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 637.108 230.89 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.23) >>
+>> endobj
+7672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 626.721 221.422 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.24) >>
+>> endobj
+7673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 612.842 276.39 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.24.1) >>
+>> endobj
+7674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 602.504 202.078 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.895) >>
+>> endobj
+7675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 588.674 234.279 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.25) >>
+>> endobj
+7676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 578.287 269.163 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.25.1) >>
+>> endobj
+7677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 247.69 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.899) >>
+>> endobj
+7678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 224.045 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.900) >>
+>> endobj
+7679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 541.961 238.777 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.25.2) >>
+>> endobj
+7680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.005 232.007 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.901) >>
+>> endobj
+7681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 515.896 241.978 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.902) >>
+>> endobj
+7682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 232.169 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (section*.903) >>
+>> endobj
+7683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.755 217.473 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.904) >>
+>> endobj
+7684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.646 217.473 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section*.905) >>
+>> endobj
+7685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 240.14 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (section*.906) >>
+>> endobj
+7686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 235.737 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (section*.907) >>
+>> endobj
+7687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.244 245.708 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (section*.908) >>
+>> endobj
+7688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 251.832 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.909) >>
+>> endobj
+7689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 287.177 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (section*.910) >>
+>> endobj
+7690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 251.33 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.911) >>
+>> endobj
+7691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.935 200.742 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.912) >>
+>> endobj
+7692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.701 210.354 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.913) >>
+>> endobj
+7693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 228.43 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.914) >>
+>> endobj
+7694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 199.693 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.915) >>
+>> endobj
+7695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 222.055 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (section*.916) >>
+>> endobj
+7696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 336.113 236.607 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.25.3) >>
+>> endobj
+7697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 235.746 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.917) >>
+>> endobj
+7698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 235.746 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.918) >>
+>> endobj
+7699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 210.336 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.919) >>
+>> endobj
+7700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 231.963 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.920) >>
+>> endobj
+7701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 199.37 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.921) >>
+>> endobj
+7702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 217.052 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.922) >>
+>> endobj
+7703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 251.352 220.432 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.923) >>
+>> endobj
+7704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.473 209.834 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.924) >>
+>> endobj
+7705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 243.511 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.925) >>
+>> endobj
+7706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.255 266.178 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.926) >>
+>> endobj
+7707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.147 267.299 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.927) >>
+>> endobj
+7708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.087 214.945 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.928) >>
+>> endobj
+7709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 188.127 187.157]
+/Subtype /Link
+/A << /S /GoTo /D (section*.929) >>
+>> endobj
+7710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 187.66 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.930) >>
+>> endobj
+7711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 201.845 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.931) >>
+>> endobj
+7712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 206.651 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.932) >>
+>> endobj
+7713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 207.449 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.933) >>
+>> endobj
+7714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.386 198.653 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section*.934) >>
+>> endobj
+7715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 206.355 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.935) >>
+>> endobj
+7716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 200.285 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section*.936) >>
+>> endobj
+7717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 190.171 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.937) >>
+>> endobj
+7718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 210.345 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.938) >>
+>> endobj
+7720 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7783 0 obj <<
+/Length 3235
+/Filter /FlateDecode
+>>
+stream
+xÚí][wÛ6~÷¯à£õ`,0¸?¦[·§Ý&9M}zvO·ŠÌ8ÜZ’+Ém²¿~¼(„Ò¤žm#¾ÄŽ-ÏGß7˜Ühv—Ñìë‹/n.þö•á™!V)žÝ¼Ë4%F©L[ Še7·ÙO—ýêæúÕÍ‹Ÿo¾ÍÀâ_w~wq}sñëÃ_ÑŒ C ˆlµ¾øégšÝâï¾Í(áÖd¿—Ÿ\gBr"Çïï³.¾¿ õÃUvvwµÁ7õã
+Ùz\&(QTfZ1B›^«îó0) 5Õ'A =¾¹=>L
+o%rŠ3d:)x‹–4—ãyÜð¶\lOIÄ•ù<ÉÔô“•“†Yü¤I¼¡%…–JÌýa¹ráÛ/af¹h+²aDKv‚\üwÁäeÞá33•"†ZF˜PS†ZJ‰Æa(±Ð’d5æáý._Þ†¢6ŽÞRÀE€û‹#sîþùxJ,£Į́ç0Jƒ5ÞU)Ì{r/žQÎ’h0÷y8ÇÔ8ü%ÀÄ$SHícÂúm(nãDàP›
+}”µ)¤€–ø!Ä#6Bø„¸ÜÜ„ÞÒZ"˜H€ Ôµ¨hcú2©@¢vX
+pÐèáX<<vPl
+DWh0mÀÑ ËÏE_±®å„èE) ÏR -a"=Fbñ˜ÄÚ˜O‰,õ(²6êh™ÅÃ72kÃÿ¾[\aPòÜ4¾y
+dIÉ î€ÞŽ î_?N|ZoÈ-{Ràؾû7¥| Þ•Á´= +Œ˜¨’«Æð_T–¨i†™Õ¡(Ëú!ñYA~0´Õ„iîCÿîrÑeq°ñ2½ˆ†Ã5>ð
+û{3‚ˆa7UrŠô­×1½ßîäýâ
+´¹üª¸Ï«ïÞäõŒJ¾YuU â܇QlÒÁî.k:²ÛÛ„-®4ÊäËü°Äƾ­ZûKôWµªŽ£\«Ápî)QÙâ’ŽLmʶ†ª­_.W»mÓÐ.ãÜe#W?Ù®×ùæ°Ä-Øe§éµ¶gÙžèlŒ9):¿|ñÏPlO‰Ô +JçÛƒª,©º"xóâÍ××7¡1†ŠGu³ÊFjõÕ‹—×] Ò3ÝúÉr…mÇ8¸;^Iðº.ÐåÕž˜Oò»Y0·Öñ!?U#j1à1Zþ,eÈFÉ°öm¯›XátdŸð´©ŸKd}%²þ¿
+9¾’Ê¢¢òW›Uxø貕ós§ûÚ×:ÊÅÞ<[—lÛášM¶Úª U¥!h6ܾ½ w@¤) ¦ýBø˜‡åî.ÎЛrífXËÊ{°ûmhŒeD`Ú TjOÞô=X~Û‰·Ní(;M:0asK@:-ôK 1Ðc¤ÙH§ù¤tâaé´a¥ y”NòqÐjVÍÕ
+y˜Ë‡"ä—4ÑÏh¨Ðú*Jç>æzùŸmplå„•
+Š‡lÔÆ|RAñ°‚Ú°Åm7µVlÞˆàŒà6†à-ô ÑQÉC<bÃïä“ôŽGmèÝBš…ŒGlf!ÛˆE`ò~VP[A0IAØ[¶“4Í@¿~(%–O¨sGã6¥î6ððŒd<f=!éaëè4èypˆ¤6`¯Qˆ)ÍNµÐKn(/5€ÑäN
+3¯è¤`vÅËÛ‘¼iúÕÃcø„Nécéº1îàzCÀT–D³íòÝ.ÿõ1߬>v‡D=wïó»×-‚9Ý03x+ZÞò«³Äw.©›Ô–¥€7œÃ|ø¾Û ¬´3­žA+Q²VNÎ0Dè‡È;K ‡›ß›¼G  óÐÂwLº(ÀˆÊ“xæ¶øw{¸SúÐÓÆ£º#)(÷PÛÃò¾;uJgM!dèÓÍ”ÁÇ]ɨRÿ]VhŒ¼Ò0n}§¡‡;ßiøÇ„¬Sï4, IIî4teR+ùÔ; <@}§¡÷
+þ?öª/k
+endstream
+endobj
+7782 0 obj <<
+/Type /Page
+/Contents 7783 0 R
+/Resources 7781 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7478 0 R
+/Annots [ 7719 0 R 7723 0 R 7724 0 R 7725 0 R 7726 0 R 7727 0 R 7728 0 R 7729 0 R 7730 0 R 7731 0 R 7732 0 R 7733 0 R 7734 0 R 7735 0 R 7736 0 R 7737 0 R 7738 0 R 7739 0 R 7740 0 R 7741 0 R 7742 0 R 7743 0 R 7744 0 R 7745 0 R 7746 0 R 7747 0 R 7748 0 R 7749 0 R 7750 0 R 7751 0 R 7752 0 R 7753 0 R 7754 0 R 7755 0 R 7756 0 R 7757 0 R 7758 0 R 7759 0 R 7760 0 R 7761 0 R 7762 0 R 7763 0 R 7764 0 R 7765 0 R 7766 0 R 7767 0 R 7768 0 R 7769 0 R 7770 0 R 7771 0 R 7772 0 R 7773 0 R 7774 0 R 7775 0 R 7776 0 R 7777 0 R 7778 0 R 7779 0 R ]
+>> endobj
+7719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 192.987 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.939) >>
+>> endobj
+7723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 746.037 204.033 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.940) >>
+>> endobj
+7724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.929 209.305 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.941) >>
+>> endobj
+7725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.82 190.628 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.942) >>
+>> endobj
+7726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 198.555 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.943) >>
+>> endobj
+7727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.603 201.011 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.944) >>
+>> endobj
+7728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 264.008 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section*.945) >>
+>> endobj
+7729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.385 286.675 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.946) >>
+>> endobj
+7730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.277 287.795 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.947) >>
+>> endobj
+7731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 253.903 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.948) >>
+>> endobj
+7732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 223.131 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.949) >>
+>> endobj
+7733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 626.721 202.051 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.950) >>
+>> endobj
+7734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.891 235.45 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section*.951) >>
+>> endobj
+7735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.782 248.416 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.952) >>
+>> endobj
+7736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.674 163.523 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.953) >>
+>> endobj
+7737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 203.002 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.954) >>
+>> endobj
+7738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 201.451 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.955) >>
+>> endobj
+7739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 247.86 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.956) >>
+>> endobj
+7740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.113 230.922 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.957) >>
+>> endobj
+7741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 529.852 224.811 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.26) >>
+>> endobj
+7742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 516.022 221.956 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.26.1) >>
+>> endobj
+7743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 505.635 269.163 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.26.2) >>
+>> endobj
+7744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 229.757 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.963) >>
+>> endobj
+7745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 479.646 276.39 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.26.3) >>
+>> endobj
+7746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 201.325 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (section*.964) >>
+>> endobj
+7747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.2 238.777 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.26.4) >>
+>> endobj
+7748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.244 232.007 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.965) >>
+>> endobj
+7749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 241.978 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.966) >>
+>> endobj
+7750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.103 217.473 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.967) >>
+>> endobj
+7751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 235.737 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (section*.968) >>
+>> endobj
+7752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 245.708 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (section*.969) >>
+>> endobj
+7753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 384.548 236.607 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.26.5) >>
+>> endobj
+7754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 235.746 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.970) >>
+>> endobj
+7755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 235.746 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.971) >>
+>> endobj
+7756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 210.336 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.972) >>
+>> endobj
+7757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 231.963 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.973) >>
+>> endobj
+7758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 199.37 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.974) >>
+>> endobj
+7759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 217.052 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.975) >>
+>> endobj
+7760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.016 209.834 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.976) >>
+>> endobj
+7761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 243.511 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.977) >>
+>> endobj
+7762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.848 214.945 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.978) >>
+>> endobj
+7763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 188.127 271.918]
+/Subtype /Link
+/A << /S /GoTo /D (section*.979) >>
+>> endobj
+7764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.581 198.653 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.980) >>
+>> endobj
+7765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.244 200.285 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.981) >>
+>> endobj
+7766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 190.171 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.982) >>
+>> endobj
+7767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 210.345 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.983) >>
+>> endobj
+7768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 202.917 192.987 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.984) >>
+>> endobj
+7769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.038 204.033 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.985) >>
+>> endobj
+7770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.929 209.305 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.986) >>
+>> endobj
+7771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.821 190.628 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.987) >>
+>> endobj
+7772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 198.555 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.988) >>
+>> endobj
+7773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.603 201.011 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.989) >>
+>> endobj
+7774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 128.495 254.13 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.27) >>
+>> endobj
+7775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 118.157 269.163 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.27.1) >>
+>> endobj
+7776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 257.4 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (section*.995) >>
+>> endobj
+7777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 210.596 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.996) >>
+>> endobj
+7778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 80.06 235.71 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.27.2) >>
+>> endobj
+7779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.951 193.48 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.997) >>
+>> endobj
+7781 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7844 0 obj <<
+/Length 3331
+/Filter /FlateDecode
+>>
+stream
+xÚíIsIÇïþ:Zçä¾Ý`ÏÐACQLÄÓadPà­eÑË·ŸWªJ‘)Õ’é—`ÕÉ€Åû©*ÿÿÜ3|˜ÐÉ?~šýãÜŠ‰%Nk1™]M %Vë‰qœh6™½Ÿ¼=~öúÕììÕìÍô·ÙÏI%áÜÁÿÞûÝÑÙìè÷#¿¢¶ d-±\N.oŽÞþF'ïáw?O(ÎNþÜ|òf"• J
+øóõäÍÑ¿hóåê8«MÀ‹æëJ|]F-1ÞhF¨ÿ†pCÄôÄ}|þùör½¼»žpcŸß]~¾Yܮ盪¾³‡MÞžX!ŽÉôD)UÿÐÑõþö„†yÌ”lÞÅî J”IF”“‘Ž0ÅûŠÄã¶åFD–¡¥Ü¥ò†@ðOhSì—ËëO«é‰¤Çë‡}=2/H<Û€^U ¼jákÊ"l1‚ÅЫ© Çw«}.§”H-
+p9AÄ\Áw½>?¼Ê„vZe;JT2GeFèv”ÐÄJ™å(<Û;jÞã(<Ô;*„;
+ÍÝ:*äj9:ª¨£¸$NHŒ£2#t;
+¡êr^Þ®×-ªÖTÅK@µ©]V¢„3Sj9qÔÄÐN+1'ˆ–%°N!bjÓ4íxœ&l"§Ž(ncäÝÕÿ(wó÷»v–fM1+ã0FгfFè6+Ò(ɬx¨7kH0+êÍBÍŠÇ6f ©M«×nV4qkÖ9škVè"¬™ºÍ
+³m»ÓQ•ð9Ul áTÅä›)SÇO9¨Í?ðÐZ—`;xhµóÔW÷ë¶Î*ƒ”x^ΩfWBäzþ®zÖëE WB…)Šnbòjñaù°^¬ö»ÊZ<ÍIšÚŸ*ÇŸÚZ¢©Eø37B§?«@’ºd
+ÓS®ŽçËëh(MÕµV’Ö¨ Vb¦ês#tkVËHéSõÀ^k!9ÐÚKà¿\¾[M=ž¯¦'‚Â/v„&Å(´¡)Lj˜§ÜB«)‘>ç\
+|ì nó #\Ö‘ŒÞÕÆ#Ð
+ðõùùËקÏÛÆ‚H7©œ€J€Ã-1ÄÒfØüË_·­=˜M‡«öêW -ïü×ÙEû±zc95˜4<ÎNzyÖv`·ZXVX¢¶›E¾ˆøæìÙìÅëWûLA-¢A2ƒŠ51óìÕó½µa¿ï†°nÉ:ýqRõˆ"ªvb±¸Ó|K ö‡ùú]‚Fn2œ‚‡z·„Ð!·à©Þ1!uØ1hîÖ5wvz1Ûoû¿¿} _Ç*¦–Þ*Õå†þb¿UÐÈ­UBæ›^œ=o?nD¬‚A ßÁ¾xõbÖ樗-Ý”êÎûír¨ƒž`¨‚B'œ³7ÜéPY]£,Kp¥Úl½‰¸-횣ì›o¢êv"§0þr.Ó‰šmd'B éEö;Ü:1d:õN ±NÄC½CèÑÔ­£7<èD<×;1ⶵ•ªÐyò¯jÂÔ±ŒrîicBT]¹’`B4rkÂ9hB<Ö›0ÄvùÁÔŸ)@µ|sMü°~àœÈ"å*¸"L¸˜ÛÒ2ié¾Ï=¿=G+¡²’™Í•0›]¼S ÷§dû‚Fn2‚Çz§„Ø!§à©Þ)ÑÃ:ÍÝ:%ⶵ‚ý8&áLoF¿û󟼞ÿ¬Œý}¿x¿¸JØa%$;„•ŠR“¢o6û"ãcyg›Íƒm'šÅWYˆþá—»Õ½òPÜc~™ EÛœ½%Ü:B9f3Un„ν%|“½(ý¶´àænDoK{Ì*pžèLµ£³¡)7B·è aé÷V
+p«\$&.Ïžmïâ©ãÿ*7êdmn„î
+@9ƒq71tÙ’kƈCòæ¹Hâ&ÿFn„néjó“Nwì]’Ó\„g{…ì¡Ävx¬OlaRÛ 7©í"ò¡%·Ëó¦RÈìí¹º½ 4OÏhR
+endstream
+endobj
+7843 0 obj <<
+/Type /Page
+/Contents 7844 0 R
+/Resources 7842 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 7780 0 R 7784 0 R 7785 0 R 7786 0 R 7787 0 R 7788 0 R 7789 0 R 7790 0 R 7791 0 R 7792 0 R 7793 0 R 7794 0 R 7795 0 R 7796 0 R 7797 0 R 7798 0 R 7799 0 R 7800 0 R 7801 0 R 7802 0 R 7803 0 R 7804 0 R 7805 0 R 7806 0 R 7807 0 R 7808 0 R 7809 0 R 7810 0 R 7811 0 R 7812 0 R 7813 0 R 7814 0 R 7815 0 R 7816 0 R 7817 0 R 7818 0 R 7819 0 R 7820 0 R 7821 0 R 7822 0 R 7823 0 R 7824 0 R 7825 0 R 7826 0 R 7827 0 R 7828 0 R 7829 0 R 7830 0 R 7831 0 R 7832 0 R 7833 0 R 7834 0 R 7835 0 R 7836 0 R 7837 0 R 7838 0 R 7839 0 R 7840 0 R ]
+>> endobj
+7780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 759.917 238.777 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.27.3) >>
+>> endobj
+7784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 214.12 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (section*.998) >>
+>> endobj
+7785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 735.699 214.12 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.999) >>
+>> endobj
+7786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.591 237.441 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1000) >>
+>> endobj
+7787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 237.441 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1001) >>
+>> endobj
+7788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.526 266.617 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1002) >>
+>> endobj
+7789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 295.757 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1003) >>
+>> endobj
+7790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.309 281.071 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1004) >>
+>> endobj
+7791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.277 209.269 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1005) >>
+>> endobj
+7792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.168 206.785 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1006) >>
+>> endobj
+7793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 637.059 229.452 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1007) >>
+>> endobj
+7794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 624.951 271.055 635.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1008) >>
+>> endobj
+7795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.842 237.414 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1009) >>
+>> endobj
+7796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.733 242.346 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1010) >>
+>> endobj
+7797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.624 265.012 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1011) >>
+>> endobj
+7798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.44 253.858 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1012) >>
+>> endobj
+7799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.331 255.185 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1013) >>
+>> endobj
+7800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 265.64 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1014) >>
+>> endobj
+7801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 223.05 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1015) >>
+>> endobj
+7802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 233.505 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1016) >>
+>> endobj
+7803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 207.314 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1017) >>
+>> endobj
+7804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 221.768 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1018) >>
+>> endobj
+7805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 493.526 236.607 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.27.4) >>
+>> endobj
+7806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.646 201.352 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1019) >>
+>> endobj
+7807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.538 206.158 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1020) >>
+>> endobj
+7808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.429 191.651 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1021) >>
+>> endobj
+7809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.32 205.952 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1022) >>
+>> endobj
+7810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.212 193.749 441.44]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1023) >>
+>> endobj
+7811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 419.103 244.662 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.28) >>
+>> endobj
+7812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 408.765 269.163 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.28.1) >>
+>> endobj
+7813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 396.656 331.111 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1028) >>
+>> endobj
+7814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.548 341.575 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1029) >>
+>> endobj
+7815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 365.228 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1030) >>
+>> endobj
+7816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 375.691 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1031) >>
+>> endobj
+7817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 345.063 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1032) >>
+>> endobj
+7818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 336.113 355.526 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1033) >>
+>> endobj
+7819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 322.233 235.71 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.28.2) >>
+>> endobj
+7820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.125 212.873 320.644]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1034) >>
+>> endobj
+7821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 299.787 238.777 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.28.3) >>
+>> endobj
+7822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.907 209.269 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1035) >>
+>> endobj
+7823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 253.858 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1036) >>
+>> endobj
+7824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 261.614 260.111 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.29) >>
+>> endobj
+7825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 251.352 238.777 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.29.1) >>
+>> endobj
+7826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.244 214.12 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1038) >>
+>> endobj
+7827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 214.12 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1039) >>
+>> endobj
+7828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.305 272.965 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1040) >>
+>> endobj
+7829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.196 272.965 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1041) >>
+>> endobj
+7830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.962 266.617 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1042) >>
+>> endobj
+7831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.929 232.178 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1043) >>
+>> endobj
+7832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 281.071 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1044) >>
+>> endobj
+7833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.712 225.22 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1045) >>
+>> endobj
+7834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.603 221.23 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1046) >>
+>> endobj
+7835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.495 218.746 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1047) >>
+>> endobj
+7836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 253.858 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1048) >>
+>> endobj
+7837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.277 227.713 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1049) >>
+>> endobj
+7838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 255.185 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1050) >>
+>> endobj
+7839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 265.64 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1051) >>
+>> endobj
+7840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 223.05 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1052) >>
+>> endobj
+7842 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7906 0 obj <<
+/Length 3607
+/Filter /FlateDecode
+>>
+stream
+xÚíMw㶆÷þZJ ¡ø¼
+$ßNº†R¢™.à ¤˜éãšläÁ5!ó„kò¡Þ5!ô”kò©Þ5!õ´k²¹×DÜÙ›ÛÙqVêógµJÏp
+è«l«¸@ÒS;­’ôV‰˜ïÿúæöºåF¹ÔD‹"XE‰ä lÊ,ÚS¡Tà Uи٤Y8'²Ès\&lÌmb@Ú?ÚsÒ)F%ä@§hì*­-à $úø$xðÉgâI—äC½K>COy$Ÿé=ÜèI‡dS ¨mƒ‰`kpÕ TO |?õ›MÎé?=/îq:}4ß[Ï«Ùë¬Ëüoæƒ7ϻ;…ç?¹ÚÉãâzµÛL¦›ü8G¡ìR2K•ÌÒíNã&_Õ•û6º0æÒØ{Ú¦òª?ûþäæeu×^;:êKp(;×N„%Ú7NTê…`ŠXÕ¿¼FDh68BÛÚ‘&ª@Zéýcï*FkÌÈpØ)
+k›…È>.Ë'{—…ä§ùom„j(äŠh€™²6°%˜8¢I!"f»Ã@¹hŠ> ¥“e`Œ†”_«ÛiùHï´ÙËjÙèƒÕBtjb!ø™×ÇÒB¼ÛÒ#ñ’šP¼€N1T¢Nó‘^§!s_¢_ïßÆÛ-Ÿm3I•®€33i_Ab ùùí;%S|€ÊØÝ)þ¡òÞ¥«eŠ„—®[¦ùH/Óù¸üi3at<·`5:U†# \
+`´,à $µìã‰|¤÷DÈà‰ì 8x"¼€v]JÊ/Eí“Emz@.,-QP ¨í¹ã1zh6é52h6ûš /`÷°Y¿||x~Ùµ×,XÝJ™hŒ` ÑÞ©I£…3¬Yp’ÇM¤*PÃv¸ƒ»[ÿùH¯ÿ9@ÿÙpÐx»$s5^ÍÑ«ûvœ¨à+Z-©Æü„ Ø9šÀê!‰ &™B–(Š¸3†dŸ
+y¤7AÄì·C/pîÝ-yã
+Úrxlü•D.ªí)±]÷ššKZô9•çÄH3 -B‘pQ`_­ D{eòùDoˆ9ÀÙpðCp q
+yIÝ[Ö5™R+ÄáœØB%(%Ö¿2ÿ²jW©Ù‹#ŸiP¤ÜÆÐî·‹8º
+ïùŸ•¬Û
+‚Ål¿`Ô63ÀŒQ”¸i^ñݸéäš&?×Q@¦G·¡QÀéªvï/ŠBÅHšÉ!BÍg{¡†ì²ÛFì™*
+Ã/©ÅhZõ/ƒR D麙;i¯²‰ÞÑÍÛ?¤ŠÀʆV0¡:‚¶+Ñ€¼d¾éÌWQ>$µpï²f¨Pë#Qà}šÏô
+ ™+·ìþòÔÞOU‹Ý4Ž€õó m{|h÷k_^ÉÎ)>G¡t§ÌU"T‰z0³ŒØ'+ìõZ€Yë5bžÒkì^¯Õ-{$Ç)e îô8°,¦&r
++.ùu¸8N ñ‚Ág&KÔؘ¶Ÿ?…Üí…|¦÷BÈÜÞ=,î_ëâÂÈ`—YPÝ
+w,"+QÇp‘ÔÉãÜ)#˜õ)#óÄzžû.`»õ<! ÉN­çÔì©ÜÿQ­ p<dC2ÁP[B­I²>bÍGz±ÈÎÕ<a
+P«}§:‚ž:òü:RÕµ–'aPÃÓ^B˜GÐ^ÊÌ%z]†Ää:žO4–0¥cbbÔeoˆ`¥{ý˜,ÕøìJTˆ]$vò0„J²ùL/ÚÙ=‰ÓPlqš¬àÔÞ²Ë7öú‰'qîƒOýE‹››115²‡dó‰µbCbzþfñwó‘8}¡"d÷ìÍŠX7ycby¶u8ÕU‡£C:p#Ó%ªÄŸ¿V=¼O¬½Ó+ТúVT6ÔMØÜÆËšØÕÆé™ÏÕTÇ
+endstream
+endobj
+7905 0 obj <<
+/Type /Page
+/Contents 7906 0 R
+/Resources 7904 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 7841 0 R 7846 0 R 7847 0 R 7848 0 R 7849 0 R 7850 0 R 7851 0 R 7852 0 R 7853 0 R 7854 0 R 7855 0 R 7856 0 R 7857 0 R 7858 0 R 7859 0 R 7860 0 R 7861 0 R 7862 0 R 7863 0 R 7864 0 R 7865 0 R 7866 0 R 7867 0 R 7868 0 R 7869 0 R 7870 0 R 7871 0 R 7872 0 R 7873 0 R 7874 0 R 7875 0 R 7876 0 R 7877 0 R 7878 0 R 7879 0 R 7880 0 R 7881 0 R 7882 0 R 7883 0 R 7884 0 R 7885 0 R 7886 0 R 7887 0 R 7888 0 R 7889 0 R 7890 0 R 7891 0 R 7892 0 R 7893 0 R 7894 0 R 7895 0 R 7896 0 R 7897 0 R 7898 0 R 7899 0 R 7900 0 R 7901 0 R 7902 0 R ]
+>> endobj
+7841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 233.505 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1053) >>
+>> endobj
+7846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 192.242 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1054) >>
+>> endobj
+7847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 733.852 250.642 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.30) >>
+>> endobj
+7848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 723.591 269.163 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.30.1) >>
+>> endobj
+7849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 711.482 331.111 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1058) >>
+>> endobj
+7850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 699.373 341.575 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1059) >>
+>> endobj
+7851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.265 345.063 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1060) >>
+>> endobj
+7852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 675.156 355.526 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1061) >>
+>> endobj
+7853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 661.277 235.71 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.30.2) >>
+>> endobj
+7854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.168 199.908 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1062) >>
+>> endobj
+7855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 637.059 212.873 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1063) >>
+>> endobj
+7856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.721 238.777 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.30.3) >>
+>> endobj
+7857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.842 225.22 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1064) >>
+>> endobj
+7858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.733 221.23 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1065) >>
+>> endobj
+7859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.624 218.746 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1066) >>
+>> endobj
+7860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.44 253.858 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1067) >>
+>> endobj
+7861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.407 227.713 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1068) >>
+>> endobj
+7862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 552.348 254.946 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.31) >>
+>> endobj
+7863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 541.961 238.777 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.31.1) >>
+>> endobj
+7864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.005 266.626 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1070) >>
+>> endobj
+7865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 515.896 270.84 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1071) >>
+>> endobj
+7866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 274.839 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1072) >>
+>> endobj
+7867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.679 270.356 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1073) >>
+>> endobj
+7868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.57 229.524 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1074) >>
+>> endobj
+7869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.461 241.117 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1075) >>
+>> endobj
+7870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 228.197 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1076) >>
+>> endobj
+7871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.244 247.878 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1077) >>
+>> endobj
+7872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 240.167 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1078) >>
+>> endobj
+7873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 274.337 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1079) >>
+>> endobj
+7874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 229.022 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1080) >>
+>> endobj
+7875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 240.615 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1081) >>
+>> endobj
+7876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.701 234.24 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1082) >>
+>> endobj
+7877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 252.477 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1083) >>
+>> endobj
+7878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.483 227.694 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1084) >>
+>> endobj
+7879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 273.79 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1085) >>
+>> endobj
+7880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 274.507 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1086) >>
+>> endobj
+7881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 247.376 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1087) >>
+>> endobj
+7882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 239.665 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1088) >>
+>> endobj
+7883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 284.307 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1089) >>
+>> endobj
+7884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.831 236.544 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1090) >>
+>> endobj
+7885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 256.718 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1091) >>
+>> endobj
+7886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 233.478 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1092) >>
+>> endobj
+7887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 237.495 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1093) >>
+>> endobj
+7888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 213.582 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1094) >>
+>> endobj
+7889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 254.181 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1095) >>
+>> endobj
+7890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 231.03 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1096) >>
+>> endobj
+7891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 228.663 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1097) >>
+>> endobj
+7892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 188.962 246.613 199.266]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1098) >>
+>> endobj
+7893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 239.996 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1099) >>
+>> endobj
+7894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.744 218.872 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1100) >>
+>> endobj
+7895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 239.046 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1101) >>
+>> endobj
+7896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.653 232.976 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1102) >>
+>> endobj
+7897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 236.993 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1103) >>
+>> endobj
+7898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 213.079 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1104) >>
+>> endobj
+7899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 219.374 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1105) >>
+>> endobj
+7900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 239.548 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1106) >>
+>> endobj
+7901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 230.528 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1107) >>
+>> endobj
+7902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 254.091 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1108) >>
+>> endobj
+7904 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+7967 0 obj <<
+/Length 3443
+/Filter /FlateDecode
+>>
+stream
+xÚíMs$'†ïú}”b!®»ko„ÞX[7Û‡©gFa}ÌJ-¯½¿~“î¦ZT5e2bÃî:Í—†‡¢Þ’¤
+üê?»Ÿ|\«…5š~ÿ°úþâ_òP¹}9/Ÿ~w¨®±Yu•‘¥]9TB¦
+??~y_e½°v? 8Uzò0T¦‚Œ8(‘¯›mé´pN1 
+ƒêyûys÷ö°yÏÂ{.(+¬;ân×/ŸO›ÞÔê‡kgõ¥¸º¶÷¿ØâOÕ¿äùÓÿ³è€öR¡=´Å±ZW×ÎĦ\]ÓûP2´ˆÓ¡,p¨ÓÐßQIûW¶y­ÊIšê"L—ЇçÛ+—?WÀÁ
+°†œÆ=mU JZøJŒµèSzµNhzõ-zÕNHêºôªQxz“-zí‡&½æЧ:4P׫4ÚÁ•Ðq“ľ׀g
+ÏqÚG,Ó1ÓòìG&‰æÌ»ýSë·‡m-‡-@p pØm[9zàJ?
+Þží?3
+m<–][`wöìØçÌRI{yµ”"è¦u71™ GÎpA/0AÎorA79™  ,:\´?­}ðAH`H%Âî–ô7ò þ‚Ù®þþ
+$ùؾìåÓšlðtW÷€†ƒoån^Ù
+bí,ïsŒ%&Ax3ãðÂxãŠå8š"¤}Kb’™ÌQ0g˜£»ƒ9ŠL˜£Ÿ˜Ì‘Gî—~qDÝ-Ãxa8¾ˆkù€–™Q0g8¢»ƒ#òŒèS›¥ãîŽj
+ÍÑo«xÓæÉ{ccrºéI¥
+æô3@@p§Ä<²é'^÷ Í ñîSU¶ïÈ–ë¨(Ë€Ä84ØY›bè3µ˜Rñ:Ú±Q<€ŠãàŒXDh3Y?4¹,§6Ù¬=ø,GŸ0Z?49-‡ž°Z?4y-‡Ž wÖ¥ÃZ.@W~²ó(Žýè*(Š€Zo Fq°ƒ¨UÉž¸‘<æÚ4ÇCÃî&ò£‡®u –lÒ‰¸+nOts$ë¥ÆpHÖšš˜9’íg'ÉæìÉvƒÉæàÑý °uR¨¾E¨èèÝY¡RINã¡ö³“Psö±kñ‹JYhœ{iKè„;tÜvŠ` Â<W¶MíÁJΈÃiPsºpož@gPI˜WhsF?;9#gŸpF7tpFmpF?89#|Âb‡ßc‡xëMçÑ;PIVM_ÑuÖÌøe
+¯ý1;¢¹¿Ý¼¿QX÷®Á µb<JÏ k´(‡Z©$£ZÄÚLbÍw¿=­ïkY
+%…gyÒÝáGOZÝö´ì<}œ5MŒ÷¥sˆ”ÊѲI¥½Ä¤ÑœxZ¤ÔA¢9ulï.Âì¦tô~‡4e¼þZ¤ÙÏLâÌ™÷OÕDzüÉÀÁôA  %óãËóc-´ðBtç+uýüüº}‚†^ŽÎˆÞPãÞ”™á`5+ƒ5¨ éMƒ3ú‰cäÄê}š*a(fí'R&ø‚¸ýü²Yß½Ž\Q ÔÝ Õ¶¤Ö7Q->x÷ LìÇô x-”ãHq{œmðA?ñàƒœ8éƒ~âÁ9ñ¤º©Éµ¾îèaÿï¿SB"GèNÃGl?ñ þœ3‚›»zÄ(×0Q”R@+=2½œôUQ꾊WshIëÄôyVÆêÝYùÅ»±vèÝ
+endstream
+endobj
+7966 0 obj <<
+/Type /Page
+/Contents 7967 0 R
+/Resources 7965 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 7903 0 R 7907 0 R 7908 0 R 7909 0 R 7910 0 R 7911 0 R 7912 0 R 7913 0 R 7914 0 R 7915 0 R 7916 0 R 7917 0 R 7918 0 R 7919 0 R 7920 0 R 7921 0 R 7922 0 R 7923 0 R 7924 0 R 7925 0 R 7926 0 R 7927 0 R 7928 0 R 7929 0 R 7930 0 R 7931 0 R 7932 0 R 7933 0 R 7934 0 R 7935 0 R 7936 0 R 7937 0 R 7938 0 R 7939 0 R 7940 0 R 7941 0 R 7942 0 R 7943 0 R 7944 0 R 7945 0 R 7946 0 R 7947 0 R 7948 0 R 7949 0 R 7950 0 R 7951 0 R 7952 0 R 7953 0 R 7954 0 R 7955 0 R 7956 0 R 7957 0 R 7958 0 R 7959 0 R 7960 0 R 7961 0 R 7962 0 R 7963 0 R ]
+>> endobj
+7903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 239.494 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1109) >>
+>> endobj
+7907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 221.867 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1110) >>
+>> endobj
+7908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 242.04 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1111) >>
+>> endobj
+7909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 229.344 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1112) >>
+>> endobj
+7910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 249.518 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1113) >>
+>> endobj
+7911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 697.526 260.927 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.32) >>
+>> endobj
+7912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 687.265 238.777 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.32.1) >>
+>> endobj
+7913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.385 253.661 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1115) >>
+>> endobj
+7914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.2 266.626 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1116) >>
+>> endobj
+7915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.168 257.875 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1117) >>
+>> endobj
+7916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.983 270.84 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1118) >>
+>> endobj
+7917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 624.874 216.559 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1119) >>
+>> endobj
+7918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.766 261.874 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1120) >>
+>> endobj
+7919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.657 274.839 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1121) >>
+>> endobj
+7920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.548 257.391 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1122) >>
+>> endobj
+7921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.44 270.356 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1123) >>
+>> endobj
+7922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.331 229.524 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1124) >>
+>> endobj
+7923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 228.152 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1125) >>
+>> endobj
+7924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.113 241.117 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1126) >>
+>> endobj
+7925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.005 215.232 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1127) >>
+>> endobj
+7926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 515.896 228.197 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1128) >>
+>> endobj
+7927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 227.202 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1129) >>
+>> endobj
+7928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.679 234.913 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1130) >>
+>> endobj
+7929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.57 247.878 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1131) >>
+>> endobj
+7930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.461 240.167 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1132) >>
+>> endobj
+7931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.429 216.056 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1133) >>
+>> endobj
+7932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.32 261.372 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1134) >>
+>> endobj
+7933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 274.337 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1135) >>
+>> endobj
+7934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.027 229.022 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1136) >>
+>> endobj
+7935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 407.044 227.65 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1137) >>
+>> endobj
+7936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 240.615 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1138) >>
+>> endobj
+7937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.826 221.275 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1139) >>
+>> endobj
+7938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 234.24 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1140) >>
+>> endobj
+7939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 358.56 214.729 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1141) >>
+>> endobj
+7940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.451 239.512 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1142) >>
+>> endobj
+7941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 252.477 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1143) >>
+>> endobj
+7942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 227.694 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1144) >>
+>> endobj
+7943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 260.825 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1145) >>
+>> endobj
+7944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 273.79 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1146) >>
+>> endobj
+7945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.907 261.542 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1147) >>
+>> endobj
+7946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 274.507 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1148) >>
+>> endobj
+7947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.739 226.7 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1149) >>
+>> endobj
+7948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 234.411 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1150) >>
+>> endobj
+7949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 247.376 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1151) >>
+>> endobj
+7950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 239.665 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1152) >>
+>> endobj
+7951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.255 271.342 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1153) >>
+>> endobj
+7952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 284.307 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1154) >>
+>> endobj
+7953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.038 223.579 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1155) >>
+>> endobj
+7954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.853 236.544 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1156) >>
+>> endobj
+7955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.821 243.753 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1157) >>
+>> endobj
+7956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.636 256.718 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1158) >>
+>> endobj
+7957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 233.478 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1159) >>
+>> endobj
+7958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.418 224.53 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1160) >>
+>> endobj
+7959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 237.495 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1161) >>
+>> endobj
+7960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 228.761 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1162) >>
+>> endobj
+7961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.092 241.216 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1163) >>
+>> endobj
+7962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 79.984 254.181 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1164) >>
+>> endobj
+7963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 218.065 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1165) >>
+>> endobj
+7965 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8028 0 obj <<
+/Length 3516
+/Filter /FlateDecode
+>>
+stream
+xÚíMw㶆÷þZÚ £ÀÅ÷¶mÒs²HOïÒ,[™Ñ‰-Oe9Múë{A €I°¸I:c®Æ3#߇ß¼¸ø _½[ñÕß®þ|wõ§/\9æ‘«»W–3gÌÊz`F¬îVß]ÿåï_ß}ñõÝ·7ßß}µR\1
+ÀÖô5
+Už Uøo©B¢į́є¹»üúõ©ÀõŠ9Mõ;œú°¹‘üúçíýæ¥/Tðê“ÕošÒ«Æû(õI¯®F¯Ò2Žý7^¥aN©½¶3£^Sæ¤^Û±'½¦Ôûçû—BGœq. 
+¤(l‘,Z²ÂíÌh‹”9i‹vìÉ)uÊÍг-Rj9Á±^.^hð~ÒÑdÝÉ`¤
+/´3£RæËýûÍÃë㦠L!™tŠ
+s~ÂáGCžÐu’yésèv7`
+¿KÀDS©sæá¹<µi(ˆajSªøþùårÈjÅR` Æ€±éM{ž.ª28Æñ.,sFGc <-¬ÌË‘36?†™Æõëã¡$VÉŒ2là˜ýKÓgÇIÎ Ñ*ûÿ=ù›wã#jÕ¨V1'û!K ¨\‡HVÛµ¶3£ZSæï»õÓö¾”e`pG€ eEnsj! wB,Iø¸N-æ}fV¯Š½SekÓõ[®F§į́Ӕ9©ÓflÔiJ-ç‚KXÔÙ¬Níö»5¿IK_¡NæIs¼ìg Øk¦t|Ù‘
+lý¥Z=G¹Za×af<ÿµõ86¡.RRÔ·u›"+tÛ̲M¹å~Uy»(v¾b«úZc™Šzuˆ$j$ÛÎŒšM™ÃÕ¸Px €ž
+t¼ç%8Tã ôÁ…r5, <¦rÍf­®ÆèL ’#a&Ycvf´GÊœ°G;4Ú#…VØ£|¶G
+X˜§ìâ‰1OT%9J2É)–ª†H‚×”ä˜Ñ)sxW ºBhl¨Æ…-G¶Ðwï?¥mdQnVz#ÃD“B«’3ïMVÛ™Q«)sR«ÍسVSl¹#õØ©/¥¨ðŒ;ŠJœŽ9WS1&`F¦ÌÑuÿR9
+®·ŒK—sï÷›õCqí¿eÊRp!L[Ü#–üâbý¿g›qF‚ý·‹VC$k«êíÌ艔9í‰vnôDÊöD3÷쉌;°#ôŒPópPaÔ¡(„‡H¦æÙ@€<ù CŽì-
+0¦^©¸°4CŠeBñR¹rxzÆ2)ýœž5üIrZBˆ$ãnþ å¶C£rSh…rÛÁQ¹Ù·X¬¡—ÕýäzUøL•õ¶ ÎÛìÇõÚzM¡C&f) Þ36‡ŽM˜h¦À€A8&„ë F¸ƒÅCIˆeZÌ©j(‰#~’S B¤ œk´C£5Rè„5Ú¡Ñ)´ÂÍà³5²&./J1~qŨ+ª
+ 4ÅíÆHÒœWþžxŸ~¹GåÂr¯û÷:¬¥QúÂÚš‰›[kÍõ—¯»ûÃöywlà¿>ß¿>mv‡u÷Où†æŠ³öÕí›»C lk¹’˜p„XµîH#(&­˜¡ôB
+ËBö„DÜZ<fìî\M¶–×9y¿y·}9lö¥üÒ2# ¸Û• ½¯|îQ.NàWâ³}UDeâ7OÓB2˜±™¸ é™†5vÍ«zI·s£¤ðënDÓ5Í-9œ1>ÿÊÃ’öåÑËg½–GOøîPõìÁ÷ÓÐh³ ÉQémë!8³x×9g>î:¾ßoÖ‡Mi,oŽK  ÎÇç)u\»íá×òŒ–4ä0¡Åuü´~)ågaíLÌr™3KSŠ/@és`Ü»z€óŒ´›
+;I´—L€ÏÙãVÀQŒ¥@‡bU8 2Cy!¼¸Œ¢©A´~¯­K'JÛÅ  “¢·uÔ á,{Š'BdÅøë„ŽK §¥ÇsÔØGxAsq†÷ÐcÇn-óÇ’5ªÛ-Yß}‡i¼ÆýÓGÅb ÃubÛ‘Q±)³J±Íè³bSô@· –ií) ’wg¤fÐðŽ¡Ò³Âá³ÂP@5&LÂäЂ7­voû!ŠbƨthyC`9 ¤¼©±\;2Z.eVY®}¶\Š~ZÿRr\8ÏP0A3kLÎr\˜c•Ðn1­Ì¡¥w'Z²³iLbÝŒì Ç”ºq{ûÑx*œæèjŒ×ŽŒÆK™ÇrÎi"ü°}*îSLã ý
+BmJx•_AiР—§§
+Lï…Ÿñ¨
+N¿õ•ôµ‰ >ÌÐl˜f5•èüºûqͶ#£fSf]); ¸€°ÍZè]@iw£ÐKF^'\Éð‘5#=‚î „‹”¨Ñm;1ê6AÎm3ÿ,Ûì+#Uº]?–rsìá¢@ƒë*DÙW/Íú‹¥O¿¨®Øî•÷õ}zXMH` #y•3ZÑ)q†1ñg[¤øÃûýóë»÷^åÑ£8µPXá˜ÈôZº4v´úÍÁÌÉjÂÛŒ=Añ=j<ÐŽŒ.H™3\Ð|g¤pxE2èëÝýPzÓv0ƒóŠ‚¯y7U›7@á!á;x;㎞tˇ1w5µËvàÉ ±nŠkh燽)VAÆ/´-ä’×OΛ
+9£ˆâp`
+íÐ#ºB«íÀ“V3b½V›ùQ«¿”Ëc»ào´ó@v'&§¼RÑÙÅC=0§f솲øˆ7)½å˜ošÉ³}ÂVÑv¤C[€Ï˜ã{ €IK
+endstream
+endobj
+8027 0 obj <<
+/Type /Page
+/Contents 8028 0 R
+/Resources 8026 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 7964 0 R 7968 0 R 7969 0 R 7970 0 R 7971 0 R 7972 0 R 7973 0 R 7974 0 R 7975 0 R 7976 0 R 7977 0 R 7978 0 R 7979 0 R 7980 0 R 7981 0 R 7982 0 R 7983 0 R 7984 0 R 7985 0 R 7986 0 R 7987 0 R 7988 0 R 7989 0 R 7990 0 R 7991 0 R 7992 0 R 7993 0 R 7994 0 R 7995 0 R 7996 0 R 7997 0 R 7998 0 R 7999 0 R 8000 0 R 8001 0 R 8002 0 R 8003 0 R 8004 0 R 8005 0 R 8006 0 R 8007 0 R 8008 0 R 8009 0 R 8010 0 R 8011 0 R 8012 0 R 8013 0 R 8014 0 R 8015 0 R 8016 0 R 8017 0 R 8018 0 R 8019 0 R 8020 0 R 8021 0 R 8022 0 R 8023 0 R 8024 0 R ]
+>> endobj
+7964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 231.03 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1166) >>
+>> endobj
+7968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 228.663 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1167) >>
+>> endobj
+7969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 233.648 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1168) >>
+>> endobj
+7970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 246.613 732.048]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1169) >>
+>> endobj
+7971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 227.031 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1170) >>
+>> endobj
+7972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.526 239.996 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1171) >>
+>> endobj
+7973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.543 205.907 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1172) >>
+>> endobj
+7974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.309 218.872 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1173) >>
+>> endobj
+7975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.326 226.081 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1174) >>
+>> endobj
+7976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.092 239.046 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1175) >>
+>> endobj
+7977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 637.108 225.283 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1176) >>
+>> endobj
+7978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 625 232.976 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1177) >>
+>> endobj
+7979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.842 224.028 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1178) >>
+>> endobj
+7980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.657 236.993 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1179) >>
+>> endobj
+7981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.674 206.409 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1180) >>
+>> endobj
+7982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.44 219.374 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1181) >>
+>> endobj
+7983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.456 226.583 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1182) >>
+>> endobj
+7984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.222 239.548 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1183) >>
+>> endobj
+7985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.239 217.563 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1184) >>
+>> endobj
+7986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.005 230.528 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1185) >>
+>> endobj
+7987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 516.022 241.126 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1186) >>
+>> endobj
+7988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.787 254.091 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1187) >>
+>> endobj
+7989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.804 226.529 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1188) >>
+>> endobj
+7990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.57 239.494 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1189) >>
+>> endobj
+7991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.587 208.901 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1190) >>
+>> endobj
+7992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 455.353 221.867 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1191) >>
+>> endobj
+7993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 443.37 229.075 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1192) >>
+>> endobj
+7994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 242.04 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1193) >>
+>> endobj
+7995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 419.152 216.379 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1194) >>
+>> endobj
+7996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 406.918 229.344 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1195) >>
+>> endobj
+7997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.935 236.553 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1196) >>
+>> endobj
+7998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.701 249.518 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1197) >>
+>> endobj
+7999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 370.717 231.778 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.33) >>
+>> endobj
+8000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 360.33 222.309 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.34) >>
+>> endobj
+8001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 346.5 236.458 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.35) >>
+>> endobj
+8002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 336.113 238.777 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.35.1) >>
+>> endobj
+8003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.157 235.065 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1205) >>
+>> endobj
+8004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.049 245.035 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1206) >>
+>> endobj
+8005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.016 253.661 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1207) >>
+>> endobj
+8006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 285.907 257.875 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1208) >>
+>> endobj
+8007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 216.559 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1209) >>
+>> endobj
+8008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.614 261.874 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1210) >>
+>> endobj
+8009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.505 257.391 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1211) >>
+>> endobj
+8010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 228.152 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1212) >>
+>> endobj
+8011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 215.232 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1213) >>
+>> endobj
+8012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 227.202 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1214) >>
+>> endobj
+8013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 234.913 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1215) >>
+>> endobj
+8014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 189.038 216.056 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1216) >>
+>> endobj
+8015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 176.929 261.372 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1217) >>
+>> endobj
+8016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 164.87 227.65 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1218) >>
+>> endobj
+8017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 152.761 221.275 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1219) >>
+>> endobj
+8018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.603 214.729 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1220) >>
+>> endobj
+8019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.495 239.512 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1221) >>
+>> endobj
+8020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.31 260.825 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1222) >>
+>> endobj
+8021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.277 261.542 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1223) >>
+>> endobj
+8022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.218 226.7 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1224) >>
+>> endobj
+8023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.109 234.411 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1225) >>
+>> endobj
+8024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.951 271.342 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1226) >>
+>> endobj
+8026 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8089 0 obj <<
+/Length 3270
+/Filter /FlateDecode
+>>
+stream
+xÚíKsÛ8Çïþ:JcÑxã˜Iâ­šMjíTmeç H´£Z[òÈòLòí§A‘
+A‚i ³‹§<,÷OþÝh4¤“› üýâ‡ùÅß® Ÿb•â“ùõDSb”šhˈ‚É|5ù0}ùöÍüõ›ùûÙ/ó'‚
+˜Åßnüìâõüâ× ÀÑ  C “åÝŇ_èd…?ûqB ·fò{þÉ»‰œHÁñï·“÷ÿº Å—;ØÙÝß_WÈÊ×A‰¢r¢Z~áíÝ}óû€4D–’©®ïƒOn_&€t4ó‘«ìa¿ÛÎ8~  -%V@´åDqðÑ·ÛåŒÑéÿš\F-±<Á#3À°Ú#ßî>æȲ»&.‚)™]J©ÈÞÿü ß«i«ä´*Z¦.àÉ¥f„‚ž\b‹µ}ô*,ÉRVàÿ¡¥‚g—Š­²7Ȩ€
+²½Š8f2 G+¬‡mª”sö\Ôö§FY)ÇéwÿäC)ü ÚH-¡Lz‰7ZŠ·
+ Wþ\‘Pžj^{ÒŽÊv‚à)À $Î[y È? äDly7 ¶KŒ|&E…ÜY¢¦ˆyY‹h )˜.N+ð™u@n`]:ƒ“IZÉq%çtP(9D§‚ÔO
+rK¬}tÏ,uZev§!Z%[LòdÜ”*`ë)ÈÀĈA=fE­'P.ÓÄ(ÙG¹ñÌR¹Uf{bñ—@1Q\úÐî Äò`—(V26Î.OÏ.•¸T7E9ÛYÒR÷qxféUf{9d,£*ß±ãaCålk¿#M}Ïá\
+åØ‘F¤(e;KJ˜>Zg–Z­2;KÙ?•€k5¡ÜøÜÎåH¡Spó-)ªÆ –³ÇåÈÐr¤TC–#¥¢yŠâ ³$¹íá ˜…OøÌŽ:6#Ƥ
+¥¢!Á‹­œûpRŒcø[ñLí¶ÃqŸÙ5…”„I‘€‹ÑÛ
+QãŠÆ ä  ¤&@„UšH–¢†í,qÆzé6Z
+m›Ab4æ:ÔZLûЮ¤$‚™`†
+bŽgze!‚NSìgu–€Ê~š§–š­R[N#xhYðð ŽÂ±T¥
+—oñ'u«9ìšHЭhI–G´÷Ç´¤¹gBŒ;(¤n–ñ'I˜ªÙ¥Ú Ñ×éД¨¸ÃÔÜäÎï, Éë}ŒþK>Ыu™Š¾Ë®Ý!ïl—m– ç~d¨;/Å@M11Y
+û4žÉ
+9YˆØg†¢1N‹í3TnÏpÌ$ÆBõ¢!UüùÅ»Ðz¤$8d$@ºûDŒà>³MÀ8ùÒF¦ rK„–>µ]ÆÚ£L
+®«‡ÉZ âñ1­Ï2,C¾i˜¸ÝNÕ¸#Ž…¸Ñ,Ïv‹;yw•yJÜñÔRÜUêiqÇsKq{ÜPœ6Ãåý] Øp(ñC©èêq³ ׆6Í}B|,ÂõXåÂí«—k£C-´®:C\©Þk£ ÀÅÚ¨GÞe7ë‡}¶ 4MW ÀùÁoV{äcÍ¿±Z'@<×úrÏ%œašæšˆÇÙšh¡]ÓhˆÉþ[L€KMWÉ›UªÚM}¢Ñîâ/fkÝ®j«ì¹1´cgä7¹6?1îL{âPØÚÜá°8¯p†*6Zhî>Ñ?jÄs˨QwítÜ!4ÜËò£ø'QÝ0í¢£”Øò@UÕEsKÑUÁãnÈo¬·CEn¨…Vűü5"¬·â€ Éyäq7ä7ÐÞäÒöŒlì­Ò½÷V1w§g\„)öV9KD™‘în²=YÞßÚV¥”9ÓT}ܲ‘J—©æ3À<õË}¶Â¦=«r罃Ê@¯?=6+C¨DåKç"qJJ´8XV}¥C5fƒy(Ouïªa܇þ¾Þ
+WeMuUjkÐ{7åÂñá®1<0#Ï<öCÇÆZ þÊ6ƒ¹ëo,åÆDƒpbÇL~QMDb7ÐB{b‡†Ø€c. ÀebW%FúPÈ D¹´ ë”ri}ìñ^o©Fœû¦ì^¡#¬lP¨Ï(Yº•¥ƒ!(
+“o»dɱ7M®».Yi¾߸_JAĬ[IãW™Ëj[/³põ׈x®«ýJ¿‹›¼>EgüGÉ°ÔÝ›8ãÎ •ZGKT±þb'—j¯’»åÏ,õ^eÞÊ_ø°^.nCgñq´ƒMí®†£´ÖÔÞ&9#S ¥$FKÝîq‚ë3v*w}qä/ §rr³å!­N•€\8•G®ut-¹QÄ
+>z{D$èH·„HkOûÕ£Gé8’V…áB W¿m-¦˜Ü.V¡0 ¡¨~P:¿:" HC´9XÒü¸Uå:TùqLR Ý]ø5¢wÃwÿ´xžÛO’š>åÅNWºVM]n7ÛÐÕŸ®{¨@aÈè7 º·cæ†;ÞPƈUcÛ†åã:ÈØœŸå«õjðu ®(f‡.Ùˆ|[ŸDŸÕKÇçe››õ&{eã10!NÀÅÀÕb=î~»/ÒðêjŠ¦£Š†¨HFõÚœna4QÔ¦PZåòü.ûõ1Û,¿4–nÔ¸X“ÀizHŒ
+endstream
+endobj
+8088 0 obj <<
+/Type /Page
+/Contents 8089 0 R
+/Resources 8087 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 8025 0 R 8029 0 R 8030 0 R 8031 0 R 8032 0 R 8033 0 R 8034 0 R 8035 0 R 8036 0 R 8037 0 R 8038 0 R 8039 0 R 8040 0 R 8041 0 R 8042 0 R 8043 0 R 8044 0 R 8045 0 R 8046 0 R 8047 0 R 8048 0 R 8049 0 R 8050 0 R 8051 0 R 8052 0 R 8053 0 R 8054 0 R 8055 0 R 8056 0 R 8057 0 R 8058 0 R 8059 0 R 8060 0 R 8061 0 R 8062 0 R 8063 0 R 8064 0 R 8065 0 R 8066 0 R 8067 0 R 8068 0 R 8069 0 R 8070 0 R 8071 0 R 8072 0 R 8073 0 R 8074 0 R 8075 0 R 8076 0 R 8077 0 R 8078 0 R 8079 0 R 8080 0 R 8081 0 R 8082 0 R 8083 0 R 8084 0 R 8085 0 R ]
+>> endobj
+8025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.146 223.579 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1227) >>
+>> endobj
+8029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 746.037 243.753 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1228) >>
+>> endobj
+8030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 733.852 224.53 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1229) >>
+>> endobj
+8031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 241.216 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1230) >>
+>> endobj
+8032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 218.065 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1231) >>
+>> endobj
+8033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.526 233.648 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1232) >>
+>> endobj
+8034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 227.031 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1233) >>
+>> endobj
+8035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.435 205.907 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1234) >>
+>> endobj
+8036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 661.326 226.081 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1235) >>
+>> endobj
+8037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 649.168 224.028 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1236) >>
+>> endobj
+8038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 637.108 206.409 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1237) >>
+>> endobj
+8039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 625 226.583 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1238) >>
+>> endobj
+8040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 612.891 217.563 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1239) >>
+>> endobj
+8041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 600.782 241.126 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1240) >>
+>> endobj
+8042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 588.674 226.529 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1241) >>
+>> endobj
+8043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.565 208.901 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1242) >>
+>> endobj
+8044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.456 229.075 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1243) >>
+>> endobj
+8045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.348 216.379 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1244) >>
+>> endobj
+8046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.239 236.553 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1245) >>
+>> endobj
+8047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 529.852 236.607 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.35.2) >>
+>> endobj
+8048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 199.63 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1246) >>
+>> endobj
+8049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 194.914 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1247) >>
+>> endobj
+8050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 491.804 214.236 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1248) >>
+>> endobj
+8051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 479.696 206.454 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1249) >>
+>> endobj
+8052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 469.308 226.99 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.36) >>
+>> endobj
+8053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 455.478 221.956 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.36.1) >>
+>> endobj
+8054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 269.163 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.36.2) >>
+>> endobj
+8055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 314.434 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1254) >>
+>> endobj
+8056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 324.898 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1255) >>
+>> endobj
+8057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 308.947 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1256) >>
+>> endobj
+8058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 396.656 319.411 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1257) >>
+>> endobj
+8059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 384.548 302.482 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1258) >>
+>> endobj
+8060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 312.946 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1259) >>
+>> endobj
+8061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.33 238.777 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.36.3) >>
+>> endobj
+8062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 346.375 235.065 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1260) >>
+>> endobj
+8063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.266 245.035 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1261) >>
+>> endobj
+8064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 324.004 236.607 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.36.4) >>
+>> endobj
+8065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 311.896 205.243 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1262) >>
+>> endobj
+8066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 299.787 199.63 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1263) >>
+>> endobj
+8067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 287.678 194.914 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1264) >>
+>> endobj
+8068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 273.722 240.259 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.37) >>
+>> endobj
+8069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 261.69 235.71 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.37.1) >>
+>> endobj
+8070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 249.631 236.221 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1268) >>
+>> endobj
+8071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 239.244 238.777 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.37.2) >>
+>> endobj
+8072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 215.814 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1269) >>
+>> endobj
+8073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.179 251.832 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1270) >>
+>> endobj
+8074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 287.177 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1271) >>
+>> endobj
+8075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 190.809 251.33 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1272) >>
+>> endobj
+8076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 178.7 236.607 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.37.3) >>
+>> endobj
+8077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 189.239 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1273) >>
+>> endobj
+8078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 207.449 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1274) >>
+>> endobj
+8079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 140.527 210.345 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1275) >>
+>> endobj
+8080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.495 198.142 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1276) >>
+>> endobj
+8081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 179.932 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1277) >>
+>> endobj
+8082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 106.048 202.051 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1278) >>
+>> endobj
+8083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.218 216.693 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1279) >>
+>> endobj
+8084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.109 163.523 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1280) >>
+>> endobj
+8085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 69.722 172.741 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1281) >>
+>> endobj
+8087 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8150 0 obj <<
+/Length 2481
+/Filter /FlateDecode
+>>
+stream
+xÚí]M[#¹¾ó+úhPT’JGvö™}f!?¹ÌîÁ±{?Ó0ùõ)¹»½n·lwÉ⾌a0õ6ªª·>T’yv›ñ짓F'¹°2³Ìi-³Ñ—ÌpfµÎŒLC6šfŸ?^]ŽÎ/G7ÃßF?gŠ+&„£ßnüìä|tòû ÐxkAÖ2+T6¹?ùüϦô³Ÿ3Τ³Ù¿Wï¼ÏJ†JÒ×wÙÍÉßNxùp…œÅm)ðº|\… Š3Í13¯ø_Cƒñbš?MšÏF0ÉÝê7„Þ÷\´nýPh£˜s®=-òÉrö0o î˜ñ¸¨ÃŽŸx¿Ï$
+4/‰[¹?•-˜”2¬&ó²{?žÍÙäñ±S]¨•8æœâ5Î5m¨¯ý^­öÓÂRÝ…µ_W ;k?-|¿ [×~ €ËÚ¯†|¨ö‹‡­j¿¬'Œ¦Û¾èÛvˆÅ ª­$#°”R}ý)ú`.¯(—o$
+RÐ  ÛÙK4èÚ^6QoFg×£fVö&6‘¶FQéÂU!AÀ±‰Dƒ®Mdõftõ×&¥¨žK’p ¥1à0¡P’éœng(Ñ kC©¡ž]ÿt>
+À¢Ÿ¡2)`Q3ëLÖ§BÍ<HÙ²«‰­fyÑoè¾MÙQ”ÎÖ¹¸ÔrÍœ‰ÚZÕ’Ä•$ª÷ª-ÝJ—ÓmÍ!ö¬›e{ˆÜ0¨×¡u‹F9µj°Ä·h¼$mö›:Êÿ“€jÁ8ÔA¿><-;oÐ(Á¡)XPînõI&­>¨ú>=1'\íï fe8ÓqÓÒ%1{I
+eOÌ)ˆ»³hOÌhWgU3I’ëéæÌZ1s µ˜©îJÎhMÏÊ#êYùÿ„•¥"¯Ñ)X™$0=+ÿOXY¶ge!˜€;š^‡ÊÎCÂ’'w¦IàÂëV&vÝÊ”ýèQºÔ]èrŸi»:îå=%f¼‡3£¼Ã,¯ˆÎnçÉm§ûiC­:½ß{TÝ{Ú¨×"³q¿•ŠI’vë3–ãÛæ™;-z ¿½† e,qÓµ•†IVÓµhxë´0¥À% :dŽÛ:êcutwÙŒ©JöIU+C²†U@Û7õß&ìî=‚!•c7S[Áð’¤ÖýŒ·ãèÍó6®¢¬ÕÜÝKóT)ôs°1s°ºë¬j]5JL*› jô’@«ÆŽ³° ûYX}8Ajœ>Vª* Ïç~ùŸ}‡È«áZr4Šqþö“­ 7„A¨ºäæ]Æ0Óå¤ñUåEÅâU–}Jü)ë™kƒ¹Ìn¬ôÊ„EßImÈí{ Âhæâ¦2ËÊK2 Z•P P˪†Ú—P­K¨Ý~
+Àß>6OŽŠ­S ¡ýÕi*AŠá%éj¢òy9»ëÜ–÷¹…'Ûµ9}sº 1Û.çb…â ­‰8ÛUÂÎs±^´¶õ¹ØÀå¹Øòãxñ”‡Å‚6 PÌ¢©£V‘bkÞ—Þ©e
+L@†(ë˜ûîèCq¬ñ¨›ûËT‡ÑЀût”°Û}H0®½ûÄW|È}¢Q×ú4û/÷CÀàè!e
+`A‰­“[À»}ÈU;¨i·;¶[`Ânår>…:´¤.Hošü#ªA‹L8X ‚r†äéÛ}sGÔöÍÀĺöÇT¬®W€áËiP’²‰»ü­Ö:îF$§J!‰ërƒ4¿ •›’J—RwtÕ ‹«…ïžS{ª·¬xádY›s”n]úKî"/X.+BpÀ\52¼ª»õš‘‹~L-¦,Ôýõ ‡WÕuÉf)AcNÆ\’ÔUÂÎlÖ 2²ý¹ €Ël¶†\$wÏóP‘3+e
+`'
+¹õ'‡&Cß:܈n÷æ¤`:d›>YŒ¼_¹L7ý«®f–ÇÓé¢Áû’÷ çw¥®]ÂÙFÝJ2)ª / «åÉÝÃS`YB¯éWÑ´m¡i ôêRhš$©r¸öá1oÞ¼VmX÷~ýª~}èF
+endstream
+endobj
+8149 0 obj <<
+/Type /Page
+/Contents 8150 0 R
+/Resources 8148 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 7845 0 R
+/Annots [ 8086 0 R 8090 0 R 8091 0 R 8092 0 R 8093 0 R 8094 0 R 8095 0 R 8096 0 R 8097 0 R 8098 0 R 8099 0 R 8100 0 R 8101 0 R 8102 0 R 8103 0 R 8104 0 R 8105 0 R 8106 0 R 8107 0 R 8108 0 R 8109 0 R 8110 0 R 8111 0 R 8112 0 R 8113 0 R 8114 0 R 8115 0 R 8116 0 R 8117 0 R 8118 0 R 8119 0 R 8120 0 R 8121 0 R 8122 0 R 8123 0 R 8124 0 R 8125 0 R 8126 0 R 8127 0 R 8128 0 R 8129 0 R 8130 0 R 8131 0 R 8132 0 R 8133 0 R 8134 0 R 8135 0 R 8136 0 R 8137 0 R 8138 0 R 8139 0 R 8140 0 R 8141 0 R 8142 0 R 8143 0 R 8144 0 R 8145 0 R 8146 0 R ]
+>> endobj
+8086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.07 247.86 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1282) >>
+>> endobj
+8090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 745.961 230.922 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1283) >>
+>> endobj
+8091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 733.852 230.791 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.38) >>
+>> endobj
+8092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 723.591 238.777 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.38.1) >>
+>> endobj
+8093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 215.814 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1287) >>
+>> endobj
+8094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 699.373 236.607 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.38.2) >>
+>> endobj
+8095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 210.345 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1288) >>
+>> endobj
+8096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 673.385 198.142 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1289) >>
+>> endobj
+8097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 663.047 179.932 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1290) >>
+>> endobj
+8098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 649.092 262.917 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.39) >>
+>> endobj
+8099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 638.83 238.777 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.39.1) >>
+>> endobj
+8100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 624.874 223.785 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1292) >>
+>> endobj
+8101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 161.031 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1293) >>
+>> endobj
+8102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 602.504 227.339 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.40) >>
+>> endobj
+8103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 590.395 269.163 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.40.1) >>
+>> endobj
+8104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 259.65 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1296) >>
+>> endobj
+8105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 566.178 235.235 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1297) >>
+>> endobj
+8106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 554.069 247.69 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1298) >>
+>> endobj
+8107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 541.961 242.713 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1299) >>
+>> endobj
+8108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 281.806 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1300) >>
+>> endobj
+8109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 517.743 236.607 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.40.2) >>
+>> endobj
+8110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 196.474 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1301) >>
+>> endobj
+8111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 491.804 257.43 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.41) >>
+>> endobj
+8112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 481.417 236.607 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.41.1) >>
+>> endobj
+8113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 469.308 196.474 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1303) >>
+>> endobj
+8114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 455.353 263.41 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.42) >>
+>> endobj
+8115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 236.607 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.42.1) >>
+>> endobj
+8116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 432.982 196.474 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1305) >>
+>> endobj
+8117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 419.152 237.041 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.43) >>
+>> endobj
+8118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 408.765 238.777 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.43.1) >>
+>> endobj
+8119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 394.809 195.165 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1308) >>
+>> endobj
+8120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 382.701 193.677 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1309) >>
+>> endobj
+8121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 370.592 214.478 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1310) >>
+>> endobj
+8122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.33 236.607 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.43.2) >>
+>> endobj
+8123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 348.222 179.932 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1311) >>
+>> endobj
+8124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.391 163.523 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1312) >>
+>> endobj
+8125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 324.004 227.572 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.44) >>
+>> endobj
+8126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 310.125 276.39 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.44.1) >>
+>> endobj
+8127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 215.689 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1315) >>
+>> endobj
+8128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 287.678 238.777 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.44.2) >>
+>> endobj
+8129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.722 214.478 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1316) >>
+>> endobj
+8130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 261.739 228.792 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.45) >>
+>> endobj
+8131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 251.352 238.777 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.45.1) >>
+>> endobj
+8132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 237.396 238.606 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1318) >>
+>> endobj
+8133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 225.288 244.946 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1319) >>
+>> endobj
+8134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 213.255 172.723 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1320) >>
+>> endobj
+8135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.07 188.7 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1321) >>
+>> endobj
+8136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 190.809 219.323 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.46) >>
+>> endobj
+8137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 178.7 269.163 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.46.1) >>
+>> endobj
+8138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 213.958 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1326) >>
+>> endobj
+8139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 174.229 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1327) >>
+>> endobj
+8140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 142.374 177.215 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1328) >>
+>> endobj
+8141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 128.544 176.229 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1329) >>
+>> endobj
+8142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 118.157 280.309 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1330) >>
+>> endobj
+8143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.201 212.604 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1331) >>
+>> endobj
+8144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 92.169 211.986 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1332) >>
+>> endobj
+8145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 80.06 211.493 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1333) >>
+>> endobj
+8146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 68 212.102 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1334) >>
+>> endobj
+8148 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8211 0 obj <<
+/Length 2273
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÉrÛF½ë+p$ϾeKv9%K‰Är%åø@“°Ì
+E:$•Xùú46 à @@Ù.q.¶Ö~TÏë½ÄÑu„£7G/ÇG/^kid¤dÑøs¤0ÒRFÊP$I4žE¯.Îǧçã«áÇñ/ÇQjà·­ïŽþ>"ð-‘{AZ#My4½9úðG3øÞ/FÌèèßô'o".œÁÇ‹èêè·#œ¿¸LÎú:x™¿\.J/—`ˆW’ \¼`…¸Dt8RJÆCBñàîk<‹?GTéÁÉjz{/·“í|µL_w}1Nh8Bfÿ‰ÊgÎ/öóÙO t: ç*ÙÕ}ÄÒšD#BÁ&ÓôÅç?1f«Éìb9_­–Ûõja©”ñg¦¨ÇŠ6R4)xTÑ°.q™e\~}»œ¦¤ÝÏcÍX pU¿ïD8A|ødX£{Ghî}SYGL‘Î>Œ+ð]© ÅDvì«Â°lÇJG‚ˆ>€•B‹*ò×ÉzÛ¨cD¤ê•bŠ´PUÔùrëÀCÐ’õI‚U17ÛõpD`_[æ#èá…f÷ä6Ÿä„¨ô1ŸŽêÍIÔÚ|ü ó)#ï3oÔ{ó)£næÿ É.`bàE²>€)„'Ãv€ëmÈ(ó¬£yã‰Fš ªu5¶Ÿœ9è)@»˜BúŒ‘"ʇžB jH*Irsw³{NÒèʾÏiŽ¤–Õ\ù:ÞºŽ›ÁqËHB™$>Ç 5É$ñ3^8 %C~ H)7¦
+ùÏŠÁdqïòLh˜åïG00ËT™5‚Ž$ÁƒUöfŸâëùM¿~Í
+…×óEœ}t 50ÃxÉ
+ ­"É!sUÌ+L`DHbÅ3ÌätϬV‘dáp}w$HZëZ!¢h‰†6RÞ*7“¹ÝJf˜¾ü@/öîøí¹;ÛBGCÖËÕc:å*Hæ»JÀå‹Õ80Ä%%Ï)xÐMô+1…˜æUŠ4µ…¤FX˜H‚3^m!¨Üy&I°9K÷Å»pî{+£†‡<…ï¤æm\$Yç ‚8#E?{¾ §ý„§-)ÂT8’œ|Vö~¨ð`’7''Ÿ†Š*¸1ã!X‰ò´hýÃo"N˜Gë¿«„ÚÖ"ˆ‚ ¶­ÿ€óÖ(|cxpç€6òÁ;ùC'“ÉXz¹šÅ6“õÁ' Í^ÄÍkÎÃ>á®êy ‚n?î¸àu¹¯½¡ïy]†ÞÞ{n{°Eqn{@¦€HIy³M‚Ç+ŒsÍB8ncHP(#| ©£„zC‚ÜИö³á€ C*#¾]N]&ÄÓ–~ `ŒL™*¨+4H"Bšùh^ƒ°V>¼î(¡ž×D# ‚ZóÚ¸àuy¯ýA ^—A›BQˆ(Ùr²=‘l±VëCƒæ2äXmLKd”ö1¡ŽêM)eÚ›?paBeälj¾vàêdhÂúÀMVº%«âº¢Ã*ô"l†Ó. çàü´4 ï*¡–በÙ>Fô€›¼ ¼—ß=Àæü.Ã6 Š¸ì7Ù-%Õ¿¶>Bf‚Õ-MQƒ·Zzº¼Ú/gÍ‹-®­&p­N f¹Ew]nY%ÛE¶ÜBÃrË÷ Óv×hJ~¤Ø£þèíN~¤0^·ºJ¨O~@¡²à"û)#·i¡úC-Ô
+t‹jÈy uçžÙ¡‡¼§A(¦Ä§ÇÔUB½ Lt{ ò.,¨ŒÜÜcê4ï1U@[ô˜ü‘‹SÙa;ŒáŸãu3!‚Ó,ÖÄ:J¨7! 5.nßcê¸0¡2òþÜ·¨Á˸-Špoà¢/ãºâOèbµ+¿ª?“—ßëÍb´˜oãóåtq;‹_Üe˜N“ÈàK·ªœŠçZdC êhYg?(&ÔÙû Öéñ—W®› R¤+ÁL1¤4õºÙ
+—ÿzR{Ý”Ç@N3RßÄÅ
+¨¾1¡šr]ÅêY†BÞå~kÉ;׆CII n‰º¼ƒÇ~¹w-×;®Á?¡›¸Œñdcyú$m©v—ñ&ÎfÊi_ßqýK° êZU Uïzk«KLPr+%ëݤ9ß’ØGnÁh µ­oYßèäH뺴À»ÃÅüÓÎ`gZê¨æ©Žàú ö)óQì6ê8Œzö§ªKêqòöêøåÙ©k¨n&2"R!ü®×i‚Î$)–_¯»úãÝË‹3÷sW%=ÀRàâ
+ûþôòêíÅùÛó7ÖõÔgg™oSMVU® æ¡ØòP¡™ØA”GZd©š› jUëö¨¥zã«úƒbrcîiéVˆÜÊ3»[0ý„'>U4,]ÏòH¨özîÐ !„u>Ô_—>öå= &û „WP§“µµÝ§4 W»dNÉú Þy˜t#4CÄo%'†ºH‰‚@Žbßb’’´xC´ïd LêʤäÙ˜U&}‰§Éâï_®}*Ž˜NÞKaéU“AQ„+Þm,Ŭ¯7V>ÄqHE[ž²®(Ïõ¦nB¡æÆÝ·tKNˆÈÀÁ%oU­IÞEÂO"YÜ·oßv¡ÿÄ 1Å
+endstream
+endobj
+8210 0 obj <<
+/Type /Page
+/Contents 8211 0 R
+/Resources 8209 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+/Annots [ 8147 0 R 8151 0 R 8152 0 R 8153 0 R 8154 0 R 8155 0 R 8156 0 R 8157 0 R 8158 0 R 8159 0 R 8160 0 R 8161 0 R 8162 0 R 8163 0 R 8164 0 R 8165 0 R 8166 0 R 8167 0 R 8168 0 R 8169 0 R 8170 0 R 8171 0 R 8172 0 R 8173 0 R 8174 0 R 8175 0 R 8176 0 R 8177 0 R 8178 0 R 8179 0 R 8180 0 R 8181 0 R 8182 0 R 8183 0 R 8184 0 R 8185 0 R 8186 0 R 8187 0 R 8188 0 R 8189 0 R 8190 0 R 8191 0 R 8192 0 R 8193 0 R 8194 0 R 8195 0 R 8196 0 R 8197 0 R 8198 0 R 8199 0 R 8200 0 R 8201 0 R 8202 0 R 8203 0 R 8204 0 R 8205 0 R 8206 0 R 8207 0 R ]
+>> endobj
+8147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 758.146 235.71 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.46.2) >>
+>> endobj
+8151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.808 220.835 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1335) >>
+>> endobj
+8152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 735.699 238.777 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.46.3) >>
+>> endobj
+8153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.744 238.606 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1336) >>
+>> endobj
+8154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 709.635 244.946 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1337) >>
+>> endobj
+8155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 697.603 172.723 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1338) >>
+>> endobj
+8156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.418 188.7 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1339) >>
+>> endobj
+8157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 673.309 223.573 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.47) >>
+>> endobj
+8158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 663.047 269.163 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.47.1) >>
+>> endobj
+8159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 650.939 188.441 659.687]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1343) >>
+>> endobj
+8160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 638.83 190.673 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1344) >>
+>> endobj
+8161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 626.721 238.777 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.47.2) >>
+>> endobj
+8162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 614.613 161.031 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1345) >>
+>> endobj
+8163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 602.504 170.472 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1346) >>
+>> endobj
+8164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 590.395 183.204 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1347) >>
+>> endobj
+8165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 578.287 183.204 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1348) >>
+>> endobj
+8166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 566.178 236.607 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.47.3) >>
+>> endobj
+8167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 552.298 221.571 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1349) >>
+>> endobj
+8168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.19 241.915 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1350) >>
+>> endobj
+8169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.852 218.316 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1351) >>
+>> endobj
+8170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 517.743 238.66 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1352) >>
+>> endobj
+8171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 505.635 213.6 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1353) >>
+>> endobj
+8172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 493.526 233.944 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1354) >>
+>> endobj
+8173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 479.696 216.598 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.48) >>
+>> endobj
+8174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 469.308 269.163 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.48.1) >>
+>> endobj
+8175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.2 188.441 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1357) >>
+>> endobj
+8176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 445.091 236.607 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.48.2) >>
+>> endobj
+8177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.212 239.073 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1358) >>
+>> endobj
+8178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 420.874 235.818 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1359) >>
+>> endobj
+8179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 408.765 231.102 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1360) >>
+>> endobj
+8180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 396.656 268.754 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.49) >>
+>> endobj
+8181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 384.548 269.163 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.49.1) >>
+>> endobj
+8182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.439 223.283 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1366) >>
+>> endobj
+8183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 360.33 231.003 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1367) >>
+>> endobj
+8184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 346.451 235.71 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.49.2) >>
+>> endobj
+8185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 334.342 193.847 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1368) >>
+>> endobj
+8186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 322.233 199.406 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1369) >>
+>> endobj
+8187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 310.125 235.226 320.644]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1370) >>
+>> endobj
+8188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 297.94 180.389 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1371) >>
+>> endobj
+8189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 285.907 276.39 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.49.3) >>
+>> endobj
+8190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 273.799 218.262 284.318]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1372) >>
+>> endobj
+8191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 261.69 235.226 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1373) >>
+>> endobj
+8192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 251.352 238.777 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.49.4) >>
+>> endobj
+8193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 239.244 198.904 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1374) >>
+>> endobj
+8194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.135 199.442 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1375) >>
+>> endobj
+8195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 215.026 224.852 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1376) >>
+>> endobj
+8196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 201.147 211.582 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1377) >>
+>> endobj
+8197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 190.809 248.813 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.50) >>
+>> endobj
+8198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 178.7 269.163 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.50.1) >>
+>> endobj
+8199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 166.591 279.6 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1381) >>
+>> endobj
+8200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 154.483 203.889 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1382) >>
+>> endobj
+8201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 142.374 204.427 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1383) >>
+>> endobj
+8202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 130.265 229.837 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1384) >>
+>> endobj
+8203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 116.386 216.568 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1385) >>
+>> endobj
+8204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 106.048 238.777 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.50.2) >>
+>> endobj
+8205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 93.939 209.35 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1386) >>
+>> endobj
+8206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 81.831 209.888 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1387) >>
+>> endobj
+8207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.875 185.509 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1388) >>
+>> endobj
+8209 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8230 0 obj <<
+/Length 829
+/Filter /FlateDecode
+>>
+stream
+xÚíYMOÛ@½ûWìÑ>xÙ¶…ª¨‚,.ˆƒI 5 ¥ý÷űÃW\!OŽcgÞú½Ù73±`×L°ÏÁ‡$Ø;@Í{ç4K®ŽÎ1ðŠ;É’1;?%ûGÉit‘2# WÊÓ¯[ׂý$øHº$˜¼„ÈQ6º Î/ÓµC&¸öÈîÊ;o˜±š[£éó”ßQ/®Š3¿®žÔË5vm¹Òî„eà$«~d£H‰ðg{UÒ®é‹û•{hUôüþ~IÀ¸
+tƒ)½¼êjBᦾÍÓ%4õD(™CÏ-õŠ» PE"½ÐY :撚õ†Î‹eºì×Ñ..ÄàvÚÅŽv1T‘4Ô¨ÓÙZ뾦0Hxcš¼f3MÊ<Wngi ô}ÈM‘ŒªA'×y:í@E(§ÌPÉ9¼ô Ôõ
+µ–bÚ«!ž”?†ÜXšfÿúXþÐï\/vA‘ E*Qoóm†a´œâUœÂH¢§ H–"•¨w‘´a:YvµžLú
+0ü4ÝÞd9eød–·»L°ošØÎ3JÒ‡ØÖ’#íúÙ³b¯ÞåÙ|“A&ÞQžþ‡!Ü?u_¬F´¶mYǵ!³–#ã;Ø–õ•R$gêŠ<Ê—­Þü pÏ'‘mž-º¥š…ˆ=ˆ^D¢±¼B§Ë´í–Bz÷£÷Þ]I#r šÚ3R_b¥Á—|œ¾û§)õÁ´9Ýê…Í?:»ÞÙYਞóÆ®ÌÊBµœrÅ
+u4Ò
+endstream
+endobj
+8229 0 obj <<
+/Type /Page
+/Contents 8230 0 R
+/Resources 8228 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+/Annots [ 8208 0 R 8213 0 R 8214 0 R 8215 0 R 8216 0 R 8217 0 R 8218 0 R 8219 0 R 8220 0 R 8221 0 R 8222 0 R 8223 0 R 8224 0 R 8225 0 R 8226 0 R 8227 0 R ]
+>> endobj
+8208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 759.917 189.499 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1389) >>
+>> endobj
+8213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 747.962 203.889 756.71]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1390) >>
+>> endobj
+8214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 736.007 204.427 744.755]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1391) >>
+>> endobj
+8215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 724.051 229.837 732.8]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1392) >>
+>> endobj
+8216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 710.325 216.568 720.845]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1393) >>
+>> endobj
+8217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 700.141 191.668 708.759]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1394) >>
+>> endobj
+8218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 688.186 192.206 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1395) >>
+>> endobj
+8219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 676.231 180.03 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1396) >>
+>> endobj
+8220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 662.428 220.315 672.894]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1397) >>
+>> endobj
+8221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 652.32 190.001 660.939]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1398) >>
+>> endobj
+8222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 640.365 226.125 649.055]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1399) >>
+>> endobj
+8223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 628.41 236.607 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.50.3) >>
+>> endobj
+8224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 616.455 165.882 624.912]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1400) >>
+>> endobj
+8225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 604.5 171.996 612.957]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1401) >>
+>> endobj
+8226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 592.544 177.484 601.163]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1402) >>
+>> endobj
+8227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 570.609 95.148 579.187]
+/Subtype /Link
+/A << /S /GoTo /D (section*.1403) >>
+>> endobj
+8231 0 obj <<
+/D [8229 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8228 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8234 0 obj <<
+/Length 165
+/Filter /FlateDecode
+>>
+stream
+xÚ•-ÂP E}Å•`Êûþ°A21BöÜ2ņ ŸòÂ0S¨6¹íiÂ
+'ÚÚ“Eâ‚E¹!*N! fÃA£L6‡sWš®ôÛ±´pʱ1Y¶W5…ž¤%RÐ?PJœŒÃu¦aT˜$k¡Øæ„Wœá¼eï¬ôôt!õ}n©+¦‚ü‡X5½GM>š&{Ö.Ê$!VS%–«"ón>
+endstream
+endobj
+8233 0 obj <<
+/Type /Page
+/Contents 8234 0 R
+/Resources 8232 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+>> endobj
+8235 0 obj <<
+/D [8233 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8232 0 obj <<
+/Font << /F83 6620 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8242 0 obj <<
+/Length 313
+/Filter /FlateDecode
+>>
+stream
+xÚí”ÏOÂ0Çïû+Þq;¬¾×_k=j1DÜx˜Pd aKôÏ·£3”£‰‰ž¾¯]?Ýk?I^
+Qb”儈§›Œê¦ ¼T`˜ÕZDÜ÷QZ½s»¸¾nBV!V¾¯6‹øaµ
+Åúð£H¼Õí2TÏþ̾ïÚEdîšYœÚ¶õfÝ\v¯ó3vÝ +&ƒH2*äDÌ*¯u<ìá0 gY®”î…úñÑŸÝ:ø"Ì»S¢3†ÏšÆ¾äñäqtjÙû¯àWØ•ßÚNȵÔü3(¹ *EoñM™|
+endstream
+endobj
+8241 0 obj <<
+/Type /Page
+/Contents 8242 0 R
+/Resources 8240 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+/Annots [ 8236 0 R 8237 0 R 8238 0 R 8239 0 R ]
+>> endobj
+8236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 542.905 101.978 551.653]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i) >>
+>> endobj
+8237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 543.053 525.406 551.362]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+8238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 530.95 110.451 539.698]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+8239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 531.097 525.406 539.407]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+8243 0 obj <<
+/D [8241 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6 0 obj <<
+/D [8241 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10 0 obj <<
+/D [8241 0 R /XYZ 70.866 591.982 null]
+>> endobj
+8240 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8248 0 obj <<
+/Length 205
+/Filter /FlateDecode
+>>
+stream
+xÚ•P=OBAìïWLyW°î}ß•<¢|W˜*4RXù÷]Ÿbca¬v’ÆŒ{5ïêæ®xª)yô2SI ¹:Jýˆ¶dÉÌ’sz=<µqc¬c=ÏzÑÌÌ増cäs­zñ0lz{þZüu¸\߶³ï+ÕºzSVL1ì‰R¨¸€ÃEíöŒ£ìV`òµà}b^¢§¼àWŒj«ø;ØuþÒŒY$ÿ£8U#ªTäÒgE®F²! “’(N…)Äõ«„ù
+endstream
+endobj
+8247 0 obj <<
+/Type /Page
+/Contents 8248 0 R
+/Resources 8246 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+>> endobj
+8249 0 obj <<
+/D [8247 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8246 0 obj <<
+/Font << /F83 6620 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8292 0 obj <<
+/Length 2341
+/Filter /FlateDecode
+>>
+stream
+xÚíK“Û¸Çïó)x”ª",oè–õcã­¤Rq¦öâì–è•õ˜Hœd½Ÿ> ‘P‘\ðz¼áI²†ì‰Æ¿Ñh€4Íî2šýpCëÏïoo¾{-y†H« »ýiJŒR™2’®³Ûuönöâ>(‹ã|Á´™±ùÏ·?žÏbŒpj˜;‹f I Sð—MqÌsFg«9ÐÙýf•o«³ßì×Åäì—‹`ÄHoÅfj+ŒÀ|”ÒÙ‹m~:Uº¦Ý·O•1!3C¬R¼¶Å8Ñ`+[·÷›ÚÀfïn¯aSæûUQýºÝœÊúïõq§%è¬,ÖÕÇÃãÝýöRéìOÕOïý±>q¨¿¬»‡mQícóíÃ}þ¾(][l?-Ý%_üà?_ÝÞüûð+Í CH­3)€`ó¬v7ï~¦Ùÿôc†MmMößó»ŒeñË6ûçÍ?*—¶ZÂ`“*g‡+¡jŽ¿ø¥ü¯Ï—ÑÂhl6ÏF‰ ¬ >•yùˆ-̹˜‘ùBJU}ÈÏüWäéÏ”ÀXÕ™œûŽwµßþp“½[€°tº··ùÏlÁ%áè´j‘JUy*?Û9¬"’‹L2K¨ÃZ˜3dˆ±²"®‹Ój¾Ð¾¡†ÿCvs¥»€ `d»»üùx|yöŸárÒä³öíxnÎÝ vx™—9fª'÷}]÷ÙQîûi®)ë¿b³\~ÿøáÕ¾<:7bV´à §áõ‹;ŒÑQûÛfõjïÇÿÔ®[._äÇuû7L‘´…IJ‘žQžyQäû·E¾~¹Ù¡vŒbÞïæ(öYŽz›ïï
+7›0zòγñÎåóÛi%¥„2– !ˆÆYaļ’²óÕY’”7ç\±ÉŸ_·«ðksM”îL51ÞVsŽ¦Fþªþ£¤þj·Ùó…°ö[nÖ?ÿä(ÿ½~ܯn瀉g~®en‹å²9
+×2
+Øp¬Í|"`ZÀS Z0¶¼$ãÁ·;?®A
+z5)PÄŽÈ ¸%F&hGùGÂ@4ÖG&w8
+D#}h"ƒ‚@4ÙÇ€&ù2¯åzªLO¯ÊÈ*L«F¦˜&Ú¦(L¡!ià Sñ\/¤&xXHñL¯¤&³ZÝÂ1?>–›]Ñ_œ¢
+R\eDËNs_†`Ór˜L0Ñê9×`$š§(¹z"/Ås½ˆšàaÅ3½ˆ:7[-úâžAI)øG5ÞÆ{ 3­–Œ“àÚ˜$0ê¨ÆRìÞ&E¹ ^î‰çz95ÁÃrŠgz95™§2¯Æ£ÓæW÷N…¾1ÉXâ,ÓÁ÷ Š–†‡½:Þ½ #žŒ›´Ú7ö[x ûœ÷KPq† ®Ç$àÖbmÅš€Y‹µÅ k‚ 8‹µ…÷Ò1`¦Ñ.…‚¨"Z…w.Á9r¼€Ð×Á•Œx¬×O“{ê×9¯ÖÅ#%œ÷'µÃ• '§ zÞŸÔ"?µ²¶€Ç3݆۟Ôb>½°Á $`2I¬ît¦KÅFLkœ>
+°«ë”X>bU8¡‡…gˆCp!&×Ç&x8Ä3} h2ƒA<ÚG‚&ú¢˧ùcr-Y‰Uµ›’’”DÈågˆI,¥x®—R<,¥x¦—R“RÓÄ”TJ›â
+,¶¶°í+¸LèÔ´JRÓd5Í;â@ðóúâ5„†0#
+ÖP<×k¨ ÖP<Ók¨É\ܼüq[öÕC '`D
+¸{§æm¸—Ó##©yÀ¾o3b·Š{¬‹Õ4BË(žëeÔË(žéeÔ¹Ù«+
+oÚ¤¸
+endstream
+endobj
+8291 0 obj <<
+/Type /Page
+/Contents 8292 0 R
+/Resources 8290 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8212 0 R
+/Annots [ 8250 0 R 8251 0 R 8252 0 R 8253 0 R 8254 0 R 8255 0 R 8256 0 R 8257 0 R 8258 0 R 8259 0 R 8260 0 R 8261 0 R 8262 0 R 8263 0 R 8264 0 R 8265 0 R 8266 0 R 8267 0 R 8268 0 R 8269 0 R 8270 0 R 8271 0 R 8272 0 R 8273 0 R 8274 0 R 8275 0 R 8276 0 R 8277 0 R 8278 0 R 8279 0 R 8280 0 R 8281 0 R 8282 0 R 8283 0 R 8284 0 R 8285 0 R 8286 0 R 8287 0 R 8288 0 R ]
+>> endobj
+8250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 539.955 525.406 548.264]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+8251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 527.751 525.406 536.208]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+8252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 515.695 525.406 524.152]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+8253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 503.639 525.406 512.096]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+8254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 491.583 525.406 500.04]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+8255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 479.675 525.406 487.984]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+8256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 467.619 525.406 475.928]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+8257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 455.562 525.406 463.872]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+8258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 443.359 525.406 451.816]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.9) >>
+>> endobj
+8259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 431.45 525.406 439.76]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.10) >>
+>> endobj
+8260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 419.246 525.406 427.704]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.11) >>
+>> endobj
+8261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 407.19 525.406 415.648]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.12) >>
+>> endobj
+8262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 395.134 525.406 403.591]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.13) >>
+>> endobj
+8263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 383.078 525.406 391.535]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.14) >>
+>> endobj
+8264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 371.022 525.406 379.479]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.16) >>
+>> endobj
+8265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 358.966 525.406 367.423]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.17) >>
+>> endobj
+8266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 346.91 525.406 355.367]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.18) >>
+>> endobj
+8267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 334.854 525.406 343.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.19) >>
+>> endobj
+8268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 310.843 525.406 319.3]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.20) >>
+>> endobj
+8269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 298.787 525.406 307.244]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.21) >>
+>> endobj
+8270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 286.731 525.406 295.188]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.22) >>
+>> endobj
+8271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 274.675 525.406 283.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.23) >>
+>> endobj
+8272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 262.619 525.406 271.076]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.24) >>
+>> endobj
+8273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 250.563 525.406 259.02]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.25) >>
+>> endobj
+8274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 238.507 525.406 246.964]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.26) >>
+>> endobj
+8275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 226.451 525.406 234.908]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.27) >>
+>> endobj
+8276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 214.542 525.406 222.852]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.28) >>
+>> endobj
+8277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 202.486 525.406 210.796]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.29) >>
+>> endobj
+8278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 190.43 525.406 198.74]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.30) >>
+>> endobj
+8279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 178.374 525.406 186.684]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.31) >>
+>> endobj
+8280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 166.318 525.406 174.627]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.32) >>
+>> endobj
+8281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 154.262 525.406 162.571]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.33) >>
+>> endobj
+8282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 142.058 525.406 150.515]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.34) >>
+>> endobj
+8283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 130.002 525.406 138.459]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.35) >>
+>> endobj
+8284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 117.946 525.406 126.403]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.36) >>
+>> endobj
+8285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 106.038 525.406 114.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.37) >>
+>> endobj
+8286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 93.982 525.406 102.291]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.38) >>
+>> endobj
+8287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 81.926 525.406 90.235]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.39) >>
+>> endobj
+8288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 69.722 525.406 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.40) >>
+>> endobj
+8293 0 obj <<
+/D [8291 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14 0 obj <<
+/D [8291 0 R /XYZ 70.866 771.024 null]
+>> endobj
+18 0 obj <<
+/D [8291 0 R /XYZ 70.866 595.446 null]
+>> endobj
+8290 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8351 0 obj <<
+/Length 3015
+/Filter /FlateDecode
+>>
+stream
+xÚíMs7†ïú<’!øj|¨R[åØr씓xeUv·¼9Ð-³,QZ’râ¿á€š g0$Y6.‘ðh¼èFO £³ý¼÷ÓñÞÏb•£ã÷#M‰Qj¤-'ŠŽOGoÇœ02ÙWœŸ¾zòæÍdŸk3~ñòðèÉÑÓÿÁ€?}ñäõñáÑæ_yù þ©—OŸ¼ÚüËËßžþ{òçñ/{‡Ç{ÿÛcøgÐÛb!†ËÑÉÅÞÛ?éèÿí—%šÑ_Å“# ‚€øýùèÍÞ?÷hÙ•æ×¢k*]3@¨°#­¡¾oó“ÛŒµxñW]
+‘Ýþ·yŒrÂYw>wpðñâê6” A”P °BÁU{½XÍÖ-P0D[H
+´¶Ä[G_¾oii
+“R<ÛK©Ê^ÌVmi<£ˆÒ,Ô½ÁWÍ‘Þ©_î¶_*……95Ds¥öúUÂf©¶Jµ7/ÀL„KÕI‡¥ðzB˽^<×Kµ
+nOzK[¼HÀN€Ù:óôóbÚ:ÂN¥2M_Q¥¬ÙW/nr}wJQI¨àì8' R8;î€áÎ.žëTw+(žéTe^LÛªÕÐZ+S05>`d¹þ°œMOWm.ƒž‚뜥aMn©ZËù÷º!ìÙÑõ»8J´†ðô+Œ¡)\6D±¡PÆs½@«ànÆ3½@«L…ÎÚr\5ªe
+¬ÁðÛÖk…Q*rõZ°‚t_Ëj¢xøËWi á2‡s Ql(P@ ¸¥€jàN%`–ª1ËW½m
+¢DR‚«¡V×¹îc›«¶J
+b’@
+a;¢v`c·€¢±^?Un·~¢‘^>µ®v$'Ð=±]uÞ‰6ºzSÒ”£¿/-òÕ"À©ð’ ‰RP4Áùl®!IýQ<׫©
+îVS<ÓË©ÊÜ•šÀñ¥,TóMŒ\áŽÔ†–6‰e-+R5ð6;oTÖk½ºì<“áUŠÂå‹èÕµ#!ØùÅcK¹Ö¸rG–j­!»ê7ÜŽ,žjP®ª1À7å`sùFxbOô—o0ÎÃÅ£1ªOq©kHÚ`o—€ëåSwË'žéõSeî.ßpEŠèopÑá•ung‘")¸®HQshp›y{×ØÞÉ€"EeÂ?£*”"Z&Ð(¶S?€¦S¢ÑT¯Ð
+¶[ ÑD¯Ï*±³fC&é¨ ½9Ÿ^ä”H
+Í`T8¤ò^€$Ú¤plØVM<×˦
+^·o©€á£)˜ŽÕìëî •»³„¥ÀjA ÑQŸQ““ w%&·ð©ðú'!yQU¯%lH ,ÖK©ÂíVR<²TR…¸#¢Yñ–H-1œõÑÝ-^Ü…Y“„ëÎ:Ѳ>º>£ImVj€R{/p¡à —ªÀ¥9I¬(\N¸Û‹çz­VÁ;/o²„[‚êN*4ºÑÝÏg7IºkP†ºÑÝ秳×K®%ë^…ˆ Z‹¥ðzØ®QL€õJªpû„õBª@w9¾2¯Ïô‰Åê
+Qº(M¨kJw¹Á—Sw{;(™ xß¡:ª•u¸Õ’2òWa¿awf–ë¦Ë‰`hdX⇵ R_Åz|²o!_0ü@v³üKí&²ÝÝvçK‹þ½Þ\‹iÈ…ÑÙ,ífù¢e°yã:X“ûaí8ìͯó“Ã…³Þ§Ò¢[]m¾œ_ÏŠClu¶RR+µß[R«qeÌJŠKbºÊA$EʼR‚ö½É©p „¹“NÝ eZß."øÿ»“ŽÕ
+endstream
+endobj
+8350 0 obj <<
+/Type /Page
+/Contents 8351 0 R
+/Resources 8349 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8289 0 R 8294 0 R 8295 0 R 8296 0 R 8297 0 R 8298 0 R 8299 0 R 8300 0 R 8301 0 R 8302 0 R 8303 0 R 8304 0 R 8305 0 R 8306 0 R 8307 0 R 8308 0 R 8309 0 R 8310 0 R 8311 0 R 8312 0 R 8313 0 R 8314 0 R 8315 0 R 8316 0 R 8317 0 R 8318 0 R 8319 0 R 8320 0 R 8321 0 R 8322 0 R 8323 0 R 8324 0 R 8325 0 R 8326 0 R 8327 0 R 8328 0 R 8329 0 R 8330 0 R 8331 0 R 8332 0 R 8333 0 R 8334 0 R 8335 0 R 8336 0 R 8337 0 R 8338 0 R 8339 0 R 8340 0 R 8341 0 R 8342 0 R 8343 0 R 8344 0 R 8345 0 R 8346 0 R 8347 0 R 8348 0 R ]
+>> endobj
+8289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 759.917 525.406 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.41) >>
+>> endobj
+8294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 747.962 525.406 756.419]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.42) >>
+>> endobj
+8295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 736.154 525.406 744.464]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.43) >>
+>> endobj
+8296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 724.051 525.406 732.508]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.44) >>
+>> endobj
+8297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 712.096 525.406 720.553]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.45) >>
+>> endobj
+8298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 700.141 525.406 708.598]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.46) >>
+>> endobj
+8299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 688.186 525.406 696.643]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.47) >>
+>> endobj
+8300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 676.231 525.406 684.688]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.48) >>
+>> endobj
+8301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 664.276 525.406 672.733]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.49) >>
+>> endobj
+8302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 652.32 525.406 660.777]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.50) >>
+>> endobj
+8303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 640.365 525.406 648.822]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.51) >>
+>> endobj
+8304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 628.41 525.406 636.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.52) >>
+>> endobj
+8305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 616.455 525.406 624.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.53) >>
+>> endobj
+8306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 604.5 525.406 612.957]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.54) >>
+>> endobj
+8307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 592.544 525.406 601.002]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.55) >>
+>> endobj
+8308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 580.589 525.406 589.046]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.56) >>
+>> endobj
+8309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 568.634 525.406 577.091]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.57) >>
+>> endobj
+8310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 556.679 525.406 565.136]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.58) >>
+>> endobj
+8311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 544.724 525.406 553.181]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.59) >>
+>> endobj
+8312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 532.769 525.406 541.226]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.60) >>
+>> endobj
+8313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 520.813 525.406 529.271]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.61) >>
+>> endobj
+8314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 508.858 525.406 517.315]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.62) >>
+>> endobj
+8315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 496.903 525.406 505.36]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.63) >>
+>> endobj
+8316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 484.948 525.406 493.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.64) >>
+>> endobj
+8317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 473.141 525.406 481.45]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.65) >>
+>> endobj
+8318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 461.186 525.406 469.495]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.66) >>
+>> endobj
+8319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 449.23 525.406 457.54]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.67) >>
+>> endobj
+8320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 437.275 525.406 445.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.68) >>
+>> endobj
+8321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 425.32 525.406 433.629]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.69) >>
+>> endobj
+8322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 413.217 525.406 421.674]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.70) >>
+>> endobj
+8323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 401.262 525.406 409.719]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.71) >>
+>> endobj
+8324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 389.307 525.406 397.764]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.72) >>
+>> endobj
+8325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 377.499 525.406 385.809]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.73) >>
+>> endobj
+8326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 365.544 525.406 373.853]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.74) >>
+>> endobj
+8327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 353.589 525.406 361.898]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.75) >>
+>> endobj
+8328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 341.486 525.406 349.777]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.76) >>
+>> endobj
+8329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 329.531 525.406 337.822]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.77) >>
+>> endobj
+8330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 317.576 525.406 325.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.78) >>
+>> endobj
+8331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 305.62 525.406 314.078]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.79) >>
+>> endobj
+8332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 293.665 525.406 302.122]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.80) >>
+>> endobj
+8333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 281.858 525.406 290.001]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.81) >>
+>> endobj
+8334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 269.755 525.406 278.212]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.82) >>
+>> endobj
+8335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 257.8 525.406 266.257]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.83) >>
+>> endobj
+8336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 245.845 525.406 254.302]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.84) >>
+>> endobj
+8337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 233.889 525.406 242.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.84) >>
+>> endobj
+8338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 219.942 525.406 228.399]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.15) >>
+>> endobj
+8339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 205.994 525.406 214.451]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.84) >>
+>> endobj
+8340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 192.046 525.406 200.503]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.91) >>
+>> endobj
+8341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 178.099 525.406 186.556]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.85) >>
+>> endobj
+8342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 166.144 525.406 174.601]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.86) >>
+>> endobj
+8343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 154.188 525.406 162.645]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.87) >>
+>> endobj
+8344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 142.233 525.406 150.69]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.88) >>
+>> endobj
+8345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 130.278 525.406 138.735]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.89) >>
+>> endobj
+8346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 118.323 525.406 126.78]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.90) >>
+>> endobj
+8347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 106.368 525.406 114.825]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.92) >>
+>> endobj
+8348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 94.412 525.406 102.87]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.93) >>
+>> endobj
+8352 0 obj <<
+/D [8350 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8349 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8432 0 obj <<
+/Length 2208
+/Filter /FlateDecode
+>>
+stream
+xÚíM“㶆ïó+xUe`4¾¡[¼κ’Je3åËƮęQíHšHœ¬í_Ÿ†î’IC”±c^V¤Fì‡Dãm4€––f÷;»¢þõÛÛ«oÞJž!Ò*Ènï2M‰Q*SFÃXv»Ì>\¿zÈŸÊb7»aÚ\óÙ·ß®bŒpj˜»Šf7’ι¿à1ßï«¿Û,‹È럾\ŒX
+_“‘û¿Ê2¶[WÄñyïŠGŒøC%@**ò3›w›Ušÿ£§`ú?Ó¢J¹W÷ÎÕpž÷†S&¦"œË;TG:ôÓú©oñ™ 2cJ
+µø, £-qbÐRUòã
+ÆƈŸ{Ј’IÐ\.d½Î÷Ÿz RŠ@¥«Xâm¨Ž±†!u
+¬‘„î`{Ö Í,ÏR\ó3ê“(%˜@´·^-zêÝ,‘,cÒ¥3¹×Ãà`HK_lû¸ú8Ÿ÷Ëœs¢¸JÁå( ¦ÚàÅ®ÈË¢«ðCR`Q8Bwžw4ºXJ,K‚¶ØvÐA÷G®ú6“«¾m#±¥µ¨Da®®=]¸( †Ý$X¸ÜcYá¢!ey°pã¹µp›àe±/wÛÙ—l½£^‰#œLÁV†(#Ûìqõâ(—æ±-NZX=¤^‹ÑJ$€2†Ã½mh¿~5Ÿä#_M—áòeØ8O _4¤¸–o<·–oÜŸk
+‹ŸÔ)˜[t›9*[mˆPIÐÈz@¶”€mÌp
+c¨lCŸvÛžîÄÜ7ˆ Oe
+coCÆz
+RÜeDËNs VÀ¦y‘ŒVßƙƫˆ ¹«BEÏ­EÖ‹,žY‹¬ó°Õis÷»3ži"-àܳ…Í8Øi4 ÍN/
+µ‚h¾~ JÉM¡¡!Îm°Ð⹵Кàq¡Å3k¡5™ûÒ—õìW¿¸â¾ÑÌXÌ1RÜ
+Ðöð`%›RÒÞ”ô !c®BOXvuÑœ%²aIJàâ¼xªr;*äx¢rçA…÷Bn⇶)õô« Õ†4fl°Ä4ª¶ùÿ"PbñT/±&vTbñD/±ÎƒJ,ï%ÖÄ—»íóýÃÓsÙ·ʈæ<ìÖCãmðÀ’ŸÒ[ÑÿÓ&™²D3ù°5ý\½ý-otÞk<šC
+endstream
+endobj
+8431 0 obj <<
+/Type /Page
+/Contents 8432 0 R
+/Resources 8430 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8354 0 R 8355 0 R 8356 0 R 8357 0 R 8358 0 R 8359 0 R 8360 0 R 8361 0 R 8362 0 R 8363 0 R 8364 0 R 8365 0 R 8366 0 R 8367 0 R 8368 0 R 8369 0 R 8370 0 R 8371 0 R 8372 0 R 8373 0 R 8374 0 R 8375 0 R 8376 0 R 8377 0 R 8378 0 R 8379 0 R 8380 0 R 8381 0 R 8382 0 R 8383 0 R 8384 0 R 8385 0 R 8386 0 R 8387 0 R 8388 0 R 8389 0 R 8390 0 R 8391 0 R 8392 0 R 8393 0 R 8394 0 R 8395 0 R 8396 0 R 8397 0 R 8398 0 R 8399 0 R 8400 0 R 8401 0 R 8402 0 R 8403 0 R 8404 0 R 8405 0 R 8406 0 R 8407 0 R 8408 0 R 8409 0 R 8410 0 R 8411 0 R 8412 0 R 8413 0 R 8414 0 R 8415 0 R 8416 0 R 8417 0 R 8418 0 R 8419 0 R 8420 0 R 8421 0 R 8422 0 R 8423 0 R 8424 0 R 8425 0 R 8426 0 R 8427 0 R ]
+>> endobj
+8354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 539.714 145.32 548.463]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+8355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 539.862 525.406 548.171]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+8356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 527.655 119.157 536.273]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+8357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 527.655 525.406 536.112]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+8358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 515.596 118.413 524.214]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+8359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 515.596 525.406 524.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+8360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 503.537 123.147 512.155]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+8361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 503.537 525.406 511.994]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+8362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 489.707 152.95 500.168]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry) >>
+>> endobj
+8363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 491.478 525.406 499.935]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+8364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 479.419 186.063 488.167]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+8365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 479.567 525.406 487.876]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+8366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 467.36 144.827 476.108]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_dim) >>
+>> endobj
+8367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 467.508 525.406 475.817]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+8368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 453.453 159.792 464.049]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+8369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 455.448 525.406 463.758]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+8370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 443.242 122.645 451.86]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc) >>
+>> endobj
+8371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 443.242 525.406 451.699]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.9) >>
+>> endobj
+8372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 431.182 122.394 439.801]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc) >>
+>> endobj
+8373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 431.33 525.406 439.64]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.10) >>
+>> endobj
+8374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 417.276 113.947 427.742]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine) >>
+>> endobj
+8375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 419.123 525.406 427.58]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.11) >>
+>> endobj
+8376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 405.293 153.318 415.683]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+8377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 395.109 525.406 403.566]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.12) >>
+>> endobj
+8378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 381.279 146.71 391.669]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+8379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 371.095 525.406 379.552]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.13) >>
+>> endobj
+8380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 357.265 144.343 367.654]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+8381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 359.036 525.406 367.493]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.14) >>
+>> endobj
+8382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 346.977 119.919 355.595]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list) >>
+>> endobj
+8383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 346.977 525.406 355.434]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.15) >>
+>> endobj
+8384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 334.918 127.137 343.536]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table) >>
+>> endobj
+8385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 334.918 525.406 343.375]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.16) >>
+>> endobj
+8386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 321.137 161.406 331.477]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor) >>
+>> endobj
+8387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 322.859 525.406 331.316]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.17) >>
+>> endobj
+8388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 308.952 110.953 319.418]
+/Subtype /Link
+/A << /S /GoTo /D (struct_image) >>
+>> endobj
+8389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 298.844 525.406 307.301]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.18) >>
+>> endobj
+8390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 285.014 140.362 295.404]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry) >>
+>> endobj
+8391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 286.785 525.406 295.242]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.19) >>
+>> endobj
+8392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 274.726 146.611 283.345]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+8393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 274.726 525.406 283.183]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.20) >>
+>> endobj
+8394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 260.82 188.636 271.357]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+8395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 262.667 525.406 271.124]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.21) >>
+>> endobj
+8396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 248.761 242.182 259.298]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__create__affinity__mask__target) >>
+>> endobj
+8397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 250.608 525.406 259.065]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.22) >>
+>> endobj
+8398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 236.702 246.396 247.239]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__destroy__affinity__mask__target) >>
+>> endobj
+8399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 238.549 525.406 247.006]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.23) >>
+>> endobj
+8400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 224.643 250.395 235.18]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target) >>
+>> endobj
+8401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 226.49 525.406 234.947]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.24) >>
+>> endobj
+8402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 212.584 245.912 223.121]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__max__proc__target) >>
+>> endobj
+8403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 214.431 525.406 222.888]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.25) >>
+>> endobj
+8404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 200.525 205.08 211.062]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__target) >>
+>> endobj
+8405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 202.372 525.406 210.829]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.26) >>
+>> endobj
+8406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 188.466 216.673 198.931]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__blocktime__target) >>
+>> endobj
+8407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 190.313 525.406 198.77]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.27) >>
+>> endobj
+8408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 176.407 203.753 186.872]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__library__target) >>
+>> endobj
+8409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 178.402 525.406 186.711]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.28) >>
+>> endobj
+8410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 164.347 223.434 174.813]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__s__target) >>
+>> endobj
+8411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 166.342 525.406 174.652]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.29) >>
+>> endobj
+8412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 152.288 215.723 162.754]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__target) >>
+>> endobj
+8413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 154.283 525.406 162.593]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.30) >>
+>> endobj
+8414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 140.229 249.893 150.767]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target) >>
+>> endobj
+8415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 142.224 525.406 150.534]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.31) >>
+>> endobj
+8416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 128.17 204.578 138.708]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__target) >>
+>> endobj
+8417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 130.165 525.406 138.474]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.32) >>
+>> endobj
+8418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 116.111 216.171 126.577]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__blocktime__target) >>
+>> endobj
+8419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 118.106 525.406 126.415]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.33) >>
+>> endobj
+8420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 104.052 209.796 114.589]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__defaults__target) >>
+>> endobj
+8421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 105.899 525.406 114.356]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.34) >>
+>> endobj
+8422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 91.993 228.033 102.459]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__serial__target) >>
+>> endobj
+8423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 93.84 525.406 102.297]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.35) >>
+>> endobj
+8424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 79.934 203.251 90.4]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__target) >>
+>> endobj
+8425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 81.781 525.406 90.238]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.36) >>
+>> endobj
+8426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 67.875 249.346 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__throughput__target) >>
+>> endobj
+8427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 69.87 525.406 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.37) >>
+>> endobj
+8433 0 obj <<
+/D [8431 0 R /XYZ 70.866 789.024 null]
+>> endobj
+22 0 obj <<
+/D [8431 0 R /XYZ 70.866 771.024 null]
+>> endobj
+26 0 obj <<
+/D [8431 0 R /XYZ 70.866 595.226 null]
+>> endobj
+8430 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8583 0 obj <<
+/Length 3257
+/Filter /FlateDecode
+>>
+stream
+xÚíKs¹Çïú<’añj<T©Ty×ÚÄ[ÞG$U’*gc‘–XK‘
+Iyí|ú4†3ÚÁ¼dyçbJÖ¿Á4þèFÐÑÕˆŽþvôíÅÑ7ß12Ä*%FFš£ÔH[N]LGïÆ‚029Vœ¿{ûêü|r̵¿}s~?Yiíø»¿¿úåâôl÷ѼöÍO¯Oÿ=ùõ⇣Ӌ£ÿ1DÓ»GC —£Ë›£w¿ÒÑÿöÈaÍè÷üÊ›‘A@
+üy1:?úÇ-n¿ùéÊ]_€³¢‚*4@¨°#­¡e oæ—ÍÛ³–
+ˆbQ½™‚ïJ’¼è6V»á¦û§ˆ&já¿"’©t±KßTéèP 3´Ü'k¹|ïn $¡J׫íp ©dŠö‹%I,©½ áUr°þKkX\Ž£tßß}v½ÒêbÂð#{ï~Y4‚cF¥ìüLv–±#ž…ÿµ›~¼½mŽg1ôÅÔ×êÛù&ïž¿ùžáØûq®\?.€0îÜCþ•¿ì®¨o¢¼â¢¥ M¬¾/â¯-Eh¢åý''?­¦Í®C€ZSàh8fï?Ÿ‚Wáƒf
+ÄH‘`ÐŒ))+yï•Ë‹U6m›ìÁ Å…¿ñt©òyPÕžûv3¦I˜øŒ­U>sšjç—SKL›hëV½Ì#Å›÷ÍnÞ
+>L,õ$ŽÐs6ä6X``1ÆÄ Ì¤ŒÝO` è…À<|¯À0 yÌÛk'°Ï›ùe¶h[!‰–n5²ö¼ûÔí–Q ÐngÂGw«›10bíÚÃQi<) ¯ œ£+HWRÊaÚ§—Ú­âkí©¶ Q|¸)ÐÚ#¬^}hŸ6
+çˆi,h?ÅÓKUñëÙíj=9–´™DÓvý<wÍ;ïÑDÁÊy‚&
+ØÑñ}}@<½l¢Uüf~µÌ³i½}è¡a&i˜Š>zÃDúIƒø†)!Sî×0ãéeìâ7Ûl{×ðÔZÛ¡Ûü[çÏe;y=Û\¢Ëc0žßnWŠafH>^zY±Ç[Tœ)zî€^/Ó¾.V&L
+®PèðŒžÎ6ÛõjÒñ:–RDZ‚ñ lj•.×´Œ€H“¤ÒE¦Ñw¼‰Å9úÊ€¾ò¡ÀF¾øÜÄ McbA”ò`‘ÅsK‘UÁa"‹g—"«²—³M[jÒ(¢4KukUýIw*›»<½JaaN E[¹·+[ ;H¹UÊd4¸ ‚‰`)­!\&ð—® ŠJ9·²nOôK›O$`'À¬Ïœ~^f­OØ©X¦©+ª˜ÕëÚõÂ2†¤-* 5áSiíÏ-K -,ˆÚ`7™€[j«
+î×V<³ÔV•y“µ-%tyP+S05^`¤ÏÜ^¯gÙtÓæ1Lâ)¸ÎÍVç¶êÙÆF½/·7x`yˆs¤Dk°–Dˆ[Š¸‚˜wŽñÜRÀUp¿€ã™¥€«LßÎÚòrÚÍeÈXƒà¶Ã7R:¬" W˜Þ?ëf5Q\† Lq"L
+‰aCX<·XÜ/°xf)°*³˜oS%’ê\-ÐKiŸëÞ%nÝï@j5{Ô9,ëu²Ûï‡ðáJlm)vßrqî*ã¹¥’«à~%Ç3K%W™›ËëÙônѱÓÅ»ñ\ˈs•UlÇûùB£ÈÇQU, N¶JaˆÔ)|$Ä5 VV<·TV<_Î{vÓI
+G$ؾѕ#!xP-BL»éÊ–® 畇ì™t‡|ßÆx¬Û_•+Û5箇¥i#+ç©À„o<,4Z-ž¨® iƒo ¸¥²ªà~eÅ3Kiy•íI– GcI*ë<­U¶kuØQºÒZ‹ƒü˜
+_
+*”"Z&–2XmÑÔRll¿Ö¢‰¥Ô*Ä®, >YÊ 5ÏnïÙöäHœSXÔ²|®Ší˜d0jPñ£¨ØM20¾ T€$Ú¤p›Xr<·TrÜ/åxf©å*³o¥‹›YH€5¨gU{Æ]+]À+]Âsâ•.Œ‡Ÿo#$ÏçŽã†)¬¯xl©¯
+·_^ñÈR^d÷2·”B
+,ºK°ÒÃö®¥"Ö­Õ|lÿ2—a\YWʃ–‚ª}ò5‚“$Ðn)ÜAÆsKWÁý
+Žg–
+ö˜½ë[dšÊºØ³^Ù®(ijymað¹Ï{‚¡Y
+߈éàE  °¥´*Ümû˜1Ijêb¿ZM»‡tîÜN–‚ª¿š‰Pl1Èîñ%æ:LņŠ´*…÷‚´
+÷^ñÜRbUp¿Æ♅ƪȎTfù›H ˜Zb<"j¸[Ù–k’€ÝÞ}ZÖp{&–ÇJ„ÈùÓß Æþœuåò³0£õÌ­$†ÚP='àzöÀ§¿Y­NAut]«nß4„›$Õ54ß²ÍúÎAe‰UfÝÌpxXÊ ñ!Óä†>¹‘€[Š¬
+~HdñÔRdUj—ßÜåD@‹œ¨ÿŒ{ü¦ œRØ–Siæ­¤îò›ÃÆ©&S„Õ·¹øùìüí·w›Ïç-«ÃbÜ'˜©R‘;{ý2w
+„r]^ú·ŠL~À®†£j/,žÍ>¼Y~p{¦­ZÎj⃰ŸU؆½Üœ:ì6Óòô;¸ïGì(̯ŸX¢Z’½¹Éš‡Zƒ’ƒÝžºwà±½C¾*¢Ùïk3tÎÏkÙ؃ûŠ¥]8ç›W¸SOjÛ¼ZNŽÍï£Àݯå©Ôy4x^gþ§imßm·[¡üó˜ùãíŸñ¬¢&ä6t!Üݧùbî,–o›[j³ÝÙéîr»û»Í¬°ïï׳ÂðÇW»Ïùf÷9[–æ..Ý^gÅׯW‹iqÕÇ ‡Žö±Ìnfx•Õ_‚=,³GSR¢‘Ï€áÐÚgê*-´±oañÓOÛݶ|0¶øÁlš Òx¸rHãÅ¢š–ø"Œ|pÊÑ÷ýG†ƒ5ƒ1ž×αùÇç—§KgÝ…Åï;ßÝÇâ®å xª+&µbûÞ¼«[ˆ¨Ô(?Ó«oÒU‚ §y*ó®hí?FnMsÛBºƒ
+
+¹û7€àÿÑTßè
+endstream
+endobj
+8582 0 obj <<
+/Type /Page
+/Contents 8583 0 R
+/Resources 8581 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8428 0 R 8429 0 R 8471 0 R 8472 0 R 8473 0 R 8474 0 R 8475 0 R 8476 0 R 8477 0 R 8478 0 R 8479 0 R 8480 0 R 8481 0 R 8482 0 R 8483 0 R 8484 0 R 8485 0 R 8486 0 R 8487 0 R 8488 0 R 8489 0 R 8490 0 R 8491 0 R 8492 0 R 8493 0 R 8494 0 R 8495 0 R 8496 0 R 8497 0 R 8498 0 R 8499 0 R 8500 0 R 8501 0 R 8502 0 R 8503 0 R 8504 0 R 8505 0 R 8506 0 R 8507 0 R 8508 0 R 8509 0 R 8510 0 R 8511 0 R 8512 0 R 8513 0 R 8514 0 R 8515 0 R 8516 0 R 8517 0 R 8518 0 R 8519 0 R 8520 0 R 8521 0 R 8522 0 R 8523 0 R 8524 0 R 8525 0 R 8526 0 R 8527 0 R 8528 0 R 8529 0 R 8530 0 R 8531 0 R 8532 0 R 8533 0 R 8534 0 R 8535 0 R 8536 0 R 8537 0 R 8538 0 R 8539 0 R 8540 0 R 8541 0 R 8542 0 R 8543 0 R 8544 0 R 8545 0 R 8546 0 R 8547 0 R 8548 0 R 8549 0 R 8550 0 R 8551 0 R 8552 0 R 8553 0 R 8554 0 R 8555 0 R 8556 0 R 8557 0 R 8558 0 R 8559 0 R 8560 0 R 8561 0 R 8562 0 R 8563 0 R 8564 0 R 8565 0 R 8566 0 R 8567 0 R 8568 0 R 8569 0 R 8570 0 R 8571 0 R 8572 0 R 8573 0 R 8574 0 R 8575 0 R 8576 0 R 8577 0 R 8578 0 R 8579 0 R 8580 0 R ]
+>> endobj
+8428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 758.07 250.063 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__turnaround__target) >>
+>> endobj
+8429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 760.065 525.406 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.38) >>
+>> endobj
+8471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 746.115 222.932 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__s__target) >>
+>> endobj
+8472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 748.11 525.406 756.419]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.39) >>
+>> endobj
+8473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 734.159 215.221 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__target) >>
+>> endobj
+8474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 736.007 525.406 744.464]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.40) >>
+>> endobj
+8475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 722.204 259.864 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target) >>
+>> endobj
+8476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 724.051 525.406 732.508]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.41) >>
+>> endobj
+8477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 712.096 127.881 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller) >>
+>> endobj
+8478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 712.096 525.406 720.553]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.42) >>
+>> endobj
+8479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 698.294 132.373 708.759]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+8480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 700.289 525.406 708.598]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.43) >>
+>> endobj
+8481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 688.186 112.172 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib) >>
+>> endobj
+8482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 688.186 525.406 696.643]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.44) >>
+>> endobj
+8483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 676.231 128.571 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var) >>
+>> endobj
+8484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 676.231 525.406 684.688]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.45) >>
+>> endobj
+8485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 664.276 142.595 672.894]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__locker__t) >>
+>> endobj
+8486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 664.276 525.406 672.733]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.46) >>
+>> endobj
+8487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 652.32 115.812 660.777]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+8488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 652.32 525.406 660.777]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.47) >>
+>> endobj
+8489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 638.594 123.963 648.984]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table) >>
+>> endobj
+8490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 640.365 525.406 648.822]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.48) >>
+>> endobj
+8491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 626.639 137.08 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper) >>
+>> endobj
+8492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 628.41 525.406 636.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.49) >>
+>> endobj
+8493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 616.214 173.516 625.073]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+8494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 616.455 525.406 624.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.50) >>
+>> endobj
+8495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 602.653 222.17 613.19]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__device__number) >>
+>> endobj
+8496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 604.5 525.406 612.957]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.51) >>
+>> endobj
+8497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 590.697 257.515 601.235]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__physical__device__number) >>
+>> endobj
+8498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 592.544 525.406 601.002]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.52) >>
+>> endobj
+8499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 580.589 221.668 589.28]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__number__of__devices) >>
+>> endobj
+8500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 580.589 525.406 589.046]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.53) >>
+>> endobj
+8501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 566.913 171.08 577.324]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__report) >>
+>> endobj
+8502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 568.634 525.406 577.091]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.54) >>
+>> endobj
+8503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 554.832 180.692 565.369]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__signaled) >>
+>> endobj
+8504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 556.679 525.406 565.136]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.55) >>
+>> endobj
+8505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 544.724 171.224 553.414]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status) >>
+>> endobj
+8506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 544.724 525.406 553.181]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.56) >>
+>> endobj
+8507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 531.047 155.927 541.517]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+8508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 532.769 525.406 541.226]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.57) >>
+>> endobj
+8509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 518.966 212.101 529.432]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__lock__target) >>
+>> endobj
+8510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 520.813 525.406 529.271]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.58) >>
+>> endobj
+8511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 507.011 232.275 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__nest__lock__target) >>
+>> endobj
+8512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 508.858 525.406 517.315]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.59) >>
+>> endobj
+8513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 495.056 213.051 505.522]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__dynamic__target) >>
+>> endobj
+8514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 496.903 525.406 505.36]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.60) >>
+>> endobj
+8515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 483.101 229.737 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__max__threads__target) >>
+>> endobj
+8516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 484.948 525.406 493.405]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.61) >>
+>> endobj
+8517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 471.146 206.586 481.611]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__nested__target) >>
+>> endobj
+8518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 472.993 525.406 481.45]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.62) >>
+>> endobj
+8519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 459.191 222.17 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__num__procs__target) >>
+>> endobj
+8520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 461.038 525.406 469.495]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.63) >>
+>> endobj
+8521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 447.235 215.552 457.701]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__schedule__target) >>
+>> endobj
+8522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 449.082 525.406 457.54]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.64) >>
+>> endobj
+8523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 435.28 194.428 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__lock__target) >>
+>> endobj
+8524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 437.275 525.406 445.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.65) >>
+>> endobj
+8525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 423.325 214.602 433.791]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__nest__lock__target) >>
+>> endobj
+8526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 425.32 525.406 433.629]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.66) >>
+>> endobj
+8527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 411.37 154.34 421.835]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+8528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 413.365 525.406 421.674]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.67) >>
+>> endobj
+8529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 399.415 174.514 409.88]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+8530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 401.41 525.406 409.719]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.68) >>
+>> endobj
+8531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 387.46 212.549 397.925]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__dynamic__target) >>
+>> endobj
+8532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 389.455 525.406 397.764]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.69) >>
+>> endobj
+8533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 375.504 194.93 385.97]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__lock__target) >>
+>> endobj
+8534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 377.351 525.406 385.809]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.70) >>
+>> endobj
+8535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 363.549 215.104 374.015]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nest__lock__target) >>
+>> endobj
+8536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 365.396 525.406 373.853]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.71) >>
+>> endobj
+8537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 351.594 206.084 362.06]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nested__target) >>
+>> endobj
+8538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 353.441 525.406 361.898]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.72) >>
+>> endobj
+8539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 339.639 229.647 350.104]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__num__threads__target) >>
+>> endobj
+8540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 341.634 525.406 349.943]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.73) >>
+>> endobj
+8541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 327.684 215.05 338.149]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__schedule__target) >>
+>> endobj
+8542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 329.679 525.406 337.988]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.74) >>
+>> endobj
+8543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 315.729 197.423 326.194]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__lock__target) >>
+>> endobj
+8544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 317.723 525.406 326.033]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.75) >>
+>> endobj
+8545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 303.773 217.597 314.239]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__nest__lock__target) >>
+>> endobj
+8546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 305.62 525.406 313.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.76) >>
+>> endobj
+8547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 291.818 204.901 302.284]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__lock__target) >>
+>> endobj
+8548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 293.665 525.406 301.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.77) >>
+>> endobj
+8549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 279.863 225.075 290.329]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__nest__lock__target) >>
+>> endobj
+8550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 281.71 525.406 290.001]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.78) >>
+>> endobj
+8551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 267.984 143.841 278.504]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+8552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 269.755 525.406 278.212]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.79) >>
+>> endobj
+8553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 257.8 131.925 266.418]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data) >>
+>> endobj
+8554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 257.8 525.406 266.257]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.80) >>
+>> endobj
+8555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 245.845 116.431 254.463]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+8556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 245.992 525.406 254.136]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.81) >>
+>> endobj
+8557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 232.168 257.61 242.638]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements) >>
+>> endobj
+8558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 233.889 525.406 242.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.82) >>
+>> endobj
+8559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 221.934 114.674 230.625]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info) >>
+>> endobj
+8560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 221.934 525.406 230.391]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.83) >>
+>> endobj
+8561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 209.739 147.102 218.598]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list) >>
+>> endobj
+8562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 209.979 525.406 218.436]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.84) >>
+>> endobj
+8563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 196.177 135.789 206.642]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+8564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 198.024 525.406 206.481]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.85) >>
+>> endobj
+8565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 186.069 114.441 194.687]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread) >>
+>> endobj
+8566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 186.069 525.406 194.526]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.86) >>
+>> endobj
+8567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 174.114 119.785 182.732]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+8568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 162.158 525.406 170.616]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.87) >>
+>> endobj
+8569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 150.203 124.77 158.822]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+8570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 138.248 525.406 146.705]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.88) >>
+>> endobj
+8571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 126.293 124.77 134.911]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3) >>
+>> endobj
+8572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 126.293 525.406 134.75]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.89) >>
+>> endobj
+8573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 112.616 195.073 123.086]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra) >>
+>> endobj
+8574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 114.338 525.406 122.795]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.90) >>
+>> endobj
+8575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 102.383 113.311 111.001]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list) >>
+>> endobj
+8576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 102.383 525.406 110.84]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.91) >>
+>> endobj
+8577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 90.427 120.529 99.046]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table) >>
+>> endobj
+8578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 90.427 525.406 98.885]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.92) >>
+>> endobj
+8579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 78.472 169.179 87.091]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value) >>
+>> endobj
+8580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 78.472 525.406 86.929]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.93) >>
+>> endobj
+8584 0 obj <<
+/D [8582 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8581 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8715 0 obj <<
+/Length 1760
+/Filter /FlateDecode
+>>
+stream
+xÚíœÏ—Ú6ÇïûWøÔýVíkÒæõÒv_.I,xÞCMºÿ}GX&Ì‚×ÂÙ´>Ù`iÆH¾dCò@òöÂñ§Û›Þ(‘ eÊiLnïÌjh«˜ÜŽ“½Ÿ'Ãå&]õÜØžìº}·­Å9`¹¯É@ÒåÞLgi^ú·lœöQõþÙÕB΢*jY&0Ô’ û€½ú¿O×›¼ªT‰eNkjrÁŒÅ¼æ¯é*”Ÿ®óã0?Ì|õíÙâ>\˜Íò“
+_-7ÓE¶þÑßή¿!Ádå?ø“?ßÞ$H¿Çˆd@?X9“ßè(fÛú¿ÜÞü}ƒ¡4‚b€:Q˜S.Ío>|‚dLß%Ô¬Î&_¶Eç gÚÑÉ,ùëæ¼ûJí‚`˜Ü’ ½÷¸™ÎØh¹,ÝwòîKAõJéü ¢|Šjì{27ïÔÐÒAϹÜœäg@ÿ/­Í ðÝ{@Ü2K¬E
+–†ÏçXTE–ÈDñÜÔ¡ézýû*ˆ ìâþ#€X ÇU#2÷QM£ñG2T[;B…äaºZ-V}Ÿ ⥌ë i!f’õÇ7Çñ%EÖF`ˆ qëö:ö)Ia§R3^}ä²öÙõca4Nv<F Sª6׺<b^D§pšI®›Óé qâ°ùúáXÛŒÂNÛ®¯mÛÓ6a%ZD ‡ ¡–_é™\ÂwôD¦‡G¡g>U„ëŽ)žãWq±Ñ’g·†èt‡k_RDuïàHwD7ú|3œêçNÑ048픨B®×@]'_§“¡©<7ÐP9éd"¤%,-4£bh½%Ãœ1»¬ç|‘UnVÀ" í8‰Ä‰xÁ¬ R/V‹Á3´Mc’ŒA‹PÌ¡*Ñr A†'ÒÆKŸ¾¥qi³.o
+Ú.Iü†Ü2¹•‡ki»<r‘fFü›ƒs*’Ì—ààË»(âA½l©Z>ϦÙv³Yõn'°Ýxs ‘ÐLGjŒ:
+OÁPc —„§UXry*(µBtAi\8ë'ù0‹¼vPŠÚ0©b¬TyK\™Kèlî³ sßçsã;@‡f$4U34kè¦RÄDŒ5uo ]Hæ,VëÊGvvZt9ÃkòcD[9C¿5]ˆë`Þ‰×?sÞ«¼+¢£èE²­•
+½2>’!Ø Uw~‚1{f/·@¯ 2„ŽqˆBY°U_Ãxó˜üÛöo½ï›|m¿þig2lí
+ׇkÛïŸ^°ô¡Œþ¾1ŒmkÃù%$NÒ$Ͼd'/W”ÛÚŽ1K¡ ±öe9sÜžÉCï‚ä6ðimaÝPP¢c¬«‡·*îáS•
+endstream
+endobj
+8714 0 obj <<
+/Type /Page
+/Contents 8715 0 R
+/Resources 8713 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8641 0 R 8642 0 R 8643 0 R 8644 0 R 8645 0 R 8646 0 R 8647 0 R 8648 0 R 8649 0 R 8650 0 R 8651 0 R 8652 0 R 8653 0 R 8654 0 R 8655 0 R 8656 0 R 8657 0 R 8658 0 R 8659 0 R 8660 0 R 8661 0 R 8662 0 R 8663 0 R 8664 0 R 8665 0 R 8666 0 R 8667 0 R 8668 0 R 8669 0 R 8670 0 R 8671 0 R 8672 0 R 8673 0 R 8674 0 R 8675 0 R 8676 0 R 8677 0 R 8678 0 R 8679 0 R 8680 0 R 8681 0 R 8682 0 R 8683 0 R 8684 0 R 8685 0 R 8686 0 R 8687 0 R 8688 0 R 8689 0 R 8690 0 R 8691 0 R 8692 0 R 8693 0 R 8694 0 R 8695 0 R 8696 0 R 8697 0 R 8698 0 R 8699 0 R 8700 0 R 8701 0 R 8702 0 R 8703 0 R 8704 0 R 8705 0 R 8706 0 R 8707 0 R 8708 0 R 8709 0 R 8710 0 R ]
+>> endobj
+8641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 537.894 137.107 548.234]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp) >>
+>> endobj
+8642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 539.615 525.406 548.073]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+8643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 527.553 127.639 536.172]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h) >>
+>> endobj
+8644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 527.553 526.464 536.01]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+8645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 513.769 164.741 524.181]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp) >>
+>> endobj
+8646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 515.491 526.464 523.948]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.7) >>
+>> endobj
+8647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 501.707 155.273 512.119]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h) >>
+>> endobj
+8648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 491.473 526.464 499.931]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.8) >>
+>> endobj
+8649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 477.564 170.721 488.101]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8cpp) >>
+>> endobj
+8650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 479.411 526.464 487.868]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.9) >>
+>> endobj
+8651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 465.502 161.253 476.039]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h) >>
+>> endobj
+8652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 455.394 526.464 463.851]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.10) >>
+>> endobj
+8653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 441.61 127.137 451.95]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp) >>
+>> endobj
+8654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 443.479 526.464 451.789]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.11) >>
+>> endobj
+8655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 431.269 117.668 439.888]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h) >>
+>> endobj
+8656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 431.417 526.464 439.726]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.12) >>
+>> endobj
+8657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 419.207 150.601 427.897]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c) >>
+>> endobj
+8658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 419.355 526.464 427.664]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.13) >>
+>> endobj
+8659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 407.145 178.567 415.835]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h) >>
+>> endobj
+8660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 407.145 526.464 415.602]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.14) >>
+>> endobj
+8661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 393.235 149.059 403.773]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8c) >>
+>> endobj
+8662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 395.23 526.464 403.539]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.15) >>
+>> endobj
+8663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 381.173 149.561 391.71]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h) >>
+>> endobj
+8664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 383.168 526.464 391.477]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.16) >>
+>> endobj
+8665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 370.958 126.769 379.648]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+8666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 371.106 526.464 379.415]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.17) >>
+>> endobj
+8667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 358.895 120.43 367.586]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h) >>
+>> endobj
+8668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 359.043 526.464 367.353]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.18) >>
+>> endobj
+8669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 345.112 167.503 355.523]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8cpp) >>
+>> endobj
+8670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 346.833 526.464 355.29]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.19) >>
+>> endobj
+8671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 334.771 158.034 343.461]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+8672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 322.816 526.464 331.273]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.20) >>
+>> endobj
+8673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 308.906 159.908 319.444]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8cpp) >>
+>> endobj
+8674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 310.753 526.464 319.211]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.21) >>
+>> endobj
+8675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 296.844 150.44 307.381]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+8676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 298.691 526.464 307.148]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.22) >>
+>> endobj
+8677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 284.907 146.683 295.319]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8cpp) >>
+>> endobj
+8678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 286.777 526.464 295.086]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.23) >>
+>> endobj
+8679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 274.567 137.215 283.257]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h) >>
+>> endobj
+8680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 274.714 526.464 283.024]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.24) >>
+>> endobj
+8681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 260.783 150.072 271.195]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp) >>
+>> endobj
+8682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 262.652 526.464 270.961]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.25) >>
+>> endobj
+8683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 250.442 140.604 259.132]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h) >>
+>> endobj
+8684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 238.487 526.464 246.944]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.26) >>
+>> endobj
+8685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 224.654 169.924 235.115]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp) >>
+>> endobj
+8686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 226.425 526.464 234.882]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.27) >>
+>> endobj
+8687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 212.591 160.455 223.052]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h) >>
+>> endobj
+8688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 214.362 526.464 222.819]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.28) >>
+>> endobj
+8689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 200.453 175.904 210.99]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp) >>
+>> endobj
+8690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 202.3 526.464 210.757]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.29) >>
+>> endobj
+8691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 188.391 166.436 198.928]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h) >>
+>> endobj
+8692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 190.238 526.464 198.695]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.30) >>
+>> endobj
+8693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 176.454 170.739 186.866]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp) >>
+>> endobj
+8694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 178.175 526.464 186.633]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.31) >>
+>> endobj
+8695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 164.266 176.72 174.803]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp) >>
+>> endobj
+8696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 166.113 526.464 174.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.32) >>
+>> endobj
+8697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 152.329 147.571 162.741]
+/Subtype /Link
+/A << /S /GoTo /D (offload__orsl_8cpp) >>
+>> endobj
+8698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 154.051 526.464 162.508]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.33) >>
+>> endobj
+8699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 141.989 138.102 150.679]
+/Subtype /Link
+/A << /S /GoTo /D (offload__orsl_8h) >>
+>> endobj
+8700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 142.136 526.464 150.446]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.34) >>
+>> endobj
+8701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 128.205 152.251 138.617]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp) >>
+>> endobj
+8702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 130.074 526.464 138.383]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.35) >>
+>> endobj
+8703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 117.864 142.783 126.554]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+8704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 105.909 526.464 114.366]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.36) >>
+>> endobj
+8705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 91.999 156.053 102.537]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp) >>
+>> endobj
+8706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 93.847 526.464 102.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.37) >>
+>> endobj
+8707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 79.937 146.584 90.475]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h) >>
+>> endobj
+8708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 81.784 526.464 90.241]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.38) >>
+>> endobj
+8709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 67.875 178.71 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target__main_8cpp) >>
+>> endobj
+8710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 69.722 526.464 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.39) >>
+>> endobj
+8716 0 obj <<
+/D [8714 0 R /XYZ 70.866 789.024 null]
+>> endobj
+30 0 obj <<
+/D [8714 0 R /XYZ 70.866 771.024 null]
+>> endobj
+34 0 obj <<
+/D [8714 0 R /XYZ 70.866 595.383 null]
+>> endobj
+8713 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8782 0 obj <<
+/Length 769
+/Filter /FlateDecode
+>>
+stream
+xÚíšMSÛ0†ïþ:Ú/Z­$KÇ~„†é´3”$&xÆ$4„öïwœL‚ $ÅñÀÔ''cå]Iûxµ»±#!Å—àc?ØÛw$xkIô¯D"ÁY+¯À¢èÅY¨!Š­RáþÁQ/ŠU⣃“~:¢ðÓ×ßû½ã‡º2ôàÛçÞitÞ? zýàW€lX
+\rœÒbpœK1ä{‡By'þÌGÞmŒ&þœ‹“àG ËÉW¯…îtT8.—§ÍÊòœI^$A.Ö7¹ú)%M.†ÕI"*Ð^ÏÇ+ûÜ$y»ür†U»ˆÐéuóì&FF†p=7½Xˆ8‹ oï¤1öábùÖ¨Ø{’~ØÝÇxð>£4*dŠ×öÿe°DL=#‚7fs´’¦ ’X ¥]%©j• XþuVÉÑ#«×“» no+ðná¹ÿÉÍ%Ôl (MåÿPJ€á“…Ðàf|¾ÚèÏ5£ÓQZ h¢¨#ómi7'SF¢4Y }ùL̦ÊðbFÈË­ÑRwúîòô5­¾H u±'­5
+endstream
+endobj
+8781 0 obj <<
+/Type /Page
+/Contents 8782 0 R
+/Resources 8780 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8711 0 R 8712 0 R 8752 0 R 8753 0 R 8754 0 R 8755 0 R 8756 0 R 8757 0 R 8758 0 R 8759 0 R 8760 0 R 8761 0 R 8762 0 R 8763 0 R 8764 0 R 8765 0 R 8766 0 R 8767 0 R 8768 0 R 8769 0 R 8770 0 R 8771 0 R 8772 0 R 8773 0 R 8774 0 R 8775 0 R 8776 0 R 8777 0 R 8778 0 R 8779 0 R ]
+>> endobj
+8711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 759.917 143.132 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h) >>
+>> endobj
+8712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 759.917 526.464 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.40) >>
+>> endobj
+8752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 746.24 173.223 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer__host_8cpp) >>
+>> endobj
+8753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 747.962 526.464 756.419]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.41) >>
+>> endobj
+8754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 734.159 179.203 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer__target_8cpp) >>
+>> endobj
+8755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 736.007 526.464 744.464]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.42) >>
+>> endobj
+8756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 722.33 152.834 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp) >>
+>> endobj
+8757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 724.051 526.464 732.508]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.43) >>
+>> endobj
+8758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 712.096 143.366 720.786]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h) >>
+>> endobj
+8759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 712.096 526.464 720.553]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.44) >>
+>> endobj
+8760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 698.419 144.585 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8cpp) >>
+>> endobj
+8761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 700.141 526.464 708.598]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.45) >>
+>> endobj
+8762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 688.186 135.117 696.876]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h) >>
+>> endobj
+8763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 688.186 526.464 696.643]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.46) >>
+>> endobj
+8764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 674.384 139.367 684.921]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp) >>
+>> endobj
+8765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 676.231 526.464 684.688]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.47) >>
+>> endobj
+8766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 662.554 132.391 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (ofldend_8cpp) >>
+>> endobj
+8767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 664.276 526.464 672.733]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.48) >>
+>> endobj
+8768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.994 650.599 152.547 661.069]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8cpp) >>
+>> endobj
+8769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 652.32 526.464 660.777]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+8770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.994 640.365 143.079 649.114]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8h) >>
+>> endobj
+8771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 640.365 526.464 648.822]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+8772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.994 626.688 156.124 637.159]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8cpp) >>
+>> endobj
+8773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 628.41 526.464 636.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+8774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.994 616.455 146.656 625.203]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h) >>
+>> endobj
+8775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 616.455 526.464 624.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+8776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.322 604.5 184.547 613.248]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h) >>
+>> endobj
+8777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 604.5 526.464 612.957]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.49) >>
+>> endobj
+8778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.883 592.544 164.606 601.293]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c) >>
+>> endobj
+8779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.515 592.544 526.464 601.002]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.50) >>
+>> endobj
+8783 0 obj <<
+/D [8781 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8780 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8826 0 obj <<
+/Length 2824
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\]SÛJ}çWèÑT-“陞¯GÂ…,w¹[©ä>8à$®“5æní¿ß3’ü!y$lK <Å1R÷tO÷éÓ=2û–ÉìÍž,ÿ}}µ÷êÄ茼0ÁRvõ5sRxk3ë­ •]ÝdŸG߇?f£éþr~`öÿ¼ú=I)¡¥Wñ%™)¤æâ…³áÝèáÇðzT¼òÛýõãÝh2ÎÆ÷“Åë¤D 2ó×½²|ÝÚ? )åàèýi!¢&ñbôuŸä`4MðÕB¢f”ÄØÒ‚“ÇÉuTþŸ]Xÿê„MæE°VÇwÈ
+ç]v@A0…âÅÏJ™Ê;Ù§cìàËýýmù½Ì(›ÆÆùq‰ãÉxV3~ÿYù×¾2ƒûñ >Sõ¬›´ÐA·«Ÿ h_Âg)Õd¼é"ê.<˜ûCKÁ\úã}+Ãéxø%úÿv´¹C}g‡ºŽ¯öþ³GåO 1¨”ÎØÅ5f×w{Ÿþ”Ù ~ö{&áFŸý7ò.SÂ|¸Í.÷þY„}u©Š… ÅT¬u¸¯dáêáø«hqeñ #´Ê–›Çí¦>ÄD¸.yu#_gKR¹ÿ‘PÊ(¼X“R7ø§fŠìxþÚíøKÂk†…÷0Ö8!Ùvq$%YáÙ:¿'7~²0PmäHþ‹ãËo¯b´&dUž§Ýt<ù6žŒÞŒfG÷“¦„¥¸‚ˆEk®Tì…s.cÖÂ"vw¥2$Ø’Ø”!tzy˜Ði-žð}èÄnûªÎ«çÇ+¢óq<™iµ¾´3€îî+Ð@i%Mu³Äf#=½©ïuMX|†–ÏÔ±õ@1¢@´Q–þÚèûûzÎl~FGØa@´²‚ψ`r9Ò¶…à1°êA¡CähªhÜ(ð¬ÐÒY¿VAXï+úg¥rxúøìÍéÙqjסׇŽq¨¥s2Ï‹‚`|n‘PçÓûëÑÃÃÑt4œNöÙ ¦÷wïFw÷ }ZþW_KZ ÌÂ]pƒ³]ƒfÍöóG®¿§‰%+[v~/.Ê_”­iUv[å$Aà0Û‹agy=ìØa%°Œ&’ãÝãf 
+IÖºeàEõОR¥X‚Åk#X)jŠ7š+™Š_Œ¯èã5È\4ާȼ©CÆ22$êD´ðªäæ½Å¬Ô^ºÉ8£©=ª'(–ŸÎÆ)0LÆ=…++†¥BVkÒõa™Ö°Ìr'Ë–=-šÃ*†m˜çmN+òœzpZ‘ç”vóüâýÁJ~ç¤d%¿Ž//SùêÚÂàDõaT<^ *‹Ïo£‡Ùô~?Unj<ÎË„~¬,ÙMt6ÐFí)¶O^+WHÒVW C¸è À»´³ÍýœÔÞ Üzôx¾åŽf¾¦¼ŠþÙcd#‡º›ÀÄ‚<õgB[~iÍ
+æõ¸e‚¡Í˜ÏÁŠvãaë<käåh$mŒ´¦„­èm
+[%¡#qÕH/+Bþ±¡Ø@áÛ#¨ZÂâ“gGW§ïÏR;ÄÒ£;A‹ˆðÌ¡¡´­…ÆÛûáÍÛñ—iê KοA  µÄ‹Q‹3­|=öå^n Æ5r„7ˆK°ç:vFyæ\q«ñí+Ö5Å£Ëç-ÊRtNXÆÖ%A°­
+!bà÷Ô#D”SiõH‹·§¯//>¦R˜ñb×i‚Rh«\xîiB :¨\Œ¾f£é*°Œ×ëÒu#ûXHF&*Ô6åºìW°ÂéB’R~¥wa1aÀŠÚ& `õÁïPgj*ñ‹|>pèn,+ÊUcS;Ÿ+Ú.½kÖ4 H¸2;4îKñ%J¬±Ú(59b¥ÕàëdÀ„T§“! ­…$åôÏP³ÁªýK¢Žã£ÛñdTL·æ‹É¡µ–&?~Ò(lÒu"‹ÒçÇOZ$–­óù‡ÔÜØ Çö RG
+ç+*ß^þã)‚ì­Þö±
+Úµ¯KYĈEK}D5ŸŸ“&-j‰,`³qBë˜iRûÜ…Ò篽~üú5–·Ñ´yW颒M7|Ž áÃT—®—A
+IŽyes|Hƒ¬²^0÷¢ÛÅ3Éšîe%©ÓM'8ݵ¢b¡…
+U­óK Þµ Gu>ía pq8šôùÀüS·Ê´Û:Ý} k0>Ú‡uŒ®š7°®è4öi0?ALØ|àþ3NЖpÓHULÊsG¼!Éù Ó3SO£›àf“y°ç§eÊK[”zìZ—9ú€PHÒaõ· 'ˆŠQºÝéªîF²±“#”hY3yAÜr”fóƒ‡î+àòvtÒéí,ä|kܱÍ&y™Oñz0ÉÇ §MZàŽ'ö †ªùåô£>òË@GƒY9ý‚NKÔÙ¼Ÿ/|ôB»ùø{ fݺwÃk}¼vëVŦV7t© sNE1Öí.pÐ9§Š’¬Y©¾Ú¨æ[FHkdNwíq@tZyÊãTÙô¡Ù,LXh~wxžÐèð ô}¨tqé«:KŸovò´Êï˜u_k#Ø›´¿ç¬¤¥Éòh mèÅP&6œÌkS™&EŒ&p§Ž2±‘§g—W‡gG©¨÷‚¼ÞAr[ÓyµåaG
+š±º8’z9ƒÖ%x}˜Ü­ÃW ”W\ÿä¥îs)M2’; çR²»ÎvlçØÁíF™©Á;XÇ2ž¯?ëáð¯ò`71’”,iñûæ’¦„[&v‚ºÝÉ %¡ë[½„‰džh—Ùo›+&pSÚ>¬Ó ­Î4X—¬™,ê†ïA7R•}U÷Ñûó©¢eó.­¥:
+endstream
+endobj
+8825 0 obj <<
+/Type /Page
+/Contents 8826 0 R
+/Resources 8824 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8353 0 R
+/Annots [ 8799 0 R 8800 0 R 8801 0 R 8802 0 R 8803 0 R 8804 0 R 8805 0 R 8806 0 R 8807 0 R 8808 0 R 8809 0 R 8810 0 R 8811 0 R 8812 0 R 8813 0 R 8814 0 R 8815 0 R 8816 0 R 8817 0 R 8818 0 R 8819 0 R 8820 0 R 8821 0 R ]
+>> endobj
+8799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 530.636 127.666 541.047]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a16be55d13bb6fa5e80bc55d97cfcf4bf) >>
+>> endobj
+8800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 517.242 126.94 527.654]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ad624e44013db72b65c53c1491716ee5c) >>
+>> endobj
+8801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 469.096 160.707 477.715]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9d6634a9e755f67551ba7960567e96ab) >>
+>> endobj
+8802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.382 455.703 185.486 464.322]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_af63016ce18fa97e11e2c7fbd087df8b6) >>
+>> endobj
+8803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 440.463 224.829 451.058]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a26eaf859a90d7b536bfe63ab65fd0e0e) >>
+>> endobj
+8804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 427.069 229.313 437.665]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9aeeb4701f5ff5ded1e832018813bf09) >>
+>> endobj
+8805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.651 413.752 272.098 424.272]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a66a3a2f870d0ee47c12a471826933dcb) >>
+>> endobj
+8806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 376.448 221.548 386.968]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ad91c9dbc84b4b5b2d14b2de2bcdf2a25) >>
+>> endobj
+8807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 363.104 272.655 373.574]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a647e243ec12d6d4a89b08f69686503b7) >>
+>> endobj
+8808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.311 349.662 291.372 360.181]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ac88543b95bf6b7d5b210ad34fff6b513) >>
+>> endobj
+8809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.992 324.237 260.173 334.832]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7a1266796d866ba1e5a95ef174b24919) >>
+>> endobj
+8810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 299.014 217.343 309.484]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9c1c5649b66e50cdd494f50de8499a03) >>
+>> endobj
+8811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 285.571 221.055 296.091]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a0916aefb5a0b674e906359e4f7287a6e) >>
+>> endobj
+8812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.831 272.227 241.546 282.697]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_aec99fbf6184d79fb267513ec458de024) >>
+>> endobj
+8813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.632 246.878 209.185 257.349]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7f5edae2a0f54a117256e0540a072c12) >>
+>> endobj
+8814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.606 221.481 262.32 232]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ac75e7aa47df27f7b24871202f85da468) >>
+>> endobj
+8815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 196.132 212.815 206.652]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_afa10536d5a48576f8850f28d1d734435) >>
+>> endobj
+8816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.08 182.788 200.165 193.258]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7937a416de74b923010e90db852006c9) >>
+>> endobj
+8817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 157.439 211.093 167.91]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a6416fadea08e1b102fb5d28fb1e6deab) >>
+>> endobj
+8818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.665 144.046 203.363 154.516]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a018288316481de41a8c738ae5d1e04dd) >>
+>> endobj
+8819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.859 118.698 203.933 129.168]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a985ac573f577001095fd484201ef022e) >>
+>> endobj
+8820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.311 93.3 205.614 103.819]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a72cc14ccc502560229879d065a15c9a2) >>
+>> endobj
+8821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 68 246.976 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a00ac76930544c218724e48a664dbb514) >>
+>> endobj
+8827 0 obj <<
+/D [8825 0 R /XYZ 70.866 789.024 null]
+>> endobj
+38 0 obj <<
+/D [8825 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8244 0 obj <<
+/D [8825 0 R /XYZ 70.866 591.54 null]
+>> endobj
+42 0 obj <<
+/D [8825 0 R /XYZ 70.866 591.54 null]
+>> endobj
+8828 0 obj <<
+/D [8825 0 R /XYZ 70.866 545.57 null]
+>> endobj
+8829 0 obj <<
+/D [8825 0 R /XYZ 70.866 482.309 null]
+>> endobj
+8824 0 obj <<
+/Font << /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8856 0 obj <<
+/Length 2920
+/Filter /FlateDecode
+>>
+stream
+xÚÅ[[sÇ~ׯØG¨2“¹_ô&ËÈÇ©ØÒ‘ˆO¥’<`´v¨È H()ÿûóõ,‹X˜ÁN’ÁÒ_OO_¾îxñ¥àÅÛ“×£“ï.¼*< Öªbô¹pœyk $³¢Ý?÷ ¬?°RöÎ/ßõÒùÞ‡³÷Û«¾¼wÖW¼w>¬Þ¿^ ¯‡èO!…½óÿœ]†×Õ§f)¦íÛo.Ï|?ü0Z~BÿŽÞ]~èÿ:úþd8:ùãD@i^ˆ•’Þ3/u1ùzò󯼸Ågßœ©à‹¿â“_ m3Záõ]qsòß¾\8_7€6kðŽY£
+gãµ~‘ÒD-ê¯?Œ±dëáÍ?Œ~á†Óß]]È’–dYÉ´øF%…sµ”B‹xø²\ÍõÛMSÜ×_{ýôù3Y©|¸)7‹ñ¢ÜTEš
++–ÆÆ•CýF…k„•E·-¨¬bAÛ¦ +¥¶Q5‡lº£j®W¡‰z3: w-šüC*“Þ¤yá¢]Jú ¨Á0.|õýåÇá`:ÇÖÞe:€Ï´­ n+Ì‹ÎÞ¾ª¢øi:[(¹t€h F3#BSƒÅ~2Ÿ=.ª—ØñáGÊ'Û‘ésÒoFæ¦uYð¢~æÕ^™p%%Ô!2)h›Á<< ·…b °FÄÅ¿”´Óõ׆ö¥é•³Åÿúš÷ÆÓÅVúYêôC›/ìöæKO×pT¥™3]\^*dUI2ƽùî%76¿Å³•VÌò‹SÚ2ZG¶õ t§€ªr ;Ë´–íè©ÅkŽ"ìex-3n>±´5æˆØm]2“†Ä K@fÎä[‚Ü‘*âvùeª0»3-ÝêDR–œ9ªø_r×%)KÅ´¬$q^/½%1$ß1/]õ ‘¢ÏoËÅù·É]yÑצ÷PþñTÎ&ßv娘ÏæÓÛÚ¤ß] zì`BTn` Ê‹€XÚ=“`VË9ï]<Í&‹é|¶d­óÉÓW¤Çq|«–÷¬4§¤Ž\^Éù“¨ÀWIêôë—³i¿Ö‘÷ãŽ=?è•î=ëÚ0HSö›²õ¬Ûx™ 靈²z¥”¯^Ì?׈\Þ•uúœ&\$ðh« S.tq‘
+
+É—3õïÃWåáR\…©J’–K®2ÿL>?ß&4÷$Á ÈƳ²‰¼ôµÄ&Sê 9`¢T‡&ìÝôÓC_€=<ôØÃoäæäÒËÄ<žÝÖvº¨?c‰X‚CXfаÀ'\ô>ÍçwkñDBþ¡hræÐ`òÈ-°ŠÁ6+%:m¯gRT’„;£ ;šÜ1šŒu(Ï®C4*¡=šH’rîÅÑ”yM äèi-±äs€ÆXòMÐÍXJm)#‘ê®
+bƒRË8`FŠ
+eÝ`µâƒhÛGÛŠ±È¡€ã«•lY|ÉþH‘Õ %ád†p•Ã؉oÛ#0­ËàNÚ;»K˜
+†i°€F [;aOžÀI^°f¹ÍxŸjÓè„œ;Dh+åU©í`ÆKSµ£/µ^™ Œ—$Ye;½´[1^©wñ·ñÝÝ|’:Ø qÜ©x©ï2Уä(”‡¤ê@­*3‹D‰‘èyà ©²¨&âf 6j³  ·†³/ð†å¬59ñà!‡†
+Ku^¿À(Ê¢†¡ÞfÀ´tÎdöš¥ÝWvL$5šñ€bÞ]MƒnÜ:ÛTóq1ž;ÿ>h½5EËn8"O‚lëFà¯å×yë@Rp îY ž‚}6‘dzñ—òáÚ¸xºODU:+2h+a(iĆºÓÇT (Âä
+ nÒFßÁ a/aílŠd¶. -–ö9V°;nkAÕàCB:×MÖؘ¶HЛº)ò’‘éné³ÌL·>fòX VçÍÁ !ÉÖgZYN÷Ô›6©9ã‚rGê—¤ã"ÎHƒT{¤CÖË€iÐ:ÙÄLŒq69äËJtš^Æ‹bJgОŽQPúšÚ?Òdb£4‚ÛúVùx•fÿFiº,ës@tz®}›’¬@yÁ$e®¿¬ÝäÚ`ð‚EE bXm¿¶å"êµ­;<{‡C*ëh÷TD’¬ô¹SQ"æv÷mR :ý¹S]Ò‚@=´qHîÞ•‰ˆ
+X™ìÀÙÄ<n ¼££n‹+›A_E§rÃF•»>þ¶;,ãñ8*ß–‹›éì÷³[úóö¡||LÞ‹X^³MÞDÐÈ&RÄk€Jtº‰  • !Bû-[ºfrÐéU<D:øhøØÜ Š2ä’d\ørËÑõœFê+LHv:v0Ÿ‡$:•¦î¸“ 7° +fñêds|[‡È®ž­g¨ï2æ½ÕdT[Ïý~|Ÿ \¯[—Hƒ…÷ —r]ÎNhÊ*AÜ­ÍÙ¥o¿¢®P!$:ºÎèÔn'ÓèéVÖFg—šÎö½mB¿?»JÕPí2@Ʀ® ¹ìò¥ßÑåƒåÒ9_gˆäjÕ²Ùuû EvÜíÐ8ÌØú΀ýWî %Nf°sï>ÜŒÎ臮‰–¦ሖ}×ä­‡nhÛ"—¾¢öví~+yĹ=²œÅßæ8ö ã:ßs‚J«bf¤Û.Xº.X_Æ‹ßÊd-âÍ\ºï'»ÁèxêãQe}‹{~Oê~›ÎR¹˜GòÔ˜$ðÐ
+µÑNÄ»¦]ÎH Ìáê㞆GÅ®ú)ug]÷·Ð53Úuô­9Ãê—Y©ó)C]õ!¿é¯Jỉ¡¥¡;MÌÖJ¹‰ü‰ù®-
+endstream
+endobj
+8855 0 obj <<
+/Type /Page
+/Contents 8856 0 R
+/Resources 8854 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+/Annots [ 8822 0 R 8823 0 R 8853 0 R ]
+>> endobj
+8822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.383 758.195 216.423 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7094bb10cb648af45c6407c9e7e1b53d) >>
+>> endobj
+8823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 731.691 198.819 742.161]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a04583f1102d6820e8dde34fc1265a425) >>
+>> endobj
+8853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.38 717.093 232.191 727.612]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a683f0c9bdca244c79055953be296af6b) >>
+>> endobj
+8857 0 obj <<
+/D [8855 0 R /XYZ 70.866 789.024 null]
+>> endobj
+46 0 obj <<
+/D [8855 0 R /XYZ 70.866 699.088 null]
+>> endobj
+8831 0 obj <<
+/D [8855 0 R /XYZ 70.866 678.275 null]
+>> endobj
+50 0 obj <<
+/D [8855 0 R /XYZ 70.866 656.047 null]
+>> endobj
+8830 0 obj <<
+/D [8855 0 R /XYZ 70.866 630.507 null]
+>> endobj
+54 0 obj <<
+/D [8855 0 R /XYZ 70.866 590.998 null]
+>> endobj
+58 0 obj <<
+/D [8855 0 R /XYZ 70.866 546.458 null]
+>> endobj
+8851 0 obj <<
+/D [8855 0 R /XYZ 70.866 525.645 null]
+>> endobj
+62 0 obj <<
+/D [8855 0 R /XYZ 70.866 491.462 null]
+>> endobj
+8844 0 obj <<
+/D [8855 0 R /XYZ 70.866 453.891 null]
+>> endobj
+66 0 obj <<
+/D [8855 0 R /XYZ 70.866 402.503 null]
+>> endobj
+8845 0 obj <<
+/D [8855 0 R /XYZ 70.866 364.932 null]
+>> endobj
+70 0 obj <<
+/D [8855 0 R /XYZ 70.866 313.543 null]
+>> endobj
+8846 0 obj <<
+/D [8855 0 R /XYZ 70.866 288.004 null]
+>> endobj
+74 0 obj <<
+/D [8855 0 R /XYZ 70.866 248.495 null]
+>> endobj
+8852 0 obj <<
+/D [8855 0 R /XYZ 70.866 222.879 null]
+>> endobj
+78 0 obj <<
+/D [8855 0 R /XYZ 70.866 183.446 null]
+>> endobj
+8847 0 obj <<
+/D [8855 0 R /XYZ 70.866 157.907 null]
+>> endobj
+82 0 obj <<
+/D [8855 0 R /XYZ 70.866 106.442 null]
+>> endobj
+8850 0 obj <<
+/D [8855 0 R /XYZ 70.866 68.947 null]
+>> endobj
+8854 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8864 0 obj <<
+/Length 2897
+/Filter /FlateDecode
+>>
+stream
+xÚÝ\[sG~ׯઢNß/zSdä(KZ '•Jü€ÑH¦#§üï÷ë™3Ð3\ºíÝÚ‡,àÜúôw¾sºvž:´óöä§ÁÉ—Vt,qZ‹Îà±c(±ZwŒãD³Îà¡óg÷âçóÛAÿ®wÊí*Ò;Õœw¯Ïßõïo{ŒÓîyOÐîE¿|ýÍÍÅûwýëAõŠÿÿàêæºwÊ8S g•€‹›«òM’îú—ý»þ5þùaðËIpò÷ ƒÑ´ÃVFZK,—ÑóÉŸhç¯ýÒ¡D8Ûù§xçsG*A”x>éÜŸüë„®;®BŽkFèÊó›«»þýû_QE½?^2Ùqø ×þ3Jã¼ðâÝQ*Ê7Õ#lùH<;ûéõñ±Çh7›ßeÃÈf^>^úéý%|þþ;Ñ}Os-·ÇkĨÂPXÑâ;VЭßv˜;M¤¬;œºM÷³_ˆÙø!à3‡awø,‰³+Ÿ+™Mþ͉ÔñþäRa|²m+¶ŽÃhvÞ¾™;·lë”ÌÉâUJΫ+üqÛ_KÁÚ&Ê&ˆµ4ŽpÓìÑlºÈ½òΩ¤p—ºÎ)cÄ)µÚýß<Dl'—´Dðƒ“ `Ñ" ˜ØC&ÿúÅÊ÷Hµö8Áˆ¦O ]¹òÍo2ˆäÓq>žMK[†yù8O³ò™fåãì±|ôŸ˜T¯fãí…bVó wDÈWªf4FrVJbÒ”6&ãlš“ÑËKO¨.)׊Qd1Õx‚ÇåZÝe
+²y6e½SA]÷cPý¥|>†ã¼|È°‚éîÍ£ñløð&[Œæ
+:%JÙ:t4®¢À®7XL'¢ö eDÑR’f{I
+@U„¬iÜ ŒZ½ÉÄð·Ši´‡l¶|%Ä1PT­Là„D› Œ¬;±È‡#¿ªÿhÆžD›’@±ÏiU×ûœ=Ï枀!Ÿ¹M¼ê%·©énã6ÏÃéð)›·ñ Z1 “t<!l`ï§Ï×5zñîüöêÅõú¢¿ß…`ÿu @ñV!<Q( þÿ‡ïèŽ Cá:¸§TöH|WK¢Y|÷’IJûßßeßaÔ
+ß7Û`%—`õ4Ì?…Ø¿x Ž§ÀkÕ‘
+B©««Þ@zì‚M WÖuûÓ'äÅÙ™)4çBѲ)LdÕl˜,Âù²•@¥¤h­ÌΠ•.˜<U¥«W€$Ûb„³†¼gg‹Ñ0ö•Œ
+|è—È µi(<°^’€f^Ï,Ÿý³×ÀÚ1áñY§Ð/)aZ×õïllµ‹ùEGc1ÃEç÷ù8ÜӶőã¨ÛŠ!NTFŽÅA™ q¢*4ÚÄSÞ6"G®JmRŽÈ­+$Æ{çGÕL™w:ÜK†Û¤ˆ¬dÞ Q×Ý0&—!ã)”J ¼®tQ¹ÂÆWV$°@QM¸[!/™ €£Ø
+5<Ú×Y0Õÿ¯a;gåÂÕìp^ãŽä5¾i`.­‘káXô¨Ü~m[Åvƒ†ôni˦ _'“ñã—Po‰˜%MÔ´“¼A”’”¨†cùpþ”å!ŒõÅœ¥PëÐe9VW»ê÷Ò"›†ÚV®Ñ\ñfJ.yÝÌÃq‰$¢N§Ðî(1V×µ7À—k¼ÞeãZÓÛÖ¸nбb[{:柺xœùI/Î7ŒI1à6×¥ eÙŽèa•±õhMsu;)S¬\úÃíÖ¾lÞfùÅìuš¯‘¬PH€†è¸%7EbE0*$ã¥$µœÑ^ÝŸ‡€MÕ0N$o± ×u.Ë~ÛÜ‚Kt’*|c_³ -%Vɦ(¹>z†ÛÃK.WÇ–\Š(•¢æB’2:¶æz‹«š»m´Dx@€•Ÿ#íkñúÇU~°€€ËÊ_­*1^¡DË–Yà 1^±Ÿ„i^W0´S8¯Ó™b2SÓ9œ{~3lÃr΋2­ŸsU”z°‘,Mk¥…áÐ+€,ß®†}“¬¯‘V\°â7qx ¸á¥$jZñÚPìI•B§ÀkU×¹^[ä—L`ŸX3!êäk-ÓõÛ«ë~`mµ§i<Å,X€¹R,áá
+
+ËgìÏß{Ë7^µc™¬# rðQ`ûKV(/Ñ¢”¤Ù÷½­ÑT@¤§°,smŽÔ,윭 v½ŠÊýá‘qÍʃי!ÎÉê%§D[¹¡>E³³Ë-Jdwu¿@Öä.4ý¢øª#Ž~ =²Üs¯B¥(÷^’VÑå^8ÚRî-¶º­HæQHëoƒ*!Tð%ñËï%qºOÁçäÓCñÀ›ºÞçSÕ‘á%ªÙׂ¨À–(BtØW)BÈ…$ŠîB®±xIk¬j áU_²1"…zÿ5àJÝï:w‘Ìnì¤,¬«Üˆ3Q8G„ÞȲ‡òþùxËÐv«ŠS˜$ #‘úv3a‚— $š{KSDB:´“n3µùv9çD†Õçàͳîñ"tLFItÛ¶˜8Æ€“*z`/‰/‰ãbü4N²‡Ãó-{R R)“ÀdÖÀÃéºÅeÝ[|j'Éø{qv$œÍ&+âØm¯Ð§%éuÍZǸ^Ru‹bèÑä³G“áx2ü転IªøÊOú8åÇ~ˆûï_Éõžú•bß¾½gÎ_“Qíý¡šÛ{/ÉŸÀíÛÞ'Ð\µ÷5Íe~45ø.…Ú¢Áwuµ› ~Ï@_§¸X<.°øà“ñ¾páà‹Þ{ñü©‰£,…f`ºÄp‘ä–—¥HUîïö³ïÊ­Ðc68
+A¦º–ú©˜±—¶|uÀ_Á£«ËŸ‹|˜GBøö ¥9ßù‘øΤO øî›ßS¤C©•žéŽ Ì–÷5¥‰Ê J‰*ï}V߶ɛfoÄvp^ß–{ô‡ð_Š /“ìržýýŠúMûe9Ž[n©ÆñA9ñ9|z ŽL6+¾ÊÌ5Èü;P ã¿›Ã$ÐL$ªß–Ø—GÄë­hĺÞöC‚x•ÕÁºÊý¢Õ/Oj‘>ä˜wõË ¡QÀ~ÈÏŒ”°¢Ö6Õ3à¬^ÈĦæÿ
+endstream
+endobj
+8863 0 obj <<
+/Type /Page
+/Contents 8864 0 R
+/Resources 8862 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+>> endobj
+8865 0 obj <<
+/D [8863 0 R /XYZ 70.866 789.024 null]
+>> endobj
+86 0 obj <<
+/D [8863 0 R /XYZ 70.866 739.714 null]
+>> endobj
+8859 0 obj <<
+/D [8863 0 R /XYZ 70.866 702.868 null]
+>> endobj
+90 0 obj <<
+/D [8863 0 R /XYZ 70.866 653.344 null]
+>> endobj
+8848 0 obj <<
+/D [8863 0 R /XYZ 70.866 616.372 null]
+>> endobj
+94 0 obj <<
+/D [8863 0 R /XYZ 70.866 578.929 null]
+>> endobj
+8849 0 obj <<
+/D [8863 0 R /XYZ 70.866 542.033 null]
+>> endobj
+98 0 obj <<
+/D [8863 0 R /XYZ 70.866 492.558 null]
+>> endobj
+8834 0 obj <<
+/D [8863 0 R /XYZ 70.866 455.712 null]
+>> endobj
+102 0 obj <<
+/D [8863 0 R /XYZ 70.866 418.085 null]
+>> endobj
+8835 0 obj <<
+/D [8863 0 R /XYZ 70.866 393.203 null]
+>> endobj
+106 0 obj <<
+/D [8863 0 R /XYZ 70.866 355.625 null]
+>> endobj
+8860 0 obj <<
+/D [8863 0 R /XYZ 70.866 330.666 null]
+>> endobj
+110 0 obj <<
+/D [8863 0 R /XYZ 70.866 293.223 null]
+>> endobj
+8832 0 obj <<
+/D [8863 0 R /XYZ 70.866 256.251 null]
+>> endobj
+114 0 obj <<
+/D [8863 0 R /XYZ 70.866 220.53 null]
+>> endobj
+8833 0 obj <<
+/D [8863 0 R /XYZ 70.866 193.867 null]
+>> endobj
+118 0 obj <<
+/D [8863 0 R /XYZ 70.866 157.219 null]
+>> endobj
+8861 0 obj <<
+/D [8863 0 R /XYZ 70.866 131.407 null]
+>> endobj
+122 0 obj <<
+/D [8863 0 R /XYZ 70.866 93.888 null]
+>> endobj
+8841 0 obj <<
+/D [8863 0 R /XYZ 70.866 68.947 null]
+>> endobj
+8862 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8876 0 obj <<
+/Length 2413
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[ÛnÛÆ}÷WðQªéÜ/΃ãÈ©{ÛG– I™qÈ’¤¤èßw ‡ºPÒ¢È}‰‘ܳ¯k¯ÙCÓä1¡É‡“wÓŸ/¬H,qZ‹dø51”X­ã8Ñ,>$Ÿ:ŠpÒíiÎ;7ƒ»«nÛ¹>ûØ¿»í2N;g]A;çýðû Ñô¯ý.êÎù/g·Ãþ \U¹œ²§ßßœßì_ó+þßáåÍu÷á¯'ýáÉÿO´¦ Ûhi-±\&㧓OÐä×~M(Î&ew>%R ¢¤À÷irwò¿ºk¹ŠY®¡kÓÏo.ý»û«ágª¨Wãç &‡g¸öÏ(IŒó³»?S*ÂMEÁD¹¾OOo'Ïét2KÏéh•B6óòqévpsÞ¿»û)¸?¼4]PI”2™žP¢ÂtDÐmì~i¯ †piö ¾½,É51L´°$wDRQ\òãÙÝsƒ¿Mf+Á#
+XC ·-(à(‘ÌXmÝ}{yÛ¿º¼îGB­á--_ µ$βí=Š…{¤Ú¹§'CÖ˜¤Ç\¸ñ=R€òÙd5™Ï‚*£UøôI¾I>ç_çbš_Ï'/}Ƭ"
+ªÉkû¬ /C‘qm|6žNÒÙŠŒŸŸ»Buˆ_öPŽðj|ax:¿s~õ%ž.ÒÙ8}
+颲ÿßû³Gyzú˜®"F
+,0Û*“ÑÛ{“ 4xœ.—a}~xú˜>Í]dh÷¯?¬‰ ßà7q7þ9ZÄÐNQâhm
+eèhp¢Op¬‰‰<„I†åÙð¼ÈÚqõ¬Ã7'ùFC³-E¨˜›&îeógæóT¡o¡2Ðà•1Av?Åt ò{pÔh´-¬ŽÊ<ÅW/YÜøÉi+¦„Hì› 7"Yw[^uzà÷Í–‹LðûfÅÄ0¡ô¬
+€¥'pFhŸU€t®! X$‰"­ ”ÿZA ZŽ>†\‡3¾õL;FY5¢Ê"Ù?Õ«ÛcÏ[$õ£¯[Hÿ>ÆâL•°-0/I÷ï`,>v%5{5=\M¾,Fù,£z¼±SÄVnêÈŠÊi®ØèȺ;«Ê~Þ ôZ=NƒF‹M•AXlaËoÌ“¯À„µºžua§#ýÚ&>ר†&i²žQŸºˆ|~¶ÍŽdF±€q†Í¨àà…ÀbÕddÄ™"ŽIL™—¼6z”íXMËû·|¸‰/ú¸º|78üƒ|M¸bmP5¯ƒEÑ׃|}$ä !êû,
+ù^ÒÆgo úS€\ ôu¶œà€j×l›êuA[ŸSLª¾Æ2dUIúþÃM?þõvÌ´ÿƒôq²\¥‹Ð&[ÆVZKN¾æ3 r“ZrŽî% üævÇ¿nwt^5ÚESîˆùîÞ¥&{õÆ´`¬äš(cöŒîè ­;µÛ³¦z((•¬ï°ü|ÓÒ°âùæNG)ó¢¸ "ÀñÙhd/:$ùƒ§Æûâ×G‚:#¼õNVé‘X˵¨ï (ÖzIµq²úRg°“puø X»Ï#Z¼¾„ˆÍÊ¿B$Q•Û<ÿꣅ}fiöÒX +[´Æ‹+Ç7ًʶ±¨Ã\Ú⢻½FÊ^crÀ86?~ºš
+Pºûföè)]>ÆybûÜaëÜÙJ¦ ³’¤hm~Ä—ò®ËÌWë·¥÷mEŽÙ— ?s®
+÷'ŸzJi´®Ö-â$8|ñ˜{~ݵ6~ÿéPŸÁ!ÅkÔû"ÛÙW.ýe>ŸV/»H—iK¦fZ¦ÐÓ»Ò_ (ÑJ4Õj•gJ ®A±-
+D„6:Ÿà–h“ ¢4‡˜šÎ°•ÎèI”
+endstream
+endobj
+8875 0 obj <<
+/Type /Page
+/Contents 8876 0 R
+/Resources 8874 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+/Annots [ 8867 0 R 8868 0 R 8869 0 R 8870 0 R 8871 0 R 8872 0 R 8873 0 R ]
+>> endobj
+8867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 170.066 126.94 180.477]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a1e1bb4371c5bac17c6a26f3ffbf6baac) >>
+>> endobj
+8868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 157.103 146.146 167.515]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c176249d2f834112b6677d4309c985f) >>
+>> endobj
+8869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 144.091 159.604 154.552]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b) >>
+>> endobj
+8870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 131.178 144.882 141.59]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_af9fb019f8e0d5d4ff8796b42c127acd2) >>
+>> endobj
+8871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 84.68 181.051 93.37]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_ab1d74c38c46775592b766bc06908581c) >>
+>> endobj
+8872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.118 69.87 182.898 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+8873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.398 69.87 212.899 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_afc6f8a14d2295a7c959d2f583ae6ea54) >>
+>> endobj
+8877 0 obj <<
+/D [8875 0 R /XYZ 70.866 789.024 null]
+>> endobj
+126 0 obj <<
+/D [8875 0 R /XYZ 70.866 752.134 null]
+>> endobj
+8842 0 obj <<
+/D [8875 0 R /XYZ 70.866 728.105 null]
+>> endobj
+130 0 obj <<
+/D [8875 0 R /XYZ 70.866 693.946 null]
+>> endobj
+8843 0 obj <<
+/D [8875 0 R /XYZ 70.866 669.993 null]
+>> endobj
+134 0 obj <<
+/D [8875 0 R /XYZ 70.866 611.848 null]
+>> endobj
+8836 0 obj <<
+/D [8875 0 R /XYZ 70.866 587.819 null]
+>> endobj
+138 0 obj <<
+/D [8875 0 R /XYZ 70.866 529.749 null]
+>> endobj
+8837 0 obj <<
+/D [8875 0 R /XYZ 70.866 505.72 null]
+>> endobj
+142 0 obj <<
+/D [8875 0 R /XYZ 70.866 471.561 null]
+>> endobj
+8838 0 obj <<
+/D [8875 0 R /XYZ 70.866 447.532 null]
+>> endobj
+146 0 obj <<
+/D [8875 0 R /XYZ 70.866 413.373 null]
+>> endobj
+8839 0 obj <<
+/D [8875 0 R /XYZ 70.866 389.344 null]
+>> endobj
+150 0 obj <<
+/D [8875 0 R /XYZ 70.866 343.23 null]
+>> endobj
+8840 0 obj <<
+/D [8875 0 R /XYZ 70.866 319.201 null]
+>> endobj
+154 0 obj <<
+/D [8875 0 R /XYZ 70.866 273.087 null]
+>> endobj
+8245 0 obj <<
+/D [8875 0 R /XYZ 70.866 249.134 null]
+>> endobj
+158 0 obj <<
+/D [8875 0 R /XYZ 70.866 232.695 null]
+>> endobj
+8878 0 obj <<
+/D [8875 0 R /XYZ 70.866 184.785 null]
+>> endobj
+8879 0 obj <<
+/D [8875 0 R /XYZ 70.866 97.677 null]
+>> endobj
+8874 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8889 0 obj <<
+/Length 1501
+/Filter /FlateDecode
+>>
+stream
+xÚµYKsÚH¾ó+tDUËìLÏô<\µÖÆY§6vBÈ^’–³ªÈÈ 8[ù÷Û£pÀš½Ø’¾~¨¿~‰'_ž¼êý>éýzieb™ÓZ&“»ÄpfµNŒ¦E2¹M>öÏÿ¾ŒÆé
+ݹaÐ:ÉüÒ¢Zf”î˜@}ˆ3*†DB"âQ –Þ­Šâ:KIVêcB¨ŒX„JÊ`(Ä‘¡))뀊AC)$¥!Ù”«U‹HPT1£˜ê‹—§‡¦Ô†¡†¡)©U6T"a$SÆ0b_wå+”ŒA
+å+ìâÞ—ì¾Ô”ù8»/WÙÕäïÇù·óiQ<yt€\ö§óÛP¤¯åT@B «›‰›µ ÙrF}Áæ«rqv6£ŽbîۣLJçzÞlN¾”eÑlL–™‡åýïGw'–W1»ÅýÉé݉’ºtȸ2º¤FØWìnƒ‰}~0±4C¡¥ ÈÁ‹ÚN5ïd€öÉÄ8GHÔyÒ1“  Š!™$:¥š’·˜vµ¦Š9ìOóbZ9³È¶øNôo./ÿ¼^´M’g™å²©èd8~5š´dQ‰ÌpA¬”¶º½!vxþîÃÕx´ãŸtª€;è EñbT oø͉’GzC9–1¼¡!@›7”Š†GAÙ©‘oÇ#Ñ!›®B*m#0½e þÕw*Û'ÙÕPAHCɨڮÓÓ8Íî”,.šÅ ÑL•ÅOHâhº%qêƒÆ1=’A82‰ãO·K!.ñ«š¢¨ø  ¤æºNQF$ãÌóü°Ô–C± 1šbw²Í…¶Ö£¡9S¾Þƒ£ÞË>-H¡^þ•j¿õÉ)ƒ ŸÁ_´(Ýåf¾lc¥ Q4ØXá:±R2k’®c(›¯ ¨ã·ðïnZ,kž‘ßa@ØÓ+Á Ï>.½¥³Ïíûb/¾`Ÿ#l'²)…~ÛÐkHK—k~I¹]çèR½wÛ»ZeKY÷
+»?‡âH«Ã‹Gc‰½˜¨êµc§é–˜!’6º‘Î÷l]Bwä+WW¦aVΗ«§ðŸ¤–åƒñë6'îÓvóU_'(š¹&¥:ñÂHëyµ­H͉O
+:å‹^^Ü
+8ð/i\óÉJ×
+ Ü•üóˆi
+endstream
+endobj
+8888 0 obj <<
+/Type /Page
+/Contents 8889 0 R
+/Resources 8887 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+>> endobj
+8890 0 obj <<
+/D [8888 0 R /XYZ 70.866 789.024 null]
+>> endobj
+162 0 obj <<
+/D [8888 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8880 0 obj <<
+/D [8888 0 R /XYZ 70.866 753.828 null]
+>> endobj
+166 0 obj <<
+/D [8888 0 R /XYZ 70.866 733.15 null]
+>> endobj
+8883 0 obj <<
+/D [8888 0 R /XYZ 70.866 709.209 null]
+>> endobj
+170 0 obj <<
+/D [8888 0 R /XYZ 70.866 675.01 null]
+>> endobj
+8881 0 obj <<
+/D [8888 0 R /XYZ 70.866 639.163 null]
+>> endobj
+174 0 obj <<
+/D [8888 0 R /XYZ 70.866 604.915 null]
+>> endobj
+8882 0 obj <<
+/D [8888 0 R /XYZ 70.866 569.068 null]
+>> endobj
+178 0 obj <<
+/D [8888 0 R /XYZ 70.866 534.82 null]
+>> endobj
+182 0 obj <<
+/D [8888 0 R /XYZ 70.866 495.638 null]
+>> endobj
+8884 0 obj <<
+/D [8888 0 R /XYZ 70.866 476.376 null]
+>> endobj
+186 0 obj <<
+/D [8888 0 R /XYZ 70.866 456.57 null]
+>> endobj
+8886 0 obj <<
+/D [8888 0 R /XYZ 70.866 431.757 null]
+>> endobj
+190 0 obj <<
+/D [8888 0 R /XYZ 70.866 397.5 null]
+>> endobj
+8887 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8894 0 obj <<
+/Length 225
+/Filter /FlateDecode
+>>
+stream
+xÚ•½vÂ0 …w?…F{@•åXqÆ45´œ’ÐÄ8LåÀR&^'„.=ºøïJ׺Á Vê9©§ep°qŽP(+F±°ÓÍB˜u×ïfÁeÐm½‰ÃÖX&]Gº‰÷÷>.cÛñj³(ºy­·)öwÕÏ>u¿tÍç&¶iVÆ5½u­Ù§µŠI]”ÍSØŸ)CÀÀ|ÕnOpÈÚ]à:Už¡ð}áòùõ¡hNþØyú2[þÇqbè=T™!ËÈGx^r%Jvœ Z™R<¾Íin8ÏR
+endstream
+endobj
+8893 0 obj <<
+/Type /Page
+/Contents 8894 0 R
+/Resources 8892 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+>> endobj
+8895 0 obj <<
+/D [8893 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8892 0 obj <<
+/Font << /F83 6620 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8903 0 obj <<
+/Length 2186
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZÛnä6}÷WØ—6fH¯ÆbÙÌd1›‰÷i&=mÙ¶/N_L¾~EÉnª¥îŽÅ‡ÀŒX§X¬:§Š/
+^|¸âÍßÞ^}ÿ^S!ÓÞˆâö¾°œ9c
+ã #é‹Û»âóä‡ÇÙÓ®Ü\O¥usýëíõ*)q'Ã*^L•gNêfÁb¶ÝÆÇß®çûe¹ÚÍvÕzõ¼THæ…ÐÍRm™õÍRÃDxêêÝíÕoWÿÊ Q.™ò¾ÐÖ1Ï]1_^}þ•wøÇ ÎÈ»âúÑeAÌY¯EñËÕÏ/|Á;³²¶ey³Ã÷_8§õì®[c›dó`käH¡·; Ö/»Í~¾‹¿?•÷ׂOÊM¹š—1p‚óÂ3o¤ ƦN3Rª˜â¬QÑÚߪÕ|±¿kˆƒç5!ÊîÕþ½Ï$ÎA‰ö‰õýýagmýãå\9³È¤Ú=ì¹ÜTz&µ‰þgÿ5ìjQÍã.ßìv›êëµä“ý®ÜÖÑo“óû÷Jˆ¹1TÇÎ0ë`MxÆ…ŒÖ¾H©“5ñÈ6ÍÙ}úž¥ÇÑcš[œ”9u”’Ÿžd⌇<2ÖžÏ!é˜R&° Á™ySn÷‹Ý™@Ÿë€÷>ÿ¢†‰)Gˆ1RÖêÃÖfR­Z+HHBâ“ß«˜½€¡(t¡¼BQ‰Q1ÌðhÉò&/V!Çö˯à¬Â€–—mt[ýy-ô¤oX.„+”ÌËQÇ*s<Z²²9Ösñíf}‘E[ŸÃ'Å™2>õi[®†’<é„ibjFÇÔ„#9b
+K–2Ät¼OmL}Ú”ó²úýZ"wìPªñÈuJ‚ Éœ‚Èùäm¹›U X‰Ò[nç›êéExWxJ¥oK°—\UõÓõòY#D‹jU6Ò/ãßõ}üV,Êöÿ5ìÇYŸðc¯eãõ¿ËºR£Ïá
+ v€Ù¡0vŒÂS\¡|‰Y;¦°Šq éö²éTeqƒŒÊ,x¸»ï \ªñ¬P>,f7Gþò Ûúê%2,(ÕAn©äeãGµŒæL×wɵ–)s-û2–›“µ<[,ÖóžÞG¡÷±`¬57£÷1Ñ’ö¿O»¾VÏ„÷p”ÓàÜ4¥˜~ËZ{",óõòi¿+/~>¶¯ÓžêïÊsRQGCFÉóÝ+”ߢc\¿ˆ”6EîÓ©SÁ©ý=Ç ½v<Gh¤ÔLùNl–U_Z£uó6GTÐŒC·;Q™Ýݶ#C£Ïà#9tŒ.u1°X_dÄÑ`õxTˆ#Ò)loÁ«æmiLá‘£í|X¯;_ÜÜÄn±¨î¿õÖ™Ä@.às£Þ=á<–ŒkoRf›‡²Oe‘òdEX‰Ð‘Â"KæA>þw?£Oèȵ˜ô¶…'½¬è)‡| >zƒ„ц¥Œš¼}|ÕþNÐ<z.O9h†,ÉÎiôdÆ6äûx\±dŠ»,—k¡¾óìéóÐm‰[/Æïìy9[ÍÊÍáù(?<X ðZeðF¢ŒR©7ƒ¯ ¾ÀÕãaÃùöø~¤Â+_/Èp‘ÃWE<¶ø‡¾¿^ÀôÅÑ„eÀEƒ¾‡Ip;,Ÿ¨¥uÕ—-­›k#¯ŠŸo P(]¿ßoŒû E¹úxø|£.VëÕ|½ÚUûõ~Û“hÜ2’4[
+ŽÙ„ìÁ£“d±0¨‚,ë³{û)ø)¡|ãCò€g´‹Ao4w‰g_ø¨ðÝR{4zè„‚6½6BÏý ä@õ/ý¢^ãYW8Bç4J9Ó8p‰&ÅEÉ,´­?G -@³å!öðE¬‰  Éì}Ú9+­Ä©dî=áC=ï_¸còeA¡ð¢Sgˆ
+aÌ7èáÏD¥¾"Tîd­—»ýSO­¡CáÒU…ÁØ&~.«mÏD„¤†Ê¨ñˆZ
+ Ð*l
+ViŽvÏ¥{t©ÿò%™„©ú‹P´;þ ›<‚-üËÞ3d
+endstream
+endobj
+8902 0 obj <<
+/Type /Page
+/Contents 8903 0 R
+/Resources 8901 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8858 0 R
+/Annots [ 8896 0 R 8897 0 R 8898 0 R 8899 0 R 8900 0 R ]
+>> endobj
+8896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 506.533 154.054 515.281]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8) >>
+>> endobj
+8897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.554 506.533 178.469 515.281]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status_af09e368dd35013edc44a2b9ff320a548) >>
+>> endobj
+8898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 493.558 167.907 502.176]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status_ac3644e2644a956df76cb7b8d7e7e8b37) >>
+>> endobj
+8899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.797 480.582 158.412 489.201]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status_a6895677ad0c9a59d9b7af23ec2ed1bf7) >>
+>> endobj
+8900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.797 467.607 175.125 476.226]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status_ae2c948c47fabff039db2092e9013134e) >>
+>> endobj
+8904 0 obj <<
+/D [8902 0 R /XYZ 70.866 789.024 null]
+>> endobj
+194 0 obj <<
+/D [8902 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8434 0 obj <<
+/D [8902 0 R /XYZ 70.866 596.241 null]
+>> endobj
+198 0 obj <<
+/D [8902 0 R /XYZ 70.866 596.241 null]
+>> endobj
+8906 0 obj <<
+/D [8902 0 R /XYZ 70.866 519.537 null]
+>> endobj
+202 0 obj <<
+/D [8902 0 R /XYZ 70.866 453.307 null]
+>> endobj
+206 0 obj <<
+/D [8902 0 R /XYZ 70.866 405.039 null]
+>> endobj
+8907 0 obj <<
+/D [8902 0 R /XYZ 70.866 383.983 null]
+>> endobj
+210 0 obj <<
+/D [8902 0 R /XYZ 70.866 365.004 null]
+>> endobj
+8908 0 obj <<
+/D [8902 0 R /XYZ 70.866 327.362 null]
+>> endobj
+214 0 obj <<
+/D [8902 0 R /XYZ 70.866 294.806 null]
+>> endobj
+8909 0 obj <<
+/D [8902 0 R /XYZ 70.866 257.213 null]
+>> endobj
+218 0 obj <<
+/D [8902 0 R /XYZ 70.866 224.608 null]
+>> endobj
+8910 0 obj <<
+/D [8902 0 R /XYZ 70.866 198.921 null]
+>> endobj
+222 0 obj <<
+/D [8902 0 R /XYZ 70.866 166.365 null]
+>> endobj
+8901 0 obj <<
+/Font << /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8935 0 obj <<
+/Length 2432
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[KsÛF¾ëW j/dÕr<ï‡j+UŠ»›Ší¬Äœlh’Y¡H/IÅÉþúýÈp@QÄ؇lAØ_wO¿>°I‹û‚ÿ<ùq|òêʊ§µ(Æw…¡Äj]ljfÅxZ¼hÂÉp¤9œ]_?Œ:¹Ÿü÷„A-XÁ˜‹¬Þb©+nNÞ} Åü© D8[|©n}( Óáb^Üœü'͘ JÉüâòæ|8âÆnÆ×CI¿žë߯/¯.¯/ßœ_GLh)çÿ:ûe|y]ÿU•Ï>»¹©_ºx{þëëË7ã!ãtpVý?þ÷Û7»5>°–X.÷$4–âÉ&ºíW©¶l³ŠXHÖŒÐÆ´ñ§²Vlº¼}|(›Éf¶\Ô/Ý ,Wõ/›O³u}µÞà%¦·›ú…/Cü6 ½/åjÈè`²)§AÎjùÐ)·EÏçKÿÖ/³Å}ýò{Jù¼<­¼Ñ˜Q0ba݈9"Œ¬µ~ϹŠnª}¶ºλÆÛÞ”ÒƒådŠådJ>Eoxu¥DÁ8qŒ)ïšÓÄXSŒ„$œé§ ƒ¥”˜Õ*tŽÎqT†h³ïˆ±FÄAÃ3Ž3tº%M8›i¹¾ a·Y=yûº¼óî-Wåâ¶ôJ½º‚Š…Ã)s]™¢8ڈ㇠¢þ6[ÜΧÍýlëvDª´¾ñ)‰¦î¸-'‹„/”†1¢ÐVÇŸI@g[Ã1…kÊ+Y0¤B}ÜÌæõ¶ÔªÊ“ ÜõÞ¹”ïÑêl¹¬Ž¸#TÙúÖ_?z?ÎgÁÇg›Íjöqˆ„|Ü”ëV°DiÔ„
+³•%éˆ ñ7[l´L…Ž‚O]¡…&Öò—Õ«Xh!E-IÛà­MP%‘ÞÔ“uÙJŸ ôHÀmV{—¡TÈ~¶ÁëTÛ¶!;¬vÙVמÅo}ìë¬&ÓÙCº÷¥
+ÍáJö²W)kI¿Vgµ«JxÐnë˜üËï؇dVHN”qqRø6ËBÍ»(7“Ù¼)âPc5û\u‡JZ¤9³á¢ô•|1ûÚK&¡zÍg‹Ðàóêçòn»ö××5Æ¡HR](-§¦£&Ì©J¥v»ÄŽ
+¢ˆà³ÜWg5 âuùð± ­òb²™„«¨©6‚;ÝÖ‘P˜D„`…B^¡4¾ÌìÎ)B¹„r¨›lª'ÝßPª!½?°/ ÚÚÙÇõéiSŠZ4’c?"ªô±Q%}Lä* 7»¦‡oŒAH «üqM~û~.š~Žd\ ª6ô§¿–ƒ·ÍSe`5y! —«ÓSŒZ»æpaˆ@Õ•Ö2ª‡=\Òª0xI´‰~B½I"X8¦‹–œW)¢˜Žq}´¬¨Æa^’9P-*Ÿ–1j3ïâzžá²X‹hQ¶eíç%JA™À~N9ìå‹·ìõeÀ·OoöŸï©¢øÇþŽ8:ìŠ!‹4Íviĉ{(WúALåÀ”˜ä¥l…z˜$îËuË3” „6`lR3hcPwEëhVådš
+*QKRüJ¶>8ÙÕ £ 1žôÖKqP.#½Fu-÷*+ª¨–'©h‡ðñO1y¸><gµ êÔâå»]šx14aî2èÂ$Šºmé’¤]LûI"¤Æ !]—ý©ÖîqÏ3gqCËõÉfÇÑâ™Ï‰Þ˜U3±<ÆLPYêQæÿ±K-0/Hså¾:–ƒÖl×ò¨ÅÌ%rD¯><Ö1èír±™Ý?.×]D¤›ú
+‹ó39"##¦>~ÀN¡rœ»pˆ iº£¯ƒÛÀ‰¶Åmö?©GgÅx`û?©÷‚(w‡?ªïÜ<ª kj³
+«e{VoŽ%6BØ—ØxIT~K^#|{²²¯y©„n^ã%Q{±É€ˆM„¹ŸÙd
+¿®ˆîIý`æ2l+zI¶½µÚ½xŒ~¬üºn¼x,Â^ÙÙjuqÜ0ýfÀÓßÓÊ¡¯rßsqD½öᇠæRà¸å! Àê™`ïpt³h}ï/
+endstream
+endobj
+8934 0 obj <<
+/Type /Page
+/Contents 8935 0 R
+/Resources 8933 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 8912 0 R 8913 0 R 8914 0 R 8915 0 R 8916 0 R 8917 0 R 8918 0 R 8919 0 R 8920 0 R 8921 0 R 8922 0 R 8923 0 R 8924 0 R 8925 0 R 8926 0 R 8927 0 R 8928 0 R 8929 0 R 8930 0 R 8931 0 R 8932 0 R ]
+>> endobj
+8912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 740.543 131.163 749.233]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h) >>
+>> endobj
+8913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 635.538 143.859 644.157]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc_a46f0ae505f200aa06d12de3b36b9025e) >>
+>> endobj
+8914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 622.725 141.77 631.343]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc_aca67463d4828ad600d5e0913e7bf2424) >>
+>> endobj
+8915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 608.284 133.378 618.529]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc) >>
+>> endobj
+8916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.878 608.284 150.315 618.529]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc_aaab1872504510d70d292ff02e53475ae) >>
+>> endobj
+8917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 299.656 138.372 308.274]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h) >>
+>> endobj
+8918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 194.652 125.273 203.27]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 194.652 148.199 203.27]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_aa9b3839dad698546ebb8904a8cd19297) >>
+>> endobj
+8920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 181.838 125.273 190.457]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 181.838 142.721 190.457]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_ad84ababa734cd58b8faa38879ce2339c) >>
+>> endobj
+8922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 169.024 125.273 177.773]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 169.024 151.687 177.773]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_a9a4da4ad8a7baab9a32eed94538ad71b) >>
+>> endobj
+8924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 154.364 125.273 164.829]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 154.364 149.688 164.829]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_a913b379e719ecdb9f8330f5227660948) >>
+>> endobj
+8926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 143.397 125.273 152.015]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 143.397 148.693 152.015]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_aab6ee50b864c34019918aaa1d04674f6) >>
+>> endobj
+8928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 130.583 125.273 139.202]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+8929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 130.583 166.177 139.202]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_ab68e755de9b084d8f2d2230205135c8e) >>
+>> endobj
+8930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 115.999 133.127 126.388]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc) >>
+>> endobj
+8931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.627 115.999 151.553 126.388]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc_a9eb44ef1e86714106d97630d25055de0) >>
+>> endobj
+8932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.545 115.999 247.841 126.388]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a7794447f8e3800689e053e9833be2c75) >>
+>> endobj
+8936 0 obj <<
+/D [8934 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8435 0 obj <<
+/D [8934 0 R /XYZ 70.866 734.12 null]
+>> endobj
+226 0 obj <<
+/D [8934 0 R /XYZ 70.866 725.256 null]
+>> endobj
+8937 0 obj <<
+/D [8934 0 R /XYZ 70.866 648.53 null]
+>> endobj
+230 0 obj <<
+/D [8934 0 R /XYZ 70.866 594.169 null]
+>> endobj
+234 0 obj <<
+/D [8934 0 R /XYZ 70.866 547.749 null]
+>> endobj
+8938 0 obj <<
+/D [8934 0 R /XYZ 70.866 526.716 null]
+>> endobj
+238 0 obj <<
+/D [8934 0 R /XYZ 70.866 507.76 null]
+>> endobj
+8939 0 obj <<
+/D [8934 0 R /XYZ 70.866 470.065 null]
+>> endobj
+242 0 obj <<
+/D [8934 0 R /XYZ 70.866 436.203 null]
+>> endobj
+8940 0 obj <<
+/D [8934 0 R /XYZ 70.866 400.1 null]
+>> endobj
+246 0 obj <<
+/D [8934 0 R /XYZ 70.866 367.829 null]
+>> endobj
+8436 0 obj <<
+/D [8934 0 R /XYZ 70.866 293.233 null]
+>> endobj
+250 0 obj <<
+/D [8934 0 R /XYZ 70.866 284.369 null]
+>> endobj
+8941 0 obj <<
+/D [8934 0 R /XYZ 70.866 207.644 null]
+>> endobj
+254 0 obj <<
+/D [8934 0 R /XYZ 70.866 101.884 null]
+>> endobj
+8933 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8964 0 obj <<
+/Length 2237
+/Filter /FlateDecode
+>>
+stream
+xÚµ[[oÛF~÷¯ °@!«éÜ/Æb×q¶ š¸uÔ''´DÉÂʤ+QÎv}Ïp†6‡¢®œ<$b¤áùÎý|CNp2OpòŸ‹ŸÆ?¾×,ÑÈHÉ’ñ,Qi)e(’$O“ûÁõÏW¿oî†#ªô@¢áHR:¸þõêóg÷Õ»Ûë?>Þ| Ń«êïñ/·Ÿ†#Â…àp÷÷\ ü1r<¸}gÿö‹ý•°†Ü»›÷7w7Ÿ®o†_Ç.nÆ^Ð'äUK­‘¦<™<]ÜÅÉ~û`ÄŒN¾U+Ÿ.œÁõ2ù|ñûnZ.XB0RÂÈ¦é’ \Û.C,Á>fOÙÊÛœ–©¿*&›§,/ÓrQäVÓJì›Cq2"1/o:$bð²m&H1–(Nûì°˜Wcj#ÞÐ4Gœ:9JxÌõâÿÖ‚Aæ¾Z­ÞeëÉååOé:s
+sÑ1"à1¡µße_0¦ù¢²±’’–îs¹È½\&Üg1sŸöŽ¥ÿmÚa2Ñ€ÃD¢(ØÄÉiF-¥Nç^åM¹X¢Gdq?ĉ€ Šu î²ÙWVY>ɦÃ#jð0„LüË]ßÎÀV¤Së-;nñ\«ËËyZ>B"lYD¹Ey¢ ©ía°\;AŒzƒ&ųÕ÷/«b±);à!‰´bà!‹„d!ü2þ þ‚‡¨, !¶Õ`T ŽI5Õª±ÊÒi&—R¶?$7ˆÊâj'ÍçÙºW)DˆŽ
+Ǩ;MfX;ÙöNØD@¶¨prØ
+%.ÄÁ€Q,‡>QB—2@ÜžS’…
+)NêÅl¶ì<‡A¯Ú U®öözÔè–KCD¢ìЕ¬×Òƒñ %æ¼Ú2‚Ûaøªâ¿_ûQãŒ$+4 Ì C?ò~ùmó`ý¸\øÚ̓nï7ùÄ–ÁºÅuAJ‡ûŒãó2qí÷¾†a·öö2¤bP,|«¾ôf¿VTõs`Ì:ú¯ž¡ù5étº²‡ýèÜ,òRò.öÀ ]芸Ø'Â=F9ÌL(i"}º×­3Ëí }0"Ü=ɵ}Øéö®÷åCQ,ý÷Þ®ºñsÝ’ŠUG
+I÷ú©Y;ƒ¤„5¼]Gi/ü¡`ÿPT.¨®›âjo(÷´Ö9ƒîwƲ€^ºWGCi(,bŸà^»YHfœ$†EMû¡]ùÞ‘öfù*{* jʺvb¶ój‡@O}’Ñ:¨¤QN®_ œëéNkU ‡Ðyª
+{ŸÆNäÑø·yIsPÚGKÜû×»wµx±Î:÷ý{LñκòÌM•%<}Üùo€)Z=lõ{ÍM^¶‚é>»NåÛ=åL¾ÛÀˆÆ¢ö¿ØZ
+$ëS Ä
+endstream
+endobj
+8963 0 obj <<
+/Type /Page
+/Contents 8964 0 R
+/Resources 8962 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 8952 0 R 8953 0 R 8954 0 R 8955 0 R 8956 0 R 8957 0 R 8958 0 R 8959 0 R 8960 0 R 8961 0 R ]
+>> endobj
+8952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 331.514 128.402 340.132]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h) >>
+>> endobj
+8953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 222.003 133.88 232.414]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_acffacef8c7bf221c9354c35c65a4d6bb) >>
+>> endobj
+8954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 208.721 157.249 219.133]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_ae14c5874ed8f0832e5ee812851afcee6) >>
+>> endobj
+8955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.657 208.721 223.76 219.133]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+8956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 195.314 171.995 205.851]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_a2dfb82ff18281f05661a52c3659282d6) >>
+>> endobj
+8957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 182.032 186.575 192.569]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_a2fbd8cc076fd2fb76293aa06acfaef96) >>
+>> endobj
+8958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 168.75 169.503 179.288]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_af36703fa5360ecb7998fba47d0c79977) >>
+>> endobj
+8959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.698 119.31 167.028 129.776]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+8960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.528 119.31 205.144 129.776]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_a51c96c26f58c86a6f0025be10a1ca8e5) >>
+>> endobj
+8961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 69.87 151.83 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data_a62965c3c110a7117db50d909049645bd) >>
+>> endobj
+8965 0 obj <<
+/D [8963 0 R /XYZ 70.866 789.024 null]
+>> endobj
+258 0 obj <<
+/D [8963 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8944 0 obj <<
+/D [8963 0 R /XYZ 70.866 753.673 null]
+>> endobj
+262 0 obj <<
+/D [8963 0 R /XYZ 70.866 734.472 null]
+>> endobj
+8950 0 obj <<
+/D [8963 0 R /XYZ 70.866 696.447 null]
+>> endobj
+266 0 obj <<
+/D [8963 0 R /XYZ 70.866 661.151 null]
+>> endobj
+8947 0 obj <<
+/D [8963 0 R /XYZ 70.866 636.803 null]
+>> endobj
+270 0 obj <<
+/D [8963 0 R /XYZ 70.866 601.525 null]
+>> endobj
+8945 0 obj <<
+/D [8963 0 R /XYZ 70.866 577.235 null]
+>> endobj
+274 0 obj <<
+/D [8963 0 R /XYZ 70.866 543.813 null]
+>> endobj
+8946 0 obj <<
+/D [8963 0 R /XYZ 70.866 517.667 null]
+>> endobj
+278 0 obj <<
+/D [8963 0 R /XYZ 70.866 484.169 null]
+>> endobj
+8948 0 obj <<
+/D [8963 0 R /XYZ 70.866 472.066 null]
+>> endobj
+282 0 obj <<
+/D [8963 0 R /XYZ 70.866 436.797 null]
+>> endobj
+8949 0 obj <<
+/D [8963 0 R /XYZ 70.866 410.651 null]
+>> endobj
+286 0 obj <<
+/D [8963 0 R /XYZ 70.866 377.229 null]
+>> endobj
+8437 0 obj <<
+/D [8963 0 R /XYZ 70.866 324.209 null]
+>> endobj
+290 0 obj <<
+/D [8963 0 R /XYZ 70.866 315.32 null]
+>> endobj
+8966 0 obj <<
+/D [8963 0 R /XYZ 70.866 236.881 null]
+>> endobj
+8967 0 obj <<
+/D [8963 0 R /XYZ 70.866 134.314 null]
+>> endobj
+8968 0 obj <<
+/D [8963 0 R /XYZ 70.866 84.874 null]
+>> endobj
+8962 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8981 0 obj <<
+/Length 1798
+/Filter /FlateDecode
+>>
+stream
+xÚÍY[oÛ6~÷¯0 °™%ïÆ0 Mœ­EosÜCÚÇVRŽ”ÉrŠýûŠ’-9têDF±—XR¤Ãsù¾s!itÑèÞ«iïå¹á‘!V)M¯#M‰Q*ÒˆbÑt]ö‘d0T
+ÿ»LÒØ_1ÁüEvíÝ'˸~†w<›-ú¨ÄeM¤#à1g`XíÆ¥ZJ5DI/I÷ªÇéS‘É>ùF¼¥m· ×! 9:6•ãN³tUäëy‘åÞš¶Ÿeóõmœ³­S%ßïÔ“§ýu‘ÍŠÙhÔ¼«ý'é`(¥êÏþá½{-K^<‘EñPÂúG:¨”âÃý[èÁGˆÐ¢~ã<XäEû¿4E@Ûúíu’J"¨ÑWLEÊ2ÂxZÛëiE,õ’J*—-VH´ÂÔz-ã·™&V°­7$«äè¦Ïû.“ÔÁùk€CÅÙçЂw¢…ÒŒ¡Ž@ 'I¡¤çÐbK
+^‘â]|{WÀ?_§ó­žHƒe–ÞøÛ„¨°ùÐ3L"Ü@F
+æTw€“7æ%qZé“Ç×ná8ÓyÜd"c öáHid€<H :(ñ IÑ H”á¯=P’Ö{p„† b» P[8A¯òÚ«U º`ü×_¨ (ë:[ö±8eùh´Š‹õ]À,…c&%š³.f E˜õ’$¯ï¢­ÆÊAÀÅž
+W€ä î$1£þ/K˜ÐÇÀ8"Ô
+s,Œ_eÙ2„ñì.Îg®/ò]
+kV\ÊQŽªqô[¨rSôi£ ´A»¥.Á`›À6‚²ðRBñV“ð(°&+kÏIóBwâ€0¾‹íÎ'É%‘Gú…&>êv¡Ä‡}<æñmæˆq² Î1©'\6´Ð% jÀ:å%iËNyWHUlNžwÝâÎyŒÜç$J:,÷鮹/çqr?
+¢¬
+Ë]†MœVu2æËÌàÚ´×] æÚfï èZÍ#©tßÛøÄλ‘OQÞd–V­Iˆ±ó»u{Ø{a-àzƒVvüÐ`÷º“¤´Ý™NC<s3¾+GOï1T'žqD$G ™„V·Åp…×9mOñu-œ„ÚÛÒ“xkh.AúkåÌtщÌc¥áœÂh—Ž¾áÆIÂ!Ÿòй ÆìëâðFA´× Ó¹Ù
+ #~ÐxàêÓÚ(`ˆvŽ„+:M@$xIÔÊ:¬Ó`·ƒ9s†Ë»<¹Ÿ{ÊDªç´ü¦[Ënü“ÇØq’¤<òX;[„60Ãe8'If:èΔÀdä%!»¶ÎF§
+ß„æN
+£‹VÍ-•¢êMáâ[²ªfŠålU]~w¦ÎVuLÒ:i׺γÛúó¸)t¹,½ô=©“‡§Ë¨tX}6¹CŽŠcG¡«$õƒÜzÉ»5¿©ü;ÁÏ.Ë)ëÒ1à
+?ÈlÖìx¹½ Û‰1\–¢hµ›QÌ®–±wðŽÂã¦Òï÷ð®°À¶Û™~\_9'.“yUÑŠ"OÊ4¸.âÕN(wÑFWeCïjL¬îwE ¼3"ƱÐeòe ¯¹—䎢¶Çaº8[ÓÙm¼C¬Jë!gåé ŽÆ˜²ºŒ*ŽaJÂêyqX¾ò
+endstream
+endobj
+8980 0 obj <<
+/Type /Page
+/Contents 8981 0 R
+/Resources 8979 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 8976 0 R 8977 0 R 8978 0 R ]
+>> endobj
+8976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 241.317 161.173 251.854]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+8977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.921 131.856 147.338 142.196]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry_aa0dbca4bfa65775d2fbb158847b2c98a) >>
+>> endobj
+8978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.921 118.339 142.855 128.679]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry_adeeae84ac8c3575d917f47515d246858) >>
+>> endobj
+8982 0 obj <<
+/D [8980 0 R /XYZ 70.866 789.024 null]
+>> endobj
+294 0 obj <<
+/D [8980 0 R /XYZ 70.866 771.024 null]
+>> endobj
+298 0 obj <<
+/D [8980 0 R /XYZ 70.866 722.958 null]
+>> endobj
+8969 0 obj <<
+/D [8980 0 R /XYZ 70.866 703.223 null]
+>> endobj
+302 0 obj <<
+/D [8980 0 R /XYZ 70.866 681.997 null]
+>> endobj
+306 0 obj <<
+/D [8980 0 R /XYZ 70.866 653.081 null]
+>> endobj
+8971 0 obj <<
+/D [8980 0 R /XYZ 70.866 633.346 null]
+>> endobj
+310 0 obj <<
+/D [8980 0 R /XYZ 70.866 612.062 null]
+>> endobj
+8973 0 obj <<
+/D [8980 0 R /XYZ 70.866 587.613 null]
+>> endobj
+314 0 obj <<
+/D [8980 0 R /XYZ 70.866 551.478 null]
+>> endobj
+8970 0 obj <<
+/D [8980 0 R /XYZ 70.866 527.029 null]
+>> endobj
+318 0 obj <<
+/D [8980 0 R /XYZ 70.866 490.952 null]
+>> endobj
+8972 0 obj <<
+/D [8980 0 R /XYZ 70.866 478.607 null]
+>> endobj
+322 0 obj <<
+/D [8980 0 R /XYZ 70.866 442.548 null]
+>> endobj
+326 0 obj <<
+/D [8980 0 R /XYZ 70.866 401.528 null]
+>> endobj
+8974 0 obj <<
+/D [8980 0 R /XYZ 70.866 381.718 null]
+>> endobj
+330 0 obj <<
+/D [8980 0 R /XYZ 70.866 360.433 null]
+>> endobj
+8975 0 obj <<
+/D [8980 0 R /XYZ 70.866 335.984 null]
+>> endobj
+334 0 obj <<
+/D [8980 0 R /XYZ 70.866 299.849 null]
+>> endobj
+8438 0 obj <<
+/D [8980 0 R /XYZ 70.866 233.778 null]
+>> endobj
+338 0 obj <<
+/D [8980 0 R /XYZ 70.866 224.57 null]
+>> endobj
+8983 0 obj <<
+/D [8980 0 R /XYZ 70.866 146.852 null]
+>> endobj
+342 0 obj <<
+/D [8980 0 R /XYZ 70.866 102.765 null]
+>> endobj
+8979 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F11 6621 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+8998 0 obj <<
+/Length 2506
+/Filter /FlateDecode
+>>
+stream
+xÚ½Z[oI}÷¯hi¥HKMÝ/h4’Ç&»3šdfm&/I´m$Œ½;Ê¿ŸS]ÝÐÕÜ=û¸êúîç»TÑì6£Ù¿Ï~ŸýðΊÌ§µÈÆ7™¡ÄjljfÙx–}ê]üçüñèª?àÆö4é4罋ßί¯ÃW—¿_üù~ôaÜgœö΋ÿÇ¿üþ¡?NR¼P½òþ—‹Ñ‡û«®†Ã‹ó«Ëíçr¯ëñU/ýy1Ÿ¯FïFW££þ—ñ¯g£ñÙÿÎ8§Ûpj-±\fÓû³O_h6Ão¿f”g³oÅÊûL*A”x^d×gÿ=£ué•È%F9]_3B+ù5Q„÷ŒRÚ{ŸßÍW¥Ü“õ¤|z˜>ßçËõd=XzN‹m·J¥Ù€á“uaÃùrý¸^íJä$LdFr ;$Œã6âTblé9C( QÃÑu`õc_ÓÞdõÛüi=þü|3Z‚ÈÖû>Nf}<ÌVA©j;¸&L˜XŽËü3¥|9/¤.vŸ”Tóež¸ááá&üõ¯,òê;| »£ NˆÛÌpA¸å§)#bSK´
+;QøzÐÆäk~
+F˜ê‘;â€pœ+-qJ‡¥WùM_Ð^¾Ê—Ó|/^þžGË[H;Ρˆ]9˜ƒ')•l)¸i!s‚vbØ©`.éGœJ¬4ÐäÔ)LLs¿ÿLÅ?ö¯ÒîËYå^fë^[%ï°(`^Ñ ‹æ¥M§Þfß+6I"(\ÂgÞ·µQGŦ¶ÎÔAlú¤:>6—“ûüµ¸<),y«°ÔZ­»K¿“Ôüø°Té°TÒmÂÒ?¿–ƒ™L#5ª[…%ä a'E‡¥ÃJÛMÎ!œi6ÂR3st4rhÃÀ}:à ÚÖÅœ5£ñDî„E
+`0',ŒÞ0Ôd=½Û%)áœBw¡É<þ7¨ú`~jh£€Pï¸ëÉê6O¸¬„‘
+Ê^Ý–Z¿ÂkŸJéC€Ì|}„´§™¯õ\ ã%$B³Ö&ñ8â6”Îï0U¤"¥àéH§B  ×Uí¬«Êy>-}mÿR¦9t
+Uì%˜¬bò%(½!w°ÐF‚Ÿ6ÅM­‘0¡‰U¨ 8ò“.Kƒ?ž¿z%.æÓ Ôz;óîy9õaóÔ°rì$šÛhŽ÷cÜ›Æ.À?&†e!€BÀÇ¿ù&ŠC©'UTAK¯¦çû}\È£y€ådÍr5je·ÏTÐDIù^+ßÐͲWôVjé¥ÏUïa>+K貨$gI ‚€À‰îY«V=Žà…³ú¤*A5+äÿ– +‘(à; «8ašÅtó ÷]­!¯ì‚®FIˆÇˆna‰ÉêXõ¬h¯ìĦw“²ýݲæÆó¨Hx2«ÝxÞ^é¹ÄÑ.´Î&Ê¥…ßJ´‘w‘/o×w‡å4h šíå&thíåÀv&ù~+7Ê]ˆÓ…z…Ÿá¥ˆ.žóXê++óV”-á)ü…F‰¬$5áÈu +%ѳÒÔ˜/Sh¤4H†špÞ¡2ìäkøc¢s_
+Cô1áÇ_?¤`iLâqæ
+ XŠnÙ5-‡ô"x³6Èh“”2¯V¡åCø³¡™Éùî1Ñp5’œ¢Sž
+˜ûfgþøÞŸ"2¸žÓª‚¤0£ÃNFë„p[AˆÒâÇJU“½áî’_ w co”-wt¤{dKÀ  Òt@×Z”‘:¦[ Œü%¡$20²ÕÌ^‘V¼ª=)-âÜt …T nŽÔžÔ
+.» « ˆ„öW-XqË«¢þÞ˜d1р䩺Y¢ñFÅл§*}ÃA¶ªFÑñQÎ:(F-/æžkQ¯¤q-ßúj^Æ @X;.õÅá,}‹¡11þž¯j5DgáÆp¸8üÚ$Ë·C¶ªÜå|j9ÇÚw33¡™é*Ÿ¬SÓfÉ‹óÜÖl
+©Š¾!¡œù*´Í37E$ï@AÂX€}¬ ê&P¡-±ª¢€ Ô"uš~<Ý_ÚLSwÙ<žŸr“=ä]] “Jg…æK&8kRþ Ý;ÞÉ
+endstream
+endobj
+8997 0 obj <<
+/Type /Page
+/Contents 8998 0 R
+/Resources 8996 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 8986 0 R 8987 0 R 8988 0 R 8989 0 R 8990 0 R 8991 0 R 8992 0 R 8993 0 R 8994 0 R 8995 0 R ]
+>> endobj
+8986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 610.736 153.516 619.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+8987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 504.79 149.275 515.261]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_ad9307d5a12f2a928b4ca9100dc2eb088) >>
+>> endobj
+8988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 492.391 149.275 502.861]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_acb5f8a9ec02ca7b8c8d6bc02d5e49aae) >>
+>> endobj
+8989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 479.992 157.016 490.462]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_a4ebc7d31a61dcd5d586b60d324dfa7f3) >>
+>> endobj
+8990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 467.467 182.89 478.004]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_ad2c23ce1b3105e99ac30db7dd6065a47) >>
+>> endobj
+8991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 455.068 132.392 465.605]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value) >>
+>> endobj
+8992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.366 455.068 172.27 465.605]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_adfcaa390b45aafa30434cd6c491480b2) >>
+>> endobj
+8993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 409.257 159.703 417.876]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_a4c9aeaabb6de128c5b37e2b9fb95bfb2) >>
+>> endobj
+8994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.462 396.617 195.077 405.476]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value) >>
+>> endobj
+8995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.285 396.617 249.492 405.476]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars_a2465982dc7bad1c7c7407edc96420d31) >>
+>> endobj
+8999 0 obj <<
+/D [8997 0 R /XYZ 70.866 789.024 null]
+>> endobj
+346 0 obj <<
+/D [8997 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8985 0 obj <<
+/D [8997 0 R /XYZ 70.866 753.828 null]
+>> endobj
+350 0 obj <<
+/D [8997 0 R /XYZ 70.866 733.15 null]
+>> endobj
+8984 0 obj <<
+/D [8997 0 R /XYZ 70.866 709.132 null]
+>> endobj
+354 0 obj <<
+/D [8997 0 R /XYZ 70.866 675.53 null]
+>> endobj
+8439 0 obj <<
+/D [8997 0 R /XYZ 70.866 605.971 null]
+>> endobj
+358 0 obj <<
+/D [8997 0 R /XYZ 70.866 595.839 null]
+>> endobj
+9000 0 obj <<
+/D [8997 0 R /XYZ 70.866 519.504 null]
+>> endobj
+9001 0 obj <<
+/D [8997 0 R /XYZ 70.866 422.249 null]
+>> endobj
+362 0 obj <<
+/D [8997 0 R /XYZ 70.866 382.893 null]
+>> endobj
+366 0 obj <<
+/D [8997 0 R /XYZ 70.866 335.476 null]
+>> endobj
+9002 0 obj <<
+/D [8997 0 R /XYZ 70.866 314.443 null]
+>> endobj
+370 0 obj <<
+/D [8997 0 R /XYZ 70.866 293.765 null]
+>> endobj
+9003 0 obj <<
+/D [8997 0 R /XYZ 70.866 283.55 null]
+>> endobj
+374 0 obj <<
+/D [8997 0 R /XYZ 70.866 248.1 null]
+>> endobj
+9004 0 obj <<
+/D [8997 0 R /XYZ 70.866 237.885 null]
+>> endobj
+378 0 obj <<
+/D [8997 0 R /XYZ 70.866 202.435 null]
+>> endobj
+382 0 obj <<
+/D [8997 0 R /XYZ 70.866 175.777 null]
+>> endobj
+9005 0 obj <<
+/D [8997 0 R /XYZ 70.866 156.466 null]
+>> endobj
+386 0 obj <<
+/D [8997 0 R /XYZ 70.866 123.834 null]
+>> endobj
+9006 0 obj <<
+/D [8997 0 R /XYZ 70.866 123.834 null]
+>> endobj
+390 0 obj <<
+/D [8997 0 R /XYZ 70.866 92.889 null]
+>> endobj
+8996 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F97 8866 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9024 0 obj <<
+/Length 2032
+/Filter /FlateDecode
+>>
+stream
+xÚÕZIoÛF¾ûWèEªéì‹Ppm¥MP'©¬ô’äÀH´C@¦R‰rÒþú¾á e’)²9ÒCb‰"ß¾|ï qr›àä·³_gg?=Ó,ÑÈHÉ’ÙM¢0ÒR&ÊP$I2[$o)4IJ“ó—ÓÉùååó«áˆ*=¸žM‡Þ\ÌÜ÷éäÙd:yy1Ž˜.~?=›Lݯ²&óÇùõµ»tùêâÍÕäålH(œWÿÏž¿z9|?{q6™ý}F@Nœ\Z#My2¿;{û' øíE‚3:ù\Ýy—pÁà >/“ë³?ÏpSWÁ‚‘F6••ám%â >Æxp•Ý}ÈÖ^Ò´Lý§Õ|{—eZæ«ÂJZ‘}0!NFÄ Æ”#˜¥{î*ŸO
+k®û¿†Òõx|‘®‡ ò¢}}HÄ`3ÏýûÆ D aL¢8Aæ¸5ÀfgŠÚ²R¢ÕŽ’J•ÄÅàÁ¶R½ÒŽ‹Æ#Ââ”y%¥{ä2{‡1-òÊ$•¶©×z™™w¿qW7î¯}b™Õ×à[¥!e1FbTQŠ„VS¶%:Å Iå(1­äYa|?Ôx€>"Ë4#
+êHaÂÝ8Ín† ²uV̳…ûƒ}ö÷|iýH+?*ëÇÍ;,0ü#?z“‹f$4îo³2 ºVàg‘(ˆYë>ª ~v”(Pª4‚
+ëƒí ”ZêQ!ê@rÓãCVgÆÎçˆÀƒw5}ª«™dêïjã›!fÏÕÚA-7nf[³ °e–wÞGj °F8JJ׋‘ÌŠô%ÄX„£D`¬ D½n3vˆ­¸Í:P>·‡¦
+¨+<†0Ôfë
+“GB®‘ ) bŽÕ l¬Áø€uÖ`|#D›uº òƒC{‰ÀÓæ3mž (ö‡Æ¶°Óà8®b8 ‹·Õ)Ng
+Ú=át¦\>Ùé!®¬ôfÍaø׺ãôÅýÑÍcïÝÍØWÚo%U„ö„DÔCí‘ÅåQ[{r ¹–³Ñ~ãbó23B±”°‘§vŒ}i1~Zé/LÝAÚÂí ˜ú¶À‘µï -ÖG;Hž¾ƒ´x>½ƒô¨î '8½î ˜úr²ÓëÒŸuÝAÚ¸ïî÷ ôb%¾ÿ_ÌýÞÖ`‡s°—ÄÕÒ¿ÿln)‰îŠæðÎk7x·v^º³óš¦Ö.¶‘nþG»/Š)¢œGÙ}YZ˜‹ï{÷¥Žï‡ªCU¾(Rð9£Ý#Å@0wØ+¨“»3ÄOåúЋ#†ý ›^[,(ïÕ‘uÿL±”ˆ6§mè¶kï J²§\"†XÀ¬m±Ú/ ,+¥ ¦þëA1€UÃRHušawm) ‡Ø6QãqÝì.ýàií)y žÒ )x›çWÝiº1‰“(Pæ•ŒÑR,%¡¢¹³¿\µ;r×Ì4,e'oÑë¸L7¡B@¡ÙP–­×ÌbÛ©èÐzTZóU¸ø(ÄDž€0§Mžy±8`Je_2QBTZT ˜4ÈIü0)#͸·@Ì«“–@«››MvètGØ×™ôU›'’_} :èÜè/¿%ï[—C¯B¤iú˜— ÝÒF41†}“RȤzíÁ‡¥]Îÿ¦¶UC
+endstream
+endobj
+9023 0 obj <<
+/Type /Page
+/Contents 9024 0 R
+/Resources 9022 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 9009 0 R 9010 0 R 9011 0 R 9012 0 R 9013 0 R 9014 0 R 9015 0 R 9016 0 R 9017 0 R 9018 0 R 9019 0 R 9020 0 R 9021 0 R ]
+>> endobj
+9009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 616.825 147.948 625.515]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h) >>
+>> endobj
+9010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 601.794 157.417 612.205]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8cpp) >>
+>> endobj
+9011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 495.513 146.352 504.132]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_dim_a1f59c96740ff7ae8d38aeb97c9c69cb1) >>
+>> endobj
+9012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 482.204 140.228 490.822]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_dim_a26e271447d66624e94819fd1ac9d6cf4) >>
+>> endobj
+9013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 259.356 138.372 267.974]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h) >>
+>> endobj
+9014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 149.632 133.419 159.972]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_aa6a16cac62e0e8e593c5c944475e34b5) >>
+>> endobj
+9015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 138.045 185.857 146.663]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_a10e8cb3daf495bd9540371c6b6bab44a) >>
+>> endobj
+9016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 122.888 200.956 133.354]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_af5677615efe8c47cc6754c576c166c37) >>
+>> endobj
+9017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 109.579 166.293 120.044]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_a157a1964fd177fa17f60eada69fbb89e) >>
+>> endobj
+9018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 98.116 173 106.735]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_aa7ea491a99596b21ed9ab13ca7ad3784) >>
+>> endobj
+9019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 84.807 161.039 93.497]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_ad0876b0c1b9a131b653eeb87512429a7) >>
+>> endobj
+9020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 155.561 80.246]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_dim) >>
+>> endobj
+9021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.061 69.87 173.986 80.246]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges_a9af47d6a26a5bd9e77154f82529a41b6) >>
+>> endobj
+9025 0 obj <<
+/D [9023 0 R /XYZ 70.866 789.024 null]
+>> endobj
+394 0 obj <<
+/D [9023 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9007 0 obj <<
+/D [9023 0 R /XYZ 70.866 753.659 null]
+>> endobj
+398 0 obj <<
+/D [9023 0 R /XYZ 70.866 734.356 null]
+>> endobj
+9008 0 obj <<
+/D [9023 0 R /XYZ 70.866 708.258 null]
+>> endobj
+402 0 obj <<
+/D [9023 0 R /XYZ 70.866 674.445 null]
+>> endobj
+8440 0 obj <<
+/D [9023 0 R /XYZ 70.866 594.462 null]
+>> endobj
+406 0 obj <<
+/D [9023 0 R /XYZ 70.866 585.535 null]
+>> endobj
+9026 0 obj <<
+/D [9023 0 R /XYZ 70.866 508.684 null]
+>> endobj
+410 0 obj <<
+/D [9023 0 R /XYZ 70.866 467.117 null]
+>> endobj
+414 0 obj <<
+/D [9023 0 R /XYZ 70.866 417.571 null]
+>> endobj
+9027 0 obj <<
+/D [9023 0 R /XYZ 70.866 396.191 null]
+>> endobj
+418 0 obj <<
+/D [9023 0 R /XYZ 70.866 376.887 null]
+>> endobj
+9028 0 obj <<
+/D [9023 0 R /XYZ 70.866 350.789 null]
+>> endobj
+422 0 obj <<
+/D [9023 0 R /XYZ 70.866 317.199 null]
+>> endobj
+8441 0 obj <<
+/D [9023 0 R /XYZ 70.866 252.024 null]
+>> endobj
+426 0 obj <<
+/D [9023 0 R /XYZ 70.866 243.097 null]
+>> endobj
+9029 0 obj <<
+/D [9023 0 R /XYZ 70.866 164.525 null]
+>> endobj
+9022 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F11 6621 0 R /F14 6622 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9045 0 obj <<
+/Length 2373
+/Filter /FlateDecode
+>>
+stream
+xÚ½[[o7~÷¯`_,`Åò~  dm§Û¢IZ[}Jó Hcg
+KœÖ¢Ý†«ua'š£iñáüâÿ¯]]†ÜØsMCÍùùÅO¯onÚ]¾¿øõíջрqzþºùôÃûwƒ!OjâÂ;—?¼|ýxv5:ûýŒAZ°BRJ”à ¢¥®˜ÜŸ}øH‹)~ùcA‰p¶øÚ<z_@%‡³âæì—„ê’
+Â9t¿¼º¹hµ¼]$=ÿõbÔ~}õæêúêÝÅÕ®J ¬%–ËCI%ˆ’âQ)ºiW%
+F‰QNoV3B;í4±„ÁN”Òó˲W³rlZ®&Ëê¡®s¯ßwo¤ÚX)-†Ì-tXdù¥|^5O7¯ëö묚—í'aÚ¯‹Ûö«c~7)Çó]+0‡µQh,чͰë˜H]æ4aN5’$W­Ò뺚‘Ϥ]]lª!ãŠ€±Ü†±x0ÖÛòþS¹ ¦×ãði1Yß—ózüd6%ö›­š×Zî®Ñ#+´ƒÃœyÙ²#8§å­ ·Ìà— XüºO¯Çó;¿¤órõêÕd½\Bû]8“„3›A%ÎÔÆ:ÍP`Ýt7Ô†LjB%?!âÜ©§ #9Ò?â¼$ªùNÄa5ˆ7a•5­kŸ¸.o΀&]&~ žýÙ~¾+ÞaÊX­€oD­Q¬j%Hj½Sz•þH‡ÅÙÀ–!ùl ¼ôaø„«Å?öïàéy°Lÿ'‚UJâÇýµâÒmõ–VÈš¨†¿µÊªQô•ÚcŠU¡fX÷sçzX =^.w1ó… ‡çCÊÙ-ÏOÑ|:§“DrɉA§rD
+RKBM»¬î9üöûx §™ã+Œ”'W —£Â@•ß¤À(gû×/È(vl}éÊK„»¯¼ì©*Ü€heÐ… ïùm]ÒEE"'˜É€‰4’ÔìYª¦Àòå¬?2,‘“%…#3¤t }bCnV”ãÚˆPŠH“Áá•isŒÃ…ÑDË ðŸ/p8¢£©&½‘%uÄÚ-‡O¿¬æB Ï™ ÕÜCŽUÓ%Erìi%ž'Çé(ñUØ—A曯v±B‹ÛÛU[‘wX1ÇcèÕ/fÅRœÚ³”DQ`:CÏò’(3Ï6-›£i LÜæèZd¸;ºkõîÚÖ&ðNÛJ¦kßI©>¯R«±œ(' …a{Å·Uðh+H‹®÷/æ“ErâäŒ0_FúÂr.ˆ5*†­æÓdN)A(u'ä?5§¤Esp9ö6¤Eåvê›Ai¦øLÐK2T›S€CNEÀ='ÍþZu“f¬ÕÁI3h˜4Ó¦80if€“f}pÒìÙMšæ 'ÍPH¿ø8]T¡ˆ0Y8¼Àu_ðŽ†̓("!Õ€YÊî™d1~¨“{a\ž°fO®O{˜É±&9Ú¡áé½×ˆØ„­×ãÉ ´!ÔÈþdP€´Z#Ÿ'ƒËÇoYÒ´,™A+ŽØW\ÆjÝÿHµK ù”S0< bÌg6h5R”›Ú&=5,…±D
+“!,½$?ŽŸHE•{j›þóµ º1…ðµ[öÚõ1’(í%)Ò5ût«hì é(á*†¬C›Xݦ æï Àœ)ÄU„»ªþ0u¾Ù§õ>²Â=YAéÊ ˆ'+šEš¤÷0Œ BéÆzèÒ÷ªTSV(Y–‰âÁãU>%þê“ TÙ_¡ÒRÄÊ쥇ÂR"¥Ík}ðÚ7ÅuÇ}Ò§Ù¡T}€gPJ*ïâ8Òä´} G0H¿åXÚ n¨(
+û#ûIÍo?›m
+\ËøFÛ’ûsaAÛ. BóÚA³‘yk¤/b/ <Ôé ì…Ëæt6{é­Õ#{ÙTËðGä"!@ [¿”H°“‰UDæØÒò‚xw­âåã·…èx„fn/€L~¯¼'+G¡pÊKâO¬|/‘phÿ0ý™¿41æsLBñ ÈþÖg1p‚JªöÞÝƲªhL¾[68<s›fê,(%”Ùú~\O>o™ ÝÚÑÍ8Ïa¡zlËéÙV—˜ù3`j_ŽUŒ™æSÂZ’%Ü…ó—HbÈ4ŸòF?Ì!úkÓqˆ8ð’ˆ  Dí‹èݱˆç£¬£0ˆ0åˆäó÷·~Ïh1ž6ðÐ+õb‰®]Nª†p•lÝh4Zóæ̵ß9/¼Bµ’ÏiÂ^}u·^¬“GÆ(è¨Ð' :FX€E•©"A‘"RfÀõ-\ ãNÇõxËE ï·œðÕªœ§KùCÖ šJåY_äžÇ(ï þå›è‡¢|¯ë0oZ&›–Øó¶e`s­¤ÇÛv›žë¨˜‚3±Ñç@§ÑåÍæG G[„kžõçjÕ~ZÕ­³×“ÀD¿z&1^u''ó²­quw°r»\ÜwBÊMѳÙ¿úµò„ü‰¹¾jlÕÝå-\`¤ Äu—Wã\Eµ]ÞÓ^ãµC…hÝÃ$a
+ƒ~(ü6C¯}4æwâÔBAËh-Ò¯½bË}çW Ù—m«‚¼{Oî×N«û„Ò˜IÐÇš£òƒçªþÈOìŒ&è ã™gU^ÒÆI@¸¨]/=ëy:ëxzØî§tc¿¨°~í½ƒ’iC6ü«šOfëi÷Ûx^ b iØûÿOJ¤!F²î‰=îS0Ã’Ð`%ã‡ýçì–c8¨ç(od¡ðo{pKïæ§óÿî¹=-‰ÑíéŸ×Ÿ¼%gU°òëº^VÍȳ®xŠ•­³Bpï­íåøѾgÔn¼ÂG¶*C¼7±hu7l·ª$R°©aÔØJØ øPÀt„ñ—hfû­1NuŽ|fÌïyÚ£Ö‡A|ÚîÍýó+DÏý¶³Ãýf§:nymnëÀ?¿B ö#X†Bü¨%®¾ÅÒüµz&2,Íߪgò¸ä ͺš¦ó/õ‡7ài–¿äÏnÚ£6ꤟ´Òxœ<” ." €ü7!¸ÔŸ
+endstream
+endobj
+9044 0 obj <<
+/Type /Page
+/Contents 9045 0 R
+/Resources 9043 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 8942 0 R
+/Annots [ 9037 0 R 9038 0 R 9039 0 R 9040 0 R 9041 0 R 9042 0 R ]
+>> endobj
+9037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 234.704 138.372 243.322]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h) >>
+>> endobj
+9038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 124.342 140.228 132.961]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc_a6bfd3fe0aa203133197d29227428787b) >>
+>> endobj
+9039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 110.724 147.571 119.342]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc_a1b07e4afff40941a98c5737005a12c15) >>
+>> endobj
+9040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 97.106 145.617 105.724]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc_ad9a37e64ee510fa7cea2fca1bc0a876c) >>
+>> endobj
+9041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 81.766 147.347 92.106]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc_aa6ef563ca64e2920357a9e9e80b14b8b) >>
+>> endobj
+9042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 69.87 146.477 78.488]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc_a3e9d7bac022617c6ebc68f7fd3bbcd87) >>
+>> endobj
+9046 0 obj <<
+/D [9044 0 R /XYZ 70.866 789.024 null]
+>> endobj
+430 0 obj <<
+/D [9044 0 R /XYZ 70.866 771.024 null]
+>> endobj
+434 0 obj <<
+/D [9044 0 R /XYZ 70.866 724.468 null]
+>> endobj
+9031 0 obj <<
+/D [9044 0 R /XYZ 70.866 702.788 null]
+>> endobj
+438 0 obj <<
+/D [9044 0 R /XYZ 70.866 681.405 null]
+>> endobj
+9036 0 obj <<
+/D [9044 0 R /XYZ 70.866 656.779 null]
+>> endobj
+442 0 obj <<
+/D [9044 0 R /XYZ 70.866 620.382 null]
+>> endobj
+9035 0 obj <<
+/D [9044 0 R /XYZ 70.866 595.756 null]
+>> endobj
+446 0 obj <<
+/D [9044 0 R /XYZ 70.866 559.36 null]
+>> endobj
+9034 0 obj <<
+/D [9044 0 R /XYZ 70.866 534.734 null]
+>> endobj
+450 0 obj <<
+/D [9044 0 R /XYZ 70.866 498.337 null]
+>> endobj
+9030 0 obj <<
+/D [9044 0 R /XYZ 70.866 473.711 null]
+>> endobj
+454 0 obj <<
+/D [9044 0 R /XYZ 70.866 437.315 null]
+>> endobj
+9032 0 obj <<
+/D [9044 0 R /XYZ 70.866 426.824 null]
+>> endobj
+458 0 obj <<
+/D [9044 0 R /XYZ 70.866 388.581 null]
+>> endobj
+9033 0 obj <<
+/D [9044 0 R /XYZ 70.866 352.125 null]
+>> endobj
+462 0 obj <<
+/D [9044 0 R /XYZ 70.866 315.603 null]
+>> endobj
+8442 0 obj <<
+/D [9044 0 R /XYZ 70.866 227.063 null]
+>> endobj
+466 0 obj <<
+/D [9044 0 R /XYZ 70.866 217.719 null]
+>> endobj
+9047 0 obj <<
+/D [9044 0 R /XYZ 70.866 137.667 null]
+>> endobj
+9043 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9062 0 obj <<
+/Length 2994
+/Filter /FlateDecode
+>>
+stream
+xÚ½\Ms7½ëWtÕ^¤ª†$ø©ÚÚ*Ç–w“Ší¬¬œìdMKž²4ãâ$¿~º{¤a‹óÙÜ¥‚À”¬n*Yýëèû‹£ï^ª‚ˆÎQuq]y)‚s•Z8U]Œ«ÇN()NFNëãW?¼yuöþåÉHûpüþâüÄÈã_^^´ÿ>?{}v~ööåÙÉH‘×îøå¿_ü|qvÞþÔu"^þôâýûö[¯Þ½üåÍÙÛ‹¥åñ‹æÿ?¼{{òëÅGgGÿ=RPRVêQ©DЦºº;úð«¬ÆøÙ•Cõ­yò®2–„5„Ï·Õû£ÿÉÕ…Zª°o£[]©SB>-5
+õ¥”ǯêÅåä¶wºÖ÷WóÉ×Åd6eý¾{mìŠÕd5RøWˆ­˜WõG)õtÒ<Ýüúå¢ýz;™Öí'åÛ¯³ëö+ÿÆm÷³«úrúÜ
+*bm-´W›Ì€Í‹6hÖž¨«"ö4ÚF’ôºUúa1¹ŸE»ºÔT#¥­ «‘ŽBjýd,ÝëM}÷©žw¦º\\vŸfWwõtqùd6KëÍ6™.œy¾n¸"‘ª\4B»ýV E Ý[9ÞmËxr—±·Â
+}¬TÎÅy ‡:=…?ŒëeÏxÕÈÀß%µFÚǵ⡮å¼-äZ,Izõ̵°8ËD´¶}â¼¾>!y\Ïëé9ëèøÓ Âe­Aé
+ˆ‚”ÝYÙU PÎì- ³Zë…§F¼¥]Êå|žÑÙá¬è"fS&Åó‘{¢ˆR•
+‚ `Îpèa¶‹ÞÔ÷h‡Àfl hçp z›>›æLu, NTÌ.÷KoÛ'ˆ¼Ïu1:£Jl·!¶Õ7}}™ñzc¢°¡ÄA3– …Û}¿MBQ‰hf°‹A›"¨Aò$Ub¿MôBÊÞ~s:~Úë&Qc`(MT€šDzwù…óSã Á>Œ<EnHÔÅÙס¤–¼!Ÿ^´>@Ô^pØZ\µŒÈ8äjáMaDª˜´å¯Ã©)Ú‡Ê F~är«Ð—›1‘ûVÏ·Q¹}Ê-ærœÝè\’”чr9íüz.g’–«,”¦àárƒ^ÓÞrdN#Š·’8ýmbsbJ`"ßÙRÌulÎ Þ› Á#Þ›t-“°¯)a_­`_êÛ7KèJ¢ö%0I
+§|ŠùŒÐi·:©ÀEKX¤Æô¬'t1Q–Øp‚=mìmøFB‡ ¬ ´ MìH}-Kè< G®¦w‚´Í.÷KoÛ×:ä kJ8 A¾ÐÔsÀ5„ŽPï¨0F
+#Ýîûm\Ú•p5ã%2Ù!ˆ2õ3¦D5ù‰úA4!tí^ßÖömPNC:p_k[Ašô†…C[èT
+6½šM“›‡ÙÃýªÅ™ÏlgËZ"—r¨¬š– ¢Fï°,LQ‰M×î£Ýó=ØȘ™³€ôìΘ­EÒz8cfAZêÝópä%cN [Æ|?ù“ûÇ­[”bÌ*ʘ-!ë©Œ™%iE‡2fCacFÙï
+º¾ª›þôpXn¥ZÙ·o¾Š´ËuÔpL .Å|Ƙ Ó»k-š]Ž›wc8Èöxòu1›Ÿž‚Kçš„‘º„ —_ªç¿h ßËñJ¤…`Kàú(ÈÛžëañ9F…´FTÂ÷@äšwn j/fó<sõ¶Äj™¹Ó[í×UÃ5ÂK8½±RÈ\PaúÊËþ£ç‡›+7‹üáÉPÌj°mRÅF]¯J[|/ ëÙª.*Ô&ð]<hå\Ã/U+ˆ–,â‰ã¯±à·ØH1ý—±€RŠétŒ©VY;¨Øô* @²!ì:;äš ªmÞ FÖ(ЛæÍ*t¶¶Õ(ÈdT%0 ’wPÙå~émz¾¶ÕU’Ó%tA%¬îé’­m¹ëÑÙÁ „R¦a²»î7‘Á—pnBn]Ϲ³t‡@Ò$×ÓÃ1-7žLŠÙ¯my¯s+úJœ1ŠúÜ+G­ ¢.±ÑFZá”z¾òÜû7T7Á–
+Ñ2ûïDV#?’•Uè–¬<|ýZxlEÊU婱
+âð¦ 2q{Oi8`×SZÜ<²2r9²²ŠYbbe¸fˉ•­æ_¬€ìVúÐdP#†ãX·©›‘¿øÜ1¸qr¯¯ùÖò…dóÅgÔ}ͧûEûbø᪣ˆßxFú²ûéjúêÌ~=ŸÝ-…Ô«¢o»ñêÉôf•Rž6ÆZ^ó¬”ÍÄ>âײøˆ:5y¨5éü¦³í9~íç`1E‘émSÞ[5ˆÁ` ÅFß`Xa¦‰~ííK-¢â‡˜„û¦|‘Ë#ßÉ]ÞSÜñ øîNîbþhj¦´jIi[r_¨xôH»îú¥ÖÍqldþm2½º}Xö,•ZyÒ’ðX¨lüGNX{®»'Æ¿åX3˜ •FÀã¼¾Ñ\l$–LÁP¦ŠˆTDz(š¾){Ú׃³KÝþ™¿áÊ7.½áúóÃ'¶àí¤³î‹Åb>iª‚‡E—‘ž6­G‘…o
+iwGÌšO Qj½0•ðC×JBÔ*Ç£X8^õvÙg¿/pü{ÏvGpĦ ºy•Rríر }‰µC’“ᵿy¸ýëW®b’J캊^:h×j#pT¾Ÿ=tUP·VΨ¡ãæAziOüEWìµ[ß„È›[dQS˦G3¤XuM{”ëü w¹`$ƒ”œ±UÑöcÞÀÌÊ
+Eb4²þ€ª}£YßÐVO>Öy¶·éêôô)†ô›NŠI©ßûÚ»ö‡m7¾”Ùíæ.cöÊ»Di£¶uœ|ØØqò•ç¿Tal7qkbOùnw&ºúc}®wxN›€ç¬+\ÓiB6+
+8ɾÛ‡¥¡›ù)¬n/æÖ¼p$r¡€Ùù¼ó©Ù×¼n´ØiD€á;ˆï$›šcðk/ *¢H=KÊÇGF½húϟði³Œ]áóšÿ8¿´¶Â-UЦü?n2
+endstream
+endobj
+9061 0 obj <<
+/Type /Page
+/Contents 9062 0 R
+/Resources 9060 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+/Annots [ 9053 0 R 9054 0 R 9055 0 R 9056 0 R 9057 0 R 9058 0 R 9059 0 R ]
+>> endobj
+9053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 327.17 138.372 335.789]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h) >>
+>> endobj
+9054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 222.239 125.273 230.857]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+9055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 222.239 153.185 230.857]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc_a93541452659cd3c1f71876a21b76b0fc) >>
+>> endobj
+9056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 209.464 125.273 218.082]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+9057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 209.464 144.703 218.082]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc_a70ad01ae9c4897e93778af3eb92f62de) >>
+>> endobj
+9058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 196.689 125.273 205.307]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+9059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.773 196.689 177.878 205.307]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc_aff651ea7b3935d9bcf659b578416fd3a) >>
+>> endobj
+9063 0 obj <<
+/D [9061 0 R /XYZ 70.866 789.024 null]
+>> endobj
+470 0 obj <<
+/D [9061 0 R /XYZ 70.866 771.024 null]
+>> endobj
+474 0 obj <<
+/D [9061 0 R /XYZ 70.866 726.85 null]
+>> endobj
+9049 0 obj <<
+/D [9061 0 R /XYZ 70.866 705.817 null]
+>> endobj
+478 0 obj <<
+/D [9061 0 R /XYZ 70.866 686.861 null]
+>> endobj
+9050 0 obj <<
+/D [9061 0 R /XYZ 70.866 649.292 null]
+>> endobj
+482 0 obj <<
+/D [9061 0 R /XYZ 70.866 616.932 null]
+>> endobj
+9048 0 obj <<
+/D [9061 0 R /XYZ 70.866 579.237 null]
+>> endobj
+486 0 obj <<
+/D [9061 0 R /XYZ 70.866 547.003 null]
+>> endobj
+9052 0 obj <<
+/D [9061 0 R /XYZ 70.866 497.478 null]
+>> endobj
+490 0 obj <<
+/D [9061 0 R /XYZ 70.866 465.118 null]
+>> endobj
+9051 0 obj <<
+/D [9061 0 R /XYZ 70.866 427.549 null]
+>> endobj
+494 0 obj <<
+/D [9061 0 R /XYZ 70.866 393.468 null]
+>> endobj
+8443 0 obj <<
+/D [9061 0 R /XYZ 70.866 320.902 null]
+>> endobj
+498 0 obj <<
+/D [9061 0 R /XYZ 70.866 311.92 null]
+>> endobj
+9064 0 obj <<
+/D [9061 0 R /XYZ 70.866 235.231 null]
+>> endobj
+502 0 obj <<
+/D [9061 0 R /XYZ 70.866 182.611 null]
+>> endobj
+506 0 obj <<
+/D [9061 0 R /XYZ 70.866 134.6 null]
+>> endobj
+9065 0 obj <<
+/D [9061 0 R /XYZ 70.866 113.567 null]
+>> endobj
+510 0 obj <<
+/D [9061 0 R /XYZ 70.866 94.687 null]
+>> endobj
+9066 0 obj <<
+/D [9061 0 R /XYZ 70.866 68.871 null]
+>> endobj
+9060 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9116 0 obj <<
+/Length 3133
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\moÛÈþî_A @ §½}1ÚrŽrÍ!oµ•~¹ÜE¢²äJTÒë¯ï³\R©•L™LsýȶV3³3³3ÏÌE“Û„&¿œý<>ûñ¥‰%Nk‘ŒoC‰Õ:1ŽÍ’ñ,ùmpù÷çïÇ£«ó!7v ÉùPs>¸|ýüú:üéÅ»ËoFoÇçŒÓÁóâÿñ«woχL**ð ÆÊÞþòêí(|êz|u.éàÃå8ü~5z9º½½ÿ>þõl4>û׃Œ4a[™¬%–ËdzwöÛï4™á½_J„³É×bå]"• J
+ü<O®ÏþqFw÷©bûÔŒÐj£³s¦_öù[FŒÅZ®±‡ÎÜ–÷>O+‰ä¢ÎsýŠ¢ƒ´Ôev÷"]O/.^/½0_ÓÕÏËÍbæeúñ¥T;Ć [U¯ø›uÚ‹ô#¥|‘åÙrNòð:Ï% ÁÂëò&¼úOÌË÷f‘Ý3 FB%Fr ;mÿ5‘™Õ„ó@‰DÞäÙœ|&a‡5u SD(— ¹&˜vFÂg¬“=X „´SÇ­ôf3Ïû´ ·O³vš8ªz°§d¨Þ³ öB)‘Ly³§ÊWé͹€^VébšÎ‚ ŸÎþˆ+A:ÑЯk/éîÇqüd‘­*Û!S8ª\uˆ7Ýjø1“u†“|·§è¡UĹ¿yº¸Í?¤ŠâûaŸ5ç0+µO·¼‡0¡»KϹAœ×Ú‡ ¬¼†’Åya¶Ž0”§­‡àŠâ°Õbº\äÙíf¹Y?)D‰Ey®2ÄŽ}¡„ˆ1=¨]M´©«}•Nf–
+–Vª–
+”ªÎòqv²¸M#ðkC{8 PB8Ñp±JñeÀ”p^¹jü¹
+ÇËéæ.]䓇x^„Âå*ü’† ?­sü Ik3-ãýWŸÂ&å»·é" {Ϋ
+RÔ–€2-TôÙ؃ôqu+áO[ÈÅ(Ó¹(œ¹p@J=¿ß|òJœgÓ Ô7éݧ´ôò—›ÅÔ€uÃ|üGŒm ¡=,ý/[äåŸ#ÎK$¢æ
+ &2 ¥¶)r„dc†H³«E¾ˆ¥ZTì |¤º0Ý:ƒ8‚,Pâ¦lqÞ£|ôQÅù¨Ô§6DQSç9kês/¿¿‰yZ¥Ù)ˆ}F\ƒ)¿ýg÷l±ö%©¤ƒh Ä§PçJßup¢“±J„@‰9yÌAü)õ)³;O£ˆªÎ³'9%ˆøm*º›
+´ŒÄb«Šr¬û¾¹EÙÁ]}ßÕIº(åø´\ÎÃOÏb-[!9±Žõ Ž
+Ö©! á2PbŒórœ,.]<1puž¢0èÁ·O ƒÏ}ÞäËGc¡!†‹o–'}·'%m¥D DKD>ÁîbQg˜ÙXZF€2k,¿O Œ9À
+C¨a-ýAHW4‘{à«xÑDnëÂp"xž(L˜”h„Ðûb¦©µ?Àj]QŸº?–p” ¬Û}C•püL›þ±ŽeE¤b}p.`’Õ¹æ˼ã›õ•CßÞÝC CåhÙñÈAféM5¿;»¸X§±¡@0Çë3'c "ß’(?tà†ŒÕ‘Šµ¶6ŽÒ’‹Øár6Që¶
+8ôÏ—iÖg±¾ŽÖꢿÆüµ£bKum%¤Ãæ|«ŸX;X²û±àÐE>4]@iÎz³ÀÒŒó‡ê˜R ãÃÁ1ÂÞ‡TÈ¿JóRÅüÃùç¨\Ÿð§êå0 ˜z9žPõlE›1ßÆ`(#ŠõºíÏOèûaœ›v*nµ
+”˜µÛÁÚð4N™ŸÃÓÅC”Q”êo2æwêŠfY>
+endstream
+endobj
+9115 0 obj <<
+/Type /Page
+/Contents 9116 0 R
+/Resources 9114 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+/Annots [ 9069 0 R 9070 0 R 9071 0 R 9072 0 R 9073 0 R 9074 0 R 9075 0 R 9076 0 R 9077 0 R 9078 0 R 9079 0 R 9080 0 R 9081 0 R 9082 0 R 9083 0 R 9084 0 R 9085 0 R 9086 0 R 9087 0 R 9088 0 R 9089 0 R 9090 0 R 9091 0 R 9092 0 R 9093 0 R 9094 0 R 9095 0 R 9096 0 R 9097 0 R 9098 0 R 9099 0 R 9100 0 R 9101 0 R 9102 0 R 9103 0 R 9104 0 R 9105 0 R 9106 0 R 9107 0 R 9108 0 R 9109 0 R 9110 0 R 9111 0 R 9112 0 R ]
+>> endobj
+9069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 655.204 128.402 663.823]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h) >>
+>> endobj
+9070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 549.731 174.219 560.268]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a8102e52d790eb24611b6ff32e539fc9a) >>
+>> endobj
+9071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 537.649 180.926 548.186]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ab8e362c743b0c943990aac438714da84) >>
+>> endobj
+9072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.451 525.567 238.525 536.163]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a690d9105f94f891020199203c3e73929) >>
+>> endobj
+9073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 513.611 126.94 524.023]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a7f99dc525b76af07f3789b566fcfe7ac) >>
+>> endobj
+9074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 501.403 142.631 511.941]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ae69de5e2dd2861404526095c574cafdc) >>
+>> endobj
+9075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.039 501.403 221.785 511.941]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+9076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.393 489.447 185.771 499.917]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_aa94d4aaa76f7303f49dc481ef1b088b4) >>
+>> endobj
+9077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 465.41 127.164 475.822]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 465.41 185.952 475.822]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_aa5c254a9291a555a385533ac59c69d5e) >>
+>> endobj
+9079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 453.328 127.164 463.74]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 453.328 193.779 463.74]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ac6329a8b34eb717cdc8337a6507488ff) >>
+>> endobj
+9081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 441.246 179.384 451.658]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a3b9c91de1729c1178fa82972959b1ec0) >>
+>> endobj
+9082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 429.165 133.88 439.576]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+9083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.854 429.165 199.652 439.576]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a88680670278c00698fdc25e0f7216ea3) >>
+>> endobj
+9084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 417.083 133.88 427.495]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+9085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.854 417.083 207.48 427.495]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a829fd6140316e10e23f17408c18478ca) >>
+>> endobj
+9086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 405.001 186.368 415.413]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a5d630ba4c426863bde598d3e8c805ca2) >>
+>> endobj
+9087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 392.794 157.085 403.389]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a95a814dc4d12465a5ca5819c5e459e2a) >>
+>> endobj
+9088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.591 392.794 308.475 403.389]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+9089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 380.712 166.661 391.307]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+9090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.634 380.712 217.728 391.307]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a08dfbe26dfe4747f970ad057caa9b7ef) >>
+>> endobj
+9091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 368.755 161.559 379.167]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ac298ee08293711bc376548a58cf47ac3) >>
+>> endobj
+9092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 321.397 156.609 331.737]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_ad6f507c7ac323953ca8e2417cb4828a7) >>
+>> endobj
+9093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.109 321.397 210.389 331.737]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a7e80e8ba02e2688bdde5bade551afa86) >>
+>> endobj
+9094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 262.034 159.039 272.495]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7dae0596091d9e120557470b16925f9477b) >>
+>> endobj
+9095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.239 262.034 218.575 272.495]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7dabceb7aba3e0bb542949ba6e980649dad) >>
+>> endobj
+9096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.567 262.034 305.198 272.495]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7da245ea0f143222e0ca8842d68c0b14f69) >>
+>> endobj
+9097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [308.19 262.034 394.681 272.495]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7daadc4bd0ada9d0849b7611318295ddd64) >>
+>> endobj
+9098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 249.506 146.083 261.462]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7da10d19bdfd824735f0e6a230fdf08fd10) >>
+>> endobj
+9099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.818 237.997 198.206 248.516]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.94 237.997 235.849 248.516]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_abbc2aa10a17c0bd17b46b2e75c64b632) >>
+>> endobj
+9101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [104.743 213.883 176.627 224.479]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+9102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.834 213.883 239.183 224.479]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ad8db0e02686eec1f8d08d7096a1c05f3) >>
+>> endobj
+9103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 166.525 124.681 177.062]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a8c98683b0a3aa28d8ab72a8bcd0d52f2) >>
+>> endobj
+9104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 154.443 132.422 164.98]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a8ef7030a089ecb30bbfcb9e43094717a) >>
+>> endobj
+9105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 142.361 161.03 152.898]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ae38b5a93cb728bf26874ce40f559541c) >>
+>> endobj
+9106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 130.405 161.559 140.816]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a77b068b710fec171489fb2131ad0d525) >>
+>> endobj
+9107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 118.323 167.082 128.735]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a59848a3d969295673b6e0b6d6e2abe5c) >>
+>> endobj
+9108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 106.241 161.308 116.653]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ae7f38f0521bd7efc81903f26e9db6568) >>
+>> endobj
+9109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.95 94.159 157.273 104.571]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a0c72d1ae5eb2f3c069dab24ce1c7bb3f) >>
+>> endobj
+9110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.577 81.952 202.158 92.547]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ac2e5509c4f164d1e33e31121447de874) >>
+>> endobj
+9111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 128.402 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a5f80f5fe074a894489074c3823085046) >>
+>> endobj
+9112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.375 69.87 192.447 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a773e2d3608cecd34cfb993badc8a211c) >>
+>> endobj
+9117 0 obj <<
+/D [9115 0 R /XYZ 70.866 789.024 null]
+>> endobj
+514 0 obj <<
+/D [9115 0 R /XYZ 70.866 753.937 null]
+>> endobj
+9068 0 obj <<
+/D [9115 0 R /XYZ 70.866 741.924 null]
+>> endobj
+518 0 obj <<
+/D [9115 0 R /XYZ 70.866 708.571 null]
+>> endobj
+8444 0 obj <<
+/D [9115 0 R /XYZ 70.866 651.709 null]
+>> endobj
+522 0 obj <<
+/D [9115 0 R /XYZ 70.866 640.606 null]
+>> endobj
+9118 0 obj <<
+/D [9115 0 R /XYZ 70.866 564.57 null]
+>> endobj
+9119 0 obj <<
+/D [9115 0 R /XYZ 70.866 336.11 null]
+>> endobj
+9120 0 obj <<
+/D [9115 0 R /XYZ 70.866 286.594 null]
+>> endobj
+9121 0 obj <<
+/D [9115 0 R /XYZ 70.866 181.364 null]
+>> endobj
+9114 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9184 0 obj <<
+/Length 2237
+/Filter /FlateDecode
+>>
+stream
+xÚµ[ÙrÛF}×Wà‘¬ŠÚ½/®™T9•q*–4ý¤ø"a.ÊÄóõs 
+6¬Êý¬^Ü|¼½»¹¡žÌ­žr‘VœX”Ú"
+KšºWn“õºcŒºE.;J9ËåìíÊÕXõ¡X²Œ _{¾wåK¸RÆÖ:?Úy.¬w[ã‚óÚD¨+„Û°ˆ˜ÿµ¥ŸÙa'»0ãEî4Â5›!RQÈþ슟õ[9/Ú¿xõ”dçñSò{º B£ì£ÞhøBYP\<àçš!B˪œzÿ:£JQÈ,Üf«û$D
+@
+m¸¡AÙÃ0CaIUZþú²˜¬Ûö:=´,788úðp/9Å\H×åe•Ä›îÕïAPÝDÍ–Y<Ûâfð¥}/ÊñMK}+cï&ØÙÖ¨ï~M– 4€ÅÇoñªe?IR8±½ŸÓ2ç["QÎÊ×Ú$k Yn"é0=B„HK,Î
+Kh¨^Åжe†ÔAY œ¢Ð8Ö]Äó¤8A‚TõᥤÄ9¹KM[œ SbÒû@E¦Ä
+¹‰Ú'µ|™RçŽK˜:>¸±Õ¦ MóUº´’P¶CÀ‰Þ’ïìÔ&´hFÊ>P­CÏ'¨óøï6)þ³`Iðmê!hcYõ?2…LÚ8%ƒþtÕv$#.
+Kš˜6_Æüò/–S™/ÿ°}%¿—RЃ—XzJË$ˆ—t8*tÉ Ð]IwTZN‹s”F©½Z¥ÉbÚ[=pp´³qN9FÃâôxZêü^;ÙB[_š K\”Ì.¿ú°\¶3aq&œê¹ÜÃo §‹4kKÈX|xÍ…ƒ¢Û ³ôqå×QHWçgzX¥Ù~FíQÛ£^.&ɡõêL¬‘¤qâÈsˆ7 ”ZÂŒè‰ö”¢0òx†#W­#—/Ò= ‡­$Z‡m•èjÙÉ…N‡LÜH…ù%6„ž(\&YœÎ’iyO YOVé³?oo9¸¥ÍÜx™ìäOç¯Çe+0Kå"«¦âÃòë°ôšòYR}×9­~çµ…²(%a½ºE?ZXÒ´ä7Y<y™o¤}¹&L^Aw™ã%sõK
+ã¡Æ,='Ó¤æårò2O¾Sª¨T¢›Ê¬þî:›¾_îÊ¢™bµfJ£D©MWôƼvM·Ùê²<Çß²#±vóÜÏ-vÀ›'F9_ïß¿î¿»r¦ÞåùÃçÍãÏXÌb!û¥EDçÌb‰‘bœ¨%)X–8²:Cj ×GÇí$ߧ¥ú€+)q›'˜Ž/÷ ·fÊpÌ?4ã›ëµ~ü/¿IØqMCeØî5†ÝÆ5Ÿ
+›7ËU¢X¶µü~IŽ®mÇ|c`Þ<?¨@±­ÀÆ~ó–1+œº£D(Pò˜z“y˜%–ˆZö!BXRZ…'4Ñ’ÐFåñ}²Š_Ù81©Å <Å‘çË—ua!)ͶM¡Ú'¯«a?ÏàŒÙJ'•ãyý,º³; p[ç”Éý΃PÖ¹æD3gÑÄ1_J؉‡í <§óí/oH2½wÓ
+BuX?‡cúM[Ñ,çÏþ<¡óJ‘Ð.'˜+~RhÑ-0ĪÑ´cnh©ƒnÖ%Áœpb¬Nüõ Æâ$sÃI´Øn;¼HD} 
+äd×ÍâGdz¤íR˜Îó_ÀÊåWYÈëô>/ºbÃë”cu@±Êõ ÒÇeŒ`È j˜‡TZª †yŒÂq+Ô€'Ëg_R¿÷"üå÷²‚
+endstream
+endobj
+9183 0 obj <<
+/Type /Page
+/Contents 9184 0 R
+/Resources 9182 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+/Annots [ 9113 0 R 9156 0 R 9157 0 R 9158 0 R 9159 0 R 9160 0 R 9161 0 R 9162 0 R 9163 0 R 9164 0 R 9165 0 R 9166 0 R 9167 0 R 9168 0 R 9169 0 R 9170 0 R 9171 0 R 9172 0 R 9173 0 R 9174 0 R 9175 0 R 9176 0 R 9177 0 R 9178 0 R 9179 0 R 9180 0 R 9181 0 R ]
+>> endobj
+9113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 738.854 217.355 749.315]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a37ab38ed6ec0a0decc68a1d2b3f2b6ef) >>
+>> endobj
+9156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 691.255 140.587 699.874]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a43552b4fd3217cfbc5c8e2c3e74a83d0) >>
+>> endobj
+9157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 676.221 175.932 686.61]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a9665a01a6e117de98eaa285881211f5d) >>
+>> endobj
+9158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 662.881 177.877 673.347]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a349a4d1c148a100eae6e3e32cfcbcf0e) >>
+>> endobj
+9159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.056 649.744 201.136 660.214]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a9dd412c40da6285854873a6b91acb495) >>
+>> endobj
+9160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 636.431 149.329 646.82]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a825b0ae00502cc6d4a46b664e7e29994) >>
+>> endobj
+9161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 624.939 126.546 633.557]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+9162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.046 624.939 155.498 633.557]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a33304d5b0fee21472a59e15b58dd4395) >>
+>> endobj
+9163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 609.828 160.474 620.294]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a35c0af1e741950be6a58d72599e4534d) >>
+>> endobj
+9164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.974 609.828 202.561 620.294]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a0bc13ca64c98252ee83360a57e00bde5) >>
+>> endobj
+9165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 596.691 121.686 607.161]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_abbc2aa10a17c0bd17b46b2e75c64b632) >>
+>> endobj
+9166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.186 596.691 160.528 607.161]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a86ab45a7d32ba7b9408cb2fbbc23e8d4) >>
+>> endobj
+9167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 583.427 126.546 593.767]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+9168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.046 583.427 169.189 593.767]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a33792b552f49a8ce8c093b07ed369e27) >>
+>> endobj
+9169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.039 139.125 580.634]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ad8db0e02686eec1f8d08d7096a1c05f3) >>
+>> endobj
+9170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.625 570.039 196.402 580.634]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a559094f2d80831533098f237f9b9b0d0) >>
+>> endobj
+9171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 556.775 126.546 567.241]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+9172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.046 556.775 182.146 567.241]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_aa103ee2d5c30ab86d71a07451795d74b) >>
+>> endobj
+9173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.531 543.732 193.649 554.108]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a57eff555d85236136c27f8fd80a7eced) >>
+>> endobj
+9174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.642 543.732 247.948 554.108]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7da10d19bdfd824735f0e6a230fdf08fd10) >>
+>> endobj
+9175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 494.362 229.295 504.679]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ac78c8230f67026cc13957481b19149d9) >>
+>> endobj
+9176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.287 494.362 283.594 504.679]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a899ad2f91d0ab46476f5e51541199f7da10d19bdfd824735f0e6a230fdf08fd10) >>
+>> endobj
+9177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 480.879 207.367 491.344]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a2206af43c102c76bcfb34d7523dc6b47) >>
+>> endobj
+9178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 467.616 232.783 478.081]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_ad7197d326362dab19ca3aea3096250e8) >>
+>> endobj
+9179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.775 467.616 289.064 478.081]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a2206af43c102c76bcfb34d7523dc6b47) >>
+>> endobj
+9180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 418.322 214.02 428.783]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_acccfa4742eb16575b054b06d5b95c5ef) >>
+>> endobj
+9181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 405.059 191.354 415.52]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine_a58c2b65565fe561e747d24ad940692f0) >>
+>> endobj
+9185 0 obj <<
+/D [9183 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9186 0 obj <<
+/D [9183 0 R /XYZ 70.866 753.681 null]
+>> endobj
+9187 0 obj <<
+/D [9183 0 R /XYZ 70.866 704.403 null]
+>> endobj
+9188 0 obj <<
+/D [9183 0 R /XYZ 70.866 509.045 null]
+>> endobj
+9189 0 obj <<
+/D [9183 0 R /XYZ 70.866 433.241 null]
+>> endobj
+526 0 obj <<
+/D [9183 0 R /XYZ 70.866 390.081 null]
+>> endobj
+530 0 obj <<
+/D [9183 0 R /XYZ 70.866 340.635 null]
+>> endobj
+9144 0 obj <<
+/D [9183 0 R /XYZ 70.866 319.08 null]
+>> endobj
+534 0 obj <<
+/D [9183 0 R /XYZ 70.866 300.108 null]
+>> endobj
+9145 0 obj <<
+/D [9183 0 R /XYZ 70.866 287.947 null]
+>> endobj
+538 0 obj <<
+/D [9183 0 R /XYZ 70.866 252.73 null]
+>> endobj
+542 0 obj <<
+/D [9183 0 R /XYZ 70.866 224.595 null]
+>> endobj
+9190 0 obj <<
+/D [9183 0 R /XYZ 70.866 205.107 null]
+>> endobj
+546 0 obj <<
+/D [9183 0 R /XYZ 70.866 184.127 null]
+>> endobj
+9139 0 obj <<
+/D [9183 0 R /XYZ 88.314 158.416 null]
+>> endobj
+9140 0 obj <<
+/D [9183 0 R /XYZ 88.314 142.164 null]
+>> endobj
+9141 0 obj <<
+/D [9183 0 R /XYZ 88.314 125.912 null]
+>> endobj
+9142 0 obj <<
+/D [9183 0 R /XYZ 88.314 109.66 null]
+>> endobj
+9143 0 obj <<
+/D [9183 0 R /XYZ 88.314 93.408 null]
+>> endobj
+9182 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F11 6621 0 R /F97 8866 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9212 0 obj <<
+/Length 2333
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[ËnÇÝë+f€Õéîê§pqG¦‰œ+ÑÙØ^PäÈ! ‘ 9R|ý==/qÈæK3ö"‰ÍTU×ãô©ê!O¾$<ùñì‡áÙ÷o%Žyc(Þ%–3gLb½dF$ÃIò±wùÓë߆ƒëþ¹´®gXÿÜHÙ»üåõÍMqéÍûË¿®†}!yïuþsøîýUÿ\(Í OQ>4¸úñÝÕ xêfxÝW¼÷árXü}=x;¸\]úŸ‡?Ÿ †gž ØÈQÛäsR%ㇳŸy2Áÿ~N8#ï’¿ò;¥‰iEø|ŸÜœý¯SS"8³Ú›õ…ÁxµÒÜTÃ9ç½Ëùl•-ÇÙ|YXø]¹Ü´yùÍ|üøβQ6Ï‚ñ¹¦gòä\rÆ•/t f_¦³ôâ¢ø]ˆøÄ5‡V!dø(
+!Þ&Bdnm.ðBÆÇéìŽhS>ªî{‘¤˜wº´XNŸFY%Ié5I!|LsÙ4ÿMú‰s9›æ‹ÍeÅïûz9äuña~W­Ëû´º†¿h>šlÇYr í.±R0#ö:¸£Žr݆í’;ftÄq
+ÓÓÂãB÷Ø,âºsA–!ñ“s‚2Ñ Wq¿Pkž$ ª]ù‰…D%ª{N‹¹6Ì‘üÆ1GIÐ bî[ÅÜ„zä]Ä<H2\í‹ù ¬]2â´º‚_Ó‡Û´,ö·³ñ³N,ý§>ñÞ|:)®2 ^¼qPÄ,Ö#SZžæ™†B¦pG$!)7æ~z»žˆZ›Þ8 ^qqØw¼7ZÇ} nè¥Ù»‡Q0´ü³‚Ä"Ùܺ6¸Žr ®õl{Fh¦”{®h0öñüof­ÄœS¥·ÝñY+l•µÚ#6dm$wf-ÒTJæ°4|
+âû’4L»j_mÀDkìé¾ 0 ’È—`²š~™î÷àImíö6êîyFNLm}O¡ìUÄSD0©ºí}•Q lãåtÛ¶vë˜'©Ÿ@\D·¢ ߢ‘$ƹzÁ>lT;D« ºDƒ¤°…hñ,ÿÜ )6"ÝËãzqQ¯l!!×utùþÝõàæÃ/ÃPˆ¼.¤ñüañ˜¥ÅÅ2¥½¯R:\\e“‹‹ûé*+³J¬Ç5ou½þ'¶rö¼Iˆ>¼E‘¥{«·ÊÿÛ’=ètMs‡>ÞÝ Hó~­%˼®Z[÷žRUÚ,&S72“Q6Š)à)^+œÎ2a¶sVsžSèŽ,ûËA mxz!IS jYÄøsE‚9k‘KþÑÏËØ6ÏyðwŸ(l_ÖšÓ¬k†FÉB†êÿ©ˆ~F}¨@ƒë´Ø5@L¨× p™f1 —žÌ¡¨ î.øú%~iêó }DMÇÄ¢h¶~ÍøüÒÊ]Á
+\Ô{×.ZÁw$#fš€ÎºßI¾Iú8ßÕÉ1  ñø1 ¡à®‹d—4Éndû$]DAJú­7@*ì
+³›ñΡšèfª&eèzO/F¤«b$ðPgº(Æ É˜®‹qÇ”‚Ð*“1-¦§JØ=¥’„±GO):Ð\N)š÷O):PZN)J7§‘DCÀu'«–h åæªçȘýPŒîˆ¼i`ñëmÙüMͱ½ÏyÅÜlŒí×ংó¼^c¡·až¬ÒýH+8µa$)æté„Ö ½v‹.”‚q.šJc~Ü<Çè§Àù"[ƺ ƒnÂv6"&Ã4=©v|ˆñá@0!>Üu6">À„Viö¸ˆ¬K¤ÃšPù¼UÅë…/$·ÏÓµ53Vû«¹F´1ý-[îª|‘ŸtYùm@K¢…oÇßÐöè I }4ÂØDðÕ‰NlYž6tþë
+_bqè"N>"Þî[ZÄGuQøÒb ê›þ®dÊ)‘èYŒjUøäÐ"æ‚”²{R]‚ÍYðT‚Í)!š:CªïÇ'òqK_Ž<W0 ܨK¬‘·ƒ&y@^«É@!ø\ ÓÍù ù¯p€s;ŸßGD¡žŸ»¼eú÷ÖOiLš'º;’qÁa§3ËÛ ÷LºN€’¸³_û»³®U7‚ÂG"AÚ™º‹o‰ŽtŠCÅKÕÔ\äkZŸ-½*#=›‚Ò¿‚{G±Î-9­D&Y&I4Mž¤‹t6AĦé~
+%Aã¦f‰‹¹`„†J@’²ºÕѲ›2¹$i+T ÐÆéjµ‰O;
+IVšê`;: ]è4ÅqcCgº\Η€ˆ’Éí×:"¯ î/cH³‹ÎAnÒ¬ñkUÐÕ‹]±¶¦
+i[¼Ñ¶Ú9œ>w¤v…РIsÜ[”d_
+BkcBw¥è˜õKmòw–Ú«DW%øÁõׄ)gíဳ/u/‘#NSµ7,p# :wØaŒŠŠm¯QÃû;‘Ný­„Ø—tþ.÷ _q(àO¯¿Ï¾,  îs)vSóÿÝ»‰s
+endstream
+endobj
+9211 0 obj <<
+/Type /Page
+/Contents 9212 0 R
+/Resources 9210 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+>> endobj
+9213 0 obj <<
+/D [9211 0 R /XYZ 70.866 789.024 null]
+>> endobj
+550 0 obj <<
+/D [9211 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9146 0 obj <<
+/D [9211 0 R /XYZ 70.866 753.314 null]
+>> endobj
+554 0 obj <<
+/D [9211 0 R /XYZ 70.866 731.519 null]
+>> endobj
+9147 0 obj <<
+/D [9211 0 R /XYZ 70.866 718.968 null]
+>> endobj
+558 0 obj <<
+/D [9211 0 R /XYZ 70.866 681.16 null]
+>> endobj
+562 0 obj <<
+/D [9211 0 R /XYZ 70.866 650.8 null]
+>> endobj
+9126 0 obj <<
+/D [9211 0 R /XYZ 70.866 630.554 null]
+>> endobj
+566 0 obj <<
+/D [9211 0 R /XYZ 70.866 608.759 null]
+>> endobj
+9134 0 obj <<
+/D [9211 0 R /XYZ 70.866 583.784 null]
+>> endobj
+570 0 obj <<
+/D [9211 0 R /XYZ 70.866 545.899 null]
+>> endobj
+9127 0 obj <<
+/D [9211 0 R /XYZ 70.866 520.924 null]
+>> endobj
+574 0 obj <<
+/D [9211 0 R /XYZ 70.866 471.142 null]
+>> endobj
+9191 0 obj <<
+/D [9211 0 R /XYZ 70.866 446.108 null]
+>> endobj
+578 0 obj <<
+/D [9211 0 R /XYZ 70.866 408.223 null]
+>> endobj
+9131 0 obj <<
+/D [9211 0 R /XYZ 70.866 383.248 null]
+>> endobj
+582 0 obj <<
+/D [9211 0 R /XYZ 70.866 345.363 null]
+>> endobj
+9128 0 obj <<
+/D [9211 0 R /XYZ 70.866 320.388 null]
+>> endobj
+586 0 obj <<
+/D [9211 0 R /XYZ 70.866 282.503 null]
+>> endobj
+9135 0 obj <<
+/D [9211 0 R /XYZ 70.866 257.528 null]
+>> endobj
+590 0 obj <<
+/D [9211 0 R /XYZ 70.866 219.643 null]
+>> endobj
+9136 0 obj <<
+/D [9211 0 R /XYZ 70.866 194.592 null]
+>> endobj
+594 0 obj <<
+/D [9211 0 R /XYZ 70.866 156.783 null]
+>> endobj
+9155 0 obj <<
+/D [9211 0 R /XYZ 70.866 131.731 null]
+>> endobj
+598 0 obj <<
+/D [9211 0 R /XYZ 70.866 93.922 null]
+>> endobj
+9122 0 obj <<
+/D [9211 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9210 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9216 0 obj <<
+/Length 2433
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[MsI½ëWôi"F5UYß¾i%äÕ„WòHøäñ£¶Ü±X@öοßW]€h(PC÷nÄ^$$ugfeæ{ùÑ-ž=e<{ö·þÙo×NfŽycdÖÿ–YÎœ1™õÄŒÈúÙçŽaB°î¹!êônßßÜöºçd]ç¡ßU¼óé²¾ï]÷î{·—ø³PšËÎåß/>ö{÷ñ¯f)áòÃÅÃCüÕÕÝå§ônû]A¼sQ~íßÜÝv¿ô?ëõÏþu&`#ÏÄÚ&ç˜#• ŸÏ>áÙ#þö{Æ™ô.ûY^ùœ)-™VŸGÙÃÙg|óœ:uN#_´/¢e½ñS1Îß½{ÂQx'_ìš$¤b¤my?™C&Á~mÏ®Bæ•­2š<ÃÁ(¡Öhæ| ZcÚmŸþ1ï
+ÝùwôÁŸ\s_
+Eüåp2ž—ÞøíÚÛÌCÌÞ4ÌPPXJú\ŒGðß—x¡ÒŠÏ…UL"Bçwó¥ê«üOÎi\,ŠÉ8*,#äÄO¤Lü0ù¶2Ó(_ý?ÉÉàq×eÄ5´ã¬J0y¤Ï*¦wÌè(H˜hx^&Jðû΂nœ‹ˆ9妭åu÷ù·®D&Íòñ0ìžKg;_»Hø¿â绕ýWù|8ƒÛu§˜.&³w|0î" _¦!"!¿vÏ•PîY{£ö³|:Á/
+¡©0èåÝÍÇ›½ëv¸“"YZC
+¤šYH%Ù5“Óü•="—impBsRÀïNªHl»lŠ€Wd6?‹=læ%SÐyt§œnÆgøÎÛá3®˜ãj‡Ï†ÓiWâûÜ«-«Åóôe±õE½ÃJ¦1iéfØåh\|)H®›ƒ`åb¸{L²h4d+F4žtŪ)ྫÒé’»[P‰ùР3¯8b°7 Ë€é
+¶cÉ/Ý`~wÙ{xø¥.ÌI„|… ms!_£$½†ù¬,Ã|>?¡kA¥u¦Y€9í„1M«F(×à}Çe (’LåGu-Zù5¾µ:4 F£É0q.®1ÀÄ!š¥·
+±‹’0Y‚”Ætò¦¹Î°hP¦ªsS @î€[Ò<#ÃdbÔØBF#  ç‹Á¢HCq­-¨Uà\Å©F0F! [ÐIh6½:9ç1ï%še"·œs—y¿±4H4.p›äÈð‘¢&Øå>J¢UME´†bÿLh&Ì0ŽÚÐ ‚÷VT5?çÏ“½¨0˜=Þšë[;¥·tƃ§|¶·?Þ‹¨y¾x™& El­mÁ\ WaäÛ2·˜'
+½ä[H,žQm7Š-è¦sw}ýáîâj× *v¼ TjP±ò[¨ì_Ü/{1%q?éj/ö¾×ß5 Ît]0NiR˜MQ7Ë&òâòO7÷½½½È>?WèÚ°Š¸EÂo™?%}A¥:Õ†Z ×*é qø©ŠE@[öfµ‚K Êa
+’ì:R˲6q-èD6qaB>)i Š—5“ä'Ä)›àfϯɆu—huÉ eÞÎÚSY÷謽"_“«¾ò¡6‚#=Ó§—Á ~J¶L¡¢/¯yMüò±&%_ãwC‘E5ÊÅðB’ôʯ(LŠÝ‚ÎÀ@¼›*Sé¿ñìf„]Ûbb×Å°g‹¼ ïüš…pev-/|)Æ £ƒ•”À\ žR3KUO,æk˜¿~¤;ÊÇ)Ë-’“^Ýä
+ ×zÑ…<¸ÉÈcÛ3Ù”(0;¸vˆ’L‚(¾7¡ˆ£7¹¤$ÓÜeÂ#„Æ4o„’Ýß²]¯˜ñÆËc¡;—[ÝÛÇÅluÅ÷QÚ§.9<¾þªôVÆK`”$W‘N—î°á­èDÉ…¬¢óÿ‹»p™4møBêÞòEöJOœ)¹>å×Éd÷KB^xúæÖEµ˜§6_0ÉèÓYÕå©«‡ŒTò3uŒÐ× áZ 2ÅþøvMŠf¯ç„Õ€ñ-pVf^°®OÂ{ŸÛ£û D²M I8¼%ñ ïyn‡S:ÃþØSUç›ÏÓ ÉÔ±Fé§)¨7ÒP|`ÜŒ38SGIb¡Qñu6˜ù‰ƒ:ÒÅÕÔ /÷šÇÏ<¼ÙÛ/.l‹[ÀäPBÿgý?6©ÙÑèÌè˜؉™ 7ÂFá?‘0Bz1Ë=+¹mÍÿíÚ
+endstream
+endobj
+9215 0 obj <<
+/Type /Page
+/Contents 9216 0 R
+/Resources 9214 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+>> endobj
+9217 0 obj <<
+/D [9215 0 R /XYZ 70.866 789.024 null]
+>> endobj
+602 0 obj <<
+/D [9215 0 R /XYZ 70.866 751.639 null]
+>> endobj
+9123 0 obj <<
+/D [9215 0 R /XYZ 70.866 714.911 null]
+>> endobj
+606 0 obj <<
+/D [9215 0 R /XYZ 70.866 677.484 null]
+>> endobj
+9153 0 obj <<
+/D [9215 0 R /XYZ 70.866 652.661 null]
+>> endobj
+610 0 obj <<
+/D [9215 0 R /XYZ 70.866 615.283 null]
+>> endobj
+9124 0 obj <<
+/D [9215 0 R /XYZ 70.866 590.461 null]
+>> endobj
+614 0 obj <<
+/D [9215 0 R /XYZ 70.866 553.083 null]
+>> endobj
+9125 0 obj <<
+/D [9215 0 R /XYZ 70.866 516.229 null]
+>> endobj
+618 0 obj <<
+/D [9215 0 R /XYZ 70.866 478.927 null]
+>> endobj
+9152 0 obj <<
+/D [9215 0 R /XYZ 70.866 442.199 null]
+>> endobj
+622 0 obj <<
+/D [9215 0 R /XYZ 70.866 404.772 null]
+>> endobj
+9149 0 obj <<
+/D [9215 0 R /XYZ 70.866 379.949 null]
+>> endobj
+626 0 obj <<
+/D [9215 0 R /XYZ 70.866 342.571 null]
+>> endobj
+9151 0 obj <<
+/D [9215 0 R /XYZ 70.866 317.749 null]
+>> endobj
+630 0 obj <<
+/D [9215 0 R /XYZ 70.866 280.371 null]
+>> endobj
+9132 0 obj <<
+/D [9215 0 R /XYZ 70.866 255.549 null]
+>> endobj
+634 0 obj <<
+/D [9215 0 R /XYZ 70.866 218.171 null]
+>> endobj
+9129 0 obj <<
+/D [9215 0 R /XYZ 70.866 193.348 null]
+>> endobj
+638 0 obj <<
+/D [9215 0 R /XYZ 70.866 155.97 null]
+>> endobj
+9150 0 obj <<
+/D [9215 0 R /XYZ 70.866 131.148 null]
+>> endobj
+642 0 obj <<
+/D [9215 0 R /XYZ 70.866 93.77 null]
+>> endobj
+9133 0 obj <<
+/D [9215 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9214 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9220 0 obj <<
+/Length 2257
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÛr"G}×Wtø "Fåº_&Âc ²å°5k ó$ÏC´4Dp3 ­½_¿'û4Ðí]ûeLwfVežS'«Š' O~¸ø¾ñíµW‰gÁZ•ôÇ™·6qA2+’þ0¹ï\ýøî_ýÞ]÷R:ß±¬{i¥ì\ýüîãÇâ§÷®>ýÒ»íw…äwù¿ý›·ÝK¡ WxCˆò¥Þí7·½â­ý»®æOWýâû]ïºw×»½êu?÷ºèõ/~¿ˆ‘'b“÷ÌK &÷Ÿy2Äÿý”p¦‚Oþ?9I´QÌh…Ïãäãů|{œ&6N+¯úÜU¼3 ‹€zÓÇÑ4{ûv‘Mf]Œé9ÛL˜À¬¹i_Š ÓÖaí‡#¬dJ‰z<éÓjñésÁ¶àÓk¦ýÎ ÓUZŒÿ7nx÷ÒÛ̦ËUñãzŠÖ·×B'æͨ¡ð—ÛùsU<„€¶¦i§«gæ«EñÈÎT° ÜÆŽ¥·å %¥}¨ºMÇÈÕçâAm¶¬]Jið¨L.~Ä+ù ï3Ä'§£Õh6-––$;Å'e\ñaöPM—ã¬ú8K‡ûù‘œ&Â'NK&8-AµØ%÷ÌšÂw²=Ë˲+L‡}eä#“’yíñA°`LñÜ]ö@¹ÊÙt•%ý…êøÏâó‡jï³å`°šÎh¾š-¨àÙè¹+M'RñÒp&MâF"l“ÁÉ‚Î áÊ‚˜¦«lñêWïÛpëÁÎ×ýRÑS¹S±±HI^J!™("éð–nL\1ÉU|KHc O;>k¶áÒ9fv<þƒØâ8²
+C \a‡óRÜ¿0ѤI³±_ÔXY÷;BqD\Íe¤©Ë
+-quÏËÅ
+\4"yóØ9š˜ª ±¶®‘rݬ†®\ É&_Ðí ÝzÛáÈ%¯œÃ­­ êj­Ø ¶]#LH4uŸ"4)$,ö.–œ(£YŽ§±Æƒ6x¥nÅ-ú× vÜNÒ?Š‘WŒu–ÙͶÊý’&xðW7Ô8,'/@ÚùFÝ…V˜'Zè.È’Sín¾Ôƃ%àS˜kZayYr® k¾˜ ²åòÅ­4ûŽ- HM‘ý?bumö÷ÿê‡4Ûû/ÕÒ“*Qè(¼Ÿ3a KÖÊW€€ÑŠÛ˜â;n§é$[F
+endstream
+endobj
+9219 0 obj <<
+/Type /Page
+/Contents 9220 0 R
+/Resources 9218 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9067 0 R
+>> endobj
+9221 0 obj <<
+/D [9219 0 R /XYZ 70.866 789.024 null]
+>> endobj
+646 0 obj <<
+/D [9219 0 R /XYZ 70.866 752.081 null]
+>> endobj
+9130 0 obj <<
+/D [9219 0 R /XYZ 70.866 728.198 null]
+>> endobj
+650 0 obj <<
+/D [9219 0 R /XYZ 70.866 694.024 null]
+>> endobj
+9148 0 obj <<
+/D [9219 0 R /XYZ 70.866 670.14 null]
+>> endobj
+654 0 obj <<
+/D [9219 0 R /XYZ 70.866 635.966 null]
+>> endobj
+658 0 obj <<
+/D [9219 0 R /XYZ 70.866 596.924 null]
+>> endobj
+9209 0 obj <<
+/D [9219 0 R /XYZ 70.866 577.662 null]
+>> endobj
+662 0 obj <<
+/D [9219 0 R /XYZ 70.866 556.985 null]
+>> endobj
+9208 0 obj <<
+/D [9219 0 R /XYZ 70.866 545.048 null]
+>> endobj
+666 0 obj <<
+/D [9219 0 R /XYZ 70.866 510.882 null]
+>> endobj
+670 0 obj <<
+/D [9219 0 R /XYZ 70.866 483.787 null]
+>> endobj
+9206 0 obj <<
+/D [9219 0 R /XYZ 70.866 464.476 null]
+>> endobj
+674 0 obj <<
+/D [9219 0 R /XYZ 70.866 443.74 null]
+>> endobj
+9207 0 obj <<
+/D [9219 0 R /XYZ 70.866 419.856 null]
+>> endobj
+678 0 obj <<
+/D [9219 0 R /XYZ 70.866 385.682 null]
+>> endobj
+9205 0 obj <<
+/D [9219 0 R /XYZ 70.866 361.799 null]
+>> endobj
+682 0 obj <<
+/D [9219 0 R /XYZ 70.866 327.624 null]
+>> endobj
+9204 0 obj <<
+/D [9219 0 R /XYZ 70.866 185.063 null]
+>> endobj
+686 0 obj <<
+/D [9219 0 R /XYZ 70.866 150.889 null]
+>> endobj
+9199 0 obj <<
+/D [9219 0 R /XYZ 70.866 127.005 null]
+>> endobj
+690 0 obj <<
+/D [9219 0 R /XYZ 70.866 92.831 null]
+>> endobj
+9192 0 obj <<
+/D [9219 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9218 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F100 8905 0 R /F13 9222 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9227 0 obj <<
+/Length 2471
+/Filter /FlateDecode
+>>
+stream
+xÚ½[ËvÛFÝë+°$ω:ÝÕoï<²œqNb{$fe{AK°Ì>4$e'Ÿ[
+A2ÙÍììÃ'™Ýâo¿fRè²ïÅ“³ÌX-¬Ñø<Í®Ïþw&wí´mv:%äÆÐÉ|]"»œßMæù‹³§XáB,^$w ·@žPZ ícÁm>Tvð+þùuôYÄ Ðƒð¼,±xòÃýròm¼Î?•O»#ú‹§%eç*
+¥Mù«ü£”4Ÿ¬'‹yi帲v
+[ËOFÛòÃâKù/¿2Í7¿ÃOz1¾}ê’ÊCæ õ\¯Ô “„{-KR"’/¡çÅr°_ÄWÁÚa‘&ð!uùØUþe¨å _æó›üvx®¥|bWýÍŸõ ´¿eI-t*¬„–BÂ姣WXK-!‰¢±B¿\Üä«ÕGi%þS?Œ’ƒ»|ÝâGåD„ÄþHKï´­#™.î&7ãi‹^c… $Ðk‚ ¯ëz‹]•ù«“¢ΧX ŠNh×\É}ξe‚ÀxŠE[)¬ô °h“‚„–Ò+ß&7ÝЉ½(#ðžºìÓ=Pl’ŠƒQÑ4 ¬—-:½Æ“)‚Ãx *mÇíx=nØ>ÙïOG*eT0ÈZäõTÅèäórÝã%Ò¨LòÝ)X{~[~XµE2¯!8…H¶¾nÉÑn¡‰2 ÕòÛ¹÷« P…£*½Í˜Ö)®>za¢Ë\DÔQŸÔ*¥P¡¤7º;¤vD»Ô!~KÂS¨ëŸ.nØú?[2;9”®SfWÈ(ANHíÆ÷JíÎ#µ…©%©Ð/µ3èMj/ì½mÎÙØY›9•¶ýòºÚ”’”õÛHÝšLšc9Î ÇÕ‚ã}i!ûb5Y­_~ÿǷm
+¤ßB’…¤’‹!µ,¶àâþº 4ã9fwuO+¥O¢À NÚÔ·º{èHý‚@±«)E@’ÙìîSƒ@Ñcàó»¯òÕM•>î׋勇L3¾(Y8Óú^¦0Z,%i_a^­Ç´×Ð  dáš‘H£·uͳ|¶Xrá÷<-ì¤G §°¾ÃB5¬žçã»|¹Kd+z8¸PÈé÷-¥ƒkU
+WÏ;¸áªÛ:ŒÃiÝHõw=§s†"Z• ufIÞV¥Éý×"VíŽrŒ6…nTZÕUëÚ»5íl!¥ŸÐµ»^¬fÑ›å°Kr*$Mí­M¢âD ÝÖðP¤oËl)Ɇ°ÝKúÀ^Š]aH¡¯Š¡®¼­[ÞmüXP*2FH©ê`Z[Ôh" S¸†"j‘ÐpÍÓõxG¤ù]sH¡Ožö¬V‡Žˆ"wÍ®NÓÅüî8wj'Ð!Xe°íûM¹† dL·mü9ÜО´‡¸>^3ŠuÅsntfŸóe qÂÉ\‹vcN„Fú挽˜Ó`“J¢4à” õcN4¢]'`Nƒþ#l0Ö‹¥EöQ¥Pf)Ö•~ruµÜË ísF#…3>&2Zhí똚sÆVBP¨"LsHrñîÍû«w—›c’C´àÁm
+Þ°Íy¯‘E
+Ú€S¨®³1˜gÛ§­QoBYc$ÀLÉ«»8Mæ 0¨m\As
+M¦­âü¶¤Dev¸SyaÀy~”Z¶ð¦Þl ¶Ì‡ËK¦îxÊÄ]Ã^gRŒÜY’1ú¹#÷
+yʜߚ^)SÃ;ÜÜöO™,‰'‹)KÚÂþ=£~…µácVãû¥L T¥$ò‡hOy”ìx7N.ã°È5 Ú+{îZ¥s#m)’RGH
+Öý(X:¤2‚‚!É’ù¡Li5šÌ’L4(8Ί‚k:[)¸uìÉw$´K€ƒH
+Þ©Çmg–väSèmiå;Ø~(ýÔ F¥€‚€q]\#ž¤:µäë†tÔÝÓöGVhhX­Ü¡#Ç:!(îwGkúáD©ñ¹–>/Ó®ãmB=-½î?ÞæD6§›Ëd‹¥ú»ítŽEêxóF
+ïO2›~Çs|B±¬ýÓKâ£ÛNé€b‚«7¤aƒŒ ®Þ°$¯þ›7Ýšdö"ŸHõo’Y’ ñ¹Mr
+Gó ?þaýu²ªî€¬ËñüÃMµ³¾ó¢W›“ày^ñ×›åù²\Ì6Bò]ÑÓiQáŸlîg”qõ¢p×æ›e™*zÕsômjs>ø‘ÈÖ*º¼«¼{…×>œ[ëígž
+endstream
+endobj
+9226 0 obj <<
+/Type /Page
+/Contents 9227 0 R
+/Resources 9225 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9223 0 R 9224 0 R ]
+>> endobj
+9223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 82.97 161.173 93.508]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+9224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 170.642 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8cpp) >>
+>> endobj
+9228 0 obj <<
+/D [9226 0 R /XYZ 70.866 789.024 null]
+>> endobj
+694 0 obj <<
+/D [9226 0 R /XYZ 70.866 752.011 null]
+>> endobj
+9197 0 obj <<
+/D [9226 0 R /XYZ 70.866 716.073 null]
+>> endobj
+698 0 obj <<
+/D [9226 0 R /XYZ 70.866 681.271 null]
+>> endobj
+9138 0 obj <<
+/D [9226 0 R /XYZ 70.866 657.239 null]
+>> endobj
+702 0 obj <<
+/D [9226 0 R /XYZ 70.866 622.487 null]
+>> endobj
+9193 0 obj <<
+/D [9226 0 R /XYZ 70.866 598.378 null]
+>> endobj
+706 0 obj <<
+/D [9226 0 R /XYZ 70.866 563.702 null]
+>> endobj
+9194 0 obj <<
+/D [9226 0 R /XYZ 70.866 539.593 null]
+>> endobj
+710 0 obj <<
+/D [9226 0 R /XYZ 70.866 504.917 null]
+>> endobj
+9195 0 obj <<
+/D [9226 0 R /XYZ 70.866 480.809 null]
+>> endobj
+714 0 obj <<
+/D [9226 0 R /XYZ 70.866 446.133 null]
+>> endobj
+9201 0 obj <<
+/D [9226 0 R /XYZ 70.866 410.069 null]
+>> endobj
+718 0 obj <<
+/D [9226 0 R /XYZ 70.866 375.393 null]
+>> endobj
+9200 0 obj <<
+/D [9226 0 R /XYZ 70.866 351.36 null]
+>> endobj
+722 0 obj <<
+/D [9226 0 R /XYZ 70.866 316.608 null]
+>> endobj
+9196 0 obj <<
+/D [9226 0 R /XYZ 70.866 292.576 null]
+>> endobj
+726 0 obj <<
+/D [9226 0 R /XYZ 70.866 257.823 null]
+>> endobj
+9203 0 obj <<
+/D [9226 0 R /XYZ 70.866 233.791 null]
+>> endobj
+730 0 obj <<
+/D [9226 0 R /XYZ 70.866 199.039 null]
+>> endobj
+9202 0 obj <<
+/D [9226 0 R /XYZ 70.866 174.93 null]
+>> endobj
+734 0 obj <<
+/D [9226 0 R /XYZ 70.866 140.254 null]
+>> endobj
+8445 0 obj <<
+/D [9226 0 R /XYZ 70.866 62.747 null]
+>> endobj
+9225 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9237 0 obj <<
+/Length 1435
+/Filter /FlateDecode
+>>
+stream
+xÚíX[oÛ6~÷¯°‡IÀÄò*RÆ0 MœmEšv‰S`Hú Èt,L–ZInÚ¿C‰r$YI&V`q,‹çöÃç;7v~Ÿ¼œO^+æ(sæKGb¤‚À‘!Eqæ çÒ=üãàí|væùT*7@žPêžœŸ7?½9¼x=;{„b÷ þœÿùæÔóU@$jeŽ/Níª—'³édÎ<Ý¿=çðı{kêç³Ùñìlvz8óÞÏ_MfóÉÇ ¯±C¶^*…åN¼ž\¾ÇÎÞ½r0b¡rnë•k‡ †gð=uÎ'Mp7rÁp.$DtCÂmìÆ{Ï'c÷x“ÅsOa7ºövS dUaÞº_lU±‰+ë½^šeºÐY¬M/Ž¹è
+Ä”l íU’gp6¨±Ñ<êÚ3vÀ5êà«‚>}„£sÇ' 1¢¥?%YœnÖ<!å
+E¢S££ö4_Ú\Ù–¶.ÑC°ø02Ð)@§z—Onž,F
+À„õ
+]–û`²Sr,DXõ ®æ@byäHWQ’ê…%O]ÆEò¡Þúã$Ñ)µG“Ä(+ÌWI9ª*\ËÊ~”ö1.tTµ^/‹|Ý‚cÒd˜¡~,ôM-B„u
+vÛƒþx+Á¢‚í‘T¶gRÛ¶b˜T-˜ìÛ¾í÷§?-¥”:â9R
+šp§3ÝI©‰"…e?H3 °v
+’Œ?ƒQ[SÞ7ê7Ådž) ºO£…° ’êì¦Zµ`ìÄaë°è5Í>®Ï“¶Û6eÕô Û©÷Öì…ö¼¿Ñ™nº¢‘ÆñŽ"jÕišÑÛ$»éîñi‚h&>ßìB ¿ñ1cwZ°ƒÇLA(C˜‚ÂìÀFúöì8õBÒhâãÜ?˜¤ú—à)0 œ&*¶ý³ÝÁ;/0]æ÷»ˆxçɦ_“~§øãÝJ…‘"á³ÜJ]ýÿRâ?p)Ñ ÃmG¢â–Âœ©ß÷–bOÆîU…DŠ>æVµ¹M]Ì2Ô84¦A`‹’‘¡å7Y
+endstream
+endobj
+9236 0 obj <<
+/Type /Page
+/Contents 9237 0 R
+/Resources 9235 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9230 0 R 9231 0 R 9232 0 R 9233 0 R 9234 0 R ]
+>> endobj
+9230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 662.609 170.521 671.227]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry_ac7a4b315a3230e51a7dadb8965a60dcd) >>
+>> endobj
+9231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 629.261 139.901 637.951]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry_a7d5aaf11144ae0b3e1b2b9c1f69ed9df) >>
+>> endobj
+9232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 260.306 153.516 268.996]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 120.873 170.521 129.492]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry_a39b3ca3698dd278806b7ef120c65b530) >>
+>> endobj
+9234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 87.525 140.897 96.144]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry_a7c2f20df6d205fb2f59b43ce180ec249) >>
+>> endobj
+9238 0 obj <<
+/D [9236 0 R /XYZ 70.866 789.024 null]
+>> endobj
+738 0 obj <<
+/D [9236 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9239 0 obj <<
+/D [9236 0 R /XYZ 70.866 676.964 null]
+>> endobj
+742 0 obj <<
+/D [9236 0 R /XYZ 70.866 590.946 null]
+>> endobj
+746 0 obj <<
+/D [9236 0 R /XYZ 70.866 465.737 null]
+>> endobj
+9240 0 obj <<
+/D [9236 0 R /XYZ 70.866 442.058 null]
+>> endobj
+750 0 obj <<
+/D [9236 0 R /XYZ 70.866 418.734 null]
+>> endobj
+9241 0 obj <<
+/D [9236 0 R /XYZ 70.866 393.837 null]
+>> endobj
+754 0 obj <<
+/D [9236 0 R /XYZ 70.866 348.805 null]
+>> endobj
+8446 0 obj <<
+/D [9236 0 R /XYZ 70.866 250.606 null]
+>> endobj
+758 0 obj <<
+/D [9236 0 R /XYZ 70.866 238.473 null]
+>> endobj
+9242 0 obj <<
+/D [9236 0 R /XYZ 70.866 135.228 null]
+>> endobj
+9235 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9251 0 obj <<
+/Length 2180
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[sâÈ~÷¯PÕ>,Ô®{úÞj*•*“ÙšñÎzØM%3û ƒ0Ê‚D@¬Ëùõ9GÝ5²•¼ [ëÜû;_7¢ÑcD£¿\¼\¼¹E«µˆãÈPkˉfÑ`}îhÂ$é^jÎ;·÷ƒ.ã´sõö}¿7¸ï*Úù{÷’›¸ó ®$íü|=p×÷ýÛþ}ÿîºß½´BØÎõ_¯>ú÷î¡ö¯ß_}úänÝüxýóéäW¿ƒw?ÞuüpÑ\üë‚Í4bkã˜Ä\FÃÙÅç_i4‚g?D”GOÕÈY$• J
+8ŸFŸ.~º M¿•ˆ%FYÝt\3Bž º—ŒRÚ¹IË$›¦#olº.²y™9øæVªFitÉ,aÖ89¿t í$ ¤:YòÐϦ©“S†—i^Â0A;Ï]PÚ!(;‚ð[)A$Ó¸9˜dK¨ x9,r°3÷—eRfÃd:}v×pV “½ÀËß»\íæ_ùû¿áÝú…§¬œì&DAl¬"#(¡”Ê”•]§£)ÁÎÄ‹%T‰ B•F,IÜ’˜úhÒát9O‡_¨¢e²xLK<›exƒ9ÏŠ…;~3_@è;Éã,ñfsw‚B’EZ¥ä’kK¨0F¬RN½?iýd8ÙÉsu Y[fËr鮊±;&î0/²¼L¾`
+œø’iÍá·8/½´/œK—DüyÆËï‘áméÒ‹Jr_þYmê2ûw^òƒ³Ü+ Ï%”<sñ a(Þ¦Ãdµô¯ÍÒY„×)N.'×k¹e¼(f[NLŠe¹í؇w×­ólT¤^d^”þ$­çöúíй:+{¢ÖeZÅ>§?">B@³ü$HŸLi`®ù¹»•¸Ý4Zn ̃Á‰»9/ðÞÖpU2ð¤2qw¨‚ ·ót‰M‘Î ¬<Ð[ùWd#7ëfR
+ž×ÙÂ> ÙäÄ h‰…›NÉ}§üÎj¸ºIJb7Åp5ƒT&›ž©DKÏÔNâïUz²‘Éd°®ye‹ ƒVMÝ@ V‹8C¤‘õ˜_ºð ÃáKvšöz}WPü½DNF‹–f!
+;úU¿ ;¨ðúª‰Oªe Qö Eƒ‚„e_)šF75uKýÇžç}bð'É¢%ÙR®ÄÉÇ';Ofi[¢ÑJÐdúÇþÁi6§¥æ‡7Îg$¸ÙŸgpˆ,B/ïÓ5r=%÷½ñÙ{>üO¯¯³šÍ‘!ƒ.•©šy‹‹@4¥Œ#E5‘Zžâ¢@Èr’¸öÙh°»ª•&±1çP­,QÚ„ª‡[ÐaÞ!ÿCZZ ¨ßŠÉ=µqÈ„%ÑéF
+# c242/FéñVóÍÕwßmÞ«êFPèÉ åÂ6õ¶ã&ãœXpSZI=Ñb;s’«qiŽÕûÜð4à¾ÇZ 4‰y+9À¦¡•5ù«­¬ç£dDóÅâšö6{°#ÒkTAÛšýxⶪùÖjKüÓÇ4¯s[³£BîD•¯™#½k8ëU«ä«øÌ%@—ž
+Spô~Ü‚  .U"k.µ/XâÜ
+¤!°$P‡ã±^Îî‚Coü ÀuÁ‹0Í„D܈z©ñ ܾ™&«ü·³Dä=Šsᨄ¶Gfgò Kh짞ilfŸaK÷"ÏÙëx<1áyÃI<H–6N’ ÞòÆëÁ¦h_C ìžA74^ÅU¨ÛAéþ} ËÓí}ù?¼¯p e÷z^´­pxæ¿zE ðªB„)h;RWkðŠB«™“D•<¦¡¹cÏ¡[Ä°²¡îF!6*ïÐv³­ÝBA$´eøåIöŠ?˜´.Ð/”ÐBRÑ 4,¬å5aÛOcJ¨áçÐsb45L1’-ËÅtsŠ^‹P÷æf[M¤Ðs„kÛJ ôÐrêPYyÍ ‘Ç2Ô¼HaAš.‚õàÎ>œ¡D²øÙ‡û*8Þ½`î
+ OÖ\ƒaSóa,<]¥‡Â¦Ê#ðt½›z·qðûýýò$7
+È•gˆšÀl ¹¯4ï}
+endstream
+endobj
+9250 0 obj <<
+/Type /Page
+/Contents 9251 0 R
+/Resources 9249 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9245 0 R 9246 0 R 9247 0 R 9248 0 R ]
+>> endobj
+9245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 460.858 153.516 469.548]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 353.96 188.956 362.651]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry_aa5b1c0a3aad8fcbb669a40677ef4a8dc) >>
+>> endobj
+9247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 325.638 158.838 334.328]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry_a5a67b9151a2b6ede545e4ff520a217f6) >>
+>> endobj
+9248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 297.315 185.244 305.933]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry_a0f374fbf7ac112260b6ad51bdfd83a05) >>
+>> endobj
+9252 0 obj <<
+/D [9250 0 R /XYZ 70.866 789.024 null]
+>> endobj
+762 0 obj <<
+/D [9250 0 R /XYZ 70.866 771.024 null]
+>> endobj
+766 0 obj <<
+/D [9250 0 R /XYZ 70.866 641.753 null]
+>> endobj
+9244 0 obj <<
+/D [9250 0 R /XYZ 70.866 620.513 null]
+>> endobj
+770 0 obj <<
+/D [9250 0 R /XYZ 70.866 599.628 null]
+>> endobj
+9243 0 obj <<
+/D [9250 0 R /XYZ 70.866 577.243 null]
+>> endobj
+774 0 obj <<
+/D [9250 0 R /XYZ 70.866 540.564 null]
+>> endobj
+8447 0 obj <<
+/D [9250 0 R /XYZ 70.866 453.671 null]
+>> endobj
+778 0 obj <<
+/D [9250 0 R /XYZ 70.866 444.939 null]
+>> endobj
+9253 0 obj <<
+/D [9250 0 R /XYZ 70.866 367.059 null]
+>> endobj
+782 0 obj <<
+/D [9250 0 R /XYZ 70.866 267.425 null]
+>> endobj
+786 0 obj <<
+/D [9250 0 R /XYZ 70.866 216.645 null]
+>> endobj
+9254 0 obj <<
+/D [9250 0 R /XYZ 70.866 197.176 null]
+>> endobj
+790 0 obj <<
+/D [9250 0 R /XYZ 70.866 176.291 null]
+>> endobj
+9255 0 obj <<
+/D [9250 0 R /XYZ 70.866 139.997 null]
+>> endobj
+794 0 obj <<
+/D [9250 0 R /XYZ 70.866 105.165 null]
+>> endobj
+9256 0 obj <<
+/D [9250 0 R /XYZ 70.866 68.871 null]
+>> endobj
+9249 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9268 0 obj <<
+/Length 2037
+/Filter /FlateDecode
+>>
+stream
+xÚµZmÚHþί°tÒ ¤¥Óï/£Ý“ææå.«ì$7a?MòÁÏ`˜Yc’Í¿¿ên7ئa!ø>$0Ð]U]õÔSUmpò’àä_ƒNoî5K42R²dòœ(Œ´”‰2I’LfÉÓðæß×&w£1Uz(Ñh,)Þ¼»þøÑtûþæ÷ßî&#BñðÚý?yûþa4&œh;ˆ¨7Ýÿþpóîíljß×ñxw÷x÷ps7ú<ùup7ü1 ` NÈÖ ­‘¦<™.OŸq2ƒï~M0bF'ßÜÊeÂC‚3x¿H>þ3ÀÍCŠØ!%A8œòëˆáá*ŸY ÞÜžXN¥]N4"°û…Ÿ0f~Q[&⊇5÷¯U9i<L¿Œ.²»¢*Á!xøýêj±š¦‹É|Sü÷zf¿•^ qc*äɘ$ñRßÙÞan»{=›•Ùz="bˆ¬ „pd¸ÝJ£~çmVÓ"¯òUáw¥•]äEæßQå_WÏþÕîXdá3{êU:Û…èªE ¢œ @Êl£ã¢Ò:2?Kâ%a^[¾´çú>L­"º™@J™>t3¸4mÝóÕºBsïÔ1 B˜Ú­5h³g ›¬ÌŠi6ó¾úbý¾o,áÁáˆwnjs¿ñŽ>SÂþaÝQˆ—¤ÂQŽ„˜hŒ°¢}hÖ)IÛš†˜{jÖƒnŠí©Y[÷3$j Ó@Z¸W[L+Óqu•:Œ@rE­‘0¼Íœ ªy[s™½äë*+?aáÙb[8öjRÆd^çþl5Ý,³¢Jwäá@¿*ýÕ<_ûwkÇqb¸™ÖäòÍF6­¿}ÉŠ¬´|—V!UžËÕ2Éš¢‹•Ýú-/^šdtåx=!HÝ)°8­­þD©h-òn-_jÿ>¶§±ò(Þ)C2Mj((@/àXÜ/‰)s
+Þ9ƒ\3}èæ@ŽÒ´u{JkyÈÕ1¼!D¸Ê£ ~`ð+“Üë¶ÙnËÆÃûM1} ªkø"]×ñµ\HÖUãFÅ*†ÀF'òoy1]lfa%i,„:®àœu-ý9&K!ÅIX±z~^Ä GÑ\&ôJxÔ™Fw¼ÙÖH”Bš '‹‡Š ™¼È¼?;gàœµ…ÿˆUx´!º]QÞóÌgQ^¥Ö‘>óôÅ:×çÏ2’…!,Wô·_Á;[¦q@càlh¬°óÍŒ€°¨tKšïÝ—agýÁ›·K’Ü®À[»V+,éã†øЇŒ”0²Ñˆq£
+Øøž)Ÿú“ý–-¿dSZZwÜ>žVíÖét^Øâ»E5O5 ü°Úb¶Ù#*‚8fû=bË2H,MÚýâX¸­j¬$bZX| ©ñZmíסkŸÉ5{³(ËõÀ \rÈ„Kˆ†Áé­q§û‘k×eéLj¤NóâUZÓ¡Ó„Å-ïšñzÇÚÖdàúðX4$¤¤
+QÅOÊ–’‹t
+áv”âgGå€]ÐÀÅþo¡ð#SÐ_È‹"‘¬$ 3¬Úy脈Á#§`ꜨXÄ¢bç~b®äE%yÄ[0*$
+ ºÃ¤›jØGv“"õ¬t›Ui¾;o³õ´Ì_ݽOÔ¸ßSnì ý±; ¼,
+š.^ý30ÀDD¥€úHu*ðÑ-•¯UÙqEZÌö}²Îb3\Úxv¹e¦u¹ö×Îà
+endstream
+endobj
+9267 0 obj <<
+/Type /Page
+/Contents 9268 0 R
+/Resources 9266 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9257 0 R 9259 0 R 9260 0 R 9261 0 R 9262 0 R 9263 0 R 9264 0 R 9265 0 R ]
+>> endobj
+9258 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./class_func_list.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 9278 0 R
+/BBox [0 0 500 259.74]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 9279 0 R
+>>/Font << /R8 9280 0 R>>
+>>
+/Length 9281 0 R
+/Filter /FlateDecode
+>>
+stream
+xœ•NÍJA ¾ç)rT1I'3(„êÅ‹:/ K[ZºB­Å×wfwÕ¼È0„|¿Ù#“ ·7Í®‡ë§„ë0Þ׿†=È Àit=Þ–*r ‰4»bYÁh”h”ÙPY戥‡‹»ã[÷°9|\–-,
+<Â,SSü„f2fÆäN³ê{_Âó?3%N(n¤&CayyÝ-[ã[÷°âÍO}uYŠåê1-ÖÓÔN¸~\E\)DÜUåðÍO¹¿ü4Þ2‰¢qÊV%“û)rž±ºªÇ~¥W.
+endstream
+endobj
+9278 0 obj
+<<
+/Producer (GPL Ghostscript 8.70)
+/CreationDate (D:20140408115442+04'00')
+/ModDate (D:20140408115442+04'00')
+/Title (ClassName)
+/Creator (Doxygen)
+/Author ()
+>>
+endobj
+9279 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+9280 0 obj
+<<
+/BaseFont /Times-Roman
+/Type /Font
+/Subtype /Type1
+>>
+endobj
+9281 0 obj
+214
+endobj
+9257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 680.464 171.189 690.925]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h) >>
+>> endobj
+9259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 475.008 130.652 485.419]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_a0aa4198878da7bab0d3a7d0c4fb6a2d9) >>
+>> endobj
+9260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 461.325 152.924 471.737]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_a38f4414da778b0f17f4a050b73293808) >>
+>> endobj
+9261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 447.643 182.5 458.055]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_add6c30fccf19af1ee436e373e9e6b9dd) >>
+>> endobj
+9262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 433.961 188.203 444.373]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_a1a1c30b8157cefecb68b60afc1a26150) >>
+>> endobj
+9263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 420.153 194.662 430.691]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_abb4bef92112d61b61dfe9fb4e36f3745) >>
+>> endobj
+9264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 406.597 137.906 417.008]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_a4284992b3403443fd48c5cfe8824dec9) >>
+>> endobj
+9265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 357.346 192.896 365.965]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list_ae0c0bfa1d8e723df62fe15d0baae62a3) >>
+>> endobj
+9269 0 obj <<
+/D [9267 0 R /XYZ 70.866 789.024 null]
+>> endobj
+798 0 obj <<
+/D [9267 0 R /XYZ 70.866 751.796 null]
+>> endobj
+8448 0 obj <<
+/D [9267 0 R /XYZ 70.866 672.76 null]
+>> endobj
+802 0 obj <<
+/D [9267 0 R /XYZ 70.866 663.328 null]
+>> endobj
+9270 0 obj <<
+/D [9267 0 R /XYZ 70.866 490.086 null]
+>> endobj
+9271 0 obj <<
+/D [9267 0 R /XYZ 70.866 370.704 null]
+>> endobj
+9272 0 obj <<
+/D [9267 0 R /XYZ 70.866 319.732 null]
+>> endobj
+806 0 obj <<
+/D [9267 0 R /XYZ 70.866 319.732 null]
+>> endobj
+810 0 obj <<
+/D [9267 0 R /XYZ 70.866 268.719 null]
+>> endobj
+9273 0 obj <<
+/D [9267 0 R /XYZ 70.866 246.977 null]
+>> endobj
+814 0 obj <<
+/D [9267 0 R /XYZ 70.866 225.59 null]
+>> endobj
+818 0 obj <<
+/D [9267 0 R /XYZ 70.866 198.049 null]
+>> endobj
+9275 0 obj <<
+/D [9267 0 R /XYZ 70.866 176.307 null]
+>> endobj
+822 0 obj <<
+/D [9267 0 R /XYZ 70.866 154.92 null]
+>> endobj
+9276 0 obj <<
+/D [9267 0 R /XYZ 70.866 130.171 null]
+>> endobj
+826 0 obj <<
+/D [9267 0 R /XYZ 70.866 93.62 null]
+>> endobj
+9277 0 obj <<
+/D [9267 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9266 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F107 9274 0 R /F97 8866 0 R /F55 6508 0 R >>
+/XObject << /Im1 9258 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9295 0 obj <<
+/Length 1850
+/Filter /FlateDecode
+>>
+stream
+xÚ½Z[oÛF~÷¯ °/°šÎ™;bÔ—í¹´¶ò”ä‘h[€,¹´ÿ¾ßp†IQj\2û’PÖðÜ¿ïœ36Oîžü÷ì§éÙ×N&Ž¥ÆÈdz—XÎœ1‰M3”Lçɇ‘adØxb„]¿{1“à£W?½¾O„u£ÛéÍXñÑ{|Q~¾¹º¾º¹z{¯Ih£‹Ÿ_ý:½º ßV’.^¿º½ ?º|wñþÍÕÛ(·üwú¿woÇŸ¦¿œ]MÏ~?#ØÊÚÙæsB%³Ç³Ÿx2Çw¿$œÉÔ%_Ë“‰Ò’i%ñ¼LnÏ~;ãuu—¿†¯ž­WÛ"Øöe,ùh½˜{c~¸&•¤xSÿ¦²xCAlùÎGÎe8Ôϔݹ~^Í^/¶Åù9N‹ÕüÐCršY¢Òh9á!Ò“îÜ;t‹#Å©éW6Í7Áµ\óñDkS÷wæO<d›­EHÝ¡¿0ꈿ«ì1ð¦é½ MáÒµC!¹WL&Àòðe^FnQ,Ö«`p _.Vyx"cÃÃú®r”‹e^ý̾Î:b/¸†B—XEL*û²à7lÜ1£ƒ$‚¤Òô"û<FeÃÒ#6{zKüïÍ€‹B0‡Øâ)³u“ßùâË7ùj–σù¥ˆ?Ãó»Ê•Ë|;CN!vñT¬7çç;'}Š}|ÿcµŠbÞd›íC¶\æ8¼ÉgùâËXèQ~©a‰EÎRÒ=b"µf< ’,™àâ
+¦­B©Õ€‘i*}*6U\XGuN$WL¡þ|ÙÉB8‚UzhB0pX$&MŽôbHp^Ø“ËB³Á ös@'Jûl°cŸFPLŠïÈ.íÅÆúйÁXߥ߉ê°Þæ]å$ .…¥ÆØÓ‹ãHCB¤àÙ < )Aƒr¥R3'eSéßᙌÂËf±*Œ:4SD´4€²ê¶l'‚ ­¢ÎX—{Ð?ft ÞÀOÈè’3FT=¹M3þµ!t¦„7U.óÕ}ñЦ™·LœTG1aY§"æå·c^õÃ<f^ Æ@‚L…ào‡¼è;lóâù©Ã?…ɘÃ,t9™¦}TX Ò ‰ÒÈió¦ÛCdªS²‹þ,áêDK1Vë†f
+28ç£7ùãç<¬—Y‘ŧõìù1_YY‡˜çÍqìZûq#ív/HºcXï
+«"U³QLÜ…Çm¾m¥«E«˜m³ŸÔd¬Àmf5Ÿ§ðuG©úü]­üIé[Cö¦”wÉÜ {^L¤¾µbkKÍþÊcOOûB,?æ{5ˆï¨{h”~o†å×çPy‹Yóª(6‹Ròs1\´ÂÅÈ?‰Sëîx²²}uÒ!´ekã6%„ÊÏÙ-÷ìdÀ!¼b'yÚ·##2
+ Hí+bÌ©$_zEÜh®ççúõímFæÚtö-vºW†I£•
+=@†½¤2V'3\ßߪ×ïëO/ü$ŽŠþ ¿d+µ¿•¯#×|.„®·1d)„®nÍ"ƒáfç¤vv»xû•ñåUéúU%‡—ý®¸ªª„$›¦'7lÂhdïͬ>’}—ýìÿ¼ž¡8ÉâUñ|ËvÖõ—åžý’¿…¯ë7Kþ#4¶]ÞÞ”æHÕ°
+endstream
+endobj
+9294 0 obj <<
+/Type /Page
+/Contents 9295 0 R
+/Resources 9293 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9285 0 R 9286 0 R 9287 0 R 9288 0 R 9289 0 R 9290 0 R 9291 0 R ]
+>> endobj
+9285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 485.106 153.516 493.796]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 469.48 162.985 479.892]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp) >>
+>> endobj
+9287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 356.883 142.514 367.273]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+9288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.698 289.167 141.887 299.557]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+9289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.861 289.167 178.895 299.557]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_a922a107e3e5e3e612916915889d18ede) >>
+>> endobj
+9290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 277.034 182.199 285.653]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_ab82f274a4b84d5479334243eccf06aee) >>
+>> endobj
+9291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 153.516 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9296 0 obj <<
+/D [9294 0 R /XYZ 70.866 789.024 null]
+>> endobj
+830 0 obj <<
+/D [9294 0 R /XYZ 70.866 751.691 null]
+>> endobj
+9282 0 obj <<
+/D [9294 0 R /XYZ 70.866 726.797 null]
+>> endobj
+834 0 obj <<
+/D [9294 0 R /XYZ 70.866 689.433 null]
+>> endobj
+9283 0 obj <<
+/D [9294 0 R /XYZ 70.866 664.539 null]
+>> endobj
+838 0 obj <<
+/D [9294 0 R /XYZ 70.866 627.117 null]
+>> endobj
+842 0 obj <<
+/D [9294 0 R /XYZ 70.866 584.799 null]
+>> endobj
+9284 0 obj <<
+/D [9294 0 R /XYZ 70.866 564.612 null]
+>> endobj
+846 0 obj <<
+/D [9294 0 R /XYZ 70.866 543.483 null]
+>> endobj
+8449 0 obj <<
+/D [9294 0 R /XYZ 70.866 461.554 null]
+>> endobj
+850 0 obj <<
+/D [9294 0 R /XYZ 70.866 451.822 null]
+>> endobj
+9297 0 obj <<
+/D [9294 0 R /XYZ 70.866 372.031 null]
+>> endobj
+9298 0 obj <<
+/D [9294 0 R /XYZ 70.866 304.406 null]
+>> endobj
+854 0 obj <<
+/D [9294 0 R /XYZ 70.866 260.549 null]
+>> endobj
+858 0 obj <<
+/D [9294 0 R /XYZ 70.866 208.73 null]
+>> endobj
+9299 0 obj <<
+/D [9294 0 R /XYZ 70.866 186.772 null]
+>> endobj
+862 0 obj <<
+/D [9294 0 R /XYZ 70.866 165.17 null]
+>> endobj
+9300 0 obj <<
+/D [9294 0 R /XYZ 70.866 154.478 null]
+>> endobj
+866 0 obj <<
+/D [9294 0 R /XYZ 70.866 117.065 null]
+>> endobj
+8450 0 obj <<
+/D [9294 0 R /XYZ 70.866 61.944 null]
+>> endobj
+9293 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9311 0 obj <<
+/Length 1816
+/Filter /FlateDecode
+>>
+stream
+xÚÕZMoÛF½ëWèEªÍîìwPpm¹mÐØ©­œœ™vH”+S)òï;Ã%UÑZÉ´H õÁ¶l/çãí¼Ù7$yrŸðä×Þ/ãÞ›s'Ǽ12ß%–3gLb=0#’ñmrÓ?ýíäÃxt5‚u}ÃCÐ?ýãäú:üéìòôãûÑÅx €÷OŠïãß//pÑ/¶¼æüãÅ)ýçlt}zõû‡ñ@ñþei÷z|E¿~<‡ß¯F磫ÑÅéhðyü®7÷þê ™'b¢sÌJ¦‹ÞÍgžÜâÿÞ%œIï’¿‹•‹DiÉ´’øyž\÷þìñí´µL0/„ÞÎÛÆ«Ä)ôÁPpÎûçëlšÏ–ÙYú8]Íòåª ;_­§yrz7¼Ÿ®ÒlšRØoÎñÚÄ#¶`ÈO† ™ ƘeÓùú¶Z(¶ÖaÔ³àaáO1S–Y%ªË»»ùrr»‹”°Š9…YI‹WB
+p~ƒSOÝ¡°–9© S¶hº\,–ûÉAárØDøsXAsfµ/– …V˜h2”ˆ½„°òÃú 8ŸM¨'y¾š}`M­óô±H±ÚÅ7çJoU®0Ì:‹V=î¹ Ö>èÚ5ÉÍPkÓŸ/³û`¿øVb«ûº«b-­˜e`0aTbœeÚÖ<Áµ´ÂÒÁt%¬·“|2O³Zà›†Ú2àóÄÚ†ó\®óX¢–-ƒ•Ä5´ÉTãrE–$f,›djФse¦öp¦ëY–»HüB#S|b GºMüÂ1%ƒ%I5NÑä‡!.³Çå<„…•ïLQa5h]*Í&aæéí>`=sÞ6+¡ç€U†y´Õ°h‰Ú^`óÙ"]ŪkËé.‚B ÚêzPÏ«Ñ@³ŠE\Ÿ!äÝ'Îe¼±KÍRÃHÉT«<±; -ûÏ*} ó ãXG@V
+¯:pmNÕ]#Y$ï€î§ó= ãI²aìd<Q¼‚.PFKV•½/£sn½øRr¤˜8ì:ʳ€t²zŒ¤
+,un˜­šàaaƒ% Yµ•æžg¼3ÂÐiË;$­s­
+°Q‰ÂK•ôzLóýÉYÝ°ÍN¿NV ³Ûº’þ~ƒdÿs\b•¢h[bŠ\”Âö,Í'3jhAÊ—ò•n0W€×ÅÕYŠÔlV¬..Ÿ”Jx>ËÒðIq?(y~Ò%ótð÷€ktëÄyÔˆÇïp‡
+&X²®®[Y3’¸" A Úû´ m€Œ¶%|ZN׋4Ë'ÿ§å~øö¬T¦8Õ(ë˜ö/L¼æÎk¦E0¤ªCµˆsw–yûv¯Rì…iûx
+…Êð{ìvšB…l¬ìÀµBÁ+¬»ÞfÌsø Ã&I¥1Òî…ýê@cšNò<7`¤#”4´êÓ…­ †¤u´©„¢7ö ˜.»p¯é&ú÷OoÙÄ=öQ'[‡JíÔqU5ÞÕ ÛÜ®½O”¢Li·žx WØúhÙjáOîåîíæ1‚Î7@Ž[ÝFÄ6Òz÷~õN/W€°=¢— hÕËÁh:èåd ½5èåêÿ+€
+–¶#O)€ÈŽÊMPNKTsú2$}t° $S8 Ò ,D«˜cÇ'QßxˆÝÜaÄ"†c”´›€#½qVï€=hIZxÝì˜×{È’€FpNKöÔœþ7ì¾TZGÙC– ’Öå“
+ˆ>©
+½œ 8î·¶­d#Ñ X¢âz^6bZw}„nE‡*wq× î_7},½ ¥;`OùrUò´wYrgÛåu6Ðbï•izsé%o•…r×[/?="ÔW2S!õSÏÿ
+endstream
+endobj
+9310 0 obj <<
+/Type /Page
+/Contents 9311 0 R
+/Resources 9309 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9229 0 R
+/Annots [ 9292 0 R 9301 0 R 9302 0 R 9303 0 R 9304 0 R 9305 0 R 9306 0 R 9307 0 R 9308 0 R ]
+>> endobj
+9292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 684.389 175.259 694.855]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a7bd6b266f41614e5ba115502ff7e9ef2) >>
+>> endobj
+9301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 670.862 180.746 681.327]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a4581997ecb425789eefa6242eee1f094) >>
+>> endobj
+9302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 659.181 190.269 667.8]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a9206a2442048339aa4b72b6c753710ba) >>
+>> endobj
+9303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 645.654 179.294 654.272]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_ae27a887fc68aec8ca07ecebd47ee63bd) >>
+>> endobj
+9304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 630.405 183.822 640.817]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a457239689cf6cf71c4efe13791d22785) >>
+>> endobj
+9305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 618.599 169.18 627.289]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_aa8c3305a4fc6c78e44b30bffe6f4bbee) >>
+>> endobj
+9306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 605.071 146.02 613.69]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a61cd17756540bc336c08382101d73336) >>
+>> endobj
+9307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 591.544 151.337 600.234]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_add6d286764cc7a3cab0a57892c919746) >>
+>> endobj
+9308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.708 576.389 134.149 586.635]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor_a7dec874f722693ab9280675f98f42f10) >>
+>> endobj
+9312 0 obj <<
+/D [9310 0 R /XYZ 70.866 789.024 null]
+>> endobj
+870 0 obj <<
+/D [9310 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9313 0 obj <<
+/D [9310 0 R /XYZ 70.866 699.516 null]
+>> endobj
+874 0 obj <<
+/D [9310 0 R /XYZ 70.866 560.789 null]
+>> endobj
+878 0 obj <<
+/D [9310 0 R /XYZ 70.866 512.036 null]
+>> endobj
+9314 0 obj <<
+/D [9310 0 R /XYZ 70.866 490.444 null]
+>> endobj
+882 0 obj <<
+/D [9310 0 R /XYZ 70.866 469.207 null]
+>> endobj
+9315 0 obj <<
+/D [9310 0 R /XYZ 70.866 444.689 null]
+>> endobj
+886 0 obj <<
+/D [9310 0 R /XYZ 70.866 408.576 null]
+>> endobj
+9316 0 obj <<
+/D [9310 0 R /XYZ 70.866 384.058 null]
+>> endobj
+890 0 obj <<
+/D [9310 0 R /XYZ 70.866 347.945 null]
+>> endobj
+9317 0 obj <<
+/D [9310 0 R /XYZ 70.866 311.472 null]
+>> endobj
+894 0 obj <<
+/D [9310 0 R /XYZ 70.866 275.3 null]
+>> endobj
+9318 0 obj <<
+/D [9310 0 R /XYZ 70.866 250.841 null]
+>> endobj
+898 0 obj <<
+/D [9310 0 R /XYZ 70.866 214.727 null]
+>> endobj
+9319 0 obj <<
+/D [9310 0 R /XYZ 70.866 190.21 null]
+>> endobj
+902 0 obj <<
+/D [9310 0 R /XYZ 70.866 154.096 null]
+>> endobj
+9320 0 obj <<
+/D [9310 0 R /XYZ 70.866 129.579 null]
+>> endobj
+906 0 obj <<
+/D [9310 0 R /XYZ 70.866 93.407 null]
+>> endobj
+9321 0 obj <<
+/D [9310 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9309 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9330 0 obj <<
+/Length 1930
+/Filter /FlateDecode
+>>
+stream
+xÚÕZYoÛF~÷¯ Ð ¨7{FQÀõÑ&hŽÚÊ““Z¢%¢•RTô×w–»+s)Z–-¦E,S"9×7óÍì’8™&8ùõè—ÑÑ«KÍŒ”,Ý%
+#-e¢ E’$£Ir3ˆh4<–”^¿=2<øõbxL•\®†>žÜ÷«‹Ë‹«‹wgpšÂùàì·Ó£‹+wVz!g¿Ÿ^_»ŸÎߟ}|{ñn4$NëÏÑë÷GoŽ.FG0'dc–ÖHSžŒG7Ÿq2soŒ˜ÑÉ}}å"á‚!ÁÏ“ë£?ŽpÓUÑåª$_×yQémõ «Ö^Jå.í5³Q½­Òq‰UV.—ëb\åËâ<[ËüKµ,ONª|‘•ÛÖPB¡‡[C GšÄÖdEz;$x0Ï&Vñ«K.wÎá ¢Æ¸{γOÓ"·æ;gRïÔ</2wÄ)wË;÷ßÞ2ÏÂoð-ÓI‡¯X€v(Nà?yž·‘ík$…“¤$u¦—‹Å²@3d5ƒW€æÚ @Õ×\ew6é³2+Æ•ÚâÛ!¤êWwü>X_CgSàñÛøõ äGžbòÔ­«¬ZÙS ) IK ªS.µ$ .×®.òÕ¸C)¤-¦¥F#ÌM¬t’VirI¥é1£
+(ˆ%ÇT#Î×wA¡>^8[xÒrñ\mûC L€ú‡Dàä€"†#ÆkA‚ûŒ*lõ¬ÅCâê%ÅÃðAÅ#5E8ñðâ±’(Hú®‹Gó3ª{(+‰P³Oñô ÔO¤t«x \ þ”ƒp×f>]&Ëñz‘Uúp5BËÒ}©fùÊ­*ÔõØ'ä½­§ÔŸfô&Èõ´
+¸Þ•ËE’5EÏçK{ë}^L›ù{RG+4è„@öØ"LjcŸ=Ÿ(ÑE.¦åÔ÷
+n»9Bîª[v”ªD2eÛÝË ʉ8A¡_†ˆ¬¬i¢oêðCå
+xa„orÖn¬ÊÇ.À§UUæ5®«lÕÊž8ë$RZÅMc«.|@S”¼#ZD@TÁE¢1‡ôKÎœ$eX˜`)¥YóHþÍŸ¬UÈñ¿ ÁÒ¨:ˆ ÄC,aÄõj®ƒ—ÅE³™ØF²ê*‚Û¼€¡
+Ƶⲿ`…¬À—J²•ÄédRf«–”Õ×ÅírÞAÛÊ ^0¦!ÆtoÚn¶IZ¯uŸ+¡ƒøµ
+endstream
+endobj
+9329 0 obj <<
+/Type /Page
+/Contents 9330 0 R
+/Resources 9328 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9323 0 R 9324 0 R 9325 0 R 9326 0 R ]
+>> endobj
+9323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 636.466 168.768 645.157]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+9324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 516.649 140.228 525.268]
+/Subtype /Link
+/A << /S /GoTo /D (struct_image_a8611ea9ea821adda847f61ad509688ab) >>
+>> endobj
+9325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.708 486.489 134.149 496.734]
+/Subtype /Link
+/A << /S /GoTo /D (struct_image_aec0c76d8d1434ba4511fe0ea1ac75f00) >>
+>> endobj
+9326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 128.028 151.337 136.718]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h) >>
+>> endobj
+9331 0 obj <<
+/D [9329 0 R /XYZ 70.866 789.024 null]
+>> endobj
+910 0 obj <<
+/D [9329 0 R /XYZ 70.866 751.99 null]
+>> endobj
+9322 0 obj <<
+/D [9329 0 R /XYZ 70.866 727.729 null]
+>> endobj
+914 0 obj <<
+/D [9329 0 R /XYZ 70.866 692.471 null]
+>> endobj
+8451 0 obj <<
+/D [9329 0 R /XYZ 70.866 629.174 null]
+>> endobj
+918 0 obj <<
+/D [9329 0 R /XYZ 70.866 620.299 null]
+>> endobj
+9332 0 obj <<
+/D [9329 0 R /XYZ 70.866 529.8 null]
+>> endobj
+922 0 obj <<
+/D [9329 0 R /XYZ 70.866 456.211 null]
+>> endobj
+9333 0 obj <<
+/D [9329 0 R /XYZ 70.866 416.309 null]
+>> endobj
+9334 0 obj <<
+/D [9329 0 R /XYZ 70.866 395.746 null]
+>> endobj
+9335 0 obj <<
+/D [9329 0 R /XYZ 70.866 375.183 null]
+>> endobj
+926 0 obj <<
+/D [9329 0 R /XYZ 70.866 310.11 null]
+>> endobj
+9336 0 obj <<
+/D [9329 0 R /XYZ 70.866 288.767 null]
+>> endobj
+930 0 obj <<
+/D [9329 0 R /XYZ 70.866 267.722 null]
+>> endobj
+9337 0 obj <<
+/D [9329 0 R /XYZ 70.866 231.329 null]
+>> endobj
+934 0 obj <<
+/D [9329 0 R /XYZ 70.866 196.088 null]
+>> endobj
+8452 0 obj <<
+/D [9329 0 R /XYZ 70.866 120.735 null]
+>> endobj
+938 0 obj <<
+/D [9329 0 R /XYZ 70.866 111.861 null]
+>> endobj
+9328 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9355 0 obj <<
+/Length 1638
+/Filter /FlateDecode
+>>
+stream
+xÚÕY[oÚH~çWxµRe«b2÷ Ú®”MÈnª6í&l_Ò>8`K€·ÆiÔ¿g<c°!¥ÐJûˆ=s®ß¹‚ƒû
+VQ<¹à¢fH"‘Ò*èƒuÄ>R*W‚Û¾2üQféä#ؾ?¹ <0@‰–rQ…pÁÁ˜y"Öù½7Éõ†
+qÅ«kÓÇŸÍÛ*<‰å[“8šÆé ‚„–AŸÁ3nQ‰@;õ Æ8<OŠ8%Šd9ÎÓ‹4[8r ÑpÃ.ç (Eiy¸¼îs–.÷q÷™M#/7¦³¤zf’Å“M PŒ‘€KCÀdR
+Óá-ê½õ6™ß%¹÷U\Äþ[6~œ'‹"^ûM°¿ùèø1¼ ¸ mà¶HZ”²êÌ%€`d³DìÂ..ŠÜJ~ ,„×p]q&øêS$l_”q|Ê@c©‚2 Äõ^(;œw…²:ïÊÀšL!E¬Y)¢ÔÃê:™Zg$y²WÑ_fȯ›ÂY1Ø ÈËß,jý> ‹îOaSÙ2Bˆ£DR©Ê†Ð;gM‘’´Éy§‹‰±Z³#ð¦ØjÍš¼—qžt¡’‡€Bx¶Œ;Òd›B(v0åQ~ dXËÃE\Bbz“³pÛ@:œ3tœŠ&ç<¹O—E’Ûìe³VRšƒGªÒîìèÁçœI#—Ê`Ë|æ.Ò¥û¶,ó¤Ç>©=YDÅþí}²€di4.ªæÙ¼"’ÔIÏf™½ú”.îëIpÐìÒÐUõ©­/rK{³Ù¡ø†gWœA¢áBI( ú8£â(Qe¾%Î8ƒ7Çà (VÒ4y»TÚêmᦠ'@ÀÖ-Å‘Á`W²cYÕmŠ}ÕþIðaþ4 ).*(œÍâ¥÷¶ÍȤÊȾ.c\+ÌPÆ­™«Nâ×t1ž=Nª£¤vºgjûòü[1ˆNªÙt:ëö+h¦)‚@7»Û²F·LÛäG”* ž¥D0YÅõ,qÆmiÀR½|¿w5 Ò“–ºYÖ.‰ ©´ˆ­]@¦ñ½µ­ ¦yGH~ˆTÓE.ì²|Њæ'kî1’ŒœÊ åc}îÙŒ¢1-Ô¿—/«›þÁÉåœç˜o=ïTGúõ~üöaˆAÇi`Šè†ê=ä4g6I<mMu[n™dpÕ®ßÙŽ•!nô`w•­‚¦Þ÷JQt£ïmØ]¯Âf„6eï['é50ÇÖàÅ–1Ò¿ÎþM"®(¼|y<£{ï²lö¬ +^½Ú&À
+V¸X»i=kŽ
+a^*Sþ?ÎÖ$[z™cêõK‡^Êëõ3•zÆYîfIÄmzªNj0pCó+4ä_ýÛ‹UÚ®Û«ƒäo†IÎ,ÔØ‹¬
+0#ˆjP…49 ¹så(IC×lÏ4 ³ãä{Ó䦇 àŒ?㢲ÀÛ¢ XÌéПw¹R ¢Lsà
+endstream
+endobj
+9354 0 obj <<
+/Type /Page
+/Contents 9355 0 R
+/Resources 9353 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9327 0 R 9339 0 R 9341 0 R 9342 0 R 9343 0 R 9344 0 R 9345 0 R 9346 0 R 9347 0 R 9348 0 R 9349 0 R 9350 0 R 9351 0 R 9352 0 R ]
+>> endobj
+9340 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./class_var_list_1_1_iterator.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 9364 0 R
+/BBox [0 0 500 132.45]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 9365 0 R
+>>/Font << /R8 9366 0 R>>
+>>
+/Length 9367 0 R
+/Filter /FlateDecode
+>>
+stream
+xœ•NKKÄ0¾Ï¯˜£ŠŒ™¤y"„E/jðºÔµ[V¶«ÛFÄoº}@Á‹„0Ì÷˜ï;¢ FÑ¿qn¸z²Xw ð.ÿŽÀ'ŽcÓàmÌ"‡R‘T®À¸…ÁÌÈV‘+<²"­µÇØÀÙKÙ>ìºÂ}ªÚ2}´çñV=)£~CïÖBTÎ’Û
+žÿíÉ8åz&ÁVž¢»ôÂnŒ½Æa=|~¥õ®SY_b,_÷U«Cjðfî'ÐÚ‚ «?ºõqÒØÜ]ê™óØ «v‚¼aÜgåùéîÌO@ÏKO9ÅxK¬e–ÈÂfóYÞØ^䲿ÒÆg
+endstream
+endobj
+9364 0 obj
+<<
+/Producer (GPL Ghostscript 8.70)
+/CreationDate (D:20140408115443+04'00')
+/ModDate (D:20140408115443+04'00')
+/Title (ClassName)
+/Creator (Doxygen)
+/Author ()
+>>
+endobj
+9365 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+9366 0 obj
+<<
+/BaseFont /Times-Roman
+/Type /Font
+/Subtype /Type1
+>>
+endobj
+9367 0 obj
+247
+endobj
+9327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.456 738.675 140.395 749.087]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry_ad3fdea7f951608b1832a015e44df6696) >>
+>> endobj
+9339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 573.364 171.189 583.825]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h) >>
+>> endobj
+9341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 369.588 125.084 380]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_a611820d0155ed7f1071161f033d7d476) >>
+>> endobj
+9342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 356.09 125.084 366.502]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_a841b96e4f3b5ded743dde00374e602a6) >>
+>> endobj
+9343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 342.591 125.084 353.003]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+9344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.057 342.591 179.823 353.003]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_a29a1d71870edff3435a9a2ec63561b82) >>
+>> endobj
+9345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 329.093 159.981 339.505]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_acb9ba27ad5a1bc00096949877fc0a5a0) >>
+>> endobj
+9346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.388 329.093 217.696 339.505]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+9347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 315.594 157.237 326.006]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_a8ed1abd8cd95f840e8e3b38c472a3b99) >>
+>> endobj
+9348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.645 315.594 214.952 326.006]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+9349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.015 302.047 216.289 312.508]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_ac81df0f2c63344dec56749581eea3461) >>
+>> endobj
+9350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 251.827 154.915 262.239]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_aa4d59da12ec06dbfc4ae5f72eca5db2b) >>
+>> endobj
+9351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.172 203.279 158.802 211.898]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_ab6e06f2a49837ab70e769808b1ec3e3a) >>
+>> endobj
+9352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.015 188.01 208.905 198.399]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator_ae0723084dcf3c3c28081f73f6098365c) >>
+>> endobj
+9356 0 obj <<
+/D [9354 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9357 0 obj <<
+/D [9354 0 R /XYZ 70.866 753.662 null]
+>> endobj
+942 0 obj <<
+/D [9354 0 R /XYZ 70.866 723.144 null]
+>> endobj
+946 0 obj <<
+/D [9354 0 R /XYZ 70.866 672.825 null]
+>> endobj
+9358 0 obj <<
+/D [9354 0 R /XYZ 70.866 653.032 null]
+>> endobj
+950 0 obj <<
+/D [9354 0 R /XYZ 70.866 631.824 null]
+>> endobj
+8453 0 obj <<
+/D [9354 0 R /XYZ 70.866 565.843 null]
+>> endobj
+954 0 obj <<
+/D [9354 0 R /XYZ 70.866 556.66 null]
+>> endobj
+9359 0 obj <<
+/D [9354 0 R /XYZ 70.866 384.575 null]
+>> endobj
+9360 0 obj <<
+/D [9354 0 R /XYZ 70.866 266.814 null]
+>> endobj
+9361 0 obj <<
+/D [9354 0 R /XYZ 70.866 216.544 null]
+>> endobj
+958 0 obj <<
+/D [9354 0 R /XYZ 70.866 172.478 null]
+>> endobj
+962 0 obj <<
+/D [9354 0 R /XYZ 70.866 123.98 null]
+>> endobj
+9362 0 obj <<
+/D [9354 0 R /XYZ 70.866 102.416 null]
+>> endobj
+966 0 obj <<
+/D [9354 0 R /XYZ 70.866 81.207 null]
+>> endobj
+9363 0 obj <<
+/D [9354 0 R /XYZ 70.866 70.718 null]
+>> endobj
+9353 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F97 8866 0 R /F55 6508 0 R >>
+/XObject << /Im2 9340 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9379 0 obj <<
+/Length 1707
+/Filter /FlateDecode
+>>
+stream
+xÚÕYmSÛFþίP§3{ˆ/·÷~Lé “’’‚Ó™ÉaÑÄ–¨Ióﻧ[²ÇXj;ý’Èâ´»·ûì³ÏI4¸ hðrç—Ñ΋cÃC¬R<Ýš£T -#
+‚ÑupÙS„éc½×§ïúG¯v†£?w
+­öõ{_Ñ^8{ßg{{'Y4 ³t¶¸*¢þ@%í¤T½³ô:rÁ¾8X´ÌT^,Ž^„Ëinô¥¼X…qÖü¡Eµ&™[jĈET. I( éº; g—q2‰“è£Ç˜Ð˜<¨>÷XÄš¹·Ë读I<Ž³Ò–5[ÆuÞ†iä¬xä(½²$Îâ4)rfÅÿ.¦â
+4-.Ò›*”M¢êžKV^{
+KÚòZ7ë©òŒýÏ[án ³Èß
+IIè§w£í:A)A@uÐøïÁã€Èg8F„qÄVÈ?nJ£Y”Œ£©ùÃߊkÔ> p¬(®hÏËl$åúôn±fw·ZE<5
+«-èÖB+I‹!ë
+4
+vˆ¼Õœ±rÔ?Ó£€åâಪåiX‰Â’À^\:°6º“Ù|ünÔ‚MÙ6ÝÙnf0+ˆQ]hgI)ùïw'sÅU4§3¤«S°§979²<ë©õ=Ž>•¹nŒ»üV¾ûJÎdŸâûR‡LÂûòò«KbXþ¸’Êy•­›Y:­êF'“4='·upì幬ދnØ`‹bm´.ÉõŽ¡Æ¢"ã³Û2õçøØe.ÌÖ@ X™Æ±†:À´
+‚Š‚ÊÑDiÉQ=ᱧÓ
+u‹mdÙ,Λæ!‹î—f‰‰6K/4W8¡d
+)Š©¦Ó¬L¼‡„]aç15ù¯†kpʯ|µ
+çj•Rê„ù.|
+endstream
+endobj
+9378 0 obj <<
+/Type /Page
+/Contents 9379 0 R
+/Resources 9377 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9375 0 R 9376 0 R ]
+>> endobj
+9375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 244.94 153.516 253.63]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.715 123.388 197.128 133.849]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t_ad8420cac8a0d16eb6e785cc00f8f4d6b) >>
+>> endobj
+9380 0 obj <<
+/D [9378 0 R /XYZ 70.866 789.024 null]
+>> endobj
+970 0 obj <<
+/D [9378 0 R /XYZ 70.866 751.246 null]
+>> endobj
+974 0 obj <<
+/D [9378 0 R /XYZ 70.866 720.374 null]
+>> endobj
+9372 0 obj <<
+/D [9378 0 R /XYZ 70.866 697.498 null]
+>> endobj
+978 0 obj <<
+/D [9378 0 R /XYZ 70.866 674.978 null]
+>> endobj
+9370 0 obj <<
+/D [9378 0 R /XYZ 70.866 649.138 null]
+>> endobj
+982 0 obj <<
+/D [9378 0 R /XYZ 70.866 608.63 null]
+>> endobj
+9371 0 obj <<
+/D [9378 0 R /XYZ 70.866 597.465 null]
+>> endobj
+986 0 obj <<
+/D [9378 0 R /XYZ 70.866 555.186 null]
+>> endobj
+9368 0 obj <<
+/D [9378 0 R /XYZ 70.866 544.021 null]
+>> endobj
+990 0 obj <<
+/D [9378 0 R /XYZ 70.866 501.742 null]
+>> endobj
+9369 0 obj <<
+/D [9378 0 R /XYZ 70.866 490.577 null]
+>> endobj
+994 0 obj <<
+/D [9378 0 R /XYZ 70.866 448.298 null]
+>> endobj
+998 0 obj <<
+/D [9378 0 R /XYZ 70.866 417.426 null]
+>> endobj
+9374 0 obj <<
+/D [9378 0 R /XYZ 70.866 394.55 null]
+>> endobj
+1002 0 obj <<
+/D [9378 0 R /XYZ 70.866 372.03 null]
+>> endobj
+9373 0 obj <<
+/D [9378 0 R /XYZ 70.866 346.19 null]
+>> endobj
+1006 0 obj <<
+/D [9378 0 R /XYZ 70.866 306.155 null]
+>> endobj
+8454 0 obj <<
+/D [9378 0 R /XYZ 70.866 236.068 null]
+>> endobj
+1010 0 obj <<
+/D [9378 0 R /XYZ 70.866 225.056 null]
+>> endobj
+9381 0 obj <<
+/D [9378 0 R /XYZ 70.866 139.099 null]
+>> endobj
+1014 0 obj <<
+/D [9378 0 R /XYZ 70.866 104.676 null]
+>> endobj
+9377 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9391 0 obj <<
+/Length 2864
+/Filter /FlateDecode
+>>
+stream
+xÚí\MSI½ó+ú´!EX5U•õIÄ<f=3öx1{Ø°ç @`Å€`…‡ÿý¾ìnªéºÆ»±‡Ë ÕËÊÊ—¯K–Åe!‹Ÿö~<Ùûá(PDtŽŠ“‹ÂKœ+|Ô©âä¼ø4:øÛë'‡Çã‰öaäÄxâ´üúúãÇêGo~;øÇ»Ã÷'c¥åèuùÿ“·¿½;­ï׺þÈ»·ãßO~Þ;<Ùûמ¾,T¡µ1è0ÈXœ]ï}ú]çøåÏ…Cñµ|ëu‹"^\÷þÞb¹Ö^8¯Ó}ûãþþ/ï>´à:'$>Ÿ×á=¥.;>¬qøš¤NæØ2I/tL·üúèèíû·'ÿlÁ5pP°9p-Þîm‚ûîõÇ_Z0½¤s¸™|R¥n®Cîø§Ã“*ß¾G Ç!ÉÑÁaõãããÃãÃ÷-‡±Ž÷DÐf›}Æ’°†L”›9d©PRxÝf9%äÚV$‚z<QRÊÑ»ÙõélY§Ït5­_ÝœÝ_Ï«éj~³`SËu] ‹‰ŠÂ+S­øÇõíÓý„(ÅÂcÝËü€ÁÍVW !p*ÄéÅg)õb¾úöX!Ï •¶B™B_Oïþh5Á s€Z€I‚®ªsiu´òçM9 }ÆPWk~9v­G¨îãjMár€ª–r WO—ceG—œ £Ùª­`sÞçˆ/í,Žº_«ýýõ¾82vãíÈ9ƒóÑiò½™ÕçéZFÉ´Ž–«ùbV½"òÕ‹›‹êOþÈÕlý3ün¦çâ‹`TIJˆÆ
+åxvÁul¶œ-Îfçã 5:£æ}«^·G¦3Âsù‘QXi^æ©dëÊyä´-W"i+›Î–³éjÖ‹ŠUÔh…K1·f
+´9€™‹ (RèŽl0kÅ `!¦ WËÓÏÒJü§^᤭o?i®e‚ÏaETByŸZq>»[-o8
+ƒ@ͬ‰Ê:ÞJ
+í&ϦuÀ”I±;GIÊË}1"¾ئàUé׋Õly1=«3†åµ–á ¡y¢ Z®ÂŸ¶_Ë•?ÜŸò§®½å*›bóÑý⌓ý®‘ Ù§J‹M½ëIöÕ¹vwº¼¹_±æUý¶%'»5Të…ÃpcÁ¸,ØÏ¥J
+«•§±]©
+|¦1, 0SØ­ÁŒ°
+!´FPY߀î’n1C’ÏŠ©HkŸ‚"’×#ìFpT¥ÝÊߦFE#$¢8ƒQ‘ãÕ5Œúv;ãüzU7¡+P‰Ðar¸†À¬<5\³àD¼/ÓÏʵ-|HÜ ÛÚs9AF£ÍŠ=I¨º+½™­¦ó«uŸ}3»;[ÎoŸ%FÉDk§ºEëöŽÈÂ/çžâ0‹C•ßP­Dæ¡Ž‰ 4¬VñPÀ++… ­ûøêÝj ê²æ5yð]òã>ãÒÇZ|]þ&è.]”u_¹Â8Œ·ÒyTDAhY­Ä0ž# &s3
+í$[’~¸°5/'nþÝÃÔýß,mµ;tX#> xÇÎ
+Ä þe
+çdü“üË—û Úñpÿòœ…–—ÚÙO{ÓqGñ­ü"X(ˆnñq«ö†bæŸ#uøv™Fê|íïÛZ÷=Y"_FAg`‰*øò²p/í-þ_{cÚlMÉã†ko¼’•1öfúho
+ɦIgÑÞx-IÔW{Ë]ko ô–jŒ‹:d.¯ó }%Ð[Ù³EõÈíTy·<î`ÏHkëtØÑû\
+{[ñÖ¶îÁÕ’Th"U~{(Τö9Ä…ÿ ÚW6åÙr+´Zð·ÞˆoΨ3–Ÿ
+ÅÂcµõ—Ó×T§*¨õÞvY5ãSj#Óâå¦í2+èhÙƒ¬¾h¶¸5Yq–p]ÄÛSÜ®$±\Ë÷îLêÚŽ/L ÷øñùfŠW Þn’&«ü|ãq°Að9üžZÔOÔ,GÒágPΣ:1 UÏ,ÏåѪMyóÁqmÿššÌvØü·,ªjk ÂD—Ü€ºšOPl"ÿñ ¨6
+endstream
+endobj
+9390 0 obj <<
+/Type /Page
+/Contents 9391 0 R
+/Resources 9389 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9383 0 R 9384 0 R 9385 0 R 9386 0 R 9387 0 R 9388 0 R ]
+>> endobj
+9383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 650.876 131.163 659.567]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h) >>
+>> endobj
+9384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 567.381 266.15 577.919]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__create__affinity__mask__target_a0157f5b0bb91614c6c742ed42ae84730) >>
+>> endobj
+9385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 402.121 137.503 410.811]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 318.626 270.364 329.163]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__destroy__affinity__mask__target_ab972d7f213b6397d5869ba9fb3e7c158) >>
+>> endobj
+9387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 153.365 137.503 162.055]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 69.87 338.632 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target_aaca9ead40ba87d64900ee9ef74f85aaf) >>
+>> endobj
+9392 0 obj <<
+/D [9390 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1018 0 obj <<
+/D [9390 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9382 0 obj <<
+/D [9390 0 R /XYZ 70.866 753.477 null]
+>> endobj
+1022 0 obj <<
+/D [9390 0 R /XYZ 70.866 732.016 null]
+>> endobj
+8455 0 obj <<
+/D [9390 0 R /XYZ 70.866 643.156 null]
+>> endobj
+1026 0 obj <<
+/D [9390 0 R /XYZ 70.866 633.703 null]
+>> endobj
+9393 0 obj <<
+/D [9390 0 R /XYZ 70.866 582.594 null]
+>> endobj
+1030 0 obj <<
+/D [9390 0 R /XYZ 70.866 551.38 null]
+>> endobj
+1034 0 obj <<
+/D [9390 0 R /XYZ 70.866 502.195 null]
+>> endobj
+9394 0 obj <<
+/D [9390 0 R /XYZ 70.866 480.437 null]
+>> endobj
+1038 0 obj <<
+/D [9390 0 R /XYZ 70.866 447.021 null]
+>> endobj
+8456 0 obj <<
+/D [9390 0 R /XYZ 70.866 394.4 null]
+>> endobj
+1042 0 obj <<
+/D [9390 0 R /XYZ 70.866 384.947 null]
+>> endobj
+9395 0 obj <<
+/D [9390 0 R /XYZ 70.866 333.838 null]
+>> endobj
+1046 0 obj <<
+/D [9390 0 R /XYZ 70.866 302.624 null]
+>> endobj
+1050 0 obj <<
+/D [9390 0 R /XYZ 70.866 253.439 null]
+>> endobj
+9396 0 obj <<
+/D [9390 0 R /XYZ 70.866 231.681 null]
+>> endobj
+1054 0 obj <<
+/D [9390 0 R /XYZ 70.866 198.266 null]
+>> endobj
+8457 0 obj <<
+/D [9390 0 R /XYZ 70.866 145.644 null]
+>> endobj
+1058 0 obj <<
+/D [9390 0 R /XYZ 70.866 136.191 null]
+>> endobj
+9397 0 obj <<
+/D [9390 0 R /XYZ 70.866 85.082 null]
+>> endobj
+9389 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9407 0 obj <<
+/Length 2530
+/Filter /FlateDecode
+>>
+stream
+xÚí[[O#G~çWôÓ
+Kq¥êÔ}¤<²$™Ë2^)«™<0`ˆ5`XãÑlþý~§» ®vÛnÜÚ•ò0ƒ/Ýç;uê\¿.ËâªÅO{?Žö¾?º":§‹Ñeá¥Î>’pª]÷ +CG´ÿæäpðûèç½£ÑÞ¿÷DÈBJi¡­/ï 2ç7{—žü¹BÇP|+/½) 4âÅuñaï-àJ9!OÐ=ùñÕ«_Þ¼oÁµFràZ/” îOG£Hï„¢ˆ>ˆ Àƒãã“·'£­¢’Š‚¤Î
+¸§¼³Còaÿäíèèôxðá@ËýãêãÓ£ã£Ó£·xëB4û‡?xëªï\‡µÿëÁ‡Õ§¯ßþóÍÑÛ ütòîíêÑ°ûd6­ÏX,Àè‡%Ê刵ºPRxÝrÈ:%äRÌ¡C%¥Ü=žŸM®Çµ²ãûóÙän>¹²‚ß»d8Y Þ…XÉy=þ$%M'åÕåígóêïõd:®^ŠÕ‹ÛËê/ßr]y39o #ìJŒ¦ð†yõ´}NÔUÑ
+*IÒS¥ôõäóÀÈ}q¥¨–˜l¨`œ B1$ìî~4Õ&;¼ÞÏg_Ïç·³j{0^òñëÛó¯7ãéüìÑœV¯7çd:_1Äþ˜Àó>I+¿L¦?´™I[au,\4¥Mžd¦D ¥ƒ ª$©ø¨ ÐU¥Çå×éy½Éx׺k$\ReP‡”¤UªvíÕ«/7wmÉÈ —Åd¢ÐM;Ô2ovZér
+<?› ”}Øè5n¦#º
+T×!ü"-¼ÿú™ïºFà”Rތ˦¢|}\ó ÷˜Lã™=ܧù%×Ô™¥,ÓãÙÆ2l *,šh´¿}òŒµÂZ8¡á|ã›t
+'ÔRiÚ’ ùªv¶ƒ9ZöÊÞj6Ã:ªyÕÐh¥,ŠvLùܤ˜ÃÙa“ehqyzM8W±”3ÄUO¸›µ²„u÷Ó\/ɧ ãÅÖ.EFUÅ­\ú6UÊ¡è!„3(åùÁ5”âA É建ßX£7Ôüܧ¿ÙÎë†išÇF³‘¾4?ïðj…¶/E¢ë¸kËʤy¡eeIÒ›ž$º}iÝn'ÑyqÆ Ó—B÷•’j…B· …n×Sè=f_e˜@×ΧÊl&нïo¦Ïy¶K`7ÓçL.ö†E‰`j1ÝFž+×7³m
+ÛZO´òåc…¾€ÜëISÄ ­¡Æ )CX$KÞÔ•3'¡¥í¯B4Hf¶«gLÏü¸¯/¬AyGÝ=Ë N¸Øߥ1(Tß2¨Ð¡¿/Ç-kWÏ2Á
+­û{–ÁÜ$)lô¬Ç¾`×<‚—R¼‘óë®fcÎ'æ­0(u=³¾ª$‘±8F\ùšœûž°›ž)p¨úžDÏm49¼| ‡»Å¾|ºBs´ö¶/y¨ÁÕùYìËy9îê ž\
+×ôƒ%¢|Õ¾˜¨¸äna8)`(@ÆÉ~‘hmŽ~Qq»çþ¢8»Sœ‰5 qëÏq²$çBŽÓuá8µ…]Èeá8Y3Q9Î,Ð5Ç™@oç8s@/8Îz;Ç™ºæ8è<”4JÿÁùi ^Jê œÓ8Qšçáüú«¹àü57r~0kÎ/ÁìÂùe€®9¿zG* {@.ÇhÒ(x=èH…i,ˆº´ðªDO´XjY¬\èÂÏh×3cR ©Wi÷bÌXصÓ!¿ÌAŒ± ©UOb̽41æ¶I‘Pœ¨<¾ßsH
+•$eÃ
+5æjÌ­§Æ¼TÔ)ɱ¨Ru¶cž˜é±Rà-ô˜³9€™ ³6ÞJ±c÷‡fŽÌ›º#wdÐ_‡ÈÍöÔÕðÚñ8s
+ƒf{÷a{m%ˆ$=3—¢BN™ÝÔNÓpÉÅšTïl\
+adTFe0/i'‚NÕÜ~æPGQN:;˜˜îqOÕßÄšÏßJ»bâÖãwÚyÄÊë™'T |öãwš;,à[6”0*GÏÆ’Hé¿È©î䔲rÛÏÒ:’S,É‘íCN=þÍw!§TÉè,ä˲Át%§²@×äT½œÊ½ §èŠÄ¹=çD_æ“›qÛC
+A—Çì—UX=¥õ`œ¶ßP[Zõ”_PWiÇZ[œÄu/ ?I©§ #›ÈÿMa™ý
+endstream
+endobj
+9406 0 obj <<
+/Type /Page
+/Contents 9407 0 R
+/Resources 9405 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9399 0 R 9400 0 R 9401 0 R 9402 0 R 9403 0 R 9404 0 R ]
+>> endobj
+9399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 619.567 137.503 628.257]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 539.956 334.149 550.493]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__max__proc__target_aef330aa630f345b0ad20fb7b27814920) >>
+>> endobj
+9401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 384.524 137.503 393.214]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 304.913 293.317 315.45]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__target_a6b527c4fcc4ee24e05123a664fde1739) >>
+>> endobj
+9403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 149.481 137.503 158.171]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 69.87 304.91 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__blocktime__target_ac2568401587e2c844ce54c8dd62c6b3a) >>
+>> endobj
+9408 0 obj <<
+/D [9406 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1062 0 obj <<
+/D [9406 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1066 0 obj <<
+/D [9406 0 R /XYZ 70.866 726.988 null]
+>> endobj
+9398 0 obj <<
+/D [9406 0 R /XYZ 70.866 705.955 null]
+>> endobj
+1070 0 obj <<
+/D [9406 0 R /XYZ 70.866 661.367 null]
+>> endobj
+8458 0 obj <<
+/D [9406 0 R /XYZ 70.866 613.885 null]
+>> endobj
+1074 0 obj <<
+/D [9406 0 R /XYZ 70.866 604.454 null]
+>> endobj
+9409 0 obj <<
+/D [9406 0 R /XYZ 70.866 554.795 null]
+>> endobj
+1078 0 obj <<
+/D [9406 0 R /XYZ 70.866 526.016 null]
+>> endobj
+1082 0 obj <<
+/D [9406 0 R /XYZ 70.866 479.99 null]
+>> endobj
+9410 0 obj <<
+/D [9406 0 R /XYZ 70.866 458.957 null]
+>> endobj
+1086 0 obj <<
+/D [9406 0 R /XYZ 70.866 426.266 null]
+>> endobj
+8459 0 obj <<
+/D [9406 0 R /XYZ 70.866 378.842 null]
+>> endobj
+1090 0 obj <<
+/D [9406 0 R /XYZ 70.866 369.411 null]
+>> endobj
+9411 0 obj <<
+/D [9406 0 R /XYZ 70.866 319.752 null]
+>> endobj
+1094 0 obj <<
+/D [9406 0 R /XYZ 70.866 290.973 null]
+>> endobj
+1098 0 obj <<
+/D [9406 0 R /XYZ 70.866 244.947 null]
+>> endobj
+9412 0 obj <<
+/D [9406 0 R /XYZ 70.866 223.914 null]
+>> endobj
+1102 0 obj <<
+/D [9406 0 R /XYZ 70.866 191.223 null]
+>> endobj
+8460 0 obj <<
+/D [9406 0 R /XYZ 70.866 143.799 null]
+>> endobj
+1106 0 obj <<
+/D [9406 0 R /XYZ 70.866 134.368 null]
+>> endobj
+9413 0 obj <<
+/D [9406 0 R /XYZ 70.866 84.709 null]
+>> endobj
+9405 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9423 0 obj <<
+/Length 2250
+/Filter /FlateDecode
+>>
+stream
+xÚí[Ën7Ýû+fUH@Å’¼|è"uì6m’¦Žº(Ò.Yv…Ør*ËÚ¯ï!gÆGcy¤¡Rè&–¥Ïá}ñÞc†—/¾?øn|ð͉£Â1o ã‹ÂræŒ)¬—̈b|^¼ýðìÍøøt8’Ö ŽŒ”ƒ£—ÏÞ¾-ßzþóѯ¯Ž_‡BòÁ³øïøÅϯ‡^—®úÆ«GÃ?Æ?þ:€ç…(¤•L ñ÷Åäúàݼ8LJ?œ‘wŧøèuB/®Š·¿´—V3ÁUÂüå‹ïzõf—1-t\Ø#× î÷ÇãHAks@’…“ls«§ÏN‡š~k¶†‘¤ÐÖ3.(®vâÅk„ËÉÐ…h >8:.ß>=>9>=~_×ÖQçsRmâ§4§èž"_dM…àÌjoVCÙÆk®ð•eb8œóÁóéòlv5=¯Âxz;YÌ>.g7ó@ð›¥W6΋‘ðLS®ó|ú;çr>‹OǯŸ-ËŸW³ù´|E\—/n.ÊŸá+WՇ׳ɺ¬ê=bXI&
+ø·Àë0Eê<ðÃÚß~íŽ]Lµû4;^ ãy0O¦í“D(Š.䊊­z\úÍ]Ù` ˜â2¯¦±@Æ×'U£}ÛˆÓ4ƃ×m:‰­%`•nñØš.6öã0¯qÛ'÷à”0/…•ÈØÆ«L=G”L[JDxª½Ï—":²?M ghC)ÍËÖ Ç¥Ê©BaS)fñX˜Ã°×æ!isøF‡ñߦäõ¾W¦îmV>mˆFžyt|ýI‘ÄÒ4H…ž ©÷uuB=Æc“ø–…åè1¦yè\“FrKïqJˆ5™À}6eEÉ;Í‘ò^fèpÂJÆ˞ʊۛ²bZ»wÏŸTVŒô…ÒŠIÑWZA¾Ä•¸X+‰àñ ­„ß‘V¬&3Б˜á±”Î&mÅà”Ì«àoß0Ã&m…¢¬Øä´YÛð¦ÖÂ+¦8å
+%2˜W’a˜š9dNÌ’ßAFٹɩP&C“¡dêíÿBJg!…¼@Òé B
+ÁÌŽ›<BŠï"¤¡Ï"¤„µ¸ó]…”,Е’@?-¤ä€®…”úvyVþ%ãvöOÉ¢ýþ3yö/-lIý߶IÏ
+(ò`:õ3„ƒ³4Ý!áLB‚2H8a%sw/Nšµ„“ÐÜ(ádÀ¬$œ3I.[knYFÊå`à8ãd Úÿ¨Ã+'öEDs¡á°£jD¡“Ëat$èä\ƒTGÕÈ…pÈašp.Êf¦tP‚zFžÖ$ÿ¹T#ÔÚº8–SŽ¿‹…•ùžª‘ÿ¼ªqñ¤jdIÆSØÕS5BÏW²¦Y…‰ËX…‡bPÝÉÁÞÉ eFA8rB¤Œ6_Ê‘ðX`å™ç.Þ¬y§s
+endstream
+endobj
+9422 0 obj <<
+/Type /Page
+/Contents 9423 0 R
+/Resources 9421 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9338 0 R
+/Annots [ 9415 0 R 9416 0 R 9417 0 R 9418 0 R 9419 0 R 9420 0 R ]
+>> endobj
+9415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 628.915 137.503 637.605]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 548.376 291.99 558.913]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__library__target_a05d17e9368c6706aa54aa6c40da0953e) >>
+>> endobj
+9417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 389.662 137.503 398.352]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 309.123 311.671 319.66]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__s__target_a7463633e4f38847e69e87f6584a2fde4) >>
+>> endobj
+9419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 150.409 137.503 159.099]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 69.87 303.96 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__target_ae14c3b08f78f595a9ee68ad7140fff98) >>
+>> endobj
+9424 0 obj <<
+/D [9422 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1110 0 obj <<
+/D [9422 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1114 0 obj <<
+/D [9422 0 R /XYZ 70.866 726.251 null]
+>> endobj
+9414 0 obj <<
+/D [9422 0 R /XYZ 70.866 705.092 null]
+>> endobj
+1118 0 obj <<
+/D [9422 0 R /XYZ 70.866 672.274 null]
+>> endobj
+8461 0 obj <<
+/D [9422 0 R /XYZ 70.866 621.811 null]
+>> endobj
+1122 0 obj <<
+/D [9422 0 R /XYZ 70.866 613.192 null]
+>> endobj
+9425 0 obj <<
+/D [9422 0 R /XYZ 70.866 563.28 null]
+>> endobj
+1126 0 obj <<
+/D [9422 0 R /XYZ 70.866 533.826 null]
+>> endobj
+1130 0 obj <<
+/D [9422 0 R /XYZ 70.866 486.998 null]
+>> endobj
+9426 0 obj <<
+/D [9422 0 R /XYZ 70.866 465.839 null]
+>> endobj
+1134 0 obj <<
+/D [9422 0 R /XYZ 70.866 433.021 null]
+>> endobj
+8462 0 obj <<
+/D [9422 0 R /XYZ 70.866 382.558 null]
+>> endobj
+1138 0 obj <<
+/D [9422 0 R /XYZ 70.866 373.939 null]
+>> endobj
+9427 0 obj <<
+/D [9422 0 R /XYZ 70.866 324.027 null]
+>> endobj
+1142 0 obj <<
+/D [9422 0 R /XYZ 70.866 294.573 null]
+>> endobj
+1146 0 obj <<
+/D [9422 0 R /XYZ 70.866 247.745 null]
+>> endobj
+9428 0 obj <<
+/D [9422 0 R /XYZ 70.866 226.586 null]
+>> endobj
+1150 0 obj <<
+/D [9422 0 R /XYZ 70.866 193.768 null]
+>> endobj
+8463 0 obj <<
+/D [9422 0 R /XYZ 70.866 143.305 null]
+>> endobj
+1154 0 obj <<
+/D [9422 0 R /XYZ 70.866 134.686 null]
+>> endobj
+9429 0 obj <<
+/D [9422 0 R /XYZ 70.866 84.774 null]
+>> endobj
+9421 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9439 0 obj <<
+/Length 2527
+/Filter /FlateDecode
+>>
+stream
+xÚí[KS#G¾ó+ú´!EXåªÌ¬{À x± 3 òÁ1ã‚"&ì_¿™Ý-¤’I¨ v¾ ©»¾ì¯òùu·.n
+]ü¸óCçûÀEPÑ9,ú×…×*8WøÊ™¢U|î8…Fu{ s|´ßý½ÿÓÎAç?;†—Ð…)ŒA…Ö—ç‹Ë»Ï¿ëâŠü©Ð
+c(¾•‡Þ¼hä·ÅÙοÀqJ“OÐ9úaw÷çãO ¸–Ù×ze($¸gýHo•›Ò{ŒM ÷NŽú¿-ã‚
+tŽKà Ž)ÅÇ{g?7`’S\LŠÊbêTŸN» ;Ü ˜c³\«ŠBº­ý®aܽÓy{{|@çè¤pzØ üeugÿ úúôàðàôà„ÿëÉšÎþ¿ö>ñqÕo®Ž†ý_öÎΪ¯>|Üÿõøà¤^½ü·ôñdùê¦ñ‚
+@«.Ž,*Kø|}z>f-F+o£›Zg”ž‹Z­L·g´ÖƒÉùðvpU;x¼&Ãû‘øý!Ù9ÖtÑco‹!Vë||ÑFÃòèòôóIõ÷v8TŸÀcõáþºú+§ÜÖ?Þ /‰·$F*<o^·É‰¹&ZåBµ’öP};¼è’î¨ë¨Uu‰)a=ÄáŠð>ðÙ3Ê ¦lÿ~ô8?]NîÇÕuü㙼äë÷—OwƒÑä|F§Å—éŽ&ƒè xd?ù¢­þ:]ý³‰&´­¶p‘JN^ESb†Á ,_¨¬dâÌF7•×O£Ëj“ÑÄæ]•ã4ÔÞ0¼ï1¤æð®íî~½{hÊE^yƒ°r¸Më ™4
+thÇ! _
+h­‚59@£ˆ2)æø1’¹Ð[2`¢¡RüK@9Žoê­‹Œi¯:÷kj³/%/ƒQ̾w~Á(é±9»|W·/XA|ArPC’2Ì5s¨ÕS[ÊMš™&~2kC²’ew%qȼ—žFÚoÙÏZí@ÈÐÏÊJbK=ͼ¯žÁ¬ÕÓ,'²Q¡µ-õ4 j%3Ãg5í˜éi€w­k:’÷‘í-N8à|jÑ*IÍ)ÇI`â¥ÀÍuÇqE¶!¦ã¤b®¬;ìÖ”‡gn§Ì"ÏÍu¹¶óh’9¾ ]ÑF)“ÃÍQn¥¨
+†Ñ•RqbTýîEÜüú˜ƒn2ì-Álî^Ä%ƒ²0NÊ¢¸{‘çƒü  ž[ k7u/Š21c`v¸ÒÃ*…€‹²ó©€R ¥6øÅ:iu DyJ"òŠÚTI¢ºZ´Ù@±³Þm®ˆ†PJ½[X™ÂF® R+×é¡Èmn³º†[} 5·¢WoÄm5h·¦çŸÚ8׺fzI$³½„T*7mé%ž‘üvôNSC£ïø/®
+d¹ …áõ70+»ý Y È>[ø07ÀòÖ‰¾ö°(#>¤°/¹çÈ›æýeŠ£urzä .o½Ûô!ãY›aú•Àº¿ÕôÍÕt Ul¯¦ËJÎ…6j:<O€°‰š.75¸,jº¬åÀmª¦g®Õôz¥šžuª¦'¨¨éY°k5=ÁΣ- ™Ú…Z[Æÿkmµ4ë˜A[–§<¢¦·Ñ–Û›9Õ–3WjË0km9ÁÜD[Î
+o)±Æj%cÃ’Äê‰Õ¿ôÈ";>Ú æˆ¾J`SsVë«ËW`y|0~A_åIÉø˜Ž›)íSÌuúªãxÎ
+p¥’‚·½HÄmµ$·JßâqDx+ mgvš¹Þ¡¦Ôî|#òœhÈd P2mjæz NšKÜŽb$£€ç ö£èÐÚ.QÜ(HI~ày+¬×åo©G¾¹ …õÝ×wìÕLà¢mr4k²OÜ+R›+R¦,¢”A‘’•æŸlõ|'n¢H™R0À,Š”¬emªHe®©z¥"•uªH%¨•ps_½h1Þ š^ù#UŸÖÚyç/bjB¦‡yâ•®ã÷ÐããÓÅøþi"yñõb¼ä*ƒ™G[ĤŒ¿òêž<¼mVx–ñÕíøÖ€^nÆCx!Þ´Æ©Ø-÷´máAnE—Ào'‰ª¤ƒmo—oy"±hCHÞ°Æö¤ »«‡””FHöfÚ<sÕôF,{g€×¼[¿-¢¤WMŽl5·÷dg/,"ÿè#–
+endstream
+endobj
+9438 0 obj <<
+/Type /Page
+/Contents 9439 0 R
+/Resources 9437 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9431 0 R 9432 0 R 9433 0 R 9434 0 R 9435 0 R 9436 0 R ]
+>> endobj
+9431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 631.522 137.503 640.212]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 551.911 338.13 562.448]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target_a268e8938950a6c63eaf2b0e14f38274b) >>
+>> endobj
+9433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 384.524 137.503 393.214]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 304.913 292.815 315.45]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__target_a482c3c584cc821f6b5e53adca1c1bfd5) >>
+>> endobj
+9435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 149.481 137.503 158.171]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 69.87 240.139 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__blocktime__target_ae25cd77d11304bb12294a3cfa460f868) >>
+>> endobj
+9440 0 obj <<
+/D [9438 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1158 0 obj <<
+/D [9438 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1162 0 obj <<
+/D [9438 0 R /XYZ 70.866 726.988 null]
+>> endobj
+9430 0 obj <<
+/D [9438 0 R /XYZ 70.866 705.955 null]
+>> endobj
+1166 0 obj <<
+/D [9438 0 R /XYZ 70.866 673.264 null]
+>> endobj
+8464 0 obj <<
+/D [9438 0 R /XYZ 70.866 625.84 null]
+>> endobj
+1170 0 obj <<
+/D [9438 0 R /XYZ 70.866 616.409 null]
+>> endobj
+9441 0 obj <<
+/D [9438 0 R /XYZ 70.866 566.75 null]
+>> endobj
+1174 0 obj <<
+/D [9438 0 R /XYZ 70.866 537.971 null]
+>> endobj
+1178 0 obj <<
+/D [9438 0 R /XYZ 70.866 491.945 null]
+>> endobj
+9442 0 obj <<
+/D [9438 0 R /XYZ 70.866 470.912 null]
+>> endobj
+1182 0 obj <<
+/D [9438 0 R /XYZ 70.866 426.324 null]
+>> endobj
+8465 0 obj <<
+/D [9438 0 R /XYZ 70.866 378.842 null]
+>> endobj
+1186 0 obj <<
+/D [9438 0 R /XYZ 70.866 369.411 null]
+>> endobj
+9443 0 obj <<
+/D [9438 0 R /XYZ 70.866 319.752 null]
+>> endobj
+1190 0 obj <<
+/D [9438 0 R /XYZ 70.866 290.973 null]
+>> endobj
+1194 0 obj <<
+/D [9438 0 R /XYZ 70.866 244.947 null]
+>> endobj
+9444 0 obj <<
+/D [9438 0 R /XYZ 70.866 223.914 null]
+>> endobj
+1198 0 obj <<
+/D [9438 0 R /XYZ 70.866 191.223 null]
+>> endobj
+8466 0 obj <<
+/D [9438 0 R /XYZ 70.866 143.799 null]
+>> endobj
+1202 0 obj <<
+/D [9438 0 R /XYZ 70.866 134.368 null]
+>> endobj
+9445 0 obj <<
+/D [9438 0 R /XYZ 70.866 84.709 null]
+>> endobj
+9437 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9456 0 obj <<
+/Length 2312
+/Filter /FlateDecode
+>>
+stream
+xÚí[Mo9½ûWôi!#Éâ§=d{&³I&k{NÉYv„ÈRV–Ì¿ßGv·Ýlµä¶Ä0‡Ä²ZÍW,ÖÇ«§6/n
+^üzôËåÑÏgŽ
+Ǽ1T\^–3gLa½dF—WÅûÁÉo/Þ]žžGÒºaÑ‘rpòúÅÅEùÖË?Nþ|súör($¼ˆÿ_¾úãíPhcðyRÕ-o^ ÿºüýèôòèGø¼…4†å" ã¾˜Ü½ÿ‹W¸ø{ÁyW|½-`‘Ç‹yqqôßË¥ñŒÈ%¦¿~õËññÞ¼ÛÄ%n™U>. Îù÷âô²R:¦„ÉI‚ žžÒËÓ³¡ þ×|ðçë¡8…‹#,NDR#¬g\PbDç¿bÿ16^½EäT†œœ–oŸŸžžŸ¾Å¯ÖèsRí²OibZу‰¼Ôš
+œ‹ÕÞ4£ÚÆk[ább8œóÁËéz<›O¯ªˆžÞMV³/ëÙr üùLéÆÆy1ž œdéøéÎåb?o¯ËŸóÙbZ¾’Þ–/–×åÏp˼ºx;›lºAÀ«Þ«Â*ÉàŸuN‰¹Âkf\XI0+ÑèùìãPñ»öœ•[L6R1'\1’žií.“•ËN–‹»õê~²^®Ê}üëÁyÉÛ/—“ûÛéb=~t§¦wV–ÝÝ\ DËûué>§¶xˆ4ŽßÆSöyJ 䘤r!iŃƒŽ?ß~éÀµ„Še2à†T$âÞM×Î3äÞáˆ*-|ŠøqˆR1_N‚Ó?¯g·ÓŽ"nT$Yl™RÖãzÅà&ÄÕ`ºÞâvé,!ƒ ¾Üítâ„J™‘¸A¡TÏö:)ÇÙ h”?iwz½L´\óáH7˜-ÖÓêÚêñÚçÙâêß¹¨4
+«Ì ¡¦[Ñ:ØpQÖ¬ÕhÔ ëuniÓÌP
+ù~f&¸Ê£døvÿýe¡ê¨r#%-Ã?;”amvÖôrl Û½+ž…qi¬-y¢\‰êÊ»ÛÍ(T}Ý,g<Tæ}ìLd6¤@ÓÎEHûÛp™év6yÜU›û<Ç2#eÇB#äž>®*ÂFýƒ|ˆ÷Ç•’†?’Ü)íªß–¤#៤„•d7EÁ†8<jU '¨6ãüTx•ÐŒøÖu œ5 YšÝ•¯B@¬âµñ¤ºùkèquýfº@¤ ^Æëš^¯–·õ2Óæâóù2Üúu¶¸iúì8úª&¤…`Ýs$9B«*¤ÔɇJ®n*מã¶÷#­Íσ«I„†¡ðÓây8Ó«r%^½†ï#Kšˆb`ŪƸEQA°Â>°DUqÄ-Ä Uû@àä.Û çM9Ö0 ”Dëm\‹”|’»9ì˸4ºÝÉ$$‹£Må@•‚pt2E½š^ïçë»®ñZÛf‚6à#èÍ ô&S_Ì°‡ì:Ÿ^cù.&ÓîiÃ[&Ñ‘GaꨃðÝ}I’Cq™7ÓXóãë³ûÅ$$ú]+<ÓЇmÓim#ïª, cG5r”W;²1
+Ž º©öÜ8¦ºu7®¶b] å° IÓ:‚Èíç?U]`‹ „Ý“ÃBâ‘nù¥Á|4¯mižÔ##h%˜Äð¯œÞçÕ÷R@( {‘ Í%s^f a%ãå
+ˆúf
+ˆéV@h{#ž|˜¾`“8T!âuß­€XçràZ°^ÛÞ*x+s`½ÒÈsGÅܦ­É
+GÌ[©°s\4$ú+8v¾gü¤Ê‡Sa¶N=º[øá8U%|èC„…qC™Aø+q#¿‘ð±—ÂGbç3…Iøø§ñj<Y÷R>ÀÁ˜þáNFÒ0Áuj|mMðtÍ\fèŠwè‰1ûân„*|˜oÊom‚ê¬ÕN[VÌ;±©ˆ$ÞÔ±Éðͳé>‚½OÈ+4J®ž/°ìÏ”$&”ÉÀ””±ÿ#±ô•XÈ fAb!¸Ùq“GbÑ}$ÒèáÎg‘XÂZAÅè)±d®$–z§Ä’µ–XÚ^¡ü‡Êÿw<Ú!ÈFxÅ}{Ó«ÙxÞU´Ñ'ðY€Aø´×)p}™3ý®ïÄ¡\P}'¬$ÐìžÖw2`VúN‚â9àHr;c]Ü Zn€ä„M›ö¦C6éAwX#^fléP>]Š½§¾d}lŒ»3d[Fõ”˜0:ŸÃ5„yT»–k9æv-IƒeJ¹!Œèï¦% Ú“GICp|Ž/ªÂJᩯô$ýݵ$AÛµ$‡p’„Ú¨G,ÍË•¬Q}Ä$/ràZŒÄ)jwaÅ!ñ ‡#†æëÔÆNwÅȱ]‰‘@ ÑÞðš 0ÛDf€Õ`ØƦ°=E,$<Á
+B®Ñ=›À.¦p1üs›”aΙàÊG²×a“¥ø]_X¤”$¹ó°ËšRêgFÚ¶~&žxpÈ"0³¸H9fÛEÛ•‘¤K"U¥žx‚$‚„&huûë;AÕa¡ò)ܧe4 NÎå~Ï´íÜ ÁïeöFÅ#®R»³Égá1C¡D÷J2á!¿Ä̆zÖ¡üXf­~òÁfÑôŸ¯üìÍX„ÃÜæ)c +¯ú)?â•~²*?B P8™Aù +i¬˜Eù1}”!,㤳(?`“È&ÓWùÉ])? ôNå'j­ü´7ÜCùÉ_)? |¦lœe³ä‡`Àl¸É ¿Xô#z¨/VÚK°¿ôr(z-¼4Ñ÷Ô>4¦{0îƒ-ÂA:ЭĢ¾ÏÖPŒ²CM ®£
+ß4¡óÁšÛåÕ´f¾êú[¥°'ùœ¿T*s_7¾ê
+:®ÑáÙ
+endstream
+endobj
+9455 0 obj <<
+/Type /Page
+/Contents 9456 0 R
+/Resources 9454 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9448 0 R 9449 0 R 9450 0 R 9451 0 R 9452 0 R 9453 0 R ]
+>> endobj
+9448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 628.915 137.503 637.605]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 548.376 233.764 558.913]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__defaults__target_a24783d30ed1260f536e15c306c87f647) >>
+>> endobj
+9450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 389.662 137.503 398.352]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 309.123 252.001 319.66]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__serial__target_ac46a1e2c0f8c3df898613829837c749c) >>
+>> endobj
+9452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 150.409 137.503 159.099]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 69.87 227.218 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__target_a88b7feb957aca964ff72aa220f5bfa04) >>
+>> endobj
+9457 0 obj <<
+/D [9455 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1206 0 obj <<
+/D [9455 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1210 0 obj <<
+/D [9455 0 R /XYZ 70.866 726.251 null]
+>> endobj
+9447 0 obj <<
+/D [9455 0 R /XYZ 70.866 705.092 null]
+>> endobj
+1214 0 obj <<
+/D [9455 0 R /XYZ 70.866 672.274 null]
+>> endobj
+8467 0 obj <<
+/D [9455 0 R /XYZ 70.866 621.811 null]
+>> endobj
+1218 0 obj <<
+/D [9455 0 R /XYZ 70.866 613.192 null]
+>> endobj
+9458 0 obj <<
+/D [9455 0 R /XYZ 70.866 563.28 null]
+>> endobj
+1222 0 obj <<
+/D [9455 0 R /XYZ 70.866 533.826 null]
+>> endobj
+1226 0 obj <<
+/D [9455 0 R /XYZ 70.866 486.998 null]
+>> endobj
+9459 0 obj <<
+/D [9455 0 R /XYZ 70.866 465.839 null]
+>> endobj
+1230 0 obj <<
+/D [9455 0 R /XYZ 70.866 433.021 null]
+>> endobj
+8468 0 obj <<
+/D [9455 0 R /XYZ 70.866 382.558 null]
+>> endobj
+1234 0 obj <<
+/D [9455 0 R /XYZ 70.866 373.939 null]
+>> endobj
+9460 0 obj <<
+/D [9455 0 R /XYZ 70.866 324.027 null]
+>> endobj
+1238 0 obj <<
+/D [9455 0 R /XYZ 70.866 294.573 null]
+>> endobj
+1242 0 obj <<
+/D [9455 0 R /XYZ 70.866 247.745 null]
+>> endobj
+9461 0 obj <<
+/D [9455 0 R /XYZ 70.866 226.586 null]
+>> endobj
+1246 0 obj <<
+/D [9455 0 R /XYZ 70.866 193.768 null]
+>> endobj
+8469 0 obj <<
+/D [9455 0 R /XYZ 70.866 143.305 null]
+>> endobj
+1250 0 obj <<
+/D [9455 0 R /XYZ 70.866 134.686 null]
+>> endobj
+9462 0 obj <<
+/D [9455 0 R /XYZ 70.866 84.774 null]
+>> endobj
+9454 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9472 0 obj <<
+/Length 2258
+/Filter /FlateDecode
+>>
+stream
+xÚí[ËnI¼ë+ú´ aMUÖ[À<²d{füXš>,ì9Ð%–(/E˜ýúê‡ÔÕjRMviv ìÅ¢Õ쌬¨Ì쨠ȳˌg/Ž~™ý|ædæ˜7Ff“‹ÌræŒÉ¬'fD69Ï> “– G†hðúÕÉðɯG§“£ „à™È„Lj›ßã¸Ïf×GÿàÙ9.þšq&½Ë¾ço½ÎÔãÅUöþè-àBÆ•ÐõËñño¯ßµàjÅ”v)pµeB¹÷ýé¤Òj&H§€´–9¡›K?5üó!4²"4‰ðZDГ—ã!ñÁÛ/^¾ûвprÄ´5)ÐfÔ¨°ÉP
+Ù0k,âµ.éašæ $#TeÚ§AçŸßæ9îO-³m¤8χÅH`øjs·¬ÅÅã`;ÅaÎiBöN "uÏAG¢ˆ$«y»“c…Æïʱp‚Ñ–g c¥ó\»¹þ ÊL;ÙÒã®*Ýý8&ÑæBoŽÃÜp‚ãøúæ|Þ²0‚Â]å›î#Eù´"ª3zš>­81†ÀO NB$j—&X§64az—2õK™ày$/ò_]ZÉõ—Åmñ*”Ä*¿6•7%=-¯_Η¨TÌt] Á‹ÕÍuf^~uuný¾X^Ö9;骄h&˜Ãaœ *ÇÅ'"½©`tuYR;ÆmGZ›-ÌC£Š“?]æA¦WE$^ ¼÷Q’…<Ä ya…¹†°6IŬ°÷gÓRnl"Ÿ…{®ñÌØ‘»Ä~Ë]VK EëmK*zT³9</\"hﴄ èv ÍâÎ'A%콡 Þ¥Üp&—Ò¤×xtpï¿”Jýò˷ͺMÇX¦MšõKB¹Æ 4¥L~^ÍÛü®ÅÇó‹aþ˜/góÖ£Žó4Š9yªNx·ùn»B!ça^ÏóGOþúl³œ…isÛ葸¿BÅÙø¨ø ùËVgžò¼S\m ¸½¶µe†£¶5ž]Æö ‚|I»ë@bÃ9‚R`ZÍ”£3Ôu>ˆƒm¯mè*UÝ?âsÞÄ  ²·V5)ì,) •ÇÛEzºº,)¯UI%`jWãVã‚Q
+:$èðº‘R¸è³ŸÊGᶰœ /$ž7ˆ¹€÷
+¨ÙÉ]rªiZØ¿Ìç!{ ”Òœ ò(”
+‘Œ§ž>}2ŸÇlóyìŸ+Uxœ‘èmôÈ"¶“уGNààôàpowzȦÀ î0Èn.ö1«G«à¹×SRwþ˜\ pº)ЭbªÝÉg’ÁÍà)Ø—dÐζÎKS
+L%!7Å>;.A¹>8šÅq·ßŽ+Âœ·)Z;øPÆè›^̘ÊéR±E4¥–5¾tkôÝy{»7ƒ§%Wh2œ‡ÈPŸvå8ÐÈ"7”Ú›QPâ–Ë3Ö<å¹ÓC'à!x /ƒæð¡>{óKhÃýñ>HSáÕ›_rŽ ©ã<kÞW‹íe™µúQwHkTª:À:XÒ(<š£¿¤QÁÇVöÿþPgÇ
+tNàIÐì¸Iã¹.þÔ†‘óIü¡+X0ý¡$Ð¥?Aïô‡R VþPsÁü¡$ð¥?Á¯7«å´T
+[­¨îöÊ&è-…Su|]|ôãìy åþIIÔ¶m$ÕÝ%ò”‚©Ã_-5¨éèYM,÷×¹Dü@IE*V¦øÀ-DRÒ÷t‰ÜÿœKDB!–Jà…HÖ¨n.¥
+‘4"&q‰|—H›Ö›Â%
+ßuqÒtu‰’@—.Q½Ó%JZ¹D1êz: O߯·‹³«Mu…¦Ñi’À™>ü=cœDÛ¸D(-Ò`:Ì¿<ÿf"{(„üñý!(3n¸C(gDs¨7`i E€õRÆÖ¶U²(¿=ÕžDùÝ©:|ûi Å×.|‚YY‡;Ì
+ǧ`¡eL@Wˆ(Ÿ»}SJ &¥¦‚4¯©Ê¡Ò=w|µ}õ áhŸ/žóFg>ÌVS}éÃèðÇ̘²{•j"ÿèk
+endstream
+endobj
+9471 0 obj <<
+/Type /Page
+/Contents 9472 0 R
+/Resources 9470 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9464 0 R 9465 0 R 9466 0 R 9467 0 R 9468 0 R 9469 0 R ]
+>> endobj
+9464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 628.915 137.503 637.605]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 548.376 273.313 558.913]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__throughput__target_a5f1b56f724b16bf1acc940a1b5953de2) >>
+>> endobj
+9466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 389.662 137.503 398.352]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 309.123 274.031 319.66]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__turnaround__target_a5ffe8181ca3f0c53bae12ae534b0e47a) >>
+>> endobj
+9468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 150.409 137.503 159.099]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 69.87 246.9 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__s__target_abd85a5be6121aea82a160eab798c47b4) >>
+>> endobj
+9473 0 obj <<
+/D [9471 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1254 0 obj <<
+/D [9471 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1258 0 obj <<
+/D [9471 0 R /XYZ 70.866 726.251 null]
+>> endobj
+9463 0 obj <<
+/D [9471 0 R /XYZ 70.866 705.092 null]
+>> endobj
+1262 0 obj <<
+/D [9471 0 R /XYZ 70.866 672.274 null]
+>> endobj
+8470 0 obj <<
+/D [9471 0 R /XYZ 70.866 621.811 null]
+>> endobj
+1266 0 obj <<
+/D [9471 0 R /XYZ 70.866 613.192 null]
+>> endobj
+9474 0 obj <<
+/D [9471 0 R /XYZ 70.866 563.28 null]
+>> endobj
+1270 0 obj <<
+/D [9471 0 R /XYZ 70.866 533.826 null]
+>> endobj
+1274 0 obj <<
+/D [9471 0 R /XYZ 70.866 486.998 null]
+>> endobj
+9475 0 obj <<
+/D [9471 0 R /XYZ 70.866 465.839 null]
+>> endobj
+1278 0 obj <<
+/D [9471 0 R /XYZ 70.866 433.021 null]
+>> endobj
+8585 0 obj <<
+/D [9471 0 R /XYZ 70.866 382.558 null]
+>> endobj
+1282 0 obj <<
+/D [9471 0 R /XYZ 70.866 373.939 null]
+>> endobj
+9476 0 obj <<
+/D [9471 0 R /XYZ 70.866 324.027 null]
+>> endobj
+1286 0 obj <<
+/D [9471 0 R /XYZ 70.866 294.573 null]
+>> endobj
+1290 0 obj <<
+/D [9471 0 R /XYZ 70.866 247.745 null]
+>> endobj
+9477 0 obj <<
+/D [9471 0 R /XYZ 70.866 226.586 null]
+>> endobj
+1294 0 obj <<
+/D [9471 0 R /XYZ 70.866 193.768 null]
+>> endobj
+8586 0 obj <<
+/D [9471 0 R /XYZ 70.866 143.305 null]
+>> endobj
+1298 0 obj <<
+/D [9471 0 R /XYZ 70.866 134.686 null]
+>> endobj
+9478 0 obj <<
+/D [9471 0 R /XYZ 70.866 84.774 null]
+>> endobj
+9470 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9488 0 obj <<
+/Length 2486
+/Filter /FlateDecode
+>>
+stream
+xÚí[Mo9½ûW4°ÀBF’ÅOcwŒcÏzfœÉÚÞË&sPdÙ"KIF0ûë÷‘Ý-‹íÖ‡%Æ{™K¬¨»ùŠÅªâ«×/î
+^üxôÃõÑ÷gŽ
+Ǽ1T\ß–3gLa½dF×7ŇÎÉ?ß¼¿>½ìö¤uú=#eçä—7WWåWo=ù÷Åé»ë®¼ó&þ{}þë»®ðžã~Å«G.ÎOº¿]ÿttz}ôû‘
+YûŸxçäç«óÿœ¶X` #I9,°žqA‰•—?bò10Îß!lꮶê´üúòôìôòôÝI‹uô9ÇœT›ìSš˜V´4‘¯F´¦Bpfµ7«!mãµ­ðƒg¢ÛœóÎÛá¢?oªpγÑÃb4¿?Szeâ¼è ÏÈVã¼~ä\NFñîøxQþ&Ãò“t¢ü0½-ÿ†GÆÕÅûÑ๼ê½*¬̽p™k…×̸r ÜM>uï°[ÄŒLÝÕˆS'\Ñ#`q¿â0Y9ìd:™/fƒÅtVÎâ¯K×%_¿EÿÉ™šÖ;sþøiÖEMÑyó5þ!Í<RÝÀOR¼Ì?‰‚3RǸXúçøøËýC ¬UŒe€EZI ì|¸h $›1D·)â¢?îþ2ý7,lgØRž‰˜”îpdX2áRZð¨J‰ xJ1A"Á[ôg]¡;wådkVYzì ”cʃtÛW™}BÊÃI ® ùâU&S‘#°IknڶʄRL*Cþ’ i6­rYF>rÍÁB´îŒº¢3Y «Ë³pÙÅË_F“›¿·^a]†ÕQÆ1eÓÕMÀemÄPOw÷È[f¸A‰ÌkÝ>¹gÖ"æ¤Až;­^fm‚ïñQ—ñ%úÈü]K1—†a_ÈõÄV|\îzë},œPû™ý¬ÐW©Ýë½,ÀOI×Foõ®$T•Pžv¯$ÃÀ¨3']À>Þ‚ÇL»±[ÚÏÅ„Ê*Á>w1)H®÷sqR…š„¼¢¾ói¸„Òôù ¼®¨ÃkÐ0cÀ ÊÀÃÂHÆév"†qÏœU‚1¡eE«?W6Þ$l*~uxuͶŸGóòSˆŒY¼ÖT ݯ®ß '¬BQ³ÞÛÙô¾f¸:øx< ~MîVÝvÝU³î<d¼'9Ó¢šÞG)urSéÔÙ]åÝK<ö¡§µYã|â"âÖâ|xÓ«r$Ž‘šÎOŒ,Ù0a7… ´a§™BQ‘aÅ+*¼†Ÿ¢d£Ñ «7gɶb@àºÖÛ8–®cbGu –.4Óèt+ƒ‘X,ŽN%ª(/F6Pwáª6ÔÇ "ƒ#ž1‹ØäÆ\[æÙåð¶+òp2¶¶W’kp‰š‰:YÞ?~
+Mq˜‹aÜâç³ÇÉ ¤ü¼¨i‡e·i?õ,«| }VÕc•W[ò2
+Ä[;“l„‘È™ÃT¸ì•UéÜzÕG‡y!<<7Ê>Ò–#Yn¶ë>‡ŠÀA€µ"n/y舜Ñ90㦘;i?Û¤É`B´1© ;ª1NÃc”ê
+íà{â³0щ2©ìË}OJÁc.‡ Ê‚G»¾/“®ÔH°Ë5;K·E ‚ö9Ü¥4ªk¸kcg©Á²wmÞUpä~v&ÀÊ+Œ >Ý$Ž (•ªDÍy¡H²ý±"ìmúÐò'ÊQΫ‘ˆ (·—™)®ëC‡Ÿ˜ùM5Ä^bö° Õ[Èý<|¸D"ÁÑâóÅÉþ¬ÔM»¤‘*$»+$äPePHÂHV¨C»$Žb…„”gØ?²($a¬°Ùî¨d®’úqÒ®‘ ßwÆfÁ•EN¥°ýÛ*Áÿh—F¹<Øáå%j[~ߟi±¥¹ÈKB¡–5æüPv­rw ¯yÑKÚ«È™´  3…܉Zú?hAqƒÎ6ò]º\ÖqH™Ñ 0ÚÇ‘¬‘é®XÔjz{èRRŠ¸‡›)eàÞ”š¹.©Á}Ñ€ ¨ˆ. î‘ nÎiÃDž [‡ÊÔ˜ðšŒæœ9)2€†XZˆôaÖšËXZå\P,­°.ÝO| g©¸Ê‘÷ž›µ›ø¦$åp’¬ášVñ-.Ò“i!PÖêpå
+0c¹+Äÿµ.šä.êó‡[ƒÆ8Ê؉9ëÙdš ªp`l
+¡\
+»Î·Ž)³|KT×þg4ˆy!·éêBzæ´{Í.D‰­PdèBÂHB‹?•õ(z¬Ê ¬‡‘”Öy”õº¼(Kñüs<®ÓþdÜŸÏ×Êx¬ðát©ú?Iñ…Wù/£É`üxSß*VîÔĬ_–§¿µ v¡–/¦¦··ãiÿ¦ý'4…Õ†ßbmyÃæ]ó) °–9ÒõÏ»"î`z?°Ï-S
+endstream
+endobj
+9487 0 obj <<
+/Type /Page
+/Contents 9488 0 R
+/Resources 9486 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9480 0 R 9481 0 R 9482 0 R 9483 0 R 9484 0 R ]
+>> endobj
+9480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 626.874 137.503 635.564]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 545.075 239.189 555.612]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__target_a6b00b50e1d9d6b3a313c5539b6fc76ff) >>
+>> endobj
+9482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 383.57 137.503 392.26]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 301.771 348.101 312.308]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target_aec63603ecffb751b4276bdddd5b91568) >>
+>> endobj
+9484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 128.311 137.503 137.001]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9489 0 obj <<
+/D [9487 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1302 0 obj <<
+/D [9487 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1306 0 obj <<
+/D [9487 0 R /XYZ 70.866 725.377 null]
+>> endobj
+9479 0 obj <<
+/D [9487 0 R /XYZ 70.866 703.963 null]
+>> endobj
+1310 0 obj <<
+/D [9487 0 R /XYZ 70.866 670.891 null]
+>> endobj
+8587 0 obj <<
+/D [9487 0 R /XYZ 70.866 619.507 null]
+>> endobj
+1314 0 obj <<
+/D [9487 0 R /XYZ 70.866 610.533 null]
+>> endobj
+9490 0 obj <<
+/D [9487 0 R /XYZ 70.866 560.11 null]
+>> endobj
+1318 0 obj <<
+/D [9487 0 R /XYZ 70.866 529.906 null]
+>> endobj
+1322 0 obj <<
+/D [9487 0 R /XYZ 70.866 482.073 null]
+>> endobj
+9491 0 obj <<
+/D [9487 0 R /XYZ 70.866 460.659 null]
+>> endobj
+1326 0 obj <<
+/D [9487 0 R /XYZ 70.866 427.587 null]
+>> endobj
+8588 0 obj <<
+/D [9487 0 R /XYZ 70.866 376.203 null]
+>> endobj
+1330 0 obj <<
+/D [9487 0 R /XYZ 70.866 367.229 null]
+>> endobj
+9492 0 obj <<
+/D [9487 0 R /XYZ 70.866 316.806 null]
+>> endobj
+1334 0 obj <<
+/D [9487 0 R /XYZ 70.866 286.602 null]
+>> endobj
+1338 0 obj <<
+/D [9487 0 R /XYZ 70.866 238.769 null]
+>> endobj
+9493 0 obj <<
+/D [9487 0 R /XYZ 70.866 217.355 null]
+>> endobj
+1342 0 obj <<
+/D [9487 0 R /XYZ 70.866 172.327 null]
+>> endobj
+8589 0 obj <<
+/D [9487 0 R /XYZ 70.866 120.944 null]
+>> endobj
+1346 0 obj <<
+/D [9487 0 R /XYZ 70.866 111.97 null]
+>> endobj
+9486 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9508 0 obj <<
+/Length 2284
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[KsÛ8¾ûWð´%U ÇܼŽ=³Sq’u<§LŠLÛª²¥¬MÏÖì¯ßH)¢ Ê”§æ%ƒýH7…,~9úçåÑ›3‡…Þ,.¯ +…3¦°„QÅåUñyd„1ž€Ñùñŧ_ß½;½OÀºÑÉ»ãOŸêÇ‹Ó³Ó‹Ó÷'§ã‰ðztòëñÇËÕBÓØxá퇓ßÏOß_ŽÈÑqüÿò_Þ¿\þvtzyôŸ#Å"ÊB­ErN8ÐÅìþèóY\ñß~+¤@ïŠÿÆ•÷…&¤‘ŸïŠOGÿ>’›jJ
+KÞlêi”+E?>}+9º›Ïj ÏËû¯åCý|ö´˜Uóåâ1Ê·"üæLÓ†ñ”ÖÙb¢¼0²!ú
+\A•l+ú¢[9ª4阳ì bodÈÙèצźæ–9ÕÕiv˜ÉÁ”ÐÁ´™~«†á7¡çØ3žRnD}œÉÉl¥¤ɉ œ4;i¸¶*Sc">·˜¾‚3;^Á”C·çÆIhJ9;‘{*×úñ!øEŽ¦UYËt\Uóº5¨Êá3ãëk¥_ì%9*”'6)06Ç4O®¦Êïl뿧OÀÝ[¯tzÍ‘«· k‰&‡˜’A›N‰Ã ´Ï`ó¢Â ÃƘ‚ˆР!ƒË-RMIÒ®!ccœã¾I¾Â8—Þ‘`ŒUä
+M§Îß’pº¦’°[Õg
+à1*¬Ž¯OWÝÊ|Ñ@¢¬–×ãŽ%Ü•«ïBZ-§‰n$1[Wh¯„tCjHN
+”dÜiˆ¢Ï–÷÷Ë…¸iÔæÅzh¬f7¬ÕNBAyxšUËfÇïkûµ¾~»œ=Ý—‹júÝ¢„Ý=g$bŸ6{?ÿÜþ<^×3–B)}/;\Ê¿#—àÙuÝå~ž/‚?¾$:Y-Ý߯Úó+°7í÷¬ýʔ̪[>Ô¯Øø5µ‰{'S÷¶woÓQr'È:Nô-[Dî9Q´¤RNE
+””ô[EI¥1¤áb”;H/¸„¶˜ØŠj§£¹½´ØA Û+®g‰x@\3(®‘Ç1+]†¸”HºD\×ië´ š8¾(›¢[.f+8žþ«~þ°>b<ÛœF ôˇÓê6ÜœxnNÇRC†/ÐìWSâ!w¥Ó· ð_AÆåS" ¯ÍÂßñäa¶ø7{Üxl&üéâê%c=ΦU•²–æYDê Âj´¹È'm5_$›°_«rpæ-dK§™Dø&蹫Bâ¤ã/½nà’n¬7ª nÏfæÕV½pr_"–Ó_kœ<¸ ÖýpSq‡*smÎõ¼rµ´j›{už[éíñ²jëòÀyŽ È€š’Ñø7@M°V… ¨(¡Å=Q3ÿ5[ü_5‡ Û fÒV»P3ç5;ÍÔ5³t Ã>–ËÐ5J¡áÚqêîÃÊ,<=ƲÐâùcšÅÀͨGzê×[›õ˜’µ}zE•†=käöÂó°GV lQÊAJG
+Ú¼í~ÂÃݦx=#
+¡Í6çÿ²æB
+endstream
+endobj
+9507 0 obj <<
+/Type /Page
+/Contents 9508 0 R
+/Resources 9506 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9485 0 R 9494 0 R 9495 0 R 9496 0 R 9497 0 R 9498 0 R 9499 0 R 9500 0 R 9501 0 R 9502 0 R 9503 0 R 9504 0 R 9505 0 R ]
+>> endobj
+9485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 738.594 138.614 749.006]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_aa841b002d6a0f7501807a57a01557e23) >>
+>> endobj
+9494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 724.887 178.343 735.424]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a1ac00e7b78e2b8bb5739dbcdd6c4cd11) >>
+>> endobj
+9495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 711.305 183.37 721.843]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_ac638dc2d74c9c10450a222b96a3350f7) >>
+>> endobj
+9496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 697.724 192.851 708.261]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a86d2ac7c885c517c9354259d046eee0a) >>
+>> endobj
+9497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 684.142 152.646 694.679]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a180cdc384d039822e9778fd5179378e3) >>
+>> endobj
+9498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 670.56 155.596 681.097]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a9ff94af3351343dc25f88cdaefe0d48b) >>
+>> endobj
+9499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 656.978 164.832 667.516]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a829fcde053d621a1143cd15aa6ea3a58) >>
+>> endobj
+9500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 643.522 168.786 653.934]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a25aba8a9694d1310f43fab1e5816d564) >>
+>> endobj
+9501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 629.94 178.021 640.352]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a9843fe55f643f3f69a8fb58b4924e88b) >>
+>> endobj
+9502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 581.074 167.679 589.765]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_adfdfea9e962b133e105a818e60f6f2cc) >>
+>> endobj
+9503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 565.771 160.344 576.183]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a521243d6d60b1a9e086cffdb1c714ebc) >>
+>> endobj
+9504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 552.064 177.16 562.601]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a63ca1389147216df9983c745ff1b1824) >>
+>> endobj
+9505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 538.482 162.653 549.019]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller_a9bd4683935af5bacf1803869cf6ff8e6) >>
+>> endobj
+9509 0 obj <<
+/D [9507 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9510 0 obj <<
+/D [9507 0 R /XYZ 70.866 753.623 null]
+>> endobj
+9511 0 obj <<
+/D [9507 0 R /XYZ 70.866 594.381 null]
+>> endobj
+1350 0 obj <<
+/D [9507 0 R /XYZ 70.866 522.755 null]
+>> endobj
+1354 0 obj <<
+/D [9507 0 R /XYZ 70.866 474.014 null]
+>> endobj
+9512 0 obj <<
+/D [9507 0 R /XYZ 70.866 452.369 null]
+>> endobj
+1358 0 obj <<
+/D [9507 0 R /XYZ 70.866 431.08 null]
+>> endobj
+1362 0 obj <<
+/D [9507 0 R /XYZ 70.866 403.825 null]
+>> endobj
+9513 0 obj <<
+/D [9507 0 R /XYZ 70.866 382.181 null]
+>> endobj
+1366 0 obj <<
+/D [9507 0 R /XYZ 70.866 360.833 null]
+>> endobj
+9514 0 obj <<
+/D [9507 0 R /XYZ 70.866 336.243 null]
+>> endobj
+1370 0 obj <<
+/D [9507 0 R /XYZ 70.866 299.968 null]
+>> endobj
+9515 0 obj <<
+/D [9507 0 R /XYZ 70.866 275.378 null]
+>> endobj
+1374 0 obj <<
+/D [9507 0 R /XYZ 70.866 239.102 null]
+>> endobj
+9516 0 obj <<
+/D [9507 0 R /XYZ 70.866 202.633 null]
+>> endobj
+1378 0 obj <<
+/D [9507 0 R /XYZ 70.866 166.282 null]
+>> endobj
+9517 0 obj <<
+/D [9507 0 R /XYZ 70.866 129.813 null]
+>> endobj
+1382 0 obj <<
+/D [9507 0 R /XYZ 70.866 93.461 null]
+>> endobj
+9518 0 obj <<
+/D [9507 0 R /XYZ 70.866 68.947 null]
+>> endobj
+9506 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F97 8866 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9540 0 obj <<
+/Length 2323
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[oÛÊ~÷¯ P €£={¿E7vN{P'©ã>9yP$Ê S®D'8ýõýv—”Iyu3Ù qy9óíìÌ7—¥iv—Ñì·³¿ÝœýúΊÌ§µÈnf™¡ÄjljfÙÍ4»¼ýûùÇ›Ëëáˆ;Ðd8ÒœÞþóüÓ§øÕŇ·ÿ¾º|3dœÎÃÏ›|x?1Á¬ÄRT]]^]Ÿ¿ÿí2>×q}ùîòúòýÛËá—›ßÏ.oÎþsÆ
+Úmf$'Ü°Ó,ßÂΩ…×DIÔð}²|xXdòø8j@¼~ìsb¥ß$#v +¯ó™?‰|•“¼òدCÄÝñó‡zùz‚…'ÏË%üx=—e¾JìMZ"-ÜO`#LwÙ›b„™(‰1SïíÑ#þc^$TC„¡îª-%Tª¶jïbÞ›½ýR¹D1}µ¡$·„óÀJHp,m&–˧2¡]#|úP®¡ˆ™–"‰¨ '±wÐ3„qs q®ó"ILƒ5 Š
+Ømj‘wå}¼`ÄZyƒéåéü«Ì+éƒbE[xa'òõÎåPÊö‘/3°ªè‹|ïÆå}š{5MeÚ ¯
+tciñÞ}—.}Ž'NRY¼:4É» ˜¦”H“¼òû#d[$§\C®‰I÷ù tÛ÷©Èª6°çí‡c±”÷Ç‚ oÃI×0‚zâÑ=(T­u[)ÂlËéúMHÔº½ åy’<ŠMúI’Leû
+ŠpsÔaH¡½ÃJî>Œt5®‘¹m»_,‹»ŠÁ6ŸN¦rGq¸ `Šdëd§ù.‡¢$ã*VZÏÿë³^ ©mBWH"Çñ9hU¾¦Š’vâsišvÕŸK£@u|~—'é5Kƒ<¤:±9#VyAHCŠ¥Ø<ÕsI$q׃vkP¦º¶vïJðì|W¤JQbüIvÅäëér·Eö0C¯Àû­þ)ª8‰~Ä¡Zê^ÅyI†Ëê¼Ê±/réf2ØŠ}J룂_ °¯©åºÝ»„‰¹}Ä>$¡~Tì{C×GðC’±'Æ~wíuð7´G_’ð¥S£_!'ÙP…+i÷Øä@ô›P²œœ¿ËY2r%°g¾Ó´Šw
+\°¢ ‚´½¦lÁ`yùš”-:…­0<Œƒº‡­—¤µüAa+Ð?9j{[/ÉÐúZ&í?¬Y:‘Càóm;2õ~Ï…AewHÜ{3mH§÷{Ž ôe1å² gW¿çˆòáØY©`œ0gÛJî÷ü›-(à{€¡PXuð(õ{Üâú8 É‘¥èQ‡!ýk¶ÃþâÀì>ŒŠRD ‚-J¹¹¯˜oÚ†¯Ù,«Aby?_ÇO“Åx]}üîÃp¼®Ù§@ⱃ²+sÏVˇúñ¼)t±XúG¿Ïë´Ixý&Ø©~Õ)ßH?esD‹*{|æ\µEk®î*³^ã±Ûp_²‡Ë„{2
+¿0Dñ~ËVv<ÎNa¼*·í”8-ð­1Âs¯µ×?b® °ÚûRþ5[mËý4Ûª+‹nû9pL»üŒñ8𞥢õ‹Àr^’¦²ñîU:+ÿ«Þ¼:}÷ ´áÇíþër¹Ø$T±æŽ—É‹ñãz?7ì‘göÒËŸ—{wFûÚd—ãyñC·ñ2ÉT Á'™ú•+ßÞ„z/>~^–«yZ”ùÑùåç á‡T÷,ˆE•nýK"¦NhU” ‚LMß;˜ð984žG,öB ¾‘Ö=C°£x!eORéîhšh4TÿŸú åk«Sþ#Ž·Ts\åÿ®Di¬ ·Ÿ…4-Ðü?溎ž
+endstream
+endobj
+9539 0 obj <<
+/Type /Page
+/Contents 9540 0 R
+/Resources 9538 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9446 0 R
+/Annots [ 9525 0 R 9526 0 R 9527 0 R 9528 0 R 9529 0 R 9530 0 R 9531 0 R 9532 0 R 9533 0 R 9534 0 R 9535 0 R 9536 0 R 9537 0 R ]
+>> endobj
+9525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 327.977 168.768 336.667]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+9526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 313.377 178.236 323.789]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8cpp) >>
+>> endobj
+9527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 208.126 143.107 218.663]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a57001d5776335698cea14c7717235beb) >>
+>> endobj
+9528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 195.248 143.107 205.785]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_aac0cf12aac4b47ad289ceb8c197df8c0) >>
+>> endobj
+9529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 182.495 164.675 192.907]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a4f9c246f53fefca5ab2453f413d204b9) >>
+>> endobj
+9530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 169.617 161.833 180.029]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_af8af247cef1bb5db9be54e219234f1b9) >>
+>> endobj
+9531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 156.613 153.83 167.15]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a663792594853c0350524cdf0113f52a4) >>
+>> endobj
+9532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 143.735 149.867 154.272]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a7895684fb5215afbb849eaab41d87911) >>
+>> endobj
+9533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.274 143.735 225.605 154.272]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+9534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 130.856 149.598 141.394]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a86a2af8a1fce4d122cc7934e25dcdc85) >>
+>> endobj
+9535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.005 130.856 225.336 141.394]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+9536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 84.595 175.372 93.214]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_a6d34b7a23b623258f3441bdc18d86c17) >>
+>> endobj
+9537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 69.87 164.526 80.335]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range_aff23b310facf4df91b15cc4b11466645) >>
+>> endobj
+9541 0 obj <<
+/D [9539 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1386 0 obj <<
+/D [9539 0 R /XYZ 70.866 752.14 null]
+>> endobj
+9519 0 obj <<
+/D [9539 0 R /XYZ 70.866 728.198 null]
+>> endobj
+1390 0 obj <<
+/D [9539 0 R /XYZ 70.866 694.01 null]
+>> endobj
+9520 0 obj <<
+/D [9539 0 R /XYZ 70.866 670.051 null]
+>> endobj
+1394 0 obj <<
+/D [9539 0 R /XYZ 70.866 635.998 null]
+>> endobj
+1398 0 obj <<
+/D [9539 0 R /XYZ 70.866 596.808 null]
+>> endobj
+9522 0 obj <<
+/D [9539 0 R /XYZ 70.866 577.622 null]
+>> endobj
+1402 0 obj <<
+/D [9539 0 R /XYZ 70.866 556.945 null]
+>> endobj
+9523 0 obj <<
+/D [9539 0 R /XYZ 70.866 533.003 null]
+>> endobj
+1406 0 obj <<
+/D [9539 0 R /XYZ 70.866 498.815 null]
+>> endobj
+9521 0 obj <<
+/D [9539 0 R /XYZ 70.866 474.856 null]
+>> endobj
+1410 0 obj <<
+/D [9539 0 R /XYZ 70.866 441.275 null]
+>> endobj
+9524 0 obj <<
+/D [9539 0 R /XYZ 70.866 416.785 null]
+>> endobj
+1414 0 obj <<
+/D [9539 0 R /XYZ 70.866 382.673 null]
+>> endobj
+8590 0 obj <<
+/D [9539 0 R /XYZ 70.866 306.696 null]
+>> endobj
+1418 0 obj <<
+/D [9539 0 R /XYZ 70.866 298.03 null]
+>> endobj
+9542 0 obj <<
+/D [9539 0 R /XYZ 70.866 222.965 null]
+>> endobj
+9543 0 obj <<
+/D [9539 0 R /XYZ 70.866 97.587 null]
+>> endobj
+9538 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9557 0 obj <<
+/Length 1897
+/Filter /FlateDecode
+>>
+stream
+xÚ½ZMSÛH½ûW蔲«Âdz¾‡Ú &»©…dï‰äàØ\e$ÖRûï·G#a ©rÁ²u÷t¿é~Ý2Mnš|ü>|87<1Ä*Å“éu¢)1J%Ú2¢ ™.’«¡"‚“Ñ‘blx1¾˜œ\~Ž˜6ÃÓ¿N¾~õ—“ñùx2¾<Åÿ
+ÿ¹Zf©¿bÜæ×þÓ=±Jë{øç³ÅK_0J‰ÅpiDP~È>ûì‰ÒÍŒr¢´—Ĩð–§Ù³äÜ¿ÑÐm[F ÕɢŖßXå·Ó<{(Öó"_ûݼ{ö`pû,Ÿ?Þ¥Y1ÛøTòˆO×q‘ÞMfÙS2Lƒ¯µ%Åï
+ÓC\$-졸nï·+sOév>—R ç.ìþæÓˆÓa¾\x= ¶# -á¼€óF&³€ˆ@dUkÐY¨n±):|±œ)ÂL½øq™JD¼kñ´[ô‰ ˆuhçÝPÅ c¼$Œ¬W[D6!qÏv­ÒÂAc¨aãŒ8fñœÛ&ˆeR÷Lpj!VuC,C
+ÑbQˆ·e"n·R¯RöGZ¥›óÇl¾ñBËäó#ÏWþÁ#¨Ç*‘=8 ‘Só.‚F ¬tƒ %Bñ
+„÷Å:¢Æõ AÀ- u.fÅÌ¡Ú¡í}…‚lñšJàDâŽâ
+‚b¹“Ò:T»Ôè`Þ
+]ΰ‰N‹îÔ?bßh1™;I¬î÷Ô(†+e:¥DÀÈPçnü-¥I#¯W¼¹Æò ›ø…+ûˆ7¶Ì¯ùÅg ƒ¸Yâq:Ú;ƒ.'@—öÔùYzAªLöàxx¬VÊ ¥˜5@¨4À¯õ \ãFY¨óU¶€ éEØ…ïm>r—žÒµ«ý4 lÓjîí@DËD6í@}‘Ð)½sIË$Ö=½;IDÃôΛ‰/Åú !ƒ¡¾G¦€ñ›¹ñ™gŠP6Kèf®ò[ÄÅšèíÈEyɉ3æ±È›éÄÊ^Ó »J£¸gŠ¶ƒû_D’1ù¸­ÉMK®ŒDT4£Ê®×•o(vë±±S!–ªî$iª»!ÜpùŒpwÝžÀHš0,±’v9ÉrÄéAî‚ÀTúP©P—PçN¶ZÄš«7ŽÁ°9«î-6½Ý­wm
+í^Û‹ÐŽjéCdÙŠÕ,í~½|š{h®UíIšH N÷ñ" Jì¹ I³Å¾é]Þ|tùk©} ‚F"—Ðeî±m_=…D–a­—¤7å½î%^¢™…{ùÑ…Bb/.Ú¿Ë•Ý~U¨xsu
+endstream
+endobj
+9556 0 obj <<
+/Type /Page
+/Contents 9557 0 R
+/Resources 9555 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+/Annots [ 9553 0 R ]
+>> endobj
+9553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 161.173 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+9558 0 obj <<
+/D [9556 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1422 0 obj <<
+/D [9556 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1426 0 obj <<
+/D [9556 0 R /XYZ 70.866 721.864 null]
+>> endobj
+9544 0 obj <<
+/D [9556 0 R /XYZ 70.866 701.81 null]
+>> endobj
+1430 0 obj <<
+/D [9556 0 R /XYZ 70.866 680.206 null]
+>> endobj
+9545 0 obj <<
+/D [9556 0 R /XYZ 70.866 667.754 null]
+>> endobj
+1434 0 obj <<
+/D [9556 0 R /XYZ 70.866 630.601 null]
+>> endobj
+1438 0 obj <<
+/D [9556 0 R /XYZ 70.866 600.804 null]
+>> endobj
+9550 0 obj <<
+/D [9556 0 R /XYZ 70.866 580.751 null]
+>> endobj
+1442 0 obj <<
+/D [9556 0 R /XYZ 70.866 559.147 null]
+>> endobj
+9547 0 obj <<
+/D [9556 0 R /XYZ 70.866 534.369 null]
+>> endobj
+1446 0 obj <<
+/D [9556 0 R /XYZ 70.866 497.14 null]
+>> endobj
+9548 0 obj <<
+/D [9556 0 R /XYZ 70.866 472.362 null]
+>> endobj
+1450 0 obj <<
+/D [9556 0 R /XYZ 70.866 435.133 null]
+>> endobj
+9549 0 obj <<
+/D [9556 0 R /XYZ 70.866 398.449 null]
+>> endobj
+1454 0 obj <<
+/D [9556 0 R /XYZ 70.866 361.17 null]
+>> endobj
+9546 0 obj <<
+/D [9556 0 R /XYZ 70.866 336.393 null]
+>> endobj
+1458 0 obj <<
+/D [9556 0 R /XYZ 70.866 299.163 null]
+>> endobj
+1462 0 obj <<
+/D [9556 0 R /XYZ 70.866 233.179 null]
+>> endobj
+9552 0 obj <<
+/D [9556 0 R /XYZ 70.866 213 null]
+>> endobj
+1466 0 obj <<
+/D [9556 0 R /XYZ 70.866 191.396 null]
+>> endobj
+9551 0 obj <<
+/D [9556 0 R /XYZ 70.866 166.542 null]
+>> endobj
+1470 0 obj <<
+/D [9556 0 R /XYZ 70.866 129.389 null]
+>> endobj
+8591 0 obj <<
+/D [9556 0 R /XYZ 70.866 62.002 null]
+>> endobj
+9555 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F97 8866 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9610 0 obj <<
+/Length 3027
+/Filter /FlateDecode
+>>
+stream
+xÚÍMsÜƆïü{\V…ãéžïC²D%rÉ’#Ñ'Ù‡¹’¶Ä¯,—q”_Ÿn,@c@,
+1,N€~•Ò~ˆß]öŇçürs½[o?½\í :ÚÏÎös=Mïª2ûëÕmÏ,Ú¤¢£K‡ ħ‰+·Ú!¹{?’Úìóízµ[÷`CTZ£6jú
+#€šþ 3`Ø·HkåþóúÖ È3¾¥‘Øuœ[ÎlœÛfR=¾åÚ{µ=>9P$£ ECåÖrFîÜXæõ.òND™Å#9i‚wË™wÛÌ»ÝjßÞmþs nÙ{ï:ÊQAÀ¾w5BÇ‚¾¬ÂP’ˆDp*̉#á‚l ifAÑìêMÄ›–UÎlÕf>EPÅ<ªmÁˆ{ àãÌœæ}V”p/TýªšêCîå ¦tïøœ9–ÁAAÓ:C}¨‚Ž*+
+»ûCBvœ{þœÚ›¨;]ݬ&jª'ÊZ!¸9h?’3ñ •
+ Í'8AHåÈZHmâÝù—uõŒÞfF »œË{§ÑåÜÑ^FHaÞ¤Iï!
+x”r±¶zs½8»+gVGw.gNíùÝÚHp)Ìô9wЧ))fÞÀÀ¡Aħ4’oÞÈ1âÓrhãÔ6´¿FärQ‚Éýèºs¡C{–Ÿi.çòæh‡:zî‹6̬#o(€y ÑHÞëóƒSÌúÁ©Œ9X$}ªœ[µØsG‹DÎCçu*ýŒI"»ç‘|ó^Ša§–3§¶™Ãß0Äx,â»àf^Ä …1#‘àóHÁØ)N-g6Nm3üÀ¿JÅ¿Ì¡Ã?€˜ÓA«;àÑ lš9> ­^ %~[\À)R*g6Rj3×ÿ®z»š
+endstream
+endobj
+9609 0 obj <<
+/Type /Page
+/Contents 9610 0 R
+/Resources 9608 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+/Annots [ 9554 0 R 9560 0 R 9561 0 R 9562 0 R 9563 0 R 9564 0 R 9565 0 R 9566 0 R 9567 0 R 9568 0 R 9569 0 R 9570 0 R 9571 0 R 9572 0 R 9573 0 R 9574 0 R 9575 0 R 9576 0 R 9577 0 R 9578 0 R 9579 0 R 9580 0 R 9581 0 R 9582 0 R 9583 0 R 9584 0 R 9585 0 R 9586 0 R 9587 0 R 9588 0 R 9589 0 R 9590 0 R 9591 0 R 9592 0 R 9593 0 R 9594 0 R 9595 0 R 9596 0 R 9597 0 R 9598 0 R 9599 0 R 9600 0 R 9601 0 R 9602 0 R 9603 0 R 9604 0 R 9605 0 R 9606 0 R 9607 0 R ]
+>> endobj
+9554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 714.327 258.403 724.865]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__create__affinity__mask__target) >>
+>> endobj
+9560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 701.366 262.617 711.903]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__destroy__affinity__mask__target) >>
+>> endobj
+9561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 688.404 266.616 698.941]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target) >>
+>> endobj
+9562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 675.442 262.133 685.979]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__max__proc__target) >>
+>> endobj
+9563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 662.48 221.301 673.018]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__target) >>
+>> endobj
+9564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 649.519 232.894 660.056]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__blocktime__target) >>
+>> endobj
+9565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 636.557 219.974 647.094]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__library__target) >>
+>> endobj
+9566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 623.595 239.655 634.132]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__s__target) >>
+>> endobj
+9567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 610.633 231.944 621.171]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__target) >>
+>> endobj
+9568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 597.671 266.114 608.209]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target) >>
+>> endobj
+9569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 584.71 220.798 595.247]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__target) >>
+>> endobj
+9570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 571.748 232.392 582.285]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__blocktime__target) >>
+>> endobj
+9571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 558.786 226.017 569.324]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__defaults__target) >>
+>> endobj
+9572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 545.824 244.254 556.362]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__serial__target) >>
+>> endobj
+9573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 532.863 219.471 543.4]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__target) >>
+>> endobj
+9574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 519.901 265.567 530.438]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__throughput__target) >>
+>> endobj
+9575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 506.939 266.284 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__turnaround__target) >>
+>> endobj
+9576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 493.977 239.153 504.515]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__s__target) >>
+>> endobj
+9577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 481.016 231.442 491.553]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__target) >>
+>> endobj
+9578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 468.054 276.084 478.591]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target) >>
+>> endobj
+9579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 455.092 238.39 465.63]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__device__number) >>
+>> endobj
+9580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 442.13 273.735 452.668]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__physical__device__number) >>
+>> endobj
+9581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 431.016 237.888 439.706]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__number__of__devices) >>
+>> endobj
+9582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 416.332 187.301 426.744]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__report) >>
+>> endobj
+9583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 403.245 196.913 413.783]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__signaled) >>
+>> endobj
+9584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 390.36 170.274 400.821]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status) >>
+>> endobj
+9585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 377.322 228.321 387.859]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__lock__target) >>
+>> endobj
+9586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 364.36 248.495 374.897]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__nest__lock__target) >>
+>> endobj
+9587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 351.398 229.272 361.936]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__dynamic__target) >>
+>> endobj
+9588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 338.436 245.958 348.974]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__max__threads__target) >>
+>> endobj
+9589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 325.475 222.807 336.012]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__nested__target) >>
+>> endobj
+9590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 312.513 238.39 323.05]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__num__procs__target) >>
+>> endobj
+9591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 299.551 231.773 310.089]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__schedule__target) >>
+>> endobj
+9592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 286.589 210.649 297.127]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__lock__target) >>
+>> endobj
+9593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 273.628 230.823 284.165]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__nest__lock__target) >>
+>> endobj
+9594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 260.666 228.77 271.203]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__dynamic__target) >>
+>> endobj
+9595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 247.704 211.151 258.241]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__lock__target) >>
+>> endobj
+9596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 234.742 231.325 245.28]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nest__lock__target) >>
+>> endobj
+9597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 221.781 222.305 232.318]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nested__target) >>
+>> endobj
+9598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 208.819 245.868 219.356]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__num__threads__target) >>
+>> endobj
+9599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 195.857 231.271 206.394]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__schedule__target) >>
+>> endobj
+9600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 182.895 213.643 193.433]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__lock__target) >>
+>> endobj
+9601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 169.934 233.817 180.471]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__nest__lock__target) >>
+>> endobj
+9602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 156.972 221.121 167.509]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__lock__target) >>
+>> endobj
+9603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 144.01 241.295 154.547]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__nest__lock__target) >>
+>> endobj
+9604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.985 95.793 212.074 106.259]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib_a1743811789a49d64fc0d855033f8cb5a) >>
+>> endobj
+9605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.985 82.832 244.953 93.369]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib_af1812fd98f49316436aaa91b6f29fb4b) >>
+>> endobj
+9606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.689 82.832 292.779 93.369]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib_a1743811789a49d64fc0d855033f8cb5a) >>
+>> endobj
+9607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.985 69.87 258.313 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib_a6bbf41a6daa69565c20346fb87c0a0a2) >>
+>> endobj
+9611 0 obj <<
+/D [9609 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1474 0 obj <<
+/D [9609 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9612 0 obj <<
+/D [9609 0 R /XYZ 70.866 727.014 null]
+>> endobj
+9613 0 obj <<
+/D [9609 0 R /XYZ 70.866 110.637 null]
+>> endobj
+9608 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9639 0 obj <<
+/Length 2411
+/Filter /FlateDecode
+>>
+stream
+xÚÅ[[sÛÆ~ׯÀL_È™j³{öî©3ãÊr›4vR‰ñ‹š%N)R!)»Î¯ï·
+ô døà¯%‘Ûñz|“owÔÛ d,d3ãS0Ô“ ‰$ T%%â~o /¦ùl|·Ø2'a˜p"sÁ¾"f¾¯‡B*Ë´ñ~€/ðWï)æ¿‚ïݽ{_ò–(8Ö0¸<9H=3ŒÕL Ÿ %z(êzîCÁ0çD:ä*Ç´L‚\P’òiÈíÍ|Ü:óÇ#·?ÿr#þ_o+ ½<.Š‡Iü ¹`ÔôCåûfÔi-ž5ò¹QCe2IÔ€’ÔrÔpk’D ()Sšã‚ë/ Ť’±Añ¼Ôšp•dÊÚg@‡ž í$36t%åÚ¡…¸H|@ óºBØèºqõÅŸfCÉ«
+/Ûëù¦Rf5½Û)ö%¸r\}q•/.xu¼Ýõx³õêfw^§ºX¬Â­_æË«º¹^fÚõ˜™`î ®Ð®Òë#‘Ž.*¹¾ª¬zÛ>œjm:ŒŽþ‹
+¡ ˜}"P&ã²6ìú¾ùä|(}~Bx\9ár»¾›TÈ»ÈgÃ"Æóå$/‘Œ[3òµ©º@"fUEý/óådq7Ý]*jWŠóò¿µ³¡êŠÕl¶X§-Öµ€˜2™ò†I£¶nˆ®È¼1Ga-r›.h Œç|ù™]·h€œéÜ^ƒïÛ»m‰$©mÜmŸ-Æ›M¾i8+v´aÖ5Â
++Ìm¶ðp¼T~ÝÎཱིñz
+Sáa<¼i º¢zù0?ÚDŒ+nåËâ.oiÝf•î…ÉT)Â/wŸð»<ZŸQÞÜ-'!ô7hgX—¡Q3\Óe6ÑÿDüÝ1[òÌT fÕq²\¶uìQ ôÎÄ4-çýÏCÒƒÕ|ú°ëÇËñâë!íæ-¡«4¼b2i3\¯j„MÙ’’ö»¸-¬ÐÖqHF`—€­ÑÌ[±-ìÒmõÉuù]ÃËÒ2sïC&Ùâgìî¯éT˜é¯¡Åœ:Õ‹Ùʯ)¸*ÁtìÊ]¦AånE­džÛÇÁ¶ÃþH6\SÝþ;´FhŒtzèmª{'ë½H ê ¥A%–š3A©ê4*%ùwE¥‚Ã|]ngšm&z£RðFiµŠyC¾Þ£94 øÚi¼Îw‚‚Ög˜HÊò°¿(F«Öh‚(…dé—(–¬Z´´Õr¸Â?¹*tU¢Í—Óã·’æh•·mÝ“`
+ÊJ$ ­ud :
+JR›c98äßþ<½D,»f¥S¨J#«j¨úŸ¦#
+³‹‡’>42MÒ79A¥P
+…qÅšA§d¨w:¥ÂBÖ¤à|#Lâã›<t—ÇÐaèãè8nFÍ ÓIâLsÏDGœ2öh•Q]$ifzpõè“MIFqQ³áa†&TÒ½9
+B]:f¹È—WÛëjKØ•=“qKü@
+«IÊHSÑÞöYà*)…%Õƒ‹š—¥è§öæLã$`=ÿ,vlßð(àIÑÑ~êGËbíV»}Ú£p8]RRªz¸åv¼Þ´nÁM¸\5æîb®ÝMÜ.(Ûpœ'b®ÉU8La6‰¶È˜dÚ.æ›ís÷‹Òõ—Œ$Š lXäOê%¦ç}­$¢P;ÿH?Ëâù›‚/F ®lÌ·½ˆ†'š$ôgnj¶6¼d$¦dßôÒñÃÌBv?üv®xI@ªS¿Ü.Q%L±vu¤Ÿ°„¿Çkwuå’ñÆIùA²ÿ6õx'¡E±Û–wT­¹8lhîñ¦=i{ô>}ñb—žÏ% óp¢Æ“±mëä^¬dÏ4»¯ðtš;Ì;‘°‘¾äy[_>¼È%Œñj§V½öÒð½Cþ ”¤Úí¥oóIÛ˜ŒK¸IÁ4Dš71ÓƒrTÛù8S<uörU'$&«››öGL=ò‡ð#×óÀQÚ’Rë…bsäAî@ÄícñcˆÿÓoÈt?·š…€h} ©X0bR´á' ýŽ©ÂC~r÷‰¨´;>`×,²_Û5Ð:zÊO5Ê"uô˜Ý«
+sp%…æMÎÿ×]S¯
+endstream
+endobj
+9638 0 obj <<
+/Type /Page
+/Contents 9639 0 R
+/Resources 9637 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+/Annots [ 9617 0 R 9618 0 R 9619 0 R 9620 0 R 9621 0 R 9622 0 R 9623 0 R 9624 0 R 9625 0 R 9626 0 R 9627 0 R 9628 0 R 9629 0 R 9630 0 R 9631 0 R 9632 0 R 9633 0 R 9634 0 R 9635 0 R 9636 0 R ]
+>> endobj
+9617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 551.793 137.503 560.484]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 447.16 173.825 455.908]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+9619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 434.543 156.941 443.161]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value) >>
+>> endobj
+9620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 384.958 139.305 395.37]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a3390259050ba99673e53ac270fbe56f1) >>
+>> endobj
+9621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 372.341 147.046 382.753]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a3ecebd7ef41928a2bb3d6afa526eee44) >>
+>> endobj
+9622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 359.599 179.205 370.136]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a1a0f838ba0d45669530bd4a12300b6dc) >>
+>> endobj
+9623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.164 347.107 220.612 357.519]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_af2876ba1622b85b0a8dadc326577e7f4) >>
+>> endobj
+9624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 334.365 157.246 344.902]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcf) >>
+>> endobj
+9625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.501 334.365 224.588 344.902]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a75dd7e9348e9a130a62a9dcc53b7c0ae) >>
+>> endobj
+9626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 309.793 163.397 320.33]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_ab0ab93357643ce75071ddb1012e1f4d8) >>
+>> endobj
+9627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 297.301 152.593 307.713]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_abe8a3bd3cd500cf9acb0b8d8131327b7) >>
+>> endobj
+9628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 249.39 191.058 259.779]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_ab90b5804a958ee4a7f3399074206f29f) >>
+>> endobj
+9629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 201.576 202.221 211.988]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a2fc6f39630afd17fd6654a80d24cea81) >>
+>> endobj
+9630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 188.834 149.275 199.43]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+9631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.249 188.834 192.372 199.43]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a65e2e6a41312cd01f86d04a007139da4) >>
+>> endobj
+9632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 141.097 170.019 151.509]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a2b0497a63a8c0aada354937388afb9ef) >>
+>> endobj
+9633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.462 128.48 211.961 138.95]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+9634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.168 128.48 285.949 138.95]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a01b0555aa3f500c76f33c3c1fb7da3e6) >>
+>> endobj
+9635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 117.584 149.275 126.333]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+9636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.775 117.584 206.085 126.333]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_a8e53a0ac1f871fdbff593f74a2e2f260) >>
+>> endobj
+9640 0 obj <<
+/D [9638 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1478 0 obj <<
+/D [9638 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1482 0 obj <<
+/D [9638 0 R /XYZ 70.866 726.998 null]
+>> endobj
+9616 0 obj <<
+/D [9638 0 R /XYZ 70.866 705.965 null]
+>> endobj
+1486 0 obj <<
+/D [9638 0 R /XYZ 70.866 685.23 null]
+>> endobj
+9615 0 obj <<
+/D [9638 0 R /XYZ 70.866 675.072 null]
+>> endobj
+1490 0 obj <<
+/D [9638 0 R /XYZ 70.866 639.36 null]
+>> endobj
+9614 0 obj <<
+/D [9638 0 R /XYZ 70.866 629.202 null]
+>> endobj
+1494 0 obj <<
+/D [9638 0 R /XYZ 70.866 593.49 null]
+>> endobj
+8592 0 obj <<
+/D [9638 0 R /XYZ 70.866 546.157 null]
+>> endobj
+1498 0 obj <<
+/D [9638 0 R /XYZ 70.866 536.692 null]
+>> endobj
+9641 0 obj <<
+/D [9638 0 R /XYZ 70.866 460.06 null]
+>> endobj
+9642 0 obj <<
+/D [9638 0 R /XYZ 70.866 399.672 null]
+>> endobj
+9643 0 obj <<
+/D [9638 0 R /XYZ 70.866 264.061 null]
+>> endobj
+9644 0 obj <<
+/D [9638 0 R /XYZ 70.866 216.29 null]
+>> endobj
+9645 0 obj <<
+/D [9638 0 R /XYZ 70.866 155.81 null]
+>> endobj
+1502 0 obj <<
+/D [9638 0 R /XYZ 70.866 103.655 null]
+>> endobj
+9637 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9662 0 obj <<
+/Length 2911
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\[sI~÷¯˜'JªZ7}9}sUÁq`’…Ä›—$Ž¬8*lÙØJ`ùõ|gf$OK=ºMS¼¬íè|Ýç~Ëꦒ՟NþxyòÛWÁTADçLuù¥òRç*µpªº¼®>ŒÎÿüâo—oǧڇ‘ãS§õèü¯/Þ½k>zùóù/¯/Þ\Ž•–£õ/üùÍøTiòß Û~éõçoÞ¿<×Ò{wùvLrôËùeóï·¯.Þ^¼9¿ºüéäâòäŸ'
+G••Z-4U“»“Ÿduÿ÷S%…‰¡úWýä]EÖK¿ßVïNþ~"»×µ¦RRx]÷¾N ¹¼p}bóK)Gç÷ó§Åã·Éâþ±9áoÚ[OÓ_ÞO¾ÝMç‹«Åì~·¯‘ž+«S…ŒºÁx=›\Ìùæßß]=žm|Ôþ(­ÄY”Òü«jHG_EÖõ”Ö"H ˆšô‡Ùüv6Ÿ~jž$Û9ÄéòÑä,/§¥ÔóY}òójÑüd:Ío:4?ï¿,O%õítùþe7e¦¥
+æµÒ»mBƒÂÅ•ÄjI%G×Òç™nà}sòé| mûÎ
+%¾Š ×O•á û
+´>æ7ßUÔa«ÅÑU\rõ£42à…'µ|æ ¦r±A@ —Š$ç¡ê¡„T˜’©LÆÆŽžeÓ±½Žp"„Óµ>ÓZßëéÝçiËÆWßæ“gfhoßÇFŽîg×ør49
+À*iñ€Jq¯§_2|VATpžžHo„¶ñðPôáÈX¸P!æŠ`‡Åz$)¶¡äìŽXߦšà=~,Zν爧ÓùdzÝþ3Søµ½÷üêö×ÿŒ•Mó‘p¨¦|üUTBÙ†’£^e7¾iKàFkS\h±…sf¥ùaɉ–=w³IFªV ˜êði kv鮟2ìÇa`øºhPÙðžì׬K°_Gh°Ê³?dáàL(q_£‰ÉÚ}ogO‹¥Ì³¥‹FhÖÒ¥¥K'…näòXXÛ¬ˆ#xÖŒlÁ­E@‚K’Y!
+˜’Ú TD¦aK ÂÿÀÏvAŸÓÙU¹e­ÛëPcÈ vf€äig£2@mŽ»Yšö:¤üÊd¯¶ #’EPƒ^' O‹ÇÙü&£”(ÔB4»bœ&x'ò‡¹ Õ³ÖW_ žeJÒ†1NyðÍ&Æ…1nÓ(È ¸qêù
+I=$–ð:Ü4SB¤XvÿkEþ÷Æj¿ÑöûýŒÛéƒðrË!­²Ø-oAh<©ýÓ&òƒZÞÚaJt¼™Rªï%ˆb‹ Ü‘3(Õæb¡ú˜’Zªå› ÛÍ„yûjBÐv5!Ý7aø–» )¿³Ë É»«í„õw9(ó.ÇË«ÅÕQïqtü'yý[p}z͇<~B¶jЇÓPÊîßü8Íù*æËsëîÃß’eËòþö¯l…a/!œÖá`¸·bJ¤Ã@oEJ¯ò
+Rªo2GB²f’‚ÓÛ«ßzaJ¤w%uØ–€ œKÚvs.‡â±Õz]k½_ׯÓÏž²®Qêìq3ظ—"é…DhÎð2?Ö#.Õ  M¬3¬.tïT_¬à9GXÞgÑ*íõZÎßä2:ŠEc¾óŠŽt[NQ›! u”öüWSßì•D”QÐR8{çhˆ¾CǤl(‘³»ì •[@.P
+endstream
+endobj
+9661 0 obj <<
+/Type /Page
+/Contents 9662 0 R
+/Resources 9660 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+>> endobj
+9663 0 obj <<
+/D [9661 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1506 0 obj <<
+/D [9661 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9646 0 obj <<
+/D [9661 0 R /XYZ 70.866 753.778 null]
+>> endobj
+1510 0 obj <<
+/D [9661 0 R /XYZ 70.866 732.998 null]
+>> endobj
+9647 0 obj <<
+/D [9661 0 R /XYZ 70.866 722.729 null]
+>> endobj
+1514 0 obj <<
+/D [9661 0 R /XYZ 70.866 686.407 null]
+>> endobj
+1518 0 obj <<
+/D [9661 0 R /XYZ 70.866 658.927 null]
+>> endobj
+9652 0 obj <<
+/D [9661 0 R /XYZ 70.866 639.513 null]
+>> endobj
+1522 0 obj <<
+/D [9661 0 R /XYZ 70.866 606.777 null]
+>> endobj
+9648 0 obj <<
+/D [9661 0 R /XYZ 70.866 582.73 null]
+>> endobj
+1526 0 obj <<
+/D [9661 0 R /XYZ 70.866 548.121 null]
+>> endobj
+9649 0 obj <<
+/D [9661 0 R /XYZ 70.866 524.131 null]
+>> endobj
+1530 0 obj <<
+/D [9661 0 R /XYZ 70.866 489.581 null]
+>> endobj
+9656 0 obj <<
+/D [9661 0 R /XYZ 70.866 465.457 null]
+>> endobj
+1534 0 obj <<
+/D [9661 0 R /XYZ 70.866 430.924 null]
+>> endobj
+9651 0 obj <<
+/D [9661 0 R /XYZ 70.866 406.934 null]
+>> endobj
+1538 0 obj <<
+/D [9661 0 R /XYZ 70.866 360.37 null]
+>> endobj
+9655 0 obj <<
+/D [9661 0 R /XYZ 70.866 336.381 null]
+>> endobj
+1542 0 obj <<
+/D [9661 0 R /XYZ 70.866 301.83 null]
+>> endobj
+9653 0 obj <<
+/D [9661 0 R /XYZ 70.866 277.782 null]
+>> endobj
+1546 0 obj <<
+/D [9661 0 R /XYZ 70.866 243.232 null]
+>> endobj
+1550 0 obj <<
+/D [9661 0 R /XYZ 70.866 203.694 null]
+>> endobj
+9654 0 obj <<
+/D [9661 0 R /XYZ 70.866 184.329 null]
+>> endobj
+1554 0 obj <<
+/D [9661 0 R /XYZ 70.866 163.549 null]
+>> endobj
+9658 0 obj <<
+/D [9661 0 R /XYZ 70.866 127.47 null]
+>> endobj
+1558 0 obj <<
+/D [9661 0 R /XYZ 70.866 92.995 null]
+>> endobj
+9659 0 obj <<
+/D [9661 0 R /XYZ 70.866 68.871 null]
+>> endobj
+9660 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9678 0 obj <<
+/Length 2085
+/Filter /FlateDecode
+>>
+stream
+xÚÍZkoÛFýî_A`@ªéÌ·QÈÚÊîv›¤µ•¢€›ŠD'Bõpe:éþû=CmDÛbÉv÷ƒ-‰"ïkî9÷ÞñìcƳœü}ròõ+'3Ǽ12›\g–3gLf=1#²É<»¦ Ž Ñàõ»ÉøçáûÉw'ãÉÉo'Bx&2AŽI.˧÷Ùlurõžgs|ù]Æ™ô.ûRÞºÊ ÖãÍ2»<ù±A½œy/ýß¿=û÷ø¢A«qLõ¡Ó
+»*'ÃY7¸œ\ ¼;‹Ÿ/ƯÆã7gãáÈK¯gÿ|ùæ•_Ö1:ûþååeuéüíÙ»×ã7“¡ >xYþŸüëí›CWê¨;Ç©§|QZ2­ä½;|w%uÓJxWûu6ÝaÄ|¼~}þihø
+ÏfdˆByóÕÍvñyZäï«;•Þ‘>V3‹{GÄyU=qžÿÂ9­Å®•žO‹êu¹XçÕ;çª×ÍuõžXæõ5|’›é¼!.)Œ³Š—nµ
+Lb:qÉŒ­$Yc+ËóuˆÌç¡ãö‰õpKáðÌH@"¹êÆ‹üz(ù ßæëY>¯ÌþžýOtx>o”`FëÌDKßÁxa“ª’$ )1þP¯õLhÛ‡^'˜S6Õ‹lÒȦ_¸æø_ŬcX>æEÃ:JÍTXÇÎ&‘„)V¦&ͦÛym«ò6AÅH RµÙH2Âb¶YßÆD |DÊg…ÚA‡ÒŒô=:B¦6(°LÙû{p³-1ò{úœdNúãÐ' ÓFGôéè3Ðg¬e\ÈÐg¬a’ŽDŸ=}³mŽ5
+œvÈ {ÆFÏF¨—€–0òæÏðMh†5ïÁ5’$]›ÝÜ$Ö–Å)æ…ÐeaÔš! K_…£‡I IÄ9¬‚¨;TdÂï Ž(d¸Î4ªœ”î)GPª­<è¾w,€âRʺïN–›Y0à×¼7„Ãr¢ñïE¹Ç8£SÝ?—ÅöK¡šŠºšÆ†‡óŽèÅŠ9ä ¡†©˜3[¬gË»yý„Øy
+){. ?u(2ÑÀoï[<iAû…éX",)??Ü}Ñ\.fqèËWòHh¯îÖ³Àu·{Ù»×Û3ël:QÏUPRd×”Ú*QÄ”‡«Vu)œÖ•$kušÙá_cvYBù>Ô+_¶É‰ú"%ñ«HðšÇë‡1{6^Ž˜âªƒ8É«# ~‘تiz× xÚ2øÞj¤‡)Fò†#é³™Üe
+~ëºDJò’>‚$eý‘™…þøïA;Ú½§üѼªç€@,ö™“\¹ñRÄŽäeQlb-:žôŸÅ ’ðÚ%@0Oeø£x,¿^5ÚW¢l µ]Pbãa|ÒÆbg]1®JÔ£d]Ë-\[‹ó¼˜.–uzžßζ‹›²¿=„o¿mæU§Á]†iî>¸KëP™i·Š²æ")ò!Ó;!£²³°íÚ‘ºïq¼äòy2.î¹ì…ó™&/(L”è5-É;¬ð¡œƒ‚$Mòˆ óÚ÷¡:ôþʧª‹ÓÓçú[£É^|7–yjã;Æbã{ñ (ݾïÇ’©ïÉHD€úº›CŠ—{¬M漈»|.á!ÔpýP[÷ÌÜ“v)­}¨ÖuÕI6fí‡}ÃÅ:°Fã¶!!ÉR{öÑÝ؇£¦’ëƒ} ‰È7³O²AZ“OØæ¥6Ä@a‡ñíN A²õxbèAu$†D5ˆ¡a;i{Øîíf'}àÓäb1‰!W{p¢—3öøøG³®zÐLH/„p/|»Ü"„ ÇpˆØ{ôG
+ÛˆƒuªlãU»èN—ç"³Æõa…
+Û«6µâI†1•¿Í™D{î‡Æ£a‚v¨Ó½Ä܇*¸ó†Ê™€QbnÀŠušFHnÚ£Qð?Ú•khw•» 3ºÔP« <§\»S´çÆFàmÊЙNû½V‚·+I奣~`YK׃úOD.U_4œ®OÉ™ó¶Ç]2…}xe0”jÑ.¨ä
+%ûPïÑHùHPëã!nËÝñÿûã¡¿øtHÈ#¶»:B ’xÍe›Ý­ONl«“öIˆ^N0/zAÎ.%jû¿;º¿3º—“‹ø£³Ö÷«Ýô³8 ÙÔæGqÕbé¤áE6¢¨Ð¯Gû4íkþ/î79
+endstream
+endobj
+9677 0 obj <<
+/Type /Page
+/Contents 9678 0 R
+/Resources 9676 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+/Annots [ 9664 0 R 9665 0 R 9666 0 R 9667 0 R 9668 0 R 9669 0 R 9670 0 R 9671 0 R ]
+>> endobj
+9664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 628.473 147.948 637.163]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h) >>
+>> endobj
+9665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 612.455 157.417 622.867]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8cpp) >>
+>> endobj
+9666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 496.909 153.328 507.321]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__locker__t_a75acaa8451bb8478ef262e2b9c585e5f) >>
+>> endobj
+9667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.814 496.909 188.583 507.321]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+9668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 482.613 161.069 493.025]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__locker__t_a761499be260604b435b749473bb0699e) >>
+>> endobj
+9669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 431.016 126.546 439.635]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+9670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.519 431.016 172.265 439.635]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__locker__t_ada8022b8d6d65d5bad6f0fd8a4798883) >>
+>> endobj
+9671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 131.949 145.85 140.64]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h) >>
+>> endobj
+9679 0 obj <<
+/D [9677 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1562 0 obj <<
+/D [9677 0 R /XYZ 70.866 751.98 null]
+>> endobj
+9657 0 obj <<
+/D [9677 0 R /XYZ 70.866 726.144 null]
+>> endobj
+1566 0 obj <<
+/D [9677 0 R /XYZ 70.866 687.553 null]
+>> endobj
+8593 0 obj <<
+/D [9677 0 R /XYZ 70.866 604.137 null]
+>> endobj
+1570 0 obj <<
+/D [9677 0 R /XYZ 70.866 593.875 null]
+>> endobj
+9680 0 obj <<
+/D [9677 0 R /XYZ 70.866 512.295 null]
+>> endobj
+9681 0 obj <<
+/D [9677 0 R /XYZ 70.866 444.68 null]
+>> endobj
+1574 0 obj <<
+/D [9677 0 R /XYZ 70.866 413.608 null]
+>> endobj
+1578 0 obj <<
+/D [9677 0 R /XYZ 70.866 360.29 null]
+>> endobj
+9682 0 obj <<
+/D [9677 0 R /XYZ 70.866 337.952 null]
+>> endobj
+1582 0 obj <<
+/D [9677 0 R /XYZ 70.866 315.969 null]
+>> endobj
+9683 0 obj <<
+/D [9677 0 R /XYZ 70.866 305.081 null]
+>> endobj
+1586 0 obj <<
+/D [9677 0 R /XYZ 70.866 264.643 null]
+>> endobj
+1590 0 obj <<
+/D [9677 0 R /XYZ 70.866 235.351 null]
+>> endobj
+9684 0 obj <<
+/D [9677 0 R /XYZ 70.866 213.013 null]
+>> endobj
+1594 0 obj <<
+/D [9677 0 R /XYZ 70.866 191.503 null]
+>> endobj
+8594 0 obj <<
+/D [9677 0 R /XYZ 70.866 123.631 null]
+>> endobj
+1598 0 obj <<
+/D [9677 0 R /XYZ 70.866 113.369 null]
+>> endobj
+9676 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9691 0 obj <<
+/Length 3764
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ýo¹÷_¡§BjÉ~E4q®=ÜW_Q wŠ­8Bm9•å\ûßw†»+‹+®´2 ôáÎŽµâo8ß3Ë¡œÜNääÛ³¿\}óÖÃÄ‹`-L®>MœÞÚ‰ ZX5¹º™|˜¾þë«Ÿ¯.ßÍεóS+fçVëéëï_½ßüéÍO¯ùáòÇ«™Òrú*þÿêo?ý8;W@KÑ7е_úá—«ËÎ~»úîìòêìßgŠh5A_GP/ÃäúþìÃorrC~7‘‚Ÿü½ŸU~¹›¼?û{†zÔô€Ñ ùW •ï¯ÞÍPNyÝþûÝåÛËw—?¾¾Ü§§ã÷Âk<DaK‘Ü嫉’™`wk•i??}œ)9½[^74ý°¸ÿ¸X7¿¿}Z]o–«ÇH_·ð7oÑììWYá¼›œk)”´Í¢¿jm’ï4›Z߶»{÷íÙäù1vzÏàO›Å äô?ûl A
+°nâP eÌibIÉÔ ¤á•¤´R¤s“I$ñ®•FÒ*ýìŒ@‰“s…´O5zŸß¼U8‰ºEà…ÒôQóm ’¿Ý£Ô Úm÷ÌQþЂÒOœv´;(áž^É
+oðtþ E+6üÑüi¥þu¦ÍôayÓ~–Ñ º{¸ž‘!ÿk<òˆxN‚Z% ogçM€&ÇÓÚÙzù•›“,ã¯6›õò#ÿ‰Ä;ÞÂÌá­}Ù|^/æ79M¡U”™X´B»2K
+d ÍJÒÙqzJN*„PÝXa}HÑ7‡%yŸ!ÈZFÕ ÈiN¥e5g_M¤†8¹«'1T)
+\RÊé›Åf¾¼[Ü´Anñx½^~aœq2uÁo¿J©WËøtüú|Óü¼[®Z4Ðü|ø4kuZê»E÷7ú<äTIKr¡óL
+8§%ëšuZµ~Ú,ïÄg‘7*àÐìö¹¥[n½¦HµY?]oÚøõ‡-ß’?¿y¸~º_¬6ógNÈpÒtªÝØèL™œj'(4¡Gê}v$°´¡<¯DìÕ]„º¸8‚¯(09æb9àZè0Ûº;b³Rzúìõ‚Û‰läÁ·qëÃrÅzö[FQωcF«¨+–©«¦´G…
+K”{Z)«²;}ÖXIzêNQ' ’²:UAx%@½U§†Ð^R(3ÚËJ’åzYÉa•¤\ÀB…M°{–ØÛD}•$cšÒÿÄðÇè¤ÕE:‰”’#Ø
+:É+ipnZ7š«
+q&(CBÑj~ßçqg)Cô ×B©
+rG”7¤‚ÿ²É8/ &&åˆê‘àÄ›ùfþÌ¡PS„Å¡ê¹³wŒ-œnpè«(,j‡(”nðJJ™!'fKÓrõÈùʶoÑsýZH¬A&%,+1ò¢ô¤­©IdÚ¦˜©Ì"+žíè~žIAQZâu‚€âÅ‹” 6£ (PƒóT©P<éqþn±ºÝ|îñáHÛ %%]ÒW ÉQªà{$u±æd.O”5ÐL³;‡woQHSC ÐZ
+‘úÄÝSÍcK9<7¸tÏElúª°¼>µ‘tÓ„
+a›RÏi×ÅÅÃý—Œw$mAo*À*Š«Ê™÷†ûq,ô\½@éWo QRÅ‚é–wû²½µm¤]ŽkB#íÜÍ|}»Ø p[3·T€ÖÌm ã¹­‰ÛŽÝc94q­ÉmMÜv¶Ê–‰Ûh ÃíÝDÉ;vµÓåu.ÖPüö(.ÚÜH ~[ªÀ"e2Þ—98ŠÑÆÕ€¦ú˜êûzµxÜä²bs´rL¤R´©g±¤kè7ò›h¥Ç[5Ç-«lÙzáƒ/aNœM aˆÙÚŒ¯átºŠ÷ä.=ö¼çy›èrèƧ‰þ°ì½£H9¹~–%áÛáM³îº{û.ÆzṘìa‹ÉPˆ&R2„pG‰/„¸.P6ëSàåj™QT“ø–ƒò»Eez»Ž'J
+ÉUn10×_NÚœ´‡Â·!k X›òCíq §5×^Õ
+›ÒCŽÅ
+ØZ°QS¡_+$TŽ×ërXŠ×|‚û¸ÈFkM>¥¿¹r¯S†
+Ö|R¥®Vd­*'èÁXšè^mIK‚=Îeíˆ7ìÍÊ!Æ›±\ü¦­ÊV)ög^hN]eÅC™tO±…i¶Š7òäÐs'YQÇØjj°œ«\ƒ©v Eibo o…º©SF)‚ï\[!*ÆW¢£ 8FÕj SÐ>—*ÕØ`)†4’*8ç÷¤z ïKVèûÒBœS‹Àmà,†¥ÐbÐ¥°{>#83‚9€
+t(äéÞþ‡£°gY«Àže­zÈš°
+¡iƒjI}o·±oz§åÀš;“÷P$¶ŽüV•M[ŠéZá4×ämªlØsÞ c9ÍÇ^×RÅÀ )x©eñ+(ɧ
+Ê ±_CkYŒ°ÜE*¦( Ê‘7Ò#Pe·¨L`H@"2˜¯¡dTô»ÑJ††OtÖP24†ü/ž`Î$¥©aΆMG™ó¶ˆ-íŠØ]Ðl{° îI3M<-g $Qà6*Æu¸…{ìÍ¥tPU€UÜE•ïù¥ìPål9Q®Á
+«ÆÍ*&èÓg]/š ÓäΤT&Ã4PæÕ]¨pòd˜U~x2Ìð‹i4º †ÙxÚäÄr'6}<l ‘ÿ1Æuy\¾ÝŦ°‡†Âø4¶*‡åf]ð*ÅíÏ„9 ÇfÂ8‹Ärr€ôG#¦ä¤#aljñ(€]11ž/Rñ)1{ÓLϸ‘0î?ùƒÑ‚ÏñèS£r¡nFG‹C¯ã8( Ó‚<DÂgc
+2?Œ¤òBð|pr` ¤›þÔÙ\¼ê‚œ°™.¿lÖDã;él§œL6
+¾A'¡3Ÿ¡€¦'±&ÕC1ÅìOË[çèH·öæè¾ ~ypD̘x¥Jù†)¸n¨7F·KS«—ltFA_/‡èå¹ ª ùe‡)ç© hÖnN¼7aÚ%sñm^19Ê90%'«€6ª
+ˆdä\ &}ýÁm}²*&ˆ“iuJÐþ,ÝIgéøe‡•èÊøtÐ#dÃ#Å:TPN`mðpT6G&éÐ¥*¡œ´†r•°o-¹wô”Ö@¶#é§Ñ=¶÷çèÚž†–°²3 Ç*%@ôZ2ZDùSgt³ÊCA„ßpíj`RP×Ê¥˜™2wT¾b!ÒÿªnÇ·ñ}j ‰ñëTúC¼\v’4
+ŽÌ-ò€“¡už²°RòŽÎ-ò8YPà‘Çɼêq'{…‹[Ž_l8ò^Cn9ð‰á
+{ ó°Od¡£Ä¬Š~¡ãÛza³ß3Ù½¡‡žvÿ~ÌÜÏó†ìüEwó ß()ÔQÜáËÀ$Ý?eã;¹8Ð ãî"Gle lò7…w±7ãÚM”Ê THàT&¨”yΦsƸ
+.5ºr·ñÜ¿‹xd·>ù×õòë|3ÐÆB~ãN¿à(”]pÄ-¦ ±B‹WrÚ¼°Åä¶m¬äfÒ^€8v &ßèáLœ®†Âs^$Û¬¤Bf <½¿4Çö=¸åÃÅ®âÝ´@DJï+l(ÿsÎ l·•#ßt¬kåØ]¼ü¹U¶›Ä=Æ?EwwBn>/›ß7MãáéºÕæßÙUÌÛOo+ò½*ÞãÚ*ƧõÃ}·Èbwé»»˜Ãü¾\ÝîjÿEzo«ŠÅì9¿ª2§Þž|¨G©AhJ0É iUö͈ âBRá®õhl~æN±Ç#G'ÜaÝø6“\å§c‚FXÛÆ0 „ü?ƒTr¸
+endstream
+endobj
+9690 0 obj <<
+/Type /Page
+/Contents 9691 0 R
+/Resources 9689 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9559 0 R
+/Annots [ 9672 0 R 9673 0 R 9674 0 R 9675 0 R 9685 0 R 9686 0 R ]
+>> endobj
+9672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 738.09 126.546 748.502]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t_a35af6a636096d94d7d66f6c95bc69314) >>
+>> endobj
+9673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 723.988 134.287 734.4]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t_ae6eb5623283386fa0f057cc5df057712) >>
+>> endobj
+9674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 709.887 131.244 720.299]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t_a458b76c082fd59180dc549a9a46d4ddb) >>
+>> endobj
+9675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 695.785 141.215 706.197]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t_aff9e3152e38806e0c52e6fdc3646f35d) >>
+>> endobj
+9685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.678 643.21 189.13 653.55]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t_ade7f7cf4dc47749b20da1a1512772dd2) >>
+>> endobj
+9686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 145.85 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h) >>
+>> endobj
+9692 0 obj <<
+/D [9690 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9693 0 obj <<
+/D [9690 0 R /XYZ 70.866 753.378 null]
+>> endobj
+9694 0 obj <<
+/D [9690 0 R /XYZ 70.866 658.498 null]
+>> endobj
+1602 0 obj <<
+/D [9690 0 R /XYZ 70.866 626.259 null]
+>> endobj
+1606 0 obj <<
+/D [9690 0 R /XYZ 70.866 575.405 null]
+>> endobj
+9695 0 obj <<
+/D [9690 0 R /XYZ 70.866 553.256 null]
+>> endobj
+1610 0 obj <<
+/D [9690 0 R /XYZ 70.866 531.462 null]
+>> endobj
+9696 0 obj <<
+/D [9690 0 R /XYZ 70.866 520.672 null]
+>> endobj
+1614 0 obj <<
+/D [9690 0 R /XYZ 70.866 480.879 null]
+>> endobj
+1618 0 obj <<
+/D [9690 0 R /XYZ 70.866 452.142 null]
+>> endobj
+9697 0 obj <<
+/D [9690 0 R /XYZ 70.866 429.992 null]
+>> endobj
+1622 0 obj <<
+/D [9690 0 R /XYZ 70.866 408.199 null]
+>> endobj
+9698 0 obj <<
+/D [9690 0 R /XYZ 70.866 287.389 null]
+>> endobj
+1626 0 obj <<
+/D [9690 0 R /XYZ 70.866 249.444 null]
+>> endobj
+1630 0 obj <<
+/D [9690 0 R /XYZ 70.866 170.464 null]
+>> endobj
+9699 0 obj <<
+/D [9690 0 R /XYZ 70.866 150.162 null]
+>> endobj
+1634 0 obj <<
+/D [9690 0 R /XYZ 70.866 128.368 null]
+>> endobj
+8595 0 obj <<
+/D [9690 0 R /XYZ 70.866 61.746 null]
+>> endobj
+9689 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F97 8866 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9725 0 obj <<
+/Length 1953
+/Filter /FlateDecode
+>>
+stream
+xÚÕZIsÚH¾ó+tšU¡Óû’›ƒq–Š“ &“šrr¡mTÁÂ#DR™_?¯Õ–@`@¤*sIdÞò½ïm-ppààUçå¨óüB³@##% F·ÂHK(C‘$Áh\‡qº=IixùwW‹ðèK(Ï^¾t{Téðj4ìr~êüßÃÁÅ`8x߇¯ ÃF†ý×gGƒ¡ÿVÂúïή®üGçúŸ.ï ¹ù¿£7Þw¿ŽÞv£Î?æ‬ÌÓiʃñ}çú+&ðÝÛ
+öp ¨2IÆV½ÖÔH>§ÑÃCÙqû³h±ø?ŸŒ|ö¼Ì=Úr,R΋ßáývÙ›ù|¶{™M¤@A0Ø+¨iÇA(ñ’°)f®È¹í—èxöÔ‰Pîzþ×Ø-%õÛzL!Z®õ²-ï ßÅ7>M‡%³ró¡L„ñäèàxñd·UŸ’ÙoiXô:ßnC¼õÑ8ÁÅr«})JïŠÃ¸b™„6Ç{ 9¾›_„À‹ìÇ°½q»ˆ“ø)ÜvÚuD ×ÀÊg>Úò Ïï,—4Ìñ6ñ¿®ç؆*c`:0,pˬ[4ÚL8–/‰Êb„(¦€Rÿq†^²S†ÙcsÑå"L­="KŒ‚Kr²ô /1´ZN'òœÍâ»äx¹ “Co§§ŒÑ6b°Ph/‰0ÚÈ!÷ϳµ6MR %Na¬sZòF“"‡ÛÑÖQBNOê"f·¡×CoB8Çy-ó4¿…¡\œ²ËÿYÆ©Ý·Z«]Õú$!Ú™öö:EÙnÓk˜íÿê*7Ô_:}LçÑ臭ëŽÀÁèA50[Í“¹º:ÓHܵ¼oÈYCò1•(÷b¶U+2Iì$ùW½¹Q6)vÓØ.v3˜b÷îåÔ±¹€Ì©fhïâEær7=&.Ì8+}X´Ì߬᪼i › ó’¨1›ai²kžN`•œ<1˜õi3ü~žÙÑt™|ëC[ÜcÒo,¯)uXê8OÙ“r¯×éÕé½߉uÇ-ßã±Ý\UzDiÄäž³J±IÇC·µ;Ð^GÉdµSîĹïªÓv”ÇSÚ¹ñ~‰ -è¡ËF…]cwjvz€·sÈÂ(?%‰_ÙlhËÙÖý°2A5jù=ÓüºÁîÍ4Å!Lí—iìª3û+v‚¤?µcgÓ·ÝÀxG½ÏSGÎFþ¹Ëü+ð¤iy”jÝå.¢4ý>J(wR|À¯£ü¼¨nî`Bæ…¥$Ÿàëšÿ±ݱ
+endstream
+endobj
+9724 0 obj <<
+/Type /Page
+/Contents 9725 0 R
+/Resources 9723 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+/Annots [ 9687 0 R 9688 0 R 9700 0 R 9701 0 R 9702 0 R 9703 0 R 9704 0 R 9705 0 R 9706 0 R 9707 0 R 9708 0 R 9709 0 R 9710 0 R 9711 0 R 9712 0 R 9713 0 R 9714 0 R 9715 0 R 9716 0 R 9717 0 R 9718 0 R 9719 0 R 9720 0 R 9721 0 R ]
+>> endobj
+9687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 714.424 134.696 724.943]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table_aa3555064fc49ba532bfba36e6734a0e2) >>
+>> endobj
+9688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.182 714.424 211.447 724.943]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+9700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 666.609 168.041 677.128]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+9701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.015 666.609 205.929 677.128]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table_a849ec26ba57874595f0f714bb46db801) >>
+>> endobj
+9702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 655.813 151.839 664.431]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table_a41892b42550203014af3701703acb1f2) >>
+>> endobj
+9703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 396.455 180.657 406.916]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp) >>
+>> endobj
+9704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 318.75 147.814 329.211]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_af6d7b62fe1399bed64dd1b2afea4d910) >>
+>> endobj
+9705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 306.232 160.707 316.644]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a83ac20f871c0985f66fa684fae2dabfe) >>
+>> endobj
+9706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 293.617 163.729 304.078]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_ac77b34762a9058566b3b6ed15f42576b) >>
+>> endobj
+9707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 281.05 171.466 291.511]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a4c07ab26ac49f2909cb512feec7a473e) >>
+>> endobj
+9708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 268.407 139.403 278.945]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a97cbc05e54a81ddb2bd9ee2a29ef2f04) >>
+>> endobj
+9709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 255.966 141.887 266.378]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a2b829f5368f8135970203b9c103e3d62) >>
+>> endobj
+9710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 243.4 177.766 253.87]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a543521ed8c62fa1d04cb848758a487c7) >>
+>> endobj
+9711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 230.833 162.42 241.303]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a2e63345b7712283a702136d12253f46b) >>
+>> endobj
+9712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 218.141 207.668 228.737]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a11b2254b63a25cbbd697f55b52dea80e) >>
+>> endobj
+9713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 205.574 192.322 216.17]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_aa18dc49d6c2f2dca28e7f563fcb1b96b) >>
+>> endobj
+9714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 193.133 145.877 203.545]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a22ea8787ae6e20210aaf7ead672b94a4) >>
+>> endobj
+9715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 180.567 148.37 190.979]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a6778fdbc1ce4755f220f78b5c010cfc6) >>
+>> endobj
+9716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 167.875 209.779 178.412]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a4749a4938d04b79a7c20ba76c862ef75) >>
+>> endobj
+9717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 155.308 204.408 165.846]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_aa262841af280ca25d8e1acfdc1309bae) >>
+>> endobj
+9718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 142.742 187.229 153.337]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_af04d515d1f361c8008becf1370ba35f4) >>
+>> endobj
+9719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.268 130.175 235.091 140.771]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a4f945675b04e0fe0f7fab3a65ae2e69d) >>
+>> endobj
+9720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 117.685 155.345 128.204]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_aafa0d033dae5674d119b4677e991ffc5) >>
+>> endobj
+9721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 69.87 166.123 80.389]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_aeebad767b7267dc0f9ad1fc691f031d9) >>
+>> endobj
+9726 0 obj <<
+/D [9724 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1638 0 obj <<
+/D [9724 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9727 0 obj <<
+/D [9724 0 R /XYZ 70.866 729.186 null]
+>> endobj
+9728 0 obj <<
+/D [9724 0 R /XYZ 70.866 681.371 null]
+>> endobj
+1642 0 obj <<
+/D [9724 0 R /XYZ 70.866 641.931 null]
+>> endobj
+1646 0 obj <<
+/D [9724 0 R /XYZ 70.866 592.345 null]
+>> endobj
+9729 0 obj <<
+/D [9724 0 R /XYZ 70.866 573.083 null]
+>> endobj
+1650 0 obj <<
+/D [9724 0 R /XYZ 70.866 552.406 null]
+>> endobj
+1654 0 obj <<
+/D [9724 0 R /XYZ 70.866 525.541 null]
+>> endobj
+9730 0 obj <<
+/D [9724 0 R /XYZ 70.866 506.279 null]
+>> endobj
+1658 0 obj <<
+/D [9724 0 R /XYZ 70.866 485.602 null]
+>> endobj
+9731 0 obj <<
+/D [9724 0 R /XYZ 70.866 473.615 null]
+>> endobj
+1662 0 obj <<
+/D [9724 0 R /XYZ 70.866 439.779 null]
+>> endobj
+8596 0 obj <<
+/D [9724 0 R /XYZ 70.866 391.021 null]
+>> endobj
+1666 0 obj <<
+/D [9724 0 R /XYZ 70.866 381.401 null]
+>> endobj
+9732 0 obj <<
+/D [9724 0 R /XYZ 70.866 333.512 null]
+>> endobj
+9733 0 obj <<
+/D [9724 0 R /XYZ 70.866 84.633 null]
+>> endobj
+9723 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9770 0 obj <<
+/Length 2999
+/Filter /FlateDecode
+>>
+stream
+xÚå\ÛrÛ8}÷WðiKªŠÜ/óæuœÉLåâu¼3µ•Éƒ"Ó6+²ä¡éLe¿~»y‘ ’H©lj^b[¡ú
+œ¶ß&{|F13\")u?*5ƒÙB#nˆàêÐHÀ•ƒr!‰€1qü•%ÎõžÄ©¡ZEÀ”Š)|Lp_e}ÈX3H­€Ø+³.s»(¹mÙá™o²êä„H´cŠnÔ
+P¢ye©‘÷7ó<½ eKTʨ†pPôv¾\®»Vý>ûIút`œ3âÀaãƹ$øk{dE(5ÀPöCdm¨ !3h¯9µ$ X!õF€…‚…šÕƒ½ÊÓôÀ:ƒY‹«±5* ¸ýo“`´†’`À’0®g†[g˜6ê|™]¯B°œBßEUXN<®|ÜQ©MIÂ@Gš‚ÐYhE-¥v ÀâúÅXnÁ7ŒuŠ1€²?Fvùíà-²+X2ZöÌ®ãa›ìÚ†Ý!ÌAC +.,®ãÜÇýîY]AKcT¿´þý›F-Èf;¾kDC U‹¿øó!ËÓ…74…?PÛ­¹%ø<Þƒ`HA¡,ñòt™Îïÿ&„îŸ1Áƒ æÍjÞ¬ï‹
+Q²¸»›
+5!Á5c
+
+Ùð1@§YýäpRÙQ¤’˜6d R¡%#‡*vM*{ ©DMª7éí§f•1»<®À@}™
+ZªòÍ]R×û`-6UÍÍ›¬µÊ'HõË,”bk{Ѭ~t0ÏÅ3‚˜FI^Â
+b%¯Ø5Ï<ì'<«Îj ÃÍ]F\SÈÎÓ+\Ï4OW‹¦¶”]é×Ð}ML" 'Lô?
+Èz5ËCAc½¸rD2Ù‹šÜh0­c ®Ó}¨É/Ï–#€:E¸f=©)°#t"® –hLÛm\- £Ç€ä |/5«ú´
+ÔaL¹ér8G……j¥c$2¬(1³y:v ƒ±K'Ô(ÚYºVÌÎË-‚_.p7
+»¦Æµ$ ffBr°b@*iJ½DÍÉMº@¤ÏçU×7•ˆ©ôÌ”ÑIxg
+->Žâ¨wÞä Æ©
+QP”F—–¤ªUSº*ò,½MBàZØ!“X—ÍÍeZ_îÚ³„Y3Põ: Öç
+üd‡´ã'"¨†tjû²T¼u+¸aĬØÆÒ×€þ:û”c&ŸçÓÿW¯Dm®à†¾Láaåï"«ÊŒjkhW}•–TÐ"×ãSª‹ü?Ðåfå
+endstream
+endobj
+9769 0 obj <<
+/Type /Page
+/Contents 9770 0 R
+/Resources 9768 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+/Annots [ 9722 0 R 9754 0 R 9755 0 R 9756 0 R 9757 0 R 9758 0 R 9759 0 R 9760 0 R 9761 0 R 9762 0 R 9763 0 R 9764 0 R 9765 0 R 9766 0 R 9767 0 R ]
+>> endobj
+9722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 740.928 172.763 749.546]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a0f9a16d7d03067afcc14f03b1369ebf6) >>
+>> endobj
+9754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 728.312 171.404 736.931]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_adef67ab58a0c9967f138708cae70a007) >>
+>> endobj
+9755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 713.926 178.259 724.387]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a4c8a7b167761f5569db91c7eff9261f8) >>
+>> endobj
+9756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.456 701.36 157.798 711.772]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a240c7cb5222c4880631afeb044c83bef) >>
+>> endobj
+9757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.93 688.744 198.16 699.156]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a498f561d1a94502d3a276d0892b3095e) >>
+>> endobj
+9758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.456 676.129 180.232 686.541]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_af5ddf78e04295c64b71fb2dd5774c39c) >>
+>> endobj
+9759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.93 663.388 230.295 673.925]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_aca92754fed172a437208a1bd26b3a9f1) >>
+>> endobj
+9760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.456 650.773 212.366 661.31]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_af69d973892348be778469bb42b9b3c9f) >>
+>> endobj
+9761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 638.233 184.006 648.695]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a35e52dadb174bd9631bc600d00f247df) >>
+>> endobj
+9762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 625.618 184.006 636.079]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a61320807ed697be5a9a4770d1189b3fe) >>
+>> endobj
+9763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 612.926 253.1 623.464]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a34061cdb7b003e217c59dce00c1de17c) >>
+>> endobj
+9764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 600.311 243.345 610.848]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a0a13911d83978b7366d00e3ff56653bb) >>
+>> endobj
+9765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 587.772 224.345 598.233]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a2625ac2c238d979b11fde6bca8e2fa67) >>
+>> endobj
+9766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.235 575.156 251.504 585.676]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_ab8a4dfa2d41fc9d4fbf67c93e4444bf9) >>
+>> endobj
+9767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.917 562.465 192.219 573.06]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper_a16cc38eefc80ed8bdffe9da4393c0350) >>
+>> endobj
+9771 0 obj <<
+/D [9769 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9772 0 obj <<
+/D [9769 0 R /XYZ 70.866 753.919 null]
+>> endobj
+1670 0 obj <<
+/D [9769 0 R /XYZ 70.866 548.537 null]
+>> endobj
+1674 0 obj <<
+/D [9769 0 R /XYZ 70.866 500.752 null]
+>> endobj
+9736 0 obj <<
+/D [9769 0 R /XYZ 70.866 481.49 null]
+>> endobj
+1678 0 obj <<
+/D [9769 0 R /XYZ 70.866 460.813 null]
+>> endobj
+1682 0 obj <<
+/D [9769 0 R /XYZ 70.866 433.902 null]
+>> endobj
+9746 0 obj <<
+/D [9769 0 R /XYZ 70.866 414.64 null]
+>> endobj
+1686 0 obj <<
+/D [9769 0 R /XYZ 70.866 393.962 null]
+>> endobj
+9753 0 obj <<
+/D [9769 0 R /XYZ 70.866 370.021 null]
+>> endobj
+1690 0 obj <<
+/D [9769 0 R /XYZ 70.866 336.139 null]
+>> endobj
+9752 0 obj <<
+/D [9769 0 R /XYZ 70.866 300.291 null]
+>> endobj
+1694 0 obj <<
+/D [9769 0 R /XYZ 70.866 266.36 null]
+>> endobj
+9749 0 obj <<
+/D [9769 0 R /XYZ 70.866 242.418 null]
+>> endobj
+1698 0 obj <<
+/D [9769 0 R /XYZ 70.866 208.478 null]
+>> endobj
+9748 0 obj <<
+/D [9769 0 R /XYZ 70.866 184.518 null]
+>> endobj
+1702 0 obj <<
+/D [9769 0 R /XYZ 70.866 150.654 null]
+>> endobj
+9737 0 obj <<
+/D [9769 0 R /XYZ 70.866 126.771 null]
+>> endobj
+1706 0 obj <<
+/D [9769 0 R /XYZ 70.866 92.889 null]
+>> endobj
+9741 0 obj <<
+/D [9769 0 R /XYZ 70.866 68.871 null]
+>> endobj
+9768 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F97 8866 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9790 0 obj <<
+/Length 2112
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Ms7½ëWÌ‘¬
+ ñ›V‘6NÅ+3•Úr|©‘Í
+Ej)9[Ù_¿Ý3Cz ‚ä@
+ŽâÒ•¥ëóSVmÆܬiŸ¿‹ø ‚ß;
+ Yhi8ÁÀî&À>à *3Òd0Lª…ý C–ZÊ0;† { ÝPÁîb­à6’B1mÕ³™ãÚ¦5%™å.¤µO«Õb¥a‘ÖÖÈ:A©p\aì3o«Xøáe,^¬4ºÊP˜1ÃsêØ5$I–Œ0ƒêX£,»Ÿ!r¬Š&`n kï‘*dF §ZØ_ÃÚãw(¢‡Öp䮆äÞ"oÒŒ¹O% £‘…{•RüÍ™êY$ŽÖ´õ ŒK‘*×õ¢¾y¬ó ˜©Þ;0´CS7to³6tk#9ØÐÉ’à2aC/€Ýmèöé6t-®3¸ ÍÀ*@CJt©<_>Õ‹ˆÏÆ7•jó!èl¾ø#F=šYÜtó1±”Q!f³^«u–˜Åˆ/p’Ïâ+!¦S
+ •MÊvOZFöi‘q•xyvJ1Þ`/épÒ~Ï\v=Ç1Lˆ˦„dŽ?[¶ÞÆ8¿®ïWOõ«é—¯Ë?.n‹ƒ"F¢šõÒ†"¦“-ó뫯Ë™ø ƒv >¢iŽFµ¿oe †f4#ýöåfk…(Þðܱ^ˆ—²ß ‰¶_,ÓZi¿Ð¸È®éó¸VÁÖÒRÄ®”ç[™v[“µ?ç³:bNb69¶t(šû$àD"Qy’è£B'+@”ÔYgAEýt©
+œÉ’‘zøY°
+*ҧ•Ô¥¢,Ð.Q„Í“(œ®~D ‰Âéê$J>t'Qúȧ’(éÔ€Ï(©öK²´Ãû»Õ€»nuøÅç­Üo¿Ç#T}{¾˜^Ö·WëºNá-¯—Iòð´Ž8.LsL<É•3V‚J¿rv:«C-.÷:ÔdÉpŸÐ¡.€Ýu¨ìÓu¨ñ$Šgg›SDÈÒ£!ü
+ 5~¼=P½Öµ‘Êv#¥BäǦ¤bÉá± 
+÷"ŸŽ¨Ÿë6~ ¡£|àŽŽä£t” »¡£
+endstream
+endobj
+9789 0 obj <<
+/Type /Page
+/Contents 9790 0 R
+/Resources 9788 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+>> endobj
+9791 0 obj <<
+/D [9789 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1710 0 obj <<
+/D [9789 0 R /XYZ 70.866 751.446 null]
+>> endobj
+9740 0 obj <<
+/D [9789 0 R /XYZ 70.866 726.03 null]
+>> endobj
+1714 0 obj <<
+/D [9789 0 R /XYZ 70.866 686.875 null]
+>> endobj
+9738 0 obj <<
+/D [9789 0 R /XYZ 70.866 661.518 null]
+>> endobj
+1718 0 obj <<
+/D [9789 0 R /XYZ 70.866 622.42 null]
+>> endobj
+9747 0 obj <<
+/D [9789 0 R /XYZ 70.866 597.005 null]
+>> endobj
+1722 0 obj <<
+/D [9789 0 R /XYZ 70.866 557.908 null]
+>> endobj
+9751 0 obj <<
+/D [9789 0 R /XYZ 70.866 532.492 null]
+>> endobj
+1726 0 obj <<
+/D [9789 0 R /XYZ 70.866 482.311 null]
+>> endobj
+9750 0 obj <<
+/D [9789 0 R /XYZ 70.866 456.024 null]
+>> endobj
+1730 0 obj <<
+/D [9789 0 R /XYZ 70.866 416.869 null]
+>> endobj
+9745 0 obj <<
+/D [9789 0 R /XYZ 70.866 391.511 null]
+>> endobj
+1734 0 obj <<
+/D [9789 0 R /XYZ 70.866 352.356 null]
+>> endobj
+9744 0 obj <<
+/D [9789 0 R /XYZ 70.866 326.922 null]
+>> endobj
+1738 0 obj <<
+/D [9789 0 R /XYZ 70.866 287.843 null]
+>> endobj
+9743 0 obj <<
+/D [9789 0 R /XYZ 70.866 262.41 null]
+>> endobj
+1742 0 obj <<
+/D [9789 0 R /XYZ 70.866 223.388 null]
+>> endobj
+9742 0 obj <<
+/D [9789 0 R /XYZ 70.866 197.973 null]
+>> endobj
+1746 0 obj <<
+/D [9789 0 R /XYZ 70.866 158.876 null]
+>> endobj
+9739 0 obj <<
+/D [9789 0 R /XYZ 70.866 133.46 null]
+>> endobj
+1750 0 obj <<
+/D [9789 0 R /XYZ 70.866 94.363 null]
+>> endobj
+9788 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9794 0 obj <<
+/Length 1856
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[]SÛF}÷¯Ð£=S¶ûq÷+o”˜|LH¨q›é$yF€¦Æv„ ÿï]­(F¶Ömš—X€tÏêì=gïÝitÑèÕà·éà×C#"C¬R"šžGš£T¤-'ŠEÓ³èÓðàõþñt<íqm†ŠŒöçÃwû''þW/?üq4~?1N‡ûÅ¿Ó7Þö3ð °åCGŒ~ø8Ù?>®ÖMƇãÉøýÁxôeúv0ž¾“Fì~XƌͮŸ¾Ðè ÿö6¢DX}+@
+"Aàõ<:ü> õW•"b”hiUý]#´zÙb´€c§”’«Ó$+ß2Îãòj9»¹Jyœ§Ë…j÷Bí1K(>âÑ݈Ëárœe#df™}¦’ú§DŸâÅ`€.úŒ·„Ö4T÷”?fñj•d/^\=¥K„‘Æè\êu¼á|Û{Ò*²&å>•Æ ž}½I³߈¹·º |ÁôÌýìouí •&’ÙjôŸVYzçÉ'ÈØÃyVZ5‰|‰@”/Ò‚öb&âÜÎÓE⯘þbyî?Ý#ó¤ú£uŸ=%ŠS‰è&Ò\ Q°Q±sŠC—>•ÒýjÄäð®˜ÿl.1©C@sƒ 7‘/—×9™­V#!‡Äa#§8…?>XR;IÎÝÜ%Y²˜%gž­S7Ü;½?ÑÔMî/%ý‹òÖwÈé»ô41:ŒQ/ꮺ—´¤1X€&“þ‡Ñ‰2PP×_'ÊbªI¸p~2Lò¶¼S„€uY§m5K®oæy%Î’…trx³˜Äóùkœ¾yò­2¡ˆ ¦“X¹œE¾Xm/±*%‘6@¬JòÆ»‹5
+LnãsªŸÏá"aÀ†ð9Œ¤6¨I —6WS’¼Æ(‡¨ßvÄÅŸæÉä!­v`}êDZ>‰Õ´
+Q¨¸@ YçëY_óÖ‘·zŸ&ÖÊ
+eY6OOÛê%†wš˜H#pÓÄô"í¸Š:§Zwó…£vO0ý<ÛD<„'`$
+bOè]zB9L·z;L‹‰Þ][±¦d†0¥‚ËQçûZGWŸÅYc¡ë"q\îaÑõ4>
+Žšþíº ¤€­‘§(-ý!]^jMH4Á¼CË
+—:»E˺&¦Û>Ñ!&¸§ýp£Û9$çžõ-–aÝÏ *S„è}]$%Ìnк´ƒ:r ?HOßøü¹6¸VuýýÂE,$ËM÷y_w>¯WØq‹ŽçõÚ g‹ñ~,—ˆ+d
+¹¼ô›ãOý‡?Û4VÀ+ìN6šq*‰TÛ,¶²_ÏˬÅAŠ
+
+endstream
+endobj
+9793 0 obj <<
+/Type /Page
+/Contents 9794 0 R
+/Resources 9792 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+>> endobj
+9795 0 obj <<
+/D [9793 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1754 0 obj <<
+/D [9793 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9781 0 obj <<
+/D [9793 0 R /XYZ 70.866 753.821 null]
+>> endobj
+1758 0 obj <<
+/D [9793 0 R /XYZ 70.866 733.13 null]
+>> endobj
+9787 0 obj <<
+/D [9793 0 R /XYZ 70.866 709.173 null]
+>> endobj
+1762 0 obj <<
+/D [9793 0 R /XYZ 70.866 674.869 null]
+>> endobj
+9784 0 obj <<
+/D [9793 0 R /XYZ 70.866 650.971 null]
+>> endobj
+1766 0 obj <<
+/D [9793 0 R /XYZ 70.866 616.667 null]
+>> endobj
+9783 0 obj <<
+/D [9793 0 R /XYZ 70.866 592.692 null]
+>> endobj
+1770 0 obj <<
+/D [9793 0 R /XYZ 70.866 558.464 null]
+>> endobj
+9774 0 obj <<
+/D [9793 0 R /XYZ 70.866 534.49 null]
+>> endobj
+1774 0 obj <<
+/D [9793 0 R /XYZ 70.866 500.32 null]
+>> endobj
+9776 0 obj <<
+/D [9793 0 R /XYZ 70.866 476.364 null]
+>> endobj
+1778 0 obj <<
+/D [9793 0 R /XYZ 70.866 442.118 null]
+>> endobj
+9773 0 obj <<
+/D [9793 0 R /XYZ 70.866 418.162 null]
+>> endobj
+1782 0 obj <<
+/D [9793 0 R /XYZ 70.866 383.915 null]
+>> endobj
+9775 0 obj <<
+/D [9793 0 R /XYZ 70.866 359.959 null]
+>> endobj
+1786 0 obj <<
+/D [9793 0 R /XYZ 70.866 325.713 null]
+>> endobj
+9782 0 obj <<
+/D [9793 0 R /XYZ 70.866 301.757 null]
+>> endobj
+1790 0 obj <<
+/D [9793 0 R /XYZ 70.866 267.511 null]
+>> endobj
+9786 0 obj <<
+/D [9793 0 R /XYZ 70.866 243.555 null]
+>> endobj
+1794 0 obj <<
+/D [9793 0 R /XYZ 70.866 209.308 null]
+>> endobj
+9785 0 obj <<
+/D [9793 0 R /XYZ 70.866 185.352 null]
+>> endobj
+1798 0 obj <<
+/D [9793 0 R /XYZ 70.866 151.106 null]
+>> endobj
+9780 0 obj <<
+/D [9793 0 R /XYZ 70.866 127.15 null]
+>> endobj
+1802 0 obj <<
+/D [9793 0 R /XYZ 70.866 92.845 null]
+>> endobj
+9779 0 obj <<
+/D [9793 0 R /XYZ 70.866 68.871 null]
+>> endobj
+9792 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9807 0 obj <<
+/Length 2051
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[sÚF~÷¯ÐL_`¦l÷~aÚθ¾´É8Ik“ö!Ƀ ²­)*d'é¯ïY­„µbÁѦéôÅ€Y³:ç;ß~çÝF8úñè‡ÑÑ7çšE)Y4º‰FZÊHŠ$‰F“èMO"Q )íú„âÞñgÏ®Fýw£çßœ¸œÊòr‚ØÃîÊoÝ
+ÏÁˆ2^¯Ú@F‘zÁ÷
+)¾Z0¾|uzÖP¥{W£Ë>ǽ×'#÷ùòìüìòìå |-53½“ŸŽ]º/euO'ÇWWî_§¯N^¿8{YÝeùwôìÕK»…£³ÑÑGÖ+ŽÈ*JZ#My4ž½y‡£ |÷<ˆ½/WÎ".ÜFd]ýr„›‘¡ÈK‚pú‡>ýy:©¢ÄQ"X^Eá-ÆÌ-òlrd4y\#pÀ…5OÙQˆ«UÎ^|ìSÑ›ÿ–Ç‹E’‡³õøŦº¼ð²%>
+ÎzPˆHíGeyçÉdÝ+ÅI!»{¥X#Æ[¹ˆ§émtËÒJÀ-‡\Há»ÅÓé| ¹#6ËôÏþ€à^؆l“ClÃ($qkÅ×®D¶l€Q†áŸQ Z[þm2j–h®àûf‘§q‘¼s+¹h˜Piç&Ù5îŠÓ O³´H登øp¯Ó4KÜ;žË7ó÷j/™&õÿlÍÌã x4ÀË d†ìoïR8KŠÐ
+}"zP‹Àß6ˆô®©F‚øžïæË‹>=d}CL»
+^("¼JÙercé+É“l uSFëÚn÷£{A»H¯ó>À)ÎûXûÑbÜfºB[œU×]•%ìJðE]åRà+Ø2œCÎ5¢Bødº‰  —î@„l"”a®€Ü D±b¤˜³ÄÀÒLˆ‘´”ÔÙ-Å 1)|·7y’ÔŒ´åˆâp<;QÁ"'ˆ›jœ€nÁ6ñû×8îTãRÓò<î^ãRCÉJµ{Àµ«qÏóçªñó>=‡¯Ë›ÿ7´’´ «ÈÄ’µ$ÝM,uw[«%Ïíî²E‚z2Ù‡téñöqÝ€¡‚–œ"ö nºQ
+¥ˆSzJK”î!ຢ”¦ç'(åïb”€\€{46º«Ò2™ïgIVĉ-·3Ï݇â.]ºwãi¼¬Þ¾·«·I–¸Íõöoòù¬¾<i…}ÙKߧÙm!Ã2/u§¤¡"®«H¾…<y‹\öòÛ*—pÙ›rÎèuJU$”*QòéÉ&€Cœ%.Ì8#¥60‡ðÍô¤ñ}¯ÖŒQIuÐâ,l”!²L Žùã°ÃR†Ö¿¯!‹×6—Óä"]«YµF ´÷B¶¾X­˜\Ÿx4¬X£tkæѲò„äãÔc>©°tUä÷ãŠ}lõºz*O7xo@.s5°Ý®ðÿUš§÷“$0 )£[7èÛôæ1ó››inn Ç„
+¢¼A?ß»ô§cÞã¢ÈÓ’î‹dÙB—K‰”VÞ™±{ѺT\:š&O_SRˆå‰XÂ%O÷&gþz’ˆYÁ½Ö6ìµäuR‹<±„øÞû€8KDuì_yYyŠ
+ì,°‹øcH*gII¹âÈŠ%àpFw(L…P«
+5ê›hžš ìTÞÖcdïòþ„) t6 ‰EoÕÞ|á³@" Xñ!fÖ’Â:˜„íc9ä,ÈÚX®n‘gé8°Faó*ðV1Ð:lí1BsÒŽ•Q¥-Vo`š^‡[A Z?Ä(V
+w’6NÜÌq®e)è;ûUû[ª†ß¤[pq´ï„‘÷]èLJBÙövŸº’Í®ÅökBÂJÐ!•ºíù/<¯æ
+endstream
+endobj
+9806 0 obj <<
+/Type /Page
+/Contents 9807 0 R
+/Resources 9805 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+/Annots [ 9796 0 R 9797 0 R 9798 0 R 9799 0 R 9800 0 R 9801 0 R 9802 0 R 9803 0 R 9804 0 R ]
+>> endobj
+9796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 574.544 180.657 585.005]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp) >>
+>> endobj
+9797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 468.213 117.938 476.831]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_a911aefba56b5520426c1b0b373572eef) >>
+>> endobj
+9798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.438 468.213 139.69 476.831]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node_ac0f1c8ec9eaba2718ccff933261300d0) >>
+>> endobj
+9799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 453.169 118.198 463.509]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+9800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.172 453.169 145.335 463.509]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node_ab5d88c341d2a531677933bb47eeb2dfc) >>
+>> endobj
+9801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 441.568 118.198 450.186]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+9802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.172 441.568 144.842 450.186]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node_ac91c9a8615eabc9426b2477b328d7409) >>
+>> endobj
+9803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 151.564 153.516 160.254]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+9804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 69.87 310.407 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__device__number_ae8f7c87064b11830e47ed6336b3138b0) >>
+>> endobj
+9808 0 obj <<
+/D [9806 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1806 0 obj <<
+/D [9806 0 R /XYZ 70.866 751.907 null]
+>> endobj
+9778 0 obj <<
+/D [9806 0 R /XYZ 70.866 727.576 null]
+>> endobj
+1810 0 obj <<
+/D [9806 0 R /XYZ 70.866 692.22 null]
+>> endobj
+9777 0 obj <<
+/D [9806 0 R /XYZ 70.866 667.908 null]
+>> endobj
+1814 0 obj <<
+/D [9806 0 R /XYZ 70.866 632.476 null]
+>> endobj
+8597 0 obj <<
+/D [9806 0 R /XYZ 70.866 567.199 null]
+>> endobj
+1818 0 obj <<
+/D [9806 0 R /XYZ 70.866 558.254 null]
+>> endobj
+9809 0 obj <<
+/D [9806 0 R /XYZ 70.866 481.39 null]
+>> endobj
+1822 0 obj <<
+/D [9806 0 R /XYZ 70.866 426.45 null]
+>> endobj
+9810 0 obj <<
+/D [9806 0 R /XYZ 70.866 384.02 null]
+>> endobj
+1826 0 obj <<
+/D [9806 0 R /XYZ 70.866 357.505 null]
+>> endobj
+9811 0 obj <<
+/D [9806 0 R /XYZ 70.866 336.111 null]
+>> endobj
+1830 0 obj <<
+/D [9806 0 R /XYZ 70.866 315.074 null]
+>> endobj
+9812 0 obj <<
+/D [9806 0 R /XYZ 70.866 290.761 null]
+>> endobj
+1834 0 obj <<
+/D [9806 0 R /XYZ 70.866 255.329 null]
+>> endobj
+9813 0 obj <<
+/D [9806 0 R /XYZ 70.866 231.016 null]
+>> endobj
+1838 0 obj <<
+/D [9806 0 R /XYZ 70.866 195.584 null]
+>> endobj
+8598 0 obj <<
+/D [9806 0 R /XYZ 70.866 144.219 null]
+>> endobj
+1842 0 obj <<
+/D [9806 0 R /XYZ 70.866 135.274 null]
+>> endobj
+9814 0 obj <<
+/D [9806 0 R /XYZ 70.866 84.894 null]
+>> endobj
+9805 0 obj <<
+/Font << /F83 6620 0 R /F11 6621 0 R /F53 6507 0 R /F14 6622 0 R /F97 8866 0 R /F45 6502 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9825 0 obj <<
+/Length 1847
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[OG}çWìSe?x23ß\‘ú@À$DRp*UIŒYˆUc§Æ$ê¿ï™Ý5ö˜Å±Ù©U_‚eïÎ9sæ»Ýðì:ãÙ›×½W‡Ž2Ǽ1”õ®2Ë™3&³^2#²Þeö©µÿvïC¯{ÖîHëZ†µ;FÊÖþû½óóò«ƒÓýÇÝ“^[HÞÚ+þíž´Ñ:\/ZZVwí·¿ôÞít{;íPà™È$'Æ­+0÷ÙàfçÓž]âÇwgä]ö£¸ô&)£ì|ç·ò’kf‹Ø¿?z½»{zxøþ´èÔàü°)ðg†ÛÿM·WéÓIvìj„øáíçGû{ïÂ&´J€Kä˜S*Â=èþ~´ß­Aµ§B)P­fJS„zòñøõ<8N§‡mÂx dŠ¯Ïº‡Ý³îI·y¸ã<œT먗iE÷ìør
+“àÌjo–sÈÆç4 Ó‚‰vGpÎ[ù¬?å—Uþä·ƒéðÛl8‚¯•^Ú3Ï:Q„Räü3çr<,®.nïÏÊ¿£á8/?Y^þ\•Ã£ê·›áà¡
+Ûç8«D¿[PÄVxŽ Ê•w%çÑð¢­x‹]áÇr‡±^:¢¬CÐH- &+Áö'ãÛÙôn0›LËmür/]ôõÁdpw“gý…˜šjĬ0†ãY~ Zùt.•æÇ—¿Ö©Dši)2ƒm8¡¶S)¢!=R”+± tQò¸ºG\{h’;¦œK@T˜°.¦ƒCÛÝ\!vhÒ¿¬×ˆ2)à BAš¾:–Y °U(#”ØZ¦¼Œ/ó¶Ð­ïÃA^SÉÐ_O!9…Ãó+’ÛØòÝÍE>]«<¶q)â.·bSåÉ+¦T’í{Ë›+¯dYù›C+éPcè1åe
+ÕuZüÖT7ÿ'ܯ~¿ÎÇÐÂ÷góVx5ÜÌ—É—&áÖÃñõ²j»…ZóVœ Ì$è"ÛÓ²äýYJ]Tj:½®Ä=ÃmŸ:Z›G´G›’!îÈbF”Mćš^•+Y!ˆ‘,;$nBѦ$Fd¸û#A‡œ÷Çzîè¦Cᢈô5܉9K’f‰@è}Àa-¾Ú¨E`°—V&! 9*¬i¥É’:J#ûÜÄß·ÃAT7ÞSÖ¦Aw–‘1üÚ&
+œÔIÀ)„PhSËà«Åò¨Èóû?˯ÚÅD•KzÆ=‰ÁXÄ :U4¸»·ÉÅ2Çùá°š†nW’$N0ì³ñ€÷ û«\/¿|ºvÚƒiÅr¸ši£š$¾Æب}±™µÃ^É´¦>•ýâñDÃ19ˆÜœ¬$U¸œˆìum†){eCLK+˜H0Z—`8̾ ÀNǺéðGÒ Ã²5 I`šÒ1ðRj­Dí|*YŒ#«I¥àOZõPòÅL§{âX£ÃC›ž3,¤­hæ9å³yNªõœ^ÿÔs„§ÒŠùmUzà9É”+YëVË7Ej‹VuÈÞ<n;=ÊYsFÁvåcF›ØNÍm
+øÐ… ü:Û©1ÌP
+`ø7o(^?P„Z!¹N
+é2ÑZÚôÌaBJ¡ºÂÜŽ™d‹Wá¡©“)°ÃCS+6?q±=LRÍ¡57ÅAwJ—©Be"bÔóTþ’JI*JhóVV¸ò¾±'¨“Ä€“ó°Åiü7mâ¿I£ŠH™Ä‡µŒ¤íüw
+sÿXWWµ†É³iÀµg\ÄØÈÞš űTL”M§V_”ÍÛ§z_¤¶wâ_á}ÃCjkeïVÒV>§÷mNvî}#²kCÜà ImÐa¬‰¡ë#Ü0Žê•
++q§š˜-wßÕ&fKÄüú¬ÙØl…µìÆ¡2[)ÌÍVD`š+ÂŽ·fOô"Šñä½­÷·wÓÉÝ,Ô‡§Îû 2 8-ä"Ý$F-/è†mk¬‚ÆÌ¿ßÛY=š—ÊûKêþ[!ʦ“Ûü§Â2tæÁRš²Wc:<¥fÆT,µ_EþŽ›ä
+endstream
+endobj
+9824 0 obj <<
+/Type /Page
+/Contents 9825 0 R
+/Resources 9823 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9734 0 R
+/Annots [ 9817 0 R 9818 0 R 9819 0 R 9820 0 R 9821 0 R 9822 0 R ]
+>> endobj
+9817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 636.568 137.503 645.259]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 553.373 345.752 563.91]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__physical__device__number_af70cb969cf961da880f25152e41180a5) >>
+>> endobj
+9819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 388.776 137.503 397.467]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 305.581 309.905 316.118]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__number__of__devices_a9303a9c3ac032b4b5b0a892851a55fc8) >>
+>> endobj
+9821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 152.94 137.503 161.63]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 69.87 195.047 80.282]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__report_ad7309406c058934171655b354445eeda) >>
+>> endobj
+9826 0 obj <<
+/D [9824 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1846 0 obj <<
+/D [9824 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1850 0 obj <<
+/D [9824 0 R /XYZ 70.866 724.409 null]
+>> endobj
+9816 0 obj <<
+/D [9824 0 R /XYZ 70.866 702.713 null]
+>> endobj
+1854 0 obj <<
+/D [9824 0 R /XYZ 70.866 681.313 null]
+>> endobj
+8599 0 obj <<
+/D [9824 0 R /XYZ 70.866 628.91 null]
+>> endobj
+1858 0 obj <<
+/D [9824 0 R /XYZ 70.866 619.542 null]
+>> endobj
+9827 0 obj <<
+/D [9824 0 R /XYZ 70.866 568.554 null]
+>> endobj
+1862 0 obj <<
+/D [9824 0 R /XYZ 70.866 537.519 null]
+>> endobj
+1866 0 obj <<
+/D [9824 0 R /XYZ 70.866 488.573 null]
+>> endobj
+9828 0 obj <<
+/D [9824 0 R /XYZ 70.866 466.876 null]
+>> endobj
+1870 0 obj <<
+/D [9824 0 R /XYZ 70.866 433.579 null]
+>> endobj
+8600 0 obj <<
+/D [9824 0 R /XYZ 70.866 381.118 null]
+>> endobj
+1874 0 obj <<
+/D [9824 0 R /XYZ 70.866 371.75 null]
+>> endobj
+9829 0 obj <<
+/D [9824 0 R /XYZ 70.866 320.762 null]
+>> endobj
+1878 0 obj <<
+/D [9824 0 R /XYZ 70.866 289.727 null]
+>> endobj
+1882 0 obj <<
+/D [9824 0 R /XYZ 70.866 240.781 null]
+>> endobj
+9830 0 obj <<
+/D [9824 0 R /XYZ 70.866 219.084 null]
+>> endobj
+1886 0 obj <<
+/D [9824 0 R /XYZ 70.866 197.684 null]
+>> endobj
+8601 0 obj <<
+/D [9824 0 R /XYZ 70.866 145.282 null]
+>> endobj
+1890 0 obj <<
+/D [9824 0 R /XYZ 70.866 135.913 null]
+>> endobj
+9831 0 obj <<
+/D [9824 0 R /XYZ 70.866 84.925 null]
+>> endobj
+9823 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9843 0 obj <<
+/Length 1959
+/Filter /FlateDecode
+>>
+stream
+xÚíZKsÛȾëWà”"«ÂÙy?TµY¶ly#1'ïh Ò²B‘Ú•üú|3xC‚ILtÊŤ  û›¯ûëéfOÍ~9ù0>ùéʊ̧µÈÆ™¡ÄjljfÙø!û2ÐD)2iΟ®Ï‡Œ=¹Ÿüë„ÁÍXƘ B™ðŒ¥.»>ùòÍpñ׌álö#ÜúœÁ¨Ã—Yvwò÷çŒiB¥‰¼¼þpzúùêêãç!§ƒ³‹ÿÆæt
+ÿÆkãÕß]ÿrsöñòb8âÆ®oÆ—·WC $CAç—åÏ·—W—·—7á¿’«ÁùßÎ~ÃåE]‘wþñìî®üéâóù?>]ÞŒ‡Ì¯)ü;¾þ|³¹¶:ÖË宥I%ˆ’¢Ym‡X‰ŒQbXjÅX3B[A–„ GŒR:¸È‹Ét–?T`ó—ûåô[1]Ì=ÀŸ®¤jqF³s„—V.òß)åói¸7<<)ÊÏÙtžWtðòsñX~ú'fÕµçé}G|±xŠ¸É÷°ðFP™£¸Áb  Zølúu(é€<âb¹¼˜¬Ãò¬Ùˆ»^¯tñŠ®óÅü¥X®î‹Å²\Æ_⢟/÷«ç|^L^©Tb•/«¯KŸñ‹UÑP×MPD:•i'Uì0~"ÿLX¬„%Iñ†ŸÓÓÅ#¢$“‡®è(h–§po 1‚Çî—ù·@;apE §6 ®àÞÙ­0ê¬Ut8RJ¦ó"ò™0È—¯×þ9?üÜ-áe–
+¥s¼-£ÝasN
+
+¿P¸³¼í·u¢»%(Á\”¹Eä¹h;³QFØá ¿oÝa<hóZäÓÓ-57ÒŒs‹þ—µ—õ£x\-â9šc£°RþC᎔9ÃA]o§Ì™Æ¬ìvɼ}`ШÜËô‘ª[2O¡JX¢Vì¯Ëþžk]¶=ï­Ìþîke¶Ýï«ÍÞÞkmF¬ï¥Îþ®+uF®}7w˜6P¦=V™ Ÿ‡®µ[™ "kù
+endstream
+endobj
+9842 0 obj <<
+/Type /Page
+/Contents 9843 0 R
+/Resources 9841 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+/Annots [ 9833 0 R 9834 0 R 9835 0 R 9836 0 R 9837 0 R 9838 0 R 9839 0 R 9840 0 R ]
+>> endobj
+9833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 640.192 137.503 648.882]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 559.234 268.929 569.771]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__signaled_a3c2949112e9933ad21ca698041b782e7) >>
+>> endobj
+9835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 399.591 137.503 408.282]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.51 318.633 193.425 329.229]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status_ab16c875893f080500c013be2a6390070) >>
+>> endobj
+9837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.653 318.633 293.568 329.229]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a279f28911863f7da1286cb9fe21e0e2f) >>
+>> endobj
+9838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.51 305.465 230.679 316.002]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status_ac93826b35d468f7a35b7c80f8776fe17) >>
+>> endobj
+9839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.57 292.296 221.184 302.833]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status_a02fe14c587991f9bd98dfa4236687805) >>
+>> endobj
+9840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.57 279.127 237.897 289.664]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status_a953a04e17452ae0ee3c30fea37295c22) >>
+>> endobj
+9844 0 obj <<
+/D [9842 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1894 0 obj <<
+/D [9842 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1898 0 obj <<
+/D [9842 0 R /XYZ 70.866 725.96 null]
+>> endobj
+9832 0 obj <<
+/D [9842 0 R /XYZ 70.866 704.716 null]
+>> endobj
+1902 0 obj <<
+/D [9842 0 R /XYZ 70.866 683.769 null]
+>> endobj
+8602 0 obj <<
+/D [9842 0 R /XYZ 70.866 633 null]
+>> endobj
+1906 0 obj <<
+/D [9842 0 R /XYZ 70.866 624.263 null]
+>> endobj
+9845 0 obj <<
+/D [9842 0 R /XYZ 70.866 574.181 null]
+>> endobj
+1910 0 obj <<
+/D [9842 0 R /XYZ 70.866 544.478 null]
+>> endobj
+1914 0 obj <<
+/D [9842 0 R /XYZ 70.866 497.316 null]
+>> endobj
+9846 0 obj <<
+/D [9842 0 R /XYZ 70.866 476.072 null]
+>> endobj
+1918 0 obj <<
+/D [9842 0 R /XYZ 70.866 443.169 null]
+>> endobj
+8603 0 obj <<
+/D [9842 0 R /XYZ 70.866 392.4 null]
+>> endobj
+1922 0 obj <<
+/D [9842 0 R /XYZ 70.866 383.663 null]
+>> endobj
+9847 0 obj <<
+/D [9842 0 R /XYZ 70.866 333.581 null]
+>> endobj
+1926 0 obj <<
+/D [9842 0 R /XYZ 70.866 264.371 null]
+>> endobj
+1930 0 obj <<
+/D [9842 0 R /XYZ 70.866 217.209 null]
+>> endobj
+9848 0 obj <<
+/D [9842 0 R /XYZ 70.866 195.965 null]
+>> endobj
+1934 0 obj <<
+/D [9842 0 R /XYZ 70.866 175.018 null]
+>> endobj
+9849 0 obj <<
+/D [9842 0 R /XYZ 70.866 164.751 null]
+>> endobj
+1938 0 obj <<
+/D [9842 0 R /XYZ 70.866 128.001 null]
+>> endobj
+9850 0 obj <<
+/D [9842 0 R /XYZ 70.866 117.735 null]
+>> endobj
+1942 0 obj <<
+/D [9842 0 R /XYZ 70.866 80.984 null]
+>> endobj
+9851 0 obj <<
+/D [9842 0 R /XYZ 70.866 70.718 null]
+>> endobj
+9841 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9902 0 obj <<
+/Length 3337
+/Filter /FlateDecode
+>>
+stream
+xÚå\[oÇ~ׯ P  p2÷‹Ð°e©qàD®¬ä%ÉE®¤EÈ¥J.“øß÷œ™%Í!gyñŽÛ}±hiwÎý;—™!í=õhï¯ï/¾¾±¢g‰ÓZôî{†«uÏ8N4ëÝOz?÷¯¾}õþþún0äÆö5 5çý«w¯>|¿zs{õã÷×?ܧýWþßû··? †Æ* /(Ó¼s{sóîv€½ysýáêîíûû¤ýÛfé­%ï®o®ï®¸ºüzÿÝÅõýÅ¿.0L{làµÄrÙÏ.~þ•ö&ð·ïz”g{ø'g=©QRÀçiïÃÅ?/è¶Ð*%´f„®¥.«ºx í‹_¨¢¿•Õä›ñ>?LB¹ó/s}ˆШÛ0³ÏŠæö¸
+¾ ?¼'½z³Ï‘ȉèΑ
+HºÕ7År¼(_êµ ®¦£e£í»âqàA­¨ÆEpdx·ç€C ˆPðeNŒl|þ/e5ž®&ëGÙÖ“€¯$§áÁ¿¥3~¡æ‰ùãã4‰#Ì€ƒIÝÓJpìƒÚÅØŠÔdÆ
+B èÚ •”%B†•mŒ^Ì^êu¬¶ª
+¹lÒZîˆi
+Zùì¾ÕX ì-òûW×ò‡¢¬×É#Ðë
+žbr†ÌÂàXé$kï×l-u™s°Ø^]–,evêiäúµ§¢N$bÀgÇÇ}¡]§¾„ÍÂJ̬¹`„›ƒ(T…FÛˆè¤Ña«½¶Àg§ ƒç(‡ýõ¾€<âuÛXÛlËñ¨®Ó¥=db
+F4¶ÊH¢yXIÙeÆóìª?–UjP
+ÅDÒ2³ã1风ëS‰p§Ûi:ÕÏi•S"¡‡”8âp@N
+ÂDXiã(k•cÎœ¯êôðMó,ô D<Û¡®Þ´.§¯H=-j(À‚s]ÕÎýJQež  ‘g  ‘²ìÍ  Ë²MÏ­
+:¹ER¸Ç”¿CÚ2ïÐ#ØçvHQ}ÜÞ! Å}Òên!¶¦Ê}²ïÏ¡òLJN‚á0ʤê
+e.eÜÍÕ.¦Ü´yÅâójðkÇtÖÌšÖ¿¿­Y¬¢:¥6øhÂJØ|×?”NÜæ ¬4W6¦|\ÿ»ùC±i£ö6 ërŠ7ͬÿî+6›ÿ™Í„Í&ICX³SL¯yûd—@]¬@‚'Œä$¨\[p
+`õè÷Q“u;‡¶Z£î\pnúxÌÅx¾ªjb­ °7ÕâÄ1Èæ¹X¶Íðå0)…{ºgÍÃgårœÊ t›CqBKfGqX@5 1˜ëáNæp ÜØà"í@ié¥ß¡ÉAÚoÐìËžcJb
+º&fmØ é6 G°&¬Ä×Ö—9^ÚHÍÝ5¦1ƒ®†æ†é˜î! †“RmÜxÂB´tg oPà"bl´üXSƆv×q—/X[ãèQä0¶ÆÑcS…Tó
+¢£.ŸVóUêè€ÃiÏAÝ9"9©·ºçp%Yí!Ø1¢zÈÑ6i¯<R¼¯7ÚJ)M*ËEj.†§7l<½avLÐÌü°Óé.±tÄZsŽÈ“e¢ŽÌÝ%†$Ž·ÊÚ%÷:nß^ÿ„Wï‰AÁÏ:ší¼û*¥hníž}Áä«r¥ˆEmÕ'’©‘”$L6%„?ï”ëñ˜zX$œ‚œ†Ú¼3qN-ƒÛÄÛáCh¨5t²Âù›JÙSñã`Á=å™'ö’à
+[?õ†xíÌ ¶ŽŠ˜™ÿvØb? ²%ûöc,Œ0P¦}ÊmÇó8ŠÆ‘Œ]_à;vrˆÊ” Ç-ˆˆðùç†ü ½<9žÏ^Vuq:}šËÌ€ÎEy™%ÇI"”F²SqÂXX‰ËcÅ3Ê_ÆÍ@÷‹év¨ãyØfïÎç¸ÍnbÆZëxÉ!æd¶¦­ýT ÷: ¦ÖªëÉcéבŠ|> ²7¤ÄÎÄ#Šëˆø™Áíô!"çq‘ñ´…9îËùAÞÍàÚ…CßÉÖ‚;ËžÁ»ït¦Åo'_°¢»Nz`>S(B­§¨Š(&­ìÅ?4Ã=¡kð÷œÎšÛý5)=‡þ&‹¾9^ÈÜÑ÷¦bÏ]
+endstream
+endobj
+9901 0 obj <<
+/Type /Page
+/Contents 9902 0 R
+/Resources 9900 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+/Annots [ 9854 0 R 9855 0 R 9856 0 R 9857 0 R 9858 0 R 9859 0 R 9860 0 R 9861 0 R 9862 0 R 9863 0 R 9864 0 R 9865 0 R 9866 0 R 9867 0 R 9868 0 R 9869 0 R 9870 0 R 9871 0 R 9872 0 R 9873 0 R 9874 0 R 9875 0 R 9876 0 R 9877 0 R 9878 0 R 9879 0 R 9880 0 R 9881 0 R 9882 0 R 9883 0 R 9884 0 R 9885 0 R 9886 0 R 9887 0 R 9888 0 R 9889 0 R 9890 0 R 9891 0 R 9892 0 R 9893 0 R ]
+>> endobj
+9854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 709.683 137.503 718.373]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+9855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 604.719 190.439 613.337]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements) >>
+>> endobj
+9856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 591.926 155.48 600.545]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra) >>
+>> endobj
+9857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 542.128 166.661 552.647]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_acbee2b3710281a82761a4c43df2a3010) >>
+>> endobj
+9858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.661 542.128 270.938 552.647]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+9859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 517.429 174.401 527.899]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aab8dc6cc0ef9aa66fe984c9c21ffb7d4) >>
+>> endobj
+9860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.094 504.587 144.003 515.048]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aa55aebd54fc2b0e50054a2e174616a49) >>
+>> endobj
+9861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.952 504.587 322.694 515.048]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+9862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.716 504.587 392.442 515.048]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+9863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 479.889 167.279 490.301]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a09b5fd9b7c7e7dd10921bbd6edbfd8f2) >>
+>> endobj
+9864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 466.971 159.299 477.508]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a0834aab1b22604ccd796e34b2d1cf92d) >>
+>> endobj
+9865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.93 454.178 252.212 464.774]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a917c132c29b514a00ee2ca7819a22409) >>
+>> endobj
+9866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 441.511 174.401 451.982]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aab8dc6cc0ef9aa66fe984c9c21ffb7d4) >>
+>> endobj
+9867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 428.67 191.936 439.131]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ab7257af1f8d13c67980eda9f93141006) >>
+>> endobj
+9868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 415.801 195.756 426.338]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ad63eea99495750590c06bef45b429486) >>
+>> endobj
+9869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 403.008 182.997 413.546]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a4eaa40d03128dd3b6d3c1cecd68d2811) >>
+>> endobj
+9870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.483 403.008 222.225 413.546]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+9871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.27 403.008 289.996 413.546]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+9872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 390.216 184.871 400.753]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ae35ec424df3f17540f77fbcdf1a1443d) >>
+>> endobj
+9873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 377.549 191.12 387.961]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a141572ebe61f436a34381562cb412a9a) >>
+>> endobj
+9874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.613 329.521 165.522 339.933]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a47a9c53d325596c50a79c081854401d7) >>
+>> endobj
+9875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.347 269.489 268.944 280.008]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aef229fc1f13589501f179346aae67e67) >>
+>> endobj
+9876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.234 256.697 240.831 267.158]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a874b8000f3cceedaa58f4d815b42cbc7) >>
+>> endobj
+9877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 208.718 191.067 219.13]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_afb4afe423302388b6c5a4047b49db03c) >>
+>> endobj
+9878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 195.876 185.346 206.337]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a3847f7d1b8e4cf8e7630ecc1ddca4358) >>
+>> endobj
+9879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.832 195.876 224.573 206.337]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+9880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.618 195.876 292.345 206.337]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+9881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 183.133 180.469 193.545]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a88ca7baae312e7bd7f5b46984d573a46) >>
+>> endobj
+9882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 170.291 186.96 180.752]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a1e0247d226d9364c39d17eec5b559a87) >>
+>> endobj
+9883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 157.422 248.504 168.018]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ad3e43392b19ddfbf01a9fdebc5b0465f) >>
+>> endobj
+9884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.926 157.422 303.314 168.018]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.975 157.422 373.363 168.018]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 144.63 257.47 155.226]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ae7294043e5a5c8949934fd94e718dde8) >>
+>> endobj
+9887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 131.837 191.174 142.375]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a843b6dc4f76bd6f15a4096d1e667f6be) >>
+>> endobj
+9888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 119.17 150.593 129.582]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a11679cd702e2a2dc13c8de54b6f1dcd9) >>
+>> endobj
+9889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 106.329 196.195 116.79]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a2813e5a4daf60e66e76c85d8506b2210) >>
+>> endobj
+9890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 93.536 197.971 103.997]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a3134e57ccccde1fbd90ebe239729417f) >>
+>> endobj
+9891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 80.793 146.792 91.205]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a75f4aed043877dacada44439d58a6dff) >>
+>> endobj
+9892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.136 67.875 164.949 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a3dddb64946a9ebef9a415cc4208ac896) >>
+>> endobj
+9893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.356 67.875 200.744 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9903 0 obj <<
+/D [9901 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1946 0 obj <<
+/D [9901 0 R /XYZ 70.866 752.081 null]
+>> endobj
+8604 0 obj <<
+/D [9901 0 R /XYZ 70.866 703.345 null]
+>> endobj
+1950 0 obj <<
+/D [9901 0 R /XYZ 70.866 694.416 null]
+>> endobj
+9904 0 obj <<
+/D [9901 0 R /XYZ 70.866 617.619 null]
+>> endobj
+9905 0 obj <<
+/D [9901 0 R /XYZ 70.866 556.89 null]
+>> endobj
+9906 0 obj <<
+/D [9901 0 R /XYZ 70.866 344.143 null]
+>> endobj
+9907 0 obj <<
+/D [9901 0 R /XYZ 70.866 282.094 null]
+>> endobj
+9908 0 obj <<
+/D [9901 0 R /XYZ 70.866 223.431 null]
+>> endobj
+9900 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+9983 0 obj <<
+/Length 3150
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\[sÓH~ϯÐÓ”]µiú~¡¶¶
+ˆ³Ã6˜yax0±TëÛÚ
+³ì¯ßsZ’QËmÇŽ:»¼@rç~ë#Óì.£ÙßÏ^ŽÏž]Z‘Yâ´Ùø63”X­3ã8Ñ,O³OM”!ÃsÍùàêòòÍÕÓÁ‹‹‹Ñ‡Wׯ߇’®®‡çÜØÁ«7/>|¨~¼]Ž®Gï^†çÆ*9xõë‹÷ãQýœ®k=qõêãÛÑ»ñáéþÏñë«wÃÏãßÎFã³1 ˜flK µÄr™ÝÌÏ>}¦Ùþï·Œálö§ržI%ˆ’~žeÎþqFk¦i›y©ZÌ[C´™ÑŒÐ†û?8WžŠæcÙ§s¥ôàËr9«d­ïjú®ýÈÒd6[Þì2À„$ÌJÂõ!@nKý.µLhb É]•ë¤4ð¤J
+”qBöx7GYlq×±Ž­í(¢!¦¸[€¿±ÐÏ…†…ÍΙ Æê¾­Xe$º ¸©Í DidŸðò¶®:‰C¼òänÊIYÄâ¨bDÀçÀ*I¨!l<jOʘÚ#eˆùEÒx 2*KÀ>—œ@4Ýe?bĨe#6OlÄB ŒN’ÖVäΣ,%Æ¥À1RÝÁœL§ë|³yƒ‚P?ô·'AÐzóÏ…yßgJ+“"
+&Ë[d}9™ÆtË} Š9ŸúèVmª“ åÛ xƒuø?c1J£šR kõ0 ‘çù|¹ž :øQ(…Ì-TlNQ\u°'‹É]¾î*K0é-úf¹Ø@BDͨĬ$¤O±ÝÂL.S0,¦êÃ_ò»bÉ^pQ%{äm½¼/‹E!Æjð€´XG@ù!-Å´KÈÊým¬
+?‡øŽªv¨$k^߯‹oXá ^ý!/Êr]TEOÙñ¿Š®:¢½=•­#4)È­Ó4DŽìU ÊêÍã3 ˆÈ™Â»'Ùk¢E‰ÕIRÊ#æÐ-0“ïä¨ ‘ãóSËàI—Ûxx<ÀÜ™Ÿþ0|™x¤Ý×ò¦Ø¢bšV”hè;•Pòõ˦P¬Òê$­ì¶h,×Ëa|.Ã,'òol ©¶!v¼sj ßÊ-üÑâ®wtBÌ/‡ ªy|,§A
+—Àùd^Lw¥* qêÈ©n=$Dñ=NÀ
+®gU¤4žD‰®)âç«ûhë`±7NkqÉ'D­gwµ|6û ÅÍc-/µü!Bñò‡“ n9¦V18pJ‚mpàÔÁ>R 8òÕÂïC=Ì›¤ƒ=…$B³§è)à §2 ¾Œ²ï; âó' m‚±è>Ñiî“Ì#H-ºÑ¿ë&ÿù™‚8M~âùálOB†6¶ïºœ«jjå@z†Ì@¢· `¡S°¾0
+µu{„kWê¸2
+‡£'—NLЗ„2Ϲ^“dÈáRøƒŒ“ÊËJËRà
+K„a!p¹,'³}å>…ªÅžì ±aŸäP´QÓ܇QjŽ÷õn~2®uÝo¹7×D2ùáZW*RHïQ g2Ör1ë÷t™W.ï7e±\š¾u·T{§4¡qE€N)XI¯$íp$TÄyÝGߣ±1«ƒ¾¥?$ÇËt"N»¹º=3…<Íl/ñ:Vð˜7A(*N-úõåدN‚@ÔÜÇžŒº—NA
+ôéÂR_AôÙ‹
+¯ïúÇÇþ5ñ±MPTƒ~R BáN
+‡'M
+L%¡v0!æ/6Õ$$(.ÇjÙ‘ü!/v~'í¨Ø¿m6]nÊq1Ï··îŸ†NÕ8—Þ§q³Ç á7Ó=×Ó5¯N2¬YŠD–b¯â}–L
+-¹×sõÀ¥7®z1ÎŽwëØ"iãÖÜáv±KàÖÜApêíÕ è©½ºMϼœ
+DÊ$ö'ñfÛ³zK¬m-N·ÈyüIí$˜ÜvŽ‚ÂCüT& ásFžjÐJ<Ò  À7Óñ[,T/°~á´þþŸnÚFîØ—Aرü”¯
+òðJµ/#ñ ‘ ÊÁ—±xÍ»Èÿ¹Y
+endstream
+endobj
+9982 0 obj <<
+/Type /Page
+/Contents 9983 0 R
+/Resources 9981 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+/Annots [ 9894 0 R 9895 0 R 9896 0 R 9897 0 R 9898 0 R 9899 0 R 9935 0 R 9936 0 R 9937 0 R 9938 0 R 9939 0 R 9940 0 R 9941 0 R 9942 0 R 9943 0 R 9944 0 R 9945 0 R 9946 0 R 9947 0 R 9948 0 R 9949 0 R 9950 0 R 9951 0 R 9952 0 R 9953 0 R 9954 0 R 9955 0 R 9956 0 R 9957 0 R 9958 0 R 9959 0 R 9960 0 R 9961 0 R 9962 0 R 9963 0 R 9964 0 R 9965 0 R 9966 0 R 9967 0 R 9968 0 R 9969 0 R 9970 0 R 9971 0 R 9972 0 R 9973 0 R 9974 0 R 9975 0 R 9976 0 R 9977 0 R 9978 0 R 9979 0 R 9980 0 R ]
+>> endobj
+9894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 758.07 169.01 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aa19784867e17f420ecac36ebafd0811d) >>
+>> endobj
+9895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.495 758.07 204.883 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 744.409 186.189 754.821]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a95548e370f8b7353c394fb784a917df9) >>
+>> endobj
+9897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.675 744.409 222.062 754.821]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 730.622 179.958 741.034]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_af5b446764d8eb5cc3ca82adf0174f0c8) >>
+>> endobj
+9899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.443 730.622 215.831 741.034]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.535 716.711 241.902 727.248]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_af027599ed02c5347a661bfcfd89a4cd1) >>
+>> endobj
+9936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 690.969 189.166 701.565]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a336522cf87dc689bde59520e23e47c89) >>
+>> endobj
+9937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 677.183 240.623 687.72]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a024c93eb6660ff128dbfc81af0f091ee) >>
+>> endobj
+9938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 663.396 176.102 673.992]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ac1024886c04bd3c7b094d0d0c6f3c2a8) >>
+>> endobj
+9939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.588 663.396 225.165 673.992]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+9940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 649.735 154.054 660.205]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8) >>
+>> endobj
+9941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.554 649.735 227.685 660.205]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a3a96a2a58e503e53d8ef0d5fb4c9b6c5) >>
+>> endobj
+9942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 635.949 166.661 646.419]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a15f4058a461fb6a409458a0d233ea309) >>
+>> endobj
+9943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 584.579 127.164 594.919]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+9944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 584.579 202.943 594.919]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aa603db80cfad55de814e03aeca166d39) >>
+>> endobj
+9945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.743 141.116 581.132]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_abcfdcc46c4397479935682c09d3e6cce) >>
+>> endobj
+9946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.616 570.743 207.412 581.132]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_abf5a7f91a55db953f4e532bdd8708404) >>
+>> endobj
+9947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 556.88 124.681 567.346]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine) >>
+>> endobj
+9948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 556.88 171.987 567.346]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ae4c63a9560566877d23ee4e915dc839c) >>
+>> endobj
+9949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 543.17 179.231 553.559]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aead329a2de8124cf958f35265d569f24) >>
+>> endobj
+9950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.137 529.433 192.923 539.773]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aa2486bcdb2377207ac5e3d7d7235fb04) >>
+>> endobj
+9951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 517.368 138.614 525.987]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller) >>
+>> endobj
+9952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.114 517.368 158.779 525.987]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a608cb7f9f0e3c9eaa6722615ed3c968b) >>
+>> endobj
+9953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 503.582 138.614 512.2]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller) >>
+>> endobj
+9954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.114 503.582 164.267 512.2]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a5062a485612e3d23575052ae84d1bb65) >>
+>> endobj
+9955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 488.074 134.373 498.486]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aef229fc1f13589501f179346aae67e67) >>
+>> endobj
+9956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.873 488.074 212.137 498.486]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a6643a87273da09cb32f1420b9f4fe2c3) >>
+>> endobj
+9957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 474.238 134.373 484.699]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aef229fc1f13589501f179346aae67e67) >>
+>> endobj
+9958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.873 474.238 206.883 484.699]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a2a21a15e056b0c0d7df8a577f383a17e) >>
+>> endobj
+9959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 462.223 130.518 470.841]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+9960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.492 462.223 167.894 470.841]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a3545fba718646b1f351f6aa98e8016d1) >>
+>> endobj
+9961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 448.436 130.93 457.055]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra) >>
+>> endobj
+9962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.904 448.436 191.108 457.055]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ae8c3f9587992eb3efb26e3a3aeabd5c7) >>
+>> endobj
+9963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 434.65 156.314 443.268]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a4e1fb5e3971c1f318654fc4825902733) >>
+>> endobj
+9964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 420.863 156.054 429.612]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+9965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.027 420.863 200.639 429.612]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a854ce7e192113d446f627634d0b4b78b) >>
+>> endobj
+9966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 405.355 172.139 415.767]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor) >>
+>> endobj
+9967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.113 405.355 231.913 415.767]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ae8a586f87f32aa6cbae31ea1aaec90e3) >>
+>> endobj
+9968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 393.291 198.249 401.981]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a27e952f9157f838cb680eeabfaebd734) >>
+>> endobj
+9969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.076 379.504 196.715 388.253]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a0185dca5a346fc4cd1166da85b81776b) >>
+>> endobj
+9970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.578 363.996 192.91 374.466]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a847e2bb4ba83788d35bf40ff663d3224) >>
+>> endobj
+9971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 350.21 189.919 360.55]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a70dd992a4af0fe1947475816bbaebca1) >>
+>> endobj
+9972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.578 336.423 198.397 346.894]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aea9703dbffa4547f5c6897b8509674dd) >>
+>> endobj
+9973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 322.637 195.406 332.977]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a766e59acc0d372a22255e1ecbd12b8c5) >>
+>> endobj
+9974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.93 310.572 247.218 319.321]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a1019fdeeeecf0bfd720ce8066ac62020) >>
+>> endobj
+9975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 296.786 179.715 305.404]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a0140420e666f71eb158f235ae2182799) >>
+>> endobj
+9976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 282.999 185.203 291.618]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a195e410b919f7a945cd6f2bc78a0ced0) >>
+>> endobj
+9977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 269.213 194.563 277.903]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a52c3f4dbdb4442c57a3d1618839b6f2b) >>
+>> endobj
+9978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 255.427 134.373 264.117]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_aef229fc1f13589501f179346aae67e67) >>
+>> endobj
+9979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.873 255.427 174.524 264.117]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_a18109d2903bb718a0c2742016f39c250) >>
+>> endobj
+9980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 241.64 179.877 250.33]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_ab86c0d4f113248f6750c60df60cd3ffc) >>
+>> endobj
+9984 0 obj <<
+/D [9982 0 R /XYZ 70.866 789.024 null]
+>> endobj
+9985 0 obj <<
+/D [9982 0 R /XYZ 70.866 599.709 null]
+>> endobj
+1954 0 obj <<
+/D [9982 0 R /XYZ 70.866 225.431 null]
+>> endobj
+1958 0 obj <<
+/D [9982 0 R /XYZ 70.866 174.061 null]
+>> endobj
+9922 0 obj <<
+/D [9982 0 R /XYZ 70.866 150.151 null]
+>> endobj
+1962 0 obj <<
+/D [9982 0 R /XYZ 70.866 130.729 null]
+>> endobj
+9921 0 obj <<
+/D [9982 0 R /XYZ 70.866 118.249 null]
+>> endobj
+1966 0 obj <<
+/D [9982 0 R /XYZ 70.866 81.351 null]
+>> endobj
+9981 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F11 6621 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10025 0 obj <<
+/Length 2147
+/Filter /FlateDecode
+>>
+stream
+xÚíZÉrÛF½ë+pJ‘Uædö%U9(•¥Ë‘™\h’Y% 9ñßç \@ ¸Iå‹À¢À^_w¿€& M¾¿øntñõ‰%Nk‘ŒîC‰Õ:1ŽÍ’Ñ4yß»úáòíhx×pc{šôšóÞÕëËwïÂW×·W¿þ<|3ê3N{—åßÑ·oúc•Ä”©~s{sóú¶ïoº¾¾»ºûñí¨/iﶽ%ònx3¼¾¹ö?Œ~ºŽ.þ¸`0˜&lm µÄr™Lž.Þ Éÿû)¡D8›üYÞù”H%ˆ’Ÿ“w¿\Ðm§•H%F9½íµf„®Ü. ý£”ö®òlY,ž'E¾~UùžÖ¿¾Î'ÏOiVŒ‹YžyãKM›ðÒdÀ)¡F·÷¿S*òñr&‹Ùr¾ù&òe ¨éýNE$™ìͲ"‡»áÌ
+"ŒT)|–MÓ>S½¿^½Œ"·š0—ɳv_·á*tÜçÁB%׺W/õ
+xo;P+¸ ÒÕÕ.õçeˆ “‰ÃͼÌ.w„)·
+‹·-<CŒ«{‚¨W‘
+I”Ыû>æùcDgDÛM–/ã ¹D}©ó"QÓ%9PJU=Oãl:.qÃhïKßÒ^ÌÔ‡ö€/I1Æ$ƈSªÙ'ã‘Àƒps!Z¸dJ/¢¢ª”|žfOó˜’!ÍÊ‹5ö~È—Åhö”.®ÇÅ8
+gˆ–ü (¤Yƒ¢ðÒ"¥¤ ¨:ð›+ 0¨ºãÓµùõºþ·¬W¬²Þl¹È¼a«{ÞϲÇY–~÷IµbÎ,áÜU½‰‡\§
+Ïfe'+›Û¸W/'|’&\óûpõ¿xLWß5vN=VÚ.*SŸ±šåœ
+¢ä¿«÷'dž|"‘  ˜àÄR`Y@ÝÓƒ#€±SlB.hDºˆd/°¸ÝÈC˜|#gŒñÆÔÁ1¦Él"ÔÉú\9&w†¶ÊV–„²}ò¼$EíÿÉ;!y\´Kê…£—w<H¢«©PŒiëôµ‰¼UD(}}jÐÇu²_EdIDJ­%ͳÏ㢡}
+[Œ“Û§nW‚
+ÕRÞA½$MES·˜òV1wW-¹²¬¸òÏéÓÇ´JÙÍs6ÙDàDv\2À…Æq2~|Ì'/£ÃœÂd7‰¢ ¦Éd΂ I ’J£æEŒ B–w¡“3,-lGgÉÊ@„PÎõÞMÌFKT¤}Élêø‚Öðÿ*B}üd^Œ¨Ó‚JÂÑ·Ïrº¦KPM¬³/Žñ=®‰¤kÓ?÷íå³iŒö#'JdxzÍ?Ž—iɘ£j-ÈÔÖnUh¡õ \Ƹp ™$R»zHbKÀ¾¡¨ÓÙr~8fMÆk´rÚ‰ñاµ;ÕøÇ4{(>ÅÌÇ¢@vw¸}IÀŒVyjs¬iE¡<â”ïsBšu¹55%¬„ÒœiU}ÉÇæÈôŽYyWÄ1¾•÷Ø©,RógÙAAGíû&& çLL®Ù™#h dbçŦÓfdZÆZJbb‹´Næó¾P½rjÂCŽ1)­ÿ€~^Ýw—Þûv•.Òl’NƒÑýØ—ðy™ÏóxP˜ÚCZ££µÚ—˜ap?HÒlÕhýLEßS½r°.ýŒñŽ³8p‰
+ ,Ží4áÒ‹è°žx7ÓqÖG…“Ç:íëEªêÞÓAÅ5?Uû#Fâ*´hƒ*T¡–AÓr¬@ù„< VkV™}UE"«nþÓŽgEÌCÏ“m"®­ö$E± H+¶BÞ<ͦ°z–@tø¯í6.š?éñ@3èpÇ-Ü{úÖfM;  ¬-ˆ`@ó’Àoÿa 5$“8XÉ¥m`úed§1ªï§*/™¨¢²Õ—%ßõ’üiꪮêÜ^'§ŽÉê:Õ÷‘¨¨¾¦û¨>¦™tGP}¾êÛíM7î´Ã:€ê,§w¨>®ÌK§›èËæà~?Õ×F>ÌÝâúTÚCt™â×”3¾“¦éÌA®_ Z#×g„Z×…ñÀ _yN3¾™ë ì=\|(áO!„¨nN ߌòEt)`˜W%] ü¢OXùÊ ™ÈÓÈãÆ4b:ÐÉ>;SWšå‘qÍ(éD§ÐÀäŽÎð8q¶¬Û·U%ÒíAŠ®®6kÅâ9˜uúˆu»Oh,CæŒL¶Ú'¸á¸î`Ÿð’¸1ÿêBÁ•¶è`¡ð’ÌŠ·¶X(Ž¢vãâSôIE2À19wDYÑj4+Âh$låÖ$Ÿ{ü™eÕ¾m±.4 ð²ºÞŠEc¥*e:µF}éuÍœÂb ×­X¬'>`PíIlÉ ûØ#¶àfä"cLër/oƒ\Œa$ùZ¨!·ÏU/Ž­ytª ý’ƒX¨ºþÞéåh)œ¹Óq©¤jÕ˙Ԛ²ƒ^î% Y(ÖA7/ߟº¼Žôsë@X †¶$T´©,¿QaJ"aE5HG—wßG‘ÀaŒûw(Ú«åcDðºÚ×ÃË߆û‹Pcvh}Òì(IšÅ—I
+¦ãŸÞêSÛÓÎ2 J,‚$©øª; ‘ãhí¢|í·Öëû+—º®×ãe¬â=c]hžÌ‰ºÖû&"îß–AêB¯Vœ¬ëçXx¢Ö‚¸£u ×šòu…šÞñb1ÞªÔjwWºáÌcZëõÊ=‹¾‹ày|WçíÜ"êæŒ+PÚjÖ[A”qÌúòÝF×í¨?@TuÀŽ«×K“ãõ;ª±W^ýÓ~~Ê ¯»ªö&$/yF‰¿Ê -v5ÿ ¡¶:º
+endstream
+endobj
+10024 0 obj <<
+/Type /Page
+/Contents 10025 0 R
+/Resources 10023 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+>> endobj
+10026 0 obj <<
+/D [10024 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1970 0 obj <<
+/D [10024 0 R /XYZ 70.866 771.024 null]
+>> endobj
+9909 0 obj <<
+/D [10024 0 R /XYZ 70.866 753.303 null]
+>> endobj
+1974 0 obj <<
+/D [10024 0 R /XYZ 70.866 719.587 null]
+>> endobj
+9910 0 obj <<
+/D [10024 0 R /XYZ 70.866 708.813 null]
+>> endobj
+1978 0 obj <<
+/D [10024 0 R /XYZ 70.866 669.134 null]
+>> endobj
+1982 0 obj <<
+/D [10024 0 R /XYZ 70.866 618.681 null]
+>> endobj
+9995 0 obj <<
+/D [10024 0 R /XYZ 70.866 606.06 null]
+>> endobj
+1986 0 obj <<
+/D [10024 0 R /XYZ 70.866 568.229 null]
+>> endobj
+1990 0 obj <<
+/D [10024 0 R /XYZ 70.866 537.741 null]
+>> endobj
+9986 0 obj <<
+/D [10024 0 R /XYZ 70.866 517.472 null]
+>> endobj
+1994 0 obj <<
+/D [10024 0 R /XYZ 70.866 483.697 null]
+>> endobj
+9933 0 obj <<
+/D [10024 0 R /XYZ 70.866 458.698 null]
+>> endobj
+1998 0 obj <<
+/D [10024 0 R /XYZ 70.866 420.79 null]
+>> endobj
+9930 0 obj <<
+/D [10024 0 R /XYZ 70.866 395.732 null]
+>> endobj
+2002 0 obj <<
+/D [10024 0 R /XYZ 70.866 357.824 null]
+>> endobj
+9934 0 obj <<
+/D [10024 0 R /XYZ 70.866 332.766 null]
+>> endobj
+2006 0 obj <<
+/D [10024 0 R /XYZ 70.866 282.903 null]
+>> endobj
+9929 0 obj <<
+/D [10024 0 R /XYZ 70.866 257.845 null]
+>> endobj
+2010 0 obj <<
+/D [10024 0 R /XYZ 70.866 219.879 null]
+>> endobj
+9916 0 obj <<
+/D [10024 0 R /XYZ 70.866 194.879 null]
+>> endobj
+2014 0 obj <<
+/D [10024 0 R /XYZ 70.866 156.913 null]
+>> endobj
+9991 0 obj <<
+/D [10024 0 R /XYZ 70.866 131.913 null]
+>> endobj
+2018 0 obj <<
+/D [10024 0 R /XYZ 70.866 93.947 null]
+>> endobj
+9918 0 obj <<
+/D [10024 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10023 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F97 8866 0 R /F45 6502 0 R /F107 9274 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10029 0 obj <<
+/Length 3326
+/Filter /FlateDecode
+>>
+stream
+xÚ½\KsG¾ëWÌQ¬Š:ÝèwnŽ%åQY+++{qr ©±ÌZ‰Ô’”]ίß3$Åöð5½{±YÒ@£Ð=”ÅC!‹ŸÎ~¼;ûþ:è"ˆèœ.î>^Šà\á# §Š»ûâùÖ‹Á…#:¿¹¾þíf@òüÍååÕû··¿ü~70òüævpA>œ¿ýíÍû÷õÇÛ«ë«Û«wo¯>Xsþöç7¿ß]-ŸsKqÏ_Þ¼ýãWïWÿÞýrónð×ݯgWwgÿ9S0Xjm`")FOgþ’Å=~÷k!…Ž¡øZ=ùT«…5Ÿ‹÷gÿ<“›‹¶©E;%äjÕãÉ¢¶ìæÓŸRêéðþ²œfãçÅtöà %ÏËŶ}*HaC-ŒÜ.ûàá¸6nÛ(´ ß²jº2f[1) ¡¿bRN蚊'¬÷åéc9«½ò§´>PŠø£ª8šNæ•K¾¿Ž¾ˆC 18¡4oD%êÃxò8ž”Õ»¡ú‚´ÎÚâBEØàê?¸,±hšŒãé¤V4\î Ë©?±5üÿôÓÊ>IåêgÝN“RD$€7JoŽóZÃt’p¿¯%9okËÃÙC¹ŸkÆ¢”G i| ¡–‹»-? 4BiVNFå}mðGN±oõç‡áâ3œ¾g2T,<Eá•ía¹òFYK²jiùhúÌf}cK¦/‹”çœ ·ÞúIâsMý÷ÃÅcŒƒë»ÚO%œ™0Äi¡ÊaˆsBjÕ4äË€ìù0±0Iø˜c((aBkî6󖆓ûVD¯u25òø‚”Žn„vTË]ÃÙÏÓùân §^ÂÕõŸ+³‘´Ñ
+زÌYþ›„
+/ ’F¶$”äà7À›TB[êƒWÈø“)ü¢N<^XBg4"ª:£®©’#ölôJxÂÆt<6FÛ ÂFdÀF–ä¯-ÿŒøK#£ihtJ­¡‘?§£2bW¤/,àÿ>Ȩ‘âµ$'CmÕó"…ÆÁT`Agð4t¶ÐÐEs>z,‡uQ~nüÆ"Òžž_eëù®:¢ @Âæ°\â–å«:2ž$TãAdOÍ@
+ý_‡ãżc*º!ï_.ß$K…a;mÌàFrhÁLlºq÷þ—^Œ¯³>šHÚÀyŽqc9YÌ*˜ú–º’‰øöiÈ×
+Çñ}j|eÀú¼¸'ѳx
+ľqY|G#:«,÷Ôeµ¶FWñ¤VÇ©«›z©d„>rûë–¯¥ªæêÒû^Ç’
+YúK²¤u“áXòЙI‚\—a&Ä’œöûߨ•º
+½þšùeIü ¡øëŒciøÜ}]¬Õï $gèOCÇðeí[Ži½FÔñ†!S£†ÿ;ý•T½j|¿k¶õ4%ÑêeÜÕ‹‡_"Ðh·è„ù-©àze«²VÈ2d«²]h<,[ེXG¡P»ëµ@â÷§jIžâ‘×ÑùÊßæOEn<%ry¿àm`£u®gär•¯.°8¿·Üñ±ÊfÐŒÞÀ›ØÔ¼œ[§i¿ÁK Ñt{wc[º‡“!Cäò¬nVoͲŒ~Ýâ‡;HŸdËýw"ùKä^ocI¼“Ü$V|ÊšëýX>Œ'Mg0z/9tzM¦fËצ‘¶Ù¡gp̲ŠÀG­éà‡¶‚ök¸0Ä/¥Ùf¶:uÜZ߃RÅE«×
+¾gkAFQû˜°kÀÔXê#îƒ Aÿ“’‚0¯!ú:ThN8•0¤˜pê]ƒžnòˆ¿¿Óx¼•iz áäÿš>Z¥|/|(~•Â '«6öžñw²d¹žA’\ÖsÕŽ÷ ” 4xþ6—~ߢª÷p—o¹íÁ`ý;©—äøÅ<:æë{êªa7S‚߆EKhê·ê/+2mÍÿ®’Ä
+endstream
+endobj
+10028 0 obj <<
+/Type /Page
+/Contents 10029 0 R
+/Resources 10027 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+>> endobj
+10030 0 obj <<
+/D [10028 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2022 0 obj <<
+/D [10028 0 R /XYZ 70.866 751.889 null]
+>> endobj
+9914 0 obj <<
+/D [10028 0 R /XYZ 70.866 727.52 null]
+>> endobj
+2026 0 obj <<
+/D [10028 0 R /XYZ 70.866 691.981 null]
+>> endobj
+9988 0 obj <<
+/D [10028 0 R /XYZ 70.866 643.828 null]
+>> endobj
+2030 0 obj <<
+/D [10028 0 R /XYZ 70.866 608.221 null]
+>> endobj
+9987 0 obj <<
+/D [10028 0 R /XYZ 70.866 583.794 null]
+>> endobj
+2034 0 obj <<
+/D [10028 0 R /XYZ 70.866 548.314 null]
+>> endobj
+9913 0 obj <<
+/D [10028 0 R /XYZ 70.866 523.963 null]
+>> endobj
+2038 0 obj <<
+/D [10028 0 R /XYZ 70.866 488.347 null]
+>> endobj
+9917 0 obj <<
+/D [10028 0 R /XYZ 70.866 463.979 null]
+>> endobj
+2042 0 obj <<
+/D [10028 0 R /XYZ 70.866 428.44 null]
+>> endobj
+9990 0 obj <<
+/D [10028 0 R /XYZ 70.866 404.147 null]
+>> endobj
+2046 0 obj <<
+/D [10028 0 R /XYZ 70.866 368.532 null]
+>> endobj
+9920 0 obj <<
+/D [10028 0 R /XYZ 70.866 344.163 null]
+>> endobj
+2050 0 obj <<
+/D [10028 0 R /XYZ 70.866 296.727 null]
+>> endobj
+9911 0 obj <<
+/D [10028 0 R /XYZ 70.866 284.46 null]
+>> endobj
+2054 0 obj <<
+/D [10028 0 R /XYZ 70.866 225.069 null]
+>> endobj
+9912 0 obj <<
+/D [10028 0 R /XYZ 70.866 200.718 null]
+>> endobj
+2058 0 obj <<
+/D [10028 0 R /XYZ 70.866 165.161 null]
+>> endobj
+9989 0 obj <<
+/D [10028 0 R /XYZ 70.866 140.81 null]
+>> endobj
+2062 0 obj <<
+/D [10028 0 R /XYZ 70.866 93.24 null]
+>> endobj
+9931 0 obj <<
+/D [10028 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10027 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10033 0 obj <<
+/Length 2668
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[MsI½ëWp„SS•õ=7„f=áµ¼2ž‹ÇŒZ2±hyCÿ~_v¢PñÙ=>ìÅ&P“™•Uùòefµlݵdë÷³ßúg¿\Ý
+":§[ýÛ–—"8×ò‘„S­þMëKûüo?ö{×.ùÐv¢ÓuDíó÷o?}ª¾º¸:ÿüÏÞ‡~G‘l¿-ÿí¿»úÐéú` ~`ýâ7W——ï¯:üÐÅEïÓùõ»ýŽ‘í«…è5‘×½ËÞuïÃy¯óµÿÇY¯öŸ3ƒeK­ A2­áÃÙ—¯²uƒ¿ýÑ’BÇÐúoùäCËX-¬Ñø|ßútö¯3¹¾h›[´SB.Wým2¹¯Œ¹ºýKJ=Ü\³átô8ŸLýuZ ‹Ñâµ}$­ˆ0Œ…‘Ûe<Wƽ6ŠdÀ˜ÔªÇÉh</¦µ:
+«Cj ¢ª½Ì•3þ’VvºÖºÊA°ã—Kù½…6Å
+ÊŽf¯MÕR
+ëè$SUZjA–RS³çñ°²+Y—–ÂH»´ ËP ã}+â!‚‡”&¬Œÿò8ýÌ‹¯Õ“Æ®‰ƒ3Œ€›º„ÅhSýà¢ÀI¡ñh>šŒ+w æÕÿ÷£qQ}Ò¥ùÓävéRI÷Åò»ÅYËì°’"Zœ#…'œßÛIiáL%ÉBRiû÷Él.†mÛ‚µ·ºŠ¼X>o«Ç®‹ÛŽ–íbZŒ‡ÅMeô7ŽéçðAa/‹Ì^t•tµ^»$à‚Úp£¢£l{[Ðœ:Ø
+•• iGj<'ãùèîiò”9ÏäµR5 Ü;a¢J•ox-½0ÊÖW«q°”´©ÚEÄc7ït†dxaœYü›Ì~C,¸|dØQ²ý}0­½Ä)¡]x R©3
+=vh%l6åÃ7|í»Ð'9']¼ãkßä–I@þ°‚˜ó«w¿}¾DˤAò¢å“7³ùkû­DÐSŽ0Þ¤K(Cöé–w"·’®ÑF8 x"FkW+êýɉþõÆ™ 4íß8¶cñÌ"–—G*ud€¥ýP}RG[¦›£‘š"©ZH €›Ô
+Ól„yÉvµáK3³'À—´§¡0HÂ6"€4Õ Ag+IVïB/Á„è¥%­Ð‹?îï'™¬¯\ö6p.®…[.”ÅKòa‰[ói+qž÷ è ªäʼnÎuÌzˈø‡Ç§y±ñíÝ`þ=‹©„B‘_ß>
+à-^§ö '¼SÏ£q†£â˜ËF\£‘ ý®!(2v jjÂÚzå <Œ2GQîl#n×\jnº}psø™´|CQèà0ÅhÒûÔ”Ù|0Ïy jÀ4ŒÆ‚ëC‚Ñ8'›8qÆ­Iï=qc&ÑO÷÷£ÛçîÖv•ÅÊc›‰9ž B±IË”7˜Þ™ýŽÊУð*U‰½2 ÿ{Í &ìL(ÊIÀºjÀl̆EU&œ}?Ü "7® x·æ$‘uQF3ê$§}šA`5ùTóCñÀŒŒÑ8—Œ°ª‰m €“Ûð0îŠéÆ.ì,2´Ã>hÝ€EQ¯ic¶wNPR› hq#&7bá„QÁ9r›# '•Ø€AÆFBjОî•ULóLÊ-Ó’Iµw+ŠgP…Y»ÑOغAà‹AAãdS‹PIä`É’ˆ‹Ê=æYKªAM0…%èš²äNeÉô”ArûÔˆ~î#©°ßÅ8™ådÔ ØAl™iѺ{Î(Ò¬P ›µµs¯3pì¯kß±Š¤½±áì‰Þ׿â¼Wߎˆ$ Õë7(ÌŒoâôØÊí?},`áàˆùÓcÆ"¦6ÄÜfã<ŒfÃ
+ וîÈ}í*ytŸj+ÐqgÉ1¿ÄjRuZTˆY ܬ`NÙ|‰HÚ
+g|Š¬ZûDñæÜR)Ek™´Ñ¢7¨Õ¢Ó¢é)S«Ó‡:×@§…%±3תƒ½uX«¸Ü¿½È¤§…„>ƒIF[+=ñAfIF„¸8Ðý·×¿÷ú9墰¬¯–?ZSª¶÷¡ß»ÞÝ&FIcPÖUágº1°#ô¸9ÊrY×»1À½‰Jr*=¦žYŠÁe}ê |h|ª~O&=QÃ3}Øô]—YsÂø]_k¨ÃP¯|Z uX’;xü®Žœ¿çú”Ыr±D"«¬/! »ü–:<8<Œ4Ù¸‰nKÜd)ÓY%}K ~é·â6w¬©C'þ(\eˆõ•“s`!1U¾}8t÷R×WË7ptÔ©ÚE¤bÓœHÛ'þ1îøë—YïÇùô‚¥¿žkSÞZÚ77v
+¨PIR«‰×Êfm³Ê¾åyŒí?;N¶S¶3à ¹Ÿkü~nVÏü`O*][®r½\G^SN9fJåm¿µÓ›|.q´™F`¬q”™¡úÜU ö´ÍK¹¾ñÂz›nÞ|2ÜgÝè„Ñþ€u¬6 ë
+‡½vèËawJ¤ Ôuµ*€ ÁzšèNnûŸÁÿW/fæ/Ή@ǼåY9»þR¿Ë
+ô7 ËËâÎnjþƒ|yq
+endstream
+endobj
+10032 0 obj <<
+/Type /Page
+/Contents 10033 0 R
+/Resources 10031 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 9852 0 R
+>> endobj
+10034 0 obj <<
+/D [10032 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2066 0 obj <<
+/D [10032 0 R /XYZ 70.866 751.391 null]
+>> endobj
+9928 0 obj <<
+/D [10032 0 R /XYZ 70.866 725.858 null]
+>> endobj
+2070 0 obj <<
+/D [10032 0 R /XYZ 70.866 674.416 null]
+>> endobj
+9992 0 obj <<
+/D [10032 0 R /XYZ 70.866 648.883 null]
+>> endobj
+2074 0 obj <<
+/D [10032 0 R /XYZ 70.866 609.337 null]
+>> endobj
+9915 0 obj <<
+/D [10032 0 R /XYZ 70.866 548.047 null]
+>> endobj
+2078 0 obj <<
+/D [10032 0 R /XYZ 70.866 508.51 null]
+>> endobj
+9932 0 obj <<
+/D [10032 0 R /XYZ 70.866 482.977 null]
+>> endobj
+2082 0 obj <<
+/D [10032 0 R /XYZ 70.866 443.49 null]
+>> endobj
+9927 0 obj <<
+/D [10032 0 R /XYZ 70.866 417.958 null]
+>> endobj
+2086 0 obj <<
+/D [10032 0 R /XYZ 70.866 366.515 null]
+>> endobj
+9926 0 obj <<
+/D [10032 0 R /XYZ 70.866 340.982 null]
+>> endobj
+2090 0 obj <<
+/D [10032 0 R /XYZ 70.866 301.495 null]
+>> endobj
+9919 0 obj <<
+/D [10032 0 R /XYZ 70.866 275.962 null]
+>> endobj
+2094 0 obj <<
+/D [10032 0 R /XYZ 70.866 236.475 null]
+>> endobj
+9924 0 obj <<
+/D [10032 0 R /XYZ 70.866 210.943 null]
+>> endobj
+2098 0 obj <<
+/D [10032 0 R /XYZ 70.866 159.5 null]
+>> endobj
+9925 0 obj <<
+/D [10032 0 R /XYZ 70.866 133.967 null]
+>> endobj
+2102 0 obj <<
+/D [10032 0 R /XYZ 70.866 94.48 null]
+>> endobj
+9994 0 obj <<
+/D [10032 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10031 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10037 0 obj <<
+/Length 3097
+/Filter /FlateDecode
+>>
+stream
+xÚµ\Ms7½ëWð´EV…€Ægn‰%ï&eGYY9%90ÔÈf-EjIÊ®ì¯ß×3¤¬bHŠ@vMÉãîF£ñºû¡Grðq ÿ¼øáöâÛ·ADçhp{?ðRç>jáÔàönðÛÐ ëÅhì´^¿}ûîz¤åðûËË«on~üåvdäðúf4Ö> ß¼ûþÇæñæêíÕÍÕÏo®Fc¬¾ù×÷¿Ü^mßs[q/Þ¿¼~óëû«ŸoGŠ¥×ßþxýóèÛŸ.®n/þ{¡`°¨gCA›Áôáâ·?äàÿöÓ@
+Šað¥~óa`, kÏóÁ‡‹_Èí¢_ÈRÂH3ðN 퉂3ⳜÚi¶å4#dläÈ׮–“»ý%(é„Tô*„—Å«jý4ß4^}6â²ZOW³ÇÍrõÝw›Õd±žO6Õ¾eÚZáå[¦m€k©mÙt9K¨Ä&ÎW‰]°Á·UV«‡ërÕøãwiåhl­¾¹þñæêïïnÙ¢oßBÍWIÁ
+«Ø¾?›wÚ®Çúêتß\Õh˜.ëÍV¦D¼Eá}òX¥Û½ÿÛãjö;ðGó¦±/$É@¿Wƒ±ŠÂ#ÄëÿqYa'õb¶™-¦Évç³EÕ<icš‡åýn¹RÏ«ÝÏzãQK íØ£„¥WîAËv€t¶‘DäÓ?-×1}|‘
+ÖŽ•i-‚ ü€÷¶K¼©îG$±eÕbZÝÆ$õðOÞ½¿šçÉ|¾œ&N“ƒ»œx…–:Ãzå‚ж‘_5V=nV º¬)¡3(ië¼›l&ªVßðâ9®Ÿ6Uç§'›OUÂ>´PÀõ|ût0"xjÛ7]>òNý5[ì«&…ãWÄ5¤Hø\3éHØa0ª„ éOÉŽ f‰P$`™-âv˜é®Û'ww
+Uá¸+ªE
+2 ÿHìЉ9PÛŽ#1Š4+Ãf¶vRÈÇÚ·µ÷álx[B/z ãì™Þ§ˆ¶˜ó^¾I€Ô‰ë7èÌŒ/}F[¡Üñè›`ù
+!‡òïßµôQÄëF·}W¯ µ
+Fåpú ºÓÓ™l'BÕˆuJ¨Ã7GÙN„¢gI¸;FMƒ.>íÂXðz^~³õÁbûroñª5ÌCñhÑuú˜³6ĶS ÕqÞO#üKè…/j-µÇrâX…ˆ2ÛÔèË„¤A·šy| Eï¶~Ëã¦ËíXB#ŠmÛQZüÌjîÕ9WÚe]QÔ5œŒ®(X’U/Òǧ×ÜMtOì>=_ÓtEË),7àí: ç$C`§k$Gwb‰Èë
+­1©¶ÊjµZvƒ áO<
+„#E£”kïC?Ù}À"cM‘€dj´i®Æx”<¡ÀþŠÇ›£Ñ8ir2*a$… ;•ð®“Ã!<è©°$ªv9€xèBÕ‚¤sû³!‡oô°8²íüíÓbÊÕè×¢;1;R—KîåèHB¼Æ?—œ\ÌÃTO¡f<£Ì"ÖùÓÝHâˬڌ{¬.õu‰©„RïêoZJùô$z¾DÆJO"¤ˆÁÑžó±’Ìê4ÚHJÐ÷|™ÃÙô½ _›~Þ¯’Sý_êpm˸€e…,’„¿Yð gOº°·õõN¾f€`4¶­¹K À½C œ_´öù–‚0*ŸöAïÀ-YÕT9Ùê-êŽ;¢')ÉP_¥dÛaø¬¨Ûvô¤%”Š<E•¯“´ðæøÚ·i©ƒÚ–¥¿‚6ÉÔøúZ¤ Ú;ºG«Zm+É]¶kƒW°=O¨)I'¿² ÌðDmÖऔÂÖrˆ¶PüÊëží
+0…)ù¶-=¹ˆÈЩ±[V»¶Ò].êVñ(wc‰…jc‘0:+]ÏþÇ#{æ¹ó>@ƒƒ;ë‹Ý<M¡5áÏ&ò“ KrÊþ½ó0Ç.Qyè '}'6=dM¯¡T#H‡ƒ¨-!oÚ:ùÛygÛ:O]ÃÆÎ%êûI3Yñi2ŸïÆHO眛3Æ:ïµù€A¡ãŒ»¨ž-R£Çµ=í¨pÇäÍ9ãyõb`z©Õ AºÔ1鿽Ԉ_þ< ½SÑŒðBµ¿¥ÀN¸»”"Ð[Ɔ–ÚÄPÅùs®Ìm„ú+ÌLC¹ö´Fì 2„¸¥Šk¾OïqQVÏ¿³$ÅgòX–~Í/@iŽ¸}™âø×¼ üCjt;#œëjþ?¨ºê2
+endstream
+endobj
+10036 0 obj <<
+/Type /Page
+/Contents 10037 0 R
+/Resources 10035 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+>> endobj
+10038 0 obj <<
+/D [10036 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2106 0 obj <<
+/D [10036 0 R /XYZ 70.866 751.783 null]
+>> endobj
+9923 0 obj <<
+/D [10036 0 R /XYZ 70.866 691.268 null]
+>> endobj
+2110 0 obj <<
+/D [10036 0 R /XYZ 70.866 654.503 null]
+>> endobj
+2114 0 obj <<
+/D [10036 0 R /XYZ 70.866 612.781 null]
+>> endobj
+10021 0 obj <<
+/D [10036 0 R /XYZ 70.866 592.784 null]
+>> endobj
+2118 0 obj <<
+/D [10036 0 R /XYZ 70.866 571.371 null]
+>> endobj
+10004 0 obj <<
+/D [10036 0 R /XYZ 70.866 546.672 null]
+>> endobj
+2122 0 obj <<
+/D [10036 0 R /XYZ 70.866 509.956 null]
+>> endobj
+10005 0 obj <<
+/D [10036 0 R /XYZ 70.866 485.257 null]
+>> endobj
+2126 0 obj <<
+/D [10036 0 R /XYZ 70.866 448.541 null]
+>> endobj
+9998 0 obj <<
+/D [10036 0 R /XYZ 70.866 423.842 null]
+>> endobj
+2130 0 obj <<
+/D [10036 0 R /XYZ 70.866 387.127 null]
+>> endobj
+9999 0 obj <<
+/D [10036 0 R /XYZ 70.866 350.522 null]
+>> endobj
+2134 0 obj <<
+/D [10036 0 R /XYZ 70.866 313.698 null]
+>> endobj
+10010 0 obj <<
+/D [10036 0 R /XYZ 70.866 265.196 null]
+>> endobj
+2138 0 obj <<
+/D [10036 0 R /XYZ 70.866 228.431 null]
+>> endobj
+10011 0 obj <<
+/D [10036 0 R /XYZ 70.866 191.826 null]
+>> endobj
+2142 0 obj <<
+/D [10036 0 R /XYZ 70.866 155.061 null]
+>> endobj
+10002 0 obj <<
+/D [10036 0 R /XYZ 70.866 130.362 null]
+>> endobj
+2146 0 obj <<
+/D [10036 0 R /XYZ 70.866 93.646 null]
+>> endobj
+10018 0 obj <<
+/D [10036 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10035 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10042 0 obj <<
+/Length 3009
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\MsI½ëWp„ˆ¥¦¾?ææ‘¥]OÌX³¶f/^0jÉÄ
+Кù÷û²ÕªnU‡9Ø&ä&_VVVæˬlñÁÀþ~ñÓíÅ×^ < ÖªÁíýÀqæ­¸ ™ƒÛ»Á—áå?Þýv{õi4–Î-­”ÃË_Þ}þÜüèýÍåï¿^}¼ ɇïê¿o?Ü|7_0nû›ëë_nFôÐû÷WŸ/?}øív¤ùðf+ú@䧫ë«OW/¯F_o¾¸º½øï…€Â| ö
+zϼԃéüâËW>¸Ãÿý<àL?ø_ýä| bF+|~|¾øç?\´I-Ú
+Æw«~ž-6V¿ÆŽyQ?*m:ìöЯ!çÌĈ›fí7÷ÿæ\-'wï«õt5{Ú,W?þ8­ˆ–Y_@“˜r±*³Åk<ɱrò¥ÀÒmˆï&›ÉcUÃþpÜ àq àq˜òêç¾<­fL6Õ×æIm… ÌàËc%yÙ|ã}{ÊÅl3[. O¶–~œ-ªæ“4¶ù°¼oþ¥¯<V»Ÿm7$etl‚µmN2J¤»äžYÓH²T«þ}¹Þ°ïŒp±&)™×ž>0a\óħê~¤ø°ZU‹iu7é†ßèˆýIŸípºœ?=o`ÃñGü ?õaø0Ù|¯V‰åHÍ×'sRä,G:<ÞH2r»Óå)ûgÒ»è°:SÚXø§‰¡É½ZFèÙV%4 ¢€.J8fcM֛ɔ6è? X…˜æm \x‘q-äy5_®FcÚ¶ÃÖvŽé–õç“Åä¡Zµ6`]mžŸ^k¢u`\˪h#˜S²å UGca†uh]·”š,îšã¦|“ÆB°`ÌvóÒ*Ŕš±ÛÎÚ Ò¹l»=âóÙzšˆþä¢>Àä£.Ä ‡ç…5¡6Šácm‘Õ`,=Sz®.o>\ý‹ˆ@ý¼ÐA\æa¡m§ƒ—
+Çqû@l”0„w~`}`Z¸¬¼Ô€$Iá{2¡Ä6á°€„ùh÷"È»êiȃpb­ÄqyÐ#úâÙÓó vYyЂIqìs~´i_Ù³ó ’/yŸy0˜áCµH;¥.k\íXkCqßHÚçô?FÒ 'Éä‹YWI_ãRÜ[§ò.z L˜1d½%ËÔR±¹AYª£:¥µÔ§%¸{Šß("ݶ
+5Ñgý½¥ÐªšV³úPT •PåñPD¥À™óöHG1qY•ˆ†Œ*[1`ÜD2màŽÆÇ£ÅT)ðÂD³ŠÜªËLiak`‘fƒT9d@qx#ÉAíZ¥År1].6³‡çås‘’—£$ÓÚÇè›$% 7p¥TÔ&ÆMlĺZ¤’Ÿ£sãJèátÒŽ[¿âH€¼Ä®+òôëOÒ_e ³¶„(:iZÐÃØkÓìI‹p"/(¯_§â ¢ê¬Ešp¾àõÒ`eq¬A#L­#%»ZG–h¦ÓÙ½#’£œÉéP¥iEºô5òwÝ£rG™[ àAœ¢x>¨Òµ?Æ6_n&)¢îŽ'êA0‰*î ¢î³ˆº tM ê^‚:—¨+³Q§Ï¯‰º’:ÉŸÈõP±Œ·Ù5‡dÒ‘$óRs$øiÒg[Do KPÈ9&¼ŠJð'R¨—?QGÉb›óU¢Žyh¤RwjÁW²ÄÞ(r.Z{ÓJM[3ôs$Mí$_@#¨¢]¬Ð Iã˜CÉàAÃ:¹ ãÎË?ð› X§@TIŽbÞ‹N~@©¸‡( EQ®€:B˺éÓ錂š %ù°ðE'T·’Ap0¸¥fß)ûé÷ëëÝ¥Úñ½.Ë”EyBôH‰¬,®%µ¿õY>o¨ÔLæ²*•¼Aƨuô¾O%R„eäªã)$‚Á6‰Tœ’Hu^"•¶&~)$ sn%uwy”>w]ñ Š§Bg
+[§Žfè2œ•òî¤5§DU"pb-ºT:èíÜgj,xHUÖ|B=·$Øò­K¬‘ Q
+endstream
+endobj
+10041 0 obj <<
+/Type /Page
+/Contents 10042 0 R
+/Resources 10040 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+>> endobj
+10043 0 obj <<
+/D [10041 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2150 0 obj <<
+/D [10041 0 R /XYZ 70.866 751.949 null]
+>> endobj
+10013 0 obj <<
+/D [10041 0 R /XYZ 70.866 715.697 null]
+>> endobj
+2154 0 obj <<
+/D [10041 0 R /XYZ 70.866 680.106 null]
+>> endobj
+10014 0 obj <<
+/D [10041 0 R /XYZ 70.866 643.729 null]
+>> endobj
+2158 0 obj <<
+/D [10041 0 R /XYZ 70.866 608.263 null]
+>> endobj
+10012 0 obj <<
+/D [10041 0 R /XYZ 70.866 572.011 null]
+>> endobj
+2162 0 obj <<
+/D [10041 0 R /XYZ 70.866 536.42 null]
+>> endobj
+10000 0 obj <<
+/D [10041 0 R /XYZ 70.866 511.998 null]
+>> endobj
+2166 0 obj <<
+/D [10041 0 R /XYZ 70.866 476.532 null]
+>> endobj
+10001 0 obj <<
+/D [10041 0 R /XYZ 70.866 452.11 null]
+>> endobj
+2170 0 obj <<
+/D [10041 0 R /XYZ 70.866 416.644 null]
+>> endobj
+10020 0 obj <<
+/D [10041 0 R /XYZ 70.866 392.298 null]
+>> endobj
+2174 0 obj <<
+/D [10041 0 R /XYZ 70.866 356.756 null]
+>> endobj
+10022 0 obj <<
+/D [10041 0 R /XYZ 70.866 320.504 null]
+>> endobj
+2178 0 obj <<
+/D [10041 0 R /XYZ 70.866 284.913 null]
+>> endobj
+10003 0 obj <<
+/D [10041 0 R /XYZ 70.866 260.49 null]
+>> endobj
+2182 0 obj <<
+/D [10041 0 R /XYZ 70.866 225.025 null]
+>> endobj
+10019 0 obj <<
+/D [10041 0 R /XYZ 70.866 200.602 null]
+>> endobj
+2186 0 obj <<
+/D [10041 0 R /XYZ 70.866 165.137 null]
+>> endobj
+10015 0 obj <<
+/D [10041 0 R /XYZ 70.866 140.791 null]
+>> endobj
+2190 0 obj <<
+/D [10041 0 R /XYZ 70.866 105.249 null]
+>> endobj
+10016 0 obj <<
+/D [10041 0 R /XYZ 70.866 68.997 null]
+>> endobj
+10040 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10051 0 obj <<
+/Length 3800
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ys7~÷¯à#YµBp~Kl9q6>ÖÖnÕ–“šɬ¥H-Iåø÷ûõ21Âp(®}HLÓC|ݾÑ>¹žðÉÏ~¸xöÝ+¯&žkÕäâjâ8óÖN\ÌŠÉÅåäÓÔ2ãÙìÌJ9}óúÅì·‹ŸŸ_<ûï3%øDL„PLWÿÆó0YÜ<ûôŸ\âžp¦‚ŸüQ?z3Á¢V“Ïþ‘
+ª' Dáš È[æ•+AGÍ&‡D—ð…‘(!
+%Pûñž(Ž¦ÜJS뱄Â(MÍÇ×SnÚ…£]M™_(! ˆ$|Oƒ]ò®¤
+ö|L!°·.Ä £wsÂ)ê¼ß·E~B~±¼©†ñH©Å·i¸XÍ":êR&¬Éi¸X0èi%l¿íraâ)•Ï!ÑEPƒd\õP ôõ‡.맜8ª¬.Qtˆg
+ty ¢wp¶TC<]Ò ›B¸®S™Õ ·¢ XˆKqTy62$Ó@½aØtÔŽÉÔ"‘!ÿkfùt¾%cK£¹ºzù&Çhdt(”5RH‘uŠ†ºOÐJR¶çÔ¿ÓþÏ·3a¦»´=Y¥O;ÁG2 HhïšÊ,{ÒÎÔcùöD+I¥FíɦíÉj~oOV…Á&¡@PA%0ÑÈ‚µsYê ûÍJÒ¹ñ.¡äæCKJ¬Ž¡{¹ƒCB”ñ!ƒ/@‰£™—Â`¯PŠ9ã
+à+è!rÁqIT©¶-
+ Ša'ùui;O¥Ð¿G`(€ëhºÍô؇OÛ¥[µî¸
+»¡„(çQ…÷D1Öz@ÂÅQ^ä£Ó¸–SòÄPÖѬhXÇiXôø6Èᘦé2_B#´¢£†žFK"¨Á*‘€FM´UÆZ
+°Øj{68ÇÜøÚœq;§à<š…°Í'ænSøˆÈÍœ21~ÿàÕ›n•WÆŠtXÔFÄtŒ˜#'AÐé8É…ž†ý"Ò'Gn éUO“>!IŠ Ùt(š^ûùWÊJÈ]iUOŒŒóŸÓ
+()³Ë&D#17Aõ˜Ôj‰j”½šœÎŽúZ“+ž¨[éÄ_<¨É»|‚LïØùeL˱NO¶ÎÿÜo“£¸–©o4‰‹ÒÜC·ysÒ™ÓCðõŒ;­d…J÷ãRÅ™M.*†®ô«8ãÞâz8­ˆìº&ŸÒ»Èë*ð^ª½ ZÉJýÔ^ ÷_'¾èó`ïi+GÞ¢l@Ôõ™­9'›•¬ 'ô.ˆ~î @K¡áb| Ýóu‚S'U²KjtIQ‚á\Äd VP¥‡sEØ÷4çÛg b§†ì)•B$)E¨ƒ»’¼VÚ¸HMŒêq;Páȵ/¯ÑL¸¿C{­m#s¨
+•?˜A ¹.Øf€m3"ÜÞå fHšH¡WËŒè‰à„ÁŒPÅ” #RÈ…Q“¦Ë„÷  P¢ êÖ똔±ÞˆsÇËGGÌ‘ÒŸ¨†Ôe­=^6.ÍPM?ª†éÁ háJa½~"÷íLlØv&ö÷ÃC±Ç§1”†b—?A 9ãG«³îŸ‡Õ½ˆsøâá#ª³GT`gÔŸ‘À‰
+1lá#_w™ A&ŒÏy ÆéHM¨Ô0á”
+ŠÞOWΔ
+ýÒJ\˜Ó~󡻣ßú G¿(i~“B=úÍÇïŽ~G%qìè·
+Wâ°EÝ ¸ÍlÕ}îB¤v³úŒÕ ¡”^M@%ãt‚OÊÛ‰„îÆ ³ÎÓ7
+ïkDxª'殘wêAÇå€
+”ˆË%( K± €ó›Á{»(´xWšú‹VÄÐû¦ÇvM›?­ÚnÔkJ9®æ‹ÖySkGt­ûŽ¢àÌ™`Ûûaºƒ¡Wˆ ´®àýÝgúÙ
+úT/ó¦ºù\µqåÕÝzA!g×SÕ^\eÎ÷^Ÿx`ˆ­Ùíî>o‘%R­ùׄyÖ´¤ŠÑ¬H9„ /‘7)©„f%«Ý‚mfé÷Ý)Ž#—+è \cQ-8WmJ0-¡dB÷€.„8ت&è>t]e3TÇ ÊÚúr§˜¨¿nëù˜6E¢‚n7¤j>Ÿ
+E—x˜ž>4·tÔÆ`xGK·Q”º¥mL+¨þD¾äÁÝÈ¢uÜ/«ý|¹ê’°®}OyÝÃþ4|ceúpc:4‚¬Ïüœ¨[ì9šmê#¿v®µ 3ͧì
+öiYjÖ8æåcîómܧ‰f§d½“¤t4XßGþ\:S'
+endstream
+endobj
+10050 0 obj <<
+/Type /Page
+/Contents 10051 0 R
+/Resources 10049 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+/Annots [ 10044 0 R 10045 0 R 10046 0 R 10047 0 R 10048 0 R ]
+>> endobj
+10044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 232.765 151.337 241.455]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h) >>
+>> endobj
+10045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 218.387 157.318 228.925]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h) >>
+>> endobj
+10046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 205.983 160.806 216.395]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp) >>
+>> endobj
+10047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 193.327 166.786 203.864]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp) >>
+>> endobj
+10048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 115.656 236.068 126.193]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__lock__target_a7172f963daca0599d6cde6fcf64f291e) >>
+>> endobj
+10052 0 obj <<
+/D [10050 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2194 0 obj <<
+/D [10050 0 R /XYZ 70.866 752.14 null]
+>> endobj
+9996 0 obj <<
+/D [10050 0 R /XYZ 70.866 728.122 null]
+>> endobj
+2198 0 obj <<
+/D [10050 0 R /XYZ 70.866 694.396 null]
+>> endobj
+10009 0 obj <<
+/D [10050 0 R /XYZ 70.866 670.378 null]
+>> endobj
+2202 0 obj <<
+/D [10050 0 R /XYZ 70.866 636.653 null]
+>> endobj
+10017 0 obj <<
+/D [10050 0 R /XYZ 70.866 576.895 null]
+>> endobj
+2206 0 obj <<
+/D [10050 0 R /XYZ 70.866 543.044 null]
+>> endobj
+10006 0 obj <<
+/D [10050 0 R /XYZ 70.866 519.026 null]
+>> endobj
+2210 0 obj <<
+/D [10050 0 R /XYZ 70.866 485.3 null]
+>> endobj
+10007 0 obj <<
+/D [10050 0 R /XYZ 70.866 425.543 null]
+>> endobj
+2214 0 obj <<
+/D [10050 0 R /XYZ 70.866 391.692 null]
+>> endobj
+10008 0 obj <<
+/D [10050 0 R /XYZ 70.866 343.889 null]
+>> endobj
+2218 0 obj <<
+/D [10050 0 R /XYZ 70.866 310.038 null]
+>> endobj
+8605 0 obj <<
+/D [10050 0 R /XYZ 70.866 188.038 null]
+>> endobj
+2222 0 obj <<
+/D [10050 0 R /XYZ 70.866 178.307 null]
+>> endobj
+10053 0 obj <<
+/D [10050 0 R /XYZ 70.866 130.495 null]
+>> endobj
+2226 0 obj <<
+/D [10050 0 R /XYZ 70.866 101.808 null]
+>> endobj
+10049 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10063 0 obj <<
+/Length 2443
+/Filter /FlateDecode
+>>
+stream
+xÚí[]SÉ}çWÌSJªZuºoS•/àw×à`å!åÝV-HŽåøßçÜ™¨G#!4 IªòbMŸÛ·ïÇé3-Y\²øéàÇáÁŸß]ÓÅðªðRç
+I8U /‹O½£¿¾ù0<9ïȇžý#êýúæãÇê£ã³£¿¿?9öÉÞ›òßỳӾ%£ñ}ëGÞ¿;êÿ>üùàdxðÏ|Y¨‚´ÎÇ0ÈX\Ü|ú]—¸ùs!…Ž¡øV~õ¶€E7Åǃ¿µXNÚ íbbú¯ï~<<<{ÿ¡×[á½Ëëƒ0Î&¸Ç'‡ç}8â¬ïeïëðš”°:Ç´5A”Nûð-˜&r@Z%´O}vôK ¢Ç’Îé£J'˜uÀÿt2¬ñÝ)Âôm?pjÙ;:©>>?y{r~rŠ?× \F{"ÙfŸ±ZX£L”«du¡¤ð6ºÕrJÈ¥­Hƒ ¨?PR°Ùôn1¿¿XÌæ•…ªiœ~|<»¸¿O£Åd6eãK¤G§Èb ¢P®‚¸»ÿ<ç›Ý/&Ó1Fˆºw;¹XŸ´ÒV8M…7$ÔóÖ$W:`uy%¢¬'z3ù|x8»ýÚë9PuwXUäPX…½dו³ç¾·ä»ŒÂøОç,J&=»`Ø?ÚÊ›DqÈ
+S€­ªÚ±V²És9kѺ•Á£‘ïcd‚j¢ÔŒâï_Ç%î-%n`Pá âg ðˆµÓZõ0Jå6s½³„b\TÆv¬x¤0EÛÁÇFÛ}¬‚’l;Sà@Âs‡^µsÚîýíg¸Ìµ;›sæ!$žçcB|(î}L!Š hÍÇ_QgZª‹dCX­,àB
+»ia™ð™¥£V‹Ps.Xã—_| –®„8¡¡¡J$Íüxü›”4”¿ôþhQýS5w\)o«‹ÙÕr$ÝÔ7Û;?ØSäj¶Ã3Ý•­"ªM¨FòÁ=ôþ¾‘=q…,gpÌ]7xÎ^Bh›š·}©m¼LøMùÑ·%ÿY|™ÜUWŒóòÞè¢~ø'Ó¨¾=ž"J«£Åø²i>»]3^üæfÆ~›L¯WÝvXºkIë
+%ØÞ€W!ÖëGd“/UN_×Þ=ÇcŸÖº ·«áá°_ð–º8ÞŒ¦ÉbĦó#+vŠ”²UEÅRx_ ´ÁÃ=59Ý@Q}AÑ(Ü[‰²Æ‚ëµD[1€Ë±¾ËKû$mDe11tÄÆl,~š:rÕw”Å⊞X0…-°Ϻ<°^ƒªÇ†Ï7³Ö‘Ý* ´–Ø8ÙÆŒ×oßÊ$HðóñU¿ì>ã)>Zו}Ö€4Ù9À˜Í,‡þpÿ™»A—ü—-¯¼~{?½àZs×È4»*šOªñZæ×yÎ[®z»UÝm©en lì•t……³ƒéR|«œY%æ3.xßÛú€,%‹îБ·%6…ÞÎX9§cwLRU,'˜[b ÝQ\D›V \òuÍåVbcÉ–Vî6Ø’)ÛJw›°' ØÕ¦61¡FvýP·¿ FhÌĺ³ š‰n„À#×´riÈryP3ŸÊ ˆÕ€—,>*'Hĺ9£ÉͲÅï.擯êHb—|6¡"r{*k™PÅ „ŠGò±O­9L¡ðZöºRjüf©Éã)+¹í…Ž[/ÃÕR‚‰è¸‹Ø¤¥ÏÌrSô)ðNr“gèŽÏ‚YJñ7”X°4KË
+ R’@_r~ŸŽZ}NUÆç™8y´-Ó˜x& |ÃúÏé\eŸÏ·öl0š¶±$:džÅ*ÚXŽä|ƒdU%¦žÝš¡[ho3˜ O éljf»Øƒ"Ëi8(\Šy¹1¸±vyæêÁ
+¾±$,p£Ô¥%Ÿgj
+7N¾’Ò¥HîIk´bZã3Э˜Ö„nR<ö²RWc¯IîÉ£¼Ó#Þ˜#,ºé]ÎðHsp‰´ ²eùöEcʇÁV¡øøTbÎfFA& ÎÆÀ–OÑÅx ŸpÛ;—Ûž ]
+¼•M`ÓŠ-pŽÅgJËÆâ拓Y¤Èá
+Ì#8Jí|1uŠ™ST1ƒÉhäW|!ÿR°ÂpÕïì_
+¡<hع"Oµ(S^xoŸ<¬zÎ*Ãë1~«Á稻3>Œí&¤èÿM!%¯Ž¢b(9Zw!…Gâ×ðY„µ‹¢ømrÈ¢£ðP>¨]u”ȵŒ’ ?-£d@^ª( òíè_mE•Ê3Ÿ9@Ñ0#¸Fºø2.ïÚŽ'éò]pàèù@rŠ›G´A¿*.ÿ÷‹6
+£Eå2ˆ6<’WþeD›îf.E›ÄÌ­¢MÌZ´I0Ûó‰"¤ULP÷H*ÅÜ’Nª|­™7oàî'qE F•?{kÚ´£N¹€P#¢+σ$Vì¢!b®›²‡z%¡(>ûõx§?æ·_®Û s‰/Äå¯éZ9ÛC@µý¨á@ÏùI_Õlµväªx†‘ÈÝz;W9?6‘ÿ ½üPy
+endstream
+endobj
+10062 0 obj <<
+/Type /Page
+/Contents 10063 0 R
+/Resources 10061 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+/Annots [ 10055 0 R 10056 0 R 10057 0 R 10058 0 R 10059 0 R 10060 0 R ]
+>> endobj
+10055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 677.409 137.503 686.099]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 596.649 256.242 607.187]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__nest__lock__target_ab941877f85f0dc16023d3fdff62c05dd) >>
+>> endobj
+10057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 437.447 137.503 446.137]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 356.687 301.288 367.225]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__dynamic__target_a6fe8af6fa0884e61320b6abd8dcf6969) >>
+>> endobj
+10059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 197.485 137.503 206.175]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 116.726 317.974 127.263]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__max__threads__target_a923d88a5f7e8e742eab4052cd022fab1) >>
+>> endobj
+10064 0 obj <<
+/D [10062 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2230 0 obj <<
+/D [10062 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10054 0 obj <<
+/D [10062 0 R /XYZ 70.866 753.745 null]
+>> endobj
+2234 0 obj <<
+/D [10062 0 R /XYZ 70.866 720.883 null]
+>> endobj
+8606 0 obj <<
+/D [10062 0 R /XYZ 70.866 670.259 null]
+>> endobj
+2238 0 obj <<
+/D [10062 0 R /XYZ 70.866 661.578 null]
+>> endobj
+10065 0 obj <<
+/D [10062 0 R /XYZ 70.866 611.576 null]
+>> endobj
+2242 0 obj <<
+/D [10062 0 R /XYZ 70.866 581.991 null]
+>> endobj
+2246 0 obj <<
+/D [10062 0 R /XYZ 70.866 534.987 null]
+>> endobj
+10066 0 obj <<
+/D [10062 0 R /XYZ 70.866 513.783 null]
+>> endobj
+2250 0 obj <<
+/D [10062 0 R /XYZ 70.866 480.921 null]
+>> endobj
+8607 0 obj <<
+/D [10062 0 R /XYZ 70.866 430.297 null]
+>> endobj
+2254 0 obj <<
+/D [10062 0 R /XYZ 70.866 421.616 null]
+>> endobj
+10067 0 obj <<
+/D [10062 0 R /XYZ 70.866 371.614 null]
+>> endobj
+2258 0 obj <<
+/D [10062 0 R /XYZ 70.866 342.029 null]
+>> endobj
+2262 0 obj <<
+/D [10062 0 R /XYZ 70.866 295.025 null]
+>> endobj
+10068 0 obj <<
+/D [10062 0 R /XYZ 70.866 273.821 null]
+>> endobj
+2266 0 obj <<
+/D [10062 0 R /XYZ 70.866 240.959 null]
+>> endobj
+8608 0 obj <<
+/D [10062 0 R /XYZ 70.866 190.335 null]
+>> endobj
+2270 0 obj <<
+/D [10062 0 R /XYZ 70.866 181.654 null]
+>> endobj
+10069 0 obj <<
+/D [10062 0 R /XYZ 70.866 131.653 null]
+>> endobj
+2274 0 obj <<
+/D [10062 0 R /XYZ 70.866 102.067 null]
+>> endobj
+10061 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10079 0 obj <<
+/Length 2296
+/Filter /FlateDecode
+>>
+stream
+xÚí[ËnGÝë+z5 °RY8qË™Y9YÐTK&† IÁ3?çöCd‘Í¥.)0›"Ù÷ܺu§ŽJ<»ÍxöóÙO£³ßy•y¬UÙè&sœyk3$³"]g_z–YÉú+eïÃû·ý?F¿œ Ggÿ>0Á3‘ ¡˜2®xÆóMæg_þàÙ5>ü%ãLŸ}/¾:Ï`4àÅ,û|öÏp!,ãÚE迾ÿéüüã‡O ¸Æ0mT
+\ã™Ð*Âýy8j€tŽ aR@º
+–‹õfu?Ù,W¥¿«ÜÎã·/–“ûy¾ØŒ7Óå‚œ/¶åÙ
+®™Ç`Y¬°$…ß*¯#öS¼uC¬°fG›oÓuùŠ2sU|6žT§]WŸßæ Ä1Þäו¥Õr^›ÉwÏfKzôûtq»¶ó"\5éËÐpÑúqþ—Û'¥‰¾Tuu[E÷
+}c¡’Èë@…@a:Ñ º´d`q?ø‘“%wÅt° lC7ç}Tak´ßžÁ*êÚì»BÓ}¶¨ÔÀ[i4²Sžã
+3ò¢3¯ßUÇ„õ^~ƹ³¨wQ+<¨»ªÊŠq•¯Z9€Á™Öe&à4¬»T:´1¡0dõÁÈíœJGCÑ©)R2…)ÑÙKÄ çQ{yÛ˜Ù8Óq0Øîš2ÂÆGÓÚz†šJ€êxÁ$#Tdu½ÖD©YÌΧ{‡‰éî’Bìõ^
+ê…Bû¡šCÇ\ÀjœL: i±–-?ÙÒ½JV\2Kðve9Q …‹|3žÎêÑz‘¯'«éÝV³ˆ¼àOæ1B=™È´8 cˆÈ„NDÆ0ëKK.4ó˜ÃÖ‡–ç…oØë
+@öQÈ™l¯Àë&IO–@T8€l$Ù ˆŠ¶³;4—U±;í"L©Aü÷ãÐ.qšÝ-Æ"ÈZ|´Í ÒjRÀñ©cØ•„J¸N(.NSí´ +k@ŽSì6˜"èŸ<-è°‹‰êÀjNÆ·}[ü$—È'6²Ì¥Jà«á •B57†Ã“û@+ð1½'â<z‚G>“ò£ÆT‡<ö(òTÆú…õœ™úynÇíÓNaG~§ÓGp` ÝÃ+•e0¹™B¡$Sái…vet§š~U$õq}$ öÿúÈVÑ .$GÈ "<¢N‘G42•fO
+y„l9­N•G’@WòHý¸<’º–G"èªw41::è¨4ÈÄý^¼ïV}‰R˜¬›äd<kElO SÇØiÔ
+h°þ¯ Î(CMÐ'gÈ’uáeä™înÖúLäf«>“
+diõ1A¿”‘>@F–¬ i2}Š@&@‚ƒO¢‘)çÅ©úX
+äJ‹—Ç ×êX„¼žP¾~˯ïgyº“ű-º+»|„žH¥Âd˜ŒšJµ¾ÿºZÞo¨%>]*þ®‡[ÔS@°l—Š´tû ´ä„kQ†„SeúwÇt¤•¸s=9šP”<p‘Íaøy" }´M±t¥H˜½8U¤Á‚´HšBlá{¡Ùa†×¾«ª^Η×SA-"N!rkq Iè×qŒz&Ó ßÄY“€hT³ÕÈ3R®éOnjø}ÊŽ•-ÔdH+myN"¹4\©}p|ùóøØÔ
+endstream
+endobj
+10078 0 obj <<
+/Type /Page
+/Contents 10079 0 R
+/Resources 10077 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+/Annots [ 10071 0 R 10072 0 R 10073 0 R 10074 0 R 10075 0 R 10076 0 R ]
+>> endobj
+10071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 677.409 137.503 686.099]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 596.649 294.823 607.187]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__nested__target_a9fe36fe8eeae05ed97b04d81cf15da9a) >>
+>> endobj
+10073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 437.447 137.503 446.137]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 356.687 310.407 367.225]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__num__procs__target_a13af4587be3afb6814c6e795a78625c1) >>
+>> endobj
+10075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 197.485 137.503 206.175]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 116.726 239.52 127.263]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__schedule__target_a06cb888a2de5d84cb252f7a09767d404) >>
+>> endobj
+10080 0 obj <<
+/D [10078 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2278 0 obj <<
+/D [10078 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10070 0 obj <<
+/D [10078 0 R /XYZ 70.866 753.745 null]
+>> endobj
+2282 0 obj <<
+/D [10078 0 R /XYZ 70.866 720.883 null]
+>> endobj
+8609 0 obj <<
+/D [10078 0 R /XYZ 70.866 670.259 null]
+>> endobj
+2286 0 obj <<
+/D [10078 0 R /XYZ 70.866 661.578 null]
+>> endobj
+10081 0 obj <<
+/D [10078 0 R /XYZ 70.866 611.576 null]
+>> endobj
+2290 0 obj <<
+/D [10078 0 R /XYZ 70.866 581.991 null]
+>> endobj
+2294 0 obj <<
+/D [10078 0 R /XYZ 70.866 534.987 null]
+>> endobj
+10082 0 obj <<
+/D [10078 0 R /XYZ 70.866 513.783 null]
+>> endobj
+2298 0 obj <<
+/D [10078 0 R /XYZ 70.866 480.921 null]
+>> endobj
+8610 0 obj <<
+/D [10078 0 R /XYZ 70.866 430.297 null]
+>> endobj
+2302 0 obj <<
+/D [10078 0 R /XYZ 70.866 421.616 null]
+>> endobj
+10083 0 obj <<
+/D [10078 0 R /XYZ 70.866 371.614 null]
+>> endobj
+2306 0 obj <<
+/D [10078 0 R /XYZ 70.866 342.029 null]
+>> endobj
+2310 0 obj <<
+/D [10078 0 R /XYZ 70.866 295.025 null]
+>> endobj
+10084 0 obj <<
+/D [10078 0 R /XYZ 70.866 273.821 null]
+>> endobj
+2314 0 obj <<
+/D [10078 0 R /XYZ 70.866 240.959 null]
+>> endobj
+8611 0 obj <<
+/D [10078 0 R /XYZ 70.866 190.335 null]
+>> endobj
+2318 0 obj <<
+/D [10078 0 R /XYZ 70.866 181.654 null]
+>> endobj
+10085 0 obj <<
+/D [10078 0 R /XYZ 70.866 131.653 null]
+>> endobj
+2322 0 obj <<
+/D [10078 0 R /XYZ 70.866 102.067 null]
+>> endobj
+10077 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10095 0 obj <<
+/Length 2352
+/Filter /FlateDecode
+>>
+stream
+xÚí[]o¹}÷¯ @!+–¼ü6ÚYÛÙz»qRG}JöÁ‘ÇŽ°²”Ê‚þû·=¤±Ä5P`_bE3sÏåååå¹g(žÝg<ûéäÇñÉ_Þ:™9æ‘Ùø.³œ9c2뉑o³Oƒ³¼ù0¾¸ŽÈºaÑ!œýòæãÇò«ó÷gÿ~wq5
+âƒ7Å¿ãË÷W¸OzÜotõȻ˳á¯ãŸO.Æ'ÿ9Àç™ÈȦ„/
+Hë2¬füú§‹q™ —WÈ“·CÒ@òÁÙEùõõÅÛ‹ë‹+üwÃÁ:ÝœcŽÔ.ÿ”–L+ùä"o¦°–™àÌjoš9l㵯ÈCÅh8œÃ±Åüqµ\OV‹eé៫LÎã¯Ï“õC>_ݬ¦‹yp¾@z
+ÏFÂ3Ã+ŒÇõ—åY¬WÓyÎ ¦“ÍQ ©™v”Y%°<^8-‘B:F¶´¤LéÆlúåôtñð­×*&¬L‹ÄrFF¸÷!ºƒ|Õë9ó*¬—¬…ú8õk~»žååEmhÂœi"ìÕÍr(ôÓÀ·Dœf^&ñËÄíuɉYž"ì’kÜ®^w©³B¤ÀV–).vŽ\iŸ¹æѶz0¯òêÚòùÚoÓùíß:£€•)…Òœ)ŠÓ¾
+¯<4“#`å5ã2΢Õ¿åôen¤(Ô j'˜×Ï#kFÙîŽrQòÓH¾HÊ#Kž(-iXÚf%uï0 ÇWî0?c`‡åÂÜôsÍúá Bfºƒ-û”/‹19ËQ‚.åmÄøÛjÙ±Ö…d¤]X)P)«à?Án›X‡äUu BHº¢I0ˆqN%ó)†¥„eÆö ¦Â¢¤@UœÏ̇Åíô3ç”/;"ªà„¶õ­Ï攎+†`à_1?:σÕù´`SEøoVåßYÉ—ðIhY~XÜÕ3ÄiV]ì&S(Œ>lN`€‚ÓË"y-Pƒ%î™çò‰M °;p˜
+Ü«æÂ_+o#ÎX|uÈpÍ)W_§å§ËâÚͤzø{(N7Õõû|Ž@²Þ¬òÛÊÒrñP›É›Æg³Exôût~ß Ûi®š*g‚90è×~&ÒÑMeP—÷Ut¯ñا‘ÖfKðtB~ðAï#b/Q+ Ùš´7bùX~< ÐÁ•éƸµÙH&`¶füºâû[H863ôí`g‡ïXHVn,µ†aw³Þ¶ŒØÏÃQ¨•OíÑ ¢«Œ §Xdû¶o.0,¡TKtˆñˆ“ÐÿüÖ²f± 'VX¦¼5âMJúÑb…=­®ëünXÔþ|>ÉŸJ[£q…É*ÂÁèjnôaý%<6CfÞåÅþ]|~»žOÂBlågœÛHigãZ¸±îªUzȪ,¯v¬Æ¢<væ•v(&Ó(d9qÄr4ˆŠ/-ܹ#«„Ïñ”Ôj¦Å Ûs*d¾E
+&
+AG³ø1oV––´Ô©¥+…fé0?c`LŠýì']‘?P»ÒH“$A&m™ìr§ÜBŽ2¬“‡Œ`{É-ÍŠÔ6
+¯Ô^±…‚ÒhÂë"e$R& DÊÀ¢Tˆ-ýÅE“ ¨-ÁRèÝ’¨-¦Ú"Áœ2IÔ–`Ë`yôT[’@WjK½[mI[«-ì¿« oýdX4³Ú¶½­Z<J‰F^0sŠ¡Óˆ<ÄÃûXóÿ.ò„Ó$Îû"O°dûH< +‰§ÙÆÅFc’Œ2l4:垆KÛ°¡ã
+‰Û€=PQ2X„"E$ÈxF<ŠDO=Ib0ʤ‹– …å@5 µ‰° ¶µóZj { y"ï˜ ¸S0$„8RM2¿›šDÛÎEÙç¢lØÃ,: qì!SZ
+ÇúŒBÓ
+endstream
+endobj
+10094 0 obj <<
+/Type /Page
+/Contents 10095 0 R
+/Resources 10093 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10039 0 R
+/Annots [ 10087 0 R 10088 0 R 10089 0 R 10090 0 R 10091 0 R 10092 0 R ]
+>> endobj
+10087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 675.617 137.503 684.307]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 592.678 218.396 603.215]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__lock__target_ae0143cd4f71cdaef22620e3cd9ab0911) >>
+>> endobj
+10089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 428.648 137.503 437.338]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 345.709 238.57 356.246]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__nest__lock__target_a4e1ce159d068f5d4399d4377f2042ae1) >>
+>> endobj
+10091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 181.679 137.503 190.369]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.419 69.87 157.175 80.21]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t_a9f3dd5b07bf263d19c925f2e6937c2f2) >>
+>> endobj
+10096 0 obj <<
+/D [10094 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2326 0 obj <<
+/D [10094 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10086 0 obj <<
+/D [10094 0 R /XYZ 70.866 753.531 null]
+>> endobj
+2330 0 obj <<
+/D [10094 0 R /XYZ 70.866 720.228 null]
+>> endobj
+8612 0 obj <<
+/D [10094 0 R /XYZ 70.866 668.012 null]
+>> endobj
+2334 0 obj <<
+/D [10094 0 R /XYZ 70.866 658.716 null]
+>> endobj
+10097 0 obj <<
+/D [10094 0 R /XYZ 70.866 607.832 null]
+>> endobj
+2338 0 obj <<
+/D [10094 0 R /XYZ 70.866 576.949 null]
+>> endobj
+2342 0 obj <<
+/D [10094 0 R /XYZ 70.866 528.207 null]
+>> endobj
+10098 0 obj <<
+/D [10094 0 R /XYZ 70.866 506.562 null]
+>> endobj
+2346 0 obj <<
+/D [10094 0 R /XYZ 70.866 473.259 null]
+>> endobj
+8613 0 obj <<
+/D [10094 0 R /XYZ 70.866 421.043 null]
+>> endobj
+2350 0 obj <<
+/D [10094 0 R /XYZ 70.866 411.747 null]
+>> endobj
+10099 0 obj <<
+/D [10094 0 R /XYZ 70.866 360.863 null]
+>> endobj
+2354 0 obj <<
+/D [10094 0 R /XYZ 70.866 329.98 null]
+>> endobj
+2358 0 obj <<
+/D [10094 0 R /XYZ 70.866 281.238 null]
+>> endobj
+10100 0 obj <<
+/D [10094 0 R /XYZ 70.866 259.593 null]
+>> endobj
+2362 0 obj <<
+/D [10094 0 R /XYZ 70.866 226.29 null]
+>> endobj
+8614 0 obj <<
+/D [10094 0 R /XYZ 70.866 174.074 null]
+>> endobj
+2366 0 obj <<
+/D [10094 0 R /XYZ 70.866 164.778 null]
+>> endobj
+10101 0 obj <<
+/D [10094 0 R /XYZ 70.866 84.899 null]
+>> endobj
+10093 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10111 0 obj <<
+/Length 2473
+/Filter /FlateDecode
+>>
+stream
+xÚí[ßoI~÷_1ÒI'–ÞîêßÑÝI9ÇÙ۽ͳ٧d0`-†,Eùïï«™Áž˜@+º‡{Ø…ÀÐ_uõWU_ÕŒeq[È⧳Ï~|tDtNÛÂKœ+|$áT1œzN¸ úGÔ{÷æ}ÿ÷á/gó?Ï–…*”òB_þ&ÈXŒïÎ>ü.‹ ¾ü¥BÇP|)/½+°hÄ›yquöŸpERHíô·WÃLc„ Y0ʧ˜¿¾;ÿw¦'¡tHoD qØÇÞ{//ºèØ,))œ‰Ii¡ulAȇÞÕð²odï·óúß—¯/./Þž_ôÆêÿëåûáÅeõ¥«ùpþëË««ê£WïÎ{sñ¶ÞHùÿáÏïÞ>ÝÍ–a!À fßfŒÕÂý°Ùd­ÕÜâmtMÚ:%dƒ·8Úþ@I){¯¦ëÑl>ÔÆNïÇ«Ùçõl¹`|mlÃK²¨(<HQ®ójúQJZÌÊ«ËŸÖÕë|¶˜VïTôÕ›åMõÊ?™O·Ÿá_z9šˆO¢‚KžVÂJÓ°›j»ßLﮧ«ÚêÑzT¿[Ž7wÓÅzô¸«;vª—wŸŸžC„³5¯$éÛH•€E-$U aÓâ|9îƒte %4åÀUÊ©ZÀõÉtîXiüغÐF!"ÝÁ{¶QD“ØáÝ^V}e{·L™ÞtÝX㼚+xò-ü/š{oEÓ@ŠAyDP…Ã
+g ÐÛp9½ékød5]Œ9öMp½k6ôkõ¾›&¿àUá,¼†=|“·’­+¤%ëx%¬èêðžLï׫%›õµ#ÕKœÎ
+*>ëñÑb²'µ[¸Þk“Á ß2©9ƒ² ŒE"°+ô†­¾Û,:c!² Gè'” '„l"9Äz„gUª$¹ ¸JY¨0×~<—ª8ˆiãÒê<üT×òI"gËʺ½¬…ïúÓì¾z‡Ò •c{›q­¾°òÕßÞNÐÊA£õVé߬–wÛE¦Í¥çó%ÿôËlqÛ/J_m;B‰€d€ÃVx-­þHd“‹*®nk×^âgÖº¦DI~Péâ:i+…ä„G3;@”:G]wÝì³NDPÙzøÝ쥲†œÑOD]Ã
+: Íõþ¨ÑŠÇäÀä¡Z û:Of\–Í¢’;iSàuíôŽX¶rM»Òì×àG0¨ÉñÉ $|¯Ù isv¾ßìÇ'¬?}tÃëh¿—À,e¢9‘‡6.˜r}5èrÀj°×§°{GEN"ÌB`ô´Z†C\P’‚Ê
+º'"ÐáF¨› À,ñT8mYýŽó&±òY¶:Ô–;faˆŸàrLCoXK‡´FJÃßmš¯OÖPó2ËA—C4åŽ:hÍißg±‚ó¾kYÑ=€‹^g2`¤eÍ!çl”N‡ H šÂ¡çÌÃ/G10RèzÔ9›€Ûg±" Ïs­íï˜ûqeÍÁ-îÚ)´û˜·#¶ ˜õˆ-Ý7bÛMà…rP9ÖƒX;Þ¦E°ÕB´U )JÕ°˜ìÓ–ûÉ`‹2ÈÖ1µeÇ”‘k¾¶1¨‡Ô2-Ô‚6¢ SÌ
+ã¯ÎK>>t]»“s+®:ÿáìì®â}SÞ«0&ž4¶ Bëj%²ÏVnhSBË€ë])?š¸Ýé§dÐf€Œº¼ß„Ü_³ ½H Ñ\ ëSèVÁÞáq
+9ņ`˦öYsÆ‘§CòŒÊ[:Üã<0â8Í
+Œ€÷Ú§v6‡ëv6ÄEÙ4ácâÙ ‡ÊÉ>&Þ(:ÎÇ»zG:ƒo5J§öժ˧^hÿðÆã&Òû\kµð…‘4Â+ŸCa%«B·0–ÐcúØeVö¡üÝC/ú¿<xév>$"h¾IöP •Ï6ñ]Bež¸¾ebõÚõ÷=ü\$}Ë_÷Tkÿ•’u¸R8¬Xšâ)±
+endstream
+endobj
+10110 0 obj <<
+/Type /Page
+/Contents 10111 0 R
+/Resources 10109 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10103 0 R 10104 0 R 10105 0 R 10106 0 R 10107 0 R ]
+>> endobj
+10103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 611.261 131.163 619.951]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h) >>
+>> endobj
+10104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.593 498.068 177.349 508.408]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t_a4e79c6247177bdcb556e2d88d2095202) >>
+>> endobj
+10105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 319.629 131.163 328.319]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h) >>
+>> endobj
+10106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 235.822 236.516 246.359]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__dynamic__target_a233a11cdae963b41c186256bb0eaaa63) >>
+>> endobj
+10107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 137.503 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10112 0 obj <<
+/D [10110 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2370 0 obj <<
+/D [10110 0 R /XYZ 70.866 771.024 null]
+>> endobj
+2374 0 obj <<
+/D [10110 0 R /XYZ 70.866 723.985 null]
+>> endobj
+10102 0 obj <<
+/D [10110 0 R /XYZ 70.866 702.164 null]
+>> endobj
+2378 0 obj <<
+/D [10110 0 R /XYZ 70.866 680.641 null]
+>> endobj
+8615 0 obj <<
+/D [10110 0 R /XYZ 70.866 603.475 null]
+>> endobj
+2382 0 obj <<
+/D [10110 0 R /XYZ 70.866 593.934 null]
+>> endobj
+10113 0 obj <<
+/D [10110 0 R /XYZ 70.866 513.187 null]
+>> endobj
+2386 0 obj <<
+/D [10110 0 R /XYZ 70.866 481.913 null]
+>> endobj
+2390 0 obj <<
+/D [10110 0 R /XYZ 70.866 432.353 null]
+>> endobj
+10114 0 obj <<
+/D [10110 0 R /XYZ 70.866 410.532 null]
+>> endobj
+2394 0 obj <<
+/D [10110 0 R /XYZ 70.866 389.009 null]
+>> endobj
+8616 0 obj <<
+/D [10110 0 R /XYZ 70.866 311.843 null]
+>> endobj
+2398 0 obj <<
+/D [10110 0 R /XYZ 70.866 302.302 null]
+>> endobj
+10115 0 obj <<
+/D [10110 0 R /XYZ 70.866 251.067 null]
+>> endobj
+2402 0 obj <<
+/D [10110 0 R /XYZ 70.866 219.667 null]
+>> endobj
+2406 0 obj <<
+/D [10110 0 R /XYZ 70.866 170.233 null]
+>> endobj
+10116 0 obj <<
+/D [10110 0 R /XYZ 70.866 148.412 null]
+>> endobj
+2410 0 obj <<
+/D [10110 0 R /XYZ 70.866 114.933 null]
+>> endobj
+8617 0 obj <<
+/D [10110 0 R /XYZ 70.866 62.084 null]
+>> endobj
+10109 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10126 0 obj <<
+/Length 2249
+/Filter /FlateDecode
+>>
+stream
+xÚí[ËnGÝë+z5 °Ruo=dáÈRâ$~Œ¬YÙYÈ¥‘(MÁ˜¿ŸSý ºZÝT›¬…c†Ý¼çÖ©[÷qº-‹ëB?üxvðý‰ç‹`-gW…“Â[[¸@ªâì²ø09úùÅ»³ãÓ錜ŸX1Y¢ÉÑo/Þ¿¯¾zùöè?¯ßœMÉÉ‹ò¿g¯Þ¾™ÎŒgÜ‹ÕO^¿:šþ~öËÁñÙÁðe¡
+òFåJ@/Cqq{ðáwY\ââ/…|ñµ¼õ¶€GnŠ÷ÿîñœ¼VºÄõß^ýxxøöõ»Ç¸L^HÅp™%ÖÈ îûã³H }D£wúöè×DgS–Eº°¡«Á¬7üô',¶ „Wo&'S£€åäè¸úúôøäøôø þ÷‘ƒM´aë<émþiÃÂhÞ¸(Ûl¸P„0R¦ÂV ÙøÃp:SRÊÉíââ±#Š•ð þˆì6GXxÇ)S)¼b#\p)þÍâÓááÝíçdï„yâ"FXùË|Ýsêb6„ ¤´°¸%]îÝűñg²Æmd² k-|è,w}¾š*3¹Ž›=ÁÒ«À\®ç««ó‹yó«i¼ºš/ñ\¬,ƒl´<SN ÉTÌÈ ìmeúÝý§ø³ÄOiæõüöÓ|U}>¹_^¬wË/力àüþD›Ö!RˆBï`=rTýHd’ßfÆØÉ—ûO«»ûõb9¯¯FòV×5‹§å}¸?¦ŒJâ
+ãµÍ`ø5ž¦óúúõ|‰(E¬ž¯›VôjuwÛ˜™·ßÜÜÅŸ~],¯Û¬¦cƒÂHÀØ°by`üëôâ@ØÏ=ÚDBx˜xTÂ^äÇÁZW–tpÈï̵é$>Ó$¤Ãd‹>P9·éPÕÉÅ Dñ'‹æm1•\² ךKy«ä’´Ñ\Ú KôúýrKœUám‡äá†Õa,W™Ö‹ö\¢¿i#çzåi-ô¸¿«Ð£–ÁtžhH²¡óìYË< dÇYIÃØþ˜Á
+p–bnºHh“—£)îŽÊ&'©|Ÿ,z3Ùáb¤°ÄH@!dž°Â¼a:Äì¨+iœ:¤ºŽJ¢žKV"ÞµsÒH>}†Ö)ZröÓ•Ô_¦+ñ€®äý°®d|õ+Nû Kä*KZÛ1Â’Âæg
+endstream
+endobj
+10125 0 obj <<
+/Type /Page
+/Contents 10126 0 R
+/Resources 10124 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10108 0 R 10118 0 R 10119 0 R 10120 0 R 10121 0 R 10122 0 R ]
+>> endobj
+10108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 713.781 218.898 724.319]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__lock__target_ad89d895bee4a609c0e2ec42ec05b7cbb) >>
+>> endobj
+10118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 553.353 137.503 562.043]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 472.04 239.072 482.577]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nest__lock__target_a267a99f95a305d5c31732260a125db1a) >>
+>> endobj
+10120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 311.611 137.503 320.302]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 230.298 230.052 240.836]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nested__target_a2d14b704495026d644c53bba54e56602) >>
+>> endobj
+10122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 137.503 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10127 0 obj <<
+/D [10125 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2414 0 obj <<
+/D [10125 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10128 0 obj <<
+/D [10125 0 R /XYZ 70.866 728.766 null]
+>> endobj
+2418 0 obj <<
+/D [10125 0 R /XYZ 70.866 698.851 null]
+>> endobj
+2422 0 obj <<
+/D [10125 0 R /XYZ 70.866 651.406 null]
+>> endobj
+10129 0 obj <<
+/D [10125 0 R /XYZ 70.866 630.09 null]
+>> endobj
+2426 0 obj <<
+/D [10125 0 R /XYZ 70.866 597.116 null]
+>> endobj
+8618 0 obj <<
+/D [10125 0 R /XYZ 70.866 546.087 null]
+>> endobj
+2430 0 obj <<
+/D [10125 0 R /XYZ 70.866 537.25 null]
+>> endobj
+10130 0 obj <<
+/D [10125 0 R /XYZ 70.866 487.025 null]
+>> endobj
+2434 0 obj <<
+/D [10125 0 R /XYZ 70.866 457.109 null]
+>> endobj
+2438 0 obj <<
+/D [10125 0 R /XYZ 70.866 409.664 null]
+>> endobj
+10131 0 obj <<
+/D [10125 0 R /XYZ 70.866 388.348 null]
+>> endobj
+2442 0 obj <<
+/D [10125 0 R /XYZ 70.866 355.374 null]
+>> endobj
+8619 0 obj <<
+/D [10125 0 R /XYZ 70.866 304.346 null]
+>> endobj
+2446 0 obj <<
+/D [10125 0 R /XYZ 70.866 295.509 null]
+>> endobj
+10132 0 obj <<
+/D [10125 0 R /XYZ 70.866 245.283 null]
+>> endobj
+2450 0 obj <<
+/D [10125 0 R /XYZ 70.866 215.368 null]
+>> endobj
+2454 0 obj <<
+/D [10125 0 R /XYZ 70.866 167.923 null]
+>> endobj
+10133 0 obj <<
+/D [10125 0 R /XYZ 70.866 146.607 null]
+>> endobj
+2458 0 obj <<
+/D [10125 0 R /XYZ 70.866 113.633 null]
+>> endobj
+8620 0 obj <<
+/D [10125 0 R /XYZ 70.866 62.604 null]
+>> endobj
+10124 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10142 0 obj <<
+/Length 2418
+/Filter /FlateDecode
+>>
+stream
+xÚí[MoG½ëWÌiAa§»ú[À}$"Ù+1';™ÉD$ÊKS0ößï«™¡ÄÍPÙV ‹âõª«««^=µeq]Èâ罟Æ{?]ÓÅøªðRç
+I8UŒ/‹'¼Ñ#œ¼=þ1þuïh¼÷ß=²P…RZhë«ï‹ÉíÞ‡?dq‰‡¿RèŠoÕGo xqSœïý§\)'¤ñ úooÚßwò¾×Za¬ÎkƒPF'¸çGãHï„¢ˆ>ˆ ÀÓßO:
+ d¢Ul%^ÔÄë
+0°Gíò-àm²QLÔiBiJ0ûù ú¼Ó9ÖJÊ
+M­µöWus.{p­Ñ´ÖÛb'=­%¸‘Ét-uUüžßh­pFAÈ2`’[7Üh­#hw–µ‚Òª@n´É`Š”‡Éƒø¬Û躜pçæM¦ ¤Í³ùã³?§³ËwTƒÑ8f9øüÀµ>œyl_°õøñ¦L 劫²ˆÖv¯í‰¿àQä
+ aÊlçv«Ô‘ÐÒ¤~÷GY1ž]:ýltI¡¸°ì^Ò˜rtêæ
+¹rÝ1Æ­æ²-B¬
+†·ÝC¬
+›´Û…¸¿y¬K×ΡՄ‘®•ºÅèI Ú«¥‹HèÔH£9Åê4¾´ ¼Êe €6€}¯ˆ0 Ä‚¤!D¼@ —KQìsãâeÂ䪷®X[2½Åçé×úÕ´ôùÙðÿOÓEóüºœ!O±û‹%ᾚßÝ.Í”«Æonîø«ß¦³ëÕ¨í§3™Á€¬¢çi§{FúÎá‡üîØ£æ²ÃZƒÐí|KLmÉ€±¶ƒßÒ*Rue„vÊqº ¾ø@ÄÍ&òU<Æ,úÛÒ´©|—¹ÑïV‘×Êw9@—ú]:á\ý\^Þß”èÕ4dBg:ä(AÏ$¥áhS\Jiþï*¥ˆt% I­6PÒv‡l„´rÒ›OŠ{V\¹d³€Ü--Ç}ÃdðÉÝÙV,6Õ³p4£Ê²œl¦SÎbÕ¼¼½»œrë)ç½"Kð^Ƕfb^KcRƼ”`€"G”kƒªu؉aXáBm‰c°¡ÊD *<Ø÷R™t·Ê„úݯ2YH{'œq;ªLjKƸMT&²
+0Äó<Q†ãÔ Òv1®ÙM‡|2 ¶”ïtD·Q&ÃÒtÄ<%ÍvK{dkë3²ºöœÌƒ^ÀšÂë±0m€¨r°0¶D*öë<±¢ÿè<:æ1%sw‡-ùeñÝUç±›è<Äûð>‹ÎöÐ7z²@7BO½
+endstream
+endobj
+10141 0 obj <<
+/Type /Page
+/Contents 10142 0 R
+/Resources 10140 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10123 0 R 10134 0 R 10135 0 R 10136 0 R 10137 0 R 10138 0 R ]
+>> endobj
+10123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 713.781 253.615 724.319]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__num__threads__target_a15acaf69c9044e0cb29fb85896f6e057) >>
+>> endobj
+10134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 553.353 137.503 562.043]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 472.04 239.018 482.577]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__schedule__target_ab7885f8ddaa9153d1a2e336d7d9f6bd9) >>
+>> endobj
+10136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 311.611 137.503 320.302]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 230.298 285.66 240.836]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__lock__target_ae30f77c49a0befb6d8807aec84d38153) >>
+>> endobj
+10138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 137.503 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10143 0 obj <<
+/D [10141 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2462 0 obj <<
+/D [10141 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10144 0 obj <<
+/D [10141 0 R /XYZ 70.866 728.766 null]
+>> endobj
+2466 0 obj <<
+/D [10141 0 R /XYZ 70.866 698.851 null]
+>> endobj
+2470 0 obj <<
+/D [10141 0 R /XYZ 70.866 651.406 null]
+>> endobj
+10145 0 obj <<
+/D [10141 0 R /XYZ 70.866 630.09 null]
+>> endobj
+2474 0 obj <<
+/D [10141 0 R /XYZ 70.866 597.116 null]
+>> endobj
+8621 0 obj <<
+/D [10141 0 R /XYZ 70.866 546.087 null]
+>> endobj
+2478 0 obj <<
+/D [10141 0 R /XYZ 70.866 537.25 null]
+>> endobj
+10146 0 obj <<
+/D [10141 0 R /XYZ 70.866 487.025 null]
+>> endobj
+2482 0 obj <<
+/D [10141 0 R /XYZ 70.866 457.109 null]
+>> endobj
+2486 0 obj <<
+/D [10141 0 R /XYZ 70.866 409.664 null]
+>> endobj
+10147 0 obj <<
+/D [10141 0 R /XYZ 70.866 388.348 null]
+>> endobj
+2490 0 obj <<
+/D [10141 0 R /XYZ 70.866 355.374 null]
+>> endobj
+8622 0 obj <<
+/D [10141 0 R /XYZ 70.866 304.346 null]
+>> endobj
+2494 0 obj <<
+/D [10141 0 R /XYZ 70.866 295.509 null]
+>> endobj
+10148 0 obj <<
+/D [10141 0 R /XYZ 70.866 245.283 null]
+>> endobj
+2498 0 obj <<
+/D [10141 0 R /XYZ 70.866 215.368 null]
+>> endobj
+2502 0 obj <<
+/D [10141 0 R /XYZ 70.866 167.923 null]
+>> endobj
+10149 0 obj <<
+/D [10141 0 R /XYZ 70.866 146.607 null]
+>> endobj
+2506 0 obj <<
+/D [10141 0 R /XYZ 70.866 113.633 null]
+>> endobj
+8623 0 obj <<
+/D [10141 0 R /XYZ 70.866 62.604 null]
+>> endobj
+10140 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10157 0 obj <<
+/Length 2413
+/Filter /FlateDecode
+>>
+stream
+xÚí[ËrG¼ó+pÚ
+ZEïG!‘òf4ý<ú0>þùÙÛéÉ»É!…8öjrè‰ÆÇ¿={ÿ¾þÑó7Çÿyuòz:1¤ÇϪ?§/ß¼ž°v¿Öyõòxòûô—ƒ“éÁ ðõȌȱ¢+À¨ÓèìêàÃïzôoþ2ÒŠñÖ×êW¯F°(áÅåèýÁ¿;,'çTŠ!3ý·—?½yõ¶79nKনt´îôäýô>&“QŽSL&«ˆR†ùºÓFåK¸—QÜòî›ã_;p&.’Ò†sÏÖYöi}/_#7_L¢¤ëññIýãw'/NÞ¼Æ_ï¸NñU$»Í>‹ät–ïLÔ›eãxdH%cÜfÝx£ôÚVÉýÉ¡ÑZ¯æg÷ 1lT‚ò!òÛ açžÊá ;RÈñ/矎Ž®¯¾t Ç l*ƒœ’a›È«Ùͪ£æŒS:¥¨d&rÔE7ªõ`.‚ê´2í(_^ŸM’v £œ‰E£|À´¼|ºœ7¾ÏVM=,V³åùéÙ¬©ƒÙùDÞ]ÎøL¬OÖ*¸äåäCÒI9rxè_ýöö“|ìi[ójvõi¶¬_¿¸]œ­æ׋›ê‰×5ñý ë6j× ùAƇ&)BœªC?¹ì3£‡Îùñ&_Ì–µÓΟè*2AzãX ûƒ8%· ]¹TàóÊ0
+6ä =Eåµ"6%@=²œLº­¦PT8)¯–‹O—³U;I%à’ïæ-Ù^À&f¯ÚXýïËLÊü»:={mÀã„"áh•mGd!tp[‘€Ók[ÖaªŠ§‹[Ø :p #Gi£-*Ó4Æç³Õéürö¹%g7gËù—uùµ Ó9<Ÿ}Ôšóê·«Ÿ6x9_4ô‡ñ²~q}>i¨é²y³»)cØHhÞåCÚ‡j0búXŸdã]KžX=VçI«NLv=£ö؆èqØ1ˆwµ¼=[]7tü¯;×e?~~}v{5[¬Nÿr¦ã~gV\7ÀÆŽ·Ò1Æhñhhà ^~“23 GÌÄõI&Æ‹w|\ý­3fÒÂ,(ps=×Ø›Ó?G¦kØ
+×¢Ãævn `¾ÛÉœPëi7'3¦G|Ìz¨ÃÇ_VËŽÚG¥zW¢t0¯*¶­Òé lTÖÛµŸ6™©/õ:¤ï8Àt ¥‡2x{¬æO8›º”ñFS±,lÈEÙlŠ'ªº¯•©T½VàþhLüœM˜õî,Üz]ý1¿©_Í+MBÞ»Ó%¾J16ï_ÌHR¤êéj½ œ/¯¯ÖÇÌ6¿¼¼–~/.6½v”ïlã)‹¶¡ØsúйۋÑí{LéˆØÈ9ô«´—óE×±õI6…{ÎoÉ*¹tˆ]‡ }J™î„0DhtHQüWDi”³˜†
+E¥qùvqÓÉÅh8.„"°„M ñËž·_žÀôÑéŠ
+®²‡öˆ Í´Þ§áàêƒ4›­e"cæq@1&È\™nI(M KÚ‚uZ¸»É]U’›¾ ‡*Ñm›ê]xžà 8†5(ʵ²`7¹‹´“ÚÚMx*± ]}Ç‚ Ç…œ8í§v…GS»šY@øGBÙp–BÓ×9¥Ûqõ¥¦·~O¡ËÆú$ký7g°X‡‹
+kRÜWm‰CÔÂàB(¢¶ÈY.Ä¡rKèFnÉ ¿¡·”Àmô– ¶ç;I'h¦ ª7hضåèþyŽNXbŠ@ÃѱâBW»È(öï»ÚUDè!f¬N©€Ò#'Q$ô
+nk k6iD4kÚ"}CD ¦P>Ø
+endstream
+endobj
+10156 0 obj <<
+/Type /Page
+/Contents 10157 0 R
+/Resources 10155 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10139 0 R 10150 0 R 10151 0 R 10152 0 R 10153 0 R 10154 0 R ]
+>> endobj
+10139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.402 713.781 305.834 724.319]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__nest__lock__target_a58ca41a517edb870a97a65da2f539aae) >>
+>> endobj
+10150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 553.353 137.503 562.043]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 472.04 228.868 482.577]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__lock__target_a11a0b55435284ba7b75634a128526476) >>
+>> endobj
+10152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 311.611 137.503 320.302]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.132 230.298 249.042 240.836]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__nest__lock__target_a23fb6599f848f2bf6b4e97a9bdb61e8d) >>
+>> endobj
+10154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 137.503 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (mic__lib_8f90) >>
+>> endobj
+10158 0 obj <<
+/D [10156 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2510 0 obj <<
+/D [10156 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10159 0 obj <<
+/D [10156 0 R /XYZ 70.866 728.766 null]
+>> endobj
+2514 0 obj <<
+/D [10156 0 R /XYZ 70.866 698.851 null]
+>> endobj
+2518 0 obj <<
+/D [10156 0 R /XYZ 70.866 651.406 null]
+>> endobj
+10160 0 obj <<
+/D [10156 0 R /XYZ 70.866 630.09 null]
+>> endobj
+2522 0 obj <<
+/D [10156 0 R /XYZ 70.866 597.116 null]
+>> endobj
+8624 0 obj <<
+/D [10156 0 R /XYZ 70.866 546.087 null]
+>> endobj
+2526 0 obj <<
+/D [10156 0 R /XYZ 70.866 537.25 null]
+>> endobj
+10161 0 obj <<
+/D [10156 0 R /XYZ 70.866 487.025 null]
+>> endobj
+2530 0 obj <<
+/D [10156 0 R /XYZ 70.866 457.109 null]
+>> endobj
+2534 0 obj <<
+/D [10156 0 R /XYZ 70.866 409.664 null]
+>> endobj
+10162 0 obj <<
+/D [10156 0 R /XYZ 70.866 388.348 null]
+>> endobj
+2538 0 obj <<
+/D [10156 0 R /XYZ 70.866 355.374 null]
+>> endobj
+8625 0 obj <<
+/D [10156 0 R /XYZ 70.866 304.346 null]
+>> endobj
+2542 0 obj <<
+/D [10156 0 R /XYZ 70.866 295.509 null]
+>> endobj
+10163 0 obj <<
+/D [10156 0 R /XYZ 70.866 245.283 null]
+>> endobj
+2546 0 obj <<
+/D [10156 0 R /XYZ 70.866 215.368 null]
+>> endobj
+2550 0 obj <<
+/D [10156 0 R /XYZ 70.866 167.923 null]
+>> endobj
+10164 0 obj <<
+/D [10156 0 R /XYZ 70.866 146.607 null]
+>> endobj
+2554 0 obj <<
+/D [10156 0 R /XYZ 70.866 113.633 null]
+>> endobj
+8626 0 obj <<
+/D [10156 0 R /XYZ 70.866 62.604 null]
+>> endobj
+10155 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10177 0 obj <<
+/Length 1742
+/Filter /FlateDecode
+>>
+stream
+xÚÍY[oâV~çWXªTTNÎý‚ªJÙ,i»ÚK
+ìC•ÝœÄ*Ô˜®Ò_ߟcÇƆ…•ú„ØÇ3s¾ùÎ73†F·~í¼štÎ.­ˆ,qZ‹hrJ¬Ö‘qœhMæÑuWãH¯¯9ï~ß¾ê1Úý8þs<œôúÜØîx2êI¸tþ /‡£áû‹a¯Ï¨Sº{ñÛùÕd8òwu0uñö|<ö—^¸øønø~ÒcœvÏóß“ß?¼ï}ž¼é '¿; ‚¥+ƒ³–X.£Ù}çú3æpïMD‰p6úš¯¼¤DIŸѸóG‡V7¬DÄ8qŒ©êŽ5#´ºeŒžR¿åÍúqga»Yº™…Ï£øшÓx9‹1Þ³Kx(r
+ám¦ëÍbZ8ˆ˜$ØÒ‚2Œ¼Ž?QÊ—I¾(nø·H–±ÿ$¸ÿ»ºññ‰E¸W£ÇT—Ü‘ÖÜŽã*Àð
+lÊî’µÿ´ÆÝÖ¥À~Eä§áîm¼„@Œ¦YôMºº/ŒÄUÓ‹Å
+ýš,o«yÔO!#ŠDŸ#<r‡B=jêíA(µ¹Çº%uZ4é©=i’"\˜âìYNÞ•'ZZ'ëìéðý_JÑÍÍb57É Ô©# ÌÔVí§¤³[œ¬{dÆ
+ǪwÕS˜Ã2Í-5OÞ ‚Èónüq\%ó
+嫣
+‚´Ç "ñBuq Ôb©OáXƒ®‰-Ï 9jT 'ˆÛ¨¡¬4PïŸò™ß8£{¸ÌpkoÊ.§mÄ•"æ(ÁáÔ­¼%ejéÞ[@ 5¶\1p_`}Å¿˜“~,!¬]>tå¼eš vŽØmöšåG¬öžSƒ *Ýì9ϧ ²Í
+°LcßÙŒŸkÂKÝÙ‘:œ§$CIÅËÒYwçÑÔ[âTVÊÚÖ&l¢Œ+ÅÓ¹«¸a)²‚[p5ŸfrÅy=¸²_mÅN0ýxúcù ÀZYÃÏ•å šÜ>¯m;à„Vg˜¢ É©°J½-Í]'KÔ‡Ï-#¶%*/ø/Ö~”Î`¯åõx™aP]ñöé™'y¯De†l¯¸PÛ-´c A¨™« B«Bµ×\ Ù„æ?ߤ°G›®¼%%¨º0«)è»NàÙ¯{.5±… µÖß@a.£06|R‚ÃØðɽ¥²ºá‚ÂؼY³_˾ˆ@†à¤“J‰B30NÔòVrîUæ`¤áâ1åoD-ª¢oSF3i¾…"ÇuS¿D;C·rí){Ѷo¾ø{ÉwƒhUðÛOhb$tEFo{þÏÖÈè
+endstream
+endobj
+10176 0 obj <<
+/Type /Page
+/Contents 10177 0 R
+/Resources 10175 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10165 0 R 10166 0 R 10167 0 R 10168 0 R 10169 0 R 10170 0 R 10171 0 R 10172 0 R 10173 0 R 10174 0 R ]
+>> endobj
+10165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 685.729 149.015 696.249]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_ad96d01635b581139184cc242833fb699) >>
+>> endobj
+10166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.515 685.729 168.454 696.249]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set_a6a8584e950f796cd52ad93da8c4859d5) >>
+>> endobj
+10167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 636.357 129.668 646.876]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+10168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.056 500.623 195.281 509.371]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h) >>
+>> endobj
+10169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 391.247 142.658 401.659]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data_a66f89c5dbd8d598d6c7f9d2c6d67d5bb) >>
+>> endobj
+10170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 341.875 206.476 352.215]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data_a103d4631df00ccb591b016586169fe49) >>
+>> endobj
+10171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 330.333 167.019 338.951]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data_a2dabfc1a9752b76fbd6e37ee7425a1ba) >>
+>> endobj
+10172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 315.347 127.164 325.687]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+10173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 315.347 192.246 325.687]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data_a0950622e846120b1b0dfaed25bfba260) >>
+>> endobj
+10174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 302.083 183.773 312.423]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data_a2948211bfa65a8a27f2ac6accff8e7bb) >>
+>> endobj
+10178 0 obj <<
+/D [10176 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2558 0 obj <<
+/D [10176 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10179 0 obj <<
+/D [10176 0 R /XYZ 70.866 700.648 null]
+>> endobj
+2562 0 obj <<
+/D [10176 0 R /XYZ 70.866 670.75 null]
+>> endobj
+2566 0 obj <<
+/D [10176 0 R /XYZ 70.866 611.037 null]
+>> endobj
+10180 0 obj <<
+/D [10176 0 R /XYZ 70.866 589.7 null]
+>> endobj
+2570 0 obj <<
+/D [10176 0 R /XYZ 70.866 568.72 null]
+>> endobj
+8627 0 obj <<
+/D [10176 0 R /XYZ 70.866 493.336 null]
+>> endobj
+2574 0 obj <<
+/D [10176 0 R /XYZ 70.866 484.471 null]
+>> endobj
+10181 0 obj <<
+/D [10176 0 R /XYZ 70.866 406.117 null]
+>> endobj
+10182 0 obj <<
+/D [10176 0 R /XYZ 70.866 356.745 null]
+>> endobj
+2578 0 obj <<
+/D [10176 0 R /XYZ 70.866 287.103 null]
+>> endobj
+2582 0 obj <<
+/D [10176 0 R /XYZ 70.866 237.605 null]
+>> endobj
+10183 0 obj <<
+/D [10176 0 R /XYZ 70.866 218.116 null]
+>> endobj
+2586 0 obj <<
+/D [10176 0 R /XYZ 70.866 197.135 null]
+>> endobj
+2590 0 obj <<
+/D [10176 0 R /XYZ 70.866 168.94 null]
+>> endobj
+10184 0 obj <<
+/D [10176 0 R /XYZ 70.866 149.451 null]
+>> endobj
+2594 0 obj <<
+/D [10176 0 R /XYZ 70.866 128.47 null]
+>> endobj
+10185 0 obj <<
+/D [10176 0 R /XYZ 70.866 116.251 null]
+>> endobj
+2598 0 obj <<
+/D [10176 0 R /XYZ 70.866 82.812 null]
+>> endobj
+10186 0 obj <<
+/D [10176 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10175 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10211 0 obj <<
+/Length 1996
+/Filter /FlateDecode
+>>
+stream
+xÚµZ[oÛF~÷¯ °@ ëÉÜ/FQ õe›b›dõÉɃ"ѱéJTÓý÷û gÈ%˦ò„‘†çòûÑä!¡É¿Î~™œ½¾±"±Äi-’É}b(±Z'Æq¢Y2™'w£Ë_ß|˜\ߎϹ±#MÆçšóÑå¿ß|ü>ºzùÇï×ï&cÆéèMõ÷äíûwãs&µÕxòøÒ‡ÉíÕX6‡â ‘½Ûë›ëÛëw—×ãÏ“ßή'gž1HKÖHg-±\&³åÙÝgšÌñÝo %ÂÙä[ur™H%ˆ’Ï‹äãÙÎh[cÕ§±f„Ö*ÏŠ|]iþ :*²¹æõ “‰Ã›\û7¥$ÊxѪw>Q*¡.y"¬Ï|ðÄÒÕ˜©Ñ:[—WÓrzq±.§³1ø﮾œB(„ÏúÂ\®QvWIN1v[ËÇMKNÁê,9'Nm±œÎÇŒŽæ«
+W£ì±,V‡t“ð'm ¡vnŠf=%TÚ,‡ò£áD‚â 8E˜r]ÎËtY
+½Ë®Ôô q£p_Šbq˜yñXçÑbÕãíŠrÝëŸðK!¾;Ç‘ºïW¼¨Ô®žÛ”j»V¹ÊQ8,
+äþƒ‚ÀQ{ò ÚcCU"-xH9$w ã­³ïªÝís •
+Yòdš¯ÐiøúQÅ}ÚØq´Çhv r§3’©SíKA€g
+äá
+ÂCZö•nK8ãèÑfPéös ”d=¥¯y7vÊ   BÇrcûËÍ›²\eU»½)Óáu&{D„£ÎÝNó‡ôélZ)Ù·@[NÓ‰¤¼Ø ÃZE‰³V‰ê
+Wû˜³Dë£íòýÛ_þ¸¹¹¾= G¿‚½™–‰ÀÌž»ùØ2:(å)!Ôxl=‚Ùï÷(éûÊNªä^×£¤¬ÐFT­ö0%¹ ”tL+i0°ºãtÜ×£0„A£(h ˃ $”DË—@ŠI
+ézØz2(i'ÝGuœ €Yjº3LÀ]úQcµ™•õªøUaçã«Î†y÷šj Ô¸€¸¸èì?ýä5nM8O]Ç2nª›ËÍ€ÛsCÖ\Gj¿Û•Ó»r³jÛ»7Sþ6ÚUeVs1ä
+K3”ž@IrÙÊÕ[J„6ʵHû f(½²u9fwÐ1mÈ‘ »,÷>ü¹ï¾Ì_((ý‚û2M‡ÅÊ»¿d9A,€p=ún¶…Ý»ÙcÜ´sâU}åsª±O,zÛ6ÔÄ!‘=mC{”™±Dó#ºAFôKB­N`ÃøS~6õ ï#Ê_<ç÷"!8U gî£4N] aÌ6çÿw³þT
+endstream
+endobj
+10210 0 obj <<
+/Type /Page
+/Contents 10211 0 R
+/Resources 10209 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10117 0 R
+/Annots [ 10189 0 R 10190 0 R 10191 0 R 10192 0 R 10193 0 R 10194 0 R 10195 0 R 10196 0 R 10197 0 R 10198 0 R 10199 0 R 10200 0 R 10201 0 R 10202 0 R 10203 0 R 10204 0 R 10205 0 R 10206 0 R 10207 0 R 10208 0 R ]
+>> endobj
+10189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 639.348 161.173 649.885]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+10190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 524.027 127.164 534.439]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a82fecff2b5d85bc04f98d2f7989df2e0) >>
+>> endobj
+10191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 509.744 127.164 520.156]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a1954a57a9240406b8c66dcb82dcb6f90) >>
+>> endobj
+10192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.572 509.744 186.96 520.156]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+10193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 495.461 157.249 505.873]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_ab1fb6f2c694432729a0f0470281faecb) >>
+>> endobj
+10194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.657 495.461 217.044 505.873]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+10195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 481.053 171.995 491.59]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_ae14fbd25ab828041ed182416810744c5) >>
+>> endobj
+10196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 466.77 186.575 477.308]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a8cfc3aa32ea6fd984b0d18a5e195da75) >>
+>> endobj
+10197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 452.487 169.503 463.025]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_adb481c80c3d1d1819a2b45d110625d69) >>
+>> endobj
+10198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.698 399.219 167.028 409.684]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+10199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.528 399.219 205.144 409.684]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a6dbf4f8e394ad619d70f3e615593716c) >>
+>> endobj
+10200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.076 385.061 181.034 395.531]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a5b1f04cf719a085f170f93a10a5e6e7d) >>
+>> endobj
+10201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.076 372.5 180.523 381.249]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a581e1bf46503e8d2a598ece70576a6cc) >>
+>> endobj
+10202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 358.217 164.518 366.836]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_acb402512d5aa797edf39318b05ca0a14) >>
+>> endobj
+10203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 342.213 167.512 352.553]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_adfafcaa1435bdc645fbbcfe2b573bca8) >>
+>> endobj
+10204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 329.652 168.508 338.342]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_afe661d57328cee197df41ff131814501) >>
+>> endobj
+10205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 315.369 146.836 323.987]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_aeea66828c89c01226c0905efd365c200) >>
+>> endobj
+10206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 299.364 126.546 309.704]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+10207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.046 299.364 200.831 309.704]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a3e9c0d1e29630696793192111df2388b) >>
+>> endobj
+10208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 245.97 151.83 256.507]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data_a843cef2fc19df03a30c02b8eeabf2f0b) >>
+>> endobj
+10212 0 obj <<
+/D [10210 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2602 0 obj <<
+/D [10210 0 R /XYZ 70.866 751.513 null]
+>> endobj
+10188 0 obj <<
+/D [10210 0 R /XYZ 70.866 738.784 null]
+>> endobj
+2606 0 obj <<
+/D [10210 0 R /XYZ 70.866 700.237 null]
+>> endobj
+8628 0 obj <<
+/D [10210 0 R /XYZ 70.866 631.043 null]
+>> endobj
+2610 0 obj <<
+/D [10210 0 R /XYZ 70.866 620.798 null]
+>> endobj
+10213 0 obj <<
+/D [10210 0 R /XYZ 70.866 539.406 null]
+>> endobj
+10214 0 obj <<
+/D [10210 0 R /XYZ 70.866 414.723 null]
+>> endobj
+10215 0 obj <<
+/D [10210 0 R /XYZ 70.866 261.475 null]
+>> endobj
+2614 0 obj <<
+/D [10210 0 R /XYZ 70.866 228.593 null]
+>> endobj
+2618 0 obj <<
+/D [10210 0 R /XYZ 70.866 175.324 null]
+>> endobj
+10216 0 obj <<
+/D [10210 0 R /XYZ 70.866 154.846 null]
+>> endobj
+2622 0 obj <<
+/D [10210 0 R /XYZ 70.866 132.876 null]
+>> endobj
+10217 0 obj <<
+/D [10210 0 R /XYZ 70.866 120.147 null]
+>> endobj
+2626 0 obj <<
+/D [10210 0 R /XYZ 70.866 81.6 null]
+>> endobj
+10209 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10233 0 obj <<
+/Length 2718
+/Filter /FlateDecode
+>>
+stream
+xÚ½[KsÛȾëWà”¢ª¢ÉÌtÏK•‹W–“ÝZ?"kO^hÖ²"‘
+Em²ÿ>_¤D@ øÔ^LH¦º{úùu÷@·….þqòÃõÉßÞE*¢JÞSqý½ZEò¦¸ž_F^E£Nϼµ£O×WoOYÞœ«G×Õ¿oNÏlˆ£‹Ÿß|þ\?^]¾»¼ºüpqyzfØG?ºøç›O×—Wõÿú­?xûñâ—÷—Öô*Ú?~üpúõú§“Ëë“ÿœH« ó,]Œ*Z.nîO¾|ÕÅÿ÷S¡¥Xü·úæ}ÁŽ”cÂó]ñùä_'zóÄŽ
+£UpÉoÙ¥g&ȯµ½/ï¿•‹ZÔwO³›åt>[ >¿yº/gËqõ+ˆ[Ñ~Ѧ.ÎLR6¸šêÝ|v[ÿá§åâíx9>?ONM^šSŽlب]ßYaªô|Ðõ_„0 lM)D_‹²(¿ ãrQÎnÊZ¦_µÓ8±1VM}œŠJ¶Ò”Ê«ŠÄ—éìn:+¿Ö_d·ÁvwÊ…ÕéW,ß–¿jmgÓõ—õ§©Ÿ"ÕŸóïk™´½+׿ÃO4w(Ëj %Q¬UA§Ã”ÕÜjR>Ô”ÜÊÊÙ­hÜHý¦„9Îeœ†ð`•Ñ¶þÞtJkNj¡¿Â™ÿ¨Ÿ?®ð¶|¼?àôa9_œŸ?–˧‡Žc1œXÇ"À[½9Ç‚7™TSbP¬ä4ÅxË«O>3Á)‚?žÙ¨4…­}+A3*—]ÍpŸTøhÅ7rÚ«¤kBÌÞ]ýòf>{\vøv‚ÝMÚË·}RÞÛÃÛhw¤w;pP6q–wGå]MI'·Ý½áý‘ãŸäÞ.g’À½½CH4”{›ÏïZî=(cP«i³éANùªâTû÷.>KÏߨÝÓ9¿òÉMFõYùiÜ,ÐA…?wsa¿Ée‡çR*ážo µÈñáž|VZ÷HÊ1 ‘Ö…’[üþ•O¢
+¥!#eFë3a4à «)yv”Cí±‚/E|Ý4ù¶”g’Óý¥rZŠ·–Ëèd•/¬}Sj
+;›Ï
+p|7„N(0§t'[MèZÉvc"û¾¼¿ÏVkV¼yxêŠ ÇrP¦€ˆ”™‚®)ÙU!Y- ÛRC¤cÚ~Ãy©ArÑöÉh+³íwÑ?çjû¥„û‚
+ô ò’´Ë³,‰+®ßºÞ1` ¾z Ÿ+ÜŽ
+ÿ%ùö{ò5üs{TYiÊeDvʯ
+±Íùÿ\Ä‘
+endstream
+endobj
+10232 0 obj <<
+/Type /Page
+/Contents 10233 0 R
+/Resources 10231 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+>> endobj
+10234 0 obj <<
+/D [10232 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2630 0 obj <<
+/D [10232 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10219 0 obj <<
+/D [10232 0 R /XYZ 70.866 753.689 null]
+>> endobj
+2634 0 obj <<
+/D [10232 0 R /XYZ 70.866 732.667 null]
+>> endobj
+10221 0 obj <<
+/D [10232 0 R /XYZ 70.866 708.489 null]
+>> endobj
+2638 0 obj <<
+/D [10232 0 R /XYZ 70.866 673.252 null]
+>> endobj
+10218 0 obj <<
+/D [10232 0 R /XYZ 70.866 649.074 null]
+>> endobj
+2642 0 obj <<
+/D [10232 0 R /XYZ 70.866 613.895 null]
+>> endobj
+10220 0 obj <<
+/D [10232 0 R /XYZ 70.866 601.685 null]
+>> endobj
+2646 0 obj <<
+/D [10232 0 R /XYZ 70.866 566.525 null]
+>> endobj
+2650 0 obj <<
+/D [10232 0 R /XYZ 70.866 526.412 null]
+>> endobj
+10226 0 obj <<
+/D [10232 0 R /XYZ 70.866 506.864 null]
+>> endobj
+2654 0 obj <<
+/D [10232 0 R /XYZ 70.866 485.9 null]
+>> endobj
+10229 0 obj <<
+/D [10232 0 R /XYZ 70.866 437.677 null]
+>> endobj
+2658 0 obj <<
+/D [10232 0 R /XYZ 70.866 402.575 null]
+>> endobj
+10222 0 obj <<
+/D [10232 0 R /XYZ 70.866 378.262 null]
+>> endobj
+2662 0 obj <<
+/D [10232 0 R /XYZ 70.866 343.102 null]
+>> endobj
+10223 0 obj <<
+/D [10232 0 R /XYZ 70.866 307.017 null]
+>> endobj
+2666 0 obj <<
+/D [10232 0 R /XYZ 70.866 271.79 null]
+>> endobj
+10228 0 obj <<
+/D [10232 0 R /XYZ 70.866 223.692 null]
+>> endobj
+2670 0 obj <<
+/D [10232 0 R /XYZ 70.866 190.262 null]
+>> endobj
+10225 0 obj <<
+/D [10232 0 R /XYZ 70.866 152.196 null]
+>> endobj
+2674 0 obj <<
+/D [10232 0 R /XYZ 70.866 118.816 null]
+>> endobj
+10224 0 obj <<
+/D [10232 0 R /XYZ 70.866 68.997 null]
+>> endobj
+10231 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F11 6621 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10251 0 obj <<
+/Length 2249
+/Filter /FlateDecode
+>>
+stream
+xÚÍZÛnÛØ}÷Wð©°€ê̹_Œ¢€Ç–Û ’Ø•5ON‰¶…J”+Q“¦_ßuxHZ)YY ‰e™Ü×µ×Ù{“4zŠhô·³_'g¿ÜXYâ´Ñä12”X­#ã8Ñ,šÌ¢‡ó«¿_ÞMFãÁ{®É`¨9?¿úxy¾º¾½úýÓèódÀ8=¿ÌÿŸ|¸ý<`L0†,/î¹½¹ùx;ð]_î¯Æî&IÏoÇãÑåõåx<ú8ò’î_'¿ýrÃXä`×Þ0naÚÁìܨ¿„Kj¶3J¸å“!†8ÃÊ þú¦ˆ''£Ow çFá«ñèf4}¾y9g£Éٿμl±*ŠÖÂ{M—g_i4Ãß~‹(ÎFßó+—‘T‚(é5.¢û³œÑÝ̨¶ÌhFh•šÛ¿þ~sS&ç.[_ÇY|q±œO›F1㈢,—€p1
+¹w•EMK2Ê«›òÍ'vûb*ÕÎåCÆ\ECN‰6<\|¡”§ól¾Jƒõq~.æi>1fÇÕcøéoY$åwøM¬âYÓSN´ÛÈHJ”µïsµf;§–h$ ë‚éIúäMdêœ<¯.rN¬´þ2.Âuãäq èy²NÒi2 !L?ÂçÛÒƒëd3]†8ÉVë‹‹x±XµdKC´‘ᆭ»ø¥p9’$åö¾dë:$¯ZÊT]ç xýBÅ?öçÁÐRw$,sÀ¥i¡°ësÔÙBa51ÒÖ-l­%IQC¼’
+âØžÎx6['›Í‰
+!îë8¥‚¤CA³&Ç«aŠXÖÁ|‡
+AŽfl²8k% è®”1‰ D]k+zÇNö ’[€¬«Ü/c†Aï1ÂÒ†0_d]ÍäÚA€jäcêiçŸ-Š#ÌŸ ;AŒcuÅËd¹B„g¼fÙrÓ¸ŸwDë=Ÿ—q?%ëÓ³³N¦ÉüWçIK¹ã §Nw·U¢^ŒÕ{È]ÍÓ,iA¯b–ÑzgDò=ô´!q(eë´±‡lÁè‘Ðm’´ÓÌI"©Cß"ˆ…Üµç ¢$iUPdºJ§«4›?mWÛM °Z
+nˆÐî‹Äs”¾R®~
+\‡¬ÿÂgð€=êBþ·ÕjQ|ßbA ›V| Ì{Î÷]²#¾…&ÂA¬ 
+þwvÈÛÜ貦EüTzßH¨öC1fKÙB·'ô2ËÖóðÄ$Kþ‡™¼JâÔgs§O =˜Ü_{ +sÖ-0ï]<¡=ûP*¦z^h²¡ªŠ¦Ǭ䧡dr"ùI/Ú•@TÇUÌÓ츒dѶÅVèÕM$t&;m±=?@Ed¹«ÿÇSlr €èü¹•§ÞiÙn¿‘.âNÙm/ÇpD‹ ‰—½ÿ}Û?¿=5{Gý³Õ­}+ýƒ¤×eÇQ÷^7o9×1yZwÜ/Tί¬•'y·@=·Í?þáˆîÃ*´uÔèºUÓíú@DµÀq/NƒËÛ§Î|ÓÖSa2‡
+ü]š*‰#Hb®|”¼|É~‚‹ñ+—SÑrܵj„üi®œ>Ç뢟’µ×2ògŽ?unT­Ü·x“´´”;‡ªâD vµC5³„Måu’ÅóEÙ —¥ïù›³>-ŽÓbHÌÊŽ®ù¾úÛxç¤þVʱšÁ³/I/‹‘ íé· ªÙ}˜?¶{KÞÕ9¿*Íß×@Qqãç^©/åù:ìýK¥;-˜ÔDIÝÃ’ÁK² úçÕ&+Ö <2§q¼å”s…=[o§Y9iþ©‚fíëëÚ€z¬üÿ¬9lª2þYx*?´¹þáyØ÷¦YUŸïžŒŸ¿¶÷µ•P˜¬bò0O=Œ[wnÂi¬­sÍiåÐñ­'ÿV–ê㥧ðÆÙ~1T,ÝöÊriù{^x ;Pµ{¤øwÁ#ct©Þ¸}Íÿu5^
+endstream
+endobj
+10250 0 obj <<
+/Type /Page
+/Contents 10251 0 R
+/Resources 10249 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+/Annots [ 10236 0 R 10237 0 R 10238 0 R 10239 0 R 10240 0 R 10241 0 R 10242 0 R 10243 0 R 10244 0 R 10245 0 R 10246 0 R 10247 0 R 10248 0 R ]
+>> endobj
+10236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 510.13 161.173 520.667]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+10237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 405.94 167.521 416.352]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a753a0fa94c8743cc8e6419754baf9bda) >>
+>> endobj
+10238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 391.129 154.054 401.666]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a5339fcc25ce5e0a3b5bbc2a87e126e89) >>
+>> endobj
+10239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 336.321 170.525 346.916]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 336.321 207.812 346.916]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_af7d8280764eb9f81f82128a59ce79433) >>
+>> endobj
+10241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.747 323.482 115.975 332.101]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a6208d30bc3bc477ccf8eea72a06a1a16) >>
+>> endobj
+10242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 308.797 134.741 317.415]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_af6ecd31f59d374b3681af41e5803ee80) >>
+>> endobj
+10243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 294.111 140.228 302.73]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a20ab6f44a83c386f0ab202903a199260) >>
+>> endobj
+10244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 279.426 146.352 288.116]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a1e5425173cacdfb0eda9d214ee003ddb) >>
+>> endobj
+10245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 262.893 164.526 273.359]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_aba0426a6d7dc5297f0e3a1651f3d7edd) >>
+>> endobj
+10246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 248.284 150.324 258.673]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_a11f3e99172d33c9806c696a63b9298b2) >>
+>> endobj
+10247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 235.369 130.661 243.988]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_aee5b1dc3b4b55ccb00279282f4d4bfa6) >>
+>> endobj
+10248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 220.684 143.614 229.302]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements_ae042f41969b84e61725d38d9b89e1e7f) >>
+>> endobj
+10252 0 obj <<
+/D [10250 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2678 0 obj <<
+/D [10250 0 R /XYZ 70.866 753.045 null]
+>> endobj
+10227 0 obj <<
+/D [10250 0 R /XYZ 70.866 689.831 null]
+>> endobj
+2682 0 obj <<
+/D [10250 0 R /XYZ 70.866 651.541 null]
+>> endobj
+10230 0 obj <<
+/D [10250 0 R /XYZ 70.866 612.238 null]
+>> endobj
+2686 0 obj <<
+/D [10250 0 R /XYZ 70.866 572.168 null]
+>> endobj
+8629 0 obj <<
+/D [10250 0 R /XYZ 70.866 501.422 null]
+>> endobj
+2690 0 obj <<
+/D [10250 0 R /XYZ 70.866 490.632 null]
+>> endobj
+10253 0 obj <<
+/D [10250 0 R /XYZ 70.866 421.52 null]
+>> endobj
+10254 0 obj <<
+/D [10250 0 R /XYZ 70.866 352.026 null]
+>> endobj
+2694 0 obj <<
+/D [10250 0 R /XYZ 70.866 202.359 null]
+>> endobj
+10255 0 obj <<
+/D [10250 0 R /XYZ 70.866 157.282 null]
+>> endobj
+2698 0 obj <<
+/D [10250 0 R /XYZ 70.866 126.878 null]
+>> endobj
+10256 0 obj <<
+/D [10250 0 R /XYZ 70.866 104.162 null]
+>> endobj
+2702 0 obj <<
+/D [10250 0 R /XYZ 70.866 81.801 null]
+>> endobj
+10249 0 obj <<
+/Font << /F83 6620 0 R /F11 6621 0 R /F53 6507 0 R /F45 6502 0 R /F97 8866 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10270 0 obj <<
+/Length 1874
+/Filter /FlateDecode
+>>
+stream
+xÚí[MSG½ëWìQªŠÆÓó=”+UDb6ŽPN¶‹X@UbE$‘˜üúôì‡Ø‹4 .(N1ôëžîy¯{V¢ÑyD£ß;¿:ï ±JñhtiJŒR‘¶Œ(ˆF§Ñ×®"†‘^_1Ö=:88<ê1ÚÝÝßï ?|õí wv†ƒÝýÝápp8ø4ø<:î}}|w
+›¥¸Ï9Êì 3,Y_¯¹Á…ã¨n"Þ¦g×è¶O‰(aÙæ£,H‰$žŠ®DÒ•7O>A4§6‹Í4Ÿlþô'Û1(‹$ã8gèPþ´™!mÍÇ:#E&ÞÎõ“žëdêI½ÁÎ “(,%
+xÀíGn¦<·$ ÈábòŸ›[º÷4¶†
+áî^D }­³Ä™xÅ}mþ€ H
+endstream
+endobj
+10269 0 obj <<
+/Type /Page
+/Contents 10270 0 R
+/Resources 10268 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+>> endobj
+10271 0 obj <<
+/D [10269 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2706 0 obj <<
+/D [10269 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10257 0 obj <<
+/D [10269 0 R /XYZ 70.866 752.807 null]
+>> endobj
+2710 0 obj <<
+/D [10269 0 R /XYZ 70.866 718.94 null]
+>> endobj
+2714 0 obj <<
+/D [10269 0 R /XYZ 70.866 671.537 null]
+>> endobj
+10266 0 obj <<
+/D [10269 0 R /XYZ 70.866 650.246 null]
+>> endobj
+2718 0 obj <<
+/D [10269 0 R /XYZ 70.866 627.464 null]
+>> endobj
+10265 0 obj <<
+/D [10269 0 R /XYZ 70.866 589.447 null]
+>> endobj
+2722 0 obj <<
+/D [10269 0 R /XYZ 70.866 547.99 null]
+>> endobj
+10260 0 obj <<
+/D [10269 0 R /XYZ 70.866 521.879 null]
+>> endobj
+2726 0 obj <<
+/D [10269 0 R /XYZ 70.866 480.471 null]
+>> endobj
+10264 0 obj <<
+/D [10269 0 R /XYZ 70.866 442.455 null]
+>> endobj
+2730 0 obj <<
+/D [10269 0 R /XYZ 70.866 400.998 null]
+>> endobj
+10263 0 obj <<
+/D [10269 0 R /XYZ 70.866 374.887 null]
+>> endobj
+2734 0 obj <<
+/D [10269 0 R /XYZ 70.866 333.421 null]
+>> endobj
+10262 0 obj <<
+/D [10269 0 R /XYZ 70.866 307.369 null]
+>> endobj
+2738 0 obj <<
+/D [10269 0 R /XYZ 70.866 265.961 null]
+>> endobj
+10258 0 obj <<
+/D [10269 0 R /XYZ 70.866 227.944 null]
+>> endobj
+2742 0 obj <<
+/D [10269 0 R /XYZ 70.866 186.429 null]
+>> endobj
+10261 0 obj <<
+/D [10269 0 R /XYZ 70.866 148.47 null]
+>> endobj
+2746 0 obj <<
+/D [10269 0 R /XYZ 70.866 107.013 null]
+>> endobj
+10259 0 obj <<
+/D [10269 0 R /XYZ 70.866 68.997 null]
+>> endobj
+10268 0 obj <<
+/Font << /F83 6620 0 R /F11 6621 0 R /F53 6507 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10284 0 obj <<
+/Length 1668
+/Filter /FlateDecode
+>>
+stream
+xÚÕYmoâFþί°T©éØÛ÷—èT)%¤Íé.¹&ܧÜ}p`IŒ‚é5ÿ¾³Þ5Ø°¡I@ªúáã¬gwžy晌“û'¿u~uÞŸk–hd¤dÉhš(Œ´”‰2I’Œ&Émwðûé—Ñðº×§Jw%êõ%¥ÝÁ§Ó›ëìjðõóðrÔ#wO«ÿGW—½>a†»'4 ]Ï/.ϯüc7£ëÇݯƒ‘ÿ^/ÃÞ÷ÑÇÎpÔù³Cà8!ëCi4åÉxÞ¹ýŽ“ üíc‚3:ùQ­œ'\0$8ƒë,¹éüÑÁMGEÌQI®=-íü1KKëNðþœÄÀr*ÝrnH¶ª…üŠ¶A¤8©”O6OçÖ»6Šä|õú_" F”ñzE@éjú cV¤“3»/fe±89¹¶éät±fvnórÙH8í=ÿöv»F2Šì;q ‚““¿z@…4ó ¹h,ìS#&<郤Òþ‰3 ¾Ñ|VΊÜ{›–þ3›åJb¤¿(¦þÓ=’Ùú^
+‘QA’>Ôw^õ˜kX€ëc'ÚùÔ‰tš–r±‡¢äÔŠŠqƒ¢cˆÓ€ØO³|œ­&±îº¾¶¢m¬Eçb:Í‵4—‰¤€Ý§ e Ðö† Í
+)?÷³B¿D)K|r~‚ÀUC¼%Ê7ÚÉ©ûP‰€½Pí”û]«ÐßëÚØ%¢6Mþ,›‘©æ#çÌ–é,«U»îñ]!Ø-pøõݳaolžð3˜® Ç 9¨y¤•·$ m‹
+ŠkƒnÇ@£´D¥Ëu‰üy _ëöY«²îŽ/¸­! ñw ÏV%pÂÐk‘þý9à°±}&…^(èa”÷
+•é„c… ¯ƒµµÑ0ÍRg €Á¬æ½ËxP]O©“ªúh5³·lR¥«^ã'bɵrr½l#IF5K ˜ZÏž·³Üò{t,zù†±ÐðƒˆÍ4¸±ÿ—…ÛY‚^ä0b×íG³ž¥eú&oÊF‹ÐãM@VuøNaÆ:ø`Iýø ¢­±wó ڦηŠ¦.ô‹¦)
+áì•sCûghKoɵÍÔõek;I¤®šÅׇI&*Aüå¢ä II"Qr¤Û„ùш¼y2ݯ¦Õu¯þ?Ÿ`]$G˜œ%'Ø;ÝüËF$iÖ2ŃHzôÝ¥ý4[–ëÙ€ÀVÜíÅt}S 7??6öÕŠÉÝ‘¿aÅÕ¥##ÆsV› yÔ“0«…ßw_6¿J
+endstream
+endobj
+10283 0 obj <<
+/Type /Page
+/Contents 10284 0 R
+/Resources 10282 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+/Annots [ 10267 0 R 10272 0 R 10273 0 R 10274 0 R 10275 0 R 10276 0 R 10277 0 R ]
+>> endobj
+10267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 682.675 151.337 691.366]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h) >>
+>> endobj
+10272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.14 125.407 580.678]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info_a93895cfc2c8d313fe13e59cecf4af817) >>
+>> endobj
+10273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 521.098 150.835 529.717]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info_aa06b608a8a20ad66a3f8f63d6a739ffd) >>
+>> endobj
+10274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 505.59 138.139 516.056]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info_a63c8d308aa3cc19b949669d56bdd03b7) >>
+>> endobj
+10275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 231.371 157.318 241.908]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h) >>
+>> endobj
+10276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 122.53 142.748 131.149]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+10277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.649 69.87 157.811 80.331]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_a911aefba56b5520426c1b0b373572eef) >>
+>> endobj
+10285 0 obj <<
+/D [10283 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2750 0 obj <<
+/D [10283 0 R /XYZ 70.866 751.806 null]
+>> endobj
+8630 0 obj <<
+/D [10283 0 R /XYZ 70.866 674.992 null]
+>> endobj
+2754 0 obj <<
+/D [10283 0 R /XYZ 70.866 665.59 null]
+>> endobj
+10286 0 obj <<
+/D [10283 0 R /XYZ 70.866 585.334 null]
+>> endobj
+10287 0 obj <<
+/D [10283 0 R /XYZ 70.866 534.445 null]
+>> endobj
+2758 0 obj <<
+/D [10283 0 R /XYZ 70.866 489.677 null]
+>> endobj
+2762 0 obj <<
+/D [10283 0 R /XYZ 70.866 438.788 null]
+>> endobj
+10288 0 obj <<
+/D [10283 0 R /XYZ 70.866 418.913 null]
+>> endobj
+2766 0 obj <<
+/D [10283 0 R /XYZ 70.866 397.489 null]
+>> endobj
+2770 0 obj <<
+/D [10283 0 R /XYZ 70.866 368.221 null]
+>> endobj
+10289 0 obj <<
+/D [10283 0 R /XYZ 70.866 348.346 null]
+>> endobj
+2774 0 obj <<
+/D [10283 0 R /XYZ 70.866 326.922 null]
+>> endobj
+10290 0 obj <<
+/D [10283 0 R /XYZ 70.866 314.563 null]
+>> endobj
+2778 0 obj <<
+/D [10283 0 R /XYZ 70.866 279.881 null]
+>> endobj
+8631 0 obj <<
+/D [10283 0 R /XYZ 70.866 223.688 null]
+>> endobj
+2782 0 obj <<
+/D [10283 0 R /XYZ 70.866 214.285 null]
+>> endobj
+10291 0 obj <<
+/D [10283 0 R /XYZ 70.866 135.785 null]
+>> endobj
+10292 0 obj <<
+/D [10283 0 R /XYZ 70.866 82.83 null]
+>> endobj
+10282 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F11 6621 0 R /F45 6502 0 R /F100 8905 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10303 0 obj <<
+/Length 2039
+/Filter /FlateDecode
+>>
+stream
+xÚíZÛnÛF}×W(PH@½Ù½2h ¸¶“&HÒÔQúâúA‘h[¨.®L'éß÷,/I¯,ÉT4í‹eQäììÙ3sf–ˣˈGÏ;?õ;Ož99#£þEd9sÆD6&fDÔEg]Ãœf½CÔí÷ñîáéó“þ‹×‡=É»ÏOzd]÷]ÿ´§x÷ýQ?ÿ~zòìäôäÍ~xÆu~>|Û?9Í5…½£W‡ïÞå—Ž9zÿúäM1Bö·ÿâ—7½óþËÎI¿ógGÀc‰¥‡Î1G*N;gç<á·—g2vѧìÎi¤´dZIü?‰Þu~íðꬵŒgVǦ:m#/çýööCOðîd<Ì=|L?$‹üÿg·³a:žÏn2ÿJÃOž)]ÁRfDÌ$@ÎŒþN¤kÏä“Z\³;}މδ6Öƒ=ü$¯Æ7ií9Üåùk^\¿k§ûf>J
+Åðòic••6÷séïnLC±Ø-ï™Á⣊º7Ö2¬(&+™ÔnÍd‹©}ì‘îÎÇ£µŽgSŒFwW_¼·1<wL‹ø¾åÇÜâåÚgk^_‰LnIRîpZ½¨•cFÇ[@MU¨@ÇÞ-€¶û
+½‹E>kãÞ’–j/1®rUn)ìÕêËê¾ÜöMèÖ*¥cTùòqU
+$‚K!&9_ËëHÆšm»1©6"91½%^Tºß\·Ë)Ú0âñ9EÕrÊÝù“aŠë‡gŠFx£“UÚ> ¾m«ø–V3Ój¨ŒooIÑúðÆÔ„oVÑ b¢Üã:E~'‹d6,{Ÿìá¿B)h÷£,¢îÝÖåêóXÚÝB Ô~7·D¦˜õ=p ŽÜÒ>FΪ~ª¼H.‘ ï®3*+Ë= LB3çd}àåBßøÀóAð]AÔÙh•–}šò"
+T–'IKæ¤nÕXÆãÜ’‘¦þ¤‘w)fJ.;»^o‚¹—*ãlªÓ*õ‚hÄR¯·Dz¯yÁùЋõGÐì)ÛÜ(­g¬ZüÖ³°¹¨ÛGkeË$´±§/ ½·ä“ 1Š[é
++%rK<VkªÎfQ¼„>£;½Bù Ínz¿­P¥rW{4UVé hkxiãÒ5ü¿`[gZ¼ßöÈ~å„$tÍ‹eÜ&Cr}V™%[³}ç <®òq7ŒƒŠ<ŒfxÄ”mDUñ¨¾ÂmŠZc¶ (2—PvÛ8ªL×Û«†·$µù_5Ö«†0~ÏÂîA5¼%»ÿ´j´G³TûÑ,È+‘§½´ÔÈÛ¿*BmTk+²K­Ë—…éÕ¸8È0\iøä§9(¾\&3t+H¨ƒåq¦‹Å|Z>žTN&BŸÆ³ËjÔ?­äè†lÄ™–z×#;÷5Ÿè
+k³Æ©8x››Ì.¡'9ÔM÷o"ë
+¼\ŒÐé`½¹Üálp.³ºÖl5’¬*<tÔùo(3h
+endstream
+endobj
+10302 0 obj <<
+/Type /Page
+/Contents 10303 0 R
+/Resources 10301 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+/Annots [ 10278 0 R 10279 0 R 10280 0 R 10281 0 R 10293 0 R 10294 0 R 10295 0 R 10296 0 R 10297 0 R 10298 0 R 10299 0 R ]
+>> endobj
+10278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 738.812 131.89 749.224]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_a5da93ec3eba10b5d8616a564c7dbfdfe) >>
+>> endobj
+10279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.376 738.812 158.797 749.224]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+10280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 725.454 152.924 735.866]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_a6fc05ea89dc5a4dd79478649975cd62b) >>
+>> endobj
+10281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.41 725.454 179.832 735.866]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+10293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 712.097 167.504 722.509]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_a9253d63fa940f516018a32641ea71653) >>
+>> endobj
+10294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.989 712.097 194.411 722.509]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+10295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 664.088 118.198 672.707]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+10296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.172 664.088 158.802 672.707]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_acf87793d3424504854da47d6b5cbf215) >>
+>> endobj
+10297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 650.731 126.546 659.349]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+10298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.046 650.731 155.498 659.349]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list_ab67ad77f096115d209806882018955e6) >>
+>> endobj
+10299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 128.361 153.516 137.051]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+10304 0 obj <<
+/D [10302 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10305 0 obj <<
+/D [10302 0 R /XYZ 70.866 753.728 null]
+>> endobj
+10306 0 obj <<
+/D [10302 0 R /XYZ 70.866 677.283 null]
+>> endobj
+2786 0 obj <<
+/D [10302 0 R /XYZ 70.866 635.531 null]
+>> endobj
+10307 0 obj <<
+/D [10302 0 R /XYZ 70.866 593.032 null]
+>> endobj
+2790 0 obj <<
+/D [10302 0 R /XYZ 70.866 566.417 null]
+>> endobj
+9815 0 obj <<
+/D [10302 0 R /XYZ 70.866 542.924 null]
+>> endobj
+2794 0 obj <<
+/D [10302 0 R /XYZ 70.866 523.918 null]
+>> endobj
+2798 0 obj <<
+/D [10302 0 R /XYZ 70.866 497.303 null]
+>> endobj
+10308 0 obj <<
+/D [10302 0 R /XYZ 70.866 475.876 null]
+>> endobj
+2802 0 obj <<
+/D [10302 0 R /XYZ 70.866 454.805 null]
+>> endobj
+2806 0 obj <<
+/D [10302 0 R /XYZ 70.866 428.19 null]
+>> endobj
+10309 0 obj <<
+/D [10302 0 R /XYZ 70.866 406.763 null]
+>> endobj
+2810 0 obj <<
+/D [10302 0 R /XYZ 70.866 385.691 null]
+>> endobj
+10310 0 obj <<
+/D [10302 0 R /XYZ 70.866 361.267 null]
+>> endobj
+2814 0 obj <<
+/D [10302 0 R /XYZ 70.866 325.795 null]
+>> endobj
+2818 0 obj <<
+/D [10302 0 R /XYZ 70.866 285.175 null]
+>> endobj
+10311 0 obj <<
+/D [10302 0 R /XYZ 70.866 265.595 null]
+>> endobj
+2822 0 obj <<
+/D [10302 0 R /XYZ 70.866 244.523 null]
+>> endobj
+10312 0 obj <<
+/D [10302 0 R /XYZ 70.866 220.175 null]
+>> endobj
+2826 0 obj <<
+/D [10302 0 R /XYZ 70.866 184.627 null]
+>> endobj
+8632 0 obj <<
+/D [10302 0 R /XYZ 70.866 120.981 null]
+>> endobj
+2830 0 obj <<
+/D [10302 0 R /XYZ 70.866 111.989 null]
+>> endobj
+10301 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F11 6621 0 R /F98 8891 0 R /F107 9274 0 R /F97 8866 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10327 0 obj <<
+/Length 1644
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsÛ6¾ëWðÔg"X¼}smÙM¦yTfNŽ²DËœÑ#•¨dÚ_ßAʤD½L蛦€Å·»¾]@¦Á$ Ámç÷¨óþÆðÀ«¢§@Sb”
+´¢XƒûîÕ—_£þ ì6]Ežè^ýyywç_]¹úö©ÿ9
+Ðîeö3úðåsØcøèf™Oʇ nûчO—!§ÝÛ¾·q BA»ß®"ÿ÷ Óô?_õÇèc§uþî0DL¶Ah 1 ‚Ѭsÿ@ƒ1~ö1 „[üÊFÎ!9‘‚ãó4¸ëüÕ¡e¯%%ZZUv[1B ¿¿®CF»Ódä1}ŠgñÒ?߬ç£4YÌW¾Âðû!K±dŠh£ƒ0
+¼Ñï
+ÙØÚ9l¶a„U…=¦Ãò:™§Jì"à`ˆ4¬œ#Q4«"HkVäH,+ZYÑaDuÅUò¯ËÔžtíá˜D28œ+A-’-à 2FWp/po"äd’̤L Z ¶
+åÍÚ£)ˆ
+ë–ëOO«8E5`>5Uqë Šþ
+ô¸$Fï‘·Ë4]&!jÎ:›ëZ®bÇ™#±šï0gW·Ph"´(¦eòR•ÕFO"Å¢e’€å'£= KÒ…V4Dì”ebC
+d5Y>@]̲=ÖªE(mÅ/<§*»å×bé»Ô]z‚iôÈU¬kRN·Å±ÖJL4È6J‘™Ð|o²UØ¿«×­W
+Ó
+˜9¥]Êñ·Ù¡×!eG9‘üzñ3èUœ-kè¥qÙWÐK5£h"…mƒ^h‰ËÙ¥[eXWyìBK
+ž†Áð(è,QÃßBá@`K-u Ô+uC¾¡Äù~ô¨ÈÅ0ÞˆaY’˜naÌRÜÃú-Æ4ÊG%ÔR–5¬¡‡EŽ ×VòÆ"Ç.Éø¹"÷rÔ;¦sp i3buœ3$%{âYKþ¢ôT¢%w鸗…O¹[ŠŠÑsñqåH‘½Ê<,.¿ÒçdåŸV©¿]òœþráæŸNâ9žW,ôˆËÓr1+ŒÄeÓÓéÂMý•Ì'e
+\TïmFŸ#¿8ÜœûMí"¹{Z
+endstream
+endobj
+10326 0 obj <<
+/Type /Page
+/Contents 10327 0 R
+/Resources 10325 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10235 0 R
+/Annots [ 10300 0 R 10313 0 R 10314 0 R 10315 0 R 10316 0 R 10317 0 R 10318 0 R ]
+>> endobj
+10300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 736.807 146.523 747.345]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_ab1f77ef188ce016b952197058b07138b) >>
+>> endobj
+10313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 681.522 170.521 690.14]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_af8103594de4ff2aab3ab3d98b1a4fe53) >>
+>> endobj
+10314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.885 666.229 164.325 674.847]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_ad83716e8e20a0473dda0f07c6154a008) >>
+>> endobj
+10315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 650.936 145.213 659.554]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_a634d79e501d9a7220d9862b799859d1b) >>
+>> endobj
+10316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 633.795 170.153 644.261]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_a985e1e93c5e7d69f80b0b34812704de7) >>
+>> endobj
+10317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 620.349 151.337 629.039]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image_ad5b155d9c25cca3ce47745052a15890f) >>
+>> endobj
+10318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 161.173 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h) >>
+>> endobj
+10328 0 obj <<
+/D [10326 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10329 0 obj <<
+/D [10326 0 R /XYZ 70.866 752.817 null]
+>> endobj
+10330 0 obj <<
+/D [10326 0 R /XYZ 70.866 695.685 null]
+>> endobj
+2834 0 obj <<
+/D [10326 0 R /XYZ 70.866 600.594 null]
+>> endobj
+2838 0 obj <<
+/D [10326 0 R /XYZ 70.866 541.614 null]
+>> endobj
+10331 0 obj <<
+/D [10326 0 R /XYZ 70.866 520.155 null]
+>> endobj
+2842 0 obj <<
+/D [10326 0 R /XYZ 70.866 485.249 null]
+>> endobj
+2846 0 obj <<
+/D [10326 0 R /XYZ 70.866 451.264 null]
+>> endobj
+10332 0 obj <<
+/D [10326 0 R /XYZ 70.866 429.805 null]
+>> endobj
+2850 0 obj <<
+/D [10326 0 R /XYZ 70.866 406.796 null]
+>> endobj
+10333 0 obj <<
+/D [10326 0 R /XYZ 70.866 380.495 null]
+>> endobj
+2854 0 obj <<
+/D [10326 0 R /XYZ 70.866 338.53 null]
+>> endobj
+10334 0 obj <<
+/D [10326 0 R /XYZ 70.866 312.228 null]
+>> endobj
+2858 0 obj <<
+/D [10326 0 R /XYZ 70.866 270.264 null]
+>> endobj
+10335 0 obj <<
+/D [10326 0 R /XYZ 70.866 243.962 null]
+>> endobj
+2862 0 obj <<
+/D [10326 0 R /XYZ 70.866 201.998 null]
+>> endobj
+10336 0 obj <<
+/D [10326 0 R /XYZ 70.866 175.696 null]
+>> endobj
+2866 0 obj <<
+/D [10326 0 R /XYZ 70.866 133.732 null]
+>> endobj
+8633 0 obj <<
+/D [10326 0 R /XYZ 70.866 60.554 null]
+>> endobj
+10325 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10344 0 obj <<
+/Length 1959
+/Filter /FlateDecode
+>>
+stream
+xÚÅZMoÛF½ëWðTH@´ÙïÜ\YIÄŽk+@ÇEb\¶äÊtšþû¾å’
+I­dÙd‘KBSäÌî̼™7³¤ÉMB“w½ß'½×o­H,qZ‹dò-1”X­ã8Ñ,™Ì“«¾Æ2jÎû“÷ã£ãÁÛ¿œ\ $íMÂßã·ã‹ñÙh<2ɹîÞOÆá×RÂèãÑåe¸uüiôùt|60NûGù¿““OgƒëɇÞxÒû»Ç°Fš°Íš¬%–Ëdv×»º¦É¿}H(Î&ÿäOÞ%R ¢¤ÀõmrÙû£G«ûT"aœ8ÆTu£šZÝ)VO)Vò×:΋fëÇYVì2ý6`´Ÿ®Óå,õK r)1Êi/—&C®7AâùãWÿøíb^?Mᆭëpýöq9Ë«åC¾ãr©¯ßJUñÓÄX“ ™#Š« ô çªöN0Óú¦°×Å»^r5TJ—»¨>‹_¼ò/TÑÛÕò&lÉÄA%Ïw
+©<ØY û[Â*Ö4b}CŒÜX¿“cëTˆsöÄ2‹}:9?9<9?GBÍëºI¬ŸE¢@¢ŒL´uD*Ó*
+(¼$qeú}Ü.–é®í/–pËy:´ÿ#7H~kìe ÛXŸ÷´Í÷WýÕb¾ß0iÌ*\@Ø "Û!´°
+wD› É(ùR«¼
+WÝß(%EÂHrB9{v´Æ;òj³ÕešÅVùÛSÑ3ªbDžhÍ‘Á\£*‰ª$•YwŠÅÆ“•¶ F#lMgaÓõÃSàn!Ô0ÌÅ“¡ÀM]H;_/ ö§Yœ{”eëÅWë1KÛ—¡Â³;Ê
+G
+"ìB-(óù§¦6/l ø–hw–(Ñ9Úw<êhCU‰ÂR´jÅ'$%ÊIRé½øVØ7˜NJÁ«¸au¥Q€ÿ4º¨F¶ãJ3-r°©¬B\±V›Ì¹¯²à‡Š×‹Q4‹]í\kÿôd!w+ ®ƒ¥rOÓ­¯u|öö»ŒèÕ
+6Ú`å`:æ2OmX¹‡b„b–ž.oü™ê“Ùýý@àÿ¸ýDÐÜFìÇ û<+ô ߪèÓ~ÛX²vûx5{¼K—Ùô§m•ˆØVWYú›7ÕÆÒ—ðÁ¾šé ѱV ÆÚQ !ýf´f9Oû‰°Sæ™ö¯éó!ˆLè ÞjÆ`gi\j9ª3Ó®©wS³懟­–?MW%g*öEõ“®|æj±ôa~ÁÉãI­ÌKàâZÁ ,ø¥ê
+~ˆÃ
+©NW¤È22n¼ª~´EÓ¾/‰@9}ö4 ¶ JI›iÀ‡ÝSn»PjfëJCOµö¾y84%P­íA jæýùì86ªU ©‰ÖÚDZ—dÄþ:ýØYé‹öWéÝO[E9m-²DÞ¯þ®Ç¹4\4ÖZstI<¡ÕÜÉá}ä(ÊöEÇâЭUr¦ˆÎj*Ë^¡lüã[ú~ÒÕ3öÖTç
+’4ûí@Àå:Pj4¿©+­5„ÛÑÏñŠ80ú…?U”/‰þv¥Ñ
+P.†Dý?bÇ°C”‹Äø¯zÚžÖX¸ºøLho0Âu ’BƒTUíù6§±¯¤À -Î7R!¨U5@ýÇ_Jû!….beSóh[ÀÈ
+endstream
+endobj
+10343 0 obj <<
+/Type /Page
+/Contents 10344 0 R
+/Resources 10342 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+/Annots [ 10319 0 R 10320 0 R 10321 0 R 10322 0 R 10323 0 R 10324 0 R 10337 0 R 10338 0 R 10339 0 R 10340 0 R 10341 0 R ]
+>> endobj
+10319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 713.275 125.174 723.812]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a5262a349f91f22704095db730921bae6) >>
+>> endobj
+10320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 699.896 132.915 710.308]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a37d9edd3a1a776cbc27dedff949c9726) >>
+>> endobj
+10321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.577 686.267 202.158 696.862]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a937af950cf676bd6298dcc38693d9b86) >>
+>> endobj
+10322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 672.888 161.568 683.358]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a11928ded50001fa765f5f0865948fdc2) >>
+>> endobj
+10323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 659.259 128.402 669.854]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a5f80f5fe074a894489074c3823085046) >>
+>> endobj
+10324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.375 659.259 192.447 669.854]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_ab25f445c8f68c67f51d687b9f399d2d4) >>
+>> endobj
+10337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.689 608.969 217.083 619.434]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_ac9d38857545d91503b4ec6f43fa25a63) >>
+>> endobj
+10338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 597.312 128.402 606.06]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a5f80f5fe074a894489074c3823085046) >>
+>> endobj
+10339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.902 597.312 178.98 606.06]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a451e8af5c1fdba5c23f5b9cb7ce1ddea) >>
+>> endobj
+10340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.577 582.086 201.647 592.556]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread_a89487b2ed580958e7b0f4b590669d236) >>
+>> endobj
+10341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.639 582.086 289.309 592.556]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8h_a2353dc088de554ab64ff304e2954b619) >>
+>> endobj
+10345 0 obj <<
+/D [10343 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2870 0 obj <<
+/D [10343 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10346 0 obj <<
+/D [10343 0 R /XYZ 70.866 728.39 null]
+>> endobj
+10347 0 obj <<
+/D [10343 0 R /XYZ 70.866 624.084 null]
+>> endobj
+2874 0 obj <<
+/D [10343 0 R /XYZ 70.866 566.542 null]
+>> endobj
+2878 0 obj <<
+/D [10343 0 R /XYZ 70.866 516.126 null]
+>> endobj
+10348 0 obj <<
+/D [10343 0 R /XYZ 70.866 496.404 null]
+>> endobj
+2882 0 obj <<
+/D [10343 0 R /XYZ 70.866 475.132 null]
+>> endobj
+10349 0 obj <<
+/D [10343 0 R /XYZ 70.866 462.851 null]
+>> endobj
+2886 0 obj <<
+/D [10343 0 R /XYZ 70.866 426.892 null]
+>> endobj
+2890 0 obj <<
+/D [10343 0 R /XYZ 70.866 398.012 null]
+>> endobj
+10350 0 obj <<
+/D [10343 0 R /XYZ 70.866 378.29 null]
+>> endobj
+2894 0 obj <<
+/D [10343 0 R /XYZ 70.866 357.018 null]
+>> endobj
+10351 0 obj <<
+/D [10343 0 R /XYZ 70.866 332.506 null]
+>> endobj
+2898 0 obj <<
+/D [10343 0 R /XYZ 70.866 296.489 null]
+>> endobj
+10352 0 obj <<
+/D [10343 0 R /XYZ 70.866 271.977 null]
+>> endobj
+2902 0 obj <<
+/D [10343 0 R /XYZ 70.866 236.018 null]
+>> endobj
+2906 0 obj <<
+/D [10343 0 R /XYZ 70.866 194.907 null]
+>> endobj
+10353 0 obj <<
+/D [10343 0 R /XYZ 70.866 175.185 null]
+>> endobj
+2910 0 obj <<
+/D [10343 0 R /XYZ 70.866 153.913 null]
+>> endobj
+10354 0 obj <<
+/D [10343 0 R /XYZ 70.866 129.477 null]
+>> endobj
+2914 0 obj <<
+/D [10343 0 R /XYZ 70.866 93.914 null]
+>> endobj
+10355 0 obj <<
+/D [10343 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10342 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10380 0 obj <<
+/Length 2109
+/Filter /FlateDecode
+>>
+stream
+xÚåZ]oÛF}÷¯ °@!«é|d‹¼ŽÒuÑØ^[)
+8yP$J&V"U’Jпw8C…”F
+±}è>$¢äá3÷ž{æÞ!q´ŒpôãÕ¿&Wß¿Ñ,ÒÈHÉ¢É"Ri)#e(’$šÌ£çÁÍ¿¯&ãÇáˆ*=h8’”n~¾~zr?½¾¿y÷v|7Š×Õÿ“Ûû»áˆ0¡Ü¡•¿é—¡†¯ÇO7îÖ§ÉããÁ»›‰ûþ8~3~ßÝŒ‡&?]'W¿]
+xÓì
+%C{€B!þÚˆNP\†ïý8MçŽ_„7˜h D’×L|PA:‘zLÛ¸eqãc'ëžlól¶]Çi9ýB×*ªYî¾”/Iá}XÂO@íÌÓù³%Ê´¨ƒÆù` {Í…Ež­k#qÓôj•Ù[?'é²ÉþWUˆj º «#bÂÜ»€RÑä™/}Dá¶ç‘òTÊ@þT$­{ÅE ¤ÄYâBs¨‰¶%Bá"*ý¢Õ㈿F»ƒŸ1Æ°ƒIðgþ:.f~+ó÷mö‘:û¼Àxj¥¶²zíc{¿óKõõ—¡²3TqM¦UòÖ*4‡Yý6%°A`'ÀQŒ$%ÎÛÊð·$­¶s‹ÆpØ.xØóõ‡Å£³Åb£b˜HRØ"¤:E«Í­0î-êåmqP×jâY¶^g)z ¬+¨
+vÿéFØÐb¤„©†Œˆx ü6 óY÷°ýhc¶J|<¯Ë2O*¯o˸ØãÊžØ!¥•ÛhÌÑdhúTئ6³Õ…Q(\vê²íoD
+P¤Ú«Ú%Ûm¯]Åúû&noüfe’Vê‹BÞ²—ê<gÁ§¢½8 , ÚÍYE>ûFgÉîÎ*²m>sÚàÞˆ(dس–aiìâOಂ²€Hw{É>¤ÃÎ’¬×û~LÊ}Ah/ÊT\lÀæAÉÀÕ.ñKëåS2âC‡%TÉp³„µB1AaŸâüTèŠ`ìvåNýÇäÏneÔØÕBjä_H
+š·0í&mLç’L€ü¶Èr7¨0ƒö‘J؈°¸Œ,Ð;¬TÂ>ed§L»“…ÑÐ
+!}ÀQ|QS.p–0îª-É2,ýUJ+E¿Rkv]+BûXåaV·NŽè&dxˆ¸-`Û€²Å¢>c=C9¥= ©’ÁGí.ó{ä¶(ϲõ&YY®Âø/G»n‡ÌÜ'þ?í$e]‘LWeÄ`$‰º(þ1á,q¢»5EèQ
+™>¦ÕcÚÓ΋ò¬ÎW
+Øî÷лnÂ>Ô>çM7÷–•hv,ö=>H"èeI‹ý™ÿû`Ý
+endstream
+endobj
+10379 0 obj <<
+/Type /Page
+/Contents 10380 0 R
+/Resources 10378 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+/Annots [ 10358 0 R 10359 0 R 10360 0 R 10361 0 R 10362 0 R 10363 0 R 10364 0 R 10365 0 R 10366 0 R 10367 0 R 10368 0 R 10369 0 R 10370 0 R 10371 0 R 10372 0 R 10373 0 R 10374 0 R 10375 0 R 10376 0 R ]
+>> endobj
+10358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 695.466 170.642 706.003]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8cpp) >>
+>> endobj
+10359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.361 552.849 154.314 566.797]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_aa8c848d61a0b4cde6303242e14a7af99) >>
+>> endobj
+10360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.361 528.939 154.305 542.886]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_aa02b956a35695e824c469af70dce2c8b) >>
+>> endobj
+10361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.394 493.073 147.338 507.021]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a1d0dd4cb820a156c480d4535d62f03bb) >>
+>> endobj
+10362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.25 481.118 121.189 495.066]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a5f13a465b0d595bc880c89793daffef2) >>
+>> endobj
+10363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.361 417.468 149.329 431.415]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a7cfd88697b3eb42dd58eb3b19358f766) >>
+>> endobj
+10364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.361 393.557 154.816 407.505]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a28f68e89ba90586ab524ad7243245331) >>
+>> endobj
+10365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.394 357.692 147.338 371.639]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a1d0dd4cb820a156c480d4535d62f03bb) >>
+>> endobj
+10366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.25 345.737 138.126 359.684]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ae3f6c4692a6eb4d31c97dd25ae8cf332) >>
+>> endobj
+10367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 309.435 150.566 318.125]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a0738cb4651a9ce20a4f1f8b46090d602) >>
+>> endobj
+10368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 281.65 147.58 290.34]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_abec1df4179cec53b5b06ccbe0cfb2b0d) >>
+>> endobj
+10369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 252.018 148.342 262.484]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_add4a4de64e60334f5f2ded1fd7c2619e) >>
+>> endobj
+10370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 240.969 168.508 249.659]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a98621ffe98c8a775bec4f9f7015593ed) >>
+>> endobj
+10371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 185.835 177.967 199.783]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_aca3e2c58c8c9d8f24ee8e660346a5ec9) >>
+>> endobj
+10372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 161.925 198.141 175.872]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ab562b929029997cccd7672a98ea18b08) >>
+>> endobj
+10373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 138.014 189.444 151.962]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ad9353419f818d92f5f56bc1ec9d0a8a8) >>
+>> endobj
+10374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 114.104 193.299 128.052]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a8c438a708428ba60789704ba394ab179) >>
+>> endobj
+10375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 90.194 184.45 104.141]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_aad5a72a4139b42aa44da6c375065ce1f) >>
+>> endobj
+10376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 66.283 185.445 80.231]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ab9089fa1fcba7d661eebb58541adb556) >>
+>> endobj
+10381 0 obj <<
+/D [10379 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2918 0 obj <<
+/D [10379 0 R /XYZ 70.866 752.14 null]
+>> endobj
+8634 0 obj <<
+/D [10379 0 R /XYZ 70.866 688.713 null]
+>> endobj
+2922 0 obj <<
+/D [10379 0 R /XYZ 70.866 680.101 null]
+>> endobj
+10382 0 obj <<
+/D [10379 0 R /XYZ 70.866 593.19 null]
+>> endobj
+10378 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10413 0 obj <<
+/Length 1895
+/Filter /FlateDecode
+>>
+stream
+xÚÅZ[sÚF~çWh¦/0S6{¿8O®Ái:MœÚ$/Id 3X"H¤M}ÏjW2+„ FS?$,ûù¾sp4pô¦÷Û¤÷êR³H##%‹&w‘ÂHK)C‘$Ñd}îK¤ %¥ýOûç×£ñÍÅ`H•îßL®÷?^LÜûëñåøzüþb<&4ë_ü~þa2¾v•^ÌÅŸç77î£ÑÕÅÇwã÷“¡ ¹üòöêýàëäÞxÒûÞ#`(ŽHm˜ÖHSMï{Ÿ¿âhû#ˆý]ÞyqÁà ®—ÑMï¯Þë,¡à¥¢‘’áÊÝx¹Ì¦Î¸Ù"_-ãirŸ¤…ûd‘»×üá“Ôß±µúÕ%[*†öRECBÂiØ,Ò‚Ñ] ÓHÂÍŠÄ°xÌG°ÛÔ–ŽZ 'ˆ '‰`éÔ¥F§j=÷:¯ßô¢Ï•k»A(™à]X$$Âœ‡¥Y:ÍÒ¢E/d™Cª:Ðk"Š…zóõÔÇÂU|t62ÎûÄ¥0¨’¡ÔH`æ0Ï6ëi²•ú <¼c‹ù&ÛäOU…<°*¨
+DŒ8½*N·¨ªŠm‹ž®ŠÓõVU±­w–§VÅ,É‹E‹,=¢4 È¥²”K2Œ…rç-5„j;¥6HPsJÐ…Û$0ðê¹]yÓ¦³LÍèg[d6ÌQˆ++Ÿù‚1‹ç¡®æ«O –FÙçA³1˜‰ˆ6NÊåÒÊp‰KòéHLô·‹tî>,¾UYü1 ¢ûâÛÐÖ2ÀÔp7l{àjln¢ÜóÍJE£î†BH –Bò–|
+žsÑ€“}Ù¥)"#8NÙIÙáØIÂü ìN³MZ4² N5Ùåf§ÜK™”líÞÄk—+û™ï§Ä^ÿ³Z'y‘õ§¾ófÙ*Â%s –L‹l×PÖ6¸Èppy*Àœ#F; 0H:;(Âvt?:À£y?=©®ÂÕBæôi2çÈhR•ö뤬©ÄšZ+òE›©,‘l1k‘§Û&äÃy¼~Ì-_¡ûTCWs\Á¤Kh5g%tHÍ­
+ ¥ºÐ)1¢R…:[†€fÝKTÄOªû=$kD3Û&õXUG“åì Þ½Z%é»ljGzJY<«Gêf…ÚÏŽ E˜Ts{™˜Ñ—YÕš§„ì2 Y¿àeë,|nTýùÄnð«t6³TÎ^Å·äÍâÕ¥`ÁH ã(˜
+¦ˆšº`ÃàeX½ðQbë.]<¬Ê±¯¼å"õ−aì#Ëzh­¬Ú?J12
+ Ò¢XIŒðD±„©²C΃s׉߼“tZFIn•¬4=
+!øìlž¤-þ0‰ôáñÓü±$œ$ZùSqØ®^AîDm™ˆP«eŸ–ÓjH-âRw¡TÃ,t¨µªÕ]½|5]¨5àkCkÕ;ZL]‚vá-ƒu“’†Þàtá þ‘r®ÁÔà}²ž'»¶r!‘1]ØÊ€VV!W ¶’ô*Xɹh©ÃFlìiKÙÛs€CnFû#{ÖfÕ²àÙC+‹G0dØý„O²a'‰
+óàÁ–µ3¨•›€'°x¶ÉéGÙûÎ ˆ”Íyþ±‘ Á7þ„`‡o€¨ts%À:÷<JÀtëH3pç”=^†jZ­µ4µæúQB ä(=žà©Š”ý"ü$oT&VÕ×õOÑŸhÀª a[ë^:PHRÖN ·zlë|” 0ïÂSÃ`½=}„ Àb¾2
+ÓŠý¡Ä–Ö½TÀ˜?\†’<Ù¸´ý+O7ÙžXÙ~j–Ä^\«ÏÚ~v"”[Žøщ›§ÅödR#$Ü ¥ê Ò²©ù?‹V#Ì
+endstream
+endobj
+10412 0 obj <<
+/Type /Page
+/Contents 10413 0 R
+/Resources 10411 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+/Annots [ 10377 0 R 10400 0 R 10401 0 R 10402 0 R 10403 0 R 10404 0 R 10405 0 R 10406 0 R 10407 0 R 10408 0 R 10409 0 R 10410 0 R ]
+>> endobj
+10377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 744.523 204.122 758.471]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a1b9ec50c9b9965032521e113df56a283) >>
+>> endobj
+10400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.346 720.613 204.131 734.56]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a4d6f64d2d89c31dd1dc238ff067c054c) >>
+>> endobj
+10401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.38 684.747 152.324 698.695]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ad3cace80a8b2b6c5574b1dbd0fc050bf) >>
+>> endobj
+10402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.25 672.792 123.18 686.74]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_adce941842b6031fe0ab79e39b6688980) >>
+>> endobj
+10403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 635.801 146.352 644.491]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a803826eea15757e2fe053c7e6aca514a) >>
+>> endobj
+10404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 607.326 140.228 615.944]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a451d159741bd619737c40adfe02d3ab3) >>
+>> endobj
+10405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.394 563.457 155.318 577.405]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_af5b2ef70b1ff91c6ce56b136b4c77a68) >>
+>> endobj
+10406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.394 539.547 149.831 553.494]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a5bb6d1759f766fe2a1c31a78821c802d) >>
+>> endobj
+10407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.929 478.485 150.356 492.432]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_ad9e7d2b8dfdc5ff5d13d421ee31b7bfe) >>
+>> endobj
+10408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.394 466.53 183.194 480.477]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a4e019961968515eec2794436476fe114) >>
+>> endobj
+10409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 417.583 137.409 426.202]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a10be319521aa7bc4f97c6899f25031d0) >>
+>> endobj
+10410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 387.387 133.419 397.727]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc_a08bf3dea4577692215182f1e10bba093) >>
+>> endobj
+10414 0 obj <<
+/D [10412 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2926 0 obj <<
+/D [10412 0 R /XYZ 70.866 357.37 null]
+>> endobj
+2930 0 obj <<
+/D [10412 0 R /XYZ 70.866 297.563 null]
+>> endobj
+10415 0 obj <<
+/D [10412 0 R /XYZ 70.866 276.249 null]
+>> endobj
+2934 0 obj <<
+/D [10412 0 R /XYZ 70.866 254.687 null]
+>> endobj
+10416 0 obj <<
+/D [10412 0 R /XYZ 70.866 254.687 null]
+>> endobj
+2938 0 obj <<
+/D [10412 0 R /XYZ 70.866 235.416 null]
+>> endobj
+10392 0 obj <<
+/D [10412 0 R /XYZ 277.812 213.707 null]
+>> endobj
+2942 0 obj <<
+/D [10412 0 R /XYZ 70.866 176.569 null]
+>> endobj
+10417 0 obj <<
+/D [10412 0 R /XYZ 70.866 128.39 null]
+>> endobj
+2946 0 obj <<
+/D [10412 0 R /XYZ 70.866 94.977 null]
+>> endobj
+10399 0 obj <<
+/D [10412 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10411 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10431 0 obj <<
+/Length 5754
+/Filter /FlateDecode
+>>
+stream
+xÚ½]]w¹q}ׯ˜Gñœ°  
+_û¶ÑÊN|’]G’ýbûKŽ$S¤BRNöߧ.z†ôt7ÁA<xEÉ;ÕU…ú
+fóic6xõ¯^ýî÷‰6iÈ!ÐæÃÇM4C
+a³‚Ý|¸Úüõõ›ûñOÞ¾;;w1½ÃÙypîõ›ÿøñýûñŸ~úåÍŸÿóíÏά3¯,ÿýðï¿ü|vnÉ'’ßHq÷K9KòÄ»ŸÞ¾3þêûïÎؼþó›ãßß½ýýÛwo~óöìïþøêí‡WÿýÊ
+¡fcŸKiHŽ7—_^ýõïfs%ÿß7f œ6ÿSžü²aOƒg’Ÿo6ï_ý×+sø±~îcƒÌþk¿]ß>’;ÆÏqH¶<êºð-?ACZc_#>Žßþ—³`^_Üÿ´}¸üᇋ››»Ëc"lHÈOÏ~òéW×_ù»ß³?xö4›¼9wfˆa|t¤¯Ðߺ¹¸Ü~ÙÞî¾äúaüóáû¿Üîž½x¼
+Grß„•ãwÔd<ì¿iÍPe²Î£¬3DNpówkfŒµ+N"ˆ•ƒØN·“ÙÞŽ/r–N°×$³
+„Øà‡mMÉõÇ9s-4[Ù±¹>"/å!QÞ±#Á»á
+¿½_$Þ÷‰¸Â§/wW×°Ò²BËßÿym½ù¶Õ3 Ñæ—;›ûA N^ÁàM>…ÓA°öÉkNqÞ Y› e›ºü€M(/‚TžwIüY ä$æÍÙzbæBæ5ælçì°‰ƒ%è&M¸&pÔå9×ãÜÀIƒ1bÛ§Œ‘˜ó:¹˜HT6רEmïæ¾6Èú¢€+fα«q¿Þ‰•Ÿuð™›T¾WŒfŠ“ク¿?“õxQÔÿ»–• ±±Ã•WýÇ—* ±È
+X‡‘•PÆÅ° <ÅmÏx# ) Z‰Ÿ*Ä«Ñz]|»y|˜‹$M‚Dú±Y¥˜kðÇ‹ûOÛÇ“s\1 _¶òø¼ÕŠ”ˆ„Õb—j"‚“ÒÂN÷ãfñÜ)L%#F¡™7ËQ3“處Ì^âï •«Q³„xÙD è(î$Ç ƒjw’s*Qó¸žeÍDY]Õz^áÞB¸ŒüÑ2fÓcJ‚.Ñ…‡¤M>!\.Y»Èñ2·DË’]H@“ú£e¼ˆ÷4ÏEË¿^¶c¹:§*rmŠ ‰©CÚxCâܳM’¸i|“Áó± „ _÷ÿ z—˜\,ˆÅäÚcAä],XAëÅ‚ýîcÁŠÀgcAÜ],X3f=T@ÝÅ‚ê³± î.¬pŸpw±`…« zÑóÒýÛ¹XPV‰˜îý~Ôýöâq&ܱ6ˆþTkE§b¨a/>î,ôo3ЧÍÂ:;þrñðPl‘D¯aK} zsÿëŠ6΋ÚYÑÞL
+T8;îµ6 ÛIôÆÛ*ÀŠ/³.µ Û ·|TŽÂ»Z„˜Ú©hbê<Õ°£„cQÞ$îÒIÐÓOyÉ¡r® +ÿxW¬Ï vŠƒœ§,kÇ¿@è,Æ% hã‚Ç„ŽÝuá’(ó`8ž´ÂŦ¤bg8åÁLí̪ĽM’®°60QÑ!öî耽äà>ÕŽmMd1#m%õˆ]§%’7I¤•¢[5÷ÎŽFºù‡|fzd<åy}°Q\”W!DBiÃB>Ínõdè¯
+dz,dšp|ÕÜ;\ÐÎ!àš@׋p‘é.HÆe­G]¶é.9yÒi`J¦“³kg:ÉJdÖ€&˃%ײˆÎÿ0I¬Vª!¿ÞÏL‘m„…ïÇôY8OR.+dyuSÁ8?Ô \8j.OöcŠðÚ• ûuim?4G‰
+¸E¹X–]Í’w-êÅæÓPi¤ÉñšÏØe‰n°þY"ç4HîÖŸ%²¸ålãš1âFÄôCâÈ
+˜d¢X/nç:‘¸]«-^9™ ô‚÷âwå·@ƒ-è‚ âxU0%ܲî4íb'™UÊ
+T0Ù!ÆÜ ]¥bKÂL倢Y»¸Ôz©@Ç0X“Z´ `&hØM/ñ¢¾íÚ'À
+ »¸]K€¡ã’Gqâ`’03teg¢}ÖãM8²rk‡ÿ,~
+¶˜Óœ§ÖG”Ò™×sV؈JØ£ö+ñŠÙ ²ÄÖN€»…M»bŦ8oì±¼HèhÀœÑ€–<zH0­‡ØËÒ@‰®Í*ÀØAJ“>>{÷~ž÷6‹avNgÄ2[÷î;ÉÌ(Y l1»ØŒ®°o{®ÈO”DÔQT¿cß*r%@á e)S˜
+h–ŸóôóÝÃñIX,Ñ œª¤E.{§êÑÉž9 ó†º!­Aeט³b·VžÔøJÔgÂ}"­2JaÁ‹bûŽ“ؾ£ÔÂn‘0COû1óØ\a>\~Þ^}»™«“tq€íÆu$o˜H¹vc‹ ‡3µFCð®ì¼º†c‡¯ìÑöcBt‰ZNŽ‡l4At™OUsJf`ç4I$É›®ðë9^š²5Öe´OÖÖ²g+AeÖX`¥Ò3å“4}(æ
+Tø<7ñÝdD</I¢kçù®ºDxW]²ªêËÕ%«>•Pe¢àRå=–íš vý¨Ýˆ»vÔ
+q>dF"‹ú£~H‡]3®1×2b¼Ï+ಗ¬rŠ[-¶í‚GØžh@Ð[ì0Ó{b½èÈ#ZDìJ;¤ó{ål°ã±É­–Ç·
+÷ȉ-ʘPè ]9à<¤ãa{{5çÁwña7¦Û…‡µf͹M’'YAʨ<µ4YOws~S°nDNcvˆX'C+âE™U ‚DÅ&OÅ;[wJã~z7¤Ä .·H—a\5¬4Ê<µÒí‹ ÛÙÞkÐ!–×1·p;gYK
+>ÑËúej¶_OǘݸûSÌCܵª™I¤±Õsf_Ïù/‹Í¢8ªGêˇi ;¾ÉîGôÌŸ)¢%Œý˜¢‹Þ„s-bà!`Žç ðqZy!â]u‚h
+¯AHé­ðM|GWh±Ìݨè
+%æuÁŸ §,T?(ŽÅmj6±˜c«Ìað&´ÂH¬š·NƒŠŒ*X×$é²×Œ ›Ýl‹¤á¼k(5¼·'ß*iÉC”–5{±'Î7,ë£KÖV~î‚¥™´¶\‚0Fa]ƒêÑÓˆ1úT<ýóC-%H*î¹8úâ¾'#-ËpSÜâ€^<z¥¬†XDΖI¸¥/<‹Æ$ãÑE Ë×ê A½ïz„r­&§egO<›K÷ÒÁ³â0»Ï‰Ÿ
+sgñ"»¿Æ§š;{4x#Á÷©À"™À³S‰v³^Úð6
+lÜø¢¸vçÑåÝ·ñ”pf,°õ» -üNŸÞow¯x¼ÿ4ãû¹¤£Ä‡vŽÿ´ÅÏÿûõ~ûð ‚}˜¬º«»¯ÛóÒú³½„žŸ‰Æ‹Ñ`gh›vsq_´Nx´þû߯ƨ´êf{ûéñóümÖn8ê,X“>u]ªá0îSáJ ¼‡=ýJ /ôîÇ(û_:)¸l`™¸q²H"õî`a9ÞäéÙñöÀkà3ïkÜ…IÁB†ñµ
+¨ à ©F]œŒc(&¯E5Œu“¯]œL. &j|/‘)sU*Ü…IÁçÁÓBã|iß·ô”öýšœ¥A±lA»÷MóT×V¸)Ëò
+Ð,9ÔÐKsÆÆ"Ð0VyT ÇQð(îóÅ› a4cì¹#@bSïÇᦌ†NA´ObtC[D0Ö×Øëc¾ÜhÚú¡që'Ð £AÅžb ¨Ï¥ ´=ž-fÈ.MƒŽ%ÛP`RMÉ|©¿$œÞd LlçÜ.m¢àè &r‹´ª¯²
+“¨kÐ…)W&–é³ý „²§©^¿@ÅÐ&ˆÞDJâØ›ø¼Š!­g S†Vט“²ƒ£€;+žÌsœ/°Ñ>öLžp`~óJ”í/
+˜’âIð×Îõ}™A?ô¾Ì ‚^‚2¿äËÍ5¾¤ÁÉuÝ­5Þ\SòiGk 5…Â8L‰ØäjÐãáÁ/›vå V´ëåT2„Ö¤3ý˜h.H±Æ\u)âA%÷S€v6—Iç'òÝÅPƒ‰¹4W„,NØrmj?*öa0½º™ó%Ëñ*Ð8¿æ ôÒÈÊq @ÔKº—mËÚÆL4–E±”>5èØ‹ß<án"ŸŒð!‘kµ^‹‰Êþ)fȧ®ÛŽq¥‚_D³#q|Xj`fÜŠ®A†(fYãS:VR+IÆÀClQB²쵊/ ±R'Hf||ýÁ÷qy”˜¿Ÿ\a†¦ðvî—c^£‚--Úk+ì…£[œ‚% Îóˆ]«ÈqBã¢
+0.N '‹VŽUØN¸ñ"OD>Ÿrd¬"fÿM
+tÅÓø<¬ö~à ÁlÎ5p;Û1ÊÐÂÏw‚¶!Ô$6°s>’×ÀĶÜryÊ.¬TÀôT.¬l”4“«ò±Lbü©’FM“
+t`81,ï! …q‰ˆ†’c6±á<Õ­Çù\;Ú
+˜>J v2»¹4i)к×ÜÀmùRÖà6“)ƒþ5ÅH—qÁÀ© ß÷
+õÓ±ïzžçOžµsïY1×<ë¼™Ãu7~¼kÓÇÎÛnxœbåŸO›J‰¦U€E»2nÙ©€T€Íbw‰We B‚—&˜ßÆ“¸ƒ;0“)ƒ;kÌå©[6–Žÿ~`lâåéǶsÝ•›]£!×dÇ !óþ{žðý ™JƒD£²“A}›0ÚxÑ!q"Û)ì¶ú ±Üœ×ÀvÔW U4ùÒZ.TûŽ&P6¾Üß(ëÒPÂ*À(MŸ*Y»¬ËJë4I8òžÈzaŸó0PàÛŠ Ñ!Øy¾/—u ·1Æõ—uØ /4K!Et‹9i.Çýt dÇ!‹3ù¹O( ¢Â>D]˜ò¹Ü|¡
+u²S:…/’X>D+ÐѶ@pwßçÇ’Ê‚ïÇÆýŠ¶™9O=Q Í[뉚-P/Õ”¢Ñ–{ã;‹)mÞ/맼˜0ST@[(áa…ºPœ"ñ~Lqñ¨?Ä\,MGKò_Šn,®¿t±0»Ñh{íFE#/º^Q—ÊÒ­]ªKwÂ1OVœ„Ñb¶"g©,u‹sè%#vRÐ*<s1+&ÀõS,à—j\r¹²2¸r;ä!ää†ÔE)3ø”¾›ÅŒáZ¶)—VVP-´`ÀB«”qCHÀ–R´ RÞ•è‡Ü •8„œ™)ñÊl>É[þ0›Jr•V#\Léð’ôÕí|þ0ÄDÁ fôú2ó·‘âùÿ
+endstream
+endobj
+10430 0 obj <<
+/Type /Page
+/Contents 10431 0 R
+/Resources 10429 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+>> endobj
+10432 0 obj <<
+/D [10430 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2950 0 obj <<
+/D [10430 0 R /XYZ 70.866 751.281 null]
+>> endobj
+10390 0 obj <<
+/D [10430 0 R /XYZ 70.866 700.743 null]
+>> endobj
+2954 0 obj <<
+/D [10430 0 R /XYZ 70.866 662.154 null]
+>> endobj
+10385 0 obj <<
+/D [10430 0 R /XYZ 70.866 597.939 null]
+>> endobj
+2958 0 obj <<
+/D [10430 0 R /XYZ 70.866 559.351 null]
+>> endobj
+10420 0 obj <<
+/D [10430 0 R /XYZ 70.866 388.402 null]
+>> endobj
+2962 0 obj <<
+/D [10430 0 R /XYZ 70.866 349.862 null]
+>> endobj
+10424 0 obj <<
+/D [10430 0 R /XYZ 70.866 337.013 null]
+>> endobj
+2966 0 obj <<
+/D [10430 0 R /XYZ 70.866 296.703 null]
+>> endobj
+10389 0 obj <<
+/D [10430 0 R /XYZ 70.866 146.978 null]
+>> endobj
+2970 0 obj <<
+/D [10430 0 R /XYZ 70.866 106.065 null]
+>> endobj
+10429 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10435 0 obj <<
+/Length 6191
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]Ks$¹¾÷¯¨£a¥I|õm¶§ÇkÇîÌn·ì‹íƒFªîVXªêÕc7æß/I*ŠYù`áìÑô¨ù
+ŽÖÕ| ¤-œY¨§0j‡´ræ÷§ýí1dä  #ï\PB–ŽåaƱ4¸ÎórhBCìb)ŤgqtC”€dgÍ{1>ÓÚçݦ8Æ} <½aåÈ6˜†¶ì¨CcCÉg´ &’Æl z(f½ËÛ)/±ª %ÓÞ¹
+ïZôÞyLPСõõþ¤­¨D ÀèÏÕ;Pæ­‚„×A$mú‘×=OÆ Ò–ñ“GJr¢;AïHÚB- ´£(ÖVŠ”@;‘ý)³„ñ†>­t*8'­í˜ÑvVë9¥/DL h-0im³ß^DlGŒ¡3
+KÄéTk×iλZ!µ¦ÜësäXègb4¥/Èë¡Y‡îK!&ýJ{G鶀q©¢¤tÛ–‹U-~9^b¨ò+”™£€c
+烴âï Ö»¦hÀv\ë:ç*µî¢€¯¡ÆŽ«ªUu#©Iy#¥7AÇònû…Ofn^^ž§ŠHÚºBÀæ­Ë‡³öOK9¸÷Ð.„¥µ‚:_ŽÆ€Dt¤4 T¡sM;¨1V
+T²XTJ® Žt¿»(È;‘ ó9(Œ'<¼†ÛŠ®S02÷Lô"Ó*m$@-NeJÐra«fb—VäéBp슺ʽ€*àcòvP "ÍÅz÷RºÕ"дžŒŠ5î´œ´“ðiˆº Ö׸ÒF@§‘,kMÍö kö7w?nŸoŸ.¯´½¸ÿþ²ê7÷Í î ¯8|Û4Ðû÷[jjÖá±>êjÙ‚Óõ D¹Nú¿—Æ^Ü<MU+dVÖp3ªŽ”£øõŽÔò| 3J+.ö“Û>…,‡BP Âåt)ÃÂMHèœ+7Òù¹©¡mhê° ;TJÓøNå´Øgn\
+ÓÍ"PÖâ”­W9Ÿµ/`kP|£„•*rO#áb`x1—°G›Ã¬ÞÁÓžb%Äð¾ ˆõzç;)«¡™ï¤Œ*ÙŽ§«ö¤b¼¯45RNâ|€å²óÖí¿´,$´Í e4sv^(#—Q(PFÐ@&Ø%Cs³
+ Fè¸æ:œ7³&?ì[<ša5|ot |ðCœ ^$ß3· âI ¥ Ó÷aÁwpí˜! wp‡˜÷»)ÌH¿ÉUC3¦¡4ØóËÓþqºMÄ) w6†WÒÈŸ¿íŸ«ll8A± !§(66ÏA%Öm ´T°ÂÆTE–2P:^ËõKŠ»E” rPämÍ’âˆêE–1>-©çÛoۻׇíÔ鞣[5ŸcŒ€G…ñœÊÑA¹O¨]
+*Ï1*GO‹ÛH¬* fèÿ¨S¹Õ¼SÂÏ-¥ƒhFK+Õh™#”õßq®p&®ð™··ǧS&65%R‘熑¨<JËÿ~jN“µ&ò¤u¹Ìm 2ÔHà:Eu¨)qˤmNá–\P¸¡Ý| -~ðçH©œ©T¸á3)'‚ËgR¶Ä­wrC¹£q8±Ã‘ÃM딣ýÙ `òM˜_`N§È`xS”˜'wŒ€®]X€¶sZÂ΀¡£ôàœ…Å‚
+%z¨YXÜ[âAbâÈîbL…‘ÑP ¥dU
+Z)¸3Ç€­°s.ò0S‘_`.ùÓ>ÀoIp~À¤cãÛFìÇ¡:w­°V¾PÙŽšÏÛqº50“=p÷G˜½æîo 9fR9€d Û:(!g—¸¥
+àrKò#S nVßÆ™N;‰ÉsßN°°®oëƒÓÙvÈ@®†¦Rß ]ßb׎˗ÄÚš3]¨€0œ ·Ëá-Õs®”cúX!RõÃyS;f¤Ú‡Êm¥ï¶ñ¸}· çø8??wÖKÁí¹è+Ž^SA*2qª3”©Vxä÷Q— ­t\tò!²ÚBhá‘-=ïØÏ<ÚH íá°-²ñóF.ÙASÀMZ혚\Ùh[‚Np͇x\Hµƒò!^ˆ%èBçS¼ ̧x~ \&qNÍÄpòA¡é“MÚÐÜYÅë­Óh¦5f6&PJ‡˜ ;ƒXkæ¾üF §îËo9õqY6giæ à¶ÑvA˜5€ÛF AfûdU߸#€
+ÐwîTêJg'2]k(:oyAD©éókøñôg”ÎÕp
+ú}O xÊ6LBQ–Lã ^=yìÉd°Ü#ãÎvw7M˜x±ÓžÝH˜dÕ0æÛÝ~w»ß½Ü}Ý¿>O·mƒõèܧЕè³ã*:²ÉÚqûò°ÄÙ,z½”LڜöJ½ô-LQÂ\0bð«zéó€
+Ø£˜vŽf¸ÁÙiÛDnf‡IÅ°íö¯SGST³+#NfñºZ=!?àZÈÿºÝME|3ø@k÷néa¤·Öƒù×ÜH †öP\«:ô¾ÄíßsÏ𠃕@eBacKÔ~¹ï§f˲"³Š*êÑlç3MÙ}”˜/Ÿšè0šïÍÓÓ¥¦Ò/ŽÕÚ g"w¸€–(¨žÑ¸èöi{ó²¾%pÞ Àò-87Òï ¥Ô"Ðc¬AÏðZØØë
+€rw†Å´<Éœ·6²²¢ÄÜ™WJWgm>u’p2î…3 ë­|éD _êkçwÐtã^€V\¹Ûuž|ÐíÍd0 ôVB¬óä·ã&¢üCÜž|àD”ˆ¼Ì“/€™ˆò1OäÉo"åW›:óä @'¢üZkgž|äD”¿níÄ“ß™ˆòOçÉ#åʱȓ/
+žüvÈÄ“_@žÈ“ß.DæÉ/¤XâÉ€xò Ä
+ž|à'¿
+¬ŒigÛ ]0Pöߎ™Ùö Ðe¶}ÐĶ_€®³í
+f;ãÄrÝІ›[¼„snnqPchnÃò¼%´ƒò;>7®34·ázÞ`Ú‘ÊÞ`
+…4?Ë·Ïg›ë‹Ïà™µd®ÁÖðåJ öÜU§w®i•™.UíY ¸ÈJ¸1öœJGíû•í¨hT§9ªS:ó÷0e±
+’cÖ‘û»@€AšóÇjW¤pƒt»Â -€š¤ ÔUiÜÄ ]à®2H·ãféwŽA::»°ˆgØrN­£µoºÒÁóG$V
+ýuXÏ_°)QGJë?ã²Kß‚[úÐÑdùÂG•@9j»¨Ü 8/)d=¥|1hû¦‰>×Ó×LÁµ®‡òÁͯçËÓvŠc‚•86ËÁ ·1èRû/S¥Qdö²ü¥@ÈO:§ÄãµF(ÌÌ}KÍ|>8 Ä4NY¸^Mû»{&L¡…pP{=¼nÓúí<Àß!Š®é;D=oRã'8†ïñHÞã¿Âwˆø6É;B’òÞUבí¸}yˆ*ZE6Ë—ŠÈ)µ¬ÕíØC Y«¹
+’+±´½€ j]ýØŽšÊÇCÔ•ê±3‡˜«µc;j*QW+ÇfÔ\8¢Î~yȸ0÷å¡Ðßw¶‹tg0âL÷?2§
+¨Ýð'|aì`Kt`øÚO@÷
+aŒüÿ2W
+endstream
+endobj
+10434 0 obj <<
+/Type /Page
+/Contents 10435 0 R
+/Resources 10433 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+>> endobj
+10436 0 obj <<
+/D [10434 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10425 0 obj <<
+/D [10434 0 R /XYZ 70.866 627.685 null]
+>> endobj
+2974 0 obj <<
+/D [10434 0 R /XYZ 70.866 586.504 null]
+>> endobj
+10383 0 obj <<
+/D [10434 0 R /XYZ 70.866 523.617 null]
+>> endobj
+2978 0 obj <<
+/D [10434 0 R /XYZ 70.866 484.158 null]
+>> endobj
+10421 0 obj <<
+/D [10434 0 R /XYZ 70.866 276.088 null]
+>> endobj
+2982 0 obj <<
+/D [10434 0 R /XYZ 70.866 234.304 null]
+>> endobj
+10391 0 obj <<
+/D [10434 0 R /XYZ 70.866 173.064 null]
+>> endobj
+2986 0 obj <<
+/D [10434 0 R /XYZ 70.866 133.605 null]
+>> endobj
+10396 0 obj <<
+/D [10434 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10433 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10439 0 obj <<
+/Length 2452
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Ms#·½ëWLUª\bUÆ×Þ6ZmbW¼kK\_lr$±"‘
+9tâŸ0#äð°Ë­†Úa¿F£Ñï=뇊W¿øÛðâëVV–9­e5¼¯ gVëÊ8`ZTÃIõÓåõ?Þ?¼¹\±—š ®4Àåõ?ßßÝÅ?}ø|ýå»›OÃ
+“í©Kê¡6–)›Qh‘+íH»»0Mg}¼›¶­m=¹«ÛïOÛ¼úæS›S‹îóç/‘4â$ ¤ìÆdŠÉ_aóòWÓ¬W"½%åÜáî–çf
+t—Áþzw?ŒšÇzÑ3(¥˜¦Ò %%"cPŠ¢%‰Ý˜^¼¿¿Å$Ø@¶H T˜ä$°“Q3ê–Ë_WÖž¤Ü´XÂA¤l§¥Ó?wóUÓƒ®´¯ÀiZŒ8:<W1û$ÅÔ†µE ¢T·¸6ËâxÔ4}±ˆAxhá‹ æPUF¯<¼%iÕá´F2á£M5Õ¢L¡7b öÒƬ¯Ž8Ë4I‘|%L
+“zø2§ºß7)´8©Nª¸2fÅ¡ÈŒfžeœÎ¬hqk øŠF3c솯§p+rêþ:·þ„ëtï'tt¿'!/º‰Fò(ÜèÇÝcÔÂîž ¾l潌©<x"©‡ÓåƒÕO­¤™Í[Ê[-{UÎK=ûîûxMAÞ¦ÒŽl†-'—ÂÕ²¿1kícð¿—E½\¾þmÚþþËËb hPÏ£^¥¯“öÇC»
+Ú¦%˜£Eœ’È;!ÖÍku¿›í9÷¾F%•4¡H£‡ŸªÀ
+LQnʬR×)0oIÕ­+€$X‚[Tƒå{Øj°ÞÐaУ;:@'©°‡zÖrâsQ äžœp-ìèϳ{o £5CÕ®
+8º¹Y
+Ê¿>¡NàVÿ ù¯O¤’*ÌYÜZÀâÖÄâžfÚ»é¡5!äÆQØúž§ëy†ˆBmî˜åõ‹ŽgMÇtóöa¬:kOÄU­ nHU€Ö¼%.õÙ´¦¥~¥5-ÕY´&Ò®ÌQ(Îb5*Â.2FY¹=!)[Ýqda}³ÿgw·ÃÙ¯)à&1‹Nƒ´{O¤¨<Ñž(UóðÓ±Áy¥5GiîriÍúADV³þuq<©å·œ¶¼Õo2✮²¾Méò}ô¬èHÓ÷g粓Dkˆ%І½rF„ú!,ÕE§óDª ÆêÄÁ ®{ˆ%µ{†eµ÷õ;è$ Vä¤MŒ¿2jª ªG.¶¯ŠVI¯¯›ö½½JÅÌÂ)ï®Fõ¡ÖžGÿf.)?¤Xçu›ÈÿʘÊ)
+endstream
+endobj
+10438 0 obj <<
+/Type /Page
+/Contents 10439 0 R
+/Resources 10437 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10356 0 R
+>> endobj
+10440 0 obj <<
+/D [10438 0 R /XYZ 70.866 789.024 null]
+>> endobj
+2990 0 obj <<
+/D [10438 0 R /XYZ 70.866 750.853 null]
+>> endobj
+10387 0 obj <<
+/D [10438 0 R /XYZ 70.866 711.102 null]
+>> endobj
+2994 0 obj <<
+/D [10438 0 R /XYZ 70.866 669.953 null]
+>> endobj
+10427 0 obj <<
+/D [10438 0 R /XYZ 70.866 616.466 null]
+>> endobj
+2998 0 obj <<
+/D [10438 0 R /XYZ 70.866 575.393 null]
+>> endobj
+10419 0 obj <<
+/D [10438 0 R /XYZ 70.866 459.495 null]
+>> endobj
+3002 0 obj <<
+/D [10438 0 R /XYZ 70.866 418.297 null]
+>> endobj
+10418 0 obj <<
+/D [10438 0 R /XYZ 70.866 364.859 null]
+>> endobj
+3006 0 obj <<
+/D [10438 0 R /XYZ 70.866 323.661 null]
+>> endobj
+10397 0 obj <<
+/D [10438 0 R /XYZ 70.866 270.223 null]
+>> endobj
+3010 0 obj <<
+/D [10438 0 R /XYZ 70.866 229.025 null]
+>> endobj
+10394 0 obj <<
+/D [10438 0 R /XYZ 70.866 175.538 null]
+>> endobj
+3014 0 obj <<
+/D [10438 0 R /XYZ 70.866 134.389 null]
+>> endobj
+10395 0 obj <<
+/D [10438 0 R /XYZ 70.866 68.997 null]
+>> endobj
+10437 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10444 0 obj <<
+/Length 5268
+/Filter /FlateDecode
+>>
+stream
+xÚÕ]]wÇ‘}ׯÀ#y²wWUyŸ¼²œuNb%'0 J8‘
+=˜ ѵçì>ؤHpnuu}Üê®î1‹ ³øý«ÿ¸}õͱIÞãâöaL½_„·‹ÛûÅ/W¾‰¡¹¾ñ
+°Û/÷ë»Àh›ä‚b¤ÆS(Qïwû`~ó¹£ÏÞX‹M`Uß
+-”€7í“ ûoýnûùóvÓ|lòàØÿBÃnÜ Ï·Ÿy·z¸Fsµz\mîV÷×7m.+ï·öû·éÅ ;í~aµ}ûí‡åþãêq`Pl•Ó"XùêkåbƒÐ>‰0õEþm½€f³rV™”¸÷ËýòoÆþÏþÛõMŒ—è†À6‘4$$à¡â°jdú¶Oûxçè<3ÁÎWÐMkÈjÙÁ$Ž¸ƒƒõ”÷¸º[­³;¯Bñˆã•aƒç pù,ñ°}±óea¾l9ÚÍœ žñœnH Wâö” &¬kw·Ü
+‰Ö4À¹^H䑬/…œr=ÄÔ˜¤1/H–Ã}¨ÑÏj3lÉ»Æɳû™vCÉ5ѨÀ¦ØPšÔKv2‚ÀÞm;'ëÂü’5’³Ñ”ÖöO_†r> ¿ð‰gjb†e¢†.?ÈÎâÇBìCiZPpOàsô@ÛXšÅμgrÅ^[KÏä9Ý8=û<H—<rZW‘‚m7[ʱ}xà9bLlsÖ¸’0ý´íä~Ú­:[8äyùž¹Â—õ'¶àöðïèѪû“ý¶ýjšSšÔÍäσOmçöi³_îØЊuÂcn¿{xÜ~>P4át\QìK†õ§_Á==t,&Ëg.ap¦ŠÁyщW pò p`Ä—8®_ž§ úpõöÚ^ó”Õ‹¢À’Í
+GÛ‹ÉçóêñÃ
+¢ óX»Ùnõ><mŸbYß
+àd9z™8o‚H»Š]öž]LNС
+½¨™.3·§”z$iÌ&â²"œÕK.¡"Žg±ƒ “[FòÑòJÌŠ?ì<GŠ5F-fÕ>ˆi×å²+S¯ºbå{r]á˜
+øÑg*Rà÷Bq}øöe! HA@2Ì,•Ž³p
+uÕ%
+uÿ'Ú¡É
+ꊔq&,U8Uu‰tLXiFàê(`P
+Zl±
+Á†ú¹T‘Ò˜µ2®r×”KWy’ ‡ˆÕr3¼¸$–(Bô¶}VS[8óú›×¿û]§àã<Ôþ(¯Ðý÷Ñ;G>sÈ
+Ü3ë
+¨Ý:HzvD·[)pÏ®ƒÔãÖA
+ÜÑ^uëðêŸê/`µIîR(ÊQ=[
+t÷¸Zî‡VW„p¯
+8b[rN,°KÔ !çĘB•R Ú–$:.` Åœ{ãžÌÕìÿr€#k<”ÀÃqdA40å˜g²qŽaÉ’BäJPT”£+AOÒŨuA”¥C ¯’Ťàý ëBvúàƒ&ÊÝ!.Ì·/æåM2*Ðȱ/…KõŽQš5¬N6úCèYÝn0c°¶¸âWÀ$æ:É¿@ï”;µU óÙºpQ(•#!^%žS”ç(=·PZ ÌÜDiÇ”>‘1…žyPȘr8ÕO²à®Ñ³2µ§W ÈáXj­o,“¯zLkå8·-A{¶Ea$M{Ë4¤ðr4”R ÚV¾ÄËiLp¾Ä‹R`N–XBÒ€–¬Iq–qI8‘†uå&œe^RÇZk5@6ÑôÌë4eŒY˜lœJ-Z/ˆlœ2Ø CÙq ùö…¬+~ °órdëBËBgÒ08²Ä©g†Æåº3Ù#U€d®#Ç5 Ìûv#tùôi?tVT‚XŒàÄB¼(”:fä! ‚ΤŒÞWûD®ôŒm4ªK/ÍOaŽÖ­\xN›‰W ®?±öHc¥&O
+§­ÄË[¡äi3œÅ"W0N•¹PO÷“YŒ¾W°¬bÀ#YŒ°Íµõ ry(ö¦{$‹ñÔ  ù P‚–žIaùBO!Úû<g™—ôé`H È5›OóÍKP8«Íþ&Í1/” ༆MË4Ñ…9æÕìÒ°i²rÁØœvîÞ²yQºwoÍØ¡{có:²uÔ•Ç,eYžäÎ@±<±¢ãz\›˜ª„·èžÙÅÕv0ôsÚò¤!†´£â‰ûD²– ¢y©$|_óŸØ\ÃÑÐ5:¸rCmìÁqTíÒ¬Ÿv½L`¼q/P¼,ÃAИóÜŠÜYÏ Å#[*¨‚Í=ÐðI°Õ>—») mË×|íËÆ•³¨€-W`z.·aìáâÂGhC\ŠK×ùÌ)'f*>D `’*ø2oË×< ÓL0:ßA^8©/0¨]€ž˜niÑ Ä$½Ò%àøTÛ|VÜ*ÀZ¦l |JbKi,
+à©;«NYc¤‘¼"kâ£$S é+¬édäâÏ·O’ƒLÿ¯‡‚¼´¾Êâ=(ɨm :‘Î]ÌçÇ€½ázÀ%sÓ¹d&y]M½`(¿®f†ÎÁÊÉJ¡K¶4æê\~£W–%+מoêò
+€ bu ·÷­nXíhäîà 
+q­e“qÉÏhâL“†Y3Ùo\ô—:5%N%Ic®Gå{s-—ÄM”¿Òb5Ê_Ùº‰Sœ9ò%ˆV#FßfÀcÄîÈ~Yn§è¨
+S¬l#[—:r!B”ë Ž+;ßdx™!q$ª4q¨qn|É :A87èøx‘¥ËÍí^º]ꥶ^
+stNòÒTº¼µæë¼»@¸»`ÒÔ.èîvÚŽ\ ¥hMÁ×¥99#ÉÏ ÁOÍC¾\=¢ÜÖé\îmó\RÕCÊ¢^LäD2—5½¨+Kz¡[ºZ0#y\ÞÁ„²^yãg„ ÒÒL
+¤£Å㌠–Ö«Àa RŽ–`˜9ÁÒx8¤ÔÃ×K垤°±9–ãÉ(x”,¹»TzÔX;-ÈV)`"WñŽfj\êWy×g=¬3ùUŸ¸JÓS06yEc¢0GÝ$/‰·
+˜¦á<SÝrg X”EÄp¡S&9
+³NÉçÖ?Ô£Õ˜‡rôóÒj4b~±dm1Û³¨3kÑjÐC)ZÀ¾Ægl;åCõ2ÈKë2ŒD‘×¥©Œ;¿z®÷AIrB@a~m’næ ƒÅ|wY5¬l‘[.}ŽaOÜ[&ùâ{ø‰}ëÍú[,¸…ßqŽS0„|¿+ ¡ÿ¤rFo™?D©jQêXÄ©(5y=ÈïEãzËp¬­Ví5ÿÝ–¡þµó@À™¯„èƒ/%ºtþù6í¡½Q6Ñé÷ôIùì¸f+ß³äŽ.¥—ŽB9.rJ¦ü?²ÎJž
+endstream
+endobj
+10443 0 obj <<
+/Type /Page
+/Contents 10444 0 R
+/Resources 10442 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+/Annots [ 10441 0 R ]
+>> endobj
+10441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.463 273.263 325.577 283.782]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10445 0 obj <<
+/D [10443 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3018 0 obj <<
+/D [10443 0 R /XYZ 70.866 753.21 null]
+>> endobj
+10393 0 obj <<
+/D [10443 0 R /XYZ 70.866 689.657 null]
+>> endobj
+3022 0 obj <<
+/D [10443 0 R /XYZ 70.866 652.535 null]
+>> endobj
+10422 0 obj <<
+/D [10443 0 R /XYZ 70.866 564.38 null]
+>> endobj
+3026 0 obj <<
+/D [10443 0 R /XYZ 70.866 527.258 null]
+>> endobj
+10388 0 obj <<
+/D [10443 0 R /XYZ 70.866 439.103 null]
+>> endobj
+3030 0 obj <<
+/D [10443 0 R /XYZ 70.866 401.981 null]
+>> endobj
+10428 0 obj <<
+/D [10443 0 R /XYZ 70.866 338.378 null]
+>> endobj
+3034 0 obj <<
+/D [10443 0 R /XYZ 70.866 299.584 null]
+>> endobj
+10426 0 obj <<
+/D [10443 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10442 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10449 0 obj <<
+/Length 7074
+/Filter /FlateDecode
+>>
+stream
+xÚ­]Ms¹‘½ëWð(FXe
+~)¤0“~}÷ùóÝíôód™•sSbLO¸âyþæÇ݇K2¯w÷»ÛëÝûË7Þç×ÿ¸”íô‹ü,²ñ§õ‘{Ù_þõÍ—Ç»ûo¾ù¸»]™‘àƒ —§(¢;0!æÉÅ2'7Óú¯KçEbVP}œ ©ÀzÁ¥÷½Lýa5Qáµj
+"p¡F-ër·6Û'kTf›e„¼˜í—;QG»\rqŠ¬1_"31-æ U`EaÚ¿üÍx#ÿ³¿%N[Røp}õ¸J-Q7¤A-‹:
+nAíõÝ—BèÍÊ&`Q¸ÉD èœD.¶Áû«Ç«_ùS¶6ËÒAzcí”ý^s]ݾŸ5Ð÷v·+jÉŠ`[¨%+ Ã
+«nsÚŒ79¸É{§+îªcWÁ6£Î…$•Ù"‹õlÑæ>šÝnio÷¾ð??¯Á$‡eíD„Ä$f;šâtØ–÷»«ÇÝŠåEp“‚ª»cc¨a¯>ìUó/+Ð%BRfa]@¾zX r¢ë5@#”¨¯A¯î?îµX¼ÕÕvˆ²e¤qBÉçžjBd×?Þß\ÁFôœÓÀ–í­ë_t'!¡ *Ð"æÉ»žE'œX­%R6ycÏ]t‚s™³!ân§”kB>ÎGÑ Ì¦¤)KçSÿR³ðÊh8Û$VÏB3#ÊK˜L…Ål¿Üß]¯™4+Š[C¥p`áØó*Å®K—Ÿˆ×jbÇ5!û@½ žê@oUò’ˆhˆ2˜§nÄæŠ{?äe ç-‹ìwc4­Dä!/ OW„óúŠÀÚPR!Dö»‰ BÖ¸ŽcR 7Ž)‰ ¾ŸïNâÁ;< í¬ž 5ôúžw8;¬Ên2žkÐõ=_,(|¬qPXPgÏ•0£¬!$‘®í/"ñàaÃÆI<ø”ûå‹„k¬´È‹è·üÓ[fœáêZ °Ã‰è‚¯·«Œ/Gt0nã¨ÊUq7ã¹î©@ÇPî;66î«ŒŠýðÆLqi@Ö7ö“ =ØÐcÐ-z">n×ÞÉçki
+؈38Äû“¬•´®“cPÌ~¼*™«ÜGŒ¡ÒÇ AWÌ/à>ŽÑˆ5V¾œÙÐbåo{M)‹5D(=Êb ­ë]rDÞª
+¯4€•Åî\®»@úÇé^°·›Çõ[ñä4D·âÞ.d¼­sœHz²*À"êÞÄs™N"êÑxBHD²ïa;…(Ÿjˆ‰¬›´¹uûB)Šr  ÙÈŽ ½k-Ñ·¨? `Ü…! è̵Ƒ„>„È³Ä ³jE¤Ài¨t–FŽ:¬g|™503MÆæm†ï/§pÏLµU½k\N%&™NëJc—SžæBà­s,ƒÃP§
+œ†°³EµÇBØ×#Foˆë£
+0#-3žËvok¨@‡Åžã)Óß4«¯`س1®‘Š[„¢Ùt݆Á
+ˆbÍ%¬®
+§špÇqq¬É¹ÆÝZ¥Ãñ󥄢^R ’‰Ê‘›¥ÁLšj:¸YŸlòÇžV\dH}~¶âbµ*p’çJ©yÎCv’p’7„òÏ™¶£
+èÎÀÉ
+5z[¦‹Ã̸dKŠU…»X³í‹«%‘á`ƒÄgò|$Ŭ±”yâŸåK)#JDMdEnQ‹Ú,#‚X¹ùNΰ:1±šË«pêõò""å€Â˜RDôkígZ­!B;Æí™uc5DÞÎyK5D÷ðk®D- öæôi~ÿ¸û<·ÈøåË¢XçáîëýõU<ÓPÙ¥Mv¨H‡Z4héP²¥ððì"(?éÄp^‘Ž/¥
+å²`,Å̧r²LAîC&ÊvŽ8ÄV9ÅÉÕ¸ eÒ9¼)iS¬A!Ã÷§uÖ`ùî¾®áø0AHÆÑee¢ígÐA+
+[SÙ`[–µÄÉ’›eAÍÐm½8?å–A ù”žM²,›F ƒ®8ý Ô¸"'ʼn“¦€*á‡u¾FmV9Y,W™­„]ž³ÝhzJ«‚q\';̦Å|[]5¬õÔ¨r¶áŒY dÊsEP«ª‰ŒèN±`ã°dDw†°àÃVŽ*±xÖ*Ðbg¼Y@7
+\|ž8°h˜Zúéþ]«ótÊsÇyºI¡oµY‚ÏBÆÌ8²ý«˜-$h‰Î)ÚžÕ>Ü+€îoŠ+Ðþ›â­2Fâ0Ù±l¨¹Œ‘XìÃ-öf ø¦ST
+îËn"3³†±=϶¥wÅçn"*ÓN¨3ëZq5ÒÀ„M3 ÈÓâ‡Ö’ÃB x@(OŸjBÖk#:Òi;;âlnôˆYš­ÙïØ—ï3FngÒX|FngtL‡E²b^0Ëí+½€é9Nd5 Qú!±ÓéþjßóC÷Òû;b™rجÝgCCfh0ª!kÙŠÔ*R÷)bK ³`†å<¦b=oòÌçż7mu*=%€Sé)Y7
+MµÑÀDmO¶©G°PD“ Žƒ¢] "ÁcÐÓd–t¹äÅIÕØU8LŠ!tH¡Þ+DL2TÊaºåKüò)èRgÏå;áæ7iH‡c\HÝzÚ¬p ý«Æ1¹4³}ßY¸…öc
+Ð$ÅijTé!oXŠ}ÞpÓË ‚ÕÀ,W¶Åô ‹)Á¡ÓȪÂ@ÆlzÁûkŽqÈœd
+À>L”Îå9:³†À±å !Ö³G{g4~S€_ß*Ì÷óEèÕ×OëU«œ’8”XLg©Rä £Tuœ
+orét¼dû†­´¦yŽÛJdú>¥ mrÝ¢¯(.¯†±Å1’Ä×à'ÒžšýpdÑ>í8!!Š{kBZ9Áh\åUPÅ×B)[…ºÝ'•þAãÐ8¥å„V ½«Xc¹e®¥!UÚêˆÃ“AÆ8hÝi\ ZïìÔl°t "`Á²í/´L œŸƒ:žä~ñBoU e?9“{Ä‹J ? ™¦ÒÂ/öˆŠHiÈ4Úu{ףžËMÃó(ËüËf_¤”áõYn,ãÒÌ7?¥Òëc×N¼°(”¸…ò±Æ]öeiw'³%1¥“Hˆ½¤bãžg *œ/ã,9¿Q"¾­.z…¦l¥7ÚÌ[q`‚ñ/`<Žá\ÔXs2®œHt2žDRŠ°¡È$ûð úD_²)‰sÊW?÷qq…DÐql\\9³Ørv8ER5´ £«mŒ½KŽ–fèü©
+¹.X P<Áäm ºaÎ}*Ü€ƒ)ÜjàÚskñ–)$ žÏåÂ]<ÇË‚5¦ki‚ëå¹Ã‘UPÆ‘•_
+ NÜÛ½¿ù†²o`<³bÎÛ_844¬±¿J±*uí/ä£DÒ˜:ºá±s= ÍNì)×qPŸCïB£ì5e ±F§ ŸÂ¹›šQðŸ5ÖìrZ¬5*§7Â_´ $ðWr´å3'ùJtQ\ˆbïVÂm
+˜hvœ¸cuQ`!æIS"¿¼àöJ¾}«¡92ÛLV VßäÜÁoÇóƒ¼
+˜â
+»kÌ ÇDBŸ4DÜ…\^K¨Ùö­.æïLh,=Y Ú–Ã?Ȥé[õ2¼äÅkè08Áž+ä\š}j9—fŸ=BŽ Ù9 !G9z¶ !oxH‘7¢Uº\dÛ»Ð(5'••FºŸ³³¼xdnà0Èáqä;Öù)æÇ<Äüǘ[1ÿº  BÒ͈:ö±Iž5l|>Ì6±ÔeŽÃ>¿Ÿ¾à¨á? Q$iÌß"Q$úšF+Œi`¢1H f»M½È%V
+:žhtp”Ç ‰^"»° dý˜!Kj4ãŽÔ«_J‚NÔ
+µáÄ ®6«0¹Éö®4ÞŒ.F¯È¸èjà•\Ýpn3uTú…0L*úµ…pLj»=/ºh"ÇeÏsªqOZMo1hߊ{ãþ uˆÖ*Ü¿áèܺ绕æ,
+3*
+‡p@K=Ó‘¼< §!Câ”Ø͆ ɨÀ"E7oŠî>zGƒŠE?í—.•E£zѳ²]Ð`ä
+éH„-Gbµ;5j–Œ„,ãâ8:Z® lIâP““ÕÀu0$vÁ˜õîÔ¨4B'ToK'†
+µÙŽxï4pÅ8v5£É&•ùÂpÆÅ|Ý©÷vÍÊ_о֒)=]‡Û×b <v¸ÙÁ†Ð¢fÕ–†¬¡†Ýn^ë‹ß¥
+˹s3DD/Ó¨M¾<òQAŸ>xìˆö;ûòP¥%80O±¦d=‘Չ킦³T^¥êf¼cQnNµv½xÖ©Éuô£ˆÉk‘ÝÄÑwpm$rdL2Q´÷s½4Ò¶*Ðxe×, [/x‰Ý…%E‹UO5hÄG¼× ‰‡7ÝyÒ….²§‚ÃTà5ès‡t!¦Dš«&‡òN·tq¤I̾t “5©Gºp=h‚†ÞÄ{*Åë{^ºžàqÐC
+ìÆ{$;Ø’R«°£H"”…”m³»˜³¬Àîùét¦€#í4¦0N*<EÉWd´²u.°½f@‚ˆïV*ŒÓ-•É湘ïxݘìÊ0äÁ¬Cn«®›¹}™K­æìx•Kš_sYëàÕ:å¶â°¢‰Î0 xÙ=tŽih%©úŒºñqÈàP6~Œ¸ý|Žá`ÑDÆW°Ë+‰Ù¢É㈥×SÎd£“:¡”Â$,§ ¡‚<mÅ'RÕÎÒh4³&¼ #®ç0‰PÙh”zLb3K…e>èØñ¾f̲‘5øÒ(1´%Wh˜
+öx±ƒ—TltôM"F9‰Gžº¦™¡š}—`=q'n«¸Yõâý-»P½[†Ñ–›¹aÍ»O`îygØ–~ÈÃÀxh¥sÇÈ[å~f²Y‡A©žðé-º÷¢$O:7NZîEëúùîO`XdBF¤­%xcX„pO Ëßô-5z­{
+°¨A§PÃÖwç­u.uô
+Ì.Uôý‹Œš»(ŽãzœƒåŽE¦ ¿¥¡HHF M²Q]˜â”I6›ÒMõ¼ýŒ¬ö3ÒÙ×û¹ñ°°+'”ãˆÈÚçz⫽¼E ¬ Txà1Q-Tëý«Ïр̩<_q Y÷j¶¹ø(cünµ$ÉJ›…„èšà…¢õŽòÂóœÇŽdÁÙ.‘ÿFô0Â
+endstream
+endobj
+10448 0 obj <<
+/Type /Page
+/Contents 10449 0 R
+/Resources 10447 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+>> endobj
+10450 0 obj <<
+/D [10448 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3038 0 obj <<
+/D [10448 0 R /XYZ 70.866 751.952 null]
+>> endobj
+10398 0 obj <<
+/D [10448 0 R /XYZ 70.866 715.707 null]
+>> endobj
+3042 0 obj <<
+/D [10448 0 R /XYZ 70.866 681.859 null]
+>> endobj
+10423 0 obj <<
+/D [10448 0 R /XYZ 70.866 631.738 null]
+>> endobj
+3046 0 obj <<
+/D [10448 0 R /XYZ 70.866 597.89 null]
+>> endobj
+10384 0 obj <<
+/D [10448 0 R /XYZ 70.866 439.974 null]
+>> endobj
+3050 0 obj <<
+/D [10448 0 R /XYZ 70.866 406.126 null]
+>> endobj
+10386 0 obj <<
+/D [10448 0 R /XYZ 70.866 200.588 null]
+>> endobj
+3054 0 obj <<
+/D [10448 0 R /XYZ 70.866 164.415 null]
+>> endobj
+10447 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10466 0 obj <<
+/Length 2861
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ks¹¾ëWLU.dUˆºñt¥RåHr’­¬íHܽØ{ É‘Ä
+ÅqøX'ÿ>Ýó 8ÃjVƒµ7[‰Á×诟
+ïÅxbF?½½¾¹º¾½„ñœÝNoÆZŽ~¼œ¿ß\¿¹¾¹~{y=ž(”àF—{ý~z}S|jËy.ÿñúö¶xëêÝå?\¿ŽÐÔùÿÓ¿¿{;þyúýÅõôâߊ$•‰:HFÂxÐÉüñâÃÏ2YÐgß'R`ðÉ—|äc¢
+£‘^¯’Û‹^ÈãÕjÓ²Z«„¬–›=~>gPš‘‚=‡Mj àSÀ „A¬Þ§»S@%5ÔÕt@×!—ë6HE##¬Q© Ôw³ -ó£4’þ©?Ž'èm»¦•á´ †3B£ï£kbWcˆ
+k"(\› P÷R¸vJ FP¸v¤Aè¯ð@³C …R…óFNðÉ„lY(ƒÉD)(œ=ŸD5©QšY”&RÒžãb
+nµËZ µJ‡šb.†:äC¶íGq KÅCK*ŒehRÜ–8
++c0Ì%„> kŽ³Q"¶zÝŒØý}J{rIEŠÂ u…‡@.#Eòc½#™Q^8Œ±XŠbTQ7;)«#I¥¾^ÔS™SØ‘ÊØ-%Tt”uÄd`¦˜Hu† Eä9 †D•ïÔ ÏÕŽ²™Ž€ËúF]Ç=ñ€N•—YÁ —$½ö®‡Ê­ÇÛÔ`*gëÅeq’r8š¾$ƒ¥ŠŠ† ‡µHjàös*$†g¤¡B äÀЃa$†‘{¨ÁÄ°T¾äA1&Q¬ôå‰cbàÇÊÃKYSt:‚‰k"Ï¢íA³FÒF×-YV3\wn,i‡”kcà:#‰;÷s«C6*Ä!™ ÑšLÏUžgNª²1 Ç[!M1‘
+æ9*õšCð`\Å€ÖÖOÍßtvÁ¼ÿ¢cBª F7ißyìs1´’®¡ö3‰EQÏ1Ô@)
+jo¸@—Î9+9bHa-µ|¡ÎˆÖ1xÏÑ«¯Æ¹ûÖ¼ 0%ÅyP/5t4A€Š¡t´Td/¥£³"
+¤ Â4;ÒypBº<#÷[V÷%š»X%’rFvÍPÚÓµ4qã½!…¥×ù>,kfÇÆàY{ÐèC;<ôÐ÷#úÀ‡Wüø\;|ºA¡#­Ñ”¢35ÆZÊ®^°Q+®œ
+!öëö†Ø(¡8¾ †4(¼ 5Ì3ý0Ÿ‹ª¨„¯cÖ·Ñ»4 J‹
+ÍoîK
+nè±cì(«Øk¿¡àkÈc¬¸KT1“¤‘¥9?>fkñP“ó»7dÄ
+h´2ü$É(ˆŸd‚ZÀÓ=[Ò¯”rôÓØ’7lxÕ=ÛÝæ ö›ôŽõœnÒõ<e ©d2ÉÏÉ‹i_³Æ÷ÿY®–3¢ý¬ƒÍý¶âíËCZZ¤ä§2t=ûÄñU Ý=ÌÊDzբ•ÙYiÕÅGëÙcºeîE!8-7 $9ØââÉ©¡þa¹ž¯ö‹r¡T”? §”È—Ñd1ðOm3:ÒƒªFdww«v‹ðÔõ…ÄÐtxÞ ‚oXDc kßb.Uqpl5ðÁ$üs1‚mEòfV>d¢(r`™
+
+»åú(¦ç³–±ÖÈ'§ÕjªM2þY÷uŽœCZMÉ}iGñK¨2‚]¥»Ùò%ò J™‰¥iWǦø{X­ê*åôµ^>)»‚X-×å4`eñ"»;ÎxÕ{¹Š7Ä5vYCƒvÖùbM1‘óª—D{Ø1äh[X†’åÒÇOiY'\Q)U¾ªUÕÌ'|Òå“[q@kw-m˜×jLÌ~tsœC_½:xU3ð ¢f‘g€ÑÀ £áÃ`)u«ám~/M—ÕéóÉhœxzàkP¼ý5w¦Šd©adI ¶7WÔ4xÕæá´(tù×4j«ãz«z² “y ,ow#ô˜R[Þ¶‘hóË7d~z;d'‘Ú?g jÊW'ÎU´n9„üªf\kò«š5\n²¶GÝbnëÅsJêèù»|ïm¸°|F‚9¶»#œ ò~œ©åÿŸõ„æ7è :9t„žg2Á î ÃiOˆ½zÂz_R5…ê+vUN[6¿MÀ[—ƒÚ*G}šâf‚‰ÔVÍ]_­¼ù:]UÁ²å¢% QŽ0°‡ø¼k‰Ž
+IËV'a
+ ®“ÚGå†ðöùÕ)¡¹žêÓ¢þÖv5[-ï×m·‡YFa Ð úæ‘
+Š™$º¡¦Å7olÌg«Ùæ¸ï[í«*mS#g€å±%Y#Š¯ù!–Ç'Ášêž
+hª.Ë{ÆŒX£^BiGö[ÛŸ#µØ•Â4yðù=å!fÄ‘IñDÚ”‘}y×HH: á37¨¾ÜlÉÐÛoh¶|Æj!†Õzþ
+Æ1Úoüî6iÛÁ!uTùEg•ßÓb³²¸è\üMŠ36ËÉ×Å
+endstream
+endobj
+10465 0 obj <<
+/Type /Page
+/Contents 10466 0 R
+/Resources 10464 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+/Annots [ 10451 0 R 10452 0 R 10453 0 R 10454 0 R 10455 0 R 10456 0 R 10457 0 R 10458 0 R 10459 0 R 10460 0 R 10461 0 R ]
+>> endobj
+10451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 656.925 168.768 665.615]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+10452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 539.998 175.004 548.616]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2_ae2634687581241177276f488d4d07bae) >>
+>> endobj
+10453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 512.412 175.506 521.031]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2_a51798d059e85342f93f8d912a08907a0) >>
+>> endobj
+10454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 257.451 168.768 266.141]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+10455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 150.708 156.713 161.097]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a97d058ba75c6632342a274d095d089fe) >>
+>> endobj
+10456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.327 136.111 177.129 145.725]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 123.046 165.186 133.512]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a6ea0d3570434bf13d15a8826355fe9ce) >>
+>> endobj
+10458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 108.57 232.494 118.192]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 95.537 172.395 105.998]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_ae1dc1239728ee9f8216f0aec157a95ee) >>
+>> endobj
+10460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 80.984 232.494 90.606]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 67.951 169.409 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a86e5df6341a9f07498af0e6f87e7ccf8) >>
+>> endobj
+10467 0 obj <<
+/D [10465 0 R /XYZ 70.866 789.024 null]
+>> endobj
+8635 0 obj <<
+/D [10465 0 R /XYZ 70.866 650.571 null]
+>> endobj
+3058 0 obj <<
+/D [10465 0 R /XYZ 70.866 641.654 null]
+>> endobj
+10468 0 obj <<
+/D [10465 0 R /XYZ 70.866 552.99 null]
+>> endobj
+3062 0 obj <<
+/D [10465 0 R /XYZ 70.866 481.99 null]
+>> endobj
+3066 0 obj <<
+/D [10465 0 R /XYZ 70.866 423.538 null]
+>> endobj
+10469 0 obj <<
+/D [10465 0 R /XYZ 70.866 402.505 null]
+>> endobj
+3070 0 obj <<
+/D [10465 0 R /XYZ 70.866 383.626 null]
+>> endobj
+10470 0 obj <<
+/D [10465 0 R /XYZ 70.866 359.657 null]
+>> endobj
+3074 0 obj <<
+/D [10465 0 R /XYZ 70.866 325.632 null]
+>> endobj
+8636 0 obj <<
+/D [10465 0 R /XYZ 70.866 251.096 null]
+>> endobj
+3078 0 obj <<
+/D [10465 0 R /XYZ 70.866 242.18 null]
+>> endobj
+10471 0 obj <<
+/D [10465 0 R /XYZ 70.866 165.471 null]
+>> endobj
+10464 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10495 0 obj <<
+/Length 2802
+/Filter /FlateDecode
+>>
+stream
+xÚÝ\MsÛ8½ûWèhU­a ñ[Övf3µ“ìÚžì!3F¦UÉ’W’';ÿ~P)Jò„pTÉaFŒ$öënt÷ë(óÁÝ€~:úûõÑé'Žycäàúv`9sÆ ¬'fÄàúfðñøì¯ÿu}q9<!ëŽ ž¢ã³¾¾ºŠo¿?ûõ—‹w×CAüøuõÿë·ïß O„ädq‡óé¦C‡o\ž_\ÉxïÕõåPñã_Ï®ã¿//Þ\\^¼;»þ~ýóÑÅõÑ4å±ÒÌ9æH F÷Gçƒ|öó€3éÝàKõÍûÒ’i%q=\ýûˆ'kÛ¯OÖsãm°^pϼˆx/Ù5*&Å<ê÷Çôq1y,ã?géí‡Ùxº,Ó?–³Jù¨õü.©ùÓÑàcõy1ŸoZG‚—ªB&³Ë:bŠÄʶMH(¦´nÚpS.FI«h;Þc7Nß(½'‚°pœp¡ ó‘n‰9ÑÚD·ÌÆ7á³Ó7B àF3‚:# _Ž8—[¼ÓRÀ2eU}[9”üøËrºÜôœP†M‹Woín×ßô\R(ϤŠ’¬uz± k]6 o¿¶áDB”7ðžadÍ!Irf¹ÈI¥
+Y"I}‘„ES"K$…å)’ÊIyÜÅwGœ3S2Ä‘ñ¡ºÒQ‘àÞYGIÔ ê4sÚõ ¬»Q• £}¯JDäÕ#ÈÏ´ËA%ë¥ÿÎ+ÑîÒš‘÷"‚¸÷=*P#~ô!â–p’YâGÆæñGˆŸb2™ºHŒ3ᆳ²W)É Ü$iÕ¯‚$ÄÎkwL™<1QdÔÁb{bH{Å„ËBÚKæèÓ:‚´µÌs•#‚‚(Ëõ7©B°_RÇÆ ]L\¡kLvGIÁþJå~O ~\„füÏ®øCÅG´gPN ¸Z5•C²P9¹Y´¼¬%æfµ¯òëÄq$˜CäB7µðÕ^†žÎùñy¹,Æ“ò&í‚`çã‡åx6ÙÚЃƒGùS¾ÿçs9M1ù9EìûÛóâæí²¼{)>¤ÏÆ‹øÚ•ªÈ,%Ì@Cu,gOyÂD›Å²èÊ…–‚úC’Ù:j@>,»r0ð]DL²ÊÊb3›‹´©.RȤârÛúÚ}1N˲·}ŒPh¡Åª¥{ëE],ã £e•÷!¯
+#Ó«ð¯Ô¼®Á–Oa‘@? -ôŸ‡I¡r^N’1‹hÙö"‚ƒ´(/“ïå^ž3JÒ”šÎQYL;@‘˜†(¨VL
+j‚n‰\KUWÔªª*4@C´h~ü·èéOC¤ðã²Q BZ-å¨Hkù©ÜºNŠ#սȠ½âÈu'žã2…æO—4Ж¶»\Öe´Â]6Ç’)Š6¾‰û8í5–qÐAP ¬VÉ¿j4XÆ¢ÅÌ€ïÑ”hÕÄ_ï*›Àš{F"GVj!Ð.Ñë2§”@gö¶ðUªq]3;¼â ŠpŽfÖʺÁ»\EAÚ®›T¶§w$ ˆ§?´
+4½?¦M)ûŒÅu–)“%ž|Ü3 &²é= ¿cuc½ <¼òø²¬fE%E¬haëätK¶…fÍè9®0qI¥Û rÚJC8Ïá#¥ç7¡òDø0\,ÊѸ¢°›ä²i¤!‰8Bo¶ëãQ¤+°Wj“­È¸låÐ3cõ¨Îš^lÅcK I™¶›­ÂÄ«r J‰®G5Q»ÙŠ£ùÕ9 ¡ùÕ-CŸÉV“šÉ¡„ û7¦íí-lÂÆe@%ŽLT®åí®‚š “#¬ÂF¥Ô~ÿ“ðø‚ÈIT=bò Lv‹,JØÍ[Jl#,ÇÈeY_ħ·ÏY_4úÞgY_ç˜qîëë1¥ä
+ Ç…Û¡58Iû (­¡‰Í€©µlïñ.Êes[wo›(…Kè"Mßã ŒR–¢¤ÕñÄÖ6‹¸ âúÃRØGß@m¤-†B×ã½GÀ¶Ù0½‰[¸Ë‹äM\Ìp•Þ[³@NØëò*‚à£i9~úÞêÞE}ž¾%ó§OÛ‹¹T×U
+BÊeK•¨B(–ñê~vÇó%(W,jÌô­µþ2lÊ8»Ãu]?—C|±Þ°OýäZ×YÌÛñî¥ÕC…Qã—ÏãÑç´u¿®aøh¥áº¬bzSßY&O†=ŸeÇ=Eºuí°´Þd«7;Ž@âsrór±ϦÛÛæó2(;Wç^QXRb2ž&`NlfX¸eRŸÔÖç^Ýcµ4œÉžsµáQÕÏŒf÷÷0í3‹çu­ã?TfÃîduþç×Îÿ(ÿýRÞª=6ÏãÕlôŠGñt¨eÇI Õ{±!‹:OøcÚ'ü-qãüC³Ú¨{õjÛHa# _(óׇµ6´ ÊB’n ´E óÍSÐoO3®{à›œâ‡B‹A~ IcöêU±a³‹‚B±û a„‘BXûIã¨_ÒÉHùIIõÓ
+œQÒ2ë©iÝeܽ.çåtTŽ“ˆ‡a¡´=tŸ7K_½º+»N
+¥fm‹äèÙÈõ:žDûÏ£¤°)ùtRt:ëÐâ븎4º‰b¦«yGÇdPë2 ¢cÂÒ5QÓ¹B×Ѐ®Re±ÖËêÉ’nÁ›Ó
+Ü[IR’6ŸÛ Ôa.H)T=ëï3pJ$ô RŠç½(…0/Ø~µ!QJôô€Èá8…ÂÓ Üfà”`™çÏå” ¸‰S¸{8%jâ”ê^NÉ€›8¥»—SúãÖœÒÀ}YNé¯tÍ)¡ñUœbÍ)á G!rpŠðå„ؾ]%,1åtH«Q£urçh$8BûY°ÞQ" ’Ìê¹²Žd/&†WU»?“I¼N²2™P–ig20Y$}&“eÀMLÖÀÝÃdP“5P÷2YÜÄd ܽLÖ·f²îË2Y¥k&Ûïs:]¯ÏAd$½XÿI¥ŸdíäXÅCUî2Jõû÷’œÒo—Ú¡Œ¹”Aªö2Š >Bg ”ô‡;žÇ'ýQ¬£îa“þ˜‰LÖ1÷rIÔD%ë¨{™¤7jM$ë¨/Ë#½U®i¤[YdUVºþ
+endstream
+endobj
+10494 0 obj <<
+/Type /Page
+/Contents 10495 0 R
+/Resources 10493 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+/Annots [ 10462 0 R 10463 0 R 10476 0 R 10477 0 R 10478 0 R 10479 0 R 10480 0 R 10481 0 R 10482 0 R 10483 0 R 10484 0 R 10485 0 R 10486 0 R 10487 0 R 10488 0 R 10489 0 R 10490 0 R 10491 0 R 10492 0 R ]
+>> endobj
+10462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 758.382 232.494 768.005]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 745.633 168.136 754.252]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_afd4283ff9ef6074c6bcc9d1e9c937dc6) >>
+>> endobj
+10476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 727.823 232.494 737.445]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 715.074 186.714 723.693]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a79bcbb13c12b5416348ea894a22081c6) >>
+>> endobj
+10478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 697.264 232.494 706.886]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 684.515 158.434 693.133]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a1e82a2ac09d7c4d5836fa5bf7c0f4eb1) >>
+>> endobj
+10480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 666.704 232.494 676.327]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 653.955 177.013 662.574]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a338f98138c7c0f7940e041bdd4667e44) >>
+>> endobj
+10482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 636.145 232.494 645.767]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 623.396 162.416 632.014]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_af3ca72f20bee189aa51deeaf8814469a) >>
+>> endobj
+10484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 605.585 232.494 615.208]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 592.837 180.994 601.455]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_ae67832d9b72d0212ab10c9daf381250b) >>
+>> endobj
+10486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.692 575.026 232.494 584.648]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 560.506 173.627 570.967]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3_a7b169491f5bb75d1105427a0677c017d) >>
+>> endobj
+10488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.45 482.583 385.177 493.12]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3) >>
+>> endobj
+10489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 322.805 206.92 333.275]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 246.284 206.92 256.754]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 169.764 206.92 180.234]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 93.243 206.92 103.713]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10496 0 obj <<
+/D [10494 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3082 0 obj <<
+/D [10494 0 R /XYZ 70.866 543.128 null]
+>> endobj
+3086 0 obj <<
+/D [10494 0 R /XYZ 70.866 380.701 null]
+>> endobj
+10473 0 obj <<
+/D [10494 0 R /XYZ 70.866 358.375 null]
+>> endobj
+3090 0 obj <<
+/D [10494 0 R /XYZ 70.866 336.346 null]
+>> endobj
+10497 0 obj <<
+/D [10494 0 R /XYZ 70.866 298.434 null]
+>> endobj
+3094 0 obj <<
+/D [10494 0 R /XYZ 70.866 261.605 null]
+>> endobj
+10474 0 obj <<
+/D [10494 0 R /XYZ 70.866 221.913 null]
+>> endobj
+3098 0 obj <<
+/D [10494 0 R /XYZ 70.866 183.363 null]
+>> endobj
+10498 0 obj <<
+/D [10494 0 R /XYZ 70.866 145.392 null]
+>> endobj
+3102 0 obj <<
+/D [10494 0 R /XYZ 70.866 108.564 null]
+>> endobj
+10499 0 obj <<
+/D [10494 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10493 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10515 0 obj <<
+/Length 2283
+/Filter /FlateDecode
+>>
+stream
+xÚÕœ[wÛ6Çßõ)ø(S#¸_ü–úÒݞݤµÕ¾$}`dÊÖ9²ä¥äMóí;
+iÒœJåkêÐqæIz[’`ŒD¬¸v=ñûHâaYŸW« ;=-ëºAg|Ûn Q Io‹Rˆ
+·æ3Æ´šß¬¬î»K.ZçŸ,Á>ƒøP÷ƒËyy»r.¬ïJïÌ xQÃÃÙ—*|é–ÐÅUí?ýöà?.7îàë]çúï«rrçŽ|ÃÜ›™W,ÝËjRÎKÿ‹ÿ¨–óGovYóþµ®G:zÄlç: {üçC]­V³åYÏ Â‘á<%Èá=Õ+ïŸt/_fëк˻.±yu_-ÖÏÞŸŽNçÃÉv !6ˆ^(a%{F:Š•í,¢œ;7åºìÕpŠÊ¡©)Ì®Xòa]þà¼ïprÒvž%Ë3,P$ÖŸ>.ºD)C‚œA”
+¤¸Ø×i¿’2‡>׈‹No&ÄrvÓ!,¢$Ç
+©­iþkg‰ùJ‡aƒÖ9$¡ë‰Ñ±ä{ –#ZÇ=æ`¾¶ˆíˆ:,¾0 ~‚'ùÀÀgˆqÒ]‚ÀjxÝ»F‰WÞΰ78#4Zäð,1-{¼ÙuÕá•ÜÃ+.´.ƒS`6NØ­½Vo|GRe‰XâJ¼êKBt¼aX¾.»æ?ì•0)`û†1I)‡Aq–Í2uˆBû¸ÁQ’çpÆYŠ¬“f„m1Îk)ì“æËœÐi‘#(Ö’9gJäÜi5#`Ÿ®É°œ±–¤1y0Cµ¾Ï²LÀîÑn†38–XÊJ˜78$02°pÈàXR¡’†—7¸Á ÂŒåpƒAú`<'Y:Ü9¯l g1[Û³œ1úùlá÷AŒ_·™>—}Â&i9…wlYvle)…Z@V)¡¥”!‰­%ÈFʇv²¼¿_.ÐòÙ€)X€Óؽ«jj;¢ª«Å¤²u*J†_\ Žéðchýùsqìa½¬OOo«ŽMe ØQ
+»Ã )Q¦]Š­%ÛmÞª
+”uWÕ 7[À ºzRŠX×VWª
+,¨ePÕvGÏbÕ&2Ë.o A˜gñÖ0¤Ø†·¡ØQs‚ ¢søË(‡}#u£Yú ÿˆ-Ä0æ ­08_«jýøÐQ3‘Q%34š+b·‡F««ÐnäjÑQí¸Aq[@ɶAv…®w—„N§²ItÃO5nÖaÓæBΉËñÕZõÒBzEYp­aMI’
+ò1ì,‰­EXgAž ¦JݪÇ_÷×Âã
+¼[‘9_ê[ïÔÕOƒâÓSÂßöYsؼ«fD(ERK5£%¡èóHð­r×nà³zmÜ•ÚŸ,TË$²pa¯
+e*"’‚¸³„™~åb¡ÔÍE ’
+m@O2…rƒ4£GßY`%3–RH+µ#Q2èz¢Dº=Dɠꉩö%ƒ®'J¤ÛK”tÝ@”H÷°DIot ÊÖÐøG²€"<QÀ b—úZ›)Ç@
+1)*2 ÅZT)* )Är^š H±–Äñ¯ÛØíµ&<Q¬%l/Q2èz¢Dº=Dɠꉩö%ƒ®'J¤ÛK”tÝ@”H÷°DIot ÊÖÐøN‰âŸñØŠpÙ•M!ŠP.»‚%˜5;¾4ìí(‰w)¿ØçoÒ™aïùÕðÂO»'›
+‹IkˆJþ"1¢dßq¿YøÊO¥•½‚æÓ03_âBÑnˆI»ëŒXðãwYK ë£3Æ$DŽ›ÎÀlG¤«zÀ´U{ø’®éñÒÖì¥Kºª‡K[µ—-ɪ-mÕÃ’%¹É,›CâE®@¥-2žhãðüòÍròhkEåsF áö:‡{fÈŸq¾ÚTUúoaþU®çÖ•¬yZ/ï7ž–v¦çó¥ýéWû(c+AÆ™“ Íí=·ö±(Ÿ^?S*¢“:S¿òµ4×$lª
+èIJR`Hc“bÿF+Ýkן
+endstream
+endobj
+10514 0 obj <<
+/Type /Page
+/Contents 10515 0 R
+/Resources 10513 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+/Annots [ 10504 0 R 10505 0 R 10506 0 R 10507 0 R 10508 0 R 10509 0 R 10510 0 R ]
+>> endobj
+10504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 466.707 206.92 477.177]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 397.445 206.92 407.915]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 328.183 206.92 338.653]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 258.921 206.92 269.391]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.806 189.66 206.92 200.13]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.289 120.349 145.403 130.81]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 69.87 168.768 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h) >>
+>> endobj
+10516 0 obj <<
+/D [10514 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3106 0 obj <<
+/D [10514 0 R /XYZ 70.866 752.14 null]
+>> endobj
+10501 0 obj <<
+/D [10514 0 R /XYZ 70.866 512.929 null]
+>> endobj
+3110 0 obj <<
+/D [10514 0 R /XYZ 70.866 481.362 null]
+>> endobj
+10500 0 obj <<
+/D [10514 0 R /XYZ 70.866 443.667 null]
+>> endobj
+3114 0 obj <<
+/D [10514 0 R /XYZ 70.866 412.1 null]
+>> endobj
+10475 0 obj <<
+/D [10514 0 R /XYZ 70.866 374.405 null]
+>> endobj
+3118 0 obj <<
+/D [10514 0 R /XYZ 70.866 341.117 null]
+>> endobj
+10503 0 obj <<
+/D [10514 0 R /XYZ 70.866 305.143 null]
+>> endobj
+3122 0 obj <<
+/D [10514 0 R /XYZ 70.866 273.576 null]
+>> endobj
+10502 0 obj <<
+/D [10514 0 R /XYZ 70.866 235.882 null]
+>> endobj
+3126 0 obj <<
+/D [10514 0 R /XYZ 70.866 204.315 null]
+>> endobj
+10472 0 obj <<
+/D [10514 0 R /XYZ 70.866 166.62 null]
+>> endobj
+3130 0 obj <<
+/D [10514 0 R /XYZ 70.866 133.331 null]
+>> endobj
+8637 0 obj <<
+/D [10514 0 R /XYZ 70.866 66.437 null]
+>> endobj
+10513 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10531 0 obj <<
+/Length 2410
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Ms#·½ëWÌQ¬
+a
+E9ñ¿O÷|P5‡œø°Ë‘4Ó¯ñÐè~ eq_Èâû³¿Nξ{ï¡ð"X Åä®pRxk ´°ª˜ÜŸÎ/ÿvñq2†Úùs+C«õùåO77õ¯®®/ùyôa2PZž_TÿO~¸þ0*m4=dóÌõû÷?]ø¦««ÑÍåø‡“Êóëñ»wÿxúõxôÏÉø¢¶z3ó¹œÔ?GïGãчËÑà×Ég£ÉÙ¿ÎAjã³÷Âk,fßÎ>ý*‹[úÛ…|ñïêÎo®Š›³¿ŸÉm J‹ ”Ù&Â*![&x,4,)Éé»ÏRÂrz{U>ÍVóÇõrÅ£°ò|ºýg½š6£X¯žgëfåÝ@ÉórU.f%¢†”™`RCm…” ÚÇç/|ÿÃ|V?±^¯æ_˜¿çuùTÑÐúÿÝ{4[“¨¬pÞ‘5)´qµµÏZ›è™š»Õ}Câøû³âÓÐ{þq½ºš®§;
+‹@
+…—PcÞî¬ý,†„¥‰ÒíbÒnŸÖ{H ˜¥`¢gIÓµ%ƒ¶i®áÌËÙÅ
+C¡zב?Úbå5[¸WØ™•¡
+,"Ô)å’"Š´ÛˆbKª]ˆ[ŵO ž/„•¡¾ƒ7J Ý(iÖ[µïñ{}Ï…š9o&qUÎÊùoªðeǸ X M¢Lå—€•!Íì=.©4—iM{ê0©Ì
+Ó5 éö—–,“†Iw®Õ0‘w/Û+ULHR1À
+#qï±V1lɶ®ÿÿU i*M˜T Y’úª˜tÜVÅlãþA*&ÙÙŠÙv¶¯ŠIGoUL¯)Ú¨˜dÜŠÙÆý©¼Ð2¨¶$¥bÒÑ[¡T1páfT1é¶*¦3­ŠÉ€Û¨˜CÌü±*†gÀgP1l‰¬¦ª˜FÎm½í²»Ë;¤˜y7¶ó¥ÊVÂ)[­B>$O%4r”µ%­ÜíXÏoÆœ¢Il’&Ñ`( CM¢E°§nÆ:û"Iøzj¸Ÿ®¿v¦/¢Ù‘ÑgLj󇦶¦9±˜-Ùáß狮̉ÂÒzÊ
+ÄÑP3 H†xßE*–Ö åtT ”4t„º¯TÂ>d1D{+pBñJ­˜ð.èþ:À{ *d@^\ñX÷U °®‘›(¨¾ÍS»ÿœìt»ýÜ‹ªv÷9µÝ|ÞFí»÷,¢C»¾YÈYó½Â:¯š­}1Í_¨4¶ào›´Ì.òj
+?
+endstream
+endobj
+10530 0 obj <<
+/Type /Page
+/Contents 10531 0 R
+/Resources 10529 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10446 0 R
+/Annots [ 10511 0 R 10512 0 R 10517 0 R 10518 0 R 10519 0 R 10520 0 R 10521 0 R 10522 0 R 10523 0 R 10524 0 R 10525 0 R 10526 0 R 10527 0 R 10528 0 R ]
+>> endobj
+10511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 713.659 127.164 722.277]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+10512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 713.659 169.759 722.277]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a1bcc12454b0ef09edb11e6497b4d70c0) >>
+>> endobj
+10517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 699.401 127.164 708.02]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+10518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.138 699.401 169.768 708.02]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a7c4e4acbdadb46df9a25b99fb702bc70) >>
+>> endobj
+10519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 685.144 133.88 693.762]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+10520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.854 685.144 181.971 693.762]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a30cd0f24528f75ebbc307456f170c57c) >>
+>> endobj
+10521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 669.165 158.546 679.505]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a7e8688bcc3ea8926360c06d68348a260) >>
+>> endobj
+10522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 654.907 164.033 665.319]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_ab1447c00d6900992a36ce881b73871ac) >>
+>> endobj
+10523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 640.524 170.525 651.12]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 640.524 230.021 651.12]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_acf3541f4dd0258559b9dcd9dd4bba3f3) >>
+>> endobj
+10525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 626.267 170.525 636.863]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 626.267 230.03 636.863]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_ad4b4cfc60e287a3d4458a4f09d0c190b) >>
+>> endobj
+10527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 612.135 174.228 622.547]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a3ad2387d67aab04a5bc00b20f0e8a24c) >>
+>> endobj
+10528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 597.878 160.761 608.218]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra_a5749eb4b23c4d8f060b7d5739a85cdf3) >>
+>> endobj
+10532 0 obj <<
+/D [10530 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3134 0 obj <<
+/D [10530 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10533 0 obj <<
+/D [10530 0 R /XYZ 70.866 727.304 null]
+>> endobj
+3138 0 obj <<
+/D [10530 0 R /XYZ 70.866 580.56 null]
+>> endobj
+3142 0 obj <<
+/D [10530 0 R /XYZ 70.866 529.109 null]
+>> endobj
+10534 0 obj <<
+/D [10530 0 R /XYZ 70.866 506.809 null]
+>> endobj
+3146 0 obj <<
+/D [10530 0 R /XYZ 70.866 484.864 null]
+>> endobj
+10535 0 obj <<
+/D [10530 0 R /XYZ 70.866 459.616 null]
+>> endobj
+3150 0 obj <<
+/D [10530 0 R /XYZ 70.866 421.076 null]
+>> endobj
+10536 0 obj <<
+/D [10530 0 R /XYZ 70.866 371.967 null]
+>> endobj
+3154 0 obj <<
+/D [10530 0 R /XYZ 70.866 333.378 null]
+>> endobj
+10537 0 obj <<
+/D [10530 0 R /XYZ 70.866 284.269 null]
+>> endobj
+3158 0 obj <<
+/D [10530 0 R /XYZ 70.866 245.68 null]
+>> endobj
+10538 0 obj <<
+/D [10530 0 R /XYZ 70.866 208.527 null]
+>> endobj
+3162 0 obj <<
+/D [10530 0 R /XYZ 70.866 169.938 null]
+>> endobj
+10539 0 obj <<
+/D [10530 0 R /XYZ 70.866 144.614 null]
+>> endobj
+3166 0 obj <<
+/D [10530 0 R /XYZ 70.866 106.15 null]
+>> endobj
+10540 0 obj <<
+/D [10530 0 R /XYZ 70.866 68.997 null]
+>> endobj
+10529 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10558 0 obj <<
+/Length 2027
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ]oÛÈ}ׯ P`!Õd¾gh²¶Òz‘M²¶š—dh‰¶ H¤W¢šn}ÏpH›”HY
+¹‹>$¢¥™û=÷œ; ücôã|ôæ%¡Ö"˜ß†«u`BN4 æËàËX“‘ÉTs>þ<±tüöæýõí|2åÆŽ/ß¿½½õ7³w³›Ù‡ËÙdÊdhÕøòŸo?Íg7þS]J¨m¸úxù¯ŸgæÆ!´ø~ýñÃä×ùO£Ù|ôÛˆÁF°g›¬%–Ë`±}ù•K|öS@‰mð­X¹¤DIçUp;úeDë~ª6?5#´rô2ŽÒ›8ZÞD霠ãxëŒyóŽÉ ÄN®‹šîL+ö|¥TøEMñDY­ùxïVeÑò*Þ.6ÉSžm..>O4G›ÙòMtq±ÚCÇyh‰–…‘Ð}Äo$+|vúÐYA¢éì>( Î1>€FJySår›ûPIU[:åÒ&t0ÅE­_{#f<Mò$K}¹D¹]%i쟘bþ!»÷¯nË*®Þ+ƒÞVª ÝF2b?Ï͆íœ"AÊKR@aúc¶ÍÉ#qzáçÄJëç力ø~"P^›8]ÄKØËøøn‚úÿÝ?7 ¥¨ÆeÕlâE»½ÿžp5Ž[|C0 0Á}\SŒHë‰Òî4KYš'»l·m«h¼¿nÁ¡‚7t?eIšÇ›­’’!Ru¥Ë(¾REñý¹AÌ»s³Ó–b“Z©dû¤ “²;!ÓîÎÉ QFõPnÐW•$ èxFÚ¢r
+¡ºÓÒ QZ*ÂPø½!JK‰·Â!ª¿Ú
+¢zÿˆêokQM[{CÔ§|s‡[`I0b­–jýú°Á(8¬Rš8á ^¤¾$µ $˜…lˆ;$¤ê*Ä9á
+’
+ƒÙ“3ø÷$mQ…ZØ!T[œSn›ª÷:µáq“.ø”\AÅ
+IJó“ا®6Ä
+ÈÈ6þü1Ùú§mî5ì%<~›à¯¨üô!N‘= ½Q—ôé~“­+!q]ôj•¹­ß7'¿ éE´ê"8
+RÄšÚݽ»5 t\’¨÷ɶŒôå*Ú–qvˆÎ*D/y¥5"G2ᮄ ©IÒÅj·¬V²ÚB%Š¯dsk“…v.Ÿ¯*²ûûU{@Dª4†
+[¤êh@C»ѦFfÐ9'KUiÏ£»UìcºçƒôERZø÷VÎ'Æ–½Ùù:uä¦8/yäéÏB=¸àú:^·œ†ÏSeæb¯›¯Ð ×E•à 
+ )Ì…ç·:՘ܒúsñaµ³|ãÍõZWöò5IµdZIŸÖÄW,øcÀk_¢¸ÉTV­ª¨*GU+Õf…ƒlZÓ䡰<rõþà?n9›.ˆ?îîgi>aˆóÔq½Ö@º:Æô.­>®uQ£ú®óª3e›–sù¤iå®À{¬¤ÐŸvwnó*Yøø9^ßÅe9¼Û¥ ×7Oaxn#«Uܾû¾súFßü¬Š:»‚€eÉòxø–»õÓùªõ¹Žvf©Ó°»ø¡–™ËŠe {û±û¬¸TWð
+ƒ¿ÃÄÒ &-[Z2ßÈdóuØë^ŸB /‰‡¥5¯pôk7c®Z¹½(ºð
+endstream
+endobj
+10557 0 obj <<
+/Type /Page
+/Contents 10558 0 R
+/Resources 10556 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+/Annots [ 10543 0 R 10545 0 R 10546 0 R 10547 0 R 10548 0 R 10549 0 R 10550 0 R 10551 0 R 10552 0 R 10553 0 R 10554 0 R 10555 0 R ]
+>> endobj
+10544 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./class_var_list.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 10565 0 R
+/BBox [0 0 500 273.97]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 10566 0 R
+>>/Font << /R8 10567 0 R>>
+>>
+/Length 10568 0 R
+/Filter /FlateDecode
+>>
+stream
+xœ•=O1 †wÿ
+À`âÄù’ba)Dì¥ê¨7EâïãäîÊUºE‘íèuüøíÑ£©gŒ›n_"îO`ðIïzà&À1l:|(*J(™‚gÁ²ƒ¡™‘£ûŒ6QÎaéàêmýõüqú¾.ŸðX`Âäb`ü§¾qt xcjr’d#y봼̫à
+endstream
+endobj
+10565 0 obj
+<<
+/Producer (GPL Ghostscript 8.70)
+/CreationDate (D:20140408115443+04'00')
+/ModDate (D:20140408115443+04'00')
+/Title (ClassName)
+/Creator (Doxygen)
+/Author ()
+>>
+endobj
+10566 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+10567 0 obj
+<<
+/BaseFont /Times-Roman
+/Type /Font
+/Subtype /Type1
+>>
+endobj
+10568 0 obj
+270
+endobj
+10543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 526.513 151.337 535.204]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h) >>
+>> endobj
+10545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 321.032 155.973 331.493]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry) >>
+>> endobj
+10546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 309.317 148.002 317.935]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+10547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 257.374 124.044 267.786]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a0a6a36d7c3d7cd80021a957a6b376aaf) >>
+>> endobj
+10548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 243.888 137.906 254.3]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a095f520160cf904b0e59172b886aa7d4) >>
+>> endobj
+10549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 230.276 125.084 240.814]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+10550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.584 230.276 149.508 240.814]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a5afed40bfa52bded3887a3fc6c91994e) >>
+>> endobj
+10551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 216.916 125.084 227.328]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+10552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.584 216.916 142.532 227.328]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a360bca4bf3a9777b50bb57e798bdd305) >>
+>> endobj
+10553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 203.43 162.715 213.842]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_aebb0f2b6838d45c4b251e5132cb055a5) >>
+>> endobj
+10554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 189.895 156.637 200.356]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a8f7cdf3b28933c440b54177b71368fa5) >>
+>> endobj
+10555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 139.722 213.455 150.134]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_a5cb3d4a8a89319443ef3396afafdd87e) >>
+>> endobj
+10559 0 obj <<
+/D [10557 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3170 0 obj <<
+/D [10557 0 R /XYZ 70.866 751.83 null]
+>> endobj
+10542 0 obj <<
+/D [10557 0 R /XYZ 70.866 715.506 null]
+>> endobj
+3174 0 obj <<
+/D [10557 0 R /XYZ 70.866 679.423 null]
+>> endobj
+10541 0 obj <<
+/D [10557 0 R /XYZ 70.866 643.099 null]
+>> endobj
+3178 0 obj <<
+/D [10557 0 R /XYZ 70.866 607.075 null]
+>> endobj
+8638 0 obj <<
+/D [10557 0 R /XYZ 70.866 519.005 null]
+>> endobj
+3182 0 obj <<
+/D [10557 0 R /XYZ 70.866 509.839 null]
+>> endobj
+10560 0 obj <<
+/D [10557 0 R /XYZ 70.866 335.97 null]
+>> endobj
+10561 0 obj <<
+/D [10557 0 R /XYZ 70.866 272.354 null]
+>> endobj
+10562 0 obj <<
+/D [10557 0 R /XYZ 70.866 154.612 null]
+>> endobj
+10563 0 obj <<
+/D [10557 0 R /XYZ 70.866 104.482 null]
+>> endobj
+3186 0 obj <<
+/D [10557 0 R /XYZ 70.866 104.482 null]
+>> endobj
+10556 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/XObject << /Im3 10544 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10583 0 obj <<
+/Length 1765
+/Filter /FlateDecode
+>>
+stream
+xÚÅYÛnÛF}×W(H@µÝûÅ(
+¸¶Ò&È­¶’'ŒDÛ$Ê•èî×wöBŠ”׶d²ÍKBÑË™Ù9³gÏìâä*ÁɃߧƒ_^j–hd¤dÉô2Qi)e(’$™Î“‹áɟǦ“³Ñ˜*=”h4–”OÞŸŸûW§ïO>¾¼›ŽÅÃc÷ïôÕûw£1aŒ0ølù>4Œ8 #3ñΧg#Ž‡O¦þ÷Ùäåälòîd2ú2}=˜L„‹R‡§5Ò”'³åàâ Næð·× FÌè仹L¸`HpÏ‹ä|ð×
+°ê¬]äÅ"/²/~  ¿ã0Ò{÷ÃO³ÏÓ"w¡:‡ipl­ø'"”X]V1aºÈªwð‹­Òù}”(à['Šd˜y &ÌÔ9lZ‘S¬‘Þ’â>ò2ý:‚ú8ˆ¢kT'º)ÔžBPÄɘD$m€Ê¨o³å×,
+‚¸P=`k-Q°ô ¸09J‘æÚ> †Ã,ϲËÃÃl³lîwßùçIÙÏŽŽrHÄýy(,D"™ADÈó †AmZKðN„ª¸)×±Üq©zðI±Bœ©¶ÏyZ¦¶Îl¡HÝ¢H(’Œ)ø ÝWßlWù<R¿óÛåM³|…ášñ3µÂÃϨGÉ;Õ£0@*{¨Gk‰Ðh=ÎnnF þ'70ŽK®y’²bþj
+mcûÈYT¡QE‘n=T¡1ÖM¡qðGY/ –0û¯(v?Æ1ôõLô Ó¬%Åöéàºû¬tZËçótÚ‹È@¦I˜‚¾DvYCF€€ñ†D½Ȧ‚À¼‡`ˆ´Ãy;šMþ=Õf»Ìö¿À^Å |»‡c÷*Ìu49/"4C8âœ÷¤Ñì
+Ø<£ÙÖº@îÁ¢aP˭ч„ã>4šµ$ÁÒ^­·N£µœî¡Ñºû­4Z˳]†€\Ö¢0‹˜tI ºéu(·yë´Õ½r V‡&åuËl‘nÂãwë' ?®²°…埖U\®WËêó¬it±XÙO¿çÅU³ò7G.YÕ%AB Ö°,¶›zX„ö\¤9ȧt}r{Ÿ]8ÒydÊ…fA*']€§°‰·Ä8ž‘ì„æ6)D%·› ’0ËþgG•mº‡ÙYKÒ˜‡è¡°¿ ðôú–l[ 4Ç°e2bê€êR'l]S{'Uo\þ>Ê]ê„»¨Ì)YÏ0AcÜ{ª}ø)/f‹Ûy5”4¥4ˆ S·ç¿ÆŒÁnÄkm¼º¼\ÄÓ T£¹L¨=F–Oœ,½“ç¶Gû–!CíA²Üµ-2_>;sà~a„‹_½@ç¤ÉÎÕˉ]»Ùf±6æ „´j‰á{UjpÚl E`aòŽ«W¥ßî¢ka‰»Å®C
+endstream
+endobj
+10582 0 obj <<
+/Type /Page
+/Contents 10583 0 R
+/Resources 10581 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+/Annots [ 10576 0 R 10577 0 R 10578 0 R 10579 0 R 10580 0 R ]
+>> endobj
+10576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 311.197 153.516 319.888]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+10577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 295.833 162.985 306.245]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp) >>
+>> endobj
+10578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 185.231 142.514 195.62]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+10579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.698 118.773 141.887 129.162]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+10580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.861 118.773 178.895 129.162]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_ae81d6436634e7d3a63068e3204fdc920) >>
+>> endobj
+10584 0 obj <<
+/D [10582 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3190 0 obj <<
+/D [10582 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10569 0 obj <<
+/D [10582 0 R /XYZ 70.866 753.502 null]
+>> endobj
+3194 0 obj <<
+/D [10582 0 R /XYZ 70.866 732.154 null]
+>> endobj
+3198 0 obj <<
+/D [10582 0 R /XYZ 70.866 704.724 null]
+>> endobj
+10571 0 obj <<
+/D [10582 0 R /XYZ 70.866 683.02 null]
+>> endobj
+3202 0 obj <<
+/D [10582 0 R /XYZ 70.866 661.613 null]
+>> endobj
+10570 0 obj <<
+/D [10582 0 R /XYZ 70.866 636.962 null]
+>> endobj
+3206 0 obj <<
+/D [10582 0 R /XYZ 70.866 600.541 null]
+>> endobj
+10572 0 obj <<
+/D [10582 0 R /XYZ 70.866 588.258 null]
+>> endobj
+3210 0 obj <<
+/D [10582 0 R /XYZ 70.866 551.711 null]
+>> endobj
+10574 0 obj <<
+/D [10582 0 R /XYZ 70.866 527.002 null]
+>> endobj
+3214 0 obj <<
+/D [10582 0 R /XYZ 70.866 490.581 null]
+>> endobj
+10575 0 obj <<
+/D [10582 0 R /XYZ 70.866 465.947 null]
+>> endobj
+3218 0 obj <<
+/D [10582 0 R /XYZ 70.866 429.45 null]
+>> endobj
+10573 0 obj <<
+/D [10582 0 R /XYZ 70.866 404.741 null]
+>> endobj
+3222 0 obj <<
+/D [10582 0 R /XYZ 70.866 368.32 null]
+>> endobj
+8639 0 obj <<
+/D [10582 0 R /XYZ 70.866 288.167 null]
+>> endobj
+3226 0 obj <<
+/D [10582 0 R /XYZ 70.866 278.789 null]
+>> endobj
+10585 0 obj <<
+/D [10582 0 R /XYZ 70.866 200.248 null]
+>> endobj
+10586 0 obj <<
+/D [10582 0 R /XYZ 70.866 133.882 null]
+>> endobj
+3230 0 obj <<
+/D [10582 0 R /XYZ 70.866 102.901 null]
+>> endobj
+10581 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10598 0 obj <<
+/Length 1771
+/Filter /FlateDecode
+>>
+stream
+xÚÍZmoÛ6þî_!`À`3Çã;ƒa@æ¸[‹6í7_²~p%1àÈí¤è¿ßQ¤Q–]»R‡~‰e™º·çîášÜ%4ù³÷Ǹ÷ë ÃC¬R<ß&š£T¢-#
+’ñMrÝWÄr’cý7/‡£ó««ÔÐþéÅÉI¸ð¯ßÒÓ¦9¾Hí¿Žý÷‹Ñ‹ÑÅè|ˆ?+- ?üëôÝxtáTAòðõé奿uövøþÍè|œC±ÅßñË·çé‡ñ«ÞhÜû·h;M`c«1Ä0‘Lz×hrƒ¿½J(áÖ$Ÿ‹•‰œHÁñzž\öþîѪÿ’'@‰–VU €ÐJaé
++··óæ˜khªD9GÑ÷½1w¥=ÖZÃe! äs–?ùX×<`+|ãÁï©°Þ
+=‘ ÜY(а tO)Ãb^¦’öñ^Îò’÷òpg—2J;^z…@ì‚a‰Ft®L$;8n5› ŠIœ6˜eî¡ñ.-ÞJ"Ž\áHv_®q'*ØáqµOž*;Pa©e –ÆÈÕÂ"ô&s²ÜYûÔPÐ\k!‘H”Ú6$*0}Œ“„q2Æ—)‚¬D™ ûƒã’¸Ùí
+œ1L@qÄãp<Ÿ¡M­pÂÍHjÓN(‰k»ÓôÓ§”ã@u
+­ñNO.öðÁùFsXqP6e~ESä5ö]› KÄqq¯±œÅ^£3cS†qwàd¿aÇä­2ŒiJ@æ$1`»˜À“à|©x8/ µï†j^Õ¡«(:ù/a<,ÐdšÚ£9]f“uÖàØ¢ïaÒ!ÛtP · ü$&uäÒlé3º¦[‘Fu¡[
+lÁT¬»<9ÚÖ«ü˜Ð^¥qõN'Ë›r:ûe' C\ß[œ™ÛxG0j»°X`©hSC)ô×5£'yH­ú8Z®kܬ¸ÀÍ™±°Y©—«8¦  ¶â•ê
+[Õô2Üó±Ò;ÐËTqÀ× wÓ}ÕxRJìæÔ7ð¤lÇ“8°2Ý O¢$ªžD×8t“( ­>†'Ûë.y²ªûë<Ù^oÉ“U½ <¹‹i*ŒÔÐÑ2"os¾¶—ИÅÞÍê˜Ð6Ç‘‘Ñó±NþhU’€
+endstream
+endobj
+10597 0 obj <<
+/Type /Page
+/Contents 10598 0 R
+/Resources 10596 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+/Annots [ 10588 0 R 10589 0 R 10590 0 R 10591 0 R 10592 0 R 10593 0 R 10594 0 R 10595 0 R ]
+>> endobj
+10588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 690.058 153.516 698.748]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h) >>
+>> endobj
+10589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 583.073 132.392 593.485]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value_a5872c2bcef26f14c3d61e9a177868a5a) >>
+>> endobj
+10590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.122 140.133 580.533]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value_a5b7402e835373ac7daa72136ce4f8c2b) >>
+>> endobj
+10591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 523.666 153.907 532.284]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value_ad993c1c16d784d42431121822aadcbff) >>
+>> endobj
+10592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 508.867 133.154 519.333]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value_adef52e07b7b48f9acb725b6c5601df2d) >>
+>> endobj
+10593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 497.763 178.34 506.381]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value_afeaba5ff826dc76678433bcc2c66392e) >>
+>> endobj
+10594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 108.952 147.948 117.643]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h) >>
+>> endobj
+10595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 94.279 157.417 104.691]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8cpp) >>
+>> endobj
+10599 0 obj <<
+/D [10597 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3234 0 obj <<
+/D [10597 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10587 0 obj <<
+/D [10597 0 R /XYZ 70.866 753.828 null]
+>> endobj
+3238 0 obj <<
+/D [10597 0 R /XYZ 70.866 733.15 null]
+>> endobj
+8640 0 obj <<
+/D [10597 0 R /XYZ 70.866 683.084 null]
+>> endobj
+3242 0 obj <<
+/D [10597 0 R /XYZ 70.866 674.642 null]
+>> endobj
+10600 0 obj <<
+/D [10597 0 R /XYZ 70.866 597.786 null]
+>> endobj
+10601 0 obj <<
+/D [10597 0 R /XYZ 70.866 536.658 null]
+>> endobj
+3246 0 obj <<
+/D [10597 0 R /XYZ 70.866 483.519 null]
+>> endobj
+3250 0 obj <<
+/D [10597 0 R /XYZ 70.866 435.342 null]
+>> endobj
+10602 0 obj <<
+/D [10597 0 R /XYZ 70.866 414.309 null]
+>> endobj
+3254 0 obj <<
+/D [10597 0 R /XYZ 70.866 393.631 null]
+>> endobj
+10603 0 obj <<
+/D [10597 0 R /XYZ 70.866 383.415 null]
+>> endobj
+3258 0 obj <<
+/D [10597 0 R /XYZ 70.866 347.446 null]
+>> endobj
+3262 0 obj <<
+/D [10597 0 R /XYZ 70.866 320.269 null]
+>> endobj
+10604 0 obj <<
+/D [10597 0 R /XYZ 70.866 300.957 null]
+>> endobj
+3266 0 obj <<
+/D [10597 0 R /XYZ 70.866 282.078 null]
+>> endobj
+10605 0 obj <<
+/D [10597 0 R /XYZ 70.866 256.338 null]
+>> endobj
+3270 0 obj <<
+/D [10597 0 R /XYZ 70.866 223.938 null]
+>> endobj
+10606 0 obj <<
+/D [10597 0 R /XYZ 70.866 198.198 null]
+>> endobj
+3274 0 obj <<
+/D [10597 0 R /XYZ 70.866 163.942 null]
+>> endobj
+10596 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10634 0 obj <<
+/Length 2503
+/Filter /FlateDecode
+>>
+stream
+xÚÅ[Én#ɽë+
+cÀfNfä>GO» ÌÅ°,øÒ36Y”S¤ÌÅcûëý²‘YÌâ¢JÍœš®ÊxË‹¨h^<¼øËoþüÓãÝ÷_´,„cÚQ<Î Ë™3¦0N3Ëmñ8+¾Þÿø<yÝ•›Ñ˜¬»·£_ªÞ"b’;
+oñb¬9SªyáËbYÖO^O÷/åj7Ù-Ö«·71/„nßtL W¿i™çü~ZNªîþüx÷¯;y!
+!ó¤
+m-㊊éËÝ×_x1Ã?þTp&½+~­})$sVâײøûÝߪD ½ÅY†9%k
+…ûRž¿sÓ¹òH>!£p’8I#NT£Ñk¹P~ wy”Ĭ¤ x$¢_%ñ</žž ÀQÿ(·‹ÿ”e¸—¤ƒîTŒÑµ¹óË~5 ¹o°wžúTã¯?"©<”“ÙÃdõTvÅD~â“•MÞá­²}m±Zì¹Á ¦<¬‰ì'¤ï¿á.œ„$ÒZqS¦!™”­áBIh&µè ÿ`ÔX´’HF>‡h¥™ó>=Ùl2µÅÁ*‡LÑÉU,sVn§=y¨ÉAigiKB–Þ‡R1²TÃõȇ'8%ù+#µÏL^Ûð>˜-8¡jª‹ÕãÛz½<o¨>bà\¡¸cÎÙ!$-Š}’qWø²0àAÒäm@åÈÄ¢_&»ésŸcõšê†´ÇbBÑ-õ¯'Ÿx‡å3BrÔá»w0™X=‰Oçäzͽ(?\ñžÚæP·ÏÈô(N‰Ø’‚
+’Ô*±K°ó`}KŒ¢Û–»TR5è<uh‘*PŠ@Ò¥ ݼâ°D})w†ÖiÒE™Ò3Ž†>’ùÆ:=·CÆ£BAÈP,|i·xÚ¯÷ÛÜŒ*ÐE-là
+Ûg­3ŒJÞâÌIB%œÁÓúº¤ßÉ”Ý*_HƒŠCƒnP€µÈú¤Pþ‘|3‰CW ¸ÈI‹1¦tqÓÁé)‡Lx²uÔ±CSd¶ó„h4”Fë¢Z¥bÑmÃý‘ÕÍ[¦¥Π$øŽT,!…`\ƆhK[ª$€¹I{]I؆)ì4žk]bS«²¾ÿÝH4q2´HRãh‡x€Eá$¢Ó(¾^•éQƒÇíeH€0±Ì‹¤êò<ÎÆÈ<NÄ s®|˜¤«båÛyÜÁW@òà èB2@òªš§ m:ÎúmÏDuþ:’oêôöŽ»Ž¼$¯ìNÚøR\]_á©£øJr
+ýå)–ö.,G¦ß‚ߌr?í%|㎠NŒ>šÍ©ð©>ÀõH£ÕUƒ8)˜¤ªO2RÔ¸s6kRâo“NQ!ˆË߬àP9È
+NRBŸM¨†9¯rÈDjÖ®#³“QßÇV ¼[b+ïþ< |['*[ç>ÌŽ}¾š±T¿f妜‡)à{#)EíÁs‘Ë®Š– rÒ8‡±ämU'¯5úñ Ž‘7ŸšqæU}’ðú씈r&‡Ìð¥…t,s6ÙMR½µdBP¡S,´ô¥ìk³Ø×Á¾¦kßÕ,¨”V9d©T,sY®žvÏÙ‡a&Ì^eÐd
+ NaÚ-€¤Ô‚9'/¨¡8ȊΟŠƒ¬(ÿN5=_J‹£¢té‘N1æ;b(×Ôzíq²ú =¼ôà ÕŽŠO*O˜$k&Ñá1íøPêÿb2kFL#£ÙmC‚ &Âøõßáššÿ
+endstream
+endobj
+10633 0 obj <<
+/Type /Page
+/Contents 10634 0 R
+/Resources 10632 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+/Annots [ 10607 0 R 10608 0 R 10609 0 R 10610 0 R 10611 0 R 10612 0 R 10613 0 R 10614 0 R 10615 0 R 10616 0 R 10617 0 R 10618 0 R 10619 0 R 10620 0 R 10621 0 R 10622 0 R 10623 0 R 10624 0 R 10625 0 R 10626 0 R 10627 0 R 10628 0 R 10629 0 R 10630 0 R 10631 0 R ]
+>> endobj
+10607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 472.943 167.813 483.48]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_afd8933caa886d4eccf7f65f5e82fe815) >>
+>> endobj
+10608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 419.916 170.525 430.511]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 419.916 280.017 430.511]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a68572d2a9ac1d8eae21df3c65437da6f) >>
+>> endobj
+10610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.424 419.916 342.538 430.511]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 405.696 193.837 416.292]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a505785ea5048cbc446d43b7f38e83eab) >>
+>> endobj
+10612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.323 405.696 273.072 416.292]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.873 405.696 398.622 416.292]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 391.477 174.64 402.072]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a41db10090a2d2e10b1571824f925c8c3) >>
+>> endobj
+10615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.126 391.477 253.875 402.072]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 377.257 205.619 387.794]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_acf744c35937ff979753d3924eb2a8bed) >>
+>> endobj
+10617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.027 377.257 268.14 387.794]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 363.038 204.148 373.633]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_ac6fedf281594e5de7286e130e412a1f1) >>
+>> endobj
+10619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.634 363.038 283.383 373.633]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 348.818 218.449 359.355]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a59fc861a62a509255e8e5cac7a1964d4) >>
+>> endobj
+10621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.651 348.818 444.106 359.355]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_afd8933caa886d4eccf7f65f5e82fe815) >>
+>> endobj
+10622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.172 334.598 268.925 345.136]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a78461b3ca53ba299e157088d5a22c9d0) >>
+>> endobj
+10623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 322.769 133.378 333.181]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc) >>
+>> endobj
+10624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.486 322.769 172.942 333.181]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_afd8933caa886d4eccf7f65f5e82fe815) >>
+>> endobj
+10625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 308.424 227.9 318.961]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a0e0bb71577484d17ec9c2698c524e4f7) >>
+>> endobj
+10626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.398 308.424 372.512 318.961]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.209 308.424 456.664 318.961]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_afd8933caa886d4eccf7f65f5e82fe815) >>
+>> endobj
+10628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 294.204 224.564 304.742]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_ae522389a5e74392b02ee45afb4907d7a) >>
+>> endobj
+10629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.972 294.204 287.086 304.742]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.833 243.025 181.966 251.715]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a379df479e2914fd1ed0287ad0e926972) >>
+>> endobj
+10631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.833 226.958 187.578 237.423]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8cpp_a02f3ce653bab6471a1d71fea8c9b7f92) >>
+>> endobj
+10635 0 obj <<
+/D [10633 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3278 0 obj <<
+/D [10633 0 R /XYZ 70.866 771.024 null]
+>> endobj
+8717 0 obj <<
+/D [10633 0 R /XYZ 70.866 595.186 null]
+>> endobj
+3282 0 obj <<
+/D [10633 0 R /XYZ 70.866 595.186 null]
+>> endobj
+10636 0 obj <<
+/D [10633 0 R /XYZ 70.866 486.258 null]
+>> endobj
+10637 0 obj <<
+/D [10633 0 R /XYZ 70.866 435.389 null]
+>> endobj
+10638 0 obj <<
+/D [10633 0 R /XYZ 70.866 256.65 null]
+>> endobj
+3286 0 obj <<
+/D [10633 0 R /XYZ 70.866 209.729 null]
+>> endobj
+10639 0 obj <<
+/D [10633 0 R /XYZ 70.866 187.247 null]
+>> endobj
+3290 0 obj <<
+/D [10633 0 R /XYZ 70.866 167.346 null]
+>> endobj
+3294 0 obj <<
+/D [10633 0 R /XYZ 70.866 136.608 null]
+>> endobj
+10640 0 obj <<
+/D [10633 0 R /XYZ 70.866 116.157 null]
+>> endobj
+3298 0 obj <<
+/D [10633 0 R /XYZ 70.866 94.099 null]
+>> endobj
+10641 0 obj <<
+/D [10633 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10632 0 obj <<
+/Font << /F53 6507 0 R /F100 8905 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10654 0 obj <<
+/Length 2843
+/Filter /FlateDecode
+>>
+stream
+xÚÅ[ÛrÇ}çWlU^€*q<÷‹Ê•*E¢b»)aè¼Èz€€%2 0ÀÒqòõ9½»¸ 0X\v¢¼H ¹èÓÓÓsúôÌ,/
+^üùêOwWß¼÷ªð,X«Š»ûÂqæ­-\ÌŠânR|8&ÙðÚJ9x{óæÃðóÝW7wWÿ¼0Á Qa™×¦þŽç¡?]}úÌ‹ þøCÁ™
+¾øWýèS£‹¿_ý-.D`F™ý§»ïdß ¯¥óƒ÷ßÿxÓ|º½ys{óá-~Æ?xûÝ›¿ÞÝÜ6u­¿›çß}|ûÓ_n>Ü …äƒ7õ¿wßL f5~ï™—ºk,Ú(f´Z‡oÇÔ¤bjã«aMg•Õûð¸R¢~TÚó"Aø1dÕ„b\Žf‰I”‚i—YHÍ„Ý~À4ñAY%p•gRù ¸š³ ýΣÙò>j-SNg@µh:F]NÿÓŒ· øÏÜðáµ1vð¡¿-G“ÛѬȒ|ûæ½ÐE€M¸B69œ¨µµŸ9WÍSpk+©0]zõÌF÷G©8²Iš‹Fa)Žt&åc¨ÝŠX½&Z×hž=lž¹–´t\(®ñ´cÔ¿+1R9›VÓù¬ ܨÍØÇé¬ %²´ù0¿_Å–ËDz3±ƒg: µdÜÈó¢¹-¹`“%Á<,Õ^¿TÓG6~~*3`„ŽA ƒäø
+™"²`*]×¼ÝñþÚÌu«.ƒ^±ý²ƒTca{`«õI¤ªøš^lj@0!
+õ€û¢Jxoàýš#¿Œ–eIfCúJwl
+)Á~‚A¸Æ’Ó¾£€â)$ŠÊ‰’§´Š17‚¡‰G[F­X—Qü²«7Á‚P'lXBuõñ2ª$ƒ¢”aÒˆ8 é*døÚ¯Çí¨§*Vê£õ´Þ˜–F¢ëiyÚHÖ„¾8e$¨Àòx%±G
+‰óŸPH6ÛZG ‰1G[(íëÕs[(ÎFüÅ-”ö¢Þfî_JÈ’ñæÄRr•msÂf(%dÉ{¼”ô‡lKI„¸)%©öùó©Ið>†N·Lò-K€¥± 269Ü_»ë&Ä•ƒVkêæîIFÇ9&ÚÁ†¦Ã!×K<ó€EÞX¢ šÚ„K˜Áï)`r”–U`E2CÄÀQ™¼è,CaµË gè%”¸pœñÆ„ç»ãœ=$
+0¨ÜæïdaF»Sgxï)P’3î|ìZ•+ä˜óç4MóûûeY¥÷öÔfßîà‰m
+†esà’iOPRÓ(Hgã­€Oå!j¤Ø¯3ñõ¶í:3E9H¥¨¯7àÛrÙ«—õ<Y²\u)
+(.Ííe{½ùÒcj;bµµ´"€Ñ²J¿`¬Î,é`TÇØå}•8 "P£O¹Uà 2D^òJÆÅ—
+èZ–Èr©@Ö›4þk_*ȺÔÿ$H¬…îôGl‚¶÷¯ìNw($li4fý£7–xP‘wÉ£"Úr7Þ怔 2”Úd@ºõª´IÉÕnÖŸßU†šuÈ×á ÖɀܲN„½˜>ü’¤èZ]íx}æ«Òt4Fu]ŠÒ_›têÈA:tAÉÉã¬ÓrÅ:Ûˆ¹h§¿wkÚÙv¯“w2`®x'’„‚B˃ŒŠ˜Giô¬›·´[ùt ûeb
+0¥Áwz®˜wj
+¶
+b žl9/¶V@ûÆÛûéj)Þ6o4ùÞvrœoßV±º¾~M=]»mð‡élüø2)§^X»ns¥êÛ”ÅèØkYM@Éðkß”võÜí´õKÜ©w =ÎáMäÌ6/Bú
+˜Ò¦>Ú¬áü.ô¬£kÅ
+endstream
+endobj
+10653 0 obj <<
+/Type /Page
+/Contents 10654 0 R
+/Resources 10652 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+>> endobj
+10655 0 obj <<
+/D [10653 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3302 0 obj <<
+/D [10653 0 R /XYZ 70.866 751.975 null]
+>> endobj
+10643 0 obj <<
+/D [10653 0 R /XYZ 70.866 727.865 null]
+>> endobj
+3306 0 obj <<
+/D [10653 0 R /XYZ 70.866 692.857 null]
+>> endobj
+10648 0 obj <<
+/D [10653 0 R /XYZ 70.866 668.748 null]
+>> endobj
+3310 0 obj <<
+/D [10653 0 R /XYZ 70.866 622.714 null]
+>> endobj
+10647 0 obj <<
+/D [10653 0 R /XYZ 70.866 609.793 null]
+>> endobj
+3314 0 obj <<
+/D [10653 0 R /XYZ 70.866 562.838 null]
+>> endobj
+10646 0 obj <<
+/D [10653 0 R /XYZ 70.866 538.594 null]
+>> endobj
+3318 0 obj <<
+/D [10653 0 R /XYZ 70.866 492.637 null]
+>> endobj
+10644 0 obj <<
+/D [10653 0 R /XYZ 70.866 467.521 null]
+>> endobj
+3322 0 obj <<
+/D [10653 0 R /XYZ 70.866 432.59 null]
+>> endobj
+10642 0 obj <<
+/D [10653 0 R /XYZ 70.866 396.449 null]
+>> endobj
+3326 0 obj <<
+/D [10653 0 R /XYZ 70.866 361.517 null]
+>> endobj
+10645 0 obj <<
+/D [10653 0 R /XYZ 70.866 337.331 null]
+>> endobj
+3330 0 obj <<
+/D [10653 0 R /XYZ 70.866 302.399 null]
+>> endobj
+3334 0 obj <<
+/D [10653 0 R /XYZ 70.866 262.441 null]
+>> endobj
+10649 0 obj <<
+/D [10653 0 R /XYZ 70.866 243.036 null]
+>> endobj
+3338 0 obj <<
+/D [10653 0 R /XYZ 70.866 223.01 null]
+>> endobj
+10650 0 obj <<
+/D [10653 0 R /XYZ 70.866 197.895 null]
+>> endobj
+3342 0 obj <<
+/D [10653 0 R /XYZ 70.866 162.963 null]
+>> endobj
+8718 0 obj <<
+/D [10653 0 R /XYZ 70.866 138.777 null]
+>> endobj
+3346 0 obj <<
+/D [10653 0 R /XYZ 70.866 121.832 null]
+>> endobj
+10652 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F97 8866 0 R /F11 6621 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10678 0 obj <<
+/Length 3224
+/Filter /FlateDecode
+>>
+stream
+xÚµ\Yo#Ç~ׯ @ "VoßÇ"°YK± {(ò“횤d©”süú|59=ìá5½/«c‡ýUU×]5âÅSÁ‹¿]ýõáêÝW…gÁZU<<Ž3omá‚dVÓâÇë_}øûÃíýèF:íØèÆJy}÷õ··Õo¾üþãßÝ~z ɯ?”ÿ>|ýý§Ñ0ÖÐdý‘·>~~øæêöáê_WðBZh&¸+=ÅäåêÇŸy1Å~Sp¦‚/þ]>úR€¤€ož‹^ý#Aº–¹à"Úxøú[öUEèŽäûÛ»ÛûÛOo÷Éiø÷žy©Q£bF«-A¼-S£
+Á™3Á¶…jã[©>×ëÙº¤ ùè»;mZ ?Þ7"0áTõ±Ÿ¤4ÑgŠoŒ±×ëÍŠ$~ý6ÙÔÿMܬžj¶îˉ÷éüeŸk¡ SÜNKÆyÖ%Ä4+ÇB “óÞWDOgëIDô–øƒÓµŠ -2ñ8^­R<‚"õ VÛA<jfxu’Óî(Ú2otf?ÎÆ‹ûÙxúe}Ÿ{°ü3Þ#qý´§º±Êß4Ê+ƒœ*¾OV#ø‡e6µÿÃtöçr1ë¡=Ö
+BP¸>íB ú<[<m~í\çõOÜðÕHðëñâ7|/*WM¿]Ïÿ7‚†Î–ôÓ|±±zŸfi 9ä$Ð1Å›Aª¾Ä4õZNÚÝ*… 9ôH)ɤW=—KWÐïÞÝ ]@RV–f*5CØÄC••q®ª‡"‡+T»gâkjnù;é,3"œæ.³`Íar€Ÿy@¿ã -Õ)<²±à6æ ÚXpúöòš²ßõëx‚À
+w1M@Ë4R¼áÐu¡u ™Œ—Ûè8\’K ßoÕpš%| nº£ÝÔ <pÃ2 <š/šgbßÑ“(³n8S
+Zî‹™ÚTج4ï%±]˜ ”nq“¦¤RD Vµ‰9±°úe¹|>¬AóuBé%rò‚°7ã /†›ÕIÊtb$ ŸRƃ‹ {B©!,™õ¿´2„õnæOoË·uvûFÞa„Ë@·DÞ!y¬Ø·:˼_Z,¼ÅÓæˆ'åBzÝ*Y÷ëÕˆ\¯™²{î(qò¡Ôx¾˜§ÂìVܺ5‰rúê$©êDhþ—/p…®Á ¹Ž2¢Z
+Ii ø0˜d?l¹9Bò¥ñW4P —¦ðp¦03Á¦»“ÂÃëœàv'½«NâÁWf™:Êš‡C[‰Ûúe¼™ô&výM…Óýšà÷"ÏqÄ=%x”<!ƒ Gi'B÷nP~-žÄ'7!pŽDZ…0œqÔ¼eøÎ8nῇq™Êá”Gáks×S²Xª;*ù0Ã:ÿ¨–¨FÕÁÔ]ñÅŒêûÿ¤€‘TJO†ŽâÐÅÀ[£þ¼Ö¥Ë®Û^´ÇºYy•ã¤§*Av…Q)Ù‘ŠÉ‚›áDPDRT·‰Ø$Ú$sŽV•W*i âÝi¶Ò#
+íB†¾¤ß
+Y$ÛçžÐÌòÛ–žÓI¶Lßô*88®s`B¨º‰0{šZomPDUnlôíåµ±“ww8¬¥ešù]] o¼ÒÕ
+L$úG!ÚCé)iL5ã;;Ê€K£ŒtÉÏeè$[äŒ27‘$"‘>C‰N²!äj"•óÑC÷‚D©Jª.¬Tʘòf%Rœ`Õ¶çѶ±ýñ€Œ3¶Fh°6Ʀ-
+l¿^è
+±X.:ïtœ0Í7JÊ¥´þ'‘t”çyYc¿.áwf©Þ‘ÅÙt{Ãa-ü ’í—æ—ôoɪU•3Åá¤*Zš)F¤¹E;Ý!‡ ”¥‘Ž?ñ‚T@E‚Ò).ê]2ýÞ Jf3Š²Wp'fîÈf¤8gèÙóÚ†ݤXœÞ°4}¡ø¯ª“¸?øÚ†u‡ÌZÆ"Ù=T„JZtV %í9wÓ³$åËMð p†š‡³ì Ÿ9Þ¢]9)2P¤=¦èÉ2ÜzM.JÁ¹ø£Ùý]Áð^\œ yzØdȆP®†fñÂlè¬aŠ£¿Öc2ÌRê?ÿs|”2±ž¤´R†CÖs”6äç£ &¸™¢teÔ[io}S(Ê †•çü™¨ÊU˜¶´jK …eë®$HpÑ…þ?.•é…
+endstream
+endobj
+10677 0 obj <<
+/Type /Page
+/Contents 10678 0 R
+/Resources 10676 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10564 0 R
+/Annots [ 10651 0 R 10656 0 R 10657 0 R 10658 0 R 10659 0 R 10660 0 R 10661 0 R 10662 0 R 10663 0 R 10664 0 R 10665 0 R 10666 0 R 10667 0 R 10668 0 R 10669 0 R 10670 0 R 10671 0 R 10672 0 R 10673 0 R 10674 0 R 10675 0 R ]
+>> endobj
+10651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 740.744 157.928 749.362]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc) >>
+>> endobj
+10656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 727.603 154.44 736.221]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 714.462 180.11 723.211]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_dim) >>
+>> endobj
+10658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 699.474 195.075 710.07]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 650.572 195.9 661.11]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_a8a7d7c5afa05bdc14e324257a3f324ef) >>
+>> endobj
+10660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.615 650.572 352.216 661.11]
+/Subtype /Link
+/A << /S /GoTo /D (structdim__desc) >>
+>> endobj
+10661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 637.557 193.9 647.969]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_af1c739fe5ec2456214c87c069b927808) >>
+>> endobj
+10662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 588.53 224.564 599.067]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_ae522389a5e74392b02ee45afb4907d7a) >>
+>> endobj
+10663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.972 588.53 287.086 599.067]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 575.389 205.619 585.926]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_acf744c35937ff979753d3924eb2a8bed) >>
+>> endobj
+10665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.027 575.389 268.14 585.926]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 562.248 170.525 572.844]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 562.248 280.017 572.844]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_a68572d2a9ac1d8eae21df3c65437da6f) >>
+>> endobj
+10668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.424 562.248 342.538 572.844]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+10669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 549.107 193.837 559.703]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_a505785ea5048cbc446d43b7f38e83eab) >>
+>> endobj
+10670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.323 549.107 273.072 559.703]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.873 549.107 398.622 559.703]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 535.966 174.64 546.562]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_a41db10090a2d2e10b1571824f925c8c3) >>
+>> endobj
+10673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.126 535.966 253.875 546.562]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 522.825 204.148 533.421]
+/Subtype /Link
+/A << /S /GoTo /D (cean__util_8h_ac6fedf281594e5de7286e130e412a1f1) >>
+>> endobj
+10675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.634 522.825 283.383 533.421]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10679 0 obj <<
+/D [10677 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10680 0 obj <<
+/D [10677 0 R /XYZ 70.866 753.739 null]
+>> endobj
+10681 0 obj <<
+/D [10677 0 R /XYZ 70.866 665.506 null]
+>> endobj
+10682 0 obj <<
+/D [10677 0 R /XYZ 70.866 603.463 null]
+>> endobj
+3350 0 obj <<
+/D [10677 0 R /XYZ 70.866 508.135 null]
+>> endobj
+10683 0 obj <<
+/D [10677 0 R /XYZ 70.866 488.857 null]
+>> endobj
+3354 0 obj <<
+/D [10677 0 R /XYZ 70.866 467.904 null]
+>> endobj
+10684 0 obj <<
+/D [10677 0 R /XYZ 70.866 443.773 null]
+>> endobj
+3358 0 obj <<
+/D [10677 0 R /XYZ 70.866 408.887 null]
+>> endobj
+3362 0 obj <<
+/D [10677 0 R /XYZ 70.866 382.948 null]
+>> endobj
+10685 0 obj <<
+/D [10677 0 R /XYZ 70.866 361.823 null]
+>> endobj
+3366 0 obj <<
+/D [10677 0 R /XYZ 70.866 340.812 null]
+>> endobj
+10686 0 obj <<
+/D [10677 0 R /XYZ 70.866 316.663 null]
+>> endobj
+3370 0 obj <<
+/D [10677 0 R /XYZ 70.866 281.853 null]
+>> endobj
+10687 0 obj <<
+/D [10677 0 R /XYZ 70.866 257.78 null]
+>> endobj
+3374 0 obj <<
+/D [10677 0 R /XYZ 70.866 222.894 null]
+>> endobj
+10688 0 obj <<
+/D [10677 0 R /XYZ 70.866 198.821 null]
+>> endobj
+3378 0 obj <<
+/D [10677 0 R /XYZ 70.866 163.935 null]
+>> endobj
+10689 0 obj <<
+/D [10677 0 R /XYZ 70.866 127.83 null]
+>> endobj
+3382 0 obj <<
+/D [10677 0 R /XYZ 70.866 93.02 null]
+>> endobj
+10690 0 obj <<
+/D [10677 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10676 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10718 0 obj <<
+/Length 3262
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\ÛR#G}ç+ö Š05UY÷yc1ÆË
+RdOõ9¡•Î>dìÝ<ìýþ§ìÝâÍ_zRèzÿÍ}èAnÄ‹ûÞÕÞ?úE!¥®ptz28»î+’ûâèâ¢@>쟜òW—ƒãÁåàìÿ«TŒqÿèçËëÁeþ®/l_<ÿñüèËçRàaöïë“ó³U¯ÊX„ ™uN«…5zî—¬Æצâ딥_§ÓûÜ´ñS"¶º$e!·[hkª•$#Õu*•&ªTª TPu•·£§›„N…‡Ûë4J£ë:o¦“ÙøÛóôù)ôÒÊþµŽßyšåLÆ‚`—¥ØÞ.2$HÅt,Þ+Ó‹x*øY¬yËú‘?m•TÆ›ò™á÷ü‰z(°Œ&,ÄX•?dlå¡R^ì@a‚Éþ8‚VšŒgã餈N¥ûñd”¿Š1ÿïô® ª¤ûâ½›Ñp’Xäˆ:‘HÄBú£Y³ZE'T´„Õö>7úy6¾7ß¿÷µÝ¬>)ˆ / Ñºü¹ËÑ]_ËýÑãhr3ºÍ þÚü/ým4KØn(÷Z
+D«…éH€À™¨ ´¶½ÚøTz'¤öu• u­°Š:ÐC–V5“¾’ûÏ_GO\‚œ’?é5)âüŽó}:¼ýûévü}6}|ÿþi4{þ¾j±¶A Ú[¬±0F«Õ(U¬˜›-æõ†ÌŠ@̼–¢Ö!Ý´Áã¼B€”`3~‡Q7Zï}%Õ:'4ò]¯àLÅePÏÞBl€Ì
+kó…“ÂÛ˜Y‘J‡Þ@Í«ÔΆ£§ïÛQÎ Jj±*Â_`xá÷D¶ö™ÜÇÇo…³—Ÿöz¿gM°$u áË–âQÞ)õyˆÂ@VM·7Ì4V˜ñãmÞuFÅ› k9[ÓÔðÓ³ëäZ—q ¹$üÌä_—W ‰jÙì¬ï™¤M¤`d··‰Æ —lBª²êºIÌ ™s(ª¿?âÚo¬•íAóJ)N/ x[“æñ®šD‹x¯ˆ±øp¨WÈñóä† TûÊ-–+›6­Ôû÷cð¶Õ¸ùŒõþ§Ov:¾-ÙàâY¤ ­·¡°…9…L®`Å’¾ªPÓ-pç×¾“àKãáWîY÷£ÎàgÛè>¥û7º¯Á¼±Ëm¨‹Z€ »hqCFÙ,ZÃñý0#ª÷£%`/«ßòÀå·+þ§Ùp6¾É@uU—†@!)–†‘D–\©Í'YäîÇ_S$«žÅRµ#¹A` À„‚*<ÿ ¬²1T jÁøí’æ_®¾œ^gƒãjŒ £b1L¾aÀú4šMŸ'³†ÚQlF*¬CGpØ6°é˜ rå¸zru˜P|6bµW‰‘ÞÖU^ÿv1(F„çñd¦)1
+[:FÛ9F ¦mkÇ-Ù®Û&U©9Uµ³‚e·õJ£{jåþf¯–—j Ñ`MÚ¾@tcmóƒI´mÀ,& Cf)`y5“Ϊú¦`óâòühpu•Fvòm{ x?ïu½-ú]tš£§Ùã´Ÿê-K ¨ †²¢I7Qm²u­0±Õ>µÎlXE]§ h¢Á».´;`¿qií ʈ9sšöÊ#z§´KÊ»`èžÑœb¡Œæ-þÐ ´ŽÏY¤8ÑkAùT•aÊ(·ÈòiãiÙ,@|s±ñ›„#cضi[¥œšrIªÒj4͹$ÒÜŒñ/ <,9;*o',‰>РüÑ-áö Á˜óCª×Fcku*ON§ÃÛÓñ×GÞ)€‚_ƒÔx³<ûké:y™äì&!6ötƒ1Ş­`:Å`Ì’¤®‚1ÔÏÝóÙ©„»9V0‡ZHóÿìô¿ÿëìà{7r”ÉÛ,:€,Ç~j“°ö¶‡ä
+F8[MÊ–/³ cb•²P€ x‘Tóv¥ruÝ‹6³LL™ÅÔjL^^ƺÚùu‡æ®«ñ<_‹ìÀ‚ì„J}¾í£6 ºQ«·~šƒñ`
+˜ìœéB-iÆšºÚ…8øuÊw®‰:°À „®)èk ðéâŽ|?“ÙäRyÚßÞ¥ò¼٥ĉÿêþýÚÃÞ‘–êMboš»7w§`9Ûýy ÞèÐÂ×¾ÁÅÏù7Q뇸 ×2FÜ|D¦•Á£"1Ph….Š“"—$ƒªà®QÆjP¨ç/Àá/Iõi<Ïnñù.tcR'ãëº?^¤ŽËñ$r£¯¥©ë,Àœ¡Ì-eöí-0ÖföɈÏOìC1—¼‹wùTrSLåÌ 1×ÌÿVg?Ÿð"HÅzžœ]]ò ¤w¤ÂK$¯›½Ñ<âÎwRgƒ
+KéÌÛÅë/“‡U8[BêJü7]ç/ïÁd'”×­h€{ìÇ›úÎz½‡7¥›Â“íN.IN××nnQQC>ü«8^ݨÐäÓ=ŽÜšg²é›wž¨]‹óx‚hñ½õ ðôðh-‘å‹ z×+.,¾ñtX&ehï[v$Å¿{‘ð-Ù>VÂIê@³6‚"Õ4_ü–ºÏ#Ñg;ÐèøÛõ5…eç¤Í3CkõåÈ°êæ;Â[¢ !8ñÍ¡Mê§~,˜-íòC?ùÏ/ØjsŒü m‡'ÑÚŠÉJIZVý}‰nï
+endstream
+endobj
+10717 0 obj <<
+/Type /Page
+/Contents 10718 0 R
+/Resources 10716 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10691 0 R 10692 0 R 10693 0 R 10694 0 R 10695 0 R 10696 0 R 10697 0 R 10698 0 R 10699 0 R 10700 0 R 10701 0 R 10702 0 R 10703 0 R 10704 0 R 10705 0 R 10706 0 R 10707 0 R 10708 0 R 10709 0 R 10710 0 R 10711 0 R 10712 0 R 10713 0 R ]
+>> endobj
+10691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 597.965 112.711 606.714]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i) >>
+>> endobj
+10692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 549.019 193.183 557.767]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8cpp_a674bc9b9b0a0cc3dca0820643c8475c3) >>
+>> endobj
+10693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 535.866 193.183 544.615]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8cpp_a7b9bc04902bf3eaaff6dfe40a43eeece) >>
+>> endobj
+10694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 485.199 148.593 495.669]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a16be55d13bb6fa5e80bc55d97cfcf4bf) >>
+>> endobj
+10695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 472.046 147.867 482.516]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ad624e44013db72b65c53c1491716ee5c) >>
+>> endobj
+10696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 424.821 181.634 433.57]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9d6634a9e755f67551ba7960567e96ab) >>
+>> endobj
+10697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.382 411.669 206.413 420.417]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_af63016ce18fa97e11e2c7fbd087df8b6) >>
+>> endobj
+10698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 396.669 245.756 407.265]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a26eaf859a90d7b536bfe63ab65fd0e0e) >>
+>> endobj
+10699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 383.517 250.24 394.112]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9aeeb4701f5ff5ded1e832018813bf09) >>
+>> endobj
+10700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.057 370.441 293.431 380.96]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a66a3a2f870d0ee47c12a471826933dcb) >>
+>> endobj
+10701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 333.378 242.475 343.897]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ad91c9dbc84b4b5b2d14b2de2bcdf2a25) >>
+>> endobj
+10702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.893 320.274 293.926 330.745]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a647e243ec12d6d4a89b08f69686503b7) >>
+>> endobj
+10703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.629 295.118 312.617 305.637]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ac88543b95bf6b7d5b210ad34fff6b513) >>
+>> endobj
+10704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.355 269.934 279.463 280.529]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7a1266796d866ba1e5a95ef174b24919) >>
+>> endobj
+10705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 244.951 238.27 255.422]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a9c1c5649b66e50cdd494f50de8499a03) >>
+>> endobj
+10706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 231.75 241.982 242.269]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a0916aefb5a0b674e906359e4f7287a6e) >>
+>> endobj
+10707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.293 218.646 262.935 229.117]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_aec99fbf6184d79fb267513ec458de024) >>
+>> endobj
+10708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.485 181.584 229.965 192.054]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7f5edae2a0f54a117256e0540a072c12) >>
+>> endobj
+10709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.551 156.427 285.192 166.946]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ac75e7aa47df27f7b24871202f85da468) >>
+>> endobj
+10710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 131.319 233.742 141.838]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_afa10536d5a48576f8850f28d1d734435) >>
+>> endobj
+10711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.913 118.216 220.925 128.686]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7937a416de74b923010e90db852006c9) >>
+>> endobj
+10712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 93.108 232.02 103.578]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a6416fadea08e1b102fb5d28fb1e6deab) >>
+>> endobj
+10713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.987 79.956 224.612 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a018288316481de41a8c738ae5d1e04dd) >>
+>> endobj
+10719 0 obj <<
+/D [10717 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3386 0 obj <<
+/D [10717 0 R /XYZ 70.866 751.987 null]
+>> endobj
+8793 0 obj <<
+/D [10717 0 R /XYZ 70.866 727.826 null]
+>> endobj
+3390 0 obj <<
+/D [10717 0 R /XYZ 70.866 710.94 null]
+>> endobj
+10720 0 obj <<
+/D [10717 0 R /XYZ 70.866 608.9 null]
+>> endobj
+10721 0 obj <<
+/D [10717 0 R /XYZ 70.866 562.111 null]
+>> endobj
+10722 0 obj <<
+/D [10717 0 R /XYZ 70.866 500.012 null]
+>> endobj
+10723 0 obj <<
+/D [10717 0 R /XYZ 70.866 437.914 null]
+>> endobj
+10716 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10737 0 obj <<
+/Length 2378
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[oÛF}÷¯ º/Pç~  8^Êu_ÖV²[¤}p$:V]Yn‘¿g†¤,JCË6éd ‰ÃßmÎw¾ I“Ï MŽöÞŽöö‡V$–8­E2ºN %VëÄ8N4KF“äcïð§ƒóQzÑpc{†ôšóÞðø]Z\ùçÙáû“ôtÔgœöŸ£ã³Óþ€ ü²|äðìx¿û¿~ÞKG{¿ï1Ø@–Hʉá.(µÔ%㛽¿Ñd‚ÿü9¡D8›ün½I`•Ã³ärï_ë%UD2W7ÿÝqeù©0ùÁø‹t˜^¤§‡é¶UU$¬%–ËÇŒ’J%ÅÊ.ZF—®GYª5;­!Z‰ÄhFhe篜«`EõXòq ”öa»H/ß¿ýJõ7ì™Ldqíei\¦¥JE)Å;±ø\zsq´iƒ{¢z JÞ¼y{}Ý´—-.²«É¦-‚3HWÌ›Ûß¾"t?öq÷î§ó¥–Û1L'ƒŸ0öYçZ³U0l#^K¯[ðÞ}®zùt 7¸]m†fC6,´¬º§”Ù襄¡í²€¼sq’Ä.E{Õ’"@b#˜‡gç¿Dt
+E,‚Ó^§°DV×9úå< øa!Þ‚G @ hno€S„2÷8Ÿß-½òd œ Q0FœR«äH?xÙF˜´°Ï>ažx‘ 6L<G¦OËzºÂ~NõŽH"¾Å(¡(æ0¿õ?|Ý´‡[¥ne¯þoÕœ¦àn*pÚÂÓj“§Æ—¦B’‘ê7ÜêFõ¾
+qÉ:Pï“Þ öLõ’)»ð^JA˜hð>ÎRÚ™èÖŽXåêºh
+Ém©éB©³D:SWZðT ‡¢S‘uzh"/tÄ
+XÄŠÎ@µ<'Ž†…¡Ò}×z7iSËz‰ƒZ^-³­¶ÕòxÛj™q~qv˜^^ö1„‹ Ý—°š(LÚI4"¶Uç‡C’¨.“¹°*Âl\aPp¨•Štuµ—£ƒQú˜Û¼¡QÉ:ÐüÁžæ¶b !;P«8sʺÚAIæ!¸¬Næ'gÒ•ƒxÑ>jï8¯ •cB¥…$†¤J‡ïŽÖX#ZLOŠ.,°‰u þBÕ„?ÆRBƒ¿{×»YNÒ0£fóå¿û’ö®¦ËÇêˆG
+çeT¢Ñb9Õ\IÌþ…$£Ä«"€o  ÞBË0+´wN@<h;€f:Pî pçš•G‡\îÂÚ«½z)
+ü\ˆÐ…?.‰ê)ÍgS;WuùÚ/ï Ë÷’„«\o 'Tc»à¦ó¾òíÓ5ÝïãY6ìKÕ[d¿ßgóñ×ÇxªÚ»UqÝ⸂¡\°p Q åUÂiYz‘„õŒRÚ;¹/|ß•—{ä nðùt9Íçå•||Ö¼
+—*ÎP>"¬L!ûo“BB¶b¯Øi1°2„RBŸ»Qª)÷§åP”CöòÒ„éÅåñÙ)+,
+çÛ Ó…η¦n#Ô«Ž$Ä€qð,ºZà¶#UV€Ù´Š&³Åßùu鞘eUɘF|´8~ø¦| iZõ+–pV’¥ÅãÙ¸ ãÛÛ¾P=Rôs ÐZÁÉÐ4‡;/²r>
+õˆµ ¿7™ëeɪw΋<–ùÀE7z¥
++‰šÞq>ÉîÈ—ÊþÍøîtg¤ÃÄ ‰Š Y+s™_PSdI]¦ñýr:+­Ýš®ý@Àr~2]¶â§W7ÙÝí
+Wmrßìp51ÖÔ›ò­µÇö*áamº!|Ó²RüúÜ¿šõÛVšñ0~Åå¶âäø0Ö%ãÀ€oO ÊÈ6ÃR
+m,JKk‡„²„YýÔ@
+PºÊöjÁhB4…ñ8šxh׉T _‚ù™lF>©úØ×ÿ* ƒÏøö¿(]j}A«Æ
+}º®Œ`«÷u+ÕÿÉ~Â
+endstream
+endobj
+10736 0 obj <<
+/Type /Page
+/Contents 10737 0 R
+/Resources 10735 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10714 0 R 10715 0 R 10727 0 R 10728 0 R 10729 0 R 10730 0 R 10731 0 R 10732 0 R 10733 0 R 10734 0 R ]
+>> endobj
+10714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.939 758.195 224.94 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a985ac573f577001095fd484201ef022e) >>
+>> endobj
+10715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.61 731.83 223.841 742.35]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a72cc14ccc502560229879d065a15c9a2) >>
+>> endobj
+10727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 705.564 267.903 716.034]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a00ac76930544c218724e48a664dbb514) >>
+>> endobj
+10728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.479 691.203 238.446 701.674]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a7094bb10cb648af45c6407c9e7e1b53d) >>
+>> endobj
+10729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.55 664.888 219.746 675.358]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a04583f1102d6820e8dde34fc1265a425) >>
+>> endobj
+10730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.38 650.478 253.118 660.997]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a683f0c9bdca244c79055953be296af6b) >>
+>> endobj
+10731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 277.796 112.711 286.545]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i) >>
+>> endobj
+10732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 224.231 211.348 232.979]
+/Subtype /Link
+/A << /S /GoTo /D (coi__client_8h_a2353dc088de554ab64ff304e2954b619) >>
+>> endobj
+10733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 168.943 148.593 179.414]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_a16be55d13bb6fa5e80bc55d97cfcf4bf) >>
+>> endobj
+10734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 154.583 147.867 165.053]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_c_o_i_ad624e44013db72b65c53c1491716ee5c) >>
+>> endobj
+10738 0 obj <<
+/D [10736 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3394 0 obj <<
+/D [10736 0 R /XYZ 70.866 632.918 null]
+>> endobj
+10725 0 obj <<
+/D [10736 0 R /XYZ 70.866 612.288 null]
+>> endobj
+3398 0 obj <<
+/D [10736 0 R /XYZ 70.866 591.964 null]
+>> endobj
+10726 0 obj <<
+/D [10736 0 R /XYZ 70.866 564.892 null]
+>> endobj
+3402 0 obj <<
+/D [10736 0 R /XYZ 70.866 527.731 null]
+>> endobj
+8794 0 obj <<
+/D [10736 0 R /XYZ 70.866 500.659 null]
+>> endobj
+3406 0 obj <<
+/D [10736 0 R /XYZ 70.866 480.93 null]
+>> endobj
+10739 0 obj <<
+/D [10736 0 R /XYZ 70.866 289.336 null]
+>> endobj
+10740 0 obj <<
+/D [10736 0 R /XYZ 70.866 237.927 null]
+>> endobj
+10741 0 obj <<
+/D [10736 0 R /XYZ 70.866 184.361 null]
+>> endobj
+3410 0 obj <<
+/D [10736 0 R /XYZ 70.866 137.023 null]
+>> endobj
+10357 0 obj <<
+/D [10736 0 R /XYZ 70.866 116.435 null]
+>> endobj
+3414 0 obj <<
+/D [10736 0 R /XYZ 70.866 96.02 null]
+>> endobj
+8795 0 obj <<
+/D [10736 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10735 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10752 0 obj <<
+/Length 3504
+/Filter /FlateDecode
+>>
+stream
+xÚÍœ[oÇÇßõ)ˆô…ÂñÜ/@Q qäÖAj»Žpò H”CT"]‰J‘~úþÏî’ÚÙ.—œQœET¼œs™3çüæ²Ã''|ò׳¯/Î^¼òjâY°VM.n&Ž3oíÄɬ˜\\O>L3l6·RN_¾}ý?³Ÿ.¾=;¿8ûÏ™@+|"&BZ¦„ª¾æy˜\Ý}ø‰O®ñßN8SÁOþ[=z7A»n'ߟý#!_ÈÀ8W‘ߟ¿Ÿ>ýáü={ùîÝl.Ÿ¾zýÝyýéýù«ó÷ço^âO!”SÓ—ûêݾRý«kTzþ›·/ÿù÷ó73!ùô«ê¿¯ß¾éµu…÷ÌK=d“6Š­vfñ¶{‚Q,aÚþµ‚ñ–ƒ¡;ç|zµ^¾ÀOÂÁZ1Íeõ=i‡tQÌ;;8Ö@hǤ3±
+‹{Raú+~[>eWŸ>5~^Þ.?/nfxbq¿X]-Hï ó$ ë ž; Ãd. ãÆÕ ÿi¹ºº}¼Fö}±Ç¸À„ƒqÊ2‰¾Œžà;á+!ŒdVQ[œëu0ŒýòÉžÌ=|ÌႱI={±¾¹¹]_^'Ô pœ@Jͤöyê]©Imq´Ué²¹¼ÿ¸ØìÔR1¡|£¯9]_ ²Œ¾h‹Õ軼Ûy·Ž6Îœ uPì´GØÓtÈ«ÇÕÕf¹^=TÚn‡Ë‹WÚ´SeÎ;„“`Š7fÿ(¥‰¾3ù07ÆRfzóÕÅëο{ýõù¿ÞÍÄôíû‹Ù\k3ýu&Ít½¼n¾F¹ÿظæ}Õ
+I—!eÐJ ü±V›Ú…?Ï$onfŠ'}£´Aú÷%´Ðñ廾y\m¾„*ÞE½‰àÔ­ØÄWCph¼ŽTú©Œ„ÐWÔö¹Ø¶‡™0ÓFùÜê¾µÚ”&UÀZm=B[u}Þ7 ‰Õ˶e «4Æ®ÜgUÏÃQPˆò0<Ti42âv±ú²Î^Z`Ü ÄGÙv …gH.ÇØz·|¸Jd=åJ²UH~ÎgØ'´ÀCC¨Ü®ÉÐ×—›Ë/ë²HQ"lB>°Á âP
+ÕÜ3«C/˜PSE\kçJrÔ‹D…b¦üi¼áäÞÀS£xàœY¨ãTÈâ ¤z_·´°åj¹é±Ôb à ©JhT]A[mjïD ढ쭄œ•k)±% #ù if”/C$j/i 4€<ßXˆÿØã)ÐpRÈ b4hho™ò%: ž@6ˆ;¬® ºk®o2„x5ƺ=h!ÎDp^ç”v)1e®[2ÞŒ‡ 0…P%4pÐ ¨XƒA¸4Je1_vÀ¼_‰¾õ)¢qõì+[¨¡ž}µ…ŽÇ‹pÌବÒkfiê–o*«áè(RJ#Žu ”rˆcŒ¢a¼°–W"˜†„´£‚‰HE±„P¤¤ úÁ” .Q…u^(=/À¬cðê š ¦)ZÛ,¼@Ìëº%òêÓï2%×8Äœ-!×rÄœån.«‚t»H7Ži”.!Ùc¦t,ùaù?ªè½êÁ‰bÂKt„Rw:b3«48ˆUpf°¾„VU³°H‹-W)3¼‚cY@á*µ—«œg\0V#¦\×á}»À+¦,UZ&Q%‚ÙH9f'˜çÍÚ¤’'bnz¦©øØ0È–ƒœö‚È ƒ>·uK´
+>¶HJÌE5êJ¾sQaD¬Áð:FtÉTèCßôTz–Ìñ·4ä·Ž¿?Ë2æõ4ýÍ7IÖƒsG‡rƒ‰K œBËd :A}ÈP@` bT0iò7%„"™`zÁ”â, hÀ´>‹³¸ÃYxjg !†ü*“³$ M*ÕÛùï gq­KÈ5¡.5m¹CœåhuD”ì)hE,ùjý‰ªâo=ÎBo r–BG”èš5IÓqG3‡)KV9”°¦Ú2︦¡,ÁP–Сe >HY
+D‘o­ö‚qåº>O–öy@+ÛˆhµH‚–ýœ Eg1‚/ZÕ~¬?´²5ØV[ƒ1 •/¹­®é •/s Zm¡Ÿ´²MÚÖ‘!´­| ¶ •¡q •­Â´Ó´ò…nA«L[ÐêïQ{ñáé tbP4GÚ¶G}šÃwë«Ç»ÅjsYý¯mƒOòysܧI>«áLÒ™äk
+êê¯öáµþ@ƒoŒ†‚`>™À#ÝÀLªº%:çv*Eˆ?fskꚘ¤Nç÷|mhw:kÓÔD´Òª;~½{ÝhÐ'é‰{£‡®·*Bé÷;òoÐ;-wÝÛÏYˆþT¾cx‰ä Ymø¦í¼<$Õ 3»#DûÁ†3S¢5²ŒtÉ.ì`M« ÷Ø;§­n:'-Ö$ìNÔ~¥BâÖŽV³}F§ ä,îê–h³/: ÔNœi€Õˆ.çé2IvL;}
+ôµ¦×¹º}½§Ï52šS¦{düù5 CSd8‘ÇH%TÝÑv¢DQ)XØÓtë_—÷¶rûŠ²?
+ÜÕ›ÔÞuÖ
+ ¥ýˆ8Z;¥W`étþÚ)µ$¹þc®0³Y;Ì,²vz’n©µÓHµ¬µÓ|w5k§=oí_;- ³Y;ýÌ‘x`í4ßÎfí´`$n×NóCq»vz\,Z;Í÷ÙvítD@n×N mÖN»ùû¯ú“¹˜.øÈ;W³åb©þ¹¹XG\<b“³.zC”™‰Å˜uI`£ƒÅ®ˆXM³Ë=ÀÅaV@2¸X+K¦wIÈ׋ÙîX#‘q cÚ‘.á Š.麞Hæ÷tÔî0kFß;I¿8gWà¨bý†Ø˜2Ð86v$yü±nôA6¦w9àÓüN$ÊÜ&;±ÇN˜Ãplª§, }¡l8FhV/Üý!Ḁ™ Gfã“tKÁq¤Z绫㞷öÃq™ æH<
+ÇÒXÚ³ÍgcjÈ*q·.FÜÁ1]ø´]Âh{7#ݺd)r9#µ¥I_ÎøKá«ë/ˆ6(æÂ.ý9Õ¤
+Æ=_ò¹]>lÍ`ªO§{UC…ÖÏÖ›ëå:“0ÙÐê€Ûè‚>/ŸS»Ûåϧ§L˜²Ï–1WèÕë2Úí½Töï½W˜JfÐ@QŸ™CJTìJ«Èß÷÷ë=×h©ŠH¥…iÌ[ÚR¯Ö׋‡æ.ãÝëÅ©kÁ ùø˜KÁkÚ3mù(tÂjØíAÁuWôÿVFÚ9
+endstream
+endobj
+10751 0 obj <<
+/Type /Page
+/Contents 10752 0 R
+/Resources 10750 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10742 0 R 10743 0 R 10744 0 R 10745 0 R ]
+>> endobj
+10742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.629 639.968 282.188 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8cpp_ad734908e68be7b06feb51adf5abd197f) >>
+>> endobj
+10743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.11 612.674 259.742 623.145]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8cpp_aec94570d6f7f2a20399b723d888c7707) >>
+>> endobj
+10744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.771 585.381 299.697 595.851]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8cpp_acfd75d4ab7d8a7a6b0cd82489ad732bf) >>
+>> endobj
+10745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.099 558.039 301.885 568.558]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8cpp_a57f85a347e239ffa85ebbb86ef6e8287) >>
+>> endobj
+10753 0 obj <<
+/D [10751 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3418 0 obj <<
+/D [10751 0 R /XYZ 70.866 771.024 null]
+>> endobj
+10754 0 obj <<
+/D [10751 0 R /XYZ 70.866 655.875 null]
+>> endobj
+3422 0 obj <<
+/D [10751 0 R /XYZ 70.866 526.271 null]
+>> endobj
+10755 0 obj <<
+/D [10751 0 R /XYZ 70.866 504.643 null]
+>> endobj
+3426 0 obj <<
+/D [10751 0 R /XYZ 70.866 469.694 null]
+>> endobj
+10756 0 obj <<
+/D [10751 0 R /XYZ 70.866 456.563 null]
+>> endobj
+3430 0 obj <<
+/D [10751 0 R /XYZ 70.866 402.427 null]
+>> endobj
+10757 0 obj <<
+/D [10751 0 R /XYZ 70.866 389.296 null]
+>> endobj
+3434 0 obj <<
+/D [10751 0 R /XYZ 70.866 335.16 null]
+>> endobj
+10758 0 obj <<
+/D [10751 0 R /XYZ 70.866 322.029 null]
+>> endobj
+3438 0 obj <<
+/D [10751 0 R /XYZ 70.866 267.892 null]
+>> endobj
+8796 0 obj <<
+/D [10751 0 R /XYZ 70.866 254.762 null]
+>> endobj
+3442 0 obj <<
+/D [10751 0 R /XYZ 70.866 232.732 null]
+>> endobj
+10750 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10778 0 obj <<
+/Length 1999
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[o7}÷¯˜Å…¬Þ/)öÁqäÔEge¥‹"éƒ"œlÉ«Këüû=œ‹%F”,[t›íöÁÖ@â|çðãw9ä Í.3š½:zÑ?zvjEf‰ÓZdýqf(±ZgÆq¢YÖeZ'?¿ëw{í7¶eH»£9ož½îVß¼<?yÿ¦û¶ßfœ¶ŽËÿý³ó·íã†Ü ë[NÎÏžá¯ýKÿÇ£nÿè?G hÆ2á a¬µÔeÃ룿Ðl„Ì(Îf¿•C¯3°r¸¸Ê.Žþa/œƒ…þ¨+Úú©Û#?TŒWÜ{ÝÓn¯ûö¤»Iªq„µÄr¹‹“T‚()îhÑuç*‘1JŒrzÝ»šÚð{3ÎÚpÚt^’hî~v*ÕÚ̘&Æš¬Ãð•uÕ9WÁ=Ù‡ŽRºõ÷Qþ‘R>Éëýtf—õ¼zå0?ùwÅM~ULò‹Å ÍZ³vGÒÖ¢{Û´•—‹brÙ[NN—“ᢘNæ_µ>REñÇÂï)r"…JÃp6æóù¿Û`6(§žÚtvñy ¾‹Ñ´ÍTë·ÉAìÅr<.ý4;zù8Æ?ùu]Ž?6½ü*ÌóMF¬¤t/™„Owr‰°z•/à‚³É(÷Ünc.*šF_çK§ {n‰¡¼bç+
+Cy¡”®’§®E¿ÂGlýÍt¸¼Î'‹AùU±Ê+¦Ôj†+ϲjý§_ërmKC¨k J½}q* Õ®Ž ÎHÛŒkfî€Ö¤xM秶Fä_-óçûV5‚‰Lg„m梈õÍ58“kC,á¨?5ví8rmW„£w ¾©ëÿùY¯{ñþue.ŸåóêâŸÕ~önjR¡Œ³*ƾ`ÊJÅN
+fЉb\¡yów þ¶¢°YÀ™D`A”“Di¾»«PÇö2bZaqYiKøe,Ëû““îÅÅ*vƒÅSuã-sïò¬­yäÞÐmŽm嵺¹¼>{q~zúúüøåYM”Kä Ø®NÔn¯wÞ‹–Æmå£5ŒÐtŠÀIIXBhpÁC–Ÿª, A9Š§iP9J+G= P£QÕ'Ÿ6iP¹!B¹u¶Ùªþ±m1:L0"|AZeáu[ Š‚ý£Œ%Ðy‡­ƒ2B[ô¶$¯Yû6q»É»©FÛJB®ºÝÅ®#1F…&¿->FÙ6³abO"©ß©‘׬^î[‹;Š Ü´HÃ#ÆaÌ!kE±Ù‹êÓ+¾êJêês:®>ýWõoÃi OJ‰Dt
+4c&ÓÆœ
+Â|lÂ3õÔæ9$(ÄÀ¯m®Ðp½f'ŸIÝ™)û.ˆSõ½Ê)UO>棊wÙv¿T×çhBTL£—ù*]¥UÜ,¦³çÏçÃÁbˆÍJ„EÚsðc‡LQ¡››Êoy8½ñŒ¿“´ñùªR@[J¨T!ôh°4ʘDTIM„ábÉEï“C+¡¹M•*† ‡gF¸Pž=J©?F….Ú%‰Œ‚ îQDÕ˜$‚HJ^-’ô{o‹7Û†oZí¯‡¤@Љü#ü äè¡$,k=°Ü©‡R 6z(@UÙ+ɼl‚IÑîé&òC4ãroM$Z¦I4‘·ÅüKÝi"¶§(’û‹"¥'Š ” ÔCQä-Ñfÿ-‰"Äï‹å½D‘·D›HÞG%€®EQ
+1o>—Ûy1\Å‘8bS8…š(BWO£-†±Ê©üA%O¬š¡'þ\uyý)ŸíÜ0ô`…œÞuJ»ö^žW/u°èKe·DÌ3¾ÚeÐÿÅ'ÐësÆt·Lu[Áåšñ>ñÜ J"™DÓ¦:‰(bå ™ùs=”ö[/.9¶(l=N5v4¶ž*ˆÇ¨DAbbƘÞ]ñ¦¨ Ú”¶¨®yßÔÛñj_É’ #Ƶâ!òÜçTVAÿ9žWcˆ•!îl9‰5<(•ÈÏÆ@fØuŒ‚1ß[Á~(S=*Zyydá’0åÍ™²éŠV†A–¹ÿOÕÊíãT«„öතØPYΞê
+endstream
+endobj
+10777 0 obj <<
+/Type /Page
+/Contents 10778 0 R
+/Resources 10776 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10746 0 R 10747 0 R 10748 0 R 10749 0 R 10759 0 R 10760 0 R 10761 0 R 10762 0 R 10763 0 R 10764 0 R 10765 0 R 10766 0 R 10767 0 R 10768 0 R 10769 0 R 10770 0 R 10771 0 R 10772 0 R 10773 0 R 10774 0 R 10775 0 R ]
+>> endobj
+10746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 739.081 274.273 749.676]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h_aed80c7bd7d452e2bad2bc39b87e1e108) >>
+>> endobj
+10747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 726.771 231.549 737.241]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h_ad3e368b0f4964d85ddbcfbbac0afc2c2) >>
+>> endobj
+10748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 714.336 182.226 724.748]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h_a1568be3319b750f74ecc20f0bb39b724) >>
+>> endobj
+10749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 701.902 199.163 712.313]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h_acd2218ee40b2cc7a6136b27ce8cd6c47) >>
+>> endobj
+10759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 689.341 192.698 699.937]
+/Subtype /Link
+/A << /S /GoTo /D (coi__server_8h_a76c07dc1faa2e927453ee3c6f48f5f91) >>
+>> endobj
+10760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 591.623 215.84 600.589]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 584.629 187.349 591.803]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.541 584.629 240.908 591.803]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4cdad9f7ec709b5f705e569818d30) >>
+>> endobj
+10763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.976 575.683 132.953 584.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+10764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 443.494 215.84 452.461]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 436.5 187.349 443.674]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.541 436.5 257.646 443.674]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa957650915ce4ad53d5d1fe2ff26bf05) >>
+>> endobj
+10767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.976 427.554 132.953 436.465]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+10768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 287.395 215.84 296.362]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 280.074 187.349 287.785]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.541 280.074 261.83 287.785]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1113b21353c527f48f0498ba8b23cde4) >>
+>> endobj
+10771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.976 271.455 132.953 280.366]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+10772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 139.267 215.84 148.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 132.273 187.349 139.315]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.976 123.327 199.065 132.237]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1fb8508aaff077c3380849112b1fe9f2) >>
+>> endobj
+10775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.441 123.327 243.419 132.237]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+10779 0 obj <<
+/D [10777 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10780 0 obj <<
+/D [10777 0 R /XYZ 70.866 753.919 null]
+>> endobj
+3446 0 obj <<
+/D [10777 0 R /XYZ 70.866 675.584 null]
+>> endobj
+10781 0 obj <<
+/D [10777 0 R /XYZ 70.866 656.398 null]
+>> endobj
+3450 0 obj <<
+/D [10777 0 R /XYZ 70.866 635.72 null]
+>> endobj
+10782 0 obj <<
+/D [10777 0 R /XYZ 70.866 521.304 null]
+>> endobj
+3454 0 obj <<
+/D [10777 0 R /XYZ 70.866 487.592 null]
+>> endobj
+10783 0 obj <<
+/D [10777 0 R /XYZ 70.866 373.175 null]
+>> endobj
+3458 0 obj <<
+/D [10777 0 R /XYZ 70.866 339.405 null]
+>> endobj
+10784 0 obj <<
+/D [10777 0 R /XYZ 70.866 217 null]
+>> endobj
+3462 0 obj <<
+/D [10777 0 R /XYZ 70.866 183.306 null]
+>> endobj
+10785 0 obj <<
+/D [10777 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10776 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F13 9222 0 R /F14 6622 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10822 0 obj <<
+/Length 3405
+/Filter /FlateDecode
+>>
+stream
+xÚå\]sÛÆ}ׯ`“j&Üì÷GÛtF‘¥ÄÛR$9N’†¤lN%Q¡¤8þ÷= X
+ɇìøüüp$žbæñÝÅÉéÉÅÉ›cüWp¡ÂðøÛ£ó+„%û¶ÖúúgÇo_Ÿ¼‰eÿ^½<{³9§"øÞ3/uÛ”´QÌhµš/'ÔÔ%Ô
+Æ‹Ù}>ýĹ¼›EÿΗ‡pi1™=<üóPóáxþxºX^¾zœ.…~¸û‰ŽÉ
+!‡x+Ès˜‰Àœ3qÌ-~yó4ûk6¯Â¡âõËS¡–§<yçìÇ×ô\¢K—x&á7Üåp^ºB&‘ù‘Ã'ñ²ã³—'—o_]!œ—³‡øæ«ø‚¯Ï—qžå9ÆùÑÄþVã‡@6dP­žŒŠ‹J¾Ì¯£Q{åÈ_ÖžÔ”´UL©€”f¼o/idZÓ©G¦•ÈÆR>D—.ߟ\^)¬äD9,ƒPÌó:O#9¶|—{x‘%²=K¥Ô×ü6 [à XŽÚ«—_Ÿž¾:;zÑà©è'>4–y|N..Î.’9àìöëco'5nÃ(F}x‰1¤’©—÷±„7 K‰_jÑ‹e)ãJ¥–?`ÕÔ˜Õ– ßOZ¤FAùJZòUZÍÌMi¤«rл×åŠ)£ÖfuÇd @¬2ÙXcE¸›Î~ßt¼€§&Ð1¶ÛÑo¤qI göûü‘ÊU4 ›.ñ»å–K£¾Ûœ“q
+T¤×_Ì®qùl9»›Ì¦Ñé_ˆ‚?Æ÷Í
+ìCoè|1ˆ2â“ú2Š
+¬)Dž]CªÅxZ³ìiÞhÇ™Á𖽄Ìåq$S. ÇOU샊^+GãƒXÉω¬Ál+ðÍÇŒeÅîÝC®Ž'ïÇË•T/¡<|Ûïa$Ók#O¨3«k
+¥y­¤PT—€çîT¨tctÀÙíýãGÄo8“¯Ñšƒ¾AôáÉ7ÂÁ²?Ù†Îx™óms½ÃÓR¿|1{˜´1¾¡]Õ°vìïC®†TàÐØ>WC¶Ø[{˜ÈVIBBf¯ú)”_¬!{Ó˜3áM¶a¬•`ÜÛN¤‰Ö””©‚|ðù?P¨ÆóÇ™”ù»˜OëÝe=hiò ¶ò^ìÙí­*âaþ.ÓÝi´gwqòcÍ"ášiÛC¼5±ëJ¼çÓ½&m43;iƒ²èÐöè¿kfæ=ãBö15,Çe:µñtº¬aJÍU¶ÕUÙ". \8©iYš.ë„võU ]OÞE»*|z]µ¦+à銮0`]AL©çÒ™ˆ µtE#)§¨ˆ/È4€ ]%Î4Ó•r =ÕƒGZs&µJ=Ú‘,È× ‹¶½÷kQwòKüo+›­%ŸZIJ &÷kiŸAR
+O ¾t݆N÷Œà.# ÷§ä¨½íEŽªNi¡€¤ýTЩ^¹ï:i$mò:»°€Î$€ ³»Gt&ýÿ@'ä÷ó¡³ØsÆ›Vè¤3ÊÑm;Õ:IÖÑH«ÛJ›X¦×X¦·`í«wÆÎ?Ö^Iß—¢ÝªïIM×CÀµäÙ ƒ$à¹ÀßuÖ
+%U¥°¾]Tô›ó%©¼¾GVnKë[x&ÇžT(q-“Î1¬só jåêêdL2Z‹Us\ßÐÄõ™ HleÇ}%±¡ñ 3PŒÎžoŸ[?ûѸ]ÇAº‡ihE‡»U:ßH~!©P·µå`˜1+/sj.¡J
+è–ÔóâŸ*"'²‡î’øoSDf]ÛýoÑC>Üî“КX]¦“ØA…5‰lÕC¡î€s|A$´aš€ïnÐßMIæ¥Ü®ËœÞ]qfÂötj¶&T
+ž\1ÉE‡„{GZ=TܨF€]´Rmtü6åVí¦ˆ´±[Ñ'ô!ê¢úTúඑª2‚9#ößhÚvaUz.¤Óù®‚T1”v;§v7˜SjÙà£Ò³cF¸~hwôÇiL´çí¦Ì«ÉÃå«]º¿»cè9×}þêN$xS¾S
+JS³”û!¸­šþÛŒ~É
+endstream
+endobj
+10821 0 obj <<
+/Type /Page
+/Contents 10822 0 R
+/Resources 10820 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10792 0 R 10793 0 R 10794 0 R 10795 0 R 10796 0 R 10797 0 R 10798 0 R 10799 0 R 10825 0 R 10800 0 R 10801 0 R 10802 0 R 10803 0 R 10804 0 R 10805 0 R 10826 0 R 10806 0 R 10807 0 R 10808 0 R 10809 0 R 10810 0 R 10811 0 R 10812 0 R 10813 0 R 10814 0 R 10815 0 R 10816 0 R 10817 0 R 10827 0 R 10818 0 R 10819 0 R ]
+>> endobj
+10792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 702.649 215.84 711.615]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 695.327 187.349 703.038]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+10794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.541 695.327 282.751 703.038]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a855a898bd521e12e64c7e24ae24b27af) >>
+>> endobj
+10795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.976 686.709 132.953 695.619]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+10796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 479.328 139.117 489.924]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.802 479.328 267.815 489.924]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a0e050df8679f9e136027c7b5d5a8d226) >>
+>> endobj
+10798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.486 479.328 336.493 489.924]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+10799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [517.2 479.328 525.406 489.924]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+10825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 467.498 152.826 477.968]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+10800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 453.737 139.117 464.207]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.617 453.737 272.615 464.207]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a571a5cc9ca28737e8f1138ac2051fe5b) >>
+>> endobj
+10802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.286 439.927 188.907 450.446]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_ac9ef6bb5f05d9e5b1be1385a67175345) >>
+>> endobj
+10803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.942 439.927 237.282 450.446]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.083 439.927 478.824 450.446]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.104 439.927 525.406 450.446]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 427.895 122.179 438.433]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.763 414.21 202.664 424.73]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_acb141ef778b0349746eb64e1c76a8468) >>
+>> endobj
+10807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.176 414.21 251.516 424.73]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.093 414.21 497.835 424.73]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 402.179 135.503 412.716]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.763 388.494 202.664 399.014]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a89bdfb3085bb704db3d3daa5ae597ea4) >>
+>> endobj
+10811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.176 388.494 251.516 399.014]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.093 388.494 497.835 399.014]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 376.463 135.503 387]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.697 362.778 196.613 373.297]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a80381ff547e2239b8f267504c4b18bec) >>
+>> endobj
+10815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.059 362.778 244.399 373.297]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.389 362.778 480.13 373.297]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.104 362.778 525.406 373.297]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 350.746 122.179 361.284]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 337.111 211.833 347.581]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_adf1a83efbf6473acc95a8788b885fe90) >>
+>> endobj
+10819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 287.559 200.902 296.249]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a351d528667a2b5bd813a1e70a78f6162) >>
+>> endobj
+10823 0 obj <<
+/D [10821 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3466 0 obj <<
+/D [10821 0 R /XYZ 70.866 751.759 null]
+>> endobj
+8719 0 obj <<
+/D [10821 0 R /XYZ 70.866 627.722 null]
+>> endobj
+3470 0 obj <<
+/D [10821 0 R /XYZ 70.866 609.404 null]
+>> endobj
+10824 0 obj <<
+/D [10821 0 R /XYZ 70.866 494.572 null]
+>> endobj
+10828 0 obj <<
+/D [10821 0 R /XYZ 70.866 300.955 null]
+>> endobj
+3474 0 obj <<
+/D [10821 0 R /XYZ 70.866 271.409 null]
+>> endobj
+10829 0 obj <<
+/D [10821 0 R /XYZ 70.866 249.682 null]
+>> endobj
+3478 0 obj <<
+/D [10821 0 R /XYZ 70.866 228.127 null]
+>> endobj
+10830 0 obj <<
+/D [10821 0 R /XYZ 70.866 215.785 null]
+>> endobj
+3482 0 obj <<
+/D [10821 0 R /XYZ 70.866 154.935 null]
+>> endobj
+10831 0 obj <<
+/D [10821 0 R /XYZ 70.866 142.593 null]
+>> endobj
+3486 0 obj <<
+/D [10821 0 R /XYZ 70.866 93.641 null]
+>> endobj
+10832 0 obj <<
+/D [10821 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10820 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F13 9222 0 R /F14 6622 0 R /F100 8905 0 R /F45 6502 0 R /F11 6621 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10873 0 obj <<
+/Length 3464
+/Filter /FlateDecode
+>>
+stream
+xÚí\ÉrG½ó+ã !”k_sàH¤-‡$Ê4í˜ Ù
+çÛsȨ à “‚æ› °ú•s5{‘?É“šÉP>6]-Š™NO?þ4Yç¯=
+x3£õóŒkW¾C#'
+¿œXzúÕüaš0
+[‘ĵ,lá:!R".)7„H© R‹ü´zØ°éýý‰2Ç,± cadfŠÐ ’«’"dÅÕ5Ù×j2KXŽÐÌ;²¦/°V¤Ca×m’P<F@²á̘Kþ¼žÜç³/Ø2U3s®B²Z¸BƒÙ!cÑFÆ`ü^v'Á ÷%c\u³m}+3¼ó,åÇ|ÌJ&½•ßÅÇࡇ̠™‘©×z€ièL¯:žÆ>\Ȩ½)™7ö3è’>&ÌÂÖø[7% Ot«¹4P‡0²àu7½~bmË)<*¢§už9úä1œ(®h ð‡v2„ È V;RÎíG†ì“±ÁŒ¡•‘9/YÉVF†jÉ"¨ö_L*—”Ñj62¯ûj1]*aÞuWk!dAgôÉZ •ês3Ê2ÞìÇÇl'.žÁÇd/>f¡këì
+•[„ò! èÌñšdЇÍãC‚’ ¨ñÁïÑ6­¶†0T§ó^%:}«6‡È/y@“S¡>—[°@«± fa!·¿º¥ R5u§¬ÞT{ÏÏI‚×JwQ* '#›>œS™gQ*rðBãx‚ïE©ˆ)ÑHtC ¥"îeä "©j—±ÈîWAÀR+›Bê7ö@é€÷MýÒä#).»S?õú‹¥ÔŸi¬*¶Hý¢´›,÷òm¬üþeµ;Ä¿gsJq,¦óD¶‡sH/Ïšeœ­Q1R×'še‘Þrµö?"¶iKc` Úq†9G*jŠl~ȦÁÞ$·EdóûG6¡{U‹F‘bÔ
+/xñó»«Ý®Hvæ@˜‚Ù, •Æø¶ ¾ÍÆ% åP…ÊLY¶F>•»©û^±,á]6–“-áVX8f™Nf²"™™}}*N©-J#k¥5%ýš ÀòÂäßÅÞ÷Õ§ù–JÍ×™=N¦ÅŸ>Î7Ÿ³!çË؉Ç7ó%´¯&›Òp TùÔl^k¸QÝ#L-îæeÔø˜€¯Y<²LøX \0¼ uÜwüf±œÞ>’‹×þ²º¾¾M‡{ïGºBå‡épôàk–[Ã_!
+UPÊè<Ÿâ]ö{Ýö&+çS@ÞΧ€ -˜mv.UÉx¶;uOŸòÙFÝsÜÛ§´Ù=ŽþÖN3MŒ´:áv¿R0D/ü~öbË žƒìÞâ9&GD+y/Ç1 m‚¢ûY¢¥…S@j'=©¸P¼¸:ÑyÆ•¢´úsƒ}Љ'ŠìÙµÁ‚j@F–ÕIBúþŸG™çúëö\‚v±þòë´cYÇÒ|“Ì~² 7 ²Û®úãDšãɺH{Í&¨¿œ¸ê-¾¦Ä ýépÐòŽ¡ $
+U‘ò1Ù^ïk$D%ÔsðÉO±9ï…´]×£ßé¤_öÂZªYþ|鉮˥©J†6}£ËÒms“¾‰¥W¶*ê)Ïî)¯v /A¥ANå{vÂûGPP.Å
+endstream
+endobj
+10872 0 obj <<
+/Type /Page
+/Contents 10873 0 R
+/Resources 10871 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10724 0 R
+/Annots [ 10840 0 R 10841 0 R 10842 0 R 10843 0 R 10844 0 R 10845 0 R 10846 0 R 10847 0 R 10848 0 R 10849 0 R 10850 0 R 10851 0 R 10852 0 R 10853 0 R 10854 0 R 10855 0 R 10856 0 R 10877 0 R 10857 0 R 10858 0 R 10859 0 R 10860 0 R 10861 0 R 10862 0 R 10878 0 R 10863 0 R 10864 0 R 10865 0 R 10866 0 R 10879 0 R ]
+>> endobj
+10840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 317.252 254.691 327.848]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_ad41c5f5d55e98b63f30bfeb0f19ce6e5) >>
+>> endobj
+10841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.191 317.252 335.145 327.848]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 289.111 259.676 299.707]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_a928aaccec7c9cf49f07747955de53fbb) >>
+>> endobj
+10843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.176 289.111 340.13 299.707]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 261.095 216.594 271.565]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_a6ce23788abda70faa38a7de5168ab2b6) >>
+>> endobj
+10845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.094 261.095 297.048 271.565]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 248.02 221.579 258.491]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_a3cd6b36ce494f135e97b7722c7f1aea9) >>
+>> endobj
+10847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.079 248.02 302.033 258.491]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 219.879 221.579 230.349]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_abb2180b966ccefc3b105524384f7deba) >>
+>> endobj
+10849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.079 219.879 302.033 230.349]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 191.737 231.774 202.207]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_a583ddedd0b304b8a1466c830b7e9b299) >>
+>> endobj
+10851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.274 191.737 312.228 202.207]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.221 191.737 383.966 202.207]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8cpp_a351d528667a2b5bd813a1e70a78f6162) >>
+>> endobj
+10853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 142.964 139.117 153.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.802 142.964 267.815 153.56]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_a0e050df8679f9e136027c7b5d5a8d226) >>
+>> endobj
+10855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.486 142.964 336.493 153.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+10856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [517.2 142.964 525.406 153.56]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+10877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 131.134 152.826 141.604]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+10857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 118.06 139.117 128.53]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.617 118.06 272.615 128.53]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_ae82ec3a444236349d7772811583b68e4) >>
+>> endobj
+10859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.044 104.936 201.944 115.455]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_ac85f19102b9a0bba4fa9fd3c486c7d78) >>
+>> endobj
+10860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.736 104.936 250.076 115.455]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.628 104.936 479.37 115.455]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.104 104.936 525.406 115.455]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 92.905 122.179 103.442]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.044 79.906 201.944 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_ae4fec7080850a48dda13486a544d0702) >>
+>> endobj
+10864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.736 79.906 250.076 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.628 79.906 479.37 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.104 79.906 525.406 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 67.875 122.179 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10874 0 obj <<
+/D [10872 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3490 0 obj <<
+/D [10872 0 R /XYZ 70.866 728.171 null]
+>> endobj
+10838 0 obj <<
+/D [10872 0 R /XYZ 70.866 716.173 null]
+>> endobj
+3494 0 obj <<
+/D [10872 0 R /XYZ 70.866 657.606 null]
+>> endobj
+10835 0 obj <<
+/D [10872 0 R /XYZ 70.866 633.541 null]
+>> endobj
+3498 0 obj <<
+/D [10872 0 R /XYZ 70.866 586.978 null]
+>> endobj
+10837 0 obj <<
+/D [10872 0 R /XYZ 70.866 574.98 null]
+>> endobj
+3502 0 obj <<
+/D [10872 0 R /XYZ 70.866 540.323 null]
+>> endobj
+3506 0 obj <<
+/D [10872 0 R /XYZ 70.866 512.794 null]
+>> endobj
+10839 0 obj <<
+/D [10872 0 R /XYZ 70.866 493.455 null]
+>> endobj
+3510 0 obj <<
+/D [10872 0 R /XYZ 70.866 473.438 null]
+>> endobj
+8720 0 obj <<
+/D [10872 0 R /XYZ 70.866 448.502 null]
+>> endobj
+3514 0 obj <<
+/D [10872 0 R /XYZ 70.866 431.799 null]
+>> endobj
+10875 0 obj <<
+/D [10872 0 R /XYZ 70.866 332.153 null]
+>> endobj
+10876 0 obj <<
+/D [10872 0 R /XYZ 70.866 157.864 null]
+>> endobj
+10871 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10898 0 obj <<
+/Length 4005
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]IsǾëW * *l÷¾|P´ØJÉ¢,S©TÙ>@$$±L Fñ¿Ï÷zÔ4¦Ët;ñ!&D6ú{ýö÷z Ÿ|šðÉwOþvñä›—^M< ÖªÉÅljãÌ[;qA2+&W“Ÿ§Žy6;³RNŸÿðöÕëïf¿^üýÉ‹‹'ÿz"0 Ÿˆ‰Pž9ëâ÷<“ËÛ'?ÿÊ'Wøãß'œ©à'_âÐÛ &øp3ùéÉ„L—PðêeQúN Dƒ&]ó÷ç?]Ì„äSöýìL:?}‰u7ŸÞ½xùâÝ‹7ÏðO!´SÓgß?}{¦Ä¿º–U_Ç??öþ‡ošéžÆÿ^¼:Ó_Ñ–õÞ3/õ¾i£˜ÑêqM¼'ïŠU›Î½ÃÕÄYÁøv¿Hi"Û¯M~>3ÆN¯—›ö×DÕúSKÞ»8@1=ùòõùÓç™Á¤3FÚÓD’+°À`MJo¶C2Qô 7|æ}_\Í4Ÿþuv¦Ÿ^®–÷›Yüõåçùš†óRè éVu30ƒõñ–œ«fTB¼fÁ‹í˜åüv1&bØy 9½¾ï³Oˤ®À>eðYí°oq{·ù}&8ïѲÄo§·}‚´ «VåiIF½£ÿžI3¯ïö kHýÇ ò™¯Ÿ/î/)îÈÇ&½<E<§ÓpF£&gÊ&À‚1ÍlDŸÜG tÌŒ#PBhR·B“Z MxÍd€;²*nJ¬ÐÛH
+Í$¸múB¬š_oZ–E¢ZË!²"½«ë«ŒõX˼sÝÅ0€¾¢¶ãjâ 0ûQ ÷ן–ó›]N/–›5>…éï“ 0Yî*0C™.eöõÕ·ü´5Ão
+Òš7óËbÒoó‡Žs„ÊòÅé ˜s2]Üüêjýí›­=ÃB©=½ýž]¤ŽûÌ3!1Nbœ,ˆd›÷D2Ž\ LœÔqe¡Lñf&F‚Ÿ=}ý:ê LNÔ
+‡Ö»n†$—×qQ-½³–s\Þ,öëؖFk°ÛÚBO-B3GÞ8H¢®d€«á.…$9°Ï;:Öp¶¯XR1®E_±d«X?Ì/×ä™V[ÍÚ•ÂóÕåÃ-¼óü«¶Õ׶VÙþrÕLÐêÀ°ékϬ+,¼ß‰……I Á” ™ óþ€épFÕ
+ÂÔPOÌä„=BA+@¶*Ú…ì()˜¨$3J¶‰E;âÝ"æ<‹õbyI©Œ rúBÞïÍçßnï2:
+yJøH£¿(I$Rš‰\KÑåz¬*—7ÀªvƒJÎQÈtþ±UªL%¥eÆÔ
+|;¿ÿ-‘#‘C"õ÷A$›ùúÓb³Í¸QÛYÇórVœ¾åËÉ€bÚø„Œ«Åýf½šÅä7J¬
+F‘Õ w´°•ãuT[9ÙSí¼°UÐÑöË!a!–›‘ÂÖF2í+¨¹6”R¤j2ˆ%’´rÄØ·VG YƒQJT
+佋 ‘†²ŸrŸã»$“&¯WŽI£Ýñ|—àþW: íõ;о["Ñ5t[I¨2ÇØ5Ò<f)*Õ†)J…Æi˜æ”µê
+„h®ºô¦Q# ^ëŭ¥ Ž×0 n¡ ©
+1¨ÑÕpÚ|­¡u†[&wµ.ËwCÜR5dmh'NîȺíÁkT/ž&i~^55Êüáf“Ù²D*0‡% ”â:”ø[ùRxšù!¡#Âœ Œ+[ƒ+˜£àÕ¡#+átKp1¤³%w {-êLÁ,±d__r%û%7móëùM¾(£dµE™‡d>b½bŠš5ådx˸‡e.ƒoè-ET5æ‰WຢL°l甂wùþy½zøôùîa“«ËPˆª¦¨ãÉýH‰k‰™D¨@‡V!/–¸Öº%¸R[D<¢Ð55iª(¹†¿²;J¾y m3]Î!üåÕžÀS ÿx:ðûâN_+¬ðýHÞb—™‡¢œŸÎgpšI2¿í?,óîŸÎŸ¡ì¬€JçϨfé¢î-r\`BTöYÀô@W `Κ
+ i6&Í'Û¢ÕJÖ
+5¬¬¬PÃ
+=–û*ð¸Ç\ ™3îîk‰Ø'k›¦ÍM±clK`ç¢æªIES8VÞ©¯ ¢./ðb¬¼£N1!Q§KȾ°“mh!ÑôP?:Å$TIô´™A¡t×íÆÔ20ß( I£Àž´&mD2u¥µHèhz ”5 ©…¥dyùyqõp³Èï>JSWr:*G²\Z…õ× Ã,GÓ®s%s¨åj(·ô°'‘j÷°³‘Ðq/ªàBÉ)kÇq%§íñr:”\sÏ•uYCÛhÇŒûTÛò!Eyä¶È2+`K{¤œ5·qˤWsÚÁµ#å¬-œ™®aZ¦%”N=K¶v„iYUÃk˜•þ @u_2 öŠ°—ÛME‚$ŒJO6dE@[4Aå‹/ÚköÖ4rõû$ ¸fœ‚@1¤€;)SÌa­‡eµ
+dNì,¶¿±ìå@ GáB'€+BYÇp®]y_®;Ÿbæý›”3Õµ¡ÉŽµDmcL`åã•‘¢–°X'kˆšb³Ljš©ŠâŘtJÅRO06¥= ¬†Ž©xfËå:Å7ÉuB4§ z‡|}(Ém P:_åì±ÊN…©wU€QšÆ|dÛ ŒW±:*2]Ïê²lßÖ¥@Ûº4ÝW—æ"ªB‰tRÊPPI…1—á`lC­¤¨˜+†Ù«)pOâYÒüIHÏ×U Äjfü!C_$Ò¼Ó…P¼c¹N]S^…ë’ÅõÇ+4ùxÝåÈ1+P„ô6F®#د`®S—£*Nçô}Š:P<Áß*'k€Âßr+•:6QÔ *†¿åFí“zö<½t¾Î¥çé‡Ð ÝO5Y¶*9@/<$fR!CïâŠC'èJ!*P!i·Š‹”ŠÌ!z1xŠ^«x;9Eÿî¡=<ÿñayùõ(ýög#•æóÃýõòÓà%¹ø¯ÕºýúMk­Wóͼùt·Xß_ßoèx9]ŸeÍÍ,d·t9‹~ÄÊ(ÒKS:×.u&õt¾žß.6tçNLï“Ë]¹C–šÇë {Ÿ/@ž fnÙÞ™‚®‡›‰¢JÑì=ÑMt~G DŠDd-mYš³@k?s§Í‰‚\M0ϯ;5¡ ’ÍÑŠ»ÍVtͱûvÄöÀ^WÐ'î(«E‘Gâqc/!úâé»ï^\äºeX¡«j9)YúôÙï_½{Á2‰müQO9i
+zë£H;Ræý~X;%òhMôPÿÎwÞŠVÐq°yí¾™oïÅnoì¬R•m.À«G¥¼[Á Kéd:ûRÂt2²HJHé„öeRÂ߅ѱ_ë¶Þ?÷r‡€5
+"ܺ¸U[ð ¬Ñ›B6Ow kƸ¥æ5£‹ûªÕ‡åj÷rõ¦ýÍ‚Ðâ%¦Ë‡ÍböxŸ¼‰7ŸôFëéž+Ÿ’:•äRÆ°n§k¡â•Ïd ›æ|Íò¾½iõøž@NsOæc_sé†ýçdk.ÄêöïzÖ\ºMç›- ß¾·2übˆD"l›ÑÆ)¯•kûøÄÊ°þŽ[p^»Ðon?,Ö©okÉi7ÆX»½œ¸šï¿¦L9e9™è¾²Úo7eÊ‚ÄTêÊVjšzÖîh©BÎ ­‹üvfÓÆd÷Ñ×ì}`aèq öÏóuãféKY™žº¤¾HíQf¿tÈW™L3NŽ|Mí¼%´G¨ã°óRíb—HU–ŠõäEõåJ'ž½/“k¬U¡_×LsÓ%úuI§h¬E/äI£Iôë³Lú4n½y]ê@ç¼ú/Rê-Iô¹ëëo\ùÉ„öõS¥ËôƒK¦\(´ûFRÜÄÇÕ8輨ºØ9³Ï˜o"Ë-½§Éðäôeˆ)D™‰K:¨¸ÿ¥¼#D(Æ6ÛytѬó2Ù°
+°¥(•Q+Èvè›÷¯_
+ìtŠ{“>Ä£Kã$öuj3ž0GæXòg/MªžÉP£žÉ Æ7L‡²»7&iî}$Qœžlª
+endstream
+endobj
+10897 0 obj <<
+/Type /Page
+/Contents 10898 0 R
+/Resources 10896 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10867 0 R 10868 0 R 10869 0 R 10870 0 R 10900 0 R 10891 0 R 10892 0 R 10893 0 R 10894 0 R 10895 0 R ]
+>> endobj
+10867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.393 758.146 197.309 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_aca28d169d37633ab3efd88ce74b2d299) >>
+>> endobj
+10868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.45 758.146 245.79 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.841 758.146 478.582 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.104 758.146 525.406 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 746.115 122.179 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 721.334 211.833 731.804]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_adf1a83efbf6473acc95a8788b885fe90) >>
+>> endobj
+10892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.097 661.201 219.327 671.613]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__host_8h_source) >>
+>> endobj
+10893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 338.444 232.789 350.501]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 326.091 237.774 338.148]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 141.715 232.789 153.772]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10899 0 obj <<
+/D [10897 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3518 0 obj <<
+/D [10897 0 R /XYZ 70.866 707.089 null]
+>> endobj
+3522 0 obj <<
+/D [10897 0 R /XYZ 70.866 646.957 null]
+>> endobj
+10886 0 obj <<
+/D [10897 0 R /XYZ 70.866 627.646 null]
+>> endobj
+3526 0 obj <<
+/D [10897 0 R /XYZ 70.866 606.968 null]
+>> endobj
+10883 0 obj <<
+/D [10897 0 R /XYZ 70.866 595.031 null]
+>> endobj
+3530 0 obj <<
+/D [10897 0 R /XYZ 70.866 560.783 null]
+>> endobj
+10884 0 obj <<
+/D [10897 0 R /XYZ 70.866 465.034 null]
+>> endobj
+3534 0 obj <<
+/D [10897 0 R /XYZ 70.866 430.912 null]
+>> endobj
+10885 0 obj <<
+/D [10897 0 R /XYZ 70.866 268.43 null]
+>> endobj
+3538 0 obj <<
+/D [10897 0 R /XYZ 70.866 234.183 null]
+>> endobj
+10896 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F132 10901 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10909 0 obj <<
+/Length 4331
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]MsÛF½ûWð(VEÈ|ö µ¥Ä)ÇözåìV%9Ðm±"‘ŠHÅ忯ÂàÌÖî!±,‚ózº{¦_÷ôÀlòeÂ&?¼øûõ‹ï¯œœ¸Â#'ן'–Θ‰õ¢0|r}3ùõìåï¯/?LÏ…ug¶˜ž!ή^¿¹¬~óêÝË?_¾½žrÁÎ.Êÿ_¿~÷vzι²_põW^¾ûù=¾õaúûõO/.¯_üù‚C6áé]¡Y…ꘟÌï_üú;›Üàß&¬ÀÇ“¯å£÷ˆåñÃÝäŸ/þ_1^pÊÿúª¨˜/,Ó9¹Àã*@üñÝ?+u?V:zÖև˫Ë—o_^¶eک޹ Õ'’Ò²ÐJî¥bµ9ÛcÑŸÇÆr…j?Vc ^0ácû†ÀüðZwêˆ ÈkåÄQm+%ý5úlö¸mMpÍ ¥Ü‰ÐJ7¡µ-ŒÐ!ôû©fgëåj»x¬¬²]—BTè_j1>üðbòkùù/SË ë«Åf.ê'+ןϧOL%;û†Ÿ`ùö¬´€XãçÔ6*FP–§U™Br“fU¦
+Å`Uå ?KÕ®HO÷›
+€¦Ï
+ÎD‚ãBx:@ý:åð¥åvÓãK§Í8îLMì·O÷Ÿv~´þ\ýù›j'ý\ý¶òø»§Å†>êöÑ’¶]CpnÓ\DJL\&.üÊVÒb¿òÃmutÜVMìØÂ,àÀ–;yÇÙpô Ú6Ķˆã6¼0ýám€ yá4†º ­¥"7Ë/«Ù]OŽ[° ÜiÁZ¢ÐHµ%ëGß~|ó¦Ûb£%n[ C¨Ä}¼D
+÷õ§$Ýb³ Æq¿:îNã'Ör'ÂöÑãNÏcH6*h+ØéÂñ‰±¬µÞÅ_- 
+„²=é
+›&‘6ÎÏ6A
+«J-Ó˜”ö"I1Q ‹Ò^?‹J ±(% פ’(D
+)ÐjŸ‹.ëLêëír~»ãnËMÔjëùüéñ±oŽ–¹m3 aRIœ¤œ<ñð Ùè©–ª`VUš+³Ìnƒ†7XöÍ>¹mDÌÀx{¶ÝÌv¿bŸ]$[tô¤ÚŹ¤Š‚ù¹ÏQQÐœÁIĈŠK©(œ0<CE!¼¯¢²®(Š25ä´Tk ”Íè:¸X”n·š/àa`âge\øVýüÇýCdùiíDy¸>³ RsK~X¤X½ÛͳmlÕÒCØ“Óa«Î&ØÙçÚ±¾Å\ÃZgƲê
+qÎè”íßJìOÕ@0\…ù𸞷!=/´” á¨BȲå^VwÅz€3]GÕB‡‚ÄK6aYäP7‡£
+~ ï>÷BZT˜,–¦((M=\ïÚò´—' "4àBA61½ ZÖ´ý¥cÒ‚Qv¸Þ´…ÿr@{_xw
+“v‡“Þ•0ïâ©ÑÖthdjpécvNˆ9äp¦`œ°» îú’!ókt ÅK"„éðÐ<ãò@õ·ë§/·O±ãväWظs@[ä*ÌjuE8î3¢dÕ¥xÜêJ©½È‰˜Ê ö¹±†WTÄÉâê
+—9tõí•NõÙjXÝô¡dü}jâ÷¡¶gÛÀäÊêíâ*)¶Ð¬IïŽïŸVñH@ýëÖä@EÞP&0MÔÞŒÇú‚ó,ÐŽŽ@w”̵Rë  Hi‚Æ™·€i•9@aZ.Dõ±u<æð²ìœAafß_§ãäUeÀ–àòF¨ûnÝÕ”*%Z‘˜º£¹:UûÒSå=Ç
+—^VÛÚW‚ús,6E=øü`±­€ <+dÙÛ6ÔÞåcžçÀ5prÇOµ÷>ì$ ²;MAúÂN´ºÂI—¶|ëR¢ £³Žj íê ¸\E=¤k2¢§–z"¶ ¡D‡!(4)â½ÉrpªT+
+ÒQJtxRäÀ¤’–!æf~»¸yŠõf¡«À‚(qªÖ…‘m–ér ºÛ2–ßX‹Ô.‡‹ G-²>Þ½çxºãY€áê%y;Mé®N·™Ó‘puéõµKj°ò9\ŽNÔ˜;p¹xp‘,—øf:¨§îe3ÔÖŠ™ê(%˜®ž eNµµ¢ž•c…)¬0.ÕÁÍ%±ÂŒÌ±¥+¬°²p4Š(OOú˜^Œû~…WQ|‰#âTQµ¾µµSuWbë‘IÇeõ¹›$ ó¾êS£€ ÉáÊVˆ³Ûóéò>9æJ-ò–L¶}ôìDG@wônŸC"EÎÑ:]€r.&¶xf]ˆßä'•ÃÔ‚ûŠ 3µ@ª£u`ºªÄ©¦X²Vä05ÅhŇ˜šÚY<EódLjg¡f³“»Iå°Àrø˜DV`¹;Uëã¬% ¢ KçÕ ñtQÐZ49@©Ëš¡ÎNyª³Y€‘©–¤ä4µkÆ –eÕÑYŸm­º¨Ú÷ij:è.Mm‚ö¥©ñM•æ"\ÒJTraºµ»AÙÛ]à`95XJ·| ì>÷Nòª/]£Àr骃M³Jç$m°Ö©ˆÊ²h]P â ­ÏV7=êÇ°žÏ!n¹¨_b¹r:XIF• #8¢vdPØo%µÝ¥ƒb¿¥žâV§NIu¡t`ì·LË>«G¯K «
+¸|}_Ú ¼/M­—&Ç}ih÷"šc×¥ÓAëëÒMÐú¶4?v]›¶`>]j*sÞ2Œ¹-Í%Ì+Òå £iD G}Ç™wß–¦+Ú¦¾-]ûÊEÏÅèÈ F®hФß=,V?¿ß{èý"µÔ²0iwp¨ÕZ%^¤¦^ÐÁrá>Ÿ\ì/‘vÞ¢•eÏp‹6€r‹öÄiG/௺/Ïo+ª~W¿ÒhYßYY­kOÛ<,æK:gí¹ó3~mÂ"ñ65nðÔ—ÒÔ7ïè\Ïì.$»yw"p܆Màô›w&-rÛd4PâiÚ2mêéêâ¤Tºxw"jÜ^MØÿåÅ»ñ“j[”
+B'ße~ƒë÷B5Üá÷îxʽ;‚ÓBd¸wÞwï.d}ï.€<|“RFKpÁ«|Ø:ÞÓ«s%Ñ#Æή‚wI½ZÏŸî«í¬üU›ê²·P½ŸóÑ;Gˆ tïm
+ñ„­F¢®±êÂoÞÄ–½.$÷9@ẌùÐwß^?S/z!1g]„©0W2|;ÎçÆNònNý)¦ôr£“J¼ÔžR DÇÝÝΙi3 R)lˆXúöüáa*ë7´ÞUEÇñ ¢AòU9¦;â˜9÷F%:&~.G¢&¦ û+…¨¼;ESœï¯
+ézó°¢7ph›aJ(ðxNã/ªwT¹ì&6*wˆ½”¿LÍîMÒ7¶ÜF¸Á1ôs’™šVƒlC
+óFŠ¼ê¸ÒÄÄQ{"Ö©öäü¨=¹CJ'ÊNR=öÕí!ž³e35´+\¥7wL€éöªÖ˜:¥üÕKNÛ«š?;1é±C—Ôw†È`Reè°¥Þ=S½I·cQÒU¢ãFÜ=R½u–Ç›±IYbAÉvT.®d`ÇåM¥™¿Õ*a¶¡îÊl×B²È,4vùýš©¢:ëÈo‰ó²}Òùp½ö¼}Õ+Ðz:@€ uÊæFÍLªHîp‘äÀx7u®Õ%]‡yÞŽè˱=ŽõóÔ;(XÕ0=š‚ §R(½C¤½H¡æ`4cî8Ë
+endstream
+endobj
+10908 0 obj <<
+/Type /Page
+/Contents 10909 0 R
+/Resources 10907 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10906 0 R ]
+>> endobj
+10906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 757.674 237.774 769.731]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10910 0 obj <<
+/D [10908 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10880 0 obj <<
+/D [10908 0 R /XYZ 70.866 674.607 null]
+>> endobj
+3542 0 obj <<
+/D [10908 0 R /XYZ 70.866 635.653 null]
+>> endobj
+10882 0 obj <<
+/D [10908 0 R /XYZ 70.866 423.681 null]
+>> endobj
+3546 0 obj <<
+/D [10908 0 R /XYZ 70.866 384.853 null]
+>> endobj
+3550 0 obj <<
+/D [10908 0 R /XYZ 70.866 275.922 null]
+>> endobj
+10904 0 obj <<
+/D [10908 0 R /XYZ 70.866 255.253 null]
+>> endobj
+3554 0 obj <<
+/D [10908 0 R /XYZ 70.866 233.218 null]
+>> endobj
+10903 0 obj <<
+/D [10908 0 R /XYZ 70.866 220.582 null]
+>> endobj
+3558 0 obj <<
+/D [10908 0 R /XYZ 70.866 157.775 null]
+>> endobj
+10889 0 obj <<
+/D [10908 0 R /XYZ 70.866 145.139 null]
+>> endobj
+3562 0 obj <<
+/D [10908 0 R /XYZ 70.866 94.229 null]
+>> endobj
+10890 0 obj <<
+/D [10908 0 R /XYZ 70.866 68.947 null]
+>> endobj
+10907 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F132 10901 0 R /F98 8891 0 R /F14 6622 0 R /F107 9274 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10934 0 obj <<
+/Length 2647
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[sW~ׯ˜J^ *œœûåQ+£¬R±¥h‰k·ì<`ÉÔJ d—ÿ}¾ž Ìá:³®¼XÈœé{÷×ÝgÄ“Ç„'¿\ücpñóµW‰gÁZ• Ç™·6qA2+’Á8ùÐq,°nÏJÙ¹º}{wó[ÿ¾ûçà׋þàâdx"¡<sÖeÏy’ÑóŇ?y2Æ—¿&œ©à“¯ÙÑç„><%ÿºø½F
+É;—÷¿ôóOìêî®Û“Îw®a€üÓ}ÿºßw…_}ð¢sõÏË»Œ“}é
+“­¿¹½úãmÿ]A9ûwpsûn[³ÒÞ3/õ>Å´QÌhµÒWÝjêÜj㥎“é’yÕ¹½¾þíöòM¥gR©ì1iO3qÄ^(΂T1ÿ‚­Ì…øÈ ïöŒµUq~¾
+®™ ¤oF`öS~fƒãN”GF³é¢ÐrÔ¼óy8ÏŸ:¡øVxF;æ•-Ÿùȹªaå‘éð9íö@¯N%˜à«£dåMÓÁ¬Î,¶m¯ŒeÎسl±R&0­7|Ÿ>¿,¿uý“^œ¢À”lûú¼­…–†<ØX M¡è}¬Å—.’¦³¨SÌ\yâ}×Òé7ébT
+1àÕ 1pˆyD6Ú%=!X0fKY‰’JaU²Ö™È<¯:ÓòÃÎÞ ’P PzΟïMÚ&TFHp›³ý:œ,;4ë¤/3:è®xg6×g´r®jǶTóW>m_{² ‹Éãtø´#/ÝyYqe:]γ:õ­&5ÙV†¼‰˜`J„Ø“qmu6lŒçš±F힆q,¤Œ’m±Ž(?þ»­}ÐL„2Ò^5Ñ=X(”Ó!zÛá˜2h<¯«Hš)YQƈü6Ue Dà"éIθegߤP]N'ËÉlš7Ãeþói2MóOÒêüÃì!ÿI<_ŽfÏ/“§t¾m ‰
+&u1ËϳŒ^^ºÊtX]m¦žOFzHl§}ÔP»`ö4E¢£/³Þ2}jÞÄÉ`!ºÈ)I^Äì o:·-Æ!)ªDs¶’»¹ŒÙ^^ýþÇÍ}?×½ìÅÂniÐ+;oÚ&
+·Œ‹6ø
+Ž)›ÇŒqË×E n¢ûÄXz°•Ôn…Ç9©G¥9.q›@eïPå´9…‰V»RŠ£û^ ñŠøÜmW&…ßæÖ–`­bk×…<Õ¯UËžq­ìZéC¸/‘aÐ9ð»€ßœ…ûܱ€æÅR°îœç”ø^ܧ¬Ú`é™Ò2fy÷5EœÝ…û0×^Ü7á ©Ä醸/MNIƒû7gK¸ŸY¬Ê¶À}QÆMüÆVs|Uè£ôFãkµ;%½Ç)áÛ—É(­j…QØr––1Tc¬ÑÖÇZ…mN†¿C…Ó‡*œö<«ÆÍ#B{Pp*¶Õ®ç[)qÙÔ‰YñäÙFèF³¥àç®…Ù†( îÏ6-°,f›ˆe}#5…0ÃC àV[|Š;Î÷K‹D%ÆÂáûwêhœÚ
+­ŠT.…w-)v[KXô)¦–C ò§Êr£«Î —ïñ'eðܧ”ãé<ŽŠÀ†*yŽGdôИ1sÂ?N¦£§WÔ´ž…MØcT·‰¡{Ðà7¢!–CxÉ8Z"%í“Í,¼6X‡™CD,aÒGXòóëà˜šPØ
+“C»ÔÓ¢4ÖõëtDÉå5ÅF´c€w˜¨2|”hmªÏ$2xúÒ•¦Ü]äZÏ õï³Sû±ÜÐR‰f Lo’¢æ´&JʺýX.
+!ŠzôT”hGšåÿdø‰"¿,YÃñxž.é"ÿõu1™>ž·Ó,¾Îó’Ò Ê®ëI™½ÌšoŸÜ÷I2zçL›’ „ä¡j•d¹®’¬Êv{SxN’9zº }@HÇž‘bÚgK¶æò(#²®5è)RdI‘žj£ŠD+€ûjX&Ú§òÕÞ‡K@?qófùÏÇ!íéëòåuù÷HKû]Ò9Åmó¤Dëí‘À×”e™‘Už[Ûàsò‘Fß\<OWö>ïœt”LXÝXZux£#iž‡“éV
+ÖýšqTXNø󳼩7ÕwœN·
+endstream
+endobj
+10933 0 obj <<
+/Type /Page
+/Contents 10934 0 R
+/Resources 10932 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10911 0 R 10912 0 R 10913 0 R 10914 0 R 10915 0 R 10916 0 R 10917 0 R 10918 0 R 10919 0 R 10920 0 R 10921 0 R 10922 0 R 10923 0 R 10924 0 R 10925 0 R ]
+>> endobj
+10911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 473.502 231.038 483.972]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8cpp_ada60ba39ce78b1ed954b614330ce36cd) >>
+>> endobj
+10912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.524 473.502 278.864 483.972]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.636 473.502 388.377 483.972]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.422 473.502 456.149 483.972]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 459.305 229.559 469.776]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8cpp_ab376621c7fbba04aef19ec0f190ee3cf) >>
+>> endobj
+10916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.045 459.305 277.385 469.776]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 445.109 223.067 455.579]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8cpp_acf31e1e5aec8a89b2b8060b9f86ec43e) >>
+>> endobj
+10918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 130.64 244.228 141.236]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_ad887b474fd49df7ac7801b9541a641b5) >>
+>> endobj
+10919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.728 130.64 324.682 141.236]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.27 114.651 253.637 124.269]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 100.255 242.748 110.851]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_a9d6922bd6ec75196890b6933d48df632) >>
+>> endobj
+10922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.248 100.255 323.202 110.851]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [295.647 84.266 328.013 94.001]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 69.87 236.257 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_a1807f8d6deb08fc413f1efd793f93f8e) >>
+>> endobj
+10925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.757 69.87 316.711 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+10935 0 obj <<
+/D [10933 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3566 0 obj <<
+/D [10933 0 R /XYZ 70.866 727.643 null]
+>> endobj
+10887 0 obj <<
+/D [10933 0 R /XYZ 70.866 715.084 null]
+>> endobj
+3570 0 obj <<
+/D [10933 0 R /XYZ 70.866 664.743 null]
+>> endobj
+10888 0 obj <<
+/D [10933 0 R /XYZ 70.866 652.183 null]
+>> endobj
+3574 0 obj <<
+/D [10933 0 R /XYZ 70.866 613.798 null]
+>> endobj
+8721 0 obj <<
+/D [10933 0 R /XYZ 70.866 601.238 null]
+>> endobj
+3578 0 obj <<
+/D [10933 0 R /XYZ 70.866 581.895 null]
+>> endobj
+10936 0 obj <<
+/D [10933 0 R /XYZ 70.866 488.838 null]
+>> endobj
+3582 0 obj <<
+/D [10933 0 R /XYZ 70.866 427.935 null]
+>> endobj
+10937 0 obj <<
+/D [10933 0 R /XYZ 70.866 407.416 null]
+>> endobj
+3586 0 obj <<
+/D [10933 0 R /XYZ 70.866 385.53 null]
+>> endobj
+10938 0 obj <<
+/D [10933 0 R /XYZ 70.866 372.844 null]
+>> endobj
+3590 0 obj <<
+/D [10933 0 R /XYZ 70.866 334.584 null]
+>> endobj
+10939 0 obj <<
+/D [10933 0 R /XYZ 70.866 321.899 null]
+>> endobj
+3594 0 obj <<
+/D [10933 0 R /XYZ 70.866 283.639 null]
+>> endobj
+8722 0 obj <<
+/D [10933 0 R /XYZ 70.866 270.954 null]
+>> endobj
+3598 0 obj <<
+/D [10933 0 R /XYZ 70.866 251.611 null]
+>> endobj
+10940 0 obj <<
+/D [10933 0 R /XYZ 70.866 146.101 null]
+>> endobj
+10932 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10952 0 obj <<
+/Length 4755
+/Filter /FlateDecode
+>>
+stream
+xÚ½]Ks7¾ûW°j/dUˆàý8zm)ñVb'^%µUI´D˪H”–¢’Ê¿ßî@"†àÌpÐÙK"KC|îF?0ø>»žñÙ7¯þyñêës¯fžkÕìâóÌqæ­¹ ™³‹«Ù/ó7ß¾þáâìãb)Ÿ;¶XZ)ççï¾;kóöÛŸ¾?{±’Ï_7ÿ½x÷áýbœ ð¼àñ#o>|ÿ|êãâ·‹½:»xõßW„à31SÞ3!Uƒêy˜]Þ½úå7>»‚?þkÆ™
+~ögóèÝ Ä
+ðÃíì߯~,ˆ¯È/T&ÿ»óbLII€¨¹d\ˆ 1êâã7gíOìÛVU/Jûxv~öñìý›³CÑ’@'^ê>É´QÌhõ,ß·ªQ3Ð<˜Àî›Õ
+Æ“”çO›ËÝÍý汑!}øësmö¦',sÞÍ–"°Ð~ìW)Mö‰Ù/Kcìü…4óû›«ø7œÊö:Îécó”²zþáüü»¯ßN[ðígN ¦ìiéH sU®H<[¤5Æ!jpÌiY*9gZÉVEt÷=])kæ¿rÃê)ÓQöA=¿ÿ•suõÕb©¼ßlv‹f¸Fõ«mÁÍ¥g–›úé)%˜ &ŸÞÕúñ²€iÀí`°zLpomBŽ¹Y>ºûªÇË@3?/…¼M¾8·Ð3ðd+›Už¢`‰ñèØ Z|º#†fÁËôÌQMkPQª~ÖZi&¥*hZ˜ùøiËÞyâ¶rļÅà¼ðÌ)]?o#ÓRçó^"àl©¥aÖˆB‚c^t"a!‰|,1•À“Šùꀅ‘º'`9¦Äka˜µ £2Ž¤`¤ˆeñƒ°­±9ìwg¯>ëj õ0)dáÛU0”9¹jmõÿ2 ±8ú«i¬zØd¬}Øï_¿{ÌVIaIñÝŠ`) 7¸0[BàÂÒ °©ÖÄb)8çó·ëÝêæv}Ë<XnÛ›,
+Á‚7‚ÑŠ_Öí§ E­·Ÿ
+ÂÒeüÕ§õîO âëõ¦ýÅåýÝàl—×ëÍz‹Zíênµ½^ïÒsWqˆÕ&þy ¢šùÓfwsÿt{ó©þ¨ÁÏP5aD@DÓ'ŒAäí¼SnnšiE‰Q‡\Þ®ûÝ-I^0¼‡ÒŒÛ™UÊWcxo¸Q3’TÑð7ŸK¾)Z8
+È Xà.‡l-Á¾tü­ÕmÁ¹ãZDï2{Þ%£w}¿ºÜ. 6¾OîÕ5ÄÛû˧»õf·zq9£\.:Üñ…VwÊÏŒ‡à$­dxB€^e;’vr`á Õ»¥€…È…q>ƒm Ëþ'±°Ž@© Š—‹ð´0ïþƒ‘<k“k4ìë¡$Xd+AÙ2—cæ%ÈeŽ¼”20cô¾§œßÜÞæ+=Õ6JnVŸÐ)oS ¹ºÚ®×í?Ÿo6×ý!áXåÿ¼Ú¶ÑiÑ›ôsMr•dþ´ºDù~Ñ1…Ùq°ý@\mMD^ï.¿´ÿ¼ZíV¬—Ad‰ñMÙ-Íž>ŸÅ°ÔUt„…Ô
+O·åâ±Ö](Ü,
+£}Šà0Â
+€2}ÃGpÎïrÜr+, o‘JP€J+Fä ±îñÕiZ.ûê>òû§»Oëè“÷ŸÃhÇ—û=ôd¡=†BUy¨†Ò_` ÞñÎÂXP¼k3ä¢P3Yˆ®ø´×ºÊ[,SJç¸G\4ºÊÄé]%ƒýaa Èkú€çô7dÐ’'>§OÒÁ0oB'A/ษó$:> Jò †<IxhCó´¢Ê“S:ä¸WÏûKeWš6ß²+íãÖ¸’¬õ¥“'uèK±'œæK/c~Rî=T.”Ï\É‚8âX¼Ú¥:rƒ¸äy¼ ò@#,¥dÞ›Íú¢%ßa‡djœÉä.õÁª:lC •bÒÛ 1µÁmÙ1¬0ˆðÙ¦ÂÇu[_o×›K,Ö4×ÏÅšæjþûÝCaõX°Š‡Õ«HzSµCåAQíHÜG™Úʱ´k WŠ¢­“*‡]}ŽŽõWÉ5À—4º†·è»ÕãïP0˜—’Ô€Ÿ ™ƒÞn?aKŒýèW`leÊÆ–P»*A"E€º–w¤€
+Ÿ=̇í}©[Ѧ9¶A€©=ãBf˜¹gëŽdjÃG!D€µì]&Äcq•k&<…}%,‹¦%éYX)I‚¬ vŠÆ¥sm’«B¸ r„ÆnÙ
+H¨°¼£5®°åRÈ
+V(—bÄZV°®‚ ˜°®¬ #Ö²‚àn5…g) #¨Iž¥'
+(Z¨ƒ€Rô,<Ì`…}5t¦’çö½j{ÕÓíî±€m$(
+;k+!C…):7­Q$Ž&Ç+3¬ótJ…
++ìcª1«KuªÕUÓQ¨^5™íXý wEÍ|³ëo®J§¬EÛ×ã{Ý6ÂL¯¥„bŸB ˜H¹ê8àÓ¦œtµkö^ Paáyœ µ·v±Î©‡váÐìå‚Îp<¯« @1[¯sP¬èzÚ_a˜í/ $e±íçv~_Ì&P†
+™bc 1Bc}X/” Âû\ŠÇu©óÂ,/¬¦
+!Œ†ˆ*3!våÚÀB‹ õ¦Ã>Qå?^øöÔ"nà,H=EáHòP…× !•lFV8H3ˆÍ¾dxlóê0G¡i kSY=ÒÂÒ[X$Sõ)c¦X¿ARÈ xY>õ#[ÏÍ×p
+§R:ÖFê[9É(¬¬œaO>Tö3#·\ (èMEPÁCmøM1#ô®A[&PDO|k.½±¶pOÁ‘d+Üë×tÕS„–“D€|S>17+q—øj
+>š8jO»‡§ÝßÍâ`ÏòfÎË0™7‹[ïàDUl$|yÍ'!Ϊ¦¶5㈳‹´  ¸Š8{t±*áAÜÊ×µÖ å¶#ô±0¥p†Ž¿ÜÈæ ¯ßüøÓ»gGIN§›èÐE¹‡ªHN8†ö‚‚ä„[IÞ«XN¢†å„•)÷Š€å” ÞGs"€Œ4§ ²—ç¤ xNEOÀs’‘à1ŠçD
+E E¤BeRôs¡@#*Ÿú Š
+²,ˆ¾ëYÞå,)=SZæˆ]ÚJö_ÏÒ¥Eó#ùó»9á™Miiýx6Ý~©ÕŠó'P¢àÆ¥kFÒÞ¦¾»A*»«Õà=Ì¥»ZU¼«õüis9ñbÖ?PÕxo3Ä@Ûì”iVá©Ü k⎂rF·99í ãËÆzT¾¨\Žš.i…y7—g/!ïîkàës
+U“W#é¶>¯ÆÝŸÁ´J
+endstream
+endobj
+10951 0 obj <<
+/Type /Page
+/Contents 10952 0 R
+/Resources 10950 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10926 0 R 10927 0 R 10928 0 R 10929 0 R 10930 0 R 10931 0 R 10944 0 R 10945 0 R 10946 0 R 10947 0 R 10948 0 R 10949 0 R ]
+>> endobj
+10926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.266 738.295 231.815 748.766]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_a2482d2c090680a260736fee93de282ef) >>
+>> endobj
+10927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.077 738.295 280.417 748.766]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.769 738.295 411.51 748.766]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.985 738.295 498.711 748.766]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 712.451 229.559 722.921]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_ab376621c7fbba04aef19ec0f190ee3cf) >>
+>> endobj
+10931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.045 712.451 277.385 722.921]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+10944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 698.561 223.067 709.031]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_acf31e1e5aec8a89b2b8060b9f86ec43e) >>
+>> endobj
+10945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.097 634.246 225.307 644.783]
+/Subtype /Link
+/A << /S /GoTo /D (compiler__if__target_8h_source) >>
+>> endobj
+10946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.67 562.581 230.412 573.047]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 495.062 232.789 507.119]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.048 482.708 237.774 494.766]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+10949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.311 338.546 313.053 349.141]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+10953 0 obj <<
+/D [10951 0 R /XYZ 70.866 789.024 null]
+>> endobj
+10954 0 obj <<
+/D [10951 0 R /XYZ 70.866 753.478 null]
+>> endobj
+3602 0 obj <<
+/D [10951 0 R /XYZ 70.866 682.109 null]
+>> endobj
+3606 0 obj <<
+/D [10951 0 R /XYZ 70.866 617.794 null]
+>> endobj
+10941 0 obj <<
+/D [10951 0 R /XYZ 70.866 597.697 null]
+>> endobj
+3610 0 obj <<
+/D [10951 0 R /XYZ 70.866 576.051 null]
+>> endobj
+10942 0 obj <<
+/D [10951 0 R /XYZ 70.866 389.44 null]
+>> endobj
+3614 0 obj <<
+/D [10951 0 R /XYZ 70.866 352.016 null]
+>> endobj
+10943 0 obj <<
+/D [10951 0 R /XYZ 70.866 214.814 null]
+>> endobj
+3618 0 obj <<
+/D [10951 0 R /XYZ 70.866 177.389 null]
+>> endobj
+3622 0 obj <<
+/D [10951 0 R /XYZ 70.866 135.119 null]
+>> endobj
+10955 0 obj <<
+/D [10951 0 R /XYZ 70.866 114.946 null]
+>> endobj
+3626 0 obj <<
+/D [10951 0 R /XYZ 70.866 81.403 null]
+>> endobj
+10956 0 obj <<
+/D [10951 0 R /XYZ 70.866 68.871 null]
+>> endobj
+10950 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F132 10901 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+10975 0 obj <<
+/Length 2122
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ[o7}÷¯´/P±¼_‚Å^[ΦH“ÔUú’ôA•ÆŽ
+üx€­ « ³~™ó‡—Ÿ)ÓbX
+£|1ËfËEá×8+þÎg‹´øÄuñwùPyNù¼üm²|zžÍÓÕîBrjˆ“`•dÄsÞJžsF‰…%…C’;>{hdŠhÅ£@Z"$!³ñê1ÍÈäù¹/T´lÄ€IC¤ÑXl(ƒV—ñqâ AxX2FœHøî°ãë°?_¿y×$üvA¬{ùÊ@ Aíù|² _µDJ¯ÞWÇé± kq[ý63¦Bº‚zŽ©màCh¡”ö¦}¦°[»œá’(ï¹28C… ÖˆÒÔœ`8*N{[B”>l²Ù<w½ˆ}³jûîÓ‡>£½t•.&i1%8š8¬ÄÚOÉ{¤ V”־Ÿ-&óÍ64&õÝòáa¾OÛŽ‚À¹‰ËxdCœmìHè3šP'o‹êÂïi¹ _¾Ûn%F9]ò]Ž¡‰ãÃJ¾ßmÏõuîmgÛÏ41Ö„å3ç*x&ù”Ÿ½?–Ëyù½Ÿò걜ûýëÆZ€œ¤T†
+£§’³ns¶…]z38­½%–g&ù§m¼ºE€Ä¶ -BÈÙºB€h ¥gŠ
+!'ËE6{Ü,7ëæfV’ŠëlÏŽ–îW«Ût=iPˆÉ:]¡~ZlS*Z$ùƒåÕ˜éŸÏ•roÝ0í° !R™‹Ê‚༠Ï´p€‹°$ªÃv‹Ý!+.Ö!r±;dÅÅ:äx>_NÆY:ýÚT¤…M ."y“ºä"?ÌÅÍl‘iÙê ÑKJ*›ubŽÈÂÚZ^ì$þ#D:Ô™çúP'#Gje £ÕY´òß@
+EÆðÄ—B„>ïïÃ}‹ËqŽ5`Û# ¢›Ó"(¢›V¹–¡¦Ñ2,ÎFó ìT ¥p»Üšê^òä ÷ó•}nkªƒðŽmªƒ:ÌUMuyF“ÒîoR¶æ©˜”ˆÎLvQa« "PnÉÆ°áVõ
+}?ŠÉ>pRWßUÿ­lhÿÑç´÷¿²¹ýà}9žúZùT½Ùs¶\½zµN³Ís»Ø*jé;Vv[¿…%c«&QèÆÚÊoe{óÞ R °Íû#
+E vÃvW(Ø¡HNŽ*Ô™x-
+ÕÝãJ¡ê>U¨î°•B°‡ª;h¥PuÐÿ‹BýÐ&QHT¬Úfoò_a1ŠüW·µá¿‚ÿ/Hž·9ï€}ü¥¥2HÆÎ~ ¤äeú*,vÜ©úê-I§÷èëŽøäiª Åç¥AJÏûÃBáñKóÎ×$üÜçwùàüí‡ÂŽìˆ@~4ö±3¨Wî\ˆÚÚ E
+é"†·$•‹%õæ¢ïåôŠfX³¤‰¨ß-«ˆÞò«oOQcO$&!P89ÙéšÃd
+KÚÉC]Dæ(ª4Ô Ü4\¹ÆþsOëÐœ{V‡È¥p^"%V¥Ýß™zpl=» …×êB!ñ·¡b$ÞØöm$y§)Fƒ„S•_t;QF‚ûb•Ž4î‹ñï‹1Có…q_ÌÛ¢¼^^}‰|[¬x€ÕÆûf¸{IÛÿÑfåª|‘Ëu6EUN¾´˜’&­\üçža¨‘« aåË£›ùx½NO¿&¿ù]gÅîo&GÞ<ÜΞvÞ<¼Ø¢§½f>¬í5Gõ·íʺò‹yÎ…õ‚Wª¶¡‚Á”TDë’UH
+endstream
+endobj
+10974 0 obj <<
+/Type /Page
+/Contents 10975 0 R
+/Resources 10973 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10959 0 R 10960 0 R 10961 0 R 10962 0 R 10963 0 R 10964 0 R 10965 0 R 10966 0 R 10967 0 R 10968 0 R 10969 0 R 10970 0 R 10971 0 R ]
+>> endobj
+10959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 568.833 188.422 579.37]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp_a710d3456ad7c68f8f1e75280cb59eed6) >>
+>> endobj
+10960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.829 568.833 250.199 579.37]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 555.457 180.944 565.869]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp_abf73632f6d281d829bd176c3ea5e3d98) >>
+>> endobj
+10962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.351 555.457 242.721 565.869]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 541.83 193.658 552.367]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp_a7313c7af4287aa68a23591eeb6197e75) >>
+>> endobj
+10964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.065 541.83 255.435 552.367]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 528.329 193.658 538.866]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp_a096b0b11c73c328e71512ef26e81a39b) >>
+>> endobj
+10966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.065 528.329 255.435 538.866]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 514.827 170.525 525.423]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+10968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 514.827 256.364 525.423]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8cpp_a1a8170b92c43ea7c55566a23a7bcdceb) >>
+>> endobj
+10969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.771 514.827 318.141 525.423]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 83.371 157.677 91.99]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc) >>
+>> endobj
+10971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 69.87 153.695 78.488]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10976 0 obj <<
+/D [10974 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3630 0 obj <<
+/D [10974 0 R /XYZ 70.866 751.881 null]
+>> endobj
+10957 0 obj <<
+/D [10974 0 R /XYZ 70.866 739.543 null]
+>> endobj
+3634 0 obj <<
+/D [10974 0 R /XYZ 70.866 703.593 null]
+>> endobj
+8723 0 obj <<
+/D [10974 0 R /XYZ 70.866 691.255 null]
+>> endobj
+3638 0 obj <<
+/D [10974 0 R /XYZ 70.866 673.547 null]
+>> endobj
+10977 0 obj <<
+/D [10974 0 R /XYZ 70.866 583.947 null]
+>> endobj
+3642 0 obj <<
+/D [10974 0 R /XYZ 70.866 499.288 null]
+>> endobj
+10978 0 obj <<
+/D [10974 0 R /XYZ 70.866 479.66 null]
+>> endobj
+3646 0 obj <<
+/D [10974 0 R /XYZ 70.866 458.299 null]
+>> endobj
+10979 0 obj <<
+/D [10974 0 R /XYZ 70.866 433.866 null]
+>> endobj
+3650 0 obj <<
+/D [10974 0 R /XYZ 70.866 397.781 null]
+>> endobj
+10980 0 obj <<
+/D [10974 0 R /XYZ 70.866 385.627 null]
+>> endobj
+3654 0 obj <<
+/D [10974 0 R /XYZ 70.866 349.551 null]
+>> endobj
+10981 0 obj <<
+/D [10974 0 R /XYZ 70.866 325.059 null]
+>> endobj
+3658 0 obj <<
+/D [10974 0 R /XYZ 70.866 288.974 null]
+>> endobj
+10982 0 obj <<
+/D [10974 0 R /XYZ 70.866 264.541 null]
+>> endobj
+3662 0 obj <<
+/D [10974 0 R /XYZ 70.866 228.456 null]
+>> endobj
+8724 0 obj <<
+/D [10974 0 R /XYZ 70.866 204.022 null]
+>> endobj
+3666 0 obj <<
+/D [10974 0 R /XYZ 70.866 186.315 null]
+>> endobj
+10983 0 obj <<
+/D [10974 0 R /XYZ 70.866 96.547 null]
+>> endobj
+10973 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F14 6622 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11008 0 obj <<
+/Length 1870
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsÛ6¾ûWp¦q¦B€Å;·Ô–›d§U•^’‰v4ÑÕ¨´é¯ï‚‰¤ E|¸Ó‹¥¡Áý‹oŸ ü|õÓäêÙ­á!V)LîM‰Q*ЈbÁd¼\¿|ñëd4‡ Í@“p¨
+9|G« ¾Ô»78«>¥¨š­G}nÑÃö&cv¬†œÐBõ®ÅÝzGhŒÅb=õÙþ+s\¯W ê1Ø­w[Ÿ&âILRq†
+ÀªAâñx@•"œ²>@~·¬º[>ÖÎrðJºŠ–qÈäàÇ,²Í¾>âÓÔSêAhh Fc ñ@™ØI¨Ð÷ãY|ß[J2y™BóU¢„ïˆ4Q÷(8îºXKâr‘IÒ–gª%ç}ÌK% çЇFx~ ªÑvþ;¦¸b°½á†PèE¤bßm²Ád+»éÙ=ëÁÍ|yS÷€Â@þÅÍ¢L;5óðw™šþÅÍÂr¡æ%A¹æ!LO²/ˆ±ŽL¥ü„È[4Z¯=úêŽl “;rίÛÝjšÌ׫޼øÓz½¸(?0I´°”†ph“œ6Z7àñ;Àx©2AøýL~À„¤4ïW¼Š8ßúÂ#\Ë1µQ%«ˆS,N×.KàŠmÒ™âX¦Åë¯i(ZP¬)¥£R°cÊb€—ùgc
+üÄ*¡J8ÃD”$™¸€‰Ý! *–!ÏR±;dÁÅ2däŠæ(ñUðýR‘¦1°.2ìâÔe\ܪf
+Åá³J+šý¶û”ÒØ;¿/È&sתæOÖÓÝ2^%Qú¨
+kŠ0ë$aL°úÀÁ’.Rw„ÄsÐX•f£Ø!(d
+«;~íšÄÅêìª$ŸnFjšÕBÉ%Ä
+—ó
+4—àâ»+ÛL5p¦rV¸cMnÞÏDÒ;0Ñ@¸;ˆîÈkÊdò0¼;ï‹#aùÄá65ý7ëÉ%ZÆJ´!¦ Ö‡K $
+¢ÇS˜Búณ¤Aµ‹
+R”ÈW›'(K
+endstream
+endobj
+11007 0 obj <<
+/Type /Page
+/Contents 11008 0 R
+/Resources 11006 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 10902 0 R
+/Annots [ 10972 0 R 10984 0 R 10985 0 R 10986 0 R 10987 0 R 10988 0 R 10989 0 R 10990 0 R 10991 0 R 10992 0 R 10993 0 R 10994 0 R 10995 0 R 10996 0 R 10997 0 R 10998 0 R 10999 0 R 11000 0 R 11001 0 R 11002 0 R 11003 0 R 11004 0 R 11005 0 R ]
+>> endobj
+10972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 739.157 219.974 749.618]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a7794447f8e3800689e053e9833be2c75) >>
+>> endobj
+10984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 726.474 213.868 737.011]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_ade8dd79a5828a3a1a71df4363c3823ac) >>
+>> endobj
+10985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 713.867 222.834 724.405]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a8602709fb0d6f3c2167951308290f152) >>
+>> endobj
+10986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 701.261 228.321 711.857]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a65c0482fe6c1a9813f927b6489d5ff5f) >>
+>> endobj
+10987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 688.78 192.412 699.192]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a3523f24560128f27e31cf619d65a41c9) >>
+>> endobj
+10988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.33 640.878 184.826 651.339]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) >>
+>> endobj
+10989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 628.271 189.578 638.732]
+/Subtype /Link
+/A << /S /GoTo /D (struct_dim_desc) >>
+>> endobj
+10990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.078 628.271 228.429 638.732]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a54b06ee85c425d9b1097d235998bfba4) >>
+>> endobj
+10991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 615.665 185.597 626.126]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.097 615.665 220.467 626.126]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a5047ea57c45241ff5ecf55ac893bb592) >>
+>> endobj
+10993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 603.058 161.048 613.519]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.022 603.058 208.377 613.519]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_af3f9aa15be30c0d4ec9652f71c613580) >>
+>> endobj
+10995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 555.129 188.422 565.667]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a710d3456ad7c68f8f1e75280cb59eed6) >>
+>> endobj
+10996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.829 555.129 250.199 565.667]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 542.648 180.944 553.06]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_abf73632f6d281d829bd176c3ea5e3d98) >>
+>> endobj
+10998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.351 542.648 242.721 553.06]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+10999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 529.916 193.658 540.454]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a7313c7af4287aa68a23591eeb6197e75) >>
+>> endobj
+11000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.065 529.916 255.435 540.454]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+11001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 517.31 193.658 527.847]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a287c35471baf30439aef0b5c3b6eb33c) >>
+>> endobj
+11002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.065 517.31 255.435 527.847]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+11003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 504.703 170.525 515.299]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+11004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.499 504.703 256.364 515.299]
+/Subtype /Link
+/A << /S /GoTo /D (dv__util_8h_a1a8170b92c43ea7c55566a23a7bcdceb) >>
+>> endobj
+11005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.771 504.703 318.141 515.299]
+/Subtype /Link
+/A << /S /GoTo /D (struct_arr_desc) >>
+>> endobj
+11009 0 obj <<
+/D [11007 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11010 0 obj <<
+/D [11007 0 R /XYZ 70.866 753.919 null]
+>> endobj
+11011 0 obj <<
+/D [11007 0 R /XYZ 70.866 653.483 null]
+>> endobj
+11012 0 obj <<
+/D [11007 0 R /XYZ 70.866 569.968 null]
+>> endobj
+3670 0 obj <<
+/D [11007 0 R /XYZ 70.866 490.784 null]
+>> endobj
+11013 0 obj <<
+/D [11007 0 R /XYZ 70.866 471.689 null]
+>> endobj
+3674 0 obj <<
+/D [11007 0 R /XYZ 70.866 450.92 null]
+>> endobj
+11014 0 obj <<
+/D [11007 0 R /XYZ 70.866 426.979 null]
+>> endobj
+3678 0 obj <<
+/D [11007 0 R /XYZ 70.866 393.047 null]
+>> endobj
+11015 0 obj <<
+/D [11007 0 R /XYZ 70.866 369.087 null]
+>> endobj
+3682 0 obj <<
+/D [11007 0 R /XYZ 70.866 335.231 null]
+>> endobj
+11016 0 obj <<
+/D [11007 0 R /XYZ 70.866 311.348 null]
+>> endobj
+3686 0 obj <<
+/D [11007 0 R /XYZ 70.866 277.416 null]
+>> endobj
+8951 0 obj <<
+/D [11007 0 R /XYZ 70.866 267.259 null]
+>> endobj
+3690 0 obj <<
+/D [11007 0 R /XYZ 70.866 231.614 null]
+>> endobj
+3694 0 obj <<
+/D [11007 0 R /XYZ 70.866 206.483 null]
+>> endobj
+11017 0 obj <<
+/D [11007 0 R /XYZ 70.866 183.384 null]
+>> endobj
+3698 0 obj <<
+/D [11007 0 R /XYZ 70.866 164.772 null]
+>> endobj
+11018 0 obj <<
+/D [11007 0 R /XYZ 70.866 164.772 null]
+>> endobj
+3702 0 obj <<
+/D [11007 0 R /XYZ 70.866 145.783 null]
+>> endobj
+8943 0 obj <<
+/D [11007 0 R /XYZ 70.866 145.783 null]
+>> endobj
+3706 0 obj <<
+/D [11007 0 R /XYZ 70.866 126.794 null]
+>> endobj
+11019 0 obj <<
+/D [11007 0 R /XYZ 70.866 116.578 null]
+>> endobj
+3710 0 obj <<
+/D [11007 0 R /XYZ 70.866 80.934 null]
+>> endobj
+11006 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11034 0 obj <<
+/Length 2419
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Û’É}Ÿ¯èØ}M¹*ë¾a;B+Íxµ¡ÕØxü$í‚D9ô÷>Õ šbèöz÷Eb É“•—“™UÏ&ÏþvõãýÕŸnÌóÆÈìþ!³œ9c2뉑ݳ=Ë„dýkCÔ{ÿîÇ»ÛÛ÷w}â½×oû¿Þÿ|usõï+i<™ÐÄ´rÅ×÷Ùèñêã¯<ãß3ΤwÙŠG3È÷x1Ëþyõ„BkFÒEŠÜ ønÀÞô¯ÉºÞí»÷7å«ÁÍíÍàæÃü)8iê½ùéõßïo姶R÷üÛ»7ÿúåæÃ}_„•ÿÞ¿»ûp¸¢ÚÎ1Gê¹)-±v¹]ß·±–™àÌjoölã{V&&ƒúœ÷nŸæ£Ít1¯”]ŒžóùfX¼ y;[ñìZà/çKIOÓùƨåxˤˆ‘ç¹&‚ƒ†Lr¸¥r“n˜æl¼} žY¥ºÐ¦URÆ:ûB÷¾&'É$ïÄP¤™÷¢;Ü  Ják² Pe™ÑµÎòùd󥌦O\óþµÖ¦7ZÌ×›òÍ׫ÕÛ|=*ƒK¨ÌC™ÒÛù IŸ8—åSPi6˜²ª~¦´ì2©„ð´“¥EùÒ{]BGà±(ªß怦ùt—ÃJ÷Ùtž—¯¤+ÿ_<ÔKå4«>§\í²± —“£ó¬é,œaD¥$"+q3±ÑrÙ—ºÇz²›)¡ñB0¯MùÜ èKÞËWù|”Ku?¦ûV¾¾{V_ ÇÁE+P„îM—›Åê‡Öùæiy¸.RXyE’m±.RÁ¥$I¥c5Ö!¢‚/YÂã×Âj&%œIáÄK(Ê8ňëÖäpnNRÔ¹x‡ÕÆEE:Ÿ¢¨`+ŠŠaŸ¥¨@+ŠŠ@ÿ/õ*ÅQ týà‘@…õ¿ t!¹d–›D°6ô×ÐßÕjÍóYþ¸Nh/5sNždXÔç3¬V—1¬1hç`¯ö $qa0ìû°öûTÕðób1Kpž‘Žq¯. o×t¶€Ã𤠽>A` ƒN»=j` ò>†®S침a@†jÉu 9œÍ£á¦.„çrfÁ]‡íÊÉd1%ÎoWä…É$<Ö¨»H¦ rM:'Ûý?nW G’꺃ÂîµhÝ­¼„/´ãŒ“¿œ/Îp”/´õÐÈ¿Œ/Ú£Ö|Á>Ç@V|A‚6ÓÉÓâi}a1­ãù†ðÇ„!.$ 6¤ï€0´áÌ©ß _hå1l©C+‡¶Iw5޼ɇóA>†óIØÑéåëDäYƒáL^Þá‘ð²qÌ(,‚DÑ ·È/‹yQ–’¬©Ü¼ÂB  ¨ ÐP>95@cË5üO!¬;€&
+Q#WÄy • ƒ×Æÿ–­Áõ—Dr}!Ⲫ $k/D¢|˜æ\D¢Š´ð/%”P%f©Š-ÀíÞ{µ'<›~^Ô L‘€…A}¦´A3ðì–dÎʃ¬ØS%ЀAgd…ÝüB“|µ
+¦^¬ú†÷بڀŸÖa|#jßT¹Áù^r.µÎ házU­ïûé|4{×ß{_И‹ý¶‘ÿsJ¦-UO¬7ãé‚}IHR5k›K=¢dÒQpÝj7\MÒêaøÙÕcêy&Íí® Âã»">féèðåv…hÁü‰1<´$Qtĺ6*T¦ ’óÕ þ¸ÆÚ¾«rô,PEÚ* ­˜P¢e¥·Ì+Ú†2Â8QVS¾X¢@ó>†-@••š'B ÃŒÙ5‚•WFýe8*s®¬õR“R‘ðÎÆÍä'plôìcQƾ—Õ!¯> Ë^MªõŠÇB2í“
+!È -J{\¯*.bÜõfÕ]"Å$ïÂ-d ¢o¸åÜL’¨-a#»½:R`4qº¡Îp’È%
+gxapøÃåœGRu‘KÄ¥zI.µÇ¬sióËb"Vn‹ö¢=(ñ@Ï"]oÒé+‰)Õ¨Ôh䛘G“w:¯6¦)ÂW!>j§?PJÑEB’0ô’ mYé>æh
+–À5º¶Ö°„îÕkŠa†©c
+so¨˜™„MÔ3õp³œ@¢Á ¸)ªí˜ípVÝÑ;Øv{á­½jvØMfõÆ“XЦ‡Ë´ku|c™5¥$®Ýnº÷­®Å½K)
+Ïœºà–˜xæÃóãMÁÂÊ#»@­¦U³ 4²”ÄߟotØ^c騄9-hï0*©‹‹£_Ãô]ϩͳNŽÄÒ Á.¹(å5#ö÷GêBŽï¼h"Ë„»¶í¡ƒñQœbðÝ®hbG–Šøì
+Úc™CsîB_Åpá(Æ6|µ†êIÅY˜KSקÐm[sòØEsК9ŸzH·¦ж°¦ êa­öêÙ'Û-óìÝ‹{žlÕR_ËsÊF_Fé¾ ¶GÃ’ù°?Ô*«4a²Â;(#õ.uuæ˜<d5yڣό@Ó³Cèà zdér]åB¹ÜTG¨™u™!Á³1øªIX¡#K´šI»=™ wú~gJ_­èJ/NW¡0“ë̆_x´ºÒ„|7ábyù“‘d²n{ÜÔ/Wt8]:çw+¥õþi ˆø™ljÐ~4¡ÿ OîÂr
+endstream
+endobj
+11033 0 obj <<
+/Type /Page
+/Contents 11034 0 R
+/Resources 11032 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+/Annots [ 11025 0 R 11026 0 R 11027 0 R 11028 0 R 11029 0 R 11030 0 R 11031 0 R ]
+>> endobj
+11025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 334.968 159.811 345.429]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_ad36243a66d6b30f74fd72dd0f78d7264) >>
+>> endobj
+11026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 286.789 213.464 297.326]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.95 286.789 262.527 297.326]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 273.916 240.359 284.453]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_afd6aa24b3a04e64b24c8acdbc3f6c083) >>
+>> endobj
+11029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.845 273.916 289.422 284.453]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 261.043 246.088 271.58]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_a1c564621acc6111ea14e24f2b7900b52) >>
+>> endobj
+11031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 248.17 252.068 258.708]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_a77b38d4439387e0336a618ba950ae916) >>
+>> endobj
+11035 0 obj <<
+/D [11033 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3714 0 obj <<
+/D [11033 0 R /XYZ 70.866 771.024 null]
+>> endobj
+11022 0 obj <<
+/D [11033 0 R /XYZ 70.866 753.828 null]
+>> endobj
+3718 0 obj <<
+/D [11033 0 R /XYZ 70.866 733.092 null]
+>> endobj
+11023 0 obj <<
+/D [11033 0 R /XYZ 70.866 709.209 null]
+>> endobj
+3722 0 obj <<
+/D [11033 0 R /XYZ 70.866 675.026 null]
+>> endobj
+11021 0 obj <<
+/D [11033 0 R /XYZ 70.866 663.147 null]
+>> endobj
+3726 0 obj <<
+/D [11033 0 R /XYZ 70.866 628.974 null]
+>> endobj
+11020 0 obj <<
+/D [11033 0 R /XYZ 70.866 605.032 null]
+>> endobj
+3730 0 obj <<
+/D [11033 0 R /XYZ 70.866 570.85 null]
+>> endobj
+11024 0 obj <<
+/D [11033 0 R /XYZ 70.866 546.966 null]
+>> endobj
+3734 0 obj <<
+/D [11033 0 R /XYZ 70.866 512.784 null]
+>> endobj
+8725 0 obj <<
+/D [11033 0 R /XYZ 70.866 488.9 null]
+>> endobj
+3738 0 obj <<
+/D [11033 0 R /XYZ 70.866 472.562 null]
+>> endobj
+11036 0 obj <<
+/D [11033 0 R /XYZ 70.866 349.731 null]
+>> endobj
+11037 0 obj <<
+/D [11033 0 R /XYZ 70.866 301.628 null]
+>> endobj
+3742 0 obj <<
+/D [11033 0 R /XYZ 70.866 234 null]
+>> endobj
+11038 0 obj <<
+/D [11033 0 R /XYZ 70.866 214.815 null]
+>> endobj
+3746 0 obj <<
+/D [11033 0 R /XYZ 70.866 194.137 null]
+>> endobj
+3750 0 obj <<
+/D [11033 0 R /XYZ 70.866 168.755 null]
+>> endobj
+11039 0 obj <<
+/D [11033 0 R /XYZ 70.866 147.722 null]
+>> endobj
+3754 0 obj <<
+/D [11033 0 R /XYZ 70.866 126.986 null]
+>> endobj
+11040 0 obj <<
+/D [11033 0 R /XYZ 70.866 116.829 null]
+>> endobj
+3758 0 obj <<
+/D [11033 0 R /XYZ 70.866 80.876 null]
+>> endobj
+11041 0 obj <<
+/D [11033 0 R /XYZ 70.866 70.718 null]
+>> endobj
+11032 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11175 0 obj <<
+/Length 7321
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]][¹‘}÷¯h /60}C¿Ý’Œg“`ï:Þ§$µº-D-õJêLfýÖá•Ú⥾wXò2cÌÈ<u«ŠõÅbQÝ<ܨ›ÿ|óëOo~ù]47±KÞ››O÷7AuÑû›¨óúæÓÝÍŸßþæ·¿ú¯Oï?¾»¥߆îÝ­'zûÝï¾ßÿ—o?üæþðþŸÞiRo•ÿùéwþÈ?3Îóïµ=ü•ï÷ëß}÷ý‡wøÝ·ïþúé÷oÞzó¿o4“¢nôñ¾³*dì¨ÒÍüñÍŸÿªnîøþþFu&Å›óOo˜¸ÄXÝüéÍW>ÂøÔ©T~Åûüáã9°Uº‹†€­²#*Ù÷áÛ÷t÷Ûža_X÷ñýwï?¾ÿãoÞŸÓt”CŒ]${$ëLç¬y¡JÊÖÕdëu§ŽÔÍßiõöólÛ4߬w{óËï´½Iü7Éçïr9@ä¿ó¥Lÿ£rùΆ—ßlO,ªÞîÏ?N;Õ‘6™˜ÄïR;ê’2å'=¼»åoZÔpYÃxñvXÖ/JÔÇÅn73ðçè¤bç¢ÀW“æÂà«wûƒ ÿ¢œzwëxï-¶[èËáœg;µ
+àö!iËÖãKá
+zrâàM
+ñ¦‹Áœ)À )œƒ°Q^Ëû/‘íÅHQgXHؤ8| ¡Äžoî»îó!å_ʼn(Z£èƒaSêIJqðÍêÈ!Ü-QFüËõ|õ|wüúä/p|Ò‹rþ[mMf³}ÑïÝþŽ£
+¦ì|)ºH/?ü:y*uyô.Æ} êXiþ…©[nêÄqÆdÍ€8¨‰Â9Ç>—ƒÅ[þ1’ïüÓ?Ìæ½’æ„ù¥z3ŒëyŸ±s-LË_ˆ\ñwnþœÜ/îz›³8üO¨ûöá ÷óÏ ‰ûÅ®æ8Çô¼‡ŽÕ»!am\¿’Ñ=~Ü=Ôì
+ çsalóÅ2koÍ?'¶˜¬µc#ð5Ñ
+éØqP'€Iºsþ+ˆ„àû…ÖæšvAⵜ)pÊ$táŵ"?ÎV«Í\±ý!ÓhS’ùjÄ`8ÈSHVÚñï§Xâ/øç¸ÎwN‚—:*A/:¨&/ò±¬ÞÅîêy‚›a­èbœàf§ZÂËðB^+‘|(Jð'S±„¿¨$ðÎhXËJBº„½¨&Ú³0b€õ¬%!™]K| O¬í>›`k_:E1/ÛóÜkçÛ í{íüDE$œ*‘
+£žIœ‡9‰¼
++ùã±ï#ߟòñà¥V0$<ŽÓP
+Ø‘§’‚ùçÅøÛ.vÏ«½„eFƒ¥ —´“¾È±\4蟞Õ&hf¹•q˜¨ýʬ3¬Œ†³”vz„£
+ц¡AXlkÍ|ÖQgI‚?Ö¹Në¸\
+óó ؠ؊kÅNO°Ùœ†4ÁfsÐ’$,6¯”¾* d&ÖP;¦!¶yTb^Îx³ÅÔj9{Œ%f ÔÂ"Žt;'z ŒeÕ™NûvDB¨âˆO³í®Ú鈶üv•#ÎK¨Üå„
+ߊŠèŒÂH­ÃåQ-`ÔG¥«¢u$‘\Ù|Ï´™Æò-Ó×µÎâ"ÆFD«-ÿÀ ´n»™/v•yN ;OíßimÊ°¥Þáp÷µ[TÖs&$À^˪DCönû)‘NÅSyãZ$âq—C${ä•‚uWTB£ráE0quÈ 0/*.Fàö«
+£Ðã,¡ Ù4Ù`æÛÅl/Ñ}`8nö;ÚX•O\F²‡×|(ÕŽ\(õê^1¼«lùVÎdz®`ÖM­b­±¶Ëâ¬ÕTm×nB!H»Üw7Ú½ðþTA$Mà°(Æ×j2œSYÄ~í°ÐlÂO`Äü¬Z’Áô1”;Úq1~ åŽÜÝççýÝé•Æ~×xáfZÑ“¦°#ƈ†p=MIhRUŸÎ4"[üŸê—8£Ì÷úйÁ÷âœýy÷Yâ¹*D)u,š‚ÌU½ ‚2ŸH
+¼Ãl¦KÍ´Á‹–€f¯Ð!7NÈQg¬„"bJ¦2é\v–?ú>°l§2¦>°<¥2ß·}¾¯åº/Í7ã$(ÍŸâÊå©sIBˆ5î˜Æ²'7ŽIh-ª9Qé‹ìøÎלˆTЉdRÙT'Ô&þ[6`âþ*W–˜÷µÄ&åñV›œJÈÇÅ㔤†C/?át56/’Ô(ÌOH¯h"êf¦»WóŸaºOq/i"ší¬*ÎF{¿Ý<ÖŽ4ú.wL;SBNщ+ç÷-Ú $V&„Þ£4
+`²õÚŽ0Æà E/‰ÔÀðË›g‡Á‹`âM+çK̃>HhAÂûh{wîSìÑ»åýËkoûú´¼ØÒŽŽy-ÆšÁfÙÖz»ðÄ‚Á´x¥s€9«M°´œy½t#&G‘A ôán·¯ 5ªc! gçUC4¥‹-â²Æ„ ³ÉÀy%Äûåî©v²é|ª%
+§*`w_QìÚI´Ñà®®­ WuKRëó\GðœÍˆÄ9ZrqœPpŒ‰£°ˆ 5]ŠD‹eÌ·AheUÌÍJ§´¾2Ýq†,ÍÎwO‘?ov"c…ûÇ›ÛiÄTt3$ò*{òk(>·cs~nBº¨½#Çúp¡&@kT’ƒ„ÖÞG°LG¾Èœ:àðÿx¿Ü‹ÌfÈ÷{ƒ‘ù~o˜ÂžÈ† GíØ:mM‰]oÄÇkâùT«4_7V}8¼/Ð
+àùÓsíf‹cµ$Ž;ƒ.1÷ËG‰xÇœÚI‰cNå&Hú†#‡vlÌìÂ1ÍëB!˜J’À$b= P6õƒ
+s~€)5N1亣
+Ñg:…nsèva*:z›òUb6å«ÄC6á‰)ØìK· Ó'1ˆ3 ÒC;6Æ?$*±W›‡å|¶ª¥ì %,‹áÈ?™u>ÛÞM¨"ðwê„h0u"?º¢x¥ÑÖ°ù` OŸ>çNÚ]]PèѼ†
+÷Jœ°DdÒeÀx'²Yð¾ 7Ë®>{Fƒt© †ÓlãƒîaÌWЋËZbw2c:Rz‚2X‹Ë Â+ИÛW`?ÌöŸkr±xZ×K8FË;ºc<N\V*ßNñ¦6êïØ'ã¦âÏW‰[›{ð'Z±3ŽVK¼’·r×väC q
+|MPƒ0Ñ ÒŽì²êZf‡mˆÄ»Œp[£ƒ±×¹Õ¡›²¢ûK•õì¹
+%‚ÝV§C .Ö‡:Fc£+‰ƒ¡ ”¦ìŒIðŠkÐ<÷uøƒ( ¯v"1ªã°ÆñÇ`8Ž‘P\ã]¾–T`ÿŒA„>å~ÛÑfXÇÜ® `†y%'äsíÈ3|
+<ß<>=‹©„~j†
+/muìK×£,¼¼B5´s’ž¨y°kÁÇ`× Ô"uUŒ8¶gcvt3´»\Ì5 ~´ÇmÇíî)ì«’Ò¼íRHàœy_¢ Sÿd;‰ ×ÚÌx¹P~졘8LTà>¯dB?Z¤ÎÐOÏ ëàÛ‘ñªÚ#ùø A«3 ÈÒX“_Í#ƒÇáI@:&(F.¥óˆ‚_¿»'utÞBÔì%F'"ÑtŠ$òØs^h¬QlÇíâ)ì Óä6¡†—a½h'8rv¡ÌxFQ¾¶žÚ‘q‚ÇP.ð
+ƒGÖK‰!U¬ÀI@´„)§œ‡çTd;¬”™"®!”2ª_ÆÊA
+ù ló(Îðº*X6€Z ¨½ÅlØ?cUÁR?¥™úá,§È÷Ç'MÆÅâ”r/ïX·ƒ§{½p;ì;‘ˆu;í¸½Û9…=‘Q¿g«ÕfR¹ªAÅ£»,ßf¢Qòª¯T´îò/Û‘MÊ£w®òë~»X´s ýg>´“Œö3ãÇó
+ÇÎ>ð
+§Îx;î*¯f«åÃZNÅPPÖ´omê¬1ãÙfñè¶Pn|žg=†m×4­ÿ‡%æo\£Ð:Ó9æbA$k=N3ÈGtk^ʲ®‰ÔÚ ¡ÿ•2Œû
+endstream
+endobj
+11174 0 obj <<
+/Type /Page
+/Contents 11175 0 R
+/Resources 11173 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+/Annots [ 11044 0 R 11045 0 R 11046 0 R 11047 0 R 11048 0 R 11049 0 R 11050 0 R 11051 0 R 11052 0 R 11053 0 R 11054 0 R 11055 0 R 11056 0 R 11057 0 R 11058 0 R 11059 0 R 11060 0 R 11061 0 R 11062 0 R 11063 0 R 11064 0 R 11065 0 R 11066 0 R 11067 0 R 11068 0 R 11069 0 R 11070 0 R 11071 0 R 11072 0 R 11073 0 R 11074 0 R 11075 0 R 11076 0 R 11077 0 R 11078 0 R 11079 0 R 11080 0 R 11081 0 R 11082 0 R 11083 0 R 11084 0 R 11085 0 R 11086 0 R 11087 0 R 11088 0 R 11089 0 R 11090 0 R 11091 0 R 11092 0 R 11093 0 R 11094 0 R 11095 0 R 11096 0 R 11097 0 R 11098 0 R 11099 0 R 11100 0 R 11101 0 R 11102 0 R 11103 0 R 11104 0 R 11105 0 R 11106 0 R 11107 0 R 11108 0 R 11109 0 R 11110 0 R 11111 0 R 11112 0 R 11113 0 R 11179 0 R 11114 0 R 11115 0 R 11116 0 R 11117 0 R 11118 0 R 11119 0 R 11120 0 R 11121 0 R 11122 0 R 11123 0 R 11124 0 R 11125 0 R 11126 0 R 11127 0 R 11128 0 R 11129 0 R 11130 0 R 11131 0 R 11132 0 R 11133 0 R 11134 0 R 11135 0 R 11136 0 R 11137 0 R 11138 0 R 11139 0 R 11140 0 R 11141 0 R 11142 0 R 11143 0 R 11144 0 R 11145 0 R 11146 0 R 11147 0 R 11148 0 R 11149 0 R 11150 0 R 11151 0 R 11152 0 R 11153 0 R 11154 0 R 11155 0 R 11156 0 R 11157 0 R 11158 0 R 11159 0 R 11160 0 R 11161 0 R 11162 0 R 11163 0 R 11164 0 R 11165 0 R 11166 0 R 11167 0 R 11168 0 R 11169 0 R ]
+>> endobj
+11044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 526.324 178.478 536.862]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a993122187033faf9e78d8fb7c9a811ed) >>
+>> endobj
+11045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 513.255 183.463 523.792]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_ae25971c227ebc234c511a0e3e74216d3) >>
+>> endobj
+11046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 500.31 220.081 510.781]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) >>
+>> endobj
+11047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.582 500.31 320.557 510.781]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 487.241 218.593 497.711]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a38efbf7bcf409d60d511ac7fc9dd0096) >>
+>> endobj
+11049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 437.989 165.181 449.945]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 426.606 193.542 437.067]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4dc7a524e3c3da0519cafd8da0c77d8d) >>
+>> endobj
+11051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.741 426.606 308.856 437.067]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a53fc8c0e4462c8b86e53e3e73ca87a0b) >>
+>> endobj
+11052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [311.849 426.606 353.454 437.067]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9474341378321bbb66dd065c9d1728e3) >>
+>> endobj
+11053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.447 426.606 437.53 437.067]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aff8197124e169a3f7af098800dd24708) >>
+>> endobj
+11054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 414.7 157.784 425.112]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a08b2c430b4c4d2064b37b6616cfa3397) >>
+>> endobj
+11055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.777 414.7 233.02 425.112]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7da3530e4ae6f13a7597fbc68e0d2f93) >>
+>> endobj
+11056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.012 414.7 301.764 425.112]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae129086851235a51223a33ede554dd35) >>
+>> endobj
+11057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.756 414.7 396.859 425.112]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a10e0a8a7e857f898d9217b2b9067bdd3) >>
+>> endobj
+11058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 402.62 199.576 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae9f95d4e6107b53cdb8cc6cb6fb3ab3c) >>
+>> endobj
+11059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.568 402.62 306.22 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac68f98d86f8d42de66fe30ee4db462e7) >>
+>> endobj
+11060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.213 402.62 387.436 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a97e71de76e60114f2bdf540e7a2a1940) >>
+>> endobj
+11061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.428 402.62 468.652 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaa5736205c9119f91cf9a369a18689f4) >>
+>> endobj
+11062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 390.664 192.421 401.202]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9205be297cce4d25a67ab49c521c6397) >>
+>> endobj
+11063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.413 390.664 302.293 401.202]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad3455fc21fc2758323022dac43dea1ab) >>
+>> endobj
+11064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [305.286 390.664 414.774 401.202]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4de2b9581227bce54a9ee473c6ea9) >>
+>> endobj
+11065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.767 390.664 499.971 401.202]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac74c1eb199634e711c4770db5ba09cc2) >>
+>> endobj
+11066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 378.709 176.981 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aba67870a74a2f777750b46b5e8d14046) >>
+>> endobj
+11067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.974 378.709 281.402 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a896ae98379f741207af1dae068b01528) >>
+>> endobj
+11068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [284.394 378.709 385.823 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6da0531112c30682534b734dc0daf49c) >>
+>> endobj
+11069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.815 378.709 477.682 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5e40420e02dea7ea2c1a94309a7a3d66) >>
+>> endobj
+11070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 366.754 184.638 377.22]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8f32c3443e9ee45d4529a4d785e97ace) >>
+>> endobj
+11071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.631 366.754 262.806 377.22]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af0056eacf7aefc8164d920c543784d28) >>
+>> endobj
+11072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.799 366.754 309.116 377.22]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b4807807a9036855d8a75a55d798d37) >>
+>> endobj
+11073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.109 366.754 355.427 377.22]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acd784c54bf0d238b7e3e3a3606e71a7b) >>
+>> endobj
+11074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 354.924 138.094 365.265]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa7447d3f09830b1b8ba000808676db57) >>
+>> endobj
+11075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.087 354.924 184.405 365.265]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a430deb789cfbae8601e81e195eb4c4fe) >>
+>> endobj
+11076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.397 354.924 267.36 365.265]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1d376034f2795211ae17c115004ece09) >>
+>> endobj
+11077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.353 354.924 324.394 365.265]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2be0eacde78d48ac71f1f1e45c6cc925) >>
+>> endobj
+11078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 342.844 177.232 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf6544933d90ed3f043320e0ae28cf19) >>
+>> endobj
+11079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.224 342.844 256.923 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1113b21353c527f48f0498ba8b23cde4) >>
+>> endobj
+11080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.916 342.844 329.155 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aeb5ce749f64e7cabb4da23a7fe223230) >>
+>> endobj
+11081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.148 342.844 443.735 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d3290ed454af3eabd183bf623f62e51) >>
+>> endobj
+11082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 330.965 196.375 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a855a898bd521e12e64c7e24ae24b27af) >>
+>> endobj
+11083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.368 330.965 287.508 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac4cb11dd85579ef99579e6ffa1b9e1a4) >>
+>> endobj
+11084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.501 330.965 344.963 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa0a61cb4bb6f511670f2417fb98ae044) >>
+>> endobj
+11085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.956 330.965 416.702 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d73b129e6b6e2b0ef5534f1ad8ae925) >>
+>> endobj
+11086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 319.059 171.87 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abfcd87967eadf76908907997235bd8de) >>
+>> endobj
+11087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.863 319.059 277.465 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1fb8508aaff077c3380849112b1fe9f2) >>
+>> endobj
+11088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.457 319.059 330.589 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf9071b7ce718f4e86860b52d7331714) >>
+>> endobj
+11089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.582 319.059 433.261 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a85b5d92145d15761ef48e1a2bb05daca) >>
+>> endobj
+11090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 307.055 189.22 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a087dff40c2723fb4df55d40ef50dce63) >>
+>> endobj
+11091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.212 307.055 246.559 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae5e2e69a99ca7328fef73c76853ced27) >>
+>> endobj
+11092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.551 307.055 292.206 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a632a6793150c097111bdff3bdc440f21) >>
+>> endobj
+11093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [295.198 307.055 347.823 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad3c9a856ba072cc208ca98e6a534a2fa) >>
+>> endobj
+11094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 295.023 137.933 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa664ee6e40459ec8b4df02c70d93b5f5) >>
+>> endobj
+11095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.926 295.023 185.203 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abcd840c4fb9b24b9f620a853337bb438) >>
+>> endobj
+11096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.195 295.023 232.078 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab682f91caccc0a58a6e61ef6305dba1a) >>
+>> endobj
+11097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.071 295.023 307.869 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2e04e6213c4604ea57266bf5620bb5e0) >>
+>> endobj
+11098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 283.745 148.639 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4cdad9f7ec709b5f705e569818d30) >>
+>> endobj
+11099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.631 283.745 219.938 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa957650915ce4ad53d5d1fe2ff26bf05) >>
+>> endobj
+11100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.93 283.745 282.773 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4c65488743115c1a9379b5ff2e8b3b83) >>
+>> endobj
+11101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.765 283.745 335.943 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a461a4f225f1260cc488f8d3ca521758a) >>
+>> endobj
+11102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 271.113 180.047 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acd12239059cd447952753c19bc6d1f24) >>
+>> endobj
+11103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.04 271.113 291.731 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaf7b421cdf6f009f4b8fc1de01c0a8a0) >>
+>> endobj
+11104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.723 271.113 382.289 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a58e73a8b50bcd84989bb3c50eaef23e4) >>
+>> endobj
+11105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.282 271.113 504.167 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6da340c7e9f675bea0a952664369be39) >>
+>> endobj
+11106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 259.158 180.119 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b558f9533791b768753032e3be4504c) >>
+>> endobj
+11107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.112 259.158 266.186 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d84d3f445a3fb2c4ca0085e2138b689) >>
+>> endobj
+11108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.178 259.158 365.944 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af4d0a63688d5e69cf112c18ccc319b93) >>
+>> endobj
+11109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.936 259.158 490.772 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abd2c0d6d453ad54f293f1765804a4549) >>
+>> endobj
+11110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 247.279 196.769 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf4f668cd226d9ad9882506ca8b530f9) >>
+>> endobj
+11111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.071 247.279 326.399 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8c30cbf5e1e2471f9c85210fa5130c11) >>
+>> endobj
+11112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.701 247.279 438.527 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab20eac9f92bf969e4fa1ef775a17b5e1) >>
+>> endobj
+11113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.828 247.279 525.406 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63afda2965dc13432b5f9e6122b3099d2cf) >>
+>> endobj
+11179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 235.324 113.715 245.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63afda2965dc13432b5f9e6122b3099d2cf) >>
+>> endobj
+11114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 223.292 183.06 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af3087b851426acada2705bed6a6ada13) >>
+>> endobj
+11115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.053 223.292 249.024 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a86f9e29ae571c4b5033d511740cb0901) >>
+>> endobj
+11116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [252.017 223.292 305.673 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a979b0719c315618bafd2c909611b1ae9) >>
+>> endobj
+11117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [308.665 223.292 368.301 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a464c627d89991fccdea2c2e39e372a17) >>
+>> endobj
+11118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 211.462 145.437 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4c0deda2b6b576a5b41c2365da65adf1) >>
+>> endobj
+11119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.43 211.462 217.759 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac3a9ebae19e48211cf972ff771c1b4ba) >>
+>> endobj
+11120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.751 211.462 268.92 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a01b198bb7ea75123b635b7d704ddb0ea) >>
+>> endobj
+11121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.912 211.462 322.573 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a92039f8a69fdb7aa5411538cf9f3c3df) >>
+>> endobj
+11122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 199.382 143.949 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63afc63b03ad46c2277df014192ce0a8308) >>
+>> endobj
+11123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.942 199.382 217.042 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acec73118dbd8cca5a3f8f7810f7a6d1d) >>
+>> endobj
+11124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.034 199.382 277.994 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9c2715ca0b96db51a6f1ae9505099814) >>
+>> endobj
+11125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.986 199.382 331.638 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae9e7f34fdefd0cc070f9dd6419dc6fed) >>
+>> endobj
+11126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 187.552 166.105 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a756bf85b5493c5388f4638534b2b9906) >>
+>> endobj
+11127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.097 187.552 268.812 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abd07c54594fed3e8948d58313507c85b) >>
+>> endobj
+11128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.805 187.552 342.622 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adc7ef5df1245adcf2f64d4e14eaa3fd5) >>
+>> endobj
+11129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.615 187.552 445.33 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0057a99bf4e82581dcca244fb7981c1f) >>
+>> endobj
+11130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 175.471 213.554 186.009]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a669dca197a011a09f7114d74f829cfa8) >>
+>> endobj
+11131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.547 175.471 335.243 186.009]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a06c098dc0cc021e3c4925d59de5ab5cb) >>
+>> endobj
+11132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.236 175.471 401.862 186.009]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac8d611becf657f920606af68b24ae1be) >>
+>> endobj
+11133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.855 175.471 463.729 186.009]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8faff756c49d752a5364ec7296c6764e) >>
+>> endobj
+11134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 163.516 150.925 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7ecc7339b02b9f6ad90a2c52bb408e63) >>
+>> endobj
+11135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.917 163.516 208.425 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae07463f0fab25114f7df901dcd8433cd) >>
+>> endobj
+11136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.417 163.516 259.586 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5c9dd15b099da09263a1e87d279afea9) >>
+>> endobj
+11137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.578 163.516 345.365 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acf604fb161c6cfcd37f11312ffb4bcc9) >>
+>> endobj
+11138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 151.561 184.27 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaf0ceb89462335ef31228a5026aa2dfc) >>
+>> endobj
+11139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.263 151.561 253.866 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0fb62c13b8051fe994b9fa1524dcf784) >>
+>> endobj
+11140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.858 151.561 325.201 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab9bfb936421d32429f0f0b411f670662) >>
+>> endobj
+11141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.193 151.561 425.506 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0113af442a4a9c7fb0275cdaa3818e37) >>
+>> endobj
+11142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 139.606 189.085 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa87685d2355aed053ba0734737ddb0d0) >>
+>> endobj
+11143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.078 139.606 299.54 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac536e101dc421f40f0240d2631fa6352) >>
+>> endobj
+11144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.532 139.606 407.501 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aced1b8cb4c11fad1aeae3130a46da7ca) >>
+>> endobj
+11145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.494 139.606 522.17 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acb12d8217a05464069425ada2f60ba5d) >>
+>> endobj
+11146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 127.651 177.806 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a57c093941c261fa5bd29e8c09f8f0dbe) >>
+>> endobj
+11147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.798 127.651 263.594 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2cbf29fb6186607b47ec3909c6340565) >>
+>> endobj
+11148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.587 127.651 326.716 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa837c794f9251ce7020e8f4e8268b55e) >>
+>> endobj
+11149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.709 127.651 382.226 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad354a288faf30e1d7fda0390cf09a896) >>
+>> endobj
+11150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 115.696 165.872 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac7256f8d51f2f313929650c02f3d1fd9) >>
+>> endobj
+11151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.864 115.696 285.561 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af770475a2e32ec91c759880c17030241) >>
+>> endobj
+11152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.554 115.696 410.236 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7485b2373e434ef7cefc18fd5a844440) >>
+>> endobj
+11153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.229 115.696 514.064 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a135f997949ba2a630b0ca780eb1a2936) >>
+>> endobj
+11154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 103.74 143.716 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a57c32bba84f37f1b28315b820d15484c) >>
+>> endobj
+11155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.709 103.74 259.873 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a807c25d921c2bdf9f72a12ac7699a2e2) >>
+>> endobj
+11156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.866 103.74 379.85 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa3e65cdf985163936c2f403ed716335f) >>
+>> endobj
+11157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.842 103.74 501.315 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a516af23bcc63938124adeae722c0b095) >>
+>> endobj
+11158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 91.785 183.114 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1486a07ed02284be0e541340e91cc0a7) >>
+>> endobj
+11159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.106 91.785 262.68 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d5d51f7dd8d7ef92a8084cbf91f4835) >>
+>> endobj
+11160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.672 91.785 331.513 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8ed6109e08047adf44d61cd502f736c9) >>
+>> endobj
+11161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.506 91.785 399.297 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aff84740966d7b4b3ce34b14d376afac3) >>
+>> endobj
+11162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 79.83 178.003 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7325580b15c6ab21a7a3ecfe6f1dbe2c) >>
+>> endobj
+11163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.996 79.83 245.788 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af107d31e55a4813c9a54ff3289e34399) >>
+>> endobj
+11164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.78 79.83 349.921 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b40720f3d6d032915d5d865f42add20) >>
+>> endobj
+11165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.914 79.83 439.601 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a804d8709e96f1e77ce9619666aa20d32) >>
+>> endobj
+11166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 67.875 201.423 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6dac1854c8a9865cb2074229a6cc5e8d) >>
+>> endobj
+11167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.942 67.875 300.134 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a3b1a26109ea3a369b80f89ecc8396778) >>
+>> endobj
+11168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.653 67.875 438.206 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a19aa9dd81333eca1527959a8bdffd652) >>
+>> endobj
+11169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.726 67.875 565.824 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adb066b39d62a6ed3149f7db53ce9cfa5) >>
+>> endobj
+11176 0 obj <<
+/D [11174 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3762 0 obj <<
+/D [11174 0 R /XYZ 70.866 752.026 null]
+>> endobj
+11043 0 obj <<
+/D [11174 0 R /XYZ 70.866 715.992 null]
+>> endobj
+3766 0 obj <<
+/D [11174 0 R /XYZ 70.866 681.419 null]
+>> endobj
+8726 0 obj <<
+/D [11174 0 R /XYZ 70.866 671.202 null]
+>> endobj
+3770 0 obj <<
+/D [11174 0 R /XYZ 70.866 654.511 null]
+>> endobj
+11177 0 obj <<
+/D [11174 0 R /XYZ 70.866 541.223 null]
+>> endobj
+11178 0 obj <<
+/D [11174 0 R /XYZ 70.866 453.383 null]
+>> endobj
+11173 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11346 0 obj <<
+/Length 5991
+/Filter /FlateDecode
+>>
+stream
+xÚÕ]Ýs#·‘ß¿‚•««¢ª¬1¾?|uëµ6ÞÔ®åÈJîÁÎ-´¬H$CRq|ýuc8Ò
+ß sÜâFxœÉF9nÛÍz{rªØ|Ÿ¶qÀ’5ÊǸ÷'\ÏÇm]/®þñ°Ü¶¾_?øâ«Ã?¤ 9û9lfn¥œi´  ×ùFð#ÖIpà€¬FÜ
+ÓX™ˆÏꄳùÃý¯í6Ú“¯ßs5óð§€þ$ØÁoÂßÜ&ŸF(°a<,Ñ)‡?r¢û“_„ÐɦŸjPxízÿÏo~aL®×߯wû?/Nø<á¡„^Î\#ï ¾>%5s~à×úe&Q^%…Jƒ‘`£;Äu?Ý 2h"†­YÊÆ#†õÍÙeÞp.(@ÁÚ8&bÐýz¿¸Ë  g(P­ón¦yÀ–Êòùž„ÿczIsŸÕK’7Vhª…T⺘5ˆµCRlT£µ/a á('Iêh'ƒ.WËýrq·üo´ ÇX‘Ý‘Â5†bs$l³,[©‘°ËÏF~o¤Å?£ÐÒqX¶DWìÛÛ6«˜n¸ ÐŠ÷Æmq¼³5 Jù†D“*[˜-æe=
+Ô ýxŒú+!77'’ÍÛíî%bÌš{‘¡–ô
+!®d1SÍí)˜BÀþWÄ‚ X
+¦à“)“0Åâîn[dßH
+Ém“úÂL!AC ‚«é•l3ÅL! „x$ÀÆ_—°„t”ÅæH6*Ýœ=¡àæ)ä LMäî~¹Ëy  =­² À!JÚôz±_Ô3Ÿ2® ꉄ
+PéÀêó4VÅ,
+ëÖHp[ºe3/:VÆÁf2
+GÒ0R©cE€|p¬"äiÇŠ
+`ª¤„èjÏ(8]µO8ÿv±ÿ|×ÄŸ²}V+At…â1ìrµyØ°‚”
+"MCA¦´¡›bVx
+%Š'|L«/Ëú¶Ph
+…$=Äßʳ¾‚}TŒb¡XæU ë+em)XBiÖ“°ÄxÀ¢Œ ·Às19Å9÷Ô›GU‰û¬|bìŽsOÁ…—å¾Ü#7È Ká‘ÀHV¸r¤¹÷H†È/x$õ ½G2½nwûíYä÷œ—
+¼‘rÅÍÃ*[µ¡Áñ¡`¥0Q2™ëÝzýw
+^PxííHÈôèøb^èS"ë‘û”È9›ù’Uá Òδƒ°®î®ÿbnŠMð’\qN
+$|ÿ*¿FaÆ8Äí+²]•§Õi¥B ›# ~„›QÜ»CäÝŒzØÞÍÂÚ$n|-8.–?rã¾d[àC`)K
+ ¦ëDò݃ öÒ’‚ý¥€€RÈó5Ë_¿×´GcÑ­è:Aø–þ¼Ö_j¼‡¸n¿\¯vSgÑxÆíPéÁ?9?}ýÏ¡çëåõ—&«Jd¸Ù“¾üÂf8‚ %ÇŽ3,”àHÜVçnù딪' 
+ 1°ô1ìn¿¦åjßíòýîöÝúºÍ©a`zçLÙ­úÿÛLë(˃8(í‚v«K·å G²°=rŠq@›qt ê11<ó6Æœ`p4!«ÇEÄ«ºw‚sŽWÃF…–1¤ðÝ}²-Ǫa‰9Æ^#±G-JoDÎâ6§‚±F@ŠÿS*¸L– Ž­ËëE b–—ˆR5d/ICÈ‘ähÂñzLÁ`w,1wû¼ì‚®VŠ
+#‰>fŸæÐzÌžE‡˜£§4˜Þ†~l5,žÁ?v;Ê¥.´ð!@U<´ðIP_ɨ|^íʼ’‚Ãæo‡TŸ}îÐTª†¡Žç°a¬.3Ó»‘tq?´ï™•öŸK—Áöx*•®ô.£ñŽ¾w-æ«uXÚÄÿü*,Z®Ì‚xÉ Vy Z…»åî@ HÀ.w-É€ ´Äž†ÜÄð›žÍžŸj}¿ºc@?x>‚Ÿ`kn6ÿ´¸Ú†6ò‡çZ\hl¼^þe}õpß®ö‹ðO=ÆA,>*ü·ën„¶ûëþ}ŠìÛÀ̘šeŽ•Ïˆn4L¹IyûíùÅåaO~E- “Ü#K>­UœÁê!Xðñdž¯Æâ°ÍwË~†ÂŠî‡õÍÉí§>›:ûä뙄MªbGn#ºq4ã“'Šx:Ç|=¤Ä‹›ñ
+¤p‡bØ|nº«?Tu>¹@»h,íꪽ†er¦»yÉ%ù+°2
+;ÀÕäùpà€#arh å|*„G60ÈØèÙšy·¼]-îÚëžQq¹AÎöwqúæ7ßܶ«\ €9×–€H¼ÒàÖÆDvj4›;Š¹”šŒ“‘:ÆÅÜÕ]¾á7ÖO â³Nƨ+³™²Øê“ÌÖvý¨"ÜCŸ·\‡
+ºøýÊ%ë±Ü´¨]ŸHê²Ðf¥õãò2Ö Ù`›šÖÛ:—›5žuiϳI׻᪢íX]ŸÄ¥ÏÈ/ÈCIA{_M96æÀ+Œ„òM»º¼l©n2Æþ0$û”Àú›í´¢°ù0’îâìâ"÷•€o
+>ãtcÀŽ¢Dt¿à'@h‹õGà»™Ú<…î!¡Ü­>jzIlQÓ˹¿4‡
+G€ë»‡õ†¸ø´JNù`=’®‡ G}REÀË)ÊÊâY¤˜1Ö±dÆk`•ÈP?QŒŸ½šM03뉸B6‘à1a·’j\‰E´po·½–™X?LvÒ½~ý$^“C03´¶¥ë‡·‘œàâeäØê}ÈÊ›"äHTc+î:—Ç0¼‚ÈÂñú SûŽÐn°ëHévaÖ0—b¦¼ ¯cŽmØî1'Ø€áI*xÞž(v:—w‹`zî¦S|„BcZ«’aÀ‹•ü貯Y†QŒ.HÚÕ¶QàK ‚ts¥bäm{»Üå«t@(±O0°—¡Op¼¼_ÜNì-øŠíÊY"*ú#øó©
+_ÌH³È–…û“9s˜ãµŸˆòFÞ9À“’ëɄɆ
+»ˆÌÍ>wÈ
+!<®’ ¢l²0ù³bÔøŽk
+TÐøš%Û1zV,eÙ¸N†ºìwô¬Xr| ˜b¾Œ6É|ÇΊ‘'ÏŠ¥ÇFt$t’cF%ëñ쬸‹Ÿ>~ó FãÑ/ús탠C\B#AïþìùDðƾ[øªTôÁd7õcÚ´‰šðûv›ÍwP,t¨«'2yQ9.áZ7cžzX¼áÑ<‚ /žZ^­Pÿó¯'?`M–Wùæ†CÁjÒ°¹¡ä2Þ·Å6W¥†o…à#9 X otÚvóÎ]`X
+Å7bªì’ÝW‚…ž°8‚ˆg‹yéæ?9ú|žˆF/Ùøz¬ö©d?Ædƒ cóñË
+­Á¨Ã8LªÊSJì›Úµ‡íÝÚ·?ž¿Kˆ™¼
+-€Œ º|{ñdz˜XãY¦£€Åg‰œ‹aß¾ûó_>\œ•.B¸„E­¦&\¢[õ|2 Êñ€‚–PàTu A‚Ö8 m¨†kÀ‹à„™=ûbf û¶íU» Ê(Ǫ°˜§]O&,bžvD^¾-6.Ï€
+`i–-zhcËl(ØzRñ .<Mh]­WWëÕ~yû°~Øå[[9µÏ,´öÉJ¦Q`³ f)p±÷JÊIdmQoŽðñ[£ÌîM¥
+cš?¤ïŠ*C„A”¡é©ï_ü¾Z/sÆöKz
+Ltë„1Ã=è`á,ãÓéÒ‚ãkç–€½³PÒ†ôäó–1ß—;
+L €˜‹1G2úÁ{‘žb³Ñ3ÇòtÌÌÛîCT×=`˜ Æ›-úÍ–>·ÙØ|GXI@MÈU3²`³%–HB„I€©lc´Š1G ¡ÐІ‚ÉBä¡ÝË+žó„¤…§ý(?¼ìç
+–^aµ…£`>¥UcÑíKd]¸õ"@–ÇKJ \×ÐJ«U3 «¦&¶»;ÐÄ"îŠ3çF›¼ËÆÁmåÆ3U
+i‚×½ÃÍÁíFbÃçí“$Ó£Sb…@£AA"Öáâ!oLâ—̉õDPŽ‡Ëâá…)±xŽ,C«ñ”Ø}›íŠÏi£¥•&dßW$Ã
+ˆWQî@×{Û—fíns¡6ã˜
+›ñ‰ŒG_býõ{kè‡ÖÀ‡r®Õ=KRõD&cãýžôOµ_]ÅNWÑïq­‡ ¡=1l¾¸{h¿‰ªÐÝ“›á
+endstream
+endobj
+11345 0 obj <<
+/Type /Page
+/Contents 11346 0 R
+/Resources 11344 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+/Annots [ 11170 0 R 11171 0 R 11172 0 R 11299 0 R 11300 0 R 11301 0 R 11302 0 R 11303 0 R 11348 0 R 11304 0 R 11305 0 R 11306 0 R 11307 0 R 11349 0 R 11308 0 R 11309 0 R 11310 0 R 11311 0 R 11350 0 R 11312 0 R 11313 0 R 11314 0 R 11315 0 R 11351 0 R 11316 0 R 11317 0 R 11318 0 R 11319 0 R 11320 0 R 11321 0 R 11322 0 R 11323 0 R 11324 0 R 11325 0 R 11352 0 R 11326 0 R 11327 0 R 11328 0 R 11329 0 R 11353 0 R 11330 0 R 11331 0 R 11332 0 R 11333 0 R 11334 0 R 11335 0 R 11336 0 R 11337 0 R 11338 0 R 11339 0 R 11340 0 R 11341 0 R 11342 0 R 11343 0 R ]
+>> endobj
+11170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 757.574 177.51 769.529]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1a750fea006ae8fb0a87681434c2e724) >>
+>> endobj
+11171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.502 757.574 263.236 769.529]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a291f5b8a7c2545b2015a7725c0ae8c94) >>
+>> endobj
+11172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.228 757.574 358.036 769.529]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af674c3cfb9c676829925ca0185370924) >>
+>> endobj
+11299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 744.792 194.357 756.748]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222f) >>
+>> endobj
+11300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 733.333 201.889 743.87]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faa4c4f8ee0bf954aae1417c6bf5bf9932) >>
+>> endobj
+11301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.707 733.333 317.479 743.87]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa6132c6e100838329bd32d432bd231375) >>
+>> endobj
+11302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.632 733.333 438.209 743.87]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa31cbdb17dda46842d5342ca8b8167d33) >>
+>> endobj
+11303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.363 733.333 525.406 743.87]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa9918deae6149ce6c59bcd70efd5eafa8) >>
+>> endobj
+11348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 721.503 116.208 731.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa9918deae6149ce6c59bcd70efd5eafa8) >>
+>> endobj
+11304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 709.548 206.919 719.96]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa00df6b6e95d0ffde79f9348011e00d3f) >>
+>> endobj
+11305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.436 709.548 323.082 719.96]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa70ca5daf2604b86c0c503277832d2ada) >>
+>> endobj
+11306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [330.598 709.548 454.881 719.96]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faef46613bbc5ff744085963c207ed2a4e) >>
+>> endobj
+11307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.398 709.548 525.406 719.96]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa29803c6e19aa0273859cd57d5b2ccdc2) >>
+>> endobj
+11349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 698.144 161.586 708.005]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa29803c6e19aa0273859cd57d5b2ccdc2) >>
+>> endobj
+11308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 685.512 209.358 696.05]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faeb9ee4de6a2ae854fd379b1356604b10) >>
+>> endobj
+11309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.568 685.512 325.159 696.05]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa918a7ae99d1c6f75a57b9b44eeb830ee) >>
+>> endobj
+11310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.369 685.512 462.416 696.05]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa3e43fba97185be71f01a39ac26975446) >>
+>> endobj
+11311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.626 685.512 525.406 696.05]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa597d0b7aba004fc37b6270d34f5511e6) >>
+>> endobj
+11350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 673.683 183.454 684.094]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa597d0b7aba004fc37b6270d34f5511e6) >>
+>> endobj
+11312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 661.727 210.209 672.139]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa889333ade860becd857f515402c6296f) >>
+>> endobj
+11313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.98 661.727 326.423 672.139]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa6acb9d68a004fb0464cd097be18c5369) >>
+>> endobj
+11314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.194 661.727 462.855 672.139]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa3a4af8225d497bb7403ff4d60cc5a671) >>
+>> endobj
+11315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.626 661.727 525.406 672.139]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4119e95d7d5c956470fb2193ec894a0e) >>
+>> endobj
+11351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 649.772 159.003 659.633]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4119e95d7d5c956470fb2193ec894a0e) >>
+>> endobj
+11316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 637.817 234.311 648.229]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4ea95ace09d3548bc1161edfa95c89c5) >>
+>> endobj
+11317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.024 637.817 387.529 648.229]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faa18fc748c5a86c2e15a55042507c63be) >>
+>> endobj
+11318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.242 637.817 522.913 648.229]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa9ac6d3cde851eed8f221afcb8d2e5688) >>
+>> endobj
+11319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 625.813 214.119 636.274]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa98468b76a0e91df3175d70d18aa21a25) >>
+>> endobj
+11320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 613.286 199.388 625.241]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa306141d2ab107dc27ade53d298bf5d76) >>
+>> endobj
+11321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 600.504 200.759 612.459]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0) >>
+>> endobj
+11322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 589.044 197.89 599.582]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a59b47bd36b7e52475bd001e282a19ca4) >>
+>> endobj
+11323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.839 589.044 356.496 599.582]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0af8eedf978cb4c7ed492bdcc32da9381f) >>
+>> endobj
+11324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.239 589.044 475.83 599.582]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a616bbcce14cb29a3731f396fcfebdd90) >>
+>> endobj
+11325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.572 589.044 525.406 599.582]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0aa2e509701103e21eb2cd55244609a705) >>
+>> endobj
+11352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 577.089 160.034 587.627]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0aa2e509701103e21eb2cd55244609a705) >>
+>> endobj
+11326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 565.134 214.836 575.671]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a1533ec18751ed7a728fd7fc9a7528d26) >>
+>> endobj
+11327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.288 565.134 345.126 575.671]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a2f5550a680bdbb7ce09be18d865343af) >>
+>> endobj
+11328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.578 565.134 450.966 575.671]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0ae0c232610b5155db9fd9191ebe48d40e) >>
+>> endobj
+11329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.418 565.134 525.406 575.671]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a0a111fd5ccca2fd8bdf7568e9c3a589c) >>
+>> endobj
+11353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 553.179 154.825 563.644]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a0a111fd5ccca2fd8bdf7568e9c3a589c) >>
+>> endobj
+11330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 540.728 234.06 552.683]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0afd3989234541acad5d6951325809653f) >>
+>> endobj
+11331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.052 540.728 347.644 552.683]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a520feccc0120a43c6b8510eb8d812a31) >>
+>> endobj
+11332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 493.206 213.464 503.744]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.95 493.206 262.527 503.744]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 480.425 218.315 490.962]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a7b07c33fffcd30294ec6c10fa531c531) >>
+>> endobj
+11335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.8 480.425 267.378 490.962]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 467.643 243.497 478.239]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_aa9335374f7596a4de1aaae70c8e227ae) >>
+>> endobj
+11337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 454.861 240.359 465.399]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_afd6aa24b3a04e64b24c8acdbc3f6c083) >>
+>> endobj
+11338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.845 454.861 289.422 465.399]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) >>
+>> endobj
+11339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 442.08 246.088 452.617]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a1c564621acc6111ea14e24f2b7900b52) >>
+>> endobj
+11340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 429.298 252.068 439.835]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a77b38d4439387e0336a618ba950ae916) >>
+>> endobj
+11341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 416.516 174.147 427.112]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_aeda280e48382848e55705c813e9da810) >>
+>> endobj
+11342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.071 97.165 261.551 106.076]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 89.844 190.697 97.555]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11347 0 obj <<
+/D [11345 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11354 0 obj <<
+/D [11345 0 R /XYZ 70.866 508.045 null]
+>> endobj
+3774 0 obj <<
+/D [11345 0 R /XYZ 70.866 402.432 null]
+>> endobj
+11183 0 obj <<
+/D [11345 0 R /XYZ 70.866 383.338 null]
+>> endobj
+3778 0 obj <<
+/D [11345 0 R /XYZ 70.866 362.569 null]
+>> endobj
+10786 0 obj <<
+/D [11345 0 R /XYZ 70.866 326.721 null]
+>> endobj
+3782 0 obj <<
+/D [11345 0 R /XYZ 70.866 292.633 null]
+>> endobj
+11180 0 obj <<
+/D [11345 0 R /XYZ 70.866 161.145 null]
+>> endobj
+3786 0 obj <<
+/D [11345 0 R /XYZ 70.866 126.999 null]
+>> endobj
+11181 0 obj <<
+/D [11345 0 R /XYZ 70.866 70.718 null]
+>> endobj
+11344 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11401 0 obj <<
+/Length 2703
+/Filter /FlateDecode
+>>
+stream
+xÚ­œKsÛFÇïú¨¤¶Š¬²Æó~ìž‹rœr¬ÌÍÅÉ&!‰ŠäPlûíƃÂÜ™‹EÛ@ÿÝÿ™î E³ûŒfï.~š^¼¾¶"³Äi-²é]f(±ZgÆq¢Y6]dŸGo~óïéäv|É2¾Ôœ®ß˜Ôÿruóö?¿N>NÇŒÓÑ›êÏéû›p™P®g²¹åÃûŸn®¯?ÜŒñº«ñŸÓ_.&Ó‹ÿ^0
+ÍX&´&’šŠm©ËæŸÿ¤Ùþó—Œálöµºô1ƒÁ9ø°Ê>]üx¡¡ÎŠÉí-‚onÁ’2bO
+ÅV3BÛÑý¸Èÿ ”¯ózDe^”ǃaœÎ]u'×çùÇã‚8æü!<÷¤„X8ž
+>ÜVžïB…!ZùÔN°oöô ó–âBÀ`M“'ôKAç­€Ÿ-8J”ø?,TSÀw ®F 4Å¥©Ÿfµü²¹»[mf‹Àä’XˆG
+6øÙúp-(æ˜ J̦ájJ$ó±ÅÓv»Ù•‡ÒÀ™TÍï£q¦`áS1aä0uPIž‰3ÙÀøõû›À¸aÓ å$PA‰¡Ð7·ï>°–)¥z®à:#ÒŒ\q"õî÷ÓÿõµTVj ³]e—«f¥¾ª³ã²\nÖu†œ•õÏղ͙\¹úÃæ®þ‰·¬òö2˜fð"8Ñ ©k\¦$||Všó†Ï'J×–$µ/N3ô 2UIb¸ô©óÍ"/ÆLÈÃs¦d "%Yåi+ ›Yð´#ÌÈú®ªPäãK!MÖcFGOùnöìù)fÍïÛƱW›9üÿº¬/8NÈÔO¹yc±¾ƒYp ‚»¤¶™–(@Uì@ZUµ%.›ä]ÂÞt¨CKL
+¤°„ ë#×›Pñ ³Í@Í›€ ÒÔùÌYå`Tól¹š}A}¬ò :²Km`É„²š£î”"`ºª\¼"”Sš¨¬Ç’6ã]-aU8¨{âé¨
+è;=ü‹z÷:i2Ô1úàÁ›ü%ßõº3ÁÄààX¨îU‚ØGœjÚ¢}¦b=cÍŸ1D :”`ñcCTòš÷´þk½Á ~]‡æ7,µV&@ãüvFúìZ¶»ž9]^.ÎqË|.&þ)Í´ 6,”ñ!CØ2Öeu¾Md(| ˜ŒS¢¡…÷ wOëyhÛ
+Ã`4ZsŸÛ
+…û)žg—eÛ
+˜9Š_¥ ÎRIVR,ؘ:XICÁ€E%à2(Ÿµô¹³Õj3ïqŒdDpÝ8ædA¨(„šêŽC¸¯{fþÆïó—Ÿ7üÀÊ!p£,V‚{¥O}!q8è‹R8›i˜fÒ„¸«§¾ìadµ¶ œ*ÒB¿èL¼"ÐtöLEÄã[ExüSŠH€­áQO*"¶QÄ·C-Š0À$6šhÁCÏÚ¯B[ïú U¡¶ÄØ*RíþÀpFã÷*ìòOª0Û¨°KÝå[ܹ‡‡ª·”X
+´Qð ÌgŸT¤I1¸²•X#˜Í*ÒvhÇ6Y¼‹-–÷ëÙ*ïí¼<~Ú3Õ|Ç€cØ`ÏÄb[Çt±­gxÏðú•`¼k8­ö½ël,èèû˜«Ñ¦„:Õ{ÜÕå¡)&pÿ7Á@°[QÚÈwò9γ¿vyñ´*û›.‡»*%y·QXR•8r[ÕÝïfÛmÊó#K0
+l+¤dþ0†; Ú lo:MX>NÐy£!*åÐiÏmæ¡Ç]äÅ|·Ü–Á t(*ñÕg2†ñ—9\L¸ÁÅ„€ÊGˆÝb¢íÂòî¼Åê-nÐ1ÊšYß_[Jè àª\¨JðpÇEU¬±Œ Ž‹2DòÍ'â\Ÿ—hú>.]üé¸ÄsÛ¸t¹U\xš¸@†U,A5†kÚÔÇehÿˆAJc2’á[|*}æ¶ÎÍEÎÊŠ»dHËœ9ŸÜ_êCЬLád<ü Ä—ûå+¶PI<mLµR{ÜÕ²(YÿjmÄÐ)ÁÑ4A燆d+ö—ÅÜ‹¯Ë"¾xr+¾.ù´øâ¹­øºÜÓâ‹ç¶âërQ||€øN¯|Ê — ÁDCjˆô¢{é=·õ¹‡y^áÒÚI›‚ŒÝ¬°]rõâõÛ2ÔiK¤KAÅsŒt—÷Uï–WgaŸÃÏ› hOƒžŽ~4± ¾‡þxt}}2þñØ:üµXÞ§
+ eìÐöà+– ÊFC¢)9^x÷ÂðÈ…L€e ì¤ÇÍ×÷øà÷Ú ï'€Bº”Üc>ÌÖ‹Þ³¿ÐÞ3:¸ÞÅÃ[)ÞŒ¡ÉØàXÄb÷¡èrOÅ"Ú„¢Ë\®ë£ÆßÒ„–oCSÄCàá¸A­€`„–
+õ—ûTí¸æÕ—¹ƒ5Laªjǘñ†
+endstream
+endobj
+11400 0 obj <<
+/Type /Page
+/Contents 11401 0 R
+/Resources 11399 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+/Annots [ 11397 0 R 11398 0 R ]
+>> endobj
+11397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.071 721.478 261.551 730.388]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 714.156 190.697 721.867]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+11402 0 obj <<
+/D [11400 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3790 0 obj <<
+/D [11400 0 R /XYZ 70.866 752.081 null]
+>> endobj
+3794 0 obj <<
+/D [11400 0 R /XYZ 70.866 679.034 null]
+>> endobj
+9993 0 obj <<
+/D [11400 0 R /XYZ 70.866 655.936 null]
+>> endobj
+3798 0 obj <<
+/D [11400 0 R /XYZ 70.866 637.324 null]
+>> endobj
+11184 0 obj <<
+/D [11400 0 R /XYZ 88.314 611.769 null]
+>> endobj
+11185 0 obj <<
+/D [11400 0 R /XYZ 88.314 595.86 null]
+>> endobj
+11186 0 obj <<
+/D [11400 0 R /XYZ 88.314 579.951 null]
+>> endobj
+11187 0 obj <<
+/D [11400 0 R /XYZ 88.314 564.042 null]
+>> endobj
+11188 0 obj <<
+/D [11400 0 R /XYZ 88.314 548.133 null]
+>> endobj
+11189 0 obj <<
+/D [11400 0 R /XYZ 88.314 532.224 null]
+>> endobj
+11190 0 obj <<
+/D [11400 0 R /XYZ 88.314 516.315 null]
+>> endobj
+11191 0 obj <<
+/D [11400 0 R /XYZ 88.314 500.407 null]
+>> endobj
+11192 0 obj <<
+/D [11400 0 R /XYZ 88.314 484.498 null]
+>> endobj
+11193 0 obj <<
+/D [11400 0 R /XYZ 88.314 468.589 null]
+>> endobj
+11194 0 obj <<
+/D [11400 0 R /XYZ 88.314 452.68 null]
+>> endobj
+11195 0 obj <<
+/D [11400 0 R /XYZ 88.314 436.771 null]
+>> endobj
+11196 0 obj <<
+/D [11400 0 R /XYZ 88.314 420.862 null]
+>> endobj
+11197 0 obj <<
+/D [11400 0 R /XYZ 88.314 404.953 null]
+>> endobj
+11198 0 obj <<
+/D [11400 0 R /XYZ 88.314 389.044 null]
+>> endobj
+11199 0 obj <<
+/D [11400 0 R /XYZ 88.314 373.135 null]
+>> endobj
+11200 0 obj <<
+/D [11400 0 R /XYZ 88.314 357.226 null]
+>> endobj
+11201 0 obj <<
+/D [11400 0 R /XYZ 88.314 341.317 null]
+>> endobj
+11202 0 obj <<
+/D [11400 0 R /XYZ 88.314 325.409 null]
+>> endobj
+11203 0 obj <<
+/D [11400 0 R /XYZ 88.314 309.5 null]
+>> endobj
+11204 0 obj <<
+/D [11400 0 R /XYZ 88.314 293.591 null]
+>> endobj
+11205 0 obj <<
+/D [11400 0 R /XYZ 88.314 277.682 null]
+>> endobj
+11206 0 obj <<
+/D [11400 0 R /XYZ 88.314 261.773 null]
+>> endobj
+11207 0 obj <<
+/D [11400 0 R /XYZ 88.314 245.864 null]
+>> endobj
+11208 0 obj <<
+/D [11400 0 R /XYZ 88.314 229.955 null]
+>> endobj
+11209 0 obj <<
+/D [11400 0 R /XYZ 88.314 214.046 null]
+>> endobj
+11210 0 obj <<
+/D [11400 0 R /XYZ 88.314 198.137 null]
+>> endobj
+11211 0 obj <<
+/D [11400 0 R /XYZ 88.314 182.228 null]
+>> endobj
+11212 0 obj <<
+/D [11400 0 R /XYZ 88.314 166.32 null]
+>> endobj
+10790 0 obj <<
+/D [11400 0 R /XYZ 88.314 150.411 null]
+>> endobj
+11213 0 obj <<
+/D [11400 0 R /XYZ 88.314 134.502 null]
+>> endobj
+11214 0 obj <<
+/D [11400 0 R /XYZ 88.314 118.593 null]
+>> endobj
+10833 0 obj <<
+/D [11400 0 R /XYZ 88.314 102.684 null]
+>> endobj
+11215 0 obj <<
+/D [11400 0 R /XYZ 88.314 86.775 null]
+>> endobj
+11216 0 obj <<
+/D [11400 0 R /XYZ 88.314 70.866 null]
+>> endobj
+11399 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F100 8905 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11405 0 obj <<
+/Length 2496
+/Filter /FlateDecode
+>>
+stream
+xÚ­œËv¹†÷z
+.Å…Ü/Ë[ÎxŽc%e5™‡lix"^B¶ì8OŸª»h£)ð 6:²Õ¬¯ñW¡Pt“Ïžf|ö׫®þòÁ«™gÁZ5{xœ9μµ3$³bö°šýzí˜Ðl~c¥¼þôñÇ»>ÝÍ%¿þáýü·‡Ÿ¯n®þs%ÀŸ‰™0’í»{fËÍÕ¯¿ñÙ
+þøóŒ3üìkwéföüò<ûåê™ûÆ0©|r#·÷÷¾»Ï€½cÁi
+pàÌZ€ßݽ¿ýÑì§ùtþúÃÇO·¯¿Ýß~¸½¿ýüþi•±×ï~úáï·÷¯t'Ùþ¼üýÝ»þíöóÃ\ ‚ÝχwŸ¿Pïï™—úÜx´Q ¹†ÄO¾å±áú?‡6•€ZÁx?Äå÷·óÊu—I{™¢ .Xf¤Kqûõ¾y^o›Œ'gA‡z¬PŠYFÃ<4‹ö•:Öiv£ SÒÌn„aÖÛ7uËÓ יbaª¹ƒ21øð²Í0µgV
+
+¦t"e>¾l—¾°’…àN¾poúBæ½'ð²`¨ÔÕÜÁ1øØ./øu›K±Š9o(ÐÆ2íLŠÎ‡LOÁtVŸ21 Žqà 8XÏIX©$—q
+ÅÜÍbO³Z)Ã…(
+ËVQ*J-uÐ$ƾlÉT‘œqOÐpXeœ)•¥;ès!¡®hdẻ™zYÀ¡T–jì KÌýzX—•|o¦m¾µ02¢´®Çöº$Üån?¦,ë¾2Æ)({ªaãpù-­†ë±ƒ41÷i~#øu“«M¥c&
+04¼Ò› À«CsœêÞ´`a©[ ”VŠ `DC¢´Z¨§^‰°'mr> ,p¬’àÝ`Íã”+tçÀRW€ç¬!¨ÜÐ6ž¨Æ¾ˆ¹‡æ¹Y³å»†O*
+®v…wÊ&tÎ/MåÞ‚%(ˆÐ³¥Ub=vðFÌ=N¥*.&˜ãjÄlÏlû
+¦|qWkfBW,«NEbƒkÛ—f›¬QÏ-RðןEiæ¤+•E Ɉ 8EC*œŠÄÿ½.m§®+¨†ÁˆêÙBx&RôîR¨Ö(€¸ž"·ÍS.EYèJH˜:0mGÌ}›§…uÛ0­fV˜ÏÍvj{ÁBZ,9N0Ñîk]rÕìSÈÅè³!WìC.Fž¹zfr1³=,¶ÇÇù«Ê™“\5Üf%ÜÃRâU
+?®OžˆÀ
+㡳 ·;cùr*2 ,8U¼Ls<¥#èŸÑt}Où¼^æöt²Ü@…pM©ÙaX§-|”
+)=±~zÙ½äæ¤Å•Ã€Á±NƺÚísáî_ƒ´ž ðó6e~i–íî0¹PjÆ,
+¼EߪßMÖÿÎÏíJ8Åœ,ž7ò´‡Rí 4¤î«íŒ0Üw»{õD<öÄ'WäÛŽé
+?¦«ç*åGž™:J†«}ñŽµtšOÐ
+£!×óÍ~7ýÆ‚TÝ3ÿõh!ñm
+ÏŸ‚¼¤¶ªGÊÄìåþ%W:H¦ SÆùˆÙ®7“}’{åîงNPΡ!©.)çêу;böywÔ3{wÄÌ6×°͸  ‚GGúö“q´Ý(;~yM™«,®›ZŽq+KWÃ1¥ªÇÒê’JµÜÇ[LλB æa®ÖµfÚÁ˜x~îËòï
+ŒÊâ
+endstream
+endobj
+11404 0 obj <<
+/Type /Page
+/Contents 11405 0 R
+/Resources 11403 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+>> endobj
+11406 0 obj <<
+/D [11404 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11217 0 obj <<
+/D [11404 0 R /XYZ 88.314 761.061 null]
+>> endobj
+11218 0 obj <<
+/D [11404 0 R /XYZ 88.314 745.375 null]
+>> endobj
+10791 0 obj <<
+/D [11404 0 R /XYZ 88.314 729.688 null]
+>> endobj
+11219 0 obj <<
+/D [11404 0 R /XYZ 88.314 714.002 null]
+>> endobj
+11220 0 obj <<
+/D [11404 0 R /XYZ 88.314 698.316 null]
+>> endobj
+11221 0 obj <<
+/D [11404 0 R /XYZ 88.314 682.63 null]
+>> endobj
+11222 0 obj <<
+/D [11404 0 R /XYZ 88.314 666.944 null]
+>> endobj
+11223 0 obj <<
+/D [11404 0 R /XYZ 88.314 651.257 null]
+>> endobj
+11224 0 obj <<
+/D [11404 0 R /XYZ 88.314 635.571 null]
+>> endobj
+11225 0 obj <<
+/D [11404 0 R /XYZ 88.314 619.885 null]
+>> endobj
+11226 0 obj <<
+/D [11404 0 R /XYZ 88.314 604.199 null]
+>> endobj
+11227 0 obj <<
+/D [11404 0 R /XYZ 88.314 588.512 null]
+>> endobj
+11228 0 obj <<
+/D [11404 0 R /XYZ 88.314 572.826 null]
+>> endobj
+10787 0 obj <<
+/D [11404 0 R /XYZ 88.314 557.14 null]
+>> endobj
+10789 0 obj <<
+/D [11404 0 R /XYZ 88.314 541.454 null]
+>> endobj
+11229 0 obj <<
+/D [11404 0 R /XYZ 88.314 525.767 null]
+>> endobj
+11230 0 obj <<
+/D [11404 0 R /XYZ 88.314 510.081 null]
+>> endobj
+11231 0 obj <<
+/D [11404 0 R /XYZ 88.314 494.395 null]
+>> endobj
+11232 0 obj <<
+/D [11404 0 R /XYZ 88.314 478.709 null]
+>> endobj
+11233 0 obj <<
+/D [11404 0 R /XYZ 88.314 463.022 null]
+>> endobj
+11234 0 obj <<
+/D [11404 0 R /XYZ 88.314 447.336 null]
+>> endobj
+11235 0 obj <<
+/D [11404 0 R /XYZ 88.314 431.65 null]
+>> endobj
+11236 0 obj <<
+/D [11404 0 R /XYZ 88.314 415.964 null]
+>> endobj
+11237 0 obj <<
+/D [11404 0 R /XYZ 88.314 400.277 null]
+>> endobj
+11238 0 obj <<
+/D [11404 0 R /XYZ 88.314 384.591 null]
+>> endobj
+11239 0 obj <<
+/D [11404 0 R /XYZ 88.314 368.905 null]
+>> endobj
+11240 0 obj <<
+/D [11404 0 R /XYZ 88.314 353.219 null]
+>> endobj
+11241 0 obj <<
+/D [11404 0 R /XYZ 88.314 337.532 null]
+>> endobj
+11242 0 obj <<
+/D [11404 0 R /XYZ 88.314 321.846 null]
+>> endobj
+11243 0 obj <<
+/D [11404 0 R /XYZ 88.314 306.16 null]
+>> endobj
+11244 0 obj <<
+/D [11404 0 R /XYZ 88.314 290.474 null]
+>> endobj
+11245 0 obj <<
+/D [11404 0 R /XYZ 88.314 274.787 null]
+>> endobj
+11246 0 obj <<
+/D [11404 0 R /XYZ 88.314 259.101 null]
+>> endobj
+11247 0 obj <<
+/D [11404 0 R /XYZ 88.314 243.415 null]
+>> endobj
+11248 0 obj <<
+/D [11404 0 R /XYZ 88.314 227.729 null]
+>> endobj
+11249 0 obj <<
+/D [11404 0 R /XYZ 88.314 212.042 null]
+>> endobj
+11250 0 obj <<
+/D [11404 0 R /XYZ 88.314 196.356 null]
+>> endobj
+11251 0 obj <<
+/D [11404 0 R /XYZ 88.314 180.67 null]
+>> endobj
+11252 0 obj <<
+/D [11404 0 R /XYZ 88.314 164.984 null]
+>> endobj
+11253 0 obj <<
+/D [11404 0 R /XYZ 88.314 149.297 null]
+>> endobj
+11254 0 obj <<
+/D [11404 0 R /XYZ 88.314 133.611 null]
+>> endobj
+11255 0 obj <<
+/D [11404 0 R /XYZ 88.314 117.925 null]
+>> endobj
+11256 0 obj <<
+/D [11404 0 R /XYZ 88.314 102.239 null]
+>> endobj
+11257 0 obj <<
+/D [11404 0 R /XYZ 88.314 86.552 null]
+>> endobj
+11258 0 obj <<
+/D [11404 0 R /XYZ 88.314 70.866 null]
+>> endobj
+11403 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11409 0 obj <<
+/Length 2234
+/Filter /FlateDecode
+>>
+stream
+xÚ­œËvÛ6†÷~
+.¥…QÜ/Ë&‘Ûô¤q뺫¦ E¢mêâJrÓ¾}”4%³‰|bz>ðŸ_À @‰V­~¸zwõÝ•%NkQÝ?T†«ue'šU÷óêÑû¿ÿå~r7¾æÆŽ _kÎG7?Mÿóáöýï?O>ߧ£ï›ï?Þ~†Ë„Òp=“Ç?ùôñÝíÍͧ۱¿îÃøÏûŸ®&÷W_1
+­X%´&’š†m©«f««?þ¤Õ~ùSE‰p¶úÖ\ºª`p~XV¿]ýÚsB;B]z“»;¾½{ –”+8XRIç©|·&¿y4ùñ Ø«tw“›ÉÝäóûÉÛ1µy°–X.Ï I*A”aTô˜[ç®%ÄLVF3BÛQÎÞÁ PÅ4—q'J‚s41)n[?o¶ íß‚à[Nf\Á-Øý²þk½35ú¶îAkE”“hm ·‘÷‹U½í:JŒÄ€Bʤè@×›yÝ0»Æ¨®U„qxUÄ1qÑR! ‚ Ïo†ŠÑÁ
+1{˜ÊÙ­bö~;Õý^àŠaPar’¥Ô³fDCv†º»Ækån€@\¨7£ƒböæá ¥b3ŸH¯¬ƒi™3} €5%CŸbtÐ'fë!
+ø½âD¡ õn‰ûé˜ÑÑã‰|HCÌp¿jgˆ¦¶<>„*ax>ÊÑm>ön?Ý×(^Õ–_!h$^Ú£ƒ61´‰ÑÅÁZ`,GÈ/*VäTŒÅìÅz$tP©:i 69Ê“ƒ2z¹y\̦ˬ’†Uð.6,ÁÎÀ¯p»§Öhhà¯ç¦e§jvȨ¬¤£CRböó“Wç¿Ý‰ÔhN¨qp IÖ.…_ȶU©Á¹a:fˆ…®!#7Åè›”ý¸ØíMñtB9aê@OïDN·YLâÄè0Ïvê&˜C¸B`JNS)óáe=;‘ ˜Ã8eC“¡¬&œ!t|>e9_9ºMGžmë¶hêLîœÀ‚@UŠÈô«Ÿ=^úæ-×,)XÛ%%á>mv§Öx+sÖe`0¡×óÍéõÊÑÁ1û’Ê©GÄÐË>(Ƕ>ˆ¹«Å Ç0{‡Pû@Ìå´´åè`ƒ˜½«×ó(t–‚
+ (TxΉú¼Y¬÷½û€–B0tfV@ÇÙz>…~ºßNÃêaÁd%¿ÄMN+]Ž>ˆÙàƒ>¨”Ä¿+Ë™`(•O›À
+¡n÷¤ÊÙ )G7Äì³iQ~Kƒ¬ â.%ŸÉ
+Ô ¾Ú˜Ùœ+•çÄÇQ9f1¸ÍHL~Ýîì]¬Ë™Çµ:a.×Ç ‡žd0¢aZš ‹ Gè¥| N“‘ŽbtÈGÌ>+N^×3\†aUdX–W‹ÑAœ˜ýmŠ´¿*¥ ”"œ#IyXß3¤)Fiböl³z~A:¹ÜjNu$×ÄÚœŠrtP'eÏêÅ?½­©!Ür ®‚™Îð”{º …ùÐ: ©ýã Êv´>[ƒ@[b·%’A½kN±$ƒ>ÌäìR”£ƒRvã…yÿŽ·Ñ ¬”,Ÿ1ƒ&®Bà:G¨V)÷œà:£·'·´a¯Â¢:g¯¢Ýš!awŽ4;EˆbZZ¨jTŠöd¨…Çð–Õ}|¨ ¨Ñ|£ÁØ:åŸÙÐnÚšÁ0 ãˆ;>Œ9®(FWÄìüžâçìEhÿøBKïq‘ÓÒ—£ƒ:1{7›îûç1èàŒ7l9ª>©uÊ=ßÓ›¦§G@ÃÊ,UGî³ë)±Ûõ”_´ƒßµâ=½$xNQ^ŽvˆÙ—vx°ÇžÛºaÌÕhóÒwÛŽA_¯1øÎð锡IJnøü)˜®¹ÜJˆG”’ƒ!bôåù¡ÛN1v€!D³ÑSŽÁ9U)þ¬ øax•—i‡°©áI—Ó~•£ƒ#böåÔhh‡,Æ­3˜¶•éÜû™Ü_[ ógŠ[*>²9ÝP9ºMMÂ~Y£>iÂ-¼„ÉÌÒ&§C(Gbö¼Þí›'•6ÍÃR8*iCœBØ`ñŒÊ©˜ËÑA¥˜½ z|£=É'T"l=pň•9•s9:¨³#•pßuB&úr.€'rŠÊÑA©˜)õ…R¾^àèÄ)á ¡SõhÖäTL2Eèö”ζkƒC@J “L‘¯‰éß@sNb 56EÛúäó¢Pš~æ†SIEèÉ} ¨îrŒPŒFˆÙçPÎl0Y¡œÝZ!f?<ï·Nð'øÂ!´ã>ô‰N(G·NHØQVo˜Õt¹ÜÌPæÏæA8„²ÅÇá6§S-&­bô­¶5Κ߲P¡‡ó„ÎéáÊÑA«˜ýF«érñ¸Æµ—¤D+„îÊòŸÈ­D‹Ù§DÃó—ÄH„~ËR2§¤)GÉbv$Ùtö÷Ëb‹$õŸùǘ» æ9-W9:³“fbYOw8Bù83„¦ âvîÏ‹ç¾ãwîOšt9” Z넺šþÛW9P!¡EL%ĵÿdíËêk§­ûîZÉ׿¼Ö UÕ5‡òì8Q|¨mÎ~±Y¾Æbº?¼.ëúð3‡×ÍÃáÕÿŲn¯úš~Ò:¹io0 ¥†aÍépÖM'CçÜ4Ÿv<~‘F3ôz»Ýôlöri …vLȘ.aÎ6ózç·ÉI¤îûºæqÀœ/ûhÆ
+endstream
+endobj
+11408 0 obj <<
+/Type /Page
+/Contents 11409 0 R
+/Resources 11407 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11042 0 R
+>> endobj
+11410 0 obj <<
+/D [11408 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11259 0 obj <<
+/D [11408 0 R /XYZ 88.314 761.061 null]
+>> endobj
+11260 0 obj <<
+/D [11408 0 R /XYZ 88.314 745.148 null]
+>> endobj
+11261 0 obj <<
+/D [11408 0 R /XYZ 88.314 729.235 null]
+>> endobj
+11262 0 obj <<
+/D [11408 0 R /XYZ 88.314 713.322 null]
+>> endobj
+11263 0 obj <<
+/D [11408 0 R /XYZ 88.314 697.409 null]
+>> endobj
+11264 0 obj <<
+/D [11408 0 R /XYZ 88.314 681.496 null]
+>> endobj
+11265 0 obj <<
+/D [11408 0 R /XYZ 88.314 665.583 null]
+>> endobj
+11266 0 obj <<
+/D [11408 0 R /XYZ 88.314 649.67 null]
+>> endobj
+11267 0 obj <<
+/D [11408 0 R /XYZ 88.314 633.757 null]
+>> endobj
+11268 0 obj <<
+/D [11408 0 R /XYZ 88.314 617.844 null]
+>> endobj
+11269 0 obj <<
+/D [11408 0 R /XYZ 88.314 601.931 null]
+>> endobj
+11270 0 obj <<
+/D [11408 0 R /XYZ 88.314 586.018 null]
+>> endobj
+11271 0 obj <<
+/D [11408 0 R /XYZ 88.314 570.105 null]
+>> endobj
+11272 0 obj <<
+/D [11408 0 R /XYZ 88.314 554.192 null]
+>> endobj
+11273 0 obj <<
+/D [11408 0 R /XYZ 88.314 538.279 null]
+>> endobj
+11274 0 obj <<
+/D [11408 0 R /XYZ 88.314 522.366 null]
+>> endobj
+11275 0 obj <<
+/D [11408 0 R /XYZ 88.314 506.453 null]
+>> endobj
+11276 0 obj <<
+/D [11408 0 R /XYZ 88.314 490.54 null]
+>> endobj
+11277 0 obj <<
+/D [11408 0 R /XYZ 88.314 474.627 null]
+>> endobj
+11278 0 obj <<
+/D [11408 0 R /XYZ 88.314 458.714 null]
+>> endobj
+11279 0 obj <<
+/D [11408 0 R /XYZ 88.314 442.801 null]
+>> endobj
+11280 0 obj <<
+/D [11408 0 R /XYZ 88.314 426.888 null]
+>> endobj
+11281 0 obj <<
+/D [11408 0 R /XYZ 88.314 410.975 null]
+>> endobj
+11282 0 obj <<
+/D [11408 0 R /XYZ 88.314 395.062 null]
+>> endobj
+11283 0 obj <<
+/D [11408 0 R /XYZ 88.314 379.149 null]
+>> endobj
+11284 0 obj <<
+/D [11408 0 R /XYZ 88.314 363.236 null]
+>> endobj
+11285 0 obj <<
+/D [11408 0 R /XYZ 88.314 347.324 null]
+>> endobj
+11286 0 obj <<
+/D [11408 0 R /XYZ 88.314 331.411 null]
+>> endobj
+11287 0 obj <<
+/D [11408 0 R /XYZ 88.314 315.498 null]
+>> endobj
+11288 0 obj <<
+/D [11408 0 R /XYZ 88.314 299.585 null]
+>> endobj
+11289 0 obj <<
+/D [11408 0 R /XYZ 88.314 283.672 null]
+>> endobj
+11290 0 obj <<
+/D [11408 0 R /XYZ 88.314 267.759 null]
+>> endobj
+11291 0 obj <<
+/D [11408 0 R /XYZ 88.314 251.846 null]
+>> endobj
+11292 0 obj <<
+/D [11408 0 R /XYZ 88.314 235.933 null]
+>> endobj
+11293 0 obj <<
+/D [11408 0 R /XYZ 88.314 220.02 null]
+>> endobj
+11294 0 obj <<
+/D [11408 0 R /XYZ 88.314 204.107 null]
+>> endobj
+11295 0 obj <<
+/D [11408 0 R /XYZ 88.314 188.194 null]
+>> endobj
+11296 0 obj <<
+/D [11408 0 R /XYZ 88.314 172.281 null]
+>> endobj
+11297 0 obj <<
+/D [11408 0 R /XYZ 88.314 156.368 null]
+>> endobj
+11298 0 obj <<
+/D [11408 0 R /XYZ 88.314 140.455 null]
+>> endobj
+11355 0 obj <<
+/D [11408 0 R /XYZ 88.314 124.542 null]
+>> endobj
+11356 0 obj <<
+/D [11408 0 R /XYZ 88.314 108.629 null]
+>> endobj
+11357 0 obj <<
+/D [11408 0 R /XYZ 88.314 92.716 null]
+>> endobj
+11358 0 obj <<
+/D [11408 0 R /XYZ 70.866 70.718 null]
+>> endobj
+11407 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11413 0 obj <<
+/Length 2644
+/Filter /FlateDecode
+>>
+stream
+xÚ­œËv7†÷zŠ^’ç„P¸/K;ÇceÍ*É‚¡(›g$R›“dž~
+Ý hõ °‘h™¬ú»PU VŸ+Zýãâû»‹o¯ ¯ ±Jñêî¡Ò”¥*m(VÝÝW?/4a‚,W
+`ññÃ÷7××o–@ß].½ûáâêîâ÷ †ÖhÅ*&Hašj«ÍÓÅÏ¿Òêÿó‡ŠnMõGóÖ§
+í[|ñXýtñ¯q0) p äêöÖonÀF«E °¥D)ßÝ\^ýäÐäýrÚ,®?|¼j_Ý^]_Ý^}z‡ÿT\ªÅ»÷ßýxwuÛþ§î¦íõí—7ïþýÏ«OwKæf°ùy÷áæÓÛ ò~0†S×#$Ç9ç_/‰†¾•C¾UŒPiÛý’ÑÅé©ÞÍÃ/”òÃúþýáXÿøe}Ü6#ó&¿½2°·ÄV­˜$̨ÎG½í‹û½®/‘…WKx¯–
+K-”¬EÐúP¯¨š@e jŽSƦ¦¸/‰je$QèßSD(=+Æ/æË
+@5®º
+bèýöù8ž&‚&Y
+Y@
+ i“‘Íõ‚¹3‚ÈgzA„Ðõããa3$ Z•˜a¦­7Åé‚0®TL_"pZ™eø' É‚ÈæzA„ÜAä3½ Bè\„ȧúRŸvÇ!ZK,VoùP €K›‰¡÷ëz=";Æ#’uÇðvõ£3$!¹~ÌçzÝ…ÜÝå3½îBè\ ʧú@R¿J §;A0è`Z _#{±oDÔƒÙx¢þ$ÊdÂÕ¢2¹pÍçvú‹¸Óú+ÀìôAÛýÐujÞ´/
+@Q~}æóa·¯g×?ÅUj¥,±Ó¶€ ÐNz:”Mõ"¨3È&z ÈÏëúKwCö4€0.
+@ëIÆ×¹Û?ŸêÑlË#–'
+”Ç΃äò8ŸëÝrgüŸÏô¡OëÁ̇â
+dJ01˜ibæn?ôè‹'UÂ¥ +l%{>^ô€r¬½l(PE8³14mÙsÝzôoªä…"Fh8CJ&7ò¹^ò!wFòùL/ùzÚ‹¨¡(X:(z Ä‚(´X´2#GDy¾4ª
+0; DДhP
+¯Ù¦v!„¤
+
+“5h>±+A£©=Õ#»ßx bóH/&Ž 8ÿ”å#Ë"db&Žë½NÞ.$V«²@ÇEŒË2¹ã’ÏõR¹3ZÏgz±‡Ð™ò³
+´ACù³ä6H>×Ë0äÎÈ0ŸéeBï·ÇúÅ©âà~ü5†qU¬Ó *YÌ?c[ÁÜ7y]Æq% ôEœ!!“3Ð|n'ˆ;-ÌNôiýçp
+º”U=æóìá
+—g^ ™ã qŒ|©
+Èæz„Ütäã½BþŒò¡^ ÑEÏ,<µ Bª
+œ8!›ó±©ZÈæz-„Üt-äã½BþÄ# MÚ+Àµ´éDÜÉ­u W%*’w¹2@Úëâ6¹ÛÏõŠ¹éŠÈÇ{E„|¼`n·„A®VÄ°w ú&UqçRóñÍ3[ÝÿlŽ™Š‘É`œ0^ Ãá•Øôglù\/Ç›.Ç|¼—cÈŸÞ¡,,Ù3 'Ö}×C¶gœ!¡’‹Ì|n癈›ì™øÎ3tK¶;×_b²™1„«ÞdO>
+g”â'ŸÌ`†6)O¾0ã±6¹ÎÌçz=„Üt=äã½BþËöqë»K=AXŒ·E.SEƒRˆ¸³ ӘЪx÷@@ö/{|áàŒØôCLqœÕjD;’'—¹ÙX/Æ›.Ælº×bˆi‘+%ˆîdÌ›o£Ý&s»ãÀhnwœ Jô¹Ç„»ãÎ’ô‡cfÚã¨]{<¢öÇ™CY7È9Eó|¥wZ¤tqåïë”_6§§í¾^7zÛq§hÎÖΗœ.»É¶xÕ
+*,uäÅRðyIÀžûñ·_ùd5Á7»‚ˇ›i0nšš,ÌñREhTHó
+üX7JœMÖ¾)q ñ–3ª½a|0)ÈÉ¿ã(®ÄÂVÚ}Å™Ì 6Xs(nýw¦NÒÙ(¶}s®BÎùÞ¶V7²²î|I»
+endstream
+endobj
+11412 0 obj <<
+/Type /Page
+/Contents 11413 0 R
+/Resources 11411 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+>> endobj
+11414 0 obj <<
+/D [11412 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3802 0 obj <<
+/D [11412 0 R /XYZ 70.866 753.613 null]
+>> endobj
+11359 0 obj <<
+/D [11412 0 R /XYZ 88.314 727.795 null]
+>> endobj
+11360 0 obj <<
+/D [11412 0 R /XYZ 88.314 711.328 null]
+>> endobj
+11361 0 obj <<
+/D [11412 0 R /XYZ 88.314 694.86 null]
+>> endobj
+11362 0 obj <<
+/D [11412 0 R /XYZ 88.314 678.393 null]
+>> endobj
+11363 0 obj <<
+/D [11412 0 R /XYZ 88.314 661.926 null]
+>> endobj
+11364 0 obj <<
+/D [11412 0 R /XYZ 88.314 645.459 null]
+>> endobj
+11365 0 obj <<
+/D [11412 0 R /XYZ 88.314 628.992 null]
+>> endobj
+11366 0 obj <<
+/D [11412 0 R /XYZ 88.314 612.525 null]
+>> endobj
+11367 0 obj <<
+/D [11412 0 R /XYZ 88.314 596.058 null]
+>> endobj
+11368 0 obj <<
+/D [11412 0 R /XYZ 88.314 579.59 null]
+>> endobj
+11369 0 obj <<
+/D [11412 0 R /XYZ 88.314 563.123 null]
+>> endobj
+11370 0 obj <<
+/D [11412 0 R /XYZ 88.314 546.656 null]
+>> endobj
+11371 0 obj <<
+/D [11412 0 R /XYZ 88.314 530.189 null]
+>> endobj
+11372 0 obj <<
+/D [11412 0 R /XYZ 88.314 513.722 null]
+>> endobj
+11373 0 obj <<
+/D [11412 0 R /XYZ 88.314 497.255 null]
+>> endobj
+11374 0 obj <<
+/D [11412 0 R /XYZ 88.314 480.788 null]
+>> endobj
+11375 0 obj <<
+/D [11412 0 R /XYZ 88.314 464.32 null]
+>> endobj
+11376 0 obj <<
+/D [11412 0 R /XYZ 88.314 447.853 null]
+>> endobj
+11377 0 obj <<
+/D [11412 0 R /XYZ 88.314 431.386 null]
+>> endobj
+11378 0 obj <<
+/D [11412 0 R /XYZ 88.314 414.919 null]
+>> endobj
+11379 0 obj <<
+/D [11412 0 R /XYZ 88.314 398.452 null]
+>> endobj
+11380 0 obj <<
+/D [11412 0 R /XYZ 70.866 375.332 null]
+>> endobj
+3806 0 obj <<
+/D [11412 0 R /XYZ 70.866 337.553 null]
+>> endobj
+11381 0 obj <<
+/D [11412 0 R /XYZ 88.314 311.735 null]
+>> endobj
+11382 0 obj <<
+/D [11412 0 R /XYZ 88.314 295.268 null]
+>> endobj
+11383 0 obj <<
+/D [11412 0 R /XYZ 88.314 278.801 null]
+>> endobj
+11384 0 obj <<
+/D [11412 0 R /XYZ 88.314 262.334 null]
+>> endobj
+11385 0 obj <<
+/D [11412 0 R /XYZ 88.314 245.866 null]
+>> endobj
+11386 0 obj <<
+/D [11412 0 R /XYZ 88.314 229.399 null]
+>> endobj
+11387 0 obj <<
+/D [11412 0 R /XYZ 88.314 212.932 null]
+>> endobj
+11388 0 obj <<
+/D [11412 0 R /XYZ 88.314 196.465 null]
+>> endobj
+11389 0 obj <<
+/D [11412 0 R /XYZ 88.314 179.998 null]
+>> endobj
+11390 0 obj <<
+/D [11412 0 R /XYZ 88.314 163.531 null]
+>> endobj
+3810 0 obj <<
+/D [11412 0 R /XYZ 70.866 123.931 null]
+>> endobj
+11182 0 obj <<
+/D [11412 0 R /XYZ 70.866 102.386 null]
+>> endobj
+3814 0 obj <<
+/D [11412 0 R /XYZ 70.866 81.139 null]
+>> endobj
+11391 0 obj <<
+/D [11412 0 R /XYZ 70.866 70.718 null]
+>> endobj
+11411 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11422 0 obj <<
+/Length 2848
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\ËnGÝë+ÉF¬rUÝzƒ[Ê8p쌬,vŠDÉdJCRqò÷sn?HV³I6Ùe#³‘±»Î­û<·’Å]!‹~¸<z~¨":GÅåmá¥Î>jáTqyS|8~ù¯¿\ž]œœjŽ½89uZŸ¿~sVýåÕ»—¿þ|ööòDiyü¢üyùúÝÛ“S¥¬³xAÙú7¯xw~þæÝ ?øêä·ËŸŽÎ.þ{¤ ‹,Ta ¥t d,®?}øM7øò§B
+Š¡øR>ú¹€tî‹÷Gÿf:™ÆÏï/+‘—Â_œŸ]œ½}y¶.M£‰DÐf›0Æ’°†òÈUíÚ.í:%d#×'$Æ7ë@xétù´v½µ±ò¾:îûúºÐÑ <œÈ|?þýáö£”ôpÕ!·¢°˜æ de”°¶¥¯éèña
+ëÉãy´ ByŸºËT³§Ç%vé?¥•'§ñx4²_ãë5¡49¡\¡4+ÖúT¨ù_£ƒ>?ÇH+[L²zj<y|êЗ^h­-E pª%ÚÕ‰’ÇwÏNN™c!D%f2'è&z׈ }*~¨8ÕÖ É l!­®¾¾æñ>]M+å_?LfójHe
+à;L£~oi9¤¤\/Œ7Í3ÛœÙ!•-<|Qï›”R—ÂŒ¼¬F’©D¾Cž”Ç£.W†ú s
+üy4›Uæ©$èð ¥…3×HÇÒ·f>›OÛ14žÌ;™¬ ¯S}žÝ½|¸uXf´æIÏÏ]yèT#.Œrµ_ÕŽújûëÉx>~˜TB]Õ~?žŒªODÕï‡ÛFl©ïGÍSÛò!”'¢A&Ö
+ÅÐï§ÈDz6‰#IŠhÃB#âZTQ£´CµŠüAXYGÍÅè–kÌh:š\n*‰çdõWõ¹Î¨¦;£Â Gþ—A8kÏnˆü\ŽdÕ+ÿïtýÀ 3æÀäêmcŠùéaÖ•
+¥„*>”í-‰RÐÙüê®+ÈH•†Ê€JF¨¨Û¨S/†g=Œ­}I4ƒ4AƒË¹ÆÖ )Jù˜`*Aú³Ìs]š'èËséŒK„b¢Ô.Í_Mnz˜ÀH䥘à Ô( ÔÃL—}090U(ëj‚9¿švâDÊ‘ZŒ1ÂéÐ+âŒóPp3.Bm~£Ý»èÎ)Æ‘y KůÂkÏlçÊV
+­¨p>¢AdÙje5’"¿“Ù8ÇE\
+ôT+fT¨°6ÍwQ)[†âpx]µá¢Rã îvq(eéðûs(§&QÊ Y@ï6• å‘,ª‘d¨Ãí"ÅÊãšJµÃVw‰¯¶f¿°ÕèË϶ɻÞa;·ÛUØí²¬ 9æ­ßšwG mkéÑš rc½P^¥Â êéIZa9R‘-MP¹Ö¦%[m¦uFj"DÚ®Ì"ÂëöNÚèÁÉCB%*KòÀH^mHH õ@UFÝ}YÓôaëÁfœ
+¢j$-wp-Å}“Ž9`/KÇ–¹ÖnÑÞÀ醓uj,ÝTf‘mKc=öãóT“C
+QDå!èá±È#yú¦—B”®Îú ¿Â#iês)$f})$ÁÜ~)d8hs)$Ýq)$j})¤…zÐ¥ ÒÔ—Bv»¹’³¾’`î¼2·¹²Cóû]
+.Vs)d· šK!0ëK! æ®K!`ëK!}"®¹’µ¾²Éî=.…r ª2^†ˆRÄF‚ÿÿƒ
+endstream
+endobj
+11421 0 obj <<
+/Type /Page
+/Contents 11422 0 R
+/Resources 11420 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+/Annots [ 11416 0 R 11417 0 R 11418 0 R ]
+>> endobj
+11416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 341.983 232.76 352.579]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8c_a0ec0d87f35014a90d0ebe5494aa0de16) >>
+>> endobj
+11417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 289.621 174.147 300.216]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8c_a5ff1c71d42d185d08e842e4d01e043a1) >>
+>> endobj
+11418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 275.575 243.497 286.171]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8c_aa9335374f7596a4de1aaae70c8e227ae) >>
+>> endobj
+11423 0 obj <<
+/D [11421 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3818 0 obj <<
+/D [11421 0 R /XYZ 70.866 751.566 null]
+>> endobj
+11392 0 obj <<
+/D [11421 0 R /XYZ 70.866 751.566 null]
+>> endobj
+3822 0 obj <<
+/D [11421 0 R /XYZ 70.866 731.515 null]
+>> endobj
+11394 0 obj <<
+/D [11421 0 R /XYZ 70.866 706.461 null]
+>> endobj
+3826 0 obj <<
+/D [11421 0 R /XYZ 70.866 668.642 null]
+>> endobj
+11393 0 obj <<
+/D [11421 0 R /XYZ 70.866 657.938 null]
+>> endobj
+3830 0 obj <<
+/D [11421 0 R /XYZ 70.866 618.273 null]
+>> endobj
+11395 0 obj <<
+/D [11421 0 R /XYZ 70.866 581.263 null]
+>> endobj
+3834 0 obj <<
+/D [11421 0 R /XYZ 70.866 543.445 null]
+>> endobj
+11396 0 obj <<
+/D [11421 0 R /XYZ 70.866 532.741 null]
+>> endobj
+3838 0 obj <<
+/D [11421 0 R /XYZ 70.866 493.075 null]
+>> endobj
+8727 0 obj <<
+/D [11421 0 R /XYZ 70.866 480.6 null]
+>> endobj
+3842 0 obj <<
+/D [11421 0 R /XYZ 70.866 461.611 null]
+>> endobj
+11424 0 obj <<
+/D [11421 0 R /XYZ 70.866 357.369 null]
+>> endobj
+11425 0 obj <<
+/D [11421 0 R /XYZ 70.866 305.007 null]
+>> endobj
+3846 0 obj <<
+/D [11421 0 R /XYZ 70.866 258.755 null]
+>> endobj
+11426 0 obj <<
+/D [11421 0 R /XYZ 70.866 238.507 null]
+>> endobj
+3850 0 obj <<
+/D [11421 0 R /XYZ 70.866 216.709 null]
+>> endobj
+3854 0 obj <<
+/D [11421 0 R /XYZ 70.866 186.341 null]
+>> endobj
+11427 0 obj <<
+/D [11421 0 R /XYZ 70.866 166.093 null]
+>> endobj
+3858 0 obj <<
+/D [11421 0 R /XYZ 70.866 144.295 null]
+>> endobj
+11428 0 obj <<
+/D [11421 0 R /XYZ 70.866 119.241 null]
+>> endobj
+3862 0 obj <<
+/D [11421 0 R /XYZ 70.866 81.423 null]
+>> endobj
+8728 0 obj <<
+/D [11421 0 R /XYZ 70.866 68.871 null]
+>> endobj
+11420 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11585 0 obj <<
+/Length 9487
+/Filter /FlateDecode
+>>
+stream
+xÚµ}Ë’ÜÈ‘í¾¿¢Ìî†4»…‰‡Çkq- [£1=f$Þ•4‹ìª$™6UY5•YêéùúñHT#@ èp.$£Ä$N
+ü«v\kTGKÜóîG쌇ùÝÄÄê‹ùÖ¤ŽÜe7}8b¾>î_vçÃÓQlOí/ÏíW¢é&ñcŒï—Þ%
+üãü€O ›®ønÉwVë>ý
+¶%~u›6?`f‡*Ó󓼿|„û×ÇÇ÷Ú½ûyF7ðÛ*c–®y«·ýå [Q¾1wxÃïðÿz¥¬þïu%Èš|NºÎ«(ñyycš4ù¼w3ˆÑ2#D}§TštÿÞªwÿ8ÜÍìaÃÆNÙh¶j“W=œf
+&Ûˆ †.Ù‰tÇ_>ÕÃaÆ”Yk;
+Aßzöýú`½é,Il{ë]§ìd/\,Èû fʨH`±Ó›¨Ê 2®sìK ²VT®D<í3t`Ÿ ÓQ‚Žäس :~z=ν©ìÎx PŽMÞôù¼ž·.4/›c¶.±‹7Ä36D[Þ¹L:"Ž^l‹ ÑŽwnÿ¤ iÙj1s
+ˆÆvžR‰ø²¿Û²ªØÏБã1l Ó%ö<1t°¼¯(‹5W‚n!Æ5£¡âÛÇl[¥aÒÙD0ìJ[/ˆ(jƒkùÎA ¶#s4¡•È»‡‡§;1Cî$6g6äT—I6ä>‰ †·mþµP´Äçɦ×Hìælzµ®ž x+ Ä`x+›ñõøŸÇ'ÄP?gì‹b–+ 2oPŸ&d轫—9 Ny‰}Jaº/qÏ??ï76˺…]ò † ‘6ï!ÃÆO
+.Õ [;â`ØƈU'Xʨßq°©Äß_ðgò¦ì¦$/ëK×—¸‹Ädé$ò¾‘rþj÷áuKHfUZÐä켆(ñ ï
+¾ÊFà ¥ ‚ȼŠa#çMUÙŽïCGƬd£aV+Á
+ìH†V²¶Ú'‰÷…­¶QO¿÷y.“Š_Jè8ËÚR…ø w€u¡S"ŸÇ%¶UþÛÌ?-˜ù§7òß&ƒ'Hà'×yçWòŸ˜Š
+àsYõ÷eÿüôòþ–Ô»>’å/$ö‘ê´ÿ–™xwk%!Š¾ ©®‘)±UÕ™q
+¸¼Å8áÞýî¼ÛPYyiÚb0m`gD$¢ç'i½"¢oG æqŽŠÚ²â‚$S1R(!‡«“¦O09"Ä…Ûs®™è„»Ï"Ÿ&ñ°¡.ÿs=X;¢Q¸/>aÜìQ¾a–Ë·M¾Æþøùpœ;["¶¼ÚaÙvç y ûew¼—ºêɱ¦—X' †­Â«`]µ
+×Ê€Êo]WÄDðFBB_ƒ‰2XL8Ò9"j%¦ÉN¤r÷²ß·ÜG!×i¿)ÀŹ¬ pM]µ×툃½#.gÃq52ˆ¼©Ã!ÕäMguîäã¬vLvQ[`.\ìLšM°‘
+w% áÖ E˜
+ô¢ˆ©9õùøK`©Ha[M¢ÎÀ¸·#&œ\S‰ø?ø8û—§9oã÷‚
+„fLœP@qŸö¢}·¤Æ’_âùÉ2KEO઴7P'IB ¸ØãD ǧã|Å‚•ØÛ(XPaòŽOÇóáóëÓëiþ¾{òȸïŽv\%ûžž÷ó·Ýs榔·vLÆ }ty749n$ å¶F`±¤ûêû)·=ÐB”ÛL´ÐÓãóÜ… Ý)‰]F(5š(„ê¼Xp#²É1>2M7ùµ¦”/vKìv—/vOwû/C°ç¯dà^®d¸×ú;Ž{N¶æ@¬ÉÃ8(÷.n:Ôq¹Ev’^öI0L'ƒÍ€d8‰%àìÖÐYg-Þ é-{ö®„¬O6cÿ
+ãJìÇâæÖW}«ÐWD
+,¸T%:3É|ï%Þl/+Üæ—A Æ×g{¸ÏßKÊ°wo‰ ¡ˆ\‡Ê‹öÅZxUYЧڴ`Nµéñúˆ:t6t„ t6œrðªzów›±ßüÝ1ö5÷|xœËAkíó°LLLŠm'«üg(\~׃ƒót¿! h0mpƒoƒ‰ÑIø6x’wußF
+ì¡Wkëù![…`$d‚q4¤ë2ÁìZ²2É%Sf‹LÐXŒHB&H$j;‘Éùp~ØÔ¡,p$±Å®Fþ¥„Uåç@óV­j+Þ`SÇxëlj+ò`QÇȧýÝÓñ^¨$Úç^î­ëÄI—N®*”8¨ŸV<V«°A"†Ð­Þ¶#£o§¶%r®Àüù¼—‘ ºOI¬4©|´[•Ir"¼Ø)Cd‚«3À(RÓ÷|~«NfŸÏèv@ŒÌÔºDDü#â]`f¯jWZèRªŠß^|®V8x\zƒðaõ¢iW=h¿†ZÇy~pNa“
+Ó‘ŸJä³ ?Üz¦#i´Ä®ÆRå®~ú„ÜO2Ícp
+&e‘/c”Éœ[/ Û6AK`Ž|¼þJ*cèæHuzô5Á䦉UÑ&­•
+àYŽö”^Ï‚<Æ
+GëíÐyîE˜@>œÎû™Ç®CÖ¹y¡VÇκšLÐm ™XtKñdbÚCIȤ/¤/eòfE'ñ°ã_’¦¹_ÁSjh l–à
+Æ4+BávÄÁ[#®sÚ±w¡xÛ¥áì½j-ÊÎëä /÷CMšh$P†&êw[ñªVqñî\ÈzÚ—iHåF=5t€Cq˜
+ÍÅÀ9PËÚR’-¢I+éG^wUêí°$T©ú9¢‰mâ4el•~ÃU9ÄËU¹ñÚ´Îëæ™]´xµÌQíÛ }gz4Nþršðywþ2{Oð9¼¬ÓýæÃíÝs—ÀÐŽñf;4®R§PBoâè-¦í±,×;8 6ZÂiÌÔü¤šÓ(€xq ÄUN£
+ ÆuŒ¸Î¸¶cƵxÛ§Çç×Må iÙÈÙ\{Þ¾RÜàCíyM.Îu ˆ)ù µA‰$°Ù'F£Ò öÝþзQœ+iT¹M
+bÖ
+àbJx0“wÞèm¥å2Ô/€
+,“Mº׈ˆÓ¯%T€c^ëz"ÚD7DD}˜Õ´HÄûù¡™ž €£é¶Qz%‰£IB#“'voÓ·aâ¹h_湨1qÈ\ ^2âµ&?«2&Pηg.ð$­h¶škbAY¿j'Ây†, —špaL·ñ"oŒ›;nòÆ›[os/ì-mÐéÅ’ˆsuÙªUçªqp®Æˆëœ«vìÁ¹c÷=E·ÔEh–ïrñgLr­ Š?ID0FÙ^[¯ Ò$"c9þœ
+æt·;ÏÚ4Bò¨ÉÆÉ'¾’Ç‚’ÅGd4«õº„ÞšŠ_d¡µRë´y†¤©²Å—Ù;nGÄD `7°Ð†<\
+±Hüá\`™—sðñ‡spÄË9øzâçàíØÃ9x}í|~Wdë;-ZxoZ­7õO‚ÿõÖÈåÀþÇÿ@iné´­²Gµþ8Zû^øÞr%ü¤ª÷ÑŽ8xcÄuÞG;öà}Œ±(âc§­È £²™¼ðb*o.¤m`“ÏiÛöW¸WÊ/M249îk_)f""î«qŽ‰"AG,´³YÏA qÂõ ì¤òõ̧^â…ó©›¼pqákr€î;[ßló™JàûýóI‚‚èq¡8ìXf€›ªD~>X ÒÛèØ’Å Dg¬@B!m8º 5$ôaÕ/Lìë{5yáÓþüú<×lš$K‹üD°—öBŸò8ì*·FÚW<Ü©QñÍ©jGœª1bó­íˆR#pkOrü¤kÖšÐôØJ€šÛô—|ßÄGè„ zbÏØ•¨¿–¦·ìºàþ†,à%/áGRû®êG¶#~äqÙŽ=ø‘cìŠÙ:ø‘cКç‹%Áb¾XœöñpZŠ.Äí F–­)A7–mú˜×ÜB‰$–™[(Q•ô†9€1NˆAwÞº ¤GŸ´ä´vâ`™ôÒÛ<Yâ…Ñ6êÉ /¨ckÙÖG Ò#KH!.ðï«ù(ä%Ø„êKÖÿ%hi$èŸÝHøVÍ În¤÷Uú£Å*‰È…r†$l ?z¬âÊ¿
+æ/u‚±l`µ2¨8þL¦@}z=oJÍ\¡±rJ@/ óM)Õ¨Gù2‰
+MÐb—´=€/ìëF;Þ%Âã­Š0Ú‘/Æùz„Ñy‰0ÆËñ.‚{Ôõ·Ãr =°+â‹ÀFW
+endstream
+endobj
+11584 0 obj <<
+/Type /Page
+/Contents 11585 0 R
+/Resources 11583 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+/Annots [ 11419 0 R 11429 0 R 11430 0 R 11431 0 R 11432 0 R 11433 0 R 11434 0 R 11435 0 R 11436 0 R 11437 0 R 11438 0 R 11439 0 R 11440 0 R 11589 0 R 11441 0 R 11442 0 R 11443 0 R 11444 0 R 11590 0 R 11445 0 R 11446 0 R 11447 0 R 11448 0 R 11591 0 R 11449 0 R 11450 0 R 11451 0 R 11452 0 R 11453 0 R 11454 0 R 11455 0 R 11456 0 R 11457 0 R 11458 0 R 11459 0 R 11460 0 R 11461 0 R 11462 0 R 11463 0 R 11464 0 R 11592 0 R 11465 0 R 11466 0 R 11467 0 R 11468 0 R 11469 0 R 11470 0 R 11471 0 R 11472 0 R 11473 0 R 11474 0 R 11475 0 R 11476 0 R 11477 0 R 11478 0 R 11479 0 R 11480 0 R 11481 0 R 11482 0 R 11483 0 R 11484 0 R 11485 0 R 11486 0 R 11487 0 R 11593 0 R 11488 0 R 11489 0 R 11490 0 R 11491 0 R 11492 0 R 11594 0 R 11493 0 R 11494 0 R 11495 0 R 11496 0 R 11497 0 R 11498 0 R 11499 0 R 11500 0 R 11501 0 R 11502 0 R 11503 0 R 11504 0 R 11505 0 R 11506 0 R 11507 0 R 11508 0 R 11509 0 R 11510 0 R 11511 0 R 11512 0 R 11513 0 R 11514 0 R 11515 0 R 11516 0 R 11517 0 R 11518 0 R 11519 0 R 11520 0 R 11595 0 R 11521 0 R 11522 0 R 11523 0 R 11524 0 R 11525 0 R 11526 0 R 11527 0 R 11528 0 R 11596 0 R 11529 0 R 11530 0 R 11531 0 R 11532 0 R 11597 0 R 11533 0 R 11534 0 R 11535 0 R 11536 0 R 11537 0 R 11538 0 R 11539 0 R 11540 0 R 11541 0 R 11542 0 R 11543 0 R 11544 0 R 11598 0 R 11545 0 R 11546 0 R 11547 0 R 11548 0 R 11599 0 R 11549 0 R 11550 0 R 11551 0 R 11552 0 R 11600 0 R 11553 0 R 11554 0 R 11555 0 R 11556 0 R 11557 0 R 11558 0 R 11559 0 R 11601 0 R 11560 0 R 11561 0 R 11562 0 R 11563 0 R 11602 0 R 11564 0 R 11565 0 R 11566 0 R 11567 0 R ]
+>> endobj
+11419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 714.167 233.782 724.762]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a7cb6e9142d8b076d6cf08143f14b3b44) >>
+>> endobj
+11429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 653.678 138.937 664.215]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3de00e31ff98af9eecc102c478f06dd5) >>
+>> endobj
+11430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.137 653.678 276.067 664.215]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55babac8b45ef75098a0ac70833405cb8a1c) >>
+>> endobj
+11431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [279.059 653.678 396.34 664.215]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae763d2ae11de74e3bf00484f0c420b5b) >>
+>> endobj
+11432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.332 653.678 482.505 664.215]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba4fbc108733128285c370f2798e63d2f0) >>
+>> endobj
+11433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 641.723 187.185 652.26]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1dc2b860b4fbfd2676c45fa0ea7472a) >>
+>> endobj
+11434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.177 641.723 276.094 652.26]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaab97fbf582821a64162c64162059d4c) >>
+>> endobj
+11435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [279.086 641.723 340.857 652.26]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7d15ca551d3be6af6b905401fda920ff) >>
+>> endobj
+11436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.849 641.723 445.098 652.26]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba37eeb7c8ca838d1abea8155bd2681cca) >>
+>> endobj
+11437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 629.768 207.045 640.305]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba048c51c227644c948de54b6008e3be75) >>
+>> endobj
+11438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.314 629.768 335.279 640.305]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0debe0f70ddc44de63d2f77347fcd042) >>
+>> endobj
+11439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.549 629.768 462.365 640.305]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba482dffbb37ca2c45c715ed58018e662a) >>
+>> endobj
+11440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.635 629.768 525.406 640.305]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba781b6b8f6de5fca2a276c4a54e2a7da3) >>
+>> endobj
+11589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 617.813 137.834 628.278]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba781b6b8f6de5fca2a276c4a54e2a7da3) >>
+>> endobj
+11441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 605.857 193.165 616.395]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafacf553e2bd58e82e0ce8261e6c1a62f) >>
+>> endobj
+11442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.294 605.857 328.339 616.395]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9f941853d2f61c93597570dec3ad005b) >>
+>> endobj
+11443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.468 605.857 454.278 616.395]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba56fd16c57cc94f8224fd1076c3963220) >>
+>> endobj
+11444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.407 605.857 525.406 616.395]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8b2889b502646963e804de539432b3f9) >>
+>> endobj
+11590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 594.028 166.41 604.44]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8b2889b502646963e804de539432b3f9) >>
+>> endobj
+11445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 581.947 197.146 592.413]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba886f229aad81a550a014b087cc198c5b) >>
+>> endobj
+11446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.852 581.947 303.222 592.413]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8f828f829bfcd3afb47449021f15cad8) >>
+>> endobj
+11447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.927 581.947 428.521 592.413]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba10504d6dc023d0d5f5f68b0e0bf96350) >>
+>> endobj
+11448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.226 581.947 525.406 592.413]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba84bc2718a0b156a28d0bcbd462e8ef14) >>
+>> endobj
+11591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.669 128.169 580.458]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba84bc2718a0b156a28d0bcbd462e8ef14) >>
+>> endobj
+11449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 558.037 203.808 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba468387bb22b7fb26aa83a937a717bca2) >>
+>> endobj
+11450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.801 558.037 316.828 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba692bbbf573dfec9b717d05b12271acbf) >>
+>> endobj
+11451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.82 558.037 415.16 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacfba1640f811f88e9f665184cdffa372) >>
+>> endobj
+11452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.153 558.037 481.636 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba402c22e7e9ba27c99d1ce220766f1e00) >>
+>> endobj
+11453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 546.082 158.26 556.547]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab0a0a77e791782b86d60edab1ee14f9e) >>
+>> endobj
+11454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.252 546.082 224.735 556.547]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba551195b14734773fb9ebbab39dc562ed) >>
+>> endobj
+11455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.728 546.082 291.211 556.547]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badbb28f476106f966ad6458dfe6781aec) >>
+>> endobj
+11456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.203 546.082 394.331 556.547]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae61f95f6cb7886e058a7f0eaf5954df6) >>
+>> endobj
+11457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 534.126 168.983 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd8c504c772936c9b428429b6b716729) >>
+>> endobj
+11458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.976 534.126 274.596 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2596874c1cf84e26b70ab9727f18f6d5) >>
+>> endobj
+11459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.589 534.126 374.453 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baddf223886413a216b5740873d720c929) >>
+>> endobj
+11460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.445 534.126 466.85 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad45f8630597d5d298d43e793f8a4847c) >>
+>> endobj
+11461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 522.171 226.528 532.709]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba6db8884f1960f50d67716ba4e015f07b) >>
+>> endobj
+11462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.788 522.171 353.552 532.709]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2f9a0dc5d9e92ae8412e78f2fa5dbfe6) >>
+>> endobj
+11463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.812 522.171 467.117 532.709]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2cafa25e37b8ac1acba9ab3ef68228b7) >>
+>> endobj
+11464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.377 522.171 525.406 532.709]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1062eb18d7760da77beb73f236acd8d) >>
+>> endobj
+11592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 510.292 121.354 520.682]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1062eb18d7760da77beb73f236acd8d) >>
+>> endobj
+11465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 498.261 183.688 508.798]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1a102d4934eae9d036ee13f1a9dab10) >>
+>> endobj
+11466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.68 498.261 283.939 508.798]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa7be2ed6b2dd4288f8483530b053681e) >>
+>> endobj
+11467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.931 498.261 409.699 508.798]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1320dc4a51d6e9a8f69c5b90e2d648bc) >>
+>> endobj
+11468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.691 498.261 482.989 508.798]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad1884d4d3888d0a86ee8b8cc58f873c0) >>
+>> endobj
+11469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 486.306 214.621 496.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa6605704717136f93a8f833fd48678da) >>
+>> endobj
+11470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.614 486.306 332.222 496.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad30fd4927b305b4a0456a655ac4de52c) >>
+>> endobj
+11471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.215 486.306 409.726 496.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2ee8de6a7672810c0a751fb6704e3adb) >>
+>> endobj
+11472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.719 486.306 475.538 496.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba26d9c375cc42f723ce775a9506e9df88) >>
+>> endobj
+11473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 474.351 167.566 484.888]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac35e222fe4f3da3d931004ff7bddebd7) >>
+>> endobj
+11474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.559 474.351 233.881 484.888]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badf70b49a55d22add9ee1be0265bce62a) >>
+>> endobj
+11475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.873 474.351 301.315 484.888]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac31dd3646109c66fe7cbbb0bd8af6f2e) >>
+>> endobj
+11476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.308 474.351 368.356 484.888]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bada67fc618c83c40b4007273517567f7d) >>
+>> endobj
+11477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 462.395 187.74 472.933]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa96b2550d32efff81bc4909526ca4570) >>
+>> endobj
+11478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.733 462.395 264.76 472.933]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7b5e3238e19b74b3433f97f068c536e8) >>
+>> endobj
+11479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.753 462.395 356.224 472.933]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac25e1aa5859beaab7998e01e58738ff5) >>
+>> endobj
+11480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.217 462.395 439.225 472.933]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba793355e67e678473b7d9315dd3d0ff57) >>
+>> endobj
+11481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 450.44 165.119 460.978]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badcffcfbbcb43b0f181d10931fb08c783) >>
+>> endobj
+11482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.111 450.44 273.547 460.978]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba23d488c96753d2dd82051f2571b7970e) >>
+>> endobj
+11483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.54 450.44 405.396 460.978]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba740c53fe3d85faa79a1c69892d152491) >>
+>> endobj
+11484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.388 450.44 516.12 460.978]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad9286b1a8ef11d797183fdcfda9db2fe) >>
+>> endobj
+11485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 438.485 233.827 449.022]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9e753dc49c499bb359cbe9c7675c190b) >>
+>> endobj
+11486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.014 438.485 385.014 449.022]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf60de06cb95541858eaeb6e72ef263bb) >>
+>> endobj
+11487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.201 438.485 525.406 449.022]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba536e213442c4abba4b2934d82952e3e9) >>
+>> endobj
+11593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 426.53 111.043 436.996]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba536e213442c4abba4b2934d82952e3e9) >>
+>> endobj
+11488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.036 426.53 239.027 436.996]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae099cd3b40113683340ad54beb7c744e) >>
+>> endobj
+11489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 414.575 208.479 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab5ff3862d8374714be03f0d73e1bb64d) >>
+>> endobj
+11490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.314 414.575 325.763 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacf1ab2c31d41036f20d0506467550b4a) >>
+>> endobj
+11491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.597 414.575 417.734 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba14034803ed5307560e5fe69b37ad7b5e) >>
+>> endobj
+11492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.569 414.575 525.406 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba367cbe74765542d20e273c83d18900f6) >>
+>> endobj
+11594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 403.297 139.861 413.085]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba367cbe74765542d20e273c83d18900f6) >>
+>> endobj
+11493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 390.664 233.638 401.13]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7bd9db959fc27dc0fcf0b6f04c2bee70) >>
+>> endobj
+11494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.631 390.664 310.452 401.13]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9cdd82470dd646683d0906fcda50391f) >>
+>> endobj
+11495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.444 390.664 384.262 401.13]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baffbf695b405cd722132f4d954ec4b0fb) >>
+>> endobj
+11496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.254 390.664 458.08 401.13]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5140925409196f71b08fcdac5d9bb5c2) >>
+>> endobj
+11497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 378.709 185.042 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba147db879c6dab7baa15fbc93c50138ad) >>
+>> endobj
+11498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.034 378.709 266.159 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba00dadc96006235ff17f62263bc20a8f0) >>
+>> endobj
+11499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.151 378.709 360.645 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5c88a0e9e14f07fd7841ca9a87c4db20) >>
+>> endobj
+11500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.637 378.709 454.62 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba08c71b5be1681df0a3e09bc397521755) >>
+>> endobj
+11501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 366.754 164.114 377.291]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba07b674473e78ccc545fa87ca1ff50e99) >>
+>> endobj
+11502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.107 366.754 256.601 377.291]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac054b3ee8df05cbfeaa5aa2cabde3f8e) >>
+>> endobj
+11503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.593 366.754 327.927 377.291]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf0f0422ef54cdc3a457efd8d476e02b0) >>
+>> endobj
+11504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [330.919 366.754 401.745 377.291]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8ab2b6de12dd73fd9b572c83a6b192fa) >>
+>> endobj
+11505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 354.799 214.657 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2704b9149ef6f19d543bd5c6cda90163) >>
+>> endobj
+11506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.649 354.799 337.53 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5134cff42b812c699315d1bd66445733) >>
+>> endobj
+11507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.522 354.799 424.314 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7e8e1e14304028f62aed867a74305d9c) >>
+>> endobj
+11508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.306 354.799 506.345 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3730d8d0f2eee789761903282e46f1f9) >>
+>> endobj
+11509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 342.844 171.09 353.309]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba300a47da43d2da79c8064d425e3774a3) >>
+>> endobj
+11510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.082 342.844 248.755 353.309]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba032a65a22e209ffdab803fb4f3640bf4) >>
+>> endobj
+11511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.748 342.844 320.081 353.309]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa80e0ab4730aa8f609c8ceac684a9253) >>
+>> endobj
+11512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [323.074 342.844 426.026 353.309]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf99a305d97f03cd98baf1980bd463a62) >>
+>> endobj
+11513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 330.889 204.436 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba81f144898aecf5772414d07ebeae7992) >>
+>> endobj
+11514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.428 330.889 294.196 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba776771c43e40e73fb76064295f561e98) >>
+>> endobj
+11515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.189 330.889 385.696 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba545de9f9a0198adfe53c6a16fba9845f) >>
+>> endobj
+11516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.689 330.889 506.166 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba14ff76e76d3be295eab0a2399d28ed13) >>
+>> endobj
+11517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 318.933 209.25 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba794383d68342455662479b9aa2baa01c) >>
+>> endobj
+11518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.43 318.933 347.057 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baee574bb1a61ded8adab3a94df685074f) >>
+>> endobj
+11519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.237 318.933 482.371 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3109c95e292aec685518946d0c51df56) >>
+>> endobj
+11520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.551 318.933 525.406 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8dea710a23ce10d3c3cd4e525a16270) >>
+>> endobj
+11595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 306.978 198.742 317.444]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8dea710a23ce10d3c3cd4e525a16270) >>
+>> endobj
+11521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 295.023 197.971 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baef98a2bd6288841e66cd96e78d561824) >>
+>> endobj
+11522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.963 295.023 303.924 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1cc2df011e47e46f8e54e61f4f7da3aa) >>
+>> endobj
+11523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.917 295.023 387.211 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa229ff4dfd34b959e7b8c1236de309a3) >>
+>> endobj
+11524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.204 295.023 462.886 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8ba677a7630f7fd3de3699496aefc8d) >>
+>> endobj
+11525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 283.068 186.037 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8dfdc8ce3b0ce60e806a8f47e6f4aab7) >>
+>> endobj
+11526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.305 283.068 332.167 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baeec0fab545dd306761ecef04e0e4f18a) >>
+>> endobj
+11527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.436 283.068 483.283 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba4e44f2555067cfc5c15e98bde4af7a7a) >>
+>> endobj
+11528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.551 283.068 525.406 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba93c17658410d278ff9a7a42c15781a4b) >>
+>> endobj
+11596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 271.113 187.901 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba93c17658410d278ff9a7a42c15781a4b) >>
+>> endobj
+11529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 259.158 163.881 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba62cc69b05957939c36c47a1f40ada294) >>
+>> endobj
+11530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.276 259.158 307.606 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9d6a27fcb2288ef795c27c4e04c28c18) >>
+>> endobj
+11531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [318.001 259.158 455.15 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba03b581feb62bd9562b51ae4cd67e0a9d) >>
+>> endobj
+11532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.545 259.158 525.406 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba406a39cf4333c380d55e6752f4397c97) >>
+>> endobj
+11597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 247.279 178.532 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba406a39cf4333c380d55e6752f4397c97) >>
+>> endobj
+11533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 235.247 203.279 245.713]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7b3e1759cbae75e011206b549f8813a5) >>
+>> endobj
+11534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.271 235.247 303.01 245.713]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac674c0928eb2d44a7f90c3b7a1378206) >>
+>> endobj
+11535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.002 235.247 392.008 245.713]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba05338d4784b36824de05100edda89bb1) >>
+>> endobj
+11536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.001 235.247 479.958 245.713]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac01007d24fb873b3c33ff79fc09b8c36) >>
+>> endobj
+11537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 223.292 198.168 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad1b81fd0e95c46b5ba2b8cb4f35f4719) >>
+>> endobj
+11538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.161 223.292 286.118 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba084763886d48747225944454265face6) >>
+>> endobj
+11539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.11 223.292 410.417 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf7c1f91006b2120b6cd8e4b8d694b872) >>
+>> endobj
+11540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.409 223.292 520.262 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba61d033beecdb78a230fcf75e07bc9e53) >>
+>> endobj
+11541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 211.337 221.588 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baad2e822b10f25fa717b94920ac341d8f) >>
+>> endobj
+11542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.864 211.337 341.22 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba65faefb3df8c4fe5100f600888d0e8ca) >>
+>> endobj
+11543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.496 211.337 500.215 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba979546f847246ca31af9cff65ea0f0f1) >>
+>> endobj
+11544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.49 211.337 525.406 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae1a3dc7245b38b63a059aa22d4717baa) >>
+>> endobj
+11598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 199.382 222.565 209.919]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae1a3dc7245b38b63a059aa22d4717baa) >>
+>> endobj
+11545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 187.427 197.675 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba869c4dc4591cfccfb3b7f027dfa07acc) >>
+>> endobj
+11546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.564 187.427 307.463 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8b4cf5eb2ddd6738d8a76890924871be) >>
+>> endobj
+11547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [314.352 187.427 458.656 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba38696cfb610c007c608585b0b7e020ae) >>
+>> endobj
+11548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.545 187.427 525.406 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba30bdd0f2c6c7e9bf144c26f700220e46) >>
+>> endobj
+11599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 176.148 148.692 185.937]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba30bdd0f2c6c7e9bf144c26f700220e46) >>
+>> endobj
+11549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 163.516 227.38 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba47b998049e9cb438d16b3ccf57f27b31) >>
+>> endobj
+11550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.206 163.516 349.729 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac2b746038a8ffe9b48482022122ca236) >>
+>> endobj
+11551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.555 163.516 485.725 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8bc2609a10917620697ab398e45ce404) >>
+>> endobj
+11552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.551 163.516 525.406 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0246a3f0848e9eb3ce758045ee464256) >>
+>> endobj
+11600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 151.687 192.573 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0246a3f0848e9eb3ce758045ee464256) >>
+>> endobj
+11553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 139.606 236.086 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2c8a5195b2a6cfa0e5667ceae1b57c04) >>
+>> endobj
+11554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.763 139.606 384.628 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacca03d87e00f68511c1a45a0638f899f) >>
+>> endobj
+11555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.305 139.606 522.913 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2d3ee1a89f3969d72f36b1e17677bb7e) >>
+>> endobj
+11556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 127.651 224.394 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae8dfcc98bbc26ee83207d04e48590c47) >>
+>> endobj
+11557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 115.696 245.85 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9bf1c18ed1683b80cd64606219ab75b2) >>
+>> endobj
+11558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.576 115.696 415.62 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac19d989394457e8425288ed2d86ab049) >>
+>> endobj
+11559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.346 115.696 525.406 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba194b1e7917e10f54986e86db2d227825) >>
+>> endobj
+11601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 103.74 131.154 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba194b1e7917e10f54986e86db2d227825) >>
+>> endobj
+11560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.147 103.74 264.617 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae4675d98190368162ce73dd280355bf0) >>
+>> endobj
+11561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 91.785 245.465 102.323]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3f6d06f3d5cd0d2d53503cc228f74083) >>
+>> endobj
+11562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.604 91.785 385.198 102.323]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7fd99079ea809ec1da4252fad0ca10c6) >>
+>> endobj
+11563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.337 91.785 525.406 102.323]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaf7f1c8d2bb90f120b11dc3d5c60b51a) >>
+>> endobj
+11602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 79.83 119.247 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaf7f1c8d2bb90f120b11dc3d5c60b51a) >>
+>> endobj
+11564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.24 79.83 288.771 90.367]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba468ca8cff588ec28a128d2000ec9c376) >>
+>> endobj
+11565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 67.875 243.474 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba68992d0dfe043b785163644b62d99bfa) >>
+>> endobj
+11566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.939 67.875 391.308 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba35f6e91ee6ebbe6f234edccf915129f8) >>
+>> endobj
+11567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.773 67.875 522.913 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba341a29168a10d87be85bc2626023fb94) >>
+>> endobj
+11586 0 obj <<
+/D [11584 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3866 0 obj <<
+/D [11584 0 R /XYZ 70.866 771.024 null]
+>> endobj
+11587 0 obj <<
+/D [11584 0 R /XYZ 70.866 729.052 null]
+>> endobj
+11588 0 obj <<
+/D [11584 0 R /XYZ 70.866 680.519 null]
+>> endobj
+11583 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11746 0 obj <<
+/Length 3493
+/Filter /FlateDecode
+>>
+stream
+xÚ­œIsã6Çïþªš‹T1Ø—Ã:‰;Kõ2Óí™K'µL»YÑâétòíó
+E7·‹OËïzõ¯›ë«5Óf©‹ÕZ1¶|ýó›ëö/?¼ÿþ?o¯ßݬ(#ËWþÿ7?¿·ZS*•„¨êžyóówï_¿~ó~å>øÃê·›_®®o®þwE¡/dA‚ò‚Ræá†ØÅvõé7²¸…üeA
+nÍâ«ÿè~½³ðËnññê߉Q*¡ ãíÇ‹ŸÚ.?wþÃõëë×﾿~Ù›~&Œ) —:#$/¤àOý!Ýì¶íœî»?tó-dÐS+ ­ùB+Z¾§ûúþew(LÆ’©ysÁ,…å&Fn@F
++-ñB OåÃñ´Z ²lh¡ái‰€–¤PRÆèfsº/ST-@~ÖÊë7¢Þ–õLå²zh`è/ð Ö‰<Ϩ-$?ÓT]6Ú«þøM÷‡s™.ÖÎfZÁO
+Sd)lÁ‰ÄÐ%´D‰×e>±fHœ&Ì|v¯Ì=ªÌ|l/Í{÷xHͳ³jUa ¡»ãñ÷Šü´æ’¦%È„*$Á˜æ:hí¨™„©a@ 3CgpàІZM 'ºà†"`9%ÑSôÇ™.¤LNÀG‰³¡VûC}òœeÂ5{¹LR£MAÊÄpBVÌП ² : (=M|‚SÈ!1Æ+8/Œ<o½Ý4M™Èâ'†]…‚•væTªÃÃcScèOBˆ& £ŸB¹¦ãú“ÔšcØC2Zvfµ#.Ö‚I4NA.gH ˆ‰æà¬òòIyÛ•cY#DæÒ¶lª€ß9©›ÛÛR ˜6€T€¢:F~våÙãÝÝŠ“ejYPK
+Ê1ìÊ<v6àSy7}Y¬­.@€­DÔ”,DÅ-J–
+-Q+dzÔ|bŸ¥†ÄiYj>»ÏRCöh–ší³Ôh’{ð™sb¶2z ctÒuYTvO™
+'Ó3äÀ ¯ ÎCå³Ášóir`ÖÀ‡0†Ì )Œ9òý¦ù’rO`W(£–¹:ZÄØãc33rªЄÆX¦Ü€&”U!« †îáéBh5C…‚ÚB[†Àž…aÓT(`áY1dñYñCÞ•›ºLp!I—C†Â•|êL†cAZ¨P1â$P¡¾ð6sb´€èìüÀŒ½$ø)Fö ŽÇèl^¢CÞ±J9$µNÙDn
+ÎUD|¨Ê]u(S #¬=M°J ,Š°ûÍŸ ¢±`Œº|ô°¢ þýçNøÓ2Eˆ
+’Ï!ÚÄ ¨ZbfBª˜OìuOn¶6‡û²N %-¤ÛŽÉGKÑFû}{<$óDVP·Ï‘…|ÄhC÷›fûeN|OšÎ´N)B?™ÛÊ"tT Œ³BºÅ|"8FÙ™9ʺ©›¦:RY"Ôà(ƒ…xu&úªNíd˜]”±Z'â³±WT.ÿX1¹œá%@ Ô$kô µf~wÁmC"$GÅÀÌ£+-ò‰BÀ©˜Xïªm"TpÅ Þcx® Ö©3êñ.µŸ ^Ë`(CÝÈõ™ÇÃ6é‡ÁR Kq^(psj=¯KÑþÂðGBê‚XŒ%*$äfÜ %Úcô|¢Ò…°g3ôp¬éWW]pŒˆ(\Êì˜eÒû›Ùô§ýÍ~is_Õó‰Ÿßmêæm§çÇýM‡¶¨d´ç>ñ+!ì4ÚŒû·o_S±€<Ïåg>ßqƒ >ÝèíG é‚¿kiýgÖ.&`Ú5×3´ýïJ9NÕ泳ˮŒ«‹›– ]WNÀŸŒmø•1yÞ[)Õ²n ÚmÛ.o¿lNÝoÇCÝ$ ]±ÄûþÃ<ð™:ëH*½î±·×?¾úñ:u¾¢†¢`ä¦)ç€ß€#h[‚”¡åÞ¼úîMŠ*Ài@Š@à4˜‰©ï^½½NÉäÓÊ]!Xþ–Ö
+÷Ø]1*(•Ï\Ú¿·ûòÐ<%3òÜYëã·m eûô Ü~'…1JWs›™7¢À:ƒà¢}KÄ^4ä®´A`WpDÈ'û¼"—z62lÁ<Z~§øH¦eÔë]õùxçÖßq“8þ`¢P(BØ.¾I±÷e]oœºwZ\¦R$âîÆ`ŒU)"~Ó;ÁVÕÑ\»´^‹ûåêØ4íO¿ÐúkMÚ_ {òò»²ÿØÅé¦T‚içY^KC%߶CÉóU·âKÑFDÊ]Â{vœó¡ìö¸Êö¼mûë7¿þêÇ3ØqêòJH %,j.rÏ#ÀV¾%*ú èäˆqg¢ƒ Uµ:fzqÞ—©Zž„ò-ŸËÀ
+ŠÐ˜[7§_‰$ðý¦“Ø¡3Æ×îR[“ê̆T³Á,+˜LÏFß³"lœá5¿ 6¬ 6×Ý~RyÚ</¡—’üõPþ_áf5‡×èþøX·-”äRf³†…f\Fj³þŸ;çSÖþæàóÓög4í®²–ÌçÜzÆMÂç`²‰™ý¼·ücp¹UPJºv$ëÆsû¸ßäÝ”©Â2žÑoʉ?IžÛÂùl¾ L)‡\Q€ÊÔŃf¢!&hÿA#mÆÜQb}!"S›‡Ê%ŽºÓºˆv[ú=”ä6õwîPÀþÎŒÈUr«f–R "T¿–Јx8h»[oH Y¸Ž‘›n‡
+Vuµ ƒþ 9.Ö ?-]Í#ýô úƒDÁZŽ¡?hI[1&À|^'ÀWV‚ts´«ndhQð CW¢Gü‹+
+S0Ÿ§DÐÛÑŠúèþp ‚>4C¦‡T”šY®À£XºøÂHkùl\gøv*·eõG2í¹@ B½Î™ˆ±¦×–*‹01qØîì®æ,yîr+ ïZ¢£!
+Û½ÄKÏØãR40åv†f–ûíÀ|-º#kÇvNx­#Ü„ªÜU-¹®î›]9˜ Ï.\˜vïÊ`ìd»–(³G>®³G@›bŽ|noŽ
+/$O^>¶^®«ûI›äñÀŒJa쪻–Äx€Ïçu q—…—ì…2§ /ŸÝ
+/$GÂKnIZ3çx›…Æñ¶kÉêŒh Ÿ×i Ä]Ö@>²×@ȬUÃÌ
+endstream
+endobj
+11745 0 obj <<
+/Type /Page
+/Contents 11746 0 R
+/Resources 11744 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+/Annots [ 11568 0 R 11569 0 R 11570 0 R 11571 0 R 11572 0 R 11748 0 R 11573 0 R 11574 0 R 11575 0 R 11576 0 R 11577 0 R 11578 0 R 11579 0 R 11580 0 R 11749 0 R 11581 0 R 11582 0 R 11743 0 R ]
+>> endobj
+11568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 758.07 242.461 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab4e5b4e6f385a4f56993283e729b3944) >>
+>> endobj
+11569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 746.115 224.394 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baebd815bf6d53c441f6df172efd96060f) >>
+>> endobj
+11570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.038 746.115 348.178 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba19af2129ecb0749e38f1b7f41af743ca) >>
+>> endobj
+11571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.821 746.115 488.908 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3da5a5098f277269bb692d52430693d6) >>
+>> endobj
+11572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.551 746.115 525.406 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badea6874ab34279c77a4bf525963840a5) >>
+>> endobj
+11748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 734.159 208.766 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badea6874ab34279c77a4bf525963840a5) >>
+>> endobj
+11573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 722.204 212.191 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0f75b4b217b9c3af5febc07c30f79961) >>
+>> endobj
+11574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.855 722.204 359.94 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2e2de8fbbaad80cdf507f907a2d19ad8) >>
+>> endobj
+11575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.603 722.204 522.913 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaad07efaae813d69f76a0ded3f53975e) >>
+>> endobj
+11576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 710.249 223.928 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baff36e0a6b9bd9e90b8d203d2f7ba1228) >>
+>> endobj
+11577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 698.294 200.284 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd826e741fee5955d4c53f1cf77e3f19) >>
+>> endobj
+11578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.339 698.294 309.579 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1f18417bc65aa221394cf59ce8ece01e) >>
+>> endobj
+11579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.634 698.294 432.564 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba04e53bdf3d410e02085b5743104fd2e7) >>
+>> endobj
+11580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.62 698.294 525.406 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab921b8d9dfbc4a0b3e452c98fc5a146f) >>
+>> endobj
+11749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 687.016 135.127 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab921b8d9dfbc4a0b3e452c98fc5a146f) >>
+>> endobj
+11581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 673.888 127.658 685.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baca77c117fc1e045c348b64631ad177d1) >>
+>> endobj
+11582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.827 673.888 189.202 685.843]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba156134c6ecda804a9f08c4b3bf5b8ea5) >>
+>> endobj
+11743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 626.461 276.627 636.837]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__msg_8h_a30a3ddc82f2b2149b47c7760222fb0e6) >>
+>> endobj
+11747 0 obj <<
+/D [11745 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11750 0 obj <<
+/D [11745 0 R /XYZ 70.866 641.08 null]
+>> endobj
+3870 0 obj <<
+/D [11745 0 R /XYZ 70.866 612.251 null]
+>> endobj
+11603 0 obj <<
+/D [11745 0 R /XYZ 70.866 592.846 null]
+>> endobj
+3874 0 obj <<
+/D [11745 0 R /XYZ 70.866 572.11 null]
+>> endobj
+3878 0 obj <<
+/D [11745 0 R /XYZ 70.866 532.945 null]
+>> endobj
+11751 0 obj <<
+/D [11745 0 R /XYZ 70.866 511.693 null]
+>> endobj
+3882 0 obj <<
+/D [11745 0 R /XYZ 70.866 493.081 null]
+>> endobj
+11604 0 obj <<
+/D [11745 0 R /XYZ 88.314 467.526 null]
+>> endobj
+11605 0 obj <<
+/D [11745 0 R /XYZ 88.314 451.66 null]
+>> endobj
+11606 0 obj <<
+/D [11745 0 R /XYZ 88.314 435.794 null]
+>> endobj
+11607 0 obj <<
+/D [11745 0 R /XYZ 88.314 419.927 null]
+>> endobj
+11608 0 obj <<
+/D [11745 0 R /XYZ 88.314 404.061 null]
+>> endobj
+11609 0 obj <<
+/D [11745 0 R /XYZ 88.314 388.194 null]
+>> endobj
+11610 0 obj <<
+/D [11745 0 R /XYZ 88.314 372.328 null]
+>> endobj
+11611 0 obj <<
+/D [11745 0 R /XYZ 88.314 356.462 null]
+>> endobj
+11612 0 obj <<
+/D [11745 0 R /XYZ 88.314 340.595 null]
+>> endobj
+11613 0 obj <<
+/D [11745 0 R /XYZ 88.314 324.729 null]
+>> endobj
+11614 0 obj <<
+/D [11745 0 R /XYZ 88.314 308.862 null]
+>> endobj
+11615 0 obj <<
+/D [11745 0 R /XYZ 88.314 292.996 null]
+>> endobj
+11616 0 obj <<
+/D [11745 0 R /XYZ 88.314 277.13 null]
+>> endobj
+11617 0 obj <<
+/D [11745 0 R /XYZ 88.314 261.263 null]
+>> endobj
+11618 0 obj <<
+/D [11745 0 R /XYZ 88.314 245.397 null]
+>> endobj
+11619 0 obj <<
+/D [11745 0 R /XYZ 88.314 229.53 null]
+>> endobj
+11620 0 obj <<
+/D [11745 0 R /XYZ 88.314 213.664 null]
+>> endobj
+11621 0 obj <<
+/D [11745 0 R /XYZ 88.314 197.797 null]
+>> endobj
+11622 0 obj <<
+/D [11745 0 R /XYZ 88.314 181.931 null]
+>> endobj
+11623 0 obj <<
+/D [11745 0 R /XYZ 88.314 166.065 null]
+>> endobj
+11624 0 obj <<
+/D [11745 0 R /XYZ 88.314 150.198 null]
+>> endobj
+11625 0 obj <<
+/D [11745 0 R /XYZ 88.314 134.332 null]
+>> endobj
+11626 0 obj <<
+/D [11745 0 R /XYZ 88.314 118.465 null]
+>> endobj
+11627 0 obj <<
+/D [11745 0 R /XYZ 88.314 102.599 null]
+>> endobj
+11628 0 obj <<
+/D [11745 0 R /XYZ 88.314 86.733 null]
+>> endobj
+11629 0 obj <<
+/D [11745 0 R /XYZ 88.314 70.866 null]
+>> endobj
+11744 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11770 0 obj <<
+/Length 2874
+/Filter /FlateDecode
+>>
+stream
+xÚ­œËv7†÷z
+.¥…1¸_–‰#'ÎqìG³J² Å–̉äðbÇyú©j¢m€AìƒÚä8 ¯ÿo ª
+ƇÞ=ï Ê“Þõ¿”vÚxfDÁ ÎåÈûPfpÂ3N:¸,ñ”fÂY¢²G½RärµÜÛzªÉì…öÌ9{¶Þ^¢†¡qšBhI9S¡UHq«u'Œ QI@é¹ÛÏ÷EíeJI
+¬ ŒK™c?á,5߸f'(¸Z'#¼˜ïç#žóà$a¢çÜ%že¼÷žë5ö5ϵó¢çRÜYϵÏ¥È;$¼Ö0Gh
+¦v0{œ0Ïþ„5dÂ\#4“\Rè-qh©¢{;/êžâaMæ×ݾ4íK˜îIú H0'ýìVËUWÀZ m+
+¬uŒ{•c?ÎW‹§nÄÎ3M^î`…‚Ù¢ÝØ’¶âÞÑ®înô@®y€
+hÐÚz\v#îÜBŽ+'„ƒÖ¦a¢#ð´$«ù¯ý—â.ó_;zð_Êþ<_–¼ç³è½v¨MƒÈ¡»‡ýb«ÂçÕxf€²L˜Š”aŽÄ
+³ ZE Ò.3B3yðA}£øõ__
+pÏd(p\ÔNûý;çê°û8bœH¸™bÉ!¡(LX‰Q­0AÀ‹fHqOëù¢$bùQR0ÀŒ<.?lçÛ~Mú2–º f”Ÿ"×ýsÈ-‰jr´ó¢)n³ÜtOå
+¦,}Â,nàðCK„© ›!Ÿ»çÑ w”¦ÔŒ4
+ïèµ ·X>Ä·¿Þ<½ª(àx"$¨œ¾ë'÷R—a®‚<‹
+?4$(Àxˆ,ãž_£ðS†d€!3ÄS )z¿|.Ö|aêÐœÚW%B]­ݹr„WSŒgqϘ"5ÄÓüÁ×Jp¼è¼w‘õÚÉGë¥à˼×N¼—²÷ÛùýHa"@|ÜNÅ„å:§VÜ'§l'c\ŠZX¿­ªÓ^;/š/Å]d¾vòÑ|)øãz·ÿºšðS.g
+¥ð9 ”Pª¿[Q¢…Hi Ñ >êr‡ÏxRȀݒ… !\WthçE!RÜEB´“J¤àýr?úµ¹éZ`™@QdðØ’Tµ ž€µHqiÑN>j‘‚wÝýzµØ]¢Æ%kø Eímÿ•ÛóZ´ÓŽR¤°K”hçöB¤Øþàá—}·£z/p_ÑR¤­ñ{Òµïp¶Òâg8Ø%J´s{%²>n¥zª‚àŠ
+¿dvx˜â³G
+endstream
+endobj
+11769 0 obj <<
+/Type /Page
+/Contents 11770 0 R
+/Resources 11768 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+>> endobj
+11771 0 obj <<
+/D [11769 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11630 0 obj <<
+/D [11769 0 R /XYZ 88.314 761.061 null]
+>> endobj
+11631 0 obj <<
+/D [11769 0 R /XYZ 88.314 745.375 null]
+>> endobj
+11632 0 obj <<
+/D [11769 0 R /XYZ 88.314 729.688 null]
+>> endobj
+11633 0 obj <<
+/D [11769 0 R /XYZ 88.314 714.002 null]
+>> endobj
+11634 0 obj <<
+/D [11769 0 R /XYZ 88.314 698.316 null]
+>> endobj
+11635 0 obj <<
+/D [11769 0 R /XYZ 88.314 682.63 null]
+>> endobj
+11636 0 obj <<
+/D [11769 0 R /XYZ 88.314 666.944 null]
+>> endobj
+11637 0 obj <<
+/D [11769 0 R /XYZ 88.314 651.257 null]
+>> endobj
+11638 0 obj <<
+/D [11769 0 R /XYZ 88.314 635.571 null]
+>> endobj
+11639 0 obj <<
+/D [11769 0 R /XYZ 88.314 619.885 null]
+>> endobj
+11640 0 obj <<
+/D [11769 0 R /XYZ 88.314 604.199 null]
+>> endobj
+11641 0 obj <<
+/D [11769 0 R /XYZ 88.314 588.512 null]
+>> endobj
+11642 0 obj <<
+/D [11769 0 R /XYZ 88.314 572.826 null]
+>> endobj
+11643 0 obj <<
+/D [11769 0 R /XYZ 88.314 557.14 null]
+>> endobj
+11644 0 obj <<
+/D [11769 0 R /XYZ 88.314 541.454 null]
+>> endobj
+11645 0 obj <<
+/D [11769 0 R /XYZ 88.314 525.767 null]
+>> endobj
+11646 0 obj <<
+/D [11769 0 R /XYZ 88.314 510.081 null]
+>> endobj
+11647 0 obj <<
+/D [11769 0 R /XYZ 88.314 494.395 null]
+>> endobj
+11648 0 obj <<
+/D [11769 0 R /XYZ 88.314 478.709 null]
+>> endobj
+11649 0 obj <<
+/D [11769 0 R /XYZ 88.314 463.022 null]
+>> endobj
+11650 0 obj <<
+/D [11769 0 R /XYZ 88.314 447.336 null]
+>> endobj
+11651 0 obj <<
+/D [11769 0 R /XYZ 88.314 431.65 null]
+>> endobj
+11652 0 obj <<
+/D [11769 0 R /XYZ 88.314 415.964 null]
+>> endobj
+11653 0 obj <<
+/D [11769 0 R /XYZ 88.314 400.277 null]
+>> endobj
+11654 0 obj <<
+/D [11769 0 R /XYZ 88.314 384.591 null]
+>> endobj
+11655 0 obj <<
+/D [11769 0 R /XYZ 88.314 368.905 null]
+>> endobj
+11656 0 obj <<
+/D [11769 0 R /XYZ 88.314 353.219 null]
+>> endobj
+11657 0 obj <<
+/D [11769 0 R /XYZ 88.314 337.532 null]
+>> endobj
+11658 0 obj <<
+/D [11769 0 R /XYZ 88.314 321.846 null]
+>> endobj
+11659 0 obj <<
+/D [11769 0 R /XYZ 88.314 306.16 null]
+>> endobj
+11660 0 obj <<
+/D [11769 0 R /XYZ 88.314 290.474 null]
+>> endobj
+11661 0 obj <<
+/D [11769 0 R /XYZ 88.314 274.787 null]
+>> endobj
+11662 0 obj <<
+/D [11769 0 R /XYZ 88.314 259.101 null]
+>> endobj
+11663 0 obj <<
+/D [11769 0 R /XYZ 88.314 243.415 null]
+>> endobj
+11664 0 obj <<
+/D [11769 0 R /XYZ 88.314 227.729 null]
+>> endobj
+11665 0 obj <<
+/D [11769 0 R /XYZ 88.314 212.042 null]
+>> endobj
+11666 0 obj <<
+/D [11769 0 R /XYZ 88.314 196.356 null]
+>> endobj
+11667 0 obj <<
+/D [11769 0 R /XYZ 88.314 180.67 null]
+>> endobj
+11668 0 obj <<
+/D [11769 0 R /XYZ 88.314 164.984 null]
+>> endobj
+11669 0 obj <<
+/D [11769 0 R /XYZ 88.314 149.297 null]
+>> endobj
+11670 0 obj <<
+/D [11769 0 R /XYZ 88.314 133.611 null]
+>> endobj
+11671 0 obj <<
+/D [11769 0 R /XYZ 88.314 117.925 null]
+>> endobj
+11672 0 obj <<
+/D [11769 0 R /XYZ 88.314 102.239 null]
+>> endobj
+11673 0 obj <<
+/D [11769 0 R /XYZ 88.314 86.552 null]
+>> endobj
+11674 0 obj <<
+/D [11769 0 R /XYZ 88.314 70.866 null]
+>> endobj
+11768 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11774 0 obj <<
+/Length 2518
+/Filter /FlateDecode
+>>
+stream
+xÚ­œMs7†ïú<ŠañýqL9qʱwí)›#Q2«$R‘¨¸òï·1
+}q\Ù€÷ »g8|q·à‹Ͼ¿:û×{¯žkÕâêvá8óÖ.\ÌŠÅÕÍâ·ów?}÷ï«Ë/Ë éü¹cË +åùû/Ó¿üðùݹütµ’Ÿ7üyõáó§å…Æø‚°ù;?|ÿùýûŸ—ñƒ?,¿úùìòêìÏ3cá ±ÐB1!ä
+|€iŠ-—u¿á9öN YYÇ3± ™ÒãªTóf À¸»÷ÌI3ÇÞpF Hô ì r­kþîçec\“ÁûÉÉà<™ˆs&^0O™\¸@²ù£õ¿.ïg\Ž™Í6oÉq­LGasˆ$«Ù¼Ÿ—mŽqM6ï''›cðîòµ[ݪÊ0G"‡ŠV­øïÇe50­Inps¿ÐŒa\hœ’…ë8]oÚ
+W|
+èíËöúÔ-D3ó¢þK!¿ˆIz­€ìÇeõ1­Iýnp¿˜åÓúPCÌ.XEÀt©#TPÿˆÛñËíX \§56€é”.±_wÏû“m$pœa:
+æ¹›ã>ßÐ-ŸÉV³¼~\6¢5y¯œ¼‡g9áØù‹0p]`:È‚<aÈóÀ°s
+ÄHRÔº¼¬Æ5©ÑONj”àëõæ¯Ñ~|O“Ì×Ã9¥Ž¸§+4!™1€+A/©z2G¶,¨9Ô)å˜S­ɨZk€€—½‡qMÞë''ï•àÁ{c])Ø»µTXO˜Ï3®(„•’3'„2Ÿ’`÷9í%%㚢= bq¨kí^6Æ5™¯ŸœÌ‡ÁG-½ùÍ’Õ$Kìàãêh‰#Êûå…àçë1~0`?OÁ.$_ò'nAŠØWzŽ ¹eʤ¥<VD5öã² ­É„ýàdBÄý+Þ”Y=Q¥B2pfEÁ#iW+Ø xI‹×"y£
+ªm;´¾“Ã
+b$çk­^6Æ5™¯ŸœÌ‡Áµn54w«ËåÍÞ[Js¾{ÙeDjhöóc:î­/ù“„E2sŽ" ;&Éîw^^ëtÓ²ý0¬É~½Üd>Œ­ï|½ÌþW¬lÝ{fx~ª—.Eü5ב®“Î à¼9¹¸ÔŠYAÑŠ‘´¨µ„xÙ}×ä¾~rò_1Ïš„—Ìè@A÷†Iu4ñ©»&–…Y¿%•°m’‡òb$'ký(^¶Æ5Y¡Ÿœ¬€Á/[ê‡dcæ#5E“&FâºÖ¤!àeA0®I~rƒoÖÏûôrá1vªZEÀ…e E÷"FR¦V7ð’*®Eò J~X*ž÷KÊŸûÄs:þî™@+–š(ý¸,
+¢5iÒNš .’dÎÖ$‹…DÈS¤¶ñ‘ôàk…=/ë‚qMÂô““0Œ”‰o¨Ùn¨Ž¡ã5oŒ$Cõzéçe]0®I—~rÒƒ'ßA@Ìï(™¯^¿í`a‹%`{Ç”¶%ûùëêi}ò·Xq5çqh¡TT†À{*&Õµr·—­‡iMÖë'çaî´óºãÈ&ãu£¾ÃèÛÇý™ë¢Š’¢Ò ¥UÅvý¼ì;Œkò]?9ƒ‘ Òn𰺿ß]“%
+\ýu R¬“+êôó²:פN?9©ƒÁoÔ¹}Z¯©’o™3e¨õD­
+í§%a0¬E—~î ƾQeu¿¹ÛR_:.¾æ•¢Í﮽ø±—–ßûˆ`m¯}ì妷>"ì)yN^;coc6.þlÆ»˜‡‘AU knã[n‡[[pòÂ'™=ŒMHS ÐÿÈh˜“
+endstream
+endobj
+11773 0 obj <<
+/Type /Page
+/Contents 11774 0 R
+/Resources 11772 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11415 0 R
+>> endobj
+11775 0 obj <<
+/D [11773 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11675 0 obj <<
+/D [11773 0 R /XYZ 88.314 761.061 null]
+>> endobj
+11676 0 obj <<
+/D [11773 0 R /XYZ 88.314 745.375 null]
+>> endobj
+11677 0 obj <<
+/D [11773 0 R /XYZ 88.314 729.688 null]
+>> endobj
+11678 0 obj <<
+/D [11773 0 R /XYZ 88.314 714.002 null]
+>> endobj
+11679 0 obj <<
+/D [11773 0 R /XYZ 88.314 698.316 null]
+>> endobj
+11680 0 obj <<
+/D [11773 0 R /XYZ 88.314 682.63 null]
+>> endobj
+11681 0 obj <<
+/D [11773 0 R /XYZ 88.314 666.944 null]
+>> endobj
+11682 0 obj <<
+/D [11773 0 R /XYZ 88.314 651.257 null]
+>> endobj
+11683 0 obj <<
+/D [11773 0 R /XYZ 88.314 635.571 null]
+>> endobj
+11684 0 obj <<
+/D [11773 0 R /XYZ 88.314 619.885 null]
+>> endobj
+11685 0 obj <<
+/D [11773 0 R /XYZ 88.314 604.199 null]
+>> endobj
+11686 0 obj <<
+/D [11773 0 R /XYZ 88.314 588.512 null]
+>> endobj
+11687 0 obj <<
+/D [11773 0 R /XYZ 88.314 572.826 null]
+>> endobj
+11688 0 obj <<
+/D [11773 0 R /XYZ 88.314 557.14 null]
+>> endobj
+11689 0 obj <<
+/D [11773 0 R /XYZ 88.314 541.454 null]
+>> endobj
+11690 0 obj <<
+/D [11773 0 R /XYZ 88.314 525.767 null]
+>> endobj
+11691 0 obj <<
+/D [11773 0 R /XYZ 88.314 510.081 null]
+>> endobj
+11692 0 obj <<
+/D [11773 0 R /XYZ 88.314 494.395 null]
+>> endobj
+11693 0 obj <<
+/D [11773 0 R /XYZ 88.314 478.709 null]
+>> endobj
+11694 0 obj <<
+/D [11773 0 R /XYZ 88.314 463.022 null]
+>> endobj
+11695 0 obj <<
+/D [11773 0 R /XYZ 88.314 447.336 null]
+>> endobj
+11696 0 obj <<
+/D [11773 0 R /XYZ 88.314 431.65 null]
+>> endobj
+11697 0 obj <<
+/D [11773 0 R /XYZ 88.314 415.964 null]
+>> endobj
+11698 0 obj <<
+/D [11773 0 R /XYZ 88.314 400.277 null]
+>> endobj
+11699 0 obj <<
+/D [11773 0 R /XYZ 88.314 384.591 null]
+>> endobj
+11700 0 obj <<
+/D [11773 0 R /XYZ 88.314 368.905 null]
+>> endobj
+11701 0 obj <<
+/D [11773 0 R /XYZ 88.314 353.219 null]
+>> endobj
+11702 0 obj <<
+/D [11773 0 R /XYZ 88.314 337.532 null]
+>> endobj
+11703 0 obj <<
+/D [11773 0 R /XYZ 88.314 321.846 null]
+>> endobj
+11704 0 obj <<
+/D [11773 0 R /XYZ 88.314 306.16 null]
+>> endobj
+11705 0 obj <<
+/D [11773 0 R /XYZ 88.314 290.474 null]
+>> endobj
+11706 0 obj <<
+/D [11773 0 R /XYZ 88.314 274.787 null]
+>> endobj
+11707 0 obj <<
+/D [11773 0 R /XYZ 88.314 259.101 null]
+>> endobj
+11708 0 obj <<
+/D [11773 0 R /XYZ 88.314 243.415 null]
+>> endobj
+11709 0 obj <<
+/D [11773 0 R /XYZ 88.314 227.729 null]
+>> endobj
+11710 0 obj <<
+/D [11773 0 R /XYZ 88.314 212.042 null]
+>> endobj
+11711 0 obj <<
+/D [11773 0 R /XYZ 88.314 196.356 null]
+>> endobj
+11712 0 obj <<
+/D [11773 0 R /XYZ 88.314 180.67 null]
+>> endobj
+11713 0 obj <<
+/D [11773 0 R /XYZ 88.314 164.984 null]
+>> endobj
+11714 0 obj <<
+/D [11773 0 R /XYZ 88.314 149.297 null]
+>> endobj
+11715 0 obj <<
+/D [11773 0 R /XYZ 88.314 133.611 null]
+>> endobj
+11716 0 obj <<
+/D [11773 0 R /XYZ 88.314 117.925 null]
+>> endobj
+11717 0 obj <<
+/D [11773 0 R /XYZ 88.314 102.239 null]
+>> endobj
+11718 0 obj <<
+/D [11773 0 R /XYZ 88.314 86.552 null]
+>> endobj
+11719 0 obj <<
+/D [11773 0 R /XYZ 88.314 70.866 null]
+>> endobj
+11772 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11781 0 obj <<
+/Length 3056
+/Filter /FlateDecode
+>>
+stream
+xÚ­ÉvÛ8@÷þ
+-åEÌÃ2ƒJ ݉»6©,YNtÚ’\–ÜÕÕ_ß$h )€…·‰3H¸p
+’dÎ%q\ê»ÙNù΄ö“^ç»-ñÁh‰á;”$µÊù^Ï ¾Ç¸"ßëÉï18ã{=²÷=†nv›ã¦¹Ýü.t9¥‚eDH>cèÓN·Œz|IêZ^§B‚+Qܪ€O«€€ *$ÐcsÎÔò{gÂßÁô«P:×bä sO/‹¼Rˆ9ZÚŽà ”DµÉ9XÏ Ƹ"ëɃ18ã`=²w0†þÙlÆ Ö }
+-¼Ÿƒ©@ÌÉ‹û·?¤ÅÈ‹û’|.5gõ¼g1®(ÎêÉ]œÅàLœÕ#û8‹¡™ÄI=µOœ$ÔñHь¨)g®M‡$Ì©Ì ¥ê¡/ŒÚZiŠÃ3gg‹¦e D”Dmî9
+x ®ÄrkC.¶lHøSïkpê3ÌTNµÏ<'Ðܾ5ž³“œC͸ÃHú’¨Ë%xÁÁWä`=¹s0—;XOïL+þtÛ@Bs™Fàrè_ÃuÊÍNÊB/l›pT{zR–p¹†ÏX—rå dŒäWðw¹
+MÏzá_ÁR#!çK4—Cà bÜáv³›„?9Ób@%#BÙ”º¿;Ë> 1ˆJªRàn¿[<¾¨Ö$YÊmîícS ‚ÏÙþè,‚b¤àºor)8^§]‚ëOL™{aLb`#–Ê”›öÇ`ø‘°ö@!ݾœ™·›Cv²Dv…Ü6‡ãû ÃO_ ég§”wûN~úÊóK©¢ |ÆÁuXðpN¤×÷zí¿ïÏH…é =¹½9v?ÛEbû;ƺŸ¾íOÿÛuÿ©o'Ïö•mRš 7ÿü—äÚý¦ee»’€ˆ!?ˆÇ>¿„ûvÿr¬òŸ¿í:ƒA³r°žëèˆ}á@”.;×ÄØ4ß|çôõy½_=l×»ããüØ–üt¾ñýÄÖ‡ï×ö-ø. 5ݨ痠²_Úòöb$,4”?·¾ï/1R°züÌû‹ÏŸ_¼¹_£ûSüv<:3C‘àü^P£¡u®^¼|w1¾ŠBËW#ýö)cDÂüðâýÅè.–_»Fq&n9†…ë[åËÁwË*|0UÛßcÛöðò§Þ)rÛˆ¿-·?’Hø3Ž {Xlê63DsÕÿWµ£yì¿MP†X>ç?MèºEEmÌ}´{ÀÛs’Z:ãzˆþ?TáS“
+endstream
+endobj
+11780 0 obj <<
+/Type /Page
+/Contents 11781 0 R
+/Resources 11779 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+>> endobj
+11782 0 obj <<
+/D [11780 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11720 0 obj <<
+/D [11780 0 R /XYZ 88.314 761.061 null]
+>> endobj
+11721 0 obj <<
+/D [11780 0 R /XYZ 88.314 744.862 null]
+>> endobj
+11722 0 obj <<
+/D [11780 0 R /XYZ 88.314 728.663 null]
+>> endobj
+11723 0 obj <<
+/D [11780 0 R /XYZ 88.314 712.465 null]
+>> endobj
+11724 0 obj <<
+/D [11780 0 R /XYZ 88.314 696.266 null]
+>> endobj
+11725 0 obj <<
+/D [11780 0 R /XYZ 88.314 680.067 null]
+>> endobj
+11726 0 obj <<
+/D [11780 0 R /XYZ 88.314 663.868 null]
+>> endobj
+11727 0 obj <<
+/D [11780 0 R /XYZ 88.314 647.67 null]
+>> endobj
+11728 0 obj <<
+/D [11780 0 R /XYZ 88.314 631.471 null]
+>> endobj
+11729 0 obj <<
+/D [11780 0 R /XYZ 88.314 615.272 null]
+>> endobj
+11730 0 obj <<
+/D [11780 0 R /XYZ 88.314 599.073 null]
+>> endobj
+11731 0 obj <<
+/D [11780 0 R /XYZ 88.314 582.875 null]
+>> endobj
+11732 0 obj <<
+/D [11780 0 R /XYZ 88.314 566.676 null]
+>> endobj
+11733 0 obj <<
+/D [11780 0 R /XYZ 88.314 550.477 null]
+>> endobj
+11734 0 obj <<
+/D [11780 0 R /XYZ 88.314 534.278 null]
+>> endobj
+11735 0 obj <<
+/D [11780 0 R /XYZ 88.314 518.08 null]
+>> endobj
+11736 0 obj <<
+/D [11780 0 R /XYZ 88.314 501.881 null]
+>> endobj
+11737 0 obj <<
+/D [11780 0 R /XYZ 88.314 485.682 null]
+>> endobj
+11738 0 obj <<
+/D [11780 0 R /XYZ 88.314 469.483 null]
+>> endobj
+11739 0 obj <<
+/D [11780 0 R /XYZ 88.314 453.285 null]
+>> endobj
+11740 0 obj <<
+/D [11780 0 R /XYZ 88.314 437.086 null]
+>> endobj
+11741 0 obj <<
+/D [11780 0 R /XYZ 88.314 420.887 null]
+>> endobj
+11742 0 obj <<
+/D [11780 0 R /XYZ 88.314 404.688 null]
+>> endobj
+11752 0 obj <<
+/D [11780 0 R /XYZ 88.314 388.49 null]
+>> endobj
+11753 0 obj <<
+/D [11780 0 R /XYZ 88.314 372.291 null]
+>> endobj
+11754 0 obj <<
+/D [11780 0 R /XYZ 88.314 356.092 null]
+>> endobj
+11755 0 obj <<
+/D [11780 0 R /XYZ 88.314 339.893 null]
+>> endobj
+11756 0 obj <<
+/D [11780 0 R /XYZ 88.314 323.695 null]
+>> endobj
+11757 0 obj <<
+/D [11780 0 R /XYZ 88.314 307.496 null]
+>> endobj
+11758 0 obj <<
+/D [11780 0 R /XYZ 88.314 291.297 null]
+>> endobj
+11759 0 obj <<
+/D [11780 0 R /XYZ 88.314 275.098 null]
+>> endobj
+11760 0 obj <<
+/D [11780 0 R /XYZ 88.314 258.9 null]
+>> endobj
+11761 0 obj <<
+/D [11780 0 R /XYZ 88.314 242.701 null]
+>> endobj
+11762 0 obj <<
+/D [11780 0 R /XYZ 88.314 226.502 null]
+>> endobj
+11763 0 obj <<
+/D [11780 0 R /XYZ 88.314 210.303 null]
+>> endobj
+11764 0 obj <<
+/D [11780 0 R /XYZ 88.314 194.105 null]
+>> endobj
+11765 0 obj <<
+/D [11780 0 R /XYZ 88.314 177.906 null]
+>> endobj
+11766 0 obj <<
+/D [11780 0 R /XYZ 88.314 161.707 null]
+>> endobj
+3886 0 obj <<
+/D [11780 0 R /XYZ 70.866 121.428 null]
+>> endobj
+11767 0 obj <<
+/D [11780 0 R /XYZ 70.866 101.992 null]
+>> endobj
+3890 0 obj <<
+/D [11780 0 R /XYZ 70.866 81.193 null]
+>> endobj
+8729 0 obj <<
+/D [11780 0 R /XYZ 70.866 68.871 null]
+>> endobj
+11779 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F45 6502 0 R /F53 6507 0 R /F14 6622 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11830 0 obj <<
+/Length 3295
+/Filter /FlateDecode
+>>
+stream
+xÚÍKs·€ïü[•Ëò@ï‡+•*[¦¹l9Q˜“ìÚ»$·L.™å2‰òëÓ=;X£ÌÐèšÊE¥’fñ˜oÝóä‹Û_üùìÛ«³¯Þzµð,X«W7 Ç™·vá‚dV,®Ö‹Ë7ùæ¯W—Î/¤óKÇÎ/¬”Ë·ï~¸<þËw?½ùÇ—ï¯Î…äËoš?¯ÞýôþüB§$ü@ÄßüøîÍù/Wߟ]^ýóL@øB,´LBèyX\?œ}ü…/ÖðŸß/8SÁ/þÝlú°€.øËýâïgë麊§²¾ÿðîÛsè{ø±·Ÿûýáòíå‡Ë÷o.¿ìSœï™—ºÔ%m3ZzÅÓ‰5j!$ B˜tf­`<v'&Šs¾|Ø^Ù¡ Ðü‘´¥Ž(æÊ''Ç e˜ .çßoe7§©ÙÞoÚ©ÙÜœ ¾Üì7»ë öêØg΋]XÍ‚‹ ©™SêØØw«Ãêøû«sË—Ÿž6Ï͈âœ|õV›dw Ëœw‹ ÿäñ‰Ÿ¥4Ùo/Œ±Ë‡ÇõËý¦ýœ˜ým;CšmÚ?Z2¡aÖAB£üëìÊ»«5óêØ’Rá4YwOݾ0°kÁÎ ØÆéòè0U¿gl2@—%ˆ;Ãêš±)É”?¶ä¬9íë¯o~æ\=®Ö=x§`z
+¼³L;ŸãŸ«ÃËóÀì6¦™6»ÛÝa³¿9W|¹ºþ}
+Y8på¦UeP`ÆALœåÀY0ž€³Úçôæ/¿nö_’%Û:Œ[J<DN~¼é!Bˆ¢ê‰Ê1ï]N\oÐm¯7CV ÙTºÕÊ̤• Ì Ká´d¡¥×yUb¥øçíínu¿YÍ47,„¹`ë˜Ô’b¦¡%-½n¦ëñq¦Sü~óô¸?¿Ð|yø¿šl£™µžb²¡% -½n²ëñq²Süíæж¸…-SòÐäósÜꘆb²¥òLŠÜYúã¥1nf± £ãASˆ¥óA¿R¬z|+ŗŪfžÄJ™Ow¸7>=o¯W÷=pØ4À¦pÈœ­×9¼huS*
+4ä¨Æ˜=€ÉåÌ^C6oH'hHekÓÃSÖ ¦1)«Æz E¬È°Ï}6‹
+h;ÙÞzpÔ7ßöûëN[V2A`o;̇ÕúíU(]5SJθ´9³è¯¶$\X×áŽløÜs ,Iøå(Ôôø[Ž§à²ÁõÌhpÊ,Æ`‡yL5-Ö*äܧýãuŸÃ=ø@BÕ`¤ïPË‹…×as¢ä–LðS&
+™ !m&»T*%Ør\ª&Æ°”w›çÃfÝwŠf’ýj¨Ä:…ë :"ÔFÌ,‘ÑŒ;‹ ^/\f€£G)¸’ê™1$¥Ìa•\³ÆÔc¥‚JƒÛ;"“åÕÌ2Á†
+™ %Å'güà(S
+.G¥zf Kóúnsº0ÿʼniç ¸xbZ»;’zsˆ‰3Ÿ”6z,…LÐ’“ÓSïzp”)—#S=3F¦”Y’É2é)fm
+®3Ë#:x"̬“°M@$Ð Zfzî]Ž:¥àín;œ„uÐ
+êñ‚nJI@@;ój§ƒ`’SäáØæŠ}"
+Ü;›l˜[&ç™Uy8¶¤§_ù$
+°„*MwÀ#ÁI1ágNÄñö~í)qlIúɉ88ú”‚ˉ8´MÄ3è®Wb̯”¦)Þ™ÁUg¤¥\Í@
+©°ª¡§
++…bÔÝR@¥lnö̧¸ˆ±¶w`- ê€G±‚Œxæk¿*pfEY‡-áíÖŸ%þ­_bÈÒ\ 
+ªMAÀÇ3™ÖuF¼Ç—é-·ý¯iðÌÁO ÈXÝ`â GÎ?*6w„ä
+²“ìm=æ³s í ÁÒõ¶+Üd¡ëÁQè\ºž…î vªÐÕˆB§ü‘{ñãs?c%­nÞqK`´dÝäêˆ
+ëq€xDÀÔæÍäL|åeßÊŽ7ÞSø„+;>#—AGVvUþÌy*~8ÆŠ‚ [²ÆL>pêÁñÀIÁÅ•€Ù®ìsÊÊ^Ž+{†ÈOa—c) x‘¶9tàÐqœY©( Ê ¡rèè9z;÷’c5“ž¢ÂÖ¸Ÿ|Þ‹
+(¾ð^w¦xhÑLHC…EÇ “C{œîG!/°ÆjN/*ëó飔¾ý(åéƒ8ìnÂ7"á' ˆ?V6߈äкdN·‡ñ¶»ëû—uÜT$[ÂŒá+µùqÃ?ö5暆x¼ z½ÞÜ@—¾l
+_‡%Oþ©¯)‰ë­€<Ã÷îñá©·k20ï}ÖµÓ~éûú¨Á¡¼æÛ£Ç~š É!u´°%ËíÙf!]ý?ƒ<Æ;
+endstream
+endobj
+11829 0 obj <<
+/Type /Page
+/Contents 11830 0 R
+/Resources 11828 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+/Annots [ 11776 0 R 11777 0 R 11778 0 R 11784 0 R 11785 0 R 11786 0 R 11787 0 R 11788 0 R 11789 0 R 11790 0 R 11791 0 R 11792 0 R 11793 0 R 11794 0 R 11795 0 R 11796 0 R 11797 0 R 11798 0 R 11799 0 R 11800 0 R 11801 0 R 11802 0 R 11803 0 R 11804 0 R 11805 0 R 11806 0 R 11807 0 R 11808 0 R 11809 0 R 11810 0 R 11811 0 R 11812 0 R 11813 0 R 11814 0 R 11815 0 R 11816 0 R 11817 0 R 11818 0 R 11819 0 R 11820 0 R 11821 0 R 11822 0 R 11823 0 R 11824 0 R 11825 0 R 11826 0 R ]
+>> endobj
+11776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.669 716.194 154.798 724.813]
+/Subtype /Link
+/A << /S /GoTo /D (classmic__lib) >>
+>> endobj
+11777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 701.85 201.396 712.311]
+/Subtype /Link
+/A << /S /GoTo /D (structmic__lib_1_1offload__status) >>
+>> endobj
+11778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 691.046 269.01 699.737]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__number__of__devices) >>
+>> endobj
+11784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 676.625 228.034 687.163]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__signaled) >>
+>> endobj
+11785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 664.177 218.422 674.589]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__report) >>
+>> endobj
+11786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 651.477 269.512 662.015]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__device__number) >>
+>> endobj
+11787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 638.903 304.857 649.44]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1offload__get__physical__device__number) >>
+>> endobj
+11788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 626.329 276.99 636.866]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__num__threads__target) >>
+>> endobj
+11789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 613.755 277.079 624.292]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__max__threads__target) >>
+>> endobj
+11790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 601.181 269.512 611.718]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__num__procs__target) >>
+>> endobj
+11791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 588.607 259.891 599.144]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__dynamic__target) >>
+>> endobj
+11792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 576.033 260.393 586.57]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__dynamic__target) >>
+>> endobj
+11793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 563.459 253.426 573.996]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nested__target) >>
+>> endobj
+11794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 550.885 253.929 561.422]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__nested__target) >>
+>> endobj
+11795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 538.311 262.393 548.848]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__schedule__target) >>
+>> endobj
+11796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 525.737 262.895 536.274]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__get__schedule__target) >>
+>> endobj
+11797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 513.163 241.77 523.7]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__lock__target) >>
+>> endobj
+11798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 500.589 259.443 511.126]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__lock__target) >>
+>> endobj
+11799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 488.015 242.273 498.552]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__lock__target) >>
+>> endobj
+11800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 475.441 252.243 485.978]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__lock__target) >>
+>> endobj
+11801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 462.867 244.765 473.404]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__lock__target) >>
+>> endobj
+11802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 450.293 261.944 460.83]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__init__nest__lock__target) >>
+>> endobj
+11803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 437.719 279.617 448.256]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__destroy__nest__lock__target) >>
+>> endobj
+11804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 425.145 262.447 435.682]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__set__nest__lock__target) >>
+>> endobj
+11805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 412.571 272.417 423.108]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__unset__nest__lock__target) >>
+>> endobj
+11806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 399.997 264.939 410.534]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1omp__test__nest__lock__target) >>
+>> endobj
+11807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 387.423 262.563 397.96]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__target) >>
+>> endobj
+11808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 374.849 263.065 385.386]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__target) >>
+>> endobj
+11809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 362.275 270.274 372.812]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__stacksize__s__target) >>
+>> endobj
+11810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 349.701 270.776 360.238]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__stacksize__s__target) >>
+>> endobj
+11811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 337.127 263.514 347.664]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__blocktime__target) >>
+>> endobj
+11812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 324.553 264.016 335.09]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__blocktime__target) >>
+>> endobj
+11813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 311.978 275.376 322.516]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__serial__target) >>
+>> endobj
+11814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 299.404 297.406 309.942]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__turnaround__target) >>
+>> endobj
+11815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 286.83 296.688 297.368]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__throughput__target) >>
+>> endobj
+11816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 274.256 250.593 284.794]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__library__target) >>
+>> endobj
+11817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 261.682 251.095 272.22]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__library__target) >>
+>> endobj
+11818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 249.108 257.138 259.646]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__defaults__target) >>
+>> endobj
+11819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 236.534 289.525 247.072]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__create__affinity__mask__target) >>
+>> endobj
+11820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 223.96 293.739 234.498]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__destroy__affinity__mask__target) >>
+>> endobj
+11821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 211.386 251.92 221.924]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__target) >>
+>> endobj
+11822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 198.812 252.422 209.35]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__target) >>
+>> endobj
+11823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 186.238 293.255 196.776]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__max__proc__target) >>
+>> endobj
+11824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 173.664 297.236 184.202]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target) >>
+>> endobj
+11825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 161.09 307.206 171.627]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target) >>
+>> endobj
+11826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.385 148.516 297.738 159.053]
+/Subtype /Link
+/A << /S /GoTo /D (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target) >>
+>> endobj
+11831 0 obj <<
+/D [11829 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3894 0 obj <<
+/D [11829 0 R /XYZ 70.866 771.024 null]
+>> endobj
+11832 0 obj <<
+/D [11829 0 R /XYZ 70.866 727.029 null]
+>> endobj
+8730 0 obj <<
+/D [11829 0 R /XYZ 70.866 141.437 null]
+>> endobj
+3898 0 obj <<
+/D [11829 0 R /XYZ 70.866 133.455 null]
+>> endobj
+11828 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+11913 0 obj <<
+/Length 4203
+/Filter /FlateDecode
+>>
+stream
+xÚÅ]Ks7¾ëW°j/RU„
+å”õ$W"€™œ]mýò›œœãßþ6‘BÇ0ùOóÊ«‰±ZX£ñûËÉÉÖß·dw®VO”ÞF׬SB¶³}{9¿¿_Ü7´oý~ßØŽŽ”>øÉ®ŠBZ³|Û¯
+@‘&Þ€
+û0¿û´x(€-Œ1¨Á ¥MÛc΄ j£æÄ€T^q˜SYýŠ ®÷%­ZœŸ× H;ÊétÀ‡¼Æà …²&îó"3A`€E^Z† ¶Ç‹æ‡ÆëF¿—ÝÈ =fjÑ•nd„lŠ#5BωuáúâáKÚ95 ´‹ÂA}5¿/9RTÂR’©F€w)h¯#)T³a@Ì‘˜ßSÐ,_§y~W™(,ÆÎ.R¡ö+oú0?»£X»aKö9_4¶^ {álïø‡é¬ä  3qÖuÌ‚é_A#YXEÚÞlv|ðæt6M$OM„šUÊ– ;‚sNý
+­:ý±vûæâ¼°x£paÍên¤Géh±Æ—¢‘ Ý.ZÃ¥W>• —wꑨïfÀ´¡‰îó«uË~qHht,J, tBãüJa#&¥ý6Ž@m8 Gm×w¬zäÖ±ºÈÃŽUÙ:Vóö39Ö—û‹³ùeyŸÙUG,i5¤àC^M™sj=4mhJiRè:¯¦¥r»æžd;NaE°ÅÑOK5ävëųò±¬;a†µxXŽj#f˜ÁȈõÈXŸi€ùþóünq^®;e¾ÈoÑÆõj~I'vz¼àþâ¿;Ên—TÓ)9±€¶¸}f†Õ¾P‹_òB‹Å$˜ñ^ø¢ƒ)+$è‰Fê¡iÔ,•áË‘TŒk¬ošCdlú©9L{ÌÓñ!Ç–K¤ ìÇ»Åâ%–)°ƒÆšLÇœò–TÄ Ú×Ü>ÜÙÊc] ÿßl…O²ÂTPë“U5pËU]à—¸ª´¥ª.èüòâÓu •fJqµ°”ue4)ì«Òy€Á@»½*³@FôßwÙ¯
+›œ l½<´WªbQœÆD¥ÝqðÂjÿ ÉZãp5ŽD‡Z×&ëzä–¬»È/’u=lKÖ]Øþ“H…Z1àz!ÀVäÃ"°ò°!|›6 ÝŠÎ2´i8’2#Ú´zä¶Më"ߣƒÌ/ç}æ"ý4?\\/œ?W¼4`Ǹ¬%_6äSþ]JQ, ±ôPð ™ḞŽƒip$~}¦©Gn™¦‹|·¸½¹ÛÙ52;ƒ\²i£°¢Þ4{õj~bë)dÀÖœŽâWèBÓNÌr$%Û¹¸ah]Hq`bÏ¢J1é †É¼Ý.}F÷-Å€tOíU†,A ™~µdPZ=…åÑô:ö´:¿^ÑA\z^¦ªŠÈËdTC O´)Ò„‚ò›+Lžš–øÏ¡_2ùÀÒOpͪÔ&Líl“?l#I¯×±u=fkì.f÷8HvâZ‰è#®ÃnÏÅ·nO‰G*·9B· ÀBÇ‘d»‹<Lèõ˜-¡w1ìÍ€‹-aT1Å}ø|·˜Ÿß—jwL–°p&Çýú¼TÁÅz}¢ÿ –ãLâzëDÜg'WÂö=ö¥Ù,ƒ8°ìR6ÓÞ—Ûn÷þ”o{Å hLl¥Ä hLðEç¥+Ÿ ÕëÚƤíÀ •±DÆ¡èÚšÒN oíFR¶› GJ‘¤ö뤤zÌ6%u1¯æ–ÓcÀÄtÖ§˜½ôD›c.²àFlyCŽËNOÀ$.ekzæ$w4=)#<ŽW/µù´Ržjo,=y4¦·â`¢MÅùJO¥UÆ›cO›àpØM. ÇDU\‡ ê1[.èb¾\žÖã¶åi÷öîæ¬ÄÁ ,¨èAe¨ìl`-“¸th£Ù@¢ö¢cGKÔ^p™öƲCq(™×‹ƒE¡¡èº}l
+R
+8V²T¤»“ÖZɪÇ\•
+ f?7Ð
+#Ï\ƒ>Ÿ+;?Ç$.Pß›
+;–! ¢îh¹·ZzîåJu7–#° ¡›¤Äq[˜Š3œ²=F#lnѱ©5Ç¢c“ÕÜ:‹Ž ˜«´`Ò]_Cç`WçXþÈDÒÄœ[/.E¦ 6w|lbMÎâ(›6w”×Ħ÷†Cz®Ç™Ì‡†3xãaŨl\Ô&r©¢›x ÇÜòñ—u–à0Û\ÚÅìX%,Â1ÀzÓ,Á$°ì«#“¸@7wæâŽX¬&‡Ñ RA™m|À¢1Á0ˆ£›«'LæCƒÉ‹të[2u¶?™jb6º jdHÍÅÔ^ 'Sk&&SÐ*Ã<û¼8¼,>mD}ËdCÄ,žM¶':{u#l˜ôD«SÏôTŒN¶¿v f½8´:EW¦ÚëD§k£sHçš«zÄq¡yÐ6çy:u=éÍ
+6ac¤}S]×sn\ÞÃöòî`=âjs°‹8\é:Ã1Q:³¯Ó‰~‹J—EXÐtƒXª£×Ô¹‹žzah_žhîU.‡»j,©2½pT¸€ŒQ/Õ·ÖtlâdÅ ªmƒês묲õ¼eÀ4±Ù“M@7F±p›£Xz%hŠ¥¢1¬nƒ|¼.“,]¾˜ŽnçJ1‡>÷Ì5{’õ°>6[’]Xþ†GXú@Œ\Øñ»¹®9AT/LDÍa1›hnô^.Ä ²h¤¢pÔ²H²õ²z˜$®é×tr“+®GÕØ& ;õøuvi3²,½»”>ˆ Ùts…,²¬ ›82ãé£a-É™ÕgÍ.UþdIºY›‚zH:Ÿ‰¹¾ 9TÄ‚ÐA3À®žžNfÊ^Ä¢HAGô!Ò§:_Äb6‘A˜`›EèDs£‹X4£cpXmÐŒ6uØz†¥ë̓gÏÐI@§Ötn£¾ŒVEa3­ô—²ºyø¿”¶ ¥MA7³D[úðmzÂ
+Æ|ôöò#·m÷ÀH×V9|¥píŒ!sèÿdÑò
+endstream
+endobj
+11912 0 obj <<
+/Type /Page
+/Contents 11913 0 R
+/Resources 11911 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+/Annots [ 11827 0 R 11833 0 R 11834 0 R 11835 0 R 11836 0 R 11837 0 R 11838 0 R 11839 0 R 11840 0 R 11841 0 R 11842 0 R 11843 0 R 11844 0 R 11845 0 R 11846 0 R 11847 0 R 11848 0 R 11849 0 R 11850 0 R 11851 0 R 11852 0 R 11853 0 R 11854 0 R 11919 0 R 11855 0 R 11856 0 R 11857 0 R 11858 0 R 11859 0 R 11860 0 R 11861 0 R 11862 0 R 11863 0 R 11864 0 R 11865 0 R 11866 0 R 11867 0 R 11868 0 R 11869 0 R 11870 0 R 11871 0 R 11872 0 R 11873 0 R 11874 0 R 11875 0 R 11876 0 R 11877 0 R 11878 0 R 11879 0 R 11880 0 R 11881 0 R 11882 0 R 11883 0 R 11884 0 R 11885 0 R 11886 0 R 11887 0 R 11888 0 R 11889 0 R 11890 0 R 11891 0 R 11892 0 R 11893 0 R 11894 0 R 11895 0 R 11896 0 R 11897 0 R 11898 0 R 11899 0 R 11900 0 R 11901 0 R ]
+>> endobj
+11827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 740.863 180.603 749.612]
+/Subtype /Link
+/A << /S /GoTo /D (struct___offload__status) >>
+>> endobj
+11833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 725.998 189.623 736.464]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 712.98 209.797 723.446]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 699.962 223.919 710.499]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+11836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 651.53 218.082 662.126]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_adfbcd2c902758c82c5f47133b7e903c5) >>
+>> endobj
+11837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 640.359 235.764 649.108]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_adc49588b10a1a52dfdc1e3cbe272242f) >>
+>> endobj
+11838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.264 640.359 294.286 649.108]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a102caefd086b98c8e11c4d6090c7413f) >>
+>> endobj
+11839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 627.341 251.195 636.09]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ac006d6fb077967ea49b13ea31e78e59f) >>
+>> endobj
+11840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 612.602 229.783 623.072]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a52d0581ecef8354a80f0f61b6497c62c) >>
+>> endobj
+11841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.814 612.602 380.729 623.072]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a279f28911863f7da1286cb9fe21e0e2f) >>
+>> endobj
+11842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 598.963 263.666 610.918]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7401c68fe7b0ede2638437b85f8058ce) >>
+>> endobj
+11843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.64 598.963 363.555 610.918]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a279f28911863f7da1286cb9fe21e0e2f) >>
+>> endobj
+11844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.506 551.103 216.513 561.622]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.013 551.103 282.02 561.622]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_adfd97136adf943c0e642ce71705bff19) >>
+>> endobj
+11846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 502.099 184.611 514.054]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.585 502.099 260.076 514.054]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a16abf06e96a64fa495bb02437ce9e1e5) >>
+>> endobj
+11848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [263.069 502.099 329.564 514.054]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5ab919bc302330213b2382b8c638e749de) >>
+>> endobj
+11849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.557 502.099 390.579 514.054]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a102caefd086b98c8e11c4d6090c7413f) >>
+>> endobj
+11850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 489.081 178.882 501.036]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8) >>
+>> endobj
+11851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 478.299 185.687 488.217]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a72d58cfeba9924ff31f947038c3b5b25) >>
+>> endobj
+11852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.996 478.299 294.91 488.217]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a279f28911863f7da1286cb9fe21e0e2f) >>
+>> endobj
+11853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.585 478.299 406.446 488.217]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a50bc25f1a6147665d9588783b54167c1) >>
+>> endobj
+11854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.121 478.299 525.406 488.217]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a93269fd4acd17b027c88b9aa0aff3b36) >>
+>> endobj
+11919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 466.343 109.223 476.132]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a93269fd4acd17b027c88b9aa0aff3b36) >>
+>> endobj
+11855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 453.216 210.837 465.171]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8aa247810aa67d24e460040a43bf2e2ead) >>
+>> endobj
+11856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.83 453.216 293.775 465.171]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8aa52ae84161a6467305a276b662b4ea08) >>
+>> endobj
+11857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 405.405 218.459 415.875]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_aea0f59da635767917f24abad7821608a) >>
+>> endobj
+11858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 392.262 218.961 402.857]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a5e1ce183037b2d86a94c2f094ae3b552) >>
+>> endobj
+11859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 379.244 254.306 389.839]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2d227602e926615ff4ded70e1edc326c) >>
+>> endobj
+11860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 366.351 214.859 376.821]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a406c8f3cd7e5e316c35e671943ec90db) >>
+>> endobj
+11861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 353.333 196.931 363.803]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a1345f47c36719db8c63c15ee8623fbff) >>
+>> endobj
+11862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 340.19 246.994 350.785]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ab1c955594b8b63071953fab5b0e9c20d) >>
+>> endobj
+11863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 327.172 229.065 337.767]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a740332c114b8006832a6e4a40490e017) >>
+>> endobj
+11864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 314.154 177.483 324.749]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_afd5977ae80eb184bc58a454fe680cde8) >>
+>> endobj
+11865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 301.261 174.622 311.731]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a951400c6c0ef8c5a177b92b7a886369c) >>
+>> endobj
+11866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 288.243 206.856 298.655]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a9fb362632a8eef3cc456463618caf489) >>
+>> endobj
+11867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 275.1 200.607 285.637]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a4a4eaa91f37f6ce35c395c9612f7f2dd) >>
+>> endobj
+11868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 262.082 195.792 272.619]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ad44c848990454b48bd37ed8f6a22c945) >>
+>> endobj
+11869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 249.064 227.972 259.659]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a8d9d798a5d847e499238d837a4bcff48) >>
+>> endobj
+11870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.457 249.064 296.465 259.659]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 236.046 221.31 246.641]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a02f8ad5383a87505b6fbb0793d9adc46) >>
+>> endobj
+11872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.795 236.046 289.803 246.641]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 223.028 213.742 233.623]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a89acf61f55afe8305385d00765fe1917) >>
+>> endobj
+11874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.228 223.028 282.235 233.623]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 210.01 210.873 220.606]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ad2e915a8b7d831cfc0aed125293ca876) >>
+>> endobj
+11876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.359 210.01 279.366 220.606]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 196.992 204.623 207.588]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_af0db031140cfa95716ef8b0dda401aa5) >>
+>> endobj
+11878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.109 196.992 273.116 207.588]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 183.974 204.408 194.57]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a1011ab0c45eba008822405956a76f89e) >>
+>> endobj
+11880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.894 183.974 272.901 194.57]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 170.956 198.159 181.552]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ae6b4fcf7bd782c5dfe63d932c35cdefd) >>
+>> endobj
+11882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.644 170.956 266.652 181.552]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.379 157.938 213.265 168.534]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a60c915c14c15fd1eaaf567f64c8709cb) >>
+>> endobj
+11884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.64 157.938 281.647 168.534]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.027 144.92 217.415 155.516]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a5d4a882956d239429012df086aa92a58) >>
+>> endobj
+11886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.438 144.92 289.446 155.516]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 119.947 192.752 130.542]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a354af3ae9805fc9d87c0690345e8ee3b) >>
+>> endobj
+11888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.238 119.947 261.245 130.542]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.654 119.947 452.951 130.542]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 106.929 210.425 117.525]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a5fe0c1f24f495b7008dc5cf5e56ad6ec) >>
+>> endobj
+11891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.911 106.929 278.918 117.525]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.327 106.929 470.624 117.525]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 93.911 193.254 104.507]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a91aff80928b0d402d4c43c113b671c14) >>
+>> endobj
+11894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.74 93.911 261.747 104.507]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.156 93.911 453.453 104.507]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 80.893 203.225 91.489]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ac83571d32139ab9d16192faa66d9bb7e) >>
+>> endobj
+11897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.711 80.893 271.718 91.489]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.127 80.893 463.424 91.489]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 67.875 188.995 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a2660b0549f99e3d4dfe393365204cc3b) >>
+>> endobj
+11900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.481 67.875 257.488 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.897 67.875 449.194 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+11914 0 obj <<
+/D [11912 0 R /XYZ 70.866 789.024 null]
+>> endobj
+11915 0 obj <<
+/D [11912 0 R /XYZ 70.866 753.797 null]
+>> endobj
+11916 0 obj <<
+/D [11912 0 R /XYZ 70.866 666.402 null]
+>> endobj
+11917 0 obj <<
+/D [11912 0 R /XYZ 70.866 563.741 null]
+>> endobj
+11918 0 obj <<
+/D [11912 0 R /XYZ 70.866 517.467 null]
+>> endobj
+11920 0 obj <<
+/D [11912 0 R /XYZ 70.866 420.152 null]
+>> endobj
+11911 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12016 0 obj <<
+/Length 4606
+/Filter /FlateDecode
+>>
+stream
+xÚÅ]Ks·¾ëWlU.dU8×!Ú"cºdÉ‘W‡ÄÎW2Ë|(•ØùõéÆÌ pfv†h2[,rß7~ã1jõq¥V}ñõúÅWÇÁ¬B3«õ‡•WMpnå#4N¯Ög«Ÿö¾ùöð‡õÑÛýðaÏ7û`ïøäÕQû›—o¾y÷ýÑëõ¾µw˜þ¿>yózÿ@[ C÷7ÇǯÞìó§^î{µ×|Ûp?Ôۣ㣷G¯¿9Úÿçú»Gëÿz¡‰§Zé;^!4põþòÅOÿT«3úÛw+Õ˜VÿIŸ¼\¡5EC?_¬~|ñ·ª{VµýÌh·ž9øÆY³òN7ªèŸlbÑmõÓµnïßû`÷®ÏϺ¿1µ›Ç·éSü ×—Ÿ>‚6Рƒ„nêHöñŽÿC¾ÚØF[È Ÿ_ß`"É£
+ͨ"Û%Wot]\ñdx>¤µoŸ‘>Þ\ïµ÷Ç«wôm/í"éG=_X;PK€²~ƒŽ“ÔF§1ðp„áyd„ñäGÙgÔÓõ¡õÛt‡B “uëF5$ècím!½û(Cyge&éDÛ
+
+-8`D
+`ɹi
+Å­ DzF ¢GTdwBqhwy Ô74èÐ2þ¼)oX°˜–>Ž:ǯoX P*p¬¶9ètHI€)ðYår২p‚–—8VrzL‰‚„~r‘c}¡Ÿ©r|D :”:aÀBuÊhŒ’ ÈuNŒ8Ƕɉø ŠäD\˜k[H5:`‡ä½Â¨m=¨t÷Jêa£jû ìsÅ.vxØ6ÈØÚ ã0ŽKVÃí@Ozbª‚L «iG)1þr5f¸
+¶ \cŽ9VäèT=
+`Cn¸
+š l<dx¾[äá „œÀ“Ý“Ó
+2LvÔ«ãè  ®Þ}ñm™¤±ã%èDªôÁª;7È0ÙÑ"'ró¢š 96†9¶…4ÓŠ3zP*r¼‡¹¶…Ñ4Ê `*r¼3£¶U9‘J] -à"'êB &ƒ Õ>T|"æµOmECõ¿Òó*¶‘G3T±y­WŽÜ°­s¿@qFµ#ß‘½öùhhd
+À¦SJÛäÛQˆ-PU²]n³ºñ\Œ"ÉS·Ü`iµ–`ãˆÒ›GYdÚª´+¨ZŠúÑÙú ÊyggUÈ.¨f˜ç¿Ü°`OoöFŽƒPHð¼±ʇ¾áS¥{ç§CI>‹V
+]ÜE„(E7òÑ Ìé.vH¹5j:±±FÒ[è"³Jõëé å3ˆ&§3é"Œæ½ûÏæ"¬k”w.‚kHï縈zÈÞElc.põz±MàöWr ýôåvØ;( (Ö / ŸÀ;(ë%èFýîc¼ïW¯§ÃÝwÞ¯žKïÞA ÛAE“ .§³Ó;ð.ßçr6 àøŽ3gû
+)5Xw\B§3è<’F÷W\°L‡„q,•Z1ƠǢ ¥·Óùt>2\o\C£¤‘ Ÿ¼7ùñÆ=lªö‚19ötØ¡8D y7/ ÇOLG»êA íœÎ@‡CÏ|ÅZYš
+>Lv<ø˜´‘¾žŽA—6ÒçÒÛºËÏt×\`€‰ðÃͼ @5_r:óïò#²“H€`‚f[W‚ » 4úú TÚ‡¡ ´* 9Ö'†h$ø¿…¡'mN"†´‰£¾9É#5}nªX
+>ÇœŒ<®M7 =é„Z¾1éÓ¹”zº@2ça2ºË“|n%èPL‚ˆ…ô7&i2µ c,ÑQ.§³è
+Šá  Ê> yq¼ó)³tNš2Kc èá €6¤ƒ` |·‚Që*.¡à½9z®!·…ÈÞ>æè©ÆgY†BƒéOO#v.C vËP⤟ç=B(Lnžë‹m`y/e$äÄ^ÞC!§å‹Æ\ÿ; :| /ºBz‹ù A€{y¯BNGÂËó"»„¼ØË{íæ«9P;hòòÁÐã^ž·ë€:^†ÂQëzà壓Ѓt«-ôàÙ¼|ôð,nTã´‘pó4jÜíæë{7¿8ÇÍ×#wn~øòô÷¡ÖåÑÊJ@F>-fsÌO7×ï‡ZWª ¤6õ  ùî?ÈAÅã™Rtyº¤»x¹ÖvrÍWM‡_Cá Ò[ÏHƒ‚„™È¯=ËÉLoST|¢T"É48á}xÁŒ—‡œ‹•·hZhGÂéÌT*pe[IîÇkŸAîò>Ú‰ “û 6G¾¼ÒÊWì `ÆöŠýmÌ1÷c¤ØV :4ÚC†9ì}XÃÛ8§œHk ¶¼ú«tÆvÈù0×qçÃc86†·–E—ËîÞ÷×Úì4›Ò×õlP‘“±y°S$ã”t+qw+ÎŽ¤Ø¼~Îí¢zÞÜx
+8ÛÆïúÚÕÈw}í-䩶öˆýk*L{Ï·×U;·8n@;¿’dº—Î[ô)j À¢k¬·ìs$ß¼J¢DîmãxôSØÞ âk;,i–_4¡§_U`UZ'©µœæ˜Óá/¦èÔhTù´#‹¸Ê¤£Õ˜üf7狧 €éE†õ˜4«]Ž9’|ÛG¿W{C`-Åê³̽íÄëo`cÐ7ŠFÈe·•z»nÓÒ>Ù£
+**<ŒJ¼ÞBNw¸Äƒ‰13Æ%^èæÞ 9cC_OéÉïU­§“ŽÔætyÛ¤æy6LyÄ»"o¶¡÷U^=t_åeÐeŸ'­Œ]4¥‘xmi^™WÛGÓ öÉbàWÇÖ¬4eG6¶/!
+$j¾ÓÅ@º+"}m½ÑûZ)µ÷ýéû¾vìºíÖ¾ÜtÚq~}Õýæúý—ËÍÕíiúUqÏEÑ<ò¨Ý.?µ#lºo¾{µ9÷E
+«¬žÍ¤s_ºÉß½b`Ägò几A–Ì4*Èa_¿ûþë£·í£«‰;àÍx|<¿•Y÷­‡B?íšçç½ 1´ÿ^Øï–$\lúß±ž\Ÿž5¿6Ã3døªðÈâU-§%fˆ—åÌœ¡zØ~†2XŽjéÁÇ/œä»S
+3õ°´WÄ{PVÓÃW'ÿ  òð,)åRc¯iéÓá—î£rƒè…Qà r·¡W¯nø@w?¨?ga1{°Àoî½;$ûqH+ùÍ=*µ­ª¥‡'RËÑ
+endstream
+endobj
+12015 0 obj <<
+/Type /Page
+/Contents 12016 0 R
+/Resources 12014 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+/Annots [ 11902 0 R 11903 0 R 11904 0 R 11905 0 R 11906 0 R 11907 0 R 12018 0 R 11908 0 R 11909 0 R 11910 0 R 11961 0 R 11962 0 R 11963 0 R 11964 0 R 11965 0 R 11966 0 R 11967 0 R 11968 0 R 11969 0 R 11970 0 R 11971 0 R 11972 0 R 11973 0 R 11974 0 R 11975 0 R 11976 0 R 11977 0 R 11978 0 R 11979 0 R 11980 0 R 11981 0 R 11982 0 R 11983 0 R 11984 0 R 11985 0 R 11986 0 R 11987 0 R 11988 0 R 11989 0 R 11990 0 R 11991 0 R 11992 0 R 11993 0 R 12019 0 R 11994 0 R 11995 0 R 11996 0 R 12020 0 R 11997 0 R 11998 0 R 11999 0 R 12000 0 R 12001 0 R 12002 0 R 12003 0 R 12004 0 R 12005 0 R 12006 0 R 12007 0 R 12021 0 R 12008 0 R 12009 0 R 12010 0 R 12022 0 R 12011 0 R 12012 0 R 12013 0 R 12023 0 R ]
+>> endobj
+11902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 758.07 212.926 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ac885fbf2e7f51874329635e35f29da40) >>
+>> endobj
+11903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.412 758.07 281.419 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.828 758.07 493.299 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.634 744.126 232.744 754.721]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a6b39cd17288ecfffa3ff0e67bc705d6e) >>
+>> endobj
+11906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.375 744.126 303.382 754.721]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.441 744.126 525.406 754.721]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 732.296 99.262 742.708]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 718.226 213.428 728.822]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a33d2b782ddf82056f797bd7abe579b9f) >>
+>> endobj
+11909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.914 718.226 281.921 728.822]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.33 718.226 493.801 728.822]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.818 704.282 226.728 714.878]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_af5d517293abea69dd776b3d4d978aebc) >>
+>> endobj
+11962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.542 704.282 298.549 714.878]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.935 704.282 525.406 714.878]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 678.383 209.169 688.979]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_acf9451614f1a7a49aadaf5ca4205386b) >>
+>> endobj
+11965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.655 678.383 277.662 688.979]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.071 678.383 489.542 688.979]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+11967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 664.439 213.545 675.035]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a0ba10731a8f3b08b4daa3b3ce9eb04e8) >>
+>> endobj
+11968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.031 664.439 282.038 675.035]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 650.495 207.296 661.09]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a1a2e8e21269cd56b5416daeafd1864d2) >>
+>> endobj
+11970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.781 650.495 275.789 661.09]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 636.551 221.256 647.146]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a1e1563d04c8034fe03e103f00b15d8c0) >>
+>> endobj
+11972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.742 636.551 289.749 647.146]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.797 622.606 227.066 633.202]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ac0b930432bb81181f1a71528d8b029c0) >>
+>> endobj
+11974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.552 622.606 295.559 633.202]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 608.662 214.495 619.258]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_aeeef81c81bad500a729ea5b15583a35d) >>
+>> endobj
+11976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.981 608.662 282.988 619.258]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 594.718 208.246 605.314]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ad0f30ff60d38cb79deef3369d25b9dbd) >>
+>> endobj
+11978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.732 594.718 276.739 605.314]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 580.774 226.358 591.37]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a604337c27b72f4540b47da11bd8f844b) >>
+>> endobj
+11980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.843 580.774 294.851 591.37]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 566.83 248.387 577.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ac45d090cdbe79f6befc4cb13a328a16a) >>
+>> endobj
+11982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.873 566.83 316.88 577.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 552.886 247.67 563.482]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a684a3a9801845170248bcaf4dc099cc5) >>
+>> endobj
+11984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.156 552.886 316.163 563.482]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 538.942 201.575 549.537]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a0dc024004959b0689c8c0797545ba539) >>
+>> endobj
+11986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.061 538.942 270.068 549.537]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 524.998 195.325 535.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a173a599cb71e90363876cf3432c07802) >>
+>> endobj
+11988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.811 524.998 263.818 535.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 511.054 208.12 521.649]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_ab8645400827727abd213d884fa9394f8) >>
+>> endobj
+11990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.606 511.054 276.613 521.649]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.961 497.109 242.978 507.705]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a4e383c4e60024718afe9747911bc9472) >>
+>> endobj
+11992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.936 497.109 313.943 507.705]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 497.109 525.406 507.705]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 485.154 125.416 495.692]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+11994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.313 471.21 246.544 481.806]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_aa8901b57298a07f38646153f2d69758b) >>
+>> endobj
+11995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.854 471.21 316.861 481.806]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 471.21 525.406 481.806]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 459.255 125.416 469.792]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+11997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 445.311 196.15 455.907]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_acf742760739750083acbc412d9b9a0e0) >>
+>> endobj
+11998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.636 445.311 264.643 455.907]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+11999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.052 445.311 490.645 455.907]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 431.367 196.652 441.962]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a6b42c1a55fb6289f7089db558ecbfb86) >>
+>> endobj
+12001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.138 431.367 265.145 441.962]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.554 431.367 491.147 441.962]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 417.423 237.485 428.018]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_afce69bc148af0df269b3355899c8f5fb) >>
+>> endobj
+12004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.97 417.423 305.978 428.018]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.366 403.479 242.095 414.074]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a3b61d05102d1847f07c10669bed29f9d) >>
+>> endobj
+12006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.21 403.479 311.217 414.074]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 403.479 525.406 414.074]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 391.523 150.064 402.061]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.57 377.579 251.269 388.175]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a31213582a2896ef342d3bc88c379f345) >>
+>> endobj
+12009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.587 377.579 319.594 388.175]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.35 377.579 525.406 388.175]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 365.624 152.754 376.161]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.309 351.68 242.54 362.276]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_af5f7a7a4078fa0202aa011c6b3e1e7b2) >>
+>> endobj
+12012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.597 351.68 311.604 362.276]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 351.68 525.406 362.276]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 339.725 150.064 350.262]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12017 0 obj <<
+/D [12015 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3902 0 obj <<
+/D [12015 0 R /XYZ 70.866 323.144 null]
+>> endobj
+11924 0 obj <<
+/D [12015 0 R /XYZ 70.866 302.995 null]
+>> endobj
+3906 0 obj <<
+/D [12015 0 R /XYZ 70.866 283.076 null]
+>> endobj
+11922 0 obj <<
+/D [12015 0 R /XYZ 70.866 270.642 null]
+>> endobj
+3910 0 obj <<
+/D [12015 0 R /XYZ 70.866 233.095 null]
+>> endobj
+11925 0 obj <<
+/D [12015 0 R /XYZ 70.866 220.661 null]
+>> endobj
+3914 0 obj <<
+/D [12015 0 R /XYZ 70.866 181.392 null]
+>> endobj
+11926 0 obj <<
+/D [12015 0 R /XYZ 70.866 170.68 null]
+>> endobj
+3918 0 obj <<
+/D [12015 0 R /XYZ 70.866 130.808 null]
+>> endobj
+11921 0 obj <<
+/D [12015 0 R /XYZ 70.866 120.699 null]
+>> endobj
+3922 0 obj <<
+/D [12015 0 R /XYZ 70.866 81.372 null]
+>> endobj
+12014 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12051 0 obj <<
+/Length 1969
+/Filter /FlateDecode
+>>
+stream
+xÚÍZMsÚH½ûWèUav¦çûèØ8ñVb²˜lÕV6Ë µ¼6ÉVö×ïI€šÃ^ ¶¥~==ýº_Ä“¯ OÞœ½ýrådâ˜7F&£‡ÄræŒI¬'fD2ºO>u,Žu{†¨3¸ºz7èïœ_v-ï°·ÝY×¹º~×Ï¿ ûWýaÿæ¿
+m­ê\¼=ÿ0êóÿÚÂÌúúËÁÅÇ÷ý›QW£ÙÏÑõà¦ûyôëYtö÷™€Ÿ<+¿œcŽT2~<ûô™'÷ø߯ gÒ»äŸìÊÇDiÉ´’ø>MnÏ~;ãåµj™άö¦¼X#¯¬–à>çð¥kxççSzŸ>þÎÇßÓÙân1™Ï‚—™ÉuøxÒð:7¶(ߛκ‚w¾?æ¿Î‡oú£í…
+kÚ&V f…Þ·Rl‘_-s¹¼µ/Â
+fTnI “{4úãC¿$U$HÚ,WÚ‹ž0†Y'’ájéJ»!‹ÝèLŸóðçË(¶è¤ýYmÉV¼e– œ)Ûl,(‘R0”¡þä\Îïîkv_Ãep¥fœª¸ÏéË÷é"]’â—+„b}WÏx†;$ͨ¸kõðy·˜?W,¬-Á¹ÒÞSäaÈ1^ìeV<P8j-œIŒ±L·ê
+ª@î:›[ËÜ~¼¸èßÞÖzô”aÚPH?ä¨lê©Fåà>†§°´,=—×·ç¯ßõ/£z
+Ã"xŠOîmŽûñæü÷óëwÁݨÞ
+ÐΩÞÂ’†¥÷c]¡ÕŠIE10µe\ÒæU $G÷Š
+m<X’º-7ƒ›EõŹjôÒ!ÅðÒaUæ·ƒÛQ/eC/¡5ù^ÂÒR½¿¾ØÏ4bÚÓñL“êH¦U„pA5 ATÒÁªÐÁWßgã5ú‘’w2[lGõÇá&‰:ȽoARg³ÙKb|ô‡Å.üR&¬
+U|'æ­rK«ùmþ²`㧧®Ôý ʺJCÛK …fO*5`H“nNŽÖÀ+r”‘Ó£=nA2ìÓ·pzôóe2¾›Ö @ͦ¡ØÖbÛD|;‰@›ÐÄ‘QÚT¡Ûò3ˆ?…lÇOô_èòü$ô5w
+=Éæ'f\°¿==ƒ¡Ecz¶Æ]²³\J—š¹U3å"
+^¼³ËWÓ–ç^iÝi©A
+!õÛcZÍù
+æx2ý«Òaî ÚC:̱FU ³Íš×xAèAò·G Rƹjp%ÕMÛ³: ÐŒ;]\q5Ô¦P$^”ŸÕ±w†‡''&Y•Þµ_J8î2Ô$1 £©S²$œj©$¦˜ŽD.Hl½å¾YbJ’L©Á•èÁT£j
+endstream
+endobj
+12050 0 obj <<
+/Type /Page
+/Contents 12051 0 R
+/Resources 12049 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+>> endobj
+12052 0 obj <<
+/D [12050 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3926 0 obj <<
+/D [12050 0 R /XYZ 70.866 771.024 null]
+>> endobj
+11927 0 obj <<
+/D [12050 0 R /XYZ 70.866 751.493 null]
+>> endobj
+3930 0 obj <<
+/D [12050 0 R /XYZ 70.866 732.325 null]
+>> endobj
+3934 0 obj <<
+/D [12050 0 R /XYZ 70.866 732.325 null]
+>> endobj
+8911 0 obj <<
+/D [12050 0 R /XYZ 70.866 710.41 null]
+>> endobj
+3938 0 obj <<
+/D [12050 0 R /XYZ 70.866 692.964 null]
+>> endobj
+11930 0 obj <<
+/D [12050 0 R /XYZ 88.314 667.123 null]
+>> endobj
+9853 0 obj <<
+/D [12050 0 R /XYZ 88.314 650.61 null]
+>> endobj
+11931 0 obj <<
+/D [12050 0 R /XYZ 88.314 634.097 null]
+>> endobj
+11932 0 obj <<
+/D [12050 0 R /XYZ 88.314 617.584 null]
+>> endobj
+11933 0 obj <<
+/D [12050 0 R /XYZ 88.314 601.071 null]
+>> endobj
+11934 0 obj <<
+/D [12050 0 R /XYZ 88.314 584.559 null]
+>> endobj
+10836 0 obj <<
+/D [12050 0 R /XYZ 70.866 561.348 null]
+>> endobj
+3942 0 obj <<
+/D [12050 0 R /XYZ 70.866 525.197 null]
+>> endobj
+11928 0 obj <<
+/D [12050 0 R /XYZ 88.314 499.355 null]
+>> endobj
+11929 0 obj <<
+/D [12050 0 R /XYZ 88.314 482.843 null]
+>> endobj
+11923 0 obj <<
+/D [12050 0 R /XYZ 88.314 466.33 null]
+>> endobj
+3946 0 obj <<
+/D [12050 0 R /XYZ 70.866 426.531 null]
+>> endobj
+11936 0 obj <<
+/D [12050 0 R /XYZ 70.866 404.942 null]
+>> endobj
+3950 0 obj <<
+/D [12050 0 R /XYZ 70.866 383.651 null]
+>> endobj
+11937 0 obj <<
+/D [12050 0 R /XYZ 70.866 371.485 null]
+>> endobj
+3954 0 obj <<
+/D [12050 0 R /XYZ 70.866 335.276 null]
+>> endobj
+11935 0 obj <<
+/D [12050 0 R /XYZ 70.866 323.111 null]
+>> endobj
+3958 0 obj <<
+/D [12050 0 R /XYZ 70.866 286.96 null]
+>> endobj
+11943 0 obj <<
+/D [12050 0 R /XYZ 70.866 274.736 null]
+>> endobj
+3962 0 obj <<
+/D [12050 0 R /XYZ 70.866 238.585 null]
+>> endobj
+11941 0 obj <<
+/D [12050 0 R /XYZ 70.866 226.362 null]
+>> endobj
+3966 0 obj <<
+/D [12050 0 R /XYZ 70.866 190.152 null]
+>> endobj
+11940 0 obj <<
+/D [12050 0 R /XYZ 70.866 177.938 null]
+>> endobj
+3970 0 obj <<
+/D [12050 0 R /XYZ 70.866 141.778 null]
+>> endobj
+11939 0 obj <<
+/D [12050 0 R /XYZ 70.866 129.563 null]
+>> endobj
+3974 0 obj <<
+/D [12050 0 R /XYZ 70.866 93.462 null]
+>> endobj
+11938 0 obj <<
+/D [12050 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12049 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12055 0 obj <<
+/Length 3108
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ks9¾ûWè(U8¾ŽÙÄ™GÍ&³YïakfŽ­d\ñ#k{w&ûëè–d±ÕjµD$µ¹Ä.§›
+O±á€CBJûé'\
+
+°À‰|‰ûpõþöüz•_ž˜ÌRÿ¥–giÍ)®n/’Dÿü¦Ç¬ÎšÜêÑ⊖ssî×pd.CO\FdîÇLb÷‰ŸŽyEKd`<‘!é8&Ãë9{š„d :…@ìx¹´#¡ÝÅ'ºÞ° æ‚…‡¯§dîb˜~¸ùØçyl©è'WÚ* ÄdµÉ®ÎÅýâüqÑÇfø!æ
+°ä8üÅöüÝrªûˆTdû2ÉU€æ$ÃQ°„¾9øÐO bPž\C JÐÇó{Y¥ï[þÿØÎw»Ò£ÇéÙ³7ßžõeìÈ™OE*vV ;›BýóçÓžuÎi#®cAWðžäÁ~GŠXà:ÇÕt ÷éã¢Áî‹oÌë!o„¾pÉNï0ŽV‡¬ã–Ô!¸¤K¥:·3Æý÷ÍÛÅý,ôë43
+ÐÑd@IJü¯˜ 8¬"žS$—»õ\@òFzÈ%( "¶æÓÀÅ ‡/^žÆSÕ.×&äš-w0œ¹vä
+F]³_
+,FFŠˆ#XŒæ’ƘÇÓ±ÕN#GX8*@®â1lïØŽ´ÚHæ1–ã.‡‹H¾À¦1< 37d¦1’7‘oÎÿì?EIÌñ £š»r7‡š½*Üœ›½ªMÜ-
+Sž˜î¦0ÐìcÔ %„¡jƒaß7žÁðóǺHI`0*§k˜¾c-îÍõB'Gë’]ÓJ  L–Ž…6ì¥çü™cs{2ƒ hR:"3D„ºÌÀ)ÉRÔÈ ÌÙìVÀ\e†MÌŠÌqwfMâiIä++\`P)°#R“ `N )äx_nˆYšsI^Ý„ÞŽ˜lüeÄL´;bJÏdŠ
+R¡ã¢/ÆRªÝEŸuãkQÚaÁ'd œØtÖwL·'j:Ø_ôù¶›·,%)¨ã¼3.Q©Î¨¢ÏÒº ¹w…RÓϨáÔô3Æñ …È7-)
+ÐÄI†º¿F#fATY€áÕ¹ŸåÀ ð½•ê»ûk´`ÝžmNÒ3˜rYÓWk˧ßpN©*#ËÞBRÈÈ2’´ŒîÏÈ
+˜ËŒ\`~ÆZÍy!ãA¡Vs,C‚8¶XS
+ yB\)ÕP-3~û³Üû Ç Yg¹ø:¦ûÒåL
+Í»}é¨),›4´‘ˆ\Ç 4¢¦W~ ÁG_51³BQã|@FÂ8æ|@s5 Ì£¢æÀ]¹ÐGìŽrC·f£6sÝæšqÖ­äCš‹QŸ@€©},€´ãjš¢¬óÍÖÉ&îÃãyËoÌ QZ“†QzS)AßÝOÙQ±t
+<”s|dn`ÍÌWë…’B …P:©A®æ|œˆe4e_å<}ñÔÐÜFA e¤-±ÐF#3pÆ‘»“óiÊu»(·Ý³Æù€Œ$¯È õ˜«Ì°‰ùùôêVu=Ÿ–‘ ‡±|Zxɧ àQ‘:8cCÐ!x}(E86r:žC ×ႸIç`³\È£ãdìlFx–‘:†ûâ›ìŠÔ‘CÐ?О¼ ú#‚g¬»HYî":…à Mž
+˜ËàY`Ötç¡îáÐPÝ>ÜŽäVB½q“] ; H›KÄ}§ªžW•²÷].¡w5§¦¡N4AÓPW€7CB`d'I±cèžÆá¼nNƒ·—¥ûYA*æ‹!@)Õ@ãp<¨oX¶Ž’q«o˜½´c¹}}ÃG4Ùr}™©\Œ
+êHß0†Xª3®o8Žé…N£‡¹bß:,°>„úÖᦥ6Äñ­ÃõÈ«Öáz¸uXtÙ:\€ŽnVÀ_¶—ø_oëpt¶ŽÃ80)“‡‘Oþå1*
+˜+³‰YÓ æx•Ï`º³GŒÕ³"V÷ˆµ#Qv{hLERÉÑ‚ ’s‘A hOìùPB¶‡ùÁö0)Bê¥BùH„Rªö0ƒÚÃàH;§)òÑ©Žáö5‡aÑ–j´qìQ‰b©Î¸æ0ï÷4‡A“ý뽂€8¯ÐøeBD̓
+ÐÊQ@ïjcZJ¡HšÃä³3ƒk³§9Œë !=ÕøÒF˜;ø;šÃÒ˜æ0išû?hóuušOf)|ö´ý’ðþ\\¸LÅ›ˆ[™xýÍã¾O(ûh†?Øý€rëO~óƒròŠØ_VB07èBÿpææ
+endstream
+endobj
+12054 0 obj <<
+/Type /Page
+/Contents 12055 0 R
+/Resources 12053 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 11783 0 R
+>> endobj
+12056 0 obj <<
+/D [12054 0 R /XYZ 70.866 789.024 null]
+>> endobj
+3978 0 obj <<
+/D [12054 0 R /XYZ 70.866 751.809 null]
+>> endobj
+11942 0 obj <<
+/D [12054 0 R /XYZ 70.866 727.164 null]
+>> endobj
+3982 0 obj <<
+/D [12054 0 R /XYZ 70.866 690.57 null]
+>> endobj
+12041 0 obj <<
+/D [12054 0 R /XYZ 70.866 678.339 null]
+>> endobj
+3986 0 obj <<
+/D [12054 0 R /XYZ 70.866 629.741 null]
+>> endobj
+12042 0 obj <<
+/D [12054 0 R /XYZ 70.866 617.51 null]
+>> endobj
+3990 0 obj <<
+/D [12054 0 R /XYZ 70.866 568.912 null]
+>> endobj
+12048 0 obj <<
+/D [12054 0 R /XYZ 70.866 556.681 null]
+>> endobj
+3994 0 obj <<
+/D [12054 0 R /XYZ 70.866 508.083 null]
+>> endobj
+12045 0 obj <<
+/D [12054 0 R /XYZ 70.866 495.852 null]
+>> endobj
+3998 0 obj <<
+/D [12054 0 R /XYZ 70.866 459.209 null]
+>> endobj
+12044 0 obj <<
+/D [12054 0 R /XYZ 70.866 446.979 null]
+>> endobj
+4002 0 obj <<
+/D [12054 0 R /XYZ 70.866 398.439 null]
+>> endobj
+12034 0 obj <<
+/D [12054 0 R /XYZ 70.866 386.15 null]
+>> endobj
+4006 0 obj <<
+/D [12054 0 R /XYZ 70.866 349.507 null]
+>> endobj
+12039 0 obj <<
+/D [12054 0 R /XYZ 70.866 337.276 null]
+>> endobj
+4010 0 obj <<
+/D [12054 0 R /XYZ 70.866 300.633 null]
+>> endobj
+12032 0 obj <<
+/D [12054 0 R /XYZ 70.866 288.402 null]
+>> endobj
+4014 0 obj <<
+/D [12054 0 R /XYZ 70.866 251.759 null]
+>> endobj
+12030 0 obj <<
+/D [12054 0 R /XYZ 70.866 239.528 null]
+>> endobj
+4018 0 obj <<
+/D [12054 0 R /XYZ 70.866 202.885 null]
+>> endobj
+12046 0 obj <<
+/D [12054 0 R /XYZ 70.866 190.655 null]
+>> endobj
+4022 0 obj <<
+/D [12054 0 R /XYZ 70.866 142.056 null]
+>> endobj
+12043 0 obj <<
+/D [12054 0 R /XYZ 70.866 129.826 null]
+>> endobj
+4026 0 obj <<
+/D [12054 0 R /XYZ 70.866 81.286 null]
+>> endobj
+12033 0 obj <<
+/D [12054 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12053 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12059 0 obj <<
+/Length 2879
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\ËvÉ Ýë+¸$ωjªPï¥cKó8{â0‹œ™YÐmëX¯HÔ$Î×çV?ä®V“lvAš…eÊnÖÐÀP…n9û4“³ïþº<úî4èYÑ9=[~œy)‚s3I85[žÏ~{¡‚X;¢ù»ÓÓŸß-HÎ_½Yx9?,ŽÉ‡ùé?ŸÔŸÞŸœž¼?yû¿*ë½™¿þáÕ/Ë“÷õÿúf™o׿y÷úŸ;y»\¨´hõsùã»·‹ß—?,þ}¤ §œ©G¹BÌììêè×ßåìÿ÷ÓL
+Ãì?Õ•W3cµ°FãóåìG?’]]í®N Ù*ûÇBËùÍÅy-Þ—«Û§¢(%…‰¾ú¹]¢À†ñQŽ§øJi˜Öçܯ7ä„ Š’¢Ð^åJÎ/oÎÒý²¹¸Zàt6 xM.Àfu·Pvþ N#çп²ýoÒÊűµn¾|õþû“åS¡È8e,ŠL6Æ\¨å¿~9I˜ßb¡ÎµVDEXlPò'2j)«ë§È˜áj©…“Ô3Ü×Ûuý—ZÒ\+'¤|”ôâz3  <И8^„±–Aø“2=7¸N~øpõa}·pÃ*é(¼>H£Æ›û¦ÁEêñ"xšª/2¶sѱöNïfÇ*V–¬.~³þ Ÿ¯/67×µ£®‡½¼¸^ן¬ôõ‡›­/Kº\·ÿ†ßôÍê|À¡%œË…™7$ȆÃì›ÉN2g땤µè7ClF‰Z´ãÀLÜB.Çü|s¿g·· mçbàN MÀ¥`cò‚´>œ„•’‡…•AjñcX¸³¥á.æùúãêárs?
+C_ịÕå
+QÍ M@6U6צ“4èÜÿ×·–ÙV
+Gz]“+£k´}>Dº®È1l]Ù²uò0²¦ÃÉšHXë9È+ilY—c¶dÝÅIÖåà-YwÁ'ڄĬ¤"m…U:—Š©ÖFšÉ/§™x¶r=Ó½t­m JÍÀ Ž†OIÛó„gØ긺9Üê"à[û8œNnJÉìlK ûZÆJÚº1$\ŽÙ’pó¹Kfëу1°pZI‘Á ˜ g˜ãX˜¼aá |óù.ítß<|ú|û0Äd2Å‚e€'ܹˆÒ9‡Ÿ˜P}9”Î R©µ‹¹T»’€Ïš¨øJçIBæ¬ip¹×=Ó½p0 )"Ë Ž‘†´¹:ûkg»‹ÚTça‡ó¶¥"ÞFN„Io§•©¼Í€Ùðv†ùÜÕ³Õ ¡8xâ‡Çðv9fËÛ]Ì‘¼]Þòv|ópw½j¨ûú| o'Ê(†¯xsøÞF©xÛ÷ŒÂ´å‘x-ý$!Ÿòv žéþ ÞÖ†AŠ·Á¯™:\¼­§ìyèXÆÛJÁ$Žƒ·$!ø1¼]ŽÙòvó¹ëmƒÈ X±œ·ÓJuà~ÞfÀlx;ÇܬêéŽû‹ÿÕQ3tÈ+`ÁSŹCC%.i9ƒ6Úqò5z:3³õn×PI*„ô4{;Ô`H¥{†{é½–D†Îr¨J}¦Î{-;BÄh
+ê+÷ ƒ4aMèÙ}À”VEëß’öê˜Æ¯ÔáyÇ„P”wŒK¦#†¼“Vr–FäÌ&ïd˜ÏÝ/$ßp*rä¬dÆœŒ2@¶i§ yHÖ)— Í: &Z¡$Ç 4þó;Á5Û…šxçzƒ…J„Üj/>×âªèbÐÞ¤MµŒ8teàaŸvó&ŒWVÿUžƒ‡±þŒáárÌ–‡»˜“êÿtwµÚFÁiÈÖx„—˜6’hÖu½’
+ÍPÍÃõ0 £Mõ¸†Uëj’*C]}lÜjhËÆá ’Ea±Œ=è«Õý—¡Ù”ˆ*-p€FdBz[ï 8¤BpÂ!ËIp†ËŸd›ägu¶qðÑí;DAXЃTXdÌ¥Ú–nœ Æs´!üÄ{ÖÛ!²ÂºÞ=Û—rBÜ?äø©£”pÎ1¨cà ÚÚ\ý9ÇÈ*Õ SëÖC«¡®÷ÕAÍ1ôŠ¶‘bâ{AÃE|D†,)mz–ê…ÚLƒÄhRÐ+TJÊ„ y ј”xˆÓÂO$e˜{LyW3Àc…4~œÁ ÛÚjºnÿ¬íc³ÛÚ­q¾[‹n+b”IRMh&½WEEŒv蔈£ˆI+)b0›"&Ãdh&o¶5“щ‚@E[ØK&“kÂz®Ð¾ßÔl”~ »Avò ðá¨mŽß>«6TÏ$3±
+N¥æŸ‘Ljþ»€#¤>š!*°Ú1DHZIk?6B€›ɀϓ£~½^]]œ ÈiÊs`;désìÉþ¡sÕÄ ¬:r©¸üKµŒ›&doç(3®gº~\Ú¦¤m´Â¹žr<. ¥í”ÑDEQa‘Ί­æx»EZIë1o·`Àl
+‹ ó ¥]uRÄ@›XIµ7xm–·´Ù¾ZýwhC Ÿè²Óa¤Ï17ŸïÖ«ó-ÃZ³9ÈjN'Ç:1œÇ Uª~+.íJÅ53ŒVÉÄiBöÆáÇžéþ„™aä u<?P®O-B<¼²¶¨²U
+!ÂPצu”Tû ÛbÀº¬Íðž³®|çø9MR¸0–žËavî¦ݥõùPÓ‡Å`žrP’v&Ê’h%¢X&Jãr>f2q•²$$HeŠˆ½WXøåf{i†4¨?Qð+£áLšràxNÅ*t¯cMÙ£Ë>½r”ãÍûƒG¼[³±}µfñ G>¾éxèÅÉÖ‹@‡¼6¹Ž;ÛÙK%x’ÂRÆV£s•JSúÿ{:ü–
+endstream
+endobj
+12058 0 obj <<
+/Type /Page
+/Contents 12059 0 R
+/Resources 12057 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+>> endobj
+12060 0 obj <<
+/D [12058 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4030 0 obj <<
+/D [12058 0 R /XYZ 70.866 752.075 null]
+>> endobj
+12040 0 obj <<
+/D [12058 0 R /XYZ 70.866 740.19 null]
+>> endobj
+4034 0 obj <<
+/D [12058 0 R /XYZ 70.866 705.841 null]
+>> endobj
+12035 0 obj <<
+/D [12058 0 R /XYZ 70.866 693.955 null]
+>> endobj
+4038 0 obj <<
+/D [12058 0 R /XYZ 70.866 659.606 null]
+>> endobj
+12038 0 obj <<
+/D [12058 0 R /XYZ 70.866 647.721 null]
+>> endobj
+4042 0 obj <<
+/D [12058 0 R /XYZ 70.866 613.372 null]
+>> endobj
+12037 0 obj <<
+/D [12058 0 R /XYZ 70.866 601.486 null]
+>> endobj
+4046 0 obj <<
+/D [12058 0 R /XYZ 70.866 567.137 null]
+>> endobj
+12036 0 obj <<
+/D [12058 0 R /XYZ 70.866 555.252 null]
+>> endobj
+4050 0 obj <<
+/D [12058 0 R /XYZ 70.866 520.903 null]
+>> endobj
+12031 0 obj <<
+/D [12058 0 R /XYZ 70.866 509.017 null]
+>> endobj
+4054 0 obj <<
+/D [12058 0 R /XYZ 70.866 474.668 null]
+>> endobj
+12029 0 obj <<
+/D [12058 0 R /XYZ 70.866 462.783 null]
+>> endobj
+4058 0 obj <<
+/D [12058 0 R /XYZ 70.866 428.434 null]
+>> endobj
+12047 0 obj <<
+/D [12058 0 R /XYZ 70.866 416.548 null]
+>> endobj
+4062 0 obj <<
+/D [12058 0 R /XYZ 70.866 370.244 null]
+>> endobj
+11957 0 obj <<
+/D [12058 0 R /XYZ 70.866 358.359 null]
+>> endobj
+4066 0 obj <<
+/D [12058 0 R /XYZ 70.866 324.01 null]
+>> endobj
+12025 0 obj <<
+/D [12058 0 R /XYZ 70.866 312.124 null]
+>> endobj
+4070 0 obj <<
+/D [12058 0 R /XYZ 70.866 265.878 null]
+>> endobj
+11945 0 obj <<
+/D [12058 0 R /XYZ 70.866 253.935 null]
+>> endobj
+4074 0 obj <<
+/D [12058 0 R /XYZ 70.866 219.586 null]
+>> endobj
+11951 0 obj <<
+/D [12058 0 R /XYZ 70.866 207.7 null]
+>> endobj
+4078 0 obj <<
+/D [12058 0 R /XYZ 70.866 173.351 null]
+>> endobj
+11948 0 obj <<
+/D [12058 0 R /XYZ 70.866 161.466 null]
+>> endobj
+4082 0 obj <<
+/D [12058 0 R /XYZ 70.866 127.117 null]
+>> endobj
+11953 0 obj <<
+/D [12058 0 R /XYZ 70.866 115.231 null]
+>> endobj
+4086 0 obj <<
+/D [12058 0 R /XYZ 70.866 80.882 null]
+>> endobj
+11946 0 obj <<
+/D [12058 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12057 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12064 0 obj <<
+/Length 2937
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\Ks·¾óWì‘[Â@7€ŽŠDúQŽä(›CÊö!WË"©ˆ’Sþ÷éžÙ¥³³óX4¥\\45œ¯t÷×/Œ]ü¶°‹oOþº:ùæ"á"™#.VodMŠqALt‹ÕõâçÓçß=ûiuþzy”NÉ,Ï"ÀéÅ÷?ž·¿yñêù?ÿvþrµt`OŸ5ÿ]}ÿêåòÌ"ÏàÒæo^]\üøj)O½X’=5ßµ/øüª×çç¯Ï_>?_þºúáä|uòŸÇrÚ…{”+%“À/®nO~þÕ.®ùß~XXƒ9-þÛ<y»ðMðÈ?¿[üãäï'vw­¡o­Ñ»]ìÍÝÇV–ûÛ÷ûR8‹†’kþâ¼}ùQ„}hg£ñäJìßxÏìéúc.X^SRÀ4€©Ä½[2ì§ÛX/Zà`}0h} {½^ºpúÇÍÕú¡Ýò_l°Ë³âéK´§÷7×˳„^~ïD¸o.|Øyéyãy-g.h_ùbý‹µpwóñæþ®}çåæ8ßÝÜ­ÛŸ oøÍÕ»õöwüxy½¿`­Él*Ä{bgîE!6°E’9V¿Í^ôj€31( ‚7èKÀ·÷ÍÕû÷K §¦ÝÜâÄØz‘5Ô/x_Lr4Ë:œ7À¨`ü&ëýdó¨ÞÚÇ.ð¸}Ôãn d÷ýq–÷W=Èì»,‘2¡H%òÇËb›;Þ1ÏÕ³×ßž¯z–Wá3(H>1o@)Õê_?·ªÊ/Úy6˜ìÄß÷Š¾/dÎ,d<NÈ-°±³u¾_7Øé±*ˆ†½ÍVT±¦ýå8¶;Ÿ'/#‹Ic91‚~Ýÿ÷úCÏr QØŠzÈM#F‘æúigý‘Žšõ!¦EÌ—Už:±ÿ•7y“¶rÀSË£&dƒKÌ Î:K_ý™C!…Û1·ˆ¬C
+Ç ¹ï:)t¶nÄurH2ê:ƒ›å9³ÆjX¥2är5;ž3ö/ YÓVÜ^õì €‚‚Vxtüs8`(=ÈìQ?T,1¿‹£n·ƒ‡w.2?LÀô™L,öœ0ñ3„óûÍÝõ!–ûªR€ªr
+RIBš|*¥:DÄÌn.Mg.k pðt”{ iÔÙº"†ÇÒgd¤RõÔX´¶:‹™DÃ9ûa–“©º^+<"užb™žãË̬
+1
+ sŸ ™×m˜+@¶óqfÇ|¶yù pÖ^m^ò"&X—âƺv!¯EÇÿ¼»¼½¹êk¾°ô¨Ù"ÐG·­ÙFCR
+¼g+@©ä”¥¨ ÇÉXçd(@¹q_¼iÍšj½Âj
+r©s NS–tpDb¡ä“ÂR¼wM¤8˜·Ö—×ý½w$7ÞiHMCz¾×wXVy)üÏÝŽÞ°ÊKáßç a•æ&¬*0Ÿ8¬’#¿/g8Åñ×Cnÿ.æp¯ÁEàÀ™mè
+7c'ÃlÉk@ò>eò%æ¡.ÿ«©¨TJÐ
+–%T&~
+›\¸ÀÓ7W+Ô
+ƒuJ©”Ò`AÉ¥ã„ìÔ? ÙQ‘/ž)8…å \®£}OQ}Ôèî«°iAŽÝbjrâf=c]{¤¤r ¤4éæÆ÷˜Oì{A
+ØÕ—€dË¥~ SÚ»
+ß[`Ü×dÝS•‰,QwJõÔä›’¥l"ŽP;«=ÖëGÛ”,륂(£S¹”JÇë£\j$8NÈÒMº(ággë¾´×O®)Y*,‡u*Ø~½ŸZü¬k{26d…¥ÈX2ù|ИŽë{IÞf—ùR¨šu
+ÄÚY´n È'žSJÌ®’k$êYçFȉ ›ŒŠ:£wMÙT°‰£;ò%öžç—mo=´Ã57 €«…’’›Í©êpÉ͹8«ä9'9FƽŠÚÐÙ¸¿ÿùfàA̪¸¥˜CÖ„ÐÙðI7ÎÌFçz%©Ö ©·I:Òo$}<ÂÂA=0G!Â×åA÷ ÕqŒê&\!õ#Üß´’ ù®ÁÎì×»ê:TŽHé.Œ£8ñ.Œæ&Q*0ؘöi›&ƒ¨»£±ù´¼éó$v¯Z[R
+¹£ JWC¡¹XV¯ÞÊ@Bœj&B
+BÌá0!fqìRÀ®Km˜#´o²
+endstream
+endobj
+12063 0 obj <<
+/Type /Page
+/Contents 12064 0 R
+/Resources 12062 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+>> endobj
+12065 0 obj <<
+/D [12063 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4090 0 obj <<
+/D [12063 0 R /XYZ 70.866 751.979 null]
+>> endobj
+11949 0 obj <<
+/D [12063 0 R /XYZ 70.866 739.991 null]
+>> endobj
+4094 0 obj <<
+/D [12063 0 R /XYZ 70.866 704.962 null]
+>> endobj
+11955 0 obj <<
+/D [12063 0 R /XYZ 70.866 692.974 null]
+>> endobj
+4098 0 obj <<
+/D [12063 0 R /XYZ 70.866 646.048 null]
+>> endobj
+11956 0 obj <<
+/D [12063 0 R /XYZ 70.866 634.002 null]
+>> endobj
+4102 0 obj <<
+/D [12063 0 R /XYZ 70.866 598.973 null]
+>> endobj
+12024 0 obj <<
+/D [12063 0 R /XYZ 70.866 586.986 null]
+>> endobj
+4106 0 obj <<
+/D [12063 0 R /XYZ 70.866 540.06 null]
+>> endobj
+11944 0 obj <<
+/D [12063 0 R /XYZ 70.866 528.014 null]
+>> endobj
+4110 0 obj <<
+/D [12063 0 R /XYZ 70.866 493.043 null]
+>> endobj
+11950 0 obj <<
+/D [12063 0 R /XYZ 70.866 480.997 null]
+>> endobj
+4114 0 obj <<
+/D [12063 0 R /XYZ 70.866 445.968 null]
+>> endobj
+11958 0 obj <<
+/D [12063 0 R /XYZ 70.866 433.98 null]
+>> endobj
+4118 0 obj <<
+/D [12063 0 R /XYZ 70.866 398.951 null]
+>> endobj
+12026 0 obj <<
+/D [12063 0 R /XYZ 70.866 386.963 null]
+>> endobj
+4122 0 obj <<
+/D [12063 0 R /XYZ 70.866 340.037 null]
+>> endobj
+11952 0 obj <<
+/D [12063 0 R /XYZ 70.866 327.991 null]
+>> endobj
+4126 0 obj <<
+/D [12063 0 R /XYZ 70.866 292.962 null]
+>> endobj
+11947 0 obj <<
+/D [12063 0 R /XYZ 70.866 280.974 null]
+>> endobj
+4130 0 obj <<
+/D [12063 0 R /XYZ 70.866 245.945 null]
+>> endobj
+11954 0 obj <<
+/D [12063 0 R /XYZ 70.866 233.957 null]
+>> endobj
+4134 0 obj <<
+/D [12063 0 R /XYZ 70.866 187.032 null]
+>> endobj
+11960 0 obj <<
+/D [12063 0 R /XYZ 70.866 174.985 null]
+>> endobj
+4138 0 obj <<
+/D [12063 0 R /XYZ 70.866 139.956 null]
+>> endobj
+12028 0 obj <<
+/D [12063 0 R /XYZ 70.866 127.969 null]
+>> endobj
+4142 0 obj <<
+/D [12063 0 R /XYZ 70.866 81.043 null]
+>> endobj
+11959 0 obj <<
+/D [12063 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12062 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12081 0 obj <<
+/Length 2000
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ]oÛF}÷¯ º/PMçûXðÚr·Eg½ÚŠ¤ŠDÛÄJ”W’Ófýž!‡²HŽºdоDŠ4œ{îsï=sešÜ'4ùáìo³³ï®¬H,qZ‹dv—J¬Ö‰qœh–Ì–Éû‘!Ì‘ñDs>º¹ºzs3ætt~9þeöÓÙtvöß3†­hÂ&¡®xÔâu±>{ÿ M–øálòk±r`o‡7«äŸgÿˆ``’ck.n®¯oÞ’‹wïÆnìèêÇ7ÓòÝíôjz;}{ÿ:!åèâïçïfÓÛòKp?/¿¼¹ø×õôíl̼Å¿³oÞ¶½©a-±\žòF*A”‡èqpU,¸šZyöi,èh“-Kx›õc$°ŒçŠÇ¸~]\kæDÛºù§|—îcgi l
+C"lN ¡0üNFØVÃ|¹ß£Ç› ŸÓî _"ýý¸qˆ†/‘ç–Šz_ìÐîëYëö¡cÎÂÓPÕðv´ßÕÏl_-À×(ÀOù>[§ÕIÜz‹þIT¨Ïå§%¼ðð¦|õ+°$? @Åߧ{“% ø¤—É߬!JÊåìXz‹"·‰ÿÛg)—ãÝ~™m½öN’¡åÒáû¨bb8 ¯k~Xtkž)~ 8 ES|MtÛ,¿ÿ³¢[§ëÍöó0èô)14©ïÓQW:*g‚Ê„D9 ~T¨öó«´ù¬”{aEp˜qÃ`EUv•¼ÚÎCåÎÿx5LXý^”WaEåÛŒ5™ëaÂê÷¢& ˆ÷ÙêUHé<õ2EЉ¼0¬gDU9›ö{Ý­Óâؼˆ>‘ËO1ÝŠ @úq—êJ© ³²Ø‹UÓH£ {2”¨ß/Ÿ»cÐRÒâ–Š~`„ÀÅ^œ†i@ºÝn¶±{›$Ò b׿⇮šÙÅf™îž Ù¢™øšMê¡{¡oÊB_L‚¨ºXÍw»t°¹e)—û¦áºýï±ñê2Ý-jû4_Ã_žPíL r猜QÁ…ó ºnÚôØB'›ôÃÆJ1âÌá‹Ç=h£h)‡_ŠÀä`ÖW­¯Þ;þªüô[¶Êê¢ôLñÁÓ. ñùõ! ›Ü—¯YÀi^…«Ò¬Õ%ça³Z†Uň(ß|¾¥˜úƒ£*¢Q-ÔK‹ Ÿ§m]Ï·»‡ùj•nO[ȵj˜rè+}c¶c*¥|xÍJ•73u\-/R­ƒ_r50ý5ç¾/
+endstream
+endobj
+12080 0 obj <<
+/Type /Page
+/Contents 12081 0 R
+/Resources 12079 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+/Annots [ 12066 0 R 12067 0 R 12068 0 R 12069 0 R 12070 0 R 12071 0 R ]
+>> endobj
+12066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 534.987 205.4 545.582]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8cpp_a814356b51a4f4da16d3be582a0b1179e) >>
+>> endobj
+12067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 167.141 155.067 175.76]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc) >>
+>> endobj
+12068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 134.627 160.053 143.246]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc2) >>
+>> endobj
+12069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 102.113 160.053 110.731]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_desc3) >>
+>> endobj
+12070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 86.852 161.532 95.471]
+/Subtype /Link
+/A << /S /GoTo /D (class_marshaller) >>
+>> endobj
+12071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 69.87 196.688 80.21]
+/Subtype /Link
+/A << /S /GoTo /D (struct_function_descriptor) >>
+>> endobj
+12082 0 obj <<
+/D [12080 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4146 0 obj <<
+/D [12080 0 R /XYZ 70.866 750.994 null]
+>> endobj
+12027 0 obj <<
+/D [12080 0 R /XYZ 70.866 737.961 null]
+>> endobj
+4150 0 obj <<
+/D [12080 0 R /XYZ 70.866 684.081 null]
+>> endobj
+8731 0 obj <<
+/D [12080 0 R /XYZ 70.866 670.989 null]
+>> endobj
+4154 0 obj <<
+/D [12080 0 R /XYZ 70.866 649.142 null]
+>> endobj
+12083 0 obj <<
+/D [12080 0 R /XYZ 70.866 550.98 null]
+>> endobj
+4158 0 obj <<
+/D [12080 0 R /XYZ 70.866 515.307 null]
+>> endobj
+12084 0 obj <<
+/D [12080 0 R /XYZ 70.866 493.88 null]
+>> endobj
+4162 0 obj <<
+/D [12080 0 R /XYZ 70.866 470.903 null]
+>> endobj
+8732 0 obj <<
+/D [12080 0 R /XYZ 70.866 457.869 null]
+>> endobj
+4166 0 obj <<
+/D [12080 0 R /XYZ 70.866 436.021 null]
+>> endobj
+12085 0 obj <<
+/D [12080 0 R /XYZ 70.866 181.196 null]
+>> endobj
+12079 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12143 0 obj <<
+/Length 3408
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]ÛnG}×Wˆ€5鮾ï"ŠM%dË++ÁIŠò+‘ŽDç²_¿Us‘¦‡ÍáÐ]¡óbÔ°OuÕéºu÷HŒÞÄè룯®Ž¾8ójä‹`­]ÝŒœ(¼µ# °rtu=úñøù7§o®&—ãpþØã p|öò|R}òââùw¯&¯¯ÆÄñiùïÕË‹×ã)lùõw.ÎÎÎ/ÆôÔ‹ñÏWßM®Ž~=’(ˆÉ‘
+²p%®a4»;úñg1ºÆ_};…
+~ô{ùàÝ øŸÛÑÛ£%& ‚ÆÇã \¼zuñºø¦’÷IòËÉÙäròúùdSšF ÞtŸ8Ú¨Âhõ(‘h«Ö¨‘…3Á¶uke!Ù^Mg÷¤’ÕC)Dóí/δiMJÚÂy7:‘ø‘Õ70ÑwF?žc?»žÿ$,çõ/i:÷ïêy]–ÑäKc¤ !QLƒRj(ÀÉý, íT¦H8¨„~q‘
+@zžH(œ€ÃÐþ 4Å„K'_}÷uB÷Â5• ÂÊBúæò%:ÑMPe
+‡#3€*_hï; “³—ÿîا\¥}K¼G2Js¼X®oÊ_
+ìÅüaV÷D߯W÷©p-”
+Ê9Ieˈ#jp€- é¸B;Ý|­|?uµge˜‹FÚ›,©Ñ÷án~?]/VK6 Îëqw Æ^®çwÕ!j¾W_´õÄo†)ë$ …BªÄ©×Q9Ñd¦Ñ]Ð#4ú̬ž®3í«‘Œ¬)=]O“{&Ñ䎾ø,ís%3¬}á•Ù"p Šu¬Éj‚Éôýú¾ë>B1´Óç9D¤}bKxóa9K—+3ò
+#.ÔÞÀìöÊ\žÁx
+¥uÁ×Ä•Åò]P½Îs`5ý|ŒÍ³Æ0MÅ"£AK@GÆëßDt²ÐBqˆèt!$EÜHEžnè@nÆñR 9ô‚E”Ú­
+ïän[Ю¬wž’veõlA;~tÒ„ 
+6)Òôvñn¹õ<̤TLÅïé8Èô~1ý…ÖÙíœíDÃb¹Þá}‘ÿ«Ûy:S•¨%éæ±Îl‹xS$CíÃæKœ+Ð\¯;Õ›#`Fcm=0ñÜ9Íž{KéýH ,BÖA;åÊ~/¤ƒpï•ú:•Ë€M>Àë{û½×'5;º¦,‡©™ÈRs|öŸª—Öqt´%êT¦£kn\n#å<nØ9bb€³åà|bÐH¢^±u©ôËü~Û41˜b>ËÃÿäíTI šº;ÆgÅ ,È‚¨FRÞ÷]OmÝHEæ™ý™·s®dÐé»íG=iSÔ{Žsá4’õõɬÒ맖¸/¼”¨NFÈuñ:?€ÙŽT^¢V‰ö´„Ú5¤íœé¥ó Ì­èþ‘æ0wyMQ7æ¾]ÍÒæV¸ÆP)W !F]ܤÌ^X}ád0ůúV;b}«=Öì@~¹Ä„§îò€ ƒU p0 ¨¬žîI¥f
+Š”î;Jƒ¦ FûûšÒstòaËÞ“²´÷6†J1ßua®pN}F€žƒ`8ñõÚ¨¢óz¾Le¦trL1
+þp’m€…˜2´K
+&†ÜéÕäÆ…>Ì•ƒO@3´¹uÕ¤N³|äšfðnšeã>Ò¬ ÜK³|ȆfmÈÁN zÙvÀR€®«QŒm8’sM¶\¯Ò}žÔ:,| Ú@1«VFs@c (´îÌ÷a{Ìf€lbv4Û.MmDNQ^®8¼K£+,Žã®2ý||Kâ’åƒ6$kƒ"Y>tC²h¾}$ˇlHÖ†ìÐô߆kÊ澉²áŽôôæÂ^ªåc6TkaöNzÍœ\¨5€x®}¡:± Õ-ÄÝ®Ìl¼ ÏÓ}Ñó óoYjNéñuŒ;è•ÚЫ :€_ÙÀüŠfÛG°|Ȇ`mÈÁ~Ìþ]ˆFïв,Å&zâÇwRîØ`@­7"Ôþ˜ªŒ<:@•‘·¡Ó13”Åò!A`B¶3ÛÞlc#@êò´úÁ³ÿàs_ùY“ z|æŽåcÖkcaX>pM°6p¿²zEÚêÉ|/ÉèÊhóÍrl6á@oÃÜA²|Ìšdm̾€éŠ U>,½ÝÂ
+Á¦Ãeuã:ª ×mÀÝlc@!ŒùÙ>môqIO¯úÜA­lÈšYmÈÝÌÊEmˆÕFí#V6^Í«H±]Ä-ÿÔ_1®èßdíþ=êö× Êè¯ ¦‰uè–Êt¡ÿÿ„ä‡
+endstream
+endobj
+12142 0 obj <<
+/Type /Page
+/Contents 12143 0 R
+/Resources 12141 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+/Annots [ 12072 0 R 12073 0 R 12074 0 R 12075 0 R 12076 0 R 12077 0 R 12078 0 R 12086 0 R 12087 0 R 12088 0 R 12089 0 R 12090 0 R 12091 0 R 12092 0 R 12093 0 R 12094 0 R 12095 0 R 12096 0 R 12097 0 R 12098 0 R 12099 0 R 12100 0 R 12101 0 R 12102 0 R 12103 0 R 12104 0 R 12105 0 R 12106 0 R 12107 0 R 12108 0 R 12109 0 R 12110 0 R 12111 0 R 12112 0 R 12113 0 R 12114 0 R 12115 0 R 12116 0 R 12117 0 R 12118 0 R 12119 0 R 12120 0 R 12121 0 R 12122 0 R 12123 0 R 12124 0 R 12125 0 R 12126 0 R 12127 0 R 12128 0 R 12129 0 R 12130 0 R 12131 0 R 12132 0 R 12133 0 R 12134 0 R 12135 0 R 12136 0 R 12137 0 R 12138 0 R 12139 0 R 12140 0 R ]
+>> endobj
+12072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 739.206 221.31 749.676]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a6f8507003ea66b96d61d757c72052931) >>
+>> endobj
+12073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.796 739.206 301.88 749.676]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_aa3a2ab4113e93a693365dac6ace40875) >>
+>> endobj
+12074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 726.504 271.87 736.974]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_acd44f854d642434cdd7032e44e01e146) >>
+>> endobj
+12075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.245 726.504 410.568 736.974]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+12076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 713.803 204.633 724.273]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a8a4bad30e2a2b10e97601cff76f3e80e) >>
+>> endobj
+12077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 701.101 228.295 711.571]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a414a1b655019d102bc5848c2ca62af73) >>
+>> endobj
+12078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 688.399 268.383 698.869]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a71fdceba88a023c8a1a039d6790fe4a6) >>
+>> endobj
+12086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 675.697 206.632 686.167]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+12087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 662.995 211.115 673.466]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ab13fff138b15c0c06163d2f9d3297863) >>
+>> endobj
+12088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.615 662.995 291.569 673.466]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) >>
+>> endobj
+12089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 650.294 198.159 660.764]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac659c060c63a94e028b6ff1bc1db033b) >>
+>> endobj
+12090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 637.592 206.614 648.062]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a75a96d43f6cd5058f0f6b1716b013da3) >>
+>> endobj
+12091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 624.89 224.556 635.36]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0ee618a3875255b914db8ac9eb143e32) >>
+>> endobj
+12092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 612.188 228.277 622.658]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a069d1a9ccbc847a49768441fc7921461) >>
+>> endobj
+12093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 599.486 257.417 609.957]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ae855eaa560c401e8d59196716d4aad4a) >>
+>> endobj
+12094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 551.495 223.112 562.014]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+12095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.085 551.495 275.425 562.014]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0f603704e7a937570de116e723cb3265) >>
+>> endobj
+12096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 502.981 186.799 514.936]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7) >>
+>> endobj
+12097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 491.647 121.928 502.058]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a2623145a5ebf02a78352c9691614abee) >>
+>> endobj
+12098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.127 491.647 180.97 502.058]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a0364b9624f805c4823fb84eb5570b848) >>
+>> endobj
+12099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.963 491.647 224.304 502.058]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac2ec9c3ecdf7544a29fc3e7a43b0c7e2) >>
+>> endobj
+12100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.297 491.647 266.911 502.058]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d) >>
+>> endobj
+12101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 479.566 140.228 490.032]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7af10f4b873d22b0458fd72e5843da9f08) >>
+>> endobj
+12102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.221 479.566 162.393 490.032]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a49c1dd9f4b460622c55c94dc8a10b1f1) >>
+>> endobj
+12103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.385 479.566 205.233 490.032]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a037b76b1be0920cc5a8476454030516b) >>
+>> endobj
+12104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.226 479.566 269.234 490.032]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a4ac17423b939d6de4e1fe1ac672ea862) >>
+>> endobj
+12105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 467.736 127.64 478.076]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a6d7ff42ba15e8776f68509b7d916a691) >>
+>> endobj
+12106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.632 467.736 184.172 478.076]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3e483e64aa53cc7f7722e66b2fea1f4e) >>
+>> endobj
+12107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.164 467.736 261.864 478.076]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a97bd383827aac9d96881d88ef98c40f5) >>
+>> endobj
+12108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.856 467.736 309.457 478.076]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3a94344bb3490441ad853d19d75b68ed) >>
+>> endobj
+12109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 455.732 153.068 466.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ab2c293a1a728bc5737774b293c850e7e) >>
+>> endobj
+12110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.061 455.732 220.198 466.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac7ad83088e9853764a6f80f822794b5a) >>
+>> endobj
+12111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.19 455.732 286.826 466.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ae37bdfa5076fce83434a550892c5a873) >>
+>> endobj
+12112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.818 455.732 352.727 466.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7af24de8c9c133efe42660ff7c1255a800) >>
+>> endobj
+12113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 443.205 163.522 455.16]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a8202f82508042d99bca51ba0a72e70f8) >>
+>> endobj
+12114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 430.503 210.766 442.458]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5) >>
+>> endobj
+12115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 419.12 184.226 429.509]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ad51925d74d898a29e7e187e1521f7235) >>
+>> endobj
+12116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.411 419.12 287.749 429.509]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ad860362d720bf4c2b2c967779c56e07e) >>
+>> endobj
+12117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.742 419.12 351.418 429.509]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ade0f3aa3e4a5252687d881484167555c) >>
+>> endobj
+12118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.411 419.12 420.575 429.509]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5a87f314ed4f0d2eec58fd5e4f363f3a16) >>
+>> endobj
+12119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 406.593 167.916 418.548]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5a7f10a1297ac2f6d26eaadd91e53dc3ba) >>
+>> endobj
+12120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 359.146 205.4 369.742]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a814356b51a4f4da16d3be582a0b1179e) >>
+>> endobj
+12121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 313.051 174.578 321.669]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a5d893191aa98b4f6102ba7ddee3e51ef) >>
+>> endobj
+12122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 298.628 183.822 309.039]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_aa3a2ab4113e93a693365dac6ace40875) >>
+>> endobj
+12123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 285.926 170.019 296.338]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a5b41c5ae4505891e6c53e26df197e02b) >>
+>> endobj
+12124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 274.946 169.18 283.636]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+12125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 262.244 147.061 270.862]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+12126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 247.695 202.266 258.232]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_aed9efbd96dfb7e1f9d4649748bfe9e06) >>
+>> endobj
+12127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 234.993 209.474 245.53]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_aba7627aab8b7e905d7d8a66d27c7ec02) >>
+>> endobj
+12128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 222.291 206.489 232.829]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a4c953dd273f6aebcb277671b3500694e) >>
+>> endobj
+12129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 209.59 232.356 220.127]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a3c85ac01f902000d9fbfbd813ffb443b) >>
+>> endobj
+12130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 196.888 228.509 207.425]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_af8e82dec74b799e62a906f71377c56f3) >>
+>> endobj
+12131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 184.186 250.934 194.723]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a58f55d11627a507be5a606467c0123c6) >>
+>> endobj
+12132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 171.484 247.088 182.021]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a3dcab7bf7a1b1bd0419ef0dbf8044733) >>
+>> endobj
+12133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 158.782 222.654 169.32]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_abd566459c5127c007d8778c72df37fda) >>
+>> endobj
+12134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 146.081 218.808 156.618]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ab84c6db95e87721f299818801a5f792a) >>
+>> endobj
+12135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 133.379 241.233 143.916]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_ac468d7c7c400248d61335695e1044c8f) >>
+>> endobj
+12136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 120.677 237.386 131.214]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_abec02e70021d39c89bc93b8249bf4a58) >>
+>> endobj
+12137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 107.975 226.636 118.513]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_acf073b53a1c5d667687a35b45d908148) >>
+>> endobj
+12138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 95.273 222.789 105.811]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a8a2acf8516fea68bde9c89c317c02e85) >>
+>> endobj
+12139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 82.572 245.214 93.109]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a98fc5a74988e1a15c33d88b706291fbb) >>
+>> endobj
+12140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 69.87 241.367 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_aba3fd79a79d1d6ddaf806445c58c73e3) >>
+>> endobj
+12144 0 obj <<
+/D [12142 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12145 0 obj <<
+/D [12142 0 R /XYZ 70.866 753.919 null]
+>> endobj
+12146 0 obj <<
+/D [12142 0 R /XYZ 70.866 564.1 null]
+>> endobj
+12147 0 obj <<
+/D [12142 0 R /XYZ 70.866 518.315 null]
+>> endobj
+12148 0 obj <<
+/D [12142 0 R /XYZ 70.866 373.985 null]
+>> endobj
+12149 0 obj <<
+/D [12142 0 R /XYZ 70.866 326.043 null]
+>> endobj
+12141 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12215 0 obj <<
+/Length 3021
+/Filter /FlateDecode
+>>
+stream
+xÚ½[[oÛF~÷¯ Pj:sæžEpc9MáÄY× ¶Hû È´#Ô–¼²’íýñû^l‘Ê‘ÉöŲeò|‡ç~Êì2“Ù˽Îö¾?
+: ":§³³‹ÌKœË|$áTvvž}yARìÑèäèèødŸäèàpÿ·³Ÿö&g{ÿÙS %3•)…ŒÅ­Ÿ³ë½¿Éìÿû)“BÇý·¸ò:íˆ_®²Ÿ÷þ•àA%|hððâäõë“7âÇý1ù0:zu<);MN'o^àO%¾xñãÁÛ³Éiù__±}ýáÉ‹w¯'oÎö?DñóìÕÉ›‡SË!Èl{cµ°Fß=Ü”­Õ™’ÂÛè6…ë” é*f_ÊÑa¾žÎ¯òóŠÙüv¶šß¬çË3øý‘±R’ÙXEY•tÎ>åå]7ÓÕþØÈÑú¶ü{yQ~®ë ðoeGŸëùuõÍÕüãj_Éß©åèå·³åõ5Ë›—åç§åíºümº¨¸\OW—ùZ0‡ÐœˆÆ€1R›’±ÃüW)i1/£¸c^}ò÷Wy!ûRè«ËJú§/÷²÷¸J/§ç {ó‚‡h)dp»\C”ÊGA”(Š
+m}'È«„§ ‘ÈWú§.¿š®kw®Ü7ƒ@år¹I ô9GB¹Øõ~á,SRø.6]« ˆÈpä2lèòšÓüb±(_å‹Y?²ÿTÑé¤æ¾ˆ’EHC¨\®ž=»œ"Ô­e`J¶³¸Úöy(' „ϨïâÅÍ~<ÙÇ?¯ølN~ü
+ôDz7PŒîIÊ#²éæäèÕ¿ +#iRi—e=½š/ÖEÈ 2ßÞ~{þ U²1#þó»úšBWT^Ïgù×p~
+´RpHàµÊý_§/Á±’2Cçíu¨7 0dª˜_´vc'娖nrWËYÜ.¯‚Uµ8¸>¢°]°2RS²M>‘P„‘¦ ¥¨
+çùbú‘Wf –ÿ‰*Ÿ?;tÎÃV|ÖxQèZ¬]åÐø}ZUzã‚ÛÅZÕ‚Å=fãîû]}Ï¢¥öĽ ‹1»ô1£Eô•uû+ªki"ØDÓm{ÊU ›-ÓR µu²dÑ75 ®E„N¨Û1]R§ÎzÜÀ…®kãròn/ëIt5²ihñ#ÜÇ­j#ø@§pjtÍ…NË ïçU[´Ê¹-ìð”›$xž³;…¤]p
+¢‚ü§
+k©ä£ÐqP¤w«UôàôåÏ©±Œ5Ei!»ªè‡áÜ+ Æ»lG‘°–¶ÛŽ‡ ¤Ú4‹‹«Ï·ŸØtÞ¼;>î¢mQa…6iÝ ŒnE5Œò2Y=™vÌ«½Cíäéi¥“BéDP…•è*ú $K§JJRùôN³ž©lÛigîvšüûɾunêŠ-Uø¢äF5ÆO¯­&JnMÅè.†ª¸Y§6©Ò|¾c
+ÃêÍA¤ZÙ¯!#ò™È0!Rc‡ÞÛ’è›säØ„ûÂ}´WðiÐOóÇŸ·|¶m–:kb…¥!ìÄ îP[%ÉXmP'ñþ˜1Gú&f+Z7µ1.ƒ–†QK£ª åê
+¨¥©ë|u™ò-ÃÑ݃ ò}"­2ÝKJÒW¥Ê—}²|4Ñ AÂ\oôÇåƒ>šš¸çxüà>ŽJm±â-åžæs(Bûó©‘(¤ M>aÊ3®Ü~O “/ÎÎ €ŒtÁKÁ2˲>§û±Y9?6r~°¾…=]L/óÕWëg•ÏòyaJù¸óŒ5I*4õt^½F·SRªêŒn–hƒSÛ”Tè{Ì
+©8Ëi½y˜E å ]³ô}(É|ýù&ýΆ–6SL;ê•ETqº–))·Í7ظÝzðÒ«brºm½ðþà4UT›"ç+îw¨Ïf <Ê’¥ú½Š_ÞNRYc—
+endstream
+endobj
+12214 0 obj <<
+/Type /Page
+/Contents 12215 0 R
+/Resources 12213 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+/Annots [ 12207 0 R 12208 0 R 12209 0 R 12210 0 R 12211 0 R 12212 0 R ]
+>> endobj
+12207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.097 728.742 222.088 737.433]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_source) >>
+>> endobj
+12208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 301.389 149.69 310.355]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a5d893191aa98b4f6102ba7ddee3e51ef) >>
+>> endobj
+12209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.424 301.389 230.903 310.355]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_acd44f854d642434cdd7032e44e01e146) >>
+>> endobj
+12210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 293.419 209.108 302.329]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_acd44f854d642434cdd7032e44e01e146) >>
+>> endobj
+12211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [103.344 122.316 139.648 131.282]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a037b76b1be0920cc5a8476454030516b) >>
+>> endobj
+12212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.058 114.994 284.425 122.496]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3e483e64aa53cc7f7722e66b2fea1f4e) >>
+>> endobj
+12216 0 obj <<
+/D [12214 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4170 0 obj <<
+/D [12214 0 R /XYZ 70.866 771.024 null]
+>> endobj
+4174 0 obj <<
+/D [12214 0 R /XYZ 70.866 714.13 null]
+>> endobj
+12156 0 obj <<
+/D [12214 0 R /XYZ 70.866 692.945 null]
+>> endobj
+4178 0 obj <<
+/D [12214 0 R /XYZ 70.866 672.116 null]
+>> endobj
+12155 0 obj <<
+/D [12214 0 R /XYZ 70.866 647.941 null]
+>> endobj
+4182 0 obj <<
+/D [12214 0 R /XYZ 70.866 613.299 null]
+>> endobj
+12152 0 obj <<
+/D [12214 0 R /XYZ 70.866 603.005 null]
+>> endobj
+4186 0 obj <<
+/D [12214 0 R /XYZ 70.866 566.515 null]
+>> endobj
+12150 0 obj <<
+/D [12214 0 R /XYZ 70.866 556.221 null]
+>> endobj
+4190 0 obj <<
+/D [12214 0 R /XYZ 70.866 519.732 null]
+>> endobj
+12158 0 obj <<
+/D [12214 0 R /XYZ 70.866 509.438 null]
+>> endobj
+4194 0 obj <<
+/D [12214 0 R /XYZ 70.866 472.949 null]
+>> endobj
+12157 0 obj <<
+/D [12214 0 R /XYZ 70.866 462.655 null]
+>> endobj
+4198 0 obj <<
+/D [12214 0 R /XYZ 70.866 426.165 null]
+>> endobj
+10881 0 obj <<
+/D [12214 0 R /XYZ 70.866 415.871 null]
+>> endobj
+4202 0 obj <<
+/D [12214 0 R /XYZ 70.866 379.382 null]
+>> endobj
+12154 0 obj <<
+/D [12214 0 R /XYZ 70.866 369.088 null]
+>> endobj
+4206 0 obj <<
+/D [12214 0 R /XYZ 70.866 332.599 null]
+>> endobj
+12161 0 obj <<
+/D [12214 0 R /XYZ 70.866 188.294 null]
+>> endobj
+4210 0 obj <<
+/D [12214 0 R /XYZ 70.866 153.526 null]
+>> endobj
+12162 0 obj <<
+/D [12214 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12213 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F100 8905 0 R /F13 9222 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12230 0 obj <<
+/Length 2580
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Ûn9}÷W4°++†Å;̃זg<Hl¯£ °È̃FîxØ’W–=0¿U}‘ÅÝj¹™½<$’íVâ)²x»Å³ÛŒg?ýurôîÌÉÌ1oŒÌ&_3Ë™3&³^0Ùä&û28ùéøj2¾Ž„uˆ##ÄàìüøüÍéåÉß?Ž/&C|p\ü?9¿¼Ž€›â‚WŸ¹<;ûp9¤«N‡¿N~>OŽþu˜Ï “˜-p÷Ùìþè˯<»Á?ýœq&½Ë~/.¼Ï01oî²OG‹ @z…—‡¸üøñò‚ýTæû’ùõøl|=¾8ïfSÓàsBµ¥£´dZÉMF|›Z£Ö
+Í@Ùv2¹!›a‚
+¨­Ò2£7siQ] häSùlD“ê¥èý
+.Œd–æ<Í%Û]Âiäèw-V1£DPk˜•*}X¯"¨Î3K­:*í¬X…p¨Ñi&iIé4 KZRªÁplžmzÍ»3¼ü¥Îv‹r„ëxÕyNË s¾ž/å¦9]—¯wózÅé]¾Y~-_é#wyý;üI.§7ÖQªx™ñ›ª=¬=¹ !™á §™qeê³åýýrÁþɪƊËe
+¾Á6 «ÖxJ>ÈWùb–ßÐRÁo¤™¾•Ë¦%{°ž)ÂtŠŽâíÙƒ+«k°õ{ef·ù:‚‰ãã^¦ÀôȆ“!æã*Ö€3aS`
+ø¾ùÛô1¯6(ø ’î`pY“~š?ÎV¨lõ`þ°^®Þ¿_å³|þ<zGV5A“"Q‰*ÊêF¢ËùbGš‡t¸à9¤Àu$¦!Ä¥ÖÑ™ ÇÙtMR£œ ^Ø?IíA &9*טB«µ ×Ølù@kìÛ|±›ÎB®\f¬` ût
+¨.¶/håûÐ6ß—
+È]Ò_uÀ <6-xƒV¾—Öµ´K`€)uðv,ß`)}»VÌ
+$[c]„îcF­e
+(0‡+µÍ
+xÿDQBŸA¢¯`œÜ«¸tbçTˆÛ0+DPaVhªêçjÜ?ÕÚ©¶ÙàWéó¨Á°õkÅé̹njF¢9’ž9 »äÅG£éÞn˜4à^)lä·Ja»¦ •a
+@Û SÈÊ0ŸNŽ?¿æ™”Å™aÞr y«ÿwM“Â…N‡G)ŒŲµÝhøN7V°_"K­7V -Ê´rEŠ²"S¦ä¢Ÿà!?¨‹X¶^¾ÏËùMüH)ªÖ81Eˆz°¸…ÿ‚“ÙPÏ (õœY«Z½LM}Ô õ[¨µ™ù¿ ¹à<õš_Qµè"ó5)U7ºà
+ǹût³žt2¡öÖóÏ´ù=V½¤ˆ¹wÑ×”í\d)™–): ’Ru,soÔM·aêÐQÎãë@5ŒvŸ® =Rt1 d¡këº)À6lô»è&˜¶*&}aÀ40t·ô¼!Ò½Ò3¦Þ'(0‚Žåí¹)ï h{qû#ÖÅÝf¼q+…z:±  êé€Ù{g:½¡‹;SÜüí8ÇðjãDÿ)†q”“mw–hé)$½7"Rž>€|¦~;míá‚_”¨Uöøø¢—âÔ˜¥p]i¶ô}Š¨ú¦pš{#Ö4oCnÓÜxØW1ÎMT‰Ó÷ÀmÔ~',ëeùzpÅc_ûÖhcÄ!_ú.Ÿ­Ð[nYxäC)œ8õAÚ&ô¿ð2
+'
+endstream
+endobj
+12229 0 obj <<
+/Type /Page
+/Contents 12230 0 R
+/Resources 12228 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12061 0 R
+/Annots [ 12218 0 R 12219 0 R 12220 0 R 12221 0 R 12222 0 R 12223 0 R 12224 0 R 12225 0 R 12226 0 R 12227 0 R ]
+>> endobj
+12218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [103.344 722.208 163.08 731.174]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a4ac17423b939d6de4e1fe1ac672ea862) >>
+>> endobj
+12219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.164 714.886 332.963 722.597]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a97bd383827aac9d96881d88ef98c40f5) >>
+>> endobj
+12220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [103.344 606.061 152.201 615.027]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7af10f4b873d22b0458fd72e5843da9f08) >>
+>> endobj
+12221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.321 598.091 256.809 607.057]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a0364b9624f805c4823fb84eb5570b848) >>
+>> endobj
+12222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.321 590.121 271.872 599.087]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ab2c293a1a728bc5737774b293c850e7e) >>
+>> endobj
+12223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.321 582.799 248.44 590.301]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a6d7ff42ba15e8776f68509b7d916a691) >>
+>> endobj
+12224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [103.344 473.974 128.769 482.941]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a2623145a5ebf02a78352c9691614abee) >>
+>> endobj
+12225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.873 466.004 269.362 474.97]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d) >>
+>> endobj
+12226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.873 458.034 269.362 467]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3a94344bb3490441ad853d19d75b68ed) >>
+>> endobj
+12227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.873 451.04 245.93 458.214]
+/Subtype /Link
+/A << /S /GoTo /D (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a49c1dd9f4b460622c55c94dc8a10b1f1) >>
+>> endobj
+12231 0 obj <<
+/D [12229 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4214 0 obj <<
+/D [12229 0 R /XYZ 70.866 752.14 null]
+>> endobj
+12159 0 obj <<
+/D [12229 0 R /XYZ 70.866 670.039 null]
+>> endobj
+4218 0 obj <<
+/D [12229 0 R /XYZ 70.866 635.993 null]
+>> endobj
+12160 0 obj <<
+/D [12229 0 R /XYZ 70.866 538.001 null]
+>> endobj
+4222 0 obj <<
+/D [12229 0 R /XYZ 70.866 503.906 null]
+>> endobj
+4226 0 obj <<
+/D [12229 0 R /XYZ 70.866 390.826 null]
+>> endobj
+10834 0 obj <<
+/D [12229 0 R /XYZ 70.866 369.449 null]
+>> endobj
+4230 0 obj <<
+/D [12229 0 R /XYZ 70.866 350.837 null]
+>> endobj
+4234 0 obj <<
+/D [12229 0 R /XYZ 70.866 325.534 null]
+>> endobj
+12163 0 obj <<
+/D [12229 0 R /XYZ 70.866 302.435 null]
+>> endobj
+4238 0 obj <<
+/D [12229 0 R /XYZ 70.866 283.823 null]
+>> endobj
+12164 0 obj <<
+/D [12229 0 R /XYZ 88.314 258.268 null]
+>> endobj
+12165 0 obj <<
+/D [12229 0 R /XYZ 88.314 242.651 null]
+>> endobj
+12166 0 obj <<
+/D [12229 0 R /XYZ 88.314 227.035 null]
+>> endobj
+12167 0 obj <<
+/D [12229 0 R /XYZ 88.314 211.418 null]
+>> endobj
+12168 0 obj <<
+/D [12229 0 R /XYZ 88.314 195.801 null]
+>> endobj
+12169 0 obj <<
+/D [12229 0 R /XYZ 88.314 180.184 null]
+>> endobj
+12170 0 obj <<
+/D [12229 0 R /XYZ 88.314 164.567 null]
+>> endobj
+12171 0 obj <<
+/D [12229 0 R /XYZ 88.314 148.95 null]
+>> endobj
+12172 0 obj <<
+/D [12229 0 R /XYZ 88.314 133.334 null]
+>> endobj
+12173 0 obj <<
+/D [12229 0 R /XYZ 88.314 117.717 null]
+>> endobj
+12174 0 obj <<
+/D [12229 0 R /XYZ 88.314 102.1 null]
+>> endobj
+12175 0 obj <<
+/D [12229 0 R /XYZ 88.314 86.483 null]
+>> endobj
+12176 0 obj <<
+/D [12229 0 R /XYZ 88.314 70.866 null]
+>> endobj
+12228 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F100 8905 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12234 0 obj <<
+/Length 2652
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ks7¾ëWÌ‘¬
+a4ÞPU^[Ú$eY^GÉ%ɦÆ6k)RKRNíþúíž5BäP€Ks$‘ýõûëÆ Í‹//þyö›³W—NŽycdqó¹°œ9c
+ë3PÜÜŒ,œ'FˆÑõåå»ë±à£×oÇÝürvqsöŸ3@Q¼€¤gÜWuø:»;ûã/^Üâß~)8“ÞWï¼+P¶Ç‹EñëÙ¿":€f] Ã›ë««ë÷ì§ñDX7ºüùÝE}õñâòâãÅû7ø#pƒ¿xóÓë7ë¿ÚFíÇ÷¿½~óÛÕÅû›1Õ¿7?_¿ß7¦õƒsÌ uÈ¥%ÓJîìáoy×ÇøþGûP¦UXŒ·ÎöUð’9i«· sš;8o˜6„»n§‘‚f:À1ð!àývËÎŒË
+B¾«ñ6Ûõ|ù%PÌSa'£‚PŒ.Ø'’È2ÐY0qŠqª‡™³™Ì¾N×±²˜ý>wa†(Ç´ÅD =ªé8oKËùcS›në×Å|YÖW |}±ú\¿ÒGeû;Òp5ôÓ¢QÏ6€“"úSHfx-ˆC;'­îîVKö•ÕÞÑ2( -˜•X›Rõ'Ê%9æá®VüºUüyjºžÞ•èÛ±A·Ý—‡Â;QÌ7ìmt£ÍE#»¬¿]­ O”/EBx”äwÇj× -Zf 
+½ŒYÛ¤úoÕE´˜>lJúÍ‘FÉ)§‡6J€šŠ ÎFAHGà ¼svy¹š­îÉK—¤Æ%[_ÿ>¶T¸PéÑ|ú‰Ú^[õ‹ùf[ÞÖ×ó&
+¡jê<ôÓiò
+‹Û ˆ´×h]z|4Âz ƒã“ŒÛ†'
+V¹rîDS¦‹ù—Xž 5#³GCd}šPAp|[“ê„ZVϬeŽz4ÒBu4•PËœ5jIÅn-ÏîqújúÕ~Eãjl«°_Ѧ©èßiû™®©]Âc»ZÙªíÓÓf«åfµ(c‡KÈ´¨€ÂFj¬M©J"bQK¢Ühö¼VÿÛXè5v0§GÞ‰g³[®â’)©’MÜÖ’„l4ÿºÚlƒ°£a`«SÐ ¶îöüX~¦Ž[®Ë匸OY=úôx’ÆGÓìgpÀ]D OWkÔÉömèZ¨v:{ÚÝàˆé\d¤{á]ˆüdN tº•9,&ÖW¢gñ¶>W˜•D3ÔÔ~ˆudɼ…„° mxŸÃdçüà° gQæ@¦C")Cä9–ö>¨äX 90%W8ñ†‹ù§:f8‚Êh™IQ0fÀ—8'÷m^-»Ù2ÑB.–_°ŸÇÝ¡€<'2裀6€žCnKj@ßæ{ZíNâÞ–›Y3°ßoWëIÝΤ"Ƥƒ`^ëZØùù.™:Ò”ñ£«ézóu 8,Êõùùºœ•óê¸>FD¨6ÂBZ\|Ê€ ¸Íƒ©%—‡n± ´Ã(ŸT€bRúô~»Žy¤qǦ\ÞÆ
+A1‘Å’¼ä‰£¦Êâ)°m÷æ¬K±Î†È+­¦i)‡FÖílÛiDU¨„SÆ’¨X“5@Û>Üï몫JeÐUW3”
+umjOÑ°¤]X{wóM$œ›v ƒ‹™LéžVþJ?ížQh=î4 «ð´Ÿ˜zÛîøÛÝÈ&§Ô”£7«0‰
+endstream
+endobj
+12233 0 obj <<
+/Type /Page
+/Contents 12234 0 R
+/Resources 12232 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+>> endobj
+12235 0 obj <<
+/D [12233 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12177 0 obj <<
+/D [12233 0 R /XYZ 88.314 761.061 null]
+>> endobj
+12178 0 obj <<
+/D [12233 0 R /XYZ 88.314 744.858 null]
+>> endobj
+12179 0 obj <<
+/D [12233 0 R /XYZ 88.314 728.656 null]
+>> endobj
+12180 0 obj <<
+/D [12233 0 R /XYZ 88.314 712.453 null]
+>> endobj
+12181 0 obj <<
+/D [12233 0 R /XYZ 70.866 689.863 null]
+>> endobj
+4242 0 obj <<
+/D [12233 0 R /XYZ 70.866 653.022 null]
+>> endobj
+12182 0 obj <<
+/D [12233 0 R /XYZ 88.314 627.336 null]
+>> endobj
+12183 0 obj <<
+/D [12233 0 R /XYZ 88.314 611.133 null]
+>> endobj
+12184 0 obj <<
+/D [12233 0 R /XYZ 88.314 594.931 null]
+>> endobj
+12185 0 obj <<
+/D [12233 0 R /XYZ 88.314 578.728 null]
+>> endobj
+12186 0 obj <<
+/D [12233 0 R /XYZ 88.314 562.526 null]
+>> endobj
+4246 0 obj <<
+/D [12233 0 R /XYZ 70.866 524.077 null]
+>> endobj
+12187 0 obj <<
+/D [12233 0 R /XYZ 70.866 502.79 null]
+>> endobj
+4250 0 obj <<
+/D [12233 0 R /XYZ 70.866 481.799 null]
+>> endobj
+4254 0 obj <<
+/D [12233 0 R /XYZ 70.866 453.931 null]
+>> endobj
+12188 0 obj <<
+/D [12233 0 R /XYZ 70.866 434.366 null]
+>> endobj
+4258 0 obj <<
+/D [12233 0 R /XYZ 70.866 415.231 null]
+>> endobj
+12192 0 obj <<
+/D [12233 0 R /XYZ 70.866 365.368 null]
+>> endobj
+4262 0 obj <<
+/D [12233 0 R /XYZ 70.866 330.19 null]
+>> endobj
+12206 0 obj <<
+/D [12233 0 R /XYZ 70.866 305.968 null]
+>> endobj
+4266 0 obj <<
+/D [12233 0 R /XYZ 70.866 270.916 null]
+>> endobj
+12205 0 obj <<
+/D [12233 0 R /XYZ 70.866 246.694 null]
+>> endobj
+4270 0 obj <<
+/D [12233 0 R /XYZ 70.866 211.642 null]
+>> endobj
+12193 0 obj <<
+/D [12233 0 R /XYZ 70.866 187.42 null]
+>> endobj
+4274 0 obj <<
+/D [12233 0 R /XYZ 70.866 152.367 null]
+>> endobj
+12204 0 obj <<
+/D [12233 0 R /XYZ 70.866 128.145 null]
+>> endobj
+4278 0 obj <<
+/D [12233 0 R /XYZ 70.866 93.093 null]
+>> endobj
+12203 0 obj <<
+/D [12233 0 R /XYZ 70.866 68.871 null]
+>> endobj
+12232 0 obj <<
+/Font << /F83 6620 0 R /F98 8891 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12239 0 obj <<
+/Length 2153
+/Filter /FlateDecode
+>>
+stream
+xÚÅœKsÛ6€ïþ<J35‚÷£3=¤‰ÝÇ4q›º§¶ÅfÍØ’k+móﻕ`‘ö®F‡¦œDÚoA.ö)H¼ùØð滓o/O^œ{Õx¬UÍå‡Æqæ­m\ÌŠæòºù}òêû—?_ž½›žJç'ŽMO­”“ó~:ëþæõÅ«ßÞœ½½œ
+É'/×^þpñvz*¸]¿Aòôž‹óóŸ.¦ñU¯§^þxrvyò׉€Dx#sk®ç¡¹º=ùýOÞ\Ã?ýØp¦‚oþY¿ð¶ÄÜ4¿žüR€
+^^àâÍ›‹·ìû.ßÿ3wv~öîìí«³Ýlòiðžy©÷¥£bF«MF¼jMíÔZÁxNíj¹xXuÙÌéàÎÕl*øäãn^B:&„X‘öi§©HFÈ
+N¢0“ùÝjyÿõ×ÛEeDÊ0# Ÿ@™;i0#R:XÉ@¤u¶O¥™ÀµÜåÂT ÎPpa®XkJî5 ¾R·Ò9f¥¢ zx¹P%u}e–µÑBÏæšd´A1§¶F{·„žØV¸JÆê¢/̘b²äÎîïcûÅaùƒÿ‰¯ •šÌ©8/ȇvõùn7im“Î$­ˆÇ»¥ÑKã!çͺS´§SÍÍ©ôLi‰4„R0Ó T“‚«ºN§ÂHþ]µ‹šŒ][O6!j¡àÞ´·
+î ’ðܬ¤‚{X%á“ÎJÚ)c(ÉB¯2\()FRÜŒVy­¤’;¨$<6+©
+[êfAÇyõvLÁ##ðDr6Œõž›}ÔçùOÍ>êS‡}„çfõ¹Ã>Bs7>êsì#tÒm—Æ1|d`åiIžÖÅHZºÑ>" ¯}Tp÷?°=€ÿ À°ðÊ•èêC»À¡G*
+d|ø »@>r“Ä«RŠ-Ý=GJ%%c%“¸Ån’RŒÄóúíˆR2 ‰§~ Pu’Ñ0s‚é$<6)©À( MF* ƒFÂc“
+ì ÐØì£{X¡sÎ:Ú)‹£è®„ÓžBG †4^Gxr§£>w”Žðଣ>z¯ŽðȬ£b´»7HVE§".™Â­s³Š ’ÈK·#ªHÃ…{UÅH\¨‘."à&ÜP“
+ê ¸IGwPGxnöQÁ=¬ðIg!í”Ƴ„¤pBÒV0ï|Ùü„ø¾m+Hm™‹—“k§
+äüCÍ|†i€Æ3ÐY ¬ùÇZ&‚!
+
+ë9{„A HkÉt ðO $ƒ8¾¤¯4… ’Pc·0p³úÜ!ÿà©Ù?}ê°ðÜìŸ>wØ?hîÆ?}îýƒNzãŸíÒ8Š T[b$Òýä°|Ä@NS@£‚¬.¡{>,Š{¦ ô¼r¬Õ;¡ÀŒ³D ·Òn!y0g«wCJ0ýœýt
+å"åã&TI £I‹ão^PŽ3m,Œb$iÆn^ à&ÜP“Œ
+ê Œ¸IFwPFxn–QÁ=¬ŒðIgí”Æ1d¤`Ù)„"‘Ò0,¡ÇȈ
+î †ðÜ,¢‚{Xá“Î2Ú) ŒŽ6º×~å€C†Î,'µ ˜Î{Lè"É{®» rµf¨âwJž¾WË<w«LàXZZ1Üwýaúº†Ûe ®ûØ®ØÕÝÝT™In†Â1oÙÿTr~ß»gYÞÞÕ|©×?Œ Œ@cžfÅ]^v‘œNñ õúÂx²ðH¸C3²$^wgaöùfUÿª•ã†
+endstream
+endobj
+12238 0 obj <<
+/Type /Page
+/Contents 12239 0 R
+/Resources 12237 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+>> endobj
+12240 0 obj <<
+/D [12238 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4282 0 obj <<
+/D [12238 0 R /XYZ 70.866 751.892 null]
+>> endobj
+12198 0 obj <<
+/D [12238 0 R /XYZ 70.866 727.53 null]
+>> endobj
+4286 0 obj <<
+/D [12238 0 R /XYZ 70.866 692.014 null]
+>> endobj
+12197 0 obj <<
+/D [12238 0 R /XYZ 70.866 667.652 null]
+>> endobj
+4290 0 obj <<
+/D [12238 0 R /XYZ 70.866 632.136 null]
+>> endobj
+12196 0 obj <<
+/D [12238 0 R /XYZ 70.866 607.774 null]
+>> endobj
+4294 0 obj <<
+/D [12238 0 R /XYZ 70.866 572.258 null]
+>> endobj
+12195 0 obj <<
+/D [12238 0 R /XYZ 70.866 547.896 null]
+>> endobj
+4298 0 obj <<
+/D [12238 0 R /XYZ 70.866 512.38 null]
+>> endobj
+12194 0 obj <<
+/D [12238 0 R /XYZ 70.866 488.018 null]
+>> endobj
+4302 0 obj <<
+/D [12238 0 R /XYZ 70.866 452.502 null]
+>> endobj
+12202 0 obj <<
+/D [12238 0 R /XYZ 70.866 428.14 null]
+>> endobj
+4306 0 obj <<
+/D [12238 0 R /XYZ 70.866 392.623 null]
+>> endobj
+12201 0 obj <<
+/D [12238 0 R /XYZ 70.866 368.262 null]
+>> endobj
+4310 0 obj <<
+/D [12238 0 R /XYZ 70.866 332.745 null]
+>> endobj
+12200 0 obj <<
+/D [12238 0 R /XYZ 70.866 308.384 null]
+>> endobj
+4314 0 obj <<
+/D [12238 0 R /XYZ 70.866 272.867 null]
+>> endobj
+12199 0 obj <<
+/D [12238 0 R /XYZ 70.866 248.506 null]
+>> endobj
+4318 0 obj <<
+/D [12238 0 R /XYZ 70.866 212.989 null]
+>> endobj
+10788 0 obj <<
+/D [12238 0 R /XYZ 70.866 188.627 null]
+>> endobj
+4322 0 obj <<
+/D [12238 0 R /XYZ 70.866 154.967 null]
+>> endobj
+12191 0 obj <<
+/D [12238 0 R /XYZ 70.866 128.749 null]
+>> endobj
+4326 0 obj <<
+/D [12238 0 R /XYZ 70.866 95.089 null]
+>> endobj
+12189 0 obj <<
+/D [12238 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12237 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12255 0 obj <<
+/Length 1944
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ[oÛF}÷¯ Z €j³÷‹QHm¹_ŠÔN]µ/Iš¶ P¢JÑùÚß³\R%Z–"ºíƒlYÚ93;{æBÓè.¢Ñ'?LN^]XYâ´Ñä62”X­#ã8Ñ,šÜDï†pF†#ÍùàêââíÕÓÁëóáÇÉO'ãÉÉ' ¢hÄ"&¡®Újñ;ž¼ÿH£|÷SD‰p6úµrA¶Ã›,úõä— L2bl ÃøòÇ7—cröîÝpÄ\¼y;ï®Çãëñåþd”=8ûßëw“ñuøÖÔÀן_ýöóør2dÞŒêçäÍÕå¶9'¬%–Ë]æH%ˆ’be]÷®êò®f„6¦¥ó2 Ëo?P*òéM‡k™$FØj#ׇ¹¶€1C$·mE²È ` ƒ²Cµ”„Ê>TK½²a¥:K†L >'™WüêBªµ #£ˆ5<1G¸‘aÃy'ñyZ¦ù<¸mZ»/KçIxÇ]ãÐðÛïÈ’gÌ)%h~Îhj 9§‚h$kòrZÜ%%‰‹¡PâõÃ4œ‡Å¦ã„QV^'·CAI‘Ìãäf8ÀýÉߺ¿ºŽÇ‰KDZVîyM€Ff–°m5S’H$i«‚-»‚Ú²Êö4[I”mÍ)‚¤C©Ó¸«®¥a)\[i–~*†Œ¦¸O¢óÀ8—DhÞ
+'áo1˜CÕž6q™”‹ŽÐÔ™ç NpÜšÈ3ŽI ¡
+Î,]Æ]wÐ…Œt¼Ndk¥tKçÍ´œ6>#á[)¬Ç¼Ô·„Ššáã|¾¬)=öWé~Z„­LF[‘„ü)•O¹ÕïéùÈuÈõšEQ¥Ž?»2âÄpsx¦±ì¨L£qNš³2—$y?îóe;ÏTnA†q ´ò»ð5 Š0+ë<_DQº“µ½¯‹4¶J¤óØҷتÖp02Æó²<•V0’Š®ªr¤2"Ô{iãVŸY“ëÀ t-2F¸½†ù „ú¼Ð¯Óyœ=€ŽFæ}•ßÞfÝÖlò'”wqçÉ8»q4m (F Eýâeq&Ö­#÷_ÕùŸÂrªÛ̱¬ck2Qi`¨Cú».ûqý$kV,Ó»ù4#÷¢$*¾Zø}§+uHV/†.)ŠyÞ ¥ÏDXþbè¦Ù]^¤åýìYYOàCVÂÔøtïø>'1ÒI‡ Ü&Ïé;Á9p#UOønÏK¢@öqI¼,)ÌíwEö…*Á´–õ²¤åMUÿ)k®s 7JŒrM„ÖЫŽ¢nyβér™,+¬M§¸™KuÕ6´ÒÑÎUkOô~„|;X–¡¶xˆËúkowqW;àºZè‰sr_$µ‹Õn® úHóØçÀOË4lþ)ϳݰ«¶iÈ:[SÍ u*’€Ëø1 Ó译ˆ$*>ÇMCÕå“U<C’Q\ö¡ÚúªO¶UdzŦçBy¡h(vºì÷¡ñÈÛtYžžþðp;n²!ô›ìÛºÚê]rá ¿ö7¾¾
+í?jÂ¥ê3T<mt,èKPoHĨµì¨×¢j
+’tC
+l=¸›Á‰Ê_ÐŽæ@ŸhœÛ§‰¦Yp"'«jë
+GÀ¾ çå’aÓ« ÝFBZœŽ9ªéµD« ‰QÛjQ mŽX9z]iwXù㈵z¿{fÆ#¥¨õ:jj‚¢_I”Ö³(‹.÷¡D‘¦œšªÔné|~TƒÕÊ°ö¬¦›ÀP²ùs¸«®CÒùLA #3üÈG
+ÜAÁMÝ‹ÈÀeŠ #ø ¥x/Û¨œØ*à¾é OÔJè#8ê0uà-ì?Ç@¨iŒ¨ƒHÇ@Ü?Òs}0—¤Ý¿È@=©q}0—T•=Ï2Ðñ:jéìf öÔ²¦ ©%ßjÉщëÝs½½§–^–lÏõÂÔò¾ç™åñ£¢,¥åò¿:ÌÒPðnˆ/àòÝÈà7©^nzštáòJÄ3³I4~Ò¼Ühr6]¼°=‡iþñ’Ѻ—aš—¥t3öÈg³|þÄä¯{’çé+¼v€õM;ëgòçeiVÏñâ,E­ñoŽþb/nw'ýs2»žÎï’Öö•ºßf=ïÊâüýÒj^û”ùPæOêêúåîÿß œ¯Ö©ÈQ J*ôàu ¢:kA€ê¿=áŽ>
+endstream
+endobj
+12254 0 obj <<
+/Type /Page
+/Contents 12255 0 R
+/Resources 12253 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+/Annots [ 12241 0 R 12242 0 R 12243 0 R 12244 0 R 12245 0 R 12246 0 R 12247 0 R 12248 0 R 12249 0 R 12250 0 R ]
+>> endobj
+12241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 478.083 149.723 486.701]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread) >>
+>> endobj
+12242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 426.936 206.148 437.473]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8cpp_a909305200887503c4569c8c549688617) >>
+>> endobj
+12243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.555 426.936 302.462 437.473]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry) >>
+>> endobj
+12244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [339.84 426.936 408.747 437.473]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry) >>
+>> endobj
+12245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 413.767 200.167 424.228]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8cpp_aeaf756f5c50f7c82404d0dcb4bc00e4e) >>
+>> endobj
+12246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.575 413.767 290.242 424.228]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+12247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.62 413.767 389.287 424.228]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+12248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 94.365 166.024 104.831]
+/Subtype /Link
+/A << /S /GoTo /D (class_mem_range) >>
+>> endobj
+12249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 82.967 150.082 91.585]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+12250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 69.722 156.798 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+12256 0 obj <<
+/D [12254 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4330 0 obj <<
+/D [12254 0 R /XYZ 70.866 752.001 null]
+>> endobj
+12190 0 obj <<
+/D [12254 0 R /XYZ 70.866 715.86 null]
+>> endobj
+4334 0 obj <<
+/D [12254 0 R /XYZ 70.866 680.637 null]
+>> endobj
+8733 0 obj <<
+/D [12254 0 R /XYZ 70.866 668.553 null]
+>> endobj
+4338 0 obj <<
+/D [12254 0 R /XYZ 70.866 651.449 null]
+>> endobj
+12257 0 obj <<
+/D [12254 0 R /XYZ 70.866 491.13 null]
+>> endobj
+12258 0 obj <<
+/D [12254 0 R /XYZ 70.866 441.921 null]
+>> endobj
+4342 0 obj <<
+/D [12254 0 R /XYZ 70.866 398.832 null]
+>> endobj
+12259 0 obj <<
+/D [12254 0 R /XYZ 70.866 379.376 null]
+>> endobj
+4346 0 obj <<
+/D [12254 0 R /XYZ 70.866 358.322 null]
+>> endobj
+12260 0 obj <<
+/D [12254 0 R /XYZ 70.866 334.011 null]
+>> endobj
+4350 0 obj <<
+/D [12254 0 R /XYZ 70.866 298.855 null]
+>> endobj
+8734 0 obj <<
+/D [12254 0 R /XYZ 70.866 274.601 null]
+>> endobj
+4354 0 obj <<
+/D [12254 0 R /XYZ 70.866 257.498 null]
+>> endobj
+12261 0 obj <<
+/D [12254 0 R /XYZ 70.866 109.259 null]
+>> endobj
+12253 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F100 8905 0 R /F11 6621 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12276 0 obj <<
+/Length 2071
+/Filter /FlateDecode
+>>
+stream
+xÚÍZÉrâVÝû+”d#ªÂË›g¨rlœ8Õi;6éMwdZþ>çi
+£å4Jn>Œ¦=Fy¹4è3A¨ä)¾ë)FËU¼J®F ôŽþ½ƒù4žWÏøÕ5he”å´'ºÏ41Ö} RÅ?ÆKUíÞŠŠ;™#Ô˜ý¿˜Dï(å0;
+NË¡5àR¹Í¹YEò|t[²JÉ_ƒF³utÞêàpDâ xÈù´„)›Ýü˜û­,]bÑn¢/· ŒYº‚+ÂÑ«öáà9ˆ!¡a¦¾ý6{½¼½i±D(
+a j¯m¨ãUãTñ0­`g–ÊBó{óýíåàá¡E³SèºQì|ŸÏ«Š¯nWÛ.¢Â>ˆctÃíqä#°Qú”þ<Å?Æó¸Íÿmß0=ñ¨H“Z½,Fs÷yZ.ÆÑjU„€O8DAJ–rÒ·i &ËuÔÒ‚±¯[(Ðœ-÷s`—ñ²FÿÄi(²]b…<\]lÙ:}´Âé²Ôéq&Ê.y.>>{I|HƒWˆé">¼,ærÛ=üzéãc‡§VÙzÜYNža¦”Žê÷VOË1€zé‘òN[! ¥æpm„qK\*‹óœ°Yüûâñq¶MÚ¬…ò«»ÑéÛCÝÑr¹X¶¥2FŒÝèu¾ªê]­ŸžËÖéÉÏKMD}ˆÎ™;Òó gœ‰£A”WÏôæ¢6’µ®¥S¨eU¥÷?´”"n‚ÜœÄæR+»q{nq²
+|W:e­¦R †¸ëÓIÓ9¨Æ”Ê9•¹Ÿ…XŸó4%d%¾ÑÇŽ’ìu½)¦‘ìÍ"ü-³¨øÎOÒ­©„sJj›D“'™=a¹ÀÈ™Iâ,‡e›#¦Bòžäm%87ð LÙ5÷˜p„¢ù8šôú’óðwßcÿëß‹|ûtŽÁç|š¢µ´$‰ö>I͉Gð V ´9ÂSüyž½y7B/-U±;?G+”´…š"Æ“q2&n‘ë¯bšDž±¿âña¨„aDQÑ*auê¨JýÙ‹!I4¸¶H>Éj’–:&Æ•]GD¨ÓlƒÑ|’9¿¤–(߬1F\±3,ÚQìѬp¸·À ¶NqoD¨™$”MŸ±ô3â(ÛÇÑÆ~¤u1‰G14‡pžá¥-åQC÷‹—i0¢ª.<j‚‘gvîÍšë2µŸ¿kV]^Ôvc$ŽîPPU=ØKÒ8³G¦qŒ„NÛ@pCìINÂá¡Ze’tá$4^#g›Ôq—o'wXr×ÆO§»ÖgLɶ›£´\x8å]UsEå¸{¹I[¤¾ÚÀ­™W Ô)}¸y97'™7ëàº0¯—ÄħiÞíc‚úÓ†™A>ót@gÙ³fßõ( É(™¾!;8’…=ÍÔ~¥G;15$izœ©åÇ5õ°gÓÊ8S_>Âtž®,³-*”0ð³:vG9êšq¹éõQNO‹r†–›.Lï%Q³×ô˜¬cªjû²Çøc^Ú÷`g0‹aþ©qï\ˆÒˆÆò»ƒ)M”U©(Y róžDÃëMIÆOOùÄ©~„`ű·NÓ÷ý8sé\e‹aó‹x>ž­ÑK§{±Ïw¯[ z+Ò¿…ó³®9ôn0ôžÔðT–.žÿDó¿ÈûÏóñÈ/Ši­CÜ m “ÙZÄUuVBn•,ãù”¼oËœèx=²j<úu°øxèÆ>Ó´ƒCî—â9p"},•¡ÓÇYÓ¤C´wadˆ2EâX'ñì…F΀î]
+)驪ü›P–cTY¿£„A”Tèqs1Éêªÿ‚Z™
+endstream
+endobj
+12275 0 obj <<
+/Type /Page
+/Contents 12276 0 R
+/Resources 12274 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+/Annots [ 12251 0 R 12252 0 R 12262 0 R 12263 0 R 12264 0 R 12265 0 R 12266 0 R 12267 0 R 12268 0 R 12269 0 R 12270 0 R 12271 0 R 12272 0 R 12273 0 R ]
+>> endobj
+12251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 758.07 171.072 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+12252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 746.875 167.207 755.494]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data) >>
+>> endobj
+12262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 731.986 149.23 742.452]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine) >>
+>> endobj
+12263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 683.464 177.062 694.001]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a8d61b33eae41b37adbafe9485ec5fa60) >>
+>> endobj
+12264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.814 635.017 197.202 645.478]
+/Subtype /Link
+/A << /S /GoTo /D (class_ptr_data) >>
+>> endobj
+12265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.409 635.017 261.749 645.478]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_abcfdcc46c4397479935682c09d3e6cce) >>
+>> endobj
+12266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.818 621.975 204.922 632.495]
+/Subtype /Link
+/A << /S /GoTo /D (class_auto_data) >>
+>> endobj
+12267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.656 621.975 249.281 632.495]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a5f80f5fe074a894489074c3823085046) >>
+>> endobj
+12268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.814 608.857 216.56 619.395]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+12269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.294 608.857 292.991 619.395]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a35c0af1e741950be6a58d72599e4534d) >>
+>> endobj
+12270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.814 595.892 212.696 606.353]
+/Subtype /Link
+/A << /S /GoTo /D (struct_persist_data) >>
+>> endobj
+12271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.429 595.892 285.262 606.353]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_ad6f507c7ac323953ca8e2417cb4828a7) >>
+>> endobj
+12272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.36 470.458 215.84 479.425]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+12273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 462.488 224.171 471.399]
+/Subtype /Link
+/A << /S /GoTo /D (liboffload__error_8c_a99a74190d6fa41077c0f739be401c196) >>
+>> endobj
+12277 0 obj <<
+/D [12275 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12278 0 obj <<
+/D [12275 0 R /XYZ 70.866 698.348 null]
+>> endobj
+12279 0 obj <<
+/D [12275 0 R /XYZ 70.866 647.668 null]
+>> endobj
+4358 0 obj <<
+/D [12275 0 R /XYZ 70.866 581.435 null]
+>> endobj
+12280 0 obj <<
+/D [12275 0 R /XYZ 70.866 562.177 null]
+>> endobj
+4362 0 obj <<
+/D [12275 0 R /XYZ 70.866 541.262 null]
+>> endobj
+4366 0 obj <<
+/D [12275 0 R /XYZ 70.866 377.816 null]
+>> endobj
+9154 0 obj <<
+/D [12275 0 R /XYZ 70.866 356.477 null]
+>> endobj
+4370 0 obj <<
+/D [12275 0 R /XYZ 70.866 337.777 null]
+>> endobj
+9137 0 obj <<
+/D [12275 0 R /XYZ 70.866 325.669 null]
+>> endobj
+4374 0 obj <<
+/D [12275 0 R /XYZ 70.866 291.247 null]
+>> endobj
+9997 0 obj <<
+/D [12275 0 R /XYZ 70.866 279.139 null]
+>> endobj
+4378 0 obj <<
+/D [12275 0 R /XYZ 70.866 244.717 null]
+>> endobj
+9198 0 obj <<
+/D [12275 0 R /XYZ 70.866 232.609 null]
+>> endobj
+4382 0 obj <<
+/D [12275 0 R /XYZ 70.866 198.128 null]
+>> endobj
+8735 0 obj <<
+/D [12275 0 R /XYZ 70.866 186.079 null]
+>> endobj
+4386 0 obj <<
+/D [12275 0 R /XYZ 70.866 169.453 null]
+>> endobj
+8736 0 obj <<
+/D [12275 0 R /XYZ 70.866 70.866 null]
+>> endobj
+12274 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F11 6621 0 R /F14 6622 0 R /F98 8891 0 R /F13 9222 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12305 0 obj <<
+/Length 2547
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[oÛF~÷¯ Z €j<÷K°ØEêÈM/±³®Ú—´ŠDÙÂÊ’+ÒÙMý~Ë-Ò#Š2i /–lÎ÷Í9gÎmh]G4úáäûÉÉ鹑%NkM‘¡ÄjljfÑd}Â%Ž4çƒËóó_.‡œÞ¼þ9ùéd<9ùë„AXÄ„#Ôe_µxÝž|ü“Fs|öSD‰p6úo¶ò6‚l‡7«èד80Ɉ±ã‹ß‡Œ«y7qcç?þ2Îß]ÏÇWã‹3üÊ„dbpöî͇Éø*ÿÔÄ׿½<ûíýøbqØFösòãåÅÓ픚°–X.›¶#• JŠ‡Ñ]í*1NcjW½šº«_§”6‹?(›é< ]ʼna,û*×Mt±FTÕ[%Á”&ʪ*‹x=”tðyhé€ÜJ^®âBÉñbÈè ÞÆëY칞ƒoä`2pÈ‘U`ç¢KYˆüv¹ž­îçåØÎzhÌ€2Íþ#$Òd‚Š«e’Äpá7U.úg¾Âo–£Ü3©¢‘¤Ä9‘/<[M“$N2%—Æ:=ǪÔpAþd]þµ?8W•ïDGJéA’na?5¸Ÿ¥ÅÇÞ`ÛëÂrWÙB¯Æ÷ËÙxíÏç߇†¦ÛŠ´©°PcɶØׯñ†áMþûê>n&Â_ŽÈÙÐó˜Wÿ\·LÍ¢¥m8â(lpÐûÛx;M—›uo¶ ¹Gnìçåz^£ÀäŽã:Ç5¥ã.öH¯ñ6DY~gNã<«HSI\sÈz«rêÎ%®rÄõæ)$§ÑHô
+Ül ‰V+ssˆƒæ@îHÝÍAhOÛ˜£3äƒ9v1[˜£;piŽ]à²in
+ÉŠa|a„•gämŒ>Ÿ¯—Icšæ¯«åºHÌ毛Eþê¿Qöã s9o4ùœ»N924Ë%QQM¬Ù”€<&ÍÇár:w…$Õ3ŸH‹¬©ÚÏ8$‚-¢—!‡„Þ­9›M’’ÙÝ]Ïó‘ƾ¾Ù,«ð¶ š+"áÐ,¹Nè;ÒʶªD˜ÑYcáeÑrBmëæ ýSB4Þø†Jõ>Š¹®V›¹ ˆ‚å-¯cjŠdèÅ˱ËÈM¿Vvñj¤†ÓZÛLÍ1Td¦ ¦û§¶Ý®7a½á
+d–ש{ðò·=XA vtÆ<¥ð¯!Êy¹_å£;>€–ê)þ(T4Q"E5ô¶¹CÙ L ­ˆD âèß;oIúžDËê–Š‘ܧx:Ô¯seÓðLR¢7òƒ¨Ý¡äùýzvÔµ×ÁÍiŠ>>c“¶7ËùýÖÚmK$ª1œm
+w
+#Ú°£%„"ŠDÝ’K2V´83, ¾= IUUä%ºý
+ë¦ø0d+‰ ç Ýi!ÁQåöÚ<ì9˜#áŠmmlzO×Wñt~5]_?yü´r|ϹtÇŸW>=%(±¬ò7µºSüòL&Gª¢bËË5¿“`-æ²ç4šk±`HóÉ)œpú¹6‘EbTJs*¤•kФx^-(¯ÎþãÇ–q(ÑàHÞÃÖ´¿Üg•­…•iA0êÑXB™nVfë’Œq{lMxàA²­qáÐgU·–?é·*ªÀ=±‘û[ZÔ©Ý@¹†ò
+ƒ¢Œ‡h“þ—Æë4”'-A@í /½hõœ oB‡&é ‹¶ÝGÊî¸Â¹ž¡x¡mvÅÞ¡ð³£/)%ºHc©*èñ*öÏ&PIe¨¨±’Ç«]tôªÖß憔^–T#Šôl°Ù¢ëY®ÓV³! nxdXöDý3fC89þÁ£#Â+“ÙsGÅœ)ø™””=àú™”Ü=3L¥±²DåK†
+`ç¡Pè?º”¿ô>æÿ¹ò§‹Tåy JÐÒa%N{Áé»ý©r:·
+endstream
+endobj
+12304 0 obj <<
+/Type /Page
+/Contents 12305 0 R
+/Resources 12303 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+/Annots [ 12281 0 R 12282 0 R 12283 0 R 12284 0 R 12285 0 R 12286 0 R 12287 0 R 12288 0 R 12289 0 R 12290 0 R 12291 0 R 12292 0 R 12293 0 R 12294 0 R 12295 0 R 12296 0 R 12297 0 R 12298 0 R 12299 0 R 12300 0 R ]
+>> endobj
+12281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 677.193 163.854 685.812]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var) >>
+>> endobj
+12282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 664.401 204.462 673.019]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_var_value) >>
+>> endobj
+12283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 651.609 221.346 660.357]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var_1_1_card_env_vars) >>
+>> endobj
+12284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 601.238 182.074 613.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcf) >>
+>> endobj
+12285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.048 601.238 226.892 613.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfa938cbdec8e3afd11b6077cda8009ab82) >>
+>> endobj
+12286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.885 601.238 268.988 613.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfa83bba309d0c15e1c5dedbbacf76e024a) >>
+>> endobj
+12287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.981 601.238 331.752 613.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfae5612a9432ba9d7a9f3c389e66ac3e1e) >>
+>> endobj
+12288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.745 601.238 396.56 613.193]
+/Subtype /Link
+/A << /S /GoTo /D (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfadb2efa602779112f61ba934869781bba) >>
+>> endobj
+12289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 206.459 211.115 215.208]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a256a5721249aa3309437212cc21a9fe4) >>
+>> endobj
+12290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 191.945 234.759 202.415]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aad97e678ed905077031b8ff990e4d841) >>
+>> endobj
+12291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.824 191.945 444.266 202.415]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+12292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 143.868 237.44 154.329]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a4b47d9b106a5dc123534bc6e3b479665) >>
+>> endobj
+12293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 131.076 214.773 141.537]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a5d4ac6b2b643acc6113519085c422eca) >>
+>> endobj
+12294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.602 118.207 228.048 128.745]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a9f4d13ce48053496194d04c2f2b65033) >>
+>> endobj
+12295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.844 105.415 202.665 115.952]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aaae3c647e992f72c70e5e2cef04ed4e1) >>
+>> endobj
+12296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.782 105.415 265.896 115.952]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+12297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 93.46 170.525 104.055]
+/Subtype /Link
+/A << /S /GoTo /D (struct_cean_read_ranges) >>
+>> endobj
+12298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 80.793 129.89 91.205]
+/Subtype /Link
+/A << /S /GoTo /D (structarr__desc) >>
+>> endobj
+12299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.864 80.793 197.949 91.205]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a6c296ac560651b35e1988cbdd2b7369a) >>
+>> endobj
+12300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 67.951 184.602 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aac9fe3d733e6335d4f74536bfd18801e) >>
+>> endobj
+12306 0 obj <<
+/D [12304 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4390 0 obj <<
+/D [12304 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12307 0 obj <<
+/D [12304 0 R /XYZ 70.866 690.094 null]
+>> endobj
+12308 0 obj <<
+/D [12304 0 R /XYZ 70.866 616.573 null]
+>> endobj
+4394 0 obj <<
+/D [12304 0 R /XYZ 70.866 587.144 null]
+>> endobj
+9650 0 obj <<
+/D [12304 0 R /XYZ 70.866 566.388 null]
+>> endobj
+4398 0 obj <<
+/D [12304 0 R /XYZ 70.866 549.574 null]
+>> endobj
+12309 0 obj <<
+/D [12304 0 R /XYZ 88.314 524.019 null]
+>> endobj
+12310 0 obj <<
+/D [12304 0 R /XYZ 88.314 508.397 null]
+>> endobj
+12311 0 obj <<
+/D [12304 0 R /XYZ 88.314 492.775 null]
+>> endobj
+12312 0 obj <<
+/D [12304 0 R /XYZ 88.314 477.152 null]
+>> endobj
+8737 0 obj <<
+/D [12304 0 R /XYZ 70.866 455.882 null]
+>> endobj
+4402 0 obj <<
+/D [12304 0 R /XYZ 70.866 439.619 null]
+>> endobj
+12313 0 obj <<
+/D [12304 0 R /XYZ 70.866 219.451 null]
+>> endobj
+12314 0 obj <<
+/D [12304 0 R /XYZ 70.866 158.631 null]
+>> endobj
+12303 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12384 0 obj <<
+/Length 4256
+/Filter /FlateDecode
+>>
+stream
+xÚÕ]Ks·–ÞûWp)U¼‹Yh9Ñ-¿ÆWÉL•“-S2çJ¢.IÝÄóëç;ÝM¹ÑB7» hÊÉ•²Éó
+¤,ë,Ãÿµ`WW)nifu‘qŸ*ósÍ—ååbÓÇ­íH±)0‹°øYØÄãо
+`KǬ‹¡Çó¨:lO´#tÐVPP! FÆ~8{ÿîÃE‚NR‹Ã8§ñ©×i'2I´]Þ&ËÈÖAGø¸ì¬)‚{bNׂœ%ŒDllm¾j”±±jço’¦
+õ c‹qicäù&å+ðA%K@"’qRƸÐa¹\§¨ûÿ(ÕÑï]úÐv²á/N®Þªô$« ¸ýzŸ¬•JH%@%²VŠÛ IæÀ>óPdœ(ïŒó@æ ¤¤"ó°ÓHÆÏÄ¥³»ëåÝ¢“[EüQÖ¤ÎäÏíò2}Þ-”˜é€\Ðe b¼¬%™Ç€’F¶™œ[8k;òxù™‰’‰1!vpÊÌ4d'³2.ÄZÖ’Œl2®=ÙPÏ4K†¤¸€FÚÐìF
+µg¹SkÀ§„/ë‘4ñîvµmoÆ­m !ý¸µ½ß~Y/’Q3" ó¤­FÜ™W%EþÏkIÚ5å?(èYÐ_S«¨kØØÚÂ\Ûû bY$QB%$ÖÊ‹ŽJ}«4b_Y—~xžÖnGÐâÌ¡&÷Íòò¬Žo=vTãÚÿµþ%0TÑ“3Xߊ¬s,Ca-I‹Åá©Ý„Æ븈OÈQD¸M¸±éY
+æ¯Óߎ äZ©CEá,Âg ím•Œ+A9H’ÆåS._£†sm…ª"üÃÕu¤‹50(Á–@wþÆÆð#˜×µ+¾Î{FUºzòZéñUyX^¢†óE-aa†ôö8«Vã㺖„ܶ9®]~ª«ìH÷T:Ö³¦ŠG
+(€•VÆ
+ÜÏ·_¦¬r*>²4ñiµº9dw ¶0BÊÛj¾rŽj$"ÉZ’0»£¸UÕc“ši£™
+
+J†-1
+¥ŽuF1tf
+*YD˜á>l’]ÎÔI,J@zY¥ê¦¼ý”*æÒyž/€)¹bÊø3U«s^uþûåõën´( süû=OOQÎQ»¢÷¹}ë°ŸÈô®å%I"ªÎ[òˆÙ’cN(,ic¦IQY÷|L‰LVuÆ™"Q猇Še¾¾¡b™ñûŽ'Ûç9u‹Ãdböo­VÀ‰(ê)Ï­ xrlJ± Ìãm`
+xVÀDš©Re4Í´®íš7[Þ&<ÀÅŠÑÅ­6îÓ™Ú•Ÿ´ù’êEÛîÂ=šõá΃„šZT^#_Í&â13tÙˆ†žm1 RÆ6T©|@'«‚ÔHÖI: :WÁ Ïíüæ¦ÇLHŽ*qÀU‚ïæjŠ´¾ê–È¿šB’¬uƒ|eE PQ¿“–¸”‚àPÀðçk¨ò2%c Ïßž'¯¤Ðw@_úÀApò†"ys/ò'šÁÝd éÖ
+îkIVŒ8¢GØ´(Ls•ˆ‘ç—ÛeýVj“ЗMhɳÆÄÐP?Ç|¹=àøZÀòp.ÿÊ—âè* %q,¦¶ã°=éNÉ/
+Ø^•À¥¶S]Ü_Ï“—ó¥ÃÊÿ‡È•+f‚ˉ\'Jˆ\©å&ì}xÆÉ°Ô ¬E {³üÔ{o€ÞOZ’ÁZF]Àª†yN ¿>GËÍvR9ËäåF†#–?¨§.[À½L•6tô%IRZïy¶™òLQ
+ñÎ(zžkuÌ#Þ*€©yu<Ï\oÖŒpÔ”@µ–‘5jƒ¦k¥Ï§ ULAÞO#<RSç'^ØÃ?©Õ,„êÝÃ臸kâ÷ÓävV©…=Ô³Øîù€ºN}ÛˆýÄSÌs_
+endstream
+endobj
+12383 0 obj <<
+/Type /Page
+/Contents 12384 0 R
+/Resources 12382 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12236 0 R
+/Annots [ 12301 0 R 12302 0 R 12324 0 R 12325 0 R 12326 0 R 12327 0 R 12328 0 R 12329 0 R 12330 0 R 12331 0 R 12332 0 R 12333 0 R 12334 0 R 12335 0 R 12336 0 R 12337 0 R 12338 0 R 12339 0 R 12340 0 R 12341 0 R 12342 0 R 12343 0 R 12344 0 R 12345 0 R 12346 0 R 12347 0 R 12348 0 R 12349 0 R 12350 0 R 12351 0 R 12352 0 R 12353 0 R 12354 0 R 12355 0 R 12356 0 R 12357 0 R 12358 0 R 12359 0 R 12360 0 R 12361 0 R 12362 0 R 12363 0 R 12364 0 R 12365 0 R 12366 0 R 12367 0 R 12368 0 R 12369 0 R 12370 0 R 12371 0 R 12372 0 R 12373 0 R 12374 0 R 12375 0 R 12376 0 R 12377 0 R 12378 0 R 12379 0 R 12380 0 R 12381 0 R ]
+>> endobj
+12301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 758.07 209.618 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a6e642b3c17c93a83ab4ac0a1f6845742) >>
+>> endobj
+12302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 745.016 219.588 755.553]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_ac03d5c7aaed76207164ad5e2380d8f3a) >>
+>> endobj
+12324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 732.088 206.049 742.5]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a29156e9bbf8a27f6160346e6a002c145) >>
+>> endobj
+12325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 719.034 218.459 729.504]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aea0f59da635767917f24abad7821608a) >>
+>> endobj
+12326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 705.855 218.961 716.451]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a5e1ce183037b2d86a94c2f094ae3b552) >>
+>> endobj
+12327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 692.801 254.306 703.397]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a2d227602e926615ff4ded70e1edc326c) >>
+>> endobj
+12328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 679.748 177.483 690.343]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_afd5977ae80eb184bc58a454fe680cde8) >>
+>> endobj
+12329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 666.819 174.622 677.289]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a951400c6c0ef8c5a177b92b7a886369c) >>
+>> endobj
+12330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 653.64 205.888 664.177]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aa5f8946f29b261f5251c79082d392dd9) >>
+>> endobj
+12331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 640.586 215.858 651.124]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a80f9de3cbae4ebd4bf81d133d97f8003) >>
+>> endobj
+12332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 592.144 170.019 602.555]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a5b41c5ae4505891e6c53e26df197e02b) >>
+>> endobj
+12333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 580.811 174.578 589.43]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a5d893191aa98b4f6102ba7ddee3e51ef) >>
+>> endobj
+12334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 567.758 169.18 576.448]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+12335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 554.704 236.27 563.453]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a0be1879c7af6f7650618b9482425a32c) >>
+>> endobj
+12336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 539.929 265.366 550.399]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a0d405836336b5409b0a90c9ce5c2d001) >>
+>> endobj
+12337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.602 528.597 207.444 537.215]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a0a69c249386c9a4deaa6e68e042bc548) >>
+>> endobj
+12338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 513.696 277.775 524.161]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a7c40f313917f1f1bf44a136c3382b1f8) >>
+>> endobj
+12339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 500.642 260.838 511.108]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be) >>
+>> endobj
+12340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 487.588 124.681 498.054]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine) >>
+>> endobj
+12341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.655 487.588 183.217 498.054]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a7141606b9f55a1dc8475003a8d87d1c0) >>
+>> endobj
+12342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 474.535 198.15 485]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_acc2ed5250b0b74aced99094f8dad7f74) >>
+>> endobj
+12343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.215 461.557 211.617 471.947]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a1c89676e52abbec9efd482be0528e934) >>
+>> endobj
+12344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 450.274 139.305 458.893]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var) >>
+>> endobj
+12345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.805 450.274 193.183 458.893]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a17a0c5020309ddb1e31eacbbdb984022) >>
+>> endobj
+12346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 435.45 186.458 445.911]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_afeba2628f2039035cb5ea79bf2f532ca) >>
+>> endobj
+12347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 424.167 186.36 432.785]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a8e95dee7cbc1279d5b670eee17cdc3d2) >>
+>> endobj
+12348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 411.113 188.09 419.803]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a932cb72e40fedc938116eb09ef9824b0) >>
+>> endobj
+12349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 396.289 186.606 406.678]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a4cdb3be06fd02cfb860e9d1dd26331bf) >>
+>> endobj
+12350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 383.235 165.235 393.624]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a3b556f92407724cecdb435e9d068eb9c) >>
+>> endobj
+12351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 370.181 191.879 380.642]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_ab37d5b6803d01f4eb50954c5ce6b13d3) >>
+>> endobj
+12352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 358.898 231.316 367.589]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_afca6e2fcf13da05971ffbb8730916500) >>
+>> endobj
+12353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 345.845 293.923 354.535]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a8deead7d653d334b44d63a9270e0c69f) >>
+>> endobj
+12354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.833 331.02 278.523 341.481]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a429015c924669f759841e2808d00b77c) >>
+>> endobj
+12355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 317.967 317.711 328.428]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a8604220a50b08a768ceeec68512a51df) >>
+>> endobj
+12356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.833 304.913 277.402 315.374]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a925c67058b8d974e173768e58e9d7155) >>
+>> endobj
+12357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 291.859 316.59 302.32]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a57939f5298d4f7332bded32662171a73) >>
+>> endobj
+12358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 278.805 156.493 289.325]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597) >>
+>> endobj
+12359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.993 278.805 227.218 289.325]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a6defc1b48694ab6252a2436768a8125e) >>
+>> endobj
+12360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.447 278.805 312.146 289.325]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597a87e7a9df2c586929d4e2d0a21cced0ef) >>
+>> endobj
+12361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 267.523 253.046 276.271]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a17b2bd0533e53c423e2aa3485e2a9d72) >>
+>> endobj
+12362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 254.469 218.458 263.159]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aec8aea5aadb6aa8b891513d7e3ad9657) >>
+>> endobj
+12363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 241.415 283.818 250.164]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_abf6a8c4de707fc449f6bdcd2369838f5) >>
+>> endobj
+12364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 226.64 182.074 236.98]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_af8ac6244511eedb7d1140768f6442e82) >>
+>> endobj
+12365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 213.586 278.331 224.056]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a7122abe50ca085b86e1c91e0e5415130) >>
+>> endobj
+12366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 200.407 185.687 210.872]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aced578e47186c9a872a412eacc3f34df) >>
+>> endobj
+12367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 187.353 183.894 197.819]
+/Subtype /Link
+/A << /S /GoTo /D (offload__engine_8h_a35c0af1e741950be6a58d72599e4534d) >>
+>> endobj
+12368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.394 187.353 246.63 197.819]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_ac176484db621f2c8c6df6f76c8492f72) >>
+>> endobj
+12369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 174.3 149.966 184.765]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+12370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.466 174.3 217.508 184.765]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a457fcb0fe397dfa7cf4034deeed06ceb) >>
+>> endobj
+12371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 163.093 149.966 171.711]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+12372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.466 163.093 213.859 171.711]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_adbb0ca095d9e6536aa14801f64b21b6e) >>
+>> endobj
+12373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 148.192 146.523 158.658]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+12374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.496 148.192 203.015 158.658]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a68c47cfc2e197cb46ba1c1771112fdfe) >>
+>> endobj
+12375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 135.138 177.465 145.604]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a9f3f89cd790d3a142f7db79ead9c336c) >>
+>> endobj
+12376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 122.085 166.499 132.55]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a790f817d43c0fd934908f0ef0c00ae3b) >>
+>> endobj
+12377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.95 109.031 192.394 119.497]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a1be94b904c4dbcf6bd04e76988fe4458) >>
+>> endobj
+12378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.708 95.482 207.063 107.437]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a5f7f03a1ed6c0530347245fd3f9d103c) >>
+>> endobj
+12379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.055 95.482 300.204 107.437]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_acdd01f7e6d86939549abcdf8429e3ac6) >>
+>> endobj
+12380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 82.924 226.797 93.389]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_a787e660b7b86240bf6cc0f440e942e33) >>
+>> endobj
+12381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 69.87 226.797 80.335]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8cpp_aed818601c5d5326fe996ecae54e4f7aa) >>
+>> endobj
+12385 0 obj <<
+/D [12383 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12386 0 obj <<
+/D [12383 0 R /XYZ 70.866 606.908 null]
+>> endobj
+12382 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12443 0 obj <<
+/Length 2675
+/Filter /FlateDecode
+>>
+stream
+xÚµ[KsI¾ëWtÄ^ b©©÷C‡ÝÐØhì ÛÒÈødû€Q[C- Oøßï—Ý QP€._,,ÑùeeU~ùªæÅ]Á‹?Î~œývéUáY°Vƒï…ãÌ[[¸ ™Åà¶øÜqLÖíY);W——﮺’w.^w¿þ<ëÎþw& Š¢*0ªG=~ŽîÏ>åÅ-þögÁ™
+¾ø§úæ}Ù&Ådz¿:-˜ó‘o®>ºÀìÕõu·'ï\¾}ׯ?Ýô/û7ý¯ð_!”‘Wo.®ý›ú¯n¥ûó÷__½úô¾ÿ¡xQý;x{õawEkcxϼÔûV¤bF«§EñMUÎœ vÓÂV0™X@}Îyçýp4'ÏVÚ–_8—Óñr<›®~3=Þ—Óå°ú´® žíÇ‹žPÇÕÂÿu[K(ë§ÿè{'sRŽL/ôq› i™µ$I•
+Õ¹IžXCz×IœŽq?|zÿ{ÿæ 7¼6Ä=?¡ΩƒÈê«Ëñ}9ßUPjä§)ÁIíXP"Vðv¸&v»¡åZ3¨/ê­kÒ11d0¢âF »:þ·ÛSZ7) Œ`Z¹
+Í„t»
+ôj+ Q|YVž$ņ•þ“0£c³þÂì;¼@͆·»úkÓ/2¨¯¬ü´+xçñþìVíáymÉÕÔfãiüÁ0£ôÊ}m-`×ÿ‡Ëúçd¼öi­êŸ³ïõOzbR®׸nÉ9  ^x>Ö·ðHuɳŽ$á
+qŸ5áð‘T£˜<>¡]6 5ˆÊ† .O’¤Û—¨o.XKTÏ[ÅÕ‚ÒðQ­z³ÓPT¡.¼¦è¢Nñ^¢š=VBj¡@sµ$­ìËžc4SȘ2 £¶äÜÄÈÄè°Ù!Ë‚6Ûo-x2þ6Ϋ€þsÛžö±‡mÞ8ÿÁmtÙ ˜µ“|®ÏÁפ£8l¾ÇÇFåjå(0ã>‡£(°­ÙBc"B6S(êuhwŠ{hj//!G WkIVû—ÝÃsÆÌìÁ/VÆÈÓyy7^$›qž,ðl{h)!Á¨z|?¼+÷§ †à]̈«è«êu-Ÿ@¨6ØÓIG H¤ ¼j*¤Ï~=ŒÚ›7&‚Î
+÷mµè¨YhNý‰vŒF­5ks0š¢†ŠkGiÎï¡4³ò)jäI}
+©¡0«ý‘ÔbN}%ˆKs
+…W1rslRVV=ð À¨w$DÀQlJì™F-ïLxÍÓzë_í¹4¡<eJ€éº„ÛÚêk»ÈŽ¦º9öZ#¹BmŸ²¤G"³¬¶sm­ö¶$¶ý1•‹={í*{œ»lU:”¾ÄÝ‹-¸bF… ¸‡UÊ/ÆwÓá¤Üœ¯£&ßscŒR}§2hCó0gU¤Íàâ&y?NÒÌÌú¨HT”ñêÅ«¿>½½éj¥•PþÜZ…J_y ”CD1.ªG¬Ô.e±eƒj*nèýCÊ+AÖdP‰¼R©t—j€kš;›Òàøym#Èë5ßÈ
+MmÌ}‹n +ÿ"]âÿ†¤ZÚv‰("ë}º‚$qJz0] jQÚtIr,jÛMXûæôž„-üλê}RÈÑB½Ü¢#ÃØ °tGJ˜wÏm@…ЛU᳌@oëk;ãQòª‘«¼=®­ßÕÚÞ~_ï؉aŒ›pÊÕaÞî~ £÷‰sÜ^½ô•vî§7›Sï‰Ú¼<æ5ézKÌæ;Ø QÚ0»VBh½ ý5(ùp
+endstream
+endobj
+12442 0 obj <<
+/Type /Page
+/Contents 12443 0 R
+/Resources 12441 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+>> endobj
+12444 0 obj <<
+/D [12442 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4406 0 obj <<
+/D [12442 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12316 0 obj <<
+/D [12442 0 R /XYZ 70.866 753.558 null]
+>> endobj
+4410 0 obj <<
+/D [12442 0 R /XYZ 70.866 732.323 null]
+>> endobj
+12315 0 obj <<
+/D [12442 0 R /XYZ 70.866 683.946 null]
+>> endobj
+4414 0 obj <<
+/D [12442 0 R /XYZ 70.866 649.511 null]
+>> endobj
+4418 0 obj <<
+/D [12442 0 R /XYZ 70.866 618.974 null]
+>> endobj
+12395 0 obj <<
+/D [12442 0 R /XYZ 70.866 599.105 null]
+>> endobj
+4422 0 obj <<
+/D [12442 0 R /XYZ 70.866 577.812 null]
+>> endobj
+12396 0 obj <<
+/D [12442 0 R /XYZ 70.866 553.278 null]
+>> endobj
+4426 0 obj <<
+/D [12442 0 R /XYZ 70.866 517.189 null]
+>> endobj
+12389 0 obj <<
+/D [12442 0 R /XYZ 70.866 492.656 null]
+>> endobj
+4430 0 obj <<
+/D [12442 0 R /XYZ 70.866 456.625 null]
+>> endobj
+12319 0 obj <<
+/D [12442 0 R /XYZ 70.866 444.401 null]
+>> endobj
+4434 0 obj <<
+/D [12442 0 R /XYZ 70.866 408.245 null]
+>> endobj
+12323 0 obj <<
+/D [12442 0 R /XYZ 70.866 383.653 null]
+>> endobj
+4438 0 obj <<
+/D [12442 0 R /XYZ 70.866 347.622 null]
+>> endobj
+12318 0 obj <<
+/D [12442 0 R /XYZ 70.866 299.245 null]
+>> endobj
+4442 0 obj <<
+/D [12442 0 R /XYZ 70.866 263.089 null]
+>> endobj
+12387 0 obj <<
+/D [12442 0 R /XYZ 70.866 238.573 null]
+>> endobj
+4446 0 obj <<
+/D [12442 0 R /XYZ 70.866 202.408 null]
+>> endobj
+12388 0 obj <<
+/D [12442 0 R /XYZ 70.866 177.951 null]
+>> endobj
+4450 0 obj <<
+/D [12442 0 R /XYZ 70.866 141.785 null]
+>> endobj
+12391 0 obj <<
+/D [12442 0 R /XYZ 70.866 117.328 null]
+>> endobj
+4454 0 obj <<
+/D [12442 0 R /XYZ 70.866 81.163 null]
+>> endobj
+12392 0 obj <<
+/D [12442 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12441 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F11 6621 0 R /F45 6502 0 R /F97 8866 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12448 0 obj <<
+/Length 2885
+/Filter /FlateDecode
+>>
+stream
+xÚµ\Ks¹¾ëWð”"«–0€ÆÓU986µZ[ŽVI¥ÊëØÉL$R)'ίO÷€C$È! ìÁ6Kžé¯ÑèÇ× P¼w×ã½/þrsñêÒAÏ1o ônn{–3gLÏzÉŒèÝLzŸúozóñft=Jëú– †FÊþåÏ¿ŽÂOÞ]½ýÛûч›¼ÿ¦ùûæ竃¡ %¾ õê«ËË_¯ôÔ»Áç›_.F7ÿ¾¨ï‰xˬR ²ã¾7~¸øô™÷&øŸ¿ô8ïzÿi}è¡j?Ü÷~»økb Šs¦@Ekøéê·  {ûñcÐûe×£ËÑõèÃÛÑ®V­9œcNªCJ) L+XëÅ7M¬S&6‚ñV¿él¹ îsø&=(Íi‰
+‰û&
+'
+âFœÙÀëèÜDÞð˜]h­™r%µcÂÆÀè(»€Æâs²¢ñ˜se ù—‹óÂÃãgoÎ .³ÂÃ`eÓÚ’()#<Ö¶ÚQ×cãÛ¸}2cû¼bVAœ~Ò#Ò0cK
+íTT×·ÏíMÊȧìY^>Ïë”ò:”ÚŸåu¦;)¡ÐŸ”IÐQ·JÊùÀmRŽÓ»Yu_OŽó6Ùt®õ¢é,¤¹ÿþ0-pô$xqÌ—@~u)TÝÖ )iØ3zÃ39$€-SVµÏÓ˜ÎÛ.'—˶q+/‡“¨‡ËòrÉFk_ÀËI˜')CÒ»–9D?Ež9fL ÚhtA•ã‚È$• ’¸Y%˜ê)EÐ-¼Ñ%0%šLësR/Æ P¥˜‘¶¨² „A7F oÛóº?žÏË°I“H@YØ(æk'‘{[¡Ò&ÙO`‚ËÎð4jªÇT>Žõ/©ciT¢QGÿÀ?–rÞÅKL¥4αNSu¢‰NaÎtŠ
+¤mú…H§Åô«Ø£¿S–ÚÌU—á,4$´€á¬Á%· ×øêŸöÃbbýZ½ùíí¢^&ë’A):–¡6ËPb
+ÐÉs—qú¦„¸MI*aP6¦aE@ïw4‹]¶C541p¾Ÿ9lpm$¸ßÉ=&½"Àj(×ú¶®f×u5¹®f«Ú°H$RYÀnrˆ·‚y·N ) 5ŸÚ—©Ô'WN™mI5P‰Ø8OÛ‹Œ £|èNêL³E}:©
+ZÊ ‰;¹n4V×®4Ž*
+›}WbÓörzkÏêûúQ)æoñÍ"¸šJö´Ó]
+3ÚØ1E“eÛ1·Û$Z£]2 MXOží¢²"‹ *L,ÒA‚J’¸ƒ# *ü¡Ui¬4y³¼A%IÖÇO  ~º ÚAO `®èé&h;-€Øé&h'9ÍGmÉé&l&7ÅJ·œŽƒ·ŽIÐ×à![|GÑr}'sܤ^AWNÈ9±þ™¼Q¨6LŠ IÝySÃÒƒ/ŒÙÂ[/ž(ôS³_GS]×y¦œŽq¿T‹zïIp‚»ÒsÊ¡q×=“á˜óëÑÛ3†€K„ó¡ÙÉ^À”÷7ן®pêe"¼üþ˜,nÀ”H7ŒÕk ÁÔú™O!\>'~ ÆÎ8àVŸW‘MyJ·T MN2C6ÕAçjâ@ ”Ì)w¸Zc×%>(Õòk,GtPlz¸‚¦FäÔ#Ç”’¬n ŒçM®œ¦
+°Ã†€vØ%HCOªeÕ¦èCçüó<ÕãzÚÔìD®¨p( ¨’tW
+bE÷Ö2…{ãU XMŽ7Ï0¸ V?ô ¼wL·Wˤút‡„¡˜MÖœH(ƒ HR-ml]‹Üþœ,@tFYiÐ1ü–ý4À÷ZÔ³Iª¯FÅhƒ³Ž9ß©XÃÙ|6žÏ–Ó»çùs‚‚qLRøå£c¥÷ÒÅèûz¡ÃÔ«8c:÷¥Bã•“{7¨õwºê°òöáÛ·u{kZ±Eª&sB¡E¤¥í0ÝY¢BœKw–„Ö1î¦é^H-Õ)í›ò<Ä<B”n¢¹>Ò¼ÕÜÝ¢œ÷ÿNÔ¥zšV_ˆÞ¶uõÝ|üLオ©Ì»Ü€Ç§-íù9¾™¼Á#p‡$d,‹Ø0`²)A¡ÇØ“%$8¢ ë‡A’n/rL¾Ü¥æ¸ªI"ùظR¬o"VÓõG¹ J@bA7"̇꟩¶®7{[ĶŽ¬‰Q¿­.]¬9ÞŸWÄ.y–‡yÑs Nçݽ¤‰)Q`R‚¼ƒ99w/ 'IYLF8*a8‘$ ¶;œ
+@†pŠ†SÈU8E˜ÓY:œÅ1-‘cî &ž &tnéÕYá”wÓŸš²@8ÑXÆüQ—JéˆÉž@Õ78Æ8Y@â4–kuߥʇ$Ç £ÎsºHejK Jôå-@ìBª0Tk‡Ã‡œc#ᜫ£*ïê(}™‡Î¡
+ø2ð€*;DÍîp­¯_K$¶Ð‹æ\x¬î9® ‚ -Úo`=ÍÇõb±Áß›]˜Mb妸G©y³kÜ0[5À¾BHuPµôЩ·òÅæ wç«€Â`õꌤáuÓŸ* ‘4è<;’BJB3ƒ¤.’rÝ=Š0é$ëÑ¡²¢cRS_a/%LŒÎSíùÜö76¬EÖŽÀê{V=ÔŸÞ¿ùG*u AS²
+UT,º\Æ Þ¼}nÓôîØ<3|}ã¶ë2"O¢àëÓà»ädsæ~FÐy'©4³¢D@’´e¯úγë@7+QP’hç Ç$Úf8NWqý
+¦À6Š{y>1;UÀ^b&8ªîáb–Ù³³;Çñ
+]ÓRÇøÓ˜ “»±Íw‰Îh52/áÒMAWâ‹=(H8ÿdzÃqIw’Œ.–«ßA°7*׿¾ õÛ4]Û?åw!÷Ñ›7(1dè{ïJ7c F¡ô6ôÿSÕÝÒ
+endstream
+endobj
+12447 0 obj <<
+/Type /Page
+/Contents 12448 0 R
+/Resources 12446 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+>> endobj
+12449 0 obj <<
+/D [12447 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4458 0 obj <<
+/D [12447 0 R /XYZ 70.866 751.735 null]
+>> endobj
+12390 0 obj <<
+/D [12447 0 R /XYZ 70.866 739.488 null]
+>> endobj
+4462 0 obj <<
+/D [12447 0 R /XYZ 70.866 702.794 null]
+>> endobj
+12394 0 obj <<
+/D [12447 0 R /XYZ 70.866 690.489 null]
+>> endobj
+4466 0 obj <<
+/D [12447 0 R /XYZ 70.866 653.795 null]
+>> endobj
+12393 0 obj <<
+/D [12447 0 R /XYZ 70.866 641.49 null]
+>> endobj
+4470 0 obj <<
+/D [12447 0 R /XYZ 70.866 604.737 null]
+>> endobj
+12321 0 obj <<
+/D [12447 0 R /XYZ 70.866 592.49 null]
+>> endobj
+4474 0 obj <<
+/D [12447 0 R /XYZ 70.866 543.783 null]
+>> endobj
+12322 0 obj <<
+/D [12447 0 R /XYZ 70.866 519.087 null]
+>> endobj
+4478 0 obj <<
+/D [12447 0 R /XYZ 70.866 482.519 null]
+>> endobj
+12320 0 obj <<
+/D [12447 0 R /XYZ 70.866 457.765 null]
+>> endobj
+4482 0 obj <<
+/D [12447 0 R /XYZ 70.866 421.139 null]
+>> endobj
+4486 0 obj <<
+/D [12447 0 R /XYZ 70.866 355.686 null]
+>> endobj
+12439 0 obj <<
+/D [12447 0 R /XYZ 70.866 335.66 null]
+>> endobj
+4490 0 obj <<
+/D [12447 0 R /XYZ 70.866 314.21 null]
+>> endobj
+12440 0 obj <<
+/D [12447 0 R /XYZ 70.866 301.963 null]
+>> endobj
+4494 0 obj <<
+/D [12447 0 R /XYZ 70.866 265.211 null]
+>> endobj
+12434 0 obj <<
+/D [12447 0 R /XYZ 70.866 252.964 null]
+>> endobj
+4498 0 obj <<
+/D [12447 0 R /XYZ 70.866 216.211 null]
+>> endobj
+12437 0 obj <<
+/D [12447 0 R /XYZ 70.866 191.516 null]
+>> endobj
+4502 0 obj <<
+/D [12447 0 R /XYZ 70.866 154.344 null]
+>> endobj
+12435 0 obj <<
+/D [12447 0 R /XYZ 70.866 130.193 null]
+>> endobj
+4506 0 obj <<
+/D [12447 0 R /XYZ 70.866 93.567 null]
+>> endobj
+12436 0 obj <<
+/D [12447 0 R /XYZ 70.866 68.871 null]
+>> endobj
+12446 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12452 0 obj <<
+/Length 3256
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ms7½ëWð(U­ ñíª=xm9qÊ%ŽrJr %Za­DjEÊIþý¾žÚÄ$gø°©rDÙœ~î~Ý ŒœÜNääÛ“]|ó&èIÑ9=¹ú8ñRç&>’pjru3ùõÔ ²âìÜ^¾yóîòŒäéË×g¿_}rquòßQr¢&JG!cóhÀÏëû“_—“üÛ÷)t “?›oÞO ;âÃÝäç“Ÿ2:(£„‰ß]þ|u¦
+|ÙüÿêíåÏG´™ŒD ³oDÆjaþ<(¹=Á67ÁN ¹ÝÃüæ9x0"àIþ"¹q³™
+ã}ªí͇ÛÌnSN[¨TÊô¦gúx¦ìé-ö“<e&KƒI¥
+èÖ¥)…_-3ˆ6à‹¶ƒrRDÒÏ7`cÿlœ+Öà›7˜à/OžG)¤õ“s…¿ ±}òõì7)i1_Ï—‹öÙéºýy7_ÌÚOF[Ù~Z~lò3w³Íßá7½œfL€tµXC‚¼7êDwRZ8ÓJ’žZÝÿX®ÖâúááLÛSÁèy´ÁdÛ~ïýìã™ÆFxœ-®gÝD}`/øwûùbq‹±¾x1Ç4dV.b¢!Êkh¬\Á lÔ›V’R¾[ºÇåõlµúMZ‰?J´ —,9F—ìã䜜Øì̓–Ë»Œ ÆÕy w é8G -ñƒmi©[÷ìE°cg+
+¬¢(LãsºæUÚ×9Ar†¨R®!<º¨‡Œ›ðöüå˜&Ý›jDªç€6"»ª±¯à`šÃ÷a‰£¯±¯(bÒ\o°Ó»»\0'Âv@Üo‚ù¨XnËb9¼†ÇìTˆåd7Dû`,ßEÈÞË‘þ:…ã‘Á¼Ñt¤„|0צ•äx*ìe©kà"”›¨·qwrNX؆Æ5p9<ÛEŒ”ÌtÄ3žÃ"†‚}¾GWC{¤æ^»û„¢q5#$ª!Ù³Ûùj={Ì0^*¥* j0.)U²9立 ár®­<檎é’²541pnÁ$š\½|ÿíÅU”“¨*km SA» úòÕO¿¼}Ñ›€–qÂÑ]ž·žQ{äSxÆ]³¤$¶‡Â’Ý©)±l…q­$· O»æ‰¯öª,¼0—«Øn¦Ô^¢Ë4-Ú´öñ4_¬ÉT?8™ŸXïÀ)KXšD*1ØOzwÅ•×Ä*7n[@l¸F¹¾
+BëTã}¡ Û?XW¸á8.~ZårøDÛ¨X
+éŒ ê•î?äriÝìœrÈ
+Zc%ìný±$åõàÖ_ä®õ— ïoýU
+k®“jü°D0ÏùN#}“}–ã…pN*ÅݦŽù†£æ:ºM;Žû™öx],f,G»ƒÄc,ÜsâQAáŽxl«<€wT
+tsu±†øŒª ŠÁ¢êÎ ?«r›»QdÀñu7W…˜ðÒ’z³~ÓúŽéÓ]Ûœ¯Í·Û¢ïc34‡”ÞäO[Î2970©Uêî²KÃ7ñ ¶¦±‘E›6‰eA^vŽx•½ê% t£
+Í¢sïÂ(0)C líÀÈ|»¿0Y6åà˜xq¶ÙÔÕYhœÙÖ-¹·÷Söpݯ™äÓò‰ZÕO>û#æ.œ'ReŽêiÓl½±r÷€¼À|A6uC¯:j£]9¾ã£a!ÅoèÙ_g_¦¸wEÏ4¹Éxjä ©‘$!c
+¿ã±^…Ä =â"“Ñnèñ™ÌhÌ×¼¡GN#¶Æãoè°ó† ÚÔs›™fŽËÑO•Ö <hÖ*W­‚µzHµÊs-å˜Ì™WSÁzXÒ´¯]­"MB‡’jÕX »«U,I7¸ZU¹«V%Èû«U@»jUÚO+2…£ÌIw)¢wkÈ%]’¦Â ˆþE3x ‰o~šX9xк˜"ï9ïÎõ§»–ƒ¹r½­³}Þ=VC˜§qì“oñÀáz¬WG™°m o¤„\Il%éÍ­üÃ!Ä#ÈÊXß#?1ÅßÄçWøxå+€F ?dû íRõØ°v«›/sØ…¢È…M,l¨QcI:è¯}«[yää B×X »CK2䇮
+È]èJ÷‡®
+ ]èJ@KB×ñk¸ ]åƒÚ„®¡k¸ ]»Ð•  ]å¸]èJ·ÎÈÐÕ™÷}Ór_wÉlîô‡‰®y9NP¥q8̲$·‰›;N€¤Ñˆé ¤5TV`ÔÓø`HÔ¾9‘SÞHAJ¥ø;B",@ArPš
+G
+ºür|»±ZnX\T°÷ÆŸ>pe/;ásÞ^64,þØõ²“gul3­Ïö½
+¿|N IeW™´p‚¸:³'ÿ†3x¢0ÿöüî®’ô{¤€Ý¦{ÝPSŽÛ˜mÜÛš`ý 娤\séduÝÒ—ý·Ê‘à¿NëØõ"DUc+ÌehèzQPÍ ŽrÜ`šÛ¸;^áÕaŠåŸaŠÛ‡û¯šŒ5F¬ùݽ{¨gý”kOBň²XSÔ°yeÚMïç«ÌñKáÝ(V€Œ|s#&ÏŽó|~{fîeœü¾5ó*Î6HÙmúÀu~ˆjræN >n؃þëH¾`
+endstream
+endobj
+12451 0 obj <<
+/Type /Page
+/Contents 12452 0 R
+/Resources 12450 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+>> endobj
+12453 0 obj <<
+/D [12451 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4510 0 obj <<
+/D [12451 0 R /XYZ 70.866 752.081 null]
+>> endobj
+12425 0 obj <<
+/D [12451 0 R /XYZ 70.866 728.122 null]
+>> endobj
+4514 0 obj <<
+/D [12451 0 R /XYZ 70.866 695.253 null]
+>> endobj
+12422 0 obj <<
+/D [12451 0 R /XYZ 70.866 670.44 null]
+>> endobj
+4518 0 obj <<
+/D [12451 0 R /XYZ 70.866 636.623 null]
+>> endobj
+12415 0 obj <<
+/D [12451 0 R /XYZ 70.866 600.776 null]
+>> endobj
+4522 0 obj <<
+/D [12451 0 R /XYZ 70.866 568.631 null]
+>> endobj
+12419 0 obj <<
+/D [12451 0 R /XYZ 70.866 530.937 null]
+>> endobj
+4526 0 obj <<
+/D [12451 0 R /XYZ 70.866 497.197 null]
+>> endobj
+12417 0 obj <<
+/D [12451 0 R /XYZ 70.866 473.255 null]
+>> endobj
+4530 0 obj <<
+/D [12451 0 R /XYZ 70.866 439.438 null]
+>> endobj
+12427 0 obj <<
+/D [12451 0 R /XYZ 70.866 415.497 null]
+>> endobj
+4534 0 obj <<
+/D [12451 0 R /XYZ 70.866 381.68 null]
+>> endobj
+12433 0 obj <<
+/D [12451 0 R /XYZ 70.866 345.833 null]
+>> endobj
+4538 0 obj <<
+/D [12451 0 R /XYZ 70.866 311.908 null]
+>> endobj
+12429 0 obj <<
+/D [12451 0 R /XYZ 70.866 287.949 null]
+>> endobj
+4542 0 obj <<
+/D [12451 0 R /XYZ 70.866 254.15 null]
+>> endobj
+12430 0 obj <<
+/D [12451 0 R /XYZ 70.866 230.191 null]
+>> endobj
+4546 0 obj <<
+/D [12451 0 R /XYZ 70.866 196.392 null]
+>> endobj
+12431 0 obj <<
+/D [12451 0 R /XYZ 70.866 172.432 null]
+>> endobj
+4550 0 obj <<
+/D [12451 0 R /XYZ 70.866 138.634 null]
+>> endobj
+12398 0 obj <<
+/D [12451 0 R /XYZ 70.866 126.755 null]
+>> endobj
+4554 0 obj <<
+/D [12451 0 R /XYZ 70.866 94.611 null]
+>> endobj
+12409 0 obj <<
+/D [12451 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12450 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F97 8866 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12456 0 obj <<
+/Length 3440
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ms7½ëWð(U­&@7>]µ¯#'ÞJ¢DQö’ä@K#›ITD*»Ù_¿¯g81Ž†\{صb“xðúu£!5û0S³¯ŽþqyôÅÛÀ³PEçxvy3óª
+ÎÍ|¤ÊéÙåõìçã7_¿þþòìâä”|8öÕÉ©#:~ûöo¾<óÓ·gß]žhRǯ›ÿ¿|wþÝÉ©Öl _ »ùÎùÛ·ßœŸÈ§¾<ùõòŸGg—G¿i¢fzÆÑWÞ˜9¨8»º;úùW5»Æ?þs¦*Žaöïæ£w3˜ñÃíìÇ£¦`”ª ›d_ŸÿØX½ùþûÖî¿fpqööìâì»7gÏ­êÜBÈŒe,WÖð'»Ô¶‹í‹®TgßÓâ~íÌs|8%èæ£äösI©á›"®Û¹_=<=GÕD•±¡
+XCN5&µæòâõ›3n½ý¶KñÀwîúyµž¯W¿Q¡CÛ– ÷ Â`dBÊå™ 8/Úf1!Wη#Ymw3¡F¼ÃW2™ÐypL¸ï»™PF²n2
+ôY*Б¯4ÎH¾
+ÛƒÓâçVNã((Îá¾=Gá>Œ¤L'“_>rG~ÛÈ/°_>hÇ~Û {Ð_¶Ÿè/ñ÷ÿýms<î7[èìþNÈ«WÞaDá}‘o“ª\ˆ©aË«zµåfÂ^ Ä)7·VˆR‡£™ J? ×d‹T“fɾ:‹kqÔu3Gêô¨¿šïºJA>î«ñ ²ˆÎ:hKEˆNF2*7ÝÕq„èl£°­õøÓDu¡
+8zûŽ0DuŠ£ɘ ¯ˆƒ®rÐÈT\ŠÜî“!²“´†KÀF‡s
+Û'»¿xçù~cª¾vÄ`%
+L…Ø·[âÚ‘³•¡N$®÷œxw¢-¶;öüò-ˆyć¬U“…îDFºk hó§ÂHwµ×“ÈHwÙÈÐ;¬íN'¾n‹È¾¾Ç"’ïÍ<‰ºÏÐp$‡Œ•3`M)çÛo4’që&¯œ‘2¦.±gŒôRz÷Ê­^7Å›²ÇóÅí¼ ·‰ša}|~ÚÆö\¶i<‘«†¡k­ ’=&-1$æTwµB˜síH¦‹ò—¯/¾:»Öæ,§$ÊHJé ìë7?üôîâlËAÐpí}Ëþ/a IƧy€Î}´%P|Ì tß?~óêÕc}[ÏWuòoîÓ¿­ê6j5Û­î ÐHfVQ>½Ùo1kuO¿`¤õN¥5¤¦ÎÂœSîEÊB±ÈòæÜìšÀ°®íS|^ò`ÚUò°
+ 0™ì’‡ÅÁ‹d§—<
+
+"ÁÝ}£¢*b_
+±Æñ•ÛQ*2ké¬ýY÷Z~DÔ ¾È|‘“k°•¹r{‘qcR#:…‘:ÛnwHW`È·­+0$¶¶JlQwõÿŠêÒã؈ê2’èÊͪ5[ ÿ ë€@ˆ+€ lHÑoVÃO­ó% å5±õ)d;ßåzÂ+˜>@~³Ë’ä|óð/_NÈHƸÏý
+…¬tye<BÙs€ÝoPd õä7(ùÀ›'( ðî¾lÓÜ´æ£6oPbŠºW[6²P
+‡/A§zëògB›:uáȹ&ÍÈv±²=îÐ|
+lR¹ã"ïÇWm lKëi>:k‚Úî9úàWCF™*”8¹F.%û'wJ’-©’³: Çï—ËÛ±:x‘<ψ¤û/dÅR(2'#…&ÕŸKS~ÏGçмSLÐË$¤­Ÿê¡¨†@‘È‘9/¨Áa*ÄA ç!„Ïþ´RGé’ÌyZ¹ï»Ãšð}äéO+ oâZ‚<þ´²
+öɵê~¹Hú4–šÖ¢ƒêýòë+t÷`²â„Pžå/Se$fþìq²õ>'Nì9ÂHœl݇éq"¹‹ÛÈ/ĉ|Ð.Nlƒî'² ø'Oˆƒw㬡°KúÇ\äÔ®‡ÅC-çs<N€ÀDÏ'qâaÝÜíßæSà¦6Í
+Èç|;’¼¢ip«ÛVÂÁ_UÇ ‡¸R$JqGƒ»AX
+endstream
+endobj
+12455 0 obj <<
+/Type /Page
+/Contents 12456 0 R
+/Resources 12454 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+>> endobj
+12457 0 obj <<
+/D [12455 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4558 0 obj <<
+/D [12455 0 R /XYZ 70.866 752.14 null]
+>> endobj
+12400 0 obj <<
+/D [12455 0 R /XYZ 70.866 728.198 null]
+>> endobj
+4562 0 obj <<
+/D [12455 0 R /XYZ 70.866 695.454 null]
+>> endobj
+12411 0 obj <<
+/D [12455 0 R /XYZ 70.866 670.641 null]
+>> endobj
+4566 0 obj <<
+/D [12455 0 R /XYZ 70.866 638.748 null]
+>> endobj
+12405 0 obj <<
+/D [12455 0 R /XYZ 70.866 613.009 null]
+>> endobj
+4570 0 obj <<
+/D [12455 0 R /XYZ 70.866 579.412 null]
+>> endobj
+12406 0 obj <<
+/D [12455 0 R /XYZ 70.866 531.618 null]
+>> endobj
+4574 0 obj <<
+/D [12455 0 R /XYZ 70.866 497.945 null]
+>> endobj
+12408 0 obj <<
+/D [12455 0 R /XYZ 70.866 438.12 null]
+>> endobj
+4578 0 obj <<
+/D [12455 0 R /XYZ 70.866 406.379 null]
+>> endobj
+12412 0 obj <<
+/D [12455 0 R /XYZ 70.866 380.564 null]
+>> endobj
+4582 0 obj <<
+/D [12455 0 R /XYZ 70.866 347.025 null]
+>> endobj
+12414 0 obj <<
+/D [12455 0 R /XYZ 70.866 311.178 null]
+>> endobj
+4586 0 obj <<
+/D [12455 0 R /XYZ 70.866 277.514 null]
+>> endobj
+12413 0 obj <<
+/D [12455 0 R /XYZ 70.866 253.496 null]
+>> endobj
+4590 0 obj <<
+/D [12455 0 R /XYZ 70.866 219.957 null]
+>> endobj
+12410 0 obj <<
+/D [12455 0 R /XYZ 70.866 195.939 null]
+>> endobj
+4594 0 obj <<
+/D [12455 0 R /XYZ 70.866 164.122 null]
+>> endobj
+12407 0 obj <<
+/D [12455 0 R /XYZ 70.866 138.383 null]
+>> endobj
+4598 0 obj <<
+/D [12455 0 R /XYZ 70.866 104.844 null]
+>> endobj
+12416 0 obj <<
+/D [12455 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12454 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12460 0 obj <<
+/Length 2174
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[]S7}çWìôÉ~@Ñ·´É;u'jœd:IcOÁ¦ÆIÚߣý –‘Í®%¦ÉC`vﹺº÷ž³’L³?2š½<x1:xÖ·"³$×Zd£«ÌPbµÎLΉfÙè2{ß1„+Ò=ÔœwÎúýWg]N;G'Ý£_z£ƒ¿LÑŒeLä„æÅ£¿'7ï?Òìû5£Dä6ûVÜy“ÁvŽ‹ëìâà·€L2b¬çÃ/g£.09>?ïrc;ýÁ«^y5ìõ{ÃÞé1>2&ïÿrt>ê Ë¿šÊ÷ÿî?9;~óºwZ<*~Žg§GTÃZb¹Ü5"©QRÜŠ®X…¬¡õè&‹ùݪômÒe´óy¼tÎ<ë3™åx’k÷¤T˜Q<óRQÞä›'ÒÜßs3›„§I™¼ð
+ž$¨•àñP<Ip+Áãá>&x’
+€:C¼\UÐx²š} i·YâbjÑ!÷Q¿C)Ç© ‚çñ˜dEYîc®k€bŸWsY솆vB\b4AðUh_Á?: Þ(T@ q– øB‚?éFðß FnÐ%<‹”*!ŸpBœ î+¡FŒ£é~Œƒ
+’EuA´)-9Bw…S&ÜQEó¤ Ô¢wrmáMÀÎ’®ú,§· 7ù´ª[ë^Ÿ’`[}?Š{ìý(Ôº÷'žÀ'nU±þãù4ìŸ ·‘¨‚}™7"Q
+N¶‰ûvpÜÛB:è“B7#ÌWrŸ4õæÆrZ,ƒÇ¿¹¹ f+dÃ7·}Y‡î¬ÓÖÂvÖq– o~&7rÅ:ònÖI
+ÛìhQ×ñÀu]¯?RÖñ˜uY¯a¶¨êhüûª^ö^E}SœbZ"ìï‡.»qâ‘Ü%qÔZ2
+ /ÃÎSÕ²mU´`ö‰sâÏÀ„ÁÓe/Xñí†uøñõõ"tj¬Èc–
+endstream
+endobj
+12459 0 obj <<
+/Type /Page
+/Contents 12460 0 R
+/Resources 12458 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+>> endobj
+12461 0 obj <<
+/D [12459 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4602 0 obj <<
+/D [12459 0 R /XYZ 70.866 752.865 null]
+>> endobj
+12420 0 obj <<
+/D [12459 0 R /XYZ 70.866 678.521 null]
+>> endobj
+4606 0 obj <<
+/D [12459 0 R /XYZ 70.866 643.29 null]
+>> endobj
+12418 0 obj <<
+/D [12459 0 R /XYZ 70.866 569.818 null]
+>> endobj
+4610 0 obj <<
+/D [12459 0 R /XYZ 70.866 534.586 null]
+>> endobj
+12426 0 obj <<
+/D [12459 0 R /XYZ 70.866 461.114 null]
+>> endobj
+4614 0 obj <<
+/D [12459 0 R /XYZ 70.866 426.754 null]
+>> endobj
+12424 0 obj <<
+/D [12459 0 R /XYZ 70.866 401.63 null]
+>> endobj
+4618 0 obj <<
+/D [12459 0 R /XYZ 70.866 367.27 null]
+>> endobj
+12399 0 obj <<
+/D [12459 0 R /XYZ 70.866 342.146 null]
+>> endobj
+4622 0 obj <<
+/D [12459 0 R /XYZ 70.866 308.636 null]
+>> endobj
+12401 0 obj <<
+/D [12459 0 R /XYZ 70.866 294.822 null]
+>> endobj
+4626 0 obj <<
+/D [12459 0 R /XYZ 70.866 259.541 null]
+>> endobj
+12428 0 obj <<
+/D [12459 0 R /XYZ 70.866 235.289 null]
+>> endobj
+4630 0 obj <<
+/D [12459 0 R /XYZ 70.866 200.057 null]
+>> endobj
+12397 0 obj <<
+/D [12459 0 R /XYZ 70.866 175.805 null]
+>> endobj
+4634 0 obj <<
+/D [12459 0 R /XYZ 70.866 140.573 null]
+>> endobj
+12432 0 obj <<
+/D [12459 0 R /XYZ 70.866 116.321 null]
+>> endobj
+4638 0 obj <<
+/D [12459 0 R /XYZ 70.866 81.961 null]
+>> endobj
+12402 0 obj <<
+/D [12459 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12458 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F97 8866 0 R /F100 8905 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12469 0 obj <<
+/Length 2171
+/Filter /FlateDecode
+>>
+stream
+xÚÍZ[oÛÈ~÷¯ Ü ¨&s¿Ý©#7^ìZ[¯¶@‘äA+Ñ6±2å•(§ù÷ý†Ú¤DÉr4 ú`‰Q†ßwnsΙ Mnšüóäã“7V$–8­E2¾I %VëÄ8N4KƳäCïüýÛ_ÆÃëþ€Û3¤?Ðœ÷..V¿¼ÿöóðjÜgœöÞ–ŸãËÑUÀ¸¶/pÞ]\ü4êûQïúŸÆ?ž Ç'ž0B–Hꈡªd¶Ô%Óû“Ÿh2Ãþ˜P"œM>—Cïˆæð0O~=ùW‡
+’q —-Þ~­$ï+©Ÿå¿^ ¯‡WçÃm™jcXK,—ûD’J%Å“T´i`Õe`Í­¥›öíÝM–^‚7L&ùöè¥V9ð#¥¢ÔÆ$ÒÈzL‘ݧËm]sDÉúUæm‘1ó
+ÓÖ Íû’öóÉ}ZYõ‡êë#çò}‡0–¸ã…±Šp%ÚÂŒ/zâÊRÎ4Ì)$‘ÔÖ¦ú°*&E6ýT ”ª<`Òã‘ÚV/¼KážgE¶È+'Eõ=Ïò ¹5Õ÷â&˜
+×nªc$wõ“û:ÿ#_|Îã$ÓÙ¤˜ÄCê
+`q*Æk/¤Šv®mS04T¨‹ª`ö‡bùµò¸ Ò'Œ†7ë|ºG ¬Æ¹¤°¨ý6Z<.²Ù>- 2‹¥Äa‘µëÁÓjòwí'(Ài8òXE| •%“òxECÍeí©ñiŠ=v9•baG(]êq”-(R4ú^ÅëŽè˜ ÊM(ŠàÁJH‹(q”
+,Q˜§ù-RvdaýɼˆdW`Éz-Í#Kê÷8L$³Kš`V¤à] ;E.²7øÛ-*sèðx£z,¿eRͬy–æE¶JÑ`R.d…ZvÉImåóùdµJWÍE»k@[cMûîÄGÎÕF9PJûƬJ¿Ó¢n'¡wÕGâáºèëåýä6í<{–¢¼€Iµïhüí $Qî;Ja6ŠB1YÞ¦¡mÉJäêqU׌©¯÷ø:éOÂÿ•½Áb>_ô!öç•ÿ$û¬1x%[ªýæ˜zëî7ÄŽî£ÏzËN󔧓žZFòÄ–
+endstream
+endobj
+12468 0 obj <<
+/Type /Page
+/Contents 12469 0 R
+/Resources 12467 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12445 0 R
+/Annots [ 12462 0 R 12463 0 R 12464 0 R 12465 0 R ]
+>> endobj
+12462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 125.515 146.235 135.98]
+/Subtype /Link
+/A << /S /GoTo /D (struct_image) >>
+>> endobj
+12463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 96.759 189.578 107.229]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+12464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 83.314 230.356 93.784]
+/Subtype /Link
+/A << /S /GoTo /D (struct_offload_descriptor_1_1_var_extra) >>
+>> endobj
+12465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 69.87 291.261 80.34]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor_1_1_read_arr_elements) >>
+>> endobj
+12470 0 obj <<
+/D [12468 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4642 0 obj <<
+/D [12468 0 R /XYZ 70.866 752.779 null]
+>> endobj
+12403 0 obj <<
+/D [12468 0 R /XYZ 70.866 727.473 null]
+>> endobj
+4646 0 obj <<
+/D [12468 0 R /XYZ 70.866 691.578 null]
+>> endobj
+12404 0 obj <<
+/D [12468 0 R /XYZ 70.866 585.282 null]
+>> endobj
+4650 0 obj <<
+/D [12468 0 R /XYZ 70.866 549.386 null]
+>> endobj
+8738 0 obj <<
+/D [12468 0 R /XYZ 70.866 331.509 null]
+>> endobj
+4654 0 obj <<
+/D [12468 0 R /XYZ 70.866 313.936 null]
+>> endobj
+12471 0 obj <<
+/D [12468 0 R /XYZ 70.866 140.508 null]
+>> endobj
+12467 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F97 8866 0 R /F45 6502 0 R /F100 8905 0 R /F13 9222 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12509 0 obj <<
+/Length 2872
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\KsÛȾëW *²*š÷coŠM­½µ²­²•*ÛŠ‚$dERˇ³Î¯O÷
+¾“}<WJþrŸ¢”/òêCœÎ걚× Uquñ¯ˆ¥!ZòÌH˜$¼eÇpÄ
+¥$êñC¾½¸ùirµÀ3aRÀZG7!쇋«ISS¨Å8þ¹i¦sÆœ7йĪJݓŘÑÑvž¯¦›b¹Hf®¼’Ûm­ë°©XNïß/ŠMI߯/yc Lf0{Íý,œ"LKøÄ£?´ˆo ÜiDýYÄP U0ži+‰Òfˆ¡œ%ÀR/I€$XÀäöA9…Yäá œÁÖ† ËE’ € ¹"Öêr½™®Æç’Ž6 FŒþÚMƒˆI8ÄA‚‘*M„íem‰0&¦ÁPhzÄ2¢ŒJ ¸V ÈÚ½†ÛCpF˜MÁV$´¦—E„
+—6æÕt‹òD\ _->)+ˆ3z@|:VB{|BI$ùIÞß=Æv[4‘B¥ÀŽ0.CL¨NóI48=2y8¬VàŸ.„]/#´Ifj HP!ä3x`~ßÆÇ`rÞ/VÄC î#Ì)¡ƒ‡PæÙz’Ý<ŽYópó ‡ÃÖ<Ü…íäápÈš‡»ÛE?&îoUQCuáVÕocÁ¶˜ÞaÔ}·×Ñ9>Y<‹Î}(¬'¹l&
+ý¶¢¾}m^ÌâùÀSHm¸ºYiy) Ó`™û©­z¨„iÛ/l!k<2й÷‘°XB±?Èe‘¼”„nTºO÷ÞE‹N9ÏJ0"©ÀGÃíj´á]J-›ÖR(µ¸›åfúÜbG¡D©~v|Ù<­òhÊƵÏv$¬-¢ÄC:"i)‰Ùj•úrüñ5f1A”Ð)°¥&œëû$ATÕP1'î4ZÖR›¦»6¬3°Ûn+ìs 1FÈR[céU1›,Pþ—ßÆÆgË¿Ön…ëÏ$(PÊAy“Âõª”Ä¥©=Ù3æÉ–™V\\\ŸRMWmAÙÆ{e-;‚2žëA$I”A’ ®—?Í^¶q—”¥¸8u,ÒÃ*ÿc›/fm´V`JaûÕ^³§’¶$€[B?- ÝI€0D+X±0Ï”—ù³ÇR0…ë^¨“èƒáæ×ð/ÓÍSÓ)0Á%J?€§Z°LÇWÁ‡§ÃGT¥»Zo¦3 [¿Ç̨ýÑ|`(@é äâ¿c¦Fy›1ñB$
+[ÔÂ
+»zAù  !TnCè°K´É
+8Ù³ y)biJµÊrëüAÃ5’bŒIð·C‡7{Ñ@ZuôÂh`X’Y@8´1‹Öx`N ñ
+تŒ `[펗Ԁ˜¯bwÈáuCì~¤„»ƒ$Æú˜}8dmöÈb¿C)¬L(9Ô2@œn6ÓÙSÞfvå5ï¹”ít÷e
+ˆÒpV
+b¦“
+cý`H(~¸S!äô¥ˆZ˜ãÕ?³V„óé¿—«xÛ„Ä@3ÔÈÄLêOìóÕº¨îÅ»&d߈3€zØY#øî)¡ƒ| ’Ý>äŽY³o³›}Ã1kúíb΋E'ý†£ÖüÛEmãß~'%=5/ýúëïlŒU8½Í7Óâ"hy•<_ÏVÅ˦Ü *oŸòò[/õÅÏuùûò¡|ÝÔÀÇL¶‹M1¯þ²×„àÿº]×Y.ž¿Öïž–ë ÁÑeè[}ŒÃkÞß–÷Ä ?…Ê¥ÆUË)åÏîwm¾BΪ Ñ`ô;¬_¯ú‰Rv¾øqûY=5‹3ÒÒ‹í<¼‹ç­Ê+«~»€_›µ©”·ËÙvž/6Óï¦V¢ÝÔ߯ßw\³çŠpÌ‹0âIù
+P  Ö†°¾^oÕ–<÷ÎÉC]í+{º©I_+PpºJEÎC$äT¸ÍðvÑ -; XAl}£¥¤`éZçX´ZiCçºÉ«Ó|1«=õ®lôïËÆél¹ŽÕU*ó×£‡u2
+(Uý¯'êÃäY¾^×}å$ð¤ØÁPØVwÌÿÀ(9£vOÞ% lÑõ8˜¢MèÿA|ÓÏ
+endstream
+endobj
+12508 0 obj <<
+/Type /Page
+/Contents 12509 0 R
+/Resources 12507 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+/Annots [ 12466 0 R 12472 0 R 12473 0 R 12474 0 R 12475 0 R 12476 0 R 12477 0 R 12478 0 R 12479 0 R 12480 0 R 12481 0 R 12482 0 R 12483 0 R 12484 0 R 12485 0 R 12486 0 R 12487 0 R 12488 0 R 12489 0 R 12490 0 R 12491 0 R 12492 0 R 12493 0 R 12494 0 R 12495 0 R 12496 0 R 12497 0 R 12498 0 R 12499 0 R 12500 0 R 12501 0 R 12502 0 R 12503 0 R 12504 0 R 12505 0 R 12506 0 R ]
+>> endobj
+12466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 738.999 216.827 747.748]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_acdd01f7e6d86939549abcdf8429e3ac6) >>
+>> endobj
+12472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 680.88 181.32 692.836]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597) >>
+>> endobj
+12473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.294 680.88 244.68 692.836]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597a838e3a3a9854c68d0610e8fe42b3555f) >>
+>> endobj
+12474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.673 680.88 312.178 692.836]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597a65c007d94d26b36ce11341c51297e6bd) >>
+>> endobj
+12475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.17 680.88 391.87 692.836]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597a87e7a9df2c586929d4e2d0a21cced0ef) >>
+>> endobj
+12476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 625.6 209.618 636.138]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a213c13aa11ede5c22151baf82582d352) >>
+>> endobj
+12477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 610.662 219.588 621.199]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_ac040e098ab966b8e61c0d7fe7e98354c) >>
+>> endobj
+12478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 595.8 184.602 606.261]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_aac9fe3d733e6335d4f74536bfd18801e) >>
+>> endobj
+12479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 580.785 205.888 591.323]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_aa5f8946f29b261f5251c79082d392dd9) >>
+>> endobj
+12480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 565.847 215.858 576.384]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a80f9de3cbae4ebd4bf81d133d97f8003) >>
+>> endobj
+12481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 510.071 124.681 520.537]
+/Subtype /Link
+/A << /S /GoTo /D (struct_engine) >>
+>> endobj
+12482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.655 510.071 183.217 520.537]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a7141606b9f55a1dc8475003a8d87d1c0) >>
+>> endobj
+12483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 495.133 198.15 505.598]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_acc2ed5250b0b74aced99094f8dad7f74) >>
+>> endobj
+12484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.215 480.271 211.617 490.66]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a1c89676e52abbec9efd482be0528e934) >>
+>> endobj
+12485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 467.103 139.305 475.721]
+/Subtype /Link
+/A << /S /GoTo /D (struct_mic_env_var) >>
+>> endobj
+12486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.805 467.103 193.183 475.721]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a17a0c5020309ddb1e31eacbbdb984022) >>
+>> endobj
+12487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 450.394 186.458 460.855]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_afeba2628f2039035cb5ea79bf2f532ca) >>
+>> endobj
+12488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 435.455 186.606 445.845]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a4cdb3be06fd02cfb860e9d1dd26331bf) >>
+>> endobj
+12489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 422.288 186.36 430.906]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a8e95dee7cbc1279d5b670eee17cdc3d2) >>
+>> endobj
+12490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 407.349 188.09 416.04]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a932cb72e40fedc938116eb09ef9824b0) >>
+>> endobj
+12491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 390.64 165.235 401.029]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a3b556f92407724cecdb435e9d068eb9c) >>
+>> endobj
+12492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.182 375.702 191.879 386.163]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_ab37d5b6803d01f4eb50954c5ce6b13d3) >>
+>> endobj
+12493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 362.534 231.316 371.224]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_afca6e2fcf13da05971ffbb8730916500) >>
+>> endobj
+12494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 345.825 156.493 356.344]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a165329967095d73244ccc962bdecf597) >>
+>> endobj
+12495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.993 345.825 227.218 356.344]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a6defc1b48694ab6252a2436768a8125e) >>
+>> endobj
+12496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 330.936 182.074 341.276]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_af8ac6244511eedb7d1140768f6442e82) >>
+>> endobj
+12497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 315.872 146.523 326.338]
+/Subtype /Link
+/A << /S /GoTo /D (struct_target_image) >>
+>> endobj
+12498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.496 315.872 203.015 326.338]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a68c47cfc2e197cb46ba1c1771112fdfe) >>
+>> endobj
+12499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.708 300.934 207.063 311.529]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a5f7f03a1ed6c0530347245fd3f9d103c) >>
+>> endobj
+12500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.055 300.934 300.204 311.529]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_acdd01f7e6d86939549abcdf8429e3ac6) >>
+>> endobj
+12501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.95 285.995 192.394 296.461]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a1be94b904c4dbcf6bd04e76988fe4458) >>
+>> endobj
+12502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 271.057 166.499 281.522]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a790f817d43c0fd934908f0ef0c00ae3b) >>
+>> endobj
+12503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 256.118 177.465 266.584]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a9f3f89cd790d3a142f7db79ead9c336c) >>
+>> endobj
+12504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 241.18 226.797 251.646]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_a787e660b7b86240bf6cc0f440e942e33) >>
+>> endobj
+12505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.659 226.242 226.797 236.707]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_aed818601c5d5326fe996ecae54e4f7aa) >>
+>> endobj
+12506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.097 159.364 204.658 168.055]
+/Subtype /Link
+/A << /S /GoTo /D (offload__host_8h_source) >>
+>> endobj
+12510 0 obj <<
+/D [12508 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12511 0 obj <<
+/D [12508 0 R /XYZ 70.866 752.984 null]
+>> endobj
+12512 0 obj <<
+/D [12508 0 R /XYZ 70.866 697.208 null]
+>> endobj
+12513 0 obj <<
+/D [12508 0 R /XYZ 70.866 641.433 null]
+>> endobj
+12514 0 obj <<
+/D [12508 0 R /XYZ 70.866 525.903 null]
+>> endobj
+4658 0 obj <<
+/D [12508 0 R /XYZ 70.866 207.321 null]
+>> endobj
+4662 0 obj <<
+/D [12508 0 R /XYZ 70.866 140.444 null]
+>> endobj
+12438 0 obj <<
+/D [12508 0 R /XYZ 70.866 117.482 null]
+>> endobj
+4666 0 obj <<
+/D [12508 0 R /XYZ 70.866 96.598 null]
+>> endobj
+12507 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12546 0 obj <<
+/Length 2323
+/Filter /FlateDecode
+>>
+stream
+xÚµ[ÛrI}×Wô#DŒÊuɺ͛ÖFcOØÖŽ†ÙدԖ™@Ø»þû=Õ PhºæÅ`A婼̬jxq_ðâ—³ŒÏ^]:U8æQÅøKa9sÆÖKfD1¾+> ^¿½øçxt=<—Ö ,ž)—ïÞ꿼¹zýLJÑÇñPH>¸¨þ¿»ú8<Ò8ƒÒ4k®./ß_ Ã·Þ ?=Ïþ:Ø/DAÜ3Ëu…ì¸/nÏ>}æÅ>üµàLyWü·úêc­y¼y(~?û-¡ ‰¯S¤ÃÛ«ßë ²·õ®7û¿]Ž®G_žï©5†sÌI:´%ÒŠiRë]ñmkUάöfÛÂF0Þn¯2’‚É8çƒÑl(øàÛc¹˜¬¦óY½ËñÐðÁ§²±ùüŸÏVõ°ï
+dc^œ üÏùZ|ÙH¬_}ùçj>¹{7›®Örƒòí®_]’Þ’vN% { :‘›M†×Éj¾ˆ$l$ÁHIR2’¾Úwî·ÏíîsÊÂR–Y¯»…B„ç Ó²¤!¨Â›BëçÒBgÀB1É)­½´) ’|Hi™r>†\®& 8œVIÏçÊ3n5œ¡½ä ƒlR|ä-ŽñEoÈÖæ!WôGl<#¶ —ÇÖ0ÏMO@"æ(OôÆ\»bô +úC¶¾ˆ #_ÄÈÚ2'dd³q#O’¬ zËËŒuõš7%v+ášu˜¬êׇ鬩ÒèúÍüKý–<”íßöª+䃺Ú0)]7u£­K©˜áµ$.›šóu¾\±¯l]œ¶* ]2« t…­·j 55ðòÛìv£tÇr÷}¨ø`>M茬äåŽIGG«¼%@3(Øu}Ûl¥ Åv+9Ü5úßÝܧµ+û#
+a™!c†!ôà>X}P¦€ãठø¤ásŠñ—óTš*82@jvÃÄH†ò®ÍÍ¡º2¼udÅY‰ÖO›8¼ŽIJRúĬDžxM…v‘¦ûd%×P-‰·m[••·OOC¥UnB5Фƒc`‡M2^—_B•‹rvÛZë&´î?ê÷£Ù=týùç=eã·…(mÁÀÔCšg©$¨)§O‹ùm¹\篱!@)L&8Å#ãã­±;ëNæ…®ë÷ñB#¬?‚ú#¶¼aÍ ð^ˆðñBȆ"Èo³Ó™¡1¸~Ä DÕÕd HÎÿ=ÄP[â
+Hðº'[ ’V¾ÜÊJ¸ÖS`ÞÎ9#ïa}…x±9´„þÙì¨û0½Y„‰V¬c­NR­Í†ÙÏ°{3ÖxÀꊹ°¢WÎ’UŒœÌ³A’„;zå¬uëœM°¬®cÞˆjHìó]« ï(!‘á`m%HI÷rЇ–IêÀ )/tŒü*â`¶ù{à¿G8VG_I•4¥DÁÒÞfØ„I¥ÛµœÙòÜO t´$žDGJï™À'ý÷¯¸@Pù£=©¤gJ¨È
+W1ò¢¼Ÿ.Wå"l@]*G)£™O'÷‡|F-ŽÎNÓ‰v"øj¿ÅI9ær¸š쎫›³â›”ÉɆ3á¾& “ µe H§à›,Ú:°¥ØÑö® lû}ŠF䀯­`Ääa¯>¥ÁÆ»Z²êEO ®˜V>°àáàÈÇÈËéýlòPÞm4?·¾¹úI]û ‹ûoGrôHFÅÛ_\ÿ2'ؽŠ1.,zôô1ìÅëßþxw=:ÖJ¡3A'Ú7ŠÂ¶<ÎÊ¢¬h›Ö¡`’MAìXa2C b<ÊèãS*7AFgØSÈM¡u¼§ûÔ0KˆAL—05bБ‰1ÛË·g¸h}3à¢ß'¹CçuKH˜r5´n Í^ŽbéƒÕN(„†×h}òJ×õûP‚jÛ߃s’ « ¸Ã4÷2FÞßhC îÏl,“|Ge4!èšó›Ýiév>[6CζG_]
+*|ðvuJ"‰ƒ×ƒëïDƒžj¿³ú<š’Ë×"ÓSš!Õ cšÄûŒi
+m¿19Î\ƒ$2™Ï\Å1ÆB#LÅè]'︦[ïi±uK{øD…‡›ËŽ\¡Â%~ØÚuý>®r4ù£¹¢?nËò·Ù¶@g‹î6´ErCçb å  ÊM˜…8…-L¿C¥T¸ÑÌÁ¤% “,Ð48N9Ø’ §µïaúç|]
+Tƒq攣.AŒœí* } #l-È´…¥/~¡:f@Tj 8yJ؇ëEµb\î@>Nþœ' ÔlsÖ¡¿B!Ž@¿—ÕíÖrD1£î™ë|±£Ô‰÷:HITjªNÏû À½d-ÉX‘~ c[Ož;“qÙ>:g@J¾Ãcš‰¤é(á@Ö@’åþˆ¬éÙ¤Í6âá´éÙæÍ6æãt–Îô(YL‹%"Â|)m@ðÒS÷J¬HôËĽ>Gæൽnêš8‡.ƒ5½¶§_ v°÷1²ÚJ•ð4*jsÈáŠ7Âœ.Sœ‚¨Õ9õçàdµšÜ†&âky—
+[ä©´§D­Ò½¢VY½öÚ É"ßW¦™,’cZ`<ÎÍicš!×Q@"v]U»…ÒèWíÁ§b43Jg€ !©$ŘG=c1eÀ'ÃH˜¿ èÿ¶ãÒî‰zp—EwCLYcÏ&å§ÿNÍCèHf
+endstream
+endobj
+12545 0 obj <<
+/Type /Page
+/Contents 12546 0 R
+/Resources 12544 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+>> endobj
+12547 0 obj <<
+/D [12545 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4670 0 obj <<
+/D [12545 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12421 0 obj <<
+/D [12545 0 R /XYZ 70.866 751.762 null]
+>> endobj
+4674 0 obj <<
+/D [12545 0 R /XYZ 70.866 733.15 null]
+>> endobj
+12516 0 obj <<
+/D [12545 0 R /XYZ 88.314 707.595 null]
+>> endobj
+12517 0 obj <<
+/D [12545 0 R /XYZ 88.314 692.151 null]
+>> endobj
+12423 0 obj <<
+/D [12545 0 R /XYZ 88.314 676.707 null]
+>> endobj
+4678 0 obj <<
+/D [12545 0 R /XYZ 70.866 640.874 null]
+>> endobj
+12521 0 obj <<
+/D [12545 0 R /XYZ 70.866 619.841 null]
+>> endobj
+4682 0 obj <<
+/D [12545 0 R /XYZ 70.866 599.106 null]
+>> endobj
+12522 0 obj <<
+/D [12545 0 R /XYZ 70.866 575.146 null]
+>> endobj
+4686 0 obj <<
+/D [12545 0 R /XYZ 70.866 541.199 null]
+>> endobj
+12520 0 obj <<
+/D [12545 0 R /XYZ 70.866 517.239 null]
+>> endobj
+4690 0 obj <<
+/D [12545 0 R /XYZ 70.866 483.351 null]
+>> endobj
+12518 0 obj <<
+/D [12545 0 R /XYZ 70.866 435.548 null]
+>> endobj
+4694 0 obj <<
+/D [12545 0 R /XYZ 70.866 401.476 null]
+>> endobj
+12519 0 obj <<
+/D [12545 0 R /XYZ 70.866 377.592 null]
+>> endobj
+4698 0 obj <<
+/D [12545 0 R /XYZ 70.866 343.569 null]
+>> endobj
+4702 0 obj <<
+/D [12545 0 R /XYZ 70.866 304.679 null]
+>> endobj
+12541 0 obj <<
+/D [12545 0 R /XYZ 70.866 285.417 null]
+>> endobj
+4706 0 obj <<
+/D [12545 0 R /XYZ 70.866 264.681 null]
+>> endobj
+12542 0 obj <<
+/D [12545 0 R /XYZ 70.866 254.524 null]
+>> endobj
+4710 0 obj <<
+/D [12545 0 R /XYZ 70.866 218.73 null]
+>> endobj
+12540 0 obj <<
+/D [12545 0 R /XYZ 70.866 208.572 null]
+>> endobj
+4714 0 obj <<
+/D [12545 0 R /XYZ 70.866 172.778 null]
+>> endobj
+12537 0 obj <<
+/D [12545 0 R /XYZ 70.866 162.621 null]
+>> endobj
+4718 0 obj <<
+/D [12545 0 R /XYZ 70.866 126.827 null]
+>> endobj
+12539 0 obj <<
+/D [12545 0 R /XYZ 70.866 116.67 null]
+>> endobj
+4722 0 obj <<
+/D [12545 0 R /XYZ 70.866 80.876 null]
+>> endobj
+12538 0 obj <<
+/D [12545 0 R /XYZ 70.866 70.718 null]
+>> endobj
+12544 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12550 0 obj <<
+/Length 2966
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Mw[7ÝûWh)3fI€ŸÙe»MO[O]w6mŠ­8:ã¯Úrg2¿~.Þ“ñ™R$‘çÌ¢±\?ã‚ \€xÖ£ë‘}{ô÷‹£oN#¢JÞóèâÃ(h½…DÊ›ÑÅÕè·qPäÕäØÏNO8›¿~;ùãâû£“‹£? Dé‘NJ§îW#¾^Þýö‡]ágß´âGÿîž¼Av‡›Ñ/G?t0Ö¨3¾;ûåbb
+ÿT
+lˆª<òQ+›ìA®œzM÷”ðrÍÆÉ¡è%$}Ý•X·@ŽðËÄ9ò&W¶ÊÆÔ4…%ä 7ó÷ÈDzŒ|tÌÅ #ì8kj 
+uÔÃ6ê‡È ;¥ƒ²tPƒâÅ+ö”Pâ~I²—DôÕÓ‘û}hmWeÈ›¸Ÿt l Ð$=›ƒîÂýp
+›¬šÈ#Vs¿cNþKEüvöt ½pÞæ‹ûÇW¯¦77÷—¶O’vªUd¸Dr&WñaQbXgÏQ L$Ko)Ǽš.¦³tÜBÎÖfûlq^g"ˆk ?rd aàGKºcRjWý®Ñ§ÅôRÂÁ¿
+©5:ŒèVà
+¥¤D·½
+Ë°};»½ßèÖ†¢Òˆ™õІµ
+Æ°§w È[9Š’8 <`<{´Îƒ¦™p@ÈŒX*Ó¾
+}S¬4ô‚¤ÕàÛ‡RßT™CH¡<‰BŽy5“$ü×ü²Ä?¬Q$®PmY%¦úN¢åóm)ÿùõ¤ÏUé¼Ly„¿úô/’ìª]ûÕôËéߺmé>Ïð Fêõ‘i+‹ª{J(¥ZÞK2~2 ’Iš[ ÉLœ#oJÿ(vbj
+Cl–$20¾­žÍàÈh˜©g3~K¾“»[ ×ÄYjxL_<‹ YzÏŸŠ—ƒÚB7j
+uÔÌþåP#‘„*¬òR Z/©Q÷ùäîK}õjSîGÄ„g[¹O¾ªôgl~/I§å1{x¼¿œ==m=cݪ@öèËZ&u¨mËZœ¸d?O’tæº|x.rB²AÕ¸HŠFNÈ:ò‡ÇÙŸÏØ=ñìO%ÏvVQ<ijÉÔy¶´‚c‹é‘DÑ5óìâý¶Ä÷ÀÛ^)÷•P¾íõ¨ä8Abô;P~
+#²am¦ÁRØx³³¥íɵ@–i1ã6ñ]9É8‡ø2*Fa°òí¤Vb$ÇŠ³ÆtoÔÔëoUÎùwNæµiá3Ö‚li³yçž^O¬ÿ5!7žÎo¦]"¸Éø ›µÉFFÕàö›l$<»ïK[ÅÉF‰
+Ñì6ØØ
+yÓÊ,š»›ƒÍ ¦MÍ ™¸Š)Vw3DŽ_1½]Ú €—ýŒ zv;RÛø¸2–ïý`É÷‹é͆7Îéb˜º÷Íä« ¦4 ú¤í¦tvzëìÇùåÉ]íÿ)¯œ ƒÜì,g€A¢FbÕkŒš,r÷BXŒaå}Ö)¸‡t0L \çk“ãþ%émºyœWf4»ü¶w·KWù öHÞŽªw„Œýÿ¸²’WW ›WV«!¬º+«îþæãô±Ð·0ruvè[Øí} P{é,л´o¿f0ñ'õ½¤°ÞÉ’Cj6”ær!oZ€[¹79øÃtñ±8ðæT CNׄÓlRƒA†ê·‹[¦ÝÀ jfÐ0M nÉ‹Å{
+(õK¢Ò 1+"³C/|«lŒHyê¦V‰Œ§ÉÄh5&iõè>+¯Ø¾e$]2¬CÞ”€÷í¸e$©MS\Ô×ta·ì¥ã(¯¥ÖC&îÞJݶe¥vLì^J­†—y¬xи÷àH_éק„âºÁ™±ð_ÕAÞ[*ÔJVšÝlü¯Öl5ø¿®Ù¶¹ÿõ-”wfyâþüçKJ Å¡¢}þJŸÊ\v!¡•(9~™‘‡Ðÿ¹Y‰¸
+endstream
+endobj
+12549 0 obj <<
+/Type /Page
+/Contents 12550 0 R
+/Resources 12548 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+>> endobj
+12551 0 obj <<
+/D [12549 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4726 0 obj <<
+/D [12549 0 R /XYZ 70.866 751.758 null]
+>> endobj
+12534 0 obj <<
+/D [12549 0 R /XYZ 70.866 741.257 null]
+>> endobj
+4730 0 obj <<
+/D [12549 0 R /XYZ 70.866 703.004 null]
+>> endobj
+12533 0 obj <<
+/D [12549 0 R /XYZ 70.866 666.47 null]
+>> endobj
+4734 0 obj <<
+/D [12549 0 R /XYZ 70.866 631.66 null]
+>> endobj
+12535 0 obj <<
+/D [12549 0 R /XYZ 70.866 593.278 null]
+>> endobj
+4738 0 obj <<
+/D [12549 0 R /XYZ 70.866 556.873 null]
+>> endobj
+12536 0 obj <<
+/D [12549 0 R /XYZ 70.866 520.338 null]
+>> endobj
+4742 0 obj <<
+/D [12549 0 R /XYZ 70.866 483.749 null]
+>> endobj
+12527 0 obj <<
+/D [12549 0 R /XYZ 70.866 459.102 null]
+>> endobj
+4746 0 obj <<
+/D [12549 0 R /XYZ 70.866 422.696 null]
+>> endobj
+12530 0 obj <<
+/D [12549 0 R /XYZ 70.866 398.068 null]
+>> endobj
+4750 0 obj <<
+/D [12549 0 R /XYZ 70.866 363.307 null]
+>> endobj
+12523 0 obj <<
+/D [12549 0 R /XYZ 70.866 336.881 null]
+>> endobj
+4754 0 obj <<
+/D [12549 0 R /XYZ 70.866 300.417 null]
+>> endobj
+12524 0 obj <<
+/D [12549 0 R /XYZ 70.866 251.936 null]
+>> endobj
+4758 0 obj <<
+/D [12549 0 R /XYZ 70.866 215.396 null]
+>> endobj
+12526 0 obj <<
+/D [12549 0 R /XYZ 70.866 203.173 null]
+>> endobj
+4762 0 obj <<
+/D [12549 0 R /XYZ 70.866 168.44 null]
+>> endobj
+12528 0 obj <<
+/D [12549 0 R /XYZ 70.866 141.937 null]
+>> endobj
+4766 0 obj <<
+/D [12549 0 R /XYZ 70.866 105.531 null]
+>> endobj
+12532 0 obj <<
+/D [12549 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12548 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12582 0 obj <<
+/Length 3117
+/Filter /FlateDecode
+>>
+stream
+xÚÝ\ÛrÇ}çWlÙ/@•1žûE•J•,±It(&)—í\J(ƒ
+5!+ãHQiñ§TùÜe~뽟oóõ"¿)µþÍ›)šÀ¢Ú±þ¾i~éÁ‡Kx¼d¦<G”’~Ké06³´0MdˉÑ<D.£$ë$1Ê¥€ÍJéBØÕò·­' ðÏ >üô Uÿ±o"Ñ&@sÜŽpp¾Ò ÖÂ…ÃZtoçq­‰£,²vDµŒ¸DzG0-xȦUnADÆt{.RW)Œ”
+DͨgÅÛlV¥þñ"
+†ä ÉCܘ*Jñ¹”Äð›^UT("=ÓG¨6D_nbåL£otü”r&F•3pZ$(g^«ütåLN$µ#ÊÙP ‡Ë™—Ä©ë]Î Wå,@Žç~YÌl
+Т˜Ùô8%r8\%Y5ç
+ÝekÕ§³¢`†8ç(&8%ÚºP±>¬È‹–‹Š+fø¸\ï¬/ÌoY¦%h è#è›*äp”órßÅÂœŒ
+0o«
+Y‚WªßM‹h‡Ý71Ž„9•,Maö
+RÚ8„ù1PQ?©Ã@²ê4¿^®«7¹:ùjs{»Š[Õ¤²ÈÐOcew¨øæ#XW¨ 3ºa¼,e«}¶»O›øä¡)OƒŠéC9¢ÖüðUÝ\` „ƒ@}0PiRÖ¨1Р:DýSÌ覰tõD¾Ý®7äCD*›-Ž‚‹çþwŸßĵüÉ´»»^­6‹¸zƒ;¦ž#BЮop³i‚K•Ývs™dÔŸŽÕŠc,D“=“Ôg^uqbu½Ûåå1q}0ßî¡,.‚fû̘Áw²Ÿg ÄÉ‹«~á¼}_­ü²xÄçï›OÅVþ?Ë’zŸoA©Ó¢¢t"îö¨Ê˜>.ö½pËË×EÛ¼Ê[ën[¬Z9·Ÿ{ð7׋ò,"™Í¾¾)'—üˆþ?]Ä&?Œ˜„`Å5‚1=:$`Èö’˜®TþÇüòÝ«‹·¬­v1:q.£:qŽÊ€ø¯“ßÈ°”…:1B=t¨Ò¬8·)æ¥1“Äâp­Ö"…Å!IÖ§0WÏ¿{=o†UŽµ bÎß¾Œ¼ŽN
+7ûc,i[nÞæïѧ·öŸìupw`ò®0UØóÏ×ûæùPcàÞYA2a†pTþ 8–°FñeÖ–'Â#v „Ž„…$©\ÿ„\'l¹_ÂŽÇ®¶‰}4aGÃ>$löÀ¬Ðx4…‡ýË Ú¶<ÜÅÊil
+dÍÁ6D>%^ÁP§p„ƒ.!C mÍò‰ÂøS9†!Jè`H2õ M†\3D¹CŒÇ®¢‰}{¿ßƶv ±)ÖëS »Õ¿Ò"l
+`!0|ÚùôD=‡™NJTM AºL•š(Ïñ‹Ôr°&—£jù@ ™
+It@¢Ž®µÜÈÓ×€}üº.ê³&:þ—5&´Cu»¡k¬ŽÄPñR.—Ãc¨x¿«Wü¸â,Îß9Uò4¦÷×{Ì` ±øQ„ÚR’}ˆ‘¥@6ŠpÁBä>4Ì›þ‡±_ˆÀ©vTå& ƒ hÈ(>·fƒnׯâý®?BYFç!ÄL¸ê“¿8•Ã[½ÁÉÏYq+tDò”Бü~óWèþÉ?¹Nþ&r,`¾L²w8¯>4(2 4®xyWŽ;½B Ô¥ o™c ³(t¾í ìXñÊ|
+§<L
+endstream
+endobj
+12581 0 obj <<
+/Type /Page
+/Contents 12582 0 R
+/Resources 12580 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+/Annots [ 12552 0 R 12553 0 R 12554 0 R 12555 0 R 12556 0 R 12557 0 R 12558 0 R 12559 0 R 12560 0 R 12561 0 R 12562 0 R 12563 0 R 12564 0 R 12565 0 R 12566 0 R 12567 0 R 12568 0 R 12569 0 R 12570 0 R 12571 0 R 12572 0 R 12573 0 R 12574 0 R 12575 0 R 12576 0 R 12577 0 R ]
+>> endobj
+12552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 388.904 170.732 399.293]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper) >>
+>> endobj
+12553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 376.199 159.246 386.588]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table) >>
+>> endobj
+12554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 330.025 197.666 338.773]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a59fe0b5f121b2308f72cade183d58023) >>
+>> endobj
+12555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 315.598 244.47 326.068]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a983b1736644423e7b21a3d21c1e468ff) >>
+>> endobj
+12556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.814 267.604 204.734 278.065]
+/Subtype /Link
+/A << /S /GoTo /D (struct_myo_table) >>
+>> endobj
+12557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.467 267.604 269.339 278.065]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a51d1acb51242ccbad203f0f6434f134a) >>
+>> endobj
+12558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 219.708 188 230.12]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_ac3a4df498282be091915144efc1cb082) >>
+>> endobj
+12559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 207.003 188 217.415]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a368161defa1a99d14a7f66050ad27e38) >>
+>> endobj
+12560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 194.173 278.371 204.769]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a89b34b3056f350aa79d8f85a0e749888) >>
+>> endobj
+12561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.857 194.173 355.121 204.769]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 181.468 293.057 192.006]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_aa6f3f4cdcf5a754c69b6d7473664c6a2) >>
+>> endobj
+12563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [296.543 181.468 352.862 192.006]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry) >>
+>> endobj
+12564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 168.763 263.917 179.301]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) >>
+>> endobj
+12565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.403 168.763 327.703 179.301]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 156.135 262.312 166.596]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a96cb2dbdef3b2ba3fa9d402a14efacea) >>
+>> endobj
+12567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 143.43 240.372 153.891]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a3f5495a892486c48e53a49ee947743a7) >>
+>> endobj
+12568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 130.725 226.752 141.186]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a7a894bca119a6823881b6601fd13cb46) >>
+>> endobj
+12569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 118.021 204.812 128.482]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_addcedc3786e8994079e2030e35a547ce) >>
+>> endobj
+12570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 105.316 219.794 115.835]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_ac62bb1c59fd607d84a065fe323ddc477) >>
+>> endobj
+12571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.28 105.316 296.545 115.835]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 92.611 205.34 103.072]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_ab2423383cb8d728498a98d4f2ee4b2a5) >>
+>> endobj
+12573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.826 92.611 269.126 103.072]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.452 79.83 227.701 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a9370582eeddb7a7bc4a24f5efc1da9e9) >>
+>> endobj
+12575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.15 79.83 287.469 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry) >>
+>> endobj
+12576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.679 79.83 404.944 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.106 79.83 525.406 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12583 0 obj <<
+/D [12581 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4770 0 obj <<
+/D [12581 0 R /XYZ 70.866 752.14 null]
+>> endobj
+12531 0 obj <<
+/D [12581 0 R /XYZ 70.866 728.122 null]
+>> endobj
+4774 0 obj <<
+/D [12581 0 R /XYZ 70.866 694.232 null]
+>> endobj
+12529 0 obj <<
+/D [12581 0 R /XYZ 70.866 670.214 null]
+>> endobj
+4778 0 obj <<
+/D [12581 0 R /XYZ 70.866 638.046 null]
+>> endobj
+12525 0 obj <<
+/D [12581 0 R /XYZ 70.866 612.306 null]
+>> endobj
+4782 0 obj <<
+/D [12581 0 R /XYZ 70.866 578.416 null]
+>> endobj
+8739 0 obj <<
+/D [12581 0 R /XYZ 70.866 542.569 null]
+>> endobj
+4786 0 obj <<
+/D [12581 0 R /XYZ 70.866 526.388 null]
+>> endobj
+12584 0 obj <<
+/D [12581 0 R /XYZ 70.866 403.575 null]
+>> endobj
+12585 0 obj <<
+/D [12581 0 R /XYZ 70.866 343.016 null]
+>> endobj
+12586 0 obj <<
+/D [12581 0 R /XYZ 70.866 280.209 null]
+>> endobj
+12587 0 obj <<
+/D [12581 0 R /XYZ 70.866 234.421 null]
+>> endobj
+12580 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12620 0 obj <<
+/Length 3929
+/Filter /FlateDecode
+>>
+stream
+xÚí]ms·þî_Á™~!g"X¼{ÚÎ8Ž”:µ­TQÓÉÄù@S”ÂF"U’nêþúîÞ u8âx<žL&ý"ËÒq`±/Ï.€Ýøè«g_\?ûüÂÉ‘cÞ9º¾YÎœ1#ë1º¾ý0¶ ,›œ€ñåÅÅëË ðñ‹/'?^ýìüúÙ¿ž ÅGb$¤gÜuøïìáÙ?òÑ þîëgÒ»Ñ/Å“#”íñ›ûÑ·ÏþƒP‚YŒáÍ÷§Ç—P#˜w"ªQÌXÀþåòÛë‰Àù²—ß|39ëƯ^Ÿ—ß]_œ_¿}‰ÿuÖûñË¿¼øæúüªüe­±§Ç¿¼|ù÷7çoKy/Š¯×¯.ßîO©^ç˜uhFJK¦•ÜMŠWËʛ˫tc’Î2£åÈ¢Öx=Éw
+ØŸ!ê•y%Â)®nßq.WÓ›ˆ)‡âu`€N‡À¡ÇÉcV‹å¢­f²‹w\óZÕø½Ÿ93’) £3!™ìY°År{ÔZqTµ…‘U–áÄOY+Á”÷CDT&®dõ1k%˜Q*°RLJ7ÖêÕæÅDñÒ¦‹ûé{úéý¼kùHñŶÓõÝ|»?p@<@ò¸ˆÖ°—ÁÇÞÏ×ëÚ3åìQæs’¿K š*Å߇ 8àï(H©þž \û{¸aC‹«ùÃj;uýÓ‡åÏ/§÷÷}ÎO¿ÿü—×#†¢ÂA,ãˆÊ«•ÃI•O#Q˜¡~fKpŸ•æx@²ÒÌ€?B°¨ŸAÓ®Äöš»´8lçÒu,­gÖºPÇ 0{ Ѓ ¾¥0ÌIh«§×+
+`™–ŸŽ‡ER†0Mr€¦“q«(àöEédÐ*H ÝÎÅ1⚥¢Ÿ4!3¨ ‰Áx¦‘8ç7ÊÜÇ4ÉZå~r €x¹æ< ÂPä«)bA1¿5ñ™á£ŽÙ4†++BÐÙâþçx’âÚdÀÔ†YeBÌÛ‰ÄÊpkcb¾°9ô‹‘­(„•Ë‹œ¤·éˆmÕØ1,À_’Í–‰ÚOjÜè†ñˆ¯9Å—Cœm¶z$ÅŒ„/˜Ñ´
+0£_º$ª
+õ‘3Ž¡Ȩ›³;ä‹tÊîNz@ÃDEnœÍÖÐa¥Øâ¢Úå°(pP¼ð"Pò62pÝÔB¯š:Æ-ò/3Œ[RÐp²=î3'Õ¸«ÿŠâ]‹5Èì‘Ó¡,cà U!ñd§KˆT…$™IRJ>åL·K‘<e@¥ë¥J‡¨ˆÞÕ#s`Z"n!d÷gGGë³À::ZßRpô¶§Ë"$Ñl¡D¹£ K)ýX‡¥T2åž©“ŽëWÉtàç;“)Êæ¡ù#’i2ô.™¶Á$ÓtÐ:™6Aû“i:nL›¸FýÞ’iôäoL“•¼K¦M%údš<î]2 Ç= ™ºÓ“)íxÒ qNO¦C%t'Óâ˜jÝéI¦P«d L¦0Ëd@ö&Ó °U2 p£†ªdšY'Ó
+
+èfq(HhKÝѸ&jK­y\´ŸÈ¥ãÖD®‰-Gj&—Y3¹&äÿ©Üo†Êb
+endstream
+endobj
+12619 0 obj <<
+/Type /Page
+/Contents 12620 0 R
+/Resources 12618 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+/Annots [ 12578 0 R 12579 0 R 12603 0 R 12604 0 R 12605 0 R 12606 0 R 12607 0 R 12608 0 R 12609 0 R 12610 0 R 12611 0 R 12612 0 R 12613 0 R 12614 0 R 12615 0 R 12616 0 R 12617 0 R ]
+>> endobj
+12578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 758.146 183.15 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a4e4afc20c795439903cb2e9cbb3d6990) >>
+>> endobj
+12579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 744.76 204.543 755.297]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a06e1994d6ed33c26b6d2745dface91c0) >>
+>> endobj
+12603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 731.45 244.936 742.045]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a13114ba99d7c4381414ebf3e824f76d0) >>
+>> endobj
+12604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 718.265 214.859 728.735]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a406c8f3cd7e5e316c35e671943ec90db) >>
+>> endobj
+12605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.955 196.931 715.425]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a1345f47c36719db8c63c15ee8623fbff) >>
+>> endobj
+12606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 691.52 246.994 702.115]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_ab1c955594b8b63071953fab5b0e9c20d) >>
+>> endobj
+12607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 678.21 229.065 688.805]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a740332c114b8006832a6e4a40490e017) >>
+>> endobj
+12608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.447 664.9 211.28 675.437]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a7f4b11c3b93531cc6efc8a65d661c6f3) >>
+>> endobj
+12609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.447 639.635 211.28 650.172]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_acdb6a273f12c550bf072ae3a966a5e7e) >>
+>> endobj
+12610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 578.207 203.978 588.596]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a27c5d63cc4b1f2a2534a6696adadd057) >>
+>> endobj
+12611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 564.897 171.233 575.286]
+/Subtype /Link
+/A << /S /GoTo /D (class_myo_wrapper) >>
+>> endobj
+12612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.733 564.897 225.874 575.286]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_accb5e86eb589747554af8ba3d839cba0) >>
+>> endobj
+12613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 551.587 172.067 561.976]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a51d1acb51242ccbad203f0f6434f134a) >>
+>> endobj
+12614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.567 551.587 234.311 561.976]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a6a5266f492158b55b91362883baa82f2) >>
+>> endobj
+12615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 538.277 149.966 548.666]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+12616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.466 538.277 217.015 548.666]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_a01d2df97a66619162769b3ef15d9a4e2) >>
+>> endobj
+12617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 524.967 189.677 535.428]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8cpp_afb24ef6c12f1847affe4d30d432a2fa2) >>
+>> endobj
+12621 0 obj <<
+/D [12619 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12622 0 obj <<
+/D [12619 0 R /XYZ 70.866 593.149 null]
+>> endobj
+4790 0 obj <<
+/D [12619 0 R /XYZ 70.866 509.879 null]
+>> endobj
+12589 0 obj <<
+/D [12619 0 R /XYZ 70.866 490.36 null]
+>> endobj
+4794 0 obj <<
+/D [12619 0 R /XYZ 70.866 469.243 null]
+>> endobj
+12588 0 obj <<
+/D [12619 0 R /XYZ 70.866 432.912 null]
+>> endobj
+4798 0 obj <<
+/D [12619 0 R /XYZ 70.866 399.319 null]
+>> endobj
+4802 0 obj <<
+/D [12619 0 R /XYZ 70.866 357.213 null]
+>> endobj
+12590 0 obj <<
+/D [12619 0 R /XYZ 70.866 335.537 null]
+>> endobj
+4806 0 obj <<
+/D [12619 0 R /XYZ 70.866 316.577 null]
+>> endobj
+4810 0 obj <<
+/D [12619 0 R /XYZ 70.866 288.327 null]
+>> endobj
+12591 0 obj <<
+/D [12619 0 R /XYZ 70.866 268.717 null]
+>> endobj
+4814 0 obj <<
+/D [12619 0 R /XYZ 70.866 247.692 null]
+>> endobj
+12592 0 obj <<
+/D [12619 0 R /XYZ 70.866 235.526 null]
+>> endobj
+4818 0 obj <<
+/D [12619 0 R /XYZ 70.866 200.136 null]
+>> endobj
+12623 0 obj <<
+/D [12619 0 R /XYZ 70.866 187.97 null]
+>> endobj
+4822 0 obj <<
+/D [12619 0 R /XYZ 70.866 140.566 null]
+>> endobj
+12624 0 obj <<
+/D [12619 0 R /XYZ 70.866 128.459 null]
+>> endobj
+4826 0 obj <<
+/D [12619 0 R /XYZ 70.866 81.055 null]
+>> endobj
+12595 0 obj <<
+/D [12619 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12618 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F11 6621 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12639 0 obj <<
+/Length 2863
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\Ms7½ëWð(V™ÐÏ£cK§Ë+k[Ž´LÙ¬P¢W¢7•¿Ýó! Èr@@•½X*y¦Ð@¿×èé9ù:‘“œü|uòӹljÁZœ\ÝLœÞÚ‰ ¬š\}™|<}õËË÷Wg—Ó8êÄtfNÏß¼=«ÿòúâÕ¿~;{w5U O_Vÿ^½¹x7y]í-çço/¦|Ñë駫_OήNþs¢hr¢&è´ð+`/Ãäúöäã'9ùBÿùëD
+ ~òguéí„Fè—ÕäÃÉ?{f€Î £1šÂoÿžzszÑœpZ€ÕR
+:‚ýåâCíñêýûÚ[O~»<;?»<{÷êlwTí"x/<è}ƒÒ«É¶ã’Ý…5} k•íø6óÍòºÎ§(O×Ë/»£Qʉàtu+ØÑ.ê
+[b¶Á
+ÜBÜÌ?O•<]-vaö‡+áe
+¡m/ß/¾.6‹ûz—þ.œÎŒ±§çä‚«©—§íÀÎîÈ'3ÅKBCüé\éI Ó4"ž’¤P
+šÀ+£¼cê«htÚ=^³Ø²ÕŠÜ“9£s® ª„í5ë`ûT_§MÇØ %íSÝLÞ×7¼^Ð(án¹Y®ïêÉÏ7õÏÕònQÿfŒ©Yß´þ‘°Z´ †ÐýÄi%¼Ã´5‹ÆäXkjK–,5‘¡ G†ì‹
+
+…~ªnkU rÑ£ È
+BÜ}ÔÊEÀÈ
+â]¼rw\Týqû¹>fm;‘2ugvËŸ[eMC\Ž(-XôY
+AÙx˜¯lIy?^!
+@×
+!ï(ÄîÁÓ «uLVÍ6‹Çéë–H¤üGóX‡v$ÕO¼¿‡¦$m!¶CyŒèº£RAçãV‰¢Ç¸›®=æвɡë[dÕÂ윧¸8Â@q„ö¨9E° ùdOépüêCñ ÒVO“ãׄ¼2D-,–¨ ²%n ¿ùÐMüv‘Ÿ«8ˆ
+d)lɨ„¾¾Ðu–!U‡r†“ÚtÆ„ X ŸGuöÑÒ‘ò¥ZèÑn.ºÚš1}\ …ÈUbä­JTßJËê%²||~(Ê™h<sZ½'ßE7‹t¤8~åÀ"éA ÿ?”Ûöß¾ø$bWbÏ@àHwƒ+w ñåEÑÆ[`l\´áVðhlÃ^ѼŸ‚*€¬y?y#5&j’` ¾,’IcØùjùõ®×£0tc\oŒqoîûÂÇT™B‰à­†ÃVðÎjrÖFVÖgŠ»¼ÍÁ- $A+n™þ¨>¦4‰BÊÚÒã£ú¡-ÀÅÛ C XD:œ‡vp (b éu \[Ÿ #ÜÛùjµ¾ÞÇ¡ä$åJ¸›3o·Ü½g¡@Jò
+ £!Øq ÍDÍ'¾°” [ÜrxsÃOT´î`
+ éÌ/¡Žõ;jÃyR`í„7㼎ÎT¯@ut,ò~ß6ï=N¡tU‚“ÑB
+ ?€ [Nxþnž
+° eY£R_g5$æ6
+¬°®
+€r˜ŒQùðаGçWcM
+K6$¹3ÿX|¨Š?¸¦B:UÙ÷iÇß”2%¾tTHmü‡Ž²›ïupw¨êñÃo}ß‘#-÷ò¹zŸ™n‡e`Á²t¥°í (ëÚ†þ¡jÉ#
+endstream
+endobj
+12638 0 obj <<
+/Type /Page
+/Contents 12639 0 R
+/Resources 12637 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12515 0 R
+>> endobj
+12640 0 obj <<
+/D [12638 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4830 0 obj <<
+/D [12638 0 R /XYZ 70.866 751.888 null]
+>> endobj
+12594 0 obj <<
+/D [12638 0 R /XYZ 70.866 727.518 null]
+>> endobj
+4834 0 obj <<
+/D [12638 0 R /XYZ 70.866 691.974 null]
+>> endobj
+12593 0 obj <<
+/D [12638 0 R /XYZ 70.866 667.604 null]
+>> endobj
+4838 0 obj <<
+/D [12638 0 R /XYZ 70.866 632.06 null]
+>> endobj
+12625 0 obj <<
+/D [12638 0 R /XYZ 70.866 607.69 null]
+>> endobj
+4842 0 obj <<
+/D [12638 0 R /XYZ 70.866 572.204 null]
+>> endobj
+12599 0 obj <<
+/D [12638 0 R /XYZ 70.866 547.775 null]
+>> endobj
+4846 0 obj <<
+/D [12638 0 R /XYZ 70.866 512.289 null]
+>> endobj
+12598 0 obj <<
+/D [12638 0 R /XYZ 70.866 487.937 null]
+>> endobj
+4850 0 obj <<
+/D [12638 0 R /XYZ 70.866 452.375 null]
+>> endobj
+12627 0 obj <<
+/D [12638 0 R /XYZ 70.866 428.023 null]
+>> endobj
+4854 0 obj <<
+/D [12638 0 R /XYZ 70.866 392.402 null]
+>> endobj
+12626 0 obj <<
+/D [12638 0 R /XYZ 70.866 380.269 null]
+>> endobj
+4858 0 obj <<
+/D [12638 0 R /XYZ 70.866 344.648 null]
+>> endobj
+12597 0 obj <<
+/D [12638 0 R /XYZ 70.866 320.355 null]
+>> endobj
+4862 0 obj <<
+/D [12638 0 R /XYZ 70.866 284.792 null]
+>> endobj
+12596 0 obj <<
+/D [12638 0 R /XYZ 70.866 248.409 null]
+>> endobj
+4866 0 obj <<
+/D [12638 0 R /XYZ 70.866 212.923 null]
+>> endobj
+12602 0 obj <<
+/D [12638 0 R /XYZ 70.866 188.571 null]
+>> endobj
+4870 0 obj <<
+/D [12638 0 R /XYZ 70.866 141.053 null]
+>> endobj
+12631 0 obj <<
+/D [12638 0 R /XYZ 70.866 116.701 null]
+>> endobj
+4874 0 obj <<
+/D [12638 0 R /XYZ 70.866 81.081 null]
+>> endobj
+12630 0 obj <<
+/D [12638 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12637 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12645 0 obj <<
+/Length 2591
+/Filter /FlateDecode
+>>
+stream
+xÚ½\ÛrÇ}çW œ ÊÏýR•¤J‘ÈH.It(&©”¬ˆ\J(ƒ
+K.§Õ…?S*¶Ýt†P)K“øР°®9GŒ¡k·s9½‰%#Z‰t\&$²üðuº*b¨È î³,Ukâ Q§óÙ—EÖá“é œ2¢\ˆy7Ï—×UjþLœ*¥Ç³ÿùtÛ¾pe <ƒ7šÃyèκÊBXyºP ¨“ðÉ3ÿóûêòÐ.Ê—Šíë·V"¨%˜ô•æW`®¤Üí˜ÿŠ8ÆŸŠN±ê"©Za¿ü^2¼¡„²óUzá‹Ùz¶\T[:]W¯óÙ¢¨Þic«7ËÛf×)ŸÍïv§ðKƒAÊ\ ‹Và:Gصª QUgá„©ñ£o(Ë2"by`´/Åܯˇ5¹¾¿Ÿ5&‘½8eÊ z;” 
+·³C†
+Ë¢j‘ÇÃ5–’i 2Eä˜o¼!¦†H¬däZaµŸMa¡Z¤°ZØ£°` ãw/…•Ú(¬è…•ŽÙ(¬æa…• »QX-ؽ
++±QX-ÄãÖÑé¹QXé‹iÖáôÜ(¬tÐFaLÏÂJÆÜ(¬>é¹QXé°ÂjÁîSX逵ÂÚ—œ=–«{äzºžÕMýór9¯ÞÝÖÇ]Y#
++ðê ÎP°„ùc@¤C×uÐF~®CVî‹Âée<ÔÂneì-éÊ8r­Œä^Ê8»QÆö!eœ¶VÆleœ¹VÆò1Êøøœm”qúbeÜ7geœ¹VÆ»rv˜2¶­†YFþ@¢¨`k¦7‘ª²$/f±ççYyS2$—„iBN}à~ó›ÎæmÍÙiy}ÅŠ>-8qDERËãhÚæhyÞ’"ý2@W-/@~®Ã Ï¥ZJËhaO˃%J´¼tä¦åµ‘[›|>[ÌžÈ8ºã"úø –[­r,… F1½ƒè¿ç)$²f刲+ˆmÞßÑ`“¥DSpÌí2G4±«Ä
+Ö;šBù§ítd ôÎè½ÑŒà[Œ
+ÅÔ…þQüŽ
+endstream
+endobj
+12644 0 obj <<
+/Type /Page
+/Contents 12645 0 R
+/Resources 12643 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+>> endobj
+12646 0 obj <<
+/D [12644 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4878 0 obj <<
+/D [12644 0 R /XYZ 70.866 751.586 null]
+>> endobj
+12629 0 obj <<
+/D [12644 0 R /XYZ 70.866 739.132 null]
+>> endobj
+4882 0 obj <<
+/D [12644 0 R /XYZ 70.866 701.435 null]
+>> endobj
+12628 0 obj <<
+/D [12644 0 R /XYZ 70.866 676.441 null]
+>> endobj
+4886 0 obj <<
+/D [12644 0 R /XYZ 70.866 638.745 null]
+>> endobj
+12601 0 obj <<
+/D [12644 0 R /XYZ 70.866 613.751 null]
+>> endobj
+4890 0 obj <<
+/D [12644 0 R /XYZ 70.866 576.055 null]
+>> endobj
+12600 0 obj <<
+/D [12644 0 R /XYZ 70.866 550.984 null]
+>> endobj
+4894 0 obj <<
+/D [12644 0 R /XYZ 70.866 513.364 null]
+>> endobj
+4898 0 obj <<
+/D [12644 0 R /XYZ 70.866 470.577 null]
+>> endobj
+12634 0 obj <<
+/D [12644 0 R /XYZ 70.866 450.462 null]
+>> endobj
+4902 0 obj <<
+/D [12644 0 R /XYZ 70.866 428.671 null]
+>> endobj
+12635 0 obj <<
+/D [12644 0 R /XYZ 70.866 403.601 null]
+>> endobj
+4906 0 obj <<
+/D [12644 0 R /XYZ 70.866 365.981 null]
+>> endobj
+12636 0 obj <<
+/D [12644 0 R /XYZ 70.866 353.468 null]
+>> endobj
+4910 0 obj <<
+/D [12644 0 R /XYZ 70.866 315.772 null]
+>> endobj
+12632 0 obj <<
+/D [12644 0 R /XYZ 70.866 290.701 null]
+>> endobj
+4914 0 obj <<
+/D [12644 0 R /XYZ 70.866 253.081 null]
+>> endobj
+12633 0 obj <<
+/D [12644 0 R /XYZ 70.866 228.087 null]
+>> endobj
+4918 0 obj <<
+/D [12644 0 R /XYZ 70.866 190.391 null]
+>> endobj
+8740 0 obj <<
+/D [12644 0 R /XYZ 70.866 177.879 null]
+>> endobj
+4922 0 obj <<
+/D [12644 0 R /XYZ 70.866 158.989 null]
+>> endobj
+12643 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12662 0 obj <<
+/Length 2067
+/Filter /FlateDecode
+>>
+stream
+xÚ½›]oÛ6†ïó+ìÆf–<ü¾LS{MÑ&ã Ú^x‰ÓÈG—¸úïw(‰iK–2¹iŠÄâC¾çå!)ÓâkA‹ß^/^Í / ±JñbqYhJŒR…¶@+ŧÑÑÛËé|<mFšŒ'
+`4;~?­~óæôèӓŘ–ÿ.ŽOOÆFçø
+·«ý#)óª)§NºT…Òç\ ÓvÜiÍ Hlˆ£ˆ´O©†tbV`<Ò*b)™goçÓ†˜½9°À5v »8|ý¾!OA)"xŽø‚²„Úìô¨4Ò]«DÏ’Ìfàrô, v‹»8œ/¶åèt†2äÃÏRãgß–÷«‹8ƘvdÌ(-?·0qÏ¢¦ë$æ/#|i‰±"ƒð±!eEá§#½ðCf§ð“±á‡Ø.á§S½ð£Áv
+?™»~Èž¼yfÙÃËÈ^H¢e=6$úÈ>ée2;eŸŒÝÈ>ÄŸ/ Ràc&Tj¢¤‰¡m¹†u±¢,ëb°l+­¹˜Fdàr,’¸[Üþ‹Ìn¡¶?ã„(;ü¢ gX‡› ‡ qaûd\:Òg\Èì̸dì&ãBlGÆ¥C}ƅЮŒK§úŒ‹"Ü™qÉÜMÆ…ÜÞ«[R¾½Ð
+Ç40ÇŽbº×Ž&éó-dÎ>.æ ÄÝ¡‘
+àN †¶ _Fæ JYîn#j«ðÁ※ \kpVõ·ÏR³{$±_ôŒ¢Gˆ—]d(Jõ“.zlˆÒ^»™t¤}Èì}2t#úÚ%útª}Hí}:׋>äöpû>’ß9øÀÅ%-:ùZŒýü¾ºX]f;ûZWíU‡¥u¯ªêϱÆ>»óÂéíÖq]Kj5mÛvžpÔ7ûq{¾¾º»Í6ÚÇ q|-È“=ÇU«‰pd¶€Šabp 郳´j‰×§Êw—èvünyÑà+ÂŽeX°d„
+oœ~+¥ÌW_¯Ö«-}?즄}¦’¶ª§ñ”¸E7P‹ýƒR6 «\£ÝªyLjTùÂM$øÏ\!ªéÌCb„e†qjˆ´2
+Ù:Lý_÷%‘–DQ0h¨é æ?óP²®k¸%XÝfˆ†@(À“£Ñx‡Ñ#.,Ê'Œ+eÿ˜\"±!¥Ð À%‚ÁõD&<¢aY^µÄ}Ç6!Á4aÛEînpåìU 38‰Sà ¡qûbØS N²Á-´œ¨Zbú9œK²t²s8#cr`q3ô‹Æ%ýÌGÛOÚ΢f(.
+ÙÏíO ëq¦rø“»¢`º?¥3½?…ÌNJÆnü)ĶY…ÀEFç€
+ëöØñP[·Wî{øx¬ÅÉ<æî)c[ l´~B #’,Â]s[´¦t‹p-i,"»¶ˆˆýÌÁ”   ƒE¸–¨‚‘Y[DÄ첈t¬·ˆ»ß"2@+‹ˆ‡Úe°µEÄÜ}µDšI ©#xšI‘Ñ9LBpbŒbélo!{Û$¢×6.¼ïP^ A}5¼í1ì*¨ž³7;dðf6½¬_ë`î&5z}#Lð‘]­Ðá+ K;ªÓî[u9Nêê¯éõ—H:¹VHH²¹^lúŠ¢ÔÄÀ/(VÆ!ƒûp°8SØÖ¹Êã™ÔÛèÿ•nÕ¡
+endstream
+endobj
+12661 0 obj <<
+/Type /Page
+/Contents 12662 0 R
+/Resources 12660 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+/Annots [ 12641 0 R 12642 0 R 12648 0 R 12649 0 R 12650 0 R 12651 0 R 12652 0 R 12653 0 R 12654 0 R 12655 0 R 12656 0 R 12657 0 R 12658 0 R 12659 0 R ]
+>> endobj
+12641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 737.971 179.626 748.361]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 723.799 175.644 734.188]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry) >>
+>> endobj
+12648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 670.952 342.596 681.471]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a30cb1348ce058ada9e8def60bd240efa) >>
+>> endobj
+12649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 656.779 332.133 667.299]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_acfd3ac145082bb31fff351c380950c52) >>
+>> endobj
+12650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 642.607 362.761 653.126]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a4444442a12f50ec8ed413951452d379b) >>
+>> endobj
+12651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 628.434 352.298 638.954]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ad5366255c367110f4985768dcbee3114) >>
+>> endobj
+12652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 614.262 328.645 624.781]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a7a3cc98a09c45a570075dec9b1ca4457) >>
+>> endobj
+12653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 600.089 318.181 610.608]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a11fb6f6f8272d30895d4a4ace25a365a) >>
+>> endobj
+12654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.346 547.242 284.611 557.761]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.452 494.319 227.701 504.914]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a9370582eeddb7a7bc4a24f5efc1da9e9) >>
+>> endobj
+12656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.15 494.319 287.469 504.914]
+/Subtype /Link
+/A << /S /GoTo /D (struct_init_table_entry) >>
+>> endobj
+12657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.679 494.319 404.944 504.914]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.106 494.319 525.406 504.914]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 468.267 183.15 478.728]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_a4e4afc20c795439903cb2e9cbb3d6990) >>
+>> endobj
+12663 0 obj <<
+/D [12661 0 R /XYZ 70.866 789.024 null]
+>> endobj
+12664 0 obj <<
+/D [12661 0 R /XYZ 70.866 753.253 null]
+>> endobj
+12665 0 obj <<
+/D [12661 0 R /XYZ 70.866 686.325 null]
+>> endobj
+12666 0 obj <<
+/D [12661 0 R /XYZ 70.866 560.458 null]
+>> endobj
+12667 0 obj <<
+/D [12661 0 R /XYZ 70.866 509.768 null]
+>> endobj
+4926 0 obj <<
+/D [12661 0 R /XYZ 70.866 451.149 null]
+>> endobj
+12668 0 obj <<
+/D [12661 0 R /XYZ 70.866 430.702 null]
+>> endobj
+4930 0 obj <<
+/D [12661 0 R /XYZ 70.866 408.839 null]
+>> endobj
+12669 0 obj <<
+/D [12661 0 R /XYZ 70.866 396.242 null]
+>> endobj
+4934 0 obj <<
+/D [12661 0 R /XYZ 70.866 357.984 null]
+>> endobj
+12670 0 obj <<
+/D [12661 0 R /XYZ 70.866 345.387 null]
+>> endobj
+4938 0 obj <<
+/D [12661 0 R /XYZ 70.866 307.13 null]
+>> endobj
+12671 0 obj <<
+/D [12661 0 R /XYZ 70.866 294.533 null]
+>> endobj
+4942 0 obj <<
+/D [12661 0 R /XYZ 70.866 256.275 null]
+>> endobj
+12672 0 obj <<
+/D [12661 0 R /XYZ 70.866 243.678 null]
+>> endobj
+4946 0 obj <<
+/D [12661 0 R /XYZ 70.866 205.421 null]
+>> endobj
+12673 0 obj <<
+/D [12661 0 R /XYZ 70.866 192.824 null]
+>> endobj
+4950 0 obj <<
+/D [12661 0 R /XYZ 70.866 154.566 null]
+>> endobj
+4954 0 obj <<
+/D [12661 0 R /XYZ 70.866 123.855 null]
+>> endobj
+9735 0 obj <<
+/D [12661 0 R /XYZ 70.866 101.342 null]
+>> endobj
+4958 0 obj <<
+/D [12661 0 R /XYZ 70.866 81.545 null]
+>> endobj
+12660 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12699 0 obj <<
+/Length 3496
+/Filter /FlateDecode
+>>
+stream
+xÚå]Ms#·½ëWL%²Ê„Æ÷ÑYKκl¯#+‡”íÍ¥´,SÒš¢âr~}ºçƒ 1ò]ÉeÅÕrúÝè÷Ð
+«€ gGG©e@ã(œü|ã—{‹ÃíШqU«oà\>.#ÍèÅe\!ÑãBä{ò×osгǫÍæòù\óùBkóâÎ…“Š~/ª(Ý2¼0œ˜:ª2üù»›—H.÷ÕÏíæa]}RVUo`Ûuó»^Ÿ
+ã$ÊœGmV¸É"ÜFdURhh ¹9)2
+æ°Ê€ŒùF‹Eò` /<b“«©MˆÝ·ªX•azf€ÀQêUK 9Ð,ätI¸|Ž0 —ë„9XA0zo~–iï±i~µ¨&›mŒ—Š&Lf­6öóöú`8FbXÚoþ> «iÙI¥$ìD  ‹–TSIØtä&aÛÈã6»IØ6v|Ý雹ýœo£
+½+^鬇> í÷r í(ÒâšÉSÀ,Ñ:Œé¯;Ú·Y~üدº 0å&Mt—»»Èêx(÷3ôѣȸй1¡æ ü"qpœ p‘B- §ýPÇé¨ s´QOPG:hCmГܑ[sG5¶îv tĆ<ÚcØ#ùÀmä?}¤w²¡v'Oò‡Ý’\zŒ¹‘ %ùT ý%9Y3~ -r]’È£Jò ØuIöº>âÐM4üª”@Î, A§ò¦Í  Úד9‰Ä¦@'ÈÜT ý2G–
+ír +Ïœr!rï
+`:½= RøhsÊÅ*U°LËWÜ’’€y 9È-Ž!ët䆬ÛÈ'É:¶!ë6lŽq¤B6鸀£Ð@› *ƒDÏ´s¯8•ÀŸ eJ:ÑÂ@Jm±â(PÓ‘›µÜ*P¿Úüôv`aáØp“Ê—Yâ5ÑÂ@¼8½Ù4~ƒ;r¯6r¯òøñ:z;ƒêKÔ½D)MëÂ
+ñ»\h
+9ÇÊ묗£j!Ÿø|¯sŒó4OF>èx{@ÆÓ1oažVñtØFÅ[°Fý¿‰xüªZÄ“}|ñ–__Ó›}Ðð Ù$\ž/áÂ9V&A§Zè—pZ&uNHxÔZÂÔA Ï€YIx
+Aë•¢ö$ă49@%mC˜t@¾y.\ ǸÑY°‘LJÒÆA…CKfÞà˜µ9}õ²]€üë®:’8~ÆbÌ”ùC}!Nô("ÝÝ"2t °c¦Å^Ǭ™~Í•ógÞrÅËתé|¡¶Içµ¹¬ô”¶ÆܨK®Hßth Ót}ÉMçž+IûSzôMW=7\ÒY<íD —S-ôßpYž tbô —ë.äÇ8}y$=8”µvØëø1N
+endstream
+endobj
+12698 0 obj <<
+/Type /Page
+/Contents 12699 0 R
+/Resources 12697 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+/Annots [ 12676 0 R 12677 0 R 12678 0 R 12679 0 R 12680 0 R 12681 0 R 12682 0 R 12683 0 R 12684 0 R 12685 0 R 12686 0 R 12687 0 R 12688 0 R 12689 0 R 12690 0 R 12691 0 R 12692 0 R 12693 0 R 12694 0 R 12695 0 R 12696 0 R ]
+>> endobj
+12676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 507.742 188 518.154]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_ac3a4df498282be091915144efc1cb082) >>
+>> endobj
+12677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 494.704 188 505.115]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a368161defa1a99d14a7f66050ad27e38) >>
+>> endobj
+12678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 481.616 189.542 492.135]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_ab3f2298bf7869af481fda0c9e0e9054e) >>
+>> endobj
+12679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 468.502 278.371 479.097]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a89b34b3056f350aa79d8f85a0e749888) >>
+>> endobj
+12680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.857 468.502 355.121 479.097]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 455.463 263.917 466.001]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) >>
+>> endobj
+12682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.403 455.463 327.703 466.001]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 442.501 199.101 452.962]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_ae7c927ff537794be95d8f74bd571eabc) >>
+>> endobj
+12684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 429.463 201.593 439.924]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a11a01043cf68f7225c7eaf4d6c1743c0) >>
+>> endobj
+12685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 416.349 246.846 426.886]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_af9c17c91722366ff719a53f3525c2034) >>
+>> endobj
+12686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 403.31 246.846 413.848]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a18f1e66017fccef0d12adbacfd30413d) >>
+>> endobj
+12687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 390.349 229.478 400.81]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a2d662d3d30ea3d0f4b28a8dea6a5491f) >>
+>> endobj
+12688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 377.234 227.739 387.83]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_ad888803f88ad50d6895e28a5b9a4b4fb) >>
+>> endobj
+12689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.225 377.234 304.49 387.83]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.719 377.234 425.018 387.83]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 364.321 214.859 374.791]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a406c8f3cd7e5e316c35e671943ec90db) >>
+>> endobj
+12692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 351.283 196.931 361.753]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a1345f47c36719db8c63c15ee8623fbff) >>
+>> endobj
+12693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 338.119 246.994 348.715]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_ab1c955594b8b63071953fab5b0e9c20d) >>
+>> endobj
+12694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 325.081 229.065 335.677]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a740332c114b8006832a6e4a40490e017) >>
+>> endobj
+12695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 312.119 192.627 322.58]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a942e2970749a443aa4b6c5632f7698ca) >>
+>> endobj
+12696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 299.081 195.111 309.542]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8cpp_a3ecb77dcdbe8f782a647c39f99cf763c) >>
+>> endobj
+12700 0 obj <<
+/D [12698 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4962 0 obj <<
+/D [12698 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12675 0 obj <<
+/D [12698 0 R /XYZ 70.866 753.787 null]
+>> endobj
+4966 0 obj <<
+/D [12698 0 R /XYZ 70.866 733.025 null]
+>> endobj
+12674 0 obj <<
+/D [12698 0 R /XYZ 70.866 708.921 null]
+>> endobj
+4970 0 obj <<
+/D [12698 0 R /XYZ 70.866 662.555 null]
+>> endobj
+8741 0 obj <<
+/D [12698 0 R /XYZ 70.866 638.526 null]
+>> endobj
+4974 0 obj <<
+/D [12698 0 R /XYZ 70.866 621.909 null]
+>> endobj
+12701 0 obj <<
+/D [12698 0 R /XYZ 70.866 522.499 null]
+>> endobj
+4978 0 obj <<
+/D [12698 0 R /XYZ 70.866 284.633 null]
+>> endobj
+12702 0 obj <<
+/D [12698 0 R /XYZ 70.866 265.286 null]
+>> endobj
+4982 0 obj <<
+/D [12698 0 R /XYZ 70.866 244.525 null]
+>> endobj
+12703 0 obj <<
+/D [12698 0 R /XYZ 70.866 232.495 null]
+>> endobj
+4986 0 obj <<
+/D [12698 0 R /XYZ 70.866 198.008 null]
+>> endobj
+12704 0 obj <<
+/D [12698 0 R /XYZ 70.866 185.978 null]
+>> endobj
+4990 0 obj <<
+/D [12698 0 R /XYZ 70.866 151.433 null]
+>> endobj
+12705 0 obj <<
+/D [12698 0 R /XYZ 70.866 127.463 null]
+>> endobj
+4994 0 obj <<
+/D [12698 0 R /XYZ 70.866 92.918 null]
+>> endobj
+12706 0 obj <<
+/D [12698 0 R /XYZ 70.866 68.947 null]
+>> endobj
+12697 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12721 0 obj <<
+/Length 2446
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\MsÛ8½ûWð(UE
+ë%3¢X|.>L.ÿþòýb~3Ië&–MgFÊÉÕë7óê“W×—ÿ|;·˜
+É'/˯¯ßMgÖ(×K_ßr}uõæzJ½š~\ür1_\üq!p¼Å”-q÷ÅêëŇ¼øŒû¥à ¼+þ,¯üZàÀ<þ²-~½øGÇÀX& ¼ý×ÔéÉu¨³ 𪠨ž3®E
+|r¿ù|:!,óV•·Jí©–‰7r9ÔÀé„æ¼ 'qûçp¿ì¹V „Î
+]°˜:>i6¿CŸÌ- ñ§+¡
+¦qD4%Ž¡ä‚—F‰1ÕU8ºVŒ ®YÙ ‡j˜÷öÑœµ9ÛLùæšU°}¬®SºelyŠ£›¡ÝK7¼Zã(åÝf¿¹¿«&¿ÜW?·›»uõ–?ïo÷p¹]7ŸõÆ…äœy1« †-Y0tÉ‘r–,¡EÐM`MÁ»ƒÙá•°Q ´Ô!ö~¹û²Þ³Õ·oSÐFøÅL@ÅЙ¨–Õ…7ë[Šßõn}·Z®\ö‰ÆüWG`)Ã0AIÇ´WcP!)äp §sš’Le ¼~Z&'+s ;ɬ‘!rk¥oê8­Þ²tåvý@KáÁ:‚h&0Bœ7
+U¥èó@ gô-™&ÿÇès:r£Ïmä8}NÇnô¹ýðûr·î”¼Xäp¶Xßñ#gŸë@â0md²`lˆÜ×>üZ:b@ltæGí
+ˆ1…‚× ‰2ôþS©Âê/&;JG XF)p
+÷2Dn壗«?¾ovëØb:T!ÙDá\"Û4ÒÈ
+ãt"K ‡lbdÀ®E(Àî¡æSk_3ßÄ2_ò2öF3àý½ÌG;Öùxæ'ã˜ßFn1ÿÍæÓö‘m棸ÈìdG=Mê5§}|™¡$KåG±ý`èª £¸n™Qj Ê+ËˈËõ¡÷÷qì(Áõt܆ërÈõ×G[&ÏÃu«’¸®4zŸëh)žç`+žPŸã—‘4šãïïå8ÚQMDÇp<÷Àñ6r‹ãÕd«Ã{Hî)6ÒöuÜ
+çbs<†&KÆéà2`×\€=¸ƒ‹f»pS)мbVW†Dœ×çhkpZ9€Q˜#ä¾ô(4^œóÖrær»ùr× êyásÀzô?½ݭûó4É*Ë´TkÔ9öÄ̃}*Ó O{œcžpš´'œÒ;&EŽŽ–,q1à gè*Óȃ3]ÇîÍqÝéÊâæˆ
+GaG“ÒØR†Â3 P¢ÚìI
+–«
+­n¹+±0²´Å7æl—ô~…j #RWKoVVïÕ?™{‘»T¦ã"w¾å …Ûân}‚÷Œ %ê;½û;Öƒô‚Ç¥Kž –¾ø!΃Rñê[’q•¬¾E Ûƒõé¸GV¥ö]WÊ*•t¼+„”gp%=f”xy¤+¡Ò ®„RH{]YFŽð¾¢¢ë/°½trÈ÷]TÛºÕcIÏ«ƒ@èÚfHX±CÿDII
+endstream
+endobj
+12720 0 obj <<
+/Type /Page
+/Contents 12721 0 R
+/Resources 12719 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+>> endobj
+12722 0 obj <<
+/D [12720 0 R /XYZ 70.866 789.024 null]
+>> endobj
+4998 0 obj <<
+/D [12720 0 R /XYZ 70.866 751.53 null]
+>> endobj
+12711 0 obj <<
+/D [12720 0 R /XYZ 70.866 726.4 null]
+>> endobj
+5002 0 obj <<
+/D [12720 0 R /XYZ 70.866 688.385 null]
+>> endobj
+12708 0 obj <<
+/D [12720 0 R /XYZ 70.866 663.196 null]
+>> endobj
+5006 0 obj <<
+/D [12720 0 R /XYZ 70.866 625.124 null]
+>> endobj
+12709 0 obj <<
+/D [12720 0 R /XYZ 70.866 599.993 null]
+>> endobj
+5010 0 obj <<
+/D [12720 0 R /XYZ 70.866 561.979 null]
+>> endobj
+12718 0 obj <<
+/D [12720 0 R /XYZ 70.866 549.33 null]
+>> endobj
+5014 0 obj <<
+/D [12720 0 R /XYZ 70.866 511.316 null]
+>> endobj
+12717 0 obj <<
+/D [12720 0 R /XYZ 70.866 498.668 null]
+>> endobj
+5018 0 obj <<
+/D [12720 0 R /XYZ 70.866 460.654 null]
+>> endobj
+12712 0 obj <<
+/D [12720 0 R /XYZ 70.866 448.005 null]
+>> endobj
+5022 0 obj <<
+/D [12720 0 R /XYZ 70.866 409.933 null]
+>> endobj
+12710 0 obj <<
+/D [12720 0 R /XYZ 70.866 397.343 null]
+>> endobj
+5026 0 obj <<
+/D [12720 0 R /XYZ 70.866 359.328 null]
+>> endobj
+12716 0 obj <<
+/D [12720 0 R /XYZ 70.866 346.68 null]
+>> endobj
+5030 0 obj <<
+/D [12720 0 R /XYZ 70.866 308.607 null]
+>> endobj
+12715 0 obj <<
+/D [12720 0 R /XYZ 70.866 296.017 null]
+>> endobj
+5034 0 obj <<
+/D [12720 0 R /XYZ 70.866 257.945 null]
+>> endobj
+12714 0 obj <<
+/D [12720 0 R /XYZ 70.866 245.355 null]
+>> endobj
+5038 0 obj <<
+/D [12720 0 R /XYZ 70.866 207.34 null]
+>> endobj
+12713 0 obj <<
+/D [12720 0 R /XYZ 70.866 194.692 null]
+>> endobj
+5042 0 obj <<
+/D [12720 0 R /XYZ 70.866 156.678 null]
+>> endobj
+12707 0 obj <<
+/D [12720 0 R /XYZ 70.866 144.03 null]
+>> endobj
+5046 0 obj <<
+/D [12720 0 R /XYZ 70.866 106.015 null]
+>> endobj
+8742 0 obj <<
+/D [12720 0 R /XYZ 70.866 68.871 null]
+>> endobj
+12719 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12738 0 obj <<
+/Length 1990
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[Ûn7}×W,’ ¨hÞ/@QÀq¤\Û©¬(’<(ÖÚ`KŽ,·ðßw¸™”v¥]“vŠ¾DŽµœ3œ9<œ!×8¹Lpò®ófÜ9j–hd¤dÉø"Qi)e(’$O“/]…F½¾¤´{:~:íQÜ=|Ûû6þØŒ;?:Lá„$„„M6TÃçùMçË7œLá» FÌèäŸìÉ›løá:9ëü^áá)íùpüWO‹îi¨$ÈhUr$ñ`Ç=b';z7ÈBï{}ªtwøáÓ ÿi4Fƒ“#ø¯6JtÞ~Fù—ªÛããoOþ8œv³ÇNO¶çUæAk¤)ß5-.œ­g†ÝÜ
+–Š !ÂM.Ä »Ùíõ Ƹ»¸øŠ1[L¦a)B²¡Tîr‡!­˜fß "$Zø^Üôî>ô¨è.*À5CĈ(àZ¨ñÁW“eˆî¥ C7]¡«"ɳë´Hrzѳ_-Óùyjý;BÀÜÀlŸ‰(fIŸ‚ –OÖîëÙüüú~ZŽ Î
+j‹@Qqö¤o¡oǧa¹qD°~âS¨¤‰@|0$UÞ‡#–¼w ÷Ò>uM{uëÃAKÖ»SÝKú`Ø5éØÁÉÛÿã±FPE`<’6¡|8dIysøy<ª l›ZР”Úúšú u”‡2™kUD÷Qk9O€§T \£!«j·‰ÐoWË6¤‡úHbþ¢¤ÀD ¥Y0é­!.xÒG€,Hïaî&}8hIzté# ¤÷P÷’>nAz·Ò7¡üf/
+ZdÞ¼Šw-X~“Ö*Ä&gxn‰ð¢&ÚunÄ5˜1AX ùÆ®·œ1£ôrv·J7’~W¹„±ÀµìiÃôƒ!áÎA”z}ä`ƒ’+€7žWÏÜe`E,ƒ$FÜ'°ÏnÄmåêÕ/ÑV’ m‹
+ŠÉ}ÌêË ”b[Ù1´®G‡„c*b 2Œ>j}n«-‡¸Je7~®íÑý®\”]¹ÎêU’¹}{uŸ•°]¹·Üà|?óš·mòOVùçõ¬$4cùç¢è_íˆòÚx‡RP Ê¢!wÜÞó³ ÌT¹%ŒÅ–RÔœ1ÛžQác¯²¦]¡
+qèÛ÷¤°„7â‰[„jû®GµF€%AšHD8d)ä…Æ\+„ƒ¹O ÂAKp@÷ëC8l©.lvný“‚ DvÈiT°–ì°æ»ûù‚JË*A ¨äÙáû~…ˆ€Y(„‡Y{£KbBG€¥Ä›k¶N%@蹊Ê ‚rÀŸj­Hhƒ
+ØR%ì[VJ=A%p˜Jä‡dD )CÚˆD0t©.ô h4®vp
+endstream
+endobj
+12737 0 obj <<
+/Type /Page
+/Contents 12738 0 R
+/Resources 12736 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+/Annots [ 12723 0 R 12724 0 R 12725 0 R 12726 0 R 12727 0 R 12728 0 R 12729 0 R 12730 0 R 12731 0 R 12732 0 R 12733 0 R 12734 0 R 12735 0 R ]
+>> endobj
+12723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 633.863 342.596 644.382]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a30cb1348ce058ada9e8def60bd240efa) >>
+>> endobj
+12724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 619.755 332.133 630.274]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_acfd3ac145082bb31fff351c380950c52) >>
+>> endobj
+12725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 605.647 328.645 616.166]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a7a3cc98a09c45a570075dec9b1ca4457) >>
+>> endobj
+12726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 591.539 318.181 602.059]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a11fb6f6f8272d30895d4a4ace25a365a) >>
+>> endobj
+12727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.346 538.94 284.611 549.459]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.801 524.756 299.1 535.351]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a9ad661cc8fe73ea6af1cc70b4b241932) >>
+>> endobj
+12729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 472.156 227.739 482.752]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_ad888803f88ad50d6895e28a5b9a4b4fb) >>
+>> endobj
+12730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.225 472.156 304.49 482.752]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) >>
+>> endobj
+12731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.719 472.156 425.018 482.752]
+/Subtype /Link
+/A << /S /GoTo /D (struct_fptr_table_entry) >>
+>> endobj
+12732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 458.125 199.101 468.586]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_ae7c927ff537794be95d8f74bd571eabc) >>
+>> endobj
+12733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 444.017 201.593 454.478]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a11a01043cf68f7225c7eaf4d6c1743c0) >>
+>> endobj
+12734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 429.909 192.627 440.37]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a942e2970749a443aa4b6c5632f7698ca) >>
+>> endobj
+12735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 415.801 195.111 426.262]
+/Subtype /Link
+/A << /S /GoTo /D (offload__myo__target_8h_a3ecb77dcdbe8f782a647c39f99cf763c) >>
+>> endobj
+12739 0 obj <<
+/D [12737 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5050 0 obj <<
+/D [12737 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12740 0 obj <<
+/D [12737 0 R /XYZ 70.866 649.204 null]
+>> endobj
+12741 0 obj <<
+/D [12737 0 R /XYZ 70.866 552.123 null]
+>> endobj
+12742 0 obj <<
+/D [12737 0 R /XYZ 70.866 487.573 null]
+>> endobj
+5054 0 obj <<
+/D [12737 0 R /XYZ 70.866 398.836 null]
+>> endobj
+12743 0 obj <<
+/D [12737 0 R /XYZ 70.866 378.451 null]
+>> endobj
+5058 0 obj <<
+/D [12737 0 R /XYZ 70.866 356.651 null]
+>> endobj
+12744 0 obj <<
+/D [12737 0 R /XYZ 70.866 344.01 null]
+>> endobj
+5062 0 obj <<
+/D [12737 0 R /XYZ 70.866 306.044 null]
+>> endobj
+12745 0 obj <<
+/D [12737 0 R /XYZ 70.866 293.403 null]
+>> endobj
+5066 0 obj <<
+/D [12737 0 R /XYZ 70.866 255.437 null]
+>> endobj
+12746 0 obj <<
+/D [12737 0 R /XYZ 70.866 242.796 null]
+>> endobj
+5070 0 obj <<
+/D [12737 0 R /XYZ 70.866 204.83 null]
+>> endobj
+5074 0 obj <<
+/D [12737 0 R /XYZ 70.866 174.227 null]
+>> endobj
+12747 0 obj <<
+/D [12737 0 R /XYZ 70.866 151.853 null]
+>> endobj
+5078 0 obj <<
+/D [12737 0 R /XYZ 70.866 132.061 null]
+>> endobj
+12748 0 obj <<
+/D [12737 0 R /XYZ 70.866 119.478 null]
+>> endobj
+5082 0 obj <<
+/D [12737 0 R /XYZ 70.866 81.512 null]
+>> endobj
+12736 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12815 0 obj <<
+/Length 4276
+/Filter /FlateDecode
+>>
+stream
+xÚ½][oÇ~÷¯ Ú ¨¦s¿
+RDïW!iáÕêâzõÓÉ—ß|ñúâüÍé™ñ$ˆÓ3¯õÉËo¿?oþå«W_þóïç?\œ*-O¾Èÿ½øöÕ§g1(‹ÏÕ~åÕË—ß¿:¥}uúï‹ï^œ_¼øí…‚r¥V&X!“ÊÀQ¦ÕÕí‹Ÿþ-W×øŸß­¤0)®þ›?z»‚d ¹Yýøâ#O`‚!ªâ^ýýõd
+"XË
+ɵ4ÂZ ‘}µZQŽ´‚ÁÖð`ã8°±‚Ó®Ä~¼¼·~W>œw"F\þL9,ìÒ
+ZÎÌõ|v*ìùK¿?åù´ŽÁ:s=¿·óü¹çùßo~y¹Ùnúž¯”Òìή¢<ÐÛÀ¡9¤«l•·GxN³’Vn–·;?4ÌéT‰<Ë׃ðÈŒ¯›¹¾n‘²xöõ…ߟôu¬ã¡¾Ù¾^ûäë}äÒ׿…—~~_¶Î×u!_ÇJ.ľ^Ýúzy±¯Ïæu©…Fíu°¯/üþ¤¯cií|_¯Æ}òõ>rÏ×߬ßm×÷§Qž\þrªäÉÍúaXàüøþò~}]|æ|ûxOÕ(ÖÉfñ% ê\À*T°&:È•ñè9›OAð^ó"l°Ýg2ÄHÙo(Ü4AgPÔ¹JU<vÏ“ŸåO#.—Mñô(/?<ÞÏ׃wmÉ?[ o±þ®¬ƒÁ3(Á¢§PÞO)aäñ)Þ{0NVy¡ð±å¨Sºh„2‰]Ô"ÙùÈ€ÜP`ø³e{çœðòðžné÷§Ö±r~OWÛ1`\0àÍúòáÈ=]4U=3^8ÉÑÓÑJF.éé°Ûž®Àžò|…àPT ÷›:cQ¸Ù§ÁˆjÇ"ûü _
+Á&•ˆ*î“ވ̎CõäP@v£µüS—vûa5BPåxP#"‰°@}÷Ð謙Xm:z³~KŒ¾¾_o¯ZV‡†z™ -h„;7Öm³ñÇÍöêæãu÷ Õû‚3"@Ü6üelMšÏ©îЇx?²ê½ŸÖùë¨lI «É(’óÑsòäwoßÞÀÐâýh…<⢻Ñ_A¨f$±ª@ȯîÓsŠN]J­"eÔ„µìó¤bóv3Á)@, `U—T š¢QÌp²x¦´±‡Œ ojg‹Ý8ñ! Û &Q«hNJªû¹°øÎ꧖<‰YÛtÔ<õý»öñßäOe¢ £…EÂ2Ð’õ5†2N ìóJÚ·-ÆÃúqÓ"œâÀtø¸U%æ5‚ÉäòãÍv€áì ØÉH…!6AÿgÓ°@ßN]ºÛlÛì´%ÆøxÛ¥ºçÏž¡†p‡2¢K S–§Õ0:J*bgž¸J ¹nhVR©U»q£#† ˜Öæ
+£Àü„Ñ•ÐhŸ°ƒÁßÃûSFïtÄØIYÅØ>
+£#‡±±þ>ÇØõ˜±û˜mèŒà¢ÝJè9p=²†O%¦,=ba0ŽT~–…hSéŠøÁÍ"u?ar¤ºˆÇ1øS»*5 v¦YIº½¤Ž“Ær`"ÆJ¥³óýA½‡OHD¡Õ%bS!ïÚÙ7]Ë”UN.¾xóõùÅHAïT‡ÕÒjT9ûâ^üëõù˜°½Ç(=èHP¦0ˆc$”gÓ@{¿XS{ó§Ó,E›õöˆãÑ ™À!Ž£êPŠÓ2Æ/(JÜ
+ý¸Ù¾kÿù
+•Yû?®Þ_ÞÍÛ4ÑÌâ˜ÔOs¦‘!S¢vŒÃ
+Ø>æ8QQI¥`=&•2”˜SLe"ë˜ÄÕ6îŠ;ÎDq2ô55UÑ2ˆc$´ì@{}&Š'Oõ÷$¹ ›âx‰|)ÎÅgʉS”"°ü ÊQû(Çz‡¦Á÷­Íú6N9†Š2£f@¬å¨ÈÑÉ¢ÞMÝèg'[Ùu²}Ì=u.âN'Ü 3^ûøþ~}yý06Eöp¸ZÚ<¾)q¹‰Î'.qM›b)îR¢3šmŽA£­ 9e©½¥DGÝ0•\õâD“J®ç-‰n8ý㨈292He5¡qÔµGiŠ
+bwŒN\ùìL ¸¢F/ÍéÄë1»N¼y{ù¿ñ.ÜѤÅœv¡Äœd§<éM,¸(ILâ²³“fW{q})îbvRV¬W/ŽQ¨ œho);38qPïJqžÙi„
+tLT} *$ `¥fQA=fG}ÌOåêq»¡\÷ÃýÝÕÄ ”fA…7D5@e'ôî<â‚/wÅ]LÚ£&¨Z#iÒ´·” Њ+Jåõâ $¤Õ1×"4KÖ«}!îI21´/™Åäœö…³m_
+ÌëßÑn®Æ÷éÑÖ2ÀF/’+Qù#SóKcÛ¡°ËãÒæáf½4áR…îÇ% i‡8–Ô©çÐÂ(ÁIÖØ<¢-u4ÝAXpòG(tð"V†ëÊZÉ›9ef[6˜Ó$"”åY£„ùÏÊ?TõLâÒP5”Â.©Bw!0C#Õàâ2R¥)!ƒ8^¢+H¥8ûÓw@0ê™ù›Æž%c¥î¥¸ý黲Kß=Èíúáqì„8mv”† ¨ˆK}ú9ö:eÝji),mt…´‡luD'¡¸t'9$,C°Ò ,­·¥ÿìOÞÙ»FãU£}QÇH¢pzŸX’(VrsRh=b—BŸ§ãT g=h *Ï÷AÙÃÔ$&aµÕCa—G)ùå0—NT@æZ¤0£¶ ÂôZÙÂwöfN”äγíÛy78 1™¡Òµ‰SÚf%k>‘8¥»zHèRUB^½__lÞîö½Ô °<*:3xÔ‰˜ô‡X²LZ¢‘ÔPK£Aé÷Wò²^šHÑîw¡»^Tú.*÷IãéaKÒÃ$KKî¦N?‘ˬUà ‡Õ4Y0»ž<±EY@i‹.” ­æÝl¯‡Ö¸½»ÞЫ;£tEûwQ3±•zŠ­Z *çꘊŽsä…ŒßW8@?>)D³‰ª€ÜCTIŠHNY› ÂV¸ãD僩ØH3–AXÚG“¦uŒ¦È9¦wÑÐêZ‹„oJ‹õh*Õémz‹ß¡˜6ÒÄ(Ü@7;4E2ÓuaX¯^âkÜ®€R'‘X@ƒËo ¦9¤i³äXhKr-wW<3ˆøTù¾Õœã_{¹©äÑNd©”òåõ#ZÉ×ÅÜLÔvÊ&P›ò´ª
+&V]tð¶ÓÞXžÃxéµï8ˆ—Ô»î5¨‡Çû»æ•þ‰ó÷,Øùüý
+X§¢†Ã \¾/jàgùö3«]Þñ+Îm¼„G”ñhÇX’,"ÀŠ1©Û¨Õ€í&jpºÁ‰ÚÕ#¢½qp¶>âþî&¡ªQ‘ìœôêçhm¢ª×56N–:¤¯‰±Þ!©­q¡tÈCÚšl½,¨’l´¥¯2ô4ZY/u4)Ù‘d-È"ÄzD ²ðqf$Ñï;YÏ€êÑ—¸8I;­ ý”H5f’yhP`+ƒP'ã5W
+ñ6M¥zý[­"] *ßØ¡ðˆ:WÙ{w…©Ãu ÔßÚqª{Q¹+¬GÌG(KÈ}½‹ÌN5¬–ôÓ®€xGv>´sA Zé@'çM!ìèKBuú"PºÃ× C—d:DQ¡¹Þ;BV·ïí†~¿Äa]áJ‡›IHÔÉž%ÉX/žÍÛìqF<Yúµu¤ùzHú±uäùyñd“É;ƒõ°`tºÉq"žÝJBÏÊ`}jV’*­¿7› …¡fìòW›&ÓÊØOÅÓmxzÉÅ7¿æŠßÐ’ùGQx߶aÊï@ÿ9dÉ
+endstream
+endobj
+12814 0 obj <<
+/Type /Page
+/Contents 12815 0 R
+/Resources 12813 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12647 0 R
+/Annots [ 12754 0 R 12755 0 R 12756 0 R 12757 0 R 12758 0 R 12759 0 R 12760 0 R 12761 0 R 12762 0 R 12763 0 R 12764 0 R 12765 0 R 12766 0 R 12767 0 R 12768 0 R 12769 0 R 12770 0 R 12771 0 R 12772 0 R 12773 0 R 12774 0 R 12775 0 R 12776 0 R 12777 0 R 12778 0 R 12779 0 R 12780 0 R 12781 0 R 12782 0 R 12783 0 R 12784 0 R 12785 0 R 12786 0 R 12787 0 R 12788 0 R 12789 0 R 12790 0 R 12791 0 R 12792 0 R 12793 0 R 12794 0 R 12795 0 R 12796 0 R 12797 0 R 12798 0 R 12799 0 R 12818 0 R 12800 0 R 12801 0 R 12802 0 R 12803 0 R 12804 0 R 12805 0 R ]
+>> endobj
+12754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 391.402 206.856 401.814]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a9fb362632a8eef3cc456463618caf489) >>
+>> endobj
+12755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 378.207 200.607 388.744]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a4a4eaa91f37f6ce35c395c9612f7f2dd) >>
+>> endobj
+12756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 365.137 195.792 375.674]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a1bb01d2460cbd7c0a501f651d11722cc) >>
+>> endobj
+12757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.871 352.067 210.342 362.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_aa2d87f58887cbe6fe6e4098eff5c9b7b) >>
+>> endobj
+12758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.809 352.067 278.817 362.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 338.997 204.13 349.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_add69f5ca2eebdc752f24d678a3b0582c) >>
+>> endobj
+12760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.616 338.997 272.623 349.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 325.928 227.972 336.523]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a8d9d798a5d847e499238d837a4bcff48) >>
+>> endobj
+12762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.457 325.928 296.465 336.523]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 312.858 221.31 323.453]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a02f8ad5383a87505b6fbb0793d9adc46) >>
+>> endobj
+12764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.795 312.858 289.803 323.453]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 299.788 213.742 310.384]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a89acf61f55afe8305385d00765fe1917) >>
+>> endobj
+12766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.228 299.788 282.235 310.384]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 286.718 210.873 297.314]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ad2e915a8b7d831cfc0aed125293ca876) >>
+>> endobj
+12768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.359 286.718 279.366 297.314]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 273.648 204.623 284.244]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_af0db031140cfa95716ef8b0dda401aa5) >>
+>> endobj
+12770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.109 273.648 273.116 284.244]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 260.578 204.408 271.174]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a1011ab0c45eba008822405956a76f89e) >>
+>> endobj
+12772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.894 260.578 272.901 271.174]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 247.509 198.159 258.104]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ae6b4fcf7bd782c5dfe63d932c35cdefd) >>
+>> endobj
+12774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.644 247.509 266.652 258.104]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.379 234.439 213.265 245.034]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a60c915c14c15fd1eaaf567f64c8709cb) >>
+>> endobj
+12776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.64 234.439 281.647 245.034]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.027 221.369 217.415 231.965]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a5d4a882956d239429012df086aa92a58) >>
+>> endobj
+12778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.438 221.369 289.446 231.965]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 196.344 192.752 206.94]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) >>
+>> endobj
+12780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.238 196.344 261.245 206.94]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.654 196.344 452.951 206.94]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 183.274 210.425 193.87]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a5fe0c1f24f495b7008dc5cf5e56ad6ec) >>
+>> endobj
+12783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.911 183.274 278.918 193.87]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.327 183.274 470.624 193.87]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 170.204 193.254 180.8]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a91aff80928b0d402d4c43c113b671c14) >>
+>> endobj
+12786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.74 170.204 261.747 180.8]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.156 170.204 453.453 180.8]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 157.134 203.225 167.73]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ac83571d32139ab9d16192faa66d9bb7e) >>
+>> endobj
+12789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.711 157.134 271.718 167.73]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.127 157.134 463.424 167.73]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 144.065 188.995 154.66]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a2660b0549f99e3d4dfe393365204cc3b) >>
+>> endobj
+12792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.481 144.065 257.488 154.66]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.897 144.065 449.194 154.66]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 130.995 212.926 141.59]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ac885fbf2e7f51874329635e35f29da40) >>
+>> endobj
+12795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.412 130.995 281.419 141.59]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.828 130.995 493.299 141.59]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.634 117.925 232.744 128.521]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a6b39cd17288ecfffa3ff0e67bc705d6e) >>
+>> endobj
+12798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.375 117.925 303.382 128.521]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.441 117.925 525.406 128.521]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 106.095 99.262 116.507]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 92.9 213.428 103.496]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a33d2b782ddf82056f797bd7abe579b9f) >>
+>> endobj
+12801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.914 92.9 281.921 103.496]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.33 92.9 493.801 103.496]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.818 79.83 226.728 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_af5d517293abea69dd776b3d4d978aebc) >>
+>> endobj
+12804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.542 79.83 298.549 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.935 79.83 525.406 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12816 0 obj <<
+/D [12814 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5086 0 obj <<
+/D [12814 0 R /XYZ 70.866 771.024 null]
+>> endobj
+12750 0 obj <<
+/D [12814 0 R /XYZ 70.866 753.772 null]
+>> endobj
+5090 0 obj <<
+/D [12814 0 R /XYZ 70.866 732.98 null]
+>> endobj
+12753 0 obj <<
+/D [12814 0 R /XYZ 70.866 720.858 null]
+>> endobj
+5094 0 obj <<
+/D [12814 0 R /XYZ 70.866 686.342 null]
+>> endobj
+12752 0 obj <<
+/D [12814 0 R /XYZ 70.866 674.22 null]
+>> endobj
+5098 0 obj <<
+/D [12814 0 R /XYZ 70.866 639.705 null]
+>> endobj
+12749 0 obj <<
+/D [12814 0 R /XYZ 70.866 627.583 null]
+>> endobj
+5102 0 obj <<
+/D [12814 0 R /XYZ 70.866 593.009 null]
+>> endobj
+12751 0 obj <<
+/D [12814 0 R /XYZ 70.866 580.945 null]
+>> endobj
+5106 0 obj <<
+/D [12814 0 R /XYZ 70.866 546.43 null]
+>> endobj
+8743 0 obj <<
+/D [12814 0 R /XYZ 70.866 534.308 null]
+>> endobj
+5110 0 obj <<
+/D [12814 0 R /XYZ 70.866 517.616 null]
+>> endobj
+12817 0 obj <<
+/D [12814 0 R /XYZ 70.866 406.175 null]
+>> endobj
+12813 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12887 0 obj <<
+/Length 4831
+/Filter /FlateDecode
+>>
+stream
+xÚÕ]ËrDZÝó+f D¥Ê¬¬×R–
+!àAÛò×;³@WOwO÷T
+ỡ `¦ÎéªÊÌ“Y¶»;»ûÝ«ß^¾úê"¹]29·»üq­I!ìbF`wù~÷ýI4ÌéY@<y}qñ§×§hO¾þöôï—|u~ùêÿ^7ew°—ÍÍWÿ÷Ýí«ïÿnwïùoÜYãrÚý³ùäíŽÛÎüÃÇÝ_^ýÏ 01^ÿùÍ`@Éi oȹò÷¯ÿry
+ü¬æ›7oNÏ0¦“‹?üé¼ýéíùÅùÛóï¾áÿMèä›ßýæòümûÇØõÖóÇ¿}ýÍÿþùü»¶½¯›/ÿðú»ýGê»?%“–žˆ¼3ž¾(Û ©-ùÁC¦h‚çg `lÿCô ‹þk»ïϼ'7wݯ…ÕÇŽÞÛæòD÷·Ÿ&½‰
+¸É¤8êß«‡×ãÙ ƒý7ëíìt8¹üúíïÎ/÷Ù¢·ÌV¡—§:Ò¨—.ÿúæ|Šëà)
+6Î2
+ºz6Îzvˆ#;züåÓõ)ø“ß´ö.æ³Ì†]—w^ {.¶áѬ={òåö‡ë‡So™ÓvK&HÆ’?Bk¢ók¬Š\2Y“¬É6¯µ*òÑ ÕÀõÙ¤œg­ªDMì·) &ö[c¿^šñW@»Ìß` ù†É)ðÚ`­“[åÏ@ÿ™¾ïØ@isgd?FÜ»D‡ËQå§èOîoÞ/OÈŸ'C kÌ.€¢‰˜k\Ÿ#ƒMCžjø~¾ž ,Ñ
+t8spJ:϶;eŸÑs“éÅ,Ê£z…
+”'`~DiZºxäOª`zŽâa‡˜kübî
+«õ rWX-L8øäI9àƒxØbèÕýbbº„‘ ŽF´Ù/²¹zT`ãЄQßmuŒ¬|É©°aå âb‡t–Å’L7nsU2S/–Bvœ‰a½X’†ÈºbI²Kæâú2ÏãÍí¤XâÜ‹S™§kt%ýj„W¢‹žckÄ’îöŒ&rš­1~8ÈÇo{FÃÉ(U~(é,W#d~MV"“û•™N]%"°²¬$ë+!²5E8X‰P@ì*â*»ž/NƒA"âd _‰ÈJt‘uÔÝív &*q–ûn<zÛ­–‡@ƒN`:J:êµdz±ÐÃ(ú¥¡'á¹YëûÈ:€üxóÃtëÕÃ陳'¿Làs"™jàGYáÇÑ#30O±›«S:?³Î÷
+Ðh‘E_ÙÛú¢;j±"Q©`»½Áƒ-¶XÍÆ!o¡ì»ÍÕIñuõl8
+¸‚ÍÍM&†—ªOQÁ/xlJ+C=d<C=Þ3 <~ad»«‡û/wï' 9öE¯€Hœ—:]Ý?¤¬E7³ *énv&(ÐqDMÈ-{o£‡ 2Þ)Ð!–2D®¤³è"ó‹¹— Å à"¸!–=k\D=dï"†˜\D=ÞE <þÄ®áÃOŸ¾<N{ë“4¢ãÀGп‚w°>jÐÍ°O÷ï
+t¤øž€F½w„w°NÃvÈò`b(éô6ºË,ЛL¤àd·+ÿa…{¨‡ìÝÃsƒ{¨'л‡!ýÜ•è"ù}º[mTªÉ5†3§.0¾Í_öW‰ ¨¦ãd•+Ù,—ìnïßO–ìB69Æ)Ùä%¨Q²ã–Üá’]=b_²"®°Úx¶8 š¢lA@Ýj«;¦YO%úX,én¶ÚĽ5†O½¬&•½·ÕjegU:NvV%(é,§æAbñ‹Õì|N&%¨¬ÒPH¸"²*@v‘µÀ|ýã)ÛæÕ—Ÿ§+êžð$ÊR þkTÔ=g|õt¥¢.ûß
+ºÇTÔ}$:RSÇ@£Þ;¢¦NIcòJMb(éL†Õw?‰óo~º¿kBŒ¶èGq›öè§ì”ÈÖ Vî½›sÔ¬ýû䣺ê}lÖþ¥%è$Ê»‡ë«Çëés€žUˆªœ¦ ±@½ú‘»ïn§"µ¤‚43÷œ-‘o¯>OWAN—\
+˜’‡sÚùxOG§ÝÝ«FIï±ì¡)ß#“s)ëvâ{ªÙHMÎ*ûîÙõt­ëYbC–û†4ú†,÷M×Ëà7®“ÖLA¯Á/HÂáWÛ±5ؤ1Ç)‡¦(|Ø®<°ntsÃ#‡,çÆ™
+*Ðìå“AÏ{yÙ¸£
+n^D®Øw €Ø»ù!â7_ܹù!ðíÕ¿¦JW¬£­×€”Û³/1?=Ü¿›*]ñ”çiSŠ2ñ– êñ,&-º²b=¦»yáÖñ씜¯šŽQiÔ{[ãÏ ¤1\–›4K2Ë­-ÕØõähÁûȲe)lCåUšÛ–|‚Årç
+œÚ*`²ÿ‰KÌCþ‚
+4; äGÐÓñW–\x Ð9þútÎyCßêAçVX‚N» ™fÇVÏYhЕ…` %Ý)$dç]4è8Ùj–è÷ž] ­é.ÓÉ<Î)Ð!ËÎ ]IgoïHAª™_ Ùy÷üŒÔ–µôLÄ¥
+o†™[²ýø—»éHèEœª Ê©\‚.ÂlœÎó&4vü¼3+ºÖñ`gP´Á„8zÞ™@ˆ²Õ3h€òÈ:
+%èŒçyvd ”Åß”4èfÏq;•t'µ8“/ÙËutEccõÞ@‹‡n'Ó9ô#×ÖÓ‘=Q!zgåÔŠ@(ŸŸ„’<¢†½«˜3õ³}lþBä\™¼¬ã×ì7bB¡m\^Œu}„ªÆt­0‚ÎǺ.BÕÃR6üö%b]”]˱ŽÝû|¬¿@r¬6Ö¾=!6 »|I.+¨$T(1e|r•‰´ìŽ³#蹌O¶÷j`Êv)_BÎç{²å¡Sò½
+ ÍíP JP6qgdÒœ\?¶ãÝD­³èqaQ$6ת(°âø©>@}uÁí o¯–ûKì4ñ‰¨…&â‘ \ç¼!wœD-ÁþÍ„5±ô“…ÕNˆŽZ¹Æ/®~IîœK
+#ÉÅT>Î ê…ég:“n€€¥wŸt ©=Ìé8 “+µŽŸæäÝÒ³¸ÂB‘§¸O
+È’
+€îJ¿þ¥Í™¹Võ^þùe®¨4ð›¢F(ñU‰å—´¬>°6, çªÄÞ8 L™™–JÈ 1`{1@v!]uÍÑR©ÍÓ V jÀ… r 5GE"YÊÙ–èÇ]w@Ø€å
+ „)@WKüN”øÿe×K˜•†c::ÐÐ0’ÔôÛ®—EL=f¯b†˜Ç˘ùÓ&,cX)55w—ªd wwl‚~S䲎±ìêq›»D ÜeÃ-²r«Gf#a±@ž>sI¬ñê!£¼eÁ•órh*Uõ¸Ü€ª
+Ü= ótà¤Ù‹2/a ©bT“ÂȺ
+CIjNÁðä·^Á4ÔE±Ô/²!f4\Ëò%4§¦Åz‘“«Ÿ%‹…£ÂÃdßœ}+žf ^öŸÆÅæö‘‘Ál.@ÜœÜF„ªÈ ‘2¡F­[Z’sE‡#ƒf
+ÌŠÈq>2ÈûXdOrŽ¡2ÞÕÒRŒqMhà‡Ó
+wYØyË!âž·|ÚO\pè¾â#O†%äå^7²;?«Í IÜ”¼¬§'ÇÐÿéHþµ
+endstream
+endobj
+12886 0 obj <<
+/Type /Page
+/Contents 12887 0 R
+/Resources 12885 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+/Annots [ 12806 0 R 12807 0 R 12808 0 R 12809 0 R 12810 0 R 12811 0 R 12812 0 R 12842 0 R 12843 0 R 12844 0 R 12845 0 R 12846 0 R 12847 0 R 12848 0 R 12849 0 R 12850 0 R 12851 0 R 12852 0 R 12853 0 R 12854 0 R 12855 0 R 12856 0 R 12857 0 R 12858 0 R 12859 0 R 12860 0 R 12861 0 R 12862 0 R 12863 0 R 12864 0 R 12889 0 R 12865 0 R 12866 0 R 12867 0 R 12890 0 R 12868 0 R 12869 0 R 12870 0 R 12871 0 R 12872 0 R 12873 0 R 12874 0 R 12875 0 R 12876 0 R 12877 0 R 12878 0 R 12891 0 R 12879 0 R 12880 0 R 12881 0 R 12892 0 R 12882 0 R 12883 0 R 12884 0 R 12893 0 R ]
+>> endobj
+12806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 758.07 209.169 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_acf9451614f1a7a49aadaf5ca4205386b) >>
+>> endobj
+12807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.655 758.07 277.662 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.071 758.07 489.542 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+12809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 744.538 213.545 755.134]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a0ba10731a8f3b08b4daa3b3ce9eb04e8) >>
+>> endobj
+12810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.031 744.538 282.038 755.134]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 731.006 207.296 741.602]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) >>
+>> endobj
+12812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.781 731.006 275.789 741.602]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 717.475 221.256 728.071]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a1e1563d04c8034fe03e103f00b15d8c0) >>
+>> endobj
+12843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.742 717.475 289.749 728.071]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.797 703.943 227.066 714.539]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ac0b930432bb81181f1a71528d8b029c0) >>
+>> endobj
+12845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.552 703.943 295.559 714.539]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 690.412 214.495 701.007]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_aeeef81c81bad500a729ea5b15583a35d) >>
+>> endobj
+12847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.981 690.412 282.988 701.007]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 676.88 208.246 687.476]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ad0f30ff60d38cb79deef3369d25b9dbd) >>
+>> endobj
+12849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.732 676.88 276.739 687.476]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 663.348 226.358 673.944]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a604337c27b72f4540b47da11bd8f844b) >>
+>> endobj
+12851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.843 663.348 294.851 673.944]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 649.817 248.387 660.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ac45d090cdbe79f6befc4cb13a328a16a) >>
+>> endobj
+12853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.873 649.817 316.88 660.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 636.285 247.67 646.881]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a684a3a9801845170248bcaf4dc099cc5) >>
+>> endobj
+12855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.156 636.285 316.163 646.881]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 622.754 201.575 633.349]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a0dc024004959b0689c8c0797545ba539) >>
+>> endobj
+12857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.061 622.754 270.068 633.349]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 609.222 195.325 619.818]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a173a599cb71e90363876cf3432c07802) >>
+>> endobj
+12859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.811 609.222 263.818 619.818]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 595.69 208.12 606.286]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_ab8645400827727abd213d884fa9394f8) >>
+>> endobj
+12861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.606 595.69 276.613 606.286]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.961 582.159 242.978 592.754]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a4e383c4e60024718afe9747911bc9472) >>
+>> endobj
+12863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.936 582.159 313.943 592.754]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 582.159 525.406 592.754]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 570.203 125.416 580.741]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.313 556.672 246.544 567.268]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_aa8901b57298a07f38646153f2d69758b) >>
+>> endobj
+12866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.854 556.672 316.861 567.268]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 556.672 525.406 567.268]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 544.717 125.416 555.254]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 531.185 196.15 541.781]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_acf742760739750083acbc412d9b9a0e0) >>
+>> endobj
+12869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.636 531.185 264.643 541.781]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.052 531.185 490.645 541.781]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 517.653 196.652 528.249]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a6b42c1a55fb6289f7089db558ecbfb86) >>
+>> endobj
+12872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.138 517.653 265.145 528.249]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.554 517.653 491.147 528.249]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 504.122 237.485 514.717]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_afce69bc148af0df269b3355899c8f5fb) >>
+>> endobj
+12875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.97 504.122 305.978 514.717]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.366 490.59 242.095 501.186]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a3b61d05102d1847f07c10669bed29f9d) >>
+>> endobj
+12877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.21 490.59 311.217 501.186]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 490.59 525.406 501.186]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 478.635 150.064 489.172]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.57 465.103 251.269 475.699]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_a31213582a2896ef342d3bc88c379f345) >>
+>> endobj
+12880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.587 465.103 319.594 475.699]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.35 465.103 525.406 475.699]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 453.148 152.754 463.686]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.309 439.617 242.54 450.212]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__host_8cpp_af5f7a7a4078fa0202aa011c6b3e1e7b2) >>
+>> endobj
+12883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.597 439.617 311.604 450.212]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 439.617 525.406 450.212]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 427.661 150.064 438.199]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+12888 0 obj <<
+/D [12886 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5114 0 obj <<
+/D [12886 0 R /XYZ 70.866 412.052 null]
+>> endobj
+12894 0 obj <<
+/D [12886 0 R /XYZ 70.866 392.303 null]
+>> endobj
+5118 0 obj <<
+/D [12886 0 R /XYZ 70.866 359.049 null]
+>> endobj
+12895 0 obj <<
+/D [12886 0 R /XYZ 70.866 346.88 null]
+>> endobj
+5122 0 obj <<
+/D [12886 0 R /XYZ 70.866 298.69 null]
+>> endobj
+12896 0 obj <<
+/D [12886 0 R /XYZ 70.866 286.521 null]
+>> endobj
+5126 0 obj <<
+/D [12886 0 R /XYZ 70.866 238.331 null]
+>> endobj
+12897 0 obj <<
+/D [12886 0 R /XYZ 70.866 226.162 null]
+>> endobj
+5130 0 obj <<
+/D [12886 0 R /XYZ 70.866 189.928 null]
+>> endobj
+12898 0 obj <<
+/D [12886 0 R /XYZ 70.866 177.759 null]
+>> endobj
+5134 0 obj <<
+/D [12886 0 R /XYZ 70.866 129.628 null]
+>> endobj
+12899 0 obj <<
+/D [12886 0 R /XYZ 70.866 117.4 null]
+>> endobj
+5138 0 obj <<
+/D [12886 0 R /XYZ 70.866 81.166 null]
+>> endobj
+12900 0 obj <<
+/D [12886 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12885 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12918 0 obj <<
+/Length 2897
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ks·¾óWì‘[Â@£ñ:*éGÙ¢"o)ÛŠ¤$–ø
+I9¿>æAfggg S¹˜Á× 4¾îЋ/ ¹ø~ﯫ½ïŽ¼^x¬Õ‹Õç…“Â[»p„U‹ÕÙâ·ý·?¼ù°:ü¸< ç÷XX¢ý£>¬ÿòîøíß9|¿Z*’ûoªÿ®~<~¿<ðN1ÚkÕ|r|tôóñ26z·ücõÓÞájïŸ{
+rÈ…ZhÇBU{§W{¿ý!gøŸ?-¤ÐÁ/þ]5½Z@²€_.¿îým@í¬p^%*ÿòa
+._("”w©P«|¨Lð»#tÔi‹9S„Î%_—ÑK1oØRTuz£öçíy…û—ZÌT%+¤|3ôº*
+SÁa²*š#'PF›H =¸^öñêÓùÝ€6Èδ’Â2TÝFüÜè@+0*«Å
+Â_7~wþ;âúâáâæº6¬“ÆÀ./®Ïëߌ3õ/7Ÿ[Û“tyÞþ ÿÒ7'g“°Åf%,F{§!Id'é+‘cO,u-úÍûD£·Ú–À¤ 4ÙóëÍýƒ8½½]j³/fâ@/Ø.ð±²ÍG÷ÿ©­f]\Put#Š0ã!c‰%”®úñ×ö:FÑÊý\6®R^K€GZ Е€ÕFHâÞ?œœÆáÛÈp+g„Žv”/óB²O%
+ #H‡úêäþÛP(í…“EÔõ
+Íu
+z{=ÄÍéùƒ:=
+ 5SÆÞQ
+ u:p[’>MÛ=»q;$}q?ʸÚh9Û¥êLòìqÿCŽø`†—ŽÞ?ß*8F–§/f 7R
+<û4 «±€LÄ„æ©H…®—]âÖÍ,{‡a¶ÚºIÇíÕéWU´›¯Ž¶ZmSu¦Ñ/=É{Û·"£½œÞ\ßEÑÕµ83a3ëi'µ»ÖÀ lãmF­‘oÖ¼vàmÏy¼M,œ-ÂÛ“B7…·ó1[Þîb¾4oëÓ+.ÀÛ±'–foÀlx;ÁÜv7ØU)Nðx|_ị“Ë¡›gÈ“-—€õV8Ã)ìì«g¡ÚÚΗŠlÜð
+©T¥îž–½ž'dïòYÜн¡Ûê5Ôv¯av¸}¦„„³( ‡7U&Õfû
+žrýÌ’žA×d³èZ;üäW(bO®McFéº
+?Ó þ²ž H¦Ö6¤R•¹¬óY°å,!SÖd4wº7t¯ìç
+"S@–ñ\Ϥꔸì¸*÷Ý· eñ6š -KÜÞ‰=)9åöN̆·ÌçmÆw¬Jð6ãoLSx;³åí.æDÞÎoy» þðxw}ÒP÷õÙÞŽ”‘ _ñ¶Õ=ø Þö%¥âm×”B›‘·Ír·=õ†îÁÛš ¨Sñ6qªN)ÞÖzo뼺‘È€¼k>3ÌÛè‰Ú|fœ·ó1[Þîb¾8oKÈHEx=)RSx;³åísRÑ]¨9 _G5$" ]-Áâ‚.€‹lƒIgïRkHS@(2`¶ÞD”ºXâ ›ž'coŽVéÞÀ½ö^K$CkJ¨‹2¦g;,Öñz¬/` 7aØ÷Æ}`(c1€mí!iëá¨ñÖœboŸW쭪¦πĞØNy¤
+endstream
+endobj
+12917 0 obj <<
+/Type /Page
+/Contents 12918 0 R
+/Resources 12916 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+>> endobj
+12919 0 obj <<
+/D [12917 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5142 0 obj <<
+/D [12917 0 R /XYZ 70.866 751.757 null]
+>> endobj
+12906 0 obj <<
+/D [12917 0 R /XYZ 70.866 739.533 null]
+>> endobj
+5146 0 obj <<
+/D [12917 0 R /XYZ 70.866 702.936 null]
+>> endobj
+12904 0 obj <<
+/D [12917 0 R /XYZ 70.866 690.712 null]
+>> endobj
+5150 0 obj <<
+/D [12917 0 R /XYZ 70.866 654.115 null]
+>> endobj
+12914 0 obj <<
+/D [12917 0 R /XYZ 70.866 641.892 null]
+>> endobj
+5154 0 obj <<
+/D [12917 0 R /XYZ 70.866 593.339 null]
+>> endobj
+12913 0 obj <<
+/D [12917 0 R /XYZ 70.866 581.116 null]
+>> endobj
+5158 0 obj <<
+/D [12917 0 R /XYZ 70.866 532.621 null]
+>> endobj
+12907 0 obj <<
+/D [12917 0 R /XYZ 70.866 520.339 null]
+>> endobj
+5162 0 obj <<
+/D [12917 0 R /XYZ 70.866 483.742 null]
+>> endobj
+12912 0 obj <<
+/D [12917 0 R /XYZ 70.866 471.519 null]
+>> endobj
+5166 0 obj <<
+/D [12917 0 R /XYZ 70.866 434.921 null]
+>> endobj
+12908 0 obj <<
+/D [12917 0 R /XYZ 70.866 422.698 null]
+>> endobj
+5170 0 obj <<
+/D [12917 0 R /XYZ 70.866 386.101 null]
+>> endobj
+12911 0 obj <<
+/D [12917 0 R /XYZ 70.866 373.877 null]
+>> endobj
+5174 0 obj <<
+/D [12917 0 R /XYZ 70.866 337.28 null]
+>> endobj
+12910 0 obj <<
+/D [12917 0 R /XYZ 70.866 325.056 null]
+>> endobj
+5178 0 obj <<
+/D [12917 0 R /XYZ 70.866 288.459 null]
+>> endobj
+12909 0 obj <<
+/D [12917 0 R /XYZ 70.866 276.235 null]
+>> endobj
+5182 0 obj <<
+/D [12917 0 R /XYZ 70.866 239.638 null]
+>> endobj
+12905 0 obj <<
+/D [12917 0 R /XYZ 70.866 227.414 null]
+>> endobj
+5186 0 obj <<
+/D [12917 0 R /XYZ 70.866 190.817 null]
+>> endobj
+12903 0 obj <<
+/D [12917 0 R /XYZ 70.866 178.594 null]
+>> endobj
+5190 0 obj <<
+/D [12917 0 R /XYZ 70.866 141.996 null]
+>> endobj
+12915 0 obj <<
+/D [12917 0 R /XYZ 70.866 129.773 null]
+>> endobj
+5194 0 obj <<
+/D [12917 0 R /XYZ 70.866 81.22 null]
+>> endobj
+12834 0 obj <<
+/D [12917 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12916 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12922 0 obj <<
+/Length 3263
+/Filter /FlateDecode
+>>
+stream
+xÚ½\Iw7¾ëWðH¾!
+ˆNÅ 22(ç»?*ƒëÏÅ”ƒ—0Vtš´“Æx%½DpK fÍXÇÄD2ZàÊÓï›{øŽ Ü /tdàýsü 8åuJW§Æ¨äÜd •%eMÀ»*2à£fzVÏx çGPzÄ ØEœD8põp
+ØÜÖÔ!ÇžÚ:nlZ©HÄl.•P÷(2™ñÓ„ì´˜ÌøŽêI«m9¯Rˆ³GAÍwŒp‡³è*QÑgúqUФ]ð› iÆMòŠ*Zá"4…O=¯pѪh`±ÀÜ0‹ sµxx¼x¤ØA´.µ!h-Ë!”™ÑGÑ—"iE0«¶yc#(7ø,àrƒÔžánÜ«8™‡HO¤CîÅMÖ}7½I=q“ˆ¼пE­ŒëèÿPØôÊ$8¢énTp“DìMTˆµ ÄÌ Ý`Ì pDËÌ=„ú¹
+B§êý¥ aï iEO½®"áÎrå$œ{i›aûH¸
+Z"ã%0‰¬kísÌO÷w…jÃ:Ûº@=¨s­ ì‚RÀ¦¥å4ÉÑá+ª1È2‹æEARH´v õ40 úB[”À´  æ˜Km[wë6„vó&ÓÐz <ÑDŒSÕ´„ Hq)¤8BýÈUFJ˜œwcózýáž³.%]JÁ¥}°&׉˜†ž“¸§ýÓƒÇu0•¬©$€¢2¾(XÛ£üH¥› ˆTs[ 9"%÷ÖêÖÿc¶*µX<§¯z|C…‘†~©BE« D[Ñäˆ{kc µ^˜y)•¦çUª”%ñNî˜õ¶úyê0-ó88~Å->-T¥
+V71éNý ÝT ehJ‹º®¸ú|•?r÷®&Íò! h
+¾·tÐH_¢
+eR{H¹PR‡lcÐSdÌq#©Ñv÷¥C%¦–yÕÎÈžÀvÌ`8RºÁHI!Ò* Úª3|ðØš(pæGâoø̃
+
+È–QdˆŸ“Q€ÑNBô:!Œv’zà­“ì;I=îÖIvq?µ·¬.‹Å•l!H Ût2äÉ€©d#®P/•Å¨ ‘…Lª>BsÌq$*Ù’Ÿ&d§øãC¾£º/Íhø’D‰éxnC—m¿ŠÒ
+Ö² 'ê] ­Ye˜= /¥.ßÄîä^(RŒ°õB±ùos¡„z¡!’Œn’Œ^(ß"vÅ}ñ^(OŒõ³æŠAÇäeÞÒöµ€Q WGÉŽõ~n“.¥^®c{=¤½ràsèÀx@(}Ù„Èß:x¦îÍ
+„öôçÏDú„1
+endstream
+endobj
+12921 0 obj <<
+/Type /Page
+/Contents 12922 0 R
+/Resources 12920 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+>> endobj
+12923 0 obj <<
+/D [12921 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5198 0 obj <<
+/D [12921 0 R /XYZ 70.866 751.75 null]
+>> endobj
+12839 0 obj <<
+/D [12921 0 R /XYZ 70.866 739.52 null]
+>> endobj
+5202 0 obj <<
+/D [12921 0 R /XYZ 70.866 690.98 null]
+>> endobj
+12820 0 obj <<
+/D [12921 0 R /XYZ 70.866 678.691 null]
+>> endobj
+5206 0 obj <<
+/D [12921 0 R /XYZ 70.866 642.048 null]
+>> endobj
+12828 0 obj <<
+/D [12921 0 R /XYZ 70.866 629.817 null]
+>> endobj
+5210 0 obj <<
+/D [12921 0 R /XYZ 70.866 593.174 null]
+>> endobj
+12823 0 obj <<
+/D [12921 0 R /XYZ 70.866 580.943 null]
+>> endobj
+5214 0 obj <<
+/D [12921 0 R /XYZ 70.866 533.274 null]
+>> endobj
+12825 0 obj <<
+/D [12921 0 R /XYZ 70.866 483.772 null]
+>> endobj
+5218 0 obj <<
+/D [12921 0 R /XYZ 70.866 447.254 null]
+>> endobj
+12830 0 obj <<
+/D [12921 0 R /XYZ 70.866 435.023 null]
+>> endobj
+5222 0 obj <<
+/D [12921 0 R /XYZ 70.866 398.38 null]
+>> endobj
+12821 0 obj <<
+/D [12921 0 R /XYZ 70.866 386.15 null]
+>> endobj
+5226 0 obj <<
+/D [12921 0 R /XYZ 70.866 349.507 null]
+>> endobj
+12826 0 obj <<
+/D [12921 0 R /XYZ 70.866 337.276 null]
+>> endobj
+5230 0 obj <<
+/D [12921 0 R /XYZ 70.866 300.633 null]
+>> endobj
+12832 0 obj <<
+/D [12921 0 R /XYZ 70.866 288.402 null]
+>> endobj
+5234 0 obj <<
+/D [12921 0 R /XYZ 70.866 239.862 null]
+>> endobj
+12833 0 obj <<
+/D [12921 0 R /XYZ 70.866 227.573 null]
+>> endobj
+5238 0 obj <<
+/D [12921 0 R /XYZ 70.866 190.93 null]
+>> endobj
+12838 0 obj <<
+/D [12921 0 R /XYZ 70.866 178.699 null]
+>> endobj
+5242 0 obj <<
+/D [12921 0 R /XYZ 70.866 130.159 null]
+>> endobj
+12819 0 obj <<
+/D [12921 0 R /XYZ 70.866 117.87 null]
+>> endobj
+5246 0 obj <<
+/D [12921 0 R /XYZ 70.866 81.286 null]
+>> endobj
+12827 0 obj <<
+/D [12921 0 R /XYZ 70.866 68.997 null]
+>> endobj
+12920 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12927 0 obj <<
+/Length 3412
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\ß·~¿¿BH_N@ÄÃß@Q µÏi‚ÄvÝëCáøá|'Û‚ïtîYnáþõýfW’EŠÚ]ii·/‰ã¬ø ‡3óÍ gWNÞNä䧳?_žýð$èIÑ9=¹|3ñRç&>’pjry3yyþè/?>¿¼x1‘ç^LgŽèüÉÏ¿^´óøÙ£¿ÿvñôrªHžÿØüóòçgO§3o­ÃóšÖ?yöäɯϦüÐãé«Ë_Î..Ïþy¦ ‡œ¨‰vZxà ãäúîìå+9¹Áÿüe"…ŽaòïæÑ» $‹øÃíäog-ì@;×<¾»…g¿=/@‡'*@F)¤U äZ/~ºhÿ$=Þ*ì‹ê^\<¹xqñôÑžp›sA2]²«…5z+žÜ=[[:[§„܈ù¯©–ç÷‹›V û»û¢(%EŒÍÏȧ¥^)-\Há?ÎW@òByS‘"vlRÈ›©²çŸ—Ww‹ë4ŒÇA™ã¡]ZëzuõÀào§3%ϱóFç¿K+§3ö•ËÖZö„"C0¯0^(2Fx“Áå?ž7ö÷Ã,´ó¬Q+J¾/ctX’N’1ÅAxK™â>˜7Ðß·’¦»²ÜJºX®
+»é‘“fün8QÌ,p9짻×ó‡©+oIGá)³¥õšû[1Ä„ñ[1F «3ãY½{˜_Ý|,mÁÕ«x0rÕ>dìÎC3#ƒð·™ÂŽUl~<ÿº\¬÷ËÖG®Ö¾r»XÎÛ?!˜¬CÖ›Iºoþÿ¥ï¯n
+v*a×…x7†ŽÓG";AtgÛ•4VjD/P‚…:íj`" ir)æ»û+qýáÃTÛsQ8‰™²A7™ñÍ:î®®Vˆø+½K‘P
+é—­‰2Ti›b6{¾½¿æ½_-Z ÏË¢JŠ$ Ô[ÁÅT„È·ó“ûÎ÷(á½,«Ÿ ¯«u)P?³M„mÇd¶q*¤˜·‹×gšoŸ  }da5àH¥Õ©Ú×ɬ"´£ },*L7R‰\÷­Ù\ü‡Iz^®iÈ›€g£3™DÝ[eƒ·§·•Üí©!ˆ•(Mó¸S<n«P’ë궠C™ºg- Þ±!M%ƒ’X !I>5&+ÙðW †Ìá.™#aU 1zR*E™ ¹k 2Q‡bÞj‘‘»ËP—”ƒ„S5N0Ç`«â¹0”N }Î<+`§ò)ærþq5/¤ƒ:W±†uiè<5@çWË®¦°†øª†ñiîpû8@÷LÚ×8o#qŠ.;ïÃ4â€T# ô g\¦ü/-´ ×Z;Up­Þ»®C/6Žøau»£á÷(±D×Ci/ x!ßÝ*Z_T€\ß$˜›<¼
+£\föƒîl¾\9”9˜óËPÃX&$y~ˆkËåm¬j ‡º¦CY]Ø[˜Ýíš…fÒ…>È]7Mz‘÷mˆýwf›™‡F×è`ýÔñT!ŒâË7c.VàË=VðÌ5ÿ'˜#ù¿§¶Üy9ö^­TóBŽâ€z¸äºN0u©”…^j€:µQØóÔRX¸ƒ­ iß\('RU*…ª
+N2žS23‘o^
+s¿Ê©
+ÛÑð·hUf}_cznkÑùRt­ûb¯;) GO±i|M„£«
+±×ĦÓ×zÇ#®#ï.â× ¼†óB?>îò:Ö»ã×Qwñ`{Z™(¨(²Ä¨̃­iž~ànåxÐ
+üJËøÁ3ÃýlKýƒg ÛÁ³q
+R+K¥ª5ª¡!d<MÈØó
+° É€ ³v;«;jH…òÌWŠ?°
+0gšÆu»I™}óÒa|›—Sü/0èz51{½W'¼ÀFr"¿"m NÄJ^º!œ8sÉ»˜c91vqb˜(ÖÙѤخ„¼}
+ø†¨lnÝeò¾·0æ>Íü_¼Å`Ô¸›bþîkˆ5&i›/ÈÆ!Ÿƒ¬€¹NÌrÀ‘M)›dÚñW|šñgšÙ¥ìÒ–²ÔÌ4ðôé~‘V‹àõž1îHÁe´Á6k‘ìÒ›òôLT”müÅ·5óÁFyí—šâï’©ÍwÉÖ.#åŽÏÀ 89×0a'kþÃby}ûéfóµëcü.ç–þXZÒ7˜ú‡Å»Â:ÍûdÛuþT_
+ Ÿ¶°¶¢ÍÎü»û7onqäâÝwÍÇxdêÖÙÃךy(}“&"ÄMHê1ì2ËN…Vš›bü‹-½>,¨"ŒY2úæ6w²ýHÆZ-ÛOk—¾ÔmÁÚtÌwº[ë´ÉYò‡/Ý„_ÝÄgålý_V4¯Ð
+endstream
+endobj
+12926 0 obj <<
+/Type /Page
+/Contents 12927 0 R
+/Resources 12925 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+>> endobj
+12928 0 obj <<
+/D [12926 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5250 0 obj <<
+/D [12926 0 R /XYZ 70.866 751.728 null]
+>> endobj
+12822 0 obj <<
+/D [12926 0 R /XYZ 70.866 739.473 null]
+>> endobj
+5254 0 obj <<
+/D [12926 0 R /XYZ 70.866 690.772 null]
+>> endobj
+12835 0 obj <<
+/D [12926 0 R /XYZ 70.866 654.047 null]
+>> endobj
+5258 0 obj <<
+/D [12926 0 R /XYZ 70.866 617.369 null]
+>> endobj
+12840 0 obj <<
+/D [12926 0 R /XYZ 70.866 605.114 null]
+>> endobj
+5262 0 obj <<
+/D [12926 0 R /XYZ 70.866 556.413 null]
+>> endobj
+12829 0 obj <<
+/D [12926 0 R /XYZ 70.866 544.1 null]
+>> endobj
+5266 0 obj <<
+/D [12926 0 R /XYZ 70.866 507.296 null]
+>> endobj
+12824 0 obj <<
+/D [12926 0 R /XYZ 70.866 495.041 null]
+>> endobj
+5270 0 obj <<
+/D [12926 0 R /XYZ 70.866 458.237 null]
+>> endobj
+12831 0 obj <<
+/D [12926 0 R /XYZ 70.866 445.982 null]
+>> endobj
+5274 0 obj <<
+/D [12926 0 R /XYZ 70.866 397.281 null]
+>> endobj
+12837 0 obj <<
+/D [12926 0 R /XYZ 70.866 384.968 null]
+>> endobj
+5278 0 obj <<
+/D [12926 0 R /XYZ 70.866 348.164 null]
+>> endobj
+12902 0 obj <<
+/D [12926 0 R /XYZ 70.866 335.909 null]
+>> endobj
+5282 0 obj <<
+/D [12926 0 R /XYZ 70.866 287.208 null]
+>> endobj
+12836 0 obj <<
+/D [12926 0 R /XYZ 70.866 274.895 null]
+>> endobj
+5286 0 obj <<
+/D [12926 0 R /XYZ 70.866 238.091 null]
+>> endobj
+12841 0 obj <<
+/D [12926 0 R /XYZ 70.866 225.836 null]
+>> endobj
+5290 0 obj <<
+/D [12926 0 R /XYZ 70.866 177.136 null]
+>> endobj
+8744 0 obj <<
+/D [12926 0 R /XYZ 70.866 164.822 null]
+>> endobj
+5294 0 obj <<
+/D [12926 0 R /XYZ 70.866 146.641 null]
+>> endobj
+12925 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F14 6622 0 R /F97 8866 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13004 0 obj <<
+/Length 4118
+/Filter /FlateDecode
+>>
+stream
+xÚÍOw· Àïþ{”Þ«þyL)M^»®zèKr%ÙÞiåJ«´î§/0;ã FœÝY™Õ%’£]þ
+)©dý6Å|p*`tºéþÈ·0ZAȱ?´Ñ(Ý)yú°ºX/oW÷ Ý—¿:õõ,^š¬LÊ›/þbm`ßYüü’zà÷cŽn——íßH™»­Vo›OQGÜÞ|*ÙU>Úx«4Øý†“ ì‚2Z2*aKÄ÷WëÓƒŠÁH0~Üμ¼zìôÑùÃu‰  ‚ vÒʲ ýûòâj8N4¿è —«õÆ.WÇF=Üàÿ3ü³/ÑBô8ô;¶=5÷„Q·AÁ~³¨ 5½€-x½i °¥FØåQ7øI+ÁôcžåÌ£n”`ƒÃßaÈÞ5ê‡F;EåÌ<£mðgH£-liÂh×3»Ñî3[ç)MOFeÈÜèUŒ™sÿéû±¡. 1Æmâ´!¾_Ÿ¯—›Q×CP)a¯iTG¬&Æ&`Ó}×W—%7Ãú,Mè°.shgýœ™ñ“ø]fF×v3×·‘V£I­Fóøñö~½+ŠÐß¿:Å ‘±)ÛäènÆ~ac\Z»Í‡Ï«Œ&Ñ~æ–>TDÉs$´‹,ÚýecØ_&AÌÖËÕ‡‚ÏÐôºI€ötš'ÆHy–[Ä”Qf_å.˜ئ!‹ m‰_’5Ȉ91œYvÊ~0g`Rö£3ßßÝ–BrN*biQ%Çs1qhÃD‡A‰N%×ÃÁäú•|£Ɖ9ƒ@q!*‹¾X_PK:Á„â@€ÙŒ¹%qHÊÚ,ÁÅš/›Ì¹ëwWç—÷åÉÄ .Í&Ú¸×wïžàÎ7£µÛ9 wŽ’­b"°_g³Õè( ˜*ºuv[SÜ„tD4Ôä#Þœÿ·l£Î$"ÖCZ'FÜj¡žìª–Jj§Vا³Ïhf´OL42ˆ(¶0ÉB뙉ö™[c)8#ÁECõÖpۋûRžá°ä¡æˆ%Ï€ú'GR»ÛRq45¶5›¥º¨–­–Š-Eli¬_Ïìfý>óòóêü „ÇÜä”
+æËúÿýúî–ö
+@­Çh>Øç°Þˆµ°€vÉ(c¸r#ët¢ÌLÞØœøëÍÓØýꜱÌ€îh8sû£":øQœ÷ÍÀcµ0ú"ÖÂõLzærâÐ_¤cˆ H@i}}8¬OiëZ–ÐŽv® z´à‹ý|kÿ4gÐûµõ¾ôæÖ”]ˆÈ6odÌ)y£
+0Û›}säâ3:V$˜óY Æ OÍk„Y„Kï¦!W<<Y!qé&J—"wïðdèª' Ž3tUŽôÞ¾á p0©(ªh{~àâüžJV`ì,±€î²’¸Ò¢\dB(¨Fv‘ ÜyÇw=¶½â›aÇn—KÐœ½WMôÌb
+L×ÍSV7a¶®'¶“uŸ8Œ
+>
+@ÊÈ âqÁeaiŸîPØýÃf­^˜ì›ËkXÏíp­¯Æa©c綳u’Žtˆ†ÜFäÆ'i‡á“nzŒµ'²k iŒë»6²œ\ë‰8K[g8qëŲQDQ:)w èˆGÆøäÛËô=úöQÑ#QÔñ;b±—ê…¡'_té-빞GÆÎ#· ƒ~aÀ0ºˆ¿k>Œ'ë82yÚ(è\½ÞúæýÍGF<²˜$˜´œÙvûoËÕåp(nn/—´¦§˜|msô°uk¨ôÁ¡q;. å:_vvX:t0Òñê*v⿇èÿÖ™þ
+endstream
+endobj
+13003 0 obj <<
+/Type /Page
+/Contents 13004 0 R
+/Resources 13002 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+/Annots [ 12924 0 R 12929 0 R 12930 0 R 12931 0 R 12932 0 R 12933 0 R 12934 0 R 12935 0 R 12936 0 R 12937 0 R 12938 0 R 12939 0 R 12940 0 R 12941 0 R 12942 0 R 12943 0 R 12944 0 R 12945 0 R 12946 0 R 12947 0 R 12948 0 R 12949 0 R 12950 0 R 12951 0 R 12952 0 R 12953 0 R 12954 0 R 12955 0 R 12956 0 R 12957 0 R 12958 0 R 12959 0 R 12960 0 R 12961 0 R 12962 0 R 12963 0 R 12964 0 R 12965 0 R 12966 0 R 12967 0 R 12968 0 R 12969 0 R 12970 0 R 12971 0 R 12972 0 R 12973 0 R 12974 0 R 12975 0 R 12976 0 R 12977 0 R 12978 0 R 12979 0 R 12980 0 R 12981 0 R 12982 0 R 12983 0 R 12984 0 R 12985 0 R 12986 0 R 12987 0 R ]
+>> endobj
+12924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 739.007 206.856 749.418]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a9fb362632a8eef3cc456463618caf489) >>
+>> endobj
+12929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 725.724 200.607 736.261]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a4a4eaa91f37f6ce35c395c9612f7f2dd) >>
+>> endobj
+12930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 712.567 195.792 723.104]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a1bb01d2460cbd7c0a501f651d11722cc) >>
+>> endobj
+12931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 699.41 222.583 709.947]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a9bd86923cf5c44b468a613484158d49a) >>
+>> endobj
+12932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 686.253 219.31 696.79]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a1266b75dc816aa8a22f3b21af4b264b1) >>
+>> endobj
+12933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 673.222 215.007 683.633]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a799dad1d4df9aadca9d93c9ca00e5dc9) >>
+>> endobj
+12934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 659.939 215.096 670.476]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aacdb14c5b22b8dc071f51296785df1b7) >>
+>> endobj
+12935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 646.782 207.529 657.319]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ad6ab0879c01b95219fb7f4b06b5dc0d0) >>
+>> endobj
+12936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 633.701 197.908 644.162]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a0b7c436586f0f30202151561a629db68) >>
+>> endobj
+12937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 620.468 198.41 631.006]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_af93200ef24f801fb764205af48517596) >>
+>> endobj
+12938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 607.437 191.443 617.849]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a21cdbb75074112b4024ad5d6cceffe72) >>
+>> endobj
+12939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 594.154 191.945 604.692]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a8d3a262496c83915d04d9533be1b20e5) >>
+>> endobj
+12940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 581.123 200.41 591.535]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a4c6ad11ae8e3b69777cb9387f993844e) >>
+>> endobj
+12941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 567.84 200.912 578.378]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a7842369cb7daf90ca74860d9fddc368d) >>
+>> endobj
+12942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 554.809 179.787 565.221]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aeec4f47353e07c1801f0d3d0d8145859) >>
+>> endobj
+12943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 541.603 197.46 552.064]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ae95bae0d4deb69450306f4d64d5448d8) >>
+>> endobj
+12944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 528.495 180.289 538.907]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aa090f4212b6df25daa8f3d479722c4b7) >>
+>> endobj
+12945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 515.338 190.26 525.75]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a2e744170a02866e7ef84bbb1fe73e6b1) >>
+>> endobj
+12946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 502.181 182.782 512.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a9fdcc2472d1931df5cd1694b2be759ce) >>
+>> endobj
+12947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 489.024 199.961 499.436]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a05f1d26e9c8fe5f77dae36619f088253) >>
+>> endobj
+12948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 475.818 217.634 486.279]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a6ca6caffa2f957e16416701342140e9c) >>
+>> endobj
+12949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 462.71 200.463 473.122]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ab1696aaaf0f4309ccdfad6159f6023c2) >>
+>> endobj
+12950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 449.553 210.434 459.965]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a6e40f4b1e503928f52e03c70f06f4eed) >>
+>> endobj
+12951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 436.396 202.956 446.808]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a7b7267844f20fdc252480681251e3536) >>
+>> endobj
+12952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 423.239 200.58 433.651]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_abff993d1194f310062adda9c60f955b6) >>
+>> endobj
+12953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 409.956 201.082 420.494]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ae77ef84108e70c3ab0503cc38cbc35a2) >>
+>> endobj
+12954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 396.925 208.291 407.337]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a34ac5d6c6c0015adde0d1ce78c376217) >>
+>> endobj
+12955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 383.642 208.793 394.18]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a729e21d960b0223e169e05a8acf8d4ba) >>
+>> endobj
+12956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 370.611 201.53 381.023]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a933b20249b044183921972d8676c94e3) >>
+>> endobj
+12957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 357.329 202.033 367.866]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac4ae111e728149f41e037365ed297a03) >>
+>> endobj
+12958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 344.248 213.393 354.709]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ab3553013e823dc8c49042cbf1cdd6f62) >>
+>> endobj
+12959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 331.091 235.422 341.552]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aae7f6f2f6a2ee0eb5b07b380dfb453a8) >>
+>> endobj
+12960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 317.858 234.705 328.395]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aa7b959a46e64cfd8ef3620d06888c770) >>
+>> endobj
+12961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 304.777 188.61 315.238]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_af857e1d153e38bcdca441c5e3c26a3a8) >>
+>> endobj
+12962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 291.544 189.112 302.081]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a1ecfe49a42fb730dd9b5d6cca64943dc) >>
+>> endobj
+12963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 278.512 195.155 288.924]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a5b75f32f2dbc7873d969b76ebc92a50d) >>
+>> endobj
+12964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 265.306 227.541 275.767]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a65924ec300f23ed4ec7d0a2c4d1f3411) >>
+>> endobj
+12965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 252.149 231.756 262.61]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a0f76ea50bc86d12bc1fe59cf10657c31) >>
+>> endobj
+12966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 238.992 189.937 249.453]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a5af12e6a9a73b7793c140e55195f0e07) >>
+>> endobj
+12967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 225.759 190.439 236.296]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a36b0b9769710da08d8e8ad0fda1660e7) >>
+>> endobj
+12968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 212.602 231.271 223.139]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a7da283287ea13d33ad052e27d129c1c5) >>
+>> endobj
+12969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 199.521 235.252 209.982]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac4d699632336d112bd5fd4fd7aff72fa) >>
+>> endobj
+12970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 186.364 245.223 196.825]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aa6fd1a40bffe97ed36e211e5ac8b6393) >>
+>> endobj
+12971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 173.131 235.754 183.668]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a6fad2362034e1526898da798a2c522df) >>
+>> endobj
+12972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 159.974 227.972 170.569]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a8d9d798a5d847e499238d837a4bcff48) >>
+>> endobj
+12973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.457 159.974 296.465 170.569]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 146.817 221.31 157.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a02f8ad5383a87505b6fbb0793d9adc46) >>
+>> endobj
+12975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.795 146.817 289.803 157.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 133.66 213.742 144.255]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a89acf61f55afe8305385d00765fe1917) >>
+>> endobj
+12977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.228 133.66 282.235 144.255]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 120.503 210.873 131.098]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ad2e915a8b7d831cfc0aed125293ca876) >>
+>> endobj
+12979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.359 120.503 279.366 131.098]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 107.346 204.623 117.942]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_af0db031140cfa95716ef8b0dda401aa5) >>
+>> endobj
+12981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.109 107.346 273.116 117.942]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 94.189 204.408 104.785]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a2e8f52ee3caab9def89232803763338f) >>
+>> endobj
+12983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.894 94.189 272.901 104.785]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 81.032 198.159 91.628]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ae6b4fcf7bd782c5dfe63d932c35cdefd) >>
+>> endobj
+12985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.644 81.032 266.652 91.628]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.379 67.875 213.265 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a60c915c14c15fd1eaaf567f64c8709cb) >>
+>> endobj
+12987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.64 67.875 281.647 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13005 0 obj <<
+/D [13003 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13006 0 obj <<
+/D [13003 0 R /XYZ 70.866 753.823 null]
+>> endobj
+13002 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13126 0 obj <<
+/Length 5623
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]Ms7’½ëWô‘ŒÂ@fâë8kK³31ciµÚÆg´DË K¤–¢fvö×o&ªKl€UÕUDªw/¶Âná½ÂÇË
+Ùë]¹ï×x>üÉ|ÿêÕÐa]÷úù‹ç¯ŸÿøýóÇäÆqHÉ$ %näÑx¯ôì~líá“? Ëß<îbpÆŽtÿ
+à ‹ñ¯í~ºñûû9ø³Ûëwûÿ'ÔîÞï9¾.¿
+În?~zü CÁ€°­k+®“ü âúþê~Í;þ¡S@ôd0¹òóÛ_¯Þ}ùp5ËcŸ,(àf4”¡Æ½¿¼¿ö``Bij¿ZogåìÍ0ñ±…
+lxÉú¶onÎ=ûòñç«»soGN“«†È›È vó J†ÐOÌã ÐȘ5@£7>5 ¥·¿{áh—ù‡Ü¾hñ š5ˆµ8ü¦nÌäão~»¾yw0–[¼@^@<§vΙìýѦÝØôÇÛw×ü;¸ºãEåê)|áÐ8ëÊ¿cð½b)ª?#–`(ðêGî@êLoœBÚÀõÍõ”dR4Ž²&e“0טnߊ±ÿm—-4]?l`ãˆ5ê´`J·?Q0‘ŒC…> lÉ›>š’Lá:'R‚؈_‘CÓw’)$Šd.±Aâqt©Ÿ ²T%›j6­dn_SdÙ%
+vˆÆ»{Ay²“£ÌJäm¬.¾ìÓëÐvêÑݪ¾h¹÷bV ƒ–{/¤¦÷¶Ê¯„Ì*lØSCFA}]6¨ÀŽ¸…œ×Îpâx$ ìÇ%[$kn†×°¼¢I¼ö~X^Ñ}{L}½–ú&Ö~ž ƒúÒ·W_›ŒuNC}m,Z1„9W3în,M?¦·Å2V˜Ëþn • ¼¦°ùØoáòêÐŒL·é§§ø¼%3ØO‡'wÉ V½÷§Weâ"»Ymßhø¼`$‹ÑMO|Þk§¸ˆ´Óèqy“›àÇ D¯J"§¾=™èFàïH'syC&¤áòJK–âÀøËÍ´ìz–]PA üs× .Ènä•êT€#/UÛ
+±óN$0¥%à_Ü=–8Øk€JL5æ\ãJô¨€YŽ[6 KAŽ5Îi|,X¹Òækà™»D<ÞO rxÝ’F?A”CöXÓ¼NÄdgUØÈ`P ƒÀFBÓ{÷‰ö÷‰–èÈæ(F :™#}ˆÍÔ]kd„ìl“%yÑMÊÞ|Z³¶ˆGºl(öƒF9îk×e6û9ȉg×Vädu5f9Ù5³`ÑÈpì#÷lhû…¨¥ˆfÃu¨¾-sÏö9RTØ2—–<¥5[æ
+ û-ó
+t.šáˆ? PIÞûPƒ.E3ñû¨œ8â§Øt±z4ñš×è'`Í“+ÝíÑ DZŸZ_Ǻ÷6G3<˜è5èÉËùfê*œJÆ’A¹XѯY[å€Ë rÀæµk«Ž²*À>›”óìÚj¢0öo` ˜o'å©MüQópÀoÓÑ ÛD‚ÈNP®`† ó”†b:–0““
+û“5æýåЩŸ¯ÿGäãj:‰•ÙÍV`ò ‡ ¾E+s`ÞOöG+ºOIbå¬1~’Ä
+©¿§$±²¸IýtdÿϺšÎ£‚©qŽM,`àè9¯½AtÔCümÎC,,k|êòã ±Á–#I åEÄ
+h Ò°ËS!®Z»–ç j0K±f ˜=)Ñ•; èn_»ì8ÆøÉPÂfü¶¯]Ìà4èpÞÕtÖîÔúŒž›L'3°‘×0°$!­1°ý£­07Ø~£­LU’»z¤˜å®Õˆê²À±J ’DˆMm–¹máØH)£¶ë¶jB¤ÁGé'c¹&UÑ™´çó3™ ¯ÀEn¨¸f!÷!PŒ$® –£cyõÈ,S—Íä‰"J¤%J¹Ž‰¶©b,'$(!`¾¡4SMX¨`z¶”kÌ5º˜Í/j0ÈžÍ/6 ¦·Rˆ'\?"°Á—$j=ô꺘ÊBS yÁQÓA›u¬ñ ÀÙÁiún«0ÊuTaÞ¯¨é,;K2ÝB>™³ä˜,‚³$g«`•³Ô9:K‡˜?‹"ŒižûëWÓgI“„ý 2O׈5ýl„W¢ >•3,ÝíOÔ?tR=±¿íM,W¢èÈÁ,ïj:ËÙ™_“™)jxšL„•csY#aI”àh"¢pLD
+[ßåŽZt£8¨TÓÝžŠûRNo]Ó{›³<˜,w
+täV»ÃšÎ§›ŒnÈEy‰YA¸!Z³¨€8ªÃäqèÇÅá
+ :iI^6:–¡S@Ügè*Ä«5$ž+¨A@.øX¬ èa“R# @03]¨én/Âƽ5†OŒ»ìÕ½·¹[*¯ZõÓA9G•\Mg9—úòpº<ä-¢‚9•Ë³q•9íFíé!仫_¤dËå—÷Ÿ§óçÞ&ìDÆåTc‹ü¹·±Ÿ­¤Ï]Ž5Û§äÏ}¤~6’@‡@Mß=!ƒ.EUúÙÈ­åj6“õí¯"ûåO·7Ÿ§ÁŠ"›ÎâN×Éb}Ö€–xs@e_Nÿ': )É¿´ì^æÞÞ]]Þ_M×+õì€(ÀÊÕ™kØË_äU±›ëû)+-¡ŸKЙûÎ6Ð/?O]0æøCP
+†"•¯”âÊR~rfO»¼ˆˆ5ö²b»•T ¥[l çÌP.»úA š®@§ÍŒ|ÇV¯4º²D¾¦;e†„ì¼Âr†¾ŸŽ<eƒíl9,æ‡û:”`Á IR/)Ð!'uÀRMg}1?&»h†îÍÐêÕ5š!è½Z±ºF3Ô:š¡
+t±®Þ13$‡“QÅ EËòÿÔ õ¥*%½*NzªRZr!.fB††0¥8=Ï‘
+sÑò„ÁéT€–ç“ ÕÐúiÊX®¤ôÓîs) SÑÝž¦”;»¤A‡mdjzosš’Ó:衼p\ÑÙTƒbÚXâ
+9™£1J!rßÌÝâsBÏÑ0dSªxrÖi(=·$[Ç6¥÷›Râ¢ÎË‹¤Ì2/ñÅ!°¾Ê'cQ£ŸDå#4ý´}ûØ'bØOGnàåÐôÞæ d¹džèˆÊË›ž •—ívþ•.¬Ÿæ„Ä:¥’«i çU^ì(€Ù–¢ÙÕõHåsИ¥«oæÁÉT>G8‰ÌC.…)dä:K<.óýˆ£Ì"®‘ù~ä½Ì¼üï©ÔûÑÖk@f¹(ækÌOw·o§RWÖ$ž6ý à¤øÔ êö,&-º²oÝÒݼ‹µ':òE€ÔôÞV{Æ3(iL Ì<–T“Y>¨h}ɨô«Ò‚úÈæÙp&:ËhzékçËdZJ'p¬ ¡m?&ë<@TaÓ‰ Y€’o §í¯l½J™}Ð<”Ù¯@ç$ÈbûÖ
+.'êp:-A2Ížš=gÇÈ9 º²l]MwJ‚„ì¼…²9×O帙¸ÔUï=HÇ¿ƒ-ÒÉ©T¾î§#oX&ÀšÎ£S$©2¿
+Ùyy ~ÆÕ–uIõ—”ì¼­]ê_ÜÝÐ_܇ÐKû¬32à8X@WŽ¹¾WÁ2!WªŒåcoµ‰F&±_ý°Œ—Ý…
+ön¸ìW¦¬á…û<o- ±4ö=YÃ0—¨ÜÑGïÅ9UAõâœÖ Ë†0—×tÛ~ïÌŽ®Lœ=Kì|žmxv¾1„@åaCPY¤PƒÎøâþÉÏ%ÈæoJt³g»jº“¾¸_xŸ€¤ˆ€¤È:›Þ;ðÅÃþ4ӹ쓳9RÓ;S’Zaå÷Ó†P‚GÐXoò°€wnn©_<Æ–—8V–(s`/„ÂÐœÒ]²u{ Õé
+[]yf¯ ™å}ÞÖ‰.Fì ù(–†h|Ðèý\ÄGÑi@’$P]y,â“
+&
+ÐK“
+z.â“s¾˜r\Ê×óñžyèÇ”x/¸fXçâ=èˆ÷(kLB-À”jºÓñ,Ä{±\wé§#ñ^Ú=M<=‡>¡•[Œ÷¤Êj?rϨ¦ó8Þ;$µ&Þói9ÞS ¾÷V/ô1Þë‡ã½
+zé@Ór¼'—ZBÔˆ÷¤%Š+ã=ØÑšV°ßÌ~÷ÂãÎY}&JÜÕRᇻPå/°Æ_8kíÙ‹/7oï¯oo†üí·o¿|¼º¹¿,ÿilðØò årk¯´ôw9f+§€¶f˜ ±ñç­TÒÚÔ•¶“‘ÒÐÒX{öº ±c‡Y•ÄéÌê²­”—q“rô†(UÈs¦’ÿ–CLi!X¬0?Üý|þ°1²?ý½÷Ç×¢¸»øëM_¦ð€Ë©íýonåGï¦ µ•oŠ}_}ÓÃz©ÖÕX_jÎW³ü‡«ýp]&—ûíŽ×7WßX9‡?Üþ2v–…Wã“o¼½œúJ” ÞRìϹÎ×ÖeƒWZ"·?¯9ùJ
+°²×bc »¬&8 U?´¬ªCè99ÉåùÑ~ÐR^.¹”燸FïÅ
+'%÷à !†.9‰®¸¸ýr¹»BX¡&ýˆ{59Dœ“¯©“ŠÅþ/yv3Wò·'l†×L¸²-$ż # b ý¿÷Ó±ã
+endstream
+endobj
+13125 0 obj <<
+/Type /Page
+/Contents 13126 0 R
+/Resources 13124 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 12901 0 R
+/Annots [ 12988 0 R 12989 0 R 12990 0 R 12991 0 R 12992 0 R 12993 0 R 12994 0 R 12995 0 R 12996 0 R 12997 0 R 12998 0 R 12999 0 R 13000 0 R 13001 0 R 13059 0 R 13060 0 R 13061 0 R 13062 0 R 13063 0 R 13064 0 R 13065 0 R 13066 0 R 13067 0 R 13128 0 R 13068 0 R 13069 0 R 13070 0 R 13071 0 R 13072 0 R 13073 0 R 13074 0 R 13075 0 R 13076 0 R 13077 0 R 13078 0 R 13079 0 R 13080 0 R 13081 0 R 13082 0 R 13083 0 R 13084 0 R 13085 0 R 13086 0 R 13087 0 R 13088 0 R 13089 0 R 13090 0 R 13091 0 R 13092 0 R 13093 0 R 13094 0 R 13095 0 R 13096 0 R 13097 0 R 13098 0 R 13099 0 R 13100 0 R 13101 0 R 13102 0 R 13103 0 R 13129 0 R 13104 0 R 13105 0 R 13106 0 R 13130 0 R 13107 0 R 13108 0 R 13109 0 R 13110 0 R 13111 0 R 13112 0 R 13113 0 R 13114 0 R 13115 0 R 13116 0 R 13117 0 R 13131 0 R 13118 0 R 13119 0 R 13120 0 R 13132 0 R 13121 0 R 13122 0 R 13123 0 R 13133 0 R ]
+>> endobj
+12988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.027 758.07 217.415 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a5d4a882956d239429012df086aa92a58) >>
+>> endobj
+12989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.438 758.07 289.446 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 732.35 192.752 742.946]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) >>
+>> endobj
+12991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.238 732.35 261.245 742.946]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.654 732.35 452.951 742.946]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 718.585 210.425 729.181]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a5fe0c1f24f495b7008dc5cf5e56ad6ec) >>
+>> endobj
+12994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.911 718.585 278.918 729.181]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.327 718.585 470.624 729.181]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.82 193.254 715.416]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a91aff80928b0d402d4c43c113b671c14) >>
+>> endobj
+12997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.74 704.82 261.747 715.416]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+12998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.156 704.82 453.453 715.416]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+12999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 691.056 203.225 701.651]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac83571d32139ab9d16192faa66d9bb7e) >>
+>> endobj
+13000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.711 691.056 271.718 701.651]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.127 691.056 463.424 701.651]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+13059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 677.291 188.995 687.887]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a2660b0549f99e3d4dfe393365204cc3b) >>
+>> endobj
+13060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.481 677.291 257.488 687.887]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.897 677.291 449.194 687.887]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__lock__target__t) >>
+>> endobj
+13062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 663.526 212.926 674.122]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac885fbf2e7f51874329635e35f29da40) >>
+>> endobj
+13063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.412 663.526 281.419 674.122]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.828 663.526 493.299 674.122]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.634 649.761 232.744 660.357]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a6b39cd17288ecfffa3ff0e67bc705d6e) >>
+>> endobj
+13066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.375 649.761 303.382 660.357]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.441 649.761 525.406 660.357]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 637.932 99.262 648.344]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 624.041 213.428 634.637]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a33d2b782ddf82056f797bd7abe579b9f) >>
+>> endobj
+13069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.914 624.041 281.921 634.637]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.33 624.041 493.801 634.637]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.818 610.277 226.728 620.872]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_af5d517293abea69dd776b3d4d978aebc) >>
+>> endobj
+13072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.542 610.277 298.549 620.872]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.935 610.277 525.406 620.872]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 584.557 209.169 595.153]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_acf9451614f1a7a49aadaf5ca4205386b) >>
+>> endobj
+13075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.655 584.557 277.662 595.153]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.071 584.557 489.542 595.153]
+/Subtype /Link
+/A << /S /GoTo /D (structomp__nest__lock__target__t) >>
+>> endobj
+13077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 570.792 213.545 581.388]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a0ba10731a8f3b08b4daa3b3ce9eb04e8) >>
+>> endobj
+13078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.031 570.792 282.038 581.388]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 557.027 207.296 567.623]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) >>
+>> endobj
+13080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.781 557.027 275.789 567.623]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 543.263 221.256 553.858]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a1e1563d04c8034fe03e103f00b15d8c0) >>
+>> endobj
+13082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.742 543.263 289.749 553.858]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.797 529.498 227.066 540.094]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac0b930432bb81181f1a71528d8b029c0) >>
+>> endobj
+13084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.552 529.498 295.559 540.094]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 515.733 214.495 526.329]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aeeef81c81bad500a729ea5b15583a35d) >>
+>> endobj
+13086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.981 515.733 282.988 526.329]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 501.968 208.246 512.564]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ad0f30ff60d38cb79deef3369d25b9dbd) >>
+>> endobj
+13088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.732 501.968 276.739 512.564]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 488.204 226.358 498.799]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a604337c27b72f4540b47da11bd8f844b) >>
+>> endobj
+13090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.843 488.204 294.851 498.799]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 474.439 248.387 485.035]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ac45d090cdbe79f6befc4cb13a328a16a) >>
+>> endobj
+13092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.873 474.439 316.88 485.035]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 460.674 247.67 471.27]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a684a3a9801845170248bcaf4dc099cc5) >>
+>> endobj
+13094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.156 460.674 316.163 471.27]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 446.909 201.575 457.505]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a0dc024004959b0689c8c0797545ba539) >>
+>> endobj
+13096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.061 446.909 270.068 457.505]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 433.145 195.325 443.74]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a173a599cb71e90363876cf3432c07802) >>
+>> endobj
+13098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.811 433.145 263.818 443.74]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 419.38 208.12 429.976]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_ab8645400827727abd213d884fa9394f8) >>
+>> endobj
+13100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.606 419.38 276.613 429.976]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.961 405.615 242.978 416.211]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a4e383c4e60024718afe9747911bc9472) >>
+>> endobj
+13102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.936 405.615 313.943 416.211]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 405.615 525.406 416.211]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 393.66 125.416 404.197]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.313 379.895 246.544 390.491]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_aa8901b57298a07f38646153f2d69758b) >>
+>> endobj
+13105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.854 379.895 316.861 390.491]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 379.895 525.406 390.491]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 367.94 125.416 378.477]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 354.175 196.15 364.771]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_acf742760739750083acbc412d9b9a0e0) >>
+>> endobj
+13108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.636 354.175 264.643 364.771]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.052 354.175 490.645 364.771]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 340.411 196.652 351.006]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a6b42c1a55fb6289f7089db558ecbfb86) >>
+>> endobj
+13111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.138 340.411 265.145 351.006]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.554 340.411 491.147 351.006]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 326.646 237.485 337.242]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_afce69bc148af0df269b3355899c8f5fb) >>
+>> endobj
+13114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.97 326.646 305.978 337.242]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.366 312.881 242.095 323.477]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a3b61d05102d1847f07c10669bed29f9d) >>
+>> endobj
+13116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.21 312.881 311.217 323.477]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 312.881 525.406 323.477]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 300.926 150.064 311.463]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.57 287.161 251.269 297.757]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_a31213582a2896ef342d3bc88c379f345) >>
+>> endobj
+13119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.587 287.161 319.594 297.757]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.35 287.161 525.406 297.757]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 275.206 152.754 285.743]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.309 261.441 242.54 272.037]
+/Subtype /Link
+/A << /S /GoTo /D (offload__omp__target_8cpp_af5f7a7a4078fa0202aa011c6b3e1e7b2) >>
+>> endobj
+13122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.597 261.441 311.604 272.037]
+/Subtype /Link
+/A << /S /GoTo /D (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) >>
+>> endobj
+13123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.122 261.441 525.406 272.037]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 249.486 150.064 260.024]
+/Subtype /Link
+/A << /S /GoTo /D (structkmp__affinity__mask__target__t) >>
+>> endobj
+13127 0 obj <<
+/D [13125 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5298 0 obj <<
+/D [13125 0 R /XYZ 70.866 233.328 null]
+>> endobj
+13043 0 obj <<
+/D [13125 0 R /XYZ 70.866 213.353 null]
+>> endobj
+5302 0 obj <<
+/D [13125 0 R /XYZ 70.866 191.886 null]
+>> endobj
+13134 0 obj <<
+/D [13125 0 R /XYZ 70.866 179.416 null]
+>> endobj
+5306 0 obj <<
+/D [13125 0 R /XYZ 70.866 130.577 null]
+>> endobj
+13044 0 obj <<
+/D [13125 0 R /XYZ 70.866 118.166 null]
+>> endobj
+5310 0 obj <<
+/D [13125 0 R /XYZ 70.866 81.341 null]
+>> endobj
+13135 0 obj <<
+/D [13125 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13124 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13167 0 obj <<
+/Length 2549
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\MsǽóWàHT…ã™îù<:éØe[ŠÂR¶”D©X"EEb;¿>¯±»X
+:å`
+¥Z©Ë<=Ìo. híÚhGÕ|KGf˜ý,+\öÖ¤°¹p¼»^Aÿ©ÓtÃ*\Hƒ¦7oF¬ãSò“­ñ¸y¾¸vk<BÎW[óv ØÝ=¿~¿Œã&É*° ‹3ü¾„Ðýn49äb2#å#¶Ø†ç@Þ Ô r6NN"ãCV@vŒó¹†N\†ê@ IÕR zÐ1\BXXÖÀGnãÂø/8¿(¸ž‡ QS<·ƒGÜ;á®Vn3L’)Ž>
+®»È‡uÇ“Íðü3WL ¥»øñuï7÷o»2zõÐ}ÞÞ¼½î¾•Pº/÷¯ºOùÉíõðo¢øýÕËñ|["n>ЧãV´Ò]2n $I+ÕïÇb†Ü"’›&$0Å^ôúúÁ¼x÷nÉáԌŷ H0qq†Ÿ¡…ÚìdÉvty Üâ3û¦V€‘˜:I( {üÞC’ÞÛar ¾Þ›g2ZEh4«!q }ûþùà¯R‡¥…üx#¶ƒÑCBžŒKͽ\4æöâz
+6¡/@e µM;ƒ;FãÑ¥wÁ§wH¹)¸cFç{l! n‘iJp+`öÁ]aÜ|tpGT&ÕÜ"É#j'·pÜð”àV€îƒ»‚ÞÑDäh,«,4Øa¢…~×±©cáMpQ˜Ð’5ðÿ+•¥ z¢qWüÄæÚª]ÉŒ\
+Ð=+« ï®~#e¸40³ôŸTcîkgƒ.ø\»†AÉÜ1‰ç'Û"ˆÆ“;”zDåL3B¨ÓM*H%ÓkçP"‰l™À¡0{Ua¶p¨ÝYNI(Q¾àÓ7m}ÊŠ§N’õq
+‹²è~€IŽ„xÖDGh°(iË+èñ¬“xÕ¹*`¢M Ì5æî¬ãJ\íé+
+êx:‰ÂõsݤæP”߸cû)T4ÖÒA¾!”v²1bE& kŠ:Õæ¬Q¨ms8™”¡Á(á9ÏhOKM5eåPcGP$ñÐðï­
+˜}¨0gîv5¢Ðîá7ÞK¨…ÆA›ƒc‹$¢I5\J5"ÇRª©¨@£Fx©°ëÐÛi‹ß§Íìw§M$ñšv­„&QJµV»gO²‹15Ó Ë˜äÂ<%kàŒ¥³acé$Nv‡gOáˆ#:@â‹W0‡ƒDª¯Í™4{²þc‡=¡ÞÑð /›9MP]t*ÐeÂÆz|TäÑ>¸ä4@¥/‹ntnã9`H
+øÁÊp##ŽŠ¢åŒíÌ3ªK.ýh1*ÌŒú«Ž¯É)¶ÕdxtF³©P“­ÆŠjr;æP“×1?ÿ)Î2+
+##‘ä'ÒQÀí'Fë¸Ï%#ނˀѼy¸¹»cSdlR1ô!ÅÚð/¶½=6J98ÄM œ)nÎs[—Ì‘M)
+)‚Rq²²Ç
+²©G>4Gaö&SV˜£ˆ¤HeêE¸Ÿ£TÀS‚19ª˜“ aÃô¹/çÔXA+B„—ĵVû& Ó÷5© êç8OɸD(7–îKÏ¢[™Ñnç‚ÛðKŽMÇgÏ\Ú&2új§1b
+wOÆaB¨$T«]ÿuØiùF^k’Hò^“\+0vœW*¯Æ2çˆ\íêû;“¶Á= £Y'ècbŠ•N:¤ÉÖÊ kš/õMú✠üSÈj·E^CT£ÁØÀÏ`l9·}–ç¢Æã£ýë¤&¼ç¢qxÍÅâH=øø꫱7i…d2ó­.îÂZ×@p!Î=¨^uúÈô
+endstream
+endobj
+13166 0 obj <<
+/Type /Page
+/Contents 13167 0 R
+/Resources 13165 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+>> endobj
+13168 0 obj <<
+/D [13166 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5314 0 obj <<
+/D [13166 0 R /XYZ 70.866 739.802 null]
+>> endobj
+13046 0 obj <<
+/D [13166 0 R /XYZ 70.866 727.453 null]
+>> endobj
+5318 0 obj <<
+/D [13166 0 R /XYZ 70.866 690.981 null]
+>> endobj
+13050 0 obj <<
+/D [13166 0 R /XYZ 70.866 678.632 null]
+>> endobj
+5322 0 obj <<
+/D [13166 0 R /XYZ 70.866 642.16 null]
+>> endobj
+13164 0 obj <<
+/D [13166 0 R /XYZ 70.866 629.811 null]
+>> endobj
+5326 0 obj <<
+/D [13166 0 R /XYZ 70.866 581.384 null]
+>> endobj
+13047 0 obj <<
+/D [13166 0 R /XYZ 70.866 569.035 null]
+>> endobj
+5330 0 obj <<
+/D [13166 0 R /XYZ 70.866 532.563 null]
+>> endobj
+13161 0 obj <<
+/D [13166 0 R /XYZ 70.866 520.214 null]
+>> endobj
+5334 0 obj <<
+/D [13166 0 R /XYZ 70.866 483.742 null]
+>> endobj
+13160 0 obj <<
+/D [13166 0 R /XYZ 70.866 471.393 null]
+>> endobj
+5338 0 obj <<
+/D [13166 0 R /XYZ 70.866 423.025 null]
+>> endobj
+13036 0 obj <<
+/D [13166 0 R /XYZ 70.866 410.617 null]
+>> endobj
+5342 0 obj <<
+/D [13166 0 R /XYZ 70.866 374.145 null]
+>> endobj
+13152 0 obj <<
+/D [13166 0 R /XYZ 70.866 361.796 null]
+>> endobj
+5346 0 obj <<
+/D [13166 0 R /XYZ 70.866 325.325 null]
+>> endobj
+13041 0 obj <<
+/D [13166 0 R /XYZ 70.866 312.975 null]
+>> endobj
+5350 0 obj <<
+/D [13166 0 R /XYZ 70.866 276.504 null]
+>> endobj
+13157 0 obj <<
+/D [13166 0 R /XYZ 70.866 264.155 null]
+>> endobj
+5354 0 obj <<
+/D [13166 0 R /XYZ 70.866 227.683 null]
+>> endobj
+13032 0 obj <<
+/D [13166 0 R /XYZ 70.866 215.334 null]
+>> endobj
+5358 0 obj <<
+/D [13166 0 R /XYZ 70.866 178.862 null]
+>> endobj
+13034 0 obj <<
+/D [13166 0 R /XYZ 70.866 166.513 null]
+>> endobj
+5362 0 obj <<
+/D [13166 0 R /XYZ 70.866 130.041 null]
+>> endobj
+13150 0 obj <<
+/D [13166 0 R /XYZ 70.866 117.692 null]
+>> endobj
+5366 0 obj <<
+/D [13166 0 R /XYZ 70.866 81.22 null]
+>> endobj
+13148 0 obj <<
+/D [13166 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13165 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13172 0 obj <<
+/Length 2578
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\Ms·½óWì‘[Â@£ñut$ұ˅9¤l(’’XâW(*.ç×ça>¨Áîìv
+ü&\DÒœ¶a³fi/¸Âj+¡\jÒé¿Nš0üîã ź©\£v¯[°çY&¦¸ÁÀD^™¶?ï/è¿´–¦NY!%õ–Ƹ^÷FiÁ²½ÑaH¶Üm†j%n—€ýróîòaÄí„s¦·¡¡Ú‡Ë_:Є%³8P¡q¾yøõåoøûöêñê³.®¯n/Û¿ íwïûà“t}Ùÿ7ü›¾;»YßÈc‹ddünS’ØNÒ kÚ‘¤ ­éwc"DXY«m LL—&›b"
+>\>Šóûû¥6ûbd-”ïì“#HëögÿYj¹wu±M=•À3eš0*®òq$F:pŒ+'&Ë«˜q²œJ1ÏÞw±õç´Áj
+’ƺJ½ÚDë˜3<àv¦µ1\Dk ¢ÛËLZÛ]0´®€ÙÑ:Á|~Z[ë… ª­ãH&P­+`v´N0§i]¸¥u‚{söùÓ¢7‚ ×ÀDù¬˜SÐû‡XüÝÑÀ‰ k8KˆK:þV"æ(YÃ)¬‹&“:µIÃBÇȱ;k˜UT¦a„󡆆a¤¬Ê¤d/aÈ]Œ
+ÃÍÃOÐ c\QKgëv$ÙÚ"^ k@bK)âvé"êý
+ÈÆ`†C
+½A½x&«¸ë×)è6õBWç©0!H¼[™èµž5ÆX«d Ëæžêb¾)·ÊCS­J­ÚÔ¶Z$¹ü>O£kÕ3g.mô4ÚVZ¹­m«C†r“mkùî0Á8WÁ–ŒÆ×¥î úV;îK„gøô”ßú¨í@Ç,î5䄱í/FÕÍá#KcöEΙk3Gí@,sŠ$LÇ”QŒ¬Ä>…Þ 4Œ<¥¨¨ÒHJA'ãL9Û*]9¾ ­Ò%ø#E
+C2Š¢§«~æÖYMm¯(Žf©®†Qù5Lº¨†1A [¡‚‰ãpoøÖ¦±+`Ä™=X»'48¾TûŠVpϲж´ˆQ²IÙ©"&yLhJ1§Ê"UÚ0â^¥Ðë›Ñúś͉|³'RniÙìŽ&VmNì’)?Ú“P3mLq= oV&nb;ZÓt^7n‡íh#…B>/÷F#¢<»Ô¬¼ßÊÈ-˜‘£cî/
+F‰QòiÂŒŽI¤4»¦àH Çs0;ä>®!EHZBk¿›ëøÝJžr|ƒª‘)¬àæ`+§6&Ð
+åTW³™
+ɸ{jçý„`]Y.Ö1ÙÔHƈTV2.†ì³ñòùwDM̦ÎWØ5ÝûâéÑ
+˜ÝŽh‚ù.Šáõ]ûžøñêfì±a×°ÀržS ^l·pmëRðte ‹]˜ÁF&SÄFöfW£6fo1Ù6ƒŽ0;>&˜3÷÷và#ë
+|Œ#9æ >VÀìø˜`îÀÇ
+t|L,˜{fƒ±ä2T°Šš½áZµíØF~™¬¥lžŸedZY¢5‹mR:u/~n´AÑQÁÄT|”¸3](k<­wr©‹èµÎu@˜<â,j}ebŒ† T©âHŽ)GŒË1{1b>qÄ*žp 5Ä8ö2äˆq9f/ÆCÌ‹Ë÷g_®?›cAè“+
+ü­Þ jnˆUîU<ygÝÊn.²¤ðJÍ(²‚/⵨Àë8’‘.ƒ×0;^'˜Ï_d¡ënb¨œ×q$r&ƒ×0;^'˜Ó¼®
+,$ÇÂK›AÃ
+˜Ì<"V
+79CQ*`vŠ’`¾€¢ÎÕ8—G2Nå(J9f¯(CÌLE)ï%uxBQÊa{EÂÎíMhΆ•[E6ž ©U•öÙc¿åõ<#ÓþIÅ—Žzeê&ÛA5Ýš|o<*A25¼ñseRo¦ïGòäθi¯aì~€O–Ý$‰FÕÖ¸„G29h {½@>¿\+¢@׸GÒ:çvdÌN®Ì<¹®
+:ÏþÉœë¬0{bfêp9x¯ÃCðÇí]–/>ÞÓ2Ù`*ÀÇK¦åsêûî ¹ªuË4xªá–7àÜJm»fêæ\ÑàÂc¡J9Q£!㨬+ň½® Ÿ_Wâ·‘Ê.-t²/wÙœ#¡åˆ¨ ó4¥º“”!t®¢ƒ÷‚’€Ï,+ÑÑY´ãå6¡ôÓxbhSo¡^B¸èY&¦EãqÔSÉ´½pIÉ%"Sî Ço  :SãKEq{•xN XvFÍÅ/.™*j¿ž–ñ¢bÄþ3EÄ~úÒÛ؇ã Gžvùl\Ë<3¨ ±¤0#÷f(V¡ÿoÜÅ‘
+endstream
+endobj
+13171 0 obj <<
+/Type /Page
+/Contents 13172 0 R
+/Resources 13170 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+>> endobj
+13173 0 obj <<
+/D [13171 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5370 0 obj <<
+/D [13171 0 R /XYZ 70.866 752.075 null]
+>> endobj
+13045 0 obj <<
+/D [13171 0 R /XYZ 70.866 740.064 null]
+>> endobj
+5374 0 obj <<
+/D [13171 0 R /XYZ 70.866 705.899 null]
+>> endobj
+13048 0 obj <<
+/D [13171 0 R /XYZ 70.866 693.83 null]
+>> endobj
+5378 0 obj <<
+/D [13171 0 R /XYZ 70.866 659.665 null]
+>> endobj
+13162 0 obj <<
+/D [13171 0 R /XYZ 70.866 647.595 null]
+>> endobj
+5382 0 obj <<
+/D [13171 0 R /XYZ 70.866 601.417 null]
+>> endobj
+13159 0 obj <<
+/D [13171 0 R /XYZ 70.866 589.406 null]
+>> endobj
+5386 0 obj <<
+/D [13171 0 R /XYZ 70.866 543.285 null]
+>> endobj
+13035 0 obj <<
+/D [13171 0 R /XYZ 70.866 531.216 null]
+>> endobj
+5390 0 obj <<
+/D [13171 0 R /XYZ 70.866 497.051 null]
+>> endobj
+13151 0 obj <<
+/D [13171 0 R /XYZ 70.866 484.981 null]
+>> endobj
+5394 0 obj <<
+/D [13171 0 R /XYZ 70.866 450.758 null]
+>> endobj
+13042 0 obj <<
+/D [13171 0 R /XYZ 70.866 438.747 null]
+>> endobj
+5398 0 obj <<
+/D [13171 0 R /XYZ 70.866 404.582 null]
+>> endobj
+13158 0 obj <<
+/D [13171 0 R /XYZ 70.866 392.512 null]
+>> endobj
+5402 0 obj <<
+/D [13171 0 R /XYZ 70.866 358.289 null]
+>> endobj
+13040 0 obj <<
+/D [13171 0 R /XYZ 70.866 346.278 null]
+>> endobj
+5406 0 obj <<
+/D [13171 0 R /XYZ 70.866 312.113 null]
+>> endobj
+13037 0 obj <<
+/D [13171 0 R /XYZ 70.866 300.044 null]
+>> endobj
+5410 0 obj <<
+/D [13171 0 R /XYZ 70.866 265.878 null]
+>> endobj
+13153 0 obj <<
+/D [13171 0 R /XYZ 70.866 253.809 null]
+>> endobj
+5414 0 obj <<
+/D [13171 0 R /XYZ 70.866 219.586 null]
+>> endobj
+13156 0 obj <<
+/D [13171 0 R /XYZ 70.866 207.575 null]
+>> endobj
+5418 0 obj <<
+/D [13171 0 R /XYZ 70.866 173.351 null]
+>> endobj
+13039 0 obj <<
+/D [13171 0 R /XYZ 70.866 161.34 null]
+>> endobj
+5422 0 obj <<
+/D [13171 0 R /XYZ 70.866 127.117 null]
+>> endobj
+13155 0 obj <<
+/D [13171 0 R /XYZ 70.866 115.106 null]
+>> endobj
+5426 0 obj <<
+/D [13171 0 R /XYZ 70.866 80.882 null]
+>> endobj
+13038 0 obj <<
+/D [13171 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13170 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13176 0 obj <<
+/Length 2638
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\KsǾóWàHTã™îy‰tì²EFA)ÛŠ„T,‘ CN)¿>Ý»Xyg±
+1“áâ—Ë@*X”@ôNYÄ r97¬èÛÎêOêÕåå|!žžÿøóYýéíÙùÙÛ³7¯è¯Á9úêoß_.ÏÞÖÿ¶Fûóë¯/^ýó—³7Û•«ŸË/ÞìjÖìBŒ*‚=¤˜u¨Ù ÑM·wÖõí¬7J7:þ1G}úp{S‹÷ñþ±ÇÈF+›Bõ{àÇÙ8Ã7•‰!àÓjÓ ^ùh !) &‡¼»}÷tõ4_}ú¹ÛeuÀöš¢!æØ›ç§5aÓ¾?<¯ovÑAGËÑv-yìhþô®Þèß´Óó;ì Q¾;7v–è×™–° \dÁªßýMk¬¿DB´œJÙ€ÍwøK}Z… RØOˆNù®“2¦–̺Öw`¬Š³…!RÒPõõŠ$„õíæöa][âjSÿyw»^ÕŸ¬óõ‡‡÷±4Ü­šc®z·Î6í7Ù \§e&9;wõJÚ¥­mûb8PÐK`r¤€Ï17WOVuýø8Gwªj#g²0.*ëÉØAñçhR1NiVá݆0„UÊ1Zic¤•rð†WÚàƒy¥þ ±dð„mÜé‡JûÕ¦K2Ë:‰îJ‘vDÂ(=íHÇ(Ë]žõPPœh8«+úŽˆ°aš0Zúz„Žé>?®*ì¿ô„y,s×VÔÛõ¦GòkÓ`u,Ñ PÇjbu°¹:ë9á>ß¿[=õ¨C– Áý™Qúy­G\2š¹“Á"æö‰Ì}¸ÚÈÜ>92‰Àܘ[æÎ0_ž¹½*PN/gn^É%Àܘ[æÎ17W×L?Ýþ·Ž›¾V#U, B€Š2&Tf
+3»[˜í°¹²p, Yâ”ÆÇ#FW6Q˜$â‘VTH @6áØ‚0>\‰h¤•L6 Ë1›hÌ0ÇDc¹M4f"ô r £bÔä.GüÿŽÿHm›ž©Ö(#
+à• à
+ÀÜR@Ž9‚DØR@.Â~
+@ÜR@†8µ‡räef
+ð1¯ä­%x^÷32ÏÇ1J ò|bŽzõ~ë]}‡*A+p"
+óˆËv¾¿úô±4ye‰Ä@™ µÉAëSœë¿4Q;”ãuý®cæ¯6€èž
+lÌ0Ñ•ìŽÅ¸|±#€Ïpwªfv±šË<¹çþè¨ # Tâ!iÊ„ÚW4Sù8¼Ð$¶aâ†u r>ß°cesLæh‰µ~þLU_á)×Æ’ s™6Ç«fª1v„JK÷­¶À¨âÙ¸Q©ööR…]Dòà+L¶ÀÓ(ê¨S¨"B@2TÛ[øbdC+sè=,c)MQg(
+{1âl^¨™¼Þ¬>mjRâ}!o)ÅÐèÇ ]÷PÏÈúê6’®§À‚î7êQГ߃€R`©~†)µÿÒªà'Œ¾A‡¢½&5ƒ@‹Â+Ä-Š
+@‚åÙb†8(Hê%{pƒ¾:<-nÂy!Óìñ¡@ᆠHàS†ÏoØ_?¯¯îo¯÷ §‰†°y8m|ŽýMÑ3ÇŸÑådꦧ¢ŒeLPó0^Çè!ÏI#nÓU†ø¢ùŠJ7íƒ@ºâ;$>ÍVå°ÛdÕ†=‚ü|V@æ7{QOÓFžz:„üj/(—‰,A;d2 En*ü$;‡CÜSøÜlG[G#z6ä¼J!–ë‚.)ïsç;þv{´²'•Ý”G–~e•Ä³ÌÛ÷¸ x+T1bóR¨bQ~yç\ß+ì\PƼÀ®<×Ê¥@¾døÊ`ýò¯J Êw]èÿuÛ#
+endstream
+endobj
+13175 0 obj <<
+/Type /Page
+/Contents 13176 0 R
+/Resources 13174 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+>> endobj
+13177 0 obj <<
+/D [13175 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5430 0 obj <<
+/D [13175 0 R /XYZ 70.866 752.133 null]
+>> endobj
+13154 0 obj <<
+/D [13175 0 R /XYZ 70.866 740.064 null]
+>> endobj
+5434 0 obj <<
+/D [13175 0 R /XYZ 70.866 705.841 null]
+>> endobj
+13031 0 obj <<
+/D [13175 0 R /XYZ 70.866 693.83 null]
+>> endobj
+5438 0 obj <<
+/D [13175 0 R /XYZ 70.866 659.665 null]
+>> endobj
+13033 0 obj <<
+/D [13175 0 R /XYZ 70.866 647.595 null]
+>> endobj
+5442 0 obj <<
+/D [13175 0 R /XYZ 70.866 613.43 null]
+>> endobj
+13149 0 obj <<
+/D [13175 0 R /XYZ 70.866 601.361 null]
+>> endobj
+5446 0 obj <<
+/D [13175 0 R /XYZ 70.866 567.137 null]
+>> endobj
+13147 0 obj <<
+/D [13175 0 R /XYZ 70.866 555.126 null]
+>> endobj
+5450 0 obj <<
+/D [13175 0 R /XYZ 70.866 520.903 null]
+>> endobj
+13049 0 obj <<
+/D [13175 0 R /XYZ 70.866 508.892 null]
+>> endobj
+5454 0 obj <<
+/D [13175 0 R /XYZ 70.866 474.727 null]
+>> endobj
+13163 0 obj <<
+/D [13175 0 R /XYZ 70.866 462.657 null]
+>> endobj
+5458 0 obj <<
+/D [13175 0 R /XYZ 70.866 416.479 null]
+>> endobj
+13022 0 obj <<
+/D [13175 0 R /XYZ 70.866 404.468 null]
+>> endobj
+5462 0 obj <<
+/D [13175 0 R /XYZ 70.866 370.303 null]
+>> endobj
+13138 0 obj <<
+/D [13175 0 R /XYZ 70.866 358.233 null]
+>> endobj
+5466 0 obj <<
+/D [13175 0 R /XYZ 70.866 324.01 null]
+>> endobj
+13027 0 obj <<
+/D [13175 0 R /XYZ 70.866 311.999 null]
+>> endobj
+5470 0 obj <<
+/D [13175 0 R /XYZ 70.866 277.834 null]
+>> endobj
+13143 0 obj <<
+/D [13175 0 R /XYZ 70.866 265.764 null]
+>> endobj
+5474 0 obj <<
+/D [13175 0 R /XYZ 70.866 219.644 null]
+>> endobj
+13008 0 obj <<
+/D [13175 0 R /XYZ 70.866 207.575 null]
+>> endobj
+5478 0 obj <<
+/D [13175 0 R /XYZ 70.866 173.351 null]
+>> endobj
+13016 0 obj <<
+/D [13175 0 R /XYZ 70.866 161.34 null]
+>> endobj
+5482 0 obj <<
+/D [13175 0 R /XYZ 70.866 127.117 null]
+>> endobj
+13055 0 obj <<
+/D [13175 0 R /XYZ 70.866 115.106 null]
+>> endobj
+5486 0 obj <<
+/D [13175 0 R /XYZ 70.866 80.882 null]
+>> endobj
+13011 0 obj <<
+/D [13175 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13174 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13180 0 obj <<
+/Length 2885
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\KsǾóWàHT㙞÷Ñ‘HÇ.[Ræ’u HB‰…¤í(¿>_ï.HÌb_À ™\¤-iÑ_OO?¾î]9û4“³þrvôýiг ¢szvöqæ¥ÎÍ|$áÔìl9{wüâ¯?¼9;y;_Ç^ÌŽèøô§_NêyùúÅ?~=yu6W$¨þ<ûéõ«ùÂ[ëp¿¦æ'¯OOy=ç›^Îߟý|trvô¯#=äLÍ´ÓÂËPgWGïÞËÙÿùóL
+ÃìÏêÖ«4‹¸¸œýýèo+ÐÎU·o/áõ¯o: ”à £Òª²±ÇÛOê+ñâÍ›Ú`¦{{rzòöäÕ‹“]å6û‚d†t3V kôƒzr{om×Þ:%äFÍ»ûóûõE­Îúú¾¾¸¹úº«‘¢+èêçäö³V¢†‚Gè S=>ÍJ¯î;pÆ€5Q(›¢òŠwÎ؈ði­[o9n®:pƒ†÷”Xi@ÈÖF¾¹kv÷7iå|ÁÁùÇ\C•õ’uùþT™Y„ @C†…G©~ü›”º¾ Zl9”0Þlî¹á›–»Ë"˜3HÊ_¹
+djIÆ6ºßuæ„7¡f€jŸbVk¾¼¹à¿¾Ü¯¯VûžT ˆ°^¥\Þ~àÀ‘ó]½¶ç¸µZ—лH¤'Øž¼ž¨&vÑ(j­|ýávŽ2s~;_hö¼]N€ ²œ²³@Æ¢íA¦×Æ| -ŒäýÓk…÷®¦#l×¼?¯]þnýŸ¹²Çn¯c,ìFÒn°O´½1¨þªDðƒò/ÕÛkE‰„cl;9nÜð&Z¸[‰H71ÀÝÚ‘¾‹hfMD+-ê©Øêª m…B)Z€DkŠ%n°i¯¼ðzEU'Oˆ±R •i„Ô” ¨oªÔ¹¸üv}~zßAª™ãª|Töq­RÔv¤õ5QJ>_‡`DdÞ<nëÆÊ=@&"“8%mŠx½º»_u1>ÂM.SKAvÌÐç×Ë‹ó›B¦x7òŸð!ß»5¢Äø–w_s-ÿ½£“Ò =š+I.*Ùª JPï?߮Ηw]Ô‚¶@EW>önµ¨û˜¤7Z3”拪Iª~ôÐß ¡B?gŽwtxÎ0Öt*´#¡$!h¬©GPxëKà".Œñ)ðÕù¿»r~…ö°
+¤| LteFú³?꽯˜QÜ ï-#Ã3˜Í?غ•ÎêÁó®·ZÞ¸ZW;íR­Îþùæ¤#¥ ŒFõ-ÚªwPY”݃”L€µDâѱeºo_Wöw]yÍ äšªÍ|¸%•Î<NÇ—ã š*±ïß(]NÂ>¬n;–£Qf³y_žÖ`ñ .û§iuèÁd¹3Ä<&}kI.úÁ<íª¡eL´šš\Š9)S~q Co犛MÐXΔL]ó³|Ô†žmÃöuJÊFP¾óAxŽ× èÿ7QrZ¨pÀSE1+a%8—-,ÉG;! `6˜`înªdV…T‰%i§R¥À UJ€ûCÒàÕ`Á´3)졬&Q òµâ)Š÷1Õª k¡@B¢Ì¤d
+Œ†‘‡&©éž›µ˜ˆhµ–£áSšZž0ÎZì(kA²$­ -6¶X6wÔ%’&|,@Ò„¤™¹IšÛ˜Oš4MôÕ˜$?išjpë§&ÍÀMÒL€{çÊð¹S—cDšw¹âPýc}±ºë¥0‹ Mo¤ 1‡ŒaÈeaŒBEU` ¾ Ê@ãc˜õ&A<t 3Ý#3 ¯
+Ì_YUv*¿/€Ûüx R@ñI—ÀEU±J§¸_ëÃU=ó
+®²GŸà]Š|@{¡žs‹Äìþ ä b ?´
+±D€$9a[
+aB[S
+endstream
+endobj
+13179 0 obj <<
+/Type /Page
+/Contents 13180 0 R
+/Resources 13178 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+>> endobj
+13181 0 obj <<
+/D [13179 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5490 0 obj <<
+/D [13179 0 R /XYZ 70.866 751.87 null]
+>> endobj
+13013 0 obj <<
+/D [13179 0 R /XYZ 70.866 715.582 null]
+>> endobj
+5494 0 obj <<
+/D [13179 0 R /XYZ 70.866 679.833 null]
+>> endobj
+13052 0 obj <<
+/D [13179 0 R /XYZ 70.866 667.604 null]
+>> endobj
+5498 0 obj <<
+/D [13179 0 R /XYZ 70.866 631.931 null]
+>> endobj
+13018 0 obj <<
+/D [13179 0 R /XYZ 70.866 619.702 null]
+>> endobj
+5502 0 obj <<
+/D [13179 0 R /XYZ 70.866 584.029 null]
+>> endobj
+13057 0 obj <<
+/D [13179 0 R /XYZ 70.866 571.8 null]
+>> endobj
+5506 0 obj <<
+/D [13179 0 R /XYZ 70.866 536.128 null]
+>> endobj
+13009 0 obj <<
+/D [13179 0 R /XYZ 70.866 523.899 null]
+>> endobj
+5510 0 obj <<
+/D [13179 0 R /XYZ 70.866 488.226 null]
+>> endobj
+13014 0 obj <<
+/D [13179 0 R /XYZ 70.866 475.997 null]
+>> endobj
+5514 0 obj <<
+/D [13179 0 R /XYZ 70.866 440.324 null]
+>> endobj
+13053 0 obj <<
+/D [13179 0 R /XYZ 70.866 428.095 null]
+>> endobj
+5518 0 obj <<
+/D [13179 0 R /XYZ 70.866 392.422 null]
+>> endobj
+13020 0 obj <<
+/D [13179 0 R /XYZ 70.866 380.193 null]
+>> endobj
+5522 0 obj <<
+/D [13179 0 R /XYZ 70.866 344.52 null]
+>> endobj
+13136 0 obj <<
+/D [13179 0 R /XYZ 70.866 332.291 null]
+>> endobj
+5526 0 obj <<
+/D [13179 0 R /XYZ 70.866 284.721 null]
+>> endobj
+13021 0 obj <<
+/D [13179 0 R /XYZ 70.866 272.434 null]
+>> endobj
+5530 0 obj <<
+/D [13179 0 R /XYZ 70.866 236.819 null]
+>> endobj
+13137 0 obj <<
+/D [13179 0 R /XYZ 70.866 224.532 null]
+>> endobj
+5534 0 obj <<
+/D [13179 0 R /XYZ 70.866 188.859 null]
+>> endobj
+13026 0 obj <<
+/D [13179 0 R /XYZ 70.866 176.63 null]
+>> endobj
+5538 0 obj <<
+/D [13179 0 R /XYZ 70.866 141.016 null]
+>> endobj
+13142 0 obj <<
+/D [13179 0 R /XYZ 70.866 128.728 null]
+>> endobj
+5542 0 obj <<
+/D [13179 0 R /XYZ 70.866 81.158 null]
+>> endobj
+13010 0 obj <<
+/D [13179 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13178 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13184 0 obj <<
+/Length 3042
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\Ëv·Ýó+fÉ9Ç(<—ŽD:ö±-Ea9²g$Í9TÈ‘åëSÕªÑÄL?PT²±(«‰[@áV.ª[.Þ/äâÇ“¿\œ|`Dtï^ŠàÜÂG-œZ\¬¯O½
+Ã4þέ•p–RãÚ›qy÷~³WŸ>-Áž
+BÇÅ„ Ði+EˆÍƒ¯6ïhgoî6»« ƲàÕé[ÊX_êŸ?fãš7¸A1ãhômŒ¶+D¶õH›ÑîáÉFDJY&v/ß5ëKÆKŠ’40ùÛ‡øæòßDŒõ8qGDkºˆŸîn¯2¡@q@"qV]Èë»·F)$|·\)©b~SôÈŽ•…§.În*Ð Àr
+PN76)íœU·˜$$âÅFXi1QÂàª[ð9ŽÍf1Œl¶U^ BcùJQرsM‚ûí–Êžfˆ ø m4QSÚ‘÷”Q•ÁØœK´µ2šÁ“ƒá°Á*ʱ‰ ùŒ†ô·sË!šbnsĺk‰uƒâ˜´FJ
+€‰¹dŠ•‡¶ˆm¼ôu¾ðÂ# ‘Ã
+‹q?†ÞÖ®)#Ê1}SFt1×_v—7Û«\RÅøÀ2W¡z|Ίƒñ•ÒQn„‰•Ò1¸Þ@ˆÀÁ. ©Ã÷Ø•-Ü h G ƒ`…—bî?Üm.×÷¹Ž»ÐsàÊÎÍò±±xš´N6óº‰#¼l<ÅNŒ·uøï î6÷ûÍ:Ÿ¼uä›”¼c6Yî:¯‚JµyÕ5g–ÝQáI:´K#üS†¢ãÒ>‘ÐÖ€#IhXÄÀ‚‰ZçuŠ¹£ºîóM.uk«Â
+í®=¦Š•#Ö¢X˜ÅúäRTú–]Óé
+÷»péÇ«°åVqM;üPE©œÏ®åÈX@‚Œ±o‚ðN?¨yÂ{Ÿ~t¨fbãc“écýèØ„é†$÷`fæ_9dCÀ.âdNåŸ $L«rÒ@¤Ê3²¡`‚9Šƒ Ø lt¡¿' ëtóè*좾ã}¼uè&ë´ÁÓ½éyáâŸ/Ï2üÖXC«êöMldtÕ³ŒL#–¬î-Ý—O›
+;wÝF*±ÔSîÛ§·«4 Ó!™Ž5Étšzåíænéòs,¶tœ2§ƒ…¼ÒàÃ\Œ!®·:ççþ¼
+€ºö¤çÐÌ©M?ø1š9fS$˜O}˜
+endstream
+endobj
+13183 0 obj <<
+/Type /Page
+/Contents 13184 0 R
+/Resources 13182 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+>> endobj
+13185 0 obj <<
+/D [13183 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5546 0 obj <<
+/D [13183 0 R /XYZ 70.866 751.98 null]
+>> endobj
+13007 0 obj <<
+/D [13183 0 R /XYZ 70.866 703.894 null]
+>> endobj
+5550 0 obj <<
+/D [13183 0 R /XYZ 70.866 669.056 null]
+>> endobj
+13015 0 obj <<
+/D [13183 0 R /XYZ 70.866 656.886 null]
+>> endobj
+5554 0 obj <<
+/D [13183 0 R /XYZ 70.866 622.048 null]
+>> endobj
+13054 0 obj <<
+/D [13183 0 R /XYZ 70.866 609.877 null]
+>> endobj
+5558 0 obj <<
+/D [13183 0 R /XYZ 70.866 574.981 null]
+>> endobj
+13023 0 obj <<
+/D [13183 0 R /XYZ 70.866 562.868 null]
+>> endobj
+5562 0 obj <<
+/D [13183 0 R /XYZ 70.866 528.03 null]
+>> endobj
+13139 0 obj <<
+/D [13183 0 R /XYZ 70.866 515.86 null]
+>> endobj
+5566 0 obj <<
+/D [13183 0 R /XYZ 70.866 480.963 null]
+>> endobj
+13028 0 obj <<
+/D [13183 0 R /XYZ 70.866 468.851 null]
+>> endobj
+5570 0 obj <<
+/D [13183 0 R /XYZ 70.866 434.013 null]
+>> endobj
+13144 0 obj <<
+/D [13183 0 R /XYZ 70.866 421.842 null]
+>> endobj
+5574 0 obj <<
+/D [13183 0 R /XYZ 70.866 375.049 null]
+>> endobj
+13017 0 obj <<
+/D [13183 0 R /XYZ 70.866 362.878 null]
+>> endobj
+5578 0 obj <<
+/D [13183 0 R /XYZ 70.866 328.04 null]
+>> endobj
+13056 0 obj <<
+/D [13183 0 R /XYZ 70.866 315.87 null]
+>> endobj
+5582 0 obj <<
+/D [13183 0 R /XYZ 70.866 280.973 null]
+>> endobj
+13012 0 obj <<
+/D [13183 0 R /XYZ 70.866 268.861 null]
+>> endobj
+5586 0 obj <<
+/D [13183 0 R /XYZ 70.866 234.023 null]
+>> endobj
+13051 0 obj <<
+/D [13183 0 R /XYZ 70.866 221.852 null]
+>> endobj
+5590 0 obj <<
+/D [13183 0 R /XYZ 70.866 186.956 null]
+>> endobj
+13019 0 obj <<
+/D [13183 0 R /XYZ 70.866 174.844 null]
+>> endobj
+5594 0 obj <<
+/D [13183 0 R /XYZ 70.866 140.006 null]
+>> endobj
+13058 0 obj <<
+/D [13183 0 R /XYZ 70.866 127.835 null]
+>> endobj
+5598 0 obj <<
+/D [13183 0 R /XYZ 70.866 81.042 null]
+>> endobj
+13025 0 obj <<
+/D [13183 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13182 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13197 0 obj <<
+/Length 2330
+/Filter /FlateDecode
+>>
+stream
+xÚÅ[ÛnÉ}×W›ÛÝÕw# àØ”³ Çr´L€ÀÞŠÉD(R+Òü÷9=Š=‡švübKÔ°NUu]Nu÷ðÁÝ€ÞžýuröâÂÉcÞ9˜Ü,gΘõÄŒLnÏ_ÿíÕ‡Éøj8"ëÎ-Ž ÑùÅÏïÆÅ'o._ÿóïã÷“¡ ~þ*ÿwòóåûáHr_²üÎåÅÅ»ËaxêÍð·É/gãÉÙïgŠðHo™
+Ýì›D–Üö·‰È!È(6
+¶ˆB3¥wž m™±?x¦„+~“AGZÎ7óÕ²pÅtSü¿˜/³â'2¢ŒÃÛÊ[œYõY0r5m2“k #´”€çåivFºwÌèB’¤Â»MYAd˜‘&&y&ÉĘ›éã]¶a³‡‡¡Ôç¬ps´$p³c
+^ÆÒ(­‹¯Í—›¶Læ’Y‡â‚L”Îö‰qn…$á\k21¯“€’†ƒj -ù¬$ó* °
+k]·vú8úü­†Ÿg›zzO^]½OâI!µI Á±\™X«É¿?Œª<çU墮ú¾’Êiÿ<%c`k ¤¯¹îÛC–cÿ±!®‘WÈúJÕÐûæ@˜R¾³9R¡ƒq‘À‰˜Ò¾ Ë!p¿Ü_gCÓl“ôÌÒVßÆÜTœ›)âB¡*kº¦‰"›K§ŒiO“}|´Ý¼GõÇ׊imkø ý5øç¤þºë½½,dVíkn‰*d=â¦h‰¶{KtÜõj‰Æ£Ú1²Vtèˆý!ˆAžÚÍ©üÖÍ4ø_o‚I¡;Üà —Í!͈R`†4ƒ¶´a E` ¼üƒ˜uD)¢†4gÄUlÕAjm‘Ò^GÐÍûÕP ž¦(Íœw]
+I̪’ìbö¢Ö^¦ÖÑÌ>”úQkC…$µPk4:žÑúèB¢³øVP0-cЖB‚±: °q9`ìâ=>µ.‹Šó‡ù|˜Ú‰ýµ"8VrkuˆÏ#3Ì |Þ뼓>KÉ؇̨Gç>/A/ñyíOàóF2'ms¤1(ã5Ÿçó˜'Wí|žŠâÕ?.ªu¶Kn*d”ÅÜ–
+÷Í}eÌúüS@Æ òˆ›8¶ª¶‰Ý¤”àÛ.ò§&ë‘jÛ6×››Åüš}nw»§þú—FG
+ŽÐ:¤]WGr—Æ‘äñ™,ùyµÞttd©*<?ZÌ7Ù‹òóÛOJ9ElòpB›ãrT8ô&^&Õûé}¶~˜Î²unnõG-…Ƀ£êõ‰HGß)|ôxW:ëêíÙàc>Ý…7QjÒcF•|ÎËõ‹/ËY¨Œý+Õø:$] ™ÍʆT ʾ|9GU®Ë ksfY•ø§¿Á§á©—í
+\¯V‹.àÙ$fD¾P9ÛW¤˜·÷î˜u¾ÎgÙw×mS(ö­©€jÌ$>¯£Ï/þ¡†s›
+7þrµK—+û»ddy~ˆÝÉ1§DÍc¶È¦ëìPà´(×)#þˆíôq>½Íb‘%ËŒõfº™Ï
+Ý:ÂPœ¿œ¯›J$¸ fgò[V=¢
+€?ÜçNõuyŽâÝmÑw2C Ú÷Hñ2àôîxI áPÄË}`ßš‰Tx) ݦßy¥Ëß Û¾úVS0öÜ¡.+Š~‰žmzU0œWÓ)/
+lIï4BòáZ²Á“̘’¼£ÑÖ¡ÿÛèÌ
+endstream
+endobj
+13196 0 obj <<
+/Type /Page
+/Contents 13197 0 R
+/Resources 13195 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13169 0 R
+/Annots [ 13186 0 R 13187 0 R 13188 0 R 13189 0 R 13190 0 R 13191 0 R 13192 0 R 13193 0 R ]
+>> endobj
+13186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 225.019 121.184 233.768]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 173.432 156.34 183.902]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a1e1bb4371c5bac17c6a26f3ffbf6baac) >>
+>> endobj
+13188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 160.039 175.546 170.509]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c176249d2f834112b6677d4309c985f) >>
+>> endobj
+13189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 146.597 189.004 157.117]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b) >>
+>> endobj
+13190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 133.254 174.282 143.724]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_af9fb019f8e0d5d4ff8796b42c127acd2) >>
+>> endobj
+13191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.635 85.11 210.451 93.858]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_ab1d74c38c46775592b766bc06908581c) >>
+>> endobj
+13192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.118 69.87 182.898 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.398 69.87 242.3 80.466]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_afc6f8a14d2295a7c959d2f583ae6ea54) >>
+>> endobj
+13198 0 obj <<
+/D [13196 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5602 0 obj <<
+/D [13196 0 R /XYZ 70.866 751.932 null]
+>> endobj
+13141 0 obj <<
+/D [13196 0 R /XYZ 70.866 739.648 null]
+>> endobj
+5606 0 obj <<
+/D [13196 0 R /XYZ 70.866 704.001 null]
+>> endobj
+13030 0 obj <<
+/D [13196 0 R /XYZ 70.866 691.776 null]
+>> endobj
+5610 0 obj <<
+/D [13196 0 R /XYZ 70.866 656.186 null]
+>> endobj
+13146 0 obj <<
+/D [13196 0 R /XYZ 70.866 643.903 null]
+>> endobj
+5614 0 obj <<
+/D [13196 0 R /XYZ 70.866 596.358 null]
+>> endobj
+13024 0 obj <<
+/D [13196 0 R /XYZ 70.866 584.075 null]
+>> endobj
+5618 0 obj <<
+/D [13196 0 R /XYZ 70.866 548.485 null]
+>> endobj
+13140 0 obj <<
+/D [13196 0 R /XYZ 70.866 536.202 null]
+>> endobj
+5622 0 obj <<
+/D [13196 0 R /XYZ 70.866 500.554 null]
+>> endobj
+13029 0 obj <<
+/D [13196 0 R /XYZ 70.866 488.329 null]
+>> endobj
+5626 0 obj <<
+/D [13196 0 R /XYZ 70.866 452.74 null]
+>> endobj
+13145 0 obj <<
+/D [13196 0 R /XYZ 70.866 440.456 null]
+>> endobj
+5630 0 obj <<
+/D [13196 0 R /XYZ 70.866 392.912 null]
+>> endobj
+8745 0 obj <<
+/D [13196 0 R /XYZ 70.866 380.628 null]
+>> endobj
+5634 0 obj <<
+/D [13196 0 R /XYZ 70.866 363.177 null]
+>> endobj
+13199 0 obj <<
+/D [13196 0 R /XYZ 70.866 236.074 null]
+>> endobj
+13200 0 obj <<
+/D [13196 0 R /XYZ 70.866 188.366 null]
+>> endobj
+13201 0 obj <<
+/D [13196 0 R /XYZ 70.866 98.322 null]
+>> endobj
+8746 0 obj <<
+/D [13196 0 R /XYZ 70.866 60.241 null]
+>> endobj
+13195 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13246 0 obj <<
+/Length 2569
+/Filter /FlateDecode
+>>
+stream
+xÚÅœMwÛ¸†÷þ<Ó´0¸øžÝ4cÏÇIãÖã®’YÈëŒ>\Iž6ýõ½ H‡ )š*î‹$Î}Ÿ àå‹ $Ï>g<ûñâ¯wß^;™9æ‘ÙÝCf9sÆdÖ3"»[d'–IŦ—`rs}ýþf
+|òýÓßî~¹¸º»ø×…ÀP<™žq_üªÃçë‹¿ñlŸý’q&½Ëþ]\¹Î0¶ÇVÙ¯ÿhÉA(Á¬‹r¸¹ýõ=ûiz ÖM®~uüéöêúêöêÃ;ü¯
+,º—>Âwùl±Ž#¯)°ÀJ!Æ®v÷§Œ¸.
+T²ª --Œ/U…>v¼(Â)¼Ä×k^Yx˜m4ögŸ¹@ Ê¡ùZ}†@¢4¼Ïíútx¡$ ¢<’q=ûO»4%i:Ñb™Ê]DìT¦B=%Sƒ0…Œ© ”Â4ÂSÝÊ´ŠIC¡L $ªEF·4“‘•4ëÈNë´R`QŸ
+DŒ}Úmç-ò‹#GõXBÙôO6NèÒ'"Ç(C§  Ð'FZô˜Ú ˜åÔ1_6³õrÞÂu*¬ô °Î`SÇ´2é˜Âo0+Ci†^'ÐJp*}¼,Y™YÙ©KÓVœïT³­#«ÅK9˜±àPK b ÿJèc,éÌÊXêÌM¾?ä­«G‹«cCu¼ø. ÂŽY½K®ÎY
+¨¬$T íò\ÍH°ű´<¢\@¢|õpþ"E¢ŒÄ•íUñ¦C«Š·Ý´‹  ’*!chWÉ„«±Pg§ƒqUƹj€Ç]Ä+7ܪ,œ“!ÙÞ‘¸´çÚéìªÐ®³OHÕaÏ{Cu8‘;COK¸Ä!§
+­†Húœ•"`–å}Ä<m§4íT C»íÔ CF;ÕÜ4À#'êÌPv
+X!ƒpÅH¼:möÆ’‚€Z.)"ê ‘–[sÐrk.‚vˆÔ‡“™$`Mð˜FŠ"ÒHaÀITŠ‘^2î^È@Ë…L=%R^ì#€†sÌÜÅÐ.' Kd°X°4Ácžž’xÓP;ý½]£a<-Þ¦IU8ƒc ÀnôoLõaåD€,WN1ó0;Še¿üox|éÄ–d8?BÊÏ€Œ3yIpIélªQá„6…j$v„ïÜ,ëÃtbUÖ½4c™’š" nóÈ’1Õ·4¾Ï@8:M¡À{Øõ±™tbe3uä.“ž@å2õÚ
+6ì™0ó§½e2Ìü5à¨u¸\Rƒ¹šPáxºD1]oEWK&V¦VGžãjÉ T¦%ЦQ,dE£D41pT†ãMf(å8ωr\ ÑÇF“‰•‹Ö‘÷AŸUuX®OHÔ9I
+„Ë P$`ƒþ¡Ùh$ã,¼œ­Ú¦EϬÒlàPÌèqãÇ|zçg¡s9Åcé‚5¢¨Þ{6Y ¶Î<C°é T‚­'px/Ñ“Íl·}Þ´<
+çÎäP‡·Œàš`þGWÊÕG:²Z}Ô™}4£q6S Ø°|QÆÕŒ‘Ãs‚c¤‹†ãÍïu£IGVFSg.ò‡p8kö¼:´})æÓÜQÀ3^ÁG} R3cÝ@&ã-ãŽ@.Þ0W=Í1ßå³CÛ7 †ãÍ­ ˜&¼˜,†ÎÂ;×`³<|ißñG0ÓÁaÃ[Æàõlßv¤GÏ¡.“‘ ÂKÞT„SÆ1nÛWÀ{“'>-SÈ3<¾dMσŸ¸.Kç[ôOÜ)Q/q$à†'7ãöž(Γh ÉD
+endstream
+endobj
+13245 0 obj <<
+/Type /Page
+/Contents 13246 0 R
+/Resources 13244 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+/Annots [ 13194 0 R 13202 0 R 13203 0 R 13204 0 R 13205 0 R 13206 0 R 13207 0 R 13208 0 R 13209 0 R 13210 0 R 13211 0 R 13212 0 R 13213 0 R 13214 0 R 13215 0 R 13216 0 R 13217 0 R 13218 0 R 13219 0 R 13220 0 R 13221 0 R 13222 0 R 13223 0 R 13224 0 R 13225 0 R 13226 0 R 13227 0 R 13228 0 R 13229 0 R 13230 0 R 13231 0 R 13232 0 R 13233 0 R 13234 0 R 13235 0 R 13236 0 R 13237 0 R 13238 0 R 13239 0 R ]
+>> endobj
+13194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 716.082 121.184 724.83]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 665.961 156.34 676.431]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a1e1bb4371c5bac17c6a26f3ffbf6baac) >>
+>> endobj
+13203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 652.951 175.546 663.421]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c176249d2f834112b6677d4309c985f) >>
+>> endobj
+13204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 639.892 189.004 650.412]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b) >>
+>> endobj
+13205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 626.932 174.282 637.402]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l_af9fb019f8e0d5d4ff8796b42c127acd2) >>
+>> endobj
+13206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 497.314 215.007 507.726]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a95c0bb039b31bf7e1ba40186951f54df) >>
+>> endobj
+13207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 484.179 215.096 494.716]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ac85681fe0e0e734859245e2b00949304) >>
+>> endobj
+13208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 471.17 207.529 481.707]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a209a6c7523203e5da4d48b1e67e137af) >>
+>> endobj
+13209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 458.236 197.908 468.697]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a745baff46ece4b3bbbf627ebbfe95edb) >>
+>> endobj
+13210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 445.151 198.41 455.688]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a0d423e93b04c891cb24fad4300223213) >>
+>> endobj
+13211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 432.267 191.443 442.678]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_add17a16068a5628cec35a1b8664ed178) >>
+>> endobj
+13212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 419.132 191.945 429.669]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a2a221f77ce39cc7ce5eb746123b7c48d) >>
+>> endobj
+13213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 406.248 200.41 416.659]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_abe38a854a271830c3808a17c2b8272f2) >>
+>> endobj
+13214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 393.113 200.912 403.65]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a18e05a7a836af489fa03222fc474988f) >>
+>> endobj
+13215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 380.229 179.787 390.64]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a0d9efed6fd06ea3359eb565027d75348) >>
+>> endobj
+13216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 367.17 197.46 377.631]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_abd357169438d6c23f81c9c9a0ccab620) >>
+>> endobj
+13217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 354.21 180.289 364.621]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a1ba3d522623379201e6518e8ff5814cf) >>
+>> endobj
+13218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 341.2 190.26 351.612]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a45977aca65c8bee92c58c23d89e01202) >>
+>> endobj
+13219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 328.191 182.782 338.602]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a836d45c090695ca7de2269e21d7af5d4) >>
+>> endobj
+13220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 315.181 199.961 325.593]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a950345f313648e66a04b2fc6287e9f08) >>
+>> endobj
+13221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 302.122 217.634 312.583]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_aea6f278725ed9a2443fb62b1fbfc49e4) >>
+>> endobj
+13222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 289.162 200.463 299.574]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a4a8a21d09f134c2207fd4f45a1415f09) >>
+>> endobj
+13223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 276.153 210.434 286.564]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a95b0e3ac569b85484f80b7b0e7c7d8e1) >>
+>> endobj
+13224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 263.143 202.956 273.555]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a713a057b26f414eb1ac1f5049232748d) >>
+>> endobj
+13225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 250.134 200.58 260.545]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a428a49bcacebdc98af28d771e078756f) >>
+>> endobj
+13226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 236.999 201.082 247.536]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a21f5c5e620db736609624b67f19bf557) >>
+>> endobj
+13227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 224.115 208.291 234.526]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a273c246c4d761ece71996bd9600ad64f) >>
+>> endobj
+13228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 210.979 208.793 221.517]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_afb4d8d52866b88f6a5dcb6bf8e3802aa) >>
+>> endobj
+13229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 198.096 201.53 208.507]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ad40cc74a5801cfe2e2b056a60baadc18) >>
+>> endobj
+13230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 184.96 202.033 195.498]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ab631b2f23c9288f4de2ed665a326b860) >>
+>> endobj
+13231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 172.027 213.393 182.488]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_af719a12f6588bfd8f0fbbfe6508eb7f9) >>
+>> endobj
+13232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 159.018 235.422 169.479]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ac1efd6e30008c0c50366f575680fd41c) >>
+>> endobj
+13233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 145.932 234.705 156.469]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a7932155de8226051b081b89dd15c1986) >>
+>> endobj
+13234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 132.999 188.61 143.46]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a68ac93910d48bd08f893b210cf02e5f6) >>
+>> endobj
+13235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 119.913 189.112 130.45]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ace513dde459dbb4147b0d975f757da71) >>
+>> endobj
+13236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 107.029 195.155 117.441]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a40daab0cfd90458d369764d8432c720a) >>
+>> endobj
+13237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 93.97 227.541 104.431]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a83d593765d60972ac1212ef722dcdcdf) >>
+>> endobj
+13238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 80.961 231.756 91.422]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ad28dcc3558c9e3d3d8a92bbeb05b5897) >>
+>> endobj
+13239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 67.951 189.937 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a10b27e7d05754951f587a04a2192abd3) >>
+>> endobj
+13247 0 obj <<
+/D [13245 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5638 0 obj <<
+/D [13245 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13248 0 obj <<
+/D [13245 0 R /XYZ 70.866 726.945 null]
+>> endobj
+13249 0 obj <<
+/D [13245 0 R /XYZ 70.866 680.703 null]
+>> endobj
+8747 0 obj <<
+/D [13245 0 R /XYZ 70.866 617.879 null]
+>> endobj
+5642 0 obj <<
+/D [13245 0 R /XYZ 70.866 611.379 null]
+>> endobj
+13250 0 obj <<
+/D [13245 0 R /XYZ 70.866 512.057 null]
+>> endobj
+13244 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F100 8905 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13298 0 obj <<
+/Length 2701
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\ËvÛ8Ýû+¸”Îi!xÙu'r?N&Éx<½I²PlÚG'~¬ôLÿý\ða4)‘"o"›¬‹êÞªóì2ãÙ¯G¿œ½:v*sÌ£²Ó‹ÌræŒÉ¬—̈ìô<û4{óÛÏO—'ó…´nfÙ|a¤œÿþnYþäí‡7ÿþÇòýé\H>û¹ø÷ô÷ïç Á½‘xAQõ·ããwæá©·ó/§-Oþs$0ž‰Lyͤ¶²ã>;»>úô…gçøågÊ»ì¿Å£×†æñå*û×Ñ?;\PÞ0¯läC5º_Þ-Ù›Ë?ºp²<^ž,ß¿Y>V=Î1'õ®QiRŒ´z¯æ˜7çZSc Î2C*³F0^ô³”TŒ¢~-û´ 2³¿æ’f·ëóêwah›ËjŒ'ÅSÁ‘o×wO]J
+*æê5TJ<.t ú̼»xa–PW¼pÏ΋ÕÙt^àC]Ž÷¾BûÚ3§|Œ¹Ò%¶øn[Ð׫ûo1Ê¡pÊ%
+q=0$Ppãý~ÓM 5d
+L3DŒ¹“΄²"0ÊIßr¶‡´à.¦D$w1h-°¨d)(VU¶—õ%ë(Z iþ¨:Š;”)ŠnnчØ!uÔtȺŽjbª£¦C×uTº/_¦uLÉX*†ìË’ nS`"[XocÐÍ6k“d‹841"—t÷Ö¸ÁSÖ´à˜uf´…Žà‚i¨Z°D¦âþmˆku»:ïbÞU)€ U†Œq7ùåú~›oº’ŒdX¡¸´ˆ·«¯a æ*¿o¯­Re°¿9{‡Á½~ýþö<ï9¯2Ò!Îo¶›ùBñY‡x(¶MR¸«8‚Xõ¹;4û ƒ 5«œ‹Y¯HЂ«1N^ÀêS÷´0Ì%pN (£ß盜ý9·|¶Úì\? ú!åWÁJJ'p;¥Ž=\Äl¡%¹m!UÉ´¼ïÐ3êÃg3äbŽE0ž‘Љô^ÙѺČ3’¥%%h€˜ÙbA £<0VÄÈßovšŒ[•ÊcŠ¡ûM*9PÐPœ:5†; %»Ay0Ý_…Vdzü­X/µ˜íõ‹ @ÎÀRoSø®?ÌÒN߆(ÊFBU?½JÑO]ô¡qFŒ¡É$ò<ôŽiSR}šõê˜T†x±ä GPñ¡IC!¦8C1\¾õçÜ„Xãeñ4ÐÛA-îB%‡i•f·øÝoWÛõÙîö&„VyzRýõëåMÈM<vô˜¹ÛäçyÑBäçÝ § š*kšÚp’ – ´DM¶"¤Ö"Á}Â/¥š}iWÅÚ½÷ DRÍåÃœ=Ä+f*ß=Å{æDq(€)¤XšÖu ¸li‰È¶)¯ããÉh&ÕžŽ¹Ó·0-µÖî§[Í3A S(Tè ¦AóPˆ±ºúo‡œ_Z’äöçYcÁ>²Ai¥}ŒTù¾g¥ð÷fO´ö.TCfG­•„¿Öe„ÑŠrÙ´
+廡·Q–”((Æ(æ.²Ç”éÒ¦u¬tȦ&pˆN&FÞQÅÍ4ê‡Àˆae ¼}LîXi]Ô­ói·¿¶\3å:Š; ©q±ƒiåâòUô4äÅÔKA* ù¸ÇÑÿ§Ž +¬m=Խ’›ÞÛ}¥­ îLw[ƒÌ˜êI^W%ßnÇ¡#\ìq|¡µCA$«Þ™ĉwöóE9:!â>ú “à b¶4ôd
+:œ'æä“}û–Ê.´„´ùXâÞæÕ¾ôƒF®¶åçÕú&/¿)­Ë/·ójK•Ë«¼þY¯ÖHŽ*¸LWÎLÙcAUZVw4;ììîn®ðYîx)™Ó¡ôDf‘Ub8É/‚ ç›üæ •b1üÂÄß{]V1#L¦-t[O:º²¦H×Á×ÕÚ®±
+G|ÜÆ;°C“ÔcæíÏÎV7vfºs“ h¢×ȯ(¹ž0 ‚ˆ‘ –4|*? Tö¤ÈOFNËO"lY¹ù)×Y76?¹tù)ÜÝÑ>E~‚¥:=•K0<AµÛ§çüXrím¦ õØ D±î¢m®´$ë Dg›|µÍ»vóÑ/*ŸE•“>†Ý}Ø/ѾºÐÁ‚v1t÷a¿@öB%
+;ñ‡s¡G5™€Û°d©º5{žß£Î:Þ–ÙAr*žN€Pkãï&9ºQ+R@»ò}Ýw£G3
+Ë;Trˤ01è‹‘Ü ¦Üm+)3䢒RŸºún’OǬIÞÄ|~’K‡Oå<X’Ub¹,*êÎëzÍàbÂ<éw'·Ã¥Wô ,z‰&ò‹± ýLy±s,Ëì´T*`Xú,“è•Â¡Õ~–%À¬Xaþ
+¡’·±|š¬ Î )d–4—Cde:f-+MÌç—•ÐGiA d%X
+•ã@YI
+endstream
+endobj
+13297 0 obj <<
+/Type /Page
+/Contents 13298 0 R
+/Resources 13296 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+/Annots [ 13240 0 R 13241 0 R 13242 0 R 13243 0 R 13286 0 R 13287 0 R 13288 0 R 13289 0 R 13290 0 R 13291 0 R 13292 0 R 13293 0 R 13294 0 R 13295 0 R ]
+>> endobj
+13240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 758.07 190.439 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a0bbd7bff77a542b4ddde4536cab3b75d) >>
+>> endobj
+13241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 744.771 231.271 755.309]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_abe111b0743c0e9366b657e9d8aa49535) >>
+>> endobj
+13242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 731.549 235.252 742.01]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a9a1b3a238e6cfb7b1eb26316632df179) >>
+>> endobj
+13243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 718.251 245.223 728.712]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_af99a3ff65020c6a863c02e75a852b410) >>
+>> endobj
+13286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.876 235.754 715.413]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_ae8dcd08a405a359f4f57592863c71233) >>
+>> endobj
+13287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.024 691.577 209.48 702.115]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a653201534dcf88c265079f926a58fe0b) >>
+>> endobj
+13288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.075 666.324 218.502 676.861]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a8b839dfd2155ac82b18f6043081338c5) >>
+>> endobj
+13289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 604.94 187.471 615.401]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.971 604.94 262.599 615.401]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a349a31792ab7562dd5f82fe2b7d4d15b) >>
+>> endobj
+13291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.986 591.691 247.832 602.103]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_aa7b11ed90a2ae54387b9196bbc71b18a) >>
+>> endobj
+13292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 580.114 130.652 588.804]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list) >>
+>> endobj
+13293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.152 580.114 191.174 588.804]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a70d9b573368eb44e376d107a0ba9bded) >>
+>> endobj
+13294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 566.816 124.044 575.506]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list) >>
+>> endobj
+13295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.544 566.816 179.85 575.506]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a5ef8d450de1a51cf90a4a685a40f2af9) >>
+>> endobj
+13299 0 obj <<
+/D [13297 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13300 0 obj <<
+/D [13297 0 R /XYZ 70.866 619.876 null]
+>> endobj
+5646 0 obj <<
+/D [13297 0 R /XYZ 70.866 551.755 null]
+>> endobj
+13301 0 obj <<
+/D [13297 0 R /XYZ 70.866 530.385 null]
+>> endobj
+5650 0 obj <<
+/D [13297 0 R /XYZ 70.866 497.416 null]
+>> endobj
+13302 0 obj <<
+/D [13297 0 R /XYZ 70.866 473.127 null]
+>> endobj
+5654 0 obj <<
+/D [13297 0 R /XYZ 70.866 425.82 null]
+>> endobj
+13283 0 obj <<
+/D [13297 0 R /XYZ 70.866 401.531 null]
+>> endobj
+5658 0 obj <<
+/D [13297 0 R /XYZ 70.866 366.179 null]
+>> endobj
+13284 0 obj <<
+/D [13297 0 R /XYZ 70.866 353.943 null]
+>> endobj
+5662 0 obj <<
+/D [13297 0 R /XYZ 70.866 318.667 null]
+>> endobj
+13303 0 obj <<
+/D [13297 0 R /XYZ 70.866 306.431 null]
+>> endobj
+5666 0 obj <<
+/D [13297 0 R /XYZ 70.866 271.097 null]
+>> endobj
+13304 0 obj <<
+/D [13297 0 R /XYZ 70.866 258.919 null]
+>> endobj
+5670 0 obj <<
+/D [13297 0 R /XYZ 70.866 223.585 null]
+>> endobj
+13305 0 obj <<
+/D [13297 0 R /XYZ 70.866 211.407 null]
+>> endobj
+5674 0 obj <<
+/D [13297 0 R /XYZ 70.866 176.073 null]
+>> endobj
+13276 0 obj <<
+/D [13297 0 R /XYZ 70.866 163.895 null]
+>> endobj
+5678 0 obj <<
+/D [13297 0 R /XYZ 70.866 128.561 null]
+>> endobj
+13281 0 obj <<
+/D [13297 0 R /XYZ 70.866 116.383 null]
+>> endobj
+5682 0 obj <<
+/D [13297 0 R /XYZ 70.866 81.049 null]
+>> endobj
+13272 0 obj <<
+/D [13297 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13296 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13314 0 obj <<
+/Length 1686
+/Filter /FlateDecode
+>>
+stream
+xÚÅ›ËvÛ6@÷þ
+.¥…'Àà½L¹MN§©ºJ²PüŠNdÉ•åö´_ßH&„Âø€ÂØÚX´MÍ€¸ 8$Eu]‰ê—£Ó£g§^U‚µªš^UN€·¶rÁÊjzQ}9PÆÇqtvzúælŒbôüåøÓôõÑdzôב¤P¢’•TDØ~ÕÓçùÍчO¢º ÿ½®¨à«¶{ÞT;ÐÆ¢úãè÷ž¤–à|’Ãt,#õÅ› œ¼{7>FçG§¯ÞLê­÷“ÓÉûÉÛúUŠ`qtòëówÓÉûú¿®Iþûþ/ÏNþümò¶ ºý9}uööÇ&µ½á=xÔ5IF«o­Ý6}=l%ˆ¶y•­æuz_on{zW
+ÐÁm¿‡vXï&|)HïÒ®cÏ.7=\tÄÓ \ ŒN¹w›ÙyO_ïæÿÕ)ôd@=†Î0dà¶MšÁbý¹îõˆñ±1öûÑ TžJ]Qâ–ÈB#OˆíW?
+¡ê}v
+Ú„ï;Yï¤Mg§ciHåi#€F_ïüò’bâr¾™¯–uV³Mý¹˜//ë-L½±ºj¸¸lÿ“ZÍ.~ìF†è¤Ùå•ÖIî(<XSG²i›úªoÐ"ZÚÃr0iô(´)s3[__nàüöv¬ÌzŽu³m«c¤¯‡ÛF²(í9t‹Ÿ:dëVn}ë‚ùVžB+\’B1ÏAô¤ó)ñ`Š[C§N9\q-Ë·AA@É xŒäPf(ÎÀlO˜¯¸¥£¤Ç5FBåšaÞo7u–—ÌØYN¦ÌÙU3¶þíAú˜Nž!¤Üƒ ¦-HÚ,˜1ºL0‹¡kÜ~Á´Ù®–3+g¶‚u™O ˜t`^=ç
+F‘šÁÊ™­`]f†`åàF°.÷fv÷µ‡èIf:Ã30éGjBo×q¥°:ïÓÀAPE#U
+>Øt4¸`›éÄåO'VbÑtb‚§+gÇ0˜àÀŸ100›é$aNÌàéÄØ
+>œat%¬ý†_f˜@@ÇQ_Š‘„Ó9†•3[úÌÇ7L;ºÖõÁ°Éøa³1,a.æŸ×³õ¶¨Ô»:v …ç€[A ¿?Ø(MNîa™+³ŒÖý ,G‰'F’3,c`6–%Ì'° é‚×9Ë(’u9%fkY—™iY9¼µ,mðz>[ô]ˆjVs`½gôN›%·pŸEª.[¤jaAkŽòRŒÔ^V?ìv9²u»ƒ||µ•sÛ[ åjÇHÎæ—˜Ú 3Omx£vß|©«=÷×_nï7}CÓÒÎåøXò‰÷¥Ò¶W\2Õ| HÜg™l]‘ãŠÆ½Q5ŸI©œš³‘<a>劆¬Q–S¼É©ù00[Ë»ÌLËËá­å]øæ~½œ5¢//~b9]G•ã·–ÓfÚöƒZ®ö9“ù¶¾ÍQnŠ‘4æ”›˜­å]æãß(B 5G¹ ½„ 1ÃrfcyÊÌyÎ"–tr¤à”Ç4…Þ,cöx°É—­šÑ"8ÉQxŠ‘ŒÌ)<10×渦4šÃ5Š$rN¨ ÈVµ.rˆiå´¦u3è»kC«da8€^€ &îy&M+ö=YÔ¢Ðl©Á ŽbWŒdEN±‹ÙšÝe>¾Ù±„¢$G±+F’²9Î÷Ë~¹•£îòTM»£O©>pŸS4, ŽÏ)êÿ䙋`AKÉ ¤)ôg.¤¸ïNító¡f”(¸3{<Àeµ,šQâ­:ï9*l1’Íy~‹ÙL(]$Ë|²úÙ|hÀ)úš(-°Å.§@(l{;önSõø£Onm©õ xMÛʤüö¡‹¾µ‚T,`ZuÜlU®·å€Á¦¡(«sÑÁqÔ¹b$çrê\ ÌVµ.óÑ] ñ ®ÊU£8ô@ÓÊáh]ú’èýŽá.®ŽÓ? v|+p`C<…î`v“ŠN¡v— Tá¢ÜÅ—¨8*[Í qoÛ—ˆ:Ä©¿½¼×÷. qàqÈ›€õð1ƒ4nèN{‚mÓÎî¢ÿ8Æ‚
+endstream
+endobj
+13313 0 obj <<
+/Type /Page
+/Contents 13314 0 R
+/Resources 13312 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+>> endobj
+13315 0 obj <<
+/D [13313 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5686 0 obj <<
+/D [13313 0 R /XYZ 70.866 751.869 null]
+>> endobj
+13274 0 obj <<
+/D [13313 0 R /XYZ 70.866 739.638 null]
+>> endobj
+5690 0 obj <<
+/D [13313 0 R /XYZ 70.866 703.957 null]
+>> endobj
+13285 0 obj <<
+/D [13313 0 R /XYZ 70.866 691.726 null]
+>> endobj
+5694 0 obj <<
+/D [13313 0 R /XYZ 70.866 656.103 null]
+>> endobj
+13306 0 obj <<
+/D [13313 0 R /XYZ 70.866 643.815 null]
+>> endobj
+5698 0 obj <<
+/D [13313 0 R /XYZ 70.866 608.191 null]
+>> endobj
+13275 0 obj <<
+/D [13313 0 R /XYZ 70.866 595.903 null]
+>> endobj
+5702 0 obj <<
+/D [13313 0 R /XYZ 70.866 560.279 null]
+>> endobj
+13282 0 obj <<
+/D [13313 0 R /XYZ 70.866 547.991 null]
+>> endobj
+5706 0 obj <<
+/D [13313 0 R /XYZ 70.866 512.367 null]
+>> endobj
+13280 0 obj <<
+/D [13313 0 R /XYZ 70.866 500.079 null]
+>> endobj
+5710 0 obj <<
+/D [13313 0 R /XYZ 70.866 464.455 null]
+>> endobj
+13277 0 obj <<
+/D [13313 0 R /XYZ 70.866 452.167 null]
+>> endobj
+5714 0 obj <<
+/D [13313 0 R /XYZ 70.866 416.543 null]
+>> endobj
+13279 0 obj <<
+/D [13313 0 R /XYZ 70.866 404.255 null]
+>> endobj
+5718 0 obj <<
+/D [13313 0 R /XYZ 70.866 368.573 null]
+>> endobj
+13278 0 obj <<
+/D [13313 0 R /XYZ 70.866 356.343 null]
+>> endobj
+5722 0 obj <<
+/D [13313 0 R /XYZ 70.866 320.72 null]
+>> endobj
+13271 0 obj <<
+/D [13313 0 R /XYZ 70.866 308.431 null]
+>> endobj
+5726 0 obj <<
+/D [13313 0 R /XYZ 70.866 272.808 null]
+>> endobj
+13273 0 obj <<
+/D [13313 0 R /XYZ 70.866 260.519 null]
+>> endobj
+5730 0 obj <<
+/D [13313 0 R /XYZ 70.866 224.896 null]
+>> endobj
+13307 0 obj <<
+/D [13313 0 R /XYZ 70.866 212.607 null]
+>> endobj
+5734 0 obj <<
+/D [13313 0 R /XYZ 70.866 176.984 null]
+>> endobj
+13262 0 obj <<
+/D [13313 0 R /XYZ 70.866 164.695 null]
+>> endobj
+5738 0 obj <<
+/D [13313 0 R /XYZ 70.866 129.072 null]
+>> endobj
+13267 0 obj <<
+/D [13313 0 R /XYZ 70.866 116.783 null]
+>> endobj
+5742 0 obj <<
+/D [13313 0 R /XYZ 70.866 81.16 null]
+>> endobj
+13256 0 obj <<
+/D [13313 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13312 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13318 0 obj <<
+/Length 1637
+/Filter /FlateDecode
+>>
+stream
+xÚÅ›M{Ó8€ïù>&‡
+¤IG(é.<,eÙì 8t›
+D•FT‹eõnzüóÓ7‹ùÛÙ‘ñaêÕ숌™ž¼x5¯ÿòüôø÷_æ¯30zútóïâÅéëÙèH†O°Øœszròêt–Žz>û°x9™/&M€¢+¨ltÊ8¿!«ó«É»ºZò¾¬´²1Tÿl½ª¸i‘¿\V¿M~íù 6’ŠÖg¿¡iݳWsuüæMÝðo?áíüdþvþúxþ}³ÚþA㶵ʡUèì׆énc_(Ý6ðï™ÕÓ›‹eÝ ›«Ûï› UŒ›Ó ëŸ `…ÿ) ×tµî¡¯<z¬ÕÊ9Ÿs—3Àé×gWç=hòÊ@STôøåÝug¿×¨gGˆôm¸)ONÀU|1™C8£00bsê{­m}LŽ1ÊaüvB}ÃÎAG€NéùKT΄úàç+Ži®/Ö7×u«ÎÖõçåÅõªþÆ>5³ãcÛpm.WíßR£nΖßw£ÑÈtp*X;®³¶a‰8Ò¦é½s•‡ ¦‰Êʙ볻O«µ:¿½Yœªž±ànÊQudø#¸Ñ’±#ÖËø\lY9·Õ¬ ¾:û·‡éø¬Ô³åLä±Ê™ëÏw«³å}78¾PJ`_lN=˜Õ”Óv¼Õ~W©yžrÚ£hy¡Hjž¨¾Žä l•š‡%ÆñÐçÄAJ[å¼ÛÕi"TÎ
+dÎÈðc ÓÜÆé |½º_¯zf`T!ÍŒr,±Þæ؃ æHùtA6MYÚ$ë± ÒÞ´I7KÛÇÓ¦
+|¹@rWr9ó‘{"<LÎJ°)]%lÎ> clºÞaeË
+@§‰kƒ(P
+]þ[ùpŽ?^h*+. poj‰‡sR$ÒæñêR
+lÞpÝ
+endstream
+endobj
+13317 0 obj <<
+/Type /Page
+/Contents 13318 0 R
+/Resources 13316 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+>> endobj
+13319 0 obj <<
+/D [13317 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5746 0 obj <<
+/D [13317 0 R /XYZ 70.866 751.869 null]
+>> endobj
+13253 0 obj <<
+/D [13317 0 R /XYZ 70.866 739.638 null]
+>> endobj
+5750 0 obj <<
+/D [13317 0 R /XYZ 70.866 703.957 null]
+>> endobj
+13258 0 obj <<
+/D [13317 0 R /XYZ 70.866 691.726 null]
+>> endobj
+5754 0 obj <<
+/D [13317 0 R /XYZ 70.866 656.045 null]
+>> endobj
+13254 0 obj <<
+/D [13317 0 R /XYZ 70.866 643.815 null]
+>> endobj
+5758 0 obj <<
+/D [13317 0 R /XYZ 70.866 608.133 null]
+>> endobj
+13260 0 obj <<
+/D [13317 0 R /XYZ 70.866 595.903 null]
+>> endobj
+5762 0 obj <<
+/D [13317 0 R /XYZ 70.866 560.221 null]
+>> endobj
+13261 0 obj <<
+/D [13317 0 R /XYZ 70.866 547.991 null]
+>> endobj
+5766 0 obj <<
+/D [13317 0 R /XYZ 70.866 512.367 null]
+>> endobj
+13266 0 obj <<
+/D [13317 0 R /XYZ 70.866 500.079 null]
+>> endobj
+5770 0 obj <<
+/D [13317 0 R /XYZ 70.866 464.455 null]
+>> endobj
+13255 0 obj <<
+/D [13317 0 R /XYZ 70.866 452.167 null]
+>> endobj
+5774 0 obj <<
+/D [13317 0 R /XYZ 70.866 416.543 null]
+>> endobj
+13263 0 obj <<
+/D [13317 0 R /XYZ 70.866 404.255 null]
+>> endobj
+5778 0 obj <<
+/D [13317 0 R /XYZ 70.866 368.631 null]
+>> endobj
+13268 0 obj <<
+/D [13317 0 R /XYZ 70.866 356.343 null]
+>> endobj
+5782 0 obj <<
+/D [13317 0 R /XYZ 70.866 320.72 null]
+>> endobj
+13257 0 obj <<
+/D [13317 0 R /XYZ 70.866 308.431 null]
+>> endobj
+5786 0 obj <<
+/D [13317 0 R /XYZ 70.866 272.808 null]
+>> endobj
+13252 0 obj <<
+/D [13317 0 R /XYZ 70.866 260.519 null]
+>> endobj
+5790 0 obj <<
+/D [13317 0 R /XYZ 70.866 224.896 null]
+>> endobj
+13259 0 obj <<
+/D [13317 0 R /XYZ 70.866 212.607 null]
+>> endobj
+5794 0 obj <<
+/D [13317 0 R /XYZ 70.866 176.984 null]
+>> endobj
+13265 0 obj <<
+/D [13317 0 R /XYZ 70.866 164.695 null]
+>> endobj
+5798 0 obj <<
+/D [13317 0 R /XYZ 70.866 129.072 null]
+>> endobj
+13270 0 obj <<
+/D [13317 0 R /XYZ 70.866 116.783 null]
+>> endobj
+5802 0 obj <<
+/D [13317 0 R /XYZ 70.866 81.16 null]
+>> endobj
+13264 0 obj <<
+/D [13317 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13316 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13336 0 obj <<
+/Length 2078
+/Filter /FlateDecode
+>>
+stream
+xÚÅZ[sÚH~÷¯PÍVmAÕÐéû…šÝªIŒg2•‰w½Ì¼$yP°pT‹Á"SÙ_¿_«[€ mCPv_Œ,Zç;}.ß9§Íî2šýtñr|ñâʊ̧µÈÆÓÌPbµÎŒãD³l|›½ë"4é4ç½ë««7×}N{?^ö?Œ¹/þ¸`E3–1áuõ£Ÿ“û‹whv‹ï~É(ÎfÖ+ï3Èv¸˜eÿºøgB&1¶¥Ã¸Ï<êË7#òsÀí]½~3
+W7£«ÑÍèí+üË8wº÷êçÿ1Ý„oMT}»þòúÕo¿ŽÞF‘õßñëë·‡jla-±\>µ!©QRlöDwí«RöÕŒÐfsŸû‚öåmPoqÿ°-£Ä¹ú1®O3m ž1A´mï竢J¹Ó&X˜{æ¬ :[L|ý;«a¼ \°lwù1˜ù=U´?PJoÍU^\1™9ˆ
+Ÿ³r^„+.E ‹i£7å³¢¹çuZä·‡VäxÞÓÈ%àdÅ–æœZ¢U$E´b2F9×€Ò@rG×mÈ*_Þ™<<ô…ê‘„#LY"u6ÀãÔ¸“s ŽTŠu\$?.¹Îm²ku^¬ªtf'º
+å&¥æd!x*i‰.·Uªqó®Ñ¾Îu
+KÕúaÆY–Åê?þ½aWÎ쎼Í8ûnåg¢É‡ôHëê ýÔ2òÕ­;­5“E@ª³XP Ö‚$)õsuäàèHøCksèø§gB©`.­Ï˜ O•ðøLè% mŽ
+;@ŽCa 9Fcpý_IŽ$EïÙB g¬­Pµ98L $!y:1öÄ!Bá¯ÝÄxís"Ÿ…=†þl¶.†õ›7
+Ä¿qˆ ÿž­d}Ñ:0بWçàw‹ét–Ž à 4‚Ïp³îƒvÌ„éÂ{YLÅs]•3òé»ôq3&[NåJðH¯fùjµGZû¼€hÜ+ï9W{<W¿˜xi7–ø8o§›hjº=Gh-íû´­˜ý"mޢʵd×—‰Úµ—*p­öç» ÆžÞꪊ1>©ºØ°ñ“âsû§íwOD+ †Ã·‹NVÉ~Ø*Úwd‡0mìÚ"N¿9.Æœ>ëÕ“NÍD)5¶!Rÿ‚ƒj_9}¥!ÜùQ(82E¦U›7‹-̆ð¿ô#âïˆTkµùßÜαxœâbö-¡;öò1µñ\—ó³]µ<Ûë§A ‡¯QTëê“ÇÚú?s{Ð
+Jù¢Êo Bç¦ZÓ­Oe$âEÇŽ…ÛRÐÿËÀ²c
+endstream
+endobj
+13335 0 obj <<
+/Type /Page
+/Contents 13336 0 R
+/Resources 13334 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+/Annots [ 13320 0 R 13321 0 R 13322 0 R 13323 0 R 13324 0 R 13325 0 R 13326 0 R 13327 0 R 13328 0 R 13329 0 R 13330 0 R ]
+>> endobj
+13320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.873 409.444 170.51 418.41]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8cpp_a349a31792ab7562dd5f82fe2b7d4d15b) >>
+>> endobj
+13321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 225.112 180.753 233.971]
+/Subtype /Link
+/A << /S /GoTo /D (class_table_list) >>
+>> endobj
+13322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 211.501 208.799 220.36]
+/Subtype /Link
+/A << /S /GoTo /D (struct_table_list_1_1_node) >>
+>> endobj
+13323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 198.13 162.42 206.748]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table) >>
+>> endobj
+13324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 182.747 188.601 193.137]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 155.303 153.57 163.921]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list) >>
+>> endobj
+13326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 141.691 155.811 150.31]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table) >>
+>> endobj
+13327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 126.309 181.993 136.698]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+13328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 98.864 146.962 107.482]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list) >>
+>> endobj
+13329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 85.252 180.262 93.871]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list_1_1_iterator) >>
+>> endobj
+13330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 69.87 188.233 80.331]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_list_1_1_buf_entry) >>
+>> endobj
+13337 0 obj <<
+/D [13335 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5806 0 obj <<
+/D [13335 0 R /XYZ 70.866 751.829 null]
+>> endobj
+13269 0 obj <<
+/D [13335 0 R /XYZ 70.866 739.436 null]
+>> endobj
+5810 0 obj <<
+/D [13335 0 R /XYZ 70.866 703.12 null]
+>> endobj
+5814 0 obj <<
+/D [13335 0 R /XYZ 70.866 673.933 null]
+>> endobj
+13310 0 obj <<
+/D [13335 0 R /XYZ 70.866 654.106 null]
+>> endobj
+5818 0 obj <<
+/D [13335 0 R /XYZ 70.866 634.586 null]
+>> endobj
+13311 0 obj <<
+/D [13335 0 R /XYZ 70.866 596.28 null]
+>> endobj
+5822 0 obj <<
+/D [13335 0 R /XYZ 70.866 561.636 null]
+>> endobj
+13308 0 obj <<
+/D [13335 0 R /XYZ 70.866 535.16 null]
+>> endobj
+5826 0 obj <<
+/D [13335 0 R /XYZ 70.866 498.844 null]
+>> endobj
+13309 0 obj <<
+/D [13335 0 R /XYZ 70.866 486.576 null]
+>> endobj
+5830 0 obj <<
+/D [13335 0 R /XYZ 70.866 450.135 null]
+>> endobj
+8748 0 obj <<
+/D [13335 0 R /XYZ 70.866 371.136 null]
+>> endobj
+5834 0 obj <<
+/D [13335 0 R /XYZ 70.866 353.169 null]
+>> endobj
+13338 0 obj <<
+/D [13335 0 R /XYZ 70.866 238.583 null]
+>> endobj
+13334 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F13 9222 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13353 0 obj <<
+/Length 2384
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[ÛnG}×W °/$vºªúš7G¢6 iWa ,œ<0í%¯.^äï·z¦‡š&g8N[Xì‹eQ3uººÎ©ª¾P YüýäûÅÉ·çŽ
+'¼1T,>V
+gLa=
+Åâ¦x?9ýáÍ?ó«é ­›X1ÄÉùoçÕ'g—§¿þ<¿XLåäMùïâÇË‹é ½áÈÄw.ÏÏß^NÃSgÓß?Ì'ÿ>ˆ, PÒ”®DvÒןNÞÿ.‹þãO…ä]ñŸòÑOÍón‹_NþÙâ‚’N8ïâè¾;?TÃ~qàj~>¿š_œÎwUφc‹¨öIiZÑfX²9Ú
+ÂjošSl@Èz|?/¯ÂÌÜ?–ƒ¨ßþö\é†g`„u¶˜ä|õæoˆ:y§x?ÓÚLþv³úMJ¼[Å?w>F¿®ÊÇ‚óeLÚâ<LÍ£T(аp¤ƒ¶$P—†¤ÅjÐL—«íb¢T¬Ê
+”z]þIâ6ÂdàÒÚĿјþ5A{ø74ò¯‰ÙÏ¿ñ°5ÿš¸%Áÿ}ö/…7ž}Á…ØÀ¾{sÕF>nŠs@zÅ0Åì"’pZg@EäD¦¶<í¦Ÿ1Âs3à/ º-ÜÃÒß»©eî= â ou$áë,H w+2­ÎBÁÑ€5ˆ}‹¹á_³Ÿ~£Qkö5PÊ}Ro{%= 5Ê,fÜrJ×Ò!‘>­ïï²-¥¿LQOî×7ÄMYšó>O×19`£i}rf°…â!Åò4<;õäÜ×SÞBxůR\ Lƒöaõqýø´zhAu¼jÕÖ)a$¸O5™·KÄ$”Z¶¼å±}÷ÝÅýͪb¨Â³Y,IÆË …ŒáÉ«žI YàëgV›ÕÌ®·Ú•Ã[
+ûeÔámÎ7<M“Ú¿)L:]äV$ ññ[mÙÃcU¹ ¾)२ïq '1kìW(ÅË€~× ~¦Tû²…©:“Tÿt&ªÄÁY
+µ0,‡piår—:Ï„…­Ì¡ÃúÀaiL Ã>©‚>*q ;ØB[ã•% æ€<fËxf@ÖR )òóÝždæAHK9 9íXC)tw6C³p4D{ÓccL H6þFÑ£‚I¯‡ÎÐ*C2ÃÐÜæ𥾙¥½¾’Ьçb†¸Úl×E¯…e¶jæŽYôr¦Legs¢±“³vš7´B{{·¸mýnj ¬ùeØ%ú1=\ëB#¤ÃMaÜÿtªoÂrO„[k–ÑQÝi^ ¨ÁZ29NÑÁGÛ÷gEnò¥ö9€ ×Aåà*I0“×[!k*Nùý¥êëD‹’†1ÑhaO´Øh<<\ã‘ëp5‘CÊû:jä°A±â«´Ž›,Îo@ÇÄŠó7Ń-´ÅŠ3¿¯,G¿7VšÛU 9 ÇHAŠó÷v*Üʦ\Ø1lÅ4³iyö¬KÉ‹è³ÕÓr}»º‰§ö«Çë‡õç°Nn©2MªõŠºzuymÄPWºß”³òON¥üýù±.?ÿ+>õg|¼²ñ|÷´þ?¹]ÿñJÀ²î=Â>€({dnM}¹ó:ä¸ÃVí-­_F¹Ž?Ãç·={NûbkÃFŠ+Tˆ1ç’1ûNáX¬²„õîHÒˆ?·ÚºÊáÝ]éYl‰5ÆXo®ÔÁÞž³ûëçOœ´—/ÐÔM€—½»ž=:ÅYÃB80°¥Hö*KvïqmØB@29Ps MŠÚµWZP`ÆhTä©–äRÔîÝ:ÍÝå˜c4¼À9>›vÑByDëÊ=:ˆj² Ûv/›t ígà¥@­SBí2rùT ¿fZ9òL¤Ü'Yä6ÛWG^eÛQWLg]YBl—¬hQÏ È
+ë±ìqå±""Ã#—ADÁÔûó="Ê€E” öˆh<j-¢µWDp£ˆRÜòÄåëÉhˆŠŒ§"e8B>‡ŠØ(ÿÚ*âV
+sT¢`Hš½'æÜ+„N{<¤ Wq\Ù% é…3ÜDn÷µNÝÜ#,{°ñ¨Z C*Aí¨@Õùø@Ñ„#&ñµ‡Æ©F²Z³”6$-¼²hÂ}pA5h±Ü‹:@6@£nÐáŒG­•“ öJ'nÔNŠÛUy^Y>8J>¨•
+üôr Ê‘Vå ÿt¦•ë?©¹–cpRãÛ~e»œôCǽ%ZÚ’x`HªÃÑÿ›‡+[µ×}ãçż·}—
+§\³«Õ‡ÎW«»ë¶¶½'[$ „ï4 iF]Uâõ{8xßk-ǵæÉÙ*M$§Zm߯Ֆ§`È·k«ü©¼G/°)¥Ë«6å Àúmèÿ!nú
+endstream
+endobj
+13352 0 obj <<
+/Type /Page
+/Contents 13353 0 R
+/Resources 13351 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13251 0 R
+/Annots [ 13331 0 R 13332 0 R 13333 0 R 13339 0 R 13340 0 R 13341 0 R 13342 0 R 13343 0 R 13344 0 R 13345 0 R 13346 0 R 13347 0 R 13348 0 R 13349 0 R 13350 0 R ]
+>> endobj
+13331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 739.157 311.968 749.676]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a822ff5fd9defe13d604086e86aa6af39) >>
+>> endobj
+13332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 726.319 301.504 736.838]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a092d60dd372646b492fb7ff74486e217) >>
+>> endobj
+13333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 715.251 306.48 724]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a2c84ea0b1b142a85bf761256143f00f0) >>
+>> endobj
+13339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 702.413 296.017 711.161]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a7fa489ff88f3d60b788e1e9fe34a72ca) >>
+>> endobj
+13340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 689.575 300.016 698.323]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_af82929694b31087bb31aaaad7b37913d) >>
+>> endobj
+13341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 676.736 289.552 685.485]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a506bac3d4e7a10e6c4c9b5eb5245f169) >>
+>> endobj
+13342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.024 626.818 209.48 637.356]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a653201534dcf88c265079f926a58fe0b) >>
+>> endobj
+13343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.075 602.025 218.502 612.562]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a8b839dfd2155ac82b18f6043081338c5) >>
+>> endobj
+13344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 543.846 130.652 552.536]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list) >>
+>> endobj
+13345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.152 543.846 196.787 552.536]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_aec55f938ca6f44af430612f8b66aabcc) >>
+>> endobj
+13346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 531.008 130.652 539.698]
+/Subtype /Link
+/A << /S /GoTo /D (class_func_list) >>
+>> endobj
+13347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.152 531.008 191.174 539.698]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a70d9b573368eb44e376d107a0ba9bded) >>
+>> endobj
+13348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 518.169 124.044 526.86]
+/Subtype /Link
+/A << /S /GoTo /D (class_var_list) >>
+>> endobj
+13349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.544 518.169 179.85 526.86]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_a5ef8d450de1a51cf90a4a685a40f2af9) >>
+>> endobj
+13350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.097 458.144 206.837 466.834]
+/Subtype /Link
+/A << /S /GoTo /D (offload__table_8h_source) >>
+>> endobj
+13354 0 obj <<
+/D [13352 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13355 0 obj <<
+/D [13352 0 R /XYZ 70.866 753.919 null]
+>> endobj
+13356 0 obj <<
+/D [13352 0 R /XYZ 70.866 641.657 null]
+>> endobj
+13357 0 obj <<
+/D [13352 0 R /XYZ 70.866 556.838 null]
+>> endobj
+5838 0 obj <<
+/D [13352 0 R /XYZ 70.866 504.032 null]
+>> endobj
+5842 0 obj <<
+/D [13352 0 R /XYZ 70.866 444.006 null]
+>> endobj
+13358 0 obj <<
+/D [13352 0 R /XYZ 70.866 422.973 null]
+>> endobj
+5846 0 obj <<
+/D [13352 0 R /XYZ 70.866 402.296 null]
+>> endobj
+13359 0 obj <<
+/D [13352 0 R /XYZ 70.866 392.08 null]
+>> endobj
+5850 0 obj <<
+/D [13352 0 R /XYZ 70.866 356.217 null]
+>> endobj
+13360 0 obj <<
+/D [13352 0 R /XYZ 70.866 346.002 null]
+>> endobj
+5854 0 obj <<
+/D [13352 0 R /XYZ 70.866 311.861 null]
+>> endobj
+13361 0 obj <<
+/D [13352 0 R /XYZ 70.866 299.923 null]
+>> endobj
+5858 0 obj <<
+/D [13352 0 R /XYZ 70.866 265.782 null]
+>> endobj
+13362 0 obj <<
+/D [13352 0 R /XYZ 70.866 253.845 null]
+>> endobj
+5862 0 obj <<
+/D [13352 0 R /XYZ 70.866 219.704 null]
+>> endobj
+13363 0 obj <<
+/D [13352 0 R /XYZ 70.866 207.767 null]
+>> endobj
+5866 0 obj <<
+/D [13352 0 R /XYZ 70.866 173.626 null]
+>> endobj
+5870 0 obj <<
+/D [13352 0 R /XYZ 70.866 146.555 null]
+>> endobj
+13364 0 obj <<
+/D [13352 0 R /XYZ 70.866 125.522 null]
+>> endobj
+5874 0 obj <<
+/D [13352 0 R /XYZ 70.866 92.889 null]
+>> endobj
+13365 0 obj <<
+/D [13352 0 R /XYZ 70.866 68.947 null]
+>> endobj
+13351 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13390 0 obj <<
+/Length 2694
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[sG}ׯ ’¨2¾_T»©ÊÚRâ”c9Zí¾Ø~À0’¦”Dûë÷t7ƒè¡…Íx+/ÇÃw¾[ŸïÒcÚ»éÑÞ'ÿ¸:ùîÜŠž%NkÑ»ºîJ¬Ö=ã8Ѭw5é}ì"  5çý‹óówNû?¼|¾úùäìêä·Q´ÇzL8B]ø©ÅçøîäãgÚ›àï~îQ"œíýž¼ëA¶Ã—iïŸ'¿ft`’c®Ì£^þx¿‘×> †ÜØþùÛwgñÛåÙùÙåÙû×ø#£ÌÉþëŸ~øpuvÿ¶2áñù7¯ÿõËÙûèðß«·ï÷ «|b-±\2L*A”[Û讟UÎÏšZùû@Ðþ¼œìkà=ÁExšëÆžÝù½"V±c¿¯µ³0¥Zϯ?Q*棌ڌûŸŠö¸L0¢•HïgËâ¦\­‹eÙhB…î
+É­à=éÚTæÁ2JâÎmO}ÎOš09Å&LŠ9­G;Tã}°*pfá¤Xvr*a®‚w¡’–„ržªps³!÷ó©ëÖ· 6E}L¥}\‡çL!Ô—ÏZÆó…ÏɇZã7Š‡0’àTt¡Ÿ1¤q8„uàPÛ¬_šæ‘8ÒÒè%S„i"¯Êÿz>)2³${ú9ÏoK¤$èb…"”ÚÇ¥òf’<Tx›Á
+‹®ë #
+46b¯ì(Á”õ« Š?Žôþo¢§XZŒ[å²"lOƒ¬¢ÁÍB‡ÒÎÐ*èèP“¹÷Uüm9Oï'¡aá7óëëé“s>Å ÁŠ?S✭Å'U$ì<Q^½,ÁÕÖÂvû͆éQc8Õiï±U6ZÇvd*p/tØ,zþ–³ß€sYõÄj=™–_ÈmF”ôû‡íƒßg]é;ñõ´»Ÿ¡GšüUµ›ß-²ªù Œµ‡Us¾Ý¬Ö‘ºsÕîF‹Œ ÑNˆšbµ5’/ÈÉ¡ÄàLUu™ƒ†õaQLŠëÐxm¯Iê•5Ìštcô‰s•ü¦÷q¨”¼xfÏË°·Èì`äñ½ìI<‘Ë›ÍѼÜÓ'YËb-ëµ’@©Çö­©ïEI²ê[Ÿ7}½D›ÞÔ·Q¾MO@ÿ(×·PŒ9àè.@9\Ö@ ç!By·ª‡<¶ÕŠùWÑÎEšAÝþ¶=-lðÛße×™ãô¾»õË.? 4Ïby8‹wMÉäcmŸ†rÊ%¿*v/Ú§YÂ;ZB&O9%NFI’7ì,¤«.€ÑrP«àXòrµ½_' ¾õ“ ævÚÏQºÃF,}fˆ¶P…Ü„Ùgr£œ­¥f?ŽÓËÅ£Ú˜‰ŒwšI\lŠÊÅáq]¢·è
+
+fÄœ}|åä‰éÍR¢™:ª:Ì
+°BêŠé|ìçÙÿd£žûWiÊ<3V×ÿMZ|7B%Ì4¼Ù–ÖÕ 02QÐÿDBw€
+endstream
+endobj
+13389 0 obj <<
+/Type /Page
+/Contents 13390 0 R
+/Resources 13388 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+/Annots [ 13370 0 R 13371 0 R 13372 0 R 13373 0 R 13374 0 R 13375 0 R 13376 0 R 13377 0 R 13378 0 R 13379 0 R 13380 0 R 13381 0 R 13382 0 R 13383 0 R 13384 0 R 13385 0 R 13386 0 R 13387 0 R ]
+>> endobj
+13370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 349.569 249.971 360.031]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a30f922141d233fbbf9222b45b5be14d9) >>
+>> endobj
+13371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 300.428 189.695 310.966]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a6ae559687c267f9556b182333b12f738) >>
+>> endobj
+13372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 287.37 218.459 297.841]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_aea0f59da635767917f24abad7821608a) >>
+>> endobj
+13373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 274.061 218.961 284.657]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a5e1ce183037b2d86a94c2f094ae3b552) >>
+>> endobj
+13374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 260.878 254.306 271.474]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a2d227602e926615ff4ded70e1edc326c) >>
+>> endobj
+13375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 211.939 170.019 222.35]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a5b41c5ae4505891e6c53e26df197e02b) >>
+>> endobj
+13376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 200.477 174.578 209.095]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a5d893191aa98b4f6102ba7ddee3e51ef) >>
+>> endobj
+13377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 185.572 183.822 195.983]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_aa3a2ab4113e93a693365dac6ace40875) >>
+>> endobj
+13378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 172.263 277.775 182.728]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a7c40f313917f1f1bf44a136c3382b1f8) >>
+>> endobj
+13379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.524 159.079 260.838 169.545]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be) >>
+>> endobj
+13380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 147.743 147.061 156.361]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+13381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 132.712 177.474 143.178]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a955d5131e4314cca79ab0f1589635692) >>
+>> endobj
+13382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 119.605 185.947 130.066]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a1f8228bea1e3497369089a1e3876edf9) >>
+>> endobj
+13383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 108.192 169.18 116.882]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+13384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [104.743 81.883 135.373 91.744]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info) >>
+>> endobj
+13385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.581 81.883 186.713 91.744]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_aaf28ff52b37463352e2da5d664852573) >>
+>> endobj
+13386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 69.87 149.966 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+13387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.466 69.87 200.096 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a26bf9397a176185d3f88800139c68a40) >>
+>> endobj
+13391 0 obj <<
+/D [13389 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5878 0 obj <<
+/D [13389 0 R /XYZ 70.866 740.075 null]
+>> endobj
+5882 0 obj <<
+/D [13389 0 R /XYZ 70.866 700.115 null]
+>> endobj
+13366 0 obj <<
+/D [13389 0 R /XYZ 70.866 680.628 null]
+>> endobj
+5886 0 obj <<
+/D [13389 0 R /XYZ 70.866 661.522 null]
+>> endobj
+13367 0 obj <<
+/D [13389 0 R /XYZ 70.866 647.622 null]
+>> endobj
+5890 0 obj <<
+/D [13389 0 R /XYZ 70.866 614.45 null]
+>> endobj
+13368 0 obj <<
+/D [13389 0 R /XYZ 70.866 576.573 null]
+>> endobj
+5894 0 obj <<
+/D [13389 0 R /XYZ 70.866 543.352 null]
+>> endobj
+8749 0 obj <<
+/D [13389 0 R /XYZ 70.866 517.304 null]
+>> endobj
+5898 0 obj <<
+/D [13389 0 R /XYZ 70.866 500.345 null]
+>> endobj
+13392 0 obj <<
+/D [13389 0 R /XYZ 70.866 362.291 null]
+>> endobj
+13393 0 obj <<
+/D [13389 0 R /XYZ 70.866 315.383 null]
+>> endobj
+13394 0 obj <<
+/D [13389 0 R /XYZ 70.866 226.768 null]
+>> endobj
+13388 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F45 6502 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13412 0 obj <<
+/Length 2348
+/Filter /FlateDecode
+>>
+stream
+xÚµ[K“9¾÷¯¨#D,Z)õîˆ=xmzÖc···w/0T·‰¥Ú³þ÷û©
+D‹GQòÅ`[•_*•_¾Tðâ±àÅ/W¿¿úë“…cÞYÜ?–3gLa=1#ŠûQñ¹óöo>Ý÷ïº=²®cY·gˆ:7ïë×ÿòîöí¿?ô?ÞwñΛêÏû÷·»=Á…Wx@nž¹½¹ùí¶V½ë~¹ÿõªõÇ•€"¼…tX È€ì¸/†OWŸ¿ðb„ÿüµàLzWüY-}* šÇ—Iñ¯«&¶ =g\‹hkíî~é×ßØÛOŸjõ·¹ëßôïúßö_+·±ŠsÌ‘:¦›Ò’i%_Ôã»–Ö²œYíÍ®©`|£ge-lÇaÆ®áórT>¬M=>?•ÓÕ`5žMƒ–•ÈíÎyÑø›óµ°Õî³ß»’wfãÑï\óúQ¡
+G©RFk¦ÉABõäïœË„|Ë”U›5³‡°j6½6—0Š‘/¬"FV4;ÊPƒíT‚¸¥÷áy:L@:Ô290gBšôÏñêÛkPâ–ž”àä÷@çƒÅÓç%™mÎ/uvp9iOœ‚!i»F‹zÒ;kzÂ[æ•Ýè] ‘4WNWùÒ`UNÆÓ²þFªþœ­½-<1)7ÿvÐQˆsàÈÂ’dõ0R¸dÆÖ’8$Ö,ËÎç]©;ìÅ*;$ì â-zä˜Ý!!­IxwÛî¼!w-Þ9b7T ÞyyöÆwè@±¦Ï¿ö¼pâ®’#½:ÍlXIq™WH„=O12¬+tç1ؾS®ø4Çê ø4w*ÆÃË7Œ0ÙÓÚlÏ°ç¤:Èd)\sâXá.dŽ81\µbŽcF×’×™ƒ½¨¢Â&óz½ò *åtXŽj½¿†$ÿ£þ^%ýTÂq–+[¥˜Q¾Å„ÌÊZ’Z«u_çú×vƒEP ,%E¨Þ¼ÿ<'x K„‡ž0œ)$ýf¹Ýx]ÂÓbÏ"2µptÔU¡ ‚¬ZÆÛ# æ
+Hv‰ˆ®HøàI¡’R1ü¢|HgF«DL‰Ø!EŒ9™ ƒÅÿ[ŸŒ·;ãð…œÖ£•ÏËp„Ã/I2 Bpc2Ñjº¢gÎÉ Ó• ɸ&•Üf¸²—'*Õ‡³ér6IUä0Phè”PˆmíÊ+ÁI’y»V œn¨·îWÿVðÔ™i^Å‘æ1×ê̤Gµål†3“>Œþܱ¾íŠÃCGûzíÅK_¯=uúÓGìõúº™¼>Ao
+AÝW‚™ÓÝœE×.u`'˜&#kçHÒË
+,W{Ü<™sGAcݤs,G£ãµ€>ÙˆVsC„UEµ$%Ü«U5r|óÔã[¥žªª¡cà )X _ê©_:@—®Góp¨Ë]# ‚ÎádÙ\IÌgÁ+x'•w”ªãR{ì¬åö¤¾£+'§½Òêên¤éˆƒÚ9e@7â'}‚¬5m]R­†RY&w$.éOà¶V¸¦Rí‰bŠC1GâŒîDToëP#ŸÛÁ=<â×Ím•žðRè.ädüu¢í NU?R•ª®e[ÃYt8[z¥OÅå‰û U¦½22¼é¢#]’ =hÔì®Cq:#ó‡kÊp¦Êéj ³ïF{[Ô·H—Õpl¸‡7¸,WÏóÔ»e9aLnZ -"zØõO4ê÷ñr˜~‹µúGkHO ž‰ GƒÕ ʆ/?'Iý:E#öQ“ߦÔùEï^e{^½h¥43%Zö¡ÿ¸œ¸D
+endstream
+endobj
+13411 0 obj <<
+/Type /Page
+/Contents 13412 0 R
+/Resources 13410 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+>> endobj
+13413 0 obj <<
+/D [13411 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5902 0 obj <<
+/D [13411 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13396 0 obj <<
+/D [13411 0 R /XYZ 70.866 751.762 null]
+>> endobj
+5906 0 obj <<
+/D [13411 0 R /XYZ 70.866 733.15 null]
+>> endobj
+5910 0 obj <<
+/D [13411 0 R /XYZ 70.866 706.336 null]
+>> endobj
+13397 0 obj <<
+/D [13411 0 R /XYZ 70.866 687.15 null]
+>> endobj
+5914 0 obj <<
+/D [13411 0 R /XYZ 70.866 666.414 null]
+>> endobj
+13399 0 obj <<
+/D [13411 0 R /XYZ 70.866 642.531 null]
+>> endobj
+5918 0 obj <<
+/D [13411 0 R /XYZ 70.866 608.763 null]
+>> endobj
+13400 0 obj <<
+/D [13411 0 R /XYZ 70.866 596.759 null]
+>> endobj
+5922 0 obj <<
+/D [13411 0 R /XYZ 70.866 563.067 null]
+>> endobj
+13398 0 obj <<
+/D [13411 0 R /XYZ 70.866 551.063 null]
+>> endobj
+5926 0 obj <<
+/D [13411 0 R /XYZ 70.866 517.429 null]
+>> endobj
+5930 0 obj <<
+/D [13411 0 R /XYZ 70.866 490.615 null]
+>> endobj
+13409 0 obj <<
+/D [13411 0 R /XYZ 70.866 471.429 null]
+>> endobj
+5934 0 obj <<
+/D [13411 0 R /XYZ 70.866 451.623 null]
+>> endobj
+13402 0 obj <<
+/D [13411 0 R /XYZ 70.866 438.689 null]
+>> endobj
+5938 0 obj <<
+/D [13411 0 R /XYZ 70.866 406.777 null]
+>> endobj
+13406 0 obj <<
+/D [13411 0 R /XYZ 70.866 369.208 null]
+>> endobj
+5942 0 obj <<
+/D [13411 0 R /XYZ 70.866 335.391 null]
+>> endobj
+13407 0 obj <<
+/D [13411 0 R /XYZ 70.866 311.507 null]
+>> endobj
+5946 0 obj <<
+/D [13411 0 R /XYZ 70.866 277.798 null]
+>> endobj
+13405 0 obj <<
+/D [13411 0 R /XYZ 70.866 253.78 null]
+>> endobj
+5950 0 obj <<
+/D [13411 0 R /XYZ 70.866 221.944 null]
+>> endobj
+12317 0 obj <<
+/D [13411 0 R /XYZ 70.866 196.129 null]
+>> endobj
+5954 0 obj <<
+/D [13411 0 R /XYZ 70.866 164.217 null]
+>> endobj
+12151 0 obj <<
+/D [13411 0 R /XYZ 70.866 138.554 null]
+>> endobj
+5958 0 obj <<
+/D [13411 0 R /XYZ 70.866 104.844 null]
+>> endobj
+13401 0 obj <<
+/D [13411 0 R /XYZ 70.866 68.997 null]
+>> endobj
+13410 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13422 0 obj <<
+/Length 2028
+/Filter /FlateDecode
+>>
+stream
+xÚÝZ[SÛF~çWhè‹=Soö~aÚΤ2)¤Ôyè$yPmA<52• iþ}¿Õ${1&ÚÌdú€-`u¾sýÎÙ•hr™ÐäåÞ¯ã½gÇV$–8­E2¾H %VëÄ8N4KÆÓäýÀaÉp¤9œ¿9r:xþbøqüzïh¼÷σ(š°„ G¨+oµøž\í½ÿH“)þ÷:¡D8›|.W^%íp1OþØû= “ŒÛÑa<dõüåQuE^ GÜØÁñÉ›£êêüèøèüèô¿2¦¸¾zþv|t^ý×Ôܯqvøî·£ÓZpù9>9;Ý4«ñˆµÄr¹Í,©QRÜYFÛ^V!/kFhcâd‘/W•n“!£ƒOiá•yvÌdâp'×þN©W¢¼ç¥¢ZÔO¤¹[s]dXÆÿ­ÖIÕZ7RœÈqJ8³Õúåò|¶š-òJ´Vk>˳ꊛê{qQ}û;æYó7¯Õ"nº’SJBm`*ùÓR¤£9§‚hã%Á“py©ù*-.³™\_…Ÿ  |-pÁ‰²µçÙÅPÐAVdù$›VzÿåóúK ­¥&&1Ü©äÎ*·ïGôøÓ%l´FAT’¸R•)[ÜÍ,%Ôðȉ¢y¹rw(ÊšpdUXNqÍtv†Ôü@Åûññ”S\E«4kÊ,g—y:_S'ͧê%¸Rúë%¤ Rª5½VéeÖ¨EýPÆ%#
+¢¦¹mzpp•^×ÄÃZÄ#PFJ7¤òSuŒlþëËk1›ŒY´~„Á$x‚5kj·¢hOò _¥‹€X¡ˆ¶±#:b à2¡¸³¢
+™©$it¾ºã_{¿Ìò
+µ¦á>! ²GÍ1åÊKÄŠš-§³"›”¥±‰ìÐ?À{ý‘9Eÿº‹œ.¡gŒ8úþ̇|ÍØ媘å—ïQ
+†by³?úrˆ=š*Hê Ø”QìŽ: ¡†Â’ "@:D©.än e§~â‡ñ?è'7ùßùâs©øa-N'h6kùá·ÙR$àXbÜ#<Kï&H× à Ũáe)W÷ˆëUñµú8v· ˜¶7ùd› ¹i#YÁˆæßÆŠÛz{ü€Ø YÉ
+¿¯RßÆŠªøv`‹&OÃÚ¾v8"©,eiÁ ¡¬[·‘*ì6SJ”Q‰
+¶f p˜¡<(âmœì¢¦E‘~Ù~ø¤«Ð~«Ã'Ûëð‰; 5žŸ¼$%ÜwsúÄ1Bbêø-o¶ãáSØúì©ûÀÙéPWk‡Oæ>=ýË-ð¥të“tÿ¢ó®c„9±My eFl¡´ô`˜d”UE‰s÷¹†Ü¥We€¼øT¿Þ2k2Õgk² >Æ@ñݲŒ¬‚Š®lN×YöÃ,ŸÌo¦¡aàþââb¶ÏBÁR´Á¹ØgÝ& ´žï]¾uàeùÓ¦úŒïêj‘“Oûu¢SE8ÕþI^ù¨#¤ìd1{†Ÿ-Êz!»*KýÜl ²â6+je«ðù‡õ®òóîR–OðË[çér™-×h®Ë_šT]çlëçj­‘”Òƒ‰×44˜\u2\œ—K¶”ý Šàјߧ‚B•íÐØЗÂn&«í
+ÔãEý8¾eöºÃjÃ=¹UØÇ7yù¸-š¿JÒiÎS65Þh³9î³HÍû<Ì¿gÁžxàæ$äÀ-Í;`Û(µpª?,è‘ZÕ}èMf$Q ýó|ÙAô/ñ¬²jΊ6ÁôLÞYz-OakÀŸòR^ÅȪýj…£å)ã¾Jý˜åëÐÿ칉
+endstream
+endobj
+13421 0 obj <<
+/Type /Page
+/Contents 13422 0 R
+/Resources 13420 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+/Annots [ 13414 0 R 13415 0 R 13416 0 R ]
+>> endobj
+13414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 137.23 189.578 147.7]
+/Subtype /Link
+/A << /S /GoTo /D (class_offload_descriptor) >>
+>> endobj
+13415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 124.735 149.956 133.425]
+/Subtype /Link
+/A << /S /GoTo /D (struct_ref_info) >>
+>> endobj
+13416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 69.87 189.695 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h_a6ae559687c267f9556b182333b12f738) >>
+>> endobj
+13423 0 obj <<
+/D [13421 0 R /XYZ 70.866 789.024 null]
+>> endobj
+5962 0 obj <<
+/D [13421 0 R /XYZ 70.866 751.544 null]
+>> endobj
+13408 0 obj <<
+/D [13421 0 R /XYZ 70.866 726.26 null]
+>> endobj
+5966 0 obj <<
+/D [13421 0 R /XYZ 70.866 687.931 null]
+>> endobj
+13403 0 obj <<
+/D [13421 0 R /XYZ 70.866 662.723 null]
+>> endobj
+5970 0 obj <<
+/D [13421 0 R /XYZ 70.866 624.259 null]
+>> endobj
+13404 0 obj <<
+/D [13421 0 R /XYZ 70.866 513.637 null]
+>> endobj
+5974 0 obj <<
+/D [13421 0 R /XYZ 70.866 475.249 null]
+>> endobj
+8750 0 obj <<
+/D [13421 0 R /XYZ 70.866 276.956 null]
+>> endobj
+5978 0 obj <<
+/D [13421 0 R /XYZ 70.866 257.564 null]
+>> endobj
+13424 0 obj <<
+/D [13421 0 R /XYZ 70.866 152.485 null]
+>> endobj
+13425 0 obj <<
+/D [13421 0 R /XYZ 70.866 85.342 null]
+>> endobj
+13420 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R /F11 6621 0 R /F97 8866 0 R /F100 8905 0 R /F13 9222 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13433 0 obj <<
+/Length 2552
+/Filter /FlateDecode
+>>
+stream
+xÚ½[[sZG~ׯ8•}ª0žûÅ•Ú*¯²J%¶£UòbçÑL!oüï÷ësA 8“}°K%C=}ùº{¦Í‹»‚?^üëæâÅ¥W…gÁZUÜÜŽ3omá‚dV7“âCïõ¿_½¿^÷Òùžcý•²wyõó°þÍ›w¯ûeøö¦/$ェþ¾¹z÷¶?pRh|^…æ+ï./~ק½éÿqóÓÅðæâÏ =x!
+e9³ZTÀž‡b|ñá^Lð?B|ñßê£÷4 øaVüçâ×Ä ”UL)¡QîúÇáM:&ldÍó&þåÕÕ[öúýûÚTOF»^¯‡o_wÕi=à=óRRGÅŒVkø¦W*gλéV+ouû½oyo´œŽ>õïÍʇJ—VÈ‹Km6Î&,sÞXàªðQJ}§ø00Æö¦óUók:Ïò®9Øuõ:ýýt¼{n!%CÄN ¦Œ?ͱ®RCÉZ’€¤JÙé|Röïýi¼Ö| “Fà€Šù ÿÖJÇ´59In­”-çwÓyãÄ×XæµÌk3JƸ«Åj4ÛcT‡„p¡1ê3Qó«Z2ÂX!­ Ä8ÕÉlŠiYKR®Qç,OjPEÈ¡‘6 )t»,ÿ|,ção[é'ôÀiæLE&n¾
+²õLô‚sÞ»|œWÓżaéÅøñ¾œ¯FÕ¯ ¹ø¤ Sû+¥Êb:Ù=;È[YX0‰ îè³o0L†“¿ßrÚ“ÆÁ1|˜äÈ©´^Ü~ä\-F“Ty¦qºî¸çAÆȫѲ/LïŽlß+Wé$ÔAçÀG
+¯cüé|ºªý‘Þ¯jíÃWš~/j¿G8@™QÂ7ÞoxïM ;Jˆ\‡Ï¨‘>Å4€ðõ‹Û˜ËYÙþn¯#$7
+/_¦[CPsdäÎ:IœNsëôä®-­ö^pIt˜èls(†¥÷¦H¡}\Š^5¨¸w†U£™±1ì«×¿þvu=<Ö2<M'µÑ
+1*ÌqFе^æ@ ‘4ˆÒ¶Ð(&ñ8‰÷_vµ£7IjÂy`:t¹‚ ‚U ’¡Ié»ä½9zGC4Ò’zG)uŒÙ0wê½
+%ëfoé)º¹yR<q› žÓ¢ýL-l÷Êyãò“ÚO?ÔÜæÙzß;!ã©öf…ït/Œt­äháÛ7ÂC¯ºHŒ…€ÁÖèº} ¤8ý–º 6˜Æýï7æÜûa΂Wu[#L§b¥˜uµ$#ì¡ç×âKÇ>ß$ÞkÑ,Zƒ
+gD¿õ²—vÉCUOŒÛŽÚP£zµñ¦’%=ö>` Áù³h@åSÙXƒûÑt^™¯^øš¶.%º-]¥ŸWiB…UÑxXÝ<ë·;ÙV³ª®¢ÝëØ]z‰m% ã¶èË¥=‡71ÒRÕ©RMÂ^×’\[Ešöor ƒ¥¸71ò>椻>“Õt J¡µíÓvã£õk»å±±ƒåQ^«ðȲØv@‡5GÃ8}ÑCË¢{UézãÏ£e¢i¤ÅK'žšF®èO‚eé+ëæâ¿>m³ìd‘éÅÎ’Bø?íEI´
+Òœ¿uê÷÷íE‘Þî>±Õ·Ý‹ŠÞ‹Ê€ßìEEøU¼vß‹RÇ­ Ú¡Ö†ïkjZ6©øâظ óUG¶Î„ʸãïX¨&Ò·¬Æ‡tJÚ
+錠©ù6v úk
+YUõh-1m_Ú¡ÕÂ퉃‹P'éÊ€tº7N$I9ùL/é mX
+écØu»±¿[3$B6Ýšh QóãÛ5rÕỨ£»5EµÍ¦÷å’VÆØç#Ú%h»¶oªKӢͶ÷[ÿ˜ÎdzÇIû±ñy“Ã:~H‰Œn'V“ézíJ¢½E½.FÿL*G—ÃÊËøF-¯vˆ·´ztm)žS!díìßb»ù*vÛ¶XÄìw³é§Åíí,µu3§Wè^ŸI¸à·2.V…®Ú8×fgÒºÞ\.ËTžkÔ± ÄÚ…t¼˜”ìówQë•ú_#†ì{Êÿ©sÕlâÚƒÂÌŽ9¤Ýñ^mCÿB^,
+endstream
+endobj
+13432 0 obj <<
+/Type /Page
+/Contents 13433 0 R
+/Resources 13431 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+/Annots [ 13417 0 R 13418 0 R 13419 0 R 13427 0 R 13428 0 R ]
+>> endobj
+13417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 740.014 147.061 748.633]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+13418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 724.275 177.474 734.74]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h_a955d5131e4314cca79ab0f1589635692) >>
+>> endobj
+13419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.413 710.458 185.947 720.919]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8h_a1f8228bea1e3497369089a1e3876edf9) >>
+>> endobj
+13427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 311.735 197.666 322.272]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target__main_8cpp_abc648916abbe06e723dfd096ceb15e87) >>
+>> endobj
+13428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 297.843 128.16 308.38]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target__main_8cpp_a3c04138a5bfe5d72780bb7e82a18e627) >>
+>> endobj
+13434 0 obj <<
+/D [13432 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13435 0 obj <<
+/D [13432 0 R /XYZ 70.866 753.477 null]
+>> endobj
+5982 0 obj <<
+/D [13432 0 R /XYZ 70.866 694 null]
+>> endobj
+13426 0 obj <<
+/D [13432 0 R /XYZ 70.866 673.824 null]
+>> endobj
+5986 0 obj <<
+/D [13432 0 R /XYZ 70.866 652.175 null]
+>> endobj
+5990 0 obj <<
+/D [13432 0 R /XYZ 70.866 609.895 null]
+>> endobj
+13436 0 obj <<
+/D [13432 0 R /XYZ 70.866 589.72 null]
+>> endobj
+5994 0 obj <<
+/D [13432 0 R /XYZ 70.866 568.07 null]
+>> endobj
+13437 0 obj <<
+/D [13432 0 R /XYZ 70.866 507.304 null]
+>> endobj
+5998 0 obj <<
+/D [13432 0 R /XYZ 70.866 470.054 null]
+>> endobj
+13438 0 obj <<
+/D [13432 0 R /XYZ 70.866 445.095 null]
+>> endobj
+6002 0 obj <<
+/D [13432 0 R /XYZ 70.866 409.643 null]
+>> endobj
+8751 0 obj <<
+/D [13432 0 R /XYZ 70.866 395.311 null]
+>> endobj
+6006 0 obj <<
+/D [13432 0 R /XYZ 70.866 376.684 null]
+>> endobj
+13439 0 obj <<
+/D [13432 0 R /XYZ 70.866 327.045 null]
+>> endobj
+6010 0 obj <<
+/D [13432 0 R /XYZ 70.866 281.384 null]
+>> endobj
+13440 0 obj <<
+/D [13432 0 R /XYZ 70.866 261.285 null]
+>> endobj
+6014 0 obj <<
+/D [13432 0 R /XYZ 70.866 239.635 null]
+>> endobj
+13441 0 obj <<
+/D [13432 0 R /XYZ 70.866 227.237 null]
+>> endobj
+6018 0 obj <<
+/D [13432 0 R /XYZ 70.866 189.852 null]
+>> endobj
+8784 0 obj <<
+/D [13432 0 R /XYZ 70.866 177.377 null]
+>> endobj
+6022 0 obj <<
+/D [13432 0 R /XYZ 70.866 158.749 null]
+>> endobj
+13431 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13448 0 obj <<
+/Length 2163
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKoãF¾ûWØ‹ ¬:]~åæõȉƒ;Ñ(¹Ìä Ø
+¯]®—«ò›Ç›×‡Åj=Ï¿ªVäm|ºNä›ßÿÙ+‹ ÉJå ~jø`@¢²0d°;Aƒ Ê é ÕAKÿŽî[ð$öÞ‘r¥ÓŽâð-\É*Ùêž½Qó18/áËe(+³Ýuœ¯‹Ïûeµ6`}qñø¥‚Ñx¿¨¾“ÿèq~Û&¢ÖËŒXyÃI2!N`
+KÖ”TD”Ñ#õ5ç(‹-ˆòRPIì ëe‚ž.¾œ’-ž«‰‚1Žò˜ø;^Ã躚À»Å‹¸¸ˆöhù´~|þñÇÍÔ"­‘ÕËNw<ñr3_¯ÛÂœ¬(et>áž!%ÌÉzŹ„R/oŸâ ÿÎÃóuÝ‚‚òa
+_zZä ºtO')­‚æ/ZrÚôR¼PKÅ«¡æ;g{$Oªs ÌA$OÊcáÉã$É#”¦0€äźÈSH’<d½‘¼x½_òîæë¯murlýe4FüWcÒ>„0£ K¬©g¥‡^+n|O
+¼«ã7j=<8- w¤¶VYo<‹[‘3õÁïÓB#I‡X2i®Th0vv¾QBiôu£Öm¦Œn}“Î0ZˆyÌ&• #t¡°Äì»éx
+$ye
+K†¿•oœÄ €Š"ÆÆP u·Më¤
+ï]Ðà Ø´ëŒÚ½×€—ò
+
+lÒöîEi\nßÃ]LdQJ
+Ì5Ü×ÕóânùÒžîØ)âb‚¤°ÖT‰åÃün±ÝvêC³y|"fó\APJK°¡^»w¤øö7
+˜¹X©¤½k°z!¼ë
+endstream
+endobj
+13447 0 obj <<
+/Type /Page
+/Contents 13448 0 R
+/Resources 13446 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+/Annots [ 13429 0 R 13430 0 R 13442 0 R 13443 0 R 13444 0 R 13445 0 R ]
+>> endobj
+13429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 736.33 234.759 746.8]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_a4ef0f157e66ad987e4040bc45cb5f72a) >>
+>> endobj
+13430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 720.415 229.783 730.886]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_a2da638a7770cc7a86ae6b32014acbadb) >>
+>> endobj
+13442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 704.501 222.305 714.971]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_a9defaa0a97a1507e117209510f492e51) >>
+>> endobj
+13443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 688.586 268.876 699.057]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_ab82210f0bee586b8b87ff7ced37e5828) >>
+>> endobj
+13444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 672.672 246.72 683.142]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_a74be8d5e5dfb30289aaf5d38811ff9b1) >>
+>> endobj
+13445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 614.885 163.603 623.503]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer_8h_ad67905f9efbfaec576aa23b57eddbf63) >>
+>> endobj
+13449 0 obj <<
+/D [13447 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13450 0 obj <<
+/D [13447 0 R /XYZ 70.866 752.525 null]
+>> endobj
+13451 0 obj <<
+/D [13447 0 R /XYZ 70.866 629.358 null]
+>> endobj
+6026 0 obj <<
+/D [13447 0 R /XYZ 70.866 593.667 null]
+>> endobj
+13452 0 obj <<
+/D [13447 0 R /XYZ 70.866 569.758 null]
+>> endobj
+6030 0 obj <<
+/D [13447 0 R /XYZ 70.866 546.205 null]
+>> endobj
+13453 0 obj <<
+/D [13447 0 R /XYZ 70.866 507.394 null]
+>> endobj
+6034 0 obj <<
+/D [13447 0 R /XYZ 70.866 463.297 null]
+>> endobj
+13454 0 obj <<
+/D [13447 0 R /XYZ 70.866 424.486 null]
+>> endobj
+6038 0 obj <<
+/D [13447 0 R /XYZ 70.866 380.389 null]
+>> endobj
+13455 0 obj <<
+/D [13447 0 R /XYZ 70.866 341.529 null]
+>> endobj
+6042 0 obj <<
+/D [13447 0 R /XYZ 70.866 297.481 null]
+>> endobj
+13456 0 obj <<
+/D [13447 0 R /XYZ 70.866 246.666 null]
+>> endobj
+6046 0 obj <<
+/D [13447 0 R /XYZ 70.866 202.618 null]
+>> endobj
+6050 0 obj <<
+/D [13447 0 R /XYZ 70.866 153.499 null]
+>> endobj
+13457 0 obj <<
+/D [13447 0 R /XYZ 70.866 131.361 null]
+>> endobj
+6054 0 obj <<
+/D [13447 0 R /XYZ 70.866 109.605 null]
+>> endobj
+8785 0 obj <<
+/D [13447 0 R /XYZ 70.866 68.997 null]
+>> endobj
+13446 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13469 0 obj <<
+/Length 1846
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[sÚV~÷¯Ð¤3˜ 'ç~É´Imh’IâÔ¡}Iò ƒŒ5Âr›þûîêHœ&ÆØ>Úû~ßî1Ô›yÔûíì×ñÙ³‘ž%Nkáo<C‰ÕÚ3ŽͼñÔûØ;ùâýxxÕpc{†ôšóÞèÕ›aö›‹Ëó?ÞßûŒÓÞ‹ôuüêò]`¬ep^²ü‘ËÑèÍe]ô?_Ÿ Çg1°ƒzÌZ8”*¶Ôy“ÅÙÇÏÔ›Â_{”g½Ò£ ,sðfî}8û½Æ¡Œ—\¿z ì*u†);P*)%RÈ’Ò——² ó÷ï³Xm¢v5 ¯†ï·»V)°–X.›Œ’J%ÅÚ.ºV%<ƉcLmçU3B 17ý£”ö–7Ÿ(KºkSœÆÒG¹n2GkD9He#˜ÒDYU¶" A\£ÜwÜv¢6M/+«½]®2¹»Ë΃<1ÁMŸÑ^Ñ$@³ž BžƒTƒ mÀ8#N(oÀÑVgâ~£Éü~
+B4„óÉòæf^M#…Ò1ÂeTsÉ9[©¹²%ÌhB Oe µ '¹}‚ªÁVª§Þ€ÍJUlͼc["¡  ˜@³ƒ?Õù-Ê_¬£$#r[#M+b”,Îþ²'š†p'öXxh4¤BËn¢ ²¤V[Uòµ‚¹Z%qà/j$†Ú´Ï›I–?šuár¿yŠ=dÀ²~Dë~Þ;
+Åé*±“@'Gˆ?ûšöü8ô¯æÁ*­¿cŸ¤Ú"
+ÀËÎÆåºìøáS¢âf:kP‚À!cM'z󹦬×ûLõf‚^ÐɈs")Kˈ ¬RFYŒòãGœCmÅ¥AênlYLnÒ1 ’oy«Ra1}T(l@Bw@…(IóhTÈÿ*€¨úØ
+ ï’eüüù:@•'ühš 7ÐMÚ•Ç’ýòVArWÓ“ÚθǸNU›®„‚s4“L–Ù³W“z À›Í”Â8 3IYéÔOü"j{–€i ]e‡ï Ffy';W@²¶”c‚|I{§­عv[
+ëžjDì=kiÅ"൮µ&¨NQ@ ÛjÕj|¤
+endstream
+endobj
+13468 0 obj <<
+/Type /Page
+/Contents 13469 0 R
+/Resources 13467 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13395 0 R
+/Annots [ 13458 0 R 13459 0 R 13460 0 R 13461 0 R 13462 0 R 13463 0 R 13464 0 R 13465 0 R ]
+>> endobj
+13458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 612.6 163.603 621.219]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer__host_8cpp_ad67905f9efbfaec576aa23b57eddbf63) >>
+>> endobj
+13459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 392.192 163.603 400.811]
+/Subtype /Link
+/A << /S /GoTo /D (offload__timer__target_8cpp_ad67905f9efbfaec576aa23b57eddbf63) >>
+>> endobj
+13460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.061 109.675 223.129 120.212]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_ae5e05469387803f590e9dd8f39d6997c) >>
+>> endobj
+13461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.83 109.675 389.273 120.212]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+13462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.47 83.795 224.026 94.332]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_ac598663b93e6509c65636fb44733e777) >>
+>> endobj
+13463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.165 83.795 389.608 94.332]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+13464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 69.87 188.359 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c) >>
+>> endobj
+13465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.548 69.87 304.991 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+13470 0 obj <<
+/D [13468 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6058 0 obj <<
+/D [13468 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13471 0 obj <<
+/D [13468 0 R /XYZ 70.866 626.079 null]
+>> endobj
+6062 0 obj <<
+/D [13468 0 R /XYZ 70.866 596.065 null]
+>> endobj
+13472 0 obj <<
+/D [13468 0 R /XYZ 70.866 574.179 null]
+>> endobj
+6066 0 obj <<
+/D [13468 0 R /XYZ 70.866 554.187 null]
+>> endobj
+8786 0 obj <<
+/D [13468 0 R /XYZ 70.866 540.041 null]
+>> endobj
+6070 0 obj <<
+/D [13468 0 R /XYZ 70.866 521.338 null]
+>> endobj
+13473 0 obj <<
+/D [13468 0 R /XYZ 70.866 405.671 null]
+>> endobj
+6074 0 obj <<
+/D [13468 0 R /XYZ 70.866 375.657 null]
+>> endobj
+13474 0 obj <<
+/D [13468 0 R /XYZ 70.866 353.771 null]
+>> endobj
+6078 0 obj <<
+/D [13468 0 R /XYZ 70.866 333.779 null]
+>> endobj
+8787 0 obj <<
+/D [13468 0 R /XYZ 70.866 295.236 null]
+>> endobj
+6082 0 obj <<
+/D [13468 0 R /XYZ 70.866 276.532 null]
+>> endobj
+13475 0 obj <<
+/D [13468 0 R /XYZ 70.866 125 null]
+>> endobj
+13467 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13520 0 obj <<
+/Length 3518
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ks#·¾ï¯à)EV™0Ðx»*g-Åv9Þd­ä²öK´¬’H™¤üø÷ùz$g4$A 6¹H\í_£ÑýõÀÈÑýHŽþþæo7o¾¼zDtNnîF^ŠàÜÈGNnnGÆ^#&SG4~w}ýû Éñ×ßL~¹ùþÍÕÍ›_ß( %Gj¤t2–_ ø=|óá9ºÅÿ}?’BÇ0ú½|òq„±#><Œ~zó¯”Q‡– 7ï¿žh9~{%¾Lɇñõw?\UŸÞ_]_½¿úñ-þ©T vüöÛ¯ÿysõ¾ú__K¾þ›woÿý«o&ŠçQþ¼ùîÝ/çÓ¨"Èœš±ZX£wS’‡êµz¤¤ð6ºCý:%d3¹ÿLœÏÖ‹Ùlj’ã‡bSÊÒ òåµ±‡ÊqÐM …P ð3‘m}gôaj­ÏWËͶšõüÓlÍ|y­Ì(b4*űJDÏ‚WãH©ëqXëûZï_H›ð¦ùÚÓºÀ7é–;Q¦6€ ±2"Â.NJ¼Xn€x‹yå ¼<Yaœ¹ÌôÚÚ%²‰0R)ìby[°õýÑY—öÊN­R‡ÑTáýÞw´P°L)åøúy9ß.VËÚWóçÇb¹•*—Æzl¯ñ†œã«ÑìÖ•?²Éô¯­W†Ù]ÛŠ‡‹…æ™Õ?µšÝö¨8@6Žœ‹ðî UÜBTA iª‘œ´õì÷ËÙC5¥Ÿ¥•“© s¾ýê«Ív½XÞãg1{¬øK5@.L ìLr³ù¢g²ÊCöÝlk[ëWŽ:A#Úy¡¬{FZšG0®­‘%/ìóãÇbÍìÐ7#… ±‘4Í&L€öØDKž–Mlg<Ú}Ÿ
+ërX*Eæ׎¥VÁ¼Œ+¸á°U¿Q꥙vBÄÉŽêäEªóaª–WD,c%4šA,AU×–ª?^1c*„ü2¯HoðÙ,î·¦ë´ú qŒÁªP„ì§{@(ô¼~‘È¡à^6Ør,Û”OÛ5×acñ©Þž^4±ˆ™^5Lß[2H¥P£#ÉpºVÈU]ë² È¶#\ÔãžÞdÝåÕ&ySýü„Uš¨ºTß ÓJ”„ ÓnSè.m;K¨„‘ÍŽ‘kš½•‡õ*­m+ |›P„}>–q=¯CdÄB€€bäxÛ]6^¿V¶$¿8½n}
+ó®lgۣؠ˜¬0’l—:2Á¦8›l!ï‚ÿ^UãËÕCÙV•úVõdGG¡¦ ÈN—­†òº¸_l¶Åz¸Št™çæTÃ"´£di¨4(—Ysûܱ 6(we³Õ–÷Ç;f{÷¼œ'¯É”¬å-ŽÎÌqV$«¬ˆ‘”£tVŽÜøÏ!ò|]̶}­a¤¨’¹e8,ÜÐ{݆-+±ç»>65ˆú6®÷åW —«Ç œ& í3ÉΕcª5bP9µG¶§Ò¬Ë ‹ô#¬CÁ¥\¢5@ÿ副 ¸(”}×ø›Öî@ö6`ïºÑÒc—l Æ(‡1hƒUcØË>P‹’ äXí¤€“¶AŸV‹eTÛ¸!E9ˆAG¤ñªC ·³íl¸-T§ðáBÔÑÆd[0Ü#S9”á *Í [è‰ä•´Íb Æ+&Ú‚‰QP[°¨Šâ [@EÁ[@¤¼-(]Ž‚[Üò‚Âj8r“B"ß϶ŸúV‰Sˆ²‹ðCÞ¶aç«'nðþ¹XöµE¹cìs@Gxƒñmè<dA 'U!‰E•l²ð&ÇÊÈÂè V†¼/Ü ù¼´ü,+ØÏtR+ CL_ÄQæXmd•H·Wæñéy[dÐP0åÙ‹ r>Çà“5Ä›ÇJçXÃÛFÔY›u1/¿MÈö—1Æ—‡»3`›ˆtT·±Ç;vŸeÎì4N pš)/=ýäx'+Èï¤,·t“ãÝpä&Þ"˜H¸c«²9À=<XÙ6øQáãp_ŽËÇá”ÕmÜL!8äùBjy>Ù&È"äá¹ È!Ϩ6r§¹Ü yðuŸeÒþï:“>ºç&-¼@e€Õ«F_Ôf;GxÊç ­CyŸ,Õ ´ãM¡$Áû‰¼³ÒB.ùa–£9ŒjÕ™,ŠZh®!.A}ˆ À}GC›ùlÛí,è›r̘o:Õ™ñ©ìÔ°«ÆämØUƒ@¢´š^X–EOÌQXòHL®©6rh[Èç
+Ë °uaÙ‚m „›’«çÞó/åAüè`gü\¡V——‡ Égóøˆ{ªU_ÓåøáÈ`tù(oS²Ìž|¼Ð,øh
+bA|z^Úð9Ì¢Ü|©d’üKJ6 íù< Ïø"”¿py J¾c0ŸKPÞ ù Ëc ¡®Î!£±|= uqŒ×ew=°·ew½í³Õåó BŸò‚ž*ŸÁ°&GYÞ@2é5fä&ô"ÿΧÿg9Î_¨òå”CP>k¨)]E|Ö0¸È|Öл6òó2ß ‚Û)“CT>õ]²L¢’ø²ÅÀÞ”Ìqˆ{[l¶ëÕdwˆvXäP¯*‡ÅkåÊ·D¤êHC§|H7²qà“Ž W'á7Ÿ.94¢„ò1ù,_‘eOÈ@OŽ÷ÿ]:= Gnèéù‘é©
+µyN‰)¯PëøòÂŒôÉšânWp*2Ÿ
+±VÕTFºâ“m>‡]•'Û\º]ßâW9ìŠ"×']»ZôîÆ ¯æ¼~0¦V¬·xt…z° YLEëÒ!ÛÈ›O³uÝBÆÌŽo»R ¥vÉæ ¹és8á¦sŠ5pòí²ø+ÖÐ'üµ›»•\< Çæn¥¤6öÝÓv}AŽŒœÅPLÏ‘ùj‘΃0Ñ*= nBÐ!ðÁBU~ô8{xX]Ò’Vëxç$ƒÜUã$$+l×8 ÜôMN*ìn]ÔUžüuÔ¥udÓÕ¥]ÕìP"I:£®ÙŠØŒffžŠÃÅç‹ôäc²Þ,xÏë „`Ë×ÃtaZ¿Û†@Ó ×;ÓéE–(ÓÁÛSÆÃ@˜l:ã nïø@{³ù¯Ï‹u†s\£;›Cb”èÚ„dU‘âwúéáÀ|ÔD:ªªuñPÌ6TÅg‘ù:Ýp‰çД¬ªrû•{yC9ýÕÖUUUŸº{Æ/»ñ»—FÝ÷^¶#Î!k¿¥³y1gú5»3¯1-÷Wù;'—ñ”¯~õÎÈk1ì| á÷îŒ<•EäÉ÷9/dŒÃ­x[örÿ²¢¾»m|ís÷:“J:<\ßL=û>Ø“Í+ð]†)¿@ª3¥ƒæt]WѼg÷÷¾÷
+[>‰sÉ[…«Û¨öð•kQ
+…¡¸›îê4]×…þ/+˜À²
+endstream
+endobj
+13519 0 obj <<
+/Type /Page
+/Contents 13520 0 R
+/Resources 13518 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+/Annots [ 13466 0 R 13479 0 R 13480 0 R 13481 0 R 13482 0 R 13483 0 R 13484 0 R 13485 0 R 13486 0 R 13487 0 R 13488 0 R 13489 0 R 13490 0 R 13491 0 R 13492 0 R 13493 0 R 13494 0 R 13495 0 R 13496 0 R 13497 0 R 13498 0 R 13499 0 R 13500 0 R 13501 0 R 13502 0 R 13503 0 R 13504 0 R 13505 0 R 13506 0 R 13507 0 R 13508 0 R 13509 0 R 13510 0 R 13511 0 R 13512 0 R 13525 0 R 13513 0 R 13514 0 R 13515 0 R 13516 0 R 13517 0 R ]
+>> endobj
+13466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 737.307 170.019 747.719]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) >>
+>> endobj
+13479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 724.12 147.061 732.739]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8cpp_a92c6a6816bd7de4beac8bc7d45ed8ce0) >>
+>> endobj
+13480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 244.586 195.684 256.541]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594be) >>
+>> endobj
+13481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 233.126 152.422 243.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea395f669d38dc8f7097c324be9888b0f6) >>
+>> endobj
+13482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.621 233.126 221.928 243.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beab4551ca08ab3b9196576c7e16de11a29) >>
+>> endobj
+13483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.921 233.126 294.662 243.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8230d16cdac648cb4016db2529863199) >>
+>> endobj
+13484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.654 233.126 369.135 243.663]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5d48cc8989f3b7588819bdc729e8e1e7) >>
+>> endobj
+13485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 221.296 195.227 231.708]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea47d0036807e49e1302e39a3d00baa2c1) >>
+>> endobj
+13486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.22 221.296 295.667 231.708]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea9a713f79c0e3d4a6b7a18d4126bfa72d) >>
+>> endobj
+13487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [298.659 221.296 409.259 231.708]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa026cae6f6bf73156602fce122b935b2) >>
+>> endobj
+13488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.252 221.296 520.36 231.708]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5c60005d4474ba1db1ae93c6612667c2) >>
+>> endobj
+13489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 209.216 209.591 219.753]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaf1ed3d6224c6accfa0588465e6336244) >>
+>> endobj
+13490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.584 209.216 298.751 219.753]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beabb257b313a34a6c46f556f2167d7624a) >>
+>> endobj
+13491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [301.744 209.216 375.977 219.753]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea4121fb7e56460a7683ddc55e6a668084) >>
+>> endobj
+13492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.97 209.216 498.805 219.753]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea6acd7f1bd4f723ea9fc35da8a5b43f62) >>
+>> endobj
+13493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 197.261 219.597 207.798]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8c56d0083cc371ccc13ee1912af77074) >>
+>> endobj
+13494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.59 197.261 326.564 207.798]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5b7f28b8fc29c0750196afe802121804) >>
+>> endobj
+13495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.556 197.261 381.634 207.798]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaed01d390e5e07e4e39a7aaeaed5710ae) >>
+>> endobj
+13496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.627 197.261 500.93 207.798]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea308319bae675a6a73f12a0bb0157d445) >>
+>> endobj
+13497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 185.305 214.899 195.843]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beab860f3b83ad4779925a80d1b0dcc2c94) >>
+>> endobj
+13498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.892 185.305 339.502 195.843]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea79dffc53d7f59a6956b5d4468f30df80) >>
+>> endobj
+13499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.495 185.305 433.97 195.843]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8bc56bef090c3d6d9e57632b535f002f) >>
+>> endobj
+13500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.963 185.305 500.231 195.843]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea63ed535a84cda94bd5fed7c46a91c378) >>
+>> endobj
+13501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 173.35 150.432 183.888]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea092261aba7ecdb767daaccee019a6b9a) >>
+>> endobj
+13502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.424 173.35 233.136 183.888]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea471cace07631448ae6fbbf6b1d3224e2) >>
+>> endobj
+13503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.129 173.35 305.108 183.888]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beadcff5c74a894ed7464d920097a41a946) >>
+>> endobj
+13504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [308.101 173.35 368.876 183.888]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa52804286f9050437ad2ef3f79e1ad52) >>
+>> endobj
+13505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 161.395 162.707 171.932]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea0fd19641a8c289318157609002483a56) >>
+>> endobj
+13506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.699 161.395 252.064 171.932]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beac6948eaadde5f488ec54c344570d58d1) >>
+>> endobj
+13507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.057 161.395 359.336 171.932]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea995a35212a83ffd9c2346266883b52d1) >>
+>> endobj
+13508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.329 161.395 452.155 171.932]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa45a47400f78cda75e8d41039481a376) >>
+>> endobj
+13509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 149.44 204.561 159.977]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaf54c0d4a3a16c74e3a421345cf18760e) >>
+>> endobj
+13510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.891 149.44 317.221 159.977]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8a67da9a11f5c2a3622f6fc7450bcde6) >>
+>> endobj
+13511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [330.551 149.44 469.242 159.977]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea91a244f4355ca0ef48b6c5431173b1f8) >>
+>> endobj
+13512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.572 149.44 525.406 159.977]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beafdd6b5fac528c51a9d19d118957b3b3e) >>
+>> endobj
+13525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 137.485 185.158 148.022]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beafdd6b5fac528c51a9d19d118957b3b3e) >>
+>> endobj
+13513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 125.034 180.648 136.989]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea4061629ee6b7552f9d94a00d7f799970) >>
+>> endobj
+13514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.641 125.034 269.513 136.989]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea07dcf851637cc5d962384c0297413c23) >>
+>> endobj
+13515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.505 125.034 340.435 136.989]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea13cb3eebe89cce0f49f6c9885f1d3f04) >>
+>> endobj
+13516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 69.87 188.359 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__trace_8h_a2e4368032c4d844d790f4c7c90dd5f4c) >>
+>> endobj
+13517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.548 69.87 304.991 80.407]
+/Subtype /Link
+/A << /S /GoTo /D (offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) >>
+>> endobj
+13521 0 obj <<
+/D [13519 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13522 0 obj <<
+/D [13519 0 R /XYZ 70.866 752.999 null]
+>> endobj
+6086 0 obj <<
+/D [13519 0 R /XYZ 70.866 705.271 null]
+>> endobj
+13477 0 obj <<
+/D [13519 0 R /XYZ 70.866 682.339 null]
+>> endobj
+6090 0 obj <<
+/D [13519 0 R /XYZ 70.866 647.807 null]
+>> endobj
+13476 0 obj <<
+/D [13519 0 R /XYZ 70.866 621.833 null]
+>> endobj
+6094 0 obj <<
+/D [13519 0 R /XYZ 70.866 569.193 null]
+>> endobj
+13478 0 obj <<
+/D [13519 0 R /XYZ 70.866 543.277 null]
+>> endobj
+6098 0 obj <<
+/D [13519 0 R /XYZ 70.866 502.592 null]
+>> endobj
+6102 0 obj <<
+/D [13519 0 R /XYZ 70.866 469.89 null]
+>> endobj
+12153 0 obj <<
+/D [13519 0 R /XYZ 70.866 448.679 null]
+>> endobj
+6106 0 obj <<
+/D [13519 0 R /XYZ 70.866 427.9 null]
+>> endobj
+13523 0 obj <<
+/D [13519 0 R /XYZ 70.866 400.128 null]
+>> endobj
+6110 0 obj <<
+/D [13519 0 R /XYZ 70.866 359.502 null]
+>> endobj
+8788 0 obj <<
+/D [13519 0 R /XYZ 70.866 333.527 null]
+>> endobj
+6114 0 obj <<
+/D [13519 0 R /XYZ 70.866 312.51 null]
+>> endobj
+13524 0 obj <<
+/D [13519 0 R /XYZ 70.866 260.899 null]
+>> endobj
+13526 0 obj <<
+/D [13519 0 R /XYZ 70.866 85.687 null]
+>> endobj
+13518 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13567 0 obj <<
+/Length 2129
+/Filter /FlateDecode
+>>
+stream
+xÚ­›KsÛ6…÷þ\J3‚÷c™&r“L·‰ºJ³`dÚÖŒ-9’œNþ}/H"dš‚ƒ»±ò ïH«ëŠVœý¾8{qnEe‰ÓZT‹«ÊPbµ®ŒãD³jqY}ž¼zóò¯ÅüãtÆ2iÎ'çoßÏ»y}ñêŸ?çSÆéäeûsñöâÃtƘ³
+~AÊþw.ÎÏß_LýU¯§_ïÎ拳og B+VI*ˆd®%[êªåÝÙç/´º„ÿ|WQ"œ­þk/½« iþp[}:û{à$Õ„Q—ÜÃâãË© “Wsò¦kõ¡ýççóó¯æÛÄ°–X.Çš$• JŠŸ­¢±ÀJTŒ£œŽÖŒÐмV$’QJ'óõ”ÑÉÃ]³­÷«ÍºkåbªéäÇ}Ók¾YÂÿ¯÷ÝÐîr€V3æc¦+ßô»_¾¸ú—R±©/SK'ÛzÙ|Ú×þ‚k߀IÓênàŹTQá™$Î2¨®‰²}ãíõŸõ~³M**^‡JœÉT²„†JËÇ]à±Â€h \ö,W$<-æ]!nyÇÛ%s×Ä).ãŽh™rwûz }A'ûA¥@eF×­ÌÔðSâhLj|î#3$Ž/ÄY®6åØ^›»Z¯D1ŠaDBL¸lUŠ¹A•˜»m®W»}³Å‘F9Âa*—
+Qm²¥)æibîOǤH)ˆæ÷ʤ&‚ÝìÕÃzùD_(ШÈî h's¡/$'DÎí‹bn苘»Ü6õ¾€*h¤ãTߟ–§Ø¯>T<\ p L˸FnDʽÙ재¬•]¶ ¸!Œ øÞ…B¹.(æÄÜ“.(§ÄØÓ.(çÄÜ»Õ2Ç'3ŽfBÆÑ6­ÊÎ8åÜ`‚˜»kÖCHÅ ›£0!q›¶õô~³Z‡Y2åZI ¬.¸Ð©>õ$ÜËô°ÌÐÌÌ@9Ø!ÊùBÆæZ Û[ Æ‚'f «2Ž/ Êæˆ8áC`o%ÇR…Çú_”EH­¾¡ù(æÄÜëz3ØÊ€@ÕâM±ËÍý”©ÉÕzÈÐd†Ò)xÄŒ
+â¤Î ”æð‰Ñ}!-²#z97ø æŽväe'9Y3@²=Ò%
+|®Ï}2a`4BP÷…”ÎêåÜÐ#1w¹¹»Ø7(ËI%(4€#(…¤Ë¯åÜ LÌÝ6Ëfõ}(½ú ;+1°¢‹9â>=sÁ<£Ãà:C„µ)wtÌ‚ìíÌõƒ†r„üê Éü}¨rnðAÌí}0„ÕþA\ ËÈ øI#pJ 3:s
+c­>zÌpR"wò’Î%B¬/$²GÊrlïƒ{´U{e$@ŒûeŠiÒö`˜4ûMù!¼1ÄBEÀ[
+Ž¶ ~d‡Ë'•=,HÛÝ[¹|„Ï_Ó”sƒbîw¿ÉPãìÃJH$Ey¾‡B¹Êsƒ21w·¬÷Øò‘Ûb`5oÓ~ —Ž±fa®\Š;ÄZ•=d*h@H—¾{ƘYÌ Vˆ¹§Ö}Ô~Ý—`ƒ¦\M6C#¦Sù-ßù]þ#¹OD)í²·¤
+Å\ òõjwƒcΈAXFù:JgÏŽÅØ LŒ½óÇ»¹í(”€µˆ¶_*ùBÒfÏTåÜ PÌB‚¸C˜¶|!È.¹*•s{•n8”p´aŠ ¥…䬘‡žÞ55… ó´GìÝM½í7kÎa0ÂÀ
+Ò?SŠ¤ŒËöü,œ?¿Æ?~ÃíÑ©Tå$\A”°2ßoWë}ð…¢Ó™Rz²êǸµŸ†úC­ö?P\Ðvܤá}˜¡ÂL@ºp͘%ÛíB÷KJ¤_‰¸
+Kvíïef…œBnJ©öˆ
+ ûEŠu¥«Ï¸Ú¤ŽËy^ ýµç•Òöf k¿)(x\©€v‹ð2èÀÓº¼¿Ÿ
+øLF«¡·SAñ~:~7µ3­ª _üзÆw6”ò«ÂИÒÑÿ…
+endstream
+endobj
+13566 0 obj <<
+/Type /Page
+/Contents 13567 0 R
+/Resources 13565 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+>> endobj
+13568 0 obj <<
+/D [13566 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6118 0 obj <<
+/D [13566 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13528 0 obj <<
+/D [13566 0 R /XYZ 70.866 751.7 null]
+>> endobj
+6122 0 obj <<
+/D [13566 0 R /XYZ 70.866 732.903 null]
+>> endobj
+13529 0 obj <<
+/D [13566 0 R /XYZ 88.314 707.282 null]
+>> endobj
+13530 0 obj <<
+/D [13566 0 R /XYZ 88.314 691.21 null]
+>> endobj
+13531 0 obj <<
+/D [13566 0 R /XYZ 88.314 675.139 null]
+>> endobj
+13532 0 obj <<
+/D [13566 0 R /XYZ 88.314 659.067 null]
+>> endobj
+13533 0 obj <<
+/D [13566 0 R /XYZ 88.314 642.995 null]
+>> endobj
+13534 0 obj <<
+/D [13566 0 R /XYZ 88.314 626.923 null]
+>> endobj
+13535 0 obj <<
+/D [13566 0 R /XYZ 88.314 610.852 null]
+>> endobj
+13536 0 obj <<
+/D [13566 0 R /XYZ 88.314 594.78 null]
+>> endobj
+13537 0 obj <<
+/D [13566 0 R /XYZ 88.314 578.708 null]
+>> endobj
+13538 0 obj <<
+/D [13566 0 R /XYZ 88.314 562.637 null]
+>> endobj
+13539 0 obj <<
+/D [13566 0 R /XYZ 88.314 546.565 null]
+>> endobj
+13540 0 obj <<
+/D [13566 0 R /XYZ 88.314 530.493 null]
+>> endobj
+13541 0 obj <<
+/D [13566 0 R /XYZ 88.314 514.421 null]
+>> endobj
+13542 0 obj <<
+/D [13566 0 R /XYZ 88.314 498.35 null]
+>> endobj
+13543 0 obj <<
+/D [13566 0 R /XYZ 88.314 482.278 null]
+>> endobj
+13544 0 obj <<
+/D [13566 0 R /XYZ 88.314 466.206 null]
+>> endobj
+13545 0 obj <<
+/D [13566 0 R /XYZ 88.314 450.135 null]
+>> endobj
+13546 0 obj <<
+/D [13566 0 R /XYZ 88.314 434.063 null]
+>> endobj
+13547 0 obj <<
+/D [13566 0 R /XYZ 88.314 417.991 null]
+>> endobj
+13548 0 obj <<
+/D [13566 0 R /XYZ 88.314 401.919 null]
+>> endobj
+13549 0 obj <<
+/D [13566 0 R /XYZ 88.314 385.848 null]
+>> endobj
+13550 0 obj <<
+/D [13566 0 R /XYZ 88.314 369.776 null]
+>> endobj
+13551 0 obj <<
+/D [13566 0 R /XYZ 88.314 353.704 null]
+>> endobj
+13552 0 obj <<
+/D [13566 0 R /XYZ 88.314 337.633 null]
+>> endobj
+13553 0 obj <<
+/D [13566 0 R /XYZ 88.314 321.561 null]
+>> endobj
+13554 0 obj <<
+/D [13566 0 R /XYZ 88.314 305.489 null]
+>> endobj
+13555 0 obj <<
+/D [13566 0 R /XYZ 88.314 289.418 null]
+>> endobj
+13556 0 obj <<
+/D [13566 0 R /XYZ 88.314 273.346 null]
+>> endobj
+13557 0 obj <<
+/D [13566 0 R /XYZ 88.314 257.274 null]
+>> endobj
+13558 0 obj <<
+/D [13566 0 R /XYZ 88.314 241.202 null]
+>> endobj
+13559 0 obj <<
+/D [13566 0 R /XYZ 88.314 225.131 null]
+>> endobj
+13560 0 obj <<
+/D [13566 0 R /XYZ 88.314 209.059 null]
+>> endobj
+13561 0 obj <<
+/D [13566 0 R /XYZ 88.314 192.987 null]
+>> endobj
+13562 0 obj <<
+/D [13566 0 R /XYZ 88.314 176.916 null]
+>> endobj
+13563 0 obj <<
+/D [13566 0 R /XYZ 88.314 160.844 null]
+>> endobj
+6126 0 obj <<
+/D [13566 0 R /XYZ 70.866 122.965 null]
+>> endobj
+13564 0 obj <<
+/D [13566 0 R /XYZ 70.866 101.896 null]
+>> endobj
+6130 0 obj <<
+/D [13566 0 R /XYZ 70.866 80.941 null]
+>> endobj
+8789 0 obj <<
+/D [13566 0 R /XYZ 70.866 68.997 null]
+>> endobj
+13565 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13585 0 obj <<
+/Length 2761
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[oÛF~÷¯ Z`!ëÉÜ/FQ ëK7…g]}Hú H´-¬,¹’œnö×ï7CR"é‘D…“E^lÙ¢Îý|çÌ™#šÝg4ûùè·G¯.­È,qZ‹ìö.3”X­3ã8Ñ,»gï†HEŽO4çƒëËË«ëcN?ÿqûËÑÅíÑŸG ¤hÆ2&¡.|Ôâ÷èñèý4ã½_2J„³Ù_áÉÇ ´^L³_þ‘IFŒmÈðÛíë+röîÝñ 7vpùúê¢xusqyqsñö 2f¥œýó§w·7Å»¦{óüùõÙoo.ÞÞ3¯DøyûúúíKe*;XK,—»”‘J%ÅZZ·­ãÄ1¦êÆՌкu!<¥t0¿û@©˜ÇÛ*N cá£\ïGkDÓ¸M!˜ÒDYÕ”ây5™’ÑÓSißÉ4/í›ß3:Èùl”{±^]BÔÌÁWÔN¬‚`.;áVÔ¾ŸÌFÓç1hh¨õÝüîn×ÊBáz#,QÌîg[1Ó„M¨á–
+;²”“ݳ¾?ç*ëëœ÷e}®UÖ×¹"ì#<­¯-)X:JPf¿‰tß–í}U 4èP´SMÕ«lÿtÌÕ`8}Ž¦Š-•¼L;±;í¡ùd±×Ä
+Þ¶P$?[‚{ÏËêcçW±“‹€`p*Gªû‡@?" B¢ê­—Ÿ·EÅe%%þÕáð0œÑ·#ˈès
+LØ!LfÃÇY 3ã]ÂzíØ`”|±D Åp}¢†oɉ5dã·¦½è–¢ $Ñþ–9ËÒñ÷y Ÿ9¥)H8†û£^C¤|+Ob”ÁZVX#ÂVHŒŒ—
+ⓇËzLnq:G³Àð¡þêr‰6°¶ÓsœÏ–ùj$Î%
+?Ay,üóvôâðÄ*‚A&qŒ“µa+ÕIªœÌGÏùl5 ÿª(n„¡ÍÓÔºjèî‡C\fJƒçðf í6Uü`Õ d#®³pBAˆ£ÚÛ*y+i•€1ƒÝ­RMÎh•¼·¢í¹Ì¦`¬,â¶É7Þ,ÐÕ2K?áQ²É}‹ï”Ö@p°º^JüÌ)ŽV
+¾ï’´ï’^F,ÂUl&<[(AMaAáHg›Æ¨¨ˆ~ "U­,Ò5ž¶(sCL½3ª2¾àc ‰k¦é9
+rʦ`ê\Ò6™N'
+­Ñ@ÞÖzŽˆñ
+Þ Ó-Ñ;Ð9!¶c:RÜJ[bºÞ‹éáõÙõëfÛÜn¬ß|öOÏ/ðåé)_œž^Aã«äìÎ~Iƒ"ùùÎó=Ún3¥Àowè¢Ù5«Pê=!cT£w¹/úƒNCRetö¾Âr­›ü£s_§(Õ X¼Îð&ËÍœ¢Ý¿nÏP`µ:(AÃÈwFpK(e{Æ:\8€Y
++p‰„S¼íø——Õ´jŠAq^p²rïT
+@h\ñõžvŠß¿çåbRþ
+
+ãr5ž|­Æ$ÒáÜÏ/ö°}â9"ô×”Xý­J7žÞf߬gŸVE¢ò5iýße
+MœiîžM‡ËeÞ} ”ïÞ%¨–|žG{î÷}?¯
+ŒŠ 2Л2á½®ÝM¸?ö”ŒáÍåƒBöÍÞ„ra÷¦ÓNrU­$tß~w7U-ð–•žÎG¾nþÛÿȱ)-ŽÐ8‚%`odXÎj°_µ"«“þÞ·®×ß QÒýñ&Ùrò÷ã¢eÊw{ªH°X¥C÷‡Ó"ŠXÑoPÁ JZ”ú¾Ù6Ò3”H•„7J=“-Þ#h¼joŸ„óH]* Rµ82Îk?_„Æ5¼ñ´Ízg>IúkÀj„PX/ÌpÞëÏ[øÝ}¥cÖ+;¬ºÅjgvÿNÄh±­-4?h¶ºmm¥
+iß}—"¤A©Z/îÑýYW]c=Χùހ¥U)9LÍ•ên ® €T§`müT]G 3H3ý]òŽÅ0U4Rÿ SD#(^^¡Üç«åS>šxG)B%Ó˜Òr?×f‡´ü¤Q™ü¿¢Fÿ®¬tShʪ¼T¯HÍ­ê=®ówÒ¬·Ü_I+·]η¼éQáûwé².¾ÍíÃ, ]_/ –<lqû¦¯Z|Êg1ÿ= W§þ¹ªvVï•&º¹½:yúï'ô–Ù=Ðq×D~{ý{œa’¦Ö.gÿeS•Àåwh‹e:_FëaqUwHx´õVýƒ±/ÿ†o òÕßbú£ê¹ðm‹Gt%5³¶Íú*`È
+endstream
+endobj
+13584 0 obj <<
+/Type /Page
+/Contents 13585 0 R
+/Resources 13583 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+/Annots [ 13569 0 R 13570 0 R 13571 0 R 13572 0 R 13573 0 R 13574 0 R 13575 0 R 13576 0 R 13577 0 R 13578 0 R 13579 0 R 13580 0 R ]
+>> endobj
+13569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 651.276 219.552 661.814]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8cpp_a78b205a19a98eb052a28d39a798fc399) >>
+>> endobj
+13570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 638.323 213.213 648.86]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8cpp_a779ff356d82b6854f4eefca550b9d9e9) >>
+>> endobj
+13571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 625.446 154.077 635.907]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8cpp_abb1c3aa340338fcfc9ebbe5978911666) >>
+>> endobj
+13572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 612.416 171.52 622.953]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8cpp_afd230e79063dd4b66c0006d192d253d1) >>
+>> endobj
+13573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 195.628 151.095 203.767]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__t) >>
+>> endobj
+13574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 182.675 177.877 191.293]
+/Subtype /Link
+/A << /S /GoTo /D (structmutex__locker__t) >>
+>> endobj
+13575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 132.719 199.056 143.18]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_ae5bd49420d47b8f5a990bff508f032be) >>
+>> endobj
+13576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 119.765 198.562 130.226]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_aa2b0a4321ba0d8797dd6863cc51415b2) >>
+>> endobj
+13577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 106.735 199.674 117.273]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a44c4adde17b7434ae375d509c6ecc072) >>
+>> endobj
+13578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 93.858 199.172 104.319]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a5c4a8ac837211ec49a83d37da0c48ad8) >>
+>> endobj
+13579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 80.954 163.298 91.424]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_ac0e6cec48cc72642d42c91e6d15cb6f6) >>
+>> endobj
+13580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 68 164.285 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_ab343ebffab1ff9f41f27380d9f816ed7) >>
+>> endobj
+13586 0 obj <<
+/D [13584 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6134 0 obj <<
+/D [13584 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13587 0 obj <<
+/D [13584 0 R /XYZ 70.866 666.116 null]
+>> endobj
+6138 0 obj <<
+/D [13584 0 R /XYZ 70.866 598.167 null]
+>> endobj
+13588 0 obj <<
+/D [13584 0 R /XYZ 70.866 578.979 null]
+>> endobj
+6142 0 obj <<
+/D [13584 0 R /XYZ 70.866 558.241 null]
+>> endobj
+13589 0 obj <<
+/D [13584 0 R /XYZ 70.866 534.356 null]
+>> endobj
+6146 0 obj <<
+/D [13584 0 R /XYZ 70.866 500.092 null]
+>> endobj
+13590 0 obj <<
+/D [13584 0 R /XYZ 70.866 476.207 null]
+>> endobj
+6150 0 obj <<
+/D [13584 0 R /XYZ 70.866 442.002 null]
+>> endobj
+13591 0 obj <<
+/D [13584 0 R /XYZ 70.866 418.058 null]
+>> endobj
+6154 0 obj <<
+/D [13584 0 R /XYZ 70.866 383.794 null]
+>> endobj
+8790 0 obj <<
+/D [13584 0 R /XYZ 70.866 359.909 null]
+>> endobj
+6158 0 obj <<
+/D [13584 0 R /XYZ 70.866 343.491 null]
+>> endobj
+13592 0 obj <<
+/D [13584 0 R /XYZ 70.866 208.53 null]
+>> endobj
+13593 0 obj <<
+/D [13584 0 R /XYZ 70.866 147.482 null]
+>> endobj
+13583 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F100 8905 0 R /F11 6621 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13608 0 obj <<
+/Length 2845
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\KoG¾ëW °@@Q§ßݲ²´V KY-ƒìhr$K‘Z’J ýõ[Õ3Cq†=ä »ìÁ6M 뫪®××ÝÍž2šýãì®­È,qZ‹lô˜J¬Ö™qœh–¦ÙçÁåÇ]= Ϲ±C†çšóÁõÍíUñ·ûË_>]݆ŒÓÁþïÑÍýÝðœ f |@êò3÷××·÷C|êÃð·ÑOgW£³ÿœ1P„f,“LFG¶Ôe“ç³Ï¿Ñl
+?ü)£D8›ýá}Î@5/æÙ¿Îþ0A2MŒ35~ÝÜ’…Âïª?\]_=\Ý]^í«SùÁZb¹<¤T‚()¶
+ÑÒ·t×ÇRí(h ÑJdF3B+¿p®¼ÕDzÏçJéÁߦùJù"/ˆº­žJ%üc~n÷M`Âm˜ÇẟCkú2ɉЬ®ðx:]5|¡Šú÷|_¸x¶x
+:XÂXñÎtŽà£Õãø³òq|k÷#þc5”s%‰¡6;gœp{
+ïùÀ %ƒ0PÒÅLŒ \yA‚ÙBéû`à1«æXLNaÙ,«ƒ^ÞßîÑÂ!MR)p¥#R6Œ½¹»5W]ÿóèãÃUÈõÖ—c–Dë# ²8)º8_H.Ká!%¡æ¨ιÒDrž&œëÄ-áŒgF(b@“®¶ì Ù[@ úÔvá)äm\>‚)b9žR
+‡kš¼˜ä¡’9Ù*ÍË"øøº˜¼×Ë—Í·Ur‡š"±:EkË&Lê}mj
+ýp Ê(§QÐ9§Šp(Î{Εb4Ôtðö’OóÇuÍü½Å"ÆÈüìáDØâŽ8ˆ) €É44\ãdTA] …$’êËYµÐmaI
+pM¬àðp!
+@XÅø¹'#Œ»Û•õNÉWkˆªÀPÇ$¸¶hƒüp4}]nƒúpdP¥Ë47ЋOi€ÚÆôˆ ΈÖ(¢Ý°ãF(SA<0øÕ2^~¯Ö¡Êe`²†œŠ5Húdt=û/FX× ÏøâqÌRÎ5pËö5[<µåk§pÖõÉ(„}gA¯³ÅFËð+xÓ„:e ÓK›¾ƒyH÷¡q²ÍÚðRA9¶á¦»Z­ºM½½Óæ}Á£ò½§„ »ÜvOøxä*ãw‘e|<j•ò»¨ô¡ù;w
+HG ÓuÄÿ‹doËuÊ¥*å‚
+x@ÕM¯’Ý÷Ùñü5˜v0²QÙ‘l¶˜±Í2Š$-j¾…l“¢„¤»Ë|û”‡BJ ‡V)T‚  ¬«”ÏCù
+#!OâÈ|Á^Ø.bk‡Cµõ{„î×ñzwòkYtõˆMs¹4¾C4݃/×ùæˆ&Î%
+?Ay(ü<x³uíó\ðÀÍ
+ÖTΫ~«X;£”>'+l»Ër—¼Ø¹™!«*ßYN^ŸóÅfìߪ@Þõ£³²%µªïýԃѓn“)uŠSÅý.Õ[‚÷jMkÆ€þÒB’¤²CãƒF 5,²”~§­†¼
+nó(H¹ˆš!ó­›Zîš
+²vg4¾M¼Éf…;*VH¿£
+=ÃñþBÓ"÷[d(IêãÙ
+F O !f4¯Ï 4Bô†T\xLZÚæ|öu5dt
+Xíˆr5Ôgl”o¾ÓÝÀú½û¯HðE@˜~¡NÅ$€ðho‘€E¥Buu¤Ð”ÈžZfÛ<y à·-‘I­âœ;Íê-T…ƸÐ~>Ì á2“NUjùXœTÙ¾Õ‹cÞ@+äŽXºmmÕÃxNP¶D<öÃÓ¾­
+JûmÏ•ßA‹³åíÿ›ç˼q¾Üì_xxfí í‹‹¨ö% Lð&A÷BA²Ú‰Ùé^ÍÀa)€r¨ÎõYÜ1H=xjlÊIz‚ 4_®[G)A`Âhl‘ï[Y •@ñùÖP
+I×q•
+„ÑƤ‹ß(£*Q833§::©¥‚§à»„Y¤Í™ÇÆj¨‰ýÇjWÕ%ü«eŠª’ŒVbUçŽPs¤¯„UÏ?Y÷¢\õà"8ÚªºK꫺«¡Î{mêC]UVÄÕW)KQ^)^ý®nßwáõš¼ßÝŸ{Çp­n¡6OáY߈wÊ\¼±Ü*¢ŽÙZ·õÚÚÒ~c ‚ŠÉþS§‹ªOVÊS°~t/g)é7øë
+endstream
+endobj
+13607 0 obj <<
+/Type /Page
+/Contents 13608 0 R
+/Resources 13606 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+/Annots [ 13581 0 R 13582 0 R 13600 0 R 13601 0 R 13602 0 R 13603 0 R 13604 0 R 13605 0 R ]
+>> endobj
+13581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 758.195 161.299 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a5b77fd20b6dd1e6e3ff6c2ca42e1645c) >>
+>> endobj
+13582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 747.174 267.378 755.923]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a3ddeaca00b3079cd5b4e93d56fa4b1d3) >>
+>> endobj
+13600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 732.71 201.028 743.121]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a4a431b37cf997388b5a96612ee787ccc) >>
+>> endobj
+13601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.962 684.679 269.189 695.199]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a9eeaf7266da15437cd95010d686279ef) >>
+>> endobj
+13602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.963 636.698 154.077 647.16]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_abb1c3aa340338fcfc9ebbe5978911666) >>
+>> endobj
+13603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 623.879 219.552 634.417]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a78b205a19a98eb052a28d39a798fc399) >>
+>> endobj
+13604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.215 611.136 213.213 621.674]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_a779ff356d82b6854f4eefca550b9d9e9) >>
+>> endobj
+13605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.428 598.394 171.52 608.931]
+/Subtype /Link
+/A << /S /GoTo /D (offload__util_8h_afd230e79063dd4b66c0006d192d253d1) >>
+>> endobj
+13609 0 obj <<
+/D [13607 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13610 0 obj <<
+/D [13607 0 R /XYZ 70.866 697.285 null]
+>> endobj
+13611 0 obj <<
+/D [13607 0 R /XYZ 70.866 651.461 null]
+>> endobj
+6162 0 obj <<
+/D [13607 0 R /XYZ 70.866 584.346 null]
+>> endobj
+13612 0 obj <<
+/D [13607 0 R /XYZ 70.866 565.16 null]
+>> endobj
+6166 0 obj <<
+/D [13607 0 R /XYZ 70.866 544.483 null]
+>> endobj
+13613 0 obj <<
+/D [13607 0 R /XYZ 70.866 520.541 null]
+>> endobj
+6170 0 obj <<
+/D [13607 0 R /XYZ 70.866 486.539 null]
+>> endobj
+13599 0 obj <<
+/D [13607 0 R /XYZ 70.866 476.323 null]
+>> endobj
+6174 0 obj <<
+/D [13607 0 R /XYZ 70.866 440.551 null]
+>> endobj
+13598 0 obj <<
+/D [13607 0 R /XYZ 70.866 416.609 null]
+>> endobj
+6178 0 obj <<
+/D [13607 0 R /XYZ 70.866 382.607 null]
+>> endobj
+13614 0 obj <<
+/D [13607 0 R /XYZ 70.866 358.665 null]
+>> endobj
+6182 0 obj <<
+/D [13607 0 R /XYZ 70.866 326.385 null]
+>> endobj
+13596 0 obj <<
+/D [13607 0 R /XYZ 70.866 300.722 null]
+>> endobj
+6186 0 obj <<
+/D [13607 0 R /XYZ 70.866 266.662 null]
+>> endobj
+13594 0 obj <<
+/D [13607 0 R /XYZ 70.866 242.702 null]
+>> endobj
+6190 0 obj <<
+/D [13607 0 R /XYZ 70.866 208.776 null]
+>> endobj
+13595 0 obj <<
+/D [13607 0 R /XYZ 70.866 184.835 null]
+>> endobj
+6194 0 obj <<
+/D [13607 0 R /XYZ 70.866 150.833 null]
+>> endobj
+13597 0 obj <<
+/D [13607 0 R /XYZ 70.866 126.891 null]
+>> endobj
+6198 0 obj <<
+/D [13607 0 R /XYZ 70.866 92.889 null]
+>> endobj
+13606 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F53 6507 0 R /F14 6622 0 R /F98 8891 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13637 0 obj <<
+/Length 2748
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Ûn#Ç}×W l ³Ó÷‹%­³WÚÈŠó°öEŽ¤(R!©u6_ŸÓs¡¦É&ÅáÌ"û`›–†uªª«N]zD“‡„&?üx{òçwV$–8­Er{ŸJ¬Ö‰qœh–ÜN’O=C¤!ýæ¼wýnxñãåOï¯ÈùÇý7¶÷îýð²øtsùîòæòêÿËw²wþ÷³·—7Åo+¯Ï_\ŸÿóÃåÕmŸqÚ;Ëÿ}ûþúªÿûíÏ'—·'ÿ>aБ&l­“µÄr™ŒŸN>ýN“ ~÷sB‰p6ù#ò)‘J%>O“_NþqBëv*‘0JŒrºn¨f„Ö,Õ„C}J¡K_ÓÞ—çt’Þ—úÎÇ/Oél5Zeó™×2ùê:š ˜#N¹BتþÝçÕã"M¶mc¯†dDP¶Ï6ˆ[VôŠÎ¼• b”*Ìgã4©9±Lu©QttUX|}ÿ¥b>š\C‰óùlµèã€çÓÂqRÕÄ œ$Z¸Â}ºr‘âë|–å¾ÎŽJÁÓl–Ÿ˜PŇyéeÿ•iZý¬Äßv
+861¼™Í9Åé©B“¥^VÙ”<’u„Ô‚‰ar+N¨¬E(£îÝËlüjsû›þ ÍE*û´ÑÚ5²¶&@ªxcÛñâ,1²Ä¥EŒî>'ÆñœV
+s‹îÀn”½ñV‰\‚z…8ù#¢ òÉ'ŽS0
+~îò¢ªÍÛ¦ªÈŽóh§ªÆ¨µÿ.øp]!KñR‘§/ó=§ÙjušuÔÀEÛ—†Õá"5+¿òa4.nTs^Zßto²¾‰Þ=àüß0ÜßI>åýÂ÷“¢¤å/½å‹‡Ò7ùc>OφÃëó³ÛË yã1õYï)­JP¤È¢”sÄ:S¿ó´MDê ó+ÏB2%ŸŒV«’ýóêð²Šì 9CƒVÿx¤g{Ù Š¢‹¡ %?Óešß!'RGõOxj¦‘O`ÔCh)ÖI€\ cC:<§Ñ7q«‰m:¤‡! 
+œ—¤Ë!ÝGä0Py«Ó¼¾O‚Ÿ¨êB}«ð€
+Ô?(ô˜%
+Ìw¼ œ#êqÖímà˜SC ªÈûœ-³»lš­Šq>f“I:óŸ6Ãp›ç:c!ƒ—#ª÷!f9½?†«Ë÷Ñû4Êf›_¬æ*ŒZÊ/~¶‰–Ao¢8{{IÉ9÷/-¿Ú¡Ok*!x*ô9æ9ê
+ü8³ƒÝN sôW…«ö{jéßya%q¿ëömƒµ"åm¼ÐêÎTÛ¼ô’ [[íG¨]Añƒ¥Åšôù*Ž`}Š68ÂK2Ún¬Å÷¹a£³bàUÑX¡°7㢠‹œ¿— :ˆ˜¹#–Ú&`>$TèlàB¡SÔ¡7ç›ÛÂœ—1\ÿ3FÙÛ´ŒNÕꀕõ——£E6ºó#Û4íŠË`ßÞ¾"òC™¦§§—àUÖ«ß‹T‚·Ålܹü F&i¾«8&þŠÛɦb¨ˆä…¤õáíÛ¯øm‡± ûÛ…À SÿÊ残&ÿÆ"f¸ eqy@¯ª“ ƒwŒëÂÝÜ Ù w#
+×2øRˆüí³¬ÿ3Ó¼A¯Ól3ŽuŽø=úñÛPÀn†uøÓlkÜŠ_ë¸;òAhD£é
+ îäÕØŸx*C,oòžÅëªØŽæ/¢ãѺävæèæåÀÿ
+endstream
+endobj
+13636 0 obj <<
+/Type /Page
+/Contents 13637 0 R
+/Resources 13635 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+/Annots [ 13620 0 R 13621 0 R 13622 0 R 13623 0 R 13624 0 R 13625 0 R 13626 0 R 13627 0 R 13628 0 R 13629 0 R 13630 0 R 13631 0 R 13632 0 R 13633 0 R 13634 0 R ]
+>> endobj
+13620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 297.705 175.51 308.175]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a60a342700870ef6fd663fea47db60561) >>
+>> endobj
+13621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 283.705 177.743 294.224]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_aca98bf98711e4a9d473c86d0015d9303) >>
+>> endobj
+13622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 231.755 128.16 242.166]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a840291bc02cba5474a4cb46a9b9566fe) >>
+>> endobj
+13623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.737 217.804 137.601 228.216]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a9a907c7bc378786c272d0ea9a6f68da3) >>
+>> endobj
+13624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 203.853 180.504 214.265]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a621b346a781997ac1354de929a4ffb3c) >>
+>> endobj
+13625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 189.902 180.504 200.314]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a4cc3b7161b7d972136ac91301344e321) >>
+>> endobj
+13626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 137.281 187.471 149.237]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.971 137.281 290.277 149.237]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a9ad116b903bcbdca09a5b76287c451be) >>
+>> endobj
+13628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.986 123.903 262.949 134.364]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a7eaa82d7420ddb056c961ff1d18c6c71) >>
+>> endobj
+13629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 109.38 187.471 121.335]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.971 109.38 287.023 121.335]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a03cea762759e23c1fee622e2f0bca69f) >>
+>> endobj
+13631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.986 97.772 259.694 106.462]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_aa2a2e1ead2aa9dc079ca07e669c79fd8) >>
+>> endobj
+13632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 81.478 180.863 93.433]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+13633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.363 81.478 275.698 93.433]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_aec4e6e4da26add1860f578fe309bcb61) >>
+>> endobj
+13634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.378 69.87 248.37 78.56]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a4a62022ba87c2776e1f35a239dc49b1f) >>
+>> endobj
+13638 0 obj <<
+/D [13636 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6202 0 obj <<
+/D [13636 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13615 0 obj <<
+/D [13636 0 R /XYZ 70.866 751.292 null]
+>> endobj
+6206 0 obj <<
+/D [13636 0 R /XYZ 70.866 731.71 null]
+>> endobj
+6210 0 obj <<
+/D [13636 0 R /XYZ 70.866 703.402 null]
+>> endobj
+13618 0 obj <<
+/D [13636 0 R /XYZ 70.866 681.399 null]
+>> endobj
+6214 0 obj <<
+/D [13636 0 R /XYZ 70.866 659.693 null]
+>> endobj
+13617 0 obj <<
+/D [13636 0 R /XYZ 70.866 634.81 null]
+>> endobj
+6218 0 obj <<
+/D [13636 0 R /XYZ 70.866 597.231 null]
+>> endobj
+13616 0 obj <<
+/D [13636 0 R /XYZ 70.866 572.348 null]
+>> endobj
+6222 0 obj <<
+/D [13636 0 R /XYZ 70.866 534.828 null]
+>> endobj
+13619 0 obj <<
+/D [13636 0 R /XYZ 70.866 509.887 null]
+>> endobj
+6226 0 obj <<
+/D [13636 0 R /XYZ 70.866 472.308 null]
+>> endobj
+8791 0 obj <<
+/D [13636 0 R /XYZ 70.866 447.425 null]
+>> endobj
+6230 0 obj <<
+/D [13636 0 R /XYZ 70.866 428.66 null]
+>> endobj
+13639 0 obj <<
+/D [13636 0 R /XYZ 70.866 312.918 null]
+>> endobj
+13640 0 obj <<
+/D [13636 0 R /XYZ 70.866 246.968 null]
+>> endobj
+13641 0 obj <<
+/D [13636 0 R /XYZ 70.866 153.116 null]
+>> endobj
+13635 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F100 8905 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13659 0 obj <<
+/Length 1607
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ]oG}çW¬T©5;™ïK}pœ:"vêÒ¾8yÀ°¸+ah1N•ß3û»xŒYØ(íƒ^vï¹sæÜ{ÏÓè.¢Ñ»Î›açõ¹‘%Nk §‘¡ÄjljfÑpÝtÏ~9ý8ì_÷bnl×^¬9ïž_ úù•·Wg¿è_{ŒÓîiöïðâê²3ÁIJ|æê|ðöMÿÝÅ%9ûø1xæºÞ¿î_žõ{Ÿ‡ï;ýaçïCŽ4b뜬%–Ëh|ß¹ùL£ >{Q"œþÉDI÷³è·Î¯Z]§£Ä(§« ÕŒÐr¥Y® ™SJ»Fãe‹YËL>QÊçé*]Ì‹+‹ñã}2_²KÈ:ƒØPI£˜S¨̓ÿ0É#$ùÓ§ƒÁÕÙé°ÿ‰*š?Œulv‚0å#{v>ºOÜIUy"±§ä1‡›$*"ò]ìaËÝšºMNÑF6ŽP’^É—J"´D‰Ã'YÚ£Õj™Þz¦WÉÓü9îUÖ“¿Ä2ÕFþREU=¿þç!{!ø·~»ün”?ùÖIU 3£ˆ®ÐˆËc=Ùh•¿ÎÒR8\毋iþꟘŸ-ð‹˜Ü&w霌ÿú«'T—„•)(‘V•ùv0Ȉsb˜´Ãv({‰Œ+¨6$T±p_ !Tåˆ8
+IŒ•í ÃøZ¯Ü*²Wî×ÐiD3Ý®ÆV w5º…zŒÅ^Úvp1ØŒ¬Ã¢–«šŠ£›X£ƒþÔË^Ø«ü5fÕ‚k
+íÝ…Ô‰™lyyÇ«L×±§ÒÀrfÒÎ?¡
+ € ‰¦zû]`•¶‚K4¹ÿ(Rîhë—ØUé‡Ç°gÑ'ŠtrÒßљĊ1x¸f85³Cf ¦>Ý8BÈ?`*ñ<lÂ˳ºâÒµl1•„«#ïž%”·Í Íôjíž"Ã{(L¯…}²Žìë"¤ÝB°åÐõ‘fEmhlEö–H–7Ð@“Ù§zצ&™¢÷°‚œc™R5?E(ÝöÙm_ßƽ™dæßÖ4Âó¾ÍGRÌîíÛZ@.|[ y
+êÂßCcÉ-€rx+xt—c“{96…JØú:ö»¶oâ×úƒåâ¿Ö8Ä¿æcérÒ¾è×ZA.üZ ùÅ*ÿm
+endstream
+endobj
+13658 0 obj <<
+/Type /Page
+/Contents 13659 0 R
+/Resources 13657 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13527 0 R
+/Annots [ 13654 0 R 13655 0 R ]
+>> endobj
+13654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.058 329.022 205.658 337.988]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a9ad116b903bcbdca09a5b76287c451be) >>
+>> endobj
+13655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.058 158.884 201.474 167.851]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_a03cea762759e23c1fee622e2f0bca69f) >>
+>> endobj
+13660 0 obj <<
+/D [13658 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6234 0 obj <<
+/D [13658 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13642 0 obj <<
+/D [13658 0 R /XYZ 70.866 753.377 null]
+>> endobj
+6238 0 obj <<
+/D [13658 0 R /XYZ 70.866 731.489 null]
+>> endobj
+13643 0 obj <<
+/D [13658 0 R /XYZ 70.866 718.849 null]
+>> endobj
+6242 0 obj <<
+/D [13658 0 R /XYZ 70.866 680.895 null]
+>> endobj
+6246 0 obj <<
+/D [13658 0 R /XYZ 70.866 650.301 null]
+>> endobj
+13644 0 obj <<
+/D [13658 0 R /XYZ 70.866 630.088 null]
+>> endobj
+6250 0 obj <<
+/D [13658 0 R /XYZ 70.866 608.2 null]
+>> endobj
+13645 0 obj <<
+/D [13658 0 R /XYZ 70.866 595.56 null]
+>> endobj
+6254 0 obj <<
+/D [13658 0 R /XYZ 70.866 557.606 null]
+>> endobj
+13646 0 obj <<
+/D [13658 0 R /XYZ 70.866 544.966 null]
+>> endobj
+6258 0 obj <<
+/D [13658 0 R /XYZ 70.866 507.012 null]
+>> endobj
+13647 0 obj <<
+/D [13658 0 R /XYZ 70.866 481.917 null]
+>> endobj
+6262 0 obj <<
+/D [13658 0 R /XYZ 70.866 443.886 null]
+>> endobj
+6266 0 obj <<
+/D [13658 0 R /XYZ 70.866 413.293 null]
+>> endobj
+13649 0 obj <<
+/D [13658 0 R /XYZ 70.866 392.988 null]
+>> endobj
+6270 0 obj <<
+/D [13658 0 R /XYZ 70.866 371.191 null]
+>> endobj
+13648 0 obj <<
+/D [13658 0 R /XYZ 70.866 289.602 null]
+>> endobj
+6274 0 obj <<
+/D [13658 0 R /XYZ 70.866 251.044 null]
+>> endobj
+13651 0 obj <<
+/D [13658 0 R /XYZ 70.866 239.008 null]
+>> endobj
+6278 0 obj <<
+/D [13658 0 R /XYZ 70.866 201.925 null]
+>> endobj
+13650 0 obj <<
+/D [13658 0 R /XYZ 70.866 119.465 null]
+>> endobj
+6282 0 obj <<
+/D [13658 0 R /XYZ 70.866 80.907 null]
+>> endobj
+13653 0 obj <<
+/D [13658 0 R /XYZ 70.866 68.871 null]
+>> endobj
+13657 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F45 6502 0 R /F97 8866 0 R /F100 8905 0 R /F13 9222 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13672 0 obj <<
+/Length 2045
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[oãD~ﯰ@BŽ Ó¹_*@ZÚ•vé^–}È&n7Rš,M
+ÚÏ7»É8“4? ÄC×Þx|¾™9ç;·1Íî3šýxòCÿäôҊ̧µÈúw™¡ÄjljfY”½Ë ‘–tºšóüæòê¢w}Ñ14'çoÞtºÜØüòõU/ÜÝö.{·½ësü—I¡U~þÓ«7ýÞmxj*!Ëñ7ç¿ýÒ»îw§ù«òßþë›ëÎûþÏ'½þÉŸ' ³¤{ž•µÄr™ NÞ½§ÙÏ~Î(Îf—#2©QRà~’½=ùõ„®®T¥Vª¡õRïhš¯ÆóÅÙÙõlT¬O… N˜då{\o›
+vÐ=ÏcU€"Oö°¾
+ÂÊAïæ‹Áb<|FBa¨šapãǵ|áõt¼&ÁJÃÊ&OÅY¹¸Ú¢êëé%£4ÓÄa½D
+Q–(SMð»
+û‹(U/€QE¨Q¥,™•ÍÞMÒ+$1V¶ƒ,4±FÇÈ% V:b¥iU1â„‹Qƒ“”g1‚pãÚÁ5p2ž¢«¸`Áã"²áì]WSšÝ)/,aª’a/Dmr÷)£”„Z^ø¦´æ.d«M¿ (4Òe —Ã+(©V=
+8<îù:›¾á:O‹pgU¸ÎîÂÕ¿1©žÍ¼¿}(îÇS2üô©#TNÒ~¢ÂÆ‚VÃE¿cqùÐa4Ÿgg½éâæŸS툤2Ó°1fÝ!áCâà{KHøS á ’ð›{9|À¤Œ”m
+Í®]ÖhB‚`äâ$p5âdD=LUÃrqr'òñÉÇvSUL>pÈeFêo$ÓQù~ÈGǵøÛâÎk·x,¦Ãb麖˧¥/ñÙI)÷Ëñt8yBBQ:ª/6Ç%xj
+Õ È“—,ÃY·î¨W`4ÖÅKQÚ±Ú*ï‹ùøEåL4±ý¸A0QúÀ¹*€
+ÕÎd!Ë@V9‘‡Ï³k%Ñ”·ƒê QØš5Ú¢`.”åtpÖñù_ׇ¯:ûe0|ô^f6b`3ÆàMÛ0ó?8W͸©”οû/6dbæÍðÕÕÕÍù«~¯!LPt:è°übK¸ (Þ{,é|ÝsH±Á)œË}%”jˆö…Ãø¬
+’4¯6f°(CÊÇüÎ>-R~T"‰“ú˜EHŸÈ6¡(ÑZÆ‹ðjðóbèýXÐJPIý—62{v×ÌD)Á¸Ž+­ÙZpÍÛ íòi: Åô ÔG•À %Q'$Ëf{å`QTeñO~Hª‚Ðm„Ø[ºޘCJ̃$iÄ‹¹
+‡W·ˆ|Ç#CD¡æŠ‹2ÃÉ £žpÖ-@—é‚Ž¡µfȨïkc»9‚‘´¢¹èQÓ.7&.Š0c™K„e.žqÃÙt^¥Ã!l…Ò,ß¡"!×·ØŠ\Öe Q>ëQQZ´‰¡˜¸©œ¯hƒÿµEq+µ>†£{JØÂQHâZïÎÑ£‘Ÿ9ºŠ|‡}N±Ùâm€J_±t+;1IáÚ@Ï9w1òŒÒíJOd¤¨§=õñôüÝ÷¶}I¿ÆP_®¹}é G½Z”Nä
+endstream
+endobj
+13671 0 obj <<
+/Type /Page
+/Contents 13672 0 R
+/Resources 13670 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13656 0 R 13661 0 R 13662 0 R 13663 0 R 13664 0 R 13665 0 R 13666 0 R 13667 0 R 13668 0 R ]
+>> endobj
+13656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.058 712.543 197.289 721.509]
+/Subtype /Link
+/A << /S /GoTo /D (ofldbegin_8cpp_aec4e6e4da26add1860f578fe309bcb61) >>
+>> endobj
+13661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 495.761 175.51 506.231]
+/Subtype /Link
+/A << /S /GoTo /D (ofldend_8cpp_a60a342700870ef6fd663fea47db60561) >>
+>> endobj
+13662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 445.986 187.471 457.941]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.971 445.986 287.435 457.941]
+/Subtype /Link
+/A << /S /GoTo /D (ofldend_8cpp_a409ddad5da136039aab4fe4bbe10d856) >>
+>> endobj
+13664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 432.779 187.471 444.735]
+/Subtype /Link
+/A << /S /GoTo /D (struct_func_table_1_1_entry) >>
+>> endobj
+13665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.971 432.779 284.181 444.735]
+/Subtype /Link
+/A << /S /GoTo /D (ofldend_8cpp_a9c7a40f9610fb7d2c1824c09246f2896) >>
+>> endobj
+13666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.196 419.573 180.863 431.528]
+/Subtype /Link
+/A << /S /GoTo /D (struct_var_table_1_1_entry) >>
+>> endobj
+13667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.363 419.573 272.856 431.528]
+/Subtype /Link
+/A << /S /GoTo /D (ofldend_8cpp_a901d1a98eae84b48de982db81f21ced6) >>
+>> endobj
+13668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.326 69.87 179.124 80.389]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13673 0 obj <<
+/D [13671 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6286 0 obj <<
+/D [13671 0 R /XYZ 70.866 752.891 null]
+>> endobj
+13652 0 obj <<
+/D [13671 0 R /XYZ 70.866 674.919 null]
+>> endobj
+6290 0 obj <<
+/D [13671 0 R /XYZ 70.866 639.345 null]
+>> endobj
+8792 0 obj <<
+/D [13671 0 R /XYZ 70.866 627.758 null]
+>> endobj
+6294 0 obj <<
+/D [13671 0 R /XYZ 70.866 610.745 null]
+>> endobj
+13674 0 obj <<
+/D [13671 0 R /XYZ 70.866 510.602 null]
+>> endobj
+13675 0 obj <<
+/D [13671 0 R /XYZ 70.866 461.448 null]
+>> endobj
+6298 0 obj <<
+/D [13671 0 R /XYZ 70.866 404.728 null]
+>> endobj
+13676 0 obj <<
+/D [13671 0 R /XYZ 70.866 385.79 null]
+>> endobj
+6302 0 obj <<
+/D [13671 0 R /XYZ 70.866 364.864 null]
+>> endobj
+6306 0 obj <<
+/D [13671 0 R /XYZ 70.866 336.958 null]
+>> endobj
+13677 0 obj <<
+/D [13671 0 R /XYZ 70.866 317.399 null]
+>> endobj
+6310 0 obj <<
+/D [13671 0 R /XYZ 70.866 295.87 null]
+>> endobj
+13678 0 obj <<
+/D [13671 0 R /XYZ 70.866 284.409 null]
+>> endobj
+6314 0 obj <<
+/D [13671 0 R /XYZ 70.866 248.709 null]
+>> endobj
+13679 0 obj <<
+/D [13671 0 R /XYZ 70.866 237.248 null]
+>> endobj
+6318 0 obj <<
+/D [13671 0 R /XYZ 70.866 201.548 null]
+>> endobj
+8797 0 obj <<
+/D [13671 0 R /XYZ 70.866 190.087 null]
+>> endobj
+6322 0 obj <<
+/D [13671 0 R /XYZ 70.866 173.073 null]
+>> endobj
+13680 0 obj <<
+/D [13671 0 R /XYZ 70.866 84.669 null]
+>> endobj
+13670 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F100 8905 0 R /F13 9222 0 R /F45 6502 0 R /F14 6622 0 R /F98 8891 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13716 0 obj <<
+/Length 2263
+/Filter /FlateDecode
+>>
+stream
+xÚ½ZÉrÛÊÝë+P• Ye¶{YÈ2eû•,ëQtÕ{e¿LA4+åTý}Nc A$ Äpûö¹Ó¹ÝMƒy@ƒï¦o¯­,qZ‹`úJ¬ÖqœhL‚oƒ«—wÓñd8âÆ Ž4çƒëO7ãäÎû/W_?o§CÆéà2þ;ýôåv8RŒk¼/]úÉ—ÉýÍèæÓtüöÓíÕÍ×÷ã·»;äc"k/u2¾OÆ·Wãá_Óß.ÆÓ‹^0¨L¶SÑZb¹ fOßþ¢ÁžýP"œ þ¿ùH%ˆ’×Ëàþâ÷ z8m%F‰QNÎ[3B³‰gë!¦ó¼‰•È¾~{-ÕbLcM0b¸e]òåwÎUî›àÛH)=øÛCôR¾ŠÒ‡~:ëy:¯IüšŸ¼ÇåxÞLÁ&ÜFr «›8^t»Ydzͫ¬,‘D Og{ùGɘFnUcCœQù1§—JÆtš8iûÓ9¢Eaž7ãÛ¢i<æŒÛüíc •¸àÄñÿ°,wD ׇe!I×Ʋç™YöpÌ«ËÉûû2œ÷w‹á7bÔF]0â>Œ2÷j:xý=D½…à6‘—d™h5dtðòÔh´!ܼ{Ù¼ÞGÛ$ÑAJNzåÇ _¥ºÑÔËø Êo¶ëሩÁËl[§¿‰.U£ÎÕÔ'¨;û®Ó38ØŽÇ–W¸T>E'’(“)Ø…ÅÈì3¯p‚p8/×x¤ñ7`>ÉGî†:À.ø·]„Ëkÿq˜ˆX†‰ÁÛ×övè$ñ8¼Ò9Œ®q:±hnÏ«ÖÖ`­ñª¨‚›0ØQ–ü±ƒ“¼ûzÿçqä‚-ƒ"sºsò ’X“HbJ÷ãiɘÈ÷®‡1‘ï•°ù1ǟ練åÞ¿'MßÔÛ¦(!Q¦ €âº P@qÑPBIâx¨»ËÉôÓåM T¬TRÀñ¤ìAm))aB¶€J*KÀXúSƒ Ó‚y®¿ÞÔáÄK2»
+~*eatçäAO$ImöìŒ4P®³àð/ezÐY Qiò:O?NÆ—uZ³2!‰Ò9G;*€dÞH–¯€×/«ÙI¥¯‰\.VuTL$^9‰6üŽ»Á¿†\ ¢£Éâ½ïTÑÛãŸ^n|±zƒÿR
+ÏŽ!aÚ£¯ŽxUÁÿº^$E$dÿr[[J@h
+(’Ò¢`ÿÝ>%ÔˆwÝ×Òaæþ¥ô}x‹ä6K6^zœˆükÉ3·VE:„DM‹mSShŽ,˜˜´ ’]<EJ¿FïNPÖ\ OcAŒ—úI2×, Uãof¤Q$ ²ÎGQ‹œ$@Ç,¯‡>†‚%}6Ö]Ê.CO)©8YBI¤@êIL«ÊH˧$Ûœ’Ú2®ápž×&Þø9 _`‘Á¨ !h‚ŒÒ‘<Í;Ë(Ü3<>d2c¸3EwŒ·ª» )Xsw¡½ŸißåòNÝ…%Ãœ*¡¼»P<‘$EEMˆ§»g; ¡nÙ]XpÔÆîÂúÌÖ1ß]PÐóóÝ…ï{›ËÅv{ÈZwRZ´e¦{{qª€êþÂK’Æ´‰ì’õ¤ž_~ˆ÷ÆdPJ÷›Íé®z²¸ðËéçÙËS´ÚÆ‹õ»1öZÒüÅ~C²nãQ )€†Þñ =q1'7:µ+‘¤¨®ÛxôKUÒô1¦B!
+c&¹­ÆüR£/ö…åœÏáO`bñWéêâx¿Ÿ³ý«pÜúg¸Ín¦Öù‘âü®ÂyôÞô}m¹#¼ËÑèH,PðcwÈ4X.2Ãór
+û/–é³çõf9Z.¶‘Tò“Ä<…æǘDC°Ôh­f…¤xÑÌÿüG‰M52A1¥ú¬½d¼ bAš¦‘®ç_±|l‘ÇGü0bP»Gh^\÷øo™éÁý½$ÍL ÷ïaÌÔýsc–Ÿ¨0
+ÂûÓ Ïs<?¦?Qqx†¢q~o_Ä=UUÌ-£Õ|û3ï¾È¦ÉÅbu°ì{•Ù6ZÇK¶CEÚÿq¨„«² aÖ¸EwÀÎ*HdB&’ Û-ìù^á< ÚËú5Y–×çÅ,<ßÔLŸ ‡vÜõ 8QÒ§_²ÒVXC·ÂU
+ ž SÍ8TgLÁ‘*mhøPT¦€ÆaÎL•©ôa!Œõá—±˜ñ7á®2šŒ&ÑŸ9Þ‡rÒø”U£)'n ‘FšæÆSævpJ©S+?mr|J"e˜?U¤w''
+Ó¥¹Ãû3¹¼¶>¤q|¼$7”¯¼¥óI~Éøñ¡¸
+ù {ªäªôKÕGrm^–5v8` f¸ó ß/§ñlm¿Ææ—×Z¿XiªlVå+x¯yÓý:\B, ¦³žù!+Ži ´@²Ø¾Dû-o‘?“e1/u^F |“ê
+\üj¹ˆVû†ê¼2¯N+óåhz4Øs[~Êiã„=©¹ßô‹M*Þ:çê\ú¿Î!UI
+endstream
+endobj
+13715 0 obj <<
+/Type /Page
+/Contents 13716 0 R
+/Resources 13714 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13669 0 R 13682 0 R 13683 0 R 13684 0 R 13685 0 R 13686 0 R 13687 0 R 13688 0 R 13689 0 R 13690 0 R 13691 0 R 13692 0 R 13693 0 R 13694 0 R 13695 0 R 13696 0 R 13697 0 R 13698 0 R 13699 0 R 13700 0 R 13701 0 R 13702 0 R 13722 0 R 13703 0 R 13704 0 R 13705 0 R 13723 0 R 13706 0 R 13707 0 R 13708 0 R 13709 0 R 13710 0 R 13711 0 R 13712 0 R ]
+>> endobj
+13669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 740.928 218.073 749.676]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a7aa46265ae4f353d04448dddef56a6bc) >>
+>> endobj
+13682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 728.195 210.353 736.944]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_aa9292150b330a847ce870a70856b42f0) >>
+>> endobj
+13683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.506 678.453 230.159 688.973]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25b) >>
+>> endobj
+13684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.659 678.453 284.898 688.973]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_ad96d01635b581139184cc242833fb699) >>
+>> endobj
+13685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 665.721 211.025 676.24]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.525 665.721 271.323 676.24]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a21f22ac51a1b81c4280b22cb99756960) >>
+>> endobj
+13687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.084 652.912 194.864 663.507]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.506 640.256 247.123 650.775]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60dd) >>
+>> endobj
+13689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.623 640.256 343.24 650.775]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a5f11329134ddf46ab84642145c381fe7) >>
+>> endobj
+13690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 591.712 198.258 603.668]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25b) >>
+>> endobj
+13691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.232 591.712 287.423 603.668]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba68746913025b9e60e6da2b7a797d88da) >>
+>> endobj
+13692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [305.622 591.712 393.296 603.668]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba01e0a27df5e73f7f4fde727f1f5462c3) >>
+>> endobj
+13693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.495 591.712 483.72 603.668]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25baf415ad310f8809996b11aebd07bb2f7e) >>
+>> endobj
+13694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 578.98 215.221 590.935]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60dd) >>
+>> endobj
+13695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.195 578.98 279.721 590.935]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60ddaa3744fd5c62a308412ed93ebb3b6e405) >>
+>> endobj
+13696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.92 578.98 365.904 590.935]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60ddaed0bb04789853580f833ddd36eaa617d) >>
+>> endobj
+13697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.378 531.504 166.212 542.1]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5) >>
+>> endobj
+13698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.527 531.504 394.324 542.1]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.625 531.504 525.406 542.1]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.694 506.893 178.668 517.412]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a2407def36b838f9516fc707009559995) >>
+>> endobj
+13701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.699 506.893 409.497 517.412]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.998 506.893 525.406 517.412]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 494.862 116.127 505.399]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.817 482.129 193.061 492.725]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a01af7da8800377e0f76d1a35fdc83ddd) >>
+>> endobj
+13704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.628 482.129 318.245 492.725]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60dd) >>
+>> endobj
+13705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 482.129 525.406 492.725]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 470.174 130.159 480.77]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.824 470.174 262.604 480.77]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.419 457.441 165.714 468.037]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a5c27b064db8c6c2896f297828042efad) >>
+>> endobj
+13708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.374 457.441 394.172 468.037]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.625 457.441 525.406 468.037]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.43 378.526 297.837 389.121]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.667 217.842 168.464 228.362]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 171.864 129.668 182.383]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13717 0 obj <<
+/D [13715 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13718 0 obj <<
+/D [13715 0 R /XYZ 70.866 753.919 null]
+>> endobj
+13719 0 obj <<
+/D [13715 0 R /XYZ 70.866 691.058 null]
+>> endobj
+13720 0 obj <<
+/D [13715 0 R /XYZ 70.866 607.047 null]
+>> endobj
+13721 0 obj <<
+/D [13715 0 R /XYZ 70.866 546.343 null]
+>> endobj
+6326 0 obj <<
+/D [13715 0 R /XYZ 70.866 431.448 null]
+>> endobj
+13724 0 obj <<
+/D [13715 0 R /XYZ 70.866 412.262 null]
+>> endobj
+6330 0 obj <<
+/D [13715 0 R /XYZ 70.866 393.306 null]
+>> endobj
+13725 0 obj <<
+/D [13715 0 R /XYZ 70.866 355.612 null]
+>> endobj
+6334 0 obj <<
+/D [13715 0 R /XYZ 70.866 323.417 null]
+>> endobj
+6338 0 obj <<
+/D [13715 0 R /XYZ 70.866 270.688 null]
+>> endobj
+10187 0 obj <<
+/D [13715 0 R /XYZ 70.866 249.437 null]
+>> endobj
+6342 0 obj <<
+/D [13715 0 R /XYZ 70.866 230.825 null]
+>> endobj
+13726 0 obj <<
+/D [13715 0 R /XYZ 169.961 220.757 null]
+>> endobj
+6346 0 obj <<
+/D [13715 0 R /XYZ 70.866 184.846 null]
+>> endobj
+13727 0 obj <<
+/D [13715 0 R /XYZ 188.978 174.779 null]
+>> endobj
+6350 0 obj <<
+/D [13715 0 R /XYZ 70.866 138.868 null]
+>> endobj
+8885 0 obj <<
+/D [13715 0 R /XYZ 201.279 128.8 null]
+>> endobj
+6354 0 obj <<
+/D [13715 0 R /XYZ 70.866 92.831 null]
+>> endobj
+13714 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13746 0 obj <<
+/Length 2392
+/Filter /FlateDecode
+>>
+stream
+xÚ½Z[oâJ~ϯð#HKOßí­Vb’ÉC²„9ÚÑìy à$–Àä€9sòï·ª»mlc @´/Á±ÛUÝuùê«<4¸¹ø2ºøt‰ "FkŒž‚’Hë 4œhŒ¦ÁÏVH¤!íŽæ¼u7|èwú·£Þ§ÛÁeÿûUïSq‡|mwxµ®oû=w5ì]÷†½Á%ü«׭˯ÝûQoè†^âfùÕÝå÷o½Á¨Í8muíßÑíÝ ýÇè·‹ÞèâÏ [¦+¶E$â2˜Ì/~þAƒ)<û- D˜(øeWΩQRÀõ,x¸ø÷-[‰€Q*£ËçÖŒÐÊÁE»Ã(¥­^Úf´µžÇËq–,R·çQ[ÓÖÛkìO°˜Àó4s `ßVÉƶ4èpF„6N|ì%º—Ñ_Ö«·‡8+¤ZR5ˆˆœg¬b‹'÷9¶FsÖZ>{³ o.‚ŸuU~¡3Kþt$1³ª¨tš6ÇÇÏq¶X6¾úéÌ¿Ù.çDrtXDhä­úåûÃm§2&H¨")ßçTLSxÔz²¢’1MÀd(ˆSáT>ôF …„ÍE¡R„„±¨ª³÷í~ô£b£š+E~äðÄ-Ÿ¿foÎ{«š[jÚ:hƒPE£
+ÃßcT jÆ>À¨²„±÷õ|•¹QË:ï»ÃÑm·¿Ï¬R¨àÍ:X¤¸jZ{‘½ŒýÕbžd+ÿt1óÇËx<]íuƒQ„ÁIÞÛ1Õ|€$¦Õ{¼p¾ÆÜ %•×ßû{= @CTvw§å“t2[OcoüñlVµ½óNšßôž™Œ—STiÀpë.ˆ¦~gWñ)åi²è\×,I½
+kW—AÖVÏxÚF;;íL}͉1¢ŠÀNN„þˆ“ƒ¤$¹úÿuØë^ÕœU¯úu€”@›ÂÜ#›mÕùù.ëP£ôñ)°yB–ÈÚ& 5a‘(±5éÙÚõ:l¶ð^bæã)IqË&´™<Œgñx…›36ª(°Y#Z“Eºò«p¹•YõXEéÂÎé?ôB]¡È—4‰d20°œÛcK
+§-âŒ&¶Ž#åe" @âßpe Œ-!'Õ%€Pàá$Íܶ ²e2i2ä)UEéNÒéªÉh ¼i0ZÖÖŒg(±ßxâJÈð ãIÈRÊ0žä”p-3žÊÏ÷õ¶ÑzâœÉªõl2KKRBÈ-Y­Üs4é¨ <7S›dœDG
+7Ù”mNX— /å&pk¨Þˆ:„ï¬tx;<—y]ÆÈ
+þJëÕì­±\Ǿ2Mó×µƒ«Ra_¬—“¸FŒÆ5z•C*ò¤•…PëÞ0Á],¯Õ£—Ä {ª å¯$§bO–Å$þ¿$ï.S”[c"A«í3[¸ÏÇâ±5‰?ç/4z¼ôÏÒE¶×*mlv·á *˳ÿg–
+¨e:ÂMb k»<$…6åöïNÈÛ©òôî-Ý·¥£¡9G¬ˆ$\á%~ K`‚—#Ú)[èO}ßæÄçq†T‘µªRÓ”LLÂÐìŸÒ`†©pq£ ŽH¢÷B  Ú/a$dý¦ìN›7“IÚ€g·«OSY¤1|ÍèªÊœ”9Mcƒ8pM!TUã`=t!!l®â§Ã{‰é‰ŸõŒ+îæ¹,¨Ì!IÌ
+‰6Ý?Cæ†k·] Fül3Œ—®ÍÃjÿæžÿJ²÷п
+n(
+K}Ë*û½Áž?:æ¶RÜ‚°”'¦øFƒGȨü>¡b„\¦b
+õùØËÛk3ˆ«Ÿcp÷ðã!ÿDÑ$=üÓ¦/kúIÛÑdÕËÛ¿ Ùë;`[¯6_–×l GælþÆ[„‰¡
+
+endstream
+endobj
+13745 0 obj <<
+/Type /Page
+/Contents 13746 0 R
+/Resources 13744 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13713 0 R 13739 0 R 13740 0 R 13741 0 R 13742 0 R 13743 0 R ]
+>> endobj
+13713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.667 715.409 168.464 725.928]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.77 502.755 192.167 513.387]
+/Subtype /Link
+/A << /S /GoTo /D (struct_thread) >>
+>> endobj
+13740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [92.299 334.399 152.133 361.228]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5) >>
+>> endobj
+13741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [92.299 320.673 164.273 331.192]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a2407def36b838f9516fc707009559995) >>
+>> endobj
+13742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [92.299 310.488 177.543 319.237]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a01af7da8800377e0f76d1a35fdc83ddd) >>
+>> endobj
+13743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.617 94.772 171.025 105.291]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13747 0 obj <<
+/D [13745 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6358 0 obj <<
+/D [13745 0 R /XYZ 70.866 771.024 null]
+>> endobj
+13728 0 obj <<
+/D [13745 0 R /XYZ 70.866 750.608 null]
+>> endobj
+6362 0 obj <<
+/D [13745 0 R /XYZ 70.866 729.617 null]
+>> endobj
+13730 0 obj <<
+/D [13745 0 R /XYZ 88.314 679.203 null]
+>> endobj
+13731 0 obj <<
+/D [13745 0 R /XYZ 88.314 660.811 null]
+>> endobj
+13732 0 obj <<
+/D [13745 0 R /XYZ 88.314 642.42 null]
+>> endobj
+13729 0 obj <<
+/D [13745 0 R /XYZ 70.866 618.67 null]
+>> endobj
+6366 0 obj <<
+/D [13745 0 R /XYZ 70.866 574.552 null]
+>> endobj
+13733 0 obj <<
+/D [13745 0 R /XYZ 88.314 524.138 null]
+>> endobj
+13734 0 obj <<
+/D [13745 0 R /XYZ 88.314 505.746 null]
+>> endobj
+6370 0 obj <<
+/D [13745 0 R /XYZ 70.866 460.987 null]
+>> endobj
+13738 0 obj <<
+/D [13745 0 R /XYZ 70.866 437.575 null]
+>> endobj
+6374 0 obj <<
+/D [13745 0 R /XYZ 70.866 402.504 null]
+>> endobj
+13735 0 obj <<
+/D [13745 0 R /XYZ 70.866 68.947 null]
+>> endobj
+13744 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F45 6502 0 R /F98 8891 0 R /F14 6622 0 R /F132 10901 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13755 0 obj <<
+/Length 3327
+/Filter /FlateDecode
+>>
+stream
+xÚí]sÛ¸ñÝ¿Bo‘fN
+v‹ýÂîšv:´óéìýðìíGu41JEá}'¦D+Õ‰ 'Šu†ãηîÅç_†ƒ›^ŸÇº“^_qÞýxy5p#>_|ýyp=ì1N»çöïðòóu¯/W0_¿äóÍíUÿêr8x{y}qõõÃàm9B~t°ÖPo7ƒë‹Aï÷áOgƒáÙg H¦V’¨5Ñ\tFÓ³o¿ÓξýÔ¡$2ºólgN;BFDŠÞ'Û³¿Ñê¶ehÛŠZì;›å@‹QHxu¯nÒeºèõíþ™º¿QIaŸ†uGóÙÒÏÎ`.¬²ß~ZÖ8DXð³Üœ,"‘ÐÅ”*Ô$Ó¹Â邦L1ý7J£Mvq)à ŒÝ¬ja¹)yU“˜ÇûØd2W”×¹¼H—ù"…E„
+Qì.›—!–qE"*,Céz¿Z¾Ü¦!Öix5²u‚IÂõáœLIõñœœfô~œ+7w·Ló ë" ËÔ9“:}ÁQ*îô#FJ÷Ù9ìiÚMz ›Üb ¼FtbPx<ýÙÅX â¬÷†°É/Æ ÑÒAbTíæ'Z—j—¯wØ„«A=ÅZh$s“€×ëI`!(á`™ú0Ýhã&{ëõèqÙM—ÎÎæÓ§UžäÙ|–LÜÐ9_-FÅŒùÌ=÷€³ôã÷B²/{LvÁÌqÝ÷“ù¨FøŸ~OÎÓáÏÓ³ãÒ®WÝd†ó^ðGìªnþ˜º—11 ›Íæ¹ût—º±Ecgã
+™_u¿šp‡nü9›L<¤³ ×M]Íòl²¦>¼Ø€Uc‚ãY’M%-Y5y¬qýNÄkñn7d lh´Z,3·7”Ý»çSº¸ïÜ9€‡¯ÓtìÆï
+JáÝñ^–ÉÔ¿åÉ&¨¹‰bòR 6YÛ#p¿¦(›+gãL…äIš,‹
+fvÙôào8hä­s Ϧ…Øe^Ìž‘¯É²Í:…V¼J¿jÁI°ñ^æoÓÔ­;Ÿ,çµ™Ná^óo`-ç\5ê Õ¬jr0¢pH_šJT‡I¸ÄW||‹À"^ÕÊ5|#=ü/=.ºÉ˜”XƺËÀPÔ¡À´F\¶Gh%dÀÀÅh½eGQC8k…A;Œ)«8°*÷eÐÖF1E,ãÂCŒ2×$ŽÕ8k¡!31¸LUÇ@É“æ@”5S
+ËIÉ:Êk/Ƭ½Â§3‚ö5Ÿ»gSVËÑžET€qE½d¦{á ιK}¼À* çh1ÖqÆ_†ŸAx#K/B=…‹
+DÂÈB
+»rÒ†]aDÂækHíµ´Å°†7hXjxoÒ?Vp´ÁòöëVšŒë-'r7.Ùº(ïCÚ߇´76†ö+Cæ‚ËØ»#à‘¨X‹íâ¹7«6ÅSá|sœxFŠpmN×JɈŽØ+¤ó œ¸¸W–N¸±µˆæAHÃ’YEº¾ï
+ðåÑUVA^:®ë
+Ì%FÀó8Ÿ¤¡HÛg£¤ÖŽŸýHÑ6‚ο¸IV ¤·)8`%ŠcB ÑÛ N,ž‰[ïS×0à•ƬúIc](Ç"õ3Ö×/7/ñÄLæ˜Ý°@—þK‰oPiˆË|†8˜, ß-iÌw2à€'ÞÊ’6þ¨_q$¤7Bª-]´¹K µ›ÒaKð)ÔA`—æ‚É5Í®~o·á:¤ìž‡X°ÙO¼ÏÖ,³ûUÍ­s˜•~‚ê=Ê÷Ø”f¥Ÿ zå:°ƒ µvï6ËutpÙƒ%+Ûs¥ˆ¤ì$ÙwtQýŠªÞHÙwIàVPÃY3[bf:kè·uèèvÛ¿5)¶?¡›"¢°‘𸠇[
+N%1\Ÿ¤³ƒG\¾BÃCììh mëì8mXÍ«h¿wvœ´³ƒsF”2'èì@H"~EcÇñ(‹ÆŽ*Êÿ~_Çþ"¾iU
+œbF×q†;:@Ô­ `ð[ÃÙÞѱ·Ømj9@ JÕÒÁ”Ÿ®OÚÒÁÜ©e´OKG°£#ñ¦Ø¥
+f‚1óºÄŒl¢þ7×¥Û
+endstream
+endobj
+13754 0 obj <<
+/Type /Page
+/Contents 13755 0 R
+/Resources 13753 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13748 0 R 13749 0 R 13750 0 R 13751 0 R 13752 0 R ]
+>> endobj
+13748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [92.299 657.836 164.273 686.436]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a2407def36b838f9516fc707009559995) >>
+>> endobj
+13749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.371 468.52 335.778 478.99]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.617 456.516 171.025 467.035]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.371 89.541 335.778 100.012]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.617 77.537 171.025 88.056]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13756 0 obj <<
+/D [13754 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6378 0 obj <<
+/D [13754 0 R /XYZ 70.866 740.126 null]
+>> endobj
+13737 0 obj <<
+/D [13754 0 R /XYZ 70.866 437.889 null]
+>> endobj
+6382 0 obj <<
+/D [13754 0 R /XYZ 70.866 392.11 null]
+>> endobj
+13736 0 obj <<
+/D [13754 0 R /XYZ 70.866 70.866 null]
+>> endobj
+13753 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F132 10901 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13792 0 obj <<
+/Length 2998
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Ys#·~ׯ`Ù/dÕÂ=W*UÚ]îF.­´‘hW\¶(j¤
+5lôïóá˜!1„Hñp*yÑ 1@w£Ñýu7
+ÔšXWdyû]Oès_„,€­)œ[$ ªÂô¿$
+O<a«B9~»<\åð&£v{øLc7š(ašLæ/{ùl“n±½œ<”ÞO¥ö~.Ufxqÿ|7ËÛ.’£*ŸâÉù<: f3å6@?ûïßÊÅÿ1 @œ“E•)4Õ8€÷ûÀëú§««À᱿éÓèø‚SkVCˆ-–eÆÛ?w2È9*m¼†uÛ™Ù7f4€æÁ¬ð­³éØ7Qßà
+X¤džŠÓ—1B"Á°«ãYJ$4K]”W¯—ÕÜt²xA¸GrÁ”£EyX~•Cd‰>‰×ÿEPÙßÄ7PÅ’&?UTî¼d«a¶/¢ŠÁwLEi[öÕ›o¦ËÅd9ŒqYQ
+©b0ü—P}ªZ*”Q•ºú)|ö€aßÊ02\ ¨wGÀ…\Ë—MtoUmš(H°í$v›(¼€nß¾xmf«%
+Eþî¸wÏFf ^,y¢LÛbš1M[æ:S¿yb÷5Á½Ëò¶gBäãÆ®£Q9 _‡£
+-ÿ=,œgàÃÍm7ªüªR.g8×Ä«C ãG€>‡Mî% J/.s¤ŽÙ)x*ŽÌ#‹yö/>&xÂÔ½Í3.Žx^õ®·¹ù¾f·éåBó½|ECr³hW=ÒBEX§r]ás½»WäѾ@]f­m Ñ Pÿf ¾˜…óå_æË‘Ýn ÝÛ-‰ÞÛŸî~‰ùͧãâ… 1Ûe•,n·h9N9Zïòúç‹F(©wÝ’L³§¥Ïiü ê9±\ü˜Í4S“»øxqyí»ÊqÙØ>Œ6©’:s›kóê‚g5s{òQÇÈ
+b•‚BZ%PÔíuf2$»ß—“áhùÚÓ² hn[Z1±Ì
+=ŠÙl2%_”$C(\6¦„9۲Ǯ{Béì©Íä)-^† Çv‰‡ZÿiÒ9Hÿ¯J7˜Ã°§‘N7¤ëjØúwÓYeè¡ý¼n!_¾[ùªv—8;–Ôí8û p0œY˜Æ)AÓk5ÉÇEGj¿q®šp—nÿ
+›iºYӸхE÷—«ÃŒRü«3HM"Ad2œŠ±.+TuH’܃L…b”õŒ€½áÈ{XÄÞ]OyÁ*jS°No ’ÅùvÔ¡ÛsîkGÎw¼îrFXZcåšXbíu?EíTiÏ2Uv¸
+$²aN`¾öÐ`ìPB
+PSwomJÄ÷ù_á_­ß¹ÈmM¢Ñ@$BÂÖdý
+endstream
+endobj
+13791 0 obj <<
+/Type /Page
+/Contents 13792 0 R
+/Resources 13790 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13757 0 R 13758 0 R 13759 0 R 13760 0 R 13761 0 R 13762 0 R 13763 0 R 13764 0 R 13765 0 R 13766 0 R 13767 0 R 13768 0 R 13769 0 R 13770 0 R 13771 0 R 13772 0 R 13773 0 R 13774 0 R 13775 0 R 13796 0 R 13776 0 R 13777 0 R 13778 0 R 13779 0 R 13780 0 R ]
+>> endobj
+13757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [92.299 658.09 152.133 684.919]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5) >>
+>> endobj
+13758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.371 453.785 335.778 464.255]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.617 441.78 171.025 452.3]
+/Subtype /Link
+/A << /S /GoTo /D (namespace_o_r_s_l) >>
+>> endobj
+13760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 257.665 266.67 266.414]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a6a49c23d80168db9755d7375c1795c35) >>
+>> endobj
+13761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 244.87 191.497 253.618]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a56cf23cc44d57f3d2af90d229d20a5c8) >>
+>> endobj
+13762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.997 244.87 251.831 253.618]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5) >>
+>> endobj
+13763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 230.303 203.637 240.822]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a27bef0e645cd5440f957cef702e9b977) >>
+>> endobj
+13764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.137 230.303 276.111 240.822]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a2407def36b838f9516fc707009559995) >>
+>> endobj
+13765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 219.278 216.907 228.027]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_acd0463e45fdf16cc900a7b976b10db6f) >>
+>> endobj
+13766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.407 219.278 302.651 228.027]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a01af7da8800377e0f76d1a35fdc83ddd) >>
+>> endobj
+13767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 206.482 190.959 215.231]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a8af94112802bd3967c1f033a2682cfbb) >>
+>> endobj
+13768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.459 206.482 250.755 215.231]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a5c27b064db8c6c2896f297828042efad) >>
+>> endobj
+13769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 156.73 170.579 167.142]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a396184a3d9bc75d42739c031fcbaee73) >>
+>> endobj
+13770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 143.934 180.549 154.346]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a8eb8d2738c53d6735b2d28811ce20a8f) >>
+>> endobj
+13771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 131.139 216.674 141.55]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a46fb9aac0e1ba8c6c75def728d639a1d) >>
+>> endobj
+13772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 118.217 210.864 128.755]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a38c935f8026e8840b41f1e9db1e06705) >>
+>> endobj
+13773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.421 105.422 176.321 116.017]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a641b867e36378c98404245b4b61a32e3) >>
+>> endobj
+13774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.975 105.422 408.773 116.017]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.998 105.422 525.406 116.017]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 93.466 116.127 104.004]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 80.747 180.047 91.266]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a6e64f20328c2ee7f729c6d9915e467f1) >>
+>> endobj
+13777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.308 80.747 313.105 91.266]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 67.875 200.436 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a31d5b035df36a4c3d25c9d86fe90ca93) >>
+>> endobj
+13779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.229 67.875 322.027 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.342 67.875 450.123 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13793 0 obj <<
+/D [13791 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6386 0 obj <<
+/D [13791 0 R /XYZ 70.866 740.126 null]
+>> endobj
+8798 0 obj <<
+/D [13791 0 R /XYZ 70.866 421.637 null]
+>> endobj
+6390 0 obj <<
+/D [13791 0 R /XYZ 70.866 405.371 null]
+>> endobj
+13794 0 obj <<
+/D [13791 0 R /XYZ 70.866 270.657 null]
+>> endobj
+13795 0 obj <<
+/D [13791 0 R /XYZ 70.866 171.443 null]
+>> endobj
+13790 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F45 6502 0 R /F132 10901 0 R /F100 8905 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13829 0 obj <<
+/Length 2300
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[[sâÊ~÷¯PU^ ²ŒçÒs{´}ðƧ¼ö“SIùøÖ¡Š…ŠÁçÔþû|£ !BÚ­äÅ€4êžþ¦ûëîјG¯>^\/.oŠóƨhø5²œ9c"ë%3"N¢çÎÍß®>ûƒnOZ×±¬Û3RvnïîûÉ•_oþñ©ÿ0ì
+É;WñßáÝãC·ç¸ Œ×<}äqðtß»¿ö/ïï®/7¿ØM"g+qпíú7ýîËð׋þðâ?Óå‘ØLÏ9æ$EãoÏ/<šàÞ¯gÊ»èÏxä·ˆ´bš¾Ï£§‹¿_ðÔd¾k:éÓeF«ÈÁxfûïRêxÙcÑsOkÓY­GëÙ8™î]©;ËÙ$¦ùöšÎw?F½MWÓ·nOñdütß6aSNÄæ˜mX¿1lßaayKÆ£·IÑ’0¯ß¹æ³Å:1% ú~].Vëã&…%¼~_}š®s’/oEÓa:$˜–·H9WûÆ+ᘪ®ñ;¤`Ššƒ§$1^ð¬Ýk'tg6N‘ú²š®ë!•Èè5UPRÚó1 "FZ7È2Aº…õèþ#ò~ÕSÚ3ò2ê bJ»Ó#)øáQÇ£EIÜI&‹O¥k8ZQ‰$ I©ÙóéhU¯Ö1kUz`dT^ïÿzÀJj§ÚÖïHP‚Y%[ÀO)ø½”Åuû9A«2¥o€ibŽl 8FºU¶‡ak<sŽÒ°µí'ÀCqd,ì‡÷+‰Œ­%>ûIŠÌÿIâÚY]ÛúÝHDQÄe ø)©bâÎá÷Ó’gÆù8)æ…mBün+q8”þ IÓiéïxÊó<FoP¨ùž?c`ðçd5⟉kãË"¬”WÂ=H(º+¢ÇƒÑº«4(,*ðP¯9wÆ2I„»
+‰£¦„ýe’ ,ïƒ$˼såË›;Yuq!D%觸҈1¨¡„l€Á‘d€‘@†Q•x…ð>°^÷G!.>z°Û£µTÇ?Š&‚cqÃ$ª‚ú0 XGÁ±jJ(É#Â3îI\ÕΣ(æHœ–F‡¿;ä™À÷j.ÀS»\€Ÿ àKÌNv
+÷J¸ÀIT¤¶‚ ¬fFùÈxÁœ=‡²"úy[[B  „Ö:‘dìÊŽÍÝrÁˆÊ8‘ „\ %\Ó6@Œ$(Çè#ðBëJÄrlp*d„êdÊ©ŽSª.\ŒŒÂg‘D–±uŸ/¡ÅÑÇr¬¬I„â¶"PšJë€Ï]Œ¸‚õl4ßã¥õ‘¯cùEyߺáïû|”½þ^¦æ5 JÇÃS”¥ŒeÂìc
+Ãöîé ¤H£Š«Ê­
+-¸‘1läYE#<jêJ(+)aCHR¦<i$æf tx=,å2jØ–0&ŸQO $0’sê8‚BY¤]°€VqÉ{F¤¡p'4›u%”m¿(¤ÝDqw´ýØ0R›=H(nr ÀÅmXªæ`ÈÐËjS F9õ„üöÚèA2î‰Û÷’Öƒò­e­¥­‡ëî•·F‰ªÖC¡Ï…{(rØŸ¹:jêJ(o=bâ$®TÒ”ï<ª5…úÄjÃhªê<8s(cÏ,tBÊ
+°|ëq2b;­ŸÙzÔ Ø õ¨+ápë$q¯O ûË[­",µÕ>öÒ…”.T_,-Y~ëšØg£/!Aϧ«‚oå§`˜u([$&+§Žâçf[0™çû¸4§Ãx³Ié_“9Ýx–i§òãøß(=ŽÒû2¸ÌŸ‹é[ÙFßóÁgcß)ßØw>ÒF
+o¡Žr賫6z%BoYÝ£(<dÂæˆ*8$2aaÑÍÆeð¡!òbSê%¯ÕK ÓÌ£=-‡.ÑQhë^Kv
+ç e¾NBý¥:¶&c£nbžÂA@—mÒ ¦_C:™¾Mã¬ú¢êû~µ¢3\Æÿ½LønØR[v@
+endstream
+endobj
+13828 0 obj <<
+/Type /Page
+/Contents 13829 0 R
+/Resources 13827 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13681 0 R
+/Annots [ 13781 0 R 13782 0 R 13783 0 R 13784 0 R 13785 0 R 13786 0 R 13787 0 R 13788 0 R 13789 0 R 13809 0 R 13810 0 R 13811 0 R 13831 0 R 13812 0 R 13813 0 R 13814 0 R 13832 0 R 13815 0 R 13816 0 R 13817 0 R 13833 0 R 13818 0 R 13819 0 R 13820 0 R 13821 0 R 13834 0 R 13822 0 R 13823 0 R 13824 0 R 13825 0 R 13826 0 R ]
+>> endobj
+13781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 758.07 189.506 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a98a8091fa1e2704dc23089e1f32de27e) >>
+>> endobj
+13782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.299 758.07 311.097 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.413 758.07 439.193 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.157 743.712 199.898 754.308]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a2f68f337f82d54f75d83be134a43b379) >>
+>> endobj
+13785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.691 743.712 321.489 754.308]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.804 743.712 449.585 754.308]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.909 729.355 188.969 739.95]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_ae1d0673a7dc01ff3d516999e6615e937) >>
+>> endobj
+13788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.761 729.355 310.559 739.95]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.875 729.355 438.655 739.95]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.845 715.073 171.664 725.593]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a8d87bda3c51754039be9c893277454c8) >>
+>> endobj
+13810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.091 715.073 403.889 725.593]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 715.073 525.406 725.593]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 703.042 111.142 713.579]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.766 688.761 183.725 699.28]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a1abfeede1dad0b79d2bd7add9584b067) >>
+>> endobj
+13813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.395 688.761 415.193 699.28]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.978 688.761 525.406 699.28]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 676.729 122.108 687.325]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.426 662.372 197.655 672.967]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_ac7c47d45b468a1852d3ad86d2e17c261) >>
+>> endobj
+13816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.44 662.372 322.057 672.967]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60dd) >>
+>> endobj
+13817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 662.372 525.406 672.967]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 650.416 130.159 661.012]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.824 650.416 262.604 661.012]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.882 636.135 171.163 646.655]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a4306c23a8311dad5d1a87a733e40ba39) >>
+>> endobj
+13820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.936 636.135 403.734 646.655]
+/Subtype /Link
+/A << /S /GoTo /D (struct_o_r_s_l_busy_set) >>
+>> endobj
+13821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 636.135 525.406 646.655]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 624.104 111.142 634.641]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) >>
+>> endobj
+13822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.675 557.003 149.948 570.95]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_aed5486b9384c2421cead452b6006599e) >>
+>> endobj
+13823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.94 557.003 242.99 570.95]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_a7aa46265ae4f353d04448dddef56a6bc) >>
+>> endobj
+13824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.059 545.047 194.447 558.995]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a7a0dcf55762ac5de706a6c1794425383) >>
+>> endobj
+13825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.25 533.092 140.126 547.04]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8c_a973759a6c4a56db895b081b9249f46be) >>
+>> endobj
+13826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.118 533.092 226.793 547.04]
+/Subtype /Link
+/A << /S /GoTo /D (orsl-lite_8h_aa9292150b330a847ce870a70856b42f0) >>
+>> endobj
+13830 0 obj <<
+/D [13828 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13835 0 obj <<
+/D [13828 0 R /XYZ 70.866 586.091 null]
+>> endobj
+6394 0 obj <<
+/D [13828 0 R /XYZ 70.866 503.584 null]
+>> endobj
+13797 0 obj <<
+/D [13828 0 R /XYZ 70.866 484.625 null]
+>> endobj
+6398 0 obj <<
+/D [13828 0 R /XYZ 70.866 464.304 null]
+>> endobj
+13801 0 obj <<
+/D [13828 0 R /XYZ 70.866 451.663 null]
+>> endobj
+6402 0 obj <<
+/D [13828 0 R /XYZ 70.866 412.742 null]
+>> endobj
+13798 0 obj <<
+/D [13828 0 R /XYZ 70.866 400.101 null]
+>> endobj
+6406 0 obj <<
+/D [13828 0 R /XYZ 70.866 361.18 null]
+>> endobj
+13800 0 obj <<
+/D [13828 0 R /XYZ 70.866 348.54 null]
+>> endobj
+6410 0 obj <<
+/D [13828 0 R /XYZ 70.866 309.618 null]
+>> endobj
+13799 0 obj <<
+/D [13828 0 R /XYZ 70.866 296.978 null]
+>> endobj
+6414 0 obj <<
+/D [13828 0 R /XYZ 70.866 256.334 null]
+>> endobj
+6418 0 obj <<
+/D [13828 0 R /XYZ 70.866 226.866 null]
+>> endobj
+13836 0 obj <<
+/D [13828 0 R /XYZ 70.866 204.468 null]
+>> endobj
+6422 0 obj <<
+/D [13828 0 R /XYZ 70.866 171.342 null]
+>> endobj
+13808 0 obj <<
+/D [13828 0 R /XYZ 70.866 145.123 null]
+>> endobj
+6426 0 obj <<
+/D [13828 0 R /XYZ 70.866 95.167 null]
+>> endobj
+13806 0 obj <<
+/D [13828 0 R /XYZ 70.866 68.947 null]
+>> endobj
+13827 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F53 6507 0 R /F98 8891 0 R /F97 8866 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13848 0 obj <<
+/Length 1894
+/Filter /FlateDecode
+>>
+stream
+xÚíZKsÛ6¾ûWð(ÍD0v±xGNÝI“ÔQOIŠ¬¸š*òTRÒñ¿ïBD=@ñ!¦™¶¹˜” .€»ß~XPf÷™Ì^\<\\^;•9áQÙàSf¥pÆdÖ£0 î²w+´ÝžAì¼¾}û²÷òfп|yóìrûK\u{h]çúæe?ÞÝö¯û·ýWWüÓI ÎÕOOß ú·ñ¡][Ë›?}õÛ/ýWƒ. ì<]ýܼ~Õý0øù¢?¸øóx¸2ƒíðœ)}¾x÷AfwüìçL
+å]öתå猴šßO³·¿^ÈÝ)ëÔ” ¹™ób9\NF<8§:“Ù2Ü`gÔÙù}<êòðþ8(-¼÷+ChN±õÛ”Æùý ç]ÐûEÓ{©e·§îŒf‹e>PÕå5w•[3^( Ý­ÌÌžÄ&r?›)ƒ@™çÖ<+n­øV¹Mó÷Rªc,С•®‹Å®/,îl0Ñ¢`_Øs>^,ç“Q
+.…ÂçpMfw‹bh„›€,Äij/‹Ç·ãt.Nê$tĶƒæÐr‡²?$ÆB{_ ºíä>.ÆË$tŠI؇Ž[e=B-Œ¡¬ ¼ÖñyÀsÐu²3 ÁwŸˆ:v^O™%vs©À`WÛB"nÁ §£%à€ª€—sÛ@Zæ3<´ë„"ʽFÃÚ˜Ýq-¶nû.òׇ؎ôŽ1F„…
+®Òˆ6[
+[óØY­6gýtáø×GydëIR4Géä°wA–ö¨%EÊNpyœ¸J‚>4Åu ¨¢èœ@±ÿ£@ÙdÙ€¡Ç½9…ÿÀÆCmý‰›¥=xýùi™ÒAC‡.ºkrÏ5I2‘C‰ÔÑNHÂÌ }Z“jNÔ¶¶„Ö1œ ÍÊB]žXöT:ˆ ÄJƒÚ£)Q:œØŒ²g G¬Ý©è(XÐÔ»SbsJÚ;¬:¼l(v ó„æé4;u-‹`IÙo®u4Œ”ì” 4Œ’¶5 O‘ì2)Oêkd.¹e.̃F2WØ£•×1oA1oI‡e¼å…D—iÃ+ºo¡@Nøu-¤ˆ+d½²Dh*EŸÄ
+ÌÞ$@+§.éÊ¨Ë mÏÀŽ…õ®춉œ«‡]%æ‡IærÂ1§5b.­¥0ö âªi ˜·‚!²ðo!.Ù*q)‰GÄõ&èÍ ÿp-ÿB³3r+Á6ï¶1Î<_¦Ãùdù˜
+{(­¤¨#ÿ1Åy‡e»T+…gŸ$NNšd`´Ä©K׶*ÉǺV°dXVq-[¾OÕì€:Zyõ‰l ׇ€Vç€GŠ„4m€GÊ«›‚w’²lº*Ï
+endstream
+endobj
+13847 0 obj <<
+/Type /Page
+/Contents 13848 0 R
+/Resources 13846 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+>> endobj
+13849 0 obj <<
+/D [13847 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6430 0 obj <<
+/D [13847 0 R /XYZ 70.866 739.663 null]
+>> endobj
+13807 0 obj <<
+/D [13847 0 R /XYZ 70.866 714.797 null]
+>> endobj
+6434 0 obj <<
+/D [13847 0 R /XYZ 70.866 677.331 null]
+>> endobj
+13842 0 obj <<
+/D [13847 0 R /XYZ 70.866 652.407 null]
+>> endobj
+6438 0 obj <<
+/D [13847 0 R /XYZ 70.866 602.927 null]
+>> endobj
+13839 0 obj <<
+/D [13847 0 R /XYZ 70.866 592.278 null]
+>> endobj
+6442 0 obj <<
+/D [13847 0 R /XYZ 70.866 541.028 null]
+>> endobj
+13841 0 obj <<
+/D [13847 0 R /XYZ 70.866 530.379 null]
+>> endobj
+6446 0 obj <<
+/D [13847 0 R /XYZ 70.866 479.129 null]
+>> endobj
+13840 0 obj <<
+/D [13847 0 R /XYZ 70.866 468.48 null]
+>> endobj
+6450 0 obj <<
+/D [13847 0 R /XYZ 70.866 417.23 null]
+>> endobj
+13838 0 obj <<
+/D [13847 0 R /XYZ 70.866 406.581 null]
+>> endobj
+6454 0 obj <<
+/D [13847 0 R /XYZ 70.866 356.261 null]
+>> endobj
+13837 0 obj <<
+/D [13847 0 R /XYZ 70.866 330.465 null]
+>> endobj
+6458 0 obj <<
+/D [13847 0 R /XYZ 70.866 281.915 null]
+>> endobj
+13802 0 obj <<
+/D [13847 0 R /XYZ 70.866 256.119 null]
+>> endobj
+6462 0 obj <<
+/D [13847 0 R /XYZ 70.866 218.653 null]
+>> endobj
+13805 0 obj <<
+/D [13847 0 R /XYZ 70.866 193.729 null]
+>> endobj
+6466 0 obj <<
+/D [13847 0 R /XYZ 70.866 156.204 null]
+>> endobj
+13803 0 obj <<
+/D [13847 0 R /XYZ 70.866 131.338 null]
+>> endobj
+6470 0 obj <<
+/D [13847 0 R /XYZ 70.866 93.872 null]
+>> endobj
+13804 0 obj <<
+/D [13847 0 R /XYZ 70.866 68.947 null]
+>> endobj
+13846 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F98 8891 0 R /F14 6622 0 R /F97 8866 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13853 0 obj <<
+/Length 1098
+/Filter /FlateDecode
+>>
+stream
+xÚÅXMsâF½ó+tD•0îžï9²XÞxËk'XI¥Ê냄CãÚŸFÂ+ŒYTÉ„˜é÷º§ûuK=D}ì}H{gVD–9­E”Î"ÌjÇ™Æ(FwýÑ/Ã_Ód¸±}Ãâæ¼qy•„;ç7£ß?'×iŒúÃÍgzys, ¤õ
+ª-7ãÛ«ÁÕešœ]]~8Ûþb£`çÅâ8¹HÆÉõ(‰ïÓO½$íýÝC¢ néYË,—Ñä±wwÑ”þûÎFÏ›•‘T‚))èzÝö~ëÁk—U›ËÔ>¯ÖÙz> tæÅ:\ø›ù÷œP ÓNl pý'Š©Ûúž
+É„M&ÏÙ|Ý‚©8ºH¥¨&â,¦#\–- ÚtJß-óEž­òè/   "÷—虜]892AÈdBf¥"ŒÍæ»p\÷a!ÝÁ -îè‚nZ6œç_
+(_M¥´HÖSé¬Å -0²^Àk1B³žÒ¼^ó°Çˆ¨’IÃ:êHiµéG§Œf$*,iUÕù4[gû†BGC«á] ÓáK͛ȭC!'1w\t€I1£`ÑÄ Çç·÷-#¡ß÷8bilGÞTËÓ0º¹/|ú¶æ‘ô0í‚!mW† Ó*¾Š›껇+š‡M$'“àT±ÔŽëG+¯s4bž¯}‰à¡ì¬’ :ˆƒàHm^"rŒp;KyÞ5 À,짶‘ÐíÛ¶—Eþ]?æUQPõZØIËLI]utnú_áXð
+endstream
+endobj
+13852 0 obj <<
+/Type /Page
+/Contents 13853 0 R
+/Resources 13851 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+>> endobj
+13854 0 obj <<
+/D [13852 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6474 0 obj <<
+/D [13852 0 R /XYZ 70.866 752.14 null]
+>> endobj
+6478 0 obj <<
+/D [13852 0 R /XYZ 70.866 712.958 null]
+>> endobj
+13843 0 obj <<
+/D [13852 0 R /XYZ 70.866 693.696 null]
+>> endobj
+6482 0 obj <<
+/D [13852 0 R /XYZ 70.866 673.148 null]
+>> endobj
+13844 0 obj <<
+/D [13852 0 R /XYZ 70.866 649.076 null]
+>> endobj
+6486 0 obj <<
+/D [13852 0 R /XYZ 70.866 614.82 null]
+>> endobj
+13845 0 obj <<
+/D [13852 0 R /XYZ 70.866 590.936 null]
+>> endobj
+6490 0 obj <<
+/D [13852 0 R /XYZ 70.866 556.135 null]
+>> endobj
+13851 0 obj <<
+/Font << /F83 6620 0 R /F53 6507 0 R /F97 8866 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13923 0 obj <<
+/Length 2870
+/Filter /FlateDecode
+>>
+stream
+xÚÅ]Én#ɽë+ê(fvîËmw<€aØ|é™›¤$z¸È$Õöü½#k›L*ŪR„¤KK€Šñ2£Þ{¹›W÷¯~¼âg?ÿx{õé‹Q•”Lq/«Û»Êqæ­…†Iå«Ûeõõú/»åêF˜ëÿÝürûSÿáO_„® VÚøA^Í g\Ùæ3?sÅã㟾hSyxʪ:<sZÀ³õ3š–Ÿw7’_ÿ×ã×óÃ1~¤’ ¯«Yüétóì_׋üÑ~(|üm y%ªClfüå?^U_gÒùk).õ`&àwirÜ1ýø¼»_ïVÏ›®Ò?5ͽIÓž¥m|‚l&äRoðßî~æ\íçË?¯Ž‹ÃÍ h·~<í_n÷Kh¾UoÒüÛ‡Ãj¾|±±ÍŸšæõ›P¡}­ÍÍÓË|-Híü³=þMz°½üúé´ºQ¼õ¢Ï·Wÿ¹-¾àŠI.*ÃSÂU‹íÕ×_xµ„?þTq¦‚¯þ[?º­$³~ÙTÿ¼ú{オ
+x­™7>‡? ù”¼ÈE§XrºÐGrQ{Íc çDÆx¯âuLp’¹`)˜
+ho™P6‡>wŒ`êᱬõ׻ƹY˜Ì)E!7ˆÄ•þ ×0‚qKÑ 7‰ÞÂ3”‡Õ%ð d½ïhàÞ3RäœÉgÐÊÁ ©( ŒVåÐû»ÒHKç) ÚúòwËh¶ñf&À2Ö‘÷/týz (‘”š:Ü›KÂ?kQ\2e E7x\‹¿…t%¬=D î¥õŠ|¬tñÀt3äÃêq¸™iž,¶µò8w…!šyM1é‹‘¬6(29`ž€G»ñ3>4nÏ€ø°:>mÞäåsëg%Aò z|òÐÀ}öRäãÃü°*Á* )t°°ÊŒGUì|³¾ßq­eJ
+\ç"ǽ;¬š õ™µŠó$;ŽÓ¼ÉuËøvûKòë}é¥zàž£ÀÖœ9ïrì±eÎÇ[ ÝNvZ$ó\¤0F²\MH!v›Â {üXo W 7*=Þ«b Ým¢Œð*<pçUòWÀ¶^•ÁznëUîv¾‰g6oèV¤fà} wNZ©A¤úÃx©á±;©¥Ø4n5Þð㩘àŽ"…Z±Àý”â±»¦Ø´n¥ôN¸rjüÌ
+Ü»UŠ<èVxØέRØßg8:îîä~\<r3žbŠ#©nÿbãñØãSìѦaiL#À‚FPìhB )¦LpðÈmþRdRÃðq·7àýâðñnFíÌ"²
+<fë f:»Èœ=½8ÿYÉèOFUÆÇÍ9;H~U‹%TÖ
+Ä À”À2rÌ—¨-`Ù@ÒѸÎWgÝßÝK×k”µ0["aá<¿»’ÂdÒxOé昛ÕîþôÐ^…Óõò:“çb5ß•òs Ö"AV¨ÃN¥ã²©‰$C{ÔõtZoFŒ|!œËÀ¬Ëe9Ðôåø¾éåøºƒ3.†Í`ê-õçf€¿çÞ™AvÏý¢`¶fa.WÇEù]Fހ»ÔRŸ>m}
+ºÂ®ïų
+;¥L­_{®|\§”¬î¢R0[¥ªî^V
+l«” öX܉‹
+Hk™à!‡Ü
+VŠs´If»Å4
+XöVP(ºp®WhZ8wY¡xÌN¡)æ Bñ°BSØ‹
+ÅCv
+M!×Hy¢Kýz^§¥~ï=€â«ãún¤Õq„òñÛ|0êœà‚8!±bŒ8Ñ6SÈAm¢Q;i¦¨¥‰Fì”™">í(FOt]bÏë×Ô%RžèêÀ®iu 8'Ì='ºâ®gRq·ü^È'ŒÃ ‚Ç“¢¾ ™â•¯ˆ·'xÄöà!ALoíÅ/çg_€]Ì€’̘º¨“#7YJZtÿ3” ÓBÈbc}„_ÏLBì&¤äϾ$èÿsó%Ä
+endstream
+endobj
+13922 0 obj <<
+/Type /Page
+/Contents 13923 0 R
+/Resources 13921 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+/Annots [ 13855 0 R 13856 0 R 13857 0 R 13858 0 R 13859 0 R 13860 0 R 13861 0 R 13862 0 R 13863 0 R 13864 0 R 13865 0 R 13866 0 R 13867 0 R 13868 0 R 13869 0 R 13870 0 R 13871 0 R 13872 0 R 13873 0 R 13874 0 R 13875 0 R 13876 0 R 13877 0 R 13878 0 R 13879 0 R 13880 0 R 13881 0 R 13882 0 R 13883 0 R 13884 0 R 13885 0 R 13886 0 R 13887 0 R 13888 0 R 13889 0 R 13890 0 R 13891 0 R 13892 0 R 13893 0 R 13894 0 R 13895 0 R 13896 0 R 13897 0 R 13898 0 R 13899 0 R 13900 0 R 13901 0 R 13902 0 R 13903 0 R 13904 0 R 13905 0 R 13906 0 R 13907 0 R 13908 0 R 13909 0 R 13910 0 R 13911 0 R 13912 0 R 13913 0 R 13914 0 R 13915 0 R 13916 0 R 13917 0 R 13918 0 R 13919 0 R ]
+>> endobj
+13855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.808 640.714 206.77 650.633]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+13856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 615.69 134.655 626.155]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+13857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 592.019 149.279 601.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+13858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 567.12 176.635 577.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+13859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.185 543.325 135.148 553.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+13860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.924 518.977 189.887 528.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+13861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.339 494.63 163.302 504.419]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+13862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.557 470.283 136.52 479.91]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+13863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 445.258 175.254 455.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+13864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 421.588 146.123 431.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 408.863 175.765 419.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 396.564 181.745 407.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+13867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 372.893 146.123 382.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 360.168 175.765 370.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 347.869 181.745 358.406]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+13870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 324.199 146.123 334.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 311.474 175.765 321.885]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 299.174 181.745 309.712]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+13873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 275.504 146.123 285.364]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 262.779 175.765 273.191]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 238.983 146.123 248.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 214.636 146.123 224.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 201.861 195.616 212.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 189.611 201.597 200.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 165.941 146.123 175.801]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 153.167 195.616 163.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 140.917 201.597 151.454]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 117.246 146.123 127.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 104.472 195.616 114.933]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+13884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 92.222 201.597 102.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 68.552 146.123 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+13886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 652.287 427.369 662.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+13887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 640.037 433.35 650.574]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 616.366 377.876 626.227]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+13889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 603.641 407.518 614.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.893 592.019 377.855 601.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+13891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.868 579.845 392.831 589.634]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+13892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.155 567.672 376.118 577.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+13893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.71 555.498 397.673 565.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+13894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.456 543.325 360.419 553.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+13895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 518.426 389.568 528.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+13896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 506.804 385.085 516.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+13897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 482.456 385.085 492.245]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+13898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 458.109 385.085 467.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+13899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 433.161 427.369 443.622]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+13900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 420.911 433.35 431.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 396.64 427.369 407.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+13902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 384.39 433.35 394.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 360.168 407.518 370.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 348.546 398.05 358.406]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 323.647 407.518 334.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 312.025 398.05 321.885]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 287.126 407.518 297.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 275.504 398.05 285.364]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 250.605 407.518 261.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 238.983 398.05 248.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 214.084 407.518 224.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 202.462 398.05 212.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 177.563 407.518 187.975]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 165.941 398.05 175.801]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 141.042 407.518 151.454]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+13916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 129.42 398.05 139.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 104.521 407.518 114.933]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 92.899 398.05 102.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.634 68 384.582 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+13924 0 obj <<
+/D [13922 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6494 0 obj <<
+/D [13922 0 R /XYZ 70.866 665.164 null]
+>> endobj
+13921 0 obj <<
+/Font << /F53 6507 0 R /F14 6622 0 R /F45 6502 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13996 0 obj <<
+/Length 3980
+/Filter /FlateDecode
+>>
+stream
+xÚÅKs#·…÷ú\JU‚÷cé$¶Ë.Wªâh‘*Ç ŽÄÑ°Ì¡d‘²Ëùõ¹h€êf}1ãÕØ3ÔýØÀ9·~ÑÕ㊮¾½úÛÝÕ_¿±be‰ÓZ¬îÞ¯ %Vë•qœh¶º{XýtýÝ?ÿñõn~¾û~%¹&L
+øÑò®¾¾»úõŠÁßÓK%¬%–ËÕýÇ«Ÿ~¦«ø·ïW”gW¿Ÿü¸’J5ÔÛ­þ}õ¯+š-©²¯å(1JkFhü^¿½e3ê?h‡r}‰ Ççø-QA¤µ%ñõ¸Ý‘°'ÞËc
+>hûô*¨¤¡Ò'QÝ??ÏÊŠ²¾·v¦ÁþOfz|¨¤˜íÜk5œ‡4ÈbS´˜4…/$/I"˜ ¦(€Ó¦èÀLQàîŸöÇíãëÓëa‘+´ÑppTå+‰/ì ­%|UÖãÛC%æxoO(N¸E¬?Z L{
+Qæg»?nv#*…Á\ð¥Gdª‰s²dÞow¿ŒL$£D× çm´+¡ïo½~zárAe=¸°VWŽ•\ÁG°¨éÐìÙ>½ÿ/¥âiN~‹.P|ä|,áR¯´¤„Ôº‹S8ïC%ø’΄u×Ǧ®ÿ¸á0cÃb Ïw`CcMÉþðt8Ö´"UafßT+„™ L›™Øú©*3£™ÑÌ9sÆÌhf2s73žÍœs/˜ŒfΗœª 8µÇ´Âð+ô‚üûË £×ëççÍË©‘7\ˆ(NÈ5„)Øê*eZ žIÎ>®_7u­ÄηXuXi­¤±Àt+BZÚªV‚fÆV’3gZ š™ZIo%xnl%9WËÉV‚ÆV’û¬ à8`î:ØÙWRÂ5ع;ع`w\(h’Z,÷rãÏOZÙב‚ÕX N.—ŒFF#ÌY#ã±ÁÇvÚÇx^°qÁ«XàÁaAP€//:|KÅY¢Ojoè xvì 9»ë‚@)E$Ã4‘ÆÓ]
+q¶•»í»‹“+ˆ1àÙŒiÐÜ|óò2êl¡ˆ…Ò¨ emI=¼>?öVÒëc8ibÎ/JÍ ¬©9ƒÃ‘bh·Õƒ)é©£*E¯É}ã5ªÕ-tÆXéßʃŒ0§zŒ
+I%dŽ&G™çä£ÁQç9x÷tïÁ¿àÄ®ìð,T±C%![îqt`G±çìžb—þTŽ¸ÇÑZ`ZìPˆÇ'?ªÄŽ&G±çä$öp{]ayóõp)$Tëá¾,MZD‡gGÑå잢ã–ZˆåskiÑA!Ê*æ•JXTé`F ‘Z—äõýqûÛ W×c-6D=Ž˜ Ûè’û»×Óz÷½ô³ Á2:x£ƒÖ©_87^°•ózó_e±ÖZ~xRgZ¥¬Zg8hÔXA½ÚžFÏáÐ7üvÉ”Œ(wv¤ÇÓÕÄûMØ”ÑáŸZ&¬¿
+çßý;•¶gnºk>Ü@,÷ ƒèà#U’ã󒣌`n5þü´à¨ï® ,7é-Wé MŽrËÉ5rCƒ£Úrðá¸..x¢ûlŽMFw­&…ç &«…‡Gådàòývlýâàâ6l €»Û¾;-­3Ù¯na§(4/5ðõf33õÜ•w ió:û.®Ç_IÆÛv×èÖ
+sÏ®µÀ´t¡°õ'i<8I7'¿ݽ#è_äR=˜Ü-K䧅Ùðšžûìí
+v3åm??=ãP‡™ú ÇbÓ|gÜËÓ&†Ù΀—N¾Ÿ°°pŽõW(snZ‡)Ø@Cù¬ë0ø î…ãÖ“?ÀLÖïüñਲ‚|Qf˜'È
+¡u
+˜@Ó\”ð€(|ò‘ ŽP£Êä£ C +I¢¸ë
+,´3>#j±: $H±ù$ÅÜs)Ø’ñV‰ø˜¨Ä"f£B‰ÈA‰Sá"SJ,¿¤bx­ÿ}$Õë­åH¤­¹•„žG ÕÈ™‘ä_õGýçä®h Î1
+H<“ ©á,RP‹³Èn³>à.èâ£9¢äŠhŽÉu@Ÿ$W¿¼kñ ióŽª!Ä£Ãæä®®mŒÿq.:@$¹7©q/žœ“/O¬òGÍz°•?jV²ß?G2Lè.CmáJMeµ¼%ûç¢a#Ó MÒH^’_Â:;$¡+Â\û>Ÿq’ügœTùþÎÉ “Âò) l2{,¬}%Þr»: `Nî$ŸZäâð™Ô"Ñy(©EVÆϤ‰'Ç™“ëZ$ž[dqÔáºÐy‹„JÓjý}lSB·éÖŠ%ĉö&Åìœ{\‹õ•hÃsQÈÁbxñ*nÜaK³v’Á° 0É_•i;É_hp´W®³ÝU¤Þ|X¿lÆØšaç§ZG µ%uü] ,Ó#XHRÿPj}°ä§gOñ`®‰=*=þÝ=!lóI›Ã8RÞcWÇ_wß°1ì€>u”‚Üóêöò¥ØQð±B±¥Ôæ(Å–ÒzJA®ê)Ø¡©칦ÒºJ½äp˜E{„VIï[w6Í¥Åá»iÅÚ®%±¸gF¢Ã¡’¦ 7 : ƒÃsrŸ ˆŽÌJ˜GfU 0'÷]u-ÏëJMa•šdebWj’xrl’99›Úí›OÇÍww^÷¿ü}½Û¡.ãrn‰4=îøJÜ4Ü9è€RÌÉ]ÏÖKCÄ’±)WI†u1bI…hnaÆ}^¿Æ6¸g;$¦ ßÛM™¶Ý½zaü;dˆ cˆÒ¶ b|õþ1쫬)eó¾šÃò™ë÷G|%ªÃbôõ¸ÝÕÈÛ"ã„âaàã³âañYÃaÌÞ'ptÞ£ÌRØücî´V˜v)3îÓ;ù6í@>-È3Fí@ N-¨‡íÿ|Ó[6Üeï
+endstream
+endobj
+13995 0 obj <<
+/Type /Page
+/Contents 13996 0 R
+/Resources 13994 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+/Annots [ 13920 0 R 13925 0 R 13926 0 R 13927 0 R 13928 0 R 13929 0 R 13930 0 R 13931 0 R 13932 0 R 13933 0 R 13934 0 R 13935 0 R 13936 0 R 13937 0 R 13938 0 R 13939 0 R 13940 0 R 13941 0 R 13942 0 R 13943 0 R 13944 0 R 13945 0 R 13946 0 R 13947 0 R 13948 0 R 13949 0 R 13950 0 R 13951 0 R 13952 0 R 13953 0 R 13954 0 R 13955 0 R 13956 0 R 13957 0 R 13958 0 R 13959 0 R 13960 0 R 13961 0 R 13962 0 R 13963 0 R 13964 0 R 13965 0 R 13966 0 R 13967 0 R 13968 0 R 13969 0 R 13970 0 R 13971 0 R 13972 0 R 13973 0 R 13974 0 R 13975 0 R 13976 0 R 13977 0 R 13978 0 R 13979 0 R 13980 0 R 13981 0 R 13982 0 R 13983 0 R 13984 0 R 13985 0 R 13986 0 R 13987 0 R 13988 0 R 13989 0 R 13990 0 R 13991 0 R 13992 0 R ]
+>> endobj
+13920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 758.747 143.361 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+13925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 734.529 143.361 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+13926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.881 709.761 152.829 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+13927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 698.203 143.361 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+13928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.881 673.435 152.829 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+13929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 661.877 143.361 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+13930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 637.059 195.616 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+13931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 612.766 201.597 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 588.624 195.616 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+13933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 564.331 201.597 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.346 540.79 176.294 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+13935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 528.682 204.26 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+13936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 504.464 204.26 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+13937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 479.646 195.616 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+13938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 455.429 195.616 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+13939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 431.212 195.616 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+13940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 407.044 175.765 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+13941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 382.826 175.765 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.527 359.16 168.476 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+13943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 334.266 165.059 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+13944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.136 310.174 158.084 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+13945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 285.831 165.059 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+13946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 261.614 134.655 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+13947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 249.631 175.765 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 225.288 165.059 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+13949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.136 201.196 158.084 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+13950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 176.853 165.059 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+13951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 152.761 177.944 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+13952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.527 141.204 168.476 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+13953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 116.435 175.765 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 104.878 166.297 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 79.984 134.655 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+13956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 68 175.765 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 746.087 407.518 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+13958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 734.529 398.05 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+13959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 709.635 433.35 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 697.526 423.881 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+13961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 673.385 427.369 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.953 661.277 417.901 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 637.059 427.369 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 612.842 427.369 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 588.624 427.369 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 564.331 433.35 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 552.222 423.881 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+13968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 528.005 433.35 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 515.896 423.881 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+13970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 491.755 427.369 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 467.538 427.369 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 443.32 427.369 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.953 431.212 417.901 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 419.027 433.35 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 406.918 423.881 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+13976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 382.701 433.35 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 370.592 423.881 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+13978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 346.451 427.369 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+13979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 334.266 433.35 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+13980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 310.049 433.35 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 285.907 427.369 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 261.69 427.369 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.402 249.505 433.35 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+13984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 225.364 427.369 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+13985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.082 201.196 402.031 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+13986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 189.639 392.562 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+13987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.082 164.87 402.031 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+13988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 153.313 392.562 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+13989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 128.544 407.518 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+13990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 116.987 398.05 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+13991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 92.218 409.697 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+13992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.28 80.661 400.229 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.179) >>
+>> endobj
+13997 0 obj <<
+/D [13995 0 R /XYZ 70.866 789.024 null]
+>> endobj
+13994 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14072 0 obj <<
+/Length 2750
+/Filter /FlateDecode
+>>
+stream
+xÚ½\ÛrÛÈ}×WàQªŠ&ÓÓsÕ›lk·²e¯7Ž*I•³4 iY+‘Z^l+_Ÿ\¸
+SØCHJÉ.{sÉ w! 5W6"—&ôç)çÆçR4ñ!—šÌûmÞÁ)“^úñœ¾6–6ä_º}:§TÌ‚
+9 !íïî.Ÿç›:{ãTìMV;'™D턤¥œ¸íé4I«2km3<U“ö=1˜«Ê’=ˆ/ÏÕ©
+ X±Q÷°†ÙÚAO¶"ÂàKXÞ
+ñ&/£›]ZÍ ÀôÔÒŽ9“$µÉRÌ
+Ñ™\ÊÒÚ'"’k"@r)ªØÄ„äŠ&>$W“ùtrÅsÖÉÕäJ®xÖ:¹š¬£“+ž¾N®&ý·ÍÅ%•sË]—bR3N¥w‚óõ‚~…CÉ
+f¤`¦åC„Ìùª* ETt Ž>1JnÃu²¤T8x¹Ü¦ôÊÍq7^nñĵÜæA¹%à­äðŽ[æJnóvGæ^J~¾PÝøen„î´`hct7 _wv‚ºk2Wº«†  ™6Ó»r©8“IÎñ=’楣A›æœU¢eÒ@
+{IxÑhÐòa9 Íè9Oè—3!Ô.~|:v®S´Š¸ŒÎ0g]ÈHÅu_—óΆˆ*4“€ÁêxuÔ˜<V¥š/ïÝôôÉT’ì! ¬oÁü¿Gs’ÓSò—<’¬ï~$Í¡ãLGÜå™ø÷½™âqdx‡¤kÕçÌÖ¢I#-e:d-’å{ÑKWë>¡Øé!Gc‰=EÈ=’t:¥rÇ/÷¨©Oq"ì”L­[*ŒŒîD€~å¼ÑQ+7šõ Ý&íÃòË6N³þ^ŒHqŒé‘4&Á ©Øšˆ£ó©
+Ãõüýr“÷>ÿ‡gÇõ¿6¾˜==å›Z¥N±V¨³EGØ-u*ß/ˆ˜cë…Çã °õôÏ[ñµ+÷º‘€HþJ‰·1ø"(Êֹʇåü¦|¶^rð w!λàKnˆ÷®Ç‘`+L©*4[öݬHøù€QÂŒê)£|‰Ëå+\^ÍgV¹Ë·.É(f)Ðñ¬À-UÔ"äí—ª@FÕb
+^êñ¹”!o UTL(êÕÕÛÙfþßv(Ô±úõc[§ãCM8Ê™úvÁ]÷®Ì$`êø}bœáYX?¹ówí­L1ÉóHZŠèW?ªrl0Ék“p´m³8GÏWó¼oYºöÙïÖïf»Ùby÷Ž\-K¿ì6#@Žf·eo‘qÑŽ²¾;¬Æ$ÛåýjörÝnÿ¤­ˆÏfš6‹Ãû8VúF
+?*‘ >œmʺÙ/7ÏU/ÄŠ ®Ý–
GùÕo.G~µiýÚ&kûh¯ó—ªU±VÆùUØɨj‘_,·OÕÎÉ Úð‘^¶$óW–ßI7)ãü´-ÞKHb= ÈóÕnÛë©WS^•ÊŸ”'1“D}›hywlàt±›ö!û\ûü[”õ‰Áò®‹Ò¿‹Œ)( Á¹eǺEº’¯%Ÿ‘IâGUQwxîõ£*SYñ´ë¸˜‚¾²˜‚ !`ȹ õé0Â…~ýX—þÞ³Õå̧Ýzh6 ¤¨¤Ñ)â}ì‘T]ôqÎÊÇgíã©ò’KAª¨ë.$ Û:Ôäø–Èc† ±T¶ø‚‹±$$¬ßŠi_mzÍ}¥^¨Syþ¯¿X’wÉ™·ýÜ-ªÒ pQ=ˆ¡i * ÄMB«Ê;¶o8¡xê–‹Ó ›‚Zy?wõg¦8XÀ‹¨Ä5hàïiqâ¯yç³My;S04­-üu Ýt­Gà!3´ŠÙ¸^
+U¼å‘dµ¶ûÄÉÕðj÷ÊÛýnÝe$/.¾úûõ±Rr—+‘Ò?aÎŒ‚q}ðÕUeûÍ÷]¡!ûÕˆ&c™P{Éï™Ûwiß2NÝ’ñ§QÉ.É_ÂÖ_wx|ò5íT«û6U‰]¼*:å‹‹§U*#§hêŒèi…«Š~*‡ë§üèvèÿ
+endstream
+endobj
+14071 0 obj <<
+/Type /Page
+/Contents 14072 0 R
+/Resources 14070 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+/Annots [ 13993 0 R 13998 0 R 13999 0 R 14000 0 R 14001 0 R 14002 0 R 14003 0 R 14004 0 R 14005 0 R 14006 0 R 14007 0 R 14008 0 R 14009 0 R 14010 0 R 14011 0 R 14012 0 R 14013 0 R 14014 0 R 14015 0 R 14016 0 R 14017 0 R 14018 0 R 14019 0 R 14020 0 R 14021 0 R 14022 0 R 14023 0 R 14024 0 R 14025 0 R 14026 0 R 14027 0 R 14028 0 R 14029 0 R 14030 0 R 14031 0 R 14032 0 R 14033 0 R 14034 0 R 14035 0 R 14036 0 R 14037 0 R 14038 0 R 14039 0 R 14040 0 R 14041 0 R 14042 0 R 14043 0 R 14044 0 R 14045 0 R 14046 0 R 14047 0 R 14048 0 R 14049 0 R 14050 0 R 14051 0 R 14052 0 R 14053 0 R 14054 0 R 14055 0 R 14056 0 R 14057 0 R 14058 0 R 14059 0 R 14060 0 R 14061 0 R 14062 0 R 14063 0 R 14064 0 R 14065 0 R 14066 0 R 14067 0 R 14068 0 R ]
+>> endobj
+13993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.861 758.747 160.809 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+13998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 734.159 181.745 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+13999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.329 722.204 172.277 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+14000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.455 698.294 204.403 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+14001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 674.509 175.765 684.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+14002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 663.105 166.297 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+14003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 638.644 177.944 649.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.527 627.24 168.476 637.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.179) >>
+>> endobj
+14005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 602.778 175.765 613.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 591.374 166.297 601.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+14007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 566.913 175.765 577.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 543.002 175.765 553.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 518.966 165.059 529.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+14010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.136 495.182 158.084 505.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+14011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 471.146 165.059 481.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+14012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 447.361 177.944 457.773]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+14013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.527 435.957 168.476 445.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+14014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 411.495 175.765 421.907]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 400.092 166.297 409.952]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+14016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 375.63 175.765 386.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 364.226 166.297 374.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+14018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 339.764 175.765 350.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 315.854 175.765 326.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 291.944 175.765 302.356]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 259.158 165.059 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+14022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.136 247.328 158.084 257.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+14023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 223.368 157.788 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 200.059 149.279 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 175.471 134.655 185.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.808 152.238 206.77 162.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+14027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 127.651 181.745 138.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+14028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 104.417 143.854 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 92.462 137.139 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 67.875 134.655 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.417 746.638 372.38 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.654 734.529 373.617 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+14033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.448 709.711 405.411 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+14034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.207 697.603 399.17 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 673.986 372.245 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+14036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 649.769 377.23 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+14037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 625.551 372.245 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+14038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 601.334 368.892 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 589.225 372.245 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+14040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 565.008 377.23 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+14041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 540.79 372.245 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+14042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 516.573 377.23 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+14043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 491.804 408.388 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 468.138 368.892 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 443.921 377.23 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+14046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 419.704 381.032 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 395.486 381.032 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [339.729 383.378 351.692 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.972 371.269 357.935 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.978 359.16 352.941 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.883 347.052 355.846 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.985 334.943 350.948 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.967 322.834 358.93 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.466 310.725 354.429 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 298.617 375.114 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.456 285.831 360.419 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.489 274.399 353.452 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.455 262.291 362.418 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.46 250.182 359.423 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.945 238.073 376.907 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 213.856 375.114 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 189.639 375.114 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 165.421 375.114 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 141.204 375.114 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 116.987 377.23 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+14066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.571 92.218 447.534 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+14067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.719 80.661 355.682 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.321 68.552 394.284 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14073 0 obj <<
+/D [14071 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14070 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14137 0 obj <<
+/Length 3006
+/Filter /FlateDecode
+>>
+stream
+xÚÍœKsÛ8Çïþ<ZUk Þ©½ä]™Jffcg•#ÑÕZ’—’3›ýôÛM‚2IÓ%tX{M%Lÿ€Æ¿n
+ ¿Úë$·j°P[’¾Qáæn½;Ú
+H¿ÚÌ„9ÿ:“æ¼è‡ÄX×™õRú!a*0µ%¥Ôa
+Ϥ¶™µ <‘Ö[΂ª-`*p±þ²\èmöûÎ
+-ú½åŒ»ìÌ:ãùùÇË<ìC0ÌCÓ­Ö,•Ð…à™áµ!'t¼|u5ä5 |K€0^ÂÙ.óÕû_¯ª~Bï=S¾?œåöæâf¹éØ ûQ1 ‘§=+aàžÅØâ£<›ŒÜ{¶Í|ýñÝ»ÿ#ÇšàŽ5Á2Æ86Ù8¶ÃüõÙ‡«·Ï†|k¿£oómñè¤÷¬,_ÛùAÐÎç§8yY-†–.ð¦GÂ%.†ÁÕ–`²®™‹óýŽi&ú‚ÿ¥YÐSå Òóå-¤?þø¡ÈàÁW7ŪXï¶`ž?åŨ€Ï,ºñ¯3)Nùn¹=´Ê7fÈ–»í!ÖyøQ¬™„%ø:.ìÁ®˜‡,QÃÂh@ Án™qµ!å] ¿Ý•uÐa>ÞËßçåö÷üæ¦8”Lk7füFv2Fë(º †´‹ðíò¿8qß»¯G)΂¾‚!c›¾îrˆEÍÏwõöù¾§Ï‹urŸ I`¾YÏuPgÊÓI3$Ž®¶©ôxÿšVgëåÌð‹7½N+ Ém¯6¼ïô‹Í-þÏ·Gç‹¿¼=„”G¹ùEYä»bjÞë™6çåfõ* Ú«ßiò&Àd»+7ûùM±»\®ÿª.‹ív:.®bºö±E÷@ìqMxŸßN×_̦¤Ý‘<Q ka‚qSZ2Ü}·©êAסʿÜ%Nê(g\¯Ò”tîo1 †ºh‰™ÛoàΫ™€¥þÛíã.=¶réÂû¿™Û^úÌ~¿i8¨VųºÚ–)Ù”wŸ:ÛÌŸ‡¶‚”4Õæv:ê?#tóÔRxÒ 5Ô[Üt‘«b5€´`
+·ò“‘˜…ÛEÖµë/1O…Vù*˜%P¥WÜ,??±§  #Šl#“Úy¸AKðg¦Ù+ËÍÐ8@Ê%¤  zÈŒE:ß@½:.xT­Ø°jC=è É\+‚hQ–y­;ÅÀPĨÊ]XŒ=-»Ü|1$¨Š”2L­—¦ËŒ[ûÙ…Ä]|q’t¥fAi
+é‚%§Ì8é¦S£tÛP2醃҅Ç<ÉD†ª£¡qÒMÇ6Òmsçí’êB1|7†GJ‰sæ’¶ÏöRK¦Ù>;$¥tj”R:”¬÷Ì‚£“¥„†tÃ;(%l”R‡;¿¯•;B:jN²Î2Ð’%#f-£rº¥ÔZ M"C"ȱ"JÇ6"jsïEÔ×dÁQ`bÁ».öºÜ ¥ N2mH Î0¡{ИöÖÇÅ\./(²O´ÄýÈ€I§Æ€iC'œw5TtŽ û´P76û$À6!Óæ ™tl2mìæn7T´YxÒS0m`Öõ™CÞu0¦AQ =<î{£z¤ŽyN
+R(³yÒáÃ>H%4Ž˳ ¨1HÛÐ ×5aª­¤ô Cθ±AšŽm‚´Í]ôvÕ2$£¢)Rm´dõ¸T›€ÕÔ†N7å›  X éjBCFMµ °QMîàuI¥<<©(˜Y=fÞ:›¹¾šæO¨ƒy]¨ i%F©7Z‹·ÃœP¼Ö1# R|4¤äØŸ
+1%!Ý81¥S£˜ÚÐ Å$%2© âûó×"_-lð$wL%!ov]hu07ôE=Uu¼ð”ˆt
+j$‚¤ ™ûsÀåíò¶¾„(¢ÀBnl»Êÿ3´@àŽŸ§`Zð©ô]æ¯!Þ­>QExÍÒëSÒ¡jýq—¹ðW»qéµ^Á:ÐcV°”VcK¡!Õ¼´Èwy}K×*}ü¤ Ì4–bR
+$¾NÂ{½]ooŠA
+ÎI Ê0Aw™9îHÕáò&¯ö§nîßõáæ”M"©9dç7oÐ’òãnÞPcµ¡ÇDK‹ é«W0Ó# ÉæÈh±¼ÞŸi7¼À‡@×PV{Ý¥oËù°L„#aÚúËVf¾’&Þ8‡üž€é ÕЮçåính•Åo!@²C
+™œpk¿‡ZƙòIçEÕ´OŠ&5Óéâð"e4,-N5(tÝA¶–(è™7G«Ô‰Ôw­¢Jã÷ËSTÚü}_b“Ç|½j)”@÷Ÿ±–ø90…uqÓRÉ»ßÒôÿ
+endstream
+endobj
+14136 0 obj <<
+/Type /Page
+/Contents 14137 0 R
+/Resources 14135 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 13850 0 R
+/Annots [ 14069 0 R 14074 0 R 14075 0 R 14076 0 R 14077 0 R 14078 0 R 14079 0 R 14080 0 R 14081 0 R 14082 0 R 14083 0 R 14084 0 R 14085 0 R 14086 0 R 14087 0 R 14088 0 R 14089 0 R 14090 0 R 14091 0 R 14092 0 R 14093 0 R 14094 0 R 14095 0 R 14096 0 R 14097 0 R 14098 0 R 14099 0 R 14100 0 R 14101 0 R 14102 0 R 14103 0 R 14104 0 R 14105 0 R 14106 0 R 14107 0 R 14108 0 R 14109 0 R 14110 0 R 14111 0 R 14112 0 R 14113 0 R 14114 0 R 14115 0 R 14116 0 R 14117 0 R 14118 0 R 14119 0 R 14120 0 R 14121 0 R 14122 0 R 14123 0 R 14124 0 R 14125 0 R 14126 0 R 14127 0 R 14128 0 R 14129 0 R 14130 0 R 14131 0 R 14132 0 R 14133 0 R 14134 0 R ]
+>> endobj
+14069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 758.747 143.854 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 746.792 143.854 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.403 734.285 142.366 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.075 722.204 160.038 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.822 710.375 147.784 720.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.403 698.971 142.366 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.147 687.016 177.11 696.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.185 662.428 176.133 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+14081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 630.445 147.961 640.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+14082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 606.534 147.961 616.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+14083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 582.624 147.961 592.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+14084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.157 558.714 139.12 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.902 534.803 139.864 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 522.297 252.372 532.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+14087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.055 498.938 134.018 508.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+14088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 475.028 140.492 484.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+14089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 451.117 148.589 460.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+14090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 427.207 148.589 436.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+14091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 403.297 148.589 413.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+14092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.449 379.386 158.398 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 355.476 122.685 365.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 331.566 122.685 341.484]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 307.655 122.685 317.574]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 283.745 122.685 293.664]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 259.835 122.685 269.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 235.373 176.635 245.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+14099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 212.014 122.685 221.933]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 188.104 122.685 198.022]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.449 164.193 158.398 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 140.283 122.685 150.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 116.373 122.685 126.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 92.462 122.685 102.381]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 68.552 147.961 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+14106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 746.638 436.013 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 722.421 436.013 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 698.203 436.013 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 673.986 436.013 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 649.769 436.013 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 625.551 436.013 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 601.334 436.013 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 577.116 436.013 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 552.899 436.013 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 528.682 436.013 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 504.464 436.013 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 480.247 436.013 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 456.03 436.013 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 431.812 436.013 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 407.595 415.48 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 383.378 415.48 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 359.16 436.013 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 334.943 415.48 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 310.725 415.48 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 286.508 415.48 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 262.291 436.013 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 238.073 436.013 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 213.856 436.013 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 189.639 415.48 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 165.421 415.48 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 141.204 415.48 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 116.987 415.48 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 92.769 415.48 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 68.552 415.48 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14138 0 obj <<
+/D [14136 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14135 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14199 0 obj <<
+/Length 4163
+/Filter /FlateDecode
+>>
+stream
+xÚ½Ms㸆ïþ:ÚU1‚ïk*›­ì!UIæªÍ4²Æ£Šm9’¼_¿>   -Bì/;[»<ñv£_ñÕ㊯¾¿ùÓ§›?þÅ«•gÁZµúôeå8óÖ®\ÌŠÕ§‡Õ·ýÛŸ¿û×ÝOŸ~Xii™Ð
+þjý?n¾ûtóßÿ¯Ä0„÷ÌK½Ú<ßüø_=ÀÿûaÅ™
+~õK÷Éç•6Š™n¼§Õ?oþ~ÃËËÒf䲬`<_×fm˜÷®û˜´—Èðí€Áyfœ«qÛ;Åo¾“ævûrú-8gÆ(<[pŤV5ü—;an×»Ž»º’i#»?ý'žvŸ÷_þ͹گF®N:&…\9˜€¿Š¸<Xàq$øo0Ro‡ýa„
+4e=ÕHƯ©›ýÃöo ûú‡ÞS ÿïoV?ÞKço…ðé½ÀV÷^0ò-ô“‚RŽq˜¼¢”e^ëž÷åíel7íxdðÌQ#7ûç×·Ó¶—‘ƒÖ"úîåq÷²¸™ÒžÝKŠ¦齄y’è„, Ôp/ÑÈ|/Käî%Çcq#ýr7ÒB‚µ
+ŠË”¿VCþ‚†¦³€æL8‚¥É*È>®eiÂ#³†JdWZ­Çt$3"`…ÐLÂ-­¸§õç;ÉoŸ¶#d¥ç–‚ ‹°…äV‘7û×B¼Ú@]eÈ×ãé$$
+©™²Æ~]¿<<¥ˆP
+ªu1§O6ÆÀЊ OŽ#I¡šúdjê“+ê5}²CõÉF+¦¸&Ð. $ ™MkMÌÚ-‰“ÚESí–ØÝËC·Ëô+Z¾*N›¡¯‚Ê6Ø6ùâ©Y¾%•L¾Ó©25‡?ñò…Î"XíœéÖ1(ñÈ
+·•gÈR•pà ³NÔy£¡30tpž ‹#9—¦üëþxšV˜FLC"ñ–  ŠÙíà‰I;%ñ’tðÀ,ŠxAƒ ¸·]ý •x ^?= •³æê}í%sVˆ5Ždò^?X'jí8³¨ù,VHÕ¢V42«µD^”+š8ȵDOÐdÞk~{IuW¨Çøîáz`$•wøIun‹2ꤪŸØF÷]üÓnìÎqÍT_x|œW/dÍïk¯Ÿw›ÑF^BA¢(Ð
+äâU~‰;™oÏŸ·i#\Cº;¯ºÛ*?­4ôB– ò‹#Á¨M•5U~u¹ÊOK · ò‹qá¯U4?(ºäo´±RSp¡QB×ÜÃöu_¤ÈsÍx—
+7Ó¹9Qª<È÷h1EiɆ¶ã,Ô¥u¹ÕN9(=Aõ2^]©hü­%:Zñܱ%w:bñܵßr‡(Š'£ü¬ÝBÕ ¦ˆ"IçÇ›SQ„§æ(*© ®uðEŒ%è‚TwGÒnçÓèT¥§xdzpZ#wŸû£P³½?þö0N£š@õÚPt q$iÚ:jVSI]0'KM<EõAÝóž·‡Çíx&6Ò@³njê…'ñ0³¿¸Põ[§j.ÌÕæ(Ò÷uV ­D|0( #ñÆlˆ‡fýÐåËáã§{Z¢M½Xæ Þ:-^46k·ÄvÚ•#Ú½*ùJ—ç»ew|¿­ & &ñVÔå–ré, ò9‘¢ïy7vJõ_M †9íkâf}Ýq†úâÏÂ2-L -êîÕ=¤ãXj_».­†öPl†Ç‘ìûsüþÒ<oЖ˜=qidw@ /¡Ø1çgß%„&f •Ä ¡™ƒ„Jh‘sÏ$ÔþèXj½‘£Œ¤¼_^BÒCCPÆd~ö}QBhb–PIŒUjJY0³vv$ÈD9Šu m=ž™W±‚¹à"ÆãI&‚ƒƒq neƒ|ÐÄ,Ÿ’壑òÛFôž›.¢íü5)¨¢.WÅ ùJœß.¼¿tvIBxb’PEŒ2ßJèª6PX«Åº8’Smgè¨YB%uA Cóz_Èæ'Á%„&f •Ä(!‹ÍBª&A±ŠÅ‘ÌðXwBBxj–PI]n!ÐÿZNp’.¤Eƒ‚ÐÀ¬ øº>·ãåªÈøTCWÄ€(ÛëU¾×cýxÃÄÄ~
+ªÑ ì
+ú´;žÒNŸ‘ÚYùãŽI‚‡qÔðÐx":±Ì›%sÁôÎÍ+«q á]΋Á‰&æà,‰щf¦è,‘Óቧæð,¹“ñ‰Ç¦ø,©1@%6@a椧x â¾m'ÏLZ2— P¯ õ$¨à½dÁ™éðDóRt–¼×Ã~³=ÇuaÅC…âÝóÏ’Ú¿z“=¤igfy¬Dߊe%™Þ49¬ ™Ù`¥`ÎíùŸ0<ï¸ÛÀ»W„>±‚b5ÞDG øø™‡Î¨Š•ÔÌ A@„Ù7\ÔÈ…¬L`Z¬}Š0bUôëØY|-.(î/tÛüìþ¶)tŒeÚ_uv@™8´!0
+êN•ÓdO¤bf•‚‚
+ É‹ùîD£)_LöK9ZÐVA9\J« Ëá‚Gæx)™Óñ‚çæ€)¹Óƒç¦ˆ)±ÇÝ#:b`B‚Ò#¹üBÂTÄà©)bJ(YĄɈABåˆ) ¡.G ™#¦dVOÎFö:/IÒ^ œ#÷‹T|*èû‘ŒXðÁYšN¼-UšÎÊ–ê¹{)çé´{³öPÂÆR¸p) Ý“9³á:­£¯½+ë@FN\ÊÅÉ:³âJ¯ŸÃ?¶Ç¤©xÐÍIMxc®œš
+c®‰ÄDÀìS冴l^ÈñNYYÇ¥QÖs¼ößb0î?T„›†À%¸
+qÅû¥?Hüúº=ŒqÖ\ qJŸ]ʸÊs!ÌR™ôÈžzP,ÜÞ¶UVÔ¤²º\/‚wºÊ*+®^öc…g^y
+¢TÌH_#S1·ºç,øöm¹¨²fASUq$«—/ªð[i&+ƒ­K3I@L3Y!GÍ)•Òð
+d|]@Öćõi¼t·_yÅñƒœ~ ô‹VdŸ8V¢)ûà¡}ò©˜Ë-qxK±,ÙÒQì¢dñÄ,Ùy<­O£Í$´
+ц€
+®…úP‹šû/ñ g˜Õmà½Ó†€iplOMCjØÖ¼\ãÌrÄ”>f#OÌS"?ìl´í#…•½‹˜Ê(î½_N‡—jV½‰wOÜàÙ6OMžkÙæq)íf–\š™½ŒÙ
+ÅWÍâZ ¡È7â̳m³9íßöocÛßNönx´3p[ϼÛö¯c;\Á0g ñt¸¨¡ýOilNûlþÅ·t³J%´iÜ9¥iÜTäà©)rJèr‘ƒ÷TK‘3êåÖŸÍÑãeÖÞ[-Ïiå­61§Ô~N+èrË9Þñ,Ïiå±vaº ûqÞP€¡ôÓÎÔäêçJ„ëÞ–¼¶Çû¬åN¼òY;õ;]›mÛÄz‡éÅñ¶cy^K×±–yŃó¼–äì|¿­)Y
+´ 0_öÌåí½×°Ìsyõã2¼×Ù §ÒëlY=¡Í·²žJó­=áÁYO%yø%…¸ý6ú_À$_Üén»â¿‹ÊÄÓ×ç(´ï× ©Ò÷‹RS“kÎ'*驲‰jК´TQ7‡íú4V[ë–h=³"ÔÄîç#Þ¾Œ—%Z ,ÓCšQ¢fF›ÐÁ}+¾6{­dñ&XY²• Ö¢ioÌ”e[ú2µÈÎÒ-ÉSÒÅS³|Kê´|ñÜ,á’;<¡™«`´Õ àÒ€jÙ¤‹6„Ê
+. ¡ZŒg—äè‚r¸»‡;·{=wjœ˜d~<Dÿø›wþ¡q­ŸÑ¿âý¨rÿÚâ‚•ûWjß¿Òš`5ïIà}¡²œK[¨9ãÁYÎg†T§Ã¾ø‘¯ª‡mï9ðîPCª*Ü¡–]k±®IyfKÓ¤–™EsóÄ–`ÀÊ—Ýñ+jgo›”gµ²MZtÂ{
+¥y­,…æ•
+4t
+endstream
+endobj
+14198 0 obj <<
+/Type /Page
+/Contents 14199 0 R
+/Resources 14197 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14139 0 R 14140 0 R 14141 0 R 14142 0 R 14143 0 R 14144 0 R 14145 0 R 14146 0 R 14147 0 R 14148 0 R 14149 0 R 14150 0 R 14151 0 R 14152 0 R 14153 0 R 14154 0 R 14155 0 R 14156 0 R 14157 0 R 14158 0 R 14159 0 R 14160 0 R 14161 0 R 14162 0 R 14163 0 R 14164 0 R 14165 0 R 14166 0 R 14167 0 R 14168 0 R 14169 0 R 14170 0 R 14171 0 R 14172 0 R 14173 0 R 14174 0 R 14175 0 R 14176 0 R 14177 0 R 14178 0 R 14179 0 R 14180 0 R 14181 0 R 14182 0 R 14183 0 R 14184 0 R 14185 0 R 14186 0 R 14187 0 R 14188 0 R 14189 0 R 14190 0 R 14191 0 R 14192 0 R 14193 0 R 14194 0 R 14195 0 R 14196 0 R ]
+>> endobj
+14139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 746.638 204.26 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 721.744 134.655 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 697.526 134.655 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 673.986 183.727 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 649.769 183.727 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 624.874 134.655 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 600.657 134.655 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 576.44 134.655 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 552.899 204.26 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 528.682 204.26 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 504.464 166.297 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+14150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 480.247 166.297 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+14151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 456.03 166.297 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+14152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 431.812 204.26 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 407.595 204.26 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 383.378 204.26 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 359.16 204.26 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 334.943 204.26 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 310.725 204.26 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 286.508 204.26 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.959 262.291 162.908 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+14160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.959 238.073 162.908 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+14161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 213.856 204.26 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 189.639 204.26 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 165.421 204.26 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 141.204 204.26 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 116.987 204.26 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 92.769 204.26 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 68.552 204.26 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 746.638 436.013 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 722.421 436.013 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.712 698.203 394.661 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+14171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 673.986 436.013 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 649.769 436.013 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 625.551 436.013 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.712 601.334 394.661 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+14175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 577.116 436.013 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 552.899 436.013 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 528.682 436.013 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 504.464 436.013 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 480.247 436.013 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 456.03 400.811 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 431.812 400.811 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 407.595 400.811 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 383.378 400.811 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 359.16 400.811 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 334.943 436.013 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 310.725 400.811 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 286.508 400.811 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 262.291 400.811 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 238.073 400.811 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 213.856 436.013 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 189.639 436.013 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 165.421 436.013 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 141.204 436.013 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 116.987 436.013 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 92.769 436.013 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 68.552 436.013 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14200 0 obj <<
+/D [14198 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14197 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14262 0 obj <<
+/Length 4003
+/Filter /FlateDecode
+>>
+stream
+xÚÅMo#¹†ïþ:z€ ÃïkÍ"{d69(¶<#Ä–¼þØMþ}ŠR‡”[nª«Ð> à±ë‘ºê%«ZìWrõu%W?^ýáËÕïÿÍ*Šä½Y}¹[)¢÷«´ðjõåvõóõŸÿòÇþñé__~ZYí…²þ´ý«¾\ýr¥àçr¥JˆEÔvuópõó¿äêþ崙&ÅÕo‡ß|XYg„;Ä»_ýýê¯W²~YÖ¼,¯„Ä×u3‚v"Æpø5íß#ûK;‚‹Â…Ðâöwÿ”Òì×·o±Jz!¦s•Œ"hÝ‚¿íŸ_F˜ -=SCžÒɵ}Xÿwi½0A1 m: äã·õóæPfŸ]:¬>+-”LÇÿ½ßþû½è ´‚ë•Ó¤«‘D’9ü "à›§§ýÓØõHÂøÈAuZH[êÍþvóüI¹kñíwø‘úôuÀÿíÇ«ÕÏŸuˆ×JËáŽúY}ŽJ¨¤‡K'õb‚ Cº`ŒÑÚ~ÁÁE15yB1t(J¦†>߬_^6ceâ@6Vqpèƨ“Ëüúòøúò|TŽåØYÊÑV$c9”‘‚q}Ê¡SQ95•M9iR9ðk‘e«@u+‡ .Ê©ÉÊ¡CQ95ôy³{§°ÆÀòNΟ¼ÓÇývrEÝH`gkÖËNáHøS8„‘œŠ}¡SQ85u9áxè=\i²pr ‹¼áÐÁ(œ†ü¾p ƒpèóæåõqlÃQP$Žƒê,‰k©ÿþ¤åõëÝÝ'#¯¿ È@K8kçñÁ ›ƒ€r$Ó%æ ŸŠ¹\¿æ½…תÄ2·[<dpOMžŠâ©¡Sâ¡SQ<5õaû<’WŒ°3@¡D‚Œ-ôvý²>Ê4B¿¥fV
+^GŽÑ*G’±S¨t*
+µ¦.¸ÏY) » R5põBÿhE©Öä ©Ò¡(Õúü²~úôÙÊë1´…ú„™ˆ 5—´jÑ#›Ý©tƒ°š…!‚:á?mÖ·ÃAz–tášJXÒ¤ £ï›í¨(Ýšºà.«œHŽa¶Ë‚ ýÒ%ƒ‹tkò„téP”n í’.Ò­Ñ7û‡Ç×¼¥˜„2³Ä#ˆ–c¾Ë‘¼í›ï¨(žšºÜ¾ç’Á$ºxr gúç;:ÅÓßtOí|ÝŒa!·†…êI ]ßüòº}d]¤viÎ}’ð†A695ªK6tè šº j|N3 v9Ñýƒ\TS“'TC‡¢jjèËþe}îÓ«ÄA=||•Þ¹ÈÃGXqΆã@“V±("iÕ7h1PQ:5u¹nÍY#Œ´ Ò@Jº~éÁE:5yB:t(J§†¾îÖãŸ`Ek8¨Ð‡9cZêv7‚ôùÃ2Ž´*Ÿ`—<É+Þ9Æ
+ìÇ*Å@~ z¼`M˾{|îà9{x°ëâÑ‘<ÇŠ‘4YvE„¬˱§B eû›$:¸qM~¿ˆéL,â†ÙUÄt6qÍ~þ¶~ÚÜŽ”qì/cW‡x>f(cˆ$íGT±TB1œã5R6Ñî"¦rK ×ઞšó>3Û~“Z3äWž×ÐöëàEâÈpTÿIm:SÜ«ÃKл--ÃÞB£o92 ‘<~$¾¨„µË/‘á@odS7E— ×ä*Ãg÷þZ[ =àÈ/D21~D~u„&¡ÑÈtè?sJ—üÖä*¿O›¯Ûç—òqðL «|Ž#ÅH…X£¥Ú3œÌ¤ï?I— ×ä&Ã÷›b€13Á0Y’í/ŽVIA£g>@Äù)iÎñ©.ò¢ ƒ1Å ¹Jñ±‘^ßo¿î6·wO› iÅÎ'äñSŒ!Ù)ÿÉvŽÇ>!òºÿ˜\’]“Ï%{ê&ZOºaÈ£ú é†Hå‰ÿE—oe´~ ‡jr Û?Cѹ%ÛøM²ÏHú‚«$X q Þ•_VÐ2ð<™ž]òd:\R\“ßä˜AÉÉ  Cš!Œq/$hÿ¶è¨E
+ý‡ÈXLqÍ}ÚÜl¶¿~Òîz3B6áàOD'ÃPäµiȃÍØÙ÷|y5¨C×ZS+/
+Ï–´•v¤DÇZHYJ©ÅV5í„u®»¨ó‡5‡hd?“oñÄÔ:ø-Ó\a“íå°Œ;MüJÓÁXÇ5™tË£$–l0W[Ì-³ÛbbÉh˜ØN¹’X:Ûؽ3J4y¢å0|3ùˆªj©7ûÇ|"üc›™äEHŠƒœ’°ñý}yÊwúMèõK“ÝÞJ×no‹V1ÝŒl¨â^Ã7¬bðPÅ­÷ÚD3`UÜP±ŠÉØãPVj!¡dèx+aÁ‹©åW;­†vðò–¥\9¯-ºÏÒ=º°;Í×J!ÓÁXÈ­Ú˜û¦ñùl¾â€zc¬j¡gE`ÁP›8¸É;ã„–G#3£~Ɇd¥~kC²e—b²UVp§'Y©`:+¸±ÛìFVBã`v‰
+Zð6µÐó ë¥K^hY :žx¡}¯`E°úò
+&ûr•
+®}¹–]ƒÉŽQXÁÖ\¥‚é`¬àÆ%kûuwô,™=éУJZkǨE&º¡ÑÖ^Ó(L+xHkC>¦us«ÎÐ÷þñiã2ÁÑ}'¡ë2S2ùŒr~º P’j¶—ÒøÙiÕ]LdŸ,¦N/¥RLt0SMÆbÒsÏâ—b"[ý”jê0*ÕD§å4Ó_èýršÜrèž0XNþB¥œè`,§šÜ3ÎÞvè~0¸í4~0Ën;dLm§%LI-Œ©­ÉïynæE r8—ä5à„{ήÐd×iÏòv#$ÌX´|ìÌ;¡ÔÅw×è^%¥„k¯’EK˜nf1”p§] V0w¨à|¶¼E*qP½^§†º¾{£®¿æðeÉ*ˆ'v!o½~NïæÁ„¥9Þp~0ôwbVr÷Ý«$@<£™ »†`3ÑãU‚ÍõØLðZ•t7t ”k§UIÑ+Œz­É“‚¥cQ°g=C¬…Íe^ “í;J w˜†”¦S‡fõ 鞯èfXÞ!¥†é`¬áš<YÃt,ÖpkÞñ|Ýdlûø²Ý௼aàgKãN.xùÈ¿ñ2“¹¢ ²‘GQP‡}HQ:(ˆÕ=¤_AdTP§{HQŒ
+ªÉ“
+¢cQA5ûÿ·C‡R†zÐÅÉU¾ßïÿƒºiLÒ/ÛyÈv)E7µ]Ê”nèÔA75t¹î‰f]2h¦× 5C„zi¨Sz!"­ŒZ´Œk…tÒ¾Çíƪº- ª¤±…™P õ¨’ºÜîB÷ƒA¥tÑ¥ÐÁ¨–š<©:Sc¿®_¾T€É1zl~ ø“ë\«o€i÷²¯~*Ò!;àétøîéЩƒtfÚîP7² J§Óv§H‡FéÔäIéб(ÆygìKä{d¹Æ1ŸÚ´-³úùÆ3K4dÓ"šÚtgJ4tê šºà~CvŸAÑtÚüÑÐÁ(šš<):ESc«çÀßRvžÃN)RÎÒp'oEç9*p˜ Ù|&ߛӷ÷¢•ÔªY·!è6CE¸•ÍДnéÐA·sAÙRý…Pµ¾FEµd.Š¶OŠ–LEÍÖÔógÁ“2p\äü„Â![v»«ZDØìfuˆtë&ÔLcÝ4!êQ4 t¹‘îÙ4Ȧ×,
+eÃ
+Ý| O |€ù¦–ì…©í4ß*©¥ƒ1µ5ùðõšöô)Ùp«¤uqÃ-Ì*Ù÷
+³Úi¸U²JcVkrý ³ÓJ·Ù¼~€ÍÖXºÛÕØÖfëaä[á È
+¨ÈÃÑk¯í.O®G¹ÞoG·lœ-‡Á—q08›ƒ¯ÛM™ÝÞŒÍìñxè™ }®’'—{— æõ¡~tnÖØLwÃ^¦q›èe¨Ç^¦^r <’zº…*¨ñ.{WAt$*¨fö+ˆÎGÕü.ÑѨ ])è­aIJŠke„µ^µÜÍpÉñÜ2aÎB7…+Ê­MᦔK§Ê­¡lÊljèvp¨ÜÊ îq}ܾ6ãw‚0 ‡žqùÔSëw4µX}†…h.ohˆ¾s¥©}çnöûÝt2M$õ1dß7ÌemûÖ›L:“YÓ·»ÁÚavBÉs˜ÑÚbn™„’Mφ|6Nk}餣‡lÖìݾxvP2J¶]ûî
+endstream
+endobj
+14261 0 obj <<
+/Type /Page
+/Contents 14262 0 R
+/Resources 14260 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14202 0 R 14203 0 R 14204 0 R 14205 0 R 14206 0 R 14207 0 R 14208 0 R 14209 0 R 14210 0 R 14211 0 R 14212 0 R 14213 0 R 14214 0 R 14215 0 R 14216 0 R 14217 0 R 14218 0 R 14219 0 R 14220 0 R 14221 0 R 14222 0 R 14223 0 R 14224 0 R 14225 0 R 14226 0 R 14227 0 R 14228 0 R 14229 0 R 14230 0 R 14231 0 R 14232 0 R 14233 0 R 14234 0 R 14235 0 R 14236 0 R 14237 0 R 14238 0 R 14239 0 R 14240 0 R 14241 0 R 14242 0 R 14243 0 R 14244 0 R 14245 0 R 14246 0 R 14247 0 R 14248 0 R 14249 0 R 14250 0 R 14251 0 R 14252 0 R 14253 0 R 14254 0 R 14255 0 R 14256 0 R 14257 0 R 14258 0 R 14259 0 R ]
+>> endobj
+14202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 746.638 204.26 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 722.421 204.26 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 698.203 204.26 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 673.986 204.26 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 649.769 204.26 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 625.551 204.26 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 601.334 204.26 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 577.116 204.26 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 552.899 204.26 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 528.682 204.26 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 504.464 204.26 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 480.247 204.26 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 456.03 204.26 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 431.812 204.26 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 407.595 169.058 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 383.378 169.058 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 359.16 204.26 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 334.943 169.058 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 310.725 169.058 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 286.508 169.058 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 262.291 169.058 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 238.073 169.058 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 213.856 169.058 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 189.639 169.058 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 165.421 169.058 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 141.204 169.058 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 116.987 169.058 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 92.769 169.058 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 68.552 169.058 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 746.638 400.811 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 722.421 400.811 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 698.203 400.811 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 673.986 400.811 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 649.769 400.811 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 625.551 400.811 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 601.334 400.811 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 577.116 436.013 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 552.899 436.013 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 528.682 400.811 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 504.464 400.811 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 480.247 436.013 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 456.03 436.013 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 431.812 436.013 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 407.595 436.013 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 383.378 436.013 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 359.16 436.013 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 334.943 436.013 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 310.725 436.013 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 286.508 436.013 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 262.291 436.013 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 238.073 400.811 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 213.856 400.811 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.863 189.639 400.811 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+14255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 165.421 436.013 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 141.204 436.013 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 116.987 415.48 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 92.769 415.48 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 68.552 415.48 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14263 0 obj <<
+/D [14261 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14260 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14324 0 obj <<
+/Length 3955
+/Filter /FlateDecode
+>>
+stream
+xÚ½Ms#·†ïú<j«²¾¹¦â¸âCª’ì!UŽ4EI¬H¤LRqüïÓ Ñ@Hpº‹'Wy¹xHÎÓ@cˆyWΞfröýÝŸ¾Ýýñ/ÑÌ¢¼7³o³ Eô~-¼š}{˜ýxÿ׿ýù»}ùéÛ3«½PÖÀ_mÿàî»ow¿Ü)øÿr¦Ê1Š¨ílñz÷ãOrö
+3ÄÙ¯‡W¾Î¬3ÂÆ{™ýóîïw²~[Ö¼-¯„Ä÷µA;c8¼LûsdøtCÁŽà¢p!´¸·ùö‹’÷ó×å~¹ý=Z©Ø–ÎVZܶðÍûþp¾%\°¯J %‡ü‡ÿ–Òlæcï*
+mዳƒPN“Þ–ƒI#Áÿƒ‘Ž—`óúºY‹ç?ÈGäö)³ÿñýÝìǯ:Ä{eb~Áñúξ:)dÈŸ"^¼œ& šÐ¯§ñ"Z{Ýõ$ÃË­éïëÿ¬7_”»ÿuM»°ÚÂe±F
+Æ1^Øáâ……—E–B…< t¼°«·åËj½ûÒàÝ)ÃÀU0B¦/¶Ëù~y¼œZ‰AéÖð—ÕÏ箨BÃ_ RŠ éŠbÇ‘œÊðåv»Ó&ã#Õi!]l©‹ÍÃr—4¿¬’
+'*E%Ô {]ò°Üxø¦É.¥,ò.»Dç¢K xûå+|kïë1O¼0Fq€Á©U ~|_/òŒ3ÌÉ„Ôg°^Øa`08dºüe`f+æ5öÆsö^\â¼·ð^ƒ½0PâöÚKæ{kðn‹ëW+ï÷#hX餉hcDбEŸ)„qßµJ«œ=ù²Sá쎕ã¡ŸT: ¡Žš£t’α³xèT,žšÊV>—'+…
+ ¢7ðíì7«õxo(½pÚ1`á³Áuw-w¾=v¦_Œ¼ÿmÌèLÕÀA7Й·ÛÐ_W»×ù~ñ|TÙB[
+‹ù•u„ý‹ãPFŒÞõ©L§¢Ê5õ†+r°¿bè‰Ó@¦»£ÊÛÍb¹Û/Nz¬R>§o¹MK¬¡Ëp“T’vN-qÉÛ¾–˜Š*ÕÔÛµÄn€â5]¥43C§Jt,ªÔpŸ–ûñfX UÁÄ_Zab3|*tˆAq@Aµt§>Ï×/Kl%  S¶‘. †’IY£ºJ†ÍÓ@oX1>ÀÂÎІ§ŒÖ½CÆ–Š9á¦âc=„q°|`ÛDyú‰“ï;l!@È8©vÎ «X$†‘´ê놨hqMe³øb á¬FZ‹a %]¯Ådl±¸æþš¾³ùj?Þ;«8ÀÐk£Zðîù}ÿÐÜ£…fØÚI"›t9zag¤ß'2Š"×ÔNÇ
+–ÇDVÇÅ=ß!H›«õÓr7¾³³Æ1ÓÎNi×¢6ëý¸%J)hÚJÕB«ÝìóàO§tð½ !r #…0ô L§¢À5õv÷%ì`aÉЧ<ú»\,Wÿý¢ÝýØ=Dˆ9Më6 ú“~$à/10ažñÎ4Ì·ý¶È½ž2ýÚ¨EðŠÁÞ4’ó}Í05ÛÛPo×GØ®†f°²Î ¾o›ÏoK-â`аŒ MËþù‹–÷¿íqs¥¬Ã4£`_æ,GgšF2ø«ð%£èT4ª¦Þp>´Çå•n ¤ñÇê>£ÈèbTÍ^l^ßÞñWãÓUë«5vOžÃ' Fíó‰NEŸjê5> 4Ÿ4ô튡ALIüѺÏ'2ºøT³›·ÃmÿÕzü—³à.—u®E?Ì÷ó¼Ï1ÂûI Mƒ’}¢•é¿}}"=®©l_\iÓ;%;l†phþû¦aÑ߆‹þ¦…6Z;•8Èlhƒ?aWÃ+ä…ÝD¸"G«˜Fòøãð¨Yà†z»‰ØÛ†V1 äâ5­"]D®Ù‹·÷1K$¼KÇÁÔFhïZæ~õš; £aï5i6^ÁÖÉr #ÙÐ×™2PQàšz»Ÿ] |ç:SsøFü5“ÑEàš}^`:®™ûÍx×¢#јÕ[àëjô÷¹Ýâ@:Ȫ–ù±ÌxlÒÚAë8Úý4’v}í>‹´¦Þnûh´ƒ]+G«){M»OG—"­Ùç#ÆÉ1`ó!¹{¸òþ8þÓ6ì °àœ¶-õy³Û—_µ­¦l”‚iÇpœ-M#ÉÎÕÅ© 7ìÎ$¼œátœ‘éQ«vTr©š}±jÈT,ššz±hÈÔ\354/p'%sÕb£c:æÍq¦TéêÛÒ0PsÍ4ÔÛíÉuðbਚ4PPöŠª¡£±l6|sûã‘ߨ÷¿µ·°ïæØe¤‘¼ì;ÜÉ@E§jêí&bíÒûc8Ü™²Ã5» :º8U³ÁýB¾ý­-lK"ÇÏ4’‰}<¨¨SM½]?¬5,
+¡Niüy¼O'2ºèT³·›×1M,|Í–ªa>´'ÐÚaãO·N™U:Ê¡0 ¤úvtt&
+\1owÓEK+´g8n™’^_ã/]ü­ÙOóýóè#Й&éTcÓSy ôìoF^
+›ì¤“}:§[ôǽ …QjJá€0ägÓ•£ÕÛwÊ“šk§¡Þ®—P1=„ÆpÊS…áã¹ô®â¡£±xö…âa ‹§^þÁÊ;Ø rÐ=¬^ª¥Wõ„W“n‰(`¿Èq¸4LßáR*ÖOM½aý8Ç>ò:\S?dt©ŸšýqmúÆNYÔ>FêM` ¢L5õvLš¢¼d8虲×Üa£“‹Kzµ^ÑURƒ`™•`#ûÎ\’™¨Qͼáœ$O @èã‘ø.ÈèâQÍF‘N "}Ët¦–éù¸ù‘`¥ÌܜБãx' $c߯ tf–·fÞÎÝÛƒÀÐŽF-†pÍÉN2Å­É›A™
+»j‘¤‡Æ¹:¢êŠ\tj–‹5©®_.rfÊÕTW䢣Q®šý;¹˜æ.r–[Ñ«#A®èE§f½XäºWHZšZV«?@Õ"b³V ·Q„"=S EêIrC‘¨G‘xƒÜºç)z²ÊÔäVd¢£Q¨šýö|x¾k÷Ù¹K¨×AqÀ¼ ª“¹rðÒÁcÂ$‘ÉÙjEäŽD·"2šEžèFœÉá_(rw [™ŽF‘[ö™Üwx4ß1k©"´‰-ûÓ
+/ÍÝ*²|æa1øϲÖBúF¦-äسR?ak¥~èÔ\?S³Öˆ 9 ë§;k­ÔõÓ²Ký<ŒŸ_s†#è-_ÓúäƒZ@VÂåŠkeº¦ZîGÅô€~˜²ã£ÇŸ•ºœ¹Vê‡ÍõùÖ_>Ô00¬žîȵR=d2O‹æùñ† †.õ„‘¡L Ô£L¼YdÝÍ =,ëÔŸE†:1 ³O {·˜ïÇ
+o8×Ã
+tË=—•bsø×gЃ‡Éü4~í£—½Æ0L*rZ)ŸŽÜµR>tj.Öصîɘž}†åÓ»VʇŽÆò©Ù—ˇÎÅò©¹ÓR
+endstream
+endobj
+14323 0 obj <<
+/Type /Page
+/Contents 14324 0 R
+/Resources 14322 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14264 0 R 14265 0 R 14266 0 R 14267 0 R 14268 0 R 14269 0 R 14270 0 R 14271 0 R 14272 0 R 14273 0 R 14274 0 R 14275 0 R 14276 0 R 14277 0 R 14278 0 R 14279 0 R 14280 0 R 14281 0 R 14282 0 R 14283 0 R 14284 0 R 14285 0 R 14286 0 R 14287 0 R 14288 0 R 14289 0 R 14290 0 R 14291 0 R 14292 0 R 14293 0 R 14294 0 R 14295 0 R 14296 0 R 14297 0 R 14298 0 R 14299 0 R 14300 0 R 14301 0 R 14302 0 R 14303 0 R 14304 0 R 14305 0 R 14306 0 R 14307 0 R 14308 0 R 14309 0 R 14310 0 R 14311 0 R 14312 0 R 14313 0 R 14314 0 R 14315 0 R 14316 0 R 14317 0 R 14318 0 R 14319 0 R 14320 0 R 14321 0 R ]
+>> endobj
+14264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 746.638 183.727 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 722.421 183.727 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 698.203 204.26 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 673.986 204.26 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 649.769 204.26 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 625.551 204.26 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 601.334 204.26 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 577.116 204.26 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 552.899 204.26 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 528.682 204.26 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 504.464 204.26 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 480.247 204.26 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 456.03 204.26 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 431.812 204.26 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 407.595 204.26 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 383.378 204.26 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 359.16 204.26 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 334.943 204.26 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 310.725 204.26 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 286.508 204.26 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 262.291 204.26 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 238.073 204.26 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 213.856 204.26 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 189.639 204.26 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 165.421 204.26 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 141.204 204.26 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 116.987 204.26 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 92.769 204.26 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 68.552 204.26 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 746.638 436.013 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 722.421 436.013 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 698.203 436.013 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 673.986 436.013 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 649.769 436.013 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 625.551 436.013 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 601.334 436.013 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 577.116 436.013 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 552.899 436.013 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 528.682 436.013 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 504.464 436.013 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 480.247 436.013 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 456.03 436.013 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 431.812 436.013 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 407.595 436.013 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 383.378 436.013 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 359.16 436.013 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 334.943 436.013 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 310.725 436.013 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 286.508 436.013 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 262.291 436.013 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 238.073 436.013 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 213.856 436.013 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 189.639 436.013 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 165.421 436.013 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 141.204 436.013 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 116.987 436.013 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 92.769 436.013 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 68.552 436.013 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14325 0 obj <<
+/D [14323 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14322 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14414 0 obj <<
+/Length 3615
+/Filter /FlateDecode
+>>
+stream
+xÚ½K“·Çïû)xÜ­Š¼¾Å²ìØåW$ÅN•ãÅ¥¦L×äldåÓ§1/†ÐCtö¤’–ê¦ñºÑèáÒÕvEW_Ý|þöæ¯_Z±²Äi-VoV†«õÊ8N4[½½_ýrûõ÷_¼ú×ݯo¿YI® “þkøƒ›Woo~¿aðïtÅÖËåj³¿ùåWºº‡Ÿ}³¢D8»úÐ|r¿’JÕØÛ­ÞÜüㆎ‡%UdXšÚkA+b­i>ÆõžÎ ØÎeLˆ;‡ãÝ Ioës0£œX'òÉŒ*¢¬ѧz](‡Ïj&·„« ²ÜVë]3ë/„!R¹Õ Æ £®ýù®|wxø7¥â°¾ÌÎøÊHG˜âYcsÄQo þ ,5ðâx„©8§Mh‹AUœPeCêæp_œî˜º%ïÿÒÀ[êqÛá_u³úå7ö–1×} Õóê…e„9Þ¹Ð^Ô/xœÂºÈ°ÐÄJ¹DÀÙèAÁcv½Þ¶Zb’˜ÁË´Ä%qBbh ,¡Ò´”Oíµ4¦.Ñ’Ó’»¨%ø˜EÙ ÁC ´”´4f×ë㶨#r²‹äD)1Ì`È ,)fÓä”Oíå4¦>Ÿœ4Du žÎ–“7${^’œòѽœv]Ö»"wsÒFé‚š¼%‘¤%f§¥MIƒœÖÆÊ”†<w’²Ñƒ’Æì§ê·êà}÷¡ŠÍ#(OͤôY_@®Ë}SŠVÄK*Ÿ© l[!³¥´ËÔãØUù¡r‹‘zKÔ&.œ|j¿pÆÔgÜ„%%Ì ä‡Z€÷Ì’ü0=,1;ié䣻¥3&×Ç;Fo×›Øù
+äî$–ž<q°|¬¸nùÀÁj…±|À¢Õi)1µ_>cêó¯4SpªCH‰½!£Ì’å“–ϘýT‹myªÛ •ÈP§6Œ´Ø[Ò2--F ö’SÑ$uqGVŽÁáÎåKÊRbIZœî%°ÿsÇÕíú˜{ÌRÆù­/_NÞ,INùÐNMôÕñBq„ÔØ|IjœÔ4fˆÁÊ) "l…ܪ8Tœ¸„S’¼f/TJÉPÄ –8KËN¨½zÇÔç ¯J
+"¨DP/5-Qo6zPï˜ýÁûm]Ö¹ÁU ïHŒ|M JœÓi‚ʧö‚SŸq;dNYAPÌ6ÛŽ¢ŠL•ƒO*‰€d”.eÈ|xª6±ÐÃ-”3Ø;l}¬»(³÷UQœÂßX á‚%c\špó©½pÇÔ%Â5YÂ…¸ç„¬ÐÒ½nweì°êü½E@:é¤ ‡‡Ø–kàü!€ŒQ"¥ˆÕ¡ÚªØN/a§·(X ;½ ±ëc[ ¸ôöc»hìööªÝ^ZNŒf‹Æ[R:-÷E v‹& >_]Xئ²noûE†¤ý:$0ü²ÚÆ´ #4ÍüAVó=lÀLjX¨¥9!Á.Î¥^Ie›6‰!Aà­%ÑßÉnûý¡º<Ÿbº *
+‘¼J G(…0`ˆ÷÷§iÓ™¦sÌî¦s:W~?Lç!%BfdcâÒôdU¥ˆIH8$i 1%ØëŠÉf‰‰sØZ2Aoˆö·§óÅçfb%z˜Ø1û]Y­AÊý´ž;c‚Ô*d׋!ÈisÕYBðf#3”Ôÿ™–"Pû 7¦>_ó#ͱ€œÏR¶@ÄyØ^ÀwT'œ0á¸!8Ëe
+ˆ™Œ…Ì?… „_•œ á0’3oI»´Î4j§Û€ú|'aD“çk ©þæ´ÑСŒÇó±p®§\…Ø!/I¹8-š5»f~$õ–¤ÁLË.o@ H¥Ò2ÑH[§Nd6¶ŸÈ16ž‘ÁÎN!ÑÉG2ƈa:dÆ22˜MÚb5ýµ™·ÄÕ³fd‚ÃÄJŒ`†Xq÷_¿™ÇCDG^sªsÄG•14ºqSC4s@_åԅȪØÆÛº-ÅxHßØ-™ñÅ"\sK‚À„̬ ™»¢êM¶Ä5%H‡g.0:ì¼%*Óâu>´×#èó5
+ FèÔo0,qqæB»µ9fήÍ\Þ°4ÇÄù¥™ìWæÙµ"U§T¢ }
+bšF˜W‡ï ø§²Ú.)¢þÓ×äÖÜúÈ‹ÑÕÇ›wˆÒrkj·Vêó yÓG‰°Z½!ÃäôEžó+SY>Õ_™r®Bì~ýÇp[*§Éõ«j[VÅwòé¥!sçéÕŒ7•6B“—7$ûKÏ‹Þ̦Þc«õDxîO‹íÏ—?|}Qå¡™˜•ÏŸº-ìåá±I/å¡Q>ßÈÞ±X×Å•Ö\ÜÚ—wRÝûïŠý¡+Åa¾(N5JL|UÔoÊê·¿Ýß‹Ó k ß­±L½.Ö÷Xû¶N˜p‘8¶VûËšjìçî
+âêá«æõåᩪóF7ØúûººßeúíUsœ/ªúç;I}ÿË2sÓ?W\°æÊX;Ú4¤4È&xU扯¬.m^råé|O„(ÿ~mö+‘Bð椼¹¾ã´«ž–»õ;ÿ·ÅöÂCÏ럑gPé^gB6ýÁëŒï¯Q[3êigÞwʯ­¿>nvÝæ\üþTT›yëìÇò±ØÁêH‹!óK£·µ`ƒ—I_?U_>U›º<TWìŸöxØ@€¸:Ä]nkïñ[{0ëýÓ·Ø Å ßÂqåÛò]{¼êžÿÿå’×]#þ˜ç£ÄâGùT~YܾoÌ9„.zÁa‡¶.ì¢ÿéÕë7_ÿð}“÷9£¦9ø¡Œm8’(ɺӛ¢¦`awúfWB\"›Ç‹ÑœNw˜f“CÙ¬[³»É{¯ÝäWùu^Í:î™Æòjÿë*æU_µam΂û² ۜŮXŸ"ýqBѦ”‡À…“™ãnÒ^½>Þ]–ªI_Æñ´{±ƒL±)$l.y×™”£ï¬w³{~ïŽ{~áÈQ´›e›ÆÝl|«mþ
+b÷ëzó¾ «°»%³˜ßÒÔÏbÐÒ”(CFi¶󛋆'waèÐ%é0»iÐâ¸éº`2BA(xvi ÎØ‚&‚!ôðPõYÿND”H‡Ñ¦$üûƒvÒ§t¿®×±8ãÛÕQÒG,ÍBèááá¬\+0¨ÍÅëÄ»±wë$…Ó+Ã@J
+§W*B殨¶õû¥qËÂÁU-Ûñ²ûµ†ýbܯO”m»_ò™š¶Ý/cælúcEÓ|Ž€¥Iß}<F÷éÏÒù‰'nýte·4 Ó5niš Õ¨ÆèÆËǤk¬ ׋#¤œMòü‡ÅyÞ¤è¹-ª¢õD]ÄÕ+,B»Œß"©™´Ëì‹}Lµ¾J(°1p.B䟓¾ØýMv×x/¿±¥w_ÐØ2ë>fç¿€9·h$óߥÅÐÒ¿¡oXˆ>TKA ‡H„Àœ8%£ûÛb±4¯Ä²p­&Š%»g˸'ê=ŸP}˜ÆAdÐ!sËò­Î[áÓµ­.(¢`$\K8 å]‹Úæm=oI÷ßNôöh\÷å' .Ì;8,À^ï8ï§Ï/×?}‘ßðÔßD OÇ"Ö`è½fP˜à59!ÎÅsH`¸o ÌÃöठÑÑ£ˆ¤í[ñùLIá("Dȼ/N›Åò°Ž·.½s‚Kÿ Bç„·¾›=ºAºê™Ïl^á ‘Þ]±“›‚œZa0µm¾ )€úo@(·O‡§åÙ<U“7ÍwëSt!B,ß‘œw“!1¼µÄû›Œ]ñP/Î΋Ïà,k0ƆXÿ…~íÅýöýò€aù/ZPLäp6æ™×(mÇ[¢š/*BÑË5æø¢/Õ?«á,5¯á0Ç Ï 5^Wà ˜ó5hWà  j8Ô¶†zw®†“ìk83©†3-šÆõ
+ÁŠJ™¡×…>¡WÈlÿlù›Õk>¯×ë˜ù©ÈÅ›²TûÇäAïŸö(“¨ ¾3
+ÇK |bý×_‹”Â1¯ŸÄ1óÂ$æCûIC¯Z‹Í†¥‹n2™¿“âUoIó”‚*³+¨Ì”‚*º+¨èÄ‚êù„-®¨2Ÿj£Ü<{KÃ/±H©¨" »Šj€N«¨²„Šêl™ §t‡Pfð–$K¬2 `Û*Øš^d`ÙEÆà<‰PbðvÄp×>WbÈ&6†—P`ÈÆvå…
+endstream
+endobj
+14413 0 obj <<
+/Type /Page
+/Contents 14414 0 R
+/Resources 14412 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14326 0 R 14327 0 R 14328 0 R 14329 0 R 14330 0 R 14331 0 R 14332 0 R 14333 0 R 14334 0 R 14335 0 R 14336 0 R 14337 0 R 14338 0 R 14339 0 R 14340 0 R 14341 0 R 14342 0 R 14343 0 R 14344 0 R 14345 0 R 14346 0 R 14347 0 R 14348 0 R 14349 0 R 14350 0 R 14351 0 R 14352 0 R 14353 0 R 14354 0 R 14355 0 R 14356 0 R 14357 0 R 14358 0 R 14359 0 R 14360 0 R 14361 0 R 14362 0 R 14363 0 R 14364 0 R 14365 0 R 14366 0 R 14367 0 R 14368 0 R 14369 0 R 14370 0 R 14371 0 R 14372 0 R 14373 0 R 14374 0 R 14375 0 R 14376 0 R 14377 0 R 14378 0 R 14379 0 R 14380 0 R 14381 0 R 14382 0 R 14383 0 R 14384 0 R 14385 0 R 14386 0 R 14387 0 R 14388 0 R 14389 0 R 14390 0 R 14391 0 R 14392 0 R 14393 0 R 14394 0 R 14395 0 R 14396 0 R 14397 0 R 14398 0 R 14399 0 R 14400 0 R 14401 0 R 14402 0 R 14403 0 R 14404 0 R 14405 0 R 14406 0 R 14407 0 R 14408 0 R 14409 0 R 14410 0 R ]
+>> endobj
+14326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 746.638 204.26 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 722.421 204.26 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 698.203 204.26 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 673.986 204.26 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 649.769 204.26 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 625.551 204.26 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 601.334 204.26 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 577.116 204.26 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 552.899 204.26 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 528.682 204.26 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 504.464 204.26 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 480.247 204.26 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 456.03 183.727 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 431.812 183.727 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 407.595 204.26 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 383.378 204.26 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 359.16 183.727 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+14343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 334.943 183.727 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 310.725 204.26 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 286.508 204.26 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 261.614 134.655 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 237.396 134.655 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.797 225.965 102.76 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+14349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.091 213.255 151.054 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.341 201.747 157.304 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.502 189.038 210.464 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.053 176.929 161.016 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.214 165.421 195.177 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.872 152.761 147.835 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.862 141.204 151.825 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.827 129.095 164.79 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.331 116.435 159.294 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.486 104.878 151.449 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.067 92.092 173.03 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.55 79.984 177.513 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.056 68.552 147.019 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.992 758.747 349.955 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.992 746.638 349.955 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.033 734.529 382.996 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.644 722.421 377.607 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.351 709.711 433.314 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.334 697.652 397.297 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.046 685.494 401.009 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.256 673.435 421.218 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.988 661.277 450.951 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.539 649.168 401.502 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.646 637.66 452.609 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.601 624.951 471.564 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.722 612.766 438.685 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+14375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.093 588.674 396.041 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.093 564.456 396.041 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 540.79 379.212 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+14378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 516.573 379.212 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+14379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.56 492.356 438.523 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 468.138 381.032 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.56 443.921 438.523 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+14382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 419.152 389.568 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 407.595 385.085 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 382.826 394.553 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 371.269 385.085 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.679 358.609 369.642 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.616 346.375 447.579 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.261 334.266 418.224 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.163 322.157 421.111 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.996 310.174 350.959 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.532 297.94 432.48 308.244]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.293 285.831 471.241 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.081 273.722 423.03 284.027]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.966 261.614 401.914 271.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.058 249.505 443.006 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.944 237.396 432.893 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.673 225.965 372.621 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.286 213.179 378.234 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.211 201.747 365.159 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.616 188.962 452.564 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.763 176.979 408.711 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.762 164.744 410.71 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.261 152.636 423.209 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.163 140.527 421.111 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.966 128.418 401.914 138.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.058 116.31 443.006 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.944 104.201 432.893 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.4 92.769 377.362 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.465 80.661 360.428 90.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.341 68.552 354.304 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14415 0 obj <<
+/D [14413 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14412 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14502 0 obj <<
+/Length 3112
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\IsÛF¾ëWà(V:½/¾)åRʶJÙÊÉ&A 5$È`lϯŸ×X(‰†»“™CJ)‹ú¾~K¿­»‰£§Go.¾¼øîV³H##%‹‘ÂHK)C‘$Ñã<úxy÷þfüëèÇ"N%"œÁŸ6q1~¼øó‚À¿ãˆì!´Fšòh¶ºøøŽæð»"Œ˜ÑÑçâ“«ˆ †D·Œ.~¼À‡Ëâ¢cY’ \¯ëu<M'ñt>™¦Oqö¯b!å
+¶OÕR&o.¢WTéKJ«ß— 1ÈP]Š6%àl·ÝÆi~,OSF#Å "‚ž ÔföòËA(^‹ÿHo:"ør·úoû„`M!®A„‘J
+]¢Ý$«0¸©†$Mºt€)“FŠrd÷ш«I1Q’®‹,·ÊO8’Z5—¿œfˈjpNø¨¦Òkù
+U"I@*M¸NgëN×áñ ´œ¡i’·*LPÄ@Q ‡Ùä[?‡ÙZÿµ›°kçpD`ãJ=ä'iQ"ñšy5ýÒÁÉ8b°+p2…0%MÎoß­\B®:%7&„ê
+Aî«-¯'&%å©ôûýn±°žo¯çóI¼è•ù|‹ý7‰¡QÌbÈq1}xçwé<¶Ø_¾°ùC²‰—
+2ÕP R¿ÂZƒY${ªÕŒéÕpŽ($Û¥]2§vÿõóHzÇ7ÄMØM²ìŒ‚ö:N*¡OÃÜ÷C–HW…l²è
+¼mBPÈÊ4)Ÿ×™ÛÌA¶K
+"ÁÒ^㮽Ԁ¤˜˜*‹íll!|ïbÔb’¬G[ÎÉÅ_l bc284pè½æbûÐ
+Ò«4¸8 î«‹­SܺôŠ—ÌöUÚ4¯o–={¿/²ö«çÖ–¶X üdX„Ã^ÅrX‡Êe 1 >gA¤
+!tNhø$ !ER¬jçI¶9%ÚéYùþøK^6ß=Òák[!´ç|y/½PÐœTÒ/¶ñŸ»8}=¥‡|!¸„œ«$ Ý––ú“ö„½E@h1  4dÐAÐ39ÏÉ?¨‘¨þa}øhâÈ9äÿÝþàÆÎöBÈo‘0¯¯ŽåÓS÷”™M$Z†`†Þ‡*ÙdÞ§¦+j£m]{âo³$Ë]‚¯tQï6žæ½
+£°*hR¸²¼ŠtØ™Å#@"LÕÝJqz•l»NטÄH@¬
+À-¢„5¹Ë*¨£+·GÕþ>
+HŠïï‹®³ØG£PBÚb
+ÍI$ÉkÓwÏjO/^ÌÊžH²~{ëâéþ̵§2ÿSžnßû2ÂÓíƒ_Fzº?}åé‡ì<½Žíq1ЛVßwÐö=ƒ48¼áÈ(¿`a/^s ¤”<<Üîv;e«?)ÔU’›i{¸ÆdQº»ÓÞdŸÚP²w¦¾yeÛ–v9F¶¢–‹-•]Š
+endstream
+endobj
+14501 0 obj <<
+/Type /Page
+/Contents 14502 0 R
+/Resources 14500 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14411 0 R 14416 0 R 14417 0 R 14418 0 R 14419 0 R 14420 0 R 14421 0 R 14422 0 R 14423 0 R 14424 0 R 14425 0 R 14426 0 R 14427 0 R 14428 0 R 14429 0 R 14430 0 R 14431 0 R 14432 0 R 14433 0 R 14434 0 R 14435 0 R 14436 0 R 14437 0 R 14438 0 R 14439 0 R 14440 0 R 14441 0 R 14442 0 R 14443 0 R 14444 0 R 14445 0 R 14446 0 R 14447 0 R 14448 0 R 14449 0 R 14450 0 R 14451 0 R 14452 0 R 14453 0 R 14454 0 R 14455 0 R 14456 0 R 14457 0 R 14458 0 R 14459 0 R 14460 0 R 14461 0 R 14462 0 R 14463 0 R 14464 0 R 14465 0 R 14466 0 R 14467 0 R 14468 0 R 14469 0 R 14470 0 R 14471 0 R 14472 0 R 14473 0 R 14474 0 R 14475 0 R 14476 0 R 14477 0 R 14478 0 R 14479 0 R 14480 0 R 14481 0 R 14482 0 R 14483 0 R 14484 0 R 14485 0 R 14486 0 R 14487 0 R 14488 0 R 14489 0 R 14490 0 R 14491 0 R 14492 0 R 14493 0 R 14494 0 R 14495 0 R 14496 0 R 14497 0 R 14498 0 R ]
+>> endobj
+14411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.611 758.07 160.574 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.217 746.638 168.18 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.713 734.529 122.676 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.398 722.421 143.361 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.05 710.312 171.013 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [105.244 697.652 117.207 707.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.316 685.418 183.279 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.653 673.309 148.616 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 649.769 147.459 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+14424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 625.551 147.459 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+14425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.185 600.657 176.133 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+14426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 576.516 157.788 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.649 564.331 201.597 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+14428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 540.239 176.635 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.366 528.13 158.314 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+14430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.898 516.573 148.846 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.944 503.913 161.892 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.475 492.356 152.424 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.292 468.138 176.24 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.292 456.03 176.24 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.458 431.812 194.406 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+14436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.347 407.044 174.295 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.42 395.486 151.368 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.574 382.777 196.522 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.714 371.269 193.662 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+14440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.335 347.052 165.284 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.273 334.943 182.221 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.808 322.157 175.756 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.382 310.049 257.331 320.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.659 298.617 214.607 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 274.399 149.279 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.56 261.739 170.509 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+14447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.703 250.182 199.651 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+14448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.688 238.073 204.637 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+14449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.688 225.965 204.637 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+14450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.533 213.856 180.481 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+14451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.409 201.196 191.357 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+14452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.092 189.087 161.04 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+14453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.703 177.53 199.651 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+14454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.644 177.53 219.592 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+14455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.688 165.421 204.637 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+14456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.629 165.421 224.577 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+14457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.688 153.313 204.637 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+14458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.629 153.313 224.577 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+14459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.541 140.527 176.489 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+14460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.072 128.418 167.02 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+14461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 104.201 134.655 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 92.218 176.635 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.15 68 182.113 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 758.747 415.48 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 746.24 407.518 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 734.159 413.498 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+14467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.871 710.249 384.834 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+14468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.325 687.016 397.288 696.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.162 674.509 484.125 684.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+14470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.171 663.105 367.134 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+14471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 651.15 372.245 660.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+14472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.644 627.24 375.607 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 615.285 368.892 625.073]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 591.374 368.892 601.163]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.571 566.913 447.534 577.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+14476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 543.002 407.518 553.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+14477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 531.599 398.05 541.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+14478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.571 507.137 447.534 517.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+14479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.422 483.778 384.385 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+14480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 459.867 381.032 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 435.28 412.252 445.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 403.297 377.876 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+14483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 379.386 392.562 389.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+14484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 355.476 392.562 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+14485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 331.566 392.562 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+14486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.082 307.104 402.031 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+14487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 295.7 392.562 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+14488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.864 271.113 396.812 281.65]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+14489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.557 247.202 406.505 257.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+14490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 223.418 413.866 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.45 211.337 363.413 221.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.287 199.382 388.25 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+14493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 175.597 413.866 185.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.818 152.238 397.781 162.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+14495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.721 140.283 423.684 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+14496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.818 116.373 397.781 126.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+14497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.721 104.417 423.684 114.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+14498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.67 80.507 364.633 90.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+14503 0 obj <<
+/D [14501 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14500 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14606 0 obj <<
+/Length 3281
+/Filter /FlateDecode
+>>
+stream
+xÚ½\Y“·~ß_1»UY÷¡·X‡c—e'’*•*É9Z±Br(Ëùõ鞃 ‡3΋WµK÷×øºÑ
+C¨ÓÙ#cÄ)U‹YåÇò°{ôþ¡P¢„ÊŒtDPµA8¯%1ªkìòó!_¬`9|Èò°‚k¸»Z”‹Ê‡%ði™OÈËâi]äÔrÓ£–9â`yµ¤'GZ¿¬—ùå˜BÚÌpˉY¡sÄS b®YBñÀèýiû1?
+Íßþz8¼ÈË)9†úBžç‹â Œ7‹â)ŸR™‹:¢òâpòÔéLCä0ÔEù‚$ÎÔ’Hjƒñ$G¶ïÇ’°^k–å«n±Òeb«Q"BsÈ¥JÔ‚”’ÁŠ÷ DªžmÖE3¿NÉ’£Ž²Ù=0uÿ;FÁü'ê¸þ/ÊÊo”¢ÛMvxx1ëU§Îi¿Ÿ½¢Ç!ï†Í°!û¢†$­¾ × <JI ‹‰¬¤EIà¾kÊõ†|žÚ(ì" –éeû¯e^”qFù¹ënßïNÅ*Î[^Ÿ6“©
+,‚U,¶ù%˜¾
+¸jGí¹3±c<bkGr}€dºÚ­ !šj©|ÈÅf³[.Ê|•Â°ß©ŠØs\7¤…Dpî”Æ x6drÔñ­!»Ë]Q®ŸN»é± ë—_ÜVb¼¼°.Öåp3n qÃ…chSD”ÉÆ5Îxm6)@/“”k Îô@«Z
+çÐ
+ª¿ÐÊTÓBzõe¶­ š!H“ùrÕÌ>:‡s¿’rVý1$°bmDĘ)àzÄ€¾ÙÙÐxŽäh
+O
+E¸vœ)àºA!‘?ñlGš¶áãÉl
+P(âµ=PhâfvƒV„@ Ÿ°âL×­‚¨±VŒF<[± 9š¿ã!ÛüÝ… /Ķ#ß1Ûq¦€ë†A¿ x6drÔñ­!»3
+1Pˆžã°ñL#åÕfñt|®`¸ÐùJyà¾á2Ù­òj[Ü*S{2_/¾Â¿ªj¯:|³(þ©mØLJÊØ +
+Œ)¢-KÐ+ $iyH¯
+»s㟠|÷ŠI`Þi®+7ûŠŠ¾ž5 1’µÇn¹î㹘Àº /+aŒdæ†2GÀæl¶€K7­.öà•-Ö˜iäZ‰P°Á[ V]½ò‘«ü»€5PœÈ$‹5‚؆¶3ìfý±ŽŠ°å0«NÙÕMÛU[K4µ·Ûu®€a»¢Ù:v€] 6võ‡³kkÕ U=оUp ŠÕx$eieïb™Ïs¥ìÑ
+¯sñÝ…Ž±–DmCû§S1*!ñàÅ©xPE‰äÎ]î¶ûS9馺ßåb­
+g lÅŒHÁ˜€Œmdcñ -c]PŒe6]ÐDS­RÐ…Èíiç]ñ -]]Ð/\a¾ÄÕö­I«Ðk|ÜrññÓûÍÀ-ja±»IB3„{Žá!/wû‡*¢ï$¸
+á‡Ð1Æ
+§ |$e‚|$´õ‘.è´Äã¶>ÒÅ ñ‘xäÖGºÈ¡DÇ|$ ŽP(‹¤Iá# IKûÍGŽC5$d(.R *I>j¹+§3»¾¼.$´ &L9Vùy<a( ï;wª’!Æ$á°Î°P¿;*|ØíâëÜòS@U¦\pRP®êiIÁéŠFmÙê¢âÍÐc_nVIe†G%.àUµÓ˜Ì”RD2»Óh- ©}`%ð@^³°x"¯˜‹ÇÇs+w|ÚFï¯7=Å¢ýåÅ`ûŽ/t¦«gqí ç(‰çšaäâTî†Ìm%žTå>è-¼CZÍäŒ9è;L
+ΠaÃd^OƒË¡ÂA1ø¤I©ä"ãcÞDƒ2 WßMR†×£ÎiÏ”áµG㢺d°ùÐÀ£’,“xOOÇ%TC¸¨%éÖä‡Ý2?g/
+l)ÝúÐÁÜõ_¸@ô¦Õ›’`JN¥à$áÏš»õ>ß/t ytlΦÁB’ëúãËN>/PŽªïÂÇ^v´¦ºrÐf
+F+®d
+¼Dó­Žn_ÓÏ&¡›-lÈ„K¡¾p†XÊâ 8é&tLJ¾qóøVœœ´óøáâL¢«ò˜
+êXÎ}ÌâÌ^ÞZÆö ;懇GIï‡x“õ`Ø3qcy`ƒ*ÑP1Z"@‚¢ÐÝ'
+µK‘P’l§ªX¹_™Kâ#šxPœKRëƒ~û
+¯¹¤átRËð-
+ªâæª-ièêÖÎiwÆãK€Å¡Ú—&EFEI¼ª^éu$|R¤ÀÄWoÐ5y˜·Fd.+Òƒcú£„ fBøŠFléê ó2Š¨€}AAýȉqÃH¢ºóPà?yW0ŸS)jæðJ»˜:ÌÅ.,twÖ:öÖÕ=t¨á¤YhÎdŠÄË ¬¢œN’Û’Ö…Ý.öQ|5ûãïåám>÷Ž\oXxÈ·Õ÷cUÇùð¸†}Í!qƒS h-I·ƒÓ+ó¶r"¨QÄYáƒÞ2GÀ®T¸¹“"úÃH:ߦŽëâ9(˜
+endstream
+endobj
+14605 0 obj <<
+/Type /Page
+/Contents 14606 0 R
+/Resources 14604 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14201 0 R
+/Annots [ 14499 0 R 14504 0 R 14505 0 R 14506 0 R 14507 0 R 14508 0 R 14509 0 R 14510 0 R 14511 0 R 14512 0 R 14513 0 R 14514 0 R 14515 0 R 14516 0 R 14517 0 R 14518 0 R 14519 0 R 14520 0 R 14521 0 R 14522 0 R 14523 0 R 14524 0 R 14525 0 R 14526 0 R 14527 0 R 14528 0 R 14529 0 R 14530 0 R 14531 0 R 14532 0 R 14533 0 R 14534 0 R 14535 0 R 14536 0 R 14537 0 R 14538 0 R 14539 0 R 14540 0 R 14541 0 R 14542 0 R 14543 0 R 14544 0 R 14545 0 R 14546 0 R 14547 0 R 14548 0 R 14549 0 R 14550 0 R 14551 0 R 14552 0 R 14553 0 R 14554 0 R 14555 0 R 14556 0 R 14557 0 R 14558 0 R 14559 0 R 14560 0 R 14561 0 R 14562 0 R 14563 0 R 14564 0 R 14565 0 R 14566 0 R 14567 0 R 14568 0 R 14569 0 R 14570 0 R 14571 0 R 14572 0 R 14573 0 R 14574 0 R 14575 0 R 14576 0 R 14577 0 R 14578 0 R 14579 0 R 14580 0 R 14581 0 R 14582 0 R 14583 0 R 14584 0 R 14585 0 R 14586 0 R 14587 0 R 14588 0 R 14589 0 R 14590 0 R 14591 0 R 14592 0 R 14593 0 R 14594 0 R 14595 0 R 14596 0 R 14597 0 R 14598 0 R 14599 0 R 14600 0 R 14601 0 R 14602 0 R 14603 0 R ]
+>> endobj
+14499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.917 758.747 132.88 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+14504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 734.159 134.655 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.065 710.926 166.028 720.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+14506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.968 698.971 191.931 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+14507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.157 675.061 139.12 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.536 662.428 180.499 673.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.902 639.195 139.864 648.984]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+14510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.464 627.24 123.427 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.931 615.285 129.894 625.073]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.976 603.33 127.939 613.118]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.588 591.374 122.551 601.163]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.837 579.419 128.8 589.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.707 566.913 129.67 577.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.213 555.509 123.176 565.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 543.554 143.361 553.342]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.199 531.599 132.162 541.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.892 519.643 156.855 529.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.717 507.688 123.68 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+14521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 483.778 140.492 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+14522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 459.867 140.492 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+14523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.514 435.957 145.477 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+14524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 412.047 140.492 421.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+14525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.818 387.585 215.781 398.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+14526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 364.226 140.627 374.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.055 352.271 134.018 362.06]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+14528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 328.361 143.361 338.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.956 315.854 132.904 326.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.032 303.773 175.98 314.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.516 292.495 176.465 302.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.994 279.863 183.942 290.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.652 267.908 187.601 278.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.488 256.63 123.436 266.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.032 243.998 175.98 254.463]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+14536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.521 232.168 175.469 242.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.516 220.764 176.465 230.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+14538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.994 208.132 183.942 218.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+14539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.157 196.854 144.106 206.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.431 184.222 211.379 194.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.977 172.267 196.926 182.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.944 160.311 205.892 170.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.084 148.432 203.032 158.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.138 137.078 148.087 146.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.284 125.123 140.232 134.911]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.652 112.491 187.601 122.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+14547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.143 100.661 149.091 111.001]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+14548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 68 252.372 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+14549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.871 745.961 384.834 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+14550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.808 734.529 365.771 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+14551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.52 721.744 346.483 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+14552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.186 709.635 374.149 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.405 697.603 414.368 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.072 685.494 437.035 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.683 673.986 365.646 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 661.2 380.099 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.804 649.217 400.767 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.877 637.66 377.84 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.031 624.951 422.994 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.171 613.443 420.134 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.847 601.334 387.81 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.829 588.548 389.792 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.8 576.44 399.763 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.919 564.456 372.882 574.635]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.988 552.298 416.95 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 540.113 366.408 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.339 528.682 394.302 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.354 516.022 387.317 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.634 503.787 379.597 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.611 491.804 384.574 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.613 479.57 391.576 489.874]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.023 467.461 403.985 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.729 455.353 410.692 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.122 443.244 385.085 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.615 431.135 385.578 441.44]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.992 419.704 349.955 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.863 407.595 378.826 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.611 394.935 384.574 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.359 382.826 384.322 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.166 371.269 402.129 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.182 358.609 395.144 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.134 347.052 390.097 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.312 334.943 396.275 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.659 322.834 370.622 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.128 310.049 378.091 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.39 298.617 370.353 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.993 286.508 364.956 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.82 273.848 389.783 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.735 261.69 405.698 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.203 249.631 400.166 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.621 237.522 380.584 247.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.684 225.413 378.647 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.882 213.305 374.845 223.483]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.654 201.147 371.617 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.64 188.962 391.603 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.317 176.853 393.28 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+14597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.45 165.421 363.413 175.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.42 153.313 409.383 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.435 140.653 402.398 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.082 129.095 384.045 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+14601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.89 116.31 380.853 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+14602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 92.769 354.438 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 68.552 354.438 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14607 0 obj <<
+/D [14605 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14604 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14684 0 obj <<
+/Length 2941
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\Ms7½ëWÌQªŠ°
+ðOã_\ÜÜ^üÿBàÏy%žL8ÇœTÕtuñáW^Íðw?TœwÕ᛫Ji`:Ø[Vÿºøå‚w‡¥tbXF0ÞŽëf}¿XÏßÍ÷ï׳ùðËÏaÂ3/uu-óZ×_n‡ã\2de•gÀõ©b0üÓ(G'¸fÊÖ–75æn¾½ºÆQý~%õ%þ_óKöé»0Œ{ß äŸï.ª×ÒºK4Ô|¡Du
+çAÆÞÌ×{4-ôåb¾;t¹û¸žÞ^ É/'¯ðßåü 6¨šÇ ÿ¾²hj;ʤw=oRs3_“­ßçÇif(¨\0åTÆô ÁÔ†¤kPìL¶!|’) ñ ~\Loêq5~¿zÕü§þX>¾ˆïÆZ¦mßÉØCßû+B0¦
+ uã¾Aºï'ÛYü³Ýÿ¥»ív“˜.‚¬ŒôÌjÈðÞãÔÊÚÖ÷û/Mºº–L‚ˆG´\|ÜÜýsØLf bJË$¦A#,³8Œ bâ<¯-iïO†CÐÆ@“˜ª%ãÚŨÓÍ ‚iüü¶ loR.TßÛnêf½ÿÏ•B¦,öG·Ãï~¬¢›Ï{D;Šòf±z3ßMÏñU ákØÞ[´i5rÌWZ»À¹ Ò:&²˜º ^ÎWˆÚðÖ2…“˜ÚÉQ8—™JyŠš@ˆž0/Ow{Ü®‘8û¿ÔWÉ™m.w¹ž%“°ClM¿yIX«ÚÔ²Ìfí®/U/“fúÇb·?§”`ÀDžqNÑ«
+8G†@µÎ=î7©mÝ0$MLÁ=“RÅ ³É~ÒìèŽ)èÅ´Véç’€-QÚ³¡DDiφƹõd5? ‹GUÀ9Ú’eßhG–Mõ°Oi
+,i@Õã´ÎŸ$2dZ’í÷ëÉòXÆ*°º†%c0ø7ª„shȪdvà]A,†Ní"G0ÉQ(½Kæ0H %2«ê …@†D
+“û£kEZÅ€CþZ!C‚7õÓd‰™ µ¹×º7TÔfBƨ‹]’ê!äiH”ƒJ¨ž£Ûí•À•MJøKS0zfúÕò)" ¸¦’F¢Lq™ôP[Âr°-ÜV«Íú<— ¡9ãv•4 ·•ÐðOTZn¦)*¡>”0‰I¸åG˜ÝJª_fÛö
+àbÁî„Š“ Ök<]óƒºßC–L”z‡0HRa0Z¢äÿâ –†)W‚ÁhH:ÄàlÌ–Á]Ì ÎÇmÜ>Éà|È–Á]ÈÝt²ltYLÝÉW(œ [‚ºh ä7 .–0ºDÕE†À£n6fKÝ.æâ.5O:Ö@´(õú)ÒJ…ZÄI”ŠFÊ^dÓ.à*é5à®ðœQ‚»dI‰—ç®°ŽS€»dH™AÜÍÇl¸aÆ“}BÑ M d¸L ä0í£Ê–€TDÛ‹ð!‡IY(3Z:c˜åE8Œ–4ZzqkŬ.Áa4¤Ÿ€Os8³åps‡ó‘[w¡Or8²åpämG<Dä‘€•dÖ›äEKÚòg®Ä?2íYû©ÇCB
+®%u†Sjrƒ¼êu4%¼£k¢Òž8ª”$ÏlÈZžE©S—Ðçt,¸Ï¿?ÛKGõÄá;1^½žÒÄÉ ò~½Ø?7YÚŽ½nï®&+—­“xæåØ”©Él– \(3”Î{ÒÄ™•µ%©mOªŒ¾Üë˜p*v`ö¸zi‡u$¯Ûј5Ì®OæEAÊÚÒÓÕš›ÛÿôØN÷Ó£/)1xÎCkÄÓ]ÜÑwm£&“ùa2É°Ò^JK‘3­E%BÅ¥ÚjK¦Ï«ÉçT©NÛ¦&Ýžæ&ÆloQ÷iqBc@­÷ü"Ðå|=–-Ú„«ñ %ã…ü¤û…¤Â|^®’ø`Hµ"þH´ ½›¦¦¡—ÓÈ£u¿ÿ46`8¦ƒç(­"?Zk¿ÄN•õê«ÔöÚ­9Ÿñ&­„^æ>ᯠ%<µÊÀBÀl>cùElòf;V†æI¿!û’ÈÛýb³÷êÐç}œnÖ»Mò”³µw¡sÜpŸÙ<`l0¤Ú®¢u;c³‘.\‡:¢wœCïŽi‡ZH¯< õ€Ì'
+·[ ==øØÜÝíæû±þK¬ÑmÏÿÅ:-è½R^‡«{9J³†
+†¸S_Ã5`÷ÇN׸}ç€ [¢=ÄIæÛ7έ©}\}œoG3î-Œ?ÝÏî8üÚðµãp;ØÈb-ÖÞº
+endstream
+endobj
+14683 0 obj <<
+/Type /Page
+/Contents 14684 0 R
+/Resources 14682 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 14608 0 R 14609 0 R 14610 0 R 14611 0 R 14612 0 R 14613 0 R 14614 0 R 14615 0 R 14616 0 R 14617 0 R 14618 0 R 14619 0 R 14620 0 R 14621 0 R 14622 0 R 14623 0 R 14624 0 R 14625 0 R 14626 0 R 14627 0 R 14628 0 R 14629 0 R 14630 0 R 14631 0 R 14632 0 R 14633 0 R 14634 0 R 14635 0 R 14636 0 R 14637 0 R 14638 0 R 14639 0 R 14640 0 R 14641 0 R 14642 0 R 14643 0 R 14644 0 R 14645 0 R 14646 0 R 14647 0 R 14648 0 R 14649 0 R 14650 0 R 14651 0 R 14652 0 R 14653 0 R 14654 0 R 14655 0 R 14656 0 R 14657 0 R 14658 0 R 14659 0 R 14660 0 R 14661 0 R 14662 0 R 14663 0 R 14664 0 R 14665 0 R 14666 0 R 14667 0 R 14668 0 R 14669 0 R 14670 0 R 14671 0 R 14672 0 R 14673 0 R 14674 0 R 14675 0 R 14676 0 R 14677 0 R 14678 0 R 14679 0 R 14680 0 R ]
+>> endobj
+14608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.449 746.792 158.398 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+14609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.882 722.881 147.844 732.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.273 710.926 141.236 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+14611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.924 687.016 189.887 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+14612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.924 663.105 189.887 672.894]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+14613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.808 639.195 206.77 649.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+14614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 615.285 204.26 625.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 591.374 122.685 601.293]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.138 567.464 143.101 577.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+14617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.514 543.554 145.477 553.342]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+14618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.514 519.643 145.477 529.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+14619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 486.983 140.627 496.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 462.395 134.655 472.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 439.162 140.627 448.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 414.575 134.655 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 402.745 176.635 413.215]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 378.709 134.655 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.808 355.476 206.77 365.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+14626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 331.566 122.685 341.484]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 306.978 134.655 317.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 283.068 175.254 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+14629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 259.835 183.727 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 235.924 183.727 245.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 212.014 183.727 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 188.104 183.727 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 164.193 183.727 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 140.283 183.727 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+14635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 116.373 183.727 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 92.462 183.727 102.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 68.552 183.727 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 746.638 415.48 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 722.421 415.48 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 698.203 415.48 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 673.986 415.48 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 649.769 415.48 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 625.551 415.48 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+14644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.91 601.334 370.873 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 577.116 372.245 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+14646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 552.348 389.568 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+14647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 528.081 427.369 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+14648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.915 515.972 376.878 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.416 504.464 374.379 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.392 492.356 379.355 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.822 480.247 400.785 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 467.461 423.881 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+14653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 443.921 372.245 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+14654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 419.704 377.23 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+14655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.816 394.886 405.779 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+14656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.859 382.777 392.822 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+14657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.84 358.56 396.803 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.491 347.052 352.454 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.976 334.943 375.939 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 322.283 360.921 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.156 310.725 374.119 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.639 298.617 378.602 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.417 286.508 372.38 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.417 274.399 372.38 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+14665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.008 262.291 406.971 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.775 249.505 408.738 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.84 225.364 396.803 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+14668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.709 213.856 359.672 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.575 201.747 365.538 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.312 189.639 396.275 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+14671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.89 176.929 385.853 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+14672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.479 165.421 355.442 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+14673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 153.313 360.921 162.94]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+14674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.978 140.653 393.941 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.381 129.095 404.344 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.981 116.987 355.944 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.141 104.878 381.104 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.146 92.769 378.109 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.983 80.661 398.946 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.625 68 413.588 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14685 0 obj <<
+/D [14683 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14682 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14754 0 obj <<
+/Length 2906
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\IsǾóWÌ‘¬
+;½/GÙ¢d¹,É™¥Jña I”A
+ü×ðgW×gÿ:cøwZ° k‰å²˜ÞŸ}ú•3üîÇ‚álñGóå}!• ª¡·(~9ûËÝ?–T{Çr”ÒšÚŸkõPΨÀ—¼ù’ëCà`Ðí?GdTiy9+ërQ-ÿÔ඀›Ûyòö¬øtÉ=ªû}ËMqÉ°~2â”jIÕóûj9?¾á
+°ÒAU
+L'[J`¦E­–åoœž/ªÙ©LpA˜0ñxÁÕy¹ÙÆô` õè‘ÆT/ZB¿Á]^0zþp?Æ‚° \c™—${‰¼¼úðùñNMma˜&ZÊ„ã;Gœ3 !);©}ÿjòº¹O—Žpœ#éj³]\.æuuÁÔ9¹a‘99´5
+JÔ¥ÖtÌ^­û˜¡ZК‰(”Z‹ÆЫeLÄÆeuL s3:Êîï]–þ¬:Ɇ}mDzذ/îØ7´advBg±aPbú R¹D2909òDcBÌ w©$´: #Zõ:¡Y´ŠŸ”¾†V#ù¢¨h $5R±”J¥ZB¾³‹²Ÿçǹ𮉑,„ôéSÌ|(r
+Ó94ŠÀãúÙÅbu;Ÿ–‹˜lQ‚P•™4aN…¸må#ã¿; K”_2C†vrdâ
+GÝ–,VOÈ[n[Q´Ì=7«G NÇm†õš‡ÀƒJØá ;¥¿Á$"mðÐUžë_\ £^ÓÚœÄæ(l@‰IwŠß¦,±’çÊUd°Gb}¿ü`¸ƒód,°wdž²ù©¶în:2
+ö’]ú¢æ~Û%‡¨Aˆ÷mòõ]3”Ø>çVQØ3ž›!£w”‡à·êGEŒ}‰[µ©²¥°û¤îm/[}óv=_W‹yÛ`Œ%ý_ÄÛ7)ê™öwŤËÇR}¿q½YM«í6«xNV=ƒË3.C¿‚5¾³cmSu•tµœ>«ÿWþ“‡zõº¬Ë16éA+ø¹ÞAÄ$Ë
+1܉ -·¦©/ºîW}ëÛ*BµÎ€èP’)"†í èÁ]x¹V~PžA¢–£¶`‡÷©Aè´é¾d¨ 0ŸV5P:fò¬j„~kø³àÀ°ÜïÇÑ&gow̪zRmm'i_º òïÛ…–¿·Ùçz=ªe¥žÑ2Ò=j:£º+##IÁ шi†“¶ÌªsA[J´ß2[TËÛú®a”.EÈgWêy™ˆCž¡'çûq.T …A¥À“ü¨àÞ·”hïH«e {é÷&ÐRå÷NÓ¡%²ÎCèéýºKÊ
+ã@Š*¤_¶t°JFP¡§KáÛRbBôña±YÊ<fÊr 3Óóòûf]o®/îE¿}<©nçÛn[æ+_£†ªx:Lg¸áy~Þ¬Öåm7#~‰õf_·ô¦UÌø}ëP©«JZ7‚ÂÈZJ¢_7ì:XËò¾ U–0qºún‘t9ì”úÆàÑc>7À}×ùî¾¼­NÜ©j6ž ÉÐBŸœº¶;M»Ÿ=è žÙ4Œ<´ñ~oC'unãÍŽ©§äû ûÏ,‘ pžèÍÃrZÏWËÓâ½PG1;„öÎ{|ÿñݘAòƒR“õ4>N~ùiì§p:T¬DJ¡ ©±&)¥`þyAKIõÜ °P(]á/O‚|$£ŸJƒQ¿(M¿»áY|œwõY„ÉôôH‘2Sær0ˆŸ–u-Àûyd7E ¾øm£ ˜B6ò
+Ï£r€
+Ę̀èÅ`¡uS‰e€Æ­ \„ÐÑÅCa)J›Ó¶;šf¿yX\jz`@ñ‘“ðJÞ¦†¨“êeÿÊ¡K2eΡÙqpçge`À
+–šÓFfÇ];?•,GBÓŒe™>æÚe
+endstream
+endobj
+14753 0 obj <<
+/Type /Page
+/Contents 14754 0 R
+/Resources 14752 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 14681 0 R 14687 0 R 14688 0 R 14689 0 R 14690 0 R 14691 0 R 14692 0 R 14693 0 R 14694 0 R 14695 0 R 14696 0 R 14697 0 R 14698 0 R 14699 0 R 14700 0 R 14701 0 R 14702 0 R 14703 0 R 14704 0 R 14705 0 R 14706 0 R 14707 0 R 14708 0 R 14709 0 R 14710 0 R 14711 0 R 14712 0 R 14713 0 R 14714 0 R 14715 0 R 14716 0 R 14717 0 R 14718 0 R 14719 0 R 14720 0 R 14721 0 R 14722 0 R 14723 0 R 14724 0 R 14725 0 R 14726 0 R 14727 0 R 14728 0 R 14729 0 R 14730 0 R 14731 0 R 14732 0 R 14733 0 R 14734 0 R 14735 0 R 14736 0 R 14737 0 R 14738 0 R 14739 0 R 14740 0 R 14741 0 R 14742 0 R 14743 0 R 14744 0 R 14745 0 R 14746 0 R 14747 0 R 14748 0 R 14749 0 R 14750 0 R 14751 0 R ]
+>> endobj
+14681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.88 758.747 151.843 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.653 746.792 161.616 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.071 734.836 144.034 744.464]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 702.176 147.961 711.964]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+14690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.013 678.265 147.961 688.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+14691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 653.804 175.765 664.215]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+14692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 629.893 176.635 640.363]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 605.983 176.635 616.453]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 582.073 176.635 592.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.852 558.162 162.8 568.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.852 534.252 162.8 544.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.852 510.342 162.8 520.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 486.431 175.765 496.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+14699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 462.395 134.655 472.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.185 451.117 135.148 460.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+14701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 427.207 148.589 436.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+14702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 403.297 148.589 413.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+14703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 379.386 149.279 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.33 354.924 170.278 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+14705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.861 343.521 160.809 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+14706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 319.61 149.279 329.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+14707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 295.023 134.655 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+14708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.852 271.238 162.8 281.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.383 259.835 153.332 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 235.373 176.635 245.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+14711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 211.337 134.655 221.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 187.427 134.655 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.185 176.148 135.148 185.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+14714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 151.561 134.655 162.027]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 128.328 143.854 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+14716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 116.373 137.139 126.161]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 92.462 148.589 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+14718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 68 176.635 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+14719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 746.182 389.541 756.571]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 712.747 372.245 722.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+14721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.406 688.142 417.354 698.679]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+14722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 664.291 389.541 674.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 640.363 389.541 650.752]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 616.484 407.518 626.896]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+14725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.525 594.287 343.488 604.752]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.981 583 355.944 592.788]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.341 571.036 354.304 580.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 547.108 372.245 556.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 522.629 413.866 532.969]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+14730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 499.252 354.438 509.171]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+14731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 486.611 366.408 497.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.948 475.324 362.911 485.243]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+14733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.379 451.397 380.342 461.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+14734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 426.792 366.408 437.258]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 402.99 408.388 413.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+14736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 378.936 412.252 389.532]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 355.009 366.408 365.474]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 331.081 366.408 341.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 307.278 394.553 317.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.136 295.866 385.085 305.655]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.634 271.387 384.582 281.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+14742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.166 259.974 375.114 269.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+14743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 235.495 408.388 245.965]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+14744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.934 223.482 372.897 233.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+14745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.479 212.119 355.442 221.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+14746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 187.514 366.408 197.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 163.586 366.408 174.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+14748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 140.335 372.245 150.124]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 116.407 377.23 126.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+14750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 92.48 377.23 102.268]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+14751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.171 68.552 367.134 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+14755 0 obj <<
+/D [14753 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14752 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14841 0 obj <<
+/Length 3904
+/Filter /FlateDecode
+>>
+stream
+xÚÅKs·€ïü{«"ÆK·$V\v9qb«’T)>P$-³ÌW–+ÇίO÷ °–³³¢µ<¸(KËþ€ž~¬\}\ÉÕ—'|wòû?³
+":gVï~\y)‚s+µpjõîbõþÕWýâí¿Nx÷õ
+´
+ þjý'oßüçDáßË•ÚŠA «ó›“÷?ÈÕþÛ×+)L «ÿŸ¼Y5Âò®WߟüýD–Ã;1,§„Ìãºz˜`{|>§Ý§·Ü§¼ …u¡æ­×O¨'ét?0‚ðV×À‹Ë‡ó§D¥@híû‘J9•¯™çw·›«Ÿî> Ê]½¦'Ž”×J‰hmúÌåÙíÔ¸¤ð¤3ˆÂHÛ50#ÀŽ’”t#ôÓæêZœßßÿn ÈõÇÄþîË“Õû×Ú‡WJÊôÑ”pHs~Ñ Œ†e(HYULৃÃW;Ã-lÔiøî°åk‹#µ ¦‚T´ ¦ßM̶_ï7D%-~J
+ÿtà G»ó€UQÛš6÷€¥€á£ ò>ÕòÕ/§Ú¾:»º>û@ÿw}9h}BëeüéÛ¯Ù±©g)kùwÿ5v¹> ÏvjÍ9‹ù,ökNörs¿ùí©’Ü!‹ùîòìâëõÛëË›ËÛÍéÙ9uPÂKŽ©£ ‹‚ƹßf+¹Øk&ß~÷ý7‡ì¤÷¹¢¯zœIÿäPir·w·”§2„Rz¬RhÑ×Ü‹‡Mʺ ¢Üɺ)Î5²˜Ø§TA©$È…V¥öc³R+îÃú|B©îèJuøyÏ¡TäQÐ8¹«·g³>¸'
+˜­ƒÎÙ‚ÃâÀ3Ì,Vþy¶›³s
+:?O•J, úÁJÂДTä!Ö}ú1Õf¨W^Ê;± U–Cµš€ªÝ\ïMfÛ¬¿8Ûªm|˜ÍúÇÓ'tTý:"A2ê]íÚVÂÆ0PÉö¼65³ÂíÖð¢ù¼†÷Õær,Ê0FŒÖ0ñ¡ÄüæêaóæMùF`üžhl¼r£÷óÍýS‡ ¨hŒ}º§ÕÀV׌rÐüSíK!Rß^µÜnnòXmë~°Â)*¿C¾9{˜
+eØò)Àiè[âælýñr*»€Í
+=ïþ Ðäÿô1¯M‡€›éºÍâ˜ôÊX/bè²`‰Ü(ɧ¾óúêÛ7?O€( 6º \,¤w¯Å9/,V© T?v%uÖà¢γ#jÎÕäi{ÓØÜÍñlµ!UýlGs[\ƒzS{âëá½£fÛ«–Hmp.ž%VZ¬iÉrýÈœå
+äOwm)N3¥8jº5p(Žºnm[4×ÏÌš+™õú½7KRªÂ:ÞE†”*1k¸¸ÝݬïN|5k¨•d
+§<ƒòH¨ðB¥®òA8Ç°=I‚À™OìGfO¬˜-žÈ€NžX¡÷T¹Ö‹ 9T¬œVíèø~}7UÆÒG°¬b€…: 5tsÐhMð‹+ åðÉI·AI%Ž9 Ìs*æ Ä;:fPJ²V¿TÌÁ>ÅGÇs†ƒæ¾%æt#·1§d6Åœ~tŽ9%ú@Ìé‡æ˜SBÄœ~hŽ9%´lç«°ÓÒÎ+#‡õþvž$¹|Œúp;Ï
+&m¹X3g­<€ÐŠœˆr½§—a8æØÕhHÖú:måšNa›Î
+Oª7‹T8Ô¬ =<8ÀÞˆ`T ž6q¬ó¦Vf óúºfΙ8(|"ž j\^«Ð“&ø …é•ièr
+_3÷9¦â 9
+l@A°„>³WAÑÖ·³U™’4“• , %Ñqäý¹Ý`.vtûG?=ËXW3û[•"&µ¨Nb¥ÞµÝ±U¤u¥Ð¢º~fV]ÉähWZK‡}‹“¡t I™³¥3•³¥t`@§Ò¡B—9u»×Y<‚Ùœê°E€r*I2­•›2jͧ Ä”O bK6íçlZ€Ÿ—b"æZöD·c¤‡QNÍ'I’œ=’ã$3ÅÉŠÉ“b¨èmSá:‡÷9T×Ï̪+™GM1:t®lSŒö"8Û’bú™9Ṟ́±¿¯KØ\Ý\N=8‡™<rŒÀG¡e¬G°];ÂúÙ9»¸Lr-G…I’¼õ-6ÜÏÌ6\29¶·
+82¸$I²¦¥êc`&—¬˜ \’aÉ%«”Åß”WÎ%:ŽõFµVýÜTüUÜÙò¯™ª¿
+Ùðü¨Å8Ô=
+d`fÕ•L®*0´äCoˆ9Žœƒ’”nJ:ýÌœtJæöæÔ‡«ÿQΞ\{°#"Ç|®.¨Fð¸ˆUËË@@Uj–]S’$›vM˜Ù†Kæñ—.‘e Ð!ò³”-.i"Ç°‰^©ܱ“—\±â-pÅNzrÚ>Uï¬{at@krÛú<V´ íb³%¡¡ëBÝl¶$ÉEÝàó Ìäóóø>OÃð,Û§$É>¾Ù¾Ôç]gëgœÂî8ü%‡¿ïgfß/™K|¿Ùÿ«ì÷ÿ~`Ž%°ì7«0вç@¶l;7GÇ~“$çZûMpê7+ðl¿ÉÀLýfÅl°9ú^/G÷xv€®}¦/ªG0u’“ŠLÏA$SIc7õýÅ;ØwƒÉC_luIRÐRä20sÂ+™Í=®áYé4
+£Xß–iV}IËê
+5åcùê±£}I4ÇëH’7®!ê00SÔ©˜-Q‡¢N…ž: Ðu*è|Ôé‡æ¨SA«‹
+IR±¥Wa`檡d6U ýè\5”èêüïÄÂÁl.£VúS)
+’¡ùJ~lJ¤%v.öÇ4Zò²h76%Ñû¼Ìí°Rþ’÷Ëô¾“¼½#åÀÍq·Ët¿oHy$>3­äŸõw›r‡[‰ç† Ö ‡–«‘Zô9ºz× —¦ÒísÃñæaæÃHµªm
+endstream
+endobj
+14840 0 obj <<
+/Type /Page
+/Contents 14841 0 R
+/Resources 14839 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 14756 0 R 14757 0 R 14758 0 R 14759 0 R 14760 0 R 14761 0 R 14762 0 R 14763 0 R 14764 0 R 14765 0 R 14766 0 R 14767 0 R 14768 0 R 14769 0 R 14770 0 R 14771 0 R 14772 0 R 14773 0 R 14774 0 R 14775 0 R 14776 0 R 14777 0 R 14778 0 R 14779 0 R 14780 0 R 14781 0 R 14782 0 R 14783 0 R 14784 0 R 14785 0 R 14786 0 R 14787 0 R 14788 0 R 14789 0 R 14790 0 R 14791 0 R 14792 0 R 14793 0 R 14794 0 R 14795 0 R 14796 0 R 14797 0 R 14798 0 R 14799 0 R 14800 0 R 14801 0 R 14802 0 R 14803 0 R 14804 0 R 14805 0 R 14806 0 R 14807 0 R 14808 0 R 14809 0 R 14810 0 R 14811 0 R 14812 0 R 14813 0 R 14814 0 R 14815 0 R 14816 0 R 14817 0 R 14818 0 R 14819 0 R 14820 0 R 14821 0 R 14822 0 R 14823 0 R 14824 0 R 14825 0 R 14826 0 R 14827 0 R 14828 0 R 14829 0 R 14830 0 R 14831 0 R 14832 0 R 14833 0 R 14834 0 R 14835 0 R 14836 0 R 14837 0 R ]
+>> endobj
+14756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.852 746.24 162.8 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.383 734.836 153.332 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+14758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.818 710.375 215.781 720.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+14759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 687.016 122.685 696.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 674.46 157.788 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 650.599 252.372 661.069]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+14762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.195 627.24 131.158 637.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+14763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 603.33 140.492 613.118]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 579.419 140.492 589.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 554.957 176.635 565.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+14766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 531.599 140.492 541.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 507.688 137.139 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+14768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 495.733 140.492 505.522]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 471.823 140.492 481.611]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+14770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.356 447.912 167.319 457.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+14771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.455 426.53 189.418 437.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+14772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.201 415.252 128.164 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+14773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 390.664 202.413 401.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+14774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 378.835 177.944 389.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.927 354.799 262.89 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+14776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 343.521 146.123 353.381]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 331.014 196.432 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 318.933 202.413 329.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+14779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 295.023 202.413 305.56]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+14780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 283.193 177.944 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.141 259.158 267.104 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+14782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 247.879 146.123 257.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 235.373 196.432 245.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 223.292 202.413 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+14785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 199.382 202.413 209.919]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 187.552 177.944 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 163.516 202.413 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 151.687 177.944 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.14 127.651 271.103 138.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+14790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 116.373 146.123 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 103.866 196.432 114.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 91.785 202.413 102.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 67.875 202.413 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 758.195 409.697 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.41 733.852 498.373 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+14796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 722.421 377.876 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 709.761 428.185 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 697.526 434.166 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.577 673.309 457.54 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+14800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 661.877 377.876 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 649.217 428.185 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 636.983 434.166 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 612.766 434.166 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 600.782 409.697 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.171 576.44 469.134 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+14806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 565.008 377.876 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 552.348 428.185 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 540.113 434.166 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 515.896 434.166 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 503.913 409.697 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.25 479.57 456.213 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+14812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 468.138 377.876 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 455.478 428.185 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+14814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 443.244 434.166 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 419.027 434.166 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 407.044 409.697 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+14817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 382.701 434.166 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 370.717 409.697 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.932 346.375 475.895 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+14820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 334.943 377.876 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 322.283 428.185 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 310.049 434.166 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.221 285.831 468.184 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+14824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 274.399 377.876 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 261.739 428.185 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 249.505 434.166 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+14827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 225.288 434.166 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 213.305 409.697 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 188.962 434.166 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 176.979 409.697 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.391 152.636 502.354 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+14832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 141.204 377.876 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 128.544 428.185 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 116.31 434.166 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.075 92.092 457.038 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+14836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 80.661 377.876 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 68 428.185 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14842 0 obj <<
+/D [14840 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14839 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+14930 0 obj <<
+/Length 4145
+/Filter /FlateDecode
+>>
+stream
+xÚÅKs¹€ïú<JU1‚÷÷}Ø[NÙqEq%©Úì’(™e‰THj7ίO÷Ì@FÃPhS'¹,ª? ÑO ä³›Ÿýrò㧓?¿õjæY°VÍ>]ÏgÞÚ™ ’Y1ût5ûõôÝ_~ó¯³ß>ýe¦¥eB+øÓü'o>üçDÀÿó™xá=óRÏ.ïN~ýÏ®àw™q¦‚ŸýÑ|òn¦b¦‘w;ûûÉßNx:,m’aÎ\
+û5N„Ìí·DyRÃÔ5…ò@’S&N¤µ«Å™0§%óqöé|ø!îôU%º#² hÚ«‰ÑSâ!îX?€èŽéZÜï‘wËË!&Ì…C®J)þÝJ2¢cÞ./^¿þ2ì)ï)ÀZ‚Åù<l
+bÎס50c¾Ò0eÕÀcݧÀoY üâ»V( ÒX‰ùÖ3£ù¦Ìã×}ÖVŠºÏ(øì mù “pÞŠñ¾ î«'FoL‰xc=?zc>e â-ç·CeeBZ
+¶¦°½ÉÇH`¡²äàH
+ P¿3Hr.”D‚zfŒ)óø‘@ }ņJ²î…ö’9+ê
+2ñYâX ¨'v #–~zS.ì.dì´Š£ ¨†JÎV>mP”¤*m@ À]šGPf×€ö';e}°^*Pð½\ÒŸòˆíIXÜs«GK ä©œýÌö3¢“äíïñ[[h!)*9”$UILÀì’_Æ<öC ñO‘œyAIBºÕÕ3£êRæ`-%4q%7
+âãY»L[MŒ™6%iëù1Ó¦ȶ[Ó¸d»U ÞØ:A¶ƒh"³ ÛÕƒc¶KÁãÙ®ž³]o²…Ù®žße»_–qtÏ]¡È–>ì‰uÇH8
+¦âI£$[ô¨˜€ÙEÍŒyìWåsuOP£ê@’ñ%ǘQu)óˆ GYà;]ŸpPŽÏZÇN=±K8±<á𻄓 `÷y³~¸ù|ÿ04sç ¤óhÁRúÞÜã‡,¢ÜÁ¥šÒÚDŠ*%)kK<§ž='e‹}E‹’¤y©=% üô
+îbž®¬{N•×¤ ÿBw“”AÁ‚¤ Ñ š£AJ< Ôóc4HP êù1dü¤ê
+£U·–)Šƒ½(H¸Ò¢»ÛÕÜ)v´æ®'v%wo¢e%w=½­¸Sø¤ÝI˜Ä€Y ǪÛ•ÓŸYuCýÎå îp‹ kßqîÂ7´¦d›–€Ù後yìnŒ>\SÊ.¾‡MÀŒªK™åeƒãcUwÁÛ+ÂB€¬zžÞåYäTÁ‹ËõÄ.ÏæÄݼ}cu»üÖ(ƒ/.+¦ ±!€¶Œs•àÛ=xÒøö çIŽ $[t$€€í7eVØïsÖ¶òMä¨<”¼‰|ä—É°´<¸#ÒG ëÑSàÎXÏΘ`¨ÒÍ©> QÍI
+üvŽX² Õáö+£xÄ„r/y‘¨š?%¾€ãCOóö8JJÞä>r¿ ix‚W{âÏ™«yÛg¼r·¯Çw^Ÿñ÷{}=¯sú”—ðûÑÖÖ+hV4Ak -\p¦´µ­Çv­mŠmmë‰]k› L-hn]Žq“Ó‡Ž£ZD=NrÝœoOyeݬyr@XªGHýŸMÛíðmôÀ›÷¹¦"6žD!Ô_½¦p¯Ö‡‚Ûޞ׶Ìáù#ezÌÕ7¸Ø- 8<ÊÁ …æð&5nK4WÏŒªK™ n¢¼Áˆ§ ¯ó ›»Òªº=%%s¾ùd$ä)Õ¦™z$NõÓ1O9HOÖ ÀAgkl>€ìj®ØäŠæ:ˆýù§‚Øá¡ŽP§”
+7IZ–¸i=2ºi‚¤ØAJJ’ÕAgo-Er@IÚjê¤â¨£Ec¢Q$™Ø2NEzjŒ:)µ(êÔ£cÔIÑQ§úuRèDÔ©‡Æ¨“B³³g´ ·24ý}A’ŒÑ¥=¸+è3ð>;x3*3À¿CŽ3r …·&™-–ò¢?Ûa#×s| €BLÄ«E2è#Çú
+Ó@=ÖUk›CŸÙ´€&—/Ø´Xn˜¯ºãý1/$;zžá1§×3cNO™ÇnZL
+‰ê`ëpØíùrëàðùºÁh I¹b—ªçFëH¹“ÖQÖ‘b×{6wLÔ3}hï˜È˜CÚ ŽYá šÃǹϑϲGè¬.¶G8Ì€"Z¡$-J£·³ÇŒ Uþn³>JrÄû¬¥ðd”¤m©'p£æRîÍàCyãá“ž‚‰WEŸ3¡ØÜ,¶ÛƒWªyµNWÂZæ8‰ƒ$·ã§WªžW*åÞÍï¿»mÍœ!±m|;)ûúQÕs£ÆR.$©«ï®2 }cÝ3Š¨²f§¶ØÈê¹Qe)w³¸]Ì·{^}pœd¾
+ðð|{x3ˆ/×›ò½¡ðúA±RðÓêbã®çÆ•J¹Û}[ZKÁ´¼ ²9s÷œF
+›áþ)“±uj¾@ŠÄ£@’õÅUÏë”rVÇÜøUŠÄ¶ñ;«T±m×s£ÎRîÝӌڮ}ºFšGak ÈÅgu—ëåýò~1¼Ý*@v=Ê*< •Rïæÿ
+Ûx?µ" zɸQq…›­w“'Ä“Ç… Ó?Æ2²LÌMR˜7ÌÂKñ­iX®æ»åz5|Š ²³ÍÍC)y¹jcUsB¸ý°ÑùT×ø ä÷3iN ÖêÉθfœ—çY'*¿w<®•ƒ¯V¿Z`s÷ûòrЫð;‹ÝSº <¸TP– å €¯ÑõpµÞ Ÿ¦ò2=ÔÇ"dÄyóôc¾¼¯ULZ‰|}=u1ŽwÄóF«|ØSñÛ¼µ/Áƒ(H6[öïúÿZ¾3
+endstream
+endobj
+14929 0 obj <<
+/Type /Page
+/Contents 14930 0 R
+/Resources 14928 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 14838 0 R 14843 0 R 14844 0 R 14845 0 R 14846 0 R 14847 0 R 14848 0 R 14849 0 R 14850 0 R 14851 0 R 14852 0 R 14853 0 R 14854 0 R 14855 0 R 14856 0 R 14857 0 R 14858 0 R 14859 0 R 14860 0 R 14861 0 R 14862 0 R 14863 0 R 14864 0 R 14865 0 R 14866 0 R 14867 0 R 14868 0 R 14869 0 R 14870 0 R 14871 0 R 14872 0 R 14873 0 R 14874 0 R 14875 0 R 14876 0 R 14877 0 R 14878 0 R 14879 0 R 14880 0 R 14881 0 R 14882 0 R 14883 0 R 14884 0 R 14885 0 R 14886 0 R 14887 0 R 14888 0 R 14889 0 R 14890 0 R 14891 0 R 14892 0 R 14893 0 R 14894 0 R 14895 0 R 14896 0 R 14897 0 R 14898 0 R 14899 0 R 14900 0 R 14901 0 R 14902 0 R 14903 0 R 14904 0 R 14905 0 R 14906 0 R 14907 0 R 14908 0 R 14909 0 R 14910 0 R 14911 0 R 14912 0 R 14913 0 R 14914 0 R 14915 0 R 14916 0 R 14917 0 R 14918 0 R 14919 0 R 14920 0 R 14921 0 R 14922 0 R 14923 0 R 14924 0 R 14925 0 R 14926 0 R ]
+>> endobj
+14838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 758.07 202.413 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 733.852 202.413 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 721.869 177.944 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.916 697.526 236.879 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+14846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 686.095 146.123 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+14847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 673.435 196.432 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 661.2 202.413 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 636.983 202.413 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 625 177.944 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.541 600.657 230.504 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+14852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 589.225 146.123 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 576.565 196.432 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 564.331 202.413 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 540.113 202.413 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 528.13 177.944 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 503.787 202.413 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 491.804 177.944 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.778 467.461 248.741 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+14860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 456.03 146.123 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 443.37 196.432 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 431.135 202.413 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.995 406.918 223.958 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+14864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 395.486 146.123 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 382.826 196.432 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 370.592 202.413 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 346.375 202.413 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 334.391 177.944 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.091 310.049 270.054 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+14870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 298.617 146.123 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 285.957 196.432 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 273.722 202.413 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 249.505 202.413 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+14874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 237.522 177.944 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.808 213.179 270.771 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+14876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 201.747 146.123 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 189.087 196.432 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 176.853 202.413 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 152.636 202.413 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 140.653 177.944 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 116.31 202.413 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 104.326 177.944 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.677 79.984 243.64 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+14884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 68.552 146.123 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 758.195 428.185 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 746.115 434.166 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.719 722.204 467.682 732.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+14888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 710.926 377.876 720.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 698.419 428.185 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 686.339 434.166 696.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 662.428 434.166 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 650.599 409.697 661.011]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+14893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.361 626.563 512.324 637.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+14894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 615.285 377.876 625.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+14895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 602.778 428.185 613.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+14896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 590.697 434.166 601.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+14897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 558.714 436.013 568.574]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+14898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 534.803 436.013 544.664]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+14899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 510.216 407.007 520.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+14900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 486.431 394.553 496.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 462.395 412.252 472.991]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+14902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 438.611 394.553 448.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+14903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.91 415.252 370.873 425.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+14904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.871 390.664 384.834 401.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+14905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.677 379.386 421.64 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+14906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.162 354.924 484.125 365.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+14907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 331.566 354.438 341.484]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+14908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 307.055 389.541 317.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+14909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 283.144 389.541 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+14910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.107 259.158 429.055 269.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.403 247.879 395.351 257.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.424 235.324 385.372 245.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.673 223.969 391.621 233.829]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.984 212.014 435.932 221.874]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.22 200.059 441.168 209.919]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.887 187.503 395.835 197.964]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.339 175.471 414.288 186.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.195 163.642 384.143 174.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.697 152.238 384.645 162.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.847 140.283 409.796 150.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.383 128.328 401.331 138.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.166 115.821 394.114 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.818 104.417 385.766 114.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.348 91.911 433.296 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+14925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.615 80.507 424.563 90.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.306 68.552 440.254 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14931 0 obj <<
+/D [14929 0 R /XYZ 70.866 789.024 null]
+>> endobj
+14928 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15050 0 obj <<
+/Length 5834
+/Filter /FlateDecode
+>>
+stream
+xÚ½M“#¹q†ïó+ú8á-¾«Ã²Â:8Âö±ÒÛÍéa¨›l‘l­Ö¿Þ™Å&QSde1Ñ>­BÛ‹‡•ùH Pxû‡ç‡þáŸþåçOÿüoÑ<Ä.yo~þúú.zÿ’î¼zøùéá—Ïÿþÿú‡ÿùò—Ÿÿô`µï”5ðŸÖÿâÓ~þô·O
+þÿþA•&b좶¯Ÿ~ùKÿðÿîO}gR|ømøË×ëLç†ö^þûÓ~êéϲŽü¬Ôw!AÓ^u}þ]?¢“ë¢2ßi‹ O—
+v;×ë÷´ûúõ‹é?oÛýùG´2ªSøØR¶2¦‹Î×ðÓqæi•õ±-6u½™ 7û§¤·k`åC§§>÷3Äh»ÐÛÈàÏí$®»ÿý¢ÜçíéŸòy|ÙÿõÇO¿ü¤Cü¬Tÿà¢Ð‡Ÿ’ï|o~RºS}ZT$DX9Ý@’þ/hhàmQÿ¢áf%©ûΆÔ
+ ¾³)5P(4dÖêS /úüN_V§œšÕùº¬M95ksJ½G%0¾¦Þsg>¥å¿\% ¾qýòrØ̉C¹.E߀ Ÿ‚5î~=bÁ
+½
+F´ÄÈ-ÊÄh¹Ž–K
+Š¯µ#6äLbDKŽÌѪ˜-ÿÁ=Ñ(ßÌ/ØŽ5Š,)±ÄŠ"ß6ÇÓÜ”f Ø2®Êt£] ½^Ô;ß)X
+}Þœ¿Íî‚Û…[`C€Á)ÖØÝþíý¼^ PÄûÀ>g¼‚?oðö ²ùðG bp%/DÍ¡P<ò³Û¼ŒŸŸ®Î,ÉËǧ˅ˆMkqd2Þó&—„QòBÂäÐœ0
+}ݼ͕$J’Ø‚é”%±fîæö*è×-c9[!¯TBP»øÐâ9õX¹TPq5¿jÅøe`älq&Ò.ð»ƒ\º%/t94w
+½ÝäÌܪ¿Ï=gÔÃ{°L¨¹ OÔÌùþ {3l²Ê¡ºwÃ&k•öåÖl´|Kc[¬U¡!eùûPrp锼ÐäÐÜ(ôuóùþ “oÁĦ¢¯™oß6§õ¥¬Tðè·vPføÖL.h¨_Q뉹E¼ 93Kƒ0O›óy~-
+=77îW jó¼°PŒÖ×èÉø5¿ŸaÆÿJÆÇý ¼:¯â·›§Ó]ÛxU W¤N“±\¤ÐMü]=9¸ˆ”’D*‡f‘R(K¤rt)E?^¡@ßÞóºwìõ›¶x¶¡Á!lÈDþâ^.*¡ä•È¡Y%zõ¬]Ð×j °Áv)¸»yüÛûî¸^!ÑBùÅÞþÑfÛât=6¤ÿ<‹\BÉ
+‘C³B(ô|8o^æ7€ Ì
+ ¨¸”Ü• ß³ ¤{¾D<F‹1ÚQüýr1¶èƒpä!Ffuäû~~·ËZ0ñãm+æì«£ˆß±è@Xuz_çóÚFy.…#µê‡;3)R¼MžÈÅ™Ë3)¬!t‹>°¡Þ¯Ø̓K? ä…Ž ‡æž@¡K]ANÍ}¡
+òì‹#X§Z—Z0nʧšy¥?(áu  Z,µ«¡ÒŠë {ZÀ6¹ÔÈ%Ç?)$çQ‘o÷ˆбGTÐ|‹ö\ñà†|€ñ{Kçk0c‘ì:ãšð!Ͻðï]$ã{Rö"YEXžÛ;98®”µ9ƒ‹D)yA¢rh–(…2$*g‰RðÝKä0Ü—ÆœØZ|h4P6ü9¸h„’4"‡fP(C#rpÖ?mßN2,"ε¹2}¸?\ó@rp%¿ì׃{‰>7hÖ´¹­r+¾n’ƒKÐ(ù´{Þo^¶w|VÅmy42xrƒØå¿Q—sKØ8GM´Úp-× fÐŒYñµ[BF¹×/ô€P(%‡:;|ˆRA7Osðv''¼'ÇÕĺþœ+?}×÷ rëÓäqÛ¯÷ÕžìÏ(ð›ÜY ©ßÜÈÁE•”¼¨J96ë’bï-=¬ŠÙ_âÂ?tlp
+;Æl˜ÞLl@¦7=±7½£Tž¬ ³›Øf³ÈƒÚl^gŽš˜»µiá¦j\ß%mVÚ©¼°Ú·°S5! ç“+þ-#\ۻΘŽª¶—’Š¢G#ÜÕwþE×Y†£]‹Üñ2‹¥r¼¼)–ÌQ,ëœT³XðG±T|ŽXäè,–
+=Še†‹ûÊ·àâGïgÍcW‹w ñ˜[¥b¿Í¢Òï~›o»·íˬ9ùpKMR-°è{Å>·›ózO«ºh{n–ˆQÃMFÌäà3
+¾ì‡¿ïçz5tÐPððAnªÁ¸Ÿ¶Zß.Âð°b[m–dQ«MF²äàœ,
+¾õÁ{Ðaºl€Æ©G$Š¾¡“” ²klÛ«á~û
+Œ:YoÝ€óHT|¡ˆ­>‹P¨Õçøû\Ý_6´ðSÅÂ?¢/6ånŽƒ+×
+{k¿£é[­‚Î8ßµœMðK ÿ˜±Ü6´È„Ú†òd"gg™Pö¢LäØ,Š]Üü°* 9ßê¾ëã„ŸZ@–_žÊl=³R*[O–R„ÜQ%?X´ÊfÌåÎ%÷¶,!£æ–¼ÉÙ9l”&|]¡ÉKبÓ#/lrv[í29û"Ù'ø™-¬-MP]²kKÖ©Æi®l‚µ-"÷z,¹¢^¼\ÉÙ9W”§)?º––»–°QW@^Øäì6Ê~9<ï羶¹Ì»-°8íÖÐÇÍñéž5ÆñK$¹c]Éu¬ãåJÎ骬w>÷‰ ÜJÔ¨/jrvŽZeX·›=° º`›0ƒí¬™x¾âA KM9·•¥:—ZØšd‡[f*öWÎi‰ö².‡¢Ø¡ØÉ­È„8¹ñT"Gg•ôm‘È‘Y$ÉÒˆ5Bú¾mŽÛ'™Hc‰ÔÒ­h„ZºñD"FgPôm‘ˆ‘Y#yß W5|ÏÍ“ÜZ-'ªòVc%ª{ÌTž™©Ì1UóÚ;W‹®
+“ÂÔUäÖ)H7aa/Gã}«ÚÇ}ßH “‚æŸc»ld¡P— –NääQ&•¿Ç’JäÔQ$”Ê8‰_kz9ÝjÁóµ£Ê]2ÁûÂøã°Øs#Ë„zn°d"'2¡äÓöñ°:}ôY±!Å÷»j¿R°¢&'Q£äÓvÿ4Ó“.–"aÍžðNa‚¼^Ûôx¿”—SñT²¥ÞÑ£ò?«9¶ ¡¼}ÈÑ:3|\TýJSáWâåÊ_4:‡@SÖtùWje«Ÿ
+endstream
+endobj
+15049 0 obj <<
+/Type /Page
+/Contents 15050 0 R
+/Resources 15048 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 14927 0 R 14932 0 R 14933 0 R 14934 0 R 14935 0 R 14936 0 R 14937 0 R 14938 0 R 14939 0 R 14940 0 R 14941 0 R 14942 0 R 14943 0 R 14944 0 R 14945 0 R 14946 0 R 14947 0 R 14948 0 R 14949 0 R 14950 0 R 14951 0 R 14952 0 R 14953 0 R 14954 0 R 14955 0 R 14956 0 R 14957 0 R 14958 0 R 14959 0 R 14960 0 R 14961 0 R 14962 0 R 14963 0 R 14964 0 R 14965 0 R 14966 0 R 14967 0 R 14968 0 R 14969 0 R 14970 0 R 14971 0 R 14972 0 R 14973 0 R 14974 0 R 14975 0 R 14976 0 R 14977 0 R 14978 0 R 14979 0 R 14980 0 R 14981 0 R 14982 0 R 14983 0 R 14984 0 R 14985 0 R 14986 0 R 14987 0 R 14988 0 R 14989 0 R 14990 0 R 14991 0 R 14992 0 R 14993 0 R 14994 0 R 14995 0 R 14996 0 R 14997 0 R 14998 0 R 14999 0 R 15000 0 R 15001 0 R 15002 0 R 15003 0 R 15004 0 R 15005 0 R 15006 0 R 15007 0 R 15008 0 R 15009 0 R 15010 0 R 15011 0 R 15012 0 R 15013 0 R 15014 0 R 15015 0 R 15016 0 R 15017 0 R 15018 0 R 15019 0 R 15020 0 R 15021 0 R 15022 0 R 15023 0 R 15024 0 R 15025 0 R 15026 0 R 15027 0 R 15028 0 R 15029 0 R 15030 0 R 15031 0 R 15032 0 R 15033 0 R 15034 0 R 15035 0 R 15036 0 R 15037 0 R 15038 0 R 15039 0 R 15040 0 R 15041 0 R 15042 0 R 15043 0 R 15044 0 R 15045 0 R 15046 0 R ]
+>> endobj
+14927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.673 758.747 228.621 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.965 746.638 159.913 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.243 733.852 192.191 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.487 721.744 186.435 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.903 710.312 206.851 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.439 697.652 213.387 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.587 686.095 214.535 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.891 673.986 201.839 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.251 661.277 164.199 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.992 649.092 191.94 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.992 636.983 191.94 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.106 625.551 153.054 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.106 613.443 153.054 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.106 601.334 153.054 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.106 589.225 153.054 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.216 576.565 211.164 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.216 564.456 211.164 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.963 552.348 184.911 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.654 540.239 198.602 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.65 528.005 199.598 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.071 515.896 198.019 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.432 503.787 207.38 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.668 491.755 216.616 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.829 479.696 163.777 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.75 468.138 189.699 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.76 455.353 172.708 465.657]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.623 443.244 231.571 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.393 431.812 151.341 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.276 419.152 219.224 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.434 407.595 218.382 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.626 395.486 234.575 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.13 382.777 229.078 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.378 370.592 222.327 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.559 359.16 201.507 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.835 346.5 243.783 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.322 334.391 249.27 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.399 322.283 214.347 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.354 310.174 229.302 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.369 298.065 224.317 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.93 285.957 221.879 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.071 273.848 234.019 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.449 262.291 243.397 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.221 249.631 225.169 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.364 237.396 225.312 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.9 225.965 216.848 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.805 213.305 253.753 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.292 201.196 259.241 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.459 189.639 241.407 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.23 176.979 223.179 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 164.87 208.232 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.539 153.313 175.487 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.011 140.527 187.959 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.011 128.418 187.959 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.626 116.31 234.574 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.175 104.201 210.124 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.445 92.092 240.393 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.378 79.984 222.327 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.901 67.875 212.849 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.599 758.07 465.547 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.132 745.961 452.08 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.824 733.852 480.772 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.6 721.744 461.548 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.654 709.635 444.602 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+14994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.367 697.652 446.315 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.869 685.543 463.817 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.287 673.435 410.235 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+14997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.634 661.326 418.582 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.143 649.217 444.091 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+14999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.534 637.059 443.482 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.78 625 410.728 635.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.127 612.766 453.076 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.681 600.733 429.629 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.139 588.674 443.087 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.883 576.44 426.831 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.784 564.456 413.732 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.5 552.298 399.448 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.636 540.239 412.584 550.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.57 528.081 424.518 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.878 515.972 429.826 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.869 503.913 412.817 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.256 491.804 441.204 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.853 479.696 438.801 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.849 467.587 435.797 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.382 455.429 407.33 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.709 443.37 389.657 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.869 431.261 410.818 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.217 419.027 453.165 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.525 406.918 458.473 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.196 394.935 395.145 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.709 382.826 389.657 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.883 370.717 409.831 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.202 358.609 392.15 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.328 346.375 424.276 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.193 334.391 392.141 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.228 322.233 428.176 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.682 310.125 442.63 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.358 298.065 412.306 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.256 285.957 441.204 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.274 273.799 424.222 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.333 261.69 406.281 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.333 249.581 406.281 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.767 237.396 424.715 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.274 225.364 424.222 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.639 213.179 466.588 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [460.094 201.07 477.042 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.732 189.038 437.68 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.187 176.929 448.135 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.167 164.87 405.115 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.035 152.712 430.983 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.238 140.653 458.186 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.223 128.544 463.171 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.144 116.31 408.092 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.705 104.277 454.653 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.013 92.169 459.961 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.641 80.109 411.589 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.003 68 448.951 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15051 0 obj <<
+/D [15049 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15048 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15169 0 obj <<
+/Length 6653
+/Filter /FlateDecode
+>>
+stream
+xÚ½M“#¹q†ïó+ú8á-¾«Ã²ÂŠ°#lïÁ’ÜnNCÝd‹dkµþõÎ,8@5X
+6XóêŒ}þím{Áló€«Õ F†•{lHŒ¦Ç\dôÕ\){ŽÂ
+\ë$ \HHƒr9·ÉTËáÔ#´mö-3M`È6 ŒN!ÌkØÿ‡†ÚåXÁOçâ<*“ƒÇòl´æ@J*#÷Ûçòº³“žƒ©!¦€h'c´\c˜J¦½h'c¾l÷ýÄÂ7k-êÒq˜÷®Y‹dîU‹)xU‹tdÔbŠ\×"µ˜2çŘýé+Æå³ÐD?À‹éÌEöN»‹‰»Õ)ĺ[Ìk/»__ÿ4Žê°)Eø£$€Íˆ$icdÄe¥KKÎ;ñzz¾üÜH†pm«=KÐ’»î
+æ¦ù²s÷?½¿¾bÿÿVVû¨%á‡O*çøá˜ýÃH–þðš^¤Z&ìrJÊ²Ñ ”"§óœªù¿´ysãBwR+ßT­$|µ6~:8Fç`B0—–T<RJJq5 ܃ƒé­õ9ñ—¢kB (¬à`â#rfyÊÕþRr01kÖ2g¾n_K£©`xâ`â™´ ræ<š?W‡S©—7ÀÃFÙ£Gm­ ‡¡%O¬é‘8ë1%þòEŽŸßKÉ?„bò.ªÛ…œ»y*ù0Ä)&ä$ʪœyÜ~íV†ƒq2ïÖ•_«hGk¢2°ß¤«+ƒ8+#%Ö•AçFed_zxkZ™ù`*Ld½ïqb)I;YM-Â×MÅ@œM•릢s£©²/=n|1
+ºYÐÎòDCa躒Î] Å@œ •놢s£¡²/ Uλ-db XÈ»•Ô9öëñPŠ<žígz½¶€BäÑ­H¼ü
+-@"Ær,-`KÊÚº•ˆ³•RbÝJtn´RÊ…(ãé0Ðân«áÈó±%iêy>q6SJ¬›‰ÎfJ¹ÇíËvs*…ƒx^°ô°µ,¹%·ÈA'l:$„˜š%G€–„®/-pgu¤Äº:èܨŽ”{*OÃv:ÄÀœŒÅ·6]_û8 ûÁ8×3À 5HڙĨ hil˜…€³4`]tlTF‚}ß“gá&Å 8ö›ÔÿT 9>8Û(ÖDÆF¥Ø__~æóî±8(=ÄÁ’#ã‘Óõü”ƒx±UN<ìJvá/5SAÏ3ßvoÛ—ÝþÆ, feàZ˜ÆŸúºùû«RÆp ñª”69s»ƒï¯¿Ô¯r,7ª§ SFw ñ†À2|`KNÔÇxâ¬É”ˆk»ýæ¼;ì˧= DÝ lk @³9{w*-ÝI®vúcO§4§#“w¨Äã&~O(ÁÅüÈ‘cKv¬o"sg•¤Ä§-®ný­|n]R´vÓ Œ ]‰Á3C‚iðÐPNÜŠKÊxš–éä4fÌ Nã—£¼»—Í4©×¯8äñxm> þVŽ[Ò¡¾ÁAœõ™Ÿv_ç~åw•Œv9Ê¥Èé§cé‹!55‚…ià ÇsS¼ã#” †ƒéñ³èåÓ¹0IÈñrþ•#Þj ‹ÎOPö/ŸâZg{Væ¤ã9Î `KåVý8ûCJ¼ ×Ó4W~g bN­9èÍ+Ó[/Ï}Ì´åtj¬c
+ÁAœ-”×-DgF¥L´‘þñ6
+fžãä4„kT5 1ð.Jy«ö¡gó¤D´ŽùñÖñð ,7ðƾ«x`à]¬“òV­C'ÎÖI‰hûã­ƒÏ3°Ü<˜+BÕ¬ÃÀ»X'å­Z‡Nœ­“ß6Çâ9vÉo „ x;ÕƇ÷GÅ
+ø®*C 1Ô µÊ¡7½A˜¸[:oª;TfŠ½éZbNÉðµX}OŽ‹¯Ew¬‹ªÁš– ƒèäÒeÑÒÊek>@F'H‰ëN@gF/H™oÇÃãöt*ùAÀw¼éX=â{9õ²CÞp¬æC’ŠÏÛ†õ‹( ry¶(´:Ûš4èÀ(”¸. :3J#eV¥AÆFi¤Ô(ÂX%ð¥%,¤ãâC±¿~1;g;Æ)rù·(Æ´úÛšéÀ(Æ”¸.F:3Š1eVÅHÆF1¦ÔºéØYŒY ÃÝó#¹¬^cZUoMŒt`cJ|мœwo/¥h΋©ÊÜCÀ¯]¿UðQn‚£“1œ³Ëº‰YN§ÄûÏ{ 4}ÇJ®é…’–ô[
+…’ç×S!ü>Ü2ÛûÏ%‰¿
+F·»8½¬àl¹¬ªàŠå€³å2bb¹éeúËéÛ[édœLêôŸ‚óVzññT†Áwd6ô2‡Ñ‚ß«®ÙŽ‹öûÎÛJÁÂ8½ìÄ
+ k–¢£©²òª¯o¥¨×O 30ñì_Ô9­^RÁ‚8X:9„‰›ñ×n
+k>)ÕïxIvd8ô¢²Ñ/Òš²k~AF¿H‰·ŸGÄMP‰ØëÁh»øÔû*ëX9ŒMuÌ¢ÈõV£Òr«kv¢£²¢²u;ÑÁÑN)ø’„¾—–´‚Ÿ‚ÓÁ¸¶íí¢tï×÷ýcÿk(0 ÷¨ƒ\ô4ª#­yº¦:0ª#%6¨ƒŽêÈÊ»ž77Ÿ–À­Pï9:YCЂ5ê2ômaâᬸïšQQ•ý§'pvÖûvô
+¶Q—iÛ5]ÒQ—)ñí°ÛŸ‹îè¨ÖspAàx2%ãnŽ—Ýþ©$MI™ø~G7ë’‹BÁ»Óëæüø­ÿ}UÐÛرŸF¯¼;Ë$­¼»¢Þ¬’xûž—à6‹›¶*äßyw
+©”!¿*„Œ
+ÉJ‚WBçF…¤Üøök9êÀ'…é`Œ:FgrðéÛûùérÔq߯ܤèXµ¦×¯Ž*©¿ª„Œ*É
+fÇ‚ê§rŒ*G}pÜb˺äO‡ý™ KDСS âÈ ÷Å¥. [OôªÙQ•òàWmÐQ)ñ¸}Üî.MJâÓÒ-Ç#)sv9ÁU^?ZètL9Øúv>Þs4ïçµä:ÝQ•‚äWqÐQ)qõQM<6ìGùuÜåÔÒŠ¡ÿv¾#Z4H5=þ­E.`­U©J~µ­•Û¬EgGke_{x}{oH4Íš­†]ZñåÙNµzÝÑNDØl£ŒÖd#"w¶Oþ•‡·i™hWZIÄS6#µ<¹a‹òäM®—šðjp=wyèõž£.*…­¯º £6Rb›6èì¨ìkg}L7‰ÞÏåG‚° |-ðe7»(®}—PÂôXx»PÈuŸ£P*5µ¯B¡£PRb›Pèì(”ìkßÞK!Z,…µU0ÓD1Ï»×;*IàºSÏ(B®5ÅQ)ª}Å‘ÛÄAgGqd_»*:3Š#ežå Á€ÄM9/ô¢~xéÊ.xÊÀ„08øó®O)kÝ]‘+yG¨”,¿ú
+2%¶)’ÎŽ’LÙMÒ¡Q”)ËXí6/»ÿÃsøÛþƒÖfMÇe zÕöY'YÕö0
+v¥¼& “gHÉë.@GÎ."ß÷åÝ,S =‰Û“RùŒY¾mE°„eë´–ðÖFŒ p|£ ƒù7’¶aâ?³Ÿ;·nÜ°þœ…6jzæ0û½8%ÂïÅ’ä_dMÁpcãï•"?Êèÿ啉{
+endstream
+endobj
+15168 0 obj <<
+/Type /Page
+/Contents 15169 0 R
+/Resources 15167 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 14686 0 R
+/Annots [ 15047 0 R 15052 0 R 15053 0 R 15054 0 R 15055 0 R 15056 0 R 15057 0 R 15058 0 R 15059 0 R 15060 0 R 15061 0 R 15062 0 R 15063 0 R 15064 0 R 15065 0 R 15066 0 R 15067 0 R 15068 0 R 15069 0 R 15070 0 R 15071 0 R 15072 0 R 15073 0 R 15074 0 R 15075 0 R 15076 0 R 15077 0 R 15078 0 R 15079 0 R 15080 0 R 15081 0 R 15082 0 R 15083 0 R 15084 0 R 15085 0 R 15086 0 R 15087 0 R 15088 0 R 15089 0 R 15090 0 R 15091 0 R 15092 0 R 15093 0 R 15094 0 R 15095 0 R 15096 0 R 15097 0 R 15098 0 R 15099 0 R 15100 0 R 15101 0 R 15102 0 R 15103 0 R 15104 0 R 15105 0 R 15106 0 R 15107 0 R 15108 0 R 15109 0 R 15110 0 R 15111 0 R 15112 0 R 15113 0 R 15114 0 R 15115 0 R 15116 0 R 15117 0 R 15118 0 R 15119 0 R 15120 0 R 15121 0 R 15122 0 R 15123 0 R 15124 0 R 15125 0 R 15126 0 R 15127 0 R 15128 0 R 15129 0 R 15130 0 R 15131 0 R 15132 0 R 15133 0 R 15134 0 R 15135 0 R 15136 0 R 15137 0 R 15138 0 R 15139 0 R 15140 0 R 15141 0 R 15142 0 R 15143 0 R 15144 0 R 15145 0 R 15146 0 R 15147 0 R 15148 0 R 15149 0 R 15150 0 R 15151 0 R 15152 0 R 15153 0 R 15154 0 R 15155 0 R 15156 0 R 15157 0 R 15158 0 R 15159 0 R 15160 0 R 15161 0 R 15162 0 R 15163 0 R 15164 0 R 15165 0 R ]
+>> endobj
+15047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.757 758.195 214.705 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.917 745.961 169.865 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.295 733.978 164.243 744.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.623 721.744 210.572 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.936 709.761 165.884 719.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.584 697.526 192.532 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.96 685.418 158.908 695.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.424 673.309 169.372 683.613]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.449 661.326 160.397 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.565 649.217 228.513 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.485 637.108 228.433 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.361 624.874 186.309 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.727 612.891 158.675 623.07]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.662 600.657 168.61 610.961]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.305 588.674 162.253 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.795 576.565 172.744 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.553 564.407 206.501 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.325 552.298 203.274 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.871 540.19 190.82 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.059 528.005 195.007 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.479 515.896 218.427 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+15072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.949 491.755 153.897 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.162 479.57 143.11 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.669 467.461 142.617 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.519 455.353 217.467 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.815 443.244 183.763 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.836 431.135 173.784 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.085 419.027 180.033 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.396 406.918 224.344 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.632 394.809 229.58 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.299 382.701 184.247 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.752 370.592 202.7 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.607 358.483 172.555 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.109 346.375 173.057 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.259 334.266 198.208 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.795 322.157 189.744 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.578 310.049 182.526 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.23 297.94 174.178 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.939 285.831 238.888 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.027 273.722 212.975 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.718 261.614 228.666 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.838 249.505 248.786 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.13 237.396 180.078 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.408 225.288 212.356 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.652 213.179 206.6 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.068 201.07 227.016 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.604 188.962 233.553 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.752 176.853 234.7 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.056 164.744 222.004 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.416 152.636 184.364 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.157 140.527 212.106 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.157 128.418 212.106 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.271 116.31 173.219 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.271 104.201 173.219 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.271 92.092 173.219 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.271 79.984 173.219 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.381 67.875 231.329 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.134 758.07 463.082 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.881 745.961 436.829 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.572 733.852 450.52 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.568 721.744 451.516 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.989 709.635 449.937 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.35 697.526 459.298 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.586 685.418 468.534 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.747 673.309 415.695 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.669 661.2 441.617 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.678 649.092 424.626 659.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.541 636.983 483.489 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.311 624.874 403.259 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.194 612.766 471.142 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.457 600.657 427.405 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.929 588.548 439.877 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.929 576.44 439.877 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.532 564.331 466.48 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.034 552.222 483.983 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.452 540.113 430.4 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.799 528.005 438.747 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.308 515.896 464.256 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.699 503.787 463.647 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.945 491.679 430.893 501.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.293 479.57 473.241 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.846 467.461 449.794 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.304 455.353 463.253 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.048 443.244 446.997 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.949 431.135 433.897 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.665 419.027 419.614 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.801 406.918 432.749 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.735 394.809 444.683 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.043 382.701 449.991 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.034 370.592 432.982 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.421 358.483 461.369 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.018 346.375 458.966 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.014 334.266 455.963 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.547 322.157 427.495 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.874 310.049 409.822 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.035 297.94 430.983 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.382 285.831 473.33 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.69 273.722 478.638 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.362 261.614 415.31 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.213 249.505 467.162 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.406 237.396 483.354 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [460.91 225.288 477.858 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.158 213.179 471.106 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.339 201.07 450.287 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.615 188.962 492.563 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.102 176.853 498.05 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.134 164.744 478.082 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.149 152.636 473.097 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.71 140.527 470.658 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.85 128.418 482.798 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.229 116.31 492.177 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457 104.201 473.949 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.144 92.092 474.092 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.845 79.984 485.793 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [485.585 67.875 502.533 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15170 0 obj <<
+/D [15168 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15167 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15273 0 obj <<
+/Length 5168
+/Filter /FlateDecode
+>>
+stream
+xÚÍKo#9’Çïõ)t´-.ßãºgv½ïvÞ9¨%ÙÚ–Ô’<µ=Ÿ~"2I™N)™b´gNT©â—düIFðÉ ¾øçß}ùô¿÷jáY°V-¾<,gÞÚ… ’Y±ø²^üx÷/ÿöÝ÷ÿ{ÿ§/\hi™Ð
+þkùŸ¾ÿòé—Oþž/Ä› ï™—z±zùôãŸøb ÿöÇg*øÅ×î—/ m3½çÅúÏO<ÿ,m²Ï
+œ¹
+Üo Á2íM Ý¿Ž”Sò
+m¶ƒ“6sðzs8}€0á—ž&¦K,M
+“€…™ë„ÙÎNÂÌÙÛÝö<é*3p•é}>c|㯠Gá*°d„Ÿv1º*'Ö¹ª\•³ÑU#PãM [ø¹-‘¯»ÕluØÀ ê²õPÓ £vu %˜WÔAAìÕQ«ÔAÀŽê(ØÏÛݦ­!W¹ÊAÂ…«À’šv/:ê¯ÎMíää¦oäçýãvµ|¡:}²¤ :Í”Eý.ëÙÒðŠ9'‡±ÀAPH,‰0ÞS£8rb<ÚÙI9ûe;ÝßêæFl$ä§1h‰ûŠfL@ŒžÊ‰užjg'OålðÔX@Ï! 'aZÙåz%ú_qNd?Ósƹ¥`{ü)Ù‡óqv' \Ï‘¦†
+t!VÞôD1J3'ÖI³¤™³¯K³™¤Y0«¤ÙÎNÒÌÙ§§åq³þ
+ê—b¢-Y==ÑCAŒm 'Öµvvj9;K—«_^·ÇHì hÆ)ŠÄ-5=CAìW«GÀŽŽ+Ø™ãþs¹Ûþö3«Æf)âe4¤Õô¾`ôZ¬óZ3:9-GgNkŸ ¯jjÖuS+>KJNO”P£ÓrbÓÚÙÉk9;óÚqó¸=7Çðœ1L ’Ö–¤˜ž8¡ FÏåÄ:ϵ³“çrvá¹çÍò4 {~/©Sœb - >¹Q£ãrbãÚÙÉq9;s\Ÿq/Ÿ·»Íúá¸ùˆ
+xì¿
+øe‚c §¨p'¤:ƒ
+¿M R2ÍÝjË´¢H*Ñ’¬ØÛNAŒ͉umg'–lŠù·ªñNi´)VXÑ’Q,1º+'Ö¹«Ü•³O«åy´IãJ¥À@¦ë ó< jyè²ínl¸,P%‡€}PÙ7v
+Ä9g3 0ÐRÌm %^±Ç‚Å™ëÄÙÎNâÌÙÓâlç&qµÅÙeæãç“¢Îñ$qðƒ:¿Q£FÎYã(Lì´×XŠŠöĨќX§ÑvvÒhÎ>mVû]űPÝ:Üᇶ{JzŸžh¥õ^*hU^jäFÜÓf7*[ø©iåYŒRKÜÅ ¯¾¹jƒʘ7nçñLø9†òÐY’lêGK¶bS?1J1'ÖI±ä˜³AŽW@ãáÏzE”ýåÜx{FÁ½Q˜haÎF3ñ€#9À–LÅ
+bfN¬f;; 3gŸ¶»åóo?Ÿ­¬èàÎKºbW?1:+'Ö9«œ•³OçeDÿö‰¶Òx†“b^-);½ØNAŒˉukg'‡åìoëü5ãÐvÐÖÂB‰òãf ðF!’¼RhP⛎ Ž ÍêN”cšd£=Z’í)ˆQ9±Níì¤Îœ ê<À¶% ÄË$y XÂ)ˆÑW9±ÎWíìä«œÝùêrBÓIMÁ¼-6ÀU.æ 5B1I²ñ-ñŠÐ€
+A‘Êî^Ôé‰
+bß"
+bU‹ `Ç&Q°§š6¶‰²’o¼: 7ú(7cl“β@Òk¢%'¦7
+bIN¬I;;‰$gOŠ¤›D’c×›Ó
+Š,ÌÝöpÞvcð¿¬$àK¡™1²äŸ6ç×à ™ê¶³ÍèÈ õ$G#Ð’­8AAŒ͉umg'æìI¶c“Fs,æÛc£{èn
+bÔeN¬Óe;;é2gOê²›t™c—ç§ñE1Çœ7X‰W&8Sb÷¯gˆ8oÈKx`ÖÏY“Òžb¾ -ÉŠS:Ä(ÎœX'ÎvvgΞg;6‰³,rwv|{œ³–€‹ûãp2¹àN&ìÒVRà㋃bß’±+JܬpBXø  ‰é5^l¯®U4“S£ÈÈ“m¢ššD½¼0j§v;O­*¨ÛÝm5$„ÂÉ9‘´FIrÎ -q[1‰D@ŒªÌ‰u²lg']æìIa¶c“2 ìþ<z®,…¸íÔâÔö·¦¯D6ÍS-xU¨8XFAì…Y«„IÀŽÂ,ØçíùyóÛßæÚ]®¨)&pº³D‡¬(ˆÑW9±ÎWíìä«œýºûy·Ç³Ù_wcmÇ
+´×¸`[±E_8
+w®ã¶Ñ‚ºÛ¯çK
+b”fN¬“f;;I3gWI³¥™“ÏÇ{Á͸<¹"à¢:!f*¸7ŠÓ² çØƽ‚–lÅi2
+bTgN¬Sg;;©3g¿î>îú-¡Ñ+"h©æ
+btXN¬sX;;9,gw'‰—pXS(Á,§Ø؃–ôôŽ
+`tV¬óU;:ù*C{íìxC„V¬œ)€·ì$²š™Y3”xj$$
+×eeí@ÙQº
+*^ÔjmI=½Þ¦„fºuñW?º›53^bRÚB´Š5­v'ÁMgGÆümt7…²~GçK-
+âÓþ4†Ä«y¥!@z|È¢,äé¼|Éÿ5.–z&Þ=eºÇÖsæq¶2¼Çu¶„Á1 Pnñ¦FíȤœù²9.ø
+‡ECÀÕ\3¯e½É[²›¨ï.롲ehwRªÂ[Äè­yi3–;|´
+Á­
+¶ ^jÌx‡£5P-,Tš@§õaÞÏ^p1ÐGŸa… &‰¥»®'i¨2e
+vÀ­s®d78·{
+ظAvI£ou]X˜3ª©¯ÓÌuvŒÑßfE'·¥ 7øx‰Q’-?þš Žd# 'iº·Ru{zK&„«1 ^ÿGÄ‹l|I¼?Bü4³†þMäŒ[H1ŒMÿÜnæªO®úgH’þã©â¹<J«ü‚Á/÷ ô».`«²;lÉ®çܯ¨T{œ‹†\U K€ŒnÁ¼ž³@cÒZ@'²ÖvjJ[Ô”|cÞjlh|w+  9çkÒŽLÉ™“yk;7å­÷&oÝš·ãohIî2 aYÕžÛ‘É]9s*s%ÀÆ̵ÀN¤®íÔ”º¨ó52–»ž7£ ‚aPAAA$ܺ&qà“XhÉ@u\Ûuª x$LÀ´¼ÛšU0WËéIÝáNåºÇáçT>[!$E…)Õ]JSQaíÌTa9*LÔØ×x Ï؈l ˜LãºÆhÛ+´„貟ÝR4>aÊè¨j†ÄÀè+¹lŸ!ACxv0¹z¥é]!ðm ??mÐÁCßêҴĵ›N}ÚP'Ó†vlJ
+.QÚPÓl´·PAÐlÐO›PIšÍœ‰Eít·VÝÜlÐPî[³™œÞ“rØ……nÞcPˆÝzƒ“­ÿ?^@Ë
+rPÎõöå° ññ;Üë`[‡Ñ[’oï"mNSÝ»¥tü¢à]Û¸o$>¾uªðÒˆ&‘AïîBoI:ñ&Œ~3BÔùæÔÕíg(_wýlV·ßï·»)9Jÿ¾ÿ{祠¤?dà´irÔ¥ÿÚ?&ô?ý¯‡ÉRÆV|Âó~µ|þòôºûùŸÖëãEøïçcÌï»Û=ž7ßïÎñ‹'>CÉkŸñæóšýùâ¼`©_Ïßdÿ~#P:{ÝݻӖ?xÙ[2iín*X3ÃMðÒu åh÷rß1eðêTè­|ã‚‚6Ù[²ê}µÃ5H“ ò( 2rîåä·w;
+*¤Q
+ÔSP'¼ä†JÄwN„œã%Å™o[;K^K6­íÆ£xˆƒñV3¨UØzEo‰"ãD€€/‰!¯VsùÏ€:Wø†Lx7ôö»¦±3Úo}¾߶ÚG_´„›×IGßòþnÿÚu-æwÛ—ïn &S0 ;þÖ½¿¯/È9,D)ú—¶ëèñrs%zKBÇéôåê—×í±‹f!¾“Ý4ÚºŠaîZ11®Q$ÅĸFù·ûºÇV•”èÞl"€Bºo6ÐÕ~{ØÆ2èˆ4Þ|Óεc?侦7ª üWÝÌsáÕ/OÇÍrê!u¯+â¦kžÄëw¥£ð¤À÷K“'_ÏûqO*¼Õ§ŠÓ-A–Ðx\#ÃPZû¿A•â½ðVPT)ZÒéìzyQÝéR_ð¶Âõ]y‡óD¡­mëð%ÇI
+ – wÅmåcAŽï^“ àBZˆwgܱÊþ,q¢Ä|@uWh 4]"ûVÝ`É„oYñù¸¿?§º“݆‚Ýí6%{¼ÊdJâï£Ê…gÞ“T9r󳪼ª<gŸÎË,“ý¸ÊžîN‚fÁQÔ5™t6U5VóŸãÙçë<§¥Õ|Œ0•6?F¸y›ó¸¼[+þ¾[»†×â­Ê/€‚A1ñûñ*£îq5»@™¥/ƒ5@ÿðp
+endstream
+endobj
+15272 0 obj <<
+/Type /Page
+/Contents 15273 0 R
+/Resources 15271 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15166 0 R 15171 0 R 15172 0 R 15173 0 R 15174 0 R 15175 0 R 15176 0 R 15177 0 R 15178 0 R 15179 0 R 15180 0 R 15181 0 R 15182 0 R 15183 0 R 15184 0 R 15185 0 R 15186 0 R 15187 0 R 15188 0 R 15189 0 R 15190 0 R 15191 0 R 15192 0 R 15193 0 R 15194 0 R 15195 0 R 15196 0 R 15197 0 R 15198 0 R 15199 0 R 15200 0 R 15201 0 R 15202 0 R 15203 0 R 15204 0 R 15205 0 R 15206 0 R 15207 0 R 15208 0 R 15209 0 R 15210 0 R 15211 0 R 15212 0 R 15213 0 R 15214 0 R 15215 0 R 15216 0 R 15217 0 R 15218 0 R 15219 0 R 15220 0 R 15221 0 R 15222 0 R 15223 0 R 15224 0 R 15225 0 R 15226 0 R 15227 0 R 15228 0 R 15229 0 R 15230 0 R 15231 0 R 15232 0 R 15233 0 R 15234 0 R 15235 0 R 15236 0 R 15237 0 R 15238 0 R 15239 0 R 15240 0 R 15241 0 R 15242 0 R 15243 0 R 15244 0 R 15245 0 R 15246 0 R 15247 0 R 15248 0 R 15249 0 R 15250 0 R 15251 0 R 15252 0 R 15253 0 R 15254 0 R 15255 0 R 15256 0 R 15257 0 R 15258 0 R 15259 0 R 15260 0 R 15261 0 R 15262 0 R 15263 0 R 15264 0 R 15265 0 R 15266 0 R 15267 0 R 15268 0 R 15269 0 R ]
+>> endobj
+15166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.319 758.07 276.267 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.486 745.961 258.434 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.257 733.852 240.205 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.311 721.744 225.259 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.121 709.635 178.069 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.295 697.526 198.243 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.614 685.418 180.562 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.74 673.309 212.688 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.605 661.2 180.553 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.64 649.092 216.588 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.094 636.983 231.042 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.77 624.874 200.718 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.668 612.766 229.616 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.686 600.657 212.634 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.745 588.548 194.693 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.745 576.44 194.693 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.179 564.331 213.127 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.686 552.222 212.634 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.051 540.113 255 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.506 528.005 265.454 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.144 515.896 226.093 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.599 503.787 236.547 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.579 491.679 193.527 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.447 479.57 219.395 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.65 467.461 246.598 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.635 455.353 251.583 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.556 443.244 196.504 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.117 431.135 243.066 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.425 419.027 248.374 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.053 406.918 200.001 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.415 394.809 237.363 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.922 382.701 234.87 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.082 370.592 190.03 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.46 358.483 184.408 368.787]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.789 346.375 230.737 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.101 334.266 186.049 344.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.749 322.157 212.697 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.125 310.049 179.074 320.353]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.653 297.94 251.601 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.202 285.831 227.15 296.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.472 273.722 257.42 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.405 261.614 239.353 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.928 249.505 229.876 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.873 237.396 250.821 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.098 225.288 266.046 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.874 213.179 246.822 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.928 201.07 229.876 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.614 188.962 180.562 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.73 176.853 248.678 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.65 164.744 248.598 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.526 152.636 206.474 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.892 140.527 178.841 150.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.827 128.418 188.775 138.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.47 116.31 182.418 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.96 104.201 192.909 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.718 92.092 226.667 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.491 79.984 223.439 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.037 67.875 210.985 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.977 758.07 446.925 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.397 746.115 470.345 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.174 734.836 388.122 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+15231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.516 722.33 441.464 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+15232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.525 710.249 441.473 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+15233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.795 698.294 435.744 708.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+15234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 686.339 447.453 696.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+15235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.673 674.46 374.621 684.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+15236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.139 663.105 416.087 672.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+15237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.516 650.599 441.464 661.011]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+15238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.366 638.644 446.315 649.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+15239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.118 626.639 387.066 636.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+15240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.934 614.608 438.882 625.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.294 603.33 416.242 613.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+15242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.696 590.697 422.644 601.293]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+15243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.525 578.742 441.473 589.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.795 566.787 435.744 577.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 554.832 447.453 565.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.341 542.877 393.289 553.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+15247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.326 530.922 398.274 541.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+15248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.199 518.966 402.147 529.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.632 507.011 386.58 517.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.934 495.056 438.882 505.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.199 483.101 402.147 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+15252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.134 471.146 387.082 481.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+15253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.142 447.912 375.105 457.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+15254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 423.325 366.408 433.791]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+15255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 399.491 389.541 409.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.84 375.581 396.803 385.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+15257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.31 352.271 368.273 361.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.838 339.639 406.801 350.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+15259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.012 327.684 426.975 338.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+15260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.142 304.45 375.105 314.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+15261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.891 280.54 374.854 290.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+15262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 247.279 389.541 257.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.938 223.969 366.901 233.758]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+15264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.938 200.059 366.901 209.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+15265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 175.597 408.388 186.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 151.687 408.388 162.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 127.776 408.388 138.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 103.866 408.388 114.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 79.956 408.388 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15274 0 obj <<
+/D [15272 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15271 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15337 0 obj <<
+/Length 2384
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\Û’ÛÆ}çWàqY•Ìýâ·¤,»äŠ²³e§Jñ´ÄrYæ-˜Xùúô€ì .(÷ˆÜ©´„ú O÷ôôô.-æ-¾üõaòço¬(,qZ‹âá©0”X­ ã8Ѭx˜îÞÿðõ»N}ø®\&ü×ôƒÉ»‡É¿' ~N Ö›°–X.‹ÇÕäï´˜Ágß”g‹ÿ¶O®
+©Q­½eñÉ¿–TÑk9JŒÓšÞëç©¡wåîo‹ºùê«÷Mµ›2øw³Ùý©}§ÃËìæÝ[ýôí¤øpϽ¶ûü
+Ú„H Ôæ@–”HjSä]5‡ä¨v‡µŽ†jý%Ëè.¥ ¼„Àg’·#» “Ј!‘ÈÿL¹‚Æx(— ôQ•R‰9•Â¾šJš8Ç3
+¼Ým¶å¼lº®Z\ëØmë®RŠH–#—ÀgÝæ²X•óê¦Û´¬ <Þ/Ý“Ó_ëŸnÚ®*
+éjl/Á1.ö2´PŒÉ
+ÀWÈÅvä&€³j[Ÿ2‹<;㊎T¶§à™CBÊqfÑ€Ù00{¼wÁ£2‡“~”âÈËfkåOg©à)$\g(bÜ„€Îª© w¿Ÿ+º×ØH$œž=x×(àÒ¾ÄnöÝ–ï’”p@•À—KQÛ¶gÿÔM$—} å@XÕ6BhŠ½!íº¡áb`mZX’Ff
+^ØFbZo4zâ’e3L1½!aí´¢­1âb½h®Eêx®2MDNÁëŠøróèø 5„4õ‹{üì›—&ýt",¬.˜ãØ[afáç-1âT7d›×+q{œ=
+Jæ[€Ñõô!Nd˜KyCFèÐý><º…ØÎn¹M!ýýâЭ±ô¶2`B°Äd?"*‚KùÍ~ýxAø„D­T&Ežûao¨¿«=YGC öÒÅ& í¦.ÇbK’Uø£ØKxSms KØE•MÐGWúñš4¢â_TÈ+ÌÚ½òºªfCç{½'G#úÓ½<…<´âûµ¿"o›uÌw’½…Þ)(¿†~`‡Ú®_ofÕ¹öýV²+–ç"»S§Nd!`C)e*¶[R“à®Ûš³úØ-ù@IO gð°¿v´½m¹ÅÙ[À;h®3hÏüÉP0jϺ9ÝPE¾•£hEVïh¬ÈH
+)Ë!=ò”KÏâ‹ŸÊ• UÏ0Z’Õ3K²^gŽ1_n®EïxãuaÞHö*¹;r#Äáë዇Í!~ÊPõ[|ùÕŽ»7Qðµ>ž±B ŽÝõbH“"à Ï•Ë m«“.Å]v À±W©?pçt|nþlFÑj¸žÑX·}ö‡‡OõâñEÇ´*â Ëk@k–‚§·y÷^¡ßë¨ì5¹E«Äznc•Øv±­–ðöõ¹vôáyW•³±é‚Äí\hÝRðíX·4 _pBã.ƒMÑ–Ì3m=
+wƒµˆWHõœÆ)ÏiU×YÇsŸíZ$Õ»«¤å¡ú>¿gÀ„ªâ·â3wÞËÓ^'¡,?´<ª'4ÖG½N(3cÖUó%¹ON¼*p™È¡|þtÓU‡õŽÅ ]µ¬Êúì4äjE½›hMPïf,
+ÚU«MS u/¬½åÉ
+7#ŽÞJÌÑ“‹õäÆ¡Qrñ°Ü¶yÞ¯@ÕPÙXg5´(ôÈÙ—J¨šßè¾:„/J
+!MTIõs¹Eû VŠöR.C-óõ ®­ñ ¸p.¦Ö¦¸O»ª»,o¿²+o¼Nñ"¨>¨±
+j4¨xØÔv<¨xÜÔTôµ\nÂz³µŠÖ]õa…W£aÅÆ°Æ°/kö6(‘Ø5cq^éÕ“I½F¹Å£n#Ô8s¯@îxæâµ_ÜDüUCaœ)ù<ƒeœV€£'*·äÔÇ`u0wƒŽ¯üêI¥_£¤âa©1ìªÜðyÍc4^òÕók¾ê¦|I—cJ=<²Žã)òð^Úv~–SÑv€–`ú»µ®ðØÓÑÙ½*À–¬Ò­l$uƒ¸‚’Þ½©ýÂJÞà^èÜK„nà_³¯só¹Kã%^½¯±Æ«Y¬†ôE~DlŒÉ*üE¨IQ_ÖŠ—Ëpñ&Ö
+^kÖ3‹Íº/]×¹U Xo‘’¨Þ×XûzœPPt}`a!1}#ÀCS×ÿÃÄ›X¹hV :b3‡í¨Ža£ ñ«1Z÷¿¼ÿah*¯ˆú|Xl
+endstream
+endobj
+15336 0 obj <<
+/Type /Page
+/Contents 15337 0 R
+/Resources 15335 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15270 0 R 15276 0 R 15277 0 R 15278 0 R 15279 0 R 15280 0 R 15281 0 R 15282 0 R 15283 0 R 15284 0 R 15285 0 R 15286 0 R 15287 0 R 15288 0 R 15289 0 R 15290 0 R 15291 0 R 15292 0 R 15293 0 R 15294 0 R 15295 0 R 15296 0 R 15297 0 R 15298 0 R 15299 0 R 15300 0 R 15301 0 R 15302 0 R 15303 0 R 15304 0 R 15305 0 R 15306 0 R 15307 0 R 15308 0 R 15309 0 R 15310 0 R 15311 0 R 15312 0 R 15313 0 R 15314 0 R 15315 0 R 15316 0 R 15317 0 R 15318 0 R 15319 0 R 15320 0 R 15321 0 R 15322 0 R 15323 0 R 15324 0 R 15325 0 R 15326 0 R 15327 0 R 15328 0 R 15329 0 R 15330 0 R 15331 0 R 15332 0 R 15333 0 R ]
+>> endobj
+15270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.356 758.747 167.319 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+15276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 733.978 176.635 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 709.761 176.635 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 685.418 134.655 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+15279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 661.2 134.655 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+15280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 637.059 157.788 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.901 613.443 141.864 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+15282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 588.624 157.788 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 564.407 157.788 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 540.113 134.655 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+15285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 516.022 176.635 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 491.804 176.635 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+15287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 467.587 176.635 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 443.37 176.635 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 419.027 134.655 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+15290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 394.935 176.635 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 370.668 157.788 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 346.5 176.635 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 322.283 176.635 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.118 297.94 153.081 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 273.799 157.788 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 249.581 157.788 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 225.364 157.788 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 201.07 134.655 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.557 189.639 136.52 199.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.901 177.53 141.864 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+15301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 153.313 140.627 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+15302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.339 129.095 163.302 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 104.326 176.635 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.356 80.661 167.319 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+15305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 758.195 408.388 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 733.978 408.388 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 709.761 408.388 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 685.543 408.388 696.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 661.326 408.388 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+15310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 636.983 366.408 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 612.766 366.408 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.938 589.225 366.901 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+15313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 564.331 366.408 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 540.113 366.408 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 515.896 366.408 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 491.679 366.408 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 467.461 366.408 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 443.32 389.541 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 419.103 389.541 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 394.886 389.541 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 370.668 389.541 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 346.451 389.541 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 322.233 389.541 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 298.016 389.541 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 273.722 366.408 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 249.505 366.408 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+15327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 225.413 408.388 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.871 201.07 384.834 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 176.979 408.388 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 152.761 408.388 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 128.544 408.388 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 104.326 408.388 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 80.109 408.388 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15338 0 obj <<
+/D [15336 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15335 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15440 0 obj <<
+/Length 4556
+/Filter /FlateDecode
+>>
+stream
+xÚÅ]Ûr·}çWì#Y!¸_ü&Ç´J.[N$V*)Å+rIn‰\ÒÜ¥cåëÓ=3XÃÙYÌ4¢<É%¯ppésÐÝh`øâfÁoN¾½8ùó÷^-< ÖªÅÅõÂqæ­]¸ ™‹‹«ÅÇÓ·ï¾;ÿÇÙ/?,´´Lhÿ4ÿ'ç'¿žø{¾û&¼g^êÅåýÉÇ_øâ
+þß ÎTð‹7¿¼_h£˜iÚ»[|8ùÛ O»¥MÒ­À™ дŒÇ~=ü‹suõiu³Þ°ËÇÇ?5=i»ðtÓõåý›“ÅÇWÒùSD÷ƒcñJ¤?%<´mþôz`@
+¨B)&DÈaß½þé¼YÓWZ2%}7 ¾›ÚkœÛ‡åÕ@¿„gRÃò*Ç8¬¡_’³ °%˼Ö-òíÃvÇn­¥á½µ4œq×[Êó^¿9a΀1I øš2˜ ­Û–œ2qA¿ýqU;¦¼®Ú V稬§ L¥³¹¸[[Ré˜ráàŸxiIK
+œâmKZjÀï·7ÇWTª|E?žý¶oq0§Ìzû——ãõø |à *ÂQøÌÏmCFtˆçïÞ¼}wþaˆÐ­+À
+¥Ð:Çí” ø¬€Ï½õ¿|XtˆK"½° Ô&ŒÐ!n˜vmKzy·^m
+¸Ì{+ÿ
+FgÁs2ÿóç]`®aae:Ê:j˜Ç¶!Õâýýüý‡·?¿í”*æf(¤µ:!*($¶$B§Ü÷gÂœ~9“üôaÈÈ<ãÁÕÀÖ`¦ÞåØ:ìµF÷ÖÔâ^+ò5½_®7ÍümÄ%ó =®ÆdôÀu;Ðnùt³Ú ¸fº(l0Ê §¢d^}Ÿ+Æ2 ¦ŸO]M¿ÈÇ~F‹[ œ f›j0”½#På¶!g\ »|zÒ-ØI•¬
+üWÃ.¡%«ý4îiSà-Ÿ¶·Ë»»ÕÓ‘Öú ÙÆ'´Œçëë32´^æ~l\`–ÄBß6¤U<Áõ&DÂj÷g¤xÖÁž/jŒZR²Öíú?(뫯:»¶¨² Ð’ÝÖ¹={¥ùéŽ4˜Î¸†¥xê ¯ÃI¾4‡ø¶%ðb
+'¼\t8*À+*¸`|©-ôý_-
+˜Â1ëEŽ9×è$Äî!§ìz³ÞŽ6 Œ8¸Ñ¶äÜ èMÌ­õ³÷È^k<oçiu¹Zÿv&Í÷„;=ø °æ,-VÀ´-™˜"»Zî–SçX‰!|¶¤ecpœYZ¦*ŽZÒ¦ÛO®Ÿ7—CÞ8úᮨ–Ì[—ƒx/ÒÜ,›¯ývµt!´²~¡oÒŸ*+èsÛ’Š)´’E±õu“:¯A¹”©ÑyhIÆ<ÖÕFײ¨—ZÉt†‰F£EÎ’AÝA+Çi™5´ MCB:šÓˆû®Ôý`|ûù`0þùþqHÐ!ÜAÞ€AZúZ~iŽÙÃs‰–„­äË98¦yhÌ—dÐq.z nL P«™ƒ¿É@¦<L3ü¨,žc  e°GŒG…þV‰j¯T?=ðû@š5I,°‡„¬€
+
+3{³»ŸÜ×ÛiJc†|uÿ~¹¹™*—C«sù°Ù-×›í±¦ü¨gûëÌ|:{´NÜlY¢¿P°åÐÒЀöئ³¡Ï¯@ül?4;ÜséC“×£w]6‡Ørjd9Úý‰æ8¾|uZy@?¢õïa„ðßwËÇ-Í6 “5$‡+ØÖ¢O¡Rú&"$b`†· ÉR6ó± Å%üJV€m‚z+s\L@o;IoÏõ2Ð?Ç ôwð»vµÖ»‡c¬-‘Èûõ€óí ì:n!¹¢—¸jâ¶ãÔòꪙaø·Îô|Ò¿îž¾;˸"û˜ðàÑhM˜páB†.!ñblþëŽÍâ‘~4dcàq<à þ„Òttt?œV9|Œ{:ŽÈ¦ªeê)Њz ßÒ`KûcøâSšA¸÷ÚL>dƪËCa`}‚˜T…#Ÿ4'X³©`šÐŒŠ®:xëÍj{HRJf«ÛcK“ÎÇ £|Á4e@ôQ@CÜë¯i^Á®WA=(ƒ3/ì¢?_í9<´I^Z¡îvË»®†D0ïÔäetXðhjTÙµU™[ìÿ ;¹h*‡làÍIαA) sBSÆIÚ”ø׃Î4ΉüÚ\—¹DZ—Ù¦ŠjAmÙ„\ȹHZÈÙ ävzIK¡X(êZ¡œR
+#²ß)æA.oÜÏkZßxùpÿ°9>¯/NfnÎVz¢Û´†tà7™ÿ›“k÷IkgÛùÜõ —D–DîžÎ?]^®0P´,–Ä[ìÕÎ[lȨ?.gK‘öh1OºZ5Ù˜åóÝnx€ÔäL\-óúËCç–Êæ!n¤ƒ:ÏŒÓ9êþùþÓÑ✗7…,ĆùŠÍ¹î3N^Zöytòè¨qö2Ø/«
+óv°÷~ ?¢˜*ly)tjç±C¾ ÕÝÑœ\×iž–uÍÏ4?e×½ÚÔw¡±[ýs€±++ã
+kmjÍ* `¯~õ XÏøoP1ƒÛn;f#XB¢xè€n”É¡؈à0ª
+ Zjð´T¯4yžH —ÔåL®Žú•–è7êW
+|µÚîžÐŲ¯`ƒ65°½eÒš{TÄò¨´†àBóô!VX]õÄèt®ˆŸ%Ê5L Qa k6d]‰™8É`¿« ¾%·!ƒßêDs;–Ž¬±‚€çȇTÌ‚j»˜Ô˸ s®ˆaÅ°/vÂè%ýˆeýÇE¬n'bð°§oÄXˆKÇ´™àrÌñÝ|z]«ÆTú]b!—©
+Ø@ÇlHÇÙ@ÇŒlH1‹Ø@‡ŽlH¡«‘µ°Í³!tL .&Þ9Ê¯à “Ï;3 ‚*˜cÛ3¨"2è~zA@§‚)ßÈ÷~"Òk?\ ãF.¤Àã\ cF.¤˜E\ CG.¤ÐóLÄCÓ/nõ0É7¢‡™^t^*c≈0M:]'ΩìÁ}×½±Î['èS²|[#_ìŠTN/vP™Ž©œS™Ž©œb¶—f@ëáÏ»õÐ%̓‘Þ¼D¥TŽ?ÓNsÞNà³”°p²^ؾ€ÏtÄ–Ï)`Áb¡ü‚£Y?&T¯eËÕ?~…>1a‡&_¶‹´NïÚКŽiÓšŽiÝl{:ûtöê@JBr'kà‡•Ë×)§š‰ÓM‘d¦þc¬¦Ý5ì]5c4­as~¯ñøùöÉJ"4f&…ÊÁç­ö'èb"CˆÍ|¨„Á†l,:Nä
+¸‘3àQ"WÀ순anwËVîÓkýýÙbÃô …•ïáEžši^cuµÀÇØDŽ8s‹Ñàƒºr€~£6êGz¡vT?舭†¤€æ¡‚aºÊb ÈDÿñpÅ$75G39â<ÁWƒdÿ…1í²‚YW¡ Ò®8MP7jW
+<®]t̨])æí"w jWŠ?s³Ì«)^ˆÆLV…\6¤â%‘Q%¡#¶J’NQ:~T’´eËÕ/ ‡>a_Ši—˜
+)ƒæ)NTÀ´N·‡hçÁ0Ö<˜s<ûË¡«@ƒ‰`6)ƒ>|.„é=:(ƺޫôй^骉X{ãœG|N'¨òB5%ñÆ_…8±,¸€ tÜÈ…xœ tÌÈ…³ˆ tèÈ…zž8ô´Å„Ý ÌT…Z lˆë±•Â*SèRDnðä±T8ìD5=4*Gž·NÐ%-B9•©¯ÅD&gÅg269Å'22ò8…,Lƒ UáatU½ì=Ì3ÓJ`Ïðº<ê¥?ÍÓ±9™gŒÎ ;:g˜E©pÓ<[X¡ ¿ølaÖƒ²S/Sá\”n@ÄÊB bcCNG¡p;fgÀ£Ì®€ÙQ;ÃLî— æ*ðAMU³XÉÏ3Ï›Tz9­­fžve¢£µÅ Ö¦„ÖtÈHës|±”ÇÀÓÕ
+ŠíÍãŠR²“” ³\S*t •¬£Æ"Á}ù¡Ck|ƒ»ôLc Í—‡J½ú³¢eoÌW´
+¸¢eÀ£ŠV³S´þ` ­B:EË:°{diN7K0Ö¡O£àE-Ð":<ªš“=ô™v*`ëž{ ëX¨qï
+¢£Cú%ˆ† c/¿Úö::¶?Ô› ü漯ðá ¤ƒqù‡/Ú—•[_®†Ù€/ë’‘ Z» ¸ü¡Óþ§‚ $ \M~ª—üŒøRoúŒw?°´ õxñ"Å[.Üßðñ:nÀzi‘—/WxÚ`Wñw¨ß‰Ÿ=H> RÊi:vÇé|”ÓtÄŽÓ)âãmóÖÚv}9\D!™T&/+þzTN4Ì2~b‚ ¬Û¯Ô§Àsí3þ™õ´kýÌÑ´|³õi•wÕ€¤ã·ï,vUâd,¾+Ãl쪹¢ô…¥X
+endstream
+endobj
+15439 0 obj <<
+/Type /Page
+/Contents 15440 0 R
+/Resources 15438 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15334 0 R 15339 0 R 15340 0 R 15341 0 R 15342 0 R 15343 0 R 15344 0 R 15345 0 R 15346 0 R 15347 0 R 15348 0 R 15349 0 R 15350 0 R 15351 0 R 15352 0 R 15353 0 R 15354 0 R 15355 0 R 15356 0 R 15357 0 R 15358 0 R 15359 0 R 15360 0 R 15361 0 R 15362 0 R 15363 0 R 15364 0 R 15365 0 R 15366 0 R 15367 0 R 15368 0 R 15369 0 R 15370 0 R 15371 0 R 15372 0 R 15373 0 R 15374 0 R 15375 0 R 15376 0 R 15377 0 R 15378 0 R 15379 0 R 15380 0 R 15381 0 R 15382 0 R 15383 0 R 15384 0 R 15385 0 R 15386 0 R 15387 0 R 15388 0 R 15389 0 R 15390 0 R 15391 0 R 15392 0 R 15393 0 R 15394 0 R 15395 0 R 15396 0 R 15397 0 R 15398 0 R 15399 0 R 15400 0 R 15401 0 R 15402 0 R 15403 0 R 15404 0 R 15405 0 R 15406 0 R 15407 0 R 15408 0 R 15409 0 R 15410 0 R 15411 0 R 15412 0 R 15413 0 R 15414 0 R 15415 0 R 15416 0 R 15417 0 R 15418 0 R 15419 0 R 15420 0 R 15421 0 R 15422 0 R 15423 0 R 15424 0 R 15425 0 R 15426 0 R 15427 0 R 15428 0 R 15429 0 R 15430 0 R 15431 0 R 15432 0 R 15433 0 R 15434 0 R 15435 0 R 15436 0 R ]
+>> endobj
+15334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 758.07 165.059 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+15339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 734.529 166.297 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+15340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 709.635 175.254 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.247 709.635 195.195 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.872 686.095 154.82 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+15343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.668 661.277 195.616 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+15344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.455 636.983 204.403 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+15345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 624.874 165.059 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+15346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 600.782 175.765 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+15347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.7 589.225 128.663 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+15348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.95 576.565 142.913 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.294 565.008 148.257 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.284 552.899 150.247 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.985 540.113 163.948 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.975 528.005 165.938 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.477 515.896 149.44 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.945 504.464 143.908 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 492.356 148.589 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.13 480.247 156.093 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.32 467.587 169.283 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+15358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.895 456.03 146.858 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.084 443.37 160.047 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.787 431.812 133.749 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.381 406.918 209.344 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.882 383.378 147.844 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+15363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 359.16 140.627 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+15364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.192 346.375 133.155 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+15365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.17 334.943 140.133 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.736 322.834 121.699 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.204 310.049 131.167 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.901 297.94 141.864 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.275 286.508 135.238 296.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.118 273.722 153.081 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.118 261.614 153.081 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.439 249.631 140.402 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.578 238.073 124.541 247.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+15374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 213.305 176.635 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+15375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 189.639 137.139 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+15376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 165.421 137.139 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+15377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 140.653 175.765 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 129.095 166.297 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 104.326 175.765 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 92.769 166.297 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 68 175.765 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 758.747 398.05 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 745.961 413.498 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+15384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.082 733.852 404.03 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+15385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 709.761 407.518 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 698.203 398.05 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 673.309 413.498 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+15388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.082 661.2 404.03 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+15389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 637.66 415.48 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 624.874 413.498 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+15391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.082 612.766 404.03 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+15392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.332 600.782 410.28 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+15393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.745 589.225 344.707 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+15394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.869 576.44 424.832 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+15395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.509 564.331 411.472 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+15396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.63 552.222 378.593 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+15397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.341 540.79 364.29 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+15398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.755 528.005 474.718 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.558 515.896 463.521 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.969 503.787 478.932 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.772 491.679 467.735 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.968 479.57 482.931 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+15403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.484 467.461 478.447 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+15404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.652 455.353 437.615 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+15405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.456 443.244 426.419 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+15406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.246 431.135 449.209 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+15407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.049 419.027 438.012 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.325 406.918 436.288 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.129 394.809 425.092 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.006 382.701 455.969 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.81 370.592 444.773 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.295 358.483 448.258 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+15413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.099 346.375 437.062 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+15414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.466 334.266 482.429 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+15415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.15 322.157 437.113 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+15416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.954 310.049 425.917 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+15417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.744 297.94 448.707 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+15418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.547 285.831 437.51 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.368 273.722 442.331 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.172 261.614 431.135 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.606 249.505 460.569 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.409 237.396 449.372 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.823 225.288 435.786 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+15424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.627 213.179 424.59 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.918 201.07 481.881 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.722 188.962 470.685 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.636 176.853 482.599 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.439 164.744 471.402 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.504 152.636 455.467 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+15430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.308 140.527 444.271 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+15431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.793 128.418 447.756 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+15432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.597 116.31 436.56 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+15433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.436 104.201 492.399 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+15434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.742 92.092 454.705 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.546 79.984 443.509 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+15436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.087 67.875 490.05 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+15441 0 obj <<
+/D [15439 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15438 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15543 0 obj <<
+/Length 4808
+/Filter /FlateDecode
+>>
+stream
+xÚ½Ks#·€ïú<JUYïÇ?*N%•ÇV*U¶\‰ÚUY"’²½ùõéÎÌÎ Ú{HìZsñ €îF7¦»‡¯>¬ø껫?¾»úê[¯VžkÕêÝýÊqæ­]¹ ™«ww«®ÿü·¯¿ùÏÍOï¾_ii™Ð
+þjú®¾ywõß+ÎWbÂ{æ¥^Ý>]ýð_ÝÁû~Å™
+~õk÷˧•6Š™n¼ÇÕ¿®þqÅãÇÒ¦ðXV0><×ÓÃík¸7Li×ýPÚæFðk <<W.>>¼ûvwÿ#çj·¾{Í20­e;\(Éà)}{#øõËÓû;@¶’g ÈÖ0›/ôî¾@tŠYO1Wg™rÙ\ï67Š_ÿòp»9ü¡cŸ û=ýŸß]­~x#¿6¡ÿï'ÉY½0^¬ÞXB† œß3á™Ô0a˜0²e"’³ p$ø3éò¦Áœ§ Í4ü"!7 ÄD{C9ΤȆ] š)Ø­Ó®ù ú­ã`9Ú\Y浞©àÍôQÃcü~ó¼Ûß¼Ñüú8wý´€eY õRƒÌj
+©‡‘œ2s'by6Ãwé<ªr
+$¶1Œ Mzw{#ùõÏ%ß … ™´ÓŒólÒÇõþÃ梤øÜoWLÂÒë¸e¨øðTVp=m«â›ÓHθ)[&VHOÁÖŠyáSveË,gB€!ð<OÛ²WN»`AËÊÍaÎÚ(7 dµŸ¬ÜÍÜQ¹cð4ångʳ·À.)6Äw02ÔA|ç}¶ÒçÅDAû@†HP¸‚—‰§€!Ì! Šj&ÅÀ4œ
+&G2*Ì0)ìÞ¤$ì3‚báà’j A¦ÐŠ xÎd {É‚ÏÀ DØé·Æ»Epù€ãh%¦Ú±fì`Æ.,X© üÒ •‡%³)òîÓv]\_4`’d¦à˜„|¦Ë¤ÃƒA²zŽ±Ž)(¬Œ¤¤¬í“Ä«?
+$xpBgÈóûÔ]Ö’Lì‡Ë§ºÐÇ&¨éU
+5†¤P“Õ¸™;êq ®ëq;sPä˜ù´þ­äúæA(˜Æ3#DÊ<~ÜoÖw‡ÒÙ‚wÑ$\8S¬Î¹ μ™Ö8Å×ÖFÜL°íÈÁzÄȲphͬ4Líº(6ažçÀÎpÁ…Ñ:çN÷êv„'Ô “¥ÀY ×#FqpÛìd“ÕÌMV ®›¬væ`²b&:ěҮ«Eµž¡&ÄÌeÒkC˜ãxÀnqï(L‡ðÌ{7Át´#Ó#Ïn’ëÚK€5b—í“·LK?#zàxíKðÆr.LVâfî¨Ä1¸®ÄíÌA‰cfµ]ˤR\ð=‚T)÷y¿»-zN{MA…hƒ;R—‰ePLz5Ã|è ™··8’`=ˆ½õˆ‰ç…C›No°à{8éì9Ùpœ O…àØ»ºÔïŒ 1ÝïÐ^‚ˆˆv“…;ùÆ£;˜¬\5YÌÞd%ÌÃíÇÍÝËcé5 Ó
+~j( ]v²I¡•½ÒâxK¿B(›‚—íÒM%4º¢HÃÀNÖæfî¨Í1ø‚6·CmŽ¡gÞA¤‰©}Pˆ4°ÙW’3ð- ØYqD
+^&– nN˜9&¶W
+Š«‰9…LH;t0!1ôŒ€h0õ’d¦`6”ÈfZKÁTQ
+. J¤Ø…N¸czŽ"xgßÚÍ{Ä'߀´sG³ƒç 0"L°Z˜#ž0+¯Ph ¢àÂa„ÞiÂ& òur—µrF4Ùn;T€•ã¢¶K`:¸ô<0V»”WyyÊ!:kfB,"MÆ\¶;Av´“ÕWÁ?} ¸ Àìq{Y}Û¹ƒú&àªú0{õM'[ !à´Ö$`!¼ÊÀÓ$Då!„íê]¦Ÿÿ
+¼ç)np$3¤4×u¸9èq̬GA{
+0DVù¼l«ð2ÉÍHÊTV0ë42Ã@ÚM¾hçŽÊƒëÊÜΔ9fž‹ `¥§€ßyhé
+W"ˆ Ø9Æy^&–ÞvÞê @8%).!p$eí ÒÎ,HÌ<@€¡ÿ›
+&Ü$ÐZ
+^&Bmg˜-…WÝ784“o>Ú¹£ÙŠÁu³ÕÎÌV̬eBH›
+”þ.SpæSdí2Ó0­W{<ÛÓ©.Ú(p¤ÕÓc Âi<A9„¥ÃSu¹™;êr ¾ ËíÐA—cè¹ËL8Ä%_~‰l+W™–y!(¸.0Ã3ð4©4¹3
+&Þ#æÐÚE¦aVLŽ¬
+Kx‘tÇ´ò3üý LŒ#&_c6SGƒa_¶eÿÓãP>š™jz¡Ó©V¤C3!(¦jÁñtªËd¬ŸÕãFr †(JÉq$ne}£ÒSP˜áSjÍK”@€éú±%à…f^37§»²±©f¯ÉxïÌäròvî Ë ø‚2P{mN¨çÚ•œÞH@û7éWÚ•€@ú@öXRðÂÆv­y¦; xWÆ5EI9zQc»Ò V„€Ú[‘„z>]_…@ûW! ´ž®Ë Ø™.‹$/“Ö/ÌihÓ©…"¨+Çœú\W¾ÇûçõþæÍ™æGB1xÎv<ôØf!Á?¯»¶åo¤aÜ„ÙÝqO,,AcÔîXR°?îGvûü|aWÁ>fÛªx—œ<{ZõwÅ‘Æþ®Ý4>^š„‘•ö®S$S 8Ð ^â@zlh~ß›.øËÎd™Ë?î¿^×—”.ëôÁÓAþ}ãPð¿Þn/ ª=3',Q0]¡oó
+Á8ÜëAwö‡bÇRìjÚ‘¨øÖ‡„¹Ù¢ý¥Óú.vo§vÝDBíÕ®÷åÿ`(æŠñ±Nçúøp:Å@Ðpe§ù_n¿9-F/F—ڋƶ«NÐt]í?Ó0ÔCcË»ß>•ÅBív,vnÃÀ!æÞ—^;‚Ó]›íæ.¯˜;%à~·;&ë?îƒi©V6ð®«È%‹yT¨^ÍUPx‰ëCúQ…/uhþÊÀ8ø+¿ó¹£„c‚ Ã¿?ið_Q ¥!.ð$`ì°äDJ~ØõžìJÁfoeówÆ­Œ¿ðÅ%²¹_ÿ8¸_ÿD‰TmÙÜ¥ȤIÿq}.²A‰äø‰v0: ÖäŸøß0×›^.ÁàI1{CÛÛïš´ßÿÒrÙÞ†œÆç6ü_D*Û»ï÷R™4ß?¥•Ö Bdí(¨p¢hˆhìϨ ü¿OcÜø*—`Êv6÷ó·3îçÿÅ¥RÃßsŠb
+Fêä2\–ËæÖöƒ\Æí_J1‘Rp¢y$&\;‘2åÓû[\jOÁ4ø²Þ§Ì÷¨/÷÷è¬löº+)S$|°»˜Ö‘ðûHp»~êLòjò—mF nî–?JpÜ-±"Δáæfêƒ Ç½Ôë2ÜŽd8f®Ÿ¶¥ibY‘¤è¯ºw}ÙLS). 1¬²¢ø<€òüÊìó
+<b‡ßꈛûž½¶F'Íh
+,øh؉4¦ö×Ös× {ú,õu½]?~úŒç“ÀsŠ¢Ñ¯2¶«8I:îž_<üFœj\üFnÌ]¸|,oÈxÖ[\ºÒ•ÚtüÈJsWX”;ñnÒöv½¿›ý^
+l]Ê=û:YaÕ '™¯;9 ÷ç‡íì½Ò$^L «ð¥”¤hû¨Tè: &= Ï$tÇ£hrÙ6ëry^B<ï>AGÀŽYÂ=/!ÁtµRÜpºT˺zÎ?ÿ\|ïF”œÀŸáüðŠu!šüíÒ(²úP‡s _ͶwæB}rJ¥¹¦>yÁ¥B_XÔ·oÿÆ<ý³K®„“þ0=ìk~Ž4ðó¿öF7Cà—µõÁYüZö IgôeÞÙ§3á÷ ¿–$UÊ3½Ú-8%Eþ£zÌÑÞxfˆ9Ò~7S¿‡-eáÃÞ6ËÑj—ãÌrßVìZl(:¥tq¤N[¥LŒ+^­ †’\åúÏåö®<¬¸mîú€Ò¦]Êe¹‹v³ÿ—Ó?_6—²9ýïqWÖöÅ«²‹âÖ^²=ˆ[R²=m·^Í $n—§Ð\Ë<N!.f>ïÁÁ¯|_rÝÈÅ»C®KÜÛ¯$ œJÝãfûáøqæ@åçÅRYr!^ià_N¥¨;îãÛkʆûø¤¦l=ϯ/'3h9áEðáCa/þ(ª­””àÊgÕV¥PßÃsŠª2¥8ˆnVUöþ\ZO ©²Â´›WY=‹ª`S)¥æE{O›§RX‰—‰‚ a¾bJ˜§J›í‡!cTÞe"öøð¾¦0øÁ3¬'l®dêb=a\Éò}YQdÞv‰«¼©ª)Í¥D£¦ÄµD5Mi'šû÷°%mQL Šš-¥-ã<+Ú*GR°£$3íÒíRà~sY-º¾KD¶¹PkÙ¸P‹@d'÷æú¬Qdãú¬šÈ¶‘‰—E¶;ˆl2ÓÝóúœ´©˜Î{uM£æZ³QŒ¢b³/%Eà‘˜=G ߨÉP+o ˜wY‚Z©ƒü$³_‡eÒ3Ïqך”<HwŸ“’¿ø4W¹ òW¹Uħ×ËOÌ»(>íÔ^~’Yž{›êÀ@¼Ðuºócèý~Wò1–¥P ñ»‚"Eö^íêÃÜ~‰Žà›YGáZztoÍÕæÚÁACâÚÁŠ†´óz ‰y5¤ÚkH2Ë Òí5$†î^Žg²!dj'bö¢V)±´®øyCPꪱxJ§¥®Cœ9HuBîxjÜVáj£ºä *öùÖRbù* …)ÐR„ýKÍ-Y
+endstream
+endobj
+15542 0 obj <<
+/Type /Page
+/Contents 15543 0 R
+/Resources 15541 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15437 0 R 15442 0 R 15443 0 R 15444 0 R 15445 0 R 15446 0 R 15447 0 R 15448 0 R 15449 0 R 15450 0 R 15451 0 R 15452 0 R 15453 0 R 15454 0 R 15455 0 R 15456 0 R 15457 0 R 15458 0 R 15459 0 R 15460 0 R 15461 0 R 15462 0 R 15463 0 R 15464 0 R 15465 0 R 15466 0 R 15467 0 R 15468 0 R 15469 0 R 15470 0 R 15471 0 R 15472 0 R 15473 0 R 15474 0 R 15475 0 R 15476 0 R 15477 0 R 15478 0 R 15479 0 R 15480 0 R 15481 0 R 15482 0 R 15483 0 R 15484 0 R 15485 0 R 15486 0 R 15487 0 R 15488 0 R 15489 0 R 15490 0 R 15491 0 R 15492 0 R 15493 0 R 15494 0 R 15495 0 R 15496 0 R 15497 0 R 15498 0 R 15499 0 R 15500 0 R 15501 0 R 15502 0 R 15503 0 R 15504 0 R 15505 0 R 15506 0 R 15507 0 R 15508 0 R 15509 0 R 15510 0 R 15511 0 R 15512 0 R 15513 0 R 15514 0 R 15515 0 R 15516 0 R 15517 0 R 15518 0 R 15519 0 R 15520 0 R 15521 0 R 15522 0 R 15523 0 R 15524 0 R 15525 0 R 15526 0 R 15527 0 R 15528 0 R 15529 0 R 15530 0 R 15531 0 R 15532 0 R 15533 0 R 15534 0 R 15535 0 R 15536 0 R 15537 0 R 15538 0 R 15539 0 R ]
+>> endobj
+15437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.487 758.747 222.45 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+15442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.291 746.638 211.254 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+15443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.899 733.978 171.862 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+15444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.703 721.869 160.666 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.511 709.635 181.474 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.315 697.526 170.278 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.043 686.095 172.006 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.115 673.986 161.078 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.402 661.877 144.365 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.957 649.769 165.92 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.703 637.66 128.666 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+15452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.92 624.874 212.883 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+15453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.724 612.766 201.687 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.094 600.657 233.057 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.898 588.548 221.861 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.87 576.44 213.833 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.674 564.331 202.637 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.556 552.222 230.519 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+15459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.36 540.113 219.323 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.406 528.005 207.368 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.209 515.896 196.172 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.989 503.787 222.952 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.793 491.679 211.755 501.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.372 479.57 216.335 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+15465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.175 467.461 205.138 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+15466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.247 455.353 195.21 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+15467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.051 443.244 184.014 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+15468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.421 431.135 215.384 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+15469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.225 419.027 204.188 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+15470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.368 406.918 213.331 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+15471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.172 394.809 202.135 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+15472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.75 382.701 195.713 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.553 370.592 184.516 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.924 358.483 215.887 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.727 346.375 204.69 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.903 334.266 206.866 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.707 322.157 195.67 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+15478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.467 310.049 230.43 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.27 297.94 219.233 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.87 285.831 215.833 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.673 273.722 204.636 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.242 261.614 198.205 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.046 249.505 187.009 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+15484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.416 237.396 218.379 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.22 225.288 207.183 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.72 213.179 205.683 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.524 201.07 194.487 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.894 188.962 225.857 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.698 176.853 214.661 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+15490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 152.761 175.765 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.349 141.204 166.297 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 116.987 137.139 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+15493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 104.878 140.492 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+15494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 80.661 149.279 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 758.195 407.518 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 746.638 398.05 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+15497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 721.869 407.518 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 710.312 398.05 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+15499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 685.543 407.518 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 673.986 398.05 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+15501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 649.217 407.518 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 637.66 398.05 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+15503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 612.891 407.518 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+15504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 588.674 407.518 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+15505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 564.456 407.518 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+15506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.144 552.899 361.107 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+15507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.81 540.79 388.773 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.449 528.682 386.412 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.256 515.972 402.219 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.52 503.864 373.483 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.322 491.804 392.285 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.851 480.247 392.814 489.874]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.989 468.138 429.952 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.663 455.353 371.626 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.628 443.244 403.591 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.273 431.261 425.236 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 419.704 381.032 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 407.595 381.032 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.456 394.935 360.419 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.644 382.826 375.607 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+15521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.635 371.269 418.598 381.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.78 359.16 398.743 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.941 347.052 405.904 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.506 334.943 389.469 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+15525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.04 322.834 391.002 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.748 310.725 372.711 320.353]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+15527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.445 298.617 368.408 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.752 286.508 401.715 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.897 274.399 381.86 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.265 262.291 368.228 271.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.698 250.182 392.661 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.957 237.396 362.92 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.156 225.965 374.119 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+15534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.712 201.747 394.661 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+15535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 176.853 407.007 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 152.636 407.007 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 128.418 407.007 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 104.201 407.007 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 79.984 407.007 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15544 0 obj <<
+/D [15542 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15541 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15605 0 obj <<
+/Length 4266
+/Filter /FlateDecode
+>>
+stream
+xÚ½M#9r†ïõ+tìÜi~\ ¯ÞƒÛ}00Þƒ¦J]-¸J*KªÿzG¤H™%J¦1­æ£Ì|_fD&ùJ¬^Vbõç‡úöðÿô* Ñ9½úö}åÅœ[ù¨'WßžW¿|ù×ûç?ý×ã_¿ýee”¤ÑðOÛ¿xøÓ·‡ÿ}ðÿÅJ–!B‚2«§·‡_þ*VÏðwY‰AÇ°úmüäÛÊX=Øq¼×Õ>üûƒ¨¿–±Õ׊bð†vrù{½nÝÿo!ô~ýüó·ÊJªñŸ(wé[À‘Æò~FK‡(TË~;¾ ?þa¤žq‡—Äý??¬~ùª|ø"•I8Õ꫃ÐnõUªAŠXFúùËéÓ×ÄAZEøò¾³ÆàÁ@#ñég^tƒ€¿fà…ÁÕò~}TâËÇ÷™K$å`aÀJieMË}ÞO‡ý£_~ÕûUéÁÀçϧ?Ü$"íBeP‘vC0æ®*RfˆÚ0¨òÚvUDç%Õ¼¾ŠÈØ¢¢šû²9}¢ k9˜¨ c[æúùù°9ϪÕhÓ^î+U ÿ$ðÌ}0’ƒ‘¸T®P­€)_zÕÂ@V†®j鼤ښ×W-[T[sßÖï3sÞMêqp!\)ºzp$SÍTw˜óœwƒ‰‘®H÷´Ã@;k§¢u•C‡fåTÔÃæ, ÊÍÒ9ßBrF’QÝU8V *0”\8}éÐyI:5¯/2¶ˆ§æ6¯›õq3Ã5ç+ÉÀ5P@5å~?«ÖÂYé-™îŒ¤ç(ñܱ£¿k‰çT€ÞÄ2¨ÎFpÝ—T[óúª%c‹jkîq¾Äsƒ·šƒ º0FO˜§õi“
+<¸ÏÂ9]2ÓJ íG‡#yëïªY¡¡b(ðp gº/i¶æõ5KÆÍÖÜC‰gá zôƒ#YïÙ X§éòÁqŒ–=ùÐqgõ4¸®zÈÔ,žûÛáñ«´_¶y"(ÈùÁ*ŽZGÒꮵžµv0’CB0’ÝZ—4ÔðöÛ9ýˆÑÙt¤” [æûö}óºÝ}Rè.l@ZÖ´à·õßg˜ÎÂeà@‚½œëîQ‚Gß~ÝÎff)ª°ävm´0f‘¤°·˜ÅQÍ¢%Tð %¦ÕbˆÑuÍBç%³Ô<|&¼Ý­OÛýnN»0"Ë¡Jc==Öíq ]Œ6G+-š`r¸ûG˜æÿö¨ì—¬^訕YÔ Y Š žC½2@ çÙÔ{M± Àµ>0¨ò>vÕKç%õÖ¼ç ¾ÍøÛöinâÅGÑÊ0ñ‚;iZô¬xµœ²H 7i[än?×–YX:¦Õƒ®e®±  ³Þ¾®Çòì5IN ì瘈÷DŽ2Gr7G§}Ôल®[f3ðÎÆixÏÛïßÑ:›Ãf7'*˜} HGKˆèZúñð4w³qƒ ,Lå'ÌõnN0û{Ï„BÉØ89ÉÇÓÜM5À¼d44À¼¤õäÜnÿïq›ô²,âÛÕEÏRŒãc“ÂHÆê{v2Ɔq!Ý¥4]—ÒyÉ¥5ï|w«•Y—*|Uà^Zúo¨£õö”Êáú¿h¶cm9„#)mïùPÅÀü¥I¯Œ³` 8#]!ÑyIH5oþ½”ðIÍ€Äg*Fë–¹Ù½|ÒK(vZk‹Ówý}®P  ñÁ-Ò¬Â↣¶Ç‘„ wü¤ÅM׬ÀcèÖö ¼¤ÙšwY³ddÑlÍìj–ŽÍš­±Ûݹ‘ùûŒloºgã¡KVG?q×…}:Ø!D†ªr±»°w–lÃÛîþè–^·Ïó=©‚FŸŽÇ·qÑû–±UI8ÐF0¡EO
+âH»¨\ÐåÏQwâH6è{v‡ÚIèG–â@ÆwëN^ÒqÍ»^Çd|ÑqÍß$þì<ìCäàÂ<l|l¹‡ÍûþðøÕˆ/s·g*Z¶f°-;íTºh¾¢Yt€î×:ŽrGÒÎÝÕ?ûh†rR¶[n3ð’jÞõþ!ã‹j~ß?tnöOÍ=ñaîæŸ2,Ç ŠŠÚOÏ÷¬_ãøœ…éÕøœeæXÿ𫬞³Üv¿S¤ÏR·ÁHÒ6¿^Ñk©¡#gXVŠ‰þ펎Kv­p×»•L/n­ð}³Ò±Ù¬¶ïU:6{õ'l± xTšEºr«µð-å=ïr*À?P kjÕ¸¥¬Ûí0ðζix¯ó×GºA)ÇÀ”þ,ݺýõ€­(÷kµ‘) RÙ%Õ’ÂÕ ,:‘¼¼ë*Wå 4ê ÝäDw•+/é¨æ½m/Ÿ¼¿…±èL¼Ô:´ÌÏg?\õlÖ¨!L¹Ï›ãÓQ¦Ç<
+fÅE-²²ÈæXæŠ#™èîY2(8Ã60,sÅtè.seà%ÑÖ¼ŽhÉÌ,ÚšÙ-›E[sGÑ*²ha’6ž£ÎÅ‘”w½cÃ]MshÆ‘Ý®”NKŠ­hoÛ¹wîXã)MJ\x/uCÜî¶'îÏИ¨Eo¡•€ÚÛq¬§Å‘„S÷TŒŠg»º„ÿFÛ]OËÀ; §á]T™¥Ó0Q;fF;7Í82˜¬8–—JoݤN½M⊒¨–—Žkxuwy)/i§æ]ÖY´S3Q;–¬|ÉÁ²UGrê®kÔ¤Ñ<[Åq +¶Š3ð’vjÞeí‘E;5µã¨÷,\=çÇòÆqÞ]MHŽI†Ñ¢»¸‘LK²©i—eCÑÔÄ÷õav‹¯Cð–Î4r|¡Ó0?jh±”ót**Çù–úyâ%ô ÇêÍ`ÕäX_·ÇSꙸ^/ÊþÂ3mÂÇ‘nÜ„Oue´ƒ
+ «aºOÙé´³-kÚEW’Ù–5±ãJ:3Ù²fv]I§&[ÖÔ®+éÔdËšŠ®TTW¿”ž£BjˆÞÞÓ“^ò$ ¤t¸^äɨi=IfOÖÄ÷Ãþ)å8MŸ`yh°N*n‡±“³z^[w^È\.x¹ðøvWÀ÷tQŒ;ήP¯¶´ô(½q-‰µK¢ôËW+èŠ#GÈœVjðÁtÃô4æ<ËAÔb0ѶÄYkc`BpL¦ÃøÆšù©µ‡ˆçìL†™œÝFÊ-&
+Ës’cЀ›SÙí물¥-*n!g»ÜžH· 9ٮإ“XìB'f»ÔÄËv¡3³]jfß.tn¶KͽÂ.tp¶K >n_fìo² 9¬°Øåö°ÂÅO/‹]È1~Å.¸Âb:1Û¥ 6¿ž¶ï¯3Ýžâ 9µÃ{’–xZf·Aèà‡ªç]‹M›phÚFè µZ"czjb–ñ=S³Œé™‚YÆ—s³ˆxIÄï 7òýŽéþSAy1.•gà{è¼nŽ÷Çæ éÿsØÁIéE2(WÅ%u=N±(êö8ErAü+Šê*MщYS5±Rþé·ó²¬÷÷Íaþ6däø*¸×YÄÉÁÏ
+,ŽjY2e‘“‹ÀnO>¤ ŒœÏWÖÉ>,£³Àjân?W§B£,XÒèq‡Eƒ|?͉×âš–ô¸¨gr˜ÏëÓ:m±6ã3%S"9÷°(öŽ¹‡E±äDÀ¢ØNòaQ,˜[/*–ŽÌŠ­‘›9ÛÐ9;H9°ÎÛý짜5n\’Žƒ0̵Ü?Ìâ ~p‹*RzÈc6Ë=C³YȈÙ+½˜Çì:0Y¥^²
+˜œÒ?-}A߸1–Nuq4JC­Z©³n#ï–è–-Yt{ÇhÉ¢[ran'\²—NÌÊmâç’ò´pàˆ—Ôúe§‘–»Óöåcÿ1÷-ª1Q€ï oÑÏû÷™çËã FBW¯] =gÞ<öi7yÄ=ëjIeD˜,¦¹=b’nr
+b1M'd²˜†N̦iró•Jë8<”«‹žŠÒCËõ¼=t‘üT”ÒW®g'v±\O:1_ÏšxñJáÅå
+Ì´×KŠzh^ñ‚Ð<G19Ú­ˆ¸›WDL'f×ÄÏwÕ8ŸåHq™œi[ùÞó^4Dΰ+º=ÃŽ\;Г֊†:)vECtbÖPMìkˆÎͪ¹ŸìBðI–cÅ7³br¬¹äÖ PgŽÌ>|÷}l¡çߣÉeCß´,± 9=¯Øåöô<zÝ@Í—+n¹œŸWÌBæe¯T¼¾UÈÔì”–:.!ü}~˜f9Z(7âähQ‘Ç\*` ºhe:=¿¯èööü>²néévY¸½¿¬\b’nCìj—›ÄÛpëßû¹ÔÅ_Ld
+endstream
+endobj
+15604 0 obj <<
+/Type /Page
+/Contents 15605 0 R
+/Resources 15603 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15540 0 R 15545 0 R 15546 0 R 15547 0 R 15548 0 R 15549 0 R 15550 0 R 15551 0 R 15552 0 R 15553 0 R 15554 0 R 15555 0 R 15556 0 R 15557 0 R 15558 0 R 15559 0 R 15560 0 R 15561 0 R 15562 0 R 15563 0 R 15564 0 R 15565 0 R 15566 0 R 15567 0 R 15568 0 R 15569 0 R 15570 0 R 15571 0 R 15572 0 R 15573 0 R 15574 0 R 15575 0 R 15576 0 R 15577 0 R 15578 0 R 15579 0 R 15580 0 R 15581 0 R 15582 0 R 15583 0 R 15584 0 R 15585 0 R 15586 0 R 15587 0 R 15588 0 R 15589 0 R 15590 0 R 15591 0 R 15592 0 R 15593 0 R 15594 0 R 15595 0 R 15596 0 R 15597 0 R 15598 0 R 15599 0 R 15600 0 R 15601 0 R ]
+>> endobj
+15540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 758.07 175.254 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 733.852 175.254 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 709.635 175.254 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 685.418 175.254 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 661.2 175.254 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 636.983 175.254 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 612.766 175.254 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 588.548 175.254 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 564.331 175.254 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 540.113 175.254 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 515.896 175.254 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 491.679 175.254 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 467.461 175.254 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 443.244 175.254 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 419.027 175.254 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 394.809 175.254 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 370.592 175.254 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 346.375 175.254 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 322.157 175.254 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 297.94 175.254 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 273.722 175.254 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 249.505 175.254 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 225.288 175.254 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 201.07 175.254 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 176.853 175.254 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 152.636 175.254 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 128.418 175.254 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 104.201 175.254 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 79.984 175.254 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 758.07 407.007 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 733.852 407.007 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 709.635 407.007 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 685.418 407.007 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 661.2 407.007 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 636.983 407.007 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 612.766 407.007 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 588.548 407.007 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 564.331 407.007 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 540.113 407.007 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 515.896 407.007 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 491.679 407.007 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 467.461 407.007 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 443.244 407.007 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 419.027 407.007 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 394.809 407.007 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 370.592 407.007 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 346.375 407.007 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 322.157 407.007 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 297.94 407.007 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 273.722 407.007 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 249.505 407.007 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 225.288 407.007 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 201.07 407.007 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 176.853 407.007 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 152.636 407.007 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 128.418 407.007 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 104.201 407.007 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 79.984 407.007 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15606 0 obj <<
+/D [15604 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15603 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15667 0 obj <<
+/Length 4278
+/Filter /FlateDecode
+>>
+stream
+xÚ½Ko#¹…÷þZvi†ïÇ6ÈdYHÒ‹
+RDïW!iáÕêëõêçOýÛŸø×ç_¾þ´²Ú e |´ýÅÕ_¯~»Rðs¹RØDŒ"j»úvõó/ru ¿ûi%…Iqõûá/ïWÖáíÝ­þyõ÷+Y-몯•¤ šöJÈò½î¶¿înþ-¥Ù­¯ß ¥ƒÐJ>¢ý©oGšð+¼G+D’ºeß?ߊï8P_qO·÷?^­~þ¢Cü¤´›þàõ¨V_\ÒøÕ¥…’ [zÿåáÔ ‡k“PN¾|‚ïlrCð#hè@üöž—¼ðk^Áê–÷´yÜ=}þbå§ýÜe2€Ž h8ÝÀŽGǺ{ülä§ÿ~ÖòÓîeŽï@&†…W7é#þõz¿>X狇öM˜®}<KÁ& .a°ñ"Z{Q k+’± ††‚q] Óy“„kÞ˜„Éh”ps¬/3L ¢å@Z#@[ q¿½ß¼ŠÖÁ§Mj¯ö há#‘§ß…–<´t†hí)ÑÆÑJ8»*0ˆr*vEKçM¢­yc¢%£Q´Í±ž-9‰¶&îws»>É@tºo×"ï·3—Tù•“ç`%Œô-óm@‰ù§n‰7=È܃èÞÌ-Ùj¸À€âƒ6%º7sC¦çLÚ«3+Ú/éàâËú8Ÿ6ëýfÞ'Z(Tô1™úk®½^næœâÁ!Žƒ
+Å••®¦~ß=ï_}²í’ÂË{ ßBqøZRI_Ô'0vëÈ0wÈ ÉØw
+79¥æy…ŒF¯4ÇÚs [ÜRcû~¡s‹_jî4šæ¼x8f*PuŠ.:Sñ:ÂüÞ1ÎFôÝ™
+o2LÍ3 †©Ù×›çýÓîu¾}P’Ù‰[4çõÊÁG9¦¹¥
+jÐ7O»û¹¨e$¦õ ŒÔ2kÕ:/ÌÙ–¨Öá4GÕ™[2ú¢U§sNXÅ![hH«nÕÉÀ›t[óÆtKF£pköízÿ}ó4_u¨Ù°.OkÜÑ)žÊ·3è¼Ô:¡}hÑoKI ü’zÁY#Œ´¦–”t5Q0;d¨<‘"%ß5 7™¦æ™†ŒFÓÔì®ièØbšæwï.E'bdáƒV\8âWÎ "ÄEs6§@­1p8GE8ØpÑ"IÂ0"ƒs ¡R×9tÞ䜚7æ2S³ßÖÉ–×Ù6Y˜rÔÙ¹%Ønõ ô½6j¼¢+(7ä|·Îfà½*¨á )ˆŽ.
+jØEAÇ•6Œô†ãx•u"é£^ßÝífo¾€¡Ÿe æ*<º–:-ÍÝäNóô<-—›Ò¢õe¤ðÄ=“o %ëÌ9ÆñTã¸xØ»C7ŽË Ú®qè¼É85oÌ8d4§fwŒC‡ãÔОqèÔbœšZ
+•÷Õ‘ RÊÕ‘öGZjÝŠu’]6ÆÁ„ßÇáUhIÇæÕ2ÉÂØnH›1ŠW¡!8#]¯Òy“WkÞ˜WÉhôjÍîx•-^­¡GëéGì
+:‡j’è["–¸E*¡8vÛè$’¹è<QGø€fØž®wç‰ ¼W·4¼!»ÐÑÅ. û´_ “_èóæaN>OJÔÇÃXÚ@wÛ‡ýÛý¶
+ƒQ¡%éõ%šû/–D"ÿ&×}¾ƒ÷êÕ†7dV:º¸µaŸ¶+tòk1,zrl{mw÷/û î•TËöçgP¤åxÀ#/ž‚D-Aóž¸dðÈ Ó}Àƒ7¹¦æ¹†ŒF×ÔìŽkèÐâš
+¦¹ÝÌ:&Añ8°A B‹]ûíeû49&*¡£_ä瘘rK^‡‹Ž3peY˜rC L ¼É15oÌ1d4:¦fwC‡ÇÔÐýn¿¾›¿Óf¥ç Â#“o©§Ìà(EÛ#A½%¥)é„uKêAe”ð’ãé™Ü’½è*¾RIp kÐŒ‘ÝggÈ´É¢5mÌ¢D0´&w JE{ÖÈ—‡ùáÁˆ<œQ‘PÝ9ßç'†iK°t^ô"ÀàGwÁ­ŽLÔ2Àì²Îß÷Â/Û)­
+Ã#AÐŽŒÝàtÚkPÓ†º2¸ô5ùtw@GNýA<ÝБ¯ýAMüà!étxÄŽ„¬v­|>蔄ÓÊpŒ`Y8­¡AÎö,dÕñÑ8&¾¾jp—ìò
+;G¢Ö”(ÞKQU<yZ5m,CU1¥iÕäÓý9õ5ò÷¼ù{½ñ‚³<Ç‘úü”y{¤‹ºjëÀ@OySX8ºÂÓ¢.êõžhRXù$é ¦5.Ó=uþ°—×¹%©ó‹]k´„É•eÈB7ÐÝå<Š^î¼ÉñqÒq6¹3’ç³"*Ž}ã‚pò(eÞ¿&€þ#ˇ |8:àlÝšåhSÞûrüNf•×
+åÏŠýCÛ£îÑ7çGÝÓ}CNcGßtÂîÑ7tbñÍpÜ=ú†Î.¾©ÙßСÅ75tÀ7tpñM ¾Þ<>Ϙ&erÔ>šæü¨ýÅ·FÐ4äœt4M'lMC'Ó Çí£ièìbššß[šâSdDO…/2ºd*|‘=D¼Èèt.|oÑh2|‘y’PE.:BæœèÄFo\ÈØ„Ñß¼<LÓP’xk—Ô ô„vÔìÚQ³ä oÔl'£UK'Õ§´£néì¢Ûš}·}Ø»>rn9Ê肹å(#rš7ʨ“\Ž2¢‹Œ†³ËQFtv‘Q;ÛÝn¿ÍÝ»4Ñä{ Øè…2éè$¯Ÿ®§÷ƒá’[Ô ’³ÒQ½ÌJGõ’ÄQ½´tT/XÔ;œ—Žê¥³‹zk6¾»ayHK/*Z–n©³r wQ/.½ˆˆœ44˜^4DGOjг/³2AÁ´›!>Ïß}8Š‡¿Ï³î×ðܹ‰·Ñ4Ìà6GñðûéÎL>Â9†ÔŽŽ¹`P;:†æ–éDµ£eèÄâ™á°vô ]LS³O›†Î,®i˜C®¡³‹mjöó÷õÓæzÆ8g,ô°v4ÎÃÚÑ8ä,o4N'®C'ã ¶£qèìbœš}Ú8tf1NÍl^kªt\Ôç“ÓÒQºç§¥Ó«$r†8J·“—ŽÒ¥‹t‡ÓQºtv‘nÍ>-]:³H·fνÜÔDh Ä€ŒN˜Ž.êÜ\­„†¡-:Óʼw"µLÊËM‹CéaôÅ¡ç‡Ñ“Çzny1h/Ž¾”8t<¾”=´aWRó(Åùo£CM‘ƒÚQSçµÓEEŽ×FQu¢ÚQTtbÕpX;ŠŠÎ.¢ªÙ•¨òk¾¶Ôõz 8jêü@qG­$è©Ó¨©N¤8jŠN,šGMÑÙES5»ÒÇ \zÈ6*êümz/EŽcFEub¶QQtbQÔpÐ6*ŠÎ.ŠªÙ•¢ž6·Ûç}Ù¼|ì£%QE-H¢&+Š•\ÕË¢.Šb NŠO£.Šb`OŠjØ¢î6ëgòÍVz84Šê‚áÐ(*rÆ.Šª¢¢‹¨†¢QTtvU“Õü&ª×ÅõÝööas}ó´!×êôxa”×ùñÂô>‹ÓŠòê £¼èÄ"¯áˆa”]äÕ¤ý~ ¯{|ù©ÿ"gÔ¢ÀÎϨ%îô@SØé”ZÔXô5šS‹ò¢£‹¼*ô;u}Ðk'*j”+jêü(Wr§Eý,šê…¹Q1'QǹU1°'U5ìw²ú°·:k8¤gže-È<¥+‹‰Êꤞ¢²èÄ¢¬áÜST]”U³•P:)z (jéüPòÈGoD-u‚@QKtbÑÒp(j‰Î.ZªÙ߯£{þ`¯d~Pê9xÒ"Ztªq³d€ŸJ½HÃä˜LÔðù1™ôþkˆ>”‰
+&óŠ€G£2Q¿dr‘oCþ¶Ùþ糞^qu|?5o† ‚•¦!Oæ3wTUÆ1¯Í±íñ6iYAŽ«DÃœWI6 =Ô°8¦XY,Ã@œ<3YYLÃÀž\sÄFÛ\Ïo9ó‰#?2o9Ë}ÿØ9pa ˆÎµ0—Ú·Ü:”Š•¸h´¡§Vó,H­$WLô|C4O'·ÍC'ó 'W¢yèìbž–ýá}˜ó¤DŽsD)çHï‡Éù{(¥N #J‰N,RŽtD)ÑÙEJ5û÷™²²ƒƒð&åÝã¡êŸ s³ÊÀ!s¤XZ(\œ<J±¬*¹è!QzÀ":çì€Eºqˆ‘uh›NÄ"Ú†Ê+¦YDÓPÉÅ25¹o*µ¦9¿“a«ys‘gþZiO¦[­àÜùùDðL‚ê²Â…Cˆž9?†lr¬[qM'ˆ°˜†Î›\3EXLC'O®©ÉÏ›o»‡ò¦ƒå 9¸®Hèüà:KŽòQLTw¢ë0“D1=P=^‡‰$Šéqêš<ÿš¸½“×ÞèH˜V)ߦÈ}<O”Q(è#ÉÔ¼gë5?æŠñ’Ek zúK8A§÷»Xg{V6?;Çñܬt^Y…¦,”î…­µ:Fÿõ¸£'
+endstream
+endobj
+15666 0 obj <<
+/Type /Page
+/Contents 15667 0 R
+/Resources 15665 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15275 0 R
+/Annots [ 15602 0 R 15607 0 R 15608 0 R 15609 0 R 15610 0 R 15611 0 R 15612 0 R 15613 0 R 15614 0 R 15615 0 R 15616 0 R 15617 0 R 15618 0 R 15619 0 R 15620 0 R 15621 0 R 15622 0 R 15623 0 R 15624 0 R 15625 0 R 15626 0 R 15627 0 R 15628 0 R 15629 0 R 15630 0 R 15631 0 R 15632 0 R 15633 0 R 15634 0 R 15635 0 R 15636 0 R 15637 0 R 15638 0 R 15639 0 R 15640 0 R 15641 0 R 15642 0 R 15643 0 R 15644 0 R 15645 0 R 15646 0 R 15647 0 R 15648 0 R 15649 0 R 15650 0 R 15651 0 R 15652 0 R 15653 0 R 15654 0 R 15655 0 R 15656 0 R 15657 0 R 15658 0 R 15659 0 R 15660 0 R 15661 0 R 15662 0 R 15663 0 R ]
+>> endobj
+15602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 758.07 175.254 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 733.852 175.254 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 709.635 175.254 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 685.418 175.254 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 661.2 175.254 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 636.983 175.254 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 612.766 175.254 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 588.548 175.254 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 564.331 175.254 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 540.113 175.254 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 515.896 175.254 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 491.679 175.254 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 467.461 175.254 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 443.244 175.254 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 419.027 175.254 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 394.809 175.254 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 370.592 175.254 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 346.375 175.254 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 322.157 175.254 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 297.94 175.254 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 273.722 175.254 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 249.505 175.254 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 225.288 175.254 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 201.07 175.254 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 176.853 175.254 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 152.636 175.254 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 128.418 175.254 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 104.201 175.254 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 79.984 175.254 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 758.07 407.007 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 733.852 407.007 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 709.635 407.007 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 685.418 407.007 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 661.2 407.007 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 636.983 407.007 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 612.766 407.007 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 588.548 407.007 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 564.331 407.007 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 540.113 407.007 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 515.896 407.007 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 491.679 407.007 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 467.461 407.007 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 443.244 407.007 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 419.027 407.007 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 394.809 407.007 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 370.592 407.007 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 346.375 407.007 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 322.157 407.007 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 297.94 407.007 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 273.722 407.007 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 249.505 407.007 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 225.288 407.007 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 201.07 407.007 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 176.853 407.007 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 152.636 407.007 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 128.418 407.007 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 104.201 407.007 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 79.984 407.007 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15668 0 obj <<
+/D [15666 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15665 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15753 0 obj <<
+/Length 3806
+/Filter /FlateDecode
+>>
+stream
+xÚ½Ks#·Çïú<JUYïÇ1±½Ž]›×Z•¤Êö+QZÖR¤LRÙ8Ÿ>áÌ,0àt›‡d]^©3@ÿn ºÍg3>ûîêO·W_½õjæY°VÍnfŽ3oíÌɬ˜ÝÞÏ~ºþþ¯ß|ûï›_n˜ii™Ð
+~5ÿ‹«oo¯~½ðïùLô&¼g^êÙÝÓÕO¿ðÙ=üÝ3ÎTð³ÏÍO>Í´QÌ4öV³¯þqÅÓÇÒ&y¬À™ `Ú
+Æ»çZ-?l~æ\mæ÷ÇO!¤cRÈæW¤=õ𦡄c´.söÓî‘}üCC=à¶-÷ýwW³ŸÞH篅4íÞjöÆÆ•½’ zKÇC§4¼®L‰xø
+A!°$‚¼¨TŒdÒ„¹Ñ÷e±ày­XR^\Ðè^.)³_ —[ÍD¨>¤àOwÑàÏJÙ™!ð! o‹Á¯õ¡”WçChtïC)»÷¡áz ?+ ²-Ì€š„œÆA´§'-Ò0CrFKôsI×åj‚3²ºrðZ×Myu®‹F÷®›²÷óGìâg`
+-.™´˜UxŠv´%Âãþ“áªüMîÜ'C¿õé
+†¢g–„ŠçµJMyuJE£{©¦ì¢TñØN«Ùožž_ºÛ
+&À'„)F+¦¸¦p^•j.ê¼
+Þ;DØFq‚-:/ž×:oÊ«s^4ºwÞ”]t^<¶sÞ{¿ØÝÁ+ s½|ÞoF—}ø-å(øACïrþn±yî~ˆÿ†NW©þê…v„gÞ;2íÔhÜBBì ´Ãã™U(jÏkµ“òê´ƒF÷ÚIÙEíà±vRlw67ŒÒSàAP'w.‡®6›Ob¼`ÒOŒ-zK‘ÑDKÖ]r¯Ñ^2g^/ѱŌ†€wÐKÆ«Ò Ýé%c—ôB€mõ’aOë…
+¨ÍÙa}Þ·[´áÍÅô ^ü”Î5ÅåÝøáãÌÞ
+¹EǺ‚ .ïFCN/ïðZMy»Õr4Ù®9ÇCãÇÕx ŸQ7ãN„§@*Þ¹gÈõf}·í\bcLµ°´«w¾=¤ôñ+÷oÁ8Xàõ¤˜VCÔ"Z²ò¢7c‹’>ÑPE^+˜”wúpC.Z(wØ1Rö‡å:Vñwžt|04Üþ)#ï{^ôÎëÕ¤N8B %ÅíÙhI_ôx(®bK=˜Q¼xwMký6¥Õù-Ü{mJNòù"í-žj„Ò6§~ñXÐ…òfÒrËQ ˆhéÌ
+é²Á0é .°‚ø ¥à²xÚÁgSÚÿ¢».¶›±ðÄB@jðÔè2Ò™ ;ZÏáàð@ˆMâçݸ^<Ž7 ÖµgÖ¸ŒØÆîC9†æäOŒŠÓ!#®ëvÿ€Tòè jôQåÉ‚‡Ò™KnNÐtÒhû@–` š>)­¬E4µÓbŠ=¥E<°Õb
+<©E<±ÕbJl?ù­w¯×CrÛôVDã½8´VLð»åaj3ï=]hH¥à7làMc…\•‰@ƒïÚÜ©1fJ—нþåeu8p‹ ª4yDûÍòé›Åî®
+çÕÕßò­[=³–oŸ;_8ýy²G÷‡ëeŸö‡;{£Ž¼™¶r¡[§õ¯µN£x…—õä9 gŸbˆ?rf¬„nRatw*%5fØìp%Tï«ÉßÞÿø®ÅW×ñÅ`œ6co Q¤è¥¤„LqÐ$j¹[Öáý=E›(¥à5Ý OÔ<¾éá<u¹š7”]}
+ä/‡W¸½ðG'§Òz;8[[•(ìòßϤ/|—Q)’JA¸3l౟8óÁ߈xßnph\~|t«‡þñó¾ÆB[?IÑÔ"ÈØ0hj±Z¬Ï²ø@NW8Ñ»åîõs°Š%_žß-1Yy~ÍC€>,1¹z‰Ñ[H;äÿú²š¬/¼ûõe¹-Êßœ”ÿׇ
+‚‡vòJIÕ±“¯(¸$ìTÎ=é$>vÀ$
+%ŽÖàø¡~ Fbõ£—Vb­–c ¼´kk¶Lmš&}²$Y˜ŽÆK6}gª½ ]ÖWZvz¼ðÌn¼RæÇùú~‚9^ØZ­~¸’Z­Ó£…&vƒ•—QôÉ‘ªP"ºp¬ª´p¬í,ø;‡¾øú¦îá³ú¦íâi3ö_oj®%yŠú1¿ýºAÙÝ|µ:wÀ´€èÙ׺쪰´ìª8`xl7`)vÿñeýi,¾°MóJ*„³±yeF2M1 ÷®Z”ø‚¤~š²Š¯óíâ~|š„X«š/~yÔjù¸åÅ”ÔÜxÿUèœû°]œ½
+¥Lý„.Ùê,)Ù*ŽžÚWZ(Vå`'lò™¾©ù¶‡·×Nèûº°ëô9éûf7ÿºb›«±s7éóufnÒÞ^7Ž¾D¦j¾ÅenbLrÏMÆ[í66…g¶;S—2¿èÿR€­
+endstream
+endobj
+15752 0 obj <<
+/Type /Page
+/Contents 15753 0 R
+/Resources 15751 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 15664 0 R 15669 0 R 15670 0 R 15671 0 R 15672 0 R 15673 0 R 15674 0 R 15675 0 R 15676 0 R 15677 0 R 15678 0 R 15679 0 R 15680 0 R 15681 0 R 15682 0 R 15683 0 R 15684 0 R 15685 0 R 15686 0 R 15687 0 R 15688 0 R 15689 0 R 15690 0 R 15691 0 R 15692 0 R 15693 0 R 15694 0 R 15695 0 R 15696 0 R 15697 0 R 15698 0 R 15699 0 R 15700 0 R 15701 0 R 15702 0 R 15703 0 R 15704 0 R 15705 0 R 15706 0 R 15707 0 R 15708 0 R 15709 0 R 15710 0 R 15711 0 R 15712 0 R 15713 0 R 15714 0 R 15715 0 R 15716 0 R 15717 0 R 15718 0 R 15719 0 R 15720 0 R 15721 0 R 15722 0 R 15723 0 R 15724 0 R 15725 0 R 15726 0 R 15727 0 R 15728 0 R 15729 0 R 15730 0 R 15731 0 R 15732 0 R 15733 0 R 15734 0 R 15735 0 R 15736 0 R 15737 0 R 15738 0 R 15739 0 R 15740 0 R 15741 0 R 15742 0 R 15743 0 R 15744 0 R 15745 0 R 15746 0 R 15747 0 R 15748 0 R 15749 0 R ]
+>> endobj
+15664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 758.07 175.254 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 733.852 175.254 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 709.635 175.254 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 685.418 175.254 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 661.2 175.254 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 636.983 175.254 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 612.766 175.254 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 588.548 175.254 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 564.331 175.254 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 540.113 175.254 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 515.896 175.254 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 491.679 175.254 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 467.461 175.254 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 443.244 175.254 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 419.027 175.254 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 394.809 175.254 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 370.592 175.254 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 346.375 175.254 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 322.157 175.254 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 297.94 175.254 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 273.722 175.254 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 249.505 175.254 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 225.288 175.254 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 201.07 175.254 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+15692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 176.853 175.254 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 152.636 175.254 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+15694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 128.418 175.254 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 104.201 175.254 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+15696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.306 79.984 175.254 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.059 758.07 407.007 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+15698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.891 734.529 374.854 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+15699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.167 722.421 375.13 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.833 710.312 402.796 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.286 698.203 373.249 707.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.092 686.095 395.055 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.092 673.986 395.055 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.385 661.877 348.348 671.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+15705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.051 649.769 376.014 659.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.296 637.66 354.259 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.993 625.551 364.956 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.31 613.443 368.273 623.07]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.31 601.334 368.273 610.961]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.266 589.225 364.229 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+15711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.948 565.008 362.911 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 540.19 427.369 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+15713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 515.972 427.369 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+15714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.535 503.864 356.498 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.461 491.755 376.423 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.461 479.646 376.423 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.454 468.138 366.417 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.643 456.03 381.606 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 431.212 427.369 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+15720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.653 419.103 369.616 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+15721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 407.044 368.892 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.175 395.486 389.138 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.397 383.378 378.36 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.46 370.592 427.423 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.831 358.483 432.794 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.033 347.052 382.996 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.939 334.943 364.902 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.455 322.834 362.418 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.054 310.125 386.017 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.63 298.065 378.593 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.843 285.831 386.806 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.968 273.722 437.931 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.724 261.614 447.687 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.729 250.182 393.692 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.883 238.073 372.846 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.341 225.965 388.304 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.883 213.856 372.846 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.63 201.747 378.593 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.81 189.639 393.773 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.969 177.53 418.932 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.451 164.744 427.414 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.906 152.636 437.869 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+15743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.316 141.204 395.279 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.771 129.095 405.734 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 116.386 389.541 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 104.277 389.541 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+15747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.421 92.769 371.384 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.364 80.661 385.327 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.281 68.552 410.244 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15754 0 obj <<
+/D [15752 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15751 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15844 0 obj <<
+/Length 2604
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\KSãH¾ó+t4KmUe=ûfÀ°ž
+µmŠ÷VàÎ’§Åb~÷üšo+G*¤¢¤öá[!r*HH“"o“X Š¶0*
+ÓؘOŽZ¡51`¸ÓIR`SܯãÑÉàúºWѤ €‹üI&ʸ§Ã¼&hN4‡Ïfj¢ø9AšåöÍINîORûÇ¿2<„¡(I›¬Ý\õí/\¥ÿckÛ—^†p¡"ÀNƒúù» Nc3¿ÏVËåê¡…™ºb¦¤øÄîXçÁp¸àR0ˆË³~åtp|s^ƒ*ðpŠ
+R\å 3÷]5gîñ«ÊÞ[Ç‹xº‰ý¸Ž7qºñõÇ!—=OiùòXŸ@
+[ðºç XdRIÌò|\^³Å
+X
+Ve‡®Ö›ÅÑb¾]š4×. oµr•âµ‡YÅZCfÁµhÁ¬?dÆlqÒ¯¹í|ÄJ-ˆ4Ì‹ÁUÖepBÁü…¾,dÉñÓæù:nzhµçyFÃj1z~Œ;*ÕdcºÀ‰rË;&ˆ– óõP¤ûÑøm;Ÿ.ÎÓÍÕlësš-7nŸ_+f‚pÛ<~hmÊ8}n} …æ.m <kÖ)2­)*?ЂyU¼SŸ–4ó¶ÎÕ” pò$V¢-Ýú™‘˜­¬ß#¯íS%ÎúÉæ|ø‹]¹W›Ÿ=9JGÞZ=C/Ê—8x™¾ïoŽ@I" âØë[¯Ñ/(COéüE‘|•¾óò¤ØªV:åF°ë6^·0¹ (Hå—0ÉŽüÇèïf^7°¹þ(HXµgù Œ i±Áײ‚Y³ü.(à™A€T&“×dºüÞÙOîuSOÒè
+&“ci ×mµw¦Í½1*LÇðæ†mІ‚ÜËÅ}õIP¦ðüÀ
+Àæ‚‹Р“õ¥tàP†¾ Š()_;j‰þÀy$€_È©kõ ÑnCŘB°òꮾ( ÂVW”˜Ûµ( ¾Äà&H$àaY†ˆ”´C øâæaPÄ]Ç«lø„ª}ïÃrvPÒîB¬ ;þÈ9?Eäu¼yZ¡Æ¢ž0ƒ‚¨­‰ñÇÍx)ân’›©+ØUH
+endstream
+endobj
+15843 0 obj <<
+/Type /Page
+/Contents 15844 0 R
+/Resources 15842 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 15750 0 R 15756 0 R 15757 0 R 15758 0 R 15759 0 R 15760 0 R 15761 0 R 15762 0 R 15763 0 R 15764 0 R 15765 0 R 15766 0 R 15767 0 R 15768 0 R 15769 0 R 15770 0 R 15771 0 R 15772 0 R 15773 0 R 15774 0 R 15775 0 R 15776 0 R 15777 0 R 15778 0 R 15779 0 R 15780 0 R 15781 0 R 15782 0 R 15783 0 R 15784 0 R 15785 0 R 15786 0 R 15787 0 R 15788 0 R 15789 0 R 15790 0 R 15791 0 R 15792 0 R 15793 0 R 15794 0 R 15795 0 R 15796 0 R 15797 0 R 15798 0 R 15799 0 R 15800 0 R 15801 0 R 15802 0 R 15803 0 R 15804 0 R 15805 0 R 15806 0 R 15807 0 R 15808 0 R 15809 0 R 15810 0 R 15811 0 R 15812 0 R 15813 0 R 15814 0 R 15815 0 R 15816 0 R 15817 0 R 15818 0 R 15819 0 R 15820 0 R 15821 0 R 15822 0 R 15823 0 R 15824 0 R 15825 0 R 15826 0 R 15827 0 R 15828 0 R 15829 0 R 15830 0 R 15831 0 R 15832 0 R 15833 0 R 15834 0 R 15835 0 R 15836 0 R 15837 0 R 15838 0 R 15839 0 R 15840 0 R ]
+>> endobj
+15750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.621 758.07 183.584 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.493 746.106 191.456 756.702]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.718 734.819 153.681 744.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.591 722.855 161.554 732.774]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.765 710.29 162.728 720.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+15760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.063 676.254 174.026 686.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+15761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.534 664.214 156.497 674.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+15762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.695 652.327 173.658 662.788]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+15763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.454 640.363 167.417 650.752]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+15764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.356 617.036 167.319 626.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+15765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.315 593.108 168.278 602.896]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+15766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 568.629 176.635 579.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+15767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 535.144 146.123 545.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 511.216 146.123 521.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 487.288 146.123 497.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 463.361 146.123 473.221]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 439.433 146.123 449.293]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 415.505 146.123 425.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 391.577 183.727 401.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 367.649 183.727 377.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 343.722 183.727 353.582]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 319.794 183.727 329.654]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.247 295.315 193.196 305.726]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+15778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 283.902 183.727 293.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.72 283.902 203.668 293.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.486 259.423 190.434 269.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+15781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.017 247.459 180.965 257.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+15782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.958 247.459 200.906 257.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+15783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.486 223.531 190.434 233.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+15784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.017 211.567 180.965 221.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+15785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.958 211.567 200.906 221.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+15786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.486 187.639 190.434 198.051]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+15787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.017 175.676 180.965 186.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+15788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.958 175.676 200.906 186.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+15789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 152.299 183.727 162.16]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 128.371 146.123 138.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+15791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.877 104.444 168.825 114.304]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+15792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.877 80.516 168.825 90.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+15793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 758.747 415.48 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.023 746.638 342.986 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+15795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.992 734.529 349.955 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.957 722.421 379.92 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.042 709.635 366.005 719.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.933 698.203 367.896 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.471 686.095 368.434 695.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.93 673.385 381.893 683.613]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+15801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 649.769 379.714 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+15802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 625.551 379.714 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+15803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.413 612.842 376.376 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+15804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 601.334 379.714 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+15805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.479 588.624 355.442 598.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+15806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 565.008 379.714 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+15807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 540.79 379.714 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+15808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.706 540.79 399.655 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+15809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 516.573 379.714 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+15810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 492.356 379.212 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+15811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.204 492.356 399.152 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+15812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 468.138 379.714 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+15813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 443.921 379.212 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+15814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.204 443.921 399.152 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+15815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 419.704 379.714 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+15816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 395.486 379.212 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+15817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.204 395.486 399.152 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+15818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 371.269 379.714 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+15819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.766 347.052 379.714 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+15820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 322.834 379.212 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+15821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.204 322.834 399.152 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+15822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 298.065 408.388 308.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+15823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.455 274.399 433.404 284.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.486 262.291 421.434 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.294 250.182 467.242 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.602 238.073 457.55 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.451 225.965 432.4 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.402 213.856 450.35 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.036 201.747 407.985 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.563 189.639 399.511 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.032 177.53 408.98 187.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.002 165.421 357.95 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+15833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.764 152.636 453.712 163.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.109 140.527 489.057 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.262 129.095 453.21 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.674 116.435 402.622 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.818 104.878 400.766 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.117 92.092 457.065 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.572 79.984 467.52 90.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.982 68.552 424.93 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15845 0 obj <<
+/D [15843 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15842 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+15959 0 obj <<
+/Length 5318
+/Filter /FlateDecode
+>>
+stream
+xÚ½]s䶱†ïõ+æRª:‹ƒïËMyír*ŸØrÕI9¹˜Œf¥)K3›ÑhäקA(€â »å«uygñÝ/€¾ä«û_}wõ‡Û«ÿýÖ«•gÁZµºý¼rœykW.HfÅêönõËõ÷þæÓÿßüýö+--ZÁ?-ÿâêÓíÕ?¯ü¾]Þ3/õjótõËßùêþî+ÎTð«ßš_>­´QÌ4í=®~ºúË?_Ök[A0%ÃÊYÁ¤k
+.7tí4·¥Mv[A3.Úvxº¯>ÿsuXß½½!ÓVã¹"FÌèüü°>n‡¨F3Á%ÕX,©OëÇÇÃælË;ÞŸÁ?~wµúåƒtþZ(~þA›‰âúR2t€{’ÙÐð¿ ¡êl Á]:ròóî~¿~ÜÞM†F¡Y}P†)h÷ƒ6ß6öͧo?þü§Û›Pð+¿rÊ1’G܃Òп zÊ2¯u‹½ýøãwŸ†¨N0ç Öé6 ö¯ÿ÷i*l2ôÂæ³.…-´ ýúôeà⹇~àVNj”Æ\¼àï¶%§LËÜ·ëÓv(S–i!)°
+ËE‰]G¡Ëýîôï´5Ì´…ØiY¢ŸÖÏ¿@g$H˜3|(‰§õñ~{šÝ³`d<„9_zÜ ™4-Yh©aÞmŸOÇÃâ×CÙÒ¼ù%[+¦„-ÙãB ÌY´“L›ú’P`šäU—ÐÅZ±»Þ0<®ΙŽB+Ð’g&\üðÜ•~‰dÂÜeu9ª¨®8´O€6†A9W¢/hÄ9æ´¥€zδ²%ôËñ°¦a*¨äD¤JèRa‚HÌ#õƒ˜…’Ù‚„ñÂŒ-éÄ&ó,Ì‚Y#LôY˜úiý¯!]*±¢`:S%ó’.!Æ$Ì
+ÏL™Ê™ÿ¸‘üV«ñ_O»§¡*~oLpÖ1åEy “Y7³ú–‘LzI‘3h‰ûªÞ…g¦œåÌÇÝ?Ž7‚_¯7.ÔË&.Fظå,ígq9:'ePõÃlB‘2X§kR†g¦”åÌçÓºíbÏ»ÿÜs=ØÍÔs‚â
+,Œ­Jô®`xËBØ€è Cø .T‰‡šsd"=ãÖPÈD:æ­©‘ ž™d’3çÈI&ù, ÜÌœTÄÒŽb!¶äàÏ6~—r¦¡`6»ò¦dŽW;f)K†jGúúòÂPjMu¡Ù©* —
+pÇ‚P BËE ]\‚æg%\1¯)6,bKVû]â™I—9³J—xtÒeŽ^^‡ë gdË(sÅz)¶dT¨È󜭂YY‡ (®
+™ÝC/“K¬¥5%(ÁD Xn[£<3é%gÎÐ þ’^ò 8½
+²&l?$™±$dÈ–4%ùÂ>TßVLã5×sxOrXµÂ|ƒgJH«q¢`.n`Xs=Qþðí·úáã7ñä㳩eÛ–L:ÛûÓíÇÛŸ%“4X§ã—Øïÿüýíü㟚 gÊøp©3;¸( ÓˆÅûñ‘RÛ’6ªêhT6ÒS°¡ö—촥6Ô¥9 $`<ï—À’qÑ{H:ž3㛓ý9ƒ–T:o\—3<;å,gï=”/ë&I…©7YBG„â9“ ]:øx¡P$ˆ9BÑñqŸ¡
+´$ÕøcÒxj€)TW=d¶ñ:üj‡‚_°c\š>;¢¿î6Ûù;3±=g8Vp+È“ÖçŒAKÊŠŒá‘)c9òîßûõÓn3Ü©9Í­Æçâý[]>ëçô- ³?òœó9S2N
+Ó§w=jeVo7¹Ÿ¥e€§XÂÆ–ÌÄ1ßVxdÒGŽ|Þ<lï^/lGÁ%©-± å „"ÌIT~ÖiŠDAK::Ýíw#Û½ÐóvoY;j u‡¥
+p,O/ÁË'ÁΙ•¥‰WG±8‰-éîìäð !†KÀ”*Í9V?¦µ àj'ÙòVÖOŽ)æ ¼êuOñ-¶¤¼¯ÉžyÎTŽ¼T@EsMÁŒ«ü>t¬‚‚¢XܬõÍéõ2À {²c¦ÿ6Ò¸>¤gÚQ¬YcK2•9m¤§ *È»ð%u$[Ð÷‚ Óøáà¥eL³N&Ia™"éÌÐpu¹B3Sª2æ…ÎœŠ]42ÕºrD.èP`iäØJiè· CèUØ}2¥kf(É5“Èó™qj[âö¼Føx{ûã÷øùv¾Y¦‚°ÿ²ÛÔMD#F¤Oêù&D×UµÙgÏ>f[¸þþàe§×
+Ô¬ñqŠ‡ô™Žš—âT
+ñ8ú
+FniLùŠ¡È) ?´ŸÄPñQ®é}cpVQÍ+ñŠ
+ÿã‡Ãóiá‚öÖí²˜{ë¿Ü7ߥ‘PèBAËzØù†i’Û4>t.)áSò1ßô63–GxoÛ.K¹¹íD–ðД¥:–%<ñœ¥8Ò-½iÎ=€½o>S׳•_Ñ¢¾¶@;èvÊÈt'”‡&eäÐ1eà‰geôœŠ70”_Ÿf§).ùß¼9=þã­eÓø_X˶k¢Í6np-›ðÖ­IG…uëXHL<D†U.±›ÃÓ——Óä“Nÿf×Ê1oluçû§vAËÝS+‚†·A˱iO~7Ô ½eÆ“€}`ò| ¯&¹ÇÞ$ËÚÆß©ZáhÓ.Y¹ƒiE²ðà6Y96%+.`C_ÜP°ÐõžÂ"WÁHK²žEî’ŒE_UÿdïbÚe,w1­ÈÜf,ÇnŽÛõi;\ƒxCr·>¦ºw·Í·Õ^>¿åj.¯<WÇwPŒ-¹qI2[ ^0#dýø‹6Ní’§Vn’c'‚‡&äØi ¹@rnŪ{\Ú:µÓGnZ¡<¸ÕGŽÍ\Éq…MEàÐV¦]àr+ÓŠÀáÁmàrlûe‹ç‡÷.qö¢)b…½ètÄÐ&Z¥iëúô0ø€J@e°&ª±üãºg¢:Vyja`ã‘X-\óVqéݺ¤† †)§«{ÞQ´ÓEî(Z¡ <¸ÕFá;¥ <4é#ÇN»Zrf…[­–
+äfKþ"¡ˆø)çûéxGÓN)¹¥i…RðàV)96n ½÷,…÷í"–ûŠVD n#6mÞª`ͤ…‡ªŠ¦]¾ç¡O ÏNSü~¶®¯Òñîž]šr{ÏŠ4áÁmšrìð=ŸQ
+Ó@dóÖœü
+©Á÷Ùâ–¤ÔFñPP¥äâ IêßãÇ›vúÈM
++‚·
+ɱ™DÉ&8
+4,“¥w%|D%¦ù.*ž«!kAönz¡N`Ñ[¿8ÇÛ@&™6Ó2!
+1ßæöí99Ïl÷™Šyí:ÛÉ#s­PžÛª#£>ïî÷ëÇw/ßf°]¼r7ØŠ€a±m¸rhý;0蘡 h»¨å´QÃ۸åØ׸ E¾™þ À”-{wÜ~¨`h$Ò,:#£©Pì2ãK袓">~Ì»^!hóÝ$Ü|wZxl#ú²ÿ½’hWܳÜw:fxl³ZùÞ:6`hwÜW+ºWwÜé€á±MÀrèoqÛx=û1nú³¸Ês»p­ã'µQÍëDÅuÆ×ý?¯dt÷¯ @‰›®TÊò«)€þ/*šc2
+endstream
+endobj
+15958 0 obj <<
+/Type /Page
+/Contents 15959 0 R
+/Resources 15957 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 15841 0 R 15846 0 R 15847 0 R 15848 0 R 15849 0 R 15850 0 R 15851 0 R 15852 0 R 15853 0 R 15854 0 R 15855 0 R 15856 0 R 15857 0 R 15858 0 R 15859 0 R 15860 0 R 15861 0 R 15862 0 R 15863 0 R 15864 0 R 15865 0 R 15866 0 R 15867 0 R 15868 0 R 15869 0 R 15870 0 R 15871 0 R 15872 0 R 15873 0 R 15874 0 R 15875 0 R 15876 0 R 15877 0 R 15878 0 R 15879 0 R 15880 0 R 15881 0 R 15882 0 R 15883 0 R 15884 0 R 15885 0 R 15886 0 R 15887 0 R 15888 0 R 15889 0 R 15890 0 R 15891 0 R 15892 0 R 15893 0 R 15894 0 R 15895 0 R 15896 0 R 15897 0 R 15898 0 R 15899 0 R 15900 0 R 15901 0 R 15902 0 R 15903 0 R 15904 0 R 15905 0 R 15906 0 R 15907 0 R 15908 0 R 15909 0 R 15910 0 R 15911 0 R 15912 0 R 15913 0 R 15914 0 R 15915 0 R 15916 0 R 15917 0 R 15918 0 R 15919 0 R 15920 0 R 15921 0 R 15922 0 R 15923 0 R 15924 0 R 15925 0 R 15926 0 R 15927 0 R 15928 0 R 15929 0 R 15930 0 R 15931 0 R 15932 0 R 15933 0 R 15934 0 R 15935 0 R 15936 0 R 15937 0 R 15938 0 R 15939 0 R 15940 0 R 15941 0 R 15942 0 R 15943 0 R 15944 0 R 15945 0 R 15946 0 R 15947 0 R 15948 0 R 15949 0 R 15950 0 R 15951 0 R 15952 0 R 15953 0 R 15954 0 R 15955 0 R 15956 0 R ]
+>> endobj
+15841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.684 758.747 203.632 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.533 745.961 180.481 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.873 734.529 218.821 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+15848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.805 721.744 236.753 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.019 709.635 240.968 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.018 697.526 244.966 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.535 685.418 240.483 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.703 673.309 199.651 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.296 661.2 211.244 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.376 649.092 198.324 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.057 636.983 218.005 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.346 624.874 210.294 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.516 612.766 244.464 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.201 600.657 199.149 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.794 588.548 210.742 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+15860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.419 576.44 204.367 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.656 564.331 222.604 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.874 552.222 197.822 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.969 540.113 243.917 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.686 528.005 244.634 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.555 515.896 217.503 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.844 503.787 209.792 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.487 491.679 254.435 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.892 480.247 212.841 490.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+15869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.724 467.461 206.672 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.898 455.353 226.846 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.657 443.244 203.605 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.674 431.135 207.622 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.36 419.027 224.308 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.209 406.918 201.157 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.842 394.809 198.791 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+15876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.793 382.701 216.741 393.005]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.175 370.592 210.124 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.051 358.483 188.999 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.225 346.375 209.173 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.155 334.391 203.103 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.172 322.157 207.12 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.553 310.049 189.501 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.727 297.94 209.675 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.707 285.831 200.655 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.27 273.722 224.218 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.673 261.614 209.622 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.046 249.505 191.994 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.22 237.396 212.168 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.524 225.288 199.472 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+15890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.698 213.179 219.646 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+15891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.192 201.747 201.14 211.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+15892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.795 189.639 174.743 199.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+15893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.388 165.421 154.336 175.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.079 152.761 168.027 162.94]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.939 141.204 136.888 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.631 128.544 150.579 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.925 116.386 173.873 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.96 104.878 128.908 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.636 92.769 149.584 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.796 80.661 170.744 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.651 68 142.599 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.08 758.195 395.028 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.24 746.087 416.189 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.882 733.978 381.83 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.176 721.82 405.124 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.217 709.761 402.165 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.68 697.652 414.628 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.88 685.494 423.828 695.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.704 673.435 407.653 683.613]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.99 661.326 430.938 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.992 649.092 386.94 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.287 636.983 410.235 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.155 625 381.104 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.45 612.842 404.398 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.356 589.225 403.304 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+15916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.312 577.116 401.26 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+15917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.645 565.008 380.593 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+15918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.385 552.899 378.333 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+15919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.046 528.682 405.994 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+15920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.24 516.573 418.188 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+15921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.927 504.464 396.875 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+15922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.774 479.696 415.722 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.708 467.538 427.656 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.016 455.429 432.964 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.991 443.921 441.939 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.988 431.812 438.936 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.52 419.103 410.468 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.316 407.595 402.264 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.355 394.809 456.303 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.663 382.701 461.611 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.847 371.269 392.796 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.021 359.16 412.97 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.366 346.451 431.315 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.82 334.342 445.768 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.412 322.233 427.361 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.471 310.125 409.419 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.471 298.016 409.419 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.906 285.831 427.854 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.412 273.799 427.361 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.778 261.614 469.726 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.232 249.505 480.181 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.871 237.473 440.819 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.325 225.364 451.274 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.376 213.305 461.324 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.361 201.196 466.31 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.282 188.962 411.23 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.844 176.929 457.792 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.152 164.821 463.1 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.141 152.761 452.089 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.648 140.653 449.596 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.808 128.418 404.757 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.186 116.987 399.135 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.515 104.201 445.463 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.252 92.092 421.201 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.619 80.661 393.567 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.196 68.552 397.144 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+15960 0 obj <<
+/D [15958 0 R /XYZ 70.866 789.024 null]
+>> endobj
+15957 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16072 0 obj <<
+/Length 5097
+/Filter /FlateDecode
+>>
+stream
+xÚ½]“¹u†ïõ+x9SÁøþðlI[rÖ‘¢U\Nm|Aq8#Æ3ä˜äìfóë}HP@ÓlÌAr³»¥¥ð4p^|öÁÛ|v7ã³^ýáË«ß½÷jæY°V;ÜÎgÞÚ™ ’Y1ûr3ûùêÿ½}÷×ë¿}ùÓLKË„VðWËÿñêÝ—Wÿx%àÏùLœŠðžy©g‹‡W?ÿÏnàÿýiÆ™
+~öküåÃLÅL,ï~öÓ«ÅóÇÒ¦òXV0žžksû_œ«Íüæü‚gJŠøsiÇž
+W+æ\èÀÕ–iJîr}-ùÕ/ëùC¬òìµ1Ì:?{-$<\ ‡žI áÓ #IÍÂYPXü”Éß6»=[<>þK$Û»#ûó¯f?¿–Î_ í?8¨ ªÁwÇZøÉ¢RŽqmU)Ë<ˆ%‚óûûZËi äPá˜õ~
+ÀJá8;ÌïWwëZÓ9´ëAUœYåJêjWë50ëЩáç* *ºÝ^ ~5¿Vüê·æˆÁÔlô`J¿1òó²GÄ $îUŠØýfQ˜†¿Ý
+ƒI ¤.ï—Ëõ¾7‹“oè¶!N¸*è†ÎˆH ÕÄ …IRÁÓ4*+œê¡XpzšRèÔ¤”œ:A)tpRJU
+™”’#w°.oÿ_$"=ì8L‰à’Òši¡S“Drj}k`÷c» ¥í
+™˜”’'Ž(c™: À&ÀÈçX’’²A#ttIŽ{ AˆhXz/JtU(æœÐ¥¡­eÆš6¦€Ú]Š1ÐED—QJ’B5(†ŽNŠÉÑ“CG'ÅäèQÅБI1Em_6¶R™:ÿhÅ×=¤%A©ìívùÌÛLØfv`ÂÚXèP2Ÿ{É#\¢‚¯
+Žy.(ݦ€ )ÊÊæi¹YÇe,ɦܬ5.Èž¾.Ûg\|¨M{Eœ‚á¿G®5–dRæÐvù¸Y!Á¤od¶Æì<Y²ïã”H½¿o?L‰ß S>¦vü°_>|¹†_ýö¸|é:À
+ýt Í4?¬Å–ûåv:Á®4·K@È‹‹ÍG‹ù˛ϵ…[€›ž)i`²'uf`is(I¤»_þóÓ»Úè®= *@E ýðSý¹èƒ„Uƒç²D~úò¹UF¯]ˆý­ñ>‚
+–¡Cþ2–ÄSŽÛúnµ^â}“I7+øå$fL°¯É †+gf
+žv0È`± µNWö0Xá6¸¦9ÁT—NƵVÐ%yñÐÞh¦P®ÊVƒýèÝr_¿"I—¤¡VXj±$¼¯%§4Þ$Ñ=ИÆìt‰~IËÙÀ ÷­=G:¨¹èq“Krâ¼ë|ëÑqÞà¬÷´ßü´Ü_,NŒø‹oËfôÿ½®'ãf0{C-ñžl<° ··ËÝÓ}óÃã•$¼ŠVDõÓµáWËínµÛ¿ïç?¿‰òi¿íTÒazöÃÃünù’"_ ˜¤i–2‡á€xÌr”2”Ä­,.þ]{>m´µë±2"Hê5ÁceD,u^™ËS^î˜^-ÞÊü˵ÃÀÿëj}Ó^ð‹Ž™ævD‘ÚJrÊžNzåzu¸X©ñëæë¸)z£âž®¼ÜJ; Hu…’N·ÌuÝ};¯íp!ÿv¹[Àt#úêq¿¹´…³ºO­á¯u‰/”£Ò^úöi½¨ïu0t¤„¥”7%ò×ÕþÛ3‹Øf‘úpdW ñv‰»Clñn“UÍ[h<yV]ΰ¤Ó=­Ã’nJÿñbäÂòd!Ø”û«(ˆûã"çÙEéñ‡D"¬I/‰‡ÿ_V‹Z¢Š–Ì‘ŽÇFª
+æ¸5&
+袻ŠW´Ld¼¢eî6ûý|ñ­ÏDÒèªrEª+K bîÈ2D2.Å0G>—M‰»*ì?t*lª”ò5wüGm‡í]t £gÚ\oв½‹z­VÎåCöj‰úÉ}ZÆõCç%åÌ‹¢c“‚
+œ>C@£ûÉyÉö)1ˆ¹uÊxé¼Äœy1ˆtl
+bᳩõ~¯Tv@z˸Ôô¶?¦ G­þ(çÚ!¬Díäæ*ãÚ¡ó’vræEíбI;9vT;tdÒNŽ|ì4è4ú¥œ ‡l¸…“›­Œ ‡ÎKÂÉ™…CÇ&áäØQáБI89òiÝqØi4Q9WÙ…%ª'w`Mz±LÓƒ
+;SL/Èc_R^2ïzÝàöÔØÑMúôÐÅ Ú Am´=9*Ù7%5÷L™T:55'?ûq\Ðß“®¤î×R˽´Õ¡ä, t‹ hno2!ž Çxæàï7(†ã< ¶ºKUaœ÷ªts¹_}=ôxk¯KT­[ΣJö~‰QÍ}_¦„•NMa-gVû‘¨Ò¡)ª9ôÿ$¬¸àhHÈ<kcÏ„JÑFM+šÂš“/„•Ma͡ðÖÆ~ÌuÕ@sëK=hïu§¿Ñ[è\Kds¢¨¥Ü˜hŠ–èÔ¤¥œ|AKthÒRÝO°“˜²(kõ<:%Ù4)†27LšJ:5…2'o—w«Ý¾žî¢±Lp1©¾
+²[òÈýþ€Ñ”*S#ïðbm(¿@ðr!TÓ
+endstream
+endobj
+16071 0 obj <<
+/Type /Page
+/Contents 16072 0 R
+/Resources 16070 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 15961 0 R 15962 0 R 15963 0 R 15964 0 R 15965 0 R 15966 0 R 15967 0 R 15968 0 R 15969 0 R 15970 0 R 15971 0 R 15972 0 R 15973 0 R 15974 0 R 15975 0 R 15976 0 R 15977 0 R 15978 0 R 15979 0 R 15980 0 R 15981 0 R 15982 0 R 15983 0 R 15984 0 R 15985 0 R 15986 0 R 15987 0 R 15988 0 R 15989 0 R 15990 0 R 15991 0 R 15992 0 R 15993 0 R 15994 0 R 15995 0 R 15996 0 R 15997 0 R 15998 0 R 15999 0 R 16000 0 R 16001 0 R 16002 0 R 16003 0 R 16004 0 R 16005 0 R 16006 0 R 16007 0 R 16008 0 R 16009 0 R 16010 0 R 16011 0 R 16012 0 R 16013 0 R 16014 0 R 16015 0 R 16016 0 R 16017 0 R 16018 0 R 16019 0 R 16020 0 R 16021 0 R 16022 0 R 16023 0 R 16024 0 R 16025 0 R 16026 0 R 16027 0 R 16028 0 R 16029 0 R 16030 0 R 16031 0 R 16032 0 R 16033 0 R 16034 0 R 16035 0 R 16036 0 R 16037 0 R 16038 0 R 16039 0 R 16040 0 R 16041 0 R 16042 0 R 16043 0 R 16044 0 R 16045 0 R 16046 0 R 16047 0 R 16048 0 R 16049 0 R 16050 0 R 16051 0 R 16052 0 R 16053 0 R 16054 0 R 16055 0 R 16056 0 R 16057 0 R 16058 0 R 16059 0 R 16060 0 R 16061 0 R 16062 0 R 16063 0 R 16064 0 R 16065 0 R 16066 0 R 16067 0 R 16068 0 R ]
+>> endobj
+15961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 746.087 175.765 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+15962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.486 721.869 190.434 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+15963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.322 709.761 173.27 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+15964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.225 698.203 194.173 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+15965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.854 686.095 163.802 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+15966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.628 673.986 177.576 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.394 661.2 181.342 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.496 649.092 220.444 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.342 636.983 224.291 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.603 624.874 188.551 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.918 612.766 201.866 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.764 600.657 205.712 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.216 588.548 226.164 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.063 576.44 230.011 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.638 564.331 207.586 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.485 552.222 211.433 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.617 540.113 185.565 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.515 528.005 216.463 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.361 515.896 220.309 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.937 503.787 197.885 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.783 491.679 201.731 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.111 480.247 150.059 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.128 468.138 154.076 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.404 456.03 211.352 465.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.419 443.921 204.368 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.269 431.812 181.217 441.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.225 419.704 194.173 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.165 419.704 214.114 429.622]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.742 407.595 189.69 417.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.742 395.486 187.69 405.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+15991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.23 383.378 172.179 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.872 370.717 186.82 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+15993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.983 358.56 176.931 369.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.949 346.451 200.897 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+15995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.703 334.391 133.651 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+15996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.724 322.834 189.672 332.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+15997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.728 310.049 165.676 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+15998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.32 298.016 172.268 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+15999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.3 285.831 178.249 296.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+16000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.259 273.722 156.207 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+16001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 262.291 143.361 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.171 250.182 160.119 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.621 238.073 171.569 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.127 225.965 156.075 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.485 213.179 175.433 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.503 201.196 152.451 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.034 189.639 142.982 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+16008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.257 177.53 172.206 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+16009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 152.636 165.059 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 128.544 176.635 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 104.201 181.745 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.914 79.984 242.877 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+16013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 758.747 436.013 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+16014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.557 745.961 406.505 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+16015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [498.012 721.744 509.975 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+16016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 697.652 407.518 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.645 685.543 387.593 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+16018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.764 673.309 453.712 683.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.109 661.2 489.057 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.262 649.769 453.21 659.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.674 637.108 402.622 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.286 624.874 412.234 635.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.679 612.766 437.627 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.679 600.657 437.627 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.268 588.548 412.216 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.895 576.44 433.843 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.302 564.331 401.251 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.94 552.222 433.888 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.984 540.113 418.932 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.91 528.005 443.858 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.364 516.573 422.312 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.101 504.464 434.049 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.405 491.755 419.354 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.405 479.646 419.353 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.072 467.538 442.02 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.766 455.429 411.714 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.67 443.244 437.618 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.64 431.135 447.588 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.443 419.704 445.392 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.11 406.994 468.058 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.231 394.886 469.179 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.877 382.826 416.825 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.059 370.592 390.007 380.896]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.593 358.483 389.541 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.777 346.375 403.725 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.583 334.266 408.531 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.381 322.834 409.329 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.585 310.125 400.533 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+16049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.362 297.94 430.31 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.287 286.508 408.235 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.626 274.399 401.574 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.217 262.291 402.166 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.103 249.505 392.051 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.277 237.396 412.225 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.919 225.965 394.867 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.965 213.255 405.913 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.237 201.147 411.185 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.561 189.038 392.509 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.487 177.53 400.435 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.944 164.821 402.892 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.94 153.313 465.889 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+16062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.607 140.603 488.555 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.728 128.495 489.676 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.835 116.987 455.783 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.987 104.201 423.935 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+16066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.063 92.769 425.011 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.983 80.661 403.932 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.383 68 437.331 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16073 0 obj <<
+/D [16071 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16070 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16187 0 obj <<
+/Length 5332
+/Filter /FlateDecode
+>>
+stream
+xÚ­]“㶕†ïçWèrºj‹ïÜÍ&c¯SŽ';îÚÊ–7šnuvº¥¶¤N<ùõ{@4@$ ƒ›8e«ñç¼
+øÓô?¼ùpûæ×7 þ=]±¡ k‰åru÷üæ—¿ÓÕ=ü·?¯(ήþÙýòy%• ªkïiõó›ÿzCãË’*º,G‰qдf„†ëÚ?¿\µÄh×ý’ë98Ü È—DÆ‘Ê¥ÈûÍ oÿ±½ÛdÈÂ-€%ü\¤ÜÝ £o_Ÿ3Pe g¶USâ¨I±›Ý ‡ÛÝ­Ÿ7ÿÖ±ÏÐÃcOÿôý›Õ/︱o™´ýÎ\½0¦Wï'Œºs{}ûŸ™{`ŠpÉWF:ÂGåÌ'|Kðï ¥ú󇿾ÿôþöã§Å[£[àÔÎú[°çÖ^›ÿ¥”ÿVšFâxZßùØ~Í…ƒj \ÂÍHT8$ô…sKF¨3yýô´¿Ë©W#[@…&Ð¥¦'ú›­‘TD —†î´}Þraƒ
+b¥A¤±²é4BCZÚ’4¢‘CcæbñØÆ{Üç†
+°vt§O°jò$k$F¸ëÕSÛÀ¤z|CJ¸õà‘A= sI= °½zìœz {õ$È—&2ŽhÄd²ò暈íødKt#uƒ¦ÙÄÔYÙ ‰A51ñu×nÔц(ŽØ©m`Z<Ðà|q—‰ù­pÊ€ý:U8ž’·»mVAŽk[@¥aSèÓöóÁ¿“ZnÞÁDö[‹Ä*è 3(T60Xhˆ3QžX4xHlL^H,Cýób2ùr2¥ ‚JD2+˜N&4Ĩ*O&<$3&6Ûã)ûâJÁúŒ‹`íß{ˆ¼}^?¶Xò)Ásˆ}ƒÚ¦3*(qN—g 2“_w39…±Ò8Ñm(‘V¤èf9eŽP‹XÿÕ60SkÊsŠ9ɯlj÷k§
+F\‘2ùó眀Ü
+ó+EJ}È ¾ö¦oHœôR“âûý©~PðR]¡ma m¬E† %ʱJ2„'‡,Åäí~1hâòùI¯ š0ûä-‚-©P€4WãÎÌîm ²`Ä ;"—N=.BÇ“5S¡Œ¾²Eè %ê}N_›ìöŒ Ž¹X¡‰¦.Å~õéÚøÿùV:?³é@ú1läü°Ûžno˜oø¥vã
+š„Až«Úª^! Läuƒª^ß
+/ú]y¸Jø¨›íýEÝÞÀċܽ¼,Ý©›½S[|§°bâ¢Eý²o‰ÊÙ×þÔ´`2?Ì™„²8ÇØG¡º8õŒYWôJÀý _ÈÀÚHø†ü?YTÒ]Ö‹ °H¥¦V¿Ü:B9oUÞÄ õÌ~düæüÏÇÁ°Ö€Íý)@ž²K8\r;TÜh Q/û$çÜar4`åY¢›´ãÁÌŸ¢T2%¿¬›VÁÊŠòX8ÇSìúiû¸Ër­_ ›\P€ã&å>6Ëϵ¬-a†)¨
+ÐàA1yQxlPAŒ]VžTsŸ»Ãˆ-t <^7Ð:à*Ö<è &/ê
+÷V°Ï†_ŽZ[ž 4xÈFL^̲c {GA>¸'€x;WÛÀäÛ߯«î¶O_7ï$}{Êž¨`Ý2Ïöê0’_Âógøág- þøÝq·Ÿ?
+ä__´À*A„L©‚/jH.kˆi"••?­ h‡™*aɃ~Fèù ‘A=rQ<hh¯ˆ©e éPI¸FTlÖ60-hˆê¡nò´yÊ-
+—Á9%Š„‹‡á&Ôyá6€öÂM ‹ÂmÀí…›pµœnd/ÜÙT¸–vµ × ·²iáGl¨XØz’í˲¨s)û´îÊ!ž²ÆMšXX5 Ãc[Y’Ÿ¶ÇSƒI¼/)uQ[ÛÀtN}q«Ð59E£‡œÆì’œâÉ!§1¹ÔШ$¯JUù]æµ²é¼BC:q”åò³‡¼[Äž5¶B—ñ­l`:¾ÐÐ`KTP㌇ç„eö»ínÛ`÷Í¿ƒõï¯qeÓ!††$+0š;D8Göï=[˜Á„oÕŸOš´"ºHìÛ˜;
+nÞ@A1‰§Ã$S9ºëÝ]‹×þ?ÊÒ©¶éœRó»éPINÑà!«19Îêñý¤}9Üö)<
+DÝ)Â-â|aåßOÆÚ¡V‡ ¹QÀúµÇ9—£ma±©üûÉh[Nœ)?þ‡Æ†hÇÜ…hg®Æù£™²ÁÕ8o*Ó(´Ä ÃùUþýd‚{»áÒ£±!Á17Jð§þPà¹Ü©|&›|üÏäV÷u´¼Öô7n@Áð¦Á Kæéø x.K¥@áÁ̤JÁ³Ëá]©n€6¶;„™ ^N™ *P‘ l¨…ó> )qfÝ+aeæŒÁs¥?ù£G~ÐáÀ+f‹jo¥Ûó¥zÑvÑ|c«èùâ©A¿1¹L¿xvpÌžz½-ý)E)`}™¾2Åæë %gÞ¤“ûÃ-)r®ãHI,¶€¥&Ö[(Çä➣
+zŽ0„Jè9• Lô¿Å&eyÏÁSCωÉe=Ï='f/ö4vè91vNÆüìºÓ€,8aœ¥ä¦2®´š¿”1Ú«¾“qlT_"c<5È8&G2Þ~Ú<ïO›n¿¼î¾þqýôTíÕ»®¶tîxbš"¼Ý¤màš/ÄÙn2qÍŸQªð§Náw È~®Ãôد?¸ˆWï"Cü,Ñf|êù>fnÂo¬6±ËðÔ`c»üÿþðéç>þÄ*ç[ÝôÅäÙR8Xµ°tÞ-Ã,Ýs–¹ž´’¶ð­ÞöØ™‘qýùgå.ÒX 0œªë‰ö”ù»§ü?ÏÛ//#°¾<ZbÕXÓç»H—ª?–¼¯”ó_7™x.
+E!(¼ãµP–E<u¼žmŒß
+<X™î#p©[ìÔÃÜxW <j…õþ3#ÚÉ#I~cÒ9<UrJ´M¡Eç_\Ц«ƒbÓÕ àÉA1yQxlAŒ]TS ÏÝ”è
+Úºë+±#tÁ^ij¿Wš£}¾÷w¿¾nMVvµþÏ—1FHw1ŽÍ£KbŒ§†Çä¸Þxû¹hÏ¿$Æ•>Ñ—1FMw1ŽM¦KbŒ§†Çä4ÆE}Jb\ie}c´vãØ»$ÆxjˆqLnð^¥$æ•6Ø—1Gûhw1=´KbŽ§†˜Çä$æO›õ±Íø\iš}c´ëvãØq»$ÆxjˆqL.ªYlÀîköl¹zæ¹^=AÔ«ãÁ¡`=!×+–Lã*]Ë/%Œ¶=ï$[ž—HO ŽÉeƳƒ„“»Þå>®­‚”D¨¤°&€ÿ›@·žð5ÖêÂù²{ù$žìòA{é$Ô"é ¹½lîRµ6*µdA¥6’ÚWi§Vû¥£žW„À=¨ñ§Wþøes6»ø´9¾>ê½®Ìo ÊLkø¢2“ì¾Ì$a÷e&‹nš #•ð—C ÚB¾Nbûø’áO CJL®ßTЬ Æ …©"¬m`"ÆЊ(8á:ÄO 1ŽÉõ›
+E1®té¿Œ1Úæ¿‹qlñ_c<5Ä8&×o*Ř+"$fÚQÙÀDŒ¡&Ë_ ¨!Æ1¿©PóÊï#\Æý….æÑÇJBŽ‡†Gàú-Í
+Êa¿ƒ•ìµÅ°£Gìø
+Î}ÈëZŽ> ½~Ù>e˜Ÿ¹&¾¼~~¦ÇƼÛÜâ?Ô¢m ¤/®W6E–>ËèøÔ’–Ý  Ú¹ÞvSl›ý¼?æj$kÁT¢ë< ³4t—“hÚN&šûš½P§7ûCÛ»ú3̆¥î®w‡Íú´É¨2­ZP½5Œ¾ ví5ÂaEý-÷ê
+Úm7(%2Û…+ÏŸºé‡*X%¼ÙaÄJˆn®5DÉôN'´A]ç3gJŸGëæËaŸ™ÖK¿žÔºÓòXé„y­¯¸ÁAŒ±?𬱼³c\‘±Ø ÅÄ…yý[NŠ0˜ú/i ‰’šÎB%!N(Ú
+<ÆEaDŠ¼z\ôÏóš'(ÚS9H1¶Tž•"žxc ,#䣯Ì,%œ«˜£˜û<ÅFÌsiÂóº,Ÿó^vÿõŠÓö9[G£‰”²æÂL¤ü+3e4Q=
+m›Ü'*vMžKž×%*Æ=-zDû=)ÅxD ÿ‘W˜ÈÅøk{”輑Š…6cî{1Ï%
+Ïë㎧õ¹7·ÿòï¹²=ÊŸÒ” è–ÈvÄÏ=ˆ,-žçŸèV³1¯P"kg\fߪ2d¾ÔF*Ñð'שÔ
+VÚÝßÊ»ó„Tzk®þ:9¿ð‰újwÀô
+endstream
+endobj
+16186 0 obj <<
+/Type /Page
+/Contents 16187 0 R
+/Resources 16185 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 16069 0 R 16074 0 R 16075 0 R 16076 0 R 16077 0 R 16078 0 R 16079 0 R 16080 0 R 16081 0 R 16082 0 R 16083 0 R 16084 0 R 16085 0 R 16086 0 R 16087 0 R 16088 0 R 16089 0 R 16090 0 R 16091 0 R 16092 0 R 16093 0 R 16094 0 R 16095 0 R 16096 0 R 16097 0 R 16098 0 R 16099 0 R 16100 0 R 16101 0 R 16102 0 R 16103 0 R 16104 0 R 16105 0 R 16106 0 R 16107 0 R 16108 0 R 16109 0 R 16110 0 R 16111 0 R 16112 0 R 16113 0 R 16114 0 R 16115 0 R 16116 0 R 16117 0 R 16118 0 R 16119 0 R 16120 0 R 16121 0 R 16122 0 R 16123 0 R 16124 0 R 16125 0 R 16126 0 R 16127 0 R 16128 0 R 16129 0 R 16130 0 R 16131 0 R 16132 0 R 16133 0 R 16134 0 R 16135 0 R 16136 0 R 16137 0 R 16138 0 R 16139 0 R 16140 0 R 16141 0 R 16142 0 R 16143 0 R 16144 0 R 16145 0 R 16146 0 R 16147 0 R 16148 0 R 16149 0 R 16150 0 R 16151 0 R 16152 0 R 16153 0 R 16154 0 R 16155 0 R 16156 0 R 16157 0 R 16158 0 R 16159 0 R 16160 0 R 16161 0 R 16162 0 R 16163 0 R 16164 0 R 16165 0 R 16166 0 R 16167 0 R 16168 0 R 16169 0 R 16170 0 R 16171 0 R 16172 0 R 16173 0 R 16174 0 R 16175 0 R 16176 0 R 16177 0 R 16178 0 R 16179 0 R 16180 0 R 16181 0 R 16182 0 R 16183 0 R ]
+>> endobj
+16069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.595 758.195 218.543 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.225 746.638 194.173 756.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.703 733.978 133.651 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.181 722.421 173.129 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.63 710.312 171.578 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.039 697.526 217.987 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+16079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.102 685.418 201.05 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+16080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.423 673.986 146.371 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+16081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.926 661.2 205.874 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.926 649.092 205.874 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.515 636.983 180.463 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.142 624.874 202.09 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.549 612.766 169.498 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.187 600.657 202.135 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.231 588.548 187.179 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.157 576.44 212.105 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.652 564.407 187.6 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.013 552.298 179.961 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.917 540.113 205.865 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.887 528.005 215.835 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.69 516.573 213.639 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.124 503.913 185.072 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.306 491.679 158.254 501.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.832 479.646 168.78 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.936 468.138 199.884 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+16098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.464 456.03 170.413 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.35 443.244 160.299 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.524 431.135 180.472 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.166 419.704 163.114 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.212 406.994 174.16 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.484 394.886 179.432 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+16104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.808 382.777 160.756 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+16105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.734 371.269 168.682 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+16106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.191 358.56 171.139 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+16107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.504 346.451 171.452 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.111 322.157 165.059 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 298.065 175.765 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.743 285.907 175.691 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+16111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.364 273.722 225.312 284.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.819 261.614 235.767 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.229 250.182 193.177 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.684 238.073 203.632 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.299 225.965 184.247 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.299 213.856 184.247 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.62 201.747 207.568 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.62 189.639 207.568 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.531 176.929 171.479 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.337 164.821 176.285 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.83 152.712 161.778 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.449 140.603 179.397 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.965 128.495 176.913 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.631 116.386 199.58 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.594 104.277 207.542 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.525 92.169 212.473 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.191 80.06 235.14 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.038 67.875 223.986 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.549 758.07 468.497 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.689 745.961 497.638 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.003 733.852 482.951 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.988 721.82 472.936 732.339]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+16133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.246 709.761 409.194 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.528 698.203 412.476 708.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.884 685.494 407.832 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.681 673.385 395.629 683.613]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.412 661.277 395.36 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+16138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.7 649.769 423.648 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.028 637.059 397.976 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.201 624.951 411.15 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.791 612.766 455.739 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.806 600.733 414.754 611.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.157) >>
+>> endobj
+16143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.476 588.548 413.425 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.117 576.44 457.065 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.572 564.331 467.52 574.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.982 552.899 424.93 562.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.437 540.79 435.385 550.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.052 528.682 416 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.052 516.573 416 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.897 503.913 474.845 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.897 491.804 474.845 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.152 479.646 427.101 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.162 467.538 423.111 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.679 455.429 420.627 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.791 443.244 455.739 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.645 431.212 429.593 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.549 419.027 468.497 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+16158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.11 406.994 434.058 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.003 394.809 482.951 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.175 383.378 394.123 393.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+16161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.008 370.592 403.956 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+16162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.152 358.56 427.101 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.162 346.451 423.111 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.679 334.342 420.627 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.791 322.157 455.739 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.645 310.125 429.593 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.84 298.016 401.789 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+16168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.806 285.907 414.754 296.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+16169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 261.739 413.866 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+16170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 250.182 415.48 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+16171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 237.522 407.518 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 225.288 413.498 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.165 201.747 474.128 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+16174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.239 176.979 422.187 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+16175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.312 164.87 408.26 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+16176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.558 152.636 468.506 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.772 140.527 472.721 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.771 128.418 476.719 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.288 116.31 472.236 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.456 104.201 431.404 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.049 92.092 442.997 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.129 79.984 430.077 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+16183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.81 67.875 449.758 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16188 0 obj <<
+/D [16186 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16185 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16307 0 obj <<
+/Length 5552
+/Filter /FlateDecode
+>>
+stream
+xÚ­K9v…÷ú¹”€išïÇv0xlka =‹j©$Z/W•l½/#ã†È¨HÉ{Wj´Rü˜yŸÁà‘—yùë«?¾}õO‰æEòÞ\Þ~¸)¢÷—´ðêòöýå××ÿü/úó¼ùûÛ¿]¬öBYÿ´þ‹W~ûê¿^)øÿò¢¶"bQÛË»/¯~ý»¼¼‡¿ûÛE
+“âå–O~¹Xg„[Êû|ù÷WÿúJ–Õ²®¨V’"$(Ú+!±^¿ùþ®dÚ‡å“Ú·àðÓF~ITJŠäBüxÿ|€Ôfû$ ?¯·;äÓóÝ»7Z¾þýéáÿÞ(÷úþ Þˆ`C¼Öì~æç»GøÚX°WÞãÇüo}uùõâk¨Âú«‚—_‚ƒïrùEi¡dêÌ&¡œæPÌÂÿƒ’®?ß-ŬsÌ¥E¸šy÷á?¥Ô_žÿq€vZ¸ä9ÐÎ wè/wO¿@CÚZhH"[C¿?~{w
+Æõ¨Eg¢Z%ó·ÜëþvíüŸ¾vüV¨˜8j
+½蕲Ï?€¬Ýë¯wàš¯ï,af¥øÙ2!¨Þ4idºça©¡#ÇJ?—$cWïBg¢g*fßæŒ6‰£Þ‰¤Ó®G³†üëp
+ÊO,Ï#Q¯’øþ_ï¾<¼;nÒ’å‹æg»û/:Ù° N>Ž4,„ÓŠC'(ÉhÝ¡‰B•È‡¯‡Hø¤caÂl;®µß˜“*Ù$¤s#*9'¬biMùÑ2*Ñ‘¨R‰ür÷¿GC²>wVt¦u”«™ÏŸïïÞ??4Ž… ìµ{îœ;`æîÝPW ó#-‡; $%]‡;èHtG‰Ì“§û÷Çã¢ÆEl
+ÆD'ÍH360õLŽC(‹èä;„¢#Q¨ù5o£þørÔ”&pp¡)jîÏÌÓ°\΋düˆ\°•‘cuâT„%vè‹ŽD¹Jä¹\t.ÊUró†ÃíKY¨0á‰aGíwó¨éw%8*D@I!ô,JèHôG‰|z÷éþýÏ7¶-]àà愯±³“\­}hÈ6Y=Çê1—äN8;Í Ìu§¹d6úVà ÄspmÞöwR©¼œµ#] 0xŽåH.ÉáשèP”ª„ÞØ ‚‰‡×,ßÔz˜ëî¾ikË0Ÿ#âàzÜ;Û’­€1` Ëµ0rxââÕP’ugóƒ
+æzê»bžlá`ôÇi³gÏo9ŒiÒ..o
+&4ù)Ê@“ÒZhű†Ì%ÉÓƒ´‹Vt&jU2oÍgàWÍÓ:ÚRÔª†¶æ3äÔ`Ó¢Ò5xÒ °6‘zäÉ–Uriö ɧ´NÎ.¡3Ñ %³µ{§¤æÀÂd&$]c'•‚õ¨”j ÛÍõ¤«dRQª•ˆ¼U¡Š×Ø‚™8ŒcD¦ BkW3›»ïÞ“™>îöÌ9Kij8;ÐxM„ž#q,WsIþôlìb :­Q1›[@ÒGp^<¸Xƒg;Z ÅŽŒÄ&"ÇÒ1—ä¶Ó’Ç£"üÄðo˜: ekdkÒ䄵Šƒ ³Rev_ur΄1#ÛuÆ+áÇó¬\’ÝŽH6•¢3W¥Jä­)´?m9˜–!{hkÊíN±|Y—qõ<Ù’ƒpû—ÓÚþ°¹ŸæX¦æ’Œ÷§gP“ŽÔ¼üT±¦6Ôr°R,`ç–7•*ðì´ V@CgüŒ ð[s¬VsI(ž©E§¢Z%õFƒ^'¸ Ðu‚[AîY&0,\òˆQ'-¢$ŒÍj¿ñ”ÏZ›owëƒ} ¬™ŒvÂXÒ\P*XÀ]KR¶Ù•(øW1r0uîKcͼþpâÝ÷ïÃ?ž‘˃Ìþ÷³Œº¾X@?‘ŸK’k_þ&íÏ÷Ç[hÖÊ Tã%LØKjû@¾[öÉÈ0xi«+òóøI
+bÒ0u®€Ÿ;õFxÑ°44÷‘wl ´ÅñŠ‘ð'N<5™ŠÞ(©]æ “Ñ%¹i2qõF ììxéþа䕚ãE=½Ü¥»àËåBv>¦|ÍnÛ$Áœ„®¸ú–O,´
+ËMtµ5t®#ÉŽGÞÖÁØÎÑ“ä’‚²#F¡³Ñ(%»Ë(t4¥DŸ…E£”ÐéN¥ôJW§’×’㆞\’?9j¶O™ë®XÅlߧ”'ß‘íòä;Öèžv_.ÎR¹B»\5Ž{yrIöäDªÙ>Id¢T%³K*:¥*Ñ·¯d Ös@óérãkè­+Ùâr”Õyb#M 1evˆQzd°ŽßEŽÛ‡rI&ÆWÒ™èÊ’ÙåJ:]Y¢O\I‡¢+Kè‰+ÉÐÍ•%´sdk³«»Ôð=Ç=G¹$}râ×lŸ$2ј%³Ë˜t4³D¿Ìr1 3äw¢MͼåKøY˜)oé×È©¾R:˜Ù­àLÏXºJ(H…C’‰èÇ‚ØeG2ÝX€Ûf$Ñ‹±mE2qubœí+/vÛÒŸWEå’¤×=n¤3ÑŽ%³Ët4²DOÊ5<÷ÏO<×1«¤—Ÿ«ÅÀ\Õª˜©ú¤8jß
+¸ŠT{D¢ƒW‘Jp;™‰Ž\ƒ™Jd;—‰ŒÄX¦9cÅ*’©//†é–á5©®'-†JÜÂG~»â˜È`Lc*À'!ad$f„È“ˆ0*rK+ƒWíÆýŸË ÞdÍÅ'¹\YuÛÆJ!5=„ÏX k·]à‘9M–ÖTtbŽ%J±F¶Üib¾º%1cÒÄ©ÀÁé …"çÒ¡R§yƒ›Rt$JU2;öK Ì’eùÒ)
+ot]ƒ™n¿Š ‹z‘“éP¯Ó¾M/:õ*™#zÑk€zMÄñ¥Ùd7”ŒœK‡’†ñm’Ñ‘(YÉl纙åÝ`ŽôA“ôò†MŸšß—¡n=R‘#éPªÓ¾M*:¥êàÛ¤¢ÃQª‰¾4Á‡j‘áP­Ó
+¬rí¾t#/Ñæ°’œkBfçÛHòl²þòVé KD§ÓàÐ)'±{›Oè@ôÉHìÞæ:]R~áÉ›G†s÷Z&éèýéùoh’Ó̽Í&t$Úd,so3
+½h”‰Ì;ò
+9­rš{·Y…ŽD«”Ì«Ð+€V©bïz¬BFoV™HÜ£»…ˆn)SÙÚn¡#Ñ-%sÀ-ô
+ [ª(º³øÕl™h8ò÷¬ÑÂé]þÞlï’öÐè‰ph—2®m:íR¥ßõÛ…^´K•‚×m2³Ëx
+_³i½èr4:¦L†k;†ŽDÇTÌóã&Ù->Xƒ„ßçáu´ðzug°®zÑÃáV½ªl¸¦^ ÈU¯šÙ¯C V½ê­áÇ‘†h¥ƒ›š8ã*Z¹c GÒ¡AÊDº¶AÈDôG…ð¹hª {P›;ÆcÿÚééBÈqxè2 ¯í:-R1,B¯zd<Þë“3êP²2¢îÆ-zÆCíGî ña‰£©¨Íƒ VN5a@ƒZR¾È<:cóup>0@m¾Î…z|4ƚ܃X((k´­¡3ÍQèvÓ”ä<>4eÇwfJ:MYR»LIG£)Kô‰)ÉÐÍ”%ôÄ”t(šr<i±íËÖ¥£Ù—zfzü jk¥÷ñƒëªL΢‹Šƒ ƒƒË­¢dß¾ÔÀü20ø<g:Õà™5Moü&9
+p¬ŒìŒÎFÁJv‡`t0
+6žØÖ,öhFÜ4+Sû4£³Q³’}|¿/LÓ—Àfhr"XWCoÅ‚Òr€­ºž6ªÁ-;¿>ŸÔ@˦¢KÊ@Â.“0 W“”è¶G˜«GúrÑ"t.Zd<÷‘Á$äTÂÍ$e,áÇã©ß>Id:øo¹c6sýL¼ž¯d`Ç 9îÙ½¹~/$Ëñ¬ÆôþôhÂM²2š°-‰’Uqˆ·rýòÀÈó]¡Q»ýwœY%?2¦gn:•™„mèLÔ©+qÓ‰ÎEÆó¤"çnR•¹„m©èL”ê4Ñø¸Äv10ƒ>^1?<~ûrä )$K¸evY؇[~úö4á ¿½élÉ)ˆ›3ÊĶ3èLtFÉ<¼pÍäv#íÑ„´¤UÕi·2Èrœ“Ü<SiÇíéàÕ˲œQ:Ðk7o”ˆmoЙè’Ùö‰Þ¨‚O½AænÞ˜d°9uq³G™ºØ¶‰öè ˜Ì³jÃ’k™ß‘û\Ë™V Ói'Í@OKAD‰ªĦDDÞ*O.y"¹J3ôØV§§ѳ7…ÊìöBt&ªT2of€æ~6pdZænÖîR®LŸ†Õ‚ß#?¢9þpS«Ì?l«Eg¢Z%óT-:vU«¤ægC‡#b~Sži¥Í‡'êTË™¹R>º=ä ròáæŒ2ù°í :QeKž9ƒŽ]QROœAf¢3Æs%Ûæè‚ÉA‹›9ʠŶ9èL4Gɼæ›78Œ6àa6kvq–­88a}iÅä¸ÃM¨2î°-‰B•Ì¡è`j<Û‘A+rÂâ¦U™°øðõ¡qØŒº6« 'ºùB¼”8ÀÐ{ǘvà‰Våò.#{Lô˜ÃM©"çðD(:…*³Ïu¢sQ§‚;Ù¦*¥ºÚ5spª <QŠÌD¡Jæg©Ð˘Èñ=ô|a÷=[ç2@‰`¸ù”WžÆTÜ™¡Ñ
+§Fº[zÈ z£
+l{ƒºš£‚¶ÍÁ
+EyÆãé$"µm"UAmÇKøyµ4P/EL¦†¶v,òÇ,8Ïeã<³§51#ÏJÉIm(T™ÔÖÖ‰Ž\eªÂáNU¢cW‘ªoÚ×  U&rŠÊT¦˜µe¢#W™Jä­Íƒ(@&dÌKuø^kë
+endstream
+endobj
+16306 0 obj <<
+/Type /Page
+/Contents 16307 0 R
+/Resources 16305 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 15755 0 R
+/Annots [ 16184 0 R 16189 0 R 16190 0 R 16191 0 R 16192 0 R 16193 0 R 16194 0 R 16195 0 R 16196 0 R 16197 0 R 16198 0 R 16199 0 R 16200 0 R 16201 0 R 16202 0 R 16203 0 R 16204 0 R 16205 0 R 16206 0 R 16207 0 R 16208 0 R 16209 0 R 16210 0 R 16211 0 R 16212 0 R 16213 0 R 16214 0 R 16215 0 R 16216 0 R 16217 0 R 16218 0 R 16219 0 R 16220 0 R 16221 0 R 16222 0 R 16223 0 R 16224 0 R 16225 0 R 16226 0 R 16227 0 R 16228 0 R 16229 0 R 16230 0 R 16231 0 R 16232 0 R 16233 0 R 16234 0 R 16235 0 R 16236 0 R 16237 0 R 16238 0 R 16239 0 R 16240 0 R 16241 0 R 16242 0 R 16243 0 R 16244 0 R 16245 0 R 16246 0 R 16247 0 R 16248 0 R 16249 0 R 16250 0 R 16251 0 R 16252 0 R 16253 0 R 16254 0 R 16255 0 R 16256 0 R 16257 0 R 16258 0 R 16259 0 R 16260 0 R 16261 0 R 16262 0 R 16263 0 R 16264 0 R 16265 0 R 16266 0 R 16267 0 R 16268 0 R 16269 0 R 16270 0 R 16271 0 R 16272 0 R 16273 0 R 16274 0 R 16275 0 R 16276 0 R 16277 0 R 16278 0 R 16279 0 R 16280 0 R 16281 0 R 16282 0 R 16283 0 R 16284 0 R 16285 0 R 16286 0 R 16287 0 R 16288 0 R 16289 0 R 16290 0 R 16291 0 R 16292 0 R 16293 0 R 16294 0 R 16295 0 R 16296 0 R 16297 0 R 16298 0 R 16299 0 R 16300 0 R 16301 0 R 16302 0 R 16303 0 R ]
+>> endobj
+16184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.346 758.07 210.294 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.516 745.961 244.464 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.201 733.852 199.149 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.794 721.744 210.742 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.419 709.635 204.367 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.656 697.526 222.604 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.874 685.418 197.822 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.969 673.309 243.917 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.686 661.2 244.634 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.555 649.092 217.503 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.844 636.983 209.792 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.487 624.874 254.435 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.724 612.766 206.672 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.898 600.657 226.846 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.657 588.548 203.605 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.674 576.44 207.622 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.761 564.331 183.709 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.36 552.222 224.308 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.209 540.113 201.157 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.842 528.005 198.791 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.793 515.896 216.741 526.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.175 503.787 210.124 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.051 491.679 188.999 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.225 479.57 209.173 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.155 467.587 203.103 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.172 455.353 207.12 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.259 443.244 183.207 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.553 431.135 189.501 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.727 419.027 209.675 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.707 406.918 200.655 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.27 394.809 224.218 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.673 382.701 209.622 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.046 370.592 191.994 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.22 358.483 212.168 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.524 346.375 199.472 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.698 334.266 219.646 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.539 322.157 182.487 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.84 310.125 223.788 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+16226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.805 297.94 236.753 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+16227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.054 285.907 228.003 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+16228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.019 273.722 240.968 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+16229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.738 261.614 186.686 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.053 249.505 232.001 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.018 237.396 244.966 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.57 225.288 227.518 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.535 213.179 240.483 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.703 201.07 199.651 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.331 188.962 198.279 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.296 176.853 211.244 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.411 164.744 185.359 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.376 152.636 198.324 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.381 140.527 197.329 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.092 128.418 205.04 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.057 116.31 218.005 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.346 104.201 210.294 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+16243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.236 92.169 186.184 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.551 80.06 231.499 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.516 67.875 244.464 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.954 758.07 430.902 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.582 746.087 429.53 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.547 733.852 442.495 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.207 721.869 423.155 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.172 709.635 436.12 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.662 697.603 416.61 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.444 685.494 441.392 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.409 673.309 454.357 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.627 661.2 429.575 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.757 649.092 462.705 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.722 636.983 475.67 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.474 624.951 463.422 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+16258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.439 612.766 476.387 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.632 600.782 428.58 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.343 588.674 436.291 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.308 576.44 449.256 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.597 564.331 441.545 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.275 552.298 473.223 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.24 540.113 486.188 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.512 528.081 425.46 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.477 515.896 438.425 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.686 503.864 445.634 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.651 491.679 458.599 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.41 479.57 435.358 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.462 467.461 426.41 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.427 455.353 439.375 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.694 443.244 430.642 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.148 431.135 443.096 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.113 419.027 456.061 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.997 406.918 419.945 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.962 394.809 432.91 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.595 382.701 430.544 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.581 370.592 435.529 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.546 358.483 448.494 368.787]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.963 346.375 428.912 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.928 334.266 441.877 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.839 322.283 407.787 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.804 310.049 420.752 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.013 298.065 427.961 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.978 285.831 440.926 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.215 273.848 427.163 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.908 261.739 434.856 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.96 249.581 425.908 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.925 237.396 438.873 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.341 225.413 408.289 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.306 213.179 421.254 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.515 201.196 428.463 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.48 188.962 441.428 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.495 176.979 419.443 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.46 164.744 432.408 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.058 152.761 443.006 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.023 140.527 455.971 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.461 128.544 428.409 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.426 116.31 441.375 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.834 104.326 410.782 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.799 92.092 423.747 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.008 80.109 430.956 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.973 67.875 443.921 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16308 0 obj <<
+/D [16306 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16305 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16419 0 obj <<
+/Length 4876
+/Filter /FlateDecode
+>>
+stream
+xÚÅËr#»‘†÷z
+.[>0î/¾„½°cfzáˆc/ØbµÄ°DÉ$5ö™§ŸÌb¡P,B†½êŽn €L
+~5ÿ‡ß~}øǃ€ç1á=óRožÞ~üßìàÿþ¸áL¿ùgÿ“om3}y¯›ÿyø¯žVK›¤Z3 h+õzû¸† ¡ÿIi—àÐÀ0’¯‰B¦MÈ‘Ÿ‡Swž*Å‚ôPe¡Û}}}z”üËßg¸F² (¸Æ0˧Üã·_ôÌ ìø<Pÿû÷›ÎN ?p±Ûæ«™nóƒLðPb'4ƒÂPþ J*2T;5Z*¥XªM•‚ÏÛãswn³–/±–rŒÃ€%°ôŸ×ºÌZíÔh­”zèNsP£¡3$ÔX˜´d]p§$`g˜óSðŠÑì5 0ëVŒf ¿¡4…@IN™2ÿh§FÿH©wü£ý#…øG;8úG
+^9…µvâ#ßÿʹzßî®[<Srøq߶dqXªÄ¥$ %]ÀÇÓ+{úø¨n†âؘÉLx¿Â˜@ Z%á“V¼Ümƒ^jC±%,„i¸ž´·KÒ|ì>Þ?hþ¥Cè(Lʼroû§¹©Ä0éäÆ:ËtMõrð÷KIj]ûo¿úÕBŸXž•õpXð¹ñ)<é’;¶µ|: &‚¬uO 뻂ù›À´PV`δ“”ØŽ‚-=°]Îî8;þïaûÖ]Ü
+K)˧!<“Ún,˜Gú¦8Lr˜†/%q?˜øåýt.™´ŸØpÆ]õÐÕ0⢰¯
+,8]cßvv´oÊ~íØ÷Qš/Ýëm ÿîóðtÞ¿~Óž ªÂ|Ùœßwº]™¼×yñ€ÝFº-…Û@Iθ ùéýííýpÊW¡mÊ›Á†Ž¢P’Õ> !Jüß
+ÿ7A@üüK2j
+#aÕ –‚ŒI·9ù­{Ã… Ÿæò6 Úâþ愼=lŸ»ãÅ—Œ2(!sæ?GkÔ­Xvã X+euŒoà׸§ÈS GaÞ»ÑÒÏ]Ó<É-,ýžb¢„’œ ÿщR ŽA±aIvÚÉÓ¡¤¬»LÜÓwòcpÐú)ù\¨Ž2´—ÌYA`],ÉX²e°2ÙÛÛŠœKÒF͵çn 良Âlh4Eê€%©¸ÉxÞ~éÿµØ6“MŒ¼ªª6ZC.®LqU“43b×0sú)ˆ¾$ã~Ù’Ãྗ`!!b
+2'‡äçt·cýýŽU¢WìÁ]wle·;
+‚¦–wl3xìØ”|ìž÷§óeŸŽy©(À7úT‡Í}³šûfÅ «bSòÚ¬•Ü6+Ä…/7k3x4kJþ<,Rçt¯r4­a!È;µ×†­,à¶a9„¡%‘@4l3x4lJî·‰¶ÇÚ¹
+SAI:i,›ªM•2‹LÕŽŽ¦JÑ7Ʋƒ8 rh¨‡8KÙúq|ŸÛ,†dwiÛ¡’]ÁU]5€‡(!kB˜±†Â+ûÍk[â•íÌè•)³È+ÛÑÑ+SôÛö_ó7j$üÓá¹ Ê™·œú˜„ ‹eŽ\·¦Áò*«‚åú5œÀ%ñp7ž‚.»d;3ºdʼ¤gëóþm. ‡…ÄBøAP<ÿò"¯Á“9ËL•ÁðÐ^“¤0P’ˆç½ËkgFƒ¥Ì×ý·Ë~éÂA`Î Š
+@­˜T`M(¢po½bÎ01µlG{AI¼(iGFs%Èñ,ð´ÿ?Üž^1jAQkûÃò´«F$ ºftap (ŒÅñx@”X«•"k¬Õ\h¬¬sk4Þ–@§aËXâÓÓ#¹³þ!}`\R¤€²ÿ¤&^ ¸å Ú
+fÿ­É™Ëœ„UÉR ñN„Ÿ ×˜
+VntÅÄ+ae $cKrB—˜ªM•2‹LÕŽŽ¦JÑ·S@©5Ô…þ|½m;€ ¨„y73规Iƒùªù?ÓáûX’ïé,:e;3:eÊ, ·…5€%Æ»×`ÅÀâÊ
+‹¬E‚„%é`K,ÖÎŒK™»î;nGo?_ϧç¢0àx.Êu_5瞪fÎ×@n»%)ïKŒÕÎŒÆJ™eÉ‘„‚ *`0õ“
+¬1˜bÂÖìÓJé™vÙ,–$ã­±eƒµ3£ÁRf…ÁÚ+ –7z¸ëu¹ð<]±aâƒP—€í|Ÿ6ä_|Ãrnj|EX¦Hƶè¯ÉxJ31:JB¬ð“f|t“~9¾>¿||žç#,ùr3,ntÞî•ñîêV¬
+DOI+pþ²4_[p™ÃnþP†CüÛÎG‡Á¾¼VzL¨‰ïðÞA«hÁÅaDýÁÁ}‡!`“3Ëö|pgŽ Ö° C^ƒU¹aBUYÌÃä¢)r(L>Çê—-ÖÎŒ˘k¯A´XVƒ¹P{‡èðƒ²œ·*Pðû¡bÀÙ (ÎYû;…ÊÞ•.ÐÒRPøˆ°9uù.^¦'AƒsH3AßØüÀMB¢H
+E Ü`ó$BF½pL¼q|碙`Bz
+¶VÌ Ÿ³$.,_&ƒ“{>¯Yidÿ‘r…Á ÉšÑ`PÒ¨ Qf°vv4Xʾ!„bS\R@a¹
+AæÐ/EF0¬ÁOÁ+¼#£ *„”„Ìò@á%P’^>3ÄSl
+¢täÄÝO‡íü‡º½’ICñÈqÒЕ#9ت©æjCa!(Gñµ£RàüÍ'­aZ4íD É¿09ñür춻ÓK€†€ŠW
+‘:(ˆ{}ßFíÀÁD)ð€û8Ÿosƒ~J9*Œ^']FÅHúF~1<¦aïr檡‹ª;¶Â)¼bÂQ(ÓaÌàÌ}§hN‘OO/ÝîóõFÎÉg;†„Þ)t}œ>5Ò/P,·ƒülOÜC
+|{ƒ¦9ìϤȅ¸UKX¶,Vãö—ͱÕ6šþÙ/Ï¢W`¬³`3…§‡R¶ëÎ*¼¥¹îì¼ÑÞ4áZ·
+ϬÃDëv>ÅQàÅÊS´ÓyÆ,ÕõUA3å78à©z]ß«á¬!A*Σk4 ÝŽ¾‘
+ÝÎn¦¡k8A4žéx3ÁQó)’vâR(&BÂkL³‹µ9èh¢f¡ÙÑD©Ð좉ڑ•Iê*‡ß“`Ý%®–Ô½RëнòZÅ@j–{­”ʽ.Z©y±Ò}5]œa½×H˜bÓ¥jº8ÅzpÀ0Çâ—<9x]ÈÄ¥¨qfÝÑ5RÝE×hG^\#ÞÊEûû8­êQîÆäØ•¹(ç¢f’m–m”J/Ú¨y±Q
+¼™*ù‚÷TÁ¨–qon&¡„\=3ã®ÜN2VW àvíåè™öò’s {çÈ7³Ò~š%Q™î§Ù©ÊôÊP6Øš¸] z´ÒÏbÐçùåúVrED•Â 2ñë…8 ·è4Ïí}Ž]%A´¥BÅ4Û.7=Ú(•›¾c¥vh´R
+½)yÈ )„µ•Çdp"¬½)¹‹&z3X÷7ü¦à5CØõZC¸Yî{tTîûÆåe ³^PP-]äÔSyq${4ú¼&`*}h4U³°øhªTXüž©Ú©ÑT)õÆPâZè×æê7ýCsÌ>)ÀšÃTSpø‚'f>ŽÝ®ë/0Íf`2­a>Býø¦}T4^#´Ò1oM|aà<\‰ïê…Å´afúÁaakš•åÇÖ¤Êò£
+´ºH.dhZWlT$ºbúªH'€OLÁ?wÎ\¨è!Y¦x»EA6¥uþvËû÷ùIIŠ¶â¤$ð]’„ø³žH<¡ò —«(¦ý ˜^ù>}ÿ¥ Š! QLþòL¿üÏ9‘ì¿q ÀzaÒ`¼Wý ž•ýUûl'j»› ™<ãʼnƒ;¸Núüu›c77P¢íÚÎD‰FrfÜ
+Í ÿÜŸ_æw´”&°”š@?¶ÑŽ·Sý:ÑŒÅo©E“µ½ûÍ•=ü±:®~FwlDóÃcCÒ‡)ß_Æ«œ
+6nv3y#}¹~…ñk®óðð«z2ày1óq„RýŽ`»À¿R¶ßÌþwÛóönµåtS}ofbØþÚu§¹ B©"<A…\~·?vý[Ùs©ˆ`Øæv0d è“™Øÿiþü™
+"¦òý{)ò°ÏÕfó`>y¸ÌlͲð£ÙRYøóOÝü…v-¯| •Cçl†7A„ i',bžOÚÙd3¼µV½7Ü® ÷†3]øaoø¥²³iw­úUÚÝ.¦Žiw*¤^u@‡¬;ßKº ¨CÒR‹rnµ”s—àÍ¢æ1þÎDÍïæ]íØ!íÊ°ei—ZJ»Jú¬]^<vZ&/^žv©¥¤¥$ql×¢[jQ—§]Ó`½Bý![»BsœH3…曦)=ÖÀ߅ϱoÛý¡èdOÝŸ¿kå¯æïv=eœ¿3-å‚ œ€:LàùÞ N€fð ‹m›Â}CARDiêÇT³Ôî8¦R©]”Z?>^ò¾øUK8 »¼!—âfòbÕç¦ÍR°J›>5M¥`kvDõôZ&ÔËÙòMŠhŒf‰ÒÑ™DêÞ3ÈHª10¿M¨/鱗› Óçp ÇV®ÊþíB¡Ñ2¡Ð0KP>Ûõ,£d‚–w<€€:x@N-¿½²ä¾Ìš5GH5ÿ>Ð,F8ú@*Fx¾è4?]n4¯1ÊÌļw¶ëåŸ3ÓË+;mAä\°íÚ.)·]SI¹ÓþùP¿Xš­ãV ´±©Úé¼}îþm-hÛ
+„õm˜× ÆSPƒ)ÑçÔ¸ u®î>ÓxarÝž·]ŠË•fѧ8C¥ªOùõRß–ëé©À­šÅ‘¢W¥âHwœª9øTʬp©y]¦¬ªCÉ(]´Wi£úÛY]!¡Îíu¾o$ª;AQ¸ºÆºB®0Mjÿ
+endstream
+endobj
+16418 0 obj <<
+/Type /Page
+/Contents 16419 0 R
+/Resources 16417 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16304 0 R 16309 0 R 16310 0 R 16311 0 R 16312 0 R 16313 0 R 16314 0 R 16315 0 R 16316 0 R 16317 0 R 16318 0 R 16319 0 R 16320 0 R 16321 0 R 16322 0 R 16323 0 R 16324 0 R 16325 0 R 16326 0 R 16327 0 R 16328 0 R 16329 0 R 16330 0 R 16331 0 R 16332 0 R 16333 0 R 16334 0 R 16335 0 R 16336 0 R 16337 0 R 16338 0 R 16339 0 R 16340 0 R 16341 0 R 16342 0 R 16343 0 R 16344 0 R 16345 0 R 16346 0 R 16347 0 R 16348 0 R 16349 0 R 16350 0 R 16351 0 R 16352 0 R 16353 0 R 16354 0 R 16355 0 R 16356 0 R 16357 0 R 16358 0 R 16359 0 R 16360 0 R 16361 0 R 16362 0 R 16363 0 R 16364 0 R 16365 0 R 16366 0 R 16367 0 R 16368 0 R 16369 0 R 16370 0 R 16371 0 R 16372 0 R 16373 0 R 16374 0 R 16375 0 R 16376 0 R 16377 0 R 16378 0 R 16379 0 R 16380 0 R 16381 0 R 16382 0 R 16383 0 R 16384 0 R 16385 0 R 16386 0 R 16387 0 R 16388 0 R 16389 0 R 16390 0 R 16391 0 R 16392 0 R 16393 0 R 16394 0 R 16395 0 R 16396 0 R 16397 0 R 16398 0 R 16399 0 R 16400 0 R 16401 0 R 16402 0 R 16403 0 R 16404 0 R 16405 0 R 16406 0 R 16407 0 R 16408 0 R 16409 0 R 16410 0 R 16411 0 R 16412 0 R 16413 0 R 16414 0 R 16415 0 R ]
+>> endobj
+16304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.559 758.195 186.507 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.524 745.961 199.472 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.733 733.978 206.681 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.698 721.744 219.646 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.39 709.761 153.338 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.922 698.203 143.87 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.174) >>
+>> endobj
+16314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.825 673.435 191.787 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+16315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 649.217 175.765 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.15 625 182.113 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+16317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 613.443 183.727 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+16318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 600.657 181.745 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.579 576.565 178.527 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.437 552.222 201.399 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+16321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 528.13 176.635 538.6]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.579 503.913 178.527 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.579 479.696 178.527 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 468.138 169.058 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+16325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.07 455.478 158.019 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.174) >>
+>> endobj
+16326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.81 443.921 169.758 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.244 431.135 205.192 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.214 419.027 215.163 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.093 407.595 165.042 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.84 394.886 223.788 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.054 382.777 228.003 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.738 370.592 186.686 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.053 358.483 232.001 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.57 346.375 227.518 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.331 334.266 198.279 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.411 322.157 185.359 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.381 310.049 197.329 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.175) >>
+>> endobj
+16338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.092 297.94 205.04 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.236 285.907 186.184 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.551 273.799 231.499 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.829 261.739 197.777 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.454 249.631 191.402 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.909 237.473 184.857 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.691 225.364 209.639 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.004 213.179 230.952 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.721 201.147 231.669 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.879 189.087 196.827 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.59 176.979 204.538 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.522 164.821 241.47 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.759 152.712 193.707 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.933 140.603 213.881 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.709 128.418 194.657 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.395 116.31 211.343 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.244 104.201 188.192 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.828 92.092 203.776 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.21 79.984 197.159 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.086 68 176.034 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.013 758.195 427.961 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.96 746.037 425.908 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.341 733.978 408.289 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.515 721.869 428.463 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.495 709.761 419.443 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.058 697.652 443.006 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.461 685.543 428.409 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.834 673.435 410.782 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.008 661.326 430.956 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.312 649.217 418.26 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.486 637.108 438.434 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.168 625 416.117 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.386 612.891 408.334 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.355 601.334 380.303 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.175 589.225 407.123 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+16373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.563 577.116 401.511 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+16374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.997 564.331 436.945 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.179) >>
+>> endobj
+16375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.967 552.222 446.916 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.179) >>
+>> endobj
+16376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.846 540.79 396.795 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+16377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.625 528.005 393.573 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+16378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.764 515.896 453.712 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.109 503.787 489.057 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.262 492.356 453.21 502.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.746 479.57 417.695 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.171 468.138 391.119 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.381 456.03 409.329 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.277 443.244 412.225 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.074 431.212 400.022 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.864 419.704 381.812 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.154 407.044 438.102 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.983 395.486 403.932 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.625 382.826 418.573 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.456 370.717 365.404 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.673 359.16 374.621 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+16392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.792 346.375 449.74 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+16393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.855 334.266 432.803 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+16394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.157 322.157 384.105 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+16395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.746 310.049 417.695 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.277 297.94 412.225 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.074 285.907 400.022 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.864 274.399 381.812 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.283 261.614 416.231 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.717 249.505 425.666 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.963 238.073 362.911 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.705 225.965 380.653 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+16403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.406 213.856 398.355 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+16404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.795 201.196 410.743 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.406 189.639 398.355 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.776 176.853 416.724 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.406 165.421 398.355 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.406 152.761 390.354 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.864 141.204 381.812 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.097 128.418 397.046 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.609 116.31 395.557 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.41 104.201 416.359 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.456 92.218 365.404 102.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.938 80.661 380.886 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.41 67.875 416.359 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+16420 0 obj <<
+/D [16418 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16417 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16532 0 obj <<
+/Length 3992
+/Filter /FlateDecode
+>>
+stream
+xÚµ]Y#·~Ÿ_¡Ç Ëå}A€8^;6ŒØ±A
+"žºÂI”2³ DöÎ.‘&VÊQÑ2.‰¡<0ã>ÎCäÃòx*"¨
+H+™”šJ¢nÊ*‚©á“*¤VÄ OÕññ-S€ü’C`Sœ j4“Àu5Bõjº%wjÔGS£tÔVú¨§ÍaOcÀÚa]`à 5n
+pP #3Ik×DÚš’b f±@2AœÓ9 ™6uùÛ#Wo–Ûs1[hRÁöÍõ¤¢ "N÷¤HI¶ÀÞ“¾f0€ÚÀ¶8w¿œKàªDBb²ùK‡mÍ_wÄøeÀlŒ_ó–Í
+” Ü)PyL…ÒQ[꣎ûÏ Àÿ ój“âàRy‚6Í$p]›€µ3ÌQ2p§M}äZ¸ç2,Á+dÁ•àáÙ€ár5îÝÀ=ÇÜôpHKJ˜Â!- É5M~°\¯³×ÄCSÖÎ-äë*ÇÚaÛ­n¢ÑÕv*Òo',ž)HÉsÄ¡HÉÀ±«•æP”Ÿ^ðZir¬(ii'ÇÐó_úÍZ•3Âeˆ¡‘’n<†Î
+äõùùùùQÀQ=~»9UcyÜãØ6t+–%ÞÔœ3—6p]«ýîp=Á#Dðì”±£ Á(_J$DZüj!Œª)ñ®xÕ<ägÀäÀ¢–!æ]Ê
+¢¦aŠ7*7Ø4žXÆmä”h[Æmå†^v®âdzà+ÈØ
+†Fº×B¸ÚôtV8C,eãÅ60©¨6knBÔÚuï>³ã0¼zF@XÌY¹%ÝVb«Í.ªm?98ÒP¹#ZˆuŠ”Cïk‰•ƒ}SnªëUpÖð“g¨ú %Õ–9w›U<\q* &ø ¬0˜Xž,N§Ù2[¥Ì,™yÓFæP’¦k¿XVQ±µz–ÛêY6YJ
+Ÿ”901ç2ļG·'J "ËMÄçyÛ<JGTb™éjJB·)ôæ¥\n‹õÜÕ;—(Ù.z³m`Bðc:ñf[ÚšoËÈ0¢ë³Ñƒ¢/|`šÉ<pH ¥ÍÁGglƒ.æÁÀr3žW8`…¸‰²«³„@woˆŽ HÂ\Ñ1¼ÑìBÄ긯#ûˆôa ' E}ЇNÞØëÉŠ¼§•N[áÁùw‚Í‘^2t+¼>4ø…
+ð×O+7n¡œg÷m¼mS Ð~ÛŒ^{Þ¶7£‡†ð’Yö)Ö¨îó¹ŒF2˜ûñ jÍCPÌææJKPb ›¼ÙWÙ´y+- ¤Ûùˆ´ÒA[iõAQZñ[|MP8GX\@Û¶¹Û„-&bú™T¸¶
+o*y`§ G‰ûÀ¾‚ÿGU·¿Ì•À‹d;‡u²K~Ù “]ÿiƒ ²KneמäÁnʬշâø¹ö°QxI>Ä/d©V„CüWûÙ„  9`µ&zðfïf›{Ã.%¡náÕiÏv»yþ"ø@LòÛ¸:|9 Z£J'=Á@g
+-vB…ò5‚ôñ|ìË6B„ãù·r ­ 9Ïñ(
+6)AÌaoÆsMÍ%fSs 0ïŠçbõ–ß±¡t¹‰ÚÀCÞÉ%5í ˆ#•õ„L¯gDQB5»3_ i6-=þ쳊åú¯Çãûm±+ÊÊûñEìåËѧš,½ýdÀþ\Vw’¸ñö©)ÈO*ë¡N±ÿ¼áJ¢{wZO±¥—לrâX?“à˜é Ïàò¹ÔásÅîP}œ»öþ\T³yÛ¢|©^cf"ª3 ícÍŸ9=x.à|œ»xH‡µºx·ôÜFšî56ôeô@Žƒø#3¿o'g}…ïô‘ƒYßæªh¶ ö©2‹ŠÆÝè'k Îæm®ÙÇ3bâfÉw_‚«è=ãß®pí«7Ž<‹ƒ¢²æO"<I÷pÎ_®¼¬Óþ}¦ðß2nÆÈ©,ÿëÑ€ºßO¼btg“ïò\ícšO!ffQû9G'„PN]6tj£ÎëpŽ¹0~BgÐC!p®ÃÙÀÍé0wé ŒßðÑæÛKOŽëVÞŸŽ›do'-~}º‘ò¥Oǵ)_8w‡Î0LÝø tëîÓ‡ÔZw ©á{‘&üãY0}BFÛ›0¥"Ç,¦ŒfñŠíÜýAu7ƒÛûøÊñ½:kòˆšÀ÷ê„GÔ®ljaHì›LâÝwñRÁèá•Î­È%},®^‚±8pJààË—:–ÜêXx}ª’”lR¸—>!× ­?!7AhéÀ­ÐúÀ§ãØŒ¬ÓN&¹bõ!€J“óVŸËÁ˜Ü«¯/_ÙcôZù÷ý©úþuY?}?q»ùp«¼¨pÅ9f©üƒ!ÃY*_"‰]x@@ÀYT‹÷Š!èj¿.Nõ™s—ß?ÂܵºÆ×妪¿?ê㡸ZĘÐ0’>YÔ6Œ£E¯  ã<+6,IÁbÌ•þ‰¯«b—‡åäñ–ŽåþxËj¿ÛíËq¦…¹Á´»þfòÕc5…åä9ŽåޜǴo)¹x$ú¿ß?JLÃ|
+¶+ªâ˜gÇ“':öû““wÜÎ@Í°oÝËaM“;×[cÚï\±¥é˜µ)íCΰ¤œÎ±¤‘oá»þEMG:·Ÿ~C g§ºÚÇ&t …u”¶Çs7„þŒr‹
+endstream
+endobj
+16531 0 obj <<
+/Type /Page
+/Contents 16532 0 R
+/Resources 16530 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16416 0 R 16422 0 R 16423 0 R 16424 0 R 16425 0 R 16426 0 R 16427 0 R 16428 0 R 16429 0 R 16430 0 R 16431 0 R 16432 0 R 16433 0 R 16434 0 R 16435 0 R 16436 0 R 16437 0 R 16438 0 R 16439 0 R 16440 0 R 16441 0 R 16442 0 R 16443 0 R 16444 0 R 16445 0 R 16446 0 R 16447 0 R 16448 0 R 16449 0 R 16450 0 R 16451 0 R 16452 0 R 16453 0 R 16454 0 R 16455 0 R 16456 0 R 16457 0 R 16458 0 R 16459 0 R 16460 0 R 16461 0 R 16462 0 R 16463 0 R 16464 0 R 16465 0 R 16466 0 R 16467 0 R 16468 0 R 16469 0 R 16470 0 R 16471 0 R 16472 0 R 16473 0 R 16474 0 R 16475 0 R 16476 0 R 16477 0 R 16478 0 R 16479 0 R 16480 0 R 16481 0 R 16482 0 R 16483 0 R 16484 0 R 16485 0 R 16486 0 R 16487 0 R 16488 0 R 16489 0 R 16490 0 R 16491 0 R 16492 0 R 16493 0 R 16494 0 R 16495 0 R 16496 0 R 16497 0 R 16498 0 R 16499 0 R 16500 0 R 16501 0 R 16502 0 R 16503 0 R 16504 0 R 16505 0 R 16506 0 R 16507 0 R 16508 0 R 16509 0 R 16510 0 R 16511 0 R 16512 0 R 16513 0 R 16514 0 R 16515 0 R 16516 0 R 16517 0 R 16518 0 R 16519 0 R 16520 0 R 16521 0 R 16522 0 R 16523 0 R 16524 0 R 16525 0 R 16526 0 R 16527 0 R 16528 0 R ]
+>> endobj
+16416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.868 758.07 185.816 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+16422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.404 746.087 150.352 756.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.786 733.852 208.734 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.125 721.744 215.073 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.902 709.711 142.85 720.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.88 697.526 158.828 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.936 686.095 140.884 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+16428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.786 673.309 208.734 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.125 661.2 215.073 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.138 649.769 184.086 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.408 637.66 144.356 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.394 625.551 147.342 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.408 612.891 146.356 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.902 600.733 142.85 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.88 588.548 158.828 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.015 577.116 190.963 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.784 564.331 182.732 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.165 552.298 182.113 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 540.19 181.62 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.282 528.13 182.23 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.747 516.022 156.709 526.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+16442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.413 503.913 184.376 514.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.582 491.804 159.545 502.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.385 480.247 144.347 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+16445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.09 467.587 138.053 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.166 455.478 141.129 465.657]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.601 443.37 155.564 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.747 431.135 181.71 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.055 419.027 187.018 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.196 406.918 231.159 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.921 394.809 182.884 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.07 382.701 163.033 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.53 371.269 170.493 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.761 358.609 176.724 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.872 346.375 149.835 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.439 334.943 144.401 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.052 322.283 182.015 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.798 310.125 176.761 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.584 298.016 170.547 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.12 286.508 143.083 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.588 274.399 156.551 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.623 262.291 175.586 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.453 250.182 124.416 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.09 238.073 157.053 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.119 225.413 147.082 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.293 213.305 167.256 223.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.427 201.747 152.39 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.804 189.038 169.767 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.573 176.979 159.536 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.136 165.421 185.099 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.927 153.313 177.89 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.94 141.204 129.903 150.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.577 129.095 162.54 138.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.607 116.435 152.57 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.78 104.326 172.743 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+16476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.592 92.218 172.555 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.399 80.661 141.362 90.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.076 68.552 158.039 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.943 758.747 365.906 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.744 746.638 388.707 756.265]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.117 734.529 386.08 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+16482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.049 721.744 406.012 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.491 709.635 411.454 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.45 698.203 365.413 708.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.605 686.095 389.568 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.908 673.309 463.871 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 661.326 408.388 671.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 649.217 408.388 659.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+16489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.521 637.108 418.484 647.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.796 624.874 479.759 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.154 612.891 399.117 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.988 600.733 414.951 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.296 588.624 420.259 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.83 576.44 470.793 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.286 564.456 409.248 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.172 552.899 414.135 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.672 540.239 407.635 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.794 528.13 402.757 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.671 516.573 409.634 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.392 503.913 413.355 514.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+16501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.972 480.247 357.935 490.036]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.465 468.138 360.428 477.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.544 456.03 364.507 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.65 443.32 372.613 453.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.639 431.135 378.602 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.465 419.704 360.428 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.853 406.918 365.816 417.222]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.38 395.486 376.343 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.286 383.378 409.249 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.341 371.269 354.304 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.768 359.16 349.731 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.182 346.5 490.145 356.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.646 334.391 427.609 344.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.657 322.834 376.62 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.659 310.174 372.622 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.146 298.065 378.109 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.17 286.508 371.133 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.086 273.848 383.049 284.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.34 261.739 388.303 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.072 249.505 388.034 259.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.063 237.396 388.026 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+16522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.161 225.965 371.124 235.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+16523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 201.747 436.013 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+16524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.102 177.53 398.05 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+16525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 153.313 415.48 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+16526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 129.095 392.562 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.532 104.878 415.48 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+16528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 80.661 436.013 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+16533 0 obj <<
+/D [16531 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16530 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16626 0 obj <<
+/Length 3905
+/Filter /FlateDecode
+>>
+stream
+xÚÅKo¹Çïús”€˜áûá›; /œ]d#œ=Èš‘-D9Òx“ýö)ö4Ûd«ì©BëfxFõë.Vÿ$»køæó†o~8ûÓåÙÿâÕƳ`­Ú\ÞlgÞÚ ’Y±¹Ün>ž¿ÿéí»^üzùãFKË„Vð§ågï.Ïþs&àÿùFt&¼g^êÍõýÙÇ_ùf Ÿý¸áL¿ùoóÍû6Š™ÆÞÝæïg;ãùei“]VàÌ0mãéºnþŹz¸Ú>¿!<“Ú6ß—vêà6CÇÎ’³ l ><^~~u½»æœ}ùCÃ?‚?·WðËg›¯¤óç»ö Ǜۼ2œq·y%$<Mþ|só´;4NiÚýñã7owO×s¤Ð¦BòÚ0©»Ö©‘÷xñ
+îðöëááñõë_vW[¸Žww»ûÝþð4s-ž—×Â˺¼
+2$šï÷ÛÝ쀊ù5’I°}ú€.40> `ˆC ¯P4¸Ðœ\3 xr; 9øpõéJÉÝn€ 3‘¾N1Å{Î~:\Á-k~~ (ÍPµÐÀx@)(‰N×ÜTN¾ù¶¿
+%ͼ³P혙R@©ªƒô  b0Lp­CÕƒ‰wƒ™“gMƒ™C§*ƒ…‹„?% CáF•dÚÊ Æ"‚i¡ñ`C VÜSNþíBP{CñEÁ
+®–ÌëPr©ŠW`Û!Æs¡ññCVûúñDƒ»ñÌÉóã‰ç¦ñ̹“õ j
+W k˜R=_/¨²·^q°°-Ö+o>|øùÏo.ß- Îþšì퇞àŽ9˜h Ì¢æ[Á™¶GCZµ+éxÝ–^v\³Y'KüõÍûŸ†ösp꽑§¬¿„° Ôb C€Ë¶GKJ¶Ë‘Å÷–ïßûýÕí9ö{)FG ¬ 6S¢%ÁÛ¹¸r»Ø
+Jƒ~¶µ1JÀZÐPÜ\AöH¾ÝßßÂÀ6Ðqça·ßVí;ÈÙ¹Æð½þô¹f©Ñ¹&r.TÏ5xpšk
+rÅ2•€|\¦àŠe*¸]¦önyKIÂüäHZj`4’¢![/BñÜH9xzACÀl49³b=C
+½;~ˆT©)¸A±F9ö8ø3ÙjŸ=NÀaÝw0\}æ„Prò¿¢Ž)o A‹–lw>5 0ÛI `~yxªš¬šš¸Ö†yîÛº,™îÄyÒuxfr]ÎDÌŸ°ºqjÁ„£,ðÆO8ÑvK &œ‚½öÐd‹4ç( °æ°r- e΂uK¶
+V®®Nª3Vqk '¥,_(Tg´¤¬­É<3eMΤR JŽrL
+Õ-IóRªSIXËjOPÀÐKT'Ýœ=SðÐTrhEÀƒSÈÁ¹Ôª“RW +·@ u£%®+•.ö¨tsjÐ%
+4¨jB§Ï敶Ló_pZpŽ"&Áp5•ML…5#®>%A„JK±U-q[5›ã™És9sÅ))*Ra$¾„ÄíÛ`TE Á#S )˜Ûßa:\Ø€‹É­‚æû÷úýœ/*âå›ÂCÑ×™ +)]#¥˜mÜÌõÏùâs ä4ZrʾЎ‹0ļ%HC0dÓqåt¢‘]æÌù4ÄsSæÜâxo '÷<¢E'ÁžG´dº³Î¹MîqÓ£À;8ËxA4{N”ÌñaU—äNã£^½;=õXæZÿ’ÇzñÑh’¢v5KLõ>'ÒH¼nãýnnë8°$ªNC ˜Éu9sE‰ Æy‚GºÀ÷ºbfAÓÄ’o÷‡áí Ip‡¢yN®àÝ<>ŒìkÄhÀ!( ôäĘMÝn†ìêS}zx‹/
+!é% ®æy1<±Íœ¸bj8}ëô˜mùÔ@SjäÄ©ÔÀ©‘ó¾K­ÎõÝHöàúlàÍ{'s±OlCøÆ%*nåùÐë˜24ö*¾~` z¥Äg4”éõJ9yN¬Ž]Yj`Áu¸õ¬’
+
+M´ÿgäDü*eᛎ‚K‡s%óþêLc™†o0 Xвd¾<O\RÉ“pAûÆåEÁíö l`Núê%o—)qõ¸r—*0¨Óû]ªà™)Wræ‚J/p
+²sžŒGµšÂyñ] eNÝ/p'îtÉßÄ­¢»ä±bÛšäÇ3SòçÌéäÇ3SòçÌùäÇsSòÜl—b(ÿ—Ðña . ÌÁ¹†V*4ÇÑRÅ.…õ`£LƒfJ©<lÖ[Q)á™ A¸Ô%s0Ø4ˆ*«šÙ<½ìCÉ 6­¡¼Jn|WYô¹5»#Ï4t\8g^à
+æès·qÛ$Îá\X)¹ßŸ•|:N3qòâNÒ»\@÷·êr!ïo5 xfÊ…œ¹z4¼£pðÌ{Wã:<3¹.gR•‘ŠïZÕ•‘¼kÕtÁ3SÉ™óeÏMe$ç~}|¸Ü{íH¨>62êQ¿¼ÀP[±8_ð½¦R¾½¦Ò…
+­-Ij\‡g&×åÌ5wõÐ¥ºI&ë(53Ç ‘iŠÉÃm<U|ºVx¤ñ Å]œ˜Ô újPîx¬s ÊzØnQêå5Ý
+«K”Ùö[]¢à™)QNl¿E¤.ñ­©’óŠÖTëï%âK¥Ä/KMg>´Mý:ûÐ6ù è|ö€ÛôèÝ5^&%-¾ W’´E®yIK
+ó`t¹Õ¡lyõ0ü6§h¡bS
+endstream
+endobj
+16625 0 obj <<
+/Type /Page
+/Contents 16626 0 R
+/Resources 16624 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16529 0 R 16534 0 R 16535 0 R 16536 0 R 16537 0 R 16538 0 R 16539 0 R 16540 0 R 16541 0 R 16542 0 R 16543 0 R 16544 0 R 16545 0 R 16546 0 R 16547 0 R 16548 0 R 16549 0 R 16550 0 R 16551 0 R 16552 0 R 16553 0 R 16554 0 R 16555 0 R 16556 0 R 16557 0 R 16558 0 R 16559 0 R 16560 0 R 16561 0 R 16562 0 R 16563 0 R 16564 0 R 16565 0 R 16566 0 R 16567 0 R 16568 0 R 16569 0 R 16570 0 R 16571 0 R 16572 0 R 16573 0 R 16574 0 R 16575 0 R 16576 0 R 16577 0 R 16578 0 R 16579 0 R 16580 0 R 16581 0 R 16582 0 R 16583 0 R 16584 0 R 16585 0 R 16586 0 R 16587 0 R 16588 0 R 16589 0 R 16590 0 R 16591 0 R 16592 0 R 16593 0 R 16594 0 R 16595 0 R 16596 0 R 16597 0 R 16598 0 R 16599 0 R 16600 0 R 16601 0 R 16602 0 R 16603 0 R 16604 0 R 16605 0 R 16606 0 R 16607 0 R 16608 0 R 16609 0 R 16610 0 R 16611 0 R 16612 0 R 16613 0 R 16614 0 R 16615 0 R 16616 0 R 16617 0 R 16618 0 R 16619 0 R 16620 0 R 16621 0 R 16622 0 R ]
+>> endobj
+16529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.11 758.747 169.058 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+16534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.157 734.529 139.12 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+16535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 709.761 252.372 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.534 697.526 156.497 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 686.095 140.492 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.186 673.309 145.134 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+16539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.75 661.277 191.698 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.094 649.168 212.042 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.495 637.66 188.443 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.839 625.551 208.787 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 613.443 183.727 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.123 601.334 204.071 611.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.62 589.225 158.568 599.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.852 577.116 160.801 587.035]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.651 565.008 140.6 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.21 552.899 131.158 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.384 540.79 153.332 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.383 528.682 153.332 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+16551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.21 516.022 138.158 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.252 503.864 209.2 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.997 492.356 205.945 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.281 480.247 201.229 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.62 468.138 158.568 478.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 443.244 202.413 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 431.261 177.944 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.845 406.918 232.808 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+16559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 395.486 146.123 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 382.826 196.432 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+16561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 370.592 202.413 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 346.375 202.413 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 334.391 177.944 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.019 310.049 252.982 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+16565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 298.617 146.123 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 285.957 196.432 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 273.722 202.413 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 249.631 175.765 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 225.965 146.123 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 213.305 196.432 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 201.07 202.413 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 176.853 202.413 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 164.87 177.944 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.176) >>
+>> endobj
+16574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.796 140.527 233.759 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+16575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 129.095 146.123 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 116.435 196.432 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 104.201 202.413 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 79.984 202.413 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+16579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 758.195 428.185 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 733.852 434.166 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 721.869 409.697 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.235 697.526 482.198 707.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+16583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 686.095 377.876 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 673.435 428.185 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 661.2 434.166 671.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 636.983 434.166 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 625 409.697 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.084 600.657 459.047 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+16589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 589.225 377.876 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 576.565 428.185 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 564.331 434.166 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 540.79 377.876 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+16593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 528.13 428.185 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 515.896 434.166 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 491.679 434.166 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 479.696 409.697 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.667 455.353 474.63 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+16598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 443.921 377.876 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 431.261 428.185 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 419.027 434.166 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 394.809 434.166 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 382.826 409.697 393.238]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.05 358.483 468.013 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+16604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 347.052 377.876 356.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 334.391 428.185 344.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 322.157 434.166 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 297.94 434.166 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 285.957 409.697 296.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.926 261.614 446.889 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+16610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 250.182 377.876 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 237.522 428.185 247.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 225.288 434.166 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 201.07 434.166 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 189.087 409.697 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.1 164.744 467.063 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+16616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 153.313 377.876 163.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 140.653 428.185 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 128.418 434.166 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.913 116.31 386.876 126.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+16620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.296 104.878 354.259 114.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+16621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.087 92.092 407.049 102.558]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+16622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.296 80.661 354.259 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+16627 0 obj <<
+/D [16625 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16624 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16721 0 obj <<
+/Length 3531
+/Filter /FlateDecode
+>>
+stream
+xÚÅKs·Çïü{$Ë!Œ÷CèHräR…¢Sq)>¬È•È
+IÉËU\þö鞌€á<°‹Îò´*j‰ЃnüL7ùâã‚/~8úþâèÛ—^-< ÖªÅŇ…ãÌ[»pA2+W‹wǯ~zþâ_'¿^ü¸ÐÒ2¡üjþG/.Ž~;ðs¾]Þ3/õâòîèݯ|qÿ÷ã‚3üâ÷æ›w m3M{·‹·Gÿ8âi·´Iº8sš¶‚ñدOþ͹ú´¼zÜ!<“Ú6ß—vª 0ÌÐñs…ä,(Ûß}@*ø-¡Z0ËUŽÜ,×WvùùóŸô–¹þØÂÏ8Z¼;•Î 'Ú/lM¹8…Çá”[œ
+É#ÀçÃéÀ„‘#‚… Á ¡†ø°Ú ØŒkÆ•$@
+n™“2g^­>œ(~¼ür;ÄVŠî)ØÊ2\ŸèÿÞ\®Ï9Õ†ynÛ§à{˜]Ï=U¥ò§Ê{ϳÀ¤†™¬)|ZrÊ”øB=3:CʼþôPä
+V÷\Á@drwÓÁ÷=M–,´T`ºzf4]ÊÜ!ŽÈ©8â â‡_Ž Ž@CFø’8RìâHʼúã~yws9ÀÕœY-(¸Z1¥Dν]¿ß#a™ÜyÚZxžTý´Å–ôäÚ§-³¶³bÚîéóÖY¦C 0´¤â0ÞŸH~|»:æ¸h4îñhø>h­†.‹zĆD(YËë‘Ñ3æ¬p[̸ۙ7ê†Ã]â†I€_¾NÖ8ø÷¶%îÛYt{óþÙ³/ Ì
+®†¡ú;üÔ I‚4Ž9ræøS‡y ‚‚`Þ¸ÞX·O}Æ;…Áa;ãÝH¬9„ȳÒÞÁPD-é`W"ò˜1ä§L‘çËM' ¨w
+‘‡-9ãJLWÏŒ¦K™T"¯`³lø$yØÕ%"¯Ù-0)óæ~ˆ)𛞂)ÓÂçÌtq/‚ù¿³Ç°ŸS:Å4O¢Dä0Ûi›1‹=ÞTîLŒ úQ=g±­DÁœ­&Æ)›!o?]¢œüÏ
+¶÷rwmm¬cF
+Š9 -))Kæl=3ÎÙ”yø‰Å¥…¢0´$ÅSmM ªm® ¼Å]â…ÕÈÎ SfÖƒ£¦àtùrÅÉ͉Qv9†`sb̧` 7'Üíæ$ÃNnNíæ$êøsw}€ë`¾Ù[¶7ém%N=(M@QoMÊõµ× Žâ4
+[r®H¨Ô3cÐO™{ •=C¾†-ª·[²%;dk¹yÀ‰ö<‡àä 2¶DäÕ#ãò’1ïWCP©™ä–*-Äe›C'b®@ÁQ€ñNÌ»¸;ó†ØìÎaFÃD±u×yÑW %mT‰³Ô3£³¤ÌÃkKm|sO`<hIiýÿЖ%ί-ìV óCCR•hËzdçü)sÆùë¡ÑùShó׃£ó§àì°}Àÿ'­ ¬ênL[A‹- é
+-w+h3줠%@¶‚6cŽL6ö…˜D
+öŒžâò²E—ÇõȸŠfL l«¡yñÀ9
+¬²ÍK¶Ó²°ÆqgvötåsžBËbKÆ—hYfœ¶)óðZVY膣xß [ÒN?Ñ9©ÒvGZRÖ–xa5²ó”9ë…õØè…)6•CŽ8)*•r°!£•Ø’4¥¢’€»•vRT [Q™1GŸ:DJ)5Ö»mèJ±û©;XiÅè…Ö!NI•P°¢8êÖ¸.‰øõÈñä¡ÏHŒäVLqü,RwÕÈh·y@'}`\¼é/›TWŒKKƼ?üøËÝðI‰XéXo ›ëõjyõ0Q!j
+¨åL÷¨¨´xµvŽ0ÒÙföÖ{
+¶äDIˆ!`¶®’1/*¥Õ°£•Ø’ýz‘{àRi°›–Àó¡!JDe=²óü”9ëùõØ­ç§ÐYϯ‡¶žŸQ!;äü“BVjÞ¼›Z/d±%å}¡%àn…l†²ÈVÈfÌñ™æ`Ϻ“€ëðÖÄåÜÑÉ&¹‡­:W
+Üáö¹E
+ºÿö-Æ7ëížJa™r!%—åõĸº%ÄCŸJˆÓÒR¼”‡-q[òR3Z.ePB‹ i’e1¡!U°Ö#ãBš3/¯WW_nW#—~$cm.ýúƒÍnüõîšLxÐ>šB“ K–.´ÌvâfL*A[îõ¢®(F°%§ì Z\ûëÒe£BCvú6úa5²óÃŒ9ï‡õàè‡)¸ù®wy›ûV›y»•—ØÒ× Ø9yIÀÝÊË ;)/ ­¼Ì™ãÏ=`>"7Xæ{CÝSåÁÌå><a9̧! [ÐŽ*ºÌ­&ƈŸ}LŠ^V™% -uY²Ó†«gFӥ̪¼
+4‚´\`¯å‡ÊI{å ÖÃûU±©¾b’ñæ„É+&k=Ù’T¦RN3Õ/M5òà=,Ó4£…}34ÚÑ'¯¹gJP€µ€GÎ{àýcÉsx½‡¯r„JI)<”÷¡ |•Â÷ù-EÉ,|J»gùªJÍ×™®º”TgºÙòUéê™Ñt{–¯Rû&‰w«LuQ§n™I‹:Í,3õиΤÐá7»•¯6e³ð9ØH÷ÊW/nÖMö ”«›å`kïwv˜ú"VÑaæ gE‡!`¶³oá,Emê guÆ{ŠÂYÑûëËIEïÏËIMz?´õþ :íýÐÖû3è¼÷€[ï¯Ø5
+ûg ?ɨë¬FN“€-¬”ª7ܯYEšù°»@«¯Þ'ï|Å°8y ˜íä͘Tê¶Üó« ju¶K jîº<ºb}9¬èŠY9¬W$ ¶®˜Qç]‘
+yÍKMp+53ðسÇKgNB ( eo¸ã²—¹@Ö¤êLÛGöXÄUxÂsÔúšT]K‹RMGÿzfŒþ)óÐç¨FPýŽÂt0¡°øEéê™Ñt)óç¨õE¸º¥&-Â5·ÔÔSãR“RGŽR,º5Ó®P„œ9±¼y¬úGÁõ“%rl—hd`Ïfwv—úbÑ]f«–Eo!@¶Þ²gÕ2¢3ÔúÚZéÒÚZ»ËL_yŠZ_+ú~VkÆ÷ ¨­ïgÔIß'`¶¾Ÿ1g}Ÿ€»õýÒcãî?)l뫈Ea›U›¶àVØfàaK@m…mF9DêTƒ²hbffãq5­°€( Xù&]ªW"n¯CTÌ—Řô¾ùú]¤®®MÕEê´6Õô*WÏŒ«\Ê<´œÖRÂnŠBNcK\øÓÕ3£éR&õ!êçÕ“ —›Oküú·/…X|;Þn£cóþpûGÿ¼ýFÖÉS_q½âygøé¾l>=_n–3Ý”|r›ùf³.hä‘x€€¤™ª*N©ÒÑþóÄA«ë×7›gÏ^m¾Rfz­víõ7ß4ËäÐ×Ö‡ï¾{܇ƒØa}r
+RòæãÍý¨.N„Ä€ƒ¼º[~\Íp½šâF_?ÜžÞÞl¶Böz”ýýÏo
+@–[G̯ ô ïòdþ·/.†T¢g9)˜ø2®Ñ9óÅßÞ\ü2{Bÿ¥>/îd±ê¼öÎbibû´Åê™Ñb)óåϯ_W̬:5»3Xšš=m°zf4XÊ|sv~ñêì5Å$ûáüì§!›A`§'ñº¾î4Ã`é·mK2güåìüùΗ¡y¿d—Þ×æ‚wOrÁ/þzþâl÷ÞƒÐâÆM…ÎËÑÐy¹¼ÞáÌý©ÎÆ÷”¤´y&ðzu»Z>¬†å›°š‚ëd3µ3îår}5kÜ·þ¼ž¶YuÊpg³4ex½z€5ýÿÖð‰4Ç#Æs\Rt
+endstream
+endobj
+16720 0 obj <<
+/Type /Page
+/Contents 16721 0 R
+/Resources 16719 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16623 0 R 16628 0 R 16629 0 R 16630 0 R 16631 0 R 16632 0 R 16633 0 R 16634 0 R 16635 0 R 16636 0 R 16637 0 R 16638 0 R 16639 0 R 16640 0 R 16641 0 R 16642 0 R 16643 0 R 16644 0 R 16645 0 R 16646 0 R 16647 0 R 16648 0 R 16649 0 R 16650 0 R 16651 0 R 16652 0 R 16653 0 R 16654 0 R 16655 0 R 16656 0 R 16657 0 R 16658 0 R 16659 0 R 16660 0 R 16661 0 R 16662 0 R 16663 0 R 16664 0 R 16665 0 R 16666 0 R 16667 0 R 16668 0 R 16669 0 R 16670 0 R 16671 0 R 16672 0 R 16673 0 R 16674 0 R 16675 0 R 16676 0 R 16677 0 R 16678 0 R 16679 0 R 16680 0 R 16681 0 R 16682 0 R 16683 0 R 16684 0 R 16685 0 R 16686 0 R 16687 0 R 16688 0 R 16689 0 R 16690 0 R 16691 0 R 16692 0 R 16693 0 R 16694 0 R 16695 0 R 16696 0 R 16697 0 R 16698 0 R 16699 0 R 16700 0 R 16701 0 R 16702 0 R 16703 0 R 16704 0 R 16705 0 R 16706 0 R 16707 0 R 16708 0 R 16709 0 R 16710 0 R 16711 0 R 16712 0 R 16713 0 R 16714 0 R 16715 0 R 16716 0 R 16717 0 R ]
+>> endobj
+16623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 758.07 202.413 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+16628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 734.529 146.123 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 721.869 196.432 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 709.635 202.413 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 685.418 202.413 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 673.435 177.944 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.294 649.092 233.256 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+16634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 637.66 146.123 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 625 196.432 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+16636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 612.766 202.413 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 588.674 196.432 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 564.331 202.413 574.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 552.348 177.944 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.675 528.005 215.638 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+16641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 516.573 146.123 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 503.913 196.432 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 491.679 202.413 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 467.461 202.413 477.999]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 455.478 177.944 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.849 431.135 235.812 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+16647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 419.704 146.123 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 407.044 196.432 417.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 394.809 202.413 405.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 370.592 202.413 381.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 358.609 177.944 369.021]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.829 334.266 226.792 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+16653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 322.834 146.123 332.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 310.174 196.432 320.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 297.94 202.413 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 273.722 202.413 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 261.739 177.944 272.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.392 237.396 250.355 247.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+16659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 225.965 146.123 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 213.305 196.432 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 201.07 202.413 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 176.853 202.413 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 164.87 177.944 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.795 140.527 235.758 150.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+16665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 129.095 146.123 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.484 116.435 196.432 126.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 104.201 202.413 114.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.464 79.984 202.413 90.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+16669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 68 177.944 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.92 745.961 449.883 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+16671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 734.529 377.876 744.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 721.869 428.185 732.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 709.635 434.166 720.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 685.418 434.166 695.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 673.435 409.697 683.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.094 649.092 470.057 659.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+16677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 637.66 377.876 647.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 625 428.185 635.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 612.766 434.166 623.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 588.548 434.166 599.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 576.565 409.697 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.177) >>
+>> endobj
+16682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.398 552.222 457.361 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+16683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 540.79 377.876 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+16684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 528.13 428.185 538.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 515.896 434.166 526.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 491.679 434.166 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.749 479.696 409.697 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.572 455.353 477.535 465.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+16689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.928 443.921 377.876 453.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+16690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.237 431.261 428.185 441.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+16691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.217 419.027 434.166 429.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.173) >>
+>> endobj
+16692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.644 395.486 375.607 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+16693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 383.378 368.892 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.109 359.16 399.072 368.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+16695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.109 334.943 399.072 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+16696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.109 310.725 399.072 320.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+16697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.287 285.831 388.25 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.732 262.291 422.68 272.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.766 250.182 413.714 260.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.214 238.073 429.163 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.066 225.965 398.014 235.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.525 213.856 409.473 223.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.282 189.639 411.23 199.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.82 177.53 411.768 187.319]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.441 164.744 387.389 175.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.431 153.313 391.379 163.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.822 141.204 405.77 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.762 141.204 425.71 151.123]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.36 129.095 406.308 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.3 129.095 426.248 139.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.77 116.987 431.718 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.71 116.987 451.659 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.5 104.277 418.448 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.197) >>
+>> endobj
+16714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.441 104.277 438.389 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.814 92.769 367.762 102.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.601 80.661 393.549 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.139 68.552 394.087 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16722 0 obj <<
+/D [16720 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16719 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16807 0 obj <<
+/Length 2521
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[IsÛF¾ëWà(VÚ½/®¹(Ö’¤¼h(ÕLª<9Ð$D£B‚ ÆR~ý¼F7( Àh%s1]$ô¾·õ[8šG8º=ûááìÍf‘FFJ=<F
+#-e¤ E’D³èóùO¯®ýúðsÄ©D„3øÓêg×g¿ŸøGdGBk¤)¦Ë³Ï¿âh¿ýaÄŒŽ¾O.#.½Etö¯3¼Ï{lŒ”Ò’ \ò•m²ÑÃç²@°D‚Éây*O±
+C7Ûtš'«Ô
+èû:_e-²²N.aã\ÌQ^LÖ›£Ňx9ž¤ó6oäº+ò·4ÎŽšµ¯™#¨
+YìQï.~<4®>ƒ€Mˆ‚’wH¿aŠ!!½÷×w—ãˇOãBÐ …(”†UU<þc¶šÌšŠëo2âX M†äPЂaŽ$¾‡üºÚähº^·©–óÃj×ÚˆõeVœÀ£Î3kìðíHCGLÃú{¨ ´£U·ï“òdÑÓH½H€¦ARZuÅ»‘ÀpBoãüÝótߌ¸€Šþ÷mœNŸJüîÓOmè¬ÃIñà›d“_µ,T-Ž6Qœ®·M¶€ºT³ˆ1Æf ¨6•¥ASïºL׳67|J˜À¶áã¦<™Í²ž*»€WBÃÐ
+¸ÑŸ+;KHXI7ÅLDmÒ"ƒ*p
+=1u”0ñx2ë«W†‘dú`üpÔ1‡P…œIÁC:%‘ÝQÂàj'NwÆ
+6ìä~ŸGƒw‡¤LmÓoX€¬l)AGããtns§Šœ“™¹ 6É:^
+QsÈÂAùfm@-d9Ëš ©BRV
+ÓDi2kª6˜F˜éˆCZçê?Ž‘¢Ž¥ª¼|S\û‰³8¶eûƒ^
+“)>ˆw€$ŽàƒŸ¨šÖOsnçºZ„`ÝÎuËÛ¥ßïø=ÙçijB°”ì7/¥aó¦ó«u슣Ü]ñ}sCHEˆ„HQ€·4ý«ÿtOTØSàW»úªÓÞä4Dá„C‘/á¥Á°öíQ#Æà kËPK‰CQîXWÛ´¿a¡z655fÐпÜUjª#ì»:vÃ˃BT$ [Jàêelš‹˜n´è÷® Ëé¦xiøxŽ
+øŽ‡^A¾H{ôº€kkÊå©û]¥»»±ó&¡TÆ#j«&:¨½¥vâ(Áÿ}Øœ<5™IB+mB`r47ULwxùÅ_¢»°E(9øhl;è˜Øúˆ„б¥ÄI9:Jþ´>éwNö5¼W“µîOǧxÇ–•Ë,»^ÄË8ÍÛøÑ]Æ ÙoG9ñ7ðZ/Jv·ñq¬æ ’½ÁÅL€µžM&ŠšêZoÖA8}8'$¤ž#*µ/6è²—Qƒš*ÊŠ >RÊC¦ÅbâÉO¿”Íüot¢Ó
+¼T,°¿T‘ o§ó#!ä‹á°ö]?£*°3—]wúhzE׎ hŸt hÐåKYIíŠHq»÷ДÑ:ôÿ
+endstream
+endobj
+16806 0 obj <<
+/Type /Page
+/Contents 16807 0 R
+/Resources 16805 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16718 0 R 16723 0 R 16724 0 R 16725 0 R 16726 0 R 16727 0 R 16728 0 R 16729 0 R 16730 0 R 16731 0 R 16732 0 R 16733 0 R 16734 0 R 16735 0 R 16736 0 R 16737 0 R 16738 0 R 16739 0 R 16740 0 R 16741 0 R 16742 0 R 16743 0 R 16744 0 R 16745 0 R 16746 0 R 16747 0 R 16748 0 R 16749 0 R 16750 0 R 16751 0 R 16752 0 R 16753 0 R 16754 0 R 16755 0 R 16756 0 R 16757 0 R 16758 0 R 16759 0 R 16760 0 R 16761 0 R 16762 0 R 16763 0 R 16764 0 R 16765 0 R 16766 0 R 16767 0 R 16768 0 R 16769 0 R 16770 0 R 16771 0 R 16772 0 R 16773 0 R 16774 0 R 16775 0 R 16776 0 R 16777 0 R 16778 0 R 16779 0 R 16780 0 R 16781 0 R 16782 0 R 16783 0 R 16784 0 R 16785 0 R 16786 0 R 16787 0 R 16788 0 R 16789 0 R 16790 0 R 16791 0 R 16792 0 R 16793 0 R 16794 0 R 16795 0 R 16796 0 R 16797 0 R 16798 0 R 16799 0 R 16800 0 R 16801 0 R 16802 0 R 16803 0 R ]
+>> endobj
+16718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 758.747 142.124 768.374]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.663 746.792 147.611 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.209 734.836 150.158 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.495 722.204 190.443 732.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.18 710.926 160.128 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.305 698.971 196.253 708.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.027 674.46 163.975 684.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.463 663.105 193.411 673.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.183 651.15 201.131 661.069]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.585 638.594 169.534 649.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.442 626.639 188.39 637.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.405 614.684 205.353 625.203]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.346 614.684 225.294 625.203]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.083 603.33 169.032 613.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.621 591.374 169.57 601.293]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+16737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.031 579.419 194.98 589.338]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+16738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.568 566.787 150.516 577.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+16739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.762 554.908 181.71 565.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+16740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.367 543.554 190.315 553.472]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+16741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.426 531.599 170.374 541.517]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+16742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 507.688 140.492 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.15 483.226 182.113 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+16744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.118 459.191 153.081 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+16745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 435.957 147.459 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 402.745 175.765 413.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+16747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.413 379.386 143.361 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+16748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 355.476 122.685 365.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+16749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.744 343.521 132.707 353.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.379 331.014 166.342 341.354]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.669 319.61 152.632 329.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.669 307.655 152.632 317.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.393 295.7 144.356 305.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.379 283.193 166.342 293.533]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.896 271.238 161.859 281.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+16756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.185 247.202 176.133 257.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 223.969 122.685 233.888]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+16758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 200.059 122.685 209.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.722 176.148 122.685 186.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.449 152.238 158.398 162.027]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+16761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 127.776 177.944 138.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.996 103.866 177.944 114.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+16763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.316 80.507 149.279 90.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+16764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 68.552 183.727 78.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+16765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 758.195 407.518 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 746.115 413.498 756.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.181) >>
+>> endobj
+16767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.332 734.285 410.28 744.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+16768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.068 710.926 400.031 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 687.016 354.438 696.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 663.105 354.438 673.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 639.195 354.438 649.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 615.285 354.438 625.203]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.475 591.374 354.438 601.293]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+16774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.202 567.464 390.15 577.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+16775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 542.877 412.252 553.472]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+16776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 531.599 372.245 541.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.571 507.137 447.534 517.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.282 495.733 372.245 505.522]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.267 471.823 377.23 481.611]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+16780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.003 459.867 348.966 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+16781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.321 447.912 394.284 457.773]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.64 435.406 376.603 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.326 423.451 410.289 433.791]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.156 411.495 374.119 421.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.498 399.54 368.461 409.952]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.828 387.46 391.791 397.997]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.162 376.181 369.125 385.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.645 364.226 373.608 374.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.987 352.271 367.95 362.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.635 340.316 377.598 350.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.575 327.809 379.537 337.988]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 316.405 368.892 326.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+16793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.929 304.45 368.892 314.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+16794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.156 292.495 374.119 302.356]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.9 280.54 408.863 290.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.938 255.953 407.886 266.49]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 232.042 366.408 242.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+16798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 199.382 412.252 209.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+16799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.289 175.471 412.252 186.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+16800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.162 151.687 484.125 162.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.91 128.328 370.873 138.116]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+16802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.654 104.417 371.617 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+16803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.162 79.956 484.125 90.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16808 0 obj <<
+/D [16806 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16805 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16875 0 obj <<
+/Length 2756
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\]sÛ6}÷¯à£5³F‹ï¼e7n§f·›xº;“íƒ"Ñ6§¥%©6Ý_¿ ) %R&b÷)ƾ÷à~œ €¡ÉCB“ï®þzwõÍ·†'†X¥xrwŸhJŒR‰¶@Kî–ɧëïÿþîöß³_î~H(ÂÇ_ ÿâêöîê¿W ÿ?MØÞ„1Ä€Hë«O¿Ðd‰÷CB ·&ùÝÿä:’éí­’Wÿ¼¢‡Ëò`Y–mÑ´b„¶ëúÇý(å›ùò]Z.ŠÙ “×Ù¶ÚoÞü<Óôz^Ü~©ŠÃÿú‹_d½ºâ¡Yæ‡ï®’O7 Íµ•Íß×èÉ ³Ä‚Ä?0jk´"/}5–p\¨–0 ç|E>íÞÑPî áÿBC5äìäuþp ˨$ZŠ¸Œ"„Ëbá÷û†i¢$oˆ0±iW#hÿ€´¿-ŠÛUºNóªôËêû¹Ó«êXX”¶çeÚXX¤Ùo3Üœ´oo(¡Ú``Ì2=io€hU[’¬Á^Ϋy³9ŒX­CÞÏ‹òq¾Z¥Å€ŸBŠù~*­ˆ°6‚ŸÎ¯‘ïwù¢( Ò
+8„ÜbÔz^92 Y¸ã¯Á«bðŠ–¨iÝÜdy•=¸ÜÅ«ŠË9T†¸Oq+\kãÒw€m%Ʊ¥3N¯O1n-1øÃ
+ 69‘p—
+4¶@YÃç›|±É«ìa·Ù•=´cKãXc# +A¨à!úéí¶X>°¥FÀµ‚(ÃB܃2E91v\Úîqú¾§O3\f‚[‹˜R“ RjoH‰Æ›Åf—WÞYE€w"û­‹¼]µy‡„ ¸4t†¤ýT#Œœo`#8’J l:GÎèÄCE›6z¢”B%RJ"ŸTñ)±¼¶¬)JÕ¼xH+²ØnXe:´JW¥Ã úÞŸß»ýÞ ˜3,´Ö·G>ª.´CCYO½±˜¤”'!©™¦N(;g u>Zòˆóå2]^¸èK4…XTÒ®~|®¡rt•ÎËôX†¶:á Ô¿j¼Ýê9N/œ@m»ç‡?°¥k÷8ÇšÄP‘.0¥Õ¤¨Am`kK š¨YÌ‹eÓ,P±PÞ)E¹ºYeU:Ã6ACŽZ3j×›*ý*ºÞÊøîq—ÿÚn¿
+ú~ƒ×Çâ9íi¹M8Š¥ÅÄ}VP[h©®ØûT=‚10<© AŸ”ÊR¹ž #·ùC–§CÙŒJÒ‘ÜrM„T1¸EK u0¾tÛ'J3’¹^">
+ƒ éG¬´Œ£¶°1ˆEKT<I%ìi‘æ‹t_¤ 7Ñež½H晈ÌNÁvšºj˜s–4­ºúìŠØê mw3Ôe×íÏý˜•ƒŠF¥âvƒS… ×U
+ 17e(gX,t PlPšë´¬æ}©+q¢*ªDýnUµ‰(ep·;»¾Ê>ŸÙ
+E‹â&ZÝ[á?U\?#…¶Ñ¿˜W½!\̺GŠ®ÀL
+Z ZÖ–´Ü_ånÝñðYÞW+¿—Ž
+¢˜‹arÿѽQdê)uòE¡Ôé·vPxÇ1¼˜ˆnÁ!#À>ùN0;ª#À
+¦qKuˆû”&“øŸ¦*8‘F£l±SiTÐÌ¥»£å1pqÆpD¸Á]?×ö»]0öyÃ!(òĤ;@×>·¶}?³YowUsÍjP4wŠFï­$ç‚Hœ’…ÖþÏ)+Ò¸©µ%ÞJ».!þ`hø=:"¨;á™d£Ô”&Ùh‡·Oܲ<«žÉ4¿âQ˜FK‚M¦Õ…L wÄiá^î4àtÞêΕ‰*nb7x·ÐÕŽ
+‡YL2DÞk×Z?º+^vI€%bÄXÿøÏ“ÉØTµ’Óã íH5:¾¦£¶ñuˆ;&¾¦#·ñuˆ\fÿsãtúÜø¢Ò(Eˆ/êN^$¾ú@&½2ã–#'‘ÌÜkêÚ’jkf–/ýç&_ü»±ú“5á/û‚¥M| ésN*ü ÅI´ä"jè;›i@A d¡ýG‰rî^ÄîÖŸÓvJ Šš—TzçØÆœ¢\Ä`Y4¼ýŠ'Û¦«æ´µ/–îÝç©COçÄdïpj`Å;`»ö®Hq»àË‘wM|¿Ï·¹«˜¿5_˜=…fãÝmûú»Q2 XTwl’«€%\×–hû$rÆc]ndóMÌËEðY×µ{EÍc¸Ž–Xûv•½')ÊŸE
+ЈcøÙ½£gŽ>àpí:ò죪·«ì!O—ß΄¼.ÒÎÅþáaa¼HN­áý|µÚ,^e§ÝW_üýßÌßú´Û}¿6"ë˜ÿˆOEÈ:gIµg%c².tu²ÏºÁw4²{HîéP—ÓGÝE‹AZÒíÉÎ(ú¦C7ô"7ÆxôT (ZM~ÄJ1_½ŸoOFè¸YhLŠ”YþkŸ€µ„â>i6ñ[w§[5nSóoÜ´ß¼ÁÊúþ5‰º.ù·p<6z…>ºK]Ä÷|Má` Zl༠ýò¡òœ
+endstream
+endobj
+16874 0 obj <<
+/Type /Page
+/Contents 16875 0 R
+/Resources 16873 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16421 0 R
+/Annots [ 16804 0 R 16809 0 R 16810 0 R 16811 0 R 16812 0 R 16813 0 R 16814 0 R 16815 0 R 16816 0 R 16817 0 R 16818 0 R 16819 0 R 16820 0 R 16821 0 R 16822 0 R 16823 0 R 16824 0 R 16825 0 R 16826 0 R 16827 0 R 16828 0 R 16829 0 R 16830 0 R 16831 0 R 16832 0 R 16833 0 R 16834 0 R 16835 0 R 16836 0 R 16837 0 R 16838 0 R 16839 0 R 16840 0 R 16841 0 R 16842 0 R 16843 0 R 16844 0 R 16845 0 R 16846 0 R 16847 0 R 16848 0 R 16849 0 R 16850 0 R 16851 0 R 16852 0 R 16853 0 R 16854 0 R 16855 0 R 16856 0 R 16857 0 R 16858 0 R 16859 0 R 16860 0 R 16861 0 R 16862 0 R 16863 0 R 16864 0 R 16865 0 R 16866 0 R 16867 0 R 16868 0 R 16869 0 R 16870 0 R 16871 0 R ]
+>> endobj
+16804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.818 758.195 215.781 768.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+16809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.818 733.978 215.781 744.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+16810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 709.761 252.372 720.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 686.095 148.589 695.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+16812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.626 661.877 148.589 671.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+16813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 637.108 176.635 647.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+16814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 612.891 176.635 623.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 589.225 143.854 599.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+16816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 577.116 137.139 586.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+16817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.797 552.222 181.745 562.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+16818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [103.493 540.79 115.456 550.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.712 528.682 128.675 538.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.408 516.573 141.371 526.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.418 504.464 135.381 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.418 492.356 135.381 502.216]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 467.538 157.788 477.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.195 443.921 131.158 453.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+16825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 419.704 147.459 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 394.886 157.788 405.275]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 370.668 157.788 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 346.375 134.655 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+16829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.692 322.157 134.655 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+16830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 298.617 143.854 308.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+16831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.176 286.508 137.139 296.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+16832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.901 262.291 141.864 272.079]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.672 237.522 176.635 247.992]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.346 213.856 176.294 223.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+16835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 201.747 204.26 211.608]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+16836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.346 177.53 176.294 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+16837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 165.421 204.26 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+16838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.346 141.204 176.294 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+16839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.312 129.095 204.26 138.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+16840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.195 104.878 131.158 114.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+16841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 80.661 147.459 90.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.91 758.747 370.873 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+16843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.818 734.836 397.781 744.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+16844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.721 722.881 423.684 732.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+16845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.422 698.971 384.385 708.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 675.061 379.212 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.264 651.15 379.212 660.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.199) >>
+>> endobj
+16848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 617.938 408.388 628.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 594.028 408.388 604.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.379 570.669 380.342 580.458]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+16851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.379 546.759 380.342 556.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+16852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 522.297 408.388 532.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 498.386 408.388 508.857]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.671 474.476 399.619 484.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+16855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.671 450.566 399.619 460.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+16856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.671 426.655 399.619 436.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+16857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.671 402.745 399.619 413.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+16858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 378.709 366.408 389.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+16859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 354.924 408.388 365.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.938 331.566 366.901 341.354]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.069 307.655 381.032 317.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+16862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 283.193 408.388 293.664]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 259.283 408.388 269.753]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.421 235.324 427.369 245.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+16865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 211.413 389.541 221.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 187.503 389.541 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 163.593 389.541 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.578 139.682 389.541 150.071]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.953 115.772 417.901 126.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.157) >>
+>> endobj
+16870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.933 103.74 423.881 114.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+16871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.445 79.83 366.408 90.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+16876 0 obj <<
+/D [16874 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16873 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+16955 0 obj <<
+/Length 2628
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\[oÛF~÷¯à£ ¬§s¿‹’Æɦh’®£.v‘ö•hG¨nKÑiÓ_¿çð¢j¨‘HyN_ f¾oÎeÎm†¦Ù}F³×/&ß¼²"³Äi-²É]f(±ZgÆq¢Y6™e/ß¼{yóŸ«Ÿ'ße’k¤€ÿêÿàâfrñ¿ ÿN3¶ƒ°–X.³éòâãÏ4›ÁϾË(Îf¿Õo.3©Q5Þ"ûpñ¯ º¿,©ö–å(1 5#´[׿¯ ½ÌË—Åvú·z }yß®ãöõEöñš{éXûó>»fŽ8®àɈSªÛÎÿ¸b겨% ½ðm‘¯n‹|ör¾àãÜç£-n€fóå¡ÖUÄ™®@Gê”ÚÀ4n§³C]1j‰Ô síâgÃZⲯ%C´¾Þ,óûb
+QH°VŽßpýù¼:’[ ÄóÖ¹E[ŸøîJPÐb€—CyHY
+^¨B ,ôh=Ø=‰·Åæìx;y² à:Eˆ@R±Ç7Km [:pÚêtòüöõÍ$´zHl†e«µ|ËÖ Võ5í?ߘ´ ÔAgÚ3cWl’OC&t„ eÄ"AÈ2b‘ ZÚ·o¾ýëˆÈ¡ãID„rékÚwïßÝʨ¿ŽŒË–BFD¢€TÓ>ŸLnß¼øqr“˜ܥ+*RŠ%mü÷‡›§sØf¤ó fêÅññ‰ÿÚ÷PQÍ~Æ Qªã¼êï³gïÖ³¡âZÙsÙÊ´§t +„j€„i;éézƒyûKW)̓ó£Zv&‰œÌXx&¤nåÜäÕôS¨¼†ØÌSâÄC±+N·­ja›rœ>¡n•$F¥Ð-
+'XÔꑶAÂaP3Z+òÙÙ ïr½D|áN‚Ît‚u1ÚD-]u-ÅrýùŠ·^ÝohðLâØ›ò(@g¤
+"îü%µ?ë­GÈy*Ó€F£XÖa"H¦m6YÌÚ(ôp~E†ûÑWz)ÄÛ{{§Ð¸a°‡€½À#lçðwÛ¢Š[ź\‚ÇuEœH .q¦ŠÇ¢]‡ ßÇ<l7< †$…e{ÔÉn’Éw’g1’HÅ6ŽðÊTÏ\a‘1á^¯qtÛ6-·÷áxƒ5~B‰Ó-íQNójw`ëêæ|O‹N™S!´Ê¤Å²;*ñAÑ£Uƒ¤º»oEY†ŽR„eu!—€ÕâåŸt
+UÕvœ ±þá?. ò¿_¯œö!ƒG <Þ‡ ž€ˆ1NÏØ9Ñ>'x‹v#xâMÉnHBÊqnÏÚºÑ>i27êBÑ]H†"ØLJM¤ˆ*DêkT ¡Ë¢P8ñ^…ñ6/·ŸòÅ¢(‡nV˜19æS9bêâŸÜAw&÷º³ìO´™ºŸêÓC]7žFÂå+4ž
+ÈEÔ­@!lmá T¤m°Êªuh?a%Ëb qW2æÖÓ 0û¹ºšÝË®§•e±q½T§0@Ò]/µ™oŠÔ箟!FoK.C«§D)xAL\Ë%á²AR]ËÕÝ\ë››ÁÞLÁ©$éSN×sÔY(|6Cð´õ…WÑç}XUƒåÀNZéÜx;a¾02…
+³ÂS:̬#ƒ!‡ÆVY“¬€$¬Ýe£4ÑÃ:e’©"ñnj–pßÌ—E¨@ålÆ4QÚÅïoLÃL7ñëΖfíåW(±zm꫇մš¯W½Ï£†¾ïS§GÈÃæbíÇñæb³Å¾’1Y8¬õ(aR/‰[K™Bãˆíf$ÇÜú
+ï¤éøh@šï‹ϻïR½pqÆ~Ðó2“¨€¤˜MôAß~®k¾ø\mÁ¯/š&Hd –¦±G
+ø¹<"ÉÝ }jayÐj$ TPqçQõ ¼ØæõØ7²ªÖjÄàòÄÅ
+Ý° ?1õÿjŒ
+endstream
+endobj
+16954 0 obj <<
+/Type /Page
+/Contents 16955 0 R
+/Resources 16953 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16957 0 R
+/Annots [ 16872 0 R 16877 0 R 16878 0 R 16879 0 R 16880 0 R 16881 0 R 16882 0 R 16883 0 R 16884 0 R 16885 0 R 16886 0 R 16887 0 R 16888 0 R 16889 0 R 16890 0 R 16891 0 R 16892 0 R 16893 0 R 16894 0 R 16895 0 R 16896 0 R 16897 0 R 16898 0 R 16899 0 R 16900 0 R 16901 0 R 16902 0 R 16903 0 R 16904 0 R 16905 0 R 16906 0 R 16907 0 R 16908 0 R 16909 0 R 16910 0 R 16911 0 R 16912 0 R 16913 0 R 16914 0 R 16915 0 R 16916 0 R 16917 0 R 16918 0 R 16919 0 R 16920 0 R 16921 0 R 16922 0 R 16923 0 R 16924 0 R 16925 0 R 16926 0 R 16927 0 R 16928 0 R 16929 0 R 16930 0 R 16931 0 R 16932 0 R 16933 0 R 16934 0 R 16935 0 R 16936 0 R 16937 0 R 16938 0 R 16939 0 R 16940 0 R 16941 0 R 16942 0 R 16943 0 R 16944 0 R 16945 0 R 16946 0 R 16947 0 R 16948 0 R 16949 0 R 16950 0 R 16951 0 R ]
+>> endobj
+16872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 758.747 140.492 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.572 734.836 165.535 744.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+16878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.389 722.881 143.352 732.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+16879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.697 710.249 131.66 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+16880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 698.419 252.372 708.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.534 686.339 156.497 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 675.061 140.492 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.514 651.15 145.477 660.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+16884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 627.24 140.492 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.818 602.778 215.781 613.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+16886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.817 578.868 175.765 589.28]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.669 555.509 152.632 565.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.669 531.599 152.632 541.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+16889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.118 507.011 153.081 517.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+16890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 483.778 147.459 493.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 459.867 147.459 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 435.957 147.459 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.511 412.047 147.459 421.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.198) >>
+>> endobj
+16894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.389 388.136 143.352 397.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+16895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 355.476 146.123 365.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+16896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 331.566 146.123 341.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+16897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 307.655 146.123 317.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+16898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 283.745 146.123 293.605]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+16899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 259.835 146.123 269.695]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+16900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.901 235.924 141.864 245.713]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.315 212.014 168.278 221.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.055 188.104 134.018 197.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+16903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.055 164.193 134.018 173.982]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+16904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.055 140.283 134.018 150.071]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+16905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.223 116.373 144.186 126.161]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 104.417 137.381 114.206]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.24 92.462 133.203 102.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.802 80.507 158.765 90.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.95 68.552 127.913 78.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.654 758.747 373.617 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.654 746.638 373.617 756.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.674 734.529 379.637 744.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+16913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.088 722.421 406.051 732.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.21 698.203 355.173 707.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.704 685.543 355.667 695.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.793 673.986 357.756 683.775]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+16917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.406 649.092 417.354 659.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+16918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.67 625.551 364.633 635.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+16919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.361 612.766 368.324 623.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+16920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.981 601.334 355.944 611.122]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 589.225 360.921 598.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.465 577.116 360.428 586.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.59 564.331 360.553 574.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.341 552.899 354.304 562.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.287 540.113 388.25 550.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.287 528.005 388.25 538.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+16927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.938 503.787 407.886 514.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+16928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 480.247 436.013 490.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+16929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 456.03 436.013 465.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+16930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.379 431.812 380.342 441.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+16931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.013 419.704 346.976 429.492]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.679 407.595 374.642 417.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.613 394.809 391.576 405.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.122 382.701 385.085 393.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.934 370.717 431.897 381.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.619 359.16 386.582 368.787]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.611 346.5 384.574 356.84]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.62 334.391 384.582 344.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.938 322.834 366.901 332.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+16940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 298.617 392.562 308.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 274.399 392.562 284.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 250.182 392.562 260.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.614 225.965 392.562 235.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+16944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 201.196 413.866 211.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+16945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.63 189.639 400.578 199.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+16946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.721 176.979 430.669 187.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.701 164.744 436.649 175.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+16948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 140.653 407.518 151.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+16949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 116.435 408.388 126.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+16950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.948 92.769 362.911 102.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+16951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.338 67.951 396.301 78.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+16956 0 obj <<
+/D [16954 0 R /XYZ 70.866 789.024 null]
+>> endobj
+16953 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F11 6621 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+17046 0 obj <<
+/Length 2458
+/Filter /FlateDecode
+>>
+stream
+xÚ½[[sÛÆ}ׯÀ£8©6{¿h&ÉDÎ8“¤©£¦í¸y HHâTYŠëþúžÅ. €‹ôÁ†Ç‚Îw¿î‚fO;»úæþêËwVd–8­Evÿ˜J¬Ö™qœh–Ýϳ×ïúöîï“ßî¿Ï$ׄI_mþàêîþêßW ÿO3¶‡°–X.³Ùòêão4›ãgßg”g³OÕ›ËL*AT…÷’ýrõ—+zÈ–Tl9JŒ´f„Ö|ý:1ôzºù6ßÎþTqÈožv||øî*ûxývl÷ó
+&fø_' /=Á×2Ÿ€½ÿkŸ1E„…ú© ÜésꇉÝ^÷Ç:gÌB;‰:¨—]RŠ–”ÒÎZBzm”o¾XF¤¢Š#3mà:A*j‰Ô‰áÍ@³Û‡¸l & Q Ûð¡_¿þpÌ»uÄ
+—iM@—³Ž˜T<
+ÒsðóÿQoÿ>Ȫ&\ mú²x*ºpZ­ mC ‰¹B@ÄÚ
+°«Ÿër“Æ
+_óy• ‹q'±Ut:
+HûhIò#¿º¨ûëÚ »®í‡EçÆÍéÓM[ö?u®G]|?_CÌ_—ë4„¼˜§”õI\,Kp‚?™Ö
+ºtIªIòæÁû@ö}ç)÷ B÷BÁ!´C Éý|>-gϪ¡MÙT¯¬IÕ1Û¡Š“ki†[EÅÐQ¬$EÝ°Y÷¬ù‡Çõù`¸è&–!àno¿y}¼+ÊÝ­º®»V´;ýôØ9ðøœ_GMa˜³¡b¾/óµËU{í;A1츖m—±úE‰B½TþtA›¤ú…>\z$…VÒÖ¹¹§¹ÅÑQæ[gúó/$Á|4ÿx:&êóy>çEîşÿèÜ’”ß&$M‡>YQá‘Â^ýrþ]µÄoÄÉjýæƒþõ/ß1™ù- Z®Jwh?Y}'ØŸw‡— bf´ûw†2…ù€·[ÊC¦¾øb "=õÕW¨ìTJt×ÇõH!¤üµ´îúw1Ÿ··½µ`gxÖ½µàgíÓ#Q Þ_ÚðxyÍîÖ/þ¸˜Ý^¿ï~åö¶ý»chw/Î_>Ž%YÝi uÚlaeHÖÓÑþ‚M„°aDbK'l–¹jŽ]/
+6E«‰å¬Iq[‡Lñ.çiÄÜÊÑgî¸
+LÅÎ9ˆcA=‰=…l@’nÏ«mIfë®9ˆÉ£KàÙŠµ>bhMŒC
+
+endstream
+endobj
+17045 0 obj <<
+/Type /Page
+/Contents 17046 0 R
+/Resources 17044 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 16957 0 R
+/Annots [ 16952 0 R 16958 0 R 16959 0 R 16960 0 R 16961 0 R 16962 0 R 16963 0 R 16964 0 R 16965 0 R 16966 0 R 16967 0 R 16968 0 R 16969 0 R 16970 0 R 16971 0 R 16972 0 R 16973 0 R 16974 0 R 16975 0 R 16976 0 R 16977 0 R 16978 0 R 16979 0 R 16980 0 R 16981 0 R 16982 0 R 16983 0 R 16984 0 R 16985 0 R 16986 0 R 16987 0 R 16988 0 R 16989 0 R 16990 0 R 16991 0 R 16992 0 R 16993 0 R 16994 0 R 16995 0 R 16996 0 R 16997 0 R 16998 0 R 16999 0 R 17000 0 R 17001 0 R 17002 0 R 17003 0 R 17004 0 R 17005 0 R 17006 0 R 17007 0 R 17008 0 R 17009 0 R 17010 0 R 17011 0 R 17012 0 R 17013 0 R 17014 0 R 17015 0 R 17016 0 R 17017 0 R 17018 0 R 17019 0 R 17020 0 R 17021 0 R 17022 0 R 17023 0 R 17024 0 R 17025 0 R 17026 0 R 17027 0 R 17028 0 R 17029 0 R 17030 0 R 17031 0 R 17032 0 R 17033 0 R 17034 0 R 17035 0 R 17036 0 R 17037 0 R 17038 0 R 17039 0 R 17040 0 R 17041 0 R 17042 0 R 17043 0 R ]
+>> endobj
+16952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.529 758.747 140.492 768.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.825 724.11 157.788 734.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+16959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.557 700.783 136.52 710.41]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+16960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.389 676.855 143.352 686.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+16961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.779 642.819 183.727 652.679]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+16962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.346 618.891 176.294 628.752]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+16963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.409 594.412 252.372 604.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+16964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.708 570.435 144.67 580.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+16965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.708 546.507 144.67 556.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+16966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.604 535.144 120.567 544.933]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+16967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.717 522.503 125.68 532.969]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+16968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.215 511.216 125.178 521.005]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+16969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.887 498.701 144.85 509.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+16970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.926 487.288 132.889 497.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+16971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.732 475.324 120.695 485.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+16972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.712 463.361 128.675 472.988]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+16973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.664 451.397 140.626 461.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+16974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.224 438.881 123.187 449.221]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+16975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.741 427.469 118.704 437.258]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+16976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.717 414.828 125.68 425.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+16977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.94 403.541 129.903 413.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+16978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.886 390.9 148.849 401.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+16979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.756 379.613 113.719 389.402]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.234 367.649 121.197 377.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.572 355.685 163.535 365.474]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.563 343.722 163.526 353.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.741 331.758 152.704 341.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.409 319.794 137.372 329.582]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.583 307.83 157.546 317.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+16986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.882 295.866 145.845 305.726]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.712 283.902 128.675 293.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.243 271.938 119.206 281.565]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [105.244 259.423 117.207 269.602]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.587 247.459 156.55 257.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+16991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.891 236.046 143.854 245.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.588 224.083 122.551 233.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.732 212.119 118.695 221.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.726 199.554 123.689 209.782]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+16995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.589 188.191 125.552 197.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+16996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.19 176.227 134.153 186.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+16997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.688 164.263 133.651 173.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+16998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.589 152.299 125.552 162.088]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+16999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.011 139.658 148.974 150.124]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+17000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.819 128.371 164.782 138.16]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+17001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.22 115.807 156.183 126.268]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+17002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.24 104.444 146.203 114.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+17003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.002 91.879 150.965 102.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+17004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.539 80.516 170.502 90.304]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.961 68.552 151.924 78.179]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.987 758.146 384.95 768.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.59 746.792 392.553 756.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.012 734.836 373.975 744.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.291 722.281 372.254 732.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+17010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.883 710.926 345.846 720.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+17011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.465 698.294 360.428 708.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 686.464 360.921 696.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.489 675.061 353.452 684.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.688 662.505 379.651 672.894]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.087 650.599 413.05 660.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.828 639.195 376.791 648.984]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.808 627.24 365.771 637.028]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.808 615.285 365.771 625.073]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.522 602.729 385.485 613.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+17020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.475 591.374 356.438 601.163]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+17021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 579.419 360.921 589.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+17022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.183 567.464 379.146 577.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+17023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.848 555.509 366.811 565.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+17024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.431 542.953 369.394 553.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.171 531.599 369.134 541.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.967 519.643 377.93 529.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.815 507.137 376.778 517.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.306 495.182 382.269 505.36]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.306 483.226 382.269 493.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+17030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.101 471.823 353.064 481.611]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+17031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.575 459.867 365.538 469.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+17032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.282 447.312 379.245 457.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+17033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.475 435.957 356.438 445.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+17034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.958 424.002 360.921 433.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+17035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.677 400.092 421.64 409.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+17036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 375.63 407.518 386.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+17037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 363.549 413.498 374.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+17038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.57 339.764 407.518 350.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+17039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.55 327.684 413.498 338.221]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+17040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.903 303.899 413.866 314.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+17041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.425 270.026 408.388 280.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+17042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.065 246.667 436.013 256.527]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+17043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.557 234.035 406.505 244.572]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+17047 0 obj <<
+/D [17045 0 R /XYZ 70.866 789.024 null]
+>> endobj
+17044 0 obj <<
+/Font << /F83 6620 0 R /F45 6502 0 R /F14 6622 0 R /F55 6508 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+13369 0 obj
+[6498 0 R /Fit]
+endobj
+12543 0 obj
+[6498 0 R /Fit]
+endobj
+12217 0 obj
+[6498 0 R /Fit]
+endobj
+10958 0 obj
+[6498 0 R /Fit]
+endobj
+10905 0 obj
+[6498 0 R /Fit]
+endobj
+17049 0 obj
+[547 638 592 547 501 592 547 774 547 547 501 273 228 273 479 456 228 456 501 456 501 456 273 501 501 228 228 456 228 729 501 501 501 501 319 456 273]
+endobj
+17050 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+endobj
+17051 0 obj
+[585.3 585.3]
+endobj
+17052 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+endobj
+17053 0 obj
+[611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500]
+endobj
+17054 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+endobj
+17055 0 obj
+[500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500]
+endobj
+17056 0 obj
+[777.8 500 777.8]
+endobj
+17057 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 0 0 0 222 556 333 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 333 333]
+endobj
+17058 0 obj
+[500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500]
+endobj
+17059 0 obj
+[611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 0 0 0 278 556 500 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 500 500]
+endobj
+17060 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 0 0 0 222 556 333 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 333 333 350 556 1000 333 1000 500 333 944 0 0 667 0 333 556 556 556 556 260 556 333 737 370 556 584 333 737]
+endobj
+17061 0 obj <<
+/Length1 771
+/Length2 1151
+/Length3 0
+/Length 1689
+/Filter /FlateDecode
+>>
+stream
+xÚ­RkTבª¡¬òRIÕzX%róÔ
+ ˆ±h €<$f&dJ2C‡ $ âƒJª²,b£Kž¢¢TXU꥖X…[ÀiáËëEªVEÀ×°®®KÿÞ5η÷>ß·gŸæ%gˆ l,ÁP‚Áar„ T&“rØ€<³Ù-‡•‚¡aJŽ@àVëµ€»°ùBÞ
+!O¡P,݈#©ø„Ò'E| ÒÁ8¢R¢@¦$4°Žì¡RjS!0ad‘V ÖOÞÈ
+³U_™Ÿxà¹ûµõnwÚg‹À\&s¸i |5‡M7¨û;(œƒi‹mq¥‚Õráì…~7å`÷q —%.¨¹)Röûì.º`ÀËòa·4?§$"V3ºàx…›ªf60¼šj×·nhÑ¡—
+ë×廥Õwr‹9éûhëSÆ_ÓþX²k泤—/{_¼5S[©L^vž'gÄúú Îôñ¦·³©Ž×¿²zÅ+5ßÜ'DÁ½N«Ìmº÷g7É@œàfžÇ­c_yÛ¸”ÂqÝþòÈ6ø~ßdÝ›(6Ø â/£ŸöW>þÏåóAn²$4¡7å\ômß+µ «ÂÜk f&Y›$’ª%M³±žù^Aî 溈£f·íR·¡è¡æ|¶ob|Ñ ¡ß¡îWC¿”ÄXGŽú-ÊuÚº m7óaôr“ÿï"kSŒþµ§¬?Ï[¶ŠÎf¬ÛŸv¢&²f‡ÎøD0gßqAýcŽCyöùg¢¦ŸÔex¨ó‰Üü|9½¶ñjíÂ¥(êee
+>×ÒŠâèàÉqS&÷Ügy‰©oºƒŽ®?\mÚ³ùÑ“Û+íÜH:õ÷ ¨éâ/Krßní ×;¹Š›Úlèýã–»?÷!‚­ç»ê½ã¾[ÔB­»ø¯±Uë\Wu´‰­÷-´ïŸ AÍ•ºZä1x%D™êcó´ÊÜ”>óD­Íéæ‚väõ©ª+w°gÕi?/bÍX¥•/•žÑ.·›qwæØÓÏÁçø–C×#ø 廡à;QF+&ïuMèóܯŽvüvv…L-{› ß—2_e4tÎËjê*]àRneøl;û™ékî7gÌ[ìæák¥QÐöšö7ܯE(œuœ­±÷ű¸Ž|‡s
+WS©_ æ¥uc†u¥ƒ}Çv]Ίù¸ÀzÏGáY*.yc¯¨j·/K<º5ªëÍ{/U;ªÐ†â¥Ñùª¶;É[WËêNîqÚÉ9¬É.îš[Ð<ká®-¿z<Y–)¯øvCÐ~~¦â¼„×<çGïÅEJÎ95T$®>”z_Ü‘ý"ø§ ÃF—<=g),x9¨é=ë_^,¾Ú)ºÝº—VÛ¥mª.-Ø+›[ã¶ñƒp—#íW…×]÷´·ó¾h§.#^½I8½Üã{cJ'¬Ûü8¼eM„mÁÂœ×ö6ºµ3óòD¥!]7wh’:n”åý†ÆȨmUæpbòXAm³ðŇY>¹ÿå)Õü±‹â–¤ë=_®ÛÅeKbÑ“ŠJbU7ožmÓ³¬¨#ùUÔÚþÿÍé'»
+endstream
+endobj
+17062 0 obj <<
+/Type /FontDescriptor
+/FontName /SYFPBV+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/greater/less)
+/FontFile 17061 0 R
+>> endobj
+17063 0 obj <<
+/Length1 845
+/Length2 1316
+/Length3 0
+/Length 1895
+/Filter /FlateDecode
+>>
+stream
+xÚ­RiXSgud‰•°{!R$ ÒÄÁ6ìKY¥¢,ó\’›p!$! Ä U@EÙQ*‚€Œ¢u€R±lQ#•
+2
+È¢¬²²ˆ½ >íпóÜ?÷=ç|ïwžs>Sc?K*ƒ
+9s9BK–@<ýð
+D ­„­’k8ñ‹ é6(øŒ·B`>H‡ØSø'Øú#ü¡÷O¸• €ÀH1  ûkNöö\Q¬¥°$Û"¾ [€D"ŠÿGHæó!Žpí)"iš™0Ò‰ :ª§‹Kß—žSsòJœSqGÅfœêrëµ±åÆ€Ú¸˜!ö#ÒŒYÂ’ñ¢Áê4):B®ãNß—µ_¥+ñ:2iÛÕêÔ‹¥ßÇ°OüÐ1‰©ÙŸ),v»I£¾Í=ÿÝ >¥?”Ÿ‚ÙÛ39ÞªVȵ?T\¿Ø×µEËÜ÷¬¹‰©§\¹wƒ6:¦w¤sçëÚã9-vô©öÿ~íæƒ8§î–3÷o †QÁÌÃr¹í%µéÑèàÆ; ï3 ¢IÃd“S¦³wüJEoRãôc»ïó”ÑÿIž½9æ­Šj0´¿ÛÛ!MjĥǻÔ~mÐ:d¶¢×jᕽ…ï³Þxóe­®,|ØÿÇë„SïG•õ.Ç-•‚çÊ4tœ<UVg·è–ˆ±5¹§Kê¤[ºêv¶}ù¨Ç!}ùU¯J©VžÑÕ Ùµai8ô‹W6º:\J†â#ÿ¦¦{á-ø'”ÄtV(Iš^ô¾Ë³îÎÓ…%ƒ3¥ÿÒôí&ïi¬Pþ.¹ÉÍ#ŸfllfüøåôÔÙ[_ˆ6ÜÎλ4lWË,»[µÑ>úJ:‘Š,?ÑÞ$'í¦¾Ã½©É­ÉKš¼=:é¿cìµM³ ²v¹ÙdØõú?Ú¥‡ìÓó??κß%Ò-õ¨Á³´]J)šô0Ù¹ks]‰”ºò ùÏRïÝä±’2®P´âm:Æ$ÃDãm6¼ÄSõ ©JÅ(©v¹ž¾P趣3ã”(‰Nï͉@1*’=£óu”ÒUúÛ¯Ò&µ¥þbÁŠBQP[êÁ|ùM†U‚d¿Ò9ð´yÉBқżàï&ðJNfðyöφb´¶ÊBn¤0)Ž¿]ì¬0kK/š*ÈÑ·›Q¹”ái”Kb§¸?K( §Ü{î¶@6ˆ¼²‹ZÏ¡Úúr&&˜Kóqê0ÒÊÏÎï··+$;m•ß³|jWŸXßv½±$“ßêñþ²,bSù#²æÌÄTÙ[ï–Þg†_|„I:5¡Õ½ëJBTKSïQ´Á› ²P¸ðÂ<Ðë£YU¶¬ûÕñ¶Ã<'‡l¯û­=©ÞÒ2¼¼…s m§suÐ+‰ëI‰fõ\¥‹<¤¦\]Ñú+oÏÞ–ÐÃâ¶ãÚ²OòJç7ôxoK©}ïóîl¢é{Ö¸»4Ž?5˜’M¤…t²{Å“‹ZJ¢W³¯›?›i}a[¨«Z.ÍãäWªm¬¤öt,¨8§-vš‡Ì ‡Š´ÜrJh²\gyåó_vÓžï?V/ŸÑÕìõËY®xh|ÿešµy`e);(Öò—²øù¼…Ü‘ïÉû‡Ï_8+¥ž$5˜ÅÀe"ë–y…Úöárê^ÁÒB–ßUã'î-„Yz ¸n·š&:žzD6ðÙºMBã†Ë˜D0Å_{Üs ¡¨ªÊÊQ¸kÅ6_58×íÛϯ†úgÖ³N ôÒz±–¦Â“ÌÙ±#Óááu£†<Åx`1ÉÞq™Ò?2Õæs+¬~ÀDÿµ³.Ï}«‡ßq­jjÚ6Ë¢¨ôRÚWÔ^‘´kú›2p› x§·ÞNÅ•Ë~Uü»*|çϬ6mˈç––šåVµÀ³ª<iæ%{×;ä‰Ä†Ð¡Å™ 1ólxÓbäœiMùì½£šûÆÌ+ ¨}YñÉ´™ Žñbhþ±i‡âßÝÂô˺Όw½¡—ïAã¹1)¦Yi0
+endstream
+endobj
+17064 0 obj <<
+/Type /FontDescriptor
+/FontName /DWHMJC+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/asteriskmath/backslash/braceleft/braceright/similar)
+/FontFile 17063 0 R
+>> endobj
+17065 0 obj <<
+/Length1 775
+/Length2 877
+/Length3 0
+/Length 1409
+/Filter /FlateDecode
+>>
+stream
+xÚ­RiPSW7$¢lÚ\e((dyhX…!Q(`X„Â’xÞ IÓˆ£HAÊ¢²¨ÅRµ
+$¶,‚­V`¦ÔXY+ˆ,jE†Zû:Nñoçþ¹ß9ç~÷Üó]‹MÜ@[€GAO“Ð:âÜ}÷Û„ΤXX¸'Aq̃'N
+) ?œ¼ ’NþS‹›{JE"?^œº½:¤h^*’½àqb©À@[, † Þ|¡
+É:̺Mh$;š–§óµå˜WSü¾‚ÂcfN·‰Á³'ÌmT/Í“ÛV žpBË•3½]Ú[²·n6µWUhöh¬7’õüÙéïõÉmx9½dàêƒ "Tleâ•éývÄ¡þÒUóÔÖÖåÜ.z™ño×üF õÜï;¿Ñ™²6CirKeëÝÉîYFnÏS®8¦W[{™ÿàxÝûˆ¾’Â.}ÝVèüÓ–Ív÷J\Q±ºysÑøß!ýÁãsºÐÒ5¹ÌM)§çšÖžè°Œ
+»U»Ìu —û”npµmøE5Õã“àj›—Óò7Zæû4Ö…¤Nص7õ`_”M6/mMž*Ž<OmjÔñËüÔ%òâ¡ë]ƒ»µóÓjø©ic\‚ÖzÊ;§‡ó;S¨£í'žËkq®ƒq «Õ@ùp¸EÀ<¢èÓˆíÎ
+Ze¼üm¯sm[Á
+ËâÇ WbŽ¬i«‘ù»í~òÇÃLÝ1ÃÌÇÒ<Ù±qCïìç“vÈ@VOg|uxe±»k¼¥FlJ­r2˜Onä]ñÒf™•ì¨6Ùz½ÎœÈÈâù¤-ñsˆO–í™mg¶iâ¢Îg«™¿T…«Z
+. qÖ)·Ì•¿ÔWäd/·ñÓmØ5Ô8rÓl‚óCÚØÌ•Ž;_U)‚ƦßJŸ¥B-½á½‚÷„ ¡e£!5“=üªCÕ²îYŸ¹‹öžéWÞ Jî=½"t¼œB¡f_45î`î²,ªë=…µ¦»¸§¦šîÔï
+,¡*-/Ö7ÔOÞ-ÌÉ¿ü¼ê|Èë´\/ƒö¡/óºçTþŽ
+=ýxN“æþšRîŠè¾Ený£G§VÊç6ô«ZrâVVVݧæì½£p{Æm9ýú\"\ehj3£¬Œ¤~>û»Ý†ãAsþZ¡ÝД£úe±úpžî¯üðö“³›b#¿nÌvCŽêïã(MjOöœ U´Õ˜´ìOPNÈUë÷fÐnNœOg°š;¨I:KU±ŠÂa&“Óq-!˜Ü»‘q(5y Öù3á…Æïꎔª–TÐèÌ[fÚ%ÛÅgÿQªü
+endstream
+endobj
+17066 0 obj <<
+/Type /FontDescriptor
+/FontName /YDADAV+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/braceleft/braceright)
+/FontFile 17065 0 R
+>> endobj
+17067 0 obj <<
+/Length1 1606
+/Length2 7303
+/Length3 0
+/Length 8121
+/Filter /FlateDecode
+>>
+stream
+xÚ­WeX”í¶”FR@ÒAZrèîéf€!fˆ!F@¥¤Cº»$•n¤KPNé.ú½÷¹¾³³¼×õ>k­ç^÷Z÷zž™—™Aû9—,nQ‚Ã\@n^1€&ÔÉÊÝMSç’ƒ;‚wFA<ffyW…Ã@ˆÀ(@¬||
+
+¦mÀ{=AÎEôòsß”Ã[_'‡,Š–Z^Wq»ý„œÜr¾YU}ºö¹Â‘µ5²—CëËÈÞžK2ÇÒ(̱æÏó¢èAʶa„÷þõ…û&B¼kKƒ:º/
+¯±è†ù]qöÏØß0zä¾yÈtêLøÊ:©:š¼‰ø#ieÞÖ6KܳSÖ®¾ÞžîÖCÌöUŽÌh\fqûXÂ߸dÒH›è—z‡>\Oít¤ÙæµmíQ9¦ú Ÿ+íñôÝ£<ú¡E÷¿®ÓÃà¾ãàúÒ¿=n¬í uWlã²ßG–f†£²Æ›‡Êqûîª[´3üÄ?$½²“)l¦*{"U<B#3Ú³#Ñx§‘‹EK¸ÄrÏÞÑšý÷C5oÒã 6õÙjH][é–{0#[ÚSDß'rã“ ¦“Wú &7ßF1Øn‘¤ŒÓûû̶²ÐLp#o ›”õ=»O›Ö"Oäuý Ÿ®nùªeýÜêK¯nùªÚPë¸Q¯‡)™‘9²wOÓˆ|9ÈÒU°ô®(¼ŸD¼'ìßÄùMkYYšLpO– _!d+ñ}]‚õËÁRÀíL°jÿ“¡7¨®§!ÿ±Ôöí[lúyCƒìÞâ¹4>ÇÄqC6;ƒƒOŽŸ«Äàã¬' *_3YcÎ61¿a ÛŽÈԗĵ×ì-É‚¾TÍ^ˆA齺m˜´HIAž”÷TkÎ쑃Ǽôh­‰ý¼(pnDå GB«>/’âKÛ “Êô%öÌ'»Ò+?n&¯oXÉSQŸmŠðÚH>·}ð*6åsk“R¸âgÌWÆúôØ?{1Œ¯Bv´ç59áÌ)û]Æs‰ ñçVæSF¨üd&ÌpI™’Ý'oç¨ó>EåjçæDM#È,ꓪmÁ~Ÿ¡ovÌÈ GCs¤Z**6Ý>Ñ&ç(ÒÏÉL_ùVÙòbÒÏ\£v™‡W˜B¢ÀáJzôÍl©¥_Ýžl)]p·tß¼“‰,Ç(=Äsc˜ÙTyŠ §ŸãDíh\þü©BÇˤÍ-yfiD€E9©êøMd^dƒÛ&ÖJ Þ´W7¨ÍL” ¹¨Fsp¦M`¬ùT¥XÛÇ5nÉàæ‡Ù´+?<\½¾¦;ö³ŒJçÙ~Pyx
+l\ÁpZÌ™³A+š6¸^ÏÑ;t‹ºÛ¯Ì1gâE1…©?H©TŒšåw¬d?™¥(rÑç:"éR"=žHs²è^Rû¾]šb~®ß8ð¶?ÑÒõøÑU„‡â+ËBÚ=Ï#yþ–c†ìrE©voG/ѧÙVEBá³Ñî ʃ§ 6,%ù ]¯/ÆÛ›Á
+Ru£§!’T ~1š†-ïm”p½¶cؽ\qõ*‰¥˜€´v+,òqB£Ì•ìÅËëŒ>É%ÏCÕÇý§!tóÒ×üïb†î?{3ª@þÚñ%±†
+‰:¸Õ—ðNH;ØŽG:¿3½4“I•¶_:œhy(±C tÜr]27m‚¨|eNœ—Àz©»´¬ÚJÆÍC úI*çššÙì­MìÑEïpܯeÅ_Ô=5Âñ5³ýŠQÞŠõ4¸S#:ÐîÙ웲Xš³}¬áåBšM%òÈ‚nOwòLtld.ÞxîR˜¼ùZRo;‡o]9Ic×PÜ.âiùqŒ2v8Ög”Ý‘Wƒw?ÚV >{ƒgÞyÈEL×1?¼%¶ÈtþUìÇB êo³`üh¦ø ½™¡|Ü™^ÒSjx$¦4÷‡Ëð£î©ýµê¦…G:¾8ÐÅw0}S -³Âåð`
+U×Q;Ÿ<^núaœ-¸€ƒÆëÞMœùj¨ bœó´ÌU0è~¤šÃWQ¼Ê•G¢Oú‚Ä
+./xmÀ™˜;£ó2xºŒªG£€=\Í8•]ãË"­+ÜÊŒÂhj>$D°îú©Vg ðEÇ–p›âs Õá+å(%à܆ÚÝú¹A]®é#QŠï³Æ綼õEsc= kþD8ž« ÖdÑØ¢nÛÒa`žÅhgŸe›ð¯åQã¿j lšå"¦‰!›'>›pÃqœ¡H@r°.èP
+³ëÅʪ¾UúZ^ b›êjÎèßOØDÕ÷ž ÉŒ„£Ð߯Yùùò«™@ý?‘_igPkðø÷d“Oã£Õ¦t[h1õüù>ŸUe#ï„¥<&ûygrQµ)öÄã–k§{’‘çXî"漄%®Ÿ}“u¬&E‰çé
+1-ÏUÜŠ•]ÅAæJ Ÿ½GEBÒ7­Bî¥g|W²ç/Ò2$$Sb.lŠåv¡ýôÛÚvK@Ûd|Öž¥[â½÷³teà}ú)žv¡7=¦¤ââ¥ÎéßËšŸiz½Ü²
+Ûv é™Ð5Ák¹ù‘“¢£{ŸìC0sØ:Áé°‚×%«(Žç5fÙÎMô ®®™5‰½¢ºA˜-@Ž]R xC›Oi$39Þ,Å
+_qÛl•å_¶ä#øIEåÜvðƒ®åú%ÊWâ}°…8¹O]¼‡ÖÔ;Áb ÁU¥ß×…ùòì39ú>F Ìþ
+ä—ëš ¥ï‡§h”È$É­ª‘‹Å–/ÝQ^µÝºÊiô:½ZâKpѶš b÷(eƒ¨4PûÙPTv=DìÆ$»2ýŸ ¨†LYE[פ$Që€8 œ¯i<¥Â(ÙÆ$µHÇÞ)÷‰ün’œ—ÒóÒç]§Æsº{† ‘M¢Ç¡5’"B/N¦Âº'z
+:¿IMr ®•Ù;«ÛI9ã퇘®›dÚpú*áÁìžæ=Ê>¨'‰`1›2Žª2Îþ Èçç×ÈüjÓÒM†üi(ßæ@òª†É
+0ÌýVg”1o•Àg?Íñ§É–ö5Sñ> žEÇŠ
+²g!öIm‡ÈìÆέ£²–Æà/@yó9 o|ôã3g£Ý+T²É<…䔈'¾y\Úh:‚/?Š~Kû×¼ù󲪹#É_ÞTÂ×hÒA¯L/ºöwÜWó_)>‰ôiX5"·®ÓÃÿ&nÐ^w4|ÉÉ7ÓåpAÎ*aÇ7#r­IL›±WºçN6óþ0 uAJÌAˆFhˆbÇØFYíc:˜C½¤<IÑn:¨Æ!¥äºq¦z²BN®
+ù?l¬odž]V²DiÍô¦[´3 ÌË•™÷ÜH[>âšÝ“£ñ~’wÿ hy1$iL3'fPóGd¯[çN(`én‹X ‹‰h¯Ø"ÎKåc’¿ôëÎWEàÊç¥=+Ì;NI‘l1Îxž'ä×YûHl=¦ŒlÔL×­<Úšpšè„.vçÑ *yÞ’å¬=yÊjH‰çøæ¸ú~Ò“VÚÿRl‰ÿ;Èqësú‡Ÿ¸û*_Û“Vî93°WC±6×›tC1ryÓeMèÙѽZ"­|:’/ò×¢¨¸=²zEtTº^^ vm|
+ÇõáÇîÃÙ¡ïJö8D7ÒˆŸmæõΚѦ~³áÀ‹é@þp<¾:õÍTÕýÙ_aÿ£N5úÄt7ØÔ1³I‘Ö³í‘+9£Æ»ˆºà®¶0ù>ï_<ýTÈ$qX<ûåÌ’ÿ3Eæܺ™bzc¸Ci@Ž1í¢­¦j–³ÒHìÀ„ÜS'sŸ³¡Œ1 ¹$sŽí—ÖRO-Ò¿R!ˆ;Š¤—ö¤1ÒÜòAnReÙã ²ÙÃ÷ HtÏyNÕ'Ø#IÒ¤•1{ô¡Äqã,BÙDò,žÛðÆ™3õQ°g°Ò ’¦^6/’€b®÷å_öÎ6¢_a:rˆi/Ñô9üðö¨ÉXB•¯¥Ñlw.úMF¢øª E§
+ž° |;+& •=k1é”nŽK¾g¯¥SeÌ]ø´™[Ř‚>~A?Níç¸U߆uΔˆ;nGz\:
+Ÿ¨]ö QÚ5¼ûH¬Ú¯]Ü÷Šäåé{Is+xêûÒšò€u2(cjïåR-ýh‡ëõSÓR'êéŠhõ¡ ƒÇËQ3mBE”N–«êdŸírÚ&×äØqšNë³› Ÿœpb­)_ZV&ºÖÎ`£Ì@‹%} L#1¾8²ôÔÝ‚—É ˜5¾íñ¢_&{÷I {³ÁoW6Ñ&ÙS_HcÒ'нB¦$†îÕnÒ4åU»ÄécD¶HØçDF
+ÇÐ …E¡LÓ1š–¯9«Å©oT†,†Lˆ§ÓÓìý±Òn<Ék.E[ºIòhÓ)›}ñíw³8ci~ýÍ|ôþ%:­Ÿ˜‹¬åš©‘zþ›š’϶³CšnlouF‰‘Ì!TæÒ}¿B>^TFFL³Ð·»QÊEyÂÝ…%Ñ—5¬f¼#;û™IÓÌóKÜÛ/Ìr>чäÌæ­Ig(¹`P}­N€L²0i[žu³; …4m6}ô¿@ãÑ®Øçº=ª¿T  î• Ù¾æÉð½j:õF£î9}6Xs7§iT¯Æ”üÅ¢S&Ž±v.^‹é®q]X5ôáDèt{¶ìƒ‘µâKc•-–”l>¨Õ›‡b”cªµÌ
+÷ÆÛ
+ö×æH”ÃX„Q6;¡©Ù’&Ôcò ‹õ{¢ó
+F‰^[º¦ˆÑ¡DuE3áO© ÚôaTX,²¾ŸâN˜ćåñL´TÚT?è4mÏuâpì `iåHaiµÝ¿øºânÒÁ«ë^äñÕ¶Â%¦äÑͶZ±âñQK¾/µn_I÷L‚>þ[Àu† ãÖ-°m1Oظ#Û5t~Ž¿Œ`Ñ–gÏ+Æ‚¦‰è˜Ë;aú¥«ß˜¦èò‚”Õñ#á7Åé݇.Oë¥Jàž¹RyÛT)_\ÌÙ[Ã-(ž¸‰qWmLçLÙ¥FTÈÞÑÂþRÏ›­ÊT` væ&.+ñ ¶¾Ÿ‘ó~uú=Õ"ï/:«âÁ‚3"óHù4ë1ÐP}ž°K’Ý-ð«ëÏ,?»ý´5=éãÇkˆàÊÙ¤Ž qK£{xF«X¦¢6#yÚ dAš'™c„;0ªZ<ÖˆÝ΋`ɬ|¢‘ߤª"äßÌZ­¡°K/)í±¼âÁez)‹©ÑbÌ»y%VL3C#9~…[‰šIl¹÷ã þ*ù/,kSˆðn9üðBêF™ÆáE*éÔ6#œ†Ó'$Ä<ˆxpJ‰<Tj8U”e’MÎS^Ógg³XVÇz(xÑ’Á¶(¨êFg²o…È{ ävΙý¸,/f@çï°ÂûöÓ÷þÔF§Ó,C
+endstream
+endobj
+17068 0 obj <<
+/Type /FontDescriptor
+/FontName /YJKYMK+NimbusMonL-Bold
+/Flags 4
+/FontBBox [-43 -278 681 871]
+/Ascent 624
+/CapHeight 552
+/Descent -126
+/ItalicAngle 0
+/StemV 101
+/XHeight 439
+/CharSet (/a/bracketleft/bracketright/c/d/e/f/i/l/n/o/p/r/s/t/v/x)
+/FontFile 17067 0 R
+>> endobj
+17069 0 obj <<
+/Length1 1624
+/Length2 4653
+/Length3 0
+/Length 5476
+/Filter /FlateDecode
+>>
+stream
+xÚ­WgTS붥Kï‚T·(5@Bï½H¤K $@ $! ‚tE@•&]¤ ˆ€ ½+Uª”"E@&R¤½ ïÜsÇy÷×}çG2ö·æZs•¹ö—þK¦æb0´ \‹IˆC„·‹/Î2ÓD#a×\€
+O ø¯Íáp
+GÁ±P$`êKhÅ0B¸ÂQ8¸0à†ÆÈßÀ‚!ÎZɸ4p
+D,ÜŠ…!á8†À}6¿úþ­{(ƒ øþåõ¯xé&N-!IÈéŠ'ävG ¨ÁgË¢rCßv˜/æOÌŽý5 ¡³&…¡QÈ
+FX³Î`W_,– î¯7ŸÐôŸç_ ‡ûÃ]©'ÆЮJ‘žÉi)øröÌÎ^m»Öf ÒÎ(Ì‹×y9¡¥è¦äèY…b磲(ñÊ~œڀѯ˜ã‘ÅwÍlHÁ¦'ðõlîÛ—…[r˜¦êä@‹á`Çt)«Ö7FŒ>‘Ý…X-~î5»î˜DÁÓ_'…¥Üؽì—ÊzeCìú´"þ|=c%syî×UGË{»‚íï»:;š¶È[¸@ñTüJ~dt1¡>\j7,‹ï]QÕyßÃDcÿH£Ÿo*.øžŸñÅ)i³¬Lƒ…¼ÈÒ' ÷gYΩ2Úw_j|§ÇµCte–z#t4Hënô°ï*ôdaaS]à@O‡]=6fúuáF†pÈ„#%0t}ðH‹mѬnømCïðç,G•¼PPˆ—ç0IE›j[’ÖyNÙ6†¹Gô´;Œ‘.ó9¼õ>:ÖK &¼Š²áóg(ÿ.7ÌÕ¡÷lKï™ÕÖ RM©c%“‚ü'Çá!§I69’ExË2ÙàÓQÏ…2vNmÜœ×ÊñýŸ©¯Hß–e«BïdÙÓÄS5§ ³sØyʯØý€~-|Ѫ1œR7X8)gZ «ÆGùX§TÊs‚K½ÿÎÅŠº&º˜%k—XV?I[ÆpgÖš©¥óšnfwìã´MF´£Š> pÆè·n;¸?[¯”“«|[òGD‰¹E1eýTqFî¥ê×Ì{ü¼Üm¬"°ÍÔ»n)¤Çm•I ±…c…ºVpØú¹õ˜§~÷6~Z™]OŠ˜éA~‹ÔÞ^.ðrxÍÛãnšRV35ì|kP•(ø†“í˜|ÿÛº†RãÑhÏ­ÙgÙŽ6Îÿ!Á§-—f| šª›OuþÇ]-d%\#™ß*àöˆéAÝÒÍ:“a·”xäc‘±Ô=lZeƒ…i6©Ö, :¾ÍrR²Á1È>ìÂ01Ýd1#oœxyýdD<Àð뇬¬¦Ì´lºoä&y,~û^}3ZC(“äç¼/~Ô!!Ñ—ïZľ¹ÐM½ÞÞÞsG¬C«_“:Øg¿•+¡Š¤€[µôzrG¯a♎™+‚$¬% «
+†ÉŒix¨·èyx™¸:¥‘hâ莙ˆËEZ@ï[ðHFS·s+;Ý7ùîQÇ'(&Kâ~‹ÃñãiÁ0Ÿ¥0ìDß*…š‰y©içÚÙÍ@ó}ý<ÁçwI¤ç=fZòkF?Ṝ¤–I_¬h¹‹pú8I%&’EFcà²/yÇ{crU ¶‚xo‹°’¶—¼™¸DÕ>jìV5ý¥Ú@ЖÙ*ݾëu²)w«§|±>oZç9R¡5ÉßÈʺ¯‘zº÷ OQ[ù鬃[S£“ë È-ìž^Ó­˜ÜM7x7»Ç0¶\•ÝÂJ¯Òc‘ëbðò´•‡a®`6{=þåËT1«™§¨Qçíõ€Æ.¬ ?=Mþ›NA+ ”^÷®èb)¥k5nãx3ÌÁß¼s—Ù_š“ñ‚Üû–É͇á{j«ÙfŽøw©Ä®JØ2XÝæÑ™_g|Þ•þ~êf»z1¡)…r‰ÉÑq8l8ãܬ&øiðºèQì“ü#Á¨‚w 8Ïa6fY Žæ.O@ÀóKøÖÆÏ·å/-W¯búb}ÛOV±Æû!›’Ulö±3ÛŽ'àÙár™s:ß~t®£CMüŸMú~Æؾ—jé›ý"‘._Øw4AßM©†%!Ë{/óG“Iµ8i×"ŸöéH`r‚ËSsLÞú•–+Âïr8éWôŽÕtì#>MK-îÛ%6€òÕàJtOæ‹Ö“¨aH6Œµ•¥ÛÔëï‚4\Uh•€ÓJV“ù¡û´î[‡$D8ùEÊV‹A¥íöŠÁ#è²Õ
+þŸ¯f²F˜²ÜM˜ÚhéŸRÔ¶AûâT>ë–6«Š_fô‘d¹%ax]ŒœWüCi0ç.Y¾B×¼Â[5ÓQ'í2º*4]¢î ZXOPÐŒÀ°Ëº~…ÚFuEñéø­¬e‰³ä]sß5wìµñ]S‰ŠSª7Th§ûâݱŠÐu/°î¾(Ú+¯Ä^¦$Š—;]û¼U(ð®ò¡$-]ž*™ýôjuΫ©¼½3¼Ìï2 ‘QSPe²HèÑ9÷£C®’Ř´›|7X®EQm¯òƒcbùyâ{'h@<¦º;ùBåiºÈLÙã®R\W@dÕ;¼'c“õ¢þ*¿¯N³jÇ´ñ¹àÇhq¥‰§—>æs¤éÜLZI³Mt[æŽÿÀv?³†ùKÆæ²GÜ¢~Dà›ùBÖ 3 ²íFGûRU
+w—›yÞ°ß½u¥Ã¤GXŒè/øɹ>÷½7WÌ^WîK²Âý|Õß¿5j¼Bb§,º³Á—KôªÈ›Ý› R*·s<ÔÚTÂU7Ijâ¯ç’xÛ¥DéRÔ„ÚÝIxécº¢9@Þ¤ž›qÛ÷ Ü% ÇŠÌù龚)[jWL ßc‘{õîèz’ç‡Z[/Fsýäíl#OË óI/ëZúvjÖy"óþ‚M
+ã¹Ý-ç}‹Í…ò­·¬;.§^RýPiÏ1Ù–A`÷4UDTJÖ Š¤‚Ð-ZòOÇ6jœ´ÄåúQÝe½sOgîïfadtM'ÑWZJ|°fF[;½I`Ãäeζ"áˆ$ÈVJl}ÊάLžº"‡qdWµÞ­Ëà¨eñŠ÷£­äh½Ù€Àý†Å½jár
+NÎr›H¥ª§kÓßÖ’iQ*âñâ÷ìc@å·'S®&|¤˜ oãªSÏM›Ö£P¼þqÅxÉ'ZSs†v<‰bAòØêdëRÙTÅ ÅjU´GôH~GW‘n“N™áò9¿ò76§XŠ w¢×Aw<âË
+.n‚úÐU1‘´Þ¬ëþG‘¯ Wí!õ–·Ðsû2+¥w¯DΪ²¾ï›á•cµ+ÏÓw2wÀ¢1îÊÍ´±J>“q$Æ>Ãœ_­Áâ¯x:wÅq0SÊÒYJF¼t·¥žùªf·®™ÑýÖñIÜŒa¬x‹šúV^ѪP.¢Ò­2€SÑ>ÐÈé]}U(¢u%í&<ÖY-ÿÊÙM÷Ã4k°˜¸ßó\š!âiU¶3,ÞOûÜ¢ŸU&#ë@·C«ƒÛŒríÐãϪ-­©å-phQ²¯þ°übšÄfã0½#²ÀZÀ¡|ai‡Ø~¬76U7´#ÌðýùZ@ ÇF‹¹6 ïzÇhsKøCØ<‹òµ%…ÁX·¤>%'ÿz—vuàw‰v,õ~–—”‡˜Li©üT{vëðPUþ2ØÒänÁWÊ> ‚ÎÚ
+Ìy}N[åÛVDò7PçH”ÔË«?ËŠÊI4øI.P÷v]9½~tœ› ûµ­7¹÷õÕá³5ôiÜ«†´‡Ñßr³­^rS.4 wÖRÖ”¿œùæÍêÔÓI‘qhK‡úÔäyßë 6ùši¥©ìΕš°^å¯Ø;H¼ÒÏ¥›Áih×þQþÆ¥ÔùØwKF†œ1qÁp‹‰&)1§ù§¦1#úŽ²"âºWÏíôn)e$B0¡µD7Ž¨>×5¹gÚšÇÎÙ…OHÜi°¯ZQ yÝWS&ÕöªŸì‹HÚõ¼$p[«¬k!%4Ã=jùq–µ<µ`4ä±°õ¹¯ãrln‚õ§/—y¨ø"’&Ïë³_·R1*¤gúØß÷ΣzöåéO½ïµ­ïßD~”@o7kºr¿pGƒyWLYÃF¥*NÒ>8ŒÆi@½
+NL˜ã š|*÷ C¦ÖªwiU…<\ûTp“a&“lj܅o1§ÔbØq¬Õ0^*ÐbûmÁ‘}Ãk|èæ^EU½ü æï"â)ÕßݹûUnÎh¾}” S¬qíœz«çq0éjÈ&ÓÂqÂGæ]Ñ‘4.¾0˜OÅ3œŸ ä)§ÓÒþ±ê£sä¥<·J榮r‰'Ž òr¶§¡)ç0¢1¢C‹.];í 0Ëkª¸‹˜5ó‹íNÖúD\…óögYÝÄý–·
+eB>+¾[¨‚àlKƒ>HÅl0sy5œl'z('³)¾ýÀÁ3fGcÊÞs,€P/z—¯´\Ufô
+‰çº:baœSÆRZƒP—ç }O÷‰B˜x;èŽn¾‘OS|æ³O,;£=8Me¥BT û¤ñ°kš|”}çíìH²qo)>í¾Ñ×½'\uÙ‰¢Zq9¯ÿ¸=9–w#²^ãZyàKvT}-CsD)ýøüêsÅ‘zÑwÚ£‚9ïÓ
+î†'Â✘7s'#9B3î[¸e²uäÆö4¯óùÅæ'ðä™Ú´òKò8W±‡iéu·Ž¯¼éÌQv¼¾«oYÂzÓzE¿X8¾òV›Ÿ„,Ú'(ž'*“¡ÒÖáî¡œzóÕIaé†&[ c_ÿ|ð’™\a’ŒÜÉ+æßÍξÝã%ðlùRküÀDhd¢rÖÅhº+ ÝÅ|Ô¥:©7—6@{ÿò7V
+endstream
+endobj
+17070 0 obj <<
+/Type /FontDescriptor
+/FontName /KDWZQO+NimbusMonL-BoldObli
+/Flags 4
+/FontBBox [-61 -278 840 871]
+/Ascent 624
+/CapHeight 552
+/Descent -126
+/ItalicAngle -12
+/StemV 103
+/XHeight 439
+/CharSet (/L/N/U/e/r/t/u/zero)
+/FontFile 17069 0 R
+>> endobj
+17071 0 obj <<
+/Length1 1612
+/Length2 15681
+/Length3 0
+/Length 16508
+/Filter /FlateDecode
+>>
+stream
+xÚ­·ctf]Ó.tÒQÇæÛ¶“ŽmãŽmÛ¶mÛFǶձձN?ï»÷þöxÏ>öù~¬1Ö¬ªyÕUuÕœc-RBy%ZAc[C ˜­-#@ÖÜÚÐÙQÆÖFšVhê økd…!%v
+ÿÏ­tþFÔÆÈÖøŸYQr2°1þ;^ÿËðÛÈÙÁᯪÿ:ñ þŸë :è4‚Y[¶5â²HËLwªÃÈžÑèc¶+mT.*ð«±íõM Ûå¬Ô¯ ¦kšæúlw_:³û8¤:íC·"ïM^åãzSö m‘u²SÐë–þH?W‹ò¼^”Þù¦ÉÆ z¸7© ¨[ò‰7ÝÉì
+ šnE§¤‡›o4e'~Ÿ+¸wú\Eº àÄ—»A=2FªkÁV§ý¡o*Uéj•^P~Jí)nGh7ÃY
+Ê%ñáL„ #‰#†G7\ÈÕú:<ÎpÛ¶AN«<õ÷8 qþ…N3»Pô»¢§Â¨È'±´V/¢ï$«¸oyRg®á*O!Œ®-¶_ƒŸÎ
+ãñçEÒ é|E€Ñn´a¥=Ï{^ òu‚°|Ó·|†÷€1…‰æéÊÀºwn„µ'Pˆˆr6'Ä»š¯5,ô%ŽœíF^g:r>j</¼;ÆOOl÷‰àx–ÿ™è“‹»únc‚øSÙ€Uµ ñ•à©Ý8
+÷›2íÓçMðö0ÖfTФš/!J6ªCD!9ñÞœÕó ÑLíê™tÂzï.¼bWaîJ¤ÍóÏöfÈ°õ;kìK'},øËe•š²ð¨{êZÌ]BL ~åOL5?ÏWØÄæ©ÉU<Šžm¢©’+:&!üè²E#ˆœàqedº‰¯MPTýx¾Ooc+/‰R¼1ïØñEȱ–]ºÍººžŽÆž_v&Ôµ¨Ú¯ÀÞ6õ.þ!×úîȹ¶œWû6É«Fë˜OäW[Ý+ø(†C ïQR„Aç
+õffKK¶cM¿{*»ì¬9%¤ˆ*¶Èðg XP[-óGiîƒ=ÝÊŒ\Tÿ{ðH3ì¹ø«Þ²€côÒÐu«‚¦ô4 !£ŠQ¸†CÏId—hO`ÖrÑÜÚ=sÓ8¢â¤\Bë;%Ò¤¿4Öwò6ˆý~çB_î"Ñ0„L8çO²ÎæÅ©ëɢ̞úv5…†kºçxËXå§3©¨|‹…&,™‰‚ ÎsÆržZH\™°š‹èìèà•
+"½e©×cv‹ng¢üÉDÎÝ$p,5Åwðâ_NTk ÆkÎq6Ë\š5L"à ]ù˜9ˆ¤@aœQñÝ>tbÙ 8ERÍã@AwÁÉ0Ù× £g²4—˜|¬³¯WQ&ð<grùçQ—Šg7²Ž'Oÿ¶¯‰±’"9ä$7#ºÃ QNÖuÑ~ wö€žŸ‘º +O:ÝJoŒ/ª·†` k’ P&þREÒî.Òšjw̼ï÷kiïåõëö•äa
+«µc]NŒÂw· T+Šø*óß·‰O½1ô§â#TPcØwõŒÄO&)s.)V3ºvŠ
+Ü—¥Ðâózr
+µ”4-õïíüÍÃpI˜ã‡M×q
+,¨÷.Ò™×jñ¶SW중§©S}0‘Ó-ÔžüÌPE`(êwZhd.Ûèá;*¯™M{º™Ä–dbZ<n<Ñ…Òc!óZÛWÛ”;™Gø郱ËÃY/í,mìª~âðªÿ¤‚‹–QÊØãÑ'6§ÎØòz2ß,¦nT ‡Ò®t¿åìf¤©óÚãã|‹5ך ¨Ët˜Þ»M´’+´Ý_-Ø; $1¶cº%6'(æÖ· a=`¤uZƒ/Òwûgq!)-k¤*à`U=û˜÷yÓä—
+àR¿da½èäí ;¼¼©IÖtÞ <'´“€fÄ;ÞBÓð5•³cQòEî’µ1OÙeyAô“ÂU“†ŒÛ½y'ø°”ÜË:KG¯ž‘ÚO@ˆƒ,„LÝ !°wµ”Âf$X_¡<ãšv ¤æf†ì*¢‹!/l÷˜¾Ú7Øœþ!m–buœá­»;Ô¡ Ù.‹ÐÄRi‚[Úž"äQ²,ÝRgZÌ9Á ÉÏèôÎsÍÅ.)õÖa–„~àö!Gæ­úF¯¾IäMWïôiBoÔü†tPÉ5Œ ‡®ø>óŒ‹ä$½ÿ¹1A}WJcÄÚ/ÏöÿjÉlNÁ÷;TE›<Û³vÖýi‹†¡ýìû<ô'o“JìH©h£üÉuž÷í’¡G«™BÆã]˜R*Áó'Ä_Rs@“;kîNÛŸ§Æ ÑÑy-…¤P?YSýä5é 9±Ü^ÞŽÆ~+ºwÐU i'ñê×pT·”$é7ÜƵbéÌ'?TZÒsµ‹þsÝ’Ñ¥µÚp§±ýb§SS¿0v7`v†h0É:æ–vÞϬÉë;¥:è>«‡
+ \`öZCK)ëT"6¬}XÍÛÕž)¨ÝòÁ‹9Sߌ›’¦°›Ë¹Æ&þp¼ªDö<áÒï‚«q§f ~F.IB°“Sþ±ýT™]î¬%P›3ÖÐÈ¿ÚÅíRé•WwaÄíXg“ŠEá·54®ûjÙû«]Gê×B‚#5ãÛüH™&ê
+[«•p§–Ęè,«:yWØÛ­K=Ú€³|4wcPjq‡ƒ:Ì°Sy¡˜`HÞ¡!?ÛžÄ)–±ô¿u,ÁHÉ¿8V¶¹ÍÑÉ”ïeƒYü’y¥9ŠUŒÀ{Ôø–GÞ%þ, |}(UÖú¬}“.¶”)hàáó²C£Kùs$g‰…™d¾ønªÇ»|rXvS½ôt 4¨=0FÛ
+—À †ä€(ÊÛ™ùýÔ¹…žFƒì+ºü… yøÉâ­øeÔ`å…©iƒ,R˜lø-))[ÑÐCÓ\`Ä««hGÉÏš“ªË`T“h×jc4ëÞók' ×z9ÇÔÉ•Þ<3á©SäcåÞ¶-/jê°s¼ÑÅd°UÀá› ßÝyÿ3RdtŸ SÇuôm§$>AP¶‚Û…ú™!m„Ñìû=ʆûsp0+ »õà{ZsŽ…[ùTŽøàâ–•õl°JÏž×C
+(ƒØ¶
+ÏFL©!äéhÔང/jôòÜõPd¾Ñh+~gä·mã°…[Ž´||_3Õ6«.Ù-ý;DU'bNþs6úLcp±¤ Ó&µí2ìÑá|A
+OC^8wuRÙëêq¼_%¬!,w}qç••ÿ4ÄM
+¯±‰Âñšj_=¬+ñ6èöylœ°êDFtBëlŒálœõ©ÉæŒ- _¢ì€¥®•”æ/p÷ÑO
+à7ûÑ6-JxU ŸÍc^ ;ý!îÂVÔZakußCN?.Z;^]°›;+ÆÚQvÈ |žs«»¼¼z6OÖógaÏk‹»'·™æÖ¤¤°zšð²Îcr×¾ƒ’ç2Æ;ìû±àVŒ¤Iý©Ò­ü¼å— I bK¡îrj¹ù³ ÿã£a¬ÍÄ{gÐ<¹²ˆœŒ$ÅonkÎuï
+'qq©d‰³é»ðRÞMÁÄ ‹9†ægŠz᧘¿ï™÷‚ÛCB¿´:‚Ÿ²%-V>vM±–•½iJ¸’
+²”Úöë@úÂ|d@u
+ ämúÐ%ÚùÏhj †Vøu„%\Ó—?{X¤
+èÔ¼“¸"ƒ]W-p`¬tœ{&kW†ÙV6WSMÉ:¥²¸!N<¤÷Nz~Ïõš×í¹áoºò÷7Â3†Yz2§. %Éàæä fqeç NbìùÀU¾/z`¤ae+“‚Í°¨˜ÆáͺšôÿR~ÙǵϋyøBœˆ®êñøÕp¬þ ½=U©'Å 7w%Æ®ƒß;ÃmÞ|˜6ý©ŽFùK7LiH9vŽ`:$Êâùpo¸þ‚“Ø›–zEì´€åS{7óeÐç5zû>Б_šÃs@L'‰Âz›b}<€w¯
+ÄñâsßÛòÚTVLèÕýÎñýÔétì/§¾
+òò#èj[õyÆïoòÉ/`³5mÄÎ`NÞ¶ÒùXhhŽ.ª´bãtQ¡˜ô‹soÙÑ?YE7­H%É‘gùnH©5'CÉAq€6£ÇŽ™ ûoâ@Ÿ”Òê 3Un D¹Å-ö1ëGðó¥ðăéa½ÀdÕ¢ˆA¥õH0cb
+qV_9Á½ÍNçÝý¾¦ìÉðhüqÜV()Ì!Oº
+\½V¾bQ½Éñ‡ˆJlGbˆ£Ë1/¬›¿+½h!¾­{?oú­pB$F ¾•{"Çö¶æ?öA¶húwƒéíà(‘j|ƒ5i>d§~×DÚ†t†ë,äÊüÕÀœe´›—0Æ'2›åIhi®CÞýˆ·x¥ÆVõ“Ëý¥¨7Åh ®œÅ¦—Ljû$¤¼†‚Øëæð’3±Û-€¼!¹xAØ!ã¦hàq–ö9úÊöÉÜÛŽ+xƒzÁ¾ÜØ&sç™Å[ñJ.eÄÎ…ÀžÉLÚ\Þ¿:&,ßE=Ò]H;¥±ù‡TžˆŸ ¦ç Ä[ÌÄÿW¨¿TËàÖl†<Òu+õPÃŒ²ŽZ¥T–PÑ™Zd‘oij0.~s qlÃÚÇô‘gÊã³dÚ˜½¡ZKA/ ÌU  tdÀ•›!q  „ù6]¿Lè½ý76ÌC"G¼"­Q3§RiC!Sèk·ƒõùdý†…)Ê„š‡ìÜs›)Í‚¦X‰Å™^íÞ%È2µ@—§°©‘mÖø)ðc²ú3¼¼ù…¼_šybìG~S-+kËKL¤³Z%å©iG»ìÆK~èq]ä·YYR"¥úP,‹Ì¢¹•÷T"=VYgDIwl¬ú2¯ñ݇¢qΦ8¾pú=1w?›gÝïp(Ó?dÏô¸†A‹(FBEÔé.’¾Èú»jÀy]ƒ µIŠÅÔÊ ñŠK¹Ä¿Þ²M{i¿I% ²Õ]Êã:Å‘÷h†4¢eS+×6Æè:\Pù|9œn:WS‰øéL5íèÒìÓHÒÓ§é ‰š6DZÚó¤PÛž'[Þ÷• ªãuø÷DiyRäëɾ*x¥Gë˜ ©W×"Ýsår÷BK¬ð˜Ù’F¼H]LÇÄÀçh|i%JÓw
+aS:—:—QZQQК¯`N-ê!®TF±ÅÊ:Ö92Á!±Ñ+ƒ|=ˆO€ÂõCµ¢/­50cR\O€6j&ÏžRŠaK‚š4Ö@Ú‘Û´úqÎ&›mÙçI{dÝ0•Õ¥*KKÝ`ק•pº¼ÿÔ)
+€ôïªÉ‡?˜Ó'gÆ6– šoX"S¤ó§§qj@Ž¡¼m³ôÏÁ²¾vÄ-ÀhoRÉF†úögÔK™:IÊ6y=n¤';Ç0&ûlá‡ôÍé¨Ý.êg,c±·ù
+›—W–ûNô=ØàùÏœßÈŸÍ óƒåÛSbsŒ ußíœbå×ÑFÐæõŒ°oà§f>w‡õ5ù­€^Îi½
+ȵï•ùÇKLÌÒ*…j¶Û…ä"šÁœ[ bFså·Q…¿%<’ g°µÑŸt'ØÎ÷°Æo2U¶³Ö M­â:y1bB‰ø·ZQ"áБصrvc¯$ið‚ÓOxè bû¦|«Ë1nsÈÜöLm ú\喝3}G»*S?¬z‘¯kÊK„ÁâÛCgÊÄÐ ”9›“ÁȉûÕÒyµ6J K}#ò¢ñ#Cüâøê„á~ !ƒ Ÿºù8=‡›„ŽšU„B¶7Šµ¦çW¨Õ@¬Å†WÏ^à’²LdhŠÃU ÙQg9ZiPg*ò ù nþÎœX× -ÑÍÚ·˜Fñ =‹¼¼qß3aÓÛݦ ™.ºÀKf‡{áD¤vNxE]E–‰[²ÝÌŒioŸ9'4Â\ƒ G(v¶¬íŠíél:ˆÙm:NEò ù§ÌHbïaT£HJéŽ2X3@såmêŽEÛ°)é|èÃÙ2‡Ò¯ß¦Ï¡C¼“f‚e¡šùèÇõmkÙĦZœ˜ã¯R@ÓlEûN‹?É£÷í[<>ËÉd’ñlõJ£Ìœ–Ùâ%#G ±žÐ±¿ÞòùR/¼BWÕ#-×åZÑMaGk
+/KìL˜y²žƒgeWžÅ6;YMGPí> ü ƒõ>/ÕÛùd㲕e¬B‰ù5e¯ÜójI6 -í²8 ¡w¾v"o«—ÕÄñ²-À+Ìî(C¬Š¦m§nx–¾:eþj›¦þ¢[é6ù´´
+¤ÐEϪø>bOdáˆ@sä"t¤CØÙ2ñüøþ¥TÞË„N +w~X3eúZÚKl;³vdMH¹1é5å+ÍC4‹ñ•Où'ÉÒq ÇÅÄë…6 Ý_²†ØÍÏa
+p\ \Ô»¸Ðø0Tól×ô*på¬6>]k!!¿ö¬ÆWȧÒ&áò‹Ø’—ü”Z òXuÇ\|Àn¥N¥M|d*4
+UÙ|F?ð%"aK°¤Ìw<üåM³Ê Þ¹äå×eÙ]ýGÖÛè<½6ľLXl&ÉeµÚ—LD2Ön™P“0Í }ÍÇï0÷¶Ü½’‰¶PêNh±3ØŸŽÜ–ºF”6Lº4lKkë.é—äÜtÞ´w?ÝØjO+U]DÔ|†ñ1¤†rÖNõXF¨¯>‚f·c3FàÄv‚RÓ– ‘
+ß½Á1÷¯*C”W®äزõ6Ân«CíèÆï ï:‰Râ.Ö÷Å‹|Vøö|]¿úˆ:NP¾½fÖà‰ Bü
+ëòÞåµæ¬r^ÿ †óá$ÝÒ1¾GBqN3^L®‚ )V¼w»ŸÙˆùy4×ÿ­¸ézûM¾<C Ç7~……èÉêÔ Ìøm;ý:þ0!&p@»
+”’‘}Õ|’7L,ô ·¨@u+CìʲŠ¼ZS9ïÞÒ5‡5»’%À"U³K½ÐÏB’Ë}<ÚàpÞõ×Ü°¾BRÝ“ºûÌJÊ¿5\yaö‰²®[¿Þ^JÒ)k‡ïõØ$z&! *…¼ÏÒÔ¾E>¼‘Põè ;ëF_u·«¤º¤ÑO.2Qñ¿¾ÆØ®l‹³7[½Š¼ozV-nd#9ù©÷&‘ï ¡,žnBÉH¶¨ ÏšÝ5ÊÇ™X“@‡×//Ĺ…ø:8 =lóEç¶n%ÓhWy=·äý´|+|IDØþy5• -‡Ú@ô‰Ž+Zéb 2ºž|ïNy¥RÇTüö©ß1 bqš²Å;e¨Ü×ílˆx º¢ÖƈcöïT¿?•ÝçT- Öžìn¡ R>Ä€ïù˜Á,)ýtUwF¶¥4Ç{lùY ° YÊ î.sàIž.<Sî 6~`ÙßË–ã’2Úš$8FyÅOÊ«Õ‰g1¶güØÐðé«Ý¸‰¢%gÙºÃ<ÕâÇLQ¸DwÙS½úM ¯:‚–ÿ\?…3:±zÑ’¦ŸÒoàÚ÷C™[ž(ê>7yr6 P;n¢Ìóæpn»Fw°æÒ‘w«¸ãlEY é–ZŽ«C†
+rnG0¾…6DPB[ÅÀ¸w\]ñÈ>m.x£ÙÉ’ã\qÒ9}$û+N‹ÃEhuÄG¥ýÔt
+ û<GŒdû¼H©þÓû‡Í‘s‡`‹]-…­0çúOA®lCü¸ã¼[èþúÏ%-„÷B‘Þ]&T®ÉÊ+™‚̯Gd£˜<\À£.%OSégWñA€íÑçÔ1úË”Âú]Q˜íúº ôºy²>R;v`µ£G¯ yñ„KU a§…|g ¶AºÊ¸?.™i{(en#éM„Ç7±ZsJY—(&"V£ÇŠ¼«äÞÁÓ6ØþgVšÛe÷‡®0:àõ’ƒX™tÍ-)5A¹çt>‘sùY¾q‘½•’`D¯}JÝš¬Îg¨ÑB„ÂñáDM̈ öª/ÇOãZéïM®°Á¿ ³§&݆ž”Y‚x@8Þ»Q²7~æí¢32T^e‚¶%)¯Íä…ÄÉj—ã" SŸµŒ²IÍ Ëe  ÌšcL¶SƒîÊ=òN&?‹joŸå“jt½Q5ºüšÈJz°»ì¯V»}fÜ(™}4î;Oß
+Ž1ñl~|×'ÔýãÌO¡HU¤öŠ'‡M˜À+Qz°Ê’7.éß­íÕlLõlänÊ:× öì~ˆýü+3u0#/ü‰éNfÁÁB &dXÊ»†ûÞÆ×êó7]‘k^ÊqŒŒkE’µ(®ß^„¸Q]›yT
+jOû3R´ù“XcjïSm–اM‹¨¡ÕI¦òµ¾¨ Ð?–Êaum—o©ô¹
+v|TÛ5‡aжŒ‘…áü\x"›ðÞP×>†ë!Dt¾£–GxÍ ©©=kt.ïfPÁú]t‹ô³ßJ^«™ÜÀöûöÀñ|eiWã6w`߶”Íñ[üàiÜ¡e l3¥}£öÃ+yoC3¤ñÄÿ¶kÙzÊûÚ[QŠòò4oî&²ûõò;6ÐË2Æ’ê‚OE€”y¾í8Üg«:QåÎ
+ eƒÆ-x½ FW]²² XìAdÕe¢ô÷¦J¯¼¥ø$Er$+Ó´š¬æÁQxvEÓÐ}=îýývT.GªèŽN2:t8D¼´b²TãÒÝ®®jÏl8÷pþ: V£zy¾[!~Ì#ë\ºæçé0<õ+ œWùrU°n•ÎÈëAËAWrBw‰ Ž‡••Ðu¯´eàõÜ<ó9µk
+¤UEd&†<´Há#®B[¿Hd¤Ó©Œ$PmüÙ(ó(h:Ì¢ÁèöëŒÙî%HhŠ¼Ê•hÿùš#o×·‹˜ŒŠC¬,©×¬QýT…±A~ð^±%’Kd¨èú#ÇÐÎg»˜r7›Œ*w¬†TkÓ÷AÝ«ÆŽÕ¾ ãwéÜgPJ«âÏ™wìWÄáŒ%p¹±`d¡ÓôœBå˜en<.!ßLìy›)%]±~v(É@íU4Rw-_ ©¸ÎÙQæÓñ íCÊhˆôýrQ"¾vÄý;^2æV X¿¢" Ñ.ˆïìeæÄ6ÃÄ0Hþ?`4…ÕMúhõl•€{ž(Š47sƒÂL˜¿GxÚª¯Ûj@õR'}”QëIØ(õ0?¿ýö×8ǘ‰ú6pjHŽÔ4ú®ç%æ¹Á<©"üåjN‹î„9΃(‹©M²}n&aÎQ‹Ëâ¡ÂPO"Àðƒp“Ìû­ö{Ífnp·æ³K¼Â xØ–ã<©Nç±JžY¯—êólÙ az“|âíóöµ¶jqëXõª
+ôÕá ”Éã0Ök(!ÅÀ<eø¥©ÆdN Ú96sÏzâ)²(‘xÝêTõ}ÙIaV˜ëùjÿe†Œ-yºÃžÕ®
+ÕÔµÃ=ù.LŽ‚Á”­~¢§IQ®9˜òC†.5]ì[,ÒG*V/)ÕfÂÞØ—¨Z(Õ_Ñ‚S2\=ç0\EoTÿôV¹ŽÄ£}¾È^“°DGqKðyŽ”ß` KDáÕ›e5lžôêûnK!Ø°Uá"ñÚE»¥«ÆTî·c½¸M+t>ü\¯GQltÊÓÃkHHGó¦Ú%4QÇcrõÉ|Òª5ÁøH ò\L[.þ;§ónüPj—ò+Ý„-è°;?"§¢’º/iüá%6’ͽÕÆ€=W÷³ HBÚ({#‡E/âÏý÷–VÔ4WîUÍ4ó*f¬¦Â…bŒ¥…¥«dCÿ®Ybe_—1JjU²¡`u¦?<lô)µ³NaÑåB(9±<õ  ì³àÚÓV¬5圈éæ: H„ÒD8OZ^|¨·Œyh¿.ZTÒ!ƒh̼ϰÑpnø·%<æZ†a·Xå…°àÁQF} h2û<«oä–ô'¤~wƒEÓÙ‰Ÿ)趘¹qul-èï3Ì~€Š
+ÃËô×Í!ï*m©:ú0±SŽ}Qj}¿†BUk 3iÁN»•û.q¡»ÕâÁc¯[‰¯ºÇ¸:«M‘±ÆàÁ©†‘V ÊÎêwÄÎy@Ž¯1€wâýêë9bgìçÔ4]‚2w”KÈ°½Klx3ç›ož\Å;ßøum¼
+—?6Ï0 1 ¢#¾<QÙ\îø™‡fÎp#ìR¸õêgoÂç°Ùdÿü œòù9ÁÇ©} 0rK(Žݵ®“Ž¤þ¼%RPœÀêmfoNl¶ûþ{šog)E+·p÷D$ŠXÂ<Z™æI›‡®škë[š5í1.˜NÒI5À¥]*g(R;¸àBÇPªjˆmñ«ý%LŒ{Ú\LlxÖÉQ4ò§·åç›Ê4©¿Èˆ"O©!òV&ß̺Ċ^wG×ôÎ]g Rÿ» îUÒ~0Ï m{€þ~ÍV ©®K×sQ©­‡òýèÁ6q²aóô¹ùj]þQsçSÀŽ»
+”*º,óqP¾%ç5È3ù³Såóf˜ÿ|yÀg¯^›7IBXü,ºØ"i«pý$4£›¹×¢Ï
+> 3Á•B
+e©ôƒýŒ8û¦å±uÄŠUë= Nÿc‡½Ì»ÍNÕÇ:Þ»2ieŠS2TLJá½³”Ð
+Z{eËjkJ©gQñi.WÔYìùË–þ¡¹7<dæC„öþg$ ¶›˜KÌèZÿ©7FûzLvÕ ûú ÇÁÅwJýÝ$D
+–ƒ,À­uÔ¨ÆpZý•"“Æ<Ï÷D­ÀO+ÅUm“Ù7
+ËÛW8ý ýÒôãÄ·Wcv Ô6
+ߥØÀ˼o¨/ÔÄ£•8:¿ç«Õ©RYx|‹ôVÏ#b¬óÓ7Bzq`ÄÇèÀê+'=£Ý\+ZÓ
+È$¦ôG­—i4†
+pˆ©†Š+ Ñçã¯VªÑmB…мȀã
+ooÂÑÂ×Oâ!S'!•d|aß¿?ƒn‡ðfÛ%Ù«–øGp‡#¾ðVô¢Ù¶õ; 3´9ݯ˖g¾Ì[»Õ<ŽMpýP$Jwüïnh(›’«)¤Õ|?ÎU¢³ÉÃjüðDòÊa"»ª .5ðHƒâ&/ê S,Í`ë•Š8NQ¨šÉaÂ92«¸[Å
+• ÿú~Êïô¥ÐœL8×Ào¨ÿÞPHš-¸(e2?Sc¨HXÈ)÷F9“ˆ€V¯Ú›­§)™Ê„À Š´ŽM
+ùd@üÁ¯†½Õ.J¿|®ËPß©ý òü-oN
+LÐù—³œ–i]¦Ý›dÈ®b‚…ìñÄÛXÅnÑ2äŽ3ÆOVÕŠ‹ D¤ÄÃu)=§Q­SW¾o
+4,ÁrâØÀÞÃ5’nò?‘º¢Qj6--mÒ·ÙÖ€þ,΢Ûq©:­V <ìS¦ 4e«tÉ{€èÙ84
+|1ŽÛôP’è|
+œíýIßL0{XÖ‹Ç„¶}_¢+ª‡Š ?>|.t¤… Ùb¯½‘ôæVáø Ù EÝ
+®ï†•óI,ƒàÕ>m—øÅÄCF»Ó²¢Žè–IRÒ6¾“Æw"hEí» Ó@ô U’×eµ;lÇ|>¤†¯¯ÃÖ›`ôâå|>eð|ņDKùVõ†µYZöÊU-´2|?aZãG[\q+„Pst¦œï‰¸ALa‚h1
+~µÈ-º\ãžFÿ,±uV’1!ÊwM¤ßþuÆÙ3Ó/é“ÕJ®i+Ap)•‘ƒ8KXÕV›Pv¨¹òZ­zj
+F‡†/ŒP*BæÍLêii­RnÙ¾ú5;ç"q†vIJZ|ªu&¡"ïZŠ.ð–ÜMøè+”IèeÇŒ ¯TÂ8¹áÒ¶ŠúƒR3¯Mp¤‘BVƒõ¸7Y|‘üÚJ/qŠö·GqÛ®Š”‘Ôz\Õ¡9tá'˜Œ©'5ƒ¶~ÃÚŸSfüÕ¥]F? i‘Ù<<ó.ûxM"ýÛz€´ÆÓc§Ák!PÏ„âAËHÉ|L?ðѶ@¦vüз΃=|n¿’BPO…ÔU´ï«dÀš>û:ÔcŒâtJ:óòÙ¡ÓkhaÜ^br žëUpõt¢VwiUzhç<YEöµg8t5чb4;öáö6å—‚_Ûm}€reï{ì•0´´¸Õ+C¦?Ô³¾¹”ê÷  wUÉV{¼,å Ò¿¢‚eÜ(â¸ÁXk ÃÉAGdæûv£évÜaõôÎTÖÛK\&Pëÿ~òš£|Ú ÊÒ~žÜs5Ñ÷nòðÒÊvžº~–ú¶wOžŒ_1–­ÓHŸúÀþÙsk(Þ²mÐnj¥W³—°&rÊ:.\åZM_À°ºAÆ¢Œ¨ Çp­Xo&]î!ŠH¥¤.Sémœ* 6Ũ2¶„PÏ ÙB:P§4müÅîf#³ ³Ø—4{hcInJ©B,ç´957Ê
+ÖÝ}7ûÙÕá!Ûù®Èºeª
+žÙ](s -¬Ï47»Aβfc'|ŽÃ‚ãú{PÓ$ƒÌ8Û`›™ãb/é·!õš® -ðv?Ar‹çg@WhŽ¯Ëqàp ¦aÓ<ïRæYe, 1ßÒžõýSÿ¤uCóu=²•¸›iÉJ-ä!#Š¶_Ïn)Uh“Û¡»S ¤ TŸ ÝáÖåe¦/Á‡Ô®Ð6t¼à5ûsù¦ÜΓÛÁG*ó##g‚mN1£ZLƒF k¢e𠪿*@ãQ=þŒÿv¢Ò,‰žûÁŒ«'HØþðJZWh4r×T¡¹š™Št®ŠÌÍéý,V9‘Ù1`ǘ17Y¡HeÒ7ø%FÚ¿stËóv¥Zƒ®<›OÌvKÔñC?O#QëëÃDnDiD›±]«ÍV|»ùPõÀ×ÑD¦±3Q*ÔRFl1R´bÌX&¦I×8/n£¯>ÎÛõ+öÏÔY’L8W[íaèÇgÚ‚8ê4<öW~‚Æ8ŽH4ù«&"6ÚÕa^˜ÅÅ„ñQ<ö‘ú¾F­æ¨£'c^+±¢q·ë}ñqDö( ºM§èóZ=ºô›Þ–!+Ó)Ðo—ð9Ñwë¶i‹(ÃèŽQ'p£,é‘V.µx?`)à°Izüæòb‘HÎlWXãý‰mõÐH'|BŽI«4÷wÒƒ}è$æ‡e°›¦ñÄ—¦·×\¬ÁŠ>Ž¯nL®ª=¨wèÜÐ
+^×…žº
+`YbŽíg§å %4o‡Êô@X³:µUz$aˆFî<w6
+ŠóÀŠc,>ìu{À}Õ[”aR»œM…:׃TõÆA#ñog[f†Ï©ÖÂQÙ#l“Äéáü€_M\‘L HKc´óà )ØR–mPIY?_Ü≬©-Ê4Žíº _R/ÈR[RgnÕ-ÕGR&LåZ§eæÌ
+¬ÅW¥Q7m]\•è”‚ÓMJmøˆƒa°Çþ_¸!’L&CG˜¬9\Z¸ÚÖèÃÑ'Âj+|´d Õ,^»Ê ßª‰Ms7@ƒ/»œp¶o±£—ïLÎÅÌ‹XÓèH‡R 8Q½ pw½U±®çd8#×ØtÈq
+Uñv?ú>_v~'ÔU€7¯fd¾3 ^ãâ3—Ÿú¸¹A{oêâšÁaaÑ„[ó[®Tý>tÙå9ˆH_…ç©õQBcû
+endstream
+endobj
+17072 0 obj <<
+/Type /FontDescriptor
+/FontName /CVFBJK+NimbusMonL-Regu
+/Flags 4
+/FontBBox [-12 -237 650 811]
+/Ascent 625
+/CapHeight 557
+/Descent -147
+/ItalicAngle 0
+/StemV 41
+/XHeight 426
+/CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/b/bar/c/comma/d/e/eight/equal/exclam/f/g/greater/h/hyphen/i/k/l/m/n/numbersign/o/one/p/parenleft/parenright/percent/period/plus/quotedbl/r/s/semicolon/six/slash/t/two/u/v/w/x/y/z/zero)
+/FontFile 17071 0 R
+>> endobj
+17073 0 obj <<
+/Length1 1608
+/Length2 13401
+/Length3 0
+/Length 14232
+/Filter /FlateDecode
+>>
+stream
+xÚ­tct¦Û–ulÛyS±mÛ¶7¶mÛIŬTlÛ¬Tl'ç«snwß÷ë_Ý÷Ç3Ƴ°çšk͵79‰’*½°™ƒ‰¹„ƒ½+=3@hgâæ¢jl/G/â`køãd‡#'u67v:Ø‹»šó
+ RWѤ¦¥¥û§ç¯€‰×FþœtZÚ(þü¸›Û:8Ú™Û»þø_T57¸Z™,€¶æ
+·¶ì`Êj™“åZ‡?2%¦;ÐÇ >æXÞ¨VRXãйÃ]eôVÆÐ4ÃóÑîµtêø¾/Cs0Ö‡eKÙ›n~YHàGJÝ_„ºIÑÉI{ÌhPŽ˜u¦ësµ(· ¡ÃÁ¤qðkJYÅ ì Šp¦“Õæê7u ©{Q Ù£#’¿iFCfJZ]ñéEÊñïGÊ¡ñÑ‘áÞÈþ}|Ú¼Xr^wDŠ˜@§<|Aõ*Ÿ8“2攡šÔ¾ð~u*ÖÍÕ¬æmV€Îlã7ÓuŸ³zóç `©Wƒ °ÂÒ>OÅa?¶ˆõÒ4@Ç:þÞkFšE Áþ½Åt¼ ü€´ÌeàTY8ÞCûõÔ7ÆÝ:¶ÌÓ‰i›\î‘ŠÛ½<¨Î:ãY†ÁÀb†—¹ÖÄ Ùæ)þZØdI t-¶ Aʪ“°'›¦ù”â€P ÿ
+»‘û Ú_£9kåI j]æXs ÕÍÀЄ  ,ô÷±_pè¸4Â^…‹Vµ"ë1ò²Ým›î`›v;Šbož¦PÑ ÇE¯_9]Ùè=c` ^J9§WIX(£ÂolÊJ»D§çÂH´LAéÍq½ï«ÐÒߟf¶r­îH÷»“pš¥ëÇ)˜×¾£]:ªÓSP ª}Ã^Nƒ’Y}3€ÿñÓ(ßéãhêLI ï§ ÿ]ÃëjÌ,ˆ+ú<šTþojœ÷1T?!lO¢Öã 1}8\»;<G~4á>èÜÁw×kƵCËßæR1³1ôG_£¼ƒ&3‹æ<ø2àCµ¹)5Ôïòs9â„ÎÁ²+~†˜cৣ¿‹Ø}¯'º!À¼9$z¸x-hP­U+¶z·}ÕiðjÏ­PξàÔïV]ä4¸º-»¯¾÷M±·¦¤lˆ0ÿª3ð«6ÆÑ<´SÜÚx&¿E;’àýT$Ež‚Ûy¦4M¸)XÄœ;;5Õ}ûÙõ„6§a(;*Tskÿ!æOg´ò­Pö}Hâ˜Äo`OUÉ)Žê›U¢ó
+óɱñ1%ÿjÓ犚ÅM3‚ÄN½ü¨òÞ»uE§RŽR˜˜ŽESŸ5Dlôéɸ³ 6òw›Yë°oÌý.F~¤ ¥©43‘5aÁ  eT)•çª¦Á=›cInˆŽá:ºY0\t×o»yÆu "l(ƒ2„ZØDm<ß2?+}*Lð•î L´ég¯ÂðŽ"·ÙËä¥ç›¿¼Ö¶É¢<´ª[ÏÐ gÔŸˆ” p‰
+šÍ0vj²˜€%’
+ØØ¢n¶[>0H'¬îÚ'm)Ç„a—× 2<æ°ýèfÑg ãk2àVµ—Ù/'Ą̂+-º6fË~Œ@~7õVßc÷˜H²8œë!p
+ña&–ÖÑoñæ@°µo[Ÿ$”ÜÕ(`ËC}vEð\,Ž{r5Aç·ì@Þ•^Æ¢3¦ù™’?Â* pA§¨ÜÅ¡B÷Îé,šIÝ»Ž†³i¢‹ž}©³tAî¾âÆ–¨LóU§Gúv3¾í²jÔÙÔ˜zëùPuR6~ôÛƒ 2 ›‚—QÛbMDú—äÃWƒ‹gJ„¬ðÕVÔ徕l¸‚j=˜ãf· s;k°þÛïÁ W–Ñsä˜kK KçU”Í•CÛj2AÅ`Çs‹d†…Ôr"ẂÈIé¶F×Ht%Ó—<jGjíÊ+a@—þUÁH¼AË'÷x—Ñ‚\^(%\Ï1­o‘ ÉñòÊGê~Òm:øL/³r¢
+ÝäŒ,Æky¼hŸŠÉ{6ê¢}çxÑo„\ñ
+„Ãxa°Ò¸kc䇩‘ÛfD<0ÞH]éêju+$!¼ºbˆä•@A·Óá„ôýÔi¼f³Jžñ¾%}µx>P4 rðõ–q›'Z^0…àÝ¿M@xm]ûˆoað¬â*i~¼6Ag¼›±dŽÌbR‡3åRáP}ÑuTXÙ…­‡;3es¥¨;³‘‘í<ßþÃu A½ãƒ¯jŵ¬OS¢î)4n“ï¥1kYþœÌ«Èzˆ½ÒnûUš¾Ý»¶qW„ñçÞ¼ªIsÐì`Ì4 ;µý”•äY+gwÎÝk[3ÔÊPœ64£âoGÔÕÃ!1Z¬¸žîi‘_Á Q¡>îf™lÚÐ)2îØÅ>ðµe'V8›…©5Ò`BÍ͘ÓœëÙÒAqÕüÝØIæž4:²ÍÜñ)¼sÙÚ—î±tW„ì¿ÀT¢ËGÌOµLÝÍGï Щ·Ý³iás’7Ô2c‹gì.M|ø±t+ ½ô¢ )œ§T¨ß´d.òþ À ‘Z%áð6Œ†šH1­L>·7ÌÖF`î<èiÆb&ƒ"Únßj–Âù
+£ã·/2ýÔ¯7¶»ªÏ5,’7ýë½w \Aþ¡¾öæ«° ‹&’_kv„æ4X«†ÆÕ‰Ššò¹?…ÑŒ[Ó©·}}د/ò­?«„Ï‚…«påîø‘ú[qÖ™“«äR×
+“g<OÞý@—ÝŠsFõw¢Gªñ×ÎYL™ÂLŒã©4ê°cð¾ÊÕkr*¦™”’°Œ×™²}3Þ¢¥ÌÍÌvfè».N%Gì/J®ËhD0{MĶØà OK.²Íj™%ÚP†ÿ±üa_ B|ª—Ÿð©`b½°ü£§~~­;¹ç·ì‡ˆÇoCRŽV뤈[7wx C¹ú=FB#Rœ-LzÆøÕà`#ñ¼Ç•%6¶oŸÌ9Ø'ÚÉñ¨hˆ͆w
+n-$'ö£z&ÛªŽ?åfF8°\Âx…?<„üŸ–üLepa¢æeAàò̺_t––ÏétJ0é{kd^?+úfS0&"yÃÕpÔªàœa[ߟÎ*õgжlHBG3^»p¶ o4mMG›µf{¡E5&Pçü¢B.†*µDË{œ’«Ø@g‹Q@±òK²ºn/÷ Gtw c¼‡ì_Úåˆê³f2JL6ŒËÀ=ãKDô^‰ ªúó;ƒ~§ ^JŒ?¯Ý5lŠÃ‚#T|½6iˆ®šIMÞ™¬F‰µçþîʳŒM”«€ppùm °Rîy24ÿ‰ñÇ#ºm_*°Y~œÇ<RÔ¨ÊaX)¿Èw"¸aÜ.˜l"O¾b yÇI¶Ò !Þ_yRT"JëÓ’+á®=@æ ONÞ$™Ü;¥9¯™ÄTȲ@¬p”J€©6´4)V¶I‹«Œ k+ñËw°M`XØ+â‡Ï6M$Î1³ŽŠî)èøÈT—‘}ˆÉûH·>êÎ
+J§ÌCþÃ4ꛇÇ”tZ6„mM2†Šòõ$TÛ±Oo@U–ã¬E›œ† ¥ÌNBµÒ.’¶$›·U9p\[Ñt™Yyûí¯ÿ;2û¤^Š
+êûPÞ>FY¨ ®¿Ûls°”äYw ig°-‡8”\S듲¬š´=:ºÄÄÖÕÓho-á–ê+¶·.“ÿùWû\|=—<3ôÔB[U%ɤ¯Ç5ãÔîQÎ ©ü *{óå®Øò¢> @Ð}9¯^ÇÞ/æHð¬<Øö20#Þâ¯ý\9G…ùÙÓc–„l§1¬CŠ\z”K!Æج•Ì¢ò+fåX2pdC]é…1à¶XWcÙˆuÚÛÖ0«xÚÓqœÒ ™P,¡Ü>¾3ðý|
+ÖõN Ê%V·ÝîðwéK"›Œi…a…é‰ÝA—y$j¦ù¤y‘EgRòÈ×ñ¸¨¡•°1¹øÌ Q ï‘ Ðþ—&x–G",ãv'ù(¿b_‹ÓÖsV!ñÚ$ñÈ;‰û®ÏŽZ⇾vg{Ä"ÔŠQe¢>²pŠå†D-V¶¥ës_r'u§ö«Éà=Å4)^ZŽ÷]xsí UK#¢…Ó?‹ÖÙ_Ôâ„£Œý0û]§ÝßƲ¤üëK''o´² `~¿$]¨z›V£Ïâûié3ùI”Ä;s7òì V
+™iûyãF¹¤–aè'‚7W(°¤öÄvÕý~(Ÿ¾Ü”÷Üöõ—Ê,XĵáÏDZ°ÏŠÆýÕ—FšŠýÇ^#8öLi=L”M¾OY‚ð>)gžHσwbQŠìJž6CZRT=6³€ ÇŽuD©‘tBÿ€žší–ta2¬n~K€E Ò0ùšá{Ùmx¼Ykð×…ZzÏeº{'ÀeGJ†qfr(–À‚:©½†™˜«;Ì;y¢Õ–aÉïÄ!÷ò™íË.
+i#Ûpø‡UP*DãÇVèÀ9]4ø²;v-\-IŸØÞÒ86¢³!Ý2
+R­ÓùÝÜ}3­ÛPTZK®V­Ý(#'hñ7-µï-¿­‘Ußhˆ3Þ»ø’©OrT ¹ðÜ¢ØÊ)®ì‹ÃÆ©¬œdn›ü ûE-G†K{Î"ÏRc;°²Ö &2ã¤at&CêX£NKz{¤_˜'ã·v@ô¢Í|«lâJÙœ·¹ËF»n…X×­³.r äŠhü’BwôM>…”íät6ô5<ÀneÔB_›µo÷£°6$dwÀ¡4†•%Ìdš`W-"Zwiyjû3ôËs ´Ž¶sñ;‘='t
+¬R½$j}î ¦l Ñ@LûWþùZ"‘ž2R(kÉÐ5ÔW-`’)¬ç>›²ÛøèRÂÁ€K__¼%Áf`Ù¯ßãx·Î4ÑfK_Ô9οŸÞp_f¿X#ž­TevÎø Ý ¶ÄF‹Q³’é¬#IÎÏ—W£¾kd'%n Bï.SdEød'гƧÉ•bvO“J/™ÝXÝ] BX» eVÌ Å>Ü7¦8;ƒÁ˜3,2îfÆa&ëÝ~mG÷s*˜A‰TRfÙKRn » 8£1»'Lâ>ƒ<óØÁ¼ÊD=†þ‡Á‘½ü¿¾ègPTvµåíÀŸ-éŠØq:.]°|!¨aÌË`”DnÓ7qéз¡nÏÆWÃè_Û•ÿÞOîýsØ©ÿ7r‹M0B’Ênû—l“+÷EÊû/N`³~šä‡q~ ùrº­ïÝhë;ü÷šœÄ¥ß˜~GO($¨N²öf7ʳÝßrÀ}Ô´h¿*"h›BÄ:ŸÇÁ$.ªu{¹¢žüâðo?J»¯j jÚ"©$ž8›/¦g«ò[=.å}Zpm¿ctÏ]PìÄ Õ¯Ã]p uð_l(äM7ýÉYƒSï 7ŽXú÷‘:cŸ›ñr8ÂôhÖ½˜½'/$H»úßúŠøv‹t\,zú_a%“`‹÷Üïhn²’³éo%ÃÎtyny T$ûÕ¯ÝÛ¦ú±¶t{˜Äí({W`ƒ€Òd›ÙÅz1Õ5Ð÷{ªŒNÎ$ÄŸ.ˆî¨¤ØÆAà•¨=ìЙ7¯'½óyÊ7óc$õƒÛ gv÷¡u‹ÄXö¢FÿP7š+N ê¶QW6‡%ІFÃ@­b¸ æ‘;BpžeÎÁ¯¿#3—”¤)òª³ï!l ¶É…˵
+Ó:OAÂЄ-û¶02Ž:²ÏzÏÉÞM䀬æ9 Sâ±Kü˜ap®%‹áW5ɿͯLòͧ4MRb&r
+xîiS|ÔÞüé>þpÓ;ÖA4cÚæ²á[Q{ú¸\…fdš{,âT1Ïeì®z…b¡×J- kqzT¤:;ÙŠDÝ
+ÍÓ(è³ÛÒ ´æº|8Sä:¬Ö:Ø U¨g—É\µo4ÊðrÉ––¼–:¿µß+h6—–lœèms„O•¹UÄD»€š•L«›ÑÛ*¦è”‚©Gÿd¾$ÐðöÚ,G³Ç„%ùÛ瘼¡[UËÆ7™XŽœl7ó÷íÐw•˜1
+Oi'I55`ëì6irÞ°·Ñ‰½ëf¦fÃ/a‰YÆù„eᙊ#ö`|Ü&‰*Y—!á<æ†q±Ç:5´ŽgŸ@šÎÎ3oA\kø3å‰æ<j e<- KcõuØËPòc6ûým°»…ßBeMo.}J脹§®ã ŽîMà^Àj׃Œ¦–{ós}8ü¡ï-fŠÿliêý P!¡Ë÷ ¨ÍÆIÎù^DÔmñÎþICJˆ(,ìâΓèªÔUs‘Ž³ïŒùÏ’ªaÙÞ¯ƒ§n‹ÂoCÏû£\-Ä”DÀ®¥ï³Ì•'ße#rÀv¸tž{ùb^ºuF]‡dLgƒÒ+ŽÇ¼m¡¼OXæpÆ>€¼Ð?Qã»ó$ÞM7Î Sáhƒ!ÃùÆô(±¤ãwwûE‘Ç“˜üd=…ê’å¸j‡NüoÙ82¨‹Ø†àÆk^güXq˜Ø ]…ô¯¸ýùpâŠcXªæ@~0§–2ælTUJOçk+›è©ƒ§KƒëE[úRwI¤ê$ãþ‚ w—]A
+%VH4C¸Æ¢ç!WêJó
+~ÂÉìëá­.g–B¨ý‚‚^|‹‰ ¤ZÕþ¡(}HAQ?.Í^ åŠÃ6kÁbn?©ªã›È9ã™Ô¯EMÔ ÍÊ#ÔÉ™³ýã}iØÑŒÔ2J€eû£ÕFE˜»¥ÄGJeN´.ÅjŸïl—‡½raS
+ïîª&FHõ
+5Þ~Àÿ˜noäPU­¹¢ù¶•˜J‚ù %meŒ{ü-PDvd÷~c'1Bkï5§ÎB%+?£[&ëü îèæœÄ£ÎÂüÖÎÁƒgð„hŽ4þØH˜t˜'éYQo+ù‘\ÉH|•“²ç÷a¿}5UMÇhœÛsKsyü3¼W0úC£4'|þáAO@\|¿ÒšëºÎ1ÇJ]yœËššè•×ÞáÜ,ÿ¡ä.%a¹Ù† ?Üfj‹|Û‡â8šSs#SØì˯4’=±DYmíáßë:;• d´6Ò" 3ŠNåno“ ¨…ÕßšdŸÖ ~¾—-c‡4Ûÿ4AzVsKVøfØ'¼Ø,J(Z]‚ÐFþ¢¥¾;=Æ¥76ÆM€æ”=Ȁɗ’ã®eà¡\å$Ø–ü `LíøݘñkC8Ló³fá¶W²ð˜´à’‹ûM\ ¡^zL,î-j+ÐTë6ÑÒˆÃQ‡¦FÙÑN-TuiËÓfsùqLË"îAÁÏtC³DMðìWžMþ÷fÜ@— HìVõ.‰…ºq.†GDæúr
+5jl1µ‘wõeQR
+ðHZª4£
+œjê¬Í"ü"óX^m‘H†®Ï£®X6LO¯‡o̵À~Ò¯§¤œì-¼/i¦VÜÛ±Ã2•ÇfùÓ플¥×î<Sn:ÏÂý<4™¯`ˆdj"bš–:ˆ×™Î–¼•¶f™¢¼È,ö¯”cÙÀ.J÷cÿì.=™µ˜O}øq°k:üYß$YÀ!÷ñ ¼ç{Òîx¿ÛÙÒ$Ž/Á8ÉŒqÉìK€?–ì iBr9ævaVSá@_.eÓMº?6\ˆŽŸy# ¾› mÄ ÚT( dP$½È«àî9/TGš5¯•Ü¾>Q¶ôqÍK8öäA)uüK€ e°Üµm-mÿ
+ã>N͈ÏàrŽtÖ-à&s0%)L\ *¶ŒÏVµ)Y±$ì;—Z{Ö‘ÆÆl8\däà¦%Ã’^G
+÷„u›|Þ£lö0À1ÝóöêÃoKÃzG±œ;'ôHÏ@æ–~Ñ“ #u¾”J)ŸYíkÓ6BbIýÌ$&šÞÙ)†/EÕÖ™ø„H¥‰±Yªí¬=Æ"þÚ”Úš7„RP„LËX>`à)Ž7·ÉÔ62¹½î¸Þ,’ìëÒ“‡/·+îµ:~ µ¬ªRÑ}E¬¢-Š‚óŽƒâ¨n¨Nþ–<¹JG¾s ^ŽV"p.™2ð5œDèþØÛ'Ï©Hƒ6¶ý²Ç ±éɹ$Sȳ×ݱ^Æ{…ÂÆø£š@5‹cÓÐÊç”çÏ|ÖˆÏX~¬à{~¿ʃ^žtÛCJ•dЛr$1qh²±Èò¦pïÃ}_õÝ`íÚÙçÐê€9“a§M¼ˆ{36Ù„KÜ—ø";²Ÿq«p©¥Ç¿ÏÞ– ­ò(f.‰œÑj#[mâä¼ê„|yßf8>ŒÓ6ùˆBç—÷Ã4ñ">,„¶º¿éK.3HÜ)í6w/—%€OJÝilH¯¶Iu¢ñ}ÆåÀÞDUㆩø(´3ÞÅ<C0‚™én(.Y¤ª$ªAÿ4^s`Ò=ΠþðÈñ?|É•rva~’ZZh‹Ö FY_ë~TþFA©£Ø[Uè}XoŠüb8µÑ5ãÛÐÁ“F²`«Üñsg¯ðÂgÊè|éNmÚ+•I3ØA<.bzLBÆÙùNW«3zÄw%ÞGFÖ‹,bq¢¦zc‘`
+4ýðnêãe\·ää#j1§ú£¨›ÞC¼u"™= è1aSy VJc&ƒ!²OõÇKîØ÷1ndž”“©¶ð@5é§vÖÛ8§å½þ!Ù$1,¾ù»u¼ë0G÷…4aï±µ!â–ŠÁ!c&U÷Ė춈dMapô±±n%îpêBÄoWÑ7§Ù6‚cã®h¢¶Í[2XÂõ¦eÕo¹Ü~ô5X ·oª¦kžDô³ ëÑ|Øþ^{KÓ¨Pâ_ÂP¥ÁÔ¢‹Ä»(=$§”YšFd}NjC‹ÆÞ€(k9*Œ4R,Ãà8C[|Å­?ÙîäSz¬ÜiÚìB-ÚbŒâ“œöbÒ"GßXZ,hQ>$½¥iöž|ïô÷zM2RG]$c
+\BØk%¼ªÅE¡7_ª ''O ýâÎ:[ªU%ÄÀZ”ÈQ ìŠLGŸ#ˆUŒ]O4‚¹ƯݮÈ'Ic«[
+¾ÂŹ@]ìKµºjhää\«`'ää%’Æ.ïm˜A^;ä™dªß˜ü‡*‚yˆtÖ­à{(« 5¢jD„. o7%Tˆ%>£«(Qð ê1f~ÝûIZ…ŸXÓ Yüš² 5ýê
+Æ!:Ϫ%p·Ày.ßEšj@´ø ©ž©RK ¨c®4P“Qç~nÓ˜‰îV!ïmB¡{ÙtÙß`Çøoùš°‡C˜ô“Õ|9”Ì„_ž‡A{Éu@ú“BŠløâ+là‘y¤õThƒ-À=ͪ²Å©1äUC®'(-€ø54O5K¤rjÙå7ÚšZË%Y‰”¿Ø"ïª8È⪻Qí/~`wجØÎn;‹^ßJ§gÍ]SjJ¿r}Z!ç«iI²§i©ÑÈ?¬dFé°ûSo÷xtÕ™ÔO¸4=Ôµzä9Q´ô‰zKTp¤š`Àø¸ã£ðœ*ëE]™©}ÄK†­äëÜm#í’cìÆ:©”Ó]( 6TQX®Œšˆ'b·4å
+lÜÒŸ-.í‹_™ea>ÐóÌ3*XÇèƒv¨<íLýZW«nDÓÆC?Ég->ï(“º¦†KŸºúh¼¥«R6Å!ߌT|8 'yÂ{_BáÏ鎃³*5[W¿äY5“9­+'~ßv¦1Ä –/ Bø=0¡%v¶e“·ÇøÎ e
+ƒçJm›:—w[_Z ¹ó*+~: Ú÷°¢l7«óèH¯L€H49:\Ý8Ëž5k\ö™gs&Ás0Å#6 à-Ü»á,5£j s°7?ԵךøkÅóô‹
+ñ€Ì/ãÒµ>œÖR꘰æâ˜þÙõÂ0M>˜××cjVIø%ß ä½ 'ð:“>‰6¸@°¶§ü~FBÁ¤UÎõñ¹ò¬<áªaÊ]Ôúõïù&®
+9EÌÐ{%ºÔÌÕ\[~NL»F| áB!âR^H&«Ó#(ƒú–žÑí,K‡‚i ‡ÉæS„fH²Ï쵘0à ɞØyæÕþ…0kçyôà6 U…A>À¤Üfè…¤"ì©è>V07n\!•û| LßÎÑa¢ÆlºoF›Ò×ëÎÉ󀌃/òH0vê!Bß%lŠ™É[Óûå#³Ìœ4Þ$•{`à½@?Flð™Ì«4€
+£‹òƒDC"¥bJk@‡ûsVþ„„^¯xŽž¨KÏ”ˆÒjQlæ}
+ñà_+)6¹ªOár‡Âf€¬·/3¯Ñ–gC„ÑüЖ¥so“÷wŒçÃò¦®m|ìˆCØgð]Úã~£H×A´ÞIÎÑùÆøÛyGLTqÉ<¾æ¾šOÕL.6ËküGƒzÇáðVá÷›óȤºžc®‡;ê[0cbk>fœåÐä£wfÁªÄ]ÆìöÐÛ,^joA í 1?Õ'U5¡•ëà‘!}ë·ŠˆþÇûº9Úd¿Îý©Ì;jq MæèJ® ÆqG>ÝH|¹4÷çÓˆM§ÝšË“ìIe¦$¾ÿ5ê4d‰Ðôsä·Û摘ãêˆÍKSi<´8 d'î.Lu¯W‰ŒŽW»Ž¶öë
+ÜY"'„þkÆ×hLç–á>ÿ
+tPÕ…"¹&øRÕ2¶…^j‰u}ïw¿56äˆÞFZIºŸA;”-Žsµu´È¤áP|îvÆJ&“ý? 1û½¶ßQDb"&æÑεOÓ‹Ú—‰³¿!çÝFbŒ$y<šu³¬»mP6fáÆQ_WÌPHêà“¿ … lN ÇÛʤýsN•kê|Q¯Q}åÅåKL{rkÓ\ÛÍöoÃ:´á9¡% WB¥‘–Øî†×Ol7(c_¥Õ¦ép&Í!jA ÷$obcî :  éË
+endstream
+endobj
+17074 0 obj <<
+/Type /FontDescriptor
+/FontName /HWZZPZ+NimbusSanL-Bold
+/Flags 4
+/FontBBox [-173 -307 1003 949]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 141
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 17073 0 R
+>> endobj
+17075 0 obj <<
+/Length1 1625
+/Length2 5282
+/Length3 0
+/Length 6106
+/Filter /FlateDecode
+>>
+stream
+xÚ­Ty<Ôýö·‡$d_¿adßÂØeì’%;aÆÌ`2f˜û®l E¶Bdì²d‹²FT–=‘²gÉÖoôÜ{Ÿûz~÷¯{Ÿ?¾¯×÷sÎù¼Ïûœ÷ùÐESs MÖ©‹Å$d$¥•c”‡³7Þ†1’€`Ñ-,ò´  # °m© X#€6ÈÊ2JJJ´ @ ëéC¹º
+¸â`±,€ÂÀÑÞˆSD» ö7!O–áAôÁL±xŽCy
+÷WŸFlˆ&Æ•(Š´¤ôF^å‡D˜¢p7À†&vë·Ý’ȇFaDU7‘–þ‹Ï wÇœ¶_þ’¸(ÿÂœ(ÔoÞRVÖzÆ&bÿi·þŽ4%Î
+=ªˆ”¬}«|Òè?²âyüÙPt±ç%+úR[*r-—;X@¤ý ã”PXl1Bʱè\Æ7ë»ëÃF3v
+ÒV‹sýf× ¨xÞ6]ÆQ¯ï‰„ ø< cÜõ¤§U'²43Ô’0Uæ­|J^ÞÛ½ôº·»«³m“²ý3—Xv" HŇâœP\˜W6—†eiàÝî^DàÞËcÖ½5Æñ ÊL¼F uö'¯îƒ ®ðÌÌ-᧘µqj…ž{G÷%åkoó·G)=©76¢ÞZb˜7ÌØÖ[2;â÷¸œKW–‡Kþn“„{õˆ®r*‚VŒƒ.WÒ(É®!Ðpoæe+nûåD›³—R7,DsíÝF³VàeQ ƒ«œG$åWîkÆV'Åìð¾­v/¬ïX¾PVÉw¿>êÍ.òÁâsÿÎ ùD)ð½­µ;»«J³`…–ͯ6_¨s_\­V†´pÚÃNÞOb1L$ƒªÔ/ksV
+lòEYÞ
+ˆ:=)úÀZþÃFm:¼ž•!s…%ƒ»š‡,·´ôgvL˜ÚNˆY½1r™Åˆin8ºÞÎ"*eÑ®]á´ªÊöð’M‚çÆòÒ0CógÎ¥7çêô Ùiäofâ^c;¯ R±›b°|íÓSS¤©ãtíÏ)w•ç&¤®é~~þ"@j:Þ…–e2Ôž¦öщäÜUrÛ&3Š[Ë36íYç>Ú¿…r\ôÍèNÔ*°ž9·(dõÕ}dMט–ïV:€–„™}öÅ‚ó¨ÿF€  0­[d¸¤ \ÍSªD2÷A‘¼¸¬—¬Í@N_,iQÀð¤T(¤zÛw žÁ$áCÀÏR"4ºÙ-,{Ë;»X-;!z4ßR·¨´ ƒnvQLÿYé]Ö§÷-øáÊ ù%f»Ï‹Œ¾‚¶ã´>ZÅ¿û¶ ƒÊTÛèhC‚ÏÞÙ†@ùsŒòÇÝ*ѳxßIŠ•ïzþå¸ï–íµ3Ü^Gua“©dKYþ0£„kÕkµG(Nè‚ü¼V:ʪ4©\±ßAgªnðºweþ|ê·J ØÙléPóëEÍ`Ÿ•™Ê3}R외ý]5Ápþ®ÿ9xKšA„>êдqžMmû¨~yš‰ H6OeÿÈŒJ=eKD:îC0YF¡#wî"³ícG·!eÅÆ MmåbcÚ<ŒW´zà×O˜b†û'½©,f\â¯JœCh¯ÛyM~=ÚªîP°Õ•ÆÒ`y°íδ}%p^&Èí•Kãõà"™që _ëŽÓI0ãÑë`çʆtðLbϬ»ð]¸ú}°‚‹‹ô6ï=(,¡+îÕQ¡a)uªxî°æòÊý3OÕQu}â'o©^0Ïœãð#‚ reÌߺh¶…¿êyXU¶@œ°ø¦¶†_2¿¯b9¢Âè m73°¤J+©Žü&\þBÃ(P™þ™™gþ;†;´Ì}㙊½0ðŸÃ5Içrœâ©—ó’ÁźöF‹%—¢ýèk©‘ÙǸZ*ãòmR%Ò^W>ßmCø6¬Ó:»s–Î\ö–£ÜÏíåëbWºZw¬cš°ž“¾ PÙA9Ÿ‚.õ¬ -lW•Ž42d=ÿKoìÌØÔþ*É›êÛ˜eks{x¤7*àé>i{CÀN‘?»óN…¶N»¢SÌ.êÌÍ
+êð¤1Ò+¼!³ÍØÞ*7tçNî‡[ÐWSgSÏÊT¿Ä˪<ei§[ÈnÅN¸—­;ì¿æcþjQ§d}âÈ@ö±ó}Ù!tO˜cÉZ¢M
+‚º‰‘
+0‡dßʪ²È¶ßªy¡¥”š’¶ÖÓö¤Æ9¶±LµÔ‘]ñìò¢Õ v!Õ~N›ð
+¡6ІÃxå|rñ…ý<앤¾ßnhÔžËÃ9]öõ{<qt[ã‘
+ܾ;š§y«áy­R„àÈYFŽ{ï~h¡£Î%ršõÁ¸ê€Zùöýªº­j4²µQ,mÍnçußz»ƒC`¶q#ÄF¢:Íi™à?™i<÷ÔÞ&£÷äJ–O-ÿü jˆ+œ:'T€~2ãÞEÙ>{ }Še44Ÿ/ãÞ::)‰ ½$å´#ìŒÍ’\ |â%pµ+‹û¥¥Ì‘P Ð×v©ûã*Em¡ KL­LÙ“:×ÆÜBÃÆ·…¢O‚s®IôncW¬YXðLóœ:Ö¨Q!ÔèªW¼ô)I¥x–ý£«í.vi§ã#ç ÿ[Öγíì2Î3¯³høʽLX÷úßb'£ñZ{“\“Ŕ޷:³à¾‚¦&kN,+8P§ûò‹ä§ÂÅ3î'‚C)ùàJMµœ1rCÜ÷Ò$íŒ÷6çÉFéK¸¹î¤Æ
+ÏÈ=ÖIÅ4éc€Û2éFOLzk@cØA‰p{†Í‰»Nn1ØA/¤à€;~4zù)ê}ÜL?xÕãŠÎó—ö‰æIî’^Ùwà¬ST³aI.1lª;Œ.„-RXSÙ"‰ñ3Ž[¯žŽeÕÏ"߬|öý.÷Û;yŒ¶z*º&ï½æ/Wœ˜ï½wlјJ”FTØå!¦–¬³mKáµ³ï^PˆÌ=ÌâöI“?Œ²BŒ‹vvpLÎÓ®›ÛVO4øäl¨K>.}ø&ºêÍÂ0]•~î”Ô”úÇ·­q‡I½WV{–2š°ê>¹7Ëç¾hênÓ„ÕÒòpM×s
+?éaãx®žF>·ê®f’qò’
+aä=¸y–¡ùCÔ»ìhIvU‰®üÇTuÕw¥Õ#¨ê…Ü,ýŸªsý 6+çôŽ­Ø/é€4<M®'”ë‹+¿2êÿ’áÞ+¦öÐw—Y½ƒïZÑñ¾¯ˆ¾vߪÄÙô…£ 4ù#~†®˜R‹¥`™tØnv}â•òÓµ×}ñ‘EÔ[}/¨0ã#ÓÀÿK; aÚB–Fµ´zf[O(ªš¤ZãíÍvrJLn EçApÖšÕ%ôóî‚(9’¦1PuR`òM¾³„Š/mÒy(àMk8 ÿ%y¥ù«m,ô`y¡AË"toh~èñØÇÇ$?¯O6Á_N\ìf[Пm…3‘ ¾Úf²Ñj?ïN&”¢mŸRX¤Oˆ|â=‘Dÿ¯â64NSÄ‘; ±II&Hÿ¾ÖLÎuJòñEcg§œˆ~•™Ë‹›¯kœVÞ <x©Œ.éz-NíØËÖ½Ø*pY,€„Õ_GÐœÜZª‡ ¬Ô+õå$|K^˜èŽãL{£
+/m›~kQøåÉîC·wšáÚå*“­Ÿ\¸Ôo¬µÊÈ’ë’!ÛG0¹‘=–èøŒ çf+GJlTòÎpÞAµõe6Hךʮ6–|5ÍÜTT ÁŠD†Š¢}<Á¤ «½…b5XùH–DŸ€³°ªán!‡lÊõÝ`ñ~îœñê“ÆdˆImAÌ™Ht0U|a\uÞ-‰=#Šµïµµ´š¹…«Ï?‹Üb qñÃÈtžÅ‹–‚bͱN¼Z>PN…/ƒ:cï4Ʀ‰“äÏ·;Ž§' úÕI~œ‰ƒ“l5ÞµÏP‰7ï—Í2ìi× lSÍ÷gªª¶-ªÊz™Þˆæ´¸'–øÃè–[oåÅED§:s{¨ƒ1qf{3;ôÇtÔ¦tç‡{=³
+«€æ\«)ñÌE¦âûS°² TÀ{ÿxÍ´x„æµ³º½`¾Åôޜά; ^†ÍŠøÎõQp„¤ãÀÌQúÞ›yHjºT—3 öÿÖ÷Ÿë&üÑlƇH•]šbû#¿­ûr//ÜZ¶êš²b (Å©úQñ«ÐP»±+β&R먹ºÂñö”³P¸¾ð݆/”‰#ã ™’^1ТTCÌθí‡Læ…úAFAÍ&Q'ßùð_B™Æßgå›°æY%²j„³*׿~‘°SûNþn'Ÿô:5U”Di‰~rcEH ª²×Á¤ê’Z„‡q^T†¡&•š¤dT\Ké;ÐÅ䪑$°úÕ¿4…Á›ÏBY›Â Üû§óÑ /Š@ãT\Uø´ë—+6o0¶ºQÔ¡ÁÐ&åw‚¿nQ_ÛJvZ`¹¡¤¹ÔAq¥Ôb²—¢‹mêRö}Ÿ¼¸¨þ-äðA(f;™w„æѸýdhA‹å4_2ÍÍÏ™X£ñ¦Ê-ߌ7c3·cäõy,ìT³+öËÈXÙÈœãÒðíD±ÀG7Ïâ,cø‚柿‘«ç¡ÔŒÜWb­ñM,‘rîÔ^%u÷ÍeO^Kê¥*QìñL(Š ¾x—µÏCuÓy¿.á|Ú¦ÄêEÝ÷ôì{‹qé{ŠNA2*&7a…xÊäÕ lÑÚJö«=)$D"¹;W¦“ÖØ\!äRË1éJÞñÜc¿®¹S>Hiòýe±ÁÜ/¢r‰2x™%¾ýÆ’ôkÇâúë%¿= 4Ù¥êGÖX¥Í¹Kn3zÿ,FîO×!nÀ &‰ºdqËRíΙhõ²ƒÝ#èùjOô¬,ý²iaÁ—Ö9½áÝû¹Î&5ªT»‹t#³RäZ×¾¨¶Ÿ9à_p"ìŸ3××^m5…Ò„Ú™4dt¸2¤¾çbPø,)k@cÃýq›ó!£â‘…ˆzÀÆàKzŠ ñîxO`œ·gæZ<}O©hµš Éäêl:ì¼ü
+óhÀ¥–äÃsj4ûU¼‡³ƒ·Ñ‹Ñ3‡,ÛFž 7 ¬„Ʀ| ¶û…žú è Ï¥UåaŒ²k›}m°{âŒf}>—¸°‹Î?RÉ“4ðFÛ\J>‰ê*²Ð^'ÕÈç–½0™míðµÌÄ>-óq°$°c¾³G%séh:Ð?›ŽâQxð¬>ã¸ÞÖTIÝG j#¥MÕ'ó²ÃëLï4+3›u‹éÞ½#³iÑ"_ oz÷9a–Ù´•ÌSy¯ÂàÑV·r_ #™-Ëý8
+gT™pÌܯ9ýös…è<ò@í
+Æ<Ý þã"z¨ó¡OvÂfñûØ\¼íʈUÑü¸_Õ×®ÖŸ…;è–Ú£¢‰ý„YKÏÐOÓä+å»ÓÃ$ãqmøˆB[ÎûÇû2ªYÉ$'Z
+«ò¿|û‹*ÉkôâÉ'nŽÌéñ!©ÈçhÍ®oIo fÇbFÚHîWá‚“ŽSr:âŸ^¥yÝYäëèõ}ùéù-q5j\D>Õºóe¶Çõ ÃÅKgŽG¾»BsR½2Ò¸éÁ¼O ÅCq¬
+GF¤ÑG\:WÀÝçÅÕT·Ò±g$Ùy—¾ú®ªºÝ®³®ä>i<9þEn=Î!ÝI ± fšÑª¿›!¤t³êë¡F±_H&ÇŸ¸ŸZÄÄh=ïKPmñ½aœdÞ@^Ø‘Pné5sÈ€Ý.®¬A\H±R€Ê*ˆv_¤Á™8}^U‰ J.½<ì6T§^ãQfüê£ÚYhÊ}·ÝÏýÆ#¤ÝE:C ŠŠ¸»Üª×Ó ¦‚¼
+[xÙÁB–E3Œ7jlçÁÈ+¤‘’û’¼f>Rßp ËÒaêå¤Xiý»oküý—õES×h–&4½äV{;Òì }â9ž“¼[FÊy¸Ûöáêª,ªúÂw.2Ý?ƒQ7ËÀʬǾd&Ì}(È(¢XÇÏdWy‰Ëì§ÈŇÐdAºYŽ:ûÛå69¨ø=i¹^ØrΑiª:/þ\¸ø&¸›ûÿ
+endstream
+endobj
+17076 0 obj <<
+/Type /FontDescriptor
+/FontName /VIWGNO+NimbusSanL-BoldCond
+/Flags 4
+/FontBBox [-139 -307 822 975]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 114
+/XHeight 532
+/CharSet (/P/a/e/m/r/s/t)
+/FontFile 17075 0 R
+>> endobj
+17077 0 obj <<
+/Length1 1625
+/Length2 11301
+/Length3 0
+/Length 12142
+/Filter /FlateDecode
+>>
+stream
+xÚ­veX\k².®@po\‚»w îÝÐAwîÜ-xî<¸»; A/{Ï3ç™{~;?ÖzÖWoÕ[úU7-¥ª‹¸%Ä(±waá`e¨€íÌ]5Ìì•X$ ¶–ò.f¶€W€–VÒ hæ†ØK™¹
+¾Ðïú2•åÉ
+„ì/º[d+Ç\,VTíŠ}˜‘ž9ƒ-"åÄYÊÑA,"™XM}Þ¬y:6—ñK;Þµ©•%ʘ$+ dbOkã…®[ò|[…)6ùnÀ#a“@¶¨ýNû¶
+õê?#öÙÁWÛ¢1Ð)òÒ¨cctÇM=¸©¶ÞÔD@)!hŠªá87ÿR§ã`àaÓ9àêW_ÝÆ’,qsoMÒ‚q2‘ƒWÞZ'æņ_³k™Ód@Óž®à Cz«A2>iyÉNÌ3ºá ‚kRqJ‡A3ÎÅlxë‘JbÏÐ_€˜)QAµü?)@©OÙï–Îtéö4ftáïeÉÙ…7n"Ž8B(žß;‹ŠyÖOÍ ­|5P HÙéyÓË'FbºÍs$¾ŽuõP+—JÕÕªÈ&çÂZ†ýeX^¼¸±ZÁyP@!ÀÏ9#O|ìÿkÅZ‹aEbù“C¸÷'Ø“í—À•öy[íŒðšH„ð0¬ªV&ˆ  næAóhl:sÙ FuÑéB§tc¸Jäñ˜Íí:;•c# ;ø(Ñ|JR‹R§]<”=y-…òNª_/ ÖDÄe²HA¾kãTÜÔu[Hê <¶ÿ­)ÞÇD#¢M!ײUµÓ½SØúÑú”('ÉTP¶êO „ƒHKñT=¤²°rN˜£qCí²?è=ïñNhÃíè÷‡ts7±?þ† Ô™iT½•3|ÁÆJÙ_öÉ
+gj§ÓÆâý‹¯Ñ)dTLAòJ™kïpq‰N9
+ZÀ"à^ÙÍë¥pÁÍëÓ¬­Œ»!ífúÓr¦oW-«ŠÊRß¾îÐ1±˜yZ[=NÎõûýœÓÙúšbU¸qg&¹Í]`lòò7Š
+o*¸"ÔÛ/;C¬|=ã<{ðòçË4ú›¨taÐí«S©àâ”)ÀYörW´ n °öÀÚW_Œo°¹ÕY*E“™©#²wÞÜWO‡»ÚòDoMÀãû\äDß`Ëò΂3¿³V ŽacÉ ga*¶e›Ü8(~Æ“’ø™y+‰Ýb‹ÐÎùr8´ÊÏtˆ)øhC¥Yñ€çãáDÛ$Î߬W¿"p÷‰¬…Ô̼{ܽ[¹eÛÝ9
+J±4w.£ ׿ ß&Ù”ÿÜ£•X¯lï8/c?yÏÃÒ-î(‘«EhvyQ¸“¤ìŒ8ÎñÒylý{+ý U¦˜äÅãOuÇ_ƒ:ª²ría7 @å¯k7r|ÅŸeû4¦ÓZŸTü„þä»ú#7-µ /’x¸áTðnå½™qpù»bîåVÓ=¶Jm8OßõwÎôÃU7>þ‚ÞGïÍLÉÙ,ªöÖæ#µ2{¬3ríeÚ‡+è€kWÅ<ͤùKH¦"w ÑAÓ"‘äêéñÆ›½ÅÅ·©óØŠio¿£3̆ìÈ+â6XK¨ ±Ìý’Žêúx·U»ç¯fx®gíé$^ß‚´‘ò'Îng“QË‚1µ©—~¨Æ5É ©FÀssV˜AbÛ &öÈ#x˜
+çE÷"Aò¸³X;¯áæ¿ÿ5þ€ìØÒ²2t©Çýßo¡ÅãQÁCi’3 ÁΑÜRåŃ´Jn]cç¸øWaFýQØÕ¥fÒ ˜®{›aù[^òÌõøèfZĹEŠ´Öƒ¤ae…ÑúOJã¸%jŽ—¡½Eí“ßäßdB¦ è&ª{ï%Þ<§®ž£ÜC~ˆòf¥
+ƦEÚÝ8\‡ô Â—Þ*m½ßÓ¬TPX$¸¯Ü#›¾Û퉺‹a—?ofæ¡Pª‚·Û7ÑåÝI–6ï3»ip(N:³ti…{ 6-eã‚¡Ü‘q|IÇ0¿Í¹dÔ)‹F ˜7°äl—¬-ƒž*‡øŸŸ»Ï·çBŠÍYÄîWN3¡š4YŠÆ#|^.´qLQ#°<}õ>Í·˜GË=Ê…¸ÐÂóßÃÙ>Aª2)¥c†nåb}Ÿ{ŠEÕùâv†³±>`¬i"ur€¤Ëíd8
+Kq“.Üšˆ6„ÎRLÎÜm~‘mD$Eç™Éªxp•“gÆþ&/Ïf ÿÆ1"ýêyÀÇ21ŠIµŠw,IfP˜èÙw¿Ba^UN ým–hvzÍ‚)ó=J¿øY§©Ê(ÜÆë±£²¶((á\m‰ÉÕ¬,3El¹ëüí¼¹±#öVv³–½ büÓý˜»9jõ
+™M}I¶X(<ótWŒ+J([8äNQØ
+5ñ!Y|‰#­{³‚õžƒñÖI‚^'-F/wwñÆ%0®{¤ˇÓû£äĬ©þyn”«bT{F9Ì9yØÍ=¡õîlʇ ZªQ÷ž›þ!°ýüê=KjFoB:v³ôÊvsbÇ÷Ì—Ü3—ï
+ÝìœÇ;qù‹³–0ó³b6’²ËS?KFÁ„U:F[ý>¹H*q´0r;KË
+¬zê…ÓyÚBJ‡ã'¯wóöèf'ìÛ4M
+[àv.D}2ýv®zÌÓo_4¾_ª oM.àQ—WÁ”ˆ½db+œtOY¸L»zÈ[AOž¾ îÓón_ª£;spcF4úO=r­ç£ßO뺬F“¶Û³u‹zÌ^=1Çæè „[’ª@2 =·Šä×´ÁÍfۭܨ›d<Ï¢H>ü&‘¨£&R|5…‹ €c ¦°Äk¼-ÛoF­RØND»¶¾ópØCŸøÇ;Ûœé™-l]ü‹žFÏ âv=?tMhÆ ´×DX~Rc ’¦W»€Ú™Òý»À“±»„”ćï QÅ‹ç?j U§n&Üõh¬(AgÈÑmŽ±°èž"=º‘{ÖUÕQêÀTaUK‰pw4Pƒø†Û;VrüÙ6kSnSfÿ‰´bÅ]®œQœÇT.²ŸÑ„„*ÂdÆ•5r[)¸ Ä4E«KÚ›±|Mù©Ö5xT1Ât‰èLx#ÐôëÖJyN}h±È8jÔìåô,ǬKψԼ—ÕÀ¡áº%æø7˜TpŒŸ±ÎªŒÑÿà±6?Yý0ëi°©£š‰ˆù€t¢¿ü36æ-½éû(÷‘ƒÝÛ&¯Ãêâ9ùòj/ú´¦8ü«•Þ_8ßÐÇ4}/,wS[DõKû³kêf:MP±_öª·œË?GFð~VïÊÀ0N\0mžÅ»Û~¼ÏNüÂ+N¤æš„[ùqÇÔÆ V¤wnA|/k„z„*“ý¾ âÝÍÙ$Nl”û{YΠ‰[JòMç[³ù}¨,Éó‹ô£azªà%ö%ÕÎËT
+E|ʨÇz4-×›$Õ®%“›œ‰á‚6Ô\žœwÎYqÁègšÞàŠÖ÷ju<ˆcO±ts_§ìâÒî+"žgÚsýåÌqY%žÍC
+eôË?ÂGÕý€VíèFúî:à¹Ç”’„]Æ4¸Æ1Îü‰öF¨BYqG’¥þºC£¾6³§Û²[4¶åÞ|«÷ï
+.È"þÜÇ $ùE«@°Þ+ØgПB¦¤d
+ÇÆ)œ‚l­æÅ
+Åfï¹Â 3s‹Í
+¹÷ˆ‚Cà;‰ýÀ•
+ CÔÒÅ'š4<S¢èĞ̆ålLëÌ^Û^Û€¸¬l¡HVúö…
+ã/qWñÁÏØÉSr0»[GÚq2#G(ºÚ¸K=6Ä…%þ{ÚÃœäLŽD³¡Ùû‘ž‘ñ0<ÕX¾¢!ï²ÓjraIÑkxEwHÃÏL×ÿ®ºw>¡bò9»Ìä-r xW¹:ä y#°÷ìšÁO¨éÕ8Á«æ礈¯Ëë'*÷O•å)ˆè"’ÂÐÚÛŒ9?¼‘ç­
+Þd¹å}ª‹Ü-ÎÈï?8¶p ŠÛ±Üa gQGµó¹ÖîœÆ~Óç.«s‘ËÑ—A–„ÔaUVÊA#gôFT?$gY5«´^YuÒŸ‰1õ¼€
+DÂÄâÆ–lB3‚><ûJ_û6G8p¼1<t›Èl“UÍêÆùåÂZ˜2T™ÐgNK“,fQq%‡KeêšR*¹XZ U‡|/ûÍ &|PE+ëK(_jÕ‘êVÛ²'^ᇠÜljc%œlþ·……GBly!6›o'.T ñ·[í£ÚF‘ d¯#¾ê—×ê‡éiH]æÈl-ˆS[}ÆO>êçp¤p88M?O5$£»ÖcW5‰·Šy ŸN]î ºŠ'Í­g%ý㎆Ê0@ó}½’º†(zÙî¸ÂüA\£ÛÑá)çeéÁ§nû²à"ÐÛÕ÷úž\àhHÄx®©(ËãÓjˆAÆÚ³üÇàXl8}à ù2øT‚ŽE‰v»skV^ñÆ­Q5)ºAÊfs¨‹Õ €*×|¨0M‘FV먱ůè>´}Yk!}ا‰ Ï!–<Mî/ÀÑ/ºÏ廎]º€{ï3Ô”*í gv‚A ‘Ú“þRªrµ‹^3„R¦Ò7ÀÞ‹óL?£mFŸ„"Ä5]ï{4ª9xú§ÞþqƃO˜ ˆG»Š¢ÌÔú³ ·¡,°àð%Te*;;Çšxæ;á#ªXA
+lÌøã1Ý|Þ¦ð÷_/¥ð]±ÆzSJi°a…ÂáVÞ¶‚óµÔôÓ%­¡ÁV¶`pÆ7TB=äGîÛ<—¢ï'è+·«Ré™A¿ÐV‚éE‹2°÷1ñÿ¨¨-þº
+¬,\ aóþ¶fk]¸¼¦úȃÍÁ¾¸žÖ÷Ÿ/ć=gáÉiIŽGæëÓ‹RÕÕÙ%_ÜäuöÜõ#ç4±ã«)SAÎ>öÉ‘÷Ø=ºˆÒ¢ê{bŸ;M³.4ŸI F|paÝ® ðH#kk¶!¡Tã¦Ý[*RtT4П†âXø—´ XKÿŒÍ}ËÀ›¹ÉÈ@½çjo8Éãõï±z2׊~±&#´¢¸…VÿùCÓVŸKÿ¶$€ýH¬,ú“e¨ä-®éZ‘™mB¦‘&Ø>žÓ»'Ü ‘ÈàÑv×Å sÆqcÑý]¯Bhñ½¿s!¢aȤc'Ÿ?$M+ë†.±æ©xÆR ›tíŸÛ¸{á; gEŒäïþôÈc¹l½&ðî)¤¬£:A/³9Œƒ¯9?+=/¸íÀréŽK¥ÞnDã'µÙSzU‰p$¿DêÞHzo9ŠÛÊ`;.à$LƦSQ]ƒÿ» ýïd¥|Ñc¨ö#"¶gÏyÔÖÒçµ2‰“ŸMÄnÝ¡µíi‘”ÔèØÉT ;LLÜ*`ÐO²†€]*.w–?·/¢/ÓLíïwRÔ'o®Kþ÷­äXFN—Dí$K©È|‹eŽQÞäb?u¬pqjìçál1% DaR©šúË«„¡ôú}ÆFÛZuo’ñŠ“[ ¡1«ÇÁŠòÙFTU!Cya–ÞßBŠm’Ý­` ÅPC#îa…ìR“ ËÑ°a¥‰Ò¿è|SçfËô¿!%ÓOþ±iä~™óQ³¬–ñÊîBÅàžÛ«á>î6Ú†ªâ€Sv'‹ˆ9]4٢Ŏ–Dʶ \‘QéÏ”Åìz~pÚ%¬>3¦¦ÓR÷¸¾wÔ5=® ¾›»7+ôØS}â”H¦c®sÜ
+'Ÿþ k GØq¼S„r‘pŽÒ¦ÊML ^c‚ïg³:*…S›£ëë~ŽOUòʘÉòˆ–*Jy3?F#ý€G«ÿø65:f«ì1ŸþþÖLC%Y¡d Ô 5 /5_zq9fä~Gÿ±A¦1´Y‚@HèìÇ Fy{ ¼¥÷Q󤂠Š½½uòwÇjfÄà!ERtáF¸ywî©AEßçIY!’Ä_çÅZŒÔ1ü)È#å×Óëå»°‚ÅCíP&Ž 9ù¤Dàµ(¨^Ý/)vÒh*{ºÚbšO*ß…—~6Û »uöÆ=ðÒ²ÃÇg[;Yì(+¡Þ§j
+ÇIÍ,ýDBG‰ª¨%ŠÍÛÆlùÝø•+”é ·zü œ ^4Ì‘­]—</]%ùçò¹BãøŸáŠšK+Ѻ†ov­R!ô\*ItóQ^ ÿ‡ë;8øFJiµRúG`ñò@¬ªÛ™‘›Ìýœ*ô0³Ž3F@€xÖv4› °-éð¥nhÞHB.Õâ$¨ô, ò‘&„E'ÿ—ªBÕ¹Øgÿ‰R‚/L¨|«‰+¼ ž÷‘ŸÔù壱UÅg®tºœzµ—-µ mKnbkêwÅÙŒK¢Ë H8YÏ»psŠ?}!¯ ¨?®Ç¿¤¶eÿ^ÎÁìÜÍÉ‹_tÈ/Ùû€2°2V@I÷q©&…
+$3– öqÂé]ԻϞš~ª‘Þ6¹ŽËÜß]"± ø`lWH÷¨0¤-ÆÍ;‹_ñ]¬zpÙcj—4ÚÝÛ¶Ë>Úéÿ
+MÀ òЋÇs€ÂÜ__d~ñ ã!îaô÷;iß*‹ïÂø\Ê5·|9·kÒoíJ ß‚V©&ͯëf”ÎIÄfBQù€·
+dõ¦U„u”Ëv]Ó~!Äû7ÛL§–}8ÅÏVÑ.§ÞÙ.J +CÏøá«äÑ#INnãT'^š_údS{K†ù“4ƒ
+”ú(`NûÞl¶×X ç¤LÐ ÿîÊìØJˆƒš³¡ÄÛÏÆmûOx ”å‰ X.Áˆ=g¡oŒÓPàm Íï"Ÿl×µ ý˜5†¹J‚a©E.³=Z “D¢Œ¾ä¥ÿ¸#Öš»*¶²&ùt‡ñ`°@˜ð1§ %Ê1v§M~Zv,Ž‹ ?v®â·MzlhL‡{I'…ÃŒ•¹›88nãNÒÏ#̬ôê‘ÒºÌl`‘¤Noº»6-àjc ù(Ýz¤”€V•U9äh¤ê;DS°b+"£ìCèoæ‡-FÎb#uñ!:<¥û òÕlfƃ}H£Lî×7??6ìJµ–ø4ÊLõªjhQ!5UX ’^zmŽ+œø¯››Il×Jí~
+™þ%—Üd>
+Û÷|>äV¯øžK1¥WOJUè³Js®—èðçØÃØn‘Pâ¬ÿŒ÷úÕ]~zmÌÝDö…›Ë7w8ß”Pò¡µŒ¥AbQZ£²ˆ”gC›Žö‚â
+Ú·Ë… ¥‡Îñß,ÜPÖžu|{›ï{t5å]õ<Î^ó=#ŸlÿJæ¾IwÇD„BPÃaºŸr®­’õ›ÓIÃï®0`g <šòˆŸã:Ëvdù+x»¤À”¶HP:HïWm?’Þr¶ :O2ÁJè›2>˜¯Ôùƒ†+~Ö2Ö
+i ¿\4<±‚ÅÆè£ Æ°šë¤Ç?u˜ÞH9fPÈ}¯±Âi¯ûLƒù+H5&¯œÄ”˜9?”M µ­ë¸Ùk¾•Ç:xVè§Áïâ§_B1½w 9!z°à©¿[3›Ãó[ýå’ACÄ‹3ëhšU2ÖCbƒÔGêØDnÃŽÅå¾ÌmÈáçÖRï±hƒïî¡w®Cãeñ=Kþ׉iF8lÁéÓÝySçý†¡¾N Gä ró’;Ð{{‚»izšÅT0Ý•©î'Ã݅˯JÝ»&‰H%xùóor63ß*ôVt´¸¹z1Kì» |%žCÐ*ˇ³‹ÕÜOr+Œü·'tx–GrÕ.*–ÁègÔ¢n{j/¢[lCåÕ˜gÐ+˜©¨1®˜ÕÚÐIkåÜÜ$Ñ…å ­³?BãΈSÚa’ ·ù,ÔÇ[9  ;݉Θù9-¯‡ÂLuß°ÞŽôzæTúògÆË
+6+Ñ¡šI„N´8 ê™Ê+F ¢_óü²&+U€³fà¶MQä¯@nŽ"ã^(å¹c½®3ì>hqì›Eñ§xˆÞpmÈk-AѯlâE nû\O¹Õ ©¬Y\oÁªú2ë—>Þ”áþ.6nh’FÚgSÝù^Ùùÿ
+endstream
+endobj
+17078 0 obj <<
+/Type /FontDescriptor
+/FontName /QVNQXP+NimbusSanL-BoldItal
+/Flags 4
+/FontBBox [-177 -309 1107 953]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle -12
+/StemV 145
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/Y/a/b/c/comma/d/e/equal/f/fi/five/fl/four/g/h/i/j/k/l/m/n/o/one/p/period/q/r/s/six/t/three/two/u/v/w/x/y/z)
+/FontFile 17077 0 R
+>> endobj
+17079 0 obj <<
+/Length1 1166
+/Length2 11440
+/Length3 0
+/Length 12218
+/Filter /FlateDecode
+>>
+stream
+xÚuycte]Úml'ãĶmWì¤Rá‰m«bÛ¨Û¶mWl·Þ·ow߯û»ãüØkÍùìsͽÇØã+ªÐ Û%lmœè™˜x
+øK+‡ÿ
+7°6·rÿ_nøÏ@ à?ÜÿÿÉ#íd`en$lcjõ/™Ì%Ì݀ƊæNFfÿ°Ë?U6þû9*Ú:šÿõ$è™Ù™ÿƒS537²´::þ9‹¿) ñ”·1²56·1¨8ýq¥ƒñ¿€¿h#g‡?òü}@îýçÞÄüOƒ@ ÐneÑÖˆ7Т6°ý©ZÏ•~’µCíáÓ™ˆ .Ê
+ô7X¯<¶e)[î=WR–˜â˜™@¥¸8hp,žx§«%·H4z˜TîCŸ< Õô5Sn\$vJα¨û Ô%ñ¯-rÑ 4•`Û/¾OÚ‡Gö
+Px„¿ò+`Ž©¹1_.¤¬|”x æG:Ř,BRàeºgž)e´áÏÑ+:ÐôûEÙ}çƒ%áœj¯ ñ´J9y:'ºX^ÌÊÚL^ªGìòÙeXuíÖèòKf‡ ‘+í´–>¨P %Qfð±kh8É¿›†+ùH1üžº–á…Õ”í¯ö¾’hÔ›V,,(>öɸ`°&l×É©uG×GëÍØ`¶˜*á5=ªuÜhÇýî[WŽ0ohõ^ëàss{1¯8TDÍë¾bÔ€>²-b™¡ˆ÷ŸëÖñÞb(*K¸HVíDd¹Vîµ:Œer©™]ètiªöº]ÿ—üfÈv$0Ç*N±ÏËÜÃÄ°Š¨¡Äíé£2Êؘ ÚQvä#õp [>#*oËÀÒM¸¨ñBHÂB;8ˆ ñ©4#3Ä{¦nÑrôƒÏ¼ærß&Ë<¥#üÒÞfJÔ¿J) éøt^X£êþràÊÆí3#šÔÏšè:Xý \ÍþîÙÌ0Ë1ýØ "UµÌ£ÿ̓*µÞЮ^(N@ã=ÌÜS@ë¾c!¯lÊ„‰Ü]ã×N;X> ž “‡ŠL6iLªõ×`‹×_ðxÚ6iepêëDKGù™ýJ’äéCà<š8t%Œ5 °·°ê±8<+ô¤f·â®D S³h­ÊòS²‰ä™ky— y-"¥a–08³Z{BAø-ÙaÃ!o†ïÙ¾¡÷ò:=˸zívæ©€¼AÊ%gœoðäE·'Û…ENGU–¨íƒYSzÍYÛ»û>ä¡Ï‚šòŒ6 â>±-`ÕŒJ ²9ð…"q!wÅy0£z“9¼I"’Ì «|*ôüïcêŸÛ¼kÞªY"àƒÞ%®4ŒŽ4_6MuYÐz£†Ô~O±põ¼Ç@¥iÛã¤KYú!…¾„;¹/Zß±sÌ)r’Ú<:ûÖ?«õýl^bDä¢ õÅ»u28K­ Ág°Ìɧ¶’®nœ¾s„cDaw; Ž…—ãA5s-¥íùjU$³tب‘Z&H±¨?½l©/Vi$aLÕsBƒßXj¶Ë÷f¦æ×Må"6MG
+Ü åþð£;úØÅ´a°(aRIFbü˜6'9þAŠsðe%oóòY˽'ÁJf4’DSŽ
+µ«) ö¹p²l*xŸJJMÚ á™Öát&jèbG„ÄÞ-kCTfÕ:(ȱmyN"[2ö¦bs3YÊÍN6~Uß#.eí]°0¨',©Lµs¬‡ ê_*~·mùw/»¢¿[+Kí»^Œ§îÖ#¯µdM±ŠšŽö8t"ƒ²VÌ°J
+|Qâ51r+âbƒšõl´FŽ”urªÖsI©ä†r¾­n“—a¨KÒT –yÈ)?¹wEwÖ‚ò+’!ZêuáƯ›½Ö¥¯!Ö“6:ˆ
+‘Ö‹UêÓ*½‘«¢
+$½Ò 8›åákÀÝ{´¹Ñ‘ú¶h‰V˜ðá÷Si)·»Ã^Ϥ›gFÈëÖT“×ýÉ*¢d{Å„šƒàŽª;ŠŸ‘(9]0#Èl6ðë¢òeª¸ürU-¹G
+Á[O‚ÆYvaI¹UÅà
+ç¾ïœã@ˆ*(+bó­ ~(Õ×ËŽ¯žÎ‚6U\QÄÊ
+{©ŽÏìoW|é!Tn‚[üEãZwÙoÏй¤ò{9`tMÕà9A§îÃ}7‰×8ô_ÖOú…pàHY”[%5'ß2•·_ Tƒ”“8B O_û=X&GZh]†B¸`>dاåFF VÑk:sâ¤k¤nËDÁö?Otø©,¼æËú1n+Šà¿ujcÀ“×µ„óÂý˜U11Iâpµ˜·ˆ!s ò}Œ²‰röjy`ò‰ÃË$ÍŒè=°<.à49Ç5rÈÛ/¬”=ÃTƒ+ ?'\Ö…@q&Ù}`«ó*°>„ÑÌ4ËðšÆzÜP›#L…Ò¶©Áá˜ú •4 £TÆéÌÄ«§«Ã‰'°ðªŽ?ˆ™øz¡:òv…Ôוºñõu±Él/uÍF¤ïKÚ?½H6ÅbœU Fæ¡
+D&0‚¶+˜<ÆCäQÜ N.ŒÁ°ÓÁ‚K‰fYÝš¼UÂçþ¼<1r÷ȵÃU¬B™Ÿ\¥¬K¤A¾«4¶¢¿×«<s$ž·Ý99B@éÙÂÁeu¸“F"—J}^J:ãÙ߆oÆ@ŒÝj'×ÑÙ]G˜›8ChA¿2dèqíÆEîRœ’wËÊ|€Ñ´Œ¶Îˆ³özÄBʈ ª•Éwn‘>E|ÊoÞ"ز‡
+›¤¬¢6Ú(ݵ"`ºÛº‡2/JJj æ%:ËÙy–¡œ?^Áù÷¢%ì75Ž mÙ[ù–S¾Ø„Çxmw²ÀÉÅû3HÙ½g<(ÙåñAYÑúŒà`$›v"y=òGSÐvJõ¢nÖ±8ZYße“WÃdÊŽ_Kåüˆ^äÀÑ,P@M³Ý¦SС§…Y ”lË¢õ|ŒF(Ì. 3#¼·ÊÒ«™chÆÎá‘#]â1ݤoO¼ExɘžSÕØ4O#”P+r/ýH·/ã~†ºóQö‚Å"˜ØDr*µBO¿«AK;‰¥0Ÿ-ÖŽ¹cüäÚ| ÅÂtíSówÁDßµ“U‰­Y€¬LöŒÑJOÐîVŠÄȇÛUIEñÔš§è±
+· ~¿ºì›ŽÞ7E"e‘—ºÇžähmÍžR È§¢îA®s†qCOû"ÉÃ]å¹åò•¦$ƒ2Ã%ò“yqvÇ0ñCŒÒûÛÝ9Ù¡‘×-]êV〠eŒUU‚Ëy>A=êìûôãü+rgëzÉîýç|{‰ãíecGB3{¥õ*ñpaÔ»§Ô† vz!”RËäÜ7àv¦¤‚–mùxJ”`/áìTT9u­ ›Ÿ_ŒãPï þ®¦WÅ‚´ÄòK.O¿æ`pW(›
+šRŸÄo NG?©ãgÚONtU¥ò‘‘Ëy9)¨¸ÕúA˜¨#ß$ßï%KŽK¬Ãqöz~»¦ãp9…ñXƒáŸ5WjpòªË¤s³¼Ö‰¢§P¡(s”äògCÆÊy¥I@Ÿù](W|&ð²šl<pÃ?'3CèÝ°WשÞuò& ¸F]¾qOÍIÉÐàYé·þe'Aõv>‡¯í‹'œS#¥69.òŽäò´i²õË¥ÊjfN@ÄëNõœ^q=_«ôEé¦c~ˆÑZ¾PLž/òT&‰ÈÝ*TKàh³¸rÑX°HŽ–Kë7¢¾¥þꈱÏPÚOVŸá”4üï¥VR&‡¾
+‘e:¬„"‚ºU€Þí’S°î¢‘kÒo¶Ž3s§,"Vܘ{³épA—ñÞ$%{iË CŸix ‚YuÏàëôÕÙ_¢f Wì½»t¿Svá›ikœ%åÃUD›Iú[ÉÓZ×ÈÙ~ÌùC‡Ö  š”ÄAºûì6Ïø=ÉCa¢ŠÄ0Í–›sTÄD0*±õm0¿†s6çÁÜOö¬ƒP;=–¦JôÀ[6™8S$hˆ}Ì_ô{›°{÷ÌE÷Es¿¿jP%ùÇg v°¾ÀY´ç v€V¾r;v²RøþÐÏ. Ì€xÆÑGŸ8vK,4¬€>÷~D™°qó±_ÐOU…Aïß"ÛëÔ?ºTë¹_¦±ÂZó ¾fË¿þ4¾Äc“&C=v¯mFñ Ë§Ä‹’#^Yá¬À9n.4SÑN 2Þo—ÊP«§Ñ Z
+H!sa {¤Ö~[‹®'f”[™ªkhQ ׊[Ç™UÄ2eSë¨`«‘õ°[o)Í8CÓn%—·ÆÇç—Ÿ_<ìL––¿ã^
++Sz‰œ¿sÜËÇòNÇ?ðXšNq×å$~Ù¹¥q´ÊÕÉ¢º}ɉÅX«ó¢ÁPˆºè”+äª{Ø^û >ô¨H‡pDä bnA#G×sOh;JÖ$¥£q¡¤”¼OÍ›¤Å´ŸÁjB0aä ˜qò{¡9š“7Œ…aM^–›6›íTr¤*¥®z|Ž¼ŒÕ¬L6ÛÀl ·Tƒ|÷·d"7Ï¢ÒÛ@‹”@LN•,ºŒ4‘—Ð"#´Hj¿÷v—«üñPx˜1ãÙ´Ú,G‹…$Xr"¿OM!pŽ+'H ž«¹ös'NŒùRž¸i•¬·wÁùËßyBVëî¾7`0@D:o~(ìç¤L)ÓôîcøT¢ÁZË#FÁ›ô­
+'>{ƒÎ
+È A³+U7 ‚®…•ŒŽh«^Ä›¡é’S»ìÎCº¦T>.k\²Ð…¥KÞPóË17߸Ã耘-aÑÇV½¥h!@W?À¦ÊÌü¡ÕëVZ
+‘~tEVß³K¥]Ò‡È7ßfÑw¸ÄAWôý”Т7`GB\ËgÛjÑ´çÁ¥¾
+:,AªzJ¿F¸ª+;®ð‡1ªEÞì²|jþÄk8avêçDæˆD g/Šò£*=µƒßÏà)¯Õ,Ñî—æÐI¨=CùŸIDîïEeY®}J…ûÖ]׃t¥àýÂb6òÒxœ £»kÍ—AR‚?Lïb=µðÓAúÈÊ›Ü ©ÒFÜÚàR°ŽVméåñ7?f>èƒ<ùÉ.ç5ÌÃe¿‡<Ö¼ž€FÊ3bj” ¬6o¨‡gì‡b¹øîH8­#!Œ¤Ç"U“ÝÏìs¨¶´yiÆÁž”Ñ
+Â!mJñ–Ûéøp7¢c?7j€‚RêW]Â…dØ
+æ‹žµ ó6iÏd+£Ø#H5v›õ(·¬Y.¡{¾;A¼X“öhC[ÇÙÑO/zñhMøf‰ün³Çä=®áï3Ù3* _>*8ÝàûD䃚áŒèðV{¬FïØàUj€›Ï¢wk»<M|T²ÎÌ›ÉDöÙ9‘6\7è;·Z`Äfkm‚ìœ÷ÄÞÎÁS•<Ä`ã+±Ä¥%HžíW(:ö¢ÌµïÄ,**!4ËmÂúu…zê–52û”NE{7ߦLû>{'«´¾ëJ0Ý×¢ZÚ]ÕôÃ
+✆¸ß™àú<‡;`CE·Ÿõr˜îð—Ÿ^X3ìv!™) Y.[ð¹ÕšA[=mÚðûteAÇËê@W]¦’ßÓˆ÷1.à_§€«µ½@Þ.™„0ô(èÆT
+ÎRä’ÿlsúY+ñ[y€/&Ñä#¥œ¹è†È—@‚G«_ª!VB‘˜©•¶þ·Yþ>UF£q@Š‡V³–ÑtÞ $¸vkkü×["z”¯¨Gšy¹²*­ 'i ·1hjE‹¨Š,ìð<<Ö—2¬÷aÕá‡èlZ¦3ãN!¨69gGx¯¿dŽý‡FÌW!õY˜x?ûº—ã ùå §®ûÈ6QÄÕ0yD¶[7f§­à¿õß0¾+”qí˜If%ñ‚Å7Ï]5 Bdñ–¼o?ïyJC ÜÁÔx
+©ôs
+³ÍÌÏštM¨STÃÏ ‡—ûQ81dΊoÒÃã¸ãëcB#m±¾×/|Æ£PP•¾°³#Wm‚;¨tQ‘;;Æ ¯;˜áN$ÖFJ’äcQr%~çßk¾0=9åH.‚BnV×Ñ%øFn¤ê ®06Šd_btª™Ì=*²Ý¾(¾vS=ƒ‚¹í¾-kòÉš¥&žÞ¬3=>’Ñ­GŽàÖïbz—㔓
+Ø7¡¾hW6qÄ|Ulê£ÿ?Íu¬åòîÔÁdˆÔ€KcKÜÚá¢O¢Îù!e9b4v&µ¢mgPã ”pȆS5‘F+#Ã8#¡Ò#…{BVÝäB‰^Ãã¹ÇÛ:ßâ¨#Õy¾}•†}I®
+D2:ª<3ë’ñ·Aú¹’a
+N>£ú€ýz‰º"d»ü}ƉjŒÁM¯éoô""cvQ·3W:Ê¿•Ž¦CX¯ÈcN•ç;%ó+9‚̾ufƒMéeæ§Âåuk–? *Ьƽ#I8E=ŒÞ{M¹’ºGõ“€îðµÊet¶êC ~‘ —F„ùuë ™e²¯ÃpdoÎÇž±³SrÖó‘ØÇâ[$ÊžÀ“å}w9‘oL/›!e+£ŒÈ²¬®j:Q⥢u³äþjÚ5¬w^¾]Ìõ›é×.xkw¯×#ÙMÓ’¯ð·9}ª2½‚Ö³[áCbˆý·±²Ò¯ª´Yr9ÞŸ¶r¬M’éff*ÈÓhœÔ²)øô
+p¹ ”üºñ÷ÇÅϸ:)È85kžYnfî‹Í«ä³ÉÉË!:êؽ‚Æu&½ç([ºc ¦[Ѧ²ß]¯ŒÀbø‡Ì`¿{`êÜMcÒcüuYËÔ‚ðx³G#@WpÒQ GBEœdF»ƒ?ÄÛÇ‚,ˆ #èÀéhßÇîÜ÷çÅ Œ¾vHÒVh­.ú…%Î×dËÞ&f+–¤ ¾Dú}ºk¿:†>yõÔÚŠ³¾*=ŒôþŠj #ìªZ
+Úèt#%·Ž¼GŽ÷»Oä°I‡Çùž'›€–ÞñjG$ï‡ýðèK †ÝÒìf íZRåbœØ!BÐUƒUp qñLˆ ®Ûìu~_G¤Ð²¼’Ûÿ¢é—.ŸÑ¿_Bú§3³LEº ¿Xq;ÔÞºfÂH’ïøÀÕêŠO7—WÉFéÓY~»*þÕüà€ûâÞÃAß †ûݳFðÀ4Y§Î:RÞ}wÖy™÷§&’qRï-ü¢mªtÂÚ…+Ž$>‘Q 6ç†w'„uÇ ãÌ ×®ÀHýïó˜_ð¬bÁ0‹2á,Z[oödωïQí×ÖÀŒOȶïá}®e?CõÜÛ¸î±Ì¤8kX˜M¶ñ7›4}ÍP@AK‡‘“vŠg”c–,DV¬‡¨´Á^ˆÐ¡gk+m˜”Î$\´®ÛQ³6HLeo†•êèŸJéà^wÖðŽB‰rÙž`ŸÓ о—V¡X™“E
+»D’k—¸5ƒ“\`çw¢çi€””Ãaé+Ξ/²¯Õ¨¦`‘ûó
++£=õn4ÃHœ(ÛÜ·61?/º"c™’ÞñÊð%ªå¢ß×fEâE›©Nµ´~33Æú5µî—¥l/³„€ðV]F8KK<˜M•Û*°à¬®wèRÒ«YNô·)»Ãâ¾+ {ŒÏœ•@“KëqÃÏ_.ŠÇº Àqe伓IáSýêc¾~âų¢ž ¤DÛ '‰6ªÚÆp=aªìÑG*l陫‘_µÒÔvúšŸ ¦ˆe6ZT7šÐð:ëZY †>T?Tq09‘HPÙ*sg¬6ùø" ¯Á^)¹7ÖŠ.~Ð,räVE«;ÐÅàÒ¹_ظúj;Å\ ‡ Ù¯=‰®¹H4ùƨ”Ï%Ù N÷ñmÀ½?8´(ótÚž÷`4Ž­GÌ…Øi©øcì^à{s­ž?£ØÊb·=ùcµ÷Ãw£%T¤ë•¡­pôª¹ŒŒ¢ò#*ó-—Öì\Xðóص* QTwu'­.BÖëgÚô<ÇçzÓ7õ³¬YЦ½à56Q§?¥ßaM*Í„к<¿¨HB úöƒµÞŠÑxˆŸðÄ‚üþŽ$ˆa_6ÔÁ<¢¤t÷K«†-‡t)‚¾H·¡¡™…\'‰6Þø W «ªXa¤L`rƒt_°>êvº‰ãîI3_* àFxé[qþ1²•È 'Á
+
+1¼÷ ÊÑoé§îeqÓšP¶¢69Û|ÒÓs¦Î¨Þ·"ü«Ï;Ø­[N$z[sŒM[œwËZeùJ^:6›£q
+úêtA·ST@ø…Ö…rÒkX›•ÆàO—¬09½—55d*¹péŠFLͼa+gRZ~º¯Ö»Hv:vò¤Nu¤d²²2&7pÞX¹’ž¸Ì'®^8ë+F’ÂóOiæ‚N·´ƒŸíœ,æFê¤/nºŒL3M ¼|0¨åi8¤½žééqêÓÑmäSð?š#KøAyßùr‘…Nœ{Ï¿n:§x—k´/²½ •Nóãþè–Y
+Ú"Ót²HË:F¸;-AèëK“õ:ŸH©u™Ã8%šD}¼³!Êb¶=»’ÌfÍš ÝI¯“Ζš0ŒÙÓ¨ Z3òË=Îõ£Ðâp”3/«˜XOð¬ßǵn—a_µ ‰¡M…ÌtuOpÅŸ:×JïS+ðƒó¯_yÓ‰ï´mƒ÷ò,Î× 2íêPœÊc‡n]æåì~GËöº“÷ÉUpY éÉoß c±ÑvÇ> |2b²ÒFx½¦Ò1ø˜®a1ýëg¡ý²¥]3ôf†îœ$qð7iAføN±;éì&¨0~;hÕ$×¢3?P¼J!ííå¾SqÒÄO¬G-usÆ5·ï\qâùàOsçf¹‹iÓÏ>X£/<ðS_5Vqǃý·]UŠ–H.ÙïÉ“Ù½ÃÎÖƒ+}FR³§´ ±™ªÛ¯àô¶rÁ¢$@˪ «~®nŒ$ãb÷‡:—8Ã>e;Á÷a¥icוPK$â—½ºu–bUŽ7 .R‹eKFª‰R†Í“™-ì÷7¶RÏB/6Pô­äX•ê—úìY=¾ì±¶]žýíK#ÁŽ®|ÛVZ›Ýóᙋ0ÚÑø ªv”Üý š&–eîÓ75zòœ—¬Æ!ÄÜu ià¦rBø^1ß>Q®¡X%¾·dJúìùLÍ48•ÕèMñD?“ ñrT.ßçG„QÂáÉøÛœ9¬B.Èq¥KŠPè᤯ý±2»ìwOgÏ·Éór¸T“ú‘,yg=®bv•Ÿñ«ß
+ø”soÛì_Å´Rsˆ¼Ô>Û©>„s7®ônù¢’NövÏ¡¹Ÿ·…1ß1{­wõÆHy%—eµ•Ký†ÔR-QX’¿Ó”-YœŠK2¹ilA†D¹Œ™rynD6 {1šD ‚Ú˜G#<‘Í¡ÓÉL"Ì9NÖýĬ0)ü­õ5R.n¸Hüi5”➺
+”É}úcÛáˆK¹£â%Îôa3³vËcwóeªº­zÊ
+endstream
+endobj
+17080 0 obj <<
+/Type /FontDescriptor
+/FontName /BDXKWQ+NimbusSanL-Regu
+/Flags 4
+/FontBBox [-174 -285 1001 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle 0
+/StemV 85
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/at/b/bracketleft/bracketright/bullet/c/colon/comma/copyright/d/e/eight/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblright/quoteright/r/registered/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 17079 0 R
+>> endobj
+17081 0 obj <<
+/Length1 1199
+/Length2 10121
+/Length3 0
+/Length 10910
+/Filter /FlateDecode
+>>
+stream
+xÚm³eX][²5Œ‚{pÙ¸»»[p·
+ 4U:Ú:;˜
+ÿ93@ÜÖÎÝlfî ÑPÕ¢¥§gø…•——`ìþo t›Ù
+Ð!±’ÑÜ®–¼b­L10ƒ1 dÂñ™jùÎáhÆ/Xºñã¢p“³ÄÝ{eÎHKnu(…ÄG0ÔBl?ùÝëîíÛ+Á—ü,ƒWÚŸ¥åÅ~ 8U’±òQáƒh“`±MFüÜ^?ñ@ýY±þø³¬ãëÌl2§ïtˆ4‚Sõ¹1Î/n¾¶‘v¶Góâß ÇÊ»ŸœŸÙõí–Æj´h¢ÏÚÄèS±*÷ŽqµýKȺò¼‹óN;ŠVrFêh)Yw¨ˆçŸ:B;1Z;`>½”çíBW¶;ä^Ì[‚S@ôQ,™‰M-¹"ÿK>nñur¬=±ˆiÆ°TL?…c£¦tƒšéÓ)~˜pCúäÆ‘6‘å |»ŽÖ!€µ9 öÂGH–u¡·”ÞÄž
+^Öó”aáˆæÇBÐŒOõ%ä0åÑÏoóY¸£Ðm\’wº¿sgC¥²€¸ûÀ2µ%±˜¯°ëz–ÂÔÝ £ª 0õ%…ÕY,wB¶+üOß[…°]PÆžÆ->æá>E  ÑvêT‘Þº¿l„¦ŠrN:,ßÖJ0™Ñ´òà)ôÀþºæKÜÖ¦Ö½ö1CÐz›a½£á:•eë`e.F"ÜÔzº‹­­F¯ÅtE8Øã“j¶Á¸Îø’‡A8[XHª°(Í£ „%oÞŸk±áè­—¹¢=\\ò“í3¾›ªv|ÅŸöýÈd¦¡½¢r£ùdÇÌ^zè¢@ h5 “!€³xNw[,V¢JÆ<~,±b,`&ám¬`OÇ—ŽÚÎåGHY³ éÆ~7@¨¶Wûšâ'º?1tÜBÃOƒ6A¼ôDªf̺­Žeãz:ðÄØÓ
+OŸä
+ÁÐ
+
+Çú¦Y¿:× M’}Ì„±ôz&¢Ï:€ã§ÈZôâðHââîÉAÒ÷…‰à«?rAM’ÚM"qòò£‘ö°$ùûWx“È|Ú/Jß>F0¬þB Œ¹5ï­WÃ7ˆ>ª‡o^:Ëu¤>¯Äù•ZkH=òcÆb 7fGûú#71Ñø˜Ó»a‚J0eú½^¬í„MƬ"Œy%UûU‹ ?:r:dˆ…t6g`3 øÆ!ýð1K„ÀI$³¡O_s‘D?lt–ÛÚL£µ´Ÿ"?V o¨¸.˜¤[éQ|˜:ò}U×gCÚ"H¸Šdþ5|e è ó½ÐNéÃÍÙãË6YY“ÄæÚH-ü^AzƦ½Cýé%†Éú©õ’Û&ˆ:M%¶ð­£åÏÄÍT³šÙÜ•»ÿ’pѱÎVëÆk ³µälJ >ÏUôÛ•mÇ*+­{S%´ÅvÔ¾,ýým“°ÞiuƒZ±êsîÏÛß0"^ó|e­Òûåg«”/^¿ŸÍd¯”ïÌò¿åÏæo%³ˆš5r¸'
+rÈ’òã€Î¾É%Œ;Y<ù×0›¾t&®ýÄâuw‚ÉÓõkRvùô…WB¸Ã(þU •¥Ü äá!þ˜±Ë<’‹XþÇ ¡f @ÃV›õ2ETyˆ ½½h}Dn¬lÓG­èß;H´ŽÀúBÅØw7þéº Ô9,/ñfÖ7z³ÄÞ¥3&ÌÖ ÷k¥|¹Ž;ÙFEŠt f:a ßß+4×@»áûÞrûèÃÆŽ¬û¡{$
+ «Ù¡6é}ÕJ¤gæÐ.~Nž×¾f œêh¯<÷mR03“=&x´3{zm—Ô"1*æ̽`'0±5§œíš_† q`™'òEùÃKé}ò[Ï)šB˜SŽØÉ$ýäZ¾ãÑéϦo:qÂ÷J“ÜM¤Ù±Ipû=¬rϧé 8li£ºø\`° Ìzzûʲí÷(ÒÖÙ¸[äÌïývægßtÑ“¤^OgA’2&!Õù«¦#˜œkr~tËêãvIeJ†È9añÖÇ’ž î0&éŸÜMYøTaF§zA̺ÇzBEaÚ”qŽ„~*” X>"WLp5O71CìIñl™8HéØ­­‹ØjŽÙ]Z-ÐãÀÅÄí¡w†Ó£yVº¬× ¶-:Ä–÷²ÈÙ]‚¹·‘² !Ør¯Õv$}~2£1dqåÉg rRbZdj!’çmÄ”"r÷˜˜îÙZT¦A½‰ùÌ’ZŠêm5&Ïæ
+w{\c­Ša œPÁU¡ÎåHÒ!y‘I‹¸Æ>Ób¾]
+”l¯É¥%!LJ @ÑKËÄ‹F„Ýo‘1<Ñøê¬J'.;¶Þ[W<ëßÄ`BÀ…ŠDÆ‚x-ÊY©~FW_´L]®¤ôÐS9–Ð÷âÿÌ(­{¹ ©
+É'©¡TU<WGs&8³[­Üî¿@¯Ÿ5Höuµaœ­Ë3qÒÖÍ3.mnã91¤aöþ.Lí½^ÚôýøŒ@Ž)H£r,>•EÐÚÚÕ÷_à| +j±¨öd,#ÌUçÌ,(“@\<w†ðf~€—å ’~RØg:î3´WÆÖ¥XÜ+’Ÿ
+¼B«ÿ‚“ZbM­¾á¶’?/lL%/>^`x[ Žâ{÷Ói5ÑFÜ¢ÿI<C"áÃ{Š¼¨%=ùxw¥ƒ §
+‘&ÇôÉAx.h:ºE2ökø8OÍÄ2ÿîýìPOhíß"ü˜ßÞÐú ò^C,?ÆÉÂa´•œ†«4ÝXÎÿÖKƒë"!®^üá•ÕZ}ËzuÄËíÿZÍ`|ö‘N U㈶Üì@D’ƒ~0¿ræPþ3‘ Zä¾ÒÓç½ÚÛ€BEÞ¨'­‡Ú;MðW-ïÛkät1¹SÙ˜þç¯cæ.Ñ. I·0Ä·SÖ!6[oT3¬oîqÑÙ<6O¬¤pEŸ¸ æ7²r°Ó–[¾¥ñ£’ÿ(w=Ø4-ñ¬Kº`-Ï‘ÉYðmÞx˜c¾f(îïâ%¡£¨˜Ûÿî;+íÌ,w8Cqú! rqw& †v¹m9Óm\
+9ç÷î÷‘ž¼ÏQëÝBï=ODµDq2n赇´%ËRdŠ”büŠÓìeýˆéö
+£Äžàö®úEyßñU×¹4QíÀœÍɳE€£4™¡"¹"߃¦Q[]Pš„'t L&ÇöL•õN‹MéφaŠàt—òü\.tå%ÄÛÖÀÕçý‘ö#½h’“­ÖPAW¾jGOŸU75¬e•]Ðlú7 ÒpMi¿Ï‚—ÇP¶ur³wŒ}qsUðó°ŸÙ¿Øê†n‰Ö-FÙ=ßÿ4ëQ<ú’™NhúºÍÈß$Ô*»c¸þÌâA¿ÞÏÙ¯’¾“à^ C}ÿÝг×uý"×Qt4˜¸¡WhßíEW¥ ;“ßgCòF6
+/x\Pxà±ÝS•GwWÇ·^N–pÈópX6wX§‡¡å—IîÚ©|>`Q^Ó3£ãq†Ð6Í{=éѤó/<•½º¸à,âêJäBEÄ<}¢£¾N×hå†7¥UþZüÙÆf…X%¿;:Ò”^Rø„Ö4¶P”Üžÿ©òt×F6j"^¨>i¥o8c™üÌÖ„
+ôÔ`Œíþ¢Ž*Àl®¾5û3ÿ¾ruM\ø% ö¤Î~q@Z=Õô ö‡»½’á˜3/„ùv8ô )flUñ¯}‡óYÀUò±ÐšE¢B<nü‚ùŠ=™» }¢ºóí-XBúºMè$“G^Þ/&qUÏÇ!ÃMe‡ÁÓ@ûËÒà$+8¢jjn/¶g¼-ÕUf¸¢Úð9%t¢Ù¼)ʼnýSÄ-ö§+Ëß±ñ¥$­ Ä/ßµ–:Uð9h³0®ä–÷’õî5­°§ô¹è ùØvùû¢¡øƒ–ÜùW
+iw9æ>ÍqÑáGƆ
+5ÑðÛŸ-MWŽ,¡/Obãtôðg«šr¬°uy¢ùŠ×ØžÙ€[ů+Ì“5ÙyæŒâê§;Ypu¿d¨ÜBónvYMùÐ9‡“6™S*
+|¨ôdì«–ÏÿR,ƒJïd) ­Δõ(Nβ¢Yÿ^X[éXæŒzDIÿ ÔÔÍß'‘ Åêõ(ûARZ%e†„¦m=ºÉÿrü Dd;@'Ö­Ê”\´FfVìY“úRâQš1S×CY
+'‰±¦¿] ýÓæ7\"ÃèyS³?0ÁÈ¢ì^VÌsÖ¨Ë#Yi#Ò ‹ú¥ØÖ•|ö0Ž€â<ZáG¡Õå”ê÷œc2áaö• ‰:.¾ý€âš¯na“ªÏ©êfÝ4ðªO˜ä÷ÉòЮãlÉ/]tÄ¥òUÇn
+Ï
+5Å¢‰uŒ×Ï¥âM¹…¬LAײ´®g®”ÖÕðl塸%ͪmBkÍp}$Ù­ÚæÕ&½xøKåTR7µLÁWЙ°»>þ"ý> ŸˆùI›ƒ„ŠêbyÍÅ}¶¨\÷çÔ)“Qåð-âyXËçqvÐ8“‡RyCØã°óï#‘Néts È, ð×mÿé²ñæåýQÅ_ãFHÅëǨC*BÃ5Ÿ˜zyìÌižX.S£¸m•lË\É..²“ì ùÉs¨y'L®Ô¦zóf«pOõ£û*ƒ¶Ù\瑉R´D@væ»È2médž<s‹±Û2çëÜÞìžz}(š‚³vÊA‘ l…pܯóŸèFÉÃ.: &ºDÆKÓ}k2ŽÀ ¥«·×*˜úT›‚Æ‚:DÉá‹õI´ÞètÕbŸér97'Û¹E?–ñ#¸"w±D9¤Ü«µÒÝü÷ÕÔ8¶ãí¦IJv9;îmý6O³²½„}ãq¿O/™‹R*xøéÕ‡ä¦l:ғᮟÉôJ„Òb{_ùât«ô-^’»îŽçÔø:$c{ˆƒ1"U‹ÈŸÁz€é:6t+Œ0
+bÄ°‰
+¶àb"q„æC¼ýoÛÂTV6æÈò­zŒÑ)ÁwÙ&1ÅîîÛ“ÎÉõÃG^ ©1~ÖD\3ܵ»ë\j¥!oɹ0¬>æýÄäD=÷¿™ÇCyœÂ,éd™ló„¢Àõ… n"Í¥U„÷sŸRª”O…„W¼ÊŽ¯k’4wCã/2¬‡X/ãu¶Ùa¸}yâd!ñ(ý&AI !Z—[^b™d×=…|Þü+É÷€¬Û\É}¦J•êÈÚ>„sÏ"F{„Û^×^4­ ŸèDã< þ“.†¿Þ)÷æá侩-ƒ§8;?²¶ãœÕ/<Š“§—èǧ´²Ö’à{;güÍ~bÖeáÀ!O¦‘’œbaψÃÄûr.ÙT=÷›ºšGŸ‰ò˜Øà™y§¼S`à?_9sž±¥ß™ ù/[,iÐi!
+…{j¡†î`ƒWT¥Òê4Ü»ß -fǨNq–r]£\ÕåsMàE÷ìÜ«N%2»¤eN¦ÊÜ\t\]à ìnyœ2ÈOŽÚXÊB“hµ¦ßEé§~]¤cå}|‚@é»Wúþy8O`”ÉÚtYݲ¸ôq1[²X›`*YâBj>kâæ9 Ž °b¿T¿Û9æ†î­Î[«V)¬iÈE™[u®=„ïHڀ빰±W!1Ôk÷™þ4¦éZ7‹ûª¤ZŸ°PúF‹ðzqŒ5wƒWVs¶?Ò6»pÕ†-›˜Š΀侵Oc/]¯†/IIF 4 t U;&÷út˜Â]Nƒg g‘LR髼þQ«Ëw`­µ
+úŽ˜†è.kO§©‡}Š%ý©‰ <Ÿ×;WæÃy[ø±'/9üX°TKúz¢}ÌG¯T>Äð­R·ö‚ŸÁayq}© 2u¢ã¦ÜT‹t¡R}…x¿ó\°i¶ìÙ Íf-BÚ=åT0W?>ä1\A ÿ‚ÿ®„«Ï×$Êcíòc{æB9yÒº[Ÿ¦‹ |í.CÙ^Ì#ÂQqÔøQ›9Ÿò$§Ú,Ìe«¦²¥=(ÌnÉôõ( +VðuÌóÍ*®j6GOÆççS8Ä`A7rÖ±7ì:«\•gÊ1ŒjÍK ž‚I¼t0n’•´Èóf)µ¾w£ô9Zjô‰qÖ)5çþ¾Ï ¡`9Ù YCÿËK9ËZkrYñ‘í:™@Äòq ¿à D!pÁÁºx¥QÉœf„îJ—³˜º­@
+º/m6z¹œÝƒ/µ¼Â%£
+ýÍ€¿CœŽùLÍõ`=ÚAQÐÉŠÔ7žÕÙ¸¼õWw
+õ·9S®ô:YOz„ ˆ<ËXŽƒ0Áy2®G
+­´Ÿ¿áˆ¿¸Þ>‰<$ïkÇ„"©úŸºËsÇZ®–Ç€¥JgŒ­+«ˆOordOCö-÷å¨~?Pf‰¦Ð˜.Dz뜚ó9{¶ÞMËç¡@=fBጷÚÍH÷™¯Bwêm‹E0a&—>›÷nfzB>¾ÛõLJl¤½î'¥ûbéò+¤¾ ÍÄ#´tVÜÔ|’ƒÅøeœg.bA-Ž3o¯!)Ó¶ùó¶ûÛ¥ÖGø&ܵœÏ1g§©øk²ÎÞæû%¾=qÀØÎœ+—àTË…1kç Â/mŠHÜÌ¥\–YfV J÷Â2{?nâ$=‡Tœ²Î½Îot­Ø9ùÚíy L·Ǫ¸1šŒ\&¥·g9IÜ&~Ȫwâÿ® Ã{¬Q‰Ž~À£p©ÍýÉR#}„ƒ's?gq&ŠHáuL¾u·ø“SsßÛK¼nYm²Å¼è¨OfݾSGÑñöÙùÉèÑK·Ò¼ :j—ŽMÔmnñB†‚]ÐfÏÜýÅdf« ú54~3ºƒŸ>Öd„šfæ¼â˜öájé«ÚŽëðÑöÚ^Ún4ßDfiK±¹„líQö¾5’9íî_f\í¡9ï+éh–µCæÐi›M þ´üÒ‘ç
+)-ßDñÀÑNs†Í^ˆBÙq âK¡áHÊ@u ,Vٕ̌ìw×GfrãØ>•žHvÖ¤Óñ†nî@…AÆüÑ[åE
+oÿÁ¦‡ú¦&&!Ñ}‹Wc¬ïñ‘Ò¬ÛÆJ«V£y++ÿ”Z_cÜÐwáá±FÕY1^iš9tÔ4†IªEvûJV‚øÜ‚ºä„j`D=û™Ox?håÃÚ½úŒ0á”A«¦·cjTûÈg¡&ù¤8¯9Þ
+Ãø1Ös$Ùë$ZùÉB/ÇéA\Š™¸å?z…˜_çËÉ—Ð:üy×{–yLps]¦t®G¾HCV£}ˆt6/íY<àVWu]—~cyÙkNµÐê‚¢žmò $]~ÉŸYA˜béJ’dÁ[âèH ûÓÚQ´Â3ZÍÖxÎÅZÈ6ZÖ.}ûÛ
+Г^Xû s´ÊžësîT)ÇH)§Ÿh¯á§¾BõH;µ57­Z0Ô7L‘Õ“+°7#´$ê§Èt]±E7†B–µç¦Î|4 )DÆI[Æ°·ÃxA¯Â«R{åÈn(¡€ ¿Öΰrkÿ~5gÔMë燺óªÁ_~4{ÒˆW;Ö£BXµ|M¹–ÖXŠÓP_Ò¼ü™rngþiNk""—&›rºk°!Iµ"2dŸ¿OmǼ’nödÑ—
+‰Z@g‚¡³ô[{Þ—XZNÎ3_ã5WõÑnˆoªî•‰`lå¬Â×?9»lФZ*ù;zž&)žÕ&ŸË‹ÈØtÌÔW} ÌCa#<ãÇ Òð£ã1ŒïCjvâ!°œ6ÍÚ-˜3¢$„ŠT9ü‘÷¦mß> ¼ø;ÇË”4KNv£{K©&py¡Ì€ôëÌi´ëÍGÀ¨yk® ¡PÏO°luˆ•²5zÞÒ’p"xCOô9 ‰wúÝŽ;¼Å!¡–Ï?DÊ
+Ù©Vò•’M_ ~“½8ϺasG 7Û muŠA„׊÷£-uÝ›â#C†Ùš¸Èt]µ-P–û¶ØÚyŠÅ]Ënñ=Ùz,֞؃:Fýž Š2§²²h&ù¶N\íY~êIüv"(J¹IO(âßZÐ;¡ä‘\£'àúME‡l¿ÒÉ>Û‹çÐ}l°X8_Q-64ÜE¨Ýý=kÍ8‚N*‘÷¸ßu4°¸':ÐzœÞ5çõÙttñãsZ^ßÚËþ)¤§›-kìöŠ›çû­à±{Š
+]W‚>™wvœN”|Û«Þè-C8|bkFÏŸ>Å5'¨J·›ßÍÔ†ˆ²òlãÉ°;Uþ¥¢%Á¸Á-7m(°vÞÂLaë8ÆXð†µ<˲­‡-
+@¿ÇÙwRåÊ!…¯-¤´äÑ…4­G¦ø¼±sL
+.¤ã%-pÙ§U|á—Â}¥>Ó`s#éÌÑe‹äµ^¿«X+y£¯¹ _9Á™Ô…vd$‹ì¦Ÿ¸/®üÖͺKóž9d–íW;ð®·Rnûo
+žT¦¿ÍK#µ ,o€¤„³ü+‹‚~wš5¦A#]YÈ–˜»â~Æ<”I´`ôH÷^k=¬©
+Z: Hû˜ìXË›ÈzlÅ`%i“£­&ZoÂìôY\—Z3´t¶ÐžÛq«³lo(YvÂ……Ïéá@Kap~ù\Cº-1ù¬-¤ÓÜ×;¼¡RW‡úãè…VT¥Cè•Õp] –ýÀ*K©*®˜yK:Þ%Z»ýf [D<ÙÒ ¤¬±IÕ5ÀFQɹ9¼TüŒ£¨aš=Ì7ÆÃÅPAö„ŽØÇ)uCJ¿+9"Ÿ6wF ã$XY5Ó4c²‚¤T­#€èaï{ÿ}/
+JÃÓ÷á¤ä:h=^Ž×
+ÒtEôÿ, Zs
+endstream
+endobj
+17082 0 obj <<
+/Type /FontDescriptor
+/FontName /OBEKWO+NimbusSanL-ReguItal
+/Flags 4
+/FontBBox [-178 -284 1108 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle -12
+/StemV 88
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/b/c/colon/comma/d/e/eight/f/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 17081 0 R
+>> endobj
+17083 0 obj <<
+/Length1 1630
+/Length2 7704
+/Length3 0
+/Length 8532
+/Filter /FlateDecode
+>>
+stream
+xÚ­WeTÔý¶†FR¤céî’î.iÉa€¡˜¡”énI éNi‘îF:¤$¥.úÞsÎ]ï½÷˽çìõßõìxöo¯5tÏ5´Ù$-¡`9¨#œ‹S¨q°p…iAÔ B*lZ`kWࣞ“ŽNÚl‡@eÌá`a Ø(¹¹\BBB˜t@i¨“§ ÄÚdÔÑÒcbaaý—æ· ÐÂó–ÇHÄÚHÿøᶇ:9€áÿç@m0·­ ö` ´º†¢š<Q^M(v»˜Û5\-ì!  
+v„™€VP ý_u´„ün Æþˆ% šaN`ä1 ì;ý6±À.ìñ­]Ìá3€CG½«åïõVÐ?9¹@=m`Pr8ÁY5däþªncÿy4¡Vž–Pëï–þØa­psˆ# {Àç²
+
+äâüKoéêô›ØåÏ€ï Ócæ–PG{O %Ø
+“C
+L dü¿±Ìþï#ùß@ñ¿…à ½ÿ?rÿÎÑyÄÿß÷üwh9W{{5s‡ÇøëÆ
+µü§ðFJ
+ê|ËÆÅ/dãäz| qózÿ)ÿ
+?6œ&r(n ;åØkU¦'ãBëZ¸ã£ 8»6§3±xð?ÀÂñáo¾ƒð D³»¦tŸŒ”{+«D<Kç5#$óõñ)™ y:¤-|®å°¹ÕïiLÕŠ""â*’jÔÐ%Ây¢ËÄÁŸ+ÄÄè^¼óÙµ¹¢’v9“Ç:¬n;T½ÖmzRï‹ÿ–æÓë€àL`Th‹à§ÒˆŒ›“)ΠÏg¢?ù¨1s§¸Þö‹w¬M. ŽÖ;ù=÷I,¼ÆcûÁ0»S…qyäÐH·ñk»Õ&¯fñ}Ÿ×òŽ|‰jÿÇ *Qúƒ7fsÍÜ
+mºþÝ,Ä֯˽ìøÃek½ÃEËÂW:ÍVÆgÌ8*Ûé?·§¡1·‘O¯g><¼É4½,“²ö<¡HGˆäÉEUøLZÅ…\-eŠam¤“‘ÏÉŠ@µƒÍËè¸Ã£mW§¾î 
+c7*ì2ÃoXý<žÑ•ÝÇW°=5}“Ù”ü$Y[E(ãÕ;“Òw¸¹«Ó}ÝÊ:beÏàS&žNpUùø‡›Å­ipk ¸™=k~nuÿø3pAÒp. å¼"p®OÚJo[•~GH¯O6,PZ
+9Éu åÁÕ€°aïf½A¬a{Q²´¡Ÿ²U¡
+Iù¼Ó|A‘ˆºK4 þÊ2ž²Svë8ÂFã_±ó²¯ j 6–O´ˆÑ-Ĩ`ŽÐì"½¼9VéÆ^çJ£Šug®;Ä JçEÐØê&îµ, ÕQ\`?w9I¨îd‘ãëªÑ‡;É-ëïÛć(«Úñ51&±­¨¤ Ô°Ál’ž$‹Rn§þd@G¦2LÌõú©Z¬R}UT¡–´>7.ÚÌ8J|RËýI[øùÙ¯KŠ×³"”5®Ë -AÖ5KM_G›³w¸ ·ÔéÀ¦ Üe}œÚš¨²VDaæõÓ¡#üpø
+õÎnã·ÎÚÓ·óã9j•Ø™‡n½ >Þ{ed›Ç=%À…Œ‹vîñ¼ÁéÖ 4e}n$1¿t?‰ˆÆÏ´w\ÕXîÞ
+ëF9ÜF
+C;fÎÍÈ@n ¿'*c’ '|Uv|&‰wÛç´ÆÐCÒo`Ré€ÎÖźDÎĦÆ2”ÆJÇõ{;ÐUàb°­êð wúØ°„pÚ@Ë]–+‡½2Æ"Du÷¡5†0ÑE›Ìão;âÏÝðU¼Íñbɵ/ÿX°ÓÄ -!Ù/ŽeëÌïdxI ¦1|ÍêŒÒxÉûy”벂Z¿‚úu¿T:rj¿ëú±Ñ ó×.šfUpëÅyÉ{²Ñ¼l´º1(!TIN´ýXçaf¦…–P#ÕtM*ÈòƒÀsûm—ßaá#ˆ·Ñ%©=#“0kW¼¥—ù\±µçËíÚPòŸí¶äï;f Ç_E›¸q…x“FU²lI÷“Íq‡Ìš=EO^»–†Š¡‹¤ä!à‚õãL ^Ø
+2³ŸI<%pL‘ :£S½ÂÞ"¤>Øä*ÖèÈñ
+½°guˆY†’ÛO¼bΠG7ÍöSm‹
+õp#GêWÍn]”c¥TÞ
+-<!(SH‹§ Dh ßÔ¨Y!-CÛ=Œ®_séSÌ Œ½Üï5ù±›Ó€×1K'òBm[EþêŠ|îÆIm¢½,Þâ=ÀÇ –™mfÿEõZ¢ˆ°Ý+£±I7¤~‘d÷3²eäâ4<ì{ ²Ö½Fn&k‰ã¥t©|Ž$Ý•ÁoÂ4…¡¤x¤>ò8.î%¿†¸„…ô›ý57«øÛð XÞæ tx‡—)Á_ߺU»­á©l2ÊarF‡ðÑòÚMÇbU|?-bg“4ÊØ‘™"\£½kžÌ^·-ŠºÞŒCëOpåýÔÝim L@Ô5×g¨|S²òT·
+)øë0šæK:‘í÷ ôU´àŸ*Ê
+È_?™Ê&¬ÀâÈø©µr%¢êûÕγGMØ­>à«Ü0òID _å§ÖµMiòMkœ+9Qa¯ÀÒ§n,(L;ßf¹'.ÐÛbªõ·1ǘžiëAêÚt¼·H;Ý-jÅ c¹jo%÷ËõôT¥WŸBpÉ:
+»óκöòóΧéåªa_ÒñÓíøexé:Þ!¾óFž˜Ì6åªÊQšÝ;Ô3¯#J¹ô~Ê]öd2ÊQÙä&.¤=Ó–ùö~ØQr«»âtØåÙõMèhöÆØmG;WN±µPl=3ÚÝ}
+éFxËê÷)è$väQ~Yü†™í‰Œ’‚0/™Á‡F“Üàõ½•{Ë> "’³(˜Nþ|âóRìú³ˆmYÀ¯DXvýT“+¢ôEËð’X%Bí¿蟣 Ðåâ)X˜ö¼¾"†‡×áÌ’Æ%OÖàzüB†z¢›bÛφçDNx»©‹¡b•*ïâòST¿9ÜP'ô~æ"øÙ³-TèàP‚¹‹8º±Œº7‡ª¶€ýYFÃÄñ33ìïWüzì,Kïu¿c×.¤é.ÉÕ¦…<“áù¶"ÐÛÆv' ¯.Ū*.Âÿ8>ý.‰;kpÃe!ÂÐ6þæ6ðŒ‡Ù¸þ!¸lõÔd„3o
+©¸¸çëÑE¼N«#(B%œÂL þ B4ªO@ì±ËÏ5G%2õBÐdÉ?å³ñW©a;ìÅ[c|¥VÅ
+˜ÈJ1®‰Úèa#œ½ê¢²„¡¹¢îã¼^~|SŸºžšáåˆ/0R•€Ðû«C
+<½ ;7s0w}F|
+­Œ±æ¦)Ò•Mî6)[ 64‹j/Êu®XXà5ʲ™Í}ûG~F-̔ڀàùáÙb-l+osá5„ã^eÊ@ìÃl;†%¡³›]ºÀÙ¬^ :ïT5\±œê¯Ì´‘Këm}¢`šî¢M€¶².´ÆO¬©&gw‹§•¬lëØVè­±+cÖZgáÅ(¯ÿŒµ¯Úë‹ÖQPgþ\VQ­/2¶Ï„#§óWí·#¦yÊ gk5Œ‹°×ÇYír#¥c'nÚõ&Q^T¥ êù« ÓI='Ì=¤(ƒ`¨Úø-pI9\ë²!‘“°äÆ+}XR­Ü”gšTãr^ëØH–ˆ™ëFóó\×¾@c.UF
+ñËFˆîOh\ÒSMsØ?|,
+ƒ~šðRÈ&oªŽ
+à"hµ
+~Èúq,3´, Tnôvφm̘c%Î&Se#OËããD£kpÛ”çfÓ‚ÙJîÓp¦ßf(UX
+Êxø{^,!4Ž[ù½Z¶›óªxB#{? |Wïè,ž|Ÿé•Ò(:½âW¦'•:¨"Ûâ¿ ‘‘[+ô°»ö&Ž³œ¾¾¨ÿÒ%¥?ÃG ýü¶-þiµ3PY‰š¢‘ÁC€«=$b¬ó˜™$H0}¦¬¤-6šEˆ¯“Utÿí<\G]š{#±7ªÒÄSûsÜØ´tˆ©£ -ä´ÁLZpü|Üú,Å—K¦(/2©¥õÎðÃë©Ò§Ìáá‘.tÊ÷‰tÒw»/„­|0Oü¬.ò³1V°°Î#×qäî‹¢"ª~ìø\Ï7êêÍwÆ 7¼gÞpɾ™¯ñk~º&ø²¸éÒ¡½ÎC´¦ãb‡·Í@<ck1™&Ìbý„´:“¨¹½“ õjªYgbÔëHí] ²V¬s½´:¢ÐýF†Œ—zW㡲êþ°/¤aË `^”zñžo˜x³¬IQ‰M~þÜ
+å’¤>$/r\ij.ÉñW0‘x^ª¢‚=ËMªMYÛUæg¡âìôd/ä“E Fcž!_<þöQn H1© ”Ÿ]̶ô–Ê$´ªŒËS C9ùùÀ»òv*¾|EDø QÈ&¾_¯€,Ê`9å*‡* »
+Ý­>Tfëú(ÿ
+#°)UPúRœó“—º1v°ÇQb—¬e}“;JÜ¿z%·Ú¶I.èƒ×72õÀ»Ì ÷ÁIË¢ºÒ0Ië«j5±À×µ”¥1mTÏÚ«¤S¥3¯*IÙ´öhLÉÑ—CAÉ$ÚXŠM"-ªæp*mü™©ó^3Ýè™å—˜e¤.]gxw*åýi!1€â ü1âkÛj³/Ä
+nlE¸úN¤¥c¿\û þ@úéΫŠµžÂ¾ºz!Ù¹˜áºðˆ9îQó'à¤3¬úÜI¤øeD)ÖlpKU—R°s
+²:l
++mX&±F Ò¬å•jÁè²6§üª€ëCy‹ÙR~ï¾fãmF}Ñzôà°2m6-ñzg|š—¤ÙEnìÃr,ˆ®˜“
+0ê:óÄëª!úØø÷7ÌUì]ËÿÛy·û'æKW™vQ¼)8/Ë5–䎎îºßæt½IÑŸ—hµ;\įLP‚ñzµõÙÖé»pgRiVI¸šL'¸—Ä
+`=ý­ßº¢0¹Æ´Ò_l%š ˆ(¹Cö?
+endstream
+endobj
+17084 0 obj <<
+/Type /FontDescriptor
+/FontName /QSEEZL+NimbusRomNo9L-Regu
+/Flags 4
+/FontBBox [-168 -281 1000 924]
+/Ascent 678
+/CapHeight 651
+/Descent -216
+/ItalicAngle 0
+/StemV 85
+/XHeight 450
+/CharSet (/eight/five/four/i/nine/one/seven/six/three/two/v/x/zero)
+/FontFile 17083 0 R
+>> endobj
+17048 0 obj <<
+/Type /Encoding
+/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal/greater/question/at/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 124/bar 148/quotedblright/bullet 169/copyright 174/registered]
+>> endobj
+6621 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SYFPBV+CMMI10
+/FontDescriptor 17062 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 17056 0 R
+>> endobj
+6622 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DWHMJC+CMSY10
+/FontDescriptor 17064 0 R
+/FirstChar 3
+/LastChar 110
+/Widths 17055 0 R
+>> endobj
+9222 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YDADAV+CMSY7
+/FontDescriptor 17066 0 R
+/FirstChar 102
+/LastChar 103
+/Widths 17051 0 R
+>> endobj
+8866 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YJKYMK+NimbusMonL-Bold
+/FontDescriptor 17068 0 R
+/FirstChar 91
+/LastChar 120
+/Widths 17054 0 R
+/Encoding 17048 0 R
+>> endobj
+9274 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /KDWZQO+NimbusMonL-BoldObli
+/FontDescriptor 17070 0 R
+/FirstChar 48
+/LastChar 117
+/Widths 17050 0 R
+/Encoding 17048 0 R
+>> endobj
+8905 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /CVFBJK+NimbusMonL-Regu
+/FontDescriptor 17072 0 R
+/FirstChar 33
+/LastChar 124
+/Widths 17052 0 R
+/Encoding 17048 0 R
+>> endobj
+6507 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /HWZZPZ+NimbusSanL-Bold
+/FontDescriptor 17074 0 R
+/FirstChar 2
+/LastChar 148
+/Widths 17059 0 R
+/Encoding 17048 0 R
+>> endobj
+10901 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /VIWGNO+NimbusSanL-BoldCond
+/FontDescriptor 17076 0 R
+/FirstChar 80
+/LastChar 116
+/Widths 17049 0 R
+/Encoding 17048 0 R
+>> endobj
+8891 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QVNQXP+NimbusSanL-BoldItal
+/FontDescriptor 17078 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 17053 0 R
+/Encoding 17048 0 R
+>> endobj
+6502 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BDXKWQ+NimbusSanL-Regu
+/FontDescriptor 17080 0 R
+/FirstChar 2
+/LastChar 174
+/Widths 17060 0 R
+/Encoding 17048 0 R
+>> endobj
+6620 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /OBEKWO+NimbusSanL-ReguItal
+/FontDescriptor 17082 0 R
+/FirstChar 2
+/LastChar 148
+/Widths 17057 0 R
+/Encoding 17048 0 R
+>> endobj
+6508 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QSEEZL+NimbusRomNo9L-Regu
+/FontDescriptor 17084 0 R
+/FirstChar 48
+/LastChar 120
+/Widths 17058 0 R
+/Encoding 17048 0 R
+>> endobj
+6503 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [6498 0 R 6505 0 R 6510 0 R 6557 0 R 6618 0 R 6682 0 R]
+>> endobj
+6745 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [6743 0 R 6805 0 R 6866 0 R 6927 0 R 6988 0 R 7049 0 R]
+>> endobj
+7112 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [7110 0 R 7172 0 R 7233 0 R 7294 0 R 7355 0 R 7415 0 R]
+>> endobj
+7478 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [7476 0 R 7538 0 R 7599 0 R 7660 0 R 7721 0 R 7782 0 R]
+>> endobj
+7845 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [7843 0 R 7905 0 R 7966 0 R 8027 0 R 8088 0 R 8149 0 R]
+>> endobj
+8212 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17085 0 R
+/Kids [8210 0 R 8229 0 R 8233 0 R 8241 0 R 8247 0 R 8291 0 R]
+>> endobj
+8353 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [8350 0 R 8431 0 R 8582 0 R 8714 0 R 8781 0 R 8825 0 R]
+>> endobj
+8858 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [8855 0 R 8863 0 R 8875 0 R 8888 0 R 8893 0 R 8902 0 R]
+>> endobj
+8942 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [8934 0 R 8963 0 R 8980 0 R 8997 0 R 9023 0 R 9044 0 R]
+>> endobj
+9067 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [9061 0 R 9115 0 R 9183 0 R 9211 0 R 9215 0 R 9219 0 R]
+>> endobj
+9229 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [9226 0 R 9236 0 R 9250 0 R 9267 0 R 9294 0 R 9310 0 R]
+>> endobj
+9338 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17086 0 R
+/Kids [9329 0 R 9354 0 R 9378 0 R 9390 0 R 9406 0 R 9422 0 R]
+>> endobj
+9446 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [9438 0 R 9455 0 R 9471 0 R 9487 0 R 9507 0 R 9539 0 R]
+>> endobj
+9559 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [9556 0 R 9609 0 R 9638 0 R 9661 0 R 9677 0 R 9690 0 R]
+>> endobj
+9734 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [9724 0 R 9769 0 R 9789 0 R 9793 0 R 9806 0 R 9824 0 R]
+>> endobj
+9852 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [9842 0 R 9901 0 R 9982 0 R 10024 0 R 10028 0 R 10032 0 R]
+>> endobj
+10039 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [10036 0 R 10041 0 R 10050 0 R 10062 0 R 10078 0 R 10094 0 R]
+>> endobj
+10117 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17087 0 R
+/Kids [10110 0 R 10125 0 R 10141 0 R 10156 0 R 10176 0 R 10210 0 R]
+>> endobj
+10235 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10232 0 R 10250 0 R 10269 0 R 10283 0 R 10302 0 R 10326 0 R]
+>> endobj
+10356 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10343 0 R 10379 0 R 10412 0 R 10430 0 R 10434 0 R 10438 0 R]
+>> endobj
+10446 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10443 0 R 10448 0 R 10465 0 R 10494 0 R 10514 0 R 10530 0 R]
+>> endobj
+10564 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10557 0 R 10582 0 R 10597 0 R 10633 0 R 10653 0 R 10677 0 R]
+>> endobj
+10724 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10717 0 R 10736 0 R 10751 0 R 10777 0 R 10821 0 R 10872 0 R]
+>> endobj
+10902 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17088 0 R
+/Kids [10897 0 R 10908 0 R 10933 0 R 10951 0 R 10974 0 R 11007 0 R]
+>> endobj
+11042 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [11033 0 R 11174 0 R 11345 0 R 11400 0 R 11404 0 R 11408 0 R]
+>> endobj
+11415 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [11412 0 R 11421 0 R 11584 0 R 11745 0 R 11769 0 R 11773 0 R]
+>> endobj
+11783 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [11780 0 R 11829 0 R 11912 0 R 12015 0 R 12050 0 R 12054 0 R]
+>> endobj
+12061 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [12058 0 R 12063 0 R 12080 0 R 12142 0 R 12214 0 R 12229 0 R]
+>> endobj
+12236 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [12233 0 R 12238 0 R 12254 0 R 12275 0 R 12304 0 R 12383 0 R]
+>> endobj
+12445 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17089 0 R
+/Kids [12442 0 R 12447 0 R 12451 0 R 12455 0 R 12459 0 R 12468 0 R]
+>> endobj
+12515 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [12508 0 R 12545 0 R 12549 0 R 12581 0 R 12619 0 R 12638 0 R]
+>> endobj
+12647 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [12644 0 R 12661 0 R 12698 0 R 12720 0 R 12737 0 R 12814 0 R]
+>> endobj
+12901 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [12886 0 R 12917 0 R 12921 0 R 12926 0 R 13003 0 R 13125 0 R]
+>> endobj
+13169 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [13166 0 R 13171 0 R 13175 0 R 13179 0 R 13183 0 R 13196 0 R]
+>> endobj
+13251 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [13245 0 R 13297 0 R 13313 0 R 13317 0 R 13335 0 R 13352 0 R]
+>> endobj
+13395 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17090 0 R
+/Kids [13389 0 R 13411 0 R 13421 0 R 13432 0 R 13447 0 R 13468 0 R]
+>> endobj
+13527 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [13519 0 R 13566 0 R 13584 0 R 13607 0 R 13636 0 R 13658 0 R]
+>> endobj
+13681 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [13671 0 R 13715 0 R 13745 0 R 13754 0 R 13791 0 R 13828 0 R]
+>> endobj
+13850 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [13847 0 R 13852 0 R 13922 0 R 13995 0 R 14071 0 R 14136 0 R]
+>> endobj
+14201 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [14198 0 R 14261 0 R 14323 0 R 14413 0 R 14501 0 R 14605 0 R]
+>> endobj
+14686 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [14683 0 R 14753 0 R 14840 0 R 14929 0 R 15049 0 R 15168 0 R]
+>> endobj
+15275 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17091 0 R
+/Kids [15272 0 R 15336 0 R 15439 0 R 15542 0 R 15604 0 R 15666 0 R]
+>> endobj
+15755 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17092 0 R
+/Kids [15752 0 R 15843 0 R 15958 0 R 16071 0 R 16186 0 R 16306 0 R]
+>> endobj
+16421 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 17092 0 R
+/Kids [16418 0 R 16531 0 R 16625 0 R 16720 0 R 16806 0 R 16874 0 R]
+>> endobj
+16957 0 obj <<
+/Type /Pages
+/Count 2
+/Parent 17092 0 R
+/Kids [16954 0 R 17045 0 R]
+>> endobj
+17085 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [6503 0 R 6745 0 R 7112 0 R 7478 0 R 7845 0 R 8212 0 R]
+>> endobj
+17086 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [8353 0 R 8858 0 R 8942 0 R 9067 0 R 9229 0 R 9338 0 R]
+>> endobj
+17087 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [9446 0 R 9559 0 R 9734 0 R 9852 0 R 10039 0 R 10117 0 R]
+>> endobj
+17088 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [10235 0 R 10356 0 R 10446 0 R 10564 0 R 10724 0 R 10902 0 R]
+>> endobj
+17089 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [11042 0 R 11415 0 R 11783 0 R 12061 0 R 12236 0 R 12445 0 R]
+>> endobj
+17090 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17093 0 R
+/Kids [12515 0 R 12647 0 R 12901 0 R 13169 0 R 13251 0 R 13395 0 R]
+>> endobj
+17091 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 17094 0 R
+/Kids [13527 0 R 13681 0 R 13850 0 R 14201 0 R 14686 0 R 15275 0 R]
+>> endobj
+17092 0 obj <<
+/Type /Pages
+/Count 14
+/Parent 17094 0 R
+/Kids [15755 0 R 16421 0 R 16957 0 R]
+>> endobj
+17093 0 obj <<
+/Type /Pages
+/Count 216
+/Parent 17095 0 R
+/Kids [17085 0 R 17086 0 R 17087 0 R 17088 0 R 17089 0 R 17090 0 R]
+>> endobj
+17094 0 obj <<
+/Type /Pages
+/Count 50
+/Parent 17095 0 R
+/Kids [17091 0 R 17092 0 R]
+>> endobj
+17095 0 obj <<
+/Type /Pages
+/Count 266
+/Kids [17093 0 R 17094 0 R]
+>> endobj
+17096 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 6495 0 R
+/Count 8
+>> endobj
+6495 0 obj <<
+/Title 6496 0 R
+/A 6493 0 R
+/Parent 17096 0 R
+/Prev 3279 0 R
+>> endobj
+6491 0 obj <<
+/Title 6492 0 R
+/A 6489 0 R
+/Parent 6479 0 R
+/Prev 6487 0 R
+>> endobj
+6487 0 obj <<
+/Title 6488 0 R
+/A 6485 0 R
+/Parent 6479 0 R
+/Prev 6483 0 R
+/Next 6491 0 R
+>> endobj
+6483 0 obj <<
+/Title 6484 0 R
+/A 6481 0 R
+/Parent 6479 0 R
+/Next 6487 0 R
+>> endobj
+6479 0 obj <<
+/Title 6480 0 R
+/A 6477 0 R
+/Parent 6391 0 R
+/Prev 6419 0 R
+/First 6483 0 R
+/Last 6491 0 R
+/Count -3
+>> endobj
+6475 0 obj <<
+/Title 6476 0 R
+/A 6473 0 R
+/Parent 6419 0 R
+/Prev 6471 0 R
+>> endobj
+6471 0 obj <<
+/Title 6472 0 R
+/A 6469 0 R
+/Parent 6419 0 R
+/Prev 6467 0 R
+/Next 6475 0 R
+>> endobj
+6467 0 obj <<
+/Title 6468 0 R
+/A 6465 0 R
+/Parent 6419 0 R
+/Prev 6463 0 R
+/Next 6471 0 R
+>> endobj
+6463 0 obj <<
+/Title 6464 0 R
+/A 6461 0 R
+/Parent 6419 0 R
+/Prev 6459 0 R
+/Next 6467 0 R
+>> endobj
+6459 0 obj <<
+/Title 6460 0 R
+/A 6457 0 R
+/Parent 6419 0 R
+/Prev 6455 0 R
+/Next 6463 0 R
+>> endobj
+6455 0 obj <<
+/Title 6456 0 R
+/A 6453 0 R
+/Parent 6419 0 R
+/Prev 6451 0 R
+/Next 6459 0 R
+>> endobj
+6451 0 obj <<
+/Title 6452 0 R
+/A 6449 0 R
+/Parent 6419 0 R
+/Prev 6447 0 R
+/Next 6455 0 R
+>> endobj
+6447 0 obj <<
+/Title 6448 0 R
+/A 6445 0 R
+/Parent 6419 0 R
+/Prev 6443 0 R
+/Next 6451 0 R
+>> endobj
+6443 0 obj <<
+/Title 6444 0 R
+/A 6441 0 R
+/Parent 6419 0 R
+/Prev 6439 0 R
+/Next 6447 0 R
+>> endobj
+6439 0 obj <<
+/Title 6440 0 R
+/A 6437 0 R
+/Parent 6419 0 R
+/Prev 6435 0 R
+/Next 6443 0 R
+>> endobj
+6435 0 obj <<
+/Title 6436 0 R
+/A 6433 0 R
+/Parent 6419 0 R
+/Prev 6431 0 R
+/Next 6439 0 R
+>> endobj
+6431 0 obj <<
+/Title 6432 0 R
+/A 6429 0 R
+/Parent 6419 0 R
+/Prev 6427 0 R
+/Next 6435 0 R
+>> endobj
+6427 0 obj <<
+/Title 6428 0 R
+/A 6425 0 R
+/Parent 6419 0 R
+/Prev 6423 0 R
+/Next 6431 0 R
+>> endobj
+6423 0 obj <<
+/Title 6424 0 R
+/A 6421 0 R
+/Parent 6419 0 R
+/Next 6427 0 R
+>> endobj
+6419 0 obj <<
+/Title 6420 0 R
+/A 6417 0 R
+/Parent 6391 0 R
+/Prev 6395 0 R
+/Next 6479 0 R
+/First 6423 0 R
+/Last 6475 0 R
+/Count -14
+>> endobj
+6415 0 obj <<
+/Title 6416 0 R
+/A 6413 0 R
+/Parent 6395 0 R
+/Prev 6411 0 R
+>> endobj
+6411 0 obj <<
+/Title 6412 0 R
+/A 6409 0 R
+/Parent 6395 0 R
+/Prev 6407 0 R
+/Next 6415 0 R
+>> endobj
+6407 0 obj <<
+/Title 6408 0 R
+/A 6405 0 R
+/Parent 6395 0 R
+/Prev 6403 0 R
+/Next 6411 0 R
+>> endobj
+6403 0 obj <<
+/Title 6404 0 R
+/A 6401 0 R
+/Parent 6395 0 R
+/Prev 6399 0 R
+/Next 6407 0 R
+>> endobj
+6399 0 obj <<
+/Title 6400 0 R
+/A 6397 0 R
+/Parent 6395 0 R
+/Next 6403 0 R
+>> endobj
+6395 0 obj <<
+/Title 6396 0 R
+/A 6393 0 R
+/Parent 6391 0 R
+/Next 6419 0 R
+/First 6399 0 R
+/Last 6415 0 R
+/Count -5
+>> endobj
+6391 0 obj <<
+/Title 6392 0 R
+/A 6389 0 R
+/Parent 3279 0 R
+/Prev 6323 0 R
+/First 6395 0 R
+/Last 6479 0 R
+/Count -3
+>> endobj
+6387 0 obj <<
+/Title 6388 0 R
+/A 6385 0 R
+/Parent 6371 0 R
+/Prev 6383 0 R
+>> endobj
+6383 0 obj <<
+/Title 6384 0 R
+/A 6381 0 R
+/Parent 6371 0 R
+/Prev 6379 0 R
+/Next 6387 0 R
+>> endobj
+6379 0 obj <<
+/Title 6380 0 R
+/A 6377 0 R
+/Parent 6371 0 R
+/Prev 6375 0 R
+/Next 6383 0 R
+>> endobj
+6375 0 obj <<
+/Title 6376 0 R
+/A 6373 0 R
+/Parent 6371 0 R
+/Next 6379 0 R
+>> endobj
+6371 0 obj <<
+/Title 6372 0 R
+/A 6369 0 R
+/Parent 6323 0 R
+/Prev 6359 0 R
+/First 6375 0 R
+/Last 6387 0 R
+/Count -4
+>> endobj
+6367 0 obj <<
+/Title 6368 0 R
+/A 6365 0 R
+/Parent 6359 0 R
+/Prev 6363 0 R
+>> endobj
+6363 0 obj <<
+/Title 6364 0 R
+/A 6361 0 R
+/Parent 6359 0 R
+/Next 6367 0 R
+>> endobj
+6359 0 obj <<
+/Title 6360 0 R
+/A 6357 0 R
+/Parent 6323 0 R
+/Prev 6339 0 R
+/Next 6371 0 R
+/First 6363 0 R
+/Last 6367 0 R
+/Count -2
+>> endobj
+6355 0 obj <<
+/Title 6356 0 R
+/A 6353 0 R
+/Parent 6339 0 R
+/Prev 6351 0 R
+>> endobj
+6351 0 obj <<
+/Title 6352 0 R
+/A 6349 0 R
+/Parent 6339 0 R
+/Prev 6347 0 R
+/Next 6355 0 R
+>> endobj
+6347 0 obj <<
+/Title 6348 0 R
+/A 6345 0 R
+/Parent 6339 0 R
+/Prev 6343 0 R
+/Next 6351 0 R
+>> endobj
+6343 0 obj <<
+/Title 6344 0 R
+/A 6341 0 R
+/Parent 6339 0 R
+/Next 6347 0 R
+>> endobj
+6339 0 obj <<
+/Title 6340 0 R
+/A 6337 0 R
+/Parent 6323 0 R
+/Prev 6327 0 R
+/Next 6359 0 R
+/First 6343 0 R
+/Last 6355 0 R
+/Count -4
+>> endobj
+6335 0 obj <<
+/Title 6336 0 R
+/A 6333 0 R
+/Parent 6327 0 R
+/Prev 6331 0 R
+>> endobj
+6331 0 obj <<
+/Title 6332 0 R
+/A 6329 0 R
+/Parent 6327 0 R
+/Next 6335 0 R
+>> endobj
+6327 0 obj <<
+/Title 6328 0 R
+/A 6325 0 R
+/Parent 6323 0 R
+/Next 6339 0 R
+/First 6331 0 R
+/Last 6335 0 R
+/Count -2
+>> endobj
+6323 0 obj <<
+/Title 6324 0 R
+/A 6321 0 R
+/Parent 3279 0 R
+/Prev 6295 0 R
+/Next 6391 0 R
+/First 6327 0 R
+/Last 6371 0 R
+/Count -4
+>> endobj
+6319 0 obj <<
+/Title 6320 0 R
+/A 6317 0 R
+/Parent 6307 0 R
+/Prev 6315 0 R
+>> endobj
+6315 0 obj <<
+/Title 6316 0 R
+/A 6313 0 R
+/Parent 6307 0 R
+/Prev 6311 0 R
+/Next 6319 0 R
+>> endobj
+6311 0 obj <<
+/Title 6312 0 R
+/A 6309 0 R
+/Parent 6307 0 R
+/Next 6315 0 R
+>> endobj
+6307 0 obj <<
+/Title 6308 0 R
+/A 6305 0 R
+/Parent 6295 0 R
+/Prev 6299 0 R
+/First 6311 0 R
+/Last 6319 0 R
+/Count -3
+>> endobj
+6303 0 obj <<
+/Title 6304 0 R
+/A 6301 0 R
+/Parent 6299 0 R
+>> endobj
+6299 0 obj <<
+/Title 6300 0 R
+/A 6297 0 R
+/Parent 6295 0 R
+/Next 6307 0 R
+/First 6303 0 R
+/Last 6303 0 R
+/Count -1
+>> endobj
+6295 0 obj <<
+/Title 6296 0 R
+/A 6293 0 R
+/Parent 3279 0 R
+/Prev 6231 0 R
+/Next 6323 0 R
+/First 6299 0 R
+/Last 6307 0 R
+/Count -2
+>> endobj
+6291 0 obj <<
+/Title 6292 0 R
+/A 6289 0 R
+/Parent 6267 0 R
+/Prev 6287 0 R
+>> endobj
+6287 0 obj <<
+/Title 6288 0 R
+/A 6285 0 R
+/Parent 6267 0 R
+/Prev 6283 0 R
+/Next 6291 0 R
+>> endobj
+6283 0 obj <<
+/Title 6284 0 R
+/A 6281 0 R
+/Parent 6267 0 R
+/Prev 6279 0 R
+/Next 6287 0 R
+>> endobj
+6279 0 obj <<
+/Title 6280 0 R
+/A 6277 0 R
+/Parent 6267 0 R
+/Prev 6275 0 R
+/Next 6283 0 R
+>> endobj
+6275 0 obj <<
+/Title 6276 0 R
+/A 6273 0 R
+/Parent 6267 0 R
+/Prev 6271 0 R
+/Next 6279 0 R
+>> endobj
+6271 0 obj <<
+/Title 6272 0 R
+/A 6269 0 R
+/Parent 6267 0 R
+/Next 6275 0 R
+>> endobj
+6267 0 obj <<
+/Title 6268 0 R
+/A 6265 0 R
+/Parent 6231 0 R
+/Prev 6247 0 R
+/First 6271 0 R
+/Last 6291 0 R
+/Count -6
+>> endobj
+6263 0 obj <<
+/Title 6264 0 R
+/A 6261 0 R
+/Parent 6247 0 R
+/Prev 6259 0 R
+>> endobj
+6259 0 obj <<
+/Title 6260 0 R
+/A 6257 0 R
+/Parent 6247 0 R
+/Prev 6255 0 R
+/Next 6263 0 R
+>> endobj
+6255 0 obj <<
+/Title 6256 0 R
+/A 6253 0 R
+/Parent 6247 0 R
+/Prev 6251 0 R
+/Next 6259 0 R
+>> endobj
+6251 0 obj <<
+/Title 6252 0 R
+/A 6249 0 R
+/Parent 6247 0 R
+/Next 6255 0 R
+>> endobj
+6247 0 obj <<
+/Title 6248 0 R
+/A 6245 0 R
+/Parent 6231 0 R
+/Prev 6235 0 R
+/Next 6267 0 R
+/First 6251 0 R
+/Last 6263 0 R
+/Count -4
+>> endobj
+6243 0 obj <<
+/Title 6244 0 R
+/A 6241 0 R
+/Parent 6235 0 R
+/Prev 6239 0 R
+>> endobj
+6239 0 obj <<
+/Title 6240 0 R
+/A 6237 0 R
+/Parent 6235 0 R
+/Next 6243 0 R
+>> endobj
+6235 0 obj <<
+/Title 6236 0 R
+/A 6233 0 R
+/Parent 6231 0 R
+/Next 6247 0 R
+/First 6239 0 R
+/Last 6243 0 R
+/Count -2
+>> endobj
+6231 0 obj <<
+/Title 6232 0 R
+/A 6229 0 R
+/Parent 3279 0 R
+/Prev 6159 0 R
+/Next 6295 0 R
+/First 6235 0 R
+/Last 6267 0 R
+/Count -3
+>> endobj
+6227 0 obj <<
+/Title 6228 0 R
+/A 6225 0 R
+/Parent 6211 0 R
+/Prev 6223 0 R
+>> endobj
+6223 0 obj <<
+/Title 6224 0 R
+/A 6221 0 R
+/Parent 6211 0 R
+/Prev 6219 0 R
+/Next 6227 0 R
+>> endobj
+6219 0 obj <<
+/Title 6220 0 R
+/A 6217 0 R
+/Parent 6211 0 R
+/Prev 6215 0 R
+/Next 6223 0 R
+>> endobj
+6215 0 obj <<
+/Title 6216 0 R
+/A 6213 0 R
+/Parent 6211 0 R
+/Next 6219 0 R
+>> endobj
+6211 0 obj <<
+/Title 6212 0 R
+/A 6209 0 R
+/Parent 6159 0 R
+/Prev 6203 0 R
+/First 6215 0 R
+/Last 6227 0 R
+/Count -4
+>> endobj
+6207 0 obj <<
+/Title 6208 0 R
+/A 6205 0 R
+/Parent 6203 0 R
+>> endobj
+6203 0 obj <<
+/Title 6204 0 R
+/A 6201 0 R
+/Parent 6159 0 R
+/Prev 6163 0 R
+/Next 6211 0 R
+/First 6207 0 R
+/Last 6207 0 R
+/Count -1
+>> endobj
+6199 0 obj <<
+/Title 6200 0 R
+/A 6197 0 R
+/Parent 6163 0 R
+/Prev 6195 0 R
+>> endobj
+6195 0 obj <<
+/Title 6196 0 R
+/A 6193 0 R
+/Parent 6163 0 R
+/Prev 6191 0 R
+/Next 6199 0 R
+>> endobj
+6191 0 obj <<
+/Title 6192 0 R
+/A 6189 0 R
+/Parent 6163 0 R
+/Prev 6187 0 R
+/Next 6195 0 R
+>> endobj
+6187 0 obj <<
+/Title 6188 0 R
+/A 6185 0 R
+/Parent 6163 0 R
+/Prev 6183 0 R
+/Next 6191 0 R
+>> endobj
+6183 0 obj <<
+/Title 6184 0 R
+/A 6181 0 R
+/Parent 6163 0 R
+/Prev 6179 0 R
+/Next 6187 0 R
+>> endobj
+6179 0 obj <<
+/Title 6180 0 R
+/A 6177 0 R
+/Parent 6163 0 R
+/Prev 6175 0 R
+/Next 6183 0 R
+>> endobj
+6175 0 obj <<
+/Title 6176 0 R
+/A 6173 0 R
+/Parent 6163 0 R
+/Prev 6171 0 R
+/Next 6179 0 R
+>> endobj
+6171 0 obj <<
+/Title 6172 0 R
+/A 6169 0 R
+/Parent 6163 0 R
+/Prev 6167 0 R
+/Next 6175 0 R
+>> endobj
+6167 0 obj <<
+/Title 6168 0 R
+/A 6165 0 R
+/Parent 6163 0 R
+/Next 6171 0 R
+>> endobj
+6163 0 obj <<
+/Title 6164 0 R
+/A 6161 0 R
+/Parent 6159 0 R
+/Next 6203 0 R
+/First 6167 0 R
+/Last 6199 0 R
+/Count -9
+>> endobj
+6159 0 obj <<
+/Title 6160 0 R
+/A 6157 0 R
+/Parent 3279 0 R
+/Prev 6135 0 R
+/Next 6231 0 R
+/First 6163 0 R
+/Last 6211 0 R
+/Count -3
+>> endobj
+6155 0 obj <<
+/Title 6156 0 R
+/A 6153 0 R
+/Parent 6139 0 R
+/Prev 6151 0 R
+>> endobj
+6151 0 obj <<
+/Title 6152 0 R
+/A 6149 0 R
+/Parent 6139 0 R
+/Prev 6147 0 R
+/Next 6155 0 R
+>> endobj
+6147 0 obj <<
+/Title 6148 0 R
+/A 6145 0 R
+/Parent 6139 0 R
+/Prev 6143 0 R
+/Next 6151 0 R
+>> endobj
+6143 0 obj <<
+/Title 6144 0 R
+/A 6141 0 R
+/Parent 6139 0 R
+/Next 6147 0 R
+>> endobj
+6139 0 obj <<
+/Title 6140 0 R
+/A 6137 0 R
+/Parent 6135 0 R
+/First 6143 0 R
+/Last 6155 0 R
+/Count -4
+>> endobj
+6135 0 obj <<
+/Title 6136 0 R
+/A 6133 0 R
+/Parent 3279 0 R
+/Prev 6115 0 R
+/Next 6159 0 R
+/First 6139 0 R
+/Last 6139 0 R
+/Count -1
+>> endobj
+6131 0 obj <<
+/Title 6132 0 R
+/A 6129 0 R
+/Parent 6127 0 R
+>> endobj
+6127 0 obj <<
+/Title 6128 0 R
+/A 6125 0 R
+/Parent 6115 0 R
+/Prev 6119 0 R
+/First 6131 0 R
+/Last 6131 0 R
+/Count -1
+>> endobj
+6123 0 obj <<
+/Title 6124 0 R
+/A 6121 0 R
+/Parent 6119 0 R
+>> endobj
+6119 0 obj <<
+/Title 6120 0 R
+/A 6117 0 R
+/Parent 6115 0 R
+/Next 6127 0 R
+/First 6123 0 R
+/Last 6123 0 R
+/Count -1
+>> endobj
+6115 0 obj <<
+/Title 6116 0 R
+/A 6113 0 R
+/Parent 3279 0 R
+/Prev 6083 0 R
+/Next 6135 0 R
+/First 6119 0 R
+/Last 6127 0 R
+/Count -2
+>> endobj
+6111 0 obj <<
+/Title 6112 0 R
+/A 6109 0 R
+/Parent 6103 0 R
+/Prev 6107 0 R
+>> endobj
+6107 0 obj <<
+/Title 6108 0 R
+/A 6105 0 R
+/Parent 6103 0 R
+/Next 6111 0 R
+>> endobj
+6103 0 obj <<
+/Title 6104 0 R
+/A 6101 0 R
+/Parent 6083 0 R
+/Prev 6087 0 R
+/First 6107 0 R
+/Last 6111 0 R
+/Count -2
+>> endobj
+6099 0 obj <<
+/Title 6100 0 R
+/A 6097 0 R
+/Parent 6087 0 R
+/Prev 6095 0 R
+>> endobj
+6095 0 obj <<
+/Title 6096 0 R
+/A 6093 0 R
+/Parent 6087 0 R
+/Prev 6091 0 R
+/Next 6099 0 R
+>> endobj
+6091 0 obj <<
+/Title 6092 0 R
+/A 6089 0 R
+/Parent 6087 0 R
+/Next 6095 0 R
+>> endobj
+6087 0 obj <<
+/Title 6088 0 R
+/A 6085 0 R
+/Parent 6083 0 R
+/Next 6103 0 R
+/First 6091 0 R
+/Last 6099 0 R
+/Count -3
+>> endobj
+6083 0 obj <<
+/Title 6084 0 R
+/A 6081 0 R
+/Parent 3279 0 R
+/Prev 6071 0 R
+/Next 6115 0 R
+/First 6087 0 R
+/Last 6103 0 R
+/Count -2
+>> endobj
+6079 0 obj <<
+/Title 6080 0 R
+/A 6077 0 R
+/Parent 6075 0 R
+>> endobj
+6075 0 obj <<
+/Title 6076 0 R
+/A 6073 0 R
+/Parent 6071 0 R
+/First 6079 0 R
+/Last 6079 0 R
+/Count -1
+>> endobj
+6071 0 obj <<
+/Title 6072 0 R
+/A 6069 0 R
+/Parent 3279 0 R
+/Prev 6059 0 R
+/Next 6083 0 R
+/First 6075 0 R
+/Last 6075 0 R
+/Count -1
+>> endobj
+6067 0 obj <<
+/Title 6068 0 R
+/A 6065 0 R
+/Parent 6063 0 R
+>> endobj
+6063 0 obj <<
+/Title 6064 0 R
+/A 6061 0 R
+/Parent 6059 0 R
+/First 6067 0 R
+/Last 6067 0 R
+/Count -1
+>> endobj
+6059 0 obj <<
+/Title 6060 0 R
+/A 6057 0 R
+/Parent 3279 0 R
+/Prev 6023 0 R
+/Next 6071 0 R
+/First 6063 0 R
+/Last 6063 0 R
+/Count -1
+>> endobj
+6055 0 obj <<
+/Title 6056 0 R
+/A 6053 0 R
+/Parent 6051 0 R
+>> endobj
+6051 0 obj <<
+/Title 6052 0 R
+/A 6049 0 R
+/Parent 6023 0 R
+/Prev 6027 0 R
+/First 6055 0 R
+/Last 6055 0 R
+/Count -1
+>> endobj
+6047 0 obj <<
+/Title 6048 0 R
+/A 6045 0 R
+/Parent 6027 0 R
+/Prev 6043 0 R
+>> endobj
+6043 0 obj <<
+/Title 6044 0 R
+/A 6041 0 R
+/Parent 6027 0 R
+/Prev 6039 0 R
+/Next 6047 0 R
+>> endobj
+6039 0 obj <<
+/Title 6040 0 R
+/A 6037 0 R
+/Parent 6027 0 R
+/Prev 6035 0 R
+/Next 6043 0 R
+>> endobj
+6035 0 obj <<
+/Title 6036 0 R
+/A 6033 0 R
+/Parent 6027 0 R
+/Prev 6031 0 R
+/Next 6039 0 R
+>> endobj
+6031 0 obj <<
+/Title 6032 0 R
+/A 6029 0 R
+/Parent 6027 0 R
+/Next 6035 0 R
+>> endobj
+6027 0 obj <<
+/Title 6028 0 R
+/A 6025 0 R
+/Parent 6023 0 R
+/Next 6051 0 R
+/First 6031 0 R
+/Last 6047 0 R
+/Count -5
+>> endobj
+6023 0 obj <<
+/Title 6024 0 R
+/A 6021 0 R
+/Parent 3279 0 R
+/Prev 6007 0 R
+/Next 6059 0 R
+/First 6027 0 R
+/Last 6051 0 R
+/Count -2
+>> endobj
+6019 0 obj <<
+/Title 6020 0 R
+/A 6017 0 R
+/Parent 6011 0 R
+/Prev 6015 0 R
+>> endobj
+6015 0 obj <<
+/Title 6016 0 R
+/A 6013 0 R
+/Parent 6011 0 R
+/Next 6019 0 R
+>> endobj
+6011 0 obj <<
+/Title 6012 0 R
+/A 6009 0 R
+/Parent 6007 0 R
+/First 6015 0 R
+/Last 6019 0 R
+/Count -2
+>> endobj
+6007 0 obj <<
+/Title 6008 0 R
+/A 6005 0 R
+/Parent 3279 0 R
+/Prev 5979 0 R
+/Next 6023 0 R
+/First 6011 0 R
+/Last 6011 0 R
+/Count -1
+>> endobj
+6003 0 obj <<
+/Title 6004 0 R
+/A 6001 0 R
+/Parent 5991 0 R
+/Prev 5999 0 R
+>> endobj
+5999 0 obj <<
+/Title 6000 0 R
+/A 5997 0 R
+/Parent 5991 0 R
+/Prev 5995 0 R
+/Next 6003 0 R
+>> endobj
+5995 0 obj <<
+/Title 5996 0 R
+/A 5993 0 R
+/Parent 5991 0 R
+/Next 5999 0 R
+>> endobj
+5991 0 obj <<
+/Title 5992 0 R
+/A 5989 0 R
+/Parent 5979 0 R
+/Prev 5983 0 R
+/First 5995 0 R
+/Last 6003 0 R
+/Count -3
+>> endobj
+5987 0 obj <<
+/Title 5988 0 R
+/A 5985 0 R
+/Parent 5983 0 R
+>> endobj
+5983 0 obj <<
+/Title 5984 0 R
+/A 5981 0 R
+/Parent 5979 0 R
+/Next 5991 0 R
+/First 5987 0 R
+/Last 5987 0 R
+/Count -1
+>> endobj
+5979 0 obj <<
+/Title 5980 0 R
+/A 5977 0 R
+/Parent 3279 0 R
+/Prev 5899 0 R
+/Next 6007 0 R
+/First 5983 0 R
+/Last 5991 0 R
+/Count -2
+>> endobj
+5975 0 obj <<
+/Title 5976 0 R
+/A 5973 0 R
+/Parent 5931 0 R
+/Prev 5971 0 R
+>> endobj
+5971 0 obj <<
+/Title 5972 0 R
+/A 5969 0 R
+/Parent 5931 0 R
+/Prev 5967 0 R
+/Next 5975 0 R
+>> endobj
+5967 0 obj <<
+/Title 5968 0 R
+/A 5965 0 R
+/Parent 5931 0 R
+/Prev 5963 0 R
+/Next 5971 0 R
+>> endobj
+5963 0 obj <<
+/Title 5964 0 R
+/A 5961 0 R
+/Parent 5931 0 R
+/Prev 5959 0 R
+/Next 5967 0 R
+>> endobj
+5959 0 obj <<
+/Title 5960 0 R
+/A 5957 0 R
+/Parent 5931 0 R
+/Prev 5955 0 R
+/Next 5963 0 R
+>> endobj
+5955 0 obj <<
+/Title 5956 0 R
+/A 5953 0 R
+/Parent 5931 0 R
+/Prev 5951 0 R
+/Next 5959 0 R
+>> endobj
+5951 0 obj <<
+/Title 5952 0 R
+/A 5949 0 R
+/Parent 5931 0 R
+/Prev 5947 0 R
+/Next 5955 0 R
+>> endobj
+5947 0 obj <<
+/Title 5948 0 R
+/A 5945 0 R
+/Parent 5931 0 R
+/Prev 5943 0 R
+/Next 5951 0 R
+>> endobj
+5943 0 obj <<
+/Title 5944 0 R
+/A 5941 0 R
+/Parent 5931 0 R
+/Prev 5939 0 R
+/Next 5947 0 R
+>> endobj
+5939 0 obj <<
+/Title 5940 0 R
+/A 5937 0 R
+/Parent 5931 0 R
+/Prev 5935 0 R
+/Next 5943 0 R
+>> endobj
+5935 0 obj <<
+/Title 5936 0 R
+/A 5933 0 R
+/Parent 5931 0 R
+/Next 5939 0 R
+>> endobj
+5931 0 obj <<
+/Title 5932 0 R
+/A 5929 0 R
+/Parent 5899 0 R
+/Prev 5911 0 R
+/First 5935 0 R
+/Last 5975 0 R
+/Count -11
+>> endobj
+5927 0 obj <<
+/Title 5928 0 R
+/A 5925 0 R
+/Parent 5911 0 R
+/Prev 5923 0 R
+>> endobj
+5923 0 obj <<
+/Title 5924 0 R
+/A 5921 0 R
+/Parent 5911 0 R
+/Prev 5919 0 R
+/Next 5927 0 R
+>> endobj
+5919 0 obj <<
+/Title 5920 0 R
+/A 5917 0 R
+/Parent 5911 0 R
+/Prev 5915 0 R
+/Next 5923 0 R
+>> endobj
+5915 0 obj <<
+/Title 5916 0 R
+/A 5913 0 R
+/Parent 5911 0 R
+/Next 5919 0 R
+>> endobj
+5911 0 obj <<
+/Title 5912 0 R
+/A 5909 0 R
+/Parent 5899 0 R
+/Prev 5903 0 R
+/Next 5931 0 R
+/First 5915 0 R
+/Last 5927 0 R
+/Count -4
+>> endobj
+5907 0 obj <<
+/Title 5908 0 R
+/A 5905 0 R
+/Parent 5903 0 R
+>> endobj
+5903 0 obj <<
+/Title 5904 0 R
+/A 5901 0 R
+/Parent 5899 0 R
+/Next 5911 0 R
+/First 5907 0 R
+/Last 5907 0 R
+/Count -1
+>> endobj
+5899 0 obj <<
+/Title 5900 0 R
+/A 5897 0 R
+/Parent 3279 0 R
+/Prev 5835 0 R
+/Next 5979 0 R
+/First 5903 0 R
+/Last 5931 0 R
+/Count -3
+>> endobj
+5895 0 obj <<
+/Title 5896 0 R
+/A 5893 0 R
+/Parent 5883 0 R
+/Prev 5891 0 R
+>> endobj
+5891 0 obj <<
+/Title 5892 0 R
+/A 5889 0 R
+/Parent 5883 0 R
+/Prev 5887 0 R
+/Next 5895 0 R
+>> endobj
+5887 0 obj <<
+/Title 5888 0 R
+/A 5885 0 R
+/Parent 5883 0 R
+/Next 5891 0 R
+>> endobj
+5883 0 obj <<
+/Title 5884 0 R
+/A 5881 0 R
+/Parent 5835 0 R
+/Prev 5871 0 R
+/First 5887 0 R
+/Last 5895 0 R
+/Count -3
+>> endobj
+5879 0 obj <<
+/Title 5880 0 R
+/A 5877 0 R
+/Parent 5871 0 R
+/Prev 5875 0 R
+>> endobj
+5875 0 obj <<
+/Title 5876 0 R
+/A 5873 0 R
+/Parent 5871 0 R
+/Next 5879 0 R
+>> endobj
+5871 0 obj <<
+/Title 5872 0 R
+/A 5869 0 R
+/Parent 5835 0 R
+/Prev 5843 0 R
+/Next 5883 0 R
+/First 5875 0 R
+/Last 5879 0 R
+/Count -2
+>> endobj
+5867 0 obj <<
+/Title 5868 0 R
+/A 5865 0 R
+/Parent 5843 0 R
+/Prev 5863 0 R
+>> endobj
+5863 0 obj <<
+/Title 5864 0 R
+/A 5861 0 R
+/Parent 5843 0 R
+/Prev 5859 0 R
+/Next 5867 0 R
+>> endobj
+5859 0 obj <<
+/Title 5860 0 R
+/A 5857 0 R
+/Parent 5843 0 R
+/Prev 5855 0 R
+/Next 5863 0 R
+>> endobj
+5855 0 obj <<
+/Title 5856 0 R
+/A 5853 0 R
+/Parent 5843 0 R
+/Prev 5851 0 R
+/Next 5859 0 R
+>> endobj
+5851 0 obj <<
+/Title 5852 0 R
+/A 5849 0 R
+/Parent 5843 0 R
+/Prev 5847 0 R
+/Next 5855 0 R
+>> endobj
+5847 0 obj <<
+/Title 5848 0 R
+/A 5845 0 R
+/Parent 5843 0 R
+/Next 5851 0 R
+>> endobj
+5843 0 obj <<
+/Title 5844 0 R
+/A 5841 0 R
+/Parent 5835 0 R
+/Prev 5839 0 R
+/Next 5871 0 R
+/First 5847 0 R
+/Last 5867 0 R
+/Count -6
+>> endobj
+5839 0 obj <<
+/Title 5840 0 R
+/A 5837 0 R
+/Parent 5835 0 R
+/Next 5843 0 R
+>> endobj
+5835 0 obj <<
+/Title 5836 0 R
+/A 5833 0 R
+/Parent 3279 0 R
+/Prev 5643 0 R
+/Next 5899 0 R
+/First 5839 0 R
+/Last 5883 0 R
+/Count -4
+>> endobj
+5831 0 obj <<
+/Title 5832 0 R
+/A 5829 0 R
+/Parent 5815 0 R
+/Prev 5827 0 R
+>> endobj
+5827 0 obj <<
+/Title 5828 0 R
+/A 5825 0 R
+/Parent 5815 0 R
+/Prev 5823 0 R
+/Next 5831 0 R
+>> endobj
+5823 0 obj <<
+/Title 5824 0 R
+/A 5821 0 R
+/Parent 5815 0 R
+/Prev 5819 0 R
+/Next 5827 0 R
+>> endobj
+5819 0 obj <<
+/Title 5820 0 R
+/A 5817 0 R
+/Parent 5815 0 R
+/Next 5823 0 R
+>> endobj
+5815 0 obj <<
+/Title 5816 0 R
+/A 5813 0 R
+/Parent 5643 0 R
+/Prev 5647 0 R
+/First 5819 0 R
+/Last 5831 0 R
+/Count -4
+>> endobj
+5811 0 obj <<
+/Title 5812 0 R
+/A 5809 0 R
+/Parent 5647 0 R
+/Prev 5807 0 R
+>> endobj
+5807 0 obj <<
+/Title 5808 0 R
+/A 5805 0 R
+/Parent 5647 0 R
+/Prev 5803 0 R
+/Next 5811 0 R
+>> endobj
+5803 0 obj <<
+/Title 5804 0 R
+/A 5801 0 R
+/Parent 5647 0 R
+/Prev 5799 0 R
+/Next 5807 0 R
+>> endobj
+5799 0 obj <<
+/Title 5800 0 R
+/A 5797 0 R
+/Parent 5647 0 R
+/Prev 5795 0 R
+/Next 5803 0 R
+>> endobj
+5795 0 obj <<
+/Title 5796 0 R
+/A 5793 0 R
+/Parent 5647 0 R
+/Prev 5791 0 R
+/Next 5799 0 R
+>> endobj
+5791 0 obj <<
+/Title 5792 0 R
+/A 5789 0 R
+/Parent 5647 0 R
+/Prev 5787 0 R
+/Next 5795 0 R
+>> endobj
+5787 0 obj <<
+/Title 5788 0 R
+/A 5785 0 R
+/Parent 5647 0 R
+/Prev 5783 0 R
+/Next 5791 0 R
+>> endobj
+5783 0 obj <<
+/Title 5784 0 R
+/A 5781 0 R
+/Parent 5647 0 R
+/Prev 5779 0 R
+/Next 5787 0 R
+>> endobj
+5779 0 obj <<
+/Title 5780 0 R
+/A 5777 0 R
+/Parent 5647 0 R
+/Prev 5775 0 R
+/Next 5783 0 R
+>> endobj
+5775 0 obj <<
+/Title 5776 0 R
+/A 5773 0 R
+/Parent 5647 0 R
+/Prev 5771 0 R
+/Next 5779 0 R
+>> endobj
+5771 0 obj <<
+/Title 5772 0 R
+/A 5769 0 R
+/Parent 5647 0 R
+/Prev 5767 0 R
+/Next 5775 0 R
+>> endobj
+5767 0 obj <<
+/Title 5768 0 R
+/A 5765 0 R
+/Parent 5647 0 R
+/Prev 5763 0 R
+/Next 5771 0 R
+>> endobj
+5763 0 obj <<
+/Title 5764 0 R
+/A 5761 0 R
+/Parent 5647 0 R
+/Prev 5759 0 R
+/Next 5767 0 R
+>> endobj
+5759 0 obj <<
+/Title 5760 0 R
+/A 5757 0 R
+/Parent 5647 0 R
+/Prev 5755 0 R
+/Next 5763 0 R
+>> endobj
+5755 0 obj <<
+/Title 5756 0 R
+/A 5753 0 R
+/Parent 5647 0 R
+/Prev 5751 0 R
+/Next 5759 0 R
+>> endobj
+5751 0 obj <<
+/Title 5752 0 R
+/A 5749 0 R
+/Parent 5647 0 R
+/Prev 5747 0 R
+/Next 5755 0 R
+>> endobj
+5747 0 obj <<
+/Title 5748 0 R
+/A 5745 0 R
+/Parent 5647 0 R
+/Prev 5743 0 R
+/Next 5751 0 R
+>> endobj
+5743 0 obj <<
+/Title 5744 0 R
+/A 5741 0 R
+/Parent 5647 0 R
+/Prev 5739 0 R
+/Next 5747 0 R
+>> endobj
+5739 0 obj <<
+/Title 5740 0 R
+/A 5737 0 R
+/Parent 5647 0 R
+/Prev 5735 0 R
+/Next 5743 0 R
+>> endobj
+5735 0 obj <<
+/Title 5736 0 R
+/A 5733 0 R
+/Parent 5647 0 R
+/Prev 5731 0 R
+/Next 5739 0 R
+>> endobj
+5731 0 obj <<
+/Title 5732 0 R
+/A 5729 0 R
+/Parent 5647 0 R
+/Prev 5727 0 R
+/Next 5735 0 R
+>> endobj
+5727 0 obj <<
+/Title 5728 0 R
+/A 5725 0 R
+/Parent 5647 0 R
+/Prev 5723 0 R
+/Next 5731 0 R
+>> endobj
+5723 0 obj <<
+/Title 5724 0 R
+/A 5721 0 R
+/Parent 5647 0 R
+/Prev 5719 0 R
+/Next 5727 0 R
+>> endobj
+5719 0 obj <<
+/Title 5720 0 R
+/A 5717 0 R
+/Parent 5647 0 R
+/Prev 5715 0 R
+/Next 5723 0 R
+>> endobj
+5715 0 obj <<
+/Title 5716 0 R
+/A 5713 0 R
+/Parent 5647 0 R
+/Prev 5711 0 R
+/Next 5719 0 R
+>> endobj
+5711 0 obj <<
+/Title 5712 0 R
+/A 5709 0 R
+/Parent 5647 0 R
+/Prev 5707 0 R
+/Next 5715 0 R
+>> endobj
+5707 0 obj <<
+/Title 5708 0 R
+/A 5705 0 R
+/Parent 5647 0 R
+/Prev 5703 0 R
+/Next 5711 0 R
+>> endobj
+5703 0 obj <<
+/Title 5704 0 R
+/A 5701 0 R
+/Parent 5647 0 R
+/Prev 5699 0 R
+/Next 5707 0 R
+>> endobj
+5699 0 obj <<
+/Title 5700 0 R
+/A 5697 0 R
+/Parent 5647 0 R
+/Prev 5695 0 R
+/Next 5703 0 R
+>> endobj
+5695 0 obj <<
+/Title 5696 0 R
+/A 5693 0 R
+/Parent 5647 0 R
+/Prev 5691 0 R
+/Next 5699 0 R
+>> endobj
+5691 0 obj <<
+/Title 5692 0 R
+/A 5689 0 R
+/Parent 5647 0 R
+/Prev 5687 0 R
+/Next 5695 0 R
+>> endobj
+5687 0 obj <<
+/Title 5688 0 R
+/A 5685 0 R
+/Parent 5647 0 R
+/Prev 5683 0 R
+/Next 5691 0 R
+>> endobj
+5683 0 obj <<
+/Title 5684 0 R
+/A 5681 0 R
+/Parent 5647 0 R
+/Prev 5679 0 R
+/Next 5687 0 R
+>> endobj
+5679 0 obj <<
+/Title 5680 0 R
+/A 5677 0 R
+/Parent 5647 0 R
+/Prev 5675 0 R
+/Next 5683 0 R
+>> endobj
+5675 0 obj <<
+/Title 5676 0 R
+/A 5673 0 R
+/Parent 5647 0 R
+/Prev 5671 0 R
+/Next 5679 0 R
+>> endobj
+5671 0 obj <<
+/Title 5672 0 R
+/A 5669 0 R
+/Parent 5647 0 R
+/Prev 5667 0 R
+/Next 5675 0 R
+>> endobj
+5667 0 obj <<
+/Title 5668 0 R
+/A 5665 0 R
+/Parent 5647 0 R
+/Prev 5663 0 R
+/Next 5671 0 R
+>> endobj
+5663 0 obj <<
+/Title 5664 0 R
+/A 5661 0 R
+/Parent 5647 0 R
+/Prev 5659 0 R
+/Next 5667 0 R
+>> endobj
+5659 0 obj <<
+/Title 5660 0 R
+/A 5657 0 R
+/Parent 5647 0 R
+/Prev 5655 0 R
+/Next 5663 0 R
+>> endobj
+5655 0 obj <<
+/Title 5656 0 R
+/A 5653 0 R
+/Parent 5647 0 R
+/Prev 5651 0 R
+/Next 5659 0 R
+>> endobj
+5651 0 obj <<
+/Title 5652 0 R
+/A 5649 0 R
+/Parent 5647 0 R
+/Next 5655 0 R
+>> endobj
+5647 0 obj <<
+/Title 5648 0 R
+/A 5645 0 R
+/Parent 5643 0 R
+/Next 5815 0 R
+/First 5651 0 R
+/Last 5811 0 R
+/Count -41
+>> endobj
+5643 0 obj <<
+/Title 5644 0 R
+/A 5641 0 R
+/Parent 3279 0 R
+/Prev 5639 0 R
+/Next 5835 0 R
+/First 5647 0 R
+/Last 5815 0 R
+/Count -2
+>> endobj
+5639 0 obj <<
+/Title 5640 0 R
+/A 5637 0 R
+/Parent 3279 0 R
+/Prev 5635 0 R
+/Next 5643 0 R
+>> endobj
+5635 0 obj <<
+/Title 5636 0 R
+/A 5633 0 R
+/Parent 3279 0 R
+/Prev 5295 0 R
+/Next 5639 0 R
+>> endobj
+5631 0 obj <<
+/Title 5632 0 R
+/A 5629 0 R
+/Parent 5299 0 R
+/Prev 5627 0 R
+>> endobj
+5627 0 obj <<
+/Title 5628 0 R
+/A 5625 0 R
+/Parent 5299 0 R
+/Prev 5623 0 R
+/Next 5631 0 R
+>> endobj
+5623 0 obj <<
+/Title 5624 0 R
+/A 5621 0 R
+/Parent 5299 0 R
+/Prev 5619 0 R
+/Next 5627 0 R
+>> endobj
+5619 0 obj <<
+/Title 5620 0 R
+/A 5617 0 R
+/Parent 5299 0 R
+/Prev 5615 0 R
+/Next 5623 0 R
+>> endobj
+5615 0 obj <<
+/Title 5616 0 R
+/A 5613 0 R
+/Parent 5299 0 R
+/Prev 5611 0 R
+/Next 5619 0 R
+>> endobj
+5611 0 obj <<
+/Title 5612 0 R
+/A 5609 0 R
+/Parent 5299 0 R
+/Prev 5607 0 R
+/Next 5615 0 R
+>> endobj
+5607 0 obj <<
+/Title 5608 0 R
+/A 5605 0 R
+/Parent 5299 0 R
+/Prev 5603 0 R
+/Next 5611 0 R
+>> endobj
+5603 0 obj <<
+/Title 5604 0 R
+/A 5601 0 R
+/Parent 5299 0 R
+/Prev 5599 0 R
+/Next 5607 0 R
+>> endobj
+5599 0 obj <<
+/Title 5600 0 R
+/A 5597 0 R
+/Parent 5299 0 R
+/Prev 5595 0 R
+/Next 5603 0 R
+>> endobj
+5595 0 obj <<
+/Title 5596 0 R
+/A 5593 0 R
+/Parent 5299 0 R
+/Prev 5591 0 R
+/Next 5599 0 R
+>> endobj
+5591 0 obj <<
+/Title 5592 0 R
+/A 5589 0 R
+/Parent 5299 0 R
+/Prev 5587 0 R
+/Next 5595 0 R
+>> endobj
+5587 0 obj <<
+/Title 5588 0 R
+/A 5585 0 R
+/Parent 5299 0 R
+/Prev 5583 0 R
+/Next 5591 0 R
+>> endobj
+5583 0 obj <<
+/Title 5584 0 R
+/A 5581 0 R
+/Parent 5299 0 R
+/Prev 5579 0 R
+/Next 5587 0 R
+>> endobj
+5579 0 obj <<
+/Title 5580 0 R
+/A 5577 0 R
+/Parent 5299 0 R
+/Prev 5575 0 R
+/Next 5583 0 R
+>> endobj
+5575 0 obj <<
+/Title 5576 0 R
+/A 5573 0 R
+/Parent 5299 0 R
+/Prev 5571 0 R
+/Next 5579 0 R
+>> endobj
+5571 0 obj <<
+/Title 5572 0 R
+/A 5569 0 R
+/Parent 5299 0 R
+/Prev 5567 0 R
+/Next 5575 0 R
+>> endobj
+5567 0 obj <<
+/Title 5568 0 R
+/A 5565 0 R
+/Parent 5299 0 R
+/Prev 5563 0 R
+/Next 5571 0 R
+>> endobj
+5563 0 obj <<
+/Title 5564 0 R
+/A 5561 0 R
+/Parent 5299 0 R
+/Prev 5559 0 R
+/Next 5567 0 R
+>> endobj
+5559 0 obj <<
+/Title 5560 0 R
+/A 5557 0 R
+/Parent 5299 0 R
+/Prev 5555 0 R
+/Next 5563 0 R
+>> endobj
+5555 0 obj <<
+/Title 5556 0 R
+/A 5553 0 R
+/Parent 5299 0 R
+/Prev 5551 0 R
+/Next 5559 0 R
+>> endobj
+5551 0 obj <<
+/Title 5552 0 R
+/A 5549 0 R
+/Parent 5299 0 R
+/Prev 5547 0 R
+/Next 5555 0 R
+>> endobj
+5547 0 obj <<
+/Title 5548 0 R
+/A 5545 0 R
+/Parent 5299 0 R
+/Prev 5543 0 R
+/Next 5551 0 R
+>> endobj
+5543 0 obj <<
+/Title 5544 0 R
+/A 5541 0 R
+/Parent 5299 0 R
+/Prev 5539 0 R
+/Next 5547 0 R
+>> endobj
+5539 0 obj <<
+/Title 5540 0 R
+/A 5537 0 R
+/Parent 5299 0 R
+/Prev 5535 0 R
+/Next 5543 0 R
+>> endobj
+5535 0 obj <<
+/Title 5536 0 R
+/A 5533 0 R
+/Parent 5299 0 R
+/Prev 5531 0 R
+/Next 5539 0 R
+>> endobj
+5531 0 obj <<
+/Title 5532 0 R
+/A 5529 0 R
+/Parent 5299 0 R
+/Prev 5527 0 R
+/Next 5535 0 R
+>> endobj
+5527 0 obj <<
+/Title 5528 0 R
+/A 5525 0 R
+/Parent 5299 0 R
+/Prev 5523 0 R
+/Next 5531 0 R
+>> endobj
+5523 0 obj <<
+/Title 5524 0 R
+/A 5521 0 R
+/Parent 5299 0 R
+/Prev 5519 0 R
+/Next 5527 0 R
+>> endobj
+5519 0 obj <<
+/Title 5520 0 R
+/A 5517 0 R
+/Parent 5299 0 R
+/Prev 5515 0 R
+/Next 5523 0 R
+>> endobj
+5515 0 obj <<
+/Title 5516 0 R
+/A 5513 0 R
+/Parent 5299 0 R
+/Prev 5511 0 R
+/Next 5519 0 R
+>> endobj
+5511 0 obj <<
+/Title 5512 0 R
+/A 5509 0 R
+/Parent 5299 0 R
+/Prev 5507 0 R
+/Next 5515 0 R
+>> endobj
+5507 0 obj <<
+/Title 5508 0 R
+/A 5505 0 R
+/Parent 5299 0 R
+/Prev 5503 0 R
+/Next 5511 0 R
+>> endobj
+5503 0 obj <<
+/Title 5504 0 R
+/A 5501 0 R
+/Parent 5299 0 R
+/Prev 5499 0 R
+/Next 5507 0 R
+>> endobj
+5499 0 obj <<
+/Title 5500 0 R
+/A 5497 0 R
+/Parent 5299 0 R
+/Prev 5495 0 R
+/Next 5503 0 R
+>> endobj
+5495 0 obj <<
+/Title 5496 0 R
+/A 5493 0 R
+/Parent 5299 0 R
+/Prev 5491 0 R
+/Next 5499 0 R
+>> endobj
+5491 0 obj <<
+/Title 5492 0 R
+/A 5489 0 R
+/Parent 5299 0 R
+/Prev 5487 0 R
+/Next 5495 0 R
+>> endobj
+5487 0 obj <<
+/Title 5488 0 R
+/A 5485 0 R
+/Parent 5299 0 R
+/Prev 5483 0 R
+/Next 5491 0 R
+>> endobj
+5483 0 obj <<
+/Title 5484 0 R
+/A 5481 0 R
+/Parent 5299 0 R
+/Prev 5479 0 R
+/Next 5487 0 R
+>> endobj
+5479 0 obj <<
+/Title 5480 0 R
+/A 5477 0 R
+/Parent 5299 0 R
+/Prev 5475 0 R
+/Next 5483 0 R
+>> endobj
+5475 0 obj <<
+/Title 5476 0 R
+/A 5473 0 R
+/Parent 5299 0 R
+/Prev 5471 0 R
+/Next 5479 0 R
+>> endobj
+5471 0 obj <<
+/Title 5472 0 R
+/A 5469 0 R
+/Parent 5299 0 R
+/Prev 5467 0 R
+/Next 5475 0 R
+>> endobj
+5467 0 obj <<
+/Title 5468 0 R
+/A 5465 0 R
+/Parent 5299 0 R
+/Prev 5463 0 R
+/Next 5471 0 R
+>> endobj
+5463 0 obj <<
+/Title 5464 0 R
+/A 5461 0 R
+/Parent 5299 0 R
+/Prev 5459 0 R
+/Next 5467 0 R
+>> endobj
+5459 0 obj <<
+/Title 5460 0 R
+/A 5457 0 R
+/Parent 5299 0 R
+/Prev 5455 0 R
+/Next 5463 0 R
+>> endobj
+5455 0 obj <<
+/Title 5456 0 R
+/A 5453 0 R
+/Parent 5299 0 R
+/Prev 5451 0 R
+/Next 5459 0 R
+>> endobj
+5451 0 obj <<
+/Title 5452 0 R
+/A 5449 0 R
+/Parent 5299 0 R
+/Prev 5447 0 R
+/Next 5455 0 R
+>> endobj
+5447 0 obj <<
+/Title 5448 0 R
+/A 5445 0 R
+/Parent 5299 0 R
+/Prev 5443 0 R
+/Next 5451 0 R
+>> endobj
+5443 0 obj <<
+/Title 5444 0 R
+/A 5441 0 R
+/Parent 5299 0 R
+/Prev 5439 0 R
+/Next 5447 0 R
+>> endobj
+5439 0 obj <<
+/Title 5440 0 R
+/A 5437 0 R
+/Parent 5299 0 R
+/Prev 5435 0 R
+/Next 5443 0 R
+>> endobj
+5435 0 obj <<
+/Title 5436 0 R
+/A 5433 0 R
+/Parent 5299 0 R
+/Prev 5431 0 R
+/Next 5439 0 R
+>> endobj
+5431 0 obj <<
+/Title 5432 0 R
+/A 5429 0 R
+/Parent 5299 0 R
+/Prev 5427 0 R
+/Next 5435 0 R
+>> endobj
+5427 0 obj <<
+/Title 5428 0 R
+/A 5425 0 R
+/Parent 5299 0 R
+/Prev 5423 0 R
+/Next 5431 0 R
+>> endobj
+5423 0 obj <<
+/Title 5424 0 R
+/A 5421 0 R
+/Parent 5299 0 R
+/Prev 5419 0 R
+/Next 5427 0 R
+>> endobj
+5419 0 obj <<
+/Title 5420 0 R
+/A 5417 0 R
+/Parent 5299 0 R
+/Prev 5415 0 R
+/Next 5423 0 R
+>> endobj
+5415 0 obj <<
+/Title 5416 0 R
+/A 5413 0 R
+/Parent 5299 0 R
+/Prev 5411 0 R
+/Next 5419 0 R
+>> endobj
+5411 0 obj <<
+/Title 5412 0 R
+/A 5409 0 R
+/Parent 5299 0 R
+/Prev 5407 0 R
+/Next 5415 0 R
+>> endobj
+5407 0 obj <<
+/Title 5408 0 R
+/A 5405 0 R
+/Parent 5299 0 R
+/Prev 5403 0 R
+/Next 5411 0 R
+>> endobj
+5403 0 obj <<
+/Title 5404 0 R
+/A 5401 0 R
+/Parent 5299 0 R
+/Prev 5399 0 R
+/Next 5407 0 R
+>> endobj
+5399 0 obj <<
+/Title 5400 0 R
+/A 5397 0 R
+/Parent 5299 0 R
+/Prev 5395 0 R
+/Next 5403 0 R
+>> endobj
+5395 0 obj <<
+/Title 5396 0 R
+/A 5393 0 R
+/Parent 5299 0 R
+/Prev 5391 0 R
+/Next 5399 0 R
+>> endobj
+5391 0 obj <<
+/Title 5392 0 R
+/A 5389 0 R
+/Parent 5299 0 R
+/Prev 5387 0 R
+/Next 5395 0 R
+>> endobj
+5387 0 obj <<
+/Title 5388 0 R
+/A 5385 0 R
+/Parent 5299 0 R
+/Prev 5383 0 R
+/Next 5391 0 R
+>> endobj
+5383 0 obj <<
+/Title 5384 0 R
+/A 5381 0 R
+/Parent 5299 0 R
+/Prev 5379 0 R
+/Next 5387 0 R
+>> endobj
+5379 0 obj <<
+/Title 5380 0 R
+/A 5377 0 R
+/Parent 5299 0 R
+/Prev 5375 0 R
+/Next 5383 0 R
+>> endobj
+5375 0 obj <<
+/Title 5376 0 R
+/A 5373 0 R
+/Parent 5299 0 R
+/Prev 5371 0 R
+/Next 5379 0 R
+>> endobj
+5371 0 obj <<
+/Title 5372 0 R
+/A 5369 0 R
+/Parent 5299 0 R
+/Prev 5367 0 R
+/Next 5375 0 R
+>> endobj
+5367 0 obj <<
+/Title 5368 0 R
+/A 5365 0 R
+/Parent 5299 0 R
+/Prev 5363 0 R
+/Next 5371 0 R
+>> endobj
+5363 0 obj <<
+/Title 5364 0 R
+/A 5361 0 R
+/Parent 5299 0 R
+/Prev 5359 0 R
+/Next 5367 0 R
+>> endobj
+5359 0 obj <<
+/Title 5360 0 R
+/A 5357 0 R
+/Parent 5299 0 R
+/Prev 5355 0 R
+/Next 5363 0 R
+>> endobj
+5355 0 obj <<
+/Title 5356 0 R
+/A 5353 0 R
+/Parent 5299 0 R
+/Prev 5351 0 R
+/Next 5359 0 R
+>> endobj
+5351 0 obj <<
+/Title 5352 0 R
+/A 5349 0 R
+/Parent 5299 0 R
+/Prev 5347 0 R
+/Next 5355 0 R
+>> endobj
+5347 0 obj <<
+/Title 5348 0 R
+/A 5345 0 R
+/Parent 5299 0 R
+/Prev 5343 0 R
+/Next 5351 0 R
+>> endobj
+5343 0 obj <<
+/Title 5344 0 R
+/A 5341 0 R
+/Parent 5299 0 R
+/Prev 5339 0 R
+/Next 5347 0 R
+>> endobj
+5339 0 obj <<
+/Title 5340 0 R
+/A 5337 0 R
+/Parent 5299 0 R
+/Prev 5335 0 R
+/Next 5343 0 R
+>> endobj
+5335 0 obj <<
+/Title 5336 0 R
+/A 5333 0 R
+/Parent 5299 0 R
+/Prev 5331 0 R
+/Next 5339 0 R
+>> endobj
+5331 0 obj <<
+/Title 5332 0 R
+/A 5329 0 R
+/Parent 5299 0 R
+/Prev 5327 0 R
+/Next 5335 0 R
+>> endobj
+5327 0 obj <<
+/Title 5328 0 R
+/A 5325 0 R
+/Parent 5299 0 R
+/Prev 5323 0 R
+/Next 5331 0 R
+>> endobj
+5323 0 obj <<
+/Title 5324 0 R
+/A 5321 0 R
+/Parent 5299 0 R
+/Prev 5319 0 R
+/Next 5327 0 R
+>> endobj
+5319 0 obj <<
+/Title 5320 0 R
+/A 5317 0 R
+/Parent 5299 0 R
+/Prev 5315 0 R
+/Next 5323 0 R
+>> endobj
+5315 0 obj <<
+/Title 5316 0 R
+/A 5313 0 R
+/Parent 5299 0 R
+/Prev 5311 0 R
+/Next 5319 0 R
+>> endobj
+5311 0 obj <<
+/Title 5312 0 R
+/A 5309 0 R
+/Parent 5299 0 R
+/Prev 5307 0 R
+/Next 5315 0 R
+>> endobj
+5307 0 obj <<
+/Title 5308 0 R
+/A 5305 0 R
+/Parent 5299 0 R
+/Prev 5303 0 R
+/Next 5311 0 R
+>> endobj
+5303 0 obj <<
+/Title 5304 0 R
+/A 5301 0 R
+/Parent 5299 0 R
+/Next 5307 0 R
+>> endobj
+5299 0 obj <<
+/Title 5300 0 R
+/A 5297 0 R
+/Parent 5295 0 R
+/First 5303 0 R
+/Last 5631 0 R
+/Count -83
+>> endobj
+5295 0 obj <<
+/Title 5296 0 R
+/A 5293 0 R
+/Parent 3279 0 R
+/Prev 5111 0 R
+/Next 5635 0 R
+/First 5299 0 R
+/Last 5299 0 R
+/Count -1
+>> endobj
+5291 0 obj <<
+/Title 5292 0 R
+/A 5289 0 R
+/Parent 5115 0 R
+/Prev 5287 0 R
+>> endobj
+5287 0 obj <<
+/Title 5288 0 R
+/A 5285 0 R
+/Parent 5115 0 R
+/Prev 5283 0 R
+/Next 5291 0 R
+>> endobj
+5283 0 obj <<
+/Title 5284 0 R
+/A 5281 0 R
+/Parent 5115 0 R
+/Prev 5279 0 R
+/Next 5287 0 R
+>> endobj
+5279 0 obj <<
+/Title 5280 0 R
+/A 5277 0 R
+/Parent 5115 0 R
+/Prev 5275 0 R
+/Next 5283 0 R
+>> endobj
+5275 0 obj <<
+/Title 5276 0 R
+/A 5273 0 R
+/Parent 5115 0 R
+/Prev 5271 0 R
+/Next 5279 0 R
+>> endobj
+5271 0 obj <<
+/Title 5272 0 R
+/A 5269 0 R
+/Parent 5115 0 R
+/Prev 5267 0 R
+/Next 5275 0 R
+>> endobj
+5267 0 obj <<
+/Title 5268 0 R
+/A 5265 0 R
+/Parent 5115 0 R
+/Prev 5263 0 R
+/Next 5271 0 R
+>> endobj
+5263 0 obj <<
+/Title 5264 0 R
+/A 5261 0 R
+/Parent 5115 0 R
+/Prev 5259 0 R
+/Next 5267 0 R
+>> endobj
+5259 0 obj <<
+/Title 5260 0 R
+/A 5257 0 R
+/Parent 5115 0 R
+/Prev 5255 0 R
+/Next 5263 0 R
+>> endobj
+5255 0 obj <<
+/Title 5256 0 R
+/A 5253 0 R
+/Parent 5115 0 R
+/Prev 5251 0 R
+/Next 5259 0 R
+>> endobj
+5251 0 obj <<
+/Title 5252 0 R
+/A 5249 0 R
+/Parent 5115 0 R
+/Prev 5247 0 R
+/Next 5255 0 R
+>> endobj
+5247 0 obj <<
+/Title 5248 0 R
+/A 5245 0 R
+/Parent 5115 0 R
+/Prev 5243 0 R
+/Next 5251 0 R
+>> endobj
+5243 0 obj <<
+/Title 5244 0 R
+/A 5241 0 R
+/Parent 5115 0 R
+/Prev 5239 0 R
+/Next 5247 0 R
+>> endobj
+5239 0 obj <<
+/Title 5240 0 R
+/A 5237 0 R
+/Parent 5115 0 R
+/Prev 5235 0 R
+/Next 5243 0 R
+>> endobj
+5235 0 obj <<
+/Title 5236 0 R
+/A 5233 0 R
+/Parent 5115 0 R
+/Prev 5231 0 R
+/Next 5239 0 R
+>> endobj
+5231 0 obj <<
+/Title 5232 0 R
+/A 5229 0 R
+/Parent 5115 0 R
+/Prev 5227 0 R
+/Next 5235 0 R
+>> endobj
+5227 0 obj <<
+/Title 5228 0 R
+/A 5225 0 R
+/Parent 5115 0 R
+/Prev 5223 0 R
+/Next 5231 0 R
+>> endobj
+5223 0 obj <<
+/Title 5224 0 R
+/A 5221 0 R
+/Parent 5115 0 R
+/Prev 5219 0 R
+/Next 5227 0 R
+>> endobj
+5219 0 obj <<
+/Title 5220 0 R
+/A 5217 0 R
+/Parent 5115 0 R
+/Prev 5215 0 R
+/Next 5223 0 R
+>> endobj
+5215 0 obj <<
+/Title 5216 0 R
+/A 5213 0 R
+/Parent 5115 0 R
+/Prev 5211 0 R
+/Next 5219 0 R
+>> endobj
+5211 0 obj <<
+/Title 5212 0 R
+/A 5209 0 R
+/Parent 5115 0 R
+/Prev 5207 0 R
+/Next 5215 0 R
+>> endobj
+5207 0 obj <<
+/Title 5208 0 R
+/A 5205 0 R
+/Parent 5115 0 R
+/Prev 5203 0 R
+/Next 5211 0 R
+>> endobj
+5203 0 obj <<
+/Title 5204 0 R
+/A 5201 0 R
+/Parent 5115 0 R
+/Prev 5199 0 R
+/Next 5207 0 R
+>> endobj
+5199 0 obj <<
+/Title 5200 0 R
+/A 5197 0 R
+/Parent 5115 0 R
+/Prev 5195 0 R
+/Next 5203 0 R
+>> endobj
+5195 0 obj <<
+/Title 5196 0 R
+/A 5193 0 R
+/Parent 5115 0 R
+/Prev 5191 0 R
+/Next 5199 0 R
+>> endobj
+5191 0 obj <<
+/Title 5192 0 R
+/A 5189 0 R
+/Parent 5115 0 R
+/Prev 5187 0 R
+/Next 5195 0 R
+>> endobj
+5187 0 obj <<
+/Title 5188 0 R
+/A 5185 0 R
+/Parent 5115 0 R
+/Prev 5183 0 R
+/Next 5191 0 R
+>> endobj
+5183 0 obj <<
+/Title 5184 0 R
+/A 5181 0 R
+/Parent 5115 0 R
+/Prev 5179 0 R
+/Next 5187 0 R
+>> endobj
+5179 0 obj <<
+/Title 5180 0 R
+/A 5177 0 R
+/Parent 5115 0 R
+/Prev 5175 0 R
+/Next 5183 0 R
+>> endobj
+5175 0 obj <<
+/Title 5176 0 R
+/A 5173 0 R
+/Parent 5115 0 R
+/Prev 5171 0 R
+/Next 5179 0 R
+>> endobj
+5171 0 obj <<
+/Title 5172 0 R
+/A 5169 0 R
+/Parent 5115 0 R
+/Prev 5167 0 R
+/Next 5175 0 R
+>> endobj
+5167 0 obj <<
+/Title 5168 0 R
+/A 5165 0 R
+/Parent 5115 0 R
+/Prev 5163 0 R
+/Next 5171 0 R
+>> endobj
+5163 0 obj <<
+/Title 5164 0 R
+/A 5161 0 R
+/Parent 5115 0 R
+/Prev 5159 0 R
+/Next 5167 0 R
+>> endobj
+5159 0 obj <<
+/Title 5160 0 R
+/A 5157 0 R
+/Parent 5115 0 R
+/Prev 5155 0 R
+/Next 5163 0 R
+>> endobj
+5155 0 obj <<
+/Title 5156 0 R
+/A 5153 0 R
+/Parent 5115 0 R
+/Prev 5151 0 R
+/Next 5159 0 R
+>> endobj
+5151 0 obj <<
+/Title 5152 0 R
+/A 5149 0 R
+/Parent 5115 0 R
+/Prev 5147 0 R
+/Next 5155 0 R
+>> endobj
+5147 0 obj <<
+/Title 5148 0 R
+/A 5145 0 R
+/Parent 5115 0 R
+/Prev 5143 0 R
+/Next 5151 0 R
+>> endobj
+5143 0 obj <<
+/Title 5144 0 R
+/A 5141 0 R
+/Parent 5115 0 R
+/Prev 5139 0 R
+/Next 5147 0 R
+>> endobj
+5139 0 obj <<
+/Title 5140 0 R
+/A 5137 0 R
+/Parent 5115 0 R
+/Prev 5135 0 R
+/Next 5143 0 R
+>> endobj
+5135 0 obj <<
+/Title 5136 0 R
+/A 5133 0 R
+/Parent 5115 0 R
+/Prev 5131 0 R
+/Next 5139 0 R
+>> endobj
+5131 0 obj <<
+/Title 5132 0 R
+/A 5129 0 R
+/Parent 5115 0 R
+/Prev 5127 0 R
+/Next 5135 0 R
+>> endobj
+5127 0 obj <<
+/Title 5128 0 R
+/A 5125 0 R
+/Parent 5115 0 R
+/Prev 5123 0 R
+/Next 5131 0 R
+>> endobj
+5123 0 obj <<
+/Title 5124 0 R
+/A 5121 0 R
+/Parent 5115 0 R
+/Prev 5119 0 R
+/Next 5127 0 R
+>> endobj
+5119 0 obj <<
+/Title 5120 0 R
+/A 5117 0 R
+/Parent 5115 0 R
+/Next 5123 0 R
+>> endobj
+5115 0 obj <<
+/Title 5116 0 R
+/A 5113 0 R
+/Parent 5111 0 R
+/First 5119 0 R
+/Last 5291 0 R
+/Count -44
+>> endobj
+5111 0 obj <<
+/Title 5112 0 R
+/A 5109 0 R
+/Parent 3279 0 R
+/Prev 5051 0 R
+/Next 5295 0 R
+/First 5115 0 R
+/Last 5115 0 R
+/Count -1
+>> endobj
+5107 0 obj <<
+/Title 5108 0 R
+/A 5105 0 R
+/Parent 5087 0 R
+/Prev 5103 0 R
+>> endobj
+5103 0 obj <<
+/Title 5104 0 R
+/A 5101 0 R
+/Parent 5087 0 R
+/Prev 5099 0 R
+/Next 5107 0 R
+>> endobj
+5099 0 obj <<
+/Title 5100 0 R
+/A 5097 0 R
+/Parent 5087 0 R
+/Prev 5095 0 R
+/Next 5103 0 R
+>> endobj
+5095 0 obj <<
+/Title 5096 0 R
+/A 5093 0 R
+/Parent 5087 0 R
+/Prev 5091 0 R
+/Next 5099 0 R
+>> endobj
+5091 0 obj <<
+/Title 5092 0 R
+/A 5089 0 R
+/Parent 5087 0 R
+/Next 5095 0 R
+>> endobj
+5087 0 obj <<
+/Title 5088 0 R
+/A 5085 0 R
+/Parent 5051 0 R
+/Prev 5075 0 R
+/First 5091 0 R
+/Last 5107 0 R
+/Count -5
+>> endobj
+5083 0 obj <<
+/Title 5084 0 R
+/A 5081 0 R
+/Parent 5075 0 R
+/Prev 5079 0 R
+>> endobj
+5079 0 obj <<
+/Title 5080 0 R
+/A 5077 0 R
+/Parent 5075 0 R
+/Next 5083 0 R
+>> endobj
+5075 0 obj <<
+/Title 5076 0 R
+/A 5073 0 R
+/Parent 5051 0 R
+/Prev 5055 0 R
+/Next 5087 0 R
+/First 5079 0 R
+/Last 5083 0 R
+/Count -2
+>> endobj
+5071 0 obj <<
+/Title 5072 0 R
+/A 5069 0 R
+/Parent 5055 0 R
+/Prev 5067 0 R
+>> endobj
+5067 0 obj <<
+/Title 5068 0 R
+/A 5065 0 R
+/Parent 5055 0 R
+/Prev 5063 0 R
+/Next 5071 0 R
+>> endobj
+5063 0 obj <<
+/Title 5064 0 R
+/A 5061 0 R
+/Parent 5055 0 R
+/Prev 5059 0 R
+/Next 5067 0 R
+>> endobj
+5059 0 obj <<
+/Title 5060 0 R
+/A 5057 0 R
+/Parent 5055 0 R
+/Next 5063 0 R
+>> endobj
+5055 0 obj <<
+/Title 5056 0 R
+/A 5053 0 R
+/Parent 5051 0 R
+/Next 5075 0 R
+/First 5059 0 R
+/Last 5071 0 R
+/Count -4
+>> endobj
+5051 0 obj <<
+/Title 5052 0 R
+/A 5049 0 R
+/Parent 3279 0 R
+/Prev 4975 0 R
+/Next 5111 0 R
+/First 5055 0 R
+/Last 5087 0 R
+/Count -3
+>> endobj
+5047 0 obj <<
+/Title 5048 0 R
+/A 5045 0 R
+/Parent 4979 0 R
+/Prev 5043 0 R
+>> endobj
+5043 0 obj <<
+/Title 5044 0 R
+/A 5041 0 R
+/Parent 4979 0 R
+/Prev 5039 0 R
+/Next 5047 0 R
+>> endobj
+5039 0 obj <<
+/Title 5040 0 R
+/A 5037 0 R
+/Parent 4979 0 R
+/Prev 5035 0 R
+/Next 5043 0 R
+>> endobj
+5035 0 obj <<
+/Title 5036 0 R
+/A 5033 0 R
+/Parent 4979 0 R
+/Prev 5031 0 R
+/Next 5039 0 R
+>> endobj
+5031 0 obj <<
+/Title 5032 0 R
+/A 5029 0 R
+/Parent 4979 0 R
+/Prev 5027 0 R
+/Next 5035 0 R
+>> endobj
+5027 0 obj <<
+/Title 5028 0 R
+/A 5025 0 R
+/Parent 4979 0 R
+/Prev 5023 0 R
+/Next 5031 0 R
+>> endobj
+5023 0 obj <<
+/Title 5024 0 R
+/A 5021 0 R
+/Parent 4979 0 R
+/Prev 5019 0 R
+/Next 5027 0 R
+>> endobj
+5019 0 obj <<
+/Title 5020 0 R
+/A 5017 0 R
+/Parent 4979 0 R
+/Prev 5015 0 R
+/Next 5023 0 R
+>> endobj
+5015 0 obj <<
+/Title 5016 0 R
+/A 5013 0 R
+/Parent 4979 0 R
+/Prev 5011 0 R
+/Next 5019 0 R
+>> endobj
+5011 0 obj <<
+/Title 5012 0 R
+/A 5009 0 R
+/Parent 4979 0 R
+/Prev 5007 0 R
+/Next 5015 0 R
+>> endobj
+5007 0 obj <<
+/Title 5008 0 R
+/A 5005 0 R
+/Parent 4979 0 R
+/Prev 5003 0 R
+/Next 5011 0 R
+>> endobj
+5003 0 obj <<
+/Title 5004 0 R
+/A 5001 0 R
+/Parent 4979 0 R
+/Prev 4999 0 R
+/Next 5007 0 R
+>> endobj
+4999 0 obj <<
+/Title 5000 0 R
+/A 4997 0 R
+/Parent 4979 0 R
+/Prev 4995 0 R
+/Next 5003 0 R
+>> endobj
+4995 0 obj <<
+/Title 4996 0 R
+/A 4993 0 R
+/Parent 4979 0 R
+/Prev 4991 0 R
+/Next 4999 0 R
+>> endobj
+4991 0 obj <<
+/Title 4992 0 R
+/A 4989 0 R
+/Parent 4979 0 R
+/Prev 4987 0 R
+/Next 4995 0 R
+>> endobj
+4987 0 obj <<
+/Title 4988 0 R
+/A 4985 0 R
+/Parent 4979 0 R
+/Prev 4983 0 R
+/Next 4991 0 R
+>> endobj
+4983 0 obj <<
+/Title 4984 0 R
+/A 4981 0 R
+/Parent 4979 0 R
+/Next 4987 0 R
+>> endobj
+4979 0 obj <<
+/Title 4980 0 R
+/A 4977 0 R
+/Parent 4975 0 R
+/First 4983 0 R
+/Last 5047 0 R
+/Count -17
+>> endobj
+4975 0 obj <<
+/Title 4976 0 R
+/A 4973 0 R
+/Parent 3279 0 R
+/Prev 4923 0 R
+/Next 5051 0 R
+/First 4979 0 R
+/Last 4979 0 R
+/Count -1
+>> endobj
+4971 0 obj <<
+/Title 4972 0 R
+/A 4969 0 R
+/Parent 4963 0 R
+/Prev 4967 0 R
+>> endobj
+4967 0 obj <<
+/Title 4968 0 R
+/A 4965 0 R
+/Parent 4963 0 R
+/Next 4971 0 R
+>> endobj
+4963 0 obj <<
+/Title 4964 0 R
+/A 4961 0 R
+/Parent 4923 0 R
+/Prev 4955 0 R
+/First 4967 0 R
+/Last 4971 0 R
+/Count -2
+>> endobj
+4959 0 obj <<
+/Title 4960 0 R
+/A 4957 0 R
+/Parent 4955 0 R
+>> endobj
+4955 0 obj <<
+/Title 4956 0 R
+/A 4953 0 R
+/Parent 4923 0 R
+/Prev 4927 0 R
+/Next 4963 0 R
+/First 4959 0 R
+/Last 4959 0 R
+/Count -1
+>> endobj
+4951 0 obj <<
+/Title 4952 0 R
+/A 4949 0 R
+/Parent 4927 0 R
+/Prev 4947 0 R
+>> endobj
+4947 0 obj <<
+/Title 4948 0 R
+/A 4945 0 R
+/Parent 4927 0 R
+/Prev 4943 0 R
+/Next 4951 0 R
+>> endobj
+4943 0 obj <<
+/Title 4944 0 R
+/A 4941 0 R
+/Parent 4927 0 R
+/Prev 4939 0 R
+/Next 4947 0 R
+>> endobj
+4939 0 obj <<
+/Title 4940 0 R
+/A 4937 0 R
+/Parent 4927 0 R
+/Prev 4935 0 R
+/Next 4943 0 R
+>> endobj
+4935 0 obj <<
+/Title 4936 0 R
+/A 4933 0 R
+/Parent 4927 0 R
+/Prev 4931 0 R
+/Next 4939 0 R
+>> endobj
+4931 0 obj <<
+/Title 4932 0 R
+/A 4929 0 R
+/Parent 4927 0 R
+/Next 4935 0 R
+>> endobj
+4927 0 obj <<
+/Title 4928 0 R
+/A 4925 0 R
+/Parent 4923 0 R
+/Next 4955 0 R
+/First 4931 0 R
+/Last 4951 0 R
+/Count -6
+>> endobj
+4923 0 obj <<
+/Title 4924 0 R
+/A 4921 0 R
+/Parent 3279 0 R
+/Prev 4787 0 R
+/Next 4975 0 R
+/First 4927 0 R
+/Last 4963 0 R
+/Count -3
+>> endobj
+4919 0 obj <<
+/Title 4920 0 R
+/A 4917 0 R
+/Parent 4899 0 R
+/Prev 4915 0 R
+>> endobj
+4915 0 obj <<
+/Title 4916 0 R
+/A 4913 0 R
+/Parent 4899 0 R
+/Prev 4911 0 R
+/Next 4919 0 R
+>> endobj
+4911 0 obj <<
+/Title 4912 0 R
+/A 4909 0 R
+/Parent 4899 0 R
+/Prev 4907 0 R
+/Next 4915 0 R
+>> endobj
+4907 0 obj <<
+/Title 4908 0 R
+/A 4905 0 R
+/Parent 4899 0 R
+/Prev 4903 0 R
+/Next 4911 0 R
+>> endobj
+4903 0 obj <<
+/Title 4904 0 R
+/A 4901 0 R
+/Parent 4899 0 R
+/Next 4907 0 R
+>> endobj
+4899 0 obj <<
+/Title 4900 0 R
+/A 4897 0 R
+/Parent 4787 0 R
+/Prev 4811 0 R
+/First 4903 0 R
+/Last 4919 0 R
+/Count -5
+>> endobj
+4895 0 obj <<
+/Title 4896 0 R
+/A 4893 0 R
+/Parent 4811 0 R
+/Prev 4891 0 R
+>> endobj
+4891 0 obj <<
+/Title 4892 0 R
+/A 4889 0 R
+/Parent 4811 0 R
+/Prev 4887 0 R
+/Next 4895 0 R
+>> endobj
+4887 0 obj <<
+/Title 4888 0 R
+/A 4885 0 R
+/Parent 4811 0 R
+/Prev 4883 0 R
+/Next 4891 0 R
+>> endobj
+4883 0 obj <<
+/Title 4884 0 R
+/A 4881 0 R
+/Parent 4811 0 R
+/Prev 4879 0 R
+/Next 4887 0 R
+>> endobj
+4879 0 obj <<
+/Title 4880 0 R
+/A 4877 0 R
+/Parent 4811 0 R
+/Prev 4875 0 R
+/Next 4883 0 R
+>> endobj
+4875 0 obj <<
+/Title 4876 0 R
+/A 4873 0 R
+/Parent 4811 0 R
+/Prev 4871 0 R
+/Next 4879 0 R
+>> endobj
+4871 0 obj <<
+/Title 4872 0 R
+/A 4869 0 R
+/Parent 4811 0 R
+/Prev 4867 0 R
+/Next 4875 0 R
+>> endobj
+4867 0 obj <<
+/Title 4868 0 R
+/A 4865 0 R
+/Parent 4811 0 R
+/Prev 4863 0 R
+/Next 4871 0 R
+>> endobj
+4863 0 obj <<
+/Title 4864 0 R
+/A 4861 0 R
+/Parent 4811 0 R
+/Prev 4859 0 R
+/Next 4867 0 R
+>> endobj
+4859 0 obj <<
+/Title 4860 0 R
+/A 4857 0 R
+/Parent 4811 0 R
+/Prev 4855 0 R
+/Next 4863 0 R
+>> endobj
+4855 0 obj <<
+/Title 4856 0 R
+/A 4853 0 R
+/Parent 4811 0 R
+/Prev 4851 0 R
+/Next 4859 0 R
+>> endobj
+4851 0 obj <<
+/Title 4852 0 R
+/A 4849 0 R
+/Parent 4811 0 R
+/Prev 4847 0 R
+/Next 4855 0 R
+>> endobj
+4847 0 obj <<
+/Title 4848 0 R
+/A 4845 0 R
+/Parent 4811 0 R
+/Prev 4843 0 R
+/Next 4851 0 R
+>> endobj
+4843 0 obj <<
+/Title 4844 0 R
+/A 4841 0 R
+/Parent 4811 0 R
+/Prev 4839 0 R
+/Next 4847 0 R
+>> endobj
+4839 0 obj <<
+/Title 4840 0 R
+/A 4837 0 R
+/Parent 4811 0 R
+/Prev 4835 0 R
+/Next 4843 0 R
+>> endobj
+4835 0 obj <<
+/Title 4836 0 R
+/A 4833 0 R
+/Parent 4811 0 R
+/Prev 4831 0 R
+/Next 4839 0 R
+>> endobj
+4831 0 obj <<
+/Title 4832 0 R
+/A 4829 0 R
+/Parent 4811 0 R
+/Prev 4827 0 R
+/Next 4835 0 R
+>> endobj
+4827 0 obj <<
+/Title 4828 0 R
+/A 4825 0 R
+/Parent 4811 0 R
+/Prev 4823 0 R
+/Next 4831 0 R
+>> endobj
+4823 0 obj <<
+/Title 4824 0 R
+/A 4821 0 R
+/Parent 4811 0 R
+/Prev 4819 0 R
+/Next 4827 0 R
+>> endobj
+4819 0 obj <<
+/Title 4820 0 R
+/A 4817 0 R
+/Parent 4811 0 R
+/Prev 4815 0 R
+/Next 4823 0 R
+>> endobj
+4815 0 obj <<
+/Title 4816 0 R
+/A 4813 0 R
+/Parent 4811 0 R
+/Next 4819 0 R
+>> endobj
+4811 0 obj <<
+/Title 4812 0 R
+/A 4809 0 R
+/Parent 4787 0 R
+/Prev 4803 0 R
+/Next 4899 0 R
+/First 4815 0 R
+/Last 4895 0 R
+/Count -21
+>> endobj
+4807 0 obj <<
+/Title 4808 0 R
+/A 4805 0 R
+/Parent 4803 0 R
+>> endobj
+4803 0 obj <<
+/Title 4804 0 R
+/A 4801 0 R
+/Parent 4787 0 R
+/Prev 4791 0 R
+/Next 4811 0 R
+/First 4807 0 R
+/Last 4807 0 R
+/Count -1
+>> endobj
+4799 0 obj <<
+/Title 4800 0 R
+/A 4797 0 R
+/Parent 4791 0 R
+/Prev 4795 0 R
+>> endobj
+4795 0 obj <<
+/Title 4796 0 R
+/A 4793 0 R
+/Parent 4791 0 R
+/Next 4799 0 R
+>> endobj
+4791 0 obj <<
+/Title 4792 0 R
+/A 4789 0 R
+/Parent 4787 0 R
+/Next 4803 0 R
+/First 4795 0 R
+/Last 4799 0 R
+/Count -2
+>> endobj
+4787 0 obj <<
+/Title 4788 0 R
+/A 4785 0 R
+/Parent 3279 0 R
+/Prev 4655 0 R
+/Next 4923 0 R
+/First 4791 0 R
+/Last 4899 0 R
+/Count -4
+>> endobj
+4783 0 obj <<
+/Title 4784 0 R
+/A 4781 0 R
+/Parent 4703 0 R
+/Prev 4779 0 R
+>> endobj
+4779 0 obj <<
+/Title 4780 0 R
+/A 4777 0 R
+/Parent 4703 0 R
+/Prev 4775 0 R
+/Next 4783 0 R
+>> endobj
+4775 0 obj <<
+/Title 4776 0 R
+/A 4773 0 R
+/Parent 4703 0 R
+/Prev 4771 0 R
+/Next 4779 0 R
+>> endobj
+4771 0 obj <<
+/Title 4772 0 R
+/A 4769 0 R
+/Parent 4703 0 R
+/Prev 4767 0 R
+/Next 4775 0 R
+>> endobj
+4767 0 obj <<
+/Title 4768 0 R
+/A 4765 0 R
+/Parent 4703 0 R
+/Prev 4763 0 R
+/Next 4771 0 R
+>> endobj
+4763 0 obj <<
+/Title 4764 0 R
+/A 4761 0 R
+/Parent 4703 0 R
+/Prev 4759 0 R
+/Next 4767 0 R
+>> endobj
+4759 0 obj <<
+/Title 4760 0 R
+/A 4757 0 R
+/Parent 4703 0 R
+/Prev 4755 0 R
+/Next 4763 0 R
+>> endobj
+4755 0 obj <<
+/Title 4756 0 R
+/A 4753 0 R
+/Parent 4703 0 R
+/Prev 4751 0 R
+/Next 4759 0 R
+>> endobj
+4751 0 obj <<
+/Title 4752 0 R
+/A 4749 0 R
+/Parent 4703 0 R
+/Prev 4747 0 R
+/Next 4755 0 R
+>> endobj
+4747 0 obj <<
+/Title 4748 0 R
+/A 4745 0 R
+/Parent 4703 0 R
+/Prev 4743 0 R
+/Next 4751 0 R
+>> endobj
+4743 0 obj <<
+/Title 4744 0 R
+/A 4741 0 R
+/Parent 4703 0 R
+/Prev 4739 0 R
+/Next 4747 0 R
+>> endobj
+4739 0 obj <<
+/Title 4740 0 R
+/A 4737 0 R
+/Parent 4703 0 R
+/Prev 4735 0 R
+/Next 4743 0 R
+>> endobj
+4735 0 obj <<
+/Title 4736 0 R
+/A 4733 0 R
+/Parent 4703 0 R
+/Prev 4731 0 R
+/Next 4739 0 R
+>> endobj
+4731 0 obj <<
+/Title 4732 0 R
+/A 4729 0 R
+/Parent 4703 0 R
+/Prev 4727 0 R
+/Next 4735 0 R
+>> endobj
+4727 0 obj <<
+/Title 4728 0 R
+/A 4725 0 R
+/Parent 4703 0 R
+/Prev 4723 0 R
+/Next 4731 0 R
+>> endobj
+4723 0 obj <<
+/Title 4724 0 R
+/A 4721 0 R
+/Parent 4703 0 R
+/Prev 4719 0 R
+/Next 4727 0 R
+>> endobj
+4719 0 obj <<
+/Title 4720 0 R
+/A 4717 0 R
+/Parent 4703 0 R
+/Prev 4715 0 R
+/Next 4723 0 R
+>> endobj
+4715 0 obj <<
+/Title 4716 0 R
+/A 4713 0 R
+/Parent 4703 0 R
+/Prev 4711 0 R
+/Next 4719 0 R
+>> endobj
+4711 0 obj <<
+/Title 4712 0 R
+/A 4709 0 R
+/Parent 4703 0 R
+/Prev 4707 0 R
+/Next 4715 0 R
+>> endobj
+4707 0 obj <<
+/Title 4708 0 R
+/A 4705 0 R
+/Parent 4703 0 R
+/Next 4711 0 R
+>> endobj
+4703 0 obj <<
+/Title 4704 0 R
+/A 4701 0 R
+/Parent 4655 0 R
+/Prev 4679 0 R
+/First 4707 0 R
+/Last 4783 0 R
+/Count -20
+>> endobj
+4699 0 obj <<
+/Title 4700 0 R
+/A 4697 0 R
+/Parent 4679 0 R
+/Prev 4695 0 R
+>> endobj
+4695 0 obj <<
+/Title 4696 0 R
+/A 4693 0 R
+/Parent 4679 0 R
+/Prev 4691 0 R
+/Next 4699 0 R
+>> endobj
+4691 0 obj <<
+/Title 4692 0 R
+/A 4689 0 R
+/Parent 4679 0 R
+/Prev 4687 0 R
+/Next 4695 0 R
+>> endobj
+4687 0 obj <<
+/Title 4688 0 R
+/A 4685 0 R
+/Parent 4679 0 R
+/Prev 4683 0 R
+/Next 4691 0 R
+>> endobj
+4683 0 obj <<
+/Title 4684 0 R
+/A 4681 0 R
+/Parent 4679 0 R
+/Next 4687 0 R
+>> endobj
+4679 0 obj <<
+/Title 4680 0 R
+/A 4677 0 R
+/Parent 4655 0 R
+/Prev 4671 0 R
+/Next 4703 0 R
+/First 4683 0 R
+/Last 4699 0 R
+/Count -5
+>> endobj
+4675 0 obj <<
+/Title 4676 0 R
+/A 4673 0 R
+/Parent 4671 0 R
+>> endobj
+4671 0 obj <<
+/Title 4672 0 R
+/A 4669 0 R
+/Parent 4655 0 R
+/Prev 4663 0 R
+/Next 4679 0 R
+/First 4675 0 R
+/Last 4675 0 R
+/Count -1
+>> endobj
+4667 0 obj <<
+/Title 4668 0 R
+/A 4665 0 R
+/Parent 4663 0 R
+>> endobj
+4663 0 obj <<
+/Title 4664 0 R
+/A 4661 0 R
+/Parent 4655 0 R
+/Prev 4659 0 R
+/Next 4671 0 R
+/First 4667 0 R
+/Last 4667 0 R
+/Count -1
+>> endobj
+4659 0 obj <<
+/Title 4660 0 R
+/A 4657 0 R
+/Parent 4655 0 R
+/Next 4663 0 R
+>> endobj
+4655 0 obj <<
+/Title 4656 0 R
+/A 4653 0 R
+/Parent 3279 0 R
+/Prev 4403 0 R
+/Next 4787 0 R
+/First 4659 0 R
+/Last 4703 0 R
+/Count -5
+>> endobj
+4651 0 obj <<
+/Title 4652 0 R
+/A 4649 0 R
+/Parent 4487 0 R
+/Prev 4647 0 R
+>> endobj
+4647 0 obj <<
+/Title 4648 0 R
+/A 4645 0 R
+/Parent 4487 0 R
+/Prev 4643 0 R
+/Next 4651 0 R
+>> endobj
+4643 0 obj <<
+/Title 4644 0 R
+/A 4641 0 R
+/Parent 4487 0 R
+/Prev 4639 0 R
+/Next 4647 0 R
+>> endobj
+4639 0 obj <<
+/Title 4640 0 R
+/A 4637 0 R
+/Parent 4487 0 R
+/Prev 4635 0 R
+/Next 4643 0 R
+>> endobj
+4635 0 obj <<
+/Title 4636 0 R
+/A 4633 0 R
+/Parent 4487 0 R
+/Prev 4631 0 R
+/Next 4639 0 R
+>> endobj
+4631 0 obj <<
+/Title 4632 0 R
+/A 4629 0 R
+/Parent 4487 0 R
+/Prev 4627 0 R
+/Next 4635 0 R
+>> endobj
+4627 0 obj <<
+/Title 4628 0 R
+/A 4625 0 R
+/Parent 4487 0 R
+/Prev 4623 0 R
+/Next 4631 0 R
+>> endobj
+4623 0 obj <<
+/Title 4624 0 R
+/A 4621 0 R
+/Parent 4487 0 R
+/Prev 4619 0 R
+/Next 4627 0 R
+>> endobj
+4619 0 obj <<
+/Title 4620 0 R
+/A 4617 0 R
+/Parent 4487 0 R
+/Prev 4615 0 R
+/Next 4623 0 R
+>> endobj
+4615 0 obj <<
+/Title 4616 0 R
+/A 4613 0 R
+/Parent 4487 0 R
+/Prev 4611 0 R
+/Next 4619 0 R
+>> endobj
+4611 0 obj <<
+/Title 4612 0 R
+/A 4609 0 R
+/Parent 4487 0 R
+/Prev 4607 0 R
+/Next 4615 0 R
+>> endobj
+4607 0 obj <<
+/Title 4608 0 R
+/A 4605 0 R
+/Parent 4487 0 R
+/Prev 4603 0 R
+/Next 4611 0 R
+>> endobj
+4603 0 obj <<
+/Title 4604 0 R
+/A 4601 0 R
+/Parent 4487 0 R
+/Prev 4599 0 R
+/Next 4607 0 R
+>> endobj
+4599 0 obj <<
+/Title 4600 0 R
+/A 4597 0 R
+/Parent 4487 0 R
+/Prev 4595 0 R
+/Next 4603 0 R
+>> endobj
+4595 0 obj <<
+/Title 4596 0 R
+/A 4593 0 R
+/Parent 4487 0 R
+/Prev 4591 0 R
+/Next 4599 0 R
+>> endobj
+4591 0 obj <<
+/Title 4592 0 R
+/A 4589 0 R
+/Parent 4487 0 R
+/Prev 4587 0 R
+/Next 4595 0 R
+>> endobj
+4587 0 obj <<
+/Title 4588 0 R
+/A 4585 0 R
+/Parent 4487 0 R
+/Prev 4583 0 R
+/Next 4591 0 R
+>> endobj
+4583 0 obj <<
+/Title 4584 0 R
+/A 4581 0 R
+/Parent 4487 0 R
+/Prev 4579 0 R
+/Next 4587 0 R
+>> endobj
+4579 0 obj <<
+/Title 4580 0 R
+/A 4577 0 R
+/Parent 4487 0 R
+/Prev 4575 0 R
+/Next 4583 0 R
+>> endobj
+4575 0 obj <<
+/Title 4576 0 R
+/A 4573 0 R
+/Parent 4487 0 R
+/Prev 4571 0 R
+/Next 4579 0 R
+>> endobj
+4571 0 obj <<
+/Title 4572 0 R
+/A 4569 0 R
+/Parent 4487 0 R
+/Prev 4567 0 R
+/Next 4575 0 R
+>> endobj
+4567 0 obj <<
+/Title 4568 0 R
+/A 4565 0 R
+/Parent 4487 0 R
+/Prev 4563 0 R
+/Next 4571 0 R
+>> endobj
+4563 0 obj <<
+/Title 4564 0 R
+/A 4561 0 R
+/Parent 4487 0 R
+/Prev 4559 0 R
+/Next 4567 0 R
+>> endobj
+4559 0 obj <<
+/Title 4560 0 R
+/A 4557 0 R
+/Parent 4487 0 R
+/Prev 4555 0 R
+/Next 4563 0 R
+>> endobj
+4555 0 obj <<
+/Title 4556 0 R
+/A 4553 0 R
+/Parent 4487 0 R
+/Prev 4551 0 R
+/Next 4559 0 R
+>> endobj
+4551 0 obj <<
+/Title 4552 0 R
+/A 4549 0 R
+/Parent 4487 0 R
+/Prev 4547 0 R
+/Next 4555 0 R
+>> endobj
+4547 0 obj <<
+/Title 4548 0 R
+/A 4545 0 R
+/Parent 4487 0 R
+/Prev 4543 0 R
+/Next 4551 0 R
+>> endobj
+4543 0 obj <<
+/Title 4544 0 R
+/A 4541 0 R
+/Parent 4487 0 R
+/Prev 4539 0 R
+/Next 4547 0 R
+>> endobj
+4539 0 obj <<
+/Title 4540 0 R
+/A 4537 0 R
+/Parent 4487 0 R
+/Prev 4535 0 R
+/Next 4543 0 R
+>> endobj
+4535 0 obj <<
+/Title 4536 0 R
+/A 4533 0 R
+/Parent 4487 0 R
+/Prev 4531 0 R
+/Next 4539 0 R
+>> endobj
+4531 0 obj <<
+/Title 4532 0 R
+/A 4529 0 R
+/Parent 4487 0 R
+/Prev 4527 0 R
+/Next 4535 0 R
+>> endobj
+4527 0 obj <<
+/Title 4528 0 R
+/A 4525 0 R
+/Parent 4487 0 R
+/Prev 4523 0 R
+/Next 4531 0 R
+>> endobj
+4523 0 obj <<
+/Title 4524 0 R
+/A 4521 0 R
+/Parent 4487 0 R
+/Prev 4519 0 R
+/Next 4527 0 R
+>> endobj
+4519 0 obj <<
+/Title 4520 0 R
+/A 4517 0 R
+/Parent 4487 0 R
+/Prev 4515 0 R
+/Next 4523 0 R
+>> endobj
+4515 0 obj <<
+/Title 4516 0 R
+/A 4513 0 R
+/Parent 4487 0 R
+/Prev 4511 0 R
+/Next 4519 0 R
+>> endobj
+4511 0 obj <<
+/Title 4512 0 R
+/A 4509 0 R
+/Parent 4487 0 R
+/Prev 4507 0 R
+/Next 4515 0 R
+>> endobj
+4507 0 obj <<
+/Title 4508 0 R
+/A 4505 0 R
+/Parent 4487 0 R
+/Prev 4503 0 R
+/Next 4511 0 R
+>> endobj
+4503 0 obj <<
+/Title 4504 0 R
+/A 4501 0 R
+/Parent 4487 0 R
+/Prev 4499 0 R
+/Next 4507 0 R
+>> endobj
+4499 0 obj <<
+/Title 4500 0 R
+/A 4497 0 R
+/Parent 4487 0 R
+/Prev 4495 0 R
+/Next 4503 0 R
+>> endobj
+4495 0 obj <<
+/Title 4496 0 R
+/A 4493 0 R
+/Parent 4487 0 R
+/Prev 4491 0 R
+/Next 4499 0 R
+>> endobj
+4491 0 obj <<
+/Title 4492 0 R
+/A 4489 0 R
+/Parent 4487 0 R
+/Next 4495 0 R
+>> endobj
+4487 0 obj <<
+/Title 4488 0 R
+/A 4485 0 R
+/Parent 4403 0 R
+/Prev 4419 0 R
+/First 4491 0 R
+/Last 4651 0 R
+/Count -41
+>> endobj
+4483 0 obj <<
+/Title 4484 0 R
+/A 4481 0 R
+/Parent 4419 0 R
+/Prev 4479 0 R
+>> endobj
+4479 0 obj <<
+/Title 4480 0 R
+/A 4477 0 R
+/Parent 4419 0 R
+/Prev 4475 0 R
+/Next 4483 0 R
+>> endobj
+4475 0 obj <<
+/Title 4476 0 R
+/A 4473 0 R
+/Parent 4419 0 R
+/Prev 4471 0 R
+/Next 4479 0 R
+>> endobj
+4471 0 obj <<
+/Title 4472 0 R
+/A 4469 0 R
+/Parent 4419 0 R
+/Prev 4467 0 R
+/Next 4475 0 R
+>> endobj
+4467 0 obj <<
+/Title 4468 0 R
+/A 4465 0 R
+/Parent 4419 0 R
+/Prev 4463 0 R
+/Next 4471 0 R
+>> endobj
+4463 0 obj <<
+/Title 4464 0 R
+/A 4461 0 R
+/Parent 4419 0 R
+/Prev 4459 0 R
+/Next 4467 0 R
+>> endobj
+4459 0 obj <<
+/Title 4460 0 R
+/A 4457 0 R
+/Parent 4419 0 R
+/Prev 4455 0 R
+/Next 4463 0 R
+>> endobj
+4455 0 obj <<
+/Title 4456 0 R
+/A 4453 0 R
+/Parent 4419 0 R
+/Prev 4451 0 R
+/Next 4459 0 R
+>> endobj
+4451 0 obj <<
+/Title 4452 0 R
+/A 4449 0 R
+/Parent 4419 0 R
+/Prev 4447 0 R
+/Next 4455 0 R
+>> endobj
+4447 0 obj <<
+/Title 4448 0 R
+/A 4445 0 R
+/Parent 4419 0 R
+/Prev 4443 0 R
+/Next 4451 0 R
+>> endobj
+4443 0 obj <<
+/Title 4444 0 R
+/A 4441 0 R
+/Parent 4419 0 R
+/Prev 4439 0 R
+/Next 4447 0 R
+>> endobj
+4439 0 obj <<
+/Title 4440 0 R
+/A 4437 0 R
+/Parent 4419 0 R
+/Prev 4435 0 R
+/Next 4443 0 R
+>> endobj
+4435 0 obj <<
+/Title 4436 0 R
+/A 4433 0 R
+/Parent 4419 0 R
+/Prev 4431 0 R
+/Next 4439 0 R
+>> endobj
+4431 0 obj <<
+/Title 4432 0 R
+/A 4429 0 R
+/Parent 4419 0 R
+/Prev 4427 0 R
+/Next 4435 0 R
+>> endobj
+4427 0 obj <<
+/Title 4428 0 R
+/A 4425 0 R
+/Parent 4419 0 R
+/Prev 4423 0 R
+/Next 4431 0 R
+>> endobj
+4423 0 obj <<
+/Title 4424 0 R
+/A 4421 0 R
+/Parent 4419 0 R
+/Next 4427 0 R
+>> endobj
+4419 0 obj <<
+/Title 4420 0 R
+/A 4417 0 R
+/Parent 4403 0 R
+/Prev 4407 0 R
+/Next 4487 0 R
+/First 4423 0 R
+/Last 4483 0 R
+/Count -16
+>> endobj
+4415 0 obj <<
+/Title 4416 0 R
+/A 4413 0 R
+/Parent 4407 0 R
+/Prev 4411 0 R
+>> endobj
+4411 0 obj <<
+/Title 4412 0 R
+/A 4409 0 R
+/Parent 4407 0 R
+/Next 4415 0 R
+>> endobj
+4407 0 obj <<
+/Title 4408 0 R
+/A 4405 0 R
+/Parent 4403 0 R
+/Next 4419 0 R
+/First 4411 0 R
+/Last 4415 0 R
+/Count -2
+>> endobj
+4403 0 obj <<
+/Title 4404 0 R
+/A 4401 0 R
+/Parent 3279 0 R
+/Prev 4391 0 R
+/Next 4655 0 R
+/First 4407 0 R
+/Last 4487 0 R
+/Count -3
+>> endobj
+4399 0 obj <<
+/Title 4400 0 R
+/A 4397 0 R
+/Parent 4395 0 R
+>> endobj
+4395 0 obj <<
+/Title 4396 0 R
+/A 4393 0 R
+/Parent 4391 0 R
+/First 4399 0 R
+/Last 4399 0 R
+/Count -1
+>> endobj
+4391 0 obj <<
+/Title 4392 0 R
+/A 4389 0 R
+/Parent 3279 0 R
+/Prev 4387 0 R
+/Next 4403 0 R
+/First 4395 0 R
+/Last 4395 0 R
+/Count -1
+>> endobj
+4387 0 obj <<
+/Title 4388 0 R
+/A 4385 0 R
+/Parent 3279 0 R
+/Prev 4355 0 R
+/Next 4391 0 R
+>> endobj
+4383 0 obj <<
+/Title 4384 0 R
+/A 4381 0 R
+/Parent 4367 0 R
+/Prev 4379 0 R
+>> endobj
+4379 0 obj <<
+/Title 4380 0 R
+/A 4377 0 R
+/Parent 4367 0 R
+/Prev 4375 0 R
+/Next 4383 0 R
+>> endobj
+4375 0 obj <<
+/Title 4376 0 R
+/A 4373 0 R
+/Parent 4367 0 R
+/Prev 4371 0 R
+/Next 4379 0 R
+>> endobj
+4371 0 obj <<
+/Title 4372 0 R
+/A 4369 0 R
+/Parent 4367 0 R
+/Next 4375 0 R
+>> endobj
+4367 0 obj <<
+/Title 4368 0 R
+/A 4365 0 R
+/Parent 4355 0 R
+/Prev 4359 0 R
+/First 4371 0 R
+/Last 4383 0 R
+/Count -4
+>> endobj
+4363 0 obj <<
+/Title 4364 0 R
+/A 4361 0 R
+/Parent 4359 0 R
+>> endobj
+4359 0 obj <<
+/Title 4360 0 R
+/A 4357 0 R
+/Parent 4355 0 R
+/Next 4367 0 R
+/First 4363 0 R
+/Last 4363 0 R
+/Count -1
+>> endobj
+4355 0 obj <<
+/Title 4356 0 R
+/A 4353 0 R
+/Parent 3279 0 R
+/Prev 4339 0 R
+/Next 4387 0 R
+/First 4359 0 R
+/Last 4367 0 R
+/Count -2
+>> endobj
+4351 0 obj <<
+/Title 4352 0 R
+/A 4349 0 R
+/Parent 4343 0 R
+/Prev 4347 0 R
+>> endobj
+4347 0 obj <<
+/Title 4348 0 R
+/A 4345 0 R
+/Parent 4343 0 R
+/Next 4351 0 R
+>> endobj
+4343 0 obj <<
+/Title 4344 0 R
+/A 4341 0 R
+/Parent 4339 0 R
+/First 4347 0 R
+/Last 4351 0 R
+/Count -2
+>> endobj
+4339 0 obj <<
+/Title 4340 0 R
+/A 4337 0 R
+/Parent 3279 0 R
+/Prev 4167 0 R
+/Next 4355 0 R
+/First 4343 0 R
+/Last 4343 0 R
+/Count -1
+>> endobj
+4335 0 obj <<
+/Title 4336 0 R
+/A 4333 0 R
+/Parent 4255 0 R
+/Prev 4331 0 R
+>> endobj
+4331 0 obj <<
+/Title 4332 0 R
+/A 4329 0 R
+/Parent 4255 0 R
+/Prev 4327 0 R
+/Next 4335 0 R
+>> endobj
+4327 0 obj <<
+/Title 4328 0 R
+/A 4325 0 R
+/Parent 4255 0 R
+/Prev 4323 0 R
+/Next 4331 0 R
+>> endobj
+4323 0 obj <<
+/Title 4324 0 R
+/A 4321 0 R
+/Parent 4255 0 R
+/Prev 4319 0 R
+/Next 4327 0 R
+>> endobj
+4319 0 obj <<
+/Title 4320 0 R
+/A 4317 0 R
+/Parent 4255 0 R
+/Prev 4315 0 R
+/Next 4323 0 R
+>> endobj
+4315 0 obj <<
+/Title 4316 0 R
+/A 4313 0 R
+/Parent 4255 0 R
+/Prev 4311 0 R
+/Next 4319 0 R
+>> endobj
+4311 0 obj <<
+/Title 4312 0 R
+/A 4309 0 R
+/Parent 4255 0 R
+/Prev 4307 0 R
+/Next 4315 0 R
+>> endobj
+4307 0 obj <<
+/Title 4308 0 R
+/A 4305 0 R
+/Parent 4255 0 R
+/Prev 4303 0 R
+/Next 4311 0 R
+>> endobj
+4303 0 obj <<
+/Title 4304 0 R
+/A 4301 0 R
+/Parent 4255 0 R
+/Prev 4299 0 R
+/Next 4307 0 R
+>> endobj
+4299 0 obj <<
+/Title 4300 0 R
+/A 4297 0 R
+/Parent 4255 0 R
+/Prev 4295 0 R
+/Next 4303 0 R
+>> endobj
+4295 0 obj <<
+/Title 4296 0 R
+/A 4293 0 R
+/Parent 4255 0 R
+/Prev 4291 0 R
+/Next 4299 0 R
+>> endobj
+4291 0 obj <<
+/Title 4292 0 R
+/A 4289 0 R
+/Parent 4255 0 R
+/Prev 4287 0 R
+/Next 4295 0 R
+>> endobj
+4287 0 obj <<
+/Title 4288 0 R
+/A 4285 0 R
+/Parent 4255 0 R
+/Prev 4283 0 R
+/Next 4291 0 R
+>> endobj
+4283 0 obj <<
+/Title 4284 0 R
+/A 4281 0 R
+/Parent 4255 0 R
+/Prev 4279 0 R
+/Next 4287 0 R
+>> endobj
+4279 0 obj <<
+/Title 4280 0 R
+/A 4277 0 R
+/Parent 4255 0 R
+/Prev 4275 0 R
+/Next 4283 0 R
+>> endobj
+4275 0 obj <<
+/Title 4276 0 R
+/A 4273 0 R
+/Parent 4255 0 R
+/Prev 4271 0 R
+/Next 4279 0 R
+>> endobj
+4271 0 obj <<
+/Title 4272 0 R
+/A 4269 0 R
+/Parent 4255 0 R
+/Prev 4267 0 R
+/Next 4275 0 R
+>> endobj
+4267 0 obj <<
+/Title 4268 0 R
+/A 4265 0 R
+/Parent 4255 0 R
+/Prev 4263 0 R
+/Next 4271 0 R
+>> endobj
+4263 0 obj <<
+/Title 4264 0 R
+/A 4261 0 R
+/Parent 4255 0 R
+/Prev 4259 0 R
+/Next 4267 0 R
+>> endobj
+4259 0 obj <<
+/Title 4260 0 R
+/A 4257 0 R
+/Parent 4255 0 R
+/Next 4263 0 R
+>> endobj
+4255 0 obj <<
+/Title 4256 0 R
+/A 4253 0 R
+/Parent 4167 0 R
+/Prev 4247 0 R
+/First 4259 0 R
+/Last 4335 0 R
+/Count -20
+>> endobj
+4251 0 obj <<
+/Title 4252 0 R
+/A 4249 0 R
+/Parent 4247 0 R
+>> endobj
+4247 0 obj <<
+/Title 4248 0 R
+/A 4245 0 R
+/Parent 4167 0 R
+/Prev 4235 0 R
+/Next 4255 0 R
+/First 4251 0 R
+/Last 4251 0 R
+/Count -1
+>> endobj
+4243 0 obj <<
+/Title 4244 0 R
+/A 4241 0 R
+/Parent 4235 0 R
+/Prev 4239 0 R
+>> endobj
+4239 0 obj <<
+/Title 4240 0 R
+/A 4237 0 R
+/Parent 4235 0 R
+/Next 4243 0 R
+>> endobj
+4235 0 obj <<
+/Title 4236 0 R
+/A 4233 0 R
+/Parent 4167 0 R
+/Prev 4227 0 R
+/Next 4247 0 R
+/First 4239 0 R
+/Last 4243 0 R
+/Count -2
+>> endobj
+4231 0 obj <<
+/Title 4232 0 R
+/A 4229 0 R
+/Parent 4227 0 R
+>> endobj
+4227 0 obj <<
+/Title 4228 0 R
+/A 4225 0 R
+/Parent 4167 0 R
+/Prev 4175 0 R
+/Next 4235 0 R
+/First 4231 0 R
+/Last 4231 0 R
+/Count -1
+>> endobj
+4223 0 obj <<
+/Title 4224 0 R
+/A 4221 0 R
+/Parent 4175 0 R
+/Prev 4219 0 R
+>> endobj
+4219 0 obj <<
+/Title 4220 0 R
+/A 4217 0 R
+/Parent 4175 0 R
+/Prev 4215 0 R
+/Next 4223 0 R
+>> endobj
+4215 0 obj <<
+/Title 4216 0 R
+/A 4213 0 R
+/Parent 4175 0 R
+/Prev 4211 0 R
+/Next 4219 0 R
+>> endobj
+4211 0 obj <<
+/Title 4212 0 R
+/A 4209 0 R
+/Parent 4175 0 R
+/Prev 4207 0 R
+/Next 4215 0 R
+>> endobj
+4207 0 obj <<
+/Title 4208 0 R
+/A 4205 0 R
+/Parent 4175 0 R
+/Prev 4203 0 R
+/Next 4211 0 R
+>> endobj
+4203 0 obj <<
+/Title 4204 0 R
+/A 4201 0 R
+/Parent 4175 0 R
+/Prev 4199 0 R
+/Next 4207 0 R
+>> endobj
+4199 0 obj <<
+/Title 4200 0 R
+/A 4197 0 R
+/Parent 4175 0 R
+/Prev 4195 0 R
+/Next 4203 0 R
+>> endobj
+4195 0 obj <<
+/Title 4196 0 R
+/A 4193 0 R
+/Parent 4175 0 R
+/Prev 4191 0 R
+/Next 4199 0 R
+>> endobj
+4191 0 obj <<
+/Title 4192 0 R
+/A 4189 0 R
+/Parent 4175 0 R
+/Prev 4187 0 R
+/Next 4195 0 R
+>> endobj
+4187 0 obj <<
+/Title 4188 0 R
+/A 4185 0 R
+/Parent 4175 0 R
+/Prev 4183 0 R
+/Next 4191 0 R
+>> endobj
+4183 0 obj <<
+/Title 4184 0 R
+/A 4181 0 R
+/Parent 4175 0 R
+/Prev 4179 0 R
+/Next 4187 0 R
+>> endobj
+4179 0 obj <<
+/Title 4180 0 R
+/A 4177 0 R
+/Parent 4175 0 R
+/Next 4183 0 R
+>> endobj
+4175 0 obj <<
+/Title 4176 0 R
+/A 4173 0 R
+/Parent 4167 0 R
+/Prev 4171 0 R
+/Next 4227 0 R
+/First 4179 0 R
+/Last 4223 0 R
+/Count -12
+>> endobj
+4171 0 obj <<
+/Title 4172 0 R
+/A 4169 0 R
+/Parent 4167 0 R
+/Next 4175 0 R
+>> endobj
+4167 0 obj <<
+/Title 4168 0 R
+/A 4165 0 R
+/Parent 3279 0 R
+/Prev 4155 0 R
+/Next 4339 0 R
+/First 4171 0 R
+/Last 4255 0 R
+/Count -6
+>> endobj
+4163 0 obj <<
+/Title 4164 0 R
+/A 4161 0 R
+/Parent 4159 0 R
+>> endobj
+4159 0 obj <<
+/Title 4160 0 R
+/A 4157 0 R
+/Parent 4155 0 R
+/First 4163 0 R
+/Last 4163 0 R
+/Count -1
+>> endobj
+4155 0 obj <<
+/Title 4156 0 R
+/A 4153 0 R
+/Parent 3279 0 R
+/Prev 3899 0 R
+/Next 4167 0 R
+/First 4159 0 R
+/Last 4159 0 R
+/Count -1
+>> endobj
+4151 0 obj <<
+/Title 4152 0 R
+/A 4149 0 R
+/Parent 3947 0 R
+/Prev 4147 0 R
+>> endobj
+4147 0 obj <<
+/Title 4148 0 R
+/A 4145 0 R
+/Parent 3947 0 R
+/Prev 4143 0 R
+/Next 4151 0 R
+>> endobj
+4143 0 obj <<
+/Title 4144 0 R
+/A 4141 0 R
+/Parent 3947 0 R
+/Prev 4139 0 R
+/Next 4147 0 R
+>> endobj
+4139 0 obj <<
+/Title 4140 0 R
+/A 4137 0 R
+/Parent 3947 0 R
+/Prev 4135 0 R
+/Next 4143 0 R
+>> endobj
+4135 0 obj <<
+/Title 4136 0 R
+/A 4133 0 R
+/Parent 3947 0 R
+/Prev 4131 0 R
+/Next 4139 0 R
+>> endobj
+4131 0 obj <<
+/Title 4132 0 R
+/A 4129 0 R
+/Parent 3947 0 R
+/Prev 4127 0 R
+/Next 4135 0 R
+>> endobj
+4127 0 obj <<
+/Title 4128 0 R
+/A 4125 0 R
+/Parent 3947 0 R
+/Prev 4123 0 R
+/Next 4131 0 R
+>> endobj
+4123 0 obj <<
+/Title 4124 0 R
+/A 4121 0 R
+/Parent 3947 0 R
+/Prev 4119 0 R
+/Next 4127 0 R
+>> endobj
+4119 0 obj <<
+/Title 4120 0 R
+/A 4117 0 R
+/Parent 3947 0 R
+/Prev 4115 0 R
+/Next 4123 0 R
+>> endobj
+4115 0 obj <<
+/Title 4116 0 R
+/A 4113 0 R
+/Parent 3947 0 R
+/Prev 4111 0 R
+/Next 4119 0 R
+>> endobj
+4111 0 obj <<
+/Title 4112 0 R
+/A 4109 0 R
+/Parent 3947 0 R
+/Prev 4107 0 R
+/Next 4115 0 R
+>> endobj
+4107 0 obj <<
+/Title 4108 0 R
+/A 4105 0 R
+/Parent 3947 0 R
+/Prev 4103 0 R
+/Next 4111 0 R
+>> endobj
+4103 0 obj <<
+/Title 4104 0 R
+/A 4101 0 R
+/Parent 3947 0 R
+/Prev 4099 0 R
+/Next 4107 0 R
+>> endobj
+4099 0 obj <<
+/Title 4100 0 R
+/A 4097 0 R
+/Parent 3947 0 R
+/Prev 4095 0 R
+/Next 4103 0 R
+>> endobj
+4095 0 obj <<
+/Title 4096 0 R
+/A 4093 0 R
+/Parent 3947 0 R
+/Prev 4091 0 R
+/Next 4099 0 R
+>> endobj
+4091 0 obj <<
+/Title 4092 0 R
+/A 4089 0 R
+/Parent 3947 0 R
+/Prev 4087 0 R
+/Next 4095 0 R
+>> endobj
+4087 0 obj <<
+/Title 4088 0 R
+/A 4085 0 R
+/Parent 3947 0 R
+/Prev 4083 0 R
+/Next 4091 0 R
+>> endobj
+4083 0 obj <<
+/Title 4084 0 R
+/A 4081 0 R
+/Parent 3947 0 R
+/Prev 4079 0 R
+/Next 4087 0 R
+>> endobj
+4079 0 obj <<
+/Title 4080 0 R
+/A 4077 0 R
+/Parent 3947 0 R
+/Prev 4075 0 R
+/Next 4083 0 R
+>> endobj
+4075 0 obj <<
+/Title 4076 0 R
+/A 4073 0 R
+/Parent 3947 0 R
+/Prev 4071 0 R
+/Next 4079 0 R
+>> endobj
+4071 0 obj <<
+/Title 4072 0 R
+/A 4069 0 R
+/Parent 3947 0 R
+/Prev 4067 0 R
+/Next 4075 0 R
+>> endobj
+4067 0 obj <<
+/Title 4068 0 R
+/A 4065 0 R
+/Parent 3947 0 R
+/Prev 4063 0 R
+/Next 4071 0 R
+>> endobj
+4063 0 obj <<
+/Title 4064 0 R
+/A 4061 0 R
+/Parent 3947 0 R
+/Prev 4059 0 R
+/Next 4067 0 R
+>> endobj
+4059 0 obj <<
+/Title 4060 0 R
+/A 4057 0 R
+/Parent 3947 0 R
+/Prev 4055 0 R
+/Next 4063 0 R
+>> endobj
+4055 0 obj <<
+/Title 4056 0 R
+/A 4053 0 R
+/Parent 3947 0 R
+/Prev 4051 0 R
+/Next 4059 0 R
+>> endobj
+4051 0 obj <<
+/Title 4052 0 R
+/A 4049 0 R
+/Parent 3947 0 R
+/Prev 4047 0 R
+/Next 4055 0 R
+>> endobj
+4047 0 obj <<
+/Title 4048 0 R
+/A 4045 0 R
+/Parent 3947 0 R
+/Prev 4043 0 R
+/Next 4051 0 R
+>> endobj
+4043 0 obj <<
+/Title 4044 0 R
+/A 4041 0 R
+/Parent 3947 0 R
+/Prev 4039 0 R
+/Next 4047 0 R
+>> endobj
+4039 0 obj <<
+/Title 4040 0 R
+/A 4037 0 R
+/Parent 3947 0 R
+/Prev 4035 0 R
+/Next 4043 0 R
+>> endobj
+4035 0 obj <<
+/Title 4036 0 R
+/A 4033 0 R
+/Parent 3947 0 R
+/Prev 4031 0 R
+/Next 4039 0 R
+>> endobj
+4031 0 obj <<
+/Title 4032 0 R
+/A 4029 0 R
+/Parent 3947 0 R
+/Prev 4027 0 R
+/Next 4035 0 R
+>> endobj
+4027 0 obj <<
+/Title 4028 0 R
+/A 4025 0 R
+/Parent 3947 0 R
+/Prev 4023 0 R
+/Next 4031 0 R
+>> endobj
+4023 0 obj <<
+/Title 4024 0 R
+/A 4021 0 R
+/Parent 3947 0 R
+/Prev 4019 0 R
+/Next 4027 0 R
+>> endobj
+4019 0 obj <<
+/Title 4020 0 R
+/A 4017 0 R
+/Parent 3947 0 R
+/Prev 4015 0 R
+/Next 4023 0 R
+>> endobj
+4015 0 obj <<
+/Title 4016 0 R
+/A 4013 0 R
+/Parent 3947 0 R
+/Prev 4011 0 R
+/Next 4019 0 R
+>> endobj
+4011 0 obj <<
+/Title 4012 0 R
+/A 4009 0 R
+/Parent 3947 0 R
+/Prev 4007 0 R
+/Next 4015 0 R
+>> endobj
+4007 0 obj <<
+/Title 4008 0 R
+/A 4005 0 R
+/Parent 3947 0 R
+/Prev 4003 0 R
+/Next 4011 0 R
+>> endobj
+4003 0 obj <<
+/Title 4004 0 R
+/A 4001 0 R
+/Parent 3947 0 R
+/Prev 3999 0 R
+/Next 4007 0 R
+>> endobj
+3999 0 obj <<
+/Title 4000 0 R
+/A 3997 0 R
+/Parent 3947 0 R
+/Prev 3995 0 R
+/Next 4003 0 R
+>> endobj
+3995 0 obj <<
+/Title 3996 0 R
+/A 3993 0 R
+/Parent 3947 0 R
+/Prev 3991 0 R
+/Next 3999 0 R
+>> endobj
+3991 0 obj <<
+/Title 3992 0 R
+/A 3989 0 R
+/Parent 3947 0 R
+/Prev 3987 0 R
+/Next 3995 0 R
+>> endobj
+3987 0 obj <<
+/Title 3988 0 R
+/A 3985 0 R
+/Parent 3947 0 R
+/Prev 3983 0 R
+/Next 3991 0 R
+>> endobj
+3983 0 obj <<
+/Title 3984 0 R
+/A 3981 0 R
+/Parent 3947 0 R
+/Prev 3979 0 R
+/Next 3987 0 R
+>> endobj
+3979 0 obj <<
+/Title 3980 0 R
+/A 3977 0 R
+/Parent 3947 0 R
+/Prev 3975 0 R
+/Next 3983 0 R
+>> endobj
+3975 0 obj <<
+/Title 3976 0 R
+/A 3973 0 R
+/Parent 3947 0 R
+/Prev 3971 0 R
+/Next 3979 0 R
+>> endobj
+3971 0 obj <<
+/Title 3972 0 R
+/A 3969 0 R
+/Parent 3947 0 R
+/Prev 3967 0 R
+/Next 3975 0 R
+>> endobj
+3967 0 obj <<
+/Title 3968 0 R
+/A 3965 0 R
+/Parent 3947 0 R
+/Prev 3963 0 R
+/Next 3971 0 R
+>> endobj
+3963 0 obj <<
+/Title 3964 0 R
+/A 3961 0 R
+/Parent 3947 0 R
+/Prev 3959 0 R
+/Next 3967 0 R
+>> endobj
+3959 0 obj <<
+/Title 3960 0 R
+/A 3957 0 R
+/Parent 3947 0 R
+/Prev 3955 0 R
+/Next 3963 0 R
+>> endobj
+3955 0 obj <<
+/Title 3956 0 R
+/A 3953 0 R
+/Parent 3947 0 R
+/Prev 3951 0 R
+/Next 3959 0 R
+>> endobj
+3951 0 obj <<
+/Title 3952 0 R
+/A 3949 0 R
+/Parent 3947 0 R
+/Next 3955 0 R
+>> endobj
+3947 0 obj <<
+/Title 3948 0 R
+/A 3945 0 R
+/Parent 3899 0 R
+/Prev 3935 0 R
+/First 3951 0 R
+/Last 4151 0 R
+/Count -51
+>> endobj
+3943 0 obj <<
+/Title 3944 0 R
+/A 3941 0 R
+/Parent 3935 0 R
+/Prev 3939 0 R
+>> endobj
+3939 0 obj <<
+/Title 3940 0 R
+/A 3937 0 R
+/Parent 3935 0 R
+/Next 3943 0 R
+>> endobj
+3935 0 obj <<
+/Title 3936 0 R
+/A 3933 0 R
+/Parent 3899 0 R
+/Prev 3927 0 R
+/Next 3947 0 R
+/First 3939 0 R
+/Last 3943 0 R
+/Count -2
+>> endobj
+3931 0 obj <<
+/Title 3932 0 R
+/A 3929 0 R
+/Parent 3927 0 R
+>> endobj
+3927 0 obj <<
+/Title 3928 0 R
+/A 3925 0 R
+/Parent 3899 0 R
+/Prev 3903 0 R
+/Next 3935 0 R
+/First 3931 0 R
+/Last 3931 0 R
+/Count -1
+>> endobj
+3923 0 obj <<
+/Title 3924 0 R
+/A 3921 0 R
+/Parent 3903 0 R
+/Prev 3919 0 R
+>> endobj
+3919 0 obj <<
+/Title 3920 0 R
+/A 3917 0 R
+/Parent 3903 0 R
+/Prev 3915 0 R
+/Next 3923 0 R
+>> endobj
+3915 0 obj <<
+/Title 3916 0 R
+/A 3913 0 R
+/Parent 3903 0 R
+/Prev 3911 0 R
+/Next 3919 0 R
+>> endobj
+3911 0 obj <<
+/Title 3912 0 R
+/A 3909 0 R
+/Parent 3903 0 R
+/Prev 3907 0 R
+/Next 3915 0 R
+>> endobj
+3907 0 obj <<
+/Title 3908 0 R
+/A 3905 0 R
+/Parent 3903 0 R
+/Next 3911 0 R
+>> endobj
+3903 0 obj <<
+/Title 3904 0 R
+/A 3901 0 R
+/Parent 3899 0 R
+/Next 3927 0 R
+/First 3907 0 R
+/Last 3923 0 R
+/Count -5
+>> endobj
+3899 0 obj <<
+/Title 3900 0 R
+/A 3897 0 R
+/Parent 3279 0 R
+/Prev 3895 0 R
+/Next 4155 0 R
+/First 3903 0 R
+/Last 3947 0 R
+/Count -4
+>> endobj
+3895 0 obj <<
+/Title 3896 0 R
+/A 3893 0 R
+/Parent 3279 0 R
+/Prev 3867 0 R
+/Next 3899 0 R
+>> endobj
+3891 0 obj <<
+/Title 3892 0 R
+/A 3889 0 R
+/Parent 3887 0 R
+>> endobj
+3887 0 obj <<
+/Title 3888 0 R
+/A 3885 0 R
+/Parent 3867 0 R
+/Prev 3879 0 R
+/First 3891 0 R
+/Last 3891 0 R
+/Count -1
+>> endobj
+3883 0 obj <<
+/Title 3884 0 R
+/A 3881 0 R
+/Parent 3879 0 R
+>> endobj
+3879 0 obj <<
+/Title 3880 0 R
+/A 3877 0 R
+/Parent 3867 0 R
+/Prev 3871 0 R
+/Next 3887 0 R
+/First 3883 0 R
+/Last 3883 0 R
+/Count -1
+>> endobj
+3875 0 obj <<
+/Title 3876 0 R
+/A 3873 0 R
+/Parent 3871 0 R
+>> endobj
+3871 0 obj <<
+/Title 3872 0 R
+/A 3869 0 R
+/Parent 3867 0 R
+/Next 3879 0 R
+/First 3875 0 R
+/Last 3875 0 R
+/Count -1
+>> endobj
+3867 0 obj <<
+/Title 3868 0 R
+/A 3865 0 R
+/Parent 3279 0 R
+/Prev 3843 0 R
+/Next 3895 0 R
+/First 3871 0 R
+/Last 3887 0 R
+/Count -3
+>> endobj
+3863 0 obj <<
+/Title 3864 0 R
+/A 3861 0 R
+/Parent 3855 0 R
+/Prev 3859 0 R
+>> endobj
+3859 0 obj <<
+/Title 3860 0 R
+/A 3857 0 R
+/Parent 3855 0 R
+/Next 3863 0 R
+>> endobj
+3855 0 obj <<
+/Title 3856 0 R
+/A 3853 0 R
+/Parent 3843 0 R
+/Prev 3847 0 R
+/First 3859 0 R
+/Last 3863 0 R
+/Count -2
+>> endobj
+3851 0 obj <<
+/Title 3852 0 R
+/A 3849 0 R
+/Parent 3847 0 R
+>> endobj
+3847 0 obj <<
+/Title 3848 0 R
+/A 3845 0 R
+/Parent 3843 0 R
+/Next 3855 0 R
+/First 3851 0 R
+/Last 3851 0 R
+/Count -1
+>> endobj
+3843 0 obj <<
+/Title 3844 0 R
+/A 3841 0 R
+/Parent 3279 0 R
+/Prev 3771 0 R
+/Next 3867 0 R
+/First 3847 0 R
+/Last 3855 0 R
+/Count -2
+>> endobj
+3839 0 obj <<
+/Title 3840 0 R
+/A 3837 0 R
+/Parent 3811 0 R
+/Prev 3835 0 R
+>> endobj
+3835 0 obj <<
+/Title 3836 0 R
+/A 3833 0 R
+/Parent 3811 0 R
+/Prev 3831 0 R
+/Next 3839 0 R
+>> endobj
+3831 0 obj <<
+/Title 3832 0 R
+/A 3829 0 R
+/Parent 3811 0 R
+/Prev 3827 0 R
+/Next 3835 0 R
+>> endobj
+3827 0 obj <<
+/Title 3828 0 R
+/A 3825 0 R
+/Parent 3811 0 R
+/Prev 3823 0 R
+/Next 3831 0 R
+>> endobj
+3823 0 obj <<
+/Title 3824 0 R
+/A 3821 0 R
+/Parent 3811 0 R
+/Prev 3819 0 R
+/Next 3827 0 R
+>> endobj
+3819 0 obj <<
+/Title 3820 0 R
+/A 3817 0 R
+/Parent 3811 0 R
+/Prev 3815 0 R
+/Next 3823 0 R
+>> endobj
+3815 0 obj <<
+/Title 3816 0 R
+/A 3813 0 R
+/Parent 3811 0 R
+/Next 3819 0 R
+>> endobj
+3811 0 obj <<
+/Title 3812 0 R
+/A 3809 0 R
+/Parent 3771 0 R
+/Prev 3795 0 R
+/First 3815 0 R
+/Last 3839 0 R
+/Count -7
+>> endobj
+3807 0 obj <<
+/Title 3808 0 R
+/A 3805 0 R
+/Parent 3795 0 R
+/Prev 3803 0 R
+>> endobj
+3803 0 obj <<
+/Title 3804 0 R
+/A 3801 0 R
+/Parent 3795 0 R
+/Prev 3799 0 R
+/Next 3807 0 R
+>> endobj
+3799 0 obj <<
+/Title 3800 0 R
+/A 3797 0 R
+/Parent 3795 0 R
+/Next 3803 0 R
+>> endobj
+3795 0 obj <<
+/Title 3796 0 R
+/A 3793 0 R
+/Parent 3771 0 R
+/Prev 3775 0 R
+/Next 3811 0 R
+/First 3799 0 R
+/Last 3807 0 R
+/Count -3
+>> endobj
+3791 0 obj <<
+/Title 3792 0 R
+/A 3789 0 R
+/Parent 3775 0 R
+/Prev 3787 0 R
+>> endobj
+3787 0 obj <<
+/Title 3788 0 R
+/A 3785 0 R
+/Parent 3775 0 R
+/Prev 3783 0 R
+/Next 3791 0 R
+>> endobj
+3783 0 obj <<
+/Title 3784 0 R
+/A 3781 0 R
+/Parent 3775 0 R
+/Prev 3779 0 R
+/Next 3787 0 R
+>> endobj
+3779 0 obj <<
+/Title 3780 0 R
+/A 3777 0 R
+/Parent 3775 0 R
+/Next 3783 0 R
+>> endobj
+3775 0 obj <<
+/Title 3776 0 R
+/A 3773 0 R
+/Parent 3771 0 R
+/Next 3795 0 R
+/First 3779 0 R
+/Last 3791 0 R
+/Count -4
+>> endobj
+3771 0 obj <<
+/Title 3772 0 R
+/A 3769 0 R
+/Parent 3279 0 R
+/Prev 3739 0 R
+/Next 3843 0 R
+/First 3775 0 R
+/Last 3811 0 R
+/Count -3
+>> endobj
+3767 0 obj <<
+/Title 3768 0 R
+/A 3765 0 R
+/Parent 3751 0 R
+/Prev 3763 0 R
+>> endobj
+3763 0 obj <<
+/Title 3764 0 R
+/A 3761 0 R
+/Parent 3751 0 R
+/Prev 3759 0 R
+/Next 3767 0 R
+>> endobj
+3759 0 obj <<
+/Title 3760 0 R
+/A 3757 0 R
+/Parent 3751 0 R
+/Prev 3755 0 R
+/Next 3763 0 R
+>> endobj
+3755 0 obj <<
+/Title 3756 0 R
+/A 3753 0 R
+/Parent 3751 0 R
+/Next 3759 0 R
+>> endobj
+3751 0 obj <<
+/Title 3752 0 R
+/A 3749 0 R
+/Parent 3739 0 R
+/Prev 3743 0 R
+/First 3755 0 R
+/Last 3767 0 R
+/Count -4
+>> endobj
+3747 0 obj <<
+/Title 3748 0 R
+/A 3745 0 R
+/Parent 3743 0 R
+>> endobj
+3743 0 obj <<
+/Title 3744 0 R
+/A 3741 0 R
+/Parent 3739 0 R
+/Next 3751 0 R
+/First 3747 0 R
+/Last 3747 0 R
+/Count -1
+>> endobj
+3739 0 obj <<
+/Title 3740 0 R
+/A 3737 0 R
+/Parent 3279 0 R
+/Prev 3667 0 R
+/Next 3771 0 R
+/First 3743 0 R
+/Last 3751 0 R
+/Count -2
+>> endobj
+3735 0 obj <<
+/Title 3736 0 R
+/A 3733 0 R
+/Parent 3715 0 R
+/Prev 3731 0 R
+>> endobj
+3731 0 obj <<
+/Title 3732 0 R
+/A 3729 0 R
+/Parent 3715 0 R
+/Prev 3727 0 R
+/Next 3735 0 R
+>> endobj
+3727 0 obj <<
+/Title 3728 0 R
+/A 3725 0 R
+/Parent 3715 0 R
+/Prev 3723 0 R
+/Next 3731 0 R
+>> endobj
+3723 0 obj <<
+/Title 3724 0 R
+/A 3721 0 R
+/Parent 3715 0 R
+/Prev 3719 0 R
+/Next 3727 0 R
+>> endobj
+3719 0 obj <<
+/Title 3720 0 R
+/A 3717 0 R
+/Parent 3715 0 R
+/Next 3723 0 R
+>> endobj
+3715 0 obj <<
+/Title 3716 0 R
+/A 3713 0 R
+/Parent 3667 0 R
+/Prev 3695 0 R
+/First 3719 0 R
+/Last 3735 0 R
+/Count -5
+>> endobj
+3711 0 obj <<
+/Title 3712 0 R
+/A 3709 0 R
+/Parent 3695 0 R
+/Prev 3707 0 R
+>> endobj
+3707 0 obj <<
+/Title 3708 0 R
+/A 3705 0 R
+/Parent 3695 0 R
+/Prev 3703 0 R
+/Next 3711 0 R
+>> endobj
+3703 0 obj <<
+/Title 3704 0 R
+/A 3701 0 R
+/Parent 3695 0 R
+/Prev 3699 0 R
+/Next 3707 0 R
+>> endobj
+3699 0 obj <<
+/Title 3700 0 R
+/A 3697 0 R
+/Parent 3695 0 R
+/Next 3703 0 R
+>> endobj
+3695 0 obj <<
+/Title 3696 0 R
+/A 3693 0 R
+/Parent 3667 0 R
+/Prev 3671 0 R
+/Next 3715 0 R
+/First 3699 0 R
+/Last 3711 0 R
+/Count -4
+>> endobj
+3691 0 obj <<
+/Title 3692 0 R
+/A 3689 0 R
+/Parent 3671 0 R
+/Prev 3687 0 R
+>> endobj
+3687 0 obj <<
+/Title 3688 0 R
+/A 3685 0 R
+/Parent 3671 0 R
+/Prev 3683 0 R
+/Next 3691 0 R
+>> endobj
+3683 0 obj <<
+/Title 3684 0 R
+/A 3681 0 R
+/Parent 3671 0 R
+/Prev 3679 0 R
+/Next 3687 0 R
+>> endobj
+3679 0 obj <<
+/Title 3680 0 R
+/A 3677 0 R
+/Parent 3671 0 R
+/Prev 3675 0 R
+/Next 3683 0 R
+>> endobj
+3675 0 obj <<
+/Title 3676 0 R
+/A 3673 0 R
+/Parent 3671 0 R
+/Next 3679 0 R
+>> endobj
+3671 0 obj <<
+/Title 3672 0 R
+/A 3669 0 R
+/Parent 3667 0 R
+/Next 3695 0 R
+/First 3675 0 R
+/Last 3691 0 R
+/Count -5
+>> endobj
+3667 0 obj <<
+/Title 3668 0 R
+/A 3665 0 R
+/Parent 3279 0 R
+/Prev 3639 0 R
+/Next 3739 0 R
+/First 3671 0 R
+/Last 3715 0 R
+/Count -3
+>> endobj
+3663 0 obj <<
+/Title 3664 0 R
+/A 3661 0 R
+/Parent 3643 0 R
+/Prev 3659 0 R
+>> endobj
+3659 0 obj <<
+/Title 3660 0 R
+/A 3657 0 R
+/Parent 3643 0 R
+/Prev 3655 0 R
+/Next 3663 0 R
+>> endobj
+3655 0 obj <<
+/Title 3656 0 R
+/A 3653 0 R
+/Parent 3643 0 R
+/Prev 3651 0 R
+/Next 3659 0 R
+>> endobj
+3651 0 obj <<
+/Title 3652 0 R
+/A 3649 0 R
+/Parent 3643 0 R
+/Prev 3647 0 R
+/Next 3655 0 R
+>> endobj
+3647 0 obj <<
+/Title 3648 0 R
+/A 3645 0 R
+/Parent 3643 0 R
+/Next 3651 0 R
+>> endobj
+3643 0 obj <<
+/Title 3644 0 R
+/A 3641 0 R
+/Parent 3639 0 R
+/First 3647 0 R
+/Last 3663 0 R
+/Count -5
+>> endobj
+3639 0 obj <<
+/Title 3640 0 R
+/A 3637 0 R
+/Parent 3279 0 R
+/Prev 3599 0 R
+/Next 3667 0 R
+/First 3643 0 R
+/Last 3643 0 R
+/Count -1
+>> endobj
+3635 0 obj <<
+/Title 3636 0 R
+/A 3633 0 R
+/Parent 3623 0 R
+/Prev 3631 0 R
+>> endobj
+3631 0 obj <<
+/Title 3632 0 R
+/A 3629 0 R
+/Parent 3623 0 R
+/Prev 3627 0 R
+/Next 3635 0 R
+>> endobj
+3627 0 obj <<
+/Title 3628 0 R
+/A 3625 0 R
+/Parent 3623 0 R
+/Next 3631 0 R
+>> endobj
+3623 0 obj <<
+/Title 3624 0 R
+/A 3621 0 R
+/Parent 3599 0 R
+/Prev 3607 0 R
+/First 3627 0 R
+/Last 3635 0 R
+/Count -3
+>> endobj
+3619 0 obj <<
+/Title 3620 0 R
+/A 3617 0 R
+/Parent 3607 0 R
+/Prev 3615 0 R
+>> endobj
+3615 0 obj <<
+/Title 3616 0 R
+/A 3613 0 R
+/Parent 3607 0 R
+/Prev 3611 0 R
+/Next 3619 0 R
+>> endobj
+3611 0 obj <<
+/Title 3612 0 R
+/A 3609 0 R
+/Parent 3607 0 R
+/Next 3615 0 R
+>> endobj
+3607 0 obj <<
+/Title 3608 0 R
+/A 3605 0 R
+/Parent 3599 0 R
+/Prev 3603 0 R
+/Next 3623 0 R
+/First 3611 0 R
+/Last 3619 0 R
+/Count -3
+>> endobj
+3603 0 obj <<
+/Title 3604 0 R
+/A 3601 0 R
+/Parent 3599 0 R
+/Next 3607 0 R
+>> endobj
+3599 0 obj <<
+/Title 3600 0 R
+/A 3597 0 R
+/Parent 3279 0 R
+/Prev 3579 0 R
+/Next 3639 0 R
+/First 3603 0 R
+/Last 3623 0 R
+/Count -3
+>> endobj
+3595 0 obj <<
+/Title 3596 0 R
+/A 3593 0 R
+/Parent 3583 0 R
+/Prev 3591 0 R
+>> endobj
+3591 0 obj <<
+/Title 3592 0 R
+/A 3589 0 R
+/Parent 3583 0 R
+/Prev 3587 0 R
+/Next 3595 0 R
+>> endobj
+3587 0 obj <<
+/Title 3588 0 R
+/A 3585 0 R
+/Parent 3583 0 R
+/Next 3591 0 R
+>> endobj
+3583 0 obj <<
+/Title 3584 0 R
+/A 3581 0 R
+/Parent 3579 0 R
+/First 3587 0 R
+/Last 3595 0 R
+/Count -3
+>> endobj
+3579 0 obj <<
+/Title 3580 0 R
+/A 3577 0 R
+/Parent 3279 0 R
+/Prev 3515 0 R
+/Next 3599 0 R
+/First 3583 0 R
+/Last 3583 0 R
+/Count -1
+>> endobj
+3575 0 obj <<
+/Title 3576 0 R
+/A 3573 0 R
+/Parent 3551 0 R
+/Prev 3571 0 R
+>> endobj
+3571 0 obj <<
+/Title 3572 0 R
+/A 3569 0 R
+/Parent 3551 0 R
+/Prev 3567 0 R
+/Next 3575 0 R
+>> endobj
+3567 0 obj <<
+/Title 3568 0 R
+/A 3565 0 R
+/Parent 3551 0 R
+/Prev 3563 0 R
+/Next 3571 0 R
+>> endobj
+3563 0 obj <<
+/Title 3564 0 R
+/A 3561 0 R
+/Parent 3551 0 R
+/Prev 3559 0 R
+/Next 3567 0 R
+>> endobj
+3559 0 obj <<
+/Title 3560 0 R
+/A 3557 0 R
+/Parent 3551 0 R
+/Prev 3555 0 R
+/Next 3563 0 R
+>> endobj
+3555 0 obj <<
+/Title 3556 0 R
+/A 3553 0 R
+/Parent 3551 0 R
+/Next 3559 0 R
+>> endobj
+3551 0 obj <<
+/Title 3552 0 R
+/A 3549 0 R
+/Parent 3515 0 R
+/Prev 3523 0 R
+/First 3555 0 R
+/Last 3575 0 R
+/Count -6
+>> endobj
+3547 0 obj <<
+/Title 3548 0 R
+/A 3545 0 R
+/Parent 3523 0 R
+/Prev 3543 0 R
+>> endobj
+3543 0 obj <<
+/Title 3544 0 R
+/A 3541 0 R
+/Parent 3523 0 R
+/Prev 3539 0 R
+/Next 3547 0 R
+>> endobj
+3539 0 obj <<
+/Title 3540 0 R
+/A 3537 0 R
+/Parent 3523 0 R
+/Prev 3535 0 R
+/Next 3543 0 R
+>> endobj
+3535 0 obj <<
+/Title 3536 0 R
+/A 3533 0 R
+/Parent 3523 0 R
+/Prev 3531 0 R
+/Next 3539 0 R
+>> endobj
+3531 0 obj <<
+/Title 3532 0 R
+/A 3529 0 R
+/Parent 3523 0 R
+/Prev 3527 0 R
+/Next 3535 0 R
+>> endobj
+3527 0 obj <<
+/Title 3528 0 R
+/A 3525 0 R
+/Parent 3523 0 R
+/Next 3531 0 R
+>> endobj
+3523 0 obj <<
+/Title 3524 0 R
+/A 3521 0 R
+/Parent 3515 0 R
+/Prev 3519 0 R
+/Next 3551 0 R
+/First 3527 0 R
+/Last 3547 0 R
+/Count -6
+>> endobj
+3519 0 obj <<
+/Title 3520 0 R
+/A 3517 0 R
+/Parent 3515 0 R
+/Next 3523 0 R
+>> endobj
+3515 0 obj <<
+/Title 3516 0 R
+/A 3513 0 R
+/Parent 3279 0 R
+/Prev 3471 0 R
+/Next 3579 0 R
+/First 3519 0 R
+/Last 3551 0 R
+/Count -3
+>> endobj
+3511 0 obj <<
+/Title 3512 0 R
+/A 3509 0 R
+/Parent 3507 0 R
+>> endobj
+3507 0 obj <<
+/Title 3508 0 R
+/A 3505 0 R
+/Parent 3471 0 R
+/Prev 3475 0 R
+/First 3511 0 R
+/Last 3511 0 R
+/Count -1
+>> endobj
+3503 0 obj <<
+/Title 3504 0 R
+/A 3501 0 R
+/Parent 3475 0 R
+/Prev 3499 0 R
+>> endobj
+3499 0 obj <<
+/Title 3500 0 R
+/A 3497 0 R
+/Parent 3475 0 R
+/Prev 3495 0 R
+/Next 3503 0 R
+>> endobj
+3495 0 obj <<
+/Title 3496 0 R
+/A 3493 0 R
+/Parent 3475 0 R
+/Prev 3491 0 R
+/Next 3499 0 R
+>> endobj
+3491 0 obj <<
+/Title 3492 0 R
+/A 3489 0 R
+/Parent 3475 0 R
+/Prev 3487 0 R
+/Next 3495 0 R
+>> endobj
+3487 0 obj <<
+/Title 3488 0 R
+/A 3485 0 R
+/Parent 3475 0 R
+/Prev 3483 0 R
+/Next 3491 0 R
+>> endobj
+3483 0 obj <<
+/Title 3484 0 R
+/A 3481 0 R
+/Parent 3475 0 R
+/Prev 3479 0 R
+/Next 3487 0 R
+>> endobj
+3479 0 obj <<
+/Title 3480 0 R
+/A 3477 0 R
+/Parent 3475 0 R
+/Next 3483 0 R
+>> endobj
+3475 0 obj <<
+/Title 3476 0 R
+/A 3473 0 R
+/Parent 3471 0 R
+/Next 3507 0 R
+/First 3479 0 R
+/Last 3503 0 R
+/Count -7
+>> endobj
+3471 0 obj <<
+/Title 3472 0 R
+/A 3469 0 R
+/Parent 3279 0 R
+/Prev 3443 0 R
+/Next 3515 0 R
+/First 3475 0 R
+/Last 3507 0 R
+/Count -2
+>> endobj
+3467 0 obj <<
+/Title 3468 0 R
+/A 3465 0 R
+/Parent 3447 0 R
+/Prev 3463 0 R
+>> endobj
+3463 0 obj <<
+/Title 3464 0 R
+/A 3461 0 R
+/Parent 3447 0 R
+/Prev 3459 0 R
+/Next 3467 0 R
+>> endobj
+3459 0 obj <<
+/Title 3460 0 R
+/A 3457 0 R
+/Parent 3447 0 R
+/Prev 3455 0 R
+/Next 3463 0 R
+>> endobj
+3455 0 obj <<
+/Title 3456 0 R
+/A 3453 0 R
+/Parent 3447 0 R
+/Prev 3451 0 R
+/Next 3459 0 R
+>> endobj
+3451 0 obj <<
+/Title 3452 0 R
+/A 3449 0 R
+/Parent 3447 0 R
+/Next 3455 0 R
+>> endobj
+3447 0 obj <<
+/Title 3448 0 R
+/A 3445 0 R
+/Parent 3443 0 R
+/First 3451 0 R
+/Last 3467 0 R
+/Count -5
+>> endobj
+3443 0 obj <<
+/Title 3444 0 R
+/A 3441 0 R
+/Parent 3279 0 R
+/Prev 3419 0 R
+/Next 3471 0 R
+/First 3447 0 R
+/Last 3447 0 R
+/Count -1
+>> endobj
+3439 0 obj <<
+/Title 3440 0 R
+/A 3437 0 R
+/Parent 3423 0 R
+/Prev 3435 0 R
+>> endobj
+3435 0 obj <<
+/Title 3436 0 R
+/A 3433 0 R
+/Parent 3423 0 R
+/Prev 3431 0 R
+/Next 3439 0 R
+>> endobj
+3431 0 obj <<
+/Title 3432 0 R
+/A 3429 0 R
+/Parent 3423 0 R
+/Prev 3427 0 R
+/Next 3435 0 R
+>> endobj
+3427 0 obj <<
+/Title 3428 0 R
+/A 3425 0 R
+/Parent 3423 0 R
+/Next 3431 0 R
+>> endobj
+3423 0 obj <<
+/Title 3424 0 R
+/A 3421 0 R
+/Parent 3419 0 R
+/First 3427 0 R
+/Last 3439 0 R
+/Count -4
+>> endobj
+3419 0 obj <<
+/Title 3420 0 R
+/A 3417 0 R
+/Parent 3279 0 R
+/Prev 3407 0 R
+/Next 3443 0 R
+/First 3423 0 R
+/Last 3423 0 R
+/Count -1
+>> endobj
+3415 0 obj <<
+/Title 3416 0 R
+/A 3413 0 R
+/Parent 3411 0 R
+>> endobj
+3411 0 obj <<
+/Title 3412 0 R
+/A 3409 0 R
+/Parent 3407 0 R
+/First 3415 0 R
+/Last 3415 0 R
+/Count -1
+>> endobj
+3407 0 obj <<
+/Title 3408 0 R
+/A 3405 0 R
+/Parent 3279 0 R
+/Prev 3391 0 R
+/Next 3419 0 R
+/First 3411 0 R
+/Last 3411 0 R
+/Count -1
+>> endobj
+3403 0 obj <<
+/Title 3404 0 R
+/A 3401 0 R
+/Parent 3395 0 R
+/Prev 3399 0 R
+>> endobj
+3399 0 obj <<
+/Title 3400 0 R
+/A 3397 0 R
+/Parent 3395 0 R
+/Next 3403 0 R
+>> endobj
+3395 0 obj <<
+/Title 3396 0 R
+/A 3393 0 R
+/Parent 3391 0 R
+/First 3399 0 R
+/Last 3403 0 R
+/Count -2
+>> endobj
+3391 0 obj <<
+/Title 3392 0 R
+/A 3389 0 R
+/Parent 3279 0 R
+/Prev 3347 0 R
+/Next 3407 0 R
+/First 3395 0 R
+/Last 3395 0 R
+/Count -1
+>> endobj
+3387 0 obj <<
+/Title 3388 0 R
+/A 3385 0 R
+/Parent 3363 0 R
+/Prev 3383 0 R
+>> endobj
+3383 0 obj <<
+/Title 3384 0 R
+/A 3381 0 R
+/Parent 3363 0 R
+/Prev 3379 0 R
+/Next 3387 0 R
+>> endobj
+3379 0 obj <<
+/Title 3380 0 R
+/A 3377 0 R
+/Parent 3363 0 R
+/Prev 3375 0 R
+/Next 3383 0 R
+>> endobj
+3375 0 obj <<
+/Title 3376 0 R
+/A 3373 0 R
+/Parent 3363 0 R
+/Prev 3371 0 R
+/Next 3379 0 R
+>> endobj
+3371 0 obj <<
+/Title 3372 0 R
+/A 3369 0 R
+/Parent 3363 0 R
+/Prev 3367 0 R
+/Next 3375 0 R
+>> endobj
+3367 0 obj <<
+/Title 3368 0 R
+/A 3365 0 R
+/Parent 3363 0 R
+/Next 3371 0 R
+>> endobj
+3363 0 obj <<
+/Title 3364 0 R
+/A 3361 0 R
+/Parent 3347 0 R
+/Prev 3351 0 R
+/First 3367 0 R
+/Last 3387 0 R
+/Count -6
+>> endobj
+3359 0 obj <<
+/Title 3360 0 R
+/A 3357 0 R
+/Parent 3351 0 R
+/Prev 3355 0 R
+>> endobj
+3355 0 obj <<
+/Title 3356 0 R
+/A 3353 0 R
+/Parent 3351 0 R
+/Next 3359 0 R
+>> endobj
+3351 0 obj <<
+/Title 3352 0 R
+/A 3349 0 R
+/Parent 3347 0 R
+/Next 3363 0 R
+/First 3355 0 R
+/Last 3359 0 R
+/Count -2
+>> endobj
+3347 0 obj <<
+/Title 3348 0 R
+/A 3345 0 R
+/Parent 3279 0 R
+/Prev 3283 0 R
+/Next 3391 0 R
+/First 3351 0 R
+/Last 3363 0 R
+/Count -2
+>> endobj
+3343 0 obj <<
+/Title 3344 0 R
+/A 3341 0 R
+/Parent 3335 0 R
+/Prev 3339 0 R
+>> endobj
+3339 0 obj <<
+/Title 3340 0 R
+/A 3337 0 R
+/Parent 3335 0 R
+/Next 3343 0 R
+>> endobj
+3335 0 obj <<
+/Title 3336 0 R
+/A 3333 0 R
+/Parent 3283 0 R
+/Prev 3295 0 R
+/First 3339 0 R
+/Last 3343 0 R
+/Count -2
+>> endobj
+3331 0 obj <<
+/Title 3332 0 R
+/A 3329 0 R
+/Parent 3295 0 R
+/Prev 3327 0 R
+>> endobj
+3327 0 obj <<
+/Title 3328 0 R
+/A 3325 0 R
+/Parent 3295 0 R
+/Prev 3323 0 R
+/Next 3331 0 R
+>> endobj
+3323 0 obj <<
+/Title 3324 0 R
+/A 3321 0 R
+/Parent 3295 0 R
+/Prev 3319 0 R
+/Next 3327 0 R
+>> endobj
+3319 0 obj <<
+/Title 3320 0 R
+/A 3317 0 R
+/Parent 3295 0 R
+/Prev 3315 0 R
+/Next 3323 0 R
+>> endobj
+3315 0 obj <<
+/Title 3316 0 R
+/A 3313 0 R
+/Parent 3295 0 R
+/Prev 3311 0 R
+/Next 3319 0 R
+>> endobj
+3311 0 obj <<
+/Title 3312 0 R
+/A 3309 0 R
+/Parent 3295 0 R
+/Prev 3307 0 R
+/Next 3315 0 R
+>> endobj
+3307 0 obj <<
+/Title 3308 0 R
+/A 3305 0 R
+/Parent 3295 0 R
+/Prev 3303 0 R
+/Next 3311 0 R
+>> endobj
+3303 0 obj <<
+/Title 3304 0 R
+/A 3301 0 R
+/Parent 3295 0 R
+/Prev 3299 0 R
+/Next 3307 0 R
+>> endobj
+3299 0 obj <<
+/Title 3300 0 R
+/A 3297 0 R
+/Parent 3295 0 R
+/Next 3303 0 R
+>> endobj
+3295 0 obj <<
+/Title 3296 0 R
+/A 3293 0 R
+/Parent 3283 0 R
+/Prev 3287 0 R
+/Next 3335 0 R
+/First 3299 0 R
+/Last 3331 0 R
+/Count -9
+>> endobj
+3291 0 obj <<
+/Title 3292 0 R
+/A 3289 0 R
+/Parent 3287 0 R
+>> endobj
+3287 0 obj <<
+/Title 3288 0 R
+/A 3285 0 R
+/Parent 3283 0 R
+/Next 3295 0 R
+/First 3291 0 R
+/Last 3291 0 R
+/Count -1
+>> endobj
+3283 0 obj <<
+/Title 3284 0 R
+/A 3281 0 R
+/Parent 3279 0 R
+/Next 3347 0 R
+/First 3287 0 R
+/Last 3335 0 R
+/Count -3
+>> endobj
+3279 0 obj <<
+/Title 3280 0 R
+/A 3277 0 R
+/Parent 17096 0 R
+/Prev 195 0 R
+/Next 6495 0 R
+/First 3283 0 R
+/Last 6391 0 R
+/Count -50
+>> endobj
+3275 0 obj <<
+/Title 3276 0 R
+/A 3273 0 R
+/Parent 3263 0 R
+/Prev 3271 0 R
+>> endobj
+3271 0 obj <<
+/Title 3272 0 R
+/A 3269 0 R
+/Parent 3263 0 R
+/Prev 3267 0 R
+/Next 3275 0 R
+>> endobj
+3267 0 obj <<
+/Title 3268 0 R
+/A 3265 0 R
+/Parent 3263 0 R
+/Next 3271 0 R
+>> endobj
+3263 0 obj <<
+/Title 3264 0 R
+/A 3261 0 R
+/Parent 3243 0 R
+/Prev 3251 0 R
+/First 3267 0 R
+/Last 3275 0 R
+/Count -3
+>> endobj
+3259 0 obj <<
+/Title 3260 0 R
+/A 3257 0 R
+/Parent 3251 0 R
+/Prev 3255 0 R
+>> endobj
+3255 0 obj <<
+/Title 3256 0 R
+/A 3253 0 R
+/Parent 3251 0 R
+/Next 3259 0 R
+>> endobj
+3251 0 obj <<
+/Title 3252 0 R
+/A 3249 0 R
+/Parent 3243 0 R
+/Prev 3247 0 R
+/Next 3263 0 R
+/First 3255 0 R
+/Last 3259 0 R
+/Count -2
+>> endobj
+3247 0 obj <<
+/Title 3248 0 R
+/A 3245 0 R
+/Parent 3243 0 R
+/Next 3251 0 R
+>> endobj
+3243 0 obj <<
+/Title 3244 0 R
+/A 3241 0 R
+/Parent 195 0 R
+/Prev 3227 0 R
+/First 3247 0 R
+/Last 3263 0 R
+/Count -3
+>> endobj
+3239 0 obj <<
+/Title 3240 0 R
+/A 3237 0 R
+/Parent 3235 0 R
+>> endobj
+3235 0 obj <<
+/Title 3236 0 R
+/A 3233 0 R
+/Parent 3227 0 R
+/Prev 3231 0 R
+/First 3239 0 R
+/Last 3239 0 R
+/Count -1
+>> endobj
+3231 0 obj <<
+/Title 3232 0 R
+/A 3229 0 R
+/Parent 3227 0 R
+/Next 3235 0 R
+>> endobj
+3227 0 obj <<
+/Title 3228 0 R
+/A 3225 0 R
+/Parent 195 0 R
+/Prev 3183 0 R
+/Next 3243 0 R
+/First 3231 0 R
+/Last 3235 0 R
+/Count -2
+>> endobj
+3223 0 obj <<
+/Title 3224 0 R
+/A 3221 0 R
+/Parent 3199 0 R
+/Prev 3219 0 R
+>> endobj
+3219 0 obj <<
+/Title 3220 0 R
+/A 3217 0 R
+/Parent 3199 0 R
+/Prev 3215 0 R
+/Next 3223 0 R
+>> endobj
+3215 0 obj <<
+/Title 3216 0 R
+/A 3213 0 R
+/Parent 3199 0 R
+/Prev 3211 0 R
+/Next 3219 0 R
+>> endobj
+3211 0 obj <<
+/Title 3212 0 R
+/A 3209 0 R
+/Parent 3199 0 R
+/Prev 3207 0 R
+/Next 3215 0 R
+>> endobj
+3207 0 obj <<
+/Title 3208 0 R
+/A 3205 0 R
+/Parent 3199 0 R
+/Prev 3203 0 R
+/Next 3211 0 R
+>> endobj
+3203 0 obj <<
+/Title 3204 0 R
+/A 3201 0 R
+/Parent 3199 0 R
+/Next 3207 0 R
+>> endobj
+3199 0 obj <<
+/Title 3200 0 R
+/A 3197 0 R
+/Parent 3183 0 R
+/Prev 3191 0 R
+/First 3203 0 R
+/Last 3223 0 R
+/Count -6
+>> endobj
+3195 0 obj <<
+/Title 3196 0 R
+/A 3193 0 R
+/Parent 3191 0 R
+>> endobj
+3191 0 obj <<
+/Title 3192 0 R
+/A 3189 0 R
+/Parent 3183 0 R
+/Prev 3187 0 R
+/Next 3199 0 R
+/First 3195 0 R
+/Last 3195 0 R
+/Count -1
+>> endobj
+3187 0 obj <<
+/Title 3188 0 R
+/A 3185 0 R
+/Parent 3183 0 R
+/Next 3191 0 R
+>> endobj
+3183 0 obj <<
+/Title 3184 0 R
+/A 3181 0 R
+/Parent 195 0 R
+/Prev 3135 0 R
+/Next 3227 0 R
+/First 3187 0 R
+/Last 3199 0 R
+/Count -3
+>> endobj
+3179 0 obj <<
+/Title 3180 0 R
+/A 3177 0 R
+/Parent 3143 0 R
+/Prev 3175 0 R
+>> endobj
+3175 0 obj <<
+/Title 3176 0 R
+/A 3173 0 R
+/Parent 3143 0 R
+/Prev 3171 0 R
+/Next 3179 0 R
+>> endobj
+3171 0 obj <<
+/Title 3172 0 R
+/A 3169 0 R
+/Parent 3143 0 R
+/Prev 3167 0 R
+/Next 3175 0 R
+>> endobj
+3167 0 obj <<
+/Title 3168 0 R
+/A 3165 0 R
+/Parent 3143 0 R
+/Prev 3163 0 R
+/Next 3171 0 R
+>> endobj
+3163 0 obj <<
+/Title 3164 0 R
+/A 3161 0 R
+/Parent 3143 0 R
+/Prev 3159 0 R
+/Next 3167 0 R
+>> endobj
+3159 0 obj <<
+/Title 3160 0 R
+/A 3157 0 R
+/Parent 3143 0 R
+/Prev 3155 0 R
+/Next 3163 0 R
+>> endobj
+3155 0 obj <<
+/Title 3156 0 R
+/A 3153 0 R
+/Parent 3143 0 R
+/Prev 3151 0 R
+/Next 3159 0 R
+>> endobj
+3151 0 obj <<
+/Title 3152 0 R
+/A 3149 0 R
+/Parent 3143 0 R
+/Prev 3147 0 R
+/Next 3155 0 R
+>> endobj
+3147 0 obj <<
+/Title 3148 0 R
+/A 3145 0 R
+/Parent 3143 0 R
+/Next 3151 0 R
+>> endobj
+3143 0 obj <<
+/Title 3144 0 R
+/A 3141 0 R
+/Parent 3135 0 R
+/Prev 3139 0 R
+/First 3147 0 R
+/Last 3179 0 R
+/Count -9
+>> endobj
+3139 0 obj <<
+/Title 3140 0 R
+/A 3137 0 R
+/Parent 3135 0 R
+/Next 3143 0 R
+>> endobj
+3135 0 obj <<
+/Title 3136 0 R
+/A 3133 0 R
+/Parent 195 0 R
+/Prev 3079 0 R
+/Next 3183 0 R
+/First 3139 0 R
+/Last 3143 0 R
+/Count -2
+>> endobj
+3131 0 obj <<
+/Title 3132 0 R
+/A 3129 0 R
+/Parent 3087 0 R
+/Prev 3127 0 R
+>> endobj
+3127 0 obj <<
+/Title 3128 0 R
+/A 3125 0 R
+/Parent 3087 0 R
+/Prev 3123 0 R
+/Next 3131 0 R
+>> endobj
+3123 0 obj <<
+/Title 3124 0 R
+/A 3121 0 R
+/Parent 3087 0 R
+/Prev 3119 0 R
+/Next 3127 0 R
+>> endobj
+3119 0 obj <<
+/Title 3120 0 R
+/A 3117 0 R
+/Parent 3087 0 R
+/Prev 3115 0 R
+/Next 3123 0 R
+>> endobj
+3115 0 obj <<
+/Title 3116 0 R
+/A 3113 0 R
+/Parent 3087 0 R
+/Prev 3111 0 R
+/Next 3119 0 R
+>> endobj
+3111 0 obj <<
+/Title 3112 0 R
+/A 3109 0 R
+/Parent 3087 0 R
+/Prev 3107 0 R
+/Next 3115 0 R
+>> endobj
+3107 0 obj <<
+/Title 3108 0 R
+/A 3105 0 R
+/Parent 3087 0 R
+/Prev 3103 0 R
+/Next 3111 0 R
+>> endobj
+3103 0 obj <<
+/Title 3104 0 R
+/A 3101 0 R
+/Parent 3087 0 R
+/Prev 3099 0 R
+/Next 3107 0 R
+>> endobj
+3099 0 obj <<
+/Title 3100 0 R
+/A 3097 0 R
+/Parent 3087 0 R
+/Prev 3095 0 R
+/Next 3103 0 R
+>> endobj
+3095 0 obj <<
+/Title 3096 0 R
+/A 3093 0 R
+/Parent 3087 0 R
+/Prev 3091 0 R
+/Next 3099 0 R
+>> endobj
+3091 0 obj <<
+/Title 3092 0 R
+/A 3089 0 R
+/Parent 3087 0 R
+/Next 3095 0 R
+>> endobj
+3087 0 obj <<
+/Title 3088 0 R
+/A 3085 0 R
+/Parent 3079 0 R
+/Prev 3083 0 R
+/First 3091 0 R
+/Last 3131 0 R
+/Count -11
+>> endobj
+3083 0 obj <<
+/Title 3084 0 R
+/A 3081 0 R
+/Parent 3079 0 R
+/Next 3087 0 R
+>> endobj
+3079 0 obj <<
+/Title 3080 0 R
+/A 3077 0 R
+/Parent 195 0 R
+/Prev 3059 0 R
+/Next 3135 0 R
+/First 3083 0 R
+/Last 3087 0 R
+/Count -2
+>> endobj
+3075 0 obj <<
+/Title 3076 0 R
+/A 3073 0 R
+/Parent 3067 0 R
+/Prev 3071 0 R
+>> endobj
+3071 0 obj <<
+/Title 3072 0 R
+/A 3069 0 R
+/Parent 3067 0 R
+/Next 3075 0 R
+>> endobj
+3067 0 obj <<
+/Title 3068 0 R
+/A 3065 0 R
+/Parent 3059 0 R
+/Prev 3063 0 R
+/First 3071 0 R
+/Last 3075 0 R
+/Count -2
+>> endobj
+3063 0 obj <<
+/Title 3064 0 R
+/A 3061 0 R
+/Parent 3059 0 R
+/Next 3067 0 R
+>> endobj
+3059 0 obj <<
+/Title 3060 0 R
+/A 3057 0 R
+/Parent 195 0 R
+/Prev 2923 0 R
+/Next 3079 0 R
+/First 3063 0 R
+/Last 3067 0 R
+/Count -2
+>> endobj
+3055 0 obj <<
+/Title 3056 0 R
+/A 3053 0 R
+/Parent 2931 0 R
+/Prev 3051 0 R
+>> endobj
+3051 0 obj <<
+/Title 3052 0 R
+/A 3049 0 R
+/Parent 2931 0 R
+/Prev 3047 0 R
+/Next 3055 0 R
+>> endobj
+3047 0 obj <<
+/Title 3048 0 R
+/A 3045 0 R
+/Parent 2931 0 R
+/Prev 3043 0 R
+/Next 3051 0 R
+>> endobj
+3043 0 obj <<
+/Title 3044 0 R
+/A 3041 0 R
+/Parent 2931 0 R
+/Prev 3039 0 R
+/Next 3047 0 R
+>> endobj
+3039 0 obj <<
+/Title 3040 0 R
+/A 3037 0 R
+/Parent 2931 0 R
+/Prev 3035 0 R
+/Next 3043 0 R
+>> endobj
+3035 0 obj <<
+/Title 3036 0 R
+/A 3033 0 R
+/Parent 2931 0 R
+/Prev 3031 0 R
+/Next 3039 0 R
+>> endobj
+3031 0 obj <<
+/Title 3032 0 R
+/A 3029 0 R
+/Parent 2931 0 R
+/Prev 3027 0 R
+/Next 3035 0 R
+>> endobj
+3027 0 obj <<
+/Title 3028 0 R
+/A 3025 0 R
+/Parent 2931 0 R
+/Prev 3023 0 R
+/Next 3031 0 R
+>> endobj
+3023 0 obj <<
+/Title 3024 0 R
+/A 3021 0 R
+/Parent 2931 0 R
+/Prev 3019 0 R
+/Next 3027 0 R
+>> endobj
+3019 0 obj <<
+/Title 3020 0 R
+/A 3017 0 R
+/Parent 2931 0 R
+/Prev 3015 0 R
+/Next 3023 0 R
+>> endobj
+3015 0 obj <<
+/Title 3016 0 R
+/A 3013 0 R
+/Parent 2931 0 R
+/Prev 3011 0 R
+/Next 3019 0 R
+>> endobj
+3011 0 obj <<
+/Title 3012 0 R
+/A 3009 0 R
+/Parent 2931 0 R
+/Prev 3007 0 R
+/Next 3015 0 R
+>> endobj
+3007 0 obj <<
+/Title 3008 0 R
+/A 3005 0 R
+/Parent 2931 0 R
+/Prev 3003 0 R
+/Next 3011 0 R
+>> endobj
+3003 0 obj <<
+/Title 3004 0 R
+/A 3001 0 R
+/Parent 2931 0 R
+/Prev 2999 0 R
+/Next 3007 0 R
+>> endobj
+2999 0 obj <<
+/Title 3000 0 R
+/A 2997 0 R
+/Parent 2931 0 R
+/Prev 2995 0 R
+/Next 3003 0 R
+>> endobj
+2995 0 obj <<
+/Title 2996 0 R
+/A 2993 0 R
+/Parent 2931 0 R
+/Prev 2991 0 R
+/Next 2999 0 R
+>> endobj
+2991 0 obj <<
+/Title 2992 0 R
+/A 2989 0 R
+/Parent 2931 0 R
+/Prev 2987 0 R
+/Next 2995 0 R
+>> endobj
+2987 0 obj <<
+/Title 2988 0 R
+/A 2985 0 R
+/Parent 2931 0 R
+/Prev 2983 0 R
+/Next 2991 0 R
+>> endobj
+2983 0 obj <<
+/Title 2984 0 R
+/A 2981 0 R
+/Parent 2931 0 R
+/Prev 2979 0 R
+/Next 2987 0 R
+>> endobj
+2979 0 obj <<
+/Title 2980 0 R
+/A 2977 0 R
+/Parent 2931 0 R
+/Prev 2975 0 R
+/Next 2983 0 R
+>> endobj
+2975 0 obj <<
+/Title 2976 0 R
+/A 2973 0 R
+/Parent 2931 0 R
+/Prev 2971 0 R
+/Next 2979 0 R
+>> endobj
+2971 0 obj <<
+/Title 2972 0 R
+/A 2969 0 R
+/Parent 2931 0 R
+/Prev 2967 0 R
+/Next 2975 0 R
+>> endobj
+2967 0 obj <<
+/Title 2968 0 R
+/A 2965 0 R
+/Parent 2931 0 R
+/Prev 2963 0 R
+/Next 2971 0 R
+>> endobj
+2963 0 obj <<
+/Title 2964 0 R
+/A 2961 0 R
+/Parent 2931 0 R
+/Prev 2959 0 R
+/Next 2967 0 R
+>> endobj
+2959 0 obj <<
+/Title 2960 0 R
+/A 2957 0 R
+/Parent 2931 0 R
+/Prev 2955 0 R
+/Next 2963 0 R
+>> endobj
+2955 0 obj <<
+/Title 2956 0 R
+/A 2953 0 R
+/Parent 2931 0 R
+/Prev 2951 0 R
+/Next 2959 0 R
+>> endobj
+2951 0 obj <<
+/Title 2952 0 R
+/A 2949 0 R
+/Parent 2931 0 R
+/Prev 2947 0 R
+/Next 2955 0 R
+>> endobj
+2947 0 obj <<
+/Title 2948 0 R
+/A 2945 0 R
+/Parent 2931 0 R
+/Prev 2943 0 R
+/Next 2951 0 R
+>> endobj
+2943 0 obj <<
+/Title 2944 0 R
+/A 2941 0 R
+/Parent 2931 0 R
+/Prev 2939 0 R
+/Next 2947 0 R
+>> endobj
+2939 0 obj <<
+/Title 2940 0 R
+/A 2937 0 R
+/Parent 2931 0 R
+/Prev 2935 0 R
+/Next 2943 0 R
+>> endobj
+2935 0 obj <<
+/Title 2936 0 R
+/A 2933 0 R
+/Parent 2931 0 R
+/Next 2939 0 R
+>> endobj
+2931 0 obj <<
+/Title 2932 0 R
+/A 2929 0 R
+/Parent 2923 0 R
+/Prev 2927 0 R
+/First 2935 0 R
+/Last 3055 0 R
+/Count -31
+>> endobj
+2927 0 obj <<
+/Title 2928 0 R
+/A 2925 0 R
+/Parent 2923 0 R
+/Next 2931 0 R
+>> endobj
+2923 0 obj <<
+/Title 2924 0 R
+/A 2921 0 R
+/Parent 195 0 R
+/Prev 2871 0 R
+/Next 3059 0 R
+/First 2927 0 R
+/Last 2931 0 R
+/Count -2
+>> endobj
+2919 0 obj <<
+/Title 2920 0 R
+/A 2917 0 R
+/Parent 2907 0 R
+/Prev 2915 0 R
+>> endobj
+2915 0 obj <<
+/Title 2916 0 R
+/A 2913 0 R
+/Parent 2907 0 R
+/Prev 2911 0 R
+/Next 2919 0 R
+>> endobj
+2911 0 obj <<
+/Title 2912 0 R
+/A 2909 0 R
+/Parent 2907 0 R
+/Next 2915 0 R
+>> endobj
+2907 0 obj <<
+/Title 2908 0 R
+/A 2905 0 R
+/Parent 2871 0 R
+/Prev 2891 0 R
+/First 2911 0 R
+/Last 2919 0 R
+/Count -3
+>> endobj
+2903 0 obj <<
+/Title 2904 0 R
+/A 2901 0 R
+/Parent 2891 0 R
+/Prev 2899 0 R
+>> endobj
+2899 0 obj <<
+/Title 2900 0 R
+/A 2897 0 R
+/Parent 2891 0 R
+/Prev 2895 0 R
+/Next 2903 0 R
+>> endobj
+2895 0 obj <<
+/Title 2896 0 R
+/A 2893 0 R
+/Parent 2891 0 R
+/Next 2899 0 R
+>> endobj
+2891 0 obj <<
+/Title 2892 0 R
+/A 2889 0 R
+/Parent 2871 0 R
+/Prev 2879 0 R
+/Next 2907 0 R
+/First 2895 0 R
+/Last 2903 0 R
+/Count -3
+>> endobj
+2887 0 obj <<
+/Title 2888 0 R
+/A 2885 0 R
+/Parent 2879 0 R
+/Prev 2883 0 R
+>> endobj
+2883 0 obj <<
+/Title 2884 0 R
+/A 2881 0 R
+/Parent 2879 0 R
+/Next 2887 0 R
+>> endobj
+2879 0 obj <<
+/Title 2880 0 R
+/A 2877 0 R
+/Parent 2871 0 R
+/Prev 2875 0 R
+/Next 2891 0 R
+/First 2883 0 R
+/Last 2887 0 R
+/Count -2
+>> endobj
+2875 0 obj <<
+/Title 2876 0 R
+/A 2873 0 R
+/Parent 2871 0 R
+/Next 2879 0 R
+>> endobj
+2871 0 obj <<
+/Title 2872 0 R
+/A 2869 0 R
+/Parent 195 0 R
+/Prev 2831 0 R
+/Next 2923 0 R
+/First 2875 0 R
+/Last 2907 0 R
+/Count -4
+>> endobj
+2867 0 obj <<
+/Title 2868 0 R
+/A 2865 0 R
+/Parent 2847 0 R
+/Prev 2863 0 R
+>> endobj
+2863 0 obj <<
+/Title 2864 0 R
+/A 2861 0 R
+/Parent 2847 0 R
+/Prev 2859 0 R
+/Next 2867 0 R
+>> endobj
+2859 0 obj <<
+/Title 2860 0 R
+/A 2857 0 R
+/Parent 2847 0 R
+/Prev 2855 0 R
+/Next 2863 0 R
+>> endobj
+2855 0 obj <<
+/Title 2856 0 R
+/A 2853 0 R
+/Parent 2847 0 R
+/Prev 2851 0 R
+/Next 2859 0 R
+>> endobj
+2851 0 obj <<
+/Title 2852 0 R
+/A 2849 0 R
+/Parent 2847 0 R
+/Next 2855 0 R
+>> endobj
+2847 0 obj <<
+/Title 2848 0 R
+/A 2845 0 R
+/Parent 2831 0 R
+/Prev 2839 0 R
+/First 2851 0 R
+/Last 2867 0 R
+/Count -5
+>> endobj
+2843 0 obj <<
+/Title 2844 0 R
+/A 2841 0 R
+/Parent 2839 0 R
+>> endobj
+2839 0 obj <<
+/Title 2840 0 R
+/A 2837 0 R
+/Parent 2831 0 R
+/Prev 2835 0 R
+/Next 2847 0 R
+/First 2843 0 R
+/Last 2843 0 R
+/Count -1
+>> endobj
+2835 0 obj <<
+/Title 2836 0 R
+/A 2833 0 R
+/Parent 2831 0 R
+/Next 2839 0 R
+>> endobj
+2831 0 obj <<
+/Title 2832 0 R
+/A 2829 0 R
+/Parent 195 0 R
+/Prev 2783 0 R
+/Next 2871 0 R
+/First 2835 0 R
+/Last 2847 0 R
+/Count -3
+>> endobj
+2827 0 obj <<
+/Title 2828 0 R
+/A 2825 0 R
+/Parent 2819 0 R
+/Prev 2823 0 R
+>> endobj
+2823 0 obj <<
+/Title 2824 0 R
+/A 2821 0 R
+/Parent 2819 0 R
+/Next 2827 0 R
+>> endobj
+2819 0 obj <<
+/Title 2820 0 R
+/A 2817 0 R
+/Parent 2783 0 R
+/Prev 2807 0 R
+/First 2823 0 R
+/Last 2827 0 R
+/Count -2
+>> endobj
+2815 0 obj <<
+/Title 2816 0 R
+/A 2813 0 R
+/Parent 2807 0 R
+/Prev 2811 0 R
+>> endobj
+2811 0 obj <<
+/Title 2812 0 R
+/A 2809 0 R
+/Parent 2807 0 R
+/Next 2815 0 R
+>> endobj
+2807 0 obj <<
+/Title 2808 0 R
+/A 2805 0 R
+/Parent 2783 0 R
+/Prev 2799 0 R
+/Next 2819 0 R
+/First 2811 0 R
+/Last 2815 0 R
+/Count -2
+>> endobj
+2803 0 obj <<
+/Title 2804 0 R
+/A 2801 0 R
+/Parent 2799 0 R
+>> endobj
+2799 0 obj <<
+/Title 2800 0 R
+/A 2797 0 R
+/Parent 2783 0 R
+/Prev 2791 0 R
+/Next 2807 0 R
+/First 2803 0 R
+/Last 2803 0 R
+/Count -1
+>> endobj
+2795 0 obj <<
+/Title 2796 0 R
+/A 2793 0 R
+/Parent 2791 0 R
+>> endobj
+2791 0 obj <<
+/Title 2792 0 R
+/A 2789 0 R
+/Parent 2783 0 R
+/Prev 2787 0 R
+/Next 2799 0 R
+/First 2795 0 R
+/Last 2795 0 R
+/Count -1
+>> endobj
+2787 0 obj <<
+/Title 2788 0 R
+/A 2785 0 R
+/Parent 2783 0 R
+/Next 2791 0 R
+>> endobj
+2783 0 obj <<
+/Title 2784 0 R
+/A 2781 0 R
+/Parent 195 0 R
+/Prev 2755 0 R
+/Next 2831 0 R
+/First 2787 0 R
+/Last 2819 0 R
+/Count -5
+>> endobj
+2779 0 obj <<
+/Title 2780 0 R
+/A 2777 0 R
+/Parent 2771 0 R
+/Prev 2775 0 R
+>> endobj
+2775 0 obj <<
+/Title 2776 0 R
+/A 2773 0 R
+/Parent 2771 0 R
+/Next 2779 0 R
+>> endobj
+2771 0 obj <<
+/Title 2772 0 R
+/A 2769 0 R
+/Parent 2755 0 R
+/Prev 2763 0 R
+/First 2775 0 R
+/Last 2779 0 R
+/Count -2
+>> endobj
+2767 0 obj <<
+/Title 2768 0 R
+/A 2765 0 R
+/Parent 2763 0 R
+>> endobj
+2763 0 obj <<
+/Title 2764 0 R
+/A 2761 0 R
+/Parent 2755 0 R
+/Prev 2759 0 R
+/Next 2771 0 R
+/First 2767 0 R
+/Last 2767 0 R
+/Count -1
+>> endobj
+2759 0 obj <<
+/Title 2760 0 R
+/A 2757 0 R
+/Parent 2755 0 R
+/Next 2763 0 R
+>> endobj
+2755 0 obj <<
+/Title 2756 0 R
+/A 2753 0 R
+/Parent 195 0 R
+/Prev 2691 0 R
+/Next 2783 0 R
+/First 2759 0 R
+/Last 2771 0 R
+/Count -3
+>> endobj
+2751 0 obj <<
+/Title 2752 0 R
+/A 2749 0 R
+/Parent 2715 0 R
+/Prev 2747 0 R
+>> endobj
+2747 0 obj <<
+/Title 2748 0 R
+/A 2745 0 R
+/Parent 2715 0 R
+/Prev 2743 0 R
+/Next 2751 0 R
+>> endobj
+2743 0 obj <<
+/Title 2744 0 R
+/A 2741 0 R
+/Parent 2715 0 R
+/Prev 2739 0 R
+/Next 2747 0 R
+>> endobj
+2739 0 obj <<
+/Title 2740 0 R
+/A 2737 0 R
+/Parent 2715 0 R
+/Prev 2735 0 R
+/Next 2743 0 R
+>> endobj
+2735 0 obj <<
+/Title 2736 0 R
+/A 2733 0 R
+/Parent 2715 0 R
+/Prev 2731 0 R
+/Next 2739 0 R
+>> endobj
+2731 0 obj <<
+/Title 2732 0 R
+/A 2729 0 R
+/Parent 2715 0 R
+/Prev 2727 0 R
+/Next 2735 0 R
+>> endobj
+2727 0 obj <<
+/Title 2728 0 R
+/A 2725 0 R
+/Parent 2715 0 R
+/Prev 2723 0 R
+/Next 2731 0 R
+>> endobj
+2723 0 obj <<
+/Title 2724 0 R
+/A 2721 0 R
+/Parent 2715 0 R
+/Prev 2719 0 R
+/Next 2727 0 R
+>> endobj
+2719 0 obj <<
+/Title 2720 0 R
+/A 2717 0 R
+/Parent 2715 0 R
+/Next 2723 0 R
+>> endobj
+2715 0 obj <<
+/Title 2716 0 R
+/A 2713 0 R
+/Parent 2691 0 R
+/Prev 2707 0 R
+/First 2719 0 R
+/Last 2751 0 R
+/Count -9
+>> endobj
+2711 0 obj <<
+/Title 2712 0 R
+/A 2709 0 R
+/Parent 2707 0 R
+>> endobj
+2707 0 obj <<
+/Title 2708 0 R
+/A 2705 0 R
+/Parent 2691 0 R
+/Prev 2699 0 R
+/Next 2715 0 R
+/First 2711 0 R
+/Last 2711 0 R
+/Count -1
+>> endobj
+2703 0 obj <<
+/Title 2704 0 R
+/A 2701 0 R
+/Parent 2699 0 R
+>> endobj
+2699 0 obj <<
+/Title 2700 0 R
+/A 2697 0 R
+/Parent 2691 0 R
+/Prev 2695 0 R
+/Next 2707 0 R
+/First 2703 0 R
+/Last 2703 0 R
+/Count -1
+>> endobj
+2695 0 obj <<
+/Title 2696 0 R
+/A 2693 0 R
+/Parent 2691 0 R
+/Next 2699 0 R
+>> endobj
+2691 0 obj <<
+/Title 2692 0 R
+/A 2689 0 R
+/Parent 195 0 R
+/Prev 2611 0 R
+/Next 2755 0 R
+/First 2695 0 R
+/Last 2715 0 R
+/Count -4
+>> endobj
+2687 0 obj <<
+/Title 2688 0 R
+/A 2685 0 R
+/Parent 2651 0 R
+/Prev 2683 0 R
+>> endobj
+2683 0 obj <<
+/Title 2684 0 R
+/A 2681 0 R
+/Parent 2651 0 R
+/Prev 2679 0 R
+/Next 2687 0 R
+>> endobj
+2679 0 obj <<
+/Title 2680 0 R
+/A 2677 0 R
+/Parent 2651 0 R
+/Prev 2675 0 R
+/Next 2683 0 R
+>> endobj
+2675 0 obj <<
+/Title 2676 0 R
+/A 2673 0 R
+/Parent 2651 0 R
+/Prev 2671 0 R
+/Next 2679 0 R
+>> endobj
+2671 0 obj <<
+/Title 2672 0 R
+/A 2669 0 R
+/Parent 2651 0 R
+/Prev 2667 0 R
+/Next 2675 0 R
+>> endobj
+2667 0 obj <<
+/Title 2668 0 R
+/A 2665 0 R
+/Parent 2651 0 R
+/Prev 2663 0 R
+/Next 2671 0 R
+>> endobj
+2663 0 obj <<
+/Title 2664 0 R
+/A 2661 0 R
+/Parent 2651 0 R
+/Prev 2659 0 R
+/Next 2667 0 R
+>> endobj
+2659 0 obj <<
+/Title 2660 0 R
+/A 2657 0 R
+/Parent 2651 0 R
+/Prev 2655 0 R
+/Next 2663 0 R
+>> endobj
+2655 0 obj <<
+/Title 2656 0 R
+/A 2653 0 R
+/Parent 2651 0 R
+/Next 2659 0 R
+>> endobj
+2651 0 obj <<
+/Title 2652 0 R
+/A 2649 0 R
+/Parent 2611 0 R
+/Prev 2631 0 R
+/First 2655 0 R
+/Last 2687 0 R
+/Count -9
+>> endobj
+2647 0 obj <<
+/Title 2648 0 R
+/A 2645 0 R
+/Parent 2631 0 R
+/Prev 2643 0 R
+>> endobj
+2643 0 obj <<
+/Title 2644 0 R
+/A 2641 0 R
+/Parent 2631 0 R
+/Prev 2639 0 R
+/Next 2647 0 R
+>> endobj
+2639 0 obj <<
+/Title 2640 0 R
+/A 2637 0 R
+/Parent 2631 0 R
+/Prev 2635 0 R
+/Next 2643 0 R
+>> endobj
+2635 0 obj <<
+/Title 2636 0 R
+/A 2633 0 R
+/Parent 2631 0 R
+/Next 2639 0 R
+>> endobj
+2631 0 obj <<
+/Title 2632 0 R
+/A 2629 0 R
+/Parent 2611 0 R
+/Prev 2619 0 R
+/Next 2651 0 R
+/First 2635 0 R
+/Last 2647 0 R
+/Count -4
+>> endobj
+2627 0 obj <<
+/Title 2628 0 R
+/A 2625 0 R
+/Parent 2619 0 R
+/Prev 2623 0 R
+>> endobj
+2623 0 obj <<
+/Title 2624 0 R
+/A 2621 0 R
+/Parent 2619 0 R
+/Next 2627 0 R
+>> endobj
+2619 0 obj <<
+/Title 2620 0 R
+/A 2617 0 R
+/Parent 2611 0 R
+/Prev 2615 0 R
+/Next 2631 0 R
+/First 2623 0 R
+/Last 2627 0 R
+/Count -2
+>> endobj
+2615 0 obj <<
+/Title 2616 0 R
+/A 2613 0 R
+/Parent 2611 0 R
+/Next 2619 0 R
+>> endobj
+2611 0 obj <<
+/Title 2612 0 R
+/A 2609 0 R
+/Parent 195 0 R
+/Prev 2575 0 R
+/Next 2691 0 R
+/First 2615 0 R
+/Last 2651 0 R
+/Count -4
+>> endobj
+2607 0 obj <<
+/Title 2608 0 R
+/A 2605 0 R
+/Parent 2591 0 R
+/Prev 2603 0 R
+>> endobj
+2603 0 obj <<
+/Title 2604 0 R
+/A 2601 0 R
+/Parent 2591 0 R
+/Prev 2599 0 R
+/Next 2607 0 R
+>> endobj
+2599 0 obj <<
+/Title 2600 0 R
+/A 2597 0 R
+/Parent 2591 0 R
+/Prev 2595 0 R
+/Next 2603 0 R
+>> endobj
+2595 0 obj <<
+/Title 2596 0 R
+/A 2593 0 R
+/Parent 2591 0 R
+/Next 2599 0 R
+>> endobj
+2591 0 obj <<
+/Title 2592 0 R
+/A 2589 0 R
+/Parent 2575 0 R
+/Prev 2583 0 R
+/First 2595 0 R
+/Last 2607 0 R
+/Count -4
+>> endobj
+2587 0 obj <<
+/Title 2588 0 R
+/A 2585 0 R
+/Parent 2583 0 R
+>> endobj
+2583 0 obj <<
+/Title 2584 0 R
+/A 2581 0 R
+/Parent 2575 0 R
+/Prev 2579 0 R
+/Next 2591 0 R
+/First 2587 0 R
+/Last 2587 0 R
+/Count -1
+>> endobj
+2579 0 obj <<
+/Title 2580 0 R
+/A 2577 0 R
+/Parent 2575 0 R
+/Next 2583 0 R
+>> endobj
+2575 0 obj <<
+/Title 2576 0 R
+/A 2573 0 R
+/Parent 195 0 R
+/Prev 2559 0 R
+/Next 2611 0 R
+/First 2579 0 R
+/Last 2591 0 R
+/Count -3
+>> endobj
+2571 0 obj <<
+/Title 2572 0 R
+/A 2569 0 R
+/Parent 2567 0 R
+>> endobj
+2567 0 obj <<
+/Title 2568 0 R
+/A 2565 0 R
+/Parent 2559 0 R
+/Prev 2563 0 R
+/First 2571 0 R
+/Last 2571 0 R
+/Count -1
+>> endobj
+2563 0 obj <<
+/Title 2564 0 R
+/A 2561 0 R
+/Parent 2559 0 R
+/Next 2567 0 R
+>> endobj
+2559 0 obj <<
+/Title 2560 0 R
+/A 2557 0 R
+/Parent 195 0 R
+/Prev 2543 0 R
+/Next 2575 0 R
+/First 2563 0 R
+/Last 2567 0 R
+/Count -2
+>> endobj
+2555 0 obj <<
+/Title 2556 0 R
+/A 2553 0 R
+/Parent 2551 0 R
+>> endobj
+2551 0 obj <<
+/Title 2552 0 R
+/A 2549 0 R
+/Parent 2543 0 R
+/Prev 2547 0 R
+/First 2555 0 R
+/Last 2555 0 R
+/Count -1
+>> endobj
+2547 0 obj <<
+/Title 2548 0 R
+/A 2545 0 R
+/Parent 2543 0 R
+/Next 2551 0 R
+>> endobj
+2543 0 obj <<
+/Title 2544 0 R
+/A 2541 0 R
+/Parent 195 0 R
+/Prev 2527 0 R
+/Next 2559 0 R
+/First 2547 0 R
+/Last 2551 0 R
+/Count -2
+>> endobj
+2539 0 obj <<
+/Title 2540 0 R
+/A 2537 0 R
+/Parent 2535 0 R
+>> endobj
+2535 0 obj <<
+/Title 2536 0 R
+/A 2533 0 R
+/Parent 2527 0 R
+/Prev 2531 0 R
+/First 2539 0 R
+/Last 2539 0 R
+/Count -1
+>> endobj
+2531 0 obj <<
+/Title 2532 0 R
+/A 2529 0 R
+/Parent 2527 0 R
+/Next 2535 0 R
+>> endobj
+2527 0 obj <<
+/Title 2528 0 R
+/A 2525 0 R
+/Parent 195 0 R
+/Prev 2511 0 R
+/Next 2543 0 R
+/First 2531 0 R
+/Last 2535 0 R
+/Count -2
+>> endobj
+2523 0 obj <<
+/Title 2524 0 R
+/A 2521 0 R
+/Parent 2519 0 R
+>> endobj
+2519 0 obj <<
+/Title 2520 0 R
+/A 2517 0 R
+/Parent 2511 0 R
+/Prev 2515 0 R
+/First 2523 0 R
+/Last 2523 0 R
+/Count -1
+>> endobj
+2515 0 obj <<
+/Title 2516 0 R
+/A 2513 0 R
+/Parent 2511 0 R
+/Next 2519 0 R
+>> endobj
+2511 0 obj <<
+/Title 2512 0 R
+/A 2509 0 R
+/Parent 195 0 R
+/Prev 2495 0 R
+/Next 2527 0 R
+/First 2515 0 R
+/Last 2519 0 R
+/Count -2
+>> endobj
+2507 0 obj <<
+/Title 2508 0 R
+/A 2505 0 R
+/Parent 2503 0 R
+>> endobj
+2503 0 obj <<
+/Title 2504 0 R
+/A 2501 0 R
+/Parent 2495 0 R
+/Prev 2499 0 R
+/First 2507 0 R
+/Last 2507 0 R
+/Count -1
+>> endobj
+2499 0 obj <<
+/Title 2500 0 R
+/A 2497 0 R
+/Parent 2495 0 R
+/Next 2503 0 R
+>> endobj
+2495 0 obj <<
+/Title 2496 0 R
+/A 2493 0 R
+/Parent 195 0 R
+/Prev 2479 0 R
+/Next 2511 0 R
+/First 2499 0 R
+/Last 2503 0 R
+/Count -2
+>> endobj
+2491 0 obj <<
+/Title 2492 0 R
+/A 2489 0 R
+/Parent 2487 0 R
+>> endobj
+2487 0 obj <<
+/Title 2488 0 R
+/A 2485 0 R
+/Parent 2479 0 R
+/Prev 2483 0 R
+/First 2491 0 R
+/Last 2491 0 R
+/Count -1
+>> endobj
+2483 0 obj <<
+/Title 2484 0 R
+/A 2481 0 R
+/Parent 2479 0 R
+/Next 2487 0 R
+>> endobj
+2479 0 obj <<
+/Title 2480 0 R
+/A 2477 0 R
+/Parent 195 0 R
+/Prev 2463 0 R
+/Next 2495 0 R
+/First 2483 0 R
+/Last 2487 0 R
+/Count -2
+>> endobj
+2475 0 obj <<
+/Title 2476 0 R
+/A 2473 0 R
+/Parent 2471 0 R
+>> endobj
+2471 0 obj <<
+/Title 2472 0 R
+/A 2469 0 R
+/Parent 2463 0 R
+/Prev 2467 0 R
+/First 2475 0 R
+/Last 2475 0 R
+/Count -1
+>> endobj
+2467 0 obj <<
+/Title 2468 0 R
+/A 2465 0 R
+/Parent 2463 0 R
+/Next 2471 0 R
+>> endobj
+2463 0 obj <<
+/Title 2464 0 R
+/A 2461 0 R
+/Parent 195 0 R
+/Prev 2447 0 R
+/Next 2479 0 R
+/First 2467 0 R
+/Last 2471 0 R
+/Count -2
+>> endobj
+2459 0 obj <<
+/Title 2460 0 R
+/A 2457 0 R
+/Parent 2455 0 R
+>> endobj
+2455 0 obj <<
+/Title 2456 0 R
+/A 2453 0 R
+/Parent 2447 0 R
+/Prev 2451 0 R
+/First 2459 0 R
+/Last 2459 0 R
+/Count -1
+>> endobj
+2451 0 obj <<
+/Title 2452 0 R
+/A 2449 0 R
+/Parent 2447 0 R
+/Next 2455 0 R
+>> endobj
+2447 0 obj <<
+/Title 2448 0 R
+/A 2445 0 R
+/Parent 195 0 R
+/Prev 2431 0 R
+/Next 2463 0 R
+/First 2451 0 R
+/Last 2455 0 R
+/Count -2
+>> endobj
+2443 0 obj <<
+/Title 2444 0 R
+/A 2441 0 R
+/Parent 2439 0 R
+>> endobj
+2439 0 obj <<
+/Title 2440 0 R
+/A 2437 0 R
+/Parent 2431 0 R
+/Prev 2435 0 R
+/First 2443 0 R
+/Last 2443 0 R
+/Count -1
+>> endobj
+2435 0 obj <<
+/Title 2436 0 R
+/A 2433 0 R
+/Parent 2431 0 R
+/Next 2439 0 R
+>> endobj
+2431 0 obj <<
+/Title 2432 0 R
+/A 2429 0 R
+/Parent 195 0 R
+/Prev 2415 0 R
+/Next 2447 0 R
+/First 2435 0 R
+/Last 2439 0 R
+/Count -2
+>> endobj
+2427 0 obj <<
+/Title 2428 0 R
+/A 2425 0 R
+/Parent 2423 0 R
+>> endobj
+2423 0 obj <<
+/Title 2424 0 R
+/A 2421 0 R
+/Parent 2415 0 R
+/Prev 2419 0 R
+/First 2427 0 R
+/Last 2427 0 R
+/Count -1
+>> endobj
+2419 0 obj <<
+/Title 2420 0 R
+/A 2417 0 R
+/Parent 2415 0 R
+/Next 2423 0 R
+>> endobj
+2415 0 obj <<
+/Title 2416 0 R
+/A 2413 0 R
+/Parent 195 0 R
+/Prev 2399 0 R
+/Next 2431 0 R
+/First 2419 0 R
+/Last 2423 0 R
+/Count -2
+>> endobj
+2411 0 obj <<
+/Title 2412 0 R
+/A 2409 0 R
+/Parent 2407 0 R
+>> endobj
+2407 0 obj <<
+/Title 2408 0 R
+/A 2405 0 R
+/Parent 2399 0 R
+/Prev 2403 0 R
+/First 2411 0 R
+/Last 2411 0 R
+/Count -1
+>> endobj
+2403 0 obj <<
+/Title 2404 0 R
+/A 2401 0 R
+/Parent 2399 0 R
+/Next 2407 0 R
+>> endobj
+2399 0 obj <<
+/Title 2400 0 R
+/A 2397 0 R
+/Parent 195 0 R
+/Prev 2383 0 R
+/Next 2415 0 R
+/First 2403 0 R
+/Last 2407 0 R
+/Count -2
+>> endobj
+2395 0 obj <<
+/Title 2396 0 R
+/A 2393 0 R
+/Parent 2391 0 R
+>> endobj
+2391 0 obj <<
+/Title 2392 0 R
+/A 2389 0 R
+/Parent 2383 0 R
+/Prev 2387 0 R
+/First 2395 0 R
+/Last 2395 0 R
+/Count -1
+>> endobj
+2387 0 obj <<
+/Title 2388 0 R
+/A 2385 0 R
+/Parent 2383 0 R
+/Next 2391 0 R
+>> endobj
+2383 0 obj <<
+/Title 2384 0 R
+/A 2381 0 R
+/Parent 195 0 R
+/Prev 2367 0 R
+/Next 2399 0 R
+/First 2387 0 R
+/Last 2391 0 R
+/Count -2
+>> endobj
+2379 0 obj <<
+/Title 2380 0 R
+/A 2377 0 R
+/Parent 2375 0 R
+>> endobj
+2375 0 obj <<
+/Title 2376 0 R
+/A 2373 0 R
+/Parent 2367 0 R
+/Prev 2371 0 R
+/First 2379 0 R
+/Last 2379 0 R
+/Count -1
+>> endobj
+2371 0 obj <<
+/Title 2372 0 R
+/A 2369 0 R
+/Parent 2367 0 R
+/Next 2375 0 R
+>> endobj
+2367 0 obj <<
+/Title 2368 0 R
+/A 2365 0 R
+/Parent 195 0 R
+/Prev 2351 0 R
+/Next 2383 0 R
+/First 2371 0 R
+/Last 2375 0 R
+/Count -2
+>> endobj
+2363 0 obj <<
+/Title 2364 0 R
+/A 2361 0 R
+/Parent 2359 0 R
+>> endobj
+2359 0 obj <<
+/Title 2360 0 R
+/A 2357 0 R
+/Parent 2351 0 R
+/Prev 2355 0 R
+/First 2363 0 R
+/Last 2363 0 R
+/Count -1
+>> endobj
+2355 0 obj <<
+/Title 2356 0 R
+/A 2353 0 R
+/Parent 2351 0 R
+/Next 2359 0 R
+>> endobj
+2351 0 obj <<
+/Title 2352 0 R
+/A 2349 0 R
+/Parent 195 0 R
+/Prev 2335 0 R
+/Next 2367 0 R
+/First 2355 0 R
+/Last 2359 0 R
+/Count -2
+>> endobj
+2347 0 obj <<
+/Title 2348 0 R
+/A 2345 0 R
+/Parent 2343 0 R
+>> endobj
+2343 0 obj <<
+/Title 2344 0 R
+/A 2341 0 R
+/Parent 2335 0 R
+/Prev 2339 0 R
+/First 2347 0 R
+/Last 2347 0 R
+/Count -1
+>> endobj
+2339 0 obj <<
+/Title 2340 0 R
+/A 2337 0 R
+/Parent 2335 0 R
+/Next 2343 0 R
+>> endobj
+2335 0 obj <<
+/Title 2336 0 R
+/A 2333 0 R
+/Parent 195 0 R
+/Prev 2319 0 R
+/Next 2351 0 R
+/First 2339 0 R
+/Last 2343 0 R
+/Count -2
+>> endobj
+2331 0 obj <<
+/Title 2332 0 R
+/A 2329 0 R
+/Parent 2327 0 R
+>> endobj
+2327 0 obj <<
+/Title 2328 0 R
+/A 2325 0 R
+/Parent 2319 0 R
+/Prev 2323 0 R
+/First 2331 0 R
+/Last 2331 0 R
+/Count -1
+>> endobj
+2323 0 obj <<
+/Title 2324 0 R
+/A 2321 0 R
+/Parent 2319 0 R
+/Next 2327 0 R
+>> endobj
+2319 0 obj <<
+/Title 2320 0 R
+/A 2317 0 R
+/Parent 195 0 R
+/Prev 2303 0 R
+/Next 2335 0 R
+/First 2323 0 R
+/Last 2327 0 R
+/Count -2
+>> endobj
+2315 0 obj <<
+/Title 2316 0 R
+/A 2313 0 R
+/Parent 2311 0 R
+>> endobj
+2311 0 obj <<
+/Title 2312 0 R
+/A 2309 0 R
+/Parent 2303 0 R
+/Prev 2307 0 R
+/First 2315 0 R
+/Last 2315 0 R
+/Count -1
+>> endobj
+2307 0 obj <<
+/Title 2308 0 R
+/A 2305 0 R
+/Parent 2303 0 R
+/Next 2311 0 R
+>> endobj
+2303 0 obj <<
+/Title 2304 0 R
+/A 2301 0 R
+/Parent 195 0 R
+/Prev 2287 0 R
+/Next 2319 0 R
+/First 2307 0 R
+/Last 2311 0 R
+/Count -2
+>> endobj
+2299 0 obj <<
+/Title 2300 0 R
+/A 2297 0 R
+/Parent 2295 0 R
+>> endobj
+2295 0 obj <<
+/Title 2296 0 R
+/A 2293 0 R
+/Parent 2287 0 R
+/Prev 2291 0 R
+/First 2299 0 R
+/Last 2299 0 R
+/Count -1
+>> endobj
+2291 0 obj <<
+/Title 2292 0 R
+/A 2289 0 R
+/Parent 2287 0 R
+/Next 2295 0 R
+>> endobj
+2287 0 obj <<
+/Title 2288 0 R
+/A 2285 0 R
+/Parent 195 0 R
+/Prev 2271 0 R
+/Next 2303 0 R
+/First 2291 0 R
+/Last 2295 0 R
+/Count -2
+>> endobj
+2283 0 obj <<
+/Title 2284 0 R
+/A 2281 0 R
+/Parent 2279 0 R
+>> endobj
+2279 0 obj <<
+/Title 2280 0 R
+/A 2277 0 R
+/Parent 2271 0 R
+/Prev 2275 0 R
+/First 2283 0 R
+/Last 2283 0 R
+/Count -1
+>> endobj
+2275 0 obj <<
+/Title 2276 0 R
+/A 2273 0 R
+/Parent 2271 0 R
+/Next 2279 0 R
+>> endobj
+2271 0 obj <<
+/Title 2272 0 R
+/A 2269 0 R
+/Parent 195 0 R
+/Prev 2255 0 R
+/Next 2287 0 R
+/First 2275 0 R
+/Last 2279 0 R
+/Count -2
+>> endobj
+2267 0 obj <<
+/Title 2268 0 R
+/A 2265 0 R
+/Parent 2263 0 R
+>> endobj
+2263 0 obj <<
+/Title 2264 0 R
+/A 2261 0 R
+/Parent 2255 0 R
+/Prev 2259 0 R
+/First 2267 0 R
+/Last 2267 0 R
+/Count -1
+>> endobj
+2259 0 obj <<
+/Title 2260 0 R
+/A 2257 0 R
+/Parent 2255 0 R
+/Next 2263 0 R
+>> endobj
+2255 0 obj <<
+/Title 2256 0 R
+/A 2253 0 R
+/Parent 195 0 R
+/Prev 2239 0 R
+/Next 2271 0 R
+/First 2259 0 R
+/Last 2263 0 R
+/Count -2
+>> endobj
+2251 0 obj <<
+/Title 2252 0 R
+/A 2249 0 R
+/Parent 2247 0 R
+>> endobj
+2247 0 obj <<
+/Title 2248 0 R
+/A 2245 0 R
+/Parent 2239 0 R
+/Prev 2243 0 R
+/First 2251 0 R
+/Last 2251 0 R
+/Count -1
+>> endobj
+2243 0 obj <<
+/Title 2244 0 R
+/A 2241 0 R
+/Parent 2239 0 R
+/Next 2247 0 R
+>> endobj
+2239 0 obj <<
+/Title 2240 0 R
+/A 2237 0 R
+/Parent 195 0 R
+/Prev 2223 0 R
+/Next 2255 0 R
+/First 2243 0 R
+/Last 2247 0 R
+/Count -2
+>> endobj
+2235 0 obj <<
+/Title 2236 0 R
+/A 2233 0 R
+/Parent 2231 0 R
+>> endobj
+2231 0 obj <<
+/Title 2232 0 R
+/A 2229 0 R
+/Parent 2223 0 R
+/Prev 2227 0 R
+/First 2235 0 R
+/Last 2235 0 R
+/Count -1
+>> endobj
+2227 0 obj <<
+/Title 2228 0 R
+/A 2225 0 R
+/Parent 2223 0 R
+/Next 2231 0 R
+>> endobj
+2223 0 obj <<
+/Title 2224 0 R
+/A 2221 0 R
+/Parent 195 0 R
+/Prev 1951 0 R
+/Next 2239 0 R
+/First 2227 0 R
+/Last 2231 0 R
+/Count -2
+>> endobj
+2219 0 obj <<
+/Title 2220 0 R
+/A 2217 0 R
+/Parent 2115 0 R
+/Prev 2215 0 R
+>> endobj
+2215 0 obj <<
+/Title 2216 0 R
+/A 2213 0 R
+/Parent 2115 0 R
+/Prev 2211 0 R
+/Next 2219 0 R
+>> endobj
+2211 0 obj <<
+/Title 2212 0 R
+/A 2209 0 R
+/Parent 2115 0 R
+/Prev 2207 0 R
+/Next 2215 0 R
+>> endobj
+2207 0 obj <<
+/Title 2208 0 R
+/A 2205 0 R
+/Parent 2115 0 R
+/Prev 2203 0 R
+/Next 2211 0 R
+>> endobj
+2203 0 obj <<
+/Title 2204 0 R
+/A 2201 0 R
+/Parent 2115 0 R
+/Prev 2199 0 R
+/Next 2207 0 R
+>> endobj
+2199 0 obj <<
+/Title 2200 0 R
+/A 2197 0 R
+/Parent 2115 0 R
+/Prev 2195 0 R
+/Next 2203 0 R
+>> endobj
+2195 0 obj <<
+/Title 2196 0 R
+/A 2193 0 R
+/Parent 2115 0 R
+/Prev 2191 0 R
+/Next 2199 0 R
+>> endobj
+2191 0 obj <<
+/Title 2192 0 R
+/A 2189 0 R
+/Parent 2115 0 R
+/Prev 2187 0 R
+/Next 2195 0 R
+>> endobj
+2187 0 obj <<
+/Title 2188 0 R
+/A 2185 0 R
+/Parent 2115 0 R
+/Prev 2183 0 R
+/Next 2191 0 R
+>> endobj
+2183 0 obj <<
+/Title 2184 0 R
+/A 2181 0 R
+/Parent 2115 0 R
+/Prev 2179 0 R
+/Next 2187 0 R
+>> endobj
+2179 0 obj <<
+/Title 2180 0 R
+/A 2177 0 R
+/Parent 2115 0 R
+/Prev 2175 0 R
+/Next 2183 0 R
+>> endobj
+2175 0 obj <<
+/Title 2176 0 R
+/A 2173 0 R
+/Parent 2115 0 R
+/Prev 2171 0 R
+/Next 2179 0 R
+>> endobj
+2171 0 obj <<
+/Title 2172 0 R
+/A 2169 0 R
+/Parent 2115 0 R
+/Prev 2167 0 R
+/Next 2175 0 R
+>> endobj
+2167 0 obj <<
+/Title 2168 0 R
+/A 2165 0 R
+/Parent 2115 0 R
+/Prev 2163 0 R
+/Next 2171 0 R
+>> endobj
+2163 0 obj <<
+/Title 2164 0 R
+/A 2161 0 R
+/Parent 2115 0 R
+/Prev 2159 0 R
+/Next 2167 0 R
+>> endobj
+2159 0 obj <<
+/Title 2160 0 R
+/A 2157 0 R
+/Parent 2115 0 R
+/Prev 2155 0 R
+/Next 2163 0 R
+>> endobj
+2155 0 obj <<
+/Title 2156 0 R
+/A 2153 0 R
+/Parent 2115 0 R
+/Prev 2151 0 R
+/Next 2159 0 R
+>> endobj
+2151 0 obj <<
+/Title 2152 0 R
+/A 2149 0 R
+/Parent 2115 0 R
+/Prev 2147 0 R
+/Next 2155 0 R
+>> endobj
+2147 0 obj <<
+/Title 2148 0 R
+/A 2145 0 R
+/Parent 2115 0 R
+/Prev 2143 0 R
+/Next 2151 0 R
+>> endobj
+2143 0 obj <<
+/Title 2144 0 R
+/A 2141 0 R
+/Parent 2115 0 R
+/Prev 2139 0 R
+/Next 2147 0 R
+>> endobj
+2139 0 obj <<
+/Title 2140 0 R
+/A 2137 0 R
+/Parent 2115 0 R
+/Prev 2135 0 R
+/Next 2143 0 R
+>> endobj
+2135 0 obj <<
+/Title 2136 0 R
+/A 2133 0 R
+/Parent 2115 0 R
+/Prev 2131 0 R
+/Next 2139 0 R
+>> endobj
+2131 0 obj <<
+/Title 2132 0 R
+/A 2129 0 R
+/Parent 2115 0 R
+/Prev 2127 0 R
+/Next 2135 0 R
+>> endobj
+2127 0 obj <<
+/Title 2128 0 R
+/A 2125 0 R
+/Parent 2115 0 R
+/Prev 2123 0 R
+/Next 2131 0 R
+>> endobj
+2123 0 obj <<
+/Title 2124 0 R
+/A 2121 0 R
+/Parent 2115 0 R
+/Prev 2119 0 R
+/Next 2127 0 R
+>> endobj
+2119 0 obj <<
+/Title 2120 0 R
+/A 2117 0 R
+/Parent 2115 0 R
+/Next 2123 0 R
+>> endobj
+2115 0 obj <<
+/Title 2116 0 R
+/A 2113 0 R
+/Parent 1951 0 R
+/Prev 1991 0 R
+/First 2119 0 R
+/Last 2219 0 R
+/Count -26
+>> endobj
+2111 0 obj <<
+/Title 2112 0 R
+/A 2109 0 R
+/Parent 1991 0 R
+/Prev 2107 0 R
+>> endobj
+2107 0 obj <<
+/Title 2108 0 R
+/A 2105 0 R
+/Parent 1991 0 R
+/Prev 2103 0 R
+/Next 2111 0 R
+>> endobj
+2103 0 obj <<
+/Title 2104 0 R
+/A 2101 0 R
+/Parent 1991 0 R
+/Prev 2099 0 R
+/Next 2107 0 R
+>> endobj
+2099 0 obj <<
+/Title 2100 0 R
+/A 2097 0 R
+/Parent 1991 0 R
+/Prev 2095 0 R
+/Next 2103 0 R
+>> endobj
+2095 0 obj <<
+/Title 2096 0 R
+/A 2093 0 R
+/Parent 1991 0 R
+/Prev 2091 0 R
+/Next 2099 0 R
+>> endobj
+2091 0 obj <<
+/Title 2092 0 R
+/A 2089 0 R
+/Parent 1991 0 R
+/Prev 2087 0 R
+/Next 2095 0 R
+>> endobj
+2087 0 obj <<
+/Title 2088 0 R
+/A 2085 0 R
+/Parent 1991 0 R
+/Prev 2083 0 R
+/Next 2091 0 R
+>> endobj
+2083 0 obj <<
+/Title 2084 0 R
+/A 2081 0 R
+/Parent 1991 0 R
+/Prev 2079 0 R
+/Next 2087 0 R
+>> endobj
+2079 0 obj <<
+/Title 2080 0 R
+/A 2077 0 R
+/Parent 1991 0 R
+/Prev 2075 0 R
+/Next 2083 0 R
+>> endobj
+2075 0 obj <<
+/Title 2076 0 R
+/A 2073 0 R
+/Parent 1991 0 R
+/Prev 2071 0 R
+/Next 2079 0 R
+>> endobj
+2071 0 obj <<
+/Title 2072 0 R
+/A 2069 0 R
+/Parent 1991 0 R
+/Prev 2067 0 R
+/Next 2075 0 R
+>> endobj
+2067 0 obj <<
+/Title 2068 0 R
+/A 2065 0 R
+/Parent 1991 0 R
+/Prev 2063 0 R
+/Next 2071 0 R
+>> endobj
+2063 0 obj <<
+/Title 2064 0 R
+/A 2061 0 R
+/Parent 1991 0 R
+/Prev 2059 0 R
+/Next 2067 0 R
+>> endobj
+2059 0 obj <<
+/Title 2060 0 R
+/A 2057 0 R
+/Parent 1991 0 R
+/Prev 2055 0 R
+/Next 2063 0 R
+>> endobj
+2055 0 obj <<
+/Title 2056 0 R
+/A 2053 0 R
+/Parent 1991 0 R
+/Prev 2051 0 R
+/Next 2059 0 R
+>> endobj
+2051 0 obj <<
+/Title 2052 0 R
+/A 2049 0 R
+/Parent 1991 0 R
+/Prev 2047 0 R
+/Next 2055 0 R
+>> endobj
+2047 0 obj <<
+/Title 2048 0 R
+/A 2045 0 R
+/Parent 1991 0 R
+/Prev 2043 0 R
+/Next 2051 0 R
+>> endobj
+2043 0 obj <<
+/Title 2044 0 R
+/A 2041 0 R
+/Parent 1991 0 R
+/Prev 2039 0 R
+/Next 2047 0 R
+>> endobj
+2039 0 obj <<
+/Title 2040 0 R
+/A 2037 0 R
+/Parent 1991 0 R
+/Prev 2035 0 R
+/Next 2043 0 R
+>> endobj
+2035 0 obj <<
+/Title 2036 0 R
+/A 2033 0 R
+/Parent 1991 0 R
+/Prev 2031 0 R
+/Next 2039 0 R
+>> endobj
+2031 0 obj <<
+/Title 2032 0 R
+/A 2029 0 R
+/Parent 1991 0 R
+/Prev 2027 0 R
+/Next 2035 0 R
+>> endobj
+2027 0 obj <<
+/Title 2028 0 R
+/A 2025 0 R
+/Parent 1991 0 R
+/Prev 2023 0 R
+/Next 2031 0 R
+>> endobj
+2023 0 obj <<
+/Title 2024 0 R
+/A 2021 0 R
+/Parent 1991 0 R
+/Prev 2019 0 R
+/Next 2027 0 R
+>> endobj
+2019 0 obj <<
+/Title 2020 0 R
+/A 2017 0 R
+/Parent 1991 0 R
+/Prev 2015 0 R
+/Next 2023 0 R
+>> endobj
+2015 0 obj <<
+/Title 2016 0 R
+/A 2013 0 R
+/Parent 1991 0 R
+/Prev 2011 0 R
+/Next 2019 0 R
+>> endobj
+2011 0 obj <<
+/Title 2012 0 R
+/A 2009 0 R
+/Parent 1991 0 R
+/Prev 2007 0 R
+/Next 2015 0 R
+>> endobj
+2007 0 obj <<
+/Title 2008 0 R
+/A 2005 0 R
+/Parent 1991 0 R
+/Prev 2003 0 R
+/Next 2011 0 R
+>> endobj
+2003 0 obj <<
+/Title 2004 0 R
+/A 2001 0 R
+/Parent 1991 0 R
+/Prev 1999 0 R
+/Next 2007 0 R
+>> endobj
+1999 0 obj <<
+/Title 2000 0 R
+/A 1997 0 R
+/Parent 1991 0 R
+/Prev 1995 0 R
+/Next 2003 0 R
+>> endobj
+1995 0 obj <<
+/Title 1996 0 R
+/A 1993 0 R
+/Parent 1991 0 R
+/Next 1999 0 R
+>> endobj
+1991 0 obj <<
+/Title 1992 0 R
+/A 1989 0 R
+/Parent 1951 0 R
+/Prev 1971 0 R
+/Next 2115 0 R
+/First 1995 0 R
+/Last 2111 0 R
+/Count -30
+>> endobj
+1987 0 obj <<
+/Title 1988 0 R
+/A 1985 0 R
+/Parent 1971 0 R
+/Prev 1983 0 R
+>> endobj
+1983 0 obj <<
+/Title 1984 0 R
+/A 1981 0 R
+/Parent 1971 0 R
+/Prev 1979 0 R
+/Next 1987 0 R
+>> endobj
+1979 0 obj <<
+/Title 1980 0 R
+/A 1977 0 R
+/Parent 1971 0 R
+/Prev 1975 0 R
+/Next 1983 0 R
+>> endobj
+1975 0 obj <<
+/Title 1976 0 R
+/A 1973 0 R
+/Parent 1971 0 R
+/Next 1979 0 R
+>> endobj
+1971 0 obj <<
+/Title 1972 0 R
+/A 1969 0 R
+/Parent 1951 0 R
+/Prev 1959 0 R
+/Next 1991 0 R
+/First 1975 0 R
+/Last 1987 0 R
+/Count -4
+>> endobj
+1967 0 obj <<
+/Title 1968 0 R
+/A 1965 0 R
+/Parent 1959 0 R
+/Prev 1963 0 R
+>> endobj
+1963 0 obj <<
+/Title 1964 0 R
+/A 1961 0 R
+/Parent 1959 0 R
+/Next 1967 0 R
+>> endobj
+1959 0 obj <<
+/Title 1960 0 R
+/A 1957 0 R
+/Parent 1951 0 R
+/Prev 1955 0 R
+/Next 1971 0 R
+/First 1963 0 R
+/Last 1967 0 R
+/Count -2
+>> endobj
+1955 0 obj <<
+/Title 1956 0 R
+/A 1953 0 R
+/Parent 1951 0 R
+/Next 1959 0 R
+>> endobj
+1951 0 obj <<
+/Title 1952 0 R
+/A 1949 0 R
+/Parent 195 0 R
+/Prev 1923 0 R
+/Next 2223 0 R
+/First 1955 0 R
+/Last 2115 0 R
+/Count -5
+>> endobj
+1947 0 obj <<
+/Title 1948 0 R
+/A 1945 0 R
+/Parent 1931 0 R
+/Prev 1943 0 R
+>> endobj
+1943 0 obj <<
+/Title 1944 0 R
+/A 1941 0 R
+/Parent 1931 0 R
+/Prev 1939 0 R
+/Next 1947 0 R
+>> endobj
+1939 0 obj <<
+/Title 1940 0 R
+/A 1937 0 R
+/Parent 1931 0 R
+/Prev 1935 0 R
+/Next 1943 0 R
+>> endobj
+1935 0 obj <<
+/Title 1936 0 R
+/A 1933 0 R
+/Parent 1931 0 R
+/Next 1939 0 R
+>> endobj
+1931 0 obj <<
+/Title 1932 0 R
+/A 1929 0 R
+/Parent 1923 0 R
+/Prev 1927 0 R
+/First 1935 0 R
+/Last 1947 0 R
+/Count -4
+>> endobj
+1927 0 obj <<
+/Title 1928 0 R
+/A 1925 0 R
+/Parent 1923 0 R
+/Next 1931 0 R
+>> endobj
+1923 0 obj <<
+/Title 1924 0 R
+/A 1921 0 R
+/Parent 195 0 R
+/Prev 1907 0 R
+/Next 1951 0 R
+/First 1927 0 R
+/Last 1931 0 R
+/Count -2
+>> endobj
+1919 0 obj <<
+/Title 1920 0 R
+/A 1917 0 R
+/Parent 1915 0 R
+>> endobj
+1915 0 obj <<
+/Title 1916 0 R
+/A 1913 0 R
+/Parent 1907 0 R
+/Prev 1911 0 R
+/First 1919 0 R
+/Last 1919 0 R
+/Count -1
+>> endobj
+1911 0 obj <<
+/Title 1912 0 R
+/A 1909 0 R
+/Parent 1907 0 R
+/Next 1915 0 R
+>> endobj
+1907 0 obj <<
+/Title 1908 0 R
+/A 1905 0 R
+/Parent 195 0 R
+/Prev 1891 0 R
+/Next 1923 0 R
+/First 1911 0 R
+/Last 1915 0 R
+/Count -2
+>> endobj
+1903 0 obj <<
+/Title 1904 0 R
+/A 1901 0 R
+/Parent 1899 0 R
+>> endobj
+1899 0 obj <<
+/Title 1900 0 R
+/A 1897 0 R
+/Parent 1891 0 R
+/Prev 1895 0 R
+/First 1903 0 R
+/Last 1903 0 R
+/Count -1
+>> endobj
+1895 0 obj <<
+/Title 1896 0 R
+/A 1893 0 R
+/Parent 1891 0 R
+/Next 1899 0 R
+>> endobj
+1891 0 obj <<
+/Title 1892 0 R
+/A 1889 0 R
+/Parent 195 0 R
+/Prev 1875 0 R
+/Next 1907 0 R
+/First 1895 0 R
+/Last 1899 0 R
+/Count -2
+>> endobj
+1887 0 obj <<
+/Title 1888 0 R
+/A 1885 0 R
+/Parent 1883 0 R
+>> endobj
+1883 0 obj <<
+/Title 1884 0 R
+/A 1881 0 R
+/Parent 1875 0 R
+/Prev 1879 0 R
+/First 1887 0 R
+/Last 1887 0 R
+/Count -1
+>> endobj
+1879 0 obj <<
+/Title 1880 0 R
+/A 1877 0 R
+/Parent 1875 0 R
+/Next 1883 0 R
+>> endobj
+1875 0 obj <<
+/Title 1876 0 R
+/A 1873 0 R
+/Parent 195 0 R
+/Prev 1859 0 R
+/Next 1891 0 R
+/First 1879 0 R
+/Last 1883 0 R
+/Count -2
+>> endobj
+1871 0 obj <<
+/Title 1872 0 R
+/A 1869 0 R
+/Parent 1867 0 R
+>> endobj
+1867 0 obj <<
+/Title 1868 0 R
+/A 1865 0 R
+/Parent 1859 0 R
+/Prev 1863 0 R
+/First 1871 0 R
+/Last 1871 0 R
+/Count -1
+>> endobj
+1863 0 obj <<
+/Title 1864 0 R
+/A 1861 0 R
+/Parent 1859 0 R
+/Next 1867 0 R
+>> endobj
+1859 0 obj <<
+/Title 1860 0 R
+/A 1857 0 R
+/Parent 195 0 R
+/Prev 1843 0 R
+/Next 1875 0 R
+/First 1863 0 R
+/Last 1867 0 R
+/Count -2
+>> endobj
+1855 0 obj <<
+/Title 1856 0 R
+/A 1853 0 R
+/Parent 1851 0 R
+>> endobj
+1851 0 obj <<
+/Title 1852 0 R
+/A 1849 0 R
+/Parent 1843 0 R
+/Prev 1847 0 R
+/First 1855 0 R
+/Last 1855 0 R
+/Count -1
+>> endobj
+1847 0 obj <<
+/Title 1848 0 R
+/A 1845 0 R
+/Parent 1843 0 R
+/Next 1851 0 R
+>> endobj
+1843 0 obj <<
+/Title 1844 0 R
+/A 1841 0 R
+/Parent 195 0 R
+/Prev 1819 0 R
+/Next 1859 0 R
+/First 1847 0 R
+/Last 1851 0 R
+/Count -2
+>> endobj
+1839 0 obj <<
+/Title 1840 0 R
+/A 1837 0 R
+/Parent 1827 0 R
+/Prev 1835 0 R
+>> endobj
+1835 0 obj <<
+/Title 1836 0 R
+/A 1833 0 R
+/Parent 1827 0 R
+/Prev 1831 0 R
+/Next 1839 0 R
+>> endobj
+1831 0 obj <<
+/Title 1832 0 R
+/A 1829 0 R
+/Parent 1827 0 R
+/Next 1835 0 R
+>> endobj
+1827 0 obj <<
+/Title 1828 0 R
+/A 1825 0 R
+/Parent 1819 0 R
+/Prev 1823 0 R
+/First 1831 0 R
+/Last 1839 0 R
+/Count -3
+>> endobj
+1823 0 obj <<
+/Title 1824 0 R
+/A 1821 0 R
+/Parent 1819 0 R
+/Next 1827 0 R
+>> endobj
+1819 0 obj <<
+/Title 1820 0 R
+/A 1817 0 R
+/Parent 195 0 R
+/Prev 1667 0 R
+/Next 1843 0 R
+/First 1823 0 R
+/Last 1827 0 R
+/Count -2
+>> endobj
+1815 0 obj <<
+/Title 1816 0 R
+/A 1813 0 R
+/Parent 1755 0 R
+/Prev 1811 0 R
+>> endobj
+1811 0 obj <<
+/Title 1812 0 R
+/A 1809 0 R
+/Parent 1755 0 R
+/Prev 1807 0 R
+/Next 1815 0 R
+>> endobj
+1807 0 obj <<
+/Title 1808 0 R
+/A 1805 0 R
+/Parent 1755 0 R
+/Prev 1803 0 R
+/Next 1811 0 R
+>> endobj
+1803 0 obj <<
+/Title 1804 0 R
+/A 1801 0 R
+/Parent 1755 0 R
+/Prev 1799 0 R
+/Next 1807 0 R
+>> endobj
+1799 0 obj <<
+/Title 1800 0 R
+/A 1797 0 R
+/Parent 1755 0 R
+/Prev 1795 0 R
+/Next 1803 0 R
+>> endobj
+1795 0 obj <<
+/Title 1796 0 R
+/A 1793 0 R
+/Parent 1755 0 R
+/Prev 1791 0 R
+/Next 1799 0 R
+>> endobj
+1791 0 obj <<
+/Title 1792 0 R
+/A 1789 0 R
+/Parent 1755 0 R
+/Prev 1787 0 R
+/Next 1795 0 R
+>> endobj
+1787 0 obj <<
+/Title 1788 0 R
+/A 1785 0 R
+/Parent 1755 0 R
+/Prev 1783 0 R
+/Next 1791 0 R
+>> endobj
+1783 0 obj <<
+/Title 1784 0 R
+/A 1781 0 R
+/Parent 1755 0 R
+/Prev 1779 0 R
+/Next 1787 0 R
+>> endobj
+1779 0 obj <<
+/Title 1780 0 R
+/A 1777 0 R
+/Parent 1755 0 R
+/Prev 1775 0 R
+/Next 1783 0 R
+>> endobj
+1775 0 obj <<
+/Title 1776 0 R
+/A 1773 0 R
+/Parent 1755 0 R
+/Prev 1771 0 R
+/Next 1779 0 R
+>> endobj
+1771 0 obj <<
+/Title 1772 0 R
+/A 1769 0 R
+/Parent 1755 0 R
+/Prev 1767 0 R
+/Next 1775 0 R
+>> endobj
+1767 0 obj <<
+/Title 1768 0 R
+/A 1765 0 R
+/Parent 1755 0 R
+/Prev 1763 0 R
+/Next 1771 0 R
+>> endobj
+1763 0 obj <<
+/Title 1764 0 R
+/A 1761 0 R
+/Parent 1755 0 R
+/Prev 1759 0 R
+/Next 1767 0 R
+>> endobj
+1759 0 obj <<
+/Title 1760 0 R
+/A 1757 0 R
+/Parent 1755 0 R
+/Next 1763 0 R
+>> endobj
+1755 0 obj <<
+/Title 1756 0 R
+/A 1753 0 R
+/Parent 1667 0 R
+/Prev 1683 0 R
+/First 1759 0 R
+/Last 1815 0 R
+/Count -15
+>> endobj
+1751 0 obj <<
+/Title 1752 0 R
+/A 1749 0 R
+/Parent 1683 0 R
+/Prev 1747 0 R
+>> endobj
+1747 0 obj <<
+/Title 1748 0 R
+/A 1745 0 R
+/Parent 1683 0 R
+/Prev 1743 0 R
+/Next 1751 0 R
+>> endobj
+1743 0 obj <<
+/Title 1744 0 R
+/A 1741 0 R
+/Parent 1683 0 R
+/Prev 1739 0 R
+/Next 1747 0 R
+>> endobj
+1739 0 obj <<
+/Title 1740 0 R
+/A 1737 0 R
+/Parent 1683 0 R
+/Prev 1735 0 R
+/Next 1743 0 R
+>> endobj
+1735 0 obj <<
+/Title 1736 0 R
+/A 1733 0 R
+/Parent 1683 0 R
+/Prev 1731 0 R
+/Next 1739 0 R
+>> endobj
+1731 0 obj <<
+/Title 1732 0 R
+/A 1729 0 R
+/Parent 1683 0 R
+/Prev 1727 0 R
+/Next 1735 0 R
+>> endobj
+1727 0 obj <<
+/Title 1728 0 R
+/A 1725 0 R
+/Parent 1683 0 R
+/Prev 1723 0 R
+/Next 1731 0 R
+>> endobj
+1723 0 obj <<
+/Title 1724 0 R
+/A 1721 0 R
+/Parent 1683 0 R
+/Prev 1719 0 R
+/Next 1727 0 R
+>> endobj
+1719 0 obj <<
+/Title 1720 0 R
+/A 1717 0 R
+/Parent 1683 0 R
+/Prev 1715 0 R
+/Next 1723 0 R
+>> endobj
+1715 0 obj <<
+/Title 1716 0 R
+/A 1713 0 R
+/Parent 1683 0 R
+/Prev 1711 0 R
+/Next 1719 0 R
+>> endobj
+1711 0 obj <<
+/Title 1712 0 R
+/A 1709 0 R
+/Parent 1683 0 R
+/Prev 1707 0 R
+/Next 1715 0 R
+>> endobj
+1707 0 obj <<
+/Title 1708 0 R
+/A 1705 0 R
+/Parent 1683 0 R
+/Prev 1703 0 R
+/Next 1711 0 R
+>> endobj
+1703 0 obj <<
+/Title 1704 0 R
+/A 1701 0 R
+/Parent 1683 0 R
+/Prev 1699 0 R
+/Next 1707 0 R
+>> endobj
+1699 0 obj <<
+/Title 1700 0 R
+/A 1697 0 R
+/Parent 1683 0 R
+/Prev 1695 0 R
+/Next 1703 0 R
+>> endobj
+1695 0 obj <<
+/Title 1696 0 R
+/A 1693 0 R
+/Parent 1683 0 R
+/Prev 1691 0 R
+/Next 1699 0 R
+>> endobj
+1691 0 obj <<
+/Title 1692 0 R
+/A 1689 0 R
+/Parent 1683 0 R
+/Prev 1687 0 R
+/Next 1695 0 R
+>> endobj
+1687 0 obj <<
+/Title 1688 0 R
+/A 1685 0 R
+/Parent 1683 0 R
+/Next 1691 0 R
+>> endobj
+1683 0 obj <<
+/Title 1684 0 R
+/A 1681 0 R
+/Parent 1667 0 R
+/Prev 1675 0 R
+/Next 1755 0 R
+/First 1687 0 R
+/Last 1751 0 R
+/Count -17
+>> endobj
+1679 0 obj <<
+/Title 1680 0 R
+/A 1677 0 R
+/Parent 1675 0 R
+>> endobj
+1675 0 obj <<
+/Title 1676 0 R
+/A 1673 0 R
+/Parent 1667 0 R
+/Prev 1671 0 R
+/Next 1683 0 R
+/First 1679 0 R
+/Last 1679 0 R
+/Count -1
+>> endobj
+1671 0 obj <<
+/Title 1672 0 R
+/A 1669 0 R
+/Parent 1667 0 R
+/Next 1675 0 R
+>> endobj
+1667 0 obj <<
+/Title 1668 0 R
+/A 1665 0 R
+/Parent 195 0 R
+/Prev 1639 0 R
+/Next 1819 0 R
+/First 1671 0 R
+/Last 1755 0 R
+/Count -4
+>> endobj
+1663 0 obj <<
+/Title 1664 0 R
+/A 1661 0 R
+/Parent 1655 0 R
+/Prev 1659 0 R
+>> endobj
+1659 0 obj <<
+/Title 1660 0 R
+/A 1657 0 R
+/Parent 1655 0 R
+/Next 1663 0 R
+>> endobj
+1655 0 obj <<
+/Title 1656 0 R
+/A 1653 0 R
+/Parent 1639 0 R
+/Prev 1647 0 R
+/First 1659 0 R
+/Last 1663 0 R
+/Count -2
+>> endobj
+1651 0 obj <<
+/Title 1652 0 R
+/A 1649 0 R
+/Parent 1647 0 R
+>> endobj
+1647 0 obj <<
+/Title 1648 0 R
+/A 1645 0 R
+/Parent 1639 0 R
+/Prev 1643 0 R
+/Next 1655 0 R
+/First 1651 0 R
+/Last 1651 0 R
+/Count -1
+>> endobj
+1643 0 obj <<
+/Title 1644 0 R
+/A 1641 0 R
+/Parent 1639 0 R
+/Next 1647 0 R
+>> endobj
+1639 0 obj <<
+/Title 1640 0 R
+/A 1637 0 R
+/Parent 195 0 R
+/Prev 1599 0 R
+/Next 1667 0 R
+/First 1643 0 R
+/Last 1655 0 R
+/Count -3
+>> endobj
+1635 0 obj <<
+/Title 1636 0 R
+/A 1633 0 R
+/Parent 1631 0 R
+>> endobj
+1631 0 obj <<
+/Title 1632 0 R
+/A 1629 0 R
+/Parent 1599 0 R
+/Prev 1619 0 R
+/First 1635 0 R
+/Last 1635 0 R
+/Count -1
+>> endobj
+1627 0 obj <<
+/Title 1628 0 R
+/A 1625 0 R
+/Parent 1619 0 R
+/Prev 1623 0 R
+>> endobj
+1623 0 obj <<
+/Title 1624 0 R
+/A 1621 0 R
+/Parent 1619 0 R
+/Next 1627 0 R
+>> endobj
+1619 0 obj <<
+/Title 1620 0 R
+/A 1617 0 R
+/Parent 1599 0 R
+/Prev 1607 0 R
+/Next 1631 0 R
+/First 1623 0 R
+/Last 1627 0 R
+/Count -2
+>> endobj
+1615 0 obj <<
+/Title 1616 0 R
+/A 1613 0 R
+/Parent 1607 0 R
+/Prev 1611 0 R
+>> endobj
+1611 0 obj <<
+/Title 1612 0 R
+/A 1609 0 R
+/Parent 1607 0 R
+/Next 1615 0 R
+>> endobj
+1607 0 obj <<
+/Title 1608 0 R
+/A 1605 0 R
+/Parent 1599 0 R
+/Prev 1603 0 R
+/Next 1619 0 R
+/First 1611 0 R
+/Last 1615 0 R
+/Count -2
+>> endobj
+1603 0 obj <<
+/Title 1604 0 R
+/A 1601 0 R
+/Parent 1599 0 R
+/Next 1607 0 R
+>> endobj
+1599 0 obj <<
+/Title 1600 0 R
+/A 1597 0 R
+/Parent 195 0 R
+/Prev 1571 0 R
+/Next 1639 0 R
+/First 1603 0 R
+/Last 1631 0 R
+/Count -4
+>> endobj
+1595 0 obj <<
+/Title 1596 0 R
+/A 1593 0 R
+/Parent 1591 0 R
+>> endobj
+1591 0 obj <<
+/Title 1592 0 R
+/A 1589 0 R
+/Parent 1571 0 R
+/Prev 1579 0 R
+/First 1595 0 R
+/Last 1595 0 R
+/Count -1
+>> endobj
+1587 0 obj <<
+/Title 1588 0 R
+/A 1585 0 R
+/Parent 1579 0 R
+/Prev 1583 0 R
+>> endobj
+1583 0 obj <<
+/Title 1584 0 R
+/A 1581 0 R
+/Parent 1579 0 R
+/Next 1587 0 R
+>> endobj
+1579 0 obj <<
+/Title 1580 0 R
+/A 1577 0 R
+/Parent 1571 0 R
+/Prev 1575 0 R
+/Next 1591 0 R
+/First 1583 0 R
+/Last 1587 0 R
+/Count -2
+>> endobj
+1575 0 obj <<
+/Title 1576 0 R
+/A 1573 0 R
+/Parent 1571 0 R
+/Next 1579 0 R
+>> endobj
+1571 0 obj <<
+/Title 1572 0 R
+/A 1569 0 R
+/Parent 195 0 R
+/Prev 1499 0 R
+/Next 1599 0 R
+/First 1575 0 R
+/Last 1591 0 R
+/Count -3
+>> endobj
+1567 0 obj <<
+/Title 1568 0 R
+/A 1565 0 R
+/Parent 1551 0 R
+/Prev 1563 0 R
+>> endobj
+1563 0 obj <<
+/Title 1564 0 R
+/A 1561 0 R
+/Parent 1551 0 R
+/Prev 1559 0 R
+/Next 1567 0 R
+>> endobj
+1559 0 obj <<
+/Title 1560 0 R
+/A 1557 0 R
+/Parent 1551 0 R
+/Prev 1555 0 R
+/Next 1563 0 R
+>> endobj
+1555 0 obj <<
+/Title 1556 0 R
+/A 1553 0 R
+/Parent 1551 0 R
+/Next 1559 0 R
+>> endobj
+1551 0 obj <<
+/Title 1552 0 R
+/A 1549 0 R
+/Parent 1499 0 R
+/Prev 1519 0 R
+/First 1555 0 R
+/Last 1567 0 R
+/Count -4
+>> endobj
+1547 0 obj <<
+/Title 1548 0 R
+/A 1545 0 R
+/Parent 1519 0 R
+/Prev 1543 0 R
+>> endobj
+1543 0 obj <<
+/Title 1544 0 R
+/A 1541 0 R
+/Parent 1519 0 R
+/Prev 1539 0 R
+/Next 1547 0 R
+>> endobj
+1539 0 obj <<
+/Title 1540 0 R
+/A 1537 0 R
+/Parent 1519 0 R
+/Prev 1535 0 R
+/Next 1543 0 R
+>> endobj
+1535 0 obj <<
+/Title 1536 0 R
+/A 1533 0 R
+/Parent 1519 0 R
+/Prev 1531 0 R
+/Next 1539 0 R
+>> endobj
+1531 0 obj <<
+/Title 1532 0 R
+/A 1529 0 R
+/Parent 1519 0 R
+/Prev 1527 0 R
+/Next 1535 0 R
+>> endobj
+1527 0 obj <<
+/Title 1528 0 R
+/A 1525 0 R
+/Parent 1519 0 R
+/Prev 1523 0 R
+/Next 1531 0 R
+>> endobj
+1523 0 obj <<
+/Title 1524 0 R
+/A 1521 0 R
+/Parent 1519 0 R
+/Next 1527 0 R
+>> endobj
+1519 0 obj <<
+/Title 1520 0 R
+/A 1517 0 R
+/Parent 1499 0 R
+/Prev 1507 0 R
+/Next 1551 0 R
+/First 1523 0 R
+/Last 1547 0 R
+/Count -7
+>> endobj
+1515 0 obj <<
+/Title 1516 0 R
+/A 1513 0 R
+/Parent 1507 0 R
+/Prev 1511 0 R
+>> endobj
+1511 0 obj <<
+/Title 1512 0 R
+/A 1509 0 R
+/Parent 1507 0 R
+/Next 1515 0 R
+>> endobj
+1507 0 obj <<
+/Title 1508 0 R
+/A 1505 0 R
+/Parent 1499 0 R
+/Prev 1503 0 R
+/Next 1519 0 R
+/First 1511 0 R
+/Last 1515 0 R
+/Count -2
+>> endobj
+1503 0 obj <<
+/Title 1504 0 R
+/A 1501 0 R
+/Parent 1499 0 R
+/Next 1507 0 R
+>> endobj
+1499 0 obj <<
+/Title 1500 0 R
+/A 1497 0 R
+/Parent 195 0 R
+/Prev 1475 0 R
+/Next 1571 0 R
+/First 1503 0 R
+/Last 1551 0 R
+/Count -4
+>> endobj
+1495 0 obj <<
+/Title 1496 0 R
+/A 1493 0 R
+/Parent 1483 0 R
+/Prev 1491 0 R
+>> endobj
+1491 0 obj <<
+/Title 1492 0 R
+/A 1489 0 R
+/Parent 1483 0 R
+/Prev 1487 0 R
+/Next 1495 0 R
+>> endobj
+1487 0 obj <<
+/Title 1488 0 R
+/A 1485 0 R
+/Parent 1483 0 R
+/Next 1491 0 R
+>> endobj
+1483 0 obj <<
+/Title 1484 0 R
+/A 1481 0 R
+/Parent 1475 0 R
+/Prev 1479 0 R
+/First 1487 0 R
+/Last 1495 0 R
+/Count -3
+>> endobj
+1479 0 obj <<
+/Title 1480 0 R
+/A 1477 0 R
+/Parent 1475 0 R
+/Next 1483 0 R
+>> endobj
+1475 0 obj <<
+/Title 1476 0 R
+/A 1473 0 R
+/Parent 195 0 R
+/Prev 1419 0 R
+/Next 1499 0 R
+/First 1479 0 R
+/Last 1483 0 R
+/Count -2
+>> endobj
+1471 0 obj <<
+/Title 1472 0 R
+/A 1469 0 R
+/Parent 1463 0 R
+/Prev 1467 0 R
+>> endobj
+1467 0 obj <<
+/Title 1468 0 R
+/A 1465 0 R
+/Parent 1463 0 R
+/Next 1471 0 R
+>> endobj
+1463 0 obj <<
+/Title 1464 0 R
+/A 1461 0 R
+/Parent 1419 0 R
+/Prev 1439 0 R
+/First 1467 0 R
+/Last 1471 0 R
+/Count -2
+>> endobj
+1459 0 obj <<
+/Title 1460 0 R
+/A 1457 0 R
+/Parent 1439 0 R
+/Prev 1455 0 R
+>> endobj
+1455 0 obj <<
+/Title 1456 0 R
+/A 1453 0 R
+/Parent 1439 0 R
+/Prev 1451 0 R
+/Next 1459 0 R
+>> endobj
+1451 0 obj <<
+/Title 1452 0 R
+/A 1449 0 R
+/Parent 1439 0 R
+/Prev 1447 0 R
+/Next 1455 0 R
+>> endobj
+1447 0 obj <<
+/Title 1448 0 R
+/A 1445 0 R
+/Parent 1439 0 R
+/Prev 1443 0 R
+/Next 1451 0 R
+>> endobj
+1443 0 obj <<
+/Title 1444 0 R
+/A 1441 0 R
+/Parent 1439 0 R
+/Next 1447 0 R
+>> endobj
+1439 0 obj <<
+/Title 1440 0 R
+/A 1437 0 R
+/Parent 1419 0 R
+/Prev 1427 0 R
+/Next 1463 0 R
+/First 1443 0 R
+/Last 1459 0 R
+/Count -5
+>> endobj
+1435 0 obj <<
+/Title 1436 0 R
+/A 1433 0 R
+/Parent 1427 0 R
+/Prev 1431 0 R
+>> endobj
+1431 0 obj <<
+/Title 1432 0 R
+/A 1429 0 R
+/Parent 1427 0 R
+/Next 1435 0 R
+>> endobj
+1427 0 obj <<
+/Title 1428 0 R
+/A 1425 0 R
+/Parent 1419 0 R
+/Prev 1423 0 R
+/Next 1439 0 R
+/First 1431 0 R
+/Last 1435 0 R
+/Count -2
+>> endobj
+1423 0 obj <<
+/Title 1424 0 R
+/A 1421 0 R
+/Parent 1419 0 R
+/Next 1427 0 R
+>> endobj
+1419 0 obj <<
+/Title 1420 0 R
+/A 1417 0 R
+/Parent 195 0 R
+/Prev 1347 0 R
+/Next 1475 0 R
+/First 1423 0 R
+/Last 1463 0 R
+/Count -4
+>> endobj
+1415 0 obj <<
+/Title 1416 0 R
+/A 1413 0 R
+/Parent 1399 0 R
+/Prev 1411 0 R
+>> endobj
+1411 0 obj <<
+/Title 1412 0 R
+/A 1409 0 R
+/Parent 1399 0 R
+/Prev 1407 0 R
+/Next 1415 0 R
+>> endobj
+1407 0 obj <<
+/Title 1408 0 R
+/A 1405 0 R
+/Parent 1399 0 R
+/Prev 1403 0 R
+/Next 1411 0 R
+>> endobj
+1403 0 obj <<
+/Title 1404 0 R
+/A 1401 0 R
+/Parent 1399 0 R
+/Next 1407 0 R
+>> endobj
+1399 0 obj <<
+/Title 1400 0 R
+/A 1397 0 R
+/Parent 1347 0 R
+/Prev 1363 0 R
+/First 1403 0 R
+/Last 1415 0 R
+/Count -4
+>> endobj
+1395 0 obj <<
+/Title 1396 0 R
+/A 1393 0 R
+/Parent 1363 0 R
+/Prev 1391 0 R
+>> endobj
+1391 0 obj <<
+/Title 1392 0 R
+/A 1389 0 R
+/Parent 1363 0 R
+/Prev 1387 0 R
+/Next 1395 0 R
+>> endobj
+1387 0 obj <<
+/Title 1388 0 R
+/A 1385 0 R
+/Parent 1363 0 R
+/Prev 1383 0 R
+/Next 1391 0 R
+>> endobj
+1383 0 obj <<
+/Title 1384 0 R
+/A 1381 0 R
+/Parent 1363 0 R
+/Prev 1379 0 R
+/Next 1387 0 R
+>> endobj
+1379 0 obj <<
+/Title 1380 0 R
+/A 1377 0 R
+/Parent 1363 0 R
+/Prev 1375 0 R
+/Next 1383 0 R
+>> endobj
+1375 0 obj <<
+/Title 1376 0 R
+/A 1373 0 R
+/Parent 1363 0 R
+/Prev 1371 0 R
+/Next 1379 0 R
+>> endobj
+1371 0 obj <<
+/Title 1372 0 R
+/A 1369 0 R
+/Parent 1363 0 R
+/Prev 1367 0 R
+/Next 1375 0 R
+>> endobj
+1367 0 obj <<
+/Title 1368 0 R
+/A 1365 0 R
+/Parent 1363 0 R
+/Next 1371 0 R
+>> endobj
+1363 0 obj <<
+/Title 1364 0 R
+/A 1361 0 R
+/Parent 1347 0 R
+/Prev 1355 0 R
+/Next 1399 0 R
+/First 1367 0 R
+/Last 1395 0 R
+/Count -8
+>> endobj
+1359 0 obj <<
+/Title 1360 0 R
+/A 1357 0 R
+/Parent 1355 0 R
+>> endobj
+1355 0 obj <<
+/Title 1356 0 R
+/A 1353 0 R
+/Parent 1347 0 R
+/Prev 1351 0 R
+/Next 1363 0 R
+/First 1359 0 R
+/Last 1359 0 R
+/Count -1
+>> endobj
+1351 0 obj <<
+/Title 1352 0 R
+/A 1349 0 R
+/Parent 1347 0 R
+/Next 1355 0 R
+>> endobj
+1347 0 obj <<
+/Title 1348 0 R
+/A 1345 0 R
+/Parent 195 0 R
+/Prev 1331 0 R
+/Next 1419 0 R
+/First 1351 0 R
+/Last 1399 0 R
+/Count -4
+>> endobj
+1343 0 obj <<
+/Title 1344 0 R
+/A 1341 0 R
+/Parent 1339 0 R
+>> endobj
+1339 0 obj <<
+/Title 1340 0 R
+/A 1337 0 R
+/Parent 1331 0 R
+/Prev 1335 0 R
+/First 1343 0 R
+/Last 1343 0 R
+/Count -1
+>> endobj
+1335 0 obj <<
+/Title 1336 0 R
+/A 1333 0 R
+/Parent 1331 0 R
+/Next 1339 0 R
+>> endobj
+1331 0 obj <<
+/Title 1332 0 R
+/A 1329 0 R
+/Parent 195 0 R
+/Prev 1315 0 R
+/Next 1347 0 R
+/First 1335 0 R
+/Last 1339 0 R
+/Count -2
+>> endobj
+1327 0 obj <<
+/Title 1328 0 R
+/A 1325 0 R
+/Parent 1323 0 R
+>> endobj
+1323 0 obj <<
+/Title 1324 0 R
+/A 1321 0 R
+/Parent 1315 0 R
+/Prev 1319 0 R
+/First 1327 0 R
+/Last 1327 0 R
+/Count -1
+>> endobj
+1319 0 obj <<
+/Title 1320 0 R
+/A 1317 0 R
+/Parent 1315 0 R
+/Next 1323 0 R
+>> endobj
+1315 0 obj <<
+/Title 1316 0 R
+/A 1313 0 R
+/Parent 195 0 R
+/Prev 1299 0 R
+/Next 1331 0 R
+/First 1319 0 R
+/Last 1323 0 R
+/Count -2
+>> endobj
+1311 0 obj <<
+/Title 1312 0 R
+/A 1309 0 R
+/Parent 1307 0 R
+>> endobj
+1307 0 obj <<
+/Title 1308 0 R
+/A 1305 0 R
+/Parent 1299 0 R
+/Prev 1303 0 R
+/First 1311 0 R
+/Last 1311 0 R
+/Count -1
+>> endobj
+1303 0 obj <<
+/Title 1304 0 R
+/A 1301 0 R
+/Parent 1299 0 R
+/Next 1307 0 R
+>> endobj
+1299 0 obj <<
+/Title 1300 0 R
+/A 1297 0 R
+/Parent 195 0 R
+/Prev 1283 0 R
+/Next 1315 0 R
+/First 1303 0 R
+/Last 1307 0 R
+/Count -2
+>> endobj
+1295 0 obj <<
+/Title 1296 0 R
+/A 1293 0 R
+/Parent 1291 0 R
+>> endobj
+1291 0 obj <<
+/Title 1292 0 R
+/A 1289 0 R
+/Parent 1283 0 R
+/Prev 1287 0 R
+/First 1295 0 R
+/Last 1295 0 R
+/Count -1
+>> endobj
+1287 0 obj <<
+/Title 1288 0 R
+/A 1285 0 R
+/Parent 1283 0 R
+/Next 1291 0 R
+>> endobj
+1283 0 obj <<
+/Title 1284 0 R
+/A 1281 0 R
+/Parent 195 0 R
+/Prev 1267 0 R
+/Next 1299 0 R
+/First 1287 0 R
+/Last 1291 0 R
+/Count -2
+>> endobj
+1279 0 obj <<
+/Title 1280 0 R
+/A 1277 0 R
+/Parent 1275 0 R
+>> endobj
+1275 0 obj <<
+/Title 1276 0 R
+/A 1273 0 R
+/Parent 1267 0 R
+/Prev 1271 0 R
+/First 1279 0 R
+/Last 1279 0 R
+/Count -1
+>> endobj
+1271 0 obj <<
+/Title 1272 0 R
+/A 1269 0 R
+/Parent 1267 0 R
+/Next 1275 0 R
+>> endobj
+1267 0 obj <<
+/Title 1268 0 R
+/A 1265 0 R
+/Parent 195 0 R
+/Prev 1251 0 R
+/Next 1283 0 R
+/First 1271 0 R
+/Last 1275 0 R
+/Count -2
+>> endobj
+1263 0 obj <<
+/Title 1264 0 R
+/A 1261 0 R
+/Parent 1259 0 R
+>> endobj
+1259 0 obj <<
+/Title 1260 0 R
+/A 1257 0 R
+/Parent 1251 0 R
+/Prev 1255 0 R
+/First 1263 0 R
+/Last 1263 0 R
+/Count -1
+>> endobj
+1255 0 obj <<
+/Title 1256 0 R
+/A 1253 0 R
+/Parent 1251 0 R
+/Next 1259 0 R
+>> endobj
+1251 0 obj <<
+/Title 1252 0 R
+/A 1249 0 R
+/Parent 195 0 R
+/Prev 1235 0 R
+/Next 1267 0 R
+/First 1255 0 R
+/Last 1259 0 R
+/Count -2
+>> endobj
+1247 0 obj <<
+/Title 1248 0 R
+/A 1245 0 R
+/Parent 1243 0 R
+>> endobj
+1243 0 obj <<
+/Title 1244 0 R
+/A 1241 0 R
+/Parent 1235 0 R
+/Prev 1239 0 R
+/First 1247 0 R
+/Last 1247 0 R
+/Count -1
+>> endobj
+1239 0 obj <<
+/Title 1240 0 R
+/A 1237 0 R
+/Parent 1235 0 R
+/Next 1243 0 R
+>> endobj
+1235 0 obj <<
+/Title 1236 0 R
+/A 1233 0 R
+/Parent 195 0 R
+/Prev 1219 0 R
+/Next 1251 0 R
+/First 1239 0 R
+/Last 1243 0 R
+/Count -2
+>> endobj
+1231 0 obj <<
+/Title 1232 0 R
+/A 1229 0 R
+/Parent 1227 0 R
+>> endobj
+1227 0 obj <<
+/Title 1228 0 R
+/A 1225 0 R
+/Parent 1219 0 R
+/Prev 1223 0 R
+/First 1231 0 R
+/Last 1231 0 R
+/Count -1
+>> endobj
+1223 0 obj <<
+/Title 1224 0 R
+/A 1221 0 R
+/Parent 1219 0 R
+/Next 1227 0 R
+>> endobj
+1219 0 obj <<
+/Title 1220 0 R
+/A 1217 0 R
+/Parent 195 0 R
+/Prev 1203 0 R
+/Next 1235 0 R
+/First 1223 0 R
+/Last 1227 0 R
+/Count -2
+>> endobj
+1215 0 obj <<
+/Title 1216 0 R
+/A 1213 0 R
+/Parent 1211 0 R
+>> endobj
+1211 0 obj <<
+/Title 1212 0 R
+/A 1209 0 R
+/Parent 1203 0 R
+/Prev 1207 0 R
+/First 1215 0 R
+/Last 1215 0 R
+/Count -1
+>> endobj
+1207 0 obj <<
+/Title 1208 0 R
+/A 1205 0 R
+/Parent 1203 0 R
+/Next 1211 0 R
+>> endobj
+1203 0 obj <<
+/Title 1204 0 R
+/A 1201 0 R
+/Parent 195 0 R
+/Prev 1187 0 R
+/Next 1219 0 R
+/First 1207 0 R
+/Last 1211 0 R
+/Count -2
+>> endobj
+1199 0 obj <<
+/Title 1200 0 R
+/A 1197 0 R
+/Parent 1195 0 R
+>> endobj
+1195 0 obj <<
+/Title 1196 0 R
+/A 1193 0 R
+/Parent 1187 0 R
+/Prev 1191 0 R
+/First 1199 0 R
+/Last 1199 0 R
+/Count -1
+>> endobj
+1191 0 obj <<
+/Title 1192 0 R
+/A 1189 0 R
+/Parent 1187 0 R
+/Next 1195 0 R
+>> endobj
+1187 0 obj <<
+/Title 1188 0 R
+/A 1185 0 R
+/Parent 195 0 R
+/Prev 1171 0 R
+/Next 1203 0 R
+/First 1191 0 R
+/Last 1195 0 R
+/Count -2
+>> endobj
+1183 0 obj <<
+/Title 1184 0 R
+/A 1181 0 R
+/Parent 1179 0 R
+>> endobj
+1179 0 obj <<
+/Title 1180 0 R
+/A 1177 0 R
+/Parent 1171 0 R
+/Prev 1175 0 R
+/First 1183 0 R
+/Last 1183 0 R
+/Count -1
+>> endobj
+1175 0 obj <<
+/Title 1176 0 R
+/A 1173 0 R
+/Parent 1171 0 R
+/Next 1179 0 R
+>> endobj
+1171 0 obj <<
+/Title 1172 0 R
+/A 1169 0 R
+/Parent 195 0 R
+/Prev 1155 0 R
+/Next 1187 0 R
+/First 1175 0 R
+/Last 1179 0 R
+/Count -2
+>> endobj
+1167 0 obj <<
+/Title 1168 0 R
+/A 1165 0 R
+/Parent 1163 0 R
+>> endobj
+1163 0 obj <<
+/Title 1164 0 R
+/A 1161 0 R
+/Parent 1155 0 R
+/Prev 1159 0 R
+/First 1167 0 R
+/Last 1167 0 R
+/Count -1
+>> endobj
+1159 0 obj <<
+/Title 1160 0 R
+/A 1157 0 R
+/Parent 1155 0 R
+/Next 1163 0 R
+>> endobj
+1155 0 obj <<
+/Title 1156 0 R
+/A 1153 0 R
+/Parent 195 0 R
+/Prev 1139 0 R
+/Next 1171 0 R
+/First 1159 0 R
+/Last 1163 0 R
+/Count -2
+>> endobj
+1151 0 obj <<
+/Title 1152 0 R
+/A 1149 0 R
+/Parent 1147 0 R
+>> endobj
+1147 0 obj <<
+/Title 1148 0 R
+/A 1145 0 R
+/Parent 1139 0 R
+/Prev 1143 0 R
+/First 1151 0 R
+/Last 1151 0 R
+/Count -1
+>> endobj
+1143 0 obj <<
+/Title 1144 0 R
+/A 1141 0 R
+/Parent 1139 0 R
+/Next 1147 0 R
+>> endobj
+1139 0 obj <<
+/Title 1140 0 R
+/A 1137 0 R
+/Parent 195 0 R
+/Prev 1123 0 R
+/Next 1155 0 R
+/First 1143 0 R
+/Last 1147 0 R
+/Count -2
+>> endobj
+1135 0 obj <<
+/Title 1136 0 R
+/A 1133 0 R
+/Parent 1131 0 R
+>> endobj
+1131 0 obj <<
+/Title 1132 0 R
+/A 1129 0 R
+/Parent 1123 0 R
+/Prev 1127 0 R
+/First 1135 0 R
+/Last 1135 0 R
+/Count -1
+>> endobj
+1127 0 obj <<
+/Title 1128 0 R
+/A 1125 0 R
+/Parent 1123 0 R
+/Next 1131 0 R
+>> endobj
+1123 0 obj <<
+/Title 1124 0 R
+/A 1121 0 R
+/Parent 195 0 R
+/Prev 1107 0 R
+/Next 1139 0 R
+/First 1127 0 R
+/Last 1131 0 R
+/Count -2
+>> endobj
+1119 0 obj <<
+/Title 1120 0 R
+/A 1117 0 R
+/Parent 1115 0 R
+>> endobj
+1115 0 obj <<
+/Title 1116 0 R
+/A 1113 0 R
+/Parent 1107 0 R
+/Prev 1111 0 R
+/First 1119 0 R
+/Last 1119 0 R
+/Count -1
+>> endobj
+1111 0 obj <<
+/Title 1112 0 R
+/A 1109 0 R
+/Parent 1107 0 R
+/Next 1115 0 R
+>> endobj
+1107 0 obj <<
+/Title 1108 0 R
+/A 1105 0 R
+/Parent 195 0 R
+/Prev 1091 0 R
+/Next 1123 0 R
+/First 1111 0 R
+/Last 1115 0 R
+/Count -2
+>> endobj
+1103 0 obj <<
+/Title 1104 0 R
+/A 1101 0 R
+/Parent 1099 0 R
+>> endobj
+1099 0 obj <<
+/Title 1100 0 R
+/A 1097 0 R
+/Parent 1091 0 R
+/Prev 1095 0 R
+/First 1103 0 R
+/Last 1103 0 R
+/Count -1
+>> endobj
+1095 0 obj <<
+/Title 1096 0 R
+/A 1093 0 R
+/Parent 1091 0 R
+/Next 1099 0 R
+>> endobj
+1091 0 obj <<
+/Title 1092 0 R
+/A 1089 0 R
+/Parent 195 0 R
+/Prev 1075 0 R
+/Next 1107 0 R
+/First 1095 0 R
+/Last 1099 0 R
+/Count -2
+>> endobj
+1087 0 obj <<
+/Title 1088 0 R
+/A 1085 0 R
+/Parent 1083 0 R
+>> endobj
+1083 0 obj <<
+/Title 1084 0 R
+/A 1081 0 R
+/Parent 1075 0 R
+/Prev 1079 0 R
+/First 1087 0 R
+/Last 1087 0 R
+/Count -1
+>> endobj
+1079 0 obj <<
+/Title 1080 0 R
+/A 1077 0 R
+/Parent 1075 0 R
+/Next 1083 0 R
+>> endobj
+1075 0 obj <<
+/Title 1076 0 R
+/A 1073 0 R
+/Parent 195 0 R
+/Prev 1059 0 R
+/Next 1091 0 R
+/First 1079 0 R
+/Last 1083 0 R
+/Count -2
+>> endobj
+1071 0 obj <<
+/Title 1072 0 R
+/A 1069 0 R
+/Parent 1067 0 R
+>> endobj
+1067 0 obj <<
+/Title 1068 0 R
+/A 1065 0 R
+/Parent 1059 0 R
+/Prev 1063 0 R
+/First 1071 0 R
+/Last 1071 0 R
+/Count -1
+>> endobj
+1063 0 obj <<
+/Title 1064 0 R
+/A 1061 0 R
+/Parent 1059 0 R
+/Next 1067 0 R
+>> endobj
+1059 0 obj <<
+/Title 1060 0 R
+/A 1057 0 R
+/Parent 195 0 R
+/Prev 1043 0 R
+/Next 1075 0 R
+/First 1063 0 R
+/Last 1067 0 R
+/Count -2
+>> endobj
+1055 0 obj <<
+/Title 1056 0 R
+/A 1053 0 R
+/Parent 1051 0 R
+>> endobj
+1051 0 obj <<
+/Title 1052 0 R
+/A 1049 0 R
+/Parent 1043 0 R
+/Prev 1047 0 R
+/First 1055 0 R
+/Last 1055 0 R
+/Count -1
+>> endobj
+1047 0 obj <<
+/Title 1048 0 R
+/A 1045 0 R
+/Parent 1043 0 R
+/Next 1051 0 R
+>> endobj
+1043 0 obj <<
+/Title 1044 0 R
+/A 1041 0 R
+/Parent 195 0 R
+/Prev 1027 0 R
+/Next 1059 0 R
+/First 1047 0 R
+/Last 1051 0 R
+/Count -2
+>> endobj
+1039 0 obj <<
+/Title 1040 0 R
+/A 1037 0 R
+/Parent 1035 0 R
+>> endobj
+1035 0 obj <<
+/Title 1036 0 R
+/A 1033 0 R
+/Parent 1027 0 R
+/Prev 1031 0 R
+/First 1039 0 R
+/Last 1039 0 R
+/Count -1
+>> endobj
+1031 0 obj <<
+/Title 1032 0 R
+/A 1029 0 R
+/Parent 1027 0 R
+/Next 1035 0 R
+>> endobj
+1027 0 obj <<
+/Title 1028 0 R
+/A 1025 0 R
+/Parent 195 0 R
+/Prev 1011 0 R
+/Next 1043 0 R
+/First 1031 0 R
+/Last 1035 0 R
+/Count -2
+>> endobj
+1023 0 obj <<
+/Title 1024 0 R
+/A 1021 0 R
+/Parent 1019 0 R
+>> endobj
+1019 0 obj <<
+/Title 1020 0 R
+/A 1017 0 R
+/Parent 1011 0 R
+/Prev 1015 0 R
+/First 1023 0 R
+/Last 1023 0 R
+/Count -1
+>> endobj
+1015 0 obj <<
+/Title 1016 0 R
+/A 1013 0 R
+/Parent 1011 0 R
+/Next 1019 0 R
+>> endobj
+1011 0 obj <<
+/Title 1012 0 R
+/A 1009 0 R
+/Parent 195 0 R
+/Prev 955 0 R
+/Next 1027 0 R
+/First 1015 0 R
+/Last 1019 0 R
+/Count -2
+>> endobj
+1007 0 obj <<
+/Title 1008 0 R
+/A 1005 0 R
+/Parent 999 0 R
+/Prev 1003 0 R
+>> endobj
+1003 0 obj <<
+/Title 1004 0 R
+/A 1001 0 R
+/Parent 999 0 R
+/Next 1007 0 R
+>> endobj
+999 0 obj <<
+/Title 1000 0 R
+/A 997 0 R
+/Parent 955 0 R
+/Prev 975 0 R
+/First 1003 0 R
+/Last 1007 0 R
+/Count -2
+>> endobj
+995 0 obj <<
+/Title 996 0 R
+/A 993 0 R
+/Parent 975 0 R
+/Prev 991 0 R
+>> endobj
+991 0 obj <<
+/Title 992 0 R
+/A 989 0 R
+/Parent 975 0 R
+/Prev 987 0 R
+/Next 995 0 R
+>> endobj
+987 0 obj <<
+/Title 988 0 R
+/A 985 0 R
+/Parent 975 0 R
+/Prev 983 0 R
+/Next 991 0 R
+>> endobj
+983 0 obj <<
+/Title 984 0 R
+/A 981 0 R
+/Parent 975 0 R
+/Prev 979 0 R
+/Next 987 0 R
+>> endobj
+979 0 obj <<
+/Title 980 0 R
+/A 977 0 R
+/Parent 975 0 R
+/Next 983 0 R
+>> endobj
+975 0 obj <<
+/Title 976 0 R
+/A 973 0 R
+/Parent 955 0 R
+/Prev 963 0 R
+/Next 999 0 R
+/First 979 0 R
+/Last 995 0 R
+/Count -5
+>> endobj
+971 0 obj <<
+/Title 972 0 R
+/A 969 0 R
+/Parent 963 0 R
+/Prev 967 0 R
+>> endobj
+967 0 obj <<
+/Title 968 0 R
+/A 965 0 R
+/Parent 963 0 R
+/Next 971 0 R
+>> endobj
+963 0 obj <<
+/Title 964 0 R
+/A 961 0 R
+/Parent 955 0 R
+/Prev 959 0 R
+/Next 975 0 R
+/First 967 0 R
+/Last 971 0 R
+/Count -2
+>> endobj
+959 0 obj <<
+/Title 960 0 R
+/A 957 0 R
+/Parent 955 0 R
+/Next 963 0 R
+>> endobj
+955 0 obj <<
+/Title 956 0 R
+/A 953 0 R
+/Parent 195 0 R
+/Prev 939 0 R
+/Next 1011 0 R
+/First 959 0 R
+/Last 999 0 R
+/Count -4
+>> endobj
+951 0 obj <<
+/Title 952 0 R
+/A 949 0 R
+/Parent 947 0 R
+>> endobj
+947 0 obj <<
+/Title 948 0 R
+/A 945 0 R
+/Parent 939 0 R
+/Prev 943 0 R
+/First 951 0 R
+/Last 951 0 R
+/Count -1
+>> endobj
+943 0 obj <<
+/Title 944 0 R
+/A 941 0 R
+/Parent 939 0 R
+/Next 947 0 R
+>> endobj
+939 0 obj <<
+/Title 940 0 R
+/A 937 0 R
+/Parent 195 0 R
+/Prev 919 0 R
+/Next 955 0 R
+/First 943 0 R
+/Last 947 0 R
+/Count -2
+>> endobj
+935 0 obj <<
+/Title 936 0 R
+/A 933 0 R
+/Parent 927 0 R
+/Prev 931 0 R
+>> endobj
+931 0 obj <<
+/Title 932 0 R
+/A 929 0 R
+/Parent 927 0 R
+/Next 935 0 R
+>> endobj
+927 0 obj <<
+/Title 928 0 R
+/A 925 0 R
+/Parent 919 0 R
+/Prev 923 0 R
+/First 931 0 R
+/Last 935 0 R
+/Count -2
+>> endobj
+923 0 obj <<
+/Title 924 0 R
+/A 921 0 R
+/Parent 919 0 R
+/Next 927 0 R
+>> endobj
+919 0 obj <<
+/Title 920 0 R
+/A 917 0 R
+/Parent 195 0 R
+/Prev 871 0 R
+/Next 939 0 R
+/First 923 0 R
+/Last 927 0 R
+/Count -2
+>> endobj
+915 0 obj <<
+/Title 916 0 R
+/A 913 0 R
+/Parent 879 0 R
+/Prev 911 0 R
+>> endobj
+911 0 obj <<
+/Title 912 0 R
+/A 909 0 R
+/Parent 879 0 R
+/Prev 907 0 R
+/Next 915 0 R
+>> endobj
+907 0 obj <<
+/Title 908 0 R
+/A 905 0 R
+/Parent 879 0 R
+/Prev 903 0 R
+/Next 911 0 R
+>> endobj
+903 0 obj <<
+/Title 904 0 R
+/A 901 0 R
+/Parent 879 0 R
+/Prev 899 0 R
+/Next 907 0 R
+>> endobj
+899 0 obj <<
+/Title 900 0 R
+/A 897 0 R
+/Parent 879 0 R
+/Prev 895 0 R
+/Next 903 0 R
+>> endobj
+895 0 obj <<
+/Title 896 0 R
+/A 893 0 R
+/Parent 879 0 R
+/Prev 891 0 R
+/Next 899 0 R
+>> endobj
+891 0 obj <<
+/Title 892 0 R
+/A 889 0 R
+/Parent 879 0 R
+/Prev 887 0 R
+/Next 895 0 R
+>> endobj
+887 0 obj <<
+/Title 888 0 R
+/A 885 0 R
+/Parent 879 0 R
+/Prev 883 0 R
+/Next 891 0 R
+>> endobj
+883 0 obj <<
+/Title 884 0 R
+/A 881 0 R
+/Parent 879 0 R
+/Next 887 0 R
+>> endobj
+879 0 obj <<
+/Title 880 0 R
+/A 877 0 R
+/Parent 871 0 R
+/Prev 875 0 R
+/First 883 0 R
+/Last 915 0 R
+/Count -9
+>> endobj
+875 0 obj <<
+/Title 876 0 R
+/A 873 0 R
+/Parent 871 0 R
+/Next 879 0 R
+>> endobj
+871 0 obj <<
+/Title 872 0 R
+/A 869 0 R
+/Parent 195 0 R
+/Prev 851 0 R
+/Next 919 0 R
+/First 875 0 R
+/Last 879 0 R
+/Count -2
+>> endobj
+867 0 obj <<
+/Title 868 0 R
+/A 865 0 R
+/Parent 859 0 R
+/Prev 863 0 R
+>> endobj
+863 0 obj <<
+/Title 864 0 R
+/A 861 0 R
+/Parent 859 0 R
+/Next 867 0 R
+>> endobj
+859 0 obj <<
+/Title 860 0 R
+/A 857 0 R
+/Parent 851 0 R
+/Prev 855 0 R
+/First 863 0 R
+/Last 867 0 R
+/Count -2
+>> endobj
+855 0 obj <<
+/Title 856 0 R
+/A 853 0 R
+/Parent 851 0 R
+/Next 859 0 R
+>> endobj
+851 0 obj <<
+/Title 852 0 R
+/A 849 0 R
+/Parent 195 0 R
+/Prev 803 0 R
+/Next 871 0 R
+/First 855 0 R
+/Last 859 0 R
+/Count -2
+>> endobj
+847 0 obj <<
+/Title 848 0 R
+/A 845 0 R
+/Parent 843 0 R
+>> endobj
+843 0 obj <<
+/Title 844 0 R
+/A 841 0 R
+/Parent 803 0 R
+/Prev 819 0 R
+/First 847 0 R
+/Last 847 0 R
+/Count -1
+>> endobj
+839 0 obj <<
+/Title 840 0 R
+/A 837 0 R
+/Parent 819 0 R
+/Prev 835 0 R
+>> endobj
+835 0 obj <<
+/Title 836 0 R
+/A 833 0 R
+/Parent 819 0 R
+/Prev 831 0 R
+/Next 839 0 R
+>> endobj
+831 0 obj <<
+/Title 832 0 R
+/A 829 0 R
+/Parent 819 0 R
+/Prev 827 0 R
+/Next 835 0 R
+>> endobj
+827 0 obj <<
+/Title 828 0 R
+/A 825 0 R
+/Parent 819 0 R
+/Prev 823 0 R
+/Next 831 0 R
+>> endobj
+823 0 obj <<
+/Title 824 0 R
+/A 821 0 R
+/Parent 819 0 R
+/Next 827 0 R
+>> endobj
+819 0 obj <<
+/Title 820 0 R
+/A 817 0 R
+/Parent 803 0 R
+/Prev 811 0 R
+/Next 843 0 R
+/First 823 0 R
+/Last 839 0 R
+/Count -5
+>> endobj
+815 0 obj <<
+/Title 816 0 R
+/A 813 0 R
+/Parent 811 0 R
+>> endobj
+811 0 obj <<
+/Title 812 0 R
+/A 809 0 R
+/Parent 803 0 R
+/Prev 807 0 R
+/Next 819 0 R
+/First 815 0 R
+/Last 815 0 R
+/Count -1
+>> endobj
+807 0 obj <<
+/Title 808 0 R
+/A 805 0 R
+/Parent 803 0 R
+/Next 811 0 R
+>> endobj
+803 0 obj <<
+/Title 804 0 R
+/A 801 0 R
+/Parent 195 0 R
+/Prev 779 0 R
+/Next 851 0 R
+/First 807 0 R
+/Last 843 0 R
+/Count -4
+>> endobj
+799 0 obj <<
+/Title 800 0 R
+/A 797 0 R
+/Parent 787 0 R
+/Prev 795 0 R
+>> endobj
+795 0 obj <<
+/Title 796 0 R
+/A 793 0 R
+/Parent 787 0 R
+/Prev 791 0 R
+/Next 799 0 R
+>> endobj
+791 0 obj <<
+/Title 792 0 R
+/A 789 0 R
+/Parent 787 0 R
+/Next 795 0 R
+>> endobj
+787 0 obj <<
+/Title 788 0 R
+/A 785 0 R
+/Parent 779 0 R
+/Prev 783 0 R
+/First 791 0 R
+/Last 799 0 R
+/Count -3
+>> endobj
+783 0 obj <<
+/Title 784 0 R
+/A 781 0 R
+/Parent 779 0 R
+/Next 787 0 R
+>> endobj
+779 0 obj <<
+/Title 780 0 R
+/A 777 0 R
+/Parent 195 0 R
+/Prev 759 0 R
+/Next 803 0 R
+/First 783 0 R
+/Last 787 0 R
+/Count -2
+>> endobj
+775 0 obj <<
+/Title 776 0 R
+/A 773 0 R
+/Parent 767 0 R
+/Prev 771 0 R
+>> endobj
+771 0 obj <<
+/Title 772 0 R
+/A 769 0 R
+/Parent 767 0 R
+/Next 775 0 R
+>> endobj
+767 0 obj <<
+/Title 768 0 R
+/A 765 0 R
+/Parent 759 0 R
+/Prev 763 0 R
+/First 771 0 R
+/Last 775 0 R
+/Count -2
+>> endobj
+763 0 obj <<
+/Title 764 0 R
+/A 761 0 R
+/Parent 759 0 R
+/Next 767 0 R
+>> endobj
+759 0 obj <<
+/Title 760 0 R
+/A 757 0 R
+/Parent 195 0 R
+/Prev 739 0 R
+/Next 779 0 R
+/First 763 0 R
+/Last 767 0 R
+/Count -2
+>> endobj
+755 0 obj <<
+/Title 756 0 R
+/A 753 0 R
+/Parent 747 0 R
+/Prev 751 0 R
+>> endobj
+751 0 obj <<
+/Title 752 0 R
+/A 749 0 R
+/Parent 747 0 R
+/Next 755 0 R
+>> endobj
+747 0 obj <<
+/Title 748 0 R
+/A 745 0 R
+/Parent 739 0 R
+/Prev 743 0 R
+/First 751 0 R
+/Last 755 0 R
+/Count -2
+>> endobj
+743 0 obj <<
+/Title 744 0 R
+/A 741 0 R
+/Parent 739 0 R
+/Next 747 0 R
+>> endobj
+739 0 obj <<
+/Title 740 0 R
+/A 737 0 R
+/Parent 195 0 R
+/Prev 523 0 R
+/Next 759 0 R
+/First 743 0 R
+/Last 747 0 R
+/Count -2
+>> endobj
+735 0 obj <<
+/Title 736 0 R
+/A 733 0 R
+/Parent 671 0 R
+/Prev 731 0 R
+>> endobj
+731 0 obj <<
+/Title 732 0 R
+/A 729 0 R
+/Parent 671 0 R
+/Prev 727 0 R
+/Next 735 0 R
+>> endobj
+727 0 obj <<
+/Title 728 0 R
+/A 725 0 R
+/Parent 671 0 R
+/Prev 723 0 R
+/Next 731 0 R
+>> endobj
+723 0 obj <<
+/Title 724 0 R
+/A 721 0 R
+/Parent 671 0 R
+/Prev 719 0 R
+/Next 727 0 R
+>> endobj
+719 0 obj <<
+/Title 720 0 R
+/A 717 0 R
+/Parent 671 0 R
+/Prev 715 0 R
+/Next 723 0 R
+>> endobj
+715 0 obj <<
+/Title 716 0 R
+/A 713 0 R
+/Parent 671 0 R
+/Prev 711 0 R
+/Next 719 0 R
+>> endobj
+711 0 obj <<
+/Title 712 0 R
+/A 709 0 R
+/Parent 671 0 R
+/Prev 707 0 R
+/Next 715 0 R
+>> endobj
+707 0 obj <<
+/Title 708 0 R
+/A 705 0 R
+/Parent 671 0 R
+/Prev 703 0 R
+/Next 711 0 R
+>> endobj
+703 0 obj <<
+/Title 704 0 R
+/A 701 0 R
+/Parent 671 0 R
+/Prev 699 0 R
+/Next 707 0 R
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 697 0 R
+/Parent 671 0 R
+/Prev 695 0 R
+/Next 703 0 R
+>> endobj
+695 0 obj <<
+/Title 696 0 R
+/A 693 0 R
+/Parent 671 0 R
+/Prev 691 0 R
+/Next 699 0 R
+>> endobj
+691 0 obj <<
+/Title 692 0 R
+/A 689 0 R
+/Parent 671 0 R
+/Prev 687 0 R
+/Next 695 0 R
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 685 0 R
+/Parent 671 0 R
+/Prev 683 0 R
+/Next 691 0 R
+>> endobj
+683 0 obj <<
+/Title 684 0 R
+/A 681 0 R
+/Parent 671 0 R
+/Prev 679 0 R
+/Next 687 0 R
+>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 671 0 R
+/Prev 675 0 R
+/Next 683 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 671 0 R
+/Next 679 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 523 0 R
+/Prev 659 0 R
+/First 675 0 R
+/Last 735 0 R
+/Count -16
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 659 0 R
+/Prev 663 0 R
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 659 0 R
+/Next 667 0 R
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 523 0 R
+/Prev 563 0 R
+/Next 671 0 R
+/First 663 0 R
+/Last 667 0 R
+/Count -2
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 563 0 R
+/Prev 651 0 R
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 563 0 R
+/Prev 647 0 R
+/Next 655 0 R
+>> endobj
+647 0 obj <<
+/Title 648 0 R
+/A 645 0 R
+/Parent 563 0 R
+/Prev 643 0 R
+/Next 651 0 R
+>> endobj
+643 0 obj <<
+/Title 644 0 R
+/A 641 0 R
+/Parent 563 0 R
+/Prev 639 0 R
+/Next 647 0 R
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 637 0 R
+/Parent 563 0 R
+/Prev 635 0 R
+/Next 643 0 R
+>> endobj
+635 0 obj <<
+/Title 636 0 R
+/A 633 0 R
+/Parent 563 0 R
+/Prev 631 0 R
+/Next 639 0 R
+>> endobj
+631 0 obj <<
+/Title 632 0 R
+/A 629 0 R
+/Parent 563 0 R
+/Prev 627 0 R
+/Next 635 0 R
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 625 0 R
+/Parent 563 0 R
+/Prev 623 0 R
+/Next 631 0 R
+>> endobj
+623 0 obj <<
+/Title 624 0 R
+/A 621 0 R
+/Parent 563 0 R
+/Prev 619 0 R
+/Next 627 0 R
+>> endobj
+619 0 obj <<
+/Title 620 0 R
+/A 617 0 R
+/Parent 563 0 R
+/Prev 615 0 R
+/Next 623 0 R
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 613 0 R
+/Parent 563 0 R
+/Prev 611 0 R
+/Next 619 0 R
+>> endobj
+611 0 obj <<
+/Title 612 0 R
+/A 609 0 R
+/Parent 563 0 R
+/Prev 607 0 R
+/Next 615 0 R
+>> endobj
+607 0 obj <<
+/Title 608 0 R
+/A 605 0 R
+/Parent 563 0 R
+/Prev 603 0 R
+/Next 611 0 R
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 601 0 R
+/Parent 563 0 R
+/Prev 599 0 R
+/Next 607 0 R
+>> endobj
+599 0 obj <<
+/Title 600 0 R
+/A 597 0 R
+/Parent 563 0 R
+/Prev 595 0 R
+/Next 603 0 R
+>> endobj
+595 0 obj <<
+/Title 596 0 R
+/A 593 0 R
+/Parent 563 0 R
+/Prev 591 0 R
+/Next 599 0 R
+>> endobj
+591 0 obj <<
+/Title 592 0 R
+/A 589 0 R
+/Parent 563 0 R
+/Prev 587 0 R
+/Next 595 0 R
+>> endobj
+587 0 obj <<
+/Title 588 0 R
+/A 585 0 R
+/Parent 563 0 R
+/Prev 583 0 R
+/Next 591 0 R
+>> endobj
+583 0 obj <<
+/Title 584 0 R
+/A 581 0 R
+/Parent 563 0 R
+/Prev 579 0 R
+/Next 587 0 R
+>> endobj
+579 0 obj <<
+/Title 580 0 R
+/A 577 0 R
+/Parent 563 0 R
+/Prev 575 0 R
+/Next 583 0 R
+>> endobj
+575 0 obj <<
+/Title 576 0 R
+/A 573 0 R
+/Parent 563 0 R
+/Prev 571 0 R
+/Next 579 0 R
+>> endobj
+571 0 obj <<
+/Title 572 0 R
+/A 569 0 R
+/Parent 563 0 R
+/Prev 567 0 R
+/Next 575 0 R
+>> endobj
+567 0 obj <<
+/Title 568 0 R
+/A 565 0 R
+/Parent 563 0 R
+/Next 571 0 R
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 523 0 R
+/Prev 551 0 R
+/Next 659 0 R
+/First 567 0 R
+/Last 655 0 R
+/Count -23
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 551 0 R
+/Prev 555 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 523 0 R
+/Prev 543 0 R
+/Next 563 0 R
+/First 555 0 R
+/Last 559 0 R
+/Count -2
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 543 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 523 0 R
+/Prev 531 0 R
+/Next 551 0 R
+/First 547 0 R
+/Last 547 0 R
+/Count -1
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 531 0 R
+/Prev 535 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 531 0 R
+/Next 539 0 R
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 523 0 R
+/Prev 527 0 R
+/Next 543 0 R
+/First 535 0 R
+/Last 539 0 R
+/Count -2
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 523 0 R
+/Next 531 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 195 0 R
+/Prev 499 0 R
+/Next 739 0 R
+/First 527 0 R
+/Last 671 0 R
+/Count -7
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 507 0 R
+/Prev 515 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 507 0 R
+/Prev 511 0 R
+/Next 519 0 R
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 507 0 R
+/Next 515 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 499 0 R
+/Prev 503 0 R
+/First 511 0 R
+/Last 519 0 R
+/Count -3
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 499 0 R
+/Next 507 0 R
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 195 0 R
+/Prev 467 0 R
+/Next 523 0 R
+/First 503 0 R
+/Last 507 0 R
+/Count -2
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 475 0 R
+/Prev 491 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 475 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 475 0 R
+/Prev 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 475 0 R
+/Prev 479 0 R
+/Next 487 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 467 0 R
+/Prev 471 0 R
+/First 479 0 R
+/Last 495 0 R
+/Count -5
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 467 0 R
+/Next 475 0 R
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 195 0 R
+/Prev 427 0 R
+/Next 499 0 R
+/First 471 0 R
+/Last 475 0 R
+/Count -2
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 435 0 R
+/Prev 459 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 435 0 R
+/Prev 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 435 0 R
+/Prev 451 0 R
+/Next 459 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 435 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 435 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 435 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 427 0 R
+/Prev 431 0 R
+/First 439 0 R
+/Last 463 0 R
+/Count -7
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 195 0 R
+/Prev 407 0 R
+/Next 467 0 R
+/First 431 0 R
+/Last 435 0 R
+/Count -2
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 415 0 R
+/Prev 419 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 415 0 R
+/Next 423 0 R
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 407 0 R
+/Prev 411 0 R
+/First 419 0 R
+/Last 423 0 R
+/Count -2
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 195 0 R
+/Prev 359 0 R
+/Next 427 0 R
+/First 411 0 R
+/Last 415 0 R
+/Count -2
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 395 0 R
+/Prev 399 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 395 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 359 0 R
+/Prev 383 0 R
+/First 399 0 R
+/Last 403 0 R
+/Count -2
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 383 0 R
+/Prev 387 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 383 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 359 0 R
+/Prev 367 0 R
+/Next 395 0 R
+/First 387 0 R
+/Last 391 0 R
+/Count -2
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 367 0 R
+/Prev 375 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 367 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 359 0 R
+/Prev 363 0 R
+/Next 383 0 R
+/First 371 0 R
+/Last 379 0 R
+/Count -3
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 195 0 R
+/Prev 339 0 R
+/Next 407 0 R
+/First 363 0 R
+/Last 395 0 R
+/Count -4
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 347 0 R
+/Prev 351 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 339 0 R
+/Prev 343 0 R
+/First 351 0 R
+/Last 355 0 R
+/Count -2
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 195 0 R
+/Prev 291 0 R
+/Next 359 0 R
+/First 343 0 R
+/Last 347 0 R
+/Count -2
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 327 0 R
+/Prev 331 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 291 0 R
+/Prev 307 0 R
+/First 331 0 R
+/Last 335 0 R
+/Count -2
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 307 0 R
+/Prev 319 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 307 0 R
+/Prev 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 307 0 R
+/Prev 311 0 R
+/Next 319 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 291 0 R
+/Prev 299 0 R
+/Next 327 0 R
+/First 311 0 R
+/Last 323 0 R
+/Count -4
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 299 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 291 0 R
+/Prev 295 0 R
+/Next 307 0 R
+/First 303 0 R
+/Last 303 0 R
+/Count -1
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 195 0 R
+/Prev 251 0 R
+/Next 339 0 R
+/First 295 0 R
+/Last 327 0 R
+/Count -4
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 259 0 R
+/Prev 283 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 259 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 259 0 R
+/Prev 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 259 0 R
+/Prev 271 0 R
+/Next 279 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 259 0 R
+/Prev 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 259 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 251 0 R
+/Prev 255 0 R
+/First 263 0 R
+/Last 287 0 R
+/Count -7
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 195 0 R
+/Prev 227 0 R
+/Next 291 0 R
+/First 255 0 R
+/Last 259 0 R
+/Count -2
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 235 0 R
+/Prev 243 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 235 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 227 0 R
+/Prev 231 0 R
+/First 239 0 R
+/Last 247 0 R
+/Count -3
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 195 0 R
+/Prev 199 0 R
+/Next 251 0 R
+/First 231 0 R
+/Last 235 0 R
+/Count -2
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 207 0 R
+/Prev 219 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 207 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 207 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 199 0 R
+/Prev 203 0 R
+/First 211 0 R
+/Last 223 0 R
+/Count -4
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 195 0 R
+/Next 227 0 R
+/First 203 0 R
+/Last 207 0 R
+/Count -2
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 17096 0 R
+/Prev 39 0 R
+/Next 3279 0 R
+/First 199 0 R
+/Last 3243 0 R
+/Count -93
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 183 0 R
+/Prev 187 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 159 0 R
+/Prev 163 0 R
+/First 187 0 R
+/Last 191 0 R
+/Count -2
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 163 0 R
+/Prev 175 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 163 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 163 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 159 0 R
+/Next 183 0 R
+/First 167 0 R
+/Last 179 0 R
+/Count -4
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 39 0 R
+/Prev 43 0 R
+/First 163 0 R
+/Last 183 0 R
+/Count -2
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 59 0 R
+/Prev 151 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 59 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 59 0 R
+/Prev 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 59 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 59 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 59 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 59 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 59 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 59 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 59 0 R
+/Prev 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 59 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 59 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 59 0 R
+/Prev 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 59 0 R
+/Prev 99 0 R
+/Next 107 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 59 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 59 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 59 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 59 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 59 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 59 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 59 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 59 0 R
+/Prev 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 59 0 R
+/Prev 63 0 R
+/Next 71 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 43 0 R
+/Prev 47 0 R
+/First 63 0 R
+/Last 155 0 R
+/Count -24
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 47 0 R
+/Prev 51 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 43 0 R
+/Next 59 0 R
+/First 51 0 R
+/Last 55 0 R
+/Count -2
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 39 0 R
+/Next 159 0 R
+/First 47 0 R
+/Last 59 0 R
+/Count -2
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 17096 0 R
+/Prev 31 0 R
+/Next 195 0 R
+/First 43 0 R
+/Last 159 0 R
+/Count -2
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 17096 0 R
+/Prev 23 0 R
+/Next 39 0 R
+/First 35 0 R
+/Last 35 0 R
+/Count -1
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 23 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 17096 0 R
+/Prev 15 0 R
+/Next 31 0 R
+/First 27 0 R
+/Last 27 0 R
+/Count -1
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 17096 0 R
+/Prev 7 0 R
+/Next 23 0 R
+/First 19 0 R
+/Last 19 0 R
+/Count -1
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 7 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 17096 0 R
+/Next 15 0 R
+/First 11 0 R
+/Last 11 0 R
+/Count -1
+>> endobj
+17097 0 obj <<
+/Names [(Doc-Start) 6501 0 R (Item.1) 9333 0 R (Item.2) 9334 0 R (Item.3) 9335 0 R (cean__util_8cpp) 8717 0 R (cean__util_8cpp_a02f3ce653bab6471a1d71fea8c9b7f92) 10650 0 R]
+/Limits [(Doc-Start) (cean__util_8cpp_a02f3ce653bab6471a1d71fea8c9b7f92)]
+>> endobj
+17098 0 obj <<
+/Names [(cean__util_8cpp_a0e0bb71577484d17ec9c2698c524e4f7) 10648 0 R (cean__util_8cpp_a379df479e2914fd1ed0287ad0e926972) 10649 0 R (cean__util_8cpp_a41db10090a2d2e10b1571824f925c8c3) 10644 0 R (cean__util_8cpp_a505785ea5048cbc446d43b7f38e83eab) 10643 0 R (cean__util_8cpp_a59fc861a62a509255e8e5cac7a1964d4) 10646 0 R (cean__util_8cpp_a68572d2a9ac1d8eae21df3c65437da6f) 10642 0 R]
+/Limits [(cean__util_8cpp_a0e0bb71577484d17ec9c2698c524e4f7) (cean__util_8cpp_a68572d2a9ac1d8eae21df3c65437da6f)]
+>> endobj
+17099 0 obj <<
+/Names [(cean__util_8cpp_a78461b3ca53ba299e157088d5a22c9d0) 10647 0 R (cean__util_8cpp_ac6fedf281594e5de7286e130e412a1f1) 10641 0 R (cean__util_8cpp_acf744c35937ff979753d3924eb2a8bed) 10645 0 R (cean__util_8cpp_ae522389a5e74392b02ee45afb4907d7a) 10640 0 R (cean__util_8cpp_afd8933caa886d4eccf7f65f5e82fe815) 10639 0 R (cean__util_8h) 8718 0 R]
+/Limits [(cean__util_8cpp_a78461b3ca53ba299e157088d5a22c9d0) (cean__util_8h)]
+>> endobj
+17100 0 obj <<
+/Names [(cean__util_8h_a41db10090a2d2e10b1571824f925c8c3) 10688 0 R (cean__util_8h_a505785ea5048cbc446d43b7f38e83eab) 10687 0 R (cean__util_8h_a68572d2a9ac1d8eae21df3c65437da6f) 10689 0 R (cean__util_8h_a8a7d7c5afa05bdc14e324257a3f324ef) 10684 0 R (cean__util_8h_ac6fedf281594e5de7286e130e412a1f1) 10686 0 R (cean__util_8h_acf744c35937ff979753d3924eb2a8bed) 10690 0 R]
+/Limits [(cean__util_8h_a41db10090a2d2e10b1571824f925c8c3) (cean__util_8h_acf744c35937ff979753d3924eb2a8bed)]
+>> endobj
+17101 0 obj <<
+/Names [(cean__util_8h_ae522389a5e74392b02ee45afb4907d7a) 10685 0 R (cean__util_8h_af1c739fe5ec2456214c87c069b927808) 10683 0 R (chapter*.1) 6559 0 R (chapter.1) 6 0 R (chapter.2) 14 0 R (chapter.3) 22 0 R]
+/Limits [(cean__util_8h_ae522389a5e74392b02ee45afb4907d7a) (chapter.3)]
+>> endobj
+17102 0 obj <<
+/Names [(chapter.4) 30 0 R (chapter.5) 38 0 R (chapter.6) 194 0 R (chapter.7) 3278 0 R (class_auto_data) 8437 0 R (class_auto_data_a2dfb82ff18281f05661a52c3659282d6) 8971 0 R]
+/Limits [(chapter.4) (class_auto_data_a2dfb82ff18281f05661a52c3659282d6)]
+>> endobj
+17103 0 obj <<
+/Names [(class_auto_data_a2fbd8cc076fd2fb76293aa06acfaef96) 8972 0 R (class_auto_data_a51c96c26f58c86a6f0025be10a1ca8e5) 8974 0 R (class_auto_data_a62965c3c110a7117db50d909049645bd) 8975 0 R (class_auto_data_acffacef8c7bf221c9354c35c65a4d6bb) 8969 0 R (class_auto_data_ae14c5874ed8f0832e5ee812851afcee6) 8970 0 R (class_auto_data_af36703fa5360ecb7998fba47d0c79977) 8973 0 R]
+/Limits [(class_auto_data_a2fbd8cc076fd2fb76293aa06acfaef96) (class_auto_data_af36703fa5360ecb7998fba47d0c79977)]
+>> endobj
+17104 0 obj <<
+/Names [(class_func_list) 8448 0 R (class_func_list_a0aa4198878da7bab0d3a7d0c4fb6a2d9) 9273 0 R (class_func_list_a1a1c30b8157cefecb68b60afc1a26150) 9282 0 R (class_func_list_a38f4414da778b0f17f4a050b73293808) 9275 0 R (class_func_list_a4284992b3403443fd48c5cfe8824dec9) 9276 0 R (class_func_list_abb4bef92112d61b61dfe9fb4e36f3745) 9283 0 R]
+/Limits [(class_func_list) (class_func_list_abb4bef92112d61b61dfe9fb4e36f3745)]
+>> endobj
+17105 0 obj <<
+/Names [(class_func_list_add6c30fccf19af1ee436e373e9e6b9dd) 9277 0 R (class_func_list_ae0c0bfa1d8e723df62fe15d0baae62a3) 9284 0 R (class_marshaller) 8589 0 R (class_marshaller_a180cdc384d039822e9778fd5179378e3) 9516 0 R (class_marshaller_a1ac00e7b78e2b8bb5739dbcdd6c4cd11) 9515 0 R (class_marshaller_a25aba8a9694d1310f43fab1e5816d564) 9520 0 R]
+/Limits [(class_func_list_add6c30fccf19af1ee436e373e9e6b9dd) (class_marshaller_a25aba8a9694d1310f43fab1e5816d564)]
+>> endobj
+17106 0 obj <<
+/Names [(class_marshaller_a521243d6d60b1a9e086cffdb1c714ebc) 9522 0 R (class_marshaller_a63ca1389147216df9983c745ff1b1824) 9523 0 R (class_marshaller_a829fcde053d621a1143cd15aa6ea3a58) 9517 0 R (class_marshaller_a86d2ac7c885c517c9354259d046eee0a) 9513 0 R (class_marshaller_a9843fe55f643f3f69a8fb58b4924e88b) 9518 0 R (class_marshaller_a9bd4683935af5bacf1803869cf6ff8e6) 9524 0 R]
+/Limits [(class_marshaller_a521243d6d60b1a9e086cffdb1c714ebc) (class_marshaller_a9bd4683935af5bacf1803869cf6ff8e6)]
+>> endobj
+17107 0 obj <<
+/Names [(class_marshaller_a9ff94af3351343dc25f88cdaefe0d48b) 9519 0 R (class_marshaller_aa841b002d6a0f7501807a57a01557e23) 9512 0 R (class_marshaller_ac638dc2d74c9c10450a222b96a3350f7) 9514 0 R (class_marshaller_adfdfea9e962b133e105a818e60f6f2cc) 9521 0 R (class_mem_range) 8590 0 R (class_mem_range_a4f9c246f53fefca5ab2453f413d204b9) 9546 0 R]
+/Limits [(class_marshaller_a9ff94af3351343dc25f88cdaefe0d48b) (class_mem_range_a4f9c246f53fefca5ab2453f413d204b9)]
+>> endobj
+17108 0 obj <<
+/Names [(class_mem_range_a57001d5776335698cea14c7717235beb) 9544 0 R (class_mem_range_a663792594853c0350524cdf0113f52a4) 9548 0 R (class_mem_range_a6d34b7a23b623258f3441bdc18d86c17) 9551 0 R (class_mem_range_a7895684fb5215afbb849eaab41d87911) 9549 0 R (class_mem_range_a86a2af8a1fce4d122cc7934e25dcdc85) 9550 0 R (class_mem_range_aac0cf12aac4b47ad289ceb8c197df8c0) 9545 0 R]
+/Limits [(class_mem_range_a57001d5776335698cea14c7717235beb) (class_mem_range_aac0cf12aac4b47ad289ceb8c197df8c0)]
+>> endobj
+17109 0 obj <<
+/Names [(class_mem_range_af8af247cef1bb5db9be54e219234f1b9) 9547 0 R (class_mem_range_aff23b310facf4df91b15cc4b11466645) 9552 0 R (class_myo_wrapper) 8596 0 R (class_myo_wrapper_a0a13911d83978b7366d00e3ff56653bb) 9784 0 R (class_myo_wrapper_a0f9a16d7d03067afcc14f03b1369ebf6) 9773 0 R (class_myo_wrapper_a11b2254b63a25cbbd697f55b52dea80e) 9744 0 R]
+/Limits [(class_mem_range_af8af247cef1bb5db9be54e219234f1b9) (class_myo_wrapper_a11b2254b63a25cbbd697f55b52dea80e)]
+>> endobj
+17110 0 obj <<
+/Names [(class_myo_wrapper_a16cc38eefc80ed8bdffe9da4393c0350) 9787 0 R (class_myo_wrapper_a22ea8787ae6e20210aaf7ead672b94a4) 9746 0 R (class_myo_wrapper_a240c7cb5222c4880631afeb044c83bef) 9776 0 R (class_myo_wrapper_a2625ac2c238d979b11fde6bca8e2fa67) 9785 0 R (class_myo_wrapper_a2b829f5368f8135970203b9c103e3d62) 9741 0 R (class_myo_wrapper_a2e63345b7712283a702136d12253f46b) 9743 0 R]
+/Limits [(class_myo_wrapper_a16cc38eefc80ed8bdffe9da4393c0350) (class_myo_wrapper_a2e63345b7712283a702136d12253f46b)]
+>> endobj
+17111 0 obj <<
+/Names [(class_myo_wrapper_a34061cdb7b003e217c59dce00c1de17c) 9783 0 R (class_myo_wrapper_a35e52dadb174bd9631bc600d00f247df) 9781 0 R (class_myo_wrapper_a4749a4938d04b79a7c20ba76c862ef75) 9748 0 R (class_myo_wrapper_a498f561d1a94502d3a276d0892b3095e) 9777 0 R (class_myo_wrapper_a4c07ab26ac49f2909cb512feec7a473e) 9739 0 R (class_myo_wrapper_a4c8a7b167761f5569db91c7eff9261f8) 9775 0 R]
+/Limits [(class_myo_wrapper_a34061cdb7b003e217c59dce00c1de17c) (class_myo_wrapper_a4c8a7b167761f5569db91c7eff9261f8)]
+>> endobj
+17112 0 obj <<
+/Names [(class_myo_wrapper_a4f945675b04e0fe0f7fab3a65ae2e69d) 9751 0 R (class_myo_wrapper_a543521ed8c62fa1d04cb848758a487c7) 9742 0 R (class_myo_wrapper_a61320807ed697be5a9a4770d1189b3fe) 9782 0 R (class_myo_wrapper_a6778fdbc1ce4755f220f78b5c010cfc6) 9747 0 R (class_myo_wrapper_a83ac20f871c0985f66fa684fae2dabfe) 9737 0 R (class_myo_wrapper_a97cbc05e54a81ddb2bd9ee2a29ef2f04) 9740 0 R]
+/Limits [(class_myo_wrapper_a4f945675b04e0fe0f7fab3a65ae2e69d) (class_myo_wrapper_a97cbc05e54a81ddb2bd9ee2a29ef2f04)]
+>> endobj
+17113 0 obj <<
+/Names [(class_myo_wrapper_aa18dc49d6c2f2dca28e7f563fcb1b96b) 9745 0 R (class_myo_wrapper_aa262841af280ca25d8e1acfdc1309bae) 9749 0 R (class_myo_wrapper_aafa0d033dae5674d119b4677e991ffc5) 9752 0 R (class_myo_wrapper_ab8a4dfa2d41fc9d4fbf67c93e4444bf9) 9786 0 R (class_myo_wrapper_ac77b34762a9058566b3b6ed15f42576b) 9738 0 R (class_myo_wrapper_aca92754fed172a437208a1bd26b3a9f1) 9779 0 R]
+/Limits [(class_myo_wrapper_aa18dc49d6c2f2dca28e7f563fcb1b96b) (class_myo_wrapper_aca92754fed172a437208a1bd26b3a9f1)]
+>> endobj
+17114 0 obj <<
+/Names [(class_myo_wrapper_adef67ab58a0c9967f138708cae70a007) 9774 0 R (class_myo_wrapper_aeebad767b7267dc0f9ad1fc691f031d9) 9753 0 R (class_myo_wrapper_af04d515d1f361c8008becf1370ba35f4) 9750 0 R (class_myo_wrapper_af5ddf78e04295c64b71fb2dd5774c39c) 9778 0 R (class_myo_wrapper_af69d973892348be778469bb42b9b3c9f) 9780 0 R (class_myo_wrapper_af6d7b62fe1399bed64dd1b2afea4d910) 9736 0 R]
+/Limits [(class_myo_wrapper_adef67ab58a0c9967f138708cae70a007) (class_myo_wrapper_af6d7b62fe1399bed64dd1b2afea4d910)]
+>> endobj
+17115 0 obj <<
+/Names [(class_offload_descriptor) 8604 0 R (class_offload_descriptor_1_1_read_arr_elements) 8629 0 R (class_offload_descriptor_1_1_read_arr_elements_a11f3e99172d33c9806c696a63b9298b2) 10264 0 R (class_offload_descriptor_1_1_read_arr_elements_a1e5425173cacdfb0eda9d214ee003ddb) 10262 0 R (class_offload_descriptor_1_1_read_arr_elements_a20ab6f44a83c386f0ab202903a199260) 10261 0 R (class_offload_descriptor_1_1_read_arr_elements_a5339fcc25ce5e0a3b5bbc2a87e126e89) 10257 0 R]
+/Limits [(class_offload_descriptor) (class_offload_descriptor_1_1_read_arr_elements_a5339fcc25ce5e0a3b5bbc2a87e126e89)]
+>> endobj
+17116 0 obj <<
+/Names [(class_offload_descriptor_1_1_read_arr_elements_a6208d30bc3bc477ccf8eea72a06a1a16) 10259 0 R (class_offload_descriptor_1_1_read_arr_elements_a753a0fa94c8743cc8e6419754baf9bda) 10256 0 R (class_offload_descriptor_1_1_read_arr_elements_aba0426a6d7dc5297f0e3a1651f3d7edd) 10263 0 R (class_offload_descriptor_1_1_read_arr_elements_ae042f41969b84e61725d38d9b89e1e7f) 10266 0 R (class_offload_descriptor_1_1_read_arr_elements_aee5b1dc3b4b55ccb00279282f4d4bfa6) 10265 0 R (class_offload_descriptor_1_1_read_arr_elements_af6ecd31f59d374b3681af41e5803ee80) 10260 0 R]
+/Limits [(class_offload_descriptor_1_1_read_arr_elements_a6208d30bc3bc477ccf8eea72a06a1a16) (class_offload_descriptor_1_1_read_arr_elements_af6ecd31f59d374b3681af41e5803ee80)]
+>> endobj
+17117 0 obj <<
+/Names [(class_offload_descriptor_1_1_read_arr_elements_af7d8280764eb9f81f82128a59ce79433) 10258 0 R (class_offload_descriptor_a0140420e666f71eb158f235ae2182799) 10018 0 R (class_offload_descriptor_a0185dca5a346fc4cd1166da85b81776b) 10012 0 R (class_offload_descriptor_a024c93eb6660ff128dbfc81af0f091ee) 9991 0 R (class_offload_descriptor_a0834aab1b22604ccd796e34b2d1cf92d) 9913 0 R (class_offload_descriptor_a09b5fd9b7c7e7dd10921bbd6edbfd8f2) 9912 0 R]
+/Limits [(class_offload_descriptor_1_1_read_arr_elements_af7d8280764eb9f81f82128a59ce79433) (class_offload_descriptor_a09b5fd9b7c7e7dd10921bbd6edbfd8f2)]
+>> endobj
+17118 0 obj <<
+/Names [(class_offload_descriptor_a1019fdeeeecf0bfd720ce8066ac62020) 10017 0 R (class_offload_descriptor_a11679cd702e2a2dc13c8de54b6f1dcd9) 9930 0 R (class_offload_descriptor_a141572ebe61f436a34381562cb412a9a) 9919 0 R (class_offload_descriptor_a15f4058a461fb6a409458a0d233ea309) 9995 0 R (class_offload_descriptor_a18109d2903bb718a0c2742016f39c250) 10021 0 R (class_offload_descriptor_a195e410b919f7a945cd6f2bc78a0ced0) 10019 0 R]
+/Limits [(class_offload_descriptor_a1019fdeeeecf0bfd720ce8066ac62020) (class_offload_descriptor_a195e410b919f7a945cd6f2bc78a0ced0)]
+>> endobj
+17119 0 obj <<
+/Names [(class_offload_descriptor_a1e0247d226d9364c39d17eec5b559a87) 9926 0 R (class_offload_descriptor_a27e952f9157f838cb680eeabfaebd734) 10011 0 R (class_offload_descriptor_a2813e5a4daf60e66e76c85d8506b2210) 9931 0 R (class_offload_descriptor_a2a21a15e056b0c0d7df8a577f383a17e) 10005 0 R (class_offload_descriptor_a3134e57ccccde1fbd90ebe239729417f) 9932 0 R (class_offload_descriptor_a336522cf87dc689bde59520e23e47c89) 9990 0 R]
+/Limits [(class_offload_descriptor_a1e0247d226d9364c39d17eec5b559a87) (class_offload_descriptor_a336522cf87dc689bde59520e23e47c89)]
+>> endobj
+17120 0 obj <<
+/Names [(class_offload_descriptor_a3545fba718646b1f351f6aa98e8016d1) 10006 0 R (class_offload_descriptor_a3847f7d1b8e4cf8e7630ecc1ddca4358) 9924 0 R (class_offload_descriptor_a3a96a2a58e503e53d8ef0d5fb4c9b6c5) 9994 0 R (class_offload_descriptor_a3dddb64946a9ebef9a415cc4208ac896) 9934 0 R (class_offload_descriptor_a47a9c53d325596c50a79c081854401d7) 9920 0 R (class_offload_descriptor_a4e1fb5e3971c1f318654fc4825902733) 10008 0 R]
+/Limits [(class_offload_descriptor_a3545fba718646b1f351f6aa98e8016d1) (class_offload_descriptor_a4e1fb5e3971c1f318654fc4825902733)]
+>> endobj
+17121 0 obj <<
+/Names [(class_offload_descriptor_a4eaa40d03128dd3b6d3c1cecd68d2811) 9917 0 R (class_offload_descriptor_a5062a485612e3d23575052ae84d1bb65) 10003 0 R (class_offload_descriptor_a52c3f4dbdb4442c57a3d1618839b6f2b) 10020 0 R (class_offload_descriptor_a608cb7f9f0e3c9eaa6722615ed3c968b) 10002 0 R (class_offload_descriptor_a6643a87273da09cb32f1420b9f4fe2c3) 10004 0 R (class_offload_descriptor_a70dd992a4af0fe1947475816bbaebca1) 10014 0 R]
+/Limits [(class_offload_descriptor_a4eaa40d03128dd3b6d3c1cecd68d2811) (class_offload_descriptor_a70dd992a4af0fe1947475816bbaebca1)]
+>> endobj
+17122 0 obj <<
+/Names [(class_offload_descriptor_a75f4aed043877dacada44439d58a6dff) 9933 0 R (class_offload_descriptor_a766e59acc0d372a22255e1ecbd12b8c5) 10016 0 R (class_offload_descriptor_a843b6dc4f76bd6f15a4096d1e667f6be) 9929 0 R (class_offload_descriptor_a847e2bb4ba83788d35bf40ff663d3224) 10013 0 R (class_offload_descriptor_a854ce7e192113d446f627634d0b4b78b) 10009 0 R (class_offload_descriptor_a874b8000f3cceedaa58f4d815b42cbc7) 9922 0 R]
+/Limits [(class_offload_descriptor_a75f4aed043877dacada44439d58a6dff) (class_offload_descriptor_a874b8000f3cceedaa58f4d815b42cbc7)]
+>> endobj
+17123 0 obj <<
+/Names [(class_offload_descriptor_a88ca7baae312e7bd7f5b46984d573a46) 9925 0 R (class_offload_descriptor_a917c132c29b514a00ee2ca7819a22409) 9914 0 R (class_offload_descriptor_a95548e370f8b7353c394fb784a917df9) 9987 0 R (class_offload_descriptor_aa19784867e17f420ecac36ebafd0811d) 9986 0 R (class_offload_descriptor_aa2486bcdb2377207ac5e3d7d7235fb04) 10001 0 R (class_offload_descriptor_aa55aebd54fc2b0e50054a2e174616a49) 9911 0 R]
+/Limits [(class_offload_descriptor_a88ca7baae312e7bd7f5b46984d573a46) (class_offload_descriptor_aa55aebd54fc2b0e50054a2e174616a49)]
+>> endobj
+17124 0 obj <<
+/Names [(class_offload_descriptor_aa603db80cfad55de814e03aeca166d39) 9996 0 R (class_offload_descriptor_aab8dc6cc0ef9aa66fe984c9c21ffb7d4) 9910 0 R (class_offload_descriptor_ab7257af1f8d13c67980eda9f93141006) 9915 0 R (class_offload_descriptor_ab86c0d4f113248f6750c60df60cd3ffc) 10022 0 R (class_offload_descriptor_abf5a7f91a55db953f4e532bdd8708404) 9998 0 R (class_offload_descriptor_ac1024886c04bd3c7b094d0d0c6f3c2a8) 9992 0 R]
+/Limits [(class_offload_descriptor_aa603db80cfad55de814e03aeca166d39) (class_offload_descriptor_ac1024886c04bd3c7b094d0d0c6f3c2a8)]
+>> endobj
+17125 0 obj <<
+/Names [(class_offload_descriptor_acbee2b3710281a82761a4c43df2a3010) 9909 0 R (class_offload_descriptor_ad3e43392b19ddfbf01a9fdebc5b0465f) 9927 0 R (class_offload_descriptor_ad63eea99495750590c06bef45b429486) 9916 0 R (class_offload_descriptor_ae35ec424df3f17540f77fbcdf1a1443d) 9918 0 R (class_offload_descriptor_ae4c63a9560566877d23ee4e915dc839c) 9999 0 R (class_offload_descriptor_ae7294043e5a5c8949934fd94e718dde8) 9928 0 R]
+/Limits [(class_offload_descriptor_acbee2b3710281a82761a4c43df2a3010) (class_offload_descriptor_ae7294043e5a5c8949934fd94e718dde8)]
+>> endobj
+17126 0 obj <<
+/Names [(class_offload_descriptor_ae8a586f87f32aa6cbae31ea1aaec90e3) 10010 0 R (class_offload_descriptor_ae8c3f9587992eb3efb26e3a3aeabd5c7) 10007 0 R (class_offload_descriptor_aea9703dbffa4547f5c6897b8509674dd) 10015 0 R (class_offload_descriptor_aead329a2de8124cf958f35265d569f24) 10000 0 R (class_offload_descriptor_aef229fc1f13589501f179346aae67e67) 9921 0 R (class_offload_descriptor_af027599ed02c5347a661bfcfd89a4cd1) 9989 0 R]
+/Limits [(class_offload_descriptor_ae8a586f87f32aa6cbae31ea1aaec90e3) (class_offload_descriptor_af027599ed02c5347a661bfcfd89a4cd1)]
+>> endobj
+17127 0 obj <<
+/Names [(class_offload_descriptor_af5b446764d8eb5cc3ca82adf0174f0c8) 9988 0 R (class_offload_descriptor_afb4afe423302388b6c5a4047b49db03c) 9923 0 R (class_ptr_data) 8628 0 R (class_ptr_data_a1954a57a9240406b8c66dcb82dcb6f90) 10217 0 R (class_ptr_data_a3e9c0d1e29630696793192111df2388b) 10229 0 R (class_ptr_data_a581e1bf46503e8d2a598ece70576a6cc) 10224 0 R]
+/Limits [(class_offload_descriptor_af5b446764d8eb5cc3ca82adf0174f0c8) (class_ptr_data_a581e1bf46503e8d2a598ece70576a6cc)]
+>> endobj
+17128 0 obj <<
+/Names [(class_ptr_data_a5b1f04cf719a085f170f93a10a5e6e7d) 10223 0 R (class_ptr_data_a6dbf4f8e394ad619d70f3e615593716c) 10222 0 R (class_ptr_data_a82fecff2b5d85bc04f98d2f7989df2e0) 10216 0 R (class_ptr_data_a843cef2fc19df03a30c02b8eeabf2f0b) 10230 0 R (class_ptr_data_a8cfc3aa32ea6fd984b0d18a5e195da75) 10220 0 R (class_ptr_data_ab1fb6f2c694432729a0f0470281faecb) 10218 0 R]
+/Limits [(class_ptr_data_a5b1f04cf719a085f170f93a10a5e6e7d) (class_ptr_data_ab1fb6f2c694432729a0f0470281faecb)]
+>> endobj
+17129 0 obj <<
+/Names [(class_ptr_data_acb402512d5aa797edf39318b05ca0a14) 10225 0 R (class_ptr_data_adb481c80c3d1d1819a2b45d110625d69) 10221 0 R (class_ptr_data_adfafcaa1435bdc645fbbcfe2b573bca8) 10226 0 R (class_ptr_data_ae14fbd25ab828041ed182416810744c5) 10219 0 R (class_ptr_data_aeea66828c89c01226c0905efd365c200) 10228 0 R (class_ptr_data_afe661d57328cee197df41ff131814501) 10227 0 R]
+/Limits [(class_ptr_data_acb402512d5aa797edf39318b05ca0a14) (class_ptr_data_afe661d57328cee197df41ff131814501)]
+>> endobj
+17130 0 obj <<
+/Names [(class_table_list) 8631 0 R (class_table_list_a5da93ec3eba10b5d8616a564c7dbfdfe) 10308 0 R (class_table_list_a6fc05ea89dc5a4dd79478649975cd62b) 10309 0 R (class_table_list_a911aefba56b5520426c1b0b373572eef) 9815 0 R (class_table_list_a9253d63fa940f516018a32641ea71653) 10310 0 R (class_table_list_ab67ad77f096115d209806882018955e6) 10312 0 R]
+/Limits [(class_table_list) (class_table_list_ab67ad77f096115d209806882018955e6)]
+>> endobj
+17131 0 obj <<
+/Names [(class_table_list_acf87793d3424504854da47d6b5cbf215) 10311 0 R (class_var_list) 8638 0 R (class_var_list_1_1_iterator) 8453 0 R (class_var_list_1_1_iterator_a29a1d71870edff3435a9a2ec63561b82) 9368 0 R (class_var_list_1_1_iterator_a611820d0155ed7f1071161f033d7d476) 9362 0 R (class_var_list_1_1_iterator_a841b96e4f3b5ded743dde00374e602a6) 9363 0 R]
+/Limits [(class_table_list_acf87793d3424504854da47d6b5cbf215) (class_var_list_1_1_iterator_a841b96e4f3b5ded743dde00374e602a6)]
+>> endobj
+17132 0 obj <<
+/Names [(class_var_list_1_1_iterator_a8ed1abd8cd95f840e8e3b38c472a3b99) 9370 0 R (class_var_list_1_1_iterator_aa4d59da12ec06dbfc4ae5f72eca5db2b) 9372 0 R (class_var_list_1_1_iterator_ab6e06f2a49837ab70e769808b1ec3e3a) 9373 0 R (class_var_list_1_1_iterator_ac81df0f2c63344dec56749581eea3461) 9371 0 R (class_var_list_1_1_iterator_acb9ba27ad5a1bc00096949877fc0a5a0) 9369 0 R (class_var_list_1_1_iterator_ae0723084dcf3c3c28081f73f6098365c) 9374 0 R]
+/Limits [(class_var_list_1_1_iterator_a8ed1abd8cd95f840e8e3b38c472a3b99) (class_var_list_1_1_iterator_ae0723084dcf3c3c28081f73f6098365c)]
+>> endobj
+17133 0 obj <<
+/Names [(class_var_list_a095f520160cf904b0e59172b886aa7d4) 10570 0 R (class_var_list_a0a6a36d7c3d7cd80021a957a6b376aaf) 10569 0 R (class_var_list_a360bca4bf3a9777b50bb57e798bdd305) 10572 0 R (class_var_list_a5afed40bfa52bded3887a3fc6c91994e) 10571 0 R (class_var_list_a5cb3d4a8a89319443ef3396afafdd87e) 10575 0 R (class_var_list_a8f7cdf3b28933c440b54177b71368fa5) 10574 0 R]
+/Limits [(class_var_list_a095f520160cf904b0e59172b886aa7d4) (class_var_list_a8f7cdf3b28933c440b54177b71368fa5)]
+>> endobj
+17134 0 obj <<
+/Names [(class_var_list_aebb0f2b6838d45c4b251e5132cb055a5) 10573 0 R (classmic__lib) 8591 0 R (classmic__lib_a1743811789a49d64fc0d855033f8cb5a) 9614 0 R (classmic__lib_a6bbf41a6daa69565c20346fb87c0a0a2) 9616 0 R (classmic__lib_af1812fd98f49316436aaa91b6f29fb4b) 9615 0 R (coi__client_8cpp) 8793 0 R]
+/Limits [(class_var_list_aebb0f2b6838d45c4b251e5132cb055a5) (coi__client_8cpp)]
+>> endobj
+17135 0 obj <<
+/Names [(coi__client_8cpp_a674bc9b9b0a0cc3dca0820643c8475c3) 10725 0 R (coi__client_8cpp_a7b9bc04902bf3eaaff6dfe40a43eeece) 10726 0 R (coi__client_8h) 8794 0 R (coi__client_8h_a2353dc088de554ab64ff304e2954b619) 10357 0 R (coi__server_8cpp) 8795 0 R (coi__server_8cpp_a57f85a347e239ffa85ebbb86ef6e8287) 10757 0 R]
+/Limits [(coi__client_8cpp_a674bc9b9b0a0cc3dca0820643c8475c3) (coi__server_8cpp_a57f85a347e239ffa85ebbb86ef6e8287)]
+>> endobj
+17136 0 obj <<
+/Names [(coi__server_8cpp_acfd75d4ab7d8a7a6b0cd82489ad732bf) 10758 0 R (coi__server_8cpp_ad734908e68be7b06feb51adf5abd197f) 10755 0 R (coi__server_8cpp_aec94570d6f7f2a20399b723d888c7707) 10756 0 R (coi__server_8h) 8796 0 R (coi__server_8h_a1568be3319b750f74ecc20f0bb39b724) 10781 0 R (coi__server_8h_a76c07dc1faa2e927453ee3c6f48f5f91) 10783 0 R]
+/Limits [(coi__server_8cpp_acfd75d4ab7d8a7a6b0cd82489ad732bf) (coi__server_8h_a76c07dc1faa2e927453ee3c6f48f5f91)]
+>> endobj
+17137 0 obj <<
+/Names [(coi__server_8h_acd2218ee40b2cc7a6136b27ce8cd6c47) 10782 0 R (coi__server_8h_ad3e368b0f4964d85ddbcfbbac0afc2c2) 10785 0 R (coi__server_8h_aed80c7bd7d452e2bad2bc39b87e1e108) 10784 0 R (compiler__if__host_8cpp) 8719 0 R (compiler__if__host_8cpp_a0e050df8679f9e136027c7b5d5a8d226) 10835 0 R (compiler__if__host_8cpp_a351d528667a2b5bd813a1e70a78f6162) 10839 0 R]
+/Limits [(coi__server_8h_acd2218ee40b2cc7a6136b27ce8cd6c47) (compiler__if__host_8cpp_a351d528667a2b5bd813a1e70a78f6162)]
+>> endobj
+17138 0 obj <<
+/Names [(compiler__if__host_8cpp_a571a5cc9ca28737e8f1138ac2051fe5b) 10837 0 R (compiler__if__host_8cpp_a80381ff547e2239b8f267504c4b18bec) 10830 0 R (compiler__if__host_8cpp_a89bdfb3085bb704db3d3daa5ae597ea4) 10832 0 R (compiler__if__host_8cpp_ac9ef6bb5f05d9e5b1be1385a67175345) 10838 0 R (compiler__if__host_8cpp_acb141ef778b0349746eb64e1c76a8468) 10831 0 R (compiler__if__host_8cpp_adf1a83efbf6473acc95a8788b885fe90) 10829 0 R]
+/Limits [(compiler__if__host_8cpp_a571a5cc9ca28737e8f1138ac2051fe5b) (compiler__if__host_8cpp_adf1a83efbf6473acc95a8788b885fe90)]
+>> endobj
+17139 0 obj <<
+/Names [(compiler__if__host_8h) 8720 0 R (compiler__if__host_8h_a0e050df8679f9e136027c7b5d5a8d226) 10887 0 R (compiler__if__host_8h_a3cd6b36ce494f135e97b7722c7f1aea9) 10884 0 R (compiler__if__host_8h_a583ddedd0b304b8a1466c830b7e9b299) 10886 0 R (compiler__if__host_8h_a6ce23788abda70faa38a7de5168ab2b6) 10883 0 R (compiler__if__host_8h_a928aaccec7c9cf49f07747955de53fbb) 10882 0 R]
+/Limits [(compiler__if__host_8h) (compiler__if__host_8h_a928aaccec7c9cf49f07747955de53fbb)]
+>> endobj
+17140 0 obj <<
+/Names [(compiler__if__host_8h_abb2180b966ccefc3b105524384f7deba) 10885 0 R (compiler__if__host_8h_ac85f19102b9a0bba4fa9fd3c486c7d78) 10889 0 R (compiler__if__host_8h_aca28d169d37633ab3efd88ce74b2d299) 10903 0 R (compiler__if__host_8h_ad41c5f5d55e98b63f30bfeb0f19ce6e5) 10880 0 R (compiler__if__host_8h_adf1a83efbf6473acc95a8788b885fe90) 10904 0 R (compiler__if__host_8h_ae4fec7080850a48dda13486a544d0702) 10890 0 R]
+/Limits [(compiler__if__host_8h_abb2180b966ccefc3b105524384f7deba) (compiler__if__host_8h_ae4fec7080850a48dda13486a544d0702)]
+>> endobj
+17141 0 obj <<
+/Names [(compiler__if__host_8h_ae82ec3a444236349d7772811583b68e4) 10888 0 R (compiler__if__host_8h_source) 10905 0 R (compiler__if__target_8cpp) 8721 0 R (compiler__if__target_8cpp_ab376621c7fbba04aef19ec0f190ee3cf) 10938 0 R (compiler__if__target_8cpp_acf31e1e5aec8a89b2b8060b9f86ec43e) 10939 0 R (compiler__if__target_8cpp_ada60ba39ce78b1ed954b614330ce36cd) 10937 0 R]
+/Limits [(compiler__if__host_8h_ae82ec3a444236349d7772811583b68e4) (compiler__if__target_8cpp_ada60ba39ce78b1ed954b614330ce36cd)]
+>> endobj
+17142 0 obj <<
+/Names [(compiler__if__target_8h) 8722 0 R (compiler__if__target_8h_a1807f8d6deb08fc413f1efd793f93f8e) 10943 0 R (compiler__if__target_8h_a2482d2c090680a260736fee93de282ef) 10955 0 R (compiler__if__target_8h_a9d6922bd6ec75196890b6933d48df632) 10942 0 R (compiler__if__target_8h_ab376621c7fbba04aef19ec0f190ee3cf) 10956 0 R (compiler__if__target_8h_acf31e1e5aec8a89b2b8060b9f86ec43e) 10957 0 R]
+/Limits [(compiler__if__target_8h) (compiler__if__target_8h_acf31e1e5aec8a89b2b8060b9f86ec43e)]
+>> endobj
+17143 0 obj <<
+/Names [(compiler__if__target_8h_ad887b474fd49df7ac7801b9541a641b5) 10941 0 R (compiler__if__target_8h_source) 10958 0 R (dv__util_8cpp) 8723 0 R (dv__util_8cpp_a096b0b11c73c328e71512ef26e81a39b) 10979 0 R (dv__util_8cpp_a1a8170b92c43ea7c55566a23a7bcdceb) 10982 0 R (dv__util_8cpp_a710d3456ad7c68f8f1e75280cb59eed6) 10981 0 R]
+/Limits [(compiler__if__target_8h_ad887b474fd49df7ac7801b9541a641b5) (dv__util_8cpp_a710d3456ad7c68f8f1e75280cb59eed6)]
+>> endobj
+17144 0 obj <<
+/Names [(dv__util_8cpp_a7313c7af4287aa68a23591eeb6197e75) 10978 0 R (dv__util_8cpp_abf73632f6d281d829bd176c3ea5e3d98) 10980 0 R (dv__util_8h) 8724 0 R (dv__util_8h_a1a8170b92c43ea7c55566a23a7bcdceb) 11024 0 R (dv__util_8h_a25afc16974033eee3cd08e8c1d833cc4) 8943 0 R (dv__util_8h_a287c35471baf30439aef0b5c3b6eb33c) 11023 0 R]
+/Limits [(dv__util_8cpp_a7313c7af4287aa68a23591eeb6197e75) (dv__util_8h_a287c35471baf30439aef0b5c3b6eb33c)]
+>> endobj
+17145 0 obj <<
+/Names [(dv__util_8h_a3523f24560128f27e31cf619d65a41c9) 11013 0 R (dv__util_8h_a5047ea57c45241ff5ecf55ac893bb592) 11017 0 R (dv__util_8h_a54b06ee85c425d9b1097d235998bfba4) 11018 0 R (dv__util_8h_a65c0482fe6c1a9813f927b6489d5ff5f) 11014 0 R (dv__util_8h_a710d3456ad7c68f8f1e75280cb59eed6) 11020 0 R (dv__util_8h_a7313c7af4287aa68a23591eeb6197e75) 11022 0 R]
+/Limits [(dv__util_8h_a3523f24560128f27e31cf619d65a41c9) (dv__util_8h_a7313c7af4287aa68a23591eeb6197e75)]
+>> endobj
+17146 0 obj <<
+/Names [(dv__util_8h_a7794447f8e3800689e053e9833be2c75) 8951 0 R (dv__util_8h_a8602709fb0d6f3c2167951308290f152) 11016 0 R (dv__util_8h_abf73632f6d281d829bd176c3ea5e3d98) 11021 0 R (dv__util_8h_ade8dd79a5828a3a1a71df4363c3823ac) 11015 0 R (dv__util_8h_af3f9aa15be30c0d4ec9652f71c613580) 11019 0 R (interfacemic__lib_1_1kmp__create__affinity__mask__target) 8455 0 R]
+/Limits [(dv__util_8h_a7794447f8e3800689e053e9833be2c75) (interfacemic__lib_1_1kmp__create__affinity__mask__target)]
+>> endobj
+17147 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__create__affinity__mask__target_a0157f5b0bb91614c6c742ed42ae84730) 9394 0 R (interfacemic__lib_1_1kmp__destroy__affinity__mask__target) 8456 0 R (interfacemic__lib_1_1kmp__destroy__affinity__mask__target_ab972d7f213b6397d5869ba9fb3e7c158) 9396 0 R (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target) 8457 0 R (interfacemic__lib_1_1kmp__get__affinity__mask__proc__target_aaca9ead40ba87d64900ee9ef74f85aaf) 9398 0 R (interfacemic__lib_1_1kmp__get__affinity__max__proc__target) 8458 0 R]
+/Limits [(interfacemic__lib_1_1kmp__create__affinity__mask__target_a0157f5b0bb91614c6c742ed42ae84730) (interfacemic__lib_1_1kmp__get__affinity__max__proc__target)]
+>> endobj
+17148 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__get__affinity__max__proc__target_aef330aa630f345b0ad20fb7b27814920) 9410 0 R (interfacemic__lib_1_1kmp__get__affinity__target) 8459 0 R (interfacemic__lib_1_1kmp__get__affinity__target_a6b527c4fcc4ee24e05123a664fde1739) 9412 0 R (interfacemic__lib_1_1kmp__get__blocktime__target) 8460 0 R (interfacemic__lib_1_1kmp__get__blocktime__target_ac2568401587e2c844ce54c8dd62c6b3a) 9414 0 R (interfacemic__lib_1_1kmp__get__library__target) 8461 0 R]
+/Limits [(interfacemic__lib_1_1kmp__get__affinity__max__proc__target_aef330aa630f345b0ad20fb7b27814920) (interfacemic__lib_1_1kmp__get__library__target)]
+>> endobj
+17149 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__get__library__target_a05d17e9368c6706aa54aa6c40da0953e) 9426 0 R (interfacemic__lib_1_1kmp__get__stacksize__s__target) 8462 0 R (interfacemic__lib_1_1kmp__get__stacksize__s__target_a7463633e4f38847e69e87f6584a2fde4) 9428 0 R (interfacemic__lib_1_1kmp__get__stacksize__target) 8463 0 R (interfacemic__lib_1_1kmp__get__stacksize__target_ae14c3b08f78f595a9ee68ad7140fff98) 9430 0 R (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target) 8464 0 R]
+/Limits [(interfacemic__lib_1_1kmp__get__library__target_a05d17e9368c6706aa54aa6c40da0953e) (interfacemic__lib_1_1kmp__set__affinity__mask__proc__target)]
+>> endobj
+17150 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__set__affinity__mask__proc__target_a268e8938950a6c63eaf2b0e14f38274b) 9442 0 R (interfacemic__lib_1_1kmp__set__affinity__target) 8465 0 R (interfacemic__lib_1_1kmp__set__affinity__target_a482c3c584cc821f6b5e53adca1c1bfd5) 9444 0 R (interfacemic__lib_1_1kmp__set__blocktime__target) 8466 0 R (interfacemic__lib_1_1kmp__set__blocktime__target_ae25cd77d11304bb12294a3cfa460f868) 9447 0 R (interfacemic__lib_1_1kmp__set__defaults__target) 8467 0 R]
+/Limits [(interfacemic__lib_1_1kmp__set__affinity__mask__proc__target_a268e8938950a6c63eaf2b0e14f38274b) (interfacemic__lib_1_1kmp__set__defaults__target)]
+>> endobj
+17151 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__set__defaults__target_a24783d30ed1260f536e15c306c87f647) 9459 0 R (interfacemic__lib_1_1kmp__set__library__serial__target) 8468 0 R (interfacemic__lib_1_1kmp__set__library__serial__target_ac46a1e2c0f8c3df898613829837c749c) 9461 0 R (interfacemic__lib_1_1kmp__set__library__target) 8469 0 R (interfacemic__lib_1_1kmp__set__library__target_a88b7feb957aca964ff72aa220f5bfa04) 9463 0 R (interfacemic__lib_1_1kmp__set__library__throughput__target) 8470 0 R]
+/Limits [(interfacemic__lib_1_1kmp__set__defaults__target_a24783d30ed1260f536e15c306c87f647) (interfacemic__lib_1_1kmp__set__library__throughput__target)]
+>> endobj
+17152 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__set__library__throughput__target_a5f1b56f724b16bf1acc940a1b5953de2) 9475 0 R (interfacemic__lib_1_1kmp__set__library__turnaround__target) 8585 0 R (interfacemic__lib_1_1kmp__set__library__turnaround__target_a5ffe8181ca3f0c53bae12ae534b0e47a) 9477 0 R (interfacemic__lib_1_1kmp__set__stacksize__s__target) 8586 0 R (interfacemic__lib_1_1kmp__set__stacksize__s__target_abd85a5be6121aea82a160eab798c47b4) 9479 0 R (interfacemic__lib_1_1kmp__set__stacksize__target) 8587 0 R]
+/Limits [(interfacemic__lib_1_1kmp__set__library__throughput__target_a5f1b56f724b16bf1acc940a1b5953de2) (interfacemic__lib_1_1kmp__set__stacksize__target)]
+>> endobj
+17153 0 obj <<
+/Names [(interfacemic__lib_1_1kmp__set__stacksize__target_a6b00b50e1d9d6b3a313c5539b6fc76ff) 9491 0 R (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target) 8588 0 R (interfacemic__lib_1_1kmp__unset__affinity__mask__proc__target_aec63603ecffb751b4276bdddd5b91568) 9493 0 R (interfacemic__lib_1_1offload__get__device__number) 8598 0 R (interfacemic__lib_1_1offload__get__device__number_ae8f7c87064b11830e47ed6336b3138b0) 9816 0 R (interfacemic__lib_1_1offload__get__physical__device__number) 8599 0 R]
+/Limits [(interfacemic__lib_1_1kmp__set__stacksize__target_a6b00b50e1d9d6b3a313c5539b6fc76ff) (interfacemic__lib_1_1offload__get__physical__device__number)]
+>> endobj
+17154 0 obj <<
+/Names [(interfacemic__lib_1_1offload__get__physical__device__number_af70cb969cf961da880f25152e41180a5) 9828 0 R (interfacemic__lib_1_1offload__number__of__devices) 8600 0 R (interfacemic__lib_1_1offload__number__of__devices_a9303a9c3ac032b4b5b0a892851a55fc8) 9830 0 R (interfacemic__lib_1_1offload__report) 8601 0 R (interfacemic__lib_1_1offload__report_ad7309406c058934171655b354445eeda) 9832 0 R (interfacemic__lib_1_1offload__signaled) 8602 0 R]
+/Limits [(interfacemic__lib_1_1offload__get__physical__device__number_af70cb969cf961da880f25152e41180a5) (interfacemic__lib_1_1offload__signaled)]
+>> endobj
+17155 0 obj <<
+/Names [(interfacemic__lib_1_1offload__signaled_a3c2949112e9933ad21ca698041b782e7) 9846 0 R (interfacemic__lib_1_1omp__destroy__lock__target) 8605 0 R (interfacemic__lib_1_1omp__destroy__lock__target_a7172f963daca0599d6cde6fcf64f291e) 10054 0 R (interfacemic__lib_1_1omp__destroy__nest__lock__target) 8606 0 R (interfacemic__lib_1_1omp__destroy__nest__lock__target_ab941877f85f0dc16023d3fdff62c05dd) 10066 0 R (interfacemic__lib_1_1omp__get__dynamic__target) 8607 0 R]
+/Limits [(interfacemic__lib_1_1offload__signaled_a3c2949112e9933ad21ca698041b782e7) (interfacemic__lib_1_1omp__get__dynamic__target)]
+>> endobj
+17156 0 obj <<
+/Names [(interfacemic__lib_1_1omp__get__dynamic__target_a6fe8af6fa0884e61320b6abd8dcf6969) 10068 0 R (interfacemic__lib_1_1omp__get__max__threads__target) 8608 0 R (interfacemic__lib_1_1omp__get__max__threads__target_a923d88a5f7e8e742eab4052cd022fab1) 10070 0 R (interfacemic__lib_1_1omp__get__nested__target) 8609 0 R (interfacemic__lib_1_1omp__get__nested__target_a9fe36fe8eeae05ed97b04d81cf15da9a) 10082 0 R (interfacemic__lib_1_1omp__get__num__procs__target) 8610 0 R]
+/Limits [(interfacemic__lib_1_1omp__get__dynamic__target_a6fe8af6fa0884e61320b6abd8dcf6969) (interfacemic__lib_1_1omp__get__num__procs__target)]
+>> endobj
+17157 0 obj <<
+/Names [(interfacemic__lib_1_1omp__get__num__procs__target_a13af4587be3afb6814c6e795a78625c1) 10084 0 R (interfacemic__lib_1_1omp__get__schedule__target) 8611 0 R (interfacemic__lib_1_1omp__get__schedule__target_a06cb888a2de5d84cb252f7a09767d404) 10086 0 R (interfacemic__lib_1_1omp__init__lock__target) 8612 0 R (interfacemic__lib_1_1omp__init__lock__target_ae0143cd4f71cdaef22620e3cd9ab0911) 10098 0 R (interfacemic__lib_1_1omp__init__nest__lock__target) 8613 0 R]
+/Limits [(interfacemic__lib_1_1omp__get__num__procs__target_a13af4587be3afb6814c6e795a78625c1) (interfacemic__lib_1_1omp__init__nest__lock__target)]
+>> endobj
+17158 0 obj <<
+/Names [(interfacemic__lib_1_1omp__init__nest__lock__target_a4e1ce159d068f5d4399d4377f2042ae1) 10100 0 R (interfacemic__lib_1_1omp__set__dynamic__target) 8616 0 R (interfacemic__lib_1_1omp__set__dynamic__target_a233a11cdae963b41c186256bb0eaaa63) 10116 0 R (interfacemic__lib_1_1omp__set__lock__target) 8617 0 R (interfacemic__lib_1_1omp__set__lock__target_ad89d895bee4a609c0e2ec42ec05b7cbb) 10129 0 R (interfacemic__lib_1_1omp__set__nest__lock__target) 8618 0 R]
+/Limits [(interfacemic__lib_1_1omp__init__nest__lock__target_a4e1ce159d068f5d4399d4377f2042ae1) (interfacemic__lib_1_1omp__set__nest__lock__target)]
+>> endobj
+17159 0 obj <<
+/Names [(interfacemic__lib_1_1omp__set__nest__lock__target_a267a99f95a305d5c31732260a125db1a) 10131 0 R (interfacemic__lib_1_1omp__set__nested__target) 8619 0 R (interfacemic__lib_1_1omp__set__nested__target_a2d14b704495026d644c53bba54e56602) 10133 0 R (interfacemic__lib_1_1omp__set__num__threads__target) 8620 0 R (interfacemic__lib_1_1omp__set__num__threads__target_a15acaf69c9044e0cb29fb85896f6e057) 10145 0 R (interfacemic__lib_1_1omp__set__schedule__target) 8621 0 R]
+/Limits [(interfacemic__lib_1_1omp__set__nest__lock__target_a267a99f95a305d5c31732260a125db1a) (interfacemic__lib_1_1omp__set__schedule__target)]
+>> endobj
+17160 0 obj <<
+/Names [(interfacemic__lib_1_1omp__set__schedule__target_ab7885f8ddaa9153d1a2e336d7d9f6bd9) 10147 0 R (interfacemic__lib_1_1omp__test__lock__target) 8622 0 R (interfacemic__lib_1_1omp__test__lock__target_ae30f77c49a0befb6d8807aec84d38153) 10149 0 R (interfacemic__lib_1_1omp__test__nest__lock__target) 8623 0 R (interfacemic__lib_1_1omp__test__nest__lock__target_a58ca41a517edb870a97a65da2f539aae) 10160 0 R (interfacemic__lib_1_1omp__unset__lock__target) 8624 0 R]
+/Limits [(interfacemic__lib_1_1omp__set__schedule__target_ab7885f8ddaa9153d1a2e336d7d9f6bd9) (interfacemic__lib_1_1omp__unset__lock__target)]
+>> endobj
+17161 0 obj <<
+/Names [(interfacemic__lib_1_1omp__unset__lock__target_a11a0b55435284ba7b75634a128526476) 10162 0 R (interfacemic__lib_1_1omp__unset__nest__lock__target) 8625 0 R (interfacemic__lib_1_1omp__unset__nest__lock__target_a23fb6599f848f2bf6b4e97a9bdb61e8d) 10164 0 R (liboffload__error_8c) 8725 0 R (liboffload__error_8c_a1c564621acc6111ea14e24f2b7900b52) 11040 0 R (liboffload__error_8c_a77b38d4439387e0336a618ba950ae916) 11043 0 R]
+/Limits [(interfacemic__lib_1_1omp__unset__lock__target_a11a0b55435284ba7b75634a128526476) (liboffload__error_8c_a77b38d4439387e0336a618ba950ae916)]
+>> endobj
+17162 0 obj <<
+/Names [(liboffload__error_8c_a99a74190d6fa41077c0f739be401c196) 11039 0 R (liboffload__error_8c_ad36243a66d6b30f74fd72dd0f78d7264) 11038 0 R (liboffload__error_8c_afd6aa24b3a04e64b24c8acdbc3f6c083) 11041 0 R (liboffload__error__codes_8h) 8726 0 R (liboffload__error__codes_8h_a1c564621acc6111ea14e24f2b7900b52) 11394 0 R (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60) 10786 0 R]
+/Limits [(liboffload__error_8c_a99a74190d6fa41077c0f739be401c196) (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60)]
+>> endobj
+17163 0 obj <<
+/Names [(liboffload__error__codes_8h_a38efbf7bcf409d60d511ac7fc9dd0096) 11183 0 R (liboffload__error__codes_8h_a77b38d4439387e0336a618ba950ae916) 11395 0 R (liboffload__error__codes_8h_a7b07c33fffcd30294ec6c10fa531c531) 11391 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222f) 11358 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa00df6b6e95d0ffde79f9348011e00d3f) 11363 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa29803c6e19aa0273859cd57d5b2ccdc2) 11366 0 R]
+/Limits [(liboffload__error__codes_8h_a38efbf7bcf409d60d511ac7fc9dd0096) (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa29803c6e19aa0273859cd57d5b2ccdc2)]
+>> endobj
+17164 0 obj <<
+/Names [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa306141d2ab107dc27ade53d298bf5d76) 11379 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa31cbdb17dda46842d5342ca8b8167d33) 11361 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa3a4af8225d497bb7403ff4d60cc5a671) 11373 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa3e43fba97185be71f01a39ac26975446) 11369 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4119e95d7d5c956470fb2193ec894a0e) 11374 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4ea95ace09d3548bc1161edfa95c89c5) 11375 0 R]
+/Limits [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa306141d2ab107dc27ade53d298bf5d76) (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa4ea95ace09d3548bc1161edfa95c89c5)]
+>> endobj
+17165 0 obj <<
+/Names [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa597d0b7aba004fc37b6270d34f5511e6) 11370 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa6132c6e100838329bd32d432bd231375) 11360 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa6acb9d68a004fb0464cd097be18c5369) 11372 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa70ca5daf2604b86c0c503277832d2ada) 11364 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa889333ade860becd857f515402c6296f) 11371 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa918a7ae99d1c6f75a57b9b44eeb830ee) 11368 0 R]
+/Limits [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa597d0b7aba004fc37b6270d34f5511e6) (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa918a7ae99d1c6f75a57b9b44eeb830ee)]
+>> endobj
+17166 0 obj <<
+/Names [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa98468b76a0e91df3175d70d18aa21a25) 11378 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa9918deae6149ce6c59bcd70efd5eafa8) 11362 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa9ac6d3cde851eed8f221afcb8d2e5688) 11377 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faa18fc748c5a86c2e15a55042507c63be) 11376 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faa4c4f8ee0bf954aae1417c6bf5bf9932) 11359 0 R (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faeb9ee4de6a2ae854fd379b1356604b10) 11367 0 R]
+/Limits [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222fa98468b76a0e91df3175d70d18aa21a25) (liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faeb9ee4de6a2ae854fd379b1356604b10)]
+>> endobj
+17167 0 obj <<
+/Names [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faef46613bbc5ff744085963c207ed2a4e) 11365 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63) 9993 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0057a99bf4e82581dcca244fb7981c1f) 11258 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0113af442a4a9c7fb0275cdaa3818e37) 11270 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a01b198bb7ea75123b635b7d704ddb0ea) 11249 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a06c098dc0cc021e3c4925d59de5ab5cb) 11260 0 R]
+/Limits [(liboffload__error__codes_8h_a81bb0bf269edd84cb13595a3b13e222faef46613bbc5ff744085963c207ed2a4e) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a06c098dc0cc021e3c4925d59de5ab5cb)]
+>> endobj
+17168 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a087dff40c2723fb4df55d40ef50dce63) 11221 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a08b2c430b4c4d2064b37b6616cfa3397) 11188 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a0fb62c13b8051fe994b9fa1524dcf784) 11268 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a10e0a8a7e857f898d9217b2b9067bdd3) 11191 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1113b21353c527f48f0498ba8b23cde4) 10790 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a135f997949ba2a630b0ca780eb1a2936) 11282 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a087dff40c2723fb4df55d40ef50dce63) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a135f997949ba2a630b0ca780eb1a2936)]
+>> endobj
+17169 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1486a07ed02284be0e541340e91cc0a7) 11287 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a19aa9dd81333eca1527959a8bdffd652) 11297 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1a750fea006ae8fb0a87681434c2e724) 11355 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1d376034f2795211ae17c115004ece09) 11210 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1fb8508aaff077c3380849112b1fe9f2) 10791 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a291f5b8a7c2545b2015a7725c0ae8c94) 11356 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1486a07ed02284be0e541340e91cc0a7) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a291f5b8a7c2545b2015a7725c0ae8c94)]
+>> endobj
+17170 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4cdad9f7ec709b5f705e569818d30) 10787 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4de2b9581227bce54a9ee473c6ea9) 11198 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2be0eacde78d48ac71f1f1e45c6cc925) 11211 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2cbf29fb6186607b47ec3909c6340565) 11276 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2e04e6213c4604ea57266bf5620bb5e0) 11228 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a3b1a26109ea3a369b80f89ecc8396778) 11296 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a2ac4cdad9f7ec709b5f705e569818d30) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a3b1a26109ea3a369b80f89ecc8396778)]
+>> endobj
+17171 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a430deb789cfbae8601e81e195eb4c4fe) 11209 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a461a4f225f1260cc488f8d3ca521758a) 11230 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a464c627d89991fccdea2c2e39e372a17) 11246 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4c0deda2b6b576a5b41c2365da65adf1) 11247 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4c65488743115c1a9379b5ff2e8b3b83) 11229 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4dc7a524e3c3da0519cafd8da0c77d8d) 11184 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a430deb789cfbae8601e81e195eb4c4fe) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a4dc7a524e3c3da0519cafd8da0c77d8d)]
+>> endobj
+17172 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a516af23bcc63938124adeae722c0b095) 11286 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a53fc8c0e4462c8b86e53e3e73ca87a0b) 11185 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a57c093941c261fa5bd29e8c09f8f0dbe) 11275 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a57c32bba84f37f1b28315b820d15484c) 11283 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a58e73a8b50bcd84989bb3c50eaef23e4) 11233 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5c9dd15b099da09263a1e87d279afea9) 11265 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a516af23bcc63938124adeae722c0b095) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5c9dd15b099da09263a1e87d279afea9)]
+>> endobj
+17173 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5e40420e02dea7ea2c1a94309a7a3d66) 11203 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a632a6793150c097111bdff3bdc440f21) 11223 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a669dca197a011a09f7114d74f829cfa8) 11259 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b40720f3d6d032915d5d865f42add20) 11293 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b4807807a9036855d8a75a55d798d37) 11206 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b558f9533791b768753032e3be4504c) 11235 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a5e40420e02dea7ea2c1a94309a7a3d66) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6b558f9533791b768753032e3be4504c)]
+>> endobj
+17174 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6da0531112c30682534b734dc0daf49c) 11202 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6da340c7e9f675bea0a952664369be39) 11234 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6dac1854c8a9865cb2074229a6cc5e8d) 11295 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7325580b15c6ab21a7a3ecfe6f1dbe2c) 11291 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7485b2373e434ef7cefc18fd5a844440) 11281 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a756bf85b5493c5388f4638534b2b9906) 11255 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a6da0531112c30682534b734dc0daf49c) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a756bf85b5493c5388f4638534b2b9906)]
+>> endobj
+17175 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d3290ed454af3eabd183bf623f62e51) 11214 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d73b129e6b6e2b0ef5534f1ad8ae925) 11217 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7da3530e4ae6f13a7597fbc68e0d2f93) 11189 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7ecc7339b02b9f6ad90a2c52bb408e63) 11263 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a804d8709e96f1e77ce9619666aa20d32) 11294 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a807c25d921c2bdf9f72a12ac7699a2e2) 11284 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d3290ed454af3eabd183bf623f62e51) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a807c25d921c2bdf9f72a12ac7699a2e2)]
+>> endobj
+17176 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a855a898bd521e12e64c7e24ae24b27af) 10833 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a85b5d92145d15761ef48e1a2bb05daca) 11220 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a86f9e29ae571c4b5033d511740cb0901) 11244 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a896ae98379f741207af1dae068b01528) 11201 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8c30cbf5e1e2471f9c85210fa5130c11) 11240 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d5d51f7dd8d7ef92a8084cbf91f4835) 11288 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a855a898bd521e12e64c7e24ae24b27af) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d5d51f7dd8d7ef92a8084cbf91f4835)]
+>> endobj
+17177 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d84d3f445a3fb2c4ca0085e2138b689) 11236 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8ed6109e08047adf44d61cd502f736c9) 11289 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8f32c3443e9ee45d4529a4d785e97ace) 11204 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8faff756c49d752a5364ec7296c6764e) 11262 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a92039f8a69fdb7aa5411538cf9f3c3df) 11250 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9205be297cce4d25a67ab49c521c6397) 11196 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a8d84d3f445a3fb2c4ca0085e2138b689) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9205be297cce4d25a67ab49c521c6397)]
+>> endobj
+17178 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9474341378321bbb66dd065c9d1728e3) 11186 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a979b0719c315618bafd2c909611b1ae9) 11245 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a97e71de76e60114f2bdf540e7a2a1940) 11194 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9c2715ca0b96db51a6f1ae9505099814) 11253 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa0a61cb4bb6f511670f2417fb98ae044) 11216 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa3e65cdf985163936c2f403ed716335f) 11285 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a9474341378321bbb66dd065c9d1728e3) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa3e65cdf985163936c2f403ed716335f)]
+>> endobj
+17179 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa664ee6e40459ec8b4df02c70d93b5f5) 11225 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa7447d3f09830b1b8ba000808676db57) 11208 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa837c794f9251ce7020e8f4e8268b55e) 11277 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa87685d2355aed053ba0734737ddb0d0) 11271 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa957650915ce4ad53d5d1fe2ff26bf05) 10789 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaa5736205c9119f91cf9a369a18689f4) 11195 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aa664ee6e40459ec8b4df02c70d93b5f5) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaa5736205c9119f91cf9a369a18689f4)]
+>> endobj
+17180 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaf0ceb89462335ef31228a5026aa2dfc) 11267 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaf7b421cdf6f009f4b8fc1de01c0a8a0) 11232 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab20eac9f92bf969e4fa1ef775a17b5e1) 11241 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab682f91caccc0a58a6e61ef6305dba1a) 11227 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ab9bfb936421d32429f0f0b411f670662) 11269 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aba67870a74a2f777750b46b5e8d14046) 11200 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aaf0ceb89462335ef31228a5026aa2dfc) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aba67870a74a2f777750b46b5e8d14046)]
+>> endobj
+17181 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abcd840c4fb9b24b9f620a853337bb438) 11226 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abd07c54594fed3e8948d58313507c85b) 11256 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abd2c0d6d453ad54f293f1765804a4549) 11238 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abfcd87967eadf76908907997235bd8de) 11218 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac3a9ebae19e48211cf972ff771c1b4ba) 11248 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac4cb11dd85579ef99579e6ffa1b9e1a4) 11215 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abcd840c4fb9b24b9f620a853337bb438) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac4cb11dd85579ef99579e6ffa1b9e1a4)]
+>> endobj
+17182 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac536e101dc421f40f0240d2631fa6352) 11272 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac68f98d86f8d42de66fe30ee4db462e7) 11193 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac7256f8d51f2f313929650c02f3d1fd9) 11279 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac74c1eb199634e711c4770db5ba09cc2) 11199 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac8d611becf657f920606af68b24ae1be) 11261 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acb12d8217a05464069425ada2f60ba5d) 11274 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ac536e101dc421f40f0240d2631fa6352) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acb12d8217a05464069425ada2f60ba5d)]
+>> endobj
+17183 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acd12239059cd447952753c19bc6d1f24) 11231 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acd784c54bf0d238b7e3e3a3606e71a7b) 11207 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acec73118dbd8cca5a3f8f7810f7a6d1d) 11252 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aced1b8cb4c11fad1aeae3130a46da7ca) 11273 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acf604fb161c6cfcd37f11312ffb4bcc9) 11266 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad3455fc21fc2758323022dac43dea1ab) 11197 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63acd12239059cd447952753c19bc6d1f24) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad3455fc21fc2758323022dac43dea1ab)]
+>> endobj
+17184 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad354a288faf30e1d7fda0390cf09a896) 11278 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad3c9a856ba072cc208ca98e6a534a2fa) 11224 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adb066b39d62a6ed3149f7db53ce9cfa5) 11298 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adc7ef5df1245adcf2f64d4e14eaa3fd5) 11257 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf4f668cd226d9ad9882506ca8b530f9) 11239 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf6544933d90ed3f043320e0ae28cf19) 11212 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ad354a288faf30e1d7fda0390cf09a896) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf6544933d90ed3f043320e0ae28cf19)]
+>> endobj
+17185 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf9071b7ce718f4e86860b52d7331714) 11219 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae07463f0fab25114f7df901dcd8433cd) 11264 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae129086851235a51223a33ede554dd35) 11190 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae5e2e69a99ca7328fef73c76853ced27) 11222 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae9e7f34fdefd0cc070f9dd6419dc6fed) 11254 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae9f95d4e6107b53cdb8cc6cb6fb3ab3c) 11192 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63adf9071b7ce718f4e86860b52d7331714) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63ae9f95d4e6107b53cdb8cc6cb6fb3ab3c)]
+>> endobj
+17186 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aeb5ce749f64e7cabb4da23a7fe223230) 11213 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af0056eacf7aefc8164d920c543784d28) 11205 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af107d31e55a4813c9a54ff3289e34399) 11292 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af3087b851426acada2705bed6a6ada13) 11243 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af4d0a63688d5e69cf112c18ccc319b93) 11237 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af674c3cfb9c676829925ca0185370924) 11357 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aeb5ce749f64e7cabb4da23a7fe223230) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af674c3cfb9c676829925ca0185370924)]
+>> endobj
+17187 0 obj <<
+/Names [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af770475a2e32ec91c759880c17030241) 11280 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63afc63b03ad46c2277df014192ce0a8308) 11251 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63afda2965dc13432b5f9e6122b3099d2cf) 11242 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aff8197124e169a3f7af098800dd24708) 11187 0 R (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aff84740966d7b4b3ce34b14d376afac3) 11290 0 R (liboffload__error__codes_8h_a993122187033faf9e78d8fb7c9a811ed) 11180 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af770475a2e32ec91c759880c17030241) (liboffload__error__codes_8h_a993122187033faf9e78d8fb7c9a811ed)]
+>> endobj
+17188 0 obj <<
+/Names [(liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) 11182 0 R (liboffload__error__codes_8h_aa9335374f7596a4de1aaae70c8e227ae) 11392 0 R (liboffload__error__codes_8h_ae25971c227ebc234c511a0e3e74216d3) 11181 0 R (liboffload__error__codes_8h_aeda280e48382848e55705c813e9da810) 11396 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0) 11380 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a0a111fd5ccca2fd8bdf7568e9c3a589c) 11388 0 R]
+/Limits [(liboffload__error__codes_8h_a99a74190d6fa41077c0f739be401c196) (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a0a111fd5ccca2fd8bdf7568e9c3a589c)]
+>> endobj
+17189 0 obj <<
+/Names [(liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a1533ec18751ed7a728fd7fc9a7528d26) 11385 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a2f5550a680bdbb7ce09be18d865343af) 11386 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a520feccc0120a43c6b8510eb8d812a31) 11390 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a59b47bd36b7e52475bd001e282a19ca4) 11381 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a616bbcce14cb29a3731f396fcfebdd90) 11383 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0aa2e509701103e21eb2cd55244609a705) 11384 0 R]
+/Limits [(liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0a1533ec18751ed7a728fd7fc9a7528d26) (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0aa2e509701103e21eb2cd55244609a705)]
+>> endobj
+17190 0 obj <<
+/Names [(liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0ae0c232610b5155db9fd9191ebe48d40e) 11387 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0af8eedf978cb4c7ed492bdcc32da9381f) 11382 0 R (liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0afd3989234541acad5d6951325809653f) 11389 0 R (liboffload__error__codes_8h_afd6aa24b3a04e64b24c8acdbc3f6c083) 11393 0 R (liboffload__msg_8c) 8727 0 R (liboffload__msg_8c_a0ec0d87f35014a90d0ebe5494aa0de16) 11426 0 R]
+/Limits [(liboffload__error__codes_8h_af9857bd5ad8b5d609f733a118774c8f0ae0c232610b5155db9fd9191ebe48d40e) (liboffload__msg_8c_a0ec0d87f35014a90d0ebe5494aa0de16)]
+>> endobj
+17191 0 obj <<
+/Names [(liboffload__msg_8c_a5ff1c71d42d185d08e842e4d01e043a1) 11428 0 R (liboffload__msg_8c_aa9335374f7596a4de1aaae70c8e227ae) 11427 0 R (liboffload__msg_8h) 8728 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55b) 11751 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba00dadc96006235ff17f62263bc20a8f0) 11673 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0246a3f0848e9eb3ce758045ee464256) 11727 0 R]
+/Limits [(liboffload__msg_8c_a5ff1c71d42d185d08e842e4d01e043a1) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0246a3f0848e9eb3ce758045ee464256)]
+>> endobj
+17192 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba032a65a22e209ffdab803fb4f3640bf4) 11685 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba03b581feb62bd9562b51ae4cd67e0a9d) 11706 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba048c51c227644c948de54b6008e3be75) 11612 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba04e53bdf3d410e02085b5743104fd2e7) 11763 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba05338d4784b36824de05100edda89bb1) 11710 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba07b674473e78ccc545fa87ca1ff50e99) 11676 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba032a65a22e209ffdab803fb4f3640bf4) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba07b674473e78ccc545fa87ca1ff50e99)]
+>> endobj
+17193 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba084763886d48747225944454265face6) 11713 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba08c71b5be1681df0a3e09bc397521755) 11675 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0debe0f70ddc44de63d2f77347fcd042) 11613 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba0f75b4b217b9c3af5febc07c30f79961) 11757 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba10504d6dc023d0d5f5f68b0e0bf96350) 11622 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1320dc4a51d6e9a8f69c5b90e2d648bc) 11642 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba084763886d48747225944454265face6) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1320dc4a51d6e9a8f69c5b90e2d648bc)]
+>> endobj
+17194 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba14034803ed5307560e5fe69b37ad7b5e) 11666 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba147db879c6dab7baa15fbc93c50138ad) 11672 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba14ff76e76d3be295eab0a2399d28ed13) 11691 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba156134c6ecda804a9f08c4b3bf5b8ea5) 11766 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba194b1e7917e10f54986e86db2d227825) 11734 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba19af2129ecb0749e38f1b7f41af743ca) 11754 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba14034803ed5307560e5fe69b37ad7b5e) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba19af2129ecb0749e38f1b7f41af743ca)]
+>> endobj
+17195 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1cc2df011e47e46f8e54e61f4f7da3aa) 11697 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1f18417bc65aa221394cf59ce8ece01e) 11762 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba23d488c96753d2dd82051f2571b7970e) 11657 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2596874c1cf84e26b70ab9727f18f6d5) 11633 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba26d9c375cc42f723ce775a9506e9df88) 11647 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2704b9149ef6f19d543bd5c6cda90163) 11680 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba1cc2df011e47e46f8e54e61f4f7da3aa) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2704b9149ef6f19d543bd5c6cda90163)]
+>> endobj
+17196 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2c8a5195b2a6cfa0e5667ceae1b57c04) 11728 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2cafa25e37b8ac1acba9ab3ef68228b7) 11638 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2d3ee1a89f3969d72f36b1e17677bb7e) 11730 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2e2de8fbbaad80cdf507f907a2d19ad8) 11758 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2ee8de6a7672810c0a751fb6704e3adb) 11646 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2f9a0dc5d9e92ae8412e78f2fa5dbfe6) 11637 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2c8a5195b2a6cfa0e5667ceae1b57c04) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba2f9a0dc5d9e92ae8412e78f2fa5dbfe6)]
+>> endobj
+17197 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba300a47da43d2da79c8064d425e3774a3) 11684 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba30bdd0f2c6c7e9bf144c26f700220e46) 11723 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3109c95e292aec685518946d0c51df56) 11694 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba341a29168a10d87be85bc2626023fb94) 11742 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba35f6e91ee6ebbe6f234edccf915129f8) 11741 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba367cbe74765542d20e273c83d18900f6) 11667 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba300a47da43d2da79c8064d425e3774a3) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba367cbe74765542d20e273c83d18900f6)]
+>> endobj
+17198 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3730d8d0f2eee789761903282e46f1f9) 11683 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba37eeb7c8ca838d1abea8155bd2681cca) 11611 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba38696cfb610c007c608585b0b7e020ae) 11722 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3da5a5098f277269bb692d52430693d6) 11755 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3de00e31ff98af9eecc102c478f06dd5) 11604 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3f6d06f3d5cd0d2d53503cc228f74083) 11736 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3730d8d0f2eee789761903282e46f1f9) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3f6d06f3d5cd0d2d53503cc228f74083)]
+>> endobj
+17199 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba402c22e7e9ba27c99d1ce220766f1e00) 11627 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba406a39cf4333c380d55e6752f4397c97) 11707 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba468387bb22b7fb26aa83a937a717bca2) 11624 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba468ca8cff588ec28a128d2000ec9c376) 11739 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba47b998049e9cb438d16b3ccf57f27b31) 11724 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba482dffbb37ca2c45c715ed58018e662a) 11614 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba402c22e7e9ba27c99d1ce220766f1e00) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba482dffbb37ca2c45c715ed58018e662a)]
+>> endobj
+17200 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba4e44f2555067cfc5c15e98bde4af7a7a) 11702 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba4fbc108733128285c370f2798e63d2f0) 11607 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5134cff42b812c699315d1bd66445733) 11681 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5140925409196f71b08fcdac5d9bb5c2) 11671 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba536e213442c4abba4b2934d82952e3e9) 11662 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba545de9f9a0198adfe53c6a16fba9845f) 11690 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba4e44f2555067cfc5c15e98bde4af7a7a) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba545de9f9a0198adfe53c6a16fba9845f)]
+>> endobj
+17201 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba551195b14734773fb9ebbab39dc562ed) 11629 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba56fd16c57cc94f8224fd1076c3963220) 11618 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba5c88a0e9e14f07fd7841ca9a87c4db20) 11674 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba61d033beecdb78a230fcf75e07bc9e53) 11715 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba62cc69b05957939c36c47a1f40ada294) 11704 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba65faefb3df8c4fe5100f600888d0e8ca) 11717 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba551195b14734773fb9ebbab39dc562ed) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba65faefb3df8c4fe5100f600888d0e8ca)]
+>> endobj
+17202 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba68992d0dfe043b785163644b62d99bfa) 11740 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba692bbbf573dfec9b717d05b12271acbf) 11625 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba6db8884f1960f50d67716ba4e015f07b) 11636 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba740c53fe3d85faa79a1c69892d152491) 11658 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba776771c43e40e73fb76064295f561e98) 11689 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba781b6b8f6de5fca2a276c4a54e2a7da3) 11615 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba68992d0dfe043b785163644b62d99bfa) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba781b6b8f6de5fca2a276c4a54e2a7da3)]
+>> endobj
+17203 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba793355e67e678473b7d9315dd3d0ff57) 11655 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba794383d68342455662479b9aa2baa01c) 11692 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7b3e1759cbae75e011206b549f8813a5) 11708 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7b5e3238e19b74b3433f97f068c536e8) 11653 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7bd9db959fc27dc0fcf0b6f04c2bee70) 11668 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7d15ca551d3be6af6b905401fda920ff) 11610 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba793355e67e678473b7d9315dd3d0ff57) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7d15ca551d3be6af6b905401fda920ff)]
+>> endobj
+17204 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7e8e1e14304028f62aed867a74305d9c) 11682 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7fd99079ea809ec1da4252fad0ca10c6) 11737 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba81f144898aecf5772414d07ebeae7992) 11688 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba84bc2718a0b156a28d0bcbd462e8ef14) 11623 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba869c4dc4591cfccfb3b7f027dfa07acc) 11720 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba886f229aad81a550a014b087cc198c5b) 11620 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba7e8e1e14304028f62aed867a74305d9c) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba886f229aad81a550a014b087cc198c5b)]
+>> endobj
+17205 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8ab2b6de12dd73fd9b572c83a6b192fa) 11679 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8b2889b502646963e804de539432b3f9) 11619 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8b4cf5eb2ddd6738d8a76890924871be) 11721 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8bc2609a10917620697ab398e45ce404) 11726 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8dfdc8ce3b0ce60e806a8f47e6f4aab7) 11700 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8f828f829bfcd3afb47449021f15cad8) 11621 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8ab2b6de12dd73fd9b572c83a6b192fa) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8f828f829bfcd3afb47449021f15cad8)]
+>> endobj
+17206 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba93c17658410d278ff9a7a42c15781a4b) 11703 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba979546f847246ca31af9cff65ea0f0f1) 11718 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9bf1c18ed1683b80cd64606219ab75b2) 11732 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9cdd82470dd646683d0906fcda50391f) 11669 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9d6a27fcb2288ef795c27c4e04c28c18) 11705 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9e753dc49c499bb359cbe9c7675c190b) 11660 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba93c17658410d278ff9a7a42c15781a4b) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9e753dc49c499bb359cbe9c7675c190b)]
+>> endobj
+17207 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9f941853d2f61c93597570dec3ad005b) 11617 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1062eb18d7760da77beb73f236acd8d) 11639 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1a102d4934eae9d036ee13f1a9dab10) 11640 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa1dc2b860b4fbfd2676c45fa0ea7472a) 11608 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa229ff4dfd34b959e7b8c1236de309a3) 11698 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa6605704717136f93a8f833fd48678da) 11644 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba9f941853d2f61c93597570dec3ad005b) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa6605704717136f93a8f833fd48678da)]
+>> endobj
+17208 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa7be2ed6b2dd4288f8483530b053681e) 11641 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa80e0ab4730aa8f609c8ceac684a9253) 11686 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa96b2550d32efff81bc4909526ca4570) 11652 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaab97fbf582821a64162c64162059d4c) 11609 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaad07efaae813d69f76a0ded3f53975e) 11759 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baad2e822b10f25fa717b94920ac341d8f) 11716 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baa7be2ed6b2dd4288f8483530b053681e) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baad2e822b10f25fa717b94920ac341d8f)]
+>> endobj
+17209 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaf7f1c8d2bb90f120b11dc3d5c60b51a) 11738 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab0a0a77e791782b86d60edab1ee14f9e) 11628 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab4e5b4e6f385a4f56993283e729b3944) 11752 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab5ff3862d8374714be03f0d73e1bb64d) 11664 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8ba677a7630f7fd3de3699496aefc8d) 11699 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8dea710a23ce10d3c3cd4e525a16270) 11695 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baaf7f1c8d2bb90f120b11dc3d5c60b51a) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab8dea710a23ce10d3c3cd4e525a16270)]
+>> endobj
+17210 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab921b8d9dfbc4a0b3e452c98fc5a146f) 11764 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55babac8b45ef75098a0ac70833405cb8a1c) 11605 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac01007d24fb873b3c33ff79fc09b8c36) 11711 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac054b3ee8df05cbfeaa5aa2cabde3f8e) 11677 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac19d989394457e8425288ed2d86ab049) 11733 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac25e1aa5859beaab7998e01e58738ff5) 11654 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bab921b8d9dfbc4a0b3e452c98fc5a146f) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac25e1aa5859beaab7998e01e58738ff5)]
+>> endobj
+17211 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac2b746038a8ffe9b48482022122ca236) 11725 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac31dd3646109c66fe7cbbb0bd8af6f2e) 11650 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac35e222fe4f3da3d931004ff7bddebd7) 11648 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac674c0928eb2d44a7f90c3b7a1378206) 11709 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baca77c117fc1e045c348b64631ad177d1) 11765 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacca03d87e00f68511c1a45a0638f899f) 11729 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac2b746038a8ffe9b48482022122ca236) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacca03d87e00f68511c1a45a0638f899f)]
+>> endobj
+17212 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacf1ab2c31d41036f20d0506467550b4a) 11665 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacfba1640f811f88e9f665184cdffa372) 11626 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad1884d4d3888d0a86ee8b8cc58f873c0) 11643 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad1b81fd0e95c46b5ba2b8cb4f35f4719) 11712 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad30fd4927b305b4a0456a655ac4de52c) 11645 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad45f8630597d5d298d43e793f8a4847c) 11635 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bacf1ab2c31d41036f20d0506467550b4a) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad45f8630597d5d298d43e793f8a4847c)]
+>> endobj
+17213 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad9286b1a8ef11d797183fdcfda9db2fe) 11659 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bada67fc618c83c40b4007273517567f7d) 11651 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badbb28f476106f966ad6458dfe6781aec) 11630 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badcffcfbbcb43b0f181d10931fb08c783) 11656 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baddf223886413a216b5740873d720c929) 11634 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badea6874ab34279c77a4bf525963840a5) 11756 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bad9286b1a8ef11d797183fdcfda9db2fe) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badea6874ab34279c77a4bf525963840a5)]
+>> endobj
+17214 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badf70b49a55d22add9ee1be0265bce62a) 11649 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae099cd3b40113683340ad54beb7c744e) 11663 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae1a3dc7245b38b63a059aa22d4717baa) 11719 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae4675d98190368162ce73dd280355bf0) 11735 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae61f95f6cb7886e058a7f0eaf5954df6) 11631 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae763d2ae11de74e3bf00484f0c420b5b) 11606 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55badf70b49a55d22add9ee1be0265bce62a) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae763d2ae11de74e3bf00484f0c420b5b)]
+>> endobj
+17215 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae8dfcc98bbc26ee83207d04e48590c47) 11731 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baebd815bf6d53c441f6df172efd96060f) 11753 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baee574bb1a61ded8adab3a94df685074f) 11693 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baeec0fab545dd306761ecef04e0e4f18a) 11701 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baef98a2bd6288841e66cd96e78d561824) 11696 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf0f0422ef54cdc3a457efd8d476e02b0) 11678 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bae8dfcc98bbc26ee83207d04e48590c47) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf0f0422ef54cdc3a457efd8d476e02b0)]
+>> endobj
+17216 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf60de06cb95541858eaeb6e72ef263bb) 11661 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf7c1f91006b2120b6cd8e4b8d694b872) 11714 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf99a305d97f03cd98baf1980bd463a62) 11687 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafacf553e2bd58e82e0ce8261e6c1a62f) 11616 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd826e741fee5955d4c53f1cf77e3f19) 11761 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd8c504c772936c9b428429b6b716729) 11632 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baf60de06cb95541858eaeb6e72ef263bb) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd8c504c772936c9b428429b6b716729)]
+>> endobj
+17217 0 obj <<
+/Names [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baff36e0a6b9bd9e90b8d203d2f7ba1228) 11760 0 R (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baffbf695b405cd722132f4d954ec4b0fb) 11670 0 R (liboffload__msg_8h_a30a3ddc82f2b2149b47c7760222fb0e6) 11767 0 R (liboffload__msg_8h_a7cb6e9142d8b076d6cf08143f14b3b44) 11603 0 R (mic__lib_8f90) 8729 0 R (namespace_c_o_i) 8244 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baff36e0a6b9bd9e90b8d203d2f7ba1228) (namespace_c_o_i)]
+>> endobj
+17218 0 obj <<
+/Names [(namespace_c_o_i_a00ac76930544c218724e48a664dbb514) 8852 0 R (namespace_c_o_i_a018288316481de41a8c738ae5d1e04dd) 8849 0 R (namespace_c_o_i_a04583f1102d6820e8dde34fc1265a425) 8860 0 R (namespace_c_o_i_a0916aefb5a0b674e906359e4f7287a6e) 8842 0 R (namespace_c_o_i_a16be55d13bb6fa5e80bc55d97cfcf4bf) 8830 0 R (namespace_c_o_i_a26eaf859a90d7b536bfe63ab65fd0e0e) 8834 0 R]
+/Limits [(namespace_c_o_i_a00ac76930544c218724e48a664dbb514) (namespace_c_o_i_a26eaf859a90d7b536bfe63ab65fd0e0e)]
+>> endobj
+17219 0 obj <<
+/Names [(namespace_c_o_i_a6416fadea08e1b102fb5d28fb1e6deab) 8848 0 R (namespace_c_o_i_a647e243ec12d6d4a89b08f69686503b7) 8838 0 R (namespace_c_o_i_a66a3a2f870d0ee47c12a471826933dcb) 8836 0 R (namespace_c_o_i_a683f0c9bdca244c79055953be296af6b) 8861 0 R (namespace_c_o_i_a7094bb10cb648af45c6407c9e7e1b53d) 8859 0 R (namespace_c_o_i_a72cc14ccc502560229879d065a15c9a2) 8851 0 R]
+/Limits [(namespace_c_o_i_a6416fadea08e1b102fb5d28fb1e6deab) (namespace_c_o_i_a72cc14ccc502560229879d065a15c9a2)]
+>> endobj
+17220 0 obj <<
+/Names [(namespace_c_o_i_a7937a416de74b923010e90db852006c9) 8847 0 R (namespace_c_o_i_a7a1266796d866ba1e5a95ef174b24919) 8840 0 R (namespace_c_o_i_a7f5edae2a0f54a117256e0540a072c12) 8844 0 R (namespace_c_o_i_a985ac573f577001095fd484201ef022e) 8850 0 R (namespace_c_o_i_a9aeeb4701f5ff5ded1e832018813bf09) 8835 0 R (namespace_c_o_i_a9c1c5649b66e50cdd494f50de8499a03) 8841 0 R]
+/Limits [(namespace_c_o_i_a7937a416de74b923010e90db852006c9) (namespace_c_o_i_a9c1c5649b66e50cdd494f50de8499a03)]
+>> endobj
+17221 0 obj <<
+/Names [(namespace_c_o_i_a9d6634a9e755f67551ba7960567e96ab) 8832 0 R (namespace_c_o_i_ac75e7aa47df27f7b24871202f85da468) 8845 0 R (namespace_c_o_i_ac88543b95bf6b7d5b210ad34fff6b513) 8839 0 R (namespace_c_o_i_ad624e44013db72b65c53c1491716ee5c) 8831 0 R (namespace_c_o_i_ad91c9dbc84b4b5b2d14b2de2bcdf2a25) 8837 0 R (namespace_c_o_i_aec99fbf6184d79fb267513ec458de024) 8843 0 R]
+/Limits [(namespace_c_o_i_a9d6634a9e755f67551ba7960567e96ab) (namespace_c_o_i_aec99fbf6184d79fb267513ec458de024)]
+>> endobj
+17222 0 obj <<
+/Names [(namespace_c_o_i_af63016ce18fa97e11e2c7fbd087df8b6) 8833 0 R (namespace_c_o_i_afa10536d5a48576f8850f28d1d734435) 8846 0 R (namespace_o_r_s_l) 8245 0 R (namespace_o_r_s_l_a1e1bb4371c5bac17c6a26f3ffbf6baac) 8880 0 R (namespace_o_r_s_l_a3c176249d2f834112b6677d4309c985f) 8881 0 R (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b) 8882 0 R]
+/Limits [(namespace_c_o_i_af63016ce18fa97e11e2c7fbd087df8b6) (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b)]
+>> endobj
+17223 0 obj <<
+/Names [(namespace_o_r_s_l_ab1d74c38c46775592b766bc06908581c) 8884 0 R (namespace_o_r_s_l_af9fb019f8e0d5d4ff8796b42c127acd2) 8883 0 R (namespace_o_r_s_l_afc6f8a14d2295a7c959d2f583ae6ea54) 8886 0 R (offload_8h) 8730 0 R (offload_8h_a02f8ad5383a87505b6fbb0793d9adc46) 11948 0 R (offload_8h_a0ba10731a8f3b08b4daa3b3ce9eb04e8) 12029 0 R]
+/Limits [(namespace_o_r_s_l_ab1d74c38c46775592b766bc06908581c) (offload_8h_a0ba10731a8f3b08b4daa3b3ce9eb04e8)]
+>> endobj
+17224 0 obj <<
+/Names [(offload_8h_a0dc024004959b0689c8c0797545ba539) 12038 0 R (offload_8h_a1011ab0c45eba008822405956a76f89e) 11952 0 R (offload_8h_a1345f47c36719db8c63c15ee8623fbff) 11939 0 R (offload_8h_a173a599cb71e90363876cf3432c07802) 12039 0 R (offload_8h_a1a2e8e21269cd56b5416daeafd1864d2) 12030 0 R (offload_8h_a1e1563d04c8034fe03e103f00b15d8c0) 12031 0 R]
+/Limits [(offload_8h_a0dc024004959b0689c8c0797545ba539) (offload_8h_a1e1563d04c8034fe03e103f00b15d8c0)]
+>> endobj
+17225 0 obj <<
+/Names [(offload_8h_a2660b0549f99e3d4dfe393365204cc3b) 11960 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8) 8911 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a279f28911863f7da1286cb9fe21e0e2f) 9853 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a50bc25f1a6147665d9588783b54167c1) 11931 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a72d58cfeba9924ff31f947038c3b5b25) 11930 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a93269fd4acd17b027c88b9aa0aff3b36) 11932 0 R]
+/Limits [(offload_8h_a2660b0549f99e3d4dfe393365204cc3b) (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8a93269fd4acd17b027c88b9aa0aff3b36)]
+>> endobj
+17226 0 obj <<
+/Names [(offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8aa247810aa67d24e460040a43bf2e2ead) 11933 0 R (offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8aa52ae84161a6467305a276b662b4ea08) 11934 0 R (offload_8h_a2d227602e926615ff4ded70e1edc326c) 11937 0 R (offload_8h_a31213582a2896ef342d3bc88c379f345) 12047 0 R (offload_8h_a33d2b782ddf82056f797bd7abe579b9f) 12026 0 R (offload_8h_a354af3ae9805fc9d87c0690345e8ee3b) 11956 0 R]
+/Limits [(offload_8h_a2aefb0f7c12f6cfcca85f83ece7820d8aa247810aa67d24e460040a43bf2e2ead) (offload_8h_a354af3ae9805fc9d87c0690345e8ee3b)]
+>> endobj
+17227 0 obj <<
+/Names [(offload_8h_a3b61d05102d1847f07c10669bed29f9d) 12046 0 R (offload_8h_a406c8f3cd7e5e316c35e671943ec90db) 11938 0 R (offload_8h_a4a4eaa91f37f6ce35c395c9612f7f2dd) 11945 0 R (offload_8h_a4e383c4e60024718afe9747911bc9472) 12041 0 R (offload_8h_a52d0581ecef8354a80f0f61b6497c62c) 11925 0 R (offload_8h_a5d4a882956d239429012df086aa92a58) 11955 0 R]
+/Limits [(offload_8h_a3b61d05102d1847f07c10669bed29f9d) (offload_8h_a5d4a882956d239429012df086aa92a58)]
+>> endobj
+17228 0 obj <<
+/Names [(offload_8h_a5e1ce183037b2d86a94c2f094ae3b552) 11936 0 R (offload_8h_a5fe0c1f24f495b7008dc5cf5e56ad6ec) 11957 0 R (offload_8h_a604337c27b72f4540b47da11bd8f844b) 12035 0 R (offload_8h_a60c915c14c15fd1eaaf567f64c8709cb) 11954 0 R (offload_8h_a684a3a9801845170248bcaf4dc099cc5) 12037 0 R (offload_8h_a6b39cd17288ecfffa3ff0e67bc705d6e) 12025 0 R]
+/Limits [(offload_8h_a5e1ce183037b2d86a94c2f094ae3b552) (offload_8h_a6b39cd17288ecfffa3ff0e67bc705d6e)]
+>> endobj
+17229 0 obj <<
+/Names [(offload_8h_a6b42c1a55fb6289f7089db558ecbfb86) 12044 0 R (offload_8h_a7401c68fe7b0ede2638437b85f8058ce) 11926 0 R (offload_8h_a740332c114b8006832a6e4a40490e017) 11941 0 R (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5) 10836 0 R (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a102caefd086b98c8e11c4d6090c7413f) 11923 0 R (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a16abf06e96a64fa495bb02437ce9e1e5) 11928 0 R]
+/Limits [(offload_8h_a6b42c1a55fb6289f7089db558ecbfb86) (offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5a16abf06e96a64fa495bb02437ce9e1e5)]
+>> endobj
+17230 0 obj <<
+/Names [(offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5ab919bc302330213b2382b8c638e749de) 11929 0 R (offload_8h_a89acf61f55afe8305385d00765fe1917) 11949 0 R (offload_8h_a8d9d798a5d847e499238d837a4bcff48) 11947 0 R (offload_8h_a91aff80928b0d402d4c43c113b671c14) 11958 0 R (offload_8h_a951400c6c0ef8c5a177b92b7a886369c) 11943 0 R (offload_8h_a9fb362632a8eef3cc456463618caf489) 11944 0 R]
+/Limits [(offload_8h_a7da1d8d59bd850da3cab236d3c16a3b5ab919bc302330213b2382b8c638e749de) (offload_8h_a9fb362632a8eef3cc456463618caf489)]
+>> endobj
+17231 0 obj <<
+/Names [(offload_8h_aa8901b57298a07f38646153f2d69758b) 12042 0 R (offload_8h_ab1c955594b8b63071953fab5b0e9c20d) 11940 0 R (offload_8h_ab8645400827727abd213d884fa9394f8) 12040 0 R (offload_8h_ac006d6fb077967ea49b13ea31e78e59f) 11924 0 R (offload_8h_ac0b930432bb81181f1a71528d8b029c0) 12032 0 R (offload_8h_ac45d090cdbe79f6befc4cb13a328a16a) 12036 0 R]
+/Limits [(offload_8h_aa8901b57298a07f38646153f2d69758b) (offload_8h_ac45d090cdbe79f6befc4cb13a328a16a)]
+>> endobj
+17232 0 obj <<
+/Names [(offload_8h_ac83571d32139ab9d16192faa66d9bb7e) 11959 0 R (offload_8h_ac885fbf2e7f51874329635e35f29da40) 12024 0 R (offload_8h_acf742760739750083acbc412d9b9a0e0) 12043 0 R (offload_8h_acf9451614f1a7a49aadaf5ca4205386b) 12028 0 R (offload_8h_ad0f30ff60d38cb79deef3369d25b9dbd) 12034 0 R (offload_8h_ad2e915a8b7d831cfc0aed125293ca876) 11950 0 R]
+/Limits [(offload_8h_ac83571d32139ab9d16192faa66d9bb7e) (offload_8h_ad2e915a8b7d831cfc0aed125293ca876)]
+>> endobj
+17233 0 obj <<
+/Names [(offload_8h_ad44c848990454b48bd37ed8f6a22c945) 11946 0 R (offload_8h_adc49588b10a1a52dfdc1e3cbe272242f) 11922 0 R (offload_8h_adfbcd2c902758c82c5f47133b7e903c5) 11921 0 R (offload_8h_adfd97136adf943c0e642ce71705bff19) 11927 0 R (offload_8h_ae6b4fcf7bd782c5dfe63d932c35cdefd) 11953 0 R (offload_8h_aea0f59da635767917f24abad7821608a) 11935 0 R]
+/Limits [(offload_8h_ad44c848990454b48bd37ed8f6a22c945) (offload_8h_aea0f59da635767917f24abad7821608a)]
+>> endobj
+17234 0 obj <<
+/Names [(offload_8h_aeeef81c81bad500a729ea5b15583a35d) 12033 0 R (offload_8h_af0db031140cfa95716ef8b0dda401aa5) 11951 0 R (offload_8h_af5d517293abea69dd776b3d4d978aebc) 12027 0 R (offload_8h_af5f7a7a4078fa0202aa011c6b3e1e7b2) 12048 0 R (offload_8h_afce69bc148af0df269b3355899c8f5fb) 12045 0 R (offload_8h_afd5977ae80eb184bc58a454fe680cde8) 11942 0 R]
+/Limits [(offload_8h_aeeef81c81bad500a729ea5b15583a35d) (offload_8h_afd5977ae80eb184bc58a454fe680cde8)]
+>> endobj
+17235 0 obj <<
+/Names [(offload__common_8cpp) 8731 0 R (offload__common_8cpp_a814356b51a4f4da16d3be582a0b1179e) 12084 0 R (offload__common_8h) 8732 0 R (offload__common_8h_a069d1a9ccbc847a49768441fc7921461) 12161 0 R (offload__common_8h_a0e737ee03c3a99dbf543f26376169102) 12191 0 R (offload__common_8h_a0ee618a3875255b914db8ac9eb143e32) 12160 0 R]
+/Limits [(offload__common_8cpp) (offload__common_8h_a0ee618a3875255b914db8ac9eb143e32)]
+>> endobj
+17236 0 obj <<
+/Names [(offload__common_8h_a0f603704e7a937570de116e723cb3265) 10834 0 R (offload__common_8h_a3c85ac01f902000d9fbfbd813ffb443b) 12195 0 R (offload__common_8h_a3dcab7bf7a1b1bd0419ef0dbf8044733) 12198 0 R (offload__common_8h_a414a1b655019d102bc5848c2ca62af73) 12155 0 R (offload__common_8h_a49f95afe967044b3178c8f5da8b692a5) 10881 0 R (offload__common_8h_a4c953dd273f6aebcb277671b3500694e) 12194 0 R]
+/Limits [(offload__common_8h_a0f603704e7a937570de116e723cb3265) (offload__common_8h_a4c953dd273f6aebcb277671b3500694e)]
+>> endobj
+17237 0 obj <<
+/Names [(offload__common_8h_a58f55d11627a507be5a606467c0123c6) 12197 0 R (offload__common_8h_a5b41c5ae4505891e6c53e26df197e02b) 12190 0 R (offload__common_8h_a5d893191aa98b4f6102ba7ddee3e51ef) 12188 0 R (offload__common_8h_a6f8507003ea66b96d61d757c72052931) 12150 0 R (offload__common_8h_a71fdceba88a023c8a1a039d6790fe4a6) 12156 0 R (offload__common_8h_a75a96d43f6cd5058f0f6b1716b013da3) 12159 0 R]
+/Limits [(offload__common_8h_a58f55d11627a507be5a606467c0123c6) (offload__common_8h_a75a96d43f6cd5058f0f6b1716b013da3)]
+>> endobj
+17238 0 obj <<
+/Names [(offload__common_8h_a814356b51a4f4da16d3be582a0b1179e) 12187 0 R (offload__common_8h_a8a2acf8516fea68bde9c89c317c02e85) 12204 0 R (offload__common_8h_a8a4bad30e2a2b10e97601cff76f3e80e) 12154 0 R (offload__common_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) 10788 0 R (offload__common_8h_a98fc5a74988e1a15c33d88b706291fbb) 12205 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7) 12163 0 R]
+/Limits [(offload__common_8h_a814356b51a4f4da16d3be582a0b1179e) (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7)]
+>> endobj
+17239 0 obj <<
+/Names [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a0364b9624f805c4823fb84eb5570b848) 12165 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a037b76b1be0920cc5a8476454030516b) 12170 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a2623145a5ebf02a78352c9691614abee) 12164 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3a94344bb3490441ad853d19d75b68ed) 12175 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a3e483e64aa53cc7f7722e66b2fea1f4e) 12173 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a49c1dd9f4b460622c55c94dc8a10b1f1) 12169 0 R]
+/Limits [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a0364b9624f805c4823fb84eb5570b848) (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a49c1dd9f4b460622c55c94dc8a10b1f1)]
+>> endobj
+17240 0 obj <<
+/Names [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a4ac17423b939d6de4e1fe1ac672ea862) 12171 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a6d7ff42ba15e8776f68509b7d916a691) 12172 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a8202f82508042d99bca51ba0a72e70f8) 12180 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a97bd383827aac9d96881d88ef98c40f5) 12174 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ab2c293a1a728bc5737774b293c850e7e) 12176 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d) 12167 0 R]
+/Limits [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7a4ac17423b939d6de4e1fe1ac672ea862) (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d)]
+>> endobj
+17241 0 obj <<
+/Names [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac2ec9c3ecdf7544a29fc3e7a43b0c7e2) 12166 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac7ad83088e9853764a6f80f822794b5a) 12177 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ae37bdfa5076fce83434a550892c5a873) 12178 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7af10f4b873d22b0458fd72e5843da9f08) 12168 0 R (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7af24de8c9c133efe42660ff7c1255a800) 12179 0 R (offload__common_8h_aa3a2ab4113e93a693365dac6ace40875) 12189 0 R]
+/Limits [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac2ec9c3ecdf7544a29fc3e7a43b0c7e2) (offload__common_8h_aa3a2ab4113e93a693365dac6ace40875)]
+>> endobj
+17242 0 obj <<
+/Names [(offload__common_8h_ab13fff138b15c0c06163d2f9d3297863) 12157 0 R (offload__common_8h_ab84c6db95e87721f299818801a5f792a) 12200 0 R (offload__common_8h_aba3fd79a79d1d6ddaf806445c58c73e3) 12206 0 R (offload__common_8h_aba7627aab8b7e905d7d8a66d27c7ec02) 12193 0 R (offload__common_8h_abd566459c5127c007d8778c72df37fda) 12199 0 R (offload__common_8h_abec02e70021d39c89bc93b8249bf4a58) 12202 0 R]
+/Limits [(offload__common_8h_ab13fff138b15c0c06163d2f9d3297863) (offload__common_8h_abec02e70021d39c89bc93b8249bf4a58)]
+>> endobj
+17243 0 obj <<
+/Names [(offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5) 12181 0 R (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5a7f10a1297ac2f6d26eaadd91e53dc3ba) 12186 0 R (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5a87f314ed4f0d2eec58fd5e4f363f3a16) 12185 0 R (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ad51925d74d898a29e7e187e1521f7235) 12182 0 R (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ad860362d720bf4c2b2c967779c56e07e) 12183 0 R (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ade0f3aa3e4a5252687d881484167555c) 12184 0 R]
+/Limits [(offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5) (offload__common_8h_ac1c7e44a095d5f75ff3a4976d1c755c5ade0f3aa3e4a5252687d881484167555c)]
+>> endobj
+17244 0 obj <<
+/Names [(offload__common_8h_ac468d7c7c400248d61335695e1044c8f) 12201 0 R (offload__common_8h_ac659c060c63a94e028b6ff1bc1db033b) 12158 0 R (offload__common_8h_acd44f854d642434cdd7032e44e01e146) 12152 0 R (offload__common_8h_acf073b53a1c5d667687a35b45d908148) 12203 0 R (offload__common_8h_ae855eaa560c401e8d59196716d4aad4a) 12162 0 R (offload__common_8h_aed9efbd96dfb7e1f9d4649748bfe9e06) 12192 0 R]
+/Limits [(offload__common_8h_ac468d7c7c400248d61335695e1044c8f) (offload__common_8h_aed9efbd96dfb7e1f9d4649748bfe9e06)]
+>> endobj
+17245 0 obj <<
+/Names [(offload__common_8h_af8e82dec74b799e62a906f71377c56f3) 12196 0 R (offload__common_8h_source) 12217 0 R (offload__engine_8cpp) 8733 0 R (offload__engine_8cpp_a909305200887503c4569c8c549688617) 12260 0 R (offload__engine_8cpp_aeaf756f5c50f7c82404d0dcb4bc00e4e) 12259 0 R (offload__engine_8h) 8734 0 R]
+/Limits [(offload__common_8h_af8e82dec74b799e62a906f71377c56f3) (offload__engine_8h)]
+>> endobj
+17246 0 obj <<
+/Names [(offload__engine_8h_a35c0af1e741950be6a58d72599e4534d) 9198 0 R (offload__engine_8h_a5f80f5fe074a894489074c3823085046) 9154 0 R (offload__engine_8h_a8d61b33eae41b37adbafe9485ec5fa60) 12280 0 R (offload__engine_8h_abcfdcc46c4397479935682c09d3e6cce) 9997 0 R (offload__engine_8h_ad6f507c7ac323953ca8e2417cb4828a7) 9137 0 R (offload__env_8cpp) 8735 0 R]
+/Limits [(offload__engine_8h_a35c0af1e741950be6a58d72599e4534d) (offload__env_8cpp)]
+>> endobj
+17247 0 obj <<
+/Names [(offload__env_8h) 8736 0 R (offload__env_8h_a2cf135d7408406651c4c42d939f27fcf) 9650 0 R (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfa83bba309d0c15e1c5dedbbacf76e024a) 12310 0 R (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfa938cbdec8e3afd11b6077cda8009ab82) 12309 0 R (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfadb2efa602779112f61ba934869781bba) 12312 0 R (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfae5612a9432ba9d7a9f3c389e66ac3e1e) 12311 0 R]
+/Limits [(offload__env_8h) (offload__env_8h_a2cf135d7408406651c4c42d939f27fcfae5612a9432ba9d7a9f3c389e66ac3e1e)]
+>> endobj
+17248 0 obj <<
+/Names [(offload__host_8cpp) 8737 0 R (offload__host_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be) 12404 0 R (offload__host_8cpp_a0a69c249386c9a4deaa6e68e042bc548) 12402 0 R (offload__host_8cpp_a0be1879c7af6f7650618b9482425a32c) 12400 0 R (offload__host_8cpp_a0d405836336b5409b0a90c9ce5c2d001) 12401 0 R (offload__host_8cpp_a0e737ee03c3a99dbf543f26376169102) 12399 0 R]
+/Limits [(offload__host_8cpp) (offload__host_8cpp_a0e737ee03c3a99dbf543f26376169102)]
+>> endobj
+17249 0 obj <<
+/Names [(offload__host_8cpp_a17a0c5020309ddb1e31eacbbdb984022) 12408 0 R (offload__host_8cpp_a17b2bd0533e53c423e2aa3485e2a9d72) 12424 0 R (offload__host_8cpp_a1be94b904c4dbcf6bd04e76988fe4458) 12436 0 R (offload__host_8cpp_a1c89676e52abbec9efd482be0528e934) 12407 0 R (offload__host_8cpp_a256a5721249aa3309437212cc21a9fe4) 12315 0 R (offload__host_8cpp_a29156e9bbf8a27f6160346e6a002c145) 12389 0 R]
+/Limits [(offload__host_8cpp_a17a0c5020309ddb1e31eacbbdb984022) (offload__host_8cpp_a29156e9bbf8a27f6160346e6a002c145)]
+>> endobj
+17250 0 obj <<
+/Names [(offload__host_8cpp_a2d227602e926615ff4ded70e1edc326c) 12392 0 R (offload__host_8cpp_a3b556f92407724cecdb435e9d068eb9c) 12413 0 R (offload__host_8cpp_a429015c924669f759841e2808d00b77c) 12417 0 R (offload__host_8cpp_a457fcb0fe397dfa7cf4034deeed06ceb) 12431 0 R (offload__host_8cpp_a4b47d9b106a5dc123534bc6e3b479665) 12318 0 R (offload__host_8cpp_a4cdb3be06fd02cfb860e9d1dd26331bf) 12412 0 R]
+/Limits [(offload__host_8cpp_a2d227602e926615ff4ded70e1edc326c) (offload__host_8cpp_a4cdb3be06fd02cfb860e9d1dd26331bf)]
+>> endobj
+17251 0 obj <<
+/Names [(offload__host_8cpp_a57939f5298d4f7332bded32662171a73) 12420 0 R (offload__host_8cpp_a5b41c5ae4505891e6c53e26df197e02b) 12397 0 R (offload__host_8cpp_a5d4ac6b2b643acc6113519085c422eca) 12319 0 R (offload__host_8cpp_a5d893191aa98b4f6102ba7ddee3e51ef) 12398 0 R (offload__host_8cpp_a5e1ce183037b2d86a94c2f094ae3b552) 12391 0 R (offload__host_8cpp_a5f7f03a1ed6c0530347245fd3f9d103c) 12437 0 R]
+/Limits [(offload__host_8cpp_a57939f5298d4f7332bded32662171a73) (offload__host_8cpp_a5f7f03a1ed6c0530347245fd3f9d103c)]
+>> endobj
+17252 0 obj <<
+/Names [(offload__host_8cpp_a68c47cfc2e197cb46ba1c1771112fdfe) 12433 0 R (offload__host_8cpp_a6c296ac560651b35e1988cbdd2b7369a) 12322 0 R (offload__host_8cpp_a6defc1b48694ab6252a2436768a8125e) 12422 0 R (offload__host_8cpp_a6e642b3c17c93a83ab4ac0a1f6845742) 12387 0 R (offload__host_8cpp_a7122abe50ca085b86e1c91e0e5415130) 12428 0 R (offload__host_8cpp_a7141606b9f55a1dc8475003a8d87d1c0) 12405 0 R]
+/Limits [(offload__host_8cpp_a68c47cfc2e197cb46ba1c1771112fdfe) (offload__host_8cpp_a7141606b9f55a1dc8475003a8d87d1c0)]
+>> endobj
+17253 0 obj <<
+/Names [(offload__host_8cpp_a787e660b7b86240bf6cc0f440e942e33) 12439 0 R (offload__host_8cpp_a790f817d43c0fd934908f0ef0c00ae3b) 12435 0 R (offload__host_8cpp_a7c40f313917f1f1bf44a136c3382b1f8) 12403 0 R (offload__host_8cpp_a80f9de3cbae4ebd4bf81d133d97f8003) 12396 0 R (offload__host_8cpp_a8604220a50b08a768ceeec68512a51df) 12418 0 R (offload__host_8cpp_a8deead7d653d334b44d63a9270e0c69f) 12416 0 R]
+/Limits [(offload__host_8cpp_a787e660b7b86240bf6cc0f440e942e33) (offload__host_8cpp_a8deead7d653d334b44d63a9270e0c69f)]
+>> endobj
+17254 0 obj <<
+/Names [(offload__host_8cpp_a8e95dee7cbc1279d5b670eee17cdc3d2) 12410 0 R (offload__host_8cpp_a925c67058b8d974e173768e58e9d7155) 12419 0 R (offload__host_8cpp_a932cb72e40fedc938116eb09ef9824b0) 12411 0 R (offload__host_8cpp_a951400c6c0ef8c5a177b92b7a886369c) 12394 0 R (offload__host_8cpp_a9f3f89cd790d3a142f7db79ead9c336c) 12434 0 R (offload__host_8cpp_a9f4d13ce48053496194d04c2f2b65033) 12320 0 R]
+/Limits [(offload__host_8cpp_a8e95dee7cbc1279d5b670eee17cdc3d2) (offload__host_8cpp_a9f4d13ce48053496194d04c2f2b65033)]
+>> endobj
+17255 0 obj <<
+/Names [(offload__host_8cpp_aa5f8946f29b261f5251c79082d392dd9) 12395 0 R (offload__host_8cpp_aaae3c647e992f72c70e5e2cef04ed4e1) 12321 0 R (offload__host_8cpp_aac9fe3d733e6335d4f74536bfd18801e) 12323 0 R (offload__host_8cpp_aad97e678ed905077031b8ff990e4d841) 12316 0 R (offload__host_8cpp_ab37d5b6803d01f4eb50954c5ce6b13d3) 12414 0 R (offload__host_8cpp_abf6a8c4de707fc449f6bdcd2369838f5) 12426 0 R]
+/Limits [(offload__host_8cpp_aa5f8946f29b261f5251c79082d392dd9) (offload__host_8cpp_abf6a8c4de707fc449f6bdcd2369838f5)]
+>> endobj
+17256 0 obj <<
+/Names [(offload__host_8cpp_ac03d5c7aaed76207164ad5e2380d8f3a) 12388 0 R (offload__host_8cpp_ac176484db621f2c8c6df6f76c8492f72) 12430 0 R (offload__host_8cpp_acc2ed5250b0b74aced99094f8dad7f74) 12406 0 R (offload__host_8cpp_aced578e47186c9a872a412eacc3f34df) 12429 0 R (offload__host_8cpp_adbb0ca095d9e6536aa14801f64b21b6e) 12432 0 R (offload__host_8cpp_aea0f59da635767917f24abad7821608a) 12390 0 R]
+/Limits [(offload__host_8cpp_ac03d5c7aaed76207164ad5e2380d8f3a) (offload__host_8cpp_aea0f59da635767917f24abad7821608a)]
+>> endobj
+17257 0 obj <<
+/Names [(offload__host_8cpp_aec8aea5aadb6aa8b891513d7e3ad9657) 12425 0 R (offload__host_8cpp_aed818601c5d5326fe996ecae54e4f7aa) 12440 0 R (offload__host_8cpp_af8ac6244511eedb7d1140768f6442e82) 12427 0 R (offload__host_8cpp_afca6e2fcf13da05971ffbb8730916500) 12415 0 R (offload__host_8cpp_afd5977ae80eb184bc58a454fe680cde8) 12393 0 R (offload__host_8cpp_afeba2628f2039035cb5ea79bf2f532ca) 12409 0 R]
+/Limits [(offload__host_8cpp_aec8aea5aadb6aa8b891513d7e3ad9657) (offload__host_8cpp_afeba2628f2039035cb5ea79bf2f532ca)]
+>> endobj
+17258 0 obj <<
+/Names [(offload__host_8h) 8738 0 R (offload__host_8h_a165329967095d73244ccc962bdecf597) 12421 0 R (offload__host_8h_a165329967095d73244ccc962bdecf597a65c007d94d26b36ce11341c51297e6bd) 12517 0 R (offload__host_8h_a165329967095d73244ccc962bdecf597a838e3a3a9854c68d0610e8fe42b3555f) 12516 0 R (offload__host_8h_a165329967095d73244ccc962bdecf597a87e7a9df2c586929d4e2d0a21cced0ef) 12423 0 R (offload__host_8h_a17a0c5020309ddb1e31eacbbdb984022) 12526 0 R]
+/Limits [(offload__host_8h) (offload__host_8h_a17a0c5020309ddb1e31eacbbdb984022)]
+>> endobj
+17259 0 obj <<
+/Names [(offload__host_8h_a1be94b904c4dbcf6bd04e76988fe4458) 12538 0 R (offload__host_8h_a1c89676e52abbec9efd482be0528e934) 12525 0 R (offload__host_8h_a213c13aa11ede5c22151baf82582d352) 12518 0 R (offload__host_8h_a3b556f92407724cecdb435e9d068eb9c) 12531 0 R (offload__host_8h_a4cdb3be06fd02cfb860e9d1dd26331bf) 12528 0 R (offload__host_8h_a5f7f03a1ed6c0530347245fd3f9d103c) 12537 0 R]
+/Limits [(offload__host_8h_a1be94b904c4dbcf6bd04e76988fe4458) (offload__host_8h_a5f7f03a1ed6c0530347245fd3f9d103c)]
+>> endobj
+17260 0 obj <<
+/Names [(offload__host_8h_a68c47cfc2e197cb46ba1c1771112fdfe) 12536 0 R (offload__host_8h_a6defc1b48694ab6252a2436768a8125e) 12534 0 R (offload__host_8h_a7141606b9f55a1dc8475003a8d87d1c0) 12523 0 R (offload__host_8h_a787e660b7b86240bf6cc0f440e942e33) 12541 0 R (offload__host_8h_a790f817d43c0fd934908f0ef0c00ae3b) 12539 0 R (offload__host_8h_a80f9de3cbae4ebd4bf81d133d97f8003) 12522 0 R]
+/Limits [(offload__host_8h_a68c47cfc2e197cb46ba1c1771112fdfe) (offload__host_8h_a80f9de3cbae4ebd4bf81d133d97f8003)]
+>> endobj
+17261 0 obj <<
+/Names [(offload__host_8h_a8e95dee7cbc1279d5b670eee17cdc3d2) 12529 0 R (offload__host_8h_a932cb72e40fedc938116eb09ef9824b0) 12530 0 R (offload__host_8h_a9f3f89cd790d3a142f7db79ead9c336c) 12540 0 R (offload__host_8h_aa5f8946f29b261f5251c79082d392dd9) 12521 0 R (offload__host_8h_aac9fe3d733e6335d4f74536bfd18801e) 12520 0 R (offload__host_8h_ab37d5b6803d01f4eb50954c5ce6b13d3) 12532 0 R]
+/Limits [(offload__host_8h_a8e95dee7cbc1279d5b670eee17cdc3d2) (offload__host_8h_ab37d5b6803d01f4eb50954c5ce6b13d3)]
+>> endobj
+17262 0 obj <<
+/Names [(offload__host_8h_ac040e098ab966b8e61c0d7fe7e98354c) 12519 0 R (offload__host_8h_acc2ed5250b0b74aced99094f8dad7f74) 12524 0 R (offload__host_8h_acdd01f7e6d86939549abcdf8429e3ac6) 12438 0 R (offload__host_8h_aed818601c5d5326fe996ecae54e4f7aa) 12542 0 R (offload__host_8h_af8ac6244511eedb7d1140768f6442e82) 12535 0 R (offload__host_8h_afca6e2fcf13da05971ffbb8730916500) 12533 0 R]
+/Limits [(offload__host_8h_ac040e098ab966b8e61c0d7fe7e98354c) (offload__host_8h_afca6e2fcf13da05971ffbb8730916500)]
+>> endobj
+17263 0 obj <<
+/Names [(offload__host_8h_afeba2628f2039035cb5ea79bf2f532ca) 12527 0 R (offload__host_8h_source) 12543 0 R (offload__myo__host_8cpp) 8739 0 R (offload__myo__host_8cpp_a01d2df97a66619162769b3ef15d9a4e2) 12635 0 R (offload__myo__host_8cpp_a06e1994d6ed33c26b6d2745dface91c0) 12626 0 R (offload__myo__host_8cpp_a13114ba99d7c4381414ebf3e824f76d0) 12627 0 R]
+/Limits [(offload__host_8h_afeba2628f2039035cb5ea79bf2f532ca) (offload__myo__host_8cpp_a13114ba99d7c4381414ebf3e824f76d0)]
+>> endobj
+17264 0 obj <<
+/Names [(offload__myo__host_8cpp_a1345f47c36719db8c63c15ee8623fbff) 12629 0 R (offload__myo__host_8cpp_a27c5d63cc4b1f2a2534a6696adadd057) 12632 0 R (offload__myo__host_8cpp_a368161defa1a99d14a7f66050ad27e38) 12592 0 R (offload__myo__host_8cpp_a3f5495a892486c48e53a49ee947743a7) 12597 0 R (offload__myo__host_8cpp_a406c8f3cd7e5e316c35e671943ec90db) 12628 0 R (offload__myo__host_8cpp_a4e4afc20c795439903cb2e9cbb3d6990) 12625 0 R]
+/Limits [(offload__myo__host_8cpp_a1345f47c36719db8c63c15ee8623fbff) (offload__myo__host_8cpp_a4e4afc20c795439903cb2e9cbb3d6990)]
+>> endobj
+17265 0 obj <<
+/Names [(offload__myo__host_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) 12595 0 R (offload__myo__host_8cpp_a51d1acb51242ccbad203f0f6434f134a) 12590 0 R (offload__myo__host_8cpp_a59fe0b5f121b2308f72cade183d58023) 12588 0 R (offload__myo__host_8cpp_a6a5266f492158b55b91362883baa82f2) 12634 0 R (offload__myo__host_8cpp_a740332c114b8006832a6e4a40490e017) 12631 0 R (offload__myo__host_8cpp_a7a894bca119a6823881b6601fd13cb46) 12598 0 R]
+/Limits [(offload__myo__host_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) (offload__myo__host_8cpp_a7a894bca119a6823881b6601fd13cb46)]
+>> endobj
+17266 0 obj <<
+/Names [(offload__myo__host_8cpp_a7f4b11c3b93531cc6efc8a65d661c6f3) 12623 0 R (offload__myo__host_8cpp_a89b34b3056f350aa79d8f85a0e749888) 12593 0 R (offload__myo__host_8cpp_a9370582eeddb7a7bc4a24f5efc1da9e9) 12602 0 R (offload__myo__host_8cpp_a96cb2dbdef3b2ba3fa9d402a14efacea) 12596 0 R (offload__myo__host_8cpp_a983b1736644423e7b21a3d21c1e468ff) 12589 0 R (offload__myo__host_8cpp_aa6f3f4cdcf5a754c69b6d7473664c6a2) 12594 0 R]
+/Limits [(offload__myo__host_8cpp_a7f4b11c3b93531cc6efc8a65d661c6f3) (offload__myo__host_8cpp_aa6f3f4cdcf5a754c69b6d7473664c6a2)]
+>> endobj
+17267 0 obj <<
+/Names [(offload__myo__host_8cpp_ab1c955594b8b63071953fab5b0e9c20d) 12630 0 R (offload__myo__host_8cpp_ab2423383cb8d728498a98d4f2ee4b2a5) 12601 0 R (offload__myo__host_8cpp_ac3a4df498282be091915144efc1cb082) 12591 0 R (offload__myo__host_8cpp_ac62bb1c59fd607d84a065fe323ddc477) 12600 0 R (offload__myo__host_8cpp_accb5e86eb589747554af8ba3d839cba0) 12633 0 R (offload__myo__host_8cpp_acdb6a273f12c550bf072ae3a966a5e7e) 12624 0 R]
+/Limits [(offload__myo__host_8cpp_ab1c955594b8b63071953fab5b0e9c20d) (offload__myo__host_8cpp_acdb6a273f12c550bf072ae3a966a5e7e)]
+>> endobj
+17268 0 obj <<
+/Names [(offload__myo__host_8cpp_addcedc3786e8994079e2030e35a547ce) 12599 0 R (offload__myo__host_8cpp_afb24ef6c12f1847affe4d30d432a2fa2) 12636 0 R (offload__myo__host_8h) 8740 0 R (offload__myo__host_8h_a11fb6f6f8272d30895d4a4ace25a365a) 12668 0 R (offload__myo__host_8h_a30cb1348ce058ada9e8def60bd240efa) 12673 0 R (offload__myo__host_8h_a4444442a12f50ec8ed413951452d379b) 12671 0 R]
+/Limits [(offload__myo__host_8cpp_addcedc3786e8994079e2030e35a547ce) (offload__myo__host_8h_a4444442a12f50ec8ed413951452d379b)]
+>> endobj
+17269 0 obj <<
+/Names [(offload__myo__host_8h_a4e4afc20c795439903cb2e9cbb3d6990) 12675 0 R (offload__myo__host_8h_a7a3cc98a09c45a570075dec9b1ca4457) 12669 0 R (offload__myo__host_8h_a9370582eeddb7a7bc4a24f5efc1da9e9) 12674 0 R (offload__myo__host_8h_ac23992eeb0be6620c36d8e8c4ec553d5) 9735 0 R (offload__myo__host_8h_acfd3ac145082bb31fff351c380950c52) 12672 0 R (offload__myo__host_8h_ad5366255c367110f4985768dcbee3114) 12670 0 R]
+/Limits [(offload__myo__host_8h_a4e4afc20c795439903cb2e9cbb3d6990) (offload__myo__host_8h_ad5366255c367110f4985768dcbee3114)]
+>> endobj
+17270 0 obj <<
+/Names [(offload__myo__target_8cpp) 8741 0 R (offload__myo__target_8cpp_a11a01043cf68f7225c7eaf4d6c1743c0) 12710 0 R (offload__myo__target_8cpp_a1345f47c36719db8c63c15ee8623fbff) 12714 0 R (offload__myo__target_8cpp_a18f1e66017fccef0d12adbacfd30413d) 12705 0 R (offload__myo__target_8cpp_a2d662d3d30ea3d0f4b28a8dea6a5491f) 12711 0 R (offload__myo__target_8cpp_a368161defa1a99d14a7f66050ad27e38) 12703 0 R]
+/Limits [(offload__myo__target_8cpp) (offload__myo__target_8cpp_a368161defa1a99d14a7f66050ad27e38)]
+>> endobj
+17271 0 obj <<
+/Names [(offload__myo__target_8cpp_a3ecb77dcdbe8f782a647c39f99cf763c) 12718 0 R (offload__myo__target_8cpp_a406c8f3cd7e5e316c35e671943ec90db) 12713 0 R (offload__myo__target_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) 12706 0 R (offload__myo__target_8cpp_a740332c114b8006832a6e4a40490e017) 12716 0 R (offload__myo__target_8cpp_a89b34b3056f350aa79d8f85a0e749888) 12708 0 R (offload__myo__target_8cpp_a942e2970749a443aa4b6c5632f7698ca) 12717 0 R]
+/Limits [(offload__myo__target_8cpp_a3ecb77dcdbe8f782a647c39f99cf763c) (offload__myo__target_8cpp_a942e2970749a443aa4b6c5632f7698ca)]
+>> endobj
+17272 0 obj <<
+/Names [(offload__myo__target_8cpp_ab1c955594b8b63071953fab5b0e9c20d) 12715 0 R (offload__myo__target_8cpp_ab3f2298bf7869af481fda0c9e0e9054e) 12707 0 R (offload__myo__target_8cpp_ac3a4df498282be091915144efc1cb082) 12702 0 R (offload__myo__target_8cpp_ad888803f88ad50d6895e28a5b9a4b4fb) 12712 0 R (offload__myo__target_8cpp_ae7c927ff537794be95d8f74bd571eabc) 12709 0 R (offload__myo__target_8cpp_af9c17c91722366ff719a53f3525c2034) 12704 0 R]
+/Limits [(offload__myo__target_8cpp_ab1c955594b8b63071953fab5b0e9c20d) (offload__myo__target_8cpp_af9c17c91722366ff719a53f3525c2034)]
+>> endobj
+17273 0 obj <<
+/Names [(offload__myo__target_8h) 8742 0 R (offload__myo__target_8h_a11a01043cf68f7225c7eaf4d6c1743c0) 12751 0 R (offload__myo__target_8h_a11fb6f6f8272d30895d4a4ace25a365a) 12743 0 R (offload__myo__target_8h_a30cb1348ce058ada9e8def60bd240efa) 12746 0 R (offload__myo__target_8h_a3ecb77dcdbe8f782a647c39f99cf763c) 12753 0 R (offload__myo__target_8h_a7a3cc98a09c45a570075dec9b1ca4457) 12744 0 R]
+/Limits [(offload__myo__target_8h) (offload__myo__target_8h_a7a3cc98a09c45a570075dec9b1ca4457)]
+>> endobj
+17274 0 obj <<
+/Names [(offload__myo__target_8h_a942e2970749a443aa4b6c5632f7698ca) 12752 0 R (offload__myo__target_8h_a9ad661cc8fe73ea6af1cc70b4b241932) 12747 0 R (offload__myo__target_8h_ac23992eeb0be6620c36d8e8c4ec553d5) 12748 0 R (offload__myo__target_8h_acfd3ac145082bb31fff351c380950c52) 12745 0 R (offload__myo__target_8h_ad888803f88ad50d6895e28a5b9a4b4fb) 12749 0 R (offload__myo__target_8h_ae7c927ff537794be95d8f74bd571eabc) 12750 0 R]
+/Limits [(offload__myo__target_8h_a942e2970749a443aa4b6c5632f7698ca) (offload__myo__target_8h_ae7c927ff537794be95d8f74bd571eabc)]
+>> endobj
+17275 0 obj <<
+/Names [(offload__omp__host_8cpp) 8743 0 R (offload__omp__host_8cpp_a02f8ad5383a87505b6fbb0793d9adc46) 12825 0 R (offload__omp__host_8cpp_a0ba10731a8f3b08b4daa3b3ce9eb04e8) 12903 0 R (offload__omp__host_8cpp_a0dc024004959b0689c8c0797545ba539) 12911 0 R (offload__omp__host_8cpp_a1011ab0c45eba008822405956a76f89e) 12829 0 R (offload__omp__host_8cpp_a173a599cb71e90363876cf3432c07802) 12900 0 R]
+/Limits [(offload__omp__host_8cpp) (offload__omp__host_8cpp_a173a599cb71e90363876cf3432c07802)]
+>> endobj
+17276 0 obj <<
+/Names [(offload__omp__host_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) 12904 0 R (offload__omp__host_8cpp_a1bb01d2460cbd7c0a501f651d11722cc) 12821 0 R (offload__omp__host_8cpp_a1e1563d04c8034fe03e103f00b15d8c0) 12905 0 R (offload__omp__host_8cpp_a2660b0549f99e3d4dfe393365204cc3b) 12837 0 R (offload__omp__host_8cpp_a31213582a2896ef342d3bc88c379f345) 12915 0 R (offload__omp__host_8cpp_a33d2b782ddf82056f797bd7abe579b9f) 12840 0 R]
+/Limits [(offload__omp__host_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) (offload__omp__host_8cpp_a33d2b782ddf82056f797bd7abe579b9f)]
+>> endobj
+17277 0 obj <<
+/Names [(offload__omp__host_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) 12833 0 R (offload__omp__host_8cpp_a3b61d05102d1847f07c10669bed29f9d) 12914 0 R (offload__omp__host_8cpp_a4a4eaa91f37f6ce35c395c9612f7f2dd) 12820 0 R (offload__omp__host_8cpp_a4e383c4e60024718afe9747911bc9472) 12894 0 R (offload__omp__host_8cpp_a5d4a882956d239429012df086aa92a58) 12832 0 R (offload__omp__host_8cpp_a5fe0c1f24f495b7008dc5cf5e56ad6ec) 12834 0 R]
+/Limits [(offload__omp__host_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) (offload__omp__host_8cpp_a5fe0c1f24f495b7008dc5cf5e56ad6ec)]
+>> endobj
+17278 0 obj <<
+/Names [(offload__omp__host_8cpp_a604337c27b72f4540b47da11bd8f844b) 12908 0 R (offload__omp__host_8cpp_a60c915c14c15fd1eaaf567f64c8709cb) 12831 0 R (offload__omp__host_8cpp_a684a3a9801845170248bcaf4dc099cc5) 12910 0 R (offload__omp__host_8cpp_a6b39cd17288ecfffa3ff0e67bc705d6e) 12839 0 R (offload__omp__host_8cpp_a6b42c1a55fb6289f7089db558ecbfb86) 12898 0 R (offload__omp__host_8cpp_a89acf61f55afe8305385d00765fe1917) 12826 0 R]
+/Limits [(offload__omp__host_8cpp_a604337c27b72f4540b47da11bd8f844b) (offload__omp__host_8cpp_a89acf61f55afe8305385d00765fe1917)]
+>> endobj
+17279 0 obj <<
+/Names [(offload__omp__host_8cpp_a8d9d798a5d847e499238d837a4bcff48) 12824 0 R (offload__omp__host_8cpp_a91aff80928b0d402d4c43c113b671c14) 12835 0 R (offload__omp__host_8cpp_a9fb362632a8eef3cc456463618caf489) 12819 0 R (offload__omp__host_8cpp_aa2d87f58887cbe6fe6e4098eff5c9b7b) 12822 0 R (offload__omp__host_8cpp_aa8901b57298a07f38646153f2d69758b) 12895 0 R (offload__omp__host_8cpp_ab8645400827727abd213d884fa9394f8) 12912 0 R]
+/Limits [(offload__omp__host_8cpp_a8d9d798a5d847e499238d837a4bcff48) (offload__omp__host_8cpp_ab8645400827727abd213d884fa9394f8)]
+>> endobj
+17280 0 obj <<
+/Names [(offload__omp__host_8cpp_ac0b930432bb81181f1a71528d8b029c0) 12906 0 R (offload__omp__host_8cpp_ac45d090cdbe79f6befc4cb13a328a16a) 12909 0 R (offload__omp__host_8cpp_ac83571d32139ab9d16192faa66d9bb7e) 12836 0 R (offload__omp__host_8cpp_ac885fbf2e7f51874329635e35f29da40) 12838 0 R (offload__omp__host_8cpp_acf742760739750083acbc412d9b9a0e0) 12913 0 R (offload__omp__host_8cpp_acf9451614f1a7a49aadaf5ca4205386b) 12902 0 R]
+/Limits [(offload__omp__host_8cpp_ac0b930432bb81181f1a71528d8b029c0) (offload__omp__host_8cpp_acf9451614f1a7a49aadaf5ca4205386b)]
+>> endobj
+17281 0 obj <<
+/Names [(offload__omp__host_8cpp_ad0f30ff60d38cb79deef3369d25b9dbd) 12899 0 R (offload__omp__host_8cpp_ad2e915a8b7d831cfc0aed125293ca876) 12827 0 R (offload__omp__host_8cpp_add69f5ca2eebdc752f24d678a3b0582c) 12823 0 R (offload__omp__host_8cpp_ae6b4fcf7bd782c5dfe63d932c35cdefd) 12830 0 R (offload__omp__host_8cpp_aeeef81c81bad500a729ea5b15583a35d) 12907 0 R (offload__omp__host_8cpp_af0db031140cfa95716ef8b0dda401aa5) 12828 0 R]
+/Limits [(offload__omp__host_8cpp_ad0f30ff60d38cb79deef3369d25b9dbd) (offload__omp__host_8cpp_af0db031140cfa95716ef8b0dda401aa5)]
+>> endobj
+17282 0 obj <<
+/Names [(offload__omp__host_8cpp_af5d517293abea69dd776b3d4d978aebc) 12841 0 R (offload__omp__host_8cpp_af5f7a7a4078fa0202aa011c6b3e1e7b2) 12896 0 R (offload__omp__host_8cpp_afce69bc148af0df269b3355899c8f5fb) 12897 0 R (offload__omp__target_8cpp) 8744 0 R (offload__omp__target_8cpp_a02f8ad5383a87505b6fbb0793d9adc46) 13052 0 R (offload__omp__target_8cpp_a05f1d26e9c8fe5f77dae36619f088253) 13026 0 R]
+/Limits [(offload__omp__host_8cpp_af5d517293abea69dd776b3d4d978aebc) (offload__omp__target_8cpp_a05f1d26e9c8fe5f77dae36619f088253)]
+>> endobj
+17283 0 obj <<
+/Names [(offload__omp__target_8cpp_a0b7c436586f0f30202151561a629db68) 13015 0 R (offload__omp__target_8cpp_a0ba10731a8f3b08b4daa3b3ce9eb04e8) 13147 0 R (offload__omp__target_8cpp_a0dc024004959b0689c8c0797545ba539) 13156 0 R (offload__omp__target_8cpp_a0f76ea50bc86d12bc1fe59cf10657c31) 13044 0 R (offload__omp__target_8cpp_a1266b75dc816aa8a22f3b21af4b264b1) 13011 0 R (offload__omp__target_8cpp_a173a599cb71e90363876cf3432c07802) 13157 0 R]
+/Limits [(offload__omp__target_8cpp_a0b7c436586f0f30202151561a629db68) (offload__omp__target_8cpp_a173a599cb71e90363876cf3432c07802)]
+>> endobj
+17284 0 obj <<
+/Names [(offload__omp__target_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) 13148 0 R (offload__omp__target_8cpp_a1bb01d2460cbd7c0a501f651d11722cc) 13009 0 R (offload__omp__target_8cpp_a1e1563d04c8034fe03e103f00b15d8c0) 13149 0 R (offload__omp__target_8cpp_a1ecfe49a42fb730dd9b5d6cca64943dc) 13041 0 R (offload__omp__target_8cpp_a21cdbb75074112b4024ad5d6cceffe72) 13017 0 R (offload__omp__target_8cpp_a2660b0549f99e3d4dfe393365204cc3b) 13141 0 R]
+/Limits [(offload__omp__target_8cpp_a1a2e8e21269cd56b5416daeafd1864d2) (offload__omp__target_8cpp_a2660b0549f99e3d4dfe393365204cc3b)]
+>> endobj
+17285 0 obj <<
+/Names [(offload__omp__target_8cpp_a2e744170a02866e7ef84bbb1fe73e6b1) 13024 0 R (offload__omp__target_8cpp_a2e8f52ee3caab9def89232803763338f) 13056 0 R (offload__omp__target_8cpp_a31213582a2896ef342d3bc88c379f345) 13163 0 R (offload__omp__target_8cpp_a33d2b782ddf82056f797bd7abe579b9f) 13144 0 R (offload__omp__target_8cpp_a34ac5d6c6c0015adde0d1ce78c376217) 13033 0 R (offload__omp__target_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) 13137 0 R]
+/Limits [(offload__omp__target_8cpp_a2e744170a02866e7ef84bbb1fe73e6b1) (offload__omp__target_8cpp_a354af3ae9805fc9d87c0690345e8ee3b)]
+>> endobj
+17286 0 obj <<
+/Names [(offload__omp__target_8cpp_a36b0b9769710da08d8e8ad0fda1660e7) 13046 0 R (offload__omp__target_8cpp_a3b61d05102d1847f07c10669bed29f9d) 13162 0 R (offload__omp__target_8cpp_a4a4eaa91f37f6ce35c395c9612f7f2dd) 13008 0 R (offload__omp__target_8cpp_a4c6ad11ae8e3b69777cb9387f993844e) 13019 0 R (offload__omp__target_8cpp_a4e383c4e60024718afe9747911bc9472) 13134 0 R (offload__omp__target_8cpp_a5af12e6a9a73b7793c140e55195f0e07) 13045 0 R]
+/Limits [(offload__omp__target_8cpp_a36b0b9769710da08d8e8ad0fda1660e7) (offload__omp__target_8cpp_a5af12e6a9a73b7793c140e55195f0e07)]
+>> endobj
+17287 0 obj <<
+/Names [(offload__omp__target_8cpp_a5b75f32f2dbc7873d969b76ebc92a50d) 13042 0 R (offload__omp__target_8cpp_a5d4a882956d239429012df086aa92a58) 13136 0 R (offload__omp__target_8cpp_a5fe0c1f24f495b7008dc5cf5e56ad6ec) 13138 0 R (offload__omp__target_8cpp_a604337c27b72f4540b47da11bd8f844b) 13153 0 R (offload__omp__target_8cpp_a60c915c14c15fd1eaaf567f64c8709cb) 13058 0 R (offload__omp__target_8cpp_a65924ec300f23ed4ec7d0a2c4d1f3411) 13043 0 R]
+/Limits [(offload__omp__target_8cpp_a5b75f32f2dbc7873d969b76ebc92a50d) (offload__omp__target_8cpp_a65924ec300f23ed4ec7d0a2c4d1f3411)]
+>> endobj
+17288 0 obj <<
+/Names [(offload__omp__target_8cpp_a684a3a9801845170248bcaf4dc099cc5) 13155 0 R (offload__omp__target_8cpp_a6b39cd17288ecfffa3ff0e67bc705d6e) 13143 0 R (offload__omp__target_8cpp_a6b42c1a55fb6289f7089db558ecbfb86) 13160 0 R (offload__omp__target_8cpp_a6ca6caffa2f957e16416701342140e9c) 13027 0 R (offload__omp__target_8cpp_a6e40f4b1e503928f52e03c70f06f4eed) 13029 0 R (offload__omp__target_8cpp_a6fad2362034e1526898da798a2c522df) 13050 0 R]
+/Limits [(offload__omp__target_8cpp_a684a3a9801845170248bcaf4dc099cc5) (offload__omp__target_8cpp_a6fad2362034e1526898da798a2c522df)]
+>> endobj
+17289 0 obj <<
+/Names [(offload__omp__target_8cpp_a729e21d960b0223e169e05a8acf8d4ba) 13034 0 R (offload__omp__target_8cpp_a7842369cb7daf90ca74860d9fddc368d) 13020 0 R (offload__omp__target_8cpp_a799dad1d4df9aadca9d93c9ca00e5dc9) 13012 0 R (offload__omp__target_8cpp_a7b7267844f20fdc252480681251e3536) 13030 0 R (offload__omp__target_8cpp_a7da283287ea13d33ad052e27d129c1c5) 13047 0 R (offload__omp__target_8cpp_a89acf61f55afe8305385d00765fe1917) 13053 0 R]
+/Limits [(offload__omp__target_8cpp_a729e21d960b0223e169e05a8acf8d4ba) (offload__omp__target_8cpp_a89acf61f55afe8305385d00765fe1917)]
+>> endobj
+17290 0 obj <<
+/Names [(offload__omp__target_8cpp_a8d3a262496c83915d04d9533be1b20e5) 13018 0 R (offload__omp__target_8cpp_a8d9d798a5d847e499238d837a4bcff48) 13051 0 R (offload__omp__target_8cpp_a91aff80928b0d402d4c43c113b671c14) 13139 0 R (offload__omp__target_8cpp_a933b20249b044183921972d8676c94e3) 13035 0 R (offload__omp__target_8cpp_a9bd86923cf5c44b468a613484158d49a) 13010 0 R (offload__omp__target_8cpp_a9fb362632a8eef3cc456463618caf489) 13007 0 R]
+/Limits [(offload__omp__target_8cpp_a8d3a262496c83915d04d9533be1b20e5) (offload__omp__target_8cpp_a9fb362632a8eef3cc456463618caf489)]
+>> endobj
+17291 0 obj <<
+/Names [(offload__omp__target_8cpp_a9fdcc2472d1931df5cd1694b2be759ce) 13025 0 R (offload__omp__target_8cpp_aa090f4212b6df25daa8f3d479722c4b7) 13023 0 R (offload__omp__target_8cpp_aa6fd1a40bffe97ed36e211e5ac8b6393) 13049 0 R (offload__omp__target_8cpp_aa7b959a46e64cfd8ef3620d06888c770) 13039 0 R (offload__omp__target_8cpp_aa8901b57298a07f38646153f2d69758b) 13135 0 R (offload__omp__target_8cpp_aacdb14c5b22b8dc071f51296785df1b7) 13013 0 R]
+/Limits [(offload__omp__target_8cpp_a9fdcc2472d1931df5cd1694b2be759ce) (offload__omp__target_8cpp_aacdb14c5b22b8dc071f51296785df1b7)]
+>> endobj
+17292 0 obj <<
+/Names [(offload__omp__target_8cpp_aae7f6f2f6a2ee0eb5b07b380dfb453a8) 13038 0 R (offload__omp__target_8cpp_ab1696aaaf0f4309ccdfad6159f6023c2) 13028 0 R (offload__omp__target_8cpp_ab3553013e823dc8c49042cbf1cdd6f62) 13037 0 R (offload__omp__target_8cpp_ab8645400827727abd213d884fa9394f8) 13158 0 R (offload__omp__target_8cpp_abff993d1194f310062adda9c60f955b6) 13031 0 R (offload__omp__target_8cpp_ac0b930432bb81181f1a71528d8b029c0) 13150 0 R]
+/Limits [(offload__omp__target_8cpp_aae7f6f2f6a2ee0eb5b07b380dfb453a8) (offload__omp__target_8cpp_ac0b930432bb81181f1a71528d8b029c0)]
+>> endobj
+17293 0 obj <<
+/Names [(offload__omp__target_8cpp_ac45d090cdbe79f6befc4cb13a328a16a) 13154 0 R (offload__omp__target_8cpp_ac4ae111e728149f41e037365ed297a03) 13036 0 R (offload__omp__target_8cpp_ac4d699632336d112bd5fd4fd7aff72fa) 13048 0 R (offload__omp__target_8cpp_ac83571d32139ab9d16192faa66d9bb7e) 13140 0 R (offload__omp__target_8cpp_ac885fbf2e7f51874329635e35f29da40) 13142 0 R (offload__omp__target_8cpp_acf742760739750083acbc412d9b9a0e0) 13159 0 R]
+/Limits [(offload__omp__target_8cpp_ac45d090cdbe79f6befc4cb13a328a16a) (offload__omp__target_8cpp_acf742760739750083acbc412d9b9a0e0)]
+>> endobj
+17294 0 obj <<
+/Names [(offload__omp__target_8cpp_acf9451614f1a7a49aadaf5ca4205386b) 13146 0 R (offload__omp__target_8cpp_ad0f30ff60d38cb79deef3369d25b9dbd) 13152 0 R (offload__omp__target_8cpp_ad2e915a8b7d831cfc0aed125293ca876) 13054 0 R (offload__omp__target_8cpp_ad6ab0879c01b95219fb7f4b06b5dc0d0) 13014 0 R (offload__omp__target_8cpp_ae6b4fcf7bd782c5dfe63d932c35cdefd) 13057 0 R (offload__omp__target_8cpp_ae77ef84108e70c3ab0503cc38cbc35a2) 13032 0 R]
+/Limits [(offload__omp__target_8cpp_acf9451614f1a7a49aadaf5ca4205386b) (offload__omp__target_8cpp_ae77ef84108e70c3ab0503cc38cbc35a2)]
+>> endobj
+17295 0 obj <<
+/Names [(offload__omp__target_8cpp_ae95bae0d4deb69450306f4d64d5448d8) 13022 0 R (offload__omp__target_8cpp_aeec4f47353e07c1801f0d3d0d8145859) 13021 0 R (offload__omp__target_8cpp_aeeef81c81bad500a729ea5b15583a35d) 13151 0 R (offload__omp__target_8cpp_af0db031140cfa95716ef8b0dda401aa5) 13055 0 R (offload__omp__target_8cpp_af5d517293abea69dd776b3d4d978aebc) 13145 0 R (offload__omp__target_8cpp_af5f7a7a4078fa0202aa011c6b3e1e7b2) 13164 0 R]
+/Limits [(offload__omp__target_8cpp_ae95bae0d4deb69450306f4d64d5448d8) (offload__omp__target_8cpp_af5f7a7a4078fa0202aa011c6b3e1e7b2)]
+>> endobj
+17296 0 obj <<
+/Names [(offload__omp__target_8cpp_af857e1d153e38bcdca441c5e3c26a3a8) 13040 0 R (offload__omp__target_8cpp_af93200ef24f801fb764205af48517596) 13016 0 R (offload__omp__target_8cpp_afce69bc148af0df269b3355899c8f5fb) 13161 0 R (offload__orsl_8cpp) 8745 0 R (offload__orsl_8h) 8746 0 R (offload__table_8cpp) 8747 0 R]
+/Limits [(offload__omp__target_8cpp_af857e1d153e38bcdca441c5e3c26a3a8) (offload__table_8cpp)]
+>> endobj
+17297 0 obj <<
+/Names [(offload__table_8cpp_a0bbd7bff77a542b4ddde4536cab3b75d) 13303 0 R (offload__table_8cpp_a0d423e93b04c891cb24fad4300223213) 13256 0 R (offload__table_8cpp_a0d9efed6fd06ea3359eb565027d75348) 13261 0 R (offload__table_8cpp_a10b27e7d05754951f587a04a2192abd3) 13285 0 R (offload__table_8cpp_a18e05a7a836af489fa03222fc474988f) 13260 0 R (offload__table_8cpp_a1ba3d522623379201e6518e8ff5814cf) 13263 0 R]
+/Limits [(offload__table_8cpp_a0bbd7bff77a542b4ddde4536cab3b75d) (offload__table_8cpp_a1ba3d522623379201e6518e8ff5814cf)]
+>> endobj
+17298 0 obj <<
+/Names [(offload__table_8cpp_a209a6c7523203e5da4d48b1e67e137af) 13254 0 R (offload__table_8cpp_a21f5c5e620db736609624b67f19bf557) 13272 0 R (offload__table_8cpp_a273c246c4d761ece71996bd9600ad64f) 13273 0 R (offload__table_8cpp_a2a221f77ce39cc7ce5eb746123b7c48d) 13258 0 R (offload__table_8cpp_a349a31792ab7562dd5f82fe2b7d4d15b) 13308 0 R (offload__table_8cpp_a40daab0cfd90458d369764d8432c720a) 13282 0 R]
+/Limits [(offload__table_8cpp_a209a6c7523203e5da4d48b1e67e137af) (offload__table_8cpp_a40daab0cfd90458d369764d8432c720a)]
+>> endobj
+17299 0 obj <<
+/Names [(offload__table_8cpp_a428a49bcacebdc98af28d771e078756f) 13271 0 R (offload__table_8cpp_a45977aca65c8bee92c58c23d89e01202) 13264 0 R (offload__table_8cpp_a4a8a21d09f134c2207fd4f45a1415f09) 13268 0 R (offload__table_8cpp_a5ef8d450de1a51cf90a4a685a40f2af9) 13311 0 R (offload__table_8cpp_a653201534dcf88c265079f926a58fe0b) 13301 0 R (offload__table_8cpp_a68ac93910d48bd08f893b210cf02e5f6) 13280 0 R]
+/Limits [(offload__table_8cpp_a428a49bcacebdc98af28d771e078756f) (offload__table_8cpp_a68ac93910d48bd08f893b210cf02e5f6)]
+>> endobj
+17300 0 obj <<
+/Names [(offload__table_8cpp_a70d9b573368eb44e376d107a0ba9bded) 13310 0 R (offload__table_8cpp_a713a057b26f414eb1ac1f5049232748d) 13270 0 R (offload__table_8cpp_a745baff46ece4b3bbbf627ebbfe95edb) 13255 0 R (offload__table_8cpp_a7932155de8226051b081b89dd15c1986) 13279 0 R (offload__table_8cpp_a836d45c090695ca7de2269e21d7af5d4) 13265 0 R (offload__table_8cpp_a83d593765d60972ac1212ef722dcdcdf) 13283 0 R]
+/Limits [(offload__table_8cpp_a70d9b573368eb44e376d107a0ba9bded) (offload__table_8cpp_a83d593765d60972ac1212ef722dcdcdf)]
+>> endobj
+17301 0 obj <<
+/Names [(offload__table_8cpp_a8b839dfd2155ac82b18f6043081338c5) 13302 0 R (offload__table_8cpp_a950345f313648e66a04b2fc6287e9f08) 13266 0 R (offload__table_8cpp_a95b0e3ac569b85484f80b7b0e7c7d8e1) 13269 0 R (offload__table_8cpp_a95c0bb039b31bf7e1ba40186951f54df) 13252 0 R (offload__table_8cpp_a9a1b3a238e6cfb7b1eb26316632df179) 13306 0 R (offload__table_8cpp_aa7b11ed90a2ae54387b9196bbc71b18a) 13309 0 R]
+/Limits [(offload__table_8cpp_a8b839dfd2155ac82b18f6043081338c5) (offload__table_8cpp_aa7b11ed90a2ae54387b9196bbc71b18a)]
+>> endobj
+17302 0 obj <<
+/Names [(offload__table_8cpp_ab631b2f23c9288f4de2ed665a326b860) 13276 0 R (offload__table_8cpp_abd357169438d6c23f81c9c9a0ccab620) 13262 0 R (offload__table_8cpp_abe111b0743c0e9366b657e9d8aa49535) 13305 0 R (offload__table_8cpp_abe38a854a271830c3808a17c2b8272f2) 13259 0 R (offload__table_8cpp_ac1efd6e30008c0c50366f575680fd41c) 13278 0 R (offload__table_8cpp_ac85681fe0e0e734859245e2b00949304) 13253 0 R]
+/Limits [(offload__table_8cpp_ab631b2f23c9288f4de2ed665a326b860) (offload__table_8cpp_ac85681fe0e0e734859245e2b00949304)]
+>> endobj
+17303 0 obj <<
+/Names [(offload__table_8cpp_ace513dde459dbb4147b0d975f757da71) 13281 0 R (offload__table_8cpp_ad28dcc3558c9e3d3d8a92bbeb05b5897) 13284 0 R (offload__table_8cpp_ad40cc74a5801cfe2e2b056a60baadc18) 13275 0 R (offload__table_8cpp_add17a16068a5628cec35a1b8664ed178) 13257 0 R (offload__table_8cpp_ae8dcd08a405a359f4f57592863c71233) 13304 0 R (offload__table_8cpp_aea6f278725ed9a2443fb62b1fbfc49e4) 13267 0 R]
+/Limits [(offload__table_8cpp_ace513dde459dbb4147b0d975f757da71) (offload__table_8cpp_aea6f278725ed9a2443fb62b1fbfc49e4)]
+>> endobj
+17304 0 obj <<
+/Names [(offload__table_8cpp_af719a12f6588bfd8f0fbbfe6508eb7f9) 13277 0 R (offload__table_8cpp_af99a3ff65020c6a863c02e75a852b410) 13307 0 R (offload__table_8cpp_afb4d8d52866b88f6a5dcb6bf8e3802aa) 13274 0 R (offload__table_8h) 8748 0 R (offload__table_8h_a092d60dd372646b492fb7ff74486e217) 13358 0 R (offload__table_8h_a2c84ea0b1b142a85bf761256143f00f0) 13361 0 R]
+/Limits [(offload__table_8cpp_af719a12f6588bfd8f0fbbfe6508eb7f9) (offload__table_8h_a2c84ea0b1b142a85bf761256143f00f0)]
+>> endobj
+17305 0 obj <<
+/Names [(offload__table_8h_a506bac3d4e7a10e6c4c9b5eb5245f169) 13362 0 R (offload__table_8h_a5ef8d450de1a51cf90a4a685a40f2af9) 13368 0 R (offload__table_8h_a653201534dcf88c265079f926a58fe0b) 13364 0 R (offload__table_8h_a70d9b573368eb44e376d107a0ba9bded) 13367 0 R (offload__table_8h_a7fa489ff88f3d60b788e1e9fe34a72ca) 13360 0 R (offload__table_8h_a822ff5fd9defe13d604086e86aa6af39) 13359 0 R]
+/Limits [(offload__table_8h_a506bac3d4e7a10e6c4c9b5eb5245f169) (offload__table_8h_a822ff5fd9defe13d604086e86aa6af39)]
+>> endobj
+17306 0 obj <<
+/Names [(offload__table_8h_a8b839dfd2155ac82b18f6043081338c5) 13365 0 R (offload__table_8h_aec55f938ca6f44af430612f8b66aabcc) 13366 0 R (offload__table_8h_af82929694b31087bb31aaaad7b37913d) 13363 0 R (offload__table_8h_source) 13369 0 R (offload__target_8cpp) 8749 0 R (offload__target_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be) 13404 0 R]
+/Limits [(offload__table_8h_a8b839dfd2155ac82b18f6043081338c5) (offload__target_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be)]
+>> endobj
+17307 0 obj <<
+/Names [(offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) 12317 0 R (offload__target_8cpp_a1f8228bea1e3497369089a1e3876edf9) 13407 0 R (offload__target_8cpp_a26bf9397a176185d3f88800139c68a40) 13409 0 R (offload__target_8cpp_a2d227602e926615ff4ded70e1edc326c) 13400 0 R (offload__target_8cpp_a30f922141d233fbbf9222b45b5be14d9) 13396 0 R (offload__target_8cpp_a5b41c5ae4505891e6c53e26df197e02b) 13401 0 R]
+/Limits [(offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) (offload__target_8cpp_a5b41c5ae4505891e6c53e26df197e02b)]
+>> endobj
+17308 0 obj <<
+/Names [(offload__target_8cpp_a5d893191aa98b4f6102ba7ddee3e51ef) 13402 0 R (offload__target_8cpp_a5e1ce183037b2d86a94c2f094ae3b552) 13399 0 R (offload__target_8cpp_a6ae559687c267f9556b182333b12f738) 13397 0 R (offload__target_8cpp_a7c40f313917f1f1bf44a136c3382b1f8) 13403 0 R (offload__target_8cpp_a92c6a6816bd7de4beac8bc7d45ed8ce0) 13405 0 R (offload__target_8cpp_a955d5131e4314cca79ab0f1589635692) 13406 0 R]
+/Limits [(offload__target_8cpp_a5d893191aa98b4f6102ba7ddee3e51ef) (offload__target_8cpp_a955d5131e4314cca79ab0f1589635692)]
+>> endobj
+17309 0 obj <<
+/Names [(offload__target_8cpp_aa3a2ab4113e93a693365dac6ace40875) 12151 0 R (offload__target_8cpp_aaf28ff52b37463352e2da5d664852573) 13408 0 R (offload__target_8cpp_aea0f59da635767917f24abad7821608a) 13398 0 R (offload__target_8h) 8750 0 R (offload__target_8h_a1f8228bea1e3497369089a1e3876edf9) 13437 0 R (offload__target_8h_a6ae559687c267f9556b182333b12f738) 13426 0 R]
+/Limits [(offload__target_8cpp_aa3a2ab4113e93a693365dac6ace40875) (offload__target_8h_a6ae559687c267f9556b182333b12f738)]
+>> endobj
+17310 0 obj <<
+/Names [(offload__target_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) 13438 0 R (offload__target_8h_a955d5131e4314cca79ab0f1589635692) 13436 0 R (offload__target__main_8cpp) 8751 0 R (offload__target__main_8cpp_a3c04138a5bfe5d72780bb7e82a18e627) 13441 0 R (offload__target__main_8cpp_abc648916abbe06e723dfd096ceb15e87) 13440 0 R (offload__timer_8h) 8784 0 R]
+/Limits [(offload__target_8h_a92c6a6816bd7de4beac8bc7d45ed8ce0) (offload__timer_8h)]
+>> endobj
+17311 0 obj <<
+/Names [(offload__timer_8h_a2da638a7770cc7a86ae6b32014acbadb) 13455 0 R (offload__timer_8h_a4ef0f157e66ad987e4040bc45cb5f72a) 13454 0 R (offload__timer_8h_a74be8d5e5dfb30289aaf5d38811ff9b1) 13452 0 R (offload__timer_8h_a9defaa0a97a1507e117209510f492e51) 13453 0 R (offload__timer_8h_ab82210f0bee586b8b87ff7ced37e5828) 13456 0 R (offload__timer_8h_ad67905f9efbfaec576aa23b57eddbf63) 13457 0 R]
+/Limits [(offload__timer_8h_a2da638a7770cc7a86ae6b32014acbadb) (offload__timer_8h_ad67905f9efbfaec576aa23b57eddbf63)]
+>> endobj
+17312 0 obj <<
+/Names [(offload__timer__host_8cpp) 8785 0 R (offload__timer__host_8cpp_ad67905f9efbfaec576aa23b57eddbf63) 13472 0 R (offload__timer__target_8cpp) 8786 0 R (offload__timer__target_8cpp_ad67905f9efbfaec576aa23b57eddbf63) 13474 0 R (offload__trace_8cpp) 8787 0 R (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c) 13478 0 R]
+/Limits [(offload__timer__host_8cpp) (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c)]
+>> endobj
+17313 0 obj <<
+/Names [(offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) 13523 0 R (offload__trace_8cpp_a92c6a6816bd7de4beac8bc7d45ed8ce0) 12153 0 R (offload__trace_8cpp_ac598663b93e6509c65636fb44733e777) 13477 0 R (offload__trace_8cpp_ae5e05469387803f590e9dd8f39d6997c) 13476 0 R (offload__trace_8h) 8788 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594be) 13528 0 R]
+/Limits [(offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594be)]
+>> endobj
+17314 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea07dcf851637cc5d962384c0297413c23) 13562 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea092261aba7ecdb767daaccee019a6b9a) 13549 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea0fd19641a8c289318157609002483a56) 13553 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea13cb3eebe89cce0f49f6c9885f1d3f04) 13563 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea308319bae675a6a73f12a0bb0157d445) 13544 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea395f669d38dc8f7097c324be9888b0f6) 13529 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea07dcf851637cc5d962384c0297413c23) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea395f669d38dc8f7097c324be9888b0f6)]
+>> endobj
+17315 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea4061629ee6b7552f9d94a00d7f799970) 13561 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea4121fb7e56460a7683ddc55e6a668084) 13539 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea471cace07631448ae6fbbf6b1d3224e2) 13550 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea47d0036807e49e1302e39a3d00baa2c1) 13533 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5b7f28b8fc29c0750196afe802121804) 13542 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5c60005d4474ba1db1ae93c6612667c2) 13536 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea4061629ee6b7552f9d94a00d7f799970) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5c60005d4474ba1db1ae93c6612667c2)]
+>> endobj
+17316 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5d48cc8989f3b7588819bdc729e8e1e7) 13532 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea63ed535a84cda94bd5fed7c46a91c378) 13548 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea6acd7f1bd4f723ea9fc35da8a5b43f62) 13540 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea79dffc53d7f59a6956b5d4468f30df80) 13546 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8230d16cdac648cb4016db2529863199) 13531 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8a67da9a11f5c2a3622f6fc7450bcde6) 13558 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea5d48cc8989f3b7588819bdc729e8e1e7) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8a67da9a11f5c2a3622f6fc7450bcde6)]
+>> endobj
+17317 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8bc56bef090c3d6d9e57632b535f002f) 13547 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8c56d0083cc371ccc13ee1912af77074) 13541 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea91a244f4355ca0ef48b6c5431173b1f8) 13559 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea995a35212a83ffd9c2346266883b52d1) 13555 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea9a713f79c0e3d4a6b7a18d4126bfa72d) 13534 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa026cae6f6bf73156602fce122b935b2) 13535 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594bea8bc56bef090c3d6d9e57632b535f002f) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa026cae6f6bf73156602fce122b935b2)]
+>> endobj
+17318 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa45a47400f78cda75e8d41039481a376) 13556 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa52804286f9050437ad2ef3f79e1ad52) 13552 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beab4551ca08ab3b9196576c7e16de11a29) 13530 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beab860f3b83ad4779925a80d1b0dcc2c94) 13545 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beabb257b313a34a6c46f556f2167d7624a) 13538 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beac6948eaadde5f488ec54c344570d58d1) 13554 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaa45a47400f78cda75e8d41039481a376) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beac6948eaadde5f488ec54c344570d58d1)]
+>> endobj
+17319 0 obj <<
+/Names [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beadcff5c74a894ed7464d920097a41a946) 13551 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaed01d390e5e07e4e39a7aaeaed5710ae) 13543 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaf1ed3d6224c6accfa0588465e6336244) 13537 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beaf54c0d4a3a16c74e3a421345cf18760e) 13557 0 R (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beafdd6b5fac528c51a9d19d118957b3b3e) 13560 0 R (offload__trace_8h_a2e4368032c4d844d790f4c7c90dd5f4c) 13564 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beadcff5c74a894ed7464d920097a41a946) (offload__trace_8h_a2e4368032c4d844d790f4c7c90dd5f4c)]
+>> endobj
+17320 0 obj <<
+/Names [(offload__util_8cpp) 8789 0 R (offload__util_8cpp_a779ff356d82b6854f4eefca550b9d9e9) 13588 0 R (offload__util_8cpp_a78b205a19a98eb052a28d39a798fc399) 13589 0 R (offload__util_8cpp_abb1c3aa340338fcfc9ebbe5978911666) 13590 0 R (offload__util_8cpp_afd230e79063dd4b66c0006d192d253d1) 13591 0 R (offload__util_8h) 8790 0 R]
+/Limits [(offload__util_8cpp) (offload__util_8h)]
+>> endobj
+17321 0 obj <<
+/Names [(offload__util_8h_a3ddeaca00b3079cd5b4e93d56fa4b1d3) 13614 0 R (offload__util_8h_a44c4adde17b7434ae375d509c6ecc072) 13596 0 R (offload__util_8h_a4a431b37cf997388b5a96612ee787ccc) 13612 0 R (offload__util_8h_a5b77fd20b6dd1e6e3ff6c2ca42e1645c) 13613 0 R (offload__util_8h_a5c4a8ac837211ec49a83d37da0c48ad8) 13597 0 R (offload__util_8h_a779ff356d82b6854f4eefca550b9d9e9) 13618 0 R]
+/Limits [(offload__util_8h_a3ddeaca00b3079cd5b4e93d56fa4b1d3) (offload__util_8h_a779ff356d82b6854f4eefca550b9d9e9)]
+>> endobj
+17322 0 obj <<
+/Names [(offload__util_8h_a78b205a19a98eb052a28d39a798fc399) 13617 0 R (offload__util_8h_a9eeaf7266da15437cd95010d686279ef) 13615 0 R (offload__util_8h_aa2b0a4321ba0d8797dd6863cc51415b2) 13595 0 R (offload__util_8h_ab343ebffab1ff9f41f27380d9f816ed7) 13599 0 R (offload__util_8h_abb1c3aa340338fcfc9ebbe5978911666) 13616 0 R (offload__util_8h_ac0e6cec48cc72642d42c91e6d15cb6f6) 13598 0 R]
+/Limits [(offload__util_8h_a78b205a19a98eb052a28d39a798fc399) (offload__util_8h_ac0e6cec48cc72642d42c91e6d15cb6f6)]
+>> endobj
+17323 0 obj <<
+/Names [(offload__util_8h_ae5bd49420d47b8f5a990bff508f032be) 13594 0 R (offload__util_8h_afd230e79063dd4b66c0006d192d253d1) 13619 0 R (ofldbegin_8cpp) 8791 0 R (ofldbegin_8cpp_a03cea762759e23c1fee622e2f0bca69f) 13650 0 R (ofldbegin_8cpp_a4a62022ba87c2776e1f35a239dc49b1f) 13653 0 R (ofldbegin_8cpp_a4cc3b7161b7d972136ac91301344e321) 13647 0 R]
+/Limits [(offload__util_8h_ae5bd49420d47b8f5a990bff508f032be) (ofldbegin_8cpp_a4cc3b7161b7d972136ac91301344e321)]
+>> endobj
+17324 0 obj <<
+/Names [(ofldbegin_8cpp_a60a342700870ef6fd663fea47db60561) 13642 0 R (ofldbegin_8cpp_a621b346a781997ac1354de929a4ffb3c) 13646 0 R (ofldbegin_8cpp_a7eaa82d7420ddb056c961ff1d18c6c71) 13649 0 R (ofldbegin_8cpp_a840291bc02cba5474a4cb46a9b9566fe) 13644 0 R (ofldbegin_8cpp_a9a907c7bc378786c272d0ea9a6f68da3) 13645 0 R (ofldbegin_8cpp_a9ad116b903bcbdca09a5b76287c451be) 13648 0 R]
+/Limits [(ofldbegin_8cpp_a60a342700870ef6fd663fea47db60561) (ofldbegin_8cpp_a9ad116b903bcbdca09a5b76287c451be)]
+>> endobj
+17325 0 obj <<
+/Names [(ofldbegin_8cpp_aa2a2e1ead2aa9dc079ca07e669c79fd8) 13651 0 R (ofldbegin_8cpp_aca98bf98711e4a9d473c86d0015d9303) 13643 0 R (ofldbegin_8cpp_aec4e6e4da26add1860f578fe309bcb61) 13652 0 R (ofldend_8cpp) 8792 0 R (ofldend_8cpp_a409ddad5da136039aab4fe4bbe10d856) 13677 0 R (ofldend_8cpp_a60a342700870ef6fd663fea47db60561) 13676 0 R]
+/Limits [(ofldbegin_8cpp_aa2a2e1ead2aa9dc079ca07e669c79fd8) (ofldend_8cpp_a60a342700870ef6fd663fea47db60561)]
+>> endobj
+17326 0 obj <<
+/Names [(ofldend_8cpp_a901d1a98eae84b48de982db81f21ced6) 13679 0 R (ofldend_8cpp_a9c7a40f9610fb7d2c1824c09246f2896) 13678 0 R (orsl-lite_8c) 8798 0 R (orsl-lite_8c_a1abfeede1dad0b79d2bd7add9584b067) 13840 0 R (orsl-lite_8c_a27bef0e645cd5440f957cef702e9b977) 13799 0 R (orsl-lite_8c_a2f68f337f82d54f75d83be134a43b379) 13836 0 R]
+/Limits [(ofldend_8cpp_a901d1a98eae84b48de982db81f21ced6) (orsl-lite_8c_a2f68f337f82d54f75d83be134a43b379)]
+>> endobj
+17327 0 obj <<
+/Names [(orsl-lite_8c_a31d5b035df36a4c3d25c9d86fe90ca93) 13808 0 R (orsl-lite_8c_a38c935f8026e8840b41f1e9db1e06705) 13805 0 R (orsl-lite_8c_a396184a3d9bc75d42739c031fcbaee73) 13802 0 R (orsl-lite_8c_a4306c23a8311dad5d1a87a733e40ba39) 13842 0 R (orsl-lite_8c_a46fb9aac0e1ba8c6c75def728d639a1d) 13804 0 R (orsl-lite_8c_a56cf23cc44d57f3d2af90d229d20a5c8) 13798 0 R]
+/Limits [(orsl-lite_8c_a31d5b035df36a4c3d25c9d86fe90ca93) (orsl-lite_8c_a56cf23cc44d57f3d2af90d229d20a5c8)]
+>> endobj
+17328 0 obj <<
+/Names [(orsl-lite_8c_a641b867e36378c98404245b4b61a32e3) 13806 0 R (orsl-lite_8c_a6a49c23d80168db9755d7375c1795c35) 13797 0 R (orsl-lite_8c_a6e64f20328c2ee7f729c6d9915e467f1) 13807 0 R (orsl-lite_8c_a7a0dcf55762ac5de706a6c1794425383) 13844 0 R (orsl-lite_8c_a8af94112802bd3967c1f033a2682cfbb) 13801 0 R (orsl-lite_8c_a8d87bda3c51754039be9c893277454c8) 13839 0 R]
+/Limits [(orsl-lite_8c_a641b867e36378c98404245b4b61a32e3) (orsl-lite_8c_a8d87bda3c51754039be9c893277454c8)]
+>> endobj
+17329 0 obj <<
+/Names [(orsl-lite_8c_a8eb8d2738c53d6735b2d28811ce20a8f) 13803 0 R (orsl-lite_8c_a973759a6c4a56db895b081b9249f46be) 13845 0 R (orsl-lite_8c_a98a8091fa1e2704dc23089e1f32de27e) 13837 0 R (orsl-lite_8c_ac7c47d45b468a1852d3ad86d2e17c261) 13841 0 R (orsl-lite_8c_acd0463e45fdf16cc900a7b976b10db6f) 13800 0 R (orsl-lite_8c_ae1d0673a7dc01ff3d516999e6615e937) 13838 0 R]
+/Limits [(orsl-lite_8c_a8eb8d2738c53d6735b2d28811ce20a8f) (orsl-lite_8c_ae1d0673a7dc01ff3d516999e6615e937)]
+>> endobj
+17330 0 obj <<
+/Names [(orsl-lite_8c_aed5486b9384c2421cead452b6006599e) 13843 0 R (orsl-lite_8h) 8797 0 R (orsl-lite_8h_a01af7da8800377e0f76d1a35fdc83ddd) 13737 0 R (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25b) 13728 0 R (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba01e0a27df5e73f7f4fde727f1f5462c3) 13731 0 R (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba68746913025b9e60e6da2b7a797d88da) 13730 0 R]
+/Limits [(orsl-lite_8c_aed5486b9384c2421cead452b6006599e) (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba68746913025b9e60e6da2b7a797d88da)]
+>> endobj
+17331 0 obj <<
+/Names [(orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25baf415ad310f8809996b11aebd07bb2f7e) 13732 0 R (orsl-lite_8h_a21f22ac51a1b81c4280b22cb99756960) 13726 0 R (orsl-lite_8h_a2407def36b838f9516fc707009559995) 13736 0 R (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60dd) 13729 0 R (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60ddaa3744fd5c62a308412ed93ebb3b6e405) 13733 0 R (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60ddaed0bb04789853580f833ddd36eaa617d) 13734 0 R]
+/Limits [(orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25baf415ad310f8809996b11aebd07bb2f7e) (orsl-lite_8h_a4096c0f7c82f7e85428e7364da6a60ddaed0bb04789853580f833ddd36eaa617d)]
+>> endobj
+17332 0 obj <<
+/Names [(orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) 8885 0 R (orsl-lite_8h_a5c27b064db8c6c2896f297828042efad) 13738 0 R (orsl-lite_8h_a5f11329134ddf46ab84642145c381fe7) 13727 0 R (orsl-lite_8h_a7aa46265ae4f353d04448dddef56a6bc) 13725 0 R (orsl-lite_8h_aa9292150b330a847ce870a70856b42f0) 13724 0 R (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5) 13735 0 R]
+/Limits [(orsl-lite_8h_a58cbe95555e2d38aca30a53b47ede71d) (orsl-lite_8h_abc781a2f6844f808f6e5fbb18c75cca5)]
+>> endobj
+17333 0 obj <<
+/Names [(orsl-lite_8h_ad96d01635b581139184cc242833fb699) 10187 0 R (page.1) 8231 0 R (page.10) 8783 0 R (page.100) 10655 0 R (page.101) 10679 0 R (page.102) 10719 0 R]
+/Limits [(orsl-lite_8h_ad96d01635b581139184cc242833fb699) (page.102)]
+>> endobj
+17334 0 obj <<
+/Names [(page.103) 10738 0 R (page.104) 10753 0 R (page.105) 10779 0 R (page.106) 10823 0 R (page.107) 10874 0 R (page.108) 10899 0 R]
+/Limits [(page.103) (page.108)]
+>> endobj
+17335 0 obj <<
+/Names [(page.109) 10910 0 R (page.11) 8827 0 R (page.110) 10935 0 R (page.111) 10953 0 R (page.112) 10976 0 R (page.113) 11009 0 R]
+/Limits [(page.109) (page.113)]
+>> endobj
+17336 0 obj <<
+/Names [(page.114) 11035 0 R (page.115) 11176 0 R (page.116) 11347 0 R (page.117) 11402 0 R (page.118) 11406 0 R (page.119) 11410 0 R]
+/Limits [(page.114) (page.119)]
+>> endobj
+17337 0 obj <<
+/Names [(page.12) 8857 0 R (page.120) 11414 0 R (page.121) 11423 0 R (page.122) 11586 0 R (page.123) 11747 0 R (page.124) 11771 0 R]
+/Limits [(page.12) (page.124)]
+>> endobj
+17338 0 obj <<
+/Names [(page.125) 11775 0 R (page.126) 11782 0 R (page.127) 11831 0 R (page.128) 11914 0 R (page.129) 12017 0 R (page.13) 8865 0 R]
+/Limits [(page.125) (page.13)]
+>> endobj
+17339 0 obj <<
+/Names [(page.130) 12052 0 R (page.131) 12056 0 R (page.132) 12060 0 R (page.133) 12065 0 R (page.134) 12082 0 R (page.135) 12144 0 R]
+/Limits [(page.130) (page.135)]
+>> endobj
+17340 0 obj <<
+/Names [(page.136) 12216 0 R (page.137) 12231 0 R (page.138) 12235 0 R (page.139) 12240 0 R (page.14) 8877 0 R (page.140) 12256 0 R]
+/Limits [(page.136) (page.140)]
+>> endobj
+17341 0 obj <<
+/Names [(page.141) 12277 0 R (page.142) 12306 0 R (page.143) 12385 0 R (page.144) 12444 0 R (page.145) 12449 0 R (page.146) 12453 0 R]
+/Limits [(page.141) (page.146)]
+>> endobj
+17342 0 obj <<
+/Names [(page.147) 12457 0 R (page.148) 12461 0 R (page.149) 12470 0 R (page.15) 8890 0 R (page.150) 12510 0 R (page.151) 12547 0 R]
+/Limits [(page.147) (page.151)]
+>> endobj
+17343 0 obj <<
+/Names [(page.152) 12551 0 R (page.153) 12583 0 R (page.154) 12621 0 R (page.155) 12640 0 R (page.156) 12646 0 R (page.157) 12663 0 R]
+/Limits [(page.152) (page.157)]
+>> endobj
+17344 0 obj <<
+/Names [(page.158) 12700 0 R (page.159) 12722 0 R (page.16) 8895 0 R (page.160) 12739 0 R (page.161) 12816 0 R (page.162) 12888 0 R]
+/Limits [(page.158) (page.162)]
+>> endobj
+17345 0 obj <<
+/Names [(page.163) 12919 0 R (page.164) 12923 0 R (page.165) 12928 0 R (page.166) 13005 0 R (page.167) 13127 0 R (page.168) 13168 0 R]
+/Limits [(page.163) (page.168)]
+>> endobj
+17346 0 obj <<
+/Names [(page.169) 13173 0 R (page.17) 8904 0 R (page.170) 13177 0 R (page.171) 13181 0 R (page.172) 13185 0 R (page.173) 13198 0 R]
+/Limits [(page.169) (page.173)]
+>> endobj
+17347 0 obj <<
+/Names [(page.174) 13247 0 R (page.175) 13299 0 R (page.176) 13315 0 R (page.177) 13319 0 R (page.178) 13337 0 R (page.179) 13354 0 R]
+/Limits [(page.174) (page.179)]
+>> endobj
+17348 0 obj <<
+/Names [(page.18) 8936 0 R (page.180) 13391 0 R (page.181) 13413 0 R (page.182) 13423 0 R (page.183) 13434 0 R (page.184) 13449 0 R]
+/Limits [(page.18) (page.184)]
+>> endobj
+17349 0 obj <<
+/Names [(page.185) 13470 0 R (page.186) 13521 0 R (page.187) 13568 0 R (page.188) 13586 0 R (page.189) 13609 0 R (page.19) 8965 0 R]
+/Limits [(page.185) (page.19)]
+>> endobj
+17350 0 obj <<
+/Names [(page.190) 13638 0 R (page.191) 13660 0 R (page.192) 13673 0 R (page.193) 13717 0 R (page.194) 13747 0 R (page.195) 13756 0 R]
+/Limits [(page.190) (page.195)]
+>> endobj
+17351 0 obj <<
+/Names [(page.196) 13793 0 R (page.197) 13830 0 R (page.198) 13849 0 R (page.199) 13854 0 R (page.2) 8235 0 R (page.20) 8982 0 R]
+/Limits [(page.196) (page.20)]
+>> endobj
+17352 0 obj <<
+/Names [(page.200) 13924 0 R (page.201) 13997 0 R (page.202) 14073 0 R (page.203) 14138 0 R (page.204) 14200 0 R (page.205) 14263 0 R]
+/Limits [(page.200) (page.205)]
+>> endobj
+17353 0 obj <<
+/Names [(page.206) 14325 0 R (page.207) 14415 0 R (page.208) 14503 0 R (page.209) 14607 0 R (page.21) 8999 0 R (page.210) 14685 0 R]
+/Limits [(page.206) (page.210)]
+>> endobj
+17354 0 obj <<
+/Names [(page.211) 14755 0 R (page.212) 14842 0 R (page.213) 14931 0 R (page.214) 15051 0 R (page.215) 15170 0 R (page.216) 15274 0 R]
+/Limits [(page.211) (page.216)]
+>> endobj
+17355 0 obj <<
+/Names [(page.217) 15338 0 R (page.218) 15441 0 R (page.219) 15544 0 R (page.22) 9025 0 R (page.220) 15606 0 R (page.221) 15668 0 R]
+/Limits [(page.217) (page.221)]
+>> endobj
+17356 0 obj <<
+/Names [(page.222) 15754 0 R (page.223) 15845 0 R (page.224) 15960 0 R (page.225) 16073 0 R (page.226) 16188 0 R (page.227) 16308 0 R]
+/Limits [(page.222) (page.227)]
+>> endobj
+17357 0 obj <<
+/Names [(page.228) 16420 0 R (page.229) 16533 0 R (page.23) 9046 0 R (page.230) 16627 0 R (page.231) 16722 0 R (page.232) 16808 0 R]
+/Limits [(page.228) (page.232)]
+>> endobj
+17358 0 obj <<
+/Names [(page.233) 16876 0 R (page.234) 16956 0 R (page.235) 17047 0 R (page.24) 9063 0 R (page.25) 9117 0 R (page.26) 9185 0 R]
+/Limits [(page.233) (page.26)]
+>> endobj
+17359 0 obj <<
+/Names [(page.27) 9213 0 R (page.28) 9217 0 R (page.29) 9221 0 R (page.3) 8243 0 R (page.30) 9228 0 R (page.31) 9238 0 R]
+/Limits [(page.27) (page.31)]
+>> endobj
+17360 0 obj <<
+/Names [(page.32) 9252 0 R (page.33) 9269 0 R (page.34) 9296 0 R (page.35) 9312 0 R (page.36) 9331 0 R (page.37) 9356 0 R]
+/Limits [(page.32) (page.37)]
+>> endobj
+17361 0 obj <<
+/Names [(page.38) 9380 0 R (page.39) 9392 0 R (page.4) 8249 0 R (page.40) 9408 0 R (page.41) 9424 0 R (page.42) 9440 0 R]
+/Limits [(page.38) (page.42)]
+>> endobj
+17362 0 obj <<
+/Names [(page.43) 9457 0 R (page.44) 9473 0 R (page.45) 9489 0 R (page.46) 9509 0 R (page.47) 9541 0 R (page.48) 9558 0 R]
+/Limits [(page.43) (page.48)]
+>> endobj
+17363 0 obj <<
+/Names [(page.49) 9611 0 R (page.5) 8293 0 R (page.50) 9640 0 R (page.51) 9663 0 R (page.52) 9679 0 R (page.53) 9692 0 R]
+/Limits [(page.49) (page.53)]
+>> endobj
+17364 0 obj <<
+/Names [(page.54) 9726 0 R (page.55) 9771 0 R (page.56) 9791 0 R (page.57) 9795 0 R (page.58) 9808 0 R (page.59) 9826 0 R]
+/Limits [(page.54) (page.59)]
+>> endobj
+17365 0 obj <<
+/Names [(page.6) 8352 0 R (page.60) 9844 0 R (page.61) 9903 0 R (page.62) 9984 0 R (page.63) 10026 0 R (page.64) 10030 0 R]
+/Limits [(page.6) (page.64)]
+>> endobj
+17366 0 obj <<
+/Names [(page.65) 10034 0 R (page.66) 10038 0 R (page.67) 10043 0 R (page.68) 10052 0 R (page.69) 10064 0 R (page.7) 8433 0 R]
+/Limits [(page.65) (page.7)]
+>> endobj
+17367 0 obj <<
+/Names [(page.70) 10080 0 R (page.71) 10096 0 R (page.72) 10112 0 R (page.73) 10127 0 R (page.74) 10143 0 R (page.75) 10158 0 R]
+/Limits [(page.70) (page.75)]
+>> endobj
+17368 0 obj <<
+/Names [(page.76) 10178 0 R (page.77) 10212 0 R (page.78) 10234 0 R (page.79) 10252 0 R (page.8) 8584 0 R (page.80) 10271 0 R]
+/Limits [(page.76) (page.80)]
+>> endobj
+17369 0 obj <<
+/Names [(page.81) 10285 0 R (page.82) 10304 0 R (page.83) 10328 0 R (page.84) 10345 0 R (page.85) 10381 0 R (page.86) 10414 0 R]
+/Limits [(page.81) (page.86)]
+>> endobj
+17370 0 obj <<
+/Names [(page.87) 10432 0 R (page.88) 10436 0 R (page.89) 10440 0 R (page.9) 8716 0 R (page.90) 10445 0 R (page.91) 10450 0 R]
+/Limits [(page.87) (page.91)]
+>> endobj
+17371 0 obj <<
+/Names [(page.92) 10467 0 R (page.93) 10496 0 R (page.94) 10516 0 R (page.95) 10532 0 R (page.96) 10559 0 R (page.97) 10584 0 R]
+/Limits [(page.92) (page.97)]
+>> endobj
+17372 0 obj <<
+/Names [(page.98) 10599 0 R (page.99) 10635 0 R (section*.10) 78 0 R (section*.100) 9120 0 R (section*.1000) 4822 0 R (section*.1001) 4826 0 R]
+/Limits [(page.98) (section*.1001)]
+>> endobj
+17373 0 obj <<
+/Names [(section*.1002) 4830 0 R (section*.1003) 4834 0 R (section*.1004) 4838 0 R (section*.1005) 4842 0 R (section*.1006) 4846 0 R (section*.1007) 4850 0 R]
+/Limits [(section*.1002) (section*.1007)]
+>> endobj
+17374 0 obj <<
+/Names [(section*.1008) 4854 0 R (section*.1009) 4858 0 R (section*.101) 9121 0 R (section*.1010) 4862 0 R (section*.1011) 4866 0 R (section*.1012) 4870 0 R]
+/Limits [(section*.1008) (section*.1012)]
+>> endobj
+17375 0 obj <<
+/Names [(section*.1013) 4874 0 R (section*.1014) 4878 0 R (section*.1015) 4882 0 R (section*.1016) 4886 0 R (section*.1017) 4890 0 R (section*.1018) 4894 0 R]
+/Limits [(section*.1013) (section*.1018)]
+>> endobj
+17376 0 obj <<
+/Names [(section*.1019) 4902 0 R (section*.102) 9186 0 R (section*.1020) 4906 0 R (section*.1021) 4910 0 R (section*.1022) 4914 0 R (section*.1023) 4918 0 R]
+/Limits [(section*.1019) (section*.1023)]
+>> endobj
+17377 0 obj <<
+/Names [(section*.1024) 12664 0 R (section*.1025) 12665 0 R (section*.1026) 12666 0 R (section*.1027) 12667 0 R (section*.1028) 4930 0 R (section*.1029) 4934 0 R]
+/Limits [(section*.1024) (section*.1029)]
+>> endobj
+17378 0 obj <<
+/Names [(section*.103) 9187 0 R (section*.1030) 4938 0 R (section*.1031) 4942 0 R (section*.1032) 4946 0 R (section*.1033) 4950 0 R (section*.1034) 4958 0 R]
+/Limits [(section*.103) (section*.1034)]
+>> endobj
+17379 0 obj <<
+/Names [(section*.1035) 4966 0 R (section*.1036) 4970 0 R (section*.1037) 12701 0 R (section*.1038) 4982 0 R (section*.1039) 4986 0 R (section*.104) 9188 0 R]
+/Limits [(section*.1035) (section*.104)]
+>> endobj
+17380 0 obj <<
+/Names [(section*.1040) 4990 0 R (section*.1041) 4994 0 R (section*.1042) 4998 0 R (section*.1043) 5002 0 R (section*.1044) 5006 0 R (section*.1045) 5010 0 R]
+/Limits [(section*.1040) (section*.1045)]
+>> endobj
+17381 0 obj <<
+/Names [(section*.1046) 5014 0 R (section*.1047) 5018 0 R (section*.1048) 5022 0 R (section*.1049) 5026 0 R (section*.105) 9189 0 R (section*.1050) 5030 0 R]
+/Limits [(section*.1046) (section*.1050)]
+>> endobj
+17382 0 obj <<
+/Names [(section*.1051) 5034 0 R (section*.1052) 5038 0 R (section*.1053) 5042 0 R (section*.1054) 5046 0 R (section*.1055) 12740 0 R (section*.1056) 12741 0 R]
+/Limits [(section*.1051) (section*.1056)]
+>> endobj
+17383 0 obj <<
+/Names [(section*.1057) 12742 0 R (section*.1058) 5058 0 R (section*.1059) 5062 0 R (section*.106) 534 0 R (section*.1060) 5066 0 R (section*.1061) 5070 0 R]
+/Limits [(section*.1057) (section*.1061)]
+>> endobj
+17384 0 obj <<
+/Names [(section*.1062) 5078 0 R (section*.1063) 5082 0 R (section*.1064) 5090 0 R (section*.1065) 5094 0 R (section*.1066) 5098 0 R (section*.1067) 5102 0 R]
+/Limits [(section*.1062) (section*.1067)]
+>> endobj
+17385 0 obj <<
+/Names [(section*.1068) 5106 0 R (section*.1069) 12817 0 R (section*.107) 538 0 R (section*.1070) 5118 0 R (section*.1071) 5122 0 R (section*.1072) 5126 0 R]
+/Limits [(section*.1068) (section*.1072)]
+>> endobj
+17386 0 obj <<
+/Names [(section*.1073) 5130 0 R (section*.1074) 5134 0 R (section*.1075) 5138 0 R (section*.1076) 5142 0 R (section*.1077) 5146 0 R (section*.1078) 5150 0 R]
+/Limits [(section*.1073) (section*.1078)]
+>> endobj
+17387 0 obj <<
+/Names [(section*.1079) 5154 0 R (section*.108) 546 0 R (section*.1080) 5158 0 R (section*.1081) 5162 0 R (section*.1082) 5166 0 R (section*.1083) 5170 0 R]
+/Limits [(section*.1079) (section*.1083)]
+>> endobj
+17388 0 obj <<
+/Names [(section*.1084) 5174 0 R (section*.1085) 5178 0 R (section*.1086) 5182 0 R (section*.1087) 5186 0 R (section*.1088) 5190 0 R (section*.1089) 5194 0 R]
+/Limits [(section*.1084) (section*.1089)]
+>> endobj
+17389 0 obj <<
+/Names [(section*.109) 554 0 R (section*.1090) 5198 0 R (section*.1091) 5202 0 R (section*.1092) 5206 0 R (section*.1093) 5210 0 R (section*.1094) 5214 0 R]
+/Limits [(section*.109) (section*.1094)]
+>> endobj
+17390 0 obj <<
+/Names [(section*.1095) 5218 0 R (section*.1096) 5222 0 R (section*.1097) 5226 0 R (section*.1098) 5230 0 R (section*.1099) 5234 0 R (section*.11) 82 0 R]
+/Limits [(section*.1095) (section*.11)]
+>> endobj
+17391 0 obj <<
+/Names [(section*.110) 558 0 R (section*.1100) 5238 0 R (section*.1101) 5242 0 R (section*.1102) 5246 0 R (section*.1103) 5250 0 R (section*.1104) 5254 0 R]
+/Limits [(section*.110) (section*.1104)]
+>> endobj
+17392 0 obj <<
+/Names [(section*.1105) 5258 0 R (section*.1106) 5262 0 R (section*.1107) 5266 0 R (section*.1108) 5270 0 R (section*.1109) 5274 0 R (section*.111) 566 0 R]
+/Limits [(section*.1105) (section*.111)]
+>> endobj
+17393 0 obj <<
+/Names [(section*.1110) 5278 0 R (section*.1111) 5282 0 R (section*.1112) 5286 0 R (section*.1113) 5290 0 R (section*.1114) 13006 0 R (section*.1115) 5302 0 R]
+/Limits [(section*.1110) (section*.1115)]
+>> endobj
+17394 0 obj <<
+/Names [(section*.1116) 5306 0 R (section*.1117) 5310 0 R (section*.1118) 5314 0 R (section*.1119) 5318 0 R (section*.112) 570 0 R (section*.1120) 5322 0 R]
+/Limits [(section*.1116) (section*.1120)]
+>> endobj
+17395 0 obj <<
+/Names [(section*.1121) 5326 0 R (section*.1122) 5330 0 R (section*.1123) 5334 0 R (section*.1124) 5338 0 R (section*.1125) 5342 0 R (section*.1126) 5346 0 R]
+/Limits [(section*.1121) (section*.1126)]
+>> endobj
+17396 0 obj <<
+/Names [(section*.1127) 5350 0 R (section*.1128) 5354 0 R (section*.1129) 5358 0 R (section*.113) 574 0 R (section*.1130) 5362 0 R (section*.1131) 5366 0 R]
+/Limits [(section*.1127) (section*.1131)]
+>> endobj
+17397 0 obj <<
+/Names [(section*.1132) 5370 0 R (section*.1133) 5374 0 R (section*.1134) 5378 0 R (section*.1135) 5382 0 R (section*.1136) 5386 0 R (section*.1137) 5390 0 R]
+/Limits [(section*.1132) (section*.1137)]
+>> endobj
+17398 0 obj <<
+/Names [(section*.1138) 5394 0 R (section*.1139) 5398 0 R (section*.114) 578 0 R (section*.1140) 5402 0 R (section*.1141) 5406 0 R (section*.1142) 5410 0 R]
+/Limits [(section*.1138) (section*.1142)]
+>> endobj
+17399 0 obj <<
+/Names [(section*.1143) 5414 0 R (section*.1144) 5418 0 R (section*.1145) 5422 0 R (section*.1146) 5426 0 R (section*.1147) 5430 0 R (section*.1148) 5434 0 R]
+/Limits [(section*.1143) (section*.1148)]
+>> endobj
+17400 0 obj <<
+/Names [(section*.1149) 5438 0 R (section*.115) 582 0 R (section*.1150) 5442 0 R (section*.1151) 5446 0 R (section*.1152) 5450 0 R (section*.1153) 5454 0 R]
+/Limits [(section*.1149) (section*.1153)]
+>> endobj
+17401 0 obj <<
+/Names [(section*.1154) 5458 0 R (section*.1155) 5462 0 R (section*.1156) 5466 0 R (section*.1157) 5470 0 R (section*.1158) 5474 0 R (section*.1159) 5478 0 R]
+/Limits [(section*.1154) (section*.1159)]
+>> endobj
+17402 0 obj <<
+/Names [(section*.116) 586 0 R (section*.1160) 5482 0 R (section*.1161) 5486 0 R (section*.1162) 5490 0 R (section*.1163) 5494 0 R (section*.1164) 5498 0 R]
+/Limits [(section*.116) (section*.1164)]
+>> endobj
+17403 0 obj <<
+/Names [(section*.1165) 5502 0 R (section*.1166) 5506 0 R (section*.1167) 5510 0 R (section*.1168) 5514 0 R (section*.1169) 5518 0 R (section*.117) 590 0 R]
+/Limits [(section*.1165) (section*.117)]
+>> endobj
+17404 0 obj <<
+/Names [(section*.1170) 5522 0 R (section*.1171) 5526 0 R (section*.1172) 5530 0 R (section*.1173) 5534 0 R (section*.1174) 5538 0 R (section*.1175) 5542 0 R]
+/Limits [(section*.1170) (section*.1175)]
+>> endobj
+17405 0 obj <<
+/Names [(section*.1176) 5546 0 R (section*.1177) 5550 0 R (section*.1178) 5554 0 R (section*.1179) 5558 0 R (section*.118) 594 0 R (section*.1180) 5562 0 R]
+/Limits [(section*.1176) (section*.1180)]
+>> endobj
+17406 0 obj <<
+/Names [(section*.1181) 5566 0 R (section*.1182) 5570 0 R (section*.1183) 5574 0 R (section*.1184) 5578 0 R (section*.1185) 5582 0 R (section*.1186) 5586 0 R]
+/Limits [(section*.1181) (section*.1186)]
+>> endobj
+17407 0 obj <<
+/Names [(section*.1187) 5590 0 R (section*.1188) 5594 0 R (section*.1189) 5598 0 R (section*.119) 598 0 R (section*.1190) 5602 0 R (section*.1191) 5606 0 R]
+/Limits [(section*.1187) (section*.1191)]
+>> endobj
+17408 0 obj <<
+/Names [(section*.1192) 5610 0 R (section*.1193) 5614 0 R (section*.1194) 5618 0 R (section*.1195) 5622 0 R (section*.1196) 5626 0 R (section*.1197) 5630 0 R]
+/Limits [(section*.1192) (section*.1197)]
+>> endobj
+17409 0 obj <<
+/Names [(section*.1198) 13199 0 R (section*.1199) 13200 0 R (section*.12) 86 0 R (section*.120) 602 0 R (section*.1200) 13201 0 R (section*.1201) 13248 0 R]
+/Limits [(section*.1198) (section*.1201)]
+>> endobj
+17410 0 obj <<
+/Names [(section*.1202) 13249 0 R (section*.1203) 13250 0 R (section*.1204) 13300 0 R (section*.1205) 5650 0 R (section*.1206) 5654 0 R (section*.1207) 5658 0 R]
+/Limits [(section*.1202) (section*.1207)]
+>> endobj
+17411 0 obj <<
+/Names [(section*.1208) 5662 0 R (section*.1209) 5666 0 R (section*.121) 606 0 R (section*.1210) 5670 0 R (section*.1211) 5674 0 R (section*.1212) 5678 0 R]
+/Limits [(section*.1208) (section*.1212)]
+>> endobj
+17412 0 obj <<
+/Names [(section*.1213) 5682 0 R (section*.1214) 5686 0 R (section*.1215) 5690 0 R (section*.1216) 5694 0 R (section*.1217) 5698 0 R (section*.1218) 5702 0 R]
+/Limits [(section*.1213) (section*.1218)]
+>> endobj
+17413 0 obj <<
+/Names [(section*.1219) 5706 0 R (section*.122) 610 0 R (section*.1220) 5710 0 R (section*.1221) 5714 0 R (section*.1222) 5718 0 R (section*.1223) 5722 0 R]
+/Limits [(section*.1219) (section*.1223)]
+>> endobj
+17414 0 obj <<
+/Names [(section*.1224) 5726 0 R (section*.1225) 5730 0 R (section*.1226) 5734 0 R (section*.1227) 5738 0 R (section*.1228) 5742 0 R (section*.1229) 5746 0 R]
+/Limits [(section*.1224) (section*.1229)]
+>> endobj
+17415 0 obj <<
+/Names [(section*.123) 614 0 R (section*.1230) 5750 0 R (section*.1231) 5754 0 R (section*.1232) 5758 0 R (section*.1233) 5762 0 R (section*.1234) 5766 0 R]
+/Limits [(section*.123) (section*.1234)]
+>> endobj
+17416 0 obj <<
+/Names [(section*.1235) 5770 0 R (section*.1236) 5774 0 R (section*.1237) 5778 0 R (section*.1238) 5782 0 R (section*.1239) 5786 0 R (section*.124) 618 0 R]
+/Limits [(section*.1235) (section*.124)]
+>> endobj
+17417 0 obj <<
+/Names [(section*.1240) 5790 0 R (section*.1241) 5794 0 R (section*.1242) 5798 0 R (section*.1243) 5802 0 R (section*.1244) 5806 0 R (section*.1245) 5810 0 R]
+/Limits [(section*.1240) (section*.1245)]
+>> endobj
+17418 0 obj <<
+/Names [(section*.1246) 5818 0 R (section*.1247) 5822 0 R (section*.1248) 5826 0 R (section*.1249) 5830 0 R (section*.125) 622 0 R (section*.1250) 13338 0 R]
+/Limits [(section*.1246) (section*.1250)]
+>> endobj
+17419 0 obj <<
+/Names [(section*.1251) 13355 0 R (section*.1252) 13356 0 R (section*.1253) 13357 0 R (section*.1254) 5846 0 R (section*.1255) 5850 0 R (section*.1256) 5854 0 R]
+/Limits [(section*.1251) (section*.1256)]
+>> endobj
+17420 0 obj <<
+/Names [(section*.1257) 5858 0 R (section*.1258) 5862 0 R (section*.1259) 5866 0 R (section*.126) 626 0 R (section*.1260) 5874 0 R (section*.1261) 5878 0 R]
+/Limits [(section*.1257) (section*.1261)]
+>> endobj
+17421 0 obj <<
+/Names [(section*.1262) 5886 0 R (section*.1263) 5890 0 R (section*.1264) 5894 0 R (section*.1265) 13392 0 R (section*.1266) 13393 0 R (section*.1267) 13394 0 R]
+/Limits [(section*.1262) (section*.1267)]
+>> endobj
+17422 0 obj <<
+/Names [(section*.1268) 5906 0 R (section*.1269) 5914 0 R (section*.127) 630 0 R (section*.1270) 5918 0 R (section*.1271) 5922 0 R (section*.1272) 5926 0 R]
+/Limits [(section*.1268) (section*.1272)]
+>> endobj
+17423 0 obj <<
+/Names [(section*.1273) 5934 0 R (section*.1274) 5938 0 R (section*.1275) 5942 0 R (section*.1276) 5946 0 R (section*.1277) 5950 0 R (section*.1278) 5954 0 R]
+/Limits [(section*.1273) (section*.1278)]
+>> endobj
+17424 0 obj <<
+/Names [(section*.1279) 5958 0 R (section*.128) 634 0 R (section*.1280) 5962 0 R (section*.1281) 5966 0 R (section*.1282) 5970 0 R (section*.1283) 5974 0 R]
+/Limits [(section*.1279) (section*.1283)]
+>> endobj
+17425 0 obj <<
+/Names [(section*.1284) 13424 0 R (section*.1285) 13425 0 R (section*.1286) 13435 0 R (section*.1287) 5986 0 R (section*.1288) 5994 0 R (section*.1289) 5998 0 R]
+/Limits [(section*.1284) (section*.1289)]
+>> endobj
+17426 0 obj <<
+/Names [(section*.129) 638 0 R (section*.1290) 6002 0 R (section*.1291) 13439 0 R (section*.1292) 6014 0 R (section*.1293) 6018 0 R (section*.1294) 13450 0 R]
+/Limits [(section*.129) (section*.1294)]
+>> endobj
+17427 0 obj <<
+/Names [(section*.1295) 13451 0 R (section*.1296) 6030 0 R (section*.1297) 6034 0 R (section*.1298) 6038 0 R (section*.1299) 6042 0 R (section*.13) 90 0 R]
+/Limits [(section*.1295) (section*.13)]
+>> endobj
+17428 0 obj <<
+/Names [(section*.130) 642 0 R (section*.1300) 6046 0 R (section*.1301) 6054 0 R (section*.1302) 13471 0 R (section*.1303) 6066 0 R (section*.1304) 13473 0 R]
+/Limits [(section*.130) (section*.1304)]
+>> endobj
+17429 0 obj <<
+/Names [(section*.1305) 6078 0 R (section*.1306) 13475 0 R (section*.1307) 13522 0 R (section*.1308) 6090 0 R (section*.1309) 6094 0 R (section*.131) 646 0 R]
+/Limits [(section*.1305) (section*.131)]
+>> endobj
+17430 0 obj <<
+/Names [(section*.1310) 6098 0 R (section*.1311) 6106 0 R (section*.1312) 6110 0 R (section*.1313) 13524 0 R (section*.1314) 13526 0 R (section*.1315) 6122 0 R]
+/Limits [(section*.1310) (section*.1315)]
+>> endobj
+17431 0 obj <<
+/Names [(section*.1316) 6130 0 R (section*.1317) 13587 0 R (section*.1318) 6142 0 R (section*.1319) 6146 0 R (section*.132) 650 0 R (section*.1320) 6150 0 R]
+/Limits [(section*.1316) (section*.1320)]
+>> endobj
+17432 0 obj <<
+/Names [(section*.1321) 6154 0 R (section*.1322) 13592 0 R (section*.1323) 13593 0 R (section*.1324) 13610 0 R (section*.1325) 13611 0 R (section*.1326) 6166 0 R]
+/Limits [(section*.1321) (section*.1326)]
+>> endobj
+17433 0 obj <<
+/Names [(section*.1327) 6170 0 R (section*.1328) 6174 0 R (section*.1329) 6178 0 R (section*.133) 654 0 R (section*.1330) 6182 0 R (section*.1331) 6186 0 R]
+/Limits [(section*.1327) (section*.1331)]
+>> endobj
+17434 0 obj <<
+/Names [(section*.1332) 6190 0 R (section*.1333) 6194 0 R (section*.1334) 6198 0 R (section*.1335) 6206 0 R (section*.1336) 6214 0 R (section*.1337) 6218 0 R]
+/Limits [(section*.1332) (section*.1337)]
+>> endobj
+17435 0 obj <<
+/Names [(section*.1338) 6222 0 R (section*.1339) 6226 0 R (section*.134) 662 0 R (section*.1340) 13639 0 R (section*.1341) 13640 0 R (section*.1342) 13641 0 R]
+/Limits [(section*.1338) (section*.1342)]
+>> endobj
+17436 0 obj <<
+/Names [(section*.1343) 6238 0 R (section*.1344) 6242 0 R (section*.1345) 6250 0 R (section*.1346) 6254 0 R (section*.1347) 6258 0 R (section*.1348) 6262 0 R]
+/Limits [(section*.1343) (section*.1348)]
+>> endobj
+17437 0 obj <<
+/Names [(section*.1349) 6270 0 R (section*.135) 666 0 R (section*.1350) 6274 0 R (section*.1351) 6278 0 R (section*.1352) 6282 0 R (section*.1353) 6286 0 R]
+/Limits [(section*.1349) (section*.1353)]
+>> endobj
+17438 0 obj <<
+/Names [(section*.1354) 6290 0 R (section*.1355) 13674 0 R (section*.1356) 13675 0 R (section*.1357) 6302 0 R (section*.1358) 6310 0 R (section*.1359) 6314 0 R]
+/Limits [(section*.1354) (section*.1359)]
+>> endobj
+17439 0 obj <<
+/Names [(section*.136) 674 0 R (section*.1360) 6318 0 R (section*.1361) 13680 0 R (section*.1362) 13718 0 R (section*.1363) 13719 0 R (section*.1364) 13720 0 R]
+/Limits [(section*.136) (section*.1364)]
+>> endobj
+17440 0 obj <<
+/Names [(section*.1365) 13721 0 R (section*.1366) 6330 0 R (section*.1367) 6334 0 R (section*.1368) 6342 0 R (section*.1369) 6346 0 R (section*.137) 678 0 R]
+/Limits [(section*.1365) (section*.137)]
+>> endobj
+17441 0 obj <<
+/Names [(section*.1370) 6350 0 R (section*.1371) 6354 0 R (section*.1372) 6362 0 R (section*.1373) 6366 0 R (section*.1374) 6374 0 R (section*.1375) 6378 0 R]
+/Limits [(section*.1370) (section*.1375)]
+>> endobj
+17442 0 obj <<
+/Names [(section*.1376) 6382 0 R (section*.1377) 6386 0 R (section*.1378) 13794 0 R (section*.1379) 13795 0 R (section*.138) 682 0 R (section*.1380) 13835 0 R]
+/Limits [(section*.1376) (section*.1380)]
+>> endobj
+17443 0 obj <<
+/Names [(section*.1381) 6398 0 R (section*.1382) 6402 0 R (section*.1383) 6406 0 R (section*.1384) 6410 0 R (section*.1385) 6414 0 R (section*.1386) 6422 0 R]
+/Limits [(section*.1381) (section*.1386)]
+>> endobj
+17444 0 obj <<
+/Names [(section*.1387) 6426 0 R (section*.1388) 6430 0 R (section*.1389) 6434 0 R (section*.139) 686 0 R (section*.1390) 6438 0 R (section*.1391) 6442 0 R]
+/Limits [(section*.1387) (section*.1391)]
+>> endobj
+17445 0 obj <<
+/Names [(section*.1392) 6446 0 R (section*.1393) 6450 0 R (section*.1394) 6454 0 R (section*.1395) 6458 0 R (section*.1396) 6462 0 R (section*.1397) 6466 0 R]
+/Limits [(section*.1392) (section*.1397)]
+>> endobj
+17446 0 obj <<
+/Names [(section*.1398) 6470 0 R (section*.1399) 6474 0 R (section*.14) 94 0 R (section*.140) 690 0 R (section*.1400) 6482 0 R (section*.1401) 6486 0 R]
+/Limits [(section*.1398) (section*.1401)]
+>> endobj
+17447 0 obj <<
+/Names [(section*.1402) 6490 0 R (section*.1403) 6494 0 R (section*.141) 694 0 R (section*.142) 698 0 R (section*.143) 702 0 R (section*.144) 706 0 R]
+/Limits [(section*.1402) (section*.144)]
+>> endobj
+17448 0 obj <<
+/Names [(section*.145) 710 0 R (section*.146) 714 0 R (section*.147) 718 0 R (section*.148) 722 0 R (section*.149) 726 0 R (section*.15) 98 0 R]
+/Limits [(section*.145) (section*.15)]
+>> endobj
+17449 0 obj <<
+/Names [(section*.150) 730 0 R (section*.151) 734 0 R (section*.152) 9239 0 R (section*.153) 750 0 R (section*.154) 754 0 R (section*.155) 9242 0 R]
+/Limits [(section*.150) (section*.155)]
+>> endobj
+17450 0 obj <<
+/Names [(section*.156) 770 0 R (section*.157) 774 0 R (section*.158) 9253 0 R (section*.159) 790 0 R (section*.16) 102 0 R (section*.160) 794 0 R]
+/Limits [(section*.156) (section*.160)]
+>> endobj
+17451 0 obj <<
+/Names [(section*.161) 798 0 R (section*.162) 9270 0 R (section*.163) 9271 0 R (section*.164) 9272 0 R (section*.165) 814 0 R (section*.166) 822 0 R]
+/Limits [(section*.161) (section*.166)]
+>> endobj
+17452 0 obj <<
+/Names [(section*.167) 826 0 R (section*.168) 830 0 R (section*.169) 834 0 R (section*.17) 106 0 R (section*.170) 838 0 R (section*.171) 846 0 R]
+/Limits [(section*.167) (section*.171)]
+>> endobj
+17453 0 obj <<
+/Names [(section*.172) 9297 0 R (section*.173) 9298 0 R (section*.174) 862 0 R (section*.175) 866 0 R (section*.176) 9313 0 R (section*.177) 882 0 R]
+/Limits [(section*.172) (section*.177)]
+>> endobj
+17454 0 obj <<
+/Names [(section*.178) 886 0 R (section*.179) 890 0 R (section*.18) 110 0 R (section*.180) 894 0 R (section*.181) 898 0 R (section*.182) 902 0 R]
+/Limits [(section*.178) (section*.182)]
+>> endobj
+17455 0 obj <<
+/Names [(section*.183) 906 0 R (section*.184) 910 0 R (section*.185) 914 0 R (section*.186) 9332 0 R (section*.187) 930 0 R (section*.188) 934 0 R]
+/Limits [(section*.183) (section*.188)]
+>> endobj
+17456 0 obj <<
+/Names [(section*.189) 9357 0 R (section*.19) 114 0 R (section*.190) 950 0 R (section*.191) 9359 0 R (section*.192) 9360 0 R (section*.193) 9361 0 R]
+/Limits [(section*.189) (section*.193)]
+>> endobj
+17457 0 obj <<
+/Names [(section*.194) 966 0 R (section*.195) 970 0 R (section*.196) 978 0 R (section*.197) 982 0 R (section*.198) 986 0 R (section*.199) 990 0 R]
+/Limits [(section*.194) (section*.199)]
+>> endobj
+17458 0 obj <<
+/Names [(section*.2) 8828 0 R (section*.20) 118 0 R (section*.200) 994 0 R (section*.201) 1002 0 R (section*.202) 1006 0 R (section*.203) 9381 0 R]
+/Limits [(section*.2) (section*.203)]
+>> endobj
+17459 0 obj <<
+/Names [(section*.204) 1022 0 R (section*.205) 9393 0 R (section*.206) 1038 0 R (section*.207) 9395 0 R (section*.208) 1054 0 R (section*.209) 9397 0 R]
+/Limits [(section*.204) (section*.209)]
+>> endobj
+17460 0 obj <<
+/Names [(section*.21) 122 0 R (section*.210) 1070 0 R (section*.211) 9409 0 R (section*.212) 1086 0 R (section*.213) 9411 0 R (section*.214) 1102 0 R]
+/Limits [(section*.21) (section*.214)]
+>> endobj
+17461 0 obj <<
+/Names [(section*.215) 9413 0 R (section*.216) 1118 0 R (section*.217) 9425 0 R (section*.218) 1134 0 R (section*.219) 9427 0 R (section*.22) 126 0 R]
+/Limits [(section*.215) (section*.22)]
+>> endobj
+17462 0 obj <<
+/Names [(section*.220) 1150 0 R (section*.221) 9429 0 R (section*.222) 1166 0 R (section*.223) 9441 0 R (section*.224) 1182 0 R (section*.225) 9443 0 R]
+/Limits [(section*.220) (section*.225)]
+>> endobj
+17463 0 obj <<
+/Names [(section*.226) 1198 0 R (section*.227) 9445 0 R (section*.228) 1214 0 R (section*.229) 9458 0 R (section*.23) 130 0 R (section*.230) 1230 0 R]
+/Limits [(section*.226) (section*.230)]
+>> endobj
+17464 0 obj <<
+/Names [(section*.231) 9460 0 R (section*.232) 1246 0 R (section*.233) 9462 0 R (section*.234) 1262 0 R (section*.235) 9474 0 R (section*.236) 1278 0 R]
+/Limits [(section*.231) (section*.236)]
+>> endobj
+17465 0 obj <<
+/Names [(section*.237) 9476 0 R (section*.238) 1294 0 R (section*.239) 9478 0 R (section*.24) 134 0 R (section*.240) 1310 0 R (section*.241) 9490 0 R]
+/Limits [(section*.237) (section*.241)]
+>> endobj
+17466 0 obj <<
+/Names [(section*.242) 1326 0 R (section*.243) 9492 0 R (section*.244) 1342 0 R (section*.245) 9510 0 R (section*.246) 9511 0 R (section*.247) 1358 0 R]
+/Limits [(section*.242) (section*.247)]
+>> endobj
+17467 0 obj <<
+/Names [(section*.248) 1366 0 R (section*.249) 1370 0 R (section*.25) 138 0 R (section*.250) 1374 0 R (section*.251) 1378 0 R (section*.252) 1382 0 R]
+/Limits [(section*.248) (section*.252)]
+>> endobj
+17468 0 obj <<
+/Names [(section*.253) 1386 0 R (section*.254) 1390 0 R (section*.255) 1394 0 R (section*.256) 1402 0 R (section*.257) 1406 0 R (section*.258) 1410 0 R]
+/Limits [(section*.253) (section*.258)]
+>> endobj
+17469 0 obj <<
+/Names [(section*.259) 1414 0 R (section*.26) 142 0 R (section*.260) 9542 0 R (section*.261) 9543 0 R (section*.262) 1430 0 R (section*.263) 1434 0 R]
+/Limits [(section*.259) (section*.263)]
+>> endobj
+17470 0 obj <<
+/Names [(section*.264) 1442 0 R (section*.265) 1446 0 R (section*.266) 1450 0 R (section*.267) 1454 0 R (section*.268) 1458 0 R (section*.269) 1466 0 R]
+/Limits [(section*.264) (section*.269)]
+>> endobj
+17471 0 obj <<
+/Names [(section*.27) 146 0 R (section*.270) 1470 0 R (section*.271) 9612 0 R (section*.272) 9613 0 R (section*.273) 1486 0 R (section*.274) 1490 0 R]
+/Limits [(section*.27) (section*.274)]
+>> endobj
+17472 0 obj <<
+/Names [(section*.275) 1494 0 R (section*.276) 9641 0 R (section*.277) 9642 0 R (section*.278) 9643 0 R (section*.279) 9644 0 R (section*.28) 150 0 R]
+/Limits [(section*.275) (section*.28)]
+>> endobj
+17473 0 obj <<
+/Names [(section*.280) 9645 0 R (section*.281) 1510 0 R (section*.282) 1514 0 R (section*.283) 1522 0 R (section*.284) 1526 0 R (section*.285) 1530 0 R]
+/Limits [(section*.280) (section*.285)]
+>> endobj
+17474 0 obj <<
+/Names [(section*.286) 1534 0 R (section*.287) 1538 0 R (section*.288) 1542 0 R (section*.289) 1546 0 R (section*.29) 154 0 R (section*.290) 1554 0 R]
+/Limits [(section*.286) (section*.290)]
+>> endobj
+17475 0 obj <<
+/Names [(section*.291) 1558 0 R (section*.292) 1562 0 R (section*.293) 1566 0 R (section*.294) 9680 0 R (section*.295) 9681 0 R (section*.296) 1582 0 R]
+/Limits [(section*.291) (section*.296)]
+>> endobj
+17476 0 obj <<
+/Names [(section*.297) 1586 0 R (section*.298) 1594 0 R (section*.299) 9693 0 R (section*.3) 8829 0 R (section*.30) 8878 0 R (section*.300) 9694 0 R]
+/Limits [(section*.297) (section*.300)]
+>> endobj
+17477 0 obj <<
+/Names [(section*.301) 1610 0 R (section*.302) 1614 0 R (section*.303) 1622 0 R (section*.304) 1626 0 R (section*.305) 1634 0 R (section*.306) 9727 0 R]
+/Limits [(section*.301) (section*.306)]
+>> endobj
+17478 0 obj <<
+/Names [(section*.307) 9728 0 R (section*.308) 1650 0 R (section*.309) 1658 0 R (section*.31) 8879 0 R (section*.310) 1662 0 R (section*.311) 9732 0 R]
+/Limits [(section*.307) (section*.311)]
+>> endobj
+17479 0 obj <<
+/Names [(section*.312) 9733 0 R (section*.313) 9772 0 R (section*.314) 1678 0 R (section*.315) 1686 0 R (section*.316) 1690 0 R (section*.317) 1694 0 R]
+/Limits [(section*.312) (section*.317)]
+>> endobj
+17480 0 obj <<
+/Names [(section*.318) 1698 0 R (section*.319) 1702 0 R (section*.32) 166 0 R (section*.320) 1706 0 R (section*.321) 1710 0 R (section*.322) 1714 0 R]
+/Limits [(section*.318) (section*.322)]
+>> endobj
+17481 0 obj <<
+/Names [(section*.323) 1718 0 R (section*.324) 1722 0 R (section*.325) 1726 0 R (section*.326) 1730 0 R (section*.327) 1734 0 R (section*.328) 1738 0 R]
+/Limits [(section*.323) (section*.328)]
+>> endobj
+17482 0 obj <<
+/Names [(section*.329) 1742 0 R (section*.33) 170 0 R (section*.330) 1746 0 R (section*.331) 1750 0 R (section*.332) 1758 0 R (section*.333) 1762 0 R]
+/Limits [(section*.329) (section*.333)]
+>> endobj
+17483 0 obj <<
+/Names [(section*.334) 1766 0 R (section*.335) 1770 0 R (section*.336) 1774 0 R (section*.337) 1778 0 R (section*.338) 1782 0 R (section*.339) 1786 0 R]
+/Limits [(section*.334) (section*.339)]
+>> endobj
+17484 0 obj <<
+/Names [(section*.34) 174 0 R (section*.340) 1790 0 R (section*.341) 1794 0 R (section*.342) 1798 0 R (section*.343) 1802 0 R (section*.344) 1806 0 R]
+/Limits [(section*.34) (section*.344)]
+>> endobj
+17485 0 obj <<
+/Names [(section*.345) 1810 0 R (section*.346) 1814 0 R (section*.347) 9809 0 R (section*.348) 9810 0 R (section*.349) 1830 0 R (section*.35) 178 0 R]
+/Limits [(section*.345) (section*.35)]
+>> endobj
+17486 0 obj <<
+/Names [(section*.350) 1834 0 R (section*.351) 1838 0 R (section*.352) 9814 0 R (section*.353) 1854 0 R (section*.354) 9827 0 R (section*.355) 1870 0 R]
+/Limits [(section*.350) (section*.355)]
+>> endobj
+17487 0 obj <<
+/Names [(section*.356) 9829 0 R (section*.357) 1886 0 R (section*.358) 9831 0 R (section*.359) 1902 0 R (section*.36) 186 0 R (section*.360) 9845 0 R]
+/Limits [(section*.356) (section*.360)]
+>> endobj
+17488 0 obj <<
+/Names [(section*.361) 1918 0 R (section*.362) 9847 0 R (section*.363) 1934 0 R (section*.364) 1938 0 R (section*.365) 1942 0 R (section*.366) 1946 0 R]
+/Limits [(section*.361) (section*.366)]
+>> endobj
+17489 0 obj <<
+/Names [(section*.367) 9904 0 R (section*.368) 9905 0 R (section*.369) 9906 0 R (section*.37) 190 0 R (section*.370) 9907 0 R (section*.371) 9908 0 R]
+/Limits [(section*.367) (section*.371)]
+>> endobj
+17490 0 obj <<
+/Names [(section*.372) 9985 0 R (section*.373) 1962 0 R (section*.374) 1966 0 R (section*.375) 1974 0 R (section*.376) 1978 0 R (section*.377) 1982 0 R]
+/Limits [(section*.372) (section*.377)]
+>> endobj
+17491 0 obj <<
+/Names [(section*.378) 1986 0 R (section*.379) 1994 0 R (section*.38) 8906 0 R (section*.380) 1998 0 R (section*.381) 2002 0 R (section*.382) 2006 0 R]
+/Limits [(section*.378) (section*.382)]
+>> endobj
+17492 0 obj <<
+/Names [(section*.383) 2010 0 R (section*.384) 2014 0 R (section*.385) 2018 0 R (section*.386) 2022 0 R (section*.387) 2026 0 R (section*.388) 2030 0 R]
+/Limits [(section*.383) (section*.388)]
+>> endobj
+17493 0 obj <<
+/Names [(section*.389) 2034 0 R (section*.39) 210 0 R (section*.390) 2038 0 R (section*.391) 2042 0 R (section*.392) 2046 0 R (section*.393) 2050 0 R]
+/Limits [(section*.389) (section*.393)]
+>> endobj
+17494 0 obj <<
+/Names [(section*.394) 2054 0 R (section*.395) 2058 0 R (section*.396) 2062 0 R (section*.397) 2066 0 R (section*.398) 2070 0 R (section*.399) 2074 0 R]
+/Limits [(section*.394) (section*.399)]
+>> endobj
+17495 0 obj <<
+/Names [(section*.4) 50 0 R (section*.40) 214 0 R (section*.400) 2078 0 R (section*.401) 2082 0 R (section*.402) 2086 0 R (section*.403) 2090 0 R]
+/Limits [(section*.4) (section*.403)]
+>> endobj
+17496 0 obj <<
+/Names [(section*.404) 2094 0 R (section*.405) 2098 0 R (section*.406) 2102 0 R (section*.407) 2106 0 R (section*.408) 2110 0 R (section*.409) 2118 0 R]
+/Limits [(section*.404) (section*.409)]
+>> endobj
+17497 0 obj <<
+/Names [(section*.41) 218 0 R (section*.410) 2122 0 R (section*.411) 2126 0 R (section*.412) 2130 0 R (section*.413) 2134 0 R (section*.414) 2138 0 R]
+/Limits [(section*.41) (section*.414)]
+>> endobj
+17498 0 obj <<
+/Names [(section*.415) 2142 0 R (section*.416) 2146 0 R (section*.417) 2150 0 R (section*.418) 2154 0 R (section*.419) 2158 0 R (section*.42) 222 0 R]
+/Limits [(section*.415) (section*.42)]
+>> endobj
+17499 0 obj <<
+/Names [(section*.420) 2162 0 R (section*.421) 2166 0 R (section*.422) 2170 0 R (section*.423) 2174 0 R (section*.424) 2178 0 R (section*.425) 2182 0 R]
+/Limits [(section*.420) (section*.425)]
+>> endobj
+17500 0 obj <<
+/Names [(section*.426) 2186 0 R (section*.427) 2190 0 R (section*.428) 2194 0 R (section*.429) 2198 0 R (section*.43) 8937 0 R (section*.430) 2202 0 R]
+/Limits [(section*.426) (section*.430)]
+>> endobj
+17501 0 obj <<
+/Names [(section*.431) 2206 0 R (section*.432) 2210 0 R (section*.433) 2214 0 R (section*.434) 2218 0 R (section*.435) 10053 0 R (section*.436) 2234 0 R]
+/Limits [(section*.431) (section*.436)]
+>> endobj
+17502 0 obj <<
+/Names [(section*.437) 10065 0 R (section*.438) 2250 0 R (section*.439) 10067 0 R (section*.44) 238 0 R (section*.440) 2266 0 R (section*.441) 10069 0 R]
+/Limits [(section*.437) (section*.441)]
+>> endobj
+17503 0 obj <<
+/Names [(section*.442) 2282 0 R (section*.443) 10081 0 R (section*.444) 2298 0 R (section*.445) 10083 0 R (section*.446) 2314 0 R (section*.447) 10085 0 R]
+/Limits [(section*.442) (section*.447)]
+>> endobj
+17504 0 obj <<
+/Names [(section*.448) 2330 0 R (section*.449) 10097 0 R (section*.45) 242 0 R (section*.450) 2346 0 R (section*.451) 10099 0 R (section*.452) 2362 0 R]
+/Limits [(section*.448) (section*.452)]
+>> endobj
+17505 0 obj <<
+/Names [(section*.453) 10101 0 R (section*.454) 2378 0 R (section*.455) 10113 0 R (section*.456) 2394 0 R (section*.457) 10115 0 R (section*.458) 2410 0 R]
+/Limits [(section*.453) (section*.458)]
+>> endobj
+17506 0 obj <<
+/Names [(section*.459) 10128 0 R (section*.46) 246 0 R (section*.460) 2426 0 R (section*.461) 10130 0 R (section*.462) 2442 0 R (section*.463) 10132 0 R]
+/Limits [(section*.459) (section*.463)]
+>> endobj
+17507 0 obj <<
+/Names [(section*.464) 2458 0 R (section*.465) 10144 0 R (section*.466) 2474 0 R (section*.467) 10146 0 R (section*.468) 2490 0 R (section*.469) 10148 0 R]
+/Limits [(section*.464) (section*.469)]
+>> endobj
+17508 0 obj <<
+/Names [(section*.47) 8941 0 R (section*.470) 2506 0 R (section*.471) 10159 0 R (section*.472) 2522 0 R (section*.473) 10161 0 R (section*.474) 2538 0 R]
+/Limits [(section*.47) (section*.474)]
+>> endobj
+17509 0 obj <<
+/Names [(section*.475) 10163 0 R (section*.476) 2554 0 R (section*.477) 10179 0 R (section*.478) 2570 0 R (section*.479) 10181 0 R (section*.48) 262 0 R]
+/Limits [(section*.475) (section*.48)]
+>> endobj
+17510 0 obj <<
+/Names [(section*.480) 10182 0 R (section*.481) 2586 0 R (section*.482) 2594 0 R (section*.483) 2598 0 R (section*.484) 2602 0 R (section*.485) 2606 0 R]
+/Limits [(section*.480) (section*.485)]
+>> endobj
+17511 0 obj <<
+/Names [(section*.486) 10213 0 R (section*.487) 10214 0 R (section*.488) 10215 0 R (section*.489) 2622 0 R (section*.49) 266 0 R (section*.490) 2626 0 R]
+/Limits [(section*.486) (section*.490)]
+>> endobj
+17512 0 obj <<
+/Names [(section*.491) 2634 0 R (section*.492) 2638 0 R (section*.493) 2642 0 R (section*.494) 2646 0 R (section*.495) 2654 0 R (section*.496) 2658 0 R]
+/Limits [(section*.491) (section*.496)]
+>> endobj
+17513 0 obj <<
+/Names [(section*.497) 2662 0 R (section*.498) 2666 0 R (section*.499) 2670 0 R (section*.5) 54 0 R (section*.50) 270 0 R (section*.500) 2674 0 R]
+/Limits [(section*.497) (section*.500)]
+>> endobj
+17514 0 obj <<
+/Names [(section*.501) 2678 0 R (section*.502) 2682 0 R (section*.503) 2686 0 R (section*.504) 10253 0 R (section*.505) 10254 0 R (section*.506) 10255 0 R]
+/Limits [(section*.501) (section*.506)]
+>> endobj
+17515 0 obj <<
+/Names [(section*.507) 2702 0 R (section*.508) 2710 0 R (section*.509) 2718 0 R (section*.51) 274 0 R (section*.510) 2722 0 R (section*.511) 2726 0 R]
+/Limits [(section*.507) (section*.511)]
+>> endobj
+17516 0 obj <<
+/Names [(section*.512) 2730 0 R (section*.513) 2734 0 R (section*.514) 2738 0 R (section*.515) 2742 0 R (section*.516) 2746 0 R (section*.517) 2750 0 R]
+/Limits [(section*.512) (section*.517)]
+>> endobj
+17517 0 obj <<
+/Names [(section*.518) 10286 0 R (section*.519) 10287 0 R (section*.52) 278 0 R (section*.520) 2766 0 R (section*.521) 2774 0 R (section*.522) 2778 0 R]
+/Limits [(section*.518) (section*.522)]
+>> endobj
+17518 0 obj <<
+/Names [(section*.523) 10291 0 R (section*.524) 10292 0 R (section*.525) 10305 0 R (section*.526) 10306 0 R (section*.527) 10307 0 R (section*.528) 2794 0 R]
+/Limits [(section*.523) (section*.528)]
+>> endobj
+17519 0 obj <<
+/Names [(section*.529) 2802 0 R (section*.53) 282 0 R (section*.530) 2810 0 R (section*.531) 2814 0 R (section*.532) 2822 0 R (section*.533) 2826 0 R]
+/Limits [(section*.529) (section*.533)]
+>> endobj
+17520 0 obj <<
+/Names [(section*.534) 10329 0 R (section*.535) 10330 0 R (section*.536) 2842 0 R (section*.537) 2850 0 R (section*.538) 2854 0 R (section*.539) 2858 0 R]
+/Limits [(section*.534) (section*.539)]
+>> endobj
+17521 0 obj <<
+/Names [(section*.54) 286 0 R (section*.540) 2862 0 R (section*.541) 2866 0 R (section*.542) 10346 0 R (section*.543) 10347 0 R (section*.544) 2882 0 R]
+/Limits [(section*.54) (section*.544)]
+>> endobj
+17522 0 obj <<
+/Names [(section*.545) 2886 0 R (section*.546) 2894 0 R (section*.547) 2898 0 R (section*.548) 2902 0 R (section*.549) 2910 0 R (section*.55) 8966 0 R]
+/Limits [(section*.545) (section*.55)]
+>> endobj
+17523 0 obj <<
+/Names [(section*.550) 2914 0 R (section*.551) 2918 0 R (section*.552) 10382 0 R (section*.553) 2934 0 R (section*.554) 2938 0 R (section*.555) 2942 0 R]
+/Limits [(section*.550) (section*.555)]
+>> endobj
+17524 0 obj <<
+/Names [(section*.556) 2946 0 R (section*.557) 2950 0 R (section*.558) 2954 0 R (section*.559) 2958 0 R (section*.56) 8967 0 R (section*.560) 2962 0 R]
+/Limits [(section*.556) (section*.560)]
+>> endobj
+17525 0 obj <<
+/Names [(section*.561) 2966 0 R (section*.562) 2970 0 R (section*.563) 2974 0 R (section*.564) 2978 0 R (section*.565) 2982 0 R (section*.566) 2986 0 R]
+/Limits [(section*.561) (section*.566)]
+>> endobj
+17526 0 obj <<
+/Names [(section*.567) 2990 0 R (section*.568) 2994 0 R (section*.569) 2998 0 R (section*.57) 8968 0 R (section*.570) 3002 0 R (section*.571) 3006 0 R]
+/Limits [(section*.567) (section*.571)]
+>> endobj
+17527 0 obj <<
+/Names [(section*.572) 3010 0 R (section*.573) 3014 0 R (section*.574) 3018 0 R (section*.575) 3022 0 R (section*.576) 3026 0 R (section*.577) 3030 0 R]
+/Limits [(section*.572) (section*.577)]
+>> endobj
+17528 0 obj <<
+/Names [(section*.578) 3034 0 R (section*.579) 3038 0 R (section*.58) 302 0 R (section*.580) 3042 0 R (section*.581) 3046 0 R (section*.582) 3050 0 R]
+/Limits [(section*.578) (section*.582)]
+>> endobj
+17529 0 obj <<
+/Names [(section*.583) 3054 0 R (section*.584) 10468 0 R (section*.585) 3070 0 R (section*.586) 3074 0 R (section*.587) 10471 0 R (section*.588) 3090 0 R]
+/Limits [(section*.583) (section*.588)]
+>> endobj
+17530 0 obj <<
+/Names [(section*.589) 3094 0 R (section*.59) 310 0 R (section*.590) 3098 0 R (section*.591) 3102 0 R (section*.592) 3106 0 R (section*.593) 3110 0 R]
+/Limits [(section*.589) (section*.593)]
+>> endobj
+17531 0 obj <<
+/Names [(section*.594) 3114 0 R (section*.595) 3118 0 R (section*.596) 3122 0 R (section*.597) 3126 0 R (section*.598) 3130 0 R (section*.599) 10533 0 R]
+/Limits [(section*.594) (section*.599)]
+>> endobj
+17532 0 obj <<
+/Names [(section*.6) 62 0 R (section*.60) 314 0 R (section*.600) 3146 0 R (section*.601) 3150 0 R (section*.602) 3154 0 R (section*.603) 3158 0 R]
+/Limits [(section*.6) (section*.603)]
+>> endobj
+17533 0 obj <<
+/Names [(section*.604) 3162 0 R (section*.605) 3166 0 R (section*.606) 3170 0 R (section*.607) 3174 0 R (section*.608) 3178 0 R (section*.609) 10560 0 R]
+/Limits [(section*.604) (section*.609)]
+>> endobj
+17534 0 obj <<
+/Names [(section*.61) 318 0 R (section*.610) 10561 0 R (section*.611) 10562 0 R (section*.612) 10563 0 R (section*.613) 3194 0 R (section*.614) 3202 0 R]
+/Limits [(section*.61) (section*.614)]
+>> endobj
+17535 0 obj <<
+/Names [(section*.615) 3206 0 R (section*.616) 3210 0 R (section*.617) 3214 0 R (section*.618) 3218 0 R (section*.619) 3222 0 R (section*.62) 322 0 R]
+/Limits [(section*.615) (section*.62)]
+>> endobj
+17536 0 obj <<
+/Names [(section*.620) 10585 0 R (section*.621) 10586 0 R (section*.622) 3238 0 R (section*.623) 10600 0 R (section*.624) 10601 0 R (section*.625) 3254 0 R]
+/Limits [(section*.620) (section*.625)]
+>> endobj
+17537 0 obj <<
+/Names [(section*.626) 3258 0 R (section*.627) 3266 0 R (section*.628) 3270 0 R (section*.629) 3274 0 R (section*.63) 330 0 R (section*.630) 10636 0 R]
+/Limits [(section*.626) (section*.630)]
+>> endobj
+17538 0 obj <<
+/Names [(section*.631) 10637 0 R (section*.632) 10638 0 R (section*.633) 3290 0 R (section*.634) 3298 0 R (section*.635) 3302 0 R (section*.636) 3306 0 R]
+/Limits [(section*.631) (section*.636)]
+>> endobj
+17539 0 obj <<
+/Names [(section*.637) 3310 0 R (section*.638) 3314 0 R (section*.639) 3318 0 R (section*.64) 334 0 R (section*.640) 3322 0 R (section*.641) 3326 0 R]
+/Limits [(section*.637) (section*.641)]
+>> endobj
+17540 0 obj <<
+/Names [(section*.642) 3330 0 R (section*.643) 3338 0 R (section*.644) 3342 0 R (section*.645) 10680 0 R (section*.646) 10681 0 R (section*.647) 10682 0 R]
+/Limits [(section*.642) (section*.647)]
+>> endobj
+17541 0 obj <<
+/Names [(section*.648) 3354 0 R (section*.649) 3358 0 R (section*.65) 8983 0 R (section*.650) 3366 0 R (section*.651) 3370 0 R (section*.652) 3374 0 R]
+/Limits [(section*.648) (section*.652)]
+>> endobj
+17542 0 obj <<
+/Names [(section*.653) 3378 0 R (section*.654) 3382 0 R (section*.655) 3386 0 R (section*.656) 10720 0 R (section*.657) 10721 0 R (section*.658) 10722 0 R]
+/Limits [(section*.653) (section*.658)]
+>> endobj
+17543 0 obj <<
+/Names [(section*.659) 10723 0 R (section*.66) 350 0 R (section*.660) 3398 0 R (section*.661) 3402 0 R (section*.662) 10739 0 R (section*.663) 10740 0 R]
+/Limits [(section*.659) (section*.663)]
+>> endobj
+17544 0 obj <<
+/Names [(section*.664) 10741 0 R (section*.665) 3414 0 R (section*.666) 10754 0 R (section*.667) 3426 0 R (section*.668) 3430 0 R (section*.669) 3434 0 R]
+/Limits [(section*.664) (section*.669)]
+>> endobj
+17545 0 obj <<
+/Names [(section*.67) 354 0 R (section*.670) 3438 0 R (section*.671) 10780 0 R (section*.672) 3450 0 R (section*.673) 3454 0 R (section*.674) 3458 0 R]
+/Limits [(section*.67) (section*.674)]
+>> endobj
+17546 0 obj <<
+/Names [(section*.675) 3462 0 R (section*.676) 3466 0 R (section*.677) 10824 0 R (section*.678) 10828 0 R (section*.679) 3478 0 R (section*.68) 9000 0 R]
+/Limits [(section*.675) (section*.68)]
+>> endobj
+17547 0 obj <<
+/Names [(section*.680) 3482 0 R (section*.681) 3486 0 R (section*.682) 3490 0 R (section*.683) 3494 0 R (section*.684) 3498 0 R (section*.685) 3502 0 R]
+/Limits [(section*.680) (section*.685)]
+>> endobj
+17548 0 obj <<
+/Names [(section*.686) 3510 0 R (section*.687) 10875 0 R (section*.688) 10876 0 R (section*.689) 3526 0 R (section*.69) 9001 0 R (section*.690) 3530 0 R]
+/Limits [(section*.686) (section*.690)]
+>> endobj
+17549 0 obj <<
+/Names [(section*.691) 3534 0 R (section*.692) 3538 0 R (section*.693) 3542 0 R (section*.694) 3546 0 R (section*.695) 3554 0 R (section*.696) 3558 0 R]
+/Limits [(section*.691) (section*.696)]
+>> endobj
+17550 0 obj <<
+/Names [(section*.697) 3562 0 R (section*.698) 3566 0 R (section*.699) 3570 0 R (section*.7) 66 0 R (section*.70) 370 0 R (section*.700) 3574 0 R]
+/Limits [(section*.697) (section*.700)]
+>> endobj
+17551 0 obj <<
+/Names [(section*.701) 10936 0 R (section*.702) 3586 0 R (section*.703) 3590 0 R (section*.704) 3594 0 R (section*.705) 10940 0 R (section*.706) 10954 0 R]
+/Limits [(section*.701) (section*.706)]
+>> endobj
+17552 0 obj <<
+/Names [(section*.707) 3610 0 R (section*.708) 3614 0 R (section*.709) 3618 0 R (section*.71) 374 0 R (section*.710) 3626 0 R (section*.711) 3630 0 R]
+/Limits [(section*.707) (section*.711)]
+>> endobj
+17553 0 obj <<
+/Names [(section*.712) 3634 0 R (section*.713) 10977 0 R (section*.714) 3646 0 R (section*.715) 3650 0 R (section*.716) 3654 0 R (section*.717) 3658 0 R]
+/Limits [(section*.712) (section*.717)]
+>> endobj
+17554 0 obj <<
+/Names [(section*.718) 3662 0 R (section*.719) 10983 0 R (section*.72) 378 0 R (section*.720) 11010 0 R (section*.721) 11011 0 R (section*.722) 11012 0 R]
+/Limits [(section*.718) (section*.722)]
+>> endobj
+17555 0 obj <<
+/Names [(section*.723) 3674 0 R (section*.724) 3678 0 R (section*.725) 3682 0 R (section*.726) 3686 0 R (section*.727) 3690 0 R (section*.728) 3698 0 R]
+/Limits [(section*.723) (section*.728)]
+>> endobj
+17556 0 obj <<
+/Names [(section*.729) 3702 0 R (section*.73) 386 0 R (section*.730) 3706 0 R (section*.731) 3710 0 R (section*.732) 3718 0 R (section*.733) 3722 0 R]
+/Limits [(section*.729) (section*.733)]
+>> endobj
+17557 0 obj <<
+/Names [(section*.734) 3726 0 R (section*.735) 3730 0 R (section*.736) 3734 0 R (section*.737) 11036 0 R (section*.738) 11037 0 R (section*.739) 3746 0 R]
+/Limits [(section*.734) (section*.739)]
+>> endobj
+17558 0 obj <<
+/Names [(section*.74) 390 0 R (section*.740) 3754 0 R (section*.741) 3758 0 R (section*.742) 3762 0 R (section*.743) 3766 0 R (section*.744) 11177 0 R]
+/Limits [(section*.74) (section*.744)]
+>> endobj
+17559 0 obj <<
+/Names [(section*.745) 11178 0 R (section*.746) 11354 0 R (section*.747) 3778 0 R (section*.748) 3782 0 R (section*.749) 3786 0 R (section*.75) 398 0 R]
+/Limits [(section*.745) (section*.75)]
+>> endobj
+17560 0 obj <<
+/Names [(section*.750) 3790 0 R (section*.751) 3798 0 R (section*.752) 3802 0 R (section*.753) 3806 0 R (section*.754) 3814 0 R (section*.755) 3818 0 R]
+/Limits [(section*.750) (section*.755)]
+>> endobj
+17561 0 obj <<
+/Names [(section*.756) 3822 0 R (section*.757) 3826 0 R (section*.758) 3830 0 R (section*.759) 3834 0 R (section*.76) 402 0 R (section*.760) 3838 0 R]
+/Limits [(section*.756) (section*.760)]
+>> endobj
+17562 0 obj <<
+/Names [(section*.761) 11424 0 R (section*.762) 11425 0 R (section*.763) 3850 0 R (section*.764) 3858 0 R (section*.765) 3862 0 R (section*.766) 11587 0 R]
+/Limits [(section*.761) (section*.766)]
+>> endobj
+17563 0 obj <<
+/Names [(section*.767) 11588 0 R (section*.768) 11750 0 R (section*.769) 3874 0 R (section*.77) 9026 0 R (section*.770) 3882 0 R (section*.771) 3890 0 R]
+/Limits [(section*.767) (section*.771)]
+>> endobj
+17564 0 obj <<
+/Names [(section*.772) 11832 0 R (section*.773) 11915 0 R (section*.774) 11916 0 R (section*.775) 11917 0 R (section*.776) 11918 0 R (section*.777) 11920 0 R]
+/Limits [(section*.772) (section*.777)]
+>> endobj
+17565 0 obj <<
+/Names [(section*.778) 3906 0 R (section*.779) 3910 0 R (section*.78) 418 0 R (section*.780) 3914 0 R (section*.781) 3918 0 R (section*.782) 3922 0 R]
+/Limits [(section*.778) (section*.782)]
+>> endobj
+17566 0 obj <<
+/Names [(section*.783) 3930 0 R (section*.784) 3938 0 R (section*.785) 3942 0 R (section*.786) 3950 0 R (section*.787) 3954 0 R (section*.788) 3958 0 R]
+/Limits [(section*.783) (section*.788)]
+>> endobj
+17567 0 obj <<
+/Names [(section*.789) 3962 0 R (section*.79) 422 0 R (section*.790) 3966 0 R (section*.791) 3970 0 R (section*.792) 3974 0 R (section*.793) 3978 0 R]
+/Limits [(section*.789) (section*.793)]
+>> endobj
+17568 0 obj <<
+/Names [(section*.794) 3982 0 R (section*.795) 3986 0 R (section*.796) 3990 0 R (section*.797) 3994 0 R (section*.798) 3998 0 R (section*.799) 4002 0 R]
+/Limits [(section*.794) (section*.799)]
+>> endobj
+17569 0 obj <<
+/Names [(section*.8) 70 0 R (section*.80) 9029 0 R (section*.800) 4006 0 R (section*.801) 4010 0 R (section*.802) 4014 0 R (section*.803) 4018 0 R]
+/Limits [(section*.8) (section*.803)]
+>> endobj
+17570 0 obj <<
+/Names [(section*.804) 4022 0 R (section*.805) 4026 0 R (section*.806) 4030 0 R (section*.807) 4034 0 R (section*.808) 4038 0 R (section*.809) 4042 0 R]
+/Limits [(section*.804) (section*.809)]
+>> endobj
+17571 0 obj <<
+/Names [(section*.81) 438 0 R (section*.810) 4046 0 R (section*.811) 4050 0 R (section*.812) 4054 0 R (section*.813) 4058 0 R (section*.814) 4062 0 R]
+/Limits [(section*.81) (section*.814)]
+>> endobj
+17572 0 obj <<
+/Names [(section*.815) 4066 0 R (section*.816) 4070 0 R (section*.817) 4074 0 R (section*.818) 4078 0 R (section*.819) 4082 0 R (section*.82) 442 0 R]
+/Limits [(section*.815) (section*.82)]
+>> endobj
+17573 0 obj <<
+/Names [(section*.820) 4086 0 R (section*.821) 4090 0 R (section*.822) 4094 0 R (section*.823) 4098 0 R (section*.824) 4102 0 R (section*.825) 4106 0 R]
+/Limits [(section*.820) (section*.825)]
+>> endobj
+17574 0 obj <<
+/Names [(section*.826) 4110 0 R (section*.827) 4114 0 R (section*.828) 4118 0 R (section*.829) 4122 0 R (section*.83) 446 0 R (section*.830) 4126 0 R]
+/Limits [(section*.826) (section*.830)]
+>> endobj
+17575 0 obj <<
+/Names [(section*.831) 4130 0 R (section*.832) 4134 0 R (section*.833) 4138 0 R (section*.834) 4142 0 R (section*.835) 4146 0 R (section*.836) 4150 0 R]
+/Limits [(section*.831) (section*.836)]
+>> endobj
+17576 0 obj <<
+/Names [(section*.837) 12083 0 R (section*.838) 4162 0 R (section*.839) 12085 0 R (section*.84) 450 0 R (section*.840) 12145 0 R (section*.841) 12146 0 R]
+/Limits [(section*.837) (section*.841)]
+>> endobj
+17577 0 obj <<
+/Names [(section*.842) 12147 0 R (section*.843) 12148 0 R (section*.844) 12149 0 R (section*.845) 4178 0 R (section*.846) 4182 0 R (section*.847) 4186 0 R]
+/Limits [(section*.842) (section*.847)]
+>> endobj
+17578 0 obj <<
+/Names [(section*.848) 4190 0 R (section*.849) 4194 0 R (section*.85) 454 0 R (section*.850) 4198 0 R (section*.851) 4202 0 R (section*.852) 4206 0 R]
+/Limits [(section*.848) (section*.852)]
+>> endobj
+17579 0 obj <<
+/Names [(section*.853) 4210 0 R (section*.854) 4214 0 R (section*.855) 4218 0 R (section*.856) 4222 0 R (section*.857) 4230 0 R (section*.858) 4238 0 R]
+/Limits [(section*.853) (section*.858)]
+>> endobj
+17580 0 obj <<
+/Names [(section*.859) 4242 0 R (section*.86) 458 0 R (section*.860) 4250 0 R (section*.861) 4258 0 R (section*.862) 4262 0 R (section*.863) 4266 0 R]
+/Limits [(section*.859) (section*.863)]
+>> endobj
+17581 0 obj <<
+/Names [(section*.864) 4270 0 R (section*.865) 4274 0 R (section*.866) 4278 0 R (section*.867) 4282 0 R (section*.868) 4286 0 R (section*.869) 4290 0 R]
+/Limits [(section*.864) (section*.869)]
+>> endobj
+17582 0 obj <<
+/Names [(section*.87) 462 0 R (section*.870) 4294 0 R (section*.871) 4298 0 R (section*.872) 4302 0 R (section*.873) 4306 0 R (section*.874) 4310 0 R]
+/Limits [(section*.87) (section*.874)]
+>> endobj
+17583 0 obj <<
+/Names [(section*.875) 4314 0 R (section*.876) 4318 0 R (section*.877) 4322 0 R (section*.878) 4326 0 R (section*.879) 4330 0 R (section*.88) 9047 0 R]
+/Limits [(section*.875) (section*.88)]
+>> endobj
+17584 0 obj <<
+/Names [(section*.880) 4334 0 R (section*.881) 12257 0 R (section*.882) 12258 0 R (section*.883) 4346 0 R (section*.884) 4350 0 R (section*.885) 12261 0 R]
+/Limits [(section*.880) (section*.885)]
+>> endobj
+17585 0 obj <<
+/Names [(section*.886) 12278 0 R (section*.887) 12279 0 R (section*.888) 4362 0 R (section*.889) 4370 0 R (section*.89) 478 0 R (section*.890) 4374 0 R]
+/Limits [(section*.886) (section*.890)]
+>> endobj
+17586 0 obj <<
+/Names [(section*.891) 4378 0 R (section*.892) 4382 0 R (section*.893) 12307 0 R (section*.894) 12308 0 R (section*.895) 4398 0 R (section*.896) 12313 0 R]
+/Limits [(section*.891) (section*.896)]
+>> endobj
+17587 0 obj <<
+/Names [(section*.897) 12314 0 R (section*.898) 12386 0 R (section*.899) 4410 0 R (section*.9) 74 0 R (section*.90) 482 0 R (section*.900) 4414 0 R]
+/Limits [(section*.897) (section*.900)]
+>> endobj
+17588 0 obj <<
+/Names [(section*.901) 4422 0 R (section*.902) 4426 0 R (section*.903) 4430 0 R (section*.904) 4434 0 R (section*.905) 4438 0 R (section*.906) 4442 0 R]
+/Limits [(section*.901) (section*.906)]
+>> endobj
+17589 0 obj <<
+/Names [(section*.907) 4446 0 R (section*.908) 4450 0 R (section*.909) 4454 0 R (section*.91) 486 0 R (section*.910) 4458 0 R (section*.911) 4462 0 R]
+/Limits [(section*.907) (section*.911)]
+>> endobj
+17590 0 obj <<
+/Names [(section*.912) 4466 0 R (section*.913) 4470 0 R (section*.914) 4474 0 R (section*.915) 4478 0 R (section*.916) 4482 0 R (section*.917) 4490 0 R]
+/Limits [(section*.912) (section*.917)]
+>> endobj
+17591 0 obj <<
+/Names [(section*.918) 4494 0 R (section*.919) 4498 0 R (section*.92) 490 0 R (section*.920) 4502 0 R (section*.921) 4506 0 R (section*.922) 4510 0 R]
+/Limits [(section*.918) (section*.922)]
+>> endobj
+17592 0 obj <<
+/Names [(section*.923) 4514 0 R (section*.924) 4518 0 R (section*.925) 4522 0 R (section*.926) 4526 0 R (section*.927) 4530 0 R (section*.928) 4534 0 R]
+/Limits [(section*.923) (section*.928)]
+>> endobj
+17593 0 obj <<
+/Names [(section*.929) 4538 0 R (section*.93) 494 0 R (section*.930) 4542 0 R (section*.931) 4546 0 R (section*.932) 4550 0 R (section*.933) 4554 0 R]
+/Limits [(section*.929) (section*.933)]
+>> endobj
+17594 0 obj <<
+/Names [(section*.934) 4558 0 R (section*.935) 4562 0 R (section*.936) 4566 0 R (section*.937) 4570 0 R (section*.938) 4574 0 R (section*.939) 4578 0 R]
+/Limits [(section*.934) (section*.939)]
+>> endobj
+17595 0 obj <<
+/Names [(section*.94) 9064 0 R (section*.940) 4582 0 R (section*.941) 4586 0 R (section*.942) 4590 0 R (section*.943) 4594 0 R (section*.944) 4598 0 R]
+/Limits [(section*.94) (section*.944)]
+>> endobj
+17596 0 obj <<
+/Names [(section*.945) 4602 0 R (section*.946) 4606 0 R (section*.947) 4610 0 R (section*.948) 4614 0 R (section*.949) 4618 0 R (section*.95) 510 0 R]
+/Limits [(section*.945) (section*.95)]
+>> endobj
+17597 0 obj <<
+/Names [(section*.950) 4622 0 R (section*.951) 4626 0 R (section*.952) 4630 0 R (section*.953) 4634 0 R (section*.954) 4638 0 R (section*.955) 4642 0 R]
+/Limits [(section*.950) (section*.955)]
+>> endobj
+17598 0 obj <<
+/Names [(section*.956) 4646 0 R (section*.957) 4650 0 R (section*.958) 12471 0 R (section*.959) 12511 0 R (section*.96) 514 0 R (section*.960) 12512 0 R]
+/Limits [(section*.956) (section*.960)]
+>> endobj
+17599 0 obj <<
+/Names [(section*.961) 12513 0 R (section*.962) 12514 0 R (section*.963) 4666 0 R (section*.964) 4674 0 R (section*.965) 4682 0 R (section*.966) 4686 0 R]
+/Limits [(section*.961) (section*.966)]
+>> endobj
+17600 0 obj <<
+/Names [(section*.967) 4690 0 R (section*.968) 4694 0 R (section*.969) 4698 0 R (section*.97) 518 0 R (section*.970) 4706 0 R (section*.971) 4710 0 R]
+/Limits [(section*.967) (section*.971)]
+>> endobj
+17601 0 obj <<
+/Names [(section*.972) 4714 0 R (section*.973) 4718 0 R (section*.974) 4722 0 R (section*.975) 4726 0 R (section*.976) 4730 0 R (section*.977) 4734 0 R]
+/Limits [(section*.972) (section*.977)]
+>> endobj
+17602 0 obj <<
+/Names [(section*.978) 4738 0 R (section*.979) 4742 0 R (section*.98) 9118 0 R (section*.980) 4746 0 R (section*.981) 4750 0 R (section*.982) 4754 0 R]
+/Limits [(section*.978) (section*.982)]
+>> endobj
+17603 0 obj <<
+/Names [(section*.983) 4758 0 R (section*.984) 4762 0 R (section*.985) 4766 0 R (section*.986) 4770 0 R (section*.987) 4774 0 R (section*.988) 4778 0 R]
+/Limits [(section*.983) (section*.988)]
+>> endobj
+17604 0 obj <<
+/Names [(section*.989) 4782 0 R (section*.99) 9119 0 R (section*.990) 12584 0 R (section*.991) 12585 0 R (section*.992) 12586 0 R (section*.993) 12587 0 R]
+/Limits [(section*.989) (section*.993)]
+>> endobj
+17605 0 obj <<
+/Names [(section*.994) 12622 0 R (section*.995) 4794 0 R (section*.996) 4798 0 R (section*.997) 4806 0 R (section*.998) 4814 0 R (section*.999) 4818 0 R]
+/Limits [(section*.994) (section*.999)]
+>> endobj
+17606 0 obj <<
+/Names [(section.1.1) 10 0 R (section.2.1) 18 0 R (section.3.1) 26 0 R (section.4.1) 34 0 R (section.5.1) 42 0 R (section.5.2) 158 0 R]
+/Limits [(section.1.1) (section.5.2)]
+>> endobj
+17607 0 obj <<
+/Names [(section.6.1) 198 0 R (section.6.10) 498 0 R (section.6.11) 522 0 R (section.6.12) 738 0 R (section.6.13) 758 0 R (section.6.14) 778 0 R]
+/Limits [(section.6.1) (section.6.14)]
+>> endobj
+17608 0 obj <<
+/Names [(section.6.15) 802 0 R (section.6.16) 850 0 R (section.6.17) 870 0 R (section.6.18) 918 0 R (section.6.19) 938 0 R (section.6.2) 226 0 R]
+/Limits [(section.6.15) (section.6.2)]
+>> endobj
+17609 0 obj <<
+/Names [(section.6.20) 954 0 R (section.6.21) 1010 0 R (section.6.22) 1026 0 R (section.6.23) 1042 0 R (section.6.24) 1058 0 R (section.6.25) 1074 0 R]
+/Limits [(section.6.20) (section.6.25)]
+>> endobj
+17610 0 obj <<
+/Names [(section.6.26) 1090 0 R (section.6.27) 1106 0 R (section.6.28) 1122 0 R (section.6.29) 1138 0 R (section.6.3) 250 0 R (section.6.30) 1154 0 R]
+/Limits [(section.6.26) (section.6.30)]
+>> endobj
+17611 0 obj <<
+/Names [(section.6.31) 1170 0 R (section.6.32) 1186 0 R (section.6.33) 1202 0 R (section.6.34) 1218 0 R (section.6.35) 1234 0 R (section.6.36) 1250 0 R]
+/Limits [(section.6.31) (section.6.36)]
+>> endobj
+17612 0 obj <<
+/Names [(section.6.37) 1266 0 R (section.6.38) 1282 0 R (section.6.39) 1298 0 R (section.6.4) 290 0 R (section.6.40) 1314 0 R (section.6.41) 1330 0 R]
+/Limits [(section.6.37) (section.6.41)]
+>> endobj
+17613 0 obj <<
+/Names [(section.6.42) 1346 0 R (section.6.43) 1418 0 R (section.6.44) 1474 0 R (section.6.45) 1498 0 R (section.6.46) 1570 0 R (section.6.47) 1598 0 R]
+/Limits [(section.6.42) (section.6.47)]
+>> endobj
+17614 0 obj <<
+/Names [(section.6.48) 1638 0 R (section.6.49) 1666 0 R (section.6.5) 338 0 R (section.6.50) 1818 0 R (section.6.51) 1842 0 R (section.6.52) 1858 0 R]
+/Limits [(section.6.48) (section.6.52)]
+>> endobj
+17615 0 obj <<
+/Names [(section.6.53) 1874 0 R (section.6.54) 1890 0 R (section.6.55) 1906 0 R (section.6.56) 1922 0 R (section.6.57) 1950 0 R (section.6.58) 2222 0 R]
+/Limits [(section.6.53) (section.6.58)]
+>> endobj
+17616 0 obj <<
+/Names [(section.6.59) 2238 0 R (section.6.6) 358 0 R (section.6.60) 2254 0 R (section.6.61) 2270 0 R (section.6.62) 2286 0 R (section.6.63) 2302 0 R]
+/Limits [(section.6.59) (section.6.63)]
+>> endobj
+17617 0 obj <<
+/Names [(section.6.64) 2318 0 R (section.6.65) 2334 0 R (section.6.66) 2350 0 R (section.6.67) 2366 0 R (section.6.68) 2382 0 R (section.6.69) 2398 0 R]
+/Limits [(section.6.64) (section.6.69)]
+>> endobj
+17618 0 obj <<
+/Names [(section.6.7) 406 0 R (section.6.70) 2414 0 R (section.6.71) 2430 0 R (section.6.72) 2446 0 R (section.6.73) 2462 0 R (section.6.74) 2478 0 R]
+/Limits [(section.6.7) (section.6.74)]
+>> endobj
+17619 0 obj <<
+/Names [(section.6.75) 2494 0 R (section.6.76) 2510 0 R (section.6.77) 2526 0 R (section.6.78) 2542 0 R (section.6.79) 2558 0 R (section.6.8) 426 0 R]
+/Limits [(section.6.75) (section.6.8)]
+>> endobj
+17620 0 obj <<
+/Names [(section.6.80) 2574 0 R (section.6.81) 2610 0 R (section.6.82) 2690 0 R (section.6.83) 2754 0 R (section.6.84) 2782 0 R (section.6.85) 2830 0 R]
+/Limits [(section.6.80) (section.6.85)]
+>> endobj
+17621 0 obj <<
+/Names [(section.6.86) 2870 0 R (section.6.87) 2922 0 R (section.6.88) 3058 0 R (section.6.89) 3078 0 R (section.6.9) 466 0 R (section.6.90) 3134 0 R]
+/Limits [(section.6.86) (section.6.90)]
+>> endobj
+17622 0 obj <<
+/Names [(section.6.91) 3182 0 R (section.6.92) 3226 0 R (section.6.93) 3242 0 R (section.7.1) 3282 0 R (section.7.10) 3598 0 R (section.7.11) 3638 0 R]
+/Limits [(section.6.91) (section.7.11)]
+>> endobj
+17623 0 obj <<
+/Names [(section.7.12) 3666 0 R (section.7.13) 3738 0 R (section.7.14) 3770 0 R (section.7.15) 3842 0 R (section.7.16) 3866 0 R (section.7.17) 3894 0 R]
+/Limits [(section.7.12) (section.7.17)]
+>> endobj
+17624 0 obj <<
+/Names [(section.7.18) 3898 0 R (section.7.19) 4154 0 R (section.7.2) 3346 0 R (section.7.20) 4166 0 R (section.7.21) 4338 0 R (section.7.22) 4354 0 R]
+/Limits [(section.7.18) (section.7.22)]
+>> endobj
+17625 0 obj <<
+/Names [(section.7.23) 4386 0 R (section.7.24) 4390 0 R (section.7.25) 4402 0 R (section.7.26) 4654 0 R (section.7.27) 4786 0 R (section.7.28) 4922 0 R]
+/Limits [(section.7.23) (section.7.28)]
+>> endobj
+17626 0 obj <<
+/Names [(section.7.29) 4974 0 R (section.7.3) 3390 0 R (section.7.30) 5050 0 R (section.7.31) 5110 0 R (section.7.32) 5294 0 R (section.7.33) 5634 0 R]
+/Limits [(section.7.29) (section.7.33)]
+>> endobj
+17627 0 obj <<
+/Names [(section.7.34) 5638 0 R (section.7.35) 5642 0 R (section.7.36) 5834 0 R (section.7.37) 5898 0 R (section.7.38) 5978 0 R (section.7.39) 6006 0 R]
+/Limits [(section.7.34) (section.7.39)]
+>> endobj
+17628 0 obj <<
+/Names [(section.7.4) 3406 0 R (section.7.40) 6022 0 R (section.7.41) 6058 0 R (section.7.42) 6070 0 R (section.7.43) 6082 0 R (section.7.44) 6114 0 R]
+/Limits [(section.7.4) (section.7.44)]
+>> endobj
+17629 0 obj <<
+/Names [(section.7.45) 6134 0 R (section.7.46) 6158 0 R (section.7.47) 6230 0 R (section.7.48) 6294 0 R (section.7.49) 6322 0 R (section.7.5) 3418 0 R]
+/Limits [(section.7.45) (section.7.5)]
+>> endobj
+17630 0 obj <<
+/Names [(section.7.50) 6390 0 R (section.7.6) 3442 0 R (section.7.7) 3470 0 R (section.7.8) 3514 0 R (section.7.9) 3578 0 R (struct___offload__status) 8434 0 R]
+/Limits [(section.7.50) (struct___offload__status)]
+>> endobj
+17631 0 obj <<
+/Names [(struct___offload__status_a6895677ad0c9a59d9b7af23ec2ed1bf7) 8908 0 R (struct___offload__status_ac3644e2644a956df76cb7b8d7e7e8b37) 8909 0 R (struct___offload__status_ae2c948c47fabff039db2092e9013134e) 8907 0 R (struct___offload__status_af09e368dd35013edc44a2b9ff320a548) 8910 0 R (struct_arr_desc) 8436 0 R (struct_arr_desc_a913b379e719ecdb9f8330f5227660948) 8947 0 R]
+/Limits [(struct___offload__status_a6895677ad0c9a59d9b7af23ec2ed1bf7) (struct_arr_desc_a913b379e719ecdb9f8330f5227660948)]
+>> endobj
+17632 0 obj <<
+/Names [(struct_arr_desc_a9a4da4ad8a7baab9a32eed94538ad71b) 8946 0 R (struct_arr_desc_a9eb44ef1e86714106d97630d25055de0) 8950 0 R (struct_arr_desc_aa9b3839dad698546ebb8904a8cd19297) 8944 0 R (struct_arr_desc_aab6ee50b864c34019918aaa1d04674f6) 8948 0 R (struct_arr_desc_ab68e755de9b084d8f2d2230205135c8e) 8949 0 R (struct_arr_desc_ad84ababa734cd58b8faa38879ce2339c) 8945 0 R]
+/Limits [(struct_arr_desc_a9a4da4ad8a7baab9a32eed94538ad71b) (struct_arr_desc_ad84ababa734cd58b8faa38879ce2339c)]
+>> endobj
+17633 0 obj <<
+/Names [(struct_cean_read_dim) 8440 0 R (struct_cean_read_dim_a1f59c96740ff7ae8d38aeb97c9c69cb1) 9027 0 R (struct_cean_read_dim_a26e271447d66624e94819fd1ac9d6cf4) 9028 0 R (struct_cean_read_ranges) 8441 0 R (struct_cean_read_ranges_a10e8cb3daf495bd9540371c6b6bab44a) 9031 0 R (struct_cean_read_ranges_a157a1964fd177fa17f60eada69fbb89e) 9033 0 R]
+/Limits [(struct_cean_read_dim) (struct_cean_read_ranges_a157a1964fd177fa17f60eada69fbb89e)]
+>> endobj
+17634 0 obj <<
+/Names [(struct_cean_read_ranges_a9af47d6a26a5bd9e77154f82529a41b6) 9036 0 R (struct_cean_read_ranges_aa6a16cac62e0e8e593c5c944475e34b5) 9030 0 R (struct_cean_read_ranges_aa7ea491a99596b21ed9ab13ca7ad3784) 9034 0 R (struct_cean_read_ranges_ad0876b0c1b9a131b653eeb87512429a7) 9035 0 R (struct_cean_read_ranges_af5677615efe8c47cc6754c576c166c37) 9032 0 R (struct_dim_desc) 8443 0 R]
+/Limits [(struct_cean_read_ranges_a9af47d6a26a5bd9e77154f82529a41b6) (struct_dim_desc)]
+>> endobj
+17635 0 obj <<
+/Names [(struct_dim_desc_a70ad01ae9c4897e93778af3eb92f62de) 9068 0 R (struct_dim_desc_a93541452659cd3c1f71876a21b76b0fc) 9065 0 R (struct_dim_desc_aff651ea7b3935d9bcf659b578416fd3a) 9066 0 R (struct_engine) 8444 0 R (struct_engine_a08dfbe26dfe4747f970ad057caa9b7ef) 9135 0 R (struct_engine_a0bc13ca64c98252ee83360a57e00bde5) 9199 0 R]
+/Limits [(struct_dim_desc_a70ad01ae9c4897e93778af3eb92f62de) (struct_engine_a0bc13ca64c98252ee83360a57e00bde5)]
+>> endobj
+17636 0 obj <<
+/Names [(struct_engine_a0c72d1ae5eb2f3c069dab24ce1c7bb3f) 9152 0 R (struct_engine_a2206af43c102c76bcfb34d7523dc6b47) 9206 0 R (struct_engine_a33304d5b0fee21472a59e15b58dd4395) 9197 0 R (struct_engine_a33792b552f49a8ce8c093b07ed369e27) 9201 0 R (struct_engine_a349a4d1c148a100eae6e3e32cfcbcf0e) 9194 0 R (struct_engine_a37ab38ed6ec0a0decc68a1d2b3f2b6ef) 9191 0 R]
+/Limits [(struct_engine_a0c72d1ae5eb2f3c069dab24ce1c7bb3f) (struct_engine_a37ab38ed6ec0a0decc68a1d2b3f2b6ef)]
+>> endobj
+17637 0 obj <<
+/Names [(struct_engine_a3b9c91de1729c1178fa82972959b1ec0) 9130 0 R (struct_engine_a43552b4fd3217cfbc5c8e2c3e74a83d0) 9192 0 R (struct_engine_a559094f2d80831533098f237f9b9b0d0) 9202 0 R (struct_engine_a57eff555d85236136c27f8fd80a7eced) 9204 0 R (struct_engine_a58c2b65565fe561e747d24ad940692f0) 9209 0 R (struct_engine_a59848a3d969295673b6e0b6d6e2abe5c) 9150 0 R]
+/Limits [(struct_engine_a3b9c91de1729c1178fa82972959b1ec0) (struct_engine_a59848a3d969295673b6e0b6d6e2abe5c)]
+>> endobj
+17638 0 obj <<
+/Names [(struct_engine_a5d630ba4c426863bde598d3e8c805ca2) 9133 0 R (struct_engine_a690d9105f94f891020199203c3e73929) 9124 0 R (struct_engine_a773e2d3608cecd34cfb993badc8a211c) 9155 0 R (struct_engine_a77b068b710fec171489fb2131ad0d525) 9149 0 R (struct_engine_a7e80e8ba02e2688bdde5bade551afa86) 9138 0 R (struct_engine_a7f99dc525b76af07f3789b566fcfe7ac) 9125 0 R]
+/Limits [(struct_engine_a5d630ba4c426863bde598d3e8c805ca2) (struct_engine_a7f99dc525b76af07f3789b566fcfe7ac)]
+>> endobj
+17639 0 obj <<
+/Names [(struct_engine_a8102e52d790eb24611b6ff32e539fc9a) 9122 0 R (struct_engine_a825b0ae00502cc6d4a46b664e7e29994) 9196 0 R (struct_engine_a829fd6140316e10e23f17408c18478ca) 9132 0 R (struct_engine_a86ab45a7d32ba7b9408cb2fbbc23e8d4) 9200 0 R (struct_engine_a88680670278c00698fdc25e0f7216ea3) 9131 0 R (struct_engine_a899ad2f91d0ab46476f5e51541199f7d) 9190 0 R]
+/Limits [(struct_engine_a8102e52d790eb24611b6ff32e539fc9a) (struct_engine_a899ad2f91d0ab46476f5e51541199f7d)]
+>> endobj
+17640 0 obj <<
+/Names [(struct_engine_a899ad2f91d0ab46476f5e51541199f7da10d19bdfd824735f0e6a230fdf08fd10) 9143 0 R (struct_engine_a899ad2f91d0ab46476f5e51541199f7da245ea0f143222e0ca8842d68c0b14f69) 9141 0 R (struct_engine_a899ad2f91d0ab46476f5e51541199f7daadc4bd0ada9d0849b7611318295ddd64) 9142 0 R (struct_engine_a899ad2f91d0ab46476f5e51541199f7dabceb7aba3e0bb542949ba6e980649dad) 9140 0 R (struct_engine_a899ad2f91d0ab46476f5e51541199f7dae0596091d9e120557470b16925f9477b) 9139 0 R (struct_engine_a8c98683b0a3aa28d8ab72a8bcd0d52f2) 9146 0 R]
+/Limits [(struct_engine_a899ad2f91d0ab46476f5e51541199f7da10d19bdfd824735f0e6a230fdf08fd10) (struct_engine_a8c98683b0a3aa28d8ab72a8bcd0d52f2)]
+>> endobj
+17641 0 obj <<
+/Names [(struct_engine_a8ef7030a089ecb30bbfcb9e43094717a) 9147 0 R (struct_engine_a95a814dc4d12465a5ca5819c5e459e2a) 9134 0 R (struct_engine_a9665a01a6e117de98eaa285881211f5d) 9193 0 R (struct_engine_a9dd412c40da6285854873a6b91acb495) 9195 0 R (struct_engine_aa103ee2d5c30ab86d71a07451795d74b) 9203 0 R (struct_engine_aa5c254a9291a555a385533ac59c69d5e) 9128 0 R]
+/Limits [(struct_engine_a8ef7030a089ecb30bbfcb9e43094717a) (struct_engine_aa5c254a9291a555a385533ac59c69d5e)]
+>> endobj
+17642 0 obj <<
+/Names [(struct_engine_aa94d4aaa76f7303f49dc481ef1b088b4) 9127 0 R (struct_engine_ab8e362c743b0c943990aac438714da84) 9123 0 R (struct_engine_abbc2aa10a17c0bd17b46b2e75c64b632) 9144 0 R (struct_engine_ac298ee08293711bc376548a58cf47ac3) 9136 0 R (struct_engine_ac2e5509c4f164d1e33e31121447de874) 9153 0 R (struct_engine_ac6329a8b34eb717cdc8337a6507488ff) 9129 0 R]
+/Limits [(struct_engine_aa94d4aaa76f7303f49dc481ef1b088b4) (struct_engine_ac6329a8b34eb717cdc8337a6507488ff)]
+>> endobj
+17643 0 obj <<
+/Names [(struct_engine_ac78c8230f67026cc13957481b19149d9) 9205 0 R (struct_engine_acccfa4742eb16575b054b06d5b95c5ef) 9208 0 R (struct_engine_ad7197d326362dab19ca3aea3096250e8) 9207 0 R (struct_engine_ad8db0e02686eec1f8d08d7096a1c05f3) 9145 0 R (struct_engine_ae38b5a93cb728bf26874ce40f559541c) 9148 0 R (struct_engine_ae69de5e2dd2861404526095c574cafdc) 9126 0 R]
+/Limits [(struct_engine_ac78c8230f67026cc13957481b19149d9) (struct_engine_ae69de5e2dd2861404526095c574cafdc)]
+>> endobj
+17644 0 obj <<
+/Names [(struct_engine_ae7f38f0521bd7efc81903f26e9db6568) 9151 0 R (struct_fptr_table_entry) 8447 0 R (struct_fptr_table_entry_a0f374fbf7ac112260b6ad51bdfd83a05) 9256 0 R (struct_fptr_table_entry_a5a67b9151a2b6ede545e4ff520a217f6) 9254 0 R (struct_fptr_table_entry_aa5b1c0a3aad8fcbb669a40677ef4a8dc) 9255 0 R (struct_func_table) 8449 0 R]
+/Limits [(struct_engine_ae7f38f0521bd7efc81903f26e9db6568) (struct_func_table)]
+>> endobj
+17645 0 obj <<
+/Names [(struct_func_table_1_1_entry) 8445 0 R (struct_func_table_1_1_entry_a7d5aaf11144ae0b3e1b2b9c1f69ed9df) 9240 0 R (struct_func_table_1_1_entry_ac7a4b315a3230e51a7dadb8965a60dcd) 9241 0 R (struct_func_table_a922a107e3e5e3e612916915889d18ede) 9299 0 R (struct_func_table_ab82f274a4b84d5479334243eccf06aee) 9300 0 R (struct_function_descriptor) 8450 0 R]
+/Limits [(struct_func_table_1_1_entry) (struct_function_descriptor)]
+>> endobj
+17646 0 obj <<
+/Names [(struct_function_descriptor_a457239689cf6cf71c4efe13791d22785) 9319 0 R (struct_function_descriptor_a4581997ecb425789eefa6242eee1f094) 9320 0 R (struct_function_descriptor_a61cd17756540bc336c08382101d73336) 9322 0 R (struct_function_descriptor_a7bd6b266f41614e5ba115502ff7e9ef2) 9317 0 R (struct_function_descriptor_a7dec874f722693ab9280675f98f42f10) 9315 0 R (struct_function_descriptor_a9206a2442048339aa4b72b6c753710ba) 9314 0 R]
+/Limits [(struct_function_descriptor_a457239689cf6cf71c4efe13791d22785) (struct_function_descriptor_a9206a2442048339aa4b72b6c753710ba)]
+>> endobj
+17647 0 obj <<
+/Names [(struct_function_descriptor_aa8c3305a4fc6c78e44b30bffe6f4bbee) 9318 0 R (struct_function_descriptor_add6d286764cc7a3cab0a57892c919746) 9316 0 R (struct_function_descriptor_ae27a887fc68aec8ca07ecebd47ee63bd) 9321 0 R (struct_image) 8451 0 R (struct_image_a8611ea9ea821adda847f61ad509688ab) 9337 0 R (struct_image_aec0c76d8d1434ba4511fe0ea1ac75f00) 9336 0 R]
+/Limits [(struct_function_descriptor_aa8c3305a4fc6c78e44b30bffe6f4bbee) (struct_image_aec0c76d8d1434ba4511fe0ea1ac75f00)]
+>> endobj
+17648 0 obj <<
+/Names [(struct_init_table_entry) 8452 0 R (struct_init_table_entry_ad3fdea7f951608b1832a015e44df6696) 9358 0 R (struct_mic_env_var) 8592 0 R (struct_mic_env_var_1_1_card_env_vars) 8439 0 R (struct_mic_env_var_1_1_card_env_vars_a2465982dc7bad1c7c7407edc96420d31) 9008 0 R (struct_mic_env_var_1_1_card_env_vars_a4c9aeaabb6de128c5b37e2b9fb95bfb2) 9007 0 R]
+/Limits [(struct_init_table_entry) (struct_mic_env_var_1_1_card_env_vars_a4c9aeaabb6de128c5b37e2b9fb95bfb2)]
+>> endobj
+17649 0 obj <<
+/Names [(struct_mic_env_var_1_1_card_env_vars_a4ebc7d31a61dcd5d586b60d324dfa7f3) 9004 0 R (struct_mic_env_var_1_1_card_env_vars_acb5f8a9ec02ca7b8c8d6bc02d5e49aae) 9003 0 R (struct_mic_env_var_1_1_card_env_vars_ad2c23ce1b3105e99ac30db7dd6065a47) 9005 0 R (struct_mic_env_var_1_1_card_env_vars_ad9307d5a12f2a928b4ca9100dc2eb088) 9002 0 R (struct_mic_env_var_1_1_card_env_vars_adfcaa390b45aafa30434cd6c491480b2) 9006 0 R (struct_mic_env_var_1_1_var_value) 8640 0 R]
+/Limits [(struct_mic_env_var_1_1_card_env_vars_a4ebc7d31a61dcd5d586b60d324dfa7f3) (struct_mic_env_var_1_1_var_value)]
+>> endobj
+17650 0 obj <<
+/Names [(struct_mic_env_var_1_1_var_value_a5872c2bcef26f14c3d61e9a177868a5a) 10602 0 R (struct_mic_env_var_1_1_var_value_a5b7402e835373ac7daa72136ce4f8c2b) 10603 0 R (struct_mic_env_var_1_1_var_value_ad993c1c16d784d42431121822aadcbff) 10604 0 R (struct_mic_env_var_1_1_var_value_adef52e07b7b48f9acb725b6c5601df2d) 10606 0 R (struct_mic_env_var_1_1_var_value_afeaba5ff826dc76678433bcc2c66392e) 10605 0 R (struct_mic_env_var_a01b0555aa3f500c76f33c3c1fb7da3e6) 9658 0 R]
+/Limits [(struct_mic_env_var_1_1_var_value_a5872c2bcef26f14c3d61e9a177868a5a) (struct_mic_env_var_a01b0555aa3f500c76f33c3c1fb7da3e6)]
+>> endobj
+17651 0 obj <<
+/Names [(struct_mic_env_var_a1a0f838ba0d45669530bd4a12300b6dc) 9648 0 R (struct_mic_env_var_a2b0497a63a8c0aada354937388afb9ef) 9657 0 R (struct_mic_env_var_a2fc6f39630afd17fd6654a80d24cea81) 9655 0 R (struct_mic_env_var_a3390259050ba99673e53ac270fbe56f1) 9646 0 R (struct_mic_env_var_a3ecebd7ef41928a2bb3d6afa526eee44) 9647 0 R (struct_mic_env_var_a65e2e6a41312cd01f86d04a007139da4) 9656 0 R]
+/Limits [(struct_mic_env_var_a1a0f838ba0d45669530bd4a12300b6dc) (struct_mic_env_var_a65e2e6a41312cd01f86d04a007139da4)]
+>> endobj
+17652 0 obj <<
+/Names [(struct_mic_env_var_a75dd7e9348e9a130a62a9dcc53b7c0ae) 9651 0 R (struct_mic_env_var_a8e53a0ac1f871fdbff593f74a2e2f260) 9659 0 R (struct_mic_env_var_ab0ab93357643ce75071ddb1012e1f4d8) 9652 0 R (struct_mic_env_var_ab90b5804a958ee4a7f3399074206f29f) 9654 0 R (struct_mic_env_var_abe8a3bd3cd500cf9acb0b8d8131327b7) 9653 0 R (struct_mic_env_var_af2876ba1622b85b0a8dadc326577e7f4) 9649 0 R]
+/Limits [(struct_mic_env_var_a75dd7e9348e9a130a62a9dcc53b7c0ae) (struct_mic_env_var_af2876ba1622b85b0a8dadc326577e7f4)]
+>> endobj
+17653 0 obj <<
+/Names [(struct_myo_table) 8595 0 R (struct_myo_table_a41892b42550203014af3701703acb1f2) 9731 0 R (struct_myo_table_a849ec26ba57874595f0f714bb46db801) 9730 0 R (struct_myo_table_aa3555064fc49ba532bfba36e6734a0e2) 9729 0 R (struct_o_r_s_l_busy_set) 8626 0 R (struct_o_r_s_l_busy_set_a6a8584e950f796cd52ad93da8c4859d5) 10180 0 R]
+/Limits [(struct_myo_table) (struct_o_r_s_l_busy_set_a6a8584e950f796cd52ad93da8c4859d5)]
+>> endobj
+17654 0 obj <<
+/Names [(struct_offload_descriptor_1_1_var_extra) 8637 0 R (struct_offload_descriptor_1_1_var_extra_a1bcc12454b0ef09edb11e6497b4d70c0) 10541 0 R (struct_offload_descriptor_1_1_var_extra_a30cd0f24528f75ebbc307456f170c57c) 10534 0 R (struct_offload_descriptor_1_1_var_extra_a3ad2387d67aab04a5bc00b20f0e8a24c) 10539 0 R (struct_offload_descriptor_1_1_var_extra_a5749eb4b23c4d8f060b7d5739a85cdf3) 10538 0 R (struct_offload_descriptor_1_1_var_extra_a7c4e4acbdadb46df9a25b99fb702bc70) 10537 0 R]
+/Limits [(struct_offload_descriptor_1_1_var_extra) (struct_offload_descriptor_1_1_var_extra_a7c4e4acbdadb46df9a25b99fb702bc70)]
+>> endobj
+17655 0 obj <<
+/Names [(struct_offload_descriptor_1_1_var_extra_a7e8688bcc3ea8926360c06d68348a260) 10535 0 R (struct_offload_descriptor_1_1_var_extra_ab1447c00d6900992a36ce881b73871ac) 10536 0 R (struct_offload_descriptor_1_1_var_extra_acf3541f4dd0258559b9dcd9dd4bba3f3) 10542 0 R (struct_offload_descriptor_1_1_var_extra_ad4b4cfc60e287a3d4458a4f09d0c190b) 10540 0 R (struct_persist_data) 8627 0 R (struct_persist_data_a0950622e846120b1b0dfaed25bfba260) 10188 0 R]
+/Limits [(struct_offload_descriptor_1_1_var_extra_a7e8688bcc3ea8926360c06d68348a260) (struct_persist_data_a0950622e846120b1b0dfaed25bfba260)]
+>> endobj
+17656 0 obj <<
+/Names [(struct_persist_data_a103d4631df00ccb591b016586169fe49) 10186 0 R (struct_persist_data_a2948211bfa65a8a27f2ac6accff8e7bb) 10184 0 R (struct_persist_data_a2dabfc1a9752b76fbd6e37ee7425a1ba) 10185 0 R (struct_persist_data_a66f89c5dbd8d598d6c7f9d2c6d67d5bb) 10183 0 R (struct_ref_info) 8630 0 R (struct_ref_info_a63c8d308aa3cc19b949669d56bdd03b7) 10289 0 R]
+/Limits [(struct_persist_data_a103d4631df00ccb591b016586169fe49) (struct_ref_info_a63c8d308aa3cc19b949669d56bdd03b7)]
+>> endobj
+17657 0 obj <<
+/Names [(struct_ref_info_a93895cfc2c8d313fe13e59cecf4af817) 10288 0 R (struct_ref_info_aa06b608a8a20ad66a3f8f63d6a739ffd) 10290 0 R (struct_table_list_1_1_node) 8597 0 R (struct_table_list_1_1_node_ab5d88c341d2a531677933bb47eeb2dfc) 9812 0 R (struct_table_list_1_1_node_ac0f1c8ec9eaba2718ccff933261300d0) 9813 0 R (struct_table_list_1_1_node_ac91c9a8615eabc9426b2477b328d7409) 9811 0 R]
+/Limits [(struct_ref_info_a93895cfc2c8d313fe13e59cecf4af817) (struct_table_list_1_1_node_ac91c9a8615eabc9426b2477b328d7409)]
+>> endobj
+17658 0 obj <<
+/Names [(struct_target_image) 8632 0 R (struct_target_image_a634d79e501d9a7220d9862b799859d1b) 10336 0 R (struct_target_image_a985e1e93c5e7d69f80b0b34812704de7) 10335 0 R (struct_target_image_ab1f77ef188ce016b952197058b07138b) 10331 0 R (struct_target_image_ad5b155d9c25cca3ce47745052a15890f) 10334 0 R (struct_target_image_ad83716e8e20a0473dda0f07c6154a008) 10332 0 R]
+/Limits [(struct_target_image) (struct_target_image_ad83716e8e20a0473dda0f07c6154a008)]
+>> endobj
+17659 0 obj <<
+/Names [(struct_target_image_af8103594de4ff2aab3ab3d98b1a4fe53) 10333 0 R (struct_thread) 8633 0 R (struct_thread_a11928ded50001fa765f5f0865948fdc2) 10352 0 R (struct_thread_a37d9edd3a1a776cbc27dedff949c9726) 10349 0 R (struct_thread_a451e8af5c1fdba5c23f5b9cb7ce1ddea) 10354 0 R (struct_thread_a5262a349f91f22704095db730921bae6) 10348 0 R]
+/Limits [(struct_target_image_af8103594de4ff2aab3ab3d98b1a4fe53) (struct_thread_a5262a349f91f22704095db730921bae6)]
+>> endobj
+17660 0 obj <<
+/Names [(struct_thread_a89487b2ed580958e7b0f4b590669d236) 10355 0 R (struct_thread_a937af950cf676bd6298dcc38693d9b86) 10351 0 R (struct_thread_ab25f445c8f68c67f51d687b9f399d2d4) 10350 0 R (struct_thread_ac9d38857545d91503b4ec6f43fa25a63) 10353 0 R (struct_var_desc) 8634 0 R (struct_var_desc2) 8635 0 R]
+/Limits [(struct_thread_a89487b2ed580958e7b0f4b590669d236) (struct_var_desc2)]
+>> endobj
+17661 0 obj <<
+/Names [(struct_var_desc2_a51798d059e85342f93f8d912a08907a0) 10469 0 R (struct_var_desc2_ae2634687581241177276f488d4d07bae) 10470 0 R (struct_var_desc3) 8636 0 R (struct_var_desc3_a1e82a2ac09d7c4d5836fa5bf7c0f4eb1) 10502 0 R (struct_var_desc3_a338f98138c7c0f7940e041bdd4667e44) 10503 0 R (struct_var_desc3_a6ea0d3570434bf13d15a8826355fe9ce) 10473 0 R]
+/Limits [(struct_var_desc2_a51798d059e85342f93f8d912a08907a0) (struct_var_desc3_a6ea0d3570434bf13d15a8826355fe9ce)]
+>> endobj
+17662 0 obj <<
+/Names [(struct_var_desc3_a79bcbb13c12b5416348ea894a22081c6) 10501 0 R (struct_var_desc3_a7b169491f5bb75d1105427a0677c017d) 10499 0 R (struct_var_desc3_a86e5df6341a9f07498af0e6f87e7ccf8) 10475 0 R (struct_var_desc3_a97d058ba75c6632342a274d095d089fe) 10472 0 R (struct_var_desc3_ae1dc1239728ee9f8216f0aec157a95ee) 10474 0 R (struct_var_desc3_ae67832d9b72d0212ab10c9daf381250b) 10497 0 R]
+/Limits [(struct_var_desc3_a79bcbb13c12b5416348ea894a22081c6) (struct_var_desc3_ae67832d9b72d0212ab10c9daf381250b)]
+>> endobj
+17663 0 obj <<
+/Names [(struct_var_desc3_af3ca72f20bee189aa51deeaf8814469a) 10498 0 R (struct_var_desc3_afd4283ff9ef6074c6bcc9d1e9c937dc6) 10500 0 R (struct_var_desc_a0738cb4651a9ce20a4f1f8b46090d602) 10390 0 R (struct_var_desc_a08bf3dea4577692215182f1e10bba093) 10428 0 R (struct_var_desc_a0a18a6774452aa19f211b38c4f03087f) 10415 0 R (struct_var_desc_a10be319521aa7bc4f97c6899f25031d0) 10427 0 R]
+/Limits [(struct_var_desc3_af3ca72f20bee189aa51deeaf8814469a) (struct_var_desc_a10be319521aa7bc4f97c6899f25031d0)]
+>> endobj
+17664 0 obj <<
+/Names [(struct_var_desc_a1b9ec50c9b9965032521e113df56a283) 10418 0 R (struct_var_desc_a1d0dd4cb820a156c480d4535d62f03bb) 10385 0 R (struct_var_desc_a28f68e89ba90586ab524ad7243245331) 10388 0 R (struct_var_desc_a451d159741bd619737c40adfe02d3ab3) 10423 0 R (struct_var_desc_a4d6f64d2d89c31dd1dc238ff067c054c) 10419 0 R (struct_var_desc_a4e019961968515eec2794436476fe114) 10426 0 R]
+/Limits [(struct_var_desc_a1b9ec50c9b9965032521e113df56a283) (struct_var_desc_a4e019961968515eec2794436476fe114)]
+>> endobj
+17665 0 obj <<
+/Names [(struct_var_desc_a5bb6d1759f766fe2a1c31a78821c802d) 10425 0 R (struct_var_desc_a5f13a465b0d595bc880c89793daffef2) 10386 0 R (struct_var_desc_a7cfd88697b3eb42dd58eb3b19358f766) 10387 0 R (struct_var_desc_a803826eea15757e2fe053c7e6aca514a) 10422 0 R (struct_var_desc_a8c438a708428ba60789704ba394ab179) 10397 0 R (struct_var_desc_a98621ffe98c8a775bec4f9f7015593ed) 10393 0 R]
+/Limits [(struct_var_desc_a5bb6d1759f766fe2a1c31a78821c802d) (struct_var_desc_a98621ffe98c8a775bec4f9f7015593ed)]
+>> endobj
+17666 0 obj <<
+/Names [(struct_var_desc_aa02b956a35695e824c469af70dce2c8b) 10384 0 R (struct_var_desc_aa8c848d61a0b4cde6303242e14a7af99) 10383 0 R (struct_var_desc_aad5a72a4139b42aa44da6c375065ce1f) 10398 0 R (struct_var_desc_ab562b929029997cccd7672a98ea18b08) 10395 0 R (struct_var_desc_ab7551f3644b7bb16ae2f62ce735e00c1) 10416 0 R (struct_var_desc_ab9089fa1fcba7d661eebb58541adb556) 10399 0 R]
+/Limits [(struct_var_desc_aa02b956a35695e824c469af70dce2c8b) (struct_var_desc_ab9089fa1fcba7d661eebb58541adb556)]
+>> endobj
+17667 0 obj <<
+/Names [(struct_var_desc_abec1df4179cec53b5b06ccbe0cfb2b0d) 10391 0 R (struct_var_desc_aca3e2c58c8c9d8f24ee8e660346a5ec9) 10394 0 R (struct_var_desc_ad3cace80a8b2b6c5574b1dbd0fc050bf) 10420 0 R (struct_var_desc_ad9353419f818d92f5f56bc1ec9d0a8a8) 10396 0 R (struct_var_desc_ad9e7d2b8dfdc5ff5d13d421ee31b7bfe) 10417 0 R (struct_var_desc_adce941842b6031fe0ab79e39b6688980) 10421 0 R]
+/Limits [(struct_var_desc_abec1df4179cec53b5b06ccbe0cfb2b0d) (struct_var_desc_adce941842b6031fe0ab79e39b6688980)]
+>> endobj
+17668 0 obj <<
+/Names [(struct_var_desc_add4a4de64e60334f5f2ded1fd7c2619e) 10392 0 R (struct_var_desc_ae3f6c4692a6eb4d31c97dd25ae8cf332) 10389 0 R (struct_var_desc_af5b2ef70b1ff91c6ce56b136b4c77a68) 10424 0 R (struct_var_list_1_1_buf_entry) 8438 0 R (struct_var_list_1_1_buf_entry_aa0dbca4bfa65775d2fbb158847b2c98a) 8984 0 R (struct_var_list_1_1_buf_entry_adeeae84ac8c3575d917f47515d246858) 8985 0 R]
+/Limits [(struct_var_desc_add4a4de64e60334f5f2ded1fd7c2619e) (struct_var_list_1_1_buf_entry_adeeae84ac8c3575d917f47515d246858)]
+>> endobj
+17669 0 obj <<
+/Names [(struct_var_table) 8639 0 R (struct_var_table_1_1_entry) 8446 0 R (struct_var_table_1_1_entry_a39b3ca3698dd278806b7ef120c65b530) 9243 0 R (struct_var_table_1_1_entry_a7c2f20df6d205fb2f59b43ce180ec249) 9244 0 R (struct_var_table_ae81d6436634e7d3a63068e3204fdc920) 10587 0 R (structarr__desc) 8435 0 R]
+/Limits [(struct_var_table) (structarr__desc)]
+>> endobj
+17670 0 obj <<
+/Names [(structarr__desc_a46f0ae505f200aa06d12de3b36b9025e) 8938 0 R (structarr__desc_aaab1872504510d70d292ff02e53475ae) 8939 0 R (structarr__desc_aca67463d4828ad600d5e0913e7bf2424) 8940 0 R (structdim__desc) 8442 0 R (structdim__desc_a1b07e4afff40941a98c5737005a12c15) 9049 0 R (structdim__desc_a3e9d7bac022617c6ebc68f7fd3bbcd87) 9052 0 R]
+/Limits [(structarr__desc_a46f0ae505f200aa06d12de3b36b9025e) (structdim__desc_a3e9d7bac022617c6ebc68f7fd3bbcd87)]
+>> endobj
+17671 0 obj <<
+/Names [(structdim__desc_a6bfd3fe0aa203133197d29227428787b) 9048 0 R (structdim__desc_aa6ef563ca64e2920357a9e9e80b14b8b) 9051 0 R (structdim__desc_ad9a37e64ee510fa7cea2fca1bc0a876c) 9050 0 R (structkmp__affinity__mask__target__t) 8454 0 R (structkmp__affinity__mask__target__t_ad8420cac8a0d16eb6e785cc00f8f4d6b) 9382 0 R (structmic__lib_1_1offload__status) 8603 0 R]
+/Limits [(structdim__desc_a6bfd3fe0aa203133197d29227428787b) (structmic__lib_1_1offload__status)]
+>> endobj
+17672 0 obj <<
+/Names [(structmic__lib_1_1offload__status_a02fe14c587991f9bd98dfa4236687805) 9849 0 R (structmic__lib_1_1offload__status_a953a04e17452ae0ee3c30fea37295c22) 9848 0 R (structmic__lib_1_1offload__status_ab16c875893f080500c013be2a6390070) 9851 0 R (structmic__lib_1_1offload__status_ac93826b35d468f7a35b7c80f8776fe17) 9850 0 R (structmutex__locker__t) 8593 0 R (structmutex__locker__t_a75acaa8451bb8478ef262e2b9c585e5f) 9682 0 R]
+/Limits [(structmic__lib_1_1offload__status_a02fe14c587991f9bd98dfa4236687805) (structmutex__locker__t_a75acaa8451bb8478ef262e2b9c585e5f)]
+>> endobj
+17673 0 obj <<
+/Names [(structmutex__locker__t_a761499be260604b435b749473bb0699e) 9683 0 R (structmutex__locker__t_ada8022b8d6d65d5bad6f0fd8a4798883) 9684 0 R (structmutex__t) 8594 0 R (structmutex__t_a35af6a636096d94d7d66f6c95bc69314) 9695 0 R (structmutex__t_a458b76c082fd59180dc549a9a46d4ddb) 9697 0 R (structmutex__t_ade7f7cf4dc47749b20da1a1512772dd2) 9699 0 R]
+/Limits [(structmutex__locker__t_a761499be260604b435b749473bb0699e) (structmutex__t_ade7f7cf4dc47749b20da1a1512772dd2)]
+>> endobj
+17674 0 obj <<
+/Names [(structmutex__t_ae6eb5623283386fa0f057cc5df057712) 9696 0 R (structmutex__t_aff9e3152e38806e0c52e6fdc3646f35d) 9698 0 R (structomp__lock__target__t) 8614 0 R (structomp__lock__target__t_a9f3dd5b07bf263d19c925f2e6937c2f2) 10102 0 R (structomp__nest__lock__target__t) 8615 0 R (structomp__nest__lock__target__t_a4e79c6247177bdcb556e2d88d2095202) 10114 0 R]
+/Limits [(structmutex__t_ae6eb5623283386fa0f057cc5df057712) (structomp__nest__lock__target__t_a4e79c6247177bdcb556e2d88d2095202)]
+>> endobj
+17675 0 obj <<
+/Names [(subsection.5.1.1) 46 0 R (subsection.5.1.2) 58 0 R (subsection.5.2.1) 162 0 R (subsection.5.2.2) 182 0 R (subsection.6.1.1) 202 0 R (subsection.6.1.2) 206 0 R]
+/Limits [(subsection.5.1.1) (subsection.6.1.2)]
+>> endobj
+17676 0 obj <<
+/Names [(subsection.6.10.1) 502 0 R (subsection.6.10.2) 506 0 R (subsection.6.11.1) 526 0 R (subsection.6.11.2) 530 0 R (subsection.6.11.3) 542 0 R (subsection.6.11.4) 550 0 R]
+/Limits [(subsection.6.10.1) (subsection.6.11.4)]
+>> endobj
+17677 0 obj <<
+/Names [(subsection.6.11.5) 562 0 R (subsection.6.11.6) 658 0 R (subsection.6.11.7) 670 0 R (subsection.6.12.1) 742 0 R (subsection.6.12.2) 746 0 R (subsection.6.13.1) 762 0 R]
+/Limits [(subsection.6.11.5) (subsection.6.13.1)]
+>> endobj
+17678 0 obj <<
+/Names [(subsection.6.13.2) 766 0 R (subsection.6.14.1) 782 0 R (subsection.6.14.2) 786 0 R (subsection.6.15.1) 806 0 R (subsection.6.15.2) 810 0 R (subsection.6.15.3) 818 0 R]
+/Limits [(subsection.6.13.2) (subsection.6.15.3)]
+>> endobj
+17679 0 obj <<
+/Names [(subsection.6.15.4) 842 0 R (subsection.6.16.1) 854 0 R (subsection.6.16.2) 858 0 R (subsection.6.17.1) 874 0 R (subsection.6.17.2) 878 0 R (subsection.6.18.1) 922 0 R]
+/Limits [(subsection.6.15.4) (subsection.6.18.1)]
+>> endobj
+17680 0 obj <<
+/Names [(subsection.6.18.2) 926 0 R (subsection.6.19.1) 942 0 R (subsection.6.19.2) 946 0 R (subsection.6.2.1) 230 0 R (subsection.6.2.2) 234 0 R (subsection.6.20.1) 958 0 R]
+/Limits [(subsection.6.18.2) (subsection.6.20.1)]
+>> endobj
+17681 0 obj <<
+/Names [(subsection.6.20.2) 962 0 R (subsection.6.20.3) 974 0 R (subsection.6.20.4) 998 0 R (subsection.6.21.1) 1014 0 R (subsection.6.21.2) 1018 0 R (subsection.6.22.1) 1030 0 R]
+/Limits [(subsection.6.20.2) (subsection.6.22.1)]
+>> endobj
+17682 0 obj <<
+/Names [(subsection.6.22.2) 1034 0 R (subsection.6.23.1) 1046 0 R (subsection.6.23.2) 1050 0 R (subsection.6.24.1) 1062 0 R (subsection.6.24.2) 1066 0 R (subsection.6.25.1) 1078 0 R]
+/Limits [(subsection.6.22.2) (subsection.6.25.1)]
+>> endobj
+17683 0 obj <<
+/Names [(subsection.6.25.2) 1082 0 R (subsection.6.26.1) 1094 0 R (subsection.6.26.2) 1098 0 R (subsection.6.27.1) 1110 0 R (subsection.6.27.2) 1114 0 R (subsection.6.28.1) 1126 0 R]
+/Limits [(subsection.6.25.2) (subsection.6.28.1)]
+>> endobj
+17684 0 obj <<
+/Names [(subsection.6.28.2) 1130 0 R (subsection.6.29.1) 1142 0 R (subsection.6.29.2) 1146 0 R (subsection.6.3.1) 254 0 R (subsection.6.3.2) 258 0 R (subsection.6.30.1) 1158 0 R]
+/Limits [(subsection.6.28.2) (subsection.6.30.1)]
+>> endobj
+17685 0 obj <<
+/Names [(subsection.6.30.2) 1162 0 R (subsection.6.31.1) 1174 0 R (subsection.6.31.2) 1178 0 R (subsection.6.32.1) 1190 0 R (subsection.6.32.2) 1194 0 R (subsection.6.33.1) 1206 0 R]
+/Limits [(subsection.6.30.2) (subsection.6.33.1)]
+>> endobj
+17686 0 obj <<
+/Names [(subsection.6.33.2) 1210 0 R (subsection.6.34.1) 1222 0 R (subsection.6.34.2) 1226 0 R (subsection.6.35.1) 1238 0 R (subsection.6.35.2) 1242 0 R (subsection.6.36.1) 1254 0 R]
+/Limits [(subsection.6.33.2) (subsection.6.36.1)]
+>> endobj
+17687 0 obj <<
+/Names [(subsection.6.36.2) 1258 0 R (subsection.6.37.1) 1270 0 R (subsection.6.37.2) 1274 0 R (subsection.6.38.1) 1286 0 R (subsection.6.38.2) 1290 0 R (subsection.6.39.1) 1302 0 R]
+/Limits [(subsection.6.36.2) (subsection.6.39.1)]
+>> endobj
+17688 0 obj <<
+/Names [(subsection.6.39.2) 1306 0 R (subsection.6.4.1) 294 0 R (subsection.6.4.2) 298 0 R (subsection.6.4.3) 306 0 R (subsection.6.4.4) 326 0 R (subsection.6.40.1) 1318 0 R]
+/Limits [(subsection.6.39.2) (subsection.6.40.1)]
+>> endobj
+17689 0 obj <<
+/Names [(subsection.6.40.2) 1322 0 R (subsection.6.41.1) 1334 0 R (subsection.6.41.2) 1338 0 R (subsection.6.42.1) 1350 0 R (subsection.6.42.2) 1354 0 R (subsection.6.42.3) 1362 0 R]
+/Limits [(subsection.6.40.2) (subsection.6.42.3)]
+>> endobj
+17690 0 obj <<
+/Names [(subsection.6.42.4) 1398 0 R (subsection.6.43.1) 1422 0 R (subsection.6.43.2) 1426 0 R (subsection.6.43.3) 1438 0 R (subsection.6.43.4) 1462 0 R (subsection.6.44.1) 1478 0 R]
+/Limits [(subsection.6.42.4) (subsection.6.44.1)]
+>> endobj
+17691 0 obj <<
+/Names [(subsection.6.44.2) 1482 0 R (subsection.6.45.1) 1502 0 R (subsection.6.45.2) 1506 0 R (subsection.6.45.3) 1518 0 R (subsection.6.45.4) 1550 0 R (subsection.6.46.1) 1574 0 R]
+/Limits [(subsection.6.44.2) (subsection.6.46.1)]
+>> endobj
+17692 0 obj <<
+/Names [(subsection.6.46.2) 1578 0 R (subsection.6.46.3) 1590 0 R (subsection.6.47.1) 1602 0 R (subsection.6.47.2) 1606 0 R (subsection.6.47.3) 1618 0 R (subsection.6.47.4) 1630 0 R]
+/Limits [(subsection.6.46.2) (subsection.6.47.4)]
+>> endobj
+17693 0 obj <<
+/Names [(subsection.6.48.1) 1642 0 R (subsection.6.48.2) 1646 0 R (subsection.6.48.3) 1654 0 R (subsection.6.49.1) 1670 0 R (subsection.6.49.2) 1674 0 R (subsection.6.49.3) 1682 0 R]
+/Limits [(subsection.6.48.1) (subsection.6.49.3)]
+>> endobj
+17694 0 obj <<
+/Names [(subsection.6.49.4) 1754 0 R (subsection.6.5.1) 342 0 R (subsection.6.5.2) 346 0 R (subsection.6.50.1) 1822 0 R (subsection.6.50.2) 1826 0 R (subsection.6.51.1) 1846 0 R]
+/Limits [(subsection.6.49.4) (subsection.6.51.1)]
+>> endobj
+17695 0 obj <<
+/Names [(subsection.6.51.2) 1850 0 R (subsection.6.52.1) 1862 0 R (subsection.6.52.2) 1866 0 R (subsection.6.53.1) 1878 0 R (subsection.6.53.2) 1882 0 R (subsection.6.54.1) 1894 0 R]
+/Limits [(subsection.6.51.2) (subsection.6.54.1)]
+>> endobj
+17696 0 obj <<
+/Names [(subsection.6.54.2) 1898 0 R (subsection.6.55.1) 1910 0 R (subsection.6.55.2) 1914 0 R (subsection.6.56.1) 1926 0 R (subsection.6.56.2) 1930 0 R (subsection.6.57.1) 1954 0 R]
+/Limits [(subsection.6.54.2) (subsection.6.57.1)]
+>> endobj
+17697 0 obj <<
+/Names [(subsection.6.57.2) 1958 0 R (subsection.6.57.3) 1970 0 R (subsection.6.57.4) 1990 0 R (subsection.6.57.5) 2114 0 R (subsection.6.58.1) 2226 0 R (subsection.6.58.2) 2230 0 R]
+/Limits [(subsection.6.57.2) (subsection.6.58.2)]
+>> endobj
+17698 0 obj <<
+/Names [(subsection.6.59.1) 2242 0 R (subsection.6.59.2) 2246 0 R (subsection.6.6.1) 362 0 R (subsection.6.6.2) 366 0 R (subsection.6.6.3) 382 0 R (subsection.6.6.4) 394 0 R]
+/Limits [(subsection.6.59.1) (subsection.6.6.4)]
+>> endobj
+17699 0 obj <<
+/Names [(subsection.6.60.1) 2258 0 R (subsection.6.60.2) 2262 0 R (subsection.6.61.1) 2274 0 R (subsection.6.61.2) 2278 0 R (subsection.6.62.1) 2290 0 R (subsection.6.62.2) 2294 0 R]
+/Limits [(subsection.6.60.1) (subsection.6.62.2)]
+>> endobj
+17700 0 obj <<
+/Names [(subsection.6.63.1) 2306 0 R (subsection.6.63.2) 2310 0 R (subsection.6.64.1) 2322 0 R (subsection.6.64.2) 2326 0 R (subsection.6.65.1) 2338 0 R (subsection.6.65.2) 2342 0 R]
+/Limits [(subsection.6.63.1) (subsection.6.65.2)]
+>> endobj
+17701 0 obj <<
+/Names [(subsection.6.66.1) 2354 0 R (subsection.6.66.2) 2358 0 R (subsection.6.67.1) 2370 0 R (subsection.6.67.2) 2374 0 R (subsection.6.68.1) 2386 0 R (subsection.6.68.2) 2390 0 R]
+/Limits [(subsection.6.66.1) (subsection.6.68.2)]
+>> endobj
+17702 0 obj <<
+/Names [(subsection.6.69.1) 2402 0 R (subsection.6.69.2) 2406 0 R (subsection.6.7.1) 410 0 R (subsection.6.7.2) 414 0 R (subsection.6.70.1) 2418 0 R (subsection.6.70.2) 2422 0 R]
+/Limits [(subsection.6.69.1) (subsection.6.70.2)]
+>> endobj
+17703 0 obj <<
+/Names [(subsection.6.71.1) 2434 0 R (subsection.6.71.2) 2438 0 R (subsection.6.72.1) 2450 0 R (subsection.6.72.2) 2454 0 R (subsection.6.73.1) 2466 0 R (subsection.6.73.2) 2470 0 R]
+/Limits [(subsection.6.71.1) (subsection.6.73.2)]
+>> endobj
+17704 0 obj <<
+/Names [(subsection.6.74.1) 2482 0 R (subsection.6.74.2) 2486 0 R (subsection.6.75.1) 2498 0 R (subsection.6.75.2) 2502 0 R (subsection.6.76.1) 2514 0 R (subsection.6.76.2) 2518 0 R]
+/Limits [(subsection.6.74.1) (subsection.6.76.2)]
+>> endobj
+17705 0 obj <<
+/Names [(subsection.6.77.1) 2530 0 R (subsection.6.77.2) 2534 0 R (subsection.6.78.1) 2546 0 R (subsection.6.78.2) 2550 0 R (subsection.6.79.1) 2562 0 R (subsection.6.79.2) 2566 0 R]
+/Limits [(subsection.6.77.1) (subsection.6.79.2)]
+>> endobj
+17706 0 obj <<
+/Names [(subsection.6.8.1) 430 0 R (subsection.6.8.2) 434 0 R (subsection.6.80.1) 2578 0 R (subsection.6.80.2) 2582 0 R (subsection.6.80.3) 2590 0 R (subsection.6.81.1) 2614 0 R]
+/Limits [(subsection.6.8.1) (subsection.6.81.1)]
+>> endobj
+17707 0 obj <<
+/Names [(subsection.6.81.2) 2618 0 R (subsection.6.81.3) 2630 0 R (subsection.6.81.4) 2650 0 R (subsection.6.82.1) 2694 0 R (subsection.6.82.2) 2698 0 R (subsection.6.82.3) 2706 0 R]
+/Limits [(subsection.6.81.2) (subsection.6.82.3)]
+>> endobj
+17708 0 obj <<
+/Names [(subsection.6.82.4) 2714 0 R (subsection.6.83.1) 2758 0 R (subsection.6.83.2) 2762 0 R (subsection.6.83.3) 2770 0 R (subsection.6.84.1) 2786 0 R (subsection.6.84.2) 2790 0 R]
+/Limits [(subsection.6.82.4) (subsection.6.84.2)]
+>> endobj
+17709 0 obj <<
+/Names [(subsection.6.84.3) 2798 0 R (subsection.6.84.4) 2806 0 R (subsection.6.84.5) 2818 0 R (subsection.6.85.1) 2834 0 R (subsection.6.85.2) 2838 0 R (subsection.6.85.3) 2846 0 R]
+/Limits [(subsection.6.84.3) (subsection.6.85.3)]
+>> endobj
+17710 0 obj <<
+/Names [(subsection.6.86.1) 2874 0 R (subsection.6.86.2) 2878 0 R (subsection.6.86.3) 2890 0 R (subsection.6.86.4) 2906 0 R (subsection.6.87.1) 2926 0 R (subsection.6.87.2) 2930 0 R]
+/Limits [(subsection.6.86.1) (subsection.6.87.2)]
+>> endobj
+17711 0 obj <<
+/Names [(subsection.6.88.1) 3062 0 R (subsection.6.88.2) 3066 0 R (subsection.6.89.1) 3082 0 R (subsection.6.89.2) 3086 0 R (subsection.6.9.1) 470 0 R (subsection.6.9.2) 474 0 R]
+/Limits [(subsection.6.88.1) (subsection.6.9.2)]
+>> endobj
+17712 0 obj <<
+/Names [(subsection.6.90.1) 3138 0 R (subsection.6.90.2) 3142 0 R (subsection.6.91.1) 3186 0 R (subsection.6.91.2) 3190 0 R (subsection.6.91.3) 3198 0 R (subsection.6.92.1) 3230 0 R]
+/Limits [(subsection.6.90.1) (subsection.6.92.1)]
+>> endobj
+17713 0 obj <<
+/Names [(subsection.6.92.2) 3234 0 R (subsection.6.93.1) 3246 0 R (subsection.6.93.2) 3250 0 R (subsection.6.93.3) 3262 0 R (subsection.7.1.1) 3286 0 R (subsection.7.1.2) 3294 0 R]
+/Limits [(subsection.6.92.2) (subsection.7.1.2)]
+>> endobj
+17714 0 obj <<
+/Names [(subsection.7.1.3) 3334 0 R (subsection.7.10.1) 3602 0 R (subsection.7.10.2) 3606 0 R (subsection.7.10.3) 3622 0 R (subsection.7.11.1) 3642 0 R (subsection.7.12.1) 3670 0 R]
+/Limits [(subsection.7.1.3) (subsection.7.12.1)]
+>> endobj
+17715 0 obj <<
+/Names [(subsection.7.12.2) 3694 0 R (subsection.7.12.3) 3714 0 R (subsection.7.13.1) 3742 0 R (subsection.7.13.2) 3750 0 R (subsection.7.14.1) 3774 0 R (subsection.7.14.2) 3794 0 R]
+/Limits [(subsection.7.12.2) (subsection.7.14.2)]
+>> endobj
+17716 0 obj <<
+/Names [(subsection.7.14.3) 3810 0 R (subsection.7.15.1) 3846 0 R (subsection.7.15.2) 3854 0 R (subsection.7.16.1) 3870 0 R (subsection.7.16.2) 3878 0 R (subsection.7.16.3) 3886 0 R]
+/Limits [(subsection.7.14.3) (subsection.7.16.3)]
+>> endobj
+17717 0 obj <<
+/Names [(subsection.7.18.1) 3902 0 R (subsection.7.18.2) 3926 0 R (subsection.7.18.3) 3934 0 R (subsection.7.18.4) 3946 0 R (subsection.7.19.1) 4158 0 R (subsection.7.2.1) 3350 0 R]
+/Limits [(subsection.7.18.1) (subsection.7.2.1)]
+>> endobj
+17718 0 obj <<
+/Names [(subsection.7.2.2) 3362 0 R (subsection.7.20.1) 4170 0 R (subsection.7.20.2) 4174 0 R (subsection.7.20.3) 4226 0 R (subsection.7.20.4) 4234 0 R (subsection.7.20.5) 4246 0 R]
+/Limits [(subsection.7.2.2) (subsection.7.20.5)]
+>> endobj
+17719 0 obj <<
+/Names [(subsection.7.20.6) 4254 0 R (subsection.7.21.1) 4342 0 R (subsection.7.22.1) 4358 0 R (subsection.7.22.2) 4366 0 R (subsection.7.24.1) 4394 0 R (subsection.7.25.1) 4406 0 R]
+/Limits [(subsection.7.20.6) (subsection.7.25.1)]
+>> endobj
+17720 0 obj <<
+/Names [(subsection.7.25.2) 4418 0 R (subsection.7.25.3) 4486 0 R (subsection.7.26.1) 4658 0 R (subsection.7.26.2) 4662 0 R (subsection.7.26.3) 4670 0 R (subsection.7.26.4) 4678 0 R]
+/Limits [(subsection.7.25.2) (subsection.7.26.4)]
+>> endobj
+17721 0 obj <<
+/Names [(subsection.7.26.5) 4702 0 R (subsection.7.27.1) 4790 0 R (subsection.7.27.2) 4802 0 R (subsection.7.27.3) 4810 0 R (subsection.7.27.4) 4898 0 R (subsection.7.28.1) 4926 0 R]
+/Limits [(subsection.7.26.5) (subsection.7.28.1)]
+>> endobj
+17722 0 obj <<
+/Names [(subsection.7.28.2) 4954 0 R (subsection.7.28.3) 4962 0 R (subsection.7.29.1) 4978 0 R (subsection.7.3.1) 3394 0 R (subsection.7.30.1) 5054 0 R (subsection.7.30.2) 5074 0 R]
+/Limits [(subsection.7.28.2) (subsection.7.30.2)]
+>> endobj
+17723 0 obj <<
+/Names [(subsection.7.30.3) 5086 0 R (subsection.7.31.1) 5114 0 R (subsection.7.32.1) 5298 0 R (subsection.7.35.1) 5646 0 R (subsection.7.35.2) 5814 0 R (subsection.7.36.1) 5838 0 R]
+/Limits [(subsection.7.30.3) (subsection.7.36.1)]
+>> endobj
+17724 0 obj <<
+/Names [(subsection.7.36.2) 5842 0 R (subsection.7.36.3) 5870 0 R (subsection.7.36.4) 5882 0 R (subsection.7.37.1) 5902 0 R (subsection.7.37.2) 5910 0 R (subsection.7.37.3) 5930 0 R]
+/Limits [(subsection.7.36.2) (subsection.7.37.3)]
+>> endobj
+17725 0 obj <<
+/Names [(subsection.7.38.1) 5982 0 R (subsection.7.38.2) 5990 0 R (subsection.7.39.1) 6010 0 R (subsection.7.4.1) 3410 0 R (subsection.7.40.1) 6026 0 R (subsection.7.40.2) 6050 0 R]
+/Limits [(subsection.7.38.1) (subsection.7.40.2)]
+>> endobj
+17726 0 obj <<
+/Names [(subsection.7.41.1) 6062 0 R (subsection.7.42.1) 6074 0 R (subsection.7.43.1) 6086 0 R (subsection.7.43.2) 6102 0 R (subsection.7.44.1) 6118 0 R (subsection.7.44.2) 6126 0 R]
+/Limits [(subsection.7.41.1) (subsection.7.44.2)]
+>> endobj
+17727 0 obj <<
+/Names [(subsection.7.45.1) 6138 0 R (subsection.7.46.1) 6162 0 R (subsection.7.46.2) 6202 0 R (subsection.7.46.3) 6210 0 R (subsection.7.47.1) 6234 0 R (subsection.7.47.2) 6246 0 R]
+/Limits [(subsection.7.45.1) (subsection.7.47.2)]
+>> endobj
+17728 0 obj <<
+/Names [(subsection.7.47.3) 6266 0 R (subsection.7.48.1) 6298 0 R (subsection.7.48.2) 6306 0 R (subsection.7.49.1) 6326 0 R (subsection.7.49.2) 6338 0 R (subsection.7.49.3) 6358 0 R]
+/Limits [(subsection.7.47.3) (subsection.7.49.3)]
+>> endobj
+17729 0 obj <<
+/Names [(subsection.7.49.4) 6370 0 R (subsection.7.5.1) 3422 0 R (subsection.7.50.1) 6394 0 R (subsection.7.50.2) 6418 0 R (subsection.7.50.3) 6478 0 R (subsection.7.6.1) 3446 0 R]
+/Limits [(subsection.7.49.4) (subsection.7.6.1)]
+>> endobj
+17730 0 obj <<
+/Names [(subsection.7.7.1) 3474 0 R (subsection.7.7.2) 3506 0 R (subsection.7.8.1) 3518 0 R (subsection.7.8.2) 3522 0 R (subsection.7.8.3) 3550 0 R (subsection.7.9.1) 3582 0 R]
+/Limits [(subsection.7.7.1) (subsection.7.9.1)]
+>> endobj
+17731 0 obj <<
+/Kids [17097 0 R 17098 0 R 17099 0 R 17100 0 R 17101 0 R 17102 0 R]
+/Limits [(Doc-Start) (class_auto_data_a2dfb82ff18281f05661a52c3659282d6)]
+>> endobj
+17732 0 obj <<
+/Kids [17103 0 R 17104 0 R 17105 0 R 17106 0 R 17107 0 R 17108 0 R]
+/Limits [(class_auto_data_a2fbd8cc076fd2fb76293aa06acfaef96) (class_mem_range_aac0cf12aac4b47ad289ceb8c197df8c0)]
+>> endobj
+17733 0 obj <<
+/Kids [17109 0 R 17110 0 R 17111 0 R 17112 0 R 17113 0 R 17114 0 R]
+/Limits [(class_mem_range_af8af247cef1bb5db9be54e219234f1b9) (class_myo_wrapper_af6d7b62fe1399bed64dd1b2afea4d910)]
+>> endobj
+17734 0 obj <<
+/Kids [17115 0 R 17116 0 R 17117 0 R 17118 0 R 17119 0 R 17120 0 R]
+/Limits [(class_offload_descriptor) (class_offload_descriptor_a4e1fb5e3971c1f318654fc4825902733)]
+>> endobj
+17735 0 obj <<
+/Kids [17121 0 R 17122 0 R 17123 0 R 17124 0 R 17125 0 R 17126 0 R]
+/Limits [(class_offload_descriptor_a4eaa40d03128dd3b6d3c1cecd68d2811) (class_offload_descriptor_af027599ed02c5347a661bfcfd89a4cd1)]
+>> endobj
+17736 0 obj <<
+/Kids [17127 0 R 17128 0 R 17129 0 R 17130 0 R 17131 0 R 17132 0 R]
+/Limits [(class_offload_descriptor_af5b446764d8eb5cc3ca82adf0174f0c8) (class_var_list_1_1_iterator_ae0723084dcf3c3c28081f73f6098365c)]
+>> endobj
+17737 0 obj <<
+/Kids [17133 0 R 17134 0 R 17135 0 R 17136 0 R 17137 0 R 17138 0 R]
+/Limits [(class_var_list_a095f520160cf904b0e59172b886aa7d4) (compiler__if__host_8cpp_adf1a83efbf6473acc95a8788b885fe90)]
+>> endobj
+17738 0 obj <<
+/Kids [17139 0 R 17140 0 R 17141 0 R 17142 0 R 17143 0 R 17144 0 R]
+/Limits [(compiler__if__host_8h) (dv__util_8h_a287c35471baf30439aef0b5c3b6eb33c)]
+>> endobj
+17739 0 obj <<
+/Kids [17145 0 R 17146 0 R 17147 0 R 17148 0 R 17149 0 R 17150 0 R]
+/Limits [(dv__util_8h_a3523f24560128f27e31cf619d65a41c9) (interfacemic__lib_1_1kmp__set__defaults__target)]
+>> endobj
+17740 0 obj <<
+/Kids [17151 0 R 17152 0 R 17153 0 R 17154 0 R 17155 0 R 17156 0 R]
+/Limits [(interfacemic__lib_1_1kmp__set__defaults__target_a24783d30ed1260f536e15c306c87f647) (interfacemic__lib_1_1omp__get__num__procs__target)]
+>> endobj
+17741 0 obj <<
+/Kids [17157 0 R 17158 0 R 17159 0 R 17160 0 R 17161 0 R 17162 0 R]
+/Limits [(interfacemic__lib_1_1omp__get__num__procs__target_a13af4587be3afb6814c6e795a78625c1) (liboffload__error__codes_8h_a2de0af199d894e279eacd4d712208d60)]
+>> endobj
+17742 0 obj <<
+/Kids [17163 0 R 17164 0 R 17165 0 R 17166 0 R 17167 0 R 17168 0 R]
+/Limits [(liboffload__error__codes_8h_a38efbf7bcf409d60d511ac7fc9dd0096) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a135f997949ba2a630b0ca780eb1a2936)]
+>> endobj
+17743 0 obj <<
+/Kids [17169 0 R 17170 0 R 17171 0 R 17172 0 R 17173 0 R 17174 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1486a07ed02284be0e541340e91cc0a7) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a756bf85b5493c5388f4638534b2b9906)]
+>> endobj
+17744 0 obj <<
+/Kids [17175 0 R 17176 0 R 17177 0 R 17178 0 R 17179 0 R 17180 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a7d3290ed454af3eabd183bf623f62e51) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63aba67870a74a2f777750b46b5e8d14046)]
+>> endobj
+17745 0 obj <<
+/Kids [17181 0 R 17182 0 R 17183 0 R 17184 0 R 17185 0 R 17186 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63abcd840c4fb9b24b9f620a853337bb438) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af674c3cfb9c676829925ca0185370924)]
+>> endobj
+17746 0 obj <<
+/Kids [17187 0 R 17188 0 R 17189 0 R 17190 0 R 17191 0 R 17192 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63af770475a2e32ec91c759880c17030241) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba07b674473e78ccc545fa87ca1ff50e99)]
+>> endobj
+17747 0 obj <<
+/Kids [17193 0 R 17194 0 R 17195 0 R 17196 0 R 17197 0 R 17198 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba084763886d48747225944454265face6) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba3f6d06f3d5cd0d2d53503cc228f74083)]
+>> endobj
+17748 0 obj <<
+/Kids [17199 0 R 17200 0 R 17201 0 R 17202 0 R 17203 0 R 17204 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba402c22e7e9ba27c99d1ce220766f1e00) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba886f229aad81a550a014b087cc198c5b)]
+>> endobj
+17749 0 obj <<
+/Kids [17205 0 R 17206 0 R 17207 0 R 17208 0 R 17209 0 R 17210 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8ab2b6de12dd73fd9b572c83a6b192fa) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac25e1aa5859beaab7998e01e58738ff5)]
+>> endobj
+17750 0 obj <<
+/Kids [17211 0 R 17212 0 R 17213 0 R 17214 0 R 17215 0 R 17216 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bac2b746038a8ffe9b48482022122ca236) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55bafd8c504c772936c9b428429b6b716729)]
+>> endobj
+17751 0 obj <<
+/Kids [17217 0 R 17218 0 R 17219 0 R 17220 0 R 17221 0 R 17222 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55baff36e0a6b9bd9e90b8d203d2f7ba1228) (namespace_o_r_s_l_a3c4d412275f47cbd500c7f0d02f2ae0b)]
+>> endobj
+17752 0 obj <<
+/Kids [17223 0 R 17224 0 R 17225 0 R 17226 0 R 17227 0 R 17228 0 R]
+/Limits [(namespace_o_r_s_l_ab1d74c38c46775592b766bc06908581c) (offload_8h_a6b39cd17288ecfffa3ff0e67bc705d6e)]
+>> endobj
+17753 0 obj <<
+/Kids [17229 0 R 17230 0 R 17231 0 R 17232 0 R 17233 0 R 17234 0 R]
+/Limits [(offload_8h_a6b42c1a55fb6289f7089db558ecbfb86) (offload_8h_afd5977ae80eb184bc58a454fe680cde8)]
+>> endobj
+17754 0 obj <<
+/Kids [17235 0 R 17236 0 R 17237 0 R 17238 0 R 17239 0 R 17240 0 R]
+/Limits [(offload__common_8cpp) (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d)]
+>> endobj
+17755 0 obj <<
+/Kids [17241 0 R 17242 0 R 17243 0 R 17244 0 R 17245 0 R 17246 0 R]
+/Limits [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac2ec9c3ecdf7544a29fc3e7a43b0c7e2) (offload__env_8cpp)]
+>> endobj
+17756 0 obj <<
+/Kids [17247 0 R 17248 0 R 17249 0 R 17250 0 R 17251 0 R 17252 0 R]
+/Limits [(offload__env_8h) (offload__host_8cpp_a7141606b9f55a1dc8475003a8d87d1c0)]
+>> endobj
+17757 0 obj <<
+/Kids [17253 0 R 17254 0 R 17255 0 R 17256 0 R 17257 0 R 17258 0 R]
+/Limits [(offload__host_8cpp_a787e660b7b86240bf6cc0f440e942e33) (offload__host_8h_a17a0c5020309ddb1e31eacbbdb984022)]
+>> endobj
+17758 0 obj <<
+/Kids [17259 0 R 17260 0 R 17261 0 R 17262 0 R 17263 0 R 17264 0 R]
+/Limits [(offload__host_8h_a1be94b904c4dbcf6bd04e76988fe4458) (offload__myo__host_8cpp_a4e4afc20c795439903cb2e9cbb3d6990)]
+>> endobj
+17759 0 obj <<
+/Kids [17265 0 R 17266 0 R 17267 0 R 17268 0 R 17269 0 R 17270 0 R]
+/Limits [(offload__myo__host_8cpp_a4fd8acbb22be01616dba2938d7b0f21f) (offload__myo__target_8cpp_a368161defa1a99d14a7f66050ad27e38)]
+>> endobj
+17760 0 obj <<
+/Kids [17271 0 R 17272 0 R 17273 0 R 17274 0 R 17275 0 R 17276 0 R]
+/Limits [(offload__myo__target_8cpp_a3ecb77dcdbe8f782a647c39f99cf763c) (offload__omp__host_8cpp_a33d2b782ddf82056f797bd7abe579b9f)]
+>> endobj
+17761 0 obj <<
+/Kids [17277 0 R 17278 0 R 17279 0 R 17280 0 R 17281 0 R 17282 0 R]
+/Limits [(offload__omp__host_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) (offload__omp__target_8cpp_a05f1d26e9c8fe5f77dae36619f088253)]
+>> endobj
+17762 0 obj <<
+/Kids [17283 0 R 17284 0 R 17285 0 R 17286 0 R 17287 0 R 17288 0 R]
+/Limits [(offload__omp__target_8cpp_a0b7c436586f0f30202151561a629db68) (offload__omp__target_8cpp_a6fad2362034e1526898da798a2c522df)]
+>> endobj
+17763 0 obj <<
+/Kids [17289 0 R 17290 0 R 17291 0 R 17292 0 R 17293 0 R 17294 0 R]
+/Limits [(offload__omp__target_8cpp_a729e21d960b0223e169e05a8acf8d4ba) (offload__omp__target_8cpp_ae77ef84108e70c3ab0503cc38cbc35a2)]
+>> endobj
+17764 0 obj <<
+/Kids [17295 0 R 17296 0 R 17297 0 R 17298 0 R 17299 0 R 17300 0 R]
+/Limits [(offload__omp__target_8cpp_ae95bae0d4deb69450306f4d64d5448d8) (offload__table_8cpp_a83d593765d60972ac1212ef722dcdcdf)]
+>> endobj
+17765 0 obj <<
+/Kids [17301 0 R 17302 0 R 17303 0 R 17304 0 R 17305 0 R 17306 0 R]
+/Limits [(offload__table_8cpp_a8b839dfd2155ac82b18f6043081338c5) (offload__target_8cpp_a0a4faf65a8c5cb8efd0adb63e8b688be)]
+>> endobj
+17766 0 obj <<
+/Kids [17307 0 R 17308 0 R 17309 0 R 17310 0 R 17311 0 R 17312 0 R]
+/Limits [(offload__target_8cpp_a0e737ee03c3a99dbf543f26376169102) (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c)]
+>> endobj
+17767 0 obj <<
+/Kids [17313 0 R 17314 0 R 17315 0 R 17316 0 R 17317 0 R 17318 0 R]
+/Limits [(offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) (offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beac6948eaadde5f488ec54c344570d58d1)]
+>> endobj
+17768 0 obj <<
+/Kids [17319 0 R 17320 0 R 17321 0 R 17322 0 R 17323 0 R 17324 0 R]
+/Limits [(offload__trace_8h_a010fbc0b20d17fcf5967beb343e594beadcff5c74a894ed7464d920097a41a946) (ofldbegin_8cpp_a9ad116b903bcbdca09a5b76287c451be)]
+>> endobj
+17769 0 obj <<
+/Kids [17325 0 R 17326 0 R 17327 0 R 17328 0 R 17329 0 R 17330 0 R]
+/Limits [(ofldbegin_8cpp_aa2a2e1ead2aa9dc079ca07e669c79fd8) (orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25ba68746913025b9e60e6da2b7a797d88da)]
+>> endobj
+17770 0 obj <<
+/Kids [17331 0 R 17332 0 R 17333 0 R 17334 0 R 17335 0 R 17336 0 R]
+/Limits [(orsl-lite_8h_a20c8b24dc38a9e6369d4a4d53415e25baf415ad310f8809996b11aebd07bb2f7e) (page.119)]
+>> endobj
+17771 0 obj <<
+/Kids [17337 0 R 17338 0 R 17339 0 R 17340 0 R 17341 0 R 17342 0 R]
+/Limits [(page.12) (page.151)]
+>> endobj
+17772 0 obj <<
+/Kids [17343 0 R 17344 0 R 17345 0 R 17346 0 R 17347 0 R 17348 0 R]
+/Limits [(page.152) (page.184)]
+>> endobj
+17773 0 obj <<
+/Kids [17349 0 R 17350 0 R 17351 0 R 17352 0 R 17353 0 R 17354 0 R]
+/Limits [(page.185) (page.216)]
+>> endobj
+17774 0 obj <<
+/Kids [17355 0 R 17356 0 R 17357 0 R 17358 0 R 17359 0 R 17360 0 R]
+/Limits [(page.217) (page.37)]
+>> endobj
+17775 0 obj <<
+/Kids [17361 0 R 17362 0 R 17363 0 R 17364 0 R 17365 0 R 17366 0 R]
+/Limits [(page.38) (page.7)]
+>> endobj
+17776 0 obj <<
+/Kids [17367 0 R 17368 0 R 17369 0 R 17370 0 R 17371 0 R 17372 0 R]
+/Limits [(page.70) (section*.1001)]
+>> endobj
+17777 0 obj <<
+/Kids [17373 0 R 17374 0 R 17375 0 R 17376 0 R 17377 0 R 17378 0 R]
+/Limits [(section*.1002) (section*.1034)]
+>> endobj
+17778 0 obj <<
+/Kids [17379 0 R 17380 0 R 17381 0 R 17382 0 R 17383 0 R 17384 0 R]
+/Limits [(section*.1035) (section*.1067)]
+>> endobj
+17779 0 obj <<
+/Kids [17385 0 R 17386 0 R 17387 0 R 17388 0 R 17389 0 R 17390 0 R]
+/Limits [(section*.1068) (section*.11)]
+>> endobj
+17780 0 obj <<
+/Kids [17391 0 R 17392 0 R 17393 0 R 17394 0 R 17395 0 R 17396 0 R]
+/Limits [(section*.110) (section*.1131)]
+>> endobj
+17781 0 obj <<
+/Kids [17397 0 R 17398 0 R 17399 0 R 17400 0 R 17401 0 R 17402 0 R]
+/Limits [(section*.1132) (section*.1164)]
+>> endobj
+17782 0 obj <<
+/Kids [17403 0 R 17404 0 R 17405 0 R 17406 0 R 17407 0 R 17408 0 R]
+/Limits [(section*.1165) (section*.1197)]
+>> endobj
+17783 0 obj <<
+/Kids [17409 0 R 17410 0 R 17411 0 R 17412 0 R 17413 0 R 17414 0 R]
+/Limits [(section*.1198) (section*.1229)]
+>> endobj
+17784 0 obj <<
+/Kids [17415 0 R 17416 0 R 17417 0 R 17418 0 R 17419 0 R 17420 0 R]
+/Limits [(section*.123) (section*.1261)]
+>> endobj
+17785 0 obj <<
+/Kids [17421 0 R 17422 0 R 17423 0 R 17424 0 R 17425 0 R 17426 0 R]
+/Limits [(section*.1262) (section*.1294)]
+>> endobj
+17786 0 obj <<
+/Kids [17427 0 R 17428 0 R 17429 0 R 17430 0 R 17431 0 R 17432 0 R]
+/Limits [(section*.1295) (section*.1326)]
+>> endobj
+17787 0 obj <<
+/Kids [17433 0 R 17434 0 R 17435 0 R 17436 0 R 17437 0 R 17438 0 R]
+/Limits [(section*.1327) (section*.1359)]
+>> endobj
+17788 0 obj <<
+/Kids [17439 0 R 17440 0 R 17441 0 R 17442 0 R 17443 0 R 17444 0 R]
+/Limits [(section*.136) (section*.1391)]
+>> endobj
+17789 0 obj <<
+/Kids [17445 0 R 17446 0 R 17447 0 R 17448 0 R 17449 0 R 17450 0 R]
+/Limits [(section*.1392) (section*.160)]
+>> endobj
+17790 0 obj <<
+/Kids [17451 0 R 17452 0 R 17453 0 R 17454 0 R 17455 0 R 17456 0 R]
+/Limits [(section*.161) (section*.193)]
+>> endobj
+17791 0 obj <<
+/Kids [17457 0 R 17458 0 R 17459 0 R 17460 0 R 17461 0 R 17462 0 R]
+/Limits [(section*.194) (section*.225)]
+>> endobj
+17792 0 obj <<
+/Kids [17463 0 R 17464 0 R 17465 0 R 17466 0 R 17467 0 R 17468 0 R]
+/Limits [(section*.226) (section*.258)]
+>> endobj
+17793 0 obj <<
+/Kids [17469 0 R 17470 0 R 17471 0 R 17472 0 R 17473 0 R 17474 0 R]
+/Limits [(section*.259) (section*.290)]
+>> endobj
+17794 0 obj <<
+/Kids [17475 0 R 17476 0 R 17477 0 R 17478 0 R 17479 0 R 17480 0 R]
+/Limits [(section*.291) (section*.322)]
+>> endobj
+17795 0 obj <<
+/Kids [17481 0 R 17482 0 R 17483 0 R 17484 0 R 17485 0 R 17486 0 R]
+/Limits [(section*.323) (section*.355)]
+>> endobj
+17796 0 obj <<
+/Kids [17487 0 R 17488 0 R 17489 0 R 17490 0 R 17491 0 R 17492 0 R]
+/Limits [(section*.356) (section*.388)]
+>> endobj
+17797 0 obj <<
+/Kids [17493 0 R 17494 0 R 17495 0 R 17496 0 R 17497 0 R 17498 0 R]
+/Limits [(section*.389) (section*.42)]
+>> endobj
+17798 0 obj <<
+/Kids [17499 0 R 17500 0 R 17501 0 R 17502 0 R 17503 0 R 17504 0 R]
+/Limits [(section*.420) (section*.452)]
+>> endobj
+17799 0 obj <<
+/Kids [17505 0 R 17506 0 R 17507 0 R 17508 0 R 17509 0 R 17510 0 R]
+/Limits [(section*.453) (section*.485)]
+>> endobj
+17800 0 obj <<
+/Kids [17511 0 R 17512 0 R 17513 0 R 17514 0 R 17515 0 R 17516 0 R]
+/Limits [(section*.486) (section*.517)]
+>> endobj
+17801 0 obj <<
+/Kids [17517 0 R 17518 0 R 17519 0 R 17520 0 R 17521 0 R 17522 0 R]
+/Limits [(section*.518) (section*.55)]
+>> endobj
+17802 0 obj <<
+/Kids [17523 0 R 17524 0 R 17525 0 R 17526 0 R 17527 0 R 17528 0 R]
+/Limits [(section*.550) (section*.582)]
+>> endobj
+17803 0 obj <<
+/Kids [17529 0 R 17530 0 R 17531 0 R 17532 0 R 17533 0 R 17534 0 R]
+/Limits [(section*.583) (section*.614)]
+>> endobj
+17804 0 obj <<
+/Kids [17535 0 R 17536 0 R 17537 0 R 17538 0 R 17539 0 R 17540 0 R]
+/Limits [(section*.615) (section*.647)]
+>> endobj
+17805 0 obj <<
+/Kids [17541 0 R 17542 0 R 17543 0 R 17544 0 R 17545 0 R 17546 0 R]
+/Limits [(section*.648) (section*.68)]
+>> endobj
+17806 0 obj <<
+/Kids [17547 0 R 17548 0 R 17549 0 R 17550 0 R 17551 0 R 17552 0 R]
+/Limits [(section*.680) (section*.711)]
+>> endobj
+17807 0 obj <<
+/Kids [17553 0 R 17554 0 R 17555 0 R 17556 0 R 17557 0 R 17558 0 R]
+/Limits [(section*.712) (section*.744)]
+>> endobj
+17808 0 obj <<
+/Kids [17559 0 R 17560 0 R 17561 0 R 17562 0 R 17563 0 R 17564 0 R]
+/Limits [(section*.745) (section*.777)]
+>> endobj
+17809 0 obj <<
+/Kids [17565 0 R 17566 0 R 17567 0 R 17568 0 R 17569 0 R 17570 0 R]
+/Limits [(section*.778) (section*.809)]
+>> endobj
+17810 0 obj <<
+/Kids [17571 0 R 17572 0 R 17573 0 R 17574 0 R 17575 0 R 17576 0 R]
+/Limits [(section*.81) (section*.841)]
+>> endobj
+17811 0 obj <<
+/Kids [17577 0 R 17578 0 R 17579 0 R 17580 0 R 17581 0 R 17582 0 R]
+/Limits [(section*.842) (section*.874)]
+>> endobj
+17812 0 obj <<
+/Kids [17583 0 R 17584 0 R 17585 0 R 17586 0 R 17587 0 R 17588 0 R]
+/Limits [(section*.875) (section*.906)]
+>> endobj
+17813 0 obj <<
+/Kids [17589 0 R 17590 0 R 17591 0 R 17592 0 R 17593 0 R 17594 0 R]
+/Limits [(section*.907) (section*.939)]
+>> endobj
+17814 0 obj <<
+/Kids [17595 0 R 17596 0 R 17597 0 R 17598 0 R 17599 0 R 17600 0 R]
+/Limits [(section*.94) (section*.971)]
+>> endobj
+17815 0 obj <<
+/Kids [17601 0 R 17602 0 R 17603 0 R 17604 0 R 17605 0 R 17606 0 R]
+/Limits [(section*.972) (section.5.2)]
+>> endobj
+17816 0 obj <<
+/Kids [17607 0 R 17608 0 R 17609 0 R 17610 0 R 17611 0 R 17612 0 R]
+/Limits [(section.6.1) (section.6.41)]
+>> endobj
+17817 0 obj <<
+/Kids [17613 0 R 17614 0 R 17615 0 R 17616 0 R 17617 0 R 17618 0 R]
+/Limits [(section.6.42) (section.6.74)]
+>> endobj
+17818 0 obj <<
+/Kids [17619 0 R 17620 0 R 17621 0 R 17622 0 R 17623 0 R 17624 0 R]
+/Limits [(section.6.75) (section.7.22)]
+>> endobj
+17819 0 obj <<
+/Kids [17625 0 R 17626 0 R 17627 0 R 17628 0 R 17629 0 R 17630 0 R]
+/Limits [(section.7.23) (struct___offload__status)]
+>> endobj
+17820 0 obj <<
+/Kids [17631 0 R 17632 0 R 17633 0 R 17634 0 R 17635 0 R 17636 0 R]
+/Limits [(struct___offload__status_a6895677ad0c9a59d9b7af23ec2ed1bf7) (struct_engine_a37ab38ed6ec0a0decc68a1d2b3f2b6ef)]
+>> endobj
+17821 0 obj <<
+/Kids [17637 0 R 17638 0 R 17639 0 R 17640 0 R 17641 0 R 17642 0 R]
+/Limits [(struct_engine_a3b9c91de1729c1178fa82972959b1ec0) (struct_engine_ac6329a8b34eb717cdc8337a6507488ff)]
+>> endobj
+17822 0 obj <<
+/Kids [17643 0 R 17644 0 R 17645 0 R 17646 0 R 17647 0 R 17648 0 R]
+/Limits [(struct_engine_ac78c8230f67026cc13957481b19149d9) (struct_mic_env_var_1_1_card_env_vars_a4c9aeaabb6de128c5b37e2b9fb95bfb2)]
+>> endobj
+17823 0 obj <<
+/Kids [17649 0 R 17650 0 R 17651 0 R 17652 0 R 17653 0 R 17654 0 R]
+/Limits [(struct_mic_env_var_1_1_card_env_vars_a4ebc7d31a61dcd5d586b60d324dfa7f3) (struct_offload_descriptor_1_1_var_extra_a7c4e4acbdadb46df9a25b99fb702bc70)]
+>> endobj
+17824 0 obj <<
+/Kids [17655 0 R 17656 0 R 17657 0 R 17658 0 R 17659 0 R 17660 0 R]
+/Limits [(struct_offload_descriptor_1_1_var_extra_a7e8688bcc3ea8926360c06d68348a260) (struct_var_desc2)]
+>> endobj
+17825 0 obj <<
+/Kids [17661 0 R 17662 0 R 17663 0 R 17664 0 R 17665 0 R 17666 0 R]
+/Limits [(struct_var_desc2_a51798d059e85342f93f8d912a08907a0) (struct_var_desc_ab9089fa1fcba7d661eebb58541adb556)]
+>> endobj
+17826 0 obj <<
+/Kids [17667 0 R 17668 0 R 17669 0 R 17670 0 R 17671 0 R 17672 0 R]
+/Limits [(struct_var_desc_abec1df4179cec53b5b06ccbe0cfb2b0d) (structmutex__locker__t_a75acaa8451bb8478ef262e2b9c585e5f)]
+>> endobj
+17827 0 obj <<
+/Kids [17673 0 R 17674 0 R 17675 0 R 17676 0 R 17677 0 R 17678 0 R]
+/Limits [(structmutex__locker__t_a761499be260604b435b749473bb0699e) (subsection.6.15.3)]
+>> endobj
+17828 0 obj <<
+/Kids [17679 0 R 17680 0 R 17681 0 R 17682 0 R 17683 0 R 17684 0 R]
+/Limits [(subsection.6.15.4) (subsection.6.30.1)]
+>> endobj
+17829 0 obj <<
+/Kids [17685 0 R 17686 0 R 17687 0 R 17688 0 R 17689 0 R 17690 0 R]
+/Limits [(subsection.6.30.2) (subsection.6.44.1)]
+>> endobj
+17830 0 obj <<
+/Kids [17691 0 R 17692 0 R 17693 0 R 17694 0 R 17695 0 R 17696 0 R]
+/Limits [(subsection.6.44.2) (subsection.6.57.1)]
+>> endobj
+17831 0 obj <<
+/Kids [17697 0 R 17698 0 R 17699 0 R 17700 0 R 17701 0 R 17702 0 R]
+/Limits [(subsection.6.57.2) (subsection.6.70.2)]
+>> endobj
+17832 0 obj <<
+/Kids [17703 0 R 17704 0 R 17705 0 R 17706 0 R 17707 0 R 17708 0 R]
+/Limits [(subsection.6.71.1) (subsection.6.84.2)]
+>> endobj
+17833 0 obj <<
+/Kids [17709 0 R 17710 0 R 17711 0 R 17712 0 R 17713 0 R 17714 0 R]
+/Limits [(subsection.6.84.3) (subsection.7.12.1)]
+>> endobj
+17834 0 obj <<
+/Kids [17715 0 R 17716 0 R 17717 0 R 17718 0 R 17719 0 R 17720 0 R]
+/Limits [(subsection.7.12.2) (subsection.7.26.4)]
+>> endobj
+17835 0 obj <<
+/Kids [17721 0 R 17722 0 R 17723 0 R 17724 0 R 17725 0 R 17726 0 R]
+/Limits [(subsection.7.26.5) (subsection.7.44.2)]
+>> endobj
+17836 0 obj <<
+/Kids [17727 0 R 17728 0 R 17729 0 R 17730 0 R]
+/Limits [(subsection.7.45.1) (subsection.7.9.1)]
+>> endobj
+17837 0 obj <<
+/Kids [17731 0 R 17732 0 R 17733 0 R 17734 0 R 17735 0 R 17736 0 R]
+/Limits [(Doc-Start) (class_var_list_1_1_iterator_ae0723084dcf3c3c28081f73f6098365c)]
+>> endobj
+17838 0 obj <<
+/Kids [17737 0 R 17738 0 R 17739 0 R 17740 0 R 17741 0 R 17742 0 R]
+/Limits [(class_var_list_a095f520160cf904b0e59172b886aa7d4) (liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a135f997949ba2a630b0ca780eb1a2936)]
+>> endobj
+17839 0 obj <<
+/Kids [17743 0 R 17744 0 R 17745 0 R 17746 0 R 17747 0 R 17748 0 R]
+/Limits [(liboffload__error__codes_8h_a88c6097d7b98bff54ec5c383c269af63a1486a07ed02284be0e541340e91cc0a7) (liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba886f229aad81a550a014b087cc198c5b)]
+>> endobj
+17840 0 obj <<
+/Kids [17749 0 R 17750 0 R 17751 0 R 17752 0 R 17753 0 R 17754 0 R]
+/Limits [(liboffload__msg_8h_a06fc87d81c62e9abb8790b6e5713c55ba8ab2b6de12dd73fd9b572c83a6b192fa) (offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac03184ea4cfb6d5b251cf73838e5927d)]
+>> endobj
+17841 0 obj <<
+/Kids [17755 0 R 17756 0 R 17757 0 R 17758 0 R 17759 0 R 17760 0 R]
+/Limits [(offload__common_8h_a9c742ae3730e4a0217f3d33758d316d7ac2ec9c3ecdf7544a29fc3e7a43b0c7e2) (offload__omp__host_8cpp_a33d2b782ddf82056f797bd7abe579b9f)]
+>> endobj
+17842 0 obj <<
+/Kids [17761 0 R 17762 0 R 17763 0 R 17764 0 R 17765 0 R 17766 0 R]
+/Limits [(offload__omp__host_8cpp_a354af3ae9805fc9d87c0690345e8ee3b) (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c)]
+>> endobj
+17843 0 obj <<
+/Kids [17767 0 R 17768 0 R 17769 0 R 17770 0 R 17771 0 R 17772 0 R]
+/Limits [(offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) (page.184)]
+>> endobj
+17844 0 obj <<
+/Kids [17773 0 R 17774 0 R 17775 0 R 17776 0 R 17777 0 R 17778 0 R]
+/Limits [(page.185) (section*.1067)]
+>> endobj
+17845 0 obj <<
+/Kids [17779 0 R 17780 0 R 17781 0 R 17782 0 R 17783 0 R 17784 0 R]
+/Limits [(section*.1068) (section*.1261)]
+>> endobj
+17846 0 obj <<
+/Kids [17785 0 R 17786 0 R 17787 0 R 17788 0 R 17789 0 R 17790 0 R]
+/Limits [(section*.1262) (section*.193)]
+>> endobj
+17847 0 obj <<
+/Kids [17791 0 R 17792 0 R 17793 0 R 17794 0 R 17795 0 R 17796 0 R]
+/Limits [(section*.194) (section*.388)]
+>> endobj
+17848 0 obj <<
+/Kids [17797 0 R 17798 0 R 17799 0 R 17800 0 R 17801 0 R 17802 0 R]
+/Limits [(section*.389) (section*.582)]
+>> endobj
+17849 0 obj <<
+/Kids [17803 0 R 17804 0 R 17805 0 R 17806 0 R 17807 0 R 17808 0 R]
+/Limits [(section*.583) (section*.777)]
+>> endobj
+17850 0 obj <<
+/Kids [17809 0 R 17810 0 R 17811 0 R 17812 0 R 17813 0 R 17814 0 R]
+/Limits [(section*.778) (section*.971)]
+>> endobj
+17851 0 obj <<
+/Kids [17815 0 R 17816 0 R 17817 0 R 17818 0 R 17819 0 R 17820 0 R]
+/Limits [(section*.972) (struct_engine_a37ab38ed6ec0a0decc68a1d2b3f2b6ef)]
+>> endobj
+17852 0 obj <<
+/Kids [17821 0 R 17822 0 R 17823 0 R 17824 0 R 17825 0 R 17826 0 R]
+/Limits [(struct_engine_a3b9c91de1729c1178fa82972959b1ec0) (structmutex__locker__t_a75acaa8451bb8478ef262e2b9c585e5f)]
+>> endobj
+17853 0 obj <<
+/Kids [17827 0 R 17828 0 R 17829 0 R 17830 0 R 17831 0 R 17832 0 R]
+/Limits [(structmutex__locker__t_a761499be260604b435b749473bb0699e) (subsection.6.84.2)]
+>> endobj
+17854 0 obj <<
+/Kids [17833 0 R 17834 0 R 17835 0 R 17836 0 R]
+/Limits [(subsection.6.84.3) (subsection.7.9.1)]
+>> endobj
+17855 0 obj <<
+/Kids [17837 0 R 17838 0 R 17839 0 R 17840 0 R 17841 0 R 17842 0 R]
+/Limits [(Doc-Start) (offload__trace_8cpp_a2e4368032c4d844d790f4c7c90dd5f4c)]
+>> endobj
+17856 0 obj <<
+/Kids [17843 0 R 17844 0 R 17845 0 R 17846 0 R 17847 0 R 17848 0 R]
+/Limits [(offload__trace_8cpp_a5b41c5ae4505891e6c53e26df197e02b) (section*.582)]
+>> endobj
+17857 0 obj <<
+/Kids [17849 0 R 17850 0 R 17851 0 R 17852 0 R 17853 0 R 17854 0 R]
+/Limits [(section*.583) (subsection.7.9.1)]
+>> endobj
+17858 0 obj <<
+/Kids [17855 0 R 17856 0 R 17857 0 R]
+/Limits [(Doc-Start) (subsection.7.9.1)]
+>> endobj
+17859 0 obj <<
+/Dests 17858 0 R
+>> endobj
+17860 0 obj <<
+/Type /Catalog
+/Pages 17095 0 R
+/Outlines 17096 0 R
+/Names 17859 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 1 << /S /r >> 31 << /S /D >> ] >>
+/OpenAction 6497 0 R
+>> endobj
+17861 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20140408115510+04'00')
+/ModDate (D:20140408115510+04'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 17862
+0000000001 65535 f
+0000000002 00000 f
+0000000003 00000 f
+0000000004 00000 f
+0000000000 00000 f
+0000000015 00000 n
+0000665702 00000 n
+0003013846 00000 n
+0000000060 00000 n
+0000000164 00000 n
+0000665762 00000 n
+0003013787 00000 n
+0000000211 00000 n
+0000000311 00000 n
+0000675504 00000 n
+0003013661 00000 n
+0000000357 00000 n
+0000000477 00000 n
+0000675565 00000 n
+0003013600 00000 n
+0000000525 00000 n
+0000000630 00000 n
+0000703809 00000 n
+0003013473 00000 n
+0000000676 00000 n
+0000000761 00000 n
+0000703870 00000 n
+0003013412 00000 n
+0000000809 00000 n
+0000000889 00000 n
+0000741086 00000 n
+0003013285 00000 n
+0000000935 00000 n
+0000001015 00000 n
+0000741147 00000 n
+0003013224 00000 n
+0000001063 00000 n
+0000001138 00000 n
+0000755165 00000 n
+0003013095 00000 n
+0000001184 00000 n
+0000001329 00000 n
+0000755288 00000 n
+0003012983 00000 n
+0000001377 00000 n
+0000001525 00000 n
+0000759379 00000 n
+0003012872 00000 n
+0000001578 00000 n
+0000001718 00000 n
+0000759503 00000 n
+0003012798 00000 n
+0000001765 00000 n
+0000001812 00000 n
+0000759627 00000 n
+0003012724 00000 n
+0000001859 00000 n
+0000001906 00000 n
+0000759688 00000 n
+0003012611 00000 n
+0000001959 00000 n
+0000002099 00000 n
+0000759812 00000 n
+0003012537 00000 n
+0000002146 00000 n
+0000002223 00000 n
+0000759936 00000 n
+0003012450 00000 n
+0000002270 00000 n
+0000002357 00000 n
+0000760060 00000 n
+0003012363 00000 n
+0000002404 00000 n
+0000002541 00000 n
+0000760184 00000 n
+0003012276 00000 n
+0000002588 00000 n
+0000002680 00000 n
+0000760308 00000 n
+0003012189 00000 n
+0000002728 00000 n
+0000002855 00000 n
+0000760432 00000 n
+0003012102 00000 n
+0000002903 00000 n
+0000002975 00000 n
+0000763850 00000 n
+0003012015 00000 n
+0000003023 00000 n
+0000003100 00000 n
+0000763974 00000 n
+0003011928 00000 n
+0000003148 00000 n
+0000003245 00000 n
+0000764098 00000 n
+0003011841 00000 n
+0000003293 00000 n
+0000003375 00000 n
+0000764222 00000 n
+0003011752 00000 n
+0000003423 00000 n
+0000003506 00000 n
+0000764346 00000 n
+0003011661 00000 n
+0000003555 00000 n
+0000003653 00000 n
+0000764471 00000 n
+0003011569 00000 n
+0000003702 00000 n
+0000003805 00000 n
+0000764596 00000 n
+0003011477 00000 n
+0000003854 00000 n
+0000003927 00000 n
+0000764721 00000 n
+0003011385 00000 n
+0000003976 00000 n
+0000004067 00000 n
+0000764845 00000 n
+0003011293 00000 n
+0000004116 00000 n
+0000004197 00000 n
+0000764970 00000 n
+0003011201 00000 n
+0000004246 00000 n
+0000004379 00000 n
+0000769341 00000 n
+0003011109 00000 n
+0000004428 00000 n
+0000004526 00000 n
+0000769466 00000 n
+0003011017 00000 n
+0000004575 00000 n
+0000004678 00000 n
+0000769591 00000 n
+0003010925 00000 n
+0000004727 00000 n
+0000004850 00000 n
+0000769716 00000 n
+0003010833 00000 n
+0000004899 00000 n
+0000005042 00000 n
+0000769840 00000 n
+0003010741 00000 n
+0000005091 00000 n
+0000005189 00000 n
+0000769965 00000 n
+0003010649 00000 n
+0000005238 00000 n
+0000005391 00000 n
+0000770090 00000 n
+0003010557 00000 n
+0000005440 00000 n
+0000005608 00000 n
+0000770214 00000 n
+0003010479 00000 n
+0000005657 00000 n
+0000005805 00000 n
+0000770339 00000 n
+0003010363 00000 n
+0000005854 00000 n
+0000006008 00000 n
+0000772425 00000 n
+0003010245 00000 n
+0000006062 00000 n
+0000006203 00000 n
+0000772550 00000 n
+0003010166 00000 n
+0000006252 00000 n
+0000006300 00000 n
+0000772674 00000 n
+0003010073 00000 n
+0000006349 00000 n
+0000006412 00000 n
+0000772798 00000 n
+0003009980 00000 n
+0000006461 00000 n
+0000006524 00000 n
+0000772923 00000 n
+0003009901 00000 n
+0000006573 00000 n
+0000006659 00000 n
+0000772984 00000 n
+0003009783 00000 n
+0000006713 00000 n
+0000006854 00000 n
+0000773109 00000 n
+0003009704 00000 n
+0000006903 00000 n
+0000006984 00000 n
+0000773233 00000 n
+0003009625 00000 n
+0000007033 00000 n
+0000007094 00000 n
+0000777524 00000 n
+0003009489 00000 n
+0000007141 00000 n
+0000007267 00000 n
+0000777649 00000 n
+0003009371 00000 n
+0000007316 00000 n
+0000007516 00000 n
+0000777774 00000 n
+0003009292 00000 n
+0000007570 00000 n
+0000007701 00000 n
+0000777836 00000 n
+0003009174 00000 n
+0000007755 00000 n
+0000007914 00000 n
+0000777961 00000 n
+0003009095 00000 n
+0000007963 00000 n
+0000008059 00000 n
+0000778086 00000 n
+0003009002 00000 n
+0000008108 00000 n
+0000008184 00000 n
+0000778211 00000 n
+0003008909 00000 n
+0000008233 00000 n
+0000008329 00000 n
+0000778336 00000 n
+0003008830 00000 n
+0000008378 00000 n
+0000008436 00000 n
+0000785346 00000 n
+0003008698 00000 n
+0000008485 00000 n
+0000008647 00000 n
+0000785470 00000 n
+0003008619 00000 n
+0000008701 00000 n
+0000008832 00000 n
+0000785532 00000 n
+0003008501 00000 n
+0000008886 00000 n
+0000009045 00000 n
+0000785657 00000 n
+0003008422 00000 n
+0000009094 00000 n
+0000009142 00000 n
+0000785781 00000 n
+0003008329 00000 n
+0000009191 00000 n
+0000009234 00000 n
+0000785904 00000 n
+0003008250 00000 n
+0000009283 00000 n
+0000009331 00000 n
+0000786029 00000 n
+0003008118 00000 n
+0000009380 00000 n
+0000009534 00000 n
+0000786154 00000 n
+0003008039 00000 n
+0000009588 00000 n
+0000009719 00000 n
+0000790781 00000 n
+0003007921 00000 n
+0000009773 00000 n
+0000009932 00000 n
+0000790906 00000 n
+0003007842 00000 n
+0000009981 00000 n
+0000010029 00000 n
+0000791031 00000 n
+0003007749 00000 n
+0000010078 00000 n
+0000010121 00000 n
+0000791156 00000 n
+0003007656 00000 n
+0000010170 00000 n
+0000010223 00000 n
+0000791281 00000 n
+0003007563 00000 n
+0000010272 00000 n
+0000010315 00000 n
+0000791406 00000 n
+0003007470 00000 n
+0000010364 00000 n
+0000010422 00000 n
+0000791531 00000 n
+0003007377 00000 n
+0000010471 00000 n
+0000010519 00000 n
+0000791656 00000 n
+0003007298 00000 n
+0000010568 00000 n
+0000010636 00000 n
+0000791781 00000 n
+0003007166 00000 n
+0000010685 00000 n
+0000010839 00000 n
+0000794869 00000 n
+0003007087 00000 n
+0000010893 00000 n
+0000011024 00000 n
+0000794931 00000 n
+0003006955 00000 n
+0000011078 00000 n
+0000011308 00000 n
+0000795056 00000 n
+0003006890 00000 n
+0000011357 00000 n
+0000011425 00000 n
+0000795118 00000 n
+0003006758 00000 n
+0000011479 00000 n
+0000011658 00000 n
+0000795243 00000 n
+0003006679 00000 n
+0000011707 00000 n
+0000011803 00000 n
+0000795368 00000 n
+0003006586 00000 n
+0000011852 00000 n
+0000011948 00000 n
+0000795493 00000 n
+0003006493 00000 n
+0000011997 00000 n
+0000012070 00000 n
+0000795618 00000 n
+0003006414 00000 n
+0000012119 00000 n
+0000012230 00000 n
+0000795680 00000 n
+0003006296 00000 n
+0000012284 00000 n
+0000012443 00000 n
+0000795805 00000 n
+0003006217 00000 n
+0000012492 00000 n
+0000012563 00000 n
+0000795930 00000 n
+0003006138 00000 n
+0000012612 00000 n
+0000012688 00000 n
+0000796055 00000 n
+0003006006 00000 n
+0000012737 00000 n
+0000012941 00000 n
+0000796179 00000 n
+0003005927 00000 n
+0000012995 00000 n
+0000013126 00000 n
+0000801307 00000 n
+0003005809 00000 n
+0000013180 00000 n
+0000013339 00000 n
+0000801432 00000 n
+0003005730 00000 n
+0000013388 00000 n
+0000013436 00000 n
+0000801556 00000 n
+0003005651 00000 n
+0000013485 00000 n
+0000013533 00000 n
+0000801680 00000 n
+0003005519 00000 n
+0000013582 00000 n
+0000013811 00000 n
+0000801868 00000 n
+0003005440 00000 n
+0000013865 00000 n
+0000013996 00000 n
+0000801930 00000 n
+0003005308 00000 n
+0000014050 00000 n
+0000014280 00000 n
+0000802055 00000 n
+0003005229 00000 n
+0000014329 00000 n
+0000014412 00000 n
+0000802179 00000 n
+0003005136 00000 n
+0000014461 00000 n
+0000014544 00000 n
+0000802302 00000 n
+0003005057 00000 n
+0000014593 00000 n
+0000014676 00000 n
+0000802364 00000 n
+0003004925 00000 n
+0000014730 00000 n
+0000014909 00000 n
+0000802489 00000 n
+0003004846 00000 n
+0000014958 00000 n
+0000015070 00000 n
+0000802614 00000 n
+0003004767 00000 n
+0000015119 00000 n
+0000015190 00000 n
+0000807718 00000 n
+0003004649 00000 n
+0000015244 00000 n
+0000015403 00000 n
+0000807843 00000 n
+0003004570 00000 n
+0000015452 00000 n
+0000015538 00000 n
+0000807968 00000 n
+0003004491 00000 n
+0000015587 00000 n
+0000015658 00000 n
+0000808093 00000 n
+0003004359 00000 n
+0000015707 00000 n
+0000015881 00000 n
+0000808218 00000 n
+0003004280 00000 n
+0000015935 00000 n
+0000016066 00000 n
+0000808280 00000 n
+0003004162 00000 n
+0000016120 00000 n
+0000016279 00000 n
+0000808405 00000 n
+0003004083 00000 n
+0000016328 00000 n
+0000016381 00000 n
+0000808530 00000 n
+0003004004 00000 n
+0000016430 00000 n
+0000016478 00000 n
+0000808655 00000 n
+0003003872 00000 n
+0000016527 00000 n
+0000016716 00000 n
+0000812761 00000 n
+0003003793 00000 n
+0000016770 00000 n
+0000016901 00000 n
+0000812823 00000 n
+0003003675 00000 n
+0000016955 00000 n
+0000017114 00000 n
+0000812948 00000 n
+0003003596 00000 n
+0000017163 00000 n
+0000017264 00000 n
+0000813073 00000 n
+0003003503 00000 n
+0000017313 00000 n
+0000017356 00000 n
+0000813198 00000 n
+0003003410 00000 n
+0000017405 00000 n
+0000017491 00000 n
+0000813322 00000 n
+0003003317 00000 n
+0000017540 00000 n
+0000017654 00000 n
+0000813447 00000 n
+0003003224 00000 n
+0000017703 00000 n
+0000017746 00000 n
+0000813572 00000 n
+0003003131 00000 n
+0000017795 00000 n
+0000017909 00000 n
+0000813697 00000 n
+0003003052 00000 n
+0000017958 00000 n
+0000018039 00000 n
+0000813822 00000 n
+0003002920 00000 n
+0000018088 00000 n
+0000018250 00000 n
+0000818740 00000 n
+0003002841 00000 n
+0000018304 00000 n
+0000018435 00000 n
+0000818802 00000 n
+0003002723 00000 n
+0000018489 00000 n
+0000018648 00000 n
+0000818926 00000 n
+0003002644 00000 n
+0000018697 00000 n
+0000018755 00000 n
+0000819051 00000 n
+0003002551 00000 n
+0000018804 00000 n
+0000018857 00000 n
+0000819176 00000 n
+0003002458 00000 n
+0000018906 00000 n
+0000018954 00000 n
+0000819301 00000 n
+0003002365 00000 n
+0000019003 00000 n
+0000019061 00000 n
+0000819426 00000 n
+0003002286 00000 n
+0000019110 00000 n
+0000019163 00000 n
+0000819551 00000 n
+0003002154 00000 n
+0000019213 00000 n
+0000019367 00000 n
+0000819675 00000 n
+0003002075 00000 n
+0000019422 00000 n
+0000019553 00000 n
+0000819737 00000 n
+0003001957 00000 n
+0000019608 00000 n
+0000019767 00000 n
+0000819860 00000 n
+0003001878 00000 n
+0000019816 00000 n
+0000019874 00000 n
+0000832186 00000 n
+0003001785 00000 n
+0000019923 00000 n
+0000020001 00000 n
+0000832311 00000 n
+0003001706 00000 n
+0000020050 00000 n
+0000020098 00000 n
+0000832436 00000 n
+0003001574 00000 n
+0000020148 00000 n
+0000020297 00000 n
+0000841038 00000 n
+0003001495 00000 n
+0000020352 00000 n
+0000020483 00000 n
+0000841100 00000 n
+0003001363 00000 n
+0000020538 00000 n
+0000020712 00000 n
+0000841224 00000 n
+0003001284 00000 n
+0000020762 00000 n
+0000020820 00000 n
+0000841349 00000 n
+0003001205 00000 n
+0000020870 00000 n
+0000020943 00000 n
+0000841410 00000 n
+0003001073 00000 n
+0000020998 00000 n
+0000021192 00000 n
+0000841535 00000 n
+0003001008 00000 n
+0000021242 00000 n
+0000021343 00000 n
+0000844683 00000 n
+0003000876 00000 n
+0000021398 00000 n
+0000021628 00000 n
+0000844808 00000 n
+0003000797 00000 n
+0000021678 00000 n
+0000021736 00000 n
+0000844933 00000 n
+0003000718 00000 n
+0000021786 00000 n
+0000021844 00000 n
+0000844994 00000 n
+0003000585 00000 n
+0000021899 00000 n
+0000022078 00000 n
+0000845117 00000 n
+0003000506 00000 n
+0000022128 00000 n
+0000022194 00000 n
+0000845242 00000 n
+0003000413 00000 n
+0000022244 00000 n
+0000022325 00000 n
+0000845367 00000 n
+0003000320 00000 n
+0000022375 00000 n
+0000022438 00000 n
+0000845492 00000 n
+0003000227 00000 n
+0000022488 00000 n
+0000022617 00000 n
+0000845617 00000 n
+0003000134 00000 n
+0000022667 00000 n
+0000022771 00000 n
+0000845742 00000 n
+0003000041 00000 n
+0000022821 00000 n
+0000022920 00000 n
+0000845867 00000 n
+0002999948 00000 n
+0000022970 00000 n
+0000023056 00000 n
+0000845992 00000 n
+0002999855 00000 n
+0000023106 00000 n
+0000023197 00000 n
+0000846117 00000 n
+0002999762 00000 n
+0000023247 00000 n
+0000023346 00000 n
+0000849113 00000 n
+0002999669 00000 n
+0000023396 00000 n
+0000023515 00000 n
+0000849238 00000 n
+0002999576 00000 n
+0000023565 00000 n
+0000023689 00000 n
+0000849363 00000 n
+0002999483 00000 n
+0000023739 00000 n
+0000023830 00000 n
+0000849488 00000 n
+0002999390 00000 n
+0000023880 00000 n
+0000023966 00000 n
+0000849613 00000 n
+0002999297 00000 n
+0000024016 00000 n
+0000024064 00000 n
+0000849738 00000 n
+0002999204 00000 n
+0000024114 00000 n
+0000024200 00000 n
+0000849863 00000 n
+0002999111 00000 n
+0000024250 00000 n
+0000024341 00000 n
+0000849988 00000 n
+0002999018 00000 n
+0000024391 00000 n
+0000024490 00000 n
+0000850113 00000 n
+0002998925 00000 n
+0000024540 00000 n
+0000024654 00000 n
+0000850238 00000 n
+0002998832 00000 n
+0000024704 00000 n
+0000024813 00000 n
+0000850362 00000 n
+0002998739 00000 n
+0000024863 00000 n
+0000024964 00000 n
+0000853167 00000 n
+0002998646 00000 n
+0000025014 00000 n
+0000025128 00000 n
+0000853292 00000 n
+0002998553 00000 n
+0000025178 00000 n
+0000025287 00000 n
+0000853416 00000 n
+0002998474 00000 n
+0000025337 00000 n
+0000025423 00000 n
+0000853478 00000 n
+0002998342 00000 n
+0000025478 00000 n
+0000025728 00000 n
+0000853603 00000 n
+0002998263 00000 n
+0000025778 00000 n
+0000025928 00000 n
+0000853728 00000 n
+0002998184 00000 n
+0000025978 00000 n
+0000026156 00000 n
+0000853790 00000 n
+0002998065 00000 n
+0000026211 00000 n
+0000026370 00000 n
+0000853915 00000 n
+0002997986 00000 n
+0000026420 00000 n
+0000026514 00000 n
+0000854039 00000 n
+0002997893 00000 n
+0000026564 00000 n
+0000026668 00000 n
+0000854164 00000 n
+0002997800 00000 n
+0000026718 00000 n
+0000026812 00000 n
+0000854289 00000 n
+0002997707 00000 n
+0000026862 00000 n
+0000026928 00000 n
+0000854414 00000 n
+0002997614 00000 n
+0000026978 00000 n
+0000027049 00000 n
+0000857811 00000 n
+0002997521 00000 n
+0000027099 00000 n
+0000027165 00000 n
+0000857936 00000 n
+0002997428 00000 n
+0000027215 00000 n
+0000027276 00000 n
+0000858061 00000 n
+0002997335 00000 n
+0000027326 00000 n
+0000027430 00000 n
+0000858186 00000 n
+0002997242 00000 n
+0000027480 00000 n
+0000027594 00000 n
+0000858311 00000 n
+0002997149 00000 n
+0000027644 00000 n
+0000027743 00000 n
+0000858436 00000 n
+0002997056 00000 n
+0000027793 00000 n
+0000027869 00000 n
+0000858561 00000 n
+0002996963 00000 n
+0000027919 00000 n
+0000028003 00000 n
+0000858685 00000 n
+0002996870 00000 n
+0000028053 00000 n
+0000028132 00000 n
+0000858810 00000 n
+0002996777 00000 n
+0000028182 00000 n
+0000028248 00000 n
+0000858935 00000 n
+0002996684 00000 n
+0000028298 00000 n
+0000028397 00000 n
+0000859059 00000 n
+0002996605 00000 n
+0000028447 00000 n
+0000028541 00000 n
+0000862063 00000 n
+0002996473 00000 n
+0000028591 00000 n
+0000028790 00000 n
+0000862188 00000 n
+0002996394 00000 n
+0000028845 00000 n
+0000028976 00000 n
+0000862250 00000 n
+0002996276 00000 n
+0000029031 00000 n
+0000029190 00000 n
+0000862375 00000 n
+0002996197 00000 n
+0000029240 00000 n
+0000029288 00000 n
+0000862500 00000 n
+0002996118 00000 n
+0000029338 00000 n
+0000029386 00000 n
+0000862625 00000 n
+0002995986 00000 n
+0000029436 00000 n
+0000029630 00000 n
+0000866167 00000 n
+0002995907 00000 n
+0000029685 00000 n
+0000029816 00000 n
+0000866229 00000 n
+0002995789 00000 n
+0000029871 00000 n
+0000030030 00000 n
+0000866354 00000 n
+0002995710 00000 n
+0000030080 00000 n
+0000030128 00000 n
+0000866479 00000 n
+0002995631 00000 n
+0000030178 00000 n
+0000030226 00000 n
+0000866604 00000 n
+0002995499 00000 n
+0000030276 00000 n
+0000030465 00000 n
+0000866729 00000 n
+0002995420 00000 n
+0000030520 00000 n
+0000030651 00000 n
+0000866791 00000 n
+0002995302 00000 n
+0000030706 00000 n
+0000030865 00000 n
+0000866916 00000 n
+0002995223 00000 n
+0000030915 00000 n
+0000030983 00000 n
+0000867041 00000 n
+0002995130 00000 n
+0000031033 00000 n
+0000031101 00000 n
+0000872086 00000 n
+0002995051 00000 n
+0000031151 00000 n
+0000031249 00000 n
+0000872210 00000 n
+0002994919 00000 n
+0000031299 00000 n
+0000031453 00000 n
+0000872461 00000 n
+0002994840 00000 n
+0000031508 00000 n
+0000031639 00000 n
+0000872523 00000 n
+0002994708 00000 n
+0000031694 00000 n
+0000031924 00000 n
+0000872648 00000 n
+0002994643 00000 n
+0000031974 00000 n
+0000032042 00000 n
+0000872709 00000 n
+0002994511 00000 n
+0000032097 00000 n
+0000032276 00000 n
+0000872834 00000 n
+0002994432 00000 n
+0000032326 00000 n
+0000032402 00000 n
+0000872958 00000 n
+0002994339 00000 n
+0000032452 00000 n
+0000032500 00000 n
+0000876713 00000 n
+0002994246 00000 n
+0000032550 00000 n
+0000032626 00000 n
+0000876838 00000 n
+0002994153 00000 n
+0000032676 00000 n
+0000032752 00000 n
+0000876963 00000 n
+0002994074 00000 n
+0000032802 00000 n
+0000032911 00000 n
+0000877025 00000 n
+0002993956 00000 n
+0000032966 00000 n
+0000033125 00000 n
+0000877150 00000 n
+0002993891 00000 n
+0000033175 00000 n
+0000033282 00000 n
+0000877275 00000 n
+0002993759 00000 n
+0000033332 00000 n
+0000033496 00000 n
+0000877463 00000 n
+0002993680 00000 n
+0000033551 00000 n
+0000033682 00000 n
+0000877525 00000 n
+0002993562 00000 n
+0000033737 00000 n
+0000033896 00000 n
+0000877649 00000 n
+0002993483 00000 n
+0000033946 00000 n
+0000034009 00000 n
+0000877773 00000 n
+0002993404 00000 n
+0000034059 00000 n
+0000034153 00000 n
+0000882092 00000 n
+0002993272 00000 n
+0000034203 00000 n
+0000034412 00000 n
+0000882217 00000 n
+0002993193 00000 n
+0000034467 00000 n
+0000034598 00000 n
+0000882279 00000 n
+0002993075 00000 n
+0000034653 00000 n
+0000034812 00000 n
+0000882404 00000 n
+0002992996 00000 n
+0000034862 00000 n
+0000034968 00000 n
+0000882529 00000 n
+0002992903 00000 n
+0000035018 00000 n
+0000035066 00000 n
+0000882654 00000 n
+0002992810 00000 n
+0000035116 00000 n
+0000035202 00000 n
+0000882779 00000 n
+0002992717 00000 n
+0000035252 00000 n
+0000035333 00000 n
+0000882902 00000 n
+0002992624 00000 n
+0000035383 00000 n
+0000035484 00000 n
+0000883026 00000 n
+0002992531 00000 n
+0000035534 00000 n
+0000035668 00000 n
+0000883151 00000 n
+0002992438 00000 n
+0000035718 00000 n
+0000035804 00000 n
+0000886365 00000 n
+0002992345 00000 n
+0000035854 00000 n
+0000035950 00000 n
+0000886489 00000 n
+0002992266 00000 n
+0000036000 00000 n
+0000036071 00000 n
+0000886614 00000 n
+0002992134 00000 n
+0000036121 00000 n
+0000036265 00000 n
+0000886737 00000 n
+0002992055 00000 n
+0000036320 00000 n
+0000036451 00000 n
+0000886988 00000 n
+0002991937 00000 n
+0000036506 00000 n
+0000036665 00000 n
+0000887112 00000 n
+0002991858 00000 n
+0000036715 00000 n
+0000036763 00000 n
+0000887237 00000 n
+0002991779 00000 n
+0000036813 00000 n
+0000036861 00000 n
+0000887362 00000 n
+0002991647 00000 n
+0000036911 00000 n
+0000037100 00000 n
+0000893296 00000 n
+0002991568 00000 n
+0000037155 00000 n
+0000037286 00000 n
+0000893358 00000 n
+0002991450 00000 n
+0000037341 00000 n
+0000037500 00000 n
+0000893483 00000 n
+0002991385 00000 n
+0000037550 00000 n
+0000037598 00000 n
+0000893608 00000 n
+0002991252 00000 n
+0000037648 00000 n
+0000037847 00000 n
+0000893858 00000 n
+0002991173 00000 n
+0000037902 00000 n
+0000038033 00000 n
+0000893920 00000 n
+0002991041 00000 n
+0000038088 00000 n
+0000038318 00000 n
+0000894044 00000 n
+0002990962 00000 n
+0000038368 00000 n
+0000038436 00000 n
+0000896746 00000 n
+0002990883 00000 n
+0000038486 00000 n
+0000038554 00000 n
+0000896808 00000 n
+0002990751 00000 n
+0000038609 00000 n
+0000038788 00000 n
+0000896933 00000 n
+0002990672 00000 n
+0000038838 00000 n
+0000038909 00000 n
+0000897058 00000 n
+0002990579 00000 n
+0000038959 00000 n
+0000039037 00000 n
+0000897182 00000 n
+0002990486 00000 n
+0000039087 00000 n
+0000039155 00000 n
+0000897307 00000 n
+0002990393 00000 n
+0000039205 00000 n
+0000039283 00000 n
+0000897432 00000 n
+0002990314 00000 n
+0000039333 00000 n
+0000039411 00000 n
+0000897494 00000 n
+0002990193 00000 n
+0000039466 00000 n
+0000039626 00000 n
+0000897618 00000 n
+0002990110 00000 n
+0000039677 00000 n
+0000039744 00000 n
+0000897742 00000 n
+0002990027 00000 n
+0000039795 00000 n
+0000039857 00000 n
+0000897868 00000 n
+0002989889 00000 n
+0000039908 00000 n
+0000040170 00000 n
+0000897994 00000 n
+0002989805 00000 n
+0000040226 00000 n
+0000040358 00000 n
+0000902609 00000 n
+0002989680 00000 n
+0000040414 00000 n
+0000040574 00000 n
+0000902735 00000 n
+0002989611 00000 n
+0000040625 00000 n
+0000040674 00000 n
+0000902861 00000 n
+0002989472 00000 n
+0000040725 00000 n
+0000041075 00000 n
+0000902987 00000 n
+0002989388 00000 n
+0000041131 00000 n
+0000041263 00000 n
+0000903049 00000 n
+0002989263 00000 n
+0000041319 00000 n
+0000041550 00000 n
+0000903175 00000 n
+0002989194 00000 n
+0000041601 00000 n
+0000041797 00000 n
+0000903299 00000 n
+0002989055 00000 n
+0000041848 00000 n
+0000042203 00000 n
+0000903425 00000 n
+0002988971 00000 n
+0000042259 00000 n
+0000042391 00000 n
+0000903488 00000 n
+0002988846 00000 n
+0000042447 00000 n
+0000042678 00000 n
+0000903614 00000 n
+0002988777 00000 n
+0000042729 00000 n
+0000042930 00000 n
+0000903740 00000 n
+0002988638 00000 n
+0000042981 00000 n
+0000043344 00000 n
+0000908009 00000 n
+0002988554 00000 n
+0000043400 00000 n
+0000043532 00000 n
+0000908072 00000 n
+0002988429 00000 n
+0000043588 00000 n
+0000043819 00000 n
+0000908198 00000 n
+0002988360 00000 n
+0000043870 00000 n
+0000044079 00000 n
+0000908324 00000 n
+0002988221 00000 n
+0000044130 00000 n
+0000044488 00000 n
+0000908450 00000 n
+0002988137 00000 n
+0000044544 00000 n
+0000044676 00000 n
+0000908513 00000 n
+0002988012 00000 n
+0000044732 00000 n
+0000044963 00000 n
+0000908638 00000 n
+0002987943 00000 n
+0000045014 00000 n
+0000045218 00000 n
+0000908764 00000 n
+0002987804 00000 n
+0000045269 00000 n
+0000045576 00000 n
+0000908890 00000 n
+0002987720 00000 n
+0000045632 00000 n
+0000045764 00000 n
+0000908953 00000 n
+0002987595 00000 n
+0000045820 00000 n
+0000046051 00000 n
+0000909079 00000 n
+0002987526 00000 n
+0000046102 00000 n
+0000046255 00000 n
+0000909205 00000 n
+0002987387 00000 n
+0000046306 00000 n
+0000046618 00000 n
+0000913185 00000 n
+0002987303 00000 n
+0000046674 00000 n
+0000046806 00000 n
+0000913248 00000 n
+0002987178 00000 n
+0000046862 00000 n
+0000047093 00000 n
+0000913374 00000 n
+0002987109 00000 n
+0000047144 00000 n
+0000047302 00000 n
+0000913500 00000 n
+0002986970 00000 n
+0000047353 00000 n
+0000047655 00000 n
+0000913625 00000 n
+0002986886 00000 n
+0000047711 00000 n
+0000047843 00000 n
+0000913688 00000 n
+0002986761 00000 n
+0000047899 00000 n
+0000048130 00000 n
+0000913814 00000 n
+0002986692 00000 n
+0000048181 00000 n
+0000048329 00000 n
+0000913940 00000 n
+0002986553 00000 n
+0000048380 00000 n
+0000048705 00000 n
+0000914066 00000 n
+0002986469 00000 n
+0000048761 00000 n
+0000048893 00000 n
+0000914129 00000 n
+0002986344 00000 n
+0000048949 00000 n
+0000049180 00000 n
+0000914255 00000 n
+0002986275 00000 n
+0000049231 00000 n
+0000049402 00000 n
+0000914381 00000 n
+0002986136 00000 n
+0000049453 00000 n
+0000049765 00000 n
+0000918648 00000 n
+0002986052 00000 n
+0000049821 00000 n
+0000049953 00000 n
+0000918711 00000 n
+0002985927 00000 n
+0000050009 00000 n
+0000050240 00000 n
+0000918837 00000 n
+0002985858 00000 n
+0000050291 00000 n
+0000050449 00000 n
+0000918962 00000 n
+0002985719 00000 n
+0000050500 00000 n
+0000050863 00000 n
+0000919087 00000 n
+0002985635 00000 n
+0000050919 00000 n
+0000051051 00000 n
+0000919150 00000 n
+0002985510 00000 n
+0000051107 00000 n
+0000051338 00000 n
+0000919276 00000 n
+0002985441 00000 n
+0000051389 00000 n
+0000051598 00000 n
+0000919402 00000 n
+0002985302 00000 n
+0000051649 00000 n
+0000051956 00000 n
+0000919528 00000 n
+0002985218 00000 n
+0000052012 00000 n
+0000052144 00000 n
+0000919591 00000 n
+0002985093 00000 n
+0000052200 00000 n
+0000052431 00000 n
+0000919717 00000 n
+0002985024 00000 n
+0000052482 00000 n
+0000052635 00000 n
+0000919843 00000 n
+0002984885 00000 n
+0000052686 00000 n
+0000052998 00000 n
+0000923889 00000 n
+0002984801 00000 n
+0000053054 00000 n
+0000053186 00000 n
+0000923952 00000 n
+0002984676 00000 n
+0000053242 00000 n
+0000053473 00000 n
+0000924078 00000 n
+0002984607 00000 n
+0000053524 00000 n
+0000053682 00000 n
+0000924204 00000 n
+0002984468 00000 n
+0000053733 00000 n
+0000054040 00000 n
+0000924329 00000 n
+0002984384 00000 n
+0000054096 00000 n
+0000054228 00000 n
+0000924392 00000 n
+0002984259 00000 n
+0000054284 00000 n
+0000054515 00000 n
+0000924518 00000 n
+0002984190 00000 n
+0000054566 00000 n
+0000054719 00000 n
+0000924644 00000 n
+0002984051 00000 n
+0000054770 00000 n
+0000055110 00000 n
+0000924770 00000 n
+0002983967 00000 n
+0000055166 00000 n
+0000055298 00000 n
+0000924833 00000 n
+0002983842 00000 n
+0000055354 00000 n
+0000055585 00000 n
+0000924959 00000 n
+0002983773 00000 n
+0000055636 00000 n
+0000055822 00000 n
+0000925085 00000 n
+0002983634 00000 n
+0000055873 00000 n
+0000056175 00000 n
+0000929109 00000 n
+0002983550 00000 n
+0000056231 00000 n
+0000056363 00000 n
+0000929172 00000 n
+0002983425 00000 n
+0000056419 00000 n
+0000056650 00000 n
+0000929298 00000 n
+0002983356 00000 n
+0000056701 00000 n
+0000056849 00000 n
+0000929424 00000 n
+0002983217 00000 n
+0000056900 00000 n
+0000057260 00000 n
+0000929549 00000 n
+0002983133 00000 n
+0000057316 00000 n
+0000057448 00000 n
+0000929612 00000 n
+0002983008 00000 n
+0000057504 00000 n
+0000057735 00000 n
+0000929738 00000 n
+0002982939 00000 n
+0000057786 00000 n
+0000057992 00000 n
+0000929864 00000 n
+0002982800 00000 n
+0000058043 00000 n
+0000058403 00000 n
+0000929990 00000 n
+0002982716 00000 n
+0000058459 00000 n
+0000058591 00000 n
+0000930053 00000 n
+0002982591 00000 n
+0000058647 00000 n
+0000058878 00000 n
+0000930179 00000 n
+0002982522 00000 n
+0000058929 00000 n
+0000059135 00000 n
+0000930305 00000 n
+0002982383 00000 n
+0000059186 00000 n
+0000059511 00000 n
+0000934302 00000 n
+0002982299 00000 n
+0000059567 00000 n
+0000059699 00000 n
+0000934365 00000 n
+0002982174 00000 n
+0000059755 00000 n
+0000059986 00000 n
+0000934491 00000 n
+0002982105 00000 n
+0000060037 00000 n
+0000060208 00000 n
+0000934617 00000 n
+0002981966 00000 n
+0000060259 00000 n
+0000060571 00000 n
+0000934742 00000 n
+0002981882 00000 n
+0000060627 00000 n
+0000060759 00000 n
+0000934805 00000 n
+0002981757 00000 n
+0000060815 00000 n
+0000061046 00000 n
+0000934931 00000 n
+0002981688 00000 n
+0000061097 00000 n
+0000061255 00000 n
+0000935057 00000 n
+0002981549 00000 n
+0000061306 00000 n
+0000061679 00000 n
+0000935183 00000 n
+0002981465 00000 n
+0000061735 00000 n
+0000061867 00000 n
+0000935246 00000 n
+0002981340 00000 n
+0000061923 00000 n
+0000062154 00000 n
+0000935372 00000 n
+0002981271 00000 n
+0000062205 00000 n
+0000062424 00000 n
+0000935498 00000 n
+0002981132 00000 n
+0000062475 00000 n
+0000062640 00000 n
+0000941043 00000 n
+0002981048 00000 n
+0000062696 00000 n
+0000062828 00000 n
+0000941106 00000 n
+0002980908 00000 n
+0000062884 00000 n
+0000063115 00000 n
+0000941232 00000 n
+0002980839 00000 n
+0000063166 00000 n
+0000063245 00000 n
+0000941294 00000 n
+0002980699 00000 n
+0000063301 00000 n
+0000063481 00000 n
+0000941420 00000 n
+0002980615 00000 n
+0000063532 00000 n
+0000063642 00000 n
+0000941546 00000 n
+0002980516 00000 n
+0000063693 00000 n
+0000063808 00000 n
+0000941672 00000 n
+0002980417 00000 n
+0000063859 00000 n
+0000063954 00000 n
+0000941798 00000 n
+0002980318 00000 n
+0000064005 00000 n
+0000064092 00000 n
+0000941924 00000 n
+0002980219 00000 n
+0000064143 00000 n
+0000064235 00000 n
+0000947296 00000 n
+0002980120 00000 n
+0000064286 00000 n
+0000064401 00000 n
+0000947421 00000 n
+0002980021 00000 n
+0000064452 00000 n
+0000064529 00000 n
+0000947546 00000 n
+0002979937 00000 n
+0000064580 00000 n
+0000064680 00000 n
+0000947609 00000 n
+0002979812 00000 n
+0000064736 00000 n
+0000064896 00000 n
+0000947735 00000 n
+0002979728 00000 n
+0000064947 00000 n
+0000065029 00000 n
+0000947861 00000 n
+0002979629 00000 n
+0000065080 00000 n
+0000065167 00000 n
+0000947987 00000 n
+0002979530 00000 n
+0000065218 00000 n
+0000065310 00000 n
+0000948113 00000 n
+0002979446 00000 n
+0000065361 00000 n
+0000065433 00000 n
+0000948239 00000 n
+0002979307 00000 n
+0000065484 00000 n
+0000065639 00000 n
+0000950957 00000 n
+0002979223 00000 n
+0000065695 00000 n
+0000065827 00000 n
+0000951020 00000 n
+0002979083 00000 n
+0000065883 00000 n
+0000066114 00000 n
+0000951145 00000 n
+0002978999 00000 n
+0000066165 00000 n
+0000066234 00000 n
+0000951271 00000 n
+0002978915 00000 n
+0000066285 00000 n
+0000066354 00000 n
+0000951334 00000 n
+0002978775 00000 n
+0000066410 00000 n
+0000066590 00000 n
+0000951460 00000 n
+0002978691 00000 n
+0000066641 00000 n
+0000066710 00000 n
+0000951586 00000 n
+0002978592 00000 n
+0000066761 00000 n
+0000066805 00000 n
+0000951711 00000 n
+0002978493 00000 n
+0000066856 00000 n
+0000066915 00000 n
+0000951837 00000 n
+0002978394 00000 n
+0000066966 00000 n
+0000067035 00000 n
+0000951962 00000 n
+0002978310 00000 n
+0000067086 00000 n
+0000067140 00000 n
+0000952025 00000 n
+0002978185 00000 n
+0000067196 00000 n
+0000067356 00000 n
+0000952147 00000 n
+0002978101 00000 n
+0000067407 00000 n
+0000067479 00000 n
+0000952273 00000 n
+0002978017 00000 n
+0000067530 00000 n
+0000067597 00000 n
+0000965754 00000 n
+0002977878 00000 n
+0000067648 00000 n
+0000067806 00000 n
+0000972708 00000 n
+0002977794 00000 n
+0000067862 00000 n
+0000067994 00000 n
+0000972771 00000 n
+0002977669 00000 n
+0000068050 00000 n
+0000068210 00000 n
+0000972897 00000 n
+0002977585 00000 n
+0000068261 00000 n
+0000068401 00000 n
+0000973022 00000 n
+0002977486 00000 n
+0000068452 00000 n
+0000068582 00000 n
+0000973147 00000 n
+0002977402 00000 n
+0000068633 00000 n
+0000068715 00000 n
+0000973272 00000 n
+0002977263 00000 n
+0000068766 00000 n
+0000068931 00000 n
+0000973647 00000 n
+0002977179 00000 n
+0000068987 00000 n
+0000069119 00000 n
+0000977048 00000 n
+0002977039 00000 n
+0000069175 00000 n
+0000069406 00000 n
+0000977174 00000 n
+0002976955 00000 n
+0000069457 00000 n
+0000069531 00000 n
+0000977300 00000 n
+0002976871 00000 n
+0000069582 00000 n
+0000069656 00000 n
+0000977363 00000 n
+0002976731 00000 n
+0000069712 00000 n
+0000069892 00000 n
+0000977489 00000 n
+0002976647 00000 n
+0000069943 00000 n
+0000070033 00000 n
+0000977614 00000 n
+0002976548 00000 n
+0000070084 00000 n
+0000070194 00000 n
+0000977740 00000 n
+0002976449 00000 n
+0000070245 00000 n
+0000070398 00000 n
+0000977866 00000 n
+0002976350 00000 n
+0000070449 00000 n
+0000070521 00000 n
+0000977992 00000 n
+0002976251 00000 n
+0000070572 00000 n
+0000070690 00000 n
+0000978117 00000 n
+0002976152 00000 n
+0000070741 00000 n
+0000070892 00000 n
+0000978242 00000 n
+0002976068 00000 n
+0000070943 00000 n
+0000071025 00000 n
+0000978305 00000 n
+0002975943 00000 n
+0000071081 00000 n
+0000071241 00000 n
+0000978431 00000 n
+0002975859 00000 n
+0000071292 00000 n
+0000071364 00000 n
+0000978556 00000 n
+0002975760 00000 n
+0000071415 00000 n
+0000071520 00000 n
+0000982677 00000 n
+0002975661 00000 n
+0000071571 00000 n
+0000071658 00000 n
+0000982802 00000 n
+0002975577 00000 n
+0000071709 00000 n
+0000071768 00000 n
+0000982928 00000 n
+0002975438 00000 n
+0000071819 00000 n
+0000072015 00000 n
+0000983116 00000 n
+0002975354 00000 n
+0000072071 00000 n
+0000072203 00000 n
+0000983179 00000 n
+0002975214 00000 n
+0000072259 00000 n
+0000072490 00000 n
+0000983304 00000 n
+0002975130 00000 n
+0000072541 00000 n
+0000072646 00000 n
+0000983430 00000 n
+0002975046 00000 n
+0000072697 00000 n
+0000072802 00000 n
+0000983493 00000 n
+0002974921 00000 n
+0000072858 00000 n
+0000073018 00000 n
+0000983619 00000 n
+0002974852 00000 n
+0000073069 00000 n
+0000073136 00000 n
+0000983745 00000 n
+0002974713 00000 n
+0000073187 00000 n
+0000073345 00000 n
+0000989325 00000 n
+0002974629 00000 n
+0000073401 00000 n
+0000073533 00000 n
+0000989388 00000 n
+0002974489 00000 n
+0000073589 00000 n
+0000073820 00000 n
+0000989514 00000 n
+0002974405 00000 n
+0000073871 00000 n
+0000073938 00000 n
+0000989640 00000 n
+0002974321 00000 n
+0000073989 00000 n
+0000074056 00000 n
+0000989703 00000 n
+0002974181 00000 n
+0000074112 00000 n
+0000074292 00000 n
+0000989829 00000 n
+0002974097 00000 n
+0000074343 00000 n
+0000074392 00000 n
+0000989955 00000 n
+0002974013 00000 n
+0000074443 00000 n
+0000074502 00000 n
+0000990018 00000 n
+0002973888 00000 n
+0000074558 00000 n
+0000074718 00000 n
+0000990144 00000 n
+0002973819 00000 n
+0000074769 00000 n
+0000074831 00000 n
+0000997518 00000 n
+0002973680 00000 n
+0000074882 00000 n
+0000075042 00000 n
+0000997707 00000 n
+0002973596 00000 n
+0000075098 00000 n
+0000075230 00000 n
+0000997770 00000 n
+0002973456 00000 n
+0000075286 00000 n
+0000075517 00000 n
+0000997896 00000 n
+0002973387 00000 n
+0000075568 00000 n
+0000075637 00000 n
+0000997959 00000 n
+0002973262 00000 n
+0000075693 00000 n
+0000075853 00000 n
+0000998085 00000 n
+0002973178 00000 n
+0000075904 00000 n
+0000075971 00000 n
+0000998211 00000 n
+0002973094 00000 n
+0000076022 00000 n
+0000076112 00000 n
+0000998337 00000 n
+0002972955 00000 n
+0000076163 00000 n
+0000076328 00000 n
+0001005077 00000 n
+0002972871 00000 n
+0000076384 00000 n
+0000076516 00000 n
+0001005140 00000 n
+0002972731 00000 n
+0000076572 00000 n
+0000076803 00000 n
+0001005265 00000 n
+0002972662 00000 n
+0000076854 00000 n
+0000076933 00000 n
+0001005328 00000 n
+0002972521 00000 n
+0000076989 00000 n
+0000077169 00000 n
+0001005453 00000 n
+0002972437 00000 n
+0000077220 00000 n
+0000077284 00000 n
+0001005579 00000 n
+0002972338 00000 n
+0000077335 00000 n
+0000077419 00000 n
+0001005705 00000 n
+0002972239 00000 n
+0000077470 00000 n
+0000077544 00000 n
+0001005830 00000 n
+0002972140 00000 n
+0000077595 00000 n
+0000077729 00000 n
+0001005956 00000 n
+0002972041 00000 n
+0000077780 00000 n
+0000077914 00000 n
+0001006082 00000 n
+0002971942 00000 n
+0000077965 00000 n
+0000078057 00000 n
+0001008744 00000 n
+0002971843 00000 n
+0000078108 00000 n
+0000078172 00000 n
+0001008869 00000 n
+0002971744 00000 n
+0000078223 00000 n
+0000078287 00000 n
+0001008995 00000 n
+0002971645 00000 n
+0000078338 00000 n
+0000078422 00000 n
+0001009120 00000 n
+0002971546 00000 n
+0000078473 00000 n
+0000078537 00000 n
+0001009246 00000 n
+0002971447 00000 n
+0000078588 00000 n
+0000078667 00000 n
+0001009372 00000 n
+0002971348 00000 n
+0000078718 00000 n
+0000078822 00000 n
+0001009498 00000 n
+0002971249 00000 n
+0000078873 00000 n
+0000078987 00000 n
+0001009624 00000 n
+0002971150 00000 n
+0000079038 00000 n
+0000079162 00000 n
+0001009749 00000 n
+0002971051 00000 n
+0000079213 00000 n
+0000079292 00000 n
+0001009875 00000 n
+0002970952 00000 n
+0000079343 00000 n
+0000079432 00000 n
+0001010000 00000 n
+0002970868 00000 n
+0000079483 00000 n
+0000079577 00000 n
+0001012344 00000 n
+0002970742 00000 n
+0000079633 00000 n
+0000079793 00000 n
+0001012470 00000 n
+0002970658 00000 n
+0000079844 00000 n
+0000079921 00000 n
+0001012595 00000 n
+0002970559 00000 n
+0000079972 00000 n
+0000080067 00000 n
+0001012721 00000 n
+0002970460 00000 n
+0000080118 00000 n
+0000080289 00000 n
+0001012847 00000 n
+0002970361 00000 n
+0000080340 00000 n
+0000080511 00000 n
+0001012972 00000 n
+0002970262 00000 n
+0000080562 00000 n
+0000080667 00000 n
+0001013097 00000 n
+0002970163 00000 n
+0000080718 00000 n
+0000080803 00000 n
+0001013223 00000 n
+0002970064 00000 n
+0000080854 00000 n
+0000080949 00000 n
+0001013349 00000 n
+0002969965 00000 n
+0000081000 00000 n
+0000081085 00000 n
+0001013475 00000 n
+0002969866 00000 n
+0000081136 00000 n
+0000081213 00000 n
+0001013601 00000 n
+0002969767 00000 n
+0000081264 00000 n
+0000081364 00000 n
+0001013727 00000 n
+0002969668 00000 n
+0000081415 00000 n
+0000081548 00000 n
+0001013852 00000 n
+0002969569 00000 n
+0000081599 00000 n
+0000081742 00000 n
+0001018224 00000 n
+0002969470 00000 n
+0000081793 00000 n
+0000081946 00000 n
+0001018350 00000 n
+0002969371 00000 n
+0000081997 00000 n
+0000082097 00000 n
+0001018475 00000 n
+0002969287 00000 n
+0000082148 00000 n
+0000082258 00000 n
+0001018601 00000 n
+0002969148 00000 n
+0000082309 00000 n
+0000082535 00000 n
+0001018726 00000 n
+0002969064 00000 n
+0000082591 00000 n
+0000082723 00000 n
+0001018850 00000 n
+0002968939 00000 n
+0000082779 00000 n
+0000082939 00000 n
+0001018976 00000 n
+0002968855 00000 n
+0000082990 00000 n
+0000083039 00000 n
+0001019102 00000 n
+0002968756 00000 n
+0000083090 00000 n
+0000083139 00000 n
+0001019228 00000 n
+0002968672 00000 n
+0000083190 00000 n
+0000083244 00000 n
+0001019354 00000 n
+0002968533 00000 n
+0000083295 00000 n
+0000083612 00000 n
+0001022973 00000 n
+0002968449 00000 n
+0000083668 00000 n
+0000083800 00000 n
+0001023036 00000 n
+0002968324 00000 n
+0000083856 00000 n
+0000084087 00000 n
+0001023162 00000 n
+0002968255 00000 n
+0000084138 00000 n
+0000084301 00000 n
+0001023287 00000 n
+0002968116 00000 n
+0000084352 00000 n
+0000084717 00000 n
+0001023413 00000 n
+0002968032 00000 n
+0000084773 00000 n
+0000084905 00000 n
+0001023476 00000 n
+0002967907 00000 n
+0000084961 00000 n
+0000085192 00000 n
+0001023602 00000 n
+0002967838 00000 n
+0000085243 00000 n
+0000085454 00000 n
+0001023728 00000 n
+0002967699 00000 n
+0000085505 00000 n
+0000085822 00000 n
+0001023853 00000 n
+0002967615 00000 n
+0000085878 00000 n
+0000086010 00000 n
+0001023916 00000 n
+0002967490 00000 n
+0000086066 00000 n
+0000086297 00000 n
+0001024042 00000 n
+0002967421 00000 n
+0000086348 00000 n
+0000086511 00000 n
+0001024168 00000 n
+0002967282 00000 n
+0000086562 00000 n
+0000086818 00000 n
+0001028309 00000 n
+0002967198 00000 n
+0000086874 00000 n
+0000087006 00000 n
+0001028372 00000 n
+0002967073 00000 n
+0000087062 00000 n
+0000087293 00000 n
+0001028497 00000 n
+0002967004 00000 n
+0000087344 00000 n
+0000087446 00000 n
+0001028619 00000 n
+0002966865 00000 n
+0000087497 00000 n
+0000087763 00000 n
+0001028745 00000 n
+0002966781 00000 n
+0000087819 00000 n
+0000087951 00000 n
+0001028808 00000 n
+0002966656 00000 n
+0000088007 00000 n
+0000088238 00000 n
+0001028934 00000 n
+0002966587 00000 n
+0000088289 00000 n
+0000088401 00000 n
+0001029058 00000 n
+0002966448 00000 n
+0000088452 00000 n
+0000088683 00000 n
+0001029184 00000 n
+0002966364 00000 n
+0000088739 00000 n
+0000088871 00000 n
+0001029247 00000 n
+0002966239 00000 n
+0000088927 00000 n
+0000089087 00000 n
+0001029373 00000 n
+0002966155 00000 n
+0000089138 00000 n
+0000089235 00000 n
+0001029499 00000 n
+0002966056 00000 n
+0000089286 00000 n
+0000089363 00000 n
+0001029625 00000 n
+0002965957 00000 n
+0000089414 00000 n
+0000089511 00000 n
+0001041417 00000 n
+0002965873 00000 n
+0000089562 00000 n
+0000089621 00000 n
+0001041543 00000 n
+0002965734 00000 n
+0000089672 00000 n
+0000089872 00000 n
+0001056061 00000 n
+0002965650 00000 n
+0000089928 00000 n
+0000090060 00000 n
+0001056124 00000 n
+0002965510 00000 n
+0000090116 00000 n
+0000090291 00000 n
+0001056250 00000 n
+0002965426 00000 n
+0000090342 00000 n
+0000090421 00000 n
+0001056376 00000 n
+0002965342 00000 n
+0000090472 00000 n
+0000090551 00000 n
+0001059017 00000 n
+0002965202 00000 n
+0000090607 00000 n
+0000090838 00000 n
+0001059145 00000 n
+0002965118 00000 n
+0000090889 00000 n
+0000091003 00000 n
+0001059273 00000 n
+0002965019 00000 n
+0000091054 00000 n
+0000091168 00000 n
+0001059337 00000 n
+0002964920 00000 n
+0000091219 00000 n
+0000091333 00000 n
+0001059464 00000 n
+0002964836 00000 n
+0000091384 00000 n
+0000091498 00000 n
+0001059528 00000 n
+0002964695 00000 n
+0000091554 00000 n
+0000091734 00000 n
+0001059656 00000 n
+0002964611 00000 n
+0000091785 00000 n
+0000091890 00000 n
+0001059784 00000 n
+0002964512 00000 n
+0000091941 00000 n
+0000092005 00000 n
+0001059911 00000 n
+0002964413 00000 n
+0000092056 00000 n
+0000092120 00000 n
+0001060039 00000 n
+0002964314 00000 n
+0000092171 00000 n
+0000092271 00000 n
+0001060167 00000 n
+0002964215 00000 n
+0000092322 00000 n
+0000092447 00000 n
+0001060295 00000 n
+0002964116 00000 n
+0000092498 00000 n
+0000092628 00000 n
+0001060423 00000 n
+0002964017 00000 n
+0000092679 00000 n
+0000092878 00000 n
+0001064323 00000 n
+0002963918 00000 n
+0000092929 00000 n
+0000093054 00000 n
+0001064450 00000 n
+0002963819 00000 n
+0000093105 00000 n
+0000093210 00000 n
+0001064578 00000 n
+0002963720 00000 n
+0000093261 00000 n
+0000093376 00000 n
+0001064706 00000 n
+0002963621 00000 n
+0000093427 00000 n
+0000093565 00000 n
+0001064834 00000 n
+0002963522 00000 n
+0000093616 00000 n
+0000093703 00000 n
+0001064962 00000 n
+0002963423 00000 n
+0000093754 00000 n
+0000093864 00000 n
+0001065089 00000 n
+0002963324 00000 n
+0000093915 00000 n
+0000094050 00000 n
+0001065217 00000 n
+0002963225 00000 n
+0000094101 00000 n
+0000094165 00000 n
+0001065344 00000 n
+0002963126 00000 n
+0000094216 00000 n
+0000094280 00000 n
+0001065472 00000 n
+0002963027 00000 n
+0000094331 00000 n
+0000094433 00000 n
+0001065599 00000 n
+0002962928 00000 n
+0000094484 00000 n
+0000094662 00000 n
+0001068825 00000 n
+0002962829 00000 n
+0000094713 00000 n
+0000094848 00000 n
+0001068953 00000 n
+0002962730 00000 n
+0000094899 00000 n
+0000095107 00000 n
+0001069081 00000 n
+0002962631 00000 n
+0000095158 00000 n
+0000095273 00000 n
+0001069209 00000 n
+0002962532 00000 n
+0000095324 00000 n
+0000095454 00000 n
+0001069336 00000 n
+0002962433 00000 n
+0000095505 00000 n
+0000095640 00000 n
+0001069463 00000 n
+0002962334 00000 n
+0000095691 00000 n
+0000095884 00000 n
+0001069591 00000 n
+0002962235 00000 n
+0000095935 00000 n
+0000096055 00000 n
+0001069719 00000 n
+0002962136 00000 n
+0000096106 00000 n
+0000096231 00000 n
+0001069847 00000 n
+0002962037 00000 n
+0000096282 00000 n
+0000096399 00000 n
+0001069973 00000 n
+0002961938 00000 n
+0000096450 00000 n
+0000096560 00000 n
+0001073629 00000 n
+0002961839 00000 n
+0000096611 00000 n
+0000096741 00000 n
+0001073757 00000 n
+0002961755 00000 n
+0000096792 00000 n
+0000096909 00000 n
+0001073821 00000 n
+0002961629 00000 n
+0000096965 00000 n
+0000097125 00000 n
+0001073950 00000 n
+0002961545 00000 n
+0000097176 00000 n
+0000097253 00000 n
+0001074079 00000 n
+0002961446 00000 n
+0000097304 00000 n
+0000097424 00000 n
+0001074208 00000 n
+0002961347 00000 n
+0000097475 00000 n
+0000097595 00000 n
+0001074336 00000 n
+0002961248 00000 n
+0000097646 00000 n
+0000097756 00000 n
+0001074464 00000 n
+0002961149 00000 n
+0000097807 00000 n
+0000097879 00000 n
+0001074593 00000 n
+0002961050 00000 n
+0000097930 00000 n
+0000098020 00000 n
+0001074722 00000 n
+0002960951 00000 n
+0000098071 00000 n
+0000098189 00000 n
+0001074851 00000 n
+0002960852 00000 n
+0000098240 00000 n
+0000098292 00000 n
+0001078421 00000 n
+0002960753 00000 n
+0000098343 00000 n
+0000098438 00000 n
+0001078550 00000 n
+0002960654 00000 n
+0000098489 00000 n
+0000098569 00000 n
+0001078679 00000 n
+0002960555 00000 n
+0000098620 00000 n
+0000098733 00000 n
+0001078808 00000 n
+0002960456 00000 n
+0000098784 00000 n
+0000098874 00000 n
+0001078936 00000 n
+0002960357 00000 n
+0000098925 00000 n
+0000099030 00000 n
+0001079064 00000 n
+0002960258 00000 n
+0000099081 00000 n
+0000099171 00000 n
+0001079193 00000 n
+0002960159 00000 n
+0000099222 00000 n
+0000099347 00000 n
+0001079322 00000 n
+0002960060 00000 n
+0000099398 00000 n
+0000099513 00000 n
+0001079450 00000 n
+0002959961 00000 n
+0000099564 00000 n
+0000099621 00000 n
+0001079579 00000 n
+0002959862 00000 n
+0000099672 00000 n
+0000099772 00000 n
+0001079708 00000 n
+0002959763 00000 n
+0000099823 00000 n
+0000099908 00000 n
+0001084992 00000 n
+0002959664 00000 n
+0000099959 00000 n
+0000100077 00000 n
+0001085119 00000 n
+0002959565 00000 n
+0000100128 00000 n
+0000100246 00000 n
+0001085248 00000 n
+0002959466 00000 n
+0000100297 00000 n
+0000100369 00000 n
+0001085377 00000 n
+0002959367 00000 n
+0000100420 00000 n
+0000100515 00000 n
+0001085506 00000 n
+0002959268 00000 n
+0000100566 00000 n
+0000100628 00000 n
+0001085633 00000 n
+0002959169 00000 n
+0000100679 00000 n
+0000100774 00000 n
+0001085762 00000 n
+0002959085 00000 n
+0000100825 00000 n
+0000100920 00000 n
+0001085890 00000 n
+0002958946 00000 n
+0000100971 00000 n
+0000101278 00000 n
+0001086019 00000 n
+0002958862 00000 n
+0000101334 00000 n
+0000101466 00000 n
+0001090176 00000 n
+0002958737 00000 n
+0000101522 00000 n
+0000101753 00000 n
+0001090305 00000 n
+0002958668 00000 n
+0000101804 00000 n
+0000101957 00000 n
+0001090433 00000 n
+0002958529 00000 n
+0000102008 00000 n
+0000102343 00000 n
+0001090562 00000 n
+0002958445 00000 n
+0000102399 00000 n
+0000102531 00000 n
+0001090626 00000 n
+0002958320 00000 n
+0000102587 00000 n
+0000102818 00000 n
+0001090755 00000 n
+0002958251 00000 n
+0000102869 00000 n
+0000103050 00000 n
+0001090883 00000 n
+0002958112 00000 n
+0000103101 00000 n
+0000103403 00000 n
+0001091012 00000 n
+0002958028 00000 n
+0000103459 00000 n
+0000103591 00000 n
+0001091076 00000 n
+0002957903 00000 n
+0000103647 00000 n
+0000103878 00000 n
+0001091205 00000 n
+0002957834 00000 n
+0000103929 00000 n
+0000104077 00000 n
+0001091333 00000 n
+0002957695 00000 n
+0000104128 00000 n
+0000104453 00000 n
+0001091462 00000 n
+0002957611 00000 n
+0000104509 00000 n
+0000104641 00000 n
+0001095448 00000 n
+0002957486 00000 n
+0000104697 00000 n
+0000104928 00000 n
+0001095577 00000 n
+0002957417 00000 n
+0000104979 00000 n
+0000105150 00000 n
+0001095705 00000 n
+0002957278 00000 n
+0000105201 00000 n
+0000105498 00000 n
+0001095834 00000 n
+0002957194 00000 n
+0000105554 00000 n
+0000105686 00000 n
+0001095898 00000 n
+0002957069 00000 n
+0000105742 00000 n
+0000105973 00000 n
+0001096027 00000 n
+0002957000 00000 n
+0000106024 00000 n
+0000106167 00000 n
+0001096155 00000 n
+0002956861 00000 n
+0000106218 00000 n
+0000106533 00000 n
+0001096284 00000 n
+0002956777 00000 n
+0000106589 00000 n
+0000106721 00000 n
+0001096348 00000 n
+0002956652 00000 n
+0000106777 00000 n
+0000107008 00000 n
+0001096477 00000 n
+0002956583 00000 n
+0000107059 00000 n
+0000107220 00000 n
+0001096605 00000 n
+0002956444 00000 n
+0000107271 00000 n
+0000107578 00000 n
+0001096734 00000 n
+0002956360 00000 n
+0000107634 00000 n
+0000107766 00000 n
+0001100751 00000 n
+0002956235 00000 n
+0000107822 00000 n
+0000108053 00000 n
+0001100880 00000 n
+0002956166 00000 n
+0000108104 00000 n
+0000108257 00000 n
+0001101008 00000 n
+0002956027 00000 n
+0000108308 00000 n
+0000108600 00000 n
+0001101137 00000 n
+0002955943 00000 n
+0000108656 00000 n
+0000108788 00000 n
+0001101201 00000 n
+0002955818 00000 n
+0000108844 00000 n
+0000109075 00000 n
+0001101330 00000 n
+0002955749 00000 n
+0000109126 00000 n
+0000109264 00000 n
+0001101458 00000 n
+0002955610 00000 n
+0000109315 00000 n
+0000109635 00000 n
+0001101587 00000 n
+0002955526 00000 n
+0000109691 00000 n
+0000109823 00000 n
+0001101650 00000 n
+0002955401 00000 n
+0000109879 00000 n
+0000110110 00000 n
+0001101779 00000 n
+0002955332 00000 n
+0000110161 00000 n
+0000110327 00000 n
+0001101906 00000 n
+0002955193 00000 n
+0000110378 00000 n
+0000110592 00000 n
+0001105901 00000 n
+0002955109 00000 n
+0000110648 00000 n
+0000110780 00000 n
+0001105965 00000 n
+0002954984 00000 n
+0000110836 00000 n
+0000110996 00000 n
+0001106094 00000 n
+0002954915 00000 n
+0000111047 00000 n
+0000111096 00000 n
+0001106222 00000 n
+0002954776 00000 n
+0000111147 00000 n
+0000111389 00000 n
+0001106351 00000 n
+0002954692 00000 n
+0000111445 00000 n
+0000111577 00000 n
+0001106415 00000 n
+0002954567 00000 n
+0000111633 00000 n
+0000111793 00000 n
+0001106544 00000 n
+0002954498 00000 n
+0000111844 00000 n
+0000111893 00000 n
+0001106672 00000 n
+0002954359 00000 n
+0000111944 00000 n
+0000112246 00000 n
+0001106801 00000 n
+0002954275 00000 n
+0000112302 00000 n
+0000112434 00000 n
+0001106865 00000 n
+0002954150 00000 n
+0000112490 00000 n
+0000112721 00000 n
+0001106994 00000 n
+0002954081 00000 n
+0000112772 00000 n
+0000112920 00000 n
+0001111017 00000 n
+0002953942 00000 n
+0000112971 00000 n
+0000113258 00000 n
+0001111146 00000 n
+0002953858 00000 n
+0000113314 00000 n
+0000113446 00000 n
+0001111210 00000 n
+0002953733 00000 n
+0000113502 00000 n
+0000113733 00000 n
+0001111338 00000 n
+0002953664 00000 n
+0000113784 00000 n
+0000113917 00000 n
+0001111466 00000 n
+0002953525 00000 n
+0000113968 00000 n
+0000114283 00000 n
+0001111594 00000 n
+0002953441 00000 n
+0000114339 00000 n
+0000114471 00000 n
+0001111658 00000 n
+0002953316 00000 n
+0000114527 00000 n
+0000114758 00000 n
+0001111787 00000 n
+0002953247 00000 n
+0000114809 00000 n
+0000114970 00000 n
+0001111915 00000 n
+0002953108 00000 n
+0000115021 00000 n
+0000115318 00000 n
+0001112044 00000 n
+0002953024 00000 n
+0000115374 00000 n
+0000115506 00000 n
+0001112108 00000 n
+0002952899 00000 n
+0000115562 00000 n
+0000115793 00000 n
+0001112237 00000 n
+0002952830 00000 n
+0000115844 00000 n
+0000115987 00000 n
+0001116404 00000 n
+0002952691 00000 n
+0000116038 00000 n
+0000116363 00000 n
+0001116533 00000 n
+0002952607 00000 n
+0000116419 00000 n
+0000116551 00000 n
+0001116597 00000 n
+0002952482 00000 n
+0000116607 00000 n
+0000116838 00000 n
+0001116725 00000 n
+0002952413 00000 n
+0000116889 00000 n
+0000117060 00000 n
+0001116853 00000 n
+0002952274 00000 n
+0000117111 00000 n
+0000117418 00000 n
+0001116981 00000 n
+0002952190 00000 n
+0000117474 00000 n
+0000117606 00000 n
+0001117045 00000 n
+0002952065 00000 n
+0000117662 00000 n
+0000117893 00000 n
+0001117174 00000 n
+0002951996 00000 n
+0000117944 00000 n
+0000118097 00000 n
+0001117302 00000 n
+0002951857 00000 n
+0000118148 00000 n
+0000118440 00000 n
+0001117431 00000 n
+0002951773 00000 n
+0000118496 00000 n
+0000118628 00000 n
+0001117495 00000 n
+0002951648 00000 n
+0000118684 00000 n
+0000118915 00000 n
+0001117624 00000 n
+0002951579 00000 n
+0000118966 00000 n
+0000119104 00000 n
+0001121791 00000 n
+0002951440 00000 n
+0000119155 00000 n
+0000119475 00000 n
+0001121920 00000 n
+0002951356 00000 n
+0000119531 00000 n
+0000119663 00000 n
+0001121984 00000 n
+0002951231 00000 n
+0000119719 00000 n
+0000119950 00000 n
+0001122112 00000 n
+0002951162 00000 n
+0000120001 00000 n
+0000120167 00000 n
+0001122240 00000 n
+0002951023 00000 n
+0000120218 00000 n
+0000120515 00000 n
+0001122368 00000 n
+0002950939 00000 n
+0000120571 00000 n
+0000120703 00000 n
+0001122432 00000 n
+0002950814 00000 n
+0000120759 00000 n
+0000120990 00000 n
+0001122561 00000 n
+0002950745 00000 n
+0000121041 00000 n
+0000121184 00000 n
+0001122689 00000 n
+0002950606 00000 n
+0000121235 00000 n
+0000121560 00000 n
+0001122818 00000 n
+0002950522 00000 n
+0000121616 00000 n
+0000121748 00000 n
+0001122882 00000 n
+0002950397 00000 n
+0000121804 00000 n
+0000122035 00000 n
+0001123011 00000 n
+0002950328 00000 n
+0000122086 00000 n
+0000122257 00000 n
+0001127260 00000 n
+0002950189 00000 n
+0000122308 00000 n
+0000122483 00000 n
+0001127389 00000 n
+0002950105 00000 n
+0000122539 00000 n
+0000122671 00000 n
+0001127452 00000 n
+0002949980 00000 n
+0000122727 00000 n
+0000122887 00000 n
+0001127579 00000 n
+0002949911 00000 n
+0000122938 00000 n
+0000122987 00000 n
+0001127706 00000 n
+0002949772 00000 n
+0000123038 00000 n
+0000123213 00000 n
+0001127900 00000 n
+0002949688 00000 n
+0000123269 00000 n
+0000123401 00000 n
+0001127964 00000 n
+0002949548 00000 n
+0000123457 00000 n
+0000123688 00000 n
+0001128093 00000 n
+0002949479 00000 n
+0000123739 00000 n
+0000123823 00000 n
+0001128157 00000 n
+0002949354 00000 n
+0000123879 00000 n
+0000124039 00000 n
+0001128285 00000 n
+0002949270 00000 n
+0000124090 00000 n
+0000124195 00000 n
+0001128413 00000 n
+0002949171 00000 n
+0000124246 00000 n
+0000124328 00000 n
+0001134895 00000 n
+0002949072 00000 n
+0000124379 00000 n
+0000124484 00000 n
+0001135024 00000 n
+0002948988 00000 n
+0000124535 00000 n
+0000124640 00000 n
+0001135152 00000 n
+0002948849 00000 n
+0000124691 00000 n
+0000124841 00000 n
+0001135411 00000 n
+0002948765 00000 n
+0000124897 00000 n
+0000125029 00000 n
+0001135475 00000 n
+0002948625 00000 n
+0000125085 00000 n
+0000125316 00000 n
+0001135604 00000 n
+0002948541 00000 n
+0000125367 00000 n
+0000125431 00000 n
+0001135733 00000 n
+0002948457 00000 n
+0000125482 00000 n
+0000125546 00000 n
+0001138975 00000 n
+0002948317 00000 n
+0000125602 00000 n
+0000125782 00000 n
+0001139104 00000 n
+0002948233 00000 n
+0000125833 00000 n
+0000125930 00000 n
+0001139233 00000 n
+0002948134 00000 n
+0000125981 00000 n
+0000126078 00000 n
+0001139362 00000 n
+0002948035 00000 n
+0000126129 00000 n
+0000126203 00000 n
+0001139491 00000 n
+0002947951 00000 n
+0000126254 00000 n
+0000126366 00000 n
+0001139555 00000 n
+0002947826 00000 n
+0000126422 00000 n
+0000126582 00000 n
+0001139684 00000 n
+0002947742 00000 n
+0000126633 00000 n
+0000126715 00000 n
+0001139811 00000 n
+0002947643 00000 n
+0000126766 00000 n
+0000126899 00000 n
+0001139940 00000 n
+0002947544 00000 n
+0000126950 00000 n
+0000127022 00000 n
+0001140069 00000 n
+0002947445 00000 n
+0000127073 00000 n
+0000127140 00000 n
+0001140197 00000 n
+0002947346 00000 n
+0000127191 00000 n
+0000127268 00000 n
+0001140326 00000 n
+0002947247 00000 n
+0000127319 00000 n
+0000127391 00000 n
+0001146079 00000 n
+0002947148 00000 n
+0000127442 00000 n
+0000127509 00000 n
+0001146208 00000 n
+0002947049 00000 n
+0000127560 00000 n
+0000127642 00000 n
+0001146337 00000 n
+0002946965 00000 n
+0000127693 00000 n
+0000127770 00000 n
+0001146465 00000 n
+0002946826 00000 n
+0000127821 00000 n
+0000128185 00000 n
+0001146658 00000 n
+0002946742 00000 n
+0000128241 00000 n
+0000128373 00000 n
+0001146787 00000 n
+0002946602 00000 n
+0000128429 00000 n
+0000128660 00000 n
+0001146916 00000 n
+0002946533 00000 n
+0000128711 00000 n
+0000128815 00000 n
+0001149287 00000 n
+0002946393 00000 n
+0000128871 00000 n
+0000129051 00000 n
+0001149416 00000 n
+0002946324 00000 n
+0000129102 00000 n
+0000129179 00000 n
+0001149479 00000 n
+0002946199 00000 n
+0000129235 00000 n
+0000129395 00000 n
+0001149608 00000 n
+0002946115 00000 n
+0000129446 00000 n
+0000129495 00000 n
+0001149737 00000 n
+0002946016 00000 n
+0000129546 00000 n
+0000129600 00000 n
+0001149865 00000 n
+0002945917 00000 n
+0000129651 00000 n
+0000129718 00000 n
+0001149994 00000 n
+0002945818 00000 n
+0000129769 00000 n
+0000129841 00000 n
+0001150123 00000 n
+0002945719 00000 n
+0000129892 00000 n
+0000129974 00000 n
+0001150252 00000 n
+0002945620 00000 n
+0000130025 00000 n
+0000130084 00000 n
+0001150381 00000 n
+0002945521 00000 n
+0000130135 00000 n
+0000130194 00000 n
+0001150509 00000 n
+0002945422 00000 n
+0000130245 00000 n
+0000130294 00000 n
+0001154098 00000 n
+0002945338 00000 n
+0000130345 00000 n
+0000130389 00000 n
+0001154226 00000 n
+0002945199 00000 n
+0000130440 00000 n
+0000130595 00000 n
+0001154419 00000 n
+0002945115 00000 n
+0000130651 00000 n
+0000130783 00000 n
+0001154483 00000 n
+0002944975 00000 n
+0000130839 00000 n
+0000131070 00000 n
+0001154612 00000 n
+0002944906 00000 n
+0000131121 00000 n
+0000131185 00000 n
+0001154676 00000 n
+0002944781 00000 n
+0000131241 00000 n
+0000131401 00000 n
+0001154805 00000 n
+0002944697 00000 n
+0000131452 00000 n
+0000131506 00000 n
+0001154934 00000 n
+0002944613 00000 n
+0000131557 00000 n
+0000131629 00000 n
+0001155062 00000 n
+0002944474 00000 n
+0000131680 00000 n
+0000131919 00000 n
+0001159968 00000 n
+0002944390 00000 n
+0000131975 00000 n
+0000132107 00000 n
+0001160097 00000 n
+0002944250 00000 n
+0000132163 00000 n
+0000132338 00000 n
+0001160225 00000 n
+0002944181 00000 n
+0000132389 00000 n
+0000132443 00000 n
+0001160289 00000 n
+0002944041 00000 n
+0000132499 00000 n
+0000132730 00000 n
+0001160418 00000 n
+0002943972 00000 n
+0000132781 00000 n
+0000132855 00000 n
+0001160482 00000 n
+0002943832 00000 n
+0000132911 00000 n
+0000133091 00000 n
+0001160610 00000 n
+0002943748 00000 n
+0000133142 00000 n
+0000133219 00000 n
+0001160739 00000 n
+0002943664 00000 n
+0000133270 00000 n
+0000133362 00000 n
+0001160803 00000 n
+0002943539 00000 n
+0000133418 00000 n
+0000133578 00000 n
+0001160932 00000 n
+0002943455 00000 n
+0000133629 00000 n
+0000133691 00000 n
+0001161061 00000 n
+0002943371 00000 n
+0000133742 00000 n
+0000133804 00000 n
+0001161189 00000 n
+0002943232 00000 n
+0000133855 00000 n
+0000134030 00000 n
+0001164932 00000 n
+0002943148 00000 n
+0000134086 00000 n
+0000134218 00000 n
+0001164996 00000 n
+0002943008 00000 n
+0000134274 00000 n
+0000134505 00000 n
+0001165125 00000 n
+0002942939 00000 n
+0000134556 00000 n
+0000134640 00000 n
+0001165189 00000 n
+0002942814 00000 n
+0000134696 00000 n
+0000134856 00000 n
+0001165318 00000 n
+0002942730 00000 n
+0000134907 00000 n
+0000134956 00000 n
+0001165447 00000 n
+0002942631 00000 n
+0000135007 00000 n
+0000135056 00000 n
+0001165575 00000 n
+0002942532 00000 n
+0000135107 00000 n
+0000135166 00000 n
+0001165704 00000 n
+0002942433 00000 n
+0000135217 00000 n
+0000135276 00000 n
+0001165833 00000 n
+0002942349 00000 n
+0000135327 00000 n
+0000135376 00000 n
+0001170591 00000 n
+0002942210 00000 n
+0000135427 00000 n
+0000135577 00000 n
+0001170784 00000 n
+0002942126 00000 n
+0000135633 00000 n
+0000135765 00000 n
+0001170848 00000 n
+0002941986 00000 n
+0000135821 00000 n
+0000136052 00000 n
+0001170977 00000 n
+0002941902 00000 n
+0000136103 00000 n
+0000136162 00000 n
+0001171106 00000 n
+0002941818 00000 n
+0000136213 00000 n
+0000136272 00000 n
+0001171170 00000 n
+0002941678 00000 n
+0000136328 00000 n
+0000136508 00000 n
+0001171298 00000 n
+0002941594 00000 n
+0000136559 00000 n
+0000136659 00000 n
+0001171427 00000 n
+0002941495 00000 n
+0000136710 00000 n
+0000136802 00000 n
+0001171556 00000 n
+0002941411 00000 n
+0000136853 00000 n
+0000136945 00000 n
+0001171620 00000 n
+0002941286 00000 n
+0000137001 00000 n
+0000137161 00000 n
+0001171749 00000 n
+0002941202 00000 n
+0000137212 00000 n
+0000137360 00000 n
+0001171878 00000 n
+0002941103 00000 n
+0000137411 00000 n
+0000137501 00000 n
+0001178397 00000 n
+0002941019 00000 n
+0000137552 00000 n
+0000137639 00000 n
+0001178524 00000 n
+0002940880 00000 n
+0000137690 00000 n
+0000137845 00000 n
+0001183450 00000 n
+0002940796 00000 n
+0000137901 00000 n
+0000138033 00000 n
+0001183513 00000 n
+0002940670 00000 n
+0000138089 00000 n
+0000138249 00000 n
+0001183642 00000 n
+0002940586 00000 n
+0000138300 00000 n
+0000138344 00000 n
+0001183771 00000 n
+0002940487 00000 n
+0000138395 00000 n
+0000138439 00000 n
+0001183901 00000 n
+0002940388 00000 n
+0000138490 00000 n
+0000138544 00000 n
+0001184029 00000 n
+0002940289 00000 n
+0000138595 00000 n
+0000138649 00000 n
+0001190316 00000 n
+0002940190 00000 n
+0000138700 00000 n
+0000138782 00000 n
+0001190445 00000 n
+0002940091 00000 n
+0000138833 00000 n
+0000138905 00000 n
+0001190574 00000 n
+0002939992 00000 n
+0000138956 00000 n
+0000139005 00000 n
+0001190703 00000 n
+0002939893 00000 n
+0000139056 00000 n
+0000139105 00000 n
+0001190832 00000 n
+0002939794 00000 n
+0000139156 00000 n
+0000139210 00000 n
+0001190961 00000 n
+0002939695 00000 n
+0000139261 00000 n
+0000139335 00000 n
+0001197687 00000 n
+0002939596 00000 n
+0000139386 00000 n
+0000139435 00000 n
+0001197816 00000 n
+0002939497 00000 n
+0000139486 00000 n
+0000139530 00000 n
+0001197945 00000 n
+0002939398 00000 n
+0000139581 00000 n
+0000139635 00000 n
+0001198074 00000 n
+0002939299 00000 n
+0000139686 00000 n
+0000139753 00000 n
+0001201060 00000 n
+0002939200 00000 n
+0000139804 00000 n
+0000139886 00000 n
+0001201189 00000 n
+0002939101 00000 n
+0000139937 00000 n
+0000139976 00000 n
+0001201318 00000 n
+0002939002 00000 n
+0000140027 00000 n
+0000140076 00000 n
+0001201447 00000 n
+0002938903 00000 n
+0000140127 00000 n
+0000140232 00000 n
+0001201576 00000 n
+0002938804 00000 n
+0000140283 00000 n
+0000140388 00000 n
+0001201705 00000 n
+0002938705 00000 n
+0000140439 00000 n
+0000140534 00000 n
+0001201834 00000 n
+0002938606 00000 n
+0000140585 00000 n
+0000140662 00000 n
+0001207818 00000 n
+0002938507 00000 n
+0000140713 00000 n
+0000140818 00000 n
+0001207946 00000 n
+0002938408 00000 n
+0000140869 00000 n
+0000140951 00000 n
+0001208074 00000 n
+0002938309 00000 n
+0000141002 00000 n
+0000141061 00000 n
+0001208203 00000 n
+0002938210 00000 n
+0000141112 00000 n
+0000141156 00000 n
+0001208332 00000 n
+0002938111 00000 n
+0000141207 00000 n
+0000141251 00000 n
+0001215940 00000 n
+0002938012 00000 n
+0000141302 00000 n
+0000141407 00000 n
+0001216069 00000 n
+0002937913 00000 n
+0000141458 00000 n
+0000141535 00000 n
+0001216198 00000 n
+0002937814 00000 n
+0000141586 00000 n
+0000141635 00000 n
+0001216326 00000 n
+0002937715 00000 n
+0000141686 00000 n
+0000141730 00000 n
+0001216455 00000 n
+0002937631 00000 n
+0000141781 00000 n
+0000141830 00000 n
+0001221940 00000 n
+0002937492 00000 n
+0000141881 00000 n
+0000142041 00000 n
+0001222068 00000 n
+0002937408 00000 n
+0000142097 00000 n
+0000142229 00000 n
+0001222131 00000 n
+0002937283 00000 n
+0000142285 00000 n
+0000142445 00000 n
+0001222260 00000 n
+0002937199 00000 n
+0000142496 00000 n
+0000142550 00000 n
+0001222389 00000 n
+0002937115 00000 n
+0000142601 00000 n
+0000142655 00000 n
+0001222517 00000 n
+0002936976 00000 n
+0000142706 00000 n
+0000142866 00000 n
+0001229363 00000 n
+0002936892 00000 n
+0000142922 00000 n
+0000143054 00000 n
+0001229427 00000 n
+0002936766 00000 n
+0000143110 00000 n
+0000143270 00000 n
+0001229556 00000 n
+0002936682 00000 n
+0000143321 00000 n
+0000143408 00000 n
+0001229685 00000 n
+0002936583 00000 n
+0000143459 00000 n
+0000143561 00000 n
+0001229814 00000 n
+0002936484 00000 n
+0000143612 00000 n
+0000143717 00000 n
+0001229943 00000 n
+0002936385 00000 n
+0000143768 00000 n
+0000143855 00000 n
+0001233952 00000 n
+0002936286 00000 n
+0000143906 00000 n
+0000143998 00000 n
+0001234080 00000 n
+0002936187 00000 n
+0000144049 00000 n
+0000144156 00000 n
+0001234209 00000 n
+0002936088 00000 n
+0000144207 00000 n
+0000144299 00000 n
+0001234336 00000 n
+0002935989 00000 n
+0000144350 00000 n
+0000144450 00000 n
+0001234465 00000 n
+0002935890 00000 n
+0000144501 00000 n
+0000144598 00000 n
+0001234594 00000 n
+0002935791 00000 n
+0000144649 00000 n
+0000144731 00000 n
+0001234722 00000 n
+0002935707 00000 n
+0000144782 00000 n
+0000144859 00000 n
+0001240582 00000 n
+0002935568 00000 n
+0000144910 00000 n
+0000145165 00000 n
+0001240711 00000 n
+0002935484 00000 n
+0000145221 00000 n
+0000145353 00000 n
+0001240774 00000 n
+0002935359 00000 n
+0000145409 00000 n
+0000145569 00000 n
+0001240903 00000 n
+0002935275 00000 n
+0000145620 00000 n
+0000145697 00000 n
+0001241032 00000 n
+0002935176 00000 n
+0000145748 00000 n
+0000145820 00000 n
+0001241161 00000 n
+0002935077 00000 n
+0000145871 00000 n
+0000145953 00000 n
+0001241290 00000 n
+0002934978 00000 n
+0000146004 00000 n
+0000146076 00000 n
+0001241418 00000 n
+0002934879 00000 n
+0000146127 00000 n
+0000146230 00000 n
+0001241547 00000 n
+0002934780 00000 n
+0000146281 00000 n
+0000146386 00000 n
+0001247359 00000 n
+0002934681 00000 n
+0000146437 00000 n
+0000146532 00000 n
+0001247487 00000 n
+0002934582 00000 n
+0000146583 00000 n
+0000146678 00000 n
+0001247616 00000 n
+0002934498 00000 n
+0000146729 00000 n
+0000146801 00000 n
+0001247744 00000 n
+0002934359 00000 n
+0000146852 00000 n
+0000147002 00000 n
+0001248067 00000 n
+0002934275 00000 n
+0000147058 00000 n
+0000147190 00000 n
+0001251283 00000 n
+0002934135 00000 n
+0000147246 00000 n
+0000147477 00000 n
+0001251412 00000 n
+0002934066 00000 n
+0000147528 00000 n
+0000147592 00000 n
+0001251476 00000 n
+0002933941 00000 n
+0000147648 00000 n
+0000147828 00000 n
+0001251604 00000 n
+0002933857 00000 n
+0000147879 00000 n
+0000147933 00000 n
+0001251733 00000 n
+0002933758 00000 n
+0000147984 00000 n
+0000148033 00000 n
+0001251862 00000 n
+0002933659 00000 n
+0000148084 00000 n
+0000148128 00000 n
+0001251991 00000 n
+0002933560 00000 n
+0000148179 00000 n
+0000148261 00000 n
+0001252120 00000 n
+0002933461 00000 n
+0000148312 00000 n
+0000148432 00000 n
+0001252248 00000 n
+0002933377 00000 n
+0000148483 00000 n
+0000148565 00000 n
+0001252375 00000 n
+0002933238 00000 n
+0000148616 00000 n
+0000148776 00000 n
+0001252569 00000 n
+0002933154 00000 n
+0000148832 00000 n
+0000148964 00000 n
+0001256491 00000 n
+0002933029 00000 n
+0000149020 00000 n
+0000149180 00000 n
+0001256620 00000 n
+0002932960 00000 n
+0000149231 00000 n
+0000149295 00000 n
+0001256747 00000 n
+0002932836 00000 n
+0000149346 00000 n
+0000149561 00000 n
+0001256941 00000 n
+0002932752 00000 n
+0000149617 00000 n
+0000149749 00000 n
+0001257005 00000 n
+0002932612 00000 n
+0000149805 00000 n
+0000150036 00000 n
+0001257134 00000 n
+0002932528 00000 n
+0000150087 00000 n
+0000150156 00000 n
+0001257263 00000 n
+0002932444 00000 n
+0000150207 00000 n
+0000150276 00000 n
+0001257327 00000 n
+0002932319 00000 n
+0000150332 00000 n
+0000150492 00000 n
+0001257456 00000 n
+0002932235 00000 n
+0000150543 00000 n
+0000150610 00000 n
+0001257585 00000 n
+0002932136 00000 n
+0000150661 00000 n
+0000150761 00000 n
+0001257714 00000 n
+0002932052 00000 n
+0000150812 00000 n
+0000150871 00000 n
+0001265549 00000 n
+0002931911 00000 n
+0000150919 00000 n
+0000151041 00000 n
+0001265677 00000 n
+0002931786 00000 n
+0000151091 00000 n
+0000151269 00000 n
+0001265935 00000 n
+0002931661 00000 n
+0000151324 00000 n
+0000151461 00000 n
+0001266064 00000 n
+0002931592 00000 n
+0000151512 00000 n
+0000151556 00000 n
+0001266128 00000 n
+0002931452 00000 n
+0000151611 00000 n
+0000151753 00000 n
+0001266257 00000 n
+0002931368 00000 n
+0000151804 00000 n
+0000151991 00000 n
+0001269634 00000 n
+0002931269 00000 n
+0000152042 00000 n
+0000152180 00000 n
+0001269763 00000 n
+0002931170 00000 n
+0000152231 00000 n
+0000152351 00000 n
+0001269892 00000 n
+0002931071 00000 n
+0000152402 00000 n
+0000152532 00000 n
+0001270021 00000 n
+0002930972 00000 n
+0000152583 00000 n
+0000152764 00000 n
+0001270150 00000 n
+0002930873 00000 n
+0000152815 00000 n
+0000152940 00000 n
+0001270279 00000 n
+0002930774 00000 n
+0000152991 00000 n
+0000153096 00000 n
+0001270407 00000 n
+0002930675 00000 n
+0000153147 00000 n
+0000153313 00000 n
+0001270536 00000 n
+0002930591 00000 n
+0000153364 00000 n
+0000153512 00000 n
+0001270600 00000 n
+0002930466 00000 n
+0000153567 00000 n
+0000153709 00000 n
+0001270729 00000 n
+0002930382 00000 n
+0000153760 00000 n
+0000153837 00000 n
+0001270857 00000 n
+0002930298 00000 n
+0000153888 00000 n
+0000153970 00000 n
+0001270985 00000 n
+0002930158 00000 n
+0000154020 00000 n
+0000154188 00000 n
+0001278808 00000 n
+0002930033 00000 n
+0000154243 00000 n
+0000154428 00000 n
+0001278937 00000 n
+0002929949 00000 n
+0000154479 00000 n
+0000154595 00000 n
+0001279066 00000 n
+0002929865 00000 n
+0000154646 00000 n
+0000154772 00000 n
+0001279130 00000 n
+0002929740 00000 n
+0000154827 00000 n
+0000154969 00000 n
+0001279259 00000 n
+0002929656 00000 n
+0000155020 00000 n
+0000155207 00000 n
+0001279388 00000 n
+0002929557 00000 n
+0000155258 00000 n
+0000155396 00000 n
+0001279516 00000 n
+0002929458 00000 n
+0000155447 00000 n
+0000155567 00000 n
+0001279645 00000 n
+0002929359 00000 n
+0000155618 00000 n
+0000155723 00000 n
+0001279773 00000 n
+0002929260 00000 n
+0000155774 00000 n
+0000155940 00000 n
+0001288250 00000 n
+0002929176 00000 n
+0000155991 00000 n
+0000156139 00000 n
+0001288378 00000 n
+0002929036 00000 n
+0000156189 00000 n
+0000156392 00000 n
+0001293521 00000 n
+0002928926 00000 n
+0000156447 00000 n
+0000156632 00000 n
+0001293650 00000 n
+0002928842 00000 n
+0000156683 00000 n
+0000156775 00000 n
+0001293779 00000 n
+0002928758 00000 n
+0000156826 00000 n
+0000156918 00000 n
+0001293907 00000 n
+0002928618 00000 n
+0000156968 00000 n
+0000157161 00000 n
+0001294165 00000 n
+0002928508 00000 n
+0000157216 00000 n
+0000157401 00000 n
+0001294294 00000 n
+0002928439 00000 n
+0000157452 00000 n
+0000157562 00000 n
+0001299189 00000 n
+0002928299 00000 n
+0000157612 00000 n
+0000157815 00000 n
+0001299318 00000 n
+0002928189 00000 n
+0000157870 00000 n
+0000158012 00000 n
+0001299447 00000 n
+0002928105 00000 n
+0000158063 00000 n
+0000158165 00000 n
+0001299576 00000 n
+0002928006 00000 n
+0000158216 00000 n
+0000158303 00000 n
+0001299705 00000 n
+0002927907 00000 n
+0000158354 00000 n
+0000158497 00000 n
+0001299833 00000 n
+0002927823 00000 n
+0000158548 00000 n
+0000158691 00000 n
+0001299961 00000 n
+0002927683 00000 n
+0000158741 00000 n
+0000158934 00000 n
+0001307092 00000 n
+0002927573 00000 n
+0000158989 00000 n
+0000159174 00000 n
+0001307221 00000 n
+0002927489 00000 n
+0000159225 00000 n
+0000159314 00000 n
+0001307349 00000 n
+0002927390 00000 n
+0000159365 00000 n
+0000159474 00000 n
+0001307478 00000 n
+0002927291 00000 n
+0000159525 00000 n
+0000159624 00000 n
+0001307603 00000 n
+0002927192 00000 n
+0000159675 00000 n
+0000159874 00000 n
+0001317661 00000 n
+0002927108 00000 n
+0000159925 00000 n
+0000160064 00000 n
+0001317789 00000 n
+0002926968 00000 n
+0000160114 00000 n
+0000160330 00000 n
+0001317983 00000 n
+0002926843 00000 n
+0000160385 00000 n
+0000160527 00000 n
+0001318112 00000 n
+0002926759 00000 n
+0000160578 00000 n
+0000160703 00000 n
+0001318241 00000 n
+0002926660 00000 n
+0000160754 00000 n
+0000160861 00000 n
+0001318370 00000 n
+0002926561 00000 n
+0000160912 00000 n
+0000161024 00000 n
+0001328368 00000 n
+0002926462 00000 n
+0000161075 00000 n
+0000161187 00000 n
+0001328497 00000 n
+0002926363 00000 n
+0000161238 00000 n
+0000161373 00000 n
+0001328626 00000 n
+0002926264 00000 n
+0000161424 00000 n
+0000161569 00000 n
+0001328754 00000 n
+0002926180 00000 n
+0000161620 00000 n
+0000161770 00000 n
+0001328818 00000 n
+0002926055 00000 n
+0000161825 00000 n
+0000161967 00000 n
+0001328947 00000 n
+0002925986 00000 n
+0000162018 00000 n
+0000162143 00000 n
+0001329075 00000 n
+0002925846 00000 n
+0000162193 00000 n
+0000162399 00000 n
+0001335564 00000 n
+0002925762 00000 n
+0000162454 00000 n
+0000162586 00000 n
+0001335628 00000 n
+0002925622 00000 n
+0000162641 00000 n
+0000162826 00000 n
+0001335757 00000 n
+0002925538 00000 n
+0000162877 00000 n
+0000163002 00000 n
+0001335886 00000 n
+0002925439 00000 n
+0000163053 00000 n
+0000163160 00000 n
+0001336015 00000 n
+0002925340 00000 n
+0000163211 00000 n
+0000163323 00000 n
+0001336143 00000 n
+0002925241 00000 n
+0000163374 00000 n
+0000163486 00000 n
+0001341208 00000 n
+0002925142 00000 n
+0000163537 00000 n
+0000163682 00000 n
+0001341337 00000 n
+0002925058 00000 n
+0000163733 00000 n
+0000163883 00000 n
+0001341401 00000 n
+0002924933 00000 n
+0000163938 00000 n
+0000164080 00000 n
+0001341530 00000 n
+0002924849 00000 n
+0000164131 00000 n
+0000164256 00000 n
+0001341659 00000 n
+0002924750 00000 n
+0000164307 00000 n
+0000164414 00000 n
+0001341788 00000 n
+0002924651 00000 n
+0000164465 00000 n
+0000164577 00000 n
+0001348008 00000 n
+0002924552 00000 n
+0000164628 00000 n
+0000164740 00000 n
+0001348137 00000 n
+0002924453 00000 n
+0000164791 00000 n
+0000164936 00000 n
+0001348266 00000 n
+0002924369 00000 n
+0000164987 00000 n
+0000165137 00000 n
+0001348394 00000 n
+0002924229 00000 n
+0000165187 00000 n
+0000165413 00000 n
+0001348523 00000 n
+0002924119 00000 n
+0000165468 00000 n
+0000165610 00000 n
+0001348652 00000 n
+0002924035 00000 n
+0000165661 00000 n
+0000165796 00000 n
+0001348780 00000 n
+0002923936 00000 n
+0000165847 00000 n
+0000165982 00000 n
+0001348909 00000 n
+0002923852 00000 n
+0000166033 00000 n
+0000166163 00000 n
+0001349037 00000 n
+0002923712 00000 n
+0000166214 00000 n
+0000166430 00000 n
+0001356688 00000 n
+0002923628 00000 n
+0000166486 00000 n
+0000166618 00000 n
+0001356752 00000 n
+0002923488 00000 n
+0000166674 00000 n
+0000166859 00000 n
+0001356881 00000 n
+0002923404 00000 n
+0000166910 00000 n
+0000167045 00000 n
+0001357009 00000 n
+0002923305 00000 n
+0000167096 00000 n
+0000167231 00000 n
+0001357138 00000 n
+0002923221 00000 n
+0000167282 00000 n
+0000167412 00000 n
+0001357202 00000 n
+0002923096 00000 n
+0000167468 00000 n
+0000167610 00000 n
+0001357331 00000 n
+0002923012 00000 n
+0000167661 00000 n
+0000167796 00000 n
+0001362395 00000 n
+0002922913 00000 n
+0000167847 00000 n
+0000167982 00000 n
+0001362524 00000 n
+0002922829 00000 n
+0000168033 00000 n
+0000168163 00000 n
+0001362652 00000 n
+0002922689 00000 n
+0000168214 00000 n
+0000168382 00000 n
+0001362781 00000 n
+0002922579 00000 n
+0000168438 00000 n
+0000168580 00000 n
+0001362909 00000 n
+0002922495 00000 n
+0000168631 00000 n
+0000168752 00000 n
+0001363038 00000 n
+0002922396 00000 n
+0000168803 00000 n
+0000168924 00000 n
+0001363167 00000 n
+0002922297 00000 n
+0000168975 00000 n
+0000169101 00000 n
+0001363296 00000 n
+0002922198 00000 n
+0000169152 00000 n
+0000169283 00000 n
+0001363425 00000 n
+0002922114 00000 n
+0000169334 00000 n
+0000169467 00000 n
+0001363553 00000 n
+0002921974 00000 n
+0000169518 00000 n
+0000169676 00000 n
+0001370538 00000 n
+0002921849 00000 n
+0000169732 00000 n
+0000169917 00000 n
+0001370667 00000 n
+0002921765 00000 n
+0000169968 00000 n
+0000170079 00000 n
+0001370795 00000 n
+0002921666 00000 n
+0000170130 00000 n
+0000170269 00000 n
+0001370924 00000 n
+0002921567 00000 n
+0000170320 00000 n
+0000170444 00000 n
+0001371053 00000 n
+0002921468 00000 n
+0000170495 00000 n
+0000170629 00000 n
+0001371181 00000 n
+0002921384 00000 n
+0000170680 00000 n
+0000170804 00000 n
+0001371245 00000 n
+0002921244 00000 n
+0000170860 00000 n
+0000170997 00000 n
+0001371374 00000 n
+0002921160 00000 n
+0000171048 00000 n
+0000171112 00000 n
+0001371503 00000 n
+0002921061 00000 n
+0000171163 00000 n
+0000171227 00000 n
+0001371631 00000 n
+0002920962 00000 n
+0000171278 00000 n
+0000171345 00000 n
+0001371760 00000 n
+0002920878 00000 n
+0000171396 00000 n
+0000171465 00000 n
+0001376148 00000 n
+0002920753 00000 n
+0000171521 00000 n
+0000171663 00000 n
+0001376277 00000 n
+0002920669 00000 n
+0000171714 00000 n
+0000171835 00000 n
+0001376406 00000 n
+0002920570 00000 n
+0000171886 00000 n
+0000172007 00000 n
+0001376535 00000 n
+0002920471 00000 n
+0000172058 00000 n
+0000172184 00000 n
+0001376664 00000 n
+0002920372 00000 n
+0000172235 00000 n
+0000172366 00000 n
+0001376792 00000 n
+0002920288 00000 n
+0000172417 00000 n
+0000172550 00000 n
+0001376918 00000 n
+0002920148 00000 n
+0000172601 00000 n
+0000172804 00000 n
+0001377112 00000 n
+0002920023 00000 n
+0000172860 00000 n
+0000173045 00000 n
+0001377237 00000 n
+0002919954 00000 n
+0000173096 00000 n
+0000173163 00000 n
+0001377301 00000 n
+0002919829 00000 n
+0000173219 00000 n
+0000173361 00000 n
+0001377430 00000 n
+0002919745 00000 n
+0000173412 00000 n
+0000173583 00000 n
+0001377559 00000 n
+0002919646 00000 n
+0000173634 00000 n
+0000173800 00000 n
+0001416790 00000 n
+0002919547 00000 n
+0000173851 00000 n
+0000173999 00000 n
+0001416919 00000 n
+0002919463 00000 n
+0000174050 00000 n
+0000174226 00000 n
+0001417047 00000 n
+0002919323 00000 n
+0000174277 00000 n
+0000174513 00000 n
+0001436699 00000 n
+0002919198 00000 n
+0000174569 00000 n
+0000174754 00000 n
+0001436828 00000 n
+0002919114 00000 n
+0000174805 00000 n
+0000174917 00000 n
+0001436957 00000 n
+0002919015 00000 n
+0000174968 00000 n
+0000175080 00000 n
+0001437086 00000 n
+0002918916 00000 n
+0000175131 00000 n
+0000175226 00000 n
+0001440794 00000 n
+0002918832 00000 n
+0000175277 00000 n
+0000175377 00000 n
+0001440858 00000 n
+0002918692 00000 n
+0000175433 00000 n
+0000175618 00000 n
+0001440986 00000 n
+0002918608 00000 n
+0000175669 00000 n
+0000175756 00000 n
+0001457670 00000 n
+0002918509 00000 n
+0000175807 00000 n
+0000175916 00000 n
+0001459161 00000 n
+0002918425 00000 n
+0000175967 00000 n
+0000176086 00000 n
+0001459875 00000 n
+0002918300 00000 n
+0000176142 00000 n
+0000176284 00000 n
+0001460004 00000 n
+0002918216 00000 n
+0000176335 00000 n
+0000176506 00000 n
+0001464017 00000 n
+0002918117 00000 n
+0000176557 00000 n
+0000176733 00000 n
+0001464146 00000 n
+0002918018 00000 n
+0000176784 00000 n
+0000176937 00000 n
+0001464275 00000 n
+0002917919 00000 n
+0000176988 00000 n
+0000177154 00000 n
+0001464404 00000 n
+0002917820 00000 n
+0000177205 00000 n
+0000177353 00000 n
+0001464533 00000 n
+0002917721 00000 n
+0000177404 00000 n
+0000177580 00000 n
+0001464662 00000 n
+0002917637 00000 n
+0000177631 00000 n
+0000177728 00000 n
+0001464788 00000 n
+0002917497 00000 n
+0000177779 00000 n
+0000177972 00000 n
+0001464982 00000 n
+0002917372 00000 n
+0000178028 00000 n
+0000178213 00000 n
+0001465111 00000 n
+0002917303 00000 n
+0000178264 00000 n
+0000178389 00000 n
+0001465175 00000 n
+0002917178 00000 n
+0000178445 00000 n
+0000178587 00000 n
+0001465304 00000 n
+0002917094 00000 n
+0000178638 00000 n
+0000178791 00000 n
+0001465433 00000 n
+0002917010 00000 n
+0000178842 00000 n
+0000178939 00000 n
+0001512321 00000 n
+0002916870 00000 n
+0000178990 00000 n
+0000179183 00000 n
+0001520766 00000 n
+0002916745 00000 n
+0000179239 00000 n
+0000179424 00000 n
+0001520895 00000 n
+0002916676 00000 n
+0000179475 00000 n
+0000179600 00000 n
+0001520958 00000 n
+0002916536 00000 n
+0000179656 00000 n
+0000179841 00000 n
+0001521087 00000 n
+0002916467 00000 n
+0000179892 00000 n
+0000179994 00000 n
+0001540761 00000 n
+0002916342 00000 n
+0000180050 00000 n
+0000180192 00000 n
+0001540890 00000 n
+0002916273 00000 n
+0000180243 00000 n
+0000180368 00000 n
+0001554097 00000 n
+0002916174 00000 n
+0000180419 00000 n
+0000180587 00000 n
+0001554290 00000 n
+0002916034 00000 n
+0000180638 00000 n
+0000180793 00000 n
+0001592044 00000 n
+0002915909 00000 n
+0000180849 00000 n
+0000181034 00000 n
+0001592173 00000 n
+0002915825 00000 n
+0000181085 00000 n
+0000181225 00000 n
+0001592302 00000 n
+0002915726 00000 n
+0000181276 00000 n
+0000181406 00000 n
+0001592431 00000 n
+0002915627 00000 n
+0000181457 00000 n
+0000181587 00000 n
+0001592559 00000 n
+0002915528 00000 n
+0000181638 00000 n
+0000181803 00000 n
+0001592688 00000 n
+0002915444 00000 n
+0000181854 00000 n
+0000181966 00000 n
+0001595140 00000 n
+0002915304 00000 n
+0000182022 00000 n
+0000182159 00000 n
+0001595269 00000 n
+0002915235 00000 n
+0000182210 00000 n
+0000182297 00000 n
+0001595333 00000 n
+0002915095 00000 n
+0000182353 00000 n
+0000182538 00000 n
+0001595460 00000 n
+0002915011 00000 n
+0000182589 00000 n
+0000182699 00000 n
+0001595977 00000 n
+0002914927 00000 n
+0000182750 00000 n
+0000182837 00000 n
+0001596235 00000 n
+0002914801 00000 n
+0000182893 00000 n
+0000183035 00000 n
+0001596364 00000 n
+0002914717 00000 n
+0000183086 00000 n
+0000183257 00000 n
+0001596493 00000 n
+0002914618 00000 n
+0000183308 00000 n
+0000183527 00000 n
+0001596622 00000 n
+0002914519 00000 n
+0000183578 00000 n
+0000183749 00000 n
+0001596750 00000 n
+0002914420 00000 n
+0000183800 00000 n
+0000183910 00000 n
+0001596879 00000 n
+0002914321 00000 n
+0000183961 00000 n
+0000184142 00000 n
+0001597008 00000 n
+0002914222 00000 n
+0000184193 00000 n
+0000184384 00000 n
+0001597137 00000 n
+0002914123 00000 n
+0000184435 00000 n
+0000184573 00000 n
+0001600792 00000 n
+0002914024 00000 n
+0000184624 00000 n
+0000184772 00000 n
+0001600921 00000 n
+0002913925 00000 n
+0000184823 00000 n
+0000184943 00000 n
+0001601049 00000 n
+0002913826 00000 n
+0000184994 00000 n
+0000185190 00000 n
+0001601177 00000 n
+0002913727 00000 n
+0000185241 00000 n
+0000185442 00000 n
+0001601306 00000 n
+0002913628 00000 n
+0000185493 00000 n
+0000185702 00000 n
+0001601435 00000 n
+0002913529 00000 n
+0000185753 00000 n
+0000185957 00000 n
+0001601564 00000 n
+0002913430 00000 n
+0000186008 00000 n
+0000186161 00000 n
+0001601692 00000 n
+0002913331 00000 n
+0000186212 00000 n
+0000186370 00000 n
+0001601821 00000 n
+0002913232 00000 n
+0000186421 00000 n
+0000186569 00000 n
+0001601950 00000 n
+0002913133 00000 n
+0000186620 00000 n
+0000186791 00000 n
+0001602079 00000 n
+0002913034 00000 n
+0000186842 00000 n
+0000187000 00000 n
+0001602208 00000 n
+0002912935 00000 n
+0000187051 00000 n
+0000187260 00000 n
+0001602337 00000 n
+0002912836 00000 n
+0000187311 00000 n
+0000187464 00000 n
+0001605763 00000 n
+0002912737 00000 n
+0000187515 00000 n
+0000187673 00000 n
+0001605891 00000 n
+0002912638 00000 n
+0000187724 00000 n
+0000187877 00000 n
+0001606020 00000 n
+0002912539 00000 n
+0000187928 00000 n
+0000188114 00000 n
+0001606149 00000 n
+0002912440 00000 n
+0000188165 00000 n
+0000188313 00000 n
+0001606278 00000 n
+0002912341 00000 n
+0000188364 00000 n
+0000188570 00000 n
+0001606407 00000 n
+0002912242 00000 n
+0000188621 00000 n
+0000188827 00000 n
+0001606536 00000 n
+0002912143 00000 n
+0000188878 00000 n
+0000189049 00000 n
+0001606665 00000 n
+0002912044 00000 n
+0000189100 00000 n
+0000189258 00000 n
+0001606794 00000 n
+0002911945 00000 n
+0000189309 00000 n
+0000189528 00000 n
+0001606923 00000 n
+0002911846 00000 n
+0000189579 00000 n
+0000189732 00000 n
+0001607051 00000 n
+0002911747 00000 n
+0000189783 00000 n
+0000189964 00000 n
+0001607180 00000 n
+0002911648 00000 n
+0000190015 00000 n
+0000190163 00000 n
+0001607307 00000 n
+0002911549 00000 n
+0000190214 00000 n
+0000190362 00000 n
+0001607436 00000 n
+0002911450 00000 n
+0000190413 00000 n
+0000190584 00000 n
+0001607565 00000 n
+0002911351 00000 n
+0000190635 00000 n
+0000190778 00000 n
+0001611049 00000 n
+0002911252 00000 n
+0000190829 00000 n
+0000190962 00000 n
+0001611178 00000 n
+0002911153 00000 n
+0000191013 00000 n
+0000191174 00000 n
+0001611307 00000 n
+0002911054 00000 n
+0000191225 00000 n
+0000191378 00000 n
+0001611436 00000 n
+0002910955 00000 n
+0000191429 00000 n
+0000191567 00000 n
+0001611565 00000 n
+0002910856 00000 n
+0000191618 00000 n
+0000191784 00000 n
+0001611693 00000 n
+0002910757 00000 n
+0000191835 00000 n
+0000191983 00000 n
+0001611822 00000 n
+0002910658 00000 n
+0000192034 00000 n
+0000192182 00000 n
+0001611950 00000 n
+0002910559 00000 n
+0000192233 00000 n
+0000192366 00000 n
+0001612079 00000 n
+0002910460 00000 n
+0000192417 00000 n
+0000192578 00000 n
+0001612208 00000 n
+0002910361 00000 n
+0000192629 00000 n
+0000192772 00000 n
+0001612337 00000 n
+0002910262 00000 n
+0000192823 00000 n
+0000192994 00000 n
+0001612466 00000 n
+0002910163 00000 n
+0000193045 00000 n
+0000193198 00000 n
+0001612595 00000 n
+0002910064 00000 n
+0000193249 00000 n
+0000193387 00000 n
+0001612724 00000 n
+0002909965 00000 n
+0000193438 00000 n
+0000193604 00000 n
+0001616347 00000 n
+0002909866 00000 n
+0000193655 00000 n
+0000193798 00000 n
+0001616476 00000 n
+0002909782 00000 n
+0000193849 00000 n
+0000194020 00000 n
+0001616604 00000 n
+0002909642 00000 n
+0000194071 00000 n
+0000194274 00000 n
+0001616732 00000 n
+0002909532 00000 n
+0000194330 00000 n
+0000194472 00000 n
+0001616860 00000 n
+0002909463 00000 n
+0000194523 00000 n
+0000194625 00000 n
+0001616988 00000 n
+0002909323 00000 n
+0000194676 00000 n
+0000194869 00000 n
+0001639528 00000 n
+0002909239 00000 n
+0000194925 00000 n
+0000195057 00000 n
+0001639592 00000 n
+0002909098 00000 n
+0000195113 00000 n
+0000195298 00000 n
+0001639720 00000 n
+0002909014 00000 n
+0000195349 00000 n
+0000195507 00000 n
+0001639849 00000 n
+0002908915 00000 n
+0000195558 00000 n
+0000195678 00000 n
+0001639978 00000 n
+0002908816 00000 n
+0000195729 00000 n
+0000195897 00000 n
+0001640107 00000 n
+0002908717 00000 n
+0000195948 00000 n
+0000196063 00000 n
+0001640236 00000 n
+0002908618 00000 n
+0000196114 00000 n
+0000196206 00000 n
+0001640365 00000 n
+0002908519 00000 n
+0000196257 00000 n
+0000196359 00000 n
+0001640494 00000 n
+0002908420 00000 n
+0000196410 00000 n
+0000196512 00000 n
+0001640623 00000 n
+0002908321 00000 n
+0000196563 00000 n
+0000196660 00000 n
+0001640752 00000 n
+0002908222 00000 n
+0000196711 00000 n
+0000196847 00000 n
+0001646312 00000 n
+0002908123 00000 n
+0000196898 00000 n
+0000197067 00000 n
+0001646440 00000 n
+0002908024 00000 n
+0000197118 00000 n
+0000197231 00000 n
+0001646569 00000 n
+0002907940 00000 n
+0000197282 00000 n
+0000197410 00000 n
+0001646633 00000 n
+0002907800 00000 n
+0000197466 00000 n
+0000197603 00000 n
+0001646762 00000 n
+0002907731 00000 n
+0000197654 00000 n
+0000197718 00000 n
+0001646826 00000 n
+0002907591 00000 n
+0000197774 00000 n
+0000197959 00000 n
+0001646955 00000 n
+0002907507 00000 n
+0000198010 00000 n
+0000198114 00000 n
+0001651271 00000 n
+0002907423 00000 n
+0000198165 00000 n
+0000198294 00000 n
+0001651660 00000 n
+0002907283 00000 n
+0000198350 00000 n
+0000198492 00000 n
+0001651788 00000 n
+0002907214 00000 n
+0000198543 00000 n
+0000198645 00000 n
+0001651852 00000 n
+0002907088 00000 n
+0000198701 00000 n
+0000198843 00000 n
+0001651981 00000 n
+0002907004 00000 n
+0000198894 00000 n
+0000199001 00000 n
+0001652110 00000 n
+0002906905 00000 n
+0000199052 00000 n
+0000199185 00000 n
+0001652238 00000 n
+0002906806 00000 n
+0000199236 00000 n
+0000199417 00000 n
+0001652367 00000 n
+0002906707 00000 n
+0000199468 00000 n
+0000199654 00000 n
+0001652495 00000 n
+0002906608 00000 n
+0000199705 00000 n
+0000199856 00000 n
+0001652624 00000 n
+0002906509 00000 n
+0000199907 00000 n
+0000200073 00000 n
+0001655324 00000 n
+0002906410 00000 n
+0000200124 00000 n
+0000200295 00000 n
+0001655452 00000 n
+0002906311 00000 n
+0000200346 00000 n
+0000200532 00000 n
+0001655581 00000 n
+0002906212 00000 n
+0000200583 00000 n
+0000200774 00000 n
+0001655710 00000 n
+0002906113 00000 n
+0000200825 00000 n
+0000200996 00000 n
+0001655839 00000 n
+0002906014 00000 n
+0000201047 00000 n
+0000201223 00000 n
+0001655967 00000 n
+0002905915 00000 n
+0000201274 00000 n
+0000201420 00000 n
+0001656095 00000 n
+0002905816 00000 n
+0000201471 00000 n
+0000201647 00000 n
+0001656224 00000 n
+0002905717 00000 n
+0000201698 00000 n
+0000201879 00000 n
+0001656353 00000 n
+0002905618 00000 n
+0000201930 00000 n
+0000202091 00000 n
+0001656482 00000 n
+0002905519 00000 n
+0000202142 00000 n
+0000202308 00000 n
+0001656611 00000 n
+0002905420 00000 n
+0000202359 00000 n
+0000202436 00000 n
+0001656740 00000 n
+0002905321 00000 n
+0000202487 00000 n
+0000202589 00000 n
+0001661032 00000 n
+0002905222 00000 n
+0000202640 00000 n
+0000202775 00000 n
+0001661160 00000 n
+0002905138 00000 n
+0000202826 00000 n
+0000202885 00000 n
+0001661288 00000 n
+0002904998 00000 n
+0000202936 00000 n
+0000203139 00000 n
+0001661481 00000 n
+0002904888 00000 n
+0000203195 00000 n
+0000203337 00000 n
+0001661610 00000 n
+0002904804 00000 n
+0000203388 00000 n
+0000203493 00000 n
+0001661739 00000 n
+0002904720 00000 n
+0000203544 00000 n
+0000203659 00000 n
+0001661867 00000 n
+0002904580 00000 n
+0000203710 00000 n
+0000203903 00000 n
+0001667321 00000 n
+0002904455 00000 n
+0000203959 00000 n
+0000204144 00000 n
+0001667450 00000 n
+0002904386 00000 n
+0000204195 00000 n
+0000204287 00000 n
+0001667514 00000 n
+0002904261 00000 n
+0000204343 00000 n
+0000204480 00000 n
+0001667642 00000 n
+0002904177 00000 n
+0000204531 00000 n
+0000204595 00000 n
+0001667770 00000 n
+0002904078 00000 n
+0000204646 00000 n
+0000204750 00000 n
+0001667898 00000 n
+0002903979 00000 n
+0000204801 00000 n
+0000204885 00000 n
+0001668026 00000 n
+0002903895 00000 n
+0000204936 00000 n
+0000205040 00000 n
+0001668154 00000 n
+0002903796 00000 n
+0000205091 00000 n
+0000205279 00000 n
+0001675376 00000 n
+0002903656 00000 n
+0000205330 00000 n
+0000205508 00000 n
+0001675570 00000 n
+0002903546 00000 n
+0000205564 00000 n
+0000205749 00000 n
+0001675698 00000 n
+0002903477 00000 n
+0000205800 00000 n
+0000205894 00000 n
+0001676086 00000 n
+0002903337 00000 n
+0000205945 00000 n
+0000206138 00000 n
+0001696370 00000 n
+0002903212 00000 n
+0000206194 00000 n
+0000206379 00000 n
+0001696499 00000 n
+0002903128 00000 n
+0000206430 00000 n
+0000206555 00000 n
+0001696628 00000 n
+0002903044 00000 n
+0000206606 00000 n
+0000206708 00000 n
+0001696692 00000 n
+0002902903 00000 n
+0000206764 00000 n
+0000206906 00000 n
+0001696821 00000 n
+0002902819 00000 n
+0000206957 00000 n
+0000207111 00000 n
+0001696950 00000 n
+0002902720 00000 n
+0000207162 00000 n
+0000207326 00000 n
+0001697079 00000 n
+0002902621 00000 n
+0000207377 00000 n
+0000207533 00000 n
+0001697208 00000 n
+0002902522 00000 n
+0000207584 00000 n
+0000207735 00000 n
+0001697337 00000 n
+0002902423 00000 n
+0000207786 00000 n
+0000207937 00000 n
+0001697466 00000 n
+0002902324 00000 n
+0000207988 00000 n
+0000208167 00000 n
+0001697595 00000 n
+0002902225 00000 n
+0000208218 00000 n
+0000208379 00000 n
+0001697724 00000 n
+0002902126 00000 n
+0000208430 00000 n
+0000208601 00000 n
+0001697853 00000 n
+0002902027 00000 n
+0000208652 00000 n
+0000208823 00000 n
+0001701313 00000 n
+0002901928 00000 n
+0000208874 00000 n
+0000209093 00000 n
+0001701442 00000 n
+0002901829 00000 n
+0000209144 00000 n
+0000209315 00000 n
+0001701571 00000 n
+0002901730 00000 n
+0000209366 00000 n
+0000209476 00000 n
+0001701699 00000 n
+0002901631 00000 n
+0000209527 00000 n
+0000209647 00000 n
+0001701827 00000 n
+0002901532 00000 n
+0000209698 00000 n
+0000209836 00000 n
+0001701956 00000 n
+0002901433 00000 n
+0000209887 00000 n
+0000209987 00000 n
+0001702085 00000 n
+0002901349 00000 n
+0000210038 00000 n
+0000210176 00000 n
+0001702149 00000 n
+0002901223 00000 n
+0000210232 00000 n
+0000210374 00000 n
+0001702277 00000 n
+0002901139 00000 n
+0000210425 00000 n
+0000210584 00000 n
+0001702405 00000 n
+0002901040 00000 n
+0000210635 00000 n
+0000210794 00000 n
+0001702534 00000 n
+0002900941 00000 n
+0000210845 00000 n
+0000210971 00000 n
+0001702663 00000 n
+0002900842 00000 n
+0000211022 00000 n
+0000211171 00000 n
+0001702792 00000 n
+0002900743 00000 n
+0000211222 00000 n
+0000211338 00000 n
+0001706609 00000 n
+0002900644 00000 n
+0000211389 00000 n
+0000211528 00000 n
+0001706738 00000 n
+0002900545 00000 n
+0000211579 00000 n
+0000211725 00000 n
+0001706866 00000 n
+0002900446 00000 n
+0000211776 00000 n
+0000211912 00000 n
+0001706995 00000 n
+0002900347 00000 n
+0000211963 00000 n
+0000212132 00000 n
+0001707124 00000 n
+0002900248 00000 n
+0000212183 00000 n
+0000212385 00000 n
+0001707253 00000 n
+0002900149 00000 n
+0000212436 00000 n
+0000212643 00000 n
+0001707382 00000 n
+0002900050 00000 n
+0000212694 00000 n
+0000212815 00000 n
+0001707510 00000 n
+0002899951 00000 n
+0000212866 00000 n
+0000212964 00000 n
+0001707639 00000 n
+0002899852 00000 n
+0000213015 00000 n
+0000213118 00000 n
+0001707767 00000 n
+0002899753 00000 n
+0000213169 00000 n
+0000213300 00000 n
+0001707896 00000 n
+0002899654 00000 n
+0000213351 00000 n
+0000213482 00000 n
+0001708025 00000 n
+0002899555 00000 n
+0000213533 00000 n
+0000213640 00000 n
+0001712012 00000 n
+0002899456 00000 n
+0000213691 00000 n
+0000213788 00000 n
+0001712140 00000 n
+0002899357 00000 n
+0000213839 00000 n
+0000213941 00000 n
+0001712269 00000 n
+0002899258 00000 n
+0000213992 00000 n
+0000214102 00000 n
+0001712398 00000 n
+0002899159 00000 n
+0000214153 00000 n
+0000214240 00000 n
+0001712527 00000 n
+0002899060 00000 n
+0000214291 00000 n
+0000214411 00000 n
+0001712655 00000 n
+0002898961 00000 n
+0000214462 00000 n
+0000214557 00000 n
+0001712784 00000 n
+0002898862 00000 n
+0000214608 00000 n
+0000214723 00000 n
+0001712913 00000 n
+0002898763 00000 n
+0000214774 00000 n
+0000214897 00000 n
+0001713042 00000 n
+0002898664 00000 n
+0000214948 00000 n
+0000215043 00000 n
+0001713171 00000 n
+0002898565 00000 n
+0000215094 00000 n
+0000215199 00000 n
+0001713300 00000 n
+0002898466 00000 n
+0000215250 00000 n
+0000215355 00000 n
+0001716022 00000 n
+0002898367 00000 n
+0000215406 00000 n
+0000215582 00000 n
+0001716151 00000 n
+0002898268 00000 n
+0000215633 00000 n
+0000215842 00000 n
+0001716279 00000 n
+0002898169 00000 n
+0000215893 00000 n
+0000216107 00000 n
+0001716408 00000 n
+0002898070 00000 n
+0000216158 00000 n
+0000216331 00000 n
+0001716536 00000 n
+0002897971 00000 n
+0000216382 00000 n
+0000216517 00000 n
+0001716664 00000 n
+0002897872 00000 n
+0000216568 00000 n
+0000216670 00000 n
+0001716793 00000 n
+0002897773 00000 n
+0000216721 00000 n
+0000216866 00000 n
+0001716922 00000 n
+0002897674 00000 n
+0000216917 00000 n
+0000217065 00000 n
+0001717051 00000 n
+0002897575 00000 n
+0000217116 00000 n
+0000217175 00000 n
+0001717180 00000 n
+0002897476 00000 n
+0000217226 00000 n
+0000217341 00000 n
+0001720658 00000 n
+0002897377 00000 n
+0000217392 00000 n
+0000217489 00000 n
+0001720787 00000 n
+0002897278 00000 n
+0000217540 00000 n
+0000217713 00000 n
+0001720916 00000 n
+0002897194 00000 n
+0000217764 00000 n
+0000217912 00000 n
+0001721044 00000 n
+0002897054 00000 n
+0000217963 00000 n
+0000218146 00000 n
+0001732108 00000 n
+0002896970 00000 n
+0000218202 00000 n
+0000218334 00000 n
+0001732172 00000 n
+0002896830 00000 n
+0000218390 00000 n
+0000218575 00000 n
+0001732301 00000 n
+0002896761 00000 n
+0000218626 00000 n
+0000218736 00000 n
+0001735093 00000 n
+0002896621 00000 n
+0000218792 00000 n
+0000218977 00000 n
+0001735222 00000 n
+0002896552 00000 n
+0000219028 00000 n
+0000219132 00000 n
+0001735480 00000 n
+0002896412 00000 n
+0000219188 00000 n
+0000219330 00000 n
+0001735609 00000 n
+0002896328 00000 n
+0000219381 00000 n
+0000219535 00000 n
+0001735738 00000 n
+0002896229 00000 n
+0000219586 00000 n
+0000219750 00000 n
+0001735867 00000 n
+0002896130 00000 n
+0000219801 00000 n
+0000219952 00000 n
+0001735996 00000 n
+0002896031 00000 n
+0000220003 00000 n
+0000220164 00000 n
+0001736125 00000 n
+0002895947 00000 n
+0000220215 00000 n
+0000220386 00000 n
+0001736189 00000 n
+0002895821 00000 n
+0000220442 00000 n
+0000220584 00000 n
+0001736318 00000 n
+0002895737 00000 n
+0000220635 00000 n
+0000220794 00000 n
+0001736447 00000 n
+0002895638 00000 n
+0000220845 00000 n
+0000221004 00000 n
+0001736575 00000 n
+0002895539 00000 n
+0000221055 00000 n
+0000221181 00000 n
+0001736704 00000 n
+0002895440 00000 n
+0000221232 00000 n
+0000221381 00000 n
+0001736832 00000 n
+0002895341 00000 n
+0000221432 00000 n
+0000221548 00000 n
+0001740345 00000 n
+0002895242 00000 n
+0000221599 00000 n
+0000221738 00000 n
+0001740474 00000 n
+0002895143 00000 n
+0000221789 00000 n
+0000221925 00000 n
+0001740602 00000 n
+0002895044 00000 n
+0000221976 00000 n
+0000222145 00000 n
+0001740730 00000 n
+0002894945 00000 n
+0000222196 00000 n
+0000222317 00000 n
+0001740859 00000 n
+0002894846 00000 n
+0000222368 00000 n
+0000222466 00000 n
+0001740988 00000 n
+0002894747 00000 n
+0000222517 00000 n
+0000222614 00000 n
+0001741117 00000 n
+0002894648 00000 n
+0000222665 00000 n
+0000222775 00000 n
+0001741246 00000 n
+0002894549 00000 n
+0000222826 00000 n
+0000222913 00000 n
+0001741375 00000 n
+0002894450 00000 n
+0000222964 00000 n
+0000223084 00000 n
+0001741504 00000 n
+0002894351 00000 n
+0000223135 00000 n
+0000223230 00000 n
+0001741632 00000 n
+0002894252 00000 n
+0000223281 00000 n
+0000223396 00000 n
+0001750481 00000 n
+0002894153 00000 n
+0000223447 00000 n
+0000223570 00000 n
+0001750609 00000 n
+0002894054 00000 n
+0000223621 00000 n
+0000223716 00000 n
+0001750738 00000 n
+0002893955 00000 n
+0000223767 00000 n
+0000223872 00000 n
+0001750867 00000 n
+0002893871 00000 n
+0000223923 00000 n
+0000224028 00000 n
+0001750995 00000 n
+0002893731 00000 n
+0000224079 00000 n
+0000224295 00000 n
+0001759272 00000 n
+0002893606 00000 n
+0000224351 00000 n
+0000224536 00000 n
+0001759400 00000 n
+0002893522 00000 n
+0000224587 00000 n
+0000224725 00000 n
+0001759529 00000 n
+0002893438 00000 n
+0000224776 00000 n
+0000224868 00000 n
+0001759593 00000 n
+0002893298 00000 n
+0000224924 00000 n
+0000225061 00000 n
+0001759722 00000 n
+0002893229 00000 n
+0000225112 00000 n
+0000225201 00000 n
+0001759786 00000 n
+0002893088 00000 n
+0000225257 00000 n
+0000225399 00000 n
+0001759915 00000 n
+0002893004 00000 n
+0000225450 00000 n
+0000225599 00000 n
+0001760044 00000 n
+0002892905 00000 n
+0000225650 00000 n
+0000225799 00000 n
+0001760172 00000 n
+0002892806 00000 n
+0000225851 00000 n
+0000226033 00000 n
+0001760301 00000 n
+0002892707 00000 n
+0000226085 00000 n
+0000226267 00000 n
+0001763725 00000 n
+0002892608 00000 n
+0000226319 00000 n
+0000226531 00000 n
+0001763854 00000 n
+0002892509 00000 n
+0000226583 00000 n
+0000226833 00000 n
+0001763983 00000 n
+0002892410 00000 n
+0000226885 00000 n
+0000227107 00000 n
+0001764110 00000 n
+0002892311 00000 n
+0000227159 00000 n
+0000227282 00000 n
+0001764239 00000 n
+0002892212 00000 n
+0000227334 00000 n
+0000227457 00000 n
+0001764368 00000 n
+0002892113 00000 n
+0000227509 00000 n
+0000227660 00000 n
+0001764497 00000 n
+0002892014 00000 n
+0000227712 00000 n
+0000227900 00000 n
+0001764626 00000 n
+0002891915 00000 n
+0000227952 00000 n
+0000228110 00000 n
+0001764755 00000 n
+0002891816 00000 n
+0000228162 00000 n
+0000228320 00000 n
+0001764884 00000 n
+0002891717 00000 n
+0000228372 00000 n
+0000228558 00000 n
+0001765013 00000 n
+0002891618 00000 n
+0000228610 00000 n
+0000228783 00000 n
+0001765142 00000 n
+0002891519 00000 n
+0000228835 00000 n
+0000229016 00000 n
+0001768294 00000 n
+0002891420 00000 n
+0000229068 00000 n
+0000229259 00000 n
+0001768423 00000 n
+0002891321 00000 n
+0000229311 00000 n
+0000229449 00000 n
+0001768552 00000 n
+0002891222 00000 n
+0000229501 00000 n
+0000229649 00000 n
+0001768681 00000 n
+0002891123 00000 n
+0000229701 00000 n
+0000229826 00000 n
+0001768810 00000 n
+0002891039 00000 n
+0000229878 00000 n
+0000230013 00000 n
+0001768874 00000 n
+0002890914 00000 n
+0000230069 00000 n
+0000230211 00000 n
+0001769003 00000 n
+0002890830 00000 n
+0000230263 00000 n
+0000230384 00000 n
+0001769132 00000 n
+0002890731 00000 n
+0000230436 00000 n
+0000230557 00000 n
+0001769261 00000 n
+0002890632 00000 n
+0000230609 00000 n
+0000230707 00000 n
+0001769390 00000 n
+0002890533 00000 n
+0000230759 00000 n
+0000230874 00000 n
+0001769519 00000 n
+0002890449 00000 n
+0000230926 00000 n
+0000231013 00000 n
+0001769647 00000 n
+0002890309 00000 n
+0000231064 00000 n
+0000231270 00000 n
+0001775323 00000 n
+0002890184 00000 n
+0000231326 00000 n
+0000231511 00000 n
+0001775452 00000 n
+0002890100 00000 n
+0000231563 00000 n
+0000231777 00000 n
+0001775581 00000 n
+0002890001 00000 n
+0000231829 00000 n
+0000232053 00000 n
+0001775710 00000 n
+0002889902 00000 n
+0000232105 00000 n
+0000232357 00000 n
+0001775838 00000 n
+0002889803 00000 n
+0000232409 00000 n
+0000232671 00000 n
+0001775967 00000 n
+0002889704 00000 n
+0000232723 00000 n
+0000232947 00000 n
+0001776096 00000 n
+0002889620 00000 n
+0000232999 00000 n
+0000233233 00000 n
+0001776160 00000 n
+0002889480 00000 n
+0000233289 00000 n
+0000233426 00000 n
+0001776288 00000 n
+0002889411 00000 n
+0000233478 00000 n
+0000233587 00000 n
+0001784664 00000 n
+0002889286 00000 n
+0000233643 00000 n
+0000233785 00000 n
+0001784793 00000 n
+0002889202 00000 n
+0000233837 00000 n
+0000233960 00000 n
+0001784922 00000 n
+0002889118 00000 n
+0000234012 00000 n
+0000234185 00000 n
+0001785050 00000 n
+0002888978 00000 n
+0000234236 00000 n
+0000234462 00000 n
+0001785179 00000 n
+0002888867 00000 n
+0000234518 00000 n
+0000234660 00000 n
+0001785308 00000 n
+0002888783 00000 n
+0000234712 00000 n
+0000234861 00000 n
+0001785437 00000 n
+0002888684 00000 n
+0000234913 00000 n
+0000235062 00000 n
+0001785566 00000 n
+0002888585 00000 n
+0000235114 00000 n
+0000235339 00000 n
+0001785695 00000 n
+0002888486 00000 n
+0000235391 00000 n
+0000235616 00000 n
+0001788703 00000 n
+0002888387 00000 n
+0000235668 00000 n
+0000235880 00000 n
+0001788829 00000 n
+0002888288 00000 n
+0000235932 00000 n
+0000236091 00000 n
+0001788958 00000 n
+0002888189 00000 n
+0000236143 00000 n
+0000236365 00000 n
+0001789087 00000 n
+0002888090 00000 n
+0000236417 00000 n
+0000236555 00000 n
+0001789215 00000 n
+0002887991 00000 n
+0000236607 00000 n
+0000236745 00000 n
+0001789344 00000 n
+0002887892 00000 n
+0000236797 00000 n
+0000236935 00000 n
+0001789473 00000 n
+0002887793 00000 n
+0000236987 00000 n
+0000237160 00000 n
+0001789602 00000 n
+0002887694 00000 n
+0000237212 00000 n
+0000237350 00000 n
+0001789730 00000 n
+0002887595 00000 n
+0000237402 00000 n
+0000237583 00000 n
+0001789859 00000 n
+0002887496 00000 n
+0000237635 00000 n
+0000237826 00000 n
+0001789988 00000 n
+0002887397 00000 n
+0000237878 00000 n
+0000238016 00000 n
+0001790116 00000 n
+0002887298 00000 n
+0000238068 00000 n
+0000238216 00000 n
+0001790244 00000 n
+0002887214 00000 n
+0000238268 00000 n
+0000238352 00000 n
+0001795522 00000 n
+0002887074 00000 n
+0000238403 00000 n
+0000238619 00000 n
+0001795781 00000 n
+0002886949 00000 n
+0000238675 00000 n
+0000238860 00000 n
+0001795910 00000 n
+0002886865 00000 n
+0000238912 00000 n
+0000239126 00000 n
+0001796038 00000 n
+0002886766 00000 n
+0000239178 00000 n
+0000239402 00000 n
+0001796167 00000 n
+0002886667 00000 n
+0000239454 00000 n
+0000239678 00000 n
+0001796296 00000 n
+0002886583 00000 n
+0000239730 00000 n
+0000239964 00000 n
+0001796359 00000 n
+0002886443 00000 n
+0000240020 00000 n
+0000240157 00000 n
+0001796488 00000 n
+0002886359 00000 n
+0000240209 00000 n
+0000240308 00000 n
+0001796617 00000 n
+0002886275 00000 n
+0000240360 00000 n
+0000240469 00000 n
+0001812053 00000 n
+0002886150 00000 n
+0000240525 00000 n
+0000240667 00000 n
+0001812182 00000 n
+0002886066 00000 n
+0000240719 00000 n
+0000240857 00000 n
+0001812310 00000 n
+0002885967 00000 n
+0000240909 00000 n
+0000241047 00000 n
+0001812438 00000 n
+0002885868 00000 n
+0000241099 00000 n
+0000241237 00000 n
+0001812567 00000 n
+0002885769 00000 n
+0000241289 00000 n
+0000241462 00000 n
+0001812696 00000 n
+0002885685 00000 n
+0000241514 00000 n
+0000241652 00000 n
+0001812823 00000 n
+0002885545 00000 n
+0000241703 00000 n
+0000241919 00000 n
+0001829330 00000 n
+0002885434 00000 n
+0000241975 00000 n
+0000242117 00000 n
+0001829459 00000 n
+0002885350 00000 n
+0000242169 00000 n
+0000242365 00000 n
+0001829587 00000 n
+0002885251 00000 n
+0000242417 00000 n
+0000242618 00000 n
+0001829715 00000 n
+0002885152 00000 n
+0000242670 00000 n
+0000242879 00000 n
+0001829844 00000 n
+0002885053 00000 n
+0000242931 00000 n
+0000243135 00000 n
+0001829973 00000 n
+0002884954 00000 n
+0000243187 00000 n
+0000243340 00000 n
+0001830100 00000 n
+0002884855 00000 n
+0000243392 00000 n
+0000243550 00000 n
+0001833544 00000 n
+0002884756 00000 n
+0000243602 00000 n
+0000243750 00000 n
+0001833673 00000 n
+0002884657 00000 n
+0000243802 00000 n
+0000243973 00000 n
+0001833802 00000 n
+0002884558 00000 n
+0000244025 00000 n
+0000244183 00000 n
+0001833931 00000 n
+0002884459 00000 n
+0000244235 00000 n
+0000244444 00000 n
+0001834060 00000 n
+0002884360 00000 n
+0000244496 00000 n
+0000244649 00000 n
+0001834189 00000 n
+0002884261 00000 n
+0000244701 00000 n
+0000244859 00000 n
+0001834318 00000 n
+0002884162 00000 n
+0000244911 00000 n
+0000245064 00000 n
+0001834447 00000 n
+0002884063 00000 n
+0000245116 00000 n
+0000245302 00000 n
+0001834576 00000 n
+0002883964 00000 n
+0000245354 00000 n
+0000245502 00000 n
+0001834704 00000 n
+0002883865 00000 n
+0000245554 00000 n
+0000245760 00000 n
+0001834833 00000 n
+0002883766 00000 n
+0000245812 00000 n
+0000246018 00000 n
+0001834962 00000 n
+0002883667 00000 n
+0000246070 00000 n
+0000246241 00000 n
+0001835091 00000 n
+0002883568 00000 n
+0000246293 00000 n
+0000246451 00000 n
+0001835220 00000 n
+0002883469 00000 n
+0000246503 00000 n
+0000246722 00000 n
+0001839029 00000 n
+0002883370 00000 n
+0000246774 00000 n
+0000246927 00000 n
+0001839156 00000 n
+0002883271 00000 n
+0000246979 00000 n
+0000247160 00000 n
+0001839284 00000 n
+0002883172 00000 n
+0000247212 00000 n
+0000247360 00000 n
+0001839413 00000 n
+0002883073 00000 n
+0000247412 00000 n
+0000247560 00000 n
+0001839542 00000 n
+0002882974 00000 n
+0000247612 00000 n
+0000247740 00000 n
+0001839671 00000 n
+0002882875 00000 n
+0000247792 00000 n
+0000247963 00000 n
+0001839800 00000 n
+0002882776 00000 n
+0000248015 00000 n
+0000248158 00000 n
+0001839927 00000 n
+0002882677 00000 n
+0000248210 00000 n
+0000248343 00000 n
+0001840056 00000 n
+0002882578 00000 n
+0000248395 00000 n
+0000248556 00000 n
+0001840185 00000 n
+0002882479 00000 n
+0000248608 00000 n
+0000248761 00000 n
+0001840314 00000 n
+0002882380 00000 n
+0000248813 00000 n
+0000248951 00000 n
+0001840442 00000 n
+0002882281 00000 n
+0000249003 00000 n
+0000249169 00000 n
+0001840570 00000 n
+0002882182 00000 n
+0000249221 00000 n
+0000249369 00000 n
+0001844543 00000 n
+0002882083 00000 n
+0000249421 00000 n
+0000249569 00000 n
+0001844672 00000 n
+0002881984 00000 n
+0000249621 00000 n
+0000249749 00000 n
+0001844801 00000 n
+0002881885 00000 n
+0000249801 00000 n
+0000249934 00000 n
+0001844930 00000 n
+0002881786 00000 n
+0000249986 00000 n
+0000250147 00000 n
+0001845057 00000 n
+0002881687 00000 n
+0000250199 00000 n
+0000250342 00000 n
+0001845186 00000 n
+0002881588 00000 n
+0000250394 00000 n
+0000250565 00000 n
+0001845315 00000 n
+0002881489 00000 n
+0000250617 00000 n
+0000250770 00000 n
+0001845444 00000 n
+0002881390 00000 n
+0000250822 00000 n
+0000250960 00000 n
+0001845573 00000 n
+0002881291 00000 n
+0000251012 00000 n
+0000251178 00000 n
+0001845702 00000 n
+0002881192 00000 n
+0000251230 00000 n
+0000251373 00000 n
+0001845831 00000 n
+0002881108 00000 n
+0000251425 00000 n
+0000251596 00000 n
+0001845959 00000 n
+0002880968 00000 n
+0000251647 00000 n
+0000251873 00000 n
+0001886501 00000 n
+0002880857 00000 n
+0000251929 00000 n
+0000252071 00000 n
+0001886630 00000 n
+0002880773 00000 n
+0000252123 00000 n
+0000252304 00000 n
+0001886759 00000 n
+0002880674 00000 n
+0000252356 00000 n
+0000252552 00000 n
+0001886888 00000 n
+0002880575 00000 n
+0000252604 00000 n
+0000252790 00000 n
+0001889984 00000 n
+0002880476 00000 n
+0000252842 00000 n
+0000253043 00000 n
+0001890113 00000 n
+0002880377 00000 n
+0000253095 00000 n
+0000253233 00000 n
+0001890242 00000 n
+0002880278 00000 n
+0000253285 00000 n
+0000253479 00000 n
+0001890370 00000 n
+0002880179 00000 n
+0000253531 00000 n
+0000253740 00000 n
+0001890499 00000 n
+0002880080 00000 n
+0000253792 00000 n
+0000253981 00000 n
+0001890628 00000 n
+0002879981 00000 n
+0000254033 00000 n
+0000254237 00000 n
+0001890757 00000 n
+0002879882 00000 n
+0000254289 00000 n
+0000254442 00000 n
+0001890886 00000 n
+0002879783 00000 n
+0000254494 00000 n
+0000254637 00000 n
+0001891015 00000 n
+0002879684 00000 n
+0000254689 00000 n
+0000254847 00000 n
+0001891144 00000 n
+0002879585 00000 n
+0000254899 00000 n
+0000255032 00000 n
+0001891273 00000 n
+0002879486 00000 n
+0000255084 00000 n
+0000255232 00000 n
+0001891402 00000 n
+0002879387 00000 n
+0000255284 00000 n
+0000255427 00000 n
+0001891531 00000 n
+0002879288 00000 n
+0000255479 00000 n
+0000255635 00000 n
+0001891660 00000 n
+0002879189 00000 n
+0000255687 00000 n
+0000255858 00000 n
+0001894784 00000 n
+0002879090 00000 n
+0000255910 00000 n
+0000256068 00000 n
+0001894913 00000 n
+0002878991 00000 n
+0000256120 00000 n
+0000256258 00000 n
+0001895041 00000 n
+0002878892 00000 n
+0000256310 00000 n
+0000256504 00000 n
+0001895170 00000 n
+0002878793 00000 n
+0000256556 00000 n
+0000256765 00000 n
+0001895299 00000 n
+0002878694 00000 n
+0000256817 00000 n
+0000256970 00000 n
+0001895428 00000 n
+0002878595 00000 n
+0000257022 00000 n
+0000257165 00000 n
+0001895557 00000 n
+0002878496 00000 n
+0000257217 00000 n
+0000257375 00000 n
+0001895686 00000 n
+0002878397 00000 n
+0000257427 00000 n
+0000257565 00000 n
+0001895815 00000 n
+0002878298 00000 n
+0000257617 00000 n
+0000257770 00000 n
+0001895944 00000 n
+0002878199 00000 n
+0000257822 00000 n
+0000257955 00000 n
+0001896073 00000 n
+0002878100 00000 n
+0000258007 00000 n
+0000258178 00000 n
+0001896202 00000 n
+0002878001 00000 n
+0000258230 00000 n
+0000258416 00000 n
+0001896331 00000 n
+0002877902 00000 n
+0000258468 00000 n
+0000258616 00000 n
+0001896459 00000 n
+0002877803 00000 n
+0000258668 00000 n
+0000258859 00000 n
+0001896588 00000 n
+0002877704 00000 n
+0000258911 00000 n
+0000259117 00000 n
+0001899773 00000 n
+0002877605 00000 n
+0000259169 00000 n
+0000259360 00000 n
+0001899902 00000 n
+0002877506 00000 n
+0000259412 00000 n
+0000259618 00000 n
+0001900030 00000 n
+0002877407 00000 n
+0000259670 00000 n
+0000259813 00000 n
+0001900159 00000 n
+0002877308 00000 n
+0000259865 00000 n
+0000260021 00000 n
+0001900287 00000 n
+0002877209 00000 n
+0000260073 00000 n
+0000260244 00000 n
+0001900416 00000 n
+0002877110 00000 n
+0000260296 00000 n
+0000260454 00000 n
+0001900545 00000 n
+0002877011 00000 n
+0000260506 00000 n
+0000260710 00000 n
+0001900674 00000 n
+0002876912 00000 n
+0000260762 00000 n
+0000260981 00000 n
+0001900803 00000 n
+0002876813 00000 n
+0000261033 00000 n
+0000261171 00000 n
+0001900932 00000 n
+0002876714 00000 n
+0000261223 00000 n
+0000261376 00000 n
+0001901060 00000 n
+0002876615 00000 n
+0000261428 00000 n
+0000261594 00000 n
+0001901189 00000 n
+0002876516 00000 n
+0000261646 00000 n
+0000261827 00000 n
+0001901318 00000 n
+0002876417 00000 n
+0000261879 00000 n
+0000262027 00000 n
+0001901446 00000 n
+0002876318 00000 n
+0000262079 00000 n
+0000262212 00000 n
+0001901575 00000 n
+0002876219 00000 n
+0000262264 00000 n
+0000262412 00000 n
+0001905007 00000 n
+0002876120 00000 n
+0000262464 00000 n
+0000262610 00000 n
+0001905135 00000 n
+0002876021 00000 n
+0000262662 00000 n
+0000262818 00000 n
+0001905264 00000 n
+0002875922 00000 n
+0000262870 00000 n
+0000263041 00000 n
+0001905393 00000 n
+0002875823 00000 n
+0000263093 00000 n
+0000263221 00000 n
+0001905520 00000 n
+0002875724 00000 n
+0000263273 00000 n
+0000263416 00000 n
+0001905649 00000 n
+0002875625 00000 n
+0000263468 00000 n
+0000263601 00000 n
+0001905778 00000 n
+0002875526 00000 n
+0000263653 00000 n
+0000263799 00000 n
+0001905907 00000 n
+0002875427 00000 n
+0000263851 00000 n
+0000264012 00000 n
+0001906036 00000 n
+0002875328 00000 n
+0000264064 00000 n
+0000264202 00000 n
+0001906164 00000 n
+0002875229 00000 n
+0000264254 00000 n
+0000264407 00000 n
+0001906293 00000 n
+0002875130 00000 n
+0000264459 00000 n
+0000264582 00000 n
+0001906422 00000 n
+0002875031 00000 n
+0000264634 00000 n
+0000264772 00000 n
+0001906550 00000 n
+0002874932 00000 n
+0000264824 00000 n
+0000264975 00000 n
+0001906679 00000 n
+0002874833 00000 n
+0000265027 00000 n
+0000265193 00000 n
+0001910282 00000 n
+0002874734 00000 n
+0000265245 00000 n
+0000265386 00000 n
+0001910410 00000 n
+0002874635 00000 n
+0000265438 00000 n
+0000265586 00000 n
+0001910539 00000 n
+0002874536 00000 n
+0000265638 00000 n
+0000265771 00000 n
+0001910668 00000 n
+0002874437 00000 n
+0000265823 00000 n
+0000265971 00000 n
+0001910797 00000 n
+0002874338 00000 n
+0000266023 00000 n
+0000266141 00000 n
+0001910924 00000 n
+0002874239 00000 n
+0000266193 00000 n
+0000266326 00000 n
+0001911053 00000 n
+0002874140 00000 n
+0000266378 00000 n
+0000266524 00000 n
+0001911182 00000 n
+0002874041 00000 n
+0000266576 00000 n
+0000266737 00000 n
+0001911311 00000 n
+0002873942 00000 n
+0000266789 00000 n
+0000266917 00000 n
+0001911438 00000 n
+0002873843 00000 n
+0000266969 00000 n
+0000267112 00000 n
+0001911567 00000 n
+0002873744 00000 n
+0000267164 00000 n
+0000267320 00000 n
+0001911696 00000 n
+0002873645 00000 n
+0000267372 00000 n
+0000267543 00000 n
+0001911825 00000 n
+0002873546 00000 n
+0000267595 00000 n
+0000267733 00000 n
+0001911954 00000 n
+0002873447 00000 n
+0000267785 00000 n
+0000267938 00000 n
+0001916453 00000 n
+0002873348 00000 n
+0000267990 00000 n
+0000268113 00000 n
+0001916582 00000 n
+0002873249 00000 n
+0000268165 00000 n
+0000268303 00000 n
+0001916711 00000 n
+0002873150 00000 n
+0000268355 00000 n
+0000268506 00000 n
+0001916840 00000 n
+0002873051 00000 n
+0000268558 00000 n
+0000268724 00000 n
+0001916969 00000 n
+0002872952 00000 n
+0000268776 00000 n
+0000268904 00000 n
+0001917098 00000 n
+0002872853 00000 n
+0000268956 00000 n
+0000269099 00000 n
+0001917227 00000 n
+0002872754 00000 n
+0000269151 00000 n
+0000269307 00000 n
+0001917355 00000 n
+0002872670 00000 n
+0000269359 00000 n
+0000269530 00000 n
+0001917483 00000 n
+0002872571 00000 n
+0000269581 00000 n
+0000269774 00000 n
+0001928876 00000 n
+0002872472 00000 n
+0000269825 00000 n
+0000270008 00000 n
+0001929134 00000 n
+0002872332 00000 n
+0000270059 00000 n
+0000270257 00000 n
+0001935263 00000 n
+0002872206 00000 n
+0000270313 00000 n
+0000270455 00000 n
+0001935392 00000 n
+0002872122 00000 n
+0000270507 00000 n
+0000270673 00000 n
+0001935521 00000 n
+0002872023 00000 n
+0000270725 00000 n
+0000270901 00000 n
+0001935649 00000 n
+0002871924 00000 n
+0000270953 00000 n
+0000271134 00000 n
+0001935778 00000 n
+0002871825 00000 n
+0000271186 00000 n
+0000271372 00000 n
+0001935907 00000 n
+0002871726 00000 n
+0000271424 00000 n
+0000271562 00000 n
+0001936036 00000 n
+0002871627 00000 n
+0000271614 00000 n
+0000271808 00000 n
+0001936165 00000 n
+0002871528 00000 n
+0000271860 00000 n
+0000272049 00000 n
+0001936294 00000 n
+0002871429 00000 n
+0000272101 00000 n
+0000272244 00000 n
+0001936423 00000 n
+0002871330 00000 n
+0000272296 00000 n
+0000272429 00000 n
+0001938656 00000 n
+0002871231 00000 n
+0000272481 00000 n
+0000272624 00000 n
+0001938785 00000 n
+0002871132 00000 n
+0000272676 00000 n
+0000272832 00000 n
+0001938914 00000 n
+0002871033 00000 n
+0000272884 00000 n
+0000273022 00000 n
+0001939043 00000 n
+0002870934 00000 n
+0000273074 00000 n
+0000273268 00000 n
+0001939172 00000 n
+0002870835 00000 n
+0000273320 00000 n
+0000273463 00000 n
+0001939301 00000 n
+0002870736 00000 n
+0000273515 00000 n
+0000273653 00000 n
+0001939430 00000 n
+0002870637 00000 n
+0000273705 00000 n
+0000273838 00000 n
+0001939559 00000 n
+0002870538 00000 n
+0000273890 00000 n
+0000274061 00000 n
+0001939688 00000 n
+0002870439 00000 n
+0000274113 00000 n
+0000274304 00000 n
+0001939817 00000 n
+0002870340 00000 n
+0000274356 00000 n
+0000274547 00000 n
+0001939945 00000 n
+0002870241 00000 n
+0000274599 00000 n
+0000274742 00000 n
+0001940074 00000 n
+0002870142 00000 n
+0000274794 00000 n
+0000274950 00000 n
+0001940203 00000 n
+0002870043 00000 n
+0000275002 00000 n
+0000275206 00000 n
+0001940332 00000 n
+0002869944 00000 n
+0000275258 00000 n
+0000275396 00000 n
+0001940461 00000 n
+0002869845 00000 n
+0000275448 00000 n
+0000275614 00000 n
+0001942630 00000 n
+0002869746 00000 n
+0000275666 00000 n
+0000275799 00000 n
+0001942759 00000 n
+0002869647 00000 n
+0000275851 00000 n
+0000276007 00000 n
+0001942888 00000 n
+0002869548 00000 n
+0000276059 00000 n
+0000276187 00000 n
+0001943017 00000 n
+0002869449 00000 n
+0000276239 00000 n
+0000276385 00000 n
+0001943146 00000 n
+0002869350 00000 n
+0000276437 00000 n
+0000276575 00000 n
+0001943275 00000 n
+0002869251 00000 n
+0000276627 00000 n
+0000276750 00000 n
+0001943404 00000 n
+0002869152 00000 n
+0000276802 00000 n
+0000276953 00000 n
+0001943533 00000 n
+0002869053 00000 n
+0000277005 00000 n
+0000277138 00000 n
+0001943662 00000 n
+0002868954 00000 n
+0000277190 00000 n
+0000277308 00000 n
+0001943791 00000 n
+0002868855 00000 n
+0000277360 00000 n
+0000277506 00000 n
+0001943919 00000 n
+0002868756 00000 n
+0000277558 00000 n
+0000277686 00000 n
+0001944048 00000 n
+0002868657 00000 n
+0000277738 00000 n
+0000277894 00000 n
+0001944177 00000 n
+0002868558 00000 n
+0000277946 00000 n
+0000278084 00000 n
+0001944306 00000 n
+0002868459 00000 n
+0000278136 00000 n
+0000278259 00000 n
+0001944435 00000 n
+0002868360 00000 n
+0000278311 00000 n
+0000278462 00000 n
+0001949014 00000 n
+0002868261 00000 n
+0000278514 00000 n
+0000278642 00000 n
+0001949143 00000 n
+0002868177 00000 n
+0000278694 00000 n
+0000278850 00000 n
+0001949206 00000 n
+0002868052 00000 n
+0000278906 00000 n
+0000279048 00000 n
+0001949335 00000 n
+0002867968 00000 n
+0000279100 00000 n
+0000279213 00000 n
+0001949463 00000 n
+0002867869 00000 n
+0000279265 00000 n
+0000279373 00000 n
+0001949591 00000 n
+0002867770 00000 n
+0000279425 00000 n
+0000279547 00000 n
+0001949720 00000 n
+0002867686 00000 n
+0000279599 00000 n
+0000279711 00000 n
+0001949848 00000 n
+0002867546 00000 n
+0000279762 00000 n
+0000279950 00000 n
+0001955973 00000 n
+0002867462 00000 n
+0000280006 00000 n
+0000280138 00000 n
+0001956037 00000 n
+0002867322 00000 n
+0000280194 00000 n
+0000280379 00000 n
+0001956166 00000 n
+0002867238 00000 n
+0000280431 00000 n
+0000280627 00000 n
+0001956294 00000 n
+0002867139 00000 n
+0000280679 00000 n
+0000280885 00000 n
+0001956423 00000 n
+0002867040 00000 n
+0000280937 00000 n
+0000281128 00000 n
+0001956552 00000 n
+0002866941 00000 n
+0000281180 00000 n
+0000281381 00000 n
+0001956681 00000 n
+0002866842 00000 n
+0000281433 00000 n
+0000281619 00000 n
+0001956810 00000 n
+0002866758 00000 n
+0000281671 00000 n
+0000281867 00000 n
+0001956874 00000 n
+0002866618 00000 n
+0000281923 00000 n
+0000282065 00000 n
+0001957003 00000 n
+0002866534 00000 n
+0000282117 00000 n
+0000282283 00000 n
+0001963924 00000 n
+0002866450 00000 n
+0000282335 00000 n
+0000282511 00000 n
+0001963988 00000 n
+0002866325 00000 n
+0000282567 00000 n
+0000282709 00000 n
+0001964117 00000 n
+0002866241 00000 n
+0000282761 00000 n
+0000282884 00000 n
+0001964246 00000 n
+0002866142 00000 n
+0000282936 00000 n
+0000283049 00000 n
+0001964374 00000 n
+0002866058 00000 n
+0000283101 00000 n
+0000283209 00000 n
+0001964502 00000 n
+0002865918 00000 n
+0000283260 00000 n
+0000283463 00000 n
+0001967558 00000 n
+0002865793 00000 n
+0000283519 00000 n
+0000283656 00000 n
+0001967687 00000 n
+0002865724 00000 n
+0000283708 00000 n
+0000283861 00000 n
+0001967750 00000 n
+0002865584 00000 n
+0000283917 00000 n
+0000284059 00000 n
+0001967878 00000 n
+0002865500 00000 n
+0000284111 00000 n
+0000284257 00000 n
+0001968007 00000 n
+0002865401 00000 n
+0000284309 00000 n
+0000284480 00000 n
+0001968136 00000 n
+0002865302 00000 n
+0000284532 00000 n
+0000284751 00000 n
+0001968265 00000 n
+0002865218 00000 n
+0000284803 00000 n
+0000284974 00000 n
+0001968329 00000 n
+0002865092 00000 n
+0000285030 00000 n
+0000285172 00000 n
+0001968458 00000 n
+0002865008 00000 n
+0000285224 00000 n
+0000285319 00000 n
+0001968587 00000 n
+0002864909 00000 n
+0000285371 00000 n
+0000285478 00000 n
+0001968716 00000 n
+0002864810 00000 n
+0000285530 00000 n
+0000285650 00000 n
+0001968845 00000 n
+0002864711 00000 n
+0000285702 00000 n
+0000285799 00000 n
+0001968973 00000 n
+0002864612 00000 n
+0000285851 00000 n
+0000285928 00000 n
+0001969102 00000 n
+0002864513 00000 n
+0000285980 00000 n
+0000286082 00000 n
+0001969231 00000 n
+0002864414 00000 n
+0000286134 00000 n
+0000286269 00000 n
+0001972369 00000 n
+0002864315 00000 n
+0000286321 00000 n
+0000286380 00000 n
+0001972497 00000 n
+0002864216 00000 n
+0000286432 00000 n
+0000286504 00000 n
+0001972626 00000 n
+0002864117 00000 n
+0000286556 00000 n
+0000286729 00000 n
+0001972755 00000 n
+0002864033 00000 n
+0000286781 00000 n
+0000286929 00000 n
+0001972883 00000 n
+0002863893 00000 n
+0000286980 00000 n
+0000287173 00000 n
+0001977216 00000 n
+0002863768 00000 n
+0000287229 00000 n
+0000287371 00000 n
+0001977341 00000 n
+0002863699 00000 n
+0000287423 00000 n
+0000287569 00000 n
+0001977405 00000 n
+0002863574 00000 n
+0000287625 00000 n
+0000287767 00000 n
+0001977533 00000 n
+0002863490 00000 n
+0000287819 00000 n
+0000287939 00000 n
+0001977661 00000 n
+0002863391 00000 n
+0000287991 00000 n
+0000288088 00000 n
+0001977790 00000 n
+0002863307 00000 n
+0000288140 00000 n
+0000288217 00000 n
+0001977918 00000 n
+0002863167 00000 n
+0000288268 00000 n
+0000288499 00000 n
+0001978047 00000 n
+0002863057 00000 n
+0000288555 00000 n
+0000288697 00000 n
+0001978176 00000 n
+0002862973 00000 n
+0000288749 00000 n
+0000288895 00000 n
+0001978305 00000 n
+0002862889 00000 n
+0000288947 00000 n
+0000288996 00000 n
+0001978433 00000 n
+0002862749 00000 n
+0000289047 00000 n
+0000289235 00000 n
+0001982483 00000 n
+0002862624 00000 n
+0000289291 00000 n
+0000289476 00000 n
+0001982612 00000 n
+0002862540 00000 n
+0000289528 00000 n
+0000289668 00000 n
+0001982741 00000 n
+0002862441 00000 n
+0000289720 00000 n
+0000289845 00000 n
+0001982870 00000 n
+0002862342 00000 n
+0000289897 00000 n
+0000290027 00000 n
+0001982999 00000 n
+0002862243 00000 n
+0000290079 00000 n
+0000290204 00000 n
+0001983128 00000 n
+0002862159 00000 n
+0000290256 00000 n
+0000290419 00000 n
+0001983192 00000 n
+0002862034 00000 n
+0000290475 00000 n
+0000290617 00000 n
+0001983321 00000 n
+0002861965 00000 n
+0000290669 00000 n
+0000290766 00000 n
+0001987379 00000 n
+0002861825 00000 n
+0000290817 00000 n
+0000291043 00000 n
+0001987508 00000 n
+0002861715 00000 n
+0000291099 00000 n
+0000291241 00000 n
+0001987637 00000 n
+0002861646 00000 n
+0000291293 00000 n
+0000291390 00000 n
+0001987765 00000 n
+0002861506 00000 n
+0000291441 00000 n
+0000291677 00000 n
+0001987894 00000 n
+0002861396 00000 n
+0000291733 00000 n
+0000291875 00000 n
+0001988023 00000 n
+0002861327 00000 n
+0000291927 00000 n
+0000292024 00000 n
+0001988151 00000 n
+0002861187 00000 n
+0000292075 00000 n
+0000292273 00000 n
+0002001916 00000 n
+0002861062 00000 n
+0000292329 00000 n
+0000292471 00000 n
+0002002045 00000 n
+0002860978 00000 n
+0000292523 00000 n
+0000292625 00000 n
+0002002174 00000 n
+0002860879 00000 n
+0000292677 00000 n
+0000292774 00000 n
+0002002303 00000 n
+0002860795 00000 n
+0000292826 00000 n
+0000292956 00000 n
+0002002367 00000 n
+0002860670 00000 n
+0000293012 00000 n
+0000293154 00000 n
+0002002495 00000 n
+0002860586 00000 n
+0000293206 00000 n
+0000293283 00000 n
+0002002622 00000 n
+0002860502 00000 n
+0000293335 00000 n
+0000293394 00000 n
+0002002750 00000 n
+0002860362 00000 n
+0000293445 00000 n
+0000293633 00000 n
+0002005505 00000 n
+0002860237 00000 n
+0000293689 00000 n
+0000293874 00000 n
+0002005632 00000 n
+0002860168 00000 n
+0000293926 00000 n
+0000294040 00000 n
+0002007968 00000 n
+0002860043 00000 n
+0000294096 00000 n
+0000294238 00000 n
+0002008097 00000 n
+0002859974 00000 n
+0000294290 00000 n
+0000294420 00000 n
+0002013794 00000 n
+0002859834 00000 n
+0000294471 00000 n
+0000294664 00000 n
+0002013923 00000 n
+0002859724 00000 n
+0000294720 00000 n
+0000294862 00000 n
+0002014052 00000 n
+0002859640 00000 n
+0000294914 00000 n
+0000295088 00000 n
+0002014181 00000 n
+0002859541 00000 n
+0000295140 00000 n
+0000295319 00000 n
+0002014310 00000 n
+0002859442 00000 n
+0000295371 00000 n
+0000295433 00000 n
+0002014439 00000 n
+0002859358 00000 n
+0000295485 00000 n
+0000295580 00000 n
+0002014567 00000 n
+0002859218 00000 n
+0000295631 00000 n
+0000295814 00000 n
+0002019833 00000 n
+0002859093 00000 n
+0000295870 00000 n
+0000296055 00000 n
+0002019961 00000 n
+0002859009 00000 n
+0000296107 00000 n
+0000296238 00000 n
+0002020090 00000 n
+0002858910 00000 n
+0000296290 00000 n
+0000296357 00000 n
+0002020219 00000 n
+0002858811 00000 n
+0000296409 00000 n
+0000296481 00000 n
+0002020348 00000 n
+0002858712 00000 n
+0000296533 00000 n
+0000296600 00000 n
+0002020477 00000 n
+0002858613 00000 n
+0000296652 00000 n
+0000296815 00000 n
+0002020606 00000 n
+0002858514 00000 n
+0000296867 00000 n
+0000296989 00000 n
+0002020735 00000 n
+0002858415 00000 n
+0000297041 00000 n
+0000297161 00000 n
+0002020864 00000 n
+0002858316 00000 n
+0000297213 00000 n
+0000297333 00000 n
+0002020993 00000 n
+0002858232 00000 n
+0000297385 00000 n
+0000297507 00000 n
+0002027203 00000 n
+0002858092 00000 n
+0000297563 00000 n
+0000297700 00000 n
+0002027332 00000 n
+0002858023 00000 n
+0000297752 00000 n
+0000297871 00000 n
+0002027395 00000 n
+0002857898 00000 n
+0000297927 00000 n
+0000298069 00000 n
+0002027524 00000 n
+0002857814 00000 n
+0000298121 00000 n
+0000298295 00000 n
+0002027652 00000 n
+0002857715 00000 n
+0000298347 00000 n
+0000298526 00000 n
+0002027781 00000 n
+0002857616 00000 n
+0000298578 00000 n
+0000298640 00000 n
+0002027910 00000 n
+0002857532 00000 n
+0000298692 00000 n
+0000298787 00000 n
+0002028038 00000 n
+0002857392 00000 n
+0000298838 00000 n
+0000299013 00000 n
+0002030768 00000 n
+0002857267 00000 n
+0000299069 00000 n
+0000299254 00000 n
+0002030897 00000 n
+0002857183 00000 n
+0000299306 00000 n
+0000299375 00000 n
+0002031026 00000 n
+0002857099 00000 n
+0000299427 00000 n
+0000299504 00000 n
+0002031090 00000 n
+0002856959 00000 n
+0000299560 00000 n
+0000299702 00000 n
+0002031219 00000 n
+0002856875 00000 n
+0000299754 00000 n
+0000299803 00000 n
+0002031345 00000 n
+0002856776 00000 n
+0000299855 00000 n
+0000299920 00000 n
+0002031474 00000 n
+0002856677 00000 n
+0000299972 00000 n
+0000300064 00000 n
+0002031603 00000 n
+0002856593 00000 n
+0000300116 00000 n
+0000300208 00000 n
+0002031667 00000 n
+0002856468 00000 n
+0000300264 00000 n
+0000300406 00000 n
+0002031796 00000 n
+0002856384 00000 n
+0000300458 00000 n
+0000300599 00000 n
+0002031925 00000 n
+0002856285 00000 n
+0000300651 00000 n
+0000300830 00000 n
+0002032054 00000 n
+0002856186 00000 n
+0000300882 00000 n
+0000301018 00000 n
+0002032183 00000 n
+0002856087 00000 n
+0000301070 00000 n
+0000301244 00000 n
+0002036555 00000 n
+0002855988 00000 n
+0000301296 00000 n
+0000301427 00000 n
+0002036684 00000 n
+0002855904 00000 n
+0000301479 00000 n
+0000301648 00000 n
+0002036812 00000 n
+0002855764 00000 n
+0000301699 00000 n
+0000301864 00000 n
+0002037006 00000 n
+0002855639 00000 n
+0000301920 00000 n
+0000302105 00000 n
+0002037134 00000 n
+0002855570 00000 n
+0000302157 00000 n
+0000302226 00000 n
+0002037198 00000 n
+0002855445 00000 n
+0000302282 00000 n
+0000302424 00000 n
+0002037327 00000 n
+0002855361 00000 n
+0000302476 00000 n
+0000302645 00000 n
+0002037455 00000 n
+0002855262 00000 n
+0000302697 00000 n
+0000302861 00000 n
+0002037584 00000 n
+0002855178 00000 n
+0000302913 00000 n
+0000303072 00000 n
+0002037712 00000 n
+0002855038 00000 n
+0000303123 00000 n
+0000303378 00000 n
+0002047617 00000 n
+0002854913 00000 n
+0000303434 00000 n
+0000303619 00000 n
+0002047746 00000 n
+0002854829 00000 n
+0000303671 00000 n
+0000303776 00000 n
+0002047875 00000 n
+0002854745 00000 n
+0000303828 00000 n
+0000303946 00000 n
+0002047939 00000 n
+0002854605 00000 n
+0000304002 00000 n
+0000304139 00000 n
+0002048068 00000 n
+0002854521 00000 n
+0000304191 00000 n
+0000304275 00000 n
+0002048198 00000 n
+0002854422 00000 n
+0000304327 00000 n
+0000304411 00000 n
+0002048328 00000 n
+0002854323 00000 n
+0000304463 00000 n
+0000304602 00000 n
+0002048455 00000 n
+0002854239 00000 n
+0000304654 00000 n
+0000304718 00000 n
+0002052444 00000 n
+0002854099 00000 n
+0000304774 00000 n
+0000304959 00000 n
+0002052573 00000 n
+0002854015 00000 n
+0000305011 00000 n
+0000305115 00000 n
+0002052895 00000 n
+0002853931 00000 n
+0000305167 00000 n
+0000305306 00000 n
+0002053089 00000 n
+0002853806 00000 n
+0000305362 00000 n
+0000305504 00000 n
+0002053218 00000 n
+0002853722 00000 n
+0000305556 00000 n
+0000305640 00000 n
+0002058033 00000 n
+0002853623 00000 n
+0000305692 00000 n
+0000305776 00000 n
+0002058162 00000 n
+0002853524 00000 n
+0000305828 00000 n
+0000305947 00000 n
+0002066640 00000 n
+0002853440 00000 n
+0000305999 00000 n
+0000306098 00000 n
+0002066768 00000 n
+0002853315 00000 n
+0000306149 00000 n
+0000306384 00000 n
+0002075830 00000 n
+0002853190 00000 n
+0000306440 00000 n
+0000306625 00000 n
+0002075959 00000 n
+0002853106 00000 n
+0000306677 00000 n
+0000306837 00000 n
+0002076088 00000 n
+0002853007 00000 n
+0000306889 00000 n
+0000306978 00000 n
+0002076217 00000 n
+0002852908 00000 n
+0000307030 00000 n
+0000307119 00000 n
+0002076344 00000 n
+0002852809 00000 n
+0000307171 00000 n
+0000307295 00000 n
+0002076473 00000 n
+0002852725 00000 n
+0000307347 00000 n
+0000307451 00000 n
+0002076537 00000 n
+0002852584 00000 n
+0000307507 00000 n
+0000307649 00000 n
+0002076666 00000 n
+0002852500 00000 n
+0000307701 00000 n
+0000307816 00000 n
+0002076795 00000 n
+0002852401 00000 n
+0000307868 00000 n
+0000307983 00000 n
+0002079250 00000 n
+0002852302 00000 n
+0000308035 00000 n
+0000308117 00000 n
+0002079379 00000 n
+0002852203 00000 n
+0000308169 00000 n
+0000308256 00000 n
+0002079508 00000 n
+0002852104 00000 n
+0000308308 00000 n
+0000308397 00000 n
+0002079637 00000 n
+0002852005 00000 n
+0000308449 00000 n
+0000308538 00000 n
+0002079766 00000 n
+0002851906 00000 n
+0000308590 00000 n
+0000308714 00000 n
+0002079894 00000 n
+0002851807 00000 n
+0000308766 00000 n
+0000308870 00000 n
+0002080022 00000 n
+0002851708 00000 n
+0000308922 00000 n
+0000309014 00000 n
+0002080151 00000 n
+0002851609 00000 n
+0000309066 00000 n
+0000309158 00000 n
+0002080280 00000 n
+0002851510 00000 n
+0000309210 00000 n
+0000309292 00000 n
+0002080409 00000 n
+0002851411 00000 n
+0000309344 00000 n
+0000309479 00000 n
+0002080538 00000 n
+0002851312 00000 n
+0000309531 00000 n
+0000309623 00000 n
+0002082197 00000 n
+0002851228 00000 n
+0000309675 00000 n
+0000309823 00000 n
+0002082260 00000 n
+0002851103 00000 n
+0000309879 00000 n
+0000310021 00000 n
+0002082389 00000 n
+0002851019 00000 n
+0000310073 00000 n
+0000310127 00000 n
+0002082518 00000 n
+0002850920 00000 n
+0000310179 00000 n
+0000310251 00000 n
+0002082646 00000 n
+0002850836 00000 n
+0000310303 00000 n
+0000310380 00000 n
+0002096547 00000 n
+0002850751 00000 n
+0000310432 00000 n
+0000310486 00000 n
+0000310862 00000 n
+0000311048 00000 n
+0000310540 00000 n
+0000310985 00000 n
+0002842966 00000 n
+0002843505 00000 n
+0000312293 00000 n
+0000312170 00000 n
+0000311122 00000 n
+0002842425 00000 n
+0002843324 00000 n
+0000312730 00000 n
+0000312607 00000 n
+0000312395 00000 n
+0000314535 00000 n
+0000314685 00000 n
+0000314839 00000 n
+0000314990 00000 n
+0000315144 00000 n
+0000315295 00000 n
+0000315448 00000 n
+0000315599 00000 n
+0000315753 00000 n
+0000315903 00000 n
+0000316057 00000 n
+0000316217 00000 n
+0000316370 00000 n
+0000316522 00000 n
+0000316682 00000 n
+0000316836 00000 n
+0000316989 00000 n
+0000317142 00000 n
+0000317296 00000 n
+0000317451 00000 n
+0000317606 00000 n
+0000317761 00000 n
+0000317916 00000 n
+0000318071 00000 n
+0000318226 00000 n
+0000318381 00000 n
+0000318536 00000 n
+0000318691 00000 n
+0000318844 00000 n
+0000318997 00000 n
+0000319151 00000 n
+0000319306 00000 n
+0000319461 00000 n
+0000319616 00000 n
+0000319771 00000 n
+0000319926 00000 n
+0000320080 00000 n
+0000320235 00000 n
+0000320390 00000 n
+0000320544 00000 n
+0000320704 00000 n
+0000320857 00000 n
+0000321009 00000 n
+0000323845 00000 n
+0000321225 00000 n
+0000314013 00000 n
+0000312804 00000 n
+0000321162 00000 n
+0000324000 00000 n
+0000324160 00000 n
+0000324315 00000 n
+0000324469 00000 n
+0000324620 00000 n
+0000324774 00000 n
+0000324934 00000 n
+0000325092 00000 n
+0000325246 00000 n
+0000325401 00000 n
+0000325555 00000 n
+0000325710 00000 n
+0000325864 00000 n
+0000326024 00000 n
+0000326181 00000 n
+0000326335 00000 n
+0000326489 00000 n
+0000326644 00000 n
+0000326798 00000 n
+0000326958 00000 n
+0000327116 00000 n
+0000327271 00000 n
+0000327426 00000 n
+0000327581 00000 n
+0000327736 00000 n
+0000327891 00000 n
+0000328046 00000 n
+0000328200 00000 n
+0000328354 00000 n
+0000328514 00000 n
+0000328674 00000 n
+0000328829 00000 n
+0000328989 00000 n
+0000329144 00000 n
+0000329299 00000 n
+0000329453 00000 n
+0000329608 00000 n
+0000329766 00000 n
+0000329921 00000 n
+0000330076 00000 n
+0000330230 00000 n
+0000330390 00000 n
+0000330548 00000 n
+0000330703 00000 n
+0000330858 00000 n
+0000331012 00000 n
+0000331172 00000 n
+0000331332 00000 n
+0000331486 00000 n
+0000331641 00000 n
+0000331795 00000 n
+0000331955 00000 n
+0000332110 00000 n
+0000332265 00000 n
+0000332421 00000 n
+0000332574 00000 n
+0000335571 00000 n
+0000332727 00000 n
+0000323197 00000 n
+0000321313 00000 n
+0002843143 00000 n
+0002841442 00000 n
+0002841590 00000 n
+0000335725 00000 n
+0000335885 00000 n
+0000336043 00000 n
+0000336198 00000 n
+0000336353 00000 n
+0000336507 00000 n
+0000336667 00000 n
+0000336825 00000 n
+0000336980 00000 n
+0000337135 00000 n
+0000337288 00000 n
+0000337442 00000 n
+0000337596 00000 n
+0000337751 00000 n
+0000337906 00000 n
+0000338060 00000 n
+0000338220 00000 n
+0000338378 00000 n
+0000338533 00000 n
+0000338687 00000 n
+0000338842 00000 n
+0000338997 00000 n
+0000339152 00000 n
+0000339306 00000 n
+0000339467 00000 n
+0000339624 00000 n
+0000339777 00000 n
+0000339932 00000 n
+0000340087 00000 n
+0000340242 00000 n
+0000340403 00000 n
+0000340564 00000 n
+0000340720 00000 n
+0000340876 00000 n
+0000341036 00000 n
+0000341190 00000 n
+0000341351 00000 n
+0000341507 00000 n
+0000341662 00000 n
+0000341823 00000 n
+0000341978 00000 n
+0000342134 00000 n
+0000342290 00000 n
+0000342446 00000 n
+0000342602 00000 n
+0000342758 00000 n
+0000342913 00000 n
+0000343069 00000 n
+0000343225 00000 n
+0000343379 00000 n
+0000343535 00000 n
+0000343691 00000 n
+0000343847 00000 n
+0000344002 00000 n
+0000344158 00000 n
+0000344313 00000 n
+0000344467 00000 n
+0000347656 00000 n
+0000344620 00000 n
+0000334914 00000 n
+0000332871 00000 n
+0000347812 00000 n
+0000347968 00000 n
+0000348124 00000 n
+0000348280 00000 n
+0000348435 00000 n
+0000348596 00000 n
+0000348752 00000 n
+0000348907 00000 n
+0000349066 00000 n
+0000349222 00000 n
+0000349378 00000 n
+0000349534 00000 n
+0000349690 00000 n
+0000349846 00000 n
+0000350002 00000 n
+0000350157 00000 n
+0000350313 00000 n
+0000350469 00000 n
+0000350625 00000 n
+0000350780 00000 n
+0000350936 00000 n
+0000351091 00000 n
+0000351247 00000 n
+0000351402 00000 n
+0000351558 00000 n
+0000351713 00000 n
+0000351872 00000 n
+0000352031 00000 n
+0000352187 00000 n
+0000352343 00000 n
+0000352498 00000 n
+0000352659 00000 n
+0000352818 00000 n
+0000352973 00000 n
+0000353129 00000 n
+0000353284 00000 n
+0000353445 00000 n
+0000353604 00000 n
+0000353760 00000 n
+0000353915 00000 n
+0000354070 00000 n
+0000354225 00000 n
+0000354386 00000 n
+0000354547 00000 n
+0000354703 00000 n
+0000354864 00000 n
+0000355020 00000 n
+0000355176 00000 n
+0000355329 00000 n
+0000355485 00000 n
+0000355641 00000 n
+0000355800 00000 n
+0000355956 00000 n
+0000356111 00000 n
+0000356272 00000 n
+0000356430 00000 n
+0000356584 00000 n
+0000359851 00000 n
+0000356737 00000 n
+0000346999 00000 n
+0000344736 00000 n
+0002843631 00000 n
+0000360006 00000 n
+0000360167 00000 n
+0000360326 00000 n
+0000360482 00000 n
+0000360638 00000 n
+0000360794 00000 n
+0000360950 00000 n
+0000361106 00000 n
+0000361262 00000 n
+0000361418 00000 n
+0000361573 00000 n
+0000361729 00000 n
+0000361884 00000 n
+0000362045 00000 n
+0000362204 00000 n
+0000362360 00000 n
+0000362516 00000 n
+0000362671 00000 n
+0000362832 00000 n
+0000362990 00000 n
+0000363146 00000 n
+0000363301 00000 n
+0000363462 00000 n
+0000363623 00000 n
+0000363779 00000 n
+0000363933 00000 n
+0000364093 00000 n
+0000364249 00000 n
+0000364404 00000 n
+0000364560 00000 n
+0000364716 00000 n
+0000364872 00000 n
+0000365031 00000 n
+0000365186 00000 n
+0000365341 00000 n
+0000365496 00000 n
+0000365657 00000 n
+0000365816 00000 n
+0000365972 00000 n
+0000366127 00000 n
+0000366288 00000 n
+0000366449 00000 n
+0000366605 00000 n
+0000366760 00000 n
+0000366921 00000 n
+0000367082 00000 n
+0000367236 00000 n
+0000367391 00000 n
+0000367552 00000 n
+0000367712 00000 n
+0000367868 00000 n
+0000368023 00000 n
+0000368184 00000 n
+0000368345 00000 n
+0000368501 00000 n
+0000368654 00000 n
+0000368813 00000 n
+0000372396 00000 n
+0000368972 00000 n
+0000359194 00000 n
+0000356839 00000 n
+0000372551 00000 n
+0000372706 00000 n
+0000372867 00000 n
+0000373028 00000 n
+0000373184 00000 n
+0000373339 00000 n
+0000373500 00000 n
+0000373661 00000 n
+0000373815 00000 n
+0000373970 00000 n
+0000374131 00000 n
+0000374291 00000 n
+0000374447 00000 n
+0000374602 00000 n
+0000374763 00000 n
+0000374924 00000 n
+0000375080 00000 n
+0000375235 00000 n
+0000375396 00000 n
+0000375555 00000 n
+0000375711 00000 n
+0000375866 00000 n
+0000376027 00000 n
+0000376188 00000 n
+0000376344 00000 n
+0000376498 00000 n
+0000376657 00000 n
+0000376818 00000 n
+0000376974 00000 n
+0000377129 00000 n
+0000377290 00000 n
+0000377451 00000 n
+0000377606 00000 n
+0000377761 00000 n
+0000377919 00000 n
+0000378080 00000 n
+0000378236 00000 n
+0000378391 00000 n
+0000378552 00000 n
+0000378713 00000 n
+0000378869 00000 n
+0000379024 00000 n
+0000379185 00000 n
+0000379346 00000 n
+0000379501 00000 n
+0000379656 00000 n
+0000379817 00000 n
+0000379978 00000 n
+0000380134 00000 n
+0000380289 00000 n
+0000380450 00000 n
+0000380611 00000 n
+0000380767 00000 n
+0000380921 00000 n
+0000381082 00000 n
+0000381242 00000 n
+0000381396 00000 n
+0000384646 00000 n
+0000381549 00000 n
+0000371739 00000 n
+0000369088 00000 n
+0000384807 00000 n
+0000384968 00000 n
+0000385123 00000 n
+0000385278 00000 n
+0000385439 00000 n
+0000385600 00000 n
+0000385756 00000 n
+0000385917 00000 n
+0000386071 00000 n
+0000386227 00000 n
+0000386382 00000 n
+0000386538 00000 n
+0000386694 00000 n
+0000386849 00000 n
+0000387005 00000 n
+0000387161 00000 n
+0000387320 00000 n
+0000387476 00000 n
+0000387632 00000 n
+0000387788 00000 n
+0000387944 00000 n
+0000388099 00000 n
+0000388260 00000 n
+0000388421 00000 n
+0000388577 00000 n
+0000388733 00000 n
+0000388893 00000 n
+0000389049 00000 n
+0000389205 00000 n
+0000389361 00000 n
+0000389516 00000 n
+0000389672 00000 n
+0000389831 00000 n
+0000389987 00000 n
+0000390143 00000 n
+0000390298 00000 n
+0000390459 00000 n
+0000390618 00000 n
+0000390773 00000 n
+0000390929 00000 n
+0000391085 00000 n
+0000391240 00000 n
+0000391401 00000 n
+0000391562 00000 n
+0000391718 00000 n
+0000391874 00000 n
+0000392035 00000 n
+0000392191 00000 n
+0000392347 00000 n
+0000392503 00000 n
+0000392659 00000 n
+0000392815 00000 n
+0000392970 00000 n
+0000393126 00000 n
+0000393285 00000 n
+0000393440 00000 n
+0000393594 00000 n
+0000396495 00000 n
+0000393748 00000 n
+0000383989 00000 n
+0000381651 00000 n
+0000396651 00000 n
+0000396806 00000 n
+0000396967 00000 n
+0000397128 00000 n
+0000397283 00000 n
+0000397439 00000 n
+0000397598 00000 n
+0000397754 00000 n
+0000397909 00000 n
+0000398070 00000 n
+0000398230 00000 n
+0000398386 00000 n
+0000398541 00000 n
+0000398702 00000 n
+0000398858 00000 n
+0000399014 00000 n
+0000399173 00000 n
+0000399328 00000 n
+0000399482 00000 n
+0000399641 00000 n
+0000399802 00000 n
+0000399958 00000 n
+0000400117 00000 n
+0000400273 00000 n
+0000400429 00000 n
+0000400584 00000 n
+0000400743 00000 n
+0000400904 00000 n
+0000401060 00000 n
+0000401221 00000 n
+0000401377 00000 n
+0000401533 00000 n
+0000401689 00000 n
+0000401845 00000 n
+0000402000 00000 n
+0000402154 00000 n
+0000402310 00000 n
+0000402466 00000 n
+0000402622 00000 n
+0000402778 00000 n
+0000402933 00000 n
+0000403089 00000 n
+0000403245 00000 n
+0000403401 00000 n
+0000403557 00000 n
+0000403713 00000 n
+0000403869 00000 n
+0000404028 00000 n
+0000404184 00000 n
+0000404339 00000 n
+0000404495 00000 n
+0000404651 00000 n
+0000404807 00000 n
+0000404963 00000 n
+0000405119 00000 n
+0000405274 00000 n
+0000405428 00000 n
+0000408806 00000 n
+0000405581 00000 n
+0000395838 00000 n
+0000393864 00000 n
+0000408962 00000 n
+0000409118 00000 n
+0000409274 00000 n
+0000409430 00000 n
+0000409586 00000 n
+0000409741 00000 n
+0000409902 00000 n
+0000410061 00000 n
+0000410217 00000 n
+0000410373 00000 n
+0000410527 00000 n
+0000410681 00000 n
+0000410842 00000 n
+0000411003 00000 n
+0000411159 00000 n
+0000411313 00000 n
+0000411474 00000 n
+0000411635 00000 n
+0000411791 00000 n
+0000411946 00000 n
+0000412107 00000 n
+0000412268 00000 n
+0000412424 00000 n
+0000412579 00000 n
+0000412740 00000 n
+0000412899 00000 n
+0000413054 00000 n
+0000413209 00000 n
+0000413370 00000 n
+0000413531 00000 n
+0000413687 00000 n
+0000413842 00000 n
+0000414003 00000 n
+0000414161 00000 n
+0000414316 00000 n
+0000414472 00000 n
+0000414628 00000 n
+0000414784 00000 n
+0000414939 00000 n
+0000415100 00000 n
+0000415260 00000 n
+0000415416 00000 n
+0000415572 00000 n
+0000415733 00000 n
+0000415889 00000 n
+0000416045 00000 n
+0000416201 00000 n
+0000416357 00000 n
+0000416516 00000 n
+0000416670 00000 n
+0000416826 00000 n
+0000416982 00000 n
+0000417138 00000 n
+0000417293 00000 n
+0000417449 00000 n
+0000417603 00000 n
+0000417757 00000 n
+0000421827 00000 n
+0000417910 00000 n
+0000408149 00000 n
+0000405697 00000 n
+0000421983 00000 n
+0000422139 00000 n
+0000422295 00000 n
+0000422451 00000 n
+0000422607 00000 n
+0000422763 00000 n
+0000422919 00000 n
+0000423075 00000 n
+0000423229 00000 n
+0000423385 00000 n
+0000423541 00000 n
+0000423692 00000 n
+0000423848 00000 n
+0000424004 00000 n
+0000424160 00000 n
+0000424316 00000 n
+0000424471 00000 n
+0000424627 00000 n
+0000424783 00000 n
+0000424938 00000 n
+0000425093 00000 n
+0000425252 00000 n
+0000425408 00000 n
+0000425564 00000 n
+0000425720 00000 n
+0000425876 00000 n
+0000426031 00000 n
+0000426187 00000 n
+0000426343 00000 n
+0000426499 00000 n
+0000426654 00000 n
+0000426809 00000 n
+0000426965 00000 n
+0000427120 00000 n
+0000427275 00000 n
+0000427431 00000 n
+0000427587 00000 n
+0000427743 00000 n
+0000427899 00000 n
+0000428055 00000 n
+0000428211 00000 n
+0000428367 00000 n
+0000428523 00000 n
+0000428678 00000 n
+0000428834 00000 n
+0000428990 00000 n
+0000429146 00000 n
+0000429302 00000 n
+0000429456 00000 n
+0000429615 00000 n
+0000429776 00000 n
+0000429932 00000 n
+0000430087 00000 n
+0000430248 00000 n
+0000430409 00000 n
+0000430564 00000 n
+0000430717 00000 n
+0000434143 00000 n
+0000430871 00000 n
+0000421170 00000 n
+0000418040 00000 n
+0002843757 00000 n
+0000434304 00000 n
+0000434460 00000 n
+0000434614 00000 n
+0000434775 00000 n
+0000434936 00000 n
+0000435092 00000 n
+0000435247 00000 n
+0000435408 00000 n
+0000435569 00000 n
+0000435724 00000 n
+0000435877 00000 n
+0000436033 00000 n
+0000436194 00000 n
+0000436350 00000 n
+0000436505 00000 n
+0000436666 00000 n
+0000436827 00000 n
+0000436983 00000 n
+0000437138 00000 n
+0000437297 00000 n
+0000437458 00000 n
+0000437614 00000 n
+0000437769 00000 n
+0000437930 00000 n
+0000438091 00000 n
+0000438247 00000 n
+0000438401 00000 n
+0000438562 00000 n
+0000438721 00000 n
+0000438877 00000 n
+0000439031 00000 n
+0000439192 00000 n
+0000439351 00000 n
+0000439506 00000 n
+0000439660 00000 n
+0000439821 00000 n
+0000439982 00000 n
+0000440138 00000 n
+0000440292 00000 n
+0000440453 00000 n
+0000440613 00000 n
+0000440769 00000 n
+0000440924 00000 n
+0000441085 00000 n
+0000441246 00000 n
+0000441402 00000 n
+0000441556 00000 n
+0000441717 00000 n
+0000441876 00000 n
+0000442031 00000 n
+0000442186 00000 n
+0000442347 00000 n
+0000442508 00000 n
+0000442663 00000 n
+0000442818 00000 n
+0000442978 00000 n
+0000443137 00000 n
+0000446335 00000 n
+0000443290 00000 n
+0000433486 00000 n
+0000430973 00000 n
+0000446489 00000 n
+0000446650 00000 n
+0000446811 00000 n
+0000446967 00000 n
+0000447122 00000 n
+0000447283 00000 n
+0000447444 00000 n
+0000447599 00000 n
+0000447752 00000 n
+0000447913 00000 n
+0000448073 00000 n
+0000448228 00000 n
+0000448383 00000 n
+0000448544 00000 n
+0000448705 00000 n
+0000448860 00000 n
+0000449015 00000 n
+0000449176 00000 n
+0000449335 00000 n
+0000449491 00000 n
+0000449646 00000 n
+0000449807 00000 n
+0000449968 00000 n
+0000450123 00000 n
+0000450282 00000 n
+0000450436 00000 n
+0000450591 00000 n
+0000450745 00000 n
+0000450901 00000 n
+0000451056 00000 n
+0000451217 00000 n
+0000451378 00000 n
+0000451534 00000 n
+0000451689 00000 n
+0000451849 00000 n
+0000452005 00000 n
+0000452161 00000 n
+0000452317 00000 n
+0000452473 00000 n
+0000452632 00000 n
+0000452788 00000 n
+0000452944 00000 n
+0000453100 00000 n
+0000453256 00000 n
+0000453411 00000 n
+0000453567 00000 n
+0000453723 00000 n
+0000453879 00000 n
+0000454032 00000 n
+0000454185 00000 n
+0000454346 00000 n
+0000454507 00000 n
+0000454663 00000 n
+0000454824 00000 n
+0000454980 00000 n
+0000455138 00000 n
+0000455291 00000 n
+0000458054 00000 n
+0000455445 00000 n
+0000445678 00000 n
+0000443392 00000 n
+0000458210 00000 n
+0000458366 00000 n
+0000458522 00000 n
+0000458678 00000 n
+0000458834 00000 n
+0000458990 00000 n
+0000459146 00000 n
+0000459300 00000 n
+0000459461 00000 n
+0000459622 00000 n
+0000459776 00000 n
+0000459934 00000 n
+0000460089 00000 n
+0000460245 00000 n
+0000460400 00000 n
+0000460561 00000 n
+0000460722 00000 n
+0000460877 00000 n
+0000461038 00000 n
+0000461193 00000 n
+0000461354 00000 n
+0000461510 00000 n
+0000461666 00000 n
+0000461825 00000 n
+0000461981 00000 n
+0000462134 00000 n
+0000462288 00000 n
+0000462449 00000 n
+0000462610 00000 n
+0000462766 00000 n
+0000462925 00000 n
+0000463081 00000 n
+0000463237 00000 n
+0000463392 00000 n
+0000463547 00000 n
+0000463703 00000 n
+0000463858 00000 n
+0000464019 00000 n
+0000464180 00000 n
+0000464336 00000 n
+0000464491 00000 n
+0000464652 00000 n
+0000464808 00000 n
+0000464964 00000 n
+0000465120 00000 n
+0000465279 00000 n
+0000465435 00000 n
+0000465591 00000 n
+0000465747 00000 n
+0000465901 00000 n
+0000466062 00000 n
+0000466221 00000 n
+0000466377 00000 n
+0000466533 00000 n
+0000466689 00000 n
+0000466844 00000 n
+0000466998 00000 n
+0000469989 00000 n
+0000467152 00000 n
+0000457397 00000 n
+0000455561 00000 n
+0000470145 00000 n
+0000470301 00000 n
+0000470457 00000 n
+0000470613 00000 n
+0000470769 00000 n
+0000470925 00000 n
+0000471081 00000 n
+0000471237 00000 n
+0000471391 00000 n
+0000471547 00000 n
+0000471702 00000 n
+0000471857 00000 n
+0000472013 00000 n
+0000472169 00000 n
+0000472324 00000 n
+0000472480 00000 n
+0000472636 00000 n
+0000472792 00000 n
+0000472948 00000 n
+0000473103 00000 n
+0000473259 00000 n
+0000473415 00000 n
+0000473571 00000 n
+0000473727 00000 n
+0000473883 00000 n
+0000474036 00000 n
+0000474195 00000 n
+0000474354 00000 n
+0000474510 00000 n
+0000474666 00000 n
+0000474821 00000 n
+0000474982 00000 n
+0000475141 00000 n
+0000475297 00000 n
+0000475452 00000 n
+0000475608 00000 n
+0000475764 00000 n
+0000475920 00000 n
+0000476075 00000 n
+0000476231 00000 n
+0000476386 00000 n
+0000476542 00000 n
+0000476697 00000 n
+0000476853 00000 n
+0000477007 00000 n
+0000477168 00000 n
+0000477327 00000 n
+0000477483 00000 n
+0000477639 00000 n
+0000477794 00000 n
+0000477950 00000 n
+0000478106 00000 n
+0000478262 00000 n
+0000478417 00000 n
+0000478572 00000 n
+0000478727 00000 n
+0000478880 00000 n
+0000482383 00000 n
+0000479034 00000 n
+0000469332 00000 n
+0000467282 00000 n
+0000482544 00000 n
+0000482700 00000 n
+0000482861 00000 n
+0000483017 00000 n
+0000483173 00000 n
+0000483329 00000 n
+0000483485 00000 n
+0000483641 00000 n
+0000483797 00000 n
+0000483952 00000 n
+0000484113 00000 n
+0000484272 00000 n
+0000484427 00000 n
+0000484582 00000 n
+0000484743 00000 n
+0000484904 00000 n
+0000485060 00000 n
+0000485216 00000 n
+0000485374 00000 n
+0000485530 00000 n
+0000485685 00000 n
+0000485840 00000 n
+0000485991 00000 n
+0000486145 00000 n
+0000486304 00000 n
+0000486460 00000 n
+0000486620 00000 n
+0000486775 00000 n
+0000486931 00000 n
+0000487087 00000 n
+0000487241 00000 n
+0000487397 00000 n
+0000487553 00000 n
+0000487709 00000 n
+0000487865 00000 n
+0000488020 00000 n
+0000488180 00000 n
+0000488336 00000 n
+0000488491 00000 n
+0000488645 00000 n
+0000488805 00000 n
+0000488960 00000 n
+0000489115 00000 n
+0000489275 00000 n
+0000489431 00000 n
+0000489587 00000 n
+0000489743 00000 n
+0000489899 00000 n
+0000490055 00000 n
+0000490211 00000 n
+0000490365 00000 n
+0000490525 00000 n
+0000490680 00000 n
+0000490836 00000 n
+0000490988 00000 n
+0000491146 00000 n
+0000494338 00000 n
+0000491300 00000 n
+0000481735 00000 n
+0000479136 00000 n
+0000494492 00000 n
+0000494652 00000 n
+0000494808 00000 n
+0000494964 00000 n
+0000495120 00000 n
+0000495276 00000 n
+0000495430 00000 n
+0000495590 00000 n
+0000495746 00000 n
+0000495902 00000 n
+0000496058 00000 n
+0000496213 00000 n
+0000496368 00000 n
+0000496522 00000 n
+0000496682 00000 n
+0000496838 00000 n
+0000496994 00000 n
+0000497150 00000 n
+0000497306 00000 n
+0000497460 00000 n
+0000497616 00000 n
+0000497771 00000 n
+0000497931 00000 n
+0000498087 00000 n
+0000498241 00000 n
+0000498401 00000 n
+0000498561 00000 n
+0000498717 00000 n
+0000498873 00000 n
+0000499029 00000 n
+0000499185 00000 n
+0000499341 00000 n
+0000499497 00000 n
+0000499656 00000 n
+0000499811 00000 n
+0000499967 00000 n
+0000500123 00000 n
+0000500279 00000 n
+0000500435 00000 n
+0000500591 00000 n
+0000500744 00000 n
+0000500904 00000 n
+0000501060 00000 n
+0000501216 00000 n
+0000501372 00000 n
+0000501526 00000 n
+0000501687 00000 n
+0000501848 00000 n
+0000502002 00000 n
+0000502157 00000 n
+0000502313 00000 n
+0000502474 00000 n
+0000502630 00000 n
+0000502786 00000 n
+0000502942 00000 n
+0000503095 00000 n
+0000503254 00000 n
+0000506813 00000 n
+0000503407 00000 n
+0000493681 00000 n
+0000491430 00000 n
+0002843883 00000 n
+0000506968 00000 n
+0000507124 00000 n
+0000507280 00000 n
+0000507436 00000 n
+0000507591 00000 n
+0000507752 00000 n
+0000507908 00000 n
+0000508064 00000 n
+0000508218 00000 n
+0000508374 00000 n
+0000508530 00000 n
+0000508690 00000 n
+0000508846 00000 n
+0000509002 00000 n
+0000509158 00000 n
+0000509314 00000 n
+0000509475 00000 n
+0000509631 00000 n
+0000509787 00000 n
+0000509942 00000 n
+0000510098 00000 n
+0000510254 00000 n
+0000510409 00000 n
+0000510570 00000 n
+0000510726 00000 n
+0000510885 00000 n
+0000511040 00000 n
+0000511196 00000 n
+0000511352 00000 n
+0000511508 00000 n
+0000511663 00000 n
+0000511824 00000 n
+0000511980 00000 n
+0000512135 00000 n
+0000512291 00000 n
+0000512446 00000 n
+0000512606 00000 n
+0000512762 00000 n
+0000512918 00000 n
+0000513074 00000 n
+0000513234 00000 n
+0000513390 00000 n
+0000513546 00000 n
+0000513702 00000 n
+0000513858 00000 n
+0000514014 00000 n
+0000514169 00000 n
+0000514325 00000 n
+0000514479 00000 n
+0000514640 00000 n
+0000514795 00000 n
+0000514956 00000 n
+0000515112 00000 n
+0000515267 00000 n
+0000515422 00000 n
+0000515581 00000 n
+0000515735 00000 n
+0000520197 00000 n
+0000515892 00000 n
+0000506156 00000 n
+0000503509 00000 n
+0000520352 00000 n
+0000520513 00000 n
+0000520669 00000 n
+0000520824 00000 n
+0000520979 00000 n
+0000521140 00000 n
+0000521296 00000 n
+0000521452 00000 n
+0000521608 00000 n
+0000521764 00000 n
+0000521919 00000 n
+0000522079 00000 n
+0000522235 00000 n
+0000522395 00000 n
+0000522551 00000 n
+0000522707 00000 n
+0000522868 00000 n
+0000523024 00000 n
+0000523180 00000 n
+0000523333 00000 n
+0000523489 00000 n
+0000523645 00000 n
+0000523800 00000 n
+0000523955 00000 n
+0000524111 00000 n
+0000524267 00000 n
+0000524423 00000 n
+0000524578 00000 n
+0000524734 00000 n
+0000524890 00000 n
+0000525046 00000 n
+0000525202 00000 n
+0000525358 00000 n
+0000525514 00000 n
+0000525669 00000 n
+0000525825 00000 n
+0000525981 00000 n
+0000526137 00000 n
+0000526291 00000 n
+0000526447 00000 n
+0000526603 00000 n
+0000526758 00000 n
+0000526914 00000 n
+0000527070 00000 n
+0000527226 00000 n
+0000527382 00000 n
+0000527537 00000 n
+0000527693 00000 n
+0000527848 00000 n
+0000528003 00000 n
+0000528159 00000 n
+0000528314 00000 n
+0000528470 00000 n
+0000528625 00000 n
+0000528781 00000 n
+0000528936 00000 n
+0000529090 00000 n
+0000533191 00000 n
+0000529240 00000 n
+0000519540 00000 n
+0000515994 00000 n
+0000533346 00000 n
+0000533502 00000 n
+0000533658 00000 n
+0000533814 00000 n
+0000533970 00000 n
+0000534126 00000 n
+0000534282 00000 n
+0000534437 00000 n
+0000534591 00000 n
+0000534747 00000 n
+0000534900 00000 n
+0000535060 00000 n
+0000535216 00000 n
+0000535371 00000 n
+0000535532 00000 n
+0000535693 00000 n
+0000535849 00000 n
+0000536005 00000 n
+0000536161 00000 n
+0000536314 00000 n
+0000536470 00000 n
+0000536626 00000 n
+0000536782 00000 n
+0000536938 00000 n
+0000537094 00000 n
+0000537248 00000 n
+0000537403 00000 n
+0000537559 00000 n
+0000537719 00000 n
+0000537875 00000 n
+0000538035 00000 n
+0000538191 00000 n
+0000538346 00000 n
+0000538506 00000 n
+0000538661 00000 n
+0000538822 00000 n
+0000538978 00000 n
+0000539134 00000 n
+0000539289 00000 n
+0000539445 00000 n
+0000539600 00000 n
+0000539756 00000 n
+0000539912 00000 n
+0000540068 00000 n
+0000540224 00000 n
+0000540380 00000 n
+0000540535 00000 n
+0000540691 00000 n
+0000540846 00000 n
+0000541002 00000 n
+0000541158 00000 n
+0000541314 00000 n
+0000541470 00000 n
+0000541626 00000 n
+0000541782 00000 n
+0000541936 00000 n
+0000542089 00000 n
+0000546279 00000 n
+0000542247 00000 n
+0000532534 00000 n
+0000529342 00000 n
+0000546435 00000 n
+0000546591 00000 n
+0000546745 00000 n
+0000546906 00000 n
+0000547062 00000 n
+0000547222 00000 n
+0000547378 00000 n
+0000547534 00000 n
+0000547690 00000 n
+0000547846 00000 n
+0000547999 00000 n
+0000548154 00000 n
+0000548314 00000 n
+0000548470 00000 n
+0000548625 00000 n
+0000548786 00000 n
+0000548941 00000 n
+0000549097 00000 n
+0000549258 00000 n
+0000549413 00000 n
+0000549569 00000 n
+0000549725 00000 n
+0000549881 00000 n
+0000550037 00000 n
+0000550192 00000 n
+0000550347 00000 n
+0000550503 00000 n
+0000550659 00000 n
+0000550815 00000 n
+0000550970 00000 n
+0000551126 00000 n
+0000551282 00000 n
+0000551437 00000 n
+0000551592 00000 n
+0000551748 00000 n
+0000551909 00000 n
+0000552065 00000 n
+0000552221 00000 n
+0000552376 00000 n
+0000552532 00000 n
+0000552687 00000 n
+0000552843 00000 n
+0000552999 00000 n
+0000553155 00000 n
+0000553311 00000 n
+0000553467 00000 n
+0000553623 00000 n
+0000553779 00000 n
+0000553935 00000 n
+0000554089 00000 n
+0000554245 00000 n
+0000554401 00000 n
+0000554557 00000 n
+0000554713 00000 n
+0000554869 00000 n
+0000555023 00000 n
+0000555177 00000 n
+0000559406 00000 n
+0000555330 00000 n
+0000545622 00000 n
+0000542349 00000 n
+0000559562 00000 n
+0000559718 00000 n
+0000559873 00000 n
+0000560028 00000 n
+0000560184 00000 n
+0000560340 00000 n
+0000560496 00000 n
+0000560652 00000 n
+0000560808 00000 n
+0000560964 00000 n
+0000561118 00000 n
+0000561274 00000 n
+0000561429 00000 n
+0000561585 00000 n
+0000561741 00000 n
+0000561897 00000 n
+0000562053 00000 n
+0000562208 00000 n
+0000562364 00000 n
+0000562519 00000 n
+0000562680 00000 n
+0000562841 00000 n
+0000562997 00000 n
+0000563157 00000 n
+0000563313 00000 n
+0000563472 00000 n
+0000563627 00000 n
+0000563783 00000 n
+0000563939 00000 n
+0000564095 00000 n
+0000564251 00000 n
+0000564412 00000 n
+0000564568 00000 n
+0000564724 00000 n
+0000564879 00000 n
+0000565035 00000 n
+0000565190 00000 n
+0000565346 00000 n
+0000565502 00000 n
+0000565658 00000 n
+0000565814 00000 n
+0000565970 00000 n
+0000566126 00000 n
+0000566282 00000 n
+0000566438 00000 n
+0000566594 00000 n
+0000566750 00000 n
+0000566906 00000 n
+0000567061 00000 n
+0000567216 00000 n
+0000567372 00000 n
+0000567528 00000 n
+0000567682 00000 n
+0000567843 00000 n
+0000567997 00000 n
+0000568152 00000 n
+0000568309 00000 n
+0000572633 00000 n
+0000568461 00000 n
+0000558749 00000 n
+0000555432 00000 n
+0000572794 00000 n
+0000572949 00000 n
+0000573103 00000 n
+0000573260 00000 n
+0000573417 00000 n
+0000573574 00000 n
+0000573731 00000 n
+0000573888 00000 n
+0000574045 00000 n
+0000574202 00000 n
+0000574358 00000 n
+0000574514 00000 n
+0000574671 00000 n
+0000574828 00000 n
+0000574985 00000 n
+0000575141 00000 n
+0000575298 00000 n
+0000575454 00000 n
+0000575610 00000 n
+0000575765 00000 n
+0000575922 00000 n
+0000576079 00000 n
+0000576240 00000 n
+0000576397 00000 n
+0000576554 00000 n
+0000576711 00000 n
+0000576866 00000 n
+0000577022 00000 n
+0000577177 00000 n
+0000577338 00000 n
+0000577495 00000 n
+0000577652 00000 n
+0000577809 00000 n
+0000577965 00000 n
+0000578121 00000 n
+0000578278 00000 n
+0000578438 00000 n
+0000578595 00000 n
+0000578756 00000 n
+0000578913 00000 n
+0000579069 00000 n
+0000579224 00000 n
+0000579385 00000 n
+0000579541 00000 n
+0000579697 00000 n
+0000579854 00000 n
+0000580011 00000 n
+0000580168 00000 n
+0000580324 00000 n
+0000580481 00000 n
+0000580637 00000 n
+0000580793 00000 n
+0000580950 00000 n
+0000581106 00000 n
+0000581263 00000 n
+0000581419 00000 n
+0000581573 00000 n
+0000586175 00000 n
+0000581727 00000 n
+0000571976 00000 n
+0000568563 00000 n
+0002844009 00000 n
+0000586332 00000 n
+0000586489 00000 n
+0000586643 00000 n
+0000586804 00000 n
+0000586961 00000 n
+0000587118 00000 n
+0000587275 00000 n
+0000587432 00000 n
+0000587592 00000 n
+0000587749 00000 n
+0000587906 00000 n
+0000588066 00000 n
+0000588222 00000 n
+0000588378 00000 n
+0000588535 00000 n
+0000588691 00000 n
+0000588848 00000 n
+0000589003 00000 n
+0000589164 00000 n
+0000589321 00000 n
+0000589477 00000 n
+0000589634 00000 n
+0000589791 00000 n
+0000589947 00000 n
+0000590104 00000 n
+0000590261 00000 n
+0000590417 00000 n
+0000590574 00000 n
+0000590731 00000 n
+0000590888 00000 n
+0000591045 00000 n
+0000591201 00000 n
+0000591358 00000 n
+0000591515 00000 n
+0000591670 00000 n
+0000591827 00000 n
+0000591984 00000 n
+0000592141 00000 n
+0000592297 00000 n
+0000592454 00000 n
+0000592611 00000 n
+0000592768 00000 n
+0000592925 00000 n
+0000593082 00000 n
+0000593239 00000 n
+0000593395 00000 n
+0000593551 00000 n
+0000593708 00000 n
+0000593865 00000 n
+0000594021 00000 n
+0000594178 00000 n
+0000594335 00000 n
+0000594492 00000 n
+0000594648 00000 n
+0000594805 00000 n
+0000594961 00000 n
+0000595116 00000 n
+0000599554 00000 n
+0000595270 00000 n
+0000585518 00000 n
+0000581829 00000 n
+0000599710 00000 n
+0000599867 00000 n
+0000600023 00000 n
+0000600180 00000 n
+0000600337 00000 n
+0000600492 00000 n
+0000600653 00000 n
+0000600810 00000 n
+0000600965 00000 n
+0000601122 00000 n
+0000601277 00000 n
+0000601434 00000 n
+0000601591 00000 n
+0000601748 00000 n
+0000601905 00000 n
+0000602061 00000 n
+0000602218 00000 n
+0000602375 00000 n
+0000602532 00000 n
+0000602688 00000 n
+0000602845 00000 n
+0000603002 00000 n
+0000603159 00000 n
+0000603315 00000 n
+0000603472 00000 n
+0000603628 00000 n
+0000603784 00000 n
+0000603941 00000 n
+0000604098 00000 n
+0000604254 00000 n
+0000604411 00000 n
+0000604568 00000 n
+0000604724 00000 n
+0000604880 00000 n
+0000605036 00000 n
+0000605193 00000 n
+0000605350 00000 n
+0000605507 00000 n
+0000605662 00000 n
+0000605819 00000 n
+0000605976 00000 n
+0000606131 00000 n
+0000606288 00000 n
+0000606445 00000 n
+0000606602 00000 n
+0000606759 00000 n
+0000606915 00000 n
+0000607072 00000 n
+0000607229 00000 n
+0000607385 00000 n
+0000607542 00000 n
+0000607699 00000 n
+0000607855 00000 n
+0000608011 00000 n
+0000608168 00000 n
+0000608324 00000 n
+0000608479 00000 n
+0000612990 00000 n
+0000608633 00000 n
+0000598897 00000 n
+0000595372 00000 n
+0000613145 00000 n
+0000613302 00000 n
+0000613459 00000 n
+0000613616 00000 n
+0000613773 00000 n
+0000613930 00000 n
+0000614087 00000 n
+0000614244 00000 n
+0000614401 00000 n
+0000614558 00000 n
+0000614715 00000 n
+0000614868 00000 n
+0000615025 00000 n
+0000615182 00000 n
+0000615339 00000 n
+0000615495 00000 n
+0000615652 00000 n
+0000615809 00000 n
+0000615966 00000 n
+0000616122 00000 n
+0000616279 00000 n
+0000616436 00000 n
+0000616593 00000 n
+0000616749 00000 n
+0000616906 00000 n
+0000617063 00000 n
+0000617218 00000 n
+0000617374 00000 n
+0000617531 00000 n
+0000617688 00000 n
+0000617845 00000 n
+0000618002 00000 n
+0000618157 00000 n
+0000618311 00000 n
+0000618464 00000 n
+0000618625 00000 n
+0000618782 00000 n
+0000618939 00000 n
+0000619096 00000 n
+0000619253 00000 n
+0000619409 00000 n
+0000619566 00000 n
+0000619723 00000 n
+0000619880 00000 n
+0000620037 00000 n
+0000620194 00000 n
+0000620350 00000 n
+0000620507 00000 n
+0000620663 00000 n
+0000620817 00000 n
+0000620974 00000 n
+0000621131 00000 n
+0000621288 00000 n
+0000621444 00000 n
+0000621601 00000 n
+0000621755 00000 n
+0000621910 00000 n
+0000626176 00000 n
+0000622065 00000 n
+0000612333 00000 n
+0000608735 00000 n
+0000626333 00000 n
+0000626490 00000 n
+0000626646 00000 n
+0000626803 00000 n
+0000626960 00000 n
+0000627117 00000 n
+0000627274 00000 n
+0000627431 00000 n
+0000627588 00000 n
+0000627745 00000 n
+0000627902 00000 n
+0000628054 00000 n
+0000628211 00000 n
+0000628368 00000 n
+0000628525 00000 n
+0000628682 00000 n
+0000628839 00000 n
+0000628996 00000 n
+0000629153 00000 n
+0000629313 00000 n
+0000629469 00000 n
+0000629626 00000 n
+0000629783 00000 n
+0000629940 00000 n
+0000630094 00000 n
+0000630255 00000 n
+0000630416 00000 n
+0000630573 00000 n
+0000630730 00000 n
+0000630887 00000 n
+0000631044 00000 n
+0000631201 00000 n
+0000631358 00000 n
+0000631518 00000 n
+0000631675 00000 n
+0000631832 00000 n
+0000631993 00000 n
+0000632150 00000 n
+0000632306 00000 n
+0000632463 00000 n
+0000632617 00000 n
+0000632776 00000 n
+0000632933 00000 n
+0000633094 00000 n
+0000633251 00000 n
+0000633408 00000 n
+0000633564 00000 n
+0000633720 00000 n
+0000633879 00000 n
+0000634036 00000 n
+0000634193 00000 n
+0000634350 00000 n
+0000634507 00000 n
+0000634664 00000 n
+0000634821 00000 n
+0000634976 00000 n
+0000635131 00000 n
+0000638608 00000 n
+0000635286 00000 n
+0000625519 00000 n
+0000622167 00000 n
+0000638763 00000 n
+0000638920 00000 n
+0000639074 00000 n
+0000639235 00000 n
+0000639392 00000 n
+0000639553 00000 n
+0000639710 00000 n
+0000639867 00000 n
+0000640024 00000 n
+0000640179 00000 n
+0000640339 00000 n
+0000640496 00000 n
+0000640653 00000 n
+0000640808 00000 n
+0000640969 00000 n
+0000641125 00000 n
+0000641282 00000 n
+0000641438 00000 n
+0000641595 00000 n
+0000641750 00000 n
+0000641911 00000 n
+0000642068 00000 n
+0000642222 00000 n
+0000642383 00000 n
+0000642540 00000 n
+0000642693 00000 n
+0000642853 00000 n
+0000643010 00000 n
+0000643165 00000 n
+0000643326 00000 n
+0000643483 00000 n
+0000643640 00000 n
+0000643797 00000 n
+0000643957 00000 n
+0000644113 00000 n
+0000644270 00000 n
+0000644425 00000 n
+0000644585 00000 n
+0000644741 00000 n
+0000644902 00000 n
+0000645058 00000 n
+0000645213 00000 n
+0000645374 00000 n
+0000645531 00000 n
+0000645688 00000 n
+0000645845 00000 n
+0000645999 00000 n
+0000646154 00000 n
+0000646312 00000 n
+0000646469 00000 n
+0000646626 00000 n
+0000646783 00000 n
+0000646940 00000 n
+0000647097 00000 n
+0000647254 00000 n
+0000647410 00000 n
+0000647564 00000 n
+0000650829 00000 n
+0000647715 00000 n
+0000637951 00000 n
+0000635388 00000 n
+0000650989 00000 n
+0000651146 00000 n
+0000651307 00000 n
+0000651464 00000 n
+0000651621 00000 n
+0000651778 00000 n
+0000651933 00000 n
+0000652088 00000 n
+0000652249 00000 n
+0000652406 00000 n
+0000652562 00000 n
+0000652722 00000 n
+0000652879 00000 n
+0000653036 00000 n
+0000653193 00000 n
+0000653350 00000 n
+0000653511 00000 n
+0000653668 00000 n
+0000653824 00000 n
+0000653981 00000 n
+0000654137 00000 n
+0000654292 00000 n
+0000654449 00000 n
+0000654604 00000 n
+0000654765 00000 n
+0000654920 00000 n
+0000655080 00000 n
+0000655237 00000 n
+0000655394 00000 n
+0000655551 00000 n
+0000655706 00000 n
+0000655867 00000 n
+0000656024 00000 n
+0000656180 00000 n
+0000656340 00000 n
+0000656497 00000 n
+0000656654 00000 n
+0000656811 00000 n
+0000656967 00000 n
+0000657127 00000 n
+0000657284 00000 n
+0000657440 00000 n
+0000657601 00000 n
+0000657758 00000 n
+0000657915 00000 n
+0000658072 00000 n
+0000658229 00000 n
+0000658384 00000 n
+0000658542 00000 n
+0000658696 00000 n
+0000658853 00000 n
+0000659010 00000 n
+0000659167 00000 n
+0000659324 00000 n
+0000659485 00000 n
+0000659640 00000 n
+0000659795 00000 n
+0000661241 00000 n
+0000659949 00000 n
+0000650172 00000 n
+0000647817 00000 n
+0002844135 00000 n
+0000661398 00000 n
+0000661554 00000 n
+0000661711 00000 n
+0000661866 00000 n
+0000662023 00000 n
+0000662180 00000 n
+0000662337 00000 n
+0000662493 00000 n
+0000662650 00000 n
+0000662806 00000 n
+0000662963 00000 n
+0000663123 00000 n
+0000663280 00000 n
+0000663435 00000 n
+0000663592 00000 n
+0000663809 00000 n
+0000660962 00000 n
+0000660051 00000 n
+0000663746 00000 n
+0000664358 00000 n
+0000664172 00000 n
+0000663925 00000 n
+0000664295 00000 n
+0000665012 00000 n
+0000665170 00000 n
+0000665325 00000 n
+0000665484 00000 n
+0000665823 00000 n
+0000664841 00000 n
+0000664446 00000 n
+0000665639 00000 n
+0000755226 00000 n
+0000770276 00000 n
+0000666384 00000 n
+0000666198 00000 n
+0000665911 00000 n
+0000666321 00000 n
+0000669381 00000 n
+0000669536 00000 n
+0000669691 00000 n
+0000669846 00000 n
+0000670001 00000 n
+0000670155 00000 n
+0000670310 00000 n
+0000670465 00000 n
+0000670620 00000 n
+0000670775 00000 n
+0000670929 00000 n
+0000671085 00000 n
+0000671240 00000 n
+0000671396 00000 n
+0000671552 00000 n
+0000671708 00000 n
+0000671864 00000 n
+0000672019 00000 n
+0000672175 00000 n
+0000672329 00000 n
+0000672485 00000 n
+0000672641 00000 n
+0000672797 00000 n
+0000672953 00000 n
+0000673108 00000 n
+0000673264 00000 n
+0000673420 00000 n
+0000673576 00000 n
+0000673732 00000 n
+0000673886 00000 n
+0000674042 00000 n
+0000674198 00000 n
+0000674354 00000 n
+0000674510 00000 n
+0000674666 00000 n
+0000674822 00000 n
+0000674978 00000 n
+0000675133 00000 n
+0000675287 00000 n
+0000679450 00000 n
+0000675626 00000 n
+0000668895 00000 n
+0000666472 00000 n
+0000675441 00000 n
+0000679606 00000 n
+0000679762 00000 n
+0000679918 00000 n
+0000680074 00000 n
+0000680230 00000 n
+0000680386 00000 n
+0000680542 00000 n
+0000680698 00000 n
+0000680854 00000 n
+0000681009 00000 n
+0000681165 00000 n
+0000681320 00000 n
+0000681476 00000 n
+0000681630 00000 n
+0000681786 00000 n
+0000681942 00000 n
+0000682098 00000 n
+0000682254 00000 n
+0000682410 00000 n
+0000682566 00000 n
+0000682722 00000 n
+0000682878 00000 n
+0000683033 00000 n
+0000683189 00000 n
+0000683344 00000 n
+0000683500 00000 n
+0000683654 00000 n
+0000683810 00000 n
+0000683965 00000 n
+0000684121 00000 n
+0000684277 00000 n
+0000684433 00000 n
+0000684589 00000 n
+0000684745 00000 n
+0000684901 00000 n
+0000685057 00000 n
+0000685213 00000 n
+0000685369 00000 n
+0000685524 00000 n
+0000685680 00000 n
+0000685836 00000 n
+0000685992 00000 n
+0000686146 00000 n
+0000686302 00000 n
+0000686458 00000 n
+0000686614 00000 n
+0000686770 00000 n
+0000686926 00000 n
+0000687082 00000 n
+0000687238 00000 n
+0000687394 00000 n
+0000687549 00000 n
+0000687705 00000 n
+0000687860 00000 n
+0000688016 00000 n
+0000688233 00000 n
+0000678811 00000 n
+0000675714 00000 n
+0000688170 00000 n
+0002844261 00000 n
+0000691440 00000 n
+0000691606 00000 n
+0000691761 00000 n
+0000691919 00000 n
+0000692074 00000 n
+0000692232 00000 n
+0000692387 00000 n
+0000692545 00000 n
+0000692700 00000 n
+0000692871 00000 n
+0000693026 00000 n
+0000693205 00000 n
+0000693360 00000 n
+0000693522 00000 n
+0000693677 00000 n
+0000693843 00000 n
+0000693998 00000 n
+0000694155 00000 n
+0000694310 00000 n
+0000694468 00000 n
+0000694622 00000 n
+0000694778 00000 n
+0000694933 00000 n
+0000695103 00000 n
+0000695259 00000 n
+0000695427 00000 n
+0000695583 00000 n
+0000695749 00000 n
+0000695905 00000 n
+0000696063 00000 n
+0000696219 00000 n
+0000696379 00000 n
+0000696535 00000 n
+0000696704 00000 n
+0000696860 00000 n
+0000697015 00000 n
+0000697171 00000 n
+0000697337 00000 n
+0000697493 00000 n
+0000697663 00000 n
+0000697819 00000 n
+0000697997 00000 n
+0000698153 00000 n
+0000698352 00000 n
+0000698508 00000 n
+0000698708 00000 n
+0000698864 00000 n
+0000699065 00000 n
+0000699220 00000 n
+0000699421 00000 n
+0000699577 00000 n
+0000699766 00000 n
+0000699922 00000 n
+0000700113 00000 n
+0000700268 00000 n
+0000700457 00000 n
+0000700613 00000 n
+0000700807 00000 n
+0000700963 00000 n
+0000701154 00000 n
+0000701310 00000 n
+0000701512 00000 n
+0000701668 00000 n
+0000701857 00000 n
+0000702013 00000 n
+0000702204 00000 n
+0000702360 00000 n
+0000702550 00000 n
+0000702706 00000 n
+0000702902 00000 n
+0000703056 00000 n
+0000703241 00000 n
+0000703395 00000 n
+0000703593 00000 n
+0000708501 00000 n
+0000708701 00000 n
+0000703931 00000 n
+0000690639 00000 n
+0000688349 00000 n
+0000703746 00000 n
+0000777586 00000 n
+0000785284 00000 n
+0000785966 00000 n
+0000791718 00000 n
+0000795992 00000 n
+0000801617 00000 n
+0000808030 00000 n
+0000808592 00000 n
+0000813759 00000 n
+0000819488 00000 n
+0000832373 00000 n
+0000859121 00000 n
+0000862562 00000 n
+0000866541 00000 n
+0000872148 00000 n
+0000877212 00000 n
+0000877835 00000 n
+0000886551 00000 n
+0000887299 00000 n
+0000893545 00000 n
+0000897805 00000 n
+0000902798 00000 n
+0000903238 00000 n
+0000903677 00000 n
+0000908261 00000 n
+0000908701 00000 n
+0000909142 00000 n
+0000913437 00000 n
+0000913877 00000 n
+0000914318 00000 n
+0000918900 00000 n
+0000919339 00000 n
+0000919780 00000 n
+0000924141 00000 n
+0000924581 00000 n
+0000925022 00000 n
+0000929361 00000 n
+0000708857 00000 n
+0000709050 00000 n
+0000709205 00000 n
+0000709396 00000 n
+0000709552 00000 n
+0000709756 00000 n
+0000709912 00000 n
+0000710071 00000 n
+0000710227 00000 n
+0000710385 00000 n
+0000710541 00000 n
+0000710697 00000 n
+0000710853 00000 n
+0000711014 00000 n
+0000711170 00000 n
+0000711335 00000 n
+0000711491 00000 n
+0000711647 00000 n
+0000711802 00000 n
+0000711961 00000 n
+0000712117 00000 n
+0000712276 00000 n
+0000712431 00000 n
+0000712600 00000 n
+0000712756 00000 n
+0000712946 00000 n
+0000713100 00000 n
+0000713302 00000 n
+0000713458 00000 n
+0000713649 00000 n
+0000713805 00000 n
+0000713983 00000 n
+0000714139 00000 n
+0000714320 00000 n
+0000714476 00000 n
+0000714652 00000 n
+0000714808 00000 n
+0000714975 00000 n
+0000715131 00000 n
+0000715321 00000 n
+0000715477 00000 n
+0000715673 00000 n
+0000715829 00000 n
+0000716018 00000 n
+0000716173 00000 n
+0000716367 00000 n
+0000716523 00000 n
+0000716711 00000 n
+0000716866 00000 n
+0000717057 00000 n
+0000717213 00000 n
+0000717403 00000 n
+0000717558 00000 n
+0000717744 00000 n
+0000717900 00000 n
+0000718093 00000 n
+0000718248 00000 n
+0000718415 00000 n
+0000718571 00000 n
+0000718745 00000 n
+0000718900 00000 n
+0000719088 00000 n
+0000719244 00000 n
+0000719428 00000 n
+0000719584 00000 n
+0000719776 00000 n
+0000719932 00000 n
+0000720119 00000 n
+0000720275 00000 n
+0000720469 00000 n
+0000720625 00000 n
+0000720814 00000 n
+0000720970 00000 n
+0000721157 00000 n
+0000721313 00000 n
+0000721506 00000 n
+0000721661 00000 n
+0000721849 00000 n
+0000722005 00000 n
+0000722199 00000 n
+0000722354 00000 n
+0000722520 00000 n
+0000722676 00000 n
+0000722836 00000 n
+0000722990 00000 n
+0000723147 00000 n
+0000723303 00000 n
+0000723491 00000 n
+0000723647 00000 n
+0000723805 00000 n
+0000723961 00000 n
+0000724120 00000 n
+0000724276 00000 n
+0000724438 00000 n
+0000724594 00000 n
+0000724750 00000 n
+0000724906 00000 n
+0000725064 00000 n
+0000725220 00000 n
+0000725378 00000 n
+0000725534 00000 n
+0000725692 00000 n
+0000725847 00000 n
+0000726029 00000 n
+0000726185 00000 n
+0000726342 00000 n
+0000726497 00000 n
+0000726654 00000 n
+0000726808 00000 n
+0000726981 00000 n
+0000727198 00000 n
+0000707358 00000 n
+0000704019 00000 n
+0000727135 00000 n
+0000929801 00000 n
+0000930242 00000 n
+0000934554 00000 n
+0000934994 00000 n
+0000935435 00000 n
+0000948176 00000 n
+0000952336 00000 n
+0000973209 00000 n
+0000982865 00000 n
+0000983682 00000 n
+0000990207 00000 n
+0000998274 00000 n
+0001018538 00000 n
+0001019291 00000 n
+0001023225 00000 n
+0001023665 00000 n
+0001024105 00000 n
+0001028560 00000 n
+0001028997 00000 n
+0001041480 00000 n
+0001085826 00000 n
+0001090369 00000 n
+0001090819 00000 n
+0001091269 00000 n
+0001095641 00000 n
+0001096091 00000 n
+0001096541 00000 n
+0001100944 00000 n
+0001101394 00000 n
+0001101842 00000 n
+0001106158 00000 n
+0001106608 00000 n
+0001107058 00000 n
+0001111402 00000 n
+0001111851 00000 n
+0001112301 00000 n
+0001116789 00000 n
+0001117238 00000 n
+0001117688 00000 n
+0001122176 00000 n
+0001122625 00000 n
+0001123075 00000 n
+0001127642 00000 n
+0001135088 00000 n
+0001146401 00000 n
+0001154162 00000 n
+0001154998 00000 n
+0001161125 00000 n
+0001165897 00000 n
+0001178460 00000 n
+0001221876 00000 n
+0001222453 00000 n
+0001234786 00000 n
+0001247680 00000 n
+0001252311 00000 n
+0001256683 00000 n
+0000729921 00000 n
+0000730079 00000 n
+0000730234 00000 n
+0000730390 00000 n
+0000730544 00000 n
+0000730710 00000 n
+0000730865 00000 n
+0000731029 00000 n
+0000731184 00000 n
+0000731352 00000 n
+0000731507 00000 n
+0000731673 00000 n
+0000731829 00000 n
+0000731983 00000 n
+0000732139 00000 n
+0000732293 00000 n
+0000732449 00000 n
+0000732612 00000 n
+0000732768 00000 n
+0000732938 00000 n
+0000733094 00000 n
+0000733255 00000 n
+0000733410 00000 n
+0000733570 00000 n
+0000733726 00000 n
+0000733882 00000 n
+0000734038 00000 n
+0000734190 00000 n
+0000734346 00000 n
+0000734509 00000 n
+0000734664 00000 n
+0000734825 00000 n
+0000734981 00000 n
+0000735144 00000 n
+0000735300 00000 n
+0000735460 00000 n
+0000735616 00000 n
+0000735776 00000 n
+0000735932 00000 n
+0000736090 00000 n
+0000736246 00000 n
+0000736407 00000 n
+0000736563 00000 n
+0000736722 00000 n
+0000736878 00000 n
+0000737044 00000 n
+0000737200 00000 n
+0000737364 00000 n
+0000737520 00000 n
+0000737687 00000 n
+0000737841 00000 n
+0000738007 00000 n
+0000738163 00000 n
+0000738329 00000 n
+0000738485 00000 n
+0000738652 00000 n
+0000738807 00000 n
+0000738968 00000 n
+0000739124 00000 n
+0000739283 00000 n
+0000739439 00000 n
+0000739601 00000 n
+0000739757 00000 n
+0000739917 00000 n
+0000740073 00000 n
+0000740235 00000 n
+0000740390 00000 n
+0000740549 00000 n
+0000740703 00000 n
+0000740869 00000 n
+0000742552 00000 n
+0000742712 00000 n
+0000741208 00000 n
+0000729156 00000 n
+0000727314 00000 n
+0000741023 00000 n
+0001265613 00000 n
+0001270921 00000 n
+0001317725 00000 n
+0001329011 00000 n
+0001348330 00000 n
+0001348973 00000 n
+0001362588 00000 n
+0001363489 00000 n
+0001376856 00000 n
+0001416983 00000 n
+0001464726 00000 n
+0001465496 00000 n
+0001540953 00000 n
+0001554226 00000 n
+0001616540 00000 n
+0001616924 00000 n
+0001661224 00000 n
+0001661803 00000 n
+0001668090 00000 n
+0001668218 00000 n
+0001676022 00000 n
+0001720980 00000 n
+0001750931 00000 n
+0001769583 00000 n
+0001784986 00000 n
+0001790308 00000 n
+0001812759 00000 n
+0001845895 00000 n
+0001917419 00000 n
+0001917741 00000 n
+0001929070 00000 n
+0001949784 00000 n
+0001964438 00000 n
+0001972819 00000 n
+0001977854 00000 n
+0000742868 00000 n
+0000743035 00000 n
+0000743191 00000 n
+0000743361 00000 n
+0000743517 00000 n
+0000743678 00000 n
+0000743834 00000 n
+0000743994 00000 n
+0000744150 00000 n
+0000744311 00000 n
+0000744467 00000 n
+0000744626 00000 n
+0000744782 00000 n
+0000744939 00000 n
+0000745095 00000 n
+0000745250 00000 n
+0000745406 00000 n
+0000745565 00000 n
+0000745719 00000 n
+0000745876 00000 n
+0000746031 00000 n
+0000746190 00000 n
+0000746344 00000 n
+0000746501 00000 n
+0000746656 00000 n
+0000746810 00000 n
+0000746964 00000 n
+0000747120 00000 n
+0000747339 00000 n
+0000742147 00000 n
+0000741296 00000 n
+0000747276 00000 n
+0001978369 00000 n
+0001983385 00000 n
+0001987701 00000 n
+0001988087 00000 n
+0002002686 00000 n
+0002008160 00000 n
+0002014503 00000 n
+0002027974 00000 n
+0002036748 00000 n
+0001288314 00000 n
+0001293843 00000 n
+0001294356 00000 n
+0001299897 00000 n
+0002037648 00000 n
+0002066704 00000 n
+0000750689 00000 n
+0000750882 00000 n
+0000751074 00000 n
+0000751267 00000 n
+0000751460 00000 n
+0000751652 00000 n
+0000751844 00000 n
+0000752037 00000 n
+0000752229 00000 n
+0000752421 00000 n
+0000752614 00000 n
+0000752807 00000 n
+0000752999 00000 n
+0000753191 00000 n
+0000753384 00000 n
+0000753577 00000 n
+0000753765 00000 n
+0000753957 00000 n
+0000754149 00000 n
+0000754340 00000 n
+0000754533 00000 n
+0000754726 00000 n
+0000754916 00000 n
+0000758739 00000 n
+0000758932 00000 n
+0000755473 00000 n
+0000750347 00000 n
+0000747441 00000 n
+0000755102 00000 n
+0000755348 00000 n
+0000755410 00000 n
+0000759564 00000 n
+0000759440 00000 n
+0000764658 00000 n
+0000764782 00000 n
+0000764283 00000 n
+0000764408 00000 n
+0000769653 00000 n
+0000769778 00000 n
+0000769902 00000 n
+0000770027 00000 n
+0000770151 00000 n
+0000765031 00000 n
+0000769403 00000 n
+0000769528 00000 n
+0000759873 00000 n
+0000759997 00000 n
+0000760121 00000 n
+0000760369 00000 n
+0000764035 00000 n
+0000764159 00000 n
+0000760493 00000 n
+0000759749 00000 n
+0000760245 00000 n
+0000759124 00000 n
+0000760555 00000 n
+0000758577 00000 n
+0000755575 00000 n
+0000759316 00000 n
+0002844387 00000 n
+0000763911 00000 n
+0000764533 00000 n
+0000764907 00000 n
+0000765093 00000 n
+0000763664 00000 n
+0000760685 00000 n
+0000763787 00000 n
+0002841887 00000 n
+0000767930 00000 n
+0000768124 00000 n
+0000768319 00000 n
+0000768514 00000 n
+0000768708 00000 n
+0000768899 00000 n
+0000769086 00000 n
+0000770526 00000 n
+0000767732 00000 n
+0000765237 00000 n
+0000769278 00000 n
+0000770401 00000 n
+0000770464 00000 n
+0000772487 00000 n
+0000772735 00000 n
+0000772860 00000 n
+0000772611 00000 n
+0000773046 00000 n
+0002048392 00000 n
+0000773170 00000 n
+0000773293 00000 n
+0000772239 00000 n
+0000770656 00000 n
+0000772362 00000 n
+0002842785 00000 n
+0000773930 00000 n
+0000773744 00000 n
+0000773437 00000 n
+0000773867 00000 n
+0000776466 00000 n
+0000776653 00000 n
+0000776855 00000 n
+0000777057 00000 n
+0000777259 00000 n
+0000778398 00000 n
+0000776286 00000 n
+0000774018 00000 n
+0000777461 00000 n
+0002842247 00000 n
+0000777711 00000 n
+0000777898 00000 n
+0000778023 00000 n
+0000778148 00000 n
+0000778273 00000 n
+0001595397 00000 n
+0000781352 00000 n
+0000781505 00000 n
+0000781698 00000 n
+0000781890 00000 n
+0000782048 00000 n
+0000782241 00000 n
+0000782397 00000 n
+0000782584 00000 n
+0000782776 00000 n
+0000782964 00000 n
+0000783157 00000 n
+0000783345 00000 n
+0000783538 00000 n
+0000783726 00000 n
+0000783919 00000 n
+0000784107 00000 n
+0000784300 00000 n
+0000784488 00000 n
+0000784681 00000 n
+0000784839 00000 n
+0000785032 00000 n
+0000786216 00000 n
+0000781028 00000 n
+0000778515 00000 n
+0000785221 00000 n
+0000785408 00000 n
+0000785594 00000 n
+0000785718 00000 n
+0000785843 00000 n
+0000786091 00000 n
+0002844513 00000 n
+0001371567 00000 n
+0000790843 00000 n
+0000791218 00000 n
+0000791343 00000 n
+0000791093 00000 n
+0000791468 00000 n
+0000791593 00000 n
+0000790968 00000 n
+0001371117 00000 n
+0000788905 00000 n
+0000789059 00000 n
+0000789250 00000 n
+0000789443 00000 n
+0000789601 00000 n
+0000789794 00000 n
+0000789987 00000 n
+0000790179 00000 n
+0000790337 00000 n
+0000790529 00000 n
+0000792030 00000 n
+0000788680 00000 n
+0000786361 00000 n
+0000790718 00000 n
+0000791842 00000 n
+0000791905 00000 n
+0000791968 00000 n
+0000794993 00000 n
+0000795430 00000 n
+0000795180 00000 n
+0000795555 00000 n
+0000795305 00000 n
+0000795742 00000 n
+0000795867 00000 n
+0000794231 00000 n
+0000794392 00000 n
+0000794599 00000 n
+0000796241 00000 n
+0000794069 00000 n
+0000792189 00000 n
+0000794806 00000 n
+0000796116 00000 n
+0000801493 00000 n
+0000801369 00000 n
+0000799241 00000 n
+0000799401 00000 n
+0000799613 00000 n
+0000799826 00000 n
+0000800039 00000 n
+0000800252 00000 n
+0000800427 00000 n
+0000800640 00000 n
+0000800854 00000 n
+0000801030 00000 n
+0000802675 00000 n
+0000799016 00000 n
+0000796428 00000 n
+0000801244 00000 n
+0000801742 00000 n
+0000801805 00000 n
+0000801992 00000 n
+0000802117 00000 n
+0000802239 00000 n
+0000802426 00000 n
+0000802551 00000 n
+0000807780 00000 n
+0000807905 00000 n
+0000805228 00000 n
+0000805386 00000 n
+0000805546 00000 n
+0000805744 00000 n
+0000805942 00000 n
+0000806098 00000 n
+0000806299 00000 n
+0000806500 00000 n
+0000806701 00000 n
+0000806902 00000 n
+0000807098 00000 n
+0000807297 00000 n
+0000807457 00000 n
+0000808780 00000 n
+0000804976 00000 n
+0000802862 00000 n
+0000807655 00000 n
+0000808155 00000 n
+0000808342 00000 n
+0000808467 00000 n
+0000808717 00000 n
+0000813384 00000 n
+0000812885 00000 n
+0000813509 00000 n
+0000813634 00000 n
+0000813259 00000 n
+0000813135 00000 n
+0000813010 00000 n
+0000811583 00000 n
+0000811739 00000 n
+0000811932 00000 n
+0000812125 00000 n
+0000812317 00000 n
+0000812508 00000 n
+0000813947 00000 n
+0000811394 00000 n
+0000808939 00000 n
+0000812698 00000 n
+0000813884 00000 n
+0000819113 00000 n
+0000818863 00000 n
+0000818988 00000 n
+0000819363 00000 n
+0000819238 00000 n
+0000817379 00000 n
+0000817534 00000 n
+0000817722 00000 n
+0000817915 00000 n
+0000818103 00000 n
+0000818296 00000 n
+0000818484 00000 n
+0000819983 00000 n
+0000817181 00000 n
+0000814106 00000 n
+0000818677 00000 n
+0000819612 00000 n
+0000819797 00000 n
+0000819921 00000 n
+0002844639 00000 n
+0000832248 00000 n
+0000823874 00000 n
+0000824028 00000 n
+0000824219 00000 n
+0000824410 00000 n
+0000824601 00000 n
+0000824791 00000 n
+0000824982 00000 n
+0000825145 00000 n
+0000825336 00000 n
+0000825492 00000 n
+0000825682 00000 n
+0000825838 00000 n
+0000826028 00000 n
+0000826219 00000 n
+0000826376 00000 n
+0000826567 00000 n
+0000826724 00000 n
+0000826914 00000 n
+0000827105 00000 n
+0000827296 00000 n
+0000827464 00000 n
+0000827631 00000 n
+0000827822 00000 n
+0000828013 00000 n
+0000828208 00000 n
+0000828399 00000 n
+0000828622 00000 n
+0000828846 00000 n
+0000829070 00000 n
+0000829293 00000 n
+0000829516 00000 n
+0000829674 00000 n
+0000829864 00000 n
+0000830032 00000 n
+0000830223 00000 n
+0000830413 00000 n
+0000830602 00000 n
+0000830792 00000 n
+0000830983 00000 n
+0000831174 00000 n
+0000831365 00000 n
+0000831554 00000 n
+0000831743 00000 n
+0000831935 00000 n
+0000835604 00000 n
+0000832748 00000 n
+0000823343 00000 n
+0000820128 00000 n
+0000832123 00000 n
+0000832498 00000 n
+0000832560 00000 n
+0000832622 00000 n
+0000832685 00000 n
+0000846178 00000 n
+0000849175 00000 n
+0000849425 00000 n
+0000849550 00000 n
+0000845054 00000 n
+0000845304 00000 n
+0000845679 00000 n
+0000850175 00000 n
+0000853229 00000 n
+0000845554 00000 n
+0000850050 00000 n
+0000850422 00000 n
+0000845179 00000 n
+0000845804 00000 n
+0000845929 00000 n
+0001667706 00000 n
+0000857998 00000 n
+0000841597 00000 n
+0000841660 00000 n
+0000841723 00000 n
+0000841786 00000 n
+0000841848 00000 n
+0000841162 00000 n
+0000841286 00000 n
+0000844745 00000 n
+0000844870 00000 n
+0000853354 00000 n
+0000849800 00000 n
+0000850299 00000 n
+0000849925 00000 n
+0000849675 00000 n
+0000849300 00000 n
+0001667578 00000 n
+0000846054 00000 n
+0000835795 00000 n
+0000835986 00000 n
+0000836176 00000 n
+0000836367 00000 n
+0000836558 00000 n
+0000836748 00000 n
+0000836905 00000 n
+0000837096 00000 n
+0000837291 00000 n
+0000837482 00000 n
+0000837672 00000 n
+0000837863 00000 n
+0000838020 00000 n
+0000838211 00000 n
+0000838401 00000 n
+0000838592 00000 n
+0000838749 00000 n
+0000838940 00000 n
+0000839131 00000 n
+0000839355 00000 n
+0000839546 00000 n
+0000839770 00000 n
+0000839961 00000 n
+0000840152 00000 n
+0000840343 00000 n
+0000840533 00000 n
+0000841910 00000 n
+0000835226 00000 n
+0000832907 00000 n
+0000840723 00000 n
+0000840786 00000 n
+0000840849 00000 n
+0000840912 00000 n
+0000840975 00000 n
+0000841472 00000 n
+0000845429 00000 n
+0000854475 00000 n
+0000858123 00000 n
+0000858248 00000 n
+0000858373 00000 n
+0000858747 00000 n
+0000857873 00000 n
+0001667962 00000 n
+0000854351 00000 n
+0000858623 00000 n
+0000858498 00000 n
+0000858997 00000 n
+0000858872 00000 n
+0000854226 00000 n
+0000854101 00000 n
+0000853852 00000 n
+0000853976 00000 n
+0000853665 00000 n
+0000853540 00000 n
+0000846240 00000 n
+0000844497 00000 n
+0000842082 00000 n
+0000844620 00000 n
+0000850484 00000 n
+0000848927 00000 n
+0000846412 00000 n
+0000849050 00000 n
+0000854537 00000 n
+0000852981 00000 n
+0000850642 00000 n
+0000853104 00000 n
+0002841738 00000 n
+0000857430 00000 n
+0000857588 00000 n
+0000859183 00000 n
+0000857277 00000 n
+0000854724 00000 n
+0000857748 00000 n
+0002844765 00000 n
+0000861024 00000 n
+0000861229 00000 n
+0000861434 00000 n
+0000861594 00000 n
+0000861798 00000 n
+0000862750 00000 n
+0000860844 00000 n
+0000859327 00000 n
+0000862000 00000 n
+0000862125 00000 n
+0000862312 00000 n
+0000862437 00000 n
+0000862687 00000 n
+0000866416 00000 n
+0000866291 00000 n
+0000865342 00000 n
+0000865502 00000 n
+0000865702 00000 n
+0000865903 00000 n
+0000867165 00000 n
+0000865171 00000 n
+0000862909 00000 n
+0000866104 00000 n
+0000866666 00000 n
+0000866853 00000 n
+0000866978 00000 n
+0000867103 00000 n
+0000870511 00000 n
+0000869650 00000 n
+0000870675 00000 n
+0000870867 00000 n
+0000871060 00000 n
+0000871251 00000 n
+0000871444 00000 n
+0000871637 00000 n
+0000871830 00000 n
+0000873080 00000 n
+0000869443 00000 n
+0000867324 00000 n
+0000872023 00000 n
+0000872272 00000 n
+0000872335 00000 n
+0000872398 00000 n
+0000872585 00000 n
+0002842065 00000 n
+0000872771 00000 n
+0000872895 00000 n
+0000873018 00000 n
+0000870185 00000 n
+0000870366 00000 n
+0000870414 00000 n
+0000870489 00000 n
+0000876775 00000 n
+0000876900 00000 n
+0000877087 00000 n
+0000875441 00000 n
+0000875601 00000 n
+0000875762 00000 n
+0000875933 00000 n
+0000876104 00000 n
+0000876299 00000 n
+0000876494 00000 n
+0000880198 00000 n
+0000877897 00000 n
+0000875243 00000 n
+0000873311 00000 n
+0000876650 00000 n
+0000877337 00000 n
+0000877400 00000 n
+0000877586 00000 n
+0000877710 00000 n
+0000880402 00000 n
+0000880606 00000 n
+0000880808 00000 n
+0000881012 00000 n
+0000881216 00000 n
+0000881419 00000 n
+0000881621 00000 n
+0000881825 00000 n
+0000883274 00000 n
+0000879982 00000 n
+0000878084 00000 n
+0000882029 00000 n
+0000882154 00000 n
+0000882341 00000 n
+0000882466 00000 n
+0000882591 00000 n
+0000882716 00000 n
+0000882839 00000 n
+0000882964 00000 n
+0000883088 00000 n
+0000883212 00000 n
+0000886426 00000 n
+0000885602 00000 n
+0000885763 00000 n
+0000885953 00000 n
+0000886143 00000 n
+0000890456 00000 n
+0000887424 00000 n
+0000885431 00000 n
+0000883419 00000 n
+0000886302 00000 n
+0000886676 00000 n
+0000886799 00000 n
+0000886862 00000 n
+0000886925 00000 n
+0000887049 00000 n
+0000887174 00000 n
+0002844891 00000 n
+0000890657 00000 n
+0000889550 00000 n
+0000890821 00000 n
+0000891021 00000 n
+0000891224 00000 n
+0000891394 00000 n
+0000891599 00000 n
+0000891804 00000 n
+0000891975 00000 n
+0000892180 00000 n
+0000892351 00000 n
+0000892556 00000 n
+0000892761 00000 n
+0000892966 00000 n
+0000894167 00000 n
+0000889289 00000 n
+0000887569 00000 n
+0000893170 00000 n
+0000893233 00000 n
+0000893420 00000 n
+0000893669 00000 n
+0000893732 00000 n
+0000893795 00000 n
+0000893981 00000 n
+0000894105 00000 n
+0000890130 00000 n
+0000890311 00000 n
+0000890359 00000 n
+0000890434 00000 n
+0000897244 00000 n
+0000897369 00000 n
+0000896995 00000 n
+0000897119 00000 n
+0000896870 00000 n
+0000897680 00000 n
+0000897556 00000 n
+0000896311 00000 n
+0000896469 00000 n
+0000898057 00000 n
+0000896158 00000 n
+0000894369 00000 n
+0000896683 00000 n
+0000897931 00000 n
+0000902672 00000 n
+0000901379 00000 n
+0000901532 00000 n
+0000901765 00000 n
+0000901921 00000 n
+0000902156 00000 n
+0000902312 00000 n
+0000903865 00000 n
+0000901190 00000 n
+0000898244 00000 n
+0000902546 00000 n
+0000902924 00000 n
+0000903112 00000 n
+0000903362 00000 n
+0000903551 00000 n
+0000903803 00000 n
+0000908135 00000 n
+0000906796 00000 n
+0000906952 00000 n
+0000907188 00000 n
+0000907344 00000 n
+0000907568 00000 n
+0000907724 00000 n
+0000909330 00000 n
+0000906607 00000 n
+0000903995 00000 n
+0000907946 00000 n
+0000908387 00000 n
+0000908575 00000 n
+0000908827 00000 n
+0000909016 00000 n
+0000909268 00000 n
+0000913311 00000 n
+0000911981 00000 n
+0000912137 00000 n
+0000912360 00000 n
+0000912516 00000 n
+0000912744 00000 n
+0000912900 00000 n
+0000914506 00000 n
+0000911792 00000 n
+0000909460 00000 n
+0000913122 00000 n
+0000913563 00000 n
+0000913751 00000 n
+0000914003 00000 n
+0000914192 00000 n
+0000914444 00000 n
+0000918774 00000 n
+0000917434 00000 n
+0000917590 00000 n
+0000917826 00000 n
+0000917982 00000 n
+0000918206 00000 n
+0000918362 00000 n
+0000919968 00000 n
+0000917245 00000 n
+0000914636 00000 n
+0000918585 00000 n
+0000919025 00000 n
+0000919213 00000 n
+0000919465 00000 n
+0000919654 00000 n
+0000919906 00000 n
+0002845017 00000 n
+0000924015 00000 n
+0000922681 00000 n
+0000922837 00000 n
+0000923062 00000 n
+0000923218 00000 n
+0000923449 00000 n
+0000923605 00000 n
+0000925210 00000 n
+0000922492 00000 n
+0000920098 00000 n
+0000923826 00000 n
+0000924267 00000 n
+0000924455 00000 n
+0000924707 00000 n
+0000924896 00000 n
+0000925148 00000 n
+0000929235 00000 n
+0000927883 00000 n
+0000928039 00000 n
+0000928275 00000 n
+0000928431 00000 n
+0000928666 00000 n
+0000928822 00000 n
+0000930430 00000 n
+0000927694 00000 n
+0000925354 00000 n
+0000929046 00000 n
+0000929487 00000 n
+0000929675 00000 n
+0000929927 00000 n
+0000930116 00000 n
+0000930368 00000 n
+0000934428 00000 n
+0000933308 00000 n
+0000933464 00000 n
+0000933690 00000 n
+0000933844 00000 n
+0000934083 00000 n
+0000938337 00000 n
+0000935560 00000 n
+0000933128 00000 n
+0000930560 00000 n
+0000934239 00000 n
+0000934680 00000 n
+0000934868 00000 n
+0000935120 00000 n
+0000935309 00000 n
+0000938530 00000 n
+0000938724 00000 n
+0000938917 00000 n
+0000939111 00000 n
+0000939305 00000 n
+0000939498 00000 n
+0000939692 00000 n
+0000939886 00000 n
+0000940079 00000 n
+0000940273 00000 n
+0000940467 00000 n
+0000940660 00000 n
+0000942048 00000 n
+0000938085 00000 n
+0000935719 00000 n
+0000940854 00000 n
+0000940917 00000 n
+0000940980 00000 n
+0000941169 00000 n
+0000941357 00000 n
+0000941483 00000 n
+0000941609 00000 n
+0000941735 00000 n
+0000941861 00000 n
+0000941986 00000 n
+0000947358 00000 n
+0000947483 00000 n
+0000947924 00000 n
+0000947672 00000 n
+0000947798 00000 n
+0000948050 00000 n
+0000944863 00000 n
+0000945024 00000 n
+0000945187 00000 n
+0000945379 00000 n
+0000945571 00000 n
+0000945764 00000 n
+0000945957 00000 n
+0000946148 00000 n
+0000946341 00000 n
+0000946500 00000 n
+0000946693 00000 n
+0000946852 00000 n
+0000947043 00000 n
+0000948426 00000 n
+0000944611 00000 n
+0000942206 00000 n
+0000947233 00000 n
+0000948301 00000 n
+0000948364 00000 n
+0000951083 00000 n
+0000951208 00000 n
+0000951899 00000 n
+0000951523 00000 n
+0000951648 00000 n
+0000951774 00000 n
+0000951397 00000 n
+0000952210 00000 n
+0000952088 00000 n
+0000950736 00000 n
+0000956255 00000 n
+0000952398 00000 n
+0000950592 00000 n
+0000948613 00000 n
+0000950894 00000 n
+0002845143 00000 n
+0000956455 00000 n
+0000956656 00000 n
+0000956859 00000 n
+0000957061 00000 n
+0000957251 00000 n
+0000957443 00000 n
+0000957633 00000 n
+0000957828 00000 n
+0000958020 00000 n
+0000958223 00000 n
+0000958413 00000 n
+0000958605 00000 n
+0000958796 00000 n
+0000958994 00000 n
+0000959182 00000 n
+0000959384 00000 n
+0000959586 00000 n
+0000959781 00000 n
+0000959973 00000 n
+0000960178 00000 n
+0000960369 00000 n
+0000960571 00000 n
+0000960764 00000 n
+0000960944 00000 n
+0000961126 00000 n
+0000961302 00000 n
+0000961493 00000 n
+0000961689 00000 n
+0000961879 00000 n
+0000962074 00000 n
+0000962263 00000 n
+0000962454 00000 n
+0000962645 00000 n
+0000962833 00000 n
+0000963027 00000 n
+0000963216 00000 n
+0000963403 00000 n
+0000963595 00000 n
+0000963784 00000 n
+0000963979 00000 n
+0000964170 00000 n
+0000964358 00000 n
+0000964552 00000 n
+0000964741 00000 n
+0000964935 00000 n
+0000965125 00000 n
+0000965314 00000 n
+0000965503 00000 n
+0000965943 00000 n
+0000955679 00000 n
+0000952570 00000 n
+0000965691 00000 n
+0000965817 00000 n
+0000965880 00000 n
+0000973084 00000 n
+0000972959 00000 n
+0000972834 00000 n
+0000968867 00000 n
+0000969023 00000 n
+0000969202 00000 n
+0000969378 00000 n
+0000969572 00000 n
+0000969767 00000 n
+0000969963 00000 n
+0000970159 00000 n
+0000970351 00000 n
+0000970547 00000 n
+0000970742 00000 n
+0000970938 00000 n
+0000971133 00000 n
+0000971329 00000 n
+0000971507 00000 n
+0000971702 00000 n
+0000971898 00000 n
+0000972076 00000 n
+0000972270 00000 n
+0000972449 00000 n
+0000973710 00000 n
+0000968552 00000 n
+0000966059 00000 n
+0000972645 00000 n
+0000973335 00000 n
+0000973397 00000 n
+0000973460 00000 n
+0000973523 00000 n
+0000973585 00000 n
+0000977111 00000 n
+0000977237 00000 n
+0000977552 00000 n
+0000977677 00000 n
+0001675634 00000 n
+0000977929 00000 n
+0000977426 00000 n
+0000978179 00000 n
+0000978368 00000 n
+0000978054 00000 n
+0000977803 00000 n
+0000982739 00000 n
+0000978494 00000 n
+0000978618 00000 n
+0000978680 00000 n
+0000976862 00000 n
+0000973869 00000 n
+0000976985 00000 n
+0000981226 00000 n
+0000981384 00000 n
+0000981544 00000 n
+0000981743 00000 n
+0000981901 00000 n
+0000982100 00000 n
+0000982257 00000 n
+0000982457 00000 n
+0000988030 00000 n
+0000988220 00000 n
+0000988409 00000 n
+0000988601 00000 n
+0000983808 00000 n
+0000981019 00000 n
+0000978852 00000 n
+0000982614 00000 n
+0000982991 00000 n
+0000983054 00000 n
+0000983241 00000 n
+0000983367 00000 n
+0000983556 00000 n
+0000988793 00000 n
+0000988982 00000 n
+0000992813 00000 n
+0000993006 00000 n
+0000990269 00000 n
+0000987841 00000 n
+0000983995 00000 n
+0000989136 00000 n
+0000989199 00000 n
+0000989262 00000 n
+0000989451 00000 n
+0000989577 00000 n
+0000989766 00000 n
+0000989892 00000 n
+0000990081 00000 n
+0000993205 00000 n
+0000993403 00000 n
+0000993597 00000 n
+0000993791 00000 n
+0000993957 00000 n
+0000994150 00000 n
+0000994345 00000 n
+0000994540 00000 n
+0000994734 00000 n
+0000994929 00000 n
+0000995124 00000 n
+0000995316 00000 n
+0000995510 00000 n
+0000995705 00000 n
+0000995899 00000 n
+0000996094 00000 n
+0000996288 00000 n
+0000996483 00000 n
+0000996678 00000 n
+0000996873 00000 n
+0000997068 00000 n
+0000997263 00000 n
+0001002034 00000 n
+0000998525 00000 n
+0000992462 00000 n
+0000990427 00000 n
+0000997455 00000 n
+0000997581 00000 n
+0000997644 00000 n
+0000997833 00000 n
+0000998022 00000 n
+0000998148 00000 n
+0000998400 00000 n
+0000998463 00000 n
+0002845269 00000 n
+0001776224 00000 n
+0001005203 00000 n
+0001006019 00000 n
+0001008932 00000 n
+0001009938 00000 n
+0001008807 00000 n
+0001006144 00000 n
+0001009812 00000 n
+0001009687 00000 n
+0001009561 00000 n
+0001009435 00000 n
+0001005391 00000 n
+0001009057 00000 n
+0001005893 00000 n
+0001005767 00000 n
+0001009309 00000 n
+0001009183 00000 n
+0001005642 00000 n
+0001005516 00000 n
+0001002229 00000 n
+0001002424 00000 n
+0001002619 00000 n
+0001002813 00000 n
+0001003006 00000 n
+0001003201 00000 n
+0001003395 00000 n
+0001003589 00000 n
+0001003784 00000 n
+0001003979 00000 n
+0001004172 00000 n
+0001004367 00000 n
+0001004562 00000 n
+0001004757 00000 n
+0001006206 00000 n
+0001001764 00000 n
+0000998683 00000 n
+0001004951 00000 n
+0001005014 00000 n
+0001013160 00000 n
+0001012910 00000 n
+0001013286 00000 n
+0001013034 00000 n
+0001018412 00000 n
+0001018287 00000 n
+0001013914 00000 n
+0001013790 00000 n
+0001012407 00000 n
+0001013412 00000 n
+0001012784 00000 n
+0001012658 00000 n
+0001013664 00000 n
+0001013538 00000 n
+0001012532 00000 n
+0001010062 00000 n
+0001008558 00000 n
+0001006364 00000 n
+0001008681 00000 n
+0001013976 00000 n
+0001012158 00000 n
+0001010220 00000 n
+0001012281 00000 n
+0001016469 00000 n
+0001016635 00000 n
+0001016828 00000 n
+0001017031 00000 n
+0001017200 00000 n
+0001017404 00000 n
+0001017573 00000 n
+0001017777 00000 n
+0001017937 00000 n
+0001019479 00000 n
+0001016253 00000 n
+0001014120 00000 n
+0001018161 00000 n
+0001018664 00000 n
+0001018788 00000 n
+0001018913 00000 n
+0001019039 00000 n
+0001019165 00000 n
+0001019417 00000 n
+0001160161 00000 n
+0001023099 00000 n
+0001021770 00000 n
+0001021926 00000 n
+0001022162 00000 n
+0001022318 00000 n
+0001022545 00000 n
+0001022699 00000 n
+0001024293 00000 n
+0001021581 00000 n
+0001019652 00000 n
+0001022910 00000 n
+0001023350 00000 n
+0001023539 00000 n
+0001023790 00000 n
+0001023979 00000 n
+0001024231 00000 n
+0001028434 00000 n
+0001026657 00000 n
+0001026813 00000 n
+0001027029 00000 n
+0001027185 00000 n
+0001027395 00000 n
+0001027616 00000 n
+0001027826 00000 n
+0001028036 00000 n
+0001029749 00000 n
+0001026450 00000 n
+0001024409 00000 n
+0001028246 00000 n
+0001028682 00000 n
+0001028871 00000 n
+0001029121 00000 n
+0001029310 00000 n
+0001029436 00000 n
+0001029562 00000 n
+0001029687 00000 n
+0002845395 00000 n
+0001595589 00000 n
+0001033793 00000 n
+0001033949 00000 n
+0001034139 00000 n
+0001034321 00000 n
+0001034522 00000 n
+0001034690 00000 n
+0001034891 00000 n
+0001035093 00000 n
+0001035252 00000 n
+0001035412 00000 n
+0001035614 00000 n
+0001035816 00000 n
+0001036017 00000 n
+0001036218 00000 n
+0001036419 00000 n
+0001036621 00000 n
+0001036823 00000 n
+0001036982 00000 n
+0001037141 00000 n
+0001037343 00000 n
+0001037544 00000 n
+0001037746 00000 n
+0001037948 00000 n
+0001038150 00000 n
+0001038351 00000 n
+0001038553 00000 n
+0001038712 00000 n
+0001038872 00000 n
+0001039074 00000 n
+0001039275 00000 n
+0001039477 00000 n
+0001039635 00000 n
+0001039793 00000 n
+0001039993 00000 n
+0001040195 00000 n
+0001040396 00000 n
+0001040597 00000 n
+0001040798 00000 n
+0001040998 00000 n
+0001041198 00000 n
+0001045914 00000 n
+0001046114 00000 n
+0001046271 00000 n
+0001046473 00000 n
+0001046631 00000 n
+0001046833 00000 n
+0001041920 00000 n
+0001033298 00000 n
+0001029879 00000 n
+0001041354 00000 n
+0001041606 00000 n
+0001041669 00000 n
+0001041731 00000 n
+0001041794 00000 n
+0001041857 00000 n
+0001059081 00000 n
+0001059209 00000 n
+0001065281 00000 n
+0001065408 00000 n
+0001064770 00000 n
+0001064387 00000 n
+0001069145 00000 n
+0001060231 00000 n
+0001064898 00000 n
+0001060486 00000 n
+0001069655 00000 n
+0001065153 00000 n
+0001056313 00000 n
+0001056187 00000 n
+0001073693 00000 n
+0001069783 00000 n
+0001069909 00000 n
+0001069527 00000 n
+0001069399 00000 n
+0001068889 00000 n
+0001060103 00000 n
+0001059847 00000 n
+0001065661 00000 n
+0001069272 00000 n
+0001059720 00000 n
+0001059975 00000 n
+0001046991 00000 n
+0001047193 00000 n
+0001047395 00000 n
+0001047596 00000 n
+0001047798 00000 n
+0001048003 00000 n
+0001048190 00000 n
+0001048392 00000 n
+0001048593 00000 n
+0001048750 00000 n
+0001048952 00000 n
+0001049147 00000 n
+0001049349 00000 n
+0001049504 00000 n
+0001049705 00000 n
+0001049906 00000 n
+0001050108 00000 n
+0001050267 00000 n
+0001050469 00000 n
+0001050626 00000 n
+0001050826 00000 n
+0001051027 00000 n
+0001051229 00000 n
+0001051430 00000 n
+0001051632 00000 n
+0001051790 00000 n
+0001051992 00000 n
+0001052173 00000 n
+0001052375 00000 n
+0001052576 00000 n
+0001052743 00000 n
+0001052945 00000 n
+0001053114 00000 n
+0001053316 00000 n
+0001053518 00000 n
+0001053720 00000 n
+0001053921 00000 n
+0001054121 00000 n
+0001054323 00000 n
+0001054525 00000 n
+0001054726 00000 n
+0001054928 00000 n
+0001055130 00000 n
+0001055332 00000 n
+0001055533 00000 n
+0001055735 00000 n
+0001056438 00000 n
+0001045311 00000 n
+0001042079 00000 n
+0001055935 00000 n
+0001055998 00000 n
+0001059592 00000 n
+0001064642 00000 n
+0001064514 00000 n
+0001065536 00000 n
+0001065025 00000 n
+0001060359 00000 n
+0001069017 00000 n
+0001440922 00000 n
+0001070035 00000 n
+0001059401 00000 n
+0001085055 00000 n
+0001667834 00000 n
+0001074272 00000 n
+0001074400 00000 n
+0001078871 00000 n
+0001079000 00000 n
+0001074786 00000 n
+0001079386 00000 n
+0001074014 00000 n
+0001074143 00000 n
+0001085441 00000 n
+0001085568 00000 n
+0001085697 00000 n
+0001085183 00000 n
+0001074528 00000 n
+0001074657 00000 n
+0001078743 00000 n
+0001078485 00000 n
+0001078614 00000 n
+0001079643 00000 n
+0001079772 00000 n
+0001085312 00000 n
+0001074914 00000 n
+0001079514 00000 n
+0001079128 00000 n
+0001073885 00000 n
+0001079257 00000 n
+0001060549 00000 n
+0001058826 00000 n
+0001056596 00000 n
+0001058952 00000 n
+0001065724 00000 n
+0001064132 00000 n
+0001060723 00000 n
+0001064258 00000 n
+0001070098 00000 n
+0001068634 00000 n
+0001065883 00000 n
+0001068760 00000 n
+0001074978 00000 n
+0001073437 00000 n
+0001070257 00000 n
+0001073564 00000 n
+0002845524 00000 n
+0001079836 00000 n
+0001078229 00000 n
+0001075137 00000 n
+0001078356 00000 n
+0001084053 00000 n
+0001084213 00000 n
+0001084375 00000 n
+0001084537 00000 n
+0001084701 00000 n
+0001086083 00000 n
+0001083864 00000 n
+0001079981 00000 n
+0001084927 00000 n
+0001085954 00000 n
+0001090240 00000 n
+0001088953 00000 n
+0001089110 00000 n
+0001089342 00000 n
+0001089499 00000 n
+0001089724 00000 n
+0001089881 00000 n
+0001091526 00000 n
+0001088754 00000 n
+0001086228 00000 n
+0001090111 00000 n
+0001090497 00000 n
+0001090690 00000 n
+0001090947 00000 n
+0001091140 00000 n
+0001091397 00000 n
+0001095512 00000 n
+0001094235 00000 n
+0001094392 00000 n
+0001094616 00000 n
+0001094773 00000 n
+0001095001 00000 n
+0001095158 00000 n
+0001096798 00000 n
+0001094036 00000 n
+0001091657 00000 n
+0001095383 00000 n
+0001095769 00000 n
+0001095962 00000 n
+0001096219 00000 n
+0001096412 00000 n
+0001096669 00000 n
+0001100815 00000 n
+0001099563 00000 n
+0001099720 00000 n
+0001099943 00000 n
+0001100100 00000 n
+0001100328 00000 n
+0001100485 00000 n
+0001102034 00000 n
+0001099364 00000 n
+0001096929 00000 n
+0001100686 00000 n
+0001101072 00000 n
+0001101265 00000 n
+0001101522 00000 n
+0001101714 00000 n
+0001101970 00000 n
+0001106029 00000 n
+0001104939 00000 n
+0001105093 00000 n
+0001105304 00000 n
+0001105458 00000 n
+0001105683 00000 n
+0001109812 00000 n
+0001107121 00000 n
+0001104750 00000 n
+0001102194 00000 n
+0001105836 00000 n
+0001106286 00000 n
+0001106479 00000 n
+0001106736 00000 n
+0001106929 00000 n
+0002845657 00000 n
+0001110034 00000 n
+0001110191 00000 n
+0001110418 00000 n
+0001110575 00000 n
+0001110799 00000 n
+0001115195 00000 n
+0001112364 00000 n
+0001109613 00000 n
+0001107281 00000 n
+0001110952 00000 n
+0001111081 00000 n
+0001111274 00000 n
+0001111529 00000 n
+0001111722 00000 n
+0001111979 00000 n
+0001112172 00000 n
+0001115425 00000 n
+0001115582 00000 n
+0001115807 00000 n
+0001115964 00000 n
+0001116186 00000 n
+0001120577 00000 n
+0001117751 00000 n
+0001114996 00000 n
+0001112495 00000 n
+0001116339 00000 n
+0001116468 00000 n
+0001116661 00000 n
+0001116916 00000 n
+0001117109 00000 n
+0001117366 00000 n
+0001117559 00000 n
+0001120806 00000 n
+0001120963 00000 n
+0001121186 00000 n
+0001121343 00000 n
+0001121573 00000 n
+0001123138 00000 n
+0001120378 00000 n
+0001117882 00000 n
+0001121726 00000 n
+0001121855 00000 n
+0001122048 00000 n
+0001122303 00000 n
+0001122496 00000 n
+0001122753 00000 n
+0001122946 00000 n
+0001125333 00000 n
+0001125523 00000 n
+0001125725 00000 n
+0001125891 00000 n
+0001126048 00000 n
+0001126245 00000 n
+0001126443 00000 n
+0001126641 00000 n
+0001126799 00000 n
+0001126997 00000 n
+0001128540 00000 n
+0001125094 00000 n
+0001123269 00000 n
+0001127195 00000 n
+0001127324 00000 n
+0001127516 00000 n
+0001127770 00000 n
+0001127835 00000 n
+0001128028 00000 n
+0001128220 00000 n
+0001128348 00000 n
+0001128476 00000 n
+0002048003 00000 n
+0001134959 00000 n
+0001131146 00000 n
+0001131308 00000 n
+0001131500 00000 n
+0001131692 00000 n
+0001131850 00000 n
+0001132043 00000 n
+0001132202 00000 n
+0001132394 00000 n
+0001132586 00000 n
+0001132779 00000 n
+0001132939 00000 n
+0001133132 00000 n
+0001133325 00000 n
+0001133516 00000 n
+0001133709 00000 n
+0001133902 00000 n
+0001134095 00000 n
+0001134288 00000 n
+0001134446 00000 n
+0001134639 00000 n
+0001135794 00000 n
+0001130807 00000 n
+0001128728 00000 n
+0001134830 00000 n
+0001135216 00000 n
+0001135281 00000 n
+0001135346 00000 n
+0001135539 00000 n
+0001135668 00000 n
+0001139297 00000 n
+0001139039 00000 n
+0001139426 00000 n
+0001139168 00000 n
+0001139875 00000 n
+0001140004 00000 n
+0001140390 00000 n
+0001140261 00000 n
+0001139619 00000 n
+0001146143 00000 n
+0001140132 00000 n
+0001139746 00000 n
+0001146272 00000 n
+0001140454 00000 n
+0001138783 00000 n
+0001135982 00000 n
+0001138910 00000 n
+0002845790 00000 n
+0001143214 00000 n
+0001143375 00000 n
+0001143598 00000 n
+0001143823 00000 n
+0001143990 00000 n
+0001144215 00000 n
+0001144440 00000 n
+0001144665 00000 n
+0001144889 00000 n
+0001145114 00000 n
+0001145339 00000 n
+0001145564 00000 n
+0001145789 00000 n
+0001146979 00000 n
+0001142945 00000 n
+0001140613 00000 n
+0001146014 00000 n
+0001146529 00000 n
+0001146593 00000 n
+0001146722 00000 n
+0001146851 00000 n
+0001149351 00000 n
+0001150316 00000 n
+0001150573 00000 n
+0001149800 00000 n
+0001150445 00000 n
+0001150187 00000 n
+0001150058 00000 n
+0001149929 00000 n
+0001149672 00000 n
+0001149543 00000 n
+0001152770 00000 n
+0001150637 00000 n
+0001149095 00000 n
+0001147138 00000 n
+0001149222 00000 n
+0001152930 00000 n
+0001153122 00000 n
+0001153316 00000 n
+0001153509 00000 n
+0001153671 00000 n
+0001153841 00000 n
+0001157799 00000 n
+0001157992 00000 n
+0001158163 00000 n
+0001158358 00000 n
+0001155254 00000 n
+0001152561 00000 n
+0001150810 00000 n
+0001154033 00000 n
+0001154289 00000 n
+0001154354 00000 n
+0001154547 00000 n
+0001154740 00000 n
+0001154869 00000 n
+0001155126 00000 n
+0001155191 00000 n
+0001158528 00000 n
+0001158723 00000 n
+0001158894 00000 n
+0001159064 00000 n
+0001159259 00000 n
+0001159417 00000 n
+0001159612 00000 n
+0001163392 00000 n
+0001161253 00000 n
+0001157550 00000 n
+0001155428 00000 n
+0001159773 00000 n
+0001159838 00000 n
+0001159903 00000 n
+0001160032 00000 n
+0001160353 00000 n
+0001160545 00000 n
+0001160674 00000 n
+0001160867 00000 n
+0001160996 00000 n
+0001163589 00000 n
+0001163786 00000 n
+0001163984 00000 n
+0001164182 00000 n
+0001164380 00000 n
+0001164578 00000 n
+0001168410 00000 n
+0001168601 00000 n
+0001168792 00000 n
+0001168984 00000 n
+0001169176 00000 n
+0001169372 00000 n
+0001165960 00000 n
+0001163183 00000 n
+0001161456 00000 n
+0001164737 00000 n
+0001164802 00000 n
+0001164867 00000 n
+0001165060 00000 n
+0001165253 00000 n
+0001165382 00000 n
+0001165510 00000 n
+0001165639 00000 n
+0001165768 00000 n
+0001169564 00000 n
+0001169756 00000 n
+0001169951 00000 n
+0001170141 00000 n
+0001170333 00000 n
+0001172005 00000 n
+0001168161 00000 n
+0001166119 00000 n
+0001170526 00000 n
+0001170655 00000 n
+0001170719 00000 n
+0001170912 00000 n
+0001171041 00000 n
+0001171234 00000 n
+0001171362 00000 n
+0001171491 00000 n
+0001171684 00000 n
+0001171813 00000 n
+0001171941 00000 n
+0002845923 00000 n
+0001294229 00000 n
+0001174685 00000 n
+0001174849 00000 n
+0001175043 00000 n
+0001175237 00000 n
+0001175431 00000 n
+0001175624 00000 n
+0001175818 00000 n
+0001176012 00000 n
+0001176206 00000 n
+0001176399 00000 n
+0001176593 00000 n
+0001176784 00000 n
+0001176978 00000 n
+0001177172 00000 n
+0001177366 00000 n
+0001177560 00000 n
+0001177754 00000 n
+0001177948 00000 n
+0001178140 00000 n
+0001181063 00000 n
+0001178652 00000 n
+0001174356 00000 n
+0001172164 00000 n
+0001178332 00000 n
+0001178588 00000 n
+0001197751 00000 n
+0001216261 00000 n
+0001190509 00000 n
+0001216390 00000 n
+0001201124 00000 n
+0001208138 00000 n
+0001190896 00000 n
+0001190380 00000 n
+0001198009 00000 n
+0001183835 00000 n
+0001207881 00000 n
+0001201769 00000 n
+0001201898 00000 n
+0001198138 00000 n
+0001201640 00000 n
+0001216004 00000 n
+0001184092 00000 n
+0001181257 00000 n
+0001181450 00000 n
+0001181643 00000 n
+0001181834 00000 n
+0001182028 00000 n
+0001182222 00000 n
+0001182416 00000 n
+0001182610 00000 n
+0001182804 00000 n
+0001182997 00000 n
+0001183191 00000 n
+0001184156 00000 n
+0001180804 00000 n
+0001178826 00000 n
+0001183385 00000 n
+0001183577 00000 n
+0001183706 00000 n
+0001183965 00000 n
+0001201511 00000 n
+0001201382 00000 n
+0001190638 00000 n
+0001197880 00000 n
+0001208010 00000 n
+0001216133 00000 n
+0001190767 00000 n
+0001197622 00000 n
+0001208396 00000 n
+0001201253 00000 n
+0001208267 00000 n
+0001191025 00000 n
+0001190124 00000 n
+0001184287 00000 n
+0001190251 00000 n
+0001198202 00000 n
+0001197430 00000 n
+0001191156 00000 n
+0001197557 00000 n
+0001201962 00000 n
+0001200868 00000 n
+0001198333 00000 n
+0001200995 00000 n
+0001207593 00000 n
+0001208460 00000 n
+0001207444 00000 n
+0001202093 00000 n
+0001207753 00000 n
+0002846056 00000 n
+0001216519 00000 n
+0001215748 00000 n
+0001208591 00000 n
+0001215875 00000 n
+0001219843 00000 n
+0001220005 00000 n
+0001220200 00000 n
+0001220395 00000 n
+0001220557 00000 n
+0001220752 00000 n
+0001220912 00000 n
+0001221107 00000 n
+0001221266 00000 n
+0001221460 00000 n
+0001221618 00000 n
+0001226019 00000 n
+0001226179 00000 n
+0001222645 00000 n
+0001219594 00000 n
+0001216650 00000 n
+0001221811 00000 n
+0001222004 00000 n
+0001222195 00000 n
+0001222324 00000 n
+0001222580 00000 n
+0001234658 00000 n
+0001229491 00000 n
+0001229749 00000 n
+0001234271 00000 n
+0001226374 00000 n
+0001226534 00000 n
+0001226729 00000 n
+0001226889 00000 n
+0001227084 00000 n
+0001227244 00000 n
+0001227439 00000 n
+0001227599 00000 n
+0001227794 00000 n
+0001227954 00000 n
+0001228149 00000 n
+0001228309 00000 n
+0001228504 00000 n
+0001228663 00000 n
+0001228822 00000 n
+0001228981 00000 n
+0001229140 00000 n
+0001230071 00000 n
+0001225690 00000 n
+0001222805 00000 n
+0001229298 00000 n
+0001229620 00000 n
+0001229878 00000 n
+0001230007 00000 n
+0001234144 00000 n
+0001234015 00000 n
+0001234529 00000 n
+0001234400 00000 n
+0001232777 00000 n
+0001232936 00000 n
+0001233095 00000 n
+0001233254 00000 n
+0001233413 00000 n
+0001233570 00000 n
+0001233729 00000 n
+0001237752 00000 n
+0001237910 00000 n
+0001234849 00000 n
+0001232568 00000 n
+0001230202 00000 n
+0001233887 00000 n
+0001238128 00000 n
+0001238285 00000 n
+0001238502 00000 n
+0001238660 00000 n
+0001238878 00000 n
+0001239096 00000 n
+0001239314 00000 n
+0001239480 00000 n
+0001239697 00000 n
+0001239864 00000 n
+0001240081 00000 n
+0001240299 00000 n
+0001241674 00000 n
+0001237473 00000 n
+0001234980 00000 n
+0001240517 00000 n
+0001240646 00000 n
+0001240838 00000 n
+0001240967 00000 n
+0001241096 00000 n
+0001241225 00000 n
+0001241353 00000 n
+0001241482 00000 n
+0001241610 00000 n
+0001247551 00000 n
+0001247422 00000 n
+0001245099 00000 n
+0001244174 00000 n
+0001245259 00000 n
+0001245433 00000 n
+0001245605 00000 n
+0001245797 00000 n
+0001245988 00000 n
+0001246159 00000 n
+0001246352 00000 n
+0001246523 00000 n
+0001246716 00000 n
+0001246908 00000 n
+0001247101 00000 n
+0001248131 00000 n
+0001243915 00000 n
+0001241805 00000 n
+0001247294 00000 n
+0001247808 00000 n
+0001247872 00000 n
+0001247937 00000 n
+0001248002 00000 n
+0002846189 00000 n
+0001244769 00000 n
+0001244951 00000 n
+0001245000 00000 n
+0001245076 00000 n
+0001251347 00000 n
+0001251668 00000 n
+0001251540 00000 n
+0001251797 00000 n
+0001252183 00000 n
+0001251926 00000 n
+0001252055 00000 n
+0001250358 00000 n
+0001250519 00000 n
+0001250682 00000 n
+0001250852 00000 n
+0001251023 00000 n
+0001252633 00000 n
+0001250169 00000 n
+0001248321 00000 n
+0001251218 00000 n
+0001252439 00000 n
+0001252504 00000 n
+0001256555 00000 n
+0001254894 00000 n
+0001255055 00000 n
+0001255265 00000 n
+0001255475 00000 n
+0001255686 00000 n
+0001255897 00000 n
+0001256107 00000 n
+0001256266 00000 n
+0001257778 00000 n
+0001254675 00000 n
+0001252821 00000 n
+0001256426 00000 n
+0001256811 00000 n
+0001256876 00000 n
+0001257069 00000 n
+0001257198 00000 n
+0001257391 00000 n
+0001257520 00000 n
+0001257649 00000 n
+0001260941 00000 n
+0001261134 00000 n
+0001261301 00000 n
+0001261495 00000 n
+0001261655 00000 n
+0001261849 00000 n
+0001262017 00000 n
+0001262185 00000 n
+0001262378 00000 n
+0001262546 00000 n
+0001262740 00000 n
+0001262899 00000 n
+0001263093 00000 n
+0001263261 00000 n
+0001263455 00000 n
+0001263649 00000 n
+0001263843 00000 n
+0001264002 00000 n
+0001264196 00000 n
+0001264388 00000 n
+0001264548 00000 n
+0001264742 00000 n
+0001264936 00000 n
+0001265096 00000 n
+0001265290 00000 n
+0001266384 00000 n
+0001260552 00000 n
+0001257966 00000 n
+0001265484 00000 n
+0001265741 00000 n
+0001265806 00000 n
+0001265871 00000 n
+0001265999 00000 n
+0001266192 00000 n
+0001266320 00000 n
+0001270342 00000 n
+0001269698 00000 n
+0001270214 00000 n
+0001270471 00000 n
+0001270085 00000 n
+0001269956 00000 n
+0001269827 00000 n
+0001270664 00000 n
+0001270792 00000 n
+0001274893 00000 n
+0001271049 00000 n
+0001269442 00000 n
+0001266516 00000 n
+0001269569 00000 n
+0001275053 00000 n
+0001275212 00000 n
+0001275376 00000 n
+0001275543 00000 n
+0001275732 00000 n
+0001275891 00000 n
+0001276081 00000 n
+0001276272 00000 n
+0001276431 00000 n
+0001276623 00000 n
+0001276782 00000 n
+0001276949 00000 n
+0001277141 00000 n
+0001277301 00000 n
+0001277493 00000 n
+0001277661 00000 n
+0001277829 00000 n
+0001278020 00000 n
+0001278188 00000 n
+0001278380 00000 n
+0001279899 00000 n
+0001274544 00000 n
+0001271237 00000 n
+0001278548 00000 n
+0001278613 00000 n
+0001278678 00000 n
+0001278743 00000 n
+0001278872 00000 n
+0001279001 00000 n
+0001279194 00000 n
+0001279323 00000 n
+0001279452 00000 n
+0001279580 00000 n
+0001279709 00000 n
+0001279835 00000 n
+0001283772 00000 n
+0001283931 00000 n
+0001284126 00000 n
+0001284321 00000 n
+0001284515 00000 n
+0001284709 00000 n
+0001284902 00000 n
+0001285096 00000 n
+0001285289 00000 n
+0001285481 00000 n
+0001285674 00000 n
+0001285867 00000 n
+0001286061 00000 n
+0001286255 00000 n
+0001286449 00000 n
+0001286641 00000 n
+0001286833 00000 n
+0001287027 00000 n
+0001287221 00000 n
+0001287415 00000 n
+0001287608 00000 n
+0001287802 00000 n
+0001287993 00000 n
+0001291559 00000 n
+0001291752 00000 n
+0001288699 00000 n
+0001283403 00000 n
+0001280058 00000 n
+0001288185 00000 n
+0001288441 00000 n
+0001288504 00000 n
+0001288569 00000 n
+0001288634 00000 n
+0002846322 00000 n
+0001293585 00000 n
+0001293714 00000 n
+0001291943 00000 n
+0001292136 00000 n
+0001292330 00000 n
+0001292523 00000 n
+0001292716 00000 n
+0001292875 00000 n
+0001293068 00000 n
+0001293262 00000 n
+0001294419 00000 n
+0001291320 00000 n
+0001288859 00000 n
+0001293456 00000 n
+0001293970 00000 n
+0001294035 00000 n
+0001294100 00000 n
+0001298345 00000 n
+0001298540 00000 n
+0001298734 00000 n
+0001298929 00000 n
+0001302630 00000 n
+0001302823 00000 n
+0001303016 00000 n
+0001303209 00000 n
+0001300025 00000 n
+0001298166 00000 n
+0001294579 00000 n
+0001299124 00000 n
+0001299253 00000 n
+0001299382 00000 n
+0001299511 00000 n
+0001299640 00000 n
+0001299768 00000 n
+0001303402 00000 n
+0001303595 00000 n
+0001303799 00000 n
+0001304003 00000 n
+0001304242 00000 n
+0001304438 00000 n
+0001304642 00000 n
+0001304844 00000 n
+0001305081 00000 n
+0001305277 00000 n
+0001305481 00000 n
+0001305685 00000 n
+0001305923 00000 n
+0001306119 00000 n
+0001306323 00000 n
+0001306527 00000 n
+0001306765 00000 n
+0001307731 00000 n
+0001302281 00000 n
+0001300199 00000 n
+0001306962 00000 n
+0001307027 00000 n
+0001307156 00000 n
+0001307284 00000 n
+0001307413 00000 n
+0001307542 00000 n
+0001307667 00000 n
+0001436892 00000 n
+0001447093 00000 n
+0001656546 00000 n
+0001447157 00000 n
+0001442930 00000 n
+0001446379 00000 n
+0001311842 00000 n
+0001312046 00000 n
+0001312250 00000 n
+0001312489 00000 n
+0001312685 00000 n
+0001312881 00000 n
+0001313083 00000 n
+0001313272 00000 n
+0001313607 00000 n
+0001313803 00000 n
+0001314005 00000 n
+0001314207 00000 n
+0001314404 00000 n
+0001314564 00000 n
+0001314885 00000 n
+0001315085 00000 n
+0001315280 00000 n
+0001315438 00000 n
+0001315598 00000 n
+0001315800 00000 n
+0001315997 00000 n
+0001316157 00000 n
+0001316313 00000 n
+0001316515 00000 n
+0001316712 00000 n
+0001316871 00000 n
+0001317192 00000 n
+0001317394 00000 n
+0001318497 00000 n
+0001311393 00000 n
+0001307905 00000 n
+0001317596 00000 n
+0001317853 00000 n
+0001313439 00000 n
+0001314725 00000 n
+0001317032 00000 n
+0001317918 00000 n
+0001318047 00000 n
+0001318176 00000 n
+0001318305 00000 n
+0001318433 00000 n
+0001443125 00000 n
+0001646697 00000 n
+0001328561 00000 n
+0001595912 00000 n
+0001328690 00000 n
+0001328432 00000 n
+0001328882 00000 n
+0001322671 00000 n
+0001322871 00000 n
+0001323068 00000 n
+0001323268 00000 n
+0001323464 00000 n
+0001323664 00000 n
+0001323861 00000 n
+0001324060 00000 n
+0001324256 00000 n
+0001324456 00000 n
+0001324653 00000 n
+0001324853 00000 n
+0001325050 00000 n
+0001325252 00000 n
+0001325447 00000 n
+0001325646 00000 n
+0001325834 00000 n
+0001326168 00000 n
+0001326362 00000 n
+0001326560 00000 n
+0001326760 00000 n
+0001326957 00000 n
+0001327116 00000 n
+0001327436 00000 n
+0001327634 00000 n
+0001327829 00000 n
+0001327986 00000 n
+0001333770 00000 n
+0001333970 00000 n
+0001334165 00000 n
+0001334325 00000 n
+0001329269 00000 n
+0001322232 00000 n
+0001318685 00000 n
+0001328303 00000 n
+0001329139 00000 n
+0001329204 00000 n
+0001326000 00000 n
+0001327277 00000 n
+0001328145 00000 n
+0001341143 00000 n
+0001640429 00000 n
+0001341272 00000 n
+0001335821 00000 n
+0001335950 00000 n
+0001336079 00000 n
+0001335692 00000 n
+0001348072 00000 n
+0001348201 00000 n
+0001341723 00000 n
+0001341851 00000 n
+0001334645 00000 n
+0001334845 00000 n
+0001335018 00000 n
+0001335178 00000 n
+0001335339 00000 n
+0001336207 00000 n
+0001333531 00000 n
+0001329443 00000 n
+0001335499 00000 n
+0001334486 00000 n
+0002842602 00000 n
+0002846455 00000 n
+0001341594 00000 n
+0001341465 00000 n
+0002731640 00000 n
+0001340917 00000 n
+0001341915 00000 n
+0001340768 00000 n
+0001336354 00000 n
+0001341078 00000 n
+0001345110 00000 n
+0001345314 00000 n
+0001345511 00000 n
+0001345671 00000 n
+0001345832 00000 n
+0001346036 00000 n
+0001346233 00000 n
+0001346437 00000 n
+0001346638 00000 n
+0001346834 00000 n
+0001346993 00000 n
+0001347195 00000 n
+0001347392 00000 n
+0001347550 00000 n
+0001347749 00000 n
+0001354423 00000 n
+0001354625 00000 n
+0001354822 00000 n
+0001354981 00000 n
+0001355142 00000 n
+0001355344 00000 n
+0001349166 00000 n
+0001344821 00000 n
+0001342091 00000 n
+0001347943 00000 n
+0001348458 00000 n
+0001348587 00000 n
+0001348715 00000 n
+0001348844 00000 n
+0001349101 00000 n
+0001356816 00000 n
+0001356945 00000 n
+0001357073 00000 n
+0001355541 00000 n
+0001355743 00000 n
+0001355918 00000 n
+0001356077 00000 n
+0001356237 00000 n
+0001356398 00000 n
+0001357458 00000 n
+0001354164 00000 n
+0001349326 00000 n
+0001356558 00000 n
+0001356623 00000 n
+0001357266 00000 n
+0001357394 00000 n
+0001362459 00000 n
+0002731605 00000 n
+0001360093 00000 n
+0001360284 00000 n
+0001360443 00000 n
+0001360635 00000 n
+0001360795 00000 n
+0001360986 00000 n
+0001361145 00000 n
+0001361337 00000 n
+0001361497 00000 n
+0001361664 00000 n
+0001361856 00000 n
+0001362016 00000 n
+0001362173 00000 n
+0001366177 00000 n
+0001363681 00000 n
+0001359824 00000 n
+0001357619 00000 n
+0001362330 00000 n
+0001362716 00000 n
+0001362845 00000 n
+0001362973 00000 n
+0001363102 00000 n
+0001363231 00000 n
+0001363360 00000 n
+0001363617 00000 n
+0001366367 00000 n
+0001366557 00000 n
+0001366747 00000 n
+0001366937 00000 n
+0001367126 00000 n
+0001367315 00000 n
+0001367475 00000 n
+0001367665 00000 n
+0001367825 00000 n
+0001368015 00000 n
+0001368175 00000 n
+0001368365 00000 n
+0001368555 00000 n
+0001368715 00000 n
+0001368904 00000 n
+0001369063 00000 n
+0001369253 00000 n
+0001369413 00000 n
+0001369602 00000 n
+0001369761 00000 n
+0001369928 00000 n
+0001370118 00000 n
+0001371823 00000 n
+0001365808 00000 n
+0001363855 00000 n
+0001370278 00000 n
+0001370343 00000 n
+0001370408 00000 n
+0001370473 00000 n
+0001370602 00000 n
+0001370730 00000 n
+0001370859 00000 n
+0001370988 00000 n
+0001371309 00000 n
+0001371438 00000 n
+0001371695 00000 n
+0001376599 00000 n
+0001376470 00000 n
+0001376212 00000 n
+0001376341 00000 n
+0001376727 00000 n
+0001374679 00000 n
+0001374878 00000 n
+0001375077 00000 n
+0001375282 00000 n
+0001375481 00000 n
+0001375687 00000 n
+0001375885 00000 n
+0001377686 00000 n
+0001374470 00000 n
+0001371968 00000 n
+0001376083 00000 n
+0001376982 00000 n
+0001377047 00000 n
+0001377172 00000 n
+0001377365 00000 n
+0001377494 00000 n
+0001377622 00000 n
+0002846588 00000 n
+0001416854 00000 n
+0001386673 00000 n
+0001386879 00000 n
+0001387085 00000 n
+0001387290 00000 n
+0001387495 00000 n
+0001387701 00000 n
+0001387907 00000 n
+0001388145 00000 n
+0001388384 00000 n
+0001388623 00000 n
+0001388861 00000 n
+0001389097 00000 n
+0001389333 00000 n
+0001389570 00000 n
+0001389807 00000 n
+0001390044 00000 n
+0001390281 00000 n
+0001390519 00000 n
+0001390757 00000 n
+0001390995 00000 n
+0001391234 00000 n
+0001391473 00000 n
+0001391712 00000 n
+0001391950 00000 n
+0001392189 00000 n
+0001392428 00000 n
+0001392667 00000 n
+0001392904 00000 n
+0001393142 00000 n
+0001393380 00000 n
+0001393618 00000 n
+0001393856 00000 n
+0001394095 00000 n
+0001394333 00000 n
+0001394572 00000 n
+0001394810 00000 n
+0001395049 00000 n
+0001395288 00000 n
+0001395527 00000 n
+0001395765 00000 n
+0001396004 00000 n
+0001396243 00000 n
+0001396482 00000 n
+0001396719 00000 n
+0001396958 00000 n
+0001397197 00000 n
+0001397436 00000 n
+0001397673 00000 n
+0001397912 00000 n
+0001398151 00000 n
+0001398390 00000 n
+0001398627 00000 n
+0001398865 00000 n
+0001399103 00000 n
+0001399341 00000 n
+0001399579 00000 n
+0001399818 00000 n
+0001400056 00000 n
+0001400295 00000 n
+0001400532 00000 n
+0001400769 00000 n
+0001401007 00000 n
+0001401245 00000 n
+0001401483 00000 n
+0001401722 00000 n
+0001401961 00000 n
+0001402200 00000 n
+0001402438 00000 n
+0001402677 00000 n
+0001402916 00000 n
+0001403393 00000 n
+0001403630 00000 n
+0001403869 00000 n
+0001404108 00000 n
+0001404347 00000 n
+0001404585 00000 n
+0001404823 00000 n
+0001405061 00000 n
+0001405300 00000 n
+0001405538 00000 n
+0001405777 00000 n
+0001406016 00000 n
+0001406255 00000 n
+0001406493 00000 n
+0001406732 00000 n
+0001406971 00000 n
+0001407209 00000 n
+0001407447 00000 n
+0001407686 00000 n
+0001407925 00000 n
+0001408164 00000 n
+0001408402 00000 n
+0001408641 00000 n
+0001408880 00000 n
+0001409119 00000 n
+0001409356 00000 n
+0001409595 00000 n
+0001409834 00000 n
+0001410073 00000 n
+0001410311 00000 n
+0001410549 00000 n
+0001410788 00000 n
+0001411026 00000 n
+0001411264 00000 n
+0001411503 00000 n
+0001411742 00000 n
+0001411981 00000 n
+0001412219 00000 n
+0001412458 00000 n
+0001412697 00000 n
+0001412936 00000 n
+0001413173 00000 n
+0001413411 00000 n
+0001413648 00000 n
+0001413886 00000 n
+0001414123 00000 n
+0001414360 00000 n
+0001414598 00000 n
+0001414836 00000 n
+0001415071 00000 n
+0001415307 00000 n
+0001415542 00000 n
+0001415778 00000 n
+0001416014 00000 n
+0001416251 00000 n
+0001416488 00000 n
+0001424168 00000 n
+0001424405 00000 n
+0001424644 00000 n
+0001417241 00000 n
+0001385264 00000 n
+0001377860 00000 n
+0001416725 00000 n
+0001417111 00000 n
+0001417176 00000 n
+0001403155 00000 n
+0001437021 00000 n
+0001437150 00000 n
+0001459939 00000 n
+0001436763 00000 n
+0001441050 00000 n
+0001441115 00000 n
+0001441179 00000 n
+0001441244 00000 n
+0001441309 00000 n
+0001441374 00000 n
+0001441439 00000 n
+0001441504 00000 n
+0001441569 00000 n
+0001441634 00000 n
+0001441699 00000 n
+0001441763 00000 n
+0001441828 00000 n
+0001441893 00000 n
+0001441958 00000 n
+0001442023 00000 n
+0001442088 00000 n
+0001442153 00000 n
+0001442218 00000 n
+0001442283 00000 n
+0001442346 00000 n
+0001442411 00000 n
+0001442476 00000 n
+0001442541 00000 n
+0001442606 00000 n
+0001442671 00000 n
+0001442736 00000 n
+0001442801 00000 n
+0001442866 00000 n
+0001442995 00000 n
+0001443060 00000 n
+0001443190 00000 n
+0001443254 00000 n
+0001446249 00000 n
+0001446314 00000 n
+0001446444 00000 n
+0001446509 00000 n
+0001446574 00000 n
+0001446638 00000 n
+0001446703 00000 n
+0001446768 00000 n
+0001446833 00000 n
+0001446898 00000 n
+0001446963 00000 n
+0001447028 00000 n
+0001447222 00000 n
+0001447287 00000 n
+0001447352 00000 n
+0001447417 00000 n
+0001447482 00000 n
+0001447547 00000 n
+0001447612 00000 n
+0001447676 00000 n
+0001447741 00000 n
+0001447806 00000 n
+0001447871 00000 n
+0001447936 00000 n
+0001448001 00000 n
+0001448066 00000 n
+0001448131 00000 n
+0001448195 00000 n
+0001448260 00000 n
+0001448325 00000 n
+0001448390 00000 n
+0001448455 00000 n
+0001448520 00000 n
+0001448585 00000 n
+0001448650 00000 n
+0001448714 00000 n
+0001448779 00000 n
+0001448844 00000 n
+0001448909 00000 n
+0001448974 00000 n
+0001449039 00000 n
+0001449103 00000 n
+0001451779 00000 n
+0001451844 00000 n
+0001451909 00000 n
+0001451974 00000 n
+0001452039 00000 n
+0001452104 00000 n
+0001452169 00000 n
+0001452234 00000 n
+0001452298 00000 n
+0001452363 00000 n
+0001452428 00000 n
+0001452493 00000 n
+0001452558 00000 n
+0001452623 00000 n
+0001452688 00000 n
+0001452753 00000 n
+0001452818 00000 n
+0001452883 00000 n
+0001452947 00000 n
+0001453012 00000 n
+0001453077 00000 n
+0001453142 00000 n
+0001453207 00000 n
+0001453272 00000 n
+0001453337 00000 n
+0001453402 00000 n
+0001453467 00000 n
+0001453532 00000 n
+0001453597 00000 n
+0001453662 00000 n
+0001453727 00000 n
+0001453792 00000 n
+0001453857 00000 n
+0001453922 00000 n
+0001453987 00000 n
+0001454051 00000 n
+0001454116 00000 n
+0001454181 00000 n
+0001454246 00000 n
+0001454311 00000 n
+0001424883 00000 n
+0001425089 00000 n
+0001425326 00000 n
+0001425564 00000 n
+0001425802 00000 n
+0001426278 00000 n
+0001426515 00000 n
+0001426753 00000 n
+0001426991 00000 n
+0001427467 00000 n
+0001427704 00000 n
+0001427942 00000 n
+0001428180 00000 n
+0001428656 00000 n
+0001428894 00000 n
+0001429132 00000 n
+0001429371 00000 n
+0001429848 00000 n
+0001430086 00000 n
+0001430325 00000 n
+0001430564 00000 n
+0001430802 00000 n
+0001431040 00000 n
+0001431246 00000 n
+0001431483 00000 n
+0001431722 00000 n
+0001431960 00000 n
+0001432437 00000 n
+0001432675 00000 n
+0001432914 00000 n
+0001433153 00000 n
+0001433630 00000 n
+0001433867 00000 n
+0001434106 00000 n
+0001434312 00000 n
+0001434517 00000 n
+0001434723 00000 n
+0001434927 00000 n
+0001435133 00000 n
+0001435339 00000 n
+0001435545 00000 n
+0001435750 00000 n
+0001435956 00000 n
+0001436162 00000 n
+0001436367 00000 n
+0001437214 00000 n
+0001423489 00000 n
+0001417415 00000 n
+0001436569 00000 n
+0001426040 00000 n
+0001427229 00000 n
+0001428418 00000 n
+0001429610 00000 n
+0001432199 00000 n
+0001433392 00000 n
+0001436634 00000 n
+0001454376 00000 n
+0001454441 00000 n
+0001454506 00000 n
+0001454570 00000 n
+0001457734 00000 n
+0001457799 00000 n
+0001457864 00000 n
+0001457928 00000 n
+0001457993 00000 n
+0001458058 00000 n
+0001458123 00000 n
+0001458188 00000 n
+0001458253 00000 n
+0001458318 00000 n
+0001458382 00000 n
+0001458447 00000 n
+0001458512 00000 n
+0001458577 00000 n
+0001458642 00000 n
+0001458707 00000 n
+0001458772 00000 n
+0001458836 00000 n
+0001458901 00000 n
+0001458966 00000 n
+0001459031 00000 n
+0001459096 00000 n
+0001459225 00000 n
+0001459290 00000 n
+0001459355 00000 n
+0001459420 00000 n
+0001459485 00000 n
+0001459550 00000 n
+0001459615 00000 n
+0001459680 00000 n
+0001459745 00000 n
+0001459810 00000 n
+0001460067 00000 n
+0001464081 00000 n
+0001464339 00000 n
+0001464210 00000 n
+0001464468 00000 n
+0001464597 00000 n
+0001440319 00000 n
+0001440525 00000 n
+0001443318 00000 n
+0001440160 00000 n
+0001437374 00000 n
+0001440729 00000 n
+0001449167 00000 n
+0001446057 00000 n
+0001443478 00000 n
+0001446184 00000 n
+0001454634 00000 n
+0001451587 00000 n
+0001449270 00000 n
+0001451714 00000 n
+0001460131 00000 n
+0001457478 00000 n
+0001454751 00000 n
+0001457605 00000 n
+0002846721 00000 n
+0001463362 00000 n
+0001463558 00000 n
+0001463755 00000 n
+0001476982 00000 n
+0001465559 00000 n
+0001463193 00000 n
+0001460262 00000 n
+0001463952 00000 n
+0001464852 00000 n
+0001464917 00000 n
+0001465046 00000 n
+0001465239 00000 n
+0001465368 00000 n
+0001477179 00000 n
+0001477408 00000 n
+0001477638 00000 n
+0001477867 00000 n
+0001478097 00000 n
+0001478325 00000 n
+0001478554 00000 n
+0001478783 00000 n
+0001479012 00000 n
+0001479241 00000 n
+0001479471 00000 n
+0001479701 00000 n
+0001480160 00000 n
+0001480389 00000 n
+0001480619 00000 n
+0001480849 00000 n
+0001481306 00000 n
+0001481535 00000 n
+0001481765 00000 n
+0001481995 00000 n
+0001482454 00000 n
+0001482683 00000 n
+0001482913 00000 n
+0001483141 00000 n
+0001483371 00000 n
+0001483599 00000 n
+0001483829 00000 n
+0001484059 00000 n
+0001484289 00000 n
+0001484518 00000 n
+0001484748 00000 n
+0001484978 00000 n
+0001485207 00000 n
+0001485436 00000 n
+0001485666 00000 n
+0001485896 00000 n
+0001486355 00000 n
+0001486584 00000 n
+0001486813 00000 n
+0001487043 00000 n
+0001487273 00000 n
+0001487502 00000 n
+0001487732 00000 n
+0001487962 00000 n
+0001488192 00000 n
+0001488421 00000 n
+0001488651 00000 n
+0001488881 00000 n
+0001489111 00000 n
+0001489339 00000 n
+0001489568 00000 n
+0001489798 00000 n
+0001490028 00000 n
+0001490256 00000 n
+0001490485 00000 n
+0001490713 00000 n
+0001490941 00000 n
+0001491170 00000 n
+0001491400 00000 n
+0001491858 00000 n
+0001492087 00000 n
+0001492315 00000 n
+0001492544 00000 n
+0001492773 00000 n
+0001493231 00000 n
+0001493459 00000 n
+0001493688 00000 n
+0001493917 00000 n
+0001494145 00000 n
+0001494374 00000 n
+0001494604 00000 n
+0001494834 00000 n
+0001495063 00000 n
+0001495292 00000 n
+0001495522 00000 n
+0001495752 00000 n
+0001495982 00000 n
+0001496211 00000 n
+0001496440 00000 n
+0001496670 00000 n
+0001496900 00000 n
+0001497128 00000 n
+0001497358 00000 n
+0001497588 00000 n
+0001497818 00000 n
+0001498047 00000 n
+0001498277 00000 n
+0001498507 00000 n
+0001498737 00000 n
+0001498965 00000 n
+0001499194 00000 n
+0001499424 00000 n
+0001499883 00000 n
+0001500112 00000 n
+0001500342 00000 n
+0001500572 00000 n
+0001500802 00000 n
+0001501031 00000 n
+0001501261 00000 n
+0001501491 00000 n
+0001501949 00000 n
+0001502178 00000 n
+0001502408 00000 n
+0001502637 00000 n
+0001503096 00000 n
+0001503325 00000 n
+0001503554 00000 n
+0001503784 00000 n
+0001504014 00000 n
+0001504243 00000 n
+0001504473 00000 n
+0001504702 00000 n
+0001504932 00000 n
+0001505161 00000 n
+0001505390 00000 n
+0001505620 00000 n
+0001506078 00000 n
+0001506307 00000 n
+0001506537 00000 n
+0001506767 00000 n
+0001507226 00000 n
+0001507454 00000 n
+0001507684 00000 n
+0001507914 00000 n
+0001508373 00000 n
+0001508602 00000 n
+0001508832 00000 n
+0001509062 00000 n
+0001509291 00000 n
+0001509519 00000 n
+0001509748 00000 n
+0001510206 00000 n
+0001510435 00000 n
+0001510663 00000 n
+0001510892 00000 n
+0001511347 00000 n
+0001511573 00000 n
+0001511800 00000 n
+0001512028 00000 n
+0001516541 00000 n
+0001516769 00000 n
+0001516998 00000 n
+0001517228 00000 n
+0001517458 00000 n
+0001517917 00000 n
+0001518146 00000 n
+0001518375 00000 n
+0001518605 00000 n
+0001518834 00000 n
+0001519063 00000 n
+0001519293 00000 n
+0001519523 00000 n
+0001519981 00000 n
+0001520210 00000 n
+0001512515 00000 n
+0001475303 00000 n
+0001465733 00000 n
+0001512256 00000 n
+0001512385 00000 n
+0001512450 00000 n
+0001479931 00000 n
+0001481079 00000 n
+0001482225 00000 n
+0001486126 00000 n
+0001491630 00000 n
+0001493002 00000 n
+0001499654 00000 n
+0001501721 00000 n
+0001502867 00000 n
+0001505849 00000 n
+0001506997 00000 n
+0001508144 00000 n
+0001509978 00000 n
+0001511121 00000 n
+0001520830 00000 n
+0001521151 00000 n
+0001521216 00000 n
+0001521280 00000 n
+0001521345 00000 n
+0001521410 00000 n
+0001521475 00000 n
+0001521540 00000 n
+0001521605 00000 n
+0001521670 00000 n
+0001521735 00000 n
+0001521800 00000 n
+0001521865 00000 n
+0001521930 00000 n
+0001521994 00000 n
+0001522059 00000 n
+0001522124 00000 n
+0001522188 00000 n
+0001522253 00000 n
+0001522318 00000 n
+0001522383 00000 n
+0001522448 00000 n
+0001522513 00000 n
+0001522578 00000 n
+0001522643 00000 n
+0001522708 00000 n
+0001522772 00000 n
+0001526130 00000 n
+0001526195 00000 n
+0001526260 00000 n
+0001526325 00000 n
+0001526390 00000 n
+0001526455 00000 n
+0001526519 00000 n
+0001526584 00000 n
+0001526649 00000 n
+0001526714 00000 n
+0001526779 00000 n
+0001526844 00000 n
+0001526909 00000 n
+0001526974 00000 n
+0001527038 00000 n
+0001527103 00000 n
+0001527168 00000 n
+0001527233 00000 n
+0001527298 00000 n
+0001527363 00000 n
+0001527428 00000 n
+0001527493 00000 n
+0001527557 00000 n
+0001527622 00000 n
+0001527687 00000 n
+0001527752 00000 n
+0001527817 00000 n
+0001527882 00000 n
+0001527947 00000 n
+0001528012 00000 n
+0001528076 00000 n
+0001528141 00000 n
+0001528206 00000 n
+0001528271 00000 n
+0001528336 00000 n
+0001528401 00000 n
+0001528466 00000 n
+0001528531 00000 n
+0001528595 00000 n
+0001528660 00000 n
+0001528725 00000 n
+0001528790 00000 n
+0001528855 00000 n
+0001528920 00000 n
+0001528984 00000 n
+0001531944 00000 n
+0001532009 00000 n
+0001532074 00000 n
+0001532139 00000 n
+0001532204 00000 n
+0001532269 00000 n
+0001532333 00000 n
+0001532398 00000 n
+0001532463 00000 n
+0001532528 00000 n
+0001532593 00000 n
+0001532658 00000 n
+0001532723 00000 n
+0001532788 00000 n
+0001532852 00000 n
+0001532917 00000 n
+0001532982 00000 n
+0001533047 00000 n
+0001533112 00000 n
+0001533177 00000 n
+0001533242 00000 n
+0001533307 00000 n
+0001533371 00000 n
+0001533436 00000 n
+0001533501 00000 n
+0001533566 00000 n
+0001533631 00000 n
+0001533696 00000 n
+0001533761 00000 n
+0001533826 00000 n
+0001533890 00000 n
+0001533955 00000 n
+0001534020 00000 n
+0001534085 00000 n
+0001534150 00000 n
+0001534215 00000 n
+0001534280 00000 n
+0001534345 00000 n
+0001534409 00000 n
+0001534474 00000 n
+0001534539 00000 n
+0001534604 00000 n
+0001534669 00000 n
+0001534734 00000 n
+0001534798 00000 n
+0001538296 00000 n
+0001538361 00000 n
+0001538426 00000 n
+0001538491 00000 n
+0001538556 00000 n
+0001538621 00000 n
+0001538686 00000 n
+0001538751 00000 n
+0001538815 00000 n
+0001538880 00000 n
+0001538945 00000 n
+0001539010 00000 n
+0001539075 00000 n
+0001539140 00000 n
+0001539205 00000 n
+0001539270 00000 n
+0001539334 00000 n
+0001539399 00000 n
+0001539464 00000 n
+0001539529 00000 n
+0001539594 00000 n
+0001539659 00000 n
+0001539724 00000 n
+0001520440 00000 n
+0001522836 00000 n
+0001516222 00000 n
+0001512646 00000 n
+0001520637 00000 n
+0001517688 00000 n
+0001519752 00000 n
+0001520702 00000 n
+0001521022 00000 n
+0001539789 00000 n
+0001539853 00000 n
+0001539918 00000 n
+0001539983 00000 n
+0001540048 00000 n
+0001540113 00000 n
+0001540178 00000 n
+0001540243 00000 n
+0001540308 00000 n
+0001540371 00000 n
+0001540436 00000 n
+0001540501 00000 n
+0001540566 00000 n
+0001540631 00000 n
+0001540696 00000 n
+0001540825 00000 n
+0001529048 00000 n
+0001525938 00000 n
+0001522981 00000 n
+0001526065 00000 n
+0001534862 00000 n
+0001531752 00000 n
+0001529151 00000 n
+0001531879 00000 n
+0001545152 00000 n
+0001545310 00000 n
+0001545487 00000 n
+0001541016 00000 n
+0001538104 00000 n
+0001534965 00000 n
+0001538231 00000 n
+0002846854 00000 n
+0001545680 00000 n
+0001545863 00000 n
+0001546044 00000 n
+0001546238 00000 n
+0001546441 00000 n
+0001546636 00000 n
+0001546832 00000 n
+0001547026 00000 n
+0001547217 00000 n
+0001547407 00000 n
+0001547597 00000 n
+0001547787 00000 n
+0001547979 00000 n
+0001548171 00000 n
+0001548357 00000 n
+0001548549 00000 n
+0001548737 00000 n
+0001548927 00000 n
+0001549116 00000 n
+0001549310 00000 n
+0001549508 00000 n
+0001549702 00000 n
+0001549898 00000 n
+0001550093 00000 n
+0001550285 00000 n
+0001550478 00000 n
+0001550674 00000 n
+0001550870 00000 n
+0001551063 00000 n
+0001551255 00000 n
+0001551454 00000 n
+0001551657 00000 n
+0001551859 00000 n
+0001552050 00000 n
+0001552240 00000 n
+0001552432 00000 n
+0001552633 00000 n
+0001552834 00000 n
+0001553025 00000 n
+0001553216 00000 n
+0001553419 00000 n
+0001553623 00000 n
+0001553828 00000 n
+0001559635 00000 n
+0001554354 00000 n
+0001544553 00000 n
+0001541175 00000 n
+0001554032 00000 n
+0001554161 00000 n
+0001559804 00000 n
+0001559975 00000 n
+0001560151 00000 n
+0001560332 00000 n
+0001560520 00000 n
+0001560709 00000 n
+0001560931 00000 n
+0001561119 00000 n
+0001561308 00000 n
+0001561530 00000 n
+0001561719 00000 n
+0001561940 00000 n
+0001562129 00000 n
+0001562317 00000 n
+0001562506 00000 n
+0001562728 00000 n
+0001562950 00000 n
+0001563172 00000 n
+0001563361 00000 n
+0001563582 00000 n
+0001563803 00000 n
+0001564025 00000 n
+0001564468 00000 n
+0001564689 00000 n
+0001564910 00000 n
+0001565099 00000 n
+0001565288 00000 n
+0001565477 00000 n
+0001565666 00000 n
+0001565855 00000 n
+0001566043 00000 n
+0001566232 00000 n
+0001566421 00000 n
+0001566610 00000 n
+0001566799 00000 n
+0001566986 00000 n
+0001567175 00000 n
+0001567364 00000 n
+0001567553 00000 n
+0001567741 00000 n
+0001567930 00000 n
+0001568119 00000 n
+0001568308 00000 n
+0001568496 00000 n
+0001568684 00000 n
+0001568873 00000 n
+0001569062 00000 n
+0001569250 00000 n
+0001569438 00000 n
+0001569627 00000 n
+0001569816 00000 n
+0001570005 00000 n
+0001570193 00000 n
+0001570381 00000 n
+0001570569 00000 n
+0001570758 00000 n
+0001570947 00000 n
+0001571118 00000 n
+0001571307 00000 n
+0001571496 00000 n
+0001571667 00000 n
+0001571855 00000 n
+0001572042 00000 n
+0001572212 00000 n
+0001572399 00000 n
+0001572586 00000 n
+0001572755 00000 n
+0001572942 00000 n
+0001573129 00000 n
+0001579327 00000 n
+0001579515 00000 n
+0001579703 00000 n
+0001579879 00000 n
+0001580068 00000 n
+0001580257 00000 n
+0001580609 00000 n
+0001580798 00000 n
+0001580987 00000 n
+0001573688 00000 n
+0001558786 00000 n
+0001554500 00000 n
+0001573298 00000 n
+0001573363 00000 n
+0001573428 00000 n
+0001573493 00000 n
+0001573558 00000 n
+0001564247 00000 n
+0001573623 00000 n
+0001592623 00000 n
+0001592237 00000 n
+0001596171 00000 n
+0001592108 00000 n
+0001592366 00000 n
+0001592495 00000 n
+0001595204 00000 n
+0001596041 00000 n
+0001596106 00000 n
+0001595524 00000 n
+0001595652 00000 n
+0001595717 00000 n
+0001595782 00000 n
+0001595847 00000 n
+0001596557 00000 n
+0001596299 00000 n
+0001596428 00000 n
+0001597200 00000 n
+0001597072 00000 n
+0001596943 00000 n
+0001596814 00000 n
+0001600856 00000 n
+0001596685 00000 n
+0001611628 00000 n
+0001607115 00000 n
+0001607628 00000 n
+0001612272 00000 n
+0001607371 00000 n
+0001611113 00000 n
+0001611757 00000 n
+0001607244 00000 n
+0001612143 00000 n
+0001607500 00000 n
+0001612401 00000 n
+0001611242 00000 n
+0001611371 00000 n
+0001606858 00000 n
+0001611886 00000 n
+0001612787 00000 n
+0001612530 00000 n
+0001581163 00000 n
+0001581352 00000 n
+0001581541 00000 n
+0001581718 00000 n
+0001581907 00000 n
+0001582096 00000 n
+0001582273 00000 n
+0001582462 00000 n
+0001582651 00000 n
+0001582839 00000 n
+0001583027 00000 n
+0001583216 00000 n
+0001583405 00000 n
+0001583594 00000 n
+0001583783 00000 n
+0001583972 00000 n
+0001584161 00000 n
+0001584350 00000 n
+0001584539 00000 n
+0001584727 00000 n
+0001584915 00000 n
+0001585103 00000 n
+0001585290 00000 n
+0001585478 00000 n
+0001585667 00000 n
+0001585856 00000 n
+0001586045 00000 n
+0001586234 00000 n
+0001586423 00000 n
+0001586611 00000 n
+0001586800 00000 n
+0001586989 00000 n
+0001587178 00000 n
+0001587539 00000 n
+0001587727 00000 n
+0001587915 00000 n
+0001588275 00000 n
+0001588463 00000 n
+0001588652 00000 n
+0001588833 00000 n
+0001589022 00000 n
+0001589211 00000 n
+0001589392 00000 n
+0001589581 00000 n
+0001589769 00000 n
+0001589958 00000 n
+0001590146 00000 n
+0001590507 00000 n
+0001590695 00000 n
+0001590884 00000 n
+0001591244 00000 n
+0001591431 00000 n
+0001591619 00000 n
+0001592751 00000 n
+0001578508 00000 n
+0001573819 00000 n
+0001591979 00000 n
+0001580434 00000 n
+0001587359 00000 n
+0001588095 00000 n
+0001590327 00000 n
+0001591064 00000 n
+0001591799 00000 n
+0001611500 00000 n
+0001606986 00000 n
+0001612014 00000 n
+0001616411 00000 n
+0001612659 00000 n
+0001606600 00000 n
+0001602014 00000 n
+0001606471 00000 n
+0001601885 00000 n
+0001602400 00000 n
+0001601628 00000 n
+0001605955 00000 n
+0001606342 00000 n
+0001606213 00000 n
+0001606084 00000 n
+0001601756 00000 n
+0001605827 00000 n
+0001600984 00000 n
+0001601113 00000 n
+0001602272 00000 n
+0001601499 00000 n
+0001601370 00000 n
+0001602143 00000 n
+0001606729 00000 n
+0001601241 00000 n
+0001597264 00000 n
+0001594948 00000 n
+0001592896 00000 n
+0001595075 00000 n
+0001602464 00000 n
+0001600600 00000 n
+0001597409 00000 n
+0001600727 00000 n
+0001607692 00000 n
+0001605571 00000 n
+0001602609 00000 n
+0001605698 00000 n
+0002846987 00000 n
+0001612851 00000 n
+0001610857 00000 n
+0001607837 00000 n
+0001610984 00000 n
+0001615278 00000 n
+0001615475 00000 n
+0001615634 00000 n
+0001615795 00000 n
+0001615956 00000 n
+0001616115 00000 n
+0001621541 00000 n
+0001621737 00000 n
+0001621935 00000 n
+0001622131 00000 n
+0001622329 00000 n
+0001622526 00000 n
+0001622723 00000 n
+0001617117 00000 n
+0001615079 00000 n
+0001612996 00000 n
+0001616282 00000 n
+0001616668 00000 n
+0001616796 00000 n
+0001617052 00000 n
+0001622920 00000 n
+0001623117 00000 n
+0001623314 00000 n
+0001623511 00000 n
+0001623708 00000 n
+0001623905 00000 n
+0001624100 00000 n
+0001624297 00000 n
+0001624494 00000 n
+0001624663 00000 n
+0001624860 00000 n
+0001625057 00000 n
+0001625286 00000 n
+0001625515 00000 n
+0001625745 00000 n
+0001625975 00000 n
+0001626204 00000 n
+0001626434 00000 n
+0001626664 00000 n
+0001626894 00000 n
+0001627122 00000 n
+0001627352 00000 n
+0001627582 00000 n
+0001627812 00000 n
+0001628041 00000 n
+0001628271 00000 n
+0001628500 00000 n
+0001628730 00000 n
+0001628958 00000 n
+0001629155 00000 n
+0001629383 00000 n
+0001629612 00000 n
+0001629841 00000 n
+0001630070 00000 n
+0001630299 00000 n
+0001630494 00000 n
+0001630691 00000 n
+0001630888 00000 n
+0001631085 00000 n
+0001631281 00000 n
+0001631478 00000 n
+0001631675 00000 n
+0001631871 00000 n
+0001632068 00000 n
+0001632264 00000 n
+0001632461 00000 n
+0001632658 00000 n
+0001632855 00000 n
+0001633051 00000 n
+0001633248 00000 n
+0001633445 00000 n
+0001633642 00000 n
+0001633839 00000 n
+0001634035 00000 n
+0001634230 00000 n
+0001634812 00000 n
+0001620782 00000 n
+0001617291 00000 n
+0001634424 00000 n
+0001634489 00000 n
+0001634554 00000 n
+0001634617 00000 n
+0001634682 00000 n
+0001634747 00000 n
+0001640042 00000 n
+0001969166 00000 n
+0001639913 00000 n
+0002002430 00000 n
+0001640558 00000 n
+0001639784 00000 n
+0001639655 00000 n
+0001640300 00000 n
+0001640171 00000 n
+0001646375 00000 n
+0001646504 00000 n
+0001640687 00000 n
+0001640816 00000 n
+0001646890 00000 n
+0001647019 00000 n
+0001647084 00000 n
+0001647149 00000 n
+0001647214 00000 n
+0001647279 00000 n
+0001647344 00000 n
+0001647409 00000 n
+0001647474 00000 n
+0001647538 00000 n
+0001647603 00000 n
+0001647668 00000 n
+0001647731 00000 n
+0001647795 00000 n
+0001650946 00000 n
+0001651011 00000 n
+0001651076 00000 n
+0001651141 00000 n
+0001651206 00000 n
+0001651335 00000 n
+0001651400 00000 n
+0001651465 00000 n
+0001651530 00000 n
+0001651595 00000 n
+0001651724 00000 n
+0001651916 00000 n
+0001656803 00000 n
+0001661096 00000 n
+0001656675 00000 n
+0001652045 00000 n
+0001652431 00000 n
+0001655902 00000 n
+0001655774 00000 n
+0001655645 00000 n
+0001655516 00000 n
+0001655388 00000 n
+0001656417 00000 n
+0001656288 00000 n
+0001656159 00000 n
+0001656031 00000 n
+0001652687 00000 n
+0001652559 00000 n
+0001652302 00000 n
+0001652173 00000 n
+0001638246 00000 n
+0001638416 00000 n
+0001638611 00000 n
+0001638808 00000 n
+0001639003 00000 n
+0001639233 00000 n
+0001640880 00000 n
+0001638047 00000 n
+0001634943 00000 n
+0001639463 00000 n
+0002731570 00000 n
+0001643956 00000 n
+0001644185 00000 n
+0001644415 00000 n
+0001644645 00000 n
+0001644875 00000 n
+0001645105 00000 n
+0001645334 00000 n
+0001645564 00000 n
+0001645793 00000 n
+0001646019 00000 n
+0001647859 00000 n
+0001643717 00000 n
+0001641054 00000 n
+0001646247 00000 n
+0001652751 00000 n
+0001650754 00000 n
+0001648019 00000 n
+0001650881 00000 n
+0002847120 00000 n
+0001656867 00000 n
+0001655132 00000 n
+0001652896 00000 n
+0001655259 00000 n
+0001659250 00000 n
+0001659408 00000 n
+0001659607 00000 n
+0001659781 00000 n
+0001659954 00000 n
+0001660153 00000 n
+0001660324 00000 n
+0001660494 00000 n
+0001660653 00000 n
+0001660810 00000 n
+0001664617 00000 n
+0001664780 00000 n
+0001661996 00000 n
+0001659011 00000 n
+0001656984 00000 n
+0001660967 00000 n
+0001661352 00000 n
+0001661416 00000 n
+0001661545 00000 n
+0001661674 00000 n
+0001661931 00000 n
+0001664944 00000 n
+0001665101 00000 n
+0001665298 00000 n
+0001665457 00000 n
+0001665654 00000 n
+0001665814 00000 n
+0001666011 00000 n
+0001666174 00000 n
+0001666371 00000 n
+0001666535 00000 n
+0001666732 00000 n
+0001666929 00000 n
+0001668281 00000 n
+0001664338 00000 n
+0001662184 00000 n
+0001667126 00000 n
+0001667191 00000 n
+0001667256 00000 n
+0001667385 00000 n
+0001671438 00000 n
+0001671601 00000 n
+0001671778 00000 n
+0001671959 00000 n
+0001672153 00000 n
+0001672380 00000 n
+0001672607 00000 n
+0001672834 00000 n
+0001673060 00000 n
+0001673257 00000 n
+0001673454 00000 n
+0001673653 00000 n
+0001673849 00000 n
+0001674046 00000 n
+0001674243 00000 n
+0001674440 00000 n
+0001674600 00000 n
+0001674765 00000 n
+0001674921 00000 n
+0001675116 00000 n
+0001681532 00000 n
+0001681728 00000 n
+0001676280 00000 n
+0001671099 00000 n
+0001668469 00000 n
+0001675311 00000 n
+0001675440 00000 n
+0001675505 00000 n
+0001675762 00000 n
+0001675827 00000 n
+0001675892 00000 n
+0001675957 00000 n
+0001676150 00000 n
+0001676215 00000 n
+0001696563 00000 n
+0001696434 00000 n
+0001969037 00000 n
+0001697401 00000 n
+0001697143 00000 n
+0001702020 00000 n
+0001701763 00000 n
+0001701891 00000 n
+0001697272 00000 n
+0001681925 00000 n
+0001682120 00000 n
+0001682317 00000 n
+0001682514 00000 n
+0001682711 00000 n
+0001682908 00000 n
+0001683105 00000 n
+0001683301 00000 n
+0001683498 00000 n
+0001683695 00000 n
+0001683891 00000 n
+0001684087 00000 n
+0001684283 00000 n
+0001684480 00000 n
+0001684677 00000 n
+0001684874 00000 n
+0001685071 00000 n
+0001685228 00000 n
+0001685425 00000 n
+0001685617 00000 n
+0001685814 00000 n
+0001685976 00000 n
+0001686173 00000 n
+0001686369 00000 n
+0001686565 00000 n
+0001686761 00000 n
+0001686958 00000 n
+0001687155 00000 n
+0001687352 00000 n
+0001687549 00000 n
+0001687746 00000 n
+0001687942 00000 n
+0001688139 00000 n
+0001688336 00000 n
+0001688531 00000 n
+0001688725 00000 n
+0001688922 00000 n
+0001689150 00000 n
+0001689347 00000 n
+0001689544 00000 n
+0001689741 00000 n
+0001689936 00000 n
+0001690133 00000 n
+0001690330 00000 n
+0001690527 00000 n
+0001690723 00000 n
+0001690880 00000 n
+0001691075 00000 n
+0001691234 00000 n
+0001691431 00000 n
+0001691594 00000 n
+0001691791 00000 n
+0001691988 00000 n
+0001692184 00000 n
+0001692380 00000 n
+0001692576 00000 n
+0001692770 00000 n
+0001692965 00000 n
+0001693289 00000 n
+0001680793 00000 n
+0001676454 00000 n
+0001693159 00000 n
+0001693224 00000 n
+0001697530 00000 n
+0001697659 00000 n
+0001697014 00000 n
+0001701377 00000 n
+0001697788 00000 n
+0001697916 00000 n
+0001701635 00000 n
+0001701506 00000 n
+0001696756 00000 n
+0001696885 00000 n
+0001716986 00000 n
+0001707960 00000 n
+0001716599 00000 n
+0001712075 00000 n
+0001716728 00000 n
+0001717243 00000 n
+0001720722 00000 n
+0001720851 00000 n
+0001712333 00000 n
+0001712462 00000 n
+0001713235 00000 n
+0001712591 00000 n
+0001708088 00000 n
+0001713106 00000 n
+0001712204 00000 n
+0001712719 00000 n
+0001712977 00000 n
+0001712848 00000 n
+0001706930 00000 n
+0001713364 00000 n
+0001707188 00000 n
+0001716214 00000 n
+0001707059 00000 n
+0001716086 00000 n
+0001735157 00000 n
+0001706802 00000 n
+0001735415 00000 n
+0001716472 00000 n
+0001706673 00000 n
+0001716343 00000 n
+0001707317 00000 n
+0001716857 00000 n
+0001707574 00000 n
+0001707702 00000 n
+0001707831 00000 n
+0001717115 00000 n
+0001707445 00000 n
+0001702469 00000 n
+0001702727 00000 n
+0001702855 00000 n
+0001702598 00000 n
+0001732236 00000 n
+0001702213 00000 n
+0001702340 00000 n
+0001697980 00000 n
+0001696178 00000 n
+0001693420 00000 n
+0001696305 00000 n
+0002847253 00000 n
+0001702919 00000 n
+0001701121 00000 n
+0001698153 00000 n
+0001701248 00000 n
+0001708152 00000 n
+0001706417 00000 n
+0001703078 00000 n
+0001706544 00000 n
+0001713428 00000 n
+0001711820 00000 n
+0001708297 00000 n
+0001711947 00000 n
+0001717307 00000 n
+0001715830 00000 n
+0001713573 00000 n
+0001715957 00000 n
+0001719900 00000 n
+0001720056 00000 n
+0001720224 00000 n
+0001720406 00000 n
+0001724815 00000 n
+0001721173 00000 n
+0001719721 00000 n
+0001717467 00000 n
+0001720593 00000 n
+0001721108 00000 n
+0001725010 00000 n
+0001725203 00000 n
+0001725429 00000 n
+0001725656 00000 n
+0001725881 00000 n
+0001726074 00000 n
+0001726269 00000 n
+0001726462 00000 n
+0001726657 00000 n
+0001726852 00000 n
+0001727009 00000 n
+0001727204 00000 n
+0001727398 00000 n
+0001727592 00000 n
+0001727754 00000 n
+0001727949 00000 n
+0001728144 00000 n
+0001728339 00000 n
+0001728533 00000 n
+0001728726 00000 n
+0001728920 00000 n
+0001729115 00000 n
+0001729310 00000 n
+0001729504 00000 n
+0001729699 00000 n
+0001729894 00000 n
+0001730057 00000 n
+0001730252 00000 n
+0001730447 00000 n
+0001730642 00000 n
+0001730836 00000 n
+0001731031 00000 n
+0001731226 00000 n
+0001731420 00000 n
+0001731615 00000 n
+0001732364 00000 n
+0001724316 00000 n
+0001721361 00000 n
+0001731783 00000 n
+0001731848 00000 n
+0001731913 00000 n
+0001731978 00000 n
+0001732043 00000 n
+0002847386 00000 n
+0001735285 00000 n
+0001735350 00000 n
+0001735931 00000 n
+0001736060 00000 n
+0001735802 00000 n
+0001735544 00000 n
+0001735673 00000 n
+0001741181 00000 n
+0001741310 00000 n
+0001750802 00000 n
+0001741439 00000 n
+0001740923 00000 n
+0001741567 00000 n
+0001750673 00000 n
+0001741052 00000 n
+0001750544 00000 n
+0001741696 00000 n
+0001740538 00000 n
+0001740409 00000 n
+0001740665 00000 n
+0001740794 00000 n
+0001736639 00000 n
+0001736895 00000 n
+0001736768 00000 n
+0001736510 00000 n
+0001736253 00000 n
+0001736382 00000 n
+0002731535 00000 n
+0001736959 00000 n
+0001734901 00000 n
+0001732495 00000 n
+0001735028 00000 n
+0001741760 00000 n
+0001740153 00000 n
+0001737104 00000 n
+0001740280 00000 n
+0001745490 00000 n
+0001745652 00000 n
+0001745813 00000 n
+0001746015 00000 n
+0001746216 00000 n
+0001746377 00000 n
+0001746579 00000 n
+0001746776 00000 n
+0001746974 00000 n
+0001747176 00000 n
+0001747376 00000 n
+0001747578 00000 n
+0001747746 00000 n
+0001747948 00000 n
+0001748116 00000 n
+0001748318 00000 n
+0001748519 00000 n
+0001748721 00000 n
+0001748923 00000 n
+0001749125 00000 n
+0001749324 00000 n
+0001749524 00000 n
+0001749691 00000 n
+0001749890 00000 n
+0001750054 00000 n
+0001750251 00000 n
+0001755800 00000 n
+0001756001 00000 n
+0001751319 00000 n
+0001745091 00000 n
+0001741891 00000 n
+0001750416 00000 n
+0001751059 00000 n
+0001751124 00000 n
+0001751189 00000 n
+0001751254 00000 n
+0001759464 00000 n
+0001759336 00000 n
+0001759657 00000 n
+0001759850 00000 n
+0001759979 00000 n
+0001763918 00000 n
+0001763789 00000 n
+0001760364 00000 n
+0001764819 00000 n
+0001764690 00000 n
+0001764303 00000 n
+0001764174 00000 n
+0001768745 00000 n
+0001768616 00000 n
+0001764948 00000 n
+0001756202 00000 n
+0001756403 00000 n
+0001756605 00000 n
+0001756807 00000 n
+0001757008 00000 n
+0001757209 00000 n
+0001757408 00000 n
+0001757609 00000 n
+0001757811 00000 n
+0001757973 00000 n
+0001758175 00000 n
+0001758377 00000 n
+0001758579 00000 n
+0001758738 00000 n
+0001758940 00000 n
+0001760428 00000 n
+0001755491 00000 n
+0001751479 00000 n
+0001759142 00000 n
+0001759207 00000 n
+0001760108 00000 n
+0001760236 00000 n
+0001764046 00000 n
+0001764561 00000 n
+0001764432 00000 n
+0001768487 00000 n
+0001768358 00000 n
+0001765205 00000 n
+0001765077 00000 n
+0001769325 00000 n
+0001769454 00000 n
+0001768938 00000 n
+0001769067 00000 n
+0001769196 00000 n
+0001765269 00000 n
+0001763533 00000 n
+0001760587 00000 n
+0001763660 00000 n
+0001772328 00000 n
+0001772496 00000 n
+0001769711 00000 n
+0001768102 00000 n
+0001765428 00000 n
+0001768229 00000 n
+0002847519 00000 n
+0001772664 00000 n
+0001772864 00000 n
+0001773064 00000 n
+0001773264 00000 n
+0001773464 00000 n
+0001773664 00000 n
+0001773864 00000 n
+0001774064 00000 n
+0001774264 00000 n
+0001774431 00000 n
+0001774631 00000 n
+0001774799 00000 n
+0001776351 00000 n
+0001772049 00000 n
+0001769899 00000 n
+0001774998 00000 n
+0001775063 00000 n
+0001775128 00000 n
+0001775193 00000 n
+0001775258 00000 n
+0001775387 00000 n
+0001775516 00000 n
+0001775645 00000 n
+0001775773 00000 n
+0001775902 00000 n
+0001776031 00000 n
+0001784857 00000 n
+0001784728 00000 n
+0001780410 00000 n
+0001780610 00000 n
+0001780810 00000 n
+0001781014 00000 n
+0001781218 00000 n
+0001781418 00000 n
+0001781622 00000 n
+0001781790 00000 n
+0001781994 00000 n
+0001782198 00000 n
+0001782402 00000 n
+0001782605 00000 n
+0001782808 00000 n
+0001783011 00000 n
+0001783209 00000 n
+0001783376 00000 n
+0001783580 00000 n
+0001783784 00000 n
+0001783988 00000 n
+0001784192 00000 n
+0001784395 00000 n
+0001785822 00000 n
+0001780061 00000 n
+0001776482 00000 n
+0001784599 00000 n
+0001785114 00000 n
+0001785243 00000 n
+0001785372 00000 n
+0001785501 00000 n
+0001785630 00000 n
+0001785758 00000 n
+0001790180 00000 n
+0001788893 00000 n
+0001789022 00000 n
+0001789537 00000 n
+0001788766 00000 n
+0001789408 00000 n
+0001790051 00000 n
+0001789923 00000 n
+0001789794 00000 n
+0001789666 00000 n
+0001789279 00000 n
+0001789151 00000 n
+0001790371 00000 n
+0001788511 00000 n
+0001785982 00000 n
+0001788638 00000 n
+0001792872 00000 n
+0001793074 00000 n
+0001793276 00000 n
+0001793478 00000 n
+0001793680 00000 n
+0001793881 00000 n
+0001794081 00000 n
+0001794283 00000 n
+0001794482 00000 n
+0001794650 00000 n
+0001794852 00000 n
+0001795054 00000 n
+0001795255 00000 n
+0001796680 00000 n
+0001792603 00000 n
+0001790530 00000 n
+0001795457 00000 n
+0001795586 00000 n
+0001795651 00000 n
+0001795716 00000 n
+0001795845 00000 n
+0001795974 00000 n
+0001796102 00000 n
+0001796231 00000 n
+0001796423 00000 n
+0001796552 00000 n
+0001812502 00000 n
+0001812117 00000 n
+0001812631 00000 n
+0001812374 00000 n
+0001812245 00000 n
+0001801868 00000 n
+0001802070 00000 n
+0001802272 00000 n
+0001802474 00000 n
+0001802676 00000 n
+0001802865 00000 n
+0001803066 00000 n
+0001803255 00000 n
+0001803457 00000 n
+0001803646 00000 n
+0001803847 00000 n
+0001804036 00000 n
+0001804238 00000 n
+0001804427 00000 n
+0001804629 00000 n
+0001804818 00000 n
+0001805020 00000 n
+0001805209 00000 n
+0001805411 00000 n
+0001805600 00000 n
+0001805802 00000 n
+0001805991 00000 n
+0001806193 00000 n
+0001806381 00000 n
+0001806583 00000 n
+0001806772 00000 n
+0001806973 00000 n
+0001807161 00000 n
+0001807331 00000 n
+0001807532 00000 n
+0001807720 00000 n
+0001807890 00000 n
+0001808090 00000 n
+0001808276 00000 n
+0001808445 00000 n
+0001808646 00000 n
+0001808834 00000 n
+0001809004 00000 n
+0001809205 00000 n
+0001809393 00000 n
+0001809563 00000 n
+0001809764 00000 n
+0001809952 00000 n
+0001810128 00000 n
+0001810330 00000 n
+0001810519 00000 n
+0001810871 00000 n
+0001811070 00000 n
+0001811256 00000 n
+0001811429 00000 n
+0001811628 00000 n
+0001811814 00000 n
+0001818729 00000 n
+0001818930 00000 n
+0001819118 00000 n
+0001819294 00000 n
+0001819496 00000 n
+0001819685 00000 n
+0001819887 00000 n
+0001812952 00000 n
+0001801199 00000 n
+0001796840 00000 n
+0001811988 00000 n
+0001812887 00000 n
+0001810696 00000 n
+0001840506 00000 n
+0001839219 00000 n
+0001839863 00000 n
+0001844607 00000 n
+0001839477 00000 n
+0001845121 00000 n
+0001839606 00000 n
+0001839991 00000 n
+0001840633 00000 n
+0001839348 00000 n
+0001844994 00000 n
+0001839735 00000 n
+0001845250 00000 n
+0001840120 00000 n
+0001840249 00000 n
+0001835282 00000 n
+0001844736 00000 n
+0001845637 00000 n
+0001845379 00000 n
+0001840377 00000 n
+0001839092 00000 n
+0001844865 00000 n
+0001845766 00000 n
+0001820076 00000 n
+0001820278 00000 n
+0001820467 00000 n
+0001820669 00000 n
+0001820858 00000 n
+0001821060 00000 n
+0001821249 00000 n
+0001821450 00000 n
+0001821638 00000 n
+0001821840 00000 n
+0001822029 00000 n
+0001822231 00000 n
+0001822419 00000 n
+0001822620 00000 n
+0001822809 00000 n
+0001823011 00000 n
+0001823200 00000 n
+0001823402 00000 n
+0001823591 00000 n
+0001823791 00000 n
+0001823979 00000 n
+0001824181 00000 n
+0001824370 00000 n
+0001824731 00000 n
+0001824933 00000 n
+0001825122 00000 n
+0001825483 00000 n
+0001825684 00000 n
+0001825873 00000 n
+0001826054 00000 n
+0001826256 00000 n
+0001826445 00000 n
+0001826626 00000 n
+0001826828 00000 n
+0001827016 00000 n
+0001827217 00000 n
+0001827404 00000 n
+0001827764 00000 n
+0001827965 00000 n
+0001828154 00000 n
+0001828514 00000 n
+0001828715 00000 n
+0001828904 00000 n
+0001830227 00000 n
+0001818040 00000 n
+0001813126 00000 n
+0001829265 00000 n
+0001824551 00000 n
+0001825303 00000 n
+0001827584 00000 n
+0001828334 00000 n
+0001829085 00000 n
+0001829394 00000 n
+0001829523 00000 n
+0001829650 00000 n
+0001829779 00000 n
+0001829908 00000 n
+0001830037 00000 n
+0001830163 00000 n
+0002847652 00000 n
+0001845508 00000 n
+0001835026 00000 n
+0001833737 00000 n
+0001834897 00000 n
+0001833608 00000 n
+0001834124 00000 n
+0001834382 00000 n
+0001834768 00000 n
+0001834639 00000 n
+0001834511 00000 n
+0001834253 00000 n
+0001833995 00000 n
+0001833866 00000 n
+0001835155 00000 n
+0001835346 00000 n
+0001833352 00000 n
+0001830372 00000 n
+0001833479 00000 n
+0001840697 00000 n
+0001838837 00000 n
+0001835491 00000 n
+0001838964 00000 n
+0001851151 00000 n
+0001846023 00000 n
+0001844351 00000 n
+0001840856 00000 n
+0001844478 00000 n
+0001851355 00000 n
+0001851559 00000 n
+0001851763 00000 n
+0001851966 00000 n
+0001852168 00000 n
+0001852372 00000 n
+0001852576 00000 n
+0001852780 00000 n
+0001852984 00000 n
+0001853187 00000 n
+0001853391 00000 n
+0001853595 00000 n
+0001853798 00000 n
+0001854001 00000 n
+0001854205 00000 n
+0001854408 00000 n
+0001854612 00000 n
+0001854814 00000 n
+0001855018 00000 n
+0001855222 00000 n
+0001855426 00000 n
+0001855629 00000 n
+0001855833 00000 n
+0001856037 00000 n
+0001856240 00000 n
+0001856444 00000 n
+0001856648 00000 n
+0001856851 00000 n
+0001857054 00000 n
+0001857258 00000 n
+0001857462 00000 n
+0001857666 00000 n
+0001857870 00000 n
+0001858073 00000 n
+0001858277 00000 n
+0001858481 00000 n
+0001858685 00000 n
+0001858888 00000 n
+0001859092 00000 n
+0001859296 00000 n
+0001859500 00000 n
+0001859704 00000 n
+0001859908 00000 n
+0001860112 00000 n
+0001860316 00000 n
+0001860505 00000 n
+0001860708 00000 n
+0001860897 00000 n
+0001861100 00000 n
+0001861288 00000 n
+0001861492 00000 n
+0001861681 00000 n
+0001861885 00000 n
+0001862074 00000 n
+0001862277 00000 n
+0001862465 00000 n
+0001862667 00000 n
+0001862854 00000 n
+0001863056 00000 n
+0001870198 00000 n
+0001870401 00000 n
+0001870589 00000 n
+0001870792 00000 n
+0001870980 00000 n
+0001871150 00000 n
+0001871354 00000 n
+0001871543 00000 n
+0001871714 00000 n
+0001871917 00000 n
+0001872104 00000 n
+0001872274 00000 n
+0001872478 00000 n
+0001872667 00000 n
+0001863372 00000 n
+0001850412 00000 n
+0001846211 00000 n
+0001863242 00000 n
+0001863307 00000 n
+0001910345 00000 n
+0001901253 00000 n
+0001905584 00000 n
+0001906742 00000 n
+0001901638 00000 n
+0001911502 00000 n
+0001905070 00000 n
+0001905713 00000 n
+0001910474 00000 n
+0001901382 00000 n
+0001911246 00000 n
+0001905328 00000 n
+0001911760 00000 n
+0001905971 00000 n
+0001906228 00000 n
+0001900738 00000 n
+0001910732 00000 n
+0001916904 00000 n
+0001912017 00000 n
+0001906486 00000 n
+0001900995 00000 n
+0001910988 00000 n
+0001917162 00000 n
+0001916646 00000 n
+0001899966 00000 n
+0001891337 00000 n
+0001900094 00000 n
+0001891466 00000 n
+0001895363 00000 n
+0001890821 00000 n
+0001896008 00000 n
+0001896651 00000 n
+0001896395 00000 n
+0001895879 00000 n
+0001891079 00000 n
+0001895621 00000 n
+0001886565 00000 n
+0001886823 00000 n
+0001894848 00000 n
+0001890048 00000 n
+0001890434 00000 n
+0001894977 00000 n
+0001900480 00000 n
+0001890177 00000 n
+0001911631 00000 n
+0001905199 00000 n
+0001905842 00000 n
+0001910603 00000 n
+0001901510 00000 n
+0001911374 00000 n
+0001905457 00000 n
+0001911889 00000 n
+0001872838 00000 n
+0001873042 00000 n
+0001873231 00000 n
+0001873402 00000 n
+0001873606 00000 n
+0001873795 00000 n
+0001873972 00000 n
+0001874176 00000 n
+0001874365 00000 n
+0001874717 00000 n
+0001874921 00000 n
+0001875110 00000 n
+0001875286 00000 n
+0001875490 00000 n
+0001875679 00000 n
+0001875856 00000 n
+0001876060 00000 n
+0001876249 00000 n
+0001876426 00000 n
+0001876630 00000 n
+0001876819 00000 n
+0001877023 00000 n
+0001877212 00000 n
+0001877416 00000 n
+0001877605 00000 n
+0001877809 00000 n
+0001877998 00000 n
+0001878202 00000 n
+0001878391 00000 n
+0001878595 00000 n
+0001878784 00000 n
+0001878988 00000 n
+0001879177 00000 n
+0001879381 00000 n
+0001879569 00000 n
+0001879771 00000 n
+0001879959 00000 n
+0001880163 00000 n
+0001880352 00000 n
+0001880555 00000 n
+0001880743 00000 n
+0001880945 00000 n
+0001881133 00000 n
+0001881337 00000 n
+0001881526 00000 n
+0001881886 00000 n
+0001882090 00000 n
+0001882279 00000 n
+0001882639 00000 n
+0001882842 00000 n
+0001883031 00000 n
+0001883212 00000 n
+0001883416 00000 n
+0001883605 00000 n
+0001883786 00000 n
+0001883990 00000 n
+0001884178 00000 n
+0001884382 00000 n
+0001884570 00000 n
+0001884931 00000 n
+0001885134 00000 n
+0001885323 00000 n
+0001885683 00000 n
+0001885886 00000 n
+0001886075 00000 n
+0001887015 00000 n
+0001869209 00000 n
+0001863503 00000 n
+0001886436 00000 n
+0001874542 00000 n
+0001881707 00000 n
+0001882460 00000 n
+0001884751 00000 n
+0001885503 00000 n
+0001886256 00000 n
+0001886694 00000 n
+0001886951 00000 n
+0001906099 00000 n
+0001906357 00000 n
+0001900867 00000 n
+0001910860 00000 n
+0001917033 00000 n
+0001916517 00000 n
+0001906614 00000 n
+0001901124 00000 n
+0001911117 00000 n
+0001917290 00000 n
+0001916775 00000 n
+0001900351 00000 n
+0001891722 00000 n
+0001900222 00000 n
+0001891595 00000 n
+0001895492 00000 n
+0001890950 00000 n
+0001896137 00000 n
+0001899837 00000 n
+0001896523 00000 n
+0001896266 00000 n
+0001891208 00000 n
+0001895750 00000 n
+0001895234 00000 n
+0001890692 00000 n
+0001890563 00000 n
+0001895105 00000 n
+0001900609 00000 n
+0001890305 00000 n
+0001891786 00000 n
+0001889792 00000 n
+0001887160 00000 n
+0001889919 00000 n
+0002847785 00000 n
+0001896715 00000 n
+0001894592 00000 n
+0001891931 00000 n
+0001894719 00000 n
+0001901702 00000 n
+0001899581 00000 n
+0001896860 00000 n
+0001899708 00000 n
+0001906806 00000 n
+0001904815 00000 n
+0001901847 00000 n
+0001904942 00000 n
+0001912081 00000 n
+0001910090 00000 n
+0001906965 00000 n
+0001910217 00000 n
+0001914872 00000 n
+0001915033 00000 n
+0001915228 00000 n
+0001915424 00000 n
+0001915620 00000 n
+0001915816 00000 n
+0001916009 00000 n
+0001916197 00000 n
+0001921159 00000 n
+0001917804 00000 n
+0001914653 00000 n
+0001912240 00000 n
+0001916388 00000 n
+0001917547 00000 n
+0001917612 00000 n
+0001917677 00000 n
+0001921319 00000 n
+0001921514 00000 n
+0001921710 00000 n
+0001921906 00000 n
+0001922102 00000 n
+0001922300 00000 n
+0001922498 00000 n
+0001922695 00000 n
+0001922893 00000 n
+0001923090 00000 n
+0001923288 00000 n
+0001923486 00000 n
+0001923683 00000 n
+0001923880 00000 n
+0001924077 00000 n
+0001924273 00000 n
+0001924470 00000 n
+0001924665 00000 n
+0001924863 00000 n
+0001925061 00000 n
+0001925259 00000 n
+0001925457 00000 n
+0001925655 00000 n
+0001925853 00000 n
+0001926050 00000 n
+0001926248 00000 n
+0001926446 00000 n
+0001926644 00000 n
+0001926841 00000 n
+0001927038 00000 n
+0001927236 00000 n
+0001927434 00000 n
+0001927632 00000 n
+0001927828 00000 n
+0001928025 00000 n
+0001928223 00000 n
+0001928419 00000 n
+0001928615 00000 n
+0001932472 00000 n
+0001932669 00000 n
+0001932867 00000 n
+0001933064 00000 n
+0001929263 00000 n
+0001920630 00000 n
+0001917978 00000 n
+0001928811 00000 n
+0001928940 00000 n
+0001929005 00000 n
+0001929198 00000 n
+0002847918 00000 n
+0001943983 00000 n
+0001942694 00000 n
+0001942952 00000 n
+0001943468 00000 n
+0001940523 00000 n
+0001943854 00000 n
+0001942823 00000 n
+0001944112 00000 n
+0001943081 00000 n
+0001943210 00000 n
+0001940267 00000 n
+0001943597 00000 n
+0001944497 00000 n
+0001944241 00000 n
+0001943339 00000 n
+0001940396 00000 n
+0001943726 00000 n
+0001949078 00000 n
+0001944370 00000 n
+0001939880 00000 n
+0001936486 00000 n
+0001940009 00000 n
+0001938720 00000 n
+0001939107 00000 n
+0001936229 00000 n
+0001939494 00000 n
+0001939752 00000 n
+0001939623 00000 n
+0001939365 00000 n
+0001936358 00000 n
+0001939236 00000 n
+0001935584 00000 n
+0001935713 00000 n
+0001938849 00000 n
+0001933262 00000 n
+0001933460 00000 n
+0001933657 00000 n
+0001933855 00000 n
+0001934026 00000 n
+0001934223 00000 n
+0001934421 00000 n
+0001934580 00000 n
+0001934778 00000 n
+0001934936 00000 n
+0001936550 00000 n
+0001932193 00000 n
+0001929409 00000 n
+0001935133 00000 n
+0001935198 00000 n
+0001935327 00000 n
+0001935456 00000 n
+0001935842 00000 n
+0001935971 00000 n
+0001936100 00000 n
+0001938978 00000 n
+0001940138 00000 n
+0001949527 00000 n
+0001949655 00000 n
+0001949270 00000 n
+0001949399 00000 n
+0001940587 00000 n
+0001938464 00000 n
+0001936695 00000 n
+0001938591 00000 n
+0001944561 00000 n
+0001942438 00000 n
+0001940718 00000 n
+0001942565 00000 n
+0001947102 00000 n
+0001947297 00000 n
+0001947458 00000 n
+0001947628 00000 n
+0001947788 00000 n
+0001947960 00000 n
+0001948119 00000 n
+0001948279 00000 n
+0001948450 00000 n
+0001948608 00000 n
+0001948778 00000 n
+0001952921 00000 n
+0001953117 00000 n
+0001953313 00000 n
+0001949977 00000 n
+0001946853 00000 n
+0001944692 00000 n
+0001948949 00000 n
+0001949912 00000 n
+0001953504 00000 n
+0001953700 00000 n
+0001953896 00000 n
+0001954092 00000 n
+0001954287 00000 n
+0001954483 00000 n
+0001954642 00000 n
+0001954838 00000 n
+0001954997 00000 n
+0001955193 00000 n
+0001955350 00000 n
+0001955544 00000 n
+0001957130 00000 n
+0001952632 00000 n
+0001950165 00000 n
+0001955713 00000 n
+0001955778 00000 n
+0001955843 00000 n
+0001955908 00000 n
+0001956101 00000 n
+0001956230 00000 n
+0001956358 00000 n
+0001956487 00000 n
+0001956616 00000 n
+0001956745 00000 n
+0001956938 00000 n
+0001957066 00000 n
+0001964052 00000 n
+0001964181 00000 n
+0001964309 00000 n
+0002731500 00000 n
+0001960371 00000 n
+0001960570 00000 n
+0001960769 00000 n
+0001960967 00000 n
+0001961166 00000 n
+0001961365 00000 n
+0001961563 00000 n
+0001961762 00000 n
+0001961961 00000 n
+0001962160 00000 n
+0001962359 00000 n
+0001962558 00000 n
+0001962757 00000 n
+0001962956 00000 n
+0001963154 00000 n
+0001963312 00000 n
+0001963509 00000 n
+0001963664 00000 n
+0001964761 00000 n
+0001960052 00000 n
+0001957275 00000 n
+0001963859 00000 n
+0001964566 00000 n
+0001964631 00000 n
+0001964696 00000 n
+0002848051 00000 n
+0001967622 00000 n
+0001967814 00000 n
+0001968200 00000 n
+0001967942 00000 n
+0001968071 00000 n
+0001969295 00000 n
+0001968522 00000 n
+0001972561 00000 n
+0001972690 00000 n
+0001968909 00000 n
+0001968651 00000 n
+0001968780 00000 n
+0001972433 00000 n
+0001968393 00000 n
+0001969359 00000 n
+0001967366 00000 n
+0001964935 00000 n
+0001967493 00000 n
+0001971784 00000 n
+0001971950 00000 n
+0001972110 00000 n
+0001976088 00000 n
+0001976285 00000 n
+0001976481 00000 n
+0001973076 00000 n
+0001971615 00000 n
+0001969504 00000 n
+0001972304 00000 n
+0001972947 00000 n
+0001973012 00000 n
+0001977276 00000 n
+0001976678 00000 n
+0001976883 00000 n
+0001981116 00000 n
+0001981309 00000 n
+0001978497 00000 n
+0001975899 00000 n
+0001973264 00000 n
+0001977086 00000 n
+0001977151 00000 n
+0001977469 00000 n
+0001977596 00000 n
+0001977725 00000 n
+0001977982 00000 n
+0001978111 00000 n
+0001978240 00000 n
+0001981505 00000 n
+0001981701 00000 n
+0001981897 00000 n
+0001982092 00000 n
+0001983448 00000 n
+0001980917 00000 n
+0001978671 00000 n
+0001982288 00000 n
+0001982353 00000 n
+0001982418 00000 n
+0001982547 00000 n
+0001982676 00000 n
+0001982805 00000 n
+0001982934 00000 n
+0001983063 00000 n
+0001983256 00000 n
+0001985727 00000 n
+0001985929 00000 n
+0001986135 00000 n
+0001986333 00000 n
+0001986531 00000 n
+0001986726 00000 n
+0001986923 00000 n
+0001987118 00000 n
+0001992586 00000 n
+0001988276 00000 n
+0001985508 00000 n
+0001983579 00000 n
+0001987314 00000 n
+0001987443 00000 n
+0001987572 00000 n
+0001987829 00000 n
+0001987958 00000 n
+0001988215 00000 n
+0002002109 00000 n
+0002001980 00000 n
+0002002238 00000 n
+0001992784 00000 n
+0001992981 00000 n
+0001993177 00000 n
+0001993405 00000 n
+0001993634 00000 n
+0001993863 00000 n
+0001994092 00000 n
+0001994320 00000 n
+0001994548 00000 n
+0001994777 00000 n
+0001995005 00000 n
+0001995233 00000 n
+0001995462 00000 n
+0001995691 00000 n
+0001995919 00000 n
+0001996147 00000 n
+0001996375 00000 n
+0001996604 00000 n
+0001996832 00000 n
+0001997060 00000 n
+0001997289 00000 n
+0001997517 00000 n
+0001997746 00000 n
+0001997973 00000 n
+0001998201 00000 n
+0001998429 00000 n
+0001998657 00000 n
+0001998885 00000 n
+0001999114 00000 n
+0001999343 00000 n
+0001999572 00000 n
+0001999799 00000 n
+0002000027 00000 n
+0002000255 00000 n
+0002000711 00000 n
+0002000939 00000 n
+0002001168 00000 n
+0002001397 00000 n
+0002001590 00000 n
+0002002942 00000 n
+0001992037 00000 n
+0001988436 00000 n
+0002001786 00000 n
+0002001851 00000 n
+0002002557 00000 n
+0002002813 00000 n
+0002000483 00000 n
+0002002878 00000 n
+0002848184 00000 n
+0002005569 00000 n
+0002005696 00000 n
+0002005761 00000 n
+0002005825 00000 n
+0002005890 00000 n
+0002005955 00000 n
+0002006020 00000 n
+0002006085 00000 n
+0002006150 00000 n
+0002006214 00000 n
+0002006279 00000 n
+0002006344 00000 n
+0002006409 00000 n
+0002006474 00000 n
+0002006539 00000 n
+0002006603 00000 n
+0002006668 00000 n
+0002006733 00000 n
+0002006798 00000 n
+0002006863 00000 n
+0002006928 00000 n
+0002006993 00000 n
+0002007058 00000 n
+0002007123 00000 n
+0002007188 00000 n
+0002007253 00000 n
+0002007318 00000 n
+0002007383 00000 n
+0002007448 00000 n
+0002007513 00000 n
+0002007578 00000 n
+0002007643 00000 n
+0002007708 00000 n
+0002007773 00000 n
+0002007838 00000 n
+0002007903 00000 n
+0002008032 00000 n
+0002008223 00000 n
+0002005313 00000 n
+0002003101 00000 n
+0002005440 00000 n
+0002011457 00000 n
+0002011654 00000 n
+0002011850 00000 n
+0002012047 00000 n
+0002012243 00000 n
+0002012402 00000 n
+0002012569 00000 n
+0002012763 00000 n
+0002012958 00000 n
+0002013153 00000 n
+0002013347 00000 n
+0002013540 00000 n
+0002018081 00000 n
+0002018276 00000 n
+0002014760 00000 n
+0002011198 00000 n
+0002008354 00000 n
+0002013729 00000 n
+0002013858 00000 n
+0002013987 00000 n
+0002014116 00000 n
+0002014245 00000 n
+0002014374 00000 n
+0002014631 00000 n
+0002014695 00000 n
+0002020670 00000 n
+0002020799 00000 n
+0002020541 00000 n
+0002020928 00000 n
+0002020283 00000 n
+0002020154 00000 n
+0002018471 00000 n
+0002018665 00000 n
+0002018860 00000 n
+0002019054 00000 n
+0002019249 00000 n
+0002019444 00000 n
+0002021056 00000 n
+0002017862 00000 n
+0002014934 00000 n
+0002019638 00000 n
+0002019703 00000 n
+0002019768 00000 n
+0002019897 00000 n
+0002020025 00000 n
+0002020412 00000 n
+0002027267 00000 n
+0002027716 00000 n
+0002027588 00000 n
+0002027459 00000 n
+0002027845 00000 n
+0002024321 00000 n
+0002024513 00000 n
+0002024706 00000 n
+0002024898 00000 n
+0002025091 00000 n
+0002025284 00000 n
+0002025477 00000 n
+0002025649 00000 n
+0002025842 00000 n
+0002026035 00000 n
+0002026206 00000 n
+0002026398 00000 n
+0002026590 00000 n
+0002026759 00000 n
+0002026950 00000 n
+0002028296 00000 n
+0002024032 00000 n
+0002021201 00000 n
+0002027138 00000 n
+0002028101 00000 n
+0002028166 00000 n
+0002028231 00000 n
+0002030832 00000 n
+0002030961 00000 n
+0002031154 00000 n
+0002031281 00000 n
+0002031409 00000 n
+0002031538 00000 n
+0002031860 00000 n
+0002031731 00000 n
+0002032118 00000 n
+0002031989 00000 n
+0002036619 00000 n
+0002032246 00000 n
+0002030319 00000 n
+0002030511 00000 n
+0002034855 00000 n
+0002032310 00000 n
+0002030160 00000 n
+0002028470 00000 n
+0002030703 00000 n
+0002035047 00000 n
+0002035237 00000 n
+0002035409 00000 n
+0002035600 00000 n
+0002035772 00000 n
+0002035963 00000 n
+0002036134 00000 n
+0002036325 00000 n
+0002040867 00000 n
+0002037840 00000 n
+0002034626 00000 n
+0002032498 00000 n
+0002036490 00000 n
+0002036876 00000 n
+0002036941 00000 n
+0002037070 00000 n
+0002037262 00000 n
+0002037390 00000 n
+0002037519 00000 n
+0002037776 00000 n
+0002848317 00000 n
+0002041058 00000 n
+0002041249 00000 n
+0002041440 00000 n
+0002041631 00000 n
+0002041798 00000 n
+0002041988 00000 n
+0002042179 00000 n
+0002042370 00000 n
+0002042560 00000 n
+0002042751 00000 n
+0002042975 00000 n
+0002043199 00000 n
+0002043422 00000 n
+0002043612 00000 n
+0002043835 00000 n
+0002044057 00000 n
+0002044246 00000 n
+0002044412 00000 n
+0002044601 00000 n
+0002044792 00000 n
+0002044960 00000 n
+0002045341 00000 n
+0002045532 00000 n
+0002045723 00000 n
+0002046057 00000 n
+0002046247 00000 n
+0002046438 00000 n
+0002046606 00000 n
+0002046797 00000 n
+0002046958 00000 n
+0002047126 00000 n
+0002051323 00000 n
+0002048518 00000 n
+0002040388 00000 n
+0002038042 00000 n
+0002047292 00000 n
+0002047357 00000 n
+0002047422 00000 n
+0002047487 00000 n
+0002047552 00000 n
+0002045151 00000 n
+0002045891 00000 n
+0002047681 00000 n
+0002047810 00000 n
+0002048132 00000 n
+0002048262 00000 n
+0002052508 00000 n
+0002052831 00000 n
+0002052637 00000 n
+0002052702 00000 n
+0002052767 00000 n
+0002052959 00000 n
+0002053024 00000 n
+0002053282 00000 n
+0002058225 00000 n
+0002058097 00000 n
+0002053153 00000 n
+0002051491 00000 n
+0002051648 00000 n
+0002051838 00000 n
+0002052028 00000 n
+0002052218 00000 n
+0002053346 00000 n
+0002051124 00000 n
+0002048649 00000 n
+0002052379 00000 n
+0002057135 00000 n
+0002057325 00000 n
+0002057485 00000 n
+0002057647 00000 n
+0002057808 00000 n
+0002058289 00000 n
+0002056946 00000 n
+0002053536 00000 n
+0002057968 00000 n
+0002061949 00000 n
+0002062138 00000 n
+0002062300 00000 n
+0002062459 00000 n
+0002062649 00000 n
+0002062839 00000 n
+0002063029 00000 n
+0002063220 00000 n
+0002063411 00000 n
+0002063602 00000 n
+0002063793 00000 n
+0002063984 00000 n
+0002064175 00000 n
+0002064365 00000 n
+0002064556 00000 n
+0002064746 00000 n
+0002064937 00000 n
+0002065128 00000 n
+0002065296 00000 n
+0002065676 00000 n
+0002065865 00000 n
+0002066031 00000 n
+0002066220 00000 n
+0002066386 00000 n
+0002069984 00000 n
+0002070174 00000 n
+0002070341 00000 n
+0002070531 00000 n
+0002070722 00000 n
+0002070890 00000 n
+0002071081 00000 n
+0002071271 00000 n
+0002071438 00000 n
+0002066962 00000 n
+0002061560 00000 n
+0002058479 00000 n
+0002066575 00000 n
+0002066832 00000 n
+0002066897 00000 n
+0002065487 00000 n
+0002075894 00000 n
+0002076152 00000 n
+0002076408 00000 n
+0002076280 00000 n
+0002076023 00000 n
+0002080215 00000 n
+0002080473 00000 n
+0002080601 00000 n
+0002080344 00000 n
+0002076858 00000 n
+0002079314 00000 n
+0002076730 00000 n
+0002071628 00000 n
+0002071819 00000 n
+0002071987 00000 n
+0002072368 00000 n
+0002072558 00000 n
+0002072725 00000 n
+0002073105 00000 n
+0002073296 00000 n
+0002073486 00000 n
+0002073821 00000 n
+0002074012 00000 n
+0002074203 00000 n
+0002074371 00000 n
+0002074752 00000 n
+0002074942 00000 n
+0002075130 00000 n
+0002075321 00000 n
+0002075510 00000 n
+0002076922 00000 n
+0002069535 00000 n
+0002067152 00000 n
+0002075700 00000 n
+0002072178 00000 n
+0002072915 00000 n
+0002073654 00000 n
+0002074562 00000 n
+0002075765 00000 n
+0002076601 00000 n
+0002080086 00000 n
+0002079957 00000 n
+0002079572 00000 n
+0002079830 00000 n
+0002079701 00000 n
+0002079443 00000 n
+0002082324 00000 n
+0002082453 00000 n
+0002082581 00000 n
+0002080665 00000 n
+0002079058 00000 n
+0002077081 00000 n
+0002079185 00000 n
+0002848450 00000 n
+0002082710 00000 n
+0002082005 00000 n
+0002080824 00000 n
+0002082132 00000 n
+0002086597 00000 n
+0002086748 00000 n
+0002086899 00000 n
+0002087051 00000 n
+0002087202 00000 n
+0002087354 00000 n
+0002087506 00000 n
+0002087657 00000 n
+0002087807 00000 n
+0002087960 00000 n
+0002088113 00000 n
+0002088266 00000 n
+0002088419 00000 n
+0002088572 00000 n
+0002088724 00000 n
+0002088877 00000 n
+0002089030 00000 n
+0002089183 00000 n
+0002089336 00000 n
+0002089489 00000 n
+0002089642 00000 n
+0002089795 00000 n
+0002089948 00000 n
+0002090101 00000 n
+0002090254 00000 n
+0002090407 00000 n
+0002090560 00000 n
+0002090713 00000 n
+0002090866 00000 n
+0002091019 00000 n
+0002091170 00000 n
+0002091321 00000 n
+0002091474 00000 n
+0002091626 00000 n
+0002091779 00000 n
+0002091931 00000 n
+0002092083 00000 n
+0002092235 00000 n
+0002092386 00000 n
+0002092537 00000 n
+0002092689 00000 n
+0002092841 00000 n
+0002092994 00000 n
+0002093147 00000 n
+0002093300 00000 n
+0002093453 00000 n
+0002093605 00000 n
+0002093757 00000 n
+0002093908 00000 n
+0002094059 00000 n
+0002094211 00000 n
+0002094363 00000 n
+0002094515 00000 n
+0002094667 00000 n
+0002094819 00000 n
+0002094971 00000 n
+0002095123 00000 n
+0002095275 00000 n
+0002095427 00000 n
+0002095579 00000 n
+0002095731 00000 n
+0002095883 00000 n
+0002096034 00000 n
+0002096186 00000 n
+0002096336 00000 n
+0002101606 00000 n
+0002096611 00000 n
+0002085808 00000 n
+0002082855 00000 n
+0002096482 00000 n
+0002101759 00000 n
+0002101912 00000 n
+0002102065 00000 n
+0002102218 00000 n
+0002102371 00000 n
+0002102524 00000 n
+0002102676 00000 n
+0002102829 00000 n
+0002102982 00000 n
+0002103135 00000 n
+0002103287 00000 n
+0002103439 00000 n
+0002103591 00000 n
+0002103744 00000 n
+0002103896 00000 n
+0002104049 00000 n
+0002104202 00000 n
+0002104355 00000 n
+0002104507 00000 n
+0002104660 00000 n
+0002104813 00000 n
+0002104966 00000 n
+0002105118 00000 n
+0002105271 00000 n
+0002105424 00000 n
+0002105577 00000 n
+0002105729 00000 n
+0002105882 00000 n
+0002106035 00000 n
+0002106188 00000 n
+0002106341 00000 n
+0002106491 00000 n
+0002106638 00000 n
+0002106790 00000 n
+0002106941 00000 n
+0002107093 00000 n
+0002107246 00000 n
+0002107399 00000 n
+0002107552 00000 n
+0002107704 00000 n
+0002107857 00000 n
+0002108010 00000 n
+0002108162 00000 n
+0002108315 00000 n
+0002108467 00000 n
+0002108620 00000 n
+0002108773 00000 n
+0002108926 00000 n
+0002109078 00000 n
+0002109231 00000 n
+0002109383 00000 n
+0002109536 00000 n
+0002109688 00000 n
+0002109841 00000 n
+0002109994 00000 n
+0002110146 00000 n
+0002110298 00000 n
+0002110451 00000 n
+0002110603 00000 n
+0002110755 00000 n
+0002110908 00000 n
+0002111061 00000 n
+0002111214 00000 n
+0002111366 00000 n
+0002111519 00000 n
+0002111671 00000 n
+0002111823 00000 n
+0002111974 00000 n
+0002115984 00000 n
+0002112189 00000 n
+0002100777 00000 n
+0002096714 00000 n
+0002112124 00000 n
+0002116137 00000 n
+0002116290 00000 n
+0002116443 00000 n
+0002116596 00000 n
+0002116749 00000 n
+0002116902 00000 n
+0002117055 00000 n
+0002117205 00000 n
+0002117357 00000 n
+0002117510 00000 n
+0002117663 00000 n
+0002117816 00000 n
+0002117969 00000 n
+0002118122 00000 n
+0002118275 00000 n
+0002118428 00000 n
+0002118581 00000 n
+0002118734 00000 n
+0002118887 00000 n
+0002119039 00000 n
+0002119192 00000 n
+0002119345 00000 n
+0002119498 00000 n
+0002119651 00000 n
+0002119804 00000 n
+0002119956 00000 n
+0002120108 00000 n
+0002120260 00000 n
+0002120412 00000 n
+0002120563 00000 n
+0002120716 00000 n
+0002120868 00000 n
+0002121019 00000 n
+0002121168 00000 n
+0002121319 00000 n
+0002121471 00000 n
+0002121623 00000 n
+0002121774 00000 n
+0002121926 00000 n
+0002122077 00000 n
+0002122228 00000 n
+0002122380 00000 n
+0002122532 00000 n
+0002122683 00000 n
+0002122834 00000 n
+0002122985 00000 n
+0002123137 00000 n
+0002123289 00000 n
+0002123439 00000 n
+0002123591 00000 n
+0002123743 00000 n
+0002123895 00000 n
+0002124047 00000 n
+0002124198 00000 n
+0002124349 00000 n
+0002124501 00000 n
+0002124652 00000 n
+0002124804 00000 n
+0002124957 00000 n
+0002125109 00000 n
+0002125261 00000 n
+0002125413 00000 n
+0002125564 00000 n
+0002125716 00000 n
+0002125869 00000 n
+0002126022 00000 n
+0002126174 00000 n
+0002126327 00000 n
+0002126478 00000 n
+0002126629 00000 n
+0002126779 00000 n
+0002130945 00000 n
+0002126994 00000 n
+0002115125 00000 n
+0002112292 00000 n
+0002126929 00000 n
+0002131097 00000 n
+0002131248 00000 n
+0002131400 00000 n
+0002131552 00000 n
+0002131704 00000 n
+0002131856 00000 n
+0002132007 00000 n
+0002132160 00000 n
+0002132313 00000 n
+0002132466 00000 n
+0002132619 00000 n
+0002132770 00000 n
+0002132922 00000 n
+0002133074 00000 n
+0002133226 00000 n
+0002133378 00000 n
+0002133530 00000 n
+0002133682 00000 n
+0002133834 00000 n
+0002133987 00000 n
+0002134139 00000 n
+0002134291 00000 n
+0002134443 00000 n
+0002134595 00000 n
+0002134747 00000 n
+0002134899 00000 n
+0002135051 00000 n
+0002135203 00000 n
+0002135356 00000 n
+0002135508 00000 n
+0002135660 00000 n
+0002135811 00000 n
+0002135961 00000 n
+0002136114 00000 n
+0002136267 00000 n
+0002136420 00000 n
+0002136573 00000 n
+0002136726 00000 n
+0002136879 00000 n
+0002137032 00000 n
+0002137185 00000 n
+0002137338 00000 n
+0002137491 00000 n
+0002137644 00000 n
+0002137797 00000 n
+0002137948 00000 n
+0002138101 00000 n
+0002138253 00000 n
+0002138405 00000 n
+0002138557 00000 n
+0002138709 00000 n
+0002138861 00000 n
+0002139013 00000 n
+0002139166 00000 n
+0002139319 00000 n
+0002139472 00000 n
+0002139624 00000 n
+0002139776 00000 n
+0002139928 00000 n
+0002140080 00000 n
+0002140230 00000 n
+0002140445 00000 n
+0002130186 00000 n
+0002127097 00000 n
+0002140380 00000 n
+0002145527 00000 n
+0002145679 00000 n
+0002145831 00000 n
+0002145983 00000 n
+0002146136 00000 n
+0002146289 00000 n
+0002146440 00000 n
+0002146592 00000 n
+0002146743 00000 n
+0002146895 00000 n
+0002147047 00000 n
+0002147200 00000 n
+0002147353 00000 n
+0002147504 00000 n
+0002147656 00000 n
+0002147808 00000 n
+0002147960 00000 n
+0002148111 00000 n
+0002148263 00000 n
+0002148415 00000 n
+0002148567 00000 n
+0002148720 00000 n
+0002148873 00000 n
+0002149025 00000 n
+0002149177 00000 n
+0002149329 00000 n
+0002149481 00000 n
+0002149633 00000 n
+0002149783 00000 n
+0002149933 00000 n
+0002150086 00000 n
+0002150239 00000 n
+0002150392 00000 n
+0002150545 00000 n
+0002150698 00000 n
+0002150851 00000 n
+0002151004 00000 n
+0002151157 00000 n
+0002151310 00000 n
+0002151463 00000 n
+0002151616 00000 n
+0002151769 00000 n
+0002151920 00000 n
+0002152073 00000 n
+0002152226 00000 n
+0002152379 00000 n
+0002152531 00000 n
+0002152684 00000 n
+0002152837 00000 n
+0002152990 00000 n
+0002153143 00000 n
+0002153296 00000 n
+0002153449 00000 n
+0002153602 00000 n
+0002153755 00000 n
+0002153908 00000 n
+0002154061 00000 n
+0002154212 00000 n
+0002154428 00000 n
+0002144808 00000 n
+0002140562 00000 n
+0002154363 00000 n
+0002848583 00000 n
+0002159336 00000 n
+0002159488 00000 n
+0002159640 00000 n
+0002159792 00000 n
+0002159944 00000 n
+0002160096 00000 n
+0002160248 00000 n
+0002160400 00000 n
+0002160552 00000 n
+0002160704 00000 n
+0002160856 00000 n
+0002161008 00000 n
+0002161160 00000 n
+0002161310 00000 n
+0002161462 00000 n
+0002161614 00000 n
+0002161766 00000 n
+0002161917 00000 n
+0002162069 00000 n
+0002162221 00000 n
+0002162373 00000 n
+0002162525 00000 n
+0002162677 00000 n
+0002162829 00000 n
+0002162981 00000 n
+0002163133 00000 n
+0002163285 00000 n
+0002163437 00000 n
+0002163587 00000 n
+0002163737 00000 n
+0002163890 00000 n
+0002164043 00000 n
+0002164196 00000 n
+0002164349 00000 n
+0002164502 00000 n
+0002164655 00000 n
+0002164808 00000 n
+0002164961 00000 n
+0002165114 00000 n
+0002165267 00000 n
+0002165420 00000 n
+0002165573 00000 n
+0002165724 00000 n
+0002165877 00000 n
+0002166030 00000 n
+0002166183 00000 n
+0002166335 00000 n
+0002166488 00000 n
+0002166641 00000 n
+0002166794 00000 n
+0002166947 00000 n
+0002167100 00000 n
+0002167253 00000 n
+0002167406 00000 n
+0002167559 00000 n
+0002167712 00000 n
+0002167864 00000 n
+0002168014 00000 n
+0002168229 00000 n
+0002158617 00000 n
+0002154531 00000 n
+0002168164 00000 n
+0002173089 00000 n
+0002173242 00000 n
+0002173395 00000 n
+0002173547 00000 n
+0002173699 00000 n
+0002173851 00000 n
+0002174003 00000 n
+0002174155 00000 n
+0002174307 00000 n
+0002174459 00000 n
+0002174611 00000 n
+0002174763 00000 n
+0002174915 00000 n
+0002175065 00000 n
+0002175217 00000 n
+0002175369 00000 n
+0002175521 00000 n
+0002175672 00000 n
+0002175824 00000 n
+0002175976 00000 n
+0002176128 00000 n
+0002176280 00000 n
+0002176432 00000 n
+0002176584 00000 n
+0002176736 00000 n
+0002176888 00000 n
+0002177040 00000 n
+0002177192 00000 n
+0002177342 00000 n
+0002177492 00000 n
+0002177645 00000 n
+0002177798 00000 n
+0002177951 00000 n
+0002178104 00000 n
+0002178257 00000 n
+0002178410 00000 n
+0002178563 00000 n
+0002178716 00000 n
+0002178869 00000 n
+0002179022 00000 n
+0002179175 00000 n
+0002179328 00000 n
+0002179479 00000 n
+0002179632 00000 n
+0002179785 00000 n
+0002179938 00000 n
+0002180090 00000 n
+0002180243 00000 n
+0002180396 00000 n
+0002180549 00000 n
+0002180702 00000 n
+0002180855 00000 n
+0002181008 00000 n
+0002181161 00000 n
+0002181314 00000 n
+0002181467 00000 n
+0002181620 00000 n
+0002181771 00000 n
+0002181987 00000 n
+0002172370 00000 n
+0002168332 00000 n
+0002181922 00000 n
+0002186777 00000 n
+0002186929 00000 n
+0002187081 00000 n
+0002187233 00000 n
+0002187385 00000 n
+0002187537 00000 n
+0002187689 00000 n
+0002187841 00000 n
+0002187993 00000 n
+0002188145 00000 n
+0002188297 00000 n
+0002188449 00000 n
+0002188601 00000 n
+0002188752 00000 n
+0002188905 00000 n
+0002189057 00000 n
+0002189209 00000 n
+0002189361 00000 n
+0002189514 00000 n
+0002189666 00000 n
+0002189818 00000 n
+0002189970 00000 n
+0002190122 00000 n
+0002190272 00000 n
+0002190424 00000 n
+0002190576 00000 n
+0002190728 00000 n
+0002190879 00000 n
+0002191030 00000 n
+0002191182 00000 n
+0002191334 00000 n
+0002191485 00000 n
+0002191637 00000 n
+0002191789 00000 n
+0002191939 00000 n
+0002192088 00000 n
+0002192237 00000 n
+0002192389 00000 n
+0002192541 00000 n
+0002192693 00000 n
+0002192845 00000 n
+0002192997 00000 n
+0002193149 00000 n
+0002193301 00000 n
+0002193453 00000 n
+0002193605 00000 n
+0002193757 00000 n
+0002193908 00000 n
+0002194059 00000 n
+0002194211 00000 n
+0002194364 00000 n
+0002194517 00000 n
+0002194669 00000 n
+0002194822 00000 n
+0002194973 00000 n
+0002195125 00000 n
+0002195275 00000 n
+0002195427 00000 n
+0002195580 00000 n
+0002195733 00000 n
+0002195886 00000 n
+0002196038 00000 n
+0002196190 00000 n
+0002196342 00000 n
+0002196495 00000 n
+0002196647 00000 n
+0002196798 00000 n
+0002196951 00000 n
+0002197103 00000 n
+0002197256 00000 n
+0002197409 00000 n
+0002197562 00000 n
+0002197715 00000 n
+0002197868 00000 n
+0002198021 00000 n
+0002198174 00000 n
+0002198327 00000 n
+0002198478 00000 n
+0002198631 00000 n
+0002198784 00000 n
+0002198937 00000 n
+0002199089 00000 n
+0002199242 00000 n
+0002199391 00000 n
+0002199541 00000 n
+0002204032 00000 n
+0002199755 00000 n
+0002185788 00000 n
+0002182090 00000 n
+0002199690 00000 n
+0002204183 00000 n
+0002204334 00000 n
+0002204486 00000 n
+0002204638 00000 n
+0002204789 00000 n
+0002204941 00000 n
+0002205093 00000 n
+0002205245 00000 n
+0002205398 00000 n
+0002205550 00000 n
+0002205703 00000 n
+0002205855 00000 n
+0002206008 00000 n
+0002206160 00000 n
+0002206310 00000 n
+0002206463 00000 n
+0002206616 00000 n
+0002206769 00000 n
+0002206921 00000 n
+0002207072 00000 n
+0002207225 00000 n
+0002207378 00000 n
+0002207530 00000 n
+0002207683 00000 n
+0002207836 00000 n
+0002207989 00000 n
+0002208142 00000 n
+0002208295 00000 n
+0002208448 00000 n
+0002208601 00000 n
+0002208753 00000 n
+0002208905 00000 n
+0002209058 00000 n
+0002209211 00000 n
+0002209364 00000 n
+0002209517 00000 n
+0002209670 00000 n
+0002209822 00000 n
+0002209974 00000 n
+0002210126 00000 n
+0002210278 00000 n
+0002210430 00000 n
+0002210583 00000 n
+0002210736 00000 n
+0002210889 00000 n
+0002211041 00000 n
+0002211193 00000 n
+0002211344 00000 n
+0002211488 00000 n
+0002211640 00000 n
+0002211791 00000 n
+0002211943 00000 n
+0002212095 00000 n
+0002212247 00000 n
+0002212399 00000 n
+0002212551 00000 n
+0002212702 00000 n
+0002212853 00000 n
+0002213005 00000 n
+0002213157 00000 n
+0002213309 00000 n
+0002213461 00000 n
+0002213613 00000 n
+0002213765 00000 n
+0002213917 00000 n
+0002214069 00000 n
+0002214220 00000 n
+0002214373 00000 n
+0002214526 00000 n
+0002214679 00000 n
+0002214832 00000 n
+0002214985 00000 n
+0002215135 00000 n
+0002215287 00000 n
+0002215439 00000 n
+0002215591 00000 n
+0002215742 00000 n
+0002215893 00000 n
+0002216045 00000 n
+0002216197 00000 n
+0002216349 00000 n
+0002216501 00000 n
+0002216653 00000 n
+0002221483 00000 n
+0002216867 00000 n
+0002203053 00000 n
+0002199858 00000 n
+0002216802 00000 n
+0002221634 00000 n
+0002221786 00000 n
+0002221938 00000 n
+0002222090 00000 n
+0002222241 00000 n
+0002222393 00000 n
+0002222545 00000 n
+0002222696 00000 n
+0002222848 00000 n
+0002222999 00000 n
+0002223151 00000 n
+0002223301 00000 n
+0002223452 00000 n
+0002223604 00000 n
+0002223757 00000 n
+0002223909 00000 n
+0002224061 00000 n
+0002224212 00000 n
+0002224364 00000 n
+0002224516 00000 n
+0002224668 00000 n
+0002224820 00000 n
+0002224972 00000 n
+0002225124 00000 n
+0002225275 00000 n
+0002225428 00000 n
+0002225581 00000 n
+0002225733 00000 n
+0002225886 00000 n
+0002226039 00000 n
+0002226192 00000 n
+0002226344 00000 n
+0002226496 00000 n
+0002226649 00000 n
+0002226802 00000 n
+0002226955 00000 n
+0002227108 00000 n
+0002227261 00000 n
+0002227414 00000 n
+0002227567 00000 n
+0002227720 00000 n
+0002227873 00000 n
+0002228026 00000 n
+0002228179 00000 n
+0002228332 00000 n
+0002228478 00000 n
+0002228630 00000 n
+0002228782 00000 n
+0002228933 00000 n
+0002229085 00000 n
+0002229237 00000 n
+0002229389 00000 n
+0002229541 00000 n
+0002229691 00000 n
+0002229843 00000 n
+0002229992 00000 n
+0002230144 00000 n
+0002230296 00000 n
+0002230447 00000 n
+0002230599 00000 n
+0002230748 00000 n
+0002230900 00000 n
+0002231051 00000 n
+0002231203 00000 n
+0002231355 00000 n
+0002231507 00000 n
+0002231659 00000 n
+0002231811 00000 n
+0002231962 00000 n
+0002232114 00000 n
+0002232266 00000 n
+0002232417 00000 n
+0002232568 00000 n
+0002232720 00000 n
+0002232872 00000 n
+0002233024 00000 n
+0002233176 00000 n
+0002233328 00000 n
+0002233480 00000 n
+0002233631 00000 n
+0002233783 00000 n
+0002233935 00000 n
+0002234087 00000 n
+0002234238 00000 n
+0002234390 00000 n
+0002234541 00000 n
+0002234692 00000 n
+0002234844 00000 n
+0002234996 00000 n
+0002235148 00000 n
+0002235300 00000 n
+0002235452 00000 n
+0002235603 00000 n
+0002235754 00000 n
+0002235904 00000 n
+0002236055 00000 n
+0002236207 00000 n
+0002236359 00000 n
+0002236509 00000 n
+0002236660 00000 n
+0002236875 00000 n
+0002220334 00000 n
+0002216970 00000 n
+0002236810 00000 n
+0002240885 00000 n
+0002241037 00000 n
+0002241188 00000 n
+0002241340 00000 n
+0002241492 00000 n
+0002241644 00000 n
+0002241795 00000 n
+0002241947 00000 n
+0002242099 00000 n
+0002242251 00000 n
+0002242403 00000 n
+0002242555 00000 n
+0002242707 00000 n
+0002242859 00000 n
+0002243011 00000 n
+0002243162 00000 n
+0002243314 00000 n
+0002243466 00000 n
+0002243617 00000 n
+0002243769 00000 n
+0002243921 00000 n
+0002244074 00000 n
+0002244227 00000 n
+0002244380 00000 n
+0002244533 00000 n
+0002244686 00000 n
+0002244839 00000 n
+0002244992 00000 n
+0002245145 00000 n
+0002245297 00000 n
+0002245448 00000 n
+0002245600 00000 n
+0002245752 00000 n
+0002245904 00000 n
+0002246056 00000 n
+0002246208 00000 n
+0002246360 00000 n
+0002246511 00000 n
+0002246663 00000 n
+0002246815 00000 n
+0002246968 00000 n
+0002247120 00000 n
+0002247272 00000 n
+0002247424 00000 n
+0002247576 00000 n
+0002247729 00000 n
+0002247880 00000 n
+0002248031 00000 n
+0002248183 00000 n
+0002248335 00000 n
+0002248485 00000 n
+0002248636 00000 n
+0002248788 00000 n
+0002248940 00000 n
+0002249092 00000 n
+0002249244 00000 n
+0002249395 00000 n
+0002249546 00000 n
+0002249698 00000 n
+0002249850 00000 n
+0002250001 00000 n
+0002250153 00000 n
+0002250305 00000 n
+0002250457 00000 n
+0002250608 00000 n
+0002250760 00000 n
+0002250911 00000 n
+0002251063 00000 n
+0002251215 00000 n
+0002251367 00000 n
+0002251519 00000 n
+0002251670 00000 n
+0002251820 00000 n
+0002255922 00000 n
+0002252031 00000 n
+0002240016 00000 n
+0002236992 00000 n
+0002251966 00000 n
+0002848716 00000 n
+0002256073 00000 n
+0002256224 00000 n
+0002256376 00000 n
+0002256529 00000 n
+0002256682 00000 n
+0002256835 00000 n
+0002256987 00000 n
+0002257139 00000 n
+0002257291 00000 n
+0002257442 00000 n
+0002257593 00000 n
+0002257744 00000 n
+0002257897 00000 n
+0002258049 00000 n
+0002258201 00000 n
+0002258353 00000 n
+0002258505 00000 n
+0002258657 00000 n
+0002258809 00000 n
+0002258962 00000 n
+0002259113 00000 n
+0002259265 00000 n
+0002259416 00000 n
+0002259569 00000 n
+0002259721 00000 n
+0002259873 00000 n
+0002260025 00000 n
+0002260177 00000 n
+0002260329 00000 n
+0002260481 00000 n
+0002260633 00000 n
+0002260784 00000 n
+0002260930 00000 n
+0002261082 00000 n
+0002261234 00000 n
+0002261387 00000 n
+0002261538 00000 n
+0002261690 00000 n
+0002261842 00000 n
+0002261994 00000 n
+0002262142 00000 n
+0002262294 00000 n
+0002262446 00000 n
+0002262598 00000 n
+0002262750 00000 n
+0002262902 00000 n
+0002263054 00000 n
+0002263206 00000 n
+0002263358 00000 n
+0002263508 00000 n
+0002263660 00000 n
+0002263812 00000 n
+0002263964 00000 n
+0002264117 00000 n
+0002264270 00000 n
+0002264423 00000 n
+0002264576 00000 n
+0002264728 00000 n
+0002264880 00000 n
+0002265032 00000 n
+0002265184 00000 n
+0002265336 00000 n
+0002265488 00000 n
+0002265639 00000 n
+0002265788 00000 n
+0002266003 00000 n
+0002255123 00000 n
+0002252134 00000 n
+0002265938 00000 n
+0002271052 00000 n
+0002271201 00000 n
+0002271354 00000 n
+0002271506 00000 n
+0002271658 00000 n
+0002271809 00000 n
+0002271961 00000 n
+0002272112 00000 n
+0002272263 00000 n
+0002272415 00000 n
+0002272567 00000 n
+0002272719 00000 n
+0002272871 00000 n
+0002273023 00000 n
+0002273175 00000 n
+0002273327 00000 n
+0002273478 00000 n
+0002273629 00000 n
+0002273782 00000 n
+0002273935 00000 n
+0002274086 00000 n
+0002274239 00000 n
+0002274392 00000 n
+0002274545 00000 n
+0002274697 00000 n
+0002274850 00000 n
+0002275002 00000 n
+0002275154 00000 n
+0002275307 00000 n
+0002275460 00000 n
+0002275613 00000 n
+0002275766 00000 n
+0002275919 00000 n
+0002276072 00000 n
+0002276223 00000 n
+0002276376 00000 n
+0002276529 00000 n
+0002276681 00000 n
+0002276832 00000 n
+0002276985 00000 n
+0002277135 00000 n
+0002277288 00000 n
+0002277441 00000 n
+0002277594 00000 n
+0002277745 00000 n
+0002277898 00000 n
+0002278051 00000 n
+0002278203 00000 n
+0002278356 00000 n
+0002278509 00000 n
+0002278660 00000 n
+0002278813 00000 n
+0002278966 00000 n
+0002279119 00000 n
+0002279272 00000 n
+0002279425 00000 n
+0002279575 00000 n
+0002279728 00000 n
+0002279880 00000 n
+0002280033 00000 n
+0002280186 00000 n
+0002280339 00000 n
+0002280492 00000 n
+0002280645 00000 n
+0002280796 00000 n
+0002280949 00000 n
+0002281102 00000 n
+0002281255 00000 n
+0002281407 00000 n
+0002281559 00000 n
+0002281712 00000 n
+0002281865 00000 n
+0002282018 00000 n
+0002282171 00000 n
+0002282324 00000 n
+0002282476 00000 n
+0002282628 00000 n
+0002282781 00000 n
+0002282934 00000 n
+0002283086 00000 n
+0002283236 00000 n
+0002283387 00000 n
+0002288919 00000 n
+0002283599 00000 n
+0002270093 00000 n
+0002266106 00000 n
+0002283534 00000 n
+0002289071 00000 n
+0002289223 00000 n
+0002289376 00000 n
+0002289528 00000 n
+0002289681 00000 n
+0002289834 00000 n
+0002289985 00000 n
+0002290137 00000 n
+0002290286 00000 n
+0002290438 00000 n
+0002290591 00000 n
+0002290744 00000 n
+0002290897 00000 n
+0002291050 00000 n
+0002291202 00000 n
+0002291355 00000 n
+0002291508 00000 n
+0002291660 00000 n
+0002291811 00000 n
+0002291963 00000 n
+0002292116 00000 n
+0002292268 00000 n
+0002292421 00000 n
+0002292574 00000 n
+0002292727 00000 n
+0002292880 00000 n
+0002293033 00000 n
+0002293185 00000 n
+0002293338 00000 n
+0002293491 00000 n
+0002293643 00000 n
+0002293796 00000 n
+0002293949 00000 n
+0002294101 00000 n
+0002294254 00000 n
+0002294407 00000 n
+0002294559 00000 n
+0002294712 00000 n
+0002294865 00000 n
+0002295017 00000 n
+0002295170 00000 n
+0002295319 00000 n
+0002295470 00000 n
+0002295623 00000 n
+0002295776 00000 n
+0002295927 00000 n
+0002296080 00000 n
+0002296233 00000 n
+0002296386 00000 n
+0002296539 00000 n
+0002296692 00000 n
+0002296842 00000 n
+0002296995 00000 n
+0002297147 00000 n
+0002297300 00000 n
+0002297453 00000 n
+0002297606 00000 n
+0002297759 00000 n
+0002297912 00000 n
+0002298064 00000 n
+0002298217 00000 n
+0002298367 00000 n
+0002298518 00000 n
+0002298669 00000 n
+0002298821 00000 n
+0002298973 00000 n
+0002299125 00000 n
+0002299277 00000 n
+0002299430 00000 n
+0002299582 00000 n
+0002299735 00000 n
+0002299888 00000 n
+0002300041 00000 n
+0002300193 00000 n
+0002300346 00000 n
+0002300499 00000 n
+0002300652 00000 n
+0002300805 00000 n
+0002300958 00000 n
+0002301111 00000 n
+0002301264 00000 n
+0002301417 00000 n
+0002301569 00000 n
+0002301720 00000 n
+0002309254 00000 n
+0002301935 00000 n
+0002287930 00000 n
+0002283702 00000 n
+0002301870 00000 n
+0002309407 00000 n
+0002309560 00000 n
+0002309713 00000 n
+0002309866 00000 n
+0002310019 00000 n
+0002310172 00000 n
+0002310325 00000 n
+0002310478 00000 n
+0002310631 00000 n
+0002310783 00000 n
+0002310935 00000 n
+0002311087 00000 n
+0002311240 00000 n
+0002311393 00000 n
+0002311546 00000 n
+0002311699 00000 n
+0002311852 00000 n
+0002312005 00000 n
+0002312158 00000 n
+0002312309 00000 n
+0002312462 00000 n
+0002312614 00000 n
+0002312767 00000 n
+0002312920 00000 n
+0002313072 00000 n
+0002313224 00000 n
+0002313376 00000 n
+0002313529 00000 n
+0002313682 00000 n
+0002313835 00000 n
+0002313988 00000 n
+0002314140 00000 n
+0002314293 00000 n
+0002314445 00000 n
+0002314596 00000 n
+0002314748 00000 n
+0002314901 00000 n
+0002315054 00000 n
+0002315207 00000 n
+0002315359 00000 n
+0002315511 00000 n
+0002315664 00000 n
+0002315817 00000 n
+0002315970 00000 n
+0002316121 00000 n
+0002316274 00000 n
+0002316427 00000 n
+0002316580 00000 n
+0002316731 00000 n
+0002316883 00000 n
+0002317036 00000 n
+0002317189 00000 n
+0002317342 00000 n
+0002317494 00000 n
+0002317647 00000 n
+0002317798 00000 n
+0002317949 00000 n
+0002318100 00000 n
+0002318252 00000 n
+0002318404 00000 n
+0002318556 00000 n
+0002318707 00000 n
+0002318860 00000 n
+0002319013 00000 n
+0002319166 00000 n
+0002319319 00000 n
+0002319472 00000 n
+0002319625 00000 n
+0002319778 00000 n
+0002319926 00000 n
+0002320079 00000 n
+0002320232 00000 n
+0002320385 00000 n
+0002320537 00000 n
+0002320690 00000 n
+0002320841 00000 n
+0002320994 00000 n
+0002321145 00000 n
+0002321298 00000 n
+0002321451 00000 n
+0002321604 00000 n
+0002321757 00000 n
+0002321910 00000 n
+0002322062 00000 n
+0002322214 00000 n
+0002322367 00000 n
+0002322520 00000 n
+0002322673 00000 n
+0002322826 00000 n
+0002322979 00000 n
+0002323132 00000 n
+0002323284 00000 n
+0002323436 00000 n
+0002323589 00000 n
+0002323742 00000 n
+0002323894 00000 n
+0002324047 00000 n
+0002324200 00000 n
+0002324353 00000 n
+0002324505 00000 n
+0002324658 00000 n
+0002324811 00000 n
+0002324964 00000 n
+0002325117 00000 n
+0002325269 00000 n
+0002325421 00000 n
+0002325574 00000 n
+0002325726 00000 n
+0002325879 00000 n
+0002326032 00000 n
+0002326185 00000 n
+0002326337 00000 n
+0002326490 00000 n
+0002326642 00000 n
+0002326793 00000 n
+0002335132 00000 n
+0002327004 00000 n
+0002307955 00000 n
+0002302038 00000 n
+0002326939 00000 n
+0002335285 00000 n
+0002335438 00000 n
+0002335591 00000 n
+0002335744 00000 n
+0002335897 00000 n
+0002336050 00000 n
+0002336202 00000 n
+0002336355 00000 n
+0002336508 00000 n
+0002336661 00000 n
+0002336814 00000 n
+0002336966 00000 n
+0002337118 00000 n
+0002337270 00000 n
+0002337423 00000 n
+0002337576 00000 n
+0002337729 00000 n
+0002337882 00000 n
+0002338033 00000 n
+0002338185 00000 n
+0002338338 00000 n
+0002338491 00000 n
+0002338642 00000 n
+0002338795 00000 n
+0002338948 00000 n
+0002339101 00000 n
+0002339254 00000 n
+0002339407 00000 n
+0002339560 00000 n
+0002339712 00000 n
+0002339865 00000 n
+0002340016 00000 n
+0002340169 00000 n
+0002340322 00000 n
+0002340475 00000 n
+0002340628 00000 n
+0002340781 00000 n
+0002340932 00000 n
+0002341085 00000 n
+0002341238 00000 n
+0002341391 00000 n
+0002341544 00000 n
+0002341696 00000 n
+0002341849 00000 n
+0002342000 00000 n
+0002342152 00000 n
+0002342305 00000 n
+0002342456 00000 n
+0002342608 00000 n
+0002342761 00000 n
+0002342914 00000 n
+0002343067 00000 n
+0002343219 00000 n
+0002343372 00000 n
+0002343524 00000 n
+0002343675 00000 n
+0002343825 00000 n
+0002343977 00000 n
+0002344130 00000 n
+0002344282 00000 n
+0002344435 00000 n
+0002344588 00000 n
+0002344740 00000 n
+0002344893 00000 n
+0002345046 00000 n
+0002345197 00000 n
+0002345350 00000 n
+0002345503 00000 n
+0002345656 00000 n
+0002345809 00000 n
+0002345962 00000 n
+0002346115 00000 n
+0002346267 00000 n
+0002346419 00000 n
+0002346572 00000 n
+0002346723 00000 n
+0002346876 00000 n
+0002347029 00000 n
+0002347182 00000 n
+0002347335 00000 n
+0002347487 00000 n
+0002347640 00000 n
+0002347793 00000 n
+0002347945 00000 n
+0002348098 00000 n
+0002348251 00000 n
+0002348404 00000 n
+0002348557 00000 n
+0002348710 00000 n
+0002348863 00000 n
+0002349016 00000 n
+0002349169 00000 n
+0002349322 00000 n
+0002349475 00000 n
+0002349628 00000 n
+0002349780 00000 n
+0002349932 00000 n
+0002350084 00000 n
+0002350236 00000 n
+0002350389 00000 n
+0002350542 00000 n
+0002350694 00000 n
+0002350847 00000 n
+0002350999 00000 n
+0002351152 00000 n
+0002351303 00000 n
+0002351455 00000 n
+0002351608 00000 n
+0002351760 00000 n
+0002351912 00000 n
+0002352064 00000 n
+0002352213 00000 n
+0002352365 00000 n
+0002352516 00000 n
+0002359225 00000 n
+0002352732 00000 n
+0002333843 00000 n
+0002327107 00000 n
+0002352667 00000 n
+0002359377 00000 n
+0002359530 00000 n
+0002359683 00000 n
+0002359836 00000 n
+0002359989 00000 n
+0002360142 00000 n
+0002360295 00000 n
+0002360447 00000 n
+0002360598 00000 n
+0002360750 00000 n
+0002360903 00000 n
+0002361054 00000 n
+0002361207 00000 n
+0002361360 00000 n
+0002361513 00000 n
+0002361665 00000 n
+0002361818 00000 n
+0002361971 00000 n
+0002362120 00000 n
+0002362272 00000 n
+0002362425 00000 n
+0002362578 00000 n
+0002362731 00000 n
+0002362883 00000 n
+0002363035 00000 n
+0002363188 00000 n
+0002363340 00000 n
+0002363493 00000 n
+0002363646 00000 n
+0002363799 00000 n
+0002363952 00000 n
+0002364104 00000 n
+0002364256 00000 n
+0002364408 00000 n
+0002364561 00000 n
+0002364713 00000 n
+0002364866 00000 n
+0002365019 00000 n
+0002365171 00000 n
+0002365323 00000 n
+0002365475 00000 n
+0002365628 00000 n
+0002365781 00000 n
+0002365934 00000 n
+0002366087 00000 n
+0002366240 00000 n
+0002366392 00000 n
+0002366545 00000 n
+0002366697 00000 n
+0002366848 00000 n
+0002367001 00000 n
+0002367154 00000 n
+0002367307 00000 n
+0002367458 00000 n
+0002367610 00000 n
+0002367761 00000 n
+0002367912 00000 n
+0002368062 00000 n
+0002368214 00000 n
+0002368367 00000 n
+0002368520 00000 n
+0002368672 00000 n
+0002368825 00000 n
+0002368978 00000 n
+0002369131 00000 n
+0002369283 00000 n
+0002369436 00000 n
+0002369589 00000 n
+0002369742 00000 n
+0002369895 00000 n
+0002370048 00000 n
+0002370200 00000 n
+0002370353 00000 n
+0002370506 00000 n
+0002370659 00000 n
+0002370812 00000 n
+0002370965 00000 n
+0002371118 00000 n
+0002371271 00000 n
+0002371423 00000 n
+0002371576 00000 n
+0002371729 00000 n
+0002371882 00000 n
+0002372034 00000 n
+0002372186 00000 n
+0002372337 00000 n
+0002372487 00000 n
+0002372638 00000 n
+0002372790 00000 n
+0002372942 00000 n
+0002373093 00000 n
+0002373244 00000 n
+0002373396 00000 n
+0002373548 00000 n
+0002373700 00000 n
+0002373852 00000 n
+0002374004 00000 n
+0002374156 00000 n
+0002374308 00000 n
+0002377822 00000 n
+0002374523 00000 n
+0002358086 00000 n
+0002352835 00000 n
+0002374458 00000 n
+0002848849 00000 n
+0002377974 00000 n
+0002378126 00000 n
+0002378278 00000 n
+0002378430 00000 n
+0002378580 00000 n
+0002378732 00000 n
+0002378884 00000 n
+0002379036 00000 n
+0002379188 00000 n
+0002379340 00000 n
+0002379492 00000 n
+0002379644 00000 n
+0002379796 00000 n
+0002379946 00000 n
+0002380098 00000 n
+0002380250 00000 n
+0002380402 00000 n
+0002380551 00000 n
+0002380703 00000 n
+0002380854 00000 n
+0002381006 00000 n
+0002381158 00000 n
+0002381310 00000 n
+0002381461 00000 n
+0002381612 00000 n
+0002381763 00000 n
+0002381915 00000 n
+0002382067 00000 n
+0002382219 00000 n
+0002382369 00000 n
+0002382521 00000 n
+0002382673 00000 n
+0002382825 00000 n
+0002382977 00000 n
+0002383129 00000 n
+0002383281 00000 n
+0002383433 00000 n
+0002383585 00000 n
+0002383737 00000 n
+0002383889 00000 n
+0002384041 00000 n
+0002384193 00000 n
+0002384345 00000 n
+0002384495 00000 n
+0002384647 00000 n
+0002384799 00000 n
+0002384951 00000 n
+0002385102 00000 n
+0002385254 00000 n
+0002385406 00000 n
+0002385558 00000 n
+0002385710 00000 n
+0002385862 00000 n
+0002386013 00000 n
+0002386165 00000 n
+0002386317 00000 n
+0002386469 00000 n
+0002386621 00000 n
+0002392707 00000 n
+0002386836 00000 n
+0002377093 00000 n
+0002374626 00000 n
+0002386771 00000 n
+0002392859 00000 n
+0002393011 00000 n
+0002393164 00000 n
+0002393317 00000 n
+0002393469 00000 n
+0002393622 00000 n
+0002393774 00000 n
+0002393927 00000 n
+0002394080 00000 n
+0002394230 00000 n
+0002394381 00000 n
+0002394533 00000 n
+0002394685 00000 n
+0002394837 00000 n
+0002394989 00000 n
+0002395140 00000 n
+0002395292 00000 n
+0002395444 00000 n
+0002395595 00000 n
+0002395746 00000 n
+0002395897 00000 n
+0002396048 00000 n
+0002396200 00000 n
+0002396352 00000 n
+0002396504 00000 n
+0002396655 00000 n
+0002396806 00000 n
+0002396957 00000 n
+0002397109 00000 n
+0002397261 00000 n
+0002397412 00000 n
+0002397564 00000 n
+0002397716 00000 n
+0002397868 00000 n
+0002398020 00000 n
+0002398172 00000 n
+0002398324 00000 n
+0002398476 00000 n
+0002398627 00000 n
+0002398780 00000 n
+0002398933 00000 n
+0002399086 00000 n
+0002399237 00000 n
+0002399384 00000 n
+0002399536 00000 n
+0002399688 00000 n
+0002399839 00000 n
+0002399991 00000 n
+0002400143 00000 n
+0002400295 00000 n
+0002400445 00000 n
+0002400595 00000 n
+0002400747 00000 n
+0002400899 00000 n
+0002401051 00000 n
+0002401203 00000 n
+0002401354 00000 n
+0002401506 00000 n
+0002401657 00000 n
+0002401808 00000 n
+0002401960 00000 n
+0002402112 00000 n
+0002402264 00000 n
+0002402416 00000 n
+0002402567 00000 n
+0002402719 00000 n
+0002402870 00000 n
+0002403022 00000 n
+0002403174 00000 n
+0002403326 00000 n
+0002403478 00000 n
+0002403630 00000 n
+0002403782 00000 n
+0002403933 00000 n
+0002404085 00000 n
+0002404236 00000 n
+0002404388 00000 n
+0002404539 00000 n
+0002404691 00000 n
+0002404842 00000 n
+0002404993 00000 n
+0002405144 00000 n
+0002405296 00000 n
+0002405448 00000 n
+0002405600 00000 n
+0002405752 00000 n
+0002405903 00000 n
+0002406054 00000 n
+0002406206 00000 n
+0002406358 00000 n
+0002406509 00000 n
+0002406661 00000 n
+0002406813 00000 n
+0002406965 00000 n
+0002407115 00000 n
+0002407267 00000 n
+0002407417 00000 n
+0002407567 00000 n
+0002413904 00000 n
+0002407781 00000 n
+0002391578 00000 n
+0002386939 00000 n
+0002407716 00000 n
+0002414055 00000 n
+0002414207 00000 n
+0002414358 00000 n
+0002414510 00000 n
+0002414662 00000 n
+0002414814 00000 n
+0002414966 00000 n
+0002415118 00000 n
+0002415270 00000 n
+0002415421 00000 n
+0002415572 00000 n
+0002415722 00000 n
+0002415874 00000 n
+0002416026 00000 n
+0002416178 00000 n
+0002416328 00000 n
+0002416480 00000 n
+0002416632 00000 n
+0002416783 00000 n
+0002416934 00000 n
+0002417086 00000 n
+0002417238 00000 n
+0002417390 00000 n
+0002417541 00000 n
+0002417693 00000 n
+0002417844 00000 n
+0002417995 00000 n
+0002418147 00000 n
+0002418299 00000 n
+0002418451 00000 n
+0002418603 00000 n
+0002418754 00000 n
+0002418906 00000 n
+0002419058 00000 n
+0002419208 00000 n
+0002419360 00000 n
+0002419511 00000 n
+0002419662 00000 n
+0002419812 00000 n
+0002419963 00000 n
+0002420115 00000 n
+0002420267 00000 n
+0002420419 00000 n
+0002420571 00000 n
+0002420722 00000 n
+0002420873 00000 n
+0002421024 00000 n
+0002421176 00000 n
+0002421328 00000 n
+0002421481 00000 n
+0002421634 00000 n
+0002421786 00000 n
+0002421938 00000 n
+0002422088 00000 n
+0002422240 00000 n
+0002422392 00000 n
+0002422544 00000 n
+0002422696 00000 n
+0002422848 00000 n
+0002423000 00000 n
+0002423152 00000 n
+0002423302 00000 n
+0002423454 00000 n
+0002423606 00000 n
+0002423758 00000 n
+0002423910 00000 n
+0002424060 00000 n
+0002424211 00000 n
+0002424363 00000 n
+0002424514 00000 n
+0002424666 00000 n
+0002424818 00000 n
+0002424970 00000 n
+0002425122 00000 n
+0002425273 00000 n
+0002425425 00000 n
+0002425577 00000 n
+0002425729 00000 n
+0002425881 00000 n
+0002426033 00000 n
+0002426185 00000 n
+0002426335 00000 n
+0002426486 00000 n
+0002426638 00000 n
+0002426789 00000 n
+0002426941 00000 n
+0002427093 00000 n
+0002427245 00000 n
+0002427396 00000 n
+0002427548 00000 n
+0002427700 00000 n
+0002427851 00000 n
+0002428003 00000 n
+0002428156 00000 n
+0002428308 00000 n
+0002428461 00000 n
+0002428614 00000 n
+0002428767 00000 n
+0002434168 00000 n
+0002428983 00000 n
+0002412775 00000 n
+0002407884 00000 n
+0002428918 00000 n
+0002434320 00000 n
+0002434472 00000 n
+0002434625 00000 n
+0002434778 00000 n
+0002434929 00000 n
+0002435081 00000 n
+0002435234 00000 n
+0002435387 00000 n
+0002435540 00000 n
+0002435693 00000 n
+0002435846 00000 n
+0002435999 00000 n
+0002436152 00000 n
+0002436305 00000 n
+0002436458 00000 n
+0002436611 00000 n
+0002436764 00000 n
+0002436917 00000 n
+0002437070 00000 n
+0002437222 00000 n
+0002437374 00000 n
+0002437527 00000 n
+0002437680 00000 n
+0002437832 00000 n
+0002437984 00000 n
+0002438137 00000 n
+0002438290 00000 n
+0002438443 00000 n
+0002438594 00000 n
+0002438746 00000 n
+0002438898 00000 n
+0002439051 00000 n
+0002439204 00000 n
+0002439355 00000 n
+0002439507 00000 n
+0002439660 00000 n
+0002439813 00000 n
+0002439966 00000 n
+0002440119 00000 n
+0002440272 00000 n
+0002440425 00000 n
+0002440578 00000 n
+0002440731 00000 n
+0002440884 00000 n
+0002441037 00000 n
+0002441190 00000 n
+0002441343 00000 n
+0002441496 00000 n
+0002441648 00000 n
+0002441800 00000 n
+0002441953 00000 n
+0002442106 00000 n
+0002442258 00000 n
+0002442410 00000 n
+0002442563 00000 n
+0002442716 00000 n
+0002442869 00000 n
+0002448268 00000 n
+0002443085 00000 n
+0002433449 00000 n
+0002429100 00000 n
+0002443020 00000 n
+0002448420 00000 n
+0002448572 00000 n
+0002448725 00000 n
+0002448878 00000 n
+0002449029 00000 n
+0002449181 00000 n
+0002449334 00000 n
+0002449487 00000 n
+0002449640 00000 n
+0002449793 00000 n
+0002449946 00000 n
+0002450099 00000 n
+0002450252 00000 n
+0002450405 00000 n
+0002450558 00000 n
+0002450711 00000 n
+0002450864 00000 n
+0002451017 00000 n
+0002451170 00000 n
+0002451322 00000 n
+0002451474 00000 n
+0002451627 00000 n
+0002451780 00000 n
+0002451932 00000 n
+0002452084 00000 n
+0002452237 00000 n
+0002452390 00000 n
+0002452543 00000 n
+0002452694 00000 n
+0002452846 00000 n
+0002452998 00000 n
+0002453151 00000 n
+0002453304 00000 n
+0002453455 00000 n
+0002453607 00000 n
+0002453760 00000 n
+0002453913 00000 n
+0002454066 00000 n
+0002454219 00000 n
+0002454372 00000 n
+0002454525 00000 n
+0002454678 00000 n
+0002454831 00000 n
+0002454984 00000 n
+0002455137 00000 n
+0002455290 00000 n
+0002455443 00000 n
+0002455596 00000 n
+0002455748 00000 n
+0002455900 00000 n
+0002456053 00000 n
+0002456206 00000 n
+0002456358 00000 n
+0002456510 00000 n
+0002456663 00000 n
+0002456816 00000 n
+0002456969 00000 n
+0002462136 00000 n
+0002457185 00000 n
+0002447549 00000 n
+0002443188 00000 n
+0002457120 00000 n
+0002462288 00000 n
+0002462440 00000 n
+0002462593 00000 n
+0002462746 00000 n
+0002462897 00000 n
+0002463049 00000 n
+0002463202 00000 n
+0002463355 00000 n
+0002463508 00000 n
+0002463661 00000 n
+0002463814 00000 n
+0002463967 00000 n
+0002464120 00000 n
+0002464273 00000 n
+0002464426 00000 n
+0002464579 00000 n
+0002464732 00000 n
+0002464885 00000 n
+0002465038 00000 n
+0002465190 00000 n
+0002465342 00000 n
+0002465495 00000 n
+0002465648 00000 n
+0002465800 00000 n
+0002465952 00000 n
+0002466105 00000 n
+0002466258 00000 n
+0002466411 00000 n
+0002466562 00000 n
+0002466714 00000 n
+0002466866 00000 n
+0002467017 00000 n
+0002467169 00000 n
+0002467321 00000 n
+0002467473 00000 n
+0002467625 00000 n
+0002467777 00000 n
+0002467929 00000 n
+0002468080 00000 n
+0002468231 00000 n
+0002468381 00000 n
+0002468532 00000 n
+0002468684 00000 n
+0002468836 00000 n
+0002468988 00000 n
+0002469141 00000 n
+0002469293 00000 n
+0002469445 00000 n
+0002469597 00000 n
+0002469749 00000 n
+0002469900 00000 n
+0002470053 00000 n
+0002470205 00000 n
+0002470357 00000 n
+0002470509 00000 n
+0002470660 00000 n
+0002470811 00000 n
+0002470963 00000 n
+0002471114 00000 n
+0002471266 00000 n
+0002471418 00000 n
+0002471570 00000 n
+0002471721 00000 n
+0002471873 00000 n
+0002472024 00000 n
+0002472176 00000 n
+0002472328 00000 n
+0002472480 00000 n
+0002472632 00000 n
+0002472784 00000 n
+0002472935 00000 n
+0002473086 00000 n
+0002473237 00000 n
+0002473389 00000 n
+0002473541 00000 n
+0002473693 00000 n
+0002473845 00000 n
+0002473997 00000 n
+0002474149 00000 n
+0002474300 00000 n
+0002474450 00000 n
+0002478468 00000 n
+0002474665 00000 n
+0002461177 00000 n
+0002457288 00000 n
+0002474600 00000 n
+0002848982 00000 n
+0002478619 00000 n
+0002478771 00000 n
+0002478923 00000 n
+0002479075 00000 n
+0002479225 00000 n
+0002479377 00000 n
+0002479528 00000 n
+0002479680 00000 n
+0002479832 00000 n
+0002479984 00000 n
+0002480136 00000 n
+0002480288 00000 n
+0002480441 00000 n
+0002480594 00000 n
+0002480747 00000 n
+0002480900 00000 n
+0002481053 00000 n
+0002481206 00000 n
+0002481359 00000 n
+0002481511 00000 n
+0002481664 00000 n
+0002481817 00000 n
+0002481970 00000 n
+0002482123 00000 n
+0002482275 00000 n
+0002482428 00000 n
+0002482581 00000 n
+0002482734 00000 n
+0002482887 00000 n
+0002483040 00000 n
+0002483193 00000 n
+0002483346 00000 n
+0002483499 00000 n
+0002483652 00000 n
+0002483804 00000 n
+0002483957 00000 n
+0002484110 00000 n
+0002484261 00000 n
+0002484413 00000 n
+0002484565 00000 n
+0002484717 00000 n
+0002484868 00000 n
+0002485020 00000 n
+0002485172 00000 n
+0002485324 00000 n
+0002485475 00000 n
+0002485628 00000 n
+0002485780 00000 n
+0002485932 00000 n
+0002486085 00000 n
+0002486237 00000 n
+0002486390 00000 n
+0002486542 00000 n
+0002486694 00000 n
+0002486847 00000 n
+0002487000 00000 n
+0002487153 00000 n
+0002487306 00000 n
+0002487458 00000 n
+0002487610 00000 n
+0002487763 00000 n
+0002487916 00000 n
+0002488069 00000 n
+0002488222 00000 n
+0002488374 00000 n
+0002488527 00000 n
+0002488680 00000 n
+0002488832 00000 n
+0002488985 00000 n
+0002489138 00000 n
+0002489291 00000 n
+0002489443 00000 n
+0002489594 00000 n
+0002489746 00000 n
+0002489899 00000 n
+0002490052 00000 n
+0002490203 00000 n
+0002490355 00000 n
+0002490508 00000 n
+0002490661 00000 n
+0002490813 00000 n
+0002490966 00000 n
+0002491119 00000 n
+0002491271 00000 n
+0002491421 00000 n
+0002498399 00000 n
+0002491636 00000 n
+0002477469 00000 n
+0002474782 00000 n
+0002491571 00000 n
+0002498552 00000 n
+0002498705 00000 n
+0002498858 00000 n
+0002499011 00000 n
+0002499164 00000 n
+0002499317 00000 n
+0002499470 00000 n
+0002499623 00000 n
+0002499774 00000 n
+0002499927 00000 n
+0002500080 00000 n
+0002500232 00000 n
+0002500385 00000 n
+0002500538 00000 n
+0002500691 00000 n
+0002500843 00000 n
+0002500996 00000 n
+0002501149 00000 n
+0002501302 00000 n
+0002501454 00000 n
+0002501607 00000 n
+0002501760 00000 n
+0002501913 00000 n
+0002502066 00000 n
+0002502219 00000 n
+0002502372 00000 n
+0002502525 00000 n
+0002502678 00000 n
+0002502830 00000 n
+0002502983 00000 n
+0002503136 00000 n
+0002503289 00000 n
+0002503442 00000 n
+0002503595 00000 n
+0002503747 00000 n
+0002503900 00000 n
+0002504052 00000 n
+0002504205 00000 n
+0002504357 00000 n
+0002504510 00000 n
+0002504662 00000 n
+0002504815 00000 n
+0002504968 00000 n
+0002505120 00000 n
+0002505273 00000 n
+0002505426 00000 n
+0002505578 00000 n
+0002505731 00000 n
+0002505884 00000 n
+0002506036 00000 n
+0002506189 00000 n
+0002506342 00000 n
+0002506495 00000 n
+0002506647 00000 n
+0002506799 00000 n
+0002506950 00000 n
+0002507096 00000 n
+0002507248 00000 n
+0002507400 00000 n
+0002507551 00000 n
+0002507703 00000 n
+0002507856 00000 n
+0002508008 00000 n
+0002508160 00000 n
+0002508313 00000 n
+0002508465 00000 n
+0002508617 00000 n
+0002508770 00000 n
+0002508918 00000 n
+0002509070 00000 n
+0002509223 00000 n
+0002509375 00000 n
+0002509528 00000 n
+0002509681 00000 n
+0002509834 00000 n
+0002509986 00000 n
+0002510139 00000 n
+0002510292 00000 n
+0002510445 00000 n
+0002510597 00000 n
+0002510750 00000 n
+0002510903 00000 n
+0002511055 00000 n
+0002511208 00000 n
+0002511361 00000 n
+0002511514 00000 n
+0002511667 00000 n
+0002511818 00000 n
+0002511971 00000 n
+0002512123 00000 n
+0002512276 00000 n
+0002512429 00000 n
+0002512582 00000 n
+0002512735 00000 n
+0002512887 00000 n
+0002513040 00000 n
+0002513193 00000 n
+0002513346 00000 n
+0002513499 00000 n
+0002513652 00000 n
+0002513804 00000 n
+0002513956 00000 n
+0002514108 00000 n
+0002514259 00000 n
+0002514412 00000 n
+0002514565 00000 n
+0002514718 00000 n
+0002514871 00000 n
+0002515024 00000 n
+0002515175 00000 n
+0002515326 00000 n
+0002515542 00000 n
+0002497140 00000 n
+0002491739 00000 n
+0002515477 00000 n
+0002522044 00000 n
+0002522197 00000 n
+0002522350 00000 n
+0002522502 00000 n
+0002522655 00000 n
+0002522808 00000 n
+0002522961 00000 n
+0002523112 00000 n
+0002523265 00000 n
+0002523417 00000 n
+0002523570 00000 n
+0002523723 00000 n
+0002523876 00000 n
+0002524029 00000 n
+0002524181 00000 n
+0002524334 00000 n
+0002524487 00000 n
+0002524640 00000 n
+0002524793 00000 n
+0002524946 00000 n
+0002525099 00000 n
+0002525252 00000 n
+0002525405 00000 n
+0002525558 00000 n
+0002525710 00000 n
+0002525862 00000 n
+0002526015 00000 n
+0002526168 00000 n
+0002526321 00000 n
+0002526473 00000 n
+0002526625 00000 n
+0002526777 00000 n
+0002526929 00000 n
+0002527081 00000 n
+0002527233 00000 n
+0002527386 00000 n
+0002527539 00000 n
+0002527692 00000 n
+0002527844 00000 n
+0002527995 00000 n
+0002528147 00000 n
+0002528300 00000 n
+0002528453 00000 n
+0002528606 00000 n
+0002528759 00000 n
+0002528912 00000 n
+0002529065 00000 n
+0002529218 00000 n
+0002529370 00000 n
+0002529523 00000 n
+0002529675 00000 n
+0002529828 00000 n
+0002529978 00000 n
+0002530131 00000 n
+0002530284 00000 n
+0002530436 00000 n
+0002530588 00000 n
+0002530741 00000 n
+0002530894 00000 n
+0002531045 00000 n
+0002531197 00000 n
+0002531350 00000 n
+0002531502 00000 n
+0002531655 00000 n
+0002531808 00000 n
+0002531961 00000 n
+0002532113 00000 n
+0002532266 00000 n
+0002532418 00000 n
+0002532571 00000 n
+0002532722 00000 n
+0002532875 00000 n
+0002533028 00000 n
+0002533181 00000 n
+0002533334 00000 n
+0002533486 00000 n
+0002533638 00000 n
+0002533790 00000 n
+0002533942 00000 n
+0002534095 00000 n
+0002534247 00000 n
+0002534400 00000 n
+0002534553 00000 n
+0002534706 00000 n
+0002534859 00000 n
+0002535011 00000 n
+0002535164 00000 n
+0002535317 00000 n
+0002535470 00000 n
+0002535621 00000 n
+0002535774 00000 n
+0002535927 00000 n
+0002536080 00000 n
+0002536233 00000 n
+0002536386 00000 n
+0002536539 00000 n
+0002536692 00000 n
+0002536845 00000 n
+0002536998 00000 n
+0002537150 00000 n
+0002537302 00000 n
+0002537454 00000 n
+0002537607 00000 n
+0002537760 00000 n
+0002537913 00000 n
+0002538066 00000 n
+0002538217 00000 n
+0002538368 00000 n
+0002545347 00000 n
+0002538580 00000 n
+0002520825 00000 n
+0002515645 00000 n
+0002538515 00000 n
+0002545500 00000 n
+0002545653 00000 n
+0002545805 00000 n
+0002545958 00000 n
+0002546110 00000 n
+0002546263 00000 n
+0002546415 00000 n
+0002546568 00000 n
+0002546719 00000 n
+0002546872 00000 n
+0002547025 00000 n
+0002547176 00000 n
+0002547329 00000 n
+0002547482 00000 n
+0002547635 00000 n
+0002547787 00000 n
+0002547938 00000 n
+0002548091 00000 n
+0002548244 00000 n
+0002548397 00000 n
+0002548549 00000 n
+0002548702 00000 n
+0002548855 00000 n
+0002549007 00000 n
+0002549160 00000 n
+0002549311 00000 n
+0002549462 00000 n
+0002549615 00000 n
+0002549768 00000 n
+0002549920 00000 n
+0002550073 00000 n
+0002550226 00000 n
+0002550379 00000 n
+0002550531 00000 n
+0002550683 00000 n
+0002550836 00000 n
+0002550989 00000 n
+0002551142 00000 n
+0002551295 00000 n
+0002551448 00000 n
+0002551601 00000 n
+0002551754 00000 n
+0002551907 00000 n
+0002552060 00000 n
+0002552212 00000 n
+0002552364 00000 n
+0002552517 00000 n
+0002552669 00000 n
+0002552821 00000 n
+0002552974 00000 n
+0002553127 00000 n
+0002553279 00000 n
+0002553432 00000 n
+0002553583 00000 n
+0002553732 00000 n
+0002553883 00000 n
+0002554035 00000 n
+0002554188 00000 n
+0002554340 00000 n
+0002554492 00000 n
+0002554645 00000 n
+0002554798 00000 n
+0002554951 00000 n
+0002555104 00000 n
+0002555256 00000 n
+0002555407 00000 n
+0002555559 00000 n
+0002555711 00000 n
+0002555864 00000 n
+0002556017 00000 n
+0002556170 00000 n
+0002556322 00000 n
+0002556474 00000 n
+0002556626 00000 n
+0002556778 00000 n
+0002556927 00000 n
+0002557076 00000 n
+0002557229 00000 n
+0002557382 00000 n
+0002557535 00000 n
+0002557688 00000 n
+0002557840 00000 n
+0002557993 00000 n
+0002558146 00000 n
+0002558299 00000 n
+0002558451 00000 n
+0002558604 00000 n
+0002558757 00000 n
+0002558910 00000 n
+0002559062 00000 n
+0002559215 00000 n
+0002559368 00000 n
+0002559521 00000 n
+0002559674 00000 n
+0002559826 00000 n
+0002559979 00000 n
+0002560131 00000 n
+0002560283 00000 n
+0002560435 00000 n
+0002560587 00000 n
+0002560739 00000 n
+0002560891 00000 n
+0002561042 00000 n
+0002561195 00000 n
+0002561348 00000 n
+0002561501 00000 n
+0002561653 00000 n
+0002561806 00000 n
+0002561958 00000 n
+0002562109 00000 n
+0002569360 00000 n
+0002562323 00000 n
+0002544098 00000 n
+0002538683 00000 n
+0002562258 00000 n
+0002569512 00000 n
+0002569665 00000 n
+0002569817 00000 n
+0002569970 00000 n
+0002570123 00000 n
+0002570276 00000 n
+0002570429 00000 n
+0002570582 00000 n
+0002570733 00000 n
+0002570886 00000 n
+0002571039 00000 n
+0002571192 00000 n
+0002571345 00000 n
+0002571498 00000 n
+0002571651 00000 n
+0002571803 00000 n
+0002571956 00000 n
+0002572108 00000 n
+0002572261 00000 n
+0002572413 00000 n
+0002572564 00000 n
+0002572717 00000 n
+0002572870 00000 n
+0002573022 00000 n
+0002573175 00000 n
+0002573327 00000 n
+0002573479 00000 n
+0002573632 00000 n
+0002573785 00000 n
+0002573938 00000 n
+0002574090 00000 n
+0002574243 00000 n
+0002574396 00000 n
+0002574548 00000 n
+0002574700 00000 n
+0002574853 00000 n
+0002575006 00000 n
+0002575158 00000 n
+0002575310 00000 n
+0002575463 00000 n
+0002575615 00000 n
+0002575768 00000 n
+0002575921 00000 n
+0002576074 00000 n
+0002576226 00000 n
+0002576379 00000 n
+0002576531 00000 n
+0002576684 00000 n
+0002576837 00000 n
+0002576989 00000 n
+0002577142 00000 n
+0002577295 00000 n
+0002577447 00000 n
+0002577599 00000 n
+0002577752 00000 n
+0002577903 00000 n
+0002578053 00000 n
+0002578204 00000 n
+0002578356 00000 n
+0002578508 00000 n
+0002578661 00000 n
+0002578814 00000 n
+0002578966 00000 n
+0002579118 00000 n
+0002579271 00000 n
+0002579424 00000 n
+0002579575 00000 n
+0002579728 00000 n
+0002579880 00000 n
+0002580032 00000 n
+0002580185 00000 n
+0002580337 00000 n
+0002580490 00000 n
+0002580642 00000 n
+0002580795 00000 n
+0002580948 00000 n
+0002581100 00000 n
+0002581251 00000 n
+0002581404 00000 n
+0002581557 00000 n
+0002581710 00000 n
+0002581861 00000 n
+0002582013 00000 n
+0002582166 00000 n
+0002582319 00000 n
+0002582472 00000 n
+0002582625 00000 n
+0002582778 00000 n
+0002582930 00000 n
+0002583083 00000 n
+0002583236 00000 n
+0002583389 00000 n
+0002583541 00000 n
+0002583694 00000 n
+0002583847 00000 n
+0002584000 00000 n
+0002584153 00000 n
+0002584306 00000 n
+0002584459 00000 n
+0002584612 00000 n
+0002584764 00000 n
+0002584917 00000 n
+0002585070 00000 n
+0002585223 00000 n
+0002585376 00000 n
+0002585528 00000 n
+0002585681 00000 n
+0002585832 00000 n
+0002585985 00000 n
+0002586138 00000 n
+0002586291 00000 n
+0002586443 00000 n
+0002586596 00000 n
+0002586748 00000 n
+0002586899 00000 n
+0002593395 00000 n
+0002587114 00000 n
+0002568061 00000 n
+0002562426 00000 n
+0002587049 00000 n
+0002593548 00000 n
+0002593701 00000 n
+0002593854 00000 n
+0002594007 00000 n
+0002594159 00000 n
+0002594311 00000 n
+0002594463 00000 n
+0002594616 00000 n
+0002594762 00000 n
+0002594915 00000 n
+0002595068 00000 n
+0002595221 00000 n
+0002595373 00000 n
+0002595522 00000 n
+0002595675 00000 n
+0002595828 00000 n
+0002595980 00000 n
+0002596131 00000 n
+0002596283 00000 n
+0002596436 00000 n
+0002596589 00000 n
+0002596742 00000 n
+0002596894 00000 n
+0002597047 00000 n
+0002597200 00000 n
+0002597353 00000 n
+0002597505 00000 n
+0002597658 00000 n
+0002597811 00000 n
+0002597964 00000 n
+0002598115 00000 n
+0002598268 00000 n
+0002598420 00000 n
+0002598573 00000 n
+0002598726 00000 n
+0002598879 00000 n
+0002599032 00000 n
+0002599185 00000 n
+0002599338 00000 n
+0002599491 00000 n
+0002599643 00000 n
+0002599795 00000 n
+0002599948 00000 n
+0002600101 00000 n
+0002600254 00000 n
+0002600406 00000 n
+0002600559 00000 n
+0002600711 00000 n
+0002600861 00000 n
+0002601007 00000 n
+0002601160 00000 n
+0002601312 00000 n
+0002601465 00000 n
+0002601618 00000 n
+0002601771 00000 n
+0002601924 00000 n
+0002602077 00000 n
+0002602230 00000 n
+0002602383 00000 n
+0002602535 00000 n
+0002602688 00000 n
+0002602837 00000 n
+0002602990 00000 n
+0002603143 00000 n
+0002603296 00000 n
+0002603449 00000 n
+0002603602 00000 n
+0002603755 00000 n
+0002603907 00000 n
+0002604060 00000 n
+0002604213 00000 n
+0002604366 00000 n
+0002604518 00000 n
+0002604670 00000 n
+0002604823 00000 n
+0002604975 00000 n
+0002605127 00000 n
+0002605280 00000 n
+0002605433 00000 n
+0002605586 00000 n
+0002605739 00000 n
+0002605892 00000 n
+0002606045 00000 n
+0002606197 00000 n
+0002606348 00000 n
+0002606501 00000 n
+0002606654 00000 n
+0002606807 00000 n
+0002606959 00000 n
+0002607112 00000 n
+0002607265 00000 n
+0002607418 00000 n
+0002607571 00000 n
+0002607724 00000 n
+0002607877 00000 n
+0002608030 00000 n
+0002608183 00000 n
+0002608336 00000 n
+0002608488 00000 n
+0002608640 00000 n
+0002608793 00000 n
+0002608946 00000 n
+0002609099 00000 n
+0002609251 00000 n
+0002609403 00000 n
+0002609554 00000 n
+0002609705 00000 n
+0002615317 00000 n
+0002609920 00000 n
+0002592176 00000 n
+0002587217 00000 n
+0002609855 00000 n
+0002849115 00000 n
+0002615469 00000 n
+0002615622 00000 n
+0002615774 00000 n
+0002615927 00000 n
+0002616079 00000 n
+0002616231 00000 n
+0002616384 00000 n
+0002616537 00000 n
+0002616688 00000 n
+0002616841 00000 n
+0002616993 00000 n
+0002617145 00000 n
+0002617298 00000 n
+0002617450 00000 n
+0002617602 00000 n
+0002617755 00000 n
+0002617908 00000 n
+0002618061 00000 n
+0002618212 00000 n
+0002618363 00000 n
+0002618515 00000 n
+0002618667 00000 n
+0002618819 00000 n
+0002618971 00000 n
+0002619122 00000 n
+0002619274 00000 n
+0002619425 00000 n
+0002619576 00000 n
+0002619728 00000 n
+0002619880 00000 n
+0002620032 00000 n
+0002620183 00000 n
+0002620334 00000 n
+0002620486 00000 n
+0002620637 00000 n
+0002620789 00000 n
+0002620941 00000 n
+0002621093 00000 n
+0002621245 00000 n
+0002621396 00000 n
+0002621547 00000 n
+0002621699 00000 n
+0002621851 00000 n
+0002622002 00000 n
+0002622154 00000 n
+0002622306 00000 n
+0002622457 00000 n
+0002622609 00000 n
+0002622761 00000 n
+0002622913 00000 n
+0002623064 00000 n
+0002623215 00000 n
+0002623366 00000 n
+0002623517 00000 n
+0002623668 00000 n
+0002623819 00000 n
+0002623969 00000 n
+0002624118 00000 n
+0002624270 00000 n
+0002624422 00000 n
+0002624573 00000 n
+0002624725 00000 n
+0002624877 00000 n
+0002625028 00000 n
+0002625180 00000 n
+0002625332 00000 n
+0002625484 00000 n
+0002625636 00000 n
+0002625788 00000 n
+0002625939 00000 n
+0002626091 00000 n
+0002626243 00000 n
+0002626395 00000 n
+0002626545 00000 n
+0002626697 00000 n
+0002626849 00000 n
+0002627001 00000 n
+0002627151 00000 n
+0002627303 00000 n
+0002627455 00000 n
+0002627607 00000 n
+0002627759 00000 n
+0002627910 00000 n
+0002628059 00000 n
+0002628211 00000 n
+0002628363 00000 n
+0002628515 00000 n
+0002628666 00000 n
+0002628818 00000 n
+0002628970 00000 n
+0002629121 00000 n
+0002629270 00000 n
+0002629422 00000 n
+0002629573 00000 n
+0002629725 00000 n
+0002629877 00000 n
+0002630028 00000 n
+0002630180 00000 n
+0002630331 00000 n
+0002630483 00000 n
+0002630635 00000 n
+0002630787 00000 n
+0002630940 00000 n
+0002631090 00000 n
+0002631242 00000 n
+0002631395 00000 n
+0002631547 00000 n
+0002636921 00000 n
+0002631763 00000 n
+0002614098 00000 n
+0002610023 00000 n
+0002631698 00000 n
+0002637073 00000 n
+0002637224 00000 n
+0002637376 00000 n
+0002637528 00000 n
+0002637680 00000 n
+0002637833 00000 n
+0002637985 00000 n
+0002638138 00000 n
+0002638289 00000 n
+0002638442 00000 n
+0002638595 00000 n
+0002638748 00000 n
+0002638900 00000 n
+0002639053 00000 n
+0002639204 00000 n
+0002639356 00000 n
+0002639508 00000 n
+0002639661 00000 n
+0002639813 00000 n
+0002639964 00000 n
+0002640117 00000 n
+0002640270 00000 n
+0002640422 00000 n
+0002640575 00000 n
+0002640728 00000 n
+0002640880 00000 n
+0002641033 00000 n
+0002641186 00000 n
+0002641339 00000 n
+0002641492 00000 n
+0002641645 00000 n
+0002641797 00000 n
+0002641950 00000 n
+0002642103 00000 n
+0002642255 00000 n
+0002642408 00000 n
+0002642561 00000 n
+0002642714 00000 n
+0002642866 00000 n
+0002643018 00000 n
+0002643170 00000 n
+0002643322 00000 n
+0002643475 00000 n
+0002643628 00000 n
+0002643781 00000 n
+0002643932 00000 n
+0002644085 00000 n
+0002644237 00000 n
+0002644390 00000 n
+0002644542 00000 n
+0002644695 00000 n
+0002644848 00000 n
+0002644999 00000 n
+0002645151 00000 n
+0002645300 00000 n
+0002645452 00000 n
+0002645605 00000 n
+0002645758 00000 n
+0002645911 00000 n
+0002646063 00000 n
+0002646215 00000 n
+0002646368 00000 n
+0002646521 00000 n
+0002646674 00000 n
+0002646825 00000 n
+0002646978 00000 n
+0002647131 00000 n
+0002647284 00000 n
+0002647437 00000 n
+0002647590 00000 n
+0002647741 00000 n
+0002647894 00000 n
+0002648047 00000 n
+0002648200 00000 n
+0002648352 00000 n
+0002648505 00000 n
+0002648657 00000 n
+0002648810 00000 n
+0002648963 00000 n
+0002649116 00000 n
+0002649268 00000 n
+0002649421 00000 n
+0002649570 00000 n
+0002649723 00000 n
+0002649876 00000 n
+0002650029 00000 n
+0002650180 00000 n
+0002650332 00000 n
+0002650483 00000 n
+0002655464 00000 n
+0002650698 00000 n
+0002635882 00000 n
+0002631894 00000 n
+0002650633 00000 n
+0002655616 00000 n
+0002655768 00000 n
+0002655921 00000 n
+0002656074 00000 n
+0002656227 00000 n
+0002656380 00000 n
+0002656532 00000 n
+0002656683 00000 n
+0002656832 00000 n
+0002656985 00000 n
+0002657138 00000 n
+0002657291 00000 n
+0002657444 00000 n
+0002657595 00000 n
+0002657748 00000 n
+0002657901 00000 n
+0002658054 00000 n
+0002658207 00000 n
+0002658359 00000 n
+0002658511 00000 n
+0002658664 00000 n
+0002658817 00000 n
+0002658970 00000 n
+0002659123 00000 n
+0002659276 00000 n
+0002659428 00000 n
+0002659581 00000 n
+0002659734 00000 n
+0002659886 00000 n
+0002660038 00000 n
+0002660191 00000 n
+0002660343 00000 n
+0002660496 00000 n
+0002660649 00000 n
+0002660801 00000 n
+0002660953 00000 n
+0002661105 00000 n
+0002661257 00000 n
+0002661410 00000 n
+0002661563 00000 n
+0002661716 00000 n
+0002661867 00000 n
+0002662014 00000 n
+0002662165 00000 n
+0002662317 00000 n
+0002662470 00000 n
+0002662623 00000 n
+0002662776 00000 n
+0002662929 00000 n
+0002663081 00000 n
+0002663232 00000 n
+0002663381 00000 n
+0002663534 00000 n
+0002663687 00000 n
+0002663840 00000 n
+0002663992 00000 n
+0002664144 00000 n
+0002664296 00000 n
+0002664449 00000 n
+0002664602 00000 n
+0002664755 00000 n
+0002664907 00000 n
+0002665060 00000 n
+0002665213 00000 n
+0002665366 00000 n
+0002665518 00000 n
+0002665670 00000 n
+0002665821 00000 n
+0002665973 00000 n
+0002666125 00000 n
+0002666276 00000 n
+0002666428 00000 n
+0002666581 00000 n
+0002666734 00000 n
+0002666887 00000 n
+0002667040 00000 n
+0002667192 00000 n
+0002667343 00000 n
+0002667495 00000 n
+0002667648 00000 n
+0002667800 00000 n
+0002667952 00000 n
+0002668104 00000 n
+0002668255 00000 n
+0002668407 00000 n
+0002668559 00000 n
+0002668710 00000 n
+0002668863 00000 n
+0002669015 00000 n
+0002669166 00000 n
+0002673075 00000 n
+0002669381 00000 n
+0002654415 00000 n
+0002650801 00000 n
+0002669316 00000 n
+0002673228 00000 n
+0002673380 00000 n
+0002673533 00000 n
+0002673685 00000 n
+0002673837 00000 n
+0002673990 00000 n
+0002674142 00000 n
+0002674295 00000 n
+0002674447 00000 n
+0002674600 00000 n
+0002674752 00000 n
+0002674905 00000 n
+0002675058 00000 n
+0002675210 00000 n
+0002675362 00000 n
+0002675514 00000 n
+0002675667 00000 n
+0002675819 00000 n
+0002675972 00000 n
+0002676125 00000 n
+0002676277 00000 n
+0002676428 00000 n
+0002676580 00000 n
+0002676733 00000 n
+0002676886 00000 n
+0002677039 00000 n
+0002677191 00000 n
+0002677343 00000 n
+0002677495 00000 n
+0002677646 00000 n
+0002677798 00000 n
+0002677948 00000 n
+0002678100 00000 n
+0002678252 00000 n
+0002678404 00000 n
+0002678556 00000 n
+0002678708 00000 n
+0002678860 00000 n
+0002679013 00000 n
+0002679166 00000 n
+0002679319 00000 n
+0002679469 00000 n
+0002679620 00000 n
+0002679772 00000 n
+0002679924 00000 n
+0002680076 00000 n
+0002680228 00000 n
+0002680380 00000 n
+0002680532 00000 n
+0002680684 00000 n
+0002680836 00000 n
+0002680988 00000 n
+0002681140 00000 n
+0002681292 00000 n
+0002681444 00000 n
+0002681596 00000 n
+0002681748 00000 n
+0002681899 00000 n
+0002682051 00000 n
+0002682203 00000 n
+0002682354 00000 n
+0002682506 00000 n
+0002682658 00000 n
+0002682809 00000 n
+0002682960 00000 n
+0002683111 00000 n
+0002683263 00000 n
+0002683414 00000 n
+0002683566 00000 n
+0002683718 00000 n
+0002683870 00000 n
+0002684021 00000 n
+0002684173 00000 n
+0002684320 00000 n
+0002684472 00000 n
+0002684624 00000 n
+0002684776 00000 n
+0002684928 00000 n
+0002685080 00000 n
+0002685231 00000 n
+0002685383 00000 n
+0002689333 00000 n
+0002685598 00000 n
+0002672116 00000 n
+0002669512 00000 n
+0002685533 00000 n
+0002689485 00000 n
+0002689637 00000 n
+0002689789 00000 n
+0002689941 00000 n
+0002690093 00000 n
+0002690245 00000 n
+0002690397 00000 n
+0002690549 00000 n
+0002690701 00000 n
+0002690854 00000 n
+0002691005 00000 n
+0002691157 00000 n
+0002691309 00000 n
+0002691461 00000 n
+0002691613 00000 n
+0002691765 00000 n
+0002691916 00000 n
+0002692069 00000 n
+0002692221 00000 n
+0002692373 00000 n
+0002692524 00000 n
+0002692676 00000 n
+0002692828 00000 n
+0002692980 00000 n
+0002693132 00000 n
+0002693284 00000 n
+0002693437 00000 n
+0002693589 00000 n
+0002693740 00000 n
+0002693892 00000 n
+0002694045 00000 n
+0002694197 00000 n
+0002694349 00000 n
+0002694500 00000 n
+0002694651 00000 n
+0002694803 00000 n
+0002694955 00000 n
+0002695107 00000 n
+0002695260 00000 n
+0002695412 00000 n
+0002695564 00000 n
+0002695716 00000 n
+0002695868 00000 n
+0002696020 00000 n
+0002696172 00000 n
+0002696324 00000 n
+0002696477 00000 n
+0002696630 00000 n
+0002696783 00000 n
+0002696936 00000 n
+0002697088 00000 n
+0002697240 00000 n
+0002697392 00000 n
+0002697544 00000 n
+0002697696 00000 n
+0002697848 00000 n
+0002698001 00000 n
+0002698153 00000 n
+0002698305 00000 n
+0002698457 00000 n
+0002698609 00000 n
+0002698762 00000 n
+0002698914 00000 n
+0002702841 00000 n
+0002699128 00000 n
+0002688554 00000 n
+0002685715 00000 n
+0002699063 00000 n
+0002702993 00000 n
+0002703145 00000 n
+0002703296 00000 n
+0002703447 00000 n
+0002703598 00000 n
+0002703750 00000 n
+0002703902 00000 n
+0002704053 00000 n
+0002704204 00000 n
+0002704356 00000 n
+0002704508 00000 n
+0002704660 00000 n
+0002704812 00000 n
+0002704964 00000 n
+0002705117 00000 n
+0002705270 00000 n
+0002705423 00000 n
+0002705576 00000 n
+0002705728 00000 n
+0002705881 00000 n
+0002706034 00000 n
+0002706187 00000 n
+0002706340 00000 n
+0002706493 00000 n
+0002706645 00000 n
+0002706797 00000 n
+0002706949 00000 n
+0002707101 00000 n
+0002707253 00000 n
+0002707405 00000 n
+0002707557 00000 n
+0002707707 00000 n
+0002707857 00000 n
+0002708005 00000 n
+0002708157 00000 n
+0002708309 00000 n
+0002708461 00000 n
+0002708613 00000 n
+0002708764 00000 n
+0002708916 00000 n
+0002709068 00000 n
+0002709221 00000 n
+0002709371 00000 n
+0002709523 00000 n
+0002709675 00000 n
+0002709827 00000 n
+0002709979 00000 n
+0002710130 00000 n
+0002710282 00000 n
+0002710433 00000 n
+0002710583 00000 n
+0002710736 00000 n
+0002710889 00000 n
+0002711040 00000 n
+0002711192 00000 n
+0002711344 00000 n
+0002711496 00000 n
+0002711648 00000 n
+0002711800 00000 n
+0002711952 00000 n
+0002712103 00000 n
+0002712252 00000 n
+0002712403 00000 n
+0002712555 00000 n
+0002712708 00000 n
+0002712860 00000 n
+0002713013 00000 n
+0002713166 00000 n
+0002713318 00000 n
+0002713470 00000 n
+0002713622 00000 n
+0002713775 00000 n
+0002713927 00000 n
+0002714079 00000 n
+0002714230 00000 n
+0002718126 00000 n
+0002714445 00000 n
+0002701942 00000 n
+0002699231 00000 n
+0002714380 00000 n
+0002849248 00000 n
+0002718278 00000 n
+0002718429 00000 n
+0002718579 00000 n
+0002718731 00000 n
+0002718884 00000 n
+0002719037 00000 n
+0002719189 00000 n
+0002719340 00000 n
+0002719491 00000 n
+0002719643 00000 n
+0002719794 00000 n
+0002719946 00000 n
+0002720097 00000 n
+0002720249 00000 n
+0002720401 00000 n
+0002720553 00000 n
+0002720705 00000 n
+0002720857 00000 n
+0002721009 00000 n
+0002721160 00000 n
+0002721311 00000 n
+0002721461 00000 n
+0002721613 00000 n
+0002721765 00000 n
+0002721917 00000 n
+0002722068 00000 n
+0002722220 00000 n
+0002722372 00000 n
+0002722523 00000 n
+0002722675 00000 n
+0002722827 00000 n
+0002722979 00000 n
+0002723131 00000 n
+0002723282 00000 n
+0002723434 00000 n
+0002723586 00000 n
+0002723738 00000 n
+0002723890 00000 n
+0002724042 00000 n
+0002724193 00000 n
+0002724344 00000 n
+0002724496 00000 n
+0002724648 00000 n
+0002724799 00000 n
+0002724950 00000 n
+0002725101 00000 n
+0002725251 00000 n
+0002725401 00000 n
+0002725551 00000 n
+0002725702 00000 n
+0002725852 00000 n
+0002726004 00000 n
+0002726156 00000 n
+0002726308 00000 n
+0002726460 00000 n
+0002726612 00000 n
+0002726764 00000 n
+0002726916 00000 n
+0002727067 00000 n
+0002727219 00000 n
+0002727370 00000 n
+0002727522 00000 n
+0002727673 00000 n
+0002727825 00000 n
+0002727977 00000 n
+0002728129 00000 n
+0002728281 00000 n
+0002728433 00000 n
+0002728585 00000 n
+0002728736 00000 n
+0002728888 00000 n
+0002729039 00000 n
+0002729191 00000 n
+0002729343 00000 n
+0002729495 00000 n
+0002729647 00000 n
+0002729799 00000 n
+0002729951 00000 n
+0002730101 00000 n
+0002730252 00000 n
+0002730404 00000 n
+0002730556 00000 n
+0002730708 00000 n
+0002730860 00000 n
+0002731012 00000 n
+0002731165 00000 n
+0002731383 00000 n
+0002717117 00000 n
+0002714576 00000 n
+0002731318 00000 n
+0002840968 00000 n
+0002731675 00000 n
+0002731844 00000 n
+0002732145 00000 n
+0002732178 00000 n
+0002732567 00000 n
+0002733044 00000 n
+0002733185 00000 n
+0002733805 00000 n
+0002733842 00000 n
+0002734409 00000 n
+0002734722 00000 n
+0002735288 00000 n
+0002735955 00000 n
+0002737765 00000 n
+0002738002 00000 n
+0002740018 00000 n
+0002740294 00000 n
+0002741823 00000 n
+0002742067 00000 n
+0002750310 00000 n
+0002750596 00000 n
+0002756194 00000 n
+0002756450 00000 n
+0002773081 00000 n
+0002773549 00000 n
+0002787904 00000 n
+0002788453 00000 n
+0002794681 00000 n
+0002794931 00000 n
+0002807196 00000 n
+0002807580 00000 n
+0002819921 00000 n
+0002820511 00000 n
+0002831544 00000 n
+0002832023 00000 n
+0002840677 00000 n
+0002849341 00000 n
+0002849469 00000 n
+0002849597 00000 n
+0002849727 00000 n
+0002849861 00000 n
+0002849995 00000 n
+0002850129 00000 n
+0002850263 00000 n
+0002850367 00000 n
+0002850502 00000 n
+0002850596 00000 n
+0002850673 00000 n
+0003013957 00000 n
+0003014229 00000 n
+0003014749 00000 n
+0003015196 00000 n
+0003015700 00000 n
+0003016004 00000 n
+0003016279 00000 n
+0003016793 00000 n
+0003017239 00000 n
+0003017724 00000 n
+0003018246 00000 n
+0003018731 00000 n
+0003019245 00000 n
+0003019735 00000 n
+0003020265 00000 n
+0003020795 00000 n
+0003021325 00000 n
+0003021855 00000 n
+0003022385 00000 n
+0003023005 00000 n
+0003023773 00000 n
+0003024406 00000 n
+0003024995 00000 n
+0003025583 00000 n
+0003026171 00000 n
+0003026762 00000 n
+0003027351 00000 n
+0003027938 00000 n
+0003028525 00000 n
+0003029111 00000 n
+0003029701 00000 n
+0003030206 00000 n
+0003030718 00000 n
+0003031230 00000 n
+0003031688 00000 n
+0003032196 00000 n
+0003032806 00000 n
+0003033318 00000 n
+0003033723 00000 n
+0003034177 00000 n
+0003034662 00000 n
+0003035175 00000 n
+0003035759 00000 n
+0003036258 00000 n
+0003036826 00000 n
+0003037352 00000 n
+0003037867 00000 n
+0003038339 00000 n
+0003038797 00000 n
+0003039285 00000 n
+0003039793 00000 n
+0003040511 00000 n
+0003041167 00000 n
+0003041833 00000 n
+0003042493 00000 n
+0003043161 00000 n
+0003043849 00000 n
+0003044541 00000 n
+0003045163 00000 n
+0003045791 00000 n
+0003046434 00000 n
+0003047075 00000 n
+0003047712 00000 n
+0003048357 00000 n
+0003048990 00000 n
+0003049592 00000 n
+0003050145 00000 n
+0003050860 00000 n
+0003051740 00000 n
+0003052620 00000 n
+0003053500 00000 n
+0003054346 00000 n
+0003055226 00000 n
+0003056106 00000 n
+0003056986 00000 n
+0003057866 00000 n
+0003058746 00000 n
+0003059626 00000 n
+0003060506 00000 n
+0003061386 00000 n
+0003062266 00000 n
+0003063146 00000 n
+0003064026 00000 n
+0003064906 00000 n
+0003065786 00000 n
+0003066666 00000 n
+0003067546 00000 n
+0003068426 00000 n
+0003069306 00000 n
+0003070186 00000 n
+0003071066 00000 n
+0003071880 00000 n
+0003072562 00000 n
+0003073442 00000 n
+0003074128 00000 n
+0003074736 00000 n
+0003075544 00000 n
+0003076352 00000 n
+0003077160 00000 n
+0003077968 00000 n
+0003078776 00000 n
+0003079584 00000 n
+0003080392 00000 n
+0003081200 00000 n
+0003082008 00000 n
+0003082816 00000 n
+0003083624 00000 n
+0003084432 00000 n
+0003085240 00000 n
+0003086048 00000 n
+0003086856 00000 n
+0003087664 00000 n
+0003088472 00000 n
+0003089280 00000 n
+0003090088 00000 n
+0003090896 00000 n
+0003091704 00000 n
+0003092512 00000 n
+0003093320 00000 n
+0003094128 00000 n
+0003094936 00000 n
+0003095464 00000 n
+0003095978 00000 n
+0003096492 00000 n
+0003097006 00000 n
+0003097520 00000 n
+0003098010 00000 n
+0003098480 00000 n
+0003098960 00000 n
+0003099603 00000 n
+0003100182 00000 n
+0003100662 00000 n
+0003101142 00000 n
+0003101721 00000 n
+0003102267 00000 n
+0003102747 00000 n
+0003103227 00000 n
+0003103707 00000 n
+0003104187 00000 n
+0003104633 00000 n
+0003105177 00000 n
+0003105721 00000 n
+0003106265 00000 n
+0003107073 00000 n
+0003107881 00000 n
+0003108623 00000 n
+0003109167 00000 n
+0003109909 00000 n
+0003110453 00000 n
+0003110872 00000 n
+0003111341 00000 n
+0003111956 00000 n
+0003112431 00000 n
+0003112975 00000 n
+0003113519 00000 n
+0003114063 00000 n
+0003114607 00000 n
+0003115151 00000 n
+0003115695 00000 n
+0003116239 00000 n
+0003116783 00000 n
+0003117327 00000 n
+0003117885 00000 n
+0003118413 00000 n
+0003118941 00000 n
+0003119469 00000 n
+0003119997 00000 n
+0003120498 00000 n
+0003121082 00000 n
+0003121666 00000 n
+0003122250 00000 n
+0003122834 00000 n
+0003123373 00000 n
+0003123940 00000 n
+0003124471 00000 n
+0003125071 00000 n
+0003125671 00000 n
+0003126186 00000 n
+0003126770 00000 n
+0003127285 00000 n
+0003127869 00000 n
+0003128453 00000 n
+0003129037 00000 n
+0003129621 00000 n
+0003130205 00000 n
+0003130789 00000 n
+0003131346 00000 n
+0003131946 00000 n
+0003132546 00000 n
+0003133146 00000 n
+0003133746 00000 n
+0003134346 00000 n
+0003134946 00000 n
+0003135546 00000 n
+0003136146 00000 n
+0003136746 00000 n
+0003137346 00000 n
+0003137946 00000 n
+0003138546 00000 n
+0003139146 00000 n
+0003139579 00000 n
+0003140131 00000 n
+0003140683 00000 n
+0003141235 00000 n
+0003141787 00000 n
+0003142339 00000 n
+0003142891 00000 n
+0003143443 00000 n
+0003143952 00000 n
+0003144488 00000 n
+0003144971 00000 n
+0003145531 00000 n
+0003146091 00000 n
+0003146608 00000 n
+0003147070 00000 n
+0003147606 00000 n
+0003148053 00000 n
+0003148564 00000 n
+0003149364 00000 n
+0003150164 00000 n
+0003150964 00000 n
+0003151764 00000 n
+0003152564 00000 n
+0003153298 00000 n
+0003153700 00000 n
+0003154228 00000 n
+0003154756 00000 n
+0003155239 00000 n
+0003155751 00000 n
+0003156220 00000 n
+0003156681 00000 n
+0003157177 00000 n
+0003157673 00000 n
+0003158169 00000 n
+0003158729 00000 n
+0003159390 00000 n
+0003159885 00000 n
+0003160148 00000 n
+0003160340 00000 n
+0003160530 00000 n
+0003160722 00000 n
+0003160911 00000 n
+0003161100 00000 n
+0003161292 00000 n
+0003161482 00000 n
+0003161674 00000 n
+0003161864 00000 n
+0003162056 00000 n
+0003162246 00000 n
+0003162438 00000 n
+0003162628 00000 n
+0003162820 00000 n
+0003163009 00000 n
+0003163198 00000 n
+0003163390 00000 n
+0003163576 00000 n
+0003163768 00000 n
+0003163958 00000 n
+0003164150 00000 n
+0003164340 00000 n
+0003164532 00000 n
+0003164722 00000 n
+0003164907 00000 n
+0003165084 00000 n
+0003165262 00000 n
+0003165439 00000 n
+0003165617 00000 n
+0003165794 00000 n
+0003165972 00000 n
+0003166150 00000 n
+0003166331 00000 n
+0003166515 00000 n
+0003166697 00000 n
+0003166881 00000 n
+0003167063 00000 n
+0003167247 00000 n
+0003167452 00000 n
+0003167678 00000 n
+0003167903 00000 n
+0003168129 00000 n
+0003168354 00000 n
+0003168584 00000 n
+0003168808 00000 n
+0003169033 00000 n
+0003169259 00000 n
+0003169484 00000 n
+0003169712 00000 n
+0003169937 00000 n
+0003170163 00000 n
+0003170388 00000 n
+0003170614 00000 n
+0003170838 00000 n
+0003171064 00000 n
+0003171287 00000 n
+0003171507 00000 n
+0003171730 00000 n
+0003171953 00000 n
+0003172180 00000 n
+0003172404 00000 n
+0003172630 00000 n
+0003172854 00000 n
+0003173080 00000 n
+0003173304 00000 n
+0003173530 00000 n
+0003173754 00000 n
+0003173980 00000 n
+0003174203 00000 n
+0003174426 00000 n
+0003174652 00000 n
+0003174876 00000 n
+0003175102 00000 n
+0003175326 00000 n
+0003175552 00000 n
+0003175776 00000 n
+0003176005 00000 n
+0003176229 00000 n
+0003176455 00000 n
+0003176679 00000 n
+0003176905 00000 n
+0003177128 00000 n
+0003177351 00000 n
+0003177577 00000 n
+0003177802 00000 n
+0003178031 00000 n
+0003178255 00000 n
+0003178484 00000 n
+0003178708 00000 n
+0003178934 00000 n
+0003179158 00000 n
+0003179387 00000 n
+0003179612 00000 n
+0003179833 00000 n
+0003180058 00000 n
+0003180283 00000 n
+0003180511 00000 n
+0003180736 00000 n
+0003180966 00000 n
+0003181190 00000 n
+0003181416 00000 n
+0003181643 00000 n
+0003181869 00000 n
+0003182093 00000 n
+0003182321 00000 n
+0003182548 00000 n
+0003182772 00000 n
+0003182998 00000 n
+0003183225 00000 n
+0003183451 00000 n
+0003183675 00000 n
+0003183901 00000 n
+0003184121 00000 n
+0003184338 00000 n
+0003184547 00000 n
+0003184761 00000 n
+0003184973 00000 n
+0003185188 00000 n
+0003185399 00000 n
+0003185614 00000 n
+0003185825 00000 n
+0003186038 00000 n
+0003186253 00000 n
+0003186465 00000 n
+0003186676 00000 n
+0003186894 00000 n
+0003187109 00000 n
+0003187324 00000 n
+0003187542 00000 n
+0003187758 00000 n
+0003187976 00000 n
+0003188192 00000 n
+0003188410 00000 n
+0003188626 00000 n
+0003188844 00000 n
+0003189060 00000 n
+0003189278 00000 n
+0003189493 00000 n
+0003189708 00000 n
+0003189926 00000 n
+0003190142 00000 n
+0003190360 00000 n
+0003190575 00000 n
+0003190793 00000 n
+0003191010 00000 n
+0003191228 00000 n
+0003191444 00000 n
+0003191662 00000 n
+0003191878 00000 n
+0003192096 00000 n
+0003192311 00000 n
+0003192526 00000 n
+0003192744 00000 n
+0003192960 00000 n
+0003193178 00000 n
+0003193394 00000 n
+0003193612 00000 n
+0003193829 00000 n
+0003194047 00000 n
+0003194263 00000 n
+0003194481 00000 n
+0003194691 00000 n
+0003194909 00000 n
+0003195124 00000 n
+0003195339 00000 n
+0003195557 00000 n
+0003195774 00000 n
+0003195993 00000 n
+0003196212 00000 n
+0003196433 00000 n
+0003196651 00000 n
+0003196872 00000 n
+0003197091 00000 n
+0003197312 00000 n
+0003197530 00000 n
+0003197748 00000 n
+0003197967 00000 n
+0003198186 00000 n
+0003198404 00000 n
+0003198616 00000 n
+0003198837 00000 n
+0003199053 00000 n
+0003199271 00000 n
+0003199489 00000 n
+0003199712 00000 n
+0003199928 00000 n
+0003200148 00000 n
+0003200365 00000 n
+0003200581 00000 n
+0003200800 00000 n
+0003201017 00000 n
+0003201235 00000 n
+0003201452 00000 n
+0003201670 00000 n
+0003201886 00000 n
+0003202106 00000 n
+0003202322 00000 n
+0003202541 00000 n
+0003202751 00000 n
+0003202970 00000 n
+0003203188 00000 n
+0003203403 00000 n
+0003203625 00000 n
+0003203842 00000 n
+0003204062 00000 n
+0003204278 00000 n
+0003204499 00000 n
+0003204716 00000 n
+0003204937 00000 n
+0003205156 00000 n
+0003205376 00000 n
+0003205592 00000 n
+0003205810 00000 n
+0003206028 00000 n
+0003206247 00000 n
+0003206465 00000 n
+0003206677 00000 n
+0003206898 00000 n
+0003207114 00000 n
+0003207333 00000 n
+0003207553 00000 n
+0003207771 00000 n
+0003207987 00000 n
+0003208207 00000 n
+0003208423 00000 n
+0003208640 00000 n
+0003208858 00000 n
+0003209074 00000 n
+0003209295 00000 n
+0003209514 00000 n
+0003209738 00000 n
+0003209954 00000 n
+0003210172 00000 n
+0003210388 00000 n
+0003210606 00000 n
+0003210817 00000 n
+0003211035 00000 n
+0003211250 00000 n
+0003211465 00000 n
+0003211683 00000 n
+0003211899 00000 n
+0003212117 00000 n
+0003212337 00000 n
+0003212558 00000 n
+0003212774 00000 n
+0003212992 00000 n
+0003213208 00000 n
+0003213426 00000 n
+0003213641 00000 n
+0003213857 00000 n
+0003214078 00000 n
+0003214296 00000 n
+0003214517 00000 n
+0003214731 00000 n
+0003214949 00000 n
+0003215165 00000 n
+0003215383 00000 n
+0003215599 00000 n
+0003215817 00000 n
+0003216033 00000 n
+0003216251 00000 n
+0003216467 00000 n
+0003216682 00000 n
+0003216900 00000 n
+0003217119 00000 n
+0003217339 00000 n
+0003217555 00000 n
+0003217773 00000 n
+0003217990 00000 n
+0003218208 00000 n
+0003218429 00000 n
+0003218648 00000 n
+0003218847 00000 n
+0003219057 00000 n
+0003219267 00000 n
+0003219484 00000 n
+0003219700 00000 n
+0003219918 00000 n
+0003220134 00000 n
+0003220352 00000 n
+0003220568 00000 n
+0003220786 00000 n
+0003221002 00000 n
+0003221220 00000 n
+0003221435 00000 n
+0003221650 00000 n
+0003221868 00000 n
+0003222084 00000 n
+0003222301 00000 n
+0003222519 00000 n
+0003222736 00000 n
+0003222954 00000 n
+0003223171 00000 n
+0003223389 00000 n
+0003223605 00000 n
+0003223821 00000 n
+0003224059 00000 n
+0003224584 00000 n
+0003225098 00000 n
+0003225562 00000 n
+0003226056 00000 n
+0003226528 00000 n
+0003227026 00000 n
+0003227524 00000 n
+0003228022 00000 n
+0003228520 00000 n
+0003229216 00000 n
+0003229714 00000 n
+0003230212 00000 n
+0003230710 00000 n
+0003231154 00000 n
+0003231606 00000 n
+0003232208 00000 n
+0003232720 00000 n
+0003233209 00000 n
+0003233815 00000 n
+0003234442 00000 n
+0003234980 00000 n
+0003235518 00000 n
+0003235960 00000 n
+0003236603 00000 n
+0003237220 00000 n
+0003237725 00000 n
+0003238262 00000 n
+0003238745 00000 n
+0003239226 00000 n
+0003239634 00000 n
+0003240127 00000 n
+0003240655 00000 n
+0003241178 00000 n
+0003241698 00000 n
+0003242218 00000 n
+0003242738 00000 n
+0003243258 00000 n
+0003243797 00000 n
+0003244178 00000 n
+0003244658 00000 n
+0003245148 00000 n
+0003245739 00000 n
+0003246235 00000 n
+0003246753 00000 n
+0003246995 00000 n
+0003247247 00000 n
+0003247499 00000 n
+0003247751 00000 n
+0003248003 00000 n
+0003248253 00000 n
+0003248508 00000 n
+0003248766 00000 n
+0003249024 00000 n
+0003249278 00000 n
+0003249536 00000 n
+0003249794 00000 n
+0003250052 00000 n
+0003250302 00000 n
+0003250560 00000 n
+0003250818 00000 n
+0003251076 00000 n
+0003251334 00000 n
+0003251592 00000 n
+0003251846 00000 n
+0003252104 00000 n
+0003252362 00000 n
+0003252620 00000 n
+0003252869 00000 n
+0003253127 00000 n
+0003253385 00000 n
+0003253643 00000 n
+0003253897 00000 n
+0003254155 00000 n
+0003254413 00000 n
+0003254671 00000 n
+0003254924 00000 n
+0003255182 00000 n
+0003255440 00000 n
+0003255698 00000 n
+0003255956 00000 n
+0003256209 00000 n
+0003256467 00000 n
+0003256722 00000 n
+0003256978 00000 n
+0003257236 00000 n
+0003257494 00000 n
+0003257750 00000 n
+0003258006 00000 n
+0003258264 00000 n
+0003258522 00000 n
+0003258780 00000 n
+0003259037 00000 n
+0003259295 00000 n
+0003259553 00000 n
+0003259810 00000 n
+0003260068 00000 n
+0003260326 00000 n
+0003260584 00000 n
+0003260839 00000 n
+0003261089 00000 n
+0003261256 00000 n
+0003261463 00000 n
+0003261672 00000 n
+0003261863 00000 n
+0003262088 00000 n
+0003262316 00000 n
+0003262530 00000 n
+0003262705 00000 n
+0003262906 00000 n
+0003263145 00000 n
+0003263398 00000 n
+0003263662 00000 n
+0003263959 00000 n
+0003264256 00000 n
+0003264553 00000 n
+0003264841 00000 n
+0003265120 00000 n
+0003265399 00000 n
+0003265678 00000 n
+0003265957 00000 n
+0003266202 00000 n
+0003266406 00000 n
+0003266603 00000 n
+0003266817 00000 n
+0003267028 00000 n
+0003267204 00000 n
+0003267415 00000 n
+0003267631 00000 n
+0003267856 00000 n
+0003268081 00000 n
+0003268306 00000 n
+0003268533 00000 n
+0003268760 00000 n
+0003268981 00000 n
+0003269197 00000 n
+0003269413 00000 n
+0003269659 00000 n
+0003269900 00000 n
+0003270136 00000 n
+0003270332 00000 n
+0003270456 00000 n
+0003270581 00000 n
+0003270706 00000 n
+0003270830 00000 n
+0003270952 00000 n
+0003271081 00000 n
+0003271216 00000 n
+0003271351 00000 n
+0003271484 00000 n
+0003271618 00000 n
+0003271753 00000 n
+0003271888 00000 n
+0003272023 00000 n
+0003272157 00000 n
+0003272292 00000 n
+0003272427 00000 n
+0003272562 00000 n
+0003272696 00000 n
+0003272830 00000 n
+0003272963 00000 n
+0003273096 00000 n
+0003273229 00000 n
+0003273362 00000 n
+0003273495 00000 n
+0003273628 00000 n
+0003273761 00000 n
+0003273893 00000 n
+0003274026 00000 n
+0003274159 00000 n
+0003274292 00000 n
+0003274424 00000 n
+0003274557 00000 n
+0003274690 00000 n
+0003274823 00000 n
+0003274955 00000 n
+0003275088 00000 n
+0003275221 00000 n
+0003275354 00000 n
+0003275487 00000 n
+0003275619 00000 n
+0003275752 00000 n
+0003275885 00000 n
+0003276018 00000 n
+0003276150 00000 n
+0003276282 00000 n
+0003276414 00000 n
+0003276547 00000 n
+0003276680 00000 n
+0003276825 00000 n
+0003277039 00000 n
+0003277242 00000 n
+0003277468 00000 n
+0003277720 00000 n
+0003277918 00000 n
+0003278126 00000 n
+0003278340 00000 n
+0003278522 00000 n
+0003278665 00000 n
+0003278808 00000 n
+0003278951 00000 n
+0003279094 00000 n
+0003279237 00000 n
+0003279380 00000 n
+0003279523 00000 n
+0003279666 00000 n
+0003279788 00000 n
+0003279967 00000 n
+0003280218 00000 n
+0003280506 00000 n
+0003280785 00000 n
+0003281036 00000 n
+0003281255 00000 n
+0003281425 00000 n
+0003281555 00000 n
+0003281690 00000 n
+0003281824 00000 n
+0003281957 00000 n
+0003282090 00000 n
+0003282223 00000 n
+0003282356 00000 n
+0003282524 00000 n
+0003282736 00000 n
+0003282918 00000 n
+0003283040 00000 n
+0003283211 00000 n
+0003283385 00000 n
+0003283522 00000 n
+0003283626 00000 n
+0003283668 00000 n
+0003283874 00000 n
+trailer
+<< /Size 17862
+/Root 17860 0 R
+/Info 17861 0 R
+/ID [<AD58CD1E1F74AE011405D69B360B4AF8> <AD58CD1E1F74AE011405D69B360B4AF8>] >>
+startxref
+3284207
+%%EOF
diff --git a/final/offload/doc/doxygen/config b/final/offload/doc/doxygen/config
new file mode 100755
index 0000000..d45b696
--- /dev/null
+++ b/final/offload/doc/doxygen/config
@@ -0,0 +1,2328 @@
+# Doxyfile 1.8.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = "Intel&reg;&nbsp;Offload Runtime Library"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = doc/doxygen/generated
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH = src/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH = src/
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS = *.c *.h *.cpp *.f90
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE = src/imported src/rdtsc.h
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+# defined cascading style sheet that is included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet file to the output directory. For an example
+# see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavours of web server based searching depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools. See
+# the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+# replace them by respectively the title of the page, the current date and time,
+# only the current date, the version number of doxygen, the project name (see
+# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER = doc/doxygen/header.tex
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = YES
+
+# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED = COI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have an
+# all uppercase name, and do not end with a semicolon. Such function macros are
+# typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have an unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font n the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP = YES
diff --git a/final/offload/doc/doxygen/header.tex b/final/offload/doc/doxygen/header.tex
new file mode 100755
index 0000000..5e963c2
--- /dev/null
+++ b/final/offload/doc/doxygen/header.tex
@@ -0,0 +1,90 @@
+% Latex header for doxygen 1.8.3.1
+\documentclass{book}
+\usepackage[a4paper,top=2.5cm,bottom=2.5cm,left=2.5cm,right=2.5cm]{geometry}
+\usepackage{makeidx}
+\usepackage{natbib}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{ifthen}
+\usepackage[table]{xcolor}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{ifpdf}
+\ifpdf
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\else
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\usepackage{pspicture}
+\fi
+\usepackage[utf8]{inputenc}
+\usepackage{mathptmx}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\usepackage{sectsty}
+\usepackage{amssymb}
+\usepackage[titles]{tocloft}
+\usepackage{doxygen}
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=4,numbers=left }
+\makeindex
+\setcounter{tocdepth}{3}
+\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\familydefault}{\sfdefault}
+\hfuzz=15pt
+\setlength{\emergencystretch}{15pt}
+\hbadness=750
+\tolerance=750
+\begin{document}
+\hypersetup{pageanchor=false,citecolor=blue}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Large Intel\textsuperscript{\textregistered} Offload Runtime Library }\\
+\vspace*{1cm}
+{\large Generated by Doxygen $doxygenversion }\\
+\vspace*{0.5cm}
+{\small $datetime }\\
+\end{center}
+\end{titlepage}
+
+{\bf FTC Optimization Notice}
+
+Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for
+optimizations that are not unique to Intel microprocessors. These optimizations include SSE2,
+SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the
+availability, functionality, or effectiveness of any optimization on microprocessors not
+manufactured by Intel.
+
+Microprocessor-dependent optimizations in this product are intended for use with Intel
+microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for
+Intel microprocessors. Please refer to the applicable product User and Reference Guides for
+more information regarding the specific instruction sets covered by this notice.
+
+Notice revision \#20110804
+
+\vspace*{0.5cm}
+
+{\bf Trademarks}
+
+Intel, Xeon, and Intel Xeon Phi are trademarks of Intel Corporation in the U.S. and/or other countries.
+
+This document is Copyright \textcopyright 2014, Intel Corporation. All rights reserved.
+
+\pagenumbering{roman}
+\tableofcontents
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true,citecolor=blue}
diff --git a/final/offload/src/cean_util.cpp b/final/offload/src/cean_util.cpp
new file mode 100644
index 0000000..fe1890b
--- /dev/null
+++ b/final/offload/src/cean_util.cpp
@@ -0,0 +1,344 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "cean_util.h"
+#include "offload_common.h"
+
+// 1. allocate element of CeanReadRanges type
+// 2. initialized it for reading consequently contiguous ranges
+// described by "ap" argument
+CeanReadRanges * init_read_ranges_arr_desc(const arr_desc *ap)
+{
+ CeanReadRanges * res;
+
+ // find the max contiguous range
+ int64_t rank = ap->rank - 1;
+ int64_t length = ap->dim[rank].size;
+ for (; rank >= 0; rank--) {
+ if (ap->dim[rank].stride == 1) {
+ length *= (ap->dim[rank].upper - ap->dim[rank].lower + 1);
+ if (rank > 0 && length != ap->dim[rank - 1].size) {
+ break;
+ }
+ }
+ else {
+ break;
+ }
+ }
+
+ res =(CeanReadRanges *)malloc(sizeof(CeanReadRanges) +
+ (ap->rank - rank) * sizeof(CeanReadDim));
+ res->current_number = 0;
+ res->range_size = length;
+ res->last_noncont_ind = rank;
+
+ // calculate number of contiguous ranges inside noncontiguous dimensions
+ int count = 1;
+ bool prev_is_cont = true;
+ int64_t offset = 0;
+
+ for (; rank >= 0; rank--) {
+ res->Dim[rank].count = count;
+ res->Dim[rank].size = ap->dim[rank].stride * ap->dim[rank].size;
+ count *= (prev_is_cont && ap->dim[rank].stride == 1? 1 :
+ (ap->dim[rank].upper - ap->dim[rank].lower +
+ ap->dim[rank].stride) / ap->dim[rank].stride);
+ prev_is_cont = false;
+ offset +=(ap->dim[rank].lower - ap->dim[rank].lindex) *
+ ap->dim[rank].size;
+ }
+ res->range_max_number = count;
+ res -> ptr = (void*)ap->base;
+ res -> init_offset = offset;
+ return res;
+}
+
+// check if ranges described by 1 argument could be transferred into ranges
+// described by 2-nd one
+bool cean_ranges_match(
+ CeanReadRanges * read_rng1,
+ CeanReadRanges * read_rng2
+)
+{
+ return ( read_rng1 == NULL || read_rng2 == NULL ||
+ (read_rng1->range_size % read_rng2->range_size == 0 ||
+ read_rng2->range_size % read_rng1->range_size == 0));
+}
+
+// Set next offset and length and returns true for next range.
+// Returns false if the ranges are over.
+bool get_next_range(
+ CeanReadRanges * read_rng,
+ int64_t *offset
+)
+{
+ if (++read_rng->current_number > read_rng->range_max_number) {
+ read_rng->current_number = 0;
+ return false;
+ }
+ int rank = 0;
+ int num = read_rng->current_number - 1;
+ int64_t cur_offset = 0;
+ int num_loc;
+ for (; rank <= read_rng->last_noncont_ind; rank++) {
+ num_loc = num / read_rng->Dim[rank].count;
+ cur_offset += num_loc * read_rng->Dim[rank].size;
+ num = num % read_rng->Dim[rank].count;
+ }
+ *offset = cur_offset + read_rng->init_offset;
+ return true;
+}
+
+bool is_arr_desc_contiguous(const arr_desc *ap)
+{
+ int64_t rank = ap->rank - 1;
+ int64_t length = ap->dim[rank].size;
+ for (; rank >= 0; rank--) {
+ if (ap->dim[rank].stride > 1 &&
+ ap->dim[rank].upper - ap->dim[rank].lower != 0) {
+ return false;
+ }
+ else if (length != ap->dim[rank].size) {
+ for (; rank >= 0; rank--) {
+ if (ap->dim[rank].upper - ap->dim[rank].lower != 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+ length *= (ap->dim[rank].upper - ap->dim[rank].lower + 1);
+ }
+ return true;
+}
+
+int64_t cean_get_transf_size(CeanReadRanges * read_rng)
+{
+ return(read_rng->range_max_number * read_rng->range_size);
+}
+
+static uint64_t last_left, last_right;
+typedef void (*fpp)(const char *spaces, uint64_t low, uint64_t high, int esize);
+
+static void generate_one_range(
+ const char *spaces,
+ uint64_t lrange,
+ uint64_t rrange,
+ fpp fp,
+ int esize
+)
+{
+ OFFLOAD_TRACE(3,
+ "%s generate_one_range(lrange=%p, rrange=%p, esize=%d)\n",
+ spaces, (void*)lrange, (void*)rrange, esize);
+ if (last_left == -1) {
+ // First range
+ last_left = lrange;
+ }
+ else {
+ if (lrange == last_right+1) {
+ // Extend previous range, don't print
+ }
+ else {
+ (*fp)(spaces, last_left, last_right, esize);
+ last_left = lrange;
+ }
+ }
+ last_right = rrange;
+}
+
+static void generate_mem_ranges_one_rank(
+ const char *spaces,
+ uint64_t base,
+ uint64_t rank,
+ const struct dim_desc *ddp,
+ fpp fp,
+ int esize
+)
+{
+ uint64_t lindex = ddp->lindex;
+ uint64_t lower = ddp->lower;
+ uint64_t upper = ddp->upper;
+ uint64_t stride = ddp->stride;
+ uint64_t size = ddp->size;
+ OFFLOAD_TRACE(3,
+ "%s "
+ "generate_mem_ranges_one_rank(base=%p, rank=%lld, lindex=%lld, "
+ "lower=%lld, upper=%lld, stride=%lld, size=%lld, esize=%d)\n",
+ spaces, (void*)base, rank, lindex, lower, upper, stride, size, esize);
+ if (rank == 1) {
+ uint64_t lrange, rrange;
+ if (stride == 1) {
+ lrange = base + (lower-lindex)*size;
+ rrange = lrange + (upper-lower+1)*size - 1;
+ generate_one_range(spaces, lrange, rrange, fp, esize);
+ }
+ else {
+ for (int i=lower-lindex; i<=upper-lindex; i+=stride) {
+ lrange = base + i*size;
+ rrange = lrange + size - 1;
+ generate_one_range(spaces, lrange, rrange, fp, esize);
+ }
+ }
+ }
+ else {
+ for (int i=lower-lindex; i<=upper-lindex; i+=stride) {
+ generate_mem_ranges_one_rank(
+ spaces, base+i*size, rank-1, ddp+1, fp, esize);
+
+ }
+ }
+}
+
+static void generate_mem_ranges(
+ const char *spaces,
+ const arr_desc *adp,
+ bool deref,
+ fpp fp
+)
+{
+ uint64_t esize;
+
+ OFFLOAD_TRACE(3,
+ "%s "
+ "generate_mem_ranges(adp=%p, deref=%d, fp)\n",
+ spaces, adp, deref);
+ last_left = -1;
+ last_right = -2;
+
+ // Element size is derived from last dimension
+ esize = adp->dim[adp->rank-1].size;
+
+ generate_mem_ranges_one_rank(
+ // For c_cean_var the base addr is the address of the data
+ // For c_cean_var_ptr the base addr is dereferenced to get to the data
+ spaces, deref ? *((uint64_t*)(adp->base)) : adp->base,
+ adp->rank, &adp->dim[0], fp, esize);
+ (*fp)(spaces, last_left, last_right, esize);
+}
+
+// returns offset and length of the data to be transferred
+void __arr_data_offset_and_length(
+ const arr_desc *adp,
+ int64_t &offset,
+ int64_t &length
+)
+{
+ int64_t rank = adp->rank - 1;
+ int64_t size = adp->dim[rank].size;
+ int64_t r_off = 0; // offset from right boundary
+
+ // find the rightmost dimension which takes just part of its
+ // range. We define it if the size of left rank is not equal
+ // the range's length between upper and lower boungaries
+ while (rank > 0) {
+ size *= (adp->dim[rank].upper - adp->dim[rank].lower + 1);
+ if (size != adp->dim[rank - 1].size) {
+ break;
+ }
+ rank--;
+ }
+
+ offset = (adp->dim[rank].lower - adp->dim[rank].lindex) *
+ adp->dim[rank].size;
+
+ // find gaps both from the left - offset and from the right - r_off
+ for (rank--; rank >= 0; rank--) {
+ offset += (adp->dim[rank].lower - adp->dim[rank].lindex) *
+ adp->dim[rank].size;
+ r_off += adp->dim[rank].size -
+ (adp->dim[rank + 1].upper - adp->dim[rank + 1].lindex + 1) *
+ adp->dim[rank + 1].size;
+ }
+ length = (adp->dim[0].upper - adp->dim[0].lindex + 1) *
+ adp->dim[0].size - offset - r_off;
+}
+
+#if OFFLOAD_DEBUG > 0
+
+void print_range(
+ const char *spaces,
+ uint64_t low,
+ uint64_t high,
+ int esize
+)
+{
+ char buffer[1024];
+ char number[32];
+
+ OFFLOAD_TRACE(3, "%s print_range(low=%p, high=%p, esize=%d)\n",
+ spaces, (void*)low, (void*)high, esize);
+
+ if (console_enabled < 4) {
+ return;
+ }
+ OFFLOAD_TRACE(4, "%s values:\n", spaces);
+ int count = 0;
+ buffer[0] = '\0';
+ while (low <= high)
+ {
+ switch (esize)
+ {
+ case 1:
+ sprintf(number, "%d ", *((char *)low));
+ low += 1;
+ break;
+ case 2:
+ sprintf(number, "%d ", *((short *)low));
+ low += 2;
+ break;
+ case 4:
+ sprintf(number, "%d ", *((int *)low));
+ low += 4;
+ break;
+ default:
+ sprintf(number, "0x%016x ", *((uint64_t *)low));
+ low += 8;
+ break;
+ }
+ strcat(buffer, number);
+ count++;
+ if (count == 10) {
+ OFFLOAD_TRACE(4, "%s %s\n", spaces, buffer);
+ count = 0;
+ buffer[0] = '\0';
+ }
+ }
+ if (count != 0) {
+ OFFLOAD_TRACE(4, "%s %s\n", spaces, buffer);
+ }
+}
+
+void __arr_desc_dump(
+ const char *spaces,
+ const char *name,
+ const arr_desc *adp,
+ bool deref
+)
+{
+ OFFLOAD_TRACE(2, "%s%s CEAN expression %p\n", spaces, name, adp);
+
+ if (adp != 0) {
+ OFFLOAD_TRACE(2, "%s base=%llx, rank=%lld\n",
+ spaces, adp->base, adp->rank);
+
+ for (int i = 0; i < adp->rank; i++) {
+ OFFLOAD_TRACE(2,
+ "%s dimension %d: size=%lld, lindex=%lld, "
+ "lower=%lld, upper=%lld, stride=%lld\n",
+ spaces, i, adp->dim[i].size, adp->dim[i].lindex,
+ adp->dim[i].lower, adp->dim[i].upper,
+ adp->dim[i].stride);
+ }
+ // For c_cean_var the base addr is the address of the data
+ // For c_cean_var_ptr the base addr is dereferenced to get to the data
+ generate_mem_ranges(spaces, adp, deref, &print_range);
+ }
+}
+#endif // OFFLOAD_DEBUG
diff --git a/final/offload/src/cean_util.h b/final/offload/src/cean_util.h
new file mode 100644
index 0000000..d0debcc
--- /dev/null
+++ b/final/offload/src/cean_util.h
@@ -0,0 +1,101 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef CEAN_UTIL_H_INCLUDED
+#define CEAN_UTIL_H_INCLUDED
+
+#if MPSS_VERSION > 33
+#include <source/COIBuffer_source.h>
+#endif
+#include <stdint.h>
+
+#if MPSS_VERSION <= 33
+// CEAN expression representation
+struct dim_desc {
+ int64_t size; // Length of data type
+ int64_t lindex; // Lower index
+ int64_t lower; // Lower section bound
+ int64_t upper; // Upper section bound
+ int64_t stride; // Stride
+};
+
+struct arr_desc {
+ int64_t base; // Base address
+ int64_t rank; // Rank of array
+ dim_desc dim[1];
+};
+#endif
+
+struct CeanReadDim {
+ int64_t count; // The number of elements in this dimension
+ int64_t size; // The number of bytes between successive
+ // elements in this dimension.
+};
+
+struct CeanReadRanges {
+ void * ptr;
+ int64_t current_number; // the number of ranges read
+ int64_t range_max_number; // number of contiguous ranges
+ int64_t range_size; // size of max contiguous range
+ int last_noncont_ind; // size of Dim array
+ int64_t init_offset; // offset of 1-st element from array left bound
+ CeanReadDim Dim[1];
+};
+
+// array descriptor length
+#define __arr_desc_length(rank) \
+ (sizeof(int64_t) + sizeof(dim_desc) * (rank))
+
+// returns offset and length of the data to be transferred
+void __arr_data_offset_and_length(const arr_desc *adp,
+ int64_t &offset,
+ int64_t &length);
+
+// define if data array described by argument is contiguous one
+bool is_arr_desc_contiguous(const arr_desc *ap);
+
+// allocate element of CeanReadRanges type initialized
+// to read consequently contiguous ranges described by "ap" argument
+CeanReadRanges * init_read_ranges_arr_desc(const arr_desc *ap);
+
+// check if ranges described by 1 argument could be transferred into ranges
+// described by 2-nd one
+bool cean_ranges_match(
+ CeanReadRanges * read_rng1,
+ CeanReadRanges * read_rng2
+);
+
+// first argument - returned value by call to init_read_ranges_arr_desc.
+// returns true if offset and length of next range is set successfuly.
+// returns false if the ranges is over.
+bool get_next_range(
+ CeanReadRanges * read_rng,
+ int64_t *offset
+);
+
+// returns number of transferred bytes
+int64_t cean_get_transf_size(CeanReadRanges * read_rng);
+
+#if OFFLOAD_DEBUG > 0
+// prints array descriptor contents to stderr
+void __arr_desc_dump(
+ const char *spaces,
+ const char *name,
+ const arr_desc *adp,
+ bool dereference);
+#else
+#define __arr_desc_dump(
+ spaces,
+ name,
+ adp,
+ dereference)
+#endif // OFFLOAD_DEBUG
+
+#endif // CEAN_UTIL_H_INCLUDED
diff --git a/final/offload/src/coi/coi_client.cpp b/final/offload/src/coi/coi_client.cpp
new file mode 100644
index 0000000..ab8c7f5
--- /dev/null
+++ b/final/offload/src/coi/coi_client.cpp
@@ -0,0 +1,350 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// The COI host interface
+
+#include "coi_client.h"
+#include "../offload_common.h"
+
+namespace COI {
+
+#define COI_VERSION1 "COI_1.0"
+#define COI_VERSION2 "COI_2.0"
+
+bool is_available;
+static void* lib_handle;
+
+// pointers to functions from COI library
+COIRESULT (*EngineGetCount)(COI_ISA_TYPE, uint32_t*);
+COIRESULT (*EngineGetHandle)(COI_ISA_TYPE, uint32_t, COIENGINE*);
+
+COIRESULT (*ProcessCreateFromMemory)(COIENGINE, const char*, const void*,
+ uint64_t, int, const char**, uint8_t,
+ const char**, uint8_t, const char*,
+ uint64_t, const char*, const char*,
+ uint64_t, COIPROCESS*);
+COIRESULT (*ProcessDestroy)(COIPROCESS, int32_t, uint8_t, int8_t*, uint32_t*);
+COIRESULT (*ProcessGetFunctionHandles)(COIPROCESS, uint32_t, const char**,
+ COIFUNCTION*);
+COIRESULT (*ProcessLoadLibraryFromMemory)(COIPROCESS, const void*, uint64_t,
+ const char*, const char*,
+ const char*, uint64_t, uint32_t,
+ COILIBRARY*);
+COIRESULT (*ProcessRegisterLibraries)(uint32_t, const void**, const uint64_t*,
+ const char**, const uint64_t*);
+
+COIRESULT (*PipelineCreate)(COIPROCESS, COI_CPU_MASK, uint32_t, COIPIPELINE*);
+COIRESULT (*PipelineDestroy)(COIPIPELINE);
+COIRESULT (*PipelineRunFunction)(COIPIPELINE, COIFUNCTION, uint32_t,
+ const COIBUFFER*, const COI_ACCESS_FLAGS*,
+ uint32_t, const COIEVENT*, const void*,
+ uint16_t, void*, uint16_t, COIEVENT*);
+
+COIRESULT (*BufferCreate)(uint64_t, COI_BUFFER_TYPE, uint32_t, const void*,
+ uint32_t, const COIPROCESS*, COIBUFFER*);
+COIRESULT (*BufferCreateFromMemory)(uint64_t, COI_BUFFER_TYPE, uint32_t,
+ void*, uint32_t, const COIPROCESS*,
+ COIBUFFER*);
+COIRESULT (*BufferDestroy)(COIBUFFER);
+COIRESULT (*BufferMap)(COIBUFFER, uint64_t, uint64_t, COI_MAP_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*, COIMAPINSTANCE*, void**);
+COIRESULT (*BufferUnmap)(COIMAPINSTANCE, uint32_t, const COIEVENT*, COIEVENT*);
+COIRESULT (*BufferWrite)(COIBUFFER, uint64_t, const void*, uint64_t,
+ COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*);
+COIRESULT (*BufferRead)(COIBUFFER, uint64_t, void*, uint64_t, COI_COPY_TYPE,
+ uint32_t, const COIEVENT*, COIEVENT*);
+COIRESULT (*BufferCopy)(COIBUFFER, COIBUFFER, uint64_t, uint64_t, uint64_t,
+ COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*);
+COIRESULT (*BufferGetSinkAddress)(COIBUFFER, uint64_t*);
+COIRESULT (*BufferSetState)(COIBUFFER, COIPROCESS, COI_BUFFER_STATE,
+ COI_BUFFER_MOVE_FLAG, uint32_t,
+ const COIEVENT*, COIEVENT*);
+
+COIRESULT (*EventWait)(uint16_t, const COIEVENT*, int32_t, uint8_t, uint32_t*,
+ uint32_t*);
+
+uint64_t (*PerfGetCycleFrequency)(void);
+
+bool init(void)
+{
+#ifndef TARGET_WINNT
+ const char *lib_name = "libcoi_host.so.0";
+#else // TARGET_WINNT
+ const char *lib_name = "coi_host.dll";
+#endif // TARGET_WINNT
+
+ OFFLOAD_DEBUG_TRACE(2, "Loading COI library %s ...\n", lib_name);
+ lib_handle = DL_open(lib_name);
+ if (lib_handle == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to load the library\n");
+ return false;
+ }
+
+ EngineGetCount =
+ (COIRESULT (*)(COI_ISA_TYPE, uint32_t*))
+ DL_sym(lib_handle, "COIEngineGetCount", COI_VERSION1);
+ if (EngineGetCount == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIEngineGetCount");
+ fini();
+ return false;
+ }
+
+ EngineGetHandle =
+ (COIRESULT (*)(COI_ISA_TYPE, uint32_t, COIENGINE*))
+ DL_sym(lib_handle, "COIEngineGetHandle", COI_VERSION1);
+ if (EngineGetHandle == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIEngineGetHandle");
+ fini();
+ return false;
+ }
+
+ ProcessCreateFromMemory =
+ (COIRESULT (*)(COIENGINE, const char*, const void*, uint64_t, int,
+ const char**, uint8_t, const char**, uint8_t,
+ const char*, uint64_t, const char*, const char*,
+ uint64_t, COIPROCESS*))
+ DL_sym(lib_handle, "COIProcessCreateFromMemory", COI_VERSION1);
+ if (ProcessCreateFromMemory == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIProcessCreateFromMemory");
+ fini();
+ return false;
+ }
+
+ ProcessDestroy =
+ (COIRESULT (*)(COIPROCESS, int32_t, uint8_t, int8_t*,
+ uint32_t*))
+ DL_sym(lib_handle, "COIProcessDestroy", COI_VERSION1);
+ if (ProcessDestroy == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIProcessDestroy");
+ fini();
+ return false;
+ }
+
+ ProcessGetFunctionHandles =
+ (COIRESULT (*)(COIPROCESS, uint32_t, const char**, COIFUNCTION*))
+ DL_sym(lib_handle, "COIProcessGetFunctionHandles", COI_VERSION1);
+ if (ProcessGetFunctionHandles == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIProcessGetFunctionHandles");
+ fini();
+ return false;
+ }
+
+ ProcessLoadLibraryFromMemory =
+ (COIRESULT (*)(COIPROCESS, const void*, uint64_t, const char*,
+ const char*, const char*, uint64_t, uint32_t,
+ COILIBRARY*))
+ DL_sym(lib_handle, "COIProcessLoadLibraryFromMemory", COI_VERSION2);
+ if (ProcessLoadLibraryFromMemory == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIProcessLoadLibraryFromMemory");
+ fini();
+ return false;
+ }
+
+ ProcessRegisterLibraries =
+ (COIRESULT (*)(uint32_t, const void**, const uint64_t*, const char**,
+ const uint64_t*))
+ DL_sym(lib_handle, "COIProcessRegisterLibraries", COI_VERSION1);
+ if (ProcessRegisterLibraries == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIProcessRegisterLibraries");
+ fini();
+ return false;
+ }
+
+ PipelineCreate =
+ (COIRESULT (*)(COIPROCESS, COI_CPU_MASK, uint32_t, COIPIPELINE*))
+ DL_sym(lib_handle, "COIPipelineCreate", COI_VERSION1);
+ if (PipelineCreate == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIPipelineCreate");
+ fini();
+ return false;
+ }
+
+ PipelineDestroy =
+ (COIRESULT (*)(COIPIPELINE))
+ DL_sym(lib_handle, "COIPipelineDestroy", COI_VERSION1);
+ if (PipelineDestroy == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIPipelineDestroy");
+ fini();
+ return false;
+ }
+
+ PipelineRunFunction =
+ (COIRESULT (*)(COIPIPELINE, COIFUNCTION, uint32_t, const COIBUFFER*,
+ const COI_ACCESS_FLAGS*, uint32_t, const COIEVENT*,
+ const void*, uint16_t, void*, uint16_t, COIEVENT*))
+ DL_sym(lib_handle, "COIPipelineRunFunction", COI_VERSION1);
+ if (PipelineRunFunction == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIPipelineRunFunction");
+ fini();
+ return false;
+ }
+
+ BufferCreate =
+ (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, const void*,
+ uint32_t, const COIPROCESS*, COIBUFFER*))
+ DL_sym(lib_handle, "COIBufferCreate", COI_VERSION1);
+ if (BufferCreate == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferCreate");
+ fini();
+ return false;
+ }
+
+ BufferCreateFromMemory =
+ (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, void*,
+ uint32_t, const COIPROCESS*, COIBUFFER*))
+ DL_sym(lib_handle, "COIBufferCreateFromMemory", COI_VERSION1);
+ if (BufferCreateFromMemory == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferCreateFromMemory");
+ fini();
+ return false;
+ }
+
+ BufferDestroy =
+ (COIRESULT (*)(COIBUFFER))
+ DL_sym(lib_handle, "COIBufferDestroy", COI_VERSION1);
+ if (BufferDestroy == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferDestroy");
+ fini();
+ return false;
+ }
+
+ BufferMap =
+ (COIRESULT (*)(COIBUFFER, uint64_t, uint64_t, COI_MAP_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*, COIMAPINSTANCE*,
+ void**))
+ DL_sym(lib_handle, "COIBufferMap", COI_VERSION1);
+ if (BufferMap == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferMap");
+ fini();
+ return false;
+ }
+
+ BufferUnmap =
+ (COIRESULT (*)(COIMAPINSTANCE, uint32_t, const COIEVENT*,
+ COIEVENT*))
+ DL_sym(lib_handle, "COIBufferUnmap", COI_VERSION1);
+ if (BufferUnmap == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferUnmap");
+ fini();
+ return false;
+ }
+
+ BufferWrite =
+ (COIRESULT (*)(COIBUFFER, uint64_t, const void*, uint64_t,
+ COI_COPY_TYPE, uint32_t, const COIEVENT*,
+ COIEVENT*))
+ DL_sym(lib_handle, "COIBufferWrite", COI_VERSION1);
+ if (BufferWrite == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferWrite");
+ fini();
+ return false;
+ }
+
+ BufferRead =
+ (COIRESULT (*)(COIBUFFER, uint64_t, void*, uint64_t,
+ COI_COPY_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*))
+ DL_sym(lib_handle, "COIBufferRead", COI_VERSION1);
+ if (BufferRead == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferRead");
+ fini();
+ return false;
+ }
+
+ BufferCopy =
+ (COIRESULT (*)(COIBUFFER, COIBUFFER, uint64_t, uint64_t, uint64_t,
+ COI_COPY_TYPE, uint32_t, const COIEVENT*,
+ COIEVENT*))
+ DL_sym(lib_handle, "COIBufferCopy", COI_VERSION1);
+ if (BufferCopy == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferCopy");
+ fini();
+ return false;
+ }
+
+ BufferGetSinkAddress =
+ (COIRESULT (*)(COIBUFFER, uint64_t*))
+ DL_sym(lib_handle, "COIBufferGetSinkAddress", COI_VERSION1);
+ if (BufferGetSinkAddress == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferGetSinkAddress");
+ fini();
+ return false;
+ }
+
+ BufferSetState =
+ (COIRESULT(*)(COIBUFFER, COIPROCESS, COI_BUFFER_STATE,
+ COI_BUFFER_MOVE_FLAG, uint32_t, const COIEVENT*,
+ COIEVENT*))
+ DL_sym(lib_handle, "COIBufferSetState", COI_VERSION1);
+ if (BufferSetState == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIBufferSetState");
+ fini();
+ return false;
+ }
+
+ EventWait =
+ (COIRESULT (*)(uint16_t, const COIEVENT*, int32_t, uint8_t,
+ uint32_t*, uint32_t*))
+ DL_sym(lib_handle, "COIEventWait", COI_VERSION1);
+ if (EventWait == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIEventWait");
+ fini();
+ return false;
+ }
+
+ PerfGetCycleFrequency =
+ (uint64_t (*)(void))
+ DL_sym(lib_handle, "COIPerfGetCycleFrequency", COI_VERSION1);
+ if (PerfGetCycleFrequency == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n",
+ "COIPerfGetCycleFrequency");
+ fini();
+ return false;
+ }
+
+ is_available = true;
+
+ return true;
+}
+
+void fini(void)
+{
+ is_available = false;
+
+ if (lib_handle != 0) {
+#ifndef TARGET_WINNT
+ DL_close(lib_handle);
+#endif // TARGET_WINNT
+ lib_handle = 0;
+ }
+}
+
+} // namespace COI
diff --git a/final/offload/src/coi/coi_client.h b/final/offload/src/coi/coi_client.h
new file mode 100644
index 0000000..4775a8b
--- /dev/null
+++ b/final/offload/src/coi/coi_client.h
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// The interface between offload library and the COI API on the host
+
+#ifndef COI_CLIENT_H_INCLUDED
+#define COI_CLIENT_H_INCLUDED
+
+#include <common/COIPerf_common.h>
+#include <source/COIEngine_source.h>
+#include <source/COIProcess_source.h>
+#include <source/COIPipeline_source.h>
+#include <source/COIBuffer_source.h>
+#include <source/COIEvent_source.h>
+
+#include <string.h>
+
+#include "../liboffload_error_codes.h"
+#include "../offload_util.h"
+
+#define MIC_ENGINES_MAX 128
+
+#if MIC_ENGINES_MAX < COI_MAX_ISA_MIC_DEVICES
+#error MIC_ENGINES_MAX need to be increased
+#endif
+
+// COI library interface
+namespace COI {
+
+extern bool init(void);
+extern void fini(void);
+
+extern bool is_available;
+
+// pointers to functions from COI library
+extern COIRESULT (*EngineGetCount)(COI_ISA_TYPE, uint32_t*);
+extern COIRESULT (*EngineGetHandle)(COI_ISA_TYPE, uint32_t, COIENGINE*);
+
+extern COIRESULT (*ProcessCreateFromMemory)(COIENGINE, const char*,
+ const void*, uint64_t, int,
+ const char**, uint8_t,
+ const char**, uint8_t,
+ const char*, uint64_t,
+ const char*,
+ const char*, uint64_t,
+ COIPROCESS*);
+extern COIRESULT (*ProcessDestroy)(COIPROCESS, int32_t, uint8_t,
+ int8_t*, uint32_t*);
+extern COIRESULT (*ProcessGetFunctionHandles)(COIPROCESS, uint32_t,
+ const char**,
+ COIFUNCTION*);
+extern COIRESULT (*ProcessLoadLibraryFromMemory)(COIPROCESS,
+ const void*,
+ uint64_t,
+ const char*,
+ const char*,
+ const char*,
+ uint64_t,
+ uint32_t,
+ COILIBRARY*);
+extern COIRESULT (*ProcessRegisterLibraries)(uint32_t,
+ const void**,
+ const uint64_t*,
+ const char**,
+ const uint64_t*);
+
+extern COIRESULT (*PipelineCreate)(COIPROCESS, COI_CPU_MASK, uint32_t,
+ COIPIPELINE*);
+extern COIRESULT (*PipelineDestroy)(COIPIPELINE);
+extern COIRESULT (*PipelineRunFunction)(COIPIPELINE, COIFUNCTION,
+ uint32_t, const COIBUFFER*,
+ const COI_ACCESS_FLAGS*,
+ uint32_t, const COIEVENT*,
+ const void*, uint16_t, void*,
+ uint16_t, COIEVENT*);
+
+extern COIRESULT (*BufferCreate)(uint64_t, COI_BUFFER_TYPE, uint32_t,
+ const void*, uint32_t,
+ const COIPROCESS*, COIBUFFER*);
+extern COIRESULT (*BufferCreateFromMemory)(uint64_t, COI_BUFFER_TYPE,
+ uint32_t, void*,
+ uint32_t, const COIPROCESS*,
+ COIBUFFER*);
+extern COIRESULT (*BufferDestroy)(COIBUFFER);
+extern COIRESULT (*BufferMap)(COIBUFFER, uint64_t, uint64_t,
+ COI_MAP_TYPE, uint32_t, const COIEVENT*,
+ COIEVENT*, COIMAPINSTANCE*, void**);
+extern COIRESULT (*BufferUnmap)(COIMAPINSTANCE, uint32_t,
+ const COIEVENT*, COIEVENT*);
+extern COIRESULT (*BufferWrite)(COIBUFFER, uint64_t, const void*,
+ uint64_t, COI_COPY_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*);
+extern COIRESULT (*BufferRead)(COIBUFFER, uint64_t, void*, uint64_t,
+ COI_COPY_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*);
+extern COIRESULT (*BufferCopy)(COIBUFFER, COIBUFFER, uint64_t, uint64_t,
+ uint64_t, COI_COPY_TYPE, uint32_t,
+ const COIEVENT*, COIEVENT*);
+extern COIRESULT (*BufferGetSinkAddress)(COIBUFFER, uint64_t*);
+extern COIRESULT (*BufferSetState)(COIBUFFER, COIPROCESS, COI_BUFFER_STATE,
+ COI_BUFFER_MOVE_FLAG, uint32_t,
+ const COIEVENT*, COIEVENT*);
+
+extern COIRESULT (*EventWait)(uint16_t, const COIEVENT*, int32_t,
+ uint8_t, uint32_t*, uint32_t*);
+
+extern uint64_t (*PerfGetCycleFrequency)(void);
+
+} // namespace COI
+
+#endif // COI_CLIENT_H_INCLUDED
diff --git a/final/offload/src/coi/coi_server.cpp b/final/offload/src/coi/coi_server.cpp
new file mode 100644
index 0000000..73e6c2d
--- /dev/null
+++ b/final/offload/src/coi/coi_server.cpp
@@ -0,0 +1,130 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// The COI interface on the target
+
+#include "coi_server.h"
+
+#include "../offload_target.h"
+#include "../offload_timer.h"
+#ifdef MYO_SUPPORT
+#include "../offload_myo_target.h" // for __offload_myoLibInit/Fini
+#endif // MYO_SUPPORT
+
+COINATIVELIBEXPORT
+void server_compute(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ OffloadDescriptor::offload(buffer_count, buffers,
+ misc_data, misc_data_len,
+ return_data, return_data_len);
+}
+
+COINATIVELIBEXPORT
+void server_init(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ struct init_data {
+ int device_index;
+ int devices_total;
+ int console_level;
+ int offload_report_level;
+ } *data = (struct init_data*) misc_data;
+
+ // set device index and number of total devices
+ mic_index = data->device_index;
+ mic_engines_total = data->devices_total;
+
+ // initialize trace level
+ console_enabled = data->console_level;
+ offload_report_level = data->offload_report_level;
+
+ // return back the process id
+ *((pid_t*) return_data) = getpid();
+}
+
+COINATIVELIBEXPORT
+void server_var_table_size(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ struct Params {
+ int64_t nelems;
+ int64_t length;
+ } *params;
+
+ params = static_cast<Params*>(return_data);
+ params->length = __offload_vars.table_size(params->nelems);
+}
+
+COINATIVELIBEXPORT
+void server_var_table_copy(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ __offload_vars.table_copy(buffers[0], *static_cast<int64_t*>(misc_data));
+}
+
+#ifdef MYO_SUPPORT
+// temporary workaround for blocking behavior of myoiLibInit/Fini calls
+COINATIVELIBEXPORT
+void server_myoinit(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ __offload_myoLibInit();
+}
+
+COINATIVELIBEXPORT
+void server_myofini(
+ uint32_t buffer_count,
+ void** buffers,
+ uint64_t* buffers_len,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ __offload_myoLibFini();
+}
+#endif // MYO_SUPPORT
diff --git a/final/offload/src/coi/coi_server.h b/final/offload/src/coi/coi_server.h
new file mode 100644
index 0000000..e744d9e
--- /dev/null
+++ b/final/offload/src/coi/coi_server.h
@@ -0,0 +1,74 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+//The interface between offload library and the COI API on the target.
+
+#ifndef COI_SERVER_H_INCLUDED
+#define COI_SERVER_H_INCLUDED
+
+#include <common/COIEngine_common.h>
+#include <common/COIPerf_common.h>
+#include <sink/COIProcess_sink.h>
+#include <sink/COIPipeline_sink.h>
+#include <sink/COIBuffer_sink.h>
+#include <list>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "../liboffload_error_codes.h"
+
+// wrappers for COI API
+#define PipelineStartExecutingRunFunctions() \
+ { \
+ COIRESULT res = COIPipelineStartExecutingRunFunctions(); \
+ if (res != COI_SUCCESS) { \
+ LIBOFFLOAD_ERROR(c_pipeline_start_run_funcs, mic_index, res); \
+ exit(1); \
+ } \
+ }
+
+#define ProcessWaitForShutdown() \
+ { \
+ COIRESULT res = COIProcessWaitForShutdown(); \
+ if (res != COI_SUCCESS) { \
+ LIBOFFLOAD_ERROR(c_process_wait_shutdown, mic_index, res); \
+ exit(1); \
+ } \
+ }
+
+#define BufferAddRef(buf) \
+ { \
+ COIRESULT res = COIBufferAddRef(buf); \
+ if (res != COI_SUCCESS) { \
+ LIBOFFLOAD_ERROR(c_buf_add_ref, mic_index, res); \
+ exit(1); \
+ } \
+ }
+
+#define BufferReleaseRef(buf) \
+ { \
+ COIRESULT res = COIBufferReleaseRef(buf); \
+ if (res != COI_SUCCESS) { \
+ LIBOFFLOAD_ERROR(c_buf_release_ref, mic_index, res); \
+ exit(1); \
+ } \
+ }
+
+#define EngineGetIndex(index) \
+ { \
+ COI_ISA_TYPE isa_type; \
+ COIRESULT res = COIEngineGetIndex(&isa_type, index); \
+ if (res != COI_SUCCESS) { \
+ LIBOFFLOAD_ERROR(c_get_engine_index, mic_index, res); \
+ exit(1); \
+ } \
+ }
+
+#endif // COI_SERVER_H_INCLUDED
diff --git a/final/offload/src/compiler_if_host.cpp b/final/offload/src/compiler_if_host.cpp
new file mode 100644
index 0000000..2bc430b
--- /dev/null
+++ b/final/offload/src/compiler_if_host.cpp
@@ -0,0 +1,323 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "compiler_if_host.h"
+
+#include <malloc.h>
+#ifndef TARGET_WINNT
+#include <alloca.h>
+#endif // TARGET_WINNT
+
+// Global counter on host.
+// This variable is used if P2OPT_offload_do_data_persistence == 2.
+// The variable used to identify offload constructs contained in one procedure.
+// Increment of OFFLOAD_CALL_COUNT is inserted at entries of HOST routines with
+// offload constructs.
+static int offload_call_count = 0;
+
+extern "C" OFFLOAD OFFLOAD_TARGET_ACQUIRE(
+ TARGET_TYPE target_type,
+ int target_number,
+ int is_optional,
+ _Offload_status* status,
+ const char* file,
+ uint64_t line
+)
+{
+ bool retval;
+ OFFLOAD ofld;
+
+ // initialize status
+ if (status != 0) {
+ status->result = OFFLOAD_UNAVAILABLE;
+ status->device_number = -1;
+ status->data_sent = 0;
+ status->data_received = 0;
+ }
+
+ // make sure libray is initialized
+ retval = __offload_init_library();
+
+ // OFFLOAD_TIMER_INIT must follow call to __offload_init_library
+ OffloadHostTimerData * timer_data = OFFLOAD_TIMER_INIT(file, line);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_total_offload);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_initialize);
+
+ // initialize all devices is init_type is on_offload_all
+ if (retval && __offload_init_type == c_init_on_offload_all) {
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].init();
+ }
+ }
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_initialize);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_target_acquire);
+
+ if (target_type == TARGET_HOST) {
+ // Host always available
+ retval = true;
+ }
+ else if (target_type == TARGET_MIC) {
+ if (target_number >= -1) {
+ if (retval) {
+ if (target_number >= 0) {
+ // User provided the device number
+ target_number = target_number % mic_engines_total;
+ }
+ else {
+ // use device 0
+ target_number = 0;
+ }
+
+ // reserve device in ORSL
+ if (is_optional) {
+ if (!ORSL::try_reserve(target_number)) {
+ target_number = -1;
+ }
+ }
+ else {
+ if (!ORSL::reserve(target_number)) {
+ target_number = -1;
+ }
+ }
+
+ // initialize device
+ if (target_number >= 0 &&
+ __offload_init_type == c_init_on_offload) {
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_initialize);
+ mic_engines[target_number].init();
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_initialize);
+ }
+ }
+ else {
+ // fallback to CPU
+ target_number = -1;
+ }
+
+ if (target_number < 0 || !retval) {
+ if (!is_optional && status == 0) {
+ LIBOFFLOAD_ERROR(c_device_is_not_available);
+ exit(1);
+ }
+
+ retval = false;
+ }
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_device_number);
+ exit(1);
+ }
+ }
+
+ if (retval) {
+ ofld = new OffloadDescriptor(target_number, status,
+ !is_optional, false, timer_data);
+ OFFLOAD_TIMER_HOST_MIC_NUM(timer_data, target_number);
+ Offload_Report_Prolog(timer_data);
+ OFFLOAD_DEBUG_TRACE_1(2, timer_data->offload_number, c_offload_start,
+ "Starting offload: target_type = %d, "
+ "number = %d, is_optional = %d\n",
+ target_type, target_number, is_optional);
+
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_target_acquire);
+ }
+ else {
+ ofld = NULL;
+
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_target_acquire);
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_total_offload);
+ offload_report_free_data(timer_data);
+ }
+
+ return ofld;
+}
+
+extern "C" OFFLOAD OFFLOAD_TARGET_ACQUIRE1(
+ const int* device_num,
+ const char* file,
+ uint64_t line
+)
+{
+ int target_number;
+
+ // make sure libray is initialized and at least one device is available
+ if (!__offload_init_library()) {
+ LIBOFFLOAD_ERROR(c_device_is_not_available);
+ exit(1);
+ }
+
+ // OFFLOAD_TIMER_INIT must follow call to __offload_init_library
+
+ OffloadHostTimerData * timer_data = OFFLOAD_TIMER_INIT(file, line);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_total_offload);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_initialize);
+
+ if (__offload_init_type == c_init_on_offload_all) {
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].init();
+ }
+ }
+
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_initialize);
+
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_target_acquire);
+
+ // use default device number if it is not provided
+ if (device_num != 0) {
+ target_number = *device_num;
+ }
+ else {
+ target_number = __omp_device_num;
+ }
+
+ // device number should be a non-negative integer value
+ if (target_number < 0) {
+ LIBOFFLOAD_ERROR(c_omp_invalid_device_num);
+ exit(1);
+ }
+
+ // should we do this for OpenMP?
+ target_number %= mic_engines_total;
+
+ // reserve device in ORSL
+ if (!ORSL::reserve(target_number)) {
+ LIBOFFLOAD_ERROR(c_device_is_not_available);
+ exit(1);
+ }
+
+ // initialize device(s)
+ OFFLOAD_TIMER_START(timer_data, c_offload_host_initialize);
+
+ if (__offload_init_type == c_init_on_offload) {
+ mic_engines[target_number].init();
+ }
+
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_initialize);
+
+ OFFLOAD ofld =
+ new OffloadDescriptor(target_number, 0, true, true, timer_data);
+
+ OFFLOAD_TIMER_HOST_MIC_NUM(timer_data, target_number);
+
+ Offload_Report_Prolog(timer_data);
+
+ OFFLOAD_DEBUG_TRACE_1(2, timer_data->offload_number, c_offload_start,
+ "Starting OpenMP offload, device = %d\n",
+ target_number);
+
+ OFFLOAD_TIMER_STOP(timer_data, c_offload_host_target_acquire);
+
+ return ofld;
+}
+
+int offload_offload_wrap(
+ OFFLOAD ofld,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void **waits,
+ const void **signal,
+ int entry_id,
+ const void *stack_addr
+)
+{
+ bool ret = ofld->offload(name, is_empty, vars, vars2, num_vars,
+ waits, num_waits, signal, entry_id, stack_addr);
+ if (!ret || signal == 0) {
+ delete ofld;
+ }
+ return ret;
+}
+
+extern "C" int OFFLOAD_OFFLOAD1(
+ OFFLOAD ofld,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void **waits,
+ const void **signal
+)
+{
+ return offload_offload_wrap(ofld, name, is_empty,
+ num_vars, vars, vars2,
+ num_waits, waits,
+ signal, NULL, NULL);
+}
+
+extern "C" int OFFLOAD_OFFLOAD2(
+ OFFLOAD ofld,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void** waits,
+ const void** signal,
+ int entry_id,
+ const void *stack_addr
+)
+{
+ return offload_offload_wrap(ofld, name, is_empty,
+ num_vars, vars, vars2,
+ num_waits, waits,
+ signal, entry_id, stack_addr);
+}
+
+extern "C" int OFFLOAD_OFFLOAD(
+ OFFLOAD ofld,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void **waits,
+ const void *signal,
+ int entry_id,
+ const void *stack_addr
+)
+{
+ // signal is passed by reference now
+ const void **signal_new = (signal != 0) ? &signal : 0;
+ const void **waits_new = 0;
+ int num_waits_new = 0;
+
+ // remove NULL values from the list of signals to wait for
+ if (num_waits > 0) {
+ waits_new = (const void**) alloca(sizeof(void*) * num_waits);
+ for (int i = 0; i < num_waits; i++) {
+ if (waits[i] != 0) {
+ waits_new[num_waits_new++] = waits[i];
+ }
+ }
+ }
+
+ return OFFLOAD_OFFLOAD1(ofld, name, is_empty,
+ num_vars, vars, vars2,
+ num_waits_new, waits_new,
+ signal_new);
+}
+
+extern "C" int OFFLOAD_CALL_COUNT()
+{
+ offload_call_count++;
+ return offload_call_count;
+}
diff --git a/final/offload/src/compiler_if_host.h b/final/offload/src/compiler_if_host.h
new file mode 100644
index 0000000..4b34c51
--- /dev/null
+++ b/final/offload/src/compiler_if_host.h
@@ -0,0 +1,133 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! \file
+ \brief The interface between compiler-generated host code and runtime library
+*/
+
+#ifndef COMPILER_IF_HOST_H_INCLUDED
+#define COMPILER_IF_HOST_H_INCLUDED
+
+#include "offload_host.h"
+
+#define OFFLOAD_TARGET_ACQUIRE OFFLOAD_PREFIX(target_acquire)
+#define OFFLOAD_TARGET_ACQUIRE1 OFFLOAD_PREFIX(target_acquire1)
+#define OFFLOAD_OFFLOAD OFFLOAD_PREFIX(offload)
+#define OFFLOAD_OFFLOAD1 OFFLOAD_PREFIX(offload1)
+#define OFFLOAD_OFFLOAD2 OFFLOAD_PREFIX(offload2)
+#define OFFLOAD_CALL_COUNT OFFLOAD_PREFIX(offload_call_count)
+
+
+/*! \fn OFFLOAD_TARGET_ACQUIRE
+ \brief Attempt to acquire the target.
+ \param target_type The type of target.
+ \param target_number The device number.
+ \param is_optional Whether CPU fall-back is allowed.
+ \param status Address of variable to hold offload status.
+ \param file Filename in which this offload occurred.
+ \param line Line number in the file where this offload occurred.
+*/
+extern "C" OFFLOAD OFFLOAD_TARGET_ACQUIRE(
+ TARGET_TYPE target_type,
+ int target_number,
+ int is_optional,
+ _Offload_status* status,
+ const char* file,
+ uint64_t line
+);
+
+/*! \fn OFFLOAD_TARGET_ACQUIRE1
+ \brief Acquire the target for offload (OpenMP).
+ \param device_number Device number or null if not specified.
+ \param file Filename in which this offload occurred
+ \param line Line number in the file where this offload occurred.
+*/
+extern "C" OFFLOAD OFFLOAD_TARGET_ACQUIRE1(
+ const int* device_number,
+ const char* file,
+ uint64_t line
+);
+
+/*! \fn OFFLOAD_OFFLOAD1
+ \brief Run function on target using interface for old data persistence.
+ \param o Offload descriptor created by OFFLOAD_TARGET_ACQUIRE.
+ \param name Name of offload entry point.
+ \param is_empty If no code to execute (e.g. offload_transfer)
+ \param num_vars Number of variable descriptors.
+ \param vars Pointer to VarDesc array.
+ \param vars2 Pointer to VarDesc2 array.
+ \param num_waits Number of "wait" values.
+ \param waits Pointer to array of wait values.
+ \param signal Pointer to signal value or NULL.
+*/
+extern "C" int OFFLOAD_OFFLOAD1(
+ OFFLOAD o,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void** waits,
+ const void** signal
+);
+
+/*! \fn OFFLOAD_OFFLOAD2
+ \brief Run function on target using interface for new data persistence.
+ \param o Offload descriptor created by OFFLOAD_TARGET_ACQUIRE.
+ \param name Name of offload entry point.
+ \param is_empty If no code to execute (e.g. offload_transfer)
+ \param num_vars Number of variable descriptors.
+ \param vars Pointer to VarDesc array.
+ \param vars2 Pointer to VarDesc2 array.
+ \param num_waits Number of "wait" values.
+ \param waits Pointer to array of wait values.
+ \param signal Pointer to signal value or NULL.
+ \param entry_id A signature for the function doing the offload.
+ \param stack_addr The stack frame address of the function doing offload.
+*/
+extern "C" int OFFLOAD_OFFLOAD2(
+ OFFLOAD o,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void** waits,
+ const void** signal,
+ int entry_id,
+ const void *stack_addr
+);
+
+// Run function on target (obsolete).
+// @param o OFFLOAD object
+// @param name function name
+extern "C" int OFFLOAD_OFFLOAD(
+ OFFLOAD o,
+ const char *name,
+ int is_empty,
+ int num_vars,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int num_waits,
+ const void** waits,
+ const void* signal,
+ int entry_id = 0,
+ const void *stack_addr = NULL
+);
+
+// Global counter on host.
+// This variable is used if P2OPT_offload_do_data_persistence == 2.
+// The variable used to identify offload constructs contained in one procedure.
+// Call to OFFLOAD_CALL_COUNT() is inserted at HOST on entry of the routine.
+extern "C" int OFFLOAD_CALL_COUNT();
+
+#endif // COMPILER_IF_HOST_H_INCLUDED
diff --git a/final/offload/src/compiler_if_target.cpp b/final/offload/src/compiler_if_target.cpp
new file mode 100644
index 0000000..1af82b8
--- /dev/null
+++ b/final/offload/src/compiler_if_target.cpp
@@ -0,0 +1,44 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "compiler_if_target.h"
+
+extern "C" void OFFLOAD_TARGET_ENTER(
+ OFFLOAD ofld,
+ int vars_total,
+ VarDesc *vars,
+ VarDesc2 *vars2
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p, %d, %p, %p)\n", __func__, ofld,
+ vars_total, vars, vars2);
+ ofld->merge_var_descs(vars, vars2, vars_total);
+ ofld->scatter_copyin_data();
+}
+
+extern "C" void OFFLOAD_TARGET_LEAVE(
+ OFFLOAD ofld
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, ofld);
+ ofld->gather_copyout_data();
+}
+
+extern "C" void OFFLOAD_TARGET_MAIN(void)
+{
+ // initialize target part
+ __offload_target_init();
+
+ // pass control to COI
+ PipelineStartExecutingRunFunctions();
+ ProcessWaitForShutdown();
+
+ OFFLOAD_DEBUG_TRACE(2, "Exiting main...\n");
+}
diff --git a/final/offload/src/compiler_if_target.h b/final/offload/src/compiler_if_target.h
new file mode 100644
index 0000000..49d2c1c
--- /dev/null
+++ b/final/offload/src/compiler_if_target.h
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! \file
+ \brief The interface between compiler-generated target code and runtime library
+*/
+
+#ifndef COMPILER_IF_TARGET_H_INCLUDED
+#define COMPILER_IF_TARGET_H_INCLUDED
+
+#include "offload_target.h"
+
+#define OFFLOAD_TARGET_ENTER OFFLOAD_PREFIX(target_enter)
+#define OFFLOAD_TARGET_LEAVE OFFLOAD_PREFIX(target_leave)
+#define OFFLOAD_TARGET_MAIN OFFLOAD_PREFIX(target_main)
+
+/*! \fn OFFLOAD_TARGET_ENTER
+ \brief Fill in variable addresses using VarDesc array.
+ \brief Then call back the runtime library to fetch data.
+ \param ofld Offload descriptor created by runtime.
+ \param var_desc_num Number of variable descriptors.
+ \param var_desc Pointer to VarDesc array.
+ \param var_desc2 Pointer to VarDesc2 array.
+*/
+extern "C" void OFFLOAD_TARGET_ENTER(
+ OFFLOAD ofld,
+ int var_desc_num,
+ VarDesc *var_desc,
+ VarDesc2 *var_desc2
+);
+
+/*! \fn OFFLOAD_TARGET_LEAVE
+ \brief Call back the runtime library to gather outputs using VarDesc array.
+ \param ofld Offload descriptor created by OFFLOAD_TARGET_ACQUIRE.
+*/
+extern "C" void OFFLOAD_TARGET_LEAVE(
+ OFFLOAD ofld
+);
+
+// Entry point for the target application.
+extern "C" void OFFLOAD_TARGET_MAIN(void);
+
+#endif // COMPILER_IF_TARGET_H_INCLUDED
diff --git a/final/offload/src/dv_util.cpp b/final/offload/src/dv_util.cpp
new file mode 100644
index 0000000..4ad7271
--- /dev/null
+++ b/final/offload/src/dv_util.cpp
@@ -0,0 +1,131 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_common.h"
+
+bool __dv_is_contiguous(const ArrDesc *dvp)
+{
+ if (dvp->Flags & ArrDescFlagsContiguous) {
+ return true;
+ }
+
+ if (dvp->Rank != 0) {
+ if (dvp->Dim[0].Mult != dvp->Len) {
+ return false;
+ }
+ for (int i = 1; i < dvp->Rank; i++) {
+ if (dvp->Dim[i].Mult !=
+ dvp->Dim[i-1].Extent * dvp->Dim[i-1].Mult) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+bool __dv_is_allocated(const ArrDesc *dvp)
+{
+ return (dvp->Flags & ArrDescFlagsDefined);
+}
+
+uint64_t __dv_data_length(const ArrDesc *dvp)
+{
+ uint64_t size;
+
+ if (dvp->Rank == 0) {
+ size = dvp->Len;
+ return size;
+ }
+
+ size = dvp->Len;
+ for (int i = 0; i < dvp->Rank; ++i) {
+ size += (dvp->Dim[i].Extent-1) * dvp->Dim[i].Mult;
+ }
+ return size;
+}
+
+uint64_t __dv_data_length(const ArrDesc *dvp, int64_t count)
+{
+ if (dvp->Rank == 0) {
+ return count;
+ }
+
+ return count * dvp->Dim[0].Mult;
+}
+
+// Create CeanReadRanges data for reading contiguous ranges of
+// noncontiguous array defined by the argument
+CeanReadRanges * init_read_ranges_dv(const ArrDesc *dvp)
+{
+ int64_t len;
+ int count;
+ int rank = dvp->Rank;
+ CeanReadRanges *res = NULL;
+
+ if (rank != 0) {
+ int i = 0;
+ len = dvp->Len;
+ if (dvp->Dim[0].Mult == len) {
+ for (i = 1; i < rank; i++) {
+ len *= dvp->Dim[i-1].Extent;
+ if (dvp->Dim[i].Mult != len) {
+ break;
+ }
+ }
+ }
+ res = (CeanReadRanges *)malloc(
+ sizeof(CeanReadRanges) + (rank - i) * sizeof(CeanReadDim));
+ res -> last_noncont_ind = rank - i - 1;
+ count = 1;
+ for (; i < rank; i++) {
+ res->Dim[rank - i - 1].count = count;
+ res->Dim[rank - i - 1].size = dvp->Dim[i].Mult;
+ count *= dvp->Dim[i].Extent;
+ }
+ res -> range_max_number = count;
+ res -> range_size = len;
+ res -> ptr = (void*)dvp->Base;
+ res -> current_number = 0;
+ res -> init_offset = 0;
+ }
+ return res;
+}
+
+#if OFFLOAD_DEBUG > 0
+void __dv_desc_dump(const char *name, const ArrDesc *dvp)
+{
+ OFFLOAD_TRACE(3, "%s DV %p\n", name, dvp);
+
+ if (dvp != 0) {
+ OFFLOAD_TRACE(3,
+ " dv->Base = 0x%lx\n"
+ " dv->Len = 0x%lx\n"
+ " dv->Offset = 0x%lx\n"
+ " dv->Flags = 0x%lx\n"
+ " dv->Rank = 0x%lx\n"
+ " dv->Resrvd = 0x%lx\n",
+ dvp->Base,
+ dvp->Len,
+ dvp->Offset,
+ dvp->Flags,
+ dvp->Rank,
+ dvp->Reserved);
+
+ for (int i = 0 ; i < dvp->Rank; i++) {
+ OFFLOAD_TRACE(3,
+ " (%d) Extent=%ld, Multiplier=%ld, LowerBound=%ld\n",
+ i,
+ dvp->Dim[i].Extent,
+ dvp->Dim[i].Mult,
+ dvp->Dim[i].LowerBound);
+ }
+ }
+}
+#endif // OFFLOAD_DEBUG > 0
diff --git a/final/offload/src/dv_util.h b/final/offload/src/dv_util.h
new file mode 100644
index 0000000..fdfa77d
--- /dev/null
+++ b/final/offload/src/dv_util.h
@@ -0,0 +1,63 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef DV_UTIL_H_INCLUDED
+#define DV_UTIL_H_INCLUDED
+
+#include <stdint.h>
+
+// Dope vector declarations
+#define ArrDescMaxArrayRank 31
+
+// Dope vector flags
+#define ArrDescFlagsDefined 1
+#define ArrDescFlagsNodealloc 2
+#define ArrDescFlagsContiguous 4
+
+typedef int64_t dv_size;
+
+typedef struct DimDesc {
+ dv_size Extent; // Number of elements in this dimension
+ dv_size Mult; // Multiplier for this dimension.
+ // The number of bytes between successive
+ // elements in this dimension.
+ dv_size LowerBound; // LowerBound of this dimension
+} DimDesc ;
+
+typedef struct ArrDesc {
+ dv_size Base; // Base address
+ dv_size Len; // Length of data type, used only for
+ // character strings.
+ dv_size Offset;
+ dv_size Flags; // Flags
+ dv_size Rank; // Rank of pointer
+ dv_size Reserved; // reserved for openmp requests
+ DimDesc Dim[ArrDescMaxArrayRank];
+} ArrDesc ;
+
+typedef ArrDesc* pArrDesc;
+
+bool __dv_is_contiguous(const ArrDesc *dvp);
+
+bool __dv_is_allocated(const ArrDesc *dvp);
+
+uint64_t __dv_data_length(const ArrDesc *dvp);
+
+uint64_t __dv_data_length(const ArrDesc *dvp, int64_t nelems);
+
+CeanReadRanges * init_read_ranges_dv(const ArrDesc *dvp);
+
+#if OFFLOAD_DEBUG > 0
+void __dv_desc_dump(const char *name, const ArrDesc *dvp);
+#else // OFFLOAD_DEBUG
+#define __dv_desc_dump(name, dvp)
+#endif // OFFLOAD_DEBUG
+
+#endif // DV_UTIL_H_INCLUDED
diff --git a/final/offload/src/liboffload_error.c b/final/offload/src/liboffload_error.c
new file mode 100644
index 0000000..fc15f8b
--- /dev/null
+++ b/final/offload/src/liboffload_error.c
@@ -0,0 +1,452 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stdio.h>
+#include <stdarg.h>
+#ifndef va_copy
+#define va_copy(dst, src) ((dst) = (src))
+#endif
+
+#include "liboffload_msg.h"
+
+#include "liboffload_error_codes.h"
+
+/***********************************************/
+/* error-handling function, liboffload_error_support */
+/***********************************************/
+
+void __liboffload_error_support(error_types input_tag, ...)
+{
+ va_list args;
+ va_start(args, input_tag);
+
+ switch (input_tag) {
+ case c_device_is_not_available:
+ write_message(stderr, msg_c_device_is_not_available, args);
+ break;
+ case c_invalid_device_number:
+ write_message(stderr, msg_c_invalid_device_number, args);
+ break;
+ case c_send_func_ptr:
+ write_message(stderr, msg_c_send_func_ptr, args);
+ break;
+ case c_receive_func_ptr:
+ write_message(stderr, msg_c_receive_func_ptr, args);
+ break;
+ case c_offload_malloc:
+ write_message(stderr, msg_c_offload_malloc, args);
+ break;
+ case c_offload1:
+ write_message(stderr, msg_c_offload1, args);
+ break;
+ case c_unknown_var_type:
+ write_message(stderr, c_unknown_var_type, args);
+ break;
+ case c_invalid_env_var_value:
+ write_message(stderr, msg_c_invalid_env_var_value, args);
+ break;
+ case c_invalid_env_var_int_value:
+ write_message(stderr, msg_c_invalid_env_var_int_value, args);
+ break;
+ case c_invalid_env_report_value:
+ write_message(stderr, msg_c_invalid_env_report_value, args);
+ break;
+ case c_offload_signaled1:
+ write_message(stderr, msg_c_offload_signaled1, args);
+ break;
+ case c_offload_signaled2:
+ write_message(stderr, msg_c_offload_signaled2, args);
+ break;
+ case c_myowrapper_checkresult:
+ write_message(stderr, msg_c_myowrapper_checkresult, args);
+ break;
+ case c_myotarget_checkresult:
+ write_message(stderr, msg_c_myotarget_checkresult, args);
+ break;
+ case c_offload_descriptor_offload:
+ write_message(stderr, msg_c_offload_descriptor_offload, args);
+ break;
+ case c_merge_var_descs1:
+ write_message(stderr, msg_c_merge_var_descs1, args);
+ break;
+ case c_merge_var_descs2:
+ write_message(stderr, msg_c_merge_var_descs2, args);
+ break;
+ case c_mic_parse_env_var_list1:
+ write_message(stderr, msg_c_mic_parse_env_var_list1, args);
+ break;
+ case c_mic_parse_env_var_list2:
+ write_message(stderr, msg_c_mic_parse_env_var_list2, args);
+ break;
+ case c_mic_process_exit_ret:
+ write_message(stderr, msg_c_mic_process_exit_ret, args);
+ break;
+ case c_mic_process_exit_sig:
+ write_message(stderr, msg_c_mic_process_exit_sig, args);
+ break;
+ case c_mic_process_exit:
+ write_message(stderr, msg_c_mic_process_exit, args);
+ break;
+ case c_mic_init3:
+ write_message(stderr, msg_c_mic_init3, args);
+ break;
+ case c_mic_init4:
+ write_message(stderr, msg_c_mic_init4, args);
+ break;
+ case c_mic_init5:
+ write_message(stderr, msg_c_mic_init5, args);
+ break;
+ case c_mic_init6:
+ write_message(stderr, msg_c_mic_init6, args);
+ break;
+ case c_no_static_var_data:
+ write_message(stderr, msg_c_no_static_var_data, args);
+ break;
+ case c_no_ptr_data:
+ write_message(stderr, msg_c_no_ptr_data, args);
+ break;
+ case c_get_engine_handle:
+ write_message(stderr, msg_c_get_engine_handle, args);
+ break;
+ case c_get_engine_index:
+ write_message(stderr, msg_c_get_engine_index, args);
+ break;
+ case c_process_create:
+ write_message(stderr, msg_c_process_create, args);
+ break;
+ case c_process_wait_shutdown:
+ write_message(stderr, msg_c_process_wait_shutdown, args);
+ break;
+ case c_process_proxy_flush:
+ write_message(stderr, msg_c_process_proxy_flush, args);
+ break;
+ case c_process_get_func_handles:
+ write_message(stderr, msg_c_process_get_func_handles, args);
+ break;
+ case c_load_library:
+ write_message(stderr, msg_c_load_library, args);
+ break;
+ case c_coipipe_max_number:
+ write_message(stderr, msg_c_coi_pipeline_max_number, args);
+ break;
+ case c_pipeline_create:
+ write_message(stderr, msg_c_pipeline_create, args);
+ break;
+ case c_pipeline_run_func:
+ write_message(stderr, msg_c_pipeline_run_func, args);
+ break;
+ case c_pipeline_start_run_funcs:
+ write_message(stderr, msg_c_pipeline_start_run_funcs, args);
+ break;
+ case c_buf_create:
+ write_message(stderr, msg_c_buf_create, args);
+ break;
+ case c_buf_create_out_of_mem:
+ write_message(stderr, msg_c_buf_create_out_of_mem, args);
+ break;
+ case c_buf_create_from_mem:
+ write_message(stderr, msg_c_buf_create_from_mem, args);
+ break;
+ case c_buf_destroy:
+ write_message(stderr, msg_c_buf_destroy, args);
+ break;
+ case c_buf_map:
+ write_message(stderr, msg_c_buf_map, args);
+ break;
+ case c_buf_unmap:
+ write_message(stderr, msg_c_buf_unmap, args);
+ break;
+ case c_buf_read:
+ write_message(stderr, msg_c_buf_read, args);
+ break;
+ case c_buf_write:
+ write_message(stderr, msg_c_buf_write, args);
+ break;
+ case c_buf_copy:
+ write_message(stderr, msg_c_buf_copy, args);
+ break;
+ case c_buf_get_address:
+ write_message(stderr, msg_c_buf_get_address, args);
+ break;
+ case c_buf_add_ref:
+ write_message(stderr, msg_c_buf_add_ref, args);
+ break;
+ case c_buf_release_ref:
+ write_message(stderr, msg_c_buf_release_ref, args);
+ break;
+ case c_buf_set_state:
+ write_message(stderr, msg_c_buf_set_state, args);
+ break;
+ case c_event_wait:
+ write_message(stderr, msg_c_event_wait, args);
+ break;
+ case c_zero_or_neg_ptr_len:
+ write_message(stderr, msg_c_zero_or_neg_ptr_len, args);
+ break;
+ case c_zero_or_neg_transfer_size:
+ write_message(stderr, msg_c_zero_or_neg_transfer_size, args);
+ break;
+ case c_bad_ptr_mem_range:
+ write_message(stderr, msg_c_bad_ptr_mem_range, args);
+ break;
+ case c_different_src_and_dstn_sizes:
+ write_message(stderr, msg_c_different_src_and_dstn_sizes, args);
+ break;
+ case c_ranges_dont_match:
+ write_message(stderr, msg_c_ranges_dont_match, args);
+ break;
+ case c_destination_is_over:
+ write_message(stderr, msg_c_destination_is_over, args);
+ break;
+ case c_slice_of_noncont_array:
+ write_message(stderr, msg_c_slice_of_noncont_array, args);
+ break;
+ case c_non_contiguous_dope_vector:
+ write_message(stderr, msg_c_non_contiguous_dope_vector, args);
+ break;
+ case c_pointer_array_mismatch:
+ write_message(stderr, msg_c_pointer_array_mismatch, args);
+ break;
+ case c_omp_invalid_device_num_env:
+ write_message(stderr, msg_c_omp_invalid_device_num_env, args);
+ break;
+ case c_omp_invalid_device_num:
+ write_message(stderr, msg_c_omp_invalid_device_num, args);
+ break;
+ case c_unknown_binary_type:
+ write_message(stderr, msg_c_unknown_binary_type, args);
+ break;
+ case c_multiple_target_exes:
+ write_message(stderr, msg_c_multiple_target_exes, args);
+ break;
+ case c_no_target_exe:
+ write_message(stderr, msg_c_no_target_exe, args);
+ break;
+ case c_report_unknown_timer_node:
+ write_message(stderr, msg_c_report_unknown_timer_node, args);
+ break;
+ case c_report_unknown_trace_node:
+ write_message(stderr, msg_c_report_unknown_trace_node, args);
+ break;
+ }
+ va_end(args);
+}
+
+char const * report_get_message_str(error_types input_tag)
+{
+ switch (input_tag) {
+ case c_report_title:
+ return (offload_get_message_str(msg_c_report_title));
+ case c_report_from_file:
+ return (offload_get_message_str(msg_c_report_from_file));
+ case c_report_offload:
+ return (offload_get_message_str(msg_c_report_offload));
+ case c_report_mic:
+ return (offload_get_message_str(msg_c_report_mic));
+ case c_report_file:
+ return (offload_get_message_str(msg_c_report_file));
+ case c_report_line:
+ return (offload_get_message_str(msg_c_report_line));
+ case c_report_host:
+ return (offload_get_message_str(msg_c_report_host));
+ case c_report_tag:
+ return (offload_get_message_str(msg_c_report_tag));
+ case c_report_cpu_time:
+ return (offload_get_message_str(msg_c_report_cpu_time));
+ case c_report_seconds:
+ return (offload_get_message_str(msg_c_report_seconds));
+ case c_report_cpu_to_mic_data:
+ return (offload_get_message_str(msg_c_report_cpu_to_mic_data));
+ case c_report_bytes:
+ return (offload_get_message_str(msg_c_report_bytes));
+ case c_report_mic_time:
+ return (offload_get_message_str(msg_c_report_mic_time));
+ case c_report_mic_to_cpu_data:
+ return (offload_get_message_str(msg_c_report_mic_to_cpu_data));
+ case c_report_compute:
+ return (offload_get_message_str(msg_c_report_compute));
+ case c_report_copyin_data:
+ return (offload_get_message_str(msg_c_report_copyin_data));
+ case c_report_copyout_data:
+ return (offload_get_message_str(msg_c_report_copyout_data));
+ case c_report_create_buf_host:
+ return (offload_get_message_str(c_report_create_buf_host));
+ case c_report_create_buf_mic:
+ return (offload_get_message_str(msg_c_report_create_buf_mic));
+ case c_report_destroy:
+ return (offload_get_message_str(msg_c_report_destroy));
+ case c_report_gather_copyin_data:
+ return (offload_get_message_str(msg_c_report_gather_copyin_data));
+ case c_report_gather_copyout_data:
+ return (offload_get_message_str(msg_c_report_gather_copyout_data));
+ case c_report_state_signal:
+ return (offload_get_message_str(msg_c_report_state_signal));
+ case c_report_signal:
+ return (offload_get_message_str(msg_c_report_signal));
+ case c_report_wait:
+ return (offload_get_message_str(msg_c_report_wait));
+ case c_report_init:
+ return (offload_get_message_str(msg_c_report_init));
+ case c_report_init_func:
+ return (offload_get_message_str(msg_c_report_init_func));
+ case c_report_logical_card:
+ return (offload_get_message_str(msg_c_report_logical_card));
+ case c_report_mic_myo_fptr:
+ return (offload_get_message_str(msg_c_report_mic_myo_fptr));
+ case c_report_mic_myo_shared:
+ return (offload_get_message_str(msg_c_report_mic_myo_shared));
+ case c_report_myoacquire:
+ return (offload_get_message_str(msg_c_report_myoacquire));
+ case c_report_myofini:
+ return (offload_get_message_str(msg_c_report_myofini));
+ case c_report_myoinit:
+ return (offload_get_message_str(msg_c_report_myoinit));
+ case c_report_myoregister:
+ return (offload_get_message_str(msg_c_report_myoregister));
+ case c_report_myorelease:
+ return (offload_get_message_str(msg_c_report_myorelease));
+ case c_report_myosharedalignedfree:
+ return (
+ offload_get_message_str(msg_c_report_myosharedalignedfree));
+ case c_report_myosharedalignedmalloc:
+ return (
+ offload_get_message_str(msg_c_report_myosharedalignedmalloc));
+ case c_report_myosharedfree:
+ return (offload_get_message_str(msg_c_report_myosharedfree));
+ case c_report_myosharedmalloc:
+ return (offload_get_message_str(msg_c_report_myosharedmalloc));
+ case c_report_physical_card:
+ return (offload_get_message_str(msg_c_report_physical_card));
+ case c_report_receive_pointer_data:
+ return (
+ offload_get_message_str(msg_c_report_receive_pointer_data));
+ case c_report_received_pointer_data:
+ return (
+ offload_get_message_str(msg_c_report_received_pointer_data));
+ case c_report_register:
+ return (offload_get_message_str(msg_c_report_register));
+ case c_report_scatter_copyin_data:
+ return (offload_get_message_str(msg_c_report_scatter_copyin_data));
+ case c_report_scatter_copyout_data:
+ return (
+ offload_get_message_str(msg_c_report_scatter_copyout_data));
+ case c_report_send_pointer_data:
+ return (offload_get_message_str(msg_c_report_send_pointer_data));
+ case c_report_sent_pointer_data:
+ return (offload_get_message_str(msg_c_report_sent_pointer_data));
+ case c_report_start:
+ return (offload_get_message_str(msg_c_report_start));
+ case c_report_start_target_func:
+ return (offload_get_message_str(msg_c_report_start_target_func));
+ case c_report_state:
+ return (offload_get_message_str(msg_c_report_state));
+ case c_report_unregister:
+ return (offload_get_message_str(msg_c_report_unregister));
+ case c_report_var:
+ return (offload_get_message_str(msg_c_report_var));
+
+ default:
+ LIBOFFLOAD_ERROR(c_report_unknown_trace_node);
+ abort();
+ }
+}
+
+char const * report_get_host_stage_str(int i)
+{
+ switch (i) {
+ case c_offload_host_total_offload:
+ return (
+ offload_get_message_str(msg_c_report_host_total_offload_time));
+ case c_offload_host_initialize:
+ return (offload_get_message_str(msg_c_report_host_initialize));
+ case c_offload_host_target_acquire:
+ return (
+ offload_get_message_str(msg_c_report_host_target_acquire));
+ case c_offload_host_wait_deps:
+ return (offload_get_message_str(msg_c_report_host_wait_deps));
+ case c_offload_host_setup_buffers:
+ return (offload_get_message_str(msg_c_report_host_setup_buffers));
+ case c_offload_host_alloc_buffers:
+ return (offload_get_message_str(msg_c_report_host_alloc_buffers));
+ case c_offload_host_setup_misc_data:
+ return (
+ offload_get_message_str(msg_c_report_host_setup_misc_data));
+ case c_offload_host_alloc_data_buffer:
+ return (
+ offload_get_message_str(msg_c_report_host_alloc_data_buffer));
+ case c_offload_host_send_pointers:
+ return (offload_get_message_str(msg_c_report_host_send_pointers));
+ case c_offload_host_gather_inputs:
+ return (offload_get_message_str(msg_c_report_host_gather_inputs));
+ case c_offload_host_map_in_data_buffer:
+ return (
+ offload_get_message_str(msg_c_report_host_map_in_data_buffer));
+ case c_offload_host_unmap_in_data_buffer:
+ return (offload_get_message_str(
+ msg_c_report_host_unmap_in_data_buffer));
+ case c_offload_host_start_compute:
+ return (offload_get_message_str(msg_c_report_host_start_compute));
+ case c_offload_host_wait_compute:
+ return (offload_get_message_str(msg_c_report_host_wait_compute));
+ case c_offload_host_start_buffers_reads:
+ return (offload_get_message_str(
+ msg_c_report_host_start_buffers_reads));
+ case c_offload_host_scatter_outputs:
+ return (
+ offload_get_message_str(msg_c_report_host_scatter_outputs));
+ case c_offload_host_map_out_data_buffer:
+ return (offload_get_message_str(
+ msg_c_report_host_map_out_data_buffer));
+ case c_offload_host_unmap_out_data_buffer:
+ return (offload_get_message_str(
+ msg_c_report_host_unmap_out_data_buffer));
+ case c_offload_host_wait_buffers_reads:
+ return (
+ offload_get_message_str(msg_c_report_host_wait_buffers_reads));
+ case c_offload_host_destroy_buffers:
+ return (
+ offload_get_message_str(msg_c_report_host_destroy_buffers));
+ default:
+ LIBOFFLOAD_ERROR(c_report_unknown_timer_node);
+ abort();
+ }
+}
+
+char const * report_get_target_stage_str(int i)
+{
+ switch (i) {
+ case c_offload_target_total_time:
+ return (offload_get_message_str(msg_c_report_target_total_time));
+ case c_offload_target_descriptor_setup:
+ return (
+ offload_get_message_str(msg_c_report_target_descriptor_setup));
+ case c_offload_target_func_lookup:
+ return (offload_get_message_str(msg_c_report_target_func_lookup));
+ case c_offload_target_func_time:
+ return (offload_get_message_str(msg_c_report_target_func_time));
+ case c_offload_target_scatter_inputs:
+ return (
+ offload_get_message_str(msg_c_report_target_scatter_inputs));
+ case c_offload_target_add_buffer_refs:
+ return (
+ offload_get_message_str(msg_c_report_target_add_buffer_refs));
+ case c_offload_target_compute:
+ return (offload_get_message_str(msg_c_report_target_compute));
+ case c_offload_target_gather_outputs:
+ return (offload_get_message_str
+ (msg_c_report_target_gather_outputs));
+ case c_offload_target_release_buffer_refs:
+ return (offload_get_message_str(
+ msg_c_report_target_release_buffer_refs));
+ default:
+ LIBOFFLOAD_ERROR(c_report_unknown_timer_node);
+ abort();
+ }
+}
diff --git a/final/offload/src/liboffload_error_codes.h b/final/offload/src/liboffload_error_codes.h
new file mode 100644
index 0000000..982167b
--- /dev/null
+++ b/final/offload/src/liboffload_error_codes.h
@@ -0,0 +1,276 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#if !defined(LIBOFFLOAD_ERROR_CODES_H)
+#define LIBOFFLOAD_ERROR_CODES_H
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef enum
+{
+ c_device_is_not_available = 0,
+ c_invalid_device_number,
+ c_offload1,
+ c_unknown_var_type,
+ c_send_func_ptr,
+ c_receive_func_ptr,
+ c_offload_malloc,
+ c_invalid_env_var_value,
+ c_invalid_env_var_int_value,
+ c_invalid_env_report_value,
+ c_offload_signaled1,
+ c_offload_signaled2,
+ c_myotarget_checkresult,
+ c_myowrapper_checkresult,
+ c_offload_descriptor_offload,
+ c_merge_var_descs1,
+ c_merge_var_descs2,
+ c_mic_parse_env_var_list1,
+ c_mic_parse_env_var_list2,
+ c_mic_process_exit_ret,
+ c_mic_process_exit_sig,
+ c_mic_process_exit,
+ c_mic_init3,
+ c_mic_init4,
+ c_mic_init5,
+ c_mic_init6,
+ c_no_static_var_data,
+ c_no_ptr_data,
+ c_get_engine_handle,
+ c_get_engine_index,
+ c_process_create,
+ c_process_get_func_handles,
+ c_process_wait_shutdown,
+ c_process_proxy_flush,
+ c_load_library,
+ c_pipeline_create,
+ c_pipeline_run_func,
+ c_pipeline_start_run_funcs,
+ c_buf_create,
+ c_buf_create_out_of_mem,
+ c_buf_create_from_mem,
+ c_buf_destroy,
+ c_buf_map,
+ c_buf_unmap,
+ c_buf_read,
+ c_buf_write,
+ c_buf_copy,
+ c_buf_get_address,
+ c_buf_add_ref,
+ c_buf_release_ref,
+ c_buf_set_state,
+ c_event_wait,
+ c_zero_or_neg_ptr_len,
+ c_zero_or_neg_transfer_size,
+ c_bad_ptr_mem_range,
+ c_different_src_and_dstn_sizes,
+ c_ranges_dont_match,
+ c_destination_is_over,
+ c_slice_of_noncont_array,
+ c_non_contiguous_dope_vector,
+ c_pointer_array_mismatch,
+ c_omp_invalid_device_num_env,
+ c_omp_invalid_device_num,
+ c_unknown_binary_type,
+ c_multiple_target_exes,
+ c_no_target_exe,
+ c_report_host,
+ c_report_target,
+ c_report_title,
+ c_report_from_file,
+ c_report_file,
+ c_report_line,
+ c_report_tag,
+ c_report_seconds,
+ c_report_bytes,
+ c_report_mic,
+ c_report_cpu_time,
+ c_report_cpu_to_mic_data,
+ c_report_mic_time,
+ c_report_mic_to_cpu_data,
+ c_report_unknown_timer_node,
+ c_report_unknown_trace_node,
+ c_report_offload,
+ c_report_w_tag,
+ c_report_state,
+ c_report_start,
+ c_report_init,
+ c_report_logical_card,
+ c_report_physical_card,
+ c_report_register,
+ c_report_init_func,
+ c_report_create_buf_host,
+ c_report_create_buf_mic,
+ c_report_send_pointer_data,
+ c_report_sent_pointer_data,
+ c_report_gather_copyin_data,
+ c_report_copyin_data,
+ c_report_state_signal,
+ c_report_signal,
+ c_report_wait,
+ c_report_compute,
+ c_report_receive_pointer_data,
+ c_report_received_pointer_data,
+ c_report_start_target_func,
+ c_report_var,
+ c_report_scatter_copyin_data,
+ c_report_gather_copyout_data,
+ c_report_scatter_copyout_data,
+ c_report_copyout_data,
+ c_report_unregister,
+ c_report_destroy,
+ c_report_myoinit,
+ c_report_myoregister,
+ c_report_myofini,
+ c_report_mic_myo_shared,
+ c_report_mic_myo_fptr,
+ c_report_myosharedmalloc,
+ c_report_myosharedfree,
+ c_report_myosharedalignedmalloc,
+ c_report_myosharedalignedfree,
+ c_report_myoacquire,
+ c_report_myorelease,
+ c_coipipe_max_number
+} error_types;
+
+enum OffloadHostPhase {
+ // Total time on host for entire offload
+ c_offload_host_total_offload = 0,
+
+ // Time to load target binary
+ c_offload_host_initialize,
+
+ // Time to acquire lrb availability dynamically
+ c_offload_host_target_acquire,
+
+ // Time to wait for dependencies
+ c_offload_host_wait_deps,
+
+ // Time to allocate pointer buffers, initiate writes for pointers
+ // and calculate size of copyin/copyout buffer
+ c_offload_host_setup_buffers,
+
+ // Time to allocate pointer buffers
+ c_offload_host_alloc_buffers,
+
+ // Time to initialize misc data
+ c_offload_host_setup_misc_data,
+
+ // Time to allocate copyin/copyout buffer
+ c_offload_host_alloc_data_buffer,
+
+ // Time to initiate writes from host pointers to buffers
+ c_offload_host_send_pointers,
+
+ // Time to Gather IN data of offload into buffer
+ c_offload_host_gather_inputs,
+
+ // Time to map buffer
+ c_offload_host_map_in_data_buffer,
+
+ // Time to unmap buffer
+ c_offload_host_unmap_in_data_buffer,
+
+ // Time to start remote function call that does computation on lrb
+ c_offload_host_start_compute,
+
+ // Time to wait for compute to finish
+ c_offload_host_wait_compute,
+
+ // Time to initiate reads from pointer buffers
+ c_offload_host_start_buffers_reads,
+
+ // Time to update host variabels with OUT data from buffer
+ c_offload_host_scatter_outputs,
+
+ // Time to map buffer
+ c_offload_host_map_out_data_buffer,
+
+ // Time to unmap buffer
+ c_offload_host_unmap_out_data_buffer,
+
+ // Time to wait reads from buffers to finish
+ c_offload_host_wait_buffers_reads,
+
+ // Time to destroy buffers that are no longer needed
+ c_offload_host_destroy_buffers,
+
+ // LAST TIME MONITOR
+ c_offload_host_max_phase
+};
+
+enum OffloadTargetPhase {
+ // Total time spent on the target
+ c_offload_target_total_time = 0,
+
+ // Time to initialize offload descriptor
+ c_offload_target_descriptor_setup,
+
+ // Time to find target entry point in lookup table
+ c_offload_target_func_lookup,
+
+ // Total time spend executing offload entry
+ c_offload_target_func_time,
+
+ // Time to initialize target variables with IN values from buffer
+ c_offload_target_scatter_inputs,
+
+ // Time to add buffer reference for pointer buffers
+ c_offload_target_add_buffer_refs,
+
+ // Total time on lrb for computation
+ c_offload_target_compute,
+
+ // On lrb, time to copy OUT into buffer
+ c_offload_target_gather_outputs,
+
+ // Time to release buffer references
+ c_offload_target_release_buffer_refs,
+
+ // LAST TIME MONITOR
+ c_offload_target_max_phase
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void __liboffload_error_support(error_types input_tag, ...);
+void __liboffload_report_support(error_types input_tag, ...);
+char const *offload_get_message_str(int msgCode);
+char const * report_get_message_str(error_types input_tag);
+char const * report_get_host_stage_str(int i);
+char const * report_get_target_stage_str(int i);
+#ifdef __cplusplus
+}
+#endif
+
+#define test_msg_cat(nm, msg) \
+ fprintf(stderr, "\t TEST for %s \n \t", nm); \
+ __liboffload_error_support(msg);
+
+#define test_msg_cat1(nm, msg, ...) \
+ fprintf(stderr, "\t TEST for %s \n \t", nm); \
+ __liboffload_error_support(msg, __VA_ARGS__);
+
+void write_message(FILE * file, int msgCode, va_list args_p);
+
+#define LIBOFFLOAD_ERROR __liboffload_error_support
+
+#ifdef TARGET_WINNT
+#define LIBOFFLOAD_ABORT \
+ _set_abort_behavior(0, _WRITE_ABORT_MSG); \
+ abort()
+#else
+#define LIBOFFLOAD_ABORT \
+ abort()
+#endif
+
+#endif // !defined(LIBOFFLOAD_ERROR_CODES_H)
diff --git a/final/offload/src/liboffload_msg.c b/final/offload/src/liboffload_msg.c
new file mode 100644
index 0000000..b160392
--- /dev/null
+++ b/final/offload/src/liboffload_msg.c
@@ -0,0 +1,35 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+
+#include <stdio.h>
+
+// ===========================================================================
+// Bring in the static string table and the enumerations for indexing into
+// it.
+// ===========================================================================
+
+#include "liboffload_msg.h"
+
+# define DYNART_STDERR_PUTS(__message_text__) fputs((__message_text__),stderr)
+
+// ===========================================================================
+// Now the code for accessing the message catalogs
+// ===========================================================================
+
+
+ void write_message(FILE * file, int msgCode) {
+ fputs(MESSAGE_TABLE_NAME[ msgCode ], file);
+ fflush(file);
+ }
+
+ char const *offload_get_message_str(int msgCode) {
+ return MESSAGE_TABLE_NAME[ msgCode ];
+ }
diff --git a/final/offload/src/liboffload_msg.h b/final/offload/src/liboffload_msg.h
new file mode 100644
index 0000000..c1445f9
--- /dev/null
+++ b/final/offload/src/liboffload_msg.h
@@ -0,0 +1,326 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+// file: liboffload_msg.h
+enum {
+ __dummy__ = 0,
+ msg_c_device_is_not_available,
+ msg_c_invalid_device_number,
+ msg_c_send_func_ptr,
+ msg_c_receive_func_ptr,
+ msg_c_offload_malloc,
+ msg_c_offload1,
+ msg_c_unknown_var_type,
+ msg_c_invalid_env_var_value,
+ msg_c_invalid_env_var_int_value,
+ msg_c_invalid_env_report_value,
+ msg_c_offload_signaled1,
+ msg_c_offload_signaled2,
+ msg_c_myowrapper_checkresult,
+ msg_c_myotarget_checkresult,
+ msg_c_offload_descriptor_offload,
+ msg_c_merge_var_descs1,
+ msg_c_merge_var_descs2,
+ msg_c_mic_parse_env_var_list1,
+ msg_c_mic_parse_env_var_list2,
+ msg_c_mic_process_exit_ret,
+ msg_c_mic_process_exit_sig,
+ msg_c_mic_process_exit,
+ msg_c_mic_init3,
+ msg_c_mic_init4,
+ msg_c_mic_init5,
+ msg_c_mic_init6,
+ msg_c_no_static_var_data,
+ msg_c_no_ptr_data,
+ msg_c_get_engine_handle,
+ msg_c_get_engine_index,
+ msg_c_process_create,
+ msg_c_process_get_func_handles,
+ msg_c_process_wait_shutdown,
+ msg_c_process_proxy_flush,
+ msg_c_load_library,
+ msg_c_pipeline_create,
+ msg_c_pipeline_run_func,
+ msg_c_pipeline_start_run_funcs,
+ msg_c_buf_create,
+ msg_c_buf_create_out_of_mem,
+ msg_c_buf_create_from_mem,
+ msg_c_buf_destroy,
+ msg_c_buf_map,
+ msg_c_buf_unmap,
+ msg_c_buf_read,
+ msg_c_buf_write,
+ msg_c_buf_copy,
+ msg_c_buf_get_address,
+ msg_c_buf_add_ref,
+ msg_c_buf_release_ref,
+ msg_c_buf_set_state,
+ msg_c_event_wait,
+ msg_c_zero_or_neg_ptr_len,
+ msg_c_zero_or_neg_transfer_size,
+ msg_c_bad_ptr_mem_range,
+ msg_c_different_src_and_dstn_sizes,
+ msg_c_non_contiguous_dope_vector,
+ msg_c_omp_invalid_device_num_env,
+ msg_c_omp_invalid_device_num,
+ msg_c_unknown_binary_type,
+ msg_c_multiple_target_exes,
+ msg_c_no_target_exe,
+ msg_c_report_unknown_timer_node,
+ msg_c_report_unknown_trace_node,
+ msg_c_report_host,
+ msg_c_report_mic,
+ msg_c_report_title,
+ msg_c_report_seconds,
+ msg_c_report_bytes,
+ msg_c_report_cpu_time,
+ msg_c_report_mic_time,
+ msg_c_report_tag,
+ msg_c_report_from_file,
+ msg_c_report_file,
+ msg_c_report_line,
+ msg_c_report_cpu_to_mic_data,
+ msg_c_report_mic_to_cpu_data,
+ msg_c_report_offload,
+ msg_c_report_w_tag,
+ msg_c_report_state,
+ msg_c_report_start,
+ msg_c_report_init,
+ msg_c_report_logical_card,
+ msg_c_report_physical_card,
+ msg_c_report_register,
+ msg_c_report_init_func,
+ msg_c_report_create_buf_host,
+ msg_c_report_create_buf_mic,
+ msg_c_report_send_pointer_data,
+ msg_c_report_sent_pointer_data,
+ msg_c_report_gather_copyin_data,
+ msg_c_report_copyin_data,
+ msg_c_report_state_signal,
+ msg_c_report_signal,
+ msg_c_report_wait,
+ msg_c_report_compute,
+ msg_c_report_receive_pointer_data,
+ msg_c_report_received_pointer_data,
+ msg_c_report_start_target_func,
+ msg_c_report_var,
+ msg_c_report_scatter_copyin_data,
+ msg_c_report_gather_copyout_data,
+ msg_c_report_scatter_copyout_data,
+ msg_c_report_copyout_data,
+ msg_c_report_unregister,
+ msg_c_report_destroy,
+ msg_c_report_myoinit,
+ msg_c_report_myoregister,
+ msg_c_report_myofini,
+ msg_c_report_mic_myo_shared,
+ msg_c_report_mic_myo_fptr,
+ msg_c_report_myosharedmalloc,
+ msg_c_report_myosharedfree,
+ msg_c_report_myosharedalignedmalloc,
+ msg_c_report_myosharedalignedfree,
+ msg_c_report_myoacquire,
+ msg_c_report_myorelease,
+ msg_c_report_host_total_offload_time,
+ msg_c_report_host_initialize,
+ msg_c_report_host_target_acquire,
+ msg_c_report_host_wait_deps,
+ msg_c_report_host_setup_buffers,
+ msg_c_report_host_alloc_buffers,
+ msg_c_report_host_setup_misc_data,
+ msg_c_report_host_alloc_data_buffer,
+ msg_c_report_host_send_pointers,
+ msg_c_report_host_gather_inputs,
+ msg_c_report_host_map_in_data_buffer,
+ msg_c_report_host_unmap_in_data_buffer,
+ msg_c_report_host_start_compute,
+ msg_c_report_host_wait_compute,
+ msg_c_report_host_start_buffers_reads,
+ msg_c_report_host_scatter_outputs,
+ msg_c_report_host_map_out_data_buffer,
+ msg_c_report_host_unmap_out_data_buffer,
+ msg_c_report_host_wait_buffers_reads,
+ msg_c_report_host_destroy_buffers,
+ msg_c_report_target_total_time,
+ msg_c_report_target_descriptor_setup,
+ msg_c_report_target_func_lookup,
+ msg_c_report_target_func_time,
+ msg_c_report_target_scatter_inputs,
+ msg_c_report_target_add_buffer_refs,
+ msg_c_report_target_compute,
+ msg_c_report_target_gather_outputs,
+ msg_c_report_target_release_buffer_refs,
+ msg_c_coi_pipeline_max_number,
+ msg_c_ranges_dont_match,
+ msg_c_destination_is_over,
+ msg_c_slice_of_noncont_array,
+ msg_c_pointer_array_mismatch,
+ lastMsg = 152,
+ firstMsg = 1
+};
+
+
+#if !defined(MESSAGE_TABLE_NAME)
+# define MESSAGE_TABLE_NAME __liboffload_message_table
+#endif
+
+static char const * MESSAGE_TABLE_NAME[] = {
+ /* 0 __dummy__ */ "Un-used message",
+ /* 1 msg_c_device_is_not_available */ "offload error: cannot offload to MIC - device is not available",
+ /* 2 msg_c_invalid_device_number */ "offload error: expected a number greater than or equal to -1",
+ /* 3 msg_c_send_func_ptr */ "offload error: cannot find function name for address %p",
+ /* 4 msg_c_receive_func_ptr */ "offload error: cannot find address of function %s",
+ /* 5 msg_c_offload_malloc */ "offload error: memory allocation failed (requested=%lld bytes, align %lld)",
+ /* 6 msg_c_offload1 */ "offload error: device %d does not have a pending signal for wait(%p)",
+ /* 7 msg_c_unknown_var_type */ "offload error: unknown variable type %d",
+ /* 8 msg_c_invalid_env_var_value */ "offload warning: ignoring invalid value specified for %s",
+ /* 9 msg_c_invalid_env_var_int_value */ "offload warning: specify an integer value for %s",
+ /* 10 msg_c_invalid_env_report_value */ "offload warning: ignoring %s setting; use a value in range 1-3",
+ /* 11 msg_c_offload_signaled1 */ "offload error: invalid device number %d specified in _Offload_signaled",
+ /* 12 msg_c_offload_signaled2 */ "offload error: invalid signal %p specified for _Offload_signaled",
+ /* 13 msg_c_myowrapper_checkresult */ "offload error: %s failed with error %d",
+ /* 14 msg_c_myotarget_checkresult */ "offload error: %s failed with error %d",
+ /* 15 msg_c_offload_descriptor_offload */ "offload error: cannot find offload entry %s",
+ /* 16 msg_c_merge_var_descs1 */ "offload error: unexpected number of variable descriptors",
+ /* 17 msg_c_merge_var_descs2 */ "offload error: unexpected variable type",
+ /* 18 msg_c_mic_parse_env_var_list1 */ "offload_error: MIC environment variable must begin with an alpabetic character",
+ /* 19 msg_c_mic_parse_env_var_list2 */ "offload_error: MIC environment variable value must be specified with ‘=’",
+ /* 20 msg_c_mic_process_exit_ret */ "offload error: process on the device %d unexpectedly exited with code %d",
+ /* 21 msg_c_mic_process_exit_sig */ "offload error: process on the device %d was terminated by signal %d (%s)",
+ /* 22 msg_c_mic_process_exit */ "offload error: process on the device %d was unexpectedly terminated",
+ /* 23 msg_c_mic_init3 */ "offload warning: ignoring MIC_STACKSIZE setting; use a value >= 16K and a multiple of 4K",
+ /* 24 msg_c_mic_init4 */ "offload error: thread key create failed with error %d",
+ /* 25 msg_c_mic_init5 */ "offload warning: specify OFFLOAD_DEVICES as comma-separated physical device numbers or 'none'",
+ /* 26 msg_c_mic_init6 */ "offload warning: OFFLOAD_DEVICES device number %d does not correspond to a physical device",
+ /* 27 msg_c_no_static_var_data */ "offload error: cannot find data associated with statically allocated variable %p",
+ /* 28 msg_c_no_ptr_data */ "offload error: cannot find data associated with pointer variable %p",
+ /* 29 msg_c_get_engine_handle */ "offload error: cannot get device %d handle (error code %d)",
+ /* 30 msg_c_get_engine_index */ "offload error: cannot get physical index for logical device %d (error code %d)",
+ /* 31 msg_c_process_create */ "offload error: cannot start process on the device %d (error code %d)",
+ /* 32 msg_c_process_get_func_handles */ "offload error: cannot get function handles on the device %d (error code %d)",
+ /* 33 msg_c_process_wait_shutdown */ "offload error: wait for process shutdown failed on device %d (error code %d)",
+ /* 34 msg_c_process_proxy_flush */ "offload error: cannot flush process output on device %d (error code %d)",
+ /* 35 msg_c_load_library */ "offload error: cannot load library to the device %d (error code %d)",
+ /* 36 msg_c_pipeline_create */ "offload error: cannot create pipeline on the device %d (error code %d)",
+ /* 37 msg_c_pipeline_run_func */ "offload error: cannot execute function on the device %d (error code %d)",
+ /* 38 msg_c_pipeline_start_run_funcs */ "offload error: cannot start executing pipeline function on the device %d (error code %d)",
+ /* 39 msg_c_buf_create */ "offload error: cannot create buffer on device %d (error code %d)",
+ /* 40 msg_c_buf_create_out_of_mem */ "offload error: cannot create buffer on device %d, out of memory",
+ /* 41 msg_c_buf_create_from_mem */ "offload error: cannot create buffer from memory on device %d (error code %d)",
+ /* 42 msg_c_buf_destroy */ "offload error: buffer destroy failed (error code %d)",
+ /* 43 msg_c_buf_map */ "offload error: buffer map failed (error code %d)",
+ /* 44 msg_c_buf_unmap */ "offload error: buffer unmap failed (error code %d)",
+ /* 45 msg_c_buf_read */ "offload error: buffer read failed (error code %d)",
+ /* 46 msg_c_buf_write */ "offload error: buffer write failed (error code %d)",
+ /* 47 msg_c_buf_copy */ "offload error: buffer copy failed (error code %d)",
+ /* 48 msg_c_buf_get_address */ "offload error: cannot get buffer address on device %d (error code %d)",
+ /* 49 msg_c_buf_add_ref */ "offload error: cannot reuse buffer memory on device %d (error code %d)",
+ /* 50 msg_c_buf_release_ref */ "offload error: cannot release buffer memory on device %d (error code %d)",
+ /* 51 msg_c_buf_set_state */ "offload error: buffer set state failed (error code %d)",
+ /* 52 msg_c_event_wait */ "offload error: wait for event to become signaled failed (error code %d)",
+ /* 53 msg_c_zero_or_neg_ptr_len */ "offload error: memory allocation of negative length is not supported",
+ /* 54 msg_c_zero_or_neg_transfer_size */ "offload error: data transfer of zero or negative size is not supported",
+ /* 55 msg_c_bad_ptr_mem_range */ "offload error: address range partially overlaps with existing allocation",
+ /* 56 msg_c_different_src_and_dstn_sizes */ "offload error: size of the source %d differs from size of the destination %d",
+ /* 57 msg_c_non_contiguous_dope_vector */ "offload error: offload data transfer supports only a single contiguous memory range per variable",
+ /* 58 msg_c_omp_invalid_device_num_env */ "offload warning: ignoring %s setting; use a non-negative integer value",
+ /* 59 msg_c_omp_invalid_device_num */ "offload error: device number should be a non-negative integer value",
+ /* 60 msg_c_unknown_binary_type */ "offload error: unexpected embedded target binary type, expected either an executable or shared library",
+ /* 61 msg_c_multiple_target_exes */ "offload error: more that one target executable found",
+ /* 62 msg_c_no_target_exe */ "offload error: target executable is not available",
+ /* 63 msg_c_report_unknown_timer_node */ "offload error: unknown timer node",
+ /* 64 msg_c_report_unknown_trace_node */ "offload error: unknown trace node",
+ /* 65 msg_c_report_host */ "HOST",
+ /* 66 msg_c_report_mic */ "MIC",
+ /* 67 msg_c_report_title */ "timer data (sec)",
+ /* 68 msg_c_report_seconds */ "(seconds)",
+ /* 69 msg_c_report_bytes */ "(bytes)",
+ /* 70 msg_c_report_cpu_time */ "CPU Time",
+ /* 71 msg_c_report_mic_time */ "MIC Time",
+ /* 72 msg_c_report_tag */ "Tag",
+ /* 73 msg_c_report_from_file */ "Offload from file",
+ /* 74 msg_c_report_file */ "File",
+ /* 75 msg_c_report_line */ "Line",
+ /* 76 msg_c_report_cpu_to_mic_data */ "CPU->MIC Data",
+ /* 77 msg_c_report_mic_to_cpu_data */ "MIC->CPU Data",
+ /* 78 msg_c_report_offload */ "Offload",
+ /* 79 msg_c_report_w_tag */ "Tag %d",
+ /* 80 msg_c_report_state */ "State",
+ /* 81 msg_c_report_start */ "Start target",
+ /* 82 msg_c_report_init */ "Initialize",
+ /* 83 msg_c_report_logical_card */ "logical card",
+ /* 84 msg_c_report_physical_card */ "physical card",
+ /* 85 msg_c_report_register */ "Register static data tables",
+ /* 86 msg_c_report_init_func */ "Setup target entry",
+ /* 87 msg_c_report_create_buf_host */ "Create host buffer",
+ /* 88 msg_c_report_create_buf_mic */ "Create target buffer",
+ /* 89 msg_c_report_send_pointer_data */ "Send pointer data",
+ /* 90 msg_c_report_sent_pointer_data */ "Host->target pointer data",
+ /* 91 msg_c_report_gather_copyin_data */ "Gather copyin data",
+ /* 92 msg_c_report_copyin_data */ "Host->target copyin data",
+ /* 93 msg_c_report_state_signal */ "Signal",
+ /* 94 msg_c_report_signal */ "signal :",
+ /* 95 msg_c_report_wait */ "waits :",
+ /* 96 msg_c_report_compute */ "Execute task on target",
+ /* 97 msg_c_report_receive_pointer_data */ "Receive pointer data",
+ /* 98 msg_c_report_received_pointer_data */ "Target->host pointer data",
+ /* 99 msg_c_report_start_target_func */ "Start target entry",
+ /* 100 msg_c_report_var */ "Var",
+ /* 101 msg_c_report_scatter_copyin_data */ "Scatter copyin data",
+ /* 102 msg_c_report_gather_copyout_data */ "Gather copyout data",
+ /* 103 msg_c_report_scatter_copyout_data */ "Scatter copyout data",
+ /* 104 msg_c_report_copyout_data */ "Target->host copyout data",
+ /* 105 msg_c_report_unregister */ "Unregister data tables",
+ /* 106 msg_c_report_destroy */ "Destroy",
+ /* 107 msg_c_report_myoinit */ "Initialize MYO",
+ /* 108 msg_c_report_myoregister */ "Register MYO tables",
+ /* 109 msg_c_report_myofini */ "Finalize MYO",
+ /* 110 msg_c_report_mic_myo_shared */ "MIC MYO shared table register",
+ /* 111 msg_c_report_mic_myo_fptr */ "MIC MYO fptr table register",
+ /* 112 msg_c_report_myosharedmalloc */ "MYO shared malloc",
+ /* 113 msg_c_report_myosharedfree */ "MYO shared free",
+ /* 114 msg_c_report_myosharedalignedmalloc */ "MYO shared aligned malloc",
+ /* 115 msg_c_report_myosharedalignedfree */ "MYO shared aligned free",
+ /* 116 msg_c_report_myoacquire */ "MYO acquire",
+ /* 117 msg_c_report_myorelease */ "MYO release",
+ /* 118 msg_c_report_host_total_offload_time */ "host: total offload time",
+ /* 119 msg_c_report_host_initialize */ "host: initialize target",
+ /* 120 msg_c_report_host_target_acquire */ "host: acquire target",
+ /* 121 msg_c_report_host_wait_deps */ "host: wait dependencies",
+ /* 122 msg_c_report_host_setup_buffers */ "host: setup buffers",
+ /* 123 msg_c_report_host_alloc_buffers */ "host: allocate buffers",
+ /* 124 msg_c_report_host_setup_misc_data */ "host: setup misc_data",
+ /* 125 msg_c_report_host_alloc_data_buffer */ "host: allocate buffer",
+ /* 126 msg_c_report_host_send_pointers */ "host: send pointers",
+ /* 127 msg_c_report_host_gather_inputs */ "host: gather inputs",
+ /* 128 msg_c_report_host_map_in_data_buffer */ "host: map IN data buffer",
+ /* 129 msg_c_report_host_unmap_in_data_buffer */ "host: unmap IN data buffer",
+ /* 130 msg_c_report_host_start_compute */ "host: initiate compute",
+ /* 131 msg_c_report_host_wait_compute */ "host: wait compute",
+ /* 132 msg_c_report_host_start_buffers_reads */ "host: initiate pointer reads",
+ /* 133 msg_c_report_host_scatter_outputs */ "host: scatter outputs",
+ /* 134 msg_c_report_host_map_out_data_buffer */ "host: map OUT data buffer",
+ /* 135 msg_c_report_host_unmap_out_data_buffer */ "host: unmap OUT data buffer",
+ /* 136 msg_c_report_host_wait_buffers_reads */ "host: wait pointer reads",
+ /* 137 msg_c_report_host_destroy_buffers */ "host: destroy buffers",
+ /* 138 msg_c_report_target_total_time */ "target: total time",
+ /* 139 msg_c_report_target_descriptor_setup */ "target: setup offload descriptor",
+ /* 140 msg_c_report_target_func_lookup */ "target: entry lookup",
+ /* 141 msg_c_report_target_func_time */ "target: entry time",
+ /* 142 msg_c_report_target_scatter_inputs */ "target: scatter inputs",
+ /* 143 msg_c_report_target_add_buffer_refs */ "target: add buffer reference",
+ /* 144 msg_c_report_target_compute */ "target: compute",
+ /* 145 msg_c_report_target_gather_outputs */ "target: gather outputs",
+ /* 146 msg_c_report_target_release_buffer_refs */ "target: remove buffer reference",
+ /* 147 msg_c_coi_pipeline_max_number */ "number of host threads doing offload exceeds maximum of %d",
+ /* 148 msg_c_ranges_dont_match */ "ranges of source and destination don't match together",
+ /* 149 msg_c_destination_is_over */ "insufficient destination memory to transfer source",
+ /* 150 msg_c_slice_of_noncont_array */ "a non-contiguous slice may be taken of contiguous arrays only",
+ /* 151 msg_c_pointer_array_mismatch */ "number of %s elements is less than described by the source",
+};
diff --git a/final/offload/src/mic_lib.f90 b/final/offload/src/mic_lib.f90
new file mode 100644
index 0000000..0c2e4de
--- /dev/null
+++ b/final/offload/src/mic_lib.f90
@@ -0,0 +1,441 @@
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+
+! **********************************************************************************
+! * This file is intended to support the Intel(r) Many Integrated Core Architecture.
+! **********************************************************************************
+! free form Fortran source - should be named .f90
+! lines are longer than 72 characters
+
+module mic_lib
+use, intrinsic :: iso_c_binding
+
+integer, parameter:: target_mic=2
+integer, parameter:: default_target_type=target_mic
+integer, parameter:: default_target_number=0
+
+enum, bind(C)
+ enumerator :: OFFLOAD_SUCCESS = 0
+ enumerator :: OFFLOAD_DISABLED ! offload is disabled
+ enumerator :: OFFLOAD_UNAVAILABLE ! card is not available
+ enumerator :: OFFLOAD_OUT_OF_MEMORY ! not enough memory on device
+ enumerator :: OFFLOAD_PROCESS_DIED ! target process has died
+ enumerator :: OFFLOAD_ERROR ! unspecified error
+end enum
+
+type, bind (C) :: offload_status
+ integer(kind=c_int) :: result = OFFLOAD_DISABLED
+ integer(kind=c_int) :: device_number = -1
+ integer(kind=c_size_t) :: data_sent = 0
+ integer(kind=c_size_t) :: data_received = 0
+end type offload_status
+
+interface
+function offload_number_of_devices () &
+ bind (C, name = "_Offload_number_of_devices")
+!dec$ attributes default :: offload_number_of_devices
+ import :: c_int
+ integer (kind=c_int) :: offload_number_of_devices
+!dec$ attributes offload:mic :: offload_number_of_devices
+!dir$ attributes known_intrinsic :: offload_number_of_devices
+end function offload_number_of_devices
+
+function offload_signaled(target_number, signal) &
+ bind (C, name = "_Offload_signaled")
+!dec$ attributes default :: offload_signaled
+ import :: c_int, c_int64_t
+ integer (kind=c_int) :: offload_signaled
+ integer (kind=c_int), value :: target_number
+ integer (kind=c_int64_t), value :: signal
+!dec$ attributes offload:mic :: offload_signaled
+end function offload_signaled
+
+subroutine offload_report(val) &
+ bind (C, name = "_Offload_report")
+!dec$ attributes default :: offload_report
+ import :: c_int
+ integer (kind=c_int), value :: val
+!dec$ attributes offload:mic :: offload_report
+end subroutine offload_report
+
+function offload_get_device_number() &
+ bind (C, name = "_Offload_get_device_number")
+!dec$ attributes default :: offload_get_device_number
+ import :: c_int
+ integer (kind=c_int) :: offload_get_device_number
+!dec$ attributes offload:mic :: offload_get_device_number
+end function offload_get_device_number
+
+function offload_get_physical_device_number() &
+ bind (C, name = "_Offload_get_physical_device_number")
+!dec$ attributes default :: offload_get_physical_device_number
+ import :: c_int
+ integer (kind=c_int) :: offload_get_physical_device_number
+!dec$ attributes offload:mic :: offload_get_physical_device_number
+end function offload_get_physical_device_number
+
+! OpenMP API wrappers
+
+subroutine omp_set_num_threads_target (target_type, &
+ target_number, &
+ num_threads) &
+ bind (C, name = "omp_set_num_threads_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, num_threads
+end subroutine omp_set_num_threads_target
+
+function omp_get_max_threads_target (target_type, &
+ target_number) &
+ bind (C, name = "omp_get_max_threads_target")
+ import :: c_int
+ integer (kind=c_int) :: omp_get_max_threads_target
+ integer (kind=c_int), value :: target_type, target_number
+end function omp_get_max_threads_target
+
+function omp_get_num_procs_target (target_type, &
+ target_number) &
+ bind (C, name = "omp_get_num_procs_target")
+ import :: c_int
+ integer (kind=c_int) :: omp_get_num_procs_target
+ integer (kind=c_int), value :: target_type, target_number
+end function omp_get_num_procs_target
+
+subroutine omp_set_dynamic_target (target_type, &
+ target_number, &
+ num_threads) &
+ bind (C, name = "omp_set_dynamic_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, num_threads
+end subroutine omp_set_dynamic_target
+
+function omp_get_dynamic_target (target_type, &
+ target_number) &
+ bind (C, name = "omp_get_dynamic_target")
+ import :: c_int
+ integer (kind=c_int) :: omp_get_dynamic_target
+ integer (kind=c_int), value :: target_type, target_number
+end function omp_get_dynamic_target
+
+subroutine omp_set_nested_target (target_type, &
+ target_number, &
+ nested) &
+ bind (C, name = "omp_set_nested_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, nested
+end subroutine omp_set_nested_target
+
+function omp_get_nested_target (target_type, &
+ target_number) &
+ bind (C, name = "omp_get_nested_target")
+ import :: c_int
+ integer (kind=c_int) :: omp_get_nested_target
+ integer (kind=c_int), value :: target_type, target_number
+end function omp_get_nested_target
+
+subroutine omp_set_schedule_target (target_type, &
+ target_number, &
+ kind, &
+ modifier) &
+ bind (C, name = "omp_set_schedule_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, kind, modifier
+end subroutine omp_set_schedule_target
+
+subroutine omp_get_schedule_target (target_type, &
+ target_number, &
+ kind, &
+ modifier) &
+ bind (C, name = "omp_get_schedule_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: kind, modifier
+end subroutine omp_get_schedule_target
+
+! lock API functions
+
+subroutine omp_init_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_init_lock_target")
+ import :: c_int, c_intptr_t
+ !dir$ attributes known_intrinsic :: omp_init_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_init_lock_target
+
+subroutine omp_destroy_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_destroy_lock_target")
+ import :: c_int, c_intptr_t
+ !dir$ attributes known_intrinsic :: omp_destroy_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_destroy_lock_target
+
+subroutine omp_set_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_set_lock_target")
+ import :: c_int, c_intptr_t
+ !dir$ attributes known_intrinsic :: omp_set_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_set_lock_target
+
+subroutine omp_unset_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_unset_lock_target")
+ import :: c_int, c_intptr_t
+ !dir$ attributes known_intrinsic :: omp_unset_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_unset_lock_target
+
+function omp_test_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_test_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: omp_test_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end function omp_test_lock_target
+
+! nested lock API functions
+
+subroutine omp_init_nest_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_init_nest_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_init_nest_lock_target
+
+subroutine omp_destroy_nest_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_destroy_nest_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_destroy_nest_lock_target
+
+subroutine omp_set_nest_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_set_nest_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_set_nest_lock_target
+
+subroutine omp_unset_nest_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_unset_nest_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end subroutine omp_unset_nest_lock_target
+
+function omp_test_nest_lock_target (target_type, &
+ target_number, &
+ lock) &
+ bind (C, name = "omp_test_nest_lock_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: omp_test_nest_lock_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: lock
+end function omp_test_nest_lock_target
+
+! kmp API functions
+
+subroutine kmp_set_stacksize_target (target_type, &
+ target_number, &
+ size) &
+ bind (C, name = "kmp_set_stacksize_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, size
+end subroutine kmp_set_stacksize_target
+
+function kmp_get_stacksize_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_get_stacksize_target")
+ import :: c_int
+ integer (kind=c_int) :: kmp_get_stacksize_target
+ integer (kind=c_int), value :: target_type, target_number
+end function kmp_get_stacksize_target
+
+subroutine kmp_set_stacksize_s_target (target_type, &
+ target_number, &
+ size) &
+ bind (C, name = "kmp_set_stacksize_s_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, size
+end subroutine kmp_set_stacksize_s_target
+
+function kmp_get_stacksize_s_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_get_stacksize_s_target")
+ import :: c_int
+ integer (kind=c_int) :: kmp_get_stacksize_s_target
+ integer (kind=c_int), value :: target_type, target_number
+end function kmp_get_stacksize_s_target
+
+subroutine kmp_set_blocktime_target (target_type, &
+ target_number, &
+ time) &
+ bind (C, name = "kmp_set_blocktime_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, time
+end subroutine kmp_set_blocktime_target
+
+function kmp_get_blocktime_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_get_blocktime_target")
+ import :: c_int
+ integer (kind=c_int) :: kmp_get_blocktime_target
+ integer (kind=c_int), value :: target_type, target_number
+end function kmp_get_blocktime_target
+
+subroutine kmp_set_library_serial_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_set_library_serial_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number
+end subroutine kmp_set_library_serial_target
+
+subroutine kmp_set_library_turnaround_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_set_library_turnaround_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number
+end subroutine kmp_set_library_turnaround_target
+
+subroutine kmp_set_library_throughput_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_set_library_throughput_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number
+end subroutine kmp_set_library_throughput_target
+
+subroutine kmp_set_library_target (target_type, &
+ target_number, &
+ mode) &
+ bind (C, name = "kmp_set_library_target")
+ import :: c_int
+ integer (kind=c_int), value :: target_type, target_number, mode
+end subroutine kmp_set_library_target
+
+function kmp_get_library_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_get_library_target")
+ import :: c_int
+ integer (kind=c_int) :: kmp_get_library_target
+ integer (kind=c_int), value :: target_type, target_number
+end function kmp_get_library_target
+
+subroutine kmp_set_defaults_target (target_type, &
+ target_number, &
+ defaults) &
+ bind (C, name = "kmp_set_defaults_target")
+ import :: c_int, c_char
+ character (kind=c_char) :: defaults(*)
+ integer (kind=c_int), value :: target_type, target_number
+end subroutine kmp_set_defaults_target
+
+! affinity API functions
+
+subroutine kmp_create_affinity_mask_target (target_type, &
+ target_number, &
+ mask) &
+ bind (C, name = "kmp_create_affinity_mask_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: mask
+end subroutine kmp_create_affinity_mask_target
+
+subroutine kmp_destroy_affinity_mask_target (target_type, &
+ target_number, &
+ mask) &
+ bind (C, name = "kmp_destroy_affinity_mask_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: mask
+end subroutine kmp_destroy_affinity_mask_target
+
+function kmp_set_affinity_target (target_type, &
+ target_number, &
+ mask) &
+ bind (C, name = "kmp_set_affinity_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: kmp_set_affinity_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: mask
+end function kmp_set_affinity_target
+
+function kmp_get_affinity_target (target_type, &
+ target_number, &
+ mask) &
+ bind (C, name = "kmp_get_affinity_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: kmp_get_affinity_target
+ integer (kind=c_int), value :: target_type, target_number
+ integer (kind=c_intptr_t), value :: mask
+end function kmp_get_affinity_target
+
+function kmp_get_affinity_max_proc_target (target_type, &
+ target_number) &
+ bind (C, name = "kmp_get_affinity_max_proc_target")
+ import :: c_int
+ integer (kind=c_int) :: kmp_get_affinity_max_proc_target
+ integer (kind=c_int), value :: target_type, target_number
+end function kmp_get_affinity_max_proc_target
+
+function kmp_set_affinity_mask_proc_target (target_type, &
+ target_number, &
+ proc, &
+ mask) &
+ bind (C, name = "kmp_set_affinity_mask_proc_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: kmp_set_affinity_mask_proc_target
+ integer (kind=c_int), value :: target_type, target_number, proc
+ integer (kind=c_intptr_t), value :: mask
+end function kmp_set_affinity_mask_proc_target
+
+function kmp_unset_affinity_mask_proc_target (target_type, &
+ target_number, &
+ proc, &
+ mask) &
+ bind (C, name = "kmp_unset_affinity_mask_proc_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: kmp_unset_affinity_mask_proc_target
+ integer (kind=c_int), value :: target_type, target_number, proc
+ integer (kind=c_intptr_t), value :: mask
+end function kmp_unset_affinity_mask_proc_target
+
+function kmp_get_affinity_mask_proc_target (target_type, &
+ target_number, &
+ proc, &
+ mask) &
+ bind (C, name = "kmp_get_affinity_mask_proc_target")
+ import :: c_int, c_intptr_t
+ integer (kind=c_int) :: kmp_get_affinity_mask_proc_target
+ integer (kind=c_int), value :: target_type, target_number, proc
+ integer (kind=c_intptr_t), value :: mask
+end function kmp_get_affinity_mask_proc_target
+
+end interface
+end module mic_lib
diff --git a/final/offload/src/offload.h b/final/offload/src/offload.h
new file mode 100644
index 0000000..68914b7
--- /dev/null
+++ b/final/offload/src/offload.h
@@ -0,0 +1,474 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*
+ * Include file for Offload API.
+ */
+
+#ifndef OFFLOAD_H_INCLUDED
+#define OFFLOAD_H_INCLUDED
+
+#if defined(LINUX) || defined(FREEBSD)
+#include <bits/functexcept.h>
+#endif
+
+#include <stddef.h>
+#include <omp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TARGET_ATTRIBUTE __declspec(target(mic))
+
+/*
+ * The target architecture.
+ */
+typedef enum TARGET_TYPE {
+ TARGET_NONE, /* Undefine target */
+ TARGET_HOST, /* Host used as target */
+ TARGET_MIC /* MIC target */
+} TARGET_TYPE;
+
+/*
+ * The default target type.
+ */
+#define DEFAULT_TARGET_TYPE TARGET_MIC
+
+/*
+ * The default target number.
+ */
+#define DEFAULT_TARGET_NUMBER 0
+
+/*
+ * Offload status.
+ */
+typedef enum {
+ OFFLOAD_SUCCESS = 0,
+ OFFLOAD_DISABLED, /* offload is disabled */
+ OFFLOAD_UNAVAILABLE, /* card is not available */
+ OFFLOAD_OUT_OF_MEMORY, /* not enough memory on device */
+ OFFLOAD_PROCESS_DIED, /* target process has died */
+ OFFLOAD_ERROR /* unspecified error */
+} _Offload_result;
+
+typedef struct {
+ _Offload_result result; /* result, see above */
+ int device_number; /* device number */
+ size_t data_sent; /* number of bytes sent to the target */
+ size_t data_received; /* number of bytes received by host */
+} _Offload_status;
+
+#define OFFLOAD_STATUS_INIT(x) \
+ ((x).result = OFFLOAD_DISABLED)
+
+#define OFFLOAD_STATUS_INITIALIZER \
+ { OFFLOAD_DISABLED, -1, 0, 0 }
+
+/* Offload runtime interfaces */
+
+extern int _Offload_number_of_devices(void);
+extern int _Offload_get_device_number(void);
+extern int _Offload_get_physical_device_number(void);
+
+extern void* _Offload_shared_malloc(size_t size);
+extern void _Offload_shared_free(void *ptr);
+
+extern void* _Offload_shared_aligned_malloc(size_t size, size_t align);
+extern void _Offload_shared_aligned_free(void *ptr);
+
+extern int _Offload_signaled(int index, void *signal);
+extern void _Offload_report(int val);
+
+/* OpenMP API */
+
+extern void omp_set_default_device(int num);
+extern int omp_get_default_device(void);
+extern int omp_get_num_devices(void);
+
+/* OpenMP API wrappers */
+
+/* Set num_threads on target */
+extern void omp_set_num_threads_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+);
+
+/* Get max_threads from target */
+extern int omp_get_max_threads_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+/* Get num_procs from target */
+extern int omp_get_num_procs_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+/* Set dynamic on target */
+extern void omp_set_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+);
+
+/* Get dynamic from target */
+extern int omp_get_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+/* Set nested on target */
+extern void omp_set_nested_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int nested
+);
+
+/* Get nested from target */
+extern int omp_get_nested_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void omp_set_num_threads_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+);
+
+extern int omp_get_max_threads_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern int omp_get_num_procs_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void omp_set_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+);
+
+extern int omp_get_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void omp_set_nested_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+);
+
+extern int omp_get_nested_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void omp_set_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t kind,
+ int modifier
+);
+
+extern void omp_get_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t *kind,
+ int *modifier
+);
+
+/* lock API functions */
+
+typedef struct {
+ omp_lock_t lock;
+} omp_lock_target_t;
+
+extern void omp_init_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+);
+
+extern void omp_destroy_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+);
+
+extern void omp_set_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+);
+
+extern void omp_unset_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+);
+
+extern int omp_test_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+);
+
+/* nested lock API functions */
+
+typedef struct {
+ omp_nest_lock_t lock;
+} omp_nest_lock_target_t;
+
+extern void omp_init_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+);
+
+extern void omp_destroy_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+);
+
+extern void omp_set_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+);
+
+extern void omp_unset_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+);
+
+extern int omp_test_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+);
+
+/* kmp API functions */
+
+extern void kmp_set_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int size
+);
+
+extern int kmp_get_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ size_t size
+);
+
+extern size_t kmp_get_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int time
+);
+
+extern int kmp_get_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_library_serial_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_library_turnaround_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_library_throughput_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_library_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int mode
+);
+
+extern int kmp_get_library_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern void kmp_set_defaults_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ char const *defaults
+);
+
+/* affinity API functions */
+
+typedef struct {
+ kmp_affinity_mask_t mask;
+} kmp_affinity_mask_target_t;
+
+extern void kmp_create_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern void kmp_destroy_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern int kmp_set_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern int kmp_get_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern int kmp_get_affinity_max_proc_target(
+ TARGET_TYPE target_type,
+ int target_number
+);
+
+extern int kmp_set_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern int kmp_unset_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+);
+
+extern int kmp_get_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+);
+
+#ifdef __cplusplus
+} /* extern "C" */
+
+/* Namespace for the shared_allocator. */
+namespace __offload {
+ /* This follows the specification for std::allocator. */
+ /* Forward declaration of the class template. */
+ template <typename T>
+ class shared_allocator;
+
+ /* Specialization for shared_allocator<void>. */
+ template <>
+ class shared_allocator<void> {
+ public:
+ typedef void *pointer;
+ typedef const void *const_pointer;
+ typedef void value_type;
+ template <class U> struct rebind { typedef shared_allocator<U> other; };
+ };
+
+ /* Definition of shared_allocator<T>. */
+ template <class T>
+ class shared_allocator {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef T &reference;
+ typedef const T &const_reference;
+ typedef T value_type;
+ template <class U> struct rebind { typedef shared_allocator<U> other; };
+ shared_allocator() throw() { }
+ shared_allocator(const shared_allocator&) throw() { }
+ template <class U> shared_allocator(const shared_allocator<U>&) throw() { }
+ ~shared_allocator() throw() { }
+ pointer address(reference x) const { return &x; }
+ const_pointer address(const_reference x) const { return &x; }
+ pointer allocate(
+ size_type, shared_allocator<void>::const_pointer hint = 0);
+ void deallocate(pointer p, size_type n);
+ size_type max_size() const throw() {
+ return size_type(-1)/sizeof(T);
+ } /* max_size */
+ void construct(pointer p, const T& arg) {
+ ::new (p) T(arg);
+ } /* construct */
+ void destroy(pointer p) {
+ p->~T();
+ } /* destroy */
+ };
+
+ /* Definition for allocate. */
+ template <class T>
+ typename shared_allocator<T>::pointer
+ shared_allocator<T>::allocate(shared_allocator<T>::size_type s,
+ shared_allocator<void>::const_pointer) {
+ /* Allocate from shared memory. */
+ void *ptr = _Offload_shared_malloc(s*sizeof(T));
+ if (ptr == 0) std::__throw_bad_alloc();
+ return static_cast<pointer>(ptr);
+ } /* allocate */
+
+ template <class T>
+ void shared_allocator<T>::deallocate(pointer p,
+ shared_allocator<T>::size_type) {
+ /* Free the shared memory. */
+ _Offload_shared_free(p);
+ } /* deallocate */
+
+ template <typename _T1, typename _T2>
+ inline bool operator==(const shared_allocator<_T1> &,
+ const shared_allocator<_T2> &) throw() {
+ return true;
+ } /* operator== */
+
+ template <typename _T1, typename _T2>
+ inline bool operator!=(const shared_allocator<_T1> &,
+ const shared_allocator<_T2> &) throw() {
+ return false;
+ } /* operator!= */
+} /* __offload */
+#endif /* __cplusplus */
+
+#endif /* OFFLOAD_H_INCLUDED */
diff --git a/final/offload/src/offload_common.cpp b/final/offload/src/offload_common.cpp
new file mode 100644
index 0000000..3681b06
--- /dev/null
+++ b/final/offload/src/offload_common.cpp
@@ -0,0 +1,170 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#if defined(LINUX) || defined(FREEBSD)
+#include <mm_malloc.h>
+#endif
+
+#include "offload_common.h"
+
+// The debug routines
+
+#if OFFLOAD_DEBUG > 0
+
+void __dump_bytes(
+ int trace_level,
+ const void *data,
+ int len
+)
+{
+ if (console_enabled > trace_level) {
+ const uint8_t *arr = (const uint8_t*) data;
+ char buffer[4096];
+ char *bufferp;
+ int count = 0;
+
+ bufferp = buffer;
+ while (len--) {
+ sprintf(bufferp, "%02x", *arr++);
+ bufferp += 2;
+ count++;
+ if ((count&3) == 0) {
+ sprintf(bufferp, " ");
+ bufferp++;
+ }
+ if ((count&63) == 0) {
+ OFFLOAD_DEBUG_TRACE(trace_level, "%s\n", buffer);
+ bufferp = buffer;
+ count = 0;
+ }
+ }
+ if (count) {
+ OFFLOAD_DEBUG_TRACE(trace_level, "%s\n", buffer);
+ }
+ }
+}
+#endif // OFFLOAD_DEBUG
+
+// The Marshaller and associated routines
+
+void Marshaller::send_data(
+ const void *data,
+ int64_t length
+)
+{
+ OFFLOAD_DEBUG_TRACE(2, "send_data(%p, %lld)\n",
+ data, length);
+ memcpy(buffer_ptr, data, (size_t)length);
+ buffer_ptr += length;
+ tfr_size += length;
+}
+
+void Marshaller::receive_data(
+ void *data,
+ int64_t length
+)
+{
+ OFFLOAD_DEBUG_TRACE(2, "receive_data(%p, %lld)\n",
+ data, length);
+ memcpy(data, buffer_ptr, (size_t)length);
+ buffer_ptr += length;
+ tfr_size += length;
+}
+
+// Send function pointer
+void Marshaller::send_func_ptr(
+ const void* data
+)
+{
+ const char* name;
+ size_t length;
+
+ if (data != 0) {
+ name = __offload_funcs.find_name(data);
+ if (name == 0) {
+#if OFFLOAD_DEBUG > 0
+ if (console_enabled > 2) {
+ __offload_funcs.dump();
+ }
+#endif // OFFLOAD_DEBUG > 0
+
+ LIBOFFLOAD_ERROR(c_send_func_ptr, data);
+ exit(1);
+ }
+ length = strlen(name) + 1;
+ }
+ else {
+ name = "";
+ length = 1;
+ }
+
+ memcpy(buffer_ptr, name, length);
+ buffer_ptr += length;
+ tfr_size += length;
+}
+
+// Receive function pointer
+void Marshaller::receive_func_ptr(
+ const void** data
+)
+{
+ const char* name;
+ size_t length;
+
+ name = (const char*) buffer_ptr;
+ if (name[0] != '\0') {
+ *data = __offload_funcs.find_addr(name);
+ if (*data == 0) {
+#if OFFLOAD_DEBUG > 0
+ if (console_enabled > 2) {
+ __offload_funcs.dump();
+ }
+#endif // OFFLOAD_DEBUG > 0
+
+ LIBOFFLOAD_ERROR(c_receive_func_ptr, name);
+ exit(1);
+ }
+ length = strlen(name) + 1;
+ }
+ else {
+ *data = 0;
+ length = 1;
+ }
+
+ buffer_ptr += length;
+ tfr_size += length;
+}
+
+// End of the Marshaller and associated routines
+
+extern void *OFFLOAD_MALLOC(
+ size_t size,
+ size_t align
+)
+{
+ void *ptr;
+ int err;
+
+ OFFLOAD_DEBUG_TRACE(2, "%s(%lld, %lld)\n", __func__, size, align);
+
+ if (align < sizeof(void*)) {
+ align = sizeof(void*);
+ }
+
+ ptr = _mm_malloc(size, align);
+ if (ptr == NULL) {
+ LIBOFFLOAD_ERROR(c_offload_malloc, size, align);
+ exit(1);
+ }
+
+ OFFLOAD_DEBUG_TRACE(2, "%s returned %p\n", __func__, ptr);
+
+ return ptr;
+}
diff --git a/final/offload/src/offload_common.h b/final/offload/src/offload_common.h
new file mode 100644
index 0000000..11cb8bb
--- /dev/null
+++ b/final/offload/src/offload_common.h
@@ -0,0 +1,444 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! \file
+ \brief The parts of the runtime library common to host and target
+*/
+
+#ifndef OFFLOAD_COMMON_H_INCLUDED
+#define OFFLOAD_COMMON_H_INCLUDED
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <memory.h>
+
+#include "offload.h"
+#include "offload_table.h"
+#include "offload_trace.h"
+#include "offload_timer.h"
+#include "offload_util.h"
+#include "cean_util.h"
+#include "dv_util.h"
+#include "liboffload_error_codes.h"
+
+#include <stdarg.h>
+
+// The debug routines
+
+// Host console and file logging
+extern int console_enabled;
+extern int offload_report_level;
+
+#define OFFLOAD_DO_TRACE (offload_report_level == 3)
+
+extern const char *prefix;
+extern int offload_number;
+#if !HOST_LIBRARY
+extern int mic_index;
+#endif
+
+#if HOST_LIBRARY
+void Offload_Report_Prolog(OffloadHostTimerData* timer_data);
+void Offload_Report_Epilog(OffloadHostTimerData* timer_data);
+void offload_report_free_data(OffloadHostTimerData * timer_data);
+void Offload_Timer_Print(void);
+
+#ifndef TARGET_WINNT
+#define OFFLOAD_DEBUG_INCR_OFLD_NUM() \
+ __sync_add_and_fetch(&offload_number, 1)
+#else
+#define OFFLOAD_DEBUG_INCR_OFLD_NUM() \
+ _InterlockedIncrement(reinterpret_cast<long*>(&offload_number))
+#endif
+
+#define OFFLOAD_DEBUG_PRINT_TAG_PREFIX() \
+ printf("%s: ", prefix);
+
+#define OFFLOAD_DEBUG_PRINT_PREFIX() \
+ printf("%s: ", prefix);
+#else
+#define OFFLOAD_DEBUG_PRINT_PREFIX() \
+ printf("%s%d: ", prefix, mic_index);
+#endif // HOST_LIBRARY
+
+#define OFFLOAD_TRACE(trace_level, ...) \
+ if (console_enabled >= trace_level) { \
+ OFFLOAD_DEBUG_PRINT_PREFIX(); \
+ printf(__VA_ARGS__); \
+ fflush(NULL); \
+ }
+
+#if OFFLOAD_DEBUG > 0
+
+#define OFFLOAD_DEBUG_TRACE(level, ...) \
+ OFFLOAD_TRACE(level, __VA_ARGS__)
+
+#define OFFLOAD_REPORT(level, offload_number, stage, ...) \
+ if (OFFLOAD_DO_TRACE) { \
+ offload_stage_print(stage, offload_number, __VA_ARGS__); \
+ fflush(NULL); \
+ }
+
+#define OFFLOAD_DEBUG_TRACE_1(level, offload_number, stage, ...) \
+ if (OFFLOAD_DO_TRACE) { \
+ offload_stage_print(stage, offload_number, __VA_ARGS__); \
+ fflush(NULL); \
+ } \
+ if (!OFFLOAD_DO_TRACE) { \
+ OFFLOAD_TRACE(level, __VA_ARGS__) \
+ }
+
+#define OFFLOAD_DEBUG_DUMP_BYTES(level, a, b) \
+ __dump_bytes(level, a, b)
+
+extern void __dump_bytes(
+ int level,
+ const void *data,
+ int len
+);
+
+#else
+
+#define OFFLOAD_DEBUG_LOG(level, ...)
+#define OFFLOAD_DEBUG_DUMP_BYTES(level, a, b)
+
+#endif
+
+// Runtime interface
+
+#define OFFLOAD_PREFIX(a) __offload_##a
+
+#define OFFLOAD_MALLOC OFFLOAD_PREFIX(malloc)
+#define OFFLOAD_FREE(a) _mm_free(a)
+
+// Forward functions
+
+extern void *OFFLOAD_MALLOC(size_t size, size_t align);
+
+// The Marshaller
+
+//! \enum Indicator for the type of entry on an offload item list.
+enum OffloadItemType {
+ c_data = 1, //!< Plain data
+ c_data_ptr, //!< Pointer data
+ c_func_ptr, //!< Function pointer
+ c_void_ptr, //!< void*
+ c_string_ptr, //!< C string
+ c_dv, //!< Dope vector variable
+ c_dv_data, //!< Dope-vector data
+ c_dv_data_slice, //!< Dope-vector data's slice
+ c_dv_ptr, //!< Dope-vector variable pointer
+ c_dv_ptr_data, //!< Dope-vector pointer data
+ c_dv_ptr_data_slice,//!< Dope-vector pointer data's slice
+ c_cean_var, //!< CEAN variable
+ c_cean_var_ptr, //!< Pointer to CEAN variable
+ c_data_ptr_array, //!< Pointer to data pointer array
+ c_func_ptr_array, //!< Pointer to function pointer array
+ c_void_ptr_array, //!< Pointer to void* pointer array
+ c_string_ptr_array //!< Pointer to char* pointer array
+};
+
+#define VAR_TYPE_IS_PTR(t) ((t) == c_string_ptr || \
+ (t) == c_data_ptr || \
+ (t) == c_cean_var_ptr || \
+ (t) == c_dv_ptr)
+
+#define VAR_TYPE_IS_SCALAR(t) ((t) == c_data || \
+ (t) == c_void_ptr || \
+ (t) == c_cean_var || \
+ (t) == c_dv)
+
+#define VAR_TYPE_IS_DV_DATA(t) ((t) == c_dv_data || \
+ (t) == c_dv_ptr_data)
+
+#define VAR_TYPE_IS_DV_DATA_SLICE(t) ((t) == c_dv_data_slice || \
+ (t) == c_dv_ptr_data_slice)
+
+
+//! \enum Specify direction to copy offloaded variable.
+enum OffloadParameterType {
+ c_parameter_unknown = -1, //!< Unknown clause
+ c_parameter_nocopy, //!< Variable listed in "nocopy" clause
+ c_parameter_in, //!< Variable listed in "in" clause
+ c_parameter_out, //!< Variable listed in "out" clause
+ c_parameter_inout //!< Variable listed in "inout" clause
+};
+
+//! An Offload Variable descriptor
+struct VarDesc {
+ //! OffloadItemTypes of source and destination
+ union {
+ struct {
+ uint8_t dst : 4; //!< OffloadItemType of destination
+ uint8_t src : 4; //!< OffloadItemType of source
+ };
+ uint8_t bits;
+ } type;
+
+ //! OffloadParameterType that describes direction of data transfer
+ union {
+ struct {
+ uint8_t in : 1; //!< Set if IN or INOUT
+ uint8_t out : 1; //!< Set if OUT or INOUT
+ };
+ uint8_t bits;
+ } direction;
+
+ uint8_t alloc_if; //!< alloc_if modifier value
+ uint8_t free_if; //!< free_if modifier value
+ uint32_t align; //!< MIC alignment requested for pointer data
+ //! Not used by compiler; set to 0
+ /*! Used by runtime as offset to data from start of MIC buffer */
+ uint32_t mic_offset;
+ //! Flags describing this variable
+ union {
+ struct {
+ //! source variable has persistent storage
+ uint32_t is_static : 1;
+ //! destination variable has persistent storage
+ uint32_t is_static_dstn : 1;
+ //! has length for c_dv && c_dv_ptr
+ uint32_t has_length : 1;
+ //! persisted local scalar is in stack buffer
+ uint32_t is_stack_buf : 1;
+ //! buffer address is sent in data
+ uint32_t sink_addr : 1;
+ //! alloc displacement is sent in data
+ uint32_t alloc_disp : 1;
+ //! source data is noncontiguous
+ uint32_t is_noncont_src : 1;
+ //! destination data is noncontiguous
+ uint32_t is_noncont_dst : 1;
+ };
+ uint32_t bits;
+ } flags;
+ //! Not used by compiler; set to 0
+ /*! Used by runtime as offset to base from data stored in a buffer */
+ int64_t offset;
+ //! Element byte-size of data to be transferred
+ /*! For dope-vector, the size of the dope-vector */
+ int64_t size;
+ union {
+ //! Set to 0 for array expressions and dope-vectors
+ /*! Set to 1 for scalars */
+ /*! Set to value of length modifier for pointers */
+ int64_t count;
+ //! Displacement not used by compiler
+ int64_t disp;
+ };
+
+ //! This field not used by OpenMP 4.0
+ /*! The alloc section expression in #pragma offload */
+ union {
+ void *alloc;
+ int64_t ptr_arr_offset;
+ };
+
+ //! This field not used by OpenMP 4.0
+ /*! The into section expression in #pragma offload */
+ /*! For c_data_ptr_array this is the into ptr array */
+ void *into;
+
+ //! For an ordinary variable, address of the variable
+ /*! For c_cean_var (C/C++ array expression),
+ pointer to arr_desc, which is an array descriptor. */
+ /*! For c_data_ptr_array (array of data pointers),
+ pointer to ptr_array_descriptor,
+ which is a descriptor for pointer array transfers. */
+ void *ptr;
+};
+
+//! Auxiliary struct used when -g is enabled that holds variable names
+struct VarDesc2 {
+ const char *sname; //!< Source name
+ const char *dname; //!< Destination name (when "into" is used)
+};
+
+/*! When the OffloadItemType is c_data_ptr_array
+ the ptr field of the main descriptor points to this struct. */
+/*! The type in VarDesc1 merely says c_cean_data_ptr, but the pointer
+ type can be c_data_ptr, c_func_ptr, c_void_ptr, or c_string_ptr.
+ Therefore the actual pointer type is in the flags field of VarDesc3. */
+/*! If flag_align_is_array/flag_alloc_if_is_array/flag_free_if_is_array
+ is 0 then alignment/alloc_if/free_if are specified in VarDesc1. */
+/*! If flag_align_is_array/flag_alloc_if_is_array/flag_free_if_is_array
+ is 1 then align_array/alloc_if_array/free_if_array specify
+ the set of alignment/alloc_if/free_if values. */
+/*! For the other fields, if neither the scalar nor the array flag
+ is set, then that modifier was not specified. If the bits are set
+ they specify which modifier was set and whether it was a
+ scalar or an array expression. */
+struct VarDesc3
+{
+ void *ptr_array; //!< Pointer to arr_desc of array of pointers
+ void *align_array; //!< Scalar value or pointer to arr_desc
+ void *alloc_if_array; //!< Scalar value or pointer to arr_desc
+ void *free_if_array; //!< Scalar value or pointer to arr_desc
+ void *extent_start; //!< Scalar value or pointer to arr_desc
+ void *extent_elements; //!< Scalar value or pointer to arr_desc
+ void *into_start; //!< Scalar value or pointer to arr_desc
+ void *into_elements; //!< Scalar value or pointer to arr_desc
+ void *alloc_start; //!< Scalar value or pointer to arr_desc
+ void *alloc_elements; //!< Scalar value or pointer to arr_desc
+ /*! Flags that describe the pointer type and whether each field
+ is a scalar value or an array expression. */
+ /*! First 6 bits are pointer array element type:
+ c_data_ptr, c_func_ptr, c_void_ptr, c_string_ptr */
+ /*! Then single bits specify: */
+ /*! align_array is an array */
+ /*! alloc_if_array is an array */
+ /*! free_if_array is an array */
+ /*! extent_start is a scalar expression */
+ /*! extent_start is an array expression */
+ /*! extent_elements is a scalar expression */
+ /*! extent_elements is an array expression */
+ /*! into_start is a scalar expression */
+ /*! into_start is an array expression */
+ /*! into_elements is a scalar expression */
+ /*! into_elements is an array expression */
+ /*! alloc_start is a scalar expression */
+ /*! alloc_start is an array expression */
+ /*! alloc_elements is a scalar expression */
+ /*! alloc_elements is an array expression */
+ uint32_t array_fields;
+};
+const int flag_align_is_array = 6;
+const int flag_alloc_if_is_array = 7;
+const int flag_free_if_is_array = 8;
+const int flag_extent_start_is_scalar = 9;
+const int flag_extent_start_is_array = 10;
+const int flag_extent_elements_is_scalar = 11;
+const int flag_extent_elements_is_array = 12;
+const int flag_into_start_is_scalar = 13;
+const int flag_into_start_is_array = 14;
+const int flag_into_elements_is_scalar = 15;
+const int flag_into_elements_is_array = 16;
+const int flag_alloc_start_is_scalar = 17;
+const int flag_alloc_start_is_array = 18;
+const int flag_alloc_elements_is_scalar = 19;
+const int flag_alloc_elements_is_array = 20;
+
+// The Marshaller
+class Marshaller
+{
+private:
+ // Start address of buffer
+ char *buffer_start;
+
+ // Current pointer within buffer
+ char *buffer_ptr;
+
+ // Physical size of data sent (including flags)
+ long long buffer_size;
+
+ // User data sent/received
+ long long tfr_size;
+
+public:
+ // Constructor
+ Marshaller() :
+ buffer_start(0), buffer_ptr(0),
+ buffer_size(0), tfr_size(0)
+ {
+ }
+
+ // Return count of user data sent/received
+ long long get_tfr_size() const
+ {
+ return tfr_size;
+ }
+
+ // Return pointer to buffer
+ char *get_buffer_start() const
+ {
+ return buffer_start;
+ }
+
+ // Return current size of data in buffer
+ long long get_buffer_size() const
+ {
+ return buffer_size;
+ }
+
+ // Set buffer pointer
+ void init_buffer(
+ char *d,
+ long long s
+ )
+ {
+ buffer_start = buffer_ptr = d;
+ buffer_size = s;
+ }
+
+ // Send data
+ void send_data(
+ const void *data,
+ int64_t length
+ );
+
+ // Receive data
+ void receive_data(
+ void *data,
+ int64_t length
+ );
+
+ // Send function pointer
+ void send_func_ptr(
+ const void* data
+ );
+
+ // Receive function pointer
+ void receive_func_ptr(
+ const void** data
+ );
+};
+
+// End of the Marshaller
+
+// The offloaded function descriptor.
+// Sent from host to target to specify which function to run.
+// Also, sets console and file tracing levels.
+struct FunctionDescriptor
+{
+ // Input data size.
+ long long in_datalen;
+
+ // Output data size.
+ long long out_datalen;
+
+ // Whether trace is requested on console.
+ // A value of 1 produces only function name and data sent/received.
+ // Values > 1 produce copious trace information.
+ uint8_t console_enabled;
+
+ // Flag controlling timing on the target side.
+ // Values > 0 enable timing on sink.
+ uint8_t timer_enabled;
+
+ int offload_report_level;
+ int offload_number;
+
+ // number of variable descriptors
+ int vars_num;
+
+ // inout data offset if data is passed as misc/return data
+ // otherwise it should be zero.
+ int data_offset;
+
+ // The name of the offloaded function
+ char data[];
+};
+
+// typedef OFFLOAD.
+// Pointer to OffloadDescriptor.
+typedef struct OffloadDescriptor *OFFLOAD;
+
+#endif // OFFLOAD_COMMON_H_INCLUDED
diff --git a/final/offload/src/offload_engine.cpp b/final/offload/src/offload_engine.cpp
new file mode 100644
index 0000000..069b604
--- /dev/null
+++ b/final/offload/src/offload_engine.cpp
@@ -0,0 +1,531 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_engine.h"
+#include <signal.h>
+#include <errno.h>
+
+#include <algorithm>
+#include <vector>
+
+#include "offload_host.h"
+#include "offload_table.h"
+
+const char* Engine::m_func_names[Engine::c_funcs_total] =
+{
+ "server_compute",
+#ifdef MYO_SUPPORT
+ "server_myoinit",
+ "server_myofini",
+#endif // MYO_SUPPORT
+ "server_init",
+ "server_var_table_size",
+ "server_var_table_copy"
+};
+
+// Symbolic representation of system signals. Fix for CQ233593
+const char* Engine::c_signal_names[Engine::c_signal_max] =
+{
+ "Unknown SIGNAL",
+ "SIGHUP", /* 1, Hangup (POSIX). */
+ "SIGINT", /* 2, Interrupt (ANSI). */
+ "SIGQUIT", /* 3, Quit (POSIX). */
+ "SIGILL", /* 4, Illegal instruction (ANSI). */
+ "SIGTRAP", /* 5, Trace trap (POSIX). */
+ "SIGABRT", /* 6, Abort (ANSI). */
+ "SIGBUS", /* 7, BUS error (4.2 BSD). */
+ "SIGFPE", /* 8, Floating-point exception (ANSI). */
+ "SIGKILL", /* 9, Kill, unblockable (POSIX). */
+ "SIGUSR1", /* 10, User-defined signal 1 (POSIX). */
+ "SIGSEGV", /* 11, Segmentation violation (ANSI). */
+ "SIGUSR2", /* 12, User-defined signal 2 (POSIX). */
+ "SIGPIPE", /* 13, Broken pipe (POSIX). */
+ "SIGALRM", /* 14, Alarm clock (POSIX). */
+ "SIGTERM", /* 15, Termination (ANSI). */
+ "SIGSTKFLT", /* 16, Stack fault. */
+ "SIGCHLD", /* 17, Child status has changed (POSIX). */
+ "SIGCONT", /* 18, Continue (POSIX). */
+ "SIGSTOP", /* 19, Stop, unblockable (POSIX). */
+ "SIGTSTP", /* 20, Keyboard stop (POSIX). */
+ "SIGTTIN", /* 21, Background read from tty (POSIX). */
+ "SIGTTOU", /* 22, Background write to tty (POSIX). */
+ "SIGURG", /* 23, Urgent condition on socket (4.2 BSD). */
+ "SIGXCPU", /* 24, CPU limit exceeded (4.2 BSD). */
+ "SIGXFSZ", /* 25, File size limit exceeded (4.2 BSD). */
+ "SIGVTALRM", /* 26, Virtual alarm clock (4.2 BSD). */
+ "SIGPROF", /* 27, Profiling alarm clock (4.2 BSD). */
+ "SIGWINCH", /* 28, Window size change (4.3 BSD, Sun). */
+ "SIGIO", /* 29, I/O now possible (4.2 BSD). */
+ "SIGPWR", /* 30, Power failure restart (System V). */
+ "SIGSYS" /* 31, Bad system call. */
+};
+
+void Engine::init(void)
+{
+ if (!m_ready) {
+ mutex_locker_t locker(m_lock);
+
+ if (!m_ready) {
+ // start process if not done yet
+ if (m_process == 0) {
+ init_process();
+ }
+
+ // load penging images
+ load_libraries();
+
+ // and (re)build pointer table
+ init_ptr_data();
+
+ // it is ready now
+ m_ready = true;
+ }
+ }
+}
+
+void Engine::init_process(void)
+{
+ COIENGINE engine;
+ COIRESULT res;
+ const char **environ;
+
+ // create environment for the target process
+ environ = (const char**) mic_env_vars.create_environ_for_card(m_index);
+ if (environ != 0) {
+ for (const char **p = environ; *p != 0; p++) {
+ OFFLOAD_DEBUG_TRACE(3, "Env Var for card %d: %s\n", m_index, *p);
+ }
+ }
+
+ // Create execution context in the specified device
+ OFFLOAD_DEBUG_TRACE(2, "Getting device %d (engine %d) handle\n", m_index,
+ m_physical_index);
+ res = COI::EngineGetHandle(COI_ISA_KNC, m_physical_index, &engine);
+ check_result(res, c_get_engine_handle, m_index, res);
+
+ // Target executable should be available by the time when we
+ // attempt to initialize the device
+ if (__target_exe == 0) {
+ LIBOFFLOAD_ERROR(c_no_target_exe);
+ exit(1);
+ }
+
+ OFFLOAD_DEBUG_TRACE(2,
+ "Loading target executable \"%s\" from %p, size %lld\n",
+ __target_exe->name, __target_exe->data, __target_exe->size);
+
+ res = COI::ProcessCreateFromMemory(
+ engine, // in_Engine
+ __target_exe->name, // in_pBinaryName
+ __target_exe->data, // in_pBinaryBuffer
+ __target_exe->size, // in_BinaryBufferLength,
+ 0, // in_Argc
+ 0, // in_ppArgv
+ environ == 0, // in_DupEnv
+ environ, // in_ppAdditionalEnv
+ mic_proxy_io, // in_ProxyActive
+ mic_proxy_fs_root, // in_ProxyfsRoot
+ mic_buffer_size, // in_BufferSpace
+ mic_library_path, // in_LibrarySearchPath
+ __target_exe->origin, // in_FileOfOrigin
+ __target_exe->offset, // in_FileOfOriginOffset
+ &m_process // out_pProcess
+ );
+ check_result(res, c_process_create, m_index, res);
+
+ // get function handles
+ res = COI::ProcessGetFunctionHandles(m_process, c_funcs_total,
+ m_func_names, m_funcs);
+ check_result(res, c_process_get_func_handles, m_index, res);
+
+ // initialize device side
+ pid_t pid = init_device();
+
+ // For IDB
+ if (__dbg_is_attached) {
+ // TODO: we have in-memory executable now.
+ // Check with IDB team what should we provide them now?
+ if (strlen(__target_exe->name) < MAX_TARGET_NAME) {
+ strcpy(__dbg_target_exe_name, __target_exe->name);
+ }
+ __dbg_target_so_pid = pid;
+ __dbg_target_id = m_physical_index;
+ __dbg_target_so_loaded();
+ }
+}
+
+void Engine::fini_process(bool verbose)
+{
+ if (m_process != 0) {
+ uint32_t sig;
+ int8_t ret;
+
+ // destroy target process
+ OFFLOAD_DEBUG_TRACE(2, "Destroying process on the device %d\n",
+ m_index);
+
+ COIRESULT res = COI::ProcessDestroy(m_process, -1, 0, &ret, &sig);
+ m_process = 0;
+
+ if (res == COI_SUCCESS) {
+ OFFLOAD_DEBUG_TRACE(3, "Device process: signal %d, exit code %d\n",
+ sig, ret);
+ if (verbose) {
+ if (sig != 0) {
+ LIBOFFLOAD_ERROR(
+ c_mic_process_exit_sig, m_index, sig,
+ c_signal_names[sig >= c_signal_max ? 0 : sig]);
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_mic_process_exit_ret, m_index, ret);
+ }
+ }
+
+ // for idb
+ if (__dbg_is_attached) {
+ __dbg_target_so_unloaded();
+ }
+ }
+ else {
+ if (verbose) {
+ LIBOFFLOAD_ERROR(c_mic_process_exit, m_index);
+ }
+ }
+ }
+}
+
+void Engine::load_libraries()
+{
+ // load libraries collected so far
+ for (TargetImageList::iterator it = m_images.begin();
+ it != m_images.end(); it++) {
+ OFFLOAD_DEBUG_TRACE(2, "Loading library \"%s\" from %p, size %llu\n",
+ it->name, it->data, it->size);
+
+ // load library to the device
+ COILIBRARY lib;
+ COIRESULT res;
+ res = COI::ProcessLoadLibraryFromMemory(m_process,
+ it->data,
+ it->size,
+ it->name,
+ mic_library_path,
+ it->origin,
+ it->offset,
+ COI_LOADLIBRARY_V1_FLAGS,
+ &lib);
+
+ if (res != COI_SUCCESS && res != COI_ALREADY_EXISTS) {
+ check_result(res, c_load_library, m_index, res);
+ }
+ }
+ m_images.clear();
+}
+
+static bool target_entry_cmp(
+ const VarList::BufEntry &l,
+ const VarList::BufEntry &r
+)
+{
+ const char *l_name = reinterpret_cast<const char*>(l.name);
+ const char *r_name = reinterpret_cast<const char*>(r.name);
+ return strcmp(l_name, r_name) < 0;
+}
+
+static bool host_entry_cmp(
+ const VarTable::Entry *l,
+ const VarTable::Entry *r
+)
+{
+ return strcmp(l->name, r->name) < 0;
+}
+
+void Engine::init_ptr_data(void)
+{
+ COIRESULT res;
+ COIEVENT event;
+
+ // Prepare table of host entries
+ std::vector<const VarTable::Entry*> host_table(__offload_vars.begin(),
+ __offload_vars.end());
+
+ // no need to do anything further is host table is empty
+ if (host_table.size() <= 0) {
+ return;
+ }
+
+ // Get var table entries from the target.
+ // First we need to get size for the buffer to copy data
+ struct {
+ int64_t nelems;
+ int64_t length;
+ } params;
+
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_var_table_size],
+ 0, 0, 0,
+ 0, 0,
+ 0, 0,
+ &params, sizeof(params),
+ &event);
+ check_result(res, c_pipeline_run_func, m_index, res);
+
+ res = COI::EventWait(1, &event, -1, 1, 0, 0);
+ check_result(res, c_event_wait, res);
+
+ if (params.length == 0) {
+ return;
+ }
+
+ // create buffer for target entries and copy data to host
+ COIBUFFER buffer;
+ res = COI::BufferCreate(params.length, COI_BUFFER_NORMAL, 0, 0, 1,
+ &m_process, &buffer);
+ check_result(res, c_buf_create, m_index, res);
+
+ COI_ACCESS_FLAGS flags = COI_SINK_WRITE;
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_var_table_copy],
+ 1, &buffer, &flags,
+ 0, 0,
+ &params.nelems, sizeof(params.nelems),
+ 0, 0,
+ &event);
+ check_result(res, c_pipeline_run_func, m_index, res);
+
+ res = COI::EventWait(1, &event, -1, 1, 0, 0);
+ check_result(res, c_event_wait, res);
+
+ // patch names in target data
+ VarList::BufEntry *target_table;
+ COIMAPINSTANCE map_inst;
+ res = COI::BufferMap(buffer, 0, params.length, COI_MAP_READ_ONLY, 0, 0,
+ 0, &map_inst,
+ reinterpret_cast<void**>(&target_table));
+ check_result(res, c_buf_map, res);
+
+ VarList::table_patch_names(target_table, params.nelems);
+
+ // and sort entries
+ std::sort(target_table, target_table + params.nelems, target_entry_cmp);
+ std::sort(host_table.begin(), host_table.end(), host_entry_cmp);
+
+ // merge host and target entries and enter matching vars map
+ std::vector<const VarTable::Entry*>::const_iterator hi =
+ host_table.begin();
+ std::vector<const VarTable::Entry*>::const_iterator he =
+ host_table.end();
+ const VarList::BufEntry *ti = target_table;
+ const VarList::BufEntry *te = target_table + params.nelems;
+
+ while (hi != he && ti != te) {
+ int res = strcmp((*hi)->name, reinterpret_cast<const char*>(ti->name));
+ if (res == 0) {
+ // add matching entry to var map
+ std::pair<PtrSet::iterator, bool> res =
+ m_ptr_set.insert(PtrData((*hi)->addr, (*hi)->size));
+
+ // store address for new entries
+ if (res.second) {
+ PtrData *ptr = const_cast<PtrData*>(res.first.operator->());
+ ptr->mic_addr = ti->addr;
+ ptr->is_static = true;
+ }
+
+ hi++;
+ ti++;
+ }
+ else if (res < 0) {
+ hi++;
+ }
+ else {
+ ti++;
+ }
+ }
+
+ // cleanup
+ res = COI::BufferUnmap(map_inst, 0, 0, 0);
+ check_result(res, c_buf_unmap, res);
+
+ res = COI::BufferDestroy(buffer);
+ check_result(res, c_buf_destroy, res);
+}
+
+COIRESULT Engine::compute(
+ const std::list<COIBUFFER> &buffers,
+ const void* data,
+ uint16_t data_size,
+ void* ret,
+ uint16_t ret_size,
+ uint32_t num_deps,
+ const COIEVENT* deps,
+ COIEVENT* event
+) /* const */
+{
+ COIBUFFER *bufs;
+ COI_ACCESS_FLAGS *flags;
+ COIRESULT res;
+
+ // convert buffers list to array
+ int num_bufs = buffers.size();
+ if (num_bufs > 0) {
+ bufs = (COIBUFFER*) alloca(num_bufs * sizeof(COIBUFFER));
+ flags = (COI_ACCESS_FLAGS*) alloca(num_bufs *
+ sizeof(COI_ACCESS_FLAGS));
+
+ int i = 0;
+ for (std::list<COIBUFFER>::const_iterator it = buffers.begin();
+ it != buffers.end(); it++) {
+ bufs[i] = *it;
+
+ // TODO: this should be fixed
+ flags[i++] = COI_SINK_WRITE;
+ }
+ }
+ else {
+ bufs = 0;
+ flags = 0;
+ }
+
+ // start computation
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_compute],
+ num_bufs, bufs, flags,
+ num_deps, deps,
+ data, data_size,
+ ret, ret_size,
+ event);
+ return res;
+}
+
+pid_t Engine::init_device(void)
+{
+ struct init_data {
+ int device_index;
+ int devices_total;
+ int console_level;
+ int offload_report_level;
+ } data;
+ COIRESULT res;
+ COIEVENT event;
+ pid_t pid;
+
+ OFFLOAD_DEBUG_TRACE_1(2, 0, c_offload_init,
+ "Initializing device with logical index %d "
+ "and physical index %d\n",
+ m_index, m_physical_index);
+
+ // setup misc data
+ data.device_index = m_index;
+ data.devices_total = mic_engines_total;
+ data.console_level = console_enabled;
+ data.offload_report_level = offload_report_level;
+
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_init],
+ 0, 0, 0, 0, 0,
+ &data, sizeof(data),
+ &pid, sizeof(pid),
+ &event);
+ check_result(res, c_pipeline_run_func, m_index, res);
+
+ res = COI::EventWait(1, &event, -1, 1, 0, 0);
+ check_result(res, c_event_wait, res);
+
+ OFFLOAD_DEBUG_TRACE(2, "Device process pid is %d\n", pid);
+
+ return pid;
+}
+
+// data associated with each thread
+struct Thread {
+ Thread(long* addr_coipipe_counter) {
+ m_addr_coipipe_counter = addr_coipipe_counter;
+ memset(m_pipelines, 0, sizeof(m_pipelines));
+ }
+
+ ~Thread() {
+#ifndef TARGET_WINNT
+ __sync_sub_and_fetch(m_addr_coipipe_counter, 1);
+#else // TARGET_WINNT
+ _InterlockedDecrement(m_addr_coipipe_counter);
+#endif // TARGET_WINNT
+ for (int i = 0; i < mic_engines_total; i++) {
+ if (m_pipelines[i] != 0) {
+ COI::PipelineDestroy(m_pipelines[i]);
+ }
+ }
+ }
+
+ COIPIPELINE get_pipeline(int index) const {
+ return m_pipelines[index];
+ }
+
+ void set_pipeline(int index, COIPIPELINE pipeline) {
+ m_pipelines[index] = pipeline;
+ }
+
+ AutoSet& get_auto_vars() {
+ return m_auto_vars;
+ }
+
+private:
+ long* m_addr_coipipe_counter;
+ AutoSet m_auto_vars;
+ COIPIPELINE m_pipelines[MIC_ENGINES_MAX];
+};
+
+COIPIPELINE Engine::get_pipeline(void)
+{
+ Thread* thread = (Thread*) thread_getspecific(mic_thread_key);
+ if (thread == 0) {
+ thread = new Thread(&m_proc_number);
+ thread_setspecific(mic_thread_key, thread);
+ }
+
+ COIPIPELINE pipeline = thread->get_pipeline(m_index);
+ if (pipeline == 0) {
+ COIRESULT res;
+ int proc_num;
+
+#ifndef TARGET_WINNT
+ proc_num = __sync_fetch_and_add(&m_proc_number, 1);
+#else // TARGET_WINNT
+ proc_num = _InterlockedIncrement(&m_proc_number);
+#endif // TARGET_WINNT
+
+ if (proc_num > COI_PIPELINE_MAX_PIPELINES) {
+ LIBOFFLOAD_ERROR(c_coipipe_max_number, COI_PIPELINE_MAX_PIPELINES);
+ LIBOFFLOAD_ABORT;
+ }
+ // create pipeline for this thread
+ res = COI::PipelineCreate(m_process, 0, mic_stack_size, &pipeline);
+ check_result(res, c_pipeline_create, m_index, res);
+
+ thread->set_pipeline(m_index, pipeline);
+ }
+ return pipeline;
+}
+
+AutoSet& Engine::get_auto_vars(void)
+{
+ Thread* thread = (Thread*) thread_getspecific(mic_thread_key);
+ if (thread == 0) {
+ thread = new Thread(&m_proc_number);
+ thread_setspecific(mic_thread_key, thread);
+ }
+
+ return thread->get_auto_vars();
+}
+
+void Engine::destroy_thread_data(void *data)
+{
+ delete static_cast<Thread*>(data);
+}
diff --git a/final/offload/src/offload_engine.h b/final/offload/src/offload_engine.h
new file mode 100644
index 0000000..d1a9631
--- /dev/null
+++ b/final/offload/src/offload_engine.h
@@ -0,0 +1,482 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_ENGINE_H_INCLUDED
+#define OFFLOAD_ENGINE_H_INCLUDED
+
+#include <limits.h>
+
+#include <list>
+#include <set>
+#include <map>
+#include "offload_common.h"
+#include "coi/coi_client.h"
+
+// Address range
+class MemRange {
+public:
+ MemRange() : m_start(0), m_length(0) {}
+ MemRange(const void *addr, uint64_t len) : m_start(addr), m_length(len) {}
+
+ const void* start() const {
+ return m_start;
+ }
+
+ const void* end() const {
+ return static_cast<const char*>(m_start) + m_length;
+ }
+
+ uint64_t length() const {
+ return m_length;
+ }
+
+ // returns true if given range overlaps with another one
+ bool overlaps(const MemRange &o) const {
+ // Two address ranges A[start, end) and B[start,end) overlap
+ // if A.start < B.end and A.end > B.start.
+ return start() < o.end() && end() > o.start();
+ }
+
+ // returns true if given range contains the other range
+ bool contains(const MemRange &o) const {
+ return start() <= o.start() && o.end() <= end();
+ }
+
+private:
+ const void* m_start;
+ uint64_t m_length;
+};
+
+// Data associated with a pointer variable
+class PtrData {
+public:
+ PtrData(const void *addr, uint64_t len) :
+ cpu_addr(addr, len), cpu_buf(0),
+ mic_addr(0), alloc_disp(0), mic_buf(0), mic_offset(0),
+ ref_count(0), is_static(false)
+ {}
+
+ //
+ // Copy constructor
+ //
+ PtrData(const PtrData& ptr):
+ cpu_addr(ptr.cpu_addr), cpu_buf(ptr.cpu_buf),
+ mic_addr(ptr.mic_addr), alloc_disp(ptr.alloc_disp),
+ mic_buf(ptr.mic_buf), mic_offset(ptr.mic_offset),
+ ref_count(ptr.ref_count), is_static(ptr.is_static)
+ {}
+
+ bool operator<(const PtrData &o) const {
+ // Variables are sorted by the CPU start address.
+ // Overlapping memory ranges are considered equal.
+ return (cpu_addr.start() < o.cpu_addr.start()) &&
+ !cpu_addr.overlaps(o.cpu_addr);
+ }
+
+ long add_reference() {
+ if (is_static) {
+ return LONG_MAX;
+ }
+#ifndef TARGET_WINNT
+ return __sync_fetch_and_add(&ref_count, 1);
+#else // TARGET_WINNT
+ return _InterlockedIncrement(&ref_count) - 1;
+#endif // TARGET_WINNT
+ }
+
+ long remove_reference() {
+ if (is_static) {
+ return LONG_MAX;
+ }
+#ifndef TARGET_WINNT
+ return __sync_sub_and_fetch(&ref_count, 1);
+#else // TARGET_WINNT
+ return _InterlockedDecrement(&ref_count);
+#endif // TARGET_WINNT
+ }
+
+ long get_reference() const {
+ if (is_static) {
+ return LONG_MAX;
+ }
+ return ref_count;
+ }
+
+public:
+ // CPU address range
+ const MemRange cpu_addr;
+
+ // CPU and MIC buffers
+ COIBUFFER cpu_buf;
+ COIBUFFER mic_buf;
+
+ // placeholder for buffer address on mic
+ uint64_t mic_addr;
+
+ uint64_t alloc_disp;
+
+ // additional offset to pointer data on MIC for improving bandwidth for
+ // data which is not 4K aligned
+ uint32_t mic_offset;
+
+ // if true buffers are created from static memory
+ bool is_static;
+ mutex_t alloc_ptr_data_lock;
+
+private:
+ // reference count for the entry
+ long ref_count;
+};
+
+typedef std::list<PtrData*> PtrDataList;
+
+// Data associated with automatic variable
+class AutoData {
+public:
+ AutoData(const void *addr, uint64_t len) :
+ cpu_addr(addr, len), ref_count(0)
+ {}
+
+ bool operator<(const AutoData &o) const {
+ // Variables are sorted by the CPU start address.
+ // Overlapping memory ranges are considered equal.
+ return (cpu_addr.start() < o.cpu_addr.start()) &&
+ !cpu_addr.overlaps(o.cpu_addr);
+ }
+
+ long add_reference() {
+#ifndef TARGET_WINNT
+ return __sync_fetch_and_add(&ref_count, 1);
+#else // TARGET_WINNT
+ return _InterlockedIncrement(&ref_count) - 1;
+#endif // TARGET_WINNT
+ }
+
+ long remove_reference() {
+#ifndef TARGET_WINNT
+ return __sync_sub_and_fetch(&ref_count, 1);
+#else // TARGET_WINNT
+ return _InterlockedDecrement(&ref_count);
+#endif // TARGET_WINNT
+ }
+
+ long get_reference() const {
+ return ref_count;
+ }
+
+public:
+ // CPU address range
+ const MemRange cpu_addr;
+
+private:
+ // reference count for the entry
+ long ref_count;
+};
+
+// Set of autimatic variables
+typedef std::set<AutoData> AutoSet;
+
+// Target image data
+struct TargetImage
+{
+ TargetImage(const char *_name, const void *_data, uint64_t _size,
+ const char *_origin, uint64_t _offset) :
+ name(_name), data(_data), size(_size),
+ origin(_origin), offset(_offset)
+ {}
+
+ // library name
+ const char* name;
+
+ // contents and size
+ const void* data;
+ uint64_t size;
+
+ // file of origin and offset within that file
+ const char* origin;
+ uint64_t offset;
+};
+
+typedef std::list<TargetImage> TargetImageList;
+
+// Data associated with persistent auto objects
+struct PersistData
+{
+ PersistData(const void *addr, uint64_t routine_num, uint64_t size) :
+ stack_cpu_addr(addr), routine_id(routine_num)
+ {
+ stack_ptr_data = new PtrData(0, size);
+ }
+ // 1-st key value - beginning of the stack at CPU
+ const void * stack_cpu_addr;
+ // 2-nd key value - identifier of routine invocation at CPU
+ uint64_t routine_id;
+ // corresponded PtrData; only stack_ptr_data->mic_buf is used
+ PtrData * stack_ptr_data;
+ // used to get offset of the variable in stack buffer
+ char * cpu_stack_addr;
+};
+
+typedef std::list<PersistData> PersistDataList;
+
+// class representing a single engine
+struct Engine {
+ friend void __offload_init_library_once(void);
+ friend void __offload_fini_library(void);
+
+#define check_result(res, tag, ...) \
+ { \
+ if (res == COI_PROCESS_DIED) { \
+ fini_process(true); \
+ exit(1); \
+ } \
+ if (res != COI_SUCCESS) { \
+ __liboffload_error_support(tag, __VA_ARGS__); \
+ exit(1); \
+ } \
+ }
+
+ int get_logical_index() const {
+ return m_index;
+ }
+
+ int get_physical_index() const {
+ return m_physical_index;
+ }
+
+ const COIPROCESS& get_process() const {
+ return m_process;
+ }
+
+ // initialize device
+ void init(void);
+
+ // add new library
+ void add_lib(const TargetImage &lib)
+ {
+ m_lock.lock();
+ m_ready = false;
+ m_images.push_back(lib);
+ m_lock.unlock();
+ }
+
+ COIRESULT compute(
+ const std::list<COIBUFFER> &buffers,
+ const void* data,
+ uint16_t data_size,
+ void* ret,
+ uint16_t ret_size,
+ uint32_t num_deps,
+ const COIEVENT* deps,
+ COIEVENT* event
+ );
+
+#ifdef MYO_SUPPORT
+ // temporary workaround for blocking behavior for myoiLibInit/Fini calls
+ void init_myo(COIEVENT *event) {
+ COIRESULT res;
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_myo_init],
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ event);
+ check_result(res, c_pipeline_run_func, m_index, res);
+ }
+
+ void fini_myo(COIEVENT *event) {
+ COIRESULT res;
+ res = COI::PipelineRunFunction(get_pipeline(),
+ m_funcs[c_func_myo_fini],
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ event);
+ check_result(res, c_pipeline_run_func, m_index, res);
+ }
+#endif // MYO_SUPPORT
+
+ //
+ // Memory association table
+ //
+ PtrData* find_ptr_data(const void *ptr) {
+ m_ptr_lock.lock();
+ PtrSet::iterator res = m_ptr_set.find(PtrData(ptr, 0));
+ m_ptr_lock.unlock();
+ if (res == m_ptr_set.end()) {
+ return 0;
+ }
+ return const_cast<PtrData*>(res.operator->());
+ }
+
+ PtrData* insert_ptr_data(const void *ptr, uint64_t len, bool &is_new) {
+ m_ptr_lock.lock();
+ std::pair<PtrSet::iterator, bool> res =
+ m_ptr_set.insert(PtrData(ptr, len));
+ PtrData* ptr_data = const_cast<PtrData*>(res.first.operator->());
+ m_ptr_lock.unlock();
+
+ is_new = res.second;
+ if (is_new) {
+ // It's necessary to lock as soon as possible.
+ // unlock must be done at call site of insert_ptr_data at
+ // branch for is_new
+ ptr_data->alloc_ptr_data_lock.lock();
+ }
+ return ptr_data;
+ }
+
+ void remove_ptr_data(const void *ptr) {
+ m_ptr_lock.lock();
+ m_ptr_set.erase(PtrData(ptr, 0));
+ m_ptr_lock.unlock();
+ }
+
+ //
+ // Automatic variables
+ //
+ AutoData* find_auto_data(const void *ptr) {
+ AutoSet &auto_vars = get_auto_vars();
+ AutoSet::iterator res = auto_vars.find(AutoData(ptr, 0));
+ if (res == auto_vars.end()) {
+ return 0;
+ }
+ return const_cast<AutoData*>(res.operator->());
+ }
+
+ AutoData* insert_auto_data(const void *ptr, uint64_t len) {
+ AutoSet &auto_vars = get_auto_vars();
+ std::pair<AutoSet::iterator, bool> res =
+ auto_vars.insert(AutoData(ptr, len));
+ return const_cast<AutoData*>(res.first.operator->());
+ }
+
+ void remove_auto_data(const void *ptr) {
+ get_auto_vars().erase(AutoData(ptr, 0));
+ }
+
+ //
+ // Signals
+ //
+ void add_signal(const void *signal, OffloadDescriptor *desc) {
+ m_signal_lock.lock();
+ m_signal_map[signal] = desc;
+ m_signal_lock.unlock();
+ }
+
+ OffloadDescriptor* find_signal(const void *signal, bool remove) {
+ OffloadDescriptor *desc = 0;
+
+ m_signal_lock.lock();
+ {
+ SignalMap::iterator it = m_signal_map.find(signal);
+ if (it != m_signal_map.end()) {
+ desc = it->second;
+ if (remove) {
+ m_signal_map.erase(it);
+ }
+ }
+ }
+ m_signal_lock.unlock();
+
+ return desc;
+ }
+
+ // stop device process
+ void fini_process(bool verbose);
+
+ // list of stacks active at the engine
+ PersistDataList m_persist_list;
+
+private:
+ Engine() : m_index(-1), m_physical_index(-1), m_process(0), m_ready(false),
+ m_proc_number(0)
+ {}
+
+ ~Engine() {
+ if (m_process != 0) {
+ fini_process(false);
+ }
+ }
+
+ // set indexes
+ void set_indexes(int logical_index, int physical_index) {
+ m_index = logical_index;
+ m_physical_index = physical_index;
+ }
+
+ // start process on device
+ void init_process();
+
+ void load_libraries(void);
+ void init_ptr_data(void);
+
+ // performs library intialization on the device side
+ pid_t init_device(void);
+
+private:
+ // get pipeline associated with a calling thread
+ COIPIPELINE get_pipeline(void);
+
+ // get automatic vars set associated with the calling thread
+ AutoSet& get_auto_vars(void);
+
+ // destructor for thread data
+ static void destroy_thread_data(void *data);
+
+private:
+ typedef std::set<PtrData> PtrSet;
+ typedef std::map<const void*, OffloadDescriptor*> SignalMap;
+
+ // device indexes
+ int m_index;
+ int m_physical_index;
+
+ // number of COI pipes created for the engine
+ long m_proc_number;
+
+ // process handle
+ COIPROCESS m_process;
+
+ // If false, device either has not been initialized or new libraries
+ // have been added.
+ bool m_ready;
+ mutex_t m_lock;
+
+ // List of libraries to be loaded
+ TargetImageList m_images;
+
+ // var table
+ PtrSet m_ptr_set;
+ mutex_t m_ptr_lock;
+
+ // signals
+ SignalMap m_signal_map;
+ mutex_t m_signal_lock;
+
+ // constants for accessing device function handles
+ enum {
+ c_func_compute = 0,
+#ifdef MYO_SUPPORT
+ c_func_myo_init,
+ c_func_myo_fini,
+#endif // MYO_SUPPORT
+ c_func_init,
+ c_func_var_table_size,
+ c_func_var_table_copy,
+ c_funcs_total
+ };
+ static const char* m_func_names[c_funcs_total];
+
+ // device function handles
+ COIFUNCTION m_funcs[c_funcs_total];
+
+ // int -> name mapping for device signals
+ static const int c_signal_max = 32;
+ static const char* c_signal_names[c_signal_max];
+};
+
+#endif // OFFLOAD_ENGINE_H_INCLUDED
diff --git a/final/offload/src/offload_env.cpp b/final/offload/src/offload_env.cpp
new file mode 100644
index 0000000..d037338
--- /dev/null
+++ b/final/offload/src/offload_env.cpp
@@ -0,0 +1,354 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_env.h"
+#include <string.h>
+#include <ctype.h>
+#include "offload_util.h"
+#include "liboffload_error_codes.h"
+
+// for environment variables valid on all cards
+const int MicEnvVar::any_card = -1;
+
+MicEnvVar::~MicEnvVar()
+{
+ for (std::list<MicEnvVar::CardEnvVars*>::const_iterator
+ it = card_spec_list.begin();
+ it != card_spec_list.end(); it++) {
+ CardEnvVars *card_data = *it;
+ delete card_data;
+ }
+}
+
+MicEnvVar::VarValue::~VarValue()
+{
+ free(env_var_value);
+}
+
+MicEnvVar::CardEnvVars::~CardEnvVars()
+{
+ for (std::list<MicEnvVar::VarValue*>::const_iterator it = env_vars.begin();
+ it != env_vars.end(); it++) {
+ VarValue *var_value = *it;
+ delete var_value;
+ }
+}
+
+// Searching for card in "card_spec_list" list with the same "number"
+
+MicEnvVar::CardEnvVars* MicEnvVar::get_card(int number)
+{
+ if (number == any_card) {
+ return &common_vars;
+ }
+ for (std::list<MicEnvVar::CardEnvVars*>::const_iterator
+ it = card_spec_list.begin();
+ it != card_spec_list.end(); it++) {
+ CardEnvVars *card_data = *it;
+ if (card_data->card_number == number) {
+ return card_data;
+ }
+ }
+ return NULL;
+}
+
+// Searching for environment variable in "env_var" list with the same name
+
+MicEnvVar::VarValue* MicEnvVar::CardEnvVars::find_var(
+ char* env_var_name,
+ int env_var_name_length
+)
+{
+ for (std::list<MicEnvVar::VarValue*>::const_iterator it = env_vars.begin();
+ it != env_vars.end(); it++) {
+ VarValue *var_value = *it;
+ if (var_value->length == env_var_name_length &&
+ !strncmp(var_value->env_var, env_var_name,
+ env_var_name_length)) {
+ return var_value;
+ }
+ }
+ return NULL;
+}
+
+void MicEnvVar::analyze_env_var(char *env_var_string)
+{
+ char *env_var_name;
+ char *env_var_def;
+ int card_number;
+ int env_var_name_length;
+ MicEnvVarKind env_var_kind;
+
+ env_var_kind = get_env_var_kind(env_var_string,
+ &card_number,
+ &env_var_name,
+ &env_var_name_length,
+ &env_var_def);
+ switch (env_var_kind) {
+ case c_mic_var:
+ case c_mic_card_var:
+ add_env_var(card_number,
+ env_var_name,
+ env_var_name_length,
+ env_var_def);
+ break;
+ case c_mic_card_env:
+ mic_parse_env_var_list(card_number, env_var_def);
+ break;
+ case c_no_mic:
+ default:
+ break;
+ }
+}
+
+void MicEnvVar::add_env_var(
+ int card_number,
+ char *env_var_name,
+ int env_var_name_length,
+ char *env_var_def
+)
+{
+ VarValue *var;
+ CardEnvVars *card;
+
+ // The case corresponds to common env var definition of kind
+ // <mic-prefix>_<var>
+ if (card_number == any_card) {
+ card = &common_vars;
+ }
+ else {
+ card = get_card(card_number);
+ if (!card) {
+ // definition for new card occurred
+ card = new CardEnvVars(card_number);
+ card_spec_list.push_back(card);
+ }
+
+ }
+ var = card->find_var(env_var_name, env_var_name_length);
+ if (!var) {
+ // put new env var definition in "env_var" list
+ var = new VarValue(env_var_name, env_var_name_length, env_var_def);
+ card->env_vars.push_back(var);
+ }
+}
+
+// The routine analyses string pointed by "env_var_string" argument
+// according to the following syntax:
+//
+// Specification of prefix for MIC environment variables
+// MIC_ENV_PREFIX=<mic-prefix>
+//
+// Setting single MIC environment variable
+// <mic-prefix>_<var>=<value>
+// <mic-prefix>_<card-number>_<var>=<value>
+
+// Setting multiple MIC environment variables
+// <mic-prefix>_<card-number>_ENV=<env-vars>
+
+MicEnvVarKind MicEnvVar::get_env_var_kind(
+ char *env_var_string,
+ int *card_number,
+ char **env_var_name,
+ int *env_var_name_length,
+ char **env_var_def
+)
+{
+ int len = strlen(prefix);
+ char *c = env_var_string;
+ int num = 0;
+ bool card_is_set = false;
+
+ if (strncmp(c, prefix, len) != 0 || c[len] != '_') {
+ return c_no_mic;
+ }
+ c += len + 1;
+
+ *card_number = any_card;
+ if (isdigit(*c)) {
+ while (isdigit (*c)) {
+ num = (*c++ - '0') + (num * 10);
+ }
+ if (*c != '_') {
+ return c_no_mic;
+ }
+ c++;
+ *card_number = num;
+ card_is_set = true;
+ }
+ if (!isalpha(*c)) {
+ return c_no_mic;
+ }
+ *env_var_name = *env_var_def = c;
+ if (strncmp(c, "ENV=", 4) == 0) {
+ if (!card_is_set) {
+ *env_var_name_length = 3;
+ *env_var_name = *env_var_def = c;
+ *env_var_def = strdup(*env_var_def);
+ return c_mic_var;
+ }
+ *env_var_def = c + strlen("ENV=");
+ *env_var_def = strdup(*env_var_def);
+ return c_mic_card_env;
+ }
+ if (isalpha(*c)) {
+ *env_var_name_length = 0;
+ while (isalnum(*c) || *c == '_') {
+ c++;
+ (*env_var_name_length)++;
+ }
+ }
+ if (*c != '=') {
+ return c_no_mic;
+ }
+ *env_var_def = strdup(*env_var_def);
+ return card_is_set? c_mic_card_var : c_mic_var;
+}
+
+// analysing <env-vars> in form:
+// <mic-prefix>_<card-number>_ENV=<env-vars>
+// where:
+//
+// <env-vars>:
+// <env-var>
+// <env-vars> | <env-var>
+//
+// <env-var>:
+// variable=value
+// variable="value"
+// variable=
+
+void MicEnvVar::mic_parse_env_var_list(
+ int card_number, char *env_vars_def_list)
+{
+ char *c = env_vars_def_list;
+ char *env_var_name;
+ int env_var_name_length;
+ char *env_var_def;
+ bool var_is_quoted;
+
+ if (*c == '"') {
+ c++;
+ }
+ while (*c != 0) {
+ var_is_quoted = false;
+ env_var_name = c;
+ env_var_name_length = 0;
+ if (isalpha(*c)) {
+ while (isalnum(*c) || *c == '_') {
+ c++;
+ env_var_name_length++;
+ }
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_mic_parse_env_var_list1);
+ return;
+ }
+ if (*c != '=') {
+ LIBOFFLOAD_ERROR(c_mic_parse_env_var_list2);
+ return;
+ }
+ c++;
+
+ if (*c == '"') {
+ var_is_quoted = true;
+ c++;
+ }
+ // Environment variable values that contain | will need to be escaped.
+ while (*c != 0 && *c != '|' &&
+ (!var_is_quoted || *c != '"'))
+ {
+ // skip escaped symbol
+ if (*c == '\\') {
+ c++;
+ }
+ c++;
+ }
+ if (var_is_quoted) {
+ c++; // for "
+ while (*c != 0 && *c != '|') {
+ c++;
+ }
+ }
+
+ int sz = c - env_var_name;
+ env_var_def = (char*)malloc(sz);
+ memcpy(env_var_def, env_var_name, sz);
+ env_var_def[sz] = 0;
+
+ if (*c == '|') {
+ c++;
+ while (*c != 0 && *c == ' ') {
+ c++;
+ }
+ }
+ add_env_var(card_number,
+ env_var_name,
+ env_var_name_length,
+ env_var_def);
+ }
+}
+
+// Collect all definitions for the card with number "card_num".
+// The returned result is vector of string pointers defining one
+// environment variable. The vector is terminated by NULL pointer.
+// In the beginning of the vector there are env vars defined as
+// <mic-prefix>_<card-number>_<var>=<value>
+// or
+// <mic-prefix>_<card-number>_ENV=<env-vars>
+// where <card-number> is equal to "card_num"
+// They are followed by definitions valid for any card
+// and absent in previous definitions.
+
+char** MicEnvVar::create_environ_for_card(int card_num)
+{
+ VarValue *var_value;
+ VarValue *var_value_find;
+ CardEnvVars *card_data = get_card(card_num);
+ CardEnvVars *card_data_common;
+ std::list<char*> new_env;
+ char **rez;
+
+ if (!prefix) {
+ return NULL;
+ }
+ // There is no personel env var definitions for the card with
+ // number "card_num"
+ if (!card_data) {
+ return create_environ_for_card(any_card);
+ }
+
+ for (std::list<MicEnvVar::VarValue*>::const_iterator
+ it = card_data->env_vars.begin();
+ it != card_data->env_vars.end(); it++) {
+ var_value = *it;
+ new_env.push_back(var_value->env_var_value);
+ }
+
+ if (card_num != any_card) {
+ card_data_common = get_card(any_card);
+ for (std::list<MicEnvVar::VarValue*>::const_iterator
+ it = card_data_common->env_vars.begin();
+ it != card_data_common->env_vars.end(); it++) {
+ var_value = *it;
+ var_value_find = card_data->find_var(var_value->env_var,
+ var_value->length);
+ if (!var_value_find) {
+ new_env.push_back(var_value->env_var_value);
+ }
+ }
+ }
+
+ int new_env_size = new_env.size();
+ rez = (char**) malloc((new_env_size + 1) * sizeof(char*));
+ std::copy(new_env.begin(), new_env.end(), rez);
+ rez[new_env_size] = 0;
+ return rez;
+}
diff --git a/final/offload/src/offload_env.h b/final/offload/src/offload_env.h
new file mode 100644
index 0000000..f035ff6
--- /dev/null
+++ b/final/offload/src/offload_env.h
@@ -0,0 +1,91 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_ENV_H_INCLUDED
+#define OFFLOAD_ENV_H_INCLUDED
+
+#include <list>
+
+// data structure and routines to parse MIC user environment and pass to MIC
+
+enum MicEnvVarKind
+{
+ c_no_mic, // not MIC env var
+ c_mic_var, // for <mic-prefix>_<var>
+ c_mic_card_var, // for <mic-prefix>_<card-number>_<var>
+ c_mic_card_env // for <mic-prefix>_<card-number>_ENV
+};
+
+struct MicEnvVar {
+public:
+ MicEnvVar() : prefix(0) {}
+ ~MicEnvVar();
+
+ void analyze_env_var(char *env_var_string);
+ char** create_environ_for_card(int card_num);
+ MicEnvVarKind get_env_var_kind(
+ char *env_var_string,
+ int *card_number,
+ char **env_var_name,
+ int *env_var_name_length,
+ char **env_var_def
+ );
+ void add_env_var(
+ int card_number,
+ char *env_var_name,
+ int env_var_name_length,
+ char *env_var_def
+ );
+
+ void set_prefix(const char *pref) {
+ prefix = (pref && *pref != '\0') ? pref : 0;
+ }
+
+ struct VarValue {
+ public:
+ char* env_var;
+ int length;
+ char* env_var_value;
+
+ VarValue(char* var, int ln, char* value)
+ {
+ env_var = var;
+ length = ln;
+ env_var_value = value;
+ }
+ ~VarValue();
+ };
+
+ struct CardEnvVars {
+ public:
+
+ int card_number;
+ std::list<struct VarValue*> env_vars;
+
+ CardEnvVars() { card_number = any_card; }
+ CardEnvVars(int num) { card_number = num; }
+ ~CardEnvVars();
+
+ void add_new_env_var(int number, char *env_var, int length,
+ char *env_var_value);
+ VarValue* find_var(char* env_var_name, int env_var_name_length);
+ };
+ static const int any_card;
+
+private:
+ void mic_parse_env_var_list(int card_number, char *env_var_def);
+ CardEnvVars* get_card(int number);
+
+ const char *prefix;
+ std::list<struct CardEnvVars *> card_spec_list;
+ CardEnvVars common_vars;
+};
+
+#endif // OFFLOAD_ENV_H_INCLUDED
diff --git a/final/offload/src/offload_host.cpp b/final/offload/src/offload_host.cpp
new file mode 100644
index 0000000..38d5139
--- /dev/null
+++ b/final/offload/src/offload_host.cpp
@@ -0,0 +1,4360 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// Forward declaration as the following 2 functions are declared as friend in offload_engine.h
+// CLANG does not like static to been after friend declaration.
+static void __offload_init_library_once(void);
+static void __offload_fini_library(void);
+
+#include "offload_host.h"
+#ifdef MYO_SUPPORT
+#include "offload_myo_host.h"
+#endif
+
+#include <malloc.h>
+#ifndef TARGET_WINNT
+#include <alloca.h>
+#include <elf.h>
+#endif // TARGET_WINNT
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <algorithm>
+#include <bitset>
+
+#if defined(HOST_WINNT)
+#define PATH_SEPARATOR ";"
+#else
+#define PATH_SEPARATOR ":"
+#endif
+
+#define GET_OFFLOAD_NUMBER(timer_data) \
+ timer_data? timer_data->offload_number : 0
+
+#ifdef TARGET_WINNT
+// Small subset of ELF declarations for Windows which is needed to compile
+// this file. ELF header is used to understand what binary type is contained
+// in the target image - shared library or executable.
+
+typedef uint16_t Elf64_Half;
+typedef uint32_t Elf64_Word;
+typedef uint64_t Elf64_Addr;
+typedef uint64_t Elf64_Off;
+
+#define EI_NIDENT 16
+
+#define ET_EXEC 2
+#define ET_DYN 3
+
+typedef struct
+{
+ unsigned char e_ident[EI_NIDENT];
+ Elf64_Half e_type;
+ Elf64_Half e_machine;
+ Elf64_Word e_version;
+ Elf64_Addr e_entry;
+ Elf64_Off e_phoff;
+ Elf64_Off e_shoff;
+ Elf64_Word e_flags;
+ Elf64_Half e_ehsize;
+ Elf64_Half e_phentsize;
+ Elf64_Half e_phnum;
+ Elf64_Half e_shentsize;
+ Elf64_Half e_shnum;
+ Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+#endif // TARGET_WINNT
+
+// Host console and file logging
+const char *prefix;
+int console_enabled = 0;
+int offload_number = 0;
+
+static const char *htrace_envname = "H_TRACE";
+static const char *offload_report_envname = "OFFLOAD_REPORT";
+static char *timer_envname = "H_TIME";
+
+// Trace information
+static const char* vardesc_direction_as_string[] = {
+ "NOCOPY",
+ "IN",
+ "OUT",
+ "INOUT"
+};
+static const char* vardesc_type_as_string[] = {
+ "unknown",
+ "data",
+ "data_ptr",
+ "func_ptr",
+ "void_ptr",
+ "string_ptr",
+ "dv",
+ "dv_data",
+ "dv_data_slice",
+ "dv_ptr",
+ "dv_ptr_data",
+ "dv_ptr_data_slice",
+ "cean_var",
+ "cean_var_ptr",
+ "c_data_ptr_array",
+ "c_func_ptr_array",
+ "c_void_ptr_array",
+ "c_string_ptr_array"
+};
+
+Engine* mic_engines = 0;
+uint32_t mic_engines_total = 0;
+pthread_key_t mic_thread_key;
+MicEnvVar mic_env_vars;
+uint64_t cpu_frequency = 0;
+
+// MIC_STACKSIZE
+uint32_t mic_stack_size = 12 * 1024 * 1024;
+
+// MIC_BUFFERSIZE
+uint64_t mic_buffer_size = 0;
+
+// MIC_LD_LIBRARY_PATH
+char* mic_library_path = 0;
+
+// MIC_PROXY_IO
+bool mic_proxy_io = true;
+
+// MIC_PROXY_FS_ROOT
+char* mic_proxy_fs_root = 0;
+
+// Threshold for creating buffers with large pages. Buffer is created
+// with large pages hint if its size exceeds the threshold value.
+// By default large pages are disabled right now (by setting default
+// value for threshold to MAX) due to HSD 4114629.
+uint64_t __offload_use_2mb_buffers = 0xffffffffffffffffULL;
+static const char *mic_use_2mb_buffers_envname =
+ "MIC_USE_2MB_BUFFERS";
+
+static uint64_t __offload_use_async_buffer_write = 2 * 1024 * 1024;
+static const char *mic_use_async_buffer_write_envname =
+ "MIC_USE_ASYNC_BUFFER_WRITE";
+
+static uint64_t __offload_use_async_buffer_read = 2 * 1024 * 1024;
+static const char *mic_use_async_buffer_read_envname =
+ "MIC_USE_ASYNC_BUFFER_READ";
+
+// device initialization type
+OffloadInitType __offload_init_type = c_init_on_offload_all;
+static const char *offload_init_envname = "OFFLOAD_INIT";
+
+// active wait
+static bool __offload_active_wait = true;
+static const char *offload_active_wait_envname = "OFFLOAD_ACTIVE_WAIT";
+
+// OMP_DEFAULT_DEVICE
+int __omp_device_num = 0;
+static const char *omp_device_num_envname = "OMP_DEFAULT_DEVICE";
+
+// The list of pending target libraries
+static bool __target_libs;
+static TargetImageList __target_libs_list;
+static mutex_t __target_libs_lock;
+static mutex_t stack_alloc_lock;
+
+// Target executable
+TargetImage* __target_exe;
+
+static char * offload_get_src_base(void * ptr, uint8_t type)
+{
+ char *base;
+ if (VAR_TYPE_IS_PTR(type)) {
+ base = *static_cast<char**>(ptr);
+ }
+ else if (VAR_TYPE_IS_SCALAR(type)) {
+ base = static_cast<char*>(ptr);
+ }
+ else if (VAR_TYPE_IS_DV_DATA_SLICE(type) || VAR_TYPE_IS_DV_DATA(type)) {
+ ArrDesc *dvp;
+ if (VAR_TYPE_IS_DV_DATA_SLICE(type)) {
+ const arr_desc *ap = static_cast<const arr_desc*>(ptr);
+ dvp = (type == c_dv_data_slice) ?
+ reinterpret_cast<ArrDesc*>(ap->base) :
+ *reinterpret_cast<ArrDesc**>(ap->base);
+ }
+ else {
+ dvp = (type == c_dv_data) ?
+ static_cast<ArrDesc*>(ptr) :
+ *static_cast<ArrDesc**>(ptr);
+ }
+ base = reinterpret_cast<char*>(dvp->Base);
+ }
+ else {
+ base = NULL;
+ }
+ return base;
+}
+
+void OffloadDescriptor::report_coi_error(error_types msg, COIRESULT res)
+{
+ // special case for the 'process died' error
+ if (res == COI_PROCESS_DIED) {
+ m_device.fini_process(true);
+ }
+ else {
+ switch (msg) {
+ case c_buf_create:
+ if (res == COI_OUT_OF_MEMORY) {
+ msg = c_buf_create_out_of_mem;
+ }
+ /* fallthru */
+
+ case c_buf_create_from_mem:
+ case c_buf_get_address:
+ case c_pipeline_create:
+ case c_pipeline_run_func:
+ LIBOFFLOAD_ERROR(msg, m_device.get_logical_index(), res);
+ break;
+
+ case c_buf_read:
+ case c_buf_write:
+ case c_buf_copy:
+ case c_buf_map:
+ case c_buf_unmap:
+ case c_buf_destroy:
+ case c_buf_set_state:
+ LIBOFFLOAD_ERROR(msg, res);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ exit(1);
+}
+
+_Offload_result OffloadDescriptor::translate_coi_error(COIRESULT res) const
+{
+ switch (res) {
+ case COI_SUCCESS:
+ return OFFLOAD_SUCCESS;
+
+ case COI_PROCESS_DIED:
+ return OFFLOAD_PROCESS_DIED;
+
+ case COI_OUT_OF_MEMORY:
+ return OFFLOAD_OUT_OF_MEMORY;
+
+ default:
+ return OFFLOAD_ERROR;
+ }
+}
+
+bool OffloadDescriptor::alloc_ptr_data(
+ PtrData* &ptr_data,
+ void *base,
+ int64_t disp,
+ int64_t size,
+ int64_t alloc_disp,
+ int align
+)
+{
+ // total length of base
+ int64_t length = disp + size;
+ bool is_new;
+
+ OFFLOAD_TRACE(3, "Creating association for data: addr %p, length %lld\n",
+ base, length);
+
+ // add new entry
+ ptr_data = m_device.insert_ptr_data(base, length, is_new);
+ if (is_new) {
+
+ OFFLOAD_TRACE(3, "Added new association\n");
+
+ if (length > 0) {
+ OffloadTimer timer(get_timer_data(), c_offload_host_alloc_buffers);
+ COIRESULT res;
+
+ // align should be a power of 2
+ if (align > 0 && (align & (align - 1)) == 0) {
+ // offset within mic_buffer. Can do offset optimization
+ // only when source address alignment satisfies requested
+ // alignment on the target (cq172736).
+ if ((reinterpret_cast<intptr_t>(base) & (align - 1)) == 0) {
+ ptr_data->mic_offset = reinterpret_cast<intptr_t>(base) & 4095;
+ }
+ }
+
+ // buffer size and flags
+ uint64_t buffer_size = length + ptr_data->mic_offset;
+ uint32_t buffer_flags = 0;
+
+ // create buffer with large pages if data length exceeds
+ // large page threshold
+ if (length >= __offload_use_2mb_buffers) {
+ buffer_flags = COI_OPTIMIZE_HUGE_PAGE_SIZE;
+ }
+
+ // create CPU buffer
+ OFFLOAD_DEBUG_TRACE_1(3,
+ GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_create_buf_host,
+ "Creating buffer from source memory %p, "
+ "length %lld\n", base, length);
+
+ // result is not checked because we can continue without cpu
+ // buffer. In this case we will use COIBufferRead/Write instead
+ // of COIBufferCopy.
+ COI::BufferCreateFromMemory(length,
+ COI_BUFFER_NORMAL,
+ 0,
+ base,
+ 1,
+ &m_device.get_process(),
+ &ptr_data->cpu_buf);
+
+ OFFLOAD_DEBUG_TRACE_1(3,
+ GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_create_buf_mic,
+ "Creating buffer for sink: size %lld, offset %d, "
+ "flags =0x%x\n", buffer_size - alloc_disp,
+ ptr_data->mic_offset, buffer_flags);
+
+ // create MIC buffer
+ res = COI::BufferCreate(buffer_size - alloc_disp,
+ COI_BUFFER_NORMAL,
+ buffer_flags,
+ 0,
+ 1,
+ &m_device.get_process(),
+ &ptr_data->mic_buf);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_create, res);
+ }
+ ptr_data->alloc_ptr_data_lock.unlock();
+ return false;
+ }
+
+ // make buffer valid on the device.
+ res = COI::BufferSetState(ptr_data->mic_buf,
+ m_device.get_process(),
+ COI_BUFFER_VALID,
+ COI_BUFFER_NO_MOVE,
+ 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_set_state, res);
+ }
+ ptr_data->alloc_ptr_data_lock.unlock();
+ return false;
+ }
+
+ res = COI::BufferSetState(ptr_data->mic_buf,
+ COI_PROCESS_SOURCE,
+ COI_BUFFER_INVALID,
+ COI_BUFFER_NO_MOVE,
+ 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_set_state, res);
+ }
+ ptr_data->alloc_ptr_data_lock.unlock();
+ return false;
+ }
+ }
+
+ ptr_data->alloc_disp = alloc_disp;
+ ptr_data->alloc_ptr_data_lock.unlock();
+ }
+ else {
+ mutex_locker_t locker(ptr_data->alloc_ptr_data_lock);
+
+ OFFLOAD_TRACE(3, "Found existing association: addr %p, length %lld, "
+ "is_static %d\n",
+ ptr_data->cpu_addr.start(), ptr_data->cpu_addr.length(),
+ ptr_data->is_static);
+
+ // This is not a new entry. Make sure that provided address range fits
+ // into existing one.
+ MemRange addr_range(base, length - ptr_data->alloc_disp);
+ if (!ptr_data->cpu_addr.contains(addr_range)) {
+ LIBOFFLOAD_ERROR(c_bad_ptr_mem_range);
+ exit(1);
+ }
+
+ // if the entry is associated with static data it may not have buffers
+ // created because they are created on demand.
+ if (ptr_data->is_static && !init_static_ptr_data(ptr_data)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool OffloadDescriptor::find_ptr_data(
+ PtrData* &ptr_data,
+ void *base,
+ int64_t disp,
+ int64_t size,
+ bool report_error
+)
+{
+ // total length of base
+ int64_t length = disp + size;
+
+ OFFLOAD_TRACE(3, "Looking for association for data: addr %p, "
+ "length %lld\n", base, length);
+
+ // find existing association in pointer table
+ ptr_data = m_device.find_ptr_data(base);
+ if (ptr_data == 0) {
+ if (report_error) {
+ LIBOFFLOAD_ERROR(c_no_ptr_data, base);
+ exit(1);
+ }
+ OFFLOAD_TRACE(3, "Association does not exist\n");
+ return true;
+ }
+
+ OFFLOAD_TRACE(3, "Found association: base %p, length %lld, is_static %d\n",
+ ptr_data->cpu_addr.start(), ptr_data->cpu_addr.length(),
+ ptr_data->is_static);
+
+ // make sure that provided address range fits into existing one
+ MemRange addr_range(base, length);
+ if (!ptr_data->cpu_addr.contains(addr_range)) {
+ if (report_error) {
+ LIBOFFLOAD_ERROR(c_bad_ptr_mem_range);
+ exit(1);
+ }
+ OFFLOAD_TRACE(3, "Existing association partially overlaps with "
+ "data address range\n");
+ ptr_data = 0;
+ return true;
+ }
+
+ // if the entry is associated with static data it may not have buffers
+ // created because they are created on demand.
+ if (ptr_data->is_static && !init_static_ptr_data(ptr_data)) {
+ return false;
+ }
+
+ return true;
+}
+
+bool OffloadDescriptor::init_static_ptr_data(PtrData *ptr_data)
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_alloc_buffers);
+
+ if (ptr_data->cpu_buf == 0) {
+ OFFLOAD_TRACE(3, "Creating buffer from source memory %llx\n",
+ ptr_data->cpu_addr.start());
+
+ COIRESULT res = COI::BufferCreateFromMemory(
+ ptr_data->cpu_addr.length(),
+ COI_BUFFER_NORMAL,
+ 0,
+ const_cast<void*>(ptr_data->cpu_addr.start()),
+ 1, &m_device.get_process(),
+ &ptr_data->cpu_buf);
+
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_create_from_mem, res);
+ }
+ }
+
+ if (ptr_data->mic_buf == 0) {
+ OFFLOAD_TRACE(3, "Creating buffer from sink memory %llx\n",
+ ptr_data->mic_addr);
+
+ COIRESULT res = COI::BufferCreateFromMemory(
+ ptr_data->cpu_addr.length(),
+ COI_BUFFER_NORMAL,
+ COI_SINK_MEMORY,
+ reinterpret_cast<void*>(ptr_data->mic_addr),
+ 1, &m_device.get_process(),
+ &ptr_data->mic_buf);
+
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_create_from_mem, res);
+ }
+ }
+
+ return true;
+}
+
+bool OffloadDescriptor::init_mic_address(PtrData *ptr_data)
+{
+ if (ptr_data->mic_buf != 0 && ptr_data->mic_addr == 0) {
+ COIRESULT res = COI::BufferGetSinkAddress(ptr_data->mic_buf,
+ &ptr_data->mic_addr);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_get_address, res);
+ }
+ return false;
+ }
+ }
+ return true;
+}
+
+bool OffloadDescriptor::nullify_target_stack(
+ COIBUFFER targ_buf,
+ uint64_t size
+)
+{
+ char * ptr = (char*)malloc(size);
+ COIRESULT res;
+
+ memset(ptr, 0, size);
+ res = COI::BufferWrite(
+ targ_buf,
+ 0,
+ ptr,
+ size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0, 0);
+ free(ptr);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ return true;
+}
+
+bool OffloadDescriptor::offload_stack_memory_manager(
+ const void * stack_begin,
+ int routine_id,
+ int buf_size,
+ int align,
+ bool *is_new)
+{
+ mutex_locker_t locker(stack_alloc_lock);
+
+ PersistData * new_el;
+ PersistDataList::iterator it_begin = m_device.m_persist_list.begin();
+ PersistDataList::iterator it_end;
+ int erase = 0;
+
+ *is_new = false;
+
+ for (PersistDataList::iterator it = m_device.m_persist_list.begin();
+ it != m_device.m_persist_list.end(); it++) {
+ PersistData cur_el = *it;
+
+ if (stack_begin > it->stack_cpu_addr) {
+ // this stack data must be destroyed
+ m_destroy_stack.push_front(cur_el.stack_ptr_data);
+ it_end = it;
+ erase++;
+ }
+ else if (stack_begin == it->stack_cpu_addr) {
+ if (routine_id != it-> routine_id) {
+ // this stack data must be destroyed
+ m_destroy_stack.push_front(cur_el.stack_ptr_data);
+ it_end = it;
+ erase++;
+ break;
+ }
+ else {
+ // stack data is reused
+ m_stack_ptr_data = it->stack_ptr_data;
+ if (erase > 0) {
+ // all obsolete stack sections must be erased from the list
+ m_device.m_persist_list.erase(it_begin, ++it_end);
+
+ m_in_datalen +=
+ erase * sizeof(new_el->stack_ptr_data->mic_addr);
+ }
+ OFFLOAD_TRACE(3, "Reuse of stack buffer with addr %p\n",
+ m_stack_ptr_data->mic_addr);
+ return true;
+ }
+ }
+ else if (stack_begin < it->stack_cpu_addr) {
+ break;
+ }
+ }
+
+ if (erase > 0) {
+ // all obsolete stack sections must be erased from the list
+ m_device.m_persist_list.erase(it_begin, ++it_end);
+ m_in_datalen += erase * sizeof(new_el->stack_ptr_data->mic_addr);
+ }
+ // new stack table is created
+ new_el = new PersistData(stack_begin, routine_id, buf_size);
+ // create MIC buffer
+ COIRESULT res;
+ uint32_t buffer_flags = 0;
+
+ // create buffer with large pages if data length exceeds
+ // large page threshold
+ if (buf_size >= __offload_use_2mb_buffers) {
+ buffer_flags = COI_OPTIMIZE_HUGE_PAGE_SIZE;
+ }
+ res = COI::BufferCreate(buf_size,
+ COI_BUFFER_NORMAL,
+ buffer_flags,
+ 0,
+ 1,
+ &m_device.get_process(),
+ &new_el->stack_ptr_data->mic_buf);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_create, res);
+ }
+ return false;
+ }
+ // make buffer valid on the device.
+ res = COI::BufferSetState(new_el->stack_ptr_data->mic_buf,
+ m_device.get_process(),
+ COI_BUFFER_VALID,
+ COI_BUFFER_NO_MOVE,
+ 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_set_state, res);
+ }
+ return false;
+ }
+ res = COI::BufferSetState(new_el->stack_ptr_data->mic_buf,
+ COI_PROCESS_SOURCE,
+ COI_BUFFER_INVALID,
+ COI_BUFFER_NO_MOVE,
+ 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ }
+ else if (m_is_mandatory) {
+ report_coi_error(c_buf_set_state, res);
+ }
+ return false;
+ }
+ // persistence algorithm requires target stack initialy to be nullified
+ if (!nullify_target_stack(new_el->stack_ptr_data->mic_buf, buf_size)) {
+ return false;
+ }
+
+ m_stack_ptr_data = new_el->stack_ptr_data;
+ init_mic_address(m_stack_ptr_data);
+ OFFLOAD_TRACE(3, "Allocating stack buffer with addr %p\n",
+ m_stack_ptr_data->mic_addr);
+ m_device.m_persist_list.push_front(*new_el);
+ init_mic_address(new_el->stack_ptr_data);
+ *is_new = true;
+ return true;
+}
+
+bool OffloadDescriptor::setup_descriptors(
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int vars_total,
+ int entry_id,
+ const void *stack_addr
+)
+{
+ COIRESULT res;
+
+ OffloadTimer timer(get_timer_data(), c_offload_host_setup_buffers);
+
+ // make a copy of variable descriptors
+ m_vars_total = vars_total;
+ if (vars_total > 0) {
+ m_vars = (VarDesc*) malloc(m_vars_total * sizeof(VarDesc));
+ memcpy(m_vars, vars, m_vars_total * sizeof(VarDesc));
+ m_vars_extra = (VarExtra*) malloc(m_vars_total * sizeof(VarExtra));
+ }
+
+ // dependencies
+ m_in_deps = (COIEVENT*) malloc(sizeof(COIEVENT) * (m_vars_total + 1));
+ if (m_vars_total > 0) {
+ m_out_deps = (COIEVENT*) malloc(sizeof(COIEVENT) * m_vars_total);
+ }
+
+ // copyin/copyout data length
+ m_in_datalen = 0;
+ m_out_datalen = 0;
+
+ // First pass over variable descriptors
+ // - Calculate size of the input and output non-pointer data
+ // - Allocate buffers for input and output pointers
+ for (int i = 0; i < m_vars_total; i++) {
+ void* alloc_base = NULL;
+ int64_t alloc_disp = 0;
+ int64_t alloc_size;
+ bool src_is_for_mic = (m_vars[i].direction.out ||
+ m_vars[i].into == NULL);
+
+ const char *var_sname = "";
+ if (vars2 != NULL && i < vars_total) {
+ if (vars2[i].sname != NULL) {
+ var_sname = vars2[i].sname;
+ }
+ }
+ OFFLOAD_TRACE(2, " VarDesc %d, var=%s, %s, %s\n",
+ i, var_sname,
+ vardesc_direction_as_string[m_vars[i].direction.bits],
+ vardesc_type_as_string[m_vars[i].type.src]);
+ if (vars2 != NULL && i < vars_total && vars2[i].dname != NULL) {
+ OFFLOAD_TRACE(2, " into=%s, %s\n", vars2[i].dname,
+ vardesc_type_as_string[m_vars[i].type.dst]);
+ }
+ OFFLOAD_TRACE(2,
+ " type_src=%d, type_dstn=%d, direction=%d, "
+ "alloc_if=%d, free_if=%d, align=%d, mic_offset=%d, flags=0x%x, "
+ "offset=%lld, size=%lld, count/disp=%lld, ptr=%p, into=%p\n",
+ m_vars[i].type.src,
+ m_vars[i].type.dst,
+ m_vars[i].direction.bits,
+ m_vars[i].alloc_if,
+ m_vars[i].free_if,
+ m_vars[i].align,
+ m_vars[i].mic_offset,
+ m_vars[i].flags.bits,
+ m_vars[i].offset,
+ m_vars[i].size,
+ m_vars[i].count,
+ m_vars[i].ptr,
+ m_vars[i].into);
+
+ if (m_vars[i].alloc != NULL) {
+ // array descriptor
+ const arr_desc *ap =
+ static_cast<const arr_desc*>(m_vars[i].alloc);
+
+ // debug dump
+ __arr_desc_dump(" ", "ALLOC", ap, 0);
+
+ __arr_data_offset_and_length(ap, alloc_disp, alloc_size);
+
+ alloc_base = reinterpret_cast<void*>(ap->base);
+ }
+
+ m_vars_extra[i].cpu_disp = 0;
+ m_vars_extra[i].cpu_offset = 0;
+ m_vars_extra[i].src_data = 0;
+ m_vars_extra[i].read_rng_src = 0;
+ m_vars_extra[i].read_rng_dst = 0;
+ // flag is_arr_ptr_el is 1 only for var_descs generated
+ // for c_data_ptr_array type
+ if (i < vars_total) {
+ m_vars_extra[i].is_arr_ptr_el = 0;
+ }
+
+ switch (m_vars[i].type.src) {
+ case c_data_ptr_array:
+ {
+ const arr_desc *ap;
+ const VarDesc3 *vd3 =
+ static_cast<const VarDesc3*>(m_vars[i].ptr);
+ int flags = vd3->array_fields;
+ OFFLOAD_TRACE(2,
+ " pointer array flags = %04x\n", flags);
+ OFFLOAD_TRACE(2,
+ " pointer array type is %s\n",
+ vardesc_type_as_string[flags & 0x3f]);
+ ap = static_cast<const arr_desc*>(vd3->ptr_array);
+ __arr_desc_dump(" ", "ptr array", ap, 0);
+ if (m_vars[i].into) {
+ ap = static_cast<const arr_desc*>(m_vars[i].into);
+ __arr_desc_dump(
+ " ", "into array", ap, 0);
+ }
+ if ((flags & (1<<flag_align_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->align_array);
+ __arr_desc_dump(
+ " ", "align array", ap, 0);
+ }
+ if ((flags & (1<<flag_alloc_if_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_if_array);
+ __arr_desc_dump(
+ " ", "alloc_if array", ap, 0);
+ }
+ if ((flags & (1<<flag_free_if_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->free_if_array);
+ __arr_desc_dump(
+ " ", "free_if array", ap, 0);
+ }
+ if ((flags & (1<<flag_extent_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->extent_start);
+ __arr_desc_dump(
+ " ", "extent_start array", ap, 0);
+ } else if ((flags &
+ (1<<flag_extent_start_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " extent_start scalar = %d\n",
+ (int64_t)vd3->extent_start);
+ }
+ if ((flags & (1<<flag_extent_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>
+ (vd3->extent_elements);
+ __arr_desc_dump(
+ " ", "extent_elements array", ap, 0);
+ } else if ((flags &
+ (1<<flag_extent_elements_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " extent_elements scalar = %d\n",
+ (int64_t)vd3->extent_elements);
+ }
+ if ((flags & (1<<flag_into_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->into_start);
+ __arr_desc_dump(
+ " ", "into_start array", ap, 0);
+ } else if ((flags &
+ (1<<flag_into_start_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " into_start scalar = %d\n",
+ (int64_t)vd3->into_start);
+ }
+ if ((flags & (1<<flag_into_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->into_elements);
+ __arr_desc_dump(
+ " ", "into_elements array", ap, 0);
+ } else if ((flags &
+ (1<<flag_into_elements_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " into_elements scalar = %d\n",
+ (int64_t)vd3->into_elements);
+ }
+ if ((flags & (1<<flag_alloc_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_start);
+ __arr_desc_dump(
+ " ", "alloc_start array", ap, 0);
+ } else if ((flags &
+ (1<<flag_alloc_start_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " alloc_start scalar = %d\n",
+ (int64_t)vd3->alloc_start);
+ }
+ if ((flags & (1<<flag_alloc_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_elements);
+ __arr_desc_dump(
+ " ", "alloc_elements array", ap, 0);
+ } else if ((flags &
+ (1<<flag_alloc_elements_is_scalar)) != 0) {
+ OFFLOAD_TRACE(2,
+ " alloc_elements scalar = %d\n",
+ (int64_t)vd3->alloc_elements);
+ }
+ }
+ if (!gen_var_descs_for_pointer_array(i)) {
+ return false;
+ }
+ break;
+
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ // In all uses later
+ // VarDesc.size will have the length of the data to be
+ // transferred
+ // VarDesc.disp will have an offset from base
+ if (m_vars[i].type.src == c_cean_var) {
+ // array descriptor
+ const arr_desc *ap =
+ static_cast<const arr_desc*>(m_vars[i].ptr);
+
+ // debug dump
+ __arr_desc_dump("", "IN/OUT", ap, 0);
+
+ // offset and length are derived from the array descriptor
+ __arr_data_offset_and_length(ap, m_vars[i].disp,
+ m_vars[i].size);
+ if (!is_arr_desc_contiguous(ap)) {
+ m_vars[i].flags.is_noncont_src = 1;
+ m_vars_extra[i].read_rng_src =
+ init_read_ranges_arr_desc(ap);
+ }
+ // all necessary information about length and offset is
+ // transferred in var descriptor. There is no need to send
+ // array descriptor to the target side.
+ m_vars[i].ptr = reinterpret_cast<void*>(ap->base);
+ }
+ else {
+ m_vars[i].size *= m_vars[i].count;
+ m_vars[i].disp = 0;
+ }
+
+ if (m_vars[i].direction.bits) {
+ // make sure that transfer size > 0
+ if (m_vars[i].size <= 0) {
+ LIBOFFLOAD_ERROR(c_zero_or_neg_transfer_size);
+ exit(1);
+ }
+
+ if (m_vars[i].flags.is_static) {
+ PtrData *ptr_data;
+
+ // find data associated with variable
+ if (!find_ptr_data(ptr_data,
+ m_vars[i].ptr,
+ m_vars[i].disp,
+ m_vars[i].size,
+ false)) {
+ return false;
+ }
+
+ if (ptr_data != 0) {
+ // offset to base from the beginning of the buffer
+ // memory
+ m_vars[i].offset =
+ (char*) m_vars[i].ptr -
+ (char*) ptr_data->cpu_addr.start();
+ }
+ else {
+ m_vars[i].flags.is_static = false;
+ if (m_vars[i].into == NULL) {
+ m_vars[i].flags.is_static_dstn = false;
+ }
+ }
+ m_vars_extra[i].src_data = ptr_data;
+ }
+
+ if (m_is_openmp) {
+ if (m_vars[i].flags.is_static) {
+ // Static data is transferred only by omp target
+ // update construct which passes zeros for
+ // alloc_if and free_if.
+ if (m_vars[i].alloc_if || m_vars[i].free_if) {
+ m_vars[i].direction.bits = c_parameter_nocopy;
+ }
+ }
+ else {
+ AutoData *auto_data;
+ if (m_vars[i].alloc_if) {
+ auto_data = m_device.insert_auto_data(
+ m_vars[i].ptr, m_vars[i].size);
+ auto_data->add_reference();
+ }
+ else {
+ // TODO: what should be done if var is not in
+ // the table?
+ auto_data = m_device.find_auto_data(
+ m_vars[i].ptr);
+ }
+
+ // For automatic variables data is transferred
+ // only if alloc_if == 0 && free_if == 0
+ // or reference count is 1
+ if ((m_vars[i].alloc_if || m_vars[i].free_if) &&
+ auto_data != 0 &&
+ auto_data->get_reference() != 1) {
+ m_vars[i].direction.bits = c_parameter_nocopy;
+ }
+
+ // save data for later use
+ m_vars_extra[i].auto_data = auto_data;
+ }
+ }
+
+ if (m_vars[i].direction.in &&
+ !m_vars[i].flags.is_static) {
+ m_in_datalen += m_vars[i].size;
+
+ // for non-static target destination defined as CEAN
+ // expression we pass to target its size and dist
+ if (m_vars[i].into == NULL &&
+ m_vars[i].type.src == c_cean_var) {
+ m_in_datalen += 2 * sizeof(uint64_t);
+ }
+ m_need_runfunction = true;
+ }
+ if (m_vars[i].direction.out &&
+ !m_vars[i].flags.is_static) {
+ m_out_datalen += m_vars[i].size;
+ m_need_runfunction = true;
+ }
+ }
+ break;
+
+ case c_dv:
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ ArrDesc *dvp = static_cast<ArrDesc*>(m_vars[i].ptr);
+
+ // debug dump
+ __dv_desc_dump("IN/OUT", dvp);
+
+ // send dope vector contents excluding base
+ m_in_datalen += m_vars[i].size - sizeof(uint64_t);
+ m_need_runfunction = true;
+ }
+ break;
+
+ case c_string_ptr:
+ if ((m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) &&
+ m_vars[i].size == 0) {
+ m_vars[i].size = 1;
+ m_vars[i].count =
+ strlen(*static_cast<char**>(m_vars[i].ptr)) + 1;
+ }
+ /* fallthru */
+
+ case c_data_ptr:
+ if (m_vars[i].flags.is_stack_buf &&
+ !m_vars[i].direction.bits &&
+ m_vars[i].alloc_if) {
+ // this var_desc is for stack buffer
+ bool is_new;
+
+ if (!offload_stack_memory_manager(
+ stack_addr, entry_id,
+ m_vars[i].count, m_vars[i].align, &is_new)) {
+ return false;
+ }
+ if (is_new) {
+ m_compute_buffers.push_back(
+ m_stack_ptr_data->mic_buf);
+ m_device.m_persist_list.front().cpu_stack_addr =
+ static_cast<char*>(m_vars[i].ptr);
+ }
+ else {
+ m_vars[i].flags.sink_addr = 1;
+ m_in_datalen += sizeof(m_stack_ptr_data->mic_addr);
+ }
+ m_vars[i].size = m_destroy_stack.size();
+ m_vars_extra[i].src_data = m_stack_ptr_data;
+ // need to add reference for buffer
+ m_need_runfunction = true;
+ break;
+ }
+ /* fallthru */
+
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ if (m_vars[i].type.src == c_cean_var_ptr) {
+ // array descriptor
+ const arr_desc *ap =
+ static_cast<const arr_desc*>(m_vars[i].ptr);
+
+ // debug dump
+ __arr_desc_dump("", "IN/OUT", ap, 1);
+
+ // offset and length are derived from the array descriptor
+ __arr_data_offset_and_length(ap, m_vars[i].disp,
+ m_vars[i].size);
+
+ if (!is_arr_desc_contiguous(ap)) {
+ m_vars[i].flags.is_noncont_src = 1;
+ m_vars_extra[i].read_rng_src =
+ init_read_ranges_arr_desc(ap);
+ }
+ // all necessary information about length and offset is
+ // transferred in var descriptor. There is no need to send
+ // array descriptor to the target side.
+ m_vars[i].ptr = reinterpret_cast<void*>(ap->base);
+ }
+ else if (m_vars[i].type.src == c_dv_ptr) {
+ // need to send DV to the device unless it is 'nocopy'
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ ArrDesc *dvp = *static_cast<ArrDesc**>(m_vars[i].ptr);
+
+ // debug dump
+ __dv_desc_dump("IN/OUT", dvp);
+
+ m_vars[i].direction.bits = c_parameter_in;
+ }
+
+ // no displacement
+ m_vars[i].disp = 0;
+ }
+ else {
+ // c_data_ptr or c_string_ptr
+ m_vars[i].size *= m_vars[i].count;
+ m_vars[i].disp = 0;
+ }
+
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ PtrData *ptr_data;
+
+ // check that buffer length >= 0
+ if (m_vars[i].alloc_if &&
+ m_vars[i].disp + m_vars[i].size < 0) {
+ LIBOFFLOAD_ERROR(c_zero_or_neg_ptr_len);
+ exit(1);
+ }
+
+ // base address
+ void *base = *static_cast<void**>(m_vars[i].ptr);
+
+ // allocate buffer if we have no INTO and don't need
+ // allocation for the ptr at target
+ if (src_is_for_mic) {
+ if (m_vars[i].flags.is_stack_buf) {
+ // for stack persistent objects ptr data is created
+ // by var_desc with number 0.
+ // Its ptr_data is stored at m_stack_ptr_data
+ ptr_data = m_stack_ptr_data;
+ m_vars[i].flags.sink_addr = 1;
+ }
+ else if (m_vars[i].alloc_if) {
+ // add new entry
+ if (!alloc_ptr_data(
+ ptr_data,
+ base,
+ (alloc_base != NULL) ?
+ alloc_disp : m_vars[i].disp,
+ (alloc_base != NULL) ?
+ alloc_size : m_vars[i].size,
+ alloc_disp,
+ (alloc_base != NULL) ?
+ 0 : m_vars[i].align)) {
+ return false;
+ }
+
+ if (ptr_data->add_reference() == 0 &&
+ ptr_data->mic_buf != 0) {
+ // add buffer to the list of buffers that
+ // are passed to dispatch call
+ m_compute_buffers.push_back(
+ ptr_data->mic_buf);
+ }
+ else {
+ // will send buffer address to device
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (!ptr_data->is_static) {
+ // need to add reference for buffer
+ m_need_runfunction = true;
+ }
+ }
+ else {
+ bool error_if_not_found = true;
+ if (m_is_openmp) {
+ // For omp target update variable is ignored
+ // if it does not exist.
+ if (!m_vars[i].alloc_if &&
+ !m_vars[i].free_if) {
+ error_if_not_found = false;
+ }
+ }
+
+ // use existing association from pointer table
+ if (!find_ptr_data(ptr_data,
+ base,
+ m_vars[i].disp,
+ m_vars[i].size,
+ error_if_not_found)) {
+ return false;
+ }
+
+ if (m_is_openmp) {
+ // make var nocopy if it does not exist
+ if (ptr_data == 0) {
+ m_vars[i].direction.bits =
+ c_parameter_nocopy;
+ }
+ }
+
+ if (ptr_data != 0) {
+ m_vars[i].flags.sink_addr = 1;
+ }
+ }
+
+ if (ptr_data != 0) {
+ if (m_is_openmp) {
+ // data is transferred only if
+ // alloc_if == 0 && free_if == 0
+ // or reference count is 1
+ if ((m_vars[i].alloc_if ||
+ m_vars[i].free_if) &&
+ ptr_data->get_reference() != 1) {
+ m_vars[i].direction.bits =
+ c_parameter_nocopy;
+ }
+ }
+
+ if (ptr_data->alloc_disp != 0) {
+ m_vars[i].flags.alloc_disp = 1;
+ m_in_datalen += sizeof(alloc_disp);
+ }
+
+ if (m_vars[i].flags.sink_addr) {
+ // get buffers's address on the sink
+ if (!init_mic_address(ptr_data)) {
+ return false;
+ }
+
+ m_in_datalen += sizeof(ptr_data->mic_addr);
+ }
+
+ if (!ptr_data->is_static && m_vars[i].free_if) {
+ // need to decrement buffer reference on target
+ m_need_runfunction = true;
+ }
+
+ // offset to base from the beginning of the buffer
+ // memory
+ m_vars[i].offset = (char*) base -
+ (char*) ptr_data->cpu_addr.start();
+
+ // copy other pointer properties to var descriptor
+ m_vars[i].mic_offset = ptr_data->mic_offset;
+ m_vars[i].flags.is_static = ptr_data->is_static;
+ }
+ }
+ else {
+ if (!find_ptr_data(ptr_data,
+ base,
+ m_vars[i].disp,
+ m_vars[i].size,
+ false)) {
+ return false;
+ }
+ if (ptr_data) {
+ m_vars[i].offset =
+ (char*) base -
+ (char*) ptr_data->cpu_addr.start();
+ }
+ }
+
+ // save pointer data
+ m_vars_extra[i].src_data = ptr_data;
+ }
+ break;
+
+ case c_func_ptr:
+ if (m_vars[i].direction.in) {
+ m_in_datalen += __offload_funcs.max_name_length();
+ }
+ if (m_vars[i].direction.out) {
+ m_out_datalen += __offload_funcs.max_name_length();
+ }
+ m_need_runfunction = true;
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ ArrDesc *dvp;
+ if (VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.src)) {
+ const arr_desc *ap;
+ ap = static_cast<const arr_desc*>(m_vars[i].ptr);
+
+ dvp = (m_vars[i].type.src == c_dv_data_slice) ?
+ reinterpret_cast<ArrDesc*>(ap->base) :
+ *reinterpret_cast<ArrDesc**>(ap->base);
+ }
+ else {
+ dvp = (m_vars[i].type.src == c_dv_data) ?
+ static_cast<ArrDesc*>(m_vars[i].ptr) :
+ *static_cast<ArrDesc**>(m_vars[i].ptr);
+ }
+
+ // if allocatable dope vector isn't allocated don't
+ // transfer its data
+ if (!__dv_is_allocated(dvp)) {
+ m_vars[i].direction.bits = c_parameter_nocopy;
+ m_vars[i].alloc_if = 0;
+ m_vars[i].free_if = 0;
+ }
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ const arr_desc *ap;
+
+ if (VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.src)) {
+ ap = static_cast<const arr_desc*>(m_vars[i].ptr);
+
+ // debug dump
+ __arr_desc_dump("", "IN/OUT", ap, 0);
+ }
+ if (!__dv_is_contiguous(dvp)) {
+ m_vars[i].flags.is_noncont_src = 1;
+ m_vars_extra[i].read_rng_src =
+ init_read_ranges_dv(dvp);
+ }
+
+ // size and displacement
+ if (VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.src)) {
+ // offset and length are derived from the
+ // array descriptor
+ __arr_data_offset_and_length(ap,
+ m_vars[i].disp,
+ m_vars[i].size);
+ if (m_vars[i].direction.bits) {
+ if (!is_arr_desc_contiguous(ap)) {
+ if (m_vars[i].flags.is_noncont_src) {
+ LIBOFFLOAD_ERROR(c_slice_of_noncont_array);
+ return false;
+ }
+ m_vars[i].flags.is_noncont_src = 1;
+ m_vars_extra[i].read_rng_src =
+ init_read_ranges_arr_desc(ap);
+ }
+ }
+ }
+ else {
+ if (m_vars[i].flags.has_length) {
+ m_vars[i].size =
+ __dv_data_length(dvp, m_vars[i].count);
+ }
+ else {
+ m_vars[i].size = __dv_data_length(dvp);
+ }
+ m_vars[i].disp = 0;
+ }
+
+ // check that length >= 0
+ if (m_vars[i].alloc_if &&
+ (m_vars[i].disp + m_vars[i].size < 0)) {
+ LIBOFFLOAD_ERROR(c_zero_or_neg_ptr_len);
+ exit(1);
+ }
+
+ // base address
+ void *base = reinterpret_cast<void*>(dvp->Base);
+ PtrData *ptr_data;
+
+ // allocate buffer if we have no INTO and don't need
+ // allocation for the ptr at target
+ if (src_is_for_mic) {
+ if (m_vars[i].alloc_if) {
+ // add new entry
+ if (!alloc_ptr_data(
+ ptr_data,
+ base,
+ (alloc_base != NULL) ?
+ alloc_disp : m_vars[i].disp,
+ (alloc_base != NULL) ?
+ alloc_size : m_vars[i].size,
+ alloc_disp,
+ (alloc_base != NULL) ?
+ 0 : m_vars[i].align)) {
+ return false;
+ }
+
+ if (ptr_data->add_reference() == 0 &&
+ ptr_data->mic_buf != 0) {
+ // add buffer to the list of buffers
+ // that are passed to dispatch call
+ m_compute_buffers.push_back(
+ ptr_data->mic_buf);
+ }
+ else {
+ // will send buffer address to device
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (!ptr_data->is_static) {
+ // need to add reference for buffer
+ m_need_runfunction = true;
+ }
+ }
+ else {
+ bool error_if_not_found = true;
+ if (m_is_openmp) {
+ // For omp target update variable is ignored
+ // if it does not exist.
+ if (!m_vars[i].alloc_if &&
+ !m_vars[i].free_if) {
+ error_if_not_found = false;
+ }
+ }
+
+ // use existing association from pointer table
+ if (!find_ptr_data(ptr_data,
+ base,
+ m_vars[i].disp,
+ m_vars[i].size,
+ error_if_not_found)) {
+ return false;
+ }
+
+ if (m_is_openmp) {
+ // make var nocopy if it does not exist
+ if (ptr_data == 0) {
+ m_vars[i].direction.bits =
+ c_parameter_nocopy;
+ }
+ }
+
+ if (ptr_data != 0) {
+ // need to update base in dope vector on device
+ m_vars[i].flags.sink_addr = 1;
+ }
+ }
+
+ if (ptr_data != 0) {
+ if (m_is_openmp) {
+ // data is transferred only if
+ // alloc_if == 0 && free_if == 0
+ // or reference count is 1
+ if ((m_vars[i].alloc_if ||
+ m_vars[i].free_if) &&
+ ptr_data->get_reference() != 1) {
+ m_vars[i].direction.bits =
+ c_parameter_nocopy;
+ }
+ }
+
+ if (ptr_data->alloc_disp != 0) {
+ m_vars[i].flags.alloc_disp = 1;
+ m_in_datalen += sizeof(alloc_disp);
+ }
+
+ if (m_vars[i].flags.sink_addr) {
+ // get buffers's address on the sink
+ if (!init_mic_address(ptr_data)) {
+ return false;
+ }
+
+ m_in_datalen += sizeof(ptr_data->mic_addr);
+ }
+
+ if (!ptr_data->is_static && m_vars[i].free_if) {
+ // need to decrement buffer reference on target
+ m_need_runfunction = true;
+ }
+
+ // offset to base from the beginning of the buffer
+ // memory
+ m_vars[i].offset =
+ (char*) base -
+ (char*) ptr_data->cpu_addr.start();
+
+ // copy other pointer properties to var descriptor
+ m_vars[i].mic_offset = ptr_data->mic_offset;
+ m_vars[i].flags.is_static = ptr_data->is_static;
+ }
+ }
+ else { // !src_is_for_mic
+ if (!find_ptr_data(ptr_data,
+ base,
+ m_vars[i].disp,
+ m_vars[i].size,
+ false)) {
+ return false;
+ }
+ m_vars[i].offset = !ptr_data ? 0 :
+ (char*) base -
+ (char*) ptr_data->cpu_addr.start();
+ }
+
+ // save pointer data
+ m_vars_extra[i].src_data = ptr_data;
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, m_vars[i].type.src);
+ LIBOFFLOAD_ABORT;
+ }
+ if (m_vars[i].type.src == c_data_ptr_array) {
+ continue;
+ }
+
+ if (src_is_for_mic && m_vars[i].flags.is_stack_buf) {
+ m_vars[i].offset = static_cast<char*>(m_vars[i].ptr) -
+ m_device.m_persist_list.front().cpu_stack_addr;
+ }
+ // if source is used at CPU save its offset and disp
+ if (m_vars[i].into == NULL || m_vars[i].direction.in) {
+ m_vars_extra[i].cpu_offset = m_vars[i].offset;
+ m_vars_extra[i].cpu_disp = m_vars[i].disp;
+ }
+
+ // If "into" is define we need to do the similar work for it
+ if (!m_vars[i].into) {
+ continue;
+ }
+
+ int64_t into_disp =0, into_offset = 0;
+
+ switch (m_vars[i].type.dst) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var: {
+ int64_t size = m_vars[i].size;
+
+ if (m_vars[i].type.dst == c_cean_var) {
+ // array descriptor
+ const arr_desc *ap =
+ static_cast<const arr_desc*>(m_vars[i].into);
+
+ // debug dump
+ __arr_desc_dump(" ", "INTO", ap, 0);
+
+ // offset and length are derived from the array descriptor
+ __arr_data_offset_and_length(ap, into_disp, size);
+
+ if (!is_arr_desc_contiguous(ap)) {
+ m_vars[i].flags.is_noncont_dst = 1;
+ m_vars_extra[i].read_rng_dst =
+ init_read_ranges_arr_desc(ap);
+ if (!cean_ranges_match(
+ m_vars_extra[i].read_rng_src,
+ m_vars_extra[i].read_rng_dst)) {
+ LIBOFFLOAD_ERROR(c_ranges_dont_match);
+ exit(1);
+ }
+ }
+ m_vars[i].into = reinterpret_cast<void*>(ap->base);
+ }
+
+ int64_t size_src = m_vars_extra[i].read_rng_src ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_src) :
+ m_vars[i].size;
+ int64_t size_dst = m_vars_extra[i].read_rng_dst ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_dst) :
+ size;
+ // It's supposed that "into" size must be not less
+ // than src size
+ if (size_src > size_dst) {
+ LIBOFFLOAD_ERROR(c_different_src_and_dstn_sizes,
+ size_src, size_dst);
+ exit(1);
+ }
+
+ if (m_vars[i].direction.bits) {
+ if (m_vars[i].flags.is_static_dstn) {
+ PtrData *ptr_data;
+
+ // find data associated with variable
+ if (!find_ptr_data(ptr_data, m_vars[i].into,
+ into_disp, size, false)) {
+ return false;
+ }
+ if (ptr_data != 0) {
+ // offset to base from the beginning of the buffer
+ // memory
+ into_offset =
+ (char*) m_vars[i].into -
+ (char*) ptr_data->cpu_addr.start();
+ }
+ else {
+ m_vars[i].flags.is_static_dstn = false;
+ }
+ m_vars_extra[i].dst_data = ptr_data;
+ }
+ }
+
+ if (m_vars[i].direction.in &&
+ !m_vars[i].flags.is_static_dstn) {
+ m_in_datalen += m_vars[i].size;
+
+ // for non-static target destination defined as CEAN
+ // expression we pass to target its size and dist
+ if (m_vars[i].type.dst == c_cean_var) {
+ m_in_datalen += 2 * sizeof(uint64_t);
+ }
+ m_need_runfunction = true;
+ }
+ break;
+ }
+
+ case c_dv:
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ ArrDesc *dvp = static_cast<ArrDesc*>(m_vars[i].into);
+
+ // debug dump
+ __dv_desc_dump("INTO", dvp);
+
+ // send dope vector contents excluding base
+ m_in_datalen += m_vars[i].size - sizeof(uint64_t);
+ m_need_runfunction = true;
+ }
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr: {
+ int64_t size = m_vars[i].size;
+
+ if (m_vars[i].type.dst == c_cean_var_ptr) {
+ // array descriptor
+ const arr_desc *ap =
+ static_cast<const arr_desc*>(m_vars[i].into);
+
+ // debug dump
+ __arr_desc_dump(" ", "INTO", ap, 1);
+
+ // offset and length are derived from the array descriptor
+ __arr_data_offset_and_length(ap, into_disp, size);
+
+ if (!is_arr_desc_contiguous(ap)) {
+ m_vars[i].flags.is_noncont_src = 1;
+ m_vars_extra[i].read_rng_dst =
+ init_read_ranges_arr_desc(ap);
+ if (!cean_ranges_match(
+ m_vars_extra[i].read_rng_src,
+ m_vars_extra[i].read_rng_dst)) {
+ LIBOFFLOAD_ERROR(c_ranges_dont_match);
+ }
+ }
+ m_vars[i].into = reinterpret_cast<char**>(ap->base);
+ }
+ else if (m_vars[i].type.dst == c_dv_ptr) {
+ // need to send DV to the device unless it is 'nocopy'
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ ArrDesc *dvp = *static_cast<ArrDesc**>(m_vars[i].into);
+
+ // debug dump
+ __dv_desc_dump("INTO", dvp);
+
+ m_vars[i].direction.bits = c_parameter_in;
+ }
+ }
+
+ int64_t size_src = m_vars_extra[i].read_rng_src ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_src) :
+ m_vars[i].size;
+ int64_t size_dst = m_vars_extra[i].read_rng_dst ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_dst) :
+ size;
+ // It's supposed that "into" size must be not less than
+ // src size
+ if (size_src > size_dst) {
+ LIBOFFLOAD_ERROR(c_different_src_and_dstn_sizes,
+ size_src, size_dst);
+ exit(1);
+ }
+
+ if (m_vars[i].direction.bits) {
+ PtrData *ptr_data;
+
+ // base address
+ void *base = *static_cast<void**>(m_vars[i].into);
+
+ if (m_vars[i].direction.in) {
+ // allocate buffer
+ if (m_vars[i].flags.is_stack_buf) {
+ // for stack persistent objects ptr data is created
+ // by var_desc with number 0.
+ // Its ptr_data is stored at m_stack_ptr_data
+ ptr_data = m_stack_ptr_data;
+ m_vars[i].flags.sink_addr = 1;
+ }
+ else if (m_vars[i].alloc_if) {
+ // add new entry
+ if (!alloc_ptr_data(
+ ptr_data,
+ base,
+ (alloc_base != NULL) ?
+ alloc_disp : into_disp,
+ (alloc_base != NULL) ?
+ alloc_size : size,
+ alloc_disp,
+ (alloc_base != NULL) ?
+ 0 : m_vars[i].align)) {
+ return false;
+ }
+
+ if (ptr_data->add_reference() == 0 &&
+ ptr_data->mic_buf != 0) {
+ // add buffer to the list of buffers that
+ // are passed to dispatch call
+ m_compute_buffers.push_back(
+ ptr_data->mic_buf);
+ }
+ else {
+ // will send buffer address to device
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (!ptr_data->is_static) {
+ // need to add reference for buffer
+ m_need_runfunction = true;
+ }
+ }
+ else {
+ // use existing association from pointer table
+ if (!find_ptr_data(ptr_data, base, into_disp, size)) {
+ return false;
+ }
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (ptr_data->alloc_disp != 0) {
+ m_vars[i].flags.alloc_disp = 1;
+ m_in_datalen += sizeof(alloc_disp);
+ }
+
+ if (m_vars[i].flags.sink_addr) {
+ // get buffers's address on the sink
+ if (!init_mic_address(ptr_data)) {
+ return false;
+ }
+
+ m_in_datalen += sizeof(ptr_data->mic_addr);
+ }
+
+ if (!ptr_data->is_static && m_vars[i].free_if) {
+ // need to decrement buffer reference on target
+ m_need_runfunction = true;
+ }
+
+ // copy other pointer properties to var descriptor
+ m_vars[i].mic_offset = ptr_data->mic_offset;
+ m_vars[i].flags.is_static_dstn = ptr_data->is_static;
+ }
+ else {
+ if (!find_ptr_data(ptr_data,
+ base,
+ into_disp,
+ m_vars[i].size,
+ false)) {
+ return false;
+ }
+ }
+ if (ptr_data) {
+ into_offset = ptr_data ?
+ (char*) base -
+ (char*) ptr_data->cpu_addr.start() :
+ 0;
+ }
+ // save pointer data
+ m_vars_extra[i].dst_data = ptr_data;
+ }
+ break;
+ }
+
+ case c_func_ptr:
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ const arr_desc *ap;
+ ArrDesc *dvp;
+ PtrData *ptr_data;
+ int64_t disp;
+ int64_t size;
+
+ if (VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.dst)) {
+ ap = static_cast<const arr_desc*>(m_vars[i].into);
+
+ // debug dump
+ __arr_desc_dump(" ", "INTO", ap, 0);
+
+ dvp = (m_vars[i].type.dst == c_dv_data_slice) ?
+ reinterpret_cast<ArrDesc*>(ap->base) :
+ *reinterpret_cast<ArrDesc**>(ap->base);
+ }
+ else {
+ dvp = (m_vars[i].type.dst == c_dv_data) ?
+ static_cast<ArrDesc*>(m_vars[i].into) :
+ *static_cast<ArrDesc**>(m_vars[i].into);
+ }
+ if (!__dv_is_contiguous(dvp)) {
+ m_vars[i].flags.is_noncont_dst = 1;
+ m_vars_extra[i].read_rng_dst =
+ init_read_ranges_dv(dvp);
+ }
+ // size and displacement
+ if (VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.dst)) {
+ // offset and length are derived from the array
+ // descriptor
+ __arr_data_offset_and_length(ap, into_disp, size);
+ if (m_vars[i].direction.bits) {
+ if (!is_arr_desc_contiguous(ap)) {
+ if (m_vars[i].flags.is_noncont_dst) {
+ LIBOFFLOAD_ERROR(c_slice_of_noncont_array);
+ return false;
+ }
+ m_vars[i].flags.is_noncont_dst = 1;
+ m_vars_extra[i].read_rng_dst =
+ init_read_ranges_arr_desc(ap);
+ if (!cean_ranges_match(
+ m_vars_extra[i].read_rng_src,
+ m_vars_extra[i].read_rng_dst)) {
+ LIBOFFLOAD_ERROR(c_ranges_dont_match);
+ }
+ }
+ }
+ }
+ else {
+ if (m_vars[i].flags.has_length) {
+ size = __dv_data_length(dvp, m_vars[i].count);
+ }
+ else {
+ size = __dv_data_length(dvp);
+ }
+ disp = 0;
+ }
+
+ int64_t size_src =
+ m_vars_extra[i].read_rng_src ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_src) :
+ m_vars[i].size;
+ int64_t size_dst =
+ m_vars_extra[i].read_rng_dst ?
+ cean_get_transf_size(m_vars_extra[i].read_rng_dst) :
+ size;
+ // It's supposed that "into" size must be not less
+ // than src size
+ if (size_src > size_dst) {
+ LIBOFFLOAD_ERROR(c_different_src_and_dstn_sizes,
+ size_src, size_dst);
+ exit(1);
+ }
+
+ // base address
+ void *base = reinterpret_cast<void*>(dvp->Base);
+
+ // allocate buffer
+ if (m_vars[i].direction.in) {
+ if (m_vars[i].alloc_if) {
+ // add new entry
+ if (!alloc_ptr_data(
+ ptr_data,
+ base,
+ (alloc_base != NULL) ?
+ alloc_disp : into_disp,
+ (alloc_base != NULL) ?
+ alloc_size : size,
+ alloc_disp,
+ (alloc_base != NULL) ?
+ 0 : m_vars[i].align)) {
+ return false;
+ }
+ if (ptr_data->add_reference() == 0 &&
+ ptr_data->mic_buf !=0) {
+ // add buffer to the list of buffers
+ // that are passed to dispatch call
+ m_compute_buffers.push_back(
+ ptr_data->mic_buf);
+ }
+ else {
+ // will send buffer address to device
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (!ptr_data->is_static) {
+ // need to add reference for buffer
+ m_need_runfunction = true;
+ }
+ }
+ else {
+ // use existing association from pointer table
+ if (!find_ptr_data(ptr_data, base, into_disp, size)) {
+ return false;
+ }
+
+ // need to update base in dope vector on device
+ m_vars[i].flags.sink_addr = 1;
+ }
+
+ if (ptr_data->alloc_disp != 0) {
+ m_vars[i].flags.alloc_disp = 1;
+ m_in_datalen += sizeof(alloc_disp);
+ }
+
+ if (m_vars[i].flags.sink_addr) {
+ // get buffers's address on the sink
+ if (!init_mic_address(ptr_data)) {
+ return false;
+ }
+ m_in_datalen += sizeof(ptr_data->mic_addr);
+ }
+
+ if (!ptr_data->is_static && m_vars[i].free_if) {
+ // need to decrement buffer reference on target
+ m_need_runfunction = true;
+ }
+
+ // offset to base from the beginning of the buffer
+ // memory
+ into_offset =
+ (char*) base - (char*) ptr_data->cpu_addr.start();
+
+ // copy other pointer properties to var descriptor
+ m_vars[i].mic_offset = ptr_data->mic_offset;
+ m_vars[i].flags.is_static_dstn = ptr_data->is_static;
+ }
+ else { // src_is_for_mic
+ if (!find_ptr_data(ptr_data,
+ base,
+ into_disp,
+ size,
+ false)) {
+ return false;
+ }
+ into_offset = !ptr_data ?
+ 0 :
+ (char*) base - (char*) ptr_data->cpu_addr.start();
+ }
+
+ // save pointer data
+ m_vars_extra[i].dst_data = ptr_data;
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, m_vars[i].type.src);
+ LIBOFFLOAD_ABORT;
+ }
+ // if into is used at CPU save its offset and disp
+ if (m_vars[i].direction.out) {
+ m_vars_extra[i].cpu_offset = into_offset;
+ m_vars_extra[i].cpu_disp = into_disp;
+ }
+ else {
+ if (m_vars[i].flags.is_stack_buf) {
+ into_offset = static_cast<char*>(m_vars[i].into) -
+ m_device.m_persist_list.front().cpu_stack_addr;
+ }
+ m_vars[i].offset = into_offset;
+ m_vars[i].disp = into_disp;
+ }
+ }
+
+ return true;
+}
+
+bool OffloadDescriptor::setup_misc_data(const char *name)
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_setup_misc_data);
+
+ // we can skip run functon call together with wait if offloaded
+ // region is empty and there is no user defined non-pointer IN/OUT data
+ if (m_need_runfunction) {
+ // variable descriptors are sent as input data
+ m_in_datalen += m_vars_total * sizeof(VarDesc);
+
+ // timer data is sent as a part of the output data
+ m_out_datalen += OFFLOAD_TIMER_DATALEN();
+
+ // max from input data and output data length
+ uint64_t data_len = m_in_datalen > m_out_datalen ? m_in_datalen :
+ m_out_datalen;
+
+ // Misc data has the following layout
+ // <Function Descriptor>
+ // <Function Name>
+ // <In/Out Data> (optional)
+ //
+ // We can transfer copyin/copyout data in misc/return data which can
+ // be passed to run function call if its size does not exceed
+ // COI_PIPELINE_MAX_IN_MISC_DATA_LEN. Otherwise we have to allocate
+ // buffer for it.
+
+ m_func_desc_size = sizeof(FunctionDescriptor) + strlen(name) + 1;
+ m_func_desc_size = (m_func_desc_size + 7) & ~7;
+
+ int misc_data_offset = 0;
+ int misc_data_size = 0;
+ if (data_len > 0) {
+ if (m_func_desc_size +
+ m_in_datalen <= COI_PIPELINE_MAX_IN_MISC_DATA_LEN &&
+ m_out_datalen <= COI_PIPELINE_MAX_IN_MISC_DATA_LEN) {
+ // use misc/return data for copyin/copyout
+ misc_data_offset = m_func_desc_size;
+ misc_data_size = data_len;
+ }
+ else {
+ OffloadTimer timer_buf(get_timer_data(),
+ c_offload_host_alloc_data_buffer);
+
+ // send/receive data using buffer
+ COIRESULT res = COI::BufferCreate(data_len,
+ COI_BUFFER_NORMAL,
+ 0, 0,
+ 1, &m_device.get_process(),
+ &m_inout_buf);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_create, res);
+ }
+
+ m_compute_buffers.push_back(m_inout_buf);
+ m_destroy_buffers.push_back(m_inout_buf);
+ }
+ }
+
+ // initialize function descriptor
+ m_func_desc = (FunctionDescriptor*) malloc(m_func_desc_size +
+ misc_data_size);
+ m_func_desc->console_enabled = console_enabled;
+ m_func_desc->timer_enabled =
+ timer_enabled || (offload_report_level && offload_report_enabled);
+ m_func_desc->offload_report_level = offload_report_level;
+ m_func_desc->offload_number = GET_OFFLOAD_NUMBER(get_timer_data());
+ m_func_desc->in_datalen = m_in_datalen;
+ m_func_desc->out_datalen = m_out_datalen;
+ m_func_desc->vars_num = m_vars_total;
+ m_func_desc->data_offset = misc_data_offset;
+
+ // append entry name
+ strcpy(m_func_desc->data, name);
+ }
+
+ return true;
+}
+
+bool OffloadDescriptor::wait_dependencies(
+ const void **waits,
+ int num_waits
+)
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_wait_deps);
+ bool ret = true;
+
+ for (int i = 0; i < num_waits; i++) {
+
+ OffloadDescriptor *task = m_device.find_signal(waits[i], true);
+ if (task == 0) {
+ LIBOFFLOAD_ERROR(c_offload1, m_device.get_logical_index(),
+ waits[i]);
+ LIBOFFLOAD_ABORT;
+ }
+
+ if (!task->offload_finish()) {
+ ret = false;
+ }
+
+ task->cleanup();
+ delete task;
+ }
+
+ return ret;
+}
+
+bool OffloadDescriptor::offload(
+ const char *name,
+ bool is_empty,
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int vars_total,
+ const void **waits,
+ int num_waits,
+ const void **signal,
+ int entry_id,
+ const void *stack_addr
+)
+{
+ if (signal == 0) {
+ OFFLOAD_DEBUG_TRACE_1(1,
+ GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_init_func,
+ "Offload function %s, is_empty=%d, #varDescs=%d, "
+ "#waits=%d, signal=none\n",
+ name, is_empty, vars_total, num_waits);
+ OFFLOAD_REPORT(3, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_sent_pointer_data,
+ "#Wait : %d \n", num_waits);
+ OFFLOAD_REPORT(3, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_signal,
+ "none %d\n", 0);
+ }
+ else {
+ OFFLOAD_DEBUG_TRACE_1(1,
+ GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_init_func,
+ "Offload function %s, is_empty=%d, #varDescs=%d, "
+ "#waits=%d, signal=%p\n",
+ name, is_empty, vars_total, num_waits,
+ *signal);
+
+ OFFLOAD_REPORT(3, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_signal,
+ "%d\n", signal);
+ }
+ OFFLOAD_REPORT(3, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_wait,
+ "#Wait : %d %p\n", num_waits, waits);
+
+ if (m_status != 0) {
+ m_status->result = OFFLOAD_SUCCESS;
+ m_status->device_number = m_device.get_logical_index();
+ }
+
+ m_need_runfunction = !is_empty;
+
+ // wait for dependencies to finish
+ if (!wait_dependencies(waits, num_waits)) {
+ cleanup();
+ return false;
+ }
+
+ // setup buffers
+ if (!setup_descriptors(vars, vars2, vars_total, entry_id, stack_addr)) {
+ cleanup();
+ return false;
+ }
+
+ // initiate send for pointers. Want to do it as early as possible.
+ if (!send_pointer_data(signal != 0)) {
+ cleanup();
+ return false;
+ }
+
+ // setup misc data for run function
+ if (!setup_misc_data(name)) {
+ cleanup();
+ return false;
+ }
+
+ // gather copyin data into buffer
+ if (!gather_copyin_data()) {
+ cleanup();
+ return false;
+ }
+
+ // Start the computation
+ if (!compute()) {
+ cleanup();
+ return false;
+ }
+
+ // initiate receive for pointers
+ if (!receive_pointer_data(signal != 0)) {
+ cleanup();
+ return false;
+ }
+
+ // if there is a signal save descriptor for the later use.
+ if (signal != 0) {
+ m_device.add_signal(*signal, this);
+ return true;
+ }
+
+ // wait for the offload to finish.
+ if (!offload_finish()) {
+ cleanup();
+ return false;
+ }
+
+ cleanup();
+ return true;
+}
+
+bool OffloadDescriptor::offload_finish()
+{
+ COIRESULT res;
+
+ // wait for compute dependencies to become signaled
+ if (m_in_deps_total > 0) {
+ OffloadTimer timer(get_timer_data(), c_offload_host_wait_compute);
+
+ if (__offload_active_wait) {
+ // keep CPU busy
+ do {
+ res = COI::EventWait(m_in_deps_total, m_in_deps, 0, 1, 0, 0);
+ }
+ while (res == COI_TIME_OUT_REACHED);
+ }
+ else {
+ res = COI::EventWait(m_in_deps_total, m_in_deps, -1, 1, 0, 0);
+ }
+
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_event_wait, res);
+ }
+ }
+
+ // scatter copyout data received from target
+ if (!scatter_copyout_data()) {
+ return false;
+ }
+ // wait for receive dependencies to become signaled
+ if (m_out_deps_total > 0) {
+ OffloadTimer timer(get_timer_data(), c_offload_host_wait_buffers_reads);
+
+ if (__offload_active_wait) {
+ // keep CPU busy
+ do {
+ res = COI::EventWait(m_out_deps_total, m_out_deps, 0, 1, 0, 0);
+ }
+ while (res == COI_TIME_OUT_REACHED);
+ }
+ else {
+ res = COI::EventWait(m_out_deps_total, m_out_deps, -1, 1, 0, 0);
+ }
+
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_event_wait, res);
+ }
+ }
+
+ // destroy buffers
+ {
+ OffloadTimer timer(get_timer_data(), c_offload_host_destroy_buffers);
+
+ for (BufferList::const_iterator it = m_destroy_buffers.begin();
+ it != m_destroy_buffers.end(); it++) {
+ res = COI::BufferDestroy(*it);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_destroy, res);
+ }
+ }
+ }
+
+ return true;
+}
+
+void OffloadDescriptor::cleanup()
+{
+ // release device in orsl
+ ORSL::release(m_device.get_logical_index());
+
+ OFFLOAD_TIMER_STOP(get_timer_data(), c_offload_host_total_offload);
+
+ // report stuff
+ Offload_Report_Epilog(get_timer_data());
+}
+
+bool OffloadDescriptor::is_signaled()
+{
+ bool signaled = true;
+ COIRESULT res;
+
+ // check compute and receive dependencies
+ if (m_in_deps_total > 0) {
+ res = COI::EventWait(m_in_deps_total, m_in_deps, 0, 1, 0, 0);
+ signaled = signaled && (res == COI_SUCCESS);
+ }
+ if (m_out_deps_total > 0) {
+ res = COI::EventWait(m_out_deps_total, m_out_deps, 0, 1, 0, 0);
+ signaled = signaled && (res == COI_SUCCESS);
+ }
+
+ return signaled;
+}
+
+// Send pointer data if source or destination or both of them are
+// noncontiguous. There is guarantee that length of destination enough for
+// transferred data.
+bool OffloadDescriptor::send_noncontiguous_pointer_data(
+ int i,
+ PtrData* src_data,
+ PtrData* dst_data,
+ COIEVENT *event
+ )
+{
+ int64_t offset_src, offset_dst;
+ int64_t length_src, length_dst;
+ int64_t length_src_cur, length_dst_cur;
+ int64_t send_size, data_sent = 0;
+ COIRESULT res;
+ bool dst_is_empty = true;
+ bool src_is_empty = true;
+
+ // Set length_src and length_dst
+ length_src = (m_vars_extra[i].read_rng_src) ?
+ m_vars_extra[i].read_rng_src->range_size : m_vars[i].size;
+ length_dst = !m_vars[i].into ? length_src :
+ (m_vars_extra[i].read_rng_dst) ?
+ m_vars_extra[i].read_rng_dst->range_size : m_vars[i].size;
+ send_size = (length_src < length_dst) ? length_src : length_dst;
+
+ // consequently get contiguous ranges,
+ // define corresponded destination offset and send data
+ do {
+ if (src_is_empty) {
+ if (m_vars_extra[i].read_rng_src) {
+ if (!get_next_range(m_vars_extra[i].read_rng_src,
+ &offset_src)) {
+ // source ranges are over - nothing to send
+ break;
+ }
+ }
+ else if (data_sent == 0) {
+ offset_src = m_vars_extra[i].cpu_disp;
+ }
+ else {
+ break;
+ }
+ length_src_cur = length_src;
+ }
+ else {
+ // if source is contiguous or its contiguous range is greater
+ // than destination one
+ offset_src += send_size;
+ }
+ length_src_cur -= send_size;
+ src_is_empty = length_src_cur == 0;
+
+ if (dst_is_empty) {
+ if (m_vars[i].into) {
+ if (m_vars_extra[i].read_rng_dst) {
+ if (!get_next_range(m_vars_extra[i].read_rng_dst,
+ &offset_dst)) {
+ // destination ranges are over
+ LIBOFFLOAD_ERROR(c_destination_is_over);
+ return false;
+ }
+ }
+ // into is contiguous.
+ else {
+ offset_dst = m_vars[i].disp;
+ }
+ length_dst_cur = length_dst;
+ }
+ // same as source
+ else {
+ offset_dst = offset_src;
+ length_dst_cur = length_src;
+ }
+ }
+ else {
+ // if destination is contiguous or its contiguous range is greater
+ // than source one
+ offset_dst += send_size;
+ }
+ length_dst_cur -= send_size;
+ dst_is_empty = length_dst_cur == 0;
+
+ if (src_data != 0 && src_data->cpu_buf != 0) {
+ res = COI::BufferCopy(
+ dst_data->mic_buf,
+ src_data->cpu_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + offset_dst,
+ m_vars_extra[i].cpu_offset + offset_src,
+ send_size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ char *base = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+
+ res = COI::BufferWrite(
+ dst_data->mic_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + offset_dst,
+ base + offset_src,
+ send_size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ }
+ data_sent += length_src;
+ }
+ while (true);
+ return true;
+}
+
+bool OffloadDescriptor::send_pointer_data(bool is_async)
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_send_pointers);
+
+ uint64_t ptr_sent = 0;
+ COIRESULT res;
+
+ // Initiate send for pointer data
+ for (int i = 0; i < m_vars_total; i++) {
+ switch (m_vars[i].type.dst) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.in &&
+ m_vars[i].flags.is_static_dstn) {
+ COIEVENT *event =
+ (is_async ||
+ m_vars[i].size >= __offload_use_async_buffer_write) ?
+ &m_in_deps[m_in_deps_total++] : 0;
+ PtrData* dst_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ PtrData* src_data =
+ VAR_TYPE_IS_PTR(m_vars[i].type.src) ||
+ VAR_TYPE_IS_SCALAR(m_vars[i].type.src) &&
+ m_vars[i].flags.is_static ?
+ m_vars_extra[i].src_data : 0;
+
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ if (!send_noncontiguous_pointer_data(
+ i, src_data, dst_data, event)) {
+ return false;
+ }
+ }
+ else if (src_data != 0 && src_data->cpu_buf != 0) {
+ res = COI::BufferCopy(
+ dst_data->mic_buf,
+ src_data->cpu_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ char *base = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+ res = COI::BufferWrite(
+ dst_data->mic_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ base + m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ }
+ ptr_sent += m_vars[i].size;
+ }
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ if (m_vars[i].direction.in && m_vars[i].size > 0) {
+ COIEVENT *event =
+ (is_async ||
+ m_vars[i].size >= __offload_use_async_buffer_write) ?
+ &m_in_deps[m_in_deps_total++] : 0;
+ PtrData* dst_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ PtrData* src_data =
+ VAR_TYPE_IS_PTR(m_vars[i].type.src) ||
+ VAR_TYPE_IS_SCALAR(m_vars[i].type.src) &&
+ m_vars[i].flags.is_static ?
+ m_vars_extra[i].src_data : 0;
+
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ send_noncontiguous_pointer_data(
+ i, src_data, dst_data, event);
+ }
+ else if (src_data != 0 && src_data->cpu_buf != 0) {
+ res = COI::BufferCopy(
+ dst_data->mic_buf,
+ src_data->cpu_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ char *base = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+ res = COI::BufferWrite(
+ dst_data->mic_buf,
+ m_vars[i].mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ base + m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ }
+
+ ptr_sent += m_vars[i].size;
+ }
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ if (m_vars[i].direction.in &&
+ m_vars[i].size > 0) {
+ PtrData *ptr_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ PtrData* src_data = m_vars_extra[i].src_data;
+
+ COIEVENT *event =
+ (is_async ||
+ m_vars[i].size >= __offload_use_async_buffer_write) ?
+ &m_in_deps[m_in_deps_total++] : 0;
+
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ send_noncontiguous_pointer_data(
+ i, src_data, ptr_data, event);
+ }
+ else if (src_data && src_data->cpu_buf != 0) {
+ res = COI::BufferCopy(
+ ptr_data->mic_buf,
+ src_data->cpu_buf,
+ m_vars[i].offset + ptr_data->mic_offset -
+ ptr_data->alloc_disp +
+ m_vars[i].disp,
+ m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ char *base = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+ res = COI::BufferWrite(
+ ptr_data->mic_buf,
+ ptr_data->mic_offset - ptr_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ base + m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ }
+ ptr_sent += m_vars[i].size;
+ }
+ break;
+
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ if (m_vars[i].direction.in &&
+ m_vars[i].size > 0) {
+ PtrData *dst_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ PtrData* src_data =
+ (VAR_TYPE_IS_PTR(m_vars[i].type.src) ||
+ VAR_TYPE_IS_DV_DATA(m_vars[i].type.src) ||
+ VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.src) ||
+ VAR_TYPE_IS_SCALAR(m_vars[i].type.src) &&
+ m_vars[i].flags.is_static) ?
+ m_vars_extra[i].src_data : 0;
+ COIEVENT *event =
+ (is_async ||
+ m_vars[i].size >= __offload_use_async_buffer_write) ?
+ &m_in_deps[m_in_deps_total++] : 0;
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ send_noncontiguous_pointer_data(
+ i, src_data, dst_data, event);
+ }
+ else if (src_data && src_data->cpu_buf != 0) {
+ res = COI::BufferCopy(
+ dst_data->mic_buf,
+ src_data->cpu_buf,
+ m_vars[i].offset - dst_data->alloc_disp +
+ dst_data->mic_offset +
+ m_vars[i].disp,
+ m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ char *base = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+ res = COI::BufferWrite(
+ dst_data->mic_buf,
+ dst_data->mic_offset - dst_data->alloc_disp +
+ m_vars[i].offset + m_vars[i].disp,
+ base + m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ 0, 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_write, res);
+ }
+ }
+
+ ptr_sent += m_vars[i].size;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ // alloc field isn't used at target.
+ // We can reuse it for offset of array pointers.
+ if (m_vars_extra[i].is_arr_ptr_el) {
+ m_vars[i].ptr_arr_offset = m_vars_extra[i].ptr_arr_offset;
+ }
+ }
+
+ if (m_status) {
+ m_status->data_sent += ptr_sent;
+ }
+
+ OFFLOAD_TIMER_HOST_SDATA(get_timer_data(), ptr_sent);
+ OFFLOAD_DEBUG_TRACE_1(1, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_sent_pointer_data,
+ "Total pointer data sent to target: [%lld] bytes\n",
+ ptr_sent);
+
+ return true;
+}
+
+bool OffloadDescriptor::gather_copyin_data()
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_gather_inputs);
+
+ if (m_need_runfunction && m_in_datalen > 0) {
+ COIMAPINSTANCE map_inst;
+ char *data;
+
+ // init marshaller
+ if (m_inout_buf != 0) {
+ OffloadTimer timer_map(get_timer_data(),
+ c_offload_host_map_in_data_buffer);
+
+ COIRESULT res = COI::BufferMap(m_inout_buf, 0, m_in_datalen,
+ COI_MAP_WRITE_ENTIRE_BUFFER,
+ 0, 0, 0, &map_inst,
+ reinterpret_cast<void**>(&data));
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_map, res);
+ }
+ }
+ else {
+ data = (char*) m_func_desc + m_func_desc->data_offset;
+ }
+
+ // send variable descriptors
+ memcpy(data, m_vars, m_vars_total * sizeof(VarDesc));
+ data += m_vars_total * sizeof(VarDesc);
+
+ // init marshaller
+ m_in.init_buffer(data, m_in_datalen);
+
+ // Gather copy data into buffer
+ for (int i = 0; i < m_vars_total; i++) {
+ bool src_is_for_mic = (m_vars[i].direction.out ||
+ m_vars[i].into == NULL);
+ PtrData* ptr_data = src_is_for_mic ?
+ m_vars_extra[i].src_data :
+ m_vars_extra[i].dst_data;
+ if (m_vars[i].flags.alloc_disp) {
+ m_in.send_data(&ptr_data->alloc_disp,
+ sizeof(ptr_data->alloc_disp));
+ }
+
+ // send sink address to the target
+ if (m_vars[i].flags.sink_addr) {
+ m_in.send_data(&ptr_data->mic_addr,
+ sizeof(ptr_data->mic_addr));
+ }
+
+ switch (m_vars[i].type.dst) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.in &&
+ !m_vars[i].flags.is_static_dstn) {
+
+ char *ptr = offload_get_src_base(m_vars[i].ptr,
+ m_vars[i].type.src);
+ if (m_vars[i].type.dst == c_cean_var) {
+ // offset and length are derived from the array
+ // descriptor
+ int64_t size = m_vars[i].size;
+ int64_t disp = m_vars[i].disp;
+ m_in.send_data(reinterpret_cast<char*>(&size),
+ sizeof(int64_t));
+ m_in.send_data(reinterpret_cast<char*>(&disp),
+ sizeof(int64_t));
+ }
+
+ m_in.send_data(ptr + m_vars_extra[i].cpu_disp,
+ m_vars[i].size);
+ }
+ break;
+
+ case c_dv:
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ // send dope vector excluding base
+ char *ptr = static_cast<char*>(m_vars[i].ptr);
+ m_in.send_data(ptr + sizeof(uint64_t),
+ m_vars[i].size - sizeof(uint64_t));
+ }
+ break;
+
+ case c_data_ptr:
+ // send to target addresses of obsolete
+ // stacks to be released
+ if (m_vars[i].flags.is_stack_buf &&
+ !m_vars[i].direction.bits &&
+ m_vars[i].alloc_if &&
+ m_vars[i].size != 0) {
+ for (PtrDataList::iterator it =
+ m_destroy_stack.begin();
+ it != m_destroy_stack.end(); it++) {
+ PtrData * ptr_data = *it;
+ m_in.send_data(&(ptr_data->mic_addr),
+ sizeof(ptr_data->mic_addr));
+ }
+ }
+ break;
+ case c_func_ptr:
+ if (m_vars[i].direction.in) {
+ m_in.send_func_ptr(*((const void**) m_vars[i].ptr));
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (m_status) {
+ m_status->data_sent += m_in.get_tfr_size();
+ }
+
+ if (m_func_desc->data_offset == 0) {
+ OffloadTimer timer_unmap(get_timer_data(),
+ c_offload_host_unmap_in_data_buffer);
+ COIRESULT res = COI::BufferUnmap(map_inst, 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_unmap, res);
+ }
+ }
+ }
+
+ OFFLOAD_TIMER_HOST_SDATA(get_timer_data(), m_in.get_tfr_size());
+ OFFLOAD_DEBUG_TRACE_1(1,
+ GET_OFFLOAD_NUMBER(get_timer_data()), c_offload_copyin_data,
+ "Total copyin data sent to target: [%lld] bytes\n",
+ m_in.get_tfr_size());
+
+ return true;
+}
+
+bool OffloadDescriptor::compute()
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_start_compute);
+
+ if (m_need_runfunction) {
+ OFFLOAD_DEBUG_TRACE_1(2, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_compute, "Compute task on MIC\n");
+
+ void* misc = m_func_desc;
+ int misc_len = m_func_desc_size;
+ void* ret = 0;
+ int ret_len = 0;
+
+ if (m_func_desc->data_offset != 0) {
+ misc_len += m_in_datalen;
+
+ if (m_out_datalen > 0) {
+ ret = (char*) m_func_desc + m_func_desc->data_offset;
+ ret_len = m_out_datalen;
+ }
+ }
+
+ // dispatch task
+ COIRESULT res;
+ COIEVENT event;
+ res = m_device.compute(m_compute_buffers,
+ misc, misc_len,
+ ret, ret_len,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ &event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_pipeline_run_func, res);
+ }
+
+ m_in_deps_total = 1;
+ m_in_deps[0] = event;
+ }
+
+ return true;
+}
+
+// receive pointer data if source or destination or both of them are
+// noncontiguous. There is guarantee that length of destination enough for
+// transferred data.
+bool OffloadDescriptor::receive_noncontiguous_pointer_data(
+ int i,
+ char* base,
+ COIBUFFER dst_buf,
+ COIEVENT *event
+)
+{
+ int64_t offset_src, offset_dst;
+ int64_t length_src, length_dst;
+ int64_t length_src_cur, length_dst_cur;
+ int64_t receive_size, data_received = 0;
+ COIRESULT res;
+ bool dst_is_empty = true;
+ bool src_is_empty = true;
+
+ // Set length_src and length_dst
+ length_src = (m_vars_extra[i].read_rng_src) ?
+ m_vars_extra[i].read_rng_src->range_size : m_vars[i].size;
+ length_dst = !m_vars[i].into ? length_src :
+ (m_vars_extra[i].read_rng_dst) ?
+ m_vars_extra[i].read_rng_dst->range_size : m_vars[i].size;
+ receive_size = (length_src < length_dst) ? length_src : length_dst;
+
+ // consequently get contiguous ranges,
+ // define corresponded destination offset and receive data
+ do {
+ // get sorce offset
+ if (src_is_empty) {
+ if (m_vars_extra[i].read_rng_src) {
+ if (!get_next_range(m_vars_extra[i].read_rng_src,
+ &offset_src)) {
+ // source ranges are over - nothing to send
+ break;
+ }
+ }
+ else if (data_received == 0) {
+ offset_src = 0;
+ }
+ else {
+ break;
+ }
+ length_src_cur = length_src;
+ }
+ else {
+ // if source is contiguous or its contiguous range is greater
+ // than destination one
+ offset_src += receive_size;
+ }
+ length_src_cur -= receive_size;
+ src_is_empty = length_src_cur == 0;
+
+ // get destination offset
+ if (dst_is_empty) {
+ if (m_vars[i].into) {
+ if (m_vars_extra[i].read_rng_dst) {
+ if (!get_next_range(m_vars_extra[i].read_rng_dst,
+ &offset_dst)) {
+ // destination ranges are over
+ LIBOFFLOAD_ERROR(c_destination_is_over);
+ return false;
+ }
+ }
+ // destination is contiguous.
+ else {
+ offset_dst = m_vars_extra[i].cpu_disp;
+ }
+ length_dst_cur = length_dst;
+ }
+ // same as source
+ else {
+ offset_dst = offset_src;
+ length_dst_cur = length_src;
+ }
+ }
+ else {
+ // if destination is contiguous or its contiguous range is greater
+ // than source one
+ offset_dst += receive_size;
+ }
+ length_dst_cur -= receive_size;
+ dst_is_empty = length_dst_cur == 0;
+
+ if (dst_buf != 0) {
+ res = COI::BufferCopy(
+ dst_buf,
+ m_vars_extra[i].src_data->mic_buf,
+ m_vars_extra[i].cpu_offset + offset_dst,
+ m_vars[i].offset + offset_src +
+ m_vars[i].mic_offset -
+ m_vars_extra[i].src_data->alloc_disp,
+ receive_size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ res = COI::BufferRead(
+ m_vars_extra[i].src_data->mic_buf,
+ m_vars[i].offset + offset_src +
+ m_vars[i].mic_offset -
+ m_vars_extra[i].src_data->alloc_disp,
+ base + offset_dst,
+ receive_size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_read, res);
+ }
+ }
+ data_received += receive_size;
+ }
+ while (true);
+ return true;
+}
+
+bool OffloadDescriptor::receive_pointer_data(bool is_async)
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_start_buffers_reads);
+
+ uint64_t ptr_received = 0;
+ COIRESULT res;
+
+ for (int i = 0; i < m_vars_total; i++) {
+ switch (m_vars[i].type.src) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.out &&
+ m_vars[i].flags.is_static) {
+ COIEVENT *event =
+ (is_async ||
+ m_in_deps_total > 0 ||
+ m_vars[i].size >= __offload_use_async_buffer_read) ?
+ &m_out_deps[m_out_deps_total++] : 0;
+ PtrData *ptr_data = NULL;
+ COIBUFFER dst_buf = NULL; // buffer at host
+ char *base;
+
+ if (VAR_TYPE_IS_PTR(m_vars[i].type.dst)) {
+ ptr_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ }
+ else if (VAR_TYPE_IS_SCALAR(m_vars[i].type.dst)) {
+ if (m_vars[i].flags.is_static_dstn) {
+ ptr_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ }
+ }
+ dst_buf = ptr_data ? ptr_data->cpu_buf : NULL;
+ if (dst_buf == NULL) {
+ base = offload_get_src_base(
+ m_vars[i].into ?
+ static_cast<char*>(m_vars[i].into) :
+ static_cast<char*>(m_vars[i].ptr),
+ m_vars[i].type.dst);
+ }
+
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ receive_noncontiguous_pointer_data(
+ i, base, dst_buf, event);
+ }
+ else if (dst_buf != 0) {
+ res = COI::BufferCopy(
+ dst_buf,
+ m_vars_extra[i].src_data->mic_buf,
+ m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].offset + m_vars[i].disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ res = COI::BufferRead(
+ m_vars_extra[i].src_data->mic_buf,
+ m_vars[i].offset + m_vars[i].disp,
+ base + m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_read, res);
+ }
+ }
+ ptr_received += m_vars[i].size;
+ }
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ case c_dv_ptr: {
+ COIBUFFER dst_buf = NULL; // buffer on host
+ if (m_vars[i].direction.out && m_vars[i].size > 0) {
+ COIEVENT *event =
+ (is_async ||
+ m_in_deps_total > 0 ||
+ m_vars[i].size >= __offload_use_async_buffer_read) ?
+ &m_out_deps[m_out_deps_total++] : 0;
+
+ uint64_t dst_offset = 0;
+ char *base = static_cast<char*>(m_vars[i].ptr);
+
+ if (VAR_TYPE_IS_PTR(m_vars[i].type.dst)) {
+ PtrData *ptr_data = m_vars[i].into ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ dst_buf = ptr_data ? ptr_data->cpu_buf : NULL;
+ if (dst_buf == NULL) {
+ base = m_vars[i].into ?
+ *static_cast<char**>(m_vars[i].into) :
+ *static_cast<char**>(m_vars[i].ptr);
+ }
+ dst_offset = m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp;
+ }
+ else if (VAR_TYPE_IS_SCALAR(m_vars[i].type.dst)) {
+ if (m_vars[i].flags.is_static_dstn) {
+ dst_buf = m_vars[i].into ?
+ m_vars_extra[i].dst_data->cpu_buf :
+ m_vars_extra[i].src_data->cpu_buf;
+ }
+ if (dst_buf == NULL) {
+ base = offload_get_src_base(
+ m_vars[i].into ?
+ static_cast<char*>(m_vars[i].into) :
+ static_cast<char*>(m_vars[i].ptr),
+ m_vars[i].type.dst);
+ }
+ dst_offset = m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp;
+ }
+ else if (VAR_TYPE_IS_DV_DATA(m_vars[i].type.dst) ||
+ VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.dst)) {
+ PtrData *ptr_data = m_vars[i].into != 0 ?
+ m_vars_extra[i].dst_data :
+ m_vars_extra[i].src_data;
+ dst_buf = ptr_data != 0 ? ptr_data->cpu_buf : 0;
+ if (dst_buf == NULL) {
+ base = offload_get_src_base(
+ m_vars[i].into ?
+ static_cast<char*>(m_vars[i].into) :
+ static_cast<char*>(m_vars[i].ptr),
+ m_vars[i].type.dst);
+
+ }
+ dst_offset = m_vars_extra[i].cpu_offset +
+ m_vars_extra[i].cpu_disp;
+ }
+
+ if (m_vars[i].flags.is_noncont_src ||
+ m_vars[i].flags.is_noncont_dst) {
+ receive_noncontiguous_pointer_data(
+ i, base, dst_buf, event);
+ }
+ else if (dst_buf != 0) {
+ res = COI::BufferCopy(
+ dst_buf,
+ m_vars_extra[i].src_data->mic_buf,
+ dst_offset,
+ m_vars[i].offset + m_vars[i].disp +
+ m_vars[i].mic_offset -
+ m_vars_extra[i].src_data->alloc_disp,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_copy, res);
+ }
+ }
+ else {
+ res = COI::BufferRead(
+ m_vars_extra[i].src_data->mic_buf,
+ m_vars[i].offset + m_vars[i].disp +
+ m_vars[i].mic_offset -
+ m_vars_extra[i].src_data->alloc_disp,
+ base + dst_offset,
+ m_vars[i].size,
+ COI_COPY_UNSPECIFIED,
+ m_in_deps_total,
+ m_in_deps_total > 0 ? m_in_deps : 0,
+ event);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_read, res);
+ }
+ }
+ ptr_received += m_vars[i].size;
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ // destroy buffers for obsolete stacks
+ if (m_destroy_stack.size() != 0) {
+ for (PtrDataList::iterator it = m_destroy_stack.begin();
+ it != m_destroy_stack.end(); it++) {
+ PtrData *ptr_data = *it;
+ m_destroy_buffers.push_back(ptr_data->mic_buf);
+ OFFLOAD_TRACE(3, "Removing stack buffer with addr %p\n",
+ ptr_data->mic_addr);
+ }
+ m_destroy_stack.clear();
+ }
+ if (m_vars[i].free_if) {
+ // remove association for automatic variables
+ if (m_is_openmp && !m_vars[i].flags.is_static &&
+ (m_vars[i].type.src == c_data ||
+ m_vars[i].type.src == c_void_ptr ||
+ m_vars[i].type.src == c_cean_var)) {
+ AutoData *auto_data = m_vars_extra[i].auto_data;
+ if (auto_data != 0 && auto_data->remove_reference() == 0) {
+ m_device.remove_auto_data(auto_data->cpu_addr.start());
+ }
+ }
+
+ // destroy buffers
+ if (m_vars[i].direction.out || m_vars[i].into == NULL) {
+ if (!VAR_TYPE_IS_PTR(m_vars[i].type.src) &&
+ !VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.src) &&
+ !VAR_TYPE_IS_DV_DATA(m_vars[i].type.src)) {
+ continue;
+ }
+
+ PtrData *ptr_data = m_vars_extra[i].src_data;
+ if (ptr_data->remove_reference() == 0) {
+ // destroy buffers
+ if (ptr_data->cpu_buf != 0) {
+ m_destroy_buffers.push_back(ptr_data->cpu_buf);
+ }
+ if (ptr_data->mic_buf != 0) {
+ m_destroy_buffers.push_back(ptr_data->mic_buf);
+ }
+ OFFLOAD_TRACE(3, "Removing association for addr %p\n",
+ ptr_data->cpu_addr.start());
+
+ // remove association from map
+ m_device.remove_ptr_data(ptr_data->cpu_addr.start());
+ }
+ }
+ else if (VAR_TYPE_IS_PTR(m_vars[i].type.dst) ||
+ VAR_TYPE_IS_DV_DATA_SLICE(m_vars[i].type.dst) ||
+ VAR_TYPE_IS_DV_DATA(m_vars[i].type.dst)) {
+ PtrData *ptr_data = m_vars_extra[i].dst_data;
+ if (ptr_data->remove_reference() == 0) {
+ // destroy buffers
+ if (ptr_data->cpu_buf != 0) {
+ m_destroy_buffers.push_back(ptr_data->cpu_buf);
+ }
+ if (ptr_data->mic_buf != 0) {
+ m_destroy_buffers.push_back(ptr_data->mic_buf);
+ }
+ OFFLOAD_TRACE(3, "Removing association for addr %p\n",
+ ptr_data->cpu_addr.start());
+
+ // remove association from map
+ m_device.remove_ptr_data(ptr_data->cpu_addr.start());
+ }
+ }
+ }
+ }
+
+ if (m_status) {
+ m_status->data_received += ptr_received;
+ }
+
+ OFFLOAD_TIMER_HOST_RDATA(get_timer_data(), ptr_received);
+ OFFLOAD_DEBUG_TRACE_1(1, GET_OFFLOAD_NUMBER(get_timer_data()),
+ c_offload_received_pointer_data,
+ "Total pointer data received from target: [%lld] bytes\n",
+ ptr_received);
+
+ return true;
+}
+
+bool OffloadDescriptor::scatter_copyout_data()
+{
+ OffloadTimer timer(get_timer_data(), c_offload_host_scatter_outputs);
+
+ if (m_need_runfunction && m_out_datalen > 0) {
+
+ // total size that need to be transferred from target to host
+ COIMAPINSTANCE map_inst;
+ COIRESULT res;
+ char *data;
+
+ // output data buffer
+ if (m_func_desc->data_offset == 0) {
+ OffloadTimer timer_map(get_timer_data(),
+ c_offload_host_map_out_data_buffer);
+
+ COIRESULT res = COI::BufferMap(m_inout_buf, 0, m_out_datalen,
+ COI_MAP_READ_ONLY, 0, 0, 0,
+ &map_inst,
+ reinterpret_cast<void**>(&data));
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_map, res);
+ }
+ }
+ else {
+ data = (char*) m_func_desc + m_func_desc->data_offset;
+ }
+
+ // get timing data
+ OFFLOAD_TIMER_TARGET_DATA(get_timer_data(), data);
+ data += OFFLOAD_TIMER_DATALEN();
+
+ // initialize output marshaller
+ m_out.init_buffer(data, m_out_datalen);
+
+ for (int i = 0; i < m_vars_total; i++) {
+ switch (m_vars[i].type.src) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.out &&
+ !m_vars[i].flags.is_static) {
+
+ if (m_vars[i].into) {
+ char *ptr = offload_get_src_base(
+ static_cast<char*>(m_vars[i].into),
+ m_vars[i].type.dst);
+ m_out.receive_data(ptr + m_vars_extra[i].cpu_disp,
+ m_vars[i].size);
+ }
+ else {
+ m_out.receive_data(
+ static_cast<char*>(m_vars[i].ptr) +
+ m_vars_extra[i].cpu_disp,
+ m_vars[i].size);
+ }
+ }
+ break;
+
+ case c_func_ptr:
+ if (m_vars[i].direction.out) {
+ m_out.receive_func_ptr((const void**) m_vars[i].ptr);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (m_status) {
+ m_status->data_received += m_out.get_tfr_size();
+ }
+
+ if (m_func_desc->data_offset == 0) {
+ OffloadTimer timer_unmap(get_timer_data(),
+ c_offload_host_unmap_out_data_buffer);
+
+ COIRESULT res = COI::BufferUnmap(map_inst, 0, 0, 0);
+ if (res != COI_SUCCESS) {
+ if (m_status != 0) {
+ m_status->result = translate_coi_error(res);
+ return false;
+ }
+ report_coi_error(c_buf_unmap, res);
+ }
+ }
+ }
+
+ OFFLOAD_TIMER_HOST_RDATA(get_timer_data(), m_out.get_tfr_size());
+ OFFLOAD_TRACE(1, "Total copyout data received from target: [%lld] bytes\n",
+ m_out.get_tfr_size());
+
+ return true;
+}
+
+void get_arr_desc_numbers(
+ const arr_desc *ap,
+ int64_t el_size,
+ int64_t &offset,
+ int64_t &size,
+ int &el_number,
+ CeanReadRanges* &ptr_ranges
+)
+{
+ if (is_arr_desc_contiguous(ap)) {
+ ptr_ranges = NULL;
+ __arr_data_offset_and_length(ap, offset, size);
+ el_number = size / el_size;
+ }
+ else {
+ ptr_ranges = init_read_ranges_arr_desc(ap);
+ el_number = (ptr_ranges->range_size / el_size) *
+ ptr_ranges->range_max_number;
+ size = ptr_ranges->range_size;
+ }
+}
+
+arr_desc * make_arr_desc(
+ void* ptr_val,
+ int64_t extent_start_val,
+ int64_t extent_elements_val,
+ int64_t size
+)
+{
+ arr_desc *res;
+ res = (arr_desc *)malloc(sizeof(arr_desc));
+ res->base = reinterpret_cast<int64_t>(ptr_val);
+ res->rank = 1;
+ res->dim[0].size = size;
+ res->dim[0].lindex = 0;
+ res->dim[0].lower = extent_start_val;
+ res->dim[0].upper = extent_elements_val + extent_start_val - 1;
+ res->dim[0].stride = 1;
+ return res;
+}
+
+bool OffloadDescriptor::gen_var_descs_for_pointer_array(int i)
+{
+ int pointers_number;
+ int tmp_val;
+ int new_index = m_vars_total;
+ const arr_desc *ap;
+ const VarDesc3 *vd3 = static_cast<const VarDesc3*>(m_vars[i].ptr);
+ int flags = vd3->array_fields;
+ bool src_is_for_mic = (m_vars[i].direction.out ||
+ m_vars[i].into == NULL);
+
+ ReadArrElements<void *> ptr;
+ ReadArrElements<void *> into;
+ ReadArrElements<int64_t> ext_start;
+ ReadArrElements<int64_t> ext_elements;
+ ReadArrElements<int64_t> align;
+ ReadArrElements<int64_t> alloc_if;
+ ReadArrElements<int64_t> free_if;
+ ReadArrElements<int64_t> into_start;
+ ReadArrElements<int64_t> into_elem;
+ ReadArrElements<int64_t> alloc_start;
+ ReadArrElements<int64_t> alloc_elem;
+
+
+ ap = static_cast<const arr_desc*>(vd3->ptr_array);
+
+ // "pointers_number" for total number of transferred pointers.
+ // For each of them we create new var_desc and put it at the bottom
+ // of the var_desc's array
+ get_arr_desc_numbers(ap, sizeof(void *), ptr.offset, ptr.size,
+ pointers_number, ptr.ranges);
+ ptr.base = reinterpret_cast<char*>(ap->base);
+
+ // 2. prepare memory for new var_descs
+ m_vars_total += pointers_number;
+ m_vars = (VarDesc*)realloc(m_vars, m_vars_total * sizeof(VarDesc));
+ m_vars_extra =
+ (VarExtra*)realloc(m_vars_extra, m_vars_total * sizeof(VarExtra));
+ m_in_deps =
+ (COIEVENT*)realloc(m_in_deps, sizeof(COIEVENT) * (m_vars_total + 1));
+ m_out_deps =
+ (COIEVENT*)realloc(m_out_deps, sizeof(COIEVENT) * m_vars_total);
+
+ // 3. Prepare for reading new var_desc's fields
+ // EXTENT START
+ if ((flags & (1<<flag_extent_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->extent_start);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, ext_start.offset,
+ ext_start.size, tmp_val, ext_start.ranges);
+ ext_start.base = reinterpret_cast<char*>(ap->base);
+ ext_start.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "extent start");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_extent_start_is_scalar)) != 0) {
+ ext_start.val = (int64_t)vd3->extent_start;
+ }
+ else {
+ ext_start.val = 0;
+ }
+
+ // EXTENT ELEMENTS NUMBER
+ if ((flags & (1<<flag_extent_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->extent_elements);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size,
+ ext_elements.offset, ext_elements.size,
+ tmp_val, ext_elements.ranges);
+ ext_elements.base = reinterpret_cast<char*>(ap->base);
+ ext_elements.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "extent elements");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_extent_elements_is_scalar)) != 0) {
+ ext_elements.val = (int64_t)vd3->extent_elements;
+ }
+ else {
+ ext_elements.val = m_vars[i].count;
+ }
+
+ // ALLOC_IF
+ if ((flags & (1<<flag_alloc_if_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_if_array);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, alloc_if.offset,
+ alloc_if.size, tmp_val, alloc_if.ranges);
+ alloc_if.base = reinterpret_cast<char*>(ap->base);
+ alloc_if.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "alloc_if");
+ return false;
+ }
+ }
+ else {
+ alloc_if.val = m_vars[i].count;
+ }
+
+ // FREE_IF
+ if ((flags & (1<<flag_free_if_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->free_if_array);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, free_if.offset,
+ free_if.size, tmp_val, free_if.ranges);
+ free_if.base = reinterpret_cast<char*>(ap->base);
+ free_if.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "free_if");
+ return false;
+ }
+ }
+ else {
+ free_if.val = m_vars[i].count;
+ }
+
+ // ALIGN
+
+ if ((flags & (1<<flag_align_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->align_array);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, align.offset,
+ align.size, tmp_val, align.ranges);
+ align.base = reinterpret_cast<char*>(ap->base);
+ align.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "align");
+ return false;
+ }
+ }
+ else {
+ align.val = m_vars[i].align;
+ }
+
+ // 3.1 INTO
+
+ if (m_vars[i].into) {
+ ap = static_cast<const arr_desc*>(m_vars[i].into);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, into.offset,
+ into.size, tmp_val, into.ranges);
+ into.base = reinterpret_cast<char*>(ap->base);
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into");
+ return false;
+ }
+ }
+
+ // 3.2 INTO_START
+
+ if ((flags & (1<<flag_into_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->into_start);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, into_start.offset,
+ into_start.size, tmp_val, into_start.ranges);
+ into_start.base = reinterpret_cast<char*>(ap->base);
+ into_start.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into_extent start");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_into_start_is_scalar)) != 0) {
+ into_start.val = (int64_t)vd3->into_start;
+ }
+ else {
+ into_start.val = 0;
+ }
+
+ // 3.3 INTO_ELEMENTS
+
+ if ((flags & (1<<flag_into_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->into_elements);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, into_elem.offset,
+ into_elem.size, tmp_val, into_elem.ranges);
+ into_elem.base = reinterpret_cast<char*>(ap->base);
+ into_elem.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into_extent elements");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_into_elements_is_scalar)) != 0) {
+ into_elem.val = (int64_t)vd3->into_elements;
+ }
+ else {
+ into_elem.val = m_vars[i].count;
+ }
+
+ // alloc_start
+
+ if ((flags & (1<<flag_alloc_start_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_start);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size,
+ alloc_start.offset, alloc_start.size, tmp_val,
+ alloc_start.ranges);
+ alloc_start.base = reinterpret_cast<char*>(ap->base);
+ alloc_start.el_size = ap->dim[ap->rank - 1].size;
+
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "alloc_extent start");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_alloc_start_is_scalar)) != 0) {
+ alloc_start.val = (int64_t)vd3->alloc_start;
+ }
+ else {
+ alloc_start.val = 0;
+ }
+
+ // alloc_elem
+
+ if ((flags & (1<<flag_alloc_elements_is_array)) != 0) {
+ ap = static_cast<const arr_desc*>(vd3->alloc_elements);
+ get_arr_desc_numbers(ap, ap->dim[ap->rank - 1].size, alloc_elem.offset,
+ alloc_elem.size, tmp_val, alloc_elem.ranges);
+ alloc_elem.base = reinterpret_cast<char*>(ap->base);
+ alloc_elem.el_size = ap->dim[ap->rank - 1].size;
+ if (tmp_val < pointers_number) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch,
+ "alloc_extent elements");
+ return false;
+ }
+ }
+ else if ((flags & (1<<flag_alloc_elements_is_scalar)) != 0) {
+ alloc_elem.val = (int64_t)vd3->alloc_elements;
+ }
+ else {
+ alloc_elem.val = 0;
+ }
+
+ for (int k = 0; k < pointers_number; k++) {
+ int type = flags & 0x3f;
+ int type_src, type_dst;
+ // Get new values
+ // type_src, type_dst
+ type_src = type_dst = (type == c_data_ptr_array) ?
+ c_data_ptr : (type == c_func_ptr_array) ?
+ c_func_ptr : (type == c_void_ptr_array) ?
+ c_void_ptr : (type == c_string_ptr_array) ?
+ c_string_ptr : 0;
+
+ // Get ptr val
+ if (!ptr.read_next(true)) {
+ break;
+ }
+ else {
+ ptr.val = (void*)(ptr.base + ptr.offset);
+ }
+
+ // !!! If we got error at phase of reading - it's an internal
+ // !!! error, as we must detect mismatch before
+
+ // Get into val
+ if (m_vars[i].into) {
+ if (!into.read_next(true)) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into");
+ LIBOFFLOAD_ABORT;
+ }
+ else {
+ into.val = (void*)(into.base + into.offset);
+ }
+ }
+
+ // Get other components of the clause
+ if (!ext_start.read_next(flags & (1<<flag_extent_start_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "extent start");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!ext_elements.read_next(
+ flags & (1<<flag_extent_elements_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "extent elements");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!alloc_if.read_next(flags & (1<<flag_alloc_if_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "alloc_if");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!free_if.read_next(flags & (1<<flag_free_if_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "free_if");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!align.read_next(flags & (1<<flag_align_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "align");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!into_start.read_next(flags & (1<<flag_into_start_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into_extent start");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!into_elem.read_next(flags & (1<<flag_into_elements_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "into_extent elements");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!alloc_start.read_next(flags & (1<<flag_alloc_start_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "alloc_extent start");
+ LIBOFFLOAD_ABORT;
+ }
+ if (!alloc_elem.read_next(
+ flags & (1<<flag_alloc_elements_is_array))) {
+ LIBOFFLOAD_ERROR(c_pointer_array_mismatch, "alloc_extent elements");
+ LIBOFFLOAD_ABORT;
+ }
+
+ m_vars[new_index + k].direction.bits = m_vars[i].direction.bits;
+ m_vars[new_index + k].alloc_if = alloc_if.val;
+ m_vars[new_index + k].free_if = free_if.val;
+ m_vars[new_index + k].align = align.val;
+ m_vars[new_index + k].mic_offset = 0;
+ m_vars[new_index + k].flags.bits = m_vars[i].flags.bits;
+ m_vars[new_index + k].offset = 0;
+ m_vars[new_index + k].size = m_vars[i].size;
+
+ if (ext_start.val == 0) {
+ m_vars[new_index + k].count = ext_elements.val;
+ m_vars[new_index + k].ptr = ptr.val;
+ if (type_src == c_string_ptr) {
+ m_vars[new_index + k].size = 0;
+ }
+ }
+ else {
+ m_vars[new_index + k].count = 0;
+ m_vars[new_index + k].ptr =
+ static_cast<void*>(make_arr_desc(
+ ptr.val,
+ ext_start.val,
+ ext_elements.val,
+ m_vars[i].size));
+
+ type_src = type_src == c_data_ptr ? c_cean_var_ptr :
+ c_string_ptr ? c_cean_var_ptr :
+ type_src;
+ if (!m_vars[i].into) {
+ type_dst = type_src;
+ }
+ }
+
+ if (m_vars[i].into && into_elem.val != 0) {
+ m_vars[new_index + k].into =
+ static_cast<void*>(make_arr_desc(
+ into.val,
+ into_start.val,
+ into_elem.val,
+ m_vars[i].size));
+ type_dst = (type == c_data_ptr_array) ? c_cean_var_ptr :
+ (type == c_string_ptr_array) ? c_cean_var_ptr :
+ type_src;
+ }
+ else {
+ m_vars[new_index + k].into = NULL;
+ }
+
+ if (alloc_elem.val != 0) {
+ m_vars[new_index + k].alloc =
+ static_cast<void*>(make_arr_desc(
+ ptr.val,
+ alloc_start.val,
+ alloc_elem.val,
+ m_vars[i].size));
+ }
+ else {
+ m_vars[new_index + k].alloc = NULL;
+ }
+
+ m_vars[new_index + k].type.src = type_src;
+ m_vars[new_index + k].type.dst = type_dst;
+
+ m_vars_extra[new_index + k].is_arr_ptr_el = 1;
+ m_vars_extra[new_index + k].ptr_arr_offset =
+ src_is_for_mic ? ptr.offset : into.offset;
+ }
+ // count and alloc fields are useless at target. They can be reused
+ // for pointer arrays.
+ m_vars[i].count = pointers_number;
+ m_vars[i].ptr_arr_offset = new_index;
+ return true;
+}
+
+static void __offload_fini_library(void)
+{
+ OFFLOAD_DEBUG_TRACE(2, "Cleanup offload library ...\n");
+ if (mic_engines_total > 0) {
+ delete[] mic_engines;
+
+ if (mic_proxy_fs_root != 0) {
+ free(mic_proxy_fs_root);
+ mic_proxy_fs_root = 0;
+ }
+
+ if (mic_library_path != 0) {
+ free(mic_library_path);
+ mic_library_path = 0;
+ }
+
+ // destroy thread key
+ thread_key_delete(mic_thread_key);
+ }
+
+ // unload COI library
+ if (COI::is_available) {
+ COI::fini();
+ }
+
+ OFFLOAD_DEBUG_TRACE(2, "Cleanup offload library ... done\n");
+}
+
+static void __offload_init_library_once(void)
+{
+ COIRESULT res;
+ uint32_t num_devices;
+ std::bitset<MIC_ENGINES_MAX> devices;
+
+ prefix = report_get_message_str(c_report_host);
+
+ // initialize trace
+ const char *env_var = getenv(htrace_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t new_val;
+ if (__offload_parse_int_string(env_var, new_val)) {
+ console_enabled = new_val & 0x0f;
+ }
+ }
+
+ env_var = getenv(offload_report_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t env_val;
+ if (__offload_parse_int_string(env_var, env_val)) {
+ if (env_val == OFFLOAD_REPORT_1 ||
+ env_val == OFFLOAD_REPORT_2 ||
+ env_val == OFFLOAD_REPORT_3) {
+ offload_report_level = env_val;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_report_value,
+ offload_report_envname);
+ }
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_int_value,
+ offload_report_envname);
+ }
+ }
+ else if (!offload_report_level) {
+ env_var = getenv(timer_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ timer_enabled = atoi(env_var);
+ }
+ }
+
+ // initialize COI
+ if (!COI::init()) {
+ return;
+ }
+
+ // get number of devices installed in the system
+ res = COI::EngineGetCount(COI_ISA_KNC, &num_devices);
+ if (res != COI_SUCCESS) {
+ return;
+ }
+
+ if (num_devices > MIC_ENGINES_MAX) {
+ num_devices = MIC_ENGINES_MAX;
+ }
+
+ // fill in the list of devices that can be used for offloading
+ env_var = getenv("OFFLOAD_DEVICES");
+ if (env_var != 0) {
+ if (strcasecmp(env_var, "none") != 0) {
+ // value is composed of comma separated physical device indexes
+ char *buf = strdup(env_var);
+ char *str, *ptr;
+ for (str = strtok_r(buf, ",", &ptr); str != 0;
+ str = strtok_r(0, ",", &ptr)) {
+ // convert string to an int
+ int64_t num;
+ if (!__offload_parse_int_string(str, num)) {
+ LIBOFFLOAD_ERROR(c_mic_init5);
+
+ // fallback to using all installed devices
+ devices.reset();
+ for (int i = 0; i < num_devices; i++) {
+ devices.set(i);
+ }
+ break;
+ }
+ if (num < 0 || num >= num_devices) {
+ LIBOFFLOAD_ERROR(c_mic_init6, num);
+ continue;
+ }
+ devices.set(num);
+ }
+ free(buf);
+ }
+ }
+ else {
+ // use all available devices
+ for (int i = 0; i < num_devices; i++) {
+ COIENGINE engine;
+ res = COI::EngineGetHandle(COI_ISA_KNC, i, &engine);
+ if (res == COI_SUCCESS) {
+ devices.set(i);
+ }
+ }
+ }
+
+ mic_engines_total = devices.count();
+
+ // no need to continue if there are no devices to offload to
+ if (mic_engines_total <= 0) {
+ return;
+ }
+
+ // initialize indexes for available devices
+ mic_engines = new Engine[mic_engines_total];
+ for (int p_idx = 0, l_idx = 0; p_idx < num_devices; p_idx++) {
+ if (devices[p_idx]) {
+ mic_engines[l_idx].set_indexes(l_idx, p_idx);
+ l_idx++;
+ }
+ }
+
+ // library search path for device binaries
+ env_var = getenv("MIC_LD_LIBRARY_PATH");
+ if (env_var != 0) {
+ mic_library_path = strdup(env_var);
+ }
+
+ // memory size reserved for COI buffers
+ env_var = getenv("MIC_BUFFERSIZE");
+ if (env_var != 0) {
+ uint64_t new_size;
+ if (__offload_parse_size_string(env_var, new_size)) {
+ mic_buffer_size = new_size;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_value, "MIC_BUFFERSIZE");
+ }
+ }
+
+ // determine stacksize for the pipeline on the device
+ env_var = getenv("MIC_STACKSIZE");
+ if (env_var != 0 && *env_var != '\0') {
+ uint64_t new_size;
+ if (__offload_parse_size_string(env_var, new_size) &&
+ (new_size >= 16384) && ((new_size & 4095) == 0)) {
+ mic_stack_size = new_size;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_mic_init3);
+ }
+ }
+
+ // proxy I/O
+ env_var = getenv("MIC_PROXY_IO");
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t new_val;
+ if (__offload_parse_int_string(env_var, new_val)) {
+ mic_proxy_io = new_val;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_int_value, "MIC_PROXY_IO");
+ }
+ }
+ env_var = getenv("MIC_PROXY_FS_ROOT");
+ if (env_var != 0 && *env_var != '\0') {
+ mic_proxy_fs_root = strdup(env_var);
+ }
+
+ // Prepare environment for the target process using the following
+ // rules
+ // - If MIC_ENV_PREFIX is set then any environment variable on the
+ // host which has that prefix are copied to the device without
+ // the prefix.
+ // All other host environment variables are ignored.
+ // - If MIC_ENV_PREFIX is not set or if MIC_ENV_PREFIX="" then host
+ // environment is duplicated.
+ env_var = getenv("MIC_ENV_PREFIX");
+ if (env_var != 0 && *env_var != '\0') {
+ mic_env_vars.set_prefix(env_var);
+
+ int len = strlen(env_var);
+ for (int i = 0; environ[i] != 0; i++) {
+ if (strncmp(environ[i], env_var, len) == 0 &&
+ strncmp(environ[i], "MIC_LD_LIBRARY_PATH", 19) != 0 &&
+ environ[i][len] != '=') {
+ mic_env_vars.analyze_env_var(environ[i]);
+ }
+ }
+ }
+
+ // create key for thread data
+ if (thread_key_create(&mic_thread_key, Engine::destroy_thread_data)) {
+ LIBOFFLOAD_ERROR(c_mic_init4, errno);
+ return;
+ }
+
+ // cpu frequency
+ cpu_frequency = COI::PerfGetCycleFrequency();
+
+ env_var = getenv(mic_use_2mb_buffers_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ uint64_t new_size;
+ if (__offload_parse_size_string(env_var, new_size)) {
+ __offload_use_2mb_buffers = new_size;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_value,
+ mic_use_2mb_buffers_envname);
+ }
+ }
+
+ env_var = getenv(mic_use_async_buffer_write_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ uint64_t new_size;
+ if (__offload_parse_size_string(env_var, new_size)) {
+ __offload_use_async_buffer_write = new_size;
+ }
+ }
+
+ env_var = getenv(mic_use_async_buffer_read_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ uint64_t new_size;
+ if (__offload_parse_size_string(env_var, new_size)) {
+ __offload_use_async_buffer_read = new_size;
+ }
+ }
+
+ // mic initialization type
+ env_var = getenv(offload_init_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ if (strcmp(env_var, "on_offload") == 0) {
+ __offload_init_type = c_init_on_offload;
+ }
+ else if (strcmp(env_var, "on_offload_all") == 0) {
+ __offload_init_type = c_init_on_offload_all;
+ }
+#ifndef TARGET_WINNT
+ else if (strcmp(env_var, "on_start") == 0) {
+ __offload_init_type = c_init_on_start;
+ }
+#endif // TARGET_WINNT
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_value, offload_init_envname);
+ }
+ }
+
+ // active wait
+ env_var = getenv(offload_active_wait_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t new_val;
+ if (__offload_parse_int_string(env_var, new_val)) {
+ __offload_active_wait = new_val;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_int_value,
+ offload_active_wait_envname);
+ }
+ }
+
+ // omp device num
+ env_var = getenv(omp_device_num_envname);
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t new_val;
+ if (__offload_parse_int_string(env_var, new_val) && new_val >= 0) {
+ __omp_device_num = new_val;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_omp_invalid_device_num_env,
+ omp_device_num_envname);
+ }
+ }
+
+ // init ORSL
+ ORSL::init();
+}
+
+extern int __offload_init_library(void)
+{
+ // do one time intialization
+ static OffloadOnceControl ctrl = OFFLOAD_ONCE_CONTROL_INIT;
+ __offload_run_once(&ctrl, __offload_init_library_once);
+
+ // offload is available if COI is available and the number of devices > 0
+ bool is_available = COI::is_available && (mic_engines_total > 0);
+
+ // register pending libraries if there are any
+ if (is_available && __target_libs) {
+ mutex_locker_t locker(__target_libs_lock);
+
+ for (TargetImageList::iterator it = __target_libs_list.begin();
+ it != __target_libs_list.end(); it++) {
+ // Register library in COI
+ COI::ProcessRegisterLibraries(1, &it->data, &it->size,
+ &it->origin, &it->offset);
+
+ // add lib to all engines
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].add_lib(*it);
+ }
+ }
+
+ __target_libs = false;
+ __target_libs_list.clear();
+ }
+
+ return is_available;
+}
+
+extern "C" void __offload_register_image(const void *target_image)
+{
+ const struct Image *image = static_cast<const struct Image*>(target_image);
+
+ // decode image
+ const char *name = image->data;
+ const void *data = image->data + strlen(image->data) + 1;
+ uint64_t size = image->size;
+ const char *origin = 0;
+ uint64_t offset = 0;
+
+ // our actions depend on the image type
+ const Elf64_Ehdr *hdr = static_cast<const Elf64_Ehdr*>(data);
+ switch (hdr->e_type) {
+ case ET_EXEC:
+ // Each offload application is supposed to have only one target
+ // image representing target executable.
+ // No thread synchronization is required here as the initialization
+ // code is always executed in a single thread.
+ if (__target_exe != 0) {
+ LIBOFFLOAD_ERROR(c_multiple_target_exes);
+ exit(1);
+ }
+ __target_exe = new TargetImage(name, data, size, origin, offset);
+
+ // Registration code for execs is always called from the context
+ // of main and thus we can safely call any function here,
+ // including LoadLibrary API on windows. This is the place where
+ // we do the offload library initialization.
+ if (__offload_init_library()) {
+ // initialize engine if init_type is on_start
+ if (__offload_init_type == c_init_on_start) {
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].init();
+ }
+ }
+ }
+ break;
+
+ case ET_DYN:
+ // Registration code for libraries is called from the DllMain
+ // context (on windows) and thus we cannot do anything useful
+ // here. So we just add it to the list of pending libraries for
+ // the later use.
+ __target_libs_lock.lock();
+ __target_libs = true;
+ __target_libs_list.push_back(TargetImage(name, data, size,
+ origin, offset));
+ __target_libs_lock.unlock();
+ break;
+
+ default:
+ // something is definitely wrong, issue an error and exit
+ LIBOFFLOAD_ERROR(c_unknown_binary_type);
+ exit(1);
+ }
+}
+
+extern "C" void __offload_unregister_image(const void *target_image)
+{
+ // Target image is packed as follows:
+ // 8 bytes - size of the target binary
+ // null-terminated string - binary name
+ // <size> bytes - binary contents
+ const struct Image {
+ int64_t size;
+ char data[];
+ } *image = static_cast<const struct Image*>(target_image);
+
+ // decode image
+ const char *name = image->data;
+ const void *data = image->data + strlen(image->data) + 1;
+
+ // our actions depend on the image type
+ const Elf64_Ehdr *hdr = static_cast<const Elf64_Ehdr*>(data);
+ if (hdr->e_type == ET_EXEC) {
+ // We are executing exec's desctructors.
+ // It is time to do a library cleanup.
+ if (timer_enabled) {
+ Offload_Timer_Print();
+ }
+
+#ifdef MYO_SUPPORT
+ __offload_myoFini();
+#endif // MYO_SUPPORT
+
+ __offload_fini_library();
+ }
+}
+
+// Runtime trace interface for user programs
+
+void __offload_console_trace(int level)
+{
+ console_enabled = level;
+}
+
+// User-visible offload API
+
+int _Offload_number_of_devices(void)
+{
+ __offload_init_library();
+ return mic_engines_total;
+}
+
+int _Offload_get_device_number(void)
+{
+ return -1;
+}
+
+int _Offload_get_physical_device_number(void)
+{
+ return -1;
+}
+
+int _Offload_signaled(int index, void *signal)
+{
+ __offload_init_library();
+
+ // check index value
+ if (index < 0 || mic_engines_total <= 0) {
+ LIBOFFLOAD_ERROR(c_offload_signaled1, index);
+ LIBOFFLOAD_ABORT;
+ }
+
+ // find associated async task
+ OffloadDescriptor *task =
+ mic_engines[index % mic_engines_total].find_signal(signal, false);
+ if (task == 0) {
+ LIBOFFLOAD_ERROR(c_offload_signaled2, signal);
+ LIBOFFLOAD_ABORT;
+ }
+
+ return task->is_signaled();
+}
+
+void _Offload_report(int val)
+{
+ if (val == OFFLOAD_REPORT_ON ||
+ val == OFFLOAD_REPORT_OFF) {
+ offload_report_enabled = val;
+ }
+}
+
+// IDB support
+int __dbg_is_attached = 0;
+int __dbg_target_id = -1;
+pid_t __dbg_target_so_pid = -1;
+char __dbg_target_exe_name[MAX_TARGET_NAME] = {0};
+const int __dbg_api_major_version = 1;
+const int __dbg_api_minor_version = 0;
+
+void __dbg_target_so_loaded()
+{
+}
+void __dbg_target_so_unloaded()
+{
+}
diff --git a/final/offload/src/offload_host.h b/final/offload/src/offload_host.h
new file mode 100644
index 0000000..ea23996
--- /dev/null
+++ b/final/offload/src/offload_host.h
@@ -0,0 +1,343 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! \file
+ \brief The parts of the runtime library used only on the host
+*/
+
+#ifndef OFFLOAD_HOST_H_INCLUDED
+#define OFFLOAD_HOST_H_INCLUDED
+
+#ifndef TARGET_WINNT
+#include <unistd.h>
+#endif // TARGET_WINNT
+#include "offload_common.h"
+#include "offload_util.h"
+#include "offload_engine.h"
+#include "offload_env.h"
+#include "offload_orsl.h"
+#include "coi/coi_client.h"
+
+// MIC engines.
+extern Engine* mic_engines;
+extern uint32_t mic_engines_total;
+
+//! The target image is packed as follows.
+/*! 1. 8 bytes containing the size of the target binary */
+/*! 2. a null-terminated string which is the binary name */
+/*! 3. <size> number of bytes that are the contents of the image */
+/*! The address of symbol __offload_target_image
+ is the address of this structure. */
+struct Image {
+ int64_t size; //!< Size in bytes of the target binary name and contents
+ char data[]; //!< The name and contents of the target image
+};
+
+// The offload descriptor.
+class OffloadDescriptor
+{
+public:
+ OffloadDescriptor(
+ int index,
+ _Offload_status *status,
+ bool is_mandatory,
+ bool is_openmp,
+ OffloadHostTimerData * timer_data
+ ) :
+ m_device(mic_engines[index % mic_engines_total]),
+ m_is_mandatory(is_mandatory),
+ m_is_openmp(is_openmp),
+ m_inout_buf(0),
+ m_func_desc(0),
+ m_func_desc_size(0),
+ m_in_deps(0),
+ m_in_deps_total(0),
+ m_out_deps(0),
+ m_out_deps_total(0),
+ m_vars(0),
+ m_vars_extra(0),
+ m_status(status),
+ m_timer_data(timer_data)
+ {}
+
+ ~OffloadDescriptor()
+ {
+ if (m_in_deps != 0) {
+ free(m_in_deps);
+ }
+ if (m_out_deps != 0) {
+ free(m_out_deps);
+ }
+ if (m_func_desc != 0) {
+ free(m_func_desc);
+ }
+ if (m_vars != 0) {
+ free(m_vars);
+ free(m_vars_extra);
+ }
+ }
+
+ bool offload(const char *name, bool is_empty,
+ VarDesc *vars, VarDesc2 *vars2, int vars_total,
+ const void **waits, int num_waits, const void **signal,
+ int entry_id, const void *stack_addr);
+ bool offload_finish();
+
+ bool is_signaled();
+
+ OffloadHostTimerData* get_timer_data() const {
+ return m_timer_data;
+ }
+
+private:
+ bool wait_dependencies(const void **waits, int num_waits);
+ bool setup_descriptors(VarDesc *vars, VarDesc2 *vars2, int vars_total,
+ int entry_id, const void *stack_addr);
+ bool setup_misc_data(const char *name);
+ bool send_pointer_data(bool is_async);
+ bool send_noncontiguous_pointer_data(
+ int i,
+ PtrData* src_buf,
+ PtrData* dst_buf,
+ COIEVENT *event);
+ bool receive_noncontiguous_pointer_data(
+ int i,
+ char* src_data,
+ COIBUFFER dst_buf,
+ COIEVENT *event);
+
+ bool gather_copyin_data();
+
+ bool compute();
+
+ bool receive_pointer_data(bool is_async);
+ bool scatter_copyout_data();
+
+ void cleanup();
+
+ bool find_ptr_data(PtrData* &ptr_data, void *base, int64_t disp,
+ int64_t length, bool error_does_not_exist = true);
+ bool alloc_ptr_data(PtrData* &ptr_data, void *base, int64_t disp,
+ int64_t length, int64_t alloc_disp, int align);
+ bool init_static_ptr_data(PtrData *ptr_data);
+ bool init_mic_address(PtrData *ptr_data);
+ bool offload_stack_memory_manager(const void * stack_begin, int routine_id,
+ int buf_size, int align, bool *is_new);
+ bool nullify_target_stack(COIBUFFER targ_buf, uint64_t size);
+
+ bool gen_var_descs_for_pointer_array(int i);
+
+ void report_coi_error(error_types msg, COIRESULT res);
+ _Offload_result translate_coi_error(COIRESULT res) const;
+
+private:
+ typedef std::list<COIBUFFER> BufferList;
+
+ // extra data associated with each variable descriptor
+ struct VarExtra {
+ PtrData* src_data;
+ PtrData* dst_data;
+ AutoData* auto_data;
+ int64_t cpu_disp;
+ int64_t cpu_offset;
+ CeanReadRanges *read_rng_src;
+ CeanReadRanges *read_rng_dst;
+ int64_t ptr_arr_offset;
+ bool is_arr_ptr_el;
+ };
+
+ template<typename T> class ReadArrElements {
+ public:
+ ReadArrElements():
+ ranges(NULL),
+ el_size(sizeof(T)),
+ offset(0),
+ count(0),
+ is_empty(true),
+ base(NULL)
+ {}
+
+ bool read_next(bool flag)
+ {
+ if (flag != 0) {
+ if (is_empty) {
+ if (ranges) {
+ if (!get_next_range(ranges, &offset)) {
+ // ranges are over
+ return false;
+ }
+ }
+ // all contiguous elements are over
+ else if (count != 0) {
+ return false;
+ }
+
+ length_cur = size;
+ }
+ else {
+ offset += el_size;
+ }
+ val = (T)get_el_value(base, offset, el_size);
+ length_cur -= el_size;
+ count++;
+ is_empty = length_cur == 0;
+ }
+ return true;
+ }
+ public:
+ CeanReadRanges * ranges;
+ T val;
+ int el_size;
+ int64_t size,
+ offset,
+ length_cur;
+ bool is_empty;
+ int count;
+ char *base;
+ };
+
+ // ptr_data for persistent auto objects
+ PtrData* m_stack_ptr_data;
+ PtrDataList m_destroy_stack;
+
+ // Engine
+ Engine& m_device;
+
+ // if true offload is mandatory
+ bool m_is_mandatory;
+
+ // if true offload has openmp origin
+ const bool m_is_openmp;
+
+ // The Marshaller for the inputs of the offloaded region.
+ Marshaller m_in;
+
+ // The Marshaller for the outputs of the offloaded region.
+ Marshaller m_out;
+
+ // List of buffers that are passed to dispatch call
+ BufferList m_compute_buffers;
+
+ // List of buffers that need to be destroyed at the end of offload
+ BufferList m_destroy_buffers;
+
+ // Variable descriptors
+ VarDesc* m_vars;
+ VarExtra* m_vars_extra;
+ int m_vars_total;
+
+ // Pointer to a user-specified status variable
+ _Offload_status *m_status;
+
+ // Function descriptor
+ FunctionDescriptor* m_func_desc;
+ uint32_t m_func_desc_size;
+
+ // Buffer for transferring copyin/copyout data
+ COIBUFFER m_inout_buf;
+
+ // Dependencies
+ COIEVENT *m_in_deps;
+ uint32_t m_in_deps_total;
+ COIEVENT *m_out_deps;
+ uint32_t m_out_deps_total;
+
+ // Timer data
+ OffloadHostTimerData *m_timer_data;
+
+ // copyin/copyout data length
+ uint64_t m_in_datalen;
+ uint64_t m_out_datalen;
+
+ // a boolean value calculated in setup_descriptors. If true we need to do
+ // a run function on the target. Otherwise it may be optimized away.
+ bool m_need_runfunction;
+};
+
+// Initialization types for MIC
+enum OffloadInitType {
+ c_init_on_start, // all devices before entering main
+ c_init_on_offload, // single device before starting the first offload
+ c_init_on_offload_all // all devices before starting the first offload
+};
+
+// Initializes library and registers specified offload image.
+extern "C" void __offload_register_image(const void* image);
+extern "C" void __offload_unregister_image(const void* image);
+
+// Initializes offload runtime library.
+extern int __offload_init_library(void);
+
+// thread data for associating pipelines with threads
+extern pthread_key_t mic_thread_key;
+
+// Environment variables for devices
+extern MicEnvVar mic_env_vars;
+
+// CPU frequency
+extern uint64_t cpu_frequency;
+
+// LD_LIBRARY_PATH for MIC libraries
+extern char* mic_library_path;
+
+// stack size for target
+extern uint32_t mic_stack_size;
+
+// Preallocated memory size for buffers on MIC
+extern uint64_t mic_buffer_size;
+
+// Setting controlling inout proxy
+extern bool mic_proxy_io;
+extern char* mic_proxy_fs_root;
+
+// Threshold for creating buffers with large pages
+extern uint64_t __offload_use_2mb_buffers;
+
+// offload initialization type
+extern OffloadInitType __offload_init_type;
+
+// Device number to offload to when device is not explicitly specified.
+extern int __omp_device_num;
+
+// target executable
+extern TargetImage* __target_exe;
+
+// IDB support
+
+// Called by the offload runtime after initialization of offload infrastructure
+// has been completed.
+extern "C" void __dbg_target_so_loaded();
+
+// Called by the offload runtime when the offload infrastructure is about to be
+// shut down, currently at application exit.
+extern "C" void __dbg_target_so_unloaded();
+
+// Null-terminated string containing path to the process image of the hosting
+// application (offload_main)
+#define MAX_TARGET_NAME 512
+extern "C" char __dbg_target_exe_name[MAX_TARGET_NAME];
+
+// Integer specifying the process id
+extern "C" pid_t __dbg_target_so_pid;
+
+// Integer specifying the 0-based device number
+extern "C" int __dbg_target_id;
+
+// Set to non-zero by the host-side debugger to enable offload debugging
+// support
+extern "C" int __dbg_is_attached;
+
+// Major version of the debugger support API
+extern "C" const int __dbg_api_major_version;
+
+// Minor version of the debugger support API
+extern "C" const int __dbg_api_minor_version;
+
+#endif // OFFLOAD_HOST_H_INCLUDED
diff --git a/final/offload/src/offload_myo_host.cpp b/final/offload/src/offload_myo_host.cpp
new file mode 100644
index 0000000..2e1c186
--- /dev/null
+++ b/final/offload/src/offload_myo_host.cpp
@@ -0,0 +1,805 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_myo_host.h"
+#include <errno.h>
+#include <malloc.h>
+#include "offload_host.h"
+
+#if defined(LINUX) || defined(FREEBSD)
+#include <mm_malloc.h>
+#endif
+
+#define MYO_VERSION1 "MYO_1.0"
+
+extern "C" void __cilkrts_cilk_for_32(void*, void*, uint32_t, int32_t);
+extern "C" void __cilkrts_cilk_for_64(void*, void*, uint64_t, int32_t);
+
+#ifndef TARGET_WINNT
+#pragma weak __cilkrts_cilk_for_32
+#pragma weak __cilkrts_cilk_for_64
+#endif // TARGET_WINNT
+
+#ifdef TARGET_WINNT
+#define MYO_TABLE_END_MARKER() reinterpret_cast<const char*>(-1)
+#else // TARGET_WINNT
+#define MYO_TABLE_END_MARKER() reinterpret_cast<const char*>(0)
+#endif // TARGET_WINNT
+
+class MyoWrapper {
+public:
+ MyoWrapper() : m_lib_handle(0), m_is_available(false)
+ {}
+
+ bool is_available() const {
+ return m_is_available;
+ }
+
+ bool LoadLibrary(void);
+
+ // unloads the library
+ void UnloadLibrary(void) {
+// if (m_lib_handle != 0) {
+// DL_close(m_lib_handle);
+// m_lib_handle = 0;
+// }
+ }
+
+ // Wrappers for MYO client functions
+ void LibInit(void *arg, void *func) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myoinit,
+ "%s(%p, %p)\n", __func__, arg, func);
+ CheckResult(__func__, m_lib_init(arg, func));
+ }
+
+ void LibFini(void) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myofini, "%s()\n", __func__);
+ m_lib_fini();
+ }
+
+ void* SharedMalloc(size_t size) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myosharedmalloc,
+ "%s(%lld)\n", __func__, size);
+ return m_shared_malloc(size);
+ }
+
+ void SharedFree(void *ptr) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myosharedfree,
+ "%s(%p)\n", __func__, ptr);
+ m_shared_free(ptr);
+ }
+
+ void* SharedAlignedMalloc(size_t size, size_t align) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myosharedalignedmalloc,
+ "%s(%lld, %lld)\n", __func__, size, align);
+ return m_shared_aligned_malloc(size, align);
+ }
+
+ void SharedAlignedFree(void *ptr) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myosharedalignedfree,
+ "%s(%p)\n", __func__, ptr);
+ m_shared_aligned_free(ptr);
+ }
+
+ void Acquire(void) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myoacquire,
+ "%s()\n", __func__);
+ CheckResult(__func__, m_acquire());
+ }
+
+ void Release(void) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myorelease,
+ "%s()\n", __func__);
+ CheckResult(__func__, m_release());
+ }
+
+ void HostVarTablePropagate(void *table, int num_entries) const {
+ OFFLOAD_DEBUG_TRACE(4, "%s(%p, %d)\n", __func__, table, num_entries);
+ CheckResult(__func__, m_host_var_table_propagate(table, num_entries));
+ }
+
+ void HostFptrTableRegister(void *table, int num_entries,
+ int ordered) const {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_myoregister,
+ "%s(%p, %d, %d)\n", __func__, table,
+ num_entries, ordered);
+ CheckResult(__func__,
+ m_host_fptr_table_register(table, num_entries, ordered));
+ }
+
+ void RemoteThunkCall(void *thunk, void *args, int device) {
+ OFFLOAD_DEBUG_TRACE(4, "%s(%p, %p, %d)\n", __func__, thunk, args,
+ device);
+ CheckResult(__func__, m_remote_thunk_call(thunk, args, device));
+ }
+
+ MyoiRFuncCallHandle RemoteCall(char *func, void *args, int device) const {
+ OFFLOAD_DEBUG_TRACE(4, "%s(%s, %p, %d)\n", __func__, func, args,
+ device);
+ return m_remote_call(func, args, device);
+ }
+
+ void GetResult(MyoiRFuncCallHandle handle) const {
+ OFFLOAD_DEBUG_TRACE(4, "%s(%p)\n", __func__, handle);
+ CheckResult(__func__, m_get_result(handle));
+ }
+
+private:
+ void CheckResult(const char *func, MyoError error) const {
+ if (error != MYO_SUCCESS) {
+ LIBOFFLOAD_ERROR(c_myowrapper_checkresult, func, error);
+ exit(1);
+ }
+ }
+
+private:
+ void* m_lib_handle;
+ bool m_is_available;
+
+ // pointers to functions from myo library
+ MyoError (*m_lib_init)(void*, void*);
+ void (*m_lib_fini)(void);
+ void* (*m_shared_malloc)(size_t);
+ void (*m_shared_free)(void*);
+ void* (*m_shared_aligned_malloc)(size_t, size_t);
+ void (*m_shared_aligned_free)(void*);
+ MyoError (*m_acquire)(void);
+ MyoError (*m_release)(void);
+ MyoError (*m_host_var_table_propagate)(void*, int);
+ MyoError (*m_host_fptr_table_register)(void*, int, int);
+ MyoError (*m_remote_thunk_call)(void*, void*, int);
+ MyoiRFuncCallHandle (*m_remote_call)(char*, void*, int);
+ MyoError (*m_get_result)(MyoiRFuncCallHandle);
+};
+
+bool MyoWrapper::LoadLibrary(void)
+{
+#ifndef TARGET_WINNT
+ const char *lib_name = "libmyo-client.so";
+#else // TARGET_WINNT
+ const char *lib_name = "myo-client.dll";
+#endif // TARGET_WINNT
+
+ OFFLOAD_DEBUG_TRACE(2, "Loading MYO library %s ...\n", lib_name);
+
+ m_lib_handle = DL_open(lib_name);
+ if (m_lib_handle == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to load the library. errno = %d\n",
+ errno);
+ return false;
+ }
+
+ m_lib_init = (MyoError (*)(void*, void*))
+ DL_sym(m_lib_handle, "myoiLibInit", MYO_VERSION1);
+ if (m_lib_init == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiLibInit");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_lib_fini = (void (*)(void))
+ DL_sym(m_lib_handle, "myoiLibFini", MYO_VERSION1);
+ if (m_lib_fini == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiLibFini");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_shared_malloc = (void* (*)(size_t))
+ DL_sym(m_lib_handle, "myoSharedMalloc", MYO_VERSION1);
+ if (m_shared_malloc == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoSharedMalloc");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_shared_free = (void (*)(void*))
+ DL_sym(m_lib_handle, "myoSharedFree", MYO_VERSION1);
+ if (m_shared_free == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoSharedFree");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_shared_aligned_malloc = (void* (*)(size_t, size_t))
+ DL_sym(m_lib_handle, "myoSharedAlignedMalloc", MYO_VERSION1);
+ if (m_shared_aligned_malloc == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoSharedAlignedMalloc");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_shared_aligned_free = (void (*)(void*))
+ DL_sym(m_lib_handle, "myoSharedAlignedFree", MYO_VERSION1);
+ if (m_shared_aligned_free == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoSharedAlignedFree");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_acquire = (MyoError (*)(void))
+ DL_sym(m_lib_handle, "myoAcquire", MYO_VERSION1);
+ if (m_acquire == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoAcquire");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_release = (MyoError (*)(void))
+ DL_sym(m_lib_handle, "myoRelease", MYO_VERSION1);
+ if (m_release == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoRelease");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_host_var_table_propagate = (MyoError (*)(void*, int))
+ DL_sym(m_lib_handle, "myoiHostVarTablePropagate", MYO_VERSION1);
+ if (m_host_var_table_propagate == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiHostVarTablePropagate");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_host_fptr_table_register = (MyoError (*)(void*, int, int))
+ DL_sym(m_lib_handle, "myoiHostFptrTableRegister", MYO_VERSION1);
+ if (m_host_fptr_table_register == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiHostFptrTableRegister");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_remote_thunk_call = (MyoError (*)(void*, void*, int))
+ DL_sym(m_lib_handle, "myoiRemoteThunkCall", MYO_VERSION1);
+ if (m_remote_thunk_call == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiRemoteThunkCall");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_remote_call = (MyoiRFuncCallHandle (*)(char*, void*, int))
+ DL_sym(m_lib_handle, "myoiRemoteCall", MYO_VERSION1);
+ if (m_remote_call == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiRemoteCall");
+ UnloadLibrary();
+ return false;
+ }
+
+ m_get_result = (MyoError (*)(MyoiRFuncCallHandle))
+ DL_sym(m_lib_handle, "myoiGetResult", MYO_VERSION1);
+ if (m_get_result == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n",
+ "myoiGetResult");
+ UnloadLibrary();
+ return false;
+ }
+
+ OFFLOAD_DEBUG_TRACE(2, "The library was successfully loaded\n");
+
+ m_is_available = true;
+
+ return true;
+}
+
+static bool myo_is_available;
+static MyoWrapper myo_wrapper;
+
+struct MyoTable
+{
+ MyoTable(SharedTableEntry *tab, int len) : var_tab(tab), var_tab_len(len)
+ {}
+
+ SharedTableEntry* var_tab;
+ int var_tab_len;
+};
+
+typedef std::list<MyoTable> MyoTableList;
+static MyoTableList __myo_table_list;
+static mutex_t __myo_table_lock;
+static bool __myo_tables = false;
+
+static void __offload_myo_shared_table_register(SharedTableEntry *entry);
+static void __offload_myo_shared_init_table_register(InitTableEntry* entry);
+static void __offload_myo_fptr_table_register(FptrTableEntry *entry);
+
+static void __offload_myoLoadLibrary_once(void)
+{
+ if (__offload_init_library()) {
+ myo_wrapper.LoadLibrary();
+ }
+}
+
+static bool __offload_myoLoadLibrary(void)
+{
+ static OffloadOnceControl ctrl = OFFLOAD_ONCE_CONTROL_INIT;
+ __offload_run_once(&ctrl, __offload_myoLoadLibrary_once);
+
+ return myo_wrapper.is_available();
+}
+
+static void __offload_myoInit_once(void)
+{
+ if (!__offload_myoLoadLibrary()) {
+ return;
+ }
+
+ // initialize all devices
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].init();
+ }
+
+ // load and initialize MYO library
+ OFFLOAD_DEBUG_TRACE(2, "Initializing MYO library ...\n");
+
+ COIEVENT events[MIC_ENGINES_MAX];
+ MyoiUserParams params[MIC_ENGINES_MAX+1];
+
+ // load target library to all devices
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].init_myo(&events[i]);
+
+ params[i].type = MYOI_USERPARAMS_DEVID;
+ params[i].nodeid = mic_engines[i].get_physical_index() + 1;
+ }
+
+ params[mic_engines_total].type = MYOI_USERPARAMS_LAST_MSG;
+
+ // initialize myo runtime on host
+ myo_wrapper.LibInit(params, 0);
+
+ // wait for the target init calls to finish
+ COIRESULT res;
+ res = COI::EventWait(mic_engines_total, events, -1, 1, 0, 0);
+ if (res != COI_SUCCESS) {
+ LIBOFFLOAD_ERROR(c_event_wait, res);
+ exit(1);
+ }
+
+ myo_is_available = true;
+
+ OFFLOAD_DEBUG_TRACE(2, "Initializing MYO library ... done\n");
+}
+
+static bool __offload_myoInit(void)
+{
+ static OffloadOnceControl ctrl = OFFLOAD_ONCE_CONTROL_INIT;
+ __offload_run_once(&ctrl, __offload_myoInit_once);
+
+ // register pending shared var tables
+ if (myo_is_available && __myo_tables) {
+ mutex_locker_t locker(__myo_table_lock);
+
+ if (__myo_tables) {
+ // Register tables with MYO so it can propagate to target.
+ for(MyoTableList::const_iterator it = __myo_table_list.begin();
+ it != __myo_table_list.end(); ++it) {
+#ifdef TARGET_WINNT
+ for (SharedTableEntry *entry = it->var_tab;
+ entry->varName != MYO_TABLE_END_MARKER(); entry++) {
+ if (entry->varName == 0) {
+ continue;
+ }
+ myo_wrapper.HostVarTablePropagate(entry, 1);
+ }
+#else // TARGET_WINNT
+ myo_wrapper.HostVarTablePropagate(it->var_tab,
+ it->var_tab_len);
+#endif // TARGET_WINNT
+ }
+
+ __myo_table_list.clear();
+ __myo_tables = false;
+ }
+ }
+
+ return myo_is_available;
+}
+
+static bool shared_table_entries(
+ SharedTableEntry *entry
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ for (; entry->varName != MYO_TABLE_END_MARKER(); entry++) {
+#ifdef TARGET_WINNT
+ if (entry->varName == 0) {
+ continue;
+ }
+#endif // TARGET_WINNT
+
+ return true;
+ }
+
+ return false;
+}
+
+static bool fptr_table_entries(
+ FptrTableEntry *entry
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ for (; entry->funcName != MYO_TABLE_END_MARKER(); entry++) {
+#ifdef TARGET_WINNT
+ if (entry->funcName == 0) {
+ continue;
+ }
+#endif // TARGET_WINNT
+
+ return true;
+ }
+
+ return false;
+}
+
+extern "C" void __offload_myoRegisterTables(
+ InitTableEntry* init_table,
+ SharedTableEntry *shared_table,
+ FptrTableEntry *fptr_table
+)
+{
+ // check whether we need to initialize MYO library. It is
+ // initialized only if at least one myo table is not empty
+ if (shared_table_entries(shared_table) || fptr_table_entries(fptr_table)) {
+ // make sure myo library is loaded
+ __offload_myoLoadLibrary();
+
+ // register tables
+ __offload_myo_shared_table_register(shared_table);
+ __offload_myo_fptr_table_register(fptr_table);
+ __offload_myo_shared_init_table_register(init_table);
+ }
+}
+
+void __offload_myoFini(void)
+{
+ if (myo_is_available) {
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ COIEVENT events[MIC_ENGINES_MAX];
+
+ // kick off myoiLibFini calls on all devices
+ for (int i = 0; i < mic_engines_total; i++) {
+ mic_engines[i].fini_myo(&events[i]);
+ }
+
+ // cleanup myo runtime on host
+ myo_wrapper.LibFini();
+
+ // wait for the target fini calls to finish
+ COIRESULT res;
+ res = COI::EventWait(mic_engines_total, events, -1, 1, 0, 0);
+ if (res != COI_SUCCESS) {
+ LIBOFFLOAD_ERROR(c_event_wait, res);
+ exit(1);
+ }
+ }
+}
+
+static void __offload_myo_shared_table_register(
+ SharedTableEntry *entry
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ SharedTableEntry *start = entry;
+ int entries = 0;
+
+ // allocate shared memory for vars
+ for (; entry->varName != MYO_TABLE_END_MARKER(); entry++) {
+#ifdef TARGET_WINNT
+ if (entry->varName == 0) {
+ OFFLOAD_DEBUG_TRACE(4, "skip registering a NULL MyoSharedTable entry\n");
+ continue;
+ }
+#endif // TARGET_WINNT
+
+ OFFLOAD_DEBUG_TRACE(4, "registering MyoSharedTable entry for %s @%p\n",
+ entry->varName, entry);
+
+ // Invoke the function to create shared memory
+ reinterpret_cast<void(*)(void)>(entry->sharedAddr)();
+ entries++;
+ }
+
+ // and table to the list if it is not empty
+ if (entries > 0) {
+ mutex_locker_t locker(__myo_table_lock);
+ __myo_table_list.push_back(MyoTable(start, entries));
+ __myo_tables = true;
+ }
+}
+
+static void __offload_myo_shared_init_table_register(InitTableEntry* entry)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+#ifdef TARGET_WINNT
+ for (; entry->funcName != MYO_TABLE_END_MARKER(); entry++) {
+ if (entry->funcName == 0) {
+ OFFLOAD_DEBUG_TRACE(4, "skip registering a NULL MyoSharedInit entry\n");
+ continue;
+ }
+
+ // Invoke the function to init the shared memory
+ entry->func();
+ }
+#else // TARGET_WINNT
+ for (; entry->func != 0; entry++) {
+ // Invoke the function to init the shared memory
+ entry->func();
+ }
+#endif // TARGET_WINNT
+}
+
+static void __offload_myo_fptr_table_register(
+ FptrTableEntry *entry
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ FptrTableEntry *start = entry;
+ int entries = 0;
+
+ for (; entry->funcName != MYO_TABLE_END_MARKER(); entry++) {
+#ifdef TARGET_WINNT
+ if (entry->funcName == 0) {
+ OFFLOAD_DEBUG_TRACE(4, "skip registering a NULL MyoFptrTable entry\n");
+ continue;
+ }
+#endif // TARGET_WINNT
+
+ if (!myo_wrapper.is_available()) {
+ *(static_cast<void**>(entry->localThunkAddr)) = entry->funcAddr;
+ }
+
+ OFFLOAD_DEBUG_TRACE(4, "registering MyoFptrTable entry for %s @%p\n",
+ entry->funcName, entry);
+
+#ifdef TARGET_WINNT
+ if (myo_wrapper.is_available()) {
+ myo_wrapper.HostFptrTableRegister(entry, 1, false);
+ }
+#endif // TARGET_WINNT
+
+ entries++;
+ }
+
+#ifndef TARGET_WINNT
+ if (myo_wrapper.is_available() && entries > 0) {
+ myo_wrapper.HostFptrTableRegister(start, entries, false);
+ }
+#endif // TARGET_WINNT
+}
+
+extern "C" int __offload_myoIsAvailable(int target_number)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%d)\n", __func__, target_number);
+
+ if (target_number >= -2) {
+ bool is_default_number = (target_number == -2);
+
+ if (__offload_myoInit()) {
+ if (target_number >= 0) {
+ // User provided the device number
+ int num = target_number % mic_engines_total;
+
+ // reserve device in ORSL
+ target_number = ORSL::reserve(num) ? num : -1;
+ }
+ else {
+ // try to use device 0
+ target_number = ORSL::reserve(0) ? 0 : -1;
+ }
+
+ // make sure device is initialized
+ if (target_number >= 0) {
+ mic_engines[target_number].init();
+ }
+ }
+ else {
+ // fallback to CPU
+ target_number = -1;
+ }
+
+ if (target_number < 0 && !is_default_number) {
+ LIBOFFLOAD_ERROR(c_device_is_not_available);
+ exit(1);
+ }
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_device_number);
+ exit(1);
+ }
+
+ return target_number;
+}
+
+extern "C" void __offload_myoiRemoteIThunkCall(
+ void *thunk,
+ void *arg,
+ int target_number
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p, %p, %d)\n", __func__, thunk, arg,
+ target_number);
+
+ myo_wrapper.Release();
+ myo_wrapper.RemoteThunkCall(thunk, arg, target_number);
+ myo_wrapper.Acquire();
+
+ ORSL::release(target_number);
+}
+
+extern "C" void* _Offload_shared_malloc(size_t size)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%lld)\n", __func__, size);
+
+ if (__offload_myoLoadLibrary()) {
+ return myo_wrapper.SharedMalloc(size);
+ }
+ else {
+ return malloc(size);
+ }
+}
+
+extern "C" void _Offload_shared_free(void *ptr)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, ptr);
+
+ if (__offload_myoLoadLibrary()) {
+ myo_wrapper.SharedFree(ptr);
+ }
+ else {
+ free(ptr);
+ }
+}
+
+extern "C" void* _Offload_shared_aligned_malloc(size_t size, size_t align)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%lld, %lld)\n", __func__, size, align);
+
+ if (__offload_myoLoadLibrary()) {
+ return myo_wrapper.SharedAlignedMalloc(size, align);
+ }
+ else {
+ if (align < sizeof(void*)) {
+ align = sizeof(void*);
+ }
+ return _mm_malloc(size, align);
+ }
+}
+
+extern "C" void _Offload_shared_aligned_free(void *ptr)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, ptr);
+
+ if (__offload_myoLoadLibrary()) {
+ myo_wrapper.SharedAlignedFree(ptr);
+ }
+ else {
+ _mm_free(ptr);
+ }
+}
+
+extern "C" void __intel_cilk_for_32_offload(
+ int size,
+ void (*copy_constructor)(void*, void*),
+ int target_number,
+ void *raddr,
+ void *closure_object,
+ unsigned int iters,
+ unsigned int grain_size)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ target_number = __offload_myoIsAvailable(target_number);
+ if (target_number >= 0) {
+ struct S {
+ void *M1;
+ unsigned int M2;
+ unsigned int M3;
+ char closure[];
+ } *args;
+
+ args = (struct S*) _Offload_shared_malloc(sizeof(struct S) + size);
+ args->M1 = raddr;
+ args->M2 = iters;
+ args->M3 = grain_size;
+
+ if (copy_constructor == 0) {
+ memcpy(args->closure, closure_object, size);
+ }
+ else {
+ copy_constructor(args->closure, closure_object);
+ }
+
+ myo_wrapper.Release();
+ myo_wrapper.GetResult(
+ myo_wrapper.RemoteCall("__intel_cilk_for_32_offload",
+ args, target_number)
+ );
+ myo_wrapper.Acquire();
+
+ _Offload_shared_free(args);
+
+ ORSL::release(target_number);
+ }
+ else {
+ __cilkrts_cilk_for_32(raddr,
+ closure_object,
+ iters,
+ grain_size);
+ }
+}
+
+extern "C" void __intel_cilk_for_64_offload(
+ int size,
+ void (*copy_constructor)(void*, void*),
+ int target_number,
+ void *raddr,
+ void *closure_object,
+ uint64_t iters,
+ uint64_t grain_size)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ target_number = __offload_myoIsAvailable(target_number);
+ if (target_number >= 0) {
+ struct S {
+ void *M1;
+ uint64_t M2;
+ uint64_t M3;
+ char closure[];
+ } *args;
+
+ args = (struct S*) _Offload_shared_malloc(sizeof(struct S) + size);
+ args->M1 = raddr;
+ args->M2 = iters;
+ args->M3 = grain_size;
+
+ if (copy_constructor == 0) {
+ memcpy(args->closure, closure_object, size);
+ }
+ else {
+ copy_constructor(args->closure, closure_object);
+ }
+
+ myo_wrapper.Release();
+ myo_wrapper.GetResult(
+ myo_wrapper.RemoteCall("__intel_cilk_for_64_offload", args,
+ target_number)
+ );
+ myo_wrapper.Acquire();
+
+ _Offload_shared_free(args);
+
+ ORSL::release(target_number);
+ }
+ else {
+ __cilkrts_cilk_for_64(raddr,
+ closure_object,
+ iters,
+ grain_size);
+ }
+}
diff --git a/final/offload/src/offload_myo_host.h b/final/offload/src/offload_myo_host.h
new file mode 100644
index 0000000..92a61f4
--- /dev/null
+++ b/final/offload/src/offload_myo_host.h
@@ -0,0 +1,80 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_MYO_HOST_H_INCLUDED
+#define OFFLOAD_MYO_HOST_H_INCLUDED
+
+#include <myotypes.h>
+#include <myoimpl.h>
+#include <myo.h>
+#include "offload.h"
+
+typedef MyoiSharedVarEntry SharedTableEntry;
+//typedef MyoiHostSharedFptrEntry FptrTableEntry;
+typedef struct {
+ //! Function Name
+ const char *funcName;
+ //! Function Address
+ void *funcAddr;
+ //! Local Thunk Address
+ void *localThunkAddr;
+#ifdef TARGET_WINNT
+ // Dummy to pad up to 32 bytes
+ void *dummy;
+#endif // TARGET_WINNT
+} FptrTableEntry;
+
+struct InitTableEntry {
+#ifdef TARGET_WINNT
+ // Dummy to pad up to 16 bytes
+ // Function Name
+ const char *funcName;
+#endif // TARGET_WINNT
+ void (*func)(void);
+};
+
+#ifdef TARGET_WINNT
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_START ".MyoSharedTable$a"
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_END ".MyoSharedTable$z"
+
+#define OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_START ".MyoSharedInitTable$a"
+#define OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_END ".MyoSharedInitTable$z"
+
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_START ".MyoFptrTable$a"
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_END ".MyoFptrTable$z"
+#else // TARGET_WINNT
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_START ".MyoSharedTable."
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_END ".MyoSharedTable."
+
+#define OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_START ".MyoSharedInitTable."
+#define OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_END ".MyoSharedInitTable."
+
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_START ".MyoFptrTable."
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_END ".MyoFptrTable."
+#endif // TARGET_WINNT
+
+#pragma section(OFFLOAD_MYO_SHARED_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_MYO_SHARED_TABLE_SECTION_END, read, write)
+
+#pragma section(OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_END, read, write)
+
+#pragma section(OFFLOAD_MYO_FPTR_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_MYO_FPTR_TABLE_SECTION_END, read, write)
+
+extern "C" void __offload_myoRegisterTables(
+ InitTableEntry *init_table,
+ SharedTableEntry *shared_table,
+ FptrTableEntry *fptr_table
+);
+
+extern void __offload_myoFini(void);
+
+#endif // OFFLOAD_MYO_HOST_H_INCLUDED
diff --git a/final/offload/src/offload_myo_target.cpp b/final/offload/src/offload_myo_target.cpp
new file mode 100644
index 0000000..eeb1c4f
--- /dev/null
+++ b/final/offload/src/offload_myo_target.cpp
@@ -0,0 +1,184 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_myo_target.h"
+#include "offload_target.h"
+
+extern "C" void __cilkrts_cilk_for_32(void*, void*, uint32_t, int32_t);
+extern "C" void __cilkrts_cilk_for_64(void*, void*, uint64_t, int32_t);
+
+#pragma weak __cilkrts_cilk_for_32
+#pragma weak __cilkrts_cilk_for_64
+
+static void CheckResult(const char *func, MyoError error) {
+ if (error != MYO_SUCCESS) {
+ LIBOFFLOAD_ERROR(c_myotarget_checkresult, func, error);
+ exit(1);
+ }
+}
+
+static void __offload_myo_shared_table_register(SharedTableEntry *entry)
+{
+ int entries = 0;
+ SharedTableEntry *t_start;
+
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ t_start = entry;
+ while (t_start->varName != 0) {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_mic_myo_shared,
+ "myo shared entry name = \"%s\" addr = %p\n",
+ t_start->varName, t_start->sharedAddr);
+ t_start++;
+ entries++;
+ }
+
+ if (entries > 0) {
+ OFFLOAD_DEBUG_TRACE(3, "myoiMicVarTableRegister(%p, %d)\n", entry,
+ entries);
+ CheckResult("myoiMicVarTableRegister",
+ myoiMicVarTableRegister(entry, entries));
+ }
+}
+
+static void __offload_myo_fptr_table_register(
+ FptrTableEntry *entry
+)
+{
+ int entries = 0;
+ FptrTableEntry *t_start;
+
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, entry);
+
+ t_start = entry;
+ while (t_start->funcName != 0) {
+ OFFLOAD_DEBUG_TRACE_1(4, 0, c_offload_mic_myo_fptr,
+ "myo fptr entry name = \"%s\" addr = %p\n",
+ t_start->funcName, t_start->funcAddr);
+ t_start++;
+ entries++;
+ }
+
+ if (entries > 0) {
+ OFFLOAD_DEBUG_TRACE(3, "myoiTargetFptrTableRegister(%p, %d, 0)\n",
+ entry, entries);
+ CheckResult("myoiTargetFptrTableRegister",
+ myoiTargetFptrTableRegister(entry, entries, 0));
+ }
+}
+
+extern "C" void __offload_myoAcquire(void)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+ CheckResult("myoAcquire", myoAcquire());
+}
+
+extern "C" void __offload_myoRelease(void)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+ CheckResult("myoRelease", myoRelease());
+}
+
+extern "C" void __intel_cilk_for_32_offload_wrapper(void *args_)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ struct S {
+ void *M1;
+ unsigned int M2;
+ unsigned int M3;
+ char closure[];
+ } *args = (struct S*) args_;
+
+ __cilkrts_cilk_for_32(args->M1, args->closure, args->M2, args->M3);
+}
+
+extern "C" void __intel_cilk_for_64_offload_wrapper(void *args_)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ struct S {
+ void *M1;
+ uint64_t M2;
+ uint64_t M3;
+ char closure[];
+ } *args = (struct S*) args_;
+
+ __cilkrts_cilk_for_64(args->M1, args->closure, args->M2, args->M3);
+}
+
+static void __offload_myo_once_init(void)
+{
+ CheckResult("myoiRemoteFuncRegister",
+ myoiRemoteFuncRegister(
+ (MyoiRemoteFuncType) __intel_cilk_for_32_offload_wrapper,
+ "__intel_cilk_for_32_offload"));
+ CheckResult("myoiRemoteFuncRegister",
+ myoiRemoteFuncRegister(
+ (MyoiRemoteFuncType) __intel_cilk_for_64_offload_wrapper,
+ "__intel_cilk_for_64_offload"));
+}
+
+extern "C" void __offload_myoRegisterTables(
+ SharedTableEntry *shared_table,
+ FptrTableEntry *fptr_table
+)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);
+
+ // one time registration of Intel(R) Cilk(TM) language entries
+ static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+ pthread_once(&once_control, __offload_myo_once_init);
+
+ // register module's tables
+ if (shared_table->varName == 0 && fptr_table->funcName == 0) {
+ return;
+ }
+
+ __offload_myo_shared_table_register(shared_table);
+ __offload_myo_fptr_table_register(fptr_table);
+}
+
+extern "C" void* _Offload_shared_malloc(size_t size)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%lld)\n", __func__, size);
+ return myoSharedMalloc(size);
+}
+
+extern "C" void _Offload_shared_free(void *ptr)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, ptr);
+ myoSharedFree(ptr);
+}
+
+extern "C" void* _Offload_shared_aligned_malloc(size_t size, size_t align)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%lld, %lld)\n", __func__, size, align);
+ return myoSharedAlignedMalloc(size, align);
+}
+
+extern "C" void _Offload_shared_aligned_free(void *ptr)
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, ptr);
+ myoSharedAlignedFree(ptr);
+}
+
+// temporary workaround for blocking behavior of myoiLibInit/Fini calls
+extern "C" void __offload_myoLibInit()
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s()\n", __func__);
+ CheckResult("myoiLibInit", myoiLibInit(0, 0));
+}
+
+extern "C" void __offload_myoLibFini()
+{
+ OFFLOAD_DEBUG_TRACE(3, "%s()\n", __func__);
+ myoiLibFini();
+}
diff --git a/final/offload/src/offload_myo_target.h b/final/offload/src/offload_myo_target.h
new file mode 100644
index 0000000..8b7f789
--- /dev/null
+++ b/final/offload/src/offload_myo_target.h
@@ -0,0 +1,54 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_MYO_TARGET_H_INCLUDED
+#define OFFLOAD_MYO_TARGET_H_INCLUDED
+
+#include <myotypes.h>
+#include <myoimpl.h>
+#include <myo.h>
+#include "offload.h"
+
+typedef MyoiSharedVarEntry SharedTableEntry;
+typedef MyoiTargetSharedFptrEntry FptrTableEntry;
+
+#ifdef TARGET_WINNT
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_START ".MyoSharedTable$a"
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_END ".MyoSharedTable$z"
+
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_START ".MyoFptrTable$a"
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_END ".MyoFptrTable$z"
+#else // TARGET_WINNT
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_START ".MyoSharedTable."
+#define OFFLOAD_MYO_SHARED_TABLE_SECTION_END ".MyoSharedTable."
+
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_START ".MyoFptrTable."
+#define OFFLOAD_MYO_FPTR_TABLE_SECTION_END ".MyoFptrTable."
+#endif // TARGET_WINNT
+
+#pragma section(OFFLOAD_MYO_SHARED_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_MYO_SHARED_TABLE_SECTION_END, read, write)
+
+#pragma section(OFFLOAD_MYO_FPTR_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_MYO_FPTR_TABLE_SECTION_END, read, write)
+
+extern "C" void __offload_myoRegisterTables(
+ SharedTableEntry *shared_table,
+ FptrTableEntry *fptr_table
+);
+
+extern "C" void __offload_myoAcquire(void);
+extern "C" void __offload_myoRelease(void);
+
+// temporary workaround for blocking behavior for myoiLibInit/Fini calls
+extern "C" void __offload_myoLibInit();
+extern "C" void __offload_myoLibFini();
+
+#endif // OFFLOAD_MYO_TARGET_H_INCLUDED
diff --git a/final/offload/src/offload_omp_host.cpp b/final/offload/src/offload_omp_host.cpp
new file mode 100644
index 0000000..edd4445
--- /dev/null
+++ b/final/offload/src/offload_omp_host.cpp
@@ -0,0 +1,851 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <omp.h>
+#include "offload.h"
+#include "compiler_if_host.h"
+
+// OpenMP API
+
+void omp_set_default_device(int num)
+{
+ if (num >= 0) {
+ __omp_device_num = num;
+ }
+}
+
+int omp_get_default_device(void)
+{
+ return __omp_device_num;
+}
+
+int omp_get_num_devices()
+{
+ __offload_init_library();
+ return mic_engines_total;
+}
+
+// OpenMP API wrappers
+
+static void omp_set_int_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int setting,
+ const char* f_name
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ f_name, 0);
+ if (ofld) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(int);
+ vars[0].count = 1;
+ vars[0].ptr = &setting;
+
+ OFFLOAD_OFFLOAD(ofld, f_name, 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+static int omp_get_int_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ const char * f_name
+)
+{
+ int setting = 0;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ f_name, 0);
+ if (ofld) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].size = sizeof(int);
+ vars[0].count = 1;
+ vars[0].ptr = &setting;
+
+ OFFLOAD_OFFLOAD(ofld, f_name, 0, 1, vars, NULL, 0, 0, 0);
+ }
+ return setting;
+}
+
+void omp_set_num_threads_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+)
+{
+ omp_set_int_target(target_type, target_number, num_threads,
+ "omp_set_num_threads_target");
+}
+
+int omp_get_max_threads_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "omp_get_max_threads_target");
+}
+
+int omp_get_num_procs_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "omp_get_num_procs_target");
+}
+
+void omp_set_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+)
+{
+ omp_set_int_target(target_type, target_number, num_threads,
+ "omp_set_dynamic_target");
+}
+
+int omp_get_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "omp_get_dynamic_target");
+}
+
+void omp_set_nested_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int nested
+)
+{
+ omp_set_int_target(target_type, target_number, nested,
+ "omp_set_nested_target");
+}
+
+int omp_get_nested_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "omp_get_nested_target");
+}
+
+void omp_set_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t kind,
+ int modifier
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(omp_sched_t);
+ vars[0].count = 1;
+ vars[0].ptr = &kind;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_in;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = &modifier;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_set_schedule_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_get_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t *kind,
+ int *modifier
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].size = sizeof(omp_sched_t);
+ vars[0].count = 1;
+ vars[0].ptr = kind;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = modifier;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_get_schedule_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+}
+
+// lock API functions
+
+void omp_init_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].size = sizeof(omp_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_init_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_destroy_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(omp_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_destroy_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_set_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_set_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_unset_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_unset_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+int omp_test_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ int result = 0;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_test_lock_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+// nested lock API functions
+
+void omp_init_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].size = sizeof(omp_nest_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_init_nest_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_destroy_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(omp_nest_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_destroy_nest_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_set_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_nest_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_set_nest_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void omp_unset_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_nest_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_unset_nest_lock_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+int omp_test_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ int result = 0;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(omp_nest_lock_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = lock;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "omp_test_nest_lock_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+// kmp API functions
+
+void kmp_set_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int size
+)
+{
+ omp_set_int_target(target_type, target_number, size,
+ "kmp_set_stacksize_target");
+}
+
+int kmp_get_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "kmp_get_stacksize_target");
+}
+
+void kmp_set_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ size_t size
+)
+{
+ omp_set_int_target(target_type, target_number, size,
+ "kmp_set_stacksize_s_target");
+}
+
+size_t kmp_get_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "kmp_get_stacksize_s_target");
+}
+
+void kmp_set_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int time
+)
+{
+ omp_set_int_target(target_type, target_number, time,
+ "kmp_set_blocktime_target");
+}
+
+int kmp_get_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "kmp_get_blocktime_target");
+}
+
+void kmp_set_library_serial_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_library_serial_target",
+ 0, 0, 0, 0, 0, 0, 0);
+ }
+}
+
+void kmp_set_library_turnaround_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_library_turnaround_target",
+ 0, 0, 0, 0, 0, 0, 0);
+ }
+}
+
+void kmp_set_library_throughput_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_library_throughput_target",
+ 0, 0, 0, 0, 0, 0, 0);
+ }
+}
+
+void kmp_set_library_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int mode
+)
+{
+ omp_set_int_target(target_type, target_number, mode,
+ "kmp_set_library_target");
+}
+
+int kmp_get_library_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "kmp_get_library_target");
+}
+
+void kmp_set_defaults_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ char const *defaults
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_string_ptr;
+ vars[0].type.dst = c_string_ptr;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].alloc_if = 1;
+ vars[0].free_if = 1;
+ vars[0].ptr = &defaults;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_defaults_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+// affinity API functions
+
+void kmp_create_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].size = sizeof(kmp_affinity_mask_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = mask;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_create_affinity_mask_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+void kmp_destroy_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(kmp_affinity_mask_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = mask;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_destroy_affinity_mask_target",
+ 0, 1, vars, NULL, 0, 0, 0);
+ }
+}
+
+int kmp_set_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ int result = 1;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(kmp_affinity_mask_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = mask;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_affinity_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+int kmp_get_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ int result = 1;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[2] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].size = sizeof(kmp_affinity_mask_target_t);
+ vars[0].count = 1;
+ vars[0].ptr = mask;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].size = sizeof(int);
+ vars[1].count = 1;
+ vars[1].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_get_affinity_target",
+ 0, 2, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+int kmp_get_affinity_max_proc_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return omp_get_int_target(target_type, target_number,
+ "kmp_get_affinity_max_proc_target");
+}
+
+int kmp_set_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ int result = 1;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[3] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(int);
+ vars[0].count = 1;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_inout;
+ vars[1].size = sizeof(kmp_affinity_mask_target_t);
+ vars[1].count = 1;
+ vars[1].ptr = mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].size = sizeof(int);
+ vars[2].count = 1;
+ vars[2].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_set_affinity_mask_proc_target",
+ 0, 3, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+int kmp_unset_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ int result = 1;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[3] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(int);
+ vars[0].count = 1;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_inout;
+ vars[1].size = sizeof(kmp_affinity_mask_target_t);
+ vars[1].count = 1;
+ vars[1].ptr = mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].size = sizeof(int);
+ vars[2].count = 1;
+ vars[2].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_unset_affinity_mask_proc_target",
+ 0, 3, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
+
+int kmp_get_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ int result = 1;
+
+ OFFLOAD ofld = OFFLOAD_TARGET_ACQUIRE(target_type, target_number, 0, NULL,
+ __func__, 0);
+ if (ofld != 0) {
+ VarDesc vars[3] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].size = sizeof(int);
+ vars[0].count = 1;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_in;
+ vars[1].size = sizeof(kmp_affinity_mask_target_t);
+ vars[1].count = 1;
+ vars[1].ptr = mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].size = sizeof(int);
+ vars[2].count = 1;
+ vars[2].ptr = &result;
+
+ OFFLOAD_OFFLOAD(ofld, "kmp_get_affinity_mask_proc_target",
+ 0, 3, vars, NULL, 0, 0, 0);
+ }
+ return result;
+}
diff --git a/final/offload/src/offload_omp_target.cpp b/final/offload/src/offload_omp_target.cpp
new file mode 100644
index 0000000..1f2052a
--- /dev/null
+++ b/final/offload/src/offload_omp_target.cpp
@@ -0,0 +1,1021 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <omp.h>
+#include "offload.h"
+#include "compiler_if_target.h"
+
+// OpenMP API
+
+void omp_set_default_device(int num)
+{
+}
+
+int omp_get_default_device(void)
+{
+ return mic_index;
+}
+
+int omp_get_num_devices()
+{
+ return mic_engines_total;
+}
+
+// OpenMP API wrappers
+
+static void omp_send_int_to_host(
+ void *ofld_,
+ int setting
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].ptr = &setting;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+static int omp_get_int_from_host(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ int setting;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &setting;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ OFFLOAD_TARGET_LEAVE(ofld);
+
+ return setting;
+}
+
+void omp_set_num_threads_lrb(
+ void *ofld
+)
+{
+ int num_threads;
+
+ num_threads = omp_get_int_from_host(ofld);
+ omp_set_num_threads(num_threads);
+}
+
+void omp_get_max_threads_lrb(
+ void *ofld
+)
+{
+ int num_threads;
+
+ num_threads = omp_get_max_threads();
+ omp_send_int_to_host(ofld, num_threads);
+}
+
+void omp_get_num_procs_lrb(
+ void *ofld
+)
+{
+ int num_procs;
+
+ num_procs = omp_get_num_procs();
+ omp_send_int_to_host(ofld, num_procs);
+}
+
+void omp_set_dynamic_lrb(
+ void *ofld
+)
+{
+ int dynamic;
+
+ dynamic = omp_get_int_from_host(ofld);
+ omp_set_dynamic(dynamic);
+}
+
+void omp_get_dynamic_lrb(
+ void *ofld
+)
+{
+ int dynamic;
+
+ dynamic = omp_get_dynamic();
+ omp_send_int_to_host(ofld, dynamic);
+}
+
+void omp_set_nested_lrb(
+ void *ofld
+)
+{
+ int nested;
+
+ nested = omp_get_int_from_host(ofld);
+ omp_set_nested(nested);
+}
+
+void omp_get_nested_lrb(
+ void *ofld
+)
+{
+ int nested;
+
+ nested = omp_get_nested();
+ omp_send_int_to_host(ofld, nested);
+}
+
+void omp_set_schedule_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ omp_sched_t kind;
+ int modifier;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &kind;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_in;
+ vars[1].ptr = &modifier;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ omp_set_schedule(kind, modifier);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_get_schedule_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ omp_sched_t kind;
+ int modifier;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].ptr = &kind;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].ptr = &modifier;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ omp_get_schedule(&kind, &modifier);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+// lock API functions
+
+void omp_init_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_init_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_destroy_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_destroy_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_set_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_set_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_unset_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_unset_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_test_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ omp_lock_target_t lock;
+ int result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ result = omp_test_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+// nested lock API functions
+
+void omp_init_nest_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_nest_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_init_nest_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_destroy_nest_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_nest_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_destroy_nest_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_set_nest_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_nest_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_set_nest_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_unset_nest_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ omp_nest_lock_target_t lock;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ omp_unset_nest_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void omp_test_nest_lock_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ omp_nest_lock_target_t lock;
+ int result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &lock;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ result = omp_test_nest_lock(&lock.lock);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+// kmp API functions
+
+void kmp_set_stacksize_lrb(
+ void *ofld
+)
+{
+ int size;
+
+ size = omp_get_int_from_host(ofld);
+ kmp_set_stacksize(size);
+}
+
+void kmp_get_stacksize_lrb(
+ void *ofld
+)
+{
+ int size;
+
+ size = kmp_get_stacksize();
+ omp_send_int_to_host(ofld, size);
+}
+
+void kmp_set_stacksize_s_lrb(
+ void *ofld
+)
+{
+ int size;
+
+ size = omp_get_int_from_host(ofld);
+ kmp_set_stacksize_s(size);
+}
+
+void kmp_get_stacksize_s_lrb(
+ void *ofld
+)
+{
+ int size;
+
+ size = kmp_get_stacksize_s();
+ omp_send_int_to_host(ofld, size);
+}
+
+void kmp_set_blocktime_lrb(
+ void *ofld
+)
+{
+ int time;
+
+ time = omp_get_int_from_host(ofld);
+ kmp_set_blocktime(time);
+}
+
+void kmp_get_blocktime_lrb(
+ void *ofld
+)
+{
+ int time;
+
+ time = kmp_get_blocktime();
+ omp_send_int_to_host(ofld, time);
+}
+
+void kmp_set_library_serial_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+
+ OFFLOAD_TARGET_ENTER(ofld, 0, 0, 0);
+ kmp_set_library_serial();
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_set_library_turnaround_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+
+ OFFLOAD_TARGET_ENTER(ofld, 0, 0, 0);
+ kmp_set_library_turnaround();
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_set_library_throughput_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+
+ OFFLOAD_TARGET_ENTER(ofld, 0, 0, 0);
+ kmp_set_library_throughput();
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_set_library_lrb(
+ void *ofld
+)
+{
+ int mode;
+
+ mode = omp_get_int_from_host(ofld);
+ kmp_set_library(mode);
+}
+
+void kmp_get_library_lrb(
+ void *ofld
+)
+{
+ int mode;
+
+ mode = kmp_get_library();
+ omp_send_int_to_host(ofld, mode);
+}
+
+void kmp_set_defaults_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ char *defaults = 0;
+
+ vars[0].type.src = c_string_ptr;
+ vars[0].type.dst = c_string_ptr;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &defaults;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ kmp_set_defaults(defaults);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+// affinity API functions
+
+void kmp_create_affinity_mask_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ kmp_affinity_mask_target_t mask;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_out;
+ vars[0].ptr = &mask;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ kmp_create_affinity_mask(&mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_destroy_affinity_mask_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[1] = {0};
+ kmp_affinity_mask_target_t mask;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &mask;
+
+ OFFLOAD_TARGET_ENTER(ofld, 1, vars, NULL);
+ kmp_destroy_affinity_mask(&mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_set_affinity_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ kmp_affinity_mask_target_t mask;
+ int result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &mask;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ result = kmp_set_affinity(&mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_get_affinity_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[2] = {0};
+ kmp_affinity_mask_target_t mask;
+ int result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_inout;
+ vars[0].ptr = &mask;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_out;
+ vars[1].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 2, vars, NULL);
+ result = kmp_get_affinity(&mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_get_affinity_max_proc_lrb(
+ void *ofld
+)
+{
+ int max_proc;
+
+ max_proc = kmp_get_affinity_max_proc();
+ omp_send_int_to_host(ofld, max_proc);
+}
+
+void kmp_set_affinity_mask_proc_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[3] = {0};
+ kmp_affinity_mask_target_t mask;
+ int proc, result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_inout;
+ vars[1].ptr = &mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 3, vars, NULL);
+ result = kmp_set_affinity_mask_proc(proc, &mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_unset_affinity_mask_proc_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[3] = {0};
+ kmp_affinity_mask_target_t mask;
+ int proc, result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_inout;
+ vars[1].ptr = &mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 3, vars, NULL);
+ result = kmp_unset_affinity_mask_proc(proc, &mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+void kmp_get_affinity_mask_proc_lrb(
+ void *ofld_
+)
+{
+ OFFLOAD ofld = (OFFLOAD) ofld_;
+ VarDesc vars[3] = {0};
+ kmp_affinity_mask_target_t mask;
+ int proc, result;
+
+ vars[0].type.src = c_data;
+ vars[0].type.dst = c_data;
+ vars[0].direction.bits = c_parameter_in;
+ vars[0].ptr = &proc;
+
+ vars[1].type.src = c_data;
+ vars[1].type.dst = c_data;
+ vars[1].direction.bits = c_parameter_in;
+ vars[1].ptr = &mask;
+
+ vars[2].type.src = c_data;
+ vars[2].type.dst = c_data;
+ vars[2].direction.bits = c_parameter_out;
+ vars[2].ptr = &result;
+
+ OFFLOAD_TARGET_ENTER(ofld, 3, vars, NULL);
+ result = kmp_get_affinity_mask_proc(proc, &mask.mask);
+ OFFLOAD_TARGET_LEAVE(ofld);
+}
+
+// Target-side stubs for the host functions (to avoid unresolveds)
+// These are needed for the offloadm table
+
+void omp_set_num_threads_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+)
+{
+}
+
+int omp_get_max_threads_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+int omp_get_num_procs_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void omp_set_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+)
+{
+}
+
+int omp_get_dynamic_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void omp_set_nested_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int num_threads
+)
+{
+}
+
+int omp_get_nested_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void omp_set_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t kind,
+ int modifier
+)
+{
+}
+
+void omp_get_schedule_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_sched_t *kind,
+ int *modifier
+)
+{
+}
+
+void omp_init_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+}
+
+void omp_destroy_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+}
+
+void omp_set_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+}
+
+void omp_unset_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+}
+
+int omp_test_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_lock_target_t *lock
+)
+{
+ return 0;
+}
+
+void omp_init_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+}
+
+void omp_destroy_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+}
+
+void omp_set_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+}
+
+void omp_unset_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+}
+
+int omp_test_nest_lock_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ omp_nest_lock_target_t *lock
+)
+{
+ return 0;
+}
+
+void kmp_set_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int size
+)
+{
+}
+
+int kmp_get_stacksize_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void kmp_set_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ size_t size
+)
+{
+}
+
+size_t kmp_get_stacksize_s_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void kmp_set_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int time
+)
+{
+}
+
+int kmp_get_blocktime_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void kmp_set_library_serial_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+}
+
+void kmp_set_library_turnaround_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+}
+
+void kmp_set_library_throughput_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+}
+
+void kmp_set_library_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int mode
+)
+{
+}
+
+int kmp_get_library_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+void kmp_set_defaults_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ char const *defaults
+)
+{
+}
+
+void kmp_create_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+}
+
+void kmp_destroy_affinity_mask_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+}
+
+int kmp_set_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ return 0;
+}
+
+int kmp_get_affinity_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ return 0;
+}
+
+int kmp_get_affinity_max_proc_target(
+ TARGET_TYPE target_type,
+ int target_number
+)
+{
+ return 0;
+}
+
+int kmp_set_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ return 0;
+}
+
+int kmp_unset_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ return 0;
+}
+
+int kmp_get_affinity_mask_proc_target(
+ TARGET_TYPE target_type,
+ int target_number,
+ int proc,
+ kmp_affinity_mask_target_t *mask
+)
+{
+ return 0;
+}
diff --git a/final/offload/src/offload_orsl.cpp b/final/offload/src/offload_orsl.cpp
new file mode 100644
index 0000000..6162f8a
--- /dev/null
+++ b/final/offload/src/offload_orsl.cpp
@@ -0,0 +1,84 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_orsl.h"
+#include <stdlib.h>
+#include "offload_host.h"
+#include "orsl-lite/include/orsl-lite.h"
+
+namespace ORSL {
+
+static bool is_enabled = false;
+static const ORSLTag my_tag = "Offload";
+
+void init()
+{
+ const char *env_var = getenv("OFFLOAD_ENABLE_ORSL");
+ if (env_var != 0 && *env_var != '\0') {
+ int64_t new_val;
+ if (__offload_parse_int_string(env_var, new_val)) {
+ is_enabled = new_val;
+ }
+ else {
+ LIBOFFLOAD_ERROR(c_invalid_env_var_int_value,
+ "OFFLOAD_ENABLE_ORSL");
+ }
+ }
+
+ if (is_enabled) {
+ OFFLOAD_DEBUG_TRACE(2, "ORSL is enabled\n");
+ }
+ else {
+ OFFLOAD_DEBUG_TRACE(2, "ORSL is disabled\n");
+ }
+}
+
+bool reserve(int device)
+{
+ if (is_enabled) {
+ int pnum = mic_engines[device].get_physical_index();
+ ORSLBusySet bset;
+
+ bset.type = BUSY_SET_FULL;
+ if (ORSLReserve(1, &pnum, &bset, my_tag) != 0) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool try_reserve(int device)
+{
+ if (is_enabled) {
+ int pnum = mic_engines[device].get_physical_index();
+ ORSLBusySet bset;
+
+ bset.type = BUSY_SET_FULL;
+ if (ORSLTryReserve(1, &pnum, &bset, my_tag) != 0) {
+ return false;
+ }
+ }
+ return true;
+}
+
+void release(int device)
+{
+ if (is_enabled) {
+ int pnum = mic_engines[device].get_physical_index();
+ ORSLBusySet bset;
+
+ bset.type = BUSY_SET_FULL;
+ if (ORSLRelease(1, &pnum, &bset, my_tag) != 0) {
+ // should never get here
+ }
+ }
+}
+
+} // namespace ORSL
diff --git a/final/offload/src/offload_orsl.h b/final/offload/src/offload_orsl.h
new file mode 100644
index 0000000..cdb86f9
--- /dev/null
+++ b/final/offload/src/offload_orsl.h
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_ORSL_H_INCLUDED
+#define OFFLOAD_ORSL_H_INCLUDED
+
+// ORSL interface
+namespace ORSL {
+
+extern void init();
+
+extern bool reserve(int device);
+extern bool try_reserve(int device);
+extern void release(int device);
+
+} // namespace ORSL
+
+#endif // OFFLOAD_ORSL_H_INCLUDED
diff --git a/final/offload/src/offload_table.cpp b/final/offload/src/offload_table.cpp
new file mode 100644
index 0000000..cf165df
--- /dev/null
+++ b/final/offload/src/offload_table.cpp
@@ -0,0 +1,375 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_table.h"
+#include "offload_common.h"
+
+#if !HOST_LIBRARY
+// Predefined offload entries
+extern void omp_set_num_threads_lrb(void*);
+extern void omp_get_max_threads_lrb(void*);
+extern void omp_get_num_procs_lrb(void*);
+extern void omp_set_dynamic_lrb(void*);
+extern void omp_get_dynamic_lrb(void*);
+extern void omp_set_nested_lrb(void*);
+extern void omp_get_nested_lrb(void*);
+extern void omp_set_schedule_lrb(void*);
+extern void omp_get_schedule_lrb(void*);
+
+extern void omp_init_lock_lrb(void*);
+extern void omp_destroy_lock_lrb(void*);
+extern void omp_set_lock_lrb(void*);
+extern void omp_unset_lock_lrb(void*);
+extern void omp_test_lock_lrb(void*);
+
+extern void omp_init_nest_lock_lrb(void*);
+extern void omp_destroy_nest_lock_lrb(void*);
+extern void omp_set_nest_lock_lrb(void*);
+extern void omp_unset_nest_lock_lrb(void*);
+extern void omp_test_nest_lock_lrb(void*);
+
+extern void kmp_set_stacksize_lrb(void*);
+extern void kmp_get_stacksize_lrb(void*);
+extern void kmp_set_stacksize_s_lrb(void*);
+extern void kmp_get_stacksize_s_lrb(void*);
+extern void kmp_set_blocktime_lrb(void*);
+extern void kmp_get_blocktime_lrb(void*);
+extern void kmp_set_library_serial_lrb(void*);
+extern void kmp_set_library_turnaround_lrb(void*);
+extern void kmp_set_library_throughput_lrb(void*);
+extern void kmp_set_library_lrb(void*);
+extern void kmp_get_library_lrb(void*);
+extern void kmp_set_defaults_lrb(void*);
+
+extern void kmp_create_affinity_mask_lrb(void*);
+extern void kmp_destroy_affinity_mask_lrb(void*);
+extern void kmp_set_affinity_lrb(void*);
+extern void kmp_get_affinity_lrb(void*);
+extern void kmp_get_affinity_max_proc_lrb(void*);
+extern void kmp_set_affinity_mask_proc_lrb(void*);
+extern void kmp_unset_affinity_mask_proc_lrb(void*);
+extern void kmp_get_affinity_mask_proc_lrb(void*);
+
+// Predefined entries on the target side
+static FuncTable::Entry predefined_entries[] = {
+ "omp_set_num_threads_target",
+ (void*) &omp_set_num_threads_lrb,
+ "omp_get_max_threads_target",
+ (void*) &omp_get_max_threads_lrb,
+ "omp_get_num_procs_target",
+ (void*) &omp_get_num_procs_lrb,
+ "omp_set_dynamic_target",
+ (void*) &omp_set_dynamic_lrb,
+ "omp_get_dynamic_target",
+ (void*) &omp_get_dynamic_lrb,
+ "omp_set_nested_target",
+ (void*) &omp_set_nested_lrb,
+ "omp_get_nested_target",
+ (void*) &omp_get_nested_lrb,
+ "omp_set_schedule_target",
+ (void*) &omp_set_schedule_lrb,
+ "omp_get_schedule_target",
+ (void*) &omp_get_schedule_lrb,
+
+ "omp_init_lock_target",
+ (void*) &omp_init_lock_lrb,
+ "omp_destroy_lock_target",
+ (void*) &omp_destroy_lock_lrb,
+ "omp_set_lock_target",
+ (void*) &omp_set_lock_lrb,
+ "omp_unset_lock_target",
+ (void*) &omp_unset_lock_lrb,
+ "omp_test_lock_target",
+ (void*) &omp_test_lock_lrb,
+
+ "omp_init_nest_lock_target",
+ (void*) &omp_init_nest_lock_lrb,
+ "omp_destroy_nest_lock_target",
+ (void*) &omp_destroy_nest_lock_lrb,
+ "omp_set_nest_lock_target",
+ (void*) &omp_set_nest_lock_lrb,
+ "omp_unset_nest_lock_target",
+ (void*) &omp_unset_nest_lock_lrb,
+ "omp_test_nest_lock_target",
+ (void*) &omp_test_nest_lock_lrb,
+
+ "kmp_set_stacksize_target",
+ (void*) &kmp_set_stacksize_lrb,
+ "kmp_get_stacksize_target",
+ (void*) &kmp_get_stacksize_lrb,
+ "kmp_set_stacksize_s_target",
+ (void*) &kmp_set_stacksize_s_lrb,
+ "kmp_get_stacksize_s_target",
+ (void*) &kmp_get_stacksize_s_lrb,
+ "kmp_set_blocktime_target",
+ (void*) &kmp_set_blocktime_lrb,
+ "kmp_get_blocktime_target",
+ (void*) &kmp_get_blocktime_lrb,
+ "kmp_set_library_serial_target",
+ (void*) &kmp_set_library_serial_lrb,
+ "kmp_set_library_turnaround_target",
+ (void*) &kmp_set_library_turnaround_lrb,
+ "kmp_set_library_throughput_target",
+ (void*) &kmp_set_library_throughput_lrb,
+ "kmp_set_library_target",
+ (void*) &kmp_set_library_lrb,
+ "kmp_get_library_target",
+ (void*) &kmp_get_library_lrb,
+ "kmp_set_defaults_target",
+ (void*) &kmp_set_defaults_lrb,
+
+ "kmp_create_affinity_mask_target",
+ (void*) &kmp_create_affinity_mask_lrb,
+ "kmp_destroy_affinity_mask_target",
+ (void*) &kmp_destroy_affinity_mask_lrb,
+ "kmp_set_affinity_target",
+ (void*) &kmp_set_affinity_lrb,
+ "kmp_get_affinity_target",
+ (void*) &kmp_get_affinity_lrb,
+ "kmp_get_affinity_max_proc_target",
+ (void*) &kmp_get_affinity_max_proc_lrb,
+ "kmp_set_affinity_mask_proc_target",
+ (void*) &kmp_set_affinity_mask_proc_lrb,
+ "kmp_unset_affinity_mask_proc_target",
+ (void*) &kmp_unset_affinity_mask_proc_lrb,
+ "kmp_get_affinity_mask_proc_target",
+ (void*) &kmp_get_affinity_mask_proc_lrb,
+
+ (const char*) -1,
+ (void*) -1
+};
+
+static FuncList::Node predefined_table = {
+ { predefined_entries, -1 },
+ 0, 0
+};
+
+// Entry table
+FuncList __offload_entries(&predefined_table);
+#else
+FuncList __offload_entries;
+#endif // !HOST_LIBRARY
+
+// Function table. No predefined entries.
+FuncList __offload_funcs;
+
+// Var table
+VarList __offload_vars;
+
+// Given the function name returns the associtated function pointer
+const void* FuncList::find_addr(const char *name)
+{
+ const void* func = 0;
+
+ m_lock.lock();
+
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0 && strcmp(e->name, name) == 0) {
+ func = e->func;
+ break;
+ }
+ }
+ }
+
+ m_lock.unlock();
+
+ return func;
+}
+
+// Given the function pointer returns the associtated function name
+const char* FuncList::find_name(const void *func)
+{
+ const char* name = 0;
+
+ m_lock.lock();
+
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->func == func) {
+ name = e->name;
+ break;
+ }
+ }
+ }
+
+ m_lock.unlock();
+
+ return name;
+}
+
+// Returns max name length from all tables
+int64_t FuncList::max_name_length(void)
+{
+ if (m_max_name_len < 0) {
+ m_lock.lock();
+
+ m_max_name_len = 0;
+ for (Node *n = m_head; n != 0; n = n->next) {
+ if (n->table.max_name_len < 0) {
+ n->table.max_name_len = 0;
+
+ // calculate max name length in a single table
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0) {
+ size_t len = strlen(e->name) + 1;
+ if (n->table.max_name_len < len) {
+ n->table.max_name_len = len;
+ }
+ }
+ }
+ }
+
+ // select max from all tables
+ if (m_max_name_len < n->table.max_name_len) {
+ m_max_name_len = n->table.max_name_len;
+ }
+ }
+
+ m_lock.unlock();
+ }
+ return m_max_name_len;
+}
+
+// Debugging dump
+void FuncList::dump(void)
+{
+ OFFLOAD_DEBUG_TRACE(2, "Function table:\n");
+
+ m_lock.lock();
+
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0) {
+ OFFLOAD_DEBUG_TRACE(2, "%p %s\n", e->func, e->name);
+ }
+ }
+ }
+
+ m_lock.unlock();
+}
+
+// Debugging dump
+void VarList::dump(void)
+{
+ OFFLOAD_DEBUG_TRACE(2, "Var table:\n");
+
+ m_lock.lock();
+
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0) {
+#if HOST_LIBRARY
+ OFFLOAD_DEBUG_TRACE(2, "%s %p %ld\n", e->name, e->addr,
+ e->size);
+#else // HOST_LIBRARY
+ OFFLOAD_DEBUG_TRACE(2, "%s %p\n", e->name, e->addr);
+#endif // HOST_LIBRARY
+ }
+ }
+ }
+
+ m_lock.unlock();
+}
+
+//
+int64_t VarList::table_size(int64_t &nelems)
+{
+ int64_t length = 0;
+
+ nelems = 0;
+
+ // calculate string table size and number of elements
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0) {
+ length += strlen(e->name) + 1;
+ nelems++;
+ }
+ }
+ }
+
+ return nelems * sizeof(BufEntry) + length;
+}
+
+// copy table to the gven buffer
+void VarList::table_copy(void *buf, int64_t nelems)
+{
+ BufEntry* elems = static_cast<BufEntry*>(buf);
+ char* names = reinterpret_cast<char*>(elems + nelems);
+
+ // copy entries to buffer
+ for (Node *n = m_head; n != 0; n = n->next) {
+ for (const Table::Entry *e = n->table.entries;
+ e->name != (const char*) -1; e++) {
+ if (e->name != 0) {
+ // name field contains offset to the name from the beginning
+ // of the buffer
+ elems->name = names - static_cast<char*>(buf);
+ elems->addr = reinterpret_cast<intptr_t>(e->addr);
+
+ // copy name to string table
+ const char *name = e->name;
+ while ((*names++ = *name++) != '\0');
+
+ elems++;
+ }
+ }
+ }
+}
+
+// patch name offsets in a buffer
+void VarList::table_patch_names(void *buf, int64_t nelems)
+{
+ BufEntry* elems = static_cast<BufEntry*>(buf);
+ for (int i = 0; i < nelems; i++) {
+ elems[i].name += reinterpret_cast<intptr_t>(buf);
+ }
+}
+
+// Adds given list element to the global lookup table list
+extern "C" void __offload_register_tables(
+ FuncList::Node *entry_table,
+ FuncList::Node *func_table,
+ VarList::Node *var_table
+)
+{
+ OFFLOAD_DEBUG_TRACE(2, "Registering offload function entry table %p\n",
+ entry_table);
+ __offload_entries.add_table(entry_table);
+
+ OFFLOAD_DEBUG_TRACE(2, "Registering function table %p\n", func_table);
+ __offload_funcs.add_table(func_table);
+
+ OFFLOAD_DEBUG_TRACE(2, "Registering var table %p\n", var_table);
+ __offload_vars.add_table(var_table);
+}
+
+// Removes given list element from the global lookup table list
+extern "C" void __offload_unregister_tables(
+ FuncList::Node *entry_table,
+ FuncList::Node *func_table,
+ VarList::Node *var_table
+)
+{
+ __offload_entries.remove_table(entry_table);
+
+ OFFLOAD_DEBUG_TRACE(2, "Unregistering function table %p\n", func_table);
+ __offload_funcs.remove_table(func_table);
+
+ OFFLOAD_DEBUG_TRACE(2, "Unregistering var table %p\n", var_table);
+ __offload_vars.remove_table(var_table);
+}
diff --git a/final/offload/src/offload_table.h b/final/offload/src/offload_table.h
new file mode 100644
index 0000000..cfced3e
--- /dev/null
+++ b/final/offload/src/offload_table.h
@@ -0,0 +1,301 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! \file
+ \brief Function and Variable tables used by the runtime library
+*/
+
+#ifndef OFFLOAD_TABLE_H_INCLUDED
+#define OFFLOAD_TABLE_H_INCLUDED
+
+#include <iterator>
+#include "offload_util.h"
+
+// Template representing double linked list of tables
+template <typename T> class TableList {
+public:
+ // table type
+ typedef T Table;
+
+ // List node
+ struct Node {
+ Table table;
+ Node* prev;
+ Node* next;
+ };
+
+public:
+ explicit TableList(Node *node = 0) : m_head(node) {}
+
+ void add_table(Node *node) {
+ m_lock.lock();
+
+ if (m_head != 0) {
+ node->next = m_head;
+ m_head->prev = node;
+ }
+ m_head = node;
+
+ m_lock.unlock();
+ }
+
+ void remove_table(Node *node) {
+ m_lock.lock();
+
+ if (node->next != 0) {
+ node->next->prev = node->prev;
+ }
+ if (node->prev != 0) {
+ node->prev->next = node->next;
+ }
+ if (m_head == node) {
+ m_head = node->next;
+ }
+
+ m_lock.unlock();
+ }
+
+protected:
+ Node* m_head;
+ mutex_t m_lock;
+};
+
+// Function lookup table.
+struct FuncTable {
+ //! Function table entry
+ /*! This table contains functions created from offload regions. */
+ /*! Each entry consists of a pointer to the function's "key"
+ and the function address. */
+ /*! Each shared library or executable may contain one such table. */
+ /*! The end of the table is marked with an entry whose name field
+ has value -1. */
+ struct Entry {
+ const char* name; //!< Name of the function
+ void* func; //!< Address of the function
+ };
+
+ // entries
+ const Entry *entries;
+
+ // max name length
+ int64_t max_name_len;
+};
+
+// Function table
+class FuncList : public TableList<FuncTable> {
+public:
+ explicit FuncList(Node *node = 0) : TableList<Table>(node),
+ m_max_name_len(-1)
+ {}
+
+ // add table to the list
+ void add_table(Node *node) {
+ // recalculate max function name length
+ m_max_name_len = -1;
+
+ // add table
+ TableList<Table>::add_table(node);
+ }
+
+ // find function address for the given name
+ const void* find_addr(const char *name);
+
+ // find function name for the given address
+ const char* find_name(const void *addr);
+
+ // max name length from all tables in the list
+ int64_t max_name_length(void);
+
+ // debug dump
+ void dump(void);
+
+private:
+ // max name length within from all tables
+ int64_t m_max_name_len;
+};
+
+// Table entry for static variables
+struct VarTable {
+ //! Variable table entry
+ /*! This table contains statically allocated variables marked with
+ __declspec(target(mic) or #pragma omp declare target. */
+ /*! Each entry consists of a pointer to the variable's "key",
+ the variable address and its size in bytes. */
+ /*! Because memory allocation is done from the host,
+ the MIC table does not need the size of the variable. */
+ /*! Padding to make the table entry size a power of 2 is necessary
+ to avoid "holes" between table contributions from different object
+ files on Windows when debug information is specified with /Zi. */
+ struct Entry {
+ const char* name; //!< Name of the variable
+ void* addr; //!< Address of the variable
+
+#if HOST_LIBRARY
+ uint64_t size;
+
+#ifdef TARGET_WINNT
+ // padding to make entry size a power of 2
+ uint64_t padding;
+#endif // TARGET_WINNT
+#endif
+ };
+
+ // Table terminated by an entry with name == -1
+ const Entry *entries;
+};
+
+// List of var tables
+class VarList : public TableList<VarTable> {
+public:
+ VarList() : TableList<Table>()
+ {}
+
+ // debug dump
+ void dump();
+
+public:
+ // var table list iterator
+ class Iterator : public std::iterator<std::input_iterator_tag,
+ Table::Entry> {
+ public:
+ Iterator() : m_node(0), m_entry(0) {}
+
+ explicit Iterator(Node *node) {
+ new_node(node);
+ }
+
+ Iterator& operator++() {
+ if (m_entry != 0) {
+ m_entry++;
+ while (m_entry->name == 0) {
+ m_entry++;
+ }
+ if (m_entry->name == reinterpret_cast<const char*>(-1)) {
+ new_node(m_node->next);
+ }
+ }
+ return *this;
+ }
+
+ bool operator==(const Iterator &other) const {
+ return m_entry == other.m_entry;
+ }
+
+ bool operator!=(const Iterator &other) const {
+ return m_entry != other.m_entry;
+ }
+
+ const Table::Entry* operator*() const {
+ return m_entry;
+ }
+
+ private:
+ void new_node(Node *node) {
+ m_node = node;
+ m_entry = 0;
+ while (m_node != 0) {
+ m_entry = m_node->table.entries;
+ while (m_entry->name == 0) {
+ m_entry++;
+ }
+ if (m_entry->name != reinterpret_cast<const char*>(-1)) {
+ break;
+ }
+ m_node = m_node->next;
+ m_entry = 0;
+ }
+ }
+
+ private:
+ Node *m_node;
+ const Table::Entry *m_entry;
+ };
+
+ Iterator begin() const {
+ return Iterator(m_head);
+ }
+
+ Iterator end() const {
+ return Iterator();
+ }
+
+public:
+ // Entry representation in a copy buffer
+ struct BufEntry {
+ intptr_t name;
+ intptr_t addr;
+ };
+
+ // Calculate the number of elements in the table and
+ // returns the size of buffer for the table
+ int64_t table_size(int64_t &nelems);
+
+ // Copy table contents to given buffer. It is supposed to be large
+ // enough to hold all elements as string table.
+ void table_copy(void *buf, int64_t nelems);
+
+ // Patch name offsets in a table after it's been copied to other side
+ static void table_patch_names(void *buf, int64_t nelems);
+};
+
+extern FuncList __offload_entries;
+extern FuncList __offload_funcs;
+extern VarList __offload_vars;
+
+// Section names where the lookup tables are stored
+#ifdef TARGET_WINNT
+#define OFFLOAD_ENTRY_TABLE_SECTION_START ".OffloadEntryTable$a"
+#define OFFLOAD_ENTRY_TABLE_SECTION_END ".OffloadEntryTable$z"
+
+#define OFFLOAD_FUNC_TABLE_SECTION_START ".OffloadFuncTable$a"
+#define OFFLOAD_FUNC_TABLE_SECTION_END ".OffloadFuncTable$z"
+
+#define OFFLOAD_VAR_TABLE_SECTION_START ".OffloadVarTable$a"
+#define OFFLOAD_VAR_TABLE_SECTION_END ".OffloadVarTable$z"
+
+#define OFFLOAD_CRTINIT_SECTION_START ".CRT$XCT"
+
+#pragma section(OFFLOAD_CRTINIT_SECTION_START, read)
+
+#else // TARGET_WINNT
+
+#define OFFLOAD_ENTRY_TABLE_SECTION_START ".OffloadEntryTable."
+#define OFFLOAD_ENTRY_TABLE_SECTION_END ".OffloadEntryTable."
+
+#define OFFLOAD_FUNC_TABLE_SECTION_START ".OffloadFuncTable."
+#define OFFLOAD_FUNC_TABLE_SECTION_END ".OffloadFuncTable."
+
+#define OFFLOAD_VAR_TABLE_SECTION_START ".OffloadVarTable."
+#define OFFLOAD_VAR_TABLE_SECTION_END ".OffloadVarTable."
+#endif // TARGET_WINNT
+
+#pragma section(OFFLOAD_ENTRY_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_ENTRY_TABLE_SECTION_END, read, write)
+
+#pragma section(OFFLOAD_FUNC_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_FUNC_TABLE_SECTION_END, read, write)
+
+#pragma section(OFFLOAD_VAR_TABLE_SECTION_START, read, write)
+#pragma section(OFFLOAD_VAR_TABLE_SECTION_END, read, write)
+
+
+// register/unregister given tables
+extern "C" void __offload_register_tables(
+ FuncList::Node *entry_table,
+ FuncList::Node *func_table,
+ VarList::Node *var_table
+);
+
+extern "C" void __offload_unregister_tables(
+ FuncList::Node *entry_table,
+ FuncList::Node *func_table,
+ VarList::Node *var_table
+);
+#endif // OFFLOAD_TABLE_H_INCLUDED
diff --git a/final/offload/src/offload_target.cpp b/final/offload/src/offload_target.cpp
new file mode 100644
index 0000000..cfc1b04
--- /dev/null
+++ b/final/offload/src/offload_target.cpp
@@ -0,0 +1,754 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_target.h"
+#include <stdlib.h>
+#include <unistd.h>
+#ifdef SEP_SUPPORT
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#endif // SEP_SUPPORT
+#include <omp.h>
+#include <map>
+
+// typedef offload_func_with_parms.
+// Pointer to function that represents an offloaded entry point.
+// The parameters are a temporary fix for parameters on the stack.
+typedef void (*offload_func_with_parms)(void *);
+
+// Target console and file logging
+const char *prefix;
+int console_enabled = 0;
+int offload_report_level = 0;
+
+// Trace information
+static const char* vardesc_direction_as_string[] = {
+ "NOCOPY",
+ "IN",
+ "OUT",
+ "INOUT"
+};
+static const char* vardesc_type_as_string[] = {
+ "unknown",
+ "data",
+ "data_ptr",
+ "func_ptr",
+ "void_ptr",
+ "string_ptr",
+ "dv",
+ "dv_data",
+ "dv_data_slice",
+ "dv_ptr",
+ "dv_ptr_data",
+ "dv_ptr_data_slice",
+ "cean_var",
+ "cean_var_ptr",
+ "c_data_ptr_array"
+};
+
+int mic_index = -1;
+int mic_engines_total = -1;
+uint64_t mic_frequency = 0;
+int offload_number = 0;
+static std::map<void*, RefInfo*> ref_data;
+static mutex_t add_ref_lock;
+
+#ifdef SEP_SUPPORT
+static const char* sep_monitor_env = "SEP_MONITOR";
+static bool sep_monitor = false;
+static const char* sep_device_env = "SEP_DEVICE";
+static const char* sep_device = "/dev/sep3.8/c";
+static int sep_counter = 0;
+
+#define SEP_API_IOC_MAGIC 99
+#define SEP_IOCTL_PAUSE _IO (SEP_API_IOC_MAGIC, 31)
+#define SEP_IOCTL_RESUME _IO (SEP_API_IOC_MAGIC, 32)
+
+static void add_ref_count(void * buf, bool created)
+{
+ mutex_locker_t locker(add_ref_lock);
+ RefInfo * info = ref_data[buf];
+
+ if (info) {
+ info->count++;
+ }
+ else {
+ info = new RefInfo((int)created,(long)1);
+ }
+ info->is_added |= created;
+ ref_data[buf] = info;
+}
+
+static void BufReleaseRef(void * buf)
+{
+ mutex_locker_t locker(add_ref_lock);
+ RefInfo * info = ref_data[buf];
+
+ if (info) {
+ --info->count;
+ if (info->count == 0 && info->is_added) {
+ BufferReleaseRef(buf);
+ info->is_added = 0;
+ }
+ }
+}
+
+static int VTPauseSampling(void)
+{
+ int ret = -1;
+ int handle = open(sep_device, O_RDWR);
+ if (handle > 0) {
+ ret = ioctl(handle, SEP_IOCTL_PAUSE);
+ close(handle);
+ }
+ return ret;
+}
+
+static int VTResumeSampling(void)
+{
+ int ret = -1;
+ int handle = open(sep_device, O_RDWR);
+ if (handle > 0) {
+ ret = ioctl(handle, SEP_IOCTL_RESUME);
+ close(handle);
+ }
+ return ret;
+}
+#endif // SEP_SUPPORT
+
+void OffloadDescriptor::offload(
+ uint32_t buffer_count,
+ void** buffers,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+)
+{
+ FunctionDescriptor *func = (FunctionDescriptor*) misc_data;
+ const char *name = func->data;
+ OffloadDescriptor ofld;
+ char *in_data = 0;
+ char *out_data = 0;
+ char *timer_data = 0;
+
+ console_enabled = func->console_enabled;
+ timer_enabled = func->timer_enabled;
+ offload_report_level = func->offload_report_level;
+ offload_number = func->offload_number;
+ ofld.set_offload_number(func->offload_number);
+
+#ifdef SEP_SUPPORT
+ if (sep_monitor) {
+ if (__sync_fetch_and_add(&sep_counter, 1) == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "VTResumeSampling\n");
+ VTResumeSampling();
+ }
+ }
+#endif // SEP_SUPPORT
+
+ OFFLOAD_DEBUG_TRACE_1(2, ofld.get_offload_number(),
+ c_offload_start_target_func,
+ "Offload \"%s\" started\n", name);
+
+ // initialize timer data
+ OFFLOAD_TIMER_INIT();
+
+ OFFLOAD_TIMER_START(c_offload_target_total_time);
+
+ OFFLOAD_TIMER_START(c_offload_target_descriptor_setup);
+
+ // get input/output buffer addresses
+ if (func->in_datalen > 0 || func->out_datalen > 0) {
+ if (func->data_offset != 0) {
+ in_data = (char*) misc_data + func->data_offset;
+ out_data = (char*) return_data;
+ }
+ else {
+ char *inout_buf = (char*) buffers[--buffer_count];
+ in_data = inout_buf;
+ out_data = inout_buf;
+ }
+ }
+
+ // assign variable descriptors
+ ofld.m_vars_total = func->vars_num;
+ if (ofld.m_vars_total > 0) {
+ uint64_t var_data_len = ofld.m_vars_total * sizeof(VarDesc);
+
+ ofld.m_vars = (VarDesc*) malloc(var_data_len);
+ memcpy(ofld.m_vars, in_data, var_data_len);
+
+ in_data += var_data_len;
+ func->in_datalen -= var_data_len;
+ }
+
+ // timer data
+ if (func->timer_enabled) {
+ uint64_t timer_data_len = OFFLOAD_TIMER_DATALEN();
+
+ timer_data = out_data;
+ out_data += timer_data_len;
+ func->out_datalen -= timer_data_len;
+ }
+
+ // init Marshallers
+ ofld.m_in.init_buffer(in_data, func->in_datalen);
+ ofld.m_out.init_buffer(out_data, func->out_datalen);
+
+ // copy buffers to offload descriptor
+ std::copy(buffers, buffers + buffer_count,
+ std::back_inserter(ofld.m_buffers));
+
+ OFFLOAD_TIMER_STOP(c_offload_target_descriptor_setup);
+
+ // find offload entry address
+ OFFLOAD_TIMER_START(c_offload_target_func_lookup);
+
+ offload_func_with_parms entry = (offload_func_with_parms)
+ __offload_entries.find_addr(name);
+
+ if (entry == NULL) {
+#if OFFLOAD_DEBUG > 0
+ if (console_enabled > 2) {
+ __offload_entries.dump();
+ }
+#endif
+ LIBOFFLOAD_ERROR(c_offload_descriptor_offload, name);
+ exit(1);
+ }
+
+ OFFLOAD_TIMER_STOP(c_offload_target_func_lookup);
+
+ OFFLOAD_TIMER_START(c_offload_target_func_time);
+
+ // execute offload entry
+ entry(&ofld);
+
+ OFFLOAD_TIMER_STOP(c_offload_target_func_time);
+
+ OFFLOAD_TIMER_STOP(c_offload_target_total_time);
+
+ // copy timer data to the buffer
+ OFFLOAD_TIMER_TARGET_DATA(timer_data);
+
+ OFFLOAD_DEBUG_TRACE(2, "Offload \"%s\" finished\n", name);
+
+#ifdef SEP_SUPPORT
+ if (sep_monitor) {
+ if (__sync_sub_and_fetch(&sep_counter, 1) == 0) {
+ OFFLOAD_DEBUG_TRACE(2, "VTPauseSampling\n");
+ VTPauseSampling();
+ }
+ }
+#endif // SEP_SUPPORT
+}
+
+void OffloadDescriptor::merge_var_descs(
+ VarDesc *vars,
+ VarDesc2 *vars2,
+ int vars_total
+)
+{
+ // number of variable descriptors received from host and generated
+ // locally should match
+ if (m_vars_total < vars_total) {
+ LIBOFFLOAD_ERROR(c_merge_var_descs1);
+ exit(1);
+ }
+
+ for (int i = 0; i < m_vars_total; i++) {
+ if (i < vars_total) {
+ // variable type must match
+ if (m_vars[i].type.bits != vars[i].type.bits) {
+ LIBOFFLOAD_ERROR(c_merge_var_descs2);
+ exit(1);
+ }
+
+ m_vars[i].ptr = vars[i].ptr;
+ m_vars[i].into = vars[i].into;
+
+ const char *var_sname = "";
+ if (vars2 != NULL) {
+ if (vars2[i].sname != NULL) {
+ var_sname = vars2[i].sname;
+ }
+ }
+ OFFLOAD_DEBUG_TRACE_1(2, get_offload_number(), c_offload_var,
+ " VarDesc %d, var=%s, %s, %s\n",
+ i, var_sname,
+ vardesc_direction_as_string[m_vars[i].direction.bits],
+ vardesc_type_as_string[m_vars[i].type.src]);
+ if (vars2 != NULL && vars2[i].dname != NULL) {
+ OFFLOAD_TRACE(2, " into=%s, %s\n", vars2[i].dname,
+ vardesc_type_as_string[m_vars[i].type.dst]);
+ }
+ }
+ OFFLOAD_TRACE(2,
+ " type_src=%d, type_dstn=%d, direction=%d, "
+ "alloc_if=%d, free_if=%d, align=%d, mic_offset=%d, flags=0x%x, "
+ "offset=%lld, size=%lld, count/disp=%lld, ptr=%p into=%p\n",
+ m_vars[i].type.src,
+ m_vars[i].type.dst,
+ m_vars[i].direction.bits,
+ m_vars[i].alloc_if,
+ m_vars[i].free_if,
+ m_vars[i].align,
+ m_vars[i].mic_offset,
+ m_vars[i].flags.bits,
+ m_vars[i].offset,
+ m_vars[i].size,
+ m_vars[i].count,
+ m_vars[i].ptr,
+ m_vars[i].into);
+ }
+}
+
+void OffloadDescriptor::scatter_copyin_data()
+{
+ OFFLOAD_TIMER_START(c_offload_target_scatter_inputs);
+
+ OFFLOAD_DEBUG_TRACE(2, "IN buffer @ %p size %lld\n",
+ m_in.get_buffer_start(),
+ m_in.get_buffer_size());
+ OFFLOAD_DEBUG_DUMP_BYTES(2, m_in.get_buffer_start(),
+ m_in.get_buffer_size());
+
+ // receive data
+ for (int i = 0; i < m_vars_total; i++) {
+ bool src_is_for_mic = (m_vars[i].direction.out ||
+ m_vars[i].into == NULL);
+ void** ptr_addr = src_is_for_mic ?
+ static_cast<void**>(m_vars[i].ptr) :
+ static_cast<void**>(m_vars[i].into);
+ int type = src_is_for_mic ? m_vars[i].type.src :
+ m_vars[i].type.dst;
+ bool is_static = src_is_for_mic ?
+ m_vars[i].flags.is_static :
+ m_vars[i].flags.is_static_dstn;
+ void *ptr = NULL;
+
+ if (m_vars[i].flags.alloc_disp) {
+ int64_t offset = 0;
+ m_in.receive_data(&offset, sizeof(offset));
+ m_vars[i].offset = -offset;
+ }
+ if (VAR_TYPE_IS_DV_DATA_SLICE(type) ||
+ VAR_TYPE_IS_DV_DATA(type)) {
+ ArrDesc *dvp = (type == c_dv_data_slice || type == c_dv_data)?
+ reinterpret_cast<ArrDesc*>(ptr_addr) :
+ *reinterpret_cast<ArrDesc**>(ptr_addr);
+ ptr_addr = reinterpret_cast<void**>(&dvp->Base);
+ }
+
+ // Set pointer values
+ switch (type) {
+ case c_data_ptr_array:
+ {
+ int j = m_vars[i].ptr_arr_offset;
+ int max_el = j + m_vars[i].count;
+ char *dst_arr_ptr = (src_is_for_mic)?
+ *(reinterpret_cast<char**>(m_vars[i].ptr)) :
+ reinterpret_cast<char*>(m_vars[i].into);
+
+ for (; j < max_el; j++) {
+ if (src_is_for_mic) {
+ m_vars[j].ptr =
+ dst_arr_ptr + m_vars[j].ptr_arr_offset;
+ }
+ else {
+ m_vars[j].into =
+ dst_arr_ptr + m_vars[j].ptr_arr_offset;
+ }
+ }
+ }
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ case c_dv:
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ if (m_vars[i].alloc_if) {
+ void *buf;
+ if (m_vars[i].flags.sink_addr) {
+ m_in.receive_data(&buf, sizeof(buf));
+ }
+ else {
+ buf = m_buffers.front();
+ m_buffers.pop_front();
+ }
+ if (buf) {
+ if (!is_static) {
+ if (!m_vars[i].flags.sink_addr) {
+ // increment buffer reference
+ OFFLOAD_TIMER_START(c_offload_target_add_buffer_refs);
+ BufferAddRef(buf);
+ OFFLOAD_TIMER_STOP(c_offload_target_add_buffer_refs);
+ }
+ add_ref_count(buf, 0 == m_vars[i].flags.sink_addr);
+ }
+ ptr = static_cast<char*>(buf) +
+ m_vars[i].mic_offset +
+ (m_vars[i].flags.is_stack_buf ?
+ 0 : m_vars[i].offset);
+ }
+ *ptr_addr = ptr;
+ }
+ else if (m_vars[i].flags.sink_addr) {
+ void *buf;
+ m_in.receive_data(&buf, sizeof(buf));
+ void *ptr = static_cast<char*>(buf) +
+ m_vars[i].mic_offset +
+ (m_vars[i].flags.is_stack_buf ?
+ 0 : m_vars[i].offset);
+ *ptr_addr = ptr;
+ }
+ break;
+
+ case c_func_ptr:
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ if (m_vars[i].alloc_if) {
+ void *buf;
+ if (m_vars[i].flags.sink_addr) {
+ m_in.receive_data(&buf, sizeof(buf));
+ }
+ else {
+ buf = m_buffers.front();
+ m_buffers.pop_front();
+ }
+ if (buf) {
+ if (!is_static) {
+ if (!m_vars[i].flags.sink_addr) {
+ // increment buffer reference
+ OFFLOAD_TIMER_START(c_offload_target_add_buffer_refs);
+ BufferAddRef(buf);
+ OFFLOAD_TIMER_STOP(c_offload_target_add_buffer_refs);
+ }
+ add_ref_count(buf, 0 == m_vars[i].flags.sink_addr);
+ }
+ ptr = static_cast<char*>(buf) +
+ m_vars[i].mic_offset + m_vars[i].offset;
+ }
+ *ptr_addr = ptr;
+ }
+ else if (m_vars[i].flags.sink_addr) {
+ void *buf;
+ m_in.receive_data(&buf, sizeof(buf));
+ ptr = static_cast<char*>(buf) +
+ m_vars[i].mic_offset + m_vars[i].offset;
+ *ptr_addr = ptr;
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, type);
+ abort();
+ }
+ // Release obsolete buffers for stack of persistent objects
+ if (type = c_data_ptr &&
+ m_vars[i].flags.is_stack_buf &&
+ !m_vars[i].direction.bits &&
+ m_vars[i].alloc_if &&
+ m_vars[i].size != 0) {
+ for (int j=0; j < m_vars[i].size; j++) {
+ void *buf;
+ m_in.receive_data(&buf, sizeof(buf));
+ BufferReleaseRef(buf);
+ ref_data.erase(buf);
+ }
+ }
+ // Do copyin
+ switch (m_vars[i].type.dst) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.in &&
+ !m_vars[i].flags.is_static_dstn) {
+ int64_t size;
+ int64_t disp;
+ char* ptr = m_vars[i].into ?
+ static_cast<char*>(m_vars[i].into) :
+ static_cast<char*>(m_vars[i].ptr);
+ if (m_vars[i].type.dst == c_cean_var) {
+ m_in.receive_data((&size), sizeof(int64_t));
+ m_in.receive_data((&disp), sizeof(int64_t));
+ }
+ else {
+ size = m_vars[i].size;
+ disp = 0;
+ }
+ m_in.receive_data(ptr + disp, size);
+ }
+ break;
+
+ case c_dv:
+ if (m_vars[i].direction.bits ||
+ m_vars[i].alloc_if ||
+ m_vars[i].free_if) {
+ char* ptr = m_vars[i].into ?
+ static_cast<char*>(m_vars[i].into) :
+ static_cast<char*>(m_vars[i].ptr);
+ m_in.receive_data(ptr + sizeof(uint64_t),
+ m_vars[i].size - sizeof(uint64_t));
+ }
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ break;
+
+ case c_func_ptr:
+ if (m_vars[i].direction.in) {
+ m_in.receive_func_ptr((const void**) m_vars[i].ptr);
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, m_vars[i].type.dst);
+ abort();
+ }
+ }
+
+ OFFLOAD_TRACE(1, "Total copyin data received from host: [%lld] bytes\n",
+ m_in.get_tfr_size());
+
+ OFFLOAD_TIMER_STOP(c_offload_target_scatter_inputs);
+
+ OFFLOAD_TIMER_START(c_offload_target_compute);
+}
+
+void OffloadDescriptor::gather_copyout_data()
+{
+ OFFLOAD_TIMER_STOP(c_offload_target_compute);
+
+ OFFLOAD_TIMER_START(c_offload_target_gather_outputs);
+
+ for (int i = 0; i < m_vars_total; i++) {
+ bool src_is_for_mic = (m_vars[i].direction.out ||
+ m_vars[i].into == NULL);
+
+ switch (m_vars[i].type.src) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ if (m_vars[i].direction.out &&
+ !m_vars[i].flags.is_static) {
+ m_out.send_data(
+ static_cast<char*>(m_vars[i].ptr) + m_vars[i].disp,
+ m_vars[i].size);
+ }
+ break;
+
+ case c_dv:
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ if (m_vars[i].free_if &&
+ src_is_for_mic &&
+ !m_vars[i].flags.is_static) {
+ void *buf = *static_cast<char**>(m_vars[i].ptr) -
+ m_vars[i].mic_offset -
+ (m_vars[i].flags.is_stack_buf?
+ 0 : m_vars[i].offset);
+ if (buf == NULL) {
+ break;
+ }
+ // decrement buffer reference count
+ OFFLOAD_TIMER_START(c_offload_target_release_buffer_refs);
+ BufReleaseRef(buf);
+ OFFLOAD_TIMER_STOP(c_offload_target_release_buffer_refs);
+ }
+ break;
+
+ case c_func_ptr:
+ if (m_vars[i].direction.out) {
+ m_out.send_func_ptr(*((void**) m_vars[i].ptr));
+ }
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ if (src_is_for_mic &&
+ m_vars[i].free_if &&
+ !m_vars[i].flags.is_static) {
+ ArrDesc *dvp = (m_vars[i].type.src == c_dv_data ||
+ m_vars[i].type.src == c_dv_data_slice) ?
+ static_cast<ArrDesc*>(m_vars[i].ptr) :
+ *static_cast<ArrDesc**>(m_vars[i].ptr);
+
+ void *buf = reinterpret_cast<char*>(dvp->Base) -
+ m_vars[i].mic_offset -
+ m_vars[i].offset;
+
+ if (buf == NULL) {
+ break;
+ }
+
+ // decrement buffer reference count
+ OFFLOAD_TIMER_START(c_offload_target_release_buffer_refs);
+ BufReleaseRef(buf);
+ OFFLOAD_TIMER_STOP(c_offload_target_release_buffer_refs);
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, m_vars[i].type.dst);
+ abort();
+ }
+
+ if (m_vars[i].into) {
+ switch (m_vars[i].type.dst) {
+ case c_data_ptr_array:
+ break;
+ case c_data:
+ case c_void_ptr:
+ case c_cean_var:
+ case c_dv:
+ break;
+
+ case c_string_ptr:
+ case c_data_ptr:
+ case c_cean_var_ptr:
+ case c_dv_ptr:
+ if (m_vars[i].direction.in &&
+ m_vars[i].free_if &&
+ !m_vars[i].flags.is_static_dstn) {
+ void *buf = *static_cast<char**>(m_vars[i].into) -
+ m_vars[i].mic_offset -
+ (m_vars[i].flags.is_stack_buf?
+ 0 : m_vars[i].offset);
+
+ if (buf == NULL) {
+ break;
+ }
+ // decrement buffer reference count
+ OFFLOAD_TIMER_START(
+ c_offload_target_release_buffer_refs);
+ BufReleaseRef(buf);
+ OFFLOAD_TIMER_STOP(
+ c_offload_target_release_buffer_refs);
+ }
+ break;
+
+ case c_func_ptr:
+ break;
+
+ case c_dv_data:
+ case c_dv_ptr_data:
+ case c_dv_data_slice:
+ case c_dv_ptr_data_slice:
+ if (m_vars[i].free_if &&
+ m_vars[i].direction.in &&
+ !m_vars[i].flags.is_static_dstn) {
+ ArrDesc *dvp =
+ (m_vars[i].type.dst == c_dv_data_slice ||
+ m_vars[i].type.dst == c_dv_data) ?
+ static_cast<ArrDesc*>(m_vars[i].into) :
+ *static_cast<ArrDesc**>(m_vars[i].into);
+ void *buf = reinterpret_cast<char*>(dvp->Base) -
+ m_vars[i].mic_offset -
+ m_vars[i].offset;
+
+ if (buf == NULL) {
+ break;
+ }
+ // decrement buffer reference count
+ OFFLOAD_TIMER_START(
+ c_offload_target_release_buffer_refs);
+ BufReleaseRef(buf);
+ OFFLOAD_TIMER_STOP(
+ c_offload_target_release_buffer_refs);
+ }
+ break;
+
+ default:
+ LIBOFFLOAD_ERROR(c_unknown_var_type, m_vars[i].type.dst);
+ abort();
+ }
+ }
+ }
+
+ OFFLOAD_DEBUG_TRACE(2, "OUT buffer @ p %p size %lld\n",
+ m_out.get_buffer_start(),
+ m_out.get_buffer_size());
+
+ OFFLOAD_DEBUG_DUMP_BYTES(2,
+ m_out.get_buffer_start(),
+ m_out.get_buffer_size());
+
+ OFFLOAD_DEBUG_TRACE_1(1, get_offload_number(), c_offload_copyout_data,
+ "Total copyout data sent to host: [%lld] bytes\n",
+ m_out.get_tfr_size());
+
+ OFFLOAD_TIMER_STOP(c_offload_target_gather_outputs);
+}
+
+void __offload_target_init(void)
+{
+#ifdef SEP_SUPPORT
+ const char* env_var = getenv(sep_monitor_env);
+ if (env_var != 0 && *env_var != '\0') {
+ sep_monitor = atoi(env_var);
+ }
+ env_var = getenv(sep_device_env);
+ if (env_var != 0 && *env_var != '\0') {
+ sep_device = env_var;
+ }
+#endif // SEP_SUPPORT
+
+ prefix = report_get_message_str(c_report_mic);
+
+ // init frequency
+ mic_frequency = COIPerfGetCycleFrequency();
+}
+
+// User-visible offload API
+
+int _Offload_number_of_devices(void)
+{
+ return mic_engines_total;
+}
+
+int _Offload_get_device_number(void)
+{
+ return mic_index;
+}
+
+int _Offload_get_physical_device_number(void)
+{
+ uint32_t index;
+ EngineGetIndex(&index);
+ return index;
+}
diff --git a/final/offload/src/offload_target.h b/final/offload/src/offload_target.h
new file mode 100644
index 0000000..7db3147
--- /dev/null
+++ b/final/offload/src/offload_target.h
@@ -0,0 +1,100 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// The parts of the offload library used only on the target
+
+#ifndef OFFLOAD_TARGET_H_INCLUDED
+#define OFFLOAD_TARGET_H_INCLUDED
+
+#include "offload_common.h"
+#include "coi/coi_server.h"
+
+// The offload descriptor.
+class OffloadDescriptor
+{
+public:
+ ~OffloadDescriptor() {
+ if (m_vars != 0) {
+ free(m_vars);
+ }
+ }
+
+ // Entry point for COI. Synchronously execute offloaded region given
+ // the provided buffers, misc and return data.
+ static void offload(
+ uint32_t buffer_count,
+ void** buffers,
+ void* misc_data,
+ uint16_t misc_data_len,
+ void* return_data,
+ uint16_t return_data_len
+ );
+
+ // scatters input data from in buffer to target variables
+ void scatter_copyin_data();
+
+ // gathers output data to the buffer
+ void gather_copyout_data();
+
+ // merges local variable descriptors with the descriptors received from
+ // host
+ void merge_var_descs(VarDesc *vars, VarDesc2 *vars2, int vars_total);
+
+ int get_offload_number() const {
+ return m_offload_number;
+ }
+
+ void set_offload_number(int number) {
+ m_offload_number = number;
+ }
+
+private:
+ // Constructor
+ OffloadDescriptor() : m_vars(0)
+ {}
+
+private:
+ typedef std::list<void*> BufferList;
+
+ // The Marshaller for the inputs of the offloaded region.
+ Marshaller m_in;
+
+ // The Marshaller for the outputs of the offloaded region.
+ Marshaller m_out;
+
+ // List of buffers that are passed to dispatch call
+ BufferList m_buffers;
+
+ // Variable descriptors received from host
+ VarDesc* m_vars;
+ int m_vars_total;
+ int m_offload_number;
+};
+
+// one time target initialization in main
+extern void __offload_target_init(void);
+
+// logical device index
+extern int mic_index;
+
+// total number of available logical devices
+extern int mic_engines_total;
+
+// device frequency (from COI)
+extern uint64_t mic_frequency;
+
+struct RefInfo {
+ RefInfo(bool is_add, long amount):is_added(is_add),count(amount)
+ {}
+ bool is_added;
+ long count;
+};
+
+#endif // OFFLOAD_TARGET_H_INCLUDED
diff --git a/final/offload/src/offload_target_main.cpp b/final/offload/src/offload_target_main.cpp
new file mode 100644
index 0000000..a4921d2
--- /dev/null
+++ b/final/offload/src/offload_target_main.cpp
@@ -0,0 +1,17 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+extern "C" void __offload_target_main(void);
+
+int main(int argc, char ** argv)
+{
+ __offload_target_main();
+ return 0;
+}
diff --git a/final/offload/src/offload_timer.h b/final/offload/src/offload_timer.h
new file mode 100644
index 0000000..1401a9d
--- /dev/null
+++ b/final/offload/src/offload_timer.h
@@ -0,0 +1,172 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_TIMER_H_INCLUDED
+#define OFFLOAD_TIMER_H_INCLUDED
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include "liboffload_error_codes.h"
+
+extern int timer_enabled;
+
+#ifdef TIMING_SUPPORT
+
+struct OffloadTargetTimerData {
+ uint64_t frequency;
+ struct {
+ uint64_t start;
+ uint64_t total;
+ } phases[c_offload_target_max_phase];
+};
+
+struct OffloadHostTimerData {
+ // source file name and line number
+ const char* file;
+ int line;
+
+ // host timer data
+ struct {
+ uint64_t start;
+ uint64_t total;
+ } phases[c_offload_host_max_phase];
+
+ uint64_t sent_bytes;
+ uint64_t received_bytes;
+ int card_number;
+ int offload_number;
+
+ // target timer data
+ OffloadTargetTimerData target;
+
+ // next element
+ OffloadHostTimerData *next;
+};
+
+#if HOST_LIBRARY
+
+extern int offload_report_level;
+extern int offload_report_enabled;
+#define OFFLOAD_REPORT_1 1
+#define OFFLOAD_REPORT_2 2
+#define OFFLOAD_REPORT_3 3
+#define OFFLOAD_REPORT_ON 1
+#define OFFLOAD_REPORT_OFF 0
+
+#define OFFLOAD_TIMER_DATALEN() \
+ ((timer_enabled || (offload_report_level && offload_report_enabled)) ? \
+ ((1 + c_offload_target_max_phase) * sizeof(uint64_t)) : 0)
+
+#define OFFLOAD_TIMER_START(timer_data, pnode) \
+ if (timer_enabled || \
+ (offload_report_level && offload_report_enabled)) { \
+ offload_timer_start(timer_data, pnode); \
+ }
+
+#define OFFLOAD_TIMER_STOP(timer_data, pnode) \
+ if (timer_enabled || \
+ (offload_report_level && offload_report_enabled)) { \
+ offload_timer_stop(timer_data, pnode); \
+ }
+
+#define OFFLOAD_TIMER_INIT(file, line) \
+ offload_timer_init(file, line);
+
+#define OFFLOAD_TIMER_TARGET_DATA(timer_data, data) \
+ if (timer_enabled || \
+ (offload_report_level && offload_report_enabled)) { \
+ offload_timer_fill_target_data(timer_data, data); \
+ }
+
+#define OFFLOAD_TIMER_HOST_SDATA(timer_data, data) \
+ if (offload_report_level && offload_report_enabled) { \
+ offload_timer_fill_host_sdata(timer_data, data); \
+ }
+
+#define OFFLOAD_TIMER_HOST_RDATA(timer_data, data) \
+ if (offload_report_level && offload_report_enabled) { \
+ offload_timer_fill_host_rdata(timer_data, data); \
+ }
+
+#define OFFLOAD_TIMER_HOST_MIC_NUM(timer_data, data) \
+ if (offload_report_level && offload_report_enabled) { \
+ offload_timer_fill_host_mic_num(timer_data, data); \
+ }
+
+extern void offload_timer_start(OffloadHostTimerData *,
+ OffloadHostPhase t_node);
+extern void offload_timer_stop(OffloadHostTimerData *,
+ OffloadHostPhase t_node);
+extern OffloadHostTimerData * offload_timer_init(const char *file, int line);
+extern void offload_timer_fill_target_data(OffloadHostTimerData *,
+ void *data);
+extern void offload_timer_fill_host_sdata(OffloadHostTimerData *,
+ uint64_t sent_bytes);
+extern void offload_timer_fill_host_rdata(OffloadHostTimerData *,
+ uint64_t sent_bytes);
+extern void offload_timer_fill_host_mic_num(OffloadHostTimerData *,
+ int card_number);
+
+// Utility structure for starting/stopping timer
+struct OffloadTimer {
+ OffloadTimer(OffloadHostTimerData *data, OffloadHostPhase phase) :
+ m_data(data),
+ m_phase(phase)
+ {
+ OFFLOAD_TIMER_START(m_data, m_phase);
+ }
+
+ ~OffloadTimer()
+ {
+ OFFLOAD_TIMER_STOP(m_data, m_phase);
+ }
+
+private:
+ OffloadHostTimerData* m_data;
+ OffloadHostPhase m_phase;
+};
+
+#else
+
+#define OFFLOAD_TIMER_DATALEN() \
+ ((timer_enabled) ? \
+ ((1 + c_offload_target_max_phase) * sizeof(uint64_t)) : 0)
+
+#define OFFLOAD_TIMER_START(pnode) \
+ if (timer_enabled) offload_timer_start(pnode);
+
+#define OFFLOAD_TIMER_STOP(pnode) \
+ if (timer_enabled) offload_timer_stop(pnode);
+
+#define OFFLOAD_TIMER_INIT() \
+ if (timer_enabled) offload_timer_init();
+
+#define OFFLOAD_TIMER_TARGET_DATA(data) \
+ if (timer_enabled) offload_timer_fill_target_data(data);
+
+extern void offload_timer_start(OffloadTargetPhase t_node);
+extern void offload_timer_stop(OffloadTargetPhase t_node);
+extern void offload_timer_init(void);
+extern void offload_timer_fill_target_data(void *data);
+
+#endif // HOST_LIBRARY
+
+#else // TIMING_SUPPORT
+
+#define OFFLOAD_TIMER_START(...)
+#define OFFLOAD_TIMER_STOP(...)
+#define OFFLOAD_TIMER_INIT(...)
+#define OFFLOAD_TIMER_TARGET_DATA(...)
+#define OFFLOAD_TIMER_DATALEN(...) (0)
+
+#endif // TIMING_SUPPORT
+
+#endif // OFFLOAD_TIMER_H_INCLUDED
diff --git a/final/offload/src/offload_timer_host.cpp b/final/offload/src/offload_timer_host.cpp
new file mode 100644
index 0000000..fb27db0
--- /dev/null
+++ b/final/offload/src/offload_timer_host.cpp
@@ -0,0 +1,359 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_timer.h"
+
+#ifdef __INTEL_COMPILER
+#include <ia32intrin.h>
+#else // __INTEL_COMPILER
+#include <x86intrin.h>
+#endif // __INTEL_COMPILER
+
+#include "offload_host.h"
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+
+int timer_enabled = 0;
+
+#ifdef TIMING_SUPPORT
+
+int offload_report_level = 0;
+int offload_report_enabled = 1;
+
+static const int host_timer_prefix_spaces[] = {
+ /*c_offload_host_setup_buffers*/ 0,
+ /*c_offload_host_initialize*/ 2,
+ /*c_offload_host_target_acquire*/ 2,
+ /*c_offload_host_wait_deps*/ 2,
+ /*c_offload_host_setup_buffers*/ 2,
+ /*c_offload_host_alloc_buffers*/ 4,
+ /*c_offload_host_setup_misc_data*/ 2,
+ /*c_offload_host_alloc_data_buffer*/ 4,
+ /*c_offload_host_send_pointers*/ 2,
+ /*c_offload_host_gather_inputs*/ 2,
+ /*c_offload_host_map_in_data_buffer*/ 4,
+ /*c_offload_host_unmap_in_data_buffer*/ 4,
+ /*c_offload_host_start_compute*/ 2,
+ /*c_offload_host_wait_compute*/ 2,
+ /*c_offload_host_start_buffers_reads*/ 2,
+ /*c_offload_host_scatter_outputs*/ 2,
+ /*c_offload_host_map_out_data_buffer*/ 4,
+ /*c_offload_host_unmap_out_data_buffer*/ 4,
+ /*c_offload_host_wait_buffers_reads*/ 2,
+ /*c_offload_host_destroy_buffers*/ 2
+};
+
+const static int target_timer_prefix_spaces[] = {
+/*c_offload_target_total_time*/ 0,
+/*c_offload_target_descriptor_setup*/ 2,
+/*c_offload_target_func_lookup*/ 2,
+/*c_offload_target_func_time*/ 2,
+/*c_offload_target_scatter_inputs*/ 4,
+/*c_offload_target_add_buffer_refs*/ 6,
+/*c_offload_target_compute*/ 4,
+/*c_offload_target_gather_outputs*/ 4,
+/*c_offload_target_release_buffer_refs*/ 6
+};
+
+static OffloadHostTimerData* timer_data_head;
+static OffloadHostTimerData* timer_data_tail;
+static mutex_t timer_data_mutex;
+
+static void offload_host_phase_name(std::stringstream &ss, int p_node);
+static void offload_target_phase_name(std::stringstream &ss, int p_node);
+
+extern void Offload_Timer_Print(void)
+{
+ std::string buf;
+ std::stringstream ss;
+ const char *stars =
+ "**************************************************************";
+
+ ss << "\n\n" << stars << "\n";
+ ss << " ";
+ ss << report_get_message_str(c_report_title) << "\n";
+ ss << stars << "\n";
+ double frequency = cpu_frequency;
+
+ for (OffloadHostTimerData *pnode = timer_data_head;
+ pnode != 0; pnode = pnode->next) {
+ ss << " ";
+ ss << report_get_message_str(c_report_from_file) << " "<< pnode->file;
+ ss << report_get_message_str(c_report_line) << " " << pnode->line;
+ ss << "\n";
+ for (int i = 0; i < c_offload_host_max_phase ; i++) {
+ ss << " ";
+ offload_host_phase_name(ss, i);
+ ss << " " << std::fixed << std::setprecision(5);
+ ss << (double)pnode->phases[i].total / frequency << "\n";
+ }
+
+ for (int i = 0; i < c_offload_target_max_phase ; i++) {
+ double time = 0;
+ if (pnode->target.frequency != 0) {
+ time = (double) pnode->target.phases[i].total /
+ (double) pnode->target.frequency;
+ }
+ ss << " ";
+ offload_target_phase_name(ss, i);
+ ss << " " << std::fixed << std::setprecision(5);
+ ss << time << "\n";
+ }
+ }
+
+ buf = ss.str();
+ fprintf(stdout, buf.data());
+ fflush(stdout);
+}
+
+extern void Offload_Report_Prolog(OffloadHostTimerData *pnode)
+{
+ double frequency = cpu_frequency;
+ std::string buf;
+ std::stringstream ss;
+
+ if (pnode) {
+ // [Offload] [Mic 0] [File] file.c
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic) << " ";
+ ss << pnode->card_number << "] [";
+ ss << report_get_message_str(c_report_file);
+ ss << "] " << pnode->file << "\n";
+
+ // [Offload] [Mic 0] [Line] 1234
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic) << " ";
+ ss << pnode->card_number << "] [";
+ ss << report_get_message_str(c_report_line);
+ ss << "] " << pnode->line << "\n";
+
+ // [Offload] [Mic 0] [Tag] Tag 1
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic) << " ";
+ ss << pnode->card_number << "] [";
+ ss << report_get_message_str(c_report_tag);
+ ss << "] " << report_get_message_str(c_report_tag);
+ ss << " " << pnode->offload_number << "\n";
+
+ buf = ss.str();
+ fprintf(stdout, buf.data());
+ fflush(stdout);
+ }
+}
+
+extern void Offload_Report_Epilog(OffloadHostTimerData * timer_data)
+{
+ double frequency = cpu_frequency;
+ std::string buf;
+ std::stringstream ss;
+
+ OffloadHostTimerData *pnode = timer_data;
+
+ if (!pnode) {
+ return;
+ }
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_host) << "] [";
+ ss << report_get_message_str(c_report_tag) << " ";
+ ss << pnode->offload_number << "] [";
+ ss << report_get_message_str(c_report_cpu_time) << "] ";
+ ss << std::fixed << std::setprecision(6);
+ ss << (double) pnode->phases[0].total / frequency;
+ ss << report_get_message_str(c_report_seconds) << "\n";
+
+ if (offload_report_level >= OFFLOAD_REPORT_2) {
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic);
+ ss << " " << pnode->card_number;
+ ss << "] [" << report_get_message_str(c_report_tag) << " ";
+ ss << pnode->offload_number << "] [";
+ ss << report_get_message_str(c_report_cpu_to_mic_data) << "] ";
+ ss << pnode->sent_bytes << " ";
+ ss << report_get_message_str(c_report_bytes) << "\n";
+ }
+
+ double time = 0;
+ if (pnode->target.frequency != 0) {
+ time = (double) pnode->target.phases[0].total /
+ (double) pnode->target.frequency;
+ }
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic) << " ";
+ ss << pnode->card_number<< "] [";
+ ss << report_get_message_str(c_report_tag) << " ";
+ ss << pnode->offload_number << "] [";
+ ss << report_get_message_str(c_report_mic_time) << "] ";
+ ss << std::fixed << std::setprecision(6) << time;
+ ss << report_get_message_str(c_report_seconds) << "\n";
+
+ if (offload_report_level >= OFFLOAD_REPORT_2) {
+ ss << "[" << report_get_message_str(c_report_offload) << "] [";
+ ss << report_get_message_str(c_report_mic);
+ ss << " " << pnode->card_number;
+ ss << "] [" << report_get_message_str(c_report_tag) << " ";
+ ss << pnode->offload_number << "] [";
+ ss << report_get_message_str(c_report_mic_to_cpu_data) << "] ";
+ ss << pnode->received_bytes << " ";
+ ss << report_get_message_str(c_report_bytes) << "\n";
+ }
+ ss << "\n";
+
+ buf = ss.str();
+ fprintf(stdout, buf.data());
+ fflush(stdout);
+
+ offload_report_free_data(timer_data);
+}
+
+extern void offload_report_free_data(OffloadHostTimerData * timer_data)
+{
+ OffloadHostTimerData *pnode_last = NULL;
+
+ for (OffloadHostTimerData *pnode = timer_data_head;
+ pnode != 0; pnode = pnode->next) {
+ if (timer_data == pnode) {
+ if (pnode_last) {
+ pnode_last->next = pnode->next;
+ }
+ else {
+ timer_data_head = pnode->next;
+ }
+ OFFLOAD_FREE(pnode);
+ break;
+ }
+ pnode_last = pnode;
+ }
+}
+
+static void fill_buf_with_spaces(std::stringstream &ss, int num)
+{
+ for (; num > 0; num--) {
+ ss << " ";
+ }
+}
+
+static void offload_host_phase_name(std::stringstream &ss, int p_node)
+{
+ int prefix_spaces;
+ int str_length;
+ int tail_length;
+ const int message_length = 40;
+ char const *str;
+
+ str = report_get_host_stage_str(p_node);
+ prefix_spaces = host_timer_prefix_spaces[p_node];
+ fill_buf_with_spaces(ss, prefix_spaces);
+ str_length = strlen(str);
+ ss << str;
+ tail_length = message_length - prefix_spaces - str_length;
+ tail_length = tail_length > 0? tail_length : 1;
+ fill_buf_with_spaces(ss, tail_length);
+}
+
+static void offload_target_phase_name(std::stringstream &ss, int p_node)
+{
+ int prefix_spaces;
+ int str_length;
+ const int message_length = 40;
+ int tail_length;
+ char const *str;
+
+ str = report_get_target_stage_str(p_node);
+ prefix_spaces = target_timer_prefix_spaces[p_node];
+ fill_buf_with_spaces(ss, prefix_spaces);
+ str_length = strlen(str);
+ ss << str;
+ tail_length = message_length - prefix_spaces - str_length;
+ tail_length = (tail_length > 0)? tail_length : 1;
+ fill_buf_with_spaces(ss, tail_length);
+}
+
+void offload_timer_start(OffloadHostTimerData * timer_data,
+ OffloadHostPhase p_type)
+{
+ timer_data->phases[p_type].start = _rdtsc();
+}
+
+void offload_timer_stop(OffloadHostTimerData * timer_data,
+ OffloadHostPhase p_type)
+{
+ timer_data->phases[p_type].total += _rdtsc() -
+ timer_data->phases[p_type].start;
+}
+
+void offload_timer_fill_target_data(OffloadHostTimerData * timer_data,
+ void *buf)
+{
+ uint64_t *data = (uint64_t*) buf;
+
+ timer_data->target.frequency = *data++;
+ for (int i = 0; i < c_offload_target_max_phase; i++) {
+ timer_data->target.phases[i].total = *data++;
+ }
+}
+
+void offload_timer_fill_host_sdata(OffloadHostTimerData * timer_data,
+ uint64_t sent_bytes)
+{
+ if (timer_data) {
+ timer_data->sent_bytes += sent_bytes;
+ }
+}
+
+void offload_timer_fill_host_rdata(OffloadHostTimerData * timer_data,
+ uint64_t received_bytes)
+{
+ if (timer_data) {
+ timer_data->received_bytes += received_bytes;
+ }
+}
+
+void offload_timer_fill_host_mic_num(OffloadHostTimerData * timer_data,
+ int card_number)
+{
+ if (timer_data) {
+ timer_data->card_number = card_number;
+ }
+}
+
+OffloadHostTimerData* offload_timer_init(const char *file, int line)
+{
+ static bool first_time = true;
+ OffloadHostTimerData* timer_data = NULL;
+
+ timer_data_mutex.lock();
+ {
+ if (timer_enabled ||
+ (offload_report_level && offload_report_enabled)) {
+ timer_data = (OffloadHostTimerData*)
+ OFFLOAD_MALLOC(sizeof(OffloadHostTimerData), 0);
+ memset(timer_data, 0, sizeof(OffloadHostTimerData));
+
+ timer_data->offload_number = OFFLOAD_DEBUG_INCR_OFLD_NUM() - 1;
+
+ if (timer_data_head == 0) {
+ timer_data_head = timer_data;
+ timer_data_tail = timer_data;
+ }
+ else {
+ timer_data_tail->next = timer_data;
+ timer_data_tail = timer_data;
+ }
+
+ timer_data->file = file;
+ timer_data->line = line;
+ }
+ }
+ timer_data_mutex.unlock();
+ return timer_data;
+}
+
+#endif // TIMING_SUPPORT
diff --git a/final/offload/src/offload_timer_target.cpp b/final/offload/src/offload_timer_target.cpp
new file mode 100644
index 0000000..30a4c91
--- /dev/null
+++ b/final/offload/src/offload_timer_target.cpp
@@ -0,0 +1,67 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_timer.h"
+#include "offload_target.h"
+
+#ifdef __INTEL_COMPILER
+#include <ia32intrin.h>
+#else // __INTEL_COMPILER
+#include <x86intrin.h>
+#endif // __INTEL_COMPILER
+
+
+
+int timer_enabled = 0;
+
+#ifdef TIMING_SUPPORT
+
+#if defined(LINUX) || defined(FREEBSD)
+static __thread OffloadTargetTimerData timer_data;
+#else // WINNT
+static __declspec(thread) OffloadTargetTimerData timer_data;
+#endif // defined(LINUX) || defined(FREEBSD)
+
+
+void offload_timer_start(
+ OffloadTargetPhase p_type
+)
+{
+ timer_data.phases[p_type].start = _rdtsc();
+}
+
+void offload_timer_stop(
+ OffloadTargetPhase p_type
+)
+{
+ timer_data.phases[p_type].total += _rdtsc() -
+ timer_data.phases[p_type].start;
+}
+
+void offload_timer_init()
+{
+ memset(&timer_data, 0, sizeof(OffloadTargetTimerData));
+}
+
+void offload_timer_fill_target_data(
+ void *buf
+)
+{
+ uint64_t *data = (uint64_t*) buf;
+
+ timer_data.frequency = mic_frequency;
+ memcpy(data++, &(timer_data.frequency), sizeof(uint64_t));
+
+ for (int i = 0; i < c_offload_target_max_phase; i++) {
+ memcpy(data++, &(timer_data.phases[i].total), sizeof(uint64_t));
+ }
+}
+
+#endif // TIMING_SUPPORT
diff --git a/final/offload/src/offload_trace.cpp b/final/offload/src/offload_trace.cpp
new file mode 100644
index 0000000..0a06204
--- /dev/null
+++ b/final/offload/src/offload_trace.cpp
@@ -0,0 +1,309 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_trace.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sstream>
+#include "liboffload_error_codes.h"
+
+extern const char *prefix;
+
+#if !HOST_LIBRARY
+extern int mic_index;
+#endif
+
+// The debug routines
+
+static const char * offload_stage(std::stringstream &ss,
+ int offload_number,
+ const char *tag,
+ const char *text,
+ bool print_tag)
+{
+ ss << "[" << report_get_message_str(c_report_offload) << "]";
+#if HOST_LIBRARY
+ ss << " [" << prefix << "]";
+ if (print_tag) {
+ ss << " [" << report_get_message_str(c_report_tag);
+ ss << " " << offload_number << "]";
+ }
+ else {
+ ss << " ";
+ }
+ ss << " [" << tag << "]";
+ ss << " " << text;
+#else
+ ss << " [" << prefix << " " << mic_index << "]";
+ if (print_tag) {
+ ss << " [" << report_get_message_str(c_report_tag);
+ ss << " " << offload_number << "]";
+ }
+ ss << " [" << tag << "]";
+ ss << " " << text;
+#endif
+ return 0;
+}
+
+static const char * offload_signal(std::stringstream &ss,
+ int offload_number,
+ const char *tag,
+ const char *text)
+{
+ ss << "[" << report_get_message_str(c_report_offload) << "]";
+ ss << " [" << prefix << "]";
+ ss << " [" << report_get_message_str(c_report_tag);
+ ss << " " << offload_number << "]";
+ ss << " [" << tag << "]";
+ ss << " " << text;
+ return 0;
+}
+
+void offload_stage_print(int stage, int offload_number, ...)
+{
+ std::string buf;
+ std::stringstream ss;
+ char const *str1;
+ char const *str2;
+ va_list va_args;
+ va_start(va_args, offload_number);
+ va_arg(va_args, char*);
+
+ switch (stage) {
+ case c_offload_start:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_start);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_init:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_init);
+ offload_stage(ss, offload_number, str1, str2, false);
+ ss << " " << report_get_message_str(c_report_logical_card);
+ ss << " " << va_arg(va_args, int);
+ ss << " = " << report_get_message_str(c_report_physical_card);
+ ss << " " << va_arg(va_args, int);
+ break;
+ case c_offload_register:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_register);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_init_func:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_init_func);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << ": " << va_arg(va_args, char*);
+ break;
+ case c_offload_create_buf_host:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_create_buf_host);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << ": base=0x" << std::hex << va_arg(va_args, uint64_t);
+ ss << " length=" << std::dec << va_arg(va_args, uint64_t);
+ break;
+ case c_offload_create_buf_mic:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_create_buf_mic);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << ": size=" << va_arg(va_args, uint64_t);
+ ss << " offset=" << va_arg(va_args, int);
+ if (va_arg(va_args,int))
+ ss << " (2M page)";
+ break;
+ case c_offload_send_pointer_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_send_pointer_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_sent_pointer_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_sent_pointer_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << " " << va_arg(va_args, uint64_t);
+ break;
+ case c_offload_gather_copyin_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_gather_copyin_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_copyin_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_copyin_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << " " << va_arg(va_args, uint64_t) << " ";
+ break;
+ case c_offload_compute:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_compute);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_receive_pointer_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_receive_pointer_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_received_pointer_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_received_pointer_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << " " << va_arg(va_args, uint64_t);
+ break;
+ case c_offload_start_target_func:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_start_target_func);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << ": " << va_arg(va_args, char*);
+ break;
+ case c_offload_var:
+ str1 = report_get_message_str(c_report_var);
+ offload_stage(ss, offload_number, str1, " ", true);
+ va_arg(va_args, int);
+ ss << va_arg(va_args, char*);
+ ss << " " << " " << va_arg(va_args, char*);
+ break;
+ case c_offload_scatter_copyin_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_scatter_copyin_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_gather_copyout_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_gather_copyout_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_scatter_copyout_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_scatter_copyout_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_copyout_data:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_copyout_data);
+ offload_stage(ss, offload_number, str1, str2, true);
+ ss << " " << va_arg(va_args, uint64_t);
+ break;
+ case c_offload_signal:
+ {
+ uint64_t *signal;
+ str1 = report_get_message_str(c_report_state_signal);
+ str2 = report_get_message_str(c_report_signal);
+ offload_signal(ss, offload_number, str1, str2);
+ signal = va_arg(va_args, uint64_t*);
+ if (signal)
+ ss << " 0x" << std::hex << *signal;
+ else
+ ss << " none";
+ }
+ break;
+ case c_offload_wait:
+ {
+ int count;
+ uint64_t **signal;
+ str1 = report_get_message_str(c_report_state_signal);
+ str2 = report_get_message_str(c_report_wait);
+ offload_signal(ss, offload_number, str1, str2);
+ count = va_arg(va_args, int);
+ signal = va_arg(va_args, uint64_t**);
+ if (count) {
+ while (count) {
+ ss << " " << std::hex << signal[count-1];
+ count--;
+ }
+ }
+ else
+ ss << " none";
+ }
+ break;
+ case c_offload_unregister:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_unregister);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_destroy:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_destroy);
+ offload_stage(ss, offload_number, str1, str2, true);
+ break;
+ case c_offload_myoinit:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myoinit);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_myoregister:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myoregister);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_myofini:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myofini);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_mic_myo_shared:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_mic_myo_shared);
+ offload_stage(ss, offload_number, str1, str2, false);
+ ss << " " << va_arg(va_args, char*);
+ break;
+ case c_offload_mic_myo_fptr:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_mic_myo_fptr);
+ offload_stage(ss, offload_number, str1, str2, false);
+ ss << " " << va_arg(va_args, char*);
+ break;
+ case c_offload_myosharedmalloc:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myosharedmalloc);
+ offload_stage(ss, offload_number, str1, str2, false);
+ va_arg(va_args, char*);
+ ss << " " << va_arg(va_args, size_t);
+ break;
+ case c_offload_myosharedfree:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myosharedfree);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_myosharedalignedmalloc:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myosharedalignedmalloc);
+ offload_stage(ss, offload_number, str1, str2, false);
+ va_arg(va_args, char*);
+ ss << " " << va_arg(va_args, size_t);
+ ss << " " << va_arg(va_args, size_t);
+ break;
+ case c_offload_myosharedalignedfree:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myosharedalignedfree);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_myoacquire:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myoacquire);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ case c_offload_myorelease:
+ str1 = report_get_message_str(c_report_state);
+ str2 = report_get_message_str(c_report_myorelease);
+ offload_stage(ss, offload_number, str1, str2, false);
+ break;
+ default:
+ LIBOFFLOAD_ERROR(c_report_unknown_trace_node);
+ abort();
+ }
+ ss << "\n";
+ buf = ss.str();
+ fprintf(stdout, buf.data());
+ fflush(stdout);
+
+ va_end(va_args);
+ return;
+}
diff --git a/final/offload/src/offload_trace.h b/final/offload/src/offload_trace.h
new file mode 100644
index 0000000..65c28a4
--- /dev/null
+++ b/final/offload/src/offload_trace.h
@@ -0,0 +1,52 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// The parts of the offload library common to host and target
+
+void offload_stage_print(int stage, int offload_number, ...);
+
+enum OffloadTraceStage {
+ // Total time spent on the target
+ c_offload_start = 0,
+ c_offload_init,
+ c_offload_register,
+ c_offload_init_func,
+ c_offload_create_buf_host,
+ c_offload_create_buf_mic,
+ c_offload_send_pointer_data,
+ c_offload_sent_pointer_data,
+ c_offload_gather_copyin_data,
+ c_offload_copyin_data,
+ c_offload_compute,
+ c_offload_receive_pointer_data,
+ c_offload_received_pointer_data,
+ c_offload_start_target_func,
+ c_offload_var,
+ c_offload_scatter_copyin_data,
+ c_offload_gather_copyout_data,
+ c_offload_scatter_copyout_data,
+ c_offload_copyout_data,
+ c_offload_signal,
+ c_offload_wait,
+ c_offload_unregister,
+ c_offload_destroy,
+ c_offload_finish,
+ c_offload_myoinit,
+ c_offload_myoregister,
+ c_offload_mic_myo_shared,
+ c_offload_mic_myo_fptr,
+ c_offload_myosharedmalloc,
+ c_offload_myosharedfree,
+ c_offload_myosharedalignedmalloc,
+ c_offload_myosharedalignedfree,
+ c_offload_myoacquire,
+ c_offload_myorelease,
+ c_offload_myofini
+};
diff --git a/final/offload/src/offload_util.cpp b/final/offload/src/offload_util.cpp
new file mode 100644
index 0000000..68462c8
--- /dev/null
+++ b/final/offload/src/offload_util.cpp
@@ -0,0 +1,206 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "offload_util.h"
+#include <errno.h>
+#include "liboffload_error_codes.h"
+
+#ifdef TARGET_WINNT
+void *thread_getspecific(pthread_key_t key)
+{
+ if (key == 0) {
+ return NULL;
+ }
+ else {
+ return TlsGetValue(key);
+ }
+}
+
+int thread_setspecific(pthread_key_t key, const void *value)
+{
+ return (TlsSetValue(key, (LPVOID)value)) ? 0 : GetLastError();
+}
+#endif // TARGET_WINNT
+
+bool __offload_parse_size_string(const char *str, uint64_t &new_size)
+{
+ uint64_t val;
+ char *suffix;
+
+ errno = 0;
+#ifdef TARGET_WINNT
+ val = strtoul(str, &suffix, 10);
+#else // TARGET_WINNT
+ val = strtoull(str, &suffix, 10);
+#endif // TARGET_WINNT
+ if (errno != 0 || suffix == str) {
+ return false;
+ }
+
+ if (suffix[0] == '\0') {
+ // default is Kilobytes
+ new_size = val * 1024;
+ return true;
+ }
+ else if (suffix[1] == '\0') {
+ // Optional suffixes: B (bytes), K (Kilobytes), M (Megabytes),
+ // G (Gigabytes), or T (Terabytes) specify the units.
+ switch (suffix[0]) {
+ case 'b':
+ case 'B':
+ new_size = val;
+ break;
+
+ case 'k':
+ case 'K':
+ new_size = val * 1024;
+ break;
+
+ case 'm':
+ case 'M':
+ new_size = val * 1024 * 1024;
+ break;
+
+ case 'g':
+ case 'G':
+ new_size = val * 1024 * 1024 * 1024;
+ break;
+
+ case 't':
+ case 'T':
+ new_size = val * 1024 * 1024 * 1024 * 1024;
+ break;
+
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+bool __offload_parse_int_string(const char *str, int64_t &value)
+{
+ int64_t val;
+ char *suffix;
+
+ errno = 0;
+#ifdef TARGET_WINNT
+ val = strtol(str, &suffix, 0);
+#else
+ val = strtoll(str, &suffix, 0);
+#endif
+ if (errno == 0 && suffix != str && *suffix == '\0') {
+ value = val;
+ return true;
+ }
+ return false;
+}
+
+#ifdef TARGET_WINNT
+extern void* DL_open(const char *path)
+{
+ void *handle;
+ int error_mode;
+
+ /*
+ * do not display message box with error if it the call below fails to
+ * load dynamic library.
+ */
+ error_mode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+
+ /* load dynamic library */
+ handle = (void*) LoadLibrary(path);
+
+ /* restore error mode */
+ SetErrorMode(error_mode);
+
+ return handle;
+}
+
+extern int DL_addr(const void *addr, Dl_info *dl_info)
+{
+ MEMORY_BASIC_INFORMATION mem_info;
+ char mod_name[MAX_PATH];
+ HMODULE mod_handle;
+
+ /* Fill MEMORY_BASIC_INFORMATION struct */
+ if (!VirtualQuery(addr, &mem_info, sizeof(mem_info))) {
+ return 0;
+ }
+ mod_handle = (HMODULE)mem_info.AllocationBase;
+
+ /* ANSI file name for module */
+ if (!GetModuleFileNameA(mod_handle, (char*) mod_name, sizeof(mod_name))) {
+ return 0;
+ }
+ strcpy(dl_info->dli_fname, mod_name);
+ dl_info->dli_fbase = mem_info.BaseAddress;
+ dl_info->dli_saddr = addr;
+ strcpy(dl_info->dli_sname, mod_name);
+ return 1;
+}
+
+// Run once
+static BOOL CALLBACK __offload_run_once_wrapper(
+ PINIT_ONCE initOnce,
+ PVOID parameter,
+ PVOID *context
+)
+{
+ void (*init_routine)(void) = (void(*)(void)) parameter;
+ init_routine();
+ return true;
+}
+
+void __offload_run_once(OffloadOnceControl *ctrl, void (*func)(void))
+{
+ InitOnceExecuteOnce(ctrl, __offload_run_once_wrapper, (void*) func, 0);
+}
+#endif // TARGET_WINNT
+
+/* ARGSUSED */ // version is not used on windows
+void* DL_sym(void *handle, const char *name, const char *version)
+{
+#ifdef TARGET_WINNT
+ return GetProcAddress((HMODULE) handle, name);
+#else // TARGET_WINNT
+ if (version == 0) {
+ return dlsym(handle, name);
+ }
+ else {
+ return dlvsym(handle, name, version);
+ }
+#endif // TARGET_WINNT
+}
+
+int64_t get_el_value(
+ char *base,
+ int64_t offset,
+ int64_t size)
+{
+ int64_t val = 0;
+ switch (size) {
+ case 1:
+ val = static_cast<int64_t>(*((char *)(base + offset)));
+ break;
+ case 2:
+ val = static_cast<int64_t>(*((short *)(base + offset)));
+ break;
+ case 4:
+ val = static_cast<int64_t>(*((int *)(base + offset)));
+ break;
+ default:
+ val = *((int64_t *)(base + offset));
+ break;
+ }
+ return val;
+}
diff --git a/final/offload/src/offload_util.h b/final/offload/src/offload_util.h
new file mode 100644
index 0000000..e50d77d
--- /dev/null
+++ b/final/offload/src/offload_util.h
@@ -0,0 +1,153 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef OFFLOAD_UTIL_H_INCLUDED
+#define OFFLOAD_UTIL_H_INCLUDED
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#ifdef TARGET_WINNT
+#include <windows.h>
+#include <process.h>
+#else // TARGET_WINNT
+#include <dlfcn.h>
+#include <pthread.h>
+#endif // TARGET_WINNT
+
+#ifdef TARGET_WINNT
+typedef unsigned pthread_key_t;
+typedef int pid_t;
+
+#define __func__ __FUNCTION__
+#define strtok_r(s,d,p) strtok_s(s,d,p)
+#define strcasecmp(a,b) stricmp(a,b)
+
+#define thread_key_create(key, destructor) \
+ (((*key = TlsAlloc()) > 0) ? 0 : GetLastError())
+#define thread_key_delete(key) TlsFree(key)
+
+#ifndef S_ISREG
+#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
+#endif
+
+void* thread_getspecific(pthread_key_t key);
+int thread_setspecific(pthread_key_t key, const void *value);
+#else
+#define thread_key_create(key, destructor) \
+ pthread_key_create((key), (destructor))
+#define thread_key_delete(key) pthread_key_delete(key)
+#define thread_getspecific(key) pthread_getspecific(key)
+#define thread_setspecific(key, value) pthread_setspecific(key, value)
+#endif // TARGET_WINNT
+
+// Mutex implementation
+struct mutex_t {
+ mutex_t() {
+#ifdef TARGET_WINNT
+ InitializeCriticalSection(&m_lock);
+#else // TARGET_WINNT
+ pthread_mutex_init(&m_lock, 0);
+#endif // TARGET_WINNT
+ }
+
+ ~mutex_t() {
+#ifdef TARGET_WINNT
+ DeleteCriticalSection(&m_lock);
+#else // TARGET_WINNT
+ pthread_mutex_destroy(&m_lock);
+#endif // TARGET_WINNT
+ }
+
+ void lock() {
+#ifdef TARGET_WINNT
+ EnterCriticalSection(&m_lock);
+#else // TARGET_WINNT
+ pthread_mutex_lock(&m_lock);
+#endif // TARGET_WINNT
+ }
+
+ void unlock() {
+#ifdef TARGET_WINNT
+ LeaveCriticalSection(&m_lock);
+#else // TARGET_WINNT
+ pthread_mutex_unlock(&m_lock);
+#endif // TARGET_WINNT
+ }
+
+private:
+#ifdef TARGET_WINNT
+ CRITICAL_SECTION m_lock;
+#else
+ pthread_mutex_t m_lock;
+#endif
+};
+
+struct mutex_locker_t {
+ mutex_locker_t(mutex_t &mutex) : m_mutex(mutex) {
+ m_mutex.lock();
+ }
+
+ ~mutex_locker_t() {
+ m_mutex.unlock();
+ }
+
+private:
+ mutex_t &m_mutex;
+};
+
+// Dynamic loader interface
+#ifdef TARGET_WINNT
+struct Dl_info
+{
+ char dli_fname[MAX_PATH];
+ void *dli_fbase;
+ char dli_sname[MAX_PATH];
+ const void *dli_saddr;
+};
+
+void* DL_open(const char *path);
+#define DL_close(handle) FreeLibrary((HMODULE) (handle))
+int DL_addr(const void *addr, Dl_info *info);
+#else
+#define DL_open(path) dlopen((path), RTLD_NOW)
+#define DL_close(handle) dlclose(handle)
+#define DL_addr(addr, info) dladdr((addr), (info))
+#endif // TARGET_WINNT
+
+extern void* DL_sym(void *handle, const char *name, const char *version);
+
+// One-time initialization API
+#ifdef TARGET_WINNT
+typedef INIT_ONCE OffloadOnceControl;
+#define OFFLOAD_ONCE_CONTROL_INIT INIT_ONCE_STATIC_INIT
+
+extern void __offload_run_once(OffloadOnceControl *ctrl, void (*func)(void));
+#else
+typedef pthread_once_t OffloadOnceControl;
+#define OFFLOAD_ONCE_CONTROL_INIT PTHREAD_ONCE_INIT
+
+#define __offload_run_once(ctrl, func) pthread_once(ctrl, func)
+#endif // TARGET_WINNT
+
+// Parses size specification string.
+extern bool __offload_parse_size_string(const char *str, uint64_t &new_size);
+
+// Parses string with integer value
+extern bool __offload_parse_int_string(const char *str, int64_t &value);
+
+// get value by its base, offset and size
+int64_t get_el_value(
+ char *base,
+ int64_t offset,
+ int64_t size
+);
+#endif // OFFLOAD_UTIL_H_INCLUDED
diff --git a/final/offload/src/ofldbegin.cpp b/final/offload/src/ofldbegin.cpp
new file mode 100644
index 0000000..945f982
--- /dev/null
+++ b/final/offload/src/ofldbegin.cpp
@@ -0,0 +1,164 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#if HOST_LIBRARY
+#include "offload_host.h"
+#include "offload_myo_host.h"
+#else
+#include "compiler_if_target.h"
+#include "offload_target.h"
+#include "offload_myo_target.h"
+#endif
+
+#ifdef TARGET_WINNT
+#define ALLOCATE(name) __declspec(allocate(name))
+#define DLL_LOCAL
+#else // TARGET_WINNT
+#define ALLOCATE(name) __attribute__((section(name)))
+#define DLL_LOCAL __attribute__((visibility("hidden")))
+#endif // TARGET_WINNT
+
+#if HOST_LIBRARY
+// the host program/shared library should always have __offload_target_image
+// symbol defined. This symbol specifies the beginning of the target program
+// image.
+extern "C" DLL_LOCAL const void* __offload_target_image;
+#else // HOST_LIBRARY
+// Define a weak main which would be used on target side in case usere's
+// source file containing main does not have offload code.
+#pragma weak main
+int main(void)
+{
+ OFFLOAD_TARGET_MAIN();
+ return 0;
+}
+
+#pragma weak MAIN__
+extern "C" int MAIN__(void)
+{
+ OFFLOAD_TARGET_MAIN();
+ return 0;
+}
+#endif // HOST_LIBRARY
+
+// offload section prolog
+ALLOCATE(OFFLOAD_ENTRY_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FuncTable::Entry)))
+#endif // TARGET_WINNT
+static FuncTable::Entry __offload_entry_table_start = { 0 };
+
+// list element for the current module
+static FuncList::Node __offload_entry_node = {
+ { &__offload_entry_table_start + 1, -1 },
+ 0, 0
+};
+
+// offload fp section prolog
+ALLOCATE(OFFLOAD_FUNC_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FuncTable::Entry)))
+#endif // TARGET_WINNT
+static FuncTable::Entry __offload_func_table_start = { 0 };
+
+// list element for the current module
+static FuncList::Node __offload_func_node = {
+ { &__offload_func_table_start + 1, -1 },
+ 0, 0
+};
+
+// offload fp section prolog
+ALLOCATE(OFFLOAD_VAR_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(VarTable::Entry)))
+#endif // TARGET_WINNT
+static VarTable::Entry __offload_var_table_start = { 0 };
+
+// list element for the current module
+static VarList::Node __offload_var_node = {
+ { &__offload_var_table_start + 1 },
+ 0, 0
+};
+
+#ifdef MYO_SUPPORT
+
+// offload myo shared var section prolog
+ALLOCATE(OFFLOAD_MYO_SHARED_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(SharedTableEntry)))
+#endif // TARGET_WINNT
+static SharedTableEntry __offload_myo_shared_table_start = { 0 };
+
+#if HOST_LIBRARY
+// offload myo shared var init section prolog
+ALLOCATE(OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(InitTableEntry)))
+#endif // TARGET_WINNT
+static InitTableEntry __offload_myo_shared_init_table_start = { 0 };
+#endif
+
+// offload myo fptr section prolog
+ALLOCATE(OFFLOAD_MYO_FPTR_TABLE_SECTION_START)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FptrTableEntry)))
+#endif // TARGET_WINNT
+static FptrTableEntry __offload_myo_fptr_table_start = { 0 };
+
+#endif // MYO_SUPPORT
+
+// init/fini code which adds/removes local lookup data to/from the global list
+
+static void offload_fini();
+
+#ifndef TARGET_WINNT
+static void offload_init() __attribute__((constructor(101)));
+#else // TARGET_WINNT
+static void offload_init();
+
+// Place offload initialization before user constructors
+ALLOCATE(OFFLOAD_CRTINIT_SECTION_START)
+static void (*addressof_offload_init)() = offload_init;
+#endif // TARGET_WINNT
+
+static void offload_init()
+{
+ // register offload tables
+ __offload_register_tables(&__offload_entry_node,
+ &__offload_func_node,
+ &__offload_var_node);
+
+#if HOST_LIBRARY
+ __offload_register_image(&__offload_target_image);
+ atexit(offload_fini);
+#endif // HOST_LIBRARY
+
+#ifdef MYO_SUPPORT
+ __offload_myoRegisterTables(
+#if HOST_LIBRARY
+ &__offload_myo_shared_init_table_start + 1,
+#endif // HOST_LIBRARY
+ &__offload_myo_shared_table_start + 1,
+ &__offload_myo_fptr_table_start + 1
+ );
+#endif // MYO_SUPPORT
+}
+
+static void offload_fini()
+{
+#if HOST_LIBRARY
+ __offload_unregister_image(&__offload_target_image);
+#endif // HOST_LIBRARY
+
+ // unregister offload tables
+ __offload_unregister_tables(&__offload_entry_node,
+ &__offload_func_node,
+ &__offload_var_node);
+}
diff --git a/final/offload/src/ofldend.cpp b/final/offload/src/ofldend.cpp
new file mode 100644
index 0000000..f61fe59
--- /dev/null
+++ b/final/offload/src/ofldend.cpp
@@ -0,0 +1,77 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#if HOST_LIBRARY
+#include "offload_host.h"
+#include "offload_myo_host.h"
+#else
+#include "offload_target.h"
+#include "offload_myo_target.h"
+#endif
+
+#ifdef TARGET_WINNT
+#define ALLOCATE(name) __declspec(allocate(name))
+#else // TARGET_WINNT
+#define ALLOCATE(name) __attribute__((section(name)))
+#endif // TARGET_WINNT
+
+// offload entry table
+ALLOCATE(OFFLOAD_ENTRY_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FuncTable::Entry)))
+#endif // TARGET_WINNT
+static FuncTable::Entry __offload_entry_table_end = { (const char*)-1 };
+
+// offload function table
+ALLOCATE(OFFLOAD_FUNC_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FuncTable::Entry)))
+#endif // TARGET_WINNT
+static FuncTable::Entry __offload_func_table_end = { (const char*)-1 };
+
+// data table
+ALLOCATE(OFFLOAD_VAR_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(VarTable::Entry)))
+#endif // TARGET_WINNT
+static VarTable::Entry __offload_var_table_end = { (const char*)-1 };
+
+#ifdef MYO_SUPPORT
+
+// offload myo shared var section epilog
+ALLOCATE(OFFLOAD_MYO_SHARED_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(SharedTableEntry)))
+static SharedTableEntry __offload_myo_shared_table_end = { (const char*)-1, 0 };
+#else // TARGET_WINNT
+static SharedTableEntry __offload_myo_shared_table_end = { 0 };
+#endif // TARGET_WINNT
+
+#if HOST_LIBRARY
+// offload myo shared var init section epilog
+ALLOCATE(OFFLOAD_MYO_SHARED_INIT_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(InitTableEntry)))
+static InitTableEntry __offload_myo_shared_init_table_end = { (const char*)-1, 0 };
+#else // TARGET_WINNT
+static InitTableEntry __offload_myo_shared_init_table_end = { 0 };
+#endif // TARGET_WINNT
+#endif // HOST_LIBRARY
+
+// offload myo fptr section epilog
+ALLOCATE(OFFLOAD_MYO_FPTR_TABLE_SECTION_END)
+#ifdef TARGET_WINNT
+__declspec(align(sizeof(FptrTableEntry)))
+static FptrTableEntry __offload_myo_fptr_table_end = { (const char*)-1, 0, 0 };
+#else // TARGET_WINNT
+static FptrTableEntry __offload_myo_fptr_table_end = { 0 };
+#endif // TARGET_WINNT
+
+#endif // MYO_SUPPORT
diff --git a/final/offload/src/orsl-lite/include/orsl-lite.h b/final/offload/src/orsl-lite/include/orsl-lite.h
new file mode 100644
index 0000000..f26a335
--- /dev/null
+++ b/final/offload/src/orsl-lite/include/orsl-lite.h
@@ -0,0 +1,221 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef _ORSL_LITE_H_
+#define _ORSL_LITE_H_
+
+#ifndef TARGET_WINNT
+#include <sched.h>
+#else
+#define cpu_set_t int
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Type of a ORSLBusySet */
+typedef enum ORSLBusySetType {
+ BUSY_SET_EMPTY = 0, /**< Empty set */
+ BUSY_SET_PARTIAL = 1, /**< Non-empty set that omits some threads */
+ BUSY_SET_FULL = 2 /**< A set that includes all threads on the card */
+} BusySetType;
+
+/** ORSLBusySet encapsulation */
+typedef struct ORSLBusySet {
+ BusySetType type; /**< Set type */
+#ifdef __linux__
+ cpu_set_t cpu_set; /**< CPU mask (unused for BUSY_SET_EMPTY and
+ BUSY_SET_PARTIAL sets) represented by the standard
+ Linux CPU set type -- cpu_set_t. Threads are numbered
+ starting from 0. The maximal possible thread number
+ is system-specific. See CPU_SET(3) family of macros
+ for more details. Unused in ORSL Lite. */
+#endif
+} ORSLBusySet;
+
+/** Client tag */
+typedef char* ORSLTag;
+
+/** Maximal length of tag in characters */
+#define ORSL_MAX_TAG_LEN 128
+
+/** Maximal number of cards that can be managed by ORSL */
+#define ORSL_MAX_CARDS 32
+
+/** Reserves computational resources on a set of cards. Blocks.
+ *
+ * If any of the resources cannot be reserved, this function will block until
+ * they become available. Reservation can be recursive if performed by the
+ * same tag. A recursively reserved resource must be released the same number
+ * of times it was reserved.
+ *
+ * @see ORSLTryReserve
+ *
+ * @param[in] n Number of cards to reserve resources on. Cannot be < 0
+ * or > ORSL_MAX_CARDS.
+ *
+ * @param[in] inds Indices of the cards: an integer array with n elements.
+ * Cannot be NULL if n > 0. Valid card indices are from 0
+ * to ORSL_MAX_CARDS-1. Cannot contain duplicate elements.
+ *
+ * @param[in] bsets Requested resources on each of the card. Cannot be NULL
+ * if n > 0.
+ *
+ * @param[in] tag ORSLTag of the calling client. Cannot be NULL. Length
+ * must not exeed ORSL_MAX_TAG_LEN.
+ *
+ * @returns 0 if the resources were successfully reserved
+ *
+ * @returns EINVAL if any of the arguments is invalid
+ *
+ * @returns EAGAIN limit of recursive reservations reached
+ * (not in ORSL Lite)
+ *
+ * @returns ENOSYS (in ORSL Lite) if type of any of the busy sets is
+ * equal to BUSY_SET_PARTIAL
+ */
+int ORSLReserve(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag);
+
+/** Reserves computational resources on a set of cards. Does not block.
+ *
+ * If any of the resources cannot be reserved, this function will return
+ * immediately. Reservation can be recursive if performed by the same tag.
+ * A recursively reserved resource must be released the same number of times
+ * it was reserved.
+ *
+ * @see ORSLReserve
+ *
+ * @param[in] n Number of cards to reserve resources on. Cannot be < 0
+ * or > ORSL_MAX_CARDS.
+ *
+ * @param[in] inds Indices of the cards: an integer array with n elements.
+ * Cannot be NULL if n > 0. Valid card indices are from 0
+ * to ORSL_MAX_CARDS-1. Cannot contain duplicate elements.
+ *
+ * @param[inout] bsets Requested resources on each of the card. Cannot be
+ * NULL if n > 0.
+ *
+ * @param[in] tag ORSLTag of the calling client. Cannot be NULL. Length
+ * must not exceed ORSL_MAX_TAG_LEN.
+ *
+ * @returns 0 if the resources were successfully reserved
+ *
+ * @returns EBUSY if some of the requested resources are busy
+ *
+ * @returns EINVAL if any of the arguments is invalid
+ *
+ * @returns EAGAIN limit of recursive reservations reached
+ * (not in ORSL Lite)
+ *
+ * @returns ENOSYS (in ORSL Lite) if type of any of the busy sets is
+ * equal to BUSY_SET_PARTIAL
+ */
+int ORSLTryReserve(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag);
+
+/** Granularify of partial reservation */
+typedef enum ORSLPartialGranularity {
+ GRAN_CARD = 0, /**< Card granularity */
+ GRAN_THREAD = 1 /**< Thread granularity */
+} ORSLPartialGranularity;
+
+/** Requests reservation of some of computational resources on a set of cards.
+ * Does not block. Updates user-provided bsets to indicate which resources
+ * were reserved.
+ *
+ * If any of the resources cannot be reserved, this function will update busy
+ * sets provided by the caller to reflect what resources were actually
+ * reserved. This function supports two granularity modes: 'card' and
+ * 'thread'. When granularity is set to 'card', a failure to reserve a thread
+ * on the card will imply that reservation has failed for the whole card. When
+ * granularity is set to 'thread', reservation on a card will be considered
+ * successful as long as at least one thread on the card was successfully
+ * reserved. Reservation can be recursive if performed by the same tag. A
+ * recursively reserved resource must be released the same number of times it
+ * was reserved.
+ *
+ * @param[in] gran Reservation granularity
+ *
+ * @param[in] n Number of cards to reserve resources on. Cannot be < 0
+ * or > ORSL_MAX_CARDS.
+ *
+ * @param[in] inds Indices of the cards: an integer array with n elements.
+ * Cannot be NULL if n > 0. Valid card indices are from 0
+ * to ORSL_MAX_CARDS-1. Cannot contain duplicate elements.
+ *
+ * @param[in] bsets Requested resources on each of the card. Cannot be NULL
+ * if n > 0.
+ *
+ * @param[in] tag ORSLTag of the calling client. Cannot be NULL. Length
+ * must not exceed ORSL_MAX_TAG_LEN.
+ *
+ * @returns 0 if at least some of the resources were successfully
+ * reserved
+ *
+ * @returns EBUSY if all of the requested resources are busy
+ *
+ * @returns EINVAL if any of the arguments is invalid
+ *
+ * @returns EAGAIN limit of recursive reservations reached
+ * (not in ORSL Lite)
+ *
+ * @returns ENOSYS (in ORSL Lite) if type of any of the busy sets is
+ * equal to BUSY_SET_PARTIAL
+ */
+int ORSLReservePartial(const ORSLPartialGranularity gran, const int n,
+ const int *__restrict inds,
+ ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag);
+
+/** Releases previously reserved computational resources on a set of cards.
+ *
+ * This function will fail if any of the resources to be released were not
+ * reserved by the calling client.
+ *
+ * @see ORSLReserve
+ * @see ORSLTryReserve
+ * @see ORSLReservePartial
+ *
+ * @param[in] n Number of cards to reserve resources on. Cannot be < 0
+ * or > ORSL_MAX_CARDS.
+ *
+ * @param[in] inds Indices of the cards: an integer array with n elements.
+ * Cannot be NULL if n > 0. Valid card indices are from 0
+ * to ORSL_MAX_CARDS-1. Cannot contain duplicate elements.
+ *
+ * @param[in] bsets Requested resources on each of the card. Cannot be NULL
+ * if n > 0.
+ *
+ * @param[in] tag ORSLTag of the calling client. Cannot be NULL. Length
+ * must not exceed ORSL_MAX_TAG_LEN.
+ *
+ * @returns 0 if the resources were successfully released
+ *
+ * @returns EINVAL if any of the arguments is invalid
+ *
+ * @returns EPERM the calling client did not reserve some of the
+ * resources it is trying to release.
+ *
+ * @returns ENOSYS (in ORSL Lite) if type of any of the busy sets is
+ * equal to BUSY_SET_PARTIAL
+ */
+int ORSLRelease(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/final/offload/src/orsl-lite/lib/orsl-lite.c b/final/offload/src/orsl-lite/lib/orsl-lite.c
new file mode 100644
index 0000000..221cda7
--- /dev/null
+++ b/final/offload/src/orsl-lite/lib/orsl-lite.c
@@ -0,0 +1,337 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <errno.h>
+#include <string.h>
+#include <limits.h>
+#include <assert.h>
+
+#include "orsl-lite/include/orsl-lite.h"
+
+#define DISABLE_SYMBOL_VERSIONING
+
+#if defined(__linux__) && !defined(DISABLE_SYMBOL_VERSIONING)
+#define symver(src, tgt, verstr) __asm__(".symver " #src "," #tgt verstr)
+symver(ORSLReserve0, ORSLReserve, "@@ORSL_0.0");
+symver(ORSLTryReserve0, ORSLTryReserve, "@@ORSL_0.0");
+symver(ORSLReservePartial0, ORSLReservePartial, "@@ORSL_0.0");
+symver(ORSLRelease0, ORSLRelease, "@@ORSL_0.0");
+#else
+#define ORSLReserve0 ORSLReserve
+#define ORSLTryReserve0 ORSLTryReserve
+#define ORSLReservePartial0 ORSLReservePartial
+#define ORSLRelease0 ORSLRelease
+#endif
+
+#ifdef __linux__
+#include <pthread.h>
+static pthread_mutex_t global_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t release_cond = PTHREAD_COND_INITIALIZER;
+#endif
+
+#ifdef _WIN32
+#include <windows.h>
+#pragma intrinsic(_ReadWriteBarrier)
+static SRWLOCK global_mutex = SRWLOCK_INIT;
+static volatile int release_cond_initialized = 0;
+static CONDITION_VARIABLE release_cond;
+
+static void state_lazy_init_sync()
+{
+ if (!release_cond_initialized) {
+ AcquireSRWLockExclusive(&global_mutex);
+ _ReadWriteBarrier();
+ if (!release_cond_initialized) {
+ InitializeConditionVariable(&release_cond);
+ release_cond_initialized = 1;
+ }
+ ReleaseSRWLockExclusive(&global_mutex);
+ }
+}
+#endif
+
+static int state_lock()
+{
+#ifdef __linux__
+ return pthread_mutex_lock(&global_mutex);
+#endif
+
+#ifdef _WIN32
+ AcquireSRWLockExclusive(&global_mutex);
+ return 0;
+#endif
+}
+
+static int state_unlock()
+{
+#ifdef __linux__
+ return pthread_mutex_unlock(&global_mutex);
+#endif
+
+#ifdef _WIN32
+ ReleaseSRWLockExclusive(&global_mutex);
+ return 0;
+#endif
+}
+
+static int state_wait_for_release()
+{
+#ifdef __linux__
+ return pthread_cond_wait(&release_cond, &global_mutex);
+#endif
+
+#ifdef _WIN32
+ return SleepConditionVariableSRW(&release_cond,
+ &global_mutex, INFINITE, 0) == 0 ? 1 : 0;
+#endif
+}
+
+static int state_signal_release()
+{
+#ifdef __linux__
+ return pthread_cond_signal(&release_cond);
+#endif
+
+#ifdef _WIN32
+ WakeConditionVariable(&release_cond);
+ return 0;
+#endif
+}
+
+static struct {
+ char owner[ORSL_MAX_TAG_LEN + 1];
+ unsigned long rsrv_cnt;
+} rsrv_data[ORSL_MAX_CARDS];
+
+static int check_args(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag)
+{
+ int i;
+ int card_specified[ORSL_MAX_CARDS];
+ if (tag == NULL) return -1;
+ if (strlen((char *)tag) > ORSL_MAX_TAG_LEN) return -1;
+ if (n < 0 || n >= ORSL_MAX_CARDS) return -1;
+ if (n != 0 && (inds == NULL || bsets == NULL)) return -1;
+ for (i = 0; i < ORSL_MAX_CARDS; i++)
+ card_specified[i] = 0;
+ for (i = 0; i < n; i++) {
+ int ind = inds[i];
+ if (ind < 0 || ind >= ORSL_MAX_CARDS) return -1;
+ if (card_specified[ind]) return -1;
+ card_specified[ind] = 1;
+ }
+ return 0;
+}
+
+static int check_bsets(const int n, const ORSLBusySet *bsets)
+{
+ int i;
+ for (i = 0; i < n; i++)
+ if (bsets[i].type == BUSY_SET_PARTIAL) return -1;
+ return 0;
+}
+
+static int can_reserve_card(int card, const ORSLBusySet *__restrict bset,
+ const ORSLTag __restrict tag)
+{
+ assert(tag != NULL);
+ assert(bset != NULL);
+ assert(strlen((char *)tag) < ORSL_MAX_TAG_LEN);
+ assert(bset->type != BUSY_SET_PARTIAL);
+
+ return (bset->type == BUSY_SET_EMPTY ||
+ ((rsrv_data[card].rsrv_cnt == 0 ||
+ strncmp((char *)tag,
+ rsrv_data[card].owner, ORSL_MAX_TAG_LEN) == 0) &&
+ rsrv_data[card].rsrv_cnt < ULONG_MAX)) ? 0 : - 1;
+}
+
+static void reserve_card(int card, const ORSLBusySet *__restrict bset,
+ const ORSLTag __restrict tag)
+{
+ assert(tag != NULL);
+ assert(bset != NULL);
+ assert(strlen((char *)tag) < ORSL_MAX_TAG_LEN);
+ assert(bset->type != BUSY_SET_PARTIAL);
+
+ if (bset->type == BUSY_SET_EMPTY)
+ return;
+
+ assert(rsrv_data[card].rsrv_cnt == 0 ||
+ strncmp((char *)tag,
+ rsrv_data[card].owner, ORSL_MAX_TAG_LEN) == 0);
+ assert(rsrv_data[card].rsrv_cnt < ULONG_MAX);
+
+ if (rsrv_data[card].rsrv_cnt == 0)
+ strncpy(rsrv_data[card].owner, (char *)tag, ORSL_MAX_TAG_LEN);
+ rsrv_data[card].owner[ORSL_MAX_TAG_LEN] = '\0';
+ rsrv_data[card].rsrv_cnt++;
+}
+
+static int can_release_card(int card, const ORSLBusySet *__restrict bset,
+ const ORSLTag __restrict tag)
+{
+ assert(tag != NULL);
+ assert(bset != NULL);
+ assert(strlen((char *)tag) < ORSL_MAX_TAG_LEN);
+ assert(bset->type != BUSY_SET_PARTIAL);
+
+ return (bset->type == BUSY_SET_EMPTY || (rsrv_data[card].rsrv_cnt > 0 &&
+ strncmp((char *)tag,
+ rsrv_data[card].owner, ORSL_MAX_TAG_LEN) == 0)) ? 0 : 1;
+}
+
+static void release_card(int card, const ORSLBusySet *__restrict bset,
+ const ORSLTag __restrict tag)
+{
+ assert(tag != NULL);
+ assert(bset != NULL);
+ assert(strlen((char *)tag) < ORSL_MAX_TAG_LEN);
+ assert(bset->type != BUSY_SET_PARTIAL);
+
+ if (bset->type == BUSY_SET_EMPTY)
+ return;
+
+ assert(strncmp((char *)tag,
+ rsrv_data[card].owner, ORSL_MAX_TAG_LEN) == 0);
+ assert(rsrv_data[card].rsrv_cnt > 0);
+
+ rsrv_data[card].rsrv_cnt--;
+}
+
+int ORSLReserve0(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag)
+{
+ int i, ok;
+
+ if (n == 0) return 0;
+ if (check_args(n, inds, bsets, tag) != 0) return EINVAL;
+ if (check_bsets(n, bsets) != 0) return ENOSYS;
+
+ state_lock();
+
+ /* Loop until we find that all the resources we want are available */
+ do {
+ ok = 1;
+ for (i = 0; i < n; i++)
+ if (can_reserve_card(inds[i], &bsets[i], tag) != 0) {
+ ok = 0;
+ /* Wait for someone to release some resources */
+ state_wait_for_release();
+ break;
+ }
+ } while (!ok);
+
+ /* At this point we are good to reserve_card the resources we want */
+ for (i = 0; i < n; i++)
+ reserve_card(inds[i], &bsets[i], tag);
+
+ state_unlock();
+ return 0;
+}
+
+int ORSLTryReserve0(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag)
+{
+ int i, rc = EBUSY;
+
+ if (n == 0) return 0;
+ if (check_args(n, inds, bsets, tag) != 0) return EINVAL;
+ if (check_bsets(n, bsets) != 0) return ENOSYS;
+
+ state_lock();
+
+ /* Check resource availability once */
+ for (i = 0; i < n; i++)
+ if (can_reserve_card(inds[i], &bsets[i], tag) != 0)
+ goto bail_out;
+
+ /* At this point we are good to reserve the resources we want */
+ for (i = 0; i < n; i++)
+ reserve_card(inds[i], &bsets[i], tag);
+
+ rc = 0;
+
+bail_out:
+ state_unlock();
+ return rc;
+}
+
+int ORSLReservePartial0(const ORSLPartialGranularity gran, const int n,
+ const int *__restrict inds, ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag)
+{
+ int rc = EBUSY;
+ int i, num_avail = n;
+
+ if (n == 0) return 0;
+ if (gran != GRAN_CARD && gran != GRAN_THREAD) return EINVAL;
+ if (gran != GRAN_CARD) return EINVAL;
+ if (check_args(n, inds, bsets, tag) != 0) return EINVAL;
+ if (check_bsets(n, bsets) != 0) return ENOSYS;
+
+ state_lock();
+
+ /* Check resource availability once; remove unavailable resources from the
+ * user-provided list */
+ for (i = 0; i < n; i++)
+ if (can_reserve_card(inds[i], &bsets[i], tag) != 0) {
+ num_avail--;
+ bsets[i].type = BUSY_SET_EMPTY;
+ }
+
+ if (num_avail == 0)
+ goto bail_out;
+
+ /* At this point we are good to reserve the resources we want */
+ for (i = 0; i < n; i++)
+ reserve_card(inds[i], &bsets[i], tag);
+
+ rc = 0;
+
+bail_out:
+ state_unlock();
+ return rc;
+}
+
+int ORSLRelease0(const int n, const int *__restrict inds,
+ const ORSLBusySet *__restrict bsets,
+ const ORSLTag __restrict tag)
+{
+ int i, rc = EPERM;
+
+ if (n == 0) return 0;
+ if (check_args(n, inds, bsets, tag) != 0) return EINVAL;
+ if (check_bsets(n, bsets) != 0) return ENOSYS;
+
+ state_lock();
+
+ /* Check that we can release all the resources */
+ for (i = 0; i < n; i++)
+ if (can_release_card(inds[i], &bsets[i], tag) != 0)
+ goto bail_out;
+
+ /* At this point we are good to release the resources we want */
+ for (i = 0; i < n; i++)
+ release_card(inds[i], &bsets[i], tag);
+
+ state_signal_release();
+
+ rc = 0;
+
+bail_out:
+ state_unlock();
+ return rc;
+}
+
+/* vim:set et: */
diff --git a/final/offload/src/orsl-lite/version.txt b/final/offload/src/orsl-lite/version.txt
new file mode 100644
index 0000000..ab5f599
--- /dev/null
+++ b/final/offload/src/orsl-lite/version.txt
@@ -0,0 +1 @@
+ORSL-lite 0.7
diff --git a/final/offload/src/rdtsc.h b/final/offload/src/rdtsc.h
new file mode 100644
index 0000000..da91d71
--- /dev/null
+++ b/final/offload/src/rdtsc.h
@@ -0,0 +1,17 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <stdint.h>
+
+uint64_t _rdtsc()
+{
+ uint32_t eax, edx;
+ asm volatile ("rdtsc" : "=a" (eax), "=d" (edx));
+ return ((uint64_t)edx << 32) | eax;
+}
diff --git a/final/offload/src/use_mpss2.txt b/final/offload/src/use_mpss2.txt
new file mode 100644
index 0000000..948f483
--- /dev/null
+++ b/final/offload/src/use_mpss2.txt
@@ -0,0 +1 @@
+2.1.6720-13
diff --git a/final/offload/src/use_mpss_win.txt b/final/offload/src/use_mpss_win.txt
new file mode 100644
index 0000000..948f483
--- /dev/null
+++ b/final/offload/src/use_mpss_win.txt
@@ -0,0 +1 @@
+2.1.6720-13
diff --git a/final/runtime/Build_With_CMake.txt b/final/runtime/Build_With_CMake.txt
new file mode 100644
index 0000000..5f114ac
--- /dev/null
+++ b/final/runtime/Build_With_CMake.txt
@@ -0,0 +1,229 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+==========================================================
+How to Build the LLVM* OpenMP* Runtime Library using CMake
+==========================================================
+
+==== Version of CMake required: v2.8.0 or above ====
+
+============================================
+How to call cmake initially, then repeatedly
+============================================
+- When calling cmake for the first time, all needed compiler options
+ must be specified on the command line. After this initial call to
+ cmake, the compiler definitions must not be included for further calls
+ to cmake. Other options can be specified on the command line multiple
+ times including all definitions in the Build options section below.
+- Example of configuring, building, reconfiguring, rebuilding:
+ $ mkdir build
+ $ cd build
+ $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLIBOMP_ARCH=i386 .. # Initial configuration
+ $ make
+ ...
+ $ make clean
+ $ cmake -DLIBOMP_ARCH=x86_64 -DCMAKE_BUILD_TYPE=Debug .. # Second configuration
+ $ make
+ ...
+ $ rm -rf *
+ $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLIBOMP_ARCH=x86_64 .. # Third configuration
+ $ make
+- Notice in the example how the compiler definitions are only specified
+ for an empty build directory, but other Build options are used at any time.
+- The file CMakeCache.txt which is created after the first call to cmake
+ is a configuration file which holds all the values for the Build options.
+ These configuration values can be changed using a text editor to modify
+ CMakeCache.txt as opposed to using definitions on the command line.
+- To have cmake create a particular type of build generator file simply
+ inlude the -G <Generator name> option:
+ $ cmake -G "Unix Makefiles" ...
+ You can see a list of generators cmake supports by executing cmake with
+ no arguments and a list will be printed.
+
+=====================
+Instructions to Build
+=====================
+ $ cd libomp_top_level/ [ directory with src/ , exports/ , tools/ , etc. ]
+ $ mkdir build
+ $ cd build
+
+ [ Unix* Libraries ]
+ $ cmake -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> ..
+
+ [ Intel(R) Many Integrated Core Library (Intel(R) MIC Library) ]
+ $ cmake -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> -DLIBOMP_ARCH=mic ..
+
+ [ Windows Libraries ]
+ $ cmake -G <Generator Type> -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> -DCMAKE_ASM_MASM_COMPILER=[ml | ml64] -DCMAKE_BUILD_TYPE=Release ..
+
+ $ make
+ $ make install
+
+==================
+Mac* Fat Libraries
+==================
+On OS X* machines, it is possible to build universal (or fat) libraries which
+include both i386 and x86_64 architecture objects in a
+single archive.
+ $ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_OSX_ARCHITECTURES='i386;x86_64' ..
+ $ make
+There is also an option -DLIBOMP_OSX_ARCHITECTURES which can be set in case
+this is an LLVM source tree build which will only set the libomp library
+to a universal fat library and prevent having the entire llvm/clang build
+produce universal binaries.
+
+===========
+Micro tests
+===========
+After the library has been built, there are five optional microtests that
+can be performed. Some will be skipped based upon the platform.
+To run the tests,
+$ make libomp-micro-tests
+
+=============
+CMake options
+=============
+-DCMAKE_C_COMPILER=<C compiler name>
+Specify the C compiler
+
+-DCMAKE_CXX_COMPILER=<C++ compiler name>
+Specify the C++ compiler
+
+-DCMAKE_Fortran_COMPILER=<Fortran compiler name>
+This option is only needed when -DLIBOMP_FORTRAN_MODULES is on.
+So typically, a Fortran compiler is not needed during the build.
+Specify the Fortran compiler
+
+-DCMAKE_ASM_MASM_COMPILER=[ml | ml64 ]
+This option is Windows* Only
+
+-DLIBOMP_ARCH=i386|x86_64|arm|ppc64|ppc64le|aarch64|mic
+The default for the option is chosen based on the probing the compiler for
+architecture macros (e.g., is __x86_64__ predefined by compiler?).
+
+==== First values listed are the default value ====
+-DLIBOMP_LIB_TYPE=normal|profile|stubs
+Library type can be normal, profile, or stubs.
+
+-DCMAKE_BUILD_TYPE=Release|Debug|RelWithDebInfo
+Build type can be Release, Debug, or RelWithDebInfo.
+
+-DLIBOMP_OMP_VERSION=45|40|30
+OpenMP version can be either 45, 40 or 30.
+
+-DLIBOMP_MIC_ARCH=knc|knf
+This value is ignored if LIBOMP_ARCH != mic
+Intel(R) MIC Architecture, can be knf or knc.
+
+-DLIBOMP_FORTRAN_MODULES=off|on
+Should the Fortran modules be created (requires Fortran compiler)
+
+-DLIBOMP_USE_ADAPTIVE_LOCKS=on|off
+Should adaptive (TSX-based) locks be included?
+These are x86 specific. This feature is turned on by default
+for i386 and x86_64. Otherwise, it is turned off.
+
+-DLIBOMP_USE_INTERNODE_ALIGNMENT=off|on
+Should 4096-byte alignment be used for certain data structures?
+This option is useful on multinode systems where a small CACHE_LINE
+setting leads to false sharing. This option is off by default.
+
+-DLIBOMP_USE_VERSION_SYMBOLS=on|off
+Should versioned symbols be used for building the library?
+This option only makes sense for ELF based libraries where version
+symbols are supported (Linux, some BSD* variants). It is off
+by default for Windows and Mac, but on for other Unix based operating
+systems.
+
+-DLIBOMP_ENABLE_SHARED=on|off
+Shared library instead of static library? (Note: static libraries are not
+supported on Windows). If LIBOMP_ENABLE_SHARED is off, then static OpenMP
+libraries will be built instead of dynamic ones.
+
+-DLIBOMP_OMPT_SUPPORT=off|on
+Should OMPT support be included in the build? (Not supported on Windows)
+If LIBOMP_OMPT_SUPPORT is off, then both ompt_blame and ompt_trace are ignored.
+
+-DLIBOMP_OMPT_BLAME=on|off
+Should OMPT blame functionality be included in the build?
+
+-DLIBOMP_OMPT_TRACE=on|off
+Should OMPT trace functionality be included in the build?
+
+-DLIBOMP_STATS=off|on
+Should include stats-gathering code be included in the build?
+
+-DLIBOMP_USE_DEBUGGER=off|on
+Should the friendly debugger interface be included in the build?
+
+-DLIBOMP_USE_HWLOC=off|on
+Should the Hwloc library be used for affinity?
+This option is not supported on Windows.
+http://www.open-mpi.org/projects/hwloc
+
+-DLIBOMP_HWLOC_INSTALL_DIR=/path/to/hwloc/install/dir
+Default: /usr/local
+This option is only used if LIBOMP_USE_HWLOC is on.
+Specifies install location of Hwloc. The configuration system will look for
+hwloc.h in ${LIBOMP_HWLOC_INSTALL_DIR}/include and the library in
+${LIBOMP_HWLOC_INSTALL_DIR}/lib.
+
+-DLIBOMP_LLVM_LIT_EXECUTABLE=/path/to/llvm-lit
+Default: search in PATH
+Specifiy full path to llvm-lit executable for running tests.
+
+-DOPENMP_LLVM_TOOLS_DIR=/path/to/built/llvm/tools
+Default: search for tools in path
+Additional path to search for LLVM tools needed by tests.
+
+================================
+How to append flags to the build
+================================
+- These flags are *appended*. They do not
+ overwrite any of the preset flags.
+-DLIBOMP_CPPFLAGS=<space-separated flags> -- Additional C preprocessor flags
+-DLIBOMP_CFLAGS=<space-separated flags> -- Additional C compiler flags
+-DLIBOMP_CXXFLAGS=<space-separated flags> -- Additional C++ compiler flags
+-DLIBOMP_ASMFLAGS=<space-separated flags> -- Additional assembly flags
+-DLIBOMP_LDFLAGS=<space-separated flags> -- Additional linker flags
+-DLIBOMP_LIBFLAGS=<space-separated flags> -- Additional libraries to link
+-DLIBOMP_FFLAGS=<space-separated flags> -- Additional Fortran compiler flags
+
+=======================
+Example usages of CMake
+=======================
+---- Typical usage ----
+cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc ..
+cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
+cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
+
+---- With Various Options ----
+- Build the i386 Linux library using GCC*
+cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLIBOMP_ARCH=i386 ..
+
+- Build the x86_64 debug Mac library using Clang*
+cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBOMP_ARCH=x86_64 -DCMAKE_BUILD_TYPE=Debug ..
+
+- Build the library (architecture determined by probing compiler) using the
+ Intel(R) C Compiler and the Intel(R) C++ Compiler. Also, create the fortran modules using
+ the Intel(R) Fortran Compiler.
+cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort -DLIBOMP_FORTRAN_MODULES=on ..
+
+- Have CMake Find the C/C++ compiler, and specify additional flags for the C compiler, preprocessor, and C++ compiler.
+cmake -DLIBOMP_CFLAGS='-specific-flag' -DLIBOMP_CPPFLAGS='-DNEW_FEATURE=1 -DOLD_FEATURE=0' -DLIBOMP_CXXFLAGS='--one-specific-flag --two-specific-flag' ..
+
+---- Build the stubs library ----
+cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLIBOMP_LIB_TYPE=stubs ..
+
+=========
+Footnotes
+=========
+[*] Other names and brands may be claimed as the property of others.
diff --git a/final/runtime/CMakeLists.txt b/final/runtime/CMakeLists.txt
new file mode 100644
index 0000000..77599f5
--- /dev/null
+++ b/final/runtime/CMakeLists.txt
@@ -0,0 +1,375 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# CMAKE libomp
+cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+
+# Add cmake directory to search for custom cmake functions
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
+
+# Standalone build or part of LLVM?
+set(LIBOMP_STANDALONE_BUILD FALSE)
+if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}" OR
+ "${CMAKE_SOURCE_DIR}/runtime" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ project(libomp C CXX)
+ set(LIBOMP_STANDALONE_BUILD TRUE)
+endif()
+
+# Set libomp version
+set(LIBOMP_VERSION_MAJOR 5)
+set(LIBOMP_VERSION_MINOR 0)
+
+# These include files are in the cmake/ subdirectory
+include(LibompUtils)
+include(LibompGetArchitecture)
+include(LibompHandleFlags)
+include(LibompDefinitions)
+
+# Determine the target architecture
+if(${LIBOMP_STANDALONE_BUILD})
+ # If adding a new architecture, take a look at cmake/LibompGetArchitecture.cmake
+ libomp_get_architecture(LIBOMP_DETECTED_ARCH)
+ set(LIBOMP_ARCH ${LIBOMP_DETECTED_ARCH} CACHE STRING
+ "The architecture to build for (x86_64/i386/arm/ppc64/ppc64le/aarch64/mic).")
+ # Allow user to choose a suffix for the installation directory.
+ set(LIBOMP_LIBDIR_SUFFIX "" CACHE STRING
+ "suffix of lib installation directory e.g., 64 => lib64")
+ # Should assertions be enabled? They are on by default.
+ set(LIBOMP_ENABLE_ASSERTIONS TRUE CACHE BOOL
+ "enable assertions?")
+ set(LIBOMP_ENABLE_WERROR FALSE CACHE BOOL
+ "Enable -Werror flags to turn warnings into errors for supporting compilers.")
+ # CMAKE_BUILD_TYPE was not defined, set default to Release
+ if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+else() # Part of LLVM build
+ # Determine the native architecture from LLVM.
+ string(TOLOWER "${LLVM_TARGET_ARCH}" LIBOMP_NATIVE_ARCH)
+ if( LIBOMP_NATIVE_ARCH STREQUAL "host" )
+ string(REGEX MATCH "^[^-]*" LIBOMP_NATIVE_ARCH ${LLVM_HOST_TRIPLE})
+ endif ()
+ if(LIBOMP_NATIVE_ARCH MATCHES "i[2-6]86")
+ set(LIBOMP_ARCH i386)
+ elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86")
+ set(LIBOMP_ARCH i386)
+ elseif(LIBOMP_NATIVE_ARCH STREQUAL "amd64")
+ set(LIBOMP_ARCH x86_64)
+ elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86_64")
+ set(LIBOMP_ARCH x86_64)
+ elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc")
+ set(LIBOMP_ARCH ppc64)
+ elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64")
+ set(LIBOMP_ARCH aarch64)
+ elseif(LIBOMP_NATIVE_ARCH MATCHES "arm64")
+ set(LIBOMP_ARCH aarch64)
+ elseif(LIBOMP_NATIVE_ARCH MATCHES "arm")
+ set(LIBOMP_ARCH arm)
+ else()
+ # last ditch effort
+ libomp_get_architecture(LIBOMP_ARCH)
+ endif ()
+ set(LIBOMP_LIBDIR_SUFFIX ${LLVM_LIBDIR_SUFFIX})
+ set(LIBOMP_ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS})
+ set(LIBOMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR})
+endif()
+libomp_check_variable(LIBOMP_ARCH 32e x86_64 32 i386 arm ppc64 ppc64le aarch64 mic)
+
+set(LIBOMP_LIB_TYPE normal CACHE STRING
+ "Performance,Profiling,Stubs library (normal/profile/stubs)")
+libomp_check_variable(LIBOMP_LIB_TYPE normal profile stubs)
+set(LIBOMP_OMP_VERSION 45 CACHE STRING
+ "The OpenMP version (45/40/30)")
+if(LIBOMP_OMP_VERSION EQUAL 41)
+ libomp_warning_say("LIBOMP_OMP_VERSION=41 is deprecated and will be removed in a later version. Please use 45.")
+ set(LIBOMP_OMP_VERSION 45)
+endif()
+libomp_check_variable(LIBOMP_OMP_VERSION 45 40 30)
+# Set the OpenMP Year and Month assiociated with version
+if(${LIBOMP_OMP_VERSION} GREATER 40 OR ${LIBOMP_OMP_VERSION} EQUAL 40)
+ set(LIBOMP_OMP_YEAR_MONTH 201307)
+elseif(${LIBOMP_OMP_VERSION} GREATER 30 OR ${LIBOMP_OMP_VERSION} EQUAL 30)
+ set(LIBOMP_OMP_YEAR_MONTH 201107)
+else()
+ set(LIBOMP_OMP_YEAR_MONTH 200505)
+endif()
+set(LIBOMP_MIC_ARCH knc CACHE STRING
+ "Intel(R) Many Integrated Core Architecture (Intel(R) MIC Architecture) (knf/knc). Ignored if not Intel(R) MIC Architecture build.")
+if("${LIBOMP_ARCH}" STREQUAL "mic")
+ libomp_check_variable(LIBOMP_MIC_ARCH knf knc)
+endif()
+set(LIBOMP_FORTRAN_MODULES FALSE CACHE BOOL
+ "Create Fortran module files? (requires fortran compiler)")
+
+# - Support for universal fat binary builds on Mac
+# - Having this extra variable allows people to build this library as a universal library
+# without forcing a universal build of the llvm/clang compiler.
+set(LIBOMP_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING
+ "For Mac builds, semicolon separated list of architectures to build for universal fat binary.")
+set(CMAKE_OSX_ARCHITECTURES ${LIBOMP_OSX_ARCHITECTURES})
+
+# Should @rpath be used for dynamic libraries on Mac?
+# The if(NOT DEFINED) is there to guard a cached value of the variable if one
+# exists so there is no interference with what the user wants. Also, no cache entry
+# is created so there are no inadvertant effects on other parts of LLVM.
+if(NOT DEFINED CMAKE_MACOSX_RPATH)
+ set(CMAKE_MACOSX_RPATH TRUE)
+endif()
+
+# User specified flags. These are appended to the configured flags.
+set(LIBOMP_CFLAGS "" CACHE STRING
+ "Appended user specified C compiler flags.")
+set(LIBOMP_CXXFLAGS "" CACHE STRING
+ "Appended user specified C++ compiler flags.")
+set(LIBOMP_CPPFLAGS "" CACHE STRING
+ "Appended user specified C preprocessor flags.")
+set(LIBOMP_ASMFLAGS "" CACHE STRING
+ "Appended user specified assembler flags.")
+set(LIBOMP_LDFLAGS "" CACHE STRING
+ "Appended user specified linker flags.")
+set(LIBOMP_LIBFLAGS "" CACHE STRING
+ "Appended user specified linked libs flags. (e.g., -lm)")
+set(LIBOMP_FFLAGS "" CACHE STRING
+ "Appended user specified Fortran compiler flags. These are only used if LIBOMP_FORTRAN_MODULES==TRUE.")
+
+# Should the libomp library and generated headers be copied into the original source exports/ directory
+# Turning this to FALSE aids parallel builds to not interfere with each other.
+# Currently, the testsuite module expects the just built OpenMP library to be located inside the exports/
+# directory. TODO: have testsuite run under llvm-lit directly. We can then get rid of copying to exports/
+set(LIBOMP_COPY_EXPORTS TRUE CACHE STRING
+ "Should exports be copied into source exports/ directory?")
+
+# HWLOC-support
+set(LIBOMP_USE_HWLOC FALSE CACHE BOOL
+ "Use Hwloc (http://www.open-mpi.org/projects/hwloc/) library for affinity?")
+set(LIBOMP_HWLOC_INSTALL_DIR /usr/local CACHE PATH
+ "Install path for hwloc library")
+
+# Get the build number from kmp_version.c
+libomp_get_build_number("${CMAKE_CURRENT_SOURCE_DIR}" LIBOMP_VERSION_BUILD)
+math(EXPR LIBOMP_VERSION_BUILD_YEAR "${LIBOMP_VERSION_BUILD}/10000")
+math(EXPR LIBOMP_VERSION_BUILD_MONTH_DAY "${LIBOMP_VERSION_BUILD}%10000")
+
+# Currently don't record any timestamps
+set(LIBOMP_BUILD_DATE "No_Timestamp")
+
+# Architecture
+set(IA32 FALSE)
+set(INTEL64 FALSE)
+set(ARM FALSE)
+set(AARCH64 FALSE)
+set(PPC64BE FALSE)
+set(PPC64LE FALSE)
+set(PPC64 FALSE)
+set(MIC FALSE)
+if("${LIBOMP_ARCH}" STREQUAL "i386" OR "${LIBOMP_ARCH}" STREQUAL "32") # IA-32 architecture
+ set(IA32 TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "x86_64" OR "${LIBOMP_ARCH}" STREQUAL "32e") # Intel(R) 64 architecture
+ set(INTEL64 TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "arm") # ARM architecture
+ set(ARM TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "ppc64") # PPC64BE architecture
+ set(PPC64BE TRUE)
+ set(PPC64 TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "ppc64le") # PPC64LE architecture
+ set(PPC64LE TRUE)
+ set(PPC64 TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "aarch64") # AARCH64 architecture
+ set(AARCH64 TRUE)
+elseif("${LIBOMP_ARCH}" STREQUAL "mic") # Intel(R) Many Integrated Core Architecture
+ set(MIC TRUE)
+endif()
+
+# Set some flags based on build_type
+set(RELEASE_BUILD FALSE)
+set(DEBUG_BUILD FALSE)
+set(RELWITHDEBINFO_BUILD FALSE)
+set(MINSIZEREL_BUILD FALSE)
+string(TOLOWER "${CMAKE_BUILD_TYPE}" libomp_build_type_lowercase)
+if("${libomp_build_type_lowercase}" STREQUAL "release")
+ set(RELEASE_BUILD TRUE)
+elseif("${libomp_build_type_lowercase}" STREQUAL "debug")
+ set(DEBUG_BUILD TRUE)
+elseif("${libomp_build_type_lowercase}" STREQUAL "relwithdebinfo")
+ set(RELWITHDEBINFO_BUILD TRUE)
+elseif("${libomp_build_type_lowercase}" STREQUAL "minsizerel")
+ set(MINSIZEREL_BUILD TRUE)
+endif()
+
+# Include itt notify interface?
+set(LIBOMP_USE_ITT_NOTIFY TRUE CACHE BOOL
+ "Enable ITT notify?")
+
+# normal, profile, stubs library.
+set(NORMAL_LIBRARY FALSE)
+set(STUBS_LIBRARY FALSE)
+set(PROFILE_LIBRARY FALSE)
+if("${LIBOMP_LIB_TYPE}" STREQUAL "normal")
+ set(NORMAL_LIBRARY TRUE)
+elseif("${LIBOMP_LIB_TYPE}" STREQUAL "profile")
+ set(PROFILE_LIBRARY TRUE)
+elseif("${LIBOMP_LIB_TYPE}" STREQUAL "stubs")
+ set(STUBS_LIBRARY TRUE)
+endif()
+
+# Setting directory names
+set(LIBOMP_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(LIBOMP_SRC_DIR ${LIBOMP_BASE_DIR}/src)
+set(LIBOMP_TOOLS_DIR ${LIBOMP_BASE_DIR}/tools)
+set(LIBOMP_INC_DIR ${LIBOMP_SRC_DIR}/include/${LIBOMP_OMP_VERSION})
+set(LIBOMP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
+# Enabling Fortran if it is needed
+if(${LIBOMP_FORTRAN_MODULES})
+ enable_language(Fortran)
+endif()
+# Enable MASM Compiler if it is needed (Windows only)
+if(WIN32)
+ enable_language(ASM_MASM)
+endif()
+
+# Getting legal type/arch
+libomp_get_legal_type(LIBOMP_LEGAL_TYPE)
+libomp_get_legal_arch(LIBOMP_LEGAL_ARCH)
+
+# Compiler flag checks, library checks, threading check, etc.
+include(config-ix)
+
+# Is there a quad precision data type available?
+# TODO: Make this a real feature check
+set(LIBOMP_USE_QUAD_PRECISION "${LIBOMP_HAVE_QUAD_PRECISION}" CACHE BOOL
+ "Should 128-bit precision entry points be built?")
+if(LIBOMP_USE_QUAD_PRECISION AND (NOT LIBOMP_HAVE_QUAD_PRECISION))
+ libomp_error_say("128-bit quad precision functionality requested but not available")
+endif()
+
+# libgomp drop-in compatibility requires versioned symbols
+set(LIBOMP_USE_VERSION_SYMBOLS "${LIBOMP_HAVE_VERSION_SYMBOLS}" CACHE BOOL
+ "Should version symbols be used? These provide binary compatibility with libgomp.")
+if(LIBOMP_USE_VERSION_SYMBOLS AND (NOT LIBOMP_HAVE_VERSION_SYMBOLS))
+ libomp_error_say("Version symbols functionality requested but not available")
+endif()
+
+# On multinode systems, larger alignment is desired to avoid false sharing
+set(LIBOMP_USE_INTERNODE_ALIGNMENT FALSE CACHE BOOL
+ "Should larger alignment (4096 bytes) be used for some locks and data structures?")
+
+# Build code that allows the OpenMP library to conveniently interface with debuggers
+set(LIBOMP_USE_DEBUGGER FALSE CACHE BOOL
+ "Enable debugger interface code?")
+
+# Should we link to C++ library?
+set(LIBOMP_USE_STDCPPLIB FALSE CACHE BOOL
+ "Should we link to C++ library?")
+
+# TSX (x86) based locks have __asm code which can be troublesome for some compilers.
+# TODO: Make this a real feature check
+set(LIBOMP_USE_ADAPTIVE_LOCKS "${LIBOMP_HAVE_ADAPTIVE_LOCKS}" CACHE BOOL
+ "Should TSX-based lock be compiled (adaptive lock in kmp_lock.cpp). These are x86 specific.")
+if(LIBOMP_USE_ADAPTIVE_LOCKS AND (NOT LIBOMP_HAVE_ADAPTIVE_LOCKS))
+ libomp_error_say("Adaptive locks (TSX) functionality requested but not available")
+endif()
+
+# - stats-gathering enables OpenMP stats where things like the number of
+# parallel regions, clock ticks spent in particular openmp regions are recorded.
+set(LIBOMP_STATS FALSE CACHE BOOL
+ "Stats-Gathering functionality?")
+if(LIBOMP_STATS AND (NOT LIBOMP_HAVE_STATS))
+ libomp_error_say("Stats-gathering functionality requested but not available")
+endif()
+# The stats functionality requires the std c++ library
+if(LIBOMP_STATS)
+ set(LIBOMP_USE_STDCPPLIB TRUE)
+endif()
+
+# Shared library can be switched to a static library
+set(LIBOMP_ENABLE_SHARED TRUE CACHE BOOL
+ "Shared library instead of static library?")
+
+if(WIN32 AND NOT LIBOMP_ENABLE_SHARED)
+ libomp_error_say("Static libraries requested but not available on Windows")
+endif()
+
+# OMPT-support
+set(LIBOMP_OMPT_DEBUG FALSE CACHE BOOL
+ "Trace OMPT initialization?")
+set(LIBOMP_OMPT_SUPPORT FALSE CACHE BOOL
+ "OMPT-support?")
+set(LIBOMP_OMPT_BLAME TRUE CACHE BOOL
+ "OMPT-blame?")
+set(LIBOMP_OMPT_TRACE TRUE CACHE BOOL
+ "OMPT-trace?")
+if(LIBOMP_OMPT_SUPPORT AND (NOT LIBOMP_HAVE_OMPT_SUPPORT))
+ libomp_error_say("OpenMP Tools Interface requested but not available")
+endif()
+
+# Error check hwloc support after config-ix has run
+if(LIBOMP_USE_HWLOC AND (NOT LIBOMP_HAVE_HWLOC))
+ libomp_error_say("Hwloc requested but not available")
+endif()
+
+# Setting final library name
+set(LIBOMP_DEFAULT_LIB_NAME libomp)
+if(${PROFILE_LIBRARY})
+ set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}prof)
+endif()
+if(${STUBS_LIBRARY})
+ set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}stubs)
+endif()
+set(LIBOMP_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME} CACHE STRING "Base OMP library name")
+
+if(${LIBOMP_ENABLE_SHARED})
+ set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+ set(LIBOMP_LIBRARY_KIND SHARED)
+ set(LIBOMP_INSTALL_KIND LIBRARY)
+else()
+ set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
+ set(LIBOMP_LIBRARY_KIND STATIC)
+ set(LIBOMP_INSTALL_KIND ARCHIVE)
+endif()
+
+set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${LIBOMP_LIBRARY_SUFFIX})
+
+# Print configuration after all variables are set.
+if(${LIBOMP_STANDALONE_BUILD})
+ libomp_say("Operating System -- ${CMAKE_SYSTEM_NAME}")
+ libomp_say("Target Architecture -- ${LIBOMP_ARCH}")
+ if(${MIC})
+ libomp_say("Intel(R) MIC Architecture -- ${LIBOMP_MIC_ARCH}")
+ endif()
+ libomp_say("Build Type -- ${CMAKE_BUILD_TYPE}")
+ libomp_say("OpenMP Version -- ${LIBOMP_OMP_VERSION}")
+ libomp_say("Library Kind -- ${LIBOMP_LIBRARY_KIND}")
+ libomp_say("Library Type -- ${LIBOMP_LIB_TYPE}")
+ libomp_say("Fortran Modules -- ${LIBOMP_FORTRAN_MODULES}")
+ # will say development if all zeros
+ if(${LIBOMP_VERSION_BUILD} STREQUAL 00000000)
+ set(LIBOMP_BUILD Development)
+ else()
+ set(LIBOMP_BUILD ${LIBOMP_VERSION_BUILD})
+ endif()
+ libomp_say("Build -- ${LIBOMP_BUILD}")
+ libomp_say("Use Stats-gathering -- ${LIBOMP_STATS}")
+ libomp_say("Use Debugger-support -- ${LIBOMP_USE_DEBUGGER}")
+ libomp_say("Use ITT notify -- ${LIBOMP_USE_ITT_NOTIFY}")
+ libomp_say("Use OMPT-support -- ${LIBOMP_OMPT_SUPPORT}")
+ if(${LIBOMP_OMPT_SUPPORT})
+ libomp_say("Use OMPT-blame -- ${LIBOMP_OMPT_BLAME}")
+ libomp_say("Use OMPT-trace -- ${LIBOMP_OMPT_TRACE}")
+ endif()
+ libomp_say("Use Adaptive locks -- ${LIBOMP_USE_ADAPTIVE_LOCKS}")
+ libomp_say("Use quad precision -- ${LIBOMP_USE_QUAD_PRECISION}")
+ libomp_say("Use Hwloc library -- ${LIBOMP_USE_HWLOC}")
+endif()
+
+add_subdirectory(src)
+add_subdirectory(test)
+
diff --git a/final/runtime/README.txt b/final/runtime/README.txt
new file mode 100644
index 0000000..a86d3e8
--- /dev/null
+++ b/final/runtime/README.txt
@@ -0,0 +1,115 @@
+
+ README for the LLVM* OpenMP* Runtime Library
+ ============================================
+
+How to Build Documentation
+==========================
+
+The main documentation is in Doxygen* format, and this distribution
+should come with pre-built PDF documentation in doc/Reference.pdf.
+However, an HTML version can be built by executing:
+
+% doxygen doc/doxygen/config
+
+in the runtime directory.
+
+That will produce HTML documentation in the doc/doxygen/generated
+directory, which can be accessed by pointing a web browser at the
+index.html file there.
+
+If you don't have Doxygen installed, you can download it from
+www.doxygen.org.
+
+
+How to Build the LLVM* OpenMP* Runtime Library
+==============================================
+In-tree build:
+
+$ cd where-you-want-to-live
+Check out openmp into llvm/projects
+$ cd where-you-want-to-build
+$ mkdir build && cd build
+$ cmake path/to/llvm -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make omp
+
+Out-of-tree build:
+
+$ cd where-you-want-to-live
+Check out openmp
+$ cd where-you-want-to-live/openmp/runtime
+$ mkdir build && cd build
+$ cmake path/to/openmp -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make
+
+For details about building, please look at Build_With_CMake.txt
+
+Architectures Supported
+=======================
+* IA-32 architecture
+* Intel(R) 64 architecture
+* Intel(R) Many Integrated Core Architecture
+* ARM* architecture
+* Aarch64 (64-bit ARM) architecture
+* IBM(R) Power architecture (big endian)
+* IBM(R) Power architecture (little endian)
+
+Supported RTL Build Configurations
+==================================
+
+Supported Architectures: IA-32 architecture, Intel(R) 64, and
+Intel(R) Many Integrated Core Architecture
+
+ ----------------------------------------------
+ | icc/icl | gcc | clang |
+--------------|---------------|----------------------------|
+| Linux* OS | Yes(1,5) | Yes(2,4) | Yes(4,6,7) |
+| FreeBSD* | No | No | Yes(4,6,7,8) |
+| OS X* | Yes(1,3,4) | No | Yes(4,6,7) |
+| Windows* OS | Yes(1,4) | No | No |
+------------------------------------------------------------
+
+(1) On IA-32 architecture and Intel(R) 64, icc/icl versions 12.x are
+ supported (12.1 is recommended).
+(2) GCC* version 4.7 is supported.
+(3) For icc on OS X*, OS X* version 10.5.8 is supported.
+(4) Intel(R) Many Integrated Core Architecture not supported.
+(5) On Intel(R) Many Integrated Core Architecture, icc/icl versions 13.0
+ or later are required.
+(6) Clang* version 3.3 is supported.
+(7) Clang* currently does not offer a software-implemented 128 bit extended
+ precision type. Thus, all entry points reliant on this type are removed
+ from the library and cannot be called in the user program. The following
+ functions are not available:
+ __kmpc_atomic_cmplx16_*
+ __kmpc_atomic_float16_*
+ __kmpc_atomic_*_fp
+(8) Community contribution provided AS IS, not tested by Intel.
+
+Supported Architectures: IBM(R) Power 7 and Power 8
+
+ -----------------------------
+ | gcc | clang |
+--------------|------------|--------------|
+| Linux* OS | Yes(1,2) | Yes(3,4) |
+-------------------------------------------
+
+(1) On Power 7, gcc version 4.8.2 is supported.
+(2) On Power 8, gcc version 4.8.2 is supported.
+(3) On Power 7, clang version 3.7 is supported.
+(4) On Power 8, clang version 3.7 is supported.
+
+
+Front-end Compilers that work with this RTL
+===========================================
+
+The following compilers are known to do compatible code generation for
+this RTL: clang (from the OpenMP development branch at
+http://clang-omp.github.io/ ), Intel compilers, GCC. See the documentation
+for more details.
+
+-----------------------------------------------------------------------
+
+Notices
+=======
+
+*Other names and brands may be claimed as the property of others.
diff --git a/final/runtime/cmake/LibompCheckFortranFlag.cmake b/final/runtime/cmake/LibompCheckFortranFlag.cmake
new file mode 100644
index 0000000..c37b3ad
--- /dev/null
+++ b/final/runtime/cmake/LibompCheckFortranFlag.cmake
@@ -0,0 +1,73 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Checking a fortran compiler flag
+# There is no real trivial way to do this in CMake, so we implement it here
+# this will have ${boolean} = TRUE if the flag succeeds, otherwise false.
+function(libomp_check_fortran_flag flag boolean)
+ if(NOT DEFINED "${boolean}")
+ set(retval TRUE)
+ set(fortran_source
+" program hello
+ print *, \"Hello World!\"
+ end program hello")
+
+ set(failed_regexes "[Ee]rror;[Uu]nknown;[Ss]kipping")
+ if(CMAKE_VERSION VERSION_GREATER 3.1 OR CMAKE_VERSION VERSION_EQUAL 3.1)
+ include(CheckFortranSourceCompiles)
+ check_fortran_source_compiles("${fortran_source}" ${boolean} FAIL_REGEX "${failed_regexes}")
+ set(${boolean} ${${boolean}} PARENT_SCOPE)
+ return()
+ else()
+ # Our manual check for cmake versions that don't have CheckFortranSourceCompiles
+ set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_flag_check)
+ file(MAKE_DIRECTORY ${base_dir})
+ file(WRITE ${base_dir}/fortran_source.f "${fortran_source}")
+
+ message(STATUS "Performing Test ${boolean}")
+ execute_process(
+ COMMAND ${CMAKE_Fortran_COMPILER} "${flag}" ${base_dir}/fortran_source.f
+ WORKING_DIRECTORY ${base_dir}
+ RESULT_VARIABLE exit_code
+ OUTPUT_VARIABLE OUTPUT
+ ERROR_VARIABLE OUTPUT
+ )
+
+ if(${exit_code} EQUAL 0)
+ foreach(regex IN LISTS failed_regexes)
+ if("${OUTPUT}" MATCHES ${regex})
+ set(retval FALSE)
+ endif()
+ endforeach()
+ else()
+ set(retval FALSE)
+ endif()
+
+ if(${retval})
+ set(${boolean} 1 CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing Fortran Compiler Flag test ${boolean} succeeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${fortran_source}\n")
+ else()
+ set(${boolean} "" CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Failed")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing Fortran Compiler Flag test ${boolean} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${fortran_source}\n")
+ endif()
+ endif()
+
+ set(${boolean} ${retval} PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/final/runtime/cmake/LibompCheckLinkerFlag.cmake b/final/runtime/cmake/LibompCheckLinkerFlag.cmake
new file mode 100644
index 0000000..75a38e3
--- /dev/null
+++ b/final/runtime/cmake/LibompCheckLinkerFlag.cmake
@@ -0,0 +1,68 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Checking a linker flag to build a shared library
+# There is no real trivial way to do this in CMake, so we implement it here
+# this will have ${boolean} = TRUE if the flag succeeds, otherwise FALSE.
+function(libomp_check_linker_flag flag boolean)
+ if(NOT DEFINED "${boolean}")
+ set(retval TRUE)
+ set(library_source
+ "int foo(int a) { return a*a; }")
+ set(cmake_source
+ "cmake_minimum_required(VERSION 2.8)
+ project(foo C)
+ set(CMAKE_SHARED_LINKER_FLAGS \"${flag}\")
+ add_library(foo SHARED src_to_link.c)")
+ set(failed_regexes "[Ee]rror;[Uu]nknown;[Ss]kipping;LINK : warning")
+ set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/link_flag_check_${boolean})
+ file(MAKE_DIRECTORY ${base_dir})
+ file(MAKE_DIRECTORY ${base_dir}/build)
+ file(WRITE ${base_dir}/src_to_link.c "${library_source}")
+ file(WRITE ${base_dir}/CMakeLists.txt "${cmake_source}")
+
+ message(STATUS "Performing Test ${boolean}")
+ try_compile(
+ try_compile_result
+ ${base_dir}/build
+ ${base_dir}
+ foo
+ OUTPUT_VARIABLE OUTPUT)
+
+ if(try_compile_result)
+ foreach(regex IN LISTS failed_regexes)
+ if("${OUTPUT}" MATCHES ${regex})
+ set(retval FALSE)
+ endif()
+ endforeach()
+ else()
+ set(retval FALSE)
+ endif()
+
+ if(${retval})
+ set(${boolean} 1 CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing C Linker Flag test ${boolean} succeeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${library_source}\n")
+ else()
+ set(${boolean} "" CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Failed")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing C Linker Flag test ${boolean} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${library_source}\n")
+ endif()
+
+ set(${boolean} ${retval} PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/final/runtime/cmake/LibompDefinitions.cmake b/final/runtime/cmake/LibompDefinitions.cmake
new file mode 100644
index 0000000..c4cfbb9
--- /dev/null
+++ b/final/runtime/cmake/LibompDefinitions.cmake
@@ -0,0 +1,32 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+function(libomp_get_definitions_flags cppflags)
+ set(cppflags_local)
+
+ if(WIN32)
+ libomp_append(cppflags_local "-D _CRT_SECURE_NO_WARNINGS")
+ libomp_append(cppflags_local "-D _CRT_SECURE_NO_DEPRECATE")
+ libomp_append(cppflags_local "-D _WINDOWS")
+ libomp_append(cppflags_local "-D _WINNT")
+ libomp_append(cppflags_local "-D _WIN32_WINNT=0x0501")
+ libomp_append(cppflags_local "-D _USRDLL")
+ libomp_append(cppflags_local "-D _ITERATOR_DEBUG_LEVEL=0" IF_TRUE DEBUG_BUILD)
+ libomp_append(cppflags_local "-D _DEBUG" IF_TRUE DEBUG_BUILD)
+ else()
+ libomp_append(cppflags_local "-D _GNU_SOURCE")
+ libomp_append(cppflags_local "-D _REENTRANT")
+ endif()
+
+ # CMake doesn't include CPPFLAGS from environment, but we will.
+ set(${cppflags} ${cppflags_local} ${LIBOMP_CPPFLAGS} $ENV{CPPFLAGS} PARENT_SCOPE)
+endfunction()
+
diff --git a/final/runtime/cmake/LibompExports.cmake b/final/runtime/cmake/LibompExports.cmake
new file mode 100644
index 0000000..fd0397e
--- /dev/null
+++ b/final/runtime/cmake/LibompExports.cmake
@@ -0,0 +1,98 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# LibompExports.cmake
+# Copy library and header files into the exports/ subdirectory after library build
+
+# Create the suffix for the export directory
+# - Only add to suffix when not a default value
+# - Example suffix: .deb.30.s1
+# final export directory: exports/lin_32e.deb.30.s1/lib
+# - These suffixes imply the build is a Debug, OpenMP 3.0, Stats-Gathering version of the library
+set(libomp_suffix)
+libomp_append(libomp_suffix .deb DEBUG_BUILD)
+libomp_append(libomp_suffix .dia RELWITHDEBINFO_BUILD)
+libomp_append(libomp_suffix .min MINSIZEREL_BUILD)
+if(NOT "${LIBOMP_OMP_VERSION}" STREQUAL "45")
+ libomp_append(libomp_suffix .${LIBOMP_OMP_VERSION})
+endif()
+libomp_append(libomp_suffix .s1 LIBOMP_STATS)
+libomp_append(libomp_suffix .ompt LIBOMP_OMPT_SUPPORT)
+if(${LIBOMP_OMPT_SUPPORT})
+ libomp_append(libomp_suffix .no-ompt-blame IF_FALSE LIBOMP_OMPT_BLAME)
+ libomp_append(libomp_suffix .no-ompt-trace IF_FALSE LIBOMP_OMPT_TRACE)
+endif()
+string(REPLACE ";" "" libomp_suffix "${libomp_suffix}")
+
+# Set exports locations
+if(${MIC})
+ set(libomp_platform "${LIBOMP_PERL_SCRIPT_OS}_${LIBOMP_MIC_ARCH}") # e.g., lin_knf, lin_knc
+else()
+ if(${IA32})
+ set(libomp_platform "${LIBOMP_PERL_SCRIPT_OS}_32")
+ elseif(${INTEL64})
+ set(libomp_platform "${LIBOMP_PERL_SCRIPT_OS}_32e")
+ else()
+ set(libomp_platform "${LIBOMP_PERL_SCRIPT_OS}_${LIBOMP_ARCH}") # e.g., lin_arm, lin_ppc64
+ endif()
+endif()
+set(LIBOMP_EXPORTS_DIR "${LIBOMP_BASE_DIR}/exports")
+set(LIBOMP_EXPORTS_PLATFORM_DIR "${LIBOMP_EXPORTS_DIR}/${libomp_platform}${libomp_suffix}")
+set(LIBOMP_EXPORTS_CMN_DIR "${LIBOMP_EXPORTS_DIR}/common${libomp_suffix}/include")
+set(LIBOMP_EXPORTS_INC_DIR "${LIBOMP_EXPORTS_PLATFORM_DIR}/include")
+set(LIBOMP_EXPORTS_MOD_DIR "${LIBOMP_EXPORTS_PLATFORM_DIR}/include_compat")
+set(LIBOMP_EXPORTS_LIB_DIR "${LIBOMP_EXPORTS_DIR}/${libomp_platform}${libomp_suffix}/lib")
+
+# Put headers in exports/ directory post build
+add_custom_command(TARGET omp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_CMN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy omp.h ${LIBOMP_EXPORTS_CMN_DIR}
+)
+if(${LIBOMP_OMPT_SUPPORT})
+ add_custom_command(TARGET omp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ompt.h ${LIBOMP_EXPORTS_CMN_DIR}
+ )
+endif()
+if(${LIBOMP_FORTRAN_MODULES})
+ add_custom_command(TARGET libomp-mod POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_MOD_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy omp_lib.h ${LIBOMP_EXPORTS_CMN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy omp_lib.mod ${LIBOMP_EXPORTS_MOD_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy omp_lib_kinds.mod ${LIBOMP_EXPORTS_MOD_DIR}
+ )
+endif()
+
+# Copy OpenMP library into exports/ directory post build
+if(WIN32)
+ get_target_property(LIBOMP_OUTPUT_DIRECTORY omp RUNTIME_OUTPUT_DIRECTORY)
+else()
+ get_target_property(LIBOMP_OUTPUT_DIRECTORY omp LIBRARY_OUTPUT_DIRECTORY)
+endif()
+if(NOT LIBOMP_OUTPUT_DIRECTORY)
+ set(LIBOMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+add_custom_command(TARGET omp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_LIB_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE} ${LIBOMP_EXPORTS_LIB_DIR}
+)
+
+# Copy Windows import library into exports/ directory post build
+if(WIN32)
+ get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ompimp ARCHIVE_OUTPUT_DIRECTORY)
+ if(NOT LIBOMPIMP_OUTPUT_DIRECTORY)
+ set(LIBOMPIMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ endif()
+ add_custom_command(TARGET ompimp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_LIB_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBOMPIMP_OUTPUT_DIRECTORY}/${LIBOMP_IMP_LIB_FILE} ${LIBOMP_EXPORTS_LIB_DIR}
+ )
+endif()
+
diff --git a/final/runtime/cmake/LibompGetArchitecture.cmake b/final/runtime/cmake/LibompGetArchitecture.cmake
new file mode 100644
index 0000000..8f3c4c6
--- /dev/null
+++ b/final/runtime/cmake/LibompGetArchitecture.cmake
@@ -0,0 +1,66 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Determine the architecture from predefined compiler macros
+# The architecture name can only contain alphanumeric characters and underscores (i.e., C identifier)
+
+# void get_architecture(string* return_arch)
+# - Returns the architecture in return_arch
+function(libomp_get_architecture return_arch)
+ set(detect_arch_src_txt "
+ #if defined(__KNC__)
+ #error ARCHITECTURE=mic
+ #elif defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
+ #error ARCHITECTURE=x86_64
+ #elif defined(__i386) || defined(__i386__) || defined(__IA32__) || defined(_M_I86) || defined(_M_IX86) || defined(__X86__) || defined(_X86_)
+ #error ARCHITECTURE=i386
+ #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
+ #error ARCHITECTURE=arm
+ #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6ZK__)
+ #error ARCHITECTURE=arm
+ #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
+ #error ARCHITECTURE=arm
+ #elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
+ #error ARCHITECTURE=arm
+ #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
+ #error ARCHITECTURE=arm
+ #elif defined(__ARM_ARCH_2__)
+ #error ARCHITECTURE=arm
+ #elif defined(__arm__) || defined(_M_ARM) || defined(_ARM)
+ #error ARCHITECTURE=arm
+ #elif defined(__aarch64__)
+ #error ARCHITECTURE=aarch64
+ #elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__)
+ #error ARCHITECTURE=ppc64le
+ #elif defined(__powerpc64__)
+ #error ARCHITECTURE=ppc64
+ #else
+ #error ARCHITECTURE=UnknownArchitecture
+ #endif
+ ")
+ # Write out ${detect_arch_src_txt} to a file within the cmake/ subdirectory
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/libomp_detect_arch.c" ${detect_arch_src_txt})
+
+ # Try to compile using the C Compiler. It will always error out with an #error directive, so store error output to ${local_architecture}
+ try_run(run_dummy compile_dummy "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/libomp_detect_arch.c" COMPILE_OUTPUT_VARIABLE local_architecture)
+
+ # Match the important architecture line and store only that matching string in ${local_architecture}
+ string(REGEX MATCH "ARCHITECTURE=([a-zA-Z0-9_]+)" local_architecture "${local_architecture}")
+
+ # Get rid of the ARCHITECTURE= part of the string
+ string(REPLACE "ARCHITECTURE=" "" local_architecture "${local_architecture}")
+
+ # set the return value to the architecture detected (e.g., 32e, 32, arm, ppc64, etc.)
+ set(${return_arch} "${local_architecture}" PARENT_SCOPE)
+
+ # Remove ${detect_arch_src_txt} from cmake/ subdirectory
+ file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/libomp_detect_arch.c")
+endfunction()
diff --git a/final/runtime/cmake/LibompHandleFlags.cmake b/final/runtime/cmake/LibompHandleFlags.cmake
new file mode 100644
index 0000000..5a73860
--- /dev/null
+++ b/final/runtime/cmake/LibompHandleFlags.cmake
@@ -0,0 +1,207 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Setup the flags correctly for cmake (covert to string)
+# Pretty them up (STRIP any beginning and trailing whitespace,
+# remove duplicates, remove empty entries)
+macro(libomp_setup_flags flags)
+ if(NOT "${${flags}}" STREQUAL "") # if flags are empty, don't do anything
+ set(flags_local)
+ list(REMOVE_DUPLICATES ${flags}) # remove duplicates
+ list(REMOVE_ITEM ${flags} "") # remove empty items
+ libomp_list_to_string("${${flags}}" flags_local)
+ string(STRIP "${flags_local}" flags_local)
+ set(${flags} "${flags_local}")
+ endif()
+endmacro()
+
+# Gets flags common to both the C and C++ compiler
+function(libomp_get_c_and_cxxflags_common flags)
+ set(flags_local)
+ libomp_append(flags_local -std=c++11 LIBOMP_HAVE_STD_CPP11_FLAG)
+ libomp_append(flags_local -fno-exceptions LIBOMP_HAVE_FNO_EXCEPTIONS_FLAG)
+ if(${LIBOMP_ENABLE_WERROR})
+ libomp_append(flags_local -Werror LIBOMP_HAVE_WERROR_FLAG)
+ endif()
+ libomp_append(flags_local -Wno-sign-compare LIBOMP_HAVE_WNO_SIGN_COMPARE_FLAG)
+ libomp_append(flags_local -Wno-unused-function LIBOMP_HAVE_WNO_UNUSED_FUNCTION_FLAG)
+ libomp_append(flags_local -Wno-unused-local-typedef LIBOMP_HAVE_WNO_UNUSED_LOCAL_TYPEDEF_FLAG)
+ libomp_append(flags_local -Wno-unused-value LIBOMP_HAVE_WNO_UNUSED_VALUE_FLAG)
+ libomp_append(flags_local -Wno-unused-variable LIBOMP_HAVE_WNO_UNUSED_VARIABLE_FLAG)
+ libomp_append(flags_local -Wno-switch LIBOMP_HAVE_WNO_SWITCH_FLAG)
+ libomp_append(flags_local -Wno-covered-switch-default LIBOMP_HAVE_WNO_COVERED_SWITCH_DEFAULT_FLAG)
+ libomp_append(flags_local -Wno-deprecated-register LIBOMP_HAVE_WNO_DEPRECATED_REGISTER_FLAG)
+ libomp_append(flags_local -Wno-gnu-anonymous-struct LIBOMP_HAVE_WNO_GNU_ANONYMOUS_STRUCT_FLAG)
+ libomp_append(flags_local -Wno-unknown-pragmas LIBOMP_HAVE_WNO_UNKNOWN_PRAGMAS_FLAG)
+ libomp_append(flags_local -Wno-missing-field-initializers LIBOMP_HAVE_WNO_MISSING_FIELD_INITIALIZERS_FLAG)
+ libomp_append(flags_local -Wno-missing-braces LIBOMP_HAVE_WNO_MISSING_BRACES_FLAG)
+ libomp_append(flags_local -Wno-comment LIBOMP_HAVE_WNO_COMMENT_FLAG)
+ libomp_append(flags_local -Wno-self-assign LIBOMP_HAVE_WNO_SELF_ASSIGN_FLAG)
+ libomp_append(flags_local -Wno-vla-extension LIBOMP_HAVE_WNO_VLA_EXTENSION_FLAG)
+ libomp_append(flags_local -Wno-format-pedantic LIBOMP_HAVE_WNO_FORMAT_PEDANTIC_FLAG)
+ libomp_append(flags_local /GS LIBOMP_HAVE_GS_FLAG)
+ libomp_append(flags_local /EHsc LIBOMP_HAVE_EHSC_FLAG)
+ libomp_append(flags_local /Oy- LIBOMP_HAVE_OY__FLAG)
+ # Intel(R) C Compiler flags
+ libomp_append(flags_local /Qsafeseh LIBOMP_HAVE_QSAFESEH_FLAG)
+ libomp_append(flags_local -Qoption,cpp,--extended_float_types LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG)
+ libomp_append(flags_local -Qlong_double LIBOMP_HAVE_LONG_DOUBLE_FLAG)
+ libomp_append(flags_local -Qdiag-disable:177 LIBOMP_HAVE_DIAG_DISABLE_177_FLAG)
+ if(${RELEASE_BUILD} OR ${RELWITHDEBINFO_BUILD})
+ libomp_append(flags_local -Qinline-min-size=1 LIBOMP_HAVE_INLINE_MIN_SIZE_FLAG)
+ endif()
+ # Architectural C and C++ flags
+ if(${IA32})
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ libomp_append(flags_local -m32 LIBOMP_HAVE_M32_FLAG)
+ endif()
+ libomp_append(flags_local /arch:SSE2 LIBOMP_HAVE_ARCH_SSE2_FLAG)
+ libomp_append(flags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
+ libomp_append(flags_local -falign-stack=maintain-16-byte LIBOMP_HAVE_FALIGN_STACK_FLAG)
+ elseif(${MIC})
+ libomp_append(flags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
+ libomp_append(flags_local -ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG)
+ libomp_append(flags_local "-opt-streaming-stores never" LIBOMP_HAVE_OPT_STREAMING_STORES_FLAG)
+ endif()
+ set(${flags} ${flags_local} PARENT_SCOPE)
+endfunction()
+
+# C compiler flags
+function(libomp_get_cflags cflags)
+ set(cflags_local)
+ libomp_get_c_and_cxxflags_common(cflags_local)
+ # flags only for the C Compiler
+ libomp_append(cflags_local /TP LIBOMP_HAVE_TP_FLAG)
+ libomp_append(cflags_local "-x c++" LIBOMP_HAVE_X_CPP_FLAG)
+ set(cflags_local ${cflags_local} ${LIBOMP_CFLAGS})
+ libomp_setup_flags(cflags_local)
+ set(${cflags} ${cflags_local} PARENT_SCOPE)
+endfunction()
+
+# C++ compiler flags
+function(libomp_get_cxxflags cxxflags)
+ set(cxxflags_local)
+ libomp_get_c_and_cxxflags_common(cxxflags_local)
+ set(cxxflags_local ${cxxflags_local} ${LIBOMP_CXXFLAGS})
+ libomp_setup_flags(cxxflags_local)
+ set(${cxxflags} ${cxxflags_local} PARENT_SCOPE)
+endfunction()
+
+# Assembler flags
+function(libomp_get_asmflags asmflags)
+ set(asmflags_local)
+ libomp_append(asmflags_local "-x assembler-with-cpp" LIBOMP_HAVE_X_ASSEMBLER_WITH_CPP_FLAG)
+ # Architectural assembler flags
+ if(${IA32})
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ libomp_append(asmflags_local -m32 LIBOMP_HAVE_M32_FLAG)
+ endif()
+ libomp_append(asmflags_local /safeseh LIBOMP_HAVE_SAFESEH_MASM_FLAG)
+ libomp_append(asmflags_local /coff LIBOMP_HAVE_COFF_MASM_FLAG)
+ elseif(${MIC})
+ libomp_append(asmflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
+ endif()
+ set(asmflags_local ${asmflags_local} ${LIBOMP_ASMFLAGS})
+ libomp_setup_flags(asmflags_local)
+ set(${asmflags} ${asmflags_local} PARENT_SCOPE)
+endfunction()
+
+# Linker flags
+function(libomp_get_ldflags ldflags)
+ set(ldflags_local)
+ libomp_append(ldflags_local "${CMAKE_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_LIB_NAME}.def"
+ IF_DEFINED CMAKE_LINK_DEF_FILE_FLAG)
+ libomp_append(ldflags_local "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
+ IF_DEFINED CMAKE_C_OSX_CURRENT_VERSION_FLAG)
+ libomp_append(ldflags_local "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
+ IF_DEFINED CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG)
+ libomp_append(ldflags_local -Wl,--warn-shared-textrel LIBOMP_HAVE_WARN_SHARED_TEXTREL_FLAG)
+ libomp_append(ldflags_local -Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG)
+ libomp_append(ldflags_local "-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
+ libomp_append(ldflags_local -static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG)
+ libomp_append(ldflags_local -Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG)
+ libomp_append(ldflags_local -Wl,-fini=__kmp_internal_end_fini LIBOMP_HAVE_FINI_FLAG)
+ libomp_append(ldflags_local -no-intel-extensions LIBOMP_HAVE_NO_INTEL_EXTENSIONS_FLAG)
+ libomp_append(ldflags_local -static-intel LIBOMP_HAVE_STATIC_INTEL_FLAG)
+ libomp_append(ldflags_local /SAFESEH LIBOMP_HAVE_SAFESEH_FLAG)
+ # Architectural linker flags
+ if(${IA32})
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ libomp_append(ldflags_local -m32 LIBOMP_HAVE_M32_FLAG)
+ endif()
+ libomp_append(ldflags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
+ elseif(${MIC})
+ libomp_append(ldflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
+ libomp_append(ldflags_local -Wl,-x LIBOMP_HAVE_X_FLAG)
+ endif()
+ set(ldflags_local ${ldflags_local} ${LIBOMP_LDFLAGS})
+ libomp_setup_flags(ldflags_local)
+ set(${ldflags} ${ldflags_local} PARENT_SCOPE)
+endfunction()
+
+# Library flags
+function(libomp_get_libflags libflags)
+ set(libflags_local)
+ libomp_append(libflags_local "${CMAKE_THREAD_LIBS_INIT}")
+ libomp_append(libflags_local "${LIBOMP_HWLOC_LIBRARY}" LIBOMP_USE_HWLOC)
+ if(${IA32})
+ libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
+ endif()
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ libomp_append(libflags_local -lm)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ set(libflags_local ${libflags_local} ${LIBOMP_LIBFLAGS})
+ libomp_setup_flags(libflags_local)
+ set(${libflags} ${libflags_local} PARENT_SCOPE)
+endfunction()
+
+# Fortran flags
+function(libomp_get_fflags fflags)
+ set(fflags_local)
+ if(${IA32})
+ libomp_append(fflags_local -m32 LIBOMP_HAVE_M32_FORTRAN_FLAG)
+ endif()
+ set(fflags_local ${fflags_local} ${LIBOMP_FFLAGS})
+ libomp_setup_flags(fflags_local)
+ set(${fflags} ${fflags_local} PARENT_SCOPE)
+endfunction()
+
+# Perl generate-defs.pl flags (For Windows only)
+function(libomp_get_gdflags gdflags)
+ set(gdflags_local)
+ if(${IA32})
+ set(libomp_gdflag_arch arch_32)
+ elseif(${INTEL64})
+ set(libomp_gdflag_arch arch_32e)
+ else()
+ set(libomp_gdflag_arch arch_${LIBOMP_ARCH})
+ endif()
+ libomp_append(gdflags_local "-D ${libomp_gdflag_arch}")
+ libomp_append(gdflags_local "-D msvc_compat")
+ libomp_append(gdflags_local "-D norm" NORMAL_LIBRARY)
+ libomp_append(gdflags_local "-D prof" PROFILE_LIBRARY)
+ libomp_append(gdflags_local "-D stub" STUBS_LIBRARY)
+ libomp_append(gdflags_local "-D HAVE_QUAD" LIBOMP_USE_QUAD_PRECISION)
+ libomp_append(gdflags_local "-D USE_DEBUGGER" LIBOMP_USE_DEBUGGER)
+ if(${LIBOMP_OMP_VERSION} GREATER 45 OR ${LIBOMP_OMP_VERSION} EQUAL 45)
+ libomp_append(gdflags_local "-D OMP_45")
+ endif()
+ if(${LIBOMP_OMP_VERSION} GREATER 40 OR ${LIBOMP_OMP_VERSION} EQUAL 40)
+ libomp_append(gdflags_local "-D OMP_40")
+ endif()
+ if(${LIBOMP_OMP_VERSION} GREATER 30 OR ${LIBOMP_OMP_VERSION} EQUAL 30)
+ libomp_append(gdflags_local "-D OMP_30")
+ endif()
+ if(${DEBUG_BUILD} OR ${RELWITHDEBINFO_BUILD})
+ libomp_append(gdflags_local "-D KMP_DEBUG")
+ endif()
+ set(${gdflags} ${gdflags_local} PARENT_SCOPE)
+endfunction()
diff --git a/final/runtime/cmake/LibompMicroTests.cmake b/final/runtime/cmake/LibompMicroTests.cmake
new file mode 100644
index 0000000..76bc550
--- /dev/null
+++ b/final/runtime/cmake/LibompMicroTests.cmake
@@ -0,0 +1,225 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# The following micro-tests are small tests to perform on the library just created.
+# There are currently five micro-tests:
+# (1) test-touch
+# - Compile and run a small program using newly created libomp library
+# - Fails if test-touch.c does not compile or if test-touch.c does not run after compilation
+# - Program dependencies: gcc or g++, grep, bourne shell
+# - Available for all Unix,Mac,Windows builds. Not available on Intel(R) MIC Architecture builds.
+# (2) test-relo
+# - Tests dynamic libraries for position-dependent code (can not have any position dependent code)
+# - Fails if TEXTREL is in output of readelf -d libomp.so command
+# - Program dependencies: readelf, grep, bourne shell
+# - Available for Unix, Intel(R) MIC Architecture dynamic library builds. Not available otherwise.
+# (3) test-execstack
+# - Tests if stack is executable
+# - Fails if stack is executable. Should only be readable and writable. Not exectuable.
+# - Program dependencies: perl, readelf
+# - Available for Unix dynamic library builds. Not available otherwise.
+# (4) test-instr (Intel(R) MIC Architecutre only)
+# - Tests Intel(R) MIC Architecture libraries for valid instruction set
+# - Fails if finds invalid instruction for Intel(R) MIC Architecture (wasn't compiled with correct flags)
+# - Program dependencies: perl, objdump
+# - Available for Intel(R) MIC Architecture and i386 builds. Not available otherwise.
+# (5) test-deps
+# - Tests newly created libomp for library dependencies
+# - Fails if sees a dependence not listed in td_exp variable below
+# - Program dependencies: perl, (unix)readelf, (mac)otool[64], (windows)link.exe
+# - Available for Unix,Mac,Windows, Intel(R) MIC Architecture dynamic builds and Windows
+# static builds. Not available otherwise.
+
+# get library location
+if(WIN32)
+ get_target_property(LIBOMP_OUTPUT_DIRECTORY omp RUNTIME_OUTPUT_DIRECTORY)
+ get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ompimp ARCHIVE_OUTPUT_DIRECTORY)
+ if(NOT LIBOMPIMP_OUTPUT_DIRECTORY)
+ set(LIBOMPIMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ endif()
+else()
+ get_target_property(LIBOMP_OUTPUT_DIRECTORY omp LIBRARY_OUTPUT_DIRECTORY)
+endif()
+if(NOT LIBOMP_OUTPUT_DIRECTORY)
+ set(LIBOMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+
+# test-touch
+find_program(LIBOMP_SHELL sh)
+if(WIN32)
+ if(LIBOMP_SHELL)
+ set(libomp_test_touch_targets test-touch-md/.success test-touch-mt/.success)
+ endif()
+ # pick test-touch compiler
+ set(libomp_test_touch_compiler ${CMAKE_C_COMPILER})
+ # test-touch compilation flags
+ libomp_append(libomp_test_touch_cflags /nologo)
+ libomp_append(libomp_test_touch_libs ${LIBOMPIMP_OUTPUT_DIRECTORY}/${LIBOMP_IMP_LIB_FILE})
+ if(${IA32})
+ libomp_append(libomp_test_touch_ldflags /safeseh)
+ endif()
+else() # (Unix based systems, Intel(R) MIC Architecture, and Mac)
+ if(LIBOMP_SHELL)
+ set(libomp_test_touch_targets test-touch-rt/.success)
+ endif()
+ # pick test-touch compiler
+ if(${LIBOMP_USE_STDCPPLIB})
+ set(libomp_test_touch_compiler ${CMAKE_CXX_COMPILER})
+ else()
+ set(libomp_test_touch_compiler ${CMAKE_C_COMPILER})
+ endif()
+ # test-touch compilation flags
+ libomp_append(libomp_test_touch_libs "${CMAKE_THREAD_LIBS_INIT}")
+ if(${IA32})
+ libomp_append(libomp_test_touch_cflags -m32 LIBOMP_HAVE_M32_FLAG)
+ endif()
+ libomp_append(libomp_test_touch_libs ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE})
+ libomp_append(libomp_test_touch_libs "${LIBOMP_HWLOC_LIBRARY}" LIBOMP_USE_HWLOC)
+ if(APPLE)
+ set(libomp_test_touch_env "DYLD_LIBRARY_PATH=.:${LIBOMP_OUTPUT_DIRECTORY}:$ENV{DYLD_LIBRARY_PATH}")
+ libomp_append(libomp_test_touch_ldflags "-Wl,-rpath,${LIBOMP_HWLOC_LIBRARY_DIR}" LIBOMP_USE_HWLOC)
+ else()
+ set(libomp_test_touch_env "LD_LIBRARY_PATH=.:${LIBOMP_OUTPUT_DIRECTORY}:$ENV{LD_LIBRARY_PATH}")
+ libomp_append(libomp_test_touch_ldflags "-Wl,-rpath=${LIBOMP_HWLOC_LIBRARY_DIR}" LIBOMP_USE_HWLOC)
+ endif()
+endif()
+macro(libomp_test_touch_recipe test_touch_dir)
+ set(libomp_test_touch_dependencies ${LIBOMP_SRC_DIR}/test-touch.c omp)
+ set(libomp_test_touch_exe ${test_touch_dir}/test-touch${CMAKE_EXECUTABLE_SUFFIX})
+ set(libomp_test_touch_obj ${test_touch_dir}/test-touch${CMAKE_C_OUTPUT_EXTENSION})
+ if(WIN32)
+ if(${RELEASE_BUILD} OR ${RELWITHDEBINFO_BUILD})
+ if(${test_touch_dir} MATCHES "test-touch-mt")
+ libomp_append(libomp_test_touch_cflags /MT)
+ else()
+ libomp_append(libomp_test_touch_cflags /MD)
+ endif()
+ else()
+ if(${test_touch_dir} MATCHES "test-touch-mt")
+ libomp_append(libomp_test_touch_cflags /MTd)
+ else()
+ libomp_append(libomp_test_touch_cflags /MDd)
+ endif()
+ endif()
+ set(libomp_test_touch_out_flags -Fe${libomp_test_touch_exe} -Fo${libomp_test_touch_obj})
+ list(APPEND libomp_test_touch_dependencies ompimp)
+ else()
+ set(libomp_test_touch_out_flags -o ${libomp_test_touch_exe})
+ endif()
+ add_custom_command(
+ OUTPUT ${test_touch_dir}/.success ${libomp_test_touch_exe} ${libomp_test_touch_obj}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${test_touch_dir}
+ COMMAND ${CMAKE_COMMAND} -E remove -f ${test_touch_dir}/*
+ COMMAND ${libomp_test_touch_compiler} ${libomp_test_touch_out_flags} ${libomp_test_touch_cflags}
+ ${LIBOMP_SRC_DIR}/test-touch.c ${libomp_test_touch_ldflags} ${libomp_test_touch_libs}
+ COMMAND ${LIBOMP_SHELL} -c \"${libomp_test_touch_env} ${libomp_test_touch_exe}\"
+ COMMAND ${CMAKE_COMMAND} -E touch ${test_touch_dir}/.success
+ DEPENDS ${libomp_test_touch_dependencies}
+ )
+endmacro()
+libomp_append(libomp_test_touch_env "KMP_VERSION=1")
+add_custom_target(libomp-test-touch DEPENDS ${libomp_test_touch_targets})
+if(WIN32)
+ libomp_test_touch_recipe(test-touch-mt)
+ libomp_test_touch_recipe(test-touch-md)
+else()
+ libomp_test_touch_recipe(test-touch-rt)
+endif()
+
+# test-relo
+add_custom_target(libomp-test-relo DEPENDS test-relo/.success)
+add_custom_command(
+ OUTPUT test-relo/.success test-relo/readelf.log
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-relo
+ COMMAND readelf -d ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE} > test-relo/readelf.log
+ COMMAND grep -e TEXTREL test-relo/readelf.log \; test $$? -eq 1
+ COMMAND ${CMAKE_COMMAND} -E touch test-relo/.success
+ DEPENDS omp
+)
+
+# test-execstack
+add_custom_target(libomp-test-execstack DEPENDS test-execstack/.success)
+add_custom_command(
+ OUTPUT test-execstack/.success
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-execstack
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-execstack.pl
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch test-execstack/.success
+ DEPENDS omp
+)
+
+# test-instr
+add_custom_target(libomp-test-instr DEPENDS test-instr/.success)
+add_custom_command(
+ OUTPUT test-instr/.success
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-instr
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-instruction-set.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} --show --mic-arch=${LIBOMP_MIC_ARCH} ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch test-instr/.success
+ DEPENDS omp ${LIBOMP_TOOLS_DIR}/check-instruction-set.pl
+)
+
+# test-deps
+add_custom_target(libomp-test-deps DEPENDS test-deps/.success)
+set(libomp_expected_library_deps)
+if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ set(libomp_expected_library_deps libc.so.7 libthr.so.3)
+ libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
+elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+ set(libomp_expected_library_deps libc.so.12 libpthread.so.1 libm.so.0)
+ libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
+elseif(APPLE)
+ set(libomp_expected_library_deps /usr/lib/libSystem.B.dylib)
+elseif(WIN32)
+ set(libomp_expected_library_deps kernel32.dll)
+ libomp_append(libomp_expected_library_deps psapi.dll LIBOMP_OMPT_SUPPORT)
+else()
+ if(${MIC})
+ set(libomp_expected_library_deps libc.so.6 libpthread.so.0 libdl.so.2)
+ if("${LIBOMP_MIC_ARCH}" STREQUAL "knf")
+ libomp_append(libomp_expected_library_deps ld-linux-l1om.so.2)
+ libomp_append(libomp_expected_library_deps libgcc_s.so.1)
+ elseif("${LIBOMP_MIC_ARCH}" STREQUAL "knc")
+ libomp_append(libomp_expected_library_deps ld-linux-k1om.so.2)
+ endif()
+ else()
+ set(libomp_expected_library_deps libdl.so.2 libgcc_s.so.1)
+ if(${IA32})
+ libomp_append(libomp_expected_library_deps libc.so.6)
+ libomp_append(libomp_expected_library_deps ld-linux.so.2)
+ elseif(${INTEL64})
+ libomp_append(libomp_expected_library_deps libc.so.6)
+ libomp_append(libomp_expected_library_deps ld-linux-x86-64.so.2)
+ elseif(${ARM})
+ libomp_append(libomp_expected_library_deps libc.so.6)
+ libomp_append(libomp_expected_library_deps libffi.so.6)
+ libomp_append(libomp_expected_library_deps libffi.so.5)
+ libomp_append(libomp_expected_library_deps ld-linux-armhf.so.3)
+ elseif(${PPC64})
+ libomp_append(libomp_expected_library_deps libc.so.6)
+ libomp_append(libomp_expected_library_deps ld64.so.1)
+ endif()
+ libomp_append(libomp_expected_library_deps libpthread.so.0 IF_FALSE STUBS_LIBRARY)
+ libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
+ endif()
+ libomp_append(libomp_expected_library_deps libstdc++.so.6 LIBOMP_USE_STDCPPLIB)
+ libomp_append(libomp_expected_library_deps libm.so.6 LIBOMP_STATS)
+endif()
+# Perl script expects comma separated list
+string(REPLACE ";" "," libomp_expected_library_deps "${libomp_expected_library_deps}")
+add_custom_command(
+ OUTPUT test-deps/.success
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-deps
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-depends.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} --expected="${libomp_expected_library_deps}" ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch test-deps/.success
+ DEPENDS omp ${LIBOMP_TOOLS_DIR}/check-depends.pl
+)
diff --git a/final/runtime/cmake/LibompUtils.cmake b/final/runtime/cmake/LibompUtils.cmake
new file mode 100644
index 0000000..ba81a6c
--- /dev/null
+++ b/final/runtime/cmake/LibompUtils.cmake
@@ -0,0 +1,191 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# void libomp_say(string message_to_user);
+# - prints out message_to_user
+macro(libomp_say message_to_user)
+ message(STATUS "LIBOMP: ${message_to_user}")
+endmacro()
+
+# void libomp_warning_say(string message_to_user);
+# - prints out message_to_user with a warning
+macro(libomp_warning_say message_to_user)
+ message(WARNING "LIBOMP: ${message_to_user}")
+endmacro()
+
+# void libomp_error_say(string message_to_user);
+# - prints out message_to_user with an error and exits cmake
+macro(libomp_error_say message_to_user)
+ message(FATAL_ERROR "LIBOMP: ${message_to_user}")
+endmacro()
+
+# libomp_append(<flag> <flags_list> [(IF_TRUE | IF_FALSE | IF_TRUE_1_0 ) BOOLEAN])
+#
+# libomp_append(<flag> <flags_list>)
+# - unconditionally appends <flag> to the list of definitions
+#
+# libomp_append(<flag> <flags_list> <BOOLEAN>)
+# - appends <flag> to the list of definitions if BOOLEAN is true
+#
+# libomp_append(<flag> <flags_list> IF_TRUE <BOOLEAN>)
+# - appends <flag> to the list of definitions if BOOLEAN is true
+#
+# libomp_append(<flag> <flags_list> IF_FALSE <BOOLEAN>)
+# - appends <flag> to the list of definitions if BOOLEAN is false
+#
+# libomp_append(<flag> <flags_list> IF_DEFINED <VARIABLE>)
+# - appends <flag> to the list of definitions if VARIABLE is defined
+#
+# libomp_append(<flag> <flags_list> IF_TRUE_1_0 <BOOLEAN>)
+# - appends <flag>=1 to the list of definitions if <BOOLEAN> is true, <flag>=0 otherwise
+# e.g., libomp_append("-D USE_FEATURE" IF_TRUE_1_0 HAVE_FEATURE)
+# appends "-D USE_FEATURE=1" if HAVE_FEATURE is true
+# or "-D USE_FEATURE=0" if HAVE_FEATURE is false
+macro(libomp_append flags flag)
+ if(NOT (${ARGC} EQUAL 2 OR ${ARGC} EQUAL 3 OR ${ARGC} EQUAL 4))
+ libomp_error_say("libomp_append: takes 2, 3, or 4 arguments")
+ endif()
+ if(${ARGC} EQUAL 2)
+ list(APPEND ${flags} "${flag}")
+ elseif(${ARGC} EQUAL 3)
+ if(${ARGV2})
+ list(APPEND ${flags} "${flag}")
+ endif()
+ else()
+ if(${ARGV2} STREQUAL "IF_TRUE")
+ if(${ARGV3})
+ list(APPEND ${flags} "${flag}")
+ endif()
+ elseif(${ARGV2} STREQUAL "IF_FALSE")
+ if(NOT ${ARGV3})
+ list(APPEND ${flags} "${flag}")
+ endif()
+ elseif(${ARGV2} STREQUAL "IF_DEFINED")
+ if(DEFINED ${ARGV3})
+ list(APPEND ${flags} "${flag}")
+ endif()
+ elseif(${ARGV2} STREQUAL "IF_TRUE_1_0")
+ if(${ARGV3})
+ list(APPEND ${flags} "${flag}=1")
+ else()
+ list(APPEND ${flags} "${flag}=0")
+ endif()
+ else()
+ libomp_error_say("libomp_append: third argument must be one of IF_TRUE, IF_FALSE, IF_DEFINED, IF_TRUE_1_0")
+ endif()
+ endif()
+endmacro()
+
+# void libomp_get_legal_arch(string* return_arch_string);
+# - returns (through return_arch_string) the formal architecture
+# string or warns user of unknown architecture
+function(libomp_get_legal_arch return_arch_string)
+ if(${IA32})
+ set(${return_arch_string} "IA-32" PARENT_SCOPE)
+ elseif(${INTEL64})
+ set(${return_arch_string} "Intel(R) 64" PARENT_SCOPE)
+ elseif(${MIC})
+ set(${return_arch_string} "Intel(R) Many Integrated Core Architecture" PARENT_SCOPE)
+ elseif(${ARM})
+ set(${return_arch_string} "ARM" PARENT_SCOPE)
+ elseif(${PPC64BE})
+ set(${return_arch_string} "PPC64BE" PARENT_SCOPE)
+ elseif(${PPC64LE})
+ set(${return_arch_string} "PPC64LE" PARENT_SCOPE)
+ elseif(${AARCH64})
+ set(${return_arch_string} "AARCH64" PARENT_SCOPE)
+ else()
+ set(${return_arch_string} "${LIBOMP_ARCH}" PARENT_SCOPE)
+ libomp_warning_say("libomp_get_legal_arch(): Warning: Unknown architecture: Using ${LIBOMP_ARCH}")
+ endif()
+endfunction()
+
+# void libomp_check_variable(string var, ...);
+# - runs through all values checking if ${var} == value
+# - uppercase and lowercase do not matter
+# - if the var is found, then just print it out
+# - if the var is not found, then error out
+function(libomp_check_variable var)
+ set(valid_flag 0)
+ string(TOLOWER "${${var}}" var_lower)
+ foreach(value IN LISTS ARGN)
+ string(TOLOWER "${value}" value_lower)
+ if("${var_lower}" STREQUAL "${value_lower}")
+ set(valid_flag 1)
+ set(the_value "${value}")
+ endif()
+ endforeach()
+ if(${valid_flag} EQUAL 0)
+ libomp_error_say("libomp_check_variable(): ${var} = ${${var}} is unknown")
+ endif()
+endfunction()
+
+# void libomp_get_build_number(string src_dir, string* return_build_number);
+# - grab the eight digit build number (or 00000000) from kmp_version.c
+function(libomp_get_build_number src_dir return_build_number)
+ # sets file_lines_list to a list of all lines in kmp_version.c
+ file(STRINGS "${src_dir}/src/kmp_version.c" file_lines_list)
+
+ # runs through each line in kmp_version.c
+ foreach(line IN LISTS file_lines_list)
+ # if the line begins with "#define KMP_VERSION_BUILD" then we take not of the build number
+ string(REGEX MATCH "^[ \t]*#define[ \t]+KMP_VERSION_BUILD" valid "${line}")
+ if(NOT "${valid}" STREQUAL "") # if we matched "#define KMP_VERSION_BUILD", then grab the build number
+ string(REGEX REPLACE "^[ \t]*#define[ \t]+KMP_VERSION_BUILD[ \t]+([0-9]+)" "\\1"
+ build_number "${line}"
+ )
+ endif()
+ endforeach()
+ set(${return_build_number} "${build_number}" PARENT_SCOPE) # return build number
+endfunction()
+
+# void libomp_get_legal_type(string* return_legal_type);
+# - set the legal type name Performance/Profiling/Stub
+function(libomp_get_legal_type return_legal_type)
+ if(${NORMAL_LIBRARY})
+ set(${return_legal_type} "Performance" PARENT_SCOPE)
+ elseif(${PROFILE_LIBRARY})
+ set(${return_legal_type} "Profiling" PARENT_SCOPE)
+ elseif(${STUBS_LIBRARY})
+ set(${return_legal_type} "Stub" PARENT_SCOPE)
+ endif()
+endfunction()
+
+# void libomp_add_suffix(string suffix, list<string>* list_of_items);
+# - returns list_of_items with suffix appended to all items
+# - original list is modified
+function(libomp_add_suffix suffix list_of_items)
+ set(local_list "")
+ foreach(item IN LISTS "${list_of_items}")
+ if(NOT "${item}" STREQUAL "")
+ list(APPEND local_list "${item}${suffix}")
+ endif()
+ endforeach()
+ set(${list_of_items} "${local_list}" PARENT_SCOPE)
+endfunction()
+
+# void libomp_list_to_string(list<string> list_of_things, string* return_string);
+# - converts a list to a space separated string
+function(libomp_list_to_string list_of_things return_string)
+ string(REPLACE ";" " " output_variable "${list_of_things}")
+ set(${return_string} "${output_variable}" PARENT_SCOPE)
+endfunction()
+
+# void libomp_string_to_list(string str, list<string>* return_list);
+# - converts a string to a semicolon separated list
+# - what it really does is just string_replace all running whitespace to a semicolon
+# - in cmake, a list is strings separated by semicolons: i.e., list of four items, list = "item1;item2;item3;item4"
+function(libomp_string_to_list str return_list)
+ set(outstr)
+ string(REGEX REPLACE "[ \t]+" ";" outstr "${str}")
+ set(${return_list} "${outstr}" PARENT_SCOPE)
+endfunction()
+
diff --git a/final/runtime/cmake/config-ix.cmake b/final/runtime/cmake/config-ix.cmake
new file mode 100644
index 0000000..206e689
--- /dev/null
+++ b/final/runtime/cmake/config-ix.cmake
@@ -0,0 +1,267 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+include(CheckCCompilerFlag)
+include(CheckCSourceCompiles)
+include(CheckCXXCompilerFlag)
+include(CheckIncludeFile)
+include(CheckLibraryExists)
+include(CheckIncludeFiles)
+include(LibompCheckLinkerFlag)
+include(LibompCheckFortranFlag)
+
+# Check for versioned symbols
+function(libomp_check_version_symbols retval)
+ set(source_code
+ "#include <stdio.h>
+ void func1() { printf(\"Hello\"); }
+ void func2() { printf(\"World\"); }
+ __asm__(\".symver func1, func@VER1\");
+ __asm__(\".symver func2, func@VER2\");
+ int main() {
+ func1();
+ func2();
+ return 0;
+ }")
+ set(version_script_source "VER1 { }; VER2 { } VER1;")
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt "${version_script_source}")
+ set(CMAKE_REQUIRED_FLAGS -Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt)
+ check_c_source_compiles("${source_code}" ${retval})
+ set(${retval} ${${retval}} PARENT_SCOPE)
+ file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt)
+endfunction()
+
+# Includes the architecture flag in both compile and link phase
+function(libomp_check_architecture_flag flag retval)
+ set(CMAKE_REQUIRED_FLAGS "${flag}")
+ check_c_compiler_flag("${flag}" ${retval})
+ set(${retval} ${${retval}} PARENT_SCOPE)
+endfunction()
+
+# Checking C, CXX, Linker Flags
+check_cxx_compiler_flag(-std=c++11 LIBOMP_HAVE_STD_CPP11_FLAG)
+check_cxx_compiler_flag(-fno-exceptions LIBOMP_HAVE_FNO_EXCEPTIONS_FLAG)
+check_c_compiler_flag("-x c++" LIBOMP_HAVE_X_CPP_FLAG)
+check_c_compiler_flag(-Werror LIBOMP_HAVE_WERROR_FLAG)
+check_c_compiler_flag(-Wunused-function LIBOMP_HAVE_WNO_UNUSED_FUNCTION_FLAG)
+check_c_compiler_flag(-Wunused-local-typedef LIBOMP_HAVE_WNO_UNUSED_LOCAL_TYPEDEF_FLAG)
+check_c_compiler_flag(-Wunused-value LIBOMP_HAVE_WNO_UNUSED_VALUE_FLAG)
+check_c_compiler_flag(-Wunused-variable LIBOMP_HAVE_WNO_UNUSED_VARIABLE_FLAG)
+check_c_compiler_flag(-Wswitch LIBOMP_HAVE_WNO_SWITCH_FLAG)
+check_c_compiler_flag(-Wcovered-switch-default LIBOMP_HAVE_WNO_COVERED_SWITCH_DEFAULT_FLAG)
+check_c_compiler_flag(-Wdeprecated-register LIBOMP_HAVE_WNO_DEPRECATED_REGISTER_FLAG)
+check_c_compiler_flag(-Wsign-compare LIBOMP_HAVE_WNO_SIGN_COMPARE_FLAG)
+check_c_compiler_flag(-Wgnu-anonymous-struct LIBOMP_HAVE_WNO_GNU_ANONYMOUS_STRUCT_FLAG)
+check_c_compiler_flag(-Wunknown-pragmas LIBOMP_HAVE_WNO_UNKNOWN_PRAGMAS_FLAG)
+check_c_compiler_flag(-Wmissing-field-initializers LIBOMP_HAVE_WNO_MISSING_FIELD_INITIALIZERS_FLAG)
+check_c_compiler_flag(-Wmissing-braces LIBOMP_HAVE_WNO_MISSING_BRACES_FLAG)
+check_c_compiler_flag(-Wcomment LIBOMP_HAVE_WNO_COMMENT_FLAG)
+check_c_compiler_flag(-Wself-assign LIBOMP_HAVE_WNO_SELF_ASSIGN_FLAG)
+check_c_compiler_flag(-Wvla-extension LIBOMP_HAVE_WNO_VLA_EXTENSION_FLAG)
+check_c_compiler_flag(-Wformat-pedantic LIBOMP_HAVE_WNO_FORMAT_PEDANTIC_FLAG)
+check_c_compiler_flag(-msse2 LIBOMP_HAVE_MSSE2_FLAG)
+check_c_compiler_flag(-ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG)
+libomp_check_architecture_flag(-mmic LIBOMP_HAVE_MMIC_FLAG)
+libomp_check_architecture_flag(-m32 LIBOMP_HAVE_M32_FLAG)
+if(WIN32)
+ # Check Windows MSVC style flags.
+ check_c_compiler_flag(/TP LIBOMP_HAVE_TP_FLAG)
+ check_cxx_compiler_flag(/EHsc LIBOMP_HAVE_EHSC_FLAG)
+ check_cxx_compiler_flag(/GS LIBOMP_HAVE_GS_FLAG)
+ check_cxx_compiler_flag(/Oy- LIBOMP_HAVE_Oy__FLAG)
+ check_cxx_compiler_flag(/arch:SSE2 LIBOMP_HAVE_ARCH_SSE2_FLAG)
+ check_cxx_compiler_flag(/Qsafeseh LIBOMP_HAVE_QSAFESEH_FLAG)
+ # It is difficult to create a dummy masm assembly file
+ # and then check the MASM assembler to see if these flags exist and work,
+ # so we assume they do for Windows.
+ set(LIBOMP_HAVE_SAFESEH_MASM_FLAG TRUE)
+ set(LIBOMP_HAVE_COFF_MASM_FLAG TRUE)
+ # Change Windows flags /MDx to /MTx
+ foreach(libomp_lang IN ITEMS C CXX)
+ foreach(libomp_btype IN ITEMS DEBUG RELWITHDEBINFO RELEASE MINSIZEREL)
+ string(REPLACE "/MD" "/MT"
+ CMAKE_${libomp_lang}_FLAGS_${libomp_btype}
+ "${CMAKE_${libomp_lang}_FLAGS_${libomp_btype}}"
+ )
+ endforeach()
+ endforeach()
+else()
+ # It is difficult to create a dummy assembly file that compiles into an
+ # exectuable for every architecture and then check the C compiler to
+ # see if -x assembler-with-cpp exists and works, so we assume it does for non-Windows.
+ set(LIBOMP_HAVE_X_ASSEMBLER_WITH_CPP_FLAG TRUE)
+endif()
+if(${LIBOMP_FORTRAN_MODULES})
+ libomp_check_fortran_flag(-m32 LIBOMP_HAVE_M32_FORTRAN_FLAG)
+endif()
+
+# Check linker flags
+if(WIN32)
+ libomp_check_linker_flag(/SAFESEH LIBOMP_HAVE_SAFESEH_FLAG)
+elseif(NOT APPLE)
+ libomp_check_linker_flag(-Wl,-x LIBOMP_HAVE_X_FLAG)
+ libomp_check_linker_flag(-Wl,--warn-shared-textrel LIBOMP_HAVE_WARN_SHARED_TEXTREL_FLAG)
+ libomp_check_linker_flag(-Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG)
+ libomp_check_linker_flag("-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
+ libomp_check_linker_flag(-static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG)
+ libomp_check_linker_flag(-Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG)
+ libomp_check_linker_flag(-Wl,-fini=__kmp_internal_end_fini LIBOMP_HAVE_FINI_FLAG)
+endif()
+
+# Check Intel(R) C Compiler specific flags
+if(CMAKE_C_COMPILER_ID STREQUAL "Intel")
+ check_cxx_compiler_flag(/Qlong_double LIBOMP_HAVE_LONG_DOUBLE_FLAG)
+ check_cxx_compiler_flag(/Qdiag-disable:177 LIBOMP_HAVE_DIAG_DISABLE_177_FLAG)
+ check_cxx_compiler_flag(/Qinline-min-size=1 LIBOMP_HAVE_INLINE_MIN_SIZE_FLAG)
+ check_cxx_compiler_flag(-Qoption,cpp,--extended_float_types LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG)
+ check_cxx_compiler_flag(-falign-stack=maintain-16-byte LIBOMP_HAVE_FALIGN_STACK_FLAG)
+ check_cxx_compiler_flag("-opt-streaming-stores never" LIBOMP_HAVE_OPT_STREAMING_STORES_FLAG)
+ libomp_check_linker_flag(-static-intel LIBOMP_HAVE_STATIC_INTEL_FLAG)
+ libomp_check_linker_flag(-no-intel-extensions LIBOMP_HAVE_NO_INTEL_EXTENSIONS_FLAG)
+ check_library_exists(irc_pic _intel_fast_memcpy "" LIBOMP_HAVE_IRC_PIC_LIBRARY)
+endif()
+
+# Checking Threading requirements
+find_package(Threads REQUIRED)
+if(WIN32)
+ if(NOT CMAKE_USE_WIN32_THREADS_INIT)
+ libomp_error_say("Need Win32 thread interface on Windows.")
+ endif()
+else()
+ if(NOT CMAKE_USE_PTHREADS_INIT)
+ libomp_error_say("Need pthread interface on Unix-like systems.")
+ endif()
+endif()
+
+# Find perl executable
+# Perl is used to create omp.h (and other headers) along with kmp_i18n_id.inc and kmp_i18n_default.inc
+find_package(Perl REQUIRED)
+# The perl scripts take the --os=/--arch= flags which expect a certain format for operating systems and arch's.
+# Until the perl scripts are removed, the most portable way to handle this is to have all operating systems that
+# are neither Windows nor Mac (Most Unix flavors) be considered lin to the perl scripts. This is rooted
+# in that all the Perl scripts check the operating system and will fail if it isn't "valid". This
+# temporary solution lets us avoid trying to enumerate all the possible OS values inside the Perl modules.
+if(WIN32)
+ set(LIBOMP_PERL_SCRIPT_OS win)
+elseif(APPLE)
+ set(LIBOMP_PERL_SCRIPT_OS mac)
+else()
+ set(LIBOMP_PERL_SCRIPT_OS lin)
+endif()
+if(IA32)
+ set(LIBOMP_PERL_SCRIPT_ARCH 32)
+elseif(MIC)
+ set(LIBOMP_PERL_SCRIPT_ARCH mic)
+elseif(INTEL64)
+ set(LIBOMP_PERL_SCRIPT_ARCH 32e)
+else()
+ set(LIBOMP_PERL_SCRIPT_ARCH ${LIBOMP_ARCH})
+endif()
+
+# Checking features
+# Check if version symbol assembler directives are supported
+libomp_check_version_symbols(LIBOMP_HAVE_VERSION_SYMBOLS)
+
+# Check if quad precision types are available
+if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+ set(LIBOMP_HAVE_QUAD_PRECISION TRUE)
+elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel")
+ if(LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG)
+ set(LIBOMP_HAVE_QUAD_PRECISION TRUE)
+ else()
+ set(LIBOMP_HAVE_QUAD_PRECISION TRUE)
+ endif()
+else()
+ set(LIBOMP_HAVE_QUAD_PRECISION FALSE)
+endif()
+
+# Check if adaptive locks are available
+if((${IA32} OR ${INTEL64}) AND NOT MSVC)
+ set(LIBOMP_HAVE_ADAPTIVE_LOCKS TRUE)
+else()
+ set(LIBOMP_HAVE_ADAPTIVE_LOCKS FALSE)
+endif()
+
+# Check if stats-gathering is available
+if(${LIBOMP_STATS})
+ check_c_source_compiles(
+ "__thread int x;
+ int main(int argc, char** argv)
+ { x = argc; return x; }"
+ LIBOMP_HAVE___THREAD)
+ check_c_source_compiles(
+ "int main(int argc, char** argv)
+ { unsigned long long t = __builtin_readcyclecounter(); return 0; }"
+ LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER)
+ if(NOT LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER)
+ if(${IA32} OR ${INTEL64} OR ${MIC})
+ check_include_file(x86intrin.h LIBOMP_HAVE_X86INTRIN_H)
+ libomp_append(CMAKE_REQUIRED_DEFINITIONS -DLIBOMP_HAVE_X86INTRIN_H LIBOMP_HAVE_X86INTRIN_H)
+ check_c_source_compiles(
+ "#ifdef LIBOMP_HAVE_X86INTRIN_H
+ # include <x86intrin.h>
+ #endif
+ int main(int argc, char** argv) { unsigned long long t = __rdtsc(); return 0; }" LIBOMP_HAVE___RDTSC)
+ set(CMAKE_REQUIRED_DEFINITIONS)
+ endif()
+ endif()
+ if(LIBOMP_HAVE___THREAD AND (LIBOMP_HAVE___RDTSC OR LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER))
+ set(LIBOMP_HAVE_STATS TRUE)
+ else()
+ set(LIBOMP_HAVE_STATS FALSE)
+ endif()
+endif()
+
+# Check if OMPT support is available
+# Currently, __builtin_frame_address() is required for OMPT
+# Weak attribute is required for Unices, LIBPSAPI is used for Windows
+check_c_source_compiles("int main(int argc, char** argv) {
+ void* p = __builtin_frame_address(0);
+ return 0;}" LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
+check_c_source_compiles("__attribute__ ((weak)) int foo(int a) { return a*a; }
+ int main(int argc, char** argv) {
+ return foo(argc);}" LIBOMP_HAVE_WEAK_ATTRIBUTE)
+check_include_files("windows.h;psapi.h" LIBOMP_HAVE_PSAPI_H)
+check_library_exists(psapi EnumProcessModules "" LIBOMP_HAVE_LIBPSAPI)
+if(LIBOMP_HAVE_PSAPI_H AND LIBOMP_HAVE_LIBPSAPI)
+ set(LIBOMP_HAVE_PSAPI TRUE)
+endif()
+if(NOT LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
+ set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
+else()
+ if(LIBOMP_HAVE_WEAK_ATTRIBUTE OR LIBOMP_HAVE_PSAPI)
+ set(LIBOMP_HAVE_OMPT_SUPPORT TRUE)
+ else()
+ set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
+ endif()
+endif()
+
+# Check if HWLOC support is available
+if(${LIBOMP_USE_HWLOC})
+ set(CMAKE_REQUIRED_INCLUDES ${LIBOMP_HWLOC_INSTALL_DIR}/include)
+ check_include_file(hwloc.h LIBOMP_HAVE_HWLOC_H)
+ set(CMAKE_REQUIRED_INCLUDES)
+ find_library(LIBOMP_HWLOC_LIBRARY
+ NAMES hwloc libhwloc
+ HINTS ${LIBOMP_HWLOC_INSTALL_DIR}/lib)
+ if(LIBOMP_HWLOC_LIBRARY)
+ check_library_exists(${LIBOMP_HWLOC_LIBRARY} hwloc_topology_init
+ ${LIBOMP_HWLOC_INSTALL_DIR}/lib LIBOMP_HAVE_LIBHWLOC)
+ get_filename_component(LIBOMP_HWLOC_LIBRARY_DIR ${LIBOMP_HWLOC_LIBRARY} PATH)
+ endif()
+ if(LIBOMP_HAVE_HWLOC_H AND LIBOMP_HAVE_LIBHWLOC AND LIBOMP_HWLOC_LIBRARY)
+ set(LIBOMP_HAVE_HWLOC TRUE)
+ else()
+ set(LIBOMP_HAVE_HWLOC FALSE)
+ libomp_say("Could not find hwloc")
+ endif()
+endif()
+
diff --git a/final/runtime/doc/Reference.pdf b/final/runtime/doc/Reference.pdf
new file mode 100644
index 0000000..e97c40c
--- /dev/null
+++ b/final/runtime/doc/Reference.pdf
@@ -0,0 +1,13882 @@
+%PDF-1.4
+%ÐÔÅØ
+5 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+8 0 obj
+(\376\377\000L\000L\000V\000M\000\040\000\040\000O\000p\000e\000n\000M\000P\000\040\000R\000u\000n\000t\000i\000m\000e\000\040\000L\000i\000b\000r\000a\000r\000y\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e)
+endobj
+9 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+12 0 obj
+(\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)
+endobj
+13 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+16 0 obj
+(\376\377\000Q\000u\000i\000c\000k\000l\000y\000\040\000B\000u\000i\000l\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000R\000u\000n\000t\000i\000m\000e)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+20 0 obj
+(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000R\000T\000L\000\040\000B\000u\000i\000l\000d\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000s)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+24 0 obj
+(\376\377\000F\000r\000o\000n\000t\000-\000e\000n\000d\000\040\000C\000o\000m\000p\000i\000l\000e\000r\000s\000\040\000t\000h\000a\000t\000\040\000w\000o\000r\000k\000\040\000w\000i\000t\000h\000\040\000t\000h\000i\000s\000\040\000R\000T\000L)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.5) >>
+endobj
+28 0 obj
+(\376\377\000O\000u\000t\000l\000i\000n\000i\000n\000g)
+endobj
+29 0 obj
+<< /S /GoTo /D (subsection.1.5.1) >>
+endobj
+32 0 obj
+(\376\377\000A\000d\000d\000r\000e\000s\000s\000i\000n\000g\000\040\000s\000h\000a\000r\000e\000d\000\040\000v\000a\000r\000i\000a\000b\000l\000e\000s)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsubsection.1.5.1.1) >>
+endobj
+36 0 obj
+(\376\377\000C\000u\000r\000r\000e\000n\000t\000\040\000T\000e\000c\000h\000n\000i\000q\000u\000e)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.5.1.2) >>
+endobj
+40 0 obj
+(\376\377\000F\000u\000t\000u\000r\000e\000\040\000T\000e\000c\000h\000n\000i\000q\000u\000e)
+endobj
+41 0 obj
+<< /S /GoTo /D (section.1.6) >>
+endobj
+44 0 obj
+(\376\377\000L\000i\000b\000r\000a\000r\000y\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000s)
+endobj
+45 0 obj
+<< /S /GoTo /D (section.1.7) >>
+endobj
+48 0 obj
+(\376\377\000E\000x\000a\000m\000p\000l\000e\000s)
+endobj
+49 0 obj
+<< /S /GoTo /D (subsection.1.7.1) >>
+endobj
+52 0 obj
+(\376\377\000W\000o\000r\000k\000\040\000S\000h\000a\000r\000i\000n\000g\000\040\000E\000x\000a\000m\000p\000l\000e)
+endobj
+53 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+56 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+60 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000s)
+endobj
+61 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+64 0 obj
+(\376\377\000H\000i\000e\000r\000a\000r\000c\000h\000i\000c\000a\000l\000\040\000I\000n\000d\000e\000x)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+68 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000H\000i\000e\000r\000a\000r\000c\000h\000y)
+endobj
+69 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+72 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+76 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t)
+endobj
+77 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+80 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+81 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+84 0 obj
+(\376\377\000A\000t\000o\000m\000i\000c\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000s)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsection.5.1.1) >>
+endobj
+88 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+89 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+92 0 obj
+(\376\377\000W\000a\000i\000t\000/\000R\000e\000l\000e\000a\000s\000e\000\040\000o\000p\000e\000r\000a\000t\000i\000o\000n\000s)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+96 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+100 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsubsection.5.2.2.1) >>
+endobj
+104 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000t\000y\000p\000e)
+endobj
+105 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+108 0 obj
+(\376\377\000B\000a\000s\000i\000c\000\040\000T\000y\000p\000e\000s)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsection.5.3.1) >>
+endobj
+112 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsection.5.3.2) >>
+endobj
+116 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.1) >>
+endobj
+120 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000A\000T\000O\000M\000I\000C\000\137\000R\000E\000D\000U\000C\000E)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.2) >>
+endobj
+124 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000A\000U\000T\000O\000P\000A\000R)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.3) >>
+endobj
+128 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000B\000A\000R\000R\000I\000E\000R\000\137\000E\000X\000P\000L)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.4) >>
+endobj
+132 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000B\000A\000R\000R\000I\000E\000R\000\137\000I\000M\000P\000L)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.5) >>
+endobj
+136 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000I\000M\000B)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.6) >>
+endobj
+140 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000K\000M\000P\000C)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsection.5.3.3) >>
+endobj
+144 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.5.3.3.1) >>
+endobj
+148 0 obj
+(\376\377\000i\000d\000e\000n\000t\000\137\000t)
+endobj
+149 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+152 0 obj
+(\376\377\000D\000e\000p\000r\000e\000c\000a\000t\000e\000d\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.5.4.1) >>
+endobj
+156 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.5.4.2) >>
+endobj
+160 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsubsection.5.4.2.1) >>
+endobj
+164 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000k\000\137\000t\000o\000\137\000f\000o\000r\000k)
+endobj
+165 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+168 0 obj
+(\376\377\000S\000t\000a\000r\000t\000u\000p\000\040\000a\000n\000d\000\040\000S\000h\000u\000t\000d\000o\000w\000n)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsection.5.5.1) >>
+endobj
+172 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsection.5.5.2) >>
+endobj
+176 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.5.5.2.1) >>
+endobj
+180 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000e\000g\000i\000n)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsubsection.5.5.2.2) >>
+endobj
+184 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d)
+endobj
+185 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+188 0 obj
+(\376\377\000P\000a\000r\000a\000l\000l\000e\000l\000\040\000\050\000f\000o\000r\000k\000/\000j\000o\000i\000n\000\051)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.5.6.1) >>
+endobj
+192 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.5.6.2) >>
+endobj
+196 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsubsection.5.6.2.1) >>
+endobj
+200 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000m\000i\000c\000r\000o)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.5.6.3) >>
+endobj
+204 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.1) >>
+endobj
+208 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000s\000e\000r\000i\000a\000l\000i\000z\000e\000d\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.2) >>
+endobj
+212 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000k\000\137\000c\000a\000l\000l)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.3) >>
+endobj
+216 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000k\000\137\000t\000e\000a\000m\000s)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.4) >>
+endobj
+220 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000p\000u\000s\000h\000\137\000n\000u\000m\000\137\000t\000e\000a\000m\000s)
+endobj
+221 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.5) >>
+endobj
+224 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000p\000u\000s\000h\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+225 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.6) >>
+endobj
+228 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000s\000e\000r\000i\000a\000l\000i\000z\000e\000d\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.5.7) >>
+endobj
+232 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.5.7.1) >>
+endobj
+236 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.5.7.2) >>
+endobj
+240 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.1) >>
+endobj
+244 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000o\000u\000n\000d\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.2) >>
+endobj
+248 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000o\000u\000n\000d\000\137\000t\000h\000r\000e\000a\000d\000\137\000n\000u\000m)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.3) >>
+endobj
+252 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000g\000l\000o\000b\000a\000l\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+253 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.4) >>
+endobj
+256 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000g\000l\000o\000b\000a\000l\000\137\000t\000h\000r\000e\000a\000d\000\137\000n\000u\000m)
+endobj
+257 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.5) >>
+endobj
+260 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000i\000n\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.5.8) >>
+endobj
+264 0 obj
+(\376\377\000W\000o\000r\000k\000\040\000S\000h\000a\000r\000i\000n\000g)
+endobj
+265 0 obj
+<< /S /GoTo /D (subsection.5.8.1) >>
+endobj
+268 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+269 0 obj
+<< /S /GoTo /D (subsection.5.8.2) >>
+endobj
+272 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+273 0 obj
+<< /S /GoTo /D (subsubsection.5.8.2.1) >>
+endobj
+276 0 obj
+(\376\377\000s\000c\000h\000e\000d\000\137\000t\000y\000p\000e)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.5.8.3) >>
+endobj
+280 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.1) >>
+endobj
+284 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000c\000r\000i\000t\000i\000c\000a\000l)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.2) >>
+endobj
+288 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0004)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.3) >>
+endobj
+292 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0004\000u)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.4) >>
+endobj
+296 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0008)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.5) >>
+endobj
+300 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0008\000u)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.6) >>
+endobj
+304 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.7) >>
+endobj
+308 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+309 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.8) >>
+endobj
+312 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+313 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.9) >>
+endobj
+316 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.10) >>
+endobj
+320 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0004)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.11) >>
+endobj
+324 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0004\000u)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.12) >>
+endobj
+328 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0008)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.13) >>
+endobj
+332 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0008\000u)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.14) >>
+endobj
+336 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.15) >>
+endobj
+340 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.16) >>
+endobj
+344 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.17) >>
+endobj
+348 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+349 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.18) >>
+endobj
+352 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.19) >>
+endobj
+356 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000c\000r\000i\000t\000i\000c\000a\000l)
+endobj
+357 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.20) >>
+endobj
+360 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.21) >>
+endobj
+364 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000o\000r\000d\000e\000r\000e\000d)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.22) >>
+endobj
+368 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000s\000i\000n\000g\000l\000e)
+endobj
+369 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.23) >>
+endobj
+372 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000f\000i\000n\000i)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.24) >>
+endobj
+376 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.25) >>
+endobj
+380 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.26) >>
+endobj
+384 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+385 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.27) >>
+endobj
+388 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+389 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.28) >>
+endobj
+392 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.29) >>
+endobj
+396 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000r\000d\000e\000r\000e\000d)
+endobj
+397 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.30) >>
+endobj
+400 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000s\000i\000n\000g\000l\000e)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.31) >>
+endobj
+404 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+405 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.32) >>
+endobj
+408 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.33) >>
+endobj
+412 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+413 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.34) >>
+endobj
+416 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+417 0 obj
+<< /S /GoTo /D (section.5.9) >>
+endobj
+420 0 obj
+(\376\377\000S\000y\000n\000c\000h\000r\000o\000n\000i\000z\000a\000t\000i\000o\000n)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.5.9.1) >>
+endobj
+424 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.5.9.2) >>
+endobj
+428 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.1) >>
+endobj
+432 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.2) >>
+endobj
+436 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.3) >>
+endobj
+440 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.4) >>
+endobj
+444 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.5) >>
+endobj
+448 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000r\000e\000d\000u\000c\000e)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.6) >>
+endobj
+452 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000r\000e\000d\000u\000c\000e\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.7) >>
+endobj
+456 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000l\000u\000s\000h)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.8) >>
+endobj
+460 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000r\000e\000d\000u\000c\000e)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.9) >>
+endobj
+464 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000r\000e\000d\000u\000c\000e\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+465 0 obj
+<< /S /GoTo /D (section.5.10) >>
+endobj
+468 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d\000\040\000p\000r\000i\000v\000a\000t\000e\000\040\000d\000a\000t\000a\000\040\000s\000u\000p\000p\000o\000r\000t)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsection.5.10.1) >>
+endobj
+472 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsection.5.10.2) >>
+endobj
+476 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.1) >>
+endobj
+480 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000c\000t\000o\000r)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.2) >>
+endobj
+484 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000c\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+485 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.3) >>
+endobj
+488 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000t\000o\000r)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.4) >>
+endobj
+492 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+493 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.5) >>
+endobj
+496 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000d\000t\000o\000r)
+endobj
+497 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.6) >>
+endobj
+500 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000d\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsection.5.10.3) >>
+endobj
+504 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.1) >>
+endobj
+508 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000c\000o\000p\000y\000p\000r\000i\000v\000a\000t\000e)
+endobj
+509 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.2) >>
+endobj
+512 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000c\000a\000c\000h\000e\000d)
+endobj
+513 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.3) >>
+endobj
+516 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+517 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.4) >>
+endobj
+520 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000v\000e\000c)
+endobj
+521 0 obj
+<< /S /GoTo /D (section.5.11) >>
+endobj
+524 0 obj
+(\376\377\000S\000t\000a\000t\000i\000s\000t\000i\000c\000s\000\040\000G\000a\000t\000h\000e\000r\000i\000n\000g\000\040\000f\000r\000o\000m\000\040\000O\000M\000P\000T\000B)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.5.11.1) >>
+endobj
+528 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+529 0 obj
+<< /S /GoTo /D (subsection.5.11.2) >>
+endobj
+532 0 obj
+(\376\377\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s)
+endobj
+533 0 obj
+<< /S /GoTo /D (subsection.5.11.3) >>
+endobj
+536 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+537 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.1) >>
+endobj
+540 0 obj
+(\376\377\000K\000M\000P\000\137\000C\000O\000U\000N\000T\000\137\000B\000L\000O\000C\000K)
+endobj
+541 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.2) >>
+endobj
+544 0 obj
+(\376\377\000K\000M\000P\000\137\000C\000O\000U\000N\000T\000\137\000V\000A\000L\000U\000E)
+endobj
+545 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.3) >>
+endobj
+548 0 obj
+(\376\377\000K\000M\000P\000\137\000F\000O\000R\000E\000A\000C\000H\000\137\000C\000O\000U\000N\000T\000E\000R)
+endobj
+549 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.4) >>
+endobj
+552 0 obj
+(\376\377\000K\000M\000P\000\137\000F\000O\000R\000E\000A\000C\000H\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+553 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.5) >>
+endobj
+556 0 obj
+(\376\377\000K\000M\000P\000\137\000O\000U\000T\000P\000U\000T\000\137\000S\000T\000A\000T\000S)
+endobj
+557 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.6) >>
+endobj
+560 0 obj
+(\376\377\000K\000M\000P\000\137\000R\000E\000S\000E\000T\000\137\000S\000T\000A\000T\000S)
+endobj
+561 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.7) >>
+endobj
+564 0 obj
+(\376\377\000K\000M\000P\000\137\000S\000T\000A\000R\000T\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+565 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.8) >>
+endobj
+568 0 obj
+(\376\377\000K\000M\000P\000\137\000S\000T\000O\000P\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+569 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.9) >>
+endobj
+572 0 obj
+(\376\377\000K\000M\000P\000\137\000T\000I\000M\000E\000\137\000B\000L\000O\000C\000K)
+endobj
+573 0 obj
+<< /S /GoTo /D (section.5.12) >>
+endobj
+576 0 obj
+(\376\377\000T\000a\000s\000k\000i\000n\000g\000\040\000s\000u\000p\000p\000o\000r\000t)
+endobj
+577 0 obj
+<< /S /GoTo /D (subsection.5.12.1) >>
+endobj
+580 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+581 0 obj
+<< /S /GoTo /D (subsection.5.12.2) >>
+endobj
+584 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+585 0 obj
+<< /S /GoTo /D (subsubsection.5.12.2.1) >>
+endobj
+588 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000m\000p\000\137\000t\000a\000s\000k\000\137\000w\000i\000t\000h\000\137\000d\000e\000p\000s)
+endobj
+589 0 obj
+<< /S /GoTo /D (subsubsection.5.12.2.2) >>
+endobj
+592 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000m\000p\000\137\000w\000a\000i\000t\000\137\000d\000e\000p\000s)
+endobj
+593 0 obj
+<< /S /GoTo /D (section.5.13) >>
+endobj
+596 0 obj
+(\376\377\000U\000s\000e\000r\000\040\000v\000i\000s\000i\000b\000l\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+597 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+600 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+601 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+604 0 obj
+(\376\377\000h\000i\000e\000r\000a\000r\000c\000h\000y\000\137\000i\000n\000f\000o\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+605 0 obj
+<< /S /GoTo /D (subsection.6.1.1) >>
+endobj
+608 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+609 0 obj
+<< /S /GoTo /D (subsection.6.1.2) >>
+endobj
+612 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+613 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.1) >>
+endobj
+616 0 obj
+(\376\377\000d\000e\000p\000t\000h)
+endobj
+617 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.2) >>
+endobj
+620 0 obj
+(\376\377\000m\000a\000x\000L\000e\000a\000v\000e\000s)
+endobj
+621 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.3) >>
+endobj
+624 0 obj
+(\376\377\000m\000a\000x\000L\000e\000v\000e\000l\000s)
+endobj
+625 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.4) >>
+endobj
+628 0 obj
+(\376\377\000n\000u\000m\000P\000e\000r\000L\000e\000v\000e\000l)
+endobj
+629 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+632 0 obj
+(\376\377\000i\000d\000e\000n\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+633 0 obj
+<< /S /GoTo /D (subsection.6.2.1) >>
+endobj
+636 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+637 0 obj
+<< /S /GoTo /D (subsection.6.2.2) >>
+endobj
+640 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+641 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.1) >>
+endobj
+644 0 obj
+(\376\377\000f\000l\000a\000g\000s)
+endobj
+645 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.2) >>
+endobj
+648 0 obj
+(\376\377\000p\000s\000o\000u\000r\000c\000e)
+endobj
+649 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.3) >>
+endobj
+652 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0001)
+endobj
+653 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.4) >>
+endobj
+656 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0002)
+endobj
+657 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.5) >>
+endobj
+660 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0003)
+endobj
+661 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+664 0 obj
+(\376\377\000k\000m\000p\000\137\000f\000l\000a\000g\000<\000\040\000P\000\040\000>\000\040\000C\000l\000a\000s\000s\000\040\000T\000e\000m\000p\000l\000a\000t\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+665 0 obj
+<< /S /GoTo /D (subsection.6.3.1) >>
+endobj
+668 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+669 0 obj
+<< /S /GoTo /D (subsection.6.3.2) >>
+endobj
+672 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+673 0 obj
+<< /S /GoTo /D (subsubsection.6.3.2.1) >>
+endobj
+676 0 obj
+(\376\377\000g\000e\000t)
+endobj
+677 0 obj
+<< /S /GoTo /D (subsubsection.6.3.2.2) >>
+endobj
+680 0 obj
+(\376\377\000g\000e\000t\000\137\000t\000y\000p\000e)
+endobj
+681 0 obj
+<< /S /GoTo /D (subsection.6.3.3) >>
+endobj
+684 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+685 0 obj
+<< /S /GoTo /D (subsubsection.6.3.3.1) >>
+endobj
+688 0 obj
+(\376\377\000l\000o\000c)
+endobj
+689 0 obj
+<< /S /GoTo /D (subsubsection.6.3.3.2) >>
+endobj
+692 0 obj
+(\376\377\000t)
+endobj
+693 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+696 0 obj
+(\376\377\000s\000t\000a\000t\000s\000\137\000f\000l\000a\000g\000s\000\137\000e\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+697 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+700 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+701 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+703 0 obj
+(\376\377\000I\000n\000d\000e\000x)
+endobj
+704 0 obj
+<< /S /GoTo /D [705 0 R /Fit ] >>
+endobj
+707 0 obj <<
+/Length 238
+/Filter /FlateDecode
+>>
+stream
+xÚ…ÐMKA àûþŠw„I“Ìw¢d‹¢‹¤KÇÒƒk)ì¿ww§Ö‚O !ïÁfýS/Ûjrc°`bvоE8c0R?ZÁKÝ4Š™ê§¹Òb}·ÍÝü^-ÚÛ10rä!=F+àP(”äÅiëìFÀDôÙÚÃg·ß¼çÂ7›åNõç^wJª¿apÉ„½aЖÐe–»\’û¼*ÖRÉ ŒýՇ깯Ã:weÀÑ ŸüˆäS¿`0Ù^,±èÏCúÇ}ÌÛÒˆ9VbwTÍ”djÒÀþùøu[}Yê\ž
+endstream
+endobj
+705 0 obj <<
+/Type /Page
+/Contents 707 0 R
+/Resources 706 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+>> endobj
+708 0 obj <<
+/D [705 0 R /XYZ 70.866 771.024 null]
+>> endobj
+706 0 obj <<
+/Font << /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+713 0 obj <<
+/Length 677
+/Filter /FlateDecode
+>>
+stream
+xÚ•TÛNÜ0}ÏWøÑ®ºÆ—ØIx+mA EPØ^$à!$f7í&Þ&^(_ß²7!U}ò±çÌÌÏØÌgÉÉ,9:-8Èq!%³'œK ²‚aIÁ¬w¡‡ÙEòy–üN¨õ"€nXyŽs–‚ªMíÌ‹¼xf RÁ±H¹ÅKp›|IÈ?3KŠÉ˜z†rû²VmÙÿœŽ£ÓTì8ÙèR¸è¾Ph ¯Vª»¼¸+ÛxZvu
+ðö­9 ëEi®@Þ,È\Aq>jK±W:8™fŒÛÄÕWïÀW”ˆo]%x#ìÈùûØQ¸PqWéugBòF È.û§ck'-g°ÖÕºU »pJ­º•»¿×i¾ˆö{&h@ŒPÚÍtŠ¨-âÛeØ^÷ú§mË…€ç{±ÖÎ6F‡„›PƒŸ/‡–M¥º!nŒ/PÀ6)ãýè¡„81cé;“J²·ÔØDãýøw ±ä‚ºwà\RLH\Þ½õT°È˜ØÑ£2°®Ì¦ î‘ 3ôúÜÕÑЖþ†£1¶ºZ–VVô(‡ƒAXõzåRØq0¯û“¥]òm¿7Ã[ÿŒÈì7ó?¿Ìø»HÌ2™ºê™˜çÔ2±”±þ3Õ©¾4£úqœ¿#.àxx«V0W;FQ~LØ1—a÷ä¦}ñéÔ·Õ¢m[­ Ì
+*2ž;A48+Òñëº'„GÖ®lg#ç&Î@HÑ<öþÑn[âDüI»^ýy{‚ê¯ø/)È}
+endstream
+endobj
+712 0 obj <<
+/Type /Page
+/Contents 713 0 R
+/Resources 711 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+>> endobj
+711 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+748 0 obj <<
+/Length 1140
+/Filter /FlateDecode
+>>
+stream
+xÚíš]w›6Çïó)¸„ T½ .ÛɲÙK—²õ¢ÛÉ¡˜ÆœbðxéÚo? ¶§v’sv:“‹`ˆ,Ù¿ç¯ÿ#=
+4 hÜ\Àæ
+0S/ÕåæâÊ»xs 50:Øð>‡sƒ ¸‹ oi|0'iR„I‘[y?o»’¿‘‘©õâþFöåÃ.çDõ › à0\w‚,És>ÿc¡:’­…áÊÖ˜«ÖÄ„É÷Tmÿ„è6»=ªÖ¢is· “ÅÛ¡ž8 Ûfº€
+Ú´¹/“"Z‡–…cΣ™ŸÉ Íoõ“[ùí³O~î}ãƒü#CD~±úqe;#ÚÂQÃF(4Paá\ ’¥Ë2(¢4éŽãbËfŒÕþšwüºF.‡¥”º¬ƒò[†æçXK᪌âe”<ÖwÅJkF
+ÈBf¥¡Nè„ëŒìObO4ûwåf“ÊyH¡Y„KÍÙ›ïÄA½ÊœäÇefÉ)ë«ù“÷&sFÒ=ÒT“¾¶(33éñv˜hГt½‰â0Ë¡ûJßõÍ?Š³Š bægý(*VMË(ßƪ;8ý_¡ÆG£fõ]YÄQ¢ ¤ƒ†Rz~ÎðŸÅG®wÜ~*fU2&›—ËeæykôùÊÏúbafúµü#ÿ£JqØsÁð9Ю0“C˜ Žƒ0W ©L“2Ëäʲ&ëYH ƒUý]ö2)Çè$Ž\æ&
+‡`b óº,Ê,<†%‚œ0mFp™Fê4H¹öjµ¨–r®“ÎfÀ’䆠¿Ð dôè“<úx© —ÙW½°\‡Ð1w¾N\䬡§åNÑæÎ÷jnì/ß­š|Ù$TÞÇ#|¶ð«Ù@Ööª6Q…Ç°±v-¬‹+‹tYÆaãTËВпîS¦ÔL¾W×>Ä‘Õ JàmÜ›aÛòE=pÞ(—µ¯=5Å‘"A¸”nEB´H~ŠBUá’ëƒ@å·Uøñ)’qŸ%m¤•Ì$ös½WTŸ¨NµÁʪrmw9 ÝQ+ÏÑŠ{²V
+l[«U'éþãC¡vh1&ÆEWãä ʃ%GÖžy^ùy³xiõÚ?Z x\ï¾ÔÒeÐi~NF?¡÷ £ýœ´~¾ðƒ,m@«sþ$Úzúv{!]|
+ÕÚ´
+endstream
+endobj
+747 0 obj <<
+/Type /Page
+/Contents 748 0 R
+/Resources 746 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R ]
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 604.987 273.726 615.377]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 589.033 156.569 597.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 569.434 224.147 580.016]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 551.727 253.511 562.309]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 534.127 284.247 544.602]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 516.313 145.101 526.895]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.5) >>
+>> endobj
+722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 498.606 254.45 508.981]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.5.1) >>
+>> endobj
+723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.006 255.621 491.481]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.5.1.1) >>
+>> endobj
+724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 463.299 251.64 473.567]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.5.1.2) >>
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 445.592 178.895 456.066]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.6) >>
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 427.885 149.082 438.153]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.7) >>
+>> endobj
+727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 410.07 233.28 420.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.7.1) >>
+>> endobj
+728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 383.952 143.966 392.405]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 366.254 143.604 374.738]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 338.244 163.647 346.89]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 318.762 172.628 329.237]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 292.537 136.506 301.182]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 274.758 148.58 283.529]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 246.829 185.937 255.474]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 227.346 183.378 237.821]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 209.639 221.956 219.908]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1.1) >>
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 191.932 206.941 202.407]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 174.225 221.956 184.493]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 156.518 276.39 166.786]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 138.703 218.833 149.286]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.2.2.1) >>
+>> endobj
+741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 121.104 157.475 131.372]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 103.397 221.956 113.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.1) >>
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 87.393 269.163 96.164]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.2) >>
+>> endobj
+744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 68.794 316.457 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.1) >>
+>> endobj
+750 0 obj <<
+/D [747 0 R /XYZ 70.866 635.428 null]
+>> endobj
+746 0 obj <<
+/Font << /F104 749 0 R /F93 714 0 R /F97 715 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+793 0 obj <<
+/Length 1242
+/Filter /FlateDecode
+>>
+stream
+xÚí›]sÚ8†ïù¾4¨ú–Ü»¤ÐÝа„ý˜I;
+ñ fºÙ_¿²-ˆ±Lc†d¦‹};âñÑ{Þ#ÙЙ:ÐùÔ¸6Þ}ôˆ#Ç9q†÷Ž€@ráĹuƒ ùmøÙ¡Œ=}]²÷Ãõ—açËð&>Öè 7>´»…”@bêŒçÛoЙècŸˆ'ïÉ™s‡2%z}æÜ4~m@Ó¬ô>«©¹áÀ4”²LC…€CæŽ
+fÛ‡ÐVëñJan°,Ò)®:÷€[‹&=f½ ñ. ©É–Rnw§Ü¾ÿ8_ŽýÅ£-üû&î"æÇ<_²
+h39R›™Ñæ›h¤¹QèF›e¬£Ð(ÄÍÃF×ÑdÑÔX¿ÛÆòZ¬_kZJ¬wÂj±>QRh銅Õbý:d‹ÅšÙb}§¦E”#\U?MK –ý30•–éJÆDÅ+zdä& ö›:êDˆôßÙLÍR%ø
+ܳïþZ¡Þ‹,Y ´ê%â±™‘WÆð:3ž¨ß¬´Úð]f¬Ç¢^ rq’ä™$™¨ú<¯–ºx¤âºÎʦf¸’ÚÛ½eØ’¼·ÓvÄ_+£Ä£Yðo\4ª‰¿Ô%d6±ZŠq†AY ¨$oßö|…?ÖpìÌ…DÝÃíº›¹’ƒ0#5š[CËWaÖ‰E‘îS\nÖ~wÕÍ<†¨{®ÍÑ««½îË~Äêa¥b™›¬my£•Œ,¾O«01<gÍnfÚâs'w &¦&ꨙ*§î$3w^h_<êÕÅgÉâS7,+êâóDƒ)Jˇ¨‡e_‡l±uò‹6ï»d¦Õ8Q+™1þ¿×bQ:ç {Ä5å'ûØíˆÙ¾œöâ)çƧ³ÅÝhV" ¸ÕE A½Qçã"åQ¸rž;³¦±¨^Æ(ñd9;¹2iìä{ïH˜ þ‘q/áÔΨ´~î‹©;´w܇¬]æi^ˆÀÒò"w.³cDW¥Êòl8ws9ÿ¿SdA¡¨Óâ÷˜eÆ_®ÇºÐb„ùŒF*?_š¨ùaº&6d=±qTôîÏÔ}ÎÅø˜¹¶ß–q€§ñ'[˜q@ô³¢ p}ÇäQ}R¡Z=¿ò¼}N: Ç£_&ÿ*óÊ&f K×yñ{ÂÓ­û&6ƒ?zãêê÷^ºv½Ta¯ÿBÝ ¡ä "“oÈ„6PÝ~ÒöBbÎÊ6›LðöœÁ&Œ‚¹Ñº«àn•X­éž»¸OÛX‹­Ä?OÓäæÿ0©+`
+endstream
+endobj
+792 0 obj <<
+/Type /Page
+/Contents 793 0 R
+/Resources 791 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 745 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ]
+>> endobj
+745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.989 282.09 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.2) >>
+>> endobj
+751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 741.292 306.514 750.748]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.3) >>
+>> endobj
+752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.594 304.514 733.051]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.4) >>
+>> endobj
+753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 705.897 254.689 715.354]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.5) >>
+>> endobj
+754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 688.2 264.65 697.863]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.6) >>
+>> endobj
+755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 669.691 235.71 680.165]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.3) >>
+>> endobj
+756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 652.805 209.364 662.262]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.3.1) >>
+>> endobj
+757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 634.296 197.428 644.565]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 616.599 221.956 626.867]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 600.605 238.777 609.17]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.2) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 581.204 260.553 591.679]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.4.2.1) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 563.507 198.665 573.982]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 545.81 221.956 556.078]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5.1) >>
+>> endobj
+763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 529.816 238.777 538.381]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5.2) >>
+>> endobj
+764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 510.307 240.755 520.683]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.5.2.1) >>
+>> endobj
+765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 492.718 233.78 502.986]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.5.2.2) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 475.021 178.886 485.495]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.323 221.956 467.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.1) >>
+>> endobj
+768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 439.626 235.71 450.1]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.2) >>
+>> endobj
+769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 421.929 230.767 432.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.2.1) >>
+>> endobj
+770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 405.935 238.777 414.5]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.3) >>
+>> endobj
+771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 386.534 310.423 396.802]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.1) >>
+>> endobj
+772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 368.837 252.071 379.311]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.2) >>
+>> endobj
+773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 351.139 263.036 361.614]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.3) >>
+>> endobj
+774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 333.442 289.998 343.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.4) >>
+>> endobj
+775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 315.745 295.485 326.013]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.5) >>
+>> endobj
+776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.047 290.482 308.316]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.6) >>
+>> endobj
+777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 282.054 185.422 290.825]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 262.653 221.956 272.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7.1) >>
+>> endobj
+779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 246.659 238.777 255.224]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7.2) >>
+>> endobj
+780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.258 300.972 237.527]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.1) >>
+>> endobj
+781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 209.561 296.489 219.829]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.2) >>
+>> endobj
+782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 191.756 299.968 202.132]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.3) >>
+>> endobj
+783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 174.059 295.485 184.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.4) >>
+>> endobj
+784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 156.469 259.593 166.737]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.5) >>
+>> endobj
+785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 138.664 164.029 149.246]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 121.074 221.956 131.343]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.1) >>
+>> endobj
+787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 103.377 276.39 113.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.2) >>
+>> endobj
+788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 85.68 228.301 95.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.2.1) >>
+>> endobj
+789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 69.686 238.777 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.3) >>
+>> endobj
+791 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+836 0 obj <<
+/Length 996
+/Filter /FlateDecode
+>>
+stream
+xÚí›ËrÚ0†÷<…–fªû%˶If2¹´ Ó.’ ã'ñ4j̤éÓW¶1Å0Þ%–7ØB>ÿ:::H<NŸÇƒO'šµŒDP ¤&P`0ž‚[çËÕåøør|3¼ŸÆD¦ÊÞ ‚ ©¿ØÔ"€7}(aÀ› n÷Î
+l,ZÛÊ¡‚âá3­œÉä×láM¼È”¹Ä群ææßnG1æÀáˆsž]DsI´ýÀûéÚP£Åk
+eÊæ:Â
+-·q’"Îi°\¸±÷<¹Cˆ„Á„•‘ZKMmS£ ÔVelŠR›UÆöóR½Êê¨ñjÝWi5*Å^AÄöx2ÒJcr?3ìÔˆŒÙ Lí¦z‘Õ1Óû™õ"+{2Œ†#ÍHXè)rþÔx3…¤Í
+ø تº8P¼#¬h;V¤•ê¼¸h»ÑH›€õâÚ°beVñ¶¿7¾¾.ÓÌ6L¼Šé1QÓ<š,c7¼I‚ª6pŒZ6þÄá°*#Qôa1±vš’cRÔTKXêpXviª8ôt“N÷g\™’¤XÛI 
+Ù»Œý¨ HÝÃ+ÃÃxóhêGþ´LOÒcÛ`#lË |zñ«Ô¨šã­œ)Æû¥i!˾V=[ °¨>¶`2©š¹µØšE“´?ÛªI{¶ Wq6Õ}µ‰vj“aë¾ÚZb+.ê#9E…uûD»A[\Xìˆéë9î—#-..ꃼ ÆžfÍâj#öÝÙ‡¸#w©hW2½²ÝÒÌjµs‰Û}XEaÑFXÊbaY±fV6
+kÄ”š—‘%®c!œ›·Ð{Žæað× š‡• /ƉŻèÚ<æPµë5feߨÓ-ª”ç«»Á‹‰jŒ:•)-óÔé¢îaĈíÜ€WÜ…N÷¯&¬OV¡—RÍXϽÕÌãÚ‘°Ù%דݥ*…kð–÷[?¸ÑZÄÕUVʺøR3%0Én˜éJÒÌnU¬²Þsw]A‡ôt“p>4u¯É‹Ä•9èO+û1ug2¸„Š´9‘‘ŸHÁ¶Nˆ0…¹¤ôOýÐÜ8ŸÅrûsh¢Ó¼òÆ_d7Iæ<½¢dƒCr‡é"Gf––‡$I2e…óóÙÝÕÂ/¾%?ÐØ#=ZR•ž‘Ü„<,?‘r‡]·Ú¶šCBIÞæzÆÁÌ_Eð¹‰Nó–Õ<$¼å³Dºçí)mà‡eÂÿ
+endstream
+endobj
+835 0 obj <<
+/Type /Page
+/Contents 836 0 R
+/Resources 834 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 790 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R ]
+>> endobj
+790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.177 244.36 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.1) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 740.48 278.629 750.955]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.2) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 722.783 283.614 733.257]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.3) >>
+>> endobj
+796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 705.085 278.629 715.56]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.4) >>
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.388 283.614 697.863]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.5) >>
+>> endobj
+798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 669.691 278.629 679.959]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.6) >>
+>> endobj
+799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 651.994 283.614 662.262]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.7) >>
+>> endobj
+800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 634.296 278.629 644.565]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.8) >>
+>> endobj
+801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 616.599 283.614 626.867]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.9) >>
+>> endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 598.902 283.847 609.17]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.10) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 581.204 288.832 591.473]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.11) >>
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 563.507 283.847 573.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.12) >>
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 545.81 288.832 556.078]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.13) >>
+>> endobj
+806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.112 297.565 538.381]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.14) >>
+>> endobj
+807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 510.415 300.282 520.89]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.15) >>
+>> endobj
+808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 492.718 305.267 503.192]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.16) >>
+>> endobj
+809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 475.021 300.282 485.495]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.17) >>
+>> endobj
+810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.323 305.267 467.798]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.18) >>
+>> endobj
+811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 439.626 264.301 449.894]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.19) >>
+>> endobj
+812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 421.929 266.166 432.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.20) >>
+>> endobj
+813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 404.231 269.662 414.5]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.21) >>
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 386.426 262.185 396.802]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.22) >>
+>> endobj
+815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 368.837 271.375 379.311]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.23) >>
+>> endobj
+816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 351.139 281.345 361.614]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.24) >>
+>> endobj
+817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 333.442 286.33 343.917]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.25) >>
+>> endobj
+818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 315.745 281.345 326.219]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.26) >>
+>> endobj
+819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.047 286.33 308.522]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.27) >>
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 280.35 246.225 290.618]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.28) >>
+>> endobj
+821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 262.653 249.722 272.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.29) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 244.848 242.244 255.224]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.30) >>
+>> endobj
+823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.258 291.083 237.527]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.31) >>
+>> endobj
+824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 209.561 296.068 219.829]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.32) >>
+>> endobj
+825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 191.864 291.083 202.132]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.33) >>
+>> endobj
+826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 174.166 296.068 184.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.34) >>
+>> endobj
+827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 156.469 173.506 166.944]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.9) >>
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 138.772 221.956 149.04]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9.1) >>
+>> endobj
+829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 122.778 238.777 131.343]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9.2) >>
+>> endobj
+830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 103.377 244.862 113.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.1) >>
+>> endobj
+831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 85.68 277.248 95.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.2) >>
+>> endobj
+832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.983 307.876 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.3) >>
+>> endobj
+834 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+878 0 obj <<
+/Length 1260
+/Filter /FlateDecode
+>>
+stream
+xÚí›]W£8Çïû)¸„‹²yO˜;íT×™j]‹îžãÌá ÊK»”êøí7@ØZ^´èÎYm{ShHiøåŸçyò
+oIŠVIÅr¼d™ ââÿÂw5Á󢩥¤ö~øaRf ÛEŠ¯’ú
+Ñ•žÓ™…Óˆ¶<“+›[±Õzµ(Ñ
+Ê$›—@ZД^à·j~VN~m(¼&¨XÞ„uYzA>.*Üi‰ª1>B©)ódÔ(u ó$ æ¹£8ô“[©iEŠÓM^|O'ùÙðøÔݯ°Â`[³NŠi™x‚»ÄÓÛ¼6Yß"À"ñÔ,Ìû0žFi ”#¿°80} Ý¿JkÜÉyÅxr¼¾>p€ûA<-”ý
+ð‡ULK6Î’MŠ¢>4¢t Öã5“kJ ½*%{1ïÏ„‘žó?·ö„9p3'õ¿<_ Z& Ð.Y𶹖Xß” "Y°{yò&² ³X´\š¢³³ÓÉÌK”ÍñÂä6]c>–³yu’F?ºQn§ÁÒk‘R±¶Ò«‡›åÄD['†s'v>Os×阽ç¡Îçé ¶ÒzÜ;¯µF–ÛYW·{…r[ 6{WŠ­4ÌFœ‘t‡
+¢ÌÆÊtj3uǬ{e$c?)<_a•ÿ´”](
+Gr–Ÿ ¬
+endstream
+endobj
+877 0 obj <<
+/Type /Page
+/Contents 878 0 R
+/Resources 876 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 833 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R ]
+>> endobj
+833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.177 297.189 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.4) >>
+>> endobj
+837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 740.014 266.175 750.283]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.5) >>
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.851 296.803 732.12]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.6) >>
+>> endobj
+839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 703.688 237.761 714.163]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.7) >>
+>> endobj
+840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.525 246.234 695.794]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.8) >>
+>> endobj
+841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 667.362 276.862 677.631]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.9) >>
+>> endobj
+842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 649.199 220.13 659.468]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.10) >>
+>> endobj
+843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 631.036 221.956 641.305]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.1) >>
+>> endobj
+844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 612.873 235.71 623.348]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.2) >>
+>> endobj
+845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 594.71 228.283 604.978]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.1) >>
+>> endobj
+846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.547 246.996 586.815]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.2) >>
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 558.384 223.8 568.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.3) >>
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.221 242.513 550.489]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.4) >>
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 522.058 224.302 532.326]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.5) >>
+>> endobj
+850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.895 243.015 514.163]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.6) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 487.436 238.777 496]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.3) >>
+>> endobj
+852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.569 264.31 477.837]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.1) >>
+>> endobj
+853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 449.406 304.953 459.674]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.2) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 305.939 441.511]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.3) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 412.972 324.652 423.348]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.4) >>
+>> endobj
+856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 394.809 242.393 405.391]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 376.754 221.956 387.022]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.1) >>
+>> endobj
+858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.294 230.94 368.859]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.2) >>
+>> endobj
+859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 342.131 269.163 350.902]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.3) >>
+>> endobj
+860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 323.076 274.119 332.739]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.1) >>
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 304.913 273.123 314.576]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.2) >>
+>> endobj
+862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 286.75 300.013 296.413]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.3) >>
+>> endobj
+863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 268.587 328.427 278.25]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.4) >>
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 250.424 277.607 260.087]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.5) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 232.261 270.64 241.924]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.6) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 214.098 313.982 223.761]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.7) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 195.935 309.006 205.598]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.8) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 177.772 263.664 187.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.9) >>
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 158.69 172.789 169.066]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.12) >>
+>> endobj
+870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 140.635 221.956 150.903]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.12.1) >>
+>> endobj
+871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 124.175 238.777 132.74]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.12.2) >>
+>> endobj
+872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.309 303.044 114.577]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.12.2.1) >>
+>> endobj
+873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 86.146 281.48 96.414]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.12.2.2) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 69.686 194.245 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.13) >>
+>> endobj
+876 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+907 0 obj <<
+/Length 1035
+/Filter /FlateDecode
+>>
+stream
+xÚíšÏsâ6Çïü:Ú+úmi§ÓCw7;ÝIv· ÓÒÆ…0ņÓ†ÿ¾’-;6¶³lfÚb.–ÄG§ï{9@àÃè§ñèì\Q ¡‚‚ñ”B€P(0ÏÀ÷öó§ñûOãkÿëø#`LBÎ¥ùtÞö—}8z?ý9Âæ¸AJ( Óxtó™iû¤J‚¿óž1`œBΨ©/Áõè—r«*ÆIçnÀ«§Ö)0DåB…`óòÞ.£ÍÆH(½w«é6ÖIe‹U’¯µœÄ|3{HËo±kÞŸûìœñÚÄ#
+¢@€CS275Ävr!¼û…N}Œ¼(Þûy»É"¹³•U±¢Úâ®tÞ SLusq7g̃~À9/
+Ñ(ø+¼û÷ bý
+3·¼Ú€| (%Þ;E‹¥ž9ЛijZ¸·X·­à&Àˆ‘ÿœ×úÀQËØ!q¬/u|k ¾ eQûgçc¯Åœ„jÀ
+(†Rⶹ%3%½™^g÷ûð; 'pôІ6=Àˆy4q ãèáBG>AæD#ÜÓ›}èT¢ïA|†Lë|íaWà]¶ø†„ |-_r”ý2Ç7±’cñ¹Õ Ô-aÄ=ˆè‚¡âû†Lœ´[ÌÌ‘Vp×Y!)¶Ó¬©åÌi×)çˆ"§‡ûXÅGR|û2(¾J“à ßwÀÚ­øHMñýŽæ­ãQÒAó½àÌl .5ßz³Ú¦mO—Ýg)RS|©ÞX/QéÙ·<¶„éQöËz “ðs 7l˜÷¦ác ÷ˆjêDõñzRzv€³sŒ‚Ja“­\A¢Ê íE‡F6#H(+{|éBBö˜äý±oˆªG-=;ö11Š>^/£L±e„þÏ$ηvVpH±híì Ë_¨÷V´S–Ÿo“iNxOšaÞɇ§…±[†Óš Ÿëìµ2Tƒ’©h“GÚ“l·nyÔ° º9]Öë‰]ótÚõìXoA+o±\M{öÁ[<Þ;Î9Zy‹¬}€!rz)ÓïîCºu:s:}c¼ÄÆ)õÍD?q™Áz’¶:–‚žrvû)òÝÙm6ÈèztÞ{£GQö…\å!b@C(¹C1w™èçdf,™{û·†0äa“VsÍ]¡¸œs ª¼ì$ «]vb
+SäЉNM\ꌢÔú¿ùÔæ)ÜŸTz]Tu%¼¨aú‘7Tïîìß+'..~½,jŸ×:¹t1µ
+ÍzTHe2‡Ü¸Š*ì¶NÁõª¯š›¸š”}®¶I¶ˆÛ¸Xܦ‘µaäíŠ'·v»R•XGò°›çt²Oøؼ
+endstream
+endobj
+906 0 obj <<
+/Type /Page
+/Contents 907 0 R
+/Resources 905 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 875 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R ]
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 759.953 178.477 768.598]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 740.553 233.894 751.028]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 722.929 221.956 733.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.1) >>
+>> endobj
+881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 707.008 258.7 715.573]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.2) >>
+>> endobj
+882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.68 204.881 697.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.1) >>
+>> endobj
+883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 671.759 227.889 680.324]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.2) >>
+>> endobj
+884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 654.135 224.805 662.699]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.3) >>
+>> endobj
+885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.51 234.237 645.075]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.4) >>
+>> endobj
+886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 618.886 198.791 627.657]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 599.558 221.956 609.826]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 583.637 258.7 592.202]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.202 201.385 574.784]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.1) >>
+>> endobj
+890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 546.685 214.341 556.953]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.2) >>
+>> endobj
+891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.872 227.342 539.329]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.3) >>
+>> endobj
+892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 512.248 227.342 521.705]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.4) >>
+>> endobj
+893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 494.623 227.342 504.08]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.5) >>
+>> endobj
+894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 476.08 279.825 486.662]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 458.563 221.956 468.831]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 442.642 274.148 451.207]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 423.207 194.911 433.583]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.2.1) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 405.582 216.842 415.958]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.2.2) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 389.769 258.7 398.334]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.145 193.907 380.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.3.1) >>
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 354.52 184.94 363.085]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.3.2) >>
+>> endobj
+902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 335.085 231.042 345.667]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 317.568 221.956 327.836]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 279.281 99.805 289.025]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+905 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+912 0 obj <<
+/Length 19
+/Filter /FlateDecode
+>>
+stream
+xÚ3PHW0Ppç2ÀA
+endstream
+endobj
+911 0 obj <<
+/Type /Page
+/Contents 912 0 R
+/Resources 910 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+>> endobj
+910 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+916 0 obj <<
+/Length 1473
+/Filter /FlateDecode
+>>
+stream
+xÚÍW[oF~÷¯à¡JA {XîDm%×#7¶’¦V©©,ûlÍM°Øñ¿ïÌÎ.瀓¶QŸØÙ¹~sÁ³n,Ïz}ä™'ó#$ññúèÇË£Õ)÷B‹§,Êbn]^[‰ÇÒ8¶âÔcqâ[—ëûd›w²ì×÷S›;^þ¼DR|Ÿ^ê£Ïr£ˆ…©p~þÛ^[f‰å‡,I¥,ÌX’qàV\=/ ®…4 #°I³½íÊæâÝ!qIÈxQOX˜d†íýØHQ—äܹX÷98šÚôá¬ǯó¢<àõá êˆú,ã<Bu.Cæ¾åÆ £€ÔrÆ—{ž‡*z‡Gv» )Ú†4iÙ«Ó0²R–Åq ãê§,ä$ãr+Ç ¸ooÚb¬ËFâ[`oÊ¡
+ày6sÜ0Lì÷í(E®ƒ^ˆXæ«„»œ³,ŠHÜæ-?ã ¾$b#ú²Õ½yUa8Ë@ÏAÔ]¥¹¯ÇF¥K™ˆ!=ªXPH»QìÞNKÓj½ÅØ÷2£o–4­w[Â-øò_CPßZ
+x/zsBì7BaG}Ú&¡°„ ™{Ž2’ÔdQÑCWå¹–sôéÎñ#;U®<¬ôÝë¾­5P±~=ëÖ2Ô,(ÝC¡øâ©â¶Rv/W«Ô×kû›Ï!Þ5—](ÛØ òµ¹¨‰P¡R”òž|–ˆõO]• íÖ€E)L~͹&|ͤNÇ3ÜŦ˜£½áž½AæÛThÒ’°]Ux Ò/nbRU Ï9$
+¤/(p÷è¿b;TáøBĺœbm’û€ ,%XÂÙ“ƒh¯ù‚ ¡Ç<™®ëë®ûË(
+tù¶r87ÝþÇQTÑÜÐ¥3"þqc>EoÚ~ ·ºƒâ‚’?€b ò]Ýô$樆 Ör?HÚ¼ÝÕÉS0=¹ÈoU€©Õšéýl3o¾“mú³éŦ¥àÇÇ…¡zóšTZË@/„l’Óûõ¨ŠCM‚A¶öš¾´î½Šq'ro\Íœydòð0Ȳ†L>ôõ²Ô›Â¬o-ð«Ðqõ»Û+”]2ùI˜lV Ÿû¦Û‰f4SK=!ÀÒ›.ô²ÕÑ‘;Õ´/ ãšFVk$ […Ðq­,:»‰Û÷Ë {óŸŽEpR·
+Bhú@(¯ôDåK³hž)ÀshéÓ³ÆÅýÁ•}Y.ðý’Í*kWa¥˜eIšƒ}ÁÓ;å7ГÀÏbCÏ{¶ûÐŽî}ÞHW¶n%î¦6”€³Ë–Å-]%Aj Ͳ%ªªîê„æ/ˆððXÐõ¯ØžºWßnp€#IŒŠ|öl.õó2ŠPH$t–íJ¶+4š¾¸?\¿yuuruòöâÝÙù«÷ßw¢ïé‰öÂóÇ}ÞçÏ—ÜOú2™¬`‹™KX”ê[oGé¶×OÃáÿ†ŸpT¡·šU¿F
+ÿù߇ò×FÀÇÇ¿Ž]‡mŒCóQÛ/ŽÝËó½±LäIÛàd»ûœZÙ—g²—íïŒ)Ì™¾Ø
+ U=öøwÿ,ÐJI}èiõŠ­¤Ã³c¯šÅ<Ô_bõÑbÇâÄŽÃtSM4%bÎp‘7xû„âá î´jBðÕá¶1âx¡Ú|«6?[µâE/6Û…‰iÐC
+endstream
+endobj
+915 0 obj <<
+/Type /Page
+/Contents 916 0 R
+/Resources 914 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 913 0 R ]
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [232.239 506.533 335.85 517.008]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://openmp.org)>>
+>> endobj
+917 0 obj <<
+/D [915 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6 0 obj <<
+/D [915 0 R /XYZ 70.866 771.024 null]
+>> endobj
+918 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+919 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+10 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+921 0 obj <<
+/D [915 0 R /XYZ 210.362 462.213 null]
+>> endobj
+14 0 obj <<
+/D [915 0 R /XYZ 70.866 443.913 null]
+>> endobj
+922 0 obj <<
+/D [915 0 R /XYZ 70.866 169.258 null]
+>> endobj
+18 0 obj <<
+/D [915 0 R /XYZ 70.866 162.807 null]
+>> endobj
+914 0 obj <<
+/Font << /F104 749 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+925 0 obj <<
+/Length 2484
+/Filter /FlateDecode
+>>
+stream
+xÚµZÛrÛÈ}×W 6Sâs <Ù»‘Ë[v¼±TÙ¤ì-%”@€ €k«Rù÷ôÜ@€
+úxÛ—Gzòt7&(Š"'¡’ÞrT!1D9™È9> Î8'‘
+‚ ²4}•¥3øùð”I"A£éQ#ž© (Š0ï+ò¦CP œšL³0¡g*Àpˆp€û
+˜CHŠ‡¡œ0DðéZ } $°ŸçcL ¬< m
+ÿ5Ÿ‰5uÅQÔ
+Ÿ¼ç BœÄàúQÌÏ£ØÑ J“š [R¿žSbšI•>fL›Me+ð¤Xl ïü áb6ç\ø‚]š~S¬åæË3Â}YÕYYÔ¦ªoN¶YoÖëŠz O#­t ‹,³‹+™–«•,r¡`#etÐyG"àx[¥ÈV)UríB1p ö¥÷qô…ó­pº~=£¯–XÅMÃmðÒeª<êûª…ËÃÒ!à2ü}Òfîq¶ÔcõÎB†§Á¶Û!͇¤Pѯó”ó Ê«JýIZ.üX:¦¼б(›Ã‡×ÁÂGè>!&Xx¤PX¶Xúä ¼ÚñŒJþ¾Éª¸(¶êüèÊòá-‰x.PD cððÐö檟Ó@ì ±(tøÊ‹Ý+/ÝT•,šüÙì°(emZš"4ýr¹Tþª¬¬úóQ—Ëæ«:8°ú<[­s FŸ³Å$2ûÌJ‘JÆ·F!3´†°”#©¯ÍóZYHìß>njË Š©Ÿä¹™›h þ³‘».³¢©­9ä÷‘r)}-hý*™gI¡A¾Ù ûÍcV›½«niö¨ÁJ®traŽqaF—U¹²+í¼<»7ìîà L W4)¬ ±/]_ž;‰Y‹Ånjcâ
+
+kÐ}ñûòpUv|]7^4@Mb¼º<Ò©Ž*ã8è)5îxÉv¤-ÎE1™˜˜L¸ÉÔ b‚bŒ¹MÕð-²9FLý
+
+@ÅC®
+X¥v
+endstream
+endobj
+924 0 obj <<
+/Type /Page
+/Contents 925 0 R
+/Resources 923 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+>> endobj
+926 0 obj <<
+/D [924 0 R /XYZ 70.866 789.024 null]
+>> endobj
+927 0 obj <<
+/D [924 0 R /XYZ 70.866 381.721 null]
+>> endobj
+22 0 obj <<
+/D [924 0 R /XYZ 70.866 364.941 null]
+>> endobj
+928 0 obj <<
+/D [924 0 R /XYZ 257.237 302.896 null]
+>> endobj
+26 0 obj <<
+/D [924 0 R /XYZ 70.866 286.013 null]
+>> endobj
+923 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 2893
+/Filter /FlateDecode
+>>
+stream
+xÚ­Ë’ÛÆñ¾_Áœ¦D3x;'9ŽTrI±âÝŠ²K…@P¨õ&•O¿€Ø•Ö¥ƒÄyôôô»{ë­v+oõêêû›«ç/S•¸iù«›í*öÜ$ŠVqªÝH­nŠÕ{G¹Ñz£ãÄySÝž²Óz£<çžW^7}yÚfyÙ­»ùq‰†  ¦ƒ>.^ýýæêÓ•‚5o¥ôIâ&:X凫÷¿y«ö~\y®Ÿ&«;‚<¬‚ÐwÃÀ‡q½º¾úç•g“¬à’ÈMc?±iŽ”ë¢ÿGwJ ÆÕ!ü§àÿÓn5_úùÕàݨÐM>ú¹­
+>-W®Þo"Ïs¶mû«zðO·p*øÐiIEnìÇöú‡?½}÷átnúêP~ض§ˆ£=÷uÕ”Å˶ý¾-éÜy
+ÙK¤ªX
+€åj-²ø +ÇUI°²–‘âæ¯riH¢§ËxH—lT´=Î4þ£íyÐïKœÊ¬æÑöÜä}Õ6<k²Cù§)qfÄ h¦)`jǾB {@«çÆa¡ŠAÖ~à†qjL2t"Üó¢XÇNq*»®jv`–:qº}v* ^«ÐÉNUv `5ê@Ñó—Ah?Ü¢7ã¢[^':1âèܵ[þ%1àà§cÙ¼}‡ØÁ£âU
+H5‘®¼ÔÕ~ºòÁ¡"#yÏgÈÉõ ”T£#à‹w¯‡kNrQfM ¾¨CçÕõ½¡t»ö=`›ÜPº=µ‡­Æüx–·…¬÷-þ*”ßZ9,B˜~^k!È;tPŽÚ#A
+άéB;Û(Ãøë¦aÈŒT$Jíty{,yh–„* t4}V5¬E˜sr×?Œœ±×²ü/åÙa­Pu=ÏnåŒaD¨heµ SHëdÿÀl$ÏD›q>ÁîÏ1³;¨¹
+œóqÃVÀŽVóêC5ÍzAw„€y40½àk·Û®ì”„Íwd2 J*ŠGIE—š‹”’Œ»æ7㟼D»•é¨<˜Ù œcš¢ s¯J#Flb°4׸RgÍî, §ÕG”ƒ`xQïZ¹BäDgß-iCyÙ!;z‘IR3Ùoz9®\¸fb¹æ˜YǨ6d½À1Àà!£$
+£[0*(æuÏS*ÊPœ–à0¢ì´ˆa²ÞŒ8ŠÀÐl6-ÿJi£Sùé\q<†™u”±¹ˆÿÈ{äöÖÂOÕëÉÙhˆ+ݸ_.híˆéOëí\W”ÁpGB¬Qûv(Ài‡¹qЊïH½Â“!CÑÌ&7ÇÂf·‚ƒ)Ó'e½MÍ2ùÏ–|
+ß×;¾¾œu­¸Ø×Rqj’ÕaÈøµH—vŠ!¾ˆ_`î¥AÏß:„PnÁÛl©nÐlèÑ0s!Ž(àoS”ð|-8r
+«ñž'MYÒõ‰¥‡ƒ¥&DH ! $b#Ī¦.{™Íý׋|a0X±ýQÛ›y÷ýÈy¹B‡Ÿó¡ypÀ!“•Ã€% ¿Ÿ+’ȘÕáÊYþ²Â’aŠÁá‰,g†z­ã9™ž„"‚uXh¥aêå \3¹aAyÖI8®$„·)§ö™‰ïÒÊ2Ïš„Ÿ3‰õœIÆçÌäÈ¢ýBÓX+Œ ÛRžejz¨î{!rHòBÜX¹·IÏeo“µË󥶰Š\ø_׎õ¤-l%“R—Åõ…'ºÒnªTˆ—l¼¦5hyã§ô cüôCÏtóí'!ÏÕóO?½Ò7Pv腾ݵ•îë™C"n Ŷe^aÑóÛC3æÀ¬¾òƒy‡nì£dãGU¸ž—°
+Ð<e¤—=ëòP'ù$›E›“¡nL㻨¶C·žõ4”›Ì{燶8O»-ÃǞȓŽE®òäÓȯZ‡(þð†_uhÀßtÂ0r¾‡r6g{¹Y+ŒÉÇ™2P¬©ÈÈU±Ó&6OÀ4<?^¶]vÀM Ò®íά³ûÑS×÷ƒ§òöCy<•y6¼î^šø1òÓ[.P/ú¦ 6lDpžn$"Õm³3Eóð¢û6_÷ÆÎG¹»K±s½?÷…ÉÉ_f~ô6b»ê«¬®þ3|f´ úŠn&[Ë:_ä/|*ïÖçL:LCèMÞ¾Ïÿ Ö|¢2?Ψqaäf¡€TIäFÁPB!ÁŸ9!ü0=DÁ9üu{CoHóÉ}úô#«~"¯vsÄRÞx >É»G3å\ùÍÜó—Y»î¹Þ›ŒÌò¿0RpÝGXâ/hŒ‘¿¾ÀÙ±¤4•Á™j|´ìnIñ:ˆ\?TŠß¶§…Lœþj€Ÿ-! Ü4¹´#ù²0•ðÒßN„1¤ˆ§üå„ù#¨7â(°þ`"Ý(’’â–c¼4•(*tÌâu)‘Eûòë©GÊÿÎÓßù‘ÑŒ5óæÍ¿Þòh–ˆÇ?àPqèÆi`d2&á Õ¡ ó³P.ÿ0ÅÎD?´Ôø»ß@ÙÌ%ü+Ã%|
+endstream
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R ]
+>> endobj
+929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 164.653 144.523 175.128]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES) >>
+>> endobj
+930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 145.212 184.477 155.794]
+/Subtype /Link
+/A << /S /GoTo /D (group__DEPRECATED) >>
+>> endobj
+931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 125.877 185.714 136.46]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN) >>
+>> endobj
+932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 106.543 165.934 117.125]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL) >>
+>> endobj
+933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 87.209 172.471 97.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES) >>
+>> endobj
+934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 67.875 151.077 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING) >>
+>> endobj
+939 0 obj <<
+/D [937 0 R /XYZ 70.866 789.024 null]
+>> endobj
+940 0 obj <<
+/D [937 0 R /XYZ 70.866 711.958 null]
+>> endobj
+30 0 obj <<
+/D [937 0 R /XYZ 70.866 705.481 null]
+>> endobj
+941 0 obj <<
+/D [937 0 R /XYZ 267.799 638.063 null]
+>> endobj
+34 0 obj <<
+/D [937 0 R /XYZ 70.866 621.105 null]
+>> endobj
+942 0 obj <<
+/D [937 0 R /XYZ 138.731 527.328 null]
+>> endobj
+38 0 obj <<
+/D [937 0 R /XYZ 70.866 512.263 null]
+>> endobj
+943 0 obj <<
+/D [937 0 R /XYZ 309.53 273.748 null]
+>> endobj
+42 0 obj <<
+/D [937 0 R /XYZ 70.866 255.618 null]
+>> endobj
+936 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+962 0 obj <<
+/Length 2134
+/Filter /FlateDecode
+>>
+stream
+xÚåZ[Û6~÷¯°@`oÆ )‰ºÌlh›é m¦Í&ÞÍCZ´LÛÂÈ’+Éu§Eþ{yÕÅ¢=²›ÝØ—‘F"Ïõ;iAkeAënôålôâëбzžcÍ––Aày–ÚÀCÖla}»“©¢
+-T{ °]+ÞŒ>þ­{÷Ö^ŒÜX.v
+ž­]#<Yj¾ Ñ:Ÿ°8ìuž×TàBÝ­h¦1J}.¹”\eZñô–ÈAiJSè}R­ÊVMÏ”ÐÅcFêº(ã5ÆÑ0_cp>è·ïD|Ëx ô@‡ÁRñ¥¿0vÉòÃFŠì@€Ø_.ïà‘¬+NOË4'½5H¼ÈØ1T :CâÏy²0 dÒÐÍ9☧ƒÐU«q’íܾž)+‘ÿývŽ*^«Ÿ…ù¤¶ä\‰G#]Hƒ_Ê PëÀZh­¢ó¤§áoÛ‚¬6DÊ© b`™V¥N¡‘ò¨)˜6Á«ñÌß>¿.Ä›.Æž6®-h7ÿõC”G¥]I7T7§ÿtðøùómhÈœmõ*2Ï_NÚPãV’ew椅 ¿÷ÂÀ`> £L±Q%Y&+vÁã&¦†µÒ<(õŠó0±áX à\ÈïsðJðÃ+„VŒ!5ÐHÉöøò0±îWZ䇥p®N‘‘ë>·A«*Yü¯L8›Hû=eÇš(zØlãhNWÉáÖ¥E=Ïä%ÍcçJ)˜ôð‡…͆]×Õ2öâ…œ&ª_‡NV)¯Y^ÉW;ÆÝš”Ú%Õƒ<Eí‹;ª{ Aï
+q¾KÕŒ9Õ+ïëtµý¨í]Ó?hë|¯Œ©JmÛ”‘ToÅ3Ö§SmALv%Õsº^çKÖ¶š<­—,¶ÙKk== ·¿Ò¡/ôQ„v¶¨ÝêÅŒ¥½IDLøÚ©^$´IèííMž@îVi>'©–!÷ó»}¨3by)ºl3“_]Mj¾‹üH7 ‘¹šQô°>¬¨h¶RR†RÚ3´Ú™‰àÍÉÅùSµÛβ*X+tl‰ˆŒêf)ª"|Aóù« ÛBu5Ÿn†tõQBYr"}€±æOÃ<~è@ô·Ó}Îð¦uÏ´µµ¼`ûßÈè;ƒ‚'ÉUŽÓ•-ƃeJVe¿–ãœm³5m~{ÿ6zýêö»YôÅìûû×_Eïn_ýû«[Uõš›JZ a™ÐcÕ$K­{³MRªÊHlæ÷ó}¨ÜƒJ
+RWušÒiÅÁ%+æT›ÖBűFªG—õi½! 1€m«ªú»(M ÀµZ9G^}•.ë Ñ8¿L£¡Z±<í ³`Q.×[ã¶äXuMmˆtн“K8Š?¹Ló=-Ô
+´Ûnëû4©êû$‹™‰ŽÙiž% ¸ˆõÅ#jX•å  ™ü MýÚ0C8z¤Ã²î.’rKªxñ†,r‡¬Áþ•ÜÛ!ð‘+ql†q»VÅlë–X]Ãîµ¾O‘Ãv¢ag£½_'ǃíÃ#‘ùØî³êdlo{^H<8¾sVHžõ[ËÝ>jCüYƒnݾ8LM' gôÏ»NÄ5
+endstream
+endobj
+961 0 obj <<
+/Type /Page
+/Contents 962 0 R
+/Resources 960 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 935 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R ]
+>> endobj
+935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 758.177 207.178 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE) >>
+>> endobj
+950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 737.965 160.555 748.439]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION) >>
+>> endobj
+951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 717.752 170.426 728.226]
+/Subtype /Link
+/A << /S /GoTo /D (group__ATOMIC__OPS) >>
+>> endobj
+952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 697.431 229.442 708.013]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING) >>
+>> endobj
+953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 387.6 138.811 395.127]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) >>
+>> endobj
+954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 339.78 130.443 347.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) >>
+>> endobj
+955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.16 283.989 130.443 291.515]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 212.258 180.654 219.784]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.082 204.288 214.129 211.814]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.082 164.437 205.76 171.963]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) >>
+>> endobj
+959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.897 132.557 218.313 140.083]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) >>
+>> endobj
+963 0 obj <<
+/D [961 0 R /XYZ 70.866 789.024 null]
+>> endobj
+964 0 obj <<
+/D [961 0 R /XYZ 70.866 668.036 null]
+>> endobj
+46 0 obj <<
+/D [961 0 R /XYZ 70.866 661.463 null]
+>> endobj
+965 0 obj <<
+/D [961 0 R /XYZ 70.866 626.285 null]
+>> endobj
+50 0 obj <<
+/D [961 0 R /XYZ 70.866 626.285 null]
+>> endobj
+960 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+979 0 obj <<
+/Length 481
+/Filter /FlateDecode
+>>
+stream
+xÚSMoÓ@½ûWÌÑ<Ì~¯‹à€(•ªVÐÔ‚CZYi즖b'8´Bü÷n¼vã–
+—ÝÙ·oß¼Í,€à(xŸ¯?&,&Z H¯ÁZ­Á$5ƒ4‡iÈÐD176<¼Uëe±‰.ÓcÒ¢RÖÉt$µƒÃ4ø0‡°)kÑr ó*˜^äîîEbáGǬ@*J
+/á<8 ¨·çX.råæÖfO¡I_sV4&ÆÝŽªÐ i(ãûªÌ;“ƒ:LcMV³²ÎeM‘oçE¦.HQÏ#tiº¬}8yxµi›í¼ý«^[®ê¬Íºî
+mÇ^~zuF˜1¾//~×t–Ö—{ùÖïû4{ÆŸçw¹_ª}n•qø/8ü Üh9š(©P»­Ë{TÔE3k‹ÜÿŽUí÷¯‘Pá
+¹àg²­Û²*úåU3sé…w¹Ú9èã«HPx{·èEý´Ã÷Dv˜
+endstream
+endobj
+978 0 obj <<
+/Type /Page
+/Contents 979 0 R
+/Resources 977 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+980 0 obj <<
+/D [978 0 R /XYZ 70.866 789.024 null]
+>> endobj
+977 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+984 0 obj <<
+/Length 330
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËN1 ¼ç+|Ü=48ñÆIzD@EÕŠ×
+¥‡>ҪݖUð÷d_€
+WÔû¥ÎI§3XlÅdŠ°ŒC@IÞÁsÜBfHš¬ºðnÄ•ÀÖ½®~ã46Rþ‡±Ë¥¶œÕ¦šh…S)92Ö·BÊÙ!,›ÛvESïR2I7¼ û¦ÑÔVT¦éõQ÷‰›×*Õ˜ìÊÖ¸*Ùºû KoÉU‚”5ÒúìÇl>d©Iÿ1›y¥ íOv)aòòº®¡¨ãêü±½Qdžl
+endstream
+endobj
+983 0 obj <<
+/Type /Page
+/Contents 984 0 R
+/Resources 982 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+985 0 obj <<
+/D [983 0 R /XYZ 70.866 789.024 null]
+>> endobj
+982 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1001 0 obj <<
+/Length 650
+/Filter /FlateDecode
+>>
+stream
+xÚí˜AoÛ ÇïùíC`Àx·e[²NªV5žvèv`1iXÛ²I·îÓ’µU4ÕéÚu/y˜ˆz?Þ㜦´µ°¶Ùšé`œFŒ(À²„c.@Œ àp H3p¼ZÊʨ:"~NßÝrä¼#$Hë!c
+ïà¸ÌÖ¹rãŠL…ß÷øÙ¿L¿FŒ™÷Î#HY伈Ã!FùyçÙûM(&œG~,b7ô­ªÛeÅ"гҙ\7Ƶʅÿ#Ï]cå&yqc–­˜BG`ˆcÈ u³¼4åJÏÝè÷• $F4º,ìœQ"ÚhqgØ_÷þïºvÀ n´SËálˆi‚íÅ´Ãe·Æ0aÌ‘úR‹F›Ñ©Ê•lüÞ(o1Ãv?ö`»áÌX6Û JCLPpUÙ<Æ"þ_Ãû÷ÈáN)õZUµšK£2‡o².æ>èÁµ¯G³M·j73Òê¶â™uå¹ÂSš-×&+CÌ‚o…=¤8z
+ñ{F h'P'›cÉAy®¼ù„Z„
+JKÑ’º}-ua{­IòôÂúŒø±NüÒe­¤Ï¬£bÇŒ°`µÑùJ{RA*î(
+endstream
+endobj
+1000 0 obj <<
+/Type /Page
+/Contents 1001 0 R
+/Resources 999 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+/Annots [ 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R ]
+>> endobj
+986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.796 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 478.657 525.406 487.222]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.886 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 454.747 525.406 463.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 442.976 525.406 451.357]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 430.837 525.406 439.401]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 418.881 525.406 427.446]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.9) >>
+>> endobj
+995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 407.11 525.406 415.491]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.10) >>
+>> endobj
+996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 395.155 525.406 403.536]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 383.016 525.406 391.581]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.12) >>
+>> endobj
+998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 371.061 525.406 379.625]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.13) >>
+>> endobj
+1002 0 obj <<
+/D [1000 0 R /XYZ 70.866 789.024 null]
+>> endobj
+54 0 obj <<
+/D [1000 0 R /XYZ 70.866 771.024 null]
+>> endobj
+58 0 obj <<
+/D [1000 0 R /XYZ 70.866 585.116 null]
+>> endobj
+999 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1005 0 obj <<
+/Length 301
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËnÂ0¼û+öèꮽñ‹cÕú j”4!AB¨ôïëÄ ªÔSO;^Ç3»k@²›‚]ß{'¼1Å
+,
+g X¯„‘P”0ã.›# o¹<>k›“º<mCv¥¬ãU2©ù¹!²»‚}2yò"çœp*‡›ÍÊx7ä|µÌäš„Î)â-LÙ3ÃÎb_ÿhj%ÿ£Ø‡5BY“7a•n2ÉÈ&*¶Á†¡
+‡Å1”)[]¥ú–‘æ}sö (ê*J¤ª™tZe
+y}H‡ñøu’Ðã>T“§fZц¼%×’V ë/C~G¤ŽõÛ¶ŠTÏy9UÇÍ®ÛÄx³<,âwùwê,¾­3B~þ^·„Pµëêç×ö…xÓ
+endstream
+endobj
+1004 0 obj <<
+/Type /Page
+/Contents 1005 0 R
+/Resources 1003 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+1006 0 obj <<
+/D [1004 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1003 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1016 0 obj <<
+/Length 558
+/Filter /FlateDecode
+>>
+stream
+xÚí—]kÛ0†ïó+t)Á¬êèËò»XYºíj ßu#¸‰›¹N°Xþý¤J¸xiG²@ÁW’å£çœè}u’0´F ÝÌØa¤\ù©nfòÙÕ˜D`¨Ê4 ü¥Œ­‘6Œê”£|…nñuYl{Û’„sƒù‘y
+Ω`†{
+C‰RTšøTÙ¶h (¼$).«eQØçfe
+\\ÀZNvxvèú¢ï¢!º…õÿy”œÿb¿åQÑ>æ³ßeè'Ã
+endstream
+endobj
+1015 0 obj <<
+/Type /Page
+/Contents 1016 0 R
+/Resources 1014 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+/Annots [ 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R ]
+>> endobj
+1007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+1009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.612 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 478.657 525.406 487.222]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.702 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 454.747 525.406 463.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 442.792 525.406 451.357]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1017 0 obj <<
+/D [1015 0 R /XYZ 70.866 789.024 null]
+>> endobj
+62 0 obj <<
+/D [1015 0 R /XYZ 70.866 771.024 null]
+>> endobj
+66 0 obj <<
+/D [1015 0 R /XYZ 70.866 585.116 null]
+>> endobj
+1014 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1020 0 obj <<
+/Length 312
+/Filter /FlateDecode
+>>
+stream
+xÚ•QMOÂ@½ï¯˜c{`Ýé~”£QQQ¡Ñr
+3A}”}ÒñµëÚãc4zÇìñàêñSØ–d¼ Ü ‚„QÜäY·ò7DjQ¿e+.Iv˜Ég}ªv®Q-Ãzþ>—XYm~³O “óeÓ
+endstream
+endobj
+1019 0 obj <<
+/Type /Page
+/Contents 1020 0 R
+/Resources 1018 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+1021 0 obj <<
+/D [1019 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1018 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1032 0 obj <<
+/Length 520
+/Filter /FlateDecode
+>>
+stream
+xÚí–MoÔ0†ïù>&q=þŠƒ»€8 *·-Z¥‰·‰h“U’ðï×^Ñl·-R¥ž<öŽ;óZï,#„‘eÄö#åÊ…nXFoŠèdL0TåH±!£Fk¢ £:㤨É*~Û”ÛÉIʹ‰eò¥øx
+#©RTš=à²G¿ýCWÛ þ~sü–ኜæ
+Õ\ú¯jZÔ ðä¡jÜ ~¬Ûîú*ýŒJVi&tL”, êQf
+{Jh_Ý[­R9‹Ü!êââc ¹R^׶¶Ýt(¡F¡ÿS…žUþ•ùߪ¬½Ê_¯¶ë3ÆDyá@h‚@r´/®} ME¦qËuê+Ÿ138@÷rŸñùí#$¼¾Ï,Ñ\\/©ÏoàßѼñ§o'Õ9ÍÐf>1Nå4†74®íÜ1DF2ó ‹KL í¯¿Õ‘Î;£ãc›m+?=cŠ…ŒöÊÔ¡ö»Îÿ‡ð©Ø³ ˜§ ÙZÉ{µzWD?(vú.
+endstream
+endobj
+1031 0 obj <<
+/Type /Page
+/Contents 1032 0 R
+/Resources 1030 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R ]
+>> endobj
+1022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 512.819 141.716 523.294]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info) >>
+>> endobj
+1023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 502.568 105.474 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+1026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 488.801 148.859 499.383]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag) >>
+>> endobj
+1027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.612 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 476.846 138.865 487.428]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e) >>
+>> endobj
+1029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.702 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1033 0 obj <<
+/D [1031 0 R /XYZ 70.866 789.024 null]
+>> endobj
+70 0 obj <<
+/D [1031 0 R /XYZ 70.866 771.024 null]
+>> endobj
+74 0 obj <<
+/D [1031 0 R /XYZ 70.866 584.926 null]
+>> endobj
+1030 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1040 0 obj <<
+/Length 301
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËn1 ¼ç+|Ìš:q^˱/TêƒU{  ,¨Jÿ¾ÙÍ.ªÔSO;“ñØFXBŸ]ìò.'ð"·– X€Cá­—+a%%L¸TÙ´€F^ëø¯©^¯g‡Cv¡œç÷U2iø©æ±Û‚}0iò,ç½ðJÃû†M¦e|
+Ê=|5Ì hCÂhŠx cöÄ°µØÅ?šÆEÉÿ(vÃZ¡œÕõ°ÊXA^F¦°Q±™«ª°ŸC™fÛV)¾fdxW‡]ŠÚˆÒ$$©‡ªG6e‹L!ßîS2¾ŒzØ…jôXo+rÑPîÈ׆¤3Âåç¿!RËúmÛEªã<VÇÕ&´-Vóý,¶“È¿Se^;hñÍ6#ä§ïeCUs®n¿ñl?Zx„
+endstream
+endobj
+1039 0 obj <<
+/Type /Page
+/Contents 1040 0 R
+/Resources 1038 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1041 0 obj <<
+/D [1039 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1038 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1044 0 obj <<
+/Length 1917
+/Filter /FlateDecode
+>>
+stream
+xÚµZ[“›6}÷¯`¦/xR+º š¶3mÓ¤ÍL§Óvß’ÌkØ]&ظçòïûé†Á²\ú²!£ï|G{ö^¯°;"ÊÕOux½úùfõüÁGâ2$Þͽa$ÂÐ FaD½›Ä{ëÿòªô¸ÞP*|¾~óæÈ PŠT¡`oÃ9
+„ø£HNyjÆ¿,¶§]º¯â*+öW°®OÕΓ"I· !Cg†#²ÞŒ±ÿSUì²­áúó5Oiˆ† 1Š@ Í0
+0­¡kð—igyšØPÒr{Ìç@,þóW÷’aÈ, PÈ¥Á»yLK¥E$üûÓ~k¦§Oã£m?•šBõX3ìGs’íyª´Ëö¦¥z´#vñ~M¸ÿÅœ%Ù½˜¡³iú¸¦ îgi•¥–³¸·ÜN6Õ²­ ö­t0©øT $B! ê@Ö&°¿-vPå¨ÎˆŸ•¦5®ÌyžÝ©Kö«/æJUØžû<Û§®·áW¿/øußêÑàa£’jÚÇÕÉôËs‹\ž‡Â’) U·»5žcvS®âãCj'·Y•n-5ÁnBNüWVz9A’sy¶/«x¿µÚCöõñ÷Ÿ6ŒºL6 M˾«sž}PsK].3›“­ë|g/¡’¶‰ë#F~Õ©ùù·65^ˆdÄ„ó C¡ót©–ßöbQ@O½$0"ðWá]4®÷vÂ:ÈÀVÍÁ¶æ¯?˜~a—7wH5n«EÁÂü"˜¬™Ý7‡cü°‹
+xËü°Êµçüh¢ˆEMüòÙ³C vã†ÐqaÊîªSMy£²2Ëë¤×ôwŠÁ¤A2Õ¥…€‹Xœ2/¶^¬­ Û|m5Ôã.&dÆ™ågMø[¡ÌúI-€TYU¯p½gô€øvJP3v©¹”jí«k‡£†ø˜%öT 5–Ë¡€Ûnu ²À¥…î,ÓÀ.m¸VžÖ€_¯EÓèê„ëk–´ºðX¥Ã¾°
+»*qeÂ\vHu
+üw˜ãW­Zé–(øíµT
+%^¸TÜÞ~ض·Æc·÷Ùç4 nã$¹’ p=;r[œò¤½\Ïå[Å Ž Ô¹’swá#ÈþQv[#îL^tBuE‚ðˆV@ÝwÀ ìJ%V#÷ñî²°×$}7›t¿-7aW,M]Ç'qÛ¦/‡©+rÉEÿ–GÝuV̘Òi`‡‚qÎwÈ*Ö3ÊÓómhõëÍêßQÕÎ#n¿Â8CnãÛÝêí{ì%pí*RxŸtÏ{Ä¿sïŸÕ_M ‚pÈ=0ì†  ³±ŸAP[½ˆÔ>¢…G[xª™Ò‘(pÇÔ»W¶é­˜d ›E¢Ž,}ç—µú7ëP­Ò´+•` (€‹E£
+X˜ˆEdÔ3oÃð_~sðMn£ü€áG3w¥%ðÊyÒsG¶ˆô!A!ªã§ñöß`Öº‹~ÙGóveçpwžyo¥ì¥ñ2Ž$
+åÓ?¹Gø&·Q~Àñ£™»Ò«q<Óñ,@„/ãx¡È>¿Ã˜ñðÓx{„o0ßçÀ;PãGóve‡§Ég:žRDä2Ž§EÂFŸ'û¾`@úiÜ=Ò7ÙµöÕf4qW{xpr¦å á–±<¨l{^?ÅlŽê½œÀ"²ÏöÙÃceß.Ýe•ë¢Ç¹W\=I›6鞤5§­“ÓíÍÚhænÖ
+U%z tgîf H4uM[ŒP½ú óÜÂ9b\,÷q¢8ãë$
+»Ýò×ÿm1à…ÅÂp_%fÆQûêz Oû"1>ª®G
+endstream
+endobj
+1043 0 obj <<
+/Type /Page
+/Contents 1044 0 R
+/Resources 1042 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1045 0 obj <<
+/D [1043 0 R /XYZ 70.866 789.024 null]
+>> endobj
+78 0 obj <<
+/D [1043 0 R /XYZ 70.866 771.024 null]
+>> endobj
+968 0 obj <<
+/D [1043 0 R /XYZ 70.866 585.116 null]
+>> endobj
+82 0 obj <<
+/D [1043 0 R /XYZ 70.866 585.116 null]
+>> endobj
+86 0 obj <<
+/D [1043 0 R /XYZ 70.866 548.234 null]
+>> endobj
+1042 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F158 920 0 R /F93 714 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1051 0 obj <<
+/Length 2710
+/Filter /FlateDecode
+>>
+stream
+xÚÅZm“Û¶þ~¿‚Ÿ2TÇBñN0õx¦Ä™dì‰ë\›é8é O¢NŒ%R!)ŸÝ_ßÅ )R¤xG‘m>ØÂàîâÙ°Ï‚Ø{ð°÷ÝÍßnoþü:džB¡”Ì»ÝxFJJ/)’Ä»]{|¿Þþà1Á' Þ3½o³õq/–4Pþ7Ùê¸Ó2*“,Õƒo¾½½ùý†ÀXì‘Z¦RHQî­ö7~ÅÞžýàaÄBå=š‘{ †×:vÞO7¿ÁÎή,ý;NVCAX
+/!üª!0š P'ÂÀÅE®
+¸ µW
+qᎻ }Ê~´ GŠq«ós6Û£•vá†Ç˜O‹m†ˆ†l–ÓS¤ªHûjผCgwS)——÷ïñZ;€kxXÄÓ€+ˆS̱™È£òj7!C;Ê•j{1oé…_áà>ZswA˜š†{ StŽ@—îr1·>'ûÁþq?€þ ÊkôÏ´_~´Ò.𠂨‰/â4˜x L\àí“ôÀÏ ¼þLûeàG+í"(ñ‚ ÌñB ,\Ì¡ø÷O …}4
+˜€Y]TYE©5 Ú™Õv»žõ:^ÛæædªôË­ǺÛšÕØ–±h±d0¦5U÷¾ô7Çtegäú£Ò¶VÑ¡<‚t]‚\!
+iëÒ¸IZ³­Œ@ ÅqW¾°Ô½Åqó ÆôsJ
+ƒ8Uƒ´:”ý q\ƒ”V¬AÄÆ8ºT¤¾Ó$¸².B£dI°D’o $OUÿÇa•ÚDªü×õä8Wv:3{Kˆc ö›÷o«ù=Ä©yg;NþÞvegtê~ËlŸ¬Üp§¼‚Í
+Óx_KIÖqZÞ•m”À9 Q'©#2ÑÎ!§@:u'kXÆ›.æž3åJmZöÍé¡LÖ°Ztóö_ï¾5JCØ”XØcB ²¹F÷n[4_6­|[؆vÕ_Ú¾êY$'G/8(eÖV®èònA¹åÑ>.uˆ¿èw¯Šó§}EaB€Ñ'¨)DL(úÒ9dØØ!‚$vtµ,À Ñe;+ÈÉd2§€k@¸B–Õš[«”À:¢çš#·wd|qî6—ÌmÉÙ1_¹c—­.î…lAÒ+LìúDðaOûy’ çgÈÍ, i~¦„@öÇÁ°»ã@¯å/_§·ßËMµõ)û°ËÜæq´¶í>«jÇŽ¶ªëA(æØI2œc ‚‰Ž…œ.´×x½Íøõ:µý~mjZ½µÏwñÆòuž—¹{´±]Wˆ@ªiîž$ù›ë J>ÕÝD—‚Aœ¹ö|ÐÙ×)íwöIç)}6²äa;Ê©£ê:D𧮛žrêxílÁúP¶¶ÒQ㶩*ínåªg‰¾
+ås8Ïujû]ÜÔ:‰òŒ6ªë}×E¦9uŠçSIÍq= ß¡R"Áé3øΕjûÚÔú¿à;ãíz
+D"˜æíI2œ»6©Ç,|‡
+:„Ï`<WªíwwSë4Î3Þ¬®S@Çlšc'ÉpŽe
+ÑáosFlκ\ÏDU¬Ç ²¢Ë¾½Ns¿o›Š³*›O6gë·/§¯ù½ã(ÊÚ¼Î~%‚ú:Âr“žû"p ãÕ¨Z{ë.Ì]RýGS¡8ÏÚÚ@a©Zú}‹Dœ¢?K¬F¢xíŠn,‚ˆ'¿ñz*žÇ˸x¹J1Diñé0p¡J¿ˆK׳±¿æöòó*>T ™Ðõ]¤ h%Õ“mÜ{ç
+ÖµkVÙþ°‹«kÇæw­æV«÷²OTдÙeQÙ#VRõåå«ž
+ÌwU¨É7$n<sI¸ÿ暆?ƒz‰€«3ä(‡iÙé0jTÃûHÐQD¼)¢ÅÇ=JˆMB}®N:Jè…[IÕ¼•ÌŽå|ôòú'.ûCRI˜T€Dèâü½åT¹ú4~ΓêöÿǪLóäõ¿@ËÖžÆõÛéÛwvñ·¾¾„³â¬!ÁéDîÙ$pðdc`Q‚™Q¾¶
+ÒLRúáÇÃAW´8öËÂ>¯KðøìãóÜó U$àÒ/vdœ¶²Ù!ªÝˆ·w#áv#î;’-SVƒ'.ƒ+Ë8=Ù³´% *lï9É*Úœú–ðô÷
+öÓ˜*üŸ­ý͈#éæÙy½ÕT
+endstream
+endobj
+1050 0 obj <<
+/Type /Page
+/Contents 1051 0 R
+/Resources 1049 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1046 0 R 1047 0 R 1048 0 R ]
+>> endobj
+1046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.795 529.114 281.078 536.64]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.532 345.072 297.815 352.598]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.689 151.522 255.972 159.048]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1052 0 obj <<
+/D [1050 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1053 0 obj <<
+/D [1050 0 R /XYZ 70.866 570.145 null]
+>> endobj
+1054 0 obj <<
+/D [1050 0 R /XYZ 70.866 503.984 null]
+>> endobj
+1056 0 obj <<
+/D [1050 0 R /XYZ 70.866 398.447 null]
+>> endobj
+1057 0 obj <<
+/D [1050 0 R /XYZ 70.866 311.972 null]
+>> endobj
+1058 0 obj <<
+/D [1050 0 R /XYZ 70.866 98.181 null]
+>> endobj
+1049 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R /F158 920 0 R /F104 749 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1063 0 obj <<
+/Length 1153
+/Filter /FlateDecode
+>>
+stream
+xÚåX]ã&}ϯàÑ®fXÀÛÛªR«îŒ´ÚU·»Q«jv96IÜ:vãÉL}Á`ÇI3-<÷%Ëár¸_`Øî?.¯î²¤0c,Ë HLIF Ã`Y‚‡€BÞ’$ ~í¾*Lÿ繬ڦ ¿,ß‚8Ž M"¥t˜‚©–.Þ,_X À“æ4…)‰A±_<|A Tco‚Q–‚ã€Üƒ˜*e±VVƒO‹_hÎ6¦WØ2 ÑHWîxx¡8ÈE±«$/d/ ¶}.BŒ‚¼‘œw%w¹4£Mk%\¡n1 ªfkFÚ¢è…Å·‘åuµmxi…ë?Ô:‘ï:3Dƒc%wVnR[[Š{¾o…îÏv%eÖ¡6­Õ½,ŒÀ-Æ0£Ôì²??ÈÖ´,6íºÒ4t¯jLÛU…j3\ÿÀIU±ª–Ú`¹å]½6‚M¨˜i‚„{#Rl̺ã$ÁóÒ͹$†ð˜<8¶¯î0MƒY¥ÚŠ‰`[B¿xÞ2„‚ÕêÏý¡XåCà­¾“ÏþýJ”fð3¢Èj×ñ%¶6Ð>Þ/ÀÀ¨JÞÈ•<£
+#–ÍÙÔm1m«1Ù ,®"$Õ-Œ3³î&νv´.ù˾›ÀWÂ࿺é%ïÛ}>¶UyÍzWƒAoä »n>yè‰]w ‹ÐÖð ÔžLhÆÎ"&ŠaŠR1}­óŸ¤A]uÒô†´Wí¦oŠ©êÏÒù,µ?cÈh6Ö—ÊFT­jEw^·ä?‹)}ób%ÌtòÙ t¢¢ùÆŽwóˆ­ëV»©ô]µÇñˆÀÓÑj“zëZËDWÉÕáš3üÌÁ…Ýs>vC•Z\t§ä;6óÖå¢;·ÏTâ‡ø†ÜØÓ olmNíéuÔHnç¯[}6 æ0;›Ô7s±Î°ã‰–97uoŸKbM_Çô*ø6šÏS{S=ñ¯ò²«DMüwäª8Hôæà
+nʵÔ‡FSÖPÍeõ莼ԋÿ®ê Ï›ºÍeê3áàvç¿z =̽ϟܑ>zÕ ÎÑ1
+꣸¯Ý‘~zýœ=Lpuvãî¿ÆÏ­X»#}ò¥µ³bC ×ÂØíjw¤‹öH>=Ã-\m¬ ^Ä…7qáƒî×îHÞíÇÄ=·4ØCõñàê£pÔùÔz Ý ×»†ýµÓÐîn¸ÞëtëýŽ·Þ#iz¿¬éýÓ¦÷Ê2Þõ¦ûâµ—#šÀ”ø¼¯[ê£*añì½(¦1û}|¯¿;r9ÞrÇOßÂH]¨­ð·¯-$²-ÂÔ^¶£×ˆ¼ŽØxW'§»ú»w¿¾ŸËš÷Ì»2ÃéŒ
+“,ŸÍ>#YÔœ5U…dÄ|ìYíí%ü]µÃcÕð€tºá›þO­þtxzÞ
+endstream
+endobj
+1062 0 obj <<
+/Type /Page
+/Contents 1063 0 R
+/Resources 1061 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1059 0 R 1060 0 R ]
+>> endobj
+1059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.583 706.07 230.866 713.597]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.583 655.404 230.866 662.93]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1064 0 obj <<
+/D [1062 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1065 0 obj <<
+/D [1062 0 R /XYZ 70.866 615.524 null]
+>> endobj
+1066 0 obj <<
+/D [1062 0 R /XYZ 70.866 556.212 null]
+>> endobj
+1061 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1069 0 obj <<
+/Length 666
+/Filter /FlateDecode
+>>
+stream
+xÚ•˜Ks›0Çï|
+ñ!ª„9vÚf&cOñ´‡4Ã`ƒ¦¼BPí|ûò0ÆqÍ»üѲÖ_ì‘ vc}\[¾Šù<ÐZ±õŽy‚ûZ3/p¸–l³{[êÅÃú–)8HÕÆõwWel²dqåx¾ý©Üš<)š¨IË¢ƒ­ÏkëÙ’-+˜|ËéûÜw€msëþA°¸ýí– ®Ÿí{2gà*îB÷ŒŒÝYß-1Õ)]ŸixÊŸ
+Õ’‹QiþÉ«m5ežnÃ]zHb'Œâ8ÜVMÿ‚]ym†zWaá"ÞPŠŒ"Φ¨œa ©ãô/ž¤åíè°N(ùwY5>% "Àx-É3<•KÕÉ£2qK†;O <IÉk2<IËK+v€-vqR?9Ä—õO’òfx’·Ž‘àËS†' ŽôióÉ™|¯¾<Õx’$¼&þƒuÚlð$E÷@“¼ A7WÞrͻǖñPHüÀü\hh“¡ùßl(çb°E1´ùÍà›ÆкÆÐÛÆú:O†'ÑÊáŒ×“—h¬ÙšÙƒwfo%dÆ~ß@ú¼ìõ€êõàL3È/kö ¤X@{= y=@{= y=@{=8çõä Nª6ÁìÁ;³7ƒëõ€äõ
+ûu¸³é¼ŽÛ$ %ìÃëc$Åéÿ}i’°
+endstream
+endobj
+1068 0 obj <<
+/Type /Page
+/Contents 1069 0 R
+/Resources 1067 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1070 0 obj <<
+/D [1068 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1067 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1073 0 obj <<
+/Length 640
+/Filter /FlateDecode
+>>
+stream
+xÚ—]o›0†ïù¾$õl ¶é]§m‘ªVûh´]´"th|Õ Múïgpe¢çì
+ã<~yビ÷0òD™{Þ‡/± šÆR
+²XŨ–’¨8 ’“EFîýˆòÙE ´µiªbåÆ_Ûܤ›¢©_f‹k†‚FJXÑa Wý¬÷yá={ÜN2ÂÊZS„dUy÷Œdö³k¨ˆ5ÙdEÂÈŠ…½XIî¼ï;uË#M$•Ð§v%§ìà7IþTí*I·ÉºØåY˜¼ü.“U»ILþ:fäBY•wV`h'{'8úÜ g Âx·„“ãŽÆ9IÖ-FHo¡º[hwÄ¢ðë’¬xE He\MÜhQšwjºÿ86êÜè$Í28 ¶îhà†[¸Î–c£ÎJŠP>{½ù4ŠF½ÝnźlÒÆ,h0ÜKþŒ »R¥;èv[#\Ôp£Û•p§‹+ö°
+endstream
+endobj
+1072 0 obj <<
+/Type /Page
+/Contents 1073 0 R
+/Resources 1071 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1074 0 obj <<
+/D [1072 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1071 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1078 0 obj <<
+/Length 855
+/Filter /FlateDecode
+>>
+stream
+xÚ•Xmo›0þίðGZ×ÆØ\úqÚZ©jµ—FÛ¤®Š’@:´
+*³ÆšÜŸ¶ÇÚ²å,9BWqʾ]µ4D¶š\ á*â2¬7ùÁ˜¨5ÍêÁÍ7uQµ–ñ’³‹Dî,ÀÈiœÐ4q¡§?óFïY0Îã1Še˜7[·¢`<|­"ÁìÚf²»¶™»µ­YEœ…]¹Ða\ˆzå^l‹¿†~.91£
+¡9ë¹T™3¸rã"ŠYøÜæ[ãL£Ó„s½¼dÓˆëyµÚ£×xÙ^·Í³]¸³¿Czb¿
+ÎéDJ— ‹éZ÷YØƨjÃãÉM³WýJóát/õ¯GÀ%E'©€á „>çþ|g³_åf9›·uY,g«µ&ÌæY6ðIµã8r¶Ü´´5ã°ñgÅã.’C´{ô¬É¨ZÄF\Êù$"+eQù#ãŽNÙ­}wk aFŠuð=”Æ·d¶Ý‰Ø^F|Æãÿ„ð·<6ˆð2O¾qŸ/ xË d 0ªþª(U´*Fd
+endstream
+endobj
+1077 0 obj <<
+/Type /Page
+/Contents 1078 0 R
+/Resources 1076 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1079 0 obj <<
+/D [1077 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1080 0 obj <<
+/D [1077 0 R /XYZ 70.866 752 null]
+>> endobj
+1076 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1083 0 obj <<
+/Length 1075
+/Filter /FlateDecode
+>>
+stream
+xÚ­XYÛ6~÷¯à£¬Þ¢‚¶@¯] HÐ&k´I ȶ¼+Ä–\YÞ£¿¾¼dIŽ`“@ŸxèãÌpæÓC
+W3/vÂ
+7ÝçÇúPô°º*ªÖ¿ DÕfËêÁŽ÷uÙ}zŠ r%]í Ì—1AѶ˜7F‹ê8”ÿê:%ìFÞ`dû}XØÖzm•$…‡ñœ%i´xt «|g¢wŽ1L¹sëc¡52Ä­jÝYæ‡bm»ueÛöÑ}ëÍaÈ9ú<p‚:'ÜhÅ*¼ D€`
+¥”Ýo^Õ­E„D)ë0“Vði+NÓvêˆ9¯$Ê÷÷µ3H…?Uºˆ0ºh
+eÂ;e殲¹qÝœ
+áÉ؃+¥ìEfùz=±A §M–›ñòʶµÊ|1F‘É~nʵù”‰CÌO™ÑnóÅñ
+endstream
+endobj
+1082 0 obj <<
+/Type /Page
+/Contents 1083 0 R
+/Resources 1081 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1084 0 obj <<
+/D [1082 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1085 0 obj <<
+/D [1082 0 R /XYZ 70.866 663.484 null]
+>> endobj
+1081 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F104 749 0 R /F45 709 0 R /F170 1055 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1092 0 obj <<
+/Length 963
+/Filter /FlateDecode
+>>
+stream
+xÚ­VKÛ6¾ûWðH—O=r,œvÑvc´‡M°%ÚbW–\Inº)úß;)­,»Å¦è‰Ôóúfæ)Ú#ŠÞ¯¾ß¬nÞ¥%$"6;S’DŠSN"†6zÀœŸ7P’H&@oÞ5Å©ÒAÈ㯛ütÐuŸõ¦©íåÕÛÍê·ƒ»±Éf’„K”VŸ)*àì¢D¤ ú2Ü< ©QÒú¨ÐÇÕO+ê㤄+»µ‹šQ‰')cjwÄW„!£”â_Áqfú›{]鬳aó7GÝ!wCÌ“3¿Þ¼“j† ‹HœÄ(ä Àà|â\©¢‡P©ë:`ŸþÌbÐî=÷Ã-‹Ú'JE¶ìŸziÄÿù
+í€á½à müÝküFò?©=6uÞ´WþË ÏJåëDI¬ÒÈ¢Ž0
+IO…"Ì—j­ûÌTºp%Zë.oÍqꫨ …²H©ÔÙÛ”PaA#\hˆš×ÆyeP\¸ýîTç³£R·^ÏŽ•¶m?îG{U0…¿Øêê®÷2Š¸Âºr¢¾luV8Ýî¹Î˶©Í×læªÙ¹µ;uG]¦ÞûèF‡£p1ÌäÈI•r9f§6…³§AÝ–Àô”¤€óg'ÎZ?¨§n
+ÚU@#(¢Rß ëóz
+ð1T¦ö~Dâï¦èøø¤x:»™þ±õmø$åy‹^{h¨ÞßòÌŸAáq$-ž\ED$ n’,)½×µmìqŒÆ¼àmé…õÑm¸ð+eÊí˜xCùèóôoo¾s»àop÷£'•Jc‘ ó Çé«LÔó6P”àãûSÝ›ƒÇóÖlÛÌVuú)lg?ˆuc›áçýpA×Kˆÿµ ud
+endstream
+endobj
+1091 0 obj <<
+/Type /Page
+/Contents 1092 0 R
+/Resources 1090 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+/Annots [ 1086 0 R 1087 0 R 1088 0 R 1089 0 R ]
+>> endobj
+1086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 729.66 157.981 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.969 729.66 190.385 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39baa8e37e16d043d78e34da1d19387be5ba) >>
+>> endobj
+1088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.378 729.66 219.794 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) >>
+>> endobj
+1089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.787 729.66 271.628 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba9e8f1573ea73441426c6a6dda73b4e49) >>
+>> endobj
+1093 0 obj <<
+/D [1091 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1094 0 obj <<
+/D [1091 0 R /XYZ 70.866 771.024 null]
+>> endobj
+90 0 obj <<
+/D [1091 0 R /XYZ 70.866 771.024 null]
+>> endobj
+94 0 obj <<
+/D [1091 0 R /XYZ 70.866 715.416 null]
+>> endobj
+98 0 obj <<
+/D [1091 0 R /XYZ 70.866 643.945 null]
+>> endobj
+1095 0 obj <<
+/D [1091 0 R /XYZ 70.866 617.024 null]
+>> endobj
+102 0 obj <<
+/D [1091 0 R /XYZ 70.866 617.024 null]
+>> endobj
+1096 0 obj <<
+/D [1091 0 R /XYZ 88.314 535.933 null]
+>> endobj
+1098 0 obj <<
+/D [1091 0 R /XYZ 88.314 519.993 null]
+>> endobj
+1099 0 obj <<
+/D [1091 0 R /XYZ 88.314 504.053 null]
+>> endobj
+1090 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F173 1097 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1110 0 obj <<
+/Length 1349
+/Filter /FlateDecode
+>>
+stream
+xÚ½˜[sÚ8ÇßùžÙ‡Âª®–Ü·ÐNš°ÉRÒÝ™¤Ã8XI<›µÍn³Ÿ~u³Á\R`œ<$!Ÿó—ü;GG‚Þ£½/­Þ¨õñs@<ß'ÞèÁãß÷x€¼Qäݶ .æ¢Ý óxb›£ŽÛ/s™w~Œ¾z”À8Q&ÍéÞVÔú»…T'ôPeW 0õ&³ÖíèEê·¯$Þ¿fäÌ£L£ÚØÔûÖú£V0ÓMýá”#H=„A€[Õî#
+(Dº~¢‹+EÌ‹}+ó4NŠM]Ö¼ïàjd¸(Òî<´#¦S9ÿ«R˜Ù•4,ìXؾ°Tæ‹Ci —™L&Û¤ŽÇ&dsi|*½:/Ëh¼:‰;È úCGCI‡’øŠ&€R[B,Ø Ê&¼:(kn{¶jØ–‚Õ“5á#¤¦‹êŽMÍäBÿ"SuÂl[ýZdf¡åäÙáj?>܇™ãGfl_gR¥â:XÁd»â¤*7\ž¤‘<>0‚·Ì¢ôp`±PVü&²¨¶Äýý²h^°5·¿¶Ç%°õù–À.+飑Ô‘gói<‰N«àæU]»žH÷ÂQ †q$«8²#pT™¾5i
+EN„}­ ð€n
+kªÀ—c†îºÄºˆï3³Uå÷j)~–êÿùòhÈd}…ÿ„$[Ö
+endstream
+endobj
+1109 0 obj <<
+/Type /Page
+/Contents 1110 0 R
+/Resources 1108 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+/Annots [ 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R ]
+>> endobj
+1100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 729.56 172.659 740.035]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.159 729.56 202.068 740.035]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 716.979 200.912 726.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) >>
+>> endobj
+1103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 703.587 210.873 713.25]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga50e3ecb5eb8d70f437a84a8b2bc9e88f) >>
+>> endobj
+1104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 690.195 228.312 699.858]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc) >>
+>> endobj
+1105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 676.802 262.68 686.465]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_gaf2f9e5d03f9f38651a3b8d5ef8635d44) >>
+>> endobj
+1106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 663.41 252.736 673.073]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga7358cc60d0f006b36752a1795e6d5d93) >>
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 650.018 250.737 659.681]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_gaaffb56f3d5bd8803b41e9862e2aeb863) >>
+>> endobj
+1111 0 obj <<
+/D [1109 0 R /XYZ 70.866 789.024 null]
+>> endobj
+944 0 obj <<
+/D [1109 0 R /XYZ 70.866 771.024 null]
+>> endobj
+106 0 obj <<
+/D [1109 0 R /XYZ 70.866 771.024 null]
+>> endobj
+110 0 obj <<
+/D [1109 0 R /XYZ 70.866 634.736 null]
+>> endobj
+114 0 obj <<
+/D [1109 0 R /XYZ 70.866 573.056 null]
+>> endobj
+1112 0 obj <<
+/D [1109 0 R /XYZ 70.866 547.994 null]
+>> endobj
+118 0 obj <<
+/D [1109 0 R /XYZ 70.866 547.994 null]
+>> endobj
+1113 0 obj <<
+/D [1109 0 R /XYZ 70.866 486.191 null]
+>> endobj
+122 0 obj <<
+/D [1109 0 R /XYZ 70.866 469.913 null]
+>> endobj
+1114 0 obj <<
+/D [1109 0 R /XYZ 70.866 392.174 null]
+>> endobj
+126 0 obj <<
+/D [1109 0 R /XYZ 70.866 375.896 null]
+>> endobj
+1115 0 obj <<
+/D [1109 0 R /XYZ 70.866 315.781 null]
+>> endobj
+130 0 obj <<
+/D [1109 0 R /XYZ 70.866 299.503 null]
+>> endobj
+1116 0 obj <<
+/D [1109 0 R /XYZ 70.866 239.388 null]
+>> endobj
+134 0 obj <<
+/D [1109 0 R /XYZ 70.866 223.11 null]
+>> endobj
+1117 0 obj <<
+/D [1109 0 R /XYZ 70.866 145.371 null]
+>> endobj
+138 0 obj <<
+/D [1109 0 R /XYZ 70.866 129.093 null]
+>> endobj
+1108 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1121 0 obj <<
+/Length 448
+/Filter /FlateDecode
+>>
+stream
+xÚ•“ÉnÛ0†ïz
+¥ƒ'ÃÊ1h °Ñ%B{Hƒ@–èD€-¹²„Öo_R¤'ð¥'gý8¿„ä… ¹KnŠäê6çÄ@®'ņh£Ñ9EIQ“Ç”±ì©¸'\
+”»ºÉ»êêqk³Ó&ýÔUãζC94]ë““ÏEò;¡. =õ4 ¤Ú%OHj»'<7äÏ”¹#BrÂÏØ’‡ä[‚‘Ioú#RS„"h™«snEgp x¶ ˆ˜™0éqok»qÌìóåaaÒÛ‚,˜
+endstream
+endobj
+1120 0 obj <<
+/Type /Page
+/Contents 1121 0 R
+/Resources 1119 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1122 0 obj <<
+/D [1120 0 R /XYZ 70.866 789.024 null]
+>> endobj
+142 0 obj <<
+/D [1120 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1118 0 obj <<
+/D [1120 0 R /XYZ 70.866 751.762 null]
+>> endobj
+146 0 obj <<
+/D [1120 0 R /XYZ 70.866 751.762 null]
+>> endobj
+1119 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1127 0 obj <<
+/Length 1045
+/Filter /FlateDecode
+>>
+stream
+xÚ­Vßs›F~×_q0S_ö~yì8Î4ãLSGmìŒ#ä0B b4®ÿûìÁBjÑÇq|»÷íî· ä‰
+žP»'”{B;2<¡e²Û`ÄG”NY8Épc æè± 0f° $QN?§¨GQ/}áªu ¥•h]ØWÏЬtåkßlöAP-ôE—š
+äsà¸«è ¿µFQ‹.bU[—C«åz¦1Ôs›¨Òfh³.'lâê"6#,
+¬0ú|×4ŠÔDù\Ã5x ¬Œ(çgsO3)5È‡Ì ¶ËLÅ©;ˆÒX:,U¨p?iv8 àÃ#vd5öRŒ¿t½­éä nàâuÿ„CÇá@8ñß!};Æ11g”£È6¼ÌûƼÚ7«¦¦§šgç8$ÐÛž ~óã¼íÕ®‹¿zÄ*­w®¡« æw~hšªkjؤ4Ž«×)V8/²½±γÂÛešùž¿
+ýÀ<÷ÝP—<ï¶[7BHjšÐAiNj0Ë¼Ü öšrƒMqÏ©T˜-žÒi‘Vûq¾»Ðß¡PA·ù5õóÎóí˜ò׋ø~,º½ýës»ú}›Ÿ¿ô²‰‘7Â6Éo5‘<ÖÍ×
+ Ÿ!ïvEm<·Ùc»ÒÀ0ú°;üúºtñý÷õ©9c†
+endstream
+endobj
+1126 0 obj <<
+/Type /Page
+/Contents 1127 0 R
+/Resources 1125 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1123 0 R 1124 0 R ]
+>> endobj
+1123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 704.801 218.727 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__DEPRECATED_ga27292e41af4c26e0bdf45b12b1f76d5a) >>
+>> endobj
+1124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.213 704.801 251.122 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1128 0 obj <<
+/D [1126 0 R /XYZ 70.866 789.024 null]
+>> endobj
+945 0 obj <<
+/D [1126 0 R /XYZ 70.866 771.024 null]
+>> endobj
+150 0 obj <<
+/D [1126 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1129 0 obj <<
+/D [1126 0 R /XYZ 70.866 723.517 null]
+>> endobj
+154 0 obj <<
+/D [1126 0 R /XYZ 70.866 690.557 null]
+>> endobj
+158 0 obj <<
+/D [1126 0 R /XYZ 70.866 630.933 null]
+>> endobj
+1130 0 obj <<
+/D [1126 0 R /XYZ 70.866 606.078 null]
+>> endobj
+162 0 obj <<
+/D [1126 0 R /XYZ 70.866 606.078 null]
+>> endobj
+1132 0 obj <<
+/D [1126 0 R /XYZ 70.866 573.531 null]
+>> endobj
+1125 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 1555
+/Filter /FlateDecode
+>>
+stream
+xÚ½X[“›6~÷¯àfbEW$¥oM2I³É6»Ó>d3Öf½Lmp'M}„ÁÆîúÒ>!@:çèܾOÂÁ<ÀÁÛÑÏw£—o4 ÒqÌ‚»Ç@b¤â8š¢˜w³àKHyôõî}ÀGœ0X×|½.fëE©TáU1]/Ó¼Nê¬ÈÍäÑë»ÑŸ#sq@Z™J!Ey0]Ž¾|ÅÁ þ½0bZß›™Ë€ †7:Áíè×vvbD…š‡³š`Š4!¢kwLö† $¢1Á‡·uRÂ0ëõ
+L¦*Lò™Ü>­ëY~·¦ët
+1’BÇF!Æ #Ž©ÕõfOÍ ÷|ù†‹Ž“IŒ¤’èGZ
++àžRÑ[| ‡ß"*Â"›¹ÆŸåÜ9ös3ËD`2ùc¹šNÒy–oK1ÿï±À{%„ „¿IÝ[ ©! VÓfÇ„b„©ô p13Ó·öÆ‘VÄÏYÓˆˆð…M0q’å5£‘³ ³d^i¤oò˜P0Vf€´ tPšÏNqOšƒƒþÍ=„!ØÊ‘îÙìþpº ãH YO!Û GÄåøUZ'Ù"ui}•VÓ2[µ¹'!‹)G±ÐVÞÝSZ¹š~lºyMJÿ=b8,Jû²ÈʈàÐT|þa¿fyVgÉ"ûÛö»¾©7T®ÞÔzÎÎñî–©Û²/:·å.t¨”÷ú QÐz²‹·ÙÕëj„h¤0 „Hcr¨­A/ÕmOëH 1Œ-¡íŽ#©%±«“ñvsx,.¢•+Dïkµ=¨‰ˆ/«-Œ¡°Jû0Åå*k« Aœ‰Ýz"²›ÁzRÜ)¨nRßPh¸¢í\à—]·P.%òn¡6eß-¶ñ l
+6åš-&ÖŸYÒ`®±Ì]’T©›kp×<-å(‹ˆcŸc§éhù) zèx&‘¢Ç\ÆúËbØ€4‡H€Ø S€`ÊÌ5Û·iž–Iºë¿¡ß#žpoÓ•P枘;"즯XìI/ÝÞ~»¶£O«4¿¾iñJF2ÕtsâÖ|€zfW`ÔÏùÜÖ†QµÑ„¸e@ž[Ùkn“êý˜7Ò|ÛÅÿ
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1134 0 R 1135 0 R 1136 0 R 1137 0 R ]
+>> endobj
+1134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.693 173.789 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) >>
+>> endobj
+1135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.275 704.693 206.184 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 691.849 166.813 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) >>
+>> endobj
+1137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.299 691.849 199.208 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 70.866 789.024 null]
+>> endobj
+946 0 obj <<
+/D [1139 0 R /XYZ 70.866 771.024 null]
+>> endobj
+166 0 obj <<
+/D [1139 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1142 0 obj <<
+/D [1139 0 R /XYZ 70.866 723.517 null]
+>> endobj
+170 0 obj <<
+/D [1139 0 R /XYZ 70.866 677.605 null]
+>> endobj
+174 0 obj <<
+/D [1139 0 R /XYZ 70.866 618.089 null]
+>> endobj
+970 0 obj <<
+/D [1139 0 R /XYZ 70.866 593.127 null]
+>> endobj
+178 0 obj <<
+/D [1139 0 R /XYZ 70.866 593.127 null]
+>> endobj
+1143 0 obj <<
+/D [1139 0 R /XYZ 70.866 560.521 null]
+>> endobj
+971 0 obj <<
+/D [1139 0 R /XYZ 70.866 464.406 null]
+>> endobj
+182 0 obj <<
+/D [1139 0 R /XYZ 70.866 449.166 null]
+>> endobj
+1144 0 obj <<
+/D [1139 0 R /XYZ 70.866 418.306 null]
+>> endobj
+1138 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1163 0 obj <<
+/Length 2373
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[YÛF~Ÿ_A +Q»ï# ¯’M»v p(Ž†±®ˆT²Þ_¿ÕÍ&ÅÛ¢È1°/­ª®£«¾¯šÆÁ6ÀÁ÷|xóΰ@##% Ÿ…‘–2P†"I‚ÇMða!\®¨Ò‹Ÿ— /Âs¸ÛÅ»ü“Xàç%Å‹ãùÓ›ßÉ> Ëß8gH(Zœ *ì§ÿx|øãÀ‡8 ¥*­‘¦<ˆö~ÃÁ¾û!ÀˆüåVî.@·ÂvÁ¯ÿ|À~ûQa_Ú?Þ‚y@(2„ˆª9’ \³‡`ŒÁ Ê+Ñ "Zõèô
+1RÂH«+†Ç4×õ¸äzñùoâç´.Æÿ}óŽ‹Šû‰DJ«
+ È¥n[ JU3/Ñâ¼õù¥µ…¸âÅÏ>íOÑzŸDçcs;>ˆÕ«ÖÉ!c´càu$Yk ¥MŠ5ÛÝñ)Ü­³dómné|­%|Œø§ãå°qÒB×`yE5A ˆ5GZ¨\Ô»Ë!Ê’ãa| ùp ‹Øö„Ìû½vñ9]Ò—õaIðâ²_gK²x9Çá&í‰H6ñ! Õ6é8ødT8wÇȯV,ÝÛX»·¥Y¹M­³¬ˆ2H1 /À¯‚Îè×g[üŽg¨bñiAÍh»TÍàR™Åél. Ï[ÿí ‘ÃGÛ}‘…é§ú!¹zIÄ(ó^'“½.Mw6Çá¾È°xº×¥A˜±¼N»¼Nj^‡ 5¹õ}Ý¢^1~ÙÊuÔ‘i#à/ûæ0p4"ôÕBC‰é
+Ë,õ…S(³úÿì0phBÚÌv®žOãÜëI¸Kþkíˆ7ë“uÿÙæIŽb^% p:”¸ût ”ùÎ
+=…‰WHÜ}îB^wá«ûO$ Uÿ} °@Íà §X
+:à@jܧ¶;5ªZOGÀñ¹Ñ…Òh1›ÊL;,8gØÅ£ˆ¢øÚ3ÝwŸï¨£kGD`¥¦eÇxm'²€®PoÞÆ
+O×QÀ“–(¡¦cþëCñ?6¤½·à.tAJ€¿ñ9ÌŠ0mùßv”_|øk|Ê_P?þ§˜%À¾Ãô;&‹gèõ™†÷ïÿõcþê§S|øñ畃½ö¹k÷Àpœ®§Ýj»ˆ²@þr9dÉÞW’÷ÉÓÙåLy£S½Ýy{t7‚Ÿ·nA\¿<€”ù%?—è
+endstream
+endobj
+1162 0 obj <<
+/Type /Page
+/Contents 1163 0 R
+/Resources 1161 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R ]
+>> endobj
+1145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 704.693 203.669 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 646.862 228.519 657.444]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga345b3a5866deefefc91ae1e8958f49f4) >>
+>> endobj
+1147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.004 646.862 260.913 657.444]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 633.91 185.104 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) >>
+>> endobj
+1149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.59 633.91 217.499 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [305.433 633.91 355.745 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.41 620.959 222.953 631.541]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gaae9462b03457d809faeb3e767a5b2283) >>
+>> endobj
+1152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.36 620.959 255.269 631.541]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 596.052 196.07 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) >>
+>> endobj
+1154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.556 596.052 228.465 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.399 596.052 366.711 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 583.101 223.516 593.683]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga7b1ba1cc8d9d2fea8654bbb1e59f079e) >>
+>> endobj
+1157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.001 583.101 255.91 593.683]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 570.149 243.456 580.731]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) >>
+>> endobj
+1159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.942 570.149 275.851 580.731]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.484 426.459 332.071 437.042]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) >>
+>> endobj
+1164 0 obj <<
+/D [1162 0 R /XYZ 70.866 789.024 null]
+>> endobj
+947 0 obj <<
+/D [1162 0 R /XYZ 70.866 771.024 null]
+>> endobj
+186 0 obj <<
+/D [1162 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1165 0 obj <<
+/D [1162 0 R /XYZ 70.866 721.36 null]
+>> endobj
+1166 0 obj <<
+/D [1162 0 R /XYZ 70.866 665.685 null]
+>> endobj
+190 0 obj <<
+/D [1162 0 R /XYZ 70.866 555.905 null]
+>> endobj
+194 0 obj <<
+/D [1162 0 R /XYZ 70.866 496.389 null]
+>> endobj
+1167 0 obj <<
+/D [1162 0 R /XYZ 70.866 469.469 null]
+>> endobj
+198 0 obj <<
+/D [1162 0 R /XYZ 70.866 469.469 null]
+>> endobj
+1168 0 obj <<
+/D [1162 0 R /XYZ 70.866 411.292 null]
+>> endobj
+202 0 obj <<
+/D [1162 0 R /XYZ 70.866 317.163 null]
+>> endobj
+1169 0 obj <<
+/D [1162 0 R /XYZ 70.866 292.2 null]
+>> endobj
+206 0 obj <<
+/D [1162 0 R /XYZ 70.866 292.2 null]
+>> endobj
+1170 0 obj <<
+/D [1162 0 R /XYZ 70.866 259.594 null]
+>> endobj
+1171 0 obj <<
+/D [1162 0 R /XYZ 70.866 175.434 null]
+>> endobj
+210 0 obj <<
+/D [1162 0 R /XYZ 70.866 160.194 null]
+>> endobj
+1172 0 obj <<
+/D [1162 0 R /XYZ 70.866 129.276 null]
+>> endobj
+1161 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R /F170 1055 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1179 0 obj <<
+/Length 2568
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Mãƽϯ C$`§ÓßÝô1°³€±‹8ÞA|°GÃ+‰²De½ùõyM6ER¤¸â‡ñe$‘ͪêªêê÷Š=4x hðöîïwûG(KB­Eðð10”X­r¢Yððü¼àzùëÃ÷P’H&ð\~õ}ú|ÚÄË{nìâÛtuÚÆ»,Ê’tçß}÷p÷ÛÃX°³Lk‰å2Xmï~þ•ϸ÷}@‰mð9¹ ¤DI§c|¸û×­Û)U‡šZúmZ˜“­½]Ñ*;E›âûÇ¥ ‹ô°¼gjñÉßÞ=_VÑfsñè6YÒ,:ú¡Éîâþ!Æä!ñ?K® (+®î–Œ.NÛ§øPüN?–âèù¸„n’;“÷Ì o–Ç¿PÊwIî¿Â6/q“ì¼FnYS¨{¤ŒÀ§íþqu<í÷n†’.2²ÊÝQ•s¢ûx '2*k^„‚Ѫ0CMð¥ùÔä"MžÛe,$–ŠÀ0JŒa}E…çpÖ$pA¨`ƒ%ä‰ÐœãŠ^ˆR†3?VvKE$&;‡Vi S²©õ£ pzøÔ¡Ys"¥™E³V„ ÝÔœÅÑöˆTà.-u\,lŽ V®ÞäËõ1óãLb×nœ`D
+UŽCŽ‰b3åG(†ûA›tõƺ°”eÊQIÛ/“±r·pm‰M¯$»Lð.ó‘¿œží.n/å$šncDñúV®4,9ŠI—dImÏî;u•äÍò^[¹ „t9 •/ä¼ò»bÅúõðüÙXÏX¾Ò;Š _Ã?¸U¢mœ¡
+1¶8vËé”wy·«Œk+¦¿Œk†ªcÝÏ"ƒå³ÕîÓò>ÍH¨T#k ­'ÊŸÐÂ7$X™Ï]µù¥ìXµÍ‹!Ø<dM­ÇôtXùr ¢j/HvçÍ ›ÍöÊ.‹4…0>ÂÀvxܧÓB<I†±²(íáÄslj!F L•Kþ¥/ÆãôvǸ®6C!ØôCX–c©ãào6Éþ˜{`°õíàA„êñõ˜$Ã'€DìP_§%
+Ufž‰BŠh)oèŒTÛ‰‡Zçê 7°TB‹¹N
+ñ$>Ä®šQ1AVð5pz}çyÌ:¡]èqÊ»ÝÒ]GÅ-ä|=¶ƒmjÇ"•Ób;IF[ à &ö>B
+/:¸‘G ¬œçƦÅç“ätÌý&Ôÿ@!1¬? ·/¹*Ï׌Ћ‡uRŽ(:-x¾¼’î6_Šo.ÈIÑþr÷?^XÞÔSo~m‹q‘ǘÈãŠaº~‹ cY§ê%òÂp´Ë[GW›ó÷Ùê3®SƒkµV(¶HèÇM²M²FÎe—ǤK=Oi¶vp¸hÝ3£a6üt Þëœ.P7wŽ8¸ÑS:GC%ôtŽœ(¥õ-£9´úÎQCkçh­¾sÔÐúµÎÑz}稡·*÷×{G®u!Âÿ»ÞQ(rÎ2ƒgxˆ%#.òàF½wdˆ½8š½#I‰¼Œ[_ë¨ßqà†…|Ç #ˆµ|”ãzZG!x£žÃs;ë t¦ü|ýa
+~|½j°wFp»æºˆ˜¯ðŠ'¯ç“ ÷ ˆ\1ü€—ôu8è›i*2g!ãiêP =4• Vv KC©g©u¥ÇøD›ä¿Ë{»ˆ»¼f9á&œE½c :l¨GÖ—•°‡6¢îÝ|ä@¿m¤(„rÏð°Èçºg&³FI0ÍqÆ]8@9W Û<Êj9 ËÈÁ¤‡[8R‰W&=œj¢©š´N“Q &J€Ùy8 -
+”¹óŒÓÚ ”Jç¢<ƒíkÅÆIàßüL“áã‹J§¾ù)³ØíÊ/·Pž‘Ú»ÝV>Žó 7ªˈø†f„Œ«PÛ*aåšïªÓâ‘?—g~ÝV‹/%Iøp(ñáLòÆùJŠÊuVÞòзvôxížK°Å?爭 ^Û‚Cü‚ûoJ(÷ÉàòuÜzÉœ>&o®Ôvå\hñ'8¸’ܸòcŽçÜ)l\-ð€•¦þ´ý_ö‡èe s5à\Š7ÿR÷Ë¡g÷é
+endstream
+endobj
+1178 0 obj <<
+/Type /Page
+/Contents 1179 0 R
+/Resources 1177 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+>> endobj
+1180 0 obj <<
+/D [1178 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1175 0 obj <<
+/D [1178 0 R /XYZ 70.866 741.549 null]
+>> endobj
+214 0 obj <<
+/D [1178 0 R /XYZ 70.866 726.309 null]
+>> endobj
+1181 0 obj <<
+/D [1178 0 R /XYZ 70.866 695.391 null]
+>> endobj
+1174 0 obj <<
+/D [1178 0 R /XYZ 70.866 586.524 null]
+>> endobj
+218 0 obj <<
+/D [1178 0 R /XYZ 70.866 571.284 null]
+>> endobj
+1182 0 obj <<
+/D [1178 0 R /XYZ 70.866 540.366 null]
+>> endobj
+1173 0 obj <<
+/D [1178 0 R /XYZ 70.866 419.544 null]
+>> endobj
+222 0 obj <<
+/D [1178 0 R /XYZ 70.866 404.303 null]
+>> endobj
+1183 0 obj <<
+/D [1178 0 R /XYZ 70.866 373.386 null]
+>> endobj
+1176 0 obj <<
+/D [1178 0 R /XYZ 70.866 264.917 null]
+>> endobj
+226 0 obj <<
+/D [1178 0 R /XYZ 70.866 249.677 null]
+>> endobj
+1184 0 obj <<
+/D [1178 0 R /XYZ 70.866 218.759 null]
+>> endobj
+1177 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1197 0 obj <<
+/Length 1986
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKsãD¾çWè(W‘Ùy?8RËRPPÀ&‡]*¥ÈJ¢B–‚,³ì¿§{fdK¶ìDI‡Ä£yt÷|ÝÓ_ešÜ&4ùæì«Ë³7ïœH,qZ‹äò&1”X­ã8Ñ,¹\&REÌ✛^ÞµE¶ ío뛧iÓ®²®lêÅo—ß%R
+¢Œ
+›ø7À¨L'Ž15Ü‚f„ŽöÀ(¥»Mð° ¦F›x@OTB‰QN£šœ J$åAþ»M£ˆõXFü|óNªÆLcM&gTð‘s5Z›|8WJ§¿¯î¯Êº<"ˆímD󽟆‚‰ùÕmÕ\/XšUWßæU½`4ݬö%ã’TÑ…¦å²¨»«n´BÅ$¶Á=Ì9bÁcÑÝ)8}o³’8Ëú9U“ƒZ66çœSI¬qÉ9:Q±—$"Y¿"¸±ÛísqDhás"rÝl
+VÙ¢ðf ˆÑÒ{—;›Þ´ ^|ƒ´-B쯭Ɨ‰0X7õyom˜‚NB㨀=-û^„ç·XzŠ"ïÖýH/;
+¸˜e]/n=éþº°ÝØyQ܇ñ“2Õ_ª¾¤üK¡ûíñÝö¾ÿþ—&‰
+endstream
+endobj
+1196 0 obj <<
+/Type /Page
+/Contents 1197 0 R
+/Resources 1195 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R ]
+>> endobj
+1185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 704.693 253.66 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f) >>
+>> endobj
+1186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.146 704.693 286.055 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 691.742 258.143 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga127cc7161bbef3ccd2446a9405973192) >>
+>> endobj
+1188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.629 691.742 290.538 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 678.898 254.664 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga9a981e3dcd9264c2cf5bd8a8cc6f16af) >>
+>> endobj
+1190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.15 678.898 287.059 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 665.946 259.147 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_gadcc691c6c7695988deba68a2de817a66) >>
+>> endobj
+1192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.633 665.946 291.542 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 652.995 217.768 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) >>
+>> endobj
+1194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.254 652.995 250.163 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1198 0 obj <<
+/D [1196 0 R /XYZ 70.866 789.024 null]
+>> endobj
+948 0 obj <<
+/D [1196 0 R /XYZ 70.866 771.024 null]
+>> endobj
+230 0 obj <<
+/D [1196 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1199 0 obj <<
+/D [1196 0 R /XYZ 70.866 723.517 null]
+>> endobj
+234 0 obj <<
+/D [1196 0 R /XYZ 70.866 638.751 null]
+>> endobj
+238 0 obj <<
+/D [1196 0 R /XYZ 70.866 579.128 null]
+>> endobj
+1200 0 obj <<
+/D [1196 0 R /XYZ 70.866 554.273 null]
+>> endobj
+242 0 obj <<
+/D [1196 0 R /XYZ 70.866 554.273 null]
+>> endobj
+1201 0 obj <<
+/D [1196 0 R /XYZ 70.866 521.725 null]
+>> endobj
+1202 0 obj <<
+/D [1196 0 R /XYZ 70.866 416.51 null]
+>> endobj
+246 0 obj <<
+/D [1196 0 R /XYZ 70.866 401.27 null]
+>> endobj
+1203 0 obj <<
+/D [1196 0 R /XYZ 70.866 370.41 null]
+>> endobj
+1204 0 obj <<
+/D [1196 0 R /XYZ 70.866 265.196 null]
+>> endobj
+250 0 obj <<
+/D [1196 0 R /XYZ 70.866 249.955 null]
+>> endobj
+1205 0 obj <<
+/D [1196 0 R /XYZ 70.866 219.038 null]
+>> endobj
+1195 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1210 0 obj <<
+/Length 1571
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKÛF ¾ûWèhñtÞ‹´Aƒi“E{HC–g½BdÉ‘¥¦é¯/ç!Û’×ÞuzYÉ#ù ù‘C.NÖ N^N~¼›üð³a‰FFJ–ÜÝ'
+#-e¢ E’$w«äÔêÙÇ»W qÂ`Ÿ_}S­ÚÂÎæTéé‹*k7¶lÒ&¯J'<ùénòyB@'d¯Sk¤)O²ÍäÃGœ¬àÛ«#ftòÅKn.ÜÙ(’÷“ß&ø'#8%A¸úÂþ‰1-sÂK›ð,ò2B%”„—ê><Ý–îŸ6ÛE¶k·ÛªžÍ9ž6(Cþ8Qá ¸ÇK€B0?‚“9£
+ÅE5œ_œs ÄÁìýáýÐ7N(FRUÄÈ
+r{ÑD9•£ÒÉ1‚8¤ BDõraBE•E™:€EBâÅ°ö13€¯”q/À˜€¿Î(Ÿ¦uº±­g„LwãºFu¿ŽV2ìžä|%“È1’B7ÑAüi%TT…Õ9 M€Ã¢Ç…=µ‹I•H(ùXp¥aùÐHýX³½úM ÒSCúVßWmÅZ ÒC!ÏËûÃSW—©˜nütŠPPÅ>áI|œ
+q^ÅÆø:ÆI9’ÚÒ AܧƒûÞÙ¦­Ëq²ݯç<™ÃÓèý»‡èúXý{,R1+ë¢ðwÿmº}iÖäÍ >öx¯XR`QC¢*$
+þãXcë*²ôu$qÇõ²O—‚ŽÕG6Ÿ…E`Lf™·Iwá„ÃŒíLž°ª“RuÂÝœ#ûI$IÄŸn¼Ó‹&ß:æ2Æ?9½DÀ° á@aÕgP\+ÃÒaœ¶SdËðµñµÂ­}ɃBæ9ãVÒðhËüsk;ñà·îû—Ü5ú{ó›ª\E9`í›í“™†<Ìà½q´t_:ZöÄ÷:©1,f¸ßÖ6ƒ}žiÑÆŸP˪±AÏ2.®Â|ÓÙw4÷::nG®.÷¡Èƒ;ܾÕnìèÃÄså·K<WíÏ&Þ79sÉLfôwÉøñH&.ɸrc‰¹ÅHæTvÑDv­ÕÓ‰ì¸ãDvŒûü@v £q ë;kĤH3v“
+Ú2Êz&¡øv…÷Ûcã0M‘ Ç"yÉX$¾ÏX³"B‡±«ÿi,‚þiÁžÔ2?MG‹À÷À
+nÌÓb|½Ž+Ç"ŽÁÚ<m,¢a;6t]S5ÖhÅùþجm ·ïâ´ƒj±Ÿ[.lÿj»†x>;×^B“pf¾ºäò¥T\ûÇ«wÖóZ]èMGš‡ÅÂÝ#‹=Yá(Ÿn¨ëúÔ‹ÎXq
+Æ‘kþwÜýo["ª\pŸP Ó\²!N?/miëÐÓy'D?ý1càí¸øÞn£¯X|bFØsLŸ3§Xwä*öá¯_ÿþ&¼½ímÀlÅt¸ˆ 11üô¢èÁ† ŸÑNæ]×Nzù²öMýÞÑÇNQy2~]{[]ü/P¦¦‰
+endstream
+endobj
+1209 0 obj <<
+/Type /Page
+/Contents 1210 0 R
+/Resources 1208 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+>> endobj
+1211 0 obj <<
+/D [1209 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1206 0 obj <<
+/D [1209 0 R /XYZ 70.866 759.174 null]
+>> endobj
+254 0 obj <<
+/D [1209 0 R /XYZ 70.866 743.933 null]
+>> endobj
+1212 0 obj <<
+/D [1209 0 R /XYZ 70.866 713.016 null]
+>> endobj
+1207 0 obj <<
+/D [1209 0 R /XYZ 70.866 507.107 null]
+>> endobj
+258 0 obj <<
+/D [1209 0 R /XYZ 70.866 491.867 null]
+>> endobj
+1213 0 obj <<
+/D [1209 0 R /XYZ 70.866 461.007 null]
+>> endobj
+1208 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1296 0 obj <<
+/Length 1848
+/Filter /FlateDecode
+>>
+stream
+xÚí[Û®ÓF}ÏWø1‘È0÷#õ¥* !P[8j
+»D"¥• ­uóŽRQ;×{;BŽƒhB0àçc†ÃÝ]Næëô(ã…ýâc°œÅ÷ÛàÃŒþÝt²F„zSB/DfƧõv`³ÕfBÄø³™;ØÙ0ÈÜÏhöù¨Ý¾vK‹6<Þ ï. —pá‹IôiBÁÖe¶ì…=OâMš>†sfeÙŒøæ«xÎ;š™l·­â¢Ðf·ììrÙÝEö¤Ë¥ìHdE¢ø„îeæ)í
+~–D‹AŠ´±=Œb(†­²šÍàÀÅl=ßÇÒUï°À(cÐzÏê4Bë¦<ì¦é•‘dºhÂÞaÌÌáWìhR³Ú,L¬?š”âÏ.&ýy·ÚÜÎW³8\‚i¤n2ä  ¢_€%)ÚYúsBÅx.;‘DË”¨
+îYJ;ãÍ®X%‚¨àJh×rÙ'Â.l )(‹*D„KÎ`ý»Ç°°£0žñ³¨¢O³¥` Aœö|ÄŦ^:š@t5N¸ºp\ËÖVàXɃ¿ÊyÉáy•±}lÿ?][Tï0º Ê$‡^.R̹•‘ñE”—þ‡‘þ‡Zü—wè&Ò “rFV@fMé(]_b'ÿ4%ý&,vºº%Y&â<›Š±C ÿÕ$ ’@- ¤N9' |ó
+PUħÛî@J"Eɹ“(x‚Œ“e‚/J€Á.™€µf~œ D}QspA”AWFzµÏeêà:;]WÎjÞTV-µäëÔã‡F¦'Gù%
+L—þ—E\ŒSm¹FXŸ¹ƒÄD!cP®,&T«•³^šÞÎr?×g=ÆVa®û©«Ê)ð)“æTUW`·Iw<‰ÔöI¿+ØÛö!´D3ÊäXµ(ó¨úqìbÅLës÷È90]‘¦±?—f}Ä&M †%Í;i×1á÷Ä.dS ç©˜Â¼®ÄÆ™!à|"ûÍ|}ÁÂLÇ3p*Õ©ô(•J>`*µ‚¤Ryi*µNÒY™´K*åC§RýJ-©ÔêÙ«¤RëÌ®Rée‚u™JÏÛýÈv‹m«{ìfóÃÝnqÃ>±4X\ƒ$ý@R%%ð”^€ü.¹TÀº†˜¾žÝœá¢á†VÞ ï ð|¤Ø¹T Z£
+ *6dŽGÒ½•tãÅv²¥8A ã¼×c3[SrÃ8ØM®LQÔFŦ‡›u—õ‡=E§4¦=ØfÏv„—ˆá~ðåc±Ë–»ba´°›Ðº»D1FZ8{D‰sÙ0Ç-(œà`#ÂøyÅŠk¿Ö‚‚AE z<r1õC,’¥ QÊûi¶1YœøQly¥¡qIÎ54å~¿Hm‰•Æy”D§g:è÷,PU²{Knªp{uÑÕe êâjåu¢º4m{8ª.vø®C»LqÌ0§neÕE\©ºèÿguDŒ¥ºÈzu±ªl€êbW³³êrY°áƒÅö6)¬ÀáÊz¼KZ¼ð*U’WÞåI™{öy™—:ƒefÎ&*^eb\üù&Øf_(Ë?1ùÛAì ¦OŠw?˜w“6»ìÇË—¿½Ê¾ý¼ ¢W¿””CjULgÁ$ò-ÁT³ôÈJ¿¼N¢8\ùáínn\€Ç÷Ù?é«bù÷Ÿ6é^çý]z@2ü/.˜
+endstream
+endobj
+1295 0 obj <<
+/Type /Page
+/Contents 1296 0 R
+/Resources 1294 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R ]
+>> endobj
+1214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 704.887 167.45 715.155]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 692.824 158.824 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7ed3535e3c97c9c2ce299addd74b4a01) >>
+>> endobj
+1216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.501 692.824 248.28 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2a987351b9605b918693a17d4dd90772) >>
+>> endobj
+1217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.957 692.824 382.424 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) >>
+>> endobj
+1218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.101 692.824 468.401 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532) >>
+>> endobj
+1219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 680.977 182.477 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beae4b8e84801f56fdb39472c45762bd051) >>
+>> endobj
+1220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.662 680.977 271.44 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) >>
+>> endobj
+1221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.624 680.977 357.677 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a4a0dce1e919688bcd27411746b7ad8) >>
+>> endobj
+1222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.354 680.977 446.137 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1) >>
+>> endobj
+1223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 669.022 154.081 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beadb87fc98ffc6440f53caa1f5d6606512) >>
+>> endobj
+1224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.758 669.022 244.541 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beabbef146a7c8d44992e9c61bec2309348) >>
+>> endobj
+1225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.725 669.022 392.582 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea28ae6227a8117b9f39b797caf3211313) >>
+>> endobj
+1226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.766 669.022 501.924 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3) >>
+>> endobj
+1227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 656.959 157.327 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beac30b06c765f4623efb929a141ff9457e) >>
+>> endobj
+1228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.989 656.959 250.271 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7d1b46242e62919d0c5af733553351c3) >>
+>> endobj
+1229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.933 656.959 387.902 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea14900e8333498e699db5038b413fa53a) >>
+>> endobj
+1230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.564 656.959 477.366 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) >>
+>> endobj
+1231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 645.111 174.999 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea3dd2ff18afe8c14f3076694e52942ee5) >>
+>> endobj
+1232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.066 645.111 282.809 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea1fd38bd33c374db6667332f011a980d9) >>
+>> endobj
+1233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.876 645.111 378.157 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a30ec9215efb0a584597aeda2c03e19) >>
+>> endobj
+1234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.635 645.111 476.134 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea317dd63053ef79e3b3cea2ce2b676b38) >>
+>> endobj
+1235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 575.385 204.4 585.967]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga721f06c8017479ccc6cb46ae0552b597) >>
+>> endobj
+1236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.885 575.385 236.794 585.967]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 562.52 199.199 573.102]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaa290fe71698081e26ec234a234d2fdcc) >>
+>> endobj
+1238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.685 562.52 231.594 573.102]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 549.655 182.755 560.237]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gada4a8fc8b0a17d3109acdeaf2c9443ea) >>
+>> endobj
+1240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.241 549.655 215.15 560.237]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 536.79 202.696 547.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga06dfab09153c455fcaa609e97846b0d5) >>
+>> endobj
+1242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.182 536.79 235.091 547.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 523.925 177.393 534.507]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gafc4e7d07089576fe946c42777ef191cc) >>
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.879 523.925 209.788 534.507]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 511.06 197.334 521.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731) >>
+>> endobj
+1246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.82 511.06 229.729 521.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 498.195 200.419 508.777]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga794e820b3c076c766cef93bb414908cc) >>
+>> endobj
+1248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.904 498.195 232.813 508.777]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 485.33 195.218 495.912]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaa7d615b194c12278b00841852b0dff2b) >>
+>> endobj
+1250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.704 485.33 227.613 495.912]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 472.465 204.408 483.047]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga4bec24e63a011cc0bfca98e79f3c0b93) >>
+>> endobj
+1252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.894 472.465 236.803 483.047]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 445.31 211.662 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 445.31 244.057 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.969 445.31 401.815 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113 420.489 216.159 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaed75fbf8e655bc644d585a48e810bcfc) >>
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.156 420.489 248.065 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.728 420.489 403.574 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 395.669 211.662 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gafb31932f7af41b5db5e7d80b21926853) >>
+>> endobj
+1260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 395.669 244.057 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.969 395.669 401.815 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113 370.849 216.159 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882) >>
+>> endobj
+1263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.156 370.849 248.065 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.728 370.849 403.574 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.451 346.029 230.56 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga9a4e5434d7a476580c6ef7ad2c776bb5) >>
+>> endobj
+1266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.008 346.029 262.917 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.65 346.029 420.496 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.31 321.209 210.701 331.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.759 321.209 243.668 331.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.899 296.388 216.276 306.971]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga9ef4cfec5c836de61180767240c7f380) >>
+>> endobj
+1271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.923 296.388 249.832 306.971]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.31 271.568 210.701 282.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d) >>
+>> endobj
+1273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.759 271.568 243.668 282.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.899 246.748 216.276 257.33]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) >>
+>> endobj
+1275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.923 246.748 249.832 257.33]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 221.928 211.662 232.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 221.928 244.057 232.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 209.063 211.662 219.645]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac9f8cad27477155b583b54848887997d) >>
+>> endobj
+1279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 209.063 244.057 219.645]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 196.198 216.647 206.78]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.133 196.198 249.042 206.78]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 183.333 216.647 193.915]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) >>
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.133 183.333 249.042 193.915]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.195 156.178 214.085 166.76]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.277 156.178 246.186 166.76]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115 131.358 220.875 141.94]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga305bbe90a798fdc8347aa809978365f5) >>
+>> endobj
+1287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.871 131.358 254.78 141.94]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.195 106.538 214.085 117.12]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) >>
+>> endobj
+1289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.277 106.538 246.186 117.12]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115 81.717 220.875 92.3]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645) >>
+>> endobj
+1291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.871 81.717 254.78 92.3]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1297 0 obj <<
+/D [1295 0 R /XYZ 70.866 789.024 null]
+>> endobj
+949 0 obj <<
+/D [1295 0 R /XYZ 70.866 771.024 null]
+>> endobj
+262 0 obj <<
+/D [1295 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1298 0 obj <<
+/D [1295 0 R /XYZ 70.866 723.517 null]
+>> endobj
+1299 0 obj <<
+/D [1295 0 R /XYZ 70.866 594.122 null]
+>> endobj
+1294 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1365 0 obj <<
+/Length 2351
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[£È~ï_”,­+u/ØǤ'mf´›NöafeÑPm£±Á1°“ίϩ lð¥Ç=J¤y¢€ªs«ïÜ
+p° pðÃÝŸîþø—˜Š¥dÁÃS 0Š¤ TL‘$ÁC|žýöðcÀGœ0XgŸ¾+³f­gsª¢ð¾L›.ê¤ÎËÂL¾{óp÷¯;sq@:šQ„"ʃts÷á7dðîÇ
+ò¡—¶vj‘,{^êUœûÍwã$nf·2öΪ¾F2¾%Ó'SÉ¿J2es»d:NþvÉt”þ­“)09‘L‡ÉT^œLÕ×H¦Ñ·dzód:’LÇÝèvÉtÊn•LÇéß6™Z/}Q2µ+Ï&SªPË/N¦²sÖZ'›3©¼…*Šç/L¢CO4µIôŒ°¾./Œ^@Zq$»’ôãŒã¾F-(
+#öÒ‘”KI¨!ôúŒÀ?vÚ§zÜ[Æ“]RH½%ÞÁ"*Éï“Œ©D18ÇU˜¼=àÉ«Þ$„ÛµI'"{ô-²Föñ’æõ#û(ß‹#û ¿ÐÛeèç
+˜adW¯Ù£ÿ“È^çÛ¿fdÇûkEv¹ì〿Qdÿß<¢ÂÀÇ\ ‚D)‚‘± Я°[ ĸÿÈ$”÷ÐU`èîuäk™v?‚»*ÝåÛî[ØšE0´Ð·&XéJ»‚§¦HÍêÊÝ&;ûœ‡MeY˜®Uw7ùf»Öæó[^,ÁLÖC¢ŒåÝiض»d¹Ifs ’—›­<µccG1’² ÙßQçýã´+íÕ9f@H ‘›žåÀ&9x+¤:´
+Ì}ÿ1O!&º³‡¤ÈF¦çñi½6à­z7ªF8êV§ »ï@›´®LtANn"…mçÀNRî¦ÿºÒ…kIW ÜÚì*Ü)L催çm“Z¯´¼u(EYþdáoŠÚ=êÊÜvèu:IWîqùä®@Ô ª|YXÄòEæ6Åþ± Û“èîµë¦Uø˜×m[]ë¥ÞyÒÏ[ma`Ðß߬ϫ܉ÁAéÅ.›h÷Ä ÄÃ"ÙøQÕ<A| ÿ¶ŠV£H1ä¬7 >ºOV‚SàP È=‘fŒŠ‚"€]A%#ÌþTc”"Þ«MJÓB€“˜šàbì&ÀA›bEZ¹'n×y‡Þ=éÌ>€óêà}e¶Å§Ì8
+«ÒQ6P06óÙŸt‚[ðx˜il!$—ÅúÙ2?Ýyͣř}›ê½ßà¡Ã¼·uhJ™s;ò'Ö}̽Û\­Sºææ±o¢8§]ÉrÙ¿
+#°¿Yæ7b«Nü’4)†”3][_á&/Z‰£*ËbøÄAnÛÌh›8ñ7†’ŸÖäSáÎ<‹!¼ê÷Ï , Rl¿ô攼·ýpÓªlÆÞžSMZÿ[Ö6©ÓÕäÙoÝwŠ?"U¸%ׯˆ$&Σ )#ÅÚEƉ÷Ybáåb7q>åÞúYm ûM6óšº2'§þ…ØcÞé¹ àëÃ)­Vîî¼@=öù¦#–Ôd·;K÷÷¼lFs‰-î|ØxrW{H^:wô¯V-µ.ún±JH뺤4ľ&¤ûšúšðM1Sa³Ñ»Ä+ •áÃŒG!¤@_'ý5Õýî4Âõ¸p=¦])ª[_]÷ÿì ºï®R«Rcp‘…ÉɧêÔ¹_8`zßÑÓÎÜ}} C¾ž…Ѿ"1Þ> €õȬè
+ËÍ1ŠMµE¡…Dd5éí“+~:ÛÛ…¨¾A ´+Ü4Ç”î¿ñxÓ.ü÷½;e]srAÙ¾÷ìÒqÆ*›bÌJMQî2¨ñü;¡“u㊡I™çžTž`y,´Ëng$–¢ë&ü|/RµÕiž¬óÿ5tvVChR”eQ'[¸;pé#zúúmwøv‹_$WKiR°¤$Ÿ²Tž²++GfÂÍwüÔÔžÀE'ë“&ÀÐv¨®ÎLÒTWUnsÜú¨Ê‚_6Ë•»ùÛ»Ÿïÿü×7÷ÿxûÆÇÂÂVáù®,6®è@æý>i Ÿ6¦—iÒ˜îÓâ)kº…^)7ýU<Ãñ9È‚žÙ…îlN†ã¸ó”Ⱦ¬†‡CRÓ0†nY´IžÑ׉:©ï‘€!±ïÌ|IXpT'å:ç}2ÀÑQ©Ž–Žý¦,Šè5?)·?QKD•äö”LHÄ"3‘”^…tar̾¡q×_Mk¾×>oR毘7"ì{L¿g²…ÝCçíÛ¾s£Ÿ¶ºx÷sw²&Q¬XäšBT<rö>[ ºïi
+_…ùãÎú}× ô›…ûÒNÏK;A‡&þ/( ”
+endstream
+endobj
+1364 0 obj <<
+/Type /Page
+/Contents 1365 0 R
+/Resources 1363 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1292 0 R 1293 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R ]
+>> endobj
+1292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.08 758.07 233.906 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.983 758.07 266.892 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.569 721.002 238.38 731.584]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga7054a4ec6bf4a65dda00a0aab75db65f) >>
+>> endobj
+1347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.946 721.002 270.855 731.584]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.08 683.934 233.906 694.517]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga21ff57e990e07b43d08dfb4214d928c8) >>
+>> endobj
+1349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.983 683.934 266.892 694.517]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.569 646.867 238.38 657.449]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac7d4d8d2d7f5d33b5c2b33d89b3ec0af) >>
+>> endobj
+1351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.946 646.867 270.855 657.449]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.285 595.061 224.913 605.643]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.195 595.061 258.104 605.643]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.358 569.948 228.97 580.53]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) >>
+>> endobj
+1355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.324 569.948 261.233 580.53]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.285 544.836 224.913 555.418]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970) >>
+>> endobj
+1357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.195 544.836 258.104 555.418]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.358 519.723 228.97 530.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga81091e3b6b3dfe02aab5e0a661f65433) >>
+>> endobj
+1359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.324 519.723 261.233 530.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.141 376.557 318.031 387.139]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.294 346.977 325.467 357.559]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.952 346.977 448.344 357.559]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1366 0 obj <<
+/D [1364 0 R /XYZ 70.866 789.024 null]
+>> endobj
+266 0 obj <<
+/D [1364 0 R /XYZ 70.866 493.147 null]
+>> endobj
+270 0 obj <<
+/D [1364 0 R /XYZ 70.866 310.23 null]
+>> endobj
+1301 0 obj <<
+/D [1364 0 R /XYZ 70.866 281.321 null]
+>> endobj
+274 0 obj <<
+/D [1364 0 R /XYZ 70.866 281.321 null]
+>> endobj
+1302 0 obj <<
+/D [1364 0 R /XYZ 88.314 200.035 null]
+>> endobj
+1303 0 obj <<
+/D [1364 0 R /XYZ 88.314 183.889 null]
+>> endobj
+1304 0 obj <<
+/D [1364 0 R /XYZ 88.314 167.743 null]
+>> endobj
+1305 0 obj <<
+/D [1364 0 R /XYZ 88.314 151.597 null]
+>> endobj
+1306 0 obj <<
+/D [1364 0 R /XYZ 88.314 135.45 null]
+>> endobj
+1307 0 obj <<
+/D [1364 0 R /XYZ 88.314 119.304 null]
+>> endobj
+1308 0 obj <<
+/D [1364 0 R /XYZ 88.314 103.158 null]
+>> endobj
+1309 0 obj <<
+/D [1364 0 R /XYZ 88.314 87.012 null]
+>> endobj
+1310 0 obj <<
+/D [1364 0 R /XYZ 88.314 70.866 null]
+>> endobj
+1363 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R /F104 749 0 R /F158 920 0 R /F173 1097 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1380 0 obj <<
+/Length 2093
+/Filter /FlateDecode
+>>
+stream
+xÚÕZMã6½÷¯ÐÑÒ ¿?r\$3@0ƒd3ìajYÝÚ–[Êlçק(’²d«eÙV»—v[¢ê=V‹¯háè9ÂÑû»=Ü}ûΰH##%‹ž"…‘–2R†"I¢‡eôy&žßS¥gÿ™K<+v/îÛ§U¼Ëòçùï?Fœ3$›õŒØ«w?<ÜýqGà"ŽHcXk¤)’ÍÝçßq´„{?F1££/õÈMÄãÖØ:út÷ï;ìÉâ6i¢Ú¬Á(#<R’ h¿l¶‹b7§x¶\TÛmº«9#ß¾ã¢=m°hø»áõ,‹*_ºŸæÌNß})vËt—ú;Ω˜Åë*ÝatYÞ{”{"á–Ël_î²GKµ*ÓžŒË,Y$s‚g«*”愤Ôk[s@˜5GgÕýŸX³öî‰é#ÂÁø(ÆC,AF]ıÊ÷Û4Éâuö×Fžcê
+$Œp†¾OØæY™¹Ò[[~ŽÔp¿c<¹OûÈÚß„YÌ™˜¡rä!)-ûQ»óˆ`¤„‘v8ºgi¡š}1`‰1ž½«òij zö}‘T›4·9—ÚnéC8x
+j¦éÖ®Þ5–‡« Ô¿/Í?Ûjï€r [!³}¿­^›Çwû®!S nd$l墧ÞMbƒÔ³å
+|+Ì  šBˆî"Àmσ ™T@öI.›òÑW35䤾¶«¡Ñ£°ô:¨û¢Ú%~{ñaoÍòƒ’³M}2T!)é Oã£$|Þâ[LøKŽÔÄÛ"Œ¡b
+ðµU¾†¶Ëë¢ìÝÔC ¯Cïô)¸ m¹Ú¥±—‹¹uÕæ1(É¡_Ìí4>`Bàc|“ dnPÃS•^XÅЭsÀ™Ìt¨µ^ÇDø*èþ
+:E›EN¢ª¤„´ñæÓÎâ>µš*ãX„„Ú»k$øÚý[§}*µ›ÔíŸ4©J×SÖ÷}‰³3½Í4Ì^‡çMO
+ÂWlP¼û25Y
+ùB/hL ´mƒé"ÙCCoSœãY‰’·{ÔN RBKÞî éè’ H3)oè /µ0ÐA2n3Lé §@õdu™í·q™ÌÕlÕ®\§1¸vFÜ¥P®aˆÐI`¡ÓGŽæƒÝ2”)ÍÈnyTW"GuËÃ=U11‰K¨†&†Ó®OÆvË^ÈÌ@!!ÅÅ}…Œ4@åëöU Ð$£7íV·Ùp‚ŒŒ …˜¦¯b„ƒQ>¢¯º¶WuP?µú*¿Ó¶;¬7õÇå„NÃ&
+p_¦:àgêÔ°®NuPõÿqã7KBã×ñÉW.TT—ÿh¡ºäÍ .Õí…j¨× é%¯"†÷%%ô"¶±:œi
+HOÿ Öû4Ow&Ÿ‡·'Yýò{y2ÝúI2ÿ‰‰ðçrì;L¿c2¼<C/Ï|øðëG÷ßOÛ4ÿøs“ÿ ••=v·!·?óÓÐa-eÍ)è/ö3œ_Èwµ†v'®ªuúªì‹%õáæës= Í{ü ~þ rµr
+endstream
+endobj
+1379 0 obj <<
+/Type /Page
+/Contents 1380 0 R
+/Resources 1378 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1375 0 R 1376 0 R ]
+>> endobj
+1375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 185.633 186.487 196.108]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 106.258 186.487 116.732]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1381 0 obj <<
+/D [1379 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1311 0 obj <<
+/D [1379 0 R /XYZ 88.314 761.061 null]
+>> endobj
+1312 0 obj <<
+/D [1379 0 R /XYZ 88.314 745.121 null]
+>> endobj
+1313 0 obj <<
+/D [1379 0 R /XYZ 88.314 729.181 null]
+>> endobj
+1314 0 obj <<
+/D [1379 0 R /XYZ 88.314 713.24 null]
+>> endobj
+1315 0 obj <<
+/D [1379 0 R /XYZ 88.314 697.3 null]
+>> endobj
+1316 0 obj <<
+/D [1379 0 R /XYZ 88.314 681.36 null]
+>> endobj
+1317 0 obj <<
+/D [1379 0 R /XYZ 88.314 665.42 null]
+>> endobj
+1318 0 obj <<
+/D [1379 0 R /XYZ 88.314 649.479 null]
+>> endobj
+1319 0 obj <<
+/D [1379 0 R /XYZ 88.314 633.539 null]
+>> endobj
+1320 0 obj <<
+/D [1379 0 R /XYZ 88.314 617.599 null]
+>> endobj
+1321 0 obj <<
+/D [1379 0 R /XYZ 88.314 601.659 null]
+>> endobj
+278 0 obj <<
+/D [1379 0 R /XYZ 70.866 558.937 null]
+>> endobj
+1326 0 obj <<
+/D [1379 0 R /XYZ 70.866 533.974 null]
+>> endobj
+282 0 obj <<
+/D [1379 0 R /XYZ 70.866 533.974 null]
+>> endobj
+1382 0 obj <<
+/D [1379 0 R /XYZ 70.866 501.368 null]
+>> endobj
+1338 0 obj <<
+/D [1379 0 R /XYZ 70.866 380.944 null]
+>> endobj
+286 0 obj <<
+/D [1379 0 R /XYZ 70.866 365.704 null]
+>> endobj
+1383 0 obj <<
+/D [1379 0 R /XYZ 70.866 334.786 null]
+>> endobj
+1340 0 obj <<
+/D [1379 0 R /XYZ 70.866 248.381 null]
+>> endobj
+290 0 obj <<
+/D [1379 0 R /XYZ 70.866 229.617 null]
+>> endobj
+1339 0 obj <<
+/D [1379 0 R /XYZ 70.866 169.005 null]
+>> endobj
+294 0 obj <<
+/D [1379 0 R /XYZ 70.866 150.242 null]
+>> endobj
+1341 0 obj <<
+/D [1379 0 R /XYZ 70.866 89.63 null]
+>> endobj
+298 0 obj <<
+/D [1379 0 R /XYZ 70.866 70.866 null]
+>> endobj
+1378 0 obj <<
+/Font << /F93 714 0 R /F173 1097 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1389 0 obj <<
+/Length 2871
+/Filter /FlateDecode
+>>
+stream
+xÚå\Ko#¹¾ûWè(+.ß=›`1ƒLÖNr˜, Ô¶#«=vÖùõ)v“rw«ßä8XìeZnQõë+‹Er0¢bö8ÃöñîÛðüËÝÍ÷?6ÓÈHÉfw3…‘–r¦ E’Ìî6³OsF¿Þý<c‚#Nü.û!Ûœ·ÉbI•žÿ˜­ÏÏÉî´:¥ÙÎ6¾ùëÝÍn´Å3r‘©5Ò”ÏÖÏ7Ÿ~ų |÷3(ÄŒž}Í[>ϸ`Hp‹±ÝÞüýW´Îµ%˜7¨+ Â^_41‹%ÁÏ[P>ÏÒ͵Z„¤1ËLe—Z` sÑ©$€2„+ ¡„
+¤(©öãËó~Ý 5ˆK”kD¯‚nÒã~uZ/Ôü©[ƒ’ÅÀÖ ÁªØÿƘîÒXá1P øFÍÊú >L5€ l¡kã(D$ñNŸnÀËïO®šh*A;Fg·ƒž°¢Q¢ì®Cs×h›­¿sªZJ¤„ò­À ®-B5Cšó&¡Z"ÁjNîNÅ ¯ë#†âK/OÅ°ºê€BB–l!HÞt¾ÿ‰—e.© `; 8’B¿ºM÷#Ûßãëø/ïnfŸò˜soÇǽóקûÂyîy
+þY‚6ÂG.õǤh–Ç©\ÌêT<·éÎ3ʵ(>eÅÓþƇ:
+ÌJ¬ªÛa(Ç(9,FÁ•@à;1Hi:ZB[”RV”@DõD)AdTSÖé*¨½aÊâ”ļ
+ž‚µD)E¢ Ú8%« üñÖ0¾Eé°0¥Õ€0¥†„)­Ew˜R)-b˜„jJÔ‰èˆS¯!ÔÆ©æ.€zìÒÑdît~n°.'à—Ià¸^<J6÷§—}Ò/bÐêíó| >6êÂ`2fÝæäv$0Ãœ\`d¨œdÎíçfcR¤Œìî€ÑH²(S`°1å;°dÆ AdI2ÂásKG(×=ÿAÕÀXWR(4ÖUmE1ÐLš€§6&dÚÑH Xým ®ûÅAŠAqÞ}iêL4RÐÖ âò¬L¹@®¯Ö6“ À¶,~ýÑN®«Ãê99%‡!óc³¬F™õo›Ö5’K$ÁÎuDƈ†é9Š ›ºAhd ªºd@ëÂÿËt*\qGŠ˜„cãÌ¡~
+hšâ5¤ðz*l%$°î£v<•Qo³óaíÒ.Рeq Ðàít‚×$€Fu‘A2‘à¾D±@"©A „H›´ÉjÂÞBä4Øf"K¨ï¶ÙçÕ¶àñôtHV›âs“.6GërÍÌÚFñ06ƒd861¤ð4L¬á@&aˆûÀv\»œ¢ÑIÐÍ„–‘o=rÁ©Ë‚Z˜«Ã5 AÒ0CD4
+£—24ºBÒ,Àš½`Á|>ÕÎàDÔf
+Ë ï³ó¯v†Y1çñsvÞu Éñª\Ñ`EP©‚¨ “á¸Ô6Å “j
+iHjñ)e—ÓP¹¬€þc¿Êáh®í¯yžpq$Ãq¨`½!Lœñ(”DŒ ŸUwp8 µ™Ã2èí)Ùûj“À™£3Ý­‰­¬»?]AêeAñ<;ìÉÂÙa|É“›¹­ú5o Bt‹èç>H†ãò|Ë 0îa=b`Õ!$,^ u«¿"i¡p3ýeÜ»'7™
+äémŒö³læF¸åÞ&äðp ¿¦§§ÞGë|͈°K· ÞÇ˸¶—‹~±\z\,™4󇙟w뢶k_ÀÈدIþµM=“â5Œ-0ëywJŸ÷UV|s<­àKŽç§âýªx½yÙ­žÓõj»})ÞûÌkãaøÙ!k¿ÛfY^þþ4°Ø\Y¢~KwE[§…k—¿Zóݳ£e-–àÇ<©Ê+Ø–—z=¸]ùúàÜ”óY5ˆ²Êº÷û×.ٿٳOÅKùÛ±Zñ¾|WÓÍ+dKê|DIùF%uÕ_R§aÍgœ‰tçö%u³èX %u‰À3.!)ÑWRW0b B8³»UÔž’ºA„ó(àš Íx¼½¤Ó€™M’ÛùS˜ÖŠºbø Šº"²¿¢ÎpEÝ&Ø=û~Á`Ša
+¤¡¤NC{íŽkÙ[P‡¡ÅTP×j\A]Èñu…»« vÂ4Š9¹0ˆ’š9Ï­ö„b”/™†ùNU‹ÖÍå\p[§àBƒ&,"aH
+Q˜è‡4—~tÔ»¤"XPEé€RHSVéÀÀšôôz:¥1EJAo>F£¦~µ+)¦Ãvåm\±'Ïè7L x9Ѓ÷ä™f+°'?VBÇž<ÓÐ5hO>ªÛ“¯ Ú“îöä+àÝ{ò1P‹=ù
+¨þïÉG0‰ß“¯ñ§Ü“`N¿'_7§äo±'¡~O~Xj{ò2Öž<S$oaOžA^h@T?÷äcèoÕpÝå·È$Ķ¼õíò‡Q¦Þ¨
+§ŒC^ÁÚ{Pa©Ò!,5é®l=jªî$¦l%±¦ûvÕ6ƒë^»sK"%,q;aõvvåÜŒV1ìÊí)pUÓ½£´ƒ{jS@fq¬
+aTÑV%&ЬHfd ³
+HbU}¦jÉ—Û°­‡d¾ö–üÊ.ï !as)GJ¢lØî5/wÕ´I{XØdqšöÕð*ìr‡Wµ?ž½ç?c/vXBXÜëPot¯ƒH“W)BN=…É(N»¡í¾2ü^‡½"£/¡¥ë^ÇDØƳnÔò½Žu¶|Ãc¼B×t€xU'L†£”sd‚¯ê¸9aþÒL÷‰¸Íœ–a§Üñ¯Ì5 BÞØ “áø„Ñ%‚o츩öP2qÛ!û{›Vu: ¸™ÐîÇ…Àó f °Ü?]]ÀlõèΩ&§j›Ì/œÓËqÂÔ0ôÏËü{õ“¯þøsqþõàÅÂ_ÓcÇe“ñæ¸v(¯ …Ép.E±ÍM#„ÝÎWê¿zTÇ…i¨ÍîTFmõ§WGh»R[õGl+¿?ƒ×¿78s¼\\VøýÒá6c{}͸ÝÓ »£$Âù V}¹ò§aù!Bli€y¯éºÙ2·ÙmÊ°ýns®ß}y wÝÝk²±Ê—"A$£ðcòq¢ŒÝÍ÷7’ö÷]“Ö4ÐFo)ƒö;ËñTp›ú¤óÛúÉè~^Q Xà]«ñ"üš¨áêNÏMÎúßåÿ{1‰¨²§ìì6€DLÛÝ/°¿œì’Ãê”l|öP<ÿe éþå­¿E™{bâþ—Â~Àô&=£ô•Ñ÷ïÿù¡øô·}²ûðñ²˜†+¦‹¢®(×-_WÓµ¢ìR'úÅ_É!ÒÏ{Ãâ¥tAçÅÿÇh¹'½<æ ’]e…
+>ó?ýÅ2ò
+endstream
+endobj
+1388 0 obj <<
+/Type /Page
+/Contents 1389 0 R
+/Resources 1387 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1377 0 R 1384 0 R 1385 0 R 1386 0 R ]
+>> endobj
+1377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 733.519 186.487 743.994]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 430.478 186.486 440.953]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 343.375 186.486 353.85]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 256.273 186.486 266.747]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1390 0 obj <<
+/D [1388 0 R /XYZ 70.866 789.024 null]
+>> endobj
+973 0 obj <<
+/D [1388 0 R /XYZ 70.866 716.891 null]
+>> endobj
+302 0 obj <<
+/D [1388 0 R /XYZ 70.866 701.65 null]
+>> endobj
+1391 0 obj <<
+/D [1388 0 R /XYZ 70.866 658.836 null]
+>> endobj
+1331 0 obj <<
+/D [1388 0 R /XYZ 70.866 500.953 null]
+>> endobj
+306 0 obj <<
+/D [1388 0 R /XYZ 70.866 485.712 null]
+>> endobj
+1332 0 obj <<
+/D [1388 0 R /XYZ 70.866 413.85 null]
+>> endobj
+310 0 obj <<
+/D [1388 0 R /XYZ 70.866 398.61 null]
+>> endobj
+1333 0 obj <<
+/D [1388 0 R /XYZ 70.866 326.747 null]
+>> endobj
+314 0 obj <<
+/D [1388 0 R /XYZ 70.866 311.507 null]
+>> endobj
+974 0 obj <<
+/D [1388 0 R /XYZ 70.866 239.645 null]
+>> endobj
+318 0 obj <<
+/D [1388 0 R /XYZ 70.866 224.404 null]
+>> endobj
+1392 0 obj <<
+/D [1388 0 R /XYZ 70.866 181.59 null]
+>> endobj
+1387 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F45 709 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1399 0 obj <<
+/Length 3216
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\YãÆ~Ÿ_AøIì´û>ü8^ÄX#Îî y°FâÌ;:¢#›Í¯OÙ¤ØR“ÉžEòDŠlÖÝÕ_›¢ÙsF³÷7º¿ùþ''2KœÖ"»Ê %VëÌ8N4ËîçÙoEìí7vò[M'ëíçòק—év±z¾ýãþçLJA”@³xB¼zóçû›Þ0¸H3V¶–X.³Ùòæ·?h6‡{?g”g³/ÅÈe&“Hì5ûtó·ê…­„+<ŃWQÙÐA;bMf´$®}Ì÷‡íjWˆuJïûŸ¤j<Í,‘Rfwp¤\”¯Wy©ôâ©<î_òmuiW¿Ü2´ÎíSo¢ýº<>ú¡s¤·ß•?ÿƒçùÖZ#Í/‹]^XôŽÃfp‹(Цã}¾‡±¶`_ž
+‚óAÕ3ŒÂ¨I),VûóùÃ0%Ï´ÒÄH×5`êºzö4(pF¸éM 2Á`WªÜ
+»J ¡e˜c^ãV…µ’B§Y­"L¤1«5dKhÖ;IA<Ë•|[õ‘˜ÿ¤„,ÇØ—1I/I)WéÑb`ŽuÇ-2n \'ë"<ÊÕ• ¨¾"j¹êˆZÙÀª$Fµ°ŠÈPöÝ>jR
+À«Š`ü„ß`Å9À¿€â•-Ÿú”çþ!ÔbûìÕùøþ&û­ÀcCjHöPÁã0« êù7‚¼â ^”9Zš¡@»/…6$‰¤¤4—  虂)"Aò¼ˆ©tIx#.dÞ ¹K£µC¿«3VæámPÃøUPP^³Ê+€ &”n Ȉ:…E¸•Dð‹t"A~ ÔG[Ä €ì)“øTHHŸ¢]ƒ³ÜÏûx)Š!Û𡲇8Ð(¢Ø‰ì]@ЊKHJ“¤%Ép„9³«–odWl€9kRØUbq`Ndo‚†vG«7Q‘ƪF ïaUæFšUQG(Ó)̪
+¦à컂gûÿÜL`”ª-åö¨PõÛTxÃÆà0é£Á@úÁ†­:ƒh‡¶µ5mk0e«Ö`hÙѽÁ†õ½Á”†íÝ”†´ÍA$Õ}’Þà0±¢½Á¦Xˆ0Uk0…IËÖ`Sô7è º7ƒ½^ËoÖ”þë–ËÉz1$v$v€R²A  ¶/…(*tÄÊ’—¼:¢
+©òTåÄmr1Ü^c“p„Ç… ¹J„¡¼«%iõu-Isͬ¯iJZÕ C¥„ÔH`AAC-N=ÑCíÆNJë5'_A<–ëBjÔ¼nºìf¸ñæ%Ÿ?ì¿nò{ň8"ôzü“œFe
+¨ ='˜
+2ɤ’†ÁºÜj̳Pö ™hˉ98û…ÖEsšýZñüÌz4„DÂlJÐtBRÜ^ÓC?ú¾jíº’ñ:°–჎ð8˜Í¡kÇ+Àa¹Õ R ­¶ºìn@I¨–S(` P¶uÊ)3îJŒ¨Á
+ uE¡%³Ì¸†%Z¨…†P¬7…Ø*
+ y"W(4¥\Û
+ Mh"®€®Ì)×'Œ,˜°Ñ‚Þ—„1¾º×.d¼ÛÃü‹˜+ Ð-_Neѳø¶7°fÀ²–‚+ƒ‰ lÈ‹%[‹Aı¿ÕYÜhm.#U®ÌÅâ¦Ð…÷ê‚Š`$°‰ 
+wê‰ö¥^ek-n8%Ìvw,ˆ®i´,ÚGCT¸º@Â/6: $a`R& S)©ø¸>§%RC«oƒK±Ôê}ï²V²GáÂ!3›¢ná®Ù‹Z uÅVfÜQë5&Ô/jsG”dÝeŽÓ
+uP0æÍÔ=l6ªÂâjÝ…yXÑi@UŽÒ׫j¯PÕ†šþˆ€5®*¾P¾°ÿ«ø>M&PU(ìŸÉ7ó* vühª=SÍ•ÎDUDy
+·J
+_SÀÒ|m
+ÞŸ»HàþáQ!0Š†“uWå×d¨ð­,¶qâQuû£ùÇ1-q0Œ<šì/ÇAS¾s€ØöVäÜŸŒBBuãbb2&p#ŒNQZ0 åÅKÆc'©5†±GB“ë‡:³#ÿ_·»±·g
+J«ãG‘(}h¡$blì´vÄaƒ Î×Ó-™±òá0¶Q6¹ÞWs¶ú -œ¾‹ò¼Rw½Å?sPàŒò~U£ðŒ”ÂÏúüÙ[õt Nƒã?ÒI|±««ÿA[å[ÿ·f¸r®ªÿ§àñS¾©vMø#­þÉ‹‰(ÿAèÊqüè¸þþKyö×M¾úå׺¯ñ[¾qUÍÜø@jE¸¨¹«ýbéCâÃâq‹›I ,¾z€øóמô¯ÏÅ€|tm!dþ ×¼Ó
+endstream
+endobj
+1398 0 obj <<
+/Type /Page
+/Contents 1399 0 R
+/Resources 1397 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1393 0 R 1394 0 R 1395 0 R 1396 0 R ]
+>> endobj
+1393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 617.053 191.705 627.528]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 529.95 191.705 540.425]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 442.848 191.705 453.322]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 355.745 186.486 366.219]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1400 0 obj <<
+/D [1398 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1335 0 obj <<
+/D [1398 0 R /XYZ 70.866 687.528 null]
+>> endobj
+322 0 obj <<
+/D [1398 0 R /XYZ 70.866 672.287 null]
+>> endobj
+1336 0 obj <<
+/D [1398 0 R /XYZ 70.866 600.425 null]
+>> endobj
+326 0 obj <<
+/D [1398 0 R /XYZ 70.866 585.184 null]
+>> endobj
+1337 0 obj <<
+/D [1398 0 R /XYZ 70.866 513.322 null]
+>> endobj
+330 0 obj <<
+/D [1398 0 R /XYZ 70.866 498.082 null]
+>> endobj
+1334 0 obj <<
+/D [1398 0 R /XYZ 70.866 426.219 null]
+>> endobj
+334 0 obj <<
+/D [1398 0 R /XYZ 70.866 410.979 null]
+>> endobj
+1367 0 obj <<
+/D [1398 0 R /XYZ 70.866 291.913 null]
+>> endobj
+338 0 obj <<
+/D [1398 0 R /XYZ 70.866 276.672 null]
+>> endobj
+1401 0 obj <<
+/D [1398 0 R /XYZ 70.866 221.903 null]
+>> endobj
+1397 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1407 0 obj <<
+/Length 2903
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\ÝsÛ¸÷_ÁGi&Fñ ð;¹fæ&™^/žö!½ñÐcs"‹:‘jêÿ¾ ¤‰_’`_úH&Á]ìv÷‡%„£ÇGnþzwó—¿Å,Ò(–’Ew_#…‘–2R1E’Dw«èË‚ñåïw¿DLpÄ ƒçê«ŸŠÕ~-o©Ò‹÷EºÎ6URåÅÆ ¾ùùîæcqDZšZ#My”>ß|ùG+¸÷K„‹uô½ùqÁà†Ç:ú|óÜ'=ó”áf¢?'é“PñÕ~VOn†_— /ŠýÎýµß¤fª¥ýó)Û¹aIó%_8yš¬Ýõmr¼¨]ñ|Ä!Ù=Ö:p—_¶Y¹$bjÝáè–($Aøz¢wæ!FTw"æÏ´xÞî«úž´”ÍÕýv›íì×d³²_Ö…!þ}Ið¢¹÷Pì7«Ò>ÛŽ++¸ #AÇ£*Üð†z™¹±VG»#îeVÙ/F§æ3¯€#ðM:·DeK43¤þkþËRhÕ* XH«„‡%Å‹£.ÙhQ,Òýnç”h®î²de¿7ïŒ-¿‰ÖŽH™>eÆ'Ýë¢Øº'–dñ”8¢yi?A!©ÓÍCóÈaJ¢alò*·Ž ÿYR±HÖûÌQ±ŽÖí¬
+fvQ^ÎE”¶ƒÖEúÎ ò£D[%€ËŸ*…a…t`#qìù¦b´O
+à¡ÉUÑÒ–ÖÔ2Ý NY=xRp¬ÉAp[ôHNÁz±µ4ÅfŨSÌÀ0ê%¶¥ï´c¥VƒD
+Õ'$£‘ˆèNñɈÅpq9g(Žù ¸'¸#¯©ÜÔ %z\ŒX#Bu1¬lMôL1nYlð¼#m:ÌÑ\ å z0´ ¶˜wý ß2' Ô[‹RÄö¡ÏYæž1²ï~ûp}©Ãý½)’ïMÍzï
+ÁØ
+5¯0¦&ð
+«+Ú
+†ÌÏÀ+BèÀ+†n2(È-y¿ÜLÄÓr[œW'£†&±Dœ!„Àq óS¯'ð$ZÑSØLQ¨-ea©âõVû|aõ aÏA+,Çf¬îõðÂ2àˆñ׳ì$^Zwbƒ¥öõ ¦åPmš=š!iOpGÜ)¸ÂåêÒ)Äh\Û½ŸybÜ2M¤É7Â+úuñŠ8¯0ñ&xEÏí¯peœ\Ñ_9—ÂH…Cþ)™Ó_ ÁÕõW<®ãý•\]Åã:Ù_ ÁØõW<ÆSý•
+P{K¯pQ_;lÀ÷Vyz%€ÄMåõ$Õ_ !¬ë¯„6x%€¬MÅ“u¯ü™ý•
+ÁÀ´VÒç¼Iž³¾’„ ƒÃÍòJ#€v»µÍQh?½  1V»&pê’ÛEì_MtLv0ãú­m²(ûiõÒ<¾Û÷R?4" ¿Ž¾Ô/!ý‹žø„©¥e=˜=\
+2¡¦çüLLó36QevéM/U">ÍÍi²?d›lg÷=lð³Ÿÿ2}ÈæâçÌýˆeî÷þ%a?aú“ͯqÐïq|üøÏOöÛß·ÙæÓ¯­g@ªPL[u˜>MÏ›8Þ´=ÛÀøÛ~SåÍŽÊÇüaWç6$wÃóû¢À/õ€lã©Tü?I
+endstream
+endobj
+1406 0 obj <<
+/Type /Page
+/Contents 1407 0 R
+/Resources 1405 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1402 0 R 1403 0 R 1404 0 R ]
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 617.585 208.14 628.059]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 518.527 208.14 529.002]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 419.469 208.14 429.944]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1408 0 obj <<
+/D [1406 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1368 0 obj <<
+/D [1406 0 R /XYZ 70.866 700.015 null]
+>> endobj
+342 0 obj <<
+/D [1406 0 R /XYZ 70.866 684.774 null]
+>> endobj
+1369 0 obj <<
+/D [1406 0 R /XYZ 70.866 600.957 null]
+>> endobj
+346 0 obj <<
+/D [1406 0 R /XYZ 70.866 585.716 null]
+>> endobj
+1370 0 obj <<
+/D [1406 0 R /XYZ 70.866 501.899 null]
+>> endobj
+350 0 obj <<
+/D [1406 0 R /XYZ 70.866 486.658 null]
+>> endobj
+1327 0 obj <<
+/D [1406 0 R /XYZ 70.866 402.841 null]
+>> endobj
+354 0 obj <<
+/D [1406 0 R /XYZ 70.866 387.601 null]
+>> endobj
+1409 0 obj <<
+/D [1406 0 R /XYZ 70.866 356.683 null]
+>> endobj
+1323 0 obj <<
+/D [1406 0 R /XYZ 70.866 248.214 null]
+>> endobj
+358 0 obj <<
+/D [1406 0 R /XYZ 70.866 232.974 null]
+>> endobj
+1410 0 obj <<
+/D [1406 0 R /XYZ 70.866 202.056 null]
+>> endobj
+1325 0 obj <<
+/D [1406 0 R /XYZ 70.866 117.522 null]
+>> endobj
+362 0 obj <<
+/D [1406 0 R /XYZ 70.866 101.694 null]
+>> endobj
+1405 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1414 0 obj <<
+/Length 2993
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\IÛȾ÷¯ æ$îJí˃q ld2ÝÈœAC–ènÁjIÑ2ç×çÕBŠ‹É"¹X›|ÛWõê{õJÆÙs†³w}¼ûËß Ë42R²ìñk¦0ÒRfÊP$Iö¸Ê>ÏÒó{ªô췹ijÝá›ÿöð²8¬·ÏóßÎ8gH(2ÝLØ»wïïþ}Gà&ÎH)Xk¤)Ï–¯wŸÇÙ
+þös†3:ûÓ=ùšq¸¶Éîþq‡ƒ±å'¢Â^ÚàÁ¼âƒ4H«LIŽ$Üwý2§|¶8,^óS~˜2;: ¢£*®ÿõKÄØ ¿$2F”~M,ƒ ,E¦¸BD™.ð4AFˆ ÂPáJ
+ÁØ¢`2Æxö‡Í÷»èp¦ iC3 PÀxè
+`Ñ rA¹š ,ò¹aª–õöÄhÌ~jqéeH™ ëa0‹G”š>±Àôj „õ¡6†ð…üš$N®jó9ƒU|P` ¸…ímˆš„a…IZ¦O“á—q Ö@±'!j’bĹîAÔFª®â5­ÃˆZûb>ÜÀ&< ŠJ‚8IF€s$°N„ ÄaJ¬6¼:ÿŸ:ùÚHíq¤›Ê;ùZ;ºƒj""N£á#d´R5¡ ×ÒÀe?-<i‚™aáÉí…pK¬»c½±ˆq5…¯6E" Kd“ªy¦•ªÝsÊf/ë£Wôõ¼]ú¹hÕ_vçÍÊÿe·Ý|÷w¿+—‹Í&†~™S<ûîï7x ·¿¶DÏ9Wã¥ùêÊw'É&%øøVFÁ3JBÑÂ^8ȃC«Gö‡Ý)_:‰öka’xy”íZªAúDÁ{Ýdò1ÃÉ.‘óFl—õf»‚pD•Ow‡
+hç»VVºßBi ¼5­_ç
+ªšâã V¿˜Ã*X=‰Z­Pu­~Ìvrm —›ÿ;²­`Ù“ >ª1RœÖ“ʶ¸6¶:ݦv C×Í›˜nC†ycºÍ5À ó/eµN“á¹W@<´ž†ns—¿Ût{¤Ú( «i}ˆÑíVÚ5ÜŒ& ‚i“d’Œ
+3–ÙAZ*¡Ú1/JÉ›ÔÖÊ)”Zj'UMi7³›F­%v²¦µ‹Ö<M„-¯3õ¯a¸F”SØ—¨“b‚´¨©„qIie‘)Ö“E
+ÓƒErÓƒEjrƒEjx:ED ¾¤Â\¡ÐA"ié€m®Å=
+Á¥Jƒ3I†‡“a‰pB]ÉÿQ ´¶%wEÎ[á©<
+gM÷/ö@âÖ÷üðÜ]mQý`­ ³Ú­¶xæÒõå¾[<·€á–7г"IÛxO“F€¦·êž>#@9ÂIµD‚ËzbƒÛ9 ÆYUnƒº…¾‰½;o;2ùpc›¨•vÀ)IDÀDIœºOO€Â8"†Öʵv¼ÇiŽã]U|ooY/œÙ >9N:IF@ÚVú"•žÙv°¤%TPL_jU×°k;ÞãôÇñ®ª¿w§}%ÔƒíkÂ$|#< ê$j.`Ô0q qáq-*µ|;ÄãôÆ!®ªýh{Bá”âò¿æÛSƒ­h‚
+Âgïì=Uƒ>ÞÅrÉÉáN«ö)ÞX¢c_±¿OrQDËýåü@®¾´mØjS_ôhêÝT:#^`zdSߺ¡bm†6^aæVWÈÛJE‚Õuv6õc“è•qz¥¸½¯o
+øÜæ¶í,5¬ܳÃßÝ?¥?m&ðצ#Ë^õ[7ø,pROá«öGdª¾¾y{_ÞHHÂýW éÎ2«›4mÎFÚâ²ws_™î$Dl+~
+'8áXF9‘ÒÛ¿ªîî™Ö`†=¿o{¡¾{Èóð’õùðœÿõÃ]öٱק'ËØžB%óäÍ“%O<Úþ5ö-ŠtÈÙRü¿2Q%yõ|¯p-ßÍ·ùaQþº« ç¿YŽ]Ü|ÈÃö 'o)&"œÆe?bú#“E5KÃOLáËÇÿüä¯þ¾Ï·Ÿ~)§”ÐÊîîYj!2¼9·jV DY‰Ð¯g¨_CUðqýåàŽ'—¿H«þ:í§+÷¾?»òm-ÒáÿÈ6æ
+endstream
+endobj
+1413 0 obj <<
+/Type /Page
+/Contents 1414 0 R
+/Resources 1412 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1411 0 R ]
+>> endobj
+1411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 67.983 189.203 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1415 0 obj <<
+/D [1413 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1416 0 obj <<
+/D [1413 0 R /XYZ 70.866 771.488 null]
+>> endobj
+1329 0 obj <<
+/D [1413 0 R /XYZ 70.866 687.328 null]
+>> endobj
+366 0 obj <<
+/D [1413 0 R /XYZ 70.866 672.088 null]
+>> endobj
+1417 0 obj <<
+/D [1413 0 R /XYZ 70.866 641.17 null]
+>> endobj
+1330 0 obj <<
+/D [1413 0 R /XYZ 70.866 545.055 null]
+>> endobj
+370 0 obj <<
+/D [1413 0 R /XYZ 70.866 529.815 null]
+>> endobj
+1418 0 obj <<
+/D [1413 0 R /XYZ 70.866 498.897 null]
+>> endobj
+1342 0 obj <<
+/D [1413 0 R /XYZ 70.866 414.737 null]
+>> endobj
+374 0 obj <<
+/D [1413 0 R /XYZ 70.866 399.497 null]
+>> endobj
+1419 0 obj <<
+/D [1413 0 R /XYZ 70.866 356.682 null]
+>> endobj
+1343 0 obj <<
+/D [1413 0 R /XYZ 70.866 142.412 null]
+>> endobj
+378 0 obj <<
+/D [1413 0 R /XYZ 70.866 123.876 null]
+>> endobj
+1412 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F170 1055 0 R /F45 709 0 R /F158 920 0 R /F97 715 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1425 0 obj <<
+/Length 2471
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[ÚH}ï_aÍH隺_æq”ÝH£D3›´v²#Dƒ»clÌf3¿~O¹lƒm°ñ´ö¥m ü]«Îwês5ž#½»ûùáîÇ¿;Yâ´ÑÃSd(±ZGÆq¢Yô°Œ>O„žþþðK$”$’ <W|û![îWñôž;y›-öë8Íçy’¥~ðÝßîþ¸cK#vi-±\F‹õÝçßi´Äo¿D”g£oÅÈu$• Jz«èÓÝ?îè±R5Ø©¡•¡oãSÊÓ¤°¢0lž‡ë*IKSbá&{
+WÿHåÇ×õf¶[|‰—d±ÙL…šÂJ¸ò†øË;¨<²„F÷‚ÃŒPÄA¸žÞ3Jéä?S.'Y²<
+ã‚8¦"Ãñ€S]aA.Ü!&Ç aˆV_ E4ëN0îˆAs:¸‚p,ì–Ž(cFѪ8"eêZŸ¦LM²mƒb͉G¯V„éºÚŸ½MîZI'ÈÖåN‚œ`¾6hu®²ðF¥œ2bU]§Åt S_Q¯ú'F¸j'K,ìY^Ž3‘Ã8®ý8ÁˆT‡qXG" b¦¶P •‡A«lñ¦t’b™©FaÞG„[E\#$
+ÌM!T«·çôân’.Ús†¡´‡Š97£8¡ î‡9`uŸ~m\d€7Å_Ò ZðÊ’ÝžPÛ{!ýB×Ñ=—xΆ§>Åqùwzû\zÿñÝ]ô¹ ¯³™çk³§©  O³Àgfž^ÌdMg¬ÌÍUÚ¬Å_D›e6›+h³$ÌØH#H¼em–@–¾š
+Œ8TÝE%±g xJƒv
+aoëXHbTÅDY$÷m‹ ˆ3ýÖ•ä¹›pŠúgÝ{Dr¾ò]ï±}múlPä´Å[¶ 5o_?ë °„"gFI®P(rÚµºÛÀ=õÕÚ¸n0ºµt7$“@˜anŒJ¡­…ì/§Ð²…6êU:϶¤Ð
+´½çܶñIá_Ç'¥èXs©¤l´!.¾\0ÊZæP7Z<¯²Çùª“A'%ld]MŸ@ eÖÖ­ËÞô|#”m‡§Ãµ¶žNZÃ$\ýª,—ño~ë;ßÎ×±ŸŒMvÍ¢EžþÚôNq LÔÝïá4\V +q¬ðV¡V(d¿CF‡žg-I´xN„ÆÒò{/k“» „lA(ª­Õ†)Á1%jZwÙ~»(ñÌ_ŠA’–%¾ÿ…4t˜9JŠæ,<ÏDÊoËñM2Êû]´´7æ˜*ìþ|^’Éãõ?Ë{DUª‡ioNõ¹òÜüË6ž/Ã}ê)Ì~ýXà:>w%¹·mç ¢ø¹[Äå$÷—ÑŒ< ð®±0‘Ô¶xŸXîcœï·i3¢ NJð,ßTáñòÝ}òT…>Ù'a÷%Û¯Êûد»ÿú?ñbŸÇÕà¸ÄpÌ‘£MDѱ?˜²>k† Ь—ù8å´
+hIô hû-ÙÅ~YLxãÀµä¢ë飸Ð]ì°}ó#é$'‹ ï„§~Œ Š·qºˆË|ŸàÇùr`tog!³4ì†ýŸy’{Ââ«Üpšê®: a„gO = Ñ_@ÛùVHÒÛ¼ £èô§#¤¨)E~‘€%¸ìfŽˆ2}âxá¾²Åë¿bÃ5#Þ‡ãØtGu܇lé¤*­úS8ŽZÃõ+s8
+O¾ùY^ºóC°ë‡ði1_­v>Ho<™“­9?
+Bhz"zžÓ9S?N¾ÈÖ›dUµ­³ N°Í–û
+\çéq’+ûù‰ýõ)S¨&Î6þcŸ`3PoQö8Ê$cCx}×K1ãf=þ5­ú×9Ð(ã;Pþˆ‚Æ“a$À¦D«wqoçyÕk­\ú—Å_}ù)Þ„^vx9e嶅‰Ÿ(ÿIèðéÉwj³2¸ïßÿóC¸ûu§~;S@‡ñ'/<ùUÈ´<g§5³áâÐ*ü¸Oód]ò}ò¸õAvè÷ŠßfÅøþ\ ˆÓÓÿ*ë«Ž
+endstream
+endobj
+1424 0 obj <<
+/Type /Page
+/Contents 1425 0 R
+/Resources 1423 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1421 0 R 1422 0 R ]
+>> endobj
+1421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 688.699 189.203 699.174]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 601.596 189.203 612.071]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1426 0 obj <<
+/D [1424 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1344 0 obj <<
+/D [1424 0 R /XYZ 70.866 759.174 null]
+>> endobj
+382 0 obj <<
+/D [1424 0 R /XYZ 70.866 743.933 null]
+>> endobj
+1345 0 obj <<
+/D [1424 0 R /XYZ 70.866 672.071 null]
+>> endobj
+386 0 obj <<
+/D [1424 0 R /XYZ 70.866 656.831 null]
+>> endobj
+1322 0 obj <<
+/D [1424 0 R /XYZ 70.866 584.968 null]
+>> endobj
+390 0 obj <<
+/D [1424 0 R /XYZ 70.866 569.728 null]
+>> endobj
+1427 0 obj <<
+/D [1424 0 R /XYZ 70.866 538.81 null]
+>> endobj
+1324 0 obj <<
+/D [1424 0 R /XYZ 70.866 403.617 null]
+>> endobj
+394 0 obj <<
+/D [1424 0 R /XYZ 70.866 388.377 null]
+>> endobj
+1428 0 obj <<
+/D [1424 0 R /XYZ 70.866 357.459 null]
+>> endobj
+1328 0 obj <<
+/D [1424 0 R /XYZ 70.866 273.3 null]
+>> endobj
+398 0 obj <<
+/D [1424 0 R /XYZ 70.866 258.059 null]
+>> endobj
+1429 0 obj <<
+/D [1424 0 R /XYZ 70.866 227.142 null]
+>> endobj
+1371 0 obj <<
+/D [1424 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1423 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1435 0 obj <<
+/Length 2603
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ks㸾ëWð(U­¼{Lm2U[ÞÊfí$‡Ù-—,Ѷj$QÑc'“_ŸÆƒ)‰„§²'QØÝø> ÑÍn¯.>Œþü8úÓ_ +42R²âñ¥Pi) e(’¤xœÇéÉUzü¯‰ÄãjûÉ{x›në×Éo?œ3$™î ¦ìÝÑ_Gÿ¸‰ r¬5Ò”³Õèão¸˜Ão?1£‹Ïnäªà„q+lY<Œþ>ÂÁXŒ¨°—ö#˜N0OØ. Â'Æ#†™ÜŒñø÷ åãj1?·P†Œîi*»ìdÌѸS
+QÌn˜¡iCã‰|Zmf «¹A’ÉJEŒ6ÐÛ—ÓUB)
+;TçÀ•S˜¤ÊŽ«éÀ• ‰$1W.À ÓÄõ9*EZu¯Vîhâ9P5¿Us Õ;Žáx5¢¸#!Zá%ð;g°×áÄbààKG„zQK¯òЂ/¬£¯.4‰/ᙞvź¸BB›Ø®.x±¼¼híAÛ¾h‰‚pJdUÃ!ÂcÛÛ<È’ÝžÀvZò¨RP'š–u_a]¬g[´¶:4uaR"nòLC‚ùºß4f‚Ço‡õ§Ô4ÀSJA¿.$AÜ<ŽQs2z.î(¬z¿à‚‚_WþéŸmx<ÝNWå¾ÜNïÒ²’2›¿&ÃJÀ—™îðB#vÖóÁ†õ)U'¡0Ú{´hËàS’„Ì)ÂÀ1“c`•r1Ö°î«–GKBjH¬õ¡:lg¥OÌÀ «õ¹R)i3ÎI°Ñl·ˆËD’ቔFAÚB ƒôUaŒL½l€ÙÎdO½i&OÕ~XVÏÓ¥grÿ¶-§s2¦æóvcθ°"¥ƒø&#ð©á0†=5ŒOpŸœ¤ÔÚþô|²¡m£ý4'WàæÁzJ«°I­-žXçjñØïYwËFÓ×¾o6õœ+¡ ‰Ä÷ oe_4ñ¡ûW"H
+V~ª‰Ú³¸º„®»ç ì˜,s°/ÚI¯9 ©Ÿ7Rè;* €ÆÄÐá¹àÊ2<dç¼} “ÿåèøèBò§'…>Ù¨ðÉiO6fzâ‘®c&ÀoÈŒ~§L@D™
+endstream
+endobj
+1434 0 obj <<
+/Type /Page
+/Contents 1435 0 R
+/Resources 1433 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1430 0 R 1431 0 R 1432 0 R ]
+>> endobj
+1430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 469.362 198.94 479.836]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 382.259 198.94 392.733]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 295.156 198.94 305.631]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1436 0 obj <<
+/D [1434 0 R /XYZ 70.866 789.024 null]
+>> endobj
+402 0 obj <<
+/D [1434 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1437 0 obj <<
+/D [1434 0 R /XYZ 70.866 733.983 null]
+>> endobj
+1372 0 obj <<
+/D [1434 0 R /XYZ 70.866 539.836 null]
+>> endobj
+406 0 obj <<
+/D [1434 0 R /XYZ 70.866 524.596 null]
+>> endobj
+1373 0 obj <<
+/D [1434 0 R /XYZ 70.866 452.733 null]
+>> endobj
+410 0 obj <<
+/D [1434 0 R /XYZ 70.866 437.493 null]
+>> endobj
+1374 0 obj <<
+/D [1434 0 R /XYZ 70.866 365.631 null]
+>> endobj
+414 0 obj <<
+/D [1434 0 R /XYZ 70.866 350.39 null]
+>> endobj
+1433 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1458 0 obj <<
+/Length 2161
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[ÛnÛF}÷Wð‘ªíÞ/},Ò(´MŒö!)Fbl¢åRTÓôë;C.)Þ$“m /Öm93{fçìá,Mƒ»€?Þ|{óík'KœÖ"¸ýJ¬ÖqœhÜn‚¡°‹?n
+„’D2×ß¾ÝmñbÉ _íÖ‡mœæQžìR|óÃíÍ_7 ÆÒ€Õ6­%–Ë`½½ùð 6ðÛO%ÂÙàK1rH%ˆ’èã!xóë õqR¾Å5£2`œ8ÆT3nÍ­WÄ-–ŒR¾ÿš®&¼ÏL…»4ù÷é° oŸ£œFû4X
+J$å¥éׇt&ömþõÛ×R50ešk‚%‡p* |ä\µ® >,•Òáß &ÿ—ÝyߣðÕêÏíãzõ‘RqØßwíàˆTÑ“6ÂdÙZ°p•·®…µ`qóbÎŒB¯2ŽÞpxgv’8[yØ­Á3kG´d0sÊ$¾!N±øeäX…Iœõa0c`x. b"¸Ì¾)kÂ\%i.xùñîa÷)zXåÉf'Gp=—8ñó8 
+ò]cµÚFû|2;d–(Å—AÌj¢%†•§›juÉgGÌh"Ç Ææ@Œ)Ù8Ħ®1\bÝ5¶Jwêü%ù³
+Æ+
+i´¼1
+‹ÙISY/8 ÿ¨DIʵç!ÿ2C(’^€ÀpÀu>?MN%m§1ÃÉ ­‰ãl6®”¢Ã•];RÌAŽp§cé…Ɇ5“µ’ÑûŸ"Gix‹q¨§6–L©Pué6Sž){f‰a“´ýe¬(.p17+²ËXq’ž¸žÝL5g ÑT?/+>Ë­–T LõÿŠOoRçÛ K¡¡^j”­û„ùŽÅ«8’‡x‘s Ÿöë,yì5-:Q§’èÊÞí}¼÷šÏu¿¢øeþûþp#‚†»¬ülbìè$é]ùMóF» (2fšÔOÐ'Èý«ŠŸ`¯ƒt®/ÓŸ±k8¨1„Å-ëÅÝêH1æ€áE 5#ÀPg:RœhW·£8¤O°©êÎU£9Ä1¼´Ä„/W,·¨±@´šÃ©´v¹¶SL1¶QŠ„4(½ÙŒØ£Liu§‚`œÔÌLs½àoݨåoü v¬–“©F2}`¸¢ÄQ>0Ž·©EI7~XEœÖ(ùf :‡Lá.‹®å; vãÚÑåÕþÕ ¨iìï}b¸¼°šúXѬ¤Úˈ_°¢ È; îÙ†m Úìþ:Ô•D PÆÙÖ0HI§jq¬˜­ä¬h'±£KÕÊm!ωÐŒ)¥tÜ©
+Úl}¡Ûv“V.w¬íu¿;dkOõAä >=¾
+·':÷ŠÃ‚Óü‚
+‰¹?<>baIæd}Z(µd †­ø¶”1•RÜòðlÆØi)»RPXh
+àSí=¯»ŽñÌNvÛ´ ˆz–À¥&ðl~B:i Õïfñª-êÛ¶×J;õ;‚‚Íâس[ÖvìO%Îj6oxŒdÓc$›%ÙìyÉæ,±RÍ‹ Œ(¡N¬ßAͦžÒlBÂͳ¸4m-‡T»æ´Í,ÚŠ“uñ¢MPA¤±Wm×Ù(wtØ ä<¢­ël„f»ÐëàNÞt:—d›_/9hnO¯Jðu6|‚ @fæQlÜWýˆ1Ší2çÃinú-Ø&ÐÏX0†]—Çé6žxxçˆv c<©ªGwÞÅù!ùt…{|¶ÄÂÖäEà®k‰×hù}\½9¾¿ßüûK«+ë«ê]…$6ú°ßç;‹e7>Ûya×e_’}\aB€ÈÚ|öß瑈Cîë’¯$¦×°ëÝöèÐÍ€¢-‡¥›V¼…Ì]
+)±xê¢d?ˆ@µ4Ó=H†
+ŽjlÕNl‹h5^D3Aݳ©hÙTÑbŒŠfÒµ6ƒŠFSRSÑSÝöUô{Ý
+ü¼ŠžÃ«WÑ-¯Oªè9{ÝrÜx¶§­RA-:>Ë„9Ç'*;Æ“e~ÁSå'º®æøDÕ~Ž®«ÀN“šÜè¤;Q<JxØV@{_^[ÂÐÕ¢S"ç$¼˜,á0…}a f2n®R×Ù(£°ˆ˜GÂ3HÒ#$ü…^µ]Óé\~z|ýä€ cäu ¾ÊF™`<¸`n Ïà~]FKøËœ§¹é{´„Ÿ@/`áÊÞùd oô,)C,Ÿòõ_špƒâ Ù@sÀ&Œ­íÑü1Nã,ª…gU2¿/Hkÿåûø±|Ã…¥LUŠò;Ê¿º:ÍæÇÓì7o~{[¾ûù1NßþRïœËË–Ï_)bÜÀ‰+l¤èº;óîæÉÖ—ù›äS†ŠžÑðkã6ákõÿ…¶þzW ˆÛÜ°bþÒÕ[ä
+endstream
+endobj
+1457 0 obj <<
+/Type /Page
+/Contents 1458 0 R
+/Resources 1456 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R ]
+>> endobj
+1438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.801 170.794 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga90f0e4bf417a06cff2a4f895daa4ff37) >>
+>> endobj
+1439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.28 704.801 203.189 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 691.742 177.895 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga84b2ebeef737395dddd8ef446c071760) >>
+>> endobj
+1441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.381 691.742 210.29 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 678.79 235.422 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5) >>
+>> endobj
+1443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.908 678.79 267.817 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 665.839 230.222 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3) >>
+>> endobj
+1445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.708 665.839 262.617 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 652.887 266.051 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) >>
+>> endobj
+1447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.537 652.887 298.446 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.943 639.936 235.35 650.518]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) >>
+>> endobj
+1449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.149 639.936 268.058 650.518]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 615.029 229.837 625.612]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) >>
+>> endobj
+1451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.323 615.029 262.232 625.612]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.016 602.078 205.795 612.66]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga6a08af1c559012315e7e5be69f7fe608) >>
+>> endobj
+1453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.666 602.078 239.575 612.66]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 577.171 199.208 587.753]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga2ead7ca8fe9886581c216ca8006ae3c9) >>
+>> endobj
+1455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.694 577.171 231.603 587.753]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1459 0 obj <<
+/D [1457 0 R /XYZ 70.866 789.024 null]
+>> endobj
+967 0 obj <<
+/D [1457 0 R /XYZ 70.866 771.024 null]
+>> endobj
+418 0 obj <<
+/D [1457 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1460 0 obj <<
+/D [1457 0 R /XYZ 70.866 723.517 null]
+>> endobj
+422 0 obj <<
+/D [1457 0 R /XYZ 70.866 562.927 null]
+>> endobj
+426 0 obj <<
+/D [1457 0 R /XYZ 70.866 503.411 null]
+>> endobj
+1461 0 obj <<
+/D [1457 0 R /XYZ 70.866 478.557 null]
+>> endobj
+430 0 obj <<
+/D [1457 0 R /XYZ 70.866 478.557 null]
+>> endobj
+1462 0 obj <<
+/D [1457 0 R /XYZ 70.866 445.95 null]
+>> endobj
+1463 0 obj <<
+/D [1457 0 R /XYZ 70.866 361.791 null]
+>> endobj
+434 0 obj <<
+/D [1457 0 R /XYZ 70.866 346.55 null]
+>> endobj
+1464 0 obj <<
+/D [1457 0 R /XYZ 70.866 315.633 null]
+>> endobj
+1465 0 obj <<
+/D [1457 0 R /XYZ 70.866 180.44 null]
+>> endobj
+438 0 obj <<
+/D [1457 0 R /XYZ 70.866 165.2 null]
+>> endobj
+1466 0 obj <<
+/D [1457 0 R /XYZ 70.866 134.282 null]
+>> endobj
+1456 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1473 0 obj <<
+/Length 2831
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Ýoã6Ï_!ôÉ–ßûx×nb‹öºÁÝC[,[ÙkKYKî6û×ßðCŠh1Š-©ÁÝ‹%[ÔÌp†œùýH'œüpõ›«oÞh–¤HKÉ’›»Da”J™(M‘$ÉÍ6ùm%^_S•®Þ=–›5Á«ûÚâUU_²¦¨Êõ7?&œ3$©ö¦Í¯Wßß\}º"ð#NH':MQJy²Ù_ýöN¶ðìÇ#¦Óä³m¹O¸
+aBùèù!cÞÙù§÷ï7õñá¡òQCäÆf0¶O6ØÁ(L#ÑMMDÇbp6ô\l‡S˜˜%RH¤¸›{0ïu7ñz(C˜‘‹%D&'¡)êDµ±wl"fs8ôu ¥<EDð@) €ˆNIZH'ä.D ÓÌ3†z!-R˜ÌKèÕi¥½]¾¡f
+l 8IýÌ˵íaò•ÍûÆ7S‰†fTÚfq&Ûv0¦™kDT?‡*H¢m¹íkßèÄAH‰´mc`èª9”‚EÆÕ
+QŽ»¢lÙ†â®vÕm¶ZÇX
+IajÐ…ŒÄH´ÆÍåÛ`*>•Z›cU-Ì$P-Rp%…+E¸M ¿˜”‘²}nF!«xŒ‹<}«ö’‚#‰¯öi-"IgÄöVBúÆ€hFd@kWM‚áÀñ1 1¢I®ºÁË\)D1ª6„#€†¨&¡Öº:Ú"dO•¨(ïL15u
+Þ¾ƒh¡°ƒ”t‚ÃðÀ4NÇE¼âY2|ˆ1G
+«™!ÆPr8C:Ö¼?ýß7ÑÒÚFzšöx¤ûÊûø²Ø¢‘P^lÁ0 Bàt^(/—1ô„—%”´PÁ:âŸÕþa—[$­‰GÒps
+t×dUº'wÁ5s—'¬k¾…€”jì°®yäk¥À+@±,¥€,- „G-Rtß:¸o”•»G'çÖ¶Év»V›…‡OVccŒéL'
+l@Z?aÂ{*Á„C“®{sm»À‰PœØSyÝT€§¡¿¦Oœ¯~6”¢Ï`<dþ\ìv7Ýí­Ï4-ê/Ê!ìíx͉[M“rÛ¶ia¹ñŒ»;ä»<«óº“²wÐþf#|
+êfúuP·8u ˆWrê¾TÂê6¢¨RçÀî%´zØhÅÝK(õ¸;PzÈ·G[0ÿß
+ëÐ/s0¡jæDóB "”> Ôܸç"€–Ç<Ç` @k xŽÁ0¦B…¦m‰6Q§(Hx‘iËtTŸLÛðzd`R‚ž†ÜyãÒ­9EÌaäb’Á¸‚4£^™eð
+J{ñ«œ~,‹Oǧ™íl´ß¶Y“µ [Î?ò‘api†䀔ÓyKd<Ë;¹©^ÚW¯7EYÔ÷†5Qç?sÛ^áŽršÇ™»;;–4™_=u\L0awIb4Oc$•~*Ö#$bèR!» ={³Yw¬oKîLìºPᬭÛÞe¾ñ±¶1м(Oz¾©‡¼~¨Ê­é%k¢+œܵîmHõ7YP°¡"ΧvTIò:ÔNžM혀«˜Áì.0BìŒ$yÖvÊ:=­ëëeu ¨ô¤®¯ÒO¤È^ŠR–ЪÁ~Í­f”¬>gE3Î&MÏÕ™tò,Ø.Ï¢“êÅýΖpÙNQ¸fí\w’qƒÝŠu`Ü* (A§KÌV€Ö*ÃÙ:B$5¼I–˜>CŠÆáô™K#å¹4òr ^"œ¼2‹d†xÍÜ«š'ÃaQ5,µWŠШ³öª&ª"Ñ@ëR,òr‡á!vœÏ ñ,>ÄX~Xh¯ŠACvÉ^ÕDíñH•_È"/·f!gî[Í“áÂJµ‰_†FR­Q{zíE9Qs4¤}ůÇ"/ïÁ „F|Ö0˜ ãYI¥À†42p`„Fö NÖî’ù½ w¤­wüM=F%‘¯C¦ÔÙdŠB'ˆJg°©K%ŒÐ)
+`Zù>ƒO-¡Õª@«Á^G;džgTP’ËxÑ© ŽeãZH‡Õ+A:ÞWïçÉp…(…_hc€¤@õ9ÕF«B õ2H7Rü/·pÁø¼â?AƳYß8Ì2ë¨ï{'À#K|ÌpOÚN¦»™î‘5>³²Ù1T³hˆµ?”Â[uWs¤dÀ®ÝÁ™¹ËÝÑ»0wû|o–=úGÖÊrMVfa’;.éÜÜWÇ÷®Ù6ÈݺŸýjW=áêÖcr«Ã6÷çAÚ—6Uyí– %‡êpÕО҆.<•ÂÛÜÀŠGó‘o{æOJ©9QSìZ¨b «Ö6l«à>[³îý²jÂ3.e¾Éë:óÝ0ùmr‘•ìïZ°„TЯ±©¯±ÑÅ fkÅM^Úß|¹6b˜´V’âìdÉç4a$
+°Ÿö©Œ‘6âL° åä©]£Ý}ɨàeJÙ4žø„A¡aZÖ8ÒÌQ‹<tˆöEÖÈ—è‹„N>èKË1#©NbýÒTeÆCŠ,0Xs)I`ŸÙÕ~n°JÁ^¨`¨œï9HE M–ì*¥i¼Äèc) Ž¾ÿ]¥Ø‚€PPö.ùïqûi@†
+ o€Áàåy™²¦å'-#øÏš‰Ž´¼ËüÒóWLD{hý[L¿e~AîÎþ»Úó˜·oÿý“»û¨×O¿tž5ëD,u©N
+endstream
+endobj
+1472 0 obj <<
+/Type /Page
+/Contents 1473 0 R
+/Resources 1471 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+>> endobj
+1474 0 obj <<
+/D [1472 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1468 0 obj <<
+/D [1472 0 R /XYZ 70.866 687.528 null]
+>> endobj
+442 0 obj <<
+/D [1472 0 R /XYZ 70.866 672.287 null]
+>> endobj
+1475 0 obj <<
+/D [1472 0 R /XYZ 70.866 641.369 null]
+>> endobj
+1470 0 obj <<
+/D [1472 0 R /XYZ 70.866 545.255 null]
+>> endobj
+446 0 obj <<
+/D [1472 0 R /XYZ 70.866 530.014 null]
+>> endobj
+1476 0 obj <<
+/D [1472 0 R /XYZ 70.866 499.096 null]
+>> endobj
+976 0 obj <<
+/D [1472 0 R /XYZ 70.866 390.628 null]
+>> endobj
+450 0 obj <<
+/D [1472 0 R /XYZ 70.866 375.387 null]
+>> endobj
+1477 0 obj <<
+/D [1472 0 R /XYZ 70.866 344.47 null]
+>> endobj
+1467 0 obj <<
+/D [1472 0 R /XYZ 70.866 247.956 null]
+>> endobj
+454 0 obj <<
+/D [1472 0 R /XYZ 70.866 232.716 null]
+>> endobj
+1478 0 obj <<
+/D [1472 0 R /XYZ 70.866 201.857 null]
+>> endobj
+1469 0 obj <<
+/D [1472 0 R /XYZ 70.866 121.987 null]
+>> endobj
+458 0 obj <<
+/D [1472 0 R /XYZ 70.866 107.48 null]
+>> endobj
+1471 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1481 0 obj <<
+/Length 2136
+/Filter /FlateDecode
+>>
+stream
+xÚå[KoÛF¾ûWðHñvßÜZ¤-P$hší! Z¢"¥TÜô×w–\J|¬èð\r±dk9¯ïÛÙ™~¿úåæê§ß 42R²àæ>Pi)e(’$¸ÙïBŽWnþ˜àˆÏ•}µß·ñêš*¾Ø¯»8-¢"Ù§vñÕ¯7WŸ¯¬Å9ÉÔiʃõîêÝlà³?Œ˜ÑÁc¹rpÁàVÇ6x{õ×vvž^ö­}qÖÌæKƒ´
+”äHÂßKC_¯(£,ÚÅEœ­ óÒžh¯Šî§^¿„AŒ=á—Dƈ“_ Ë K(®QfH¬&ÈáDTT¸@Â(bB(0R`XÂí~ÝG•p„ÐSÕrÑÔ
+¸SCÚZóý1[;†¹Êß’ô~Åp¸ÏàWî.ÐNP…¤¤ ìÃÃ!özÂsD8€‡ $gŒâd2 Û™V¡~Øîï¢ím‘lpž¦Ýs_y…lñ1‹£Mõ>]ww°k/c;Ú¨>0 B‹xÜY2º”"®è\t9R
+À¢a
+9÷ÕÕi'kÀA'ŸZÝÂ@ö ò)÷mllj
+ðR4ÁÍé(©Ð†y²+T’Ö•i!lÅn'f|!¼¦Tq‚OåMæõFq Ø"Î@î´…S×—òþÕŸò$6O–•G-AXí°Ôªm¡½0¸DX)ž8-lÓc “Ö6ѶmAżö¡z ]„ƒÌ@•J:L£]ìßBT|Cs^ÔhÁûU&"¬µý“ÕVõ<DŠ@.„ ‚0–ßiJËlÒY=ò<Õe ×`4ÖËLi¹fpŠo˜ÒNTë½(ii]jJ;ÞÀ>< ãywóód8ˆ¥BZðeæ´„rN¾}N;Q»é¾òisÚñFõ‘RÌ»‡Ÿ'á Õ¬Àd™9-¦ì¾GÎi'ÚàÇØcÂwŸÓŽw¨-ˆ`Ã"žæÇ,ŽŽ7®™Órã#ç´-ð³£iÁ÷šÓŽw ¤½¢àó¾²3O†cÃpV²E洜ٻƒcÚ‰ÊýDh(_zJ;ÞÎ>V B˜y_›'Ãáe9b]`JËm}Låˆ)í4å~¸›Êà)íèöY¨žY·Ì’Q1“™ª][dJËì÷*ˆúÆ)íDÕ^b¶4¿)íxz 2›ÆÙ¼t‚Œ‘SZ{%¢ê1ëÔ)-ûq§´7µi™í¨žµ–usœåçDätóxã3¹?Ü]o#X\½LŠ¨ú´FÙCùõüöd—˜ìr¥¦Lv®côƒtÌ¿Ôÿª
+Šçf!]ÿ“…eÆ¿_ªéDÚ ñÿ÷_,
+endstream
+endobj
+1480 0 obj <<
+/Type /Page
+/Contents 1481 0 R
+/Resources 1479 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+>> endobj
+1482 0 obj <<
+/D [1480 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1483 0 obj <<
+/D [1480 0 R /XYZ 70.866 771.488 null]
+>> endobj
+975 0 obj <<
+/D [1480 0 R /XYZ 70.866 562.572 null]
+>> endobj
+462 0 obj <<
+/D [1480 0 R /XYZ 70.866 547.331 null]
+>> endobj
+1484 0 obj <<
+/D [1480 0 R /XYZ 70.866 504.517 null]
+>> endobj
+1479 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F170 1055 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1507 0 obj <<
+/Length 1833
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKoÛF¾ëWðHÑfßÜZ¸$hší! ™ZËDeJ•è´î¯ï,¹¤IŠ’H‰  Ñär^ûÍ7³#á`ààõèçéèåµaFFJLo…‘–2P†"I‚é"ø
+DðxB•§w[;_ä×›müuLq8Om~c1OçùÕîa³Yoá‡éøËôMÀ9CB1P™ äÄÝý2ý5"p¤Ô«5Ò”ÑýèÓ,àÙ›
+‘Hi€~¤ÀƒLÀgJEíÝàÓD®ˆp/ü3ÜíÒGùC¶Š2ÎfÞo¢Y´ÞŒ7Î!ÆÙËÎé†`÷Êg,ðA¡!($¡MÒY=(
+DZ9¸=ºe-HÒˆÐþ@jBÞ Âe3Ì-v7"o
+8KîqÅ.&(ª;Ô,»c£½¤¢úrœP Y¥è™DÅÉ ¢ÂŒ ITœ<Õ±°t¡Ž+„uTX4ÉúY¨ñ (¡­Óš| ÌIí¢¬0–²ò†ºÚÚåÙfÖ®l²Lï2•Ð+Ÿ`¾ôqcöödå)Æ{Vþ¶ö:r}*ÄU©þ`•rNth‘¤F‚š¾mL#Æ„+$µèF­a>!a¥jˆ-.‘¤%‡N@„u«Á?0/€¢‚jBzñî·êÒ›{§áÁÕðþaXäwØBèñ)ïÕbí1{[ü¥Ì&ççÎw¡—Ëc§8<và#Ï»€×Ài›ò36àÿ¨6õø\mB ¤‰£)ÆQ1sc=Dü`ïʦóxeýhïÊî¢m¼q³·F;\3».IarÓ;»óƒÎÛrrW›vr7íÌîCµ8y¹~ð÷扟›¦µjcêVRQÏñ¾Ë´˜eŽ¹KT;¯×ÑÃ=œæ{~·)9†\IÙ´ª¼à‡JœF²­ÿ¯ëªáá`æp®N rYÍ“ýy3Ñ9B9N^Ðcg8šrÚ\Ε+gFíÆ0N¤µð4%f%ùE†¤‰é™Zõ?nJ s½„îQh#&™—Ly8èü­÷7<Ëѽ.àî?Wù#&%¾#H4GþCq<CîÉ]–=maºÝ¹³]fØÍÿ‹wE"YïXSe(n²„QzïZ¨ÎE—€Üx2CòžX®³‡È1[veYIœ¥Pn™·i'ÞpŠ/KÖ·O®¬l9ÿ3¢»Ãù]K=7>‘õÔ£Ï&õÓˆb2Dê9Q“Jêí«¥œÄtµ+$ ­«ýj£.ùÎaU¯íè˜ïüqåv¢CÛ.h ¨&\†eþÔ•žd
+M!²Î8?m·c‚ÃyV`OòÉu|‰¡{jµz‘ˆÿ¦4Þ.Ú§Ã%·û›â‚.æûÚ•uv®1òüärH)u?_¾ ÆOºÆOìÙð•Ì9>
+±®utKx‰Ô½üªuÁCVn¸!g%/ÚiÃÏH
+jÌ7M
+þl’‚h(Æ ‘NT%'Ú*6†æ˜¡“b†æUC×ë¥U† â0‹Vºê×éÂJL>q¬ñÀRX?Z°êZY)þ¦$"Ž‘Èô×Ðj2Dþ%)hÆœ—×—å?íÍEnêßߟJG‰¼,HÑñd[Âla¿SUäÐ4ëKª"FœhÑÐXt´nÛú ç5íó“¾âg‰Ð®(É+?ÝãîTîç]¯mb·óÔz2(üøÃYUÜüh7ùeþQx÷
+ÓWLú}s?e,6ñíÛßßåW¿nlòî}‰C‰Œb:ð‚öÌ´¹jV h·J~xHÒøÞGïm|³;ô”Ttã,ð×WkÇQÿ<.³6iFø?Ubá_
+endstream
+endobj
+1506 0 obj <<
+/Type /Page
+/Contents 1507 0 R
+/Resources 1505 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R ]
+>> endobj
+1485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.13 704.902 196.985 715.484]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.112 704.902 229.021 715.484]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.094 680.204 239.578 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) >>
+>> endobj
+1488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.668 680.204 272.577 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.215 680.204 386.56 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) >>
+>> endobj
+1490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.904 680.204 455.732 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) >>
+>> endobj
+1491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.559 680.204 525.406 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) >>
+>> endobj
+1492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.591 655.507 250.089 666.089]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab4aa3dff2b1b55b1abb002ef69c7efe7) >>
+>> endobj
+1493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.889 655.507 284.798 666.089]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.938 630.809 258.135 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaec6e88892a1b0b62287df5173a7f0336) >>
+>> endobj
+1495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.07 630.809 290.979 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.919 630.809 422.977 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) >>
+>> endobj
+1497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.971 630.809 510.512 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) >>
+>> endobj
+1498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.777 618.854 172.336 629.436]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) >>
+>> endobj
+1499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 592.419 204.176 602.894]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) >>
+>> endobj
+1500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 579.677 197.205 590.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) >>
+>> endobj
+1501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 566.934 208.659 577.409]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) >>
+>> endobj
+1502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 554.192 222.889 564.666]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) >>
+>> endobj
+1503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 541.449 215.917 551.924]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) >>
+>> endobj
+1504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 528.707 227.372 539.181]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) >>
+>> endobj
+1508 0 obj <<
+/D [1506 0 R /XYZ 70.866 789.024 null]
+>> endobj
+966 0 obj <<
+/D [1506 0 R /XYZ 70.866 771.024 null]
+>> endobj
+466 0 obj <<
+/D [1506 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1509 0 obj <<
+/D [1506 0 R /XYZ 70.866 723.517 null]
+>> endobj
+470 0 obj <<
+/D [1506 0 R /XYZ 70.866 514.659 null]
+>> endobj
+474 0 obj <<
+/D [1506 0 R /XYZ 70.866 455.34 null]
+>> endobj
+1510 0 obj <<
+/D [1506 0 R /XYZ 70.866 428.312 null]
+>> endobj
+478 0 obj <<
+/D [1506 0 R /XYZ 70.866 428.312 null]
+>> endobj
+1511 0 obj <<
+/D [1506 0 R /XYZ 70.866 368.782 null]
+>> endobj
+482 0 obj <<
+/D [1506 0 R /XYZ 70.866 353.738 null]
+>> endobj
+1512 0 obj <<
+/D [1506 0 R /XYZ 70.866 293.831 null]
+>> endobj
+486 0 obj <<
+/D [1506 0 R /XYZ 70.866 278.788 null]
+>> endobj
+1513 0 obj <<
+/D [1506 0 R /XYZ 70.866 218.88 null]
+>> endobj
+490 0 obj <<
+/D [1506 0 R /XYZ 70.866 203.837 null]
+>> endobj
+1514 0 obj <<
+/D [1506 0 R /XYZ 70.866 143.93 null]
+>> endobj
+494 0 obj <<
+/D [1506 0 R /XYZ 70.866 128.886 null]
+>> endobj
+1515 0 obj <<
+/D [1506 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1505 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1525 0 obj <<
+/Length 3631
+/Filter /FlateDecode
+>>
+stream
+xÚµ]sã¶ñÝ¿BRçŒàäuò6½´™Ë$M<íC’ñÐms*‹ªDÝõú뻋$!Y݇;R °»Øo,Ötö4£³ïnþtwóÕ‡\Ì2’k-fw3CI¦õÌäœh6»[Í~K¾øýîû™P’H&`ý¡^Öåâ–›lþm½<¼”›¦hªzƒ“oþrwóïs錵0³Œd\Ζ/7¿þNg+øöýŒ‘g³ÏvæËL*A”DëÙ/7¿¡žNJ¸ÂW|xª• ²5#4ЭƒD/n¥tÞ|Ù–«ò(æÙüÓ‚Ëy]­~£Š"ÁÀ3Ë×.0 [ýRá& 
+Óý¤½l—ã­3“Ãa0÷ÄÖмÝwb‡ h’t°ÅUSïHsM¸x¤9¼óÒOåØÆu 
+ ì7¯±P’¼ãó;'›}õßÅm6/ÇãJ£VNßW9ý]5¸'‹2(ÝW¤ŠÖÜ2Ð_)äì–K¢Uæ–ý´P8°iÊÝâVÈ|ÞÔð„±æ¹tÅn·`t^,qßVå¾éLÍK” ÷xØ,Ñ~ÈâV©|~Öëøn߸•Å‚ÍwOÖØÜ@µ÷hŸKÏ_ ¬“×’dy8Ü<Ã|;­·5š,[ËÞÆÛù¥\Ö›•GÞaöíð·wxyKêGë/nyÎH.90žJ;àn ÷(×%BÝ/€Ä.¥°Æ ¾Â®ù¶Dl*ë]ì’¢qÏuµñ.ˆ ®Ý[ý螸&8(0Î…
+Dxߤœ#Jè„3ªHÙOZ×Ëw)O
+M;ˆ
+9vo¢_ö&\âB€p ÌZðÔxCÚîà©©Vé-ä`Y˜vÜM T ù&ûfˆÁ>šÔ$Q`ž¶åµàK‚4 "¾Ž´BŠ˜g¦Oše
+ø·ÒþŸä"§DªÖ#Ÿˆ ¨1ò2å;ºo Fço±mH‰0«_M‘Þ,$-ùh³G².Ø°Pe gä!ƒ;*óÉç§òÎÎÒ‹!?o%Ÿ®¥“êA20B ÐB¥ØI2Î 3(³CŒYÈ1I¢?å¿dUUã*Úú®Fm:ïÓvÊñέªUÕñ_šæCt!;ºA.| ⃠×!ïå(vÅK‰©Äž}Væðkê´¤iF(ìòäiIC6 QþM``r¬f*Wp8)L˜íT·§j4æ<¸q¡
+èNv-Ú^ZËà4 Ihë¾>ì–>-
+Š.©¬6˜•b>ÎÕüåÈaVA¥5¿‚À‘x„á|’ˆ§Áð"Î ïÐf¢ˆ!è È8TIÉ.•8!ãëð¦eÜC»®Šµ“jó¼+‹•{N*Çåz1Qc™
+ hͦ‰{ /n©!ÆM–wêl¡„¹'pÌ Oü:üi‰ÇèŸËõ6ü±+¾DÂ^kïë»øído ¯6O‘šW…‹70–#€§OW¯ëÂ$^°ö
+¹úÄx§18¾(>@äƒÔúˆ\‡8­1^<a^Œp,SyÛòiUXϾ.ßcéQÎÙ×{w¨ú¹ÐÿG÷ƒ~½©}Õp<ç„Z\¼¥±HðNƒx]-.‡1fm€E5œ­¼C½¿ÇŠÝ}0–­ç«c2VÑ$ð·zÙ†-üf.ÒÚ茭ÕËÒ}km¿·Sp™wÜøýaW«eenü°)Ëømû)ÍO¼\‡}ÙÖ’£ƒu±ß×Ë
+&"t&矫æÙ½!%
+߃;fî¶Á}¯ –êm…,•Ït…{æ³7²7ÖŠ?pï°\ fu6VØó¼ûö\Ö~ÁsÂjGÙHÜ”­H–,"ôd†Y–E­±/òD”ÇW;V‚­Æ¬´'Mûâxgæ oõLÌíÍŒö†SÝ͈>N™ ”@Íœç=¿ È{·`2ž8?Ðå`ŒÂ¡ ©˜¦ÜvÌJ3ʃÈ<á±¹êpaU"S4ÜpHì«u“¼8rwhYŒÞÁûoËe…—Cá켓y¨p×8àn·`:ú;‚ŠŠÏMjüÙ^3Tÿ¶q“›€0¨'¾ãÀ÷ÏÏ¥ŸZ¸ã~Ì~u~Ì.¨<eÛ]¹WLRÞí¯6¬@‹ÀªÞQ¾óõ) *»']~þîföë­àâÕ8·p :‹(*äÆÂ?àŸ]l/­Wqê¢æÐï/nÐÞ“ÚUA¤XjµŸœwÁ€‚¿ðþÑ^ýÙ Âw KîÞ¯v ·³Vþí©Ü”‚/Œ…’`Y{jŒ³‚Οe‘ÅeCbq(F2ÍpêìqÂ~xì/íiµM_§HË¿_&£Á]ªêL"áýÄ¢øþ'}I G±ö’ØÇ
+Ñߪ Y›ýqhåÞZ¥BzæáòVÇð—Mhð%úRp±~Ù`vtÛ¥ p{åú>ÞVf±Ñ²€qT´£/Řý^m±HG¹þÌm.ŒÃðÛ«8ûÃuöÏÎÆu2.˜ïmW¬×>û)Ad†Ú5
+Y´þ몎dÖåõø­Úì›b³,½
+rCÔ|(yS/Ä]x‚ŸkÌtÞÑU,›CáiE’‘•¢áHa©Å§¯¬Ù¼Ñu0‰¹Í†dÇkûÃáÃi…XW{?Ï*<½¯Ý»i“o rªMQp^¹ ce•±²"¶Ðïð´ù‡ÀchÙ  4IŠD±xtˆÜÂA-¸:ðrÓ0J\ zgå^«·;yï†}\Ù
+zµäâRdڦ
+ösk7æ\ìé} * Ïå% œ~}O.ñÒÊé|P’ˆïzeà6BÆ~£Ñ[¸«_®ï@Ô¹<Ùx¿Ü¶ÛPª!Ë㽈½FAÁI¦U¯Q'rPX„‰aØM˜‘̈Ž2™_ÓMÄ1Ê.†êø’˜AQëÉfB%‰òM*/{HžÄ„ãF=TrjÞ‚N5ÉrÓ£`Y,2Ç•k2=ÒÃ(É”>«‡QžÓÃHÏèaÔÄtmOÉ pj`6oÂ8¸ƒÔ=ÖœnjwéOž‰ö?E WR7hÿˈ¤¢¯:Ç'Án»ê©–?ËR#«v«§Zï:‰oÖ” G\fo!0)ÉEÖgIºWSv½šçµLršŸË¿ž®‡IÙY«Îhu@@[cèS I æÌÖ1)s¢€¹¶u,8ñÿ{ëx¥0­ul wÉ°ûS¿Mç¤u„†.€“c×aMÞAö¾UãØÅôecKOÓz¦Áðò¥¹ýŸ‰=ŠH…­è^Dì¿ïOv]‰=-è1òëºÇ.'j,
+ôÑiÝcÓ`8éæì'7h8 ¡¬`¥ìÖq©^‡5-Ôé™}CƒòåÑþ¶ î‹©I
+ (5­[l'ë 2­<Ÿ*ëŒP–Ï2QUõŽÊû:ÌIy'÷dÓ~1¹#i„i¿
+endstream
+endobj
+1524 0 obj <<
+/Type /Page
+/Contents 1525 0 R
+/Resources 1523 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1521 0 R 1522 0 R ]
+>> endobj
+1521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.468 425.776 193.322 436.358]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.65 413.82 416.505 424.403]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1526 0 obj <<
+/D [1524 0 R /XYZ 70.866 789.024 null]
+>> endobj
+498 0 obj <<
+/D [1524 0 R /XYZ 70.866 771.024 null]
+>> endobj
+502 0 obj <<
+/D [1524 0 R /XYZ 70.866 689.695 null]
+>> endobj
+1517 0 obj <<
+/D [1524 0 R /XYZ 70.866 664.733 null]
+>> endobj
+506 0 obj <<
+/D [1524 0 R /XYZ 70.866 664.733 null]
+>> endobj
+1527 0 obj <<
+/D [1524 0 R /XYZ 70.866 620.23 null]
+>> endobj
+1519 0 obj <<
+/D [1524 0 R /XYZ 70.866 191.927 null]
+>> endobj
+510 0 obj <<
+/D [1524 0 R /XYZ 70.866 176.687 null]
+>> endobj
+1528 0 obj <<
+/D [1524 0 R /XYZ 70.866 145.769 null]
+>> endobj
+1523 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1531 0 obj <<
+/Length 1859
+/Filter /FlateDecode
+>>
+stream
+xÚÅZ[¯ÚF~çWø¤°Ùû%/U«4‘¢DMÔ>¤Ñç«`(˜œ¤¿¾³ƒ×€1I_bvýÍx¾ÙÙÙ/ÆÉ}‚“—ƒ_&ƒ§/ K42R²dò9Qi)e(’$™Ì“C©ÒÃÉÃ&Îýýz“}Q<œ©ÿa>-¦þn»[¯W¸ÇÃbôqò*áœ!¡˜t€œÙ_¿Nÿ üˆ²·«5Ò”'³åàÃGœÌaìU‚3:yt3— 
+{k/á æ•W”i•(É‘„ßGïÒb·É·Î­c¼§/¸¨<M4âœ'c¸bÊüãëU–éÆ¿}±*41´Q‡(m ˆ °Ý§.4c¢
+â©hº` ÂFÜŠ RZÔ]ؤ÷ÙÖ¯ a¶>L ]–ˆlžæÅ]æ©ÄÀ<*Ý<‚
+Ó/za„t
+¶HÞ¿ØM@
+C¾²ÍÁc©r¤U¹#ôóº¸!.7£ÿ‡¸Á/7 I¹Rˆ+~•¸ÇIð©+B‹¸aˆ‡²çÎ3ↄúr «pre\×­^(n0FnáÅpò¤¤îÂ^ÜhX¦'AÍM,3Ûj˜ºå/é 2“ã6E…8’“‹ÁωpÊb䬠¢ >—è)0Ot²xBN„6ô”;›˜DL0z¡¦¢¸lj*mÈcƌ׋Ø9}E¨¦¾rÂw½Ÿ=¯ãÑ
+endstream
+endobj
+1530 0 obj <<
+/Type /Page
+/Contents 1531 0 R
+/Resources 1529 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+>> endobj
+1532 0 obj <<
+/D [1530 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1518 0 obj <<
+/D [1530 0 R /XYZ 70.866 699.483 null]
+>> endobj
+514 0 obj <<
+/D [1530 0 R /XYZ 70.866 684.242 null]
+>> endobj
+1533 0 obj <<
+/D [1530 0 R /XYZ 70.866 641.428 null]
+>> endobj
+1520 0 obj <<
+/D [1530 0 R /XYZ 70.866 508.252 null]
+>> endobj
+518 0 obj <<
+/D [1530 0 R /XYZ 70.866 493.011 null]
+>> endobj
+1534 0 obj <<
+/D [1530 0 R /XYZ 70.866 450.139 null]
+>> endobj
+1529 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1551 0 obj <<
+/Length 2049
+/Filter /FlateDecode
+>>
+stream
+xÚÅY[oÛÆ~÷¯ œ‡CÑvy' ô
+A ¢Iõ‡°îm‘È' µGm©&‡ +økV<-ùÏMqV¢ƒÈz2jØñÔ´³Ø$¾ÿOxjöŸÛë«Ë«0
+¯n¾§ÃØÄ¢ú«<K²öñ~y¦ÇF÷#÷MÝàz\]Ô.zu=¿üuîE¼a\mï럫¼LðñgˆÐˆöHà¢"œEá¢v]³8ª¶žâ
+àC À*“ÇË«¬.ý[ îÏVý+ÖòuqXŽK„ äÄwƒŽ#†ÎÑ‹JIîŠAóIüÞÞî0±ˆP[±$C°Y: Lw‚7RA"•o#t¿%ì@0—‡œèýÅõÝì0|
+E¼>¬³d-_³<WŽâU¬èU׬©Ê"Ås×ÑrfÎoÑÿÙÿ¹rF!¾‚°–oŒô=™¯8ñ9
+L€ýuz½ò]UƒR]<N,`öéâ8ħÎ3èZV_NT; V—Äz¢–Õ©u¾1!çwáí]ˆ• IJp¹ kp8l €<P«¾dÜ(·mµmEžšò쉄rÎå7;çød {µP0rbîð¾ì€­Íºñló]_Ì–3€;Œ¾‹.׺÷«ä²,*
+Š³o—QÇ'sUrÑ—}]Ÿ$wWM_‘‰Z½ùŠK¼#êzì5kã,çâM¾š¤Îªî2ï€)øÑ&®#s~¸ûA€#q#Þ›mU•2©`K Wu‰ÍÅ훣X/yö©ÜTÝ{=1¨Ž öõgxÇ}<µ,AbpÆåÿT¢åaÍ
+± ?ÕlYžÊ¥HOíZ ÝÐGª\ªQŠ'+bq"bbŽ ¸ÐS®²m8‚aà춒QDE Ë æÀPÖ…E¼\Û:íþtÒ!9`„Âõ´‚ZnWëA·{Õ¦ŽwûÄ›:ìñ†oÛÅ–ahÅ–l9/„ôûqžW¬¸¹í´\¡ÿ„U<8BS‹û1OMÉÓY1±LýïL\÷¢€²ï'6ÞÍdà9×<‹·™*ˆYÒÛ6ºåÜ À€ôètèÎSrŽ¢P£¢cÎ1cºÀZ‚ÄtÅï¤ÇÀgÅÈ;B˜â’À³|e”“
+x•Bt•ÄJ{‹RbõeÑ»y(æÌßÏ¿/®ÂpönÍ>ìI¿«•²{i€Ô@°²œ¸´„˜cúÕ½0¢E|D­ÀÒž9§3C:xpÇ'Ò\úòÐz³[b«ë÷اRV×_ǘðçÅìâõò ÒCÒX°ÓÙoÑàý8>ƒÓ@·LNGíqF¥öA+Ûy 2펬‰hBƒßq#¦?`ÐaS׊ϕˆH v„«m+Ðg1žfúeÿ…%d³/à\3ànÐq·Y—(ù¡ͱØ)È Þˆ^árCxžc0âÀ)IÛUJºÆj-¡eOVŠ¹Xtuw<rÝsY5nÙ9§ÕÏËB¼ú¹Ñ5~F1^aÌŠ•ÊÊo{Ó`—¨z'òou^<PPrý‡„Ý÷/¢ãß|Έê?NŽØ®Í‹78ûÂá F$rß²‚Õ`ÔJeß'8@6.™Ì¦%ŸÔpÄ›aýHÍ-W|Ý#z*õ^_¿¿¥GUôÐðÈwöãÂ`¤¶CLËTc㻫Ük¨•øöÂ:©¿Òý¬þåñìóŠ`Å.Äÿõ­…
+endstream
+endobj
+1550 0 obj <<
+/Type /Page
+/Contents 1551 0 R
+/Resources 1549 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R ]
+>> endobj
+1535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 704.765 172.516 715.347]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e) >>
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 632.2 246.236 642.782]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.498 617.624 311.673 627.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.106 617.624 390.481 627.251]
+/Subtype /Link
+/A << /S /GoTo /D (kmp__stats_8h_source) >>
+>> endobj
+1539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 604.448 274.65 615.03]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.178 589.872 354.926 599.499]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.587 576.696 209.795 587.278]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.654 536.989 221.322 547.571]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) >>
+>> endobj
+1543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.55 497.282 236.214 507.864]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) >>
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.85 457.575 262.377 468.157]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.98 430.947 434.25 440.67]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.604 417.867 256.154 428.45]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 378.16 223.829 388.742]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) >>
+>> endobj
+1548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 350.516 216.863 360.99]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) >>
+>> endobj
+1552 0 obj <<
+/D [1550 0 R /XYZ 70.866 789.024 null]
+>> endobj
+969 0 obj <<
+/D [1550 0 R /XYZ 70.866 771.024 null]
+>> endobj
+522 0 obj <<
+/D [1550 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1553 0 obj <<
+/D [1550 0 R /XYZ 70.866 723.426 null]
+>> endobj
+1554 0 obj <<
+/D [1550 0 R /XYZ 70.866 650.952 null]
+>> endobj
+526 0 obj <<
+/D [1550 0 R /XYZ 70.866 321.656 null]
+>> endobj
+1555 0 obj <<
+/D [1550 0 R /XYZ 500.469 267.124 null]
+>> endobj
+530 0 obj <<
+/D [1550 0 R /XYZ 70.866 249.956 null]
+>> endobj
+1549 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F170 1055 0 R /F11 908 0 R /F97 715 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1574 0 obj <<
+/Length 2422
+/Filter /FlateDecode
+>>
+stream
+xÚÍZmsÚ:þž_á™~X˜ ºz·Ý;Cšå–´]Bº³Ó{‡qC˜‚ɵÍMûï÷èÅŽ††@Ë~ÁB–ÏstttôèHØ›zØ»:{3:ûímȼ
+l
+=»;Ö‹ˆB{ªC¡0%YéDÿlò3
+NÊä‚VR\,Wi‘dÊõê 7{Å Gap”^qâ#é¯yΫWjf(¿o꣈úáó;6Kã,Q!Nõ©šLe”ûí-¯OÐ $Œ˜°Ñ-4"ú¥»0äI<S.™˜ŠØXÍüQ8eÐ!µƒQa]!‡LämÊ[QÒ”xBZ¹+pýé
+…p¼ÉÇõ€L xõ¤OQè7Ê®-<@–Œâ:N£–
+‘Ôu\Bë KÑ6Z¥“²5°;ÊJÓljU^yŸuXOÇo? {Ý‹í,mtnÛ|$`¹iAaîIúlz
+6@÷.7 ÃD«›dI+'f$l}Q ù»)Ç %‰2舙™UEY¬ÊàSÛ"¶ïÁ(ѼބVB*Ã@»¯ch6oå¶+’h‘7 \DyQקìŸñrÝ?Û2K&«8©IQöqÞÓ¥2Ó£ú‰fÅZÓ(8ßä0€óJž]~DµaÍ ¤p¨6m¢Úþ.ªÍ=ûAÃé¶ÅžÁ´ipTÅ´Ià ~ên{[‰6C<àÑs©é,¦¦3ÖÓ¹‰<¬‰õnö «p}{V &G± õî`×6ÍÜ;dˆÁ7ÇÀ %‚9˜[¨·¢À¾ Ç@U˜sê neÞ,„¶áQ`9Pi:°Ç'Þ£Ù¤Qÿº™tÃ÷þQFM’Ò½gpîàù}‚ñ[“›hñ`BÝß:66­Ÿü[o¯¤›]èN&ùÚB쮵lªPÖ<"—¿ˆŽ .ÏCˆÔa2 ç!GŒÐãÐqú(ƒçÐñâ6Òq¶æû“ñ Ò­çhE¹ŸC²÷ïØƸ**²â‡É°¾(5ƒC}¢…A
+ÜR›§Ù½ÝA^Þì uìÉr¥ÙkI2ð‰¼"йŽe;ƒP4™¬E¥5®ßLïgnwœ½;¼9è ‡íñ_ cëîLå»ÕR¶ïî¬b|GØUƒe÷eŒ Ç0ñje»zc©´Ú0½xOÆù~{²gs`/HÒsÌ0çc$é•(Å͵J6 6
+¶ÑnÀMõܛŧBŸ|‡ wøËþÍhØs;êýMw8ì÷†§€¾öGý‹îàüg ’­°7ý÷Wƒ“Øúº 3í$¦õº×7§
+ªML]ªÛ ð/Ñ}Òõ¶Oú»Rz`ðD•ÙA żX$Q¾273À8,`š&ܦó$·Ÿ:‰]3³o`· BZÈÕú¬kïgñ}Sïâ(WÖdu‰8ùG[€2PC-ß¼ŠÌÃÜ 0åšzæĪÃYØiS÷‹YzMà'úfedu›c.«Ú¤uoËU237ÿ«l´ýÖÈ7¦´iÌç<“´&mõ²e
+4žbù( ûÜx./jKD}•­¬¥ŠaòÛ)r•¤IfAåHmõ?mžn+o’S Ì>1¦DØkL_3YæâéS.~0øtmou?$©Éƒ®±Qâ ä×/åbf[Õµˆ2Z¶‚WÏÊ£¦ÁìK¦ÒÊDßQ5å]U¾\ê ó}ª$麅ÿ;äñ
+endstream
+endobj
+1573 0 obj <<
+/Type /Page
+/Contents 1574 0 R
+/Resources 1572 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R ]
+>> endobj
+1566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.815 668.388 425.345 682.336]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.304 638.408 236.42 648.99]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) >>
+>> endobj
+1568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.304 451.089 235.424 461.564]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) >>
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.74 352.483 272.709 361.394]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) >>
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.368 181.291 294.897 191.765]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.266 181.291 382.461 191.765]
+/Subtype /Link
+/A << /S /GoTo /D (kmp__stats_8h_source) >>
+>> endobj
+1575 0 obj <<
+/D [1573 0 R /XYZ 70.866 789.024 null]
+>> endobj
+534 0 obj <<
+/D [1573 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1561 0 obj <<
+/D [1573 0 R /XYZ 70.866 753.828 null]
+>> endobj
+538 0 obj <<
+/D [1573 0 R /XYZ 70.866 753.828 null]
+>> endobj
+1576 0 obj <<
+/D [1573 0 R /XYZ 70.866 693.693 null]
+>> endobj
+1560 0 obj <<
+/D [1573 0 R /XYZ 70.866 592.2 null]
+>> endobj
+542 0 obj <<
+/D [1573 0 R /XYZ 70.866 576.96 null]
+>> endobj
+1577 0 obj <<
+/D [1573 0 R /XYZ 70.866 518.621 null]
+>> endobj
+1556 0 obj <<
+/D [1573 0 R /XYZ 70.866 434.461 null]
+>> endobj
+546 0 obj <<
+/D [1573 0 R /XYZ 70.866 419.221 null]
+>> endobj
+1578 0 obj <<
+/D [1573 0 R /XYZ 70.866 166.123 null]
+>> endobj
+1572 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F175 1131 0 R /F11 908 0 R /F45 709 0 R /F170 1055 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1584 0 obj <<
+/Length 2671
+/Filter /FlateDecode
+>>
+stream
+xÚ½]SÛHò_¡Û{8»*ž›O}äjHp»Xl’»ÊnQ ‘}–¼ÿ~»§gd 8ÀÙ'fZÝ==ý=âÁUÀƒ;ïÆ;ÿü¨ fIª`|DœÅaD‰d¡ÆÓàkO‡ýßÆ?Êh¦…‚ïììÑ|ºšeýŒâÞÞ|²ºÉŠ*­òyÀ;ÃñÎwÀò@Ô8ã˜ÅR“›¯¿ñ`
+k?œ©$n-äM bF#Y0Úùe‡7ùÔ¦ƒÏP0îÌWE•-ûÅ“Þu¶Ìh”ST×YA£ÅªªòâÊ­Óã磓ów‡Çï>|öi<<ý•^¤7<…ƒ¬jDÏ</ÜÜ]_òÞ|E/·}a€®ŸÓÓòGütg³ŽÏ‹,›ÖŸ¢ìy0‚%ÆÐF§ó¾æ= Z÷vžÂü’ž–;;H/ë,+éÝ
+ 0¼[!àTî`®²$(8ì5sЗËùÇìÁnÒɲÉć¾ö­4°Vµqþ`¡½8Q4oháWÎUzU6fÒåŠû‡z× ¥Ûõœ—En•Œ ¡Y^¸-G¼- üÂké·›Åy :jé±kf•3@J† d‚놖J‚¢iâÀ08Å4HsÞûû”8Bü2FÚÔ}aPAã L@ùEø˜òƒÅ%µæ[o3#À8"C¨BKŽO‡»ï÷;'œ…`2Û œ(¦”iþûäðàýÁx“²”!|mƒ²” MÔ¦<>8"ãDÒðEÔô J0p"ÞI¡âYÃõ
+c ê…gå>l‘Ò>Œý‡Öæ­~8tÏM¤2,â8Lè«Ïý g¶ÊÞ¶¾]ãx|,‰Tì´K*–šYk%Çà‰Êl™§3d»§³b?‰¨$Š‰µg¿p;l‘HNSGÁ ‚¹.šUº¬Î³bºe²èA²à„fÙ_Kó&-!R|wšSœ…ž{ƒ9ß~Ÿ OÏkM¶¼½ùŽ{>ÜÛm+¶DÈ"z"¡Cµ;uá
+v†ò¢ØT@¡Â×iÓkP8e’1“ܼR™ð"6TîL—WhÒ˨vkR‹êšäUÃéŒSª2óét5¿—x?¡“+ȳw¸yº€‚óWjÈóqt;ÈŽŒ.LðÐuYSä ùK_IqµHwÚÔ>˜i QN ¦˜Püçø ê%zGg£1Žxo÷óæÆûCšõÒÚñž[Eæõ³O{4­°ÔŽFòØ Gã»Ý=Zï|ú8êªÚ¾’ìïžœ ?ýÍa‰£uܶÃ:¤*Õ!UqÔÅŒ&çEVÒèÖ—º1ÖàÜhÚ‘‘«?c,6ç¨ëh6m §õ¼*³Ù%Mã~SOÀb¥J°¸YW¢ Tÿ²šQшP€ÖØQ‹®¼¬òI‰„ŠQÃÁÌ!kÉÉÅä5›2–H¦´CѳeL¥ôºÈ–tà锦/Ò2¯ý1‚n¡™¤Ìîhs]`„÷*BV—Õ|AS@ùË[czï€#ŒßO>ǨßWeåè5øÎx`z»Ítèˆs!ù#ŠoèÝÕî} Í8P >¦¬¨ _M*[ƒã꜋9ÈÝ}AÝ€õN`™D“WÿÂ×Ðâ„Å;‚ŸÎ‹TMF.løÂ!my8Mm¬¯±/ zc¿[ù¯!h×óÕlZ£{XàlÝç¤~í˜îký´‘€º™‹9òòG_šžãªÙWÐÿ_A$ñwi,˜VcÁ¼ ± tÂx’l£±  кJöøl|rÖQÛ‹X3#ÅV¨Æ“B4©ŽÆ»ãу•= Œ¥/®Áì}Àhw
+ˆÑV¨B¦'yÔ>F°UT³•HE ƒbc+ôcɤқjÔÑbjWá
+}B·[LÇVb彄s²Z.× ª‰è7ëÐ{¯¼„¨ZÃcœ{amþ¢:ZBÆÈ_Yù¼•>ºY nèU¥˜q+Àe˜ã–C;÷±¼S/})ôB.:K¡..Ü5ÁªêŠ£mÕ³*­ÕÍiÚC¦íkçoaó<Eø8Š§uâù8¼Œ’0n§ð˜pjÈ©0¯,ih/}pàóH;‰–©í%³ð¨è­ó‹þ ŠxoX`¢öG¾œTš"´= Ôé¿ü¡Œ¸n&À5øsÀ¹³ŽNÆïÎmþpp8üñ2Ÿe6iÛì
+­@cêP *ˆ¨7I)£Å윷lgr˜..1}âHØDgœ¢ÐܵsŠÔ„Ké•/J'q:/Êʺ;\ÄìŒ>ŸfË%ÍmH
+ž')¥ KtÔ!ªñ>Ôˆ{Ú¸km|ôcµ\euO·ÔX¥q8ï<!HËÍÔËíÍÁ.‰›""{ 'Vöø$ÙãÈV„ðô²W ·a£…Д^ËE6ÉQØu'‚Ãú²_
+ënÞë¬s*‚¼åAñºt dÈ×ï¬p2ÖØC‹£vÅØ4¨Å»×.Y™à ËW¬
+Ú´i®ËÅA"äCU—„üÅsYhbÐLCº¶…MHH~D¤ÚÛ謻¤–,–[9/ aɈ{çE&±I6µÚÎVÃ)Ù&Z^OÖ>"ÁëxíjŸ¸Á³·íÙfʉ˜Ý?@e»3Ïßl^NÖkî&s–.Jߧb›d¥gôþ¿(§kÒÅÉeý;L€üfùªFT$^çY½«ŒØS™pû÷,ÿûXÈd„ÿÈ\ÚXÁƒÊ…¡‹Îñ—¢õïD~o_ú
+ª 79Ê4Ê=¹0®õ¦ÞrùV…^²r-ÙÃÃÏG4:^d¹½{7ç"2éug†+ÕdÛ@‰^糧 A¹o7æK›J¸®hL]Ô;ÿã›íŸÞ]Y€¬è8úOH_œ
+endstream
+endobj
+1583 0 obj <<
+/Type /Page
+/Contents 1584 0 R
+/Resources 1582 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1580 0 R ]
+>> endobj
+1580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.013 580.035 342.956 590.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1585 0 obj <<
+/D [1583 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1558 0 obj <<
+/D [1583 0 R /XYZ 70.866 729.594 null]
+>> endobj
+550 0 obj <<
+/D [1583 0 R /XYZ 70.866 714.354 null]
+>> endobj
+1586 0 obj <<
+/D [1583 0 R /XYZ 70.866 564.868 null]
+>> endobj
+1564 0 obj <<
+/D [1583 0 R /XYZ 70.866 379.877 null]
+>> endobj
+554 0 obj <<
+/D [1583 0 R /XYZ 70.866 364.637 null]
+>> endobj
+1587 0 obj <<
+/D [1583 0 R /XYZ 70.866 306.19 null]
+>> endobj
+1565 0 obj <<
+/D [1583 0 R /XYZ 70.866 177.71 null]
+>> endobj
+558 0 obj <<
+/D [1583 0 R /XYZ 70.866 163.054 null]
+>> endobj
+1562 0 obj <<
+/D [1583 0 R /XYZ 70.866 85.523 null]
+>> endobj
+562 0 obj <<
+/D [1583 0 R /XYZ 70.866 70.866 null]
+>> endobj
+1582 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F175 1131 0 R /F158 920 0 R /F97 715 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1600 0 obj <<
+/Length 2398
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝsÛ6÷_ÁkJÍT,¾öáf’ÔIÓ:c×Ö]:“v<´H[K¤*Ñ—ëßÅ%‚"eÉâ´wO„ˆå~aw±?@("<x~¼?CzÏ7“³oßÅ4PQ, &÷D‘"1‰&ið9äÆ£1‘*¼©’*_Wùtm¿OªY¶Ê‹ûó~5"(,ö×åǫɛјbFqÈäè·Ég瓳ßÏ0ˆFÞˆR*R„ÓÅÙçßPÂÜ 'UðÅP.ÆiÄ…ñ<¸9ûù yÆ#0bV¡¦ähŒBá«4û!Rd -EáO¯v5ľW–û4oÅõ:Â`”-n&¯¯'R%8ÇCHU8â(ö¥žÿruñáí‡Áƒ@0Á2RÔ—;ùðñüúWÄ‘ HÞø€jE%°4¤E²È•Ï–F”ÖDÀ
+wØ e$1;Ö†…¢˜‘!œ h$(ñ½ð¸Xv(ÇQr
+(k*̪óÿ.çù4¯&ù"[é
+¬ [V‰¶iFv½-~ûŽ5‹Óü#Œ KcûéW7Æ
+Ú>åKí¥U°- –AVQî‹ý{A)‡”cCãq$iWuR:Gt®;}”ê0'ÒmžâpPZ.÷ÂQè¡ „‡òŽO†£[Vócá(åÄÁQµ£åòP Ê_ˆüXSþ!?僕§ôç§ñ°È)rè›@Ä;ú½Pn'öóÄþßc¿ã=³ÀBîÇÏ×ñ<zÁƒÂ‚0Ù‚¿^¯Âö²•õaʘcús Çô›Ä¾h¢HÎpøi–nÆàIMjŸ4LKèNa+ƒŽ˜
+dqBÍÃRÞeÕ <²-73‡žúyËÆî«’#ì…æÅuë±°VôÇ)¾À£ú3²AÄÎ-3MMžÀР_#ÝÍ7­ý¼¶/t Ôòþ3"Àiþd­"¬ÉÄpr“¬bs~(L"vd'Ôä0[g•ûüõ}Uµ?iE÷"p{Îb ahÎ!à©V–üX´(õ…¡5DÏ8Ê>…ZŽ±š ÞA«wŽÒĹX€t5ð!É‹—CZÅþH›i7\mÌûHµÎöcã—CÛ¸ Ú’=Щ€ÂˆN¾o-+Dé¶Sí¶a"`2±/us.Õ‰1´¶‡`L}¿ÓĘƋw#iN’ôz Ð= lýÇZ×¼%Щâ¢ØÆÕ¾º—†’0Ä ºSª/&‰(J5nET½¬-µ©2€ë½™¾G$ƒèÍôE"ñõîüÐ>ðB(€>Š„/´ñ+@@h±JS´ÄöA~†x$B.C
+è©/wxÌ¿Áú½›G@ïé+O,}‹¶ðô³]©û‰×ªõagÈeý¯JcíÓÎ!«µXÍ
+Iyv8ŒúØî>°Óh ¼&ÃN–íctwÊ/wNùÿÇÁ¶.ÌŸvÍz ¶¡æ™3ÇAÀ6‘ÖZ¶_(·l{bO‚Ö;ÚG·`åã Û]WX%N £Yô"eÂä<;)SqÄå ¾=uðEXÕO ka”ØV›áúEûcåî_5…šn•MËUêØÍ2Ÿ/ ÂÄ^~v"/Z”žû‰éÛõÜÓº÷΂ƒ‡i¶®l;ÿ4­JYÂU-^ßÊJ±¥÷®“Ž¿pb ÍŠ<+ª؉Oy5«¿5HÏó!‘
+‘[¤÷Y‘­’ªÖ¶vΧuýò&[Ú¡î‰0·#L¿Cä;*Ü¿Mt¹ryqñïîoÇˬ°àô‘ O,©²à ú½˜mQ¢Žª©57“£¹~*¶{ûE~·2YÛx¸éíïKs¬úǃ!€lnyøO Ô€
+endstream
+endobj
+1599 0 obj <<
+/Type /Page
+/Contents 1600 0 R
+/Resources 1598 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1581 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1604 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R ]
+>> endobj
+1581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [296.571 721.456 431.093 732.038]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.46 680.984 473.403 694.931]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.42 651.003 406.942 661.585]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.558 639.048 196.162 649.63]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.46 482.001 473.403 495.949]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.892 452.128 245.838 462.603]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 452.128 525.406 462.603]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 440.173 207.378 450.647]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.237 440.173 399.184 450.647]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.408 428.218 402.355 438.692]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 416.155 231.793 426.737]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.823 241.19 200.427 251.665]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1601 0 obj <<
+/D [1599 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1602 0 obj <<
+/D [1599 0 R /XYZ 70.866 706.289 null]
+>> endobj
+1563 0 obj <<
+/D [1599 0 R /XYZ 70.866 592.84 null]
+>> endobj
+566 0 obj <<
+/D [1599 0 R /XYZ 70.866 577.6 null]
+>> endobj
+1603 0 obj <<
+/D [1599 0 R /XYZ 70.866 507.306 null]
+>> endobj
+1559 0 obj <<
+/D [1599 0 R /XYZ 70.866 381.902 null]
+>> endobj
+570 0 obj <<
+/D [1599 0 R /XYZ 70.866 366.662 null]
+>> endobj
+1605 0 obj <<
+/D [1599 0 R /XYZ 70.866 296.368 null]
+>> endobj
+1598 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F175 1131 0 R /F11 908 0 R /F45 709 0 R /F170 1055 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1613 0 obj <<
+/Length 2988
+/Filter /FlateDecode
+>>
+stream
+xÚ½\Ys7~ׯ˜G²j‰
+(ù÷ÛÀ`È9Àcû%¦ÈawýõþÀÐäsB“o~¸¿ùîµå‰!V)žÜ?$š£T¢-Å’ûEòa$Ìø÷ûŸ.Œã÷ü»?¯ûe:ž€6£Ûõ|ÿ”®v³]¶^¹‡o^ÝßüqÃðYš°ƒLcˆ‘ÌŸn>üN“~öSB ·&yñO>%Br"…Ó±LÞÝüvCƒ”€t/Ý?ÁjFE€XÆdÙnÅ- —„ÁxÂ(¥£û±’£ÙöK¶úŒ&ƒm÷ÏÏë ~ªF;oq\UÐC‰–V9=4™pJ…\Åëýjî½­Êÿ~÷ZÈÒÞ2E´Ñ ê'VË\ÀG
+ de ð«üãƒ.£—Ä?c,»ÊXŠÆ²VÆ–XEÙù=n§˜f¹ Fêc) ,ƒÛt7Ë–é"¯·év¾Éž¥ëDòÆÄ‚(ir÷é6T¿‡C ð•EP¬,þÝ¡ðàs|pç
+íç;¿™äšuÑ° SZPQÝŠ*Ô¨ÆçjÛÉ曆®nVv†¥Œâ·¥ ˜ôä¹ÒŽý„=ÔõC/GÔ­%Šâ./«r>nªØŠ€i­¶,Ë Ã%>/TÕp—®"vc—Bí J1km«J×Q¹®‹›A”ZF¤Ûö²Rî¦V *·¯¿V –U[ªës"Z†D+–L¬²U­>UcŒÑC‘©uÏ ‰Ä½)¬Tkjù3•i¦C¦Ë)GanÖ¥Ó\0§€ ;.¸¢ŒS x¦« v5¹š–[WÃ=áü®£ésE$=pÌêÚžJõÅ0KرQÍ‹ol –Èó °œP#Y€•òšàX•) ’œ°éň¨%§"E¼åiÒ”Úk¬]/ó.<
+{Á§—Œ
+Eî¾’D­p-¸©yìT$:…–£Ø;[Uü•iSWu¬eC`‰SáOù5oEt¢[0„N þV{YçÀ´)(w¹C~cÚÔ߶àýæßýdäó
+endstream
+endobj
+1612 0 obj <<
+/Type /Page
+/Contents 1613 0 R
+/Resources 1611 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1607 0 R 1608 0 R 1609 0 R 1610 0 R ]
+>> endobj
+1607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.601 704.693 262.19 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__TASKING_ga8b2a95073f7a4a81055899ee6a93ecee) >>
+>> endobj
+1608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.646 704.693 295.555 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.38 667.831 214.404 678.413]
+/Subtype /Link
+/A << /S /GoTo /D (group__TASKING_gab53273918f995639450c4dcbed02df88) >>
+>> endobj
+1610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.781 667.831 246.69 678.413]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1614 0 obj <<
+/D [1612 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1615 0 obj <<
+/D [1612 0 R /XYZ 70.866 771.024 null]
+>> endobj
+574 0 obj <<
+/D [1612 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1616 0 obj <<
+/D [1612 0 R /XYZ 70.866 723.517 null]
+>> endobj
+578 0 obj <<
+/D [1612 0 R /XYZ 70.866 641.74 null]
+>> endobj
+582 0 obj <<
+/D [1612 0 R /XYZ 70.866 582.116 null]
+>> endobj
+1617 0 obj <<
+/D [1612 0 R /XYZ 70.866 557.261 null]
+>> endobj
+586 0 obj <<
+/D [1612 0 R /XYZ 70.866 557.261 null]
+>> endobj
+1618 0 obj <<
+/D [1612 0 R /XYZ 70.866 512.758 null]
+>> endobj
+1619 0 obj <<
+/D [1612 0 R /XYZ 70.866 303.842 null]
+>> endobj
+590 0 obj <<
+/D [1612 0 R /XYZ 70.866 288.602 null]
+>> endobj
+1620 0 obj <<
+/D [1612 0 R /XYZ 70.866 245.787 null]
+>> endobj
+1611 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1623 0 obj <<
+/Length 481
+/Filter /FlateDecode
+>>
+stream
+xÚ•RËNÜ0Ýç+¼t¤b®ß1˪ ú ´ Ê"“ñÌXÊx¦I¦-_;v  nºòõ}Ÿs. -tU¼¯‹óKÃQEŒRÕ¤TJ!mQÕkô€%¡¼<cºÂ÷ƒí“õË nURÀMŽÍÉ·£;ø¡|¬¯‘œHÍÃŒ©ƒ0Ñ[|¬‹Ÿ N@ôyPU‘Š ÔG@ë»F@¸©Ðï)s„ ÍDlÖ¡»âKyy LF3>
+(#†R¹£(×h(
+endstream
+endobj
+1622 0 obj <<
+/Type /Page
+/Contents 1623 0 R
+/Resources 1621 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+>> endobj
+1624 0 obj <<
+/D [1622 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1625 0 obj <<
+/D [1622 0 R /XYZ 70.866 771.024 null]
+>> endobj
+594 0 obj <<
+/D [1622 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1621 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1628 0 obj <<
+/Length 305
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËnÂ0¼û+ö˜ꮽ~…cÕ ú j”ƒHBQPËß׉T©§žöáñìÌ.ÂÆì.g·ã™1ù,rg ØLr# /`‘hL—ùH+®…]wVçƒOo¤uÉ}½9—¾jV;®Z0{ÈÙ'‹ ®œÎq'lJ¶X"ámÈ)sðÕ!KPš¸VíŒÌÙ Ã^çÿpj(ÿÃ886\Z£ZÇRNN$7±37ö•?­_DÁTßSÒÉÐœûcL$õ…Ž™ Ê™XmS‰I}ŠÅtú6‹ÙÓÑW³çv[A ‚2K®$¬æ6Sâ?©Gý–­¹$9`^ÏU³/ûkL÷ëÓ*Œ˜\bgÝ*¸ ·J “ïË®øx®a¿ál?^Í{ž
+endstream
+endobj
+1627 0 obj <<
+/Type /Page
+/Contents 1628 0 R
+/Resources 1626 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+>> endobj
+1629 0 obj <<
+/D [1627 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1626 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1636 0 obj <<
+/Length 1506
+/Filter /FlateDecode
+>>
+stream
+xÚ½W[oÛ6~÷¯°¨Y^$R*¶í²+6 kó–-Ó–PYÒtiš¿CÊ–m%K»`O¤Ès¿|<¢Á. Á›WÂc»µË›Å«ëÅó׌FKHœJ\oEI"e J¤âÁõ&¸ ÉuÓ›v¹â< åòÓõÛ3A(…s"h­¬â˜DÉ( Ô]‡ìWu6ìMÕ뾨«Qó–z39I‹½)H T [®¥4Ì ÓêvÉâ0[ª0·›;§æ×ëÅß Œ4`‹$‰$bÉH*dí7Ÿh°Ë· S¤IpëH÷ ‰°+ƒ‹?'!;ÚÂb౦„B‹Šjku×èõ$
+ÁIDSúÔœð7PrÒ¹5U/¸¿µénw>ïïWI¸×_7KAÃ/K‡¦œ7ÄÖdZ@žDëÆ4}þ„šž¿NÕ´$IãtLÙGJÅ=æœX‘ÈÕ¸c«–Œ†ÃþÝ2¦P¦'A:µü_j!a„³ô´>ؾ÷uð¿–E7*†$duÕõ¸uÑ\²ð±£—| Fw®Æý=®M¼åÓÐ
+ `ÆYø›§GO@À­u£n;Ï–éî`8¤ë67ÒCëír)‡µªq=Æèæ"cyªÜ áuýl8Úz3d¦Ã–׸ô­1¸ë†¢×kÛØ¥?9Ê?ÒŸá™g.öE©=©­·ææ\Éйn†]Q¡oi瑃KŠÈ,®ŒÍ4Å4Ó#ZéÂgwŒ+ÜØäÛÕ²Œ.âëï…`a“œ<¼è%lq[˜ýz¯t¯ïøxA.ñ,™(: $Ø?3ÕAˆReQÚxúÐTljL/‡ºÉÛÂaþ•(Jú!Ó?»Î©GŽ™
+r¦Ø“¹ìÄ qÆ|ñâr®8{ j0M¦ñé1bn‚˜¦áøuYÞá6x:N/ŽÎÊôîعp /¬•±°±J-Õ½qì Ë¿ÐÚÞ¶3]é8¡¸Z;¤¶§»Óe[rZZ‡Ù<Qa£­‡v·më=îÚºö·®Áa¨t w¥Ñ0¢Öož6«[x®šº²Ï”6S7ì·ëSX¡WFð¬3Ž³£zŠ½GõÐúÒS;м½u5óU”îp¸rŠHÑ7 RÄŸ ‘NpBÀà,Ä'FHg=žÜ"è÷~^ÅêЬ`ʉ²7ß‹i
+è=…EœrBYtjÑ4üDËXøÅøŸSœ_/þa\e‡ßŠœ¥?=7œ*’Hu
+áoêÚ>‚B’¸–ÑCi“#$V±.gŸ`qÖ(@ìÊG¸Î›ÎãîNW^Å ·²°´›…q¯>¼àQî
+ä¯ßN"–vRŠî|nê°/XøÊä3vx+ŠÞÛZ|¶4ooþ´åü¯ßÃÀ·ô›`ß×ogÿ]PŸÿ
+endstream
+endobj
+1635 0 obj <<
+/Type /Page
+/Contents 1636 0 R
+/Resources 1634 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1630 0 R 1631 0 R 1632 0 R 1633 0 R ]
+>> endobj
+1630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.615 473.709 187.965 483.978]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba) >>
+>> endobj
+1631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.615 461.323 168.041 471.592]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) >>
+>> endobj
+1632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.089 448.937 204.871 459.206]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_a12fc455d853883d91e3a19567aaac3fe) >>
+>> endobj
+1633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.957 392.203 238.39 402.471]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_a4122e10b5d763f2ca3f13076f836ddfe) >>
+>> endobj
+1637 0 obj <<
+/D [1635 0 R /XYZ 70.866 789.024 null]
+>> endobj
+598 0 obj <<
+/D [1635 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1035 0 obj <<
+/D [1635 0 R /XYZ 70.866 584.926 null]
+>> endobj
+602 0 obj <<
+/D [1635 0 R /XYZ 70.866 584.926 null]
+>> endobj
+1638 0 obj <<
+/D [1635 0 R /XYZ 70.866 491.861 null]
+>> endobj
+1639 0 obj <<
+/D [1635 0 R /XYZ 70.866 410.263 null]
+>> endobj
+606 0 obj <<
+/D [1635 0 R /XYZ 70.866 378.491 null]
+>> endobj
+610 0 obj <<
+/D [1635 0 R /XYZ 70.866 266.018 null]
+>> endobj
+1640 0 obj <<
+/D [1635 0 R /XYZ 70.866 241.055 null]
+>> endobj
+614 0 obj <<
+/D [1635 0 R /XYZ 70.866 241.055 null]
+>> endobj
+1641 0 obj <<
+/D [1635 0 R /XYZ 70.866 155.549 null]
+>> endobj
+618 0 obj <<
+/D [1635 0 R /XYZ 70.866 140.841 null]
+>> endobj
+1642 0 obj <<
+/D [1635 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1634 0 obj <<
+/Font << /F104 749 0 R /F158 920 0 R /F11 908 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1651 0 obj <<
+/Length 1870
+/Filter /FlateDecode
+>>
+stream
+xÚÅXÝ“Û4Ï_ápf8$[–||Ì
+>}=û.ˆF”Œ`£~YfM3½àR…×u¾[ëªÍZSW–wòÕlòÛ„+ X/R)¢xäëÉ«×4(à·ïJ¢Toç:ˆEDDl·(ƒ“Ÿ&Õ¤„ ;µ*Íh|BkP‘vj'„N¢é£”†¿®7Çš1&I*c·Ž'ç4o¤½Z'`œ’$‰ÇìLÕF|ÄU¸2z›m§L„ùT†+;¹?¡”$‘ì1RÀŸ°±B¦ZØë««uvw£§Œ…¿ë²qzt¾¾|‹ð^JâT<&*EA?ìÖ·z – Ö ?–zÑð÷)¡•éh¦òc»Ò~bÝ0e4̶ùʲßà Éô"Šâp67†÷“gåÃ2³­î„nuV4—y 0ë#KÿÂgs¹Éò)û5["wê6µÿÁþÓ­[“„î沪‹¡<ûÙ\^¸ àFR!¼ÖY¾2UÏ,%HÌ­1q¾´škO-êêÃÖOßXæ¬Â¯¶öãR#¡ÙèÜüB)Ï‘Ý´+?«jH±¼ÌÚ·Öm…/WºBY+Ü­ÓÊ}˜Æµ]ã¹mv·Mî
+ôüQ R‚D1´‡Æ
+”Ø­ŸMy ©ÒƒäyŒd1‰e2ÆÈ›a<A²Š4¤vP¡
+ÌœÐiK€L„àOc$L³Ž,öÈá)Qª—óÙÃ> DŠÔ-¹H‰9ø O3ôô3è ß0¹·øó¶Ýš[{j»VÔ@¸?>0쟯/__]¶K,3Ï› €‡œ]~SÎÙIU\œG$ŽÅ£ìl«f¶lþ‹­NÉÿ·£µs¾Ê?òºjÚ݉
+endstream
+endobj
+1650 0 obj <<
+/Type /Page
+/Contents 1651 0 R
+/Resources 1649 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R ]
+>> endobj
+1644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 418.052 185.517 428.32]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a8a098c07080704af1d89e401a1b4d10f) >>
+>> endobj
+1645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 404.5 159.559 415.082]
+/Subtype /Link
+/A << /S /GoTo /D (structident_afa1ec17df36c4bf1e36e97eab63953b9) >>
+>> endobj
+1646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 391.162 185.517 401.431]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a91db2d18476e0a527ba20e04ca2c3e74) >>
+>> endobj
+1647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 377.718 185.517 387.986]
+/Subtype /Link
+/A << /S /GoTo /D (structident_ae29e80f6fc150f73c1790c8796bcfd9f) >>
+>> endobj
+1648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 364.273 179.989 374.541]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a8c2ccc106967f36d7191d59d4d5a65dc) >>
+>> endobj
+1652 0 obj <<
+/D [1650 0 R /XYZ 70.866 789.024 null]
+>> endobj
+622 0 obj <<
+/D [1650 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1643 0 obj <<
+/D [1650 0 R /XYZ 70.866 692.748 null]
+>> endobj
+626 0 obj <<
+/D [1650 0 R /XYZ 70.866 676.347 null]
+>> endobj
+972 0 obj <<
+/D [1650 0 R /XYZ 70.866 540.121 null]
+>> endobj
+630 0 obj <<
+/D [1650 0 R /XYZ 70.866 531.011 null]
+>> endobj
+1653 0 obj <<
+/D [1650 0 R /XYZ 70.866 437.262 null]
+>> endobj
+634 0 obj <<
+/D [1650 0 R /XYZ 70.866 348.867 null]
+>> endobj
+638 0 obj <<
+/D [1650 0 R /XYZ 70.866 270.334 null]
+>> endobj
+1654 0 obj <<
+/D [1650 0 R /XYZ 70.866 245.139 null]
+>> endobj
+642 0 obj <<
+/D [1650 0 R /XYZ 70.866 245.139 null]
+>> endobj
+1655 0 obj <<
+/D [1650 0 R /XYZ 70.866 165.687 null]
+>> endobj
+646 0 obj <<
+/D [1650 0 R /XYZ 70.866 149.285 null]
+>> endobj
+1649 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1667 0 obj <<
+/Length 1449
+/Filter /FlateDecode
+>>
+stream
+xÚÕXmoÛ6þî_!`_dtfùNѬÍR h±­5¶i`È2ã•¥L–“æßï(R²d+Îk A Y"O÷òÜÝsÄÁ*ÀÁ»Ñ›Ùèõ©fA„´”,˜]
+£HÊ@iŠ$ fËà,”ˆ'TEá×õÕü Æ,®Æç³÷¯O 4l¦ÒnQäzßÏnEO<Áˆ2Ö¬øc@F„¸jür—Þ¬x›Å›So6–84ë«,®Œ{òÉ\XUMiòÄ="*Ì
+ý6ý3" ¤µ:ŠPDy¬Ggç8X»÷FLGÁM½rpÁàVÁ,ø<ús„»žäbÀ“’ ܸòÄ€ÿhžVi‘;ãÊ]³4÷JSLÜMqá®vKfÚŒ™Ñ%²FÀ—'D! *×â­½¬±wév,Ƈ·î~>‡ýɼø:¯Šy½´(Ç"¯_°ÀðOj±#ð°°vÙË;°‹`Þ1 >ÊÒ´……?€Á×
+¸—€’Zqp‰FŠˆcþØéÖ¹µSû'#)(A¤S!Í+FÁD…éÒäÕtZšÓ¢ðüp¨† jñ"úh°?}}ˆó¢‡Æ.&„
+ĉ&”£H¹ëtué‘°ð¡Þnš¦+§MÄ8«Ò";Îr¯6ÆïŠÅz=¦"4CyÁ?…àS°Â‚ ûØK Å
+"˜<)Ï×Æ㤧 }4Nò«4q–Ý>)>ع…‡ß¸.Jó
+M‹p†$»áuo)Àùi“à>Â`ÑÎFe‹ )/Ëb¸\y0:ÐDÁ
+oë4"¾RŸ˜*×-]¬NÌ&)Ó«ºÝ÷•W²]8D-¾j*Üaý`½ºSƒ».ï%ë•<^{$ íШ"åø‰‰â®"7*`NÌTDCÙϦß;QDð»ÚT§Â2„ÉQÁèTìÈI†Dšë½}K±ˆ÷XÚ›¸áXÉÇgiI«×¾U¸§‡™è ýTfÆ££ÄlÞhÑ4,ûó·ïd>Ìêóa¨ùÜè±¼'gGý±6ýŽäŠ$ÀµÕœ+\-¹ˆòNDépme´f€{µuÿxa*»TãèyÓ (}é,8ê½éte')S9CmO4¡aÓ ÷Éè(IkÒYš[äž6ˆ¡#?¡PDsà×™Â$f[Ùî  ˜ýLöÎN»é¡I®¿-±o~6W~ôaíÁŸŸš ›b:e²ÉyºËùþúèî~˜}Üü¬ ÷ÙÒ¥PN>ˆ„Ö:@ÚOÛ¼J×>©?¤‹2¶óQ{nØ=C<)l úv»ª˜~‚‡ÿk¨3o
+endstream
+endobj
+1666 0 obj <<
+/Type /Page
+/Contents 1667 0 R
+/Resources 1665 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R ]
+>> endobj
+1659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.895 338.293 155.35 348.876]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_af653ec27d16d63dab994e52ac6713aed) >>
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 324.893 133.154 335.475]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 324.893 170.041 335.475]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_a36961b6d49f84ab81365a9389613ea34) >>
+>> endobj
+1662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.895 267.238 154.346 275.722]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_a5d89de3bda829ab9be324007d915aa3b) >>
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 251.945 133.154 262.528]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 251.945 138.139 262.528]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_aebad8727c9520d1bb2b2219c94cb3c62) >>
+>> endobj
+1668 0 obj <<
+/D [1666 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1656 0 obj <<
+/D [1666 0 R /XYZ 70.866 741.549 null]
+>> endobj
+650 0 obj <<
+/D [1666 0 R /XYZ 70.866 725.253 null]
+>> endobj
+1657 0 obj <<
+/D [1666 0 R /XYZ 70.866 665.134 null]
+>> endobj
+654 0 obj <<
+/D [1666 0 R /XYZ 70.866 648.838 null]
+>> endobj
+1658 0 obj <<
+/D [1666 0 R /XYZ 70.866 588.719 null]
+>> endobj
+658 0 obj <<
+/D [1666 0 R /XYZ 70.866 572.423 null]
+>> endobj
+1036 0 obj <<
+/D [1666 0 R /XYZ 70.866 460.218 null]
+>> endobj
+662 0 obj <<
+/D [1666 0 R /XYZ 70.866 451.168 null]
+>> endobj
+1669 0 obj <<
+/D [1666 0 R /XYZ 70.866 357.566 null]
+>> endobj
+1670 0 obj <<
+/D [1666 0 R /XYZ 70.866 284.618 null]
+>> endobj
+666 0 obj <<
+/D [1666 0 R /XYZ 70.866 236.645 null]
+>> endobj
+1671 0 obj <<
+/D [1666 0 R /XYZ 70.866 184.963 null]
+>> endobj
+670 0 obj <<
+/D [1666 0 R /XYZ 70.866 133.476 null]
+>> endobj
+1672 0 obj <<
+/D [1666 0 R /XYZ 70.866 108.302 null]
+>> endobj
+674 0 obj <<
+/D [1666 0 R /XYZ 70.866 108.302 null]
+>> endobj
+1665 0 obj <<
+/Font << /F93 714 0 R /F11 908 0 R /F45 709 0 R /F104 749 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1684 0 obj <<
+/Length 1649
+/Filter /FlateDecode
+>>
+stream
+xÚíYßsÛD~Ï_¡‡Ú¾Þï“2ÀL!m‡Ò@iLyH;ž8dÉXç†ð׳§»“%EqíÐR˜áI’}ÚÛûv¿owm-"=?úvzôøY¢%R²hz)Œb)#•P$I4Gç#ÁÇï¦/"& Šƒ÷êO¿ËÓªO¨ŠG'ål³Ô…IMVvíÑÓéÑïG–âˆ4&ãÅ”G³åÑù;Íá»F,‰£›zå2â‚!Áíytvôóön6WD…½µï<Á¼å½LÀÅHIŽ$|^ûùZ›Íº¨j·úö?ã¢õ6‰ç<šÀSæ^7×ÚrUf…Ñk÷`J ߦ3³Iswÿc–.jÌ&DÉ8šÐIFÉ +h‘Õh¹·»æYáí å®åUc“æþ»ß–«‹›1£43kë´Òö]#wÊJ}ˆp4a ,œ31DOÆxdôr•§F[;ð"‰xÊZ‚$`ë£ÿ•_Ñ1­â$¬0·+]¤Kë3G¯,r‚¨¢aý7nE'¤bÔ°Ž -.¬mg×b±ýb`“#Ç;Ýîì2ä¨D Oz~î8ùññb<‰GÚÜ¥#l©HÆ I¾“ À¿¤!Â@ª3" ¥œ)›µ 蘷Xàñ$!ÔÞﳈ[§b1R¬Aæ<+lö½äÉäv ƒ+ôïñŽöxçØäB~—RlJIòq)E0R"‘SñDm9Å<£Nõò²V ˆÉIjRwG1÷ƒ6¢%±lm„È¿†¼;xõ~Lù¨÷²¼k@kå$EX‘6ãTAA–È°æƒÀ’¶£ÿ
+mÌÕ¡¬%PÍE—µ_LÇÄ&èJÑ¥Á k3Ï"¯%¡›mþ§ЭN¼çZ¬j£: ‘˜w*týQ @Ùè`ÎÙvrxú‡….´“]
+ƒ¹’{uée\<hæAXòÌËZ ÈåÝÞ)“Ô…”Øq8þˆ«QQþU²:ip©Õ«ï‡4Ùi j@ØN¨ç¥®ŠGþŒ…dSÅý åe¢hÊ ”}€ÿÓU”Ìtû‰rcVóÙÃRÝ lUö§e¨žš@  Ý—6ôâžð<²£W—Ý¥Ç F¤&(¶)·Q a°ZÝ H£ïV5]|œxzVmŠ´!V9>sØ ÇÀ‹Ò<T¾ j‰:,hlÿ ‘<D¾:¢U”ÅÄ WkÞ­öÇ=ù4tÉËÅÓÚo]˜ƒ¥ÌNzì|OØ¡Bó˜xØQŸ¥>ÏC?GYvÜ\kÿí§¯.ΦO¦gOß<ýqzÖ YèÁmϳ_õq=Qh|š ý3½ü€ÿ%Âß& ãÊžú*¢æqÀ Òÿ:÷Ü
+endstream
+endobj
+1683 0 obj <<
+/Type /Page
+/Contents 1684 0 R
+/Resources 1682 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R ]
+>> endobj
+1677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 202.575 207.394 212.844]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) >>
+>> endobj
+1678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 174.785 186.467 183.555]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_ab89a43b134178cd06845c54ca4d80e7f) >>
+>> endobj
+1679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 143.997 203.279 154.265]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_ac738a2dc47b270830803e943744f0d43) >>
+>> endobj
+1680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 116.207 203.413 124.976]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a0d979459c9a441d94294d52e0745399e) >>
+>> endobj
+1681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 85.311 190.735 95.687]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a37c8b539cc437be55817a1f122698106) >>
+>> endobj
+1685 0 obj <<
+/D [1683 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1674 0 obj <<
+/D [1683 0 R /XYZ 70.866 716.062 null]
+>> endobj
+678 0 obj <<
+/D [1683 0 R /XYZ 70.866 699.181 null]
+>> endobj
+682 0 obj <<
+/D [1683 0 R /XYZ 70.866 595.58 null]
+>> endobj
+1675 0 obj <<
+/D [1683 0 R /XYZ 70.866 570.289 null]
+>> endobj
+686 0 obj <<
+/D [1683 0 R /XYZ 70.866 570.289 null]
+>> endobj
+1676 0 obj <<
+/D [1683 0 R /XYZ 70.866 490.633 null]
+>> endobj
+690 0 obj <<
+/D [1683 0 R /XYZ 70.866 473.753 null]
+>> endobj
+1037 0 obj <<
+/D [1683 0 R /XYZ 70.866 343.418 null]
+>> endobj
+694 0 obj <<
+/D [1683 0 R /XYZ 70.866 334.032 null]
+>> endobj
+1686 0 obj <<
+/D [1683 0 R /XYZ 70.866 221.897 null]
+>> endobj
+1579 0 obj <<
+/D [1683 0 R /XYZ 70.866 221.897 null]
+>> endobj
+1687 0 obj <<
+/D [1683 0 R /XYZ 70.866 191.108 null]
+>> endobj
+1688 0 obj <<
+/D [1683 0 R /XYZ 70.866 161.819 null]
+>> endobj
+1689 0 obj <<
+/D [1683 0 R /XYZ 70.866 132.53 null]
+>> endobj
+1690 0 obj <<
+/D [1683 0 R /XYZ 70.866 104.847 null]
+>> endobj
+1682 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F11 908 0 R /F158 920 0 R /F97 715 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1693 0 obj <<
+/Length 552
+/Filter /FlateDecode
+>>
+stream
+xÚ•SMs›0½ó+t„ƒ•Õ7øغÉL&™¶ ÓìŒc3Åà7ÿ¾’6öôÒÓ®¤åí{o@ô|Jƒ»û„¡'R2”îK‰TB±$(Ý¢e(1fTÅa×g}·^°,"ÝZŸ«¬ë†ôEïì›nuëè-}Dœ3,3ýšö6ø’¿b.‘sÓ8Æ1å(?Ë7@[óöˆ
+endstream
+endobj
+1692 0 obj <<
+/Type /Page
+/Contents 1693 0 R
+/Resources 1691 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+>> endobj
+1694 0 obj <<
+/D [1692 0 R /XYZ 70.866 789.024 null]
+>> endobj
+698 0 obj <<
+/D [1692 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1691 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1746 0 obj <<
+/Length 787
+/Filter /FlateDecode
+>>
+stream
+xÚÍ™]o›0†ïó+| ÒBŒ ŶVÝÕ´"í¢,ÜÄ 1Ìúñëg‘Ú&HËÇMmQðyô¾ÇpŽÁ@p9ƒoG ¹Å´.g_ýÙâ†@È à߃%´ˆçéÁµ&ÀÁq%CnÚ¶ñhþñ­¹¸p\@¬•çábæ.´ öÊg)Ýî’€Þ±45ç¶kž«
+«DÀ¢ZÐßÙô­ÛCÒ±êQ¹nÚv{ C‘%Lz !’‚:µÆŽÈ”"~ŠLÐ<’OÉ=!…:•OŸ#:ú’(é=‘H_¶O”OÉ7É‹˜ce“ÓDÕÛ¶ÃÁ"Ó¤ê-³p§ÌRC½¨º©¥hU2ÑLéz)¨…ÃÓëÍQ§££§èÈ(p-¥+7ÃQc k[Þ’
+endstream
+endobj
+1745 0 obj <<
+/Type /Page
+/Contents 1746 0 R
+/Resources 1744 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R ]
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 640.144 170.529 650.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 615.797 170.529 626.272]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 591.45 170.529 601.924]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.725 567.103 195.688 577.577]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.482 543.316 182.445 553.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.482 518.968 182.445 528.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 494.061 217.153 504.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 469.606 161.051 480.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 445.258 161.051 455.841]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 420.911 161.051 431.493]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 396.564 161.051 407.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 372.216 161.051 382.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 347.869 161.051 358.451]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 323.522 161.051 334.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 299.174 161.051 309.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 274.827 161.051 285.409]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 250.48 161.051 261.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 226.132 161.051 236.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 201.785 161.051 212.367]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 177.438 161.051 188.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 153.091 161.051 163.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 128.743 161.051 139.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 104.396 161.051 114.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 80.049 161.051 90.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 652.21 392.804 662.793]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.478 627.971 427.441 638.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 603.623 402.282 614.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 579.169 392.804 589.751]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 554.821 392.804 565.403]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 530.474 392.804 541.056]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 506.234 402.282 516.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 481.887 402.282 492.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 457.54 407.661 468.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 433.085 392.804 443.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 408.845 402.282 419.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 384.39 392.804 394.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 360.043 392.804 370.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 335.695 392.804 346.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 311.348 392.804 321.93]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 287.001 392.804 297.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 262.761 407.661 273.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 238.414 407.661 248.888]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 214.627 414.198 224.541]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 190.279 414.198 200.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 165.932 414.198 175.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 140.917 392.804 151.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.241 116.677 426.204 126.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.602 92.222 401.564 102.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.602 67.875 401.564 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1747 0 obj <<
+/D [1745 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1744 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1815 0 obj <<
+/Length 1220
+/Filter /FlateDecode
+>>
+stream
+xÚÍš[s›8†ïý+¸43 ÇÞåàfÒÚ7&ÝΤ Å°1‡å°múëWBrj'Æ@ÇÜĶ€W¾ƒôIHs HƒSgpüÁF’¥Ø†$çN2b†dÚP1TÉñ¥ÛáåçóÑWù»óQÒ4¤è&¢Vt“µFÎàßJ¤>>oYŠ5É‹·ßäÓk%  Û’~VwF’¦S1‰-¤Ùà¯XeÒô L†ª€%Æ÷Qêá$óIFüŠNµêÒ‘ª*¶®óÛþ–&™|¤êÃ{ùšÖp¸üwÏßUàäÙ\ áúb ÝV·"C\çdTzC‚$-ó
+†e„ âFùs(ƒ?1•50¤ô^w± Îõ èàn÷øŸ$Œi«Ú@ _LdÄõóZã“ú´ôH-Ùì!ö‚,‰Ãßn&q“í®ã8‘éÐ~²?nXÔz²‡ÚsäD©»3 âãtÕ=tZN3jAz‹,ýp^PŸx8ŒÃkµ<$T¹/S™;PY½„*÷åÀ.TÕt™
+éÿdH熂`Ïõ‚-+S=ÅÁž>Ë[}·pù·¼LS6šÁEÓ\wÏÈ<Ì :ϼ5:Ú†ntAÇU ñz3¨*ÈB¼ï“"‰Bk_¥„OÉl™ÈÔÕ'ê@èj\÷ÔÍ—²Ž¬B0|HI“$T×%7Ù*ôI\ডCø nUäÓdŠ/ÏGŸ|rã\MO®;‚õ0ø#w99}¡Ô32úí¬£ÖFŸ“4#$`ÊØkã_ˆ¶8c=þ“{\$xmåî(¾qbðIZµI„"X3/`=?ÐI˜#4ô­oµšßo
+0á˃zÕ;ÆÚD›wTz2Ö4OÊÌ#»‰d¤ÚÎ>šÉÇjÇTj„¯-ˆvIö¥¬(©žåº±K)×&†X±svuC‹ÓñÕÙ§Z€ÛdåtŸ•sŠ ·Èã扷ÝeI$ªØÉÔiªÂ4}›]ÐS¼/'ã›Qoð´š"öu¨vB …ï!»gÅòaú¿ºq¦7ž9'Îì-#ÄhÉw=šjñÐÁñœËÉèí³ßlAÇ*Ÿö+zúÁÖù’îêù‰O-íŽ'=êÎdØ Êøžµm8ïycÊ8ÂnY$=À˜—t•ón´µXžß³
+­FJ2¿/þb(ýÈ´8êH™¦‡”ú(A¯Â:p¼IuÚo¨t!Ùk¬´ɽ`¯3JŸTG
+n¹(öº›O6½z ›Š»¼x°| ÂP ÉFöø¦+†!NÅ.HL²?G½IÌ?é¨ØnQŒ‡¤òò Vœq©º,Žôßø¢¦bë$³û1™<þ“ žLÙ@)IylYŒG5uÅ´µå{lc/îZ¥Öˆàòžë2.ÂHÌÃYejZ ó–ª²ßÏæš_óê¯YšZøÉû0L
+endstream
+endobj
+1814 0 obj <<
+/Type /Page
+/Contents 1815 0 R
+/Resources 1813 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R ]
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 746.115 161.051 756.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 722.312 175.908 732.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 698.402 175.908 708.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 674.491 170.529 684.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 650.581 170.529 661.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 626.671 175.908 637.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 602.653 161.051 613.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 578.742 161.051 589.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 554.832 161.051 565.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 530.922 161.051 541.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 507.011 161.051 517.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 483.209 217.153 493.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 459.298 217.153 469.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 435.388 217.153 445.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.512 414.004 160.475 424.479]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.609 392.621 134.572 402.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.697 381.226 133.66 390.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.422 369.271 206.385 379.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.021 357.315 178.984 367.023]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.983 345.36 188.946 355.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.562 323.416 174.525 333.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.885 311.461 184.848 321.936]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 287.551 162.423 298.025]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 254.212 203.964 264.686]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 230.302 203.964 240.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 206.391 203.964 216.866]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 182.481 203.964 192.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 159.131 126.182 168.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 125.124 143.119 135.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 101.214 143.119 111.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.535 79.938 142.498 90.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.214 67.983 129.177 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.974 758.738 383.937 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.89 746.774 380.853 756.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.322 734.81 390.285 744.518]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.047 712.738 338.01 722.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.47 700.106 357.433 710.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.426 688.25 370.389 698.518]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 676.846 383.39 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 664.882 383.39 674.59]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 652.918 383.39 662.626]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 628.43 386.25 638.698]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 594.287 471.169 604.869]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 570.359 471.169 580.941]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 546.539 386.25 556.807]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 522.611 386.25 532.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 498.683 386.25 508.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 474.648 471.169 485.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 450.72 471.169 461.302]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 426.792 471.169 437.374]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 402.864 392.804 413.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 378.936 392.804 389.519]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 355.009 392.804 365.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 331.081 392.804 341.663]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 307.153 392.804 317.735]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 283.225 392.804 293.807]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 259.297 392.804 269.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 235.37 392.804 245.952]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 211.442 392.804 222.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 187.514 392.804 198.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 163.586 392.804 174.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 139.658 392.804 150.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 115.731 392.804 126.313]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 91.803 392.804 102.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 67.875 392.804 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1816 0 obj <<
+/D [1814 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1813 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1906 0 obj <<
+/Length 1461
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÛr›H}×Wð(U­ñ\¸¦¶¶*NW;öÚ8Ù*'EaK¬.qœ¯ßf@âb9ö>Ðèô™îž3=€4“€t<:²F‡ïL,²©iX²n%Ȇ¦Iº‰d J–']UcòÍú )H“¡‚éï?½þþM­Ñ÷¤Ï—¿7 Ù@Šä.F×߀äÑï>H@Ʀ!Ý#’¢bY-ðérô÷T9)êN”AIênÛ©;·g¹ïÏvçyx7A`L¼‚,4e©ÒD2
+,ô ̆¨0â)¹¶ëfÑ–D®³æ q<ž±È¿¤ŽŒð§ž“9ü.¥9ÍrV­W`7 zva’4 ÉóÓ|ÙNü_øÐ{Ñ>ô^¬•
+Ë…ï&Q#½ó 5F·Z8A@Nä+PÁmuÃ9ü7òCú¶ÐBj-„dÝT–êÝÔ•¦U誥…óó„8¬ãaJý0÷ wBâÎÙÄl?ähãÑ%†Æi¿“GÕ!ƒÎç••ƒ5JÎu`ôÄù·ÍŶ]¬ zvJÄŠtÿ+”iWØô´¶VdCµ‰Ø.«î€¥Eì"mÃÕºàÆy:·E¢<
+VÙ[ˆâ~ø>6†»¬$t¨òUÑâ4Ê—4®5z‚ ³},«„nY.oφ’ÓÉ(î r›FÑU›Œâ}]¿JBZ6’fš˜ߨav®©Û†²iÀ§=¿1ˆ›¸ÌQ<ä1·à„^i*Ï<Þ
+ÛYiÐÊdÄÒ»!3¿/¨s^‰qOœ&d~JOõ)Ÿö±“ÍÉÒÇüÙm-øÝÙé¹uÔVguðÆÇÓsûÍÙÕ'Ë>:9{ó± QÝéØç×'WÓ`fÓË©e_Z¯­Ë60­•™õþtÚm–ú®p z¬“Šr/µ‡ôª±Ýy…þ/šQ[ZbcG\ë¹yã$"…HÒl_6@{á¤Ù`\Ô†k‡eÿ8ül/ôYá4`
+fG°âå.àz:¢Y–¸´ªÙ Ö'=dÂ
+h.*°Q6Í677´¯S[Íš@zbsÒ»¥f÷9·¯ˆ²Î¨ûÞÏæ¶Gâ´'ööP2ØÒíCP·Jeµð>\Öþ´âYt‘;¤w—»(§«¦g¥®wÒ½™#–×)Ï‚èÆ öÄy+t?ÒdÔ{SŒ. ç÷ôšv,)7Š‹Áºõ6 ¨K,x֡鉚Uß-À.ZçvØâüˆY”6ʆâãl­å=c»æ—͆û@<´Ö{Þ­ý²òöÃÊΪ¾éŠ£åUq¼eÃø©Ãz™XÌ·yè2íoÝ`6ˆê¶þ¥hÁùÙá ˆ“
+ð(m¿ÂBãÎÏw}ŒÚä ìôGÑ”(5.vºQBzBl?³·{¦§fvy-Ú‘õc: Èì\)¸“ž·¶ý Ã.Úèùiìd(ôme *Üš? YãIÈ=É–×mÿ…Qu™Î¡Ç?aÊåh2Ò5…½qFªF•Ò‘²F æÇ$$ ÝÃDå…üJóõãDÑ’BX\Tùį
+endstream
+endobj
+1905 0 obj <<
+/Type /Page
+/Contents 1906 0 R
+/Resources 1904 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R ]
+>> endobj
+1817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 746.065 161.051 756.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 722.056 161.051 732.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 698.046 161.051 708.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 674.037 161.051 684.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 650.027 161.051 660.609]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.243 626.018 119.206 636.394]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 614.013 141.137 624.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.239 602.676 118.202 612.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.273 590.671 109.236 600.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.678 577.999 149.641 588.581]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 554.097 217.153 564.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 530.087 217.153 540.356]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 506.078 217.153 516.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 482.068 217.153 492.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 458.059 217.153 468.327]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 434.05 217.153 444.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 410.04 175.908 420.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 375.134 143.119 385.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 340.444 162.423 350.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 316.434 162.423 326.909]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 281.636 162.423 292.11]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.02 258.842 155.983 269.317]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.755 246.838 234.718 257.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.403 234.833 176.366 245.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.369 222.828 187.332 233.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.33 210.823 214.293 221.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.817 198.819 219.78 209.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.814 186.814 214.777 197.082]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.099 174.809 155.062 185.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 151.36 126.182 161.068]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 116.562 126.182 126.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 92.552 126.182 102.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 68.543 126.182 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 746.088 392.804 756.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.552 734.214 407.515 744.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.841 722.125 396.804 732.501]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.865 710.251 389.828 720.519]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.281 698.162 451.244 708.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.204 686.848 430.167 696.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.209 674.867 429.172 684.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.725 662.885 426.688 672.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.749 650.904 419.712 660.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.437 638.254 371.4 648.836]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.394 626.38 382.357 636.855]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.947 614.398 400.91 624.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.333 602.417 433.296 612.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.962 590.435 463.925 600.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.274 578.454 453.237 588.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.26 566.472 422.223 576.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.889 554.491 452.852 564.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.846 542.509 393.809 552.984]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 530.527 402.282 540.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.948 518.546 432.911 528.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.909 484.072 374.872 494.655]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.676 472.091 381.639 482.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.129 460.217 459.092 470.485]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.565 448.235 437.528 458.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.31 436.814 394.272 446.728]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.058 424.272 457.021 434.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.575 412.291 452.537 422.559]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.053 400.201 456.016 410.577]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.57 388.22 451.533 398.596]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.679 376.346 415.642 386.614]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.017 364.364 428.98 374.633]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.395 352.383 420.358 362.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.039 340.401 461.002 350.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.025 328.312 461.988 338.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.737 316.33 480.7 326.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.369 304.456 384.332 314.725]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.081 292.475 403.044 302.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.886 280.493 379.848 290.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.598 268.512 398.561 278.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.388 256.53 380.351 266.798]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.1 244.549 399.063 254.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.132 222.725 403.095 232.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.957 187.691 362.92 198.273]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.957 175.709 362.92 186.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.382 163.727 385.345 174.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.829 151.854 415.791 162.328]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.918 139.764 374.881 150.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.916 127.783 372.879 138.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.445 115.909 400.408 126.177]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.714 103.927 434.677 114.402]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.699 91.946 439.662 102.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.714 79.964 434.677 90.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.699 67.983 439.662 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1907 0 obj <<
+/D [1905 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1904 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1959 0 obj <<
+/Length 688
+/Filter /FlateDecode
+>>
+stream
+xÚµ˜]o›0†ïù¾iñ ÆÆôrj­j÷ÑFÛ¤¬B48)j0Œuù÷3YÓe+87±1æñËy±cV
+Óã*bi„¨¦ê˜·>„™r]d&QUQ Øž³ºÑB½šjÒQnê!õB¦ÇÒŠY?j£6ËfbV“Þ,qµ–ãí¬ÇÏT=¡†Í­‘¦Ì}f©‚÷oxõˆcÒ¥óDa”r[ðã8ÿ+ÿuÂAȼcÎ7vg-zõ÷ÎZ|)í”O¹àe,yâ4úrÑ–ßLì]ã-/ÚŠ‡»¹¤­¹ø ygj»Ñ\-ë<ÌËöâêêëu[ûTpqý¹~q¥'PzÂ
+endstream
+endobj
+1958 0 obj <<
+/Type /Page
+/Contents 1959 0 R
+/Resources 1957 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1961 0 R
+/Annots [ 1903 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R ]
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.961 758.177 202.924 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.946 746.222 207.909 756.491]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.961 734.267 202.924 744.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.946 722.312 207.909 732.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.179 710.357 208.142 720.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.165 698.402 213.127 708.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.179 686.446 208.142 696.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.165 674.491 213.127 684.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.897 662.536 221.86 672.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.614 650.581 224.577 661.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.599 638.626 229.562 649.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.614 626.671 224.577 637.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.599 614.715 229.562 625.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.633 602.76 188.596 613.029]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.498 590.805 190.461 601.073]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.995 578.85 193.958 589.118]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.517 566.787 186.48 577.163]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.707 554.94 195.67 565.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.678 542.984 205.64 553.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.663 531.029 210.626 541.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.678 519.074 205.64 529.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.663 507.119 210.626 517.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.557 495.164 170.52 505.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.054 483.209 174.017 493.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.576 471.146 166.539 481.522]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.415 459.298 215.378 469.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.4 447.343 220.363 457.611]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.415 435.388 215.378 445.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.4 423.433 220.363 433.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.946 411.478 190.909 421.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.644 399.522 229.607 409.791]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.59 387.567 163.553 397.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.757 375.504 211.72 385.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.338 363.657 167.301 373.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.532 351.702 181.495 361.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.011 339.747 184.973 350.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.069 327.791 167.032 338.06]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.069 315.836 169.032 326.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.092 303.881 164.055 314.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.84 291.926 167.803 302.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.571 279.971 167.534 290.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.571 268.015 169.534 278.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.088 256.06 165.051 266.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.287 244.105 174.25 254.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.254 232.042 213.217 242.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.836 220.195 168.799 230.463]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.567 208.24 168.53 218.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.488 196.284 192.451 206.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 184.329 170.529 194.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.634 172.374 152.596 182.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1960 0 obj <<
+/D [1958 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1957 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1557 0 obj
+[705 0 R /Fit]
+endobj
+1963 0 obj
+[501 137 273 501 228 273 273 0 273 479 0 501 410 273 228 0 0 0 0 0 0 0 0 0 0 0 0 273 195 228 273 389 456 456 729 592 228 273 273 319 479 228 273 228 228 456 456 456 456 456 456 456 456 456 456 273 273 479 479 479 501 800 592 592 592 592 547 501 638 592 228 456 592 501 683 592 638 547 638 592 547 501 592 547 774 547 547 501 273 228 273 479 456 228 456 501 456 501 456 273 501 501 228 228 456 228 729 501 501 501 501 319 456 273 501 456 638 456 456 410]
+endobj
+1964 0 obj
+[611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778]
+endobj
+1965 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500]
+endobj
+1966 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+endobj
+1967 0 obj
+[777.8 500 777.8]
+endobj
+1968 0 obj
+[501 501 137 273 501 228 273 273 0 273 479 0 501 410 273 228 0 0 0 0 0 0 0 0 0 0 0 0 273 195 228 273 389 456 456 729 592 228 273 273 319 479 228 273 228 228 456 456 456 456 456 456 456 456 456 456 273 273 479 479 479 501 800 592 592 592 592 547 501 638 592 228 456 592 501 683 592 638 547 638 592 547 501 592 547 774 547 547 501 273 228 273 479 456 228 456 501 456 501 456 273 501 501 228 228 456 228 729 501 501 501 501 319 456 273 501 456 638 456 456 410]
+endobj
+1969 0 obj
+[500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.8 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500]
+endobj
+1970 0 obj
+[611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500]
+endobj
+1971 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 0 0 0 222 556 333 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 333 333 350 556 1000 333 1000 500 333 944 0 0 667 0 333 556 556 556 556 260 556 333 737 370 556 584 333 737]
+endobj
+1972 0 obj <<
+/Length1 771
+/Length2 1151
+/Length3 0
+/Length 1689
+/Filter /FlateDecode
+>>
+stream
+xÚ­RkTבª¡¬òRIÕzX%róÔ
+ ˆ±h €<$f&dJ2C‡ $ âƒJª²,b£Kž¢¢TXU꥖X…[ÀiáËëEªVEÀ×°®®KÿÞ5η÷>ß·gŸæ%gˆ l,ÁP‚Áar„ T&“rØ€<³Ù-‡•‚¡aJŽ@àVëµ€»°ùBÞ
+!O¡P,݈#©ø„Ò'E| ÒÁ8¢R¢@¦$4°Žì¡RjS!0ad‘V ÖOÞÈ
+³U_™Ÿxà¹ûµõnwÚg‹À\&s¸i |5‡M7¨û;(œƒi‹mq¥‚Õráì…~7å`÷q —%.¨¹)Röûì.º`ÀËòa·4?§$"V3ºàx…›ªf60¼šj×·nhÑ¡—
+ë×廥Õwr‹9éûhëSÆ_ÓþX²k泤—/{_¼5S[©L^vž'gÄúú Îôñ¦·³©Ž×¿²zÅ+5ßÜ'DÁ½N«Ìmº÷g7É@œàfžÇ­c_yÛ¸”ÂqÝþòÈ6ø~ßdÝ›(6Ø â/£ŸöW>þÏåóAn²$4¡7å\ômß+µ «ÂÜk f&Y›$’ª%M³±žù^Aî 溈£f·íR·¡è¡æ|¶ob|Ñ ¡ß¡îWC¿”ÄXGŽú-ÊuÚº m7óaôr“ÿï"kSŒþµ§¬?Ï[¶ŠÎf¬ÛŸv¢&²f‡ÎøD0gßqAýcŽCyöùg¢¦ŸÔex¨ó‰Üü|9½¶ñjíÂ¥(êee
+>×ÒŠâèàÉqS&÷Ügy‰©oºƒŽ®?\mÚ³ùÑ“Û+íÜH:õ÷ ¨éâ/Krßní ×;¹Š›Úlèýã–»?÷!‚­ç»ê½ã¾[ÔB­»ø¯±Uë\Wu´‰­÷-´ïŸ AÍ•ºZä1x%D™êcó´ÊÜ”>óD­Íéæ‚väõ©ª+w°gÕi?/bÍX¥•/•žÑ.·›qwæØÓÏÁçø–C×#ø 廡à;QF+&ïuMèóܯŽvüvv…L-{› ß—2_e4tÎËjê*]àRneøl;û™ékî7gÌ[ìæák¥QÐöšö7ܯE(œuœ­±÷ű¸Ž|‡s
+WS©_ æ¥uc†u¥ƒ}Çv]Ίù¸ÀzÏGáY*.yc¯¨j·/K<º5ªëÍ{/U;ªÐ†â¥Ñùª¶;É[WËêNîqÚÉ9¬É.îš[Ð<ká®-¿z<Y–)¯øvCÐ~~¦â¼„×<çGïÅEJÎ95T$®>”z_Ü‘ý"ø§ ÃF—<=g),x9¨é=ë_^,¾Ú)ºÝº—VÛ¥mª.-Ø+›[ã¶ñƒp—#íW…×]÷´·ó¾h§.#^½I8½Üã{cJ'¬Ûü8¼eM„mÁÂœ×ö6ºµ3óòD¥!]7wh’:n”åý†ÆȨmUæpbòXAm³ðŇY>¹ÿå)Õü±‹â–¤ë=_®ÛÅeKbÑ“ŠJbU7ožmÓ³¬¨#ùUÔÚþÿÍé'»
+endstream
+endobj
+1973 0 obj <<
+/Type /FontDescriptor
+/FontName /SYFPBV+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/greater/less)
+/FontFile 1972 0 R
+>> endobj
+1974 0 obj <<
+/Length1 818
+/Length2 998
+/Length3 0
+/Length 1559
+/Filter /FlateDecode
+>>
+stream
+xÚ­’yPgÆÕD‚¢b•ËÈ”ÑH²H`‚õ€(ŠšD¤Z—ì&Y »°Y$Ax¡(Å^(*V¼Eè` Š*PPŒ@”p‚x÷ØnPk‹ÿvöŸ}Ÿ÷ùÞï7Ïû9;øK\½"õ%pÊâ@^@(’„B<
+õ@
+\!woÿSSùbjñÇ(©È`¥
+ÔQŠBÇ7Â .X"aÞë`ÓÆpj™&
+¼¯îÁúZÓ)‘˜„ñ8<DéïËßÊ!—ÍÇ¥‚áràÆ÷
+csP‡h^n8,P)aÕ¿dž‡Q&ÿ$äÆuÂtFùÛ0||õ:W7pxÐpä<=ùÚÿ¥1$‰âÔà{£#ýRË0z (ªF¥ŒF=!™¸&ãòÖ“ñósj5áš½­<ÝÝhZRC´þá
+Ë%®­ç††.K_ao–è²bÿŸ™?J²³zªìxj}š&”_Xp´b´ø{*Øν¼i¤Õˆå¥™ñUùsr:­}гÒÒ3“‡ ãRï8\BOw—v›ìÙ:ecWÛøà1çƲq-io»>{fŃò@mŽpUl^œV,¸%v«”>¼`Ó¿¾a s^O›×½vDφš†×r³§§&ظ?ÂgćÀL86ð¶×ÇðH¦˜Æ¶‹þI—ëÛ$bó]—¼ÈÕù=Û×¢o
+^~äÚÙÊyWˆôÄrͬ ÉYÍx_¹Kv1›6©†5ßÛ³ùdFê¸}hØM“¢Öâ±aù ™`GC^J@~ûÜ-£úGôm¿ÞñBdyjêñ‰¶uNI&ñÒaÂg/›eŠ{éáßFïœHЙnÞQ“|w“G,kó™¹iû‘¾þ>o¦Ë­ÈêÆn·)¹Uá,žV³Ý.L3˜µ=:›e=`H3¯rjh›,`Y\s4g¨I¹~±Ÿ[ïX]dÝylÍ,ïbÇÄõ"m°»¥RàTÓÞòά$”sûoÍ&þj
+endstream
+endobj
+1975 0 obj <<
+/Type /FontDescriptor
+/FontName /YNRGLS+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/asteriskmath/backslash/bar/logicaland)
+/FontFile 1974 0 R
+>> endobj
+1976 0 obj <<
+/Length1 1612
+/Length2 17995
+/Length3 0
+/Length 18835
+/Filter /FlateDecode
+>>
+stream
+xÚ¬·eT]]³%Œ[€à.wwww'¸àçàî<¸»ww÷àî îè<ïÛ·oûõ÷§ûþØcìUUkÖ¬šµÖ9›ŠLUƒIÌÂÁ (í`ïÂÄÆÌÊPÙ™¹‚•ì™ÔV®€¿F.$** g © ÈÁ^ÒÔÈÐZ
+ÖÀ·²ìû¸ïƒ :fB½s65gŠ¹†Îµ™xªÌ§Íá'Ø'MÜ…¦×’SŠÃÁMWzʲÅgjž~Ñný„” ålѺúŸªÒîXKµ:[ç5“G»‹Û>·Y.†dKQúñ%!GPÆS â˜Íg‡ëœüÊðزÇH«< ô: sÄ!Gš/\°ÐãVäSÚŠÙé ±tPWÜ6?êrÔÄò—§}«)vz_EΊ ŠÃ‰1
+ëxùŒdÐ`ÏÅt0ž÷4Oîï<kóª?nó<Œ
+í…*i…ôM°3ÿÖsü[Ã''Rµ¨WÁ²ôÅϳBŠèÙ.Œ%hö#ð𯆳›_$éIm~Q¼Oª²I~ßãˆVÞì-Ñd5M¹´[Ñ^HÐÛ,¾#Áh2=¾_…n ãoÄ„LêX ‘Ñbfc9GÒPìÎÓ?]q’ÏÔ¬œ*&®õì š¢uæiuÂÙ?Éð4ÁE¬ÝØAœû¹˜ng¡ÎÛhjU?SGÆÜ2ÔPâíá}Ñ|ÇÓ ð~ù”Ô45¹BLÛ½E>UrÁÌ.ÎHò­,Ì^Ýâ6't\ƒyâcË$A…öñþulùù!IA(ö a¢#ΦӨÉÈÈláýáhÉPÓeðÜjÕír¯ëŠQi-!|qje•¿h°‹}Çxq0º@­F`=Äõ‘¢ú<`öÄöÆ?&õe½œiå,…šŽŽ“«G>òó¶#ã-UQa^4»¿ß¾Nrùq0õ¥V¦¦ÿðšiKa—¿óˆU{ùH–²·û#j/Aoë *c°ôFÌùÔü¢7âeäÔ<¶iÆ}ÆD6naåiÉ°:žµgÚwÎìm6Ö„¡ýç_™Ø¶Ëñ‚Dâ»Ø'C
+1ù_çñ•&
+BøÎØÊ%kàˆ”"úËþº\An¼¤ðò‹çk—èy;ÉdßN24¾Žútñ  ý*«Åªk¼ýÿ„œ^5»$ô|g>nP‚pTIf§‡Bù7²:•Þ¯`1O±Éå—uó'ê4·+¤XRüÓ)vè<WÕ§Q·Š'êöGïÀyîþD¹±’"Q^ŒdIQsæà A)V>R®5©¾¯¤ž<AݲÑFˆ]¯lÏÚ×fPó«ò¬–
+EŠžnŠýz:7Bo·«^ioårukN•4jÁ+í5c.l7×ôËê$Z?á·(N|qM¦¢´°byvŒÍeŽ'érÎi—Ù2:·‹
+<û±Iòºs‚ƒ
+õ5ôlŒÅnAD” ÃV«„¤6õ »¿Ó9Vkˆ·R’–ÑŦRýïñ0Ò¿ê<XcI"ÑÖm73*·² ¶W^rXuw.°K/*Å6{]yãH¸¤ÇÁåµì9UÙ—»€¢L x”híǶ×w´ß …teé‘Ǿ)iCåôï
+HšP€2ú7}­~n”34èDÈ Tz^óu±1Öúì
+ó¼ÆôgDÉúƒj3íV·­Á4j­·óŽÅΘÉlmxIM‰ê¹uÍCø÷¸i'‡¶Å¡ ,]¡YüèK_RÕñ<ùz}óKE‰(ž³ðŸ ó¶1-œŸ_uȪ;®úŸÛ¨! 3À׿…Ëyðé„£w¨[9¦³|`û
+~Q!WQ…;¾ú&úq”Ü*»*~[9¥rš
+‚•˜›ºÿÌÓÙ\ú)#ñÀöìóÁ‚ȪS4573lGGc~ãW·Õ‹S½ýÉU“—û„üŒPÔÍ¡!]ØVY”¾VK òâÖ™ ÖØSpé¦.ûBÎ1.e~F‡ož{.AI©¯!›„<âð½€ †ÐÝ  P2´nG D#N zÎY+×,0¾ìÿ$8.™“üvwe‰õ¦‘Å ‡¿_šøќٔBLâx¨=y8¶+mç.a$ë€kðäÿ< ¤i€RHêëO©¨W¡“å?˃ç>gíÖo¢Uòz“ SHôþM(¯×¯'5wc(XíIšvÝÁÄN¡,4ù®§{ü’|ð=©ÜIÕ‘Ñió[Ï€»hòv ÖÇpL—‚< QC³N±bæc
+Ô¹Œ6¦¨A†<°@o"±G‘M™&ïè‡
+‰X­‘ódÇè(ûqü¦¶»Y›z´+mó
+K‰”‰áNaèò™é{’EÒKsôÅFÛç³%n—†¶úêtÙ€4`"‘åÈnÎü‡êÝÏ[|tC$Ñâîž7r¿»69dÜ_ïçcÇÀ€ž{ü½²÷]¬ÏŸ35yË‘§ô[öv\Ð2˜ˆ pLKÛ§sÎýyXR^ÉngÍ"èGü Û?\ö9Eô±væ Æê½Ë²cv¥.)Õ³Š^m!wÞÔ©“¾Û*À±j³?ä…’ŧú•­¹ÃV«Ó{%Ñ„EzÁccþ@¦t÷·ŠU°Dl·Õ¥Žå2ÍîÜØ¥„ïLˆÆ/Ô‘ÜJ2’¦->«­”.Œ-CÆÔåǵ³'Dº. x¯’çm9ïTyýÌí¢´¬¹§>Xm þÉþÄÍ9é”ccI¨‘šŸ¬«KÅ…ž“ŽºîÐ8•¯7ÒÕ¤ÉÍZ©²³u©MåíAš7¡7¬dñobÂÁ5†_4çögŠç¶½_Úð¿,‰ Xt¶<0±ærG<×öè¡7?Ñôƒ^ó™1¸IرÈZñVH¢‹œšy «è¬Ödì‘_èéhv%Á¬{§â‡O½³K¦âz“×­ÌÎ-Ÿ\–†¯ù©ˆ¿Úå³-[°3«Š-´—ïpÕOi†NìVŸ†‚-.××|rC¢uÊ<ÛW²¨üÂy‡‡ÙP{§“ª÷Þ›Qi?ìä¯ QÄ韃V¸©wVfû`'†Ð(¼†÷ÄOïŒy"K½ÉŠšZn“õšpº½myÓ¥{cä~QÌ9ŠžÎÑ®ó`Œ'–´¨c«¦ƒ¡tÇ3EÖkq![3ä¿ñ»ûFK?jTü#ÇgEÀÉjë+µ4 ‘ÙàyOÞŠ@Û0@uU{ÖN*Þ`‡_ŸX€sUïRÝз&6š¿PçÿzŸ;0 ÆÏÖ£j‘Î|+wsËë¶Ø°¬
+¾Ï%Ž-ªZ,}Ç7’;øj7dߘüÂôƒÂoNË:ÕoôtY@ÿ¢ƒÉ%·÷ŽbŒÜéñV‚™š£­ì RÈà|˜•£ÿ0#ƒJ/äŸÄÜË<B¶›¸_Ó=¥¯.0!3—Žx„ &¥2*;–i„Èq®Hxz†@¿èÈ© »ú×ÜŽRšÉGçH°¸%ºü¨ÎmÍíqDr¿¦
+‡ìkòõ5tĵå踭Bpú©µ)Õe[Ij½²9.RþÉn…ˆ€*K'w´´/v›Š%Ç䪎ƒŽØ£R‹!Ä¿mÇiõñù ·Ž„í~ض€’ÅÕž²NÆד»ŒX’v”BYFïB}>:;Ùc÷ïŸ{QñîŸ1¶8ž„õ¸¦à~‚úìR¦•Ñï¯VÒI¤‹ØZÛÒe&Ù‰ˆïÊ>5ó~맡//Ì#qPº½Àu} ÑúáP)ÂXª°Î—¨.c+®sì±Í’ˆž¯Û…Pb5д3;Wðr«O{ÖÏÆ$˜8þÊ'Р:¾Ñ¤ßúM’-·=^Ò9̽ÿñ`­Ô>âZ1b"è¨lÔRvbD<ÀpªqÛÔˆqøöêãá$Tý}‹žý8\¼`¹ž‡qBÖ€vd œðèl1îäbÇ:ç*2YÓàIz÷»¢|ŸOÓOñÇÂOåAB VKìq õxÍ4ÑLê …(Œv¾’çà=PR/äTa¹CÞ†„´®:žƒ£Su?U“8Dû‡À;u¸)µÎŠç´€}‚D¾ βž€œŽ¸ŽfÃN Æå¬ß“ùQ‡Ù©ªaUJÞU~IÉÙ¢ù§¥˜JµK[¼8¢¯(qP­tØ7”ÞȆWššø,âî'œ0k¤¤V¢;I~ì5Iå*ø2²pF¬3_åÓ]lž!N!0åƧEv³»6`~mÛ£yv¯*êüó'öA2\Å'/pϵ3ù÷™÷Ì%L®IÀš ‚‚˜»Ø–\Z—æ8¯ŽÈíŠnôëhgg1µ²…6n¾`?Iaÿ^Üzün¤O\0㼞iÛjŒß´¿fKÙ„Jì9^QþOQ>ñO†;"Õ? ò‰e¡ü¢TÃjׇùû‰aùÏC8ÉZËápèã9ú|™Ø,mEÈŠ|fJ
+ʼîFò’Ñ ™ =hÚ„Û,›]4ǼFÚ³ƒu0 ))½þºÄGG ®Ý6Ge‡/µÊûâ\0Pw1¥¨ðI^¹'^ÙÝÚàéO;R¶öáy—Ì—Ö}‘ËXË'tSV0íÔ ï,ʼ)§Åšg&[ï9¶›˜±µ—†¥tM±"ÌFœŽ4‡†õÔƒ-JÆcúEš/òÂÐc–pÕGŠ4ô«*¾&¤<Ì“aL¥ÍeôúÆ"A¾CCâ7þDMYzŒ·)lý/xBЫ!¢È÷ÐD{6°š3炬ÓÓ*:BtýT€ ‘ÐãßFu³Vù75„5ÇÜ¥0Ý…êÝíR?^m‘:”md·zdePŤ¼˜…,Ÿð2CäïU{àtš6,Ã;Rä%é_jg}ê"ã(ðç¶ÍxU¾ñï5ʈ±1/Ákš§
+9š.¾ð¨½]Èx¬Òí}ÚEJª¶ñÁÜΪ¢o=åĶŠÍˆøx>L.b±sŠÔꤱÞ£
+^¤4ÜòmúVý›… Wv TFª½<#ÅZ³k+4ºÂzc'ºìNŸôôCìç lu¶åZÅídG×îôB®÷Š¶›C¡Y!äßk±×yAcB‹ø_y½Œ«£µ+ZR‡båzÿ Ç
+¢› øÿà3R´”`Ú’\Rcâ8Ü0YC "W%:z‹¤!j#(ÖÛ~ºÅ¼ð²ü”ìHü1y‚wí¸Ï…kºpÎaQwy#w=µcUüá¡“n1mùª¹»dj=fž\…–&¾FlÃêy]J³÷Ò§);™ô~ú¢6…@º xñ"¬2L-Md>v
+kež9ïž$0]:¿QIeÝAïF?aø|jÆAùT¤8Ìàòá«?¨’wÞã^ê!m{ÁôýÄLÆE,jÄ#‹­b†¿ŸHXû¦Ç&{ÔE™
+)÷( AyA0&fîÝ{´Ë2ØŠS²“;ÓKH&¼ˆÏXbÀŠ`=%£y–2J `ÊÔ1D'P\wêË?ŠãEWÓ
+#@
+O_”ÛªƒÚ¹^ø«ÑHEàô0Y*æcA]òˆâá “ƒƒí‡_¡ü%'~D\b48”›¼:ÿBÂn3¶]Q=dÿ.@W‚¹VdR–pg“a®n€£`BõN8å3ÏOVF꨻Ku¼? O8¦³Cž¿ÿìcuÆ¢L¶n°˜^sN‹dBG¥µK2¢1²ãÝU;©g´oyÍG”mÞng¸¤²¬²µœ)\i<Þ:^sSýuš“›¯!xj< ”$÷ ÝsÁ%'çþŒ2ƒ,g`ài›Åhí4@$ØKØrÓºÜPùh†Avçæq
+=ä2.“Ìããl 4'®ŸW‚…e÷ù¾n”Y8
+Y} ‰ÔȪk¦;Û(@ÜÀ¯b|JîÎåX­_[ê´aÕ¶16†ò3?,àÞÜ¥bp/ì9r Ø=[bž£)ÚâÆa‡6Å–«Ñ™Z.­?ÂÁ!qmhÌô0…ªNÑ>ôŒŸ2[S^7_]òø µuüp•Í­‰Rñð8‹•«#ÈE3È¿I=SÂ<Ô©ÌÊ9¿}Nê£dû ]{
+±%½÷ˆOÔï¦bЫ=–]BD  Î`…ì‚ežM›Ó&ªãû)O‡—®õçË^’Ìl™Ê“Â}RÆ÷<Ôx鸑øUŽ=wþÓåïùQÜ¡éå·Šû‡WÃõÜuíSÒ¹žöœ{}¦æƒNo;™Ç¬Ë­zO¤4>…æËB¨ÙvP _rëe¦êj<ˆ9×| Hú ÉžoJ¾%Š Žì¥$$,é^µzÂO>”vÄ8ÍFGÒ>Xȸ»`ª%"­:î­q³UdüÒúu,^2Ë:1‰–YòÐqDGÔ;M«4°Ia-³•¢ã©#-•ýH=Ö`³ÇðüT
+lÿ@À/pq5=+¸u9«Ä¾OæÓ^Yi`\Z*¼ý’JKΨ­•%ùA–Â'vÁÆv‡ªOÒsÏ°©¡ˆë”AÁÌ=?U:8±§$9×ÙÓéÝÖ0%Ù¾‚ú2Ë“ÄmqlR:ÜöMHLüâwæË-ŽÂM)
+}úïµø®Ú4Éèõ8 å¾›ŠG%5z †vOûå=-îXˆÌjE¦)ð.ôwUì›ëBKþ9Ÿz6ÏY°F‰‘…­SMüükUPOÿ7™ñRZ£¼W¸@p²7m2q5Žól3><‹Ÿáeñ1!ÜYé’[® <tiTžQNŽ˜XÝhv¸ƒ'GàGIXgô æ ´ñ-ûÉgê¦q;R[T¯ö²É7ãû$³ »™qAT(8<I——ïÀQ ¥•Ê½2 óT—5ɨ5 Ë
+Çm’2ð êÜpž—düÄßùÈ>D!€©ë3õ?¬[& |HÂåSðã¥úà¤äih¿1ÔqV4è”Ã÷!,Ÿ¤´OÖi‡µ àó±\ýY ½~›+Zï ‰3»…T¦ yëZXù¬5å…Í@:4–p= ñÀÍÄ›nŸÙlE¹ûÄä™,®{‹§L+zÀc?9ûf$|¸x cYÁfL×é¸é×°+‰ÚblÎY˜ÎeÚ?üfI‹S~+`•Áø3zÚãŠ
+×À|šZüä¬'æö r–
+b]¹ó¦>¥A“=Ó呧¡ÉÐÀ±žÆfá…ìËMï 2›™•·ÖCz®
+]»7q!ÐÔGþ<ý³Î
+ƪ»G¬O¾»wŽo'²ZiÑ¡¦I?qõñÑûýõƒ¼-Ü|¿BT€¥´¸JÖR_±'æÙT8âÄì9qØ x]ºVÑÖïLNYâê5Âz8£+¬È‰F)GŸhèÒ¹GšÄÒé
+¸_Ƚ±™z17ðê¢0ß2ÚÎÓþz“ð}XãÁ؉\·5¿­¢gÄ£õI0q1Ò?Œt¾DøÍ{´Õm%u‡px›þ±-o1‚ºQ?²i™,Q·óÙ=Š='9|šu£½å… 94éUÅôi,\˜æ7Þjèi983±CA¯
+]ùMØÅœ—⸟>ÓÿëË|R¹K‘ŒÎèzˆKgoŠÀ½žRÏýlíFÿú`¶K5Y˜II;zΙ‹ZÄ8áyµ/†S2…GaZf‹dŒÄ5d= ÁõøX]×måò£|Gñ3"óì<áó-†o_HÂDPüvg‘tó­û ÅŠôªX‰•t‰I@Ï„÷2o!?þÐä„vð$û
+)œûî4dº÷œ¼»…âB“gFôv®áæóo9âv¹‚¦H’T †ÑïÉ8Í»ÒIÏ€ò?Åó„¬D×5A­Gݦ\çï©óÊ$’bvZ:‚u FžŒÅ÷˜«•îSêzg¿$åMúvêîRlZvãâõ\s6JûX¤NC¿qt£Ò‡Èúïú1Þ
+ù½¼åŒÙ6pN÷iÌ1[^0Áóâ%›àrÏ…&ê ñ¾-Ìx} ´wÙ!¶«^˜fÝê#Ö+åæ`»‚Bt(Ò‰æñž{àîlíäð¢‘JøœÛbìî\8úL}¯n ;H7KE1Ð._캒RàekÇYD½{ŽO@Ô =Ëoy> kQðSyoýµ±}²Pw·ËREqÑÍ”I×BT‘ ]ÕÑZŒøà];ñÙ XòVIó»D§ q#ýY°ÿþ¥'óØ[Ç}­žó™è%BÙ’äÜ®oœí‘fv+Ž3Æ+) bü¸ãø›á‚bÒ̓uÐ@bdKÔ û3fÔH#«–ð¼•P‡vŸ˜K^v¤Oý°~ò»5ùèà ½áA¥¡ü^Ú¹ »=üŸeÂÚñR»²e¸™d©P¯7QÄcèòv"öJbÛWŸ®"«‹ã;8ëWjw;3,mxCÇÅC%½­;…JLïOxjxž8ËèqH &¬ã´áê‘GŒ"×ce÷ò˜J$cµ©Áiá öÔîÔçÃÜm¹¼ø²3­ˆüùmôø³œ¯"iP½‚jËÆ9BD;>¸?`
+ÙD
+Y¶P·‡!˜ø?fÍÞõ)ÞOâÁ­–îÕdÃñÍ{.nª*1³9îÏb9Êióœ_YŸuú¬9G'¢¦ÏEçZæïm­t $Õk„ ê“[¢WÊ–ŽHTèô,¢½ÀÔ¿/¾]EÓ:m¬!æëß*Ü” N{C2~Š|­,’¹‡w46žj Þó
+l]°ÿyV™Ù—ÀŠÒ£m
+uNÝEsh|†Þ½Þ¸nWd2$¨S´¤Á ¡Ú0X>”z¬£'òULÐ.љǵZÿéÐSCÕõñUðdÈAlV–•2·édˆs'{ßѳªÑ{Øþ 8GAÙL?¬çÔZ™
+ÿ~EØ/}狱IbeY]'œ½cu÷8ÔD)¬ tu½œ«RãtÓ¯˜‚A-Ý;]U¶ðú ¬^ߧF»ì,ó9ß13:cþ
+ð@ŸR7ƒ2! ä³Ô[ÏV yã9¢²)Ôé|§ÑSå7ÈìwÄ°†žd^ ƒ!s(Ž6ÈOËO‰7:f¨xž0äßt |¥èE´äίÙ- 58^)ŠØ¤›VË%ê²Löçt¹ÉÐΘcªWÑä½vô<)þí®õ»LϺl7â­ò¸lÔŸ#ƒ¦Ú¸ò¥žˆuá©”5Â"U.˜.…<ÊÌýaÐx4çcyaf2ï;< Ð ,5=ØÑzçO¶{¸›h mQÜx¬JZª¿±Žô»ÝóU°‚»k
+­¾0™wók!€ç‘øšðÒ¬‚¹ÎŒÚBl¿þ„·˜pÆ[;A!¡ºl‡†Öô¥×Žöß)À;aB’T½ö<©ÎÕØ&§À‹wŒiê[`?!¶Ee€u
+y3>ç"^8'‚œ´¤yùÉ %×ôª`çÚY+d#—ûO¥+_Ó0¸äßç}~Æ-»h^7ŒÓúÅ£QÐ<ï0€‚äƵ¿Ò äžq®Z˜ƒ@³S7^k‡~ÂÏw‹–ã*]Óç òD>Úc»äpú|º:a’<Ýñ=êéäUfÖ0—PÅ<¸XýjùÕþöÓM£Š4ÂDãB{wÉXN›À6 )6råÀO£¼s˸Ÿ¦Û`gU"º[9´yq|Éž¼ÌpÂé#ä¬ùôøéíïÌÎÿ,¥¡Ka#û’”bì‹dÍ–iæÓÒª9:Ðg¨Äjú¿@Gn±y—ÜÝ ²Tòör>O@Ætù½În㹎Àa½ÛÃY:¼‰„ùBÓC—„SîÚåvìã%ÑvQe©ÚF¸dÒö£ÆÇ]”3ÛP†óìÍBšýr‡„jú!1ÛaýNT\ÛbŽ\iLl´¿1UTDmŸÓ «  ä4zme”@÷Y9ÕëhÐ
+1EH —r•å£2©~fê¼jèÁGc¨t4Æ
+¼/Y} ª¤IÑR]¨ÿÙoÙ΃u=Ü…—Îî]‚¾ŠÌñ 䲌ü Á ¥&WbÉóéÔ&ßgH^.¢ˆ£x<˜ÊϸØ8T™w L SŒ3‚c˜-þHU :{³HÌX
+üØÛ°¸÷üŒ‹É÷>!™KʼiIªŠQOì d÷qòë<ùnnu¥¥$NÛ³gΘ‘³NWk9ǘDÙŠ]÷9Â2¼)x
+ƒvêZù+¹¶ ¨~±dÑÞ:£-Ê`„oˆ”‚ˆD“¢;¢ëê΄tÐ2MêàŽ>nÚ¾¤ÜiöknA [°|`¡M÷[½œiÀq µs¶Š®.åžš{˜m]ßšèd ’mOváT5oä©äÏM߉{§âÖ!Nbm°±±]ño¤4Á^‘Ðó]‘Q(,Šµ$ŽÄX³~É/à׺_+{K«D?ñfw‚|Îxo;Îá²×,ÄËB0À6:[¡Hôìò²r¸FãFŸ}(*ÉhvY@d“éßèÔ¾zÆx{¾ÖsÈ—ì/oJ‡Œå½xwš…¦†B¯-Tú‰à’ØEPÜo “•WÚwW·êZá|ý~¿nùxÜõg¹‹ëœwZ™à×>aF¤F+îc yYßgö&Ë)¨å¶;;C±>$B¯þ5]Jb_Ò‚¶Û3´ô4Ç«*ü¦³ƒ–Dû;Ͷoì鲑…1Ô˜°
+QpPŸja€hí¡ŒÀ›Ÿ·Çèñj¿3+YPÿhä$ÙøtÇ¡åÑkËGÀ¬ÆO‹&v7n©Ê2râøÎÓoÖã·'&Ipq^0‚[¶O,A­»„º*ÎPçüªJØí›MßÖÑŠî K¡›ÕÖçÜ—¢„"ŽÏPkÖ¼ñŽ“tjßÕ%–µ©ºg4¨H¢V"JJ$w
+mºWžœf¾·+2l¯{s™gb ñ:¨7œ>œäÌïDµ˜39ðNWÁ_Z¢Ôðþ0¾ %…ñoÑRÃëª1F.1ëÙLš˜W€]GU OÓx3è1øÂJ!¥ 9&™%¸1¼¨$Þuåܙ肻Ãê….ÈW£†ÓrÓ )Ø-ÖGt´n!ZV™ø!¤Á¦å÷5ƒYN4ƒÀ­ñAXl¹Š|AZ+#eÊÕ™ª£”êÔõãÙÃèE²³­þ3¹Z9<º[[&-™¢¥^ã<õÆgo1'j[;¶´™H[D²åh…ô‘yĦ”º ZOæö“¼îÀ±Ñåæ$ð ‡u‡?{%HÉÑŒ-®"*ó¨í’Öôö”ÇNf¡HzÒK,75…‹üÃI8¯`ÕÏË@fïÜlj¾Š1&7z×gÅ*ú§ú2˜Îà+›ÂzÈGyÛYå€wÇ k¢s®„dlÄÎRc®6¬®Û—¤¦&¶©‰A6Żֿ˥O®‚ÂôPñ¹)u°{‡Úuïí³4‘EÝùôg]N§‰Š~˜á4<¢ùµ‹=
+tŒNjÅ_—ëBÝ=pŽL<!kŸõ¾/;B:§O4¬8&—7>ésªXçÄ„ò¾ ñ<M÷á’Û:D'zÍl©UM¤$ììšÏɘ­äsyŠË*Æ;GŠ¤_P©+áš[X,«÷å²9‚µ`oŠ5öçƒO˜D ”Ê£êE~‰É¯äžEË4ó`»F* AŒ=}Û›Šáp1fÛ£”ÌUâ§i:‚„f
+¹McìQ§½;4¯¬Ânå 3˜úCzþý…'4[vhß-¼‡*åÕm¨z;Ÿ\a×Cl‘Û_wižÄ)Ä«Ù‡G—ë"« #øÕo"!RRá/þ|™4;×Ü(õ½qïÈ‹¯ ónž=çËét=1ê£"al)[D™Te< ã+3n¼Õxß#Ez¥-åÀõ¦ÐBÿ,BHf=ó§h\ªÒG«×Þôú܉&0øY5i NqLD;jãî³mÇfòж®1/S·±ã»Úò¾µô¯XØÃlZ±ñç±W ö:XMÈ›ã=iyÑIØmÓŸ$ìˆ}×Lê4tÛW…7\«\êË2)ýWÃüÄO:’5;6›ˆªË0¿ç†Åeœ 7v¬šÃ<óŽ^3¯–¬àE$æ¦5 2¤”C˜¬KàMLƒ`ð#ƒµõsÕÐET/ˆ•óCž:JèoHÐÐÐNºñUßÑ`˜Ü¹û„ﺄY@ûÌô–žˆä‘¦#¶ž¸Uu„ õÕHƒsóÅã
+”%Ó‡xþ ´ÙžÁ+R…”s;Ÿav—Tp³L;ÆgÕ­5ÍŸÌœ[èx_ñä–ù™ÑÐ}ýU9Œv
+1}
+°»0ZI+2`<{b 0ïì¯å0
+,x…¨1/æþácÒøúëÀCjÏå ™¸e~Û¯Úmô몤Ϩ=lË“©åð‰¾PîÛ϶ìű
+‰ÿ˜‡I'n§ó¥Ò\s¸ª›‘îäÿŽq÷ÑZu娤ªqb™³€Ý¡­uYšˆšÜô3¦5ß»£(y/RYf¨I^¢Ú’lÂa4ú·Úó8yO4Š¤ûÈúâÏÔ!VËååoï‚OÒ Ý×I°Rß~5HTfQ×>ž‚zw:ÝÐœ—†•-[JÑŸ*pØí<¾2™és{Œ¯ˆlåáÕ‚_&`YŸRègRUEl
+ur\Qåe^û UÌžoãû«o¹
+â Ü®
+˜§=.Xø?i“úï)ûVöãà²Q‰¸= S|
+›ÓÊI§v¨¼f6Ù‰Šg¡ôëªCê ìºTé4݉uuŸ/cÈ¥L|X,@¦,¸Ñ‘"‡þH^ÓælÀ(vFs?Ñc;ί5×HâC—Q‚;õ;»È@ìÜ)QùÏŒCEé»n¤!Õˆk躪zQ”¥TæJ¿T!ýëÎEÂÀ|%Æ{W½ß¡¢;ê*&þ³6Œ•O»}ƒ^ÿ€í–šÊ+˜ß–3¿G˜Qª2àb–k<ªÝjxßê±Î7`òð-óq ǤIy±VǺ*{e{üªÙUÚïHÊ]4é}M25µå˜<£u€dÑ@ÂÜ<âšsN§ æ±;5a¡6’¥x7§X„Þß –L¬–E¸*ÛÌcºÄÀh×Yˆ˜Ý´š€J]éQ;0OS0.ufbyšá9ù^º&aú½mævüëì%]è¤UŒ—š¢upŠèLj¿X·¯ë’Ï^JyQÄŠÙíÿž”kº&xp @¡(é·0¬9•Jò„èé{ íÕ n§—¼sÊ>Î*ÊER­1.pÄPKÁíäWÏn(:É÷B†ÿgÂp„tË$û¥›*x‘ç'9uœ³µS™ öƒ ý­z“CoWµó¶\ðâhiŒìêÙ?…ãP ž—+eŒ}ˆzO²žèõÏðž²LöY!ÛsØèù\AHüŠÛêwƒo™g¢‰é^üÎ1-*Í-0ƒ_º®XáûÉô;_ìw8Û+õ4kmÙÛÎ>’1<9
+ Ž½OÊ"\i&les!ÙÁÃnÊ”¦S‘ŒïŠK^oHk‡äùÌ:BáÞ󌣻SŒõãMLƒmÕ;îŠqEsë@P**„6 áG=V,vÐ)ÃnÛX“=UÝJ‚šÌSZÿa>dU²D¹¿NÈ¢y~*‘Jµ¡!jó¦ëé‚t¥®6/Ráuù’î^T@åïÊF›¶t„Ioþ|!W[–<sÙ‚Î2Š²éÈ—öCðÞlУÄC ¢¨)°~<|¼ÙÌÈÚ[BÄ^à
+ºÊ0ϲYãH('î‘“²__¡Ô2—¥Ä>åT!uã…WªgqõzEê±ê3`Å1E¹rµY¬PñdìuN”ƒÿV-*™éQ¹úx4²%Mù8pì4œ˜y+
+gÄÀˆ—’H(øÿÆÝöc-3YCOXYÆ®÷Ë”ü—nE;yèéu`ÍÙó&e@v+rŸ-ã…DïÜLQgøÎ.ÉáG~+çGlý 
+endstream
+endobj
+1977 0 obj <<
+/Type /FontDescriptor
+/FontName /YIQMNR+NimbusMonL-Regu
+/Flags 4
+/FontBBox [-12 -237 650 811]
+/Ascent 625
+/CapHeight 557
+/Descent -147
+/ItalicAngle 0
+/StemV 41
+/XHeight 426
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1976 0 R
+>> endobj
+1978 0 obj <<
+/Length1 1608
+/Length2 11068
+/Length3 0
+/Length 11895
+/Filter /FlateDecode
+>>
+stream
+xÚ­weT]Û’5nÁÝ9¸»Kp÷ Áƒôàî‚»%xp'8Á]Cpwww>î}Ýýz¼¯u¿{Œ½ªjÍšU³Ö{S“«ª3‹™;˜¥ì]˜ÙYØ
+
+Ìçä%Ì
+=ù@w›ü¾\PiÉãG„`‚ó8Wf1ÃjgCƒØV’D$bÔDG¬d³JùË7¯õŒI3
+oˆ‘\'áÑè´,ÐomíPÅÊÂÅ÷ÏßÁá"LÐ8ßê¶Ùª ‡Ì ÊH"?¨}¼±æÑ Ú® oÈÍ¡cùCÙAAº‚¤¸A¼wRÄ÷»J¶v#ûèc®…ÒA–¤÷Ú´ªõË Ù˜cýPÃø·v'é³ý
+óá®Oýèƺ<䲋!',k~
+)E›¬ÖKØ`N\Ô¦`(O‡^Úœ§ïêETZþG"…óú \*qðøÜŒ»È£±[ æ!´ll•ˆÒ‰‰®–вòÊ (âá3²Yííúƒ°þ'6ªØ¼±}ºÿ)
+Q´Iì¯ÂS ×9É nlo3åõ.i+<gi 7cbW kEÍ»¤V%OdmH}/×ȉv^j
+#Q*Àö•ÿÎòQz¦–e ÍCöjFÐ
+¼óÆ>Ø]ðàå¶U`ì E¹‹3s–ÀEWôÌ´aï1ÉwÝžúÞ⊶ùý©{ü–6Ïà§\ÁtolöPÞk!2ñîÏB©#¿–ïsè•ñåt„’Û§bœ£r4?–òœ‰Éñ£¾2ȹhBN”J˜OÈm3è,œJ_qšš©¤jydOú¶$fÎñ9Q­ØÃXK|ta““d7q,Ɉ"ÇK‡‚­%õ¾åûð4Ìëg0!:7‘\N”>3`ú($8Õ
+†áv§É~W:©­I"Aºªp2._yiäîèïI¢Ilû‰SÞpX
+wÆg~ÓÍÏêlOwL€æh¬¼M©~=Ï3 Œb"È”õi¾“NɈdVl•i=ÕZ3J‚ËUtØå<l˜fL´—ý¯ QDÎœ~¹8¡´Jü½åŠÂÃþ£›™ú¥âB¿à™«ÌãÍ©ú°Ã³€Ù¬ßŒ›’{ø·(‡¾ŒaolYÜàEèWªmFU=Šg píáµÏ°¦30"ƒÖÏm”ò¦Ø“UšE…]¤Ù³E·e-·âL£”H•xŸ†zƒc…F–_m‹PZ³
+7…ºó[%%e¬¶ž?û]^3âs Èav)Oö¸+_ªð„B´¢%&-ÚT]6ÅôL§ ÛI[VÅty‰÷ŽÄÜF gLHºÜWàÛÐDÄlVn…o#xìÖlèfÂÞŸPs¨[Mwl K¤g>%W[Òfè¼#j8T¡?Ðó
+ºé¸°‡”5lèùuõÒHˆ þ„èìò¼|ŽBµ ˆõã}¾Iq¼¶îçfÞ¤ÞC”_;\3ȧYÅï*{œuøývŠÉ/©OÖ}·°ßc7ŽKéÔ:úa;Ô:Þ}­/ä+.]Ÿ†8û'¯vg9ø7ÅD‚½cÔÒãô•³Óռʑø”búÏþ“§
+\ÕTµîá’?ç<‹ÃsõÂ`ò)z%k8¿C¾ôö8Baž"Zp×®Ú]HEÎ_öäuL~¿½\äEX †Ñ ˜$(nI–ñJ:Ysi£c'V‡+S”êRz=1ï¹U¨Ã=€i$ hK’Š†$ðz"î5ËÛ÷°ÇíV‰iñÁд”£® %Ç > “éU‡ñ¨WÏO) è5ØâÀ„‘ànOëULŽFd$—¾2ó/õÕÌü ÆY¹_Ÿøº*§.Ÿ²Ò6øͯ\øh§Cª„;XOô˜¶ñDÚ™²Xdˆf{;é)µ$æ™=GT¬)»’NE;s@#.ujÇä¥Ö3€î° Œí\G¼üca *EýóϽ UÕÞˤ̑ ÇE·oÕ‹ªÆ _t19^Žé¬Ò)Æ|µPîÓNû¼nʾ_ð1Ü0¯oîMƒC±ä¥&âŽüôJ™{8£fó` Fתô²•‡„ûþÚëÀ!å$K)îPš]‹o6oM>UÇê¤Áõa óckp4¢wŠŠL”Õúbœ”mAªq$)•2ùìÒ#0Ð_b°0>ª²ô5›ºÐ¡ÍŽS…þê` ÂÐJ)zR ;3U^{%;—LÏ›rø|k­TDøLãˆK"§ ÑRWHЭP•ò‚™ÿn
+_ Ä|¾VëEÃÞ;¢‰uíψ…ÇÈÐSx+Û—¢ÍêSǟþ„q¬¿*–w•>£rú }ë¡ÖI¦ó-ëLAwBž[NÂm#SèE—ÏäÐ2ºl“ÓöB³¸fÒÁ5>σíx3¾§×RoÓµlíNà ‘5ôô–{×ú¼ÁöíYaè£ËÒŒ¢7¿ è!Ã
+bˆØ6 
+
+NÀ Ò¿¨Û¹ á«D—â&ÞnÆ¿b£"†ùãKÉ0™`QÃï‚|+›FT}1º‘<4ߪÖÇíáS\“œ`,KÿÕØ•k'â-¢-ç€]=L ‹•‡:—Ð D”CÍŽsˆˆ]ES³ÖÚvïq¹1Ý”ÀcóZ€`yÌZ±—_XòêENN§4?>wX‰C¹’”Ðr‹xC=‹l°qk”P¡^LÜŸÍzs¾ßÉQ¥Û÷°\IªþtMÒÈ•û¡€]²³ðüÑfÆñÀiéVÇ´)BŠcÝÚ盎¦Ar8w¨¦y7ëäOáÓ4‡
+Ágƒ¼±Ìɼ¶*?ì‘Ò}/ÉG¨/žI†Rwô"j XHª=?èW}
+ê§Ý‰¨á\´õŸ|5àÞVø•.Ør¾FŽ<¸¢á³OŸ­a»('Êø8üšòp“Kr!H[CŸ*¼…ߨe¤7#±’Å®&~öÙ8 Óífm‹ÿOo¨‡K P9¤£ú['w‰¬Â©?[Ÿ2«bqú~so
+ëKš¨ó Ã<PyfjqÂé
+­¿GwÇê­< mí:\›DCæ—>PÀûw1Jà1u•0>)î,Õ÷®³Dü÷TeßìàYÀp95âødrtôVÊêå
+äg;­pÚfIv¤É@Kx&³ÂF(”Œûj}òý—È”Û(äå(PÅ~¡OÚ8Ž3å®Ä×&¿.õcTýþ˜0æ£ÿCÝë£dÃhæP!3–¤ñÛq(O1úÓ§nŠí GÚkRÙzú,-l5Y™ŸVÃA<í§£`åµ›Iq%c÷™^œÊ׃ˆ¢Ï…i%õrÀÝ Ú•ñI¼.?£ö±¶Âê`åÂ!ÙtO(BüCuŒG“iäÄÚ¥Ÿ§l ö†Ü}þTûÇŸ”Ï9iy_MmHÍÐ|üzíþx@]d<XßÜ2>uSb¬_ðm¤ï˜£CK²åüÔ>ß<Ï23+þ*þ«!轿T€ø¡X|•ÂS:8EyÏšÉÑñ ù¡/uŠõ&>ï«WÉü‡qTÞôìÚþ&¡“¥þ§UÊ2tÕWdºÒÛXQâµN*"Ì[î*¥Ø¸® ºU韧?äŠÁ½ZðÒ˜ÁÆÌ)Ì.ª<ÉÄ¿Xeÿã?mXœâ<˜#ëN6³U1=4Y"fì !·ÆÞ2"æá «üæ÷JÝA7ÜÎn+Í>Êf 3¢?Q(Áœ.lÐ G7UÐô¾Süøº#’¼é’H*Áp2@5Ëj ¾
+Ï”hß">2±«ïa$ù›ä„£duqé¯1”M£RD¸àV8ÛŠI¤6–\ãõÝ’"¼~^µ!¤ ÝƦI®[¾$”S?l?É°tßN¾#‚-ÍcüæÐðpH ØôvJ´:wŒÎ]¸š1È*LÖŒ¤XÕ\x£ï÷œ5?I?Ãévœ¡óœ–ÅÀœ' >ÏSO Ó ;^]ð%ù%«‰2ñÒÐоÅ|ôGÉõQãìbž"Œ`vvw?† •ªTPºöß`‰9šáùºÝ €Œ¹¨î.Fãgîœ|«UÏ‘t/~0¾¼CO׺JfeâÕ²!ÏfŠ´'ì--†&Õf)‹ÞLBÐr
+¯Ð{8uAží¨v·H ÞáùÄS~÷0™~kSœ£­€·Rd ò^Ûä‚ë3øóc;ÿ­1]ùòkê2ì‰(@ØFªAÛ~‹)³/ /§e0ƒÄÿ°R­äDŸÐ˜hêu^©`s ½r~ òùáH9Ë‘RQKñJþéI_©çÙâK¢¬Æ×bUó×âßú8æíî8-^ùmÇhc­ëÀx%i¯8>ä5Š¶òr[:éS
+¤b=»ÀüBñ œÉ†ˆeü
+º2Ê^I| &AÖòhêÃJÀyet…õ š$ú÷Æå3D¯«|ÇÞ7æÙž1>ìžá²36„ãúp¡‘¹NµœŒ¯†q|ÉbùŒ“D™7ÁM¼à›!|Ç”1NÞX­Ã_Õ“gK`2ÁO˜¼¬˜Âl„Q¤*ñÐpž…X8Öù¦ƒdxÈιa’‚ða° LíJ¨lœ gD_­®ÂÉOMœCo_{6SùF,`1îŒOg·0‹ò
+½LºyΪ<‘{qê×8ÃYîræ« ×ð½ãËø ¦µªdF΂•%_LŠMpc¤–Íà¹Ûs–;¦9®µ ‰~‡ ûqqçZ`ÂHæzÑûkӵǎÉëñ†0VQ%a4’O›ŒxÁ3b‚:ížH&ñTdX
+ï槫mØŒ¹$b…­ 0úBz‚Nö,áf/™JÉ6ï&Ç}ÊÇGÐÒGòŸC?*AÐ7 C¹’h¸7uvl
+»”s§23 ‰¯Veçê)SÇÉÁ Rѧ»óÇnPX[-
+ZyÛýyk_¬˜CbîÓ-…ÜæŽ)ºuÚÝÓ£A<a!ô9/A·8Ú‡X®ãÑžGþkâfC“O é•´½4BdÊÛj|ý¸¼¦!Ò^ž#k¼6ÐÏ:½òO^X™hˆ`ª]ŽUŸ°ƒ•÷~¤WŸy*E»˜ro”\­G•ï”ôÍ)2[$—é7 B}/Iöò `,r5èƒî¥<&"ÊÉ
+ËDƒ¯ëWy>
+CxM¥:Å´ˆçë©OÞŸy':›_a—4þŒ"ÂY¿}»ykªÛÀÕ„½WãuùfVdÏ·¸òMο"8E¢>YU  übÉ~.¾QzáUL†Ü#Ãõ¹> @uùžb¼Ïþ(0(¡Ò,òz|íM®ÌS³1gȽl•ï29G†A¢wÞg?96 “®8°jDSÛIð´)åUÏÓÆuÄ÷Á€
+BIôÉ”:åN‹¿ÚFd +‰Î8È„E´\Ly=æ´n
+ñçüC]ÙŸ8©K*™ÎG3V©ûòÈ}‘,cù(?pÎûlIiÃI—c|¹'Du\爌vKÁ[k¹ç]n" »]vÔ^¯~a
+¢è³J‚l'¾“ˆp~èAš {4H±3¢g½95ûŽ`[¦¨ú´ÂÀ?Á4 ò%Èð8¼¬©»»ÂûúŠ)Tõ
+Ž{±ƒpéS¦;'¤¥T»@Q©‡ªK0¯ÑxšÕOÊ¡Ç™$e>”'Ò_üXŽ·¡jˆ„çBh÷¬^U¼ˆàzH&¢ÒP{„jX{ìµ£(Ã߯ë–8ßk'Ð:aË$nMº5­øe³%ö³é>g„”ÂŒ¤àþ’7?wÝiCÞO.ônHèkL°\ÒH3 9¡ßhDÄãwhzùÀØo\ùå®ú.[5‚¤Þ5»Ô­x/°
+9«²¾&G£ÄWíî''}LœÐCöM1¬ùe{0jïp˜ûsMuˆxìB2Qy¬¼€ñ-ÔuÆFU¢Ô¸à»7ƒx1ØO„^Îs¥È00¼Ár™—f£0ΗÄ7¥ìäaÕ.€ç>ÊmTMùÍ4Ç[¿?È ´f7bÀ áˆ3†Ÿ¾Á®Ö‡Ñd|xc]Ëð6ê»p!ÔÜÙ–õ.eZÅA.E`”)kœ6º YDä Þ¥‹ß¯_c, ËN ÝØ)efUoêC¥ °¦v•€*HP:Á©6 Äe?úR‚˜ßîøs"·ìQéL5\ 3b[þíiª°ü ªø,ã©‹ÌÜD¯¼‰ÈÙ€8Àž-Ž…HãSÎçdò
+[›>2WB¹…:ú€ËŸ×\CU­Z™Ïyú&6U ÂOþaÊÙN™Ï32S¢F´+ìîÏ'°!sobýt«|Óõb8³¥îDY(îGhŸQƒ_Ù%³‘¡WºèÍ3«v«Måì£se]F 8Z¦>Ø–eA³Ò¶8®dD_½?a{yÝü¨t¹40‹¿(ˆµG8qV@ºñ©Ô Ó)Q­»åƒ…uù vÂÐáûš ¤¾2³ñÁÑ«á}mu-b˜M‚µý$5 £¥ùZZMLŠY\ŒáO³uLåÕß Lì2‹U' Ä(™ô2q\C΄šLV?’[ÙR°±Äwç« ºtA—óÛ¨xcR89¡†]ÜÅãÝ…H-vÞRAöHÃ@ßê%ˆ_ªŠKÃ8
+mPöŠ«ÖŒciŸÊ6È©Ã|³‹Œb¬ƒˆÎô¤yíAƒ|lïc)`Ð
+ò¶jHO¨a“þu˜7è*INcœà¬Û¡›"•4ÿ‚mŒ3è•“!|—¯ý]hY@Á½0KàX˜Óy ˜ÇnÑ›æØs°Äaª<Ëè³ìÏû³“UÓ·Ìq)J€¸m8Ù̃ Ò/ôÙô1”C“ñÀivâç3dö7L1£ì‹+ôzÎ Édñ¯Ö_ˆ´%ñÐ1²WéÑ´ø~Á¤®c{Œxð"ÍR bHq,L áù8ÒêTL ¦t€S«w˜µòy˜ûÓû ìæÏ áGªµgö=¤¶ ùÈ–›(³ëk<@mð­×B«7S ‹3vµÉ‰ÌP¿tõëßF’9YÎÒ¹$dç 9ÀòÔwæ¶wøYw,4ˆ´Û&w£^öÀš=ˆ²"ø¨Ó†t¢†Ü áJ„>!$+=†÷ÈðÝ6J ùoö}¨B‘ºËú]Æ—ªXj÷ÕÔ…†×šîZ?¯-Ò0ú)&v7½²9°xiìUÓÁŸ[:%­HC´)}˜¥ßˬ)eu\³7ù“Ì×
+ÍEƒÐYïLivvæd[ ºÛ`¶SÓo©ïÒ¹þ(Ø!Z¡šsÕq°gÙóe%µ 8¸u|4owaúØMz8T}ŒÚûy´ÉÅo¯F¢P舳~Ñ̓õ3–܉Àá¨kέ:ªM\M_¡ö¸W7×ÏgYœZd·ý(\AY²^ñò×Ëùò%ŸÚ5;Š}k/©|ªé~¹ë¼¬Ícáý¦‹.-áw(뤷$_îlã)ÄÆ$e4xvç]*!q"±ØK2,l°|ÓÌôÑ’Ëæ—ÊÙsž¤û¹»%¹íDÒ
+Ä—
+ƒýÜÃ;,'„dbï|ý_ÝŽzבHvÞÖ£±Î`»Öi(Lâèõï7g/:Iu®¢0=hüô§¬I­}|ÉÒºXjMöº‰Ë;M`{åò
+£-0Œ<¸û¶S¯pº|‹˜ Û&Z‘ØD“1ÄÙìmà¾%+*¹1‚é%i‘U(ƒ¬íS¼|ÛxrjªÙou LŒ¤9Ÿâ±ãˆxqÆÐo°¢CuîI4âJr¸Cx,ŽÛ ìts‹-ô‘îø¢t9-—}U™¹ÌY%5ßÅ渣Ѻ´c1«…oÔç-\‡¡™êŸá]gÃ]t|¥<غÜž·/¦JSè«A.‹®ß’£0´;‚0k0õx.LPî )»é›½=
+üìì–
+à­åôµÄäS¯ÈÏ+"%GŒ–…¨üÚÔ@¬˜™ÄzYjÂm}kýñ5Ü¥žÕ¦³jÈl¤£jûe¨}#³`7Úi,ч©4X[±¢~6ÐƯΎ 3eökð]­k§sÌ_ãgš4
+?UY¡h‘CQ¶ƒ¨ì!ÀP4YŽóÄÓPÔó.ÿ! 2
+endstream
+endobj
+1979 0 obj <<
+/Type /FontDescriptor
+/FontName /IKHYGL+NimbusSanL-Bold
+/Flags 4
+/FontBBox [-173 -307 1003 949]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 141
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/a/b/c/colon/d/e/eight/f/five/fl/four/g/h/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/seven/six/slash/t/three/two/u/underscore/v/x/y/z/zero)
+/FontFile 1978 0 R
+>> endobj
+1980 0 obj <<
+/Length1 1625
+/Length2 12510
+/Length3 0
+/Length 13352
+/Filter /FlateDecode
+>>
+stream
+xÚ­veTœ]—%îÁ] ww‚»»»TA
+ww <¸[ ÁÝ nÁ=¸»ò~Óݳ¾é_3ý£ÖzîÙçî³Ü³Šš\UƒY è`’v°wefga
+x·[:ü#ÈÑÙáÝÃî{'Supqu±p;ºÞ£ªJJÿK§ë'3׿±]Àï0ÀÁòÝè`áö7¥°wšwÔÕ lïpyºþe
+ Û¿Œ`i°'¨
+vµø°4³}¯Ö?v­w%ζ`{Ð{Wÿ)(€™íß0ÍO` û¿åçþz_”ÿ¦ü½QÿèfU”—ÒRÐgüïvë?žªï3àªéåø.îç¢ä
+;Î|”ÊBç4ºÝDç¾L<”šµ`$F”|ÅDýa esüFw' Moï•Û!ï>¹q–Qiú¢]‡“YWNð¢J4A,²öëTÄ-éD­MqSïVe YBSøž~œøŒæÎØm+w+oüÕYÔÝ)ÿof,³b­ö¾ËVabòÓZñB³×_+
+þ"6Pn7ÉñÁØ»7AÜ>[‘yÜ(`N3*á±”c9-^Yª¼Ý¦ÙUŸ I‚!*1¼m¡þŠ1;¶ NÁQ &bêûNiWbG³rˆÐ)lôíêga N³Ö㵠浨Ï»ï§>Ë` u¿ö%_ÞÕd^Œç~?óšæ4Þ¸¡ß6útq—Ÿ·›Ù¸‚ê>vë º³½°÷
+)y•;Ä@鵦÷›Æù4ƒm >œ üÀ0þÜ™ªŠ¼—H°y¶•žÉ´<¥ìþéÔT3‘=%Rò½ *d
+Ç-ºÄ¸,Û±çÎ H¬%2G>z&W4Uû1’EèsYOµ7ˆ¾ a R˜ŠL—µ¶Í¾8bxÍ£þðÉRnˆÕÅ#­Â’~q݇clÍ­’ò¦Þs…_„hFO°öÞñÅ ì†I¥Úµ”
+ \ØâÜ ©½h„Ш;)ŠÖõn3ŽËíkr'«á:Àœ.Œ\6„oîãT›èyx
+|ìõì|3ÕL¡²˜#@W;yø‚"˜Ü±–¾qP%o›¸¬
+f½:Êžn ZLúïK&’f7_ËÜý·hvµuqh¿sv4Ûe—oõnƒò¶âC6Tž® ŠHMžv\D"Q´¥c¶Q¥ž§,,u¤a\TU!’‘Ns„—O*¿ªÓÏOÈíwAxIÔ ZºXÆà±)dimüU"‹+é#€ÎJ¥•˜Ôòz4
+1yϦXWpÚ ¾b7{®¯( hÅ¢@65Œùs3ÓBÊ+¥¤N>›S4õ¡üfØbø=Y3‘Ÿ=¢Ö¥!¢byÎðEm ÅЙ¯<BAø[º^!0µß3”‹q[0¾'S2Ej¿ahXîÂd]h µ  ®4ß=ÑJ¯™û
+³¬ðÚWúÆÙÑ’à7Æ›!¶WÞ2¿GßuM!þ˜Ô–æÝYJ¬4Ê232VO¬=ëHöö4?4!˜uS¸Cá­…íØdÿRдrQ`bEêcS±’tÐï2³±¡T5ŸÙqêW­ýx×ð2*ØòÒ²m=Á․hñ©6“µÂœ¯Çl> ×@lSø@9ã¼à¬rNÔóM—ºîùî¾ |i™TË“ÏÚÄÔô¤¶›Çiþ¬Eùöi?fíykóoËc&Æ}Aÿ´Ö|gx{|Q›« 1缚%U¤!Òk6`Æ­N]o™­œyÓLé¬}d-`)KK-†¨ásA>âG'¦¼×ñ³K"Tçtû‘ö Œ®ûçeÕu¼šÄqÅλã­WõpÊá™±ª;˜—ßÄ”÷š³qQYµÙšÍçˆ?˜–GD=Y£Õ­â¶.¬Ÿ3‰h6>„áL½ŠË5¹þÞX<f™°pRõ&
+Ôý€?÷yúh÷2O&ŠªØqëfµ¿Ç3ùVoçH°
+ _*[FSÿê
+’§ ø¾×ث楑x–)v Sxè=; í+í\HTMn‹‡Ï‰aïýÇÅ-ŒC¥aJ"9§k¨rJ!!D>÷¥QÁ¥5÷Úè>c£ò æËkÄÏäíéj n¥j‘eó
+A8›ýÀš›Ú‘¢¤ÝÚ
+Y6›‘%Áõ´íCtŽ>(žµÌJðÝÍ„%…£3ŠyG[]\ç}Î
+ëja%I—ûÇè͸ê¼5<Ç£¾œ9£Ê:ZÏ‘C‰ ûÄ/{§ÃZ`=ÇÁüÖ;3i8*Asm64'±TО0/­Ræ±­Ì3Ô®0ýد3ÐHöÀQs"ñ´RXYõ#ü‰Ð•ºL…‡ ÉRÏàˆx¦gRü´-Õcá´8…¬qêÇ*<µšPÓ?:=éÏÂÇDÛ»T“Ûq}jÝ×Sëœ-oK¼Œ´<ëÇÈXm¶Â‰F Îgki¨ñ¸aÎ
+dn–±wH’W»hˆ¤iz*UGwnxôG•µ2ÊÍ‚˜_¸lóª£ÔPôö¨|z9îpúµæÌŸ+Ù‘Ðù Â1¢%Û*¾P]pÀ,]‚±b ùµUçpM‡ÍúêLD†(`͹#ÛBöÕÙ&¾í,rkK®K2®®…™fèF3Ëm® ÃØ È³û“'3ò0Î*•PßA}hL0Ž»ÝŒ©þ ¡¢5i’ìÃÊ4“yo#sz:®Oµ-}œOgºv7bN«ì‰Ž=èš•Ça’‹ìTDú+¦:Ë’›dIÖa'GÙ^€héôv–é«
+£iùå¹C‡È{¥¡¦‹shÏfuÃYFxô2–ÌUÊ&_Ïÿ%­RØ 7êÇ=²"Š:*jŒ/I(¦Ý0F;„º# _†§ì9â ¦”ã"NNR£Qz
+éÏ%†¶±3›~N!Hnk„~åî?“n.ܘJÜÒx~,`q$þVã¼.ÜH xRÁ/ Ý4ìuöL—ÀZ:­Óg»¤ £{^’ /âµÎ{.ßgKù¶ºÖàƒ0C êÜÝÛÍ‚nw^×YI}½ùwºyyˆªA³R›Fàéu(rrqx)ö„ž`¬µä”À…0‡Ø­¹ý …‹„ù»óýË‘ð‘zW#.Ä
+¾.3g~ÆÜ•žØ=¥à²ŸšÅU5·Ýñp³þôî ÙÇ‚šŽ}žK\ìsißÏÈǽÇ{Ÿ7øvV½ ¢WÀê#ôãFÐÓaœ#¼i”uã`Š/~‘ªi¥¦JD¼>ŽÎ'æPþtüŒBò½œ—ê*'N÷ \¡u)(hûÍõ¡‘k 6^èxQé–%³ Œ#ŠïE‘Íނրجš:4ïñ‹š”l²È/&~Û×…¬6ô5ÇÀm¼$‡¾s
+O5*žpºäÐÏé")˜R3ªµáÓ¿®ç Pižæò3ã`‘„ÿYN8h”L.0±P}¸ƒ½\05pÙ6‚2J™¶æ¹Šë(Š?ƒÎe¥+=œ¹#Q¥¾PÌÝ„tëê&Ç¡ÈËÕÄ©Q®2is™»™)–»4„üJ
+`xcñ-”Î_Y‹5Îe­ ]î®y4 7¥€jQu „¢Ÿëaà S[ª‡hu›¾`®‰’âǼxÝ„™ùI
+P;ÃÝ̆­ ¢’;e£ŒùŠ}«ö6|;a³Bj¢m6`FÈ=x×\j~dN÷Õ&Š·l†yVS/…cvÝ¡GˆwS”ð—X=¬Ø9—ùÂýöIh8±ûX’¦xŠ¡¶±Ð5ðL:Õ£ûƒ@ýYõô`:J{‘Vœì9Ï“_0¾È2K™Q¸É¿ERãàþ™V^bRc㔿:3 5-ÖF>ÿT„^â|ÄŒCê¦]Ã
+â0eªAÌ·¡Ô<=mSâtè»(u/«dµíƒ2Dµ´h»ÖÀ+þi­¨Gµâ—µÂ‚§Ý2Ò÷j_¶*òÉ”öLv“£…¡¬X¯‘ÓÛLP{9„“ë‡:ˆ\J%mFXZ³ é1éd¿&@“Þ1 pq…hº§Ù¢Íañ „ê ÿbð
+}qbîŸn½ÎABáÍ ¡ÉHŸS屉¥8Ì~U'8Öû&hÒeŸÇ±õ½m\öäg|ÄÛneÃ}qäm¦žÑŒÌý÷]Ÿê
+C†p÷ns|©ØëðXʹáú¯rôÌ8=Öá2Þ–•vÑ»6›§¥qGr¦ ¬7go˜®xƒ è7erÅ缺ÌEHKZCbvàÒ =äâ|r*RŸ¨Ò3|ÿcÁñýHi®jÕ ŽÿŠcú¯:°ß3 IÏÑYñÁÍó"0m„]~åñ6©{hW3ù)vÃD0(ìÚ6FÛ÷˲ªb%Ë2ZåÌ©1ºª’®6t iŠ1CC’(@ª½ã™×bº>Ñ b™zÑ\ÝðÛ^ŠXöÌÖˆ‚ÿF˜½ê·#³Q~œÌ² J²=SåT¸ðØ×{T~'JÊ nóß`fât.m ¡§q';Ô‚ñCçhæqø'AÑ•O3ŠiâÁfØ¿ <·90¬0ÉãRÅʦÚÛLûÀýø" y³¯kN5)ðAHp­0À²s;ÂtQ济7Îý´Œ”©Ú©x‡2&
+”m!mVeîÍMi3Ô\Á…+z'‹›\gxˆº¢MLX¿á-)©ÑÒN̕ߨ‰¶¸Ô£¿´«1Õvª*_Ë1ÄpŠyá¿ÎÑjýñ8ÏœdžÑ ^ëbü9¿¡c]wÀ×û‹ÑƒÓ1zt±GßÖëÉ 53o‹ûn«Ömö¸KáØÁ¡1ë'ù…è(!KÄèÐËÜ $_ùÖKèâHŠ
+z{>‚é¨õžh©b ¾ä ù3'Àì+È_PlÍkYb‘¼ID±+9C5NáövKbXÃ4\›FRl‚øÞc]sáq:™Ip˜d7V/ÛzX<—;ùS™ˆ´H¦¨iþ»3­3#¿1”µ$iÑ‘â TÝ>)¸¬ÄÇ?šjÔ¸zw6×]@f$>Éa[‘Ô/ \ o¦å£u1vß1¬‹Ûb*i+^Òf¹Ú9ZªÔYáüÅr~ä¸~â8Š`œ’­l>ö>!æ3 $9 ÷Þõ ³2¼PøÀÌü=:Sªk?¨‡ºÅlB÷†ù‚J !…CÌ…œ·ÑÑ°»™d.k¢¾\Öa4èVåpP·7GÍúP/,ÒLž³ÄŽèÁÊšÈanƒ¬V&´Z¾ï²>§ÂG !ò3©öѦ¿Lé 1/ˆùmRCY¼#b‰
+Uiˆ*—"ƒ‹ ƒ¦¢Ðc­XЉÚ%M¥ÎŠa=ìÞ'ÒçÎ’G¤ÇŽ½3õ’Â_}„:Øþ>½f¶¼æM¶ÈŠÂâªØרËåÉšÞiZæ Lºf„4)$mh`Æ糂âÂ0DoH„K—ðñ&dGtàÂ|9UÕ Hf8ô[ˆ+P*+¿ù0}m´Ã7Ë‘ÃrÎ_ص"ñ“x„©Û·§ë‚U‚­G´f”&ÏÈ·Ç:ûƒ¤Ð’oáÙv¹€õõÏš…xš@>OܘK½vE~'~î¹\[D÷+6Q`Ïq§Ñ¶ì19ilŠÁô;[ÔhÌaÓ´õwŠ…¤çRZí§µNL;hœÈè&Ó6!zx ¬SC±1Ésl£€‘¤9ɦդ崙/$ž¯]:!Úº¡u|»iÜH2(ÜÆKfšueZo9]
+ËŸwÓxe#t½Êçpú¼dl …ym»Ä¿,'–Ï8L¸aG«™z•®Y“€Cc^i“°œ¶1H4#aú›‹(áê¤9©•ë7^uªç|»|õ› _:×óN÷LúØæ£êù’æå‘ÈøóF3x×/¤3RDÃϧʷ‘}3y¢ô vÊG:§©ÀášÐ”‚*&_Ô‰Öêg»Ùyrµ<dEÐázâpl=¢/Z7ü¬¯Q¦<ì߃ï93âs†ð°C/tˆç÷ˆz G®ŒB)œ _ÇGXyc,–->¬AÓäþéÞw›E
+ÓõÀ¡!›Š"È“øS->šúdrAè†= ƒ£¿·FöBN³¼/4¸ª
+‚rWo‡CL:Í0?þgã·`":"ÿà¾''¾çßÒº‰¢Û-N|±­Ë’$|eÐ]œ^j¼ëÜmo—ƒ¥¹NÒ¯ìFšš—:û¬m )ïXáàì³|GÀu']Í%¿àÂe $ §¶æè»â9 ؃ýþæ§rÿ„„òY•ß–J£ŸitS¯Ê3Û(ÌPŒ
+ ’ÌË)L®2ÊÞž[Ti<_eWÊ´è^Õ…³èT‘#]Ž 7ð»-ª~ú¡*ƒâ*©áÎc3û…Ç]-LMÑ'ºÌ“m;8M£ihf?ÂZb•¼Ø¼àð^P2ý'ÊR¦Ÿa8Ü}¹X=ý¨Î§¢<éª,È5­S곩¨¦|ö'j¯KÅÁŒ€Òæà´¯ 6±š„~pË¿z Ó5!­À‡ÑÛŠ}ײ½+ÄŠrmÌÆ‚œ¤×fá#‚òþÎiX"·†šœ&ΦŽ#©M°‰NŠÄ`Æõ¡ŸW‘—Ÿ´2y$LÏFZ¨Ò­Nù“¬k¾=ýT0Ñ9.…qžyK‹„U tæeã¦jG÷²¼Z²>^´5G½”šä©»¿@ŠzL1’I“#PD.šoÉ=³b%ÞÛçÅ‹¼ Ø
+1}³J0Iµ‹‘»¸L„L_œáĘï&¤‘l°£,ÛòñÅôÞz¯óeðB¨Ù¤þ†N&íÍÃ=ñÞÈJ§þ
+q”Ç‹ý?VG ;¼\“!±žòyi\s3~°(¤¥A¾iëÄɯÍ
+œÅçîH¼AÆšVàB=z$o1*‚ƒ ‘¾¨A™‡pnŒvâmÔçT/7f¸+Ð&«ãÔÙŠ@ÕwnÚ¢l?9ì¶X`sf°‹Z'¹ïÈ<¼¡/Åk(dä
+]@•p@s•žE÷[ýÄ‚”%:÷ã`¦snŒ/G®CºÒ´ v×w߉*BgwªVN5Ú«Ãêc,¼÷!2yHFÓo£Æ7•åÛŸç‡û]Èà F1Jæq»*M.Q9>1ôœœkzÿgÇ8–|4áhXÎß>âB›em !ñ%o7þLh†A8ì«Ù¸?ºðÝíõWê^²¥¼¿ÉXÄ.ܯãË?t3 éýZ‘
+Û5²„kTÐí½‘DóƒhþÆ036â`渮](1š!6§ly—ÿù‰:ðm 3!Õbùú’Oê¹*š"E9ÓlÿwnÒ"@«=Úð;°£B1÷¬t‹•£í‹ÀÈ /ͧ|Œg¹Êé‰7ù?0p?²½@ªH ×’ çæÊ?B|íÃS]g—û›S~#oK<ÊŒª šK¿åBmø­àrðªÁ:©à!õÖôK
+´l§±¯žÄÚ5pnR¼°ž\<¬©Í …zÁˆ¡ÃPÍÝBÍwâ}×ñÆ*: 2‘Û¼5Ç>àõ''ÿ«u6ø-ä@Y–J(yÕüXŒ®¡ «€6¥éü²ÃÌ åh°NG‘=tîÐ>(§—­Jë£Ùå4¬@°°ßb­Ž)ª,ôï–Á¯ôT£sOãXrl
+¬9ý[£x :å˜t‘!Á<-Ùçµâ2¸la³…êaOŽÒœ±  ÙÎqsq
+`Dƒï‰JÅ8R,í.ñ‰áΦM|´.*J)°µýn¥„>pZÂí\“·ØX8ðrÿcO½›î‰(¾µ*õb_Òö
+|{ ñ1ãw/c,ò©/¤QfÛ C /´ãÒבzTa&ý`~úAâ"l±Nržpc…öeÓéÏ_è|–[¨%ÒK.á1“å™ÁR2é×d.ÊXVXÅýzŽ~¸‰G๡¦¥ê3$ƒï–ÌV…ð‡GP¢Å9È¥£)úvã“çÈùûWÑpÿùÉ*’åW¿^”•§Ì›/á8_$As|EðÙ4sAW?r!÷‰\Ô© ºƒú¦Ñx%‡ÙÑÑ"^.춤‹^«¥Íx¤‘¢: 7sGκ;NžÅ6Áҟߨz™&cÝír}IÓl÷ëÎt’ç/Ö˜ &þ
+`Œ¢ò »»{­*%q‚ø„)biËý°)ã­iql¨N¸†¾Xÿ(€Ú™FT„uÿpz.¼á÷œQ‚|PÆOËéšFôI[i¢Þʹm³Ü»mžY ÂäyGc±"Ñ“øâ_Ûkå}U=$§TØo¤–Ôã7~·;1«ŽÒi<Eùà #8k» ú8ñ6³44}´ýiÎ^]q4}Å>Žä»Q›Å¬ æXäo
+[*CþÄç†*ä4w‹éJ6?€V0:•¥_%¦°÷+<ÄO¬È3ƒxUâÀÙÁk¬ô1DõËBR%ÕTT!5T>¤3UÌz>f®¿WŽ>èdçÆß´ŒoŸ¹ò qõ¹~™"tÁ5ݯ*¹ <‰ênå½$Pæ*ºr¤è—<Áët8f©tœ­`{®!6YvÏ ö ùïªö­xFQ¯°
+4ë$ “X_Š?÷W€r
+ÍfHAzð‰d9„è´!é¡B¶§0~Š̱;|6oD×ušÌ±£ø`Žò3ñü§¶GëŸT´ƒ h&´¯­š—4!Òš•
+“deoöh\ɧk™ˆDד{kê¸
+€êIªã'´X:òæºIR/`žPî⽇dn®„9¦ôy*tVåR “…ÛÙüèÁ:—EóY%ªô™Bn§ÕÁŠáøõ9{Ý"ñÜÒTuŽÏá”î•9PÇñ©¢<€~Þm¹Þ™
+ÊPLÄ>È‘¡J,±+¡+¶_ w®õ S[N±†3:&\朋ürëBÃÀÝË
+¦K´9J-k‡ÑÛ^˜ázk¾l0ҵ ‘Œ¬0A$?QŠ=êŸhêÖ ö§ÂÎMu™BÃOk˜÷ãÓ$ !ôh!Ä"óbIÊcÉßo3Mþ…ER [m<h'èär‡ 0¡âÎïݦ‰À;þ§³ÓÕm4¸Åêã ón„Ç-Ðé
+¢ßüóÎ> ûµõ,d—W.È Ð—Ú‹nf4Ì 
+ØÈʯÓcIÖ_un`Oщü¾“,<²–6åh7Å$»›Ü–JËBéÿ©aI¬`YíQ :àbZéŠP kF9Y b Š@¥qkŸÄÊgœþrCTFýjbO Í
+m»ì€pçI¹9Iu‚PúH)ë;˜êÿvmÕÅ1<d-ÚÑàü¡[‹J]u¢…ä[ô<“×Ýhç/ŸŠ«Õì^æ» m*ê.òÄÇ^7®à³³}pCÕ²!‰®‹m”& ²5ÂWþÎ|…Šá§Œ°h²…'
+Æ1’Ä'i¯oÖ-0apn5UÎÜòµ“PWSW
+šikÝüvDÀ#°ßÌ‚M¾ ÿ½…¦x~æÈ ØJÔSPäsf¹Qþ'2dT@ ¼aø¸uŒ¢Z/ûtQµ!™ðÝsGç¬èØ&â’T&Ç& ˆ²ý›uã@äuâuÕZG7)|ô /zCND{‡ 4Ò’cAÒZ5ŽPfÀVùÙ̲Ù#2†–H÷ª»V;Ý@øq%žXÀò³3šÑbp¬þÐ%ʸù4¬ˆlÞåt¥”–xìç&‚’K·»¢vÙIÒb™ @æ %…èLÉ™ÖVM “ßü1|¸ÝJ
+]u©©E:7Ñí|›ó¾^'%–,öMøûÑ^Xª¤'d¤",mX#ƒ/QÅ-o‹.×SMV&¬3°ÿs*4ød¢ gƒ+„‹jà—‰v•pÛøÙ’ó?‚€V”˜J–¦³~ã³6„WÓqÐS´¹ìvn>^×Ph˜pzæT‚_­ZÓØÇßØýAÄ!²þ‚?y“Ë8õ¤ðaÎÌu æõš;j¦gƒî“¾ä´p ¸ù6Ò¨Fímæ«æ‘ñ³„R Èà¸ÞhÞbÂbEuB̪¬bL V0.¢SDF¡‹mø~ƒö’¬ˆÌU—#«‘){Jõæ÷›zE-¡í¥ˆ+x‚÷
+endstream
+endobj
+1981 0 obj <<
+/Type /FontDescriptor
+/FontName /LJEUKZ+NimbusSanL-BoldCond
+/Flags 4
+/FontBBox [-139 -307 822 975]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 114
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 1980 0 R
+>> endobj
+1982 0 obj <<
+/Length1 1625
+/Length2 8021
+/Length3 0
+/Length 8852
+/Filter /FlateDecode
+>>
+stream
+xÚ­TeX”í¶¦A¤iº»A@$¤Sš†˜f¤¤»»[i¤»;i¤¤SBà ßÙ{Ÿë;û×9ûÇÌõ®u¯u¯|#­†6§´5Ĩ
+üwjújë
+¿ydd n
+bý{i´`ë‡=û§â7låƒ=Œ÷ÏÓ(ûòŸÝ€VØs3+ñ@ûÔŒ4D%IN߈œqW/j_´°Z§ ß·Ò*Zbþ«"ˆ«fLì®Ñ}úôöûK¶ŽgŽÌíÉÀƒ<Ê·ô¬ù„KLÍÂìþܦ…¸i»ú‘ž‡Sª+hFB<zßF4µL?ü kæ‡aþdõ¥wÍ÷}ÊpÅó¶J©Š!n!¨A"ª|÷c—)aûçsÏ`_oû1zçw
+öì˜GŒâ®h¸L¾ÎÙRFº%ž‘õzíMjF{gm¦£
+i}›«À±%VHô!•ˆ [0YòÛmݽØ=šâÇú[ü%n[?<bCAÓ4Ù¬Ã"$ÇêNmKâ7Ø_2²Ñ¢XÀyP¬éDÛ2罸=
+XcÔ#·y‘e”=û-‚yKŸ¤É Kþ}“VW6áÚ§Ûäé¿óâ>çAR¨ß×±”ß·³f‘óœÕŸüeÂíõD0'éfáh
+áÁnm4&lë°Ø:çÙ4xÅËÂÅï ®_U£Ïõxô$éã^õé2Æ“ßkÏR-°‹ £òLowÌ le`1ÐΰLh|§^Ô>𵉿ÓíÈÍm
+÷‹i“Œ«$0n
+89OZ~¯YÜUmD–pR',>‘Ôÿ±¡§I^±7s森ʡ'…ñh«Ö£`6Ï ¾3ÿhÒE)bfzÐDÃke7¤›œp•žjñ6‚J4?¬® ¾tR+ÒÂPË´·ˆ½‚ŸŸ N‹è½rbàÓPjIo-€y¤&&t®bö”«Ëå¯D¬ŠèÖÝ®åŒù0~ªC0y9X#P wqŽùŠÊ=M¬ç+7ePõÕ Â!„²ó'¯O!7v)·×ø2ŠÃÂ~MÕ¶Íî›ÙÛ‘_<³ôª‹#bv‚¼¹Ÿrr••¶÷ 'c1­lG>2QèÒfdûék|/xúÁ.Q¼å?×~M$ØÇm–ëo?úóʯñR¤S }ìÔ÷N)5˜5C¢©<kº%Fb!€ÑOØÈvè'p•£±LJ47%:¥[Fká&¼Ö._4ï}|nòHìd]æÖ’Wo&›Aû„H0×S±£À}É׳å:4[âø´¨6ÄþèY=Êì¡åÄÐ;!8×ƹ€éÖÔ9RæI\‹úㅽ »Ž›1"¶> ÷×m*
+|Ó¯hI-"d¼¦XR
+ {O
+;ïÕ¤1tù‰Ýä †U ]ys@BO“t«V;×Poè©çJÎúKcà< c×¢ÄË
+Ua]C~öóUr0ÕyÄ~1ž­¶³‹)ûãÒðj?`Ô1ÖÓٮܟb˜i{ßR?ôòé¼gVä"SF½¼ÒCÇ܆M Û/µBÛvg_‡sÕÈæù»”™åf ¦ÆL7¨L9䶼'5piçÀ÷"®fÜÝþ4(ø¼pD 5 |Îf\>(ŸL_Ókz³§Ó‰èûU%´™)¢YÙiþŽ¬]‰·þb$8¼™c£ªS~~­Ž(Ú1îyè3ôØBIšM*•wÎL…g—Á9zãs­Hjñ¨šÞg€!»1ì] [Ñ@Ã9ï4Ô½òA Ó,IÒ³\˜óS™PF¯¤…ÆÄo¡ÞT!†²Õš»ÔOs*-RûsXÂŒ†ìºÉHì¯Ùe¹YkéneÈ HrÌ¿ üâW o±ˆe²ÈÊjlÝp1î@#†Â”åŽûGÀÞ_ˆz8îºÏQç"azóürÚ+«U™Ÿ¼Ý¡uþÈ×\÷IšÎÜA/Š³¸8“îÑÁRw*äŽýhû4ó23÷Ö¼«(ƒUdJ¨»ÆɆڪ¨«¾ÕÙÙÒÕf/;;“
+uíˉü=fŸKWHl4ñgÜ›âÙŒ\¤]ÌÏù¢®ÍnÑLj[ÜY
+a§ÑÉé:ÃêNj›`¿ˆÒ½¯è“AáëwÝqÙy\‹6›OYŠÎí(¹P¯­2”¡¯”Ã:×­Ô™¯Bß¨Ý eÐ8MVˆmígâqؽ¥J¨Tû8™Çê …¥Åb' Ó¯–úïJ¼=¡Ô%­ŽÍ0L&ð%Ê9ËóvòhôøXµl(ih,ÌÄ"¢45_ߌƒ ixéÜóŠÛj«bQB¶J9ªÃòe±]àð¶ÊÅäÿôÍ©–òÄê‚)ª\’çÝE$Ïí4©~’-ÿ²#¥0öÉ·OÒ8¸$‹u”wºu5æî nEó]ñ¼ó
+'­#…Ÿ¿Š÷rgžŽ TˆÊº¨är»Þø]lÉó!7@¾°ì?~5±Ÿšîc÷ ^¾Dhè•îkçɶP`]ë-ËwºhbªˆÑ+S\Áì0½u>äÌ]ÖwË¿S¹y–âb3É<¦7XáS¹±M%փܥÖžû²©ª'#[¸™ ~e¦·Ø¢‡Žƒ ÝA×Z¸|Â_Ïzt þF’דˆ ó¿-p{‘3S§r$¦ð ŽùÑ}Úªõ¡{yèþ-¤÷q·£ÆcªÍN÷ý ªB²Ó+‘Î`姽¤kקt_ï/#ùžõ &(®­}ó»@îdèX.mîŸ 4Zá\ ÿYýTi¥s0z3¸æ½î[ìÅ]&ÕS_h€Ô:D2Ûeß*e$äMçBŒ1îðMfxRªºó¦‡Ö¸å'¶mP¡é̉]Ãvï9ÿBXvg–•YèB ¼ìù›­Ï{”ŒÃ霙ªy{MƒÁoù<sógbmÓi³M)=t-Ó"„30œÆ_h®ŒE)Ú`$˜Z(i¢¶?çü’¼é¿‹É~G‰¯ñH’¾|¼,0ÔW‹žB
+/Ögu»ÇÕ¾Ý9"meÈÎfD-1(ü2\س%ÛµÜfÄ!§yª¦G%àbÈÖÃ*òâ+‹®ƒœ_ÿÏ­«³hâJ »0ìggöõ÷¤T:á6~d«»Þë‰Õ¬¢Ñ’f7Ö~Ô¹LE5¬®ìûÏf´*Œ§$˜¹%Ð+1F)m÷Ãæ1Ý?^¾pGÕ_ú€í®<ž HßXùœ6c&SÅ°‰S¾‚f…"ñDœ¤J¯ªGœy-
+
+¹ìŽÇ2~."[šLHÝW¡@L ·¨YÐÊxv#*O“½^©^܈‚¤0Õ î?Uª Úš
+ë ˜{‰ç«ÕsKñóôO° ]|îT$°´/Ç=»Rò ZE8ÔÝ,÷Z4¨ñkæXEá¿)—AbpZŸ?kg_á("Šœ8=^Ën^¶-;±jÓ›¢Œô¶=í´ b¤Œø ™È…¢Å½»Ø. ŽâÉk‚å\FÞ§¶vF¹8ÄåS¡t(xæóùéJø¼Ò–?Uʨ€U(=a£¾fâjN¡"˜¿uš™ T £UÑ!]§¨û’{}`ÚC··ì½ñ>p{×ÿò¥9W“ óK§eº ÊÖyb6*©V5Úô9pÖy%šµÒj
+"ÏŸoã/õ‡õ.¼¦RfWL­£<îÏÔÌJMµÞ9â/ò‚e:Á·ŒÖ,ÏЛd«^Èñ»´É¯ +ý\Ø´!cšGŸ¤Eu a¾ü3qŽøF¬0¥Tù×ë] Ù…Þ¾Ë×K¦n6<}:ì¯ûð†]7€U“¦¾QÒ±6£ ¡ül¶©‚¶i;·Œßõޱמ
+w¼vMËt^27lüvÖÍ#Ã<@²”¸v)]Jcþ58lMÖOP_.>H³Üzu¥ÑÛuÕAÚ=Ë,Qd®<‚»¾quNÜÄ`k¿·*a=*÷•¦fx?šì«…Cúô«ðóÚ常×ü’Q1"ŒV]'î¡vÕ=èxÆÍc˜« ‹û¬æ1eeE§W+]­{Z(ª¦í¶†Ž¯YYyYAÁ qúÛ$'9ò Z¦´œÙôxG–V¶QA¯²•þ¤‰Ð/RzµÈæCÒÈ¥Ðe§¢e"MICGœ–@K¨#'¸)¡Eú™j{¬È¨¹S±·®K8K¾“aê[·°€
+ȳϺÄ1Ÿ¤­a…f¢ZÔø$õN8n-(¶?:èú7¨9ÿR«¹ür-ÍE•ˆ¶Ã@TÆ0¤uÛ©4¾ ior¾ÙhE±±Û¾E¿9÷m‹rQãí¿5º¹)îØx,žWí+ ]×H=î‰õúCœþ¨9õóºfÕôc¹Žô‡û%A<Ü 0±­bÆùlbÏH7íkŒÀ“û2ô>‚×Ö[Šÿ°c²"eíÞOÝ; ÙK=‚ɳ”òxäWÓ@[ž@CèÄ÷XŽf‘
+µkäÊòõ’Â
+´KµI¶MµO¤Ž…ýæ_ô²M—èI+»aWwòªJ‹%‚µV?œè&[ãõ¥ßö㤹a»¼Ÿ ù¼ƒ2Ež9Äßredÿk´Úäòý‡,þä«…jŠ•ÜÎw:²ú¾B¬‡+•]Å‹ ÝNúÏn]fn`葇DÝñ¹> –{Á;ÜZšú(„Ç\_˜ù/"\a”xêZŘMF+(=Æ[M'dÕ~qû¹]#Ãý*ÄâP@'½xÀÎ) Û“ó,›n-p3z‚|>Ï»Ë' àµRS „Q^§öèŽÞ2¿±äÍU(Z%›yçlž4&WO¢`¹¶Ú>=úÑŽz†ë±ñQ,å>& äG=¯—ôáÃÆ8ê§gÁähdsúY½¯#Ô‡ŸýhøzœRµòŽüXGÝèÕ~kÁî°|“wºí±ÅŠãðÕ‰›³oKçÜeØ~fÐÛg‘(A4cšçã…™ð<¨>‡É¯L¶.;âÕ–ñk…yá[?—¨q¬vñ•ÈW⮤Fkît³Î
+u/uóLúuúw¹ë‰ùf'ºl`k2¯ †¤Yý¯ºš ›E¾îM,„ÑîV‹kaÕ&kð–¹ÀÉ Z¿uZÙFI½‘Ò9é27Ö†
+U qì¼CW·KmR-þ°{/‚ouƳ6²ö…k“YË­I 9ˆ°xýà„ò~£Žâ%ÂJ S¶–sB¾Ó Q¥ÆüÎÄ7"rÓPœ[x-yüæãŒ]ýb‰¶K[òÒîW’ª>˜%?(J'8tö,5¢PÞÀJùfœ
+Z µ¬lƒɉ-ˆD7q‹jb]¢Ê°óŒœz´êŒœþ}oÉÛ\£clðKUûõÝÀLÓ_ŒÛ,M¶ûÁðECà£Ïé ’K·@“#¨0"0|vÐÖÇÙ9“£µg~¤s©vÝàèé“š«4ãåõ…ÕgÚ©¨}€†’dØŒßD@º2K/­½Aùœ!î`Î/·†yøP³wK°yù´&K..Lgø}ÛU¾˜1@H•DƒO€ë…„€ÍXp7†…ÅãZNbHFþ—FC#Ý[f”AN,DŠÝy¥LSCa=‘Á­^þm•­`ÍD8(bBtm„7íÜïÃ’5NRï?Ø®j •p˜ ’rá‰9¿ÇK«Ã`J
+XÙ½ÔïuÔ|FûöÓC!0{z˜öi°FZùÙ–‘ˆ`Z-´‰ÖÍÄ+75`æ°f9-žŸŒ$ý(äQ#Z`ýFry¥õ€ÔÉ9oÐLñh¹]´¦[M¾a€úɨ¸íS¥ƒrâÉT投Bß{$Ñ?'ÜofpºŒ{Ò˜— ”‡9} ³)
+Ok=¯,ß ÿ¬¶Ò 4a§¡w½H5h+ŽÖËadA~–Úß(šŠ¯Ú¦:4o”ñH\»âð*!’8ïÐRÚ3÷a k¥Ê9ÕV_ Žéêzûà]‘â滚ºp²X“6Ý8ºåaJqò¸§1Ýû0{/è†leox32­t3S‡±²»ö‡’ˆ?kÁ¡Ï´–¸Ïäçè—F´RK)õÕT­ú.ÌäÔv¯†“PÚ¼åé…ÈxžÂ–㩧§¦ ´õ.œ ,´&½}œË<6&³·Në«JñãŒÂJFÅÌG©Ô¾¬ˆeé§|†Žtc&’¿Bݾuù+g>Å<ÝÖí­ä˜å\\é…ÎÔ†*ªà°‘÷Wò&ù0ƒÁÀUlåpå³C!ÑT1ЇžÕª{¾®>~QåcÜßÕ»”!nŸ$`KA„½8!Wãâp®XA³8Ü©Š èqùÁúJ­èM| ò¶º©öÀÙ—!ñ
+g¼Þø‘JñLã¬+™¦‘¡‹~ÆWÉïŽf“(R Ùü€¶:ôŽÝû&³ûÝï[Á$ o;Ý·)¬à3×<ý&¼J%ßÁ+ž™3T÷Þ*%²ˆgÞå Û†Š6ájfªÞ/}„ÊfÙ#Oç¹÷Ó—]ǃeæÖzGs;ÇïfyðÞØëÞ} ¼³enrŒð¶3Æ݆çÔïAPžå³VåWZö=u=ŒoNû5ÄE%Mm¼‚ãäA‰M“–H2)’”x=—»Wê¤åG¿¸í–`4ëè"ÛdÙeO¯FõŠEô˜R¹w[íIZÄŒA¡þ2ÁíI4Ë5[TTB4׻ݓÁÚ]!S »Lz¦Ž=šïk›Z’¿òæ#¾5mK,žãá×åÜü‹‰ˆÊú-U’z64ê6ÎÊT«PWôb 5×ÓêN …îO4p)”~2g†º R…à'ðIµ@I¶ã
+E{Œá<^áe«5ÕôÄ;¢.ƒ®· …£”xˆÓB :†‘™ùjéžu­@[N?9¼bƒ!+ÞNÀžfiÏþûóŒ
+endstream
+endobj
+1983 0 obj <<
+/Type /FontDescriptor
+/FontName /VMTBGM+NimbusSanL-BoldItal
+/Flags 4
+/FontBBox [-177 -309 1107 953]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle -12
+/StemV 145
+/XHeight 532
+/CharSet (/a/b/c/d/e/f/fl/four/g/h/i/k/l/m/n/o/p/r/s/six/t/three/two/u/underscore/w)
+/FontFile 1982 0 R
+>> endobj
+1984 0 obj <<
+/Length1 1641
+/Length2 7418
+/Length3 0
+/Length 8257
+/Filter /FlateDecode
+>>
+stream
+xÚ­weT\ë²-÷,h·àÁÝ=ÁÝé麱@  Np Ü‚ îînA‚KðG²ß9ûŽýîûsïùÑ=ÖW³jÖ¬¯jÕ‹žZM“Mµ
+ؘVPg€ý_€åc¥àߥÁع$a
+úG£3ôÑÃá{$SƒÂà0Kg°#ð˜UMFî/psøïÜ0ð# €Z=z¡–.¿Kúƒ=Ò<¢ps0€ƒÜá¿sY€
+
+àâüËtqüæ
+rþsAL¿g†ùQ„9
+±÷
+±#íñÝ!‡÷.éEк•)¤$>ÍìA3Kø¶zV†‚ÉŽ"týóÂÙZÜ$rhQ´™…ã:5~\ªÿ&n3icùÉ°·Â
+þ[œªheå¾|&]?ÿr«É\ÃÒáe?ôÄ=T o»¾}d-õDì‘zAAü;$ÖíM`÷Îð]o<Þ½vûò‘½ÿU¾bóL|7.~’ÿtÜŒo6ÅsÖÛ²×ÕÉ=ü¥EØ8ßfNÖªXGvÝ9¢—Ñ[ËÎÏ‚p®g”8›Ÿ Œ¸Âl•á5ˆ\ µ'½†±‚î¹oˆ+ýEÌC\;$?;Ø­I†Ò-ŠöG
+uÏûüŠá®Ržͪ¥2ãO*“Òð%eaØË€ëÆ…‘·¢hI$OB· `—ø…š²•î¤Oü›rtk­|Ôd&‹ðØQ#òpÇ&¾–%4¶²‰‘¶Iƒu¨ *³j蓺}ž˵%÷*NÄírérÇYÖA&›¼±!JM³’¸Ïd—â@FítOÅ¢–ý<NaD݉kæŠ~ï yí)âµó·è+ʲ֓ þ5r¤< é¹é¦LéBBfï¬Ð]sKGçïê”4 Œ$ñÝqörÌSQhé‚ŽÑQ„ÐYNAw? ÙXZJUo²+¥^ÎàyÀÞL ð›64ñï®oŽçЕÄ8`˧nL¶ûAå×
+Ô2Ç£óœÃÕ+>âRÎ3nã÷|¨›tœêSdŠÏóØMIîÜËuæ õV{p&ïÀ“BïUlgÒ‹p°æ`X Xï~Ù$7Ió÷È5á™j[ó(iM…1¼#Rg˜¢J2SÂ
+Q5u:ÝZPiÈ×}O1/LTˆz(œ06’—cé”e¯ ožcŸ3R—ù¤OŽX¦ÇŽL¶ôQ‚
+[ò¡Œ²X6dW”ö®8Í2ÎGž¿FåúXZ–Ê KGËfDY#9ë9úDëÙÒIVè—ü¥äqâ…[hêHõm à¼^üÊ£?—…æàZK£º9wõâÃƵ=N*ÇÅ0A68ÞµŸY0ëåî'÷H#âT«fepê8æz{EnŸ7—99e÷“ÿì«1O¨tp¢$ÑÐìâbéÜÊã?¹¦QòbŽ½£vãó»ûºt;-sn¡ÀóŠëè.êüy´¥³Ÿéce éT>/¾Yûiò›ø…µ³ê\t(NsiÄûÚ:'‡6&Ò]±…$©|Ô²øã3"Åél ·íOOÖH¯û㻼žž:¿\Kª¯Tm* ÁcwƒÁîsyk<Uë|ÌVTè°—vjk_ãŒ%^Þ鑘7k½|ñ°>UxBGIIâ®RÌ÷Pœ­ÞJ Î,Üö»cŠ\iÞ,_½¹œ«$Ë­B‘'ÔëCà!”B[ЀÒUµ¸D^ç׺/?3sÑÿzI²ì¨ÙÔq„</ƒÍO«œoÉ%ÍðöARŸö’Ûðô›
+œíB9Ir<§ã±Ç¶îZu“gËÈÆ=H&„6YŒ>yK
+sIË>„fyÀ–µP²¯°Í™ñÜÀ˜ÛV­BiKUÕ–¨&½Z>lÜØQ}H½ñFÁõ)a”uv¤—GíXøwå7˜_sÊ£¨:Ð~¶œå†µ_[õu(SòØDɈ€i¥±nEÉOÞøŽ$èŒ^”è
+^"×Ð,¿Ô“ÍØ¿°×Ë‘ŒÓ¨~«Ø/Ý$–¸&•Ë·
+Úè4*Ö²k}%²Û
+ŒCuû­–œ0‘%Åû‰U(íu´}¸—oC¹ßN‹–‹ïÓeBM{"µì¨$>v•aÈë' …¬Â&ÙÈ\y)ŸÐ×Ý92NŸ’‰gý2nÉVåHÅyF
+_(¹¼Â]=±f m™±þ¢uw‡_©5gðV×A~ú‘°·ùÉ
+š_§œ!¨¹ŽÁA¸Ë5B¹o<}‹ŒÑ¹>¬±¨/ÃaˆfºQ†t™é!@@Ù8ØiûŸRuà(cÂNÖ}ð©Ú¨žŸA/‰²¼ÎëÔ“$joV¿ˆŽLŠì\ö‚¶Á#µ‚ýʯ<î¾”û6|irn9AÍ>øÎïÓ“4²9 3QÈ0Qﲂ¥no%H ¼†Þ9¼Ø¼ÉÌA»µ½Ss(x^â—áÂÔóŠ;fÕ=Q¬$H­‚ûvåŽnwØg}‰ðyHULOÑ;Î[™›$‘—ÊwWܳśóF‡³ rÓœ?Vj÷:nà{ A”Õ#Êîj-šDÑÇ9"ÀP„=Ÿ[“7(åŸ&ÃHÖ|²Gx÷‡ 8Žd„Ý"Ô‹j°
+›Âw
+L ·ãí;Gða-qÄX›z u@ôº[³·wÈ1',HûGSeÇíuXâ»ýPáëNãùzOègÏz‹¥8Ý’ù×Ç^š’¡±ÅÕ½ÅD§Îðâåأؑhæµ'd_y +èçDk¥¬°qáR«áNªki»ó6•Tù¨%”}2¢“xl#ŸštŽT™÷IsuZðxCèÄŸørÞ¿û‰¢„TÄ´ÙÁÅÌ%¤¶ÙZ×|DÜâ<CÆ=¯]gÈW©Æa0d"îÎØÔï±e…µƒ6¬"Å6ô£–¤Œx=ú3ó¯Ù_CûnÕ¼v¿˜^°±Æj_àgã UºïVË…TÕÑbO⨂gr@V­×bÅz;èúÞ%¦™x­[5§Ï3Ö:‚"jŽ4k~¨<õL&3ò`DT!A_hU'f¼²|6R.‘í¤¸xê|PA&ß%º¹Q¥òNã'—ô bN,d×ì&{Г=9× 6 L”NvÔµ° ë=Êzb4Yâ>Ò€C¯™—Ô«M°<÷ Mž&5P¢â2á‚Ó©£
+h x5—¿ù¸Q®T ™èí”á¤Ü
+6c1Ø2£N‘m½y
+Ý6`ø]ìnr¶{Yþ¨ær§1B‚y—óšSï›f¤z|Fu³à™ Väª}¡­Ð’Ò!˜Ó…üä4?:cXÉÅuã<
+Ex7ŒSûøÖöÑj˵Pðê§òPÐu:ž"æPÀ|z'ë„Ž„oˆÄ\tM?½šhÑ5×Kôa†åt¥ƒÀ9Ôƒ[RVRLo AÍXb_ɺqá¯I`õOëßîë+¨³ï s|ŽýT:ú:ž¦yüÐÕfôµíhá¥ëxŶzZ™“rQ!µÑGÔ&O!‘>Ç°æ+–å¬ìÁö»T­Ÿ_JÚÆ}ªFT«<è6ôoE(gIÑ
+–B·¾ic3(µ«(>_}(ìV s~üÜþ¹.c¡œ÷‡7«ak1õŠâ|š ÃXºîœ,u=—Ùf~\
+suz%Ýb6ê[ÊâBX1mûq™\§1(^¾½‹§™üO;挼ŸŠg±µ² ‹©eô}v~—¸B+·'³€á röŒòMùÒüo¨:Ë͉òÝ'dxÌ×ná•Ì÷/¼
+êÔn@äÏOŒÄžfðetß"‹« (óDTó:u4[…º…ÏCퟺbLÔ‡®V}v*t\C4áÙV7Ί¹?{î¯Õ,V °ÄPðøI†Aujœ|ï:iÜ\CüµïÿöéW'¿Ò…cJ˜1¶ÿøss®«üïí
+†¼|…ˆªÌÔnã×ÇŽbB«»µiO³ù™ÃwïKœYÄ:Á=v´2 FT»ù…Tà{Û—“yÄ;.lÞ¬ŠnBºyG‰[«:L®?Ø…Cø6çF:Dq%Oœz³Øfd²ö×ó©k2æÙl²M“Ÿ<”ße±lƘÞ
+#¸4Ÿïx¨_5óûòÄ¿ÌæÿDÆÞìg?´u¸Wrû0TûtGèSš– Nmrd,@%+²tR¿¼yà\R[¦‘¼–†Í…æHìï¨À¿Lw‚nžVž¨»‚6ÑÐ<òòç;vþ3xYÎ>;¦3™v®ýÓ}q.í8#ý²0?«Xñ(_-á]tsjyù7à вJÖ>gQb!y¯çKaD®çjg^ £¢]¦1·kˆ”öñ;ï¥"7bô{\n ₲둖"¢>à~ZN/
+çFS+tæÒÖ݉c4$vµ=…/ýÛI6Z×ñHK?T–¿©'ã+<ÂŽµp[_r#ªIr@+•yUˆQ¤§¿—ù;øT¸1ã£DokD ú7Å/¦xHOh\¶§+qgè«Ÿ•O%Ψ ÃƦ+O?â–É’
+Q©m¼´^fâ\x@&ýÆ·×#GªÓ¢[LÂõ=¨Ü> þý,ñi/>„š&¿S }Îs™VæÇ"£¸«‚ƒªùë«Ñj¹ÏXžþŽy] g·Ð±Û=\0ùž]sx´Êà9¿mÓ ;­®ÿÓYøûêê ×ïÞyAÆ ZÙØáßOÐuÌ›ïi»›g䟘Y8(‡éU™ÿGÞŽ–
+endstream
+endobj
+1985 0 obj <<
+/Type /FontDescriptor
+/FontName /GRJGEU+NimbusSanL-BoldCondItal
+/Flags 4
+/FontBBox [-143 -298 913 989]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle -9
+/StemV 120
+/XHeight 532
+/CharSet (/D/a/b/c/comma/d/e/f/fl/g/h/i/k/l/m/n/o/p/period/r/s/t/u/v/w/y/z)
+/FontFile 1984 0 R
+>> endobj
+1986 0 obj <<
+/Length1 1166
+/Length2 11406
+/Length3 0
+/Length 12187
+/Filter /FlateDecode
+>>
+stream
+xÚuveX[Ú-î!8[p×àîÜi qšÆƒk°`Á%8Á=hpwww‚»ssÎÜ™¹ßÌwŸúQ{¯õÖ+k¯zªh(T5˜Å,Í€ÒŽfv6€2ÈÞÌÕEÃÔA‘Yhå
+ør›¢ÐÐh‚ vÀÿ¢ÿ` )äè i
+ùÃkZ»”LÁ
+„
+üƒ±¸X²8
+”“ü¿Á ”cV@€›ƒŸ
+ é~(f­fA¾B¾û Ç#M(°ÈLe}%åN=>…ÃÓ¬~§Ì3®H“±œ{FjZžÛ$þã‹-ášîŽhISÖ—°g³—,¿ðeýNí"ãV'P
+ —¸nÞUŸÐ
+ÑD/ìI+YfëŽULÖôÕ¶]An÷»œ¬F*=f¬ØA@'`l«ÅBé£Û:¸fŽK€‰£’a¥ ùÚQòî£=]Póm–MÙîܬ`Ç¡L °â ôÁQQ,Å ²Ã×ÜÀa?òC*ÇpiÙüEXTn_(°Ñ“gR X«n=‹cà*µ8›­Fw^ž$_h¸åb­Ìø0Ø h¶
+í×,´âc¥Æ©T’Ã…ï®ü„Þ#~ËìãÝÀ£´.ýBôVÝÞz[Ñ—2)}>¼F*8íŒBV½WsZ®NÀkkõ KlØNðc?Âp½ns‹n¥ƒp$£)ïˆW.?©;ôFÿPRŠž[ÙV”¶Ý•˜[FÞ~ŠºÛÓÙÎm5-¬ÞÉ:…D¦ðåüm`Üû1lÐ/åÖ
+l¸òÚ&/×hµcêç$!8y&3BÉ>CN¥L^f0”žÍà +öG“t懂Æ\Ó°[—èkŸ_s|µpµØ¥ˆß2¿[áöü¿É«ˆ Ô&oÍ]mâÊòŠâkáT$žaó„P•,_Ù:¬ƒOŠh‘`àW(­‡ƒoaÑýú
+åü¢f"oÒ(€ö¸õ¥c¶84¡G–&Éx¨')ƒôßç Ï5ëæ”1•]¨_)zôì ­±Ñ·³A<ãHÆI¯CgÇŒ^ÎL¸=-yoøqx¥†bœVºoIçŒHuçã»ø®‘‹ê\=Í·¼Z’¹E"ñ¥­ ×[²ÂƒÎ
+.³Š iGJÓo¯¸šŽh%B`>þ:ÒÁÒÓ#dVj*œ¨…=Sh¹&ã»žÒ ˜,~cÿ@xØñÛYãõ
+Nã(
+¡$ÜÄÄh¤]˦i)\ òÉçgEïúÞ€Ç7„lØ'äÖžow+¤ÛB‹R½Ü)㶰6aoÃðYDxn3ý*—tz—/"k4>Úaêáò9|4#2)H¤ü,JN 7áYÃ5îËÌ ½{Ñ*UPÏâiÝ»§Râ7D–R@¸@‘Éùìò ÉÁô&ꔀ¹ëï9¨y5(n:éiS¼oé»hÚ ÔÞjW›î""÷ +Î(2Ž¤cýÕ  º˜ ‰¥+!Ä>¿DøÄ>X,6YÈq4¾Ïß¨Kh1‘%&ÿR;R…—±ûjOÝV‡7
+kàRs‰.es¨uÔ–›œ.ŽèM+TäHÈÅ+‹»R}/ku_ÓÖx8/ºÈ4Ū˜9íÏÊ©ý’V­ôÏiN€¨¬–8|ŠÁ|äg “Ãí õ`CÁ”ï_kQa×ᲡW¦€íÄ¿ë®’ø†$zyýµ¿ŽÕ¾ÚMR¯,ÔK
+¢¥ulînX\KšW:E›~„züá EM(Ô®ŸÕ–Ç‘1Îa'XyCx¶ÉlŽ$ÅI÷jÎßÉ•ý– b–h^2ø­H”PSç¸ B¡ÊXdÈâ‘1WúCH%ŒNj
+\³žˆ×<þ⪮}8ú»«ìµ¸n5+õH8³[ÂÂŒÃô–ëÇaø3¹æþŠ±u\½¹$ŸÈL™¶Ãõlï¼:ðHz`磽ÙËLçU'ž»ÀV›õ›eTUZ¸à ŸŸ  HÝÔP¼Ðµ1ü 5Í=†.ìb…lÔc÷¡þò.ÊØB èåVX7ë µ‚¸ÿ§³Ÿ¢y>lÙj³jƒeÏšÐöLÄÅ¥NüU/Ò1›P?¹Kã²<Œ·ˆÔ–¹ê’O؇ÞüHò6Âd&.6ɯ¡&xÏÈ'?^WºNw¨ΫdéBĶË#a)¯õ_Y6VÌã—Þ%PÍïòÄêðð A3ÂváK-²×œÇ K/Ûƒ–j²M»(¸‡ ÿ
+@=Œ³rn\  ò°†"=s'†ä7èý–?ë'—¾ç:WÇ)GgJŸ€÷!‰‡¥®[àUþTæʨü&™½sìFÛG 1l »ÿ^YSþ9;ƒºùÁ9Ò·ß²Mf³r<¼Š§BVgÓÝ*Z'«–3O0ú2ãD¯›z,ÇÒ¶Ã1Þ(¦uÅ0ÙÖÈ:UÀóºS¯öüYÙ•ðŠÎð*M_b±øÝ©¼f{«Ï>ƒ&ÒØOÍ{üÚ™(%C³?ÿ£î}Ÿ?biA_,ð…Æç ›
+Ë?6G †WX7˜r¯£mòªÉ¶*î]\ÏEîÀo‹‰L2(Œ‹”OðóªšÔ;Ÿöð=¾c„¤¢ábð‘¿ŠÉÄ,ì’„¯ù:LÍ Ž¯æµ·­&#`ÇÖ·Êø¸¹£è?øbÝßê|•º…)ê?øõn±¶ÙÚã`ÑU{„þ饲?Ì_ÿ ç)Ü ¨ïªô}ÃÜéqK¶†M3í©—±mï—CL®¼¾ðçý;.4uŸbéâÊÅ\lÕÔZr¸ç}d´ävzí·¯)±ïc¹(CVÍÐã綩@¼yF¯Ô—h1<Y¯úò ûeæ² q¸'ÅWo¿èjœ…Óïd¯Øpø7Lghõýê‚yG-¾ öÔg›  R#`C4æË¿9H?RvÿŶÇÊýÓHƒ:­·§¨æÁZÿWpq
+!u<?·Lmù—t7ÄÞÉŠ¸`8IJKÆÈŸÑ­˜”ùŸ>°>é®Ïˆ•4Æz2±<oÜ~{ŽpiØhÝ@lÓqU ›<7›…—‚o+¦RF³.ÿ«KÂE% #¿=?â*rÍw?¡ãŒž»‡Ñ ZœPš×j{¶%A©á|ääZdï<âod¼$ˆbVuª5×Æ{­#ö‡±SSk8Ï­ãV¼ªÖ’ô^<Φò]eÒ£ Äk#æÿÆŸ¬8ÈjII:ÓGsõãùe=ƒYÙƒ1ë‘Dè«^øݳ7Çô&äæˆünâÞìUoôꢎ„X骥…xéÙ&y;¥Î±ÃR^Ufß2’á.¥“—ꌧ”P@kò›aÎÂÙéÄé­NS¡ E,Œð½„xõ““ĉ¿2’~°Uþkç^Ü¢»µ¤§œ(ñÆ*ÆUJ¸2q€d@™[âk2-ª¿^v
+fifÉl1ç©]µS(¸Ù (—‘ðiêv<}oEŽXôås„yoq²A·9“øµ…cò2©bš‚ qÑw‹‹nÔS#Äí®‹`ñ1á_r9éOuBLÍVÉóEƘ²®0(³1¢‚æßKÎkC})Ÿz{hrçЕ'5ê–8}o9$’IÙM^¿Ç^œË²¬{H¯ÂœPáõ£r¼4_Ö/ÎÌàÀéö/0ÝW¥‡wˆRµ™=ÑTò8§³…ÝAH‘~^-SJÉë±N²•å½¯dÑrO! ›çt&„â'Ü5ãM£kësÕ0ìí%! £½ÿ9}®FQ@k??1òlŠ®`{îô m)¢I5X–¦ìQ$õ¾R­rP£v5K!Üg<›,Dc6"úX·Sßx­^àœ¬ŽZºÄÞéu7§»`ÛÉ´… ótÛL¸­}t÷ŽænBo(h/ö¸ |¡ð'¡NúX5™íâƒS%57Cm{^ÔºyÞfvÍÍ3þÒ;4nΘšQšJ†ƒž0°‹qìøÞ†Ì U÷Š‚FÔ7dãa¨E]Óòn'¥QÂ6 T…Öd–F¦BnK+¢„"ù¥:ÃB3´ù šNF®LEyš„a‹ŒïÁÓâ^
+¤žh}ë?XœÇ9ãBà=½ýâ$‘[ÜÊÿà=Ýz—NÐZ%`,©ªB-”WÏF ÅºÏë€#w,g²Ÿ¤Rzͱ»ôæç–ÿp³ßŠyz˜@>Äì@Œ„_D³˜úPŽï7µX¦£{µ2G'”K´ç/Öÿ~>ÔWj|AáñÅÒJbVê(ŠñiP¶¤]•‘ͧ€«±‘ =ŠVøÚ(¶ìl·mÛÝpÚç>²ªNfŸñ-8RLò¬Øþ
+91Yh“ŽŠ>„ƒ'óf8̆›d@†š3÷f45õÇQUôélûoä׫¿øJ Ô Òoéß׬µ0ÁD°ÕƒìL;¸K ˲VáDÈÓøœdjé-Â\¶§ ã±ê4õ\ïÙ`0´V’`?;Vjæú«ª¹GÞóˆ0…KÐ_®nUyÑ„=™¬8Ÿÿròº•wCr6lKM—I«<ĉL*rG}qÜ:š*¬Í(BÀßn•îì ñÔšôø*rªÂuzŽé¹Eþ:qƒ,ïÐõÚȨße"êfÐìqô–oìêãoYkß0Î4ñ£ö¾ =‹v[’TŸ'ƒu° ¯öŽ½3VT‰øbÑų–ƒú..uïÍ°×Ó?"¬Õrh ó>VÃ;NZ ?û|KY
+ý§´Ää>¤Œê‘âgI-C•µŸt£¿ሹáÍ0èoÔ¨³þ°†ê šHKÖm†%{êU·x²Y oæ× =—gªü•É c~㬄Jê g4ÀØ]Ú{ÞµõÊÈÈЉ½"Ê=öAë;þ¯vm ù
+ŒÐõ2|§e=ˆ¸h±f>™%ƒp[~ëasaPÁCËúå)àº,µ/Ïk7 ƒ¹\AÇo¤H6ö‰ÓCÑ Fÿ¨z[€UÁæÖ›£~xÃ{uG<#~ªº8È|eîðËö¥±ÄÈžORôD:þ³)Û)¡¡Ï $jUèŲÁzà¥} t]àPôÍ –¥2Æy£êÙSfý$­ñA]ÃÕ‡ç×Õx”[¦ºÄûÇ»®Bhè‘î Ox‚ áJÚ
+Ó©ƒR¹wW*OŽÕè^.^Wè{Isʼn>a/™¸K7ȳì)AZ¢–Çža<l’D¹ÊÆŠ+¨‡ Áñ??WíÄdÞß) –qÅ:É!¸Šx¦*‰ÇŒËýŒki¥Îuå¡–çWÕäé{—Ò|ªÃ¢œK²c³—uÀûÞAãi­ëS—b2†ÄäsoÛb@ï¯ôušæ+žR-„ÒêÛóŽ.?¦ÃŽn¥æ ¸†6Ñ3 s;LÙîk QOT$¼Êù&S@c~v.Q2Ã⶷5Í¢Õ‚tì ÉTøƒC °oy𜄸™ì%˜ jÁµ•´ï©S±§Ò:,~ærŠÍU½âqÆe ê‹à©€›´ 0^aC;A,Ô¼‰Aþ”‚ÆKéÓýIZÃoŠG“G#b¨ÝÎ-€MÝd’ØÃϼØOÝÖŽZ›ðŸÄÄwSÃêäÜ?0$Z+®N¥®Ä ÙÔ*7ïç¡HÊZÔòšøsê* »{“߶ÈóÔWvU´€ì”h=ù3Ï+2Þ°ª&V®×AHßu ÙÕxzšÊqÔí‚ 'WǘxS_h£Ëµ×å×õ”Ã.?W$u’vžùê·ˆV5áö ŒFÓˆ‹l„DH&ÉÜHÂM;aaä,ôŸÅ ñšhØ…R‹Ÿ )T{ÀMÐ[¢O]R¼GRÀñî(ÏX3š±Ó!²F‚
+B†ôŠŽW#©qvPç:Ä´§ïùÚ‘ðHz\…®v±»‘¦‹ôc¸¾´·ÕBÕÇ<bGdu.½Œƒ‰çŽ‹â~ጆs¨*8A»ŠŽì; “°
+¿ ¯ŠW‘Aá¦7Å´I¼Æ:1Ð<Ër1xI•>ð6” qò-f yÃÞ)tÉúp…LUÅðŽ(Þãò©Êzs@¢¢u •iÑ” OÌGú+6—ŽNêˆn'qùæ2HÐZ€¤-¾iïÀ'IgëàWÒÊ©§j·œÎtÒí·³öØo*Š’~—–×Á´FSi7¹L²šh\å(:õÁ\zIL?¤Æˆ‹A¯3}9xåù¹™¾ÛÝiʽ?%”~ã§äïÌvf…t ß g¼3T¨ãË´*­ÊVhVEe=qçç¼¢+_=˜¨\¢Ïú¨À¸ðGƒùHÛÂÓ¹R£Dg¾r˱bÓ¬ù]±UKmžã“D‹…ké6–èüg²‹]É@Ūck}-Ü[ÛhÚ2}Uƒ¾'íkbáb¹­ Ýä&"Et³%RIy ,k³9õnI) ‡RÎy˜ÉšËŒsÁ‚ošR]~Иï³=oª.­©ÇÿÉeãty–æ÷n•êˆ)t»ëþ¡.!]ˆŽÍÉ!·#«Tm.:|¾•·_2Êኾðêµl!; M®]15 E§o’HW¼d²Œ“Øî— ƒ‰’þO¿Ÿ@Íਜh"ºC.b:1fíÕ«ûH´VÁaî'S#:˜‘z?ŽÚ/ý³Yæ…ÕÏpk›ßì3”¡1£n°®ˆ4]Ê«#6u7¯ÄbÝBHÈo^üÎçú B›×OµÆ<’ƒÅm—ŠÂùjèLªç1 -žÁ—‹ùŒøÜ}”‘Ò™ ål!éQü
+ßÅ¡Q‘õ¶5©Ã+ ä™Ü/¿«ðŒcbn¹{D@ŒÍRÓxå-`ßOýµ6̓L;ÑãW£ºpÝÐüƒ;lõ8cæ\i°ÉìúÓß1ÉjçwP¢ä®<ÓÌ\%òª×6wo¨^Û–·8{X¶ÝhØ„gƒ6•X{eµSåŸOÓ„ÉÍrO¤ã/o—ÈÒ¶nŒJEdàÏ #yÚ(6–vúÂð0ƒJ{3¸»®H*‡¥µÁ¶b;3Nß“=üŸ7
+Òñ44ŸܵY2¬÷&
+Pí~£©äsöÊhK0oe‚-ý—wÞôÉ#L¸;.?
+!ëÈ*(ò0\±K*–î8>_͸ú`ö´L¢Xœ¦<4(‚¿· zSM„ø5þ8Š`XMº˜!ì
+ÚiWrRãÛúX?´_f@;•álBSÒS¤ˆ ,¹+9ú;D¾{± ~FÚïŸM²ÌÜ®Yxø®…az×+á©ŠX^/EÂv ½Õ0/¿HtE‡ÈI놨·ŒBm'»o¢-±Ã›ªò>¶¼fÐ$§ó³]Ì pÙ
+“4˜ŸÊœ¢nŸÙ5&Pv™U‘ŠE§W(5%åDlü>¦™Ê.1C£ÏlÙ+Cæ© O¯Ó#‹ðqîØù-*ûHáŒvß94bš°»¦rÈÄkY¸%µx: ÝI¬Ivßqžõ„SC‡"Uï>ŸŒ²[sÒ ½ü,° š¥zjo7sF|>n4¦8öÁ‚kó×á¯Vž‘ç\;o? }X’æb ¯¸?0Ðù¥žÈPE§·n4áU²e4yñɔٹ¡˜m‡D8qkfUÐQó)Iĉ¤ƒ6MGË%˜¶0¸ Måsá·÷¹U¨V=”bt$Ë6ÍL“ÐWCî×ú÷¶¿'[Îï95bë±3%x“×€¹¢‘¿¨DЩ:uö~aøŽ†tšá8AbP+·½Àæ`
+Ѭ–•U×s¡Tó˜w–cÕ´|žW²¹iñßüFt¬¶?mñÛ•ÂäÑfïä2gï,“ïiO¤Ñ/‘ÃÉsNYÇÝý`–ì„B“¿”ëÊ%Oð;ÛYïy+Ø®ñÏeHϾia‚É@ò´ÔýZçã¬,Ø€5,Pw ~ob¯éˆ%9Y
+Çíy‡¥ÔV+¸øJvå@¯o<HSOàrŠ\L¡Õ.¿Usˆš³·&©í–÷I×?S¸¶ÄF?Ks=¿`~(ÄÑ=(<„2ì.èÛ8{jðùq6)&‚ ]î^¯Ã¥/<•Xpþ.¢W‹¸kªw¡ˆ›×*
+¿ª_¸†¯‰Ÿ¶‚ç…‹vî×öå߀¾`½—î7H Ž&R6Nñëû ê­ÁNn7L|ª3¢Ô¾suÏ:÷r‰9TÝ=É”—“ã?0#g°v7•ÈòŸà°ßuµ ÚôrÉè}cV!d—¢á°¨<kpåy–°¡pµ´x%'/xA˜ñ'BŒÒ__/êûXQ4öÛjŸuš
+¸ÃÔáyúá<gÂÓü®¿:%µ<Hõ¼Yÿºäöä“êí(ì礠ãüaçåí Æ}óŽ-{©E6Üç—Þ\‚ï5ÖÁµ7DUÑÕQ» Ä‚î“F&¥û‰Â?”ÂN\yäµ±@Ðâò:¡FIçå<
+ë¤ËÉ1!ÝçøÂ/F<F·]J?ÀVaíã†xˆ$–¼µþç nD>Í7(ž †FÛÎ-Yñ¡ǯEhÙÛI{AÖ§ñí1ÞŒÓâý]
+y”WYÁ­’8:N)¹ö(wv6áiF±ëÆ«ÔYr®`3V½´˜ï_h¯7(ãá½ÞÀp‚8 =8èWªKÃ1=ê| д³ü'Óò™~êþ Ý‚Áä*x]´mº©¯b÷`Ö8œy-40nÏr)Fü†ŽqAöœQ»Ϩù!ö- Ö[.ú.BƒÅ|ÊÞà¢Yµïw #’‰FKÁI缤Ҝýy!•é»[Äìg€jε„³YÈçCõŸ„ùS¨ÖV›FóMCÁƒ¥­&nh ¢é¢|Tâ€]¹«Ùè“HùZ|ü¾ê9ó_6Ë°JÆŒŸË­ˬÖú`½÷ö
+²ñc¾ëíh¿*o¼œÙ`”dù)xW¡YC}w}][ó¥Ïmõæå¿”>")É”¥2Ù‹sß®—¡¢—ó„\*¡ë–‘’šÿ܆£t»*9ÿÄ,g#³¡ÄæTÒS§Bæs¥Ð6Ž™<¢¿ÐA$_xËÐÔoÒ\Y»÷úíJ±…
+•m·*š^?ãoÈy )oÖîh_ýã;Òqð£1àâÕÌÒ(&–.kMOäêÕÆÞž-ûã!Ù7ÎRds·¢RŸ$é—‰GVç»__Ùø.w½1›Éê¨æqk™UÔ¦Ågæ >3wtºº½Zk˜Asä¼wXËZ=§>Û§{#ÈaáS&•];x:‘@˸ÏØ›^?/D­PÿzphÀéÞJóYŸpáèVÜÍŸßuz„1›ÒDoÜ|œ,)Ÿ›üþ«,ñ‚]“+X3Í+þnF"ø”ôe
+[ÖA¡2–‡ãÙ™÷¤Ú8z6‚§ýàÿ)„òƒæÉ ù¬téG|§Ë’O×äÊü‚C´XŠÀcUƒ€¡AuDubRVŒ
+ÊÏŠåPù Ö±›é&[ÜÑæPqoÁšzsô0Q ªÕsÖ>:SqÿŽm÷ƒ‘à¸Õ½Ïµ;uOïg†Ù12Þ¾™ªÐ[‰²ìr„/?´ô¸H"oúÁ<Å~>rfb¹†ÕžÆžIÒüÒÙ"™Í‰'Ó9oh7ÈÆí=VõÜ ütY§Ãé 5*y5°!1øƒY8ñ./GðÉùŽ Álñ[Ú Î%™ì·dƒSï3 T8
+qÄ –v£Ç¶fÿ+Ž¥4I_9Ò§
+endstream
+endobj
+1987 0 obj <<
+/Type /FontDescriptor
+/FontName /PMLMKB+NimbusSanL-Regu
+/Flags 4
+/FontBBox [-174 -285 1001 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle 0
+/StemV 85
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/copyright/d/e/eight/endash/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedbl/quotedblright/quoteright/r/registered/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1986 0 R
+>> endobj
+1988 0 obj <<
+/Length1 1199
+/Length2 7889
+/Length3 0
+/Length 8673
+/Filter /FlateDecode
+>>
+stream
+xÚmweXœÙÒ-îîN‡àÞ¸÷àîk qèÆ݃»'Á œ Á4¸»»C øÈÌ™3÷̧¼{תZUµªö¦{¡¦É&aéd’ur„²Ù9…
+rµ;>CÒNn G¨¦›³³=d©‚8¹¹Z€ B
+ÿ=3@ÊÉÙËlm0jkè2±°°þm
+
+
+̽þB
+uâàp¶2=ÛØ!VìŽ (Ós±2Ž–RN¿ h¿õ“»‚,žóâø7 í<}þ²;ZþÑž¥›3‡¶#ØÅ ¤ ýŸ€gÚß6kÀËÉÅ)È)
+ãØ9gYb IzÞ¾”W¿üé‹Š}:Q©<Íp'Â
+í‘<V—ùƒ/)5>@”hƒ IîsWá{.‡ :weŽ~G»EÇ´»YxAo7µ:¿$ɶïá{ù3 ,Ï,Á!Dë™v×N÷6wTCÓc“àKÑÜ éh>Yú
+í¨ôd›šsã5•ÒÆÄÝ ëeçøý†ùìnS¯–óƒP£þ£ÈÂ÷·ó:î9ŸÛ†©}¥ë>ás½z4ÕãÑÛkJ+ßâ$éý¾'{þ5{h§^öã%baqpR8ô^ úª‚Ï 5Úü!cæ|è*¢Ãì0Ýᇸ¹<’Qø>™­èïg#dóï@${ JÍUÉxSr¤5C;1†žbÖQ «·Z‹Ê+3^\—d„©ml¢D¬XßïÇl‘ hÈîcp˜ºô?½¸ñ(ÿµñN‚wJ¾tS/ÍnÍØ.@ªÜ‹Tv+”²¥Ç`påo¦û4 üÁÈw¢ÀÕ ä(Ç Øнÿ‘P_‹[ﶿ+$ûÙïª(ʨb¦¤ä…ò‚œ€éåç½Ù6'qžþFùK¦ƒ…Å@…¯æ?&k!dSÈì¶`FF«Gl~ÿœòøÙ“«Ÿ`,,Ý&\4pžÀÉN{«írLÅwïL“ÅR ÑÀ<~ér5w6™\èÀi¶(JÖÞœsÈ >,$Õ­ÖEÓ4#P2bu|è¨Q˜g"Šjñþ…Þ[sà–£ÇÉ@¦ÛWÄvT–4W«<c/²
+¤Kr.²áæ´OÎióòœ¨Ñúm@¸êºâ»ðô^FxïN¥«AÛü‘‘•tJÉêž{|‡Í‰ È)-ÕÉÌ¥÷"CFçâ8¼w$¨O‰´b$w'phoìሮ?×77“jò?‰®KÓvÛåᾇºß-3$t˜£Ñr[¬âvA·^Å9¡´_ØN—­êpØ|³É1´^E5x ÏZ|b>¦ˆ„ y'E<ÆÝè;’‡ÃYûL©¹‹ð“öZy¯¯eõgIp
+[±õƒ6ļMð"×g{È›S—Å\TtÙG )ÄxƒD[Ñ[}ùë5¼ë«˜´ù ¶Iæe"l€; ¦xÈ_G1o­dÈK~iÓÚVF>Í‹Ý…c:‰ž‚Ü3–÷P™ZЯzßdN››ìåqk/‡~¾ûÊ|ÿ-4àE9«'ûÝeVšmÁèžìµ‰}Ìãáq'CBz"û">ü и;–öÀ×™P)(ÂRå-Q*¥fEY•¹‹ÙC¯ž°ü:ÖÓ/] L,@ÐÇoÓ»þ(ôH)›¸‹ýaOE)à ˆ¿‘â2ø5ô:! þQ=×Ë[Æc¦àôf¹Q<oY ûM/0ÿôÓ¦rÌZmHÒF«Ý.Ýãuú~Ÿ#·
+/Ç£MY g“®¹f…]+ò£ÐW «Í=f’ÌiŒµÌ%q—KxN?òMªŒíĺ÷æÖ•qˆ—B½(°ø}<erkë‚á añmèÀ¥JBÞåàoHrß©ïÒ®Êë%Mr|_%Ã(ßÔlHƒhVkõZ`¨l*Â?Û±¨0^ök[m¬¨&¼‡š¨RùGž˜ô«ÁeV;RiË«e\Ý©Q~?¬0ÒG?Þ OFÒ“5%R(Ìÿ Îy5%B“¢,˜Âpþ+y­4BÕ|*üŠÌ^
+Í ¦éé@E"’6§¹Š+Š´ƒüz†¦ÓhàJ’MÚpBàÀ΃”œ—.¶L_j°ˆêrÏRNnŠd.Eðr¼çñŠ‘•é_Dè}-b;ÚAè§gí(E
+7½s©M=µNAÕ`á?ÿ6§B6æ¿ZjMª~¿¯ZéH2
+iì<~Ï\*—ëŽÚêБZsÒ–ÅÀÈÆe¨³"ã÷š-r:I2qŸ§ÀÝ.¹ÿôö Q¹Í7RÊõI=söm!éQ‚›tàŽ|#Ù¯Ëå¼# ±Uýl«…ÕKúÒ/WøVÈ8&”Ñ7ìÖØR(ûüä/^€'¾¨Z´‡Ã,Q¶å‡ÐÕQqÈ[žü¼Ý€Çi.;£ˆrL`ˆÉ<eØ-aÉ“Í·6Kú}½`2°v„”Ý2ö-YcûLŸ°šr‚‡4g “ùúÖ¹’àÝ”“Ã-I¸#;c+K=døÊ›{)ÎhŠ‰ùN
+yÁñýœ’Y?6¿§\yeÒ¼Ù?ëÏþ)¥h “þ:±wDgKñæ3f„Y'T(q¨x¢¥¢Æb Ó%;È\a9üº5ÙPijÄߺç>áÇÝ4ÿHXÒÅ+Ú[®_ûæ#¯n£úï–*†eídøA©>ä»ØCBsv¶ù§qôêà"–Lâ6”Òˆ¯ºÄûnH
+P™³ágéó°ÙåÐ߬ñp "›7‘Œ¨O/yTâúœ8…ùö“UnÏìK;?V‹èö¡½<*ÜMd#o†§ F©T¿¤òv";Aè5—ìSá&¾ç›n¾xú%@œ~ÏY+½€Ÿƒ«ü¿_/ƒþzÖù¸Re!º®/°¬•ÍÔ Šåú4c2AJ¿}¹ ¬¢-}‘í3ËÒLd
+ÅÌèdOYM²¸n%14ÌõM—ð¼G´²>xG¯L×)µë{«×¶äM ŸNr7¿Žðå%+Oî™Ù íÒ ç N{À0…ÕÔëQf™A çNîtT½'“â õÎûbŸµÁÀy›y¦ÈÒy¿Øsuäó‘»âëê ¾…Í©üɽAø_{áhÅŽswçHźȊ%O]sw,qùlŽ”H7Uã—јŸªíUÍ\£ö·èèÞ(I{Ä·«¶é=ð 33ݨõã\9<%HÓs<®øµë10¡7eXAp«ˆ&O³`#×£¤Ù ÓUÛ‘‹¨Û}û}>R6†rÐR ¾±BWQÅÛÈ;åÓd9üFê»zµA-?L0(.w<‡{'¯„Š‰ýA7=I¡ôããÎ^8ö´úãȯàà©YÉk»Ø>9(×Áì‡6øtŒ÷Í
+iˆ‘5Ùå–¡I°-Ø9U¸Ì¢:œÌsyl‘‡$vÌ—m"Ûi'ÇAöL’bÇ‚èü‹s|AKꡃ궯BŸØˆAæ•|&"CåS«{ó<À <v%õaž|ì4ßGY…,„m†³È?4c§<Ï€kA‘Âú)ƒk+&IÙ´Ú æ)ÇYSþ*X64 sK;RKÎß²Üy½ñ2÷;Tô¶‘ãG…6Øù§}ëѤ‚­m¾Ó;ð…U ¾%=Gu¾µµH»á¹ŽýBÍHuŸÈ[½‹–çÞÅ\hNîýòõÂ
+\à× ¬®t·Ü¦㼌ök€¨TÈ»®kLØ>†²oi
+yêÉY$R~ÕúúxcÆý­²“^Û\ïMúKë̹´·¡TøTF¾üV›w µ@×R9ðSÕ<«¢S!;ê†nvÃGÛa´[IÒ˜N”…Çë´‘"IBÞP–Âœ1#Ú·­QµI©}#ÁšÕãt]£ò.çÝ4òÔѶëA1/Pæ’XsÙä5Z ïwa¿YÔ(³Ž®fÙóKÕê÷u,’µ¢ Ëû"ìûAΖmRgÚ†ôÀH^XGi=ÊìÆÙîòlx¢'‘HF½¯³Oà1©m£p°{k”Њu;×G¯%Þ Š- uÔÞ@
+mly“æëi”„KL+§Sœfߺ¶ Žò×Í#Wå÷ª¯¯£›ò<âD¼q¯ëGNiÙTÝDü"‚1c•£'É×…sfí¤ÀxÛï‹Æñs=Ϥ¹÷*ìá‚“ï`>ÅôíÁ§*ØÜÊ°4„ó}‚Ù­rÄ~\É»ë“jéÜ׻LJ_tîçáéºã³ ki®øŠ21:—êéE³2G°áýZ'ÖC!¹Ü›–AÁÒiÖ+Ð\]ž±ƒ3ò ^l³/KÌO7.6GãQþ¥I™ç’ÀI¾·¯=c¾4lsÝâ;ŒóiÁw'~W¼®®Íjw-4¶«ùÂÕë2¤~o0ÍôT>+Á¢NÂ!L¾1ì:¯uœèê8‚÷ð‘…ƒiõ0§ÛF­Ýœù@z"AåÏÈZî†Mœ“>QPÒ0¿´…~ÖÕË;åßmsõºÖÃ{wV‚¤ æ¼VÝJuæ—Ë‘P$Ðf§DÞnH·(ùI“N|ð Ù/¸CÌ°&°æ&}Lùk’¸£µn ðú‚Z¨G:·ÄüU\ kXæê~”°º« ×±}ñ|b 0#/z £GŒŒª½·}¡‚šd1¤R.˜ÖÖƒzàãt â!‹h—]Áµ»*FY_¾î¡êÁë€æQ„ù ¯]+ÂÞ|›‹x¯”(–&Ê9ºŽ|\;&n¶ª°…["tn‰xÜ¥ùCyKm˜<ÔðÅ‹_Ñjðw6[2g¬TÉï¢Ýœât2~Ý )…î’
+üòk?4pßq>ëE ƒm Å{GÒÏÙK—Å`qf*W´•ªc)#‡/¨Žk«hHͽ{ÅËÑH3 ä†† > wí¥ð¼#þ¡ˆ·¾X3<“UrüQ¦O¬‚ð5UÝ«>ŽXú`ô'›Î/“×’íî[1·!~7ÆØ78YMFúöœÇ„
+†*œG†ñÛ>s²@ý†L§O¼¦YXÞQÑ^ë)Üný‚€\Ž>§\©‰ó9tÆ#ž@»•\ÆëŠ úh‚|˜,ƒ×B»ˆæE ÈsoE1üðÉi~â—Äöt`Øëéú×¼›ÖZeð2pìwôL½ðG¯Xb}Kž‡|}d¬¡¦ès¹q!1§»÷©#2¬UGkñ§ßzÑe¦ØÓ«€Mû´,`Ë„B!Å ‡=míW¹/«×\Ñ‹%ßMš1“….½y1ÊÛ{6 `%’vÄ¿@Y“¢÷¾¹öTŒà ëǘџ‡äOW³”+f4Y 6Ýô’ê>›[î=ÆÏݤë•ÊÇÞžý âøÀÿsò3ª9x¤Dλ®ÛöØëæ£Ä9kú£KñíÔ)90ø[Á@«§káu–x+šøñ¶0µÊ¡¢Ž +ÒlL¸³Ð{ù]* ,꺒‘9ED¦h{ [#IG>m»J½ê*ÿɆùÝmÛ¤3H¡–9“隦²1¦Úl㌹œD¼Î„û°RÅ·—ìÓ‘h3æ
+ØTÿô^iI“·ÁË¡âüVí!®L˜Pƒ<g°® &>qÇK‹V¦-Æ)ÙÎGÅ’<ž°íêÌÛeêÚRŒ¤„¤H´Z‘Œë4šöÇÇ4#*~ éÉÇf2Xó„Šõ¡ê2­ìŒ-Æ͵æÔˆ,âïKz„E§½CRÆ€$hã‡|²N9¯ìt¢™`˜‘Ù¦×(iýªOý± m%ä!{ó¦M¨$ÓÒò„§‘,ΘÞZO‘e»´è=†ŸX´WÙ:Î6eÒ[æ¦ë,ƒÒ1à~8Š—<’Â)iT¤Öƒ¸jpj´i”5x#ˆó£_+bÐéb·ßøŒ#õ–f‹i>^âê[Jž¥ -SK/4Kh–aæ|µ º8Ì¥5^,1-07¸]”t‰´[k3qŽ}Ä6œT¾z웲¡÷QIœ_ÇQµ«ÛªcUàˆ·sa9îÛƒAp+4fü[‡ÌWZ¾Åh+Ü%V¹4õù·±Œ}?Ó›Ž©¤@TË“ÂÄ j»®}«‰ÞŸ_<’¶O=ëUC˜>WiIcZ­(zñ¹v§HF{øØáAö ûâÈ•¹z•VY±z©·&z_‡JËL8HGS³m}œ"*Sb‘†×‹d~'+øu¢]öÑëæú˜ÜXádgBn²Õj—+8™_ÑüÍ!„ö¾LᢚĂ˦ÊÓðɤQÚÄtd­;Ñœòӧά„7ËE”áWéç„1ÓÉæKÈMçßLG~pèF¤ªÅaă*¥\•çúeGWLOu­$HƒÔÄHO$fu|öðL’÷‰@Jœ .ã-ùÒnV vLþsС¼½=[ú#
+»á~³'±rCÁ­¡6ZÑ<NóÃT·÷Š™
+é¢ìŒåë×[}ý•óV ž†ÆvµÏÇQÍq+ô½Menµ›‹ªˆL;UG´èaŽÜÁNâ²n­>•'}š<Ö¸e¥·xêøÇ·Å™m»Ý‹Ý¿Â$¨·¬l^Tfixúµúôëüäš½¸Úž_ú¡‹£|I´ûTçÇÍLc”5Å—äáMøA½Ü5È>“‘XäfHIªjIÊ«–€x­dXu¢1/’.üX ÇÒ¹/×A)zAù€½)]B%šÊØ:3U¦],
+£‚ÊVä}VúÖÇ#*'ú(!6
+ÿ+웃8öMWã|©òf2©Fã’e®µo‘Þ[_ü"ÎK ®íúØ.~Xõ
+Ø ÿ\Ð VØKµïØË[Ä@ ¾Ì.¯âî·á’Ñ ®lñÂIDbÔìä${Ò#}-Ø)I É0A›ÆºÂÛ}–Õ»üÇÝ׉W`¥Y‘x <€¾ƒR}ǦB–†¬ÒÕ$ÐR! ¦­aß4c6KÖít&p*±kÝ,Gß/ ¢é#0nþ¶=!f¼2‚CnEÖUt¤£,Ð4ÝŽçê)ü|¶6Ü”-çα yH_(íwØË»|²oN•åV~ÆÈ^h#†Xë
+¿ƒÂÌä˜ÞÛn\³+<L@fÔÙ™ÑÞÓïÅÅšBû^±$V–ü}t9›ŽÀÝŠþÇG”LÏÇé,Z¼x†y5ý©Ü¶Á/„i"÷¤—¸§wè¿j¯0wø·žŽÂ?ØÉ+íÙGœïêæòl8ÏH
+W¯—…pEKi$_ éú‚¥àÎãšÙ‚Uάãa«š67e„§î4ïÈæ\â‹îÎý/¼Šh²ÊXˆ Òðsò/ÌTÎ]ª}@-OjQ MW.3YHe¯|¿îOIf.ŒW)3û\´¨b&ƒ.}ü'?EÆƨ¹û,½tŠ=zŸf& Íëiým)é…šxÌ$M áá’àptZ guþý…³,¨Òmcò¨”_ÑÍ!^‹jÓ—ŸïôTHûÖ¥T¯‰û:IòpöÔL–'ºSVkÉœ^¥àxCš*ÄÂB±_Ë<ŽAddÜö«4øn;Ø\ÞŽÙ.æ @ûõaD¾é2MMû#uŠ‹…Ûf¥È"J†VCª 裏”Jikv—»ÆÕ}6•Ppí•‹CÑr1ãÊòwש° %F1«þ!L©¡tÑl±JÑ”FB?¢ukª"ÏÚx×m”Mቋv!µ•S<Õhø’~4´é.
+ŒÒÉÁÀV)b¥?œßVÝû~WÉa¼øu<¿«ØXÂRSèv,'´|½˜Ó1¼4Ä8Y|s*{&Rãké§_'Ç0%+ñjñ ºä+ˆ­Þ¨Ú»À%Õ&*Pi;‰ttü«ºÎǺ?Þ⨹
+endstream
+endobj
+1989 0 obj <<
+/Type /FontDescriptor
+/FontName /BBKPKI+NimbusSanL-ReguItal
+/Flags 4
+/FontBBox [-178 -284 1108 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle -12
+/StemV 88
+/XHeight 523
+/CharSet (/A/C/D/E/F/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/a/b/c/comma/d/e/f/fi/fl/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/quotedbl/quoteright/r/s/t/u/underscore/v/w/x/y/z/zero)
+/FontFile 1988 0 R
+>> endobj
+1962 0 obj <<
+/Type /Encoding
+/Differences [2/fi/fl 33/exclam/quotedbl/numbersign/dollar 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question 65/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 91/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright 148/quotedblright/bullet/endash 169/copyright 174/registered]
+>> endobj
+908 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SYFPBV+CMMI10
+/FontDescriptor 1973 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 1967 0 R
+>> endobj
+715 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YNRGLS+CMSY10
+/FontDescriptor 1975 0 R
+/FirstChar 3
+/LastChar 110
+/Widths 1969 0 R
+>> endobj
+920 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YIQMNR+NimbusMonL-Regu
+/FontDescriptor 1977 0 R
+/FirstChar 33
+/LastChar 125
+/Widths 1966 0 R
+/Encoding 1962 0 R
+>> endobj
+714 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IKHYGL+NimbusSanL-Bold
+/FontDescriptor 1979 0 R
+/FirstChar 3
+/LastChar 122
+/Widths 1970 0 R
+/Encoding 1962 0 R
+>> endobj
+749 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LJEUKZ+NimbusSanL-BoldCond
+/FontDescriptor 1981 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 1968 0 R
+/Encoding 1962 0 R
+>> endobj
+1097 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /VMTBGM+NimbusSanL-BoldItal
+/FontDescriptor 1983 0 R
+/FirstChar 3
+/LastChar 119
+/Widths 1964 0 R
+/Encoding 1962 0 R
+>> endobj
+1131 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GRJGEU+NimbusSanL-BoldCondItal
+/FontDescriptor 1985 0 R
+/FirstChar 3
+/LastChar 122
+/Widths 1963 0 R
+/Encoding 1962 0 R
+>> endobj
+709 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PMLMKB+NimbusSanL-Regu
+/FontDescriptor 1987 0 R
+/FirstChar 2
+/LastChar 174
+/Widths 1971 0 R
+/Encoding 1962 0 R
+>> endobj
+1055 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BBKPKI+NimbusSanL-ReguItal
+/FontDescriptor 1989 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 1965 0 R
+/Encoding 1962 0 R
+>> endobj
+710 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [705 0 R 712 0 R 747 0 R 792 0 R 835 0 R 877 0 R]
+>> endobj
+909 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [906 0 R 911 0 R 915 0 R 924 0 R 937 0 R 961 0 R]
+>> endobj
+981 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [978 0 R 983 0 R 1000 0 R 1004 0 R 1015 0 R 1019 0 R]
+>> endobj
+1034 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1031 0 R 1039 0 R 1043 0 R 1050 0 R 1062 0 R 1068 0 R]
+>> endobj
+1075 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1072 0 R 1077 0 R 1082 0 R 1091 0 R 1109 0 R 1120 0 R]
+>> endobj
+1133 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1126 0 R 1139 0 R 1162 0 R 1178 0 R 1196 0 R 1209 0 R]
+>> endobj
+1300 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1295 0 R 1364 0 R 1379 0 R 1388 0 R 1398 0 R 1406 0 R]
+>> endobj
+1420 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1413 0 R 1424 0 R 1434 0 R 1457 0 R 1472 0 R 1480 0 R]
+>> endobj
+1516 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1506 0 R 1524 0 R 1530 0 R 1550 0 R 1573 0 R 1583 0 R]
+>> endobj
+1606 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1599 0 R 1612 0 R 1622 0 R 1627 0 R 1635 0 R 1650 0 R]
+>> endobj
+1673 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1666 0 R 1683 0 R 1692 0 R 1745 0 R 1814 0 R 1905 0 R]
+>> endobj
+1961 0 obj <<
+/Type /Pages
+/Count 1
+/Parent 1991 0 R
+/Kids [1958 0 R]
+>> endobj
+1990 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 1992 0 R
+/Kids [710 0 R 909 0 R 981 0 R 1034 0 R 1075 0 R 1133 0 R]
+>> endobj
+1991 0 obj <<
+/Type /Pages
+/Count 31
+/Parent 1992 0 R
+/Kids [1300 0 R 1420 0 R 1516 0 R 1606 0 R 1673 0 R 1961 0 R]
+>> endobj
+1992 0 obj <<
+/Type /Pages
+/Count 67
+/Kids [1990 0 R 1991 0 R]
+>> endobj
+1993 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 702 0 R
+/Count 7
+>> endobj
+702 0 obj <<
+/Title 703 0 R
+/A 701 0 R
+/Parent 1993 0 R
+/Prev 599 0 R
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 697 0 R
+/Parent 695 0 R
+>> endobj
+695 0 obj <<
+/Title 696 0 R
+/A 693 0 R
+/Parent 599 0 R
+/Prev 663 0 R
+/First 699 0 R
+/Last 699 0 R
+/Count -1
+>> endobj
+691 0 obj <<
+/Title 692 0 R
+/A 689 0 R
+/Parent 683 0 R
+/Prev 687 0 R
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 685 0 R
+/Parent 683 0 R
+/Next 691 0 R
+>> endobj
+683 0 obj <<
+/Title 684 0 R
+/A 681 0 R
+/Parent 663 0 R
+/Prev 671 0 R
+/First 687 0 R
+/Last 691 0 R
+/Count -2
+>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 671 0 R
+/Prev 675 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 671 0 R
+/Next 679 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 663 0 R
+/Prev 667 0 R
+/Next 683 0 R
+/First 675 0 R
+/Last 679 0 R
+/Count -2
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 663 0 R
+/Next 671 0 R
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 599 0 R
+/Prev 631 0 R
+/Next 695 0 R
+/First 667 0 R
+/Last 683 0 R
+/Count -3
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 639 0 R
+/Prev 655 0 R
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 639 0 R
+/Prev 651 0 R
+/Next 659 0 R
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 639 0 R
+/Prev 647 0 R
+/Next 655 0 R
+>> endobj
+647 0 obj <<
+/Title 648 0 R
+/A 645 0 R
+/Parent 639 0 R
+/Prev 643 0 R
+/Next 651 0 R
+>> endobj
+643 0 obj <<
+/Title 644 0 R
+/A 641 0 R
+/Parent 639 0 R
+/Next 647 0 R
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 637 0 R
+/Parent 631 0 R
+/Prev 635 0 R
+/First 643 0 R
+/Last 659 0 R
+/Count -5
+>> endobj
+635 0 obj <<
+/Title 636 0 R
+/A 633 0 R
+/Parent 631 0 R
+/Next 639 0 R
+>> endobj
+631 0 obj <<
+/Title 632 0 R
+/A 629 0 R
+/Parent 599 0 R
+/Prev 603 0 R
+/Next 663 0 R
+/First 635 0 R
+/Last 639 0 R
+/Count -2
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 625 0 R
+/Parent 611 0 R
+/Prev 623 0 R
+>> endobj
+623 0 obj <<
+/Title 624 0 R
+/A 621 0 R
+/Parent 611 0 R
+/Prev 619 0 R
+/Next 627 0 R
+>> endobj
+619 0 obj <<
+/Title 620 0 R
+/A 617 0 R
+/Parent 611 0 R
+/Prev 615 0 R
+/Next 623 0 R
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 613 0 R
+/Parent 611 0 R
+/Next 619 0 R
+>> endobj
+611 0 obj <<
+/Title 612 0 R
+/A 609 0 R
+/Parent 603 0 R
+/Prev 607 0 R
+/First 615 0 R
+/Last 627 0 R
+/Count -4
+>> endobj
+607 0 obj <<
+/Title 608 0 R
+/A 605 0 R
+/Parent 603 0 R
+/Next 611 0 R
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 601 0 R
+/Parent 599 0 R
+/Next 631 0 R
+/First 607 0 R
+/Last 611 0 R
+/Count -2
+>> endobj
+599 0 obj <<
+/Title 600 0 R
+/A 597 0 R
+/Parent 1993 0 R
+/Prev 79 0 R
+/Next 702 0 R
+/First 603 0 R
+/Last 695 0 R
+/Count -4
+>> endobj
+595 0 obj <<
+/Title 596 0 R
+/A 593 0 R
+/Parent 79 0 R
+/Prev 575 0 R
+>> endobj
+591 0 obj <<
+/Title 592 0 R
+/A 589 0 R
+/Parent 583 0 R
+/Prev 587 0 R
+>> endobj
+587 0 obj <<
+/Title 588 0 R
+/A 585 0 R
+/Parent 583 0 R
+/Next 591 0 R
+>> endobj
+583 0 obj <<
+/Title 584 0 R
+/A 581 0 R
+/Parent 575 0 R
+/Prev 579 0 R
+/First 587 0 R
+/Last 591 0 R
+/Count -2
+>> endobj
+579 0 obj <<
+/Title 580 0 R
+/A 577 0 R
+/Parent 575 0 R
+/Next 583 0 R
+>> endobj
+575 0 obj <<
+/Title 576 0 R
+/A 573 0 R
+/Parent 79 0 R
+/Prev 523 0 R
+/Next 595 0 R
+/First 579 0 R
+/Last 583 0 R
+/Count -2
+>> endobj
+571 0 obj <<
+/Title 572 0 R
+/A 569 0 R
+/Parent 535 0 R
+/Prev 567 0 R
+>> endobj
+567 0 obj <<
+/Title 568 0 R
+/A 565 0 R
+/Parent 535 0 R
+/Prev 563 0 R
+/Next 571 0 R
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 535 0 R
+/Prev 559 0 R
+/Next 567 0 R
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 535 0 R
+/Prev 555 0 R
+/Next 563 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 535 0 R
+/Prev 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 535 0 R
+/Prev 547 0 R
+/Next 555 0 R
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 535 0 R
+/Prev 543 0 R
+/Next 551 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 535 0 R
+/Prev 539 0 R
+/Next 547 0 R
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 535 0 R
+/Next 543 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 523 0 R
+/Prev 531 0 R
+/First 539 0 R
+/Last 571 0 R
+/Count -9
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 523 0 R
+/Prev 527 0 R
+/Next 535 0 R
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 523 0 R
+/Next 531 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 79 0 R
+/Prev 467 0 R
+/Next 575 0 R
+/First 527 0 R
+/Last 535 0 R
+/Count -3
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 503 0 R
+/Prev 515 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 503 0 R
+/Prev 511 0 R
+/Next 519 0 R
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 503 0 R
+/Prev 507 0 R
+/Next 515 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 503 0 R
+/Next 511 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 467 0 R
+/Prev 475 0 R
+/First 507 0 R
+/Last 519 0 R
+/Count -4
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 475 0 R
+/Prev 495 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 475 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 475 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 475 0 R
+/Prev 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 475 0 R
+/Prev 479 0 R
+/Next 487 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 467 0 R
+/Prev 471 0 R
+/Next 503 0 R
+/First 479 0 R
+/Last 499 0 R
+/Count -6
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 467 0 R
+/Next 475 0 R
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 79 0 R
+/Prev 419 0 R
+/Next 523 0 R
+/First 471 0 R
+/Last 503 0 R
+/Count -3
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 427 0 R
+/Prev 459 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 427 0 R
+/Prev 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 427 0 R
+/Prev 451 0 R
+/Next 459 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 427 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 427 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 427 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 427 0 R
+/Prev 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 427 0 R
+/Prev 431 0 R
+/Next 439 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 419 0 R
+/Prev 423 0 R
+/First 431 0 R
+/Last 463 0 R
+/Count -9
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 79 0 R
+/Prev 263 0 R
+/Next 467 0 R
+/First 423 0 R
+/Last 427 0 R
+/Count -2
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 279 0 R
+/Prev 411 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 279 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 279 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 279 0 R
+/Prev 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 279 0 R
+/Prev 395 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 279 0 R
+/Prev 391 0 R
+/Next 399 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 279 0 R
+/Prev 387 0 R
+/Next 395 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 279 0 R
+/Prev 383 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 279 0 R
+/Prev 379 0 R
+/Next 387 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 279 0 R
+/Prev 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 279 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 279 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 279 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 279 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 279 0 R
+/Prev 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 279 0 R
+/Prev 351 0 R
+/Next 359 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 279 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 279 0 R
+/Prev 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 279 0 R
+/Prev 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 279 0 R
+/Prev 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 279 0 R
+/Prev 331 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 279 0 R
+/Prev 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 279 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 279 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 279 0 R
+/Prev 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 279 0 R
+/Prev 311 0 R
+/Next 319 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 279 0 R
+/Prev 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 279 0 R
+/Prev 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 279 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 279 0 R
+/Prev 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 279 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 279 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 279 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 263 0 R
+/Prev 271 0 R
+/First 283 0 R
+/Last 415 0 R
+/Count -34
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 271 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 263 0 R
+/Prev 267 0 R
+/Next 279 0 R
+/First 275 0 R
+/Last 275 0 R
+/Count -1
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 79 0 R
+/Prev 231 0 R
+/Next 419 0 R
+/First 267 0 R
+/Last 279 0 R
+/Count -3
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 239 0 R
+/Prev 255 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 239 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 239 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 239 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 231 0 R
+/Prev 235 0 R
+/First 243 0 R
+/Last 259 0 R
+/Count -5
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 79 0 R
+/Prev 187 0 R
+/Next 263 0 R
+/First 235 0 R
+/Last 239 0 R
+/Count -2
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 203 0 R
+/Prev 223 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 203 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 203 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 203 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 203 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 187 0 R
+/Prev 195 0 R
+/First 207 0 R
+/Last 227 0 R
+/Count -6
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 195 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 187 0 R
+/Prev 191 0 R
+/Next 203 0 R
+/First 199 0 R
+/Last 199 0 R
+/Count -1
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 79 0 R
+/Prev 167 0 R
+/Next 231 0 R
+/First 191 0 R
+/Last 203 0 R
+/Count -3
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 175 0 R
+/Prev 179 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 167 0 R
+/Prev 171 0 R
+/First 179 0 R
+/Last 183 0 R
+/Count -2
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 79 0 R
+/Prev 151 0 R
+/Next 187 0 R
+/First 171 0 R
+/Last 175 0 R
+/Count -2
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 159 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 151 0 R
+/Prev 155 0 R
+/First 163 0 R
+/Last 163 0 R
+/Count -1
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 79 0 R
+/Prev 107 0 R
+/Next 167 0 R
+/First 155 0 R
+/Last 159 0 R
+/Count -2
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 143 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 107 0 R
+/Prev 115 0 R
+/First 147 0 R
+/Last 147 0 R
+/Count -1
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 115 0 R
+/Prev 135 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 115 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 115 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 115 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 115 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 107 0 R
+/Prev 111 0 R
+/Next 143 0 R
+/First 119 0 R
+/Last 139 0 R
+/Count -6
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 79 0 R
+/Prev 91 0 R
+/Next 151 0 R
+/First 111 0 R
+/Last 143 0 R
+/Count -3
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 99 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 91 0 R
+/Prev 95 0 R
+/First 103 0 R
+/Last 103 0 R
+/Count -1
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 79 0 R
+/Prev 83 0 R
+/Next 107 0 R
+/First 95 0 R
+/Last 99 0 R
+/Count -2
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 83 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 79 0 R
+/Next 91 0 R
+/First 87 0 R
+/Last 87 0 R
+/Count -1
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 1993 0 R
+/Prev 71 0 R
+/Next 599 0 R
+/First 83 0 R
+/Last 595 0 R
+/Count -13
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 71 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 1993 0 R
+/Prev 63 0 R
+/Next 79 0 R
+/First 75 0 R
+/Last 75 0 R
+/Count -1
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 63 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 1993 0 R
+/Prev 55 0 R
+/Next 71 0 R
+/First 67 0 R
+/Last 67 0 R
+/Count -1
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 55 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 1993 0 R
+/Prev 7 0 R
+/Next 63 0 R
+/First 59 0 R
+/Last 59 0 R
+/Count -1
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 47 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 7 0 R
+/Prev 43 0 R
+/First 51 0 R
+/Last 51 0 R
+/Count -1
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 7 0 R
+/Prev 27 0 R
+/Next 47 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 27 0 R
+/First 35 0 R
+/Last 39 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 7 0 R
+/Prev 23 0 R
+/Next 43 0 R
+/First 31 0 R
+/Last 31 0 R
+/Count -1
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 7 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 7 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 7 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 1993 0 R
+/Next 55 0 R
+/First 11 0 R
+/Last 47 0 R
+/Count -7
+>> endobj
+1994 0 obj <<
+/Names [(Doc-Start) 708 0 R (chapter*.1) 750 0 R (chapter.1) 6 0 R (chapter.2) 54 0 R (chapter.3) 62 0 R (chapter.4) 70 0 R]
+/Limits [(Doc-Start) (chapter.4)]
+>> endobj
+1995 0 obj <<
+/Names [(chapter.5) 78 0 R (chapter.6) 598 0 R (classhierarchy__info) 1035 0 R (classhierarchy__info_a12fc455d853883d91e3a19567aaac3fe) 1643 0 R (classhierarchy__info_a4122e10b5d763f2ca3f13076f836ddfe) 1641 0 R (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba) 1642 0 R]
+/Limits [(chapter.5) (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba)]
+>> endobj
+1996 0 obj <<
+/Names [(classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) 1640 0 R (classkmp__flag) 1036 0 R (classkmp__flag_a36961b6d49f84ab81365a9389613ea34) 1674 0 R (classkmp__flag_a5d89de3bda829ab9be324007d915aa3b) 1675 0 R (classkmp__flag_aebad8727c9520d1bb2b2219c94cb3c62) 1676 0 R (classkmp__flag_af653ec27d16d63dab994e52ac6713aed) 1672 0 R]
+/Limits [(classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) (classkmp__flag_af653ec27d16d63dab994e52ac6713aed)]
+>> endobj
+1997 0 obj <<
+/Names [(classstats__flags__e) 1037 0 R (classstats__flags__e_a0d979459c9a441d94294d52e0745399e) 1689 0 R (classstats__flags__e_a37c8b539cc437be55817a1f122698106) 1690 0 R (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) 1579 0 R (classstats__flags__e_ab89a43b134178cd06845c54ca4d80e7f) 1687 0 R (classstats__flags__e_ac738a2dc47b270830803e943744f0d43) 1688 0 R]
+/Limits [(classstats__flags__e) (classstats__flags__e_ac738a2dc47b270830803e943744f0d43)]
+>> endobj
+1998 0 obj <<
+/Names [(group__ATOMIC__OPS) 968 0 R (group__BASIC__TYPES) 944 0 R (group__BASIC__TYPES_ga50e3ecb5eb8d70f437a84a8b2bc9e88f) 1117 0 R (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) 1118 0 R (group__BASIC__TYPES_ga7358cc60d0f006b36752a1795e6d5d93) 1114 0 R (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc) 1113 0 R]
+/Limits [(group__ATOMIC__OPS) (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc)]
+>> endobj
+1999 0 obj <<
+/Names [(group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) 1116 0 R (group__BASIC__TYPES_gaaffb56f3d5bd8803b41e9862e2aeb863) 1115 0 R (group__BASIC__TYPES_gaf2f9e5d03f9f38651a3b8d5ef8635d44) 1112 0 R (group__DEPRECATED) 945 0 R (group__DEPRECATED_ga27292e41af4c26e0bdf45b12b1f76d5a) 1130 0 R (group__PARALLEL) 947 0 R]
+/Limits [(group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) (group__PARALLEL)]
+>> endobj
+2000 0 obj <<
+/Names [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) 1175 0 R (group__PARALLEL_ga345b3a5866deefefc91ae1e8958f49f4) 1173 0 R (group__PARALLEL_ga7b1ba1cc8d9d2fea8654bbb1e59f079e) 1176 0 R (group__PARALLEL_gaae9462b03457d809faeb3e767a5b2283) 1174 0 R (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) 1167 0 R (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) 1171 0 R]
+/Limits [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124)]
+>> endobj
+2001 0 obj <<
+/Names [(group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) 1169 0 R (group__STARTUP__SHUTDOWN) 946 0 R (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) 970 0 R (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) 971 0 R (group__STATS__GATHERING) 969 0 R (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) 1556 0 R]
+/Limits [(group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66)]
+>> endobj
+2002 0 obj <<
+/Names [(group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) 1564 0 R (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) 1559 0 R (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) 1563 0 R (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) 1560 0 R (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) 1561 0 R (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) 1562 0 R]
+/Limits [(group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875)]
+>> endobj
+2003 0 obj <<
+/Names [(group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) 1565 0 R (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) 1558 0 R (group__STATS__GATHERING_sec_stats_env_vars) 1555 0 R (group__SYNCHRONIZATION) 967 0 R (group__SYNCHRONIZATION_ga2ead7ca8fe9886581c216ca8006ae3c9) 1470 0 R (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3) 1468 0 R]
+/Limits [(group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3)]
+>> endobj
+2004 0 obj <<
+/Names [(group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) 1465 0 R (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) 976 0 R (group__SYNCHRONIZATION_ga6a08af1c559012315e7e5be69f7fe608) 1469 0 R (group__SYNCHRONIZATION_ga84b2ebeef737395dddd8ef446c071760) 1461 0 R (group__SYNCHRONIZATION_ga90f0e4bf417a06cff2a4f895daa4ff37) 1467 0 R (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5) 1463 0 R]
+/Limits [(group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5)]
+>> endobj
+2005 0 obj <<
+/Names [(group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) 975 0 R (group__TASKING) 1615 0 R (group__TASKING_ga8b2a95073f7a4a81055899ee6a93ecee) 1617 0 R (group__TASKING_gab53273918f995639450c4dcbed02df88) 1619 0 R (group__THREADPRIVATE) 966 0 R (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) 1512 0 R]
+/Limits [(group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a)]
+>> endobj
+2006 0 obj <<
+/Names [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) 1518 0 R (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) 1517 0 R (group__THREADPRIVATE_gab4aa3dff2b1b55b1abb002ef69c7efe7) 1519 0 R (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) 1510 0 R (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) 1515 0 R (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) 1513 0 R]
+/Limits [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21)]
+>> endobj
+2007 0 obj <<
+/Names [(group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) 1514 0 R (group__THREADPRIVATE_gaec6e88892a1b0b62287df5173a7f0336) 1520 0 R (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) 1511 0 R (group__THREAD__STATES) 948 0 R (group__THREAD__STATES_ga127cc7161bbef3ccd2446a9405973192) 1204 0 R (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f) 1206 0 R]
+/Limits [(group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f)]
+>> endobj
+2008 0 obj <<
+/Names [(group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) 1207 0 R (group__THREAD__STATES_ga9a981e3dcd9264c2cf5bd8a8cc6f16af) 1202 0 R (group__THREAD__STATES_gadcc691c6c7695988deba68a2de817a66) 1200 0 R (group__USER) 1625 0 R (group__WAIT__RELEASE) 1094 0 R (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) 1095 0 R]
+/Limits [(group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b)]
+>> endobj
+2009 0 obj <<
+/Names [(group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) 1098 0 R (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba9e8f1573ea73441426c6a6dda73b4e49) 1099 0 R (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39baa8e37e16d043d78e34da1d19387be5ba) 1096 0 R (group__WORK__SHARING) 949 0 R (group__WORK__SHARING_ga06dfab09153c455fcaa609e97846b0d5) 1325 0 R (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731) 1327 0 R]
+/Limits [(group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731)]
+>> endobj
+2010 0 obj <<
+/Names [(group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) 1344 0 R (group__WORK__SHARING_ga21ff57e990e07b43d08dfb4214d928c8) 1369 0 R (group__WORK__SHARING_ga305bbe90a798fdc8347aa809978365f5) 1343 0 R (group__WORK__SHARING_ga4bec24e63a011cc0bfca98e79f3c0b93) 1330 0 R (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) 974 0 R (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970) 1373 0 R]
+/Limits [(group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970)]
+>> endobj
+2011 0 obj <<
+/Names [(group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) 1338 0 R (group__WORK__SHARING_ga7054a4ec6bf4a65dda00a0aab75db65f) 1368 0 R (group__WORK__SHARING_ga721f06c8017479ccc6cb46ae0552b597) 1322 0 R (group__WORK__SHARING_ga794e820b3c076c766cef93bb414908cc) 1328 0 R (group__WORK__SHARING_ga81091e3b6b3dfe02aab5e0a661f65433) 1374 0 R (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645) 1345 0 R]
+/Limits [(group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645)]
+>> endobj
+2012 0 obj <<
+/Names [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) 1372 0 R (group__WORK__SHARING_ga9a4e5434d7a476580c6ef7ad2c776bb5) 1334 0 R (group__WORK__SHARING_ga9ef4cfec5c836de61180767240c7f380) 1335 0 R (group__WORK__SHARING_gaa290fe71698081e26ec234a234d2fdcc) 1323 0 R (group__WORK__SHARING_gaa7d615b194c12278b00841852b0dff2b) 1329 0 R (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) 1367 0 R]
+/Limits [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24)]
+>> endobj
+2013 0 obj <<
+/Names [(group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) 1337 0 R (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) 1342 0 R (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) 1371 0 R (group__WORK__SHARING_gac7d4d8d2d7f5d33b5c2b33d89b3ec0af) 1370 0 R (group__WORK__SHARING_gac9f8cad27477155b583b54848887997d) 1339 0 R (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d) 1336 0 R]
+/Limits [(group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d)]
+>> endobj
+2014 0 obj <<
+/Names [(group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) 1341 0 R (group__WORK__SHARING_gada4a8fc8b0a17d3109acdeaf2c9443ea) 1324 0 R (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) 1301 0 R (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) 973 0 R (group__WORK__SHARING_gaed75fbf8e655bc644d585a48e810bcfc) 1331 0 R (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882) 1333 0 R]
+/Limits [(group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882)]
+>> endobj
+2015 0 obj <<
+/Names [(group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) 1340 0 R (group__WORK__SHARING_gafb31932f7af41b5db5e7d80b21926853) 1332 0 R (group__WORK__SHARING_gafc4e7d07089576fe946c42777ef191cc) 1326 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea14900e8333498e699db5038b413fa53a) 1316 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea1fd38bd33c374db6667332f011a980d9) 1319 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532) 1305 0 R]
+/Limits [(group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532)]
+>> endobj
+2016 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) 1317 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea28ae6227a8117b9f39b797caf3211313) 1312 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2a987351b9605b918693a17d4dd90772) 1303 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea317dd63053ef79e3b3cea2ce2b676b38) 1321 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea3dd2ff18afe8c14f3076694e52942ee5) 1318 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3) 1313 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3)]
+>> endobj
+2017 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) 1304 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7d1b46242e62919d0c5af733553351c3) 1315 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7ed3535e3c97c9c2ce299addd74b4a01) 1302 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a30ec9215efb0a584597aeda2c03e19) 1320 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a4a0dce1e919688bcd27411746b7ad8) 1308 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1) 1309 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1)]
+>> endobj
+2018 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) 1307 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beabbef146a7c8d44992e9c61bec2309348) 1311 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beac30b06c765f4623efb929a141ff9457e) 1314 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beadb87fc98ffc6440f53caa1f5d6606512) 1310 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beae4b8e84801f56fdb39472c45762bd051) 1306 0 R (index) 918 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) (index)]
+>> endobj
+2019 0 obj <<
+/Names [(index_SEC_EXAMPLES) 964 0 R (index_SEC_INTERFACES) 943 0 R (index_SEC_SEC_OT) 941 0 R (index_SEC_SEC_PT) 942 0 R (index_SEC_SHAREDVARS) 940 0 R (index_SEC_WORKSHARING_EXAMPLE) 965 0 R]
+/Limits [(index_SEC_EXAMPLES) (index_SEC_WORKSHARING_EXAMPLE)]
+>> endobj
+2020 0 obj <<
+/Names [(index_sec_building) 921 0 R (index_sec_frontend) 927 0 R (index_sec_intro) 919 0 R (index_sec_outlining) 928 0 R (index_sec_supported) 922 0 R (kmp__stats_8h_source) 1557 0 R]
+/Limits [(index_sec_building) (kmp__stats_8h_source)]
+>> endobj
+2021 0 obj <<
+/Names [(page.1) 917 0 R (page.10) 1021 0 R (page.11) 1033 0 R (page.12) 1041 0 R (page.13) 1045 0 R (page.14) 1052 0 R]
+/Limits [(page.1) (page.14)]
+>> endobj
+2022 0 obj <<
+/Names [(page.15) 1064 0 R (page.16) 1070 0 R (page.17) 1074 0 R (page.18) 1079 0 R (page.19) 1084 0 R (page.2) 926 0 R]
+/Limits [(page.15) (page.2)]
+>> endobj
+2023 0 obj <<
+/Names [(page.20) 1093 0 R (page.21) 1111 0 R (page.22) 1122 0 R (page.23) 1128 0 R (page.24) 1141 0 R (page.25) 1164 0 R]
+/Limits [(page.20) (page.25)]
+>> endobj
+2024 0 obj <<
+/Names [(page.26) 1180 0 R (page.27) 1198 0 R (page.28) 1211 0 R (page.29) 1297 0 R (page.3) 939 0 R (page.30) 1366 0 R]
+/Limits [(page.26) (page.30)]
+>> endobj
+2025 0 obj <<
+/Names [(page.31) 1381 0 R (page.32) 1390 0 R (page.33) 1400 0 R (page.34) 1408 0 R (page.35) 1415 0 R (page.36) 1426 0 R]
+/Limits [(page.31) (page.36)]
+>> endobj
+2026 0 obj <<
+/Names [(page.37) 1436 0 R (page.38) 1459 0 R (page.39) 1474 0 R (page.4) 963 0 R (page.40) 1482 0 R (page.41) 1508 0 R]
+/Limits [(page.37) (page.41)]
+>> endobj
+2027 0 obj <<
+/Names [(page.42) 1526 0 R (page.43) 1532 0 R (page.44) 1552 0 R (page.45) 1575 0 R (page.46) 1585 0 R (page.47) 1601 0 R]
+/Limits [(page.42) (page.47)]
+>> endobj
+2028 0 obj <<
+/Names [(page.48) 1614 0 R (page.49) 1624 0 R (page.5) 980 0 R (page.50) 1629 0 R (page.51) 1637 0 R (page.52) 1652 0 R]
+/Limits [(page.48) (page.52)]
+>> endobj
+2029 0 obj <<
+/Names [(page.53) 1668 0 R (page.54) 1685 0 R (page.55) 1694 0 R (page.56) 1747 0 R (page.57) 1816 0 R (page.58) 1907 0 R]
+/Limits [(page.53) (page.58)]
+>> endobj
+2030 0 obj <<
+/Names [(page.59) 1960 0 R (page.6) 985 0 R (page.7) 1002 0 R (page.8) 1006 0 R (page.9) 1017 0 R (section*.10) 1142 0 R]
+/Limits [(page.59) (section*.10)]
+>> endobj
+2031 0 obj <<
+/Names [(section*.11) 1165 0 R (section*.12) 1166 0 R (section*.13) 1199 0 R (section*.14) 1298 0 R (section*.15) 1299 0 R (section*.16) 1460 0 R]
+/Limits [(section*.11) (section*.16)]
+>> endobj
+2032 0 obj <<
+/Names [(section*.17) 1509 0 R (section*.18) 1553 0 R (section*.19) 1554 0 R (section*.2) 1053 0 R (section*.20) 1616 0 R (section*.21) 1638 0 R]
+/Limits [(section*.17) (section*.21)]
+>> endobj
+2033 0 obj <<
+/Names [(section*.22) 1639 0 R (section*.23) 1653 0 R (section*.24) 1669 0 R (section*.25) 1670 0 R (section*.26) 1671 0 R (section*.27) 1686 0 R]
+/Limits [(section*.22) (section*.27)]
+>> endobj
+2034 0 obj <<
+/Names [(section*.3) 1056 0 R (section*.4) 1058 0 R (section*.5) 1065 0 R (section*.6) 1066 0 R (section*.7) 1080 0 R (section*.8) 1085 0 R]
+/Limits [(section*.3) (section*.8)]
+>> endobj
+2035 0 obj <<
+/Names [(section*.9) 1129 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.1.5) 26 0 R]
+/Limits [(section*.9) (section.1.5)]
+>> endobj
+2036 0 obj <<
+/Names [(section.1.6) 42 0 R (section.1.7) 46 0 R (section.2.1) 58 0 R (section.3.1) 66 0 R (section.4.1) 74 0 R (section.5.1) 82 0 R]
+/Limits [(section.1.6) (section.5.1)]
+>> endobj
+2037 0 obj <<
+/Names [(section.5.10) 466 0 R (section.5.11) 522 0 R (section.5.12) 574 0 R (section.5.13) 594 0 R (section.5.2) 90 0 R (section.5.3) 106 0 R]
+/Limits [(section.5.10) (section.5.3)]
+>> endobj
+2038 0 obj <<
+/Names [(section.5.4) 150 0 R (section.5.5) 166 0 R (section.5.6) 186 0 R (section.5.7) 230 0 R (section.5.8) 262 0 R (section.5.9) 418 0 R]
+/Limits [(section.5.4) (section.5.9)]
+>> endobj
+2039 0 obj <<
+/Names [(section.6.1) 602 0 R (section.6.2) 630 0 R (section.6.3) 662 0 R (section.6.4) 694 0 R (structident) 972 0 R (structident_a8a098c07080704af1d89e401a1b4d10f) 1656 0 R]
+/Limits [(section.6.1) (structident_a8a098c07080704af1d89e401a1b4d10f)]
+>> endobj
+2040 0 obj <<
+/Names [(structident_a8c2ccc106967f36d7191d59d4d5a65dc) 1655 0 R (structident_a91db2d18476e0a527ba20e04ca2c3e74) 1657 0 R (structident_ae29e80f6fc150f73c1790c8796bcfd9f) 1658 0 R (structident_afa1ec17df36c4bf1e36e97eab63953b9) 1654 0 R (subsection.1.5.1) 30 0 R (subsection.1.7.1) 50 0 R]
+/Limits [(structident_a8c2ccc106967f36d7191d59d4d5a65dc) (subsection.1.7.1)]
+>> endobj
+2041 0 obj <<
+/Names [(subsection.5.1.1) 86 0 R (subsection.5.10.1) 470 0 R (subsection.5.10.2) 474 0 R (subsection.5.10.3) 502 0 R (subsection.5.11.1) 526 0 R (subsection.5.11.2) 530 0 R]
+/Limits [(subsection.5.1.1) (subsection.5.11.2)]
+>> endobj
+2042 0 obj <<
+/Names [(subsection.5.11.3) 534 0 R (subsection.5.12.1) 578 0 R (subsection.5.12.2) 582 0 R (subsection.5.2.1) 94 0 R (subsection.5.2.2) 98 0 R (subsection.5.3.1) 110 0 R]
+/Limits [(subsection.5.11.3) (subsection.5.3.1)]
+>> endobj
+2043 0 obj <<
+/Names [(subsection.5.3.2) 114 0 R (subsection.5.3.3) 142 0 R (subsection.5.4.1) 154 0 R (subsection.5.4.2) 158 0 R (subsection.5.5.1) 170 0 R (subsection.5.5.2) 174 0 R]
+/Limits [(subsection.5.3.2) (subsection.5.5.2)]
+>> endobj
+2044 0 obj <<
+/Names [(subsection.5.6.1) 190 0 R (subsection.5.6.2) 194 0 R (subsection.5.6.3) 202 0 R (subsection.5.7.1) 234 0 R (subsection.5.7.2) 238 0 R (subsection.5.8.1) 266 0 R]
+/Limits [(subsection.5.6.1) (subsection.5.8.1)]
+>> endobj
+2045 0 obj <<
+/Names [(subsection.5.8.2) 270 0 R (subsection.5.8.3) 278 0 R (subsection.5.9.1) 422 0 R (subsection.5.9.2) 426 0 R (subsection.6.1.1) 606 0 R (subsection.6.1.2) 610 0 R]
+/Limits [(subsection.5.8.2) (subsection.6.1.2)]
+>> endobj
+2046 0 obj <<
+/Names [(subsection.6.2.1) 634 0 R (subsection.6.2.2) 638 0 R (subsection.6.3.1) 666 0 R (subsection.6.3.2) 670 0 R (subsection.6.3.3) 682 0 R (subsection.6.4.1) 698 0 R]
+/Limits [(subsection.6.2.1) (subsection.6.4.1)]
+>> endobj
+2047 0 obj <<
+/Names [(subsubsection.1.5.1.1) 34 0 R (subsubsection.1.5.1.2) 38 0 R (subsubsection.5.10.2.1) 478 0 R (subsubsection.5.10.2.2) 482 0 R (subsubsection.5.10.2.3) 486 0 R (subsubsection.5.10.2.4) 490 0 R]
+/Limits [(subsubsection.1.5.1.1) (subsubsection.5.10.2.4)]
+>> endobj
+2048 0 obj <<
+/Names [(subsubsection.5.10.2.5) 494 0 R (subsubsection.5.10.2.6) 498 0 R (subsubsection.5.10.3.1) 506 0 R (subsubsection.5.10.3.2) 510 0 R (subsubsection.5.10.3.3) 514 0 R (subsubsection.5.10.3.4) 518 0 R]
+/Limits [(subsubsection.5.10.2.5) (subsubsection.5.10.3.4)]
+>> endobj
+2049 0 obj <<
+/Names [(subsubsection.5.11.3.1) 538 0 R (subsubsection.5.11.3.2) 542 0 R (subsubsection.5.11.3.3) 546 0 R (subsubsection.5.11.3.4) 550 0 R (subsubsection.5.11.3.5) 554 0 R (subsubsection.5.11.3.6) 558 0 R]
+/Limits [(subsubsection.5.11.3.1) (subsubsection.5.11.3.6)]
+>> endobj
+2050 0 obj <<
+/Names [(subsubsection.5.11.3.7) 562 0 R (subsubsection.5.11.3.8) 566 0 R (subsubsection.5.11.3.9) 570 0 R (subsubsection.5.12.2.1) 586 0 R (subsubsection.5.12.2.2) 590 0 R (subsubsection.5.2.2.1) 102 0 R]
+/Limits [(subsubsection.5.11.3.7) (subsubsection.5.2.2.1)]
+>> endobj
+2051 0 obj <<
+/Names [(subsubsection.5.3.2.1) 118 0 R (subsubsection.5.3.2.2) 122 0 R (subsubsection.5.3.2.3) 126 0 R (subsubsection.5.3.2.4) 130 0 R (subsubsection.5.3.2.5) 134 0 R (subsubsection.5.3.2.6) 138 0 R]
+/Limits [(subsubsection.5.3.2.1) (subsubsection.5.3.2.6)]
+>> endobj
+2052 0 obj <<
+/Names [(subsubsection.5.3.3.1) 146 0 R (subsubsection.5.4.2.1) 162 0 R (subsubsection.5.5.2.1) 178 0 R (subsubsection.5.5.2.2) 182 0 R (subsubsection.5.6.2.1) 198 0 R (subsubsection.5.6.3.1) 206 0 R]
+/Limits [(subsubsection.5.3.3.1) (subsubsection.5.6.3.1)]
+>> endobj
+2053 0 obj <<
+/Names [(subsubsection.5.6.3.2) 210 0 R (subsubsection.5.6.3.3) 214 0 R (subsubsection.5.6.3.4) 218 0 R (subsubsection.5.6.3.5) 222 0 R (subsubsection.5.6.3.6) 226 0 R (subsubsection.5.7.2.1) 242 0 R]
+/Limits [(subsubsection.5.6.3.2) (subsubsection.5.7.2.1)]
+>> endobj
+2054 0 obj <<
+/Names [(subsubsection.5.7.2.2) 246 0 R (subsubsection.5.7.2.3) 250 0 R (subsubsection.5.7.2.4) 254 0 R (subsubsection.5.7.2.5) 258 0 R (subsubsection.5.8.2.1) 274 0 R (subsubsection.5.8.3.1) 282 0 R]
+/Limits [(subsubsection.5.7.2.2) (subsubsection.5.8.3.1)]
+>> endobj
+2055 0 obj <<
+/Names [(subsubsection.5.8.3.10) 318 0 R (subsubsection.5.8.3.11) 322 0 R (subsubsection.5.8.3.12) 326 0 R (subsubsection.5.8.3.13) 330 0 R (subsubsection.5.8.3.14) 334 0 R (subsubsection.5.8.3.15) 338 0 R]
+/Limits [(subsubsection.5.8.3.10) (subsubsection.5.8.3.15)]
+>> endobj
+2056 0 obj <<
+/Names [(subsubsection.5.8.3.16) 342 0 R (subsubsection.5.8.3.17) 346 0 R (subsubsection.5.8.3.18) 350 0 R (subsubsection.5.8.3.19) 354 0 R (subsubsection.5.8.3.2) 286 0 R (subsubsection.5.8.3.20) 358 0 R]
+/Limits [(subsubsection.5.8.3.16) (subsubsection.5.8.3.20)]
+>> endobj
+2057 0 obj <<
+/Names [(subsubsection.5.8.3.21) 362 0 R (subsubsection.5.8.3.22) 366 0 R (subsubsection.5.8.3.23) 370 0 R (subsubsection.5.8.3.24) 374 0 R (subsubsection.5.8.3.25) 378 0 R (subsubsection.5.8.3.26) 382 0 R]
+/Limits [(subsubsection.5.8.3.21) (subsubsection.5.8.3.26)]
+>> endobj
+2058 0 obj <<
+/Names [(subsubsection.5.8.3.27) 386 0 R (subsubsection.5.8.3.28) 390 0 R (subsubsection.5.8.3.29) 394 0 R (subsubsection.5.8.3.3) 290 0 R (subsubsection.5.8.3.30) 398 0 R (subsubsection.5.8.3.31) 402 0 R]
+/Limits [(subsubsection.5.8.3.27) (subsubsection.5.8.3.31)]
+>> endobj
+2059 0 obj <<
+/Names [(subsubsection.5.8.3.32) 406 0 R (subsubsection.5.8.3.33) 410 0 R (subsubsection.5.8.3.34) 414 0 R (subsubsection.5.8.3.4) 294 0 R (subsubsection.5.8.3.5) 298 0 R (subsubsection.5.8.3.6) 302 0 R]
+/Limits [(subsubsection.5.8.3.32) (subsubsection.5.8.3.6)]
+>> endobj
+2060 0 obj <<
+/Names [(subsubsection.5.8.3.7) 306 0 R (subsubsection.5.8.3.8) 310 0 R (subsubsection.5.8.3.9) 314 0 R (subsubsection.5.9.2.1) 430 0 R (subsubsection.5.9.2.2) 434 0 R (subsubsection.5.9.2.3) 438 0 R]
+/Limits [(subsubsection.5.8.3.7) (subsubsection.5.9.2.3)]
+>> endobj
+2061 0 obj <<
+/Names [(subsubsection.5.9.2.4) 442 0 R (subsubsection.5.9.2.5) 446 0 R (subsubsection.5.9.2.6) 450 0 R (subsubsection.5.9.2.7) 454 0 R (subsubsection.5.9.2.8) 458 0 R (subsubsection.5.9.2.9) 462 0 R]
+/Limits [(subsubsection.5.9.2.4) (subsubsection.5.9.2.9)]
+>> endobj
+2062 0 obj <<
+/Names [(subsubsection.6.1.2.1) 614 0 R (subsubsection.6.1.2.2) 618 0 R (subsubsection.6.1.2.3) 622 0 R (subsubsection.6.1.2.4) 626 0 R (subsubsection.6.2.2.1) 642 0 R (subsubsection.6.2.2.2) 646 0 R]
+/Limits [(subsubsection.6.1.2.1) (subsubsection.6.2.2.2)]
+>> endobj
+2063 0 obj <<
+/Names [(subsubsection.6.2.2.3) 650 0 R (subsubsection.6.2.2.4) 654 0 R (subsubsection.6.2.2.5) 658 0 R (subsubsection.6.3.2.1) 674 0 R (subsubsection.6.3.2.2) 678 0 R (subsubsection.6.3.3.1) 686 0 R]
+/Limits [(subsubsection.6.2.2.3) (subsubsection.6.3.3.1)]
+>> endobj
+2064 0 obj <<
+/Names [(subsubsection.6.3.3.2) 690 0 R (table.5.1) 1054 0 R (table.5.10) 1182 0 R (table.5.11) 1183 0 R (table.5.12) 1184 0 R (table.5.13) 1201 0 R]
+/Limits [(subsubsection.6.3.3.2) (table.5.13)]
+>> endobj
+2065 0 obj <<
+/Names [(table.5.14) 1203 0 R (table.5.15) 1205 0 R (table.5.16) 1212 0 R (table.5.17) 1213 0 R (table.5.18) 1382 0 R (table.5.19) 1383 0 R]
+/Limits [(table.5.14) (table.5.19)]
+>> endobj
+2066 0 obj <<
+/Names [(table.5.2) 1057 0 R (table.5.20) 1391 0 R (table.5.21) 1392 0 R (table.5.22) 1401 0 R (table.5.23) 1409 0 R (table.5.24) 1410 0 R]
+/Limits [(table.5.2) (table.5.24)]
+>> endobj
+2067 0 obj <<
+/Names [(table.5.25) 1416 0 R (table.5.26) 1417 0 R (table.5.27) 1418 0 R (table.5.28) 1419 0 R (table.5.29) 1427 0 R (table.5.3) 1132 0 R]
+/Limits [(table.5.25) (table.5.3)]
+>> endobj
+2068 0 obj <<
+/Names [(table.5.30) 1428 0 R (table.5.31) 1429 0 R (table.5.32) 1437 0 R (table.5.33) 1462 0 R (table.5.34) 1464 0 R (table.5.35) 1466 0 R]
+/Limits [(table.5.30) (table.5.35)]
+>> endobj
+2069 0 obj <<
+/Names [(table.5.36) 1475 0 R (table.5.37) 1476 0 R (table.5.38) 1477 0 R (table.5.39) 1478 0 R (table.5.4) 1143 0 R (table.5.40) 1483 0 R]
+/Limits [(table.5.36) (table.5.40)]
+>> endobj
+2070 0 obj <<
+/Names [(table.5.41) 1484 0 R (table.5.42) 1527 0 R (table.5.43) 1528 0 R (table.5.44) 1533 0 R (table.5.45) 1534 0 R (table.5.46) 1576 0 R]
+/Limits [(table.5.41) (table.5.46)]
+>> endobj
+2071 0 obj <<
+/Names [(table.5.47) 1577 0 R (table.5.48) 1578 0 R (table.5.49) 1586 0 R (table.5.5) 1144 0 R (table.5.50) 1587 0 R (table.5.51) 1602 0 R]
+/Limits [(table.5.47) (table.5.51)]
+>> endobj
+2072 0 obj <<
+/Names [(table.5.52) 1603 0 R (table.5.53) 1605 0 R (table.5.54) 1618 0 R (table.5.55) 1620 0 R (table.5.6) 1168 0 R (table.5.7) 1170 0 R]
+/Limits [(table.5.52) (table.5.7)]
+>> endobj
+2073 0 obj <<
+/Names [(table.5.8) 1172 0 R (table.5.9) 1181 0 R]
+/Limits [(table.5.8) (table.5.9)]
+>> endobj
+2074 0 obj <<
+/Kids [1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R]
+/Limits [(Doc-Start) (group__PARALLEL)]
+>> endobj
+2075 0 obj <<
+/Kids [2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R]
+/Limits [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a)]
+>> endobj
+2076 0 obj <<
+/Kids [2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R]
+/Limits [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645)]
+>> endobj
+2077 0 obj <<
+/Kids [2012 0 R 2013 0 R 2014 0 R 2015 0 R 2016 0 R 2017 0 R]
+/Limits [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1)]
+>> endobj
+2078 0 obj <<
+/Kids [2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R 2023 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) (page.25)]
+>> endobj
+2079 0 obj <<
+/Kids [2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2029 0 R]
+/Limits [(page.26) (page.58)]
+>> endobj
+2080 0 obj <<
+/Kids [2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R 2035 0 R]
+/Limits [(page.59) (section.1.5)]
+>> endobj
+2081 0 obj <<
+/Kids [2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R]
+/Limits [(section.1.6) (subsection.5.11.2)]
+>> endobj
+2082 0 obj <<
+/Kids [2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R]
+/Limits [(subsection.5.11.3) (subsubsection.5.10.2.4)]
+>> endobj
+2083 0 obj <<
+/Kids [2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R]
+/Limits [(subsubsection.5.10.2.5) (subsubsection.5.7.2.1)]
+>> endobj
+2084 0 obj <<
+/Kids [2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R]
+/Limits [(subsubsection.5.7.2.2) (subsubsection.5.8.3.6)]
+>> endobj
+2085 0 obj <<
+/Kids [2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R]
+/Limits [(subsubsection.5.8.3.7) (table.5.19)]
+>> endobj
+2086 0 obj <<
+/Kids [2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R]
+/Limits [(table.5.2) (table.5.51)]
+>> endobj
+2087 0 obj <<
+/Kids [2072 0 R 2073 0 R]
+/Limits [(table.5.52) (table.5.9)]
+>> endobj
+2088 0 obj <<
+/Kids [2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R]
+/Limits [(Doc-Start) (page.58)]
+>> endobj
+2089 0 obj <<
+/Kids [2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R]
+/Limits [(page.59) (table.5.19)]
+>> endobj
+2090 0 obj <<
+/Kids [2086 0 R 2087 0 R]
+/Limits [(table.5.2) (table.5.9)]
+>> endobj
+2091 0 obj <<
+/Kids [2088 0 R 2089 0 R 2090 0 R]
+/Limits [(Doc-Start) (table.5.9)]
+>> endobj
+2092 0 obj <<
+/Dests 2091 0 R
+>> endobj
+2093 0 obj <<
+/Type /Catalog
+/Pages 1992 0 R
+/Outlines 1993 0 R
+/Names 2092 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 2 << /S /r >> 8 << /S /D >> ] >>
+/OpenAction 704 0 R
+>> endobj
+2094 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20150923130240-05'00')
+/ModDate (D:20150923130240-05'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 2095
+0000000001 65535 f
+0000000002 00000 f
+0000000003 00000 f
+0000000004 00000 f
+0000000000 00000 f
+0000000015 00000 n
+0000073727 00000 n
+0000435807 00000 n
+0000000060 00000 n
+0000000291 00000 n
+0000073908 00000 n
+0000435735 00000 n
+0000000338 00000 n
+0000000425 00000 n
+0000074030 00000 n
+0000435649 00000 n
+0000000473 00000 n
+0000000649 00000 n
+0000074151 00000 n
+0000435563 00000 n
+0000000697 00000 n
+0000000903 00000 n
+0000077130 00000 n
+0000435477 00000 n
+0000000951 00000 n
+0000001211 00000 n
+0000077252 00000 n
+0000435354 00000 n
+0000001259 00000 n
+0000001331 00000 n
+0000081676 00000 n
+0000435256 00000 n
+0000001384 00000 n
+0000001552 00000 n
+0000081798 00000 n
+0000435182 00000 n
+0000001610 00000 n
+0000001725 00000 n
+0000081920 00000 n
+0000435108 00000 n
+0000001783 00000 n
+0000001893 00000 n
+0000082041 00000 n
+0000435022 00000 n
+0000001941 00000 n
+0000002061 00000 n
+0000086779 00000 n
+0000434912 00000 n
+0000002109 00000 n
+0000002176 00000 n
+0000086900 00000 n
+0000434851 00000 n
+0000002229 00000 n
+0000002362 00000 n
+0000091640 00000 n
+0000434726 00000 n
+0000002408 00000 n
+0000002498 00000 n
+0000091701 00000 n
+0000434665 00000 n
+0000002546 00000 n
+0000002608 00000 n
+0000094487 00000 n
+0000434539 00000 n
+0000002654 00000 n
+0000002774 00000 n
+0000094548 00000 n
+0000434478 00000 n
+0000002822 00000 n
+0000002927 00000 n
+0000097503 00000 n
+0000434352 00000 n
+0000002973 00000 n
+0000003058 00000 n
+0000097564 00000 n
+0000434291 00000 n
+0000003106 00000 n
+0000003186 00000 n
+0000100565 00000 n
+0000434162 00000 n
+0000003232 00000 n
+0000003362 00000 n
+0000100688 00000 n
+0000434051 00000 n
+0000003410 00000 n
+0000003525 00000 n
+0000100749 00000 n
+0000433990 00000 n
+0000003578 00000 n
+0000003708 00000 n
+0000114060 00000 n
+0000433865 00000 n
+0000003756 00000 n
+0000003901 00000 n
+0000114121 00000 n
+0000433791 00000 n
+0000003954 00000 n
+0000004084 00000 n
+0000114182 00000 n
+0000433677 00000 n
+0000004137 00000 n
+0000004321 00000 n
+0000114306 00000 n
+0000433613 00000 n
+0000004380 00000 n
+0000004456 00000 n
+0000117984 00000 n
+0000433483 00000 n
+0000004505 00000 n
+0000004591 00000 n
+0000118046 00000 n
+0000433404 00000 n
+0000004645 00000 n
+0000004776 00000 n
+0000118108 00000 n
+0000433272 00000 n
+0000004830 00000 n
+0000005014 00000 n
+0000118233 00000 n
+0000433193 00000 n
+0000005073 00000 n
+0000005225 00000 n
+0000118358 00000 n
+0000433100 00000 n
+0000005284 00000 n
+0000005403 00000 n
+0000118483 00000 n
+0000433007 00000 n
+0000005462 00000 n
+0000005609 00000 n
+0000118608 00000 n
+0000432914 00000 n
+0000005668 00000 n
+0000005815 00000 n
+0000118733 00000 n
+0000432821 00000 n
+0000005874 00000 n
+0000005973 00000 n
+0000118857 00000 n
+0000432742 00000 n
+0000006032 00000 n
+0000006136 00000 n
+0000119748 00000 n
+0000432624 00000 n
+0000006190 00000 n
+0000006326 00000 n
+0000119873 00000 n
+0000432559 00000 n
+0000006385 00000 n
+0000006451 00000 n
+0000121846 00000 n
+0000432428 00000 n
+0000006500 00000 n
+0000006631 00000 n
+0000121971 00000 n
+0000432349 00000 n
+0000006685 00000 n
+0000006816 00000 n
+0000122033 00000 n
+0000432231 00000 n
+0000006870 00000 n
+0000007011 00000 n
+0000122158 00000 n
+0000432166 00000 n
+0000007070 00000 n
+0000007198 00000 n
+0000125161 00000 n
+0000432035 00000 n
+0000007247 00000 n
+0000007381 00000 n
+0000125286 00000 n
+0000431956 00000 n
+0000007435 00000 n
+0000007566 00000 n
+0000125348 00000 n
+0000431838 00000 n
+0000007620 00000 n
+0000007761 00000 n
+0000125472 00000 n
+0000431759 00000 n
+0000007820 00000 n
+0000007917 00000 n
+0000125659 00000 n
+0000431680 00000 n
+0000007976 00000 n
+0000008063 00000 n
+0000131920 00000 n
+0000431549 00000 n
+0000008112 00000 n
+0000008249 00000 n
+0000132107 00000 n
+0000431470 00000 n
+0000008303 00000 n
+0000008434 00000 n
+0000132169 00000 n
+0000431338 00000 n
+0000008488 00000 n
+0000008624 00000 n
+0000132294 00000 n
+0000431273 00000 n
+0000008683 00000 n
+0000008764 00000 n
+0000132419 00000 n
+0000431155 00000 n
+0000008818 00000 n
+0000008959 00000 n
+0000132542 00000 n
+0000431076 00000 n
+0000009018 00000 n
+0000009211 00000 n
+0000132728 00000 n
+0000430983 00000 n
+0000009270 00000 n
+0000009390 00000 n
+0000135909 00000 n
+0000430890 00000 n
+0000009449 00000 n
+0000009574 00000 n
+0000136097 00000 n
+0000430797 00000 n
+0000009633 00000 n
+0000009781 00000 n
+0000136285 00000 n
+0000430704 00000 n
+0000009840 00000 n
+0000009998 00000 n
+0000136473 00000 n
+0000430625 00000 n
+0000010057 00000 n
+0000010227 00000 n
+0000141154 00000 n
+0000430494 00000 n
+0000010276 00000 n
+0000010397 00000 n
+0000141279 00000 n
+0000430415 00000 n
+0000010451 00000 n
+0000010582 00000 n
+0000141341 00000 n
+0000430297 00000 n
+0000010636 00000 n
+0000010777 00000 n
+0000141466 00000 n
+0000430218 00000 n
+0000010836 00000 n
+0000010999 00000 n
+0000141653 00000 n
+0000430125 00000 n
+0000011058 00000 n
+0000011216 00000 n
+0000141839 00000 n
+0000430032 00000 n
+0000011275 00000 n
+0000011443 00000 n
+0000144009 00000 n
+0000429939 00000 n
+0000011502 00000 n
+0000011665 00000 n
+0000144197 00000 n
+0000429860 00000 n
+0000011724 00000 n
+0000011854 00000 n
+0000163454 00000 n
+0000429729 00000 n
+0000011903 00000 n
+0000011994 00000 n
+0000170320 00000 n
+0000429650 00000 n
+0000012048 00000 n
+0000012179 00000 n
+0000170382 00000 n
+0000429518 00000 n
+0000012233 00000 n
+0000012417 00000 n
+0000170506 00000 n
+0000429453 00000 n
+0000012476 00000 n
+0000012557 00000 n
+0000174749 00000 n
+0000429334 00000 n
+0000012611 00000 n
+0000012752 00000 n
+0000174874 00000 n
+0000429255 00000 n
+0000012811 00000 n
+0000012923 00000 n
+0000175062 00000 n
+0000429162 00000 n
+0000012982 00000 n
+0000013135 00000 n
+0000175250 00000 n
+0000429069 00000 n
+0000013194 00000 n
+0000013352 00000 n
+0000175375 00000 n
+0000428976 00000 n
+0000013411 00000 n
+0000013564 00000 n
+0000175498 00000 n
+0000428883 00000 n
+0000013623 00000 n
+0000013781 00000 n
+0000179771 00000 n
+0000428790 00000 n
+0000013840 00000 n
+0000013993 00000 n
+0000179958 00000 n
+0000428697 00000 n
+0000014052 00000 n
+0000014210 00000 n
+0000180082 00000 n
+0000428604 00000 n
+0000014269 00000 n
+0000014422 00000 n
+0000180206 00000 n
+0000428511 00000 n
+0000014481 00000 n
+0000014639 00000 n
+0000180330 00000 n
+0000428418 00000 n
+0000014699 00000 n
+0000014852 00000 n
+0000184983 00000 n
+0000428325 00000 n
+0000014912 00000 n
+0000015070 00000 n
+0000185108 00000 n
+0000428232 00000 n
+0000015130 00000 n
+0000015283 00000 n
+0000185233 00000 n
+0000428139 00000 n
+0000015343 00000 n
+0000015501 00000 n
+0000185358 00000 n
+0000428046 00000 n
+0000015561 00000 n
+0000015742 00000 n
+0000185483 00000 n
+0000427953 00000 n
+0000015802 00000 n
+0000015996 00000 n
+0000189615 00000 n
+0000427860 00000 n
+0000016056 00000 n
+0000016255 00000 n
+0000189740 00000 n
+0000427767 00000 n
+0000016315 00000 n
+0000016509 00000 n
+0000189865 00000 n
+0000427674 00000 n
+0000016569 00000 n
+0000016768 00000 n
+0000189990 00000 n
+0000427581 00000 n
+0000016828 00000 n
+0000016963 00000 n
+0000190178 00000 n
+0000427488 00000 n
+0000017023 00000 n
+0000017148 00000 n
+0000190366 00000 n
+0000427395 00000 n
+0000017208 00000 n
+0000017338 00000 n
+0000194188 00000 n
+0000427302 00000 n
+0000017398 00000 n
+0000017523 00000 n
+0000194375 00000 n
+0000427209 00000 n
+0000017583 00000 n
+0000017736 00000 n
+0000194563 00000 n
+0000427116 00000 n
+0000017796 00000 n
+0000017962 00000 n
+0000194751 00000 n
+0000427023 00000 n
+0000018022 00000 n
+0000018193 00000 n
+0000198198 00000 n
+0000426930 00000 n
+0000018253 00000 n
+0000018419 00000 n
+0000198323 00000 n
+0000426837 00000 n
+0000018479 00000 n
+0000018650 00000 n
+0000198448 00000 n
+0000426744 00000 n
+0000018710 00000 n
+0000018812 00000 n
+0000198635 00000 n
+0000426651 00000 n
+0000018872 00000 n
+0000018979 00000 n
+0000198821 00000 n
+0000426558 00000 n
+0000019039 00000 n
+0000019141 00000 n
+0000202666 00000 n
+0000426465 00000 n
+0000019201 00000 n
+0000019372 00000 n
+0000202854 00000 n
+0000426372 00000 n
+0000019432 00000 n
+0000019608 00000 n
+0000202979 00000 n
+0000426279 00000 n
+0000019668 00000 n
+0000019839 00000 n
+0000203104 00000 n
+0000426200 00000 n
+0000019899 00000 n
+0000020075 00000 n
+0000209553 00000 n
+0000426069 00000 n
+0000020124 00000 n
+0000020227 00000 n
+0000209678 00000 n
+0000425990 00000 n
+0000020281 00000 n
+0000020412 00000 n
+0000209740 00000 n
+0000425872 00000 n
+0000020466 00000 n
+0000020607 00000 n
+0000209865 00000 n
+0000425793 00000 n
+0000020666 00000 n
+0000020773 00000 n
+0000210052 00000 n
+0000425700 00000 n
+0000020832 00000 n
+0000020977 00000 n
+0000210238 00000 n
+0000425607 00000 n
+0000021036 00000 n
+0000021219 00000 n
+0000213666 00000 n
+0000425514 00000 n
+0000021278 00000 n
+0000021446 00000 n
+0000213854 00000 n
+0000425421 00000 n
+0000021505 00000 n
+0000021630 00000 n
+0000214041 00000 n
+0000425328 00000 n
+0000021689 00000 n
+0000021852 00000 n
+0000214228 00000 n
+0000425235 00000 n
+0000021911 00000 n
+0000022008 00000 n
+0000214416 00000 n
+0000425142 00000 n
+0000022067 00000 n
+0000022169 00000 n
+0000217163 00000 n
+0000425063 00000 n
+0000022228 00000 n
+0000022368 00000 n
+0000223759 00000 n
+0000424932 00000 n
+0000022418 00000 n
+0000022590 00000 n
+0000223884 00000 n
+0000424853 00000 n
+0000022645 00000 n
+0000022776 00000 n
+0000223946 00000 n
+0000424721 00000 n
+0000022831 00000 n
+0000022967 00000 n
+0000224070 00000 n
+0000424642 00000 n
+0000023027 00000 n
+0000023108 00000 n
+0000224195 00000 n
+0000424549 00000 n
+0000023168 00000 n
+0000023272 00000 n
+0000224320 00000 n
+0000424456 00000 n
+0000023332 00000 n
+0000023408 00000 n
+0000224444 00000 n
+0000424363 00000 n
+0000023468 00000 n
+0000023567 00000 n
+0000224568 00000 n
+0000424270 00000 n
+0000023627 00000 n
+0000023703 00000 n
+0000229144 00000 n
+0000424191 00000 n
+0000023763 00000 n
+0000023862 00000 n
+0000229206 00000 n
+0000424073 00000 n
+0000023917 00000 n
+0000024058 00000 n
+0000229331 00000 n
+0000423994 00000 n
+0000024118 00000 n
+0000024245 00000 n
+0000229518 00000 n
+0000423901 00000 n
+0000024305 00000 n
+0000024480 00000 n
+0000231990 00000 n
+0000423808 00000 n
+0000024540 00000 n
+0000024725 00000 n
+0000232178 00000 n
+0000423729 00000 n
+0000024785 00000 n
+0000024993 00000 n
+0000237703 00000 n
+0000423598 00000 n
+0000025043 00000 n
+0000025235 00000 n
+0000237891 00000 n
+0000423519 00000 n
+0000025290 00000 n
+0000025421 00000 n
+0000238017 00000 n
+0000423426 00000 n
+0000025476 00000 n
+0000025612 00000 n
+0000242155 00000 n
+0000423308 00000 n
+0000025667 00000 n
+0000025851 00000 n
+0000242280 00000 n
+0000423229 00000 n
+0000025911 00000 n
+0000026020 00000 n
+0000242466 00000 n
+0000423136 00000 n
+0000026080 00000 n
+0000026189 00000 n
+0000242653 00000 n
+0000423043 00000 n
+0000026249 00000 n
+0000026378 00000 n
+0000246172 00000 n
+0000422950 00000 n
+0000026438 00000 n
+0000026605 00000 n
+0000246360 00000 n
+0000422857 00000 n
+0000026665 00000 n
+0000026779 00000 n
+0000246546 00000 n
+0000422764 00000 n
+0000026839 00000 n
+0000026948 00000 n
+0000246670 00000 n
+0000422671 00000 n
+0000027008 00000 n
+0000027165 00000 n
+0000252211 00000 n
+0000422578 00000 n
+0000027225 00000 n
+0000027377 00000 n
+0000252397 00000 n
+0000422499 00000 n
+0000027437 00000 n
+0000027541 00000 n
+0000256824 00000 n
+0000422368 00000 n
+0000027591 00000 n
+0000027697 00000 n
+0000256949 00000 n
+0000422289 00000 n
+0000027752 00000 n
+0000027883 00000 n
+0000257010 00000 n
+0000422171 00000 n
+0000027938 00000 n
+0000028079 00000 n
+0000257135 00000 n
+0000422092 00000 n
+0000028139 00000 n
+0000028310 00000 n
+0000257323 00000 n
+0000422013 00000 n
+0000028370 00000 n
+0000028513 00000 n
+0000258403 00000 n
+0000421935 00000 n
+0000028563 00000 n
+0000028707 00000 n
+0000261850 00000 n
+0000421803 00000 n
+0000028754 00000 n
+0000028880 00000 n
+0000261975 00000 n
+0000421685 00000 n
+0000028929 00000 n
+0000029116 00000 n
+0000262163 00000 n
+0000421606 00000 n
+0000029170 00000 n
+0000029301 00000 n
+0000262225 00000 n
+0000421488 00000 n
+0000029355 00000 n
+0000029514 00000 n
+0000262350 00000 n
+0000421409 00000 n
+0000029573 00000 n
+0000029626 00000 n
+0000262475 00000 n
+0000421316 00000 n
+0000029685 00000 n
+0000029758 00000 n
+0000265859 00000 n
+0000421223 00000 n
+0000029817 00000 n
+0000029890 00000 n
+0000265984 00000 n
+0000421144 00000 n
+0000029949 00000 n
+0000030032 00000 n
+0000266108 00000 n
+0000421012 00000 n
+0000030081 00000 n
+0000030225 00000 n
+0000266233 00000 n
+0000420933 00000 n
+0000030279 00000 n
+0000030410 00000 n
+0000266295 00000 n
+0000420815 00000 n
+0000030464 00000 n
+0000030623 00000 n
+0000266420 00000 n
+0000420736 00000 n
+0000030682 00000 n
+0000030735 00000 n
+0000266545 00000 n
+0000420643 00000 n
+0000030794 00000 n
+0000030857 00000 n
+0000269756 00000 n
+0000420550 00000 n
+0000030916 00000 n
+0000030997 00000 n
+0000269881 00000 n
+0000420457 00000 n
+0000031056 00000 n
+0000031137 00000 n
+0000270006 00000 n
+0000420378 00000 n
+0000031196 00000 n
+0000031277 00000 n
+0000270131 00000 n
+0000420246 00000 n
+0000031326 00000 n
+0000031562 00000 n
+0000270319 00000 n
+0000420167 00000 n
+0000031616 00000 n
+0000031747 00000 n
+0000270444 00000 n
+0000420035 00000 n
+0000031801 00000 n
+0000031980 00000 n
+0000270569 00000 n
+0000419956 00000 n
+0000032039 00000 n
+0000032082 00000 n
+0000273796 00000 n
+0000419877 00000 n
+0000032141 00000 n
+0000032212 00000 n
+0000273858 00000 n
+0000419759 00000 n
+0000032266 00000 n
+0000032425 00000 n
+0000273982 00000 n
+0000419680 00000 n
+0000032484 00000 n
+0000032527 00000 n
+0000274107 00000 n
+0000419601 00000 n
+0000032586 00000 n
+0000032619 00000 n
+0000274232 00000 n
+0000419483 00000 n
+0000032668 00000 n
+0000032853 00000 n
+0000275646 00000 n
+0000419418 00000 n
+0000032907 00000 n
+0000033038 00000 n
+0000419338 00000 n
+0000033092 00000 n
+0000033145 00000 n
+0000033516 00000 n
+0000033696 00000 n
+0000033197 00000 n
+0000033635 00000 n
+0000417151 00000 n
+0000417502 00000 n
+0000034645 00000 n
+0000034526 00000 n
+0000033768 00000 n
+0000416441 00000 n
+0000416122 00000 n
+0000036327 00000 n
+0000036477 00000 n
+0000036630 00000 n
+0000036783 00000 n
+0000036936 00000 n
+0000037089 00000 n
+0000037242 00000 n
+0000037400 00000 n
+0000037564 00000 n
+0000037727 00000 n
+0000037880 00000 n
+0000038033 00000 n
+0000038190 00000 n
+0000038340 00000 n
+0000038493 00000 n
+0000038642 00000 n
+0000038795 00000 n
+0000038945 00000 n
+0000039097 00000 n
+0000039247 00000 n
+0000039400 00000 n
+0000039559 00000 n
+0000039712 00000 n
+0000039871 00000 n
+0000040029 00000 n
+0000040193 00000 n
+0000040346 00000 n
+0000040505 00000 n
+0000040662 00000 n
+0000042771 00000 n
+0000040885 00000 n
+0000035964 00000 n
+0000034743 00000 n
+0000416614 00000 n
+0000040824 00000 n
+0000042934 00000 n
+0000043098 00000 n
+0000043262 00000 n
+0000043426 00000 n
+0000043587 00000 n
+0000043745 00000 n
+0000043909 00000 n
+0000044062 00000 n
+0000044221 00000 n
+0000044379 00000 n
+0000044543 00000 n
+0000044696 00000 n
+0000044854 00000 n
+0000045013 00000 n
+0000045177 00000 n
+0000045340 00000 n
+0000045493 00000 n
+0000045652 00000 n
+0000045808 00000 n
+0000045972 00000 n
+0000046129 00000 n
+0000046293 00000 n
+0000046457 00000 n
+0000046621 00000 n
+0000046784 00000 n
+0000046948 00000 n
+0000047112 00000 n
+0000047265 00000 n
+0000047424 00000 n
+0000047583 00000 n
+0000047747 00000 n
+0000047911 00000 n
+0000048075 00000 n
+0000048239 00000 n
+0000048403 00000 n
+0000048556 00000 n
+0000048715 00000 n
+0000048873 00000 n
+0000049034 00000 n
+0000050817 00000 n
+0000049191 00000 n
+0000042320 00000 n
+0000040997 00000 n
+0000050980 00000 n
+0000051143 00000 n
+0000051307 00000 n
+0000051470 00000 n
+0000051634 00000 n
+0000051798 00000 n
+0000051962 00000 n
+0000052126 00000 n
+0000052290 00000 n
+0000052454 00000 n
+0000052619 00000 n
+0000052784 00000 n
+0000052948 00000 n
+0000053113 00000 n
+0000053277 00000 n
+0000053442 00000 n
+0000053607 00000 n
+0000053772 00000 n
+0000053937 00000 n
+0000054102 00000 n
+0000054265 00000 n
+0000054430 00000 n
+0000054595 00000 n
+0000054760 00000 n
+0000054924 00000 n
+0000055089 00000 n
+0000055253 00000 n
+0000055417 00000 n
+0000055582 00000 n
+0000055747 00000 n
+0000055912 00000 n
+0000056077 00000 n
+0000056242 00000 n
+0000056407 00000 n
+0000056560 00000 n
+0000056718 00000 n
+0000056877 00000 n
+0000057041 00000 n
+0000057202 00000 n
+0000059245 00000 n
+0000057364 00000 n
+0000050366 00000 n
+0000049289 00000 n
+0000059409 00000 n
+0000059573 00000 n
+0000059736 00000 n
+0000059900 00000 n
+0000060064 00000 n
+0000060228 00000 n
+0000060381 00000 n
+0000060541 00000 n
+0000060700 00000 n
+0000060864 00000 n
+0000061029 00000 n
+0000061192 00000 n
+0000061357 00000 n
+0000061522 00000 n
+0000061687 00000 n
+0000061843 00000 n
+0000062007 00000 n
+0000062172 00000 n
+0000062337 00000 n
+0000062502 00000 n
+0000062656 00000 n
+0000062816 00000 n
+0000062975 00000 n
+0000063135 00000 n
+0000063300 00000 n
+0000063465 00000 n
+0000063629 00000 n
+0000063793 00000 n
+0000063958 00000 n
+0000064122 00000 n
+0000064287 00000 n
+0000064452 00000 n
+0000064617 00000 n
+0000064770 00000 n
+0000064930 00000 n
+0000065089 00000 n
+0000065254 00000 n
+0000065416 00000 n
+0000067129 00000 n
+0000065568 00000 n
+0000058802 00000 n
+0000057462 00000 n
+0000067279 00000 n
+0000067432 00000 n
+0000067591 00000 n
+0000067748 00000 n
+0000067911 00000 n
+0000068075 00000 n
+0000068239 00000 n
+0000068402 00000 n
+0000068555 00000 n
+0000068714 00000 n
+0000068871 00000 n
+0000069035 00000 n
+0000069199 00000 n
+0000069363 00000 n
+0000069527 00000 n
+0000069690 00000 n
+0000069842 00000 n
+0000070001 00000 n
+0000070160 00000 n
+0000070324 00000 n
+0000070488 00000 n
+0000070645 00000 n
+0000070808 00000 n
+0000070970 00000 n
+0000071123 00000 n
+0000071282 00000 n
+0000071438 00000 n
+0000066782 00000 n
+0000065666 00000 n
+0000415977 00000 n
+0000417620 00000 n
+0000071768 00000 n
+0000071649 00000 n
+0000071549 00000 n
+0000073502 00000 n
+0000074211 00000 n
+0000073363 00000 n
+0000071809 00000 n
+0000073666 00000 n
+0000073786 00000 n
+0000073847 00000 n
+0000416267 00000 n
+0000073968 00000 n
+0000074090 00000 n
+0000077312 00000 n
+0000076889 00000 n
+0000074324 00000 n
+0000077008 00000 n
+0000077069 00000 n
+0000077190 00000 n
+0000080591 00000 n
+0000080752 00000 n
+0000080911 00000 n
+0000081076 00000 n
+0000081233 00000 n
+0000081394 00000 n
+0000084661 00000 n
+0000082101 00000 n
+0000080412 00000 n
+0000077438 00000 n
+0000081554 00000 n
+0000081615 00000 n
+0000081736 00000 n
+0000081858 00000 n
+0000081980 00000 n
+0000117922 00000 n
+0000121784 00000 n
+0000125099 00000 n
+0000131858 00000 n
+0000141092 00000 n
+0000163392 00000 n
+0000084823 00000 n
+0000084987 00000 n
+0000085147 00000 n
+0000085312 00000 n
+0000085511 00000 n
+0000085711 00000 n
+0000085863 00000 n
+0000086060 00000 n
+0000086258 00000 n
+0000086457 00000 n
+0000086960 00000 n
+0000084442 00000 n
+0000082227 00000 n
+0000086657 00000 n
+0000086718 00000 n
+0000086839 00000 n
+0000223697 00000 n
+0000209491 00000 n
+0000100626 00000 n
+0000237641 00000 n
+0000125410 00000 n
+0000125597 00000 n
+0000266046 00000 n
+0000179709 00000 n
+0000180268 00000 n
+0000217101 00000 n
+0000213979 00000 n
+0000087828 00000 n
+0000087648 00000 n
+0000087086 00000 n
+0000087767 00000 n
+0000417738 00000 n
+0000088518 00000 n
+0000088338 00000 n
+0000087927 00000 n
+0000088457 00000 n
+0000089572 00000 n
+0000089726 00000 n
+0000089880 00000 n
+0000090034 00000 n
+0000090188 00000 n
+0000090342 00000 n
+0000090496 00000 n
+0000090650 00000 n
+0000090804 00000 n
+0000090958 00000 n
+0000091112 00000 n
+0000091267 00000 n
+0000091422 00000 n
+0000091762 00000 n
+0000089335 00000 n
+0000088603 00000 n
+0000091577 00000 n
+0000092416 00000 n
+0000092231 00000 n
+0000091848 00000 n
+0000092353 00000 n
+0000093339 00000 n
+0000093494 00000 n
+0000093649 00000 n
+0000093804 00000 n
+0000093959 00000 n
+0000094114 00000 n
+0000094269 00000 n
+0000094609 00000 n
+0000093142 00000 n
+0000092502 00000 n
+0000094424 00000 n
+0000095288 00000 n
+0000095103 00000 n
+0000094709 00000 n
+0000095225 00000 n
+0000096183 00000 n
+0000096346 00000 n
+0000096501 00000 n
+0000096655 00000 n
+0000096810 00000 n
+0000096967 00000 n
+0000097122 00000 n
+0000097285 00000 n
+0000097625 00000 n
+0000095976 00000 n
+0000095374 00000 n
+0000097440 00000 n
+0000417860 00000 n
+0000261912 00000 n
+0000270068 00000 n
+0000274169 00000 n
+0000098294 00000 n
+0000098108 00000 n
+0000097725 00000 n
+0000098231 00000 n
+0000100810 00000 n
+0000100379 00000 n
+0000098380 00000 n
+0000100502 00000 n
+0000103904 00000 n
+0000104058 00000 n
+0000104213 00000 n
+0000104745 00000 n
+0000103742 00000 n
+0000100950 00000 n
+0000104368 00000 n
+0000104431 00000 n
+0000104494 00000 n
+0000417324 00000 n
+0000104557 00000 n
+0000104620 00000 n
+0000104683 00000 n
+0000106288 00000 n
+0000106442 00000 n
+0000106785 00000 n
+0000106135 00000 n
+0000104900 00000 n
+0000106596 00000 n
+0000106659 00000 n
+0000106722 00000 n
+0000107846 00000 n
+0000107660 00000 n
+0000106912 00000 n
+0000107783 00000 n
+0000108854 00000 n
+0000108668 00000 n
+0000107946 00000 n
+0000108791 00000 n
+0000417985 00000 n
+0000110136 00000 n
+0000109891 00000 n
+0000108954 00000 n
+0000110014 00000 n
+0000110077 00000 n
+0000111669 00000 n
+0000111420 00000 n
+0000110263 00000 n
+0000111543 00000 n
+0000111606 00000 n
+0000113040 00000 n
+0000113238 00000 n
+0000113470 00000 n
+0000113702 00000 n
+0000114557 00000 n
+0000112869 00000 n
+0000111824 00000 n
+0000113934 00000 n
+0000113997 00000 n
+0000114243 00000 n
+0000114368 00000 n
+0000416791 00000 n
+0000114431 00000 n
+0000114494 00000 n
+0000116323 00000 n
+0000116477 00000 n
+0000116674 00000 n
+0000116872 00000 n
+0000117069 00000 n
+0000117267 00000 n
+0000117464 00000 n
+0000117661 00000 n
+0000118919 00000 n
+0000116116 00000 n
+0000114685 00000 n
+0000117859 00000 n
+0000118170 00000 n
+0000118295 00000 n
+0000118420 00000 n
+0000118545 00000 n
+0000118670 00000 n
+0000118794 00000 n
+0000119810 00000 n
+0000119935 00000 n
+0000119562 00000 n
+0000119032 00000 n
+0000119685 00000 n
+0000121328 00000 n
+0000121523 00000 n
+0000122283 00000 n
+0000121175 00000 n
+0000120048 00000 n
+0000121721 00000 n
+0000121908 00000 n
+0000122095 00000 n
+0000416969 00000 n
+0000122220 00000 n
+0000418110 00000 n
+0000124234 00000 n
+0000124437 00000 n
+0000124635 00000 n
+0000124838 00000 n
+0000125784 00000 n
+0000124063 00000 n
+0000122426 00000 n
+0000125036 00000 n
+0000125223 00000 n
+0000125534 00000 n
+0000125721 00000 n
+0000128675 00000 n
+0000128869 00000 n
+0000129063 00000 n
+0000129261 00000 n
+0000129454 00000 n
+0000129650 00000 n
+0000129843 00000 n
+0000130036 00000 n
+0000130233 00000 n
+0000130426 00000 n
+0000130624 00000 n
+0000130818 00000 n
+0000131012 00000 n
+0000131209 00000 n
+0000131403 00000 n
+0000131601 00000 n
+0000132853 00000 n
+0000128396 00000 n
+0000125941 00000 n
+0000131795 00000 n
+0000131982 00000 n
+0000132044 00000 n
+0000132231 00000 n
+0000132356 00000 n
+0000132481 00000 n
+0000132602 00000 n
+0000132665 00000 n
+0000132790 00000 n
+0000136222 00000 n
+0000136034 00000 n
+0000135846 00000 n
+0000136410 00000 n
+0000136598 00000 n
+0000135660 00000 n
+0000133010 00000 n
+0000135783 00000 n
+0000135971 00000 n
+0000136159 00000 n
+0000136347 00000 n
+0000136535 00000 n
+0000139048 00000 n
+0000139246 00000 n
+0000139444 00000 n
+0000139643 00000 n
+0000139841 00000 n
+0000140040 00000 n
+0000140237 00000 n
+0000140436 00000 n
+0000140634 00000 n
+0000140832 00000 n
+0000141964 00000 n
+0000138823 00000 n
+0000136755 00000 n
+0000141029 00000 n
+0000141216 00000 n
+0000141403 00000 n
+0000141528 00000 n
+0000141591 00000 n
+0000141714 00000 n
+0000141776 00000 n
+0000141901 00000 n
+0000143946 00000 n
+0000144134 00000 n
+0000144322 00000 n
+0000143760 00000 n
+0000142107 00000 n
+0000143883 00000 n
+0000144071 00000 n
+0000144259 00000 n
+0000147232 00000 n
+0000147430 00000 n
+0000147660 00000 n
+0000147890 00000 n
+0000148121 00000 n
+0000148352 00000 n
+0000148584 00000 n
+0000148816 00000 n
+0000149049 00000 n
+0000149282 00000 n
+0000149513 00000 n
+0000149745 00000 n
+0000149977 00000 n
+0000150209 00000 n
+0000150441 00000 n
+0000150674 00000 n
+0000150907 00000 n
+0000151140 00000 n
+0000151372 00000 n
+0000151605 00000 n
+0000151838 00000 n
+0000152071 00000 n
+0000152267 00000 n
+0000152465 00000 n
+0000152663 00000 n
+0000152860 00000 n
+0000153059 00000 n
+0000153256 00000 n
+0000153454 00000 n
+0000153651 00000 n
+0000153850 00000 n
+0000154048 00000 n
+0000154246 00000 n
+0000154442 00000 n
+0000154640 00000 n
+0000154838 00000 n
+0000155036 00000 n
+0000155233 00000 n
+0000155432 00000 n
+0000155630 00000 n
+0000155828 00000 n
+0000156025 00000 n
+0000156223 00000 n
+0000156418 00000 n
+0000156616 00000 n
+0000156815 00000 n
+0000157014 00000 n
+0000157212 00000 n
+0000157411 00000 n
+0000157606 00000 n
+0000157804 00000 n
+0000158003 00000 n
+0000158201 00000 n
+0000158399 00000 n
+0000158597 00000 n
+0000158795 00000 n
+0000158993 00000 n
+0000159192 00000 n
+0000159390 00000 n
+0000159588 00000 n
+0000159786 00000 n
+0000159984 00000 n
+0000160181 00000 n
+0000160379 00000 n
+0000160576 00000 n
+0000160775 00000 n
+0000160973 00000 n
+0000161171 00000 n
+0000161368 00000 n
+0000161567 00000 n
+0000161765 00000 n
+0000161963 00000 n
+0000162160 00000 n
+0000162354 00000 n
+0000162550 00000 n
+0000162748 00000 n
+0000162945 00000 n
+0000163136 00000 n
+0000166494 00000 n
+0000166691 00000 n
+0000163642 00000 n
+0000146395 00000 n
+0000144465 00000 n
+0000163329 00000 n
+0000163516 00000 n
+0000163579 00000 n
+0000418235 00000 n
+0000170443 00000 n
+0000170568 00000 n
+0000170631 00000 n
+0000170694 00000 n
+0000170757 00000 n
+0000170820 00000 n
+0000170882 00000 n
+0000170945 00000 n
+0000171008 00000 n
+0000171070 00000 n
+0000174061 00000 n
+0000174124 00000 n
+0000174187 00000 n
+0000174250 00000 n
+0000174312 00000 n
+0000174373 00000 n
+0000174435 00000 n
+0000174497 00000 n
+0000174560 00000 n
+0000174623 00000 n
+0000174686 00000 n
+0000198385 00000 n
+0000190115 00000 n
+0000198572 00000 n
+0000190303 00000 n
+0000174811 00000 n
+0000189927 00000 n
+0000198760 00000 n
+0000194125 00000 n
+0000194312 00000 n
+0000179895 00000 n
+0000180020 00000 n
+0000180143 00000 n
+0000185295 00000 n
+0000184920 00000 n
+0000185045 00000 n
+0000185170 00000 n
+0000174999 00000 n
+0000175312 00000 n
+0000175187 00000 n
+0000175437 00000 n
+0000194500 00000 n
+0000194688 00000 n
+0000198135 00000 n
+0000198260 00000 n
+0000166888 00000 n
+0000167086 00000 n
+0000167284 00000 n
+0000167482 00000 n
+0000167680 00000 n
+0000167878 00000 n
+0000168076 00000 n
+0000168275 00000 n
+0000168473 00000 n
+0000168670 00000 n
+0000168867 00000 n
+0000169066 00000 n
+0000169264 00000 n
+0000169462 00000 n
+0000169660 00000 n
+0000169859 00000 n
+0000170058 00000 n
+0000171132 00000 n
+0000166188 00000 n
+0000163755 00000 n
+0000170257 00000 n
+0000185420 00000 n
+0000189552 00000 n
+0000189677 00000 n
+0000189802 00000 n
+0000198946 00000 n
+0000202791 00000 n
+0000202916 00000 n
+0000203041 00000 n
+0000173602 00000 n
+0000173800 00000 n
+0000178855 00000 n
+0000175559 00000 n
+0000173449 00000 n
+0000171274 00000 n
+0000173998 00000 n
+0000174936 00000 n
+0000175124 00000 n
+0000179053 00000 n
+0000179251 00000 n
+0000179448 00000 n
+0000180454 00000 n
+0000178684 00000 n
+0000175731 00000 n
+0000179646 00000 n
+0000179832 00000 n
+0000180392 00000 n
+0000184066 00000 n
+0000184264 00000 n
+0000184461 00000 n
+0000184659 00000 n
+0000185608 00000 n
+0000183895 00000 n
+0000180597 00000 n
+0000184857 00000 n
+0000185545 00000 n
+0000188898 00000 n
+0000189095 00000 n
+0000189292 00000 n
+0000190428 00000 n
+0000188736 00000 n
+0000185751 00000 n
+0000189489 00000 n
+0000190052 00000 n
+0000190240 00000 n
+0000193803 00000 n
+0000194813 00000 n
+0000193659 00000 n
+0000190585 00000 n
+0000193999 00000 n
+0000194062 00000 n
+0000194250 00000 n
+0000194437 00000 n
+0000194625 00000 n
+0000418360 00000 n
+0000197676 00000 n
+0000197874 00000 n
+0000199008 00000 n
+0000197523 00000 n
+0000194970 00000 n
+0000198072 00000 n
+0000198510 00000 n
+0000198697 00000 n
+0000198883 00000 n
+0000202012 00000 n
+0000202209 00000 n
+0000202406 00000 n
+0000203165 00000 n
+0000201850 00000 n
+0000199165 00000 n
+0000202603 00000 n
+0000202728 00000 n
+0000205848 00000 n
+0000206049 00000 n
+0000206246 00000 n
+0000206447 00000 n
+0000206644 00000 n
+0000206843 00000 n
+0000207040 00000 n
+0000207241 00000 n
+0000207439 00000 n
+0000207638 00000 n
+0000207835 00000 n
+0000208035 00000 n
+0000208233 00000 n
+0000208434 00000 n
+0000208632 00000 n
+0000208832 00000 n
+0000209029 00000 n
+0000209230 00000 n
+0000210361 00000 n
+0000205551 00000 n
+0000203308 00000 n
+0000209428 00000 n
+0000209615 00000 n
+0000209802 00000 n
+0000209927 00000 n
+0000209989 00000 n
+0000210113 00000 n
+0000210176 00000 n
+0000210298 00000 n
+0000214165 00000 n
+0000213603 00000 n
+0000214353 00000 n
+0000213791 00000 n
+0000214477 00000 n
+0000213417 00000 n
+0000210504 00000 n
+0000213540 00000 n
+0000213728 00000 n
+0000213916 00000 n
+0000214103 00000 n
+0000214290 00000 n
+0000217288 00000 n
+0000216852 00000 n
+0000214634 00000 n
+0000216975 00000 n
+0000217038 00000 n
+0000217225 00000 n
+0000219661 00000 n
+0000219859 00000 n
+0000220057 00000 n
+0000220256 00000 n
+0000220454 00000 n
+0000220652 00000 n
+0000220851 00000 n
+0000221050 00000 n
+0000221249 00000 n
+0000221447 00000 n
+0000221646 00000 n
+0000221843 00000 n
+0000222042 00000 n
+0000222241 00000 n
+0000222440 00000 n
+0000222639 00000 n
+0000222838 00000 n
+0000223037 00000 n
+0000223236 00000 n
+0000223435 00000 n
+0000224692 00000 n
+0000219346 00000 n
+0000217431 00000 n
+0000223634 00000 n
+0000223821 00000 n
+0000224007 00000 n
+0000224132 00000 n
+0000224257 00000 n
+0000224382 00000 n
+0000224506 00000 n
+0000224630 00000 n
+0000418485 00000 n
+0000229268 00000 n
+0000231927 00000 n
+0000229455 00000 n
+0000232115 00000 n
+0000228685 00000 n
+0000228884 00000 n
+0000229643 00000 n
+0000228532 00000 n
+0000224819 00000 n
+0000229081 00000 n
+0000229393 00000 n
+0000229580 00000 n
+0000232303 00000 n
+0000231741 00000 n
+0000229800 00000 n
+0000231864 00000 n
+0000232052 00000 n
+0000232240 00000 n
+0000234838 00000 n
+0000235002 00000 n
+0000235202 00000 n
+0000235404 00000 n
+0000235568 00000 n
+0000235768 00000 n
+0000235970 00000 n
+0000236172 00000 n
+0000236374 00000 n
+0000236575 00000 n
+0000236776 00000 n
+0000236975 00000 n
+0000237176 00000 n
+0000237377 00000 n
+0000238079 00000 n
+0000234577 00000 n
+0000232446 00000 n
+0000237578 00000 n
+0000237765 00000 n
+0000237828 00000 n
+0000237953 00000 n
+0000242590 00000 n
+0000321372 00000 n
+0000246109 00000 n
+0000252334 00000 n
+0000242405 00000 n
+0000242217 00000 n
+0000246608 00000 n
+0000252149 00000 n
+0000246297 00000 n
+0000246484 00000 n
+0000240927 00000 n
+0000241129 00000 n
+0000241328 00000 n
+0000241529 00000 n
+0000241726 00000 n
+0000241928 00000 n
+0000242778 00000 n
+0000240738 00000 n
+0000238234 00000 n
+0000242092 00000 n
+0000242342 00000 n
+0000242527 00000 n
+0000242715 00000 n
+0000274357 00000 n
+0000245845 00000 n
+0000249611 00000 n
+0000246731 00000 n
+0000245701 00000 n
+0000242948 00000 n
+0000246046 00000 n
+0000246234 00000 n
+0000246422 00000 n
+0000249813 00000 n
+0000250014 00000 n
+0000250215 00000 n
+0000250415 00000 n
+0000250616 00000 n
+0000250817 00000 n
+0000251219 00000 n
+0000251421 00000 n
+0000251623 00000 n
+0000251823 00000 n
+0000252522 00000 n
+0000249368 00000 n
+0000246888 00000 n
+0000252023 00000 n
+0000252086 00000 n
+0000252271 00000 n
+0000251019 00000 n
+0000252459 00000 n
+0000418610 00000 n
+0000255919 00000 n
+0000256111 00000 n
+0000256309 00000 n
+0000256501 00000 n
+0000257448 00000 n
+0000255748 00000 n
+0000252678 00000 n
+0000256698 00000 n
+0000256761 00000 n
+0000256886 00000 n
+0000257072 00000 n
+0000257197 00000 n
+0000257260 00000 n
+0000257385 00000 n
+0000258465 00000 n
+0000258154 00000 n
+0000257591 00000 n
+0000258277 00000 n
+0000258340 00000 n
+0000259151 00000 n
+0000258965 00000 n
+0000258578 00000 n
+0000259088 00000 n
+0000260996 00000 n
+0000261194 00000 n
+0000261392 00000 n
+0000261590 00000 n
+0000262599 00000 n
+0000260825 00000 n
+0000259237 00000 n
+0000261787 00000 n
+0000262037 00000 n
+0000262100 00000 n
+0000262287 00000 n
+0000262412 00000 n
+0000262537 00000 n
+0000265921 00000 n
+0000264858 00000 n
+0000265045 00000 n
+0000265231 00000 n
+0000265419 00000 n
+0000265607 00000 n
+0000266607 00000 n
+0000264678 00000 n
+0000262726 00000 n
+0000265796 00000 n
+0000266170 00000 n
+0000266357 00000 n
+0000266482 00000 n
+0000269693 00000 n
+0000269818 00000 n
+0000269943 00000 n
+0000268467 00000 n
+0000268658 00000 n
+0000268856 00000 n
+0000269048 00000 n
+0000269240 00000 n
+0000269438 00000 n
+0000270631 00000 n
+0000268278 00000 n
+0000266747 00000 n
+0000269630 00000 n
+0000270193 00000 n
+0000270256 00000 n
+0000270381 00000 n
+0000270506 00000 n
+0000418735 00000 n
+0000273733 00000 n
+0000273919 00000 n
+0000274044 00000 n
+0000272682 00000 n
+0000272880 00000 n
+0000273078 00000 n
+0000273276 00000 n
+0000273474 00000 n
+0000274671 00000 n
+0000272502 00000 n
+0000270771 00000 n
+0000273670 00000 n
+0000274294 00000 n
+0000274420 00000 n
+0000274483 00000 n
+0000274546 00000 n
+0000274608 00000 n
+0000275708 00000 n
+0000275460 00000 n
+0000274826 00000 n
+0000275583 00000 n
+0000277266 00000 n
+0000277417 00000 n
+0000277568 00000 n
+0000277718 00000 n
+0000277869 00000 n
+0000278019 00000 n
+0000278170 00000 n
+0000278320 00000 n
+0000278471 00000 n
+0000278622 00000 n
+0000278773 00000 n
+0000278924 00000 n
+0000279075 00000 n
+0000279226 00000 n
+0000279377 00000 n
+0000279528 00000 n
+0000279679 00000 n
+0000279829 00000 n
+0000279980 00000 n
+0000280131 00000 n
+0000280281 00000 n
+0000280432 00000 n
+0000280583 00000 n
+0000280734 00000 n
+0000280883 00000 n
+0000281033 00000 n
+0000281184 00000 n
+0000281335 00000 n
+0000281486 00000 n
+0000281637 00000 n
+0000281788 00000 n
+0000281939 00000 n
+0000282090 00000 n
+0000282240 00000 n
+0000282391 00000 n
+0000282541 00000 n
+0000282691 00000 n
+0000282842 00000 n
+0000282993 00000 n
+0000283143 00000 n
+0000283294 00000 n
+0000283445 00000 n
+0000283596 00000 n
+0000283747 00000 n
+0000283898 00000 n
+0000284049 00000 n
+0000284200 00000 n
+0000284351 00000 n
+0000284501 00000 n
+0000284713 00000 n
+0000276690 00000 n
+0000275821 00000 n
+0000284650 00000 n
+0000286822 00000 n
+0000286973 00000 n
+0000287124 00000 n
+0000287275 00000 n
+0000287426 00000 n
+0000287577 00000 n
+0000287728 00000 n
+0000287879 00000 n
+0000288030 00000 n
+0000288181 00000 n
+0000288332 00000 n
+0000288483 00000 n
+0000288633 00000 n
+0000288783 00000 n
+0000288933 00000 n
+0000289084 00000 n
+0000289235 00000 n
+0000289385 00000 n
+0000289536 00000 n
+0000289687 00000 n
+0000289837 00000 n
+0000289988 00000 n
+0000290139 00000 n
+0000290290 00000 n
+0000290441 00000 n
+0000290592 00000 n
+0000290743 00000 n
+0000290894 00000 n
+0000291045 00000 n
+0000291196 00000 n
+0000291347 00000 n
+0000291496 00000 n
+0000291645 00000 n
+0000291796 00000 n
+0000291946 00000 n
+0000292096 00000 n
+0000292246 00000 n
+0000292396 00000 n
+0000292546 00000 n
+0000292696 00000 n
+0000292845 00000 n
+0000292995 00000 n
+0000293144 00000 n
+0000293295 00000 n
+0000293446 00000 n
+0000293596 00000 n
+0000293746 00000 n
+0000293896 00000 n
+0000294046 00000 n
+0000294196 00000 n
+0000294347 00000 n
+0000294498 00000 n
+0000294649 00000 n
+0000294800 00000 n
+0000294951 00000 n
+0000295102 00000 n
+0000295253 00000 n
+0000295403 00000 n
+0000295553 00000 n
+0000295704 00000 n
+0000295855 00000 n
+0000296006 00000 n
+0000296157 00000 n
+0000296308 00000 n
+0000296458 00000 n
+0000296670 00000 n
+0000286102 00000 n
+0000284800 00000 n
+0000296607 00000 n
+0000299221 00000 n
+0000299372 00000 n
+0000299523 00000 n
+0000299674 00000 n
+0000299825 00000 n
+0000299976 00000 n
+0000300127 00000 n
+0000300278 00000 n
+0000300429 00000 n
+0000300579 00000 n
+0000300730 00000 n
+0000300880 00000 n
+0000301030 00000 n
+0000301180 00000 n
+0000301330 00000 n
+0000301480 00000 n
+0000301629 00000 n
+0000301779 00000 n
+0000301930 00000 n
+0000302081 00000 n
+0000302232 00000 n
+0000302382 00000 n
+0000302532 00000 n
+0000302683 00000 n
+0000302834 00000 n
+0000302985 00000 n
+0000303135 00000 n
+0000303285 00000 n
+0000303436 00000 n
+0000303587 00000 n
+0000303737 00000 n
+0000303887 00000 n
+0000304036 00000 n
+0000304185 00000 n
+0000304335 00000 n
+0000304486 00000 n
+0000304637 00000 n
+0000304788 00000 n
+0000304939 00000 n
+0000305090 00000 n
+0000305241 00000 n
+0000305392 00000 n
+0000305543 00000 n
+0000305692 00000 n
+0000305842 00000 n
+0000305992 00000 n
+0000306143 00000 n
+0000306294 00000 n
+0000306445 00000 n
+0000306594 00000 n
+0000306745 00000 n
+0000306896 00000 n
+0000307047 00000 n
+0000307198 00000 n
+0000307349 00000 n
+0000307500 00000 n
+0000307651 00000 n
+0000307802 00000 n
+0000307952 00000 n
+0000308102 00000 n
+0000308253 00000 n
+0000308404 00000 n
+0000308553 00000 n
+0000308704 00000 n
+0000308854 00000 n
+0000309005 00000 n
+0000309156 00000 n
+0000309307 00000 n
+0000309455 00000 n
+0000309606 00000 n
+0000309757 00000 n
+0000309908 00000 n
+0000310058 00000 n
+0000310208 00000 n
+0000310357 00000 n
+0000310508 00000 n
+0000310658 00000 n
+0000310808 00000 n
+0000310958 00000 n
+0000311109 00000 n
+0000311260 00000 n
+0000311411 00000 n
+0000311562 00000 n
+0000311713 00000 n
+0000311862 00000 n
+0000312011 00000 n
+0000313690 00000 n
+0000312223 00000 n
+0000298312 00000 n
+0000296769 00000 n
+0000312160 00000 n
+0000313841 00000 n
+0000313992 00000 n
+0000314143 00000 n
+0000314293 00000 n
+0000314444 00000 n
+0000314594 00000 n
+0000314745 00000 n
+0000314895 00000 n
+0000315045 00000 n
+0000315196 00000 n
+0000315345 00000 n
+0000315496 00000 n
+0000315646 00000 n
+0000315796 00000 n
+0000315947 00000 n
+0000316097 00000 n
+0000316247 00000 n
+0000316396 00000 n
+0000316546 00000 n
+0000316697 00000 n
+0000316847 00000 n
+0000316998 00000 n
+0000317148 00000 n
+0000317299 00000 n
+0000317450 00000 n
+0000317601 00000 n
+0000317750 00000 n
+0000317901 00000 n
+0000318050 00000 n
+0000318201 00000 n
+0000318352 00000 n
+0000318502 00000 n
+0000318651 00000 n
+0000318802 00000 n
+0000318952 00000 n
+0000319103 00000 n
+0000319253 00000 n
+0000319404 00000 n
+0000319555 00000 n
+0000319705 00000 n
+0000319856 00000 n
+0000320007 00000 n
+0000320157 00000 n
+0000320306 00000 n
+0000320457 00000 n
+0000320608 00000 n
+0000320757 00000 n
+0000320908 00000 n
+0000321059 00000 n
+0000321273 00000 n
+0000313105 00000 n
+0000312335 00000 n
+0000321210 00000 n
+0000418860 00000 n
+0000415458 00000 n
+0000321405 00000 n
+0000321877 00000 n
+0000322337 00000 n
+0000322814 00000 n
+0000323206 00000 n
+0000323242 00000 n
+0000323718 00000 n
+0000324337 00000 n
+0000324809 00000 n
+0000325475 00000 n
+0000327284 00000 n
+0000327519 00000 n
+0000329197 00000 n
+0000329457 00000 n
+0000348414 00000 n
+0000348978 00000 n
+0000360995 00000 n
+0000361420 00000 n
+0000374894 00000 n
+0000375352 00000 n
+0000384325 00000 n
+0000384635 00000 n
+0000393013 00000 n
+0000393316 00000 n
+0000405625 00000 n
+0000406257 00000 n
+0000415051 00000 n
+0000418940 00000 n
+0000419063 00000 n
+0000419189 00000 n
+0000419262 00000 n
+0000435917 00000 n
+0000436100 00000 n
+0000436481 00000 n
+0000436964 00000 n
+0000437449 00000 n
+0000437893 00000 n
+0000438327 00000 n
+0000438848 00000 n
+0000439346 00000 n
+0000439931 00000 n
+0000440460 00000 n
+0000441036 00000 n
+0000441511 00000 n
+0000442072 00000 n
+0000442601 00000 n
+0000443087 00000 n
+0000443748 00000 n
+0000444308 00000 n
+0000444869 00000 n
+0000445430 00000 n
+0000445991 00000 n
+0000446551 00000 n
+0000447248 00000 n
+0000448081 00000 n
+0000448914 00000 n
+0000449578 00000 n
+0000449859 00000 n
+0000450122 00000 n
+0000450296 00000 n
+0000450470 00000 n
+0000450647 00000 n
+0000450822 00000 n
+0000450999 00000 n
+0000451174 00000 n
+0000451351 00000 n
+0000451526 00000 n
+0000451703 00000 n
+0000451883 00000 n
+0000452092 00000 n
+0000452300 00000 n
+0000452509 00000 n
+0000452710 00000 n
+0000452907 00000 n
+0000453104 00000 n
+0000453311 00000 n
+0000453514 00000 n
+0000453786 00000 n
+0000454176 00000 n
+0000454424 00000 n
+0000454669 00000 n
+0000454912 00000 n
+0000455155 00000 n
+0000455398 00000 n
+0000455641 00000 n
+0000455927 00000 n
+0000456218 00000 n
+0000456509 00000 n
+0000456798 00000 n
+0000457081 00000 n
+0000457364 00000 n
+0000457647 00000 n
+0000457930 00000 n
+0000458221 00000 n
+0000458511 00000 n
+0000458802 00000 n
+0000459092 00000 n
+0000459379 00000 n
+0000459662 00000 n
+0000459945 00000 n
+0000460228 00000 n
+0000460511 00000 n
+0000460732 00000 n
+0000460933 00000 n
+0000461132 00000 n
+0000461331 00000 n
+0000461532 00000 n
+0000461732 00000 n
+0000461933 00000 n
+0000462133 00000 n
+0000462331 00000 n
+0000462440 00000 n
+0000462566 00000 n
+0000462773 00000 n
+0000462985 00000 n
+0000463231 00000 n
+0000463429 00000 n
+0000463545 00000 n
+0000463665 00000 n
+0000463795 00000 n
+0000463936 00000 n
+0000464081 00000 n
+0000464225 00000 n
+0000464358 00000 n
+0000464479 00000 n
+0000464564 00000 n
+0000464682 00000 n
+0000464801 00000 n
+0000464885 00000 n
+0000464978 00000 n
+0000465018 00000 n
+0000465218 00000 n
+trailer
+<< /Size 2095
+/Root 2093 0 R
+/Info 2094 0 R
+/ID [<3DEFD4030FD314449AEF8B957949E6D4> <3DEFD4030FD314449AEF8B957949E6D4>] >>
+startxref
+465550
+%%EOF
diff --git a/final/runtime/doc/doxygen/config b/final/runtime/doc/doxygen/config
new file mode 100644
index 0000000..e02fdbd
--- /dev/null
+++ b/final/runtime/doc/doxygen/config
@@ -0,0 +1,1822 @@
+# Doxyfile 1.o8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME = "LLVM OpenMP* Runtime Library"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = doc/doxygen/generated
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES = "other=<sup>*</sup>"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to
+# indicate getter and setter methods for a property. Setting this
+# option to YES (the default) will make doxygen replace the get and
+# set methods by a property in the documentation. This will only work
+# if the methods are indeed getting or setting a simple type. If this
+# is not the case, or you want to show the methods anyway, you should
+# set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+# We probably will want this, but we have no file documentation yet so it's simpler to remove
+# it for now.
+SHOW_FILES = NO
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT =
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = src doc/doxygen/libomp_interface.h
+# The ittnotify code also has doxygen documentation, but if we include it here
+# it takes over from us!
+# src/thirdparty/ittnotify
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS = *.c *.h *.cpp
+# We may also want to include the asm files with appropriate ifdef to ensure
+# doxygen doesn't see the content, just the documentation...
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+# Only look in the one directory.
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE = src/test-touch.c
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT =
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT =
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER = doc/doxygen/header.tex
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT =
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = OMP_30_ENABLED=1, OMP_40_ENABLED=1, KMP_STATS_ENABLED=1
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# manageable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/final/runtime/doc/doxygen/header.tex b/final/runtime/doc/doxygen/header.tex
new file mode 100644
index 0000000..6e9ea67
--- /dev/null
+++ b/final/runtime/doc/doxygen/header.tex
@@ -0,0 +1,77 @@
+% Latex header for doxygen 1.8.3.1
+\documentclass{book}
+\usepackage[a4paper,top=2.5cm,bottom=2.5cm,left=2.5cm,right=2.5cm]{geometry}
+\usepackage{makeidx}
+\usepackage{natbib}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{ifthen}
+\usepackage[table]{xcolor}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{ifpdf}
+\ifpdf
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\else
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\usepackage{pspicture}
+\fi
+\usepackage[utf8]{inputenc}
+\usepackage{mathptmx}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\usepackage{sectsty}
+\usepackage{amssymb}
+\usepackage[titles]{tocloft}
+\usepackage{doxygen}
+\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=4,numbers=left }
+\makeindex
+\setcounter{tocdepth}{3}
+\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\familydefault}{\sfdefault}
+\hfuzz=15pt
+\setlength{\emergencystretch}{15pt}
+\hbadness=750
+\tolerance=750
+\begin{document}
+\hypersetup{pageanchor=false,citecolor=blue}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Large LLVM OpenMP\textsuperscript{*} Runtime Library }\\
+\vspace*{1cm}
+{\large Generated by Doxygen $doxygenversion }\\
+\vspace*{0.5cm}
+{\small $datetime }\\
+\end{center}
+\end{titlepage}
+
+{\bf Trademarks}
+The OpenMP name and the OpenMP logo are registered trademarks of the OpenMP Architecture Review Board.
+
+Intel, Xeon, and Intel Xeon Phi are trademarks of Intel Corporation in the U.S. and/or other countries.
+
+This document is Copyright \textcopyright~\the\year the LLVM Project. It is
+subject to the same license terms as the LLVM OpenMP runtime.
+
+\textsuperscript{*} Other names and brands may be claimed as the property of others.
+
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true,citecolor=blue}
diff --git a/final/runtime/doc/doxygen/libomp_interface.h b/final/runtime/doc/doxygen/libomp_interface.h
new file mode 100644
index 0000000..d51ae95
--- /dev/null
+++ b/final/runtime/doc/doxygen/libomp_interface.h
@@ -0,0 +1,333 @@
+// This file does not contain any code; it just contains additional text and formatting
+// for doxygen.
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*! @mainpage LLVM&nbsp; OpenMP* Runtime Library Interface
+@section sec_intro Introduction
+
+This document describes the interface provided by the
+LLVM &nbsp;OpenMP\other runtime library to the compiler.
+Routines that are directly called as simple functions by user code are
+not currently described here, since their definition is in the OpenMP
+specification available from http://openmp.org
+
+The aim here is to explain the interface from the compiler to the runtime.
+
+The overall design is described, and each function in the interface
+has its own description. (At least, that's the ambition, we may not be there yet).
+
+@section sec_building Quickly Building the Runtime
+For the impatient, we cover building the runtime as the first topic here.
+
+CMake is used to build the OpenMP runtime. For details and a full list of options for the CMake build system,
+see <tt>Build_With_CMake.txt</tt> inside the <tt>runtime/</tt> subdirectory. These
+instructions will provide the most typical build.
+
+In-LLVM-tree build:.
+@code
+$ cd where-you-want-to-live
+Check out openmp into llvm/projects
+$ cd where-you-want-to-build
+$ mkdir build && cd build
+$ cmake path/to/llvm -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make omp
+@endcode
+Out-of-LLVM-tree build:
+@code
+$ cd where-you-want-to-live
+Check out openmp
+$ cd where-you-want-to-live/openmp/runtime
+$ mkdir build && cd build
+$ cmake path/to/openmp -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make
+@endcode
+
+@section sec_supported Supported RTL Build Configurations
+
+The architectures supported are IA-32 architecture, Intel&reg;&nbsp; 64, and
+Intel&reg;&nbsp; Many Integrated Core Architecture. The build configurations
+supported are shown in the table below.
+
+<table border=1>
+<tr><th> <th>icc/icl<th>gcc<th>clang
+<tr><td>Linux\other OS<td>Yes(1,5)<td>Yes(2,4)<td>Yes(4,6,7)
+<tr><td>FreeBSD\other<td>Yes(1,5)<td>Yes(2,4)<td>Yes(4,6,7,8)
+<tr><td>OS X\other<td>Yes(1,3,4)<td>No<td>Yes(4,6,7)
+<tr><td>Windows\other OS<td>Yes(1,4)<td>No<td>No
+</table>
+(1) On IA-32 architecture and Intel&reg;&nbsp; 64, icc/icl versions 12.x
+ are supported (12.1 is recommended).<br>
+(2) gcc version 4.7 is supported.<br>
+(3) For icc on OS X\other, OS X\other version 10.5.8 is supported.<br>
+(4) Intel&reg;&nbsp; Many Integrated Core Architecture not supported.<br>
+(5) On Intel&reg;&nbsp; Many Integrated Core Architecture, icc/icl versions 13.0 or later are required.<br>
+(6) Clang\other version 3.3 is supported.<br>
+(7) Clang\other currently does not offer a software-implemented 128 bit extended
+ precision type. Thus, all entry points reliant on this type are removed
+ from the library and cannot be called in the user program. The following
+ functions are not available:
+@code
+ __kmpc_atomic_cmplx16_*
+ __kmpc_atomic_float16_*
+ __kmpc_atomic_*_fp
+@endcode
+(8) Community contribution provided AS IS, not tested by Intel.
+
+Supported Architectures: IBM(R) Power 7 and Power 8
+<table border=1>
+<tr><th> <th>gcc<th>clang
+<tr><td>Linux\other OS<td>Yes(1,2)<td>Yes(3,4)
+</table>
+(1) On Power 7, gcc version 4.8.2 is supported.<br>
+(2) On Power 8, gcc version 4.8.2 is supported.<br>
+(3) On Power 7, clang version 3.7 is supported.<br>
+(4) On Power 8, clang version 3.7 is supported.<br>
+
+@section sec_frontend Front-end Compilers that work with this RTL
+
+The following compilers are known to do compatible code generation for
+this RTL: icc/icl, gcc. Code generation is discussed in more detail
+later in this document.
+
+@section sec_outlining Outlining
+
+The runtime interface is based on the idea that the compiler
+"outlines" sections of code that are to run in parallel into separate
+functions that can then be invoked in multiple threads. For instance,
+simple code like this
+
+@code
+void foo()
+{
+#pragma omp parallel
+ {
+ ... do something ...
+ }
+}
+@endcode
+is converted into something that looks conceptually like this (where
+the names used are merely illustrative; the real library function
+names will be used later after we've discussed some more issues...)
+
+@code
+static void outlinedFooBody()
+{
+ ... do something ...
+}
+
+void foo()
+{
+ __OMP_runtime_fork(outlinedFooBody, (void*)0); // Not the real function name!
+}
+@endcode
+
+@subsection SEC_SHAREDVARS Addressing shared variables
+
+In real uses of the OpenMP\other API there are normally references
+from the outlined code to shared variables that are in scope in the containing function.
+Therefore the containing function must be able to address
+these variables. The runtime supports two alternate ways of doing
+this.
+
+@subsubsection SEC_SEC_OT Current Technique
+The technique currently supported by the runtime library is to receive
+a separate pointer to each shared variable that can be accessed from
+the outlined function. This is what is shown in the example below.
+
+We hope soon to provide an alternative interface to support the
+alternate implementation described in the next section. The
+alternative implementation has performance advantages for small
+parallel regions that have many shared variables.
+
+@subsubsection SEC_SEC_PT Future Technique
+The idea is to treat the outlined function as though it
+were a lexically nested function, and pass it a single argument which
+is the pointer to the parent's stack frame. Provided that the compiler
+knows the layout of the parent frame when it is generating the outlined
+function it can then access the up-level variables at appropriate
+offsets from the parent frame. This is a classical compiler technique
+from the 1960s to support languages like Algol (and its descendants)
+that support lexically nested functions.
+
+The main benefit of this technique is that there is no code required
+at the fork point to marshal the arguments to the outlined function.
+Since the runtime knows statically how many arguments must be passed to the
+outlined function, it can easily copy them to the thread's stack
+frame. Therefore the performance of the fork code is independent of
+the number of shared variables that are accessed by the outlined
+function.
+
+If it is hard to determine the stack layout of the parent while generating the
+outlined code, it is still possible to use this approach by collecting all of
+the variables in the parent that are accessed from outlined functions into
+a single `struct` which is placed on the stack, and whose address is passed
+to the outlined functions. In this way the offsets of the shared variables
+are known (since they are inside the struct) without needing to know
+the complete layout of the parent stack-frame. From the point of view
+of the runtime either of these techniques is equivalent, since in either
+case it only has to pass a single argument to the outlined function to allow
+it to access shared variables.
+
+A scheme like this is how gcc\other generates outlined functions.
+
+@section SEC_INTERFACES Library Interfaces
+The library functions used for specific parts of the OpenMP\other language implementation
+are documented in different modules.
+
+ - @ref BASIC_TYPES fundamental types used by the runtime in many places
+ - @ref DEPRECATED functions that are in the library but are no longer required
+ - @ref STARTUP_SHUTDOWN functions for initializing and finalizing the runtime
+ - @ref PARALLEL functions for implementing `omp parallel`
+ - @ref THREAD_STATES functions for supporting thread state inquiries
+ - @ref WORK_SHARING functions for work sharing constructs such as `omp for`, `omp sections`
+ - @ref THREADPRIVATE functions to support thread private data, copyin etc
+ - @ref SYNCHRONIZATION functions to support `omp critical`, `omp barrier`, `omp master`, reductions etc
+ - @ref ATOMIC_OPS functions to support atomic operations
+ - @ref STATS_GATHERING macros to support developer profiling of libomp
+ - Documentation on tasking has still to be written...
+
+@section SEC_EXAMPLES Examples
+@subsection SEC_WORKSHARING_EXAMPLE Work Sharing Example
+This example shows the code generated for a parallel for with reduction and dynamic scheduling.
+
+@code
+extern float foo( void );
+
+int main () {
+ int i;
+ float r = 0.0;
+ #pragma omp parallel for schedule(dynamic) reduction(+:r)
+ for ( i = 0; i < 10; i ++ ) {
+ r += foo();
+ }
+}
+@endcode
+
+The transformed code looks like this.
+@code
+extern float foo( void );
+
+int main () {
+ static int zero = 0;
+ auto int gtid;
+ auto float r = 0.0;
+ __kmpc_begin( & loc3, 0 );
+ // The gtid is not actually required in this example so could be omitted;
+ // We show its initialization here because it is often required for calls into
+ // the runtime and should be locally cached like this.
+ gtid = __kmpc_global thread num( & loc3 );
+ __kmpc_fork call( & loc7, 1, main_7_parallel_3, & r );
+ __kmpc_end( & loc0 );
+ return 0;
+}
+
+struct main_10_reduction_t_5 { float r_10_rpr; };
+
+static kmp_critical_name lck = { 0 };
+static ident_t loc10; // loc10.flags should contain KMP_IDENT_ATOMIC_REDUCE bit set
+ // if compiler has generated an atomic reduction.
+
+void main_7_parallel_3( int *gtid, int *btid, float *r_7_shp ) {
+ auto int i_7_pr;
+ auto int lower, upper, liter, incr;
+ auto struct main_10_reduction_t_5 reduce;
+ reduce.r_10_rpr = 0.F;
+ liter = 0;
+ __kmpc_dispatch_init_4( & loc7,*gtid, 35, 0, 9, 1, 1 );
+ while ( __kmpc_dispatch_next_4( & loc7, *gtid, & liter, & lower, & upper, & incr ) ) {
+ for( i_7_pr = lower; upper >= i_7_pr; i_7_pr ++ )
+ reduce.r_10_rpr += foo();
+ }
+ switch( __kmpc_reduce_nowait( & loc10, *gtid, 1, 4, & reduce, main_10_reduce_5, & lck ) ) {
+ case 1:
+ *r_7_shp += reduce.r_10_rpr;
+ __kmpc_end_reduce_nowait( & loc10, *gtid, & lck );
+ break;
+ case 2:
+ __kmpc_atomic_float4_add( & loc10, *gtid, r_7_shp, reduce.r_10_rpr );
+ break;
+ default:;
+ }
+}
+
+void main_10_reduce_5( struct main_10_reduction_t_5 *reduce_lhs,
+ struct main_10_reduction_t_5 *reduce_rhs )
+{
+ reduce_lhs->r_10_rpr += reduce_rhs->r_10_rpr;
+}
+@endcode
+
+@defgroup BASIC_TYPES Basic Types
+Types that are used throughout the runtime.
+
+@defgroup DEPRECATED Deprecated Functions
+Functions in this group are for backwards compatibility only, and
+should not be used in new code.
+
+@defgroup STARTUP_SHUTDOWN Startup and Shutdown
+These functions are for library initialization and shutdown.
+
+@defgroup PARALLEL Parallel (fork/join)
+These functions are used for implementing <tt>\#pragma omp parallel</tt>.
+
+@defgroup THREAD_STATES Thread Information
+These functions return information about the currently executing thread.
+
+@defgroup WORK_SHARING Work Sharing
+These functions are used for implementing
+<tt>\#pragma omp for</tt>, <tt>\#pragma omp sections</tt>, <tt>\#pragma omp single</tt> and
+<tt>\#pragma omp master</tt> constructs.
+
+When handling loops, there are different functions for each of the signed and unsigned 32 and 64 bit integer types
+which have the name suffixes `_4`, `_4u`, `_8` and `_8u`. The semantics of each of the functions is the same,
+so they are only described once.
+
+Static loop scheduling is handled by @ref __kmpc_for_static_init_4 and friends. Only a single call is needed,
+since the iterations to be executed by any give thread can be determined as soon as the loop parameters are known.
+
+Dynamic scheduling is handled by the @ref __kmpc_dispatch_init_4 and @ref __kmpc_dispatch_next_4 functions.
+The init function is called once in each thread outside the loop, while the next function is called each
+time that the previous chunk of work has been exhausted.
+
+@defgroup SYNCHRONIZATION Synchronization
+These functions are used for implementing barriers.
+
+@defgroup THREADPRIVATE Thread private data support
+These functions support copyin/out and thread private data.
+
+@defgroup STATS_GATHERING Statistics Gathering from OMPTB
+These macros support profiling the libomp library. Use --stats=on when building with build.pl to enable
+and then use the KMP_* macros to profile (through counts or clock ticks) libomp during execution of an OpenMP program.
+
+@section sec_stats_env_vars Environment Variables
+
+This section describes the environment variables relevant to stats-gathering in libomp
+
+@code
+KMP_STATS_FILE
+@endcode
+This environment variable is set to an output filename that will be appended *NOT OVERWRITTEN* if it exists. If this environment variable is undefined, the statistics will be output to stderr
+
+@code
+KMP_STATS_THREADS
+@endcode
+This environment variable indicates to print thread-specific statistics as well as aggregate statistics. Each thread's statistics will be shown as well as the collective sum of all threads. The values "true", "on", "1", "yes" will all indicate to print per thread statistics.
+
+@defgroup TASKING Tasking support
+These functions support tasking constructs.
+
+@defgroup USER User visible functions
+These functions can be called directly by the user, but are runtime library specific, rather than being OpenMP interfaces.
+
+*/
+
diff --git a/final/runtime/src/CMakeLists.txt b/final/runtime/src/CMakeLists.txt
new file mode 100644
index 0000000..777434d
--- /dev/null
+++ b/final/runtime/src/CMakeLists.txt
@@ -0,0 +1,332 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Configure omp.h, kmp_config.h and ompt.h if necessary
+configure_file(${LIBOMP_INC_DIR}/omp.h.var omp.h @ONLY)
+configure_file(kmp_config.h.cmake kmp_config.h @ONLY)
+if(${LIBOMP_OMPT_SUPPORT})
+ configure_file(${LIBOMP_INC_DIR}/ompt.h.var ompt.h @ONLY)
+endif()
+
+# Generate message catalog files: kmp_i18n_id.inc and kmp_i18n_default.inc
+add_custom_command(
+ OUTPUT kmp_i18n_id.inc
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/message-converter.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --prefix=kmp_i18n --enum=kmp_i18n_id.inc ${LIBOMP_SRC_DIR}/i18n/en_US.txt
+ DEPENDS ${LIBOMP_SRC_DIR}/i18n/en_US.txt ${LIBOMP_TOOLS_DIR}/message-converter.pl
+)
+add_custom_command(
+ OUTPUT kmp_i18n_default.inc
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/message-converter.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --prefix=kmp_i18n --default=kmp_i18n_default.inc ${LIBOMP_SRC_DIR}/i18n/en_US.txt
+ DEPENDS ${LIBOMP_SRC_DIR}/i18n/en_US.txt ${LIBOMP_TOOLS_DIR}/message-converter.pl
+)
+
+# Set the -D definitions for all sources
+# UNICODE and _UNICODE are set in LLVM's CMake system. They affect the
+# ittnotify code and should only be set when compiling ittnotify_static.c
+# on Windows (done below).
+# TODO: Fix the UNICODE usage in ittnotify code for Windows.
+remove_definitions(-DUNICODE -D_UNICODE)
+libomp_get_definitions_flags(LIBOMP_CONFIGURED_DEFINITIONS_FLAGS)
+add_definitions(${LIBOMP_CONFIGURED_DEFINITIONS_FLAGS})
+
+# Set the -I includes for all sources
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${LIBOMP_SRC_DIR}
+ ${LIBOMP_SRC_DIR}/i18n
+ ${LIBOMP_INC_DIR}
+ ${LIBOMP_SRC_DIR}/thirdparty/ittnotify
+)
+if(${LIBOMP_USE_HWLOC})
+ include_directories(${LIBOMP_HWLOC_INSTALL_DIR}/include)
+endif()
+
+# Getting correct source files to build library
+set(LIBOMP_CFILES)
+set(LIBOMP_CXXFILES)
+set(LIBOMP_ASMFILES)
+if(${STUBS_LIBRARY})
+ set(LIBOMP_CFILES kmp_stub.c)
+else()
+ # Get C files
+ set(LIBOMP_CFILES
+ kmp_alloc.c
+ kmp_atomic.c
+ kmp_csupport.c
+ kmp_debug.c
+ kmp_itt.c
+ kmp_environment.c
+ kmp_error.c
+ kmp_global.c
+ kmp_i18n.c
+ kmp_io.c
+ kmp_runtime.c
+ kmp_settings.c
+ kmp_str.c
+ kmp_tasking.c
+ kmp_taskq.c
+ kmp_threadprivate.c
+ kmp_utility.c
+ )
+ if(WIN32)
+ # Windows specific files
+ libomp_append(LIBOMP_CFILES z_Windows_NT_util.c)
+ libomp_append(LIBOMP_CFILES z_Windows_NT-586_util.c)
+ libomp_append(LIBOMP_ASMFILES z_Windows_NT-586_asm.asm) # Windows assembly file
+ else()
+ # Unix specific files
+ libomp_append(LIBOMP_CFILES z_Linux_util.c)
+ libomp_append(LIBOMP_CFILES kmp_gsupport.c)
+ libomp_append(LIBOMP_ASMFILES z_Linux_asm.s) # Unix assembly file
+ endif()
+ libomp_append(LIBOMP_CFILES thirdparty/ittnotify/ittnotify_static.c LIBOMP_USE_ITT_NOTIFY)
+ libomp_append(LIBOMP_CFILES kmp_debugger.c LIBOMP_USE_DEBUGGER)
+ # Get C++ files
+ set(LIBOMP_CXXFILES
+ kmp_barrier.cpp
+ kmp_wait_release.cpp
+ kmp_affinity.cpp
+ kmp_dispatch.cpp
+ kmp_lock.cpp
+ kmp_sched.cpp
+ )
+ libomp_append(LIBOMP_CXXFILES kmp_stats.cpp LIBOMP_STATS)
+ libomp_append(LIBOMP_CXXFILES kmp_stats_timing.cpp LIBOMP_STATS)
+ if(${LIBOMP_OMP_VERSION} GREATER 40 OR ${LIBOMP_OMP_VERSION} EQUAL 40)
+ libomp_append(LIBOMP_CXXFILES kmp_taskdeps.cpp)
+ libomp_append(LIBOMP_CXXFILES kmp_cancel.cpp)
+ endif()
+endif()
+# Files common to stubs and normal library
+libomp_append(LIBOMP_CFILES kmp_ftn_cdecl.c)
+libomp_append(LIBOMP_CFILES kmp_ftn_extra.c)
+libomp_append(LIBOMP_CFILES kmp_version.c)
+libomp_append(LIBOMP_CFILES ompt-general.c IF_TRUE LIBOMP_OMPT_SUPPORT)
+
+set(LIBOMP_SOURCE_FILES ${LIBOMP_CFILES} ${LIBOMP_CXXFILES} ${LIBOMP_ASMFILES})
+# For Windows, there is a resource file (.rc -> .res) that is also compiled
+libomp_append(LIBOMP_SOURCE_FILES libomp.rc WIN32)
+
+# Get compiler and assembler flags
+libomp_get_cflags(LIBOMP_CONFIGURED_CFLAGS)
+libomp_get_cxxflags(LIBOMP_CONFIGURED_CXXFLAGS)
+libomp_get_asmflags(LIBOMP_CONFIGURED_ASMFLAGS)
+# Set the compiler flags for each type of source
+set_source_files_properties(${LIBOMP_CFILES} PROPERTIES COMPILE_FLAGS "${LIBOMP_CONFIGURED_CFLAGS}")
+set_source_files_properties(${LIBOMP_CXXFILES} PROPERTIES COMPILE_FLAGS "${LIBOMP_CONFIGURED_CXXFLAGS}")
+set_source_files_properties(${LIBOMP_ASMFILES} PROPERTIES COMPILE_FLAGS "${LIBOMP_CONFIGURED_ASMFLAGS}")
+# Let the compiler handle the assembly files on Unix-like systems
+if(NOT WIN32)
+ set_source_files_properties(${LIBOMP_ASMFILES} PROPERTIES LANGUAGE C)
+endif()
+
+# Remove any cmake-automatic linking of the standard C++ library.
+# We neither need (nor want) the standard C++ library dependency even though we compile c++ files.
+if(NOT ${LIBOMP_USE_STDCPPLIB})
+ set(LIBOMP_LINKER_LANGUAGE C)
+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
+else()
+ set(LIBOMP_LINKER_LANGUAGE CXX)
+endif()
+
+# Add the OpenMP library
+libomp_get_ldflags(LIBOMP_CONFIGURED_LDFLAGS)
+
+add_library(omp ${LIBOMP_LIBRARY_KIND} ${LIBOMP_SOURCE_FILES})
+
+set_target_properties(omp PROPERTIES
+ PREFIX "" SUFFIX "" OUTPUT_NAME "${LIBOMP_LIB_FILE}"
+ LINK_FLAGS "${LIBOMP_CONFIGURED_LDFLAGS}"
+ LINKER_LANGUAGE ${LIBOMP_LINKER_LANGUAGE}
+)
+
+# Get the library's location within the build tree for the unit tester
+if(NOT WIN32)
+ get_target_property(LIBOMP_LIBRARY_DIR omp LIBRARY_OUTPUT_DIRECTORY)
+else()
+ get_target_property(LIBOMP_LIBRARY_DIR omp RUNTIME_OUTPUT_DIRECTORY)
+endif()
+if(NOT LIBOMP_LIBRARY_DIR)
+ set(LIBOMP_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+ set(LIBOMP_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
+else()
+ set(LIBOMP_LIBRARY_DIR ${LIBOMP_LIBRARY_DIR} PARENT_SCOPE)
+endif()
+
+# Add symbolic links to libomp
+if(NOT WIN32)
+ add_custom_command(TARGET omp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${LIBOMP_LIB_FILE}
+ libgomp${LIBOMP_LIBRARY_SUFFIX}
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${LIBOMP_LIB_FILE}
+ libiomp5${LIBOMP_LIBRARY_SUFFIX}
+ WORKING_DIRECTORY ${LIBOMP_LIBRARY_DIR}
+ )
+endif()
+
+# Linking command will include libraries in LIBOMP_CONFIGURED_LIBFLAGS
+libomp_get_libflags(LIBOMP_CONFIGURED_LIBFLAGS)
+target_link_libraries(omp ${LIBOMP_CONFIGURED_LIBFLAGS} ${CMAKE_DL_LIBS})
+
+# Create *.inc before compiling any sources
+# objects depend on : .inc files
+add_custom_target(libomp-needed-headers DEPENDS kmp_i18n_id.inc kmp_i18n_default.inc)
+add_dependencies(omp libomp-needed-headers)
+
+# Windows specific build rules
+if(WIN32)
+ configure_file(libomp.rc.var libomp.rc @ONLY)
+
+ # Create .def and .rc file before compiling any sources
+ add_custom_target(libomp-needed-windows-files DEPENDS ${LIBOMP_LIB_NAME}.def)
+ add_dependencies(omp libomp-needed-windows-files)
+ # z_Windows_NT-586_asm.asm requires definitions to be sent via command line
+ # It only needs the architecutre macro and OMPT_SUPPORT=0|1
+ libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_IA32" IF_TRUE IA32)
+ libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_AMD64" IF_TRUE INTEL64)
+ libomp_append(LIBOMP_MASM_DEFINITIONS "-DOMPT_SUPPORT" IF_TRUE_1_0 LIBOMP_OMPT_SUPPORT)
+ libomp_list_to_string("${LIBOMP_MASM_DEFINITIONS}" LIBOMP_MASM_DEFINITIONS)
+ set_property(SOURCE z_Windows_NT-586_asm.asm APPEND_STRING PROPERTY COMPILE_FLAGS " ${LIBOMP_MASM_DEFINITIONS}")
+ set_source_files_properties(thirdparty/ittnotify/ittnotify_static.c PROPERTIES COMPILE_DEFINITIONS "UNICODE")
+
+ # Create Windows import library
+ # the import library is "re-linked" to include kmp_import.c which prevents
+ # linking of both Visual Studio OpenMP and newly built OpenMP
+ set_source_files_properties(kmp_import.c PROPERTIES COMPILE_FLAGS "${LIBOMP_CONFIGURED_CFLAGS}")
+ set(LIBOMP_IMP_LIB_FILE ${LIBOMP_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
+ set(LIBOMP_GENERATED_IMP_LIB_FILENAME ${LIBOMP_LIB_FILE}${CMAKE_STATIC_LIBRARY_SUFFIX})
+ set_target_properties(omp PROPERTIES
+ VERSION ${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR} # uses /version flag
+ IMPORT_PREFIX "" IMPORT_SUFFIX "" # control generated import library name when building omp
+ ARCHIVE_OUTPUT_NAME ${LIBOMP_GENERATED_IMP_LIB_FILENAME}
+ )
+ # Get generated import library from creating omp
+ get_target_property(LIBOMP_IMPORT_LIB_DIRECTORY omp ARCHIVE_OUTPUT_DIRECTORY)
+ if(LIBOMP_IMPORT_LIB_DIRECTORY)
+ set(LIBOMP_GENERATED_IMP_LIB ${LIBOMP_IMPORT_LIB_DIRECTORY}/${LIBOMP_GENERATED_IMP_LIB_FILENAME})
+ else()
+ set(LIBOMP_GENERATED_IMP_LIB ${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_GENERATED_IMP_LIB_FILENAME})
+ endif()
+ set_source_files_properties(${LIBOMP_GENERATED_IMP_LIB} PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE)
+ # Create new import library that is just the previously created one + kmp_import.c
+ add_library(ompimp STATIC ${LIBOMP_GENERATED_IMP_LIB} kmp_import.c)
+ set_target_properties(ompimp PROPERTIES
+ PREFIX "" SUFFIX "" OUTPUT_NAME "${LIBOMP_IMP_LIB_FILE}"
+ LINKER_LANGUAGE C
+ )
+ add_dependencies(ompimp omp) # ensure generated import library is created first
+
+ # Create def file to designate exported functions
+ libomp_get_gdflags(LIBOMP_GDFLAGS) # generate-def.pl flags (Windows only)
+ libomp_string_to_list("${LIBOMP_GDFLAGS}" LIBOMP_GDFLAGS)
+ add_custom_command(
+ OUTPUT ${LIBOMP_LIB_NAME}.def
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/generate-def.pl ${LIBOMP_GDFLAGS}
+ -o ${LIBOMP_LIB_NAME}.def ${CMAKE_CURRENT_SOURCE_DIR}/dllexports
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dllexports ${LIBOMP_TOOLS_DIR}/generate-def.pl
+ )
+endif()
+
+# Building the Fortran module files
+# One compilation step creates both omp_lib.mod and omp_lib_kinds.mod
+if(${LIBOMP_FORTRAN_MODULES})
+ configure_file(${LIBOMP_INC_DIR}/omp_lib.h.var omp_lib.h @ONLY)
+ configure_file(${LIBOMP_INC_DIR}/omp_lib.f.var omp_lib.f @ONLY)
+ configure_file(${LIBOMP_INC_DIR}/omp_lib.f90.var omp_lib.f90 @ONLY)
+ add_custom_target(libomp-mod ALL DEPENDS omp_lib.mod omp_lib_kinds.mod)
+ libomp_get_fflags(LIBOMP_CONFIGURED_FFLAGS)
+ if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
+ set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.f90)
+ else()
+ set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.f)
+ endif()
+ add_custom_command(
+ OUTPUT omp_lib.mod omp_lib_kinds.mod
+ COMMAND ${CMAKE_Fortran_COMPILER} -c ${LIBOMP_CONFIGURED_FFLAGS} ${LIBOMP_FORTRAN_SOURCE_FILE}
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_FORTRAN_SOURCE_FILE}
+ ${CMAKE_CURRENT_BINARY_DIR}/omp_lib.h
+ )
+ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES omp_lib${CMAKE_C_OUTPUT_EXTENSION})
+endif()
+
+# Move files to exports/ directory if requested
+if(${LIBOMP_COPY_EXPORTS})
+ include(LibompExports)
+endif()
+
+# Micro test rules for after library has been built (cmake/LibompMicroTests.cmake)
+include(LibompMicroTests)
+add_custom_target(libomp-micro-tests)
+if(NOT ${MIC} AND NOT CMAKE_CROSSCOMPILING)
+ add_dependencies(libomp-micro-tests libomp-test-touch)
+endif()
+if(NOT WIN32 AND NOT APPLE)
+ add_dependencies(libomp-micro-tests libomp-test-relo)
+endif()
+if(NOT WIN32 AND NOT APPLE)
+ add_dependencies(libomp-micro-tests libomp-test-execstack)
+endif()
+if(${MIC})
+ add_dependencies(libomp-micro-tests libomp-test-instr)
+endif()
+add_dependencies(libomp-micro-tests libomp-test-deps)
+
+# Install rules
+# We want to install libomp in DESTDIR/CMAKE_INSTALL_PREFIX/lib
+# We want to install headers in DESTDIR/CMAKE_INSTALL_PREFIX/include
+if(${LIBOMP_STANDALONE_BUILD})
+ set(LIBOMP_HEADERS_INSTALL_PATH include)
+else()
+ string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION ${PACKAGE_VERSION})
+ set(LIBOMP_HEADERS_INSTALL_PATH lib${LIBOMP_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
+endif()
+if(WIN32)
+ install(TARGETS omp RUNTIME DESTINATION bin)
+ install(TARGETS ompimp ARCHIVE DESTINATION lib${LIBOMP_LIBDIR_SUFFIX})
+ # Create aliases (regular copies) of the library for backwards compatibility
+ set(LIBOMP_ALIASES "libiomp5md")
+ foreach(alias IN LISTS LIBOMP_ALIASES)
+ install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_LIB_FILE}\"
+ \"${alias}${LIBOMP_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/bin)")
+ install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_IMP_LIB_FILE}\"
+ \"${alias}${LIBOMP_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib${LIBOMP_LIBDIR_SUFFIX})")
+ endforeach()
+else()
+
+ install(TARGETS omp ${LIBOMP_INSTALL_KIND} DESTINATION lib${LIBOMP_LIBDIR_SUFFIX})
+
+ # Create aliases (symlinks) of the library for backwards compatibility
+ set(LIBOMP_ALIASES "libgomp;libiomp5")
+ foreach(alias IN LISTS LIBOMP_ALIASES)
+ install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E create_symlink \"${LIBOMP_LIB_FILE}\"
+ \"${alias}${LIBOMP_LIBRARY_SUFFIX}\" WORKING_DIRECTORY
+ \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/lib${LIBOMP_LIBDIR_SUFFIX})")
+ endforeach()
+endif()
+install(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/omp.h
+ DESTINATION ${LIBOMP_HEADERS_INSTALL_PATH}
+)
+if(${LIBOMP_OMPT_SUPPORT})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ompt.h DESTINATION ${LIBOMP_HEADERS_INSTALL_PATH})
+endif()
+if(${LIBOMP_FORTRAN_MODULES})
+ install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/omp_lib.h
+ ${CMAKE_CURRENT_BINARY_DIR}/omp_lib.mod
+ ${CMAKE_CURRENT_BINARY_DIR}/omp_lib_kinds.mod
+ DESTINATION ${LIBOMP_HEADERS_INSTALL_PATH}
+ )
+endif()
+
diff --git a/final/runtime/src/dllexports b/final/runtime/src/dllexports
new file mode 100644
index 0000000..fe1f5f2
--- /dev/null
+++ b/final/runtime/src/dllexports
@@ -0,0 +1,1010 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Deprecated entry points (numbers are reserved):
+- __kmpc_barrier_reduce_master 109
+- __kmpc_end_barrier_reduce_master 122
+- __kmpc_for_init_4 131
+- __kmpc_for_init_8 132
+- __kmpc_for_next_4 133
+- __kmpc_for_next_8 134
+- __kmpc_fork_call_bound 139
+- __kmpc_reduce_master_nowait 149
+- __kmpc_omp_task_begin 194
+- __kmpc_omp_task_complete 195
+- kmpc_sharable_calloc 218
+- kmpc_sharable_free 219
+- kmpc_sharable_malloc 220
+- kmpc_sharable_realloc 221
+- kmpc_aligned_sharable_malloc 223
+- mpai4a 500
+- mpai8a 501
+- mpar4a 502
+- mpar8a 503
+- mpax4x 504
+- mpax8x 505
+- mpobar 506
+- mpoebr 507
+- mpofork 508
+- mpofrk 509
+- mpojoin 510
+- mpoxbr 511
+- mppadj 512
+- mppaff 513
+- mppbar 514
+- mppbeg 515
+- mppdeo 516
+- mppdnx 517
+- mppdnxd 518
+- mppdon 519
+- mppdxo 520
+- mppebr 521
+- mppecs 522
+- mppems 523
+- mppenc 524
+- mppend 525
+- mppepa 526
+- mppesp 527
+- mppfkd 528
+- mppfkt 529
+- mppfork 530
+- mppfrk 531
+- mppioa 532
+- mppiws 533
+- mppjoin 534
+- mppnth 535
+- mpppqa 536
+- mpppqc 537
+- mpppqs 538
+- mpptid 539
+- mpptpa 540
+- mpptpc 541
+- mpptpz 542
+- mppvsy 543
+- mppxbr 544
+- mppxcs 545
+- mppxms 546
+- mppxnc 547
+- mppxpa 548
+- mppxpr 549
+- mppxsp 550
+- mppxth 551
+- mpsbar 552
+- mpscpr 597
+- mpsebr 553
+- mpserd 554
+- mpsfd4 555
+- mpsfd8 556
+- mpsid4 557
+- mpsid8 558
+- mpsnd4 559
+- mpsnd8 560
+- mpsont 561
+- mpsred 562
+- mpsunt 563
+- mpsxbr 564
+- mpsxrd 565
+- mptadj 566
+- mptaff 567
+- mptbar 568
+- mptdeo 569
+- mptdin 570
+- mptdind 571
+- mptdnx 572
+- mptdnxd 573
+- mptdon 574
+- mptdxo 575
+- mptebr 576
+- mptecs 577
+- mptems 578
+- mptenc 579
+- mptepa 580
+- mptesp 581
+- mptfkd 582
+- mptppa 583
+- mptppc 584
+- mptpps 585
+- mpttpa 586
+- mpttpc 587
+- mpttpz 588
+- mptvsy 589
+- mptxbr 590
+- mptxcs 591
+- mptxms 592
+- mptxnc 593
+- mptxpa 594
+- mptxsp 595
+- mppcpr 596
+- ftn_set_library_gang 736
+- kmp_set_library_gang
+- kmp_sharable_calloc 760
+- kmp_sharable_free 761
+- kmp_sharable_malloc 762
+- kmp_sharable_realloc 763
+- kmp_aligned_sharable_malloc 764
+- kmp_deferred_atomic_add_i4 765
+- kmp_deferred_atomic_add_i8 766
+- kmp_deferred_atomic_add_r4 767
+- kmp_deferred_atomic_add_r8 768
+- kmp_lock_cond_wait 770
+- kmp_lock_cond_signal 771
+- kmp_lock_cond_broadcast 772
+- kmp_nest_lock_cond_wait 773
+- kmp_nest_lock_cond_signal 774
+- kmp_nest_lock_cond_broadcast 775
+- kmp_get_process_num 781
+- kmp_get_num_processes 782
+- kmp_get_process_thread_num 783
+- kmp_private_mmap 784 # not implemented?
+- kmp_sharable_mmap 785 # not implemented?
+- kmp_private_munmap 786 # not implemented?
+- kmp_sharable_munmap 787 # not implemented?
+- kmp_is_sharable 788 # not implemented?
+
+%ifndef stub
+
+
+ #
+ # The following entry points are added so that the backtraces from
+ # the tools contain meaningful names for all the functions that might
+ # appear in a backtrace of a thread which is blocked in the RTL.
+ #
+
+ # Regular entry points
+ __kmp_wait_yield_4
+ __kmp_fork_call
+ __kmp_invoke_microtask
+ __kmp_launch_monitor
+ __kmp_launch_worker
+ __kmp_reap_monitor
+ __kmp_reap_worker
+ __kmp_acquire_tas_lock
+ __kmp_acquire_nested_tas_lock
+ __kmp_acquire_ticket_lock
+ __kmp_acquire_nested_ticket_lock
+ __kmp_acquire_queuing_lock
+ __kmp_acquire_nested_queuing_lock
+ __kmp_acquire_drdpa_lock
+ __kmp_acquire_nested_drdpa_lock
+
+ %ifdef KMP_DEBUG
+ # allows console output capability for applications those don't have it
+ __kmp_printf
+ %endif
+
+
+ %ifdef USE_DEBUGGER
+ __kmp_debugging DATA
+ __kmp_omp_debug_struct_info DATA
+ %endif
+
+ # Symbols for MS mutual detection:
+ _You_must_link_with_exactly_one_OpenMP_library DATA
+ _You_must_link_with_Intel_OpenMP_library DATA
+ %ifdef msvc_compat
+ _You_must_link_with_Microsoft_OpenMP_library DATA
+ %endif
+
+ __kmp_wait_64
+ __kmp_release_64
+
+
+# VT_getthid 1
+# vtgthid 2
+
+ __kmpc_atomic_4 100
+ __kmpc_atomic_8 101
+ __kmpc_atomic_fixed4_add 102
+ __kmpc_atomic_fixed8_add 103
+ __kmpc_atomic_float4_add 104
+ __kmpc_atomic_float8_add 105
+ __kmpc_barrier 106
+ __kmpc_barrier_master 107
+ __kmpc_barrier_master_nowait 108
+ __kmpc_begin 110
+ __kmpc_bound_num_threads 111
+ __kmpc_bound_thread_num 112
+ __kmpc_critical 113
+ __kmpc_dispatch_fini_4 114
+ __kmpc_dispatch_fini_8 115
+ __kmpc_dispatch_init_4 116
+ __kmpc_dispatch_init_8 117
+ __kmpc_dispatch_next_4 118
+ __kmpc_dispatch_next_8 119
+ __kmpc_end 120
+ __kmpc_end_barrier_master 121
+ __kmpc_end_critical 123
+ __kmpc_end_master 124
+ __kmpc_end_ordered 125
+ __kmpc_end_serialized_parallel 126
+ __kmpc_end_single 127
+ __kmpc_end_taskq 128
+ __kmpc_end_taskq_task 129
+ __kmpc_flush 130
+ __kmpc_for_static_fini 135
+ __kmpc_for_static_init_4 136
+ __kmpc_for_static_init_8 137
+ __kmpc_fork_call 138
+ __kmpc_global_num_threads 140
+ __kmpc_global_thread_num 141
+ __kmpc_in_parallel 142
+ __kmpc_invoke_task_func 143
+ __kmpc_master 144
+ __kmpc_ok_to_fork 145
+ __kmpc_ordered 146
+ __kmpc_pop_num_threads 147
+ __kmpc_push_num_threads 148
+ __kmpc_serialized_parallel 150
+ __kmpc_single 151
+ __kmpc_task 152
+ __kmpc_task_buffer 153
+ __kmpc_taskq 154
+ __kmpc_taskq_task 155
+ __kmpc_threadprivate 156
+ __kmpc_threadprivate_cached 157
+ __kmpc_threadprivate_register 158
+ __kmpc_threadprivate_register_vec 159
+# __kmpc_ssp_begin 160
+# __kmpc_ssp_fork 161
+# __kmpc_ssp_end 162
+# __kmpc_ssp_post_4 163
+# __kmpc_ssp_post_8 164
+# __kmpc_ssp_wait_4 165
+# __kmpc_ssp_wait_8 166
+# __kmpc_ssp_distance_4 167
+# __kmpc_ssp_distance_8 168
+# __kmpc_in_ssp 169
+# __kmpc_ssp_thread_num 170
+# __kmpc_ssp_num_threads 171
+ __kmpc_copyprivate 172
+# __kmpc_ssp_get_max_threads 173
+# __kmpc_ssp_set_max_threads 174
+ __kmpc_init_lock 175
+ __kmpc_destroy_lock 176
+ __kmpc_set_lock 177
+ __kmpc_unset_lock 178
+ __kmpc_test_lock 179
+ __kmpc_init_nest_lock 180
+ __kmpc_destroy_nest_lock 181
+ __kmpc_set_nest_lock 182
+ __kmpc_unset_nest_lock 183
+ __kmpc_test_nest_lock 184
+# __kmpc_ssp_init_thread 185
+# __kmpc_ssp_set_event 186
+ __kmpc_reduce_nowait 187
+ __kmpc_end_reduce_nowait 188
+ __kmpc_reduce 189
+ __kmpc_end_reduce 190
+
+# OpenMP 3.0
+
+%ifdef OMP_30
+ __kmpc_omp_task_alloc 191
+ __kmpc_omp_task 192
+ __kmpc_omp_taskwait 193
+ __kmpc_omp_task_begin_if0 196
+ __kmpc_omp_task_complete_if0 197
+ __kmpc_omp_task_parts 198
+%endif # OMP_30
+
+# __omp_collector_api 199
+
+ # These functions are for testing purposes. There is no need in stable ordinal number:
+ __kmp_get_reduce_method
+
+%endif # not defined stub
+
+kmpc_calloc 200
+kmpc_free 201
+%ifndef stub
+ # These functions are exported from libguide, but declared neither in omp.h not in omp_lib.h.
+# kmpc_get_banner 202
+# kmpc_get_poolmode 203
+# kmpc_get_poolsize 204
+# kmpc_get_poolstat 205
+# kmpc_poolprint 207
+# kmpc_print_banner 208
+# kmpc_set_poolmode 214
+# kmpc_set_poolsize 215
+%endif
+kmpc_malloc 206
+kmpc_realloc 209
+kmpc_set_blocktime 211
+kmpc_set_library 212
+# kmpc_set_parallel_name 213
+kmpc_set_stacksize 216
+kmpc_set_stacksize_s 222
+# kmpc_set_stats 217
+kmpc_set_defaults 224
+
+# OMP 3.0 entry points for unsigned loop iteration variables
+%ifndef stub
+ %ifdef OMP_30
+ __kmpc_for_static_init_8u 225
+ __kmpc_dispatch_init_8u 226
+ __kmpc_dispatch_next_8u 227
+ __kmpc_dispatch_fini_8u 228
+ __kmpc_for_static_init_4u 229
+ __kmpc_dispatch_init_4u 230
+ __kmpc_dispatch_next_4u 231
+ __kmpc_dispatch_fini_4u 232
+ %endif # OMP_30
+%endif
+
+%ifndef stub
+ __kmpc_get_taskid 233
+ __kmpc_get_parent_taskid 234
+%endif
+
+# OpenMP 3.1 entry points
+%ifndef stub
+ %ifdef OMP_30
+ __kmpc_omp_taskyield 235
+ %endif # OMP_30
+ __kmpc_place_threads 236
+%endif
+
+# OpenMP 4.0 entry points
+%ifndef stub
+ %ifdef OMP_40
+ __kmpc_push_proc_bind 237
+ __kmpc_taskgroup 238
+ __kmpc_end_taskgroup 239
+ __kmpc_push_num_teams 240
+ __kmpc_fork_teams 241
+ __kmpc_omp_task_with_deps 242
+ __kmpc_omp_wait_deps 243
+ __kmpc_cancel 244
+ __kmpc_cancellationpoint 245
+ __kmpc_cancel_barrier 246
+ __kmpc_dist_for_static_init_4 247
+ __kmpc_dist_for_static_init_4u 248
+ __kmpc_dist_for_static_init_8 249
+ __kmpc_dist_for_static_init_8u 250
+ __kmpc_dist_dispatch_init_4 251
+ __kmpc_dist_dispatch_init_4u 252
+ __kmpc_dist_dispatch_init_8 253
+ __kmpc_dist_dispatch_init_8u 254
+ __kmpc_team_static_init_4 255
+ __kmpc_team_static_init_4u 256
+ __kmpc_team_static_init_8 257
+ __kmpc_team_static_init_8u 258
+ %endif # OMP_40
+%endif
+
+# OpenMP 4.5 entry points
+%ifndef stub
+ %ifdef OMP_45
+ __kmpc_proxy_task_completed 259
+ __kmpc_proxy_task_completed_ooo 260
+ __kmpc_doacross_init 261
+ __kmpc_doacross_wait 262
+ __kmpc_doacross_post 263
+ __kmpc_doacross_fini 264
+ __kmpc_taskloop 266
+ %endif
+%endif
+kmpc_aligned_malloc 265
+kmpc_set_disp_num_buffers 267
+
+# User API entry points that have both lower- and upper- case versions for Fortran.
+# Number for lowercase version is indicated. Number for uppercase is obtained by adding 1000.
+# User API entry points are entry points that start with 'kmp_' or 'omp_'.
+
+omp_destroy_lock 700
+omp_destroy_nest_lock 701
+omp_get_dynamic 702
+omp_get_max_threads 703
+omp_get_nested 704
+omp_get_num_procs 705
+omp_get_num_threads 706
+omp_get_thread_num 707
+omp_get_wtick 708
+omp_get_wtime 709
+omp_in_parallel 710
+omp_init_lock 711
+omp_init_nest_lock 712
+omp_set_dynamic 713
+omp_set_lock 714
+omp_set_nest_lock 715
+omp_set_nested 716
+omp_set_num_threads 717
+omp_test_lock 718
+omp_test_nest_lock 719
+omp_unset_lock 720
+omp_unset_nest_lock 721
+
+ompc_set_dynamic 722
+ompc_set_nested 723
+ompc_set_num_threads 724
+
+kmp_calloc 725
+kmp_free 726
+kmp_get_blocktime 727
+kmp_get_library 728
+kmp_get_stacksize 729
+kmp_malloc 730
+#kmp_print_banner 731
+kmp_realloc 732
+kmp_set_blocktime 734
+kmp_set_library 735
+kmp_set_library_serial 737
+kmp_set_library_throughput 738
+kmp_set_library_turnaround 739
+# kmp_set_parallel_name 740
+kmp_set_stacksize 741
+# kmp_set_stats 742
+kmp_get_num_known_threads 743
+kmp_set_stacksize_s 744
+kmp_get_stacksize_s 745
+kmp_set_defaults 746
+kmp_aligned_malloc 747
+kmp_set_warnings_on 779
+kmp_set_warnings_off 780
+
+%ifdef OMP_30
+ omp_get_active_level 789
+ omp_get_level 790
+ omp_get_ancestor_thread_num 791
+ omp_get_team_size 792
+ omp_get_thread_limit 793
+ omp_get_max_active_levels 794
+ omp_set_max_active_levels 795
+ omp_get_schedule 796
+ omp_set_schedule 797
+ ompc_set_max_active_levels 798
+ ompc_set_schedule 799
+ ompc_get_ancestor_thread_num 800
+ ompc_get_team_size 801
+ kmp_set_affinity 850
+ kmp_get_affinity 851
+ kmp_get_affinity_max_proc 852
+ kmp_create_affinity_mask 853
+ kmp_destroy_affinity_mask 854
+ kmp_set_affinity_mask_proc 855
+ kmpc_set_affinity_mask_proc 856
+ kmp_unset_affinity_mask_proc 857
+ kmpc_unset_affinity_mask_proc 858
+ kmp_get_affinity_mask_proc 859
+ kmpc_get_affinity_mask_proc 860
+%endif # OMP_30
+
+# OpenMP 3.1
+
+%ifdef OMP_30
+ omp_in_final 861
+%endif # OMP_30
+
+# OpenMP 40
+
+%ifdef OMP_40
+ omp_get_proc_bind 862
+ #omp_set_proc_bind 863
+ #omp_curr_proc_bind 864
+ omp_get_num_teams 865
+ omp_get_team_num 866
+ omp_get_cancellation 867
+ kmp_get_cancellation_status 868
+ omp_is_initial_device 869
+ %ifdef stub
+ omp_set_default_device 879
+ omp_get_default_device 880
+ omp_get_num_devices 881
+ %endif
+%endif # OMP_40
+
+# OpenMP 45
+
+%ifdef OMP_45
+ omp_init_lock_with_hint 870
+ omp_init_nest_lock_with_hint 871
+ omp_get_max_task_priority 872
+ omp_get_num_places 873
+ omp_get_place_num_procs 874
+ omp_get_place_proc_ids 875
+ omp_get_place_num 876
+ omp_get_partition_num_places 877
+ omp_get_partition_place_nums 878
+ %ifdef stub
+ omp_get_initial_device 882
+ omp_target_alloc 883
+ omp_target_free 884
+ omp_target_is_present 885
+ omp_target_memcpy 886
+ omp_target_memcpy_rect 887
+ omp_target_associate_ptr 888
+ omp_target_disassociate_ptr 889
+ %endif
+%endif # OMP_45
+
+kmp_set_disp_num_buffers 890
+
+%ifndef stub
+ # Ordinals between 900 and 999 are reserved
+
+ # Ordinals between 1000 and 1999 are reserved
+ # for user-callable uppercase Fortran entries.
+
+
+ # ATOMIC entries
+
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_div 2000
+ %endif
+
+ __kmpc_atomic_fixed1_add 2001
+ __kmpc_atomic_fixed1_andb 2002
+ __kmpc_atomic_fixed1_div 2003
+ __kmpc_atomic_fixed1u_div 2004
+ __kmpc_atomic_fixed1_mul 2005
+ __kmpc_atomic_fixed1_orb 2006
+ __kmpc_atomic_fixed1_shl 2007
+ __kmpc_atomic_fixed1_shr 2008
+ __kmpc_atomic_fixed1u_shr 2009
+ __kmpc_atomic_fixed1_sub 2010
+ __kmpc_atomic_fixed1_xor 2011
+
+ __kmpc_atomic_fixed2_add 2012
+ __kmpc_atomic_fixed2_andb 2013
+ __kmpc_atomic_fixed2_div 2014
+ __kmpc_atomic_fixed2u_div 2015
+ __kmpc_atomic_fixed2_mul 2016
+ __kmpc_atomic_fixed2_orb 2017
+ __kmpc_atomic_fixed2_shl 2018
+ __kmpc_atomic_fixed2_shr 2019
+ __kmpc_atomic_fixed2u_shr 2020
+ __kmpc_atomic_fixed2_sub 2021
+ __kmpc_atomic_fixed2_xor 2022
+
+ #__kmpc_atomic_fixed4_add # declared above #102
+ __kmpc_atomic_fixed4_sub 2024
+ #__kmpc_atomic_float4_add # declared above #104
+ __kmpc_atomic_float4_sub 2026
+ #__kmpc_atomic_fixed8_add # declared above #103
+ __kmpc_atomic_fixed8_sub 2028
+ #__kmpc_atomic_float8_add # declared above #105
+ __kmpc_atomic_float8_sub 2030
+
+ __kmpc_atomic_fixed4_andb 2031
+ __kmpc_atomic_fixed4_div 2032
+ __kmpc_atomic_fixed4u_div 2033
+ __kmpc_atomic_fixed4_mul 2034
+ __kmpc_atomic_fixed4_orb 2035
+ __kmpc_atomic_fixed4_shl 2036
+ __kmpc_atomic_fixed4_shr 2037
+ __kmpc_atomic_fixed4u_shr 2038
+ __kmpc_atomic_fixed4_xor 2039
+ __kmpc_atomic_fixed8_andb 2040
+ __kmpc_atomic_fixed8_div 2041
+ __kmpc_atomic_fixed8u_div 2042
+ __kmpc_atomic_fixed8_mul 2043
+ __kmpc_atomic_fixed8_orb 2044
+ __kmpc_atomic_fixed8_shl 2045
+ __kmpc_atomic_fixed8_shr 2046
+ __kmpc_atomic_fixed8u_shr 2047
+ __kmpc_atomic_fixed8_xor 2048
+ __kmpc_atomic_float4_div 2049
+ __kmpc_atomic_float4_mul 2050
+ __kmpc_atomic_float8_div 2051
+ __kmpc_atomic_float8_mul 2052
+
+ __kmpc_atomic_fixed1_andl 2053
+ __kmpc_atomic_fixed1_orl 2054
+ __kmpc_atomic_fixed2_andl 2055
+ __kmpc_atomic_fixed2_orl 2056
+ __kmpc_atomic_fixed4_andl 2057
+ __kmpc_atomic_fixed4_orl 2058
+ __kmpc_atomic_fixed8_andl 2059
+ __kmpc_atomic_fixed8_orl 2060
+
+ __kmpc_atomic_fixed1_max 2061
+ __kmpc_atomic_fixed1_min 2062
+ __kmpc_atomic_fixed2_max 2063
+ __kmpc_atomic_fixed2_min 2064
+ __kmpc_atomic_fixed4_max 2065
+ __kmpc_atomic_fixed4_min 2066
+ __kmpc_atomic_fixed8_max 2067
+ __kmpc_atomic_fixed8_min 2068
+ __kmpc_atomic_float4_max 2069
+ __kmpc_atomic_float4_min 2070
+ __kmpc_atomic_float8_max 2071
+ __kmpc_atomic_float8_min 2072
+
+ __kmpc_atomic_fixed1_neqv 2073
+ __kmpc_atomic_fixed2_neqv 2074
+ __kmpc_atomic_fixed4_neqv 2075
+ __kmpc_atomic_fixed8_neqv 2076
+ __kmpc_atomic_fixed1_eqv 2077
+ __kmpc_atomic_fixed2_eqv 2078
+ __kmpc_atomic_fixed4_eqv 2079
+ __kmpc_atomic_fixed8_eqv 2080
+
+ __kmpc_atomic_float10_add 2081
+ __kmpc_atomic_float10_sub 2082
+ __kmpc_atomic_float10_mul 2083
+ __kmpc_atomic_float10_div 2084
+
+ __kmpc_atomic_cmplx4_add 2085
+ __kmpc_atomic_cmplx4_sub 2086
+ __kmpc_atomic_cmplx4_mul 2087
+ __kmpc_atomic_cmplx4_div 2088
+ __kmpc_atomic_cmplx8_add 2089
+ __kmpc_atomic_cmplx8_sub 2090
+ __kmpc_atomic_cmplx8_mul 2091
+ __kmpc_atomic_cmplx8_div 2092
+ __kmpc_atomic_cmplx10_add 2093
+ __kmpc_atomic_cmplx10_sub 2094
+ __kmpc_atomic_cmplx10_mul 2095
+ __kmpc_atomic_cmplx10_div 2096
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_add 2097
+ __kmpc_atomic_cmplx16_sub 2098
+ __kmpc_atomic_cmplx16_mul 2099
+ #__kmpc_atomic_cmplx16_div 2000 # moved up because of mistake in number (supposed to be 2100)
+
+ __kmpc_atomic_float16_add 2101
+ __kmpc_atomic_float16_sub 2102
+ __kmpc_atomic_float16_mul 2103
+ __kmpc_atomic_float16_div 2104
+ __kmpc_atomic_float16_max 2105
+ __kmpc_atomic_float16_min 2106
+
+ __kmpc_atomic_fixed1_add_fp 2107
+ __kmpc_atomic_fixed1_sub_fp 2108
+ __kmpc_atomic_fixed1_mul_fp 2109
+ __kmpc_atomic_fixed1_div_fp 2110
+ __kmpc_atomic_fixed1u_div_fp 2111
+
+ __kmpc_atomic_fixed2_add_fp 2112
+ __kmpc_atomic_fixed2_sub_fp 2113
+ __kmpc_atomic_fixed2_mul_fp 2114
+ __kmpc_atomic_fixed2_div_fp 2115
+ __kmpc_atomic_fixed2u_div_fp 2116
+
+ __kmpc_atomic_fixed4_add_fp 2117
+ __kmpc_atomic_fixed4_sub_fp 2118
+ __kmpc_atomic_fixed4_mul_fp 2119
+ __kmpc_atomic_fixed4_div_fp 2120
+ __kmpc_atomic_fixed4u_div_fp 2121
+
+ __kmpc_atomic_fixed8_add_fp 2122
+ __kmpc_atomic_fixed8_sub_fp 2123
+ __kmpc_atomic_fixed8_mul_fp 2124
+ __kmpc_atomic_fixed8_div_fp 2125
+ __kmpc_atomic_fixed8u_div_fp 2126
+
+ __kmpc_atomic_float4_add_fp 2127
+ __kmpc_atomic_float4_sub_fp 2128
+ __kmpc_atomic_float4_mul_fp 2129
+ __kmpc_atomic_float4_div_fp 2130
+
+ __kmpc_atomic_float8_add_fp 2131
+ __kmpc_atomic_float8_sub_fp 2132
+ __kmpc_atomic_float8_mul_fp 2133
+ __kmpc_atomic_float8_div_fp 2134
+
+ __kmpc_atomic_float10_add_fp 2135
+ __kmpc_atomic_float10_sub_fp 2136
+ __kmpc_atomic_float10_mul_fp 2137
+ __kmpc_atomic_float10_div_fp 2138
+ %endif
+
+ __kmpc_atomic_fixed1_mul_float8 2169
+ __kmpc_atomic_fixed1_div_float8 2170
+
+ __kmpc_atomic_fixed2_mul_float8 2174
+ __kmpc_atomic_fixed2_div_float8 2175
+
+ __kmpc_atomic_fixed4_mul_float8 2179
+ __kmpc_atomic_fixed4_div_float8 2180
+
+ __kmpc_atomic_fixed8_mul_float8 2184
+ __kmpc_atomic_fixed8_div_float8 2185
+
+ __kmpc_atomic_float4_add_float8 2187
+ __kmpc_atomic_float4_sub_float8 2188
+ __kmpc_atomic_float4_mul_float8 2189
+ __kmpc_atomic_float4_div_float8 2190
+
+ __kmpc_atomic_cmplx4_add_cmplx8 2231
+ __kmpc_atomic_cmplx4_sub_cmplx8 2232
+ __kmpc_atomic_cmplx4_mul_cmplx8 2233
+ __kmpc_atomic_cmplx4_div_cmplx8 2234
+
+ __kmpc_atomic_1 2247
+ __kmpc_atomic_2 2248
+ #__kmpc_atomic_4 # declared above #100
+ #__kmpc_atomic_8 # declared above #101
+ __kmpc_atomic_10 2251
+ __kmpc_atomic_16 2252
+ __kmpc_atomic_20 2253
+ __kmpc_atomic_32 2254
+
+ %ifdef arch_32
+
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_add_a16 2255
+ __kmpc_atomic_float16_sub_a16 2256
+ __kmpc_atomic_float16_mul_a16 2257
+ __kmpc_atomic_float16_div_a16 2258
+ __kmpc_atomic_float16_max_a16 2259
+ __kmpc_atomic_float16_min_a16 2260
+
+ __kmpc_atomic_cmplx16_add_a16 2261
+ __kmpc_atomic_cmplx16_sub_a16 2262
+ __kmpc_atomic_cmplx16_mul_a16 2263
+ __kmpc_atomic_cmplx16_div_a16 2264
+ %endif
+
+ %endif
+
+ %ifndef arch_64
+
+ # ATOMIC extensions for OpenMP 3.1 spec (x86 and x64 only)
+
+ __kmpc_atomic_fixed1_rd 2265
+ __kmpc_atomic_fixed2_rd 2266
+ __kmpc_atomic_fixed4_rd 2267
+ __kmpc_atomic_fixed8_rd 2268
+ __kmpc_atomic_float4_rd 2269
+ __kmpc_atomic_float8_rd 2270
+ __kmpc_atomic_float10_rd 2271
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_rd 2272
+ %endif
+ __kmpc_atomic_cmplx4_rd 2273
+ __kmpc_atomic_cmplx8_rd 2274
+ __kmpc_atomic_cmplx10_rd 2275
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_rd 2276
+ %ifdef arch_32
+ __kmpc_atomic_float16_a16_rd 2277
+ __kmpc_atomic_cmplx16_a16_rd 2278
+ %endif
+ %endif
+ __kmpc_atomic_fixed1_wr 2279
+ __kmpc_atomic_fixed2_wr 2280
+ __kmpc_atomic_fixed4_wr 2281
+ __kmpc_atomic_fixed8_wr 2282
+ __kmpc_atomic_float4_wr 2283
+ __kmpc_atomic_float8_wr 2284
+ __kmpc_atomic_float10_wr 2285
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_wr 2286
+ %endif
+ __kmpc_atomic_cmplx4_wr 2287
+ __kmpc_atomic_cmplx8_wr 2288
+ __kmpc_atomic_cmplx10_wr 2289
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_wr 2290
+ %ifdef arch_32
+ __kmpc_atomic_float16_a16_wr 2291
+ __kmpc_atomic_cmplx16_a16_wr 2292
+ %endif
+ %endif
+ __kmpc_atomic_fixed1_add_cpt 2293
+ __kmpc_atomic_fixed1_andb_cpt 2294
+ __kmpc_atomic_fixed1_div_cpt 2295
+ __kmpc_atomic_fixed1u_div_cpt 2296
+ __kmpc_atomic_fixed1_mul_cpt 2297
+ __kmpc_atomic_fixed1_orb_cpt 2298
+ __kmpc_atomic_fixed1_shl_cpt 2299
+ __kmpc_atomic_fixed1_shr_cpt 2300
+ __kmpc_atomic_fixed1u_shr_cpt 2301
+ __kmpc_atomic_fixed1_sub_cpt 2302
+ __kmpc_atomic_fixed1_xor_cpt 2303
+ __kmpc_atomic_fixed2_add_cpt 2304
+ __kmpc_atomic_fixed2_andb_cpt 2305
+ __kmpc_atomic_fixed2_div_cpt 2306
+ __kmpc_atomic_fixed2u_div_cpt 2307
+ __kmpc_atomic_fixed2_mul_cpt 2308
+ __kmpc_atomic_fixed2_orb_cpt 2309
+ __kmpc_atomic_fixed2_shl_cpt 2310
+ __kmpc_atomic_fixed2_shr_cpt 2311
+ __kmpc_atomic_fixed2u_shr_cpt 2312
+ __kmpc_atomic_fixed2_sub_cpt 2313
+ __kmpc_atomic_fixed2_xor_cpt 2314
+ __kmpc_atomic_fixed4_add_cpt 2315
+ __kmpc_atomic_fixed4_sub_cpt 2316
+ __kmpc_atomic_float4_add_cpt 2317
+ __kmpc_atomic_float4_sub_cpt 2318
+ __kmpc_atomic_fixed8_add_cpt 2319
+ __kmpc_atomic_fixed8_sub_cpt 2320
+ __kmpc_atomic_float8_add_cpt 2321
+ __kmpc_atomic_float8_sub_cpt 2322
+ __kmpc_atomic_fixed4_andb_cpt 2323
+ __kmpc_atomic_fixed4_div_cpt 2324
+ __kmpc_atomic_fixed4u_div_cpt 2325
+ __kmpc_atomic_fixed4_mul_cpt 2326
+ __kmpc_atomic_fixed4_orb_cpt 2327
+ __kmpc_atomic_fixed4_shl_cpt 2328
+ __kmpc_atomic_fixed4_shr_cpt 2329
+ __kmpc_atomic_fixed4u_shr_cpt 2330
+ __kmpc_atomic_fixed4_xor_cpt 2331
+ __kmpc_atomic_fixed8_andb_cpt 2332
+ __kmpc_atomic_fixed8_div_cpt 2333
+ __kmpc_atomic_fixed8u_div_cpt 2334
+ __kmpc_atomic_fixed8_mul_cpt 2335
+ __kmpc_atomic_fixed8_orb_cpt 2336
+ __kmpc_atomic_fixed8_shl_cpt 2337
+ __kmpc_atomic_fixed8_shr_cpt 2338
+ __kmpc_atomic_fixed8u_shr_cpt 2339
+ __kmpc_atomic_fixed8_xor_cpt 2340
+ __kmpc_atomic_float4_div_cpt 2341
+ __kmpc_atomic_float4_mul_cpt 2342
+ __kmpc_atomic_float8_div_cpt 2343
+ __kmpc_atomic_float8_mul_cpt 2344
+ __kmpc_atomic_fixed1_andl_cpt 2345
+ __kmpc_atomic_fixed1_orl_cpt 2346
+ __kmpc_atomic_fixed2_andl_cpt 2347
+ __kmpc_atomic_fixed2_orl_cpt 2348
+ __kmpc_atomic_fixed4_andl_cpt 2349
+ __kmpc_atomic_fixed4_orl_cpt 2350
+ __kmpc_atomic_fixed8_andl_cpt 2351
+ __kmpc_atomic_fixed8_orl_cpt 2352
+ __kmpc_atomic_fixed1_max_cpt 2353
+ __kmpc_atomic_fixed1_min_cpt 2354
+ __kmpc_atomic_fixed2_max_cpt 2355
+ __kmpc_atomic_fixed2_min_cpt 2356
+ __kmpc_atomic_fixed4_max_cpt 2357
+ __kmpc_atomic_fixed4_min_cpt 2358
+ __kmpc_atomic_fixed8_max_cpt 2359
+ __kmpc_atomic_fixed8_min_cpt 2360
+ __kmpc_atomic_float4_max_cpt 2361
+ __kmpc_atomic_float4_min_cpt 2362
+ __kmpc_atomic_float8_max_cpt 2363
+ __kmpc_atomic_float8_min_cpt 2364
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_max_cpt 2365
+ __kmpc_atomic_float16_min_cpt 2366
+ %endif
+ __kmpc_atomic_fixed1_neqv_cpt 2367
+ __kmpc_atomic_fixed2_neqv_cpt 2368
+ __kmpc_atomic_fixed4_neqv_cpt 2369
+ __kmpc_atomic_fixed8_neqv_cpt 2370
+ __kmpc_atomic_fixed1_eqv_cpt 2371
+ __kmpc_atomic_fixed2_eqv_cpt 2372
+ __kmpc_atomic_fixed4_eqv_cpt 2373
+ __kmpc_atomic_fixed8_eqv_cpt 2374
+ __kmpc_atomic_float10_add_cpt 2375
+ __kmpc_atomic_float10_sub_cpt 2376
+ __kmpc_atomic_float10_mul_cpt 2377
+ __kmpc_atomic_float10_div_cpt 2378
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_add_cpt 2379
+ __kmpc_atomic_float16_sub_cpt 2380
+ __kmpc_atomic_float16_mul_cpt 2381
+ __kmpc_atomic_float16_div_cpt 2382
+ %endif
+ __kmpc_atomic_cmplx4_add_cpt 2383
+ __kmpc_atomic_cmplx4_sub_cpt 2384
+ __kmpc_atomic_cmplx4_mul_cpt 2385
+ __kmpc_atomic_cmplx4_div_cpt 2386
+ __kmpc_atomic_cmplx8_add_cpt 2387
+ __kmpc_atomic_cmplx8_sub_cpt 2388
+ __kmpc_atomic_cmplx8_mul_cpt 2389
+ __kmpc_atomic_cmplx8_div_cpt 2390
+ __kmpc_atomic_cmplx10_add_cpt 2391
+ __kmpc_atomic_cmplx10_sub_cpt 2392
+ __kmpc_atomic_cmplx10_mul_cpt 2393
+ __kmpc_atomic_cmplx10_div_cpt 2394
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_add_cpt 2395
+ __kmpc_atomic_cmplx16_sub_cpt 2396
+ __kmpc_atomic_cmplx16_mul_cpt 2397
+ __kmpc_atomic_cmplx16_div_cpt 2398
+ %endif
+ #__kmpc_atomic_cmplx4_add_cpt_tmp 2409
+
+ %ifdef arch_32
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_add_a16_cpt 2399
+ __kmpc_atomic_float16_sub_a16_cpt 2400
+ __kmpc_atomic_float16_mul_a16_cpt 2401
+ __kmpc_atomic_float16_div_a16_cpt 2402
+ __kmpc_atomic_float16_max_a16_cpt 2403
+ __kmpc_atomic_float16_min_a16_cpt 2404
+ __kmpc_atomic_cmplx16_add_a16_cpt 2405
+ __kmpc_atomic_cmplx16_sub_a16_cpt 2406
+ __kmpc_atomic_cmplx16_mul_a16_cpt 2407
+ __kmpc_atomic_cmplx16_div_a16_cpt 2408
+ %endif
+ %endif
+
+ __kmpc_atomic_start 2410
+ __kmpc_atomic_end 2411
+
+ %ifdef OMP_40
+
+ # ATOMIC extensions for OpenMP 4.0 spec (x86 and x64 only)
+
+ __kmpc_atomic_fixed1_swp 2412
+ __kmpc_atomic_fixed2_swp 2413
+ __kmpc_atomic_fixed4_swp 2414
+ __kmpc_atomic_fixed8_swp 2415
+ __kmpc_atomic_float4_swp 2416
+ __kmpc_atomic_float8_swp 2417
+ __kmpc_atomic_float10_swp 2418
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_swp 2419
+ %endif
+ __kmpc_atomic_cmplx4_swp 2420
+ __kmpc_atomic_cmplx8_swp 2421
+ __kmpc_atomic_cmplx10_swp 2422
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_swp 2423
+
+ %ifdef arch_32
+ __kmpc_atomic_float16_a16_swp 2424
+ __kmpc_atomic_cmplx16_a16_swp 2425
+ %endif
+ %endif
+
+ __kmpc_atomic_fixed1_sub_cpt_rev 2426
+ __kmpc_atomic_fixed1_div_cpt_rev 2427
+ __kmpc_atomic_fixed1u_div_cpt_rev 2428
+ __kmpc_atomic_fixed1_shl_cpt_rev 2429
+ __kmpc_atomic_fixed1_shr_cpt_rev 2430
+ __kmpc_atomic_fixed1u_shr_cpt_rev 2431
+ __kmpc_atomic_fixed2_sub_cpt_rev 2432
+ __kmpc_atomic_fixed2_div_cpt_rev 2433
+ __kmpc_atomic_fixed2u_div_cpt_rev 2434
+ __kmpc_atomic_fixed2_shl_cpt_rev 2435
+ __kmpc_atomic_fixed2_shr_cpt_rev 2436
+ __kmpc_atomic_fixed2u_shr_cpt_rev 2437
+ __kmpc_atomic_fixed4_sub_cpt_rev 2438
+ __kmpc_atomic_fixed4_div_cpt_rev 2439
+ __kmpc_atomic_fixed4u_div_cpt_rev 2440
+ __kmpc_atomic_fixed4_shl_cpt_rev 2441
+ __kmpc_atomic_fixed4_shr_cpt_rev 2442
+ __kmpc_atomic_fixed4u_shr_cpt_rev 2443
+ __kmpc_atomic_fixed8_sub_cpt_rev 2444
+ __kmpc_atomic_fixed8_div_cpt_rev 2445
+ __kmpc_atomic_fixed8u_div_cpt_rev 2446
+ __kmpc_atomic_fixed8_shl_cpt_rev 2447
+ __kmpc_atomic_fixed8_shr_cpt_rev 2448
+ __kmpc_atomic_fixed8u_shr_cpt_rev 2449
+ __kmpc_atomic_float4_sub_cpt_rev 2450
+ __kmpc_atomic_float4_div_cpt_rev 2451
+ __kmpc_atomic_float8_sub_cpt_rev 2452
+ __kmpc_atomic_float8_div_cpt_rev 2453
+ __kmpc_atomic_float10_sub_cpt_rev 2454
+ __kmpc_atomic_float10_div_cpt_rev 2455
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_float16_sub_cpt_rev 2456
+ __kmpc_atomic_float16_div_cpt_rev 2457
+ %endif
+ __kmpc_atomic_cmplx4_sub_cpt_rev 2458
+ __kmpc_atomic_cmplx4_div_cpt_rev 2459
+ __kmpc_atomic_cmplx8_sub_cpt_rev 2460
+ __kmpc_atomic_cmplx8_div_cpt_rev 2461
+ __kmpc_atomic_cmplx10_sub_cpt_rev 2462
+ __kmpc_atomic_cmplx10_div_cpt_rev 2463
+ %ifdef HAVE_QUAD
+ __kmpc_atomic_cmplx16_sub_cpt_rev 2464
+ __kmpc_atomic_cmplx16_div_cpt_rev 2465
+
+ %ifdef arch_32
+ __kmpc_atomic_float16_sub_a16_cpt_rev 2466
+ __kmpc_atomic_float16_div_a16_cpt_rev 2467
+ __kmpc_atomic_cmplx16_sub_a16_cpt_rev 2468
+ __kmpc_atomic_cmplx16_div_a16_cpt_rev 2469
+ %endif
+ %endif
+
+ %endif # OMP_40
+
+
+ %endif # arch_64
+
+%endif
+
+# end of file #
diff --git a/final/runtime/src/exports_so.txt b/final/runtime/src/exports_so.txt
new file mode 100644
index 0000000..3c10d73
--- /dev/null
+++ b/final/runtime/src/exports_so.txt
@@ -0,0 +1,129 @@
+# exports_so.txt #
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# This is version script for OMP RTL shared library (libomp*.so)
+
+VERSION {
+
+ global: # Exported symbols.
+
+ #
+ # "Normal" symbols.
+ #
+ omp_*; # Standard OpenMP functions.
+
+ #
+ # OMPT API
+ #
+ ompt_tool; # OMPT initialization interface
+ ompt_control; # OMPT control interface
+
+ #
+ # OMPT state placeholders
+ #
+ ompt_idle;
+ ompt_overhead;
+ ompt_barrier_wait;
+ ompt_task_wait;
+ ompt_mutex_wait;
+
+ ompc_*; # omp.h renames some standard functions to ompc_*.
+ kmp_*; # Intel extensions.
+ kmpc_*; # Intel extensions.
+ __kmpc_*; # Functions called by compiler-generated code.
+ GOMP_*; # GNU C compatibility functions.
+
+ _You_must_link_with_*; # Mutual detection/MS compatibility symbols.
+
+
+ #
+ # Debugger support.
+ #
+#if USE_DEBUGGER
+ __kmp_debugging;
+ __kmp_omp_debug_struct_info;
+#endif /* USE_DEBUGGER */
+
+ #
+ # Internal functions exported for testing purposes.
+ #
+ __kmp_get_reduce_method;
+ ___kmp_allocate;
+ ___kmp_free;
+ __kmp_thread_pool;
+ __kmp_thread_pool_nth;
+
+ __kmp_reset_stats;
+
+#if USE_ITT_BUILD
+ #
+ # ITT support.
+ #
+ # The following entry points are added so that the backtraces from
+ # the tools contain meaningful names for all the functions that might
+ # appear in a backtrace of a thread which is blocked in the RTL.
+ __kmp_acquire_drdpa_lock;
+ __kmp_acquire_nested_drdpa_lock;
+ __kmp_acquire_nested_queuing_lock;
+ __kmp_acquire_nested_tas_lock;
+ __kmp_acquire_nested_ticket_lock;
+ __kmp_acquire_queuing_lock;
+ __kmp_acquire_tas_lock;
+ __kmp_acquire_ticket_lock;
+ __kmp_fork_call;
+ __kmp_get_reduce_method;
+ __kmp_invoke_microtask;
+ __kmp_itt_fini_ittlib;
+ __kmp_itt_init_ittlib;
+ __kmp_launch_monitor;
+ __kmp_launch_worker;
+ __kmp_reap_monitor;
+ __kmp_reap_worker;
+ __kmp_release_64;
+ __kmp_wait_64;
+ __kmp_wait_yield_4;
+
+ # ittnotify symbols to be used by debugger
+ __kmp_itt_fini_ittlib;
+ __kmp_itt_init_ittlib;
+#endif /* USE_ITT_BUILD */
+
+ local: # Non-exported symbols.
+
+ *; # All other symbols are not exported.
+
+}; # VERSION
+
+# sets up GCC OMP_ version dependency chain
+OMP_1.0 {
+};
+OMP_2.0 {
+} OMP_1.0;
+OMP_3.0 {
+} OMP_2.0;
+OMP_3.1 {
+} OMP_3.0;
+OMP_4.0 {
+} OMP_3.1;
+
+# sets up GCC GOMP_ version dependency chain
+GOMP_1.0 {
+};
+GOMP_2.0 {
+} GOMP_1.0;
+GOMP_3.0 {
+} GOMP_2.0;
+GOMP_4.0 {
+} GOMP_3.0;
+
+# end of file #
diff --git a/final/runtime/src/extractExternal.cpp b/final/runtime/src/extractExternal.cpp
new file mode 100644
index 0000000..7a6fdb7
--- /dev/null
+++ b/final/runtime/src/extractExternal.cpp
@@ -0,0 +1,497 @@
+/*
+ * extractExternal.cpp
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stdlib.h>
+#include <iostream>
+#include <strstream>
+#include <fstream>
+#include <string>
+#include <set>
+#include <map>
+
+/* Given a set of n object files h ('external' object files) and a set of m
+ object files o ('internal' object files),
+ 1. Determines r, the subset of h that o depends on, directly or indirectly
+ 2. Removes the files in h - r from the file system
+ 3. For each external symbol defined in some file in r, rename it in r U o
+ by prefixing it with "__kmp_external_"
+ Usage:
+ hide.exe <n> <filenames for h> <filenames for o>
+
+ Thus, the prefixed symbols become hidden in the sense that they now have a special
+ prefix.
+*/
+
+using namespace std;
+
+void stop(char* errorMsg) {
+ printf("%s\n", errorMsg);
+ exit(1);
+}
+
+// an entry in the symbol table of a .OBJ file
+class Symbol {
+public:
+ __int64 name;
+ unsigned value;
+ unsigned short sectionNum, type;
+ char storageClass, nAux;
+};
+
+class _rstream : public istrstream {
+private:
+ const char *buf;
+protected:
+ _rstream(pair<const char*, streamsize> p):istrstream(p.first,p.second),buf(p.first){}
+ ~_rstream() {
+ delete[]buf;
+ }
+};
+
+/* A stream encapuslating the content of a file or the content of a string, overriding the
+ >> operator to read various integer types in binary form, as well as a symbol table
+ entry.
+*/
+class rstream : public _rstream {
+private:
+ template<class T>
+ inline rstream& doRead(T &x) {
+ read((char*)&x, sizeof(T));
+ return *this;
+ }
+ static pair<const char*, streamsize> getBuf(const char *fileName) {
+ ifstream raw(fileName,ios::binary | ios::in);
+ if(!raw.is_open())
+ stop("rstream.getBuf: Error opening file");
+ raw.seekg(0,ios::end);
+ streampos fileSize = raw.tellg();
+ if(fileSize < 0)
+ stop("rstream.getBuf: Error reading file");
+ char *buf = new char[fileSize];
+ raw.seekg(0,ios::beg);
+ raw.read(buf, fileSize);
+ return pair<const char*, streamsize>(buf,fileSize);
+ }
+public:
+ // construct from a string
+ rstream(const char *buf,streamsize size):_rstream(pair<const char*,streamsize>(buf, size)){}
+ /* construct from a file whole content is fully read once to initialize the content of
+ this stream
+ */
+ rstream(const char *fileName):_rstream(getBuf(fileName)){}
+ rstream& operator>>(int &x) {
+ return doRead(x);
+ }
+ rstream& operator>>(unsigned &x) {
+ return doRead(x);
+ }
+ rstream& operator>>(short &x) {
+ return doRead(x);
+ }
+ rstream& operator>>(unsigned short &x) {
+ return doRead(x);
+ }
+ rstream& operator>>(Symbol &e) {
+ read((char*)&e, 18);
+ return *this;
+ }
+};
+
+// string table in a .OBJ file
+class StringTable {
+private:
+ map<string, unsigned> directory;
+ size_t length;
+ char *data;
+
+ // make <directory> from <length> bytes in <data>
+ void makeDirectory(void) {
+ unsigned i = 4;
+ while(i < length) {
+ string s = string(data + i);
+ directory.insert(make_pair(s, i));
+ i += s.size() + 1;
+ }
+ }
+ // initialize <length> and <data> with contents specified by the arguments
+ void init(const char *_data) {
+ unsigned _length = *(unsigned*)_data;
+
+ if(_length < sizeof(unsigned) || _length != *(unsigned*)_data)
+ stop("StringTable.init: Invalid symbol table");
+ if(_data[_length - 1]) {
+ // to prevent runaway strings, make sure the data ends with a zero
+ data = new char[length = _length + 1];
+ data[_length] = 0;
+ } else {
+ data = new char[length = _length];
+ }
+ *(unsigned*)data = length;
+ KMP_MEMCPY(data + sizeof(unsigned), _data + sizeof(unsigned),
+ length - sizeof(unsigned));
+ makeDirectory();
+ }
+public:
+ StringTable(rstream &f) {
+ /* Construct string table by reading from f.
+ */
+ streampos s;
+ unsigned strSize;
+ char *strData;
+
+ s = f.tellg();
+ f>>strSize;
+ if(strSize < sizeof(unsigned))
+ stop("StringTable: Invalid string table");
+ strData = new char[strSize];
+ *(unsigned*)strData = strSize;
+ // read the raw data into <strData>
+ f.read(strData + sizeof(unsigned), strSize - sizeof(unsigned));
+ s = f.tellg() - s;
+ if(s < strSize)
+ stop("StringTable: Unexpected EOF");
+ init(strData);
+ delete[]strData;
+ }
+ StringTable(const set<string> &strings) {
+ /* Construct string table from given strings.
+ */
+ char *p;
+ set<string>::const_iterator it;
+ size_t s;
+
+ // count required size for data
+ for(length = sizeof(unsigned), it = strings.begin(); it != strings.end(); ++it) {
+ size_t l = (*it).size();
+
+ if(l > (unsigned) 0xFFFFFFFF)
+ stop("StringTable: String too long");
+ if(l > 8) {
+ length += l + 1;
+ if(length > (unsigned) 0xFFFFFFFF)
+ stop("StringTable: Symbol table too long");
+ }
+ }
+ data = new char[length];
+ *(unsigned*)data = length;
+ // populate data and directory
+ for(p = data + sizeof(unsigned), it = strings.begin(); it != strings.end(); ++it) {
+ const string &str = *it;
+ size_t l = str.size();
+ if(l > 8) {
+ directory.insert(make_pair(str, p - data));
+ KMP_MEMCPY(p, str.c_str(), l);
+ p[l] = 0;
+ p += l + 1;
+ }
+ }
+ }
+ ~StringTable() {
+ delete[] data;
+ }
+ /* Returns encoding for given string based on this string table.
+ Error if string length is greater than 8 but string is not in
+ the string table--returns 0.
+ */
+ __int64 encode(const string &str) {
+ __int64 r;
+
+ if(str.size() <= 8) {
+ // encoded directly
+ ((char*)&r)[7] = 0;
+ KMP_STRNCPY_S((char*)&r, sizeof(r), str.c_str(), 8);
+ return r;
+ } else {
+ // represented as index into table
+ map<string,unsigned>::const_iterator it = directory.find(str);
+ if(it == directory.end())
+ stop("StringTable::encode: String now found in string table");
+ ((unsigned*)&r)[0] = 0;
+ ((unsigned*)&r)[1] = (*it).second;
+ return r;
+ }
+ }
+ /* Returns string represented by x based on this string table.
+ Error if x references an invalid position in the table--returns
+ the empty string.
+ */
+ string decode(__int64 x) const {
+ if(*(unsigned*)&x == 0) {
+ // represented as index into table
+ unsigned &p = ((unsigned*)&x)[1];
+ if(p >= length)
+ stop("StringTable::decode: Invalid string table lookup");
+ return string(data + p);
+ } else {
+ // encoded directly
+ char *p = (char*)&x;
+ int i;
+
+ for(i = 0; i < 8 && p[i]; ++i);
+ return string(p, i);
+ }
+ }
+ void write(ostream &os) {
+ os.write(data, length);
+ }
+};
+
+/* for the named object file, determines the set of defined symbols and the set of undefined external symbols
+ and writes them to <defined> and <undefined> respectively
+*/
+void computeExternalSymbols(const char *fileName, set<string> *defined, set<string> *undefined){
+ streampos fileSize;
+ size_t strTabStart;
+ unsigned symTabStart, symNEntries;
+ rstream f(fileName);
+
+ f.seekg(0,ios::end);
+ fileSize = f.tellg();
+
+ f.seekg(8);
+ f >> symTabStart >> symNEntries;
+ // seek to the string table
+ f.seekg(strTabStart = symTabStart + 18 * (size_t)symNEntries);
+ if(f.eof()) {
+ printf("computeExternalSymbols: fileName='%s', fileSize = %lu, symTabStart = %u, symNEntries = %u\n",
+ fileName, (unsigned long) fileSize, symTabStart, symNEntries);
+ stop("computeExternalSymbols: Unexpected EOF 1");
+ }
+ StringTable stringTable(f); // read the string table
+ if(f.tellg() != fileSize)
+ stop("computeExternalSymbols: Unexpected data after string table");
+
+ f.clear();
+ f.seekg(symTabStart); // seek to the symbol table
+
+ defined->clear(); undefined->clear();
+ for(int i = 0; i < symNEntries; ++i) {
+ // process each entry
+ Symbol e;
+
+ if(f.eof())
+ stop("computeExternalSymbols: Unexpected EOF 2");
+ f>>e;
+ if(f.fail())
+ stop("computeExternalSymbols: File read error");
+ if(e.nAux) { // auxiliary entry: skip
+ f.seekg(e.nAux * 18, ios::cur);
+ i += e.nAux;
+ }
+ // if symbol is extern and defined in the current file, insert it
+ if(e.storageClass == 2)
+ if(e.sectionNum)
+ defined->insert(stringTable.decode(e.name));
+ else
+ undefined->insert(stringTable.decode(e.name));
+ }
+}
+
+/* For each occurrence of an external symbol in the object file named by
+ by <fileName> that is a member of <hide>, renames it by prefixing
+ with "__kmp_external_", writing back the file in-place
+*/
+void hideSymbols(char *fileName, const set<string> &hide) {
+ static const string prefix("__kmp_external_");
+ set<string> strings; // set of all occurring symbols, appropriately prefixed
+ streampos fileSize;
+ size_t strTabStart;
+ unsigned symTabStart, symNEntries;
+ int i;
+ rstream in(fileName);
+
+ in.seekg(0,ios::end);
+ fileSize = in.tellg();
+
+ in.seekg(8);
+ in >> symTabStart >> symNEntries;
+ in.seekg(strTabStart = symTabStart + 18 * (size_t)symNEntries);
+ if(in.eof())
+ stop("hideSymbols: Unexpected EOF");
+ StringTable stringTableOld(in); // read original string table
+
+ if(in.tellg() != fileSize)
+ stop("hideSymbols: Unexpected data after string table");
+
+ // compute set of occurring strings with prefix added
+ for(i = 0; i < symNEntries; ++i) {
+ Symbol e;
+
+ in.seekg(symTabStart + i * 18);
+ if(in.eof())
+ stop("hideSymbols: Unexpected EOF");
+ in >> e;
+ if(in.fail())
+ stop("hideSymbols: File read error");
+ if(e.nAux)
+ i += e.nAux;
+ const string &s = stringTableOld.decode(e.name);
+ // if symbol is extern and found in <hide>, prefix and insert into strings,
+ // otherwise, just insert into strings without prefix
+ strings.insert( (e.storageClass == 2 && hide.find(s) != hide.end()) ?
+ prefix + s : s);
+ }
+
+ ofstream out(fileName, ios::trunc | ios::out | ios::binary);
+ if(!out.is_open())
+ stop("hideSymbols: Error opening output file");
+
+ // make new string table from string set
+ StringTable stringTableNew = StringTable(strings);
+
+ // copy input file to output file up to just before the symbol table
+ in.seekg(0);
+ char *buf = new char[symTabStart];
+ in.read(buf, symTabStart);
+ out.write(buf, symTabStart);
+ delete []buf;
+
+ // copy input symbol table to output symbol table with name translation
+ for(i = 0; i < symNEntries; ++i) {
+ Symbol e;
+
+ in.seekg(symTabStart + i*18);
+ if(in.eof())
+ stop("hideSymbols: Unexpected EOF");
+ in >> e;
+ if(in.fail())
+ stop("hideSymbols: File read error");
+ const string &s = stringTableOld.decode(e.name);
+ out.seekp(symTabStart + i*18);
+ e.name = stringTableNew.encode( (e.storageClass == 2 && hide.find(s) != hide.end()) ?
+ prefix + s : s);
+ out.write((char*)&e, 18);
+ if(out.fail())
+ stop("hideSymbols: File write error");
+ if(e.nAux) {
+ // copy auxiliary symbol table entries
+ int nAux = e.nAux;
+ for(int j = 1; j <= nAux; ++j) {
+ in >> e;
+ out.seekp(symTabStart + (i + j) * 18);
+ out.write((char*)&e, 18);
+ }
+ i += nAux;
+ }
+ }
+ // output string table
+ stringTableNew.write(out);
+}
+
+// returns true iff <a> and <b> have no common element
+template <class T>
+bool isDisjoint(const set<T> &a, const set<T> &b) {
+ set<T>::const_iterator ita, itb;
+
+ for(ita = a.begin(), itb = b.begin(); ita != a.end() && itb != b.end();) {
+ const T &ta = *ita, &tb = *itb;
+ if(ta < tb)
+ ++ita;
+ else if (tb < ta)
+ ++itb;
+ else
+ return false;
+ }
+ return true;
+}
+
+/* precondition: <defined> and <undefined> are arrays with <nTotal> elements where
+ <nTotal> >= <nExternal>. The first <nExternal> elements correspond to the external object
+ files and the rest correspond to the internal object files.
+ postcondition: file x is said to depend on file y if undefined[x] and defined[y] are not
+ disjoint. Returns the transitive closure of the set of internal object files, as a set of
+ file indexes, under the 'depends on' relation, minus the set of internal object files.
+*/
+set<int> *findRequiredExternal(int nExternal, int nTotal, set<string> *defined, set<string> *undefined) {
+ set<int> *required = new set<int>;
+ set<int> fresh[2];
+ int i, cur = 0;
+ bool changed;
+
+ for(i = nTotal - 1; i >= nExternal; --i)
+ fresh[cur].insert(i);
+ do {
+ changed = false;
+ for(set<int>::iterator it = fresh[cur].begin(); it != fresh[cur].end(); ++it) {
+ set<string> &s = undefined[*it];
+
+ for(i = 0; i < nExternal; ++i) {
+ if(required->find(i) == required->end()) {
+ if(!isDisjoint(defined[i], s)) {
+ // found a new qualifying element
+ required->insert(i);
+ fresh[1 - cur].insert(i);
+ changed = true;
+ }
+ }
+ }
+ }
+ fresh[cur].clear();
+ cur = 1 - cur;
+ } while(changed);
+ return required;
+}
+
+int main(int argc, char **argv) {
+ int nExternal, nInternal, i;
+ set<string> *defined, *undefined;
+ set<int>::iterator it;
+
+ if(argc < 3)
+ stop("Please specify a positive integer followed by a list of object filenames");
+ nExternal = atoi(argv[1]);
+ if(nExternal <= 0)
+ stop("Please specify a positive integer followed by a list of object filenames");
+ if(nExternal + 2 > argc)
+ stop("Too few external objects");
+ nInternal = argc - nExternal - 2;
+ defined = new set<string>[argc - 2];
+ undefined = new set<string>[argc - 2];
+
+ // determine the set of defined and undefined external symbols
+ for(i = 2; i < argc; ++i)
+ computeExternalSymbols(argv[i], defined + i - 2, undefined + i - 2);
+
+ // determine the set of required external files
+ set<int> *requiredExternal = findRequiredExternal(nExternal, argc - 2, defined, undefined);
+ set<string> hide;
+
+ /* determine the set of symbols to hide--namely defined external symbols of the
+ required external files
+ */
+ for(it = requiredExternal->begin(); it != requiredExternal->end(); ++it) {
+ int idx = *it;
+ set<string>::iterator it2;
+ /* We have to insert one element at a time instead of inserting a range because
+ the insert member function taking a range doesn't exist on Windows* OS, at least
+ at the time of this writing.
+ */
+ for(it2 = defined[idx].begin(); it2 != defined[idx].end(); ++it2)
+ hide.insert(*it2);
+ }
+
+ /* process the external files--removing those that are not required and hiding
+ the appropriate symbols in the others
+ */
+ for(i = 0; i < nExternal; ++i)
+ if(requiredExternal->find(i) != requiredExternal->end())
+ hideSymbols(argv[2 + i], hide);
+ else
+ remove(argv[2 + i]);
+ // hide the appropriate symbols in the internal files
+ for(i = nExternal + 2; i < argc; ++i)
+ hideSymbols(argv[i], hide);
+ return 0;
+}
diff --git a/final/runtime/src/i18n/en_US.txt b/final/runtime/src/i18n/en_US.txt
new file mode 100644
index 0000000..ffa2a6b
--- /dev/null
+++ b/final/runtime/src/i18n/en_US.txt
@@ -0,0 +1,477 @@
+# en_US.txt #
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Default messages, embedded into the OpenMP RTL, and source for English catalog.
+
+
+# Compatible changes (which does not require version bumping):
+# * Editing message (number and type of placeholders must remain, relative order of
+# placeholders may be changed, e.g. "File %1$s line %2$d" may be safely edited to
+# "Line %2$d file %1$s").
+# * Adding new message to the end of section.
+# Incompatible changes (version must be bumbed by 1):
+# * Introducing new placeholders to existing messages.
+# * Changing type of placeholders (e.g. "line %1$d" -> "line %1$s").
+# * Rearranging order of messages.
+# * Deleting messages.
+# Use special "OBSOLETE" pseudoidentifier for obsolete entries, which is kept only for backward
+# compatibility. When version is bumped, do not forget to delete all obsolete entries.
+
+
+# --------------------------------------------------------------------------------------------------
+-*- META -*-
+# --------------------------------------------------------------------------------------------------
+
+# Meta information about message catalog.
+
+Language "English"
+Country "USA"
+LangId "1033"
+Version "2"
+Revision "20160405"
+
+
+
+# --------------------------------------------------------------------------------------------------
+-*- STRINGS -*-
+# --------------------------------------------------------------------------------------------------
+
+# Strings are not complete messages, just fragments. We need to work on it and reduce number of
+# strings (to zero?).
+
+Error "Error"
+UnknownFile "(unknown file)"
+NotANumber "not a number"
+BadUnit "bad unit"
+IllegalCharacters "illegal characters"
+ValueTooLarge "value too large"
+ValueTooSmall "value too small"
+NotMultiple4K "value is not a multiple of 4k"
+UnknownTopology "Unknown processor topology"
+CantOpenCpuinfo "Cannot open /proc/cpuinfo"
+ProcCpuinfo "/proc/cpuinfo"
+NoProcRecords "cpuinfo file invalid (No processor records)"
+TooManyProcRecords "cpuinfo file invalid (Too many processor records)"
+CantRewindCpuinfo "Cannot rewind cpuinfo file"
+LongLineCpuinfo "cpuinfo file invalid (long line)"
+TooManyEntries "cpuinfo file contains too many entries"
+MissingProcField "cpuinfo file missing processor field"
+MissingPhysicalIDField "cpuinfo file missing physical id field"
+MissingValCpuinfo "cpuinfo file invalid (missing val)"
+DuplicateFieldCpuinfo "cpuinfo file invalid (duplicate field)"
+PhysicalIDsNotUnique "Physical node/pkg/core/thread ids not unique"
+ApicNotPresent "APIC not present"
+InvalidCpuidInfo "Invalid cpuid info"
+OBSOLETE "APIC ids not unique"
+InconsistentCpuidInfo "Inconsistent cpuid info"
+OutOfHeapMemory "Out of heap memory"
+MemoryAllocFailed "Memory allocation failed"
+Core "core"
+Thread "thread"
+Package "package"
+Node "node"
+OBSOLETE "<undef>"
+DecodingLegacyAPIC "decoding legacy APIC ids"
+OBSOLETE "parsing /proc/cpuinfo"
+NotDefined "value is not defined"
+EffectiveSettings "Effective settings:"
+UserSettings "User settings:"
+StorageMapWarning "warning: pointers or size don't make sense"
+OBSOLETE "CPU"
+OBSOLETE "TPU"
+OBSOLETE "TPUs per package"
+OBSOLETE "HT enabled"
+OBSOLETE "HT disabled"
+Decodingx2APIC "decoding x2APIC ids"
+NoLeaf11Support "cpuid leaf 11 not supported"
+NoLeaf4Support "cpuid leaf 4 not supported"
+ThreadIDsNotUnique "thread ids not unique"
+UsingPthread "using pthread info"
+LegacyApicIDsNotUnique "legacy APIC ids not unique"
+x2ApicIDsNotUnique "x2APIC ids not unique"
+DisplayEnvBegin "OPENMP DISPLAY ENVIRONMENT BEGIN"
+DisplayEnvEnd "OPENMP DISPLAY ENVIRONMENT END"
+Device "[device]"
+Host "[host]"
+
+
+
+# --------------------------------------------------------------------------------------------------
+-*- FORMATS -*-
+# --------------------------------------------------------------------------------------------------
+
+Info "OMP: Info #%1$d: %2$s\n"
+Warning "OMP: Warning #%1$d: %2$s\n"
+Fatal "OMP: Error #%1$d: %2$s\n"
+SysErr "OMP: System error #%1$d: %2$s\n"
+Hint "OMP: Hint: %2$s\n"
+
+Pragma "%1$s pragma (at %2$s:%3$s():%4$s)"
+ # %1 is pragma name (like "parallel" or "master",
+ # %2 is file name,
+ # %3 is function (routine) name,
+ # %4 is the line number (as string, so "s" type specifier should be used).
+
+
+
+# --------------------------------------------------------------------------------------------------
+-*- MESSAGES -*-
+# --------------------------------------------------------------------------------------------------
+
+# Messages of any severity: informational, warning, or fatal.
+# To maintain message numbers (they are visible to customers), add new messages to the end.
+
+# Use following prefixes for messages and hints when appropriate:
+# Aff -- Affinity messages.
+# Cns -- Consistency check failures (KMP_CONSISTENCY_CHECK).
+# Itt -- ITT Notify-related messages.
+
+LibraryIsSerial "Library is \"serial\"."
+CantOpenMessageCatalog "Cannot open message catalog \"%1$s\":"
+WillUseDefaultMessages "Default messages will be used."
+LockIsUninitialized "%1$s: Lock is uninitialized"
+LockSimpleUsedAsNestable "%1$s: Lock was initialized as simple, but used as nestable"
+LockNestableUsedAsSimple "%1$s: Lock was initialized as nestable, but used as simple"
+LockIsAlreadyOwned "%1$s: Lock is already owned by requesting thread"
+LockStillOwned "%1$s: Lock is still owned by a thread"
+LockUnsettingFree "%1$s: Attempt to release a lock not owned by any thread"
+LockUnsettingSetByAnother "%1$s: Attempt to release a lock owned by another thread"
+StackOverflow "Stack overflow detected for OpenMP thread #%1$d"
+StackOverlap "Stack overlap detected. "
+AssertionFailure "Assertion failure at %1$s(%2$d)."
+CantRegisterNewThread "Unable to register a new user thread."
+DuplicateLibrary "Initializing %1$s, but found %2$s already initialized."
+CantOpenFileForReading "Cannot open file \"%1$s\" for reading:"
+CantGetEnvVar "Getting environment variable \"%1$s\" failed:"
+CantSetEnvVar "Setting environment variable \"%1$s\" failed:"
+CantGetEnvironment "Getting environment failed:"
+BadBoolValue "%1$s=\"%2$s\": Wrong value, boolean expected."
+SSPNotBuiltIn "No Helper Thread support built in this OMP library."
+SPPSotfTerminateFailed "Helper thread failed to soft terminate."
+BufferOverflow "Buffer overflow detected."
+RealTimeSchedNotSupported "Real-time scheduling policy is not supported."
+RunningAtMaxPriority "OMP application is running at maximum priority with real-time scheduling policy. "
+CantChangeMonitorPriority "Changing priority of the monitor thread failed:"
+MonitorWillStarve "Deadlocks are highly possible due to monitor thread starvation."
+CantSetMonitorStackSize "Unable to set monitor thread stack size to %1$lu bytes:"
+CantSetWorkerStackSize "Unable to set OMP thread stack size to %1$lu bytes:"
+CantInitThreadAttrs "Thread attribute initialization failed:"
+CantDestroyThreadAttrs "Thread attribute destroying failed:"
+CantSetWorkerState "OMP thread joinable state setting failed:"
+CantSetMonitorState "Monitor thread joinable state setting failed:"
+NoResourcesForWorkerThread "System unable to allocate necessary resources for OMP thread:"
+NoResourcesForMonitorThread "System unable to allocate necessary resources for the monitor thread:"
+CantTerminateWorkerThread "Unable to terminate OMP thread:"
+ScheduleKindOutOfRange "Wrong schedule type %1$d, see <omp.h> or <omp_lib.h> file for the list of values supported."
+UnknownSchedulingType "Unknown scheduling type \"%1$d\"."
+InvalidValue "%1$s value \"%2$s\" is invalid."
+SmallValue "%1$s value \"%2$s\" is too small."
+LargeValue "%1$s value \"%2$s\" is too large."
+StgInvalidValue "%1$s: \"%2$s\" is an invalid value; ignored."
+BarrReleaseValueInvalid "%1$s release value \"%2$s\" is invalid."
+BarrGatherValueInvalid "%1$s gather value \"%2$s\" is invalid."
+OBSOLETE "%1$s supported only on debug builds; ignored."
+ParRangeSyntax "Syntax error: Usage: %1$s=[ routine=<func> | filename=<file> | range=<lb>:<ub> "
+ "| excl_range=<lb>:<ub> ],..."
+UnbalancedQuotes "Unbalanced quotes in %1$s."
+EmptyString "Empty string specified for %1$s; ignored."
+LongValue "%1$s value is too long; ignored."
+InvalidClause "%1$s: Invalid clause in \"%2$s\"."
+EmptyClause "Empty clause in %1$s."
+InvalidChunk "%1$s value \"%2$s\" is invalid chunk size."
+LargeChunk "%1$s value \"%2$s\" is to large chunk size."
+IgnoreChunk "%1$s value \"%2$s\" is ignored."
+CantGetProcFreq "Cannot get processor frequency, using zero KMP_ITT_PREPARE_DELAY."
+EnvParallelWarn "%1$s must be set prior to first parallel region; ignored."
+AffParamDefined "%1$s: parameter has been specified already, ignoring \"%2$s\"."
+AffInvalidParam "%1$s: parameter invalid, ignoring \"%2$s\"."
+AffManyParams "%1$s: too many integer parameters specified, ignoring \"%2$s\"."
+AffManyParamsForLogic "%1$s: too many integer parameters specified for logical or physical type, ignoring \"%2$d\"."
+AffNoParam "%1$s: '%2$s' type does not take any integer parameters, ignoring them."
+AffNoProcList "%1$s: proclist not specified with explicit affinity type, using \"none\"."
+AffProcListNoType "%1$s: proclist specified, setting affinity type to \"explicit\"."
+AffProcListNotExplicit "%1$s: proclist specified without \"explicit\" affinity type, proclist ignored."
+AffSyntaxError "%1$s: syntax error, not using affinity."
+AffZeroStride "%1$s: range error (zero stride), not using affinity."
+AffStartGreaterEnd "%1$s: range error (%2$d > %3$d), not using affinity."
+AffStrideLessZero "%1$s: range error (%2$d < %3$d & stride < 0), not using affinity."
+AffRangeTooBig "%1$s: range error ((%2$d-%3$d)/%4$d too big), not using affinity."
+OBSOLETE "%1$s: %2$s is defined. %3$s will be ignored."
+AffNotSupported "%1$s: affinity not supported, using \"disabled\"."
+OBSOLETE "%1$s: affinity only supported for Intel(R) processors."
+GetAffSysCallNotSupported "%1$s: getaffinity system call not supported."
+SetAffSysCallNotSupported "%1$s: setaffinity system call not supported."
+OBSOLETE "%1$s: pthread_aff_set_np call not found."
+OBSOLETE "%1$s: pthread_get_num_resources_np call not found."
+OBSOLETE "%1$s: the OS kernel does not support affinity."
+OBSOLETE "%1$s: pthread_get_num_resources_np returned %2$d."
+AffCantGetMaskSize "%1$s: cannot determine proper affinity mask size."
+ParseSizeIntWarn "%1$s=\"%2$s\": %3$s."
+ParseExtraCharsWarn "%1$s: extra trailing characters ignored: \"%2$s\"."
+UnknownForceReduction "%1$s: unknown method \"%2$s\"."
+TimerUseGettimeofday "KMP_STATS_TIMER: clock_gettime is undefined, using gettimeofday."
+TimerNeedMoreParam "KMP_STATS_TIMER: \"%1$s\" needs additional parameter, e.g. 'clock_gettime,2'. Using gettimeofday."
+TimerInvalidParam "KMP_STATS_TIMER: clock_gettime parameter \"%1$s\" is invalid, using gettimeofday."
+TimerGettimeFailed "KMP_STATS_TIMER: clock_gettime failed, using gettimeofday."
+TimerUnknownFunction "KMP_STATS_TIMER: clock function unknown (ignoring value \"%1$s\")."
+UnknownSchedTypeDetected "Unknown scheduling type detected."
+DispatchManyThreads "Too many threads to use analytical guided scheduling - switching to iterative guided scheduling."
+IttLookupFailed "ittnotify: Lookup of \"%1$s\" function in \"%2$s\" library failed."
+IttLoadLibFailed "ittnotify: Loading \"%1$s\" library failed."
+IttAllNotifDisabled "ittnotify: All itt notifications disabled."
+IttObjNotifDisabled "ittnotify: Object state itt notifications disabled."
+IttMarkNotifDisabled "ittnotify: Mark itt notifications disabled."
+IttUnloadLibFailed "ittnotify: Unloading \"%1$s\" library failed."
+CantFormThrTeam "Cannot form a team with %1$d threads, using %2$d instead."
+ActiveLevelsNegative "Requested number of active parallel levels \"%1$d\" is negative; ignored."
+ActiveLevelsExceedLimit "Requested number of active parallel levels \"%1$d\" exceeds supported limit; "
+ "the following limit value will be used: \"%1$d\"."
+SetLibraryIncorrectCall "kmp_set_library must only be called from the top level serial thread; ignored."
+FatalSysError "Fatal system error detected."
+OutOfHeapMemory "Out of heap memory."
+OBSOLETE "Clearing __KMP_REGISTERED_LIB env var failed."
+OBSOLETE "Registering library with env var failed."
+Using_int_Value "%1$s value \"%2$d\" will be used."
+Using_uint_Value "%1$s value \"%2$u\" will be used."
+Using_uint64_Value "%1$s value \"%2$s\" will be used."
+Using_str_Value "%1$s value \"%2$s\" will be used."
+MaxValueUsing "%1$s maximum value \"%2$d\" will be used."
+MinValueUsing "%1$s minimum value \"%2$d\" will be used."
+MemoryAllocFailed "Memory allocation failed."
+FileNameTooLong "File name too long."
+OBSOLETE "Lock table overflow."
+ManyThreadsForTPDirective "Too many threads to use threadprivate directive."
+AffinityInvalidMask "%1$s: invalid mask."
+WrongDefinition "Wrong definition."
+TLSSetValueFailed "Windows* OS: TLS Set Value failed."
+TLSOutOfIndexes "Windows* OS: TLS out of indexes."
+OBSOLETE "PDONE directive must be nested within a DO directive."
+CantGetNumAvailCPU "Cannot get number of available CPUs."
+AssumedNumCPU "Assumed number of CPUs is 2."
+ErrorInitializeAffinity "Error initializing affinity - not using affinity."
+AffThreadsMayMigrate "Threads may migrate across all available OS procs (granularity setting too coarse)."
+AffIgnoreInvalidProcID "Ignoring invalid OS proc ID %1$d."
+AffNoValidProcID "No valid OS proc IDs specified - not using affinity."
+UsingFlatOS "%1$s - using \"flat\" OS <-> physical proc mapping."
+UsingFlatOSFile "%1$s: %2$s - using \"flat\" OS <-> physical proc mapping."
+UsingFlatOSFileLine "%1$s, line %2$d: %3$s - using \"flat\" OS <-> physical proc mapping."
+FileMsgExiting "%1$s: %2$s - exiting."
+FileLineMsgExiting "%1$s, line %2$d: %3$s - exiting."
+ConstructIdentInvalid "Construct identifier invalid."
+ThreadIdentInvalid "Thread identifier invalid."
+RTLNotInitialized "runtime library not initialized."
+TPCommonBlocksInconsist "Inconsistent THREADPRIVATE common block declarations are non-conforming "
+ "and are unsupported. Either all threadprivate common blocks must be declared "
+ "identically, or the largest instance of each threadprivate common block "
+ "must be referenced first during the run."
+CantSetThreadAffMask "Cannot set thread affinity mask."
+CantSetThreadPriority "Cannot set thread priority."
+CantCreateThread "Cannot create thread."
+CantCreateEvent "Cannot create event."
+CantSetEvent "Cannot set event."
+CantCloseHandle "Cannot close handle."
+UnknownLibraryType "Unknown library type: %1$d."
+ReapMonitorError "Monitor did not reap properly."
+ReapWorkerError "Worker thread failed to join."
+ChangeThreadAffMaskError "Cannot change thread affinity mask."
+ThreadsMigrate "%1$s: Threads may migrate across %2$d innermost levels of machine"
+DecreaseToThreads "%1$s: decrease to %2$d threads"
+IncreaseToThreads "%1$s: increase to %2$d threads"
+OBSOLETE "%1$s: Internal thread %2$d bound to OS proc set %3$s"
+AffCapableUseCpuinfo "%1$s: Affinity capable, using cpuinfo file"
+AffUseGlobCpuid "%1$s: Affinity capable, using global cpuid info"
+AffCapableUseFlat "%1$s: Affinity capable, using default \"flat\" topology"
+AffNotCapableUseLocCpuid "%1$s: Affinity not capable, using local cpuid info"
+AffNotCapableUseCpuinfo "%1$s: Affinity not capable, using cpuinfo file"
+AffFlatTopology "%1$s: Affinity not capable, assumming \"flat\" topology"
+InitOSProcSetRespect "%1$s: Initial OS proc set respected: %2$s"
+InitOSProcSetNotRespect "%1$s: Initial OS proc set not respected: %2$s"
+AvailableOSProc "%1$s: %2$d available OS procs"
+Uniform "%1$s: Uniform topology"
+NonUniform "%1$s: Nonuniform topology"
+Topology "%1$s: %2$d packages x %3$d cores/pkg x %4$d threads/core (%5$d total cores)"
+OBSOLETE "%1$s: OS proc to physical thread map ([] => level not in map):"
+OSProcToPackage "%1$s: OS proc <n> maps to <n>th package core 0"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d [core %4$d] [thread %5$d]"
+OBSOLETE "%1$s: OS proc %2$d maps to [package %3$d] [core %4$d] [thread %5$d]"
+OBSOLETE "%1$s: OS proc %2$d maps to [package %3$d] [core %4$d] thread %5$d"
+OBSOLETE "%1$s: OS proc %2$d maps to [package %3$d] core %4$d [thread %5$d]"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d [core %4$d] [thread %5$d]"
+OBSOLETE "%1$s: OS proc %2$d maps to [package %3$d] core %4$d thread %5$d"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d core %4$d [thread %5$d]"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d [core %4$d] thread %5$d"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d core %4$d thread %5$d"
+OSProcMapToPack "%1$s: OS proc %2$d maps to %3$s"
+OBSOLETE "%1$s: Internal thread %2$d changed affinity mask from %3$s to %4$s"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d, CPU %4$d, TPU %5$d"
+OBSOLETE "%1$s: OS proc %2$d maps to package %3$d, CPU %4$d"
+OBSOLETE "%1$s: HT enabled; %2$d packages; %3$d TPU; %4$d TPUs per package"
+OBSOLETE "%1$s: HT disabled; %2$d packages"
+BarriersInDifferentOrder "Threads encountered barriers in different order. "
+FunctionError "Function %1$s failed:"
+TopologyExtra "%1$s: %2$s packages x %3$d cores/pkg x %4$d threads/core (%5$d total cores)"
+WrongMessageCatalog "Incompatible message catalog \"%1$s\": Version \"%2$s\" found, version \"%3$s\" expected."
+StgIgnored "%1$s: ignored because %2$s has been defined"
+ # %1, -- name of ignored variable, %2 -- name of variable with higher priority.
+OBSOLETE "%1$s: overrides %3$s specified before"
+ # %1, %2 -- name and value of the overriding variable, %3 -- name of overriden variable.
+
+# --- OpenMP errors detected at runtime ---
+#
+# %1 is the name of OpenMP construct (formatted with "Pragma" format).
+#
+CnsBoundToWorksharing "%1$s must be bound to a work-sharing or work-queuing construct with an \"ordered\" clause"
+CnsDetectedEnd "Detected end of %1$s without first executing a corresponding beginning."
+CnsIterationRangeTooLarge "Iteration range too large in %1$s."
+CnsLoopIncrZeroProhibited "%1$s must not have a loop increment that evaluates to zero."
+#
+# %1 is the name of the first OpenMP construct, %2 -- the name of the second one (both formatted with "Pragma" format).
+#
+CnsExpectedEnd "Expected end of %1$s; %2$s, however, has most recently begun execution."
+CnsInvalidNesting "%1$s is incorrectly nested within %2$s"
+CnsMultipleNesting "%1$s cannot be executed multiple times during execution of one parallel iteration/section of %2$s"
+CnsNestingSameName "%1$s is incorrectly nested within %2$s of the same name"
+CnsNoOrderedClause "%1$s is incorrectly nested within %2$s that does not have an \"ordered\" clause"
+CnsNotInTaskConstruct "%1$s is incorrectly nested within %2$s but not within any of its \"task\" constructs"
+CnsThreadsAtBarrier "One thread at %1$s while another thread is at %2$s."
+
+# New errors
+CantConnect "Cannot connect to %1$s"
+CantConnectUsing "Cannot connect to %1$s - Using %2$s"
+LibNotSupport "%1$s does not support %2$s. Continuing without using %2$s."
+LibNotSupportFor "%1$s does not support %2$s for %3$s. Continuing without using %2$s."
+StaticLibNotSupport "Static %1$s does not support %2$s. Continuing without using %2$s."
+OBSOLETE "KMP_DYNAMIC_MODE=irml cannot be used with KMP_USE_IRML=0"
+IttUnknownGroup "ittnotify: Unknown group \"%2$s\" specified in environment variable \"%1$s\"."
+IttEnvVarTooLong "ittnotify: Environment variable \"%1$s\" too long: Actual lengths is %2$lu, max allowed length is %3$lu."
+AffUseGlobCpuidL11 "%1$s: Affinity capable, using global cpuid leaf 11 info"
+AffNotCapableUseLocCpuidL11 "%1$s: Affinity not capable, using local cpuid leaf 11 info"
+AffInfoStr "%1$s: %2$s."
+AffInfoStrStr "%1$s: %2$s - %3$s."
+OSProcToPhysicalThreadMap "%1$s: OS proc to physical thread map:"
+AffUsingFlatOS "%1$s: using \"flat\" OS <-> physical proc mapping."
+AffParseFilename "%1$s: parsing %2$s."
+MsgExiting "%1$s - exiting."
+IncompatibleLibrary "Incompatible %1$s library with version %2$s found."
+IttFunctionError "ittnotify: Function %1$s failed:"
+IttUnknownError "ittnofify: Error #%1$d."
+EnvMiddleWarn "%1$s must be set prior to first parallel region or certain API calls; ignored."
+CnsLockNotDestroyed "Lock initialized at %1$s(%2$d) was not destroyed"
+ # %1, %2, %3, %4 -- file, line, func, col
+CantLoadBalUsing "Cannot determine machine load balance - Using %1$s"
+AffNotCapableUsePthread "%1$s: Affinity not capable, using pthread info"
+AffUsePthread "%1$s: Affinity capable, using pthread info"
+OBSOLETE "Loading \"%1$s\" library failed:"
+OBSOLETE "Lookup of \"%1$s\" function failed:"
+OBSOLETE "Buffer too small."
+OBSOLETE "Error #%1$d."
+NthSyntaxError "%1$s: Invalid symbols found. Check the value \"%2$s\"."
+NthSpacesNotAllowed "%1$s: Spaces between digits are not allowed \"%2$s\"."
+AffStrParseFilename "%1$s: %2$s - parsing %3$s."
+OBSOLETE "%1$s cannot be specified via kmp_set_defaults() on this machine because it has more than one processor group."
+AffTypeCantUseMultGroups "Cannot use affinity type \"%1$s\" with multiple Windows* OS processor groups, using \"%2$s\"."
+AffGranCantUseMultGroups "Cannot use affinity granularity \"%1$s\" with multiple Windows* OS processor groups, using \"%2$s\"."
+AffWindowsProcGroupMap "%1$s: Mapping Windows* OS processor group <i> proc <j> to OS proc 64*<i>+<j>."
+AffOSProcToGroup "%1$s: OS proc %2$d maps to Windows* OS processor group %3$d proc %4$d"
+AffBalancedNotAvail "%1$s: Affinity balanced is not available."
+OBSOLETE "%1$s: granularity=core will be used."
+EnvLockWarn "%1$s must be set prior to first OMP lock call or critical section; ignored."
+FutexNotSupported "futex system call not supported; %1$s=%2$s ignored."
+AffGranUsing "%1$s: granularity=%2$s will be used."
+AffHWSubsetInvalid "%1$s: invalid value \"%2$s\", valid format is \"Ns[@N],Nc[@N],Nt "
+ "(nSockets@offset, nCores@offset, nTthreads per core)\"."
+AffHWSubsetUnsupported "KMP_HW_SUBSET ignored: unsupported architecture."
+AffHWSubsetManyCores "KMP_HW_SUBSET ignored: too many cores requested."
+SyntaxErrorUsing "%1$s: syntax error, using %2$s."
+AdaptiveNotSupported "%1$s: Adaptive locks are not supported; using queuing."
+EnvSyntaxError "%1$s: Invalid symbols found. Check the value \"%2$s\"."
+EnvSpacesNotAllowed "%1$s: Spaces between digits are not allowed \"%2$s\"."
+BoundToOSProcSet "%1$s: pid %2$d thread %3$d bound to OS proc set %4$s"
+CnsLoopIncrIllegal "%1$s error: parallel loop increment and condition are inconsistent."
+NoGompCancellation "libgomp cancellation is not currently supported."
+AffHWSubsetNonUniform "KMP_HW_SUBSET ignored: non-uniform topology."
+AffHWSubsetNonThreeLevel "KMP_HW_SUBSET ignored: only three-level topology is supported."
+AffGranTopGroup "%1$s: granularity=%2$s is not supported with KMP_TOPOLOGY_METHOD=group. Using \"granularity=fine\"."
+AffGranGroupType "%1$s: granularity=group is not supported with KMP_AFFINITY=%2$s. Using \"granularity=core\"."
+AffHWSubsetManySockets "KMP_HW_SUBSET ignored: too many sockets requested."
+AffHWSubsetDeprecated "KMP_HW_SUBSET \"o\" offset designator deprecated, please use @ prefix for offset value."
+AffUsingHwloc "%1$s: Affinity capable, using hwloc."
+AffIgnoringHwloc "%1$s: Ignoring hwloc mechanism."
+AffHwlocErrorOccurred "%1$s: Hwloc failed in %2$s. Relying on internal affinity mechanisms."
+EnvSerialWarn "%1$s must be set prior to OpenMP runtime library initialization; ignored."
+EnvVarDeprecated "%1$s variable deprecated, please use %2$s instead."
+
+
+# --------------------------------------------------------------------------------------------------
+-*- HINTS -*-
+# --------------------------------------------------------------------------------------------------
+
+# Hints. Hint may be printed after a message. Usually it is longer explanation text or suggestion.
+# To maintain hint numbers (they are visible to customers), add new hints to the end.
+
+SubmitBugReport "Please submit a bug report with this message, compile and run "
+ "commands used, and machine configuration info including native "
+ "compiler and operating system versions. Faster response will be "
+ "obtained by including all program sources. For information on "
+ "submitting this issue, please see "
+ "http://www.intel.com/software/products/support/."
+OBSOLETE "Check NLSPATH environment variable, its value is \"%1$s\"."
+ChangeStackLimit "Please try changing the shell stack limit or adjusting the "
+ "OMP_STACKSIZE environment variable."
+Unset_ALL_THREADS "Consider unsetting KMP_ALL_THREADS and OMP_THREAD_LIMIT (if either is set)."
+Set_ALL_THREADPRIVATE "Consider setting KMP_ALL_THREADPRIVATE to a value larger than %1$d."
+PossibleSystemLimitOnThreads "This could also be due to a system-related limit on the number of threads."
+DuplicateLibrary "This means that multiple copies of the OpenMP runtime have been "
+ "linked into the program. That is dangerous, since it can degrade "
+ "performance or cause incorrect results. "
+ "The best thing to do is to ensure that only a single OpenMP runtime is "
+ "linked into the process, e.g. by avoiding static linking of the OpenMP "
+ "runtime in any library. As an unsafe, unsupported, undocumented workaround "
+ "you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow "
+ "the program to continue to execute, but that may cause crashes or "
+ "silently produce incorrect results. "
+ "For more information, please see http://www.intel.com/software/products/support/."
+NameComesFrom_CPUINFO_FILE "This name is specified in environment variable KMP_CPUINFO_FILE."
+NotEnoughMemory "Seems application required too much memory."
+ValidBoolValues "Use \"0\", \"FALSE\". \".F.\", \"off\", \"no\" as false values, "
+ "\"1\", \"TRUE\", \".T.\", \"on\", \"yes\" as true values."
+BufferOverflow "Perhaps too many threads."
+RunningAtMaxPriority "Decrease priority of application. "
+ "This will allow the monitor thread run at higher priority than other threads."
+ChangeMonitorStackSize "Try changing KMP_MONITOR_STACKSIZE or the shell stack limit."
+ChangeWorkerStackSize "Try changing OMP_STACKSIZE and/or the shell stack limit."
+IncreaseWorkerStackSize "Try increasing OMP_STACKSIZE or the shell stack limit."
+DecreaseWorkerStackSize "Try decreasing OMP_STACKSIZE."
+Decrease_NUM_THREADS "Try decreasing the value of OMP_NUM_THREADS."
+IncreaseMonitorStackSize "Try increasing KMP_MONITOR_STACKSIZE."
+DecreaseMonitorStackSize "Try decreasing KMP_MONITOR_STACKSIZE."
+DecreaseNumberOfThreadsInUse "Try decreasing the number of threads in use simultaneously."
+DefaultScheduleKindUsed "Will use default schedule type (%1$s)."
+GetNewerLibrary "It could be a result of using an older OMP library with a newer "
+ "compiler or memory corruption. You may check the proper OMP library "
+ "is linked to the application."
+CheckEnvVar "Check %1$s environment variable, its value is \"%2$s\"."
+OBSOLETE "You may want to use an %1$s library that supports %2$s interface with version %3$s."
+OBSOLETE "You may want to use an %1$s library with version %2$s."
+BadExeFormat "System error #193 is \"Bad format of EXE or DLL file\". "
+ "Usually it means the file is found, but it is corrupted or "
+ "a file for another architecture. "
+ "Check whether \"%1$s\" is a file for %2$s architecture."
+SystemLimitOnThreads "System-related limit on the number of threads."
+
+
+
+# --------------------------------------------------------------------------------------------------
+# end of file #
+# --------------------------------------------------------------------------------------------------
+
diff --git a/final/runtime/src/include/30/omp.h.var b/final/runtime/src/include/30/omp.h.var
new file mode 100644
index 0000000..10bd890
--- /dev/null
+++ b/final/runtime/src/include/30/omp.h.var
@@ -0,0 +1,165 @@
+/*
+ * include/30/omp.h.var
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef __OMP_H
+# define __OMP_H
+
+# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@
+# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@
+# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@
+# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@"
+
+# ifdef __cplusplus
+ extern "C" {
+# endif
+
+# define omp_set_num_threads ompc_set_num_threads
+# define omp_set_dynamic ompc_set_dynamic
+# define omp_set_nested ompc_set_nested
+# define omp_set_max_active_levels ompc_set_max_active_levels
+# define omp_set_schedule ompc_set_schedule
+# define omp_get_ancestor_thread_num ompc_get_ancestor_thread_num
+# define omp_get_team_size ompc_get_team_size
+
+
+# define kmp_set_stacksize kmpc_set_stacksize
+# define kmp_set_stacksize_s kmpc_set_stacksize_s
+# define kmp_set_blocktime kmpc_set_blocktime
+# define kmp_set_library kmpc_set_library
+# define kmp_set_defaults kmpc_set_defaults
+# define kmp_set_affinity_mask_proc kmpc_set_affinity_mask_proc
+# define kmp_unset_affinity_mask_proc kmpc_unset_affinity_mask_proc
+# define kmp_get_affinity_mask_proc kmpc_get_affinity_mask_proc
+
+# define kmp_malloc kmpc_malloc
+# define kmp_calloc kmpc_calloc
+# define kmp_realloc kmpc_realloc
+# define kmp_free kmpc_free
+
+
+# if defined(_WIN32)
+# define __KAI_KMPC_CONVENTION __cdecl
+# else
+# define __KAI_KMPC_CONVENTION
+# endif
+
+ /* schedule kind constants */
+ typedef enum omp_sched_t {
+ omp_sched_static = 1,
+ omp_sched_dynamic = 2,
+ omp_sched_guided = 3,
+ omp_sched_auto = 4
+ } omp_sched_t;
+
+ /* set API functions */
+ extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_nested (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int);
+
+ /* query API functions */
+ extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_nested (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_parallel (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_final (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_active_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_team_size (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void);
+ extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *);
+
+ /* lock API functions */
+ typedef struct omp_lock_t {
+ void * _lk;
+ } omp_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *);
+
+ /* nested lock API functions */
+ typedef struct omp_nest_lock_t {
+ void * _lk;
+ } omp_nest_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *);
+
+ /* time API functions */
+ extern double __KAI_KMPC_CONVENTION omp_get_wtime (void);
+ extern double __KAI_KMPC_CONVENTION omp_get_wtick (void);
+
+# include <stdlib.h>
+ /* kmp API functions */
+ extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int);
+ extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);
+ extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void);
+ extern int __KAI_KMPC_CONVENTION kmp_get_library (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *);
+
+ /* affinity API functions */
+ typedef void * kmp_affinity_mask_t;
+
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void);
+ extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *);
+ extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *);
+
+ extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t);
+ extern void __KAI_KMPC_CONVENTION kmp_free (void *);
+
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void);
+
+# undef __KAI_KMPC_CONVENTION
+
+ /* Warning:
+ The following typedefs are not standard, deprecated and will be removed in a future release.
+ */
+ typedef int omp_int_t;
+ typedef double omp_wtime_t;
+
+# ifdef __cplusplus
+ }
+# endif
+
+#endif /* __OMP_H */
+
diff --git a/final/runtime/src/include/30/omp_lib.f.var b/final/runtime/src/include/30/omp_lib.f.var
new file mode 100644
index 0000000..298df8d
--- /dev/null
+++ b/final/runtime/src/include/30/omp_lib.f.var
@@ -0,0 +1,644 @@
+! include/30/omp_lib.f.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!dec$ fixedformlinesize:132
+
+ module omp_lib_kinds
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*), parameter :: kmp_build_date = '@LIBOMP_BUILD_DATE@'
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_get_dynamic()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_team_size
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_wtime()
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick ()
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ subroutine omp_init_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial()
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround()
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput()
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string)
+ character*(*) string
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s()
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind) size
+ integer (kind=kmp_size_t_kind) alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind) nelem
+ integer (kind=kmp_size_t_kind) elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind) ptr
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on()
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off()
+ end subroutine kmp_set_warnings_off
+
+ end interface
+
+!dec$ if defined(_WIN32)
+!dec$ if defined(_WIN64) .or. defined(_M_AMD64)
+
+!***
+!*** The Fortran entry points must be in uppercase, even if the /Qlowercase
+!*** option is specified. The alias attribute ensures that the specified
+!*** string is used as the entry point.
+!***
+!*** On the Windows* OS IA-32 architecture, the Fortran entry points have an
+!*** underscore prepended. On the Windows* OS Intel(R) 64
+!*** architecture, no underscore is prepended.
+!***
+
+!dec$ attributes alias:'OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'OMP_GET_WTICK' :: omp_get_wtick
+
+!dec$ attributes alias:'omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ else
+
+!***
+!*** On Windows* OS IA-32 architecture, the Fortran entry points have an underscore prepended.
+!***
+
+!dec$ attributes alias:'_OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'_OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'_OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'_OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'_OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'_OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'_OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'_OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'_OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'_OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'_OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'_OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'_OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'_OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'_OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'_OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'_OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'_OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'_OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'_OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'_OMP_GET_WTICK' :: omp_get_wtick
+
+!dec$ attributes alias:'_omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'_KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'_KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'_KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'_KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'_KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'_KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'_KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'_KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'_KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'_KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'_KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'_KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'_KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'_KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'_KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'_KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'_KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ endif
+!dec$ endif
+
+!dec$ if defined(__linux)
+
+!***
+!*** The Linux* OS entry points are in lowercase, with an underscore appended.
+!***
+
+!dec$ attributes alias:'omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'omp_get_level_'::omp_get_level
+!dec$ attributes alias:'omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'omp_get_wtick_'::omp_get_wtick
+
+!dec$ attributes alias:'omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'kmp_free_'::kmp_free
+
+!dec$ attributes alias:'kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ endif
+
+!dec$ if defined(__APPLE__)
+
+!***
+!*** The Mac entry points are in lowercase, with an both an underscore
+!*** appended and an underscore prepended.
+!***
+
+!dec$ attributes alias:'_omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'_omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'_omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'_omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'_omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'_omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'_omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'_omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'_omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'_omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'_omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'_omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'_omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'_omp_get_level_'::omp_get_level
+!dec$ attributes alias:'_omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'_omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'_omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'_omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'_omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick
+
+!dec$ attributes alias:'_omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'_kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'_kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'_kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'_kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'_kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'_kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'_kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'_kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'_kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'_kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'_kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'_kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'_kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'_kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'_kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'_kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'_kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'_kmp_free_'::kmp_free
+
+!dec$ attributes alias:'_kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'_kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ endif
+
+ end module omp_lib
+
diff --git a/final/runtime/src/include/30/omp_lib.f90.var b/final/runtime/src/include/30/omp_lib.f90.var
new file mode 100644
index 0000000..63539a1
--- /dev/null
+++ b/final/runtime/src/include/30/omp_lib.f90.var
@@ -0,0 +1,365 @@
+! include/30/omp_lib.f90.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+ module omp_lib_kinds
+
+ use, intrinsic :: iso_c_binding
+
+ integer, parameter :: omp_integer_kind = c_int
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = c_float
+ integer, parameter :: kmp_double_kind = c_double
+ integer, parameter :: omp_lock_kind = c_intptr_t
+ integer, parameter :: omp_nest_lock_kind = c_intptr_t
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = c_intptr_t
+ integer, parameter :: kmp_size_t_kind = c_size_t
+ integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) :: omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) :: omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind), value :: kind
+ integer (kind=omp_integer_kind), value :: modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) :: kind
+ integer (kind=omp_integer_kind) :: modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_wtime() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtick
+ end function omp_get_wtick
+
+ subroutine omp_init_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind), value :: size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial() bind(c)
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround() bind(c)
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput() bind(c)
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string) bind(c)
+ use, intrinsic :: iso_c_binding
+ character (kind=c_char) :: string(*)
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s() bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ integer (kind=kmp_size_t_kind), value :: alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind), value :: nelem
+ integer (kind=kmp_size_t_kind), value :: elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind), value :: ptr
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind), value :: ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on() bind(c)
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off() bind(c)
+ end subroutine kmp_set_warnings_off
+
+ end interface
+
+ end module omp_lib
diff --git a/final/runtime/src/include/30/omp_lib.h.var b/final/runtime/src/include/30/omp_lib.h.var
new file mode 100644
index 0000000..3800602
--- /dev/null
+++ b/final/runtime/src/include/30/omp_lib.h.var
@@ -0,0 +1,649 @@
+! include/30/omp_lib.h.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!dec$ fixedformlinesize:132
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads)
+ import
+ integer (kind=omp_integer_kind) nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable)
+ import
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable)
+ import
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads()
+ import
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads()
+ import
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num()
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs()
+ import
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel()
+ import
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final()
+ import
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic()
+ import
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested()
+ import
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit()
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels)
+ import
+ integer (kind=omp_integer_kind) max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels()
+ import
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level()
+ import
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level()
+ import
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level)
+ import
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level)
+ import
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_team_size
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier)
+ import
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier)
+ import
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_wtime()
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick ()
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ subroutine omp_init_lock(lockvar)
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar)
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar)
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar)
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar)
+ import
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar)
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar)
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar)
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar)
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar)
+ import
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size)
+ import
+ integer (kind=omp_integer_kind) size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size)
+ import
+ integer (kind=kmp_size_t_kind) size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec)
+ import
+ integer (kind=omp_integer_kind) msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial()
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround()
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput()
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum)
+ import
+ integer (kind=omp_integer_kind) libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string)
+ character*(*) string
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize()
+ import
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s()
+ import
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime()
+ import
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library()
+ import
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc()
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask)
+ import
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size)
+ import
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment)
+ import
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind) size
+ integer (kind=kmp_size_t_kind) alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize)
+ import
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind) nelem
+ integer (kind=kmp_size_t_kind) elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size)
+ import
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind) ptr
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr)
+ import
+ integer (kind=kmp_pointer_kind) ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on()
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off()
+ end subroutine kmp_set_warnings_off
+
+ end interface
+
+!dec$ if defined(_WIN32)
+!dec$ if defined(_WIN64) .or. defined(_M_AMD64)
+
+!***
+!*** The Fortran entry points must be in uppercase, even if the /Qlowercase
+!*** option is specified. The alias attribute ensures that the specified
+!*** string is used as the entry point.
+!***
+!*** On the Windows* OS IA-32 architecture, the Fortran entry points have an
+!*** underscore prepended. On the Windows* OS Intel(R) 64
+!*** architecture, no underscore is prepended.
+!***
+
+!dec$ attributes alias:'OMP_SET_NUM_THREADS'::omp_set_num_threads
+!dec$ attributes alias:'OMP_SET_DYNAMIC'::omp_set_dynamic
+!dec$ attributes alias:'OMP_SET_NESTED'::omp_set_nested
+!dec$ attributes alias:'OMP_GET_NUM_THREADS'::omp_get_num_threads
+!dec$ attributes alias:'OMP_GET_MAX_THREADS'::omp_get_max_threads
+!dec$ attributes alias:'OMP_GET_THREAD_NUM'::omp_get_thread_num
+!dec$ attributes alias:'OMP_GET_NUM_PROCS'::omp_get_num_procs
+!dec$ attributes alias:'OMP_IN_PARALLEL'::omp_in_parallel
+!dec$ attributes alias:'OMP_IN_FINAL'::omp_in_final
+!dec$ attributes alias:'OMP_GET_DYNAMIC'::omp_get_dynamic
+!dec$ attributes alias:'OMP_GET_NESTED'::omp_get_nested
+!dec$ attributes alias:'OMP_GET_THREAD_LIMIT'::omp_get_thread_limit
+!dec$ attributes alias:'OMP_SET_MAX_ACTIVE_LEVELS'::omp_set_max_active_levels
+!dec$ attributes alias:'OMP_GET_MAX_ACTIVE_LEVELS'::omp_get_max_active_levels
+!dec$ attributes alias:'OMP_GET_LEVEL'::omp_get_level
+!dec$ attributes alias:'OMP_GET_ACTIVE_LEVEL'::omp_get_active_level
+!dec$ attributes alias:'OMP_GET_ANCESTOR_THREAD_NUM'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'OMP_GET_TEAM_SIZE'::omp_get_team_size
+!dec$ attributes alias:'OMP_SET_SCHEDULE'::omp_set_schedule
+!dec$ attributes alias:'OMP_GET_SCHEDULE'::omp_get_schedule
+!dec$ attributes alias:'OMP_GET_WTIME'::omp_get_wtime
+!dec$ attributes alias:'OMP_GET_WTICK'::omp_get_wtick
+
+!dec$ attributes alias:'omp_init_lock'::omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock'::omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock'::omp_set_lock
+!dec$ attributes alias:'omp_unset_lock'::omp_unset_lock
+!dec$ attributes alias:'omp_test_lock'::omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock'::omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock'::omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock'::omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock'::omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock'::omp_test_nest_lock
+
+!dec$ attributes alias:'KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'KMP_SET_DEFAULTS'::kmp_set_defaults
+!dec$ attributes alias:'KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ else
+
+!***
+!*** On Windows* OS IA-32 architecture, the Fortran entry points have an underscore prepended.
+!***
+
+!dec$ attributes alias:'_OMP_SET_NUM_THREADS'::omp_set_num_threads
+!dec$ attributes alias:'_OMP_SET_DYNAMIC'::omp_set_dynamic
+!dec$ attributes alias:'_OMP_SET_NESTED'::omp_set_nested
+!dec$ attributes alias:'_OMP_GET_NUM_THREADS'::omp_get_num_threads
+!dec$ attributes alias:'_OMP_GET_MAX_THREADS'::omp_get_max_threads
+!dec$ attributes alias:'_OMP_GET_THREAD_NUM'::omp_get_thread_num
+!dec$ attributes alias:'_OMP_GET_NUM_PROCS'::omp_get_num_procs
+!dec$ attributes alias:'_OMP_IN_PARALLEL'::omp_in_parallel
+!dec$ attributes alias:'_OMP_IN_FINAL'::omp_in_final
+!dec$ attributes alias:'_OMP_GET_DYNAMIC'::omp_get_dynamic
+!dec$ attributes alias:'_OMP_GET_NESTED'::omp_get_nested
+!dec$ attributes alias:'_OMP_GET_THREAD_LIMIT'::omp_get_thread_limit
+!dec$ attributes alias:'_OMP_SET_MAX_ACTIVE_LEVELS'::omp_set_max_active_levels
+!dec$ attributes alias:'_OMP_GET_MAX_ACTIVE_LEVELS'::omp_get_max_active_levels
+!dec$ attributes alias:'_OMP_GET_LEVEL'::omp_get_level
+!dec$ attributes alias:'_OMP_GET_ACTIVE_LEVEL'::omp_get_active_level
+!dec$ attributes alias:'_OMP_GET_ANCESTOR_THREAD_NUM'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'_OMP_GET_TEAM_SIZE'::omp_get_team_size
+!dec$ attributes alias:'_OMP_SET_SCHEDULE'::omp_set_schedule
+!dec$ attributes alias:'_OMP_GET_SCHEDULE'::omp_get_schedule
+!dec$ attributes alias:'_OMP_GET_WTIME'::omp_get_wtime
+!dec$ attributes alias:'_OMP_GET_WTICK'::omp_get_wtick
+
+!dec$ attributes alias:'_omp_init_lock'::omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock'::omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock'::omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock'::omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock'::omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock'::omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock'::omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock'::omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock'::omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock'::omp_test_nest_lock
+
+!dec$ attributes alias:'_KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'_KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'_KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'_KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'_KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'_KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'_KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'_KMP_SET_DEFAULTS'::kmp_set_defaults
+!dec$ attributes alias:'_KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'_KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'_KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'_KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'_KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'_KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'_KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'_KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'_KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'_KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ endif
+!dec$ endif
+
+!dec$ if defined(__linux)
+
+!***
+!*** The Linux* OS entry points are in lowercase, with an underscore appended.
+!***
+
+!dec$ attributes alias:'omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'omp_in_final_'::omp_in_final
+!dec$ attributes alias:'omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'omp_get_level_'::omp_get_level
+!dec$ attributes alias:'omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'omp_get_wtick_'::omp_get_wtick
+
+!dec$ attributes alias:'omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'kmp_set_defaults_'::kmp_set_defaults
+!dec$ attributes alias:'kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'kmp_free_'::kmp_free
+
+!dec$ attributes alias:'kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ endif
+
+!dec$ if defined(__APPLE__)
+
+!***
+!*** The Mac entry points are in lowercase, with an both an underscore
+!*** appended and an underscore prepended.
+!***
+
+!dec$ attributes alias:'_omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'_omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'_omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'_omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'_omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'_omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'_omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'_omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'_omp_in_final_'::omp_in_final
+!dec$ attributes alias:'_omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'_omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'_omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'_omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'_omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'_omp_get_level_'::omp_get_level
+!dec$ attributes alias:'_omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'_omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'_omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'_omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'_omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick
+
+!dec$ attributes alias:'_omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'_kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'_kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'_kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'_kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'_kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'_kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'_kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'_kmp_set_defaults_'::kmp_set_defaults
+!dec$ attributes alias:'_kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'_kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'_kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'_kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'_kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'_kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'_kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'_kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'_kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'_kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'_kmp_free_'::kmp_free
+
+!dec$ attributes alias:'_kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'_kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ endif
+
+
diff --git a/final/runtime/src/include/30/ompt.h.var b/final/runtime/src/include/30/ompt.h.var
new file mode 100644
index 0000000..86050c9
--- /dev/null
+++ b/final/runtime/src/include/30/ompt.h.var
@@ -0,0 +1,488 @@
+/*
+ * include/30/ompt.h.var
+ */
+
+#ifndef __OMPT__
+#define __OMPT__
+
+/*****************************************************************************
+ * system include files
+ *****************************************************************************/
+
+#include <stdint.h>
+
+
+
+/*****************************************************************************
+ * iteration macros
+ *****************************************************************************/
+
+#define FOREACH_OMPT_INQUIRY_FN(macro) \
+ macro (ompt_enumerate_state) \
+ \
+ macro (ompt_set_callback) \
+ macro (ompt_get_callback) \
+ \
+ macro (ompt_get_idle_frame) \
+ macro (ompt_get_task_frame) \
+ \
+ macro (ompt_get_state) \
+ \
+ macro (ompt_get_parallel_id) \
+ macro (ompt_get_parallel_team_size) \
+ macro (ompt_get_task_id) \
+ macro (ompt_get_thread_id)
+
+#define FOREACH_OMPT_PLACEHOLDER_FN(macro) \
+ macro (ompt_idle) \
+ macro (ompt_overhead) \
+ macro (ompt_barrier_wait) \
+ macro (ompt_task_wait) \
+ macro (ompt_mutex_wait)
+
+#define FOREACH_OMPT_STATE(macro) \
+ \
+ /* first */ \
+ macro (ompt_state_first, 0x71) /* initial enumeration state */ \
+ \
+ /* work states (0..15) */ \
+ macro (ompt_state_work_serial, 0x00) /* working outside parallel */ \
+ macro (ompt_state_work_parallel, 0x01) /* working within parallel */ \
+ macro (ompt_state_work_reduction, 0x02) /* performing a reduction */ \
+ \
+ /* idle (16..31) */ \
+ macro (ompt_state_idle, 0x10) /* waiting for work */ \
+ \
+ /* overhead states (32..63) */ \
+ macro (ompt_state_overhead, 0x20) /* overhead excluding wait states */ \
+ \
+ /* barrier wait states (64..79) */ \
+ macro (ompt_state_wait_barrier, 0x40) /* waiting at a barrier */ \
+ macro (ompt_state_wait_barrier_implicit, 0x41) /* implicit barrier */ \
+ macro (ompt_state_wait_barrier_explicit, 0x42) /* explicit barrier */ \
+ \
+ /* task wait states (80..95) */ \
+ macro (ompt_state_wait_taskwait, 0x50) /* waiting at a taskwait */ \
+ macro (ompt_state_wait_taskgroup, 0x51) /* waiting at a taskgroup */ \
+ \
+ /* mutex wait states (96..111) */ \
+ macro (ompt_state_wait_lock, 0x60) /* waiting for lock */ \
+ macro (ompt_state_wait_nest_lock, 0x61) /* waiting for nest lock */ \
+ macro (ompt_state_wait_critical, 0x62) /* waiting for critical */ \
+ macro (ompt_state_wait_atomic, 0x63) /* waiting for atomic */ \
+ macro (ompt_state_wait_ordered, 0x64) /* waiting for ordered */ \
+ macro (ompt_state_wait_single, 0x6F) /* waiting for single region (non-standard!) */ \
+ \
+ /* misc (112..127) */ \
+ macro (ompt_state_undefined, 0x70) /* undefined thread state */
+
+
+#define FOREACH_OMPT_EVENT(macro) \
+ \
+ /*--- Mandatory Events ---*/ \
+ macro (ompt_event_parallel_begin, ompt_new_parallel_callback_t, 1) /* parallel begin */ \
+ macro (ompt_event_parallel_end, ompt_end_parallel_callback_t, 2) /* parallel end */ \
+ \
+ macro (ompt_event_task_begin, ompt_new_task_callback_t, 3) /* task begin */ \
+ macro (ompt_event_task_end, ompt_task_callback_t, 4) /* task destroy */ \
+ \
+ macro (ompt_event_thread_begin, ompt_thread_type_callback_t, 5) /* thread begin */ \
+ macro (ompt_event_thread_end, ompt_thread_type_callback_t, 6) /* thread end */ \
+ \
+ macro (ompt_event_control, ompt_control_callback_t, 7) /* support control calls */ \
+ \
+ macro (ompt_event_runtime_shutdown, ompt_callback_t, 8) /* runtime shutdown */ \
+ \
+ /*--- Optional Events (blame shifting, ompt_event_unimplemented) ---*/ \
+ macro (ompt_event_idle_begin, ompt_thread_callback_t, 9) /* begin idle state */ \
+ macro (ompt_event_idle_end, ompt_thread_callback_t, 10) /* end idle state */ \
+ \
+ macro (ompt_event_wait_barrier_begin, ompt_parallel_callback_t, 11) /* begin wait at barrier */ \
+ macro (ompt_event_wait_barrier_end, ompt_parallel_callback_t, 12) /* end wait at barrier */ \
+ \
+ macro (ompt_event_wait_taskwait_begin, ompt_parallel_callback_t, 13) /* begin wait at taskwait */ \
+ macro (ompt_event_wait_taskwait_end, ompt_parallel_callback_t, 14) /* end wait at taskwait */ \
+ \
+ macro (ompt_event_wait_taskgroup_begin, ompt_parallel_callback_t, 15) /* begin wait at taskgroup */\
+ macro (ompt_event_wait_taskgroup_end, ompt_parallel_callback_t, 16) /* end wait at taskgroup */ \
+ \
+ macro (ompt_event_release_lock, ompt_wait_callback_t, 17) /* lock release */ \
+ macro (ompt_event_release_nest_lock_last, ompt_wait_callback_t, 18) /* last nest lock release */ \
+ macro (ompt_event_release_critical, ompt_wait_callback_t, 19) /* critical release */ \
+ \
+ macro (ompt_event_release_atomic, ompt_wait_callback_t, 20) /* atomic release */ \
+ \
+ macro (ompt_event_release_ordered, ompt_wait_callback_t, 21) /* ordered release */ \
+ \
+ /*--- Optional Events (synchronous events, ompt_event_unimplemented) --- */ \
+ macro (ompt_event_implicit_task_begin, ompt_parallel_callback_t, 22) /* implicit task begin */ \
+ macro (ompt_event_implicit_task_end, ompt_parallel_callback_t, 23) /* implicit task end */ \
+ \
+ macro (ompt_event_initial_task_begin, ompt_parallel_callback_t, 24) /* initial task begin */ \
+ macro (ompt_event_initial_task_end, ompt_parallel_callback_t, 25) /* initial task end */ \
+ \
+ macro (ompt_event_task_switch, ompt_task_pair_callback_t, 26) /* task switch */ \
+ \
+ macro (ompt_event_loop_begin, ompt_new_workshare_callback_t, 27) /* task at loop begin */ \
+ macro (ompt_event_loop_end, ompt_parallel_callback_t, 28) /* task at loop end */ \
+ \
+ macro (ompt_event_sections_begin, ompt_new_workshare_callback_t, 29) /* task at sections begin */\
+ macro (ompt_event_sections_end, ompt_parallel_callback_t, 30) /* task at sections end */ \
+ \
+ macro (ompt_event_single_in_block_begin, ompt_new_workshare_callback_t, 31) /* task at single begin*/ \
+ macro (ompt_event_single_in_block_end, ompt_parallel_callback_t, 32) /* task at single end */ \
+ \
+ macro (ompt_event_single_others_begin, ompt_parallel_callback_t, 33) /* task at single begin */ \
+ macro (ompt_event_single_others_end, ompt_parallel_callback_t, 34) /* task at single end */ \
+ \
+ macro (ompt_event_workshare_begin, ompt_new_workshare_callback_t, 35) /* task at workshare begin */\
+ macro (ompt_event_workshare_end, ompt_parallel_callback_t, 36) /* task at workshare end */ \
+ \
+ macro (ompt_event_master_begin, ompt_parallel_callback_t, 37) /* task at master begin */ \
+ macro (ompt_event_master_end, ompt_parallel_callback_t, 38) /* task at master end */ \
+ \
+ macro (ompt_event_barrier_begin, ompt_parallel_callback_t, 39) /* task at barrier begin */ \
+ macro (ompt_event_barrier_end, ompt_parallel_callback_t, 40) /* task at barrier end */ \
+ \
+ macro (ompt_event_taskwait_begin, ompt_parallel_callback_t, 41) /* task at taskwait begin */ \
+ macro (ompt_event_taskwait_end, ompt_parallel_callback_t, 42) /* task at task wait end */ \
+ \
+ macro (ompt_event_taskgroup_begin, ompt_parallel_callback_t, 43) /* task at taskgroup begin */\
+ macro (ompt_event_taskgroup_end, ompt_parallel_callback_t, 44) /* task at taskgroup end */ \
+ \
+ macro (ompt_event_release_nest_lock_prev, ompt_wait_callback_t, 45) /* prev nest lock release */ \
+ \
+ macro (ompt_event_wait_lock, ompt_wait_callback_t, 46) /* lock wait */ \
+ macro (ompt_event_wait_nest_lock, ompt_wait_callback_t, 47) /* nest lock wait */ \
+ macro (ompt_event_wait_critical, ompt_wait_callback_t, 48) /* critical wait */ \
+ macro (ompt_event_wait_atomic, ompt_wait_callback_t, 49) /* atomic wait */ \
+ macro (ompt_event_wait_ordered, ompt_wait_callback_t, 50) /* ordered wait */ \
+ \
+ macro (ompt_event_acquired_lock, ompt_wait_callback_t, 51) /* lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_first, ompt_wait_callback_t, 52) /* 1st nest lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_next, ompt_wait_callback_t, 53) /* next nest lock acquired*/ \
+ macro (ompt_event_acquired_critical, ompt_wait_callback_t, 54) /* critical acquired */ \
+ macro (ompt_event_acquired_atomic, ompt_wait_callback_t, 55) /* atomic acquired */ \
+ macro (ompt_event_acquired_ordered, ompt_wait_callback_t, 56) /* ordered acquired */ \
+ \
+ macro (ompt_event_init_lock, ompt_wait_callback_t, 57) /* lock init */ \
+ macro (ompt_event_init_nest_lock, ompt_wait_callback_t, 58) /* nest lock init */ \
+ \
+ macro (ompt_event_destroy_lock, ompt_wait_callback_t, 59) /* lock destruction */ \
+ macro (ompt_event_destroy_nest_lock, ompt_wait_callback_t, 60) /* nest lock destruction */ \
+ \
+ macro (ompt_event_flush, ompt_callback_t, 61) /* after executing flush */
+
+
+
+/*****************************************************************************
+ * data types
+ *****************************************************************************/
+
+/*---------------------
+ * identifiers
+ *---------------------*/
+
+typedef uint64_t ompt_thread_id_t;
+#define ompt_thread_id_none ((ompt_thread_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_task_id_t;
+#define ompt_task_id_none ((ompt_task_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_parallel_id_t;
+#define ompt_parallel_id_none ((ompt_parallel_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_wait_id_t;
+#define ompt_wait_id_none ((ompt_wait_id_t) 0) /* non-standard */
+
+
+/*---------------------
+ * ompt_frame_t
+ *---------------------*/
+
+typedef struct ompt_frame_s {
+ void *exit_runtime_frame; /* next frame is user code */
+ void *reenter_runtime_frame; /* previous frame is user code */
+} ompt_frame_t;
+
+
+/*****************************************************************************
+ * enumerations for thread states and runtime events
+ *****************************************************************************/
+
+/*---------------------
+ * runtime states
+ *---------------------*/
+
+typedef enum {
+#define ompt_state_macro(state, code) state = code,
+ FOREACH_OMPT_STATE(ompt_state_macro)
+#undef ompt_state_macro
+} ompt_state_t;
+
+
+/*---------------------
+ * runtime events
+ *---------------------*/
+
+typedef enum {
+#define ompt_event_macro(event, callback, eventid) event = eventid,
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+#undef ompt_event_macro
+} ompt_event_t;
+
+
+/*---------------------
+ * set callback results
+ *---------------------*/
+typedef enum {
+ ompt_set_result_registration_error = 0,
+ ompt_set_result_event_may_occur_no_callback = 1,
+ ompt_set_result_event_never_occurs = 2,
+ ompt_set_result_event_may_occur_callback_some = 3,
+ ompt_set_result_event_may_occur_callback_always = 4,
+} ompt_set_result_t;
+
+
+
+/*****************************************************************************
+ * callback signatures
+ *****************************************************************************/
+
+/* initialization */
+typedef void (*ompt_interface_fn_t)(void);
+
+typedef ompt_interface_fn_t (*ompt_function_lookup_t)(
+ const char * /* entry point to look up */
+);
+
+/* threads */
+typedef void (*ompt_thread_callback_t) (
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef enum {
+ ompt_thread_initial = 1, // start the enumeration at 1
+ ompt_thread_worker = 2,
+ ompt_thread_other = 3
+} ompt_thread_type_t;
+
+typedef enum {
+ ompt_invoker_program = 0, /* program invokes master task */
+ ompt_invoker_runtime = 1 /* runtime invokes master task */
+} ompt_invoker_t;
+
+typedef void (*ompt_thread_type_callback_t) (
+ ompt_thread_type_t thread_type, /* type of thread */
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef void (*ompt_wait_callback_t) (
+ ompt_wait_id_t wait_id /* wait id */
+);
+
+/* parallel and workshares */
+typedef void (*ompt_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_new_workshare_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ void *workshare_function /* pointer to outlined function */
+);
+
+typedef void (*ompt_new_parallel_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data of parent task */
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ uint32_t requested_team_size, /* number of threads in team */
+ void *parallel_function, /* pointer to outlined function */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+typedef void (*ompt_end_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id, /* id of task */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+/* tasks */
+typedef void (*ompt_task_callback_t) (
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_task_pair_callback_t) (
+ ompt_task_id_t first_task_id,
+ ompt_task_id_t second_task_id
+);
+
+typedef void (*ompt_new_task_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data for parent task */
+ ompt_task_id_t new_task_id, /* id of created task */
+ void *task_function /* pointer to outlined function */
+);
+
+/* program */
+typedef void (*ompt_control_callback_t) (
+ uint64_t command, /* command of control call */
+ uint64_t modifier /* modifier of control call */
+);
+
+typedef void (*ompt_callback_t)(void);
+
+
+/****************************************************************************
+ * ompt API
+ ***************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OMPT_API_FNTYPE(fn) fn##_t
+
+#define OMPT_API_FUNCTION(return_type, fn, args) \
+ typedef return_type (*OMPT_API_FNTYPE(fn)) args
+
+
+
+/****************************************************************************
+ * INQUIRY FUNCTIONS
+ ***************************************************************************/
+
+/* state */
+OMPT_API_FUNCTION(ompt_state_t, ompt_get_state, (
+ ompt_wait_id_t *ompt_wait_id
+));
+
+/* thread */
+OMPT_API_FUNCTION(ompt_thread_id_t, ompt_get_thread_id, (void));
+
+OMPT_API_FUNCTION(void *, ompt_get_idle_frame, (void));
+
+/* parallel region */
+OMPT_API_FUNCTION(ompt_parallel_id_t, ompt_get_parallel_id, (
+ int ancestor_level
+));
+
+OMPT_API_FUNCTION(int, ompt_get_parallel_team_size, (
+ int ancestor_level
+));
+
+/* task */
+OMPT_API_FUNCTION(ompt_task_id_t, ompt_get_task_id, (
+ int depth
+));
+
+OMPT_API_FUNCTION(ompt_frame_t *, ompt_get_task_frame, (
+ int depth
+));
+
+
+
+/****************************************************************************
+ * PLACEHOLDERS FOR PERFORMANCE REPORTING
+ ***************************************************************************/
+
+/* idle */
+OMPT_API_FUNCTION(void, ompt_idle, (
+ void
+));
+
+/* overhead */
+OMPT_API_FUNCTION(void, ompt_overhead, (
+ void
+));
+
+/* barrier wait */
+OMPT_API_FUNCTION(void, ompt_barrier_wait, (
+ void
+));
+
+/* task wait */
+OMPT_API_FUNCTION(void, ompt_task_wait, (
+ void
+));
+
+/* mutex wait */
+OMPT_API_FUNCTION(void, ompt_mutex_wait, (
+ void
+));
+
+
+
+/****************************************************************************
+ * INITIALIZATION FUNCTIONS
+ ***************************************************************************/
+
+OMPT_API_FUNCTION(void, ompt_initialize, (
+ ompt_function_lookup_t ompt_fn_lookup,
+ const char *runtime_version,
+ unsigned int ompt_version
+));
+
+
+/* initialization interface to be defined by tool */
+ompt_initialize_t ompt_tool(void);
+
+typedef enum opt_init_mode_e {
+ ompt_init_mode_never = 0,
+ ompt_init_mode_false = 1,
+ ompt_init_mode_true = 2,
+ ompt_init_mode_always = 3
+} ompt_init_mode_t;
+
+OMPT_API_FUNCTION(int, ompt_set_callback, (
+ ompt_event_t event,
+ ompt_callback_t callback
+));
+
+typedef enum ompt_set_callback_rc_e { /* non-standard */
+ ompt_set_callback_error = 0,
+ ompt_has_event_no_callback = 1,
+ ompt_no_event_no_callback = 2,
+ ompt_has_event_may_callback = 3,
+ ompt_has_event_must_callback = 4,
+} ompt_set_callback_rc_t;
+
+
+OMPT_API_FUNCTION(int, ompt_get_callback, (
+ ompt_event_t event,
+ ompt_callback_t *callback
+));
+
+
+
+/****************************************************************************
+ * MISCELLANEOUS FUNCTIONS
+ ***************************************************************************/
+
+/* control */
+// FIXME: remove workaround for clang
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp declare target
+#endif
+void ompt_control(
+ uint64_t command,
+ uint64_t modifier
+);
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp end declare target
+#endif
+
+/* state enumeration */
+OMPT_API_FUNCTION(int, ompt_enumerate_state, (
+ int current_state,
+ int *next_state,
+ const char **next_state_name
+));
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
+
diff --git a/final/runtime/src/include/40/omp.h.var b/final/runtime/src/include/40/omp.h.var
new file mode 100644
index 0000000..b030dbe
--- /dev/null
+++ b/final/runtime/src/include/40/omp.h.var
@@ -0,0 +1,161 @@
+/*
+ * include/40/omp.h.var
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef __OMP_H
+# define __OMP_H
+
+# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@
+# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@
+# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@
+# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@"
+
+# ifdef __cplusplus
+ extern "C" {
+# endif
+
+# if defined(_WIN32)
+# define __KAI_KMPC_CONVENTION __cdecl
+# else
+# define __KAI_KMPC_CONVENTION
+# endif
+
+ /* schedule kind constants */
+ typedef enum omp_sched_t {
+ omp_sched_static = 1,
+ omp_sched_dynamic = 2,
+ omp_sched_guided = 3,
+ omp_sched_auto = 4
+ } omp_sched_t;
+
+ /* set API functions */
+ extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_nested (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int);
+
+ /* query API functions */
+ extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_nested (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_parallel (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_final (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_active_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_team_size (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void);
+ extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *);
+
+ /* lock API functions */
+ typedef struct omp_lock_t {
+ void * _lk;
+ } omp_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *);
+
+ /* nested lock API functions */
+ typedef struct omp_nest_lock_t {
+ void * _lk;
+ } omp_nest_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *);
+
+ /* time API functions */
+ extern double __KAI_KMPC_CONVENTION omp_get_wtime (void);
+ extern double __KAI_KMPC_CONVENTION omp_get_wtick (void);
+
+ /* OpenMP 4.0 */
+ extern int __KAI_KMPC_CONVENTION omp_get_default_device (void);
+ extern void __KAI_KMPC_CONVENTION omp_set_default_device (int);
+ extern int __KAI_KMPC_CONVENTION omp_is_initial_device (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_devices (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_teams (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_team_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_cancellation (void);
+
+# include <stdlib.h>
+ /* kmp API functions */
+ extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int);
+ extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);
+ extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void);
+ extern int __KAI_KMPC_CONVENTION kmp_get_library (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *);
+
+ /* Intel affinity API */
+ typedef void * kmp_affinity_mask_t;
+
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void);
+ extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *);
+ extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *);
+
+ /* OpenMP 4.0 affinity API */
+ typedef enum omp_proc_bind_t {
+ omp_proc_bind_false = 0,
+ omp_proc_bind_true = 1,
+ omp_proc_bind_master = 2,
+ omp_proc_bind_close = 3,
+ omp_proc_bind_spread = 4
+ } omp_proc_bind_t;
+
+ extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind (void);
+
+ extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t);
+ extern void __KAI_KMPC_CONVENTION kmp_free (void *);
+
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void);
+
+# undef __KAI_KMPC_CONVENTION
+
+ /* Warning:
+ The following typedefs are not standard, deprecated and will be removed in a future release.
+ */
+ typedef int omp_int_t;
+ typedef double omp_wtime_t;
+
+# ifdef __cplusplus
+ }
+# endif
+
+#endif /* __OMP_H */
+
diff --git a/final/runtime/src/include/40/omp_lib.f.var b/final/runtime/src/include/40/omp_lib.f.var
new file mode 100644
index 0000000..5ab0738
--- /dev/null
+++ b/final/runtime/src/include/40/omp_lib.f.var
@@ -0,0 +1,769 @@
+! include/40/omp_lib.f.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!dec$ fixedformlinesize:132
+
+ module omp_lib_kinds
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+ integer, parameter :: kmp_cancel_kind = omp_integer_kind
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*), parameter :: kmp_build_date = '@LIBOMP_BUILD_DATE@'
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_get_dynamic()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_team_size
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind()
+ use omp_lib_kinds
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_wtime()
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick ()
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(dflt_device)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) dflt_device
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_get_cancellation()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_cancellation
+ end function omp_get_cancellation
+
+ function omp_is_initial_device()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ subroutine omp_init_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial()
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround()
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput()
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string)
+ character*(*) string
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s()
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind) size
+ integer (kind=kmp_size_t_kind) alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind) nelem
+ integer (kind=kmp_size_t_kind) elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind) ptr
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on()
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off()
+ end subroutine kmp_set_warnings_off
+
+ function kmp_get_cancellation_status(cancelkind)
+ use omp_lib_kinds
+ integer (kind=kmp_cancel_kind) cancelkind
+ logical (kind=omp_logical_kind) kmp_get_cancellation_status
+ end function kmp_get_cancellation_status
+
+ end interface
+
+!dec$ if defined(_WIN32)
+!dec$ if defined(_WIN64) .or. defined(_M_AMD64)
+
+!***
+!*** The Fortran entry points must be in uppercase, even if the /Qlowercase
+!*** option is specified. The alias attribute ensures that the specified
+!*** string is used as the entry point.
+!***
+!*** On the Windows* OS IA-32 architecture, the Fortran entry points have an
+!*** underscore prepended. On the Windows* OS Intel(R) 64
+!*** architecture, no underscore is prepended.
+!***
+
+!dec$ attributes alias:'OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'OMP_GET_PROC_BIND' :: omp_get_proc_bind
+!dec$ attributes alias:'OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'OMP_GET_WTICK' :: omp_get_wtick
+!dec$ attributes alias:'OMP_GET_DEFAULT_DEVICE' :: omp_get_default_device
+!dec$ attributes alias:'OMP_SET_DEFAULT_DEVICE' :: omp_set_default_device
+!dec$ attributes alias:'OMP_GET_NUM_DEVICES' :: omp_get_num_devices
+!dec$ attributes alias:'OMP_GET_NUM_TEAMS' :: omp_get_num_teams
+!dec$ attributes alias:'OMP_GET_TEAM_NUM' :: omp_get_team_num
+!dec$ attributes alias:'OMP_GET_CANCELLATION' :: omp_get_cancellation
+!dec$ attributes alias:'OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device
+
+!dec$ attributes alias:'omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ attributes alias:'KMP_GET_CANCELLATION_STATUS' :: kmp_get_cancellation_status
+
+!dec$ else
+
+!***
+!*** On Windows* OS IA-32 architecture, the Fortran entry points have an underscore prepended.
+!***
+
+!dec$ attributes alias:'_OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'_OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'_OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'_OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'_OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'_OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'_OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'_OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'_OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'_OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'_OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'_OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'_OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'_OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'_OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'_OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'_OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'_OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'_OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'_OMP_GET_PROC_BIND' :: omp_get_proc_bind
+!dec$ attributes alias:'_OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'_OMP_GET_WTICK' :: omp_get_wtick
+!dec$ attributes alias:'_OMP_GET_DEFAULT_DEVICE' :: omp_get_default_device
+!dec$ attributes alias:'_OMP_SET_DEFAULT_DEVICE' :: omp_set_default_device
+!dec$ attributes alias:'_OMP_GET_NUM_DEVICES' :: omp_get_num_devices
+!dec$ attributes alias:'_OMP_GET_NUM_TEAMS' :: omp_get_num_teams
+!dec$ attributes alias:'_OMP_GET_TEAM_NUM' :: omp_get_team_num
+!dec$ attributes alias:'_OMP_GET_CANCELLATION' :: omp_get_cancellation
+!dec$ attributes alias:'_OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device
+
+!dec$ attributes alias:'_omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'_KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'_KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'_KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'_KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'_KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'_KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'_KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'_KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'_KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'_KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'_KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'_KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'_KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'_KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'_KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'_KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'_KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ attributes alias:'_KMP_GET_CANCELLATION_STATUS' :: kmp_get_cancellation_status
+
+!dec$ endif
+!dec$ endif
+
+!dec$ if defined(__linux)
+
+!***
+!*** The Linux* OS entry points are in lowercase, with an underscore appended.
+!***
+
+!dec$ attributes alias:'omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'omp_get_level_'::omp_get_level
+!dec$ attributes alias:'omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'omp_get_proc_bind_' :: omp_get_proc_bind
+!dec$ attributes alias:'omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'omp_get_wtick_'::omp_get_wtick
+!dec$ attributes alias:'omp_get_default_device_'::omp_get_default_device
+!dec$ attributes alias:'omp_set_default_device_'::omp_set_default_device
+!dec$ attributes alias:'omp_get_num_devices_'::omp_get_num_devices
+!dec$ attributes alias:'omp_get_num_teams_'::omp_get_num_teams
+!dec$ attributes alias:'omp_get_team_num_'::omp_get_team_num
+!dec$ attributes alias:'omp_get_cancellation_'::omp_get_cancellation
+!dec$ attributes alias:'omp_is_initial_device_'::omp_is_initial_device
+
+!dec$ attributes alias:'omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'kmp_free_'::kmp_free
+
+!dec$ attributes alias:'kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'kmp_set_warnings_off_'::kmp_set_warnings_off
+!dec$ attributes alias:'kmp_get_cancellation_status_'::kmp_get_cancellation_status
+
+!dec$ endif
+
+!dec$ if defined(__APPLE__)
+
+!***
+!*** The Mac entry points are in lowercase, with an both an underscore
+!*** appended and an underscore prepended.
+!***
+
+!dec$ attributes alias:'_omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'_omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'_omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'_omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'_omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'_omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'_omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'_omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'_omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'_omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'_omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'_omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'_omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'_omp_get_level_'::omp_get_level
+!dec$ attributes alias:'_omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'_omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'_omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'_omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'_omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'_omp_get_proc_bind_' :: omp_get_proc_bind
+!dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick
+!dec$ attributes alias:'_omp_get_num_teams_'::omp_get_num_teams
+!dec$ attributes alias:'_omp_get_team_num_'::omp_get_team_num
+!dec$ attributes alias:'_omp_get_cancellation_'::omp_get_cancellation
+!dec$ attributes alias:'_omp_is_initial_device_'::omp_is_initial_device
+
+!dec$ attributes alias:'_omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'_omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'_omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'_kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'_kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'_kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'_kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'_kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'_kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'_kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'_kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'_kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'_kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'_kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'_kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'_kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'_kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'_kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'_kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'_kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'_kmp_free_'::kmp_free
+
+!dec$ attributes alias:'_kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'_kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ attributes alias:'_kmp_get_cancellation_status_'::kmp_get_cancellation_status
+
+!dec$ endif
+
+ end module omp_lib
+
diff --git a/final/runtime/src/include/40/omp_lib.f90.var b/final/runtime/src/include/40/omp_lib.f90.var
new file mode 100644
index 0000000..e8e57e7
--- /dev/null
+++ b/final/runtime/src/include/40/omp_lib.f90.var
@@ -0,0 +1,455 @@
+! include/40/omp_lib.f90.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+ module omp_lib_kinds
+
+ use, intrinsic :: iso_c_binding
+
+ integer, parameter :: omp_integer_kind = c_int
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = c_float
+ integer, parameter :: kmp_double_kind = c_double
+ integer, parameter :: omp_lock_kind = c_intptr_t
+ integer, parameter :: omp_nest_lock_kind = c_intptr_t
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = c_intptr_t
+ integer, parameter :: kmp_size_t_kind = c_size_t
+ integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
+ integer, parameter :: kmp_cancel_kind = omp_integer_kind
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind), value :: kind
+ integer (kind=omp_integer_kind), value :: modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_wtime() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(dflt_device) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: dflt_device
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_get_cancellation() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_cancellation
+ end function omp_get_cancellation
+
+ function omp_is_initial_device() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ subroutine omp_init_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind), value :: size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial() bind(c)
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround() bind(c)
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput() bind(c)
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string) bind(c)
+ use, intrinsic :: iso_c_binding
+ character (kind=c_char) :: string(*)
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s() bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ integer (kind=kmp_size_t_kind), value :: alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind), value :: nelem
+ integer (kind=kmp_size_t_kind), value :: elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind), value :: ptr
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind), value :: ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on() bind(c)
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off() bind(c)
+ end subroutine kmp_set_warnings_off
+
+ function kmp_get_cancellation_status(cancelkind) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_cancel_kind), value :: cancelkind
+ logical (kind=omp_logical_kind) kmp_get_cancellation_status
+ end function kmp_get_cancellation_status
+
+ end interface
+
+ end module omp_lib
diff --git a/final/runtime/src/include/40/omp_lib.h.var b/final/runtime/src/include/40/omp_lib.h.var
new file mode 100644
index 0000000..1405ff5
--- /dev/null
+++ b/final/runtime/src/include/40/omp_lib.h.var
@@ -0,0 +1,567 @@
+! include/40/omp_lib.h.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!DIR$ fixedformlinesize:132
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable) bind(c)
+ import
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable) bind(c)
+ import
+ logical (kind=omp_logical_kind), value :: enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level) bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level) bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier) bind(c)
+ import
+ integer (kind=omp_sched_kind), value :: kind
+ integer (kind=omp_integer_kind), value :: modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier) bind(c)
+ import
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind() bind(c)
+ import
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_wtime() bind(c)
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick() bind(c)
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(dflt_device) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: dflt_device
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_is_initial_device() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ subroutine omp_init_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ import
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size) bind(c)
+ import
+ integer (kind=kmp_size_t_kind), value :: size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial() bind(c)
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround() bind(c)
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput() bind(c)
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string) bind(c)
+ character string(*)
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s() bind(c)
+ import
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask) bind(c)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask) bind(c)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ integer (kind=kmp_size_t_kind), value :: alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind), value :: nelem
+ integer (kind=kmp_size_t_kind), value :: elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind), value :: ptr
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr) bind(c)
+ import
+ integer (kind=kmp_pointer_kind), value :: ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on() bind(c)
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off() bind(c)
+ end subroutine kmp_set_warnings_off
+
+ end interface
+
+!DIR$ IF DEFINED (__INTEL_OFFLOAD)
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_num_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_dynamic
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nested
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_procs
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_parallel
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_final
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_dynamic
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_nested
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_limit
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_max_active_levels
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_active_levels
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_level
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_active_level
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_ancestor_thread_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_size
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_schedule
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_schedule
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_proc_bind
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtick
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_default_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_default_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_is_initial_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_devices
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_teams
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize_s
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_blocktime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_serial
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_turnaround
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_throughput
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_defaults
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize_s
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_blocktime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_library
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_max_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_create_affinity_mask
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_destroy_affinity_mask
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_unset_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_malloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_aligned_malloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_calloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_realloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_free
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_on
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_off
+
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!$omp declare target(omp_set_num_threads )
+!$omp declare target(omp_set_dynamic )
+!$omp declare target(omp_set_nested )
+!$omp declare target(omp_get_num_threads )
+!$omp declare target(omp_get_max_threads )
+!$omp declare target(omp_get_thread_num )
+!$omp declare target(omp_get_num_procs )
+!$omp declare target(omp_in_parallel )
+!$omp declare target(omp_in_final )
+!$omp declare target(omp_get_dynamic )
+!$omp declare target(omp_get_nested )
+!$omp declare target(omp_get_thread_limit )
+!$omp declare target(omp_set_max_active_levels )
+!$omp declare target(omp_get_max_active_levels )
+!$omp declare target(omp_get_level )
+!$omp declare target(omp_get_active_level )
+!$omp declare target(omp_get_ancestor_thread_num )
+!$omp declare target(omp_get_team_size )
+!$omp declare target(omp_set_schedule )
+!$omp declare target(omp_get_schedule )
+!$omp declare target(omp_get_proc_bind )
+!$omp declare target(omp_get_wtime )
+!$omp declare target(omp_get_wtick )
+!$omp declare target(omp_get_default_device )
+!$omp declare target(omp_set_default_device )
+!$omp declare target(omp_is_initial_device )
+!$omp declare target(omp_get_num_devices )
+!$omp declare target(omp_get_num_teams )
+!$omp declare target(omp_get_team_num )
+!$omp declare target(omp_init_lock )
+!$omp declare target(omp_destroy_lock )
+!$omp declare target(omp_set_lock )
+!$omp declare target(omp_unset_lock )
+!$omp declare target(omp_test_lock )
+!$omp declare target(omp_init_nest_lock )
+!$omp declare target(omp_destroy_nest_lock )
+!$omp declare target(omp_set_nest_lock )
+!$omp declare target(omp_unset_nest_lock )
+!$omp declare target(omp_test_nest_lock )
+!$omp declare target(kmp_set_stacksize )
+!$omp declare target(kmp_set_stacksize_s )
+!$omp declare target(kmp_set_blocktime )
+!$omp declare target(kmp_set_library_serial )
+!$omp declare target(kmp_set_library_turnaround )
+!$omp declare target(kmp_set_library_throughput )
+!$omp declare target(kmp_set_library )
+!$omp declare target(kmp_set_defaults )
+!$omp declare target(kmp_get_stacksize )
+!$omp declare target(kmp_get_stacksize_s )
+!$omp declare target(kmp_get_blocktime )
+!$omp declare target(kmp_get_library )
+!$omp declare target(kmp_set_affinity )
+!$omp declare target(kmp_get_affinity )
+!$omp declare target(kmp_get_affinity_max_proc )
+!$omp declare target(kmp_create_affinity_mask )
+!$omp declare target(kmp_destroy_affinity_mask )
+!$omp declare target(kmp_set_affinity_mask_proc )
+!$omp declare target(kmp_unset_affinity_mask_proc )
+!$omp declare target(kmp_get_affinity_mask_proc )
+!$omp declare target(kmp_malloc )
+!$omp declare target(kmp_aligned_malloc )
+!$omp declare target(kmp_calloc )
+!$omp declare target(kmp_realloc )
+!$omp declare target(kmp_free )
+!$omp declare target(kmp_set_warnings_on )
+!$omp declare target(kmp_set_warnings_off )
+!DIR$ ENDIF
+!DIR$ ENDIF
+
diff --git a/final/runtime/src/include/40/ompt.h.var b/final/runtime/src/include/40/ompt.h.var
new file mode 100644
index 0000000..e6e0dd1
--- /dev/null
+++ b/final/runtime/src/include/40/ompt.h.var
@@ -0,0 +1,515 @@
+/*
+ * include/40/ompt.h.var
+ */
+
+#ifndef __OMPT__
+#define __OMPT__
+
+/*****************************************************************************
+ * system include files
+ *****************************************************************************/
+
+#include <stdint.h>
+
+
+
+/*****************************************************************************
+ * iteration macros
+ *****************************************************************************/
+
+#define FOREACH_OMPT_INQUIRY_FN(macro) \
+ macro (ompt_enumerate_state) \
+ \
+ macro (ompt_set_callback) \
+ macro (ompt_get_callback) \
+ \
+ macro (ompt_get_idle_frame) \
+ macro (ompt_get_task_frame) \
+ \
+ macro (ompt_get_state) \
+ \
+ macro (ompt_get_parallel_id) \
+ macro (ompt_get_parallel_team_size) \
+ macro (ompt_get_task_id) \
+ macro (ompt_get_thread_id)
+
+#define FOREACH_OMPT_PLACEHOLDER_FN(macro) \
+ macro (ompt_idle) \
+ macro (ompt_overhead) \
+ macro (ompt_barrier_wait) \
+ macro (ompt_task_wait) \
+ macro (ompt_mutex_wait)
+
+#define FOREACH_OMPT_STATE(macro) \
+ \
+ /* first */ \
+ macro (ompt_state_first, 0x71) /* initial enumeration state */ \
+ \
+ /* work states (0..15) */ \
+ macro (ompt_state_work_serial, 0x00) /* working outside parallel */ \
+ macro (ompt_state_work_parallel, 0x01) /* working within parallel */ \
+ macro (ompt_state_work_reduction, 0x02) /* performing a reduction */ \
+ \
+ /* idle (16..31) */ \
+ macro (ompt_state_idle, 0x10) /* waiting for work */ \
+ \
+ /* overhead states (32..63) */ \
+ macro (ompt_state_overhead, 0x20) /* overhead excluding wait states */ \
+ \
+ /* barrier wait states (64..79) */ \
+ macro (ompt_state_wait_barrier, 0x40) /* waiting at a barrier */ \
+ macro (ompt_state_wait_barrier_implicit, 0x41) /* implicit barrier */ \
+ macro (ompt_state_wait_barrier_explicit, 0x42) /* explicit barrier */ \
+ \
+ /* task wait states (80..95) */ \
+ macro (ompt_state_wait_taskwait, 0x50) /* waiting at a taskwait */ \
+ macro (ompt_state_wait_taskgroup, 0x51) /* waiting at a taskgroup */ \
+ \
+ /* mutex wait states (96..111) */ \
+ macro (ompt_state_wait_lock, 0x60) /* waiting for lock */ \
+ macro (ompt_state_wait_nest_lock, 0x61) /* waiting for nest lock */ \
+ macro (ompt_state_wait_critical, 0x62) /* waiting for critical */ \
+ macro (ompt_state_wait_atomic, 0x63) /* waiting for atomic */ \
+ macro (ompt_state_wait_ordered, 0x64) /* waiting for ordered */ \
+ macro (ompt_state_wait_single, 0x6F) /* waiting for single region (non-standard!) */ \
+ \
+ /* misc (112..127) */ \
+ macro (ompt_state_undefined, 0x70) /* undefined thread state */
+
+
+#define FOREACH_OMPT_EVENT(macro) \
+ \
+ /*--- Mandatory Events ---*/ \
+ macro (ompt_event_parallel_begin, ompt_new_parallel_callback_t, 1) /* parallel begin */ \
+ macro (ompt_event_parallel_end, ompt_end_parallel_callback_t, 2) /* parallel end */ \
+ \
+ macro (ompt_event_task_begin, ompt_new_task_callback_t, 3) /* task begin */ \
+ macro (ompt_event_task_end, ompt_task_callback_t, 4) /* task destroy */ \
+ \
+ macro (ompt_event_thread_begin, ompt_thread_type_callback_t, 5) /* thread begin */ \
+ macro (ompt_event_thread_end, ompt_thread_type_callback_t, 6) /* thread end */ \
+ \
+ macro (ompt_event_control, ompt_control_callback_t, 7) /* support control calls */ \
+ \
+ macro (ompt_event_runtime_shutdown, ompt_callback_t, 8) /* runtime shutdown */ \
+ \
+ /*--- Optional Events (blame shifting, ompt_event_unimplemented) ---*/ \
+ macro (ompt_event_idle_begin, ompt_thread_callback_t, 9) /* begin idle state */ \
+ macro (ompt_event_idle_end, ompt_thread_callback_t, 10) /* end idle state */ \
+ \
+ macro (ompt_event_wait_barrier_begin, ompt_parallel_callback_t, 11) /* begin wait at barrier */ \
+ macro (ompt_event_wait_barrier_end, ompt_parallel_callback_t, 12) /* end wait at barrier */ \
+ \
+ macro (ompt_event_wait_taskwait_begin, ompt_parallel_callback_t, 13) /* begin wait at taskwait */ \
+ macro (ompt_event_wait_taskwait_end, ompt_parallel_callback_t, 14) /* end wait at taskwait */ \
+ \
+ macro (ompt_event_wait_taskgroup_begin, ompt_parallel_callback_t, 15) /* begin wait at taskgroup */\
+ macro (ompt_event_wait_taskgroup_end, ompt_parallel_callback_t, 16) /* end wait at taskgroup */ \
+ \
+ macro (ompt_event_release_lock, ompt_wait_callback_t, 17) /* lock release */ \
+ macro (ompt_event_release_nest_lock_last, ompt_wait_callback_t, 18) /* last nest lock release */ \
+ macro (ompt_event_release_critical, ompt_wait_callback_t, 19) /* critical release */ \
+ \
+ macro (ompt_event_release_atomic, ompt_wait_callback_t, 20) /* atomic release */ \
+ \
+ macro (ompt_event_release_ordered, ompt_wait_callback_t, 21) /* ordered release */ \
+ \
+ /*--- Optional Events (synchronous events, ompt_event_unimplemented) --- */ \
+ macro (ompt_event_implicit_task_begin, ompt_parallel_callback_t, 22) /* implicit task begin */ \
+ macro (ompt_event_implicit_task_end, ompt_parallel_callback_t, 23) /* implicit task end */ \
+ \
+ macro (ompt_event_initial_task_begin, ompt_parallel_callback_t, 24) /* initial task begin */ \
+ macro (ompt_event_initial_task_end, ompt_parallel_callback_t, 25) /* initial task end */ \
+ \
+ macro (ompt_event_task_switch, ompt_task_pair_callback_t, 26) /* task switch */ \
+ \
+ macro (ompt_event_loop_begin, ompt_new_workshare_callback_t, 27) /* task at loop begin */ \
+ macro (ompt_event_loop_end, ompt_parallel_callback_t, 28) /* task at loop end */ \
+ \
+ macro (ompt_event_sections_begin, ompt_new_workshare_callback_t, 29) /* task at sections begin */\
+ macro (ompt_event_sections_end, ompt_parallel_callback_t, 30) /* task at sections end */ \
+ \
+ macro (ompt_event_single_in_block_begin, ompt_new_workshare_callback_t, 31) /* task at single begin*/ \
+ macro (ompt_event_single_in_block_end, ompt_parallel_callback_t, 32) /* task at single end */ \
+ \
+ macro (ompt_event_single_others_begin, ompt_parallel_callback_t, 33) /* task at single begin */ \
+ macro (ompt_event_single_others_end, ompt_parallel_callback_t, 34) /* task at single end */ \
+ \
+ macro (ompt_event_workshare_begin, ompt_new_workshare_callback_t, 35) /* task at workshare begin */\
+ macro (ompt_event_workshare_end, ompt_parallel_callback_t, 36) /* task at workshare end */ \
+ \
+ macro (ompt_event_master_begin, ompt_parallel_callback_t, 37) /* task at master begin */ \
+ macro (ompt_event_master_end, ompt_parallel_callback_t, 38) /* task at master end */ \
+ \
+ macro (ompt_event_barrier_begin, ompt_parallel_callback_t, 39) /* task at barrier begin */ \
+ macro (ompt_event_barrier_end, ompt_parallel_callback_t, 40) /* task at barrier end */ \
+ \
+ macro (ompt_event_taskwait_begin, ompt_parallel_callback_t, 41) /* task at taskwait begin */ \
+ macro (ompt_event_taskwait_end, ompt_parallel_callback_t, 42) /* task at task wait end */ \
+ \
+ macro (ompt_event_taskgroup_begin, ompt_parallel_callback_t, 43) /* task at taskgroup begin */\
+ macro (ompt_event_taskgroup_end, ompt_parallel_callback_t, 44) /* task at taskgroup end */ \
+ \
+ macro (ompt_event_release_nest_lock_prev, ompt_wait_callback_t, 45) /* prev nest lock release */ \
+ \
+ macro (ompt_event_wait_lock, ompt_wait_callback_t, 46) /* lock wait */ \
+ macro (ompt_event_wait_nest_lock, ompt_wait_callback_t, 47) /* nest lock wait */ \
+ macro (ompt_event_wait_critical, ompt_wait_callback_t, 48) /* critical wait */ \
+ macro (ompt_event_wait_atomic, ompt_wait_callback_t, 49) /* atomic wait */ \
+ macro (ompt_event_wait_ordered, ompt_wait_callback_t, 50) /* ordered wait */ \
+ \
+ macro (ompt_event_acquired_lock, ompt_wait_callback_t, 51) /* lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_first, ompt_wait_callback_t, 52) /* 1st nest lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_next, ompt_wait_callback_t, 53) /* next nest lock acquired*/ \
+ macro (ompt_event_acquired_critical, ompt_wait_callback_t, 54) /* critical acquired */ \
+ macro (ompt_event_acquired_atomic, ompt_wait_callback_t, 55) /* atomic acquired */ \
+ macro (ompt_event_acquired_ordered, ompt_wait_callback_t, 56) /* ordered acquired */ \
+ \
+ macro (ompt_event_init_lock, ompt_wait_callback_t, 57) /* lock init */ \
+ macro (ompt_event_init_nest_lock, ompt_wait_callback_t, 58) /* nest lock init */ \
+ \
+ macro (ompt_event_destroy_lock, ompt_wait_callback_t, 59) /* lock destruction */ \
+ macro (ompt_event_destroy_nest_lock, ompt_wait_callback_t, 60) /* nest lock destruction */ \
+ \
+ macro (ompt_event_flush, ompt_callback_t, 61) /* after executing flush */ \
+ \
+ macro (ompt_event_task_dependences, ompt_task_dependences_callback_t, 69) /* report task dependences */\
+ macro (ompt_event_task_dependence_pair, ompt_task_pair_callback_t, 70) /* report task dependence pair */
+
+
+
+/*****************************************************************************
+ * data types
+ *****************************************************************************/
+
+/*---------------------
+ * identifiers
+ *---------------------*/
+
+typedef uint64_t ompt_thread_id_t;
+#define ompt_thread_id_none ((ompt_thread_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_task_id_t;
+#define ompt_task_id_none ((ompt_task_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_parallel_id_t;
+#define ompt_parallel_id_none ((ompt_parallel_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_wait_id_t;
+#define ompt_wait_id_none ((ompt_wait_id_t) 0) /* non-standard */
+
+
+/*---------------------
+ * ompt_frame_t
+ *---------------------*/
+
+typedef struct ompt_frame_s {
+ void *exit_runtime_frame; /* next frame is user code */
+ void *reenter_runtime_frame; /* previous frame is user code */
+} ompt_frame_t;
+
+
+/*---------------------
+ * dependences types
+ *---------------------*/
+
+typedef enum ompt_task_dependence_flag_e {
+ // a two bit field for the dependence type
+ ompt_task_dependence_type_out = 1,
+ ompt_task_dependence_type_in = 2,
+ ompt_task_dependence_type_inout = 3,
+} ompt_task_dependence_flag_t;
+
+typedef struct ompt_task_dependence_s {
+ void *variable_addr;
+ uint32_t dependence_flags;
+} ompt_task_dependence_t;
+
+
+/*****************************************************************************
+ * enumerations for thread states and runtime events
+ *****************************************************************************/
+
+/*---------------------
+ * runtime states
+ *---------------------*/
+
+typedef enum {
+#define ompt_state_macro(state, code) state = code,
+ FOREACH_OMPT_STATE(ompt_state_macro)
+#undef ompt_state_macro
+} ompt_state_t;
+
+
+/*---------------------
+ * runtime events
+ *---------------------*/
+
+typedef enum {
+#define ompt_event_macro(event, callback, eventid) event = eventid,
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+#undef ompt_event_macro
+} ompt_event_t;
+
+
+/*---------------------
+ * set callback results
+ *---------------------*/
+typedef enum {
+ ompt_set_result_registration_error = 0,
+ ompt_set_result_event_may_occur_no_callback = 1,
+ ompt_set_result_event_never_occurs = 2,
+ ompt_set_result_event_may_occur_callback_some = 3,
+ ompt_set_result_event_may_occur_callback_always = 4,
+} ompt_set_result_t;
+
+
+
+/*****************************************************************************
+ * callback signatures
+ *****************************************************************************/
+
+/* initialization */
+typedef void (*ompt_interface_fn_t)(void);
+
+typedef ompt_interface_fn_t (*ompt_function_lookup_t)(
+ const char * /* entry point to look up */
+);
+
+/* threads */
+typedef void (*ompt_thread_callback_t) (
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef enum {
+ ompt_thread_initial = 1, // start the enumeration at 1
+ ompt_thread_worker = 2,
+ ompt_thread_other = 3
+} ompt_thread_type_t;
+
+typedef enum {
+ ompt_invoker_program = 0, /* program invokes master task */
+ ompt_invoker_runtime = 1 /* runtime invokes master task */
+} ompt_invoker_t;
+
+typedef void (*ompt_thread_type_callback_t) (
+ ompt_thread_type_t thread_type, /* type of thread */
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef void (*ompt_wait_callback_t) (
+ ompt_wait_id_t wait_id /* wait id */
+);
+
+/* parallel and workshares */
+typedef void (*ompt_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_new_workshare_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ void *workshare_function /* pointer to outlined function */
+);
+
+typedef void (*ompt_new_parallel_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data of parent task */
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ uint32_t requested_team_size, /* number of threads in team */
+ void *parallel_function, /* pointer to outlined function */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+typedef void (*ompt_end_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id, /* id of task */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+/* tasks */
+typedef void (*ompt_task_callback_t) (
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_task_pair_callback_t) (
+ ompt_task_id_t first_task_id,
+ ompt_task_id_t second_task_id
+);
+
+typedef void (*ompt_new_task_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data for parent task */
+ ompt_task_id_t new_task_id, /* id of created task */
+ void *task_function /* pointer to outlined function */
+);
+
+/* task dependences */
+typedef void (*ompt_task_dependences_callback_t) (
+ ompt_task_id_t task_id, /* ID of task with dependences */
+ const ompt_task_dependence_t *deps,/* vector of task dependences */
+ int ndeps /* number of dependences */
+);
+
+/* program */
+typedef void (*ompt_control_callback_t) (
+ uint64_t command, /* command of control call */
+ uint64_t modifier /* modifier of control call */
+);
+
+typedef void (*ompt_callback_t)(void);
+
+
+/****************************************************************************
+ * ompt API
+ ***************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OMPT_API_FNTYPE(fn) fn##_t
+
+#define OMPT_API_FUNCTION(return_type, fn, args) \
+ typedef return_type (*OMPT_API_FNTYPE(fn)) args
+
+
+
+/****************************************************************************
+ * INQUIRY FUNCTIONS
+ ***************************************************************************/
+
+/* state */
+OMPT_API_FUNCTION(ompt_state_t, ompt_get_state, (
+ ompt_wait_id_t *ompt_wait_id
+));
+
+/* thread */
+OMPT_API_FUNCTION(ompt_thread_id_t, ompt_get_thread_id, (void));
+
+OMPT_API_FUNCTION(void *, ompt_get_idle_frame, (void));
+
+/* parallel region */
+OMPT_API_FUNCTION(ompt_parallel_id_t, ompt_get_parallel_id, (
+ int ancestor_level
+));
+
+OMPT_API_FUNCTION(int, ompt_get_parallel_team_size, (
+ int ancestor_level
+));
+
+/* task */
+OMPT_API_FUNCTION(ompt_task_id_t, ompt_get_task_id, (
+ int depth
+));
+
+OMPT_API_FUNCTION(ompt_frame_t *, ompt_get_task_frame, (
+ int depth
+));
+
+
+
+/****************************************************************************
+ * PLACEHOLDERS FOR PERFORMANCE REPORTING
+ ***************************************************************************/
+
+/* idle */
+OMPT_API_FUNCTION(void, ompt_idle, (
+ void
+));
+
+/* overhead */
+OMPT_API_FUNCTION(void, ompt_overhead, (
+ void
+));
+
+/* barrier wait */
+OMPT_API_FUNCTION(void, ompt_barrier_wait, (
+ void
+));
+
+/* task wait */
+OMPT_API_FUNCTION(void, ompt_task_wait, (
+ void
+));
+
+/* mutex wait */
+OMPT_API_FUNCTION(void, ompt_mutex_wait, (
+ void
+));
+
+
+
+/****************************************************************************
+ * INITIALIZATION FUNCTIONS
+ ***************************************************************************/
+
+OMPT_API_FUNCTION(void, ompt_initialize, (
+ ompt_function_lookup_t ompt_fn_lookup,
+ const char *runtime_version,
+ unsigned int ompt_version
+));
+
+
+/* initialization interface to be defined by tool */
+ompt_initialize_t ompt_tool(void);
+
+typedef enum opt_init_mode_e {
+ ompt_init_mode_never = 0,
+ ompt_init_mode_false = 1,
+ ompt_init_mode_true = 2,
+ ompt_init_mode_always = 3
+} ompt_init_mode_t;
+
+OMPT_API_FUNCTION(int, ompt_set_callback, (
+ ompt_event_t event,
+ ompt_callback_t callback
+));
+
+typedef enum ompt_set_callback_rc_e { /* non-standard */
+ ompt_set_callback_error = 0,
+ ompt_has_event_no_callback = 1,
+ ompt_no_event_no_callback = 2,
+ ompt_has_event_may_callback = 3,
+ ompt_has_event_must_callback = 4,
+} ompt_set_callback_rc_t;
+
+
+OMPT_API_FUNCTION(int, ompt_get_callback, (
+ ompt_event_t event,
+ ompt_callback_t *callback
+));
+
+
+
+/****************************************************************************
+ * MISCELLANEOUS FUNCTIONS
+ ***************************************************************************/
+
+/* control */
+// FIXME: remove workaround for clang
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp declare target
+#endif
+void ompt_control(
+ uint64_t command,
+ uint64_t modifier
+);
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp end declare target
+#endif
+
+/* state enumeration */
+OMPT_API_FUNCTION(int, ompt_enumerate_state, (
+ int current_state,
+ int *next_state,
+ const char **next_state_name
+));
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
+
diff --git a/final/runtime/src/include/45/omp.h.var b/final/runtime/src/include/45/omp.h.var
new file mode 100644
index 0000000..e222fff
--- /dev/null
+++ b/final/runtime/src/include/45/omp.h.var
@@ -0,0 +1,198 @@
+/*
+ * include/45/omp.h.var
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef __OMP_H
+# define __OMP_H
+
+# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@
+# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@
+# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@
+# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@"
+
+# ifdef __cplusplus
+ extern "C" {
+# endif
+
+# if defined(_WIN32)
+# define __KAI_KMPC_CONVENTION __cdecl
+# else
+# define __KAI_KMPC_CONVENTION
+# endif
+
+ /* schedule kind constants */
+ typedef enum omp_sched_t {
+ omp_sched_static = 1,
+ omp_sched_dynamic = 2,
+ omp_sched_guided = 3,
+ omp_sched_auto = 4
+ } omp_sched_t;
+
+ /* set API functions */
+ extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_nested (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int);
+ extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int);
+
+ /* query API functions */
+ extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_nested (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_parallel (void);
+ extern int __KAI_KMPC_CONVENTION omp_in_final (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_active_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_level (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_team_size (int);
+ extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void);
+ extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *);
+ extern int __KAI_KMPC_CONVENTION omp_get_max_task_priority (void);
+
+ /* lock API functions */
+ typedef struct omp_lock_t {
+ void * _lk;
+ } omp_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *);
+
+ /* nested lock API functions */
+ typedef struct omp_nest_lock_t {
+ void * _lk;
+ } omp_nest_lock_t;
+
+ extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *);
+ extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *);
+ extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *);
+
+ /* lock hint type for dynamic user lock */
+ typedef enum omp_lock_hint_t {
+ omp_lock_hint_none = 0,
+ omp_lock_hint_uncontended = 1,
+ omp_lock_hint_contended = (1<<1 ),
+ omp_lock_hint_nonspeculative = (1<<2 ),
+ omp_lock_hint_speculative = (1<<3 ),
+ kmp_lock_hint_hle = (1<<16),
+ kmp_lock_hint_rtm = (1<<17),
+ kmp_lock_hint_adaptive = (1<<18)
+ } omp_lock_hint_t;
+
+ /* hinted lock initializers */
+ extern void __KAI_KMPC_CONVENTION omp_init_lock_with_hint(omp_lock_t *, omp_lock_hint_t);
+ extern void __KAI_KMPC_CONVENTION omp_init_nest_lock_with_hint(omp_nest_lock_t *, omp_lock_hint_t);
+
+ /* time API functions */
+ extern double __KAI_KMPC_CONVENTION omp_get_wtime (void);
+ extern double __KAI_KMPC_CONVENTION omp_get_wtick (void);
+
+ /* OpenMP 4.0 */
+ extern int __KAI_KMPC_CONVENTION omp_get_default_device (void);
+ extern void __KAI_KMPC_CONVENTION omp_set_default_device (int);
+ extern int __KAI_KMPC_CONVENTION omp_is_initial_device (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_devices (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_num_teams (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_team_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_cancellation (void);
+
+# include <stdlib.h>
+ /* OpenMP 4.5 */
+ extern int __KAI_KMPC_CONVENTION omp_get_initial_device (void);
+ extern void* __KAI_KMPC_CONVENTION omp_target_alloc(size_t, int);
+ extern void __KAI_KMPC_CONVENTION omp_target_free(void *, int);
+ extern int __KAI_KMPC_CONVENTION omp_target_is_present(void *, int);
+ extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, void *, size_t, size_t, size_t, int, int);
+ extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, void *, size_t, int, const size_t *,
+ const size_t *, const size_t *, const size_t *, const size_t *, int, int);
+ extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(void *, void *, size_t, size_t, int);
+ extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(void *, int);
+
+ /* kmp API functions */
+ extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int);
+ extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);
+ extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void);
+ extern int __KAI_KMPC_CONVENTION kmp_get_library (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library (int);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *);
+ extern void __KAI_KMPC_CONVENTION kmp_set_disp_num_buffers (int);
+
+ /* Intel affinity API */
+ typedef void * kmp_affinity_mask_t;
+
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void);
+ extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *);
+ extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *);
+ extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *);
+
+ /* OpenMP 4.0 affinity API */
+ typedef enum omp_proc_bind_t {
+ omp_proc_bind_false = 0,
+ omp_proc_bind_true = 1,
+ omp_proc_bind_master = 2,
+ omp_proc_bind_close = 3,
+ omp_proc_bind_spread = 4
+ } omp_proc_bind_t;
+
+ extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind (void);
+
+ /* OpenMP 4.5 affinity API */
+ extern int __KAI_KMPC_CONVENTION omp_get_num_places (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_place_num_procs (int);
+ extern void __KAI_KMPC_CONVENTION omp_get_place_proc_ids (int, int *);
+ extern int __KAI_KMPC_CONVENTION omp_get_place_num (void);
+ extern int __KAI_KMPC_CONVENTION omp_get_partition_num_places (void);
+ extern void __KAI_KMPC_CONVENTION omp_get_partition_place_nums (int *);
+
+ extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t);
+ extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t);
+ extern void __KAI_KMPC_CONVENTION kmp_free (void *);
+
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void);
+ extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void);
+
+# undef __KAI_KMPC_CONVENTION
+
+ /* Warning:
+ The following typedefs are not standard, deprecated and will be removed in a future release.
+ */
+ typedef int omp_int_t;
+ typedef double omp_wtime_t;
+
+# ifdef __cplusplus
+ }
+# endif
+
+#endif /* __OMP_H */
+
diff --git a/final/runtime/src/include/45/omp_lib.f.var b/final/runtime/src/include/45/omp_lib.f.var
new file mode 100644
index 0000000..2d41795
--- /dev/null
+++ b/final/runtime/src/include/45/omp_lib.f.var
@@ -0,0 +1,840 @@
+! include/45/omp_lib.f.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!dec$ fixedformlinesize:132
+
+ module omp_lib_kinds
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+ integer, parameter :: kmp_cancel_kind = omp_integer_kind
+ integer, parameter :: omp_lock_hint_kind = omp_integer_kind
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*), parameter :: kmp_build_date = '@LIBOMP_BUILD_DATE@'
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
+
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = 0
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = 1
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = 2
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = 4
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = 8
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle = 65536
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm = 131072
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive = 262144
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(nthreads)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) nthreads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(enable)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) enable
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_get_dynamic()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) level
+ integer (kind=omp_integer_kind) omp_get_team_size
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, modifier)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) modifier
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind()
+ use omp_lib_kinds
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_num_places()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_places
+ end function omp_get_num_places
+
+ function omp_get_place_num_procs(place_num)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) place_num
+ integer (kind=omp_integer_kind) omp_get_place_num_procs
+ end function omp_get_place_num_procs
+
+ subroutine omp_get_place_proc_ids(place_num, ids)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) place_num
+ integer (kind=kmp_pointer_kind) ids
+ end subroutine omp_get_place_proc_ids
+
+ function omp_get_place_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_place_num
+ end function omp_get_place_num
+
+ function omp_get_partition_num_places()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_partition_num_places
+ end function omp_get_partition_num_places
+
+ subroutine omp_get_partition_place_nums(place_nums)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) place_nums
+ end subroutine omp_get_partition_place_nums
+
+ function omp_get_wtime()
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick ()
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(dflt_device)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) dflt_device
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_get_cancellation()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_cancellation
+ end function omp_get_cancellation
+
+ function omp_is_initial_device()
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ subroutine omp_init_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) lockvar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(lockvar)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) lockvar
+ end function omp_test_nest_lock
+
+ function omp_get_max_task_priority()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_task_priority
+ end function omp_get_max_task_priority
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial()
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround()
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput()
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string)
+ character*(*) string
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s()
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ function kmp_set_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc()
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind) proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind) size
+ integer (kind=kmp_size_t_kind) alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind) nelem
+ integer (kind=kmp_size_t_kind) elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind) ptr
+ integer (kind=kmp_size_t_kind) size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on()
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off()
+ end subroutine kmp_set_warnings_off
+
+ function kmp_get_cancellation_status(cancelkind)
+ use omp_lib_kinds
+ integer (kind=kmp_cancel_kind) cancelkind
+ logical (kind=omp_logical_kind) kmp_get_cancellation_status
+ end function kmp_get_cancellation_status
+
+ subroutine kmp_init_lock_with_hint(lockvar, lockhint)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) lockvar
+ integer (kind=omp_lock_hint_kind) lockhint
+ end subroutine kmp_init_lock_with_hint
+
+ subroutine kmp_init_nest_lock_with_hint(lockvar, lockhint)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) lockvar
+ integer (kind=omp_lock_hint_kind) lockhint
+ end subroutine kmp_init_nest_lock_with_hint
+
+ end interface
+
+!dec$ if defined(_WIN32)
+!dec$ if defined(_WIN64) .or. defined(_M_AMD64)
+
+!***
+!*** The Fortran entry points must be in uppercase, even if the /Qlowercase
+!*** option is specified. The alias attribute ensures that the specified
+!*** string is used as the entry point.
+!***
+!*** On the Windows* OS IA-32 architecture, the Fortran entry points have an
+!*** underscore prepended. On the Windows* OS Intel(R) 64
+!*** architecture, no underscore is prepended.
+!***
+
+!dec$ attributes alias:'OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'OMP_GET_PROC_BIND' :: omp_get_proc_bind
+!dec$ attributes alias:'OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'OMP_GET_WTICK' :: omp_get_wtick
+!dec$ attributes alias:'OMP_GET_DEFAULT_DEVICE' :: omp_get_default_device
+!dec$ attributes alias:'OMP_SET_DEFAULT_DEVICE' :: omp_set_default_device
+!dec$ attributes alias:'OMP_GET_NUM_DEVICES' :: omp_get_num_devices
+!dec$ attributes alias:'OMP_GET_NUM_TEAMS' :: omp_get_num_teams
+!dec$ attributes alias:'OMP_GET_TEAM_NUM' :: omp_get_team_num
+!dec$ attributes alias:'OMP_GET_CANCELLATION' :: omp_get_cancellation
+!dec$ attributes alias:'OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device
+!dec$ attributes alias:'OMP_GET_MAX_TASK_PRIORITY' :: omp_get_max_task_priority
+
+!dec$ attributes alias:'omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'omp_init_lock_with_hint' :: omp_init_lock_with_hint
+!dec$ attributes alias:'omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'omp_init_nest_lock_with_hint' :: omp_init_nest_lock_with_hint
+!dec$ attributes alias:'omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ attributes alias:'KMP_GET_CANCELLATION_STATUS' :: kmp_get_cancellation_status
+
+!dec$ else
+
+!***
+!*** On Windows* OS IA-32 architecture, the Fortran entry points have an underscore prepended.
+!***
+
+!dec$ attributes alias:'_OMP_SET_NUM_THREADS' :: omp_set_num_threads
+!dec$ attributes alias:'_OMP_SET_DYNAMIC' :: omp_set_dynamic
+!dec$ attributes alias:'_OMP_SET_NESTED' :: omp_set_nested
+!dec$ attributes alias:'_OMP_GET_NUM_THREADS' :: omp_get_num_threads
+!dec$ attributes alias:'_OMP_GET_MAX_THREADS' :: omp_get_max_threads
+!dec$ attributes alias:'_OMP_GET_THREAD_NUM' :: omp_get_thread_num
+!dec$ attributes alias:'_OMP_GET_NUM_PROCS' :: omp_get_num_procs
+!dec$ attributes alias:'_OMP_IN_PARALLEL' :: omp_in_parallel
+!dec$ attributes alias:'_OMP_GET_DYNAMIC' :: omp_get_dynamic
+!dec$ attributes alias:'_OMP_GET_NESTED' :: omp_get_nested
+!dec$ attributes alias:'_OMP_GET_THREAD_LIMIT' :: omp_get_thread_limit
+!dec$ attributes alias:'_OMP_SET_MAX_ACTIVE_LEVELS' :: omp_set_max_active_levels
+!dec$ attributes alias:'_OMP_GET_MAX_ACTIVE_LEVELS' :: omp_get_max_active_levels
+!dec$ attributes alias:'_OMP_GET_LEVEL' :: omp_get_level
+!dec$ attributes alias:'_OMP_GET_ACTIVE_LEVEL' :: omp_get_active_level
+!dec$ attributes alias:'_OMP_GET_ANCESTOR_THREAD_NUM' :: omp_get_ancestor_thread_num
+!dec$ attributes alias:'_OMP_GET_TEAM_SIZE' :: omp_get_team_size
+!dec$ attributes alias:'_OMP_SET_SCHEDULE' :: omp_set_schedule
+!dec$ attributes alias:'_OMP_GET_SCHEDULE' :: omp_get_schedule
+!dec$ attributes alias:'_OMP_GET_PROC_BIND' :: omp_get_proc_bind
+!dec$ attributes alias:'_OMP_GET_WTIME' :: omp_get_wtime
+!dec$ attributes alias:'_OMP_GET_WTICK' :: omp_get_wtick
+!dec$ attributes alias:'_OMP_GET_DEFAULT_DEVICE' :: omp_get_default_device
+!dec$ attributes alias:'_OMP_SET_DEFAULT_DEVICE' :: omp_set_default_device
+!dec$ attributes alias:'_OMP_GET_NUM_DEVICES' :: omp_get_num_devices
+!dec$ attributes alias:'_OMP_GET_NUM_TEAMS' :: omp_get_num_teams
+!dec$ attributes alias:'_OMP_GET_TEAM_NUM' :: omp_get_team_num
+!dec$ attributes alias:'_OMP_GET_CANCELLATION' :: omp_get_cancellation
+!dec$ attributes alias:'_OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device
+!dec$ attributes alias:'_OMP_GET_MAX_TASK_PRIORTY' :: omp_get_max_task_priority
+
+!dec$ attributes alias:'_omp_init_lock' :: omp_init_lock
+!dec$ attributes alias:'_omp_init_lock_with_hint' :: omp_init_lock_with_hint
+!dec$ attributes alias:'_omp_destroy_lock' :: omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock' :: omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock' :: omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock' :: omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock' :: omp_init_nest_lock
+!dec$ attributes alias:'_omp_init_nest_lock_with_hint' :: omp_init_nest_lock_with_hint
+!dec$ attributes alias:'_omp_destroy_nest_lock' :: omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock' :: omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock' :: omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock' :: omp_test_nest_lock
+
+!dec$ attributes alias:'_KMP_SET_STACKSIZE'::kmp_set_stacksize
+!dec$ attributes alias:'_KMP_SET_STACKSIZE_S'::kmp_set_stacksize_s
+!dec$ attributes alias:'_KMP_SET_BLOCKTIME'::kmp_set_blocktime
+!dec$ attributes alias:'_KMP_SET_LIBRARY_SERIAL'::kmp_set_library_serial
+!dec$ attributes alias:'_KMP_SET_LIBRARY_TURNAROUND'::kmp_set_library_turnaround
+!dec$ attributes alias:'_KMP_SET_LIBRARY_THROUGHPUT'::kmp_set_library_throughput
+!dec$ attributes alias:'_KMP_SET_LIBRARY'::kmp_set_library
+!dec$ attributes alias:'_KMP_GET_STACKSIZE'::kmp_get_stacksize
+!dec$ attributes alias:'_KMP_GET_STACKSIZE_S'::kmp_get_stacksize_s
+!dec$ attributes alias:'_KMP_GET_BLOCKTIME'::kmp_get_blocktime
+!dec$ attributes alias:'_KMP_GET_LIBRARY'::kmp_get_library
+!dec$ attributes alias:'_KMP_SET_AFFINITY'::kmp_set_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY'::kmp_get_affinity
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MAX_PROC'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_KMP_CREATE_AFFINITY_MASK'::kmp_create_affinity_mask
+!dec$ attributes alias:'_KMP_DESTROY_AFFINITY_MASK'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_KMP_SET_AFFINITY_MASK_PROC'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
+!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
+!dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc
+!dec$ attributes alias:'_KMP_REALLOC'::kmp_realloc
+!dec$ attributes alias:'_KMP_FREE'::kmp_free
+
+!dec$ attributes alias:'_KMP_SET_WARNINGS_ON'::kmp_set_warnings_on
+!dec$ attributes alias:'_KMP_SET_WARNINGS_OFF'::kmp_set_warnings_off
+
+!dec$ attributes alias:'_KMP_GET_CANCELLATION_STATUS' :: kmp_get_cancellation_status
+
+!dec$ endif
+!dec$ endif
+
+!dec$ if defined(__linux)
+
+!***
+!*** The Linux* OS entry points are in lowercase, with an underscore appended.
+!***
+
+!dec$ attributes alias:'omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'omp_get_level_'::omp_get_level
+!dec$ attributes alias:'omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'omp_get_proc_bind_' :: omp_get_proc_bind
+!dec$ attributes alias:'omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'omp_get_wtick_'::omp_get_wtick
+!dec$ attributes alias:'omp_get_default_device_'::omp_get_default_device
+!dec$ attributes alias:'omp_set_default_device_'::omp_set_default_device
+!dec$ attributes alias:'omp_get_num_devices_'::omp_get_num_devices
+!dec$ attributes alias:'omp_get_num_teams_'::omp_get_num_teams
+!dec$ attributes alias:'omp_get_team_num_'::omp_get_team_num
+!dec$ attributes alias:'omp_get_cancellation_'::omp_get_cancellation
+!dec$ attributes alias:'omp_is_initial_device_'::omp_is_initial_device
+!dec$ attributes alias:'omp_get_max_task_priority_'::omp_get_max_task_priority
+
+!dec$ attributes alias:'omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'omp_init_lock_with_hint_'::omp_init_lock_with_hint
+!dec$ attributes alias:'omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'omp_init_nest_lock_with_hint_'::omp_init_nest_lock_with_hint
+!dec$ attributes alias:'omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'kmp_free_'::kmp_free
+
+!dec$ attributes alias:'kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'kmp_set_warnings_off_'::kmp_set_warnings_off
+!dec$ attributes alias:'kmp_get_cancellation_status_'::kmp_get_cancellation_status
+
+!dec$ endif
+
+!dec$ if defined(__APPLE__)
+
+!***
+!*** The Mac entry points are in lowercase, with an both an underscore
+!*** appended and an underscore prepended.
+!***
+
+!dec$ attributes alias:'_omp_set_num_threads_'::omp_set_num_threads
+!dec$ attributes alias:'_omp_set_dynamic_'::omp_set_dynamic
+!dec$ attributes alias:'_omp_set_nested_'::omp_set_nested
+!dec$ attributes alias:'_omp_get_num_threads_'::omp_get_num_threads
+!dec$ attributes alias:'_omp_get_max_threads_'::omp_get_max_threads
+!dec$ attributes alias:'_omp_get_thread_num_'::omp_get_thread_num
+!dec$ attributes alias:'_omp_get_num_procs_'::omp_get_num_procs
+!dec$ attributes alias:'_omp_in_parallel_'::omp_in_parallel
+!dec$ attributes alias:'_omp_get_dynamic_'::omp_get_dynamic
+!dec$ attributes alias:'_omp_get_nested_'::omp_get_nested
+!dec$ attributes alias:'_omp_get_thread_limit_'::omp_get_thread_limit
+!dec$ attributes alias:'_omp_set_max_active_levels_'::omp_set_max_active_levels
+!dec$ attributes alias:'_omp_get_max_active_levels_'::omp_get_max_active_levels
+!dec$ attributes alias:'_omp_get_level_'::omp_get_level
+!dec$ attributes alias:'_omp_get_active_level_'::omp_get_active_level
+!dec$ attributes alias:'_omp_get_ancestor_thread_num_'::omp_get_ancestor_thread_num
+!dec$ attributes alias:'_omp_get_team_size_'::omp_get_team_size
+!dec$ attributes alias:'_omp_set_schedule_'::omp_set_schedule
+!dec$ attributes alias:'_omp_get_schedule_'::omp_get_schedule
+!dec$ attributes alias:'_omp_get_proc_bind_' :: omp_get_proc_bind
+!dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime
+!dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick
+!dec$ attributes alias:'_omp_get_num_teams_'::omp_get_num_teams
+!dec$ attributes alias:'_omp_get_team_num_'::omp_get_team_num
+!dec$ attributes alias:'_omp_get_cancellation_'::omp_get_cancellation
+!dec$ attributes alias:'_omp_is_initial_device_'::omp_is_initial_device
+!dec$ attributes alias:'_omp_get_max_task_priorty_'::omp_get_max_task_priority
+
+!dec$ attributes alias:'_omp_init_lock_'::omp_init_lock
+!dec$ attributes alias:'_omp_init_lock_with_hint_'::omp_init_lock_with_hint
+!dec$ attributes alias:'_omp_destroy_lock_'::omp_destroy_lock
+!dec$ attributes alias:'_omp_set_lock_'::omp_set_lock
+!dec$ attributes alias:'_omp_unset_lock_'::omp_unset_lock
+!dec$ attributes alias:'_omp_test_lock_'::omp_test_lock
+!dec$ attributes alias:'_omp_init_nest_lock_'::omp_init_nest_lock
+!dec$ attributes alias:'_omp_init_nest_lock_with_hint_'::omp_init_nest_lock_with_hint
+!dec$ attributes alias:'_omp_destroy_nest_lock_'::omp_destroy_nest_lock
+!dec$ attributes alias:'_omp_set_nest_lock_'::omp_set_nest_lock
+!dec$ attributes alias:'_omp_unset_nest_lock_'::omp_unset_nest_lock
+!dec$ attributes alias:'_omp_test_nest_lock_'::omp_test_nest_lock
+
+!dec$ attributes alias:'_kmp_set_stacksize_'::kmp_set_stacksize
+!dec$ attributes alias:'_kmp_set_stacksize_s_'::kmp_set_stacksize_s
+!dec$ attributes alias:'_kmp_set_blocktime_'::kmp_set_blocktime
+!dec$ attributes alias:'_kmp_set_library_serial_'::kmp_set_library_serial
+!dec$ attributes alias:'_kmp_set_library_turnaround_'::kmp_set_library_turnaround
+!dec$ attributes alias:'_kmp_set_library_throughput_'::kmp_set_library_throughput
+!dec$ attributes alias:'_kmp_set_library_'::kmp_set_library
+!dec$ attributes alias:'_kmp_get_stacksize_'::kmp_get_stacksize
+!dec$ attributes alias:'_kmp_get_stacksize_s_'::kmp_get_stacksize_s
+!dec$ attributes alias:'_kmp_get_blocktime_'::kmp_get_blocktime
+!dec$ attributes alias:'_kmp_get_library_'::kmp_get_library
+!dec$ attributes alias:'_kmp_set_affinity_'::kmp_set_affinity
+!dec$ attributes alias:'_kmp_get_affinity_'::kmp_get_affinity
+!dec$ attributes alias:'_kmp_get_affinity_max_proc_'::kmp_get_affinity_max_proc
+!dec$ attributes alias:'_kmp_create_affinity_mask_'::kmp_create_affinity_mask
+!dec$ attributes alias:'_kmp_destroy_affinity_mask_'::kmp_destroy_affinity_mask
+!dec$ attributes alias:'_kmp_set_affinity_mask_proc_'::kmp_set_affinity_mask_proc
+!dec$ attributes alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
+!dec$ attributes alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
+!dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
+!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
+!dec$ attributes alias:'_kmp_calloc_'::kmp_calloc
+!dec$ attributes alias:'_kmp_realloc_'::kmp_realloc
+!dec$ attributes alias:'_kmp_free_'::kmp_free
+
+!dec$ attributes alias:'_kmp_set_warnings_on_'::kmp_set_warnings_on
+!dec$ attributes alias:'_kmp_set_warnings_off_'::kmp_set_warnings_off
+
+!dec$ attributes alias:'_kmp_get_cancellation_status_'::kmp_get_cancellation_status
+
+!dec$ endif
+
+ end module omp_lib
+
diff --git a/final/runtime/src/include/45/omp_lib.f90.var b/final/runtime/src/include/45/omp_lib.f90.var
new file mode 100644
index 0000000..0e97d57
--- /dev/null
+++ b/final/runtime/src/include/45/omp_lib.f90.var
@@ -0,0 +1,524 @@
+! include/45/omp_lib.f90.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+ module omp_lib_kinds
+
+ use, intrinsic :: iso_c_binding
+
+ integer, parameter :: omp_integer_kind = c_int
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = c_float
+ integer, parameter :: kmp_double_kind = c_double
+ integer, parameter :: omp_lock_kind = c_intptr_t
+ integer, parameter :: omp_nest_lock_kind = c_intptr_t
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = c_intptr_t
+ integer, parameter :: kmp_size_t_kind = c_size_t
+ integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
+ integer, parameter :: kmp_cancel_kind = omp_integer_kind
+ integer, parameter :: omp_lock_hint_kind = omp_integer_kind
+
+ end module omp_lib_kinds
+
+ module omp_lib
+
+ use omp_lib_kinds
+
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
+ integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
+
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = 0
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = 1
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = 2
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = 4
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = 8
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle = 65536
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm = 131072
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive = 262144
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(num_threads) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: num_threads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(dynamic_threads) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: dynamic_threads
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(nested) bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind), value :: nested
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, chunk_size) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind), value :: kind
+ integer (kind=omp_integer_kind), value :: chunk_size
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, chunk_size) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) chunk_size
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_num_places() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_places
+ end function omp_get_num_places
+
+ function omp_get_place_num_procs(place_num) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: place_num
+ integer (kind=omp_integer_kind) omp_get_place_num_procs
+ end function omp_get_place_num_procs
+
+ subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: place_num
+ integer (kind=kmp_pointer_kind) ids(*)
+ end subroutine omp_get_place_proc_ids
+
+ function omp_get_place_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_place_num
+ end function omp_get_place_num
+
+ function omp_get_partition_num_places() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_partition_num_places
+ end function omp_get_partition_num_places
+
+ subroutine omp_get_partition_place_nums(place_nums) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) place_nums(*)
+ end subroutine omp_get_partition_place_nums
+
+ function omp_get_wtime() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick() bind(c)
+ use omp_lib_kinds
+ real (kind=kmp_double_kind) omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(device_num) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: device_num
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_get_cancellation() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_cancellation
+ end function omp_get_cancellation
+
+ function omp_is_initial_device() bind(c)
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ function omp_get_initial_device() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_initial_device
+ end function omp_get_initial_device
+
+ subroutine omp_init_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) svar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) nvar
+ end function omp_test_nest_lock
+
+ function omp_get_max_task_priority() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) omp_get_max_task_priority
+ end function omp_get_max_task_priority
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind), value :: size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial() bind(c)
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround() bind(c)
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput() bind(c)
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string) bind(c)
+ use, intrinsic :: iso_c_binding
+ character (kind=c_char) :: string(*)
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s() bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ subroutine kmp_set_disp_num_buffers(num) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind), value :: num
+ end subroutine kmp_set_disp_num_buffers
+
+ function kmp_set_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc() bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ integer (kind=kmp_size_t_kind), value :: alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind), value :: nelem
+ integer (kind=kmp_size_t_kind), value :: elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind), value :: ptr
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_pointer_kind), value :: ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on() bind(c)
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off() bind(c)
+ end subroutine kmp_set_warnings_off
+
+ function kmp_get_cancellation_status(cancelkind) bind(c)
+ use omp_lib_kinds
+ integer (kind=kmp_cancel_kind), value :: cancelkind
+ logical (kind=omp_logical_kind) kmp_get_cancellation_status
+ end function kmp_get_cancellation_status
+
+ subroutine omp_init_lock_with_hint(svar, hint) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_lock_kind) svar
+ integer (kind=omp_lock_hint_kind), value :: hint
+ end subroutine omp_init_lock_with_hint
+
+ subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
+ use omp_lib_kinds
+ integer (kind=omp_nest_lock_kind) nvar
+ integer (kind=omp_lock_hint_kind), value :: hint
+ end subroutine omp_init_nest_lock_with_hint
+
+ end interface
+
+ end module omp_lib
diff --git a/final/runtime/src/include/45/omp_lib.h.var b/final/runtime/src/include/45/omp_lib.h.var
new file mode 100644
index 0000000..76284f2
--- /dev/null
+++ b/final/runtime/src/include/45/omp_lib.h.var
@@ -0,0 +1,644 @@
+! include/45/omp_lib.h.var
+
+!
+!//===----------------------------------------------------------------------===//
+!//
+!// The LLVM Compiler Infrastructure
+!//
+!// This file is dual licensed under the MIT and the University of Illinois Open
+!// Source Licenses. See LICENSE.txt for details.
+!//
+!//===----------------------------------------------------------------------===//
+!
+
+!***
+!*** Some of the directives for the following routine extend past column 72,
+!*** so process this file in 132-column mode.
+!***
+
+!DIR$ fixedformlinesize:132
+
+ integer, parameter :: omp_integer_kind = 4
+ integer, parameter :: omp_logical_kind = 4
+ integer, parameter :: omp_real_kind = 4
+ integer, parameter :: omp_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
+ integer, parameter :: omp_sched_kind = omp_integer_kind
+ integer, parameter :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter :: kmp_pointer_kind = int_ptr_kind()
+ integer, parameter :: kmp_size_t_kind = int_ptr_kind()
+ integer, parameter :: kmp_affinity_mask_kind = int_ptr_kind()
+ integer, parameter :: omp_lock_hint_kind = omp_integer_kind
+
+ integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ character(*) kmp_build_date
+ parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
+
+ integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
+
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
+
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = 0
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = 1
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = 2
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = 4
+ integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = 8
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle = 65536
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm = 131072
+ integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive = 262144
+
+ interface
+
+! ***
+! *** omp_* entry points
+! ***
+
+ subroutine omp_set_num_threads(num_threads) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: num_threads
+ end subroutine omp_set_num_threads
+
+ subroutine omp_set_dynamic(dynamic_threads) bind(c)
+ import
+ logical (kind=omp_logical_kind), value :: dynamic_threads
+ end subroutine omp_set_dynamic
+
+ subroutine omp_set_nested(nested) bind(c)
+ import
+ logical (kind=omp_logical_kind), value :: nested
+ end subroutine omp_set_nested
+
+ function omp_get_num_threads() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_threads
+ end function omp_get_num_threads
+
+ function omp_get_max_threads() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_max_threads
+ end function omp_get_max_threads
+
+ function omp_get_thread_num() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_num
+ end function omp_get_thread_num
+
+ function omp_get_num_procs() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_procs
+ end function omp_get_num_procs
+
+ function omp_in_parallel() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_in_parallel
+ end function omp_in_parallel
+
+ function omp_in_final() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_in_final
+ end function omp_in_final
+
+ function omp_get_dynamic() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_get_dynamic
+ end function omp_get_dynamic
+
+ function omp_get_nested() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_get_nested
+ end function omp_get_nested
+
+ function omp_get_thread_limit() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_thread_limit
+ end function omp_get_thread_limit
+
+ subroutine omp_set_max_active_levels(max_levels) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: max_levels
+ end subroutine omp_set_max_active_levels
+
+ function omp_get_max_active_levels() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_max_active_levels
+ end function omp_get_max_active_levels
+
+ function omp_get_level() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_level
+ end function omp_get_level
+
+ function omp_get_active_level() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_active_level
+ end function omp_get_active_level
+
+ function omp_get_ancestor_thread_num(level) bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_ancestor_thread_num
+
+ function omp_get_team_size(level) bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind), value :: level
+ end function omp_get_team_size
+
+ subroutine omp_set_schedule(kind, chunk_size) bind(c)
+ import
+ integer (kind=omp_sched_kind), value :: kind
+ integer (kind=omp_integer_kind), value :: chunk_size
+ end subroutine omp_set_schedule
+
+ subroutine omp_get_schedule(kind, chunk_size) bind(c)
+ import
+ integer (kind=omp_sched_kind) kind
+ integer (kind=omp_integer_kind) chunk_size
+ end subroutine omp_get_schedule
+
+ function omp_get_proc_bind() bind(c)
+ import
+ integer (kind=omp_proc_bind_kind) omp_get_proc_bind
+ end function omp_get_proc_bind
+
+ function omp_get_num_places() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_places
+ end function omp_get_num_places
+
+ function omp_get_place_num_procs(place_num) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: place_num
+ integer (kind=omp_integer_kind) omp_get_place_num_procs
+ end function omp_get_place_num_procs
+
+ subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: place_num
+ integer (kind=kmp_pointer_kind) ids(*)
+ end subroutine omp_get_place_proc_ids
+
+ function omp_get_place_num() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_place_num
+ end function omp_get_place_num
+
+ function omp_get_partition_num_places() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_partition_num_places
+ end function omp_get_partition_num_places
+
+ subroutine omp_get_partition_place_nums(place_nums) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) place_nums(*)
+ end subroutine omp_get_partition_place_nums
+
+ function omp_get_wtime() bind(c)
+ double precision omp_get_wtime
+ end function omp_get_wtime
+
+ function omp_get_wtick() bind(c)
+ double precision omp_get_wtick
+ end function omp_get_wtick
+
+ function omp_get_default_device() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_default_device
+ end function omp_get_default_device
+
+ subroutine omp_set_default_device(device_num) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: device_num
+ end subroutine omp_set_default_device
+
+ function omp_get_num_devices() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_devices
+ end function omp_get_num_devices
+
+ function omp_get_num_teams() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_num_teams
+ end function omp_get_num_teams
+
+ function omp_get_team_num() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_team_num
+ end function omp_get_team_num
+
+ function omp_is_initial_device() bind(c)
+ import
+ logical (kind=omp_logical_kind) omp_is_initial_device
+ end function omp_is_initial_device
+
+ function omp_get_initial_device() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_initial_device
+ end function omp_get_initial_device
+
+ subroutine omp_init_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_init_lock
+
+ subroutine omp_destroy_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_destroy_lock
+
+ subroutine omp_set_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_set_lock
+
+ subroutine omp_unset_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_lock_kind) svar
+ end subroutine omp_unset_lock
+
+ function omp_test_lock(svar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_lock
+!DIR$ ENDIF
+ import
+ logical (kind=omp_logical_kind) omp_test_lock
+ integer (kind=omp_lock_kind) svar
+ end function omp_test_lock
+
+ subroutine omp_init_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_init_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_init_nest_lock
+
+ subroutine omp_destroy_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_destroy_nest_lock
+
+ subroutine omp_set_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_set_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_set_nest_lock
+
+ subroutine omp_unset_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_nest_lock_kind) nvar
+ end subroutine omp_unset_nest_lock
+
+ function omp_test_nest_lock(nvar) bind(c)
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!DIR$ attributes known_intrinsic :: omp_test_nest_lock
+!DIR$ ENDIF
+ import
+ integer (kind=omp_integer_kind) omp_test_nest_lock
+ integer (kind=omp_nest_lock_kind) nvar
+ end function omp_test_nest_lock
+
+ function omp_get_max_task_priority() bind(c)
+ import
+ integer (kind=omp_integer_kind) omp_get_max_task_priority
+ end function omp_get_max_task_priority
+
+! ***
+! *** kmp_* entry points
+! ***
+
+ subroutine kmp_set_stacksize(size) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: size
+ end subroutine kmp_set_stacksize
+
+ subroutine kmp_set_stacksize_s(size) bind(c)
+ import
+ integer (kind=kmp_size_t_kind), value :: size
+ end subroutine kmp_set_stacksize_s
+
+ subroutine kmp_set_blocktime(msec) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: msec
+ end subroutine kmp_set_blocktime
+
+ subroutine kmp_set_library_serial() bind(c)
+ end subroutine kmp_set_library_serial
+
+ subroutine kmp_set_library_turnaround() bind(c)
+ end subroutine kmp_set_library_turnaround
+
+ subroutine kmp_set_library_throughput() bind(c)
+ end subroutine kmp_set_library_throughput
+
+ subroutine kmp_set_library(libnum) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: libnum
+ end subroutine kmp_set_library
+
+ subroutine kmp_set_defaults(string) bind(c)
+ character string(*)
+ end subroutine kmp_set_defaults
+
+ function kmp_get_stacksize() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_stacksize
+ end function kmp_get_stacksize
+
+ function kmp_get_stacksize_s() bind(c)
+ import
+ integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
+ end function kmp_get_stacksize_s
+
+ function kmp_get_blocktime() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_blocktime
+ end function kmp_get_blocktime
+
+ function kmp_get_library() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_library
+ end function kmp_get_library
+
+ subroutine kmp_set_disp_num_buffers(num) bind(c)
+ import
+ integer (kind=omp_integer_kind), value :: num
+ end subroutine kmp_set_disp_num_buffers
+
+ function kmp_set_affinity(mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity
+
+ function kmp_get_affinity(mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity
+
+ function kmp_get_affinity_max_proc() bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
+ end function kmp_get_affinity_max_proc
+
+ subroutine kmp_create_affinity_mask(mask) bind(c)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_create_affinity_mask
+
+ subroutine kmp_destroy_affinity_mask(mask) bind(c)
+ import
+ integer (kind=kmp_affinity_mask_kind) mask
+ end subroutine kmp_destroy_affinity_mask
+
+ function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_set_affinity_mask_proc
+
+ function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_unset_affinity_mask_proc
+
+ function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ import
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind), value :: proc
+ integer (kind=kmp_affinity_mask_kind) mask
+ end function kmp_get_affinity_mask_proc
+
+ function kmp_malloc(size) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_malloc
+
+ function kmp_aligned_malloc(size, alignment) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_aligned_malloc
+ integer (kind=kmp_size_t_kind), value :: size
+ integer (kind=kmp_size_t_kind), value :: alignment
+ end function kmp_aligned_malloc
+
+ function kmp_calloc(nelem, elsize) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_calloc
+ integer (kind=kmp_size_t_kind), value :: nelem
+ integer (kind=kmp_size_t_kind), value :: elsize
+ end function kmp_calloc
+
+ function kmp_realloc(ptr, size) bind(c)
+ import
+ integer (kind=kmp_pointer_kind) kmp_realloc
+ integer (kind=kmp_pointer_kind), value :: ptr
+ integer (kind=kmp_size_t_kind), value :: size
+ end function kmp_realloc
+
+ subroutine kmp_free(ptr) bind(c)
+ import
+ integer (kind=kmp_pointer_kind), value :: ptr
+ end subroutine kmp_free
+
+ subroutine kmp_set_warnings_on() bind(c)
+ end subroutine kmp_set_warnings_on
+
+ subroutine kmp_set_warnings_off() bind(c)
+ end subroutine kmp_set_warnings_off
+
+ subroutine omp_init_lock_with_hint(svar, hint) bind(c)
+ import
+ integer (kind=omp_lock_kind) svar
+ integer (kind=omp_lock_hint_kind), value :: hint
+ end subroutine omp_init_lock_with_hint
+
+ subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
+ import
+ integer (kind=omp_nest_lock_kind) nvar
+ integer (kind=omp_lock_hint_kind), value :: hint
+ end subroutine omp_init_nest_lock_with_hint
+
+ end interface
+
+!DIR$ IF DEFINED (__INTEL_OFFLOAD)
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_num_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_dynamic
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nested
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_threads
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_procs
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_parallel
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_final
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_dynamic
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_nested
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_limit
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_max_active_levels
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_active_levels
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_level
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_active_level
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_ancestor_thread_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_size
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_schedule
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_schedule
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_proc_bind
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtick
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_default_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_default_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_is_initial_device
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_devices
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_teams
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_num
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_nest_lock
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_task_priority
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize_s
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_blocktime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_serial
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_turnaround
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_throughput
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_defaults
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize_s
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_blocktime
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_library
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_disp_num_buffers
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_max_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_create_affinity_mask
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_destroy_affinity_mask
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_unset_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_mask_proc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_malloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_aligned_malloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_calloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_realloc
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_free
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_on
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_off
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock_with_hint
+!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_nest_lock_with_hint
+
+!DIR$ IF(__INTEL_COMPILER.GE.1400)
+!$omp declare target(omp_set_num_threads )
+!$omp declare target(omp_set_dynamic )
+!$omp declare target(omp_set_nested )
+!$omp declare target(omp_get_num_threads )
+!$omp declare target(omp_get_max_threads )
+!$omp declare target(omp_get_thread_num )
+!$omp declare target(omp_get_num_procs )
+!$omp declare target(omp_in_parallel )
+!$omp declare target(omp_in_final )
+!$omp declare target(omp_get_dynamic )
+!$omp declare target(omp_get_nested )
+!$omp declare target(omp_get_thread_limit )
+!$omp declare target(omp_set_max_active_levels )
+!$omp declare target(omp_get_max_active_levels )
+!$omp declare target(omp_get_level )
+!$omp declare target(omp_get_active_level )
+!$omp declare target(omp_get_ancestor_thread_num )
+!$omp declare target(omp_get_team_size )
+!$omp declare target(omp_set_schedule )
+!$omp declare target(omp_get_schedule )
+!$omp declare target(omp_get_proc_bind )
+!$omp declare target(omp_get_wtime )
+!$omp declare target(omp_get_wtick )
+!$omp declare target(omp_get_default_device )
+!$omp declare target(omp_set_default_device )
+!$omp declare target(omp_is_initial_device )
+!$omp declare target(omp_get_num_devices )
+!$omp declare target(omp_get_num_teams )
+!$omp declare target(omp_get_team_num )
+!$omp declare target(omp_init_lock )
+!$omp declare target(omp_destroy_lock )
+!$omp declare target(omp_set_lock )
+!$omp declare target(omp_unset_lock )
+!$omp declare target(omp_test_lock )
+!$omp declare target(omp_init_nest_lock )
+!$omp declare target(omp_destroy_nest_lock )
+!$omp declare target(omp_set_nest_lock )
+!$omp declare target(omp_unset_nest_lock )
+!$omp declare target(omp_test_nest_lock )
+!$omp declare target(omp_get_max_task_priority )
+!$omp declare target(kmp_set_stacksize )
+!$omp declare target(kmp_set_stacksize_s )
+!$omp declare target(kmp_set_blocktime )
+!$omp declare target(kmp_set_library_serial )
+!$omp declare target(kmp_set_library_turnaround )
+!$omp declare target(kmp_set_library_throughput )
+!$omp declare target(kmp_set_library )
+!$omp declare target(kmp_set_defaults )
+!$omp declare target(kmp_get_stacksize )
+!$omp declare target(kmp_get_stacksize_s )
+!$omp declare target(kmp_get_blocktime )
+!$omp declare target(kmp_get_library )
+!$omp declare target(kmp_set_disp_num_buffers )
+!$omp declare target(kmp_set_affinity )
+!$omp declare target(kmp_get_affinity )
+!$omp declare target(kmp_get_affinity_max_proc )
+!$omp declare target(kmp_create_affinity_mask )
+!$omp declare target(kmp_destroy_affinity_mask )
+!$omp declare target(kmp_set_affinity_mask_proc )
+!$omp declare target(kmp_unset_affinity_mask_proc )
+!$omp declare target(kmp_get_affinity_mask_proc )
+!$omp declare target(kmp_malloc )
+!$omp declare target(kmp_aligned_malloc )
+!$omp declare target(kmp_calloc )
+!$omp declare target(kmp_realloc )
+!$omp declare target(kmp_free )
+!$omp declare target(kmp_set_warnings_on )
+!$omp declare target(kmp_set_warnings_off )
+!$omp declare target(omp_init_lock_with_hint )
+!$omp declare target(omp_init_nest_lock_with_hint )
+!DIR$ ENDIF
+!DIR$ ENDIF
+
diff --git a/final/runtime/src/include/45/ompt.h.var b/final/runtime/src/include/45/ompt.h.var
new file mode 100644
index 0000000..1f718c5
--- /dev/null
+++ b/final/runtime/src/include/45/ompt.h.var
@@ -0,0 +1,515 @@
+/*
+ * include/45/ompt.h.var
+ */
+
+#ifndef __OMPT__
+#define __OMPT__
+
+/*****************************************************************************
+ * system include files
+ *****************************************************************************/
+
+#include <stdint.h>
+
+
+
+/*****************************************************************************
+ * iteration macros
+ *****************************************************************************/
+
+#define FOREACH_OMPT_INQUIRY_FN(macro) \
+ macro (ompt_enumerate_state) \
+ \
+ macro (ompt_set_callback) \
+ macro (ompt_get_callback) \
+ \
+ macro (ompt_get_idle_frame) \
+ macro (ompt_get_task_frame) \
+ \
+ macro (ompt_get_state) \
+ \
+ macro (ompt_get_parallel_id) \
+ macro (ompt_get_parallel_team_size) \
+ macro (ompt_get_task_id) \
+ macro (ompt_get_thread_id)
+
+#define FOREACH_OMPT_PLACEHOLDER_FN(macro) \
+ macro (ompt_idle) \
+ macro (ompt_overhead) \
+ macro (ompt_barrier_wait) \
+ macro (ompt_task_wait) \
+ macro (ompt_mutex_wait)
+
+#define FOREACH_OMPT_STATE(macro) \
+ \
+ /* first */ \
+ macro (ompt_state_first, 0x71) /* initial enumeration state */ \
+ \
+ /* work states (0..15) */ \
+ macro (ompt_state_work_serial, 0x00) /* working outside parallel */ \
+ macro (ompt_state_work_parallel, 0x01) /* working within parallel */ \
+ macro (ompt_state_work_reduction, 0x02) /* performing a reduction */ \
+ \
+ /* idle (16..31) */ \
+ macro (ompt_state_idle, 0x10) /* waiting for work */ \
+ \
+ /* overhead states (32..63) */ \
+ macro (ompt_state_overhead, 0x20) /* overhead excluding wait states */ \
+ \
+ /* barrier wait states (64..79) */ \
+ macro (ompt_state_wait_barrier, 0x40) /* waiting at a barrier */ \
+ macro (ompt_state_wait_barrier_implicit, 0x41) /* implicit barrier */ \
+ macro (ompt_state_wait_barrier_explicit, 0x42) /* explicit barrier */ \
+ \
+ /* task wait states (80..95) */ \
+ macro (ompt_state_wait_taskwait, 0x50) /* waiting at a taskwait */ \
+ macro (ompt_state_wait_taskgroup, 0x51) /* waiting at a taskgroup */ \
+ \
+ /* mutex wait states (96..111) */ \
+ macro (ompt_state_wait_lock, 0x60) /* waiting for lock */ \
+ macro (ompt_state_wait_nest_lock, 0x61) /* waiting for nest lock */ \
+ macro (ompt_state_wait_critical, 0x62) /* waiting for critical */ \
+ macro (ompt_state_wait_atomic, 0x63) /* waiting for atomic */ \
+ macro (ompt_state_wait_ordered, 0x64) /* waiting for ordered */ \
+ macro (ompt_state_wait_single, 0x6F) /* waiting for single region (non-standard!) */ \
+ \
+ /* misc (112..127) */ \
+ macro (ompt_state_undefined, 0x70) /* undefined thread state */
+
+
+#define FOREACH_OMPT_EVENT(macro) \
+ \
+ /*--- Mandatory Events ---*/ \
+ macro (ompt_event_parallel_begin, ompt_new_parallel_callback_t, 1) /* parallel begin */ \
+ macro (ompt_event_parallel_end, ompt_end_parallel_callback_t, 2) /* parallel end */ \
+ \
+ macro (ompt_event_task_begin, ompt_new_task_callback_t, 3) /* task begin */ \
+ macro (ompt_event_task_end, ompt_task_callback_t, 4) /* task destroy */ \
+ \
+ macro (ompt_event_thread_begin, ompt_thread_type_callback_t, 5) /* thread begin */ \
+ macro (ompt_event_thread_end, ompt_thread_type_callback_t, 6) /* thread end */ \
+ \
+ macro (ompt_event_control, ompt_control_callback_t, 7) /* support control calls */ \
+ \
+ macro (ompt_event_runtime_shutdown, ompt_callback_t, 8) /* runtime shutdown */ \
+ \
+ /*--- Optional Events (blame shifting, ompt_event_unimplemented) ---*/ \
+ macro (ompt_event_idle_begin, ompt_thread_callback_t, 9) /* begin idle state */ \
+ macro (ompt_event_idle_end, ompt_thread_callback_t, 10) /* end idle state */ \
+ \
+ macro (ompt_event_wait_barrier_begin, ompt_parallel_callback_t, 11) /* begin wait at barrier */ \
+ macro (ompt_event_wait_barrier_end, ompt_parallel_callback_t, 12) /* end wait at barrier */ \
+ \
+ macro (ompt_event_wait_taskwait_begin, ompt_parallel_callback_t, 13) /* begin wait at taskwait */ \
+ macro (ompt_event_wait_taskwait_end, ompt_parallel_callback_t, 14) /* end wait at taskwait */ \
+ \
+ macro (ompt_event_wait_taskgroup_begin, ompt_parallel_callback_t, 15) /* begin wait at taskgroup */\
+ macro (ompt_event_wait_taskgroup_end, ompt_parallel_callback_t, 16) /* end wait at taskgroup */ \
+ \
+ macro (ompt_event_release_lock, ompt_wait_callback_t, 17) /* lock release */ \
+ macro (ompt_event_release_nest_lock_last, ompt_wait_callback_t, 18) /* last nest lock release */ \
+ macro (ompt_event_release_critical, ompt_wait_callback_t, 19) /* critical release */ \
+ \
+ macro (ompt_event_release_atomic, ompt_wait_callback_t, 20) /* atomic release */ \
+ \
+ macro (ompt_event_release_ordered, ompt_wait_callback_t, 21) /* ordered release */ \
+ \
+ /*--- Optional Events (synchronous events, ompt_event_unimplemented) --- */ \
+ macro (ompt_event_implicit_task_begin, ompt_parallel_callback_t, 22) /* implicit task begin */ \
+ macro (ompt_event_implicit_task_end, ompt_parallel_callback_t, 23) /* implicit task end */ \
+ \
+ macro (ompt_event_initial_task_begin, ompt_parallel_callback_t, 24) /* initial task begin */ \
+ macro (ompt_event_initial_task_end, ompt_parallel_callback_t, 25) /* initial task end */ \
+ \
+ macro (ompt_event_task_switch, ompt_task_pair_callback_t, 26) /* task switch */ \
+ \
+ macro (ompt_event_loop_begin, ompt_new_workshare_callback_t, 27) /* task at loop begin */ \
+ macro (ompt_event_loop_end, ompt_parallel_callback_t, 28) /* task at loop end */ \
+ \
+ macro (ompt_event_sections_begin, ompt_new_workshare_callback_t, 29) /* task at sections begin */\
+ macro (ompt_event_sections_end, ompt_parallel_callback_t, 30) /* task at sections end */ \
+ \
+ macro (ompt_event_single_in_block_begin, ompt_new_workshare_callback_t, 31) /* task at single begin*/ \
+ macro (ompt_event_single_in_block_end, ompt_parallel_callback_t, 32) /* task at single end */ \
+ \
+ macro (ompt_event_single_others_begin, ompt_parallel_callback_t, 33) /* task at single begin */ \
+ macro (ompt_event_single_others_end, ompt_parallel_callback_t, 34) /* task at single end */ \
+ \
+ macro (ompt_event_workshare_begin, ompt_new_workshare_callback_t, 35) /* task at workshare begin */\
+ macro (ompt_event_workshare_end, ompt_parallel_callback_t, 36) /* task at workshare end */ \
+ \
+ macro (ompt_event_master_begin, ompt_parallel_callback_t, 37) /* task at master begin */ \
+ macro (ompt_event_master_end, ompt_parallel_callback_t, 38) /* task at master end */ \
+ \
+ macro (ompt_event_barrier_begin, ompt_parallel_callback_t, 39) /* task at barrier begin */ \
+ macro (ompt_event_barrier_end, ompt_parallel_callback_t, 40) /* task at barrier end */ \
+ \
+ macro (ompt_event_taskwait_begin, ompt_parallel_callback_t, 41) /* task at taskwait begin */ \
+ macro (ompt_event_taskwait_end, ompt_parallel_callback_t, 42) /* task at task wait end */ \
+ \
+ macro (ompt_event_taskgroup_begin, ompt_parallel_callback_t, 43) /* task at taskgroup begin */\
+ macro (ompt_event_taskgroup_end, ompt_parallel_callback_t, 44) /* task at taskgroup end */ \
+ \
+ macro (ompt_event_release_nest_lock_prev, ompt_wait_callback_t, 45) /* prev nest lock release */ \
+ \
+ macro (ompt_event_wait_lock, ompt_wait_callback_t, 46) /* lock wait */ \
+ macro (ompt_event_wait_nest_lock, ompt_wait_callback_t, 47) /* nest lock wait */ \
+ macro (ompt_event_wait_critical, ompt_wait_callback_t, 48) /* critical wait */ \
+ macro (ompt_event_wait_atomic, ompt_wait_callback_t, 49) /* atomic wait */ \
+ macro (ompt_event_wait_ordered, ompt_wait_callback_t, 50) /* ordered wait */ \
+ \
+ macro (ompt_event_acquired_lock, ompt_wait_callback_t, 51) /* lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_first, ompt_wait_callback_t, 52) /* 1st nest lock acquired */ \
+ macro (ompt_event_acquired_nest_lock_next, ompt_wait_callback_t, 53) /* next nest lock acquired*/ \
+ macro (ompt_event_acquired_critical, ompt_wait_callback_t, 54) /* critical acquired */ \
+ macro (ompt_event_acquired_atomic, ompt_wait_callback_t, 55) /* atomic acquired */ \
+ macro (ompt_event_acquired_ordered, ompt_wait_callback_t, 56) /* ordered acquired */ \
+ \
+ macro (ompt_event_init_lock, ompt_wait_callback_t, 57) /* lock init */ \
+ macro (ompt_event_init_nest_lock, ompt_wait_callback_t, 58) /* nest lock init */ \
+ \
+ macro (ompt_event_destroy_lock, ompt_wait_callback_t, 59) /* lock destruction */ \
+ macro (ompt_event_destroy_nest_lock, ompt_wait_callback_t, 60) /* nest lock destruction */ \
+ \
+ macro (ompt_event_flush, ompt_callback_t, 61) /* after executing flush */ \
+ \
+ macro (ompt_event_task_dependences, ompt_task_dependences_callback_t, 69) /* report task dependences */\
+ macro (ompt_event_task_dependence_pair, ompt_task_pair_callback_t, 70) /* report task dependence pair */
+
+
+
+/*****************************************************************************
+ * data types
+ *****************************************************************************/
+
+/*---------------------
+ * identifiers
+ *---------------------*/
+
+typedef uint64_t ompt_thread_id_t;
+#define ompt_thread_id_none ((ompt_thread_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_task_id_t;
+#define ompt_task_id_none ((ompt_task_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_parallel_id_t;
+#define ompt_parallel_id_none ((ompt_parallel_id_t) 0) /* non-standard */
+
+typedef uint64_t ompt_wait_id_t;
+#define ompt_wait_id_none ((ompt_wait_id_t) 0) /* non-standard */
+
+
+/*---------------------
+ * ompt_frame_t
+ *---------------------*/
+
+typedef struct ompt_frame_s {
+ void *exit_runtime_frame; /* next frame is user code */
+ void *reenter_runtime_frame; /* previous frame is user code */
+} ompt_frame_t;
+
+
+/*---------------------
+ * dependences types
+ *---------------------*/
+
+typedef enum ompt_task_dependence_flag_e {
+ // a two bit field for the dependence type
+ ompt_task_dependence_type_out = 1,
+ ompt_task_dependence_type_in = 2,
+ ompt_task_dependence_type_inout = 3,
+} ompt_task_dependence_flag_t;
+
+typedef struct ompt_task_dependence_s {
+ void *variable_addr;
+ uint32_t dependence_flags;
+} ompt_task_dependence_t;
+
+
+/*****************************************************************************
+ * enumerations for thread states and runtime events
+ *****************************************************************************/
+
+/*---------------------
+ * runtime states
+ *---------------------*/
+
+typedef enum {
+#define ompt_state_macro(state, code) state = code,
+ FOREACH_OMPT_STATE(ompt_state_macro)
+#undef ompt_state_macro
+} ompt_state_t;
+
+
+/*---------------------
+ * runtime events
+ *---------------------*/
+
+typedef enum {
+#define ompt_event_macro(event, callback, eventid) event = eventid,
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+#undef ompt_event_macro
+} ompt_event_t;
+
+
+/*---------------------
+ * set callback results
+ *---------------------*/
+typedef enum {
+ ompt_set_result_registration_error = 0,
+ ompt_set_result_event_may_occur_no_callback = 1,
+ ompt_set_result_event_never_occurs = 2,
+ ompt_set_result_event_may_occur_callback_some = 3,
+ ompt_set_result_event_may_occur_callback_always = 4,
+} ompt_set_result_t;
+
+
+
+/*****************************************************************************
+ * callback signatures
+ *****************************************************************************/
+
+/* initialization */
+typedef void (*ompt_interface_fn_t)(void);
+
+typedef ompt_interface_fn_t (*ompt_function_lookup_t)(
+ const char * /* entry point to look up */
+);
+
+/* threads */
+typedef void (*ompt_thread_callback_t) (
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef enum {
+ ompt_thread_initial = 1, // start the enumeration at 1
+ ompt_thread_worker = 2,
+ ompt_thread_other = 3
+} ompt_thread_type_t;
+
+typedef enum {
+ ompt_invoker_program = 0, /* program invokes master task */
+ ompt_invoker_runtime = 1 /* runtime invokes master task */
+} ompt_invoker_t;
+
+typedef void (*ompt_thread_type_callback_t) (
+ ompt_thread_type_t thread_type, /* type of thread */
+ ompt_thread_id_t thread_id /* ID of thread */
+);
+
+typedef void (*ompt_wait_callback_t) (
+ ompt_wait_id_t wait_id /* wait id */
+);
+
+/* parallel and workshares */
+typedef void (*ompt_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_new_workshare_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ void *workshare_function /* pointer to outlined function */
+);
+
+typedef void (*ompt_new_parallel_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data of parent task */
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ uint32_t requested_team_size, /* number of threads in team */
+ void *parallel_function, /* pointer to outlined function */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+typedef void (*ompt_end_parallel_callback_t) (
+ ompt_parallel_id_t parallel_id, /* id of parallel region */
+ ompt_task_id_t task_id, /* id of task */
+ ompt_invoker_t invoker /* who invokes master task? */
+);
+
+/* tasks */
+typedef void (*ompt_task_callback_t) (
+ ompt_task_id_t task_id /* id of task */
+);
+
+typedef void (*ompt_task_pair_callback_t) (
+ ompt_task_id_t first_task_id,
+ ompt_task_id_t second_task_id
+);
+
+typedef void (*ompt_new_task_callback_t) (
+ ompt_task_id_t parent_task_id, /* id of parent task */
+ ompt_frame_t *parent_task_frame, /* frame data for parent task */
+ ompt_task_id_t new_task_id, /* id of created task */
+ void *task_function /* pointer to outlined function */
+);
+
+/* task dependences */
+typedef void (*ompt_task_dependences_callback_t) (
+ ompt_task_id_t task_id, /* ID of task with dependences */
+ const ompt_task_dependence_t *deps,/* vector of task dependences */
+ int ndeps /* number of dependences */
+);
+
+/* program */
+typedef void (*ompt_control_callback_t) (
+ uint64_t command, /* command of control call */
+ uint64_t modifier /* modifier of control call */
+);
+
+typedef void (*ompt_callback_t)(void);
+
+
+/****************************************************************************
+ * ompt API
+ ***************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OMPT_API_FNTYPE(fn) fn##_t
+
+#define OMPT_API_FUNCTION(return_type, fn, args) \
+ typedef return_type (*OMPT_API_FNTYPE(fn)) args
+
+
+
+/****************************************************************************
+ * INQUIRY FUNCTIONS
+ ***************************************************************************/
+
+/* state */
+OMPT_API_FUNCTION(ompt_state_t, ompt_get_state, (
+ ompt_wait_id_t *ompt_wait_id
+));
+
+/* thread */
+OMPT_API_FUNCTION(ompt_thread_id_t, ompt_get_thread_id, (void));
+
+OMPT_API_FUNCTION(void *, ompt_get_idle_frame, (void));
+
+/* parallel region */
+OMPT_API_FUNCTION(ompt_parallel_id_t, ompt_get_parallel_id, (
+ int ancestor_level
+));
+
+OMPT_API_FUNCTION(int, ompt_get_parallel_team_size, (
+ int ancestor_level
+));
+
+/* task */
+OMPT_API_FUNCTION(ompt_task_id_t, ompt_get_task_id, (
+ int depth
+));
+
+OMPT_API_FUNCTION(ompt_frame_t *, ompt_get_task_frame, (
+ int depth
+));
+
+
+
+/****************************************************************************
+ * PLACEHOLDERS FOR PERFORMANCE REPORTING
+ ***************************************************************************/
+
+/* idle */
+OMPT_API_FUNCTION(void, ompt_idle, (
+ void
+));
+
+/* overhead */
+OMPT_API_FUNCTION(void, ompt_overhead, (
+ void
+));
+
+/* barrier wait */
+OMPT_API_FUNCTION(void, ompt_barrier_wait, (
+ void
+));
+
+/* task wait */
+OMPT_API_FUNCTION(void, ompt_task_wait, (
+ void
+));
+
+/* mutex wait */
+OMPT_API_FUNCTION(void, ompt_mutex_wait, (
+ void
+));
+
+
+
+/****************************************************************************
+ * INITIALIZATION FUNCTIONS
+ ***************************************************************************/
+
+OMPT_API_FUNCTION(void, ompt_initialize, (
+ ompt_function_lookup_t ompt_fn_lookup,
+ const char *runtime_version,
+ unsigned int ompt_version
+));
+
+
+/* initialization interface to be defined by tool */
+ompt_initialize_t ompt_tool(void);
+
+typedef enum opt_init_mode_e {
+ ompt_init_mode_never = 0,
+ ompt_init_mode_false = 1,
+ ompt_init_mode_true = 2,
+ ompt_init_mode_always = 3
+} ompt_init_mode_t;
+
+OMPT_API_FUNCTION(int, ompt_set_callback, (
+ ompt_event_t event,
+ ompt_callback_t callback
+));
+
+typedef enum ompt_set_callback_rc_e { /* non-standard */
+ ompt_set_callback_error = 0,
+ ompt_has_event_no_callback = 1,
+ ompt_no_event_no_callback = 2,
+ ompt_has_event_may_callback = 3,
+ ompt_has_event_must_callback = 4,
+} ompt_set_callback_rc_t;
+
+
+OMPT_API_FUNCTION(int, ompt_get_callback, (
+ ompt_event_t event,
+ ompt_callback_t *callback
+));
+
+
+
+/****************************************************************************
+ * MISCELLANEOUS FUNCTIONS
+ ***************************************************************************/
+
+/* control */
+// FIXME: remove workaround for clang
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp declare target
+#endif
+void ompt_control(
+ uint64_t command,
+ uint64_t modifier
+);
+#if !defined(__clang__) && defined(_OPENMP) && (_OPENMP >= 201307)
+#pragma omp end declare target
+#endif
+
+/* state enumeration */
+OMPT_API_FUNCTION(int, ompt_enumerate_state, (
+ int current_state,
+ int *next_state,
+ const char **next_state_name
+));
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
+
diff --git a/final/runtime/src/kmp.h b/final/runtime/src/kmp.h
new file mode 100644
index 0000000..6fc378b
--- /dev/null
+++ b/final/runtime/src/kmp.h
@@ -0,0 +1,3664 @@
+/*! \file */
+/*
+ * kmp.h -- KPTS runtime header file.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_H
+#define KMP_H
+
+#include "kmp_config.h"
+
+/* #define BUILD_PARALLEL_ORDERED 1 */
+
+/* This fix replaces gettimeofday with clock_gettime for better scalability on
+ the Altix. Requires user code to be linked with -lrt.
+*/
+//#define FIX_SGI_CLOCK
+
+/* Defines for OpenMP 3.0 tasking and auto scheduling */
+
+# ifndef KMP_STATIC_STEAL_ENABLED
+# define KMP_STATIC_STEAL_ENABLED 1
+# endif
+
+#define TASK_CURRENT_NOT_QUEUED 0
+#define TASK_CURRENT_QUEUED 1
+
+#ifdef BUILD_TIED_TASK_STACK
+#define TASK_STACK_EMPTY 0 // entries when the stack is empty
+
+#define TASK_STACK_BLOCK_BITS 5 // Used to define TASK_STACK_SIZE and TASK_STACK_MASK
+#define TASK_STACK_BLOCK_SIZE ( 1 << TASK_STACK_BLOCK_BITS ) // Number of entries in each task stack array
+#define TASK_STACK_INDEX_MASK ( TASK_STACK_BLOCK_SIZE - 1 ) // Mask for determining index into stack block
+#endif // BUILD_TIED_TASK_STACK
+
+#define TASK_NOT_PUSHED 1
+#define TASK_SUCCESSFULLY_PUSHED 0
+#define TASK_TIED 1
+#define TASK_UNTIED 0
+#define TASK_EXPLICIT 1
+#define TASK_IMPLICIT 0
+#define TASK_PROXY 1
+#define TASK_FULL 0
+
+#define KMP_CANCEL_THREADS
+#define KMP_THREAD_ATTR
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <string.h>
+#include <signal.h>
+/* include <ctype.h> don't use; problems with /MD on Windows* OS NT due to bad Microsoft library */
+/* some macros provided below to replace some of these functions */
+#ifndef __ABSOFT_WIN
+#include <sys/types.h>
+#endif
+#include <limits.h>
+#include <time.h>
+
+#include <errno.h>
+
+#include "kmp_os.h"
+
+#include "kmp_safe_c_api.h"
+
+#if KMP_STATS_ENABLED
+class kmp_stats_list;
+#endif
+
+#if KMP_USE_HWLOC && KMP_AFFINITY_SUPPORTED
+# include "hwloc.h"
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+#include <xmmintrin.h>
+#endif
+
+#include "kmp_version.h"
+#include "kmp_debug.h"
+#include "kmp_lock.h"
+#if USE_DEBUGGER
+#include "kmp_debugger.h"
+#endif
+#include "kmp_i18n.h"
+
+#define KMP_HANDLE_SIGNALS (KMP_OS_UNIX || KMP_OS_WINDOWS)
+
+#include "kmp_wrapper_malloc.h"
+#if KMP_OS_UNIX
+# include <unistd.h>
+# if !defined NSIG && defined _NSIG
+# define NSIG _NSIG
+# endif
+#endif
+
+#if KMP_OS_LINUX
+# pragma weak clock_gettime
+#endif
+
+#if OMPT_SUPPORT
+#include "ompt-internal.h"
+#endif
+
+/*Select data placement in NUMA memory */
+#define NO_FIRST_TOUCH 0
+#define FIRST_TOUCH 1 /* Exploit SGI's first touch page placement algo */
+
+/* If not specified on compile command line, assume no first touch */
+#ifndef BUILD_MEMORY
+#define BUILD_MEMORY NO_FIRST_TOUCH
+#endif
+
+// 0 - no fast memory allocation, alignment: 8-byte on x86, 16-byte on x64.
+// 3 - fast allocation using sync, non-sync free lists of any size, non-self free lists of limited size.
+#ifndef USE_FAST_MEMORY
+#define USE_FAST_MEMORY 3
+#endif
+
+#ifndef KMP_NESTED_HOT_TEAMS
+# define KMP_NESTED_HOT_TEAMS 0
+# define USE_NESTED_HOT_ARG(x)
+#else
+# if KMP_NESTED_HOT_TEAMS
+# if OMP_40_ENABLED
+# define USE_NESTED_HOT_ARG(x) ,x
+# else
+// Nested hot teams feature depends on omp 4.0, disable it for earlier versions
+# undef KMP_NESTED_HOT_TEAMS
+# define KMP_NESTED_HOT_TEAMS 0
+# define USE_NESTED_HOT_ARG(x)
+# endif
+# else
+# define USE_NESTED_HOT_ARG(x)
+# endif
+#endif
+
+// Assume using BGET compare_exchange instruction instead of lock by default.
+#ifndef USE_CMP_XCHG_FOR_BGET
+#define USE_CMP_XCHG_FOR_BGET 1
+#endif
+
+// Test to see if queuing lock is better than bootstrap lock for bget
+// #ifndef USE_QUEUING_LOCK_FOR_BGET
+// #define USE_QUEUING_LOCK_FOR_BGET
+// #endif
+
+#define KMP_NSEC_PER_SEC 1000000000L
+#define KMP_USEC_PER_SEC 1000000L
+
+/*!
+@ingroup BASIC_TYPES
+@{
+*/
+
+// FIXME DOXYGEN... need to group these flags somehow (Making them an anonymous enum would do it...)
+/*!
+Values for bit flags used in the ident_t to describe the fields.
+*/
+/*! Use trampoline for internal microtasks */
+#define KMP_IDENT_IMB 0x01
+/*! Use c-style ident structure */
+#define KMP_IDENT_KMPC 0x02
+/* 0x04 is no longer used */
+/*! Entry point generated by auto-parallelization */
+#define KMP_IDENT_AUTOPAR 0x08
+/*! Compiler generates atomic reduction option for kmpc_reduce* */
+#define KMP_IDENT_ATOMIC_REDUCE 0x10
+/*! To mark a 'barrier' directive in user code */
+#define KMP_IDENT_BARRIER_EXPL 0x20
+/*! To Mark implicit barriers. */
+#define KMP_IDENT_BARRIER_IMPL 0x0040
+#define KMP_IDENT_BARRIER_IMPL_MASK 0x01C0
+#define KMP_IDENT_BARRIER_IMPL_FOR 0x0040
+#define KMP_IDENT_BARRIER_IMPL_SECTIONS 0x00C0
+
+#define KMP_IDENT_BARRIER_IMPL_SINGLE 0x0140
+#define KMP_IDENT_BARRIER_IMPL_WORKSHARE 0x01C0
+
+/*!
+ * The ident structure that describes a source location.
+ */
+typedef struct ident {
+ kmp_int32 reserved_1; /**< might be used in Fortran; see above */
+ kmp_int32 flags; /**< also f.flags; KMP_IDENT_xxx flags; KMP_IDENT_KMPC identifies this union member */
+ kmp_int32 reserved_2; /**< not really used in Fortran any more; see above */
+#if USE_ITT_BUILD
+ /* but currently used for storing region-specific ITT */
+ /* contextual information. */
+#endif /* USE_ITT_BUILD */
+ kmp_int32 reserved_3; /**< source[4] in Fortran, do not use for C++ */
+ char const *psource; /**< String describing the source location.
+ The string is composed of semi-colon separated fields which describe the source file,
+ the function and a pair of line numbers that delimit the construct.
+ */
+} ident_t;
+/*!
+@}
+*/
+
+// Some forward declarations.
+
+typedef union kmp_team kmp_team_t;
+typedef struct kmp_taskdata kmp_taskdata_t;
+typedef union kmp_task_team kmp_task_team_t;
+typedef union kmp_team kmp_team_p;
+typedef union kmp_info kmp_info_p;
+typedef union kmp_root kmp_root_p;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* Pack two 32-bit signed integers into a 64-bit signed integer */
+/* ToDo: Fix word ordering for big-endian machines. */
+#define KMP_PACK_64(HIGH_32,LOW_32) \
+ ( (kmp_int64) ((((kmp_uint64)(HIGH_32))<<32) | (kmp_uint64)(LOW_32)) )
+
+
+/*
+ * Generic string manipulation macros.
+ * Assume that _x is of type char *
+ */
+#define SKIP_WS(_x) { while (*(_x) == ' ' || *(_x) == '\t') (_x)++; }
+#define SKIP_DIGITS(_x) { while (*(_x) >= '0' && *(_x) <= '9') (_x)++; }
+#define SKIP_TO(_x,_c) { while (*(_x) != '\0' && *(_x) != (_c)) (_x)++; }
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#define KMP_MAX( x, y ) ( (x) > (y) ? (x) : (y) )
+#define KMP_MIN( x, y ) ( (x) < (y) ? (x) : (y) )
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+
+/* Enumeration types */
+
+enum kmp_state_timer {
+ ts_stop,
+ ts_start,
+ ts_pause,
+
+ ts_last_state
+};
+
+enum dynamic_mode {
+ dynamic_default,
+#ifdef USE_LOAD_BALANCE
+ dynamic_load_balance,
+#endif /* USE_LOAD_BALANCE */
+ dynamic_random,
+ dynamic_thread_limit,
+ dynamic_max
+};
+
+/* external schedule constants, duplicate enum omp_sched in omp.h in order to not include it here */
+#ifndef KMP_SCHED_TYPE_DEFINED
+#define KMP_SCHED_TYPE_DEFINED
+typedef enum kmp_sched {
+ kmp_sched_lower = 0, // lower and upper bounds are for routine parameter check
+ // Note: need to adjust __kmp_sch_map global array in case this enum is changed
+ kmp_sched_static = 1, // mapped to kmp_sch_static_chunked (33)
+ kmp_sched_dynamic = 2, // mapped to kmp_sch_dynamic_chunked (35)
+ kmp_sched_guided = 3, // mapped to kmp_sch_guided_chunked (36)
+ kmp_sched_auto = 4, // mapped to kmp_sch_auto (38)
+ kmp_sched_upper_std = 5, // upper bound for standard schedules
+ kmp_sched_lower_ext = 100, // lower bound of Intel extension schedules
+ kmp_sched_trapezoidal = 101, // mapped to kmp_sch_trapezoidal (39)
+// kmp_sched_static_steal = 102, // mapped to kmp_sch_static_steal (44)
+ kmp_sched_upper = 102,
+ kmp_sched_default = kmp_sched_static // default scheduling
+} kmp_sched_t;
+#endif
+
+/*!
+ @ingroup WORK_SHARING
+ * Describes the loop schedule to be used for a parallel for loop.
+ */
+enum sched_type {
+ kmp_sch_lower = 32, /**< lower bound for unordered values */
+ kmp_sch_static_chunked = 33,
+ kmp_sch_static = 34, /**< static unspecialized */
+ kmp_sch_dynamic_chunked = 35,
+ kmp_sch_guided_chunked = 36, /**< guided unspecialized */
+ kmp_sch_runtime = 37,
+ kmp_sch_auto = 38, /**< auto */
+ kmp_sch_trapezoidal = 39,
+
+ /* accessible only through KMP_SCHEDULE environment variable */
+ kmp_sch_static_greedy = 40,
+ kmp_sch_static_balanced = 41,
+ /* accessible only through KMP_SCHEDULE environment variable */
+ kmp_sch_guided_iterative_chunked = 42,
+ kmp_sch_guided_analytical_chunked = 43,
+
+ kmp_sch_static_steal = 44, /**< accessible only through KMP_SCHEDULE environment variable */
+
+#if OMP_45_ENABLED
+ kmp_sch_static_balanced_chunked = 45, /**< static with chunk adjustment (e.g., simd) */
+#endif
+
+ /* accessible only through KMP_SCHEDULE environment variable */
+ kmp_sch_upper = 46, /**< upper bound for unordered values */
+
+ kmp_ord_lower = 64, /**< lower bound for ordered values, must be power of 2 */
+ kmp_ord_static_chunked = 65,
+ kmp_ord_static = 66, /**< ordered static unspecialized */
+ kmp_ord_dynamic_chunked = 67,
+ kmp_ord_guided_chunked = 68,
+ kmp_ord_runtime = 69,
+ kmp_ord_auto = 70, /**< ordered auto */
+ kmp_ord_trapezoidal = 71,
+ kmp_ord_upper = 72, /**< upper bound for ordered values */
+
+#if OMP_40_ENABLED
+ /* Schedules for Distribute construct */
+ kmp_distribute_static_chunked = 91, /**< distribute static chunked */
+ kmp_distribute_static = 92, /**< distribute static unspecialized */
+#endif
+
+ /*
+ * For the "nomerge" versions, kmp_dispatch_next*() will always return
+ * a single iteration/chunk, even if the loop is serialized. For the
+ * schedule types listed above, the entire iteration vector is returned
+ * if the loop is serialized. This doesn't work for gcc/gcomp sections.
+ */
+ kmp_nm_lower = 160, /**< lower bound for nomerge values */
+
+ kmp_nm_static_chunked = (kmp_sch_static_chunked - kmp_sch_lower + kmp_nm_lower),
+ kmp_nm_static = 162, /**< static unspecialized */
+ kmp_nm_dynamic_chunked = 163,
+ kmp_nm_guided_chunked = 164, /**< guided unspecialized */
+ kmp_nm_runtime = 165,
+ kmp_nm_auto = 166, /**< auto */
+ kmp_nm_trapezoidal = 167,
+
+ /* accessible only through KMP_SCHEDULE environment variable */
+ kmp_nm_static_greedy = 168,
+ kmp_nm_static_balanced = 169,
+ /* accessible only through KMP_SCHEDULE environment variable */
+ kmp_nm_guided_iterative_chunked = 170,
+ kmp_nm_guided_analytical_chunked = 171,
+ kmp_nm_static_steal = 172, /* accessible only through OMP_SCHEDULE environment variable */
+
+ kmp_nm_ord_static_chunked = 193,
+ kmp_nm_ord_static = 194, /**< ordered static unspecialized */
+ kmp_nm_ord_dynamic_chunked = 195,
+ kmp_nm_ord_guided_chunked = 196,
+ kmp_nm_ord_runtime = 197,
+ kmp_nm_ord_auto = 198, /**< auto */
+ kmp_nm_ord_trapezoidal = 199,
+ kmp_nm_upper = 200, /**< upper bound for nomerge values */
+
+#if OMP_45_ENABLED
+ /* Support for OpenMP 4.5 monotonic and nonmonotonic schedule modifiers.
+ * Since we need to distinguish the three possible cases (no modifier, monotonic modifier,
+ * nonmonotonic modifier), we need separate bits for each modifier.
+ * The absence of monotonic does not imply nonmonotonic, especially since 4.5 says
+ * that the behaviour of the "no modifier" case is implementation defined in 4.5,
+ * but will become "nonmonotonic" in 5.0.
+ *
+ * Since we're passing a full 32 bit value, we can use a couple of high bits for these
+ * flags; out of paranoia we avoid the sign bit.
+ *
+ * These modifiers can be or-ed into non-static schedules by the compiler to pass
+ * the additional information.
+ * They will be stripped early in the processing in __kmp_dispatch_init when setting up schedules, so
+ * most of the code won't ever see schedules with these bits set.
+ */
+ kmp_sch_modifier_monotonic = (1<<29), /**< Set if the monotonic schedule modifier was present */
+ kmp_sch_modifier_nonmonotonic = (1<<30), /**< Set if the nonmonotonic schedule modifier was present */
+
+# define SCHEDULE_WITHOUT_MODIFIERS(s) (enum sched_type)((s) & ~ (kmp_sch_modifier_nonmonotonic | kmp_sch_modifier_monotonic))
+# define SCHEDULE_HAS_MONOTONIC(s) (((s) & kmp_sch_modifier_monotonic) != 0)
+# define SCHEDULE_HAS_NONMONOTONIC(s) (((s) & kmp_sch_modifier_nonmonotonic) != 0)
+# define SCHEDULE_HAS_NO_MODIFIERS(s) (((s) & (kmp_sch_modifier_nonmonotonic | kmp_sch_modifier_monotonic)) == 0)
+#else
+ /* By doing this we hope to avoid multiple tests on OMP_45_ENABLED. Compilers can now eliminate tests on compile time
+ * constants and dead code that results from them, so we can leave code guarded by such an if in place.
+ */
+# define SCHEDULE_WITHOUT_MODIFIERS(s) (s)
+# define SCHEDULE_HAS_MONOTONIC(s) false
+# define SCHEDULE_HAS_NONMONOTONIC(s) false
+# define SCHEDULE_HAS_NO_MODIFIERS(s) true
+#endif
+
+ kmp_sch_default = kmp_sch_static /**< default scheduling algorithm */
+};
+
+/* Type to keep runtime schedule set via OMP_SCHEDULE or omp_set_schedule() */
+typedef struct kmp_r_sched {
+ enum sched_type r_sched_type;
+ int chunk;
+} kmp_r_sched_t;
+
+extern enum sched_type __kmp_sch_map[]; // map OMP 3.0 schedule types with our internal schedule types
+
+enum library_type {
+ library_none,
+ library_serial,
+ library_turnaround,
+ library_throughput
+};
+
+#if KMP_OS_LINUX
+enum clock_function_type {
+ clock_function_gettimeofday,
+ clock_function_clock_gettime
+};
+#endif /* KMP_OS_LINUX */
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+enum mic_type {
+ non_mic,
+ mic1,
+ mic2,
+ mic3,
+ dummy
+};
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* -- fast reduction stuff ------------------------------------------------ */
+
+#undef KMP_FAST_REDUCTION_BARRIER
+#define KMP_FAST_REDUCTION_BARRIER 1
+
+#undef KMP_FAST_REDUCTION_CORE_DUO
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ #define KMP_FAST_REDUCTION_CORE_DUO 1
+#endif
+
+enum _reduction_method {
+ reduction_method_not_defined = 0,
+ critical_reduce_block = ( 1 << 8 ),
+ atomic_reduce_block = ( 2 << 8 ),
+ tree_reduce_block = ( 3 << 8 ),
+ empty_reduce_block = ( 4 << 8 )
+};
+
+// description of the packed_reduction_method variable
+// the packed_reduction_method variable consists of two enum types variables that are packed together into 0-th byte and 1-st byte:
+// 0: ( packed_reduction_method & 0x000000FF ) is a 'enum barrier_type' value of barrier that will be used in fast reduction: bs_plain_barrier or bs_reduction_barrier
+// 1: ( packed_reduction_method & 0x0000FF00 ) is a reduction method that will be used in fast reduction;
+// reduction method is of 'enum _reduction_method' type and it's defined the way so that the bits of 0-th byte are empty,
+// so no need to execute a shift instruction while packing/unpacking
+
+#if KMP_FAST_REDUCTION_BARRIER
+ #define PACK_REDUCTION_METHOD_AND_BARRIER(reduction_method,barrier_type) \
+ ( ( reduction_method ) | ( barrier_type ) )
+
+ #define UNPACK_REDUCTION_METHOD(packed_reduction_method) \
+ ( ( enum _reduction_method )( ( packed_reduction_method ) & ( 0x0000FF00 ) ) )
+
+ #define UNPACK_REDUCTION_BARRIER(packed_reduction_method) \
+ ( ( enum barrier_type )( ( packed_reduction_method ) & ( 0x000000FF ) ) )
+#else
+ #define PACK_REDUCTION_METHOD_AND_BARRIER(reduction_method,barrier_type) \
+ ( reduction_method )
+
+ #define UNPACK_REDUCTION_METHOD(packed_reduction_method) \
+ ( packed_reduction_method )
+
+ #define UNPACK_REDUCTION_BARRIER(packed_reduction_method) \
+ ( bs_plain_barrier )
+#endif
+
+#define TEST_REDUCTION_METHOD(packed_reduction_method,which_reduction_block) \
+ ( ( UNPACK_REDUCTION_METHOD( packed_reduction_method ) ) == ( which_reduction_block ) )
+
+#if KMP_FAST_REDUCTION_BARRIER
+ #define TREE_REDUCE_BLOCK_WITH_REDUCTION_BARRIER \
+ ( PACK_REDUCTION_METHOD_AND_BARRIER( tree_reduce_block, bs_reduction_barrier ) )
+
+ #define TREE_REDUCE_BLOCK_WITH_PLAIN_BARRIER \
+ ( PACK_REDUCTION_METHOD_AND_BARRIER( tree_reduce_block, bs_plain_barrier ) )
+#endif
+
+typedef int PACKED_REDUCTION_METHOD_T;
+
+/* -- end of fast reduction stuff ----------------------------------------- */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_OS_WINDOWS
+# define USE_CBLKDATA
+# pragma warning( push )
+# pragma warning( disable: 271 310 )
+# include <windows.h>
+# pragma warning( pop )
+#endif
+
+#if KMP_OS_UNIX
+# include <pthread.h>
+# include <dlfcn.h>
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Only Linux* OS and Windows* OS support thread affinity.
+ */
+#if KMP_AFFINITY_SUPPORTED
+
+# if KMP_GROUP_AFFINITY
+// GROUP_AFFINITY is already defined for _MSC_VER>=1600 (VS2010 and later).
+# if _MSC_VER < 1600
+typedef struct GROUP_AFFINITY {
+ KAFFINITY Mask;
+ WORD Group;
+ WORD Reserved[3];
+} GROUP_AFFINITY;
+# endif /* _MSC_VER < 1600 */
+extern int __kmp_num_proc_groups;
+typedef DWORD (*kmp_GetActiveProcessorCount_t)(WORD);
+extern kmp_GetActiveProcessorCount_t __kmp_GetActiveProcessorCount;
+
+typedef WORD (*kmp_GetActiveProcessorGroupCount_t)(void);
+extern kmp_GetActiveProcessorGroupCount_t __kmp_GetActiveProcessorGroupCount;
+
+typedef BOOL (*kmp_GetThreadGroupAffinity_t)(HANDLE, GROUP_AFFINITY *);
+extern kmp_GetThreadGroupAffinity_t __kmp_GetThreadGroupAffinity;
+
+typedef BOOL (*kmp_SetThreadGroupAffinity_t)(HANDLE, const GROUP_AFFINITY *, GROUP_AFFINITY *);
+extern kmp_SetThreadGroupAffinity_t __kmp_SetThreadGroupAffinity;
+# endif /* KMP_GROUP_AFFINITY */
+
+extern size_t __kmp_affin_mask_size;
+# define KMP_AFFINITY_CAPABLE() (__kmp_affin_mask_size > 0)
+# define KMP_AFFINITY_DISABLE() (__kmp_affin_mask_size = 0)
+# define KMP_AFFINITY_ENABLE(mask_size) (__kmp_affin_mask_size = mask_size)
+# if !KMP_USE_HWLOC
+# define KMP_CPU_SETSIZE (__kmp_affin_mask_size * CHAR_BIT)
+# define KMP_CPU_SET_ITERATE(i,mask) \
+ for(i = 0; (size_t)i < KMP_CPU_SETSIZE; ++i)
+# endif
+
+#if KMP_USE_HWLOC
+
+extern hwloc_topology_t __kmp_hwloc_topology;
+extern int __kmp_hwloc_error;
+typedef hwloc_cpuset_t kmp_affin_mask_t;
+# define KMP_CPU_SET(i,mask) hwloc_bitmap_set((hwloc_cpuset_t)mask, (unsigned)i)
+# define KMP_CPU_ISSET(i,mask) hwloc_bitmap_isset((hwloc_cpuset_t)mask, (unsigned)i)
+# define KMP_CPU_CLR(i,mask) hwloc_bitmap_clr((hwloc_cpuset_t)mask, (unsigned)i)
+# define KMP_CPU_ZERO(mask) hwloc_bitmap_zero((hwloc_cpuset_t)mask)
+# define KMP_CPU_COPY(dest, src) hwloc_bitmap_copy((hwloc_cpuset_t)dest, (hwloc_cpuset_t)src)
+# define KMP_CPU_AND(dest, src) hwloc_bitmap_and((hwloc_cpuset_t)dest, (hwloc_cpuset_t)dest, (hwloc_cpuset_t)src)
+# define KMP_CPU_COMPLEMENT(max_bit_number, mask) \
+ { \
+ unsigned i; \
+ for(i=0;i<(unsigned)max_bit_number+1;i++) { \
+ if(hwloc_bitmap_isset((hwloc_cpuset_t)mask, i)) { \
+ hwloc_bitmap_clr((hwloc_cpuset_t)mask, i); \
+ } else { \
+ hwloc_bitmap_set((hwloc_cpuset_t)mask, i); \
+ } \
+ } \
+ hwloc_bitmap_and((hwloc_cpuset_t)mask, (hwloc_cpuset_t)mask, \
+ (hwloc_cpuset_t)__kmp_affin_fullMask); \
+ } \
+
+# define KMP_CPU_UNION(dest, src) hwloc_bitmap_or((hwloc_cpuset_t)dest, (hwloc_cpuset_t)dest, (hwloc_cpuset_t)src)
+# define KMP_CPU_SET_ITERATE(i,mask) \
+ for(i = hwloc_bitmap_first((hwloc_cpuset_t)mask); (int)i != -1; i = hwloc_bitmap_next((hwloc_cpuset_t)mask, i))
+
+# define KMP_CPU_ALLOC(ptr) ptr = (kmp_affin_mask_t*)hwloc_bitmap_alloc()
+# define KMP_CPU_FREE(ptr) hwloc_bitmap_free((hwloc_bitmap_t)ptr);
+# define KMP_CPU_ALLOC_ON_STACK(ptr) KMP_CPU_ALLOC(ptr)
+# define KMP_CPU_FREE_FROM_STACK(ptr) KMP_CPU_FREE(ptr)
+# define KMP_CPU_INTERNAL_ALLOC(ptr) KMP_CPU_ALLOC(ptr)
+# define KMP_CPU_INTERNAL_FREE(ptr) KMP_CPU_FREE(ptr)
+
+//
+// The following macro should be used to index an array of masks.
+// The array should be declared as "kmp_affinity_t *" and allocated with
+// size "__kmp_affinity_mask_size * len". The macro takes care of the fact
+// that on Windows* OS, sizeof(kmp_affin_t) is really the size of the mask, but
+// on Linux* OS, sizeof(kmp_affin_t) is 1.
+//
+# define KMP_CPU_INDEX(array,i) ((kmp_affin_mask_t*)(array[i]))
+# define KMP_CPU_ALLOC_ARRAY(arr, n) { \
+ arr = (kmp_affin_mask_t *)__kmp_allocate(n*sizeof(kmp_affin_mask_t)); \
+ unsigned i; \
+ for(i=0;i<(unsigned)n;i++) { \
+ arr[i] = hwloc_bitmap_alloc(); \
+ } \
+ }
+# define KMP_CPU_FREE_ARRAY(arr, n) { \
+ unsigned i; \
+ for(i=0;i<(unsigned)n;i++) { \
+ hwloc_bitmap_free(arr[i]); \
+ } \
+ __kmp_free(arr); \
+ }
+# define KMP_CPU_INTERNAL_ALLOC_ARRAY(arr, n) { \
+ arr = (kmp_affin_mask_t *)KMP_INTERNAL_MALLOC(n*sizeof(kmp_affin_mask_t)); \
+ unsigned i; \
+ for(i=0;i<(unsigned)n;i++) { \
+ arr[i] = hwloc_bitmap_alloc(); \
+ } \
+ }
+# define KMP_CPU_INTERNAL_FREE_ARRAY(arr, n) { \
+ unsigned i; \
+ for(i=0;i<(unsigned)n;i++) { \
+ hwloc_bitmap_free(arr[i]); \
+ } \
+ KMP_INTERNAL_FREE(arr); \
+ }
+
+#else /* KMP_USE_HWLOC */
+# if KMP_OS_LINUX
+//
+// On Linux* OS, the mask is actually a vector of length __kmp_affin_mask_size
+// (in bytes). It should be allocated on a word boundary.
+//
+// WARNING!!! We have made the base type of the affinity mask unsigned char,
+// in order to eliminate a lot of checks that the true system mask size is
+// really a multiple of 4 bytes (on Linux* OS).
+//
+// THESE MACROS WON'T WORK PROPERLY ON BIG ENDIAN MACHINES!!!
+//
+
+typedef unsigned char kmp_affin_mask_t;
+
+# define _KMP_CPU_SET(i,mask) (mask[i/CHAR_BIT] |= (((kmp_affin_mask_t)1) << (i % CHAR_BIT)))
+# define KMP_CPU_SET(i,mask) _KMP_CPU_SET((i), ((kmp_affin_mask_t *)(mask)))
+# define _KMP_CPU_ISSET(i,mask) (!!(mask[i/CHAR_BIT] & (((kmp_affin_mask_t)1) << (i % CHAR_BIT))))
+# define KMP_CPU_ISSET(i,mask) _KMP_CPU_ISSET((i), ((kmp_affin_mask_t *)(mask)))
+# define _KMP_CPU_CLR(i,mask) (mask[i/CHAR_BIT] &= ~(((kmp_affin_mask_t)1) << (i % CHAR_BIT)))
+# define KMP_CPU_CLR(i,mask) _KMP_CPU_CLR((i), ((kmp_affin_mask_t *)(mask)))
+
+# define KMP_CPU_ZERO(mask) \
+ { \
+ size_t __i; \
+ for (__i = 0; __i < __kmp_affin_mask_size; __i++) { \
+ ((kmp_affin_mask_t *)(mask))[__i] = 0; \
+ } \
+ }
+
+# define KMP_CPU_COPY(dest, src) \
+ { \
+ size_t __i; \
+ for (__i = 0; __i < __kmp_affin_mask_size; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ = ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+# define KMP_CPU_AND(dest, src) \
+ { \
+ size_t __i; \
+ for (__i = 0; __i < __kmp_affin_mask_size; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ &= ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+# define KMP_CPU_COMPLEMENT(max_bit_number, mask) \
+ { \
+ size_t __i; \
+ for (__i = 0; __i < __kmp_affin_mask_size; __i++) { \
+ ((kmp_affin_mask_t *)(mask))[__i] \
+ = ~((kmp_affin_mask_t *)(mask))[__i]; \
+ } \
+ KMP_CPU_AND(mask, __kmp_affin_fullMask); \
+ }
+
+# define KMP_CPU_UNION(dest, src) \
+ { \
+ size_t __i; \
+ for (__i = 0; __i < __kmp_affin_mask_size; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ |= ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+# endif /* KMP_OS_LINUX */
+
+# if KMP_OS_WINDOWS
+//
+// On Windows* OS, the mask size is 4 bytes for IA-32 architecture, and on
+// Intel(R) 64 it is 8 bytes times the number of processor groups.
+//
+
+# if KMP_GROUP_AFFINITY
+typedef DWORD_PTR kmp_affin_mask_t;
+
+# define _KMP_CPU_SET(i,mask) \
+ (mask[i/(CHAR_BIT * sizeof(kmp_affin_mask_t))] |= \
+ (((kmp_affin_mask_t)1) << (i % (CHAR_BIT * sizeof(kmp_affin_mask_t)))))
+
+# define KMP_CPU_SET(i,mask) \
+ _KMP_CPU_SET((i), ((kmp_affin_mask_t *)(mask)))
+
+# define _KMP_CPU_ISSET(i,mask) \
+ (!!(mask[i/(CHAR_BIT * sizeof(kmp_affin_mask_t))] & \
+ (((kmp_affin_mask_t)1) << (i % (CHAR_BIT * sizeof(kmp_affin_mask_t))))))
+
+# define KMP_CPU_ISSET(i,mask) \
+ _KMP_CPU_ISSET((i), ((kmp_affin_mask_t *)(mask)))
+
+# define _KMP_CPU_CLR(i,mask) \
+ (mask[i/(CHAR_BIT * sizeof(kmp_affin_mask_t))] &= \
+ ~(((kmp_affin_mask_t)1) << (i % (CHAR_BIT * sizeof(kmp_affin_mask_t)))))
+
+# define KMP_CPU_CLR(i,mask) \
+ _KMP_CPU_CLR((i), ((kmp_affin_mask_t *)(mask)))
+
+# define KMP_CPU_ZERO(mask) \
+ { \
+ int __i; \
+ for (__i = 0; __i < __kmp_num_proc_groups; __i++) { \
+ ((kmp_affin_mask_t *)(mask))[__i] = 0; \
+ } \
+ }
+
+# define KMP_CPU_COPY(dest, src) \
+ { \
+ int __i; \
+ for (__i = 0; __i < __kmp_num_proc_groups; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ = ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+# define KMP_CPU_AND(dest, src) \
+ { \
+ int __i; \
+ for (__i = 0; __i < __kmp_num_proc_groups; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ &= ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+# define KMP_CPU_COMPLEMENT(max_bit_number, mask) \
+ { \
+ int __i; \
+ for (__i = 0; __i < __kmp_num_proc_groups; __i++) { \
+ ((kmp_affin_mask_t *)(mask))[__i] \
+ = ~((kmp_affin_mask_t *)(mask))[__i]; \
+ } \
+ KMP_CPU_AND(mask, __kmp_affin_fullMask); \
+ }
+
+# define KMP_CPU_UNION(dest, src) \
+ { \
+ int __i; \
+ for (__i = 0; __i < __kmp_num_proc_groups; __i++) { \
+ ((kmp_affin_mask_t *)(dest))[__i] \
+ |= ((kmp_affin_mask_t *)(src))[__i]; \
+ } \
+ }
+
+
+# else /* KMP_GROUP_AFFINITY */
+
+typedef DWORD kmp_affin_mask_t; /* for compatibility with older winbase.h */
+
+# define KMP_CPU_SET(i,mask) (*(mask) |= (((kmp_affin_mask_t)1) << (i)))
+# define KMP_CPU_ISSET(i,mask) (!!(*(mask) & (((kmp_affin_mask_t)1) << (i))))
+# define KMP_CPU_CLR(i,mask) (*(mask) &= ~(((kmp_affin_mask_t)1) << (i)))
+# define KMP_CPU_ZERO(mask) (*(mask) = 0)
+# define KMP_CPU_COPY(dest, src) (*(dest) = *(src))
+# define KMP_CPU_AND(dest, src) (*(dest) &= *(src))
+# define KMP_CPU_COMPLEMENT(max_bit_number, mask) (*(mask) = ~*(mask)); KMP_CPU_AND(mask, __kmp_affin_fullMask)
+# define KMP_CPU_UNION(dest, src) (*(dest) |= *(src))
+
+# endif /* KMP_GROUP_AFFINITY */
+
+# endif /* KMP_OS_WINDOWS */
+
+//
+// __kmp_allocate() will return memory allocated on a 4-bytes boundary.
+// after zeroing it - it takes care of those assumptions stated above.
+//
+# define KMP_CPU_ALLOC(ptr) \
+ (ptr = ((kmp_affin_mask_t *)__kmp_allocate(__kmp_affin_mask_size)))
+# define KMP_CPU_FREE(ptr) __kmp_free(ptr)
+# define KMP_CPU_ALLOC_ON_STACK(ptr) (ptr = ((kmp_affin_mask_t *)KMP_ALLOCA(__kmp_affin_mask_size)))
+# define KMP_CPU_FREE_FROM_STACK(ptr) /* Nothing */
+# define KMP_CPU_INTERNAL_ALLOC(ptr) (ptr = ((kmp_affin_mask_t *)KMP_INTERNAL_MALLOC(__kmp_affin_mask_size)))
+# define KMP_CPU_INTERNAL_FREE(ptr) KMP_INTERNAL_FREE(ptr)
+
+//
+// The following macro should be used to index an array of masks.
+// The array should be declared as "kmp_affinity_t *" and allocated with
+// size "__kmp_affinity_mask_size * len". The macro takes care of the fact
+// that on Windows* OS, sizeof(kmp_affin_t) is really the size of the mask, but
+// on Linux* OS, sizeof(kmp_affin_t) is 1.
+//
+# define KMP_CPU_INDEX(array,i) \
+ ((kmp_affin_mask_t *)(((char *)(array)) + (i) * __kmp_affin_mask_size))
+# define KMP_CPU_ALLOC_ARRAY(arr, n) arr = (kmp_affin_mask_t *)__kmp_allocate(n * __kmp_affin_mask_size)
+# define KMP_CPU_FREE_ARRAY(arr, n) __kmp_free(arr);
+# define KMP_CPU_INTERNAL_ALLOC_ARRAY(arr, n) arr = (kmp_affin_mask_t *)KMP_INTERNAL_MALLOC(n * __kmp_affin_mask_size)
+# define KMP_CPU_INTERNAL_FREE_ARRAY(arr, n) KMP_INTERNAL_FREE(arr);
+
+#endif /* KMP_USE_HWLOC */
+
+// prototype after typedef of kmp_affin_mask_t
+#if KMP_GROUP_AFFINITY
+extern int __kmp_get_proc_group(kmp_affin_mask_t const *mask);
+#endif
+
+//
+// Declare local char buffers with this size for printing debug and info
+// messages, using __kmp_affinity_print_mask().
+//
+#define KMP_AFFIN_MASK_PRINT_LEN 1024
+
+enum affinity_type {
+ affinity_none = 0,
+ affinity_physical,
+ affinity_logical,
+ affinity_compact,
+ affinity_scatter,
+ affinity_explicit,
+ affinity_balanced,
+ affinity_disabled, // not used outsize the env var parser
+ affinity_default
+};
+
+enum affinity_gran {
+ affinity_gran_fine = 0,
+ affinity_gran_thread,
+ affinity_gran_core,
+ affinity_gran_package,
+ affinity_gran_node,
+#if KMP_GROUP_AFFINITY
+ //
+ // The "group" granularity isn't necesssarily coarser than all of the
+ // other levels, but we put it last in the enum.
+ //
+ affinity_gran_group,
+#endif /* KMP_GROUP_AFFINITY */
+ affinity_gran_default
+};
+
+enum affinity_top_method {
+ affinity_top_method_all = 0, // try all (supported) methods, in order
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ affinity_top_method_apicid,
+ affinity_top_method_x2apicid,
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+ affinity_top_method_cpuinfo, // KMP_CPUINFO_FILE is usable on Windows* OS, too
+#if KMP_GROUP_AFFINITY
+ affinity_top_method_group,
+#endif /* KMP_GROUP_AFFINITY */
+ affinity_top_method_flat,
+#if KMP_USE_HWLOC
+ affinity_top_method_hwloc,
+#endif
+ affinity_top_method_default
+};
+
+#define affinity_respect_mask_default (-1)
+
+extern enum affinity_type __kmp_affinity_type; /* Affinity type */
+extern enum affinity_gran __kmp_affinity_gran; /* Affinity granularity */
+extern int __kmp_affinity_gran_levels; /* corresponding int value */
+extern int __kmp_affinity_dups; /* Affinity duplicate masks */
+extern enum affinity_top_method __kmp_affinity_top_method;
+extern int __kmp_affinity_compact; /* Affinity 'compact' value */
+extern int __kmp_affinity_offset; /* Affinity offset value */
+extern int __kmp_affinity_verbose; /* Was verbose specified for KMP_AFFINITY? */
+extern int __kmp_affinity_warnings; /* KMP_AFFINITY warnings enabled ? */
+extern int __kmp_affinity_respect_mask; /* Respect process' initial affinity mask? */
+extern char * __kmp_affinity_proclist; /* proc ID list */
+extern kmp_affin_mask_t *__kmp_affinity_masks;
+extern unsigned __kmp_affinity_num_masks;
+extern int __kmp_get_system_affinity(kmp_affin_mask_t *mask, int abort_on_error);
+extern int __kmp_set_system_affinity(kmp_affin_mask_t const *mask, int abort_on_error);
+extern void __kmp_affinity_bind_thread(int which);
+
+extern kmp_affin_mask_t *__kmp_affin_fullMask;
+extern char const * __kmp_cpuinfo_file;
+
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+#if OMP_40_ENABLED
+
+//
+// This needs to be kept in sync with the values in omp.h !!!
+//
+typedef enum kmp_proc_bind_t {
+ proc_bind_false = 0,
+ proc_bind_true,
+ proc_bind_master,
+ proc_bind_close,
+ proc_bind_spread,
+ proc_bind_intel, // use KMP_AFFINITY interface
+ proc_bind_default
+} kmp_proc_bind_t;
+
+typedef struct kmp_nested_proc_bind_t {
+ kmp_proc_bind_t *bind_types;
+ int size;
+ int used;
+} kmp_nested_proc_bind_t;
+
+extern kmp_nested_proc_bind_t __kmp_nested_proc_bind;
+
+#endif /* OMP_40_ENABLED */
+
+# if KMP_AFFINITY_SUPPORTED
+# define KMP_PLACE_ALL (-1)
+# define KMP_PLACE_UNDEFINED (-2)
+# endif /* KMP_AFFINITY_SUPPORTED */
+
+extern int __kmp_affinity_num_places;
+
+
+#if OMP_40_ENABLED
+typedef enum kmp_cancel_kind_t {
+ cancel_noreq = 0,
+ cancel_parallel = 1,
+ cancel_loop = 2,
+ cancel_sections = 3,
+ cancel_taskgroup = 4
+} kmp_cancel_kind_t;
+#endif // OMP_40_ENABLED
+
+extern int __kmp_place_num_sockets;
+extern int __kmp_place_socket_offset;
+extern int __kmp_place_num_cores;
+extern int __kmp_place_core_offset;
+extern int __kmp_place_num_threads_per_core;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#define KMP_PAD(type, sz) (sizeof(type) + (sz - ((sizeof(type) - 1) % (sz)) - 1))
+
+//
+// We need to avoid using -1 as a GTID as +1 is added to the gtid
+// when storing it in a lock, and the value 0 is reserved.
+//
+#define KMP_GTID_DNE (-2) /* Does not exist */
+#define KMP_GTID_SHUTDOWN (-3) /* Library is shutting down */
+#define KMP_GTID_MONITOR (-4) /* Monitor thread ID */
+#define KMP_GTID_UNKNOWN (-5) /* Is not known */
+#define KMP_GTID_MIN (-6) /* Minimal gtid for low bound check in DEBUG */
+
+#define __kmp_get_gtid() __kmp_get_global_thread_id()
+#define __kmp_entry_gtid() __kmp_get_global_thread_id_reg()
+
+#define __kmp_tid_from_gtid(gtid) ( KMP_DEBUG_ASSERT( (gtid) >= 0 ), \
+ __kmp_threads[ (gtid) ]->th.th_info.ds.ds_tid )
+
+#define __kmp_get_tid() ( __kmp_tid_from_gtid( __kmp_get_gtid() ) )
+#define __kmp_gtid_from_tid(tid,team) ( KMP_DEBUG_ASSERT( (tid) >= 0 && (team) != NULL ), \
+ team -> t.t_threads[ (tid) ] -> th.th_info .ds.ds_gtid )
+
+#define __kmp_get_team() ( __kmp_threads[ (__kmp_get_gtid()) ]-> th.th_team )
+#define __kmp_team_from_gtid(gtid) ( KMP_DEBUG_ASSERT( (gtid) >= 0 ), \
+ __kmp_threads[ (gtid) ]-> th.th_team )
+
+#define __kmp_thread_from_gtid(gtid) ( KMP_DEBUG_ASSERT( (gtid) >= 0 ), __kmp_threads[ (gtid) ] )
+#define __kmp_get_thread() ( __kmp_thread_from_gtid( __kmp_get_gtid() ) )
+
+ // Returns current thread (pointer to kmp_info_t). In contrast to __kmp_get_thread(), it works
+ // with registered and not-yet-registered threads.
+#define __kmp_gtid_from_thread(thr) ( KMP_DEBUG_ASSERT( (thr) != NULL ), \
+ (thr)->th.th_info.ds.ds_gtid )
+
+// AT: Which way is correct?
+// AT: 1. nproc = __kmp_threads[ ( gtid ) ] -> th.th_team -> t.t_nproc;
+// AT: 2. nproc = __kmp_threads[ ( gtid ) ] -> th.th_team_nproc;
+#define __kmp_get_team_num_threads(gtid) ( __kmp_threads[ ( gtid ) ] -> th.th_team -> t.t_nproc )
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#define KMP_UINT64_MAX (~((kmp_uint64)1<<((sizeof(kmp_uint64)*(1<<3))-1)))
+
+#define KMP_MIN_NTH 1
+
+#ifndef KMP_MAX_NTH
+# if defined(PTHREAD_THREADS_MAX) && PTHREAD_THREADS_MAX < INT_MAX
+# define KMP_MAX_NTH PTHREAD_THREADS_MAX
+# else
+# define KMP_MAX_NTH INT_MAX
+# endif
+#endif /* KMP_MAX_NTH */
+
+#ifdef PTHREAD_STACK_MIN
+# define KMP_MIN_STKSIZE PTHREAD_STACK_MIN
+#else
+# define KMP_MIN_STKSIZE ((size_t)(32 * 1024))
+#endif
+
+#define KMP_MAX_STKSIZE (~((size_t)1<<((sizeof(size_t)*(1<<3))-1)))
+
+#if KMP_ARCH_X86
+# define KMP_DEFAULT_STKSIZE ((size_t)(2 * 1024 * 1024))
+#elif KMP_ARCH_X86_64
+# define KMP_DEFAULT_STKSIZE ((size_t)(4 * 1024 * 1024))
+# define KMP_BACKUP_STKSIZE ((size_t)(2 * 1024 * 1024))
+#else
+# define KMP_DEFAULT_STKSIZE ((size_t)(1024 * 1024))
+#endif
+
+#define KMP_DEFAULT_MONITOR_STKSIZE ((size_t)(64 * 1024))
+
+#define KMP_DEFAULT_MALLOC_POOL_INCR ((size_t) (1024 * 1024))
+#define KMP_MIN_MALLOC_POOL_INCR ((size_t) (4 * 1024))
+#define KMP_MAX_MALLOC_POOL_INCR (~((size_t)1<<((sizeof(size_t)*(1<<3))-1)))
+
+#define KMP_MIN_STKOFFSET (0)
+#define KMP_MAX_STKOFFSET KMP_MAX_STKSIZE
+#if KMP_OS_DARWIN
+# define KMP_DEFAULT_STKOFFSET KMP_MIN_STKOFFSET
+#else
+# define KMP_DEFAULT_STKOFFSET CACHE_LINE
+#endif
+
+#define KMP_MIN_STKPADDING (0)
+#define KMP_MAX_STKPADDING (2 * 1024 * 1024)
+
+#define KMP_MIN_MONITOR_WAKEUPS (1) /* min number of times monitor wakes up per second */
+#define KMP_MAX_MONITOR_WAKEUPS (1000) /* maximum number of times monitor can wake up per second */
+#define KMP_BLOCKTIME_MULTIPLIER (1000) /* number of blocktime units per second */
+#define KMP_MIN_BLOCKTIME (0)
+#define KMP_MAX_BLOCKTIME (INT_MAX) /* Must be this for "infinite" setting the work */
+#define KMP_DEFAULT_BLOCKTIME (200) /* __kmp_blocktime is in milliseconds */
+/* Calculate new number of monitor wakeups for a specific block time based on previous monitor_wakeups */
+/* Only allow increasing number of wakeups */
+#define KMP_WAKEUPS_FROM_BLOCKTIME(blocktime, monitor_wakeups) \
+ ( ((blocktime) == KMP_MAX_BLOCKTIME) ? (monitor_wakeups) : \
+ ((blocktime) == KMP_MIN_BLOCKTIME) ? KMP_MAX_MONITOR_WAKEUPS : \
+ ((monitor_wakeups) > (KMP_BLOCKTIME_MULTIPLIER / (blocktime))) ? (monitor_wakeups) : \
+ (KMP_BLOCKTIME_MULTIPLIER) / (blocktime) )
+
+/* Calculate number of intervals for a specific block time based on monitor_wakeups */
+#define KMP_INTERVALS_FROM_BLOCKTIME(blocktime, monitor_wakeups) \
+ ( ( (blocktime) + (KMP_BLOCKTIME_MULTIPLIER / (monitor_wakeups)) - 1 ) / \
+ (KMP_BLOCKTIME_MULTIPLIER / (monitor_wakeups)) )
+
+#define KMP_MIN_STATSCOLS 40
+#define KMP_MAX_STATSCOLS 4096
+#define KMP_DEFAULT_STATSCOLS 80
+
+#define KMP_MIN_INTERVAL 0
+#define KMP_MAX_INTERVAL (INT_MAX-1)
+#define KMP_DEFAULT_INTERVAL 0
+
+#define KMP_MIN_CHUNK 1
+#define KMP_MAX_CHUNK (INT_MAX-1)
+#define KMP_DEFAULT_CHUNK 1
+
+#define KMP_MIN_INIT_WAIT 1
+#define KMP_MAX_INIT_WAIT (INT_MAX/2)
+#define KMP_DEFAULT_INIT_WAIT 2048U
+
+#define KMP_MIN_NEXT_WAIT 1
+#define KMP_MAX_NEXT_WAIT (INT_MAX/2)
+#define KMP_DEFAULT_NEXT_WAIT 1024U
+
+#define KMP_DFLT_DISP_NUM_BUFF 7
+#define KMP_MAX_ORDERED 8
+
+#define KMP_MAX_FIELDS 32
+
+#define KMP_MAX_BRANCH_BITS 31
+
+#define KMP_MAX_ACTIVE_LEVELS_LIMIT INT_MAX
+
+#define KMP_MAX_TASK_PRIORITY_LIMIT INT_MAX
+
+/* Minimum number of threads before switch to TLS gtid (experimentally determined) */
+/* josh TODO: what about OS X* tuning? */
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+# define KMP_TLS_GTID_MIN 5
+#else
+# define KMP_TLS_GTID_MIN INT_MAX
+#endif
+
+#define KMP_MASTER_TID(tid) ( (tid) == 0 )
+#define KMP_WORKER_TID(tid) ( (tid) != 0 )
+
+#define KMP_MASTER_GTID(gtid) ( __kmp_tid_from_gtid((gtid)) == 0 )
+#define KMP_WORKER_GTID(gtid) ( __kmp_tid_from_gtid((gtid)) != 0 )
+#define KMP_UBER_GTID(gtid) \
+ ( \
+ KMP_DEBUG_ASSERT( (gtid) >= KMP_GTID_MIN ), \
+ KMP_DEBUG_ASSERT( (gtid) < __kmp_threads_capacity ), \
+ (gtid) >= 0 && __kmp_root[(gtid)] && __kmp_threads[(gtid)] && \
+ (__kmp_threads[(gtid)] == __kmp_root[(gtid)]->r.r_uber_thread)\
+ )
+#define KMP_INITIAL_GTID(gtid) ( (gtid) == 0 )
+
+#ifndef TRUE
+#define FALSE 0
+#define TRUE (! FALSE)
+#endif
+
+/* NOTE: all of the following constants must be even */
+
+#if KMP_OS_WINDOWS
+# define KMP_INIT_WAIT 64U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 32U /* susequent number of spin-tests */
+#elif KMP_OS_CNK
+# define KMP_INIT_WAIT 16U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 8U /* susequent number of spin-tests */
+#elif KMP_OS_LINUX
+# define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
+#elif KMP_OS_DARWIN
+/* TODO: tune for KMP_OS_DARWIN */
+# define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
+#elif KMP_OS_FREEBSD
+/* TODO: tune for KMP_OS_FREEBSD */
+# define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
+#elif KMP_OS_NETBSD
+/* TODO: tune for KMP_OS_NETBSD */
+# define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
+# define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+typedef struct kmp_cpuid {
+ kmp_uint32 eax;
+ kmp_uint32 ebx;
+ kmp_uint32 ecx;
+ kmp_uint32 edx;
+} kmp_cpuid_t;
+extern void __kmp_x86_cpuid( int mode, int mode2, struct kmp_cpuid *p );
+# if KMP_ARCH_X86
+ extern void __kmp_x86_pause( void );
+# elif KMP_MIC
+ static void __kmp_x86_pause( void ) { _mm_delay_32( 100 ); }
+# else
+ static void __kmp_x86_pause( void ) { _mm_pause(); }
+# endif
+# define KMP_CPU_PAUSE() __kmp_x86_pause()
+#elif KMP_ARCH_PPC64
+# define KMP_PPC64_PRI_LOW() __asm__ volatile ("or 1, 1, 1")
+# define KMP_PPC64_PRI_MED() __asm__ volatile ("or 2, 2, 2")
+# define KMP_PPC64_PRI_LOC_MB() __asm__ volatile ("" : : : "memory")
+# define KMP_CPU_PAUSE() do { KMP_PPC64_PRI_LOW(); KMP_PPC64_PRI_MED(); KMP_PPC64_PRI_LOC_MB(); } while (0)
+#else
+# define KMP_CPU_PAUSE() /* nothing to do */
+#endif
+
+#define KMP_INIT_YIELD(count) { (count) = __kmp_yield_init; }
+
+#define KMP_YIELD(cond) { KMP_CPU_PAUSE(); __kmp_yield( (cond) ); }
+
+// Note the decrement of 2 in the following Macros. With KMP_LIBRARY=turnaround,
+// there should be no yielding since the starting value from KMP_INIT_YIELD() is odd.
+
+#define KMP_YIELD_WHEN(cond,count) { KMP_CPU_PAUSE(); (count) -= 2; \
+ if (!(count)) { KMP_YIELD(cond); (count) = __kmp_yield_next; } }
+#define KMP_YIELD_SPIN(count) { KMP_CPU_PAUSE(); (count) -=2; \
+ if (!(count)) { KMP_YIELD(1); (count) = __kmp_yield_next; } }
+
+/* ------------------------------------------------------------------------ */
+/* Support datatypes for the orphaned construct nesting checks. */
+/* ------------------------------------------------------------------------ */
+
+enum cons_type {
+ ct_none,
+ ct_parallel,
+ ct_pdo,
+ ct_pdo_ordered,
+ ct_psections,
+ ct_psingle,
+
+ /* the following must be left in order and not split up */
+ ct_taskq,
+ ct_task, /* really task inside non-ordered taskq, considered a worksharing type */
+ ct_task_ordered, /* really task inside ordered taskq, considered a worksharing type */
+ /* the preceding must be left in order and not split up */
+
+ ct_critical,
+ ct_ordered_in_parallel,
+ ct_ordered_in_pdo,
+ ct_ordered_in_taskq,
+ ct_master,
+ ct_reduce,
+ ct_barrier
+};
+
+/* test to see if we are in a taskq construct */
+# define IS_CONS_TYPE_TASKQ( ct ) ( ((int)(ct)) >= ((int)ct_taskq) && ((int)(ct)) <= ((int)ct_task_ordered) )
+# define IS_CONS_TYPE_ORDERED( ct ) ((ct) == ct_pdo_ordered || (ct) == ct_task_ordered)
+
+struct cons_data {
+ ident_t const *ident;
+ enum cons_type type;
+ int prev;
+ kmp_user_lock_p name; /* address exclusively for critical section name comparison */
+};
+
+struct cons_header {
+ int p_top, w_top, s_top;
+ int stack_size, stack_top;
+ struct cons_data *stack_data;
+};
+
+struct kmp_region_info {
+ char *text;
+ int offset[KMP_MAX_FIELDS];
+ int length[KMP_MAX_FIELDS];
+};
+
+
+/* ---------------------------------------------------------------------- */
+/* ---------------------------------------------------------------------- */
+
+#if KMP_OS_WINDOWS
+ typedef HANDLE kmp_thread_t;
+ typedef DWORD kmp_key_t;
+#endif /* KMP_OS_WINDOWS */
+
+#if KMP_OS_UNIX
+ typedef pthread_t kmp_thread_t;
+ typedef pthread_key_t kmp_key_t;
+#endif
+
+extern kmp_key_t __kmp_gtid_threadprivate_key;
+
+typedef struct kmp_sys_info {
+ long maxrss; /* the maximum resident set size utilized (in kilobytes) */
+ long minflt; /* the number of page faults serviced without any I/O */
+ long majflt; /* the number of page faults serviced that required I/O */
+ long nswap; /* the number of times a process was "swapped" out of memory */
+ long inblock; /* the number of times the file system had to perform input */
+ long oublock; /* the number of times the file system had to perform output */
+ long nvcsw; /* the number of times a context switch was voluntarily */
+ long nivcsw; /* the number of times a context switch was forced */
+} kmp_sys_info_t;
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+typedef struct kmp_cpuinfo {
+ int initialized; // If 0, other fields are not initialized.
+ int signature; // CPUID(1).EAX
+ int family; // CPUID(1).EAX[27:20] + CPUID(1).EAX[11:8] ( Extended Family + Family )
+ int model; // ( CPUID(1).EAX[19:16] << 4 ) + CPUID(1).EAX[7:4] ( ( Extended Model << 4 ) + Model)
+ int stepping; // CPUID(1).EAX[3:0] ( Stepping )
+ int sse2; // 0 if SSE2 instructions are not supported, 1 otherwise.
+ int rtm; // 0 if RTM instructions are not supported, 1 otherwise.
+ int cpu_stackoffset;
+ int apic_id;
+ int physical_id;
+ int logical_id;
+ kmp_uint64 frequency; // Nominal CPU frequency in Hz.
+ char name [3*sizeof (kmp_cpuid_t)]; // CPUID(0x80000002,0x80000003,0x80000004)
+} kmp_cpuinfo_t;
+#endif
+
+#ifdef BUILD_TV
+
+struct tv_threadprivate {
+ /* Record type #1 */
+ void *global_addr;
+ void *thread_addr;
+};
+
+struct tv_data {
+ struct tv_data *next;
+ void *type;
+ union tv_union {
+ struct tv_threadprivate tp;
+ } u;
+};
+
+extern kmp_key_t __kmp_tv_key;
+
+#endif /* BUILD_TV */
+
+/* ------------------------------------------------------------------------ */
+
+#if USE_ITT_BUILD
+// We cannot include "kmp_itt.h" due to circular dependency. Declare the only required type here.
+// Later we will check the type meets requirements.
+typedef int kmp_itt_mark_t;
+#define KMP_ITT_DEBUG 0
+#endif /* USE_ITT_BUILD */
+
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Taskq data structures
+ */
+
+#define HIGH_WATER_MARK(nslots) (((nslots) * 3) / 4)
+#define __KMP_TASKQ_THUNKS_PER_TH 1 /* num thunks that each thread can simultaneously execute from a task queue */
+
+/* flags for taskq_global_flags, kmp_task_queue_t tq_flags, kmpc_thunk_t th_flags */
+
+#define TQF_IS_ORDERED 0x0001 /* __kmpc_taskq interface, taskq ordered */
+#define TQF_IS_LASTPRIVATE 0x0002 /* __kmpc_taskq interface, taskq with lastprivate list */
+#define TQF_IS_NOWAIT 0x0004 /* __kmpc_taskq interface, end taskq nowait */
+#define TQF_HEURISTICS 0x0008 /* __kmpc_taskq interface, use heuristics to decide task queue size */
+#define TQF_INTERFACE_RESERVED1 0x0010 /* __kmpc_taskq interface, reserved for future use */
+#define TQF_INTERFACE_RESERVED2 0x0020 /* __kmpc_taskq interface, reserved for future use */
+#define TQF_INTERFACE_RESERVED3 0x0040 /* __kmpc_taskq interface, reserved for future use */
+#define TQF_INTERFACE_RESERVED4 0x0080 /* __kmpc_taskq interface, reserved for future use */
+
+#define TQF_INTERFACE_FLAGS 0x00ff /* all the __kmpc_taskq interface flags */
+
+#define TQF_IS_LAST_TASK 0x0100 /* internal/read by instrumentation; only used with TQF_IS_LASTPRIVATE */
+#define TQF_TASKQ_TASK 0x0200 /* internal use only; this thunk->th_task is the taskq_task */
+#define TQF_RELEASE_WORKERS 0x0400 /* internal use only; must release worker threads once ANY queued task exists (global) */
+#define TQF_ALL_TASKS_QUEUED 0x0800 /* internal use only; notify workers that master has finished enqueuing tasks */
+#define TQF_PARALLEL_CONTEXT 0x1000 /* internal use only: this queue encountered in a parallel context: not serialized */
+#define TQF_DEALLOCATED 0x2000 /* internal use only; this queue is on the freelist and not in use */
+
+#define TQF_INTERNAL_FLAGS 0x3f00 /* all the internal use only flags */
+
+typedef struct KMP_ALIGN_CACHE kmpc_aligned_int32_t {
+ kmp_int32 ai_data;
+} kmpc_aligned_int32_t;
+
+typedef struct KMP_ALIGN_CACHE kmpc_aligned_queue_slot_t {
+ struct kmpc_thunk_t *qs_thunk;
+} kmpc_aligned_queue_slot_t;
+
+typedef struct kmpc_task_queue_t {
+ /* task queue linkage fields for n-ary tree of queues (locked with global taskq_tree_lck) */
+ kmp_lock_t tq_link_lck; /* lock for child link, child next/prev links and child ref counts */
+ union {
+ struct kmpc_task_queue_t *tq_parent; /* pointer to parent taskq, not locked */
+ struct kmpc_task_queue_t *tq_next_free; /* for taskq internal freelists, locked with global taskq_freelist_lck */
+ } tq;
+ volatile struct kmpc_task_queue_t *tq_first_child; /* pointer to linked-list of children, locked by tq's tq_link_lck */
+ struct kmpc_task_queue_t *tq_next_child; /* next child in linked-list, locked by parent tq's tq_link_lck */
+ struct kmpc_task_queue_t *tq_prev_child; /* previous child in linked-list, locked by parent tq's tq_link_lck */
+ volatile kmp_int32 tq_ref_count; /* reference count of threads with access to this task queue */
+ /* (other than the thread executing the kmpc_end_taskq call) */
+ /* locked by parent tq's tq_link_lck */
+
+ /* shared data for task queue */
+ struct kmpc_aligned_shared_vars_t *tq_shareds; /* per-thread array of pointers to shared variable structures */
+ /* only one array element exists for all but outermost taskq */
+
+ /* bookkeeping for ordered task queue */
+ kmp_uint32 tq_tasknum_queuing; /* ordered task number assigned while queuing tasks */
+ volatile kmp_uint32 tq_tasknum_serving; /* ordered number of next task to be served (executed) */
+
+ /* thunk storage management for task queue */
+ kmp_lock_t tq_free_thunks_lck; /* lock for thunk freelist manipulation */
+ struct kmpc_thunk_t *tq_free_thunks; /* thunk freelist, chained via th.th_next_free */
+ struct kmpc_thunk_t *tq_thunk_space; /* space allocated for thunks for this task queue */
+
+ /* data fields for queue itself */
+ kmp_lock_t tq_queue_lck; /* lock for [de]enqueue operations: tq_queue, tq_head, tq_tail, tq_nfull */
+ kmpc_aligned_queue_slot_t *tq_queue; /* array of queue slots to hold thunks for tasks */
+ volatile struct kmpc_thunk_t *tq_taskq_slot; /* special slot for taskq task thunk, occupied if not NULL */
+ kmp_int32 tq_nslots; /* # of tq_thunk_space thunks alloc'd (not incl. tq_taskq_slot space) */
+ kmp_int32 tq_head; /* enqueue puts next item in here (index into tq_queue array) */
+ kmp_int32 tq_tail; /* dequeue takes next item out of here (index into tq_queue array) */
+ volatile kmp_int32 tq_nfull; /* # of occupied entries in task queue right now */
+ kmp_int32 tq_hiwat; /* high-water mark for tq_nfull and queue scheduling */
+ volatile kmp_int32 tq_flags; /* TQF_xxx */
+
+ /* bookkeeping for outstanding thunks */
+ struct kmpc_aligned_int32_t *tq_th_thunks; /* per-thread array for # of regular thunks currently being executed */
+ kmp_int32 tq_nproc; /* number of thunks in the th_thunks array */
+
+ /* statistics library bookkeeping */
+ ident_t *tq_loc; /* source location information for taskq directive */
+} kmpc_task_queue_t;
+
+typedef void (*kmpc_task_t) (kmp_int32 global_tid, struct kmpc_thunk_t *thunk);
+
+/* sizeof_shareds passed as arg to __kmpc_taskq call */
+typedef struct kmpc_shared_vars_t { /* aligned during dynamic allocation */
+ kmpc_task_queue_t *sv_queue;
+ /* (pointers to) shared vars */
+} kmpc_shared_vars_t;
+
+typedef struct KMP_ALIGN_CACHE kmpc_aligned_shared_vars_t {
+ volatile struct kmpc_shared_vars_t *ai_data;
+} kmpc_aligned_shared_vars_t;
+
+/* sizeof_thunk passed as arg to kmpc_taskq call */
+typedef struct kmpc_thunk_t { /* aligned during dynamic allocation */
+ union { /* field used for internal freelists too */
+ kmpc_shared_vars_t *th_shareds;
+ struct kmpc_thunk_t *th_next_free; /* freelist of individual thunks within queue, head at tq_free_thunks */
+ } th;
+ kmpc_task_t th_task; /* taskq_task if flags & TQF_TASKQ_TASK */
+ struct kmpc_thunk_t *th_encl_thunk; /* pointer to dynamically enclosing thunk on this thread's call stack */
+ kmp_int32 th_flags; /* TQF_xxx (tq_flags interface plus possible internal flags) */
+ kmp_int32 th_status;
+ kmp_uint32 th_tasknum; /* task number assigned in order of queuing, used for ordered sections */
+ /* private vars */
+} kmpc_thunk_t;
+
+typedef struct KMP_ALIGN_CACHE kmp_taskq {
+ int tq_curr_thunk_capacity;
+
+ kmpc_task_queue_t *tq_root;
+ kmp_int32 tq_global_flags;
+
+ kmp_lock_t tq_freelist_lck;
+ kmpc_task_queue_t *tq_freelist;
+
+ kmpc_thunk_t **tq_curr_thunk;
+} kmp_taskq_t;
+
+/* END Taskq data structures */
+/* --------------------------------------------------------------------------- */
+
+typedef kmp_int32 kmp_critical_name[8];
+
+/*!
+@ingroup PARALLEL
+The type for a microtask which gets passed to @ref __kmpc_fork_call().
+The arguments to the outlined function are
+@param global_tid the global thread identity of the thread executing the function.
+@param bound_tid the local identitiy of the thread executing the function
+@param ... pointers to shared variables accessed by the function.
+*/
+typedef void (*kmpc_micro) ( kmp_int32 * global_tid, kmp_int32 * bound_tid, ... );
+typedef void (*kmpc_micro_bound) ( kmp_int32 * bound_tid, kmp_int32 * bound_nth, ... );
+
+/*!
+@ingroup THREADPRIVATE
+@{
+*/
+/* --------------------------------------------------------------------------- */
+/* Threadprivate initialization/finalization function declarations */
+
+/* for non-array objects: __kmpc_threadprivate_register() */
+
+/*!
+ Pointer to the constructor function.
+ The first argument is the <tt>this</tt> pointer
+*/
+typedef void *(*kmpc_ctor) (void *);
+
+/*!
+ Pointer to the destructor function.
+ The first argument is the <tt>this</tt> pointer
+*/
+typedef void (*kmpc_dtor) (void * /*, size_t */); /* 2nd arg: magic number for KCC unused by Intel compiler */
+/*!
+ Pointer to an alternate constructor.
+ The first argument is the <tt>this</tt> pointer.
+*/
+typedef void *(*kmpc_cctor) (void *, void *);
+
+/* for array objects: __kmpc_threadprivate_register_vec() */
+ /* First arg: "this" pointer */
+ /* Last arg: number of array elements */
+/*!
+ Array constructor.
+ First argument is the <tt>this</tt> pointer
+ Second argument the number of array elements.
+*/
+typedef void *(*kmpc_ctor_vec) (void *, size_t);
+/*!
+ Pointer to the array destructor function.
+ The first argument is the <tt>this</tt> pointer
+ Second argument the number of array elements.
+*/
+typedef void (*kmpc_dtor_vec) (void *, size_t);
+/*!
+ Array constructor.
+ First argument is the <tt>this</tt> pointer
+ Third argument the number of array elements.
+*/
+typedef void *(*kmpc_cctor_vec) (void *, void *, size_t); /* function unused by compiler */
+
+/*!
+@}
+*/
+
+
+/* ------------------------------------------------------------------------ */
+
+/* keeps tracked of threadprivate cache allocations for cleanup later */
+typedef struct kmp_cached_addr {
+ void **addr; /* address of allocated cache */
+ struct kmp_cached_addr *next; /* pointer to next cached address */
+} kmp_cached_addr_t;
+
+struct private_data {
+ struct private_data *next; /* The next descriptor in the list */
+ void *data; /* The data buffer for this descriptor */
+ int more; /* The repeat count for this descriptor */
+ size_t size; /* The data size for this descriptor */
+};
+
+struct private_common {
+ struct private_common *next;
+ struct private_common *link;
+ void *gbl_addr;
+ void *par_addr; /* par_addr == gbl_addr for MASTER thread */
+ size_t cmn_size;
+};
+
+struct shared_common
+{
+ struct shared_common *next;
+ struct private_data *pod_init;
+ void *obj_init;
+ void *gbl_addr;
+ union {
+ kmpc_ctor ctor;
+ kmpc_ctor_vec ctorv;
+ } ct;
+ union {
+ kmpc_cctor cctor;
+ kmpc_cctor_vec cctorv;
+ } cct;
+ union {
+ kmpc_dtor dtor;
+ kmpc_dtor_vec dtorv;
+ } dt;
+ size_t vec_len;
+ int is_vec;
+ size_t cmn_size;
+};
+
+#define KMP_HASH_TABLE_LOG2 9 /* log2 of the hash table size */
+#define KMP_HASH_TABLE_SIZE (1 << KMP_HASH_TABLE_LOG2) /* size of the hash table */
+#define KMP_HASH_SHIFT 3 /* throw away this many low bits from the address */
+#define KMP_HASH(x) ((((kmp_uintptr_t) x) >> KMP_HASH_SHIFT) & (KMP_HASH_TABLE_SIZE-1))
+
+struct common_table {
+ struct private_common *data[ KMP_HASH_TABLE_SIZE ];
+};
+
+struct shared_table {
+ struct shared_common *data[ KMP_HASH_TABLE_SIZE ];
+};
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_STATIC_STEAL_ENABLED
+typedef struct KMP_ALIGN_CACHE dispatch_private_info32 {
+ kmp_int32 count;
+ kmp_int32 ub;
+ /* Adding KMP_ALIGN_CACHE here doesn't help / can hurt performance */
+ kmp_int32 lb;
+ kmp_int32 st;
+ kmp_int32 tc;
+ kmp_int32 static_steal_counter; /* for static_steal only; maybe better to put after ub */
+
+ // KMP_ALIGN( 16 ) ensures ( if the KMP_ALIGN macro is turned on )
+ // a) parm3 is properly aligned and
+ // b) all parm1-4 are in the same cache line.
+ // Because of parm1-4 are used together, performance seems to be better
+ // if they are in the same line (not measured though).
+
+ struct KMP_ALIGN( 32 ) { // AC: changed 16 to 32 in order to simplify template
+ kmp_int32 parm1; // structures in kmp_dispatch.cpp. This should
+ kmp_int32 parm2; // make no real change at least while padding is off.
+ kmp_int32 parm3;
+ kmp_int32 parm4;
+ };
+
+ kmp_uint32 ordered_lower;
+ kmp_uint32 ordered_upper;
+#if KMP_OS_WINDOWS
+ // This var can be placed in the hole between 'tc' and 'parm1', instead of 'static_steal_counter'.
+ // It would be nice to measure execution times.
+ // Conditional if/endif can be removed at all.
+ kmp_int32 last_upper;
+#endif /* KMP_OS_WINDOWS */
+} dispatch_private_info32_t;
+
+typedef struct KMP_ALIGN_CACHE dispatch_private_info64 {
+ kmp_int64 count; /* current chunk number for static and static-steal scheduling*/
+ kmp_int64 ub; /* upper-bound */
+ /* Adding KMP_ALIGN_CACHE here doesn't help / can hurt performance */
+ kmp_int64 lb; /* lower-bound */
+ kmp_int64 st; /* stride */
+ kmp_int64 tc; /* trip count (number of iterations) */
+ kmp_int64 static_steal_counter; /* for static_steal only; maybe better to put after ub */
+
+ /* parm[1-4] are used in different ways by different scheduling algorithms */
+
+ // KMP_ALIGN( 32 ) ensures ( if the KMP_ALIGN macro is turned on )
+ // a) parm3 is properly aligned and
+ // b) all parm1-4 are in the same cache line.
+ // Because of parm1-4 are used together, performance seems to be better
+ // if they are in the same line (not measured though).
+
+ struct KMP_ALIGN( 32 ) {
+ kmp_int64 parm1;
+ kmp_int64 parm2;
+ kmp_int64 parm3;
+ kmp_int64 parm4;
+ };
+
+ kmp_uint64 ordered_lower;
+ kmp_uint64 ordered_upper;
+#if KMP_OS_WINDOWS
+ // This var can be placed in the hole between 'tc' and 'parm1', instead of 'static_steal_counter'.
+ // It would be nice to measure execution times.
+ // Conditional if/endif can be removed at all.
+ kmp_int64 last_upper;
+#endif /* KMP_OS_WINDOWS */
+} dispatch_private_info64_t;
+#else /* KMP_STATIC_STEAL_ENABLED */
+typedef struct KMP_ALIGN_CACHE dispatch_private_info32 {
+ kmp_int32 lb;
+ kmp_int32 ub;
+ kmp_int32 st;
+ kmp_int32 tc;
+
+ kmp_int32 parm1;
+ kmp_int32 parm2;
+ kmp_int32 parm3;
+ kmp_int32 parm4;
+
+ kmp_int32 count;
+
+ kmp_uint32 ordered_lower;
+ kmp_uint32 ordered_upper;
+#if KMP_OS_WINDOWS
+ kmp_int32 last_upper;
+#endif /* KMP_OS_WINDOWS */
+} dispatch_private_info32_t;
+
+typedef struct KMP_ALIGN_CACHE dispatch_private_info64 {
+ kmp_int64 lb; /* lower-bound */
+ kmp_int64 ub; /* upper-bound */
+ kmp_int64 st; /* stride */
+ kmp_int64 tc; /* trip count (number of iterations) */
+
+ /* parm[1-4] are used in different ways by different scheduling algorithms */
+ kmp_int64 parm1;
+ kmp_int64 parm2;
+ kmp_int64 parm3;
+ kmp_int64 parm4;
+
+ kmp_int64 count; /* current chunk number for static scheduling */
+
+ kmp_uint64 ordered_lower;
+ kmp_uint64 ordered_upper;
+#if KMP_OS_WINDOWS
+ kmp_int64 last_upper;
+#endif /* KMP_OS_WINDOWS */
+} dispatch_private_info64_t;
+#endif /* KMP_STATIC_STEAL_ENABLED */
+
+typedef struct KMP_ALIGN_CACHE dispatch_private_info {
+ union private_info {
+ dispatch_private_info32_t p32;
+ dispatch_private_info64_t p64;
+ } u;
+ enum sched_type schedule; /* scheduling algorithm */
+ kmp_int32 ordered; /* ordered clause specified */
+ kmp_int32 ordered_bumped;
+ kmp_int32 ordered_dummy[KMP_MAX_ORDERED-3]; // to retain the structure size after making ordered_iteration scalar
+ struct dispatch_private_info * next; /* stack of buffers for nest of serial regions */
+ kmp_int32 nomerge; /* don't merge iters if serialized */
+ kmp_int32 type_size; /* the size of types in private_info */
+ enum cons_type pushed_ws;
+} dispatch_private_info_t;
+
+typedef struct dispatch_shared_info32 {
+ /* chunk index under dynamic, number of idle threads under static-steal;
+ iteration index otherwise */
+ volatile kmp_uint32 iteration;
+ volatile kmp_uint32 num_done;
+ volatile kmp_uint32 ordered_iteration;
+ kmp_int32 ordered_dummy[KMP_MAX_ORDERED-1]; // to retain the structure size after making ordered_iteration scalar
+} dispatch_shared_info32_t;
+
+typedef struct dispatch_shared_info64 {
+ /* chunk index under dynamic, number of idle threads under static-steal;
+ iteration index otherwise */
+ volatile kmp_uint64 iteration;
+ volatile kmp_uint64 num_done;
+ volatile kmp_uint64 ordered_iteration;
+ kmp_int64 ordered_dummy[KMP_MAX_ORDERED-3]; // to retain the structure size after making ordered_iteration scalar
+} dispatch_shared_info64_t;
+
+typedef struct dispatch_shared_info {
+ union shared_info {
+ dispatch_shared_info32_t s32;
+ dispatch_shared_info64_t s64;
+ } u;
+ volatile kmp_uint32 buffer_index;
+#if OMP_45_ENABLED
+ volatile kmp_int32 doacross_buf_idx; // teamwise index
+ volatile kmp_uint32 *doacross_flags; // shared array of iteration flags (0/1)
+ kmp_int32 doacross_num_done; // count finished threads
+#endif
+#if KMP_USE_HWLOC
+ // When linking with libhwloc, the ORDERED EPCC test slows down on big
+ // machines (> 48 cores). Performance analysis showed that a cache thrash
+ // was occurring and this padding helps alleviate the problem.
+ char padding[64];
+#endif
+} dispatch_shared_info_t;
+
+typedef struct kmp_disp {
+ /* Vector for ORDERED SECTION */
+ void (*th_deo_fcn)( int * gtid, int * cid, ident_t *);
+ /* Vector for END ORDERED SECTION */
+ void (*th_dxo_fcn)( int * gtid, int * cid, ident_t *);
+
+ dispatch_shared_info_t *th_dispatch_sh_current;
+ dispatch_private_info_t *th_dispatch_pr_current;
+
+ dispatch_private_info_t *th_disp_buffer;
+ kmp_int32 th_disp_index;
+#if OMP_45_ENABLED
+ kmp_int32 th_doacross_buf_idx; // thread's doacross buffer index
+ volatile kmp_uint32 *th_doacross_flags; // pointer to shared array of flags
+ union { // we can use union here because doacross cannot be used in nonmonotonic loops
+ kmp_int64 *th_doacross_info; // info on loop bounds
+ kmp_lock_t *th_steal_lock; // lock used for chunk stealing (8-byte variable)
+ };
+#else
+ void* dummy_padding[2]; // make it 64 bytes on Intel(R) 64
+#endif
+#if KMP_USE_INTERNODE_ALIGNMENT
+ char more_padding[INTERNODE_CACHE_LINE];
+#endif
+} kmp_disp_t;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* Barrier stuff */
+
+/* constants for barrier state update */
+#define KMP_INIT_BARRIER_STATE 0 /* should probably start from zero */
+#define KMP_BARRIER_SLEEP_BIT 0 /* bit used for suspend/sleep part of state */
+#define KMP_BARRIER_UNUSED_BIT 1 /* bit that must never be set for valid state */
+#define KMP_BARRIER_BUMP_BIT 2 /* lsb used for bump of go/arrived state */
+
+#define KMP_BARRIER_SLEEP_STATE (1 << KMP_BARRIER_SLEEP_BIT)
+#define KMP_BARRIER_UNUSED_STATE (1 << KMP_BARRIER_UNUSED_BIT)
+#define KMP_BARRIER_STATE_BUMP (1 << KMP_BARRIER_BUMP_BIT)
+
+#if (KMP_BARRIER_SLEEP_BIT >= KMP_BARRIER_BUMP_BIT)
+# error "Barrier sleep bit must be smaller than barrier bump bit"
+#endif
+#if (KMP_BARRIER_UNUSED_BIT >= KMP_BARRIER_BUMP_BIT)
+# error "Barrier unused bit must be smaller than barrier bump bit"
+#endif
+
+// Constants for release barrier wait state: currently, hierarchical only
+#define KMP_BARRIER_NOT_WAITING 0 // Normal state; worker not in wait_sleep
+#define KMP_BARRIER_OWN_FLAG 1 // Normal state; worker waiting on own b_go flag in release
+#define KMP_BARRIER_PARENT_FLAG 2 // Special state; worker waiting on parent's b_go flag in release
+#define KMP_BARRIER_SWITCH_TO_OWN_FLAG 3 // Special state; tells worker to shift from parent to own b_go
+#define KMP_BARRIER_SWITCHING 4 // Special state; worker resets appropriate flag on wake-up
+
+enum barrier_type {
+ bs_plain_barrier = 0, /* 0, All non-fork/join barriers (except reduction barriers if enabled) */
+ bs_forkjoin_barrier, /* 1, All fork/join (parallel region) barriers */
+ #if KMP_FAST_REDUCTION_BARRIER
+ bs_reduction_barrier, /* 2, All barriers that are used in reduction */
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ bs_last_barrier /* Just a placeholder to mark the end */
+};
+
+// to work with reduction barriers just like with plain barriers
+#if !KMP_FAST_REDUCTION_BARRIER
+ #define bs_reduction_barrier bs_plain_barrier
+#endif // KMP_FAST_REDUCTION_BARRIER
+
+typedef enum kmp_bar_pat { /* Barrier communication patterns */
+ bp_linear_bar = 0, /* Single level (degenerate) tree */
+ bp_tree_bar = 1, /* Balanced tree with branching factor 2^n */
+ bp_hyper_bar = 2, /* Hypercube-embedded tree with min branching factor 2^n */
+ bp_hierarchical_bar = 3, /* Machine hierarchy tree */
+ bp_last_bar = 4 /* Placeholder to mark the end */
+} kmp_bar_pat_e;
+
+# define KMP_BARRIER_ICV_PUSH 1
+
+/* Record for holding the values of the internal controls stack records */
+typedef struct kmp_internal_control {
+ int serial_nesting_level; /* corresponds to the value of the th_team_serialized field */
+ kmp_int8 nested; /* internal control for nested parallelism (per thread) */
+ kmp_int8 dynamic; /* internal control for dynamic adjustment of threads (per thread) */
+ kmp_int8 bt_set; /* internal control for whether blocktime is explicitly set */
+ int blocktime; /* internal control for blocktime */
+ int bt_intervals; /* internal control for blocktime intervals */
+ int nproc; /* internal control for #threads for next parallel region (per thread) */
+ int max_active_levels; /* internal control for max_active_levels */
+ kmp_r_sched_t sched; /* internal control for runtime schedule {sched,chunk} pair */
+#if OMP_40_ENABLED
+ kmp_proc_bind_t proc_bind; /* internal control for affinity */
+#endif // OMP_40_ENABLED
+ struct kmp_internal_control *next;
+} kmp_internal_control_t;
+
+static inline void
+copy_icvs( kmp_internal_control_t *dst, kmp_internal_control_t *src ) {
+ *dst = *src;
+}
+
+/* Thread barrier needs volatile barrier fields */
+typedef struct KMP_ALIGN_CACHE kmp_bstate {
+ // th_fixed_icvs is aligned by virtue of kmp_bstate being aligned (and all uses of it).
+ // It is not explicitly aligned below, because we *don't* want it to be padded -- instead,
+ // we fit b_go into the same cache line with th_fixed_icvs, enabling NGO cache lines
+ // stores in the hierarchical barrier.
+ kmp_internal_control_t th_fixed_icvs; // Initial ICVs for the thread
+ // Tuck b_go into end of th_fixed_icvs cache line, so it can be stored with same NGO store
+ volatile kmp_uint64 b_go; // STATE => task should proceed (hierarchical)
+ KMP_ALIGN_CACHE volatile kmp_uint64 b_arrived; // STATE => task reached synch point.
+ kmp_uint32 *skip_per_level;
+ kmp_uint32 my_level;
+ kmp_int32 parent_tid;
+ kmp_int32 old_tid;
+ kmp_uint32 depth;
+ struct kmp_bstate *parent_bar;
+ kmp_team_t *team;
+ kmp_uint64 leaf_state;
+ kmp_uint32 nproc;
+ kmp_uint8 base_leaf_kids;
+ kmp_uint8 leaf_kids;
+ kmp_uint8 offset;
+ kmp_uint8 wait_flag;
+ kmp_uint8 use_oncore_barrier;
+#if USE_DEBUGGER
+ // The following field is intended for the debugger solely. Only the worker thread itself accesses this
+ // field: the worker increases it by 1 when it arrives to a barrier.
+ KMP_ALIGN_CACHE kmp_uint b_worker_arrived;
+#endif /* USE_DEBUGGER */
+} kmp_bstate_t;
+
+union KMP_ALIGN_CACHE kmp_barrier_union {
+ double b_align; /* use worst case alignment */
+ char b_pad[ KMP_PAD(kmp_bstate_t, CACHE_LINE) ];
+ kmp_bstate_t bb;
+};
+
+typedef union kmp_barrier_union kmp_balign_t;
+
+/* Team barrier needs only non-volatile arrived counter */
+union KMP_ALIGN_CACHE kmp_barrier_team_union {
+ double b_align; /* use worst case alignment */
+ char b_pad[ CACHE_LINE ];
+ struct {
+ kmp_uint64 b_arrived; /* STATE => task reached synch point. */
+#if USE_DEBUGGER
+ // The following two fields are indended for the debugger solely. Only master of the team accesses
+ // these fields: the first one is increased by 1 when master arrives to a barrier, the
+ // second one is increased by one when all the threads arrived.
+ kmp_uint b_master_arrived;
+ kmp_uint b_team_arrived;
+#endif
+ };
+};
+
+typedef union kmp_barrier_team_union kmp_balign_team_t;
+
+/*
+ * Padding for Linux* OS pthreads condition variables and mutexes used to signal
+ * threads when a condition changes. This is to workaround an NPTL bug
+ * where padding was added to pthread_cond_t which caused the initialization
+ * routine to write outside of the structure if compiled on pre-NPTL threads.
+ */
+
+#if KMP_OS_WINDOWS
+typedef struct kmp_win32_mutex
+{
+ /* The Lock */
+ CRITICAL_SECTION cs;
+} kmp_win32_mutex_t;
+
+typedef struct kmp_win32_cond
+{
+ /* Count of the number of waiters. */
+ int waiters_count_;
+
+ /* Serialize access to <waiters_count_> */
+ kmp_win32_mutex_t waiters_count_lock_;
+
+ /* Number of threads to release via a <cond_broadcast> or a */
+ /* <cond_signal> */
+ int release_count_;
+
+ /* Keeps track of the current "generation" so that we don't allow */
+ /* one thread to steal all the "releases" from the broadcast. */
+ int wait_generation_count_;
+
+ /* A manual-reset event that's used to block and release waiting */
+ /* threads. */
+ HANDLE event_;
+} kmp_win32_cond_t;
+#endif
+
+#if KMP_OS_UNIX
+
+union KMP_ALIGN_CACHE kmp_cond_union {
+ double c_align;
+ char c_pad[ CACHE_LINE ];
+ pthread_cond_t c_cond;
+};
+
+typedef union kmp_cond_union kmp_cond_align_t;
+
+union KMP_ALIGN_CACHE kmp_mutex_union {
+ double m_align;
+ char m_pad[ CACHE_LINE ];
+ pthread_mutex_t m_mutex;
+};
+
+typedef union kmp_mutex_union kmp_mutex_align_t;
+
+#endif /* KMP_OS_UNIX */
+
+typedef struct kmp_desc_base {
+ void *ds_stackbase;
+ size_t ds_stacksize;
+ int ds_stackgrow;
+ kmp_thread_t ds_thread;
+ volatile int ds_tid;
+ int ds_gtid;
+#if KMP_OS_WINDOWS
+ volatile int ds_alive;
+ DWORD ds_thread_id;
+ /*
+ ds_thread keeps thread handle on Windows* OS. It is enough for RTL purposes. However,
+ debugger support (libomp_db) cannot work with handles, because they uncomparable. For
+ example, debugger requests info about thread with handle h. h is valid within debugger
+ process, and meaningless within debugee process. Even if h is duped by call to
+ DuplicateHandle(), so the result h' is valid within debugee process, but it is a *new*
+ handle which does *not* equal to any other handle in debugee... The only way to
+ compare handles is convert them to system-wide ids. GetThreadId() function is
+ available only in Longhorn and Server 2003. :-( In contrast, GetCurrentThreadId() is
+ available on all Windows* OS flavours (including Windows* 95). Thus, we have to get thread id by
+ call to GetCurrentThreadId() from within the thread and save it to let libomp_db
+ identify threads.
+ */
+#endif /* KMP_OS_WINDOWS */
+} kmp_desc_base_t;
+
+typedef union KMP_ALIGN_CACHE kmp_desc {
+ double ds_align; /* use worst case alignment */
+ char ds_pad[ KMP_PAD(kmp_desc_base_t, CACHE_LINE) ];
+ kmp_desc_base_t ds;
+} kmp_desc_t;
+
+
+typedef struct kmp_local {
+ volatile int this_construct; /* count of single's encountered by thread */
+ void *reduce_data;
+#if KMP_USE_BGET
+ void *bget_data;
+ void *bget_list;
+#if ! USE_CMP_XCHG_FOR_BGET
+#ifdef USE_QUEUING_LOCK_FOR_BGET
+ kmp_lock_t bget_lock; /* Lock for accessing bget free list */
+#else
+ kmp_bootstrap_lock_t bget_lock; /* Lock for accessing bget free list */
+ /* Must be bootstrap lock so we can use it at library shutdown */
+#endif /* USE_LOCK_FOR_BGET */
+#endif /* ! USE_CMP_XCHG_FOR_BGET */
+#endif /* KMP_USE_BGET */
+
+#ifdef BUILD_TV
+ struct tv_data *tv_data;
+#endif
+
+ PACKED_REDUCTION_METHOD_T packed_reduction_method; /* stored by __kmpc_reduce*(), used by __kmpc_end_reduce*() */
+
+} kmp_local_t;
+
+#define KMP_CHECK_UPDATE(a, b) if ((a) != (b)) (a) = (b)
+#define KMP_CHECK_UPDATE_SYNC(a, b) if ((a) != (b)) TCW_SYNC_PTR((a), (b))
+
+#define get__blocktime( xteam, xtid ) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.blocktime)
+#define get__bt_set( xteam, xtid ) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.bt_set)
+#define get__bt_intervals( xteam, xtid ) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.bt_intervals)
+
+#define get__nested_2(xteam,xtid) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.nested)
+#define get__dynamic_2(xteam,xtid) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.dynamic)
+#define get__nproc_2(xteam,xtid) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.nproc)
+#define get__sched_2(xteam,xtid) ((xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.sched)
+
+#define set__blocktime_team( xteam, xtid, xval ) \
+ ( ( (xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.blocktime ) = (xval) )
+
+#define set__bt_intervals_team( xteam, xtid, xval ) \
+ ( ( (xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.bt_intervals ) = (xval) )
+
+#define set__bt_set_team( xteam, xtid, xval ) \
+ ( ( (xteam)->t.t_threads[(xtid)]->th.th_current_task->td_icvs.bt_set ) = (xval) )
+
+
+#define set__nested( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.nested ) = (xval) )
+#define get__nested( xthread ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.nested ) ? (FTN_TRUE) : (FTN_FALSE) )
+
+#define set__dynamic( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.dynamic ) = (xval) )
+#define get__dynamic( xthread ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.dynamic ) ? (FTN_TRUE) : (FTN_FALSE) )
+
+#define set__nproc( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.nproc ) = (xval) )
+
+#define set__max_active_levels( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.max_active_levels ) = (xval) )
+
+#define set__sched( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.sched ) = (xval) )
+
+#if OMP_40_ENABLED
+
+#define set__proc_bind( xthread, xval ) \
+ ( ( (xthread)->th.th_current_task->td_icvs.proc_bind ) = (xval) )
+#define get__proc_bind( xthread ) \
+ ( (xthread)->th.th_current_task->td_icvs.proc_bind )
+
+#endif /* OMP_40_ENABLED */
+
+
+/* ------------------------------------------------------------------------ */
+// OpenMP tasking data structures
+//
+
+typedef enum kmp_tasking_mode {
+ tskm_immediate_exec = 0,
+ tskm_extra_barrier = 1,
+ tskm_task_teams = 2,
+ tskm_max = 2
+} kmp_tasking_mode_t;
+
+extern kmp_tasking_mode_t __kmp_tasking_mode; /* determines how/when to execute tasks */
+extern kmp_int32 __kmp_task_stealing_constraint;
+#if OMP_45_ENABLED
+ extern kmp_int32 __kmp_max_task_priority; // Set via OMP_MAX_TASK_PRIORITY if specified, defaults to 0 otherwise
+#endif
+
+/* NOTE: kmp_taskdata_t and kmp_task_t structures allocated in single block with taskdata first */
+#define KMP_TASK_TO_TASKDATA(task) (((kmp_taskdata_t *) task) - 1)
+#define KMP_TASKDATA_TO_TASK(taskdata) (kmp_task_t *) (taskdata + 1)
+
+// The tt_found_tasks flag is a signal to all threads in the team that tasks were spawned and
+// queued since the previous barrier release.
+#define KMP_TASKING_ENABLED(task_team) \
+ (TCR_SYNC_4((task_team)->tt.tt_found_tasks) == TRUE)
+/*!
+@ingroup BASIC_TYPES
+@{
+*/
+
+/*!
+ */
+typedef kmp_int32 (* kmp_routine_entry_t)( kmp_int32, void * );
+
+#if OMP_40_ENABLED || OMP_45_ENABLED
+typedef union kmp_cmplrdata {
+#if OMP_45_ENABLED
+ kmp_int32 priority; /**< priority specified by user for the task */
+#endif // OMP_45_ENABLED
+#if OMP_40_ENABLED
+ kmp_routine_entry_t destructors; /* pointer to function to invoke deconstructors of firstprivate C++ objects */
+#endif // OMP_40_ENABLED
+ /* future data */
+} kmp_cmplrdata_t;
+#endif
+
+/* sizeof_kmp_task_t passed as arg to kmpc_omp_task call */
+/*!
+ */
+typedef struct kmp_task { /* GEH: Shouldn't this be aligned somehow? */
+ void * shareds; /**< pointer to block of pointers to shared vars */
+ kmp_routine_entry_t routine; /**< pointer to routine to call for executing task */
+ kmp_int32 part_id; /**< part id for the task */
+#if OMP_40_ENABLED || OMP_45_ENABLED
+ kmp_cmplrdata_t data1; /* Two known optional additions: destructors and priority */
+ kmp_cmplrdata_t data2; /* Process destructors first, priority second */
+ /* future data */
+#endif
+ /* private vars */
+} kmp_task_t;
+
+/*!
+@}
+*/
+
+#if OMP_40_ENABLED
+typedef struct kmp_taskgroup {
+ kmp_uint32 count; // number of allocated and not yet complete tasks
+ kmp_int32 cancel_request; // request for cancellation of this taskgroup
+ struct kmp_taskgroup *parent; // parent taskgroup
+} kmp_taskgroup_t;
+
+
+// forward declarations
+typedef union kmp_depnode kmp_depnode_t;
+typedef struct kmp_depnode_list kmp_depnode_list_t;
+typedef struct kmp_dephash_entry kmp_dephash_entry_t;
+
+typedef struct kmp_depend_info {
+ kmp_intptr_t base_addr;
+ size_t len;
+ struct {
+ bool in:1;
+ bool out:1;
+ } flags;
+} kmp_depend_info_t;
+
+struct kmp_depnode_list {
+ kmp_depnode_t * node;
+ kmp_depnode_list_t * next;
+};
+
+typedef struct kmp_base_depnode {
+ kmp_depnode_list_t * successors;
+ kmp_task_t * task;
+
+ kmp_lock_t lock;
+
+#if KMP_SUPPORT_GRAPH_OUTPUT
+ kmp_uint32 id;
+#endif
+
+ volatile kmp_int32 npredecessors;
+ volatile kmp_int32 nrefs;
+} kmp_base_depnode_t;
+
+union KMP_ALIGN_CACHE kmp_depnode {
+ double dn_align; /* use worst case alignment */
+ char dn_pad[ KMP_PAD(kmp_base_depnode_t, CACHE_LINE) ];
+ kmp_base_depnode_t dn;
+};
+
+struct kmp_dephash_entry {
+ kmp_intptr_t addr;
+ kmp_depnode_t * last_out;
+ kmp_depnode_list_t * last_ins;
+ kmp_dephash_entry_t * next_in_bucket;
+};
+
+typedef struct kmp_dephash {
+ kmp_dephash_entry_t ** buckets;
+ size_t size;
+#ifdef KMP_DEBUG
+ kmp_uint32 nelements;
+ kmp_uint32 nconflicts;
+#endif
+} kmp_dephash_t;
+
+#endif
+
+#ifdef BUILD_TIED_TASK_STACK
+
+/* Tied Task stack definitions */
+typedef struct kmp_stack_block {
+ kmp_taskdata_t * sb_block[ TASK_STACK_BLOCK_SIZE ];
+ struct kmp_stack_block * sb_next;
+ struct kmp_stack_block * sb_prev;
+} kmp_stack_block_t;
+
+typedef struct kmp_task_stack {
+ kmp_stack_block_t ts_first_block; // first block of stack entries
+ kmp_taskdata_t ** ts_top; // pointer to the top of stack
+ kmp_int32 ts_entries; // number of entries on the stack
+} kmp_task_stack_t;
+
+#endif // BUILD_TIED_TASK_STACK
+
+typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */
+ /* Compiler flags */ /* Total compiler flags must be 16 bits */
+ unsigned tiedness : 1; /* task is either tied (1) or untied (0) */
+ unsigned final : 1; /* task is final(1) so execute immediately */
+ unsigned merged_if0 : 1; /* no __kmpc_task_{begin/complete}_if0 calls in if0 code path */
+#if OMP_40_ENABLED
+ unsigned destructors_thunk : 1; /* set if the compiler creates a thunk to invoke destructors from the runtime */
+#if OMP_45_ENABLED
+ unsigned proxy : 1; /* task is a proxy task (it will be executed outside the context of the RTL) */
+ unsigned priority_specified :1; /* set if the compiler provides priority setting for the task */
+ unsigned reserved : 10; /* reserved for compiler use */
+#else
+ unsigned reserved : 12; /* reserved for compiler use */
+#endif
+#else // OMP_40_ENABLED
+ unsigned reserved : 13; /* reserved for compiler use */
+#endif // OMP_40_ENABLED
+
+ /* Library flags */ /* Total library flags must be 16 bits */
+ unsigned tasktype : 1; /* task is either explicit(1) or implicit (0) */
+ unsigned task_serial : 1; /* this task is executed immediately (1) or deferred (0) */
+ unsigned tasking_ser : 1; /* all tasks in team are either executed immediately (1) or may be deferred (0) */
+ unsigned team_serial : 1; /* entire team is serial (1) [1 thread] or parallel (0) [>= 2 threads] */
+ /* If either team_serial or tasking_ser is set, task team may be NULL */
+ /* Task State Flags: */
+ unsigned started : 1; /* 1==started, 0==not started */
+ unsigned executing : 1; /* 1==executing, 0==not executing */
+ unsigned complete : 1; /* 1==complete, 0==not complete */
+ unsigned freed : 1; /* 1==freed, 0==allocateed */
+ unsigned native : 1; /* 1==gcc-compiled task, 0==intel */
+ unsigned reserved31 : 7; /* reserved for library use */
+
+} kmp_tasking_flags_t;
+
+
+struct kmp_taskdata { /* aligned during dynamic allocation */
+ kmp_int32 td_task_id; /* id, assigned by debugger */
+ kmp_tasking_flags_t td_flags; /* task flags */
+ kmp_team_t * td_team; /* team for this task */
+ kmp_info_p * td_alloc_thread; /* thread that allocated data structures */
+ /* Currently not used except for perhaps IDB */
+ kmp_taskdata_t * td_parent; /* parent task */
+ kmp_int32 td_level; /* task nesting level */
+ kmp_int32 td_untied_count; /* untied task active parts counter */
+ ident_t * td_ident; /* task identifier */
+ // Taskwait data.
+ ident_t * td_taskwait_ident;
+ kmp_uint32 td_taskwait_counter;
+ kmp_int32 td_taskwait_thread; /* gtid + 1 of thread encountered taskwait */
+ KMP_ALIGN_CACHE kmp_internal_control_t td_icvs; /* Internal control variables for the task */
+ KMP_ALIGN_CACHE volatile kmp_uint32 td_allocated_child_tasks; /* Child tasks (+ current task) not yet deallocated */
+ volatile kmp_uint32 td_incomplete_child_tasks; /* Child tasks not yet complete */
+#if OMP_40_ENABLED
+ kmp_taskgroup_t * td_taskgroup; // Each task keeps pointer to its current taskgroup
+ kmp_dephash_t * td_dephash; // Dependencies for children tasks are tracked from here
+ kmp_depnode_t * td_depnode; // Pointer to graph node if this task has dependencies
+#endif
+#if OMPT_SUPPORT
+ ompt_task_info_t ompt_task_info;
+#endif
+#if OMP_45_ENABLED
+ kmp_task_team_t * td_task_team;
+ kmp_int32 td_size_alloc; // The size of task structure, including shareds etc.
+#endif
+}; // struct kmp_taskdata
+
+// Make sure padding above worked
+KMP_BUILD_ASSERT( sizeof(kmp_taskdata_t) % sizeof(void *) == 0 );
+
+// Data for task team but per thread
+typedef struct kmp_base_thread_data {
+ kmp_info_p * td_thr; // Pointer back to thread info
+ // Used only in __kmp_execute_tasks_template, maybe not avail until task is queued?
+ kmp_bootstrap_lock_t td_deque_lock; // Lock for accessing deque
+ kmp_taskdata_t ** td_deque; // Deque of tasks encountered by td_thr, dynamically allocated
+ kmp_int32 td_deque_size; // Size of deck
+ kmp_uint32 td_deque_head; // Head of deque (will wrap)
+ kmp_uint32 td_deque_tail; // Tail of deque (will wrap)
+ kmp_int32 td_deque_ntasks; // Number of tasks in deque
+ // GEH: shouldn't this be volatile since used in while-spin?
+ kmp_int32 td_deque_last_stolen; // Thread number of last successful steal
+#ifdef BUILD_TIED_TASK_STACK
+ kmp_task_stack_t td_susp_tied_tasks; // Stack of suspended tied tasks for task scheduling constraint
+#endif // BUILD_TIED_TASK_STACK
+} kmp_base_thread_data_t;
+
+#define TASK_DEQUE_BITS 8 // Used solely to define INITIAL_TASK_DEQUE_SIZE
+#define INITIAL_TASK_DEQUE_SIZE ( 1 << TASK_DEQUE_BITS )
+
+#define TASK_DEQUE_SIZE(td) ((td).td_deque_size)
+#define TASK_DEQUE_MASK(td) ((td).td_deque_size - 1)
+
+typedef union KMP_ALIGN_CACHE kmp_thread_data {
+ kmp_base_thread_data_t td;
+ double td_align; /* use worst case alignment */
+ char td_pad[ KMP_PAD(kmp_base_thread_data_t, CACHE_LINE) ];
+} kmp_thread_data_t;
+
+
+// Data for task teams which are used when tasking is enabled for the team
+typedef struct kmp_base_task_team {
+ kmp_bootstrap_lock_t tt_threads_lock; /* Lock used to allocate per-thread part of task team */
+ /* must be bootstrap lock since used at library shutdown*/
+ kmp_task_team_t * tt_next; /* For linking the task team free list */
+ kmp_thread_data_t * tt_threads_data; /* Array of per-thread structures for task team */
+ /* Data survives task team deallocation */
+ kmp_int32 tt_found_tasks; /* Have we found tasks and queued them while executing this team? */
+ /* TRUE means tt_threads_data is set up and initialized */
+ kmp_int32 tt_nproc; /* #threads in team */
+ kmp_int32 tt_max_threads; /* number of entries allocated for threads_data array */
+#if OMP_45_ENABLED
+ kmp_int32 tt_found_proxy_tasks; /* Have we found proxy tasks since last barrier */
+#endif
+
+ KMP_ALIGN_CACHE
+ volatile kmp_uint32 tt_unfinished_threads; /* #threads still active */
+
+ KMP_ALIGN_CACHE
+ volatile kmp_uint32 tt_active; /* is the team still actively executing tasks */
+} kmp_base_task_team_t;
+
+union KMP_ALIGN_CACHE kmp_task_team {
+ kmp_base_task_team_t tt;
+ double tt_align; /* use worst case alignment */
+ char tt_pad[ KMP_PAD(kmp_base_task_team_t, CACHE_LINE) ];
+};
+
+#if ( USE_FAST_MEMORY == 3 ) || ( USE_FAST_MEMORY == 5 )
+// Free lists keep same-size free memory slots for fast memory allocation routines
+typedef struct kmp_free_list {
+ void *th_free_list_self; // Self-allocated tasks free list
+ void *th_free_list_sync; // Self-allocated tasks stolen/returned by other threads
+ void *th_free_list_other; // Non-self free list (to be returned to owner's sync list)
+} kmp_free_list_t;
+#endif
+#if KMP_NESTED_HOT_TEAMS
+// Hot teams array keeps hot teams and their sizes for given thread.
+// Hot teams are not put in teams pool, and they don't put threads in threads pool.
+typedef struct kmp_hot_team_ptr {
+ kmp_team_p *hot_team; // pointer to hot_team of given nesting level
+ kmp_int32 hot_team_nth; // number of threads allocated for the hot_team
+} kmp_hot_team_ptr_t;
+#endif
+#if OMP_40_ENABLED
+typedef struct kmp_teams_size {
+ kmp_int32 nteams; // number of teams in a league
+ kmp_int32 nth; // number of threads in each team of the league
+} kmp_teams_size_t;
+#endif
+
+/* ------------------------------------------------------------------------ */
+// OpenMP thread data structures
+//
+
+typedef struct KMP_ALIGN_CACHE kmp_base_info {
+/*
+ * Start with the readonly data which is cache aligned and padded.
+ * this is written before the thread starts working by the master.
+ * (uber masters may update themselves later)
+ * (usage does not consider serialized regions)
+ */
+ kmp_desc_t th_info;
+ kmp_team_p *th_team; /* team we belong to */
+ kmp_root_p *th_root; /* pointer to root of task hierarchy */
+ kmp_info_p *th_next_pool; /* next available thread in the pool */
+ kmp_disp_t *th_dispatch; /* thread's dispatch data */
+ int th_in_pool; /* in thread pool (32 bits for TCR/TCW) */
+
+ /* The following are cached from the team info structure */
+ /* TODO use these in more places as determined to be needed via profiling */
+ int th_team_nproc; /* number of threads in a team */
+ kmp_info_p *th_team_master; /* the team's master thread */
+ int th_team_serialized; /* team is serialized */
+#if OMP_40_ENABLED
+ microtask_t th_teams_microtask; /* save entry address for teams construct */
+ int th_teams_level; /* save initial level of teams construct */
+ /* it is 0 on device but may be any on host */
+#endif
+
+ /* The blocktime info is copied from the team struct to the thread sruct */
+ /* at the start of a barrier, and the values stored in the team are used */
+ /* at points in the code where the team struct is no longer guaranteed */
+ /* to exist (from the POV of worker threads). */
+ int th_team_bt_intervals;
+ int th_team_bt_set;
+
+
+#if KMP_AFFINITY_SUPPORTED
+ kmp_affin_mask_t *th_affin_mask; /* thread's current affinity mask */
+#endif
+
+/*
+ * The data set by the master at reinit, then R/W by the worker
+ */
+ KMP_ALIGN_CACHE int th_set_nproc; /* if > 0, then only use this request for the next fork */
+#if KMP_NESTED_HOT_TEAMS
+ kmp_hot_team_ptr_t *th_hot_teams; /* array of hot teams */
+#endif
+#if OMP_40_ENABLED
+ kmp_proc_bind_t th_set_proc_bind; /* if != proc_bind_default, use request for next fork */
+ kmp_teams_size_t th_teams_size; /* number of teams/threads in teams construct */
+# if KMP_AFFINITY_SUPPORTED
+ int th_current_place; /* place currently bound to */
+ int th_new_place; /* place to bind to in par reg */
+ int th_first_place; /* first place in partition */
+ int th_last_place; /* last place in partition */
+# endif
+#endif
+#if USE_ITT_BUILD
+ kmp_uint64 th_bar_arrive_time; /* arrival to barrier timestamp */
+ kmp_uint64 th_bar_min_time; /* minimum arrival time at the barrier */
+ kmp_uint64 th_frame_time; /* frame timestamp */
+#endif /* USE_ITT_BUILD */
+ kmp_local_t th_local;
+ struct private_common *th_pri_head;
+
+/*
+ * Now the data only used by the worker (after initial allocation)
+ */
+ /* TODO the first serial team should actually be stored in the info_t
+ * structure. this will help reduce initial allocation overhead */
+ KMP_ALIGN_CACHE kmp_team_p *th_serial_team; /*serialized team held in reserve*/
+
+#if OMPT_SUPPORT
+ ompt_thread_info_t ompt_thread_info;
+#endif
+
+/* The following are also read by the master during reinit */
+ struct common_table *th_pri_common;
+
+ volatile kmp_uint32 th_spin_here; /* thread-local location for spinning */
+ /* while awaiting queuing lock acquire */
+
+ volatile void *th_sleep_loc; // this points at a kmp_flag<T>
+
+ ident_t *th_ident;
+ unsigned th_x; // Random number generator data
+ unsigned th_a; // Random number generator data
+
+/*
+ * Tasking-related data for the thread
+ */
+ kmp_task_team_t * th_task_team; // Task team struct
+ kmp_taskdata_t * th_current_task; // Innermost Task being executed
+ kmp_uint8 th_task_state; // alternating 0/1 for task team identification
+ kmp_uint8 * th_task_state_memo_stack; // Stack holding memos of th_task_state at nested levels
+ kmp_uint32 th_task_state_top; // Top element of th_task_state_memo_stack
+ kmp_uint32 th_task_state_stack_sz; // Size of th_task_state_memo_stack
+
+ /*
+ * More stuff for keeping track of active/sleeping threads
+ * (this part is written by the worker thread)
+ */
+ kmp_uint8 th_active_in_pool; // included in count of
+ // #active threads in pool
+ int th_active; // ! sleeping
+ // 32 bits for TCR/TCW
+
+ struct cons_header * th_cons; // used for consistency check
+
+/*
+ * Add the syncronizing data which is cache aligned and padded.
+ */
+ KMP_ALIGN_CACHE kmp_balign_t th_bar[ bs_last_barrier ];
+
+ KMP_ALIGN_CACHE volatile kmp_int32 th_next_waiting; /* gtid+1 of next thread on lock wait queue, 0 if none */
+
+#if ( USE_FAST_MEMORY == 3 ) || ( USE_FAST_MEMORY == 5 )
+ #define NUM_LISTS 4
+ kmp_free_list_t th_free_lists[NUM_LISTS]; // Free lists for fast memory allocation routines
+#endif
+
+#if KMP_OS_WINDOWS
+ kmp_win32_cond_t th_suspend_cv;
+ kmp_win32_mutex_t th_suspend_mx;
+ int th_suspend_init;
+#endif
+#if KMP_OS_UNIX
+ kmp_cond_align_t th_suspend_cv;
+ kmp_mutex_align_t th_suspend_mx;
+ int th_suspend_init_count;
+#endif
+
+#if USE_ITT_BUILD
+ kmp_itt_mark_t th_itt_mark_single;
+ // alignment ???
+#endif /* USE_ITT_BUILD */
+#if KMP_STATS_ENABLED
+ kmp_stats_list* th_stats;
+#endif
+} kmp_base_info_t;
+
+typedef union KMP_ALIGN_CACHE kmp_info {
+ double th_align; /* use worst case alignment */
+ char th_pad[ KMP_PAD(kmp_base_info_t, CACHE_LINE) ];
+ kmp_base_info_t th;
+} kmp_info_t;
+
+/* ------------------------------------------------------------------------ */
+// OpenMP thread team data structures
+//
+typedef struct kmp_base_data {
+ volatile kmp_uint32 t_value;
+} kmp_base_data_t;
+
+typedef union KMP_ALIGN_CACHE kmp_sleep_team {
+ double dt_align; /* use worst case alignment */
+ char dt_pad[ KMP_PAD(kmp_base_data_t, CACHE_LINE) ];
+ kmp_base_data_t dt;
+} kmp_sleep_team_t;
+
+typedef union KMP_ALIGN_CACHE kmp_ordered_team {
+ double dt_align; /* use worst case alignment */
+ char dt_pad[ KMP_PAD(kmp_base_data_t, CACHE_LINE) ];
+ kmp_base_data_t dt;
+} kmp_ordered_team_t;
+
+typedef int (*launch_t)( int gtid );
+
+/* Minimum number of ARGV entries to malloc if necessary */
+#define KMP_MIN_MALLOC_ARGV_ENTRIES 100
+
+// Set up how many argv pointers will fit in cache lines containing t_inline_argv. Historically, we
+// have supported at least 96 bytes. Using a larger value for more space between the master write/worker
+// read section and read/write by all section seems to buy more performance on EPCC PARALLEL.
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+# define KMP_INLINE_ARGV_BYTES ( 4 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) + 2 * sizeof(kmp_int8) + sizeof(kmp_int16) + sizeof(kmp_uint32) ) % CACHE_LINE ) )
+#else
+# define KMP_INLINE_ARGV_BYTES ( 2 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) ) % CACHE_LINE ) )
+#endif
+#define KMP_INLINE_ARGV_ENTRIES (int)( KMP_INLINE_ARGV_BYTES / KMP_PTR_SKIP )
+
+typedef struct KMP_ALIGN_CACHE kmp_base_team {
+ // Synchronization Data ---------------------------------------------------------------------------------
+ KMP_ALIGN_CACHE kmp_ordered_team_t t_ordered;
+ kmp_balign_team_t t_bar[ bs_last_barrier ];
+ volatile int t_construct; // count of single directive encountered by team
+ kmp_lock_t t_single_lock; // team specific lock
+
+ // Master only -----------------------------------------------------------------------------------------
+ KMP_ALIGN_CACHE int t_master_tid; // tid of master in parent team
+ int t_master_this_cons; // "this_construct" single counter of master in parent team
+ ident_t *t_ident; // if volatile, have to change too much other crud to volatile too
+ kmp_team_p *t_parent; // parent team
+ kmp_team_p *t_next_pool; // next free team in the team pool
+ kmp_disp_t *t_dispatch; // thread's dispatch data
+ kmp_task_team_t *t_task_team[2]; // Task team struct; switch between 2
+#if OMP_40_ENABLED
+ kmp_proc_bind_t t_proc_bind; // bind type for par region
+#endif // OMP_40_ENABLED
+#if USE_ITT_BUILD
+ kmp_uint64 t_region_time; // region begin timestamp
+#endif /* USE_ITT_BUILD */
+
+ // Master write, workers read --------------------------------------------------------------------------
+ KMP_ALIGN_CACHE void **t_argv;
+ int t_argc;
+ int t_nproc; // number of threads in team
+ microtask_t t_pkfn;
+ launch_t t_invoke; // procedure to launch the microtask
+
+#if OMPT_SUPPORT
+ ompt_team_info_t ompt_team_info;
+ ompt_lw_taskteam_t *ompt_serialized_team_info;
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ kmp_int8 t_fp_control_saved;
+ kmp_int8 t_pad2b;
+ kmp_int16 t_x87_fpu_control_word; // FP control regs
+ kmp_uint32 t_mxcsr;
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ void *t_inline_argv[ KMP_INLINE_ARGV_ENTRIES ];
+
+ KMP_ALIGN_CACHE kmp_info_t **t_threads;
+ kmp_taskdata_t *t_implicit_task_taskdata; // Taskdata for the thread's implicit task
+ int t_level; // nested parallel level
+
+ KMP_ALIGN_CACHE int t_max_argc;
+ int t_max_nproc; // maximum threads this team can handle (dynamicly expandable)
+ int t_serialized; // levels deep of serialized teams
+ dispatch_shared_info_t *t_disp_buffer; // buffers for dispatch system
+ int t_id; // team's id, assigned by debugger.
+ int t_active_level; // nested active parallel level
+ kmp_r_sched_t t_sched; // run-time schedule for the team
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ int t_first_place; // first & last place in parent thread's partition.
+ int t_last_place; // Restore these values to master after par region.
+#endif // OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ int t_size_changed; // team size was changed?: 0: no, 1: yes, -1: changed via omp_set_num_threads() call
+
+ // Read/write by workers as well -----------------------------------------------------------------------
+#if (KMP_ARCH_X86 || KMP_ARCH_X86_64) && !KMP_USE_HWLOC
+ // Using CACHE_LINE=64 reduces memory footprint, but causes a big perf regression of epcc 'parallel'
+ // and 'barrier' on fxe256lin01. This extra padding serves to fix the performance of epcc 'parallel'
+ // and 'barrier' when CACHE_LINE=64. TODO: investigate more and get rid if this padding.
+ char dummy_padding[1024];
+#endif
+ KMP_ALIGN_CACHE kmp_internal_control_t *t_control_stack_top; // internal control stack for additional nested teams.
+ // for SERIALIZED teams nested 2 or more levels deep
+#if OMP_40_ENABLED
+ kmp_int32 t_cancel_request; // typed flag to store request state of cancellation
+#endif
+ int t_master_active; // save on fork, restore on join
+ kmp_taskq_t t_taskq; // this team's task queue
+ void *t_copypriv_data; // team specific pointer to copyprivate data array
+ kmp_uint32 t_copyin_counter;
+#if USE_ITT_BUILD
+ void *t_stack_id; // team specific stack stitching id (for ittnotify)
+#endif /* USE_ITT_BUILD */
+} kmp_base_team_t;
+
+union KMP_ALIGN_CACHE kmp_team {
+ kmp_base_team_t t;
+ double t_align; /* use worst case alignment */
+ char t_pad[ KMP_PAD(kmp_base_team_t, CACHE_LINE) ];
+};
+
+
+typedef union KMP_ALIGN_CACHE kmp_time_global {
+ double dt_align; /* use worst case alignment */
+ char dt_pad[ KMP_PAD(kmp_base_data_t, CACHE_LINE) ];
+ kmp_base_data_t dt;
+} kmp_time_global_t;
+
+typedef struct kmp_base_global {
+ /* cache-aligned */
+ kmp_time_global_t g_time;
+
+ /* non cache-aligned */
+ volatile int g_abort;
+ volatile int g_done;
+
+ int g_dynamic;
+ enum dynamic_mode g_dynamic_mode;
+} kmp_base_global_t;
+
+typedef union KMP_ALIGN_CACHE kmp_global {
+ kmp_base_global_t g;
+ double g_align; /* use worst case alignment */
+ char g_pad[ KMP_PAD(kmp_base_global_t, CACHE_LINE) ];
+} kmp_global_t;
+
+
+typedef struct kmp_base_root {
+ // TODO: GEH - combine r_active with r_in_parallel then r_active == (r_in_parallel>= 0)
+ // TODO: GEH - then replace r_active with t_active_levels if we can to reduce the synch
+ // overhead or keeping r_active
+
+ volatile int r_active; /* TRUE if some region in a nest has > 1 thread */
+ // GEH: This is misnamed, should be r_in_parallel
+ volatile int r_nested; // TODO: GEH - This is unused, just remove it entirely.
+ int r_in_parallel; /* keeps a count of active parallel regions per root */
+ // GEH: This is misnamed, should be r_active_levels
+ kmp_team_t *r_root_team;
+ kmp_team_t *r_hot_team;
+ kmp_info_t *r_uber_thread;
+ kmp_lock_t r_begin_lock;
+ volatile int r_begin;
+ int r_blocktime; /* blocktime for this root and descendants */
+} kmp_base_root_t;
+
+typedef union KMP_ALIGN_CACHE kmp_root {
+ kmp_base_root_t r;
+ double r_align; /* use worst case alignment */
+ char r_pad[ KMP_PAD(kmp_base_root_t, CACHE_LINE) ];
+} kmp_root_t;
+
+struct fortran_inx_info {
+ kmp_int32 data;
+};
+
+/* ------------------------------------------------------------------------ */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+extern int __kmp_settings;
+extern int __kmp_duplicate_library_ok;
+#if USE_ITT_BUILD
+extern int __kmp_forkjoin_frames;
+extern int __kmp_forkjoin_frames_mode;
+#endif
+extern PACKED_REDUCTION_METHOD_T __kmp_force_reduction_method;
+extern int __kmp_determ_red;
+
+#ifdef KMP_DEBUG
+extern int kmp_a_debug;
+extern int kmp_b_debug;
+extern int kmp_c_debug;
+extern int kmp_d_debug;
+extern int kmp_e_debug;
+extern int kmp_f_debug;
+#endif /* KMP_DEBUG */
+
+/* For debug information logging using rotating buffer */
+#define KMP_DEBUG_BUF_LINES_INIT 512
+#define KMP_DEBUG_BUF_LINES_MIN 1
+
+#define KMP_DEBUG_BUF_CHARS_INIT 128
+#define KMP_DEBUG_BUF_CHARS_MIN 2
+
+extern int __kmp_debug_buf; /* TRUE means use buffer, FALSE means print to stderr */
+extern int __kmp_debug_buf_lines; /* How many lines of debug stored in buffer */
+extern int __kmp_debug_buf_chars; /* How many characters allowed per line in buffer */
+extern int __kmp_debug_buf_atomic; /* TRUE means use atomic update of buffer entry pointer */
+
+extern char *__kmp_debug_buffer; /* Debug buffer itself */
+extern int __kmp_debug_count; /* Counter for number of lines printed in buffer so far */
+extern int __kmp_debug_buf_warn_chars; /* Keep track of char increase recommended in warnings */
+/* end rotating debug buffer */
+
+#ifdef KMP_DEBUG
+extern int __kmp_par_range; /* +1 => only go par for constructs in range */
+
+#define KMP_PAR_RANGE_ROUTINE_LEN 1024
+extern char __kmp_par_range_routine[KMP_PAR_RANGE_ROUTINE_LEN];
+#define KMP_PAR_RANGE_FILENAME_LEN 1024
+extern char __kmp_par_range_filename[KMP_PAR_RANGE_FILENAME_LEN];
+extern int __kmp_par_range_lb;
+extern int __kmp_par_range_ub;
+#endif
+
+/* For printing out dynamic storage map for threads and teams */
+extern int __kmp_storage_map; /* True means print storage map for threads and teams */
+extern int __kmp_storage_map_verbose; /* True means storage map includes placement info */
+extern int __kmp_storage_map_verbose_specified;
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+extern kmp_cpuinfo_t __kmp_cpuinfo;
+#endif
+
+extern volatile int __kmp_init_serial;
+extern volatile int __kmp_init_gtid;
+extern volatile int __kmp_init_common;
+extern volatile int __kmp_init_middle;
+extern volatile int __kmp_init_parallel;
+extern volatile int __kmp_init_monitor;
+extern volatile int __kmp_init_user_locks;
+extern int __kmp_init_counter;
+extern int __kmp_root_counter;
+extern int __kmp_version;
+
+/* list of address of allocated caches for commons */
+extern kmp_cached_addr_t *__kmp_threadpriv_cache_list;
+
+/* Barrier algorithm types and options */
+extern kmp_uint32 __kmp_barrier_gather_bb_dflt;
+extern kmp_uint32 __kmp_barrier_release_bb_dflt;
+extern kmp_bar_pat_e __kmp_barrier_gather_pat_dflt;
+extern kmp_bar_pat_e __kmp_barrier_release_pat_dflt;
+extern kmp_uint32 __kmp_barrier_gather_branch_bits [ bs_last_barrier ];
+extern kmp_uint32 __kmp_barrier_release_branch_bits [ bs_last_barrier ];
+extern kmp_bar_pat_e __kmp_barrier_gather_pattern [ bs_last_barrier ];
+extern kmp_bar_pat_e __kmp_barrier_release_pattern [ bs_last_barrier ];
+extern char const *__kmp_barrier_branch_bit_env_name [ bs_last_barrier ];
+extern char const *__kmp_barrier_pattern_env_name [ bs_last_barrier ];
+extern char const *__kmp_barrier_type_name [ bs_last_barrier ];
+extern char const *__kmp_barrier_pattern_name [ bp_last_bar ];
+
+/* Global Locks */
+extern kmp_bootstrap_lock_t __kmp_initz_lock; /* control initialization */
+extern kmp_bootstrap_lock_t __kmp_forkjoin_lock; /* control fork/join access */
+extern kmp_bootstrap_lock_t __kmp_exit_lock; /* exit() is not always thread-safe */
+extern kmp_bootstrap_lock_t __kmp_monitor_lock; /* control monitor thread creation */
+extern kmp_bootstrap_lock_t __kmp_tp_cached_lock; /* used for the hack to allow threadprivate cache and __kmp_threads expansion to co-exist */
+
+extern kmp_lock_t __kmp_global_lock; /* control OS/global access */
+extern kmp_queuing_lock_t __kmp_dispatch_lock; /* control dispatch access */
+extern kmp_lock_t __kmp_debug_lock; /* control I/O access for KMP_DEBUG */
+
+/* used for yielding spin-waits */
+extern unsigned int __kmp_init_wait; /* initial number of spin-tests */
+extern unsigned int __kmp_next_wait; /* susequent number of spin-tests */
+
+extern enum library_type __kmp_library;
+
+extern enum sched_type __kmp_sched; /* default runtime scheduling */
+extern enum sched_type __kmp_static; /* default static scheduling method */
+extern enum sched_type __kmp_guided; /* default guided scheduling method */
+extern enum sched_type __kmp_auto; /* default auto scheduling method */
+extern int __kmp_chunk; /* default runtime chunk size */
+
+extern size_t __kmp_stksize; /* stack size per thread */
+extern size_t __kmp_monitor_stksize;/* stack size for monitor thread */
+extern size_t __kmp_stkoffset; /* stack offset per thread */
+extern int __kmp_stkpadding; /* Should we pad root thread(s) stack */
+
+extern size_t __kmp_malloc_pool_incr; /* incremental size of pool for kmp_malloc() */
+extern int __kmp_env_chunk; /* was KMP_CHUNK specified? */
+extern int __kmp_env_stksize; /* was KMP_STACKSIZE specified? */
+extern int __kmp_env_omp_stksize;/* was OMP_STACKSIZE specified? */
+extern int __kmp_env_all_threads; /* was KMP_ALL_THREADS or KMP_MAX_THREADS specified? */
+extern int __kmp_env_omp_all_threads;/* was OMP_THREAD_LIMIT specified? */
+extern int __kmp_env_blocktime; /* was KMP_BLOCKTIME specified? */
+extern int __kmp_env_checks; /* was KMP_CHECKS specified? */
+extern int __kmp_env_consistency_check; /* was KMP_CONSISTENCY_CHECK specified? */
+extern int __kmp_generate_warnings; /* should we issue warnings? */
+extern int __kmp_reserve_warn; /* have we issued reserve_threads warning? */
+
+#ifdef DEBUG_SUSPEND
+extern int __kmp_suspend_count; /* count inside __kmp_suspend_template() */
+#endif
+
+extern kmp_uint32 __kmp_yield_init;
+extern kmp_uint32 __kmp_yield_next;
+extern kmp_uint32 __kmp_yielding_on;
+extern kmp_uint32 __kmp_yield_cycle;
+extern kmp_int32 __kmp_yield_on_count;
+extern kmp_int32 __kmp_yield_off_count;
+
+/* ------------------------------------------------------------------------- */
+extern int __kmp_allThreadsSpecified;
+
+extern size_t __kmp_align_alloc;
+/* following data protected by initialization routines */
+extern int __kmp_xproc; /* number of processors in the system */
+extern int __kmp_avail_proc; /* number of processors available to the process */
+extern size_t __kmp_sys_min_stksize; /* system-defined minimum stack size */
+extern int __kmp_sys_max_nth; /* system-imposed maximum number of threads */
+extern int __kmp_max_nth; /* maximum total number of concurrently-existing threads */
+extern int __kmp_threads_capacity; /* capacity of the arrays __kmp_threads and __kmp_root */
+extern int __kmp_dflt_team_nth; /* default number of threads in a parallel region a la OMP_NUM_THREADS */
+extern int __kmp_dflt_team_nth_ub; /* upper bound on "" determined at serial initialization */
+extern int __kmp_tp_capacity; /* capacity of __kmp_threads if threadprivate is used (fixed) */
+extern int __kmp_tp_cached; /* whether threadprivate cache has been created (__kmpc_threadprivate_cached()) */
+extern int __kmp_dflt_nested; /* nested parallelism enabled by default a la OMP_NESTED */
+extern int __kmp_dflt_blocktime; /* number of milliseconds to wait before blocking (env setting) */
+extern int __kmp_monitor_wakeups;/* number of times monitor wakes up per second */
+extern int __kmp_bt_intervals; /* number of monitor timestamp intervals before blocking */
+#ifdef KMP_ADJUST_BLOCKTIME
+extern int __kmp_zero_bt; /* whether blocktime has been forced to zero */
+#endif /* KMP_ADJUST_BLOCKTIME */
+#ifdef KMP_DFLT_NTH_CORES
+extern int __kmp_ncores; /* Total number of cores for threads placement */
+#endif
+extern int __kmp_abort_delay; /* Number of millisecs to delay on abort for VTune */
+
+extern int __kmp_need_register_atfork_specified;
+extern int __kmp_need_register_atfork;/* At initialization, call pthread_atfork to install fork handler */
+extern int __kmp_gtid_mode; /* Method of getting gtid, values:
+ 0 - not set, will be set at runtime
+ 1 - using stack search
+ 2 - dynamic TLS (pthread_getspecific(Linux* OS/OS X*) or TlsGetValue(Windows* OS))
+ 3 - static TLS (__declspec(thread) __kmp_gtid), Linux* OS .so only.
+ */
+extern int __kmp_adjust_gtid_mode; /* If true, adjust method based on #threads */
+#ifdef KMP_TDATA_GTID
+#if KMP_OS_WINDOWS
+extern __declspec(thread) int __kmp_gtid; /* This thread's gtid, if __kmp_gtid_mode == 3 */
+#else
+extern __thread int __kmp_gtid;
+#endif /* KMP_OS_WINDOWS - workaround because Intel(R) Many Integrated Core compiler 20110316 doesn't accept __declspec */
+#endif
+extern int __kmp_tls_gtid_min; /* #threads below which use sp search for gtid */
+extern int __kmp_foreign_tp; /* If true, separate TP var for each foreign thread */
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+extern int __kmp_inherit_fp_control; /* copy fp creg(s) parent->workers at fork */
+extern kmp_int16 __kmp_init_x87_fpu_control_word; /* init thread's FP control reg */
+extern kmp_uint32 __kmp_init_mxcsr; /* init thread's mxscr */
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+extern int __kmp_dflt_max_active_levels; /* max_active_levels for nested parallelism enabled by default a la OMP_MAX_ACTIVE_LEVELS */
+extern int __kmp_dispatch_num_buffers; /* max possible dynamic loops in concurrent execution per team */
+#if KMP_NESTED_HOT_TEAMS
+extern int __kmp_hot_teams_mode;
+extern int __kmp_hot_teams_max_level;
+#endif
+
+# if KMP_OS_LINUX
+extern enum clock_function_type __kmp_clock_function;
+extern int __kmp_clock_function_param;
+# endif /* KMP_OS_LINUX */
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+extern enum mic_type __kmp_mic_type;
+#endif
+
+# ifdef USE_LOAD_BALANCE
+extern double __kmp_load_balance_interval; /* Interval for the load balance algorithm */
+# endif /* USE_LOAD_BALANCE */
+
+// OpenMP 3.1 - Nested num threads array
+typedef struct kmp_nested_nthreads_t {
+ int * nth;
+ int size;
+ int used;
+} kmp_nested_nthreads_t;
+
+extern kmp_nested_nthreads_t __kmp_nested_nth;
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+// Parameters for the speculative lock backoff system.
+struct kmp_adaptive_backoff_params_t {
+ // Number of soft retries before it counts as a hard retry.
+ kmp_uint32 max_soft_retries;
+ // Badness is a bit mask : 0,1,3,7,15,... on each hard failure we move one to the right
+ kmp_uint32 max_badness;
+};
+
+extern kmp_adaptive_backoff_params_t __kmp_adaptive_backoff_params;
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+extern char * __kmp_speculative_statsfile;
+#endif
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+#if OMP_40_ENABLED
+extern int __kmp_display_env; /* TRUE or FALSE */
+extern int __kmp_display_env_verbose; /* TRUE if OMP_DISPLAY_ENV=VERBOSE */
+extern int __kmp_omp_cancellation; /* TRUE or FALSE */
+#endif
+
+/* ------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------- */
+/* the following are protected by the fork/join lock */
+/* write: lock read: anytime */
+extern kmp_info_t **__kmp_threads; /* Descriptors for the threads */
+/* read/write: lock */
+extern volatile kmp_team_t * __kmp_team_pool;
+extern volatile kmp_info_t * __kmp_thread_pool;
+
+/* total number of threads reachable from some root thread including all root threads*/
+extern volatile int __kmp_nth;
+/* total number of threads reachable from some root thread including all root threads,
+ and those in the thread pool */
+extern volatile int __kmp_all_nth;
+extern int __kmp_thread_pool_nth;
+extern volatile int __kmp_thread_pool_active_nth;
+
+extern kmp_root_t **__kmp_root; /* root of thread hierarchy */
+/* end data protected by fork/join lock */
+/* --------------------------------------------------------------------------- */
+
+extern kmp_global_t __kmp_global; /* global status */
+
+extern kmp_info_t __kmp_monitor;
+extern volatile kmp_uint32 __kmp_team_counter; // Used by Debugging Support Library.
+extern volatile kmp_uint32 __kmp_task_counter; // Used by Debugging Support Library.
+
+#if USE_DEBUGGER
+
+#define _KMP_GEN_ID( counter ) \
+ ( \
+ __kmp_debugging \
+ ? \
+ KMP_TEST_THEN_INC32( (volatile kmp_int32 *) & counter ) + 1 \
+ : \
+ ~ 0 \
+ )
+#else
+#define _KMP_GEN_ID( counter ) \
+ ( \
+ ~ 0 \
+ )
+#endif /* USE_DEBUGGER */
+
+#define KMP_GEN_TASK_ID() _KMP_GEN_ID( __kmp_task_counter )
+#define KMP_GEN_TEAM_ID() _KMP_GEN_ID( __kmp_team_counter )
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+extern void __kmp_print_storage_map_gtid( int gtid, void *p1, void* p2, size_t size, char const *format, ... );
+
+extern void __kmp_serial_initialize( void );
+extern void __kmp_middle_initialize( void );
+extern void __kmp_parallel_initialize( void );
+
+extern void __kmp_internal_begin( void );
+extern void __kmp_internal_end_library( int gtid );
+extern void __kmp_internal_end_thread( int gtid );
+extern void __kmp_internal_end_atexit( void );
+extern void __kmp_internal_end_fini( void );
+extern void __kmp_internal_end_dtor( void );
+extern void __kmp_internal_end_dest( void* );
+
+extern int __kmp_register_root( int initial_thread );
+extern void __kmp_unregister_root( int gtid );
+
+extern int __kmp_ignore_mppbeg( void );
+extern int __kmp_ignore_mppend( void );
+
+extern int __kmp_enter_single( int gtid, ident_t *id_ref, int push_ws );
+extern void __kmp_exit_single( int gtid );
+
+extern void __kmp_parallel_deo( int *gtid_ref, int *cid_ref, ident_t *loc_ref );
+extern void __kmp_parallel_dxo( int *gtid_ref, int *cid_ref, ident_t *loc_ref );
+
+#ifdef USE_LOAD_BALANCE
+extern int __kmp_get_load_balance( int );
+#endif
+
+#ifdef BUILD_TV
+extern void __kmp_tv_threadprivate_store( kmp_info_t *th, void *global_addr, void *thread_addr );
+#endif
+
+extern int __kmp_get_global_thread_id( void );
+extern int __kmp_get_global_thread_id_reg( void );
+extern void __kmp_exit_thread( int exit_status );
+extern void __kmp_abort( char const * format, ... );
+extern void __kmp_abort_thread( void );
+extern void __kmp_abort_process( void );
+extern void __kmp_warn( char const * format, ... );
+
+extern void __kmp_set_num_threads( int new_nth, int gtid );
+
+// Returns current thread (pointer to kmp_info_t). Current thread *must* be registered.
+static inline kmp_info_t * __kmp_entry_thread()
+{
+ int gtid = __kmp_entry_gtid();
+
+ return __kmp_threads[gtid];
+}
+
+extern void __kmp_set_max_active_levels( int gtid, int new_max_active_levels );
+extern int __kmp_get_max_active_levels( int gtid );
+extern int __kmp_get_ancestor_thread_num( int gtid, int level );
+extern int __kmp_get_team_size( int gtid, int level );
+extern void __kmp_set_schedule( int gtid, kmp_sched_t new_sched, int chunk );
+extern void __kmp_get_schedule( int gtid, kmp_sched_t * sched, int * chunk );
+
+extern unsigned short __kmp_get_random( kmp_info_t * thread );
+extern void __kmp_init_random( kmp_info_t * thread );
+
+extern kmp_r_sched_t __kmp_get_schedule_global( void );
+extern void __kmp_adjust_num_threads( int new_nproc );
+
+extern void * ___kmp_allocate( size_t size KMP_SRC_LOC_DECL );
+extern void * ___kmp_page_allocate( size_t size KMP_SRC_LOC_DECL );
+extern void ___kmp_free( void * ptr KMP_SRC_LOC_DECL );
+#define __kmp_allocate( size ) ___kmp_allocate( (size) KMP_SRC_LOC_CURR )
+#define __kmp_page_allocate( size ) ___kmp_page_allocate( (size) KMP_SRC_LOC_CURR )
+#define __kmp_free( ptr ) ___kmp_free( (ptr) KMP_SRC_LOC_CURR )
+
+#if USE_FAST_MEMORY
+extern void * ___kmp_fast_allocate( kmp_info_t *this_thr, size_t size KMP_SRC_LOC_DECL );
+extern void ___kmp_fast_free( kmp_info_t *this_thr, void *ptr KMP_SRC_LOC_DECL );
+extern void __kmp_free_fast_memory( kmp_info_t *this_thr );
+extern void __kmp_initialize_fast_memory( kmp_info_t *this_thr );
+#define __kmp_fast_allocate( this_thr, size ) ___kmp_fast_allocate( (this_thr), (size) KMP_SRC_LOC_CURR )
+#define __kmp_fast_free( this_thr, ptr ) ___kmp_fast_free( (this_thr), (ptr) KMP_SRC_LOC_CURR )
+#endif
+
+extern void * ___kmp_thread_malloc( kmp_info_t *th, size_t size KMP_SRC_LOC_DECL );
+extern void * ___kmp_thread_calloc( kmp_info_t *th, size_t nelem, size_t elsize KMP_SRC_LOC_DECL );
+extern void * ___kmp_thread_realloc( kmp_info_t *th, void *ptr, size_t size KMP_SRC_LOC_DECL );
+extern void ___kmp_thread_free( kmp_info_t *th, void *ptr KMP_SRC_LOC_DECL );
+#define __kmp_thread_malloc( th, size ) ___kmp_thread_malloc( (th), (size) KMP_SRC_LOC_CURR )
+#define __kmp_thread_calloc( th, nelem, elsize ) ___kmp_thread_calloc( (th), (nelem), (elsize) KMP_SRC_LOC_CURR )
+#define __kmp_thread_realloc( th, ptr, size ) ___kmp_thread_realloc( (th), (ptr), (size) KMP_SRC_LOC_CURR )
+#define __kmp_thread_free( th, ptr ) ___kmp_thread_free( (th), (ptr) KMP_SRC_LOC_CURR )
+
+#define KMP_INTERNAL_MALLOC(sz) malloc(sz)
+#define KMP_INTERNAL_FREE(p) free(p)
+#define KMP_INTERNAL_REALLOC(p,sz) realloc((p),(sz))
+#define KMP_INTERNAL_CALLOC(n,sz) calloc((n),(sz))
+
+extern void __kmp_push_num_threads( ident_t *loc, int gtid, int num_threads );
+
+#if OMP_40_ENABLED
+extern void __kmp_push_proc_bind( ident_t *loc, int gtid, kmp_proc_bind_t proc_bind );
+extern void __kmp_push_num_teams( ident_t *loc, int gtid, int num_teams, int num_threads );
+#endif
+
+extern void __kmp_yield( int cond );
+
+extern void __kmpc_dispatch_init_4( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_int32 lb, kmp_int32 ub, kmp_int32 st,
+ kmp_int32 chunk );
+extern void __kmpc_dispatch_init_4u( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st,
+ kmp_int32 chunk );
+extern void __kmpc_dispatch_init_8( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_int64 lb, kmp_int64 ub, kmp_int64 st,
+ kmp_int64 chunk );
+extern void __kmpc_dispatch_init_8u( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st,
+ kmp_int64 chunk );
+
+extern int __kmpc_dispatch_next_4( ident_t *loc, kmp_int32 gtid,
+ kmp_int32 *p_last, kmp_int32 *p_lb, kmp_int32 *p_ub, kmp_int32 *p_st );
+extern int __kmpc_dispatch_next_4u( ident_t *loc, kmp_int32 gtid,
+ kmp_int32 *p_last, kmp_uint32 *p_lb, kmp_uint32 *p_ub, kmp_int32 *p_st );
+extern int __kmpc_dispatch_next_8( ident_t *loc, kmp_int32 gtid,
+ kmp_int32 *p_last, kmp_int64 *p_lb, kmp_int64 *p_ub, kmp_int64 *p_st );
+extern int __kmpc_dispatch_next_8u( ident_t *loc, kmp_int32 gtid,
+ kmp_int32 *p_last, kmp_uint64 *p_lb, kmp_uint64 *p_ub, kmp_int64 *p_st );
+
+extern void __kmpc_dispatch_fini_4( ident_t *loc, kmp_int32 gtid );
+extern void __kmpc_dispatch_fini_8( ident_t *loc, kmp_int32 gtid );
+extern void __kmpc_dispatch_fini_4u( ident_t *loc, kmp_int32 gtid );
+extern void __kmpc_dispatch_fini_8u( ident_t *loc, kmp_int32 gtid );
+
+
+#ifdef KMP_GOMP_COMPAT
+
+extern void __kmp_aux_dispatch_init_4( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_int32 lb, kmp_int32 ub, kmp_int32 st,
+ kmp_int32 chunk, int push_ws );
+extern void __kmp_aux_dispatch_init_4u( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st,
+ kmp_int32 chunk, int push_ws );
+extern void __kmp_aux_dispatch_init_8( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_int64 lb, kmp_int64 ub, kmp_int64 st,
+ kmp_int64 chunk, int push_ws );
+extern void __kmp_aux_dispatch_init_8u( ident_t *loc, kmp_int32 gtid,
+ enum sched_type schedule, kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st,
+ kmp_int64 chunk, int push_ws );
+extern void __kmp_aux_dispatch_fini_chunk_4( ident_t *loc, kmp_int32 gtid );
+extern void __kmp_aux_dispatch_fini_chunk_8( ident_t *loc, kmp_int32 gtid );
+extern void __kmp_aux_dispatch_fini_chunk_4u( ident_t *loc, kmp_int32 gtid );
+extern void __kmp_aux_dispatch_fini_chunk_8u( ident_t *loc, kmp_int32 gtid );
+
+#endif /* KMP_GOMP_COMPAT */
+
+
+extern kmp_uint32 __kmp_eq_4( kmp_uint32 value, kmp_uint32 checker );
+extern kmp_uint32 __kmp_neq_4( kmp_uint32 value, kmp_uint32 checker );
+extern kmp_uint32 __kmp_lt_4( kmp_uint32 value, kmp_uint32 checker );
+extern kmp_uint32 __kmp_ge_4( kmp_uint32 value, kmp_uint32 checker );
+extern kmp_uint32 __kmp_le_4( kmp_uint32 value, kmp_uint32 checker );
+extern kmp_uint32 __kmp_wait_yield_4( kmp_uint32 volatile * spinner, kmp_uint32 checker, kmp_uint32 (*pred) (kmp_uint32, kmp_uint32), void * obj );
+extern void __kmp_wait_yield_4_ptr( void * spinner, kmp_uint32 checker, kmp_uint32 (* pred)( void *, kmp_uint32 ), void * obj );
+
+class kmp_flag_32;
+class kmp_flag_64;
+class kmp_flag_oncore;
+extern void __kmp_wait_64(kmp_info_t *this_thr, kmp_flag_64 *flag, int final_spin
+#if USE_ITT_BUILD
+ , void * itt_sync_obj
+#endif
+ );
+extern void __kmp_release_64(kmp_flag_64 *flag);
+
+extern void __kmp_infinite_loop( void );
+
+extern void __kmp_cleanup( void );
+
+#if KMP_HANDLE_SIGNALS
+ extern int __kmp_handle_signals;
+ extern void __kmp_install_signals( int parallel_init );
+ extern void __kmp_remove_signals( void );
+#endif
+
+extern void __kmp_clear_system_time( void );
+extern void __kmp_read_system_time( double *delta );
+
+extern void __kmp_check_stack_overlap( kmp_info_t *thr );
+
+extern void __kmp_expand_host_name( char *buffer, size_t size );
+extern void __kmp_expand_file_name( char *result, size_t rlen, char *pattern );
+
+#if KMP_OS_WINDOWS
+extern void __kmp_initialize_system_tick( void ); /* Initialize timer tick value */
+#endif
+
+extern void __kmp_runtime_initialize( void ); /* machine specific initialization */
+extern void __kmp_runtime_destroy( void );
+
+#if KMP_AFFINITY_SUPPORTED
+extern char *__kmp_affinity_print_mask(char *buf, int buf_len, kmp_affin_mask_t *mask);
+extern void __kmp_affinity_initialize(void);
+extern void __kmp_affinity_uninitialize(void);
+extern void __kmp_affinity_set_init_mask(int gtid, int isa_root); /* set affinity according to KMP_AFFINITY */
+#if OMP_40_ENABLED
+extern void __kmp_affinity_set_place(int gtid);
+#endif
+extern void __kmp_affinity_determine_capable( const char *env_var );
+extern int __kmp_aux_set_affinity(void **mask);
+extern int __kmp_aux_get_affinity(void **mask);
+extern int __kmp_aux_set_affinity_mask_proc(int proc, void **mask);
+extern int __kmp_aux_unset_affinity_mask_proc(int proc, void **mask);
+extern int __kmp_aux_get_affinity_mask_proc(int proc, void **mask);
+extern void __kmp_balanced_affinity( int tid, int team_size );
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+extern void __kmp_cleanup_hierarchy();
+extern void __kmp_get_hierarchy(kmp_uint32 nproc, kmp_bstate_t *thr_bar);
+
+#if KMP_USE_FUTEX
+
+extern int __kmp_futex_determine_capable( void );
+
+#endif // KMP_USE_FUTEX
+
+extern void __kmp_gtid_set_specific( int gtid );
+extern int __kmp_gtid_get_specific( void );
+
+extern double __kmp_read_cpu_time( void );
+
+extern int __kmp_read_system_info( struct kmp_sys_info *info );
+
+extern void __kmp_create_monitor( kmp_info_t *th );
+
+extern void *__kmp_launch_thread( kmp_info_t *thr );
+
+extern void __kmp_create_worker( int gtid, kmp_info_t *th, size_t stack_size );
+
+#if KMP_OS_WINDOWS
+extern int __kmp_still_running(kmp_info_t *th);
+extern int __kmp_is_thread_alive( kmp_info_t * th, DWORD *exit_val );
+extern void __kmp_free_handle( kmp_thread_t tHandle );
+#endif
+
+extern void __kmp_reap_monitor( kmp_info_t *th );
+extern void __kmp_reap_worker( kmp_info_t *th );
+extern void __kmp_terminate_thread( int gtid );
+
+extern void __kmp_suspend_32( int th_gtid, kmp_flag_32 *flag );
+extern void __kmp_suspend_64( int th_gtid, kmp_flag_64 *flag );
+extern void __kmp_suspend_oncore( int th_gtid, kmp_flag_oncore *flag );
+extern void __kmp_resume_32( int target_gtid, kmp_flag_32 *flag );
+extern void __kmp_resume_64( int target_gtid, kmp_flag_64 *flag );
+extern void __kmp_resume_oncore( int target_gtid, kmp_flag_oncore *flag );
+
+extern void __kmp_elapsed( double * );
+extern void __kmp_elapsed_tick( double * );
+
+extern void __kmp_enable( int old_state );
+extern void __kmp_disable( int *old_state );
+
+extern void __kmp_thread_sleep( int millis );
+
+extern void __kmp_common_initialize( void );
+extern void __kmp_common_destroy( void );
+extern void __kmp_common_destroy_gtid( int gtid );
+
+#if KMP_OS_UNIX
+extern void __kmp_register_atfork( void );
+#endif
+extern void __kmp_suspend_initialize( void );
+extern void __kmp_suspend_uninitialize_thread( kmp_info_t *th );
+
+extern kmp_info_t * __kmp_allocate_thread( kmp_root_t *root,
+ kmp_team_t *team, int tid);
+#if OMP_40_ENABLED
+extern kmp_team_t * __kmp_allocate_team( kmp_root_t *root, int new_nproc, int max_nproc,
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id,
+#endif
+ kmp_proc_bind_t proc_bind,
+ kmp_internal_control_t *new_icvs,
+ int argc USE_NESTED_HOT_ARG(kmp_info_t *thr) );
+#else
+extern kmp_team_t * __kmp_allocate_team( kmp_root_t *root, int new_nproc, int max_nproc,
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id,
+#endif
+ kmp_internal_control_t *new_icvs,
+ int argc USE_NESTED_HOT_ARG(kmp_info_t *thr) );
+#endif // OMP_40_ENABLED
+extern void __kmp_free_thread( kmp_info_t * );
+extern void __kmp_free_team( kmp_root_t *, kmp_team_t * USE_NESTED_HOT_ARG(kmp_info_t *) );
+extern kmp_team_t * __kmp_reap_team( kmp_team_t * );
+
+/* ------------------------------------------------------------------------ */
+
+extern void __kmp_initialize_bget( kmp_info_t *th );
+extern void __kmp_finalize_bget( kmp_info_t *th );
+
+KMP_EXPORT void *kmpc_malloc( size_t size );
+KMP_EXPORT void *kmpc_aligned_malloc( size_t size, size_t alignment );
+KMP_EXPORT void *kmpc_calloc( size_t nelem, size_t elsize );
+KMP_EXPORT void *kmpc_realloc( void *ptr, size_t size );
+KMP_EXPORT void kmpc_free( void *ptr );
+
+/* ------------------------------------------------------------------------ */
+/* declarations for internal use */
+
+extern int __kmp_barrier( enum barrier_type bt, int gtid, int is_split,
+ size_t reduce_size, void *reduce_data, void (*reduce)(void *, void *) );
+extern void __kmp_end_split_barrier ( enum barrier_type bt, int gtid );
+
+/*!
+ * Tell the fork call which compiler generated the fork call, and therefore how to deal with the call.
+ */
+enum fork_context_e
+{
+ fork_context_gnu, /**< Called from GNU generated code, so must not invoke the microtask internally. */
+ fork_context_intel, /**< Called from Intel generated code. */
+ fork_context_last
+};
+extern int __kmp_fork_call( ident_t *loc, int gtid, enum fork_context_e fork_context,
+ kmp_int32 argc,
+#if OMPT_SUPPORT
+ void *unwrapped_task,
+#endif
+ microtask_t microtask, launch_t invoker,
+/* TODO: revert workaround for Intel(R) 64 tracker #96 */
+#if (KMP_ARCH_ARM || KMP_ARCH_X86_64 || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ va_list *ap
+#else
+ va_list ap
+#endif
+ );
+
+extern void __kmp_join_call( ident_t *loc, int gtid
+#if OMPT_SUPPORT
+ , enum fork_context_e fork_context
+#endif
+#if OMP_40_ENABLED
+ , int exit_teams = 0
+#endif
+ );
+
+extern void __kmp_serialized_parallel(ident_t *id, kmp_int32 gtid);
+extern void __kmp_internal_fork( ident_t *id, int gtid, kmp_team_t *team );
+extern void __kmp_internal_join( ident_t *id, int gtid, kmp_team_t *team );
+extern int __kmp_invoke_task_func( int gtid );
+extern void __kmp_run_before_invoked_task( int gtid, int tid, kmp_info_t *this_thr, kmp_team_t *team );
+extern void __kmp_run_after_invoked_task( int gtid, int tid, kmp_info_t *this_thr, kmp_team_t *team );
+
+// should never have been exported
+KMP_EXPORT int __kmpc_invoke_task_func( int gtid );
+#if OMP_40_ENABLED
+extern int __kmp_invoke_teams_master( int gtid );
+extern void __kmp_teams_master( int gtid );
+#endif
+extern void __kmp_save_internal_controls( kmp_info_t * thread );
+extern void __kmp_user_set_library (enum library_type arg);
+extern void __kmp_aux_set_library (enum library_type arg);
+extern void __kmp_aux_set_stacksize( size_t arg);
+extern void __kmp_aux_set_blocktime (int arg, kmp_info_t *thread, int tid);
+extern void __kmp_aux_set_defaults( char const * str, int len );
+
+/* Functions below put here to call them from __kmp_aux_env_initialize() in kmp_settings.c */
+void kmpc_set_blocktime (int arg);
+void ompc_set_nested( int flag );
+void ompc_set_dynamic( int flag );
+void ompc_set_num_threads( int arg );
+
+extern void __kmp_push_current_task_to_thread( kmp_info_t *this_thr,
+ kmp_team_t *team, int tid );
+extern void __kmp_pop_current_task_from_thread( kmp_info_t *this_thr );
+extern kmp_task_t* __kmp_task_alloc( ident_t *loc_ref, kmp_int32 gtid,
+ kmp_tasking_flags_t *flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+ kmp_routine_entry_t task_entry );
+extern void __kmp_init_implicit_task( ident_t *loc_ref, kmp_info_t *this_thr,
+ kmp_team_t *team, int tid, int set_curr_task );
+
+int __kmp_execute_tasks_32(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_32 *flag, int final_spin,
+ int *thread_finished,
+#if USE_ITT_BUILD
+ void * itt_sync_obj,
+#endif /* USE_ITT_BUILD */
+ kmp_int32 is_constrained);
+int __kmp_execute_tasks_64(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_64 *flag, int final_spin,
+ int *thread_finished,
+#if USE_ITT_BUILD
+ void * itt_sync_obj,
+#endif /* USE_ITT_BUILD */
+ kmp_int32 is_constrained);
+int __kmp_execute_tasks_oncore(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_oncore *flag, int final_spin,
+ int *thread_finished,
+#if USE_ITT_BUILD
+ void * itt_sync_obj,
+#endif /* USE_ITT_BUILD */
+ kmp_int32 is_constrained);
+
+extern void __kmp_free_task_team( kmp_info_t *thread, kmp_task_team_t *task_team );
+extern void __kmp_reap_task_teams( void );
+extern void __kmp_wait_to_unref_task_teams( void );
+extern void __kmp_task_team_setup ( kmp_info_t *this_thr, kmp_team_t *team, int always );
+extern void __kmp_task_team_sync ( kmp_info_t *this_thr, kmp_team_t *team );
+extern void __kmp_task_team_wait ( kmp_info_t *this_thr, kmp_team_t *team
+#if USE_ITT_BUILD
+ , void * itt_sync_obj
+#endif /* USE_ITT_BUILD */
+ , int wait=1
+);
+extern void __kmp_tasking_barrier( kmp_team_t *team, kmp_info_t *thread, int gtid );
+
+extern int __kmp_is_address_mapped( void *addr );
+extern kmp_uint64 __kmp_hardware_timestamp(void);
+
+#if KMP_OS_UNIX
+extern int __kmp_read_from_file( char const *path, char const *format, ... );
+#endif
+
+/* ------------------------------------------------------------------------ */
+//
+// Assembly routines that have no compiler intrinsic replacement
+//
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+extern void __kmp_query_cpuid( kmp_cpuinfo_t *p );
+
+#define __kmp_load_mxcsr(p) _mm_setcsr(*(p))
+static inline void __kmp_store_mxcsr( kmp_uint32 *p ) { *p = _mm_getcsr(); }
+
+extern void __kmp_load_x87_fpu_control_word( kmp_int16 *p );
+extern void __kmp_store_x87_fpu_control_word( kmp_int16 *p );
+extern void __kmp_clear_x87_fpu_status_word();
+# define KMP_X86_MXCSR_MASK 0xffffffc0 /* ignore status flags (6 lsb) */
+
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+extern int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int npr, int argc, void *argv[]
+#if OMPT_SUPPORT
+ , void **exit_frame_ptr
+#endif
+);
+
+
+/* ------------------------------------------------------------------------ */
+
+KMP_EXPORT void __kmpc_begin ( ident_t *, kmp_int32 flags );
+KMP_EXPORT void __kmpc_end ( ident_t * );
+
+KMP_EXPORT void __kmpc_threadprivate_register_vec ( ident_t *, void * data, kmpc_ctor_vec ctor,
+ kmpc_cctor_vec cctor, kmpc_dtor_vec dtor, size_t vector_length );
+KMP_EXPORT void __kmpc_threadprivate_register ( ident_t *, void * data, kmpc_ctor ctor, kmpc_cctor cctor, kmpc_dtor dtor );
+KMP_EXPORT void * __kmpc_threadprivate ( ident_t *, kmp_int32 global_tid, void * data, size_t size );
+
+KMP_EXPORT kmp_int32 __kmpc_global_thread_num ( ident_t * );
+KMP_EXPORT kmp_int32 __kmpc_global_num_threads ( ident_t * );
+KMP_EXPORT kmp_int32 __kmpc_bound_thread_num ( ident_t * );
+KMP_EXPORT kmp_int32 __kmpc_bound_num_threads ( ident_t * );
+
+KMP_EXPORT kmp_int32 __kmpc_ok_to_fork ( ident_t * );
+KMP_EXPORT void __kmpc_fork_call ( ident_t *, kmp_int32 nargs, kmpc_micro microtask, ... );
+
+KMP_EXPORT void __kmpc_serialized_parallel ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_end_serialized_parallel ( ident_t *, kmp_int32 global_tid );
+
+KMP_EXPORT void __kmpc_flush ( ident_t *);
+KMP_EXPORT void __kmpc_barrier ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT kmp_int32 __kmpc_master ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_end_master ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_ordered ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_end_ordered ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_critical ( ident_t *, kmp_int32 global_tid, kmp_critical_name * );
+KMP_EXPORT void __kmpc_end_critical ( ident_t *, kmp_int32 global_tid, kmp_critical_name * );
+
+#if OMP_45_ENABLED
+KMP_EXPORT void __kmpc_critical_with_hint ( ident_t *, kmp_int32 global_tid, kmp_critical_name *, uintptr_t hint );
+#endif
+
+KMP_EXPORT kmp_int32 __kmpc_barrier_master ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_end_barrier_master ( ident_t *, kmp_int32 global_tid );
+
+KMP_EXPORT kmp_int32 __kmpc_barrier_master_nowait ( ident_t *, kmp_int32 global_tid );
+
+KMP_EXPORT kmp_int32 __kmpc_single ( ident_t *, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_end_single ( ident_t *, kmp_int32 global_tid );
+
+KMP_EXPORT void KMPC_FOR_STATIC_INIT ( ident_t *loc, kmp_int32 global_tid, kmp_int32 schedtype, kmp_int32 *plastiter,
+ kmp_int *plower, kmp_int *pupper, kmp_int *pstride, kmp_int incr, kmp_int chunk );
+
+KMP_EXPORT void __kmpc_for_static_fini ( ident_t *loc, kmp_int32 global_tid );
+
+KMP_EXPORT void __kmpc_copyprivate( ident_t *loc, kmp_int32 global_tid, size_t cpy_size, void *cpy_data, void(*cpy_func)(void*,void*), kmp_int32 didit );
+
+extern void KMPC_SET_NUM_THREADS ( int arg );
+extern void KMPC_SET_DYNAMIC ( int flag );
+extern void KMPC_SET_NESTED ( int flag );
+
+/* --------------------------------------------------------------------------- */
+
+/*
+ * Taskq interface routines
+ */
+
+KMP_EXPORT kmpc_thunk_t * __kmpc_taskq (ident_t *loc, kmp_int32 global_tid, kmpc_task_t taskq_task, size_t sizeof_thunk,
+ size_t sizeof_shareds, kmp_int32 flags, kmpc_shared_vars_t **shareds);
+KMP_EXPORT void __kmpc_end_taskq (ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk);
+KMP_EXPORT kmp_int32 __kmpc_task (ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk);
+KMP_EXPORT void __kmpc_taskq_task (ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk, kmp_int32 status);
+KMP_EXPORT void __kmpc_end_taskq_task (ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk);
+KMP_EXPORT kmpc_thunk_t * __kmpc_task_buffer (ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *taskq_thunk, kmpc_task_t task);
+
+/* ------------------------------------------------------------------------ */
+
+/*
+ * OMP 3.0 tasking interface routines
+ */
+
+KMP_EXPORT kmp_int32
+__kmpc_omp_task( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task );
+KMP_EXPORT kmp_task_t*
+__kmpc_omp_task_alloc( ident_t *loc_ref, kmp_int32 gtid, kmp_int32 flags,
+ size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+ kmp_routine_entry_t task_entry );
+KMP_EXPORT void
+__kmpc_omp_task_begin_if0( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * task );
+KMP_EXPORT void
+__kmpc_omp_task_complete_if0( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task );
+KMP_EXPORT kmp_int32
+__kmpc_omp_task_parts( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task );
+KMP_EXPORT kmp_int32
+__kmpc_omp_taskwait( ident_t *loc_ref, kmp_int32 gtid );
+
+KMP_EXPORT kmp_int32
+__kmpc_omp_taskyield( ident_t *loc_ref, kmp_int32 gtid, int end_part );
+
+#if TASK_UNUSED
+void __kmpc_omp_task_begin( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * task );
+void __kmpc_omp_task_complete( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task );
+#endif // TASK_UNUSED
+
+/* ------------------------------------------------------------------------ */
+
+#if OMP_40_ENABLED
+
+KMP_EXPORT void __kmpc_taskgroup( ident_t * loc, int gtid );
+KMP_EXPORT void __kmpc_end_taskgroup( ident_t * loc, int gtid );
+
+KMP_EXPORT kmp_int32 __kmpc_omp_task_with_deps ( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task,
+ kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list );
+KMP_EXPORT void __kmpc_omp_wait_deps ( ident_t *loc_ref, kmp_int32 gtid, kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list );
+extern void __kmp_release_deps ( kmp_int32 gtid, kmp_taskdata_t *task );
+
+extern kmp_int32 __kmp_omp_task( kmp_int32 gtid, kmp_task_t * new_task, bool serialize_immediate );
+
+KMP_EXPORT kmp_int32 __kmpc_cancel(ident_t* loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind);
+KMP_EXPORT kmp_int32 __kmpc_cancellationpoint(ident_t* loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind);
+KMP_EXPORT kmp_int32 __kmpc_cancel_barrier(ident_t* loc_ref, kmp_int32 gtid);
+KMP_EXPORT int __kmp_get_cancellation_status(int cancel_kind);
+
+#if OMP_45_ENABLED
+
+KMP_EXPORT void __kmpc_proxy_task_completed( kmp_int32 gtid, kmp_task_t *ptask );
+KMP_EXPORT void __kmpc_proxy_task_completed_ooo ( kmp_task_t *ptask );
+KMP_EXPORT void __kmpc_taskloop(ident_t *loc, kmp_int32 gtid, kmp_task_t *task, kmp_int32 if_val,
+ kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st,
+ kmp_int32 nogroup, kmp_int32 sched, kmp_uint64 grainsize, void * task_dup );
+#endif
+
+#endif
+
+
+/*
+ * Lock interface routines (fast versions with gtid passed in)
+ */
+KMP_EXPORT void __kmpc_init_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_init_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_destroy_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_destroy_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_set_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_set_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_unset_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT void __kmpc_unset_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT int __kmpc_test_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+KMP_EXPORT int __kmpc_test_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock );
+
+#if OMP_45_ENABLED
+KMP_EXPORT void __kmpc_init_lock_with_hint( ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint );
+KMP_EXPORT void __kmpc_init_nest_lock_with_hint( ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint );
+#endif
+
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Interface to fast scalable reduce methods routines
+ */
+
+KMP_EXPORT kmp_int32 __kmpc_reduce_nowait( ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size,
+ void *reduce_data, void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck );
+KMP_EXPORT void __kmpc_end_reduce_nowait( ident_t *loc, kmp_int32 global_tid, kmp_critical_name *lck );
+KMP_EXPORT kmp_int32 __kmpc_reduce( ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size,
+ void *reduce_data, void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck );
+KMP_EXPORT void __kmpc_end_reduce( ident_t *loc, kmp_int32 global_tid, kmp_critical_name *lck );
+
+/*
+ * internal fast reduction routines
+ */
+
+extern PACKED_REDUCTION_METHOD_T
+__kmp_determine_reduction_method( ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size,
+ void *reduce_data, void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck );
+
+// this function is for testing set/get/determine reduce method
+KMP_EXPORT kmp_int32 __kmp_get_reduce_method( void );
+
+KMP_EXPORT kmp_uint64 __kmpc_get_taskid();
+KMP_EXPORT kmp_uint64 __kmpc_get_parent_taskid();
+
+// this function exported for testing of KMP_PLACE_THREADS functionality
+KMP_EXPORT void __kmpc_place_threads(int,int,int,int,int);
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+// C++ port
+// missing 'extern "C"' declarations
+
+KMP_EXPORT kmp_int32 __kmpc_in_parallel( ident_t *loc );
+KMP_EXPORT void __kmpc_pop_num_threads( ident_t *loc, kmp_int32 global_tid );
+KMP_EXPORT void __kmpc_push_num_threads( ident_t *loc, kmp_int32 global_tid, kmp_int32 num_threads );
+
+#if OMP_40_ENABLED
+KMP_EXPORT void __kmpc_push_proc_bind( ident_t *loc, kmp_int32 global_tid, int proc_bind );
+KMP_EXPORT void __kmpc_push_num_teams( ident_t *loc, kmp_int32 global_tid, kmp_int32 num_teams, kmp_int32 num_threads );
+KMP_EXPORT void __kmpc_fork_teams(ident_t *loc, kmp_int32 argc, kmpc_micro microtask, ...);
+#endif
+#if OMP_45_ENABLED
+struct kmp_dim { // loop bounds info casted to kmp_int64
+ kmp_int64 lo; // lower
+ kmp_int64 up; // upper
+ kmp_int64 st; // stride
+};
+KMP_EXPORT void __kmpc_doacross_init(ident_t *loc, kmp_int32 gtid, kmp_int32 num_dims, struct kmp_dim * dims);
+KMP_EXPORT void __kmpc_doacross_wait(ident_t *loc, kmp_int32 gtid, kmp_int64 *vec);
+KMP_EXPORT void __kmpc_doacross_post(ident_t *loc, kmp_int32 gtid, kmp_int64 *vec);
+KMP_EXPORT void __kmpc_doacross_fini(ident_t *loc, kmp_int32 gtid);
+#endif
+
+KMP_EXPORT void*
+__kmpc_threadprivate_cached( ident_t * loc, kmp_int32 global_tid,
+ void * data, size_t size, void *** cache );
+
+// Symbols for MS mutual detection.
+extern int _You_must_link_with_exactly_one_OpenMP_library;
+extern int _You_must_link_with_Intel_OpenMP_library;
+#if KMP_OS_WINDOWS && ( KMP_VERSION_MAJOR > 4 )
+ extern int _You_must_link_with_Microsoft_OpenMP_library;
+#endif
+
+
+// The routines below are not exported.
+// Consider making them 'static' in corresponding source files.
+void
+kmp_threadprivate_insert_private_data( int gtid, void *pc_addr, void *data_addr, size_t pc_size );
+struct private_common *
+kmp_threadprivate_insert( int gtid, void *pc_addr, void *data_addr, size_t pc_size );
+
+//
+// ompc_, kmpc_ entries moved from omp.h.
+//
+#if KMP_OS_WINDOWS
+# define KMPC_CONVENTION __cdecl
+#else
+# define KMPC_CONVENTION
+#endif
+
+#ifndef __OMP_H
+typedef enum omp_sched_t {
+ omp_sched_static = 1,
+ omp_sched_dynamic = 2,
+ omp_sched_guided = 3,
+ omp_sched_auto = 4
+} omp_sched_t;
+typedef void * kmp_affinity_mask_t;
+#endif
+
+KMP_EXPORT void KMPC_CONVENTION ompc_set_max_active_levels(int);
+KMP_EXPORT void KMPC_CONVENTION ompc_set_schedule(omp_sched_t, int);
+KMP_EXPORT int KMPC_CONVENTION ompc_get_ancestor_thread_num(int);
+KMP_EXPORT int KMPC_CONVENTION ompc_get_team_size(int);
+KMP_EXPORT int KMPC_CONVENTION kmpc_set_affinity_mask_proc(int, kmp_affinity_mask_t *);
+KMP_EXPORT int KMPC_CONVENTION kmpc_unset_affinity_mask_proc(int, kmp_affinity_mask_t *);
+KMP_EXPORT int KMPC_CONVENTION kmpc_get_affinity_mask_proc(int, kmp_affinity_mask_t *);
+
+KMP_EXPORT void KMPC_CONVENTION kmpc_set_stacksize(int);
+KMP_EXPORT void KMPC_CONVENTION kmpc_set_stacksize_s(size_t);
+KMP_EXPORT void KMPC_CONVENTION kmpc_set_library(int);
+KMP_EXPORT void KMPC_CONVENTION kmpc_set_defaults(char const *);
+KMP_EXPORT void KMPC_CONVENTION kmpc_set_disp_num_buffers(int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* KMP_H */
+
diff --git a/final/runtime/src/kmp_affinity.cpp b/final/runtime/src/kmp_affinity.cpp
new file mode 100644
index 0000000..fca87d9
--- /dev/null
+++ b/final/runtime/src/kmp_affinity.cpp
@@ -0,0 +1,4821 @@
+/*
+ * kmp_affinity.cpp -- affinity management
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+#include "kmp_str.h"
+#include "kmp_wrapper_getpid.h"
+#include "kmp_affinity.h"
+
+// Store the real or imagined machine hierarchy here
+static hierarchy_info machine_hierarchy;
+
+void __kmp_cleanup_hierarchy() {
+ machine_hierarchy.fini();
+}
+
+void __kmp_get_hierarchy(kmp_uint32 nproc, kmp_bstate_t *thr_bar) {
+ kmp_uint32 depth;
+ // The test below is true if affinity is available, but set to "none". Need to init on first use of hierarchical barrier.
+ if (TCR_1(machine_hierarchy.uninitialized))
+ machine_hierarchy.init(NULL, nproc);
+
+ // Adjust the hierarchy in case num threads exceeds original
+ if (nproc > machine_hierarchy.base_num_threads)
+ machine_hierarchy.resize(nproc);
+
+ depth = machine_hierarchy.depth;
+ KMP_DEBUG_ASSERT(depth > 0);
+
+ thr_bar->depth = depth;
+ thr_bar->base_leaf_kids = (kmp_uint8)machine_hierarchy.numPerLevel[0]-1;
+ thr_bar->skip_per_level = machine_hierarchy.skipPerLevel;
+}
+
+#if KMP_AFFINITY_SUPPORTED
+
+//
+// Print the affinity mask to the character array in a pretty format.
+//
+#if KMP_USE_HWLOC
+char *
+__kmp_affinity_print_mask(char *buf, int buf_len, kmp_affin_mask_t *mask)
+{
+ int num_chars_to_write, num_chars_written;
+ char* scan;
+ KMP_ASSERT(buf_len >= 40);
+
+ // bufsize of 0 just retrieves the needed buffer size.
+ num_chars_to_write = hwloc_bitmap_list_snprintf(buf, 0, (hwloc_bitmap_t)mask);
+
+ // need '{', "xxxxxxxx...xx", '}', '\0' = num_chars_to_write + 3 bytes
+ // * num_chars_to_write returned by hwloc_bitmap_list_snprintf does not
+ // take into account the '\0' character.
+ if(hwloc_bitmap_iszero((hwloc_bitmap_t)mask)) {
+ KMP_SNPRINTF(buf, buf_len, "{<empty>}");
+ } else if(num_chars_to_write < buf_len - 3) {
+ // no problem fitting the mask into buf_len number of characters
+ buf[0] = '{';
+ // use buf_len-3 because we have the three characters: '{' '}' '\0' to add to the buffer
+ num_chars_written = hwloc_bitmap_list_snprintf(buf+1, buf_len-3, (hwloc_bitmap_t)mask);
+ buf[num_chars_written+1] = '}';
+ buf[num_chars_written+2] = '\0';
+ } else {
+ // Need to truncate the affinity mask string and add ellipsis.
+ // To do this, we first write out the '{' + str(mask)
+ buf[0] = '{';
+ hwloc_bitmap_list_snprintf(buf+1, buf_len-1, (hwloc_bitmap_t)mask);
+ // then, what we do here is go to the 7th to last character, then go backwards until we are NOT
+ // on a digit then write "...}\0". This way it is a clean ellipsis addition and we don't
+ // overwrite part of an affinity number. i.e., we avoid something like { 45, 67, 8...} and get
+ // { 45, 67,...} instead.
+ scan = buf + buf_len - 7;
+ while(*scan >= '0' && *scan <= '9' && scan >= buf)
+ scan--;
+ *(scan+1) = '.';
+ *(scan+2) = '.';
+ *(scan+3) = '.';
+ *(scan+4) = '}';
+ *(scan+5) = '\0';
+ }
+ return buf;
+}
+#else
+char *
+__kmp_affinity_print_mask(char *buf, int buf_len, kmp_affin_mask_t *mask)
+{
+ KMP_ASSERT(buf_len >= 40);
+ char *scan = buf;
+ char *end = buf + buf_len - 1;
+
+ //
+ // Find first element / check for empty set.
+ //
+ size_t i;
+ for (i = 0; i < KMP_CPU_SETSIZE; i++) {
+ if (KMP_CPU_ISSET(i, mask)) {
+ break;
+ }
+ }
+ if (i == KMP_CPU_SETSIZE) {
+ KMP_SNPRINTF(scan, end-scan+1, "{<empty>}");
+ while (*scan != '\0') scan++;
+ KMP_ASSERT(scan <= end);
+ return buf;
+ }
+
+ KMP_SNPRINTF(scan, end-scan+1, "{%ld", (long)i);
+ while (*scan != '\0') scan++;
+ i++;
+ for (; i < KMP_CPU_SETSIZE; i++) {
+ if (! KMP_CPU_ISSET(i, mask)) {
+ continue;
+ }
+
+ //
+ // Check for buffer overflow. A string of the form ",<n>" will have
+ // at most 10 characters, plus we want to leave room to print ",...}"
+ // if the set is too large to print for a total of 15 characters.
+ // We already left room for '\0' in setting end.
+ //
+ if (end - scan < 15) {
+ break;
+ }
+ KMP_SNPRINTF(scan, end-scan+1, ",%-ld", (long)i);
+ while (*scan != '\0') scan++;
+ }
+ if (i < KMP_CPU_SETSIZE) {
+ KMP_SNPRINTF(scan, end-scan+1, ",...");
+ while (*scan != '\0') scan++;
+ }
+ KMP_SNPRINTF(scan, end-scan+1, "}");
+ while (*scan != '\0') scan++;
+ KMP_ASSERT(scan <= end);
+ return buf;
+}
+#endif // KMP_USE_HWLOC
+
+
+void
+__kmp_affinity_entire_machine_mask(kmp_affin_mask_t *mask)
+{
+ KMP_CPU_ZERO(mask);
+
+# if KMP_GROUP_AFFINITY
+
+ if (__kmp_num_proc_groups > 1) {
+ int group;
+ KMP_DEBUG_ASSERT(__kmp_GetActiveProcessorCount != NULL);
+ for (group = 0; group < __kmp_num_proc_groups; group++) {
+ int i;
+ int num = __kmp_GetActiveProcessorCount(group);
+ for (i = 0; i < num; i++) {
+ KMP_CPU_SET(i + group * (CHAR_BIT * sizeof(DWORD_PTR)), mask);
+ }
+ }
+ }
+ else
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ {
+ int proc;
+ for (proc = 0; proc < __kmp_xproc; proc++) {
+ KMP_CPU_SET(proc, mask);
+ }
+ }
+}
+
+//
+// When sorting by labels, __kmp_affinity_assign_child_nums() must first be
+// called to renumber the labels from [0..n] and place them into the child_num
+// vector of the address object. This is done in case the labels used for
+// the children at one node of the hierarchy differ from those used for
+// another node at the same level. Example: suppose the machine has 2 nodes
+// with 2 packages each. The first node contains packages 601 and 602, and
+// second node contains packages 603 and 604. If we try to sort the table
+// for "scatter" affinity, the table will still be sorted 601, 602, 603, 604
+// because we are paying attention to the labels themselves, not the ordinal
+// child numbers. By using the child numbers in the sort, the result is
+// {0,0}=601, {0,1}=603, {1,0}=602, {1,1}=604.
+//
+static void
+__kmp_affinity_assign_child_nums(AddrUnsPair *address2os,
+ int numAddrs)
+{
+ KMP_DEBUG_ASSERT(numAddrs > 0);
+ int depth = address2os->first.depth;
+ unsigned *counts = (unsigned *)__kmp_allocate(depth * sizeof(unsigned));
+ unsigned *lastLabel = (unsigned *)__kmp_allocate(depth
+ * sizeof(unsigned));
+ int labCt;
+ for (labCt = 0; labCt < depth; labCt++) {
+ address2os[0].first.childNums[labCt] = counts[labCt] = 0;
+ lastLabel[labCt] = address2os[0].first.labels[labCt];
+ }
+ int i;
+ for (i = 1; i < numAddrs; i++) {
+ for (labCt = 0; labCt < depth; labCt++) {
+ if (address2os[i].first.labels[labCt] != lastLabel[labCt]) {
+ int labCt2;
+ for (labCt2 = labCt + 1; labCt2 < depth; labCt2++) {
+ counts[labCt2] = 0;
+ lastLabel[labCt2] = address2os[i].first.labels[labCt2];
+ }
+ counts[labCt]++;
+ lastLabel[labCt] = address2os[i].first.labels[labCt];
+ break;
+ }
+ }
+ for (labCt = 0; labCt < depth; labCt++) {
+ address2os[i].first.childNums[labCt] = counts[labCt];
+ }
+ for (; labCt < (int)Address::maxDepth; labCt++) {
+ address2os[i].first.childNums[labCt] = 0;
+ }
+ }
+ __kmp_free(lastLabel);
+ __kmp_free(counts);
+}
+
+
+//
+// All of the __kmp_affinity_create_*_map() routines should set
+// __kmp_affinity_masks to a vector of affinity mask objects of length
+// __kmp_affinity_num_masks, if __kmp_affinity_type != affinity_none, and
+// return the number of levels in the machine topology tree (zero if
+// __kmp_affinity_type == affinity_none).
+//
+// All of the __kmp_affinity_create_*_map() routines should set *__kmp_affin_fullMask
+// to the affinity mask for the initialization thread. They need to save and
+// restore the mask, and it could be needed later, so saving it is just an
+// optimization to avoid calling kmp_get_system_affinity() again.
+//
+kmp_affin_mask_t *__kmp_affin_fullMask = NULL;
+
+static int nCoresPerPkg, nPackages;
+static int __kmp_nThreadsPerCore;
+#ifndef KMP_DFLT_NTH_CORES
+static int __kmp_ncores;
+#endif
+static int *__kmp_pu_os_idx = NULL;
+
+//
+// __kmp_affinity_uniform_topology() doesn't work when called from
+// places which support arbitrarily many levels in the machine topology
+// map, i.e. the non-default cases in __kmp_affinity_create_cpuinfo_map()
+// __kmp_affinity_create_x2apicid_map().
+//
+inline static bool
+__kmp_affinity_uniform_topology()
+{
+ return __kmp_avail_proc == (__kmp_nThreadsPerCore * nCoresPerPkg * nPackages);
+}
+
+
+//
+// Print out the detailed machine topology map, i.e. the physical locations
+// of each OS proc.
+//
+static void
+__kmp_affinity_print_topology(AddrUnsPair *address2os, int len, int depth,
+ int pkgLevel, int coreLevel, int threadLevel)
+{
+ int proc;
+
+ KMP_INFORM(OSProcToPhysicalThreadMap, "KMP_AFFINITY");
+ for (proc = 0; proc < len; proc++) {
+ int level;
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+ for (level = 0; level < depth; level++) {
+ if (level == threadLevel) {
+ __kmp_str_buf_print(&buf, "%s ", KMP_I18N_STR(Thread));
+ }
+ else if (level == coreLevel) {
+ __kmp_str_buf_print(&buf, "%s ", KMP_I18N_STR(Core));
+ }
+ else if (level == pkgLevel) {
+ __kmp_str_buf_print(&buf, "%s ", KMP_I18N_STR(Package));
+ }
+ else if (level > pkgLevel) {
+ __kmp_str_buf_print(&buf, "%s_%d ", KMP_I18N_STR(Node),
+ level - pkgLevel - 1);
+ }
+ else {
+ __kmp_str_buf_print(&buf, "L%d ", level);
+ }
+ __kmp_str_buf_print(&buf, "%d ",
+ address2os[proc].first.labels[level]);
+ }
+ KMP_INFORM(OSProcMapToPack, "KMP_AFFINITY", address2os[proc].second,
+ buf.str);
+ __kmp_str_buf_free(&buf);
+ }
+}
+
+#if KMP_USE_HWLOC
+
+// This function removes the topology levels that are radix 1 and don't offer
+// further information about the topology. The most common example is when you
+// have one thread context per core, we don't want the extra thread context
+// level if it offers no unique labels. So they are removed.
+// return value: the new depth of address2os
+static int
+__kmp_affinity_remove_radix_one_levels(AddrUnsPair *address2os, int nActiveThreads, int depth, int* pkgLevel, int* coreLevel, int* threadLevel) {
+ int level;
+ int i;
+ int radix1_detected;
+
+ for (level = depth-1; level >= 0; --level) {
+ // Always keep the package level
+ if (level == *pkgLevel)
+ continue;
+ // Detect if this level is radix 1
+ radix1_detected = 1;
+ for (i = 1; i < nActiveThreads; ++i) {
+ if (address2os[0].first.labels[level] != address2os[i].first.labels[level]) {
+ // There are differing label values for this level so it stays
+ radix1_detected = 0;
+ break;
+ }
+ }
+ if (!radix1_detected)
+ continue;
+ // Radix 1 was detected
+ if (level == *threadLevel) {
+ // If only one thread per core, then just decrement
+ // the depth which removes the threadlevel from address2os
+ for (i = 0; i < nActiveThreads; ++i) {
+ address2os[i].first.depth--;
+ }
+ *threadLevel = -1;
+ } else if (level == *coreLevel) {
+ // For core level, we move the thread labels over if they are still
+ // valid (*threadLevel != -1), and also reduce the depth another level
+ for (i = 0; i < nActiveThreads; ++i) {
+ if (*threadLevel != -1) {
+ address2os[i].first.labels[*coreLevel] = address2os[i].first.labels[*threadLevel];
+ }
+ address2os[i].first.depth--;
+ }
+ *coreLevel = -1;
+ }
+ }
+ return address2os[0].first.depth;
+}
+
+// Returns the number of objects of type 'type' below 'obj' within the topology tree structure.
+// e.g., if obj is a HWLOC_OBJ_SOCKET object, and type is HWLOC_OBJ_PU, then
+// this will return the number of PU's under the SOCKET object.
+static int
+__kmp_hwloc_get_nobjs_under_obj(hwloc_obj_t obj, hwloc_obj_type_t type) {
+ int retval = 0;
+ hwloc_obj_t first;
+ for(first = hwloc_get_obj_below_by_type(__kmp_hwloc_topology, obj->type, obj->logical_index, type, 0);
+ first != NULL && hwloc_get_ancestor_obj_by_type(__kmp_hwloc_topology, obj->type, first) == obj;
+ first = hwloc_get_next_obj_by_type(__kmp_hwloc_topology, first->type, first))
+ {
+ ++retval;
+ }
+ return retval;
+}
+
+static int
+__kmp_affinity_create_hwloc_map(AddrUnsPair **address2os,
+ kmp_i18n_id_t *const msg_id)
+{
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // Save the affinity mask for the current thread.
+ //
+ kmp_affin_mask_t *oldMask;
+ KMP_CPU_ALLOC(oldMask);
+ __kmp_get_system_affinity(oldMask, TRUE);
+
+ int depth = 3;
+ int pkgLevel = 0;
+ int coreLevel = 1;
+ int threadLevel = 2;
+
+ if (! KMP_AFFINITY_CAPABLE())
+ {
+ //
+ // Hack to try and infer the machine topology using only the data
+ // available from cpuid on the current thread, and __kmp_xproc.
+ //
+ KMP_ASSERT(__kmp_affinity_type == affinity_none);
+
+ nCoresPerPkg = __kmp_hwloc_get_nobjs_under_obj(hwloc_get_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_SOCKET, 0), HWLOC_OBJ_CORE);
+ __kmp_nThreadsPerCore = __kmp_hwloc_get_nobjs_under_obj(hwloc_get_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_CORE, 0), HWLOC_OBJ_PU);
+ __kmp_ncores = __kmp_xproc / __kmp_nThreadsPerCore;
+ nPackages = (__kmp_xproc + nCoresPerPkg - 1) / nCoresPerPkg;
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffNotCapableUseLocCpuidL11, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (__kmp_affinity_uniform_topology()) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Allocate the data structure to be returned.
+ //
+ AddrUnsPair *retval = (AddrUnsPair *)__kmp_allocate(sizeof(AddrUnsPair) * __kmp_avail_proc);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+
+ //
+ // When affinity is off, this routine will still be called to set
+ // __kmp_ncores, as well as __kmp_nThreadsPerCore,
+ // nCoresPerPkg, & nPackages. Make sure all these vars are set
+ // correctly, and return if affinity is not enabled.
+ //
+
+ hwloc_obj_t pu;
+ hwloc_obj_t core;
+ hwloc_obj_t socket;
+ int nActiveThreads = 0;
+ int socket_identifier = 0;
+ // re-calculate globals to count only accessible resources
+ __kmp_ncores = nPackages = nCoresPerPkg = __kmp_nThreadsPerCore = 0;
+ for(socket = hwloc_get_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_SOCKET, 0);
+ socket != NULL;
+ socket = hwloc_get_next_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_SOCKET, socket),
+ socket_identifier++)
+ {
+ int core_identifier = 0;
+ int num_active_cores = 0;
+ for(core = hwloc_get_obj_below_by_type(__kmp_hwloc_topology, socket->type, socket->logical_index, HWLOC_OBJ_CORE, 0);
+ core != NULL && hwloc_get_ancestor_obj_by_type(__kmp_hwloc_topology, socket->type, core) == socket;
+ core = hwloc_get_next_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_CORE, core),
+ core_identifier++)
+ {
+ int pu_identifier = 0;
+ int num_active_threads = 0;
+ for(pu = hwloc_get_obj_below_by_type(__kmp_hwloc_topology, core->type, core->logical_index, HWLOC_OBJ_PU, 0);
+ pu != NULL && hwloc_get_ancestor_obj_by_type(__kmp_hwloc_topology, core->type, pu) == core;
+ pu = hwloc_get_next_obj_by_type(__kmp_hwloc_topology, HWLOC_OBJ_PU, pu),
+ pu_identifier++)
+ {
+ Address addr(3);
+ if(! KMP_CPU_ISSET(pu->os_index, __kmp_affin_fullMask))
+ continue; // skip inactive (inaccessible) unit
+ KA_TRACE(20, ("Hwloc inserting %d (%d) %d (%d) %d (%d) into address2os\n",
+ socket->os_index, socket->logical_index, core->os_index, core->logical_index, pu->os_index,pu->logical_index));
+ addr.labels[0] = socket_identifier; // package
+ addr.labels[1] = core_identifier; // core
+ addr.labels[2] = pu_identifier; // pu
+ retval[nActiveThreads] = AddrUnsPair(addr, pu->os_index);
+ __kmp_pu_os_idx[nActiveThreads] = pu->os_index; // keep os index for each active pu
+ nActiveThreads++;
+ ++num_active_threads; // count active threads per core
+ }
+ if (num_active_threads) { // were there any active threads on the core?
+ ++__kmp_ncores; // count total active cores
+ ++num_active_cores; // count active cores per socket
+ if (num_active_threads > __kmp_nThreadsPerCore)
+ __kmp_nThreadsPerCore = num_active_threads; // calc maximum
+ }
+ }
+ if (num_active_cores) { // were there any active cores on the socket?
+ ++nPackages; // count total active packages
+ if (num_active_cores > nCoresPerPkg)
+ nCoresPerPkg = num_active_cores; // calc maximum
+ }
+ }
+
+ //
+ // If there's only one thread context to bind to, return now.
+ //
+ KMP_DEBUG_ASSERT(nActiveThreads == __kmp_avail_proc);
+ KMP_ASSERT(nActiveThreads > 0);
+ if (nActiveThreads == 1) {
+ __kmp_ncores = nPackages = 1;
+ __kmp_nThreadsPerCore = nCoresPerPkg = 1;
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUsingHwloc, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(retval);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Form an Address object which only includes the package level.
+ //
+ Address addr(1);
+ addr.labels[0] = retval[0].first.labels[pkgLevel];
+ retval[0].first = addr;
+
+ if (__kmp_affinity_gran_levels < 0) {
+ __kmp_affinity_gran_levels = 0;
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(retval, 1, 1, 0, -1, -1);
+ }
+
+ *address2os = retval;
+ KMP_CPU_FREE(oldMask);
+ return 1;
+ }
+
+ //
+ // Sort the table by physical Id.
+ //
+ qsort(retval, nActiveThreads, sizeof(*retval), __kmp_affinity_cmp_Address_labels);
+
+ //
+ // Check to see if the machine topology is uniform
+ //
+ unsigned uniform = (nPackages * nCoresPerPkg * __kmp_nThreadsPerCore == nActiveThreads);
+
+ //
+ // Print the machine topology summary.
+ //
+ if (__kmp_affinity_verbose) {
+ char mask[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(mask, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUsingHwloc, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", mask);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", mask);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (uniform) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+
+ __kmp_str_buf_print(&buf, "%d", nPackages);
+ //for (level = 1; level <= pkgLevel; level++) {
+ // __kmp_str_buf_print(&buf, " x %d", maxCt[level]);
+ // }
+ KMP_INFORM(TopologyExtra, "KMP_AFFINITY", buf.str, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+
+ __kmp_str_buf_free(&buf);
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(retval);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Find any levels with radiix 1, and remove them from the map
+ // (except for the package level).
+ //
+ depth = __kmp_affinity_remove_radix_one_levels(retval, nActiveThreads, depth, &pkgLevel, &coreLevel, &threadLevel);
+
+ if (__kmp_affinity_gran_levels < 0) {
+ //
+ // Set the granularity level based on what levels are modeled
+ // in the machine topology map.
+ //
+ __kmp_affinity_gran_levels = 0;
+ if ((threadLevel >= 0) && (__kmp_affinity_gran > affinity_gran_thread)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if ((coreLevel >= 0) && (__kmp_affinity_gran > affinity_gran_core)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if (__kmp_affinity_gran > affinity_gran_package) {
+ __kmp_affinity_gran_levels++;
+ }
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(retval, nActiveThreads, depth, pkgLevel,
+ coreLevel, threadLevel);
+ }
+
+ KMP_CPU_FREE(oldMask);
+ *address2os = retval;
+ return depth;
+}
+#endif // KMP_USE_HWLOC
+
+//
+// If we don't know how to retrieve the machine's processor topology, or
+// encounter an error in doing so, this routine is called to form a "flat"
+// mapping of os thread id's <-> processor id's.
+//
+static int
+__kmp_affinity_create_flat_map(AddrUnsPair **address2os,
+ kmp_i18n_id_t *const msg_id)
+{
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // Even if __kmp_affinity_type == affinity_none, this routine might still
+ // called to set __kmp_ncores, as well as
+ // __kmp_nThreadsPerCore, nCoresPerPkg, & nPackages.
+ //
+ if (! KMP_AFFINITY_CAPABLE()) {
+ KMP_ASSERT(__kmp_affinity_type == affinity_none);
+ __kmp_ncores = nPackages = __kmp_xproc;
+ __kmp_nThreadsPerCore = nCoresPerPkg = 1;
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffFlatTopology, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+ return 0;
+ }
+
+ //
+ // When affinity is off, this routine will still be called to set
+ // __kmp_ncores, as well as __kmp_nThreadsPerCore,
+ // nCoresPerPkg, & nPackages. Make sure all these vars are set
+ // correctly, and return now if affinity is not enabled.
+ //
+ __kmp_ncores = nPackages = __kmp_avail_proc;
+ __kmp_nThreadsPerCore = nCoresPerPkg = 1;
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, __kmp_affin_fullMask);
+
+ KMP_INFORM(AffCapableUseFlat, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+ KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+ if (__kmp_affinity_type == affinity_none) {
+ int avail_ct = 0;
+ unsigned int i;
+ KMP_CPU_SET_ITERATE(i, __kmp_affin_fullMask) {
+ if (! KMP_CPU_ISSET(i, __kmp_affin_fullMask))
+ continue;
+ __kmp_pu_os_idx[avail_ct++] = i; // suppose indices are flat
+ }
+ return 0;
+ }
+
+ //
+ // Contruct the data structure to be returned.
+ //
+ *address2os = (AddrUnsPair*)
+ __kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
+ int avail_ct = 0;
+ unsigned int i;
+ KMP_CPU_SET_ITERATE(i, __kmp_affin_fullMask) {
+ //
+ // Skip this proc if it is not included in the machine model.
+ //
+ if (! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) {
+ continue;
+ }
+ __kmp_pu_os_idx[avail_ct] = i; // suppose indices are flat
+ Address addr(1);
+ addr.labels[0] = i;
+ (*address2os)[avail_ct++] = AddrUnsPair(addr,i);
+ }
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(OSProcToPackage, "KMP_AFFINITY");
+ }
+
+ if (__kmp_affinity_gran_levels < 0) {
+ //
+ // Only the package level is modeled in the machine topology map,
+ // so the #levels of granularity is either 0 or 1.
+ //
+ if (__kmp_affinity_gran > affinity_gran_package) {
+ __kmp_affinity_gran_levels = 1;
+ }
+ else {
+ __kmp_affinity_gran_levels = 0;
+ }
+ }
+ return 1;
+}
+
+
+# if KMP_GROUP_AFFINITY
+
+//
+// If multiple Windows* OS processor groups exist, we can create a 2-level
+// topology map with the groups at level 0 and the individual procs at
+// level 1.
+//
+// This facilitates letting the threads float among all procs in a group,
+// if granularity=group (the default when there are multiple groups).
+//
+static int
+__kmp_affinity_create_proc_group_map(AddrUnsPair **address2os,
+ kmp_i18n_id_t *const msg_id)
+{
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // If we don't have multiple processor groups, return now.
+ // The flat mapping will be used.
+ //
+ if ((! KMP_AFFINITY_CAPABLE()) || (__kmp_get_proc_group(__kmp_affin_fullMask) >= 0)) {
+ // FIXME set *msg_id
+ return -1;
+ }
+
+ //
+ // Contruct the data structure to be returned.
+ //
+ *address2os = (AddrUnsPair*)
+ __kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
+ KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+ int avail_ct = 0;
+ int i;
+ KMP_CPU_SET_ITERATE(i, __kmp_affin_fullMask) {
+ //
+ // Skip this proc if it is not included in the machine model.
+ //
+ if (! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) {
+ continue;
+ }
+ __kmp_pu_os_idx[avail_ct] = i; // suppose indices are flat
+ Address addr(2);
+ addr.labels[0] = i / (CHAR_BIT * sizeof(DWORD_PTR));
+ addr.labels[1] = i % (CHAR_BIT * sizeof(DWORD_PTR));
+ (*address2os)[avail_ct++] = AddrUnsPair(addr,i);
+
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffOSProcToGroup, "KMP_AFFINITY", i, addr.labels[0],
+ addr.labels[1]);
+ }
+ }
+
+ if (__kmp_affinity_gran_levels < 0) {
+ if (__kmp_affinity_gran == affinity_gran_group) {
+ __kmp_affinity_gran_levels = 1;
+ }
+ else if ((__kmp_affinity_gran == affinity_gran_fine)
+ || (__kmp_affinity_gran == affinity_gran_thread)) {
+ __kmp_affinity_gran_levels = 0;
+ }
+ else {
+ const char *gran_str = NULL;
+ if (__kmp_affinity_gran == affinity_gran_core) {
+ gran_str = "core";
+ }
+ else if (__kmp_affinity_gran == affinity_gran_package) {
+ gran_str = "package";
+ }
+ else if (__kmp_affinity_gran == affinity_gran_node) {
+ gran_str = "node";
+ }
+ else {
+ KMP_ASSERT(0);
+ }
+
+ // Warning: can't use affinity granularity \"gran\" with group topology method, using "thread"
+ __kmp_affinity_gran_levels = 0;
+ }
+ }
+ return 2;
+}
+
+# endif /* KMP_GROUP_AFFINITY */
+
+
+# if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+static int
+__kmp_cpuid_mask_width(int count) {
+ int r = 0;
+
+ while((1<<r) < count)
+ ++r;
+ return r;
+}
+
+
+class apicThreadInfo {
+public:
+ unsigned osId; // param to __kmp_affinity_bind_thread
+ unsigned apicId; // from cpuid after binding
+ unsigned maxCoresPerPkg; // ""
+ unsigned maxThreadsPerPkg; // ""
+ unsigned pkgId; // inferred from above values
+ unsigned coreId; // ""
+ unsigned threadId; // ""
+};
+
+
+static int
+__kmp_affinity_cmp_apicThreadInfo_os_id(const void *a, const void *b)
+{
+ const apicThreadInfo *aa = (const apicThreadInfo *)a;
+ const apicThreadInfo *bb = (const apicThreadInfo *)b;
+ if (aa->osId < bb->osId) return -1;
+ if (aa->osId > bb->osId) return 1;
+ return 0;
+}
+
+
+static int
+__kmp_affinity_cmp_apicThreadInfo_phys_id(const void *a, const void *b)
+{
+ const apicThreadInfo *aa = (const apicThreadInfo *)a;
+ const apicThreadInfo *bb = (const apicThreadInfo *)b;
+ if (aa->pkgId < bb->pkgId) return -1;
+ if (aa->pkgId > bb->pkgId) return 1;
+ if (aa->coreId < bb->coreId) return -1;
+ if (aa->coreId > bb->coreId) return 1;
+ if (aa->threadId < bb->threadId) return -1;
+ if (aa->threadId > bb->threadId) return 1;
+ return 0;
+}
+
+
+//
+// On IA-32 architecture and Intel(R) 64 architecture, we attempt to use
+// an algorithm which cycles through the available os threads, setting
+// the current thread's affinity mask to that thread, and then retrieves
+// the Apic Id for each thread context using the cpuid instruction.
+//
+static int
+__kmp_affinity_create_apicid_map(AddrUnsPair **address2os,
+ kmp_i18n_id_t *const msg_id)
+{
+ kmp_cpuid buf;
+ int rc;
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // Check if cpuid leaf 4 is supported.
+ //
+ __kmp_x86_cpuid(0, 0, &buf);
+ if (buf.eax < 4) {
+ *msg_id = kmp_i18n_str_NoLeaf4Support;
+ return -1;
+ }
+
+ //
+ // The algorithm used starts by setting the affinity to each available
+ // thread and retrieving info from the cpuid instruction, so if we are
+ // not capable of calling __kmp_get_system_affinity() and
+ // _kmp_get_system_affinity(), then we need to do something else - use
+ // the defaults that we calculated from issuing cpuid without binding
+ // to each proc.
+ //
+ if (! KMP_AFFINITY_CAPABLE()) {
+ //
+ // Hack to try and infer the machine topology using only the data
+ // available from cpuid on the current thread, and __kmp_xproc.
+ //
+ KMP_ASSERT(__kmp_affinity_type == affinity_none);
+
+ //
+ // Get an upper bound on the number of threads per package using
+ // cpuid(1).
+ //
+ // On some OS/chps combinations where HT is supported by the chip
+ // but is disabled, this value will be 2 on a single core chip.
+ // Usually, it will be 2 if HT is enabled and 1 if HT is disabled.
+ //
+ __kmp_x86_cpuid(1, 0, &buf);
+ int maxThreadsPerPkg = (buf.ebx >> 16) & 0xff;
+ if (maxThreadsPerPkg == 0) {
+ maxThreadsPerPkg = 1;
+ }
+
+ //
+ // The num cores per pkg comes from cpuid(4).
+ // 1 must be added to the encoded value.
+ //
+ // The author of cpu_count.cpp treated this only an upper bound
+ // on the number of cores, but I haven't seen any cases where it
+ // was greater than the actual number of cores, so we will treat
+ // it as exact in this block of code.
+ //
+ // First, we need to check if cpuid(4) is supported on this chip.
+ // To see if cpuid(n) is supported, issue cpuid(0) and check if eax
+ // has the value n or greater.
+ //
+ __kmp_x86_cpuid(0, 0, &buf);
+ if (buf.eax >= 4) {
+ __kmp_x86_cpuid(4, 0, &buf);
+ nCoresPerPkg = ((buf.eax >> 26) & 0x3f) + 1;
+ }
+ else {
+ nCoresPerPkg = 1;
+ }
+
+ //
+ // There is no way to reliably tell if HT is enabled without issuing
+ // the cpuid instruction from every thread, can correlating the cpuid
+ // info, so if the machine is not affinity capable, we assume that HT
+ // is off. We have seen quite a few machines where maxThreadsPerPkg
+ // is 2, yet the machine does not support HT.
+ //
+ // - Older OSes are usually found on machines with older chips, which
+ // do not support HT.
+ //
+ // - The performance penalty for mistakenly identifying a machine as
+ // HT when it isn't (which results in blocktime being incorrecly set
+ // to 0) is greater than the penalty when for mistakenly identifying
+ // a machine as being 1 thread/core when it is really HT enabled
+ // (which results in blocktime being incorrectly set to a positive
+ // value).
+ //
+ __kmp_ncores = __kmp_xproc;
+ nPackages = (__kmp_xproc + nCoresPerPkg - 1) / nCoresPerPkg;
+ __kmp_nThreadsPerCore = 1;
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffNotCapableUseLocCpuid, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (__kmp_affinity_uniform_topology()) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+ return 0;
+ }
+
+ //
+ //
+ // From here on, we can assume that it is safe to call
+ // __kmp_get_system_affinity() and __kmp_set_system_affinity(),
+ // even if __kmp_affinity_type = affinity_none.
+ //
+
+ //
+ // Save the affinity mask for the current thread.
+ //
+ kmp_affin_mask_t *oldMask;
+ KMP_CPU_ALLOC(oldMask);
+ KMP_ASSERT(oldMask != NULL);
+ __kmp_get_system_affinity(oldMask, TRUE);
+
+ //
+ // Run through each of the available contexts, binding the current thread
+ // to it, and obtaining the pertinent information using the cpuid instr.
+ //
+ // The relevant information is:
+ //
+ // Apic Id: Bits 24:31 of ebx after issuing cpuid(1) - each thread context
+ // has a uniqie Apic Id, which is of the form pkg# : core# : thread#.
+ //
+ // Max Threads Per Pkg: Bits 16:23 of ebx after issuing cpuid(1). The
+ // value of this field determines the width of the core# + thread#
+ // fields in the Apic Id. It is also an upper bound on the number
+ // of threads per package, but it has been verified that situations
+ // happen were it is not exact. In particular, on certain OS/chip
+ // combinations where Intel(R) Hyper-Threading Technology is supported
+ // by the chip but has
+ // been disabled, the value of this field will be 2 (for a single core
+ // chip). On other OS/chip combinations supporting
+ // Intel(R) Hyper-Threading Technology, the value of
+ // this field will be 1 when Intel(R) Hyper-Threading Technology is
+ // disabled and 2 when it is enabled.
+ //
+ // Max Cores Per Pkg: Bits 26:31 of eax after issuing cpuid(4). The
+ // value of this field (+1) determines the width of the core# field in
+ // the Apic Id. The comments in "cpucount.cpp" say that this value is
+ // an upper bound, but the IA-32 architecture manual says that it is
+ // exactly the number of cores per package, and I haven't seen any
+ // case where it wasn't.
+ //
+ // From this information, deduce the package Id, core Id, and thread Id,
+ // and set the corresponding fields in the apicThreadInfo struct.
+ //
+ unsigned i;
+ apicThreadInfo *threadInfo = (apicThreadInfo *)__kmp_allocate(
+ __kmp_avail_proc * sizeof(apicThreadInfo));
+ unsigned nApics = 0;
+ KMP_CPU_SET_ITERATE(i, __kmp_affin_fullMask) {
+ //
+ // Skip this proc if it is not included in the machine model.
+ //
+ if (! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) {
+ continue;
+ }
+ KMP_DEBUG_ASSERT((int)nApics < __kmp_avail_proc);
+
+ __kmp_affinity_bind_thread(i);
+ threadInfo[nApics].osId = i;
+
+ //
+ // The apic id and max threads per pkg come from cpuid(1).
+ //
+ __kmp_x86_cpuid(1, 0, &buf);
+ if (! (buf.edx >> 9) & 1) {
+ __kmp_set_system_affinity(oldMask, TRUE);
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_ApicNotPresent;
+ return -1;
+ }
+ threadInfo[nApics].apicId = (buf.ebx >> 24) & 0xff;
+ threadInfo[nApics].maxThreadsPerPkg = (buf.ebx >> 16) & 0xff;
+ if (threadInfo[nApics].maxThreadsPerPkg == 0) {
+ threadInfo[nApics].maxThreadsPerPkg = 1;
+ }
+
+ //
+ // Max cores per pkg comes from cpuid(4).
+ // 1 must be added to the encoded value.
+ //
+ // First, we need to check if cpuid(4) is supported on this chip.
+ // To see if cpuid(n) is supported, issue cpuid(0) and check if eax
+ // has the value n or greater.
+ //
+ __kmp_x86_cpuid(0, 0, &buf);
+ if (buf.eax >= 4) {
+ __kmp_x86_cpuid(4, 0, &buf);
+ threadInfo[nApics].maxCoresPerPkg = ((buf.eax >> 26) & 0x3f) + 1;
+ }
+ else {
+ threadInfo[nApics].maxCoresPerPkg = 1;
+ }
+
+ //
+ // Infer the pkgId / coreId / threadId using only the info
+ // obtained locally.
+ //
+ int widthCT = __kmp_cpuid_mask_width(
+ threadInfo[nApics].maxThreadsPerPkg);
+ threadInfo[nApics].pkgId = threadInfo[nApics].apicId >> widthCT;
+
+ int widthC = __kmp_cpuid_mask_width(
+ threadInfo[nApics].maxCoresPerPkg);
+ int widthT = widthCT - widthC;
+ if (widthT < 0) {
+ //
+ // I've never seen this one happen, but I suppose it could, if
+ // the cpuid instruction on a chip was really screwed up.
+ // Make sure to restore the affinity mask before the tail call.
+ //
+ __kmp_set_system_affinity(oldMask, TRUE);
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+
+ int maskC = (1 << widthC) - 1;
+ threadInfo[nApics].coreId = (threadInfo[nApics].apicId >> widthT)
+ &maskC;
+
+ int maskT = (1 << widthT) - 1;
+ threadInfo[nApics].threadId = threadInfo[nApics].apicId &maskT;
+
+ nApics++;
+ }
+
+ //
+ // We've collected all the info we need.
+ // Restore the old affinity mask for this thread.
+ //
+ __kmp_set_system_affinity(oldMask, TRUE);
+
+ //
+ // If there's only one thread context to bind to, form an Address object
+ // with depth 1 and return immediately (or, if affinity is off, set
+ // address2os to NULL and return).
+ //
+ // If it is configured to omit the package level when there is only a
+ // single package, the logic at the end of this routine won't work if
+ // there is only a single thread - it would try to form an Address
+ // object with depth 0.
+ //
+ KMP_ASSERT(nApics > 0);
+ if (nApics == 1) {
+ __kmp_ncores = nPackages = 1;
+ __kmp_nThreadsPerCore = nCoresPerPkg = 1;
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUseGlobCpuid, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ *address2os = (AddrUnsPair*)__kmp_allocate(sizeof(AddrUnsPair));
+ Address addr(1);
+ addr.labels[0] = threadInfo[0].pkgId;
+ (*address2os)[0] = AddrUnsPair(addr, threadInfo[0].osId);
+
+ if (__kmp_affinity_gran_levels < 0) {
+ __kmp_affinity_gran_levels = 0;
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(*address2os, 1, 1, 0, -1, -1);
+ }
+
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ return 1;
+ }
+
+ //
+ // Sort the threadInfo table by physical Id.
+ //
+ qsort(threadInfo, nApics, sizeof(*threadInfo),
+ __kmp_affinity_cmp_apicThreadInfo_phys_id);
+
+ //
+ // The table is now sorted by pkgId / coreId / threadId, but we really
+ // don't know the radix of any of the fields. pkgId's may be sparsely
+ // assigned among the chips on a system. Although coreId's are usually
+ // assigned [0 .. coresPerPkg-1] and threadId's are usually assigned
+ // [0..threadsPerCore-1], we don't want to make any such assumptions.
+ //
+ // For that matter, we don't know what coresPerPkg and threadsPerCore
+ // (or the total # packages) are at this point - we want to determine
+ // that now. We only have an upper bound on the first two figures.
+ //
+ // We also perform a consistency check at this point: the values returned
+ // by the cpuid instruction for any thread bound to a given package had
+ // better return the same info for maxThreadsPerPkg and maxCoresPerPkg.
+ //
+ nPackages = 1;
+ nCoresPerPkg = 1;
+ __kmp_nThreadsPerCore = 1;
+ unsigned nCores = 1;
+
+ unsigned pkgCt = 1; // to determine radii
+ unsigned lastPkgId = threadInfo[0].pkgId;
+ unsigned coreCt = 1;
+ unsigned lastCoreId = threadInfo[0].coreId;
+ unsigned threadCt = 1;
+ unsigned lastThreadId = threadInfo[0].threadId;
+
+ // intra-pkg consist checks
+ unsigned prevMaxCoresPerPkg = threadInfo[0].maxCoresPerPkg;
+ unsigned prevMaxThreadsPerPkg = threadInfo[0].maxThreadsPerPkg;
+
+ for (i = 1; i < nApics; i++) {
+ if (threadInfo[i].pkgId != lastPkgId) {
+ nCores++;
+ pkgCt++;
+ lastPkgId = threadInfo[i].pkgId;
+ if ((int)coreCt > nCoresPerPkg) nCoresPerPkg = coreCt;
+ coreCt = 1;
+ lastCoreId = threadInfo[i].coreId;
+ if ((int)threadCt > __kmp_nThreadsPerCore) __kmp_nThreadsPerCore = threadCt;
+ threadCt = 1;
+ lastThreadId = threadInfo[i].threadId;
+
+ //
+ // This is a different package, so go on to the next iteration
+ // without doing any consistency checks. Reset the consistency
+ // check vars, though.
+ //
+ prevMaxCoresPerPkg = threadInfo[i].maxCoresPerPkg;
+ prevMaxThreadsPerPkg = threadInfo[i].maxThreadsPerPkg;
+ continue;
+ }
+
+ if (threadInfo[i].coreId != lastCoreId) {
+ nCores++;
+ coreCt++;
+ lastCoreId = threadInfo[i].coreId;
+ if ((int)threadCt > __kmp_nThreadsPerCore) __kmp_nThreadsPerCore = threadCt;
+ threadCt = 1;
+ lastThreadId = threadInfo[i].threadId;
+ }
+ else if (threadInfo[i].threadId != lastThreadId) {
+ threadCt++;
+ lastThreadId = threadInfo[i].threadId;
+ }
+ else {
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_LegacyApicIDsNotUnique;
+ return -1;
+ }
+
+ //
+ // Check to make certain that the maxCoresPerPkg and maxThreadsPerPkg
+ // fields agree between all the threads bounds to a given package.
+ //
+ if ((prevMaxCoresPerPkg != threadInfo[i].maxCoresPerPkg)
+ || (prevMaxThreadsPerPkg != threadInfo[i].maxThreadsPerPkg)) {
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_InconsistentCpuidInfo;
+ return -1;
+ }
+ }
+ nPackages = pkgCt;
+ if ((int)coreCt > nCoresPerPkg) nCoresPerPkg = coreCt;
+ if ((int)threadCt > __kmp_nThreadsPerCore) __kmp_nThreadsPerCore = threadCt;
+
+ //
+ // When affinity is off, this routine will still be called to set
+ // __kmp_ncores, as well as __kmp_nThreadsPerCore,
+ // nCoresPerPkg, & nPackages. Make sure all these vars are set
+ // correctly, and return now if affinity is not enabled.
+ //
+ __kmp_ncores = nCores;
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUseGlobCpuid, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (__kmp_affinity_uniform_topology()) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+
+ }
+ KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
+ KMP_DEBUG_ASSERT(nApics == __kmp_avail_proc);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+ for (i = 0; i < nApics; ++i) {
+ __kmp_pu_os_idx[i] = threadInfo[i].osId;
+ }
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Now that we've determined the number of packages, the number of cores
+ // per package, and the number of threads per core, we can construct the
+ // data structure that is to be returned.
+ //
+ int pkgLevel = 0;
+ int coreLevel = (nCoresPerPkg <= 1) ? -1 : 1;
+ int threadLevel = (__kmp_nThreadsPerCore <= 1) ? -1 : ((coreLevel >= 0) ? 2 : 1);
+ unsigned depth = (pkgLevel >= 0) + (coreLevel >= 0) + (threadLevel >= 0);
+
+ KMP_ASSERT(depth > 0);
+ *address2os = (AddrUnsPair*)__kmp_allocate(sizeof(AddrUnsPair) * nApics);
+
+ for (i = 0; i < nApics; ++i) {
+ Address addr(depth);
+ unsigned os = threadInfo[i].osId;
+ int d = 0;
+
+ if (pkgLevel >= 0) {
+ addr.labels[d++] = threadInfo[i].pkgId;
+ }
+ if (coreLevel >= 0) {
+ addr.labels[d++] = threadInfo[i].coreId;
+ }
+ if (threadLevel >= 0) {
+ addr.labels[d++] = threadInfo[i].threadId;
+ }
+ (*address2os)[i] = AddrUnsPair(addr, os);
+ }
+
+ if (__kmp_affinity_gran_levels < 0) {
+ //
+ // Set the granularity level based on what levels are modeled
+ // in the machine topology map.
+ //
+ __kmp_affinity_gran_levels = 0;
+ if ((threadLevel >= 0)
+ && (__kmp_affinity_gran > affinity_gran_thread)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if ((coreLevel >= 0) && (__kmp_affinity_gran > affinity_gran_core)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if ((pkgLevel >= 0) && (__kmp_affinity_gran > affinity_gran_package)) {
+ __kmp_affinity_gran_levels++;
+ }
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(*address2os, nApics, depth, pkgLevel,
+ coreLevel, threadLevel);
+ }
+
+ __kmp_free(threadInfo);
+ KMP_CPU_FREE(oldMask);
+ return depth;
+}
+
+
+//
+// Intel(R) microarchitecture code name Nehalem, Dunnington and later
+// architectures support a newer interface for specifying the x2APIC Ids,
+// based on cpuid leaf 11.
+//
+static int
+__kmp_affinity_create_x2apicid_map(AddrUnsPair **address2os,
+ kmp_i18n_id_t *const msg_id)
+{
+ kmp_cpuid buf;
+
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // Check to see if cpuid leaf 11 is supported.
+ //
+ __kmp_x86_cpuid(0, 0, &buf);
+ if (buf.eax < 11) {
+ *msg_id = kmp_i18n_str_NoLeaf11Support;
+ return -1;
+ }
+ __kmp_x86_cpuid(11, 0, &buf);
+ if (buf.ebx == 0) {
+ *msg_id = kmp_i18n_str_NoLeaf11Support;
+ return -1;
+ }
+
+ //
+ // Find the number of levels in the machine topology. While we're at it,
+ // get the default values for __kmp_nThreadsPerCore & nCoresPerPkg. We will
+ // try to get more accurate values later by explicitly counting them,
+ // but get reasonable defaults now, in case we return early.
+ //
+ int level;
+ int threadLevel = -1;
+ int coreLevel = -1;
+ int pkgLevel = -1;
+ __kmp_nThreadsPerCore = nCoresPerPkg = nPackages = 1;
+
+ for (level = 0;; level++) {
+ if (level > 31) {
+ //
+ // FIXME: Hack for DPD200163180
+ //
+ // If level is big then something went wrong -> exiting
+ //
+ // There could actually be 32 valid levels in the machine topology,
+ // but so far, the only machine we have seen which does not exit
+ // this loop before iteration 32 has fubar x2APIC settings.
+ //
+ // For now, just reject this case based upon loop trip count.
+ //
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+ __kmp_x86_cpuid(11, level, &buf);
+ if (buf.ebx == 0) {
+ if (pkgLevel < 0) {
+ //
+ // Will infer nPackages from __kmp_xproc
+ //
+ pkgLevel = level;
+ level++;
+ }
+ break;
+ }
+ int kind = (buf.ecx >> 8) & 0xff;
+ if (kind == 1) {
+ //
+ // SMT level
+ //
+ threadLevel = level;
+ coreLevel = -1;
+ pkgLevel = -1;
+ __kmp_nThreadsPerCore = buf.ebx & 0xff;
+ if (__kmp_nThreadsPerCore == 0) {
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+ }
+ else if (kind == 2) {
+ //
+ // core level
+ //
+ coreLevel = level;
+ pkgLevel = -1;
+ nCoresPerPkg = buf.ebx & 0xff;
+ if (nCoresPerPkg == 0) {
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+ }
+ else {
+ if (level <= 0) {
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+ if (pkgLevel >= 0) {
+ continue;
+ }
+ pkgLevel = level;
+ nPackages = buf.ebx & 0xff;
+ if (nPackages == 0) {
+ *msg_id = kmp_i18n_str_InvalidCpuidInfo;
+ return -1;
+ }
+ }
+ }
+ int depth = level;
+
+ //
+ // In the above loop, "level" was counted from the finest level (usually
+ // thread) to the coarsest. The caller expects that we will place the
+ // labels in (*address2os)[].first.labels[] in the inverse order, so
+ // we need to invert the vars saying which level means what.
+ //
+ if (threadLevel >= 0) {
+ threadLevel = depth - threadLevel - 1;
+ }
+ if (coreLevel >= 0) {
+ coreLevel = depth - coreLevel - 1;
+ }
+ KMP_DEBUG_ASSERT(pkgLevel >= 0);
+ pkgLevel = depth - pkgLevel - 1;
+
+ //
+ // The algorithm used starts by setting the affinity to each available
+ // thread and retrieving info from the cpuid instruction, so if we are
+ // not capable of calling __kmp_get_system_affinity() and
+ // _kmp_get_system_affinity(), then we need to do something else - use
+ // the defaults that we calculated from issuing cpuid without binding
+ // to each proc.
+ //
+ if (! KMP_AFFINITY_CAPABLE())
+ {
+ //
+ // Hack to try and infer the machine topology using only the data
+ // available from cpuid on the current thread, and __kmp_xproc.
+ //
+ KMP_ASSERT(__kmp_affinity_type == affinity_none);
+
+ __kmp_ncores = __kmp_xproc / __kmp_nThreadsPerCore;
+ nPackages = (__kmp_xproc + nCoresPerPkg - 1) / nCoresPerPkg;
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffNotCapableUseLocCpuidL11, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (__kmp_affinity_uniform_topology()) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+ return 0;
+ }
+
+ //
+ //
+ // From here on, we can assume that it is safe to call
+ // __kmp_get_system_affinity() and __kmp_set_system_affinity(),
+ // even if __kmp_affinity_type = affinity_none.
+ //
+
+ //
+ // Save the affinity mask for the current thread.
+ //
+ kmp_affin_mask_t *oldMask;
+ KMP_CPU_ALLOC(oldMask);
+ __kmp_get_system_affinity(oldMask, TRUE);
+
+ //
+ // Allocate the data structure to be returned.
+ //
+ AddrUnsPair *retval = (AddrUnsPair *)
+ __kmp_allocate(sizeof(AddrUnsPair) * __kmp_avail_proc);
+
+ //
+ // Run through each of the available contexts, binding the current thread
+ // to it, and obtaining the pertinent information using the cpuid instr.
+ //
+ unsigned int proc;
+ int nApics = 0;
+ KMP_CPU_SET_ITERATE(proc, __kmp_affin_fullMask) {
+ //
+ // Skip this proc if it is not included in the machine model.
+ //
+ if (! KMP_CPU_ISSET(proc, __kmp_affin_fullMask)) {
+ continue;
+ }
+ KMP_DEBUG_ASSERT(nApics < __kmp_avail_proc);
+
+ __kmp_affinity_bind_thread(proc);
+
+ //
+ // Extrach the labels for each level in the machine topology map
+ // from the Apic ID.
+ //
+ Address addr(depth);
+ int prev_shift = 0;
+
+ for (level = 0; level < depth; level++) {
+ __kmp_x86_cpuid(11, level, &buf);
+ unsigned apicId = buf.edx;
+ if (buf.ebx == 0) {
+ if (level != depth - 1) {
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_InconsistentCpuidInfo;
+ return -1;
+ }
+ addr.labels[depth - level - 1] = apicId >> prev_shift;
+ level++;
+ break;
+ }
+ int shift = buf.eax & 0x1f;
+ int mask = (1 << shift) - 1;
+ addr.labels[depth - level - 1] = (apicId & mask) >> prev_shift;
+ prev_shift = shift;
+ }
+ if (level != depth) {
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_InconsistentCpuidInfo;
+ return -1;
+ }
+
+ retval[nApics] = AddrUnsPair(addr, proc);
+ nApics++;
+ }
+
+ //
+ // We've collected all the info we need.
+ // Restore the old affinity mask for this thread.
+ //
+ __kmp_set_system_affinity(oldMask, TRUE);
+
+ //
+ // If there's only one thread context to bind to, return now.
+ //
+ KMP_ASSERT(nApics > 0);
+ if (nApics == 1) {
+ __kmp_ncores = nPackages = 1;
+ __kmp_nThreadsPerCore = nCoresPerPkg = 1;
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUseGlobCpuidL11, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ KMP_INFORM(Topology, "KMP_AFFINITY", nPackages, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(retval);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Form an Address object which only includes the package level.
+ //
+ Address addr(1);
+ addr.labels[0] = retval[0].first.labels[pkgLevel];
+ retval[0].first = addr;
+
+ if (__kmp_affinity_gran_levels < 0) {
+ __kmp_affinity_gran_levels = 0;
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(retval, 1, 1, 0, -1, -1);
+ }
+
+ *address2os = retval;
+ KMP_CPU_FREE(oldMask);
+ return 1;
+ }
+
+ //
+ // Sort the table by physical Id.
+ //
+ qsort(retval, nApics, sizeof(*retval), __kmp_affinity_cmp_Address_labels);
+
+ //
+ // Find the radix at each of the levels.
+ //
+ unsigned *totals = (unsigned *)__kmp_allocate(depth * sizeof(unsigned));
+ unsigned *counts = (unsigned *)__kmp_allocate(depth * sizeof(unsigned));
+ unsigned *maxCt = (unsigned *)__kmp_allocate(depth * sizeof(unsigned));
+ unsigned *last = (unsigned *)__kmp_allocate(depth * sizeof(unsigned));
+ for (level = 0; level < depth; level++) {
+ totals[level] = 1;
+ maxCt[level] = 1;
+ counts[level] = 1;
+ last[level] = retval[0].first.labels[level];
+ }
+
+ //
+ // From here on, the iteration variable "level" runs from the finest
+ // level to the coarsest, i.e. we iterate forward through
+ // (*address2os)[].first.labels[] - in the previous loops, we iterated
+ // backwards.
+ //
+ for (proc = 1; (int)proc < nApics; proc++) {
+ int level;
+ for (level = 0; level < depth; level++) {
+ if (retval[proc].first.labels[level] != last[level]) {
+ int j;
+ for (j = level + 1; j < depth; j++) {
+ totals[j]++;
+ counts[j] = 1;
+ // The line below causes printing incorrect topology information
+ // in case the max value for some level (maxCt[level]) is encountered earlier than
+ // some less value while going through the array.
+ // For example, let pkg0 has 4 cores and pkg1 has 2 cores. Then maxCt[1] == 2
+ // whereas it must be 4.
+ // TODO!!! Check if it can be commented safely
+ //maxCt[j] = 1;
+ last[j] = retval[proc].first.labels[j];
+ }
+ totals[level]++;
+ counts[level]++;
+ if (counts[level] > maxCt[level]) {
+ maxCt[level] = counts[level];
+ }
+ last[level] = retval[proc].first.labels[level];
+ break;
+ }
+ else if (level == depth - 1) {
+ __kmp_free(last);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ __kmp_free(totals);
+ __kmp_free(retval);
+ KMP_CPU_FREE(oldMask);
+ *msg_id = kmp_i18n_str_x2ApicIDsNotUnique;
+ return -1;
+ }
+ }
+ }
+
+ //
+ // When affinity is off, this routine will still be called to set
+ // __kmp_ncores, as well as __kmp_nThreadsPerCore,
+ // nCoresPerPkg, & nPackages. Make sure all these vars are set
+ // correctly, and return if affinity is not enabled.
+ //
+ if (threadLevel >= 0) {
+ __kmp_nThreadsPerCore = maxCt[threadLevel];
+ }
+ else {
+ __kmp_nThreadsPerCore = 1;
+ }
+ nPackages = totals[pkgLevel];
+
+ if (coreLevel >= 0) {
+ __kmp_ncores = totals[coreLevel];
+ nCoresPerPkg = maxCt[coreLevel];
+ }
+ else {
+ __kmp_ncores = nPackages;
+ nCoresPerPkg = 1;
+ }
+
+ //
+ // Check to see if the machine topology is uniform
+ //
+ unsigned prod = maxCt[0];
+ for (level = 1; level < depth; level++) {
+ prod *= maxCt[level];
+ }
+ bool uniform = (prod == totals[level - 1]);
+
+ //
+ // Print the machine topology summary.
+ //
+ if (__kmp_affinity_verbose) {
+ char mask[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(mask, KMP_AFFIN_MASK_PRINT_LEN, oldMask);
+
+ KMP_INFORM(AffUseGlobCpuidL11, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", mask);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", mask);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (uniform) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+
+ __kmp_str_buf_print(&buf, "%d", totals[0]);
+ for (level = 1; level <= pkgLevel; level++) {
+ __kmp_str_buf_print(&buf, " x %d", maxCt[level]);
+ }
+ KMP_INFORM(TopologyExtra, "KMP_AFFINITY", buf.str, nCoresPerPkg,
+ __kmp_nThreadsPerCore, __kmp_ncores);
+
+ __kmp_str_buf_free(&buf);
+ }
+ KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
+ KMP_DEBUG_ASSERT(nApics == __kmp_avail_proc);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+ for (proc = 0; (int)proc < nApics; ++proc) {
+ __kmp_pu_os_idx[proc] = retval[proc].second;
+ }
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(last);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ __kmp_free(totals);
+ __kmp_free(retval);
+ KMP_CPU_FREE(oldMask);
+ return 0;
+ }
+
+ //
+ // Find any levels with radiix 1, and remove them from the map
+ // (except for the package level).
+ //
+ int new_depth = 0;
+ for (level = 0; level < depth; level++) {
+ if ((maxCt[level] == 1) && (level != pkgLevel)) {
+ continue;
+ }
+ new_depth++;
+ }
+
+ //
+ // If we are removing any levels, allocate a new vector to return,
+ // and copy the relevant information to it.
+ //
+ if (new_depth != depth) {
+ AddrUnsPair *new_retval = (AddrUnsPair *)__kmp_allocate(
+ sizeof(AddrUnsPair) * nApics);
+ for (proc = 0; (int)proc < nApics; proc++) {
+ Address addr(new_depth);
+ new_retval[proc] = AddrUnsPair(addr, retval[proc].second);
+ }
+ int new_level = 0;
+ int newPkgLevel = -1;
+ int newCoreLevel = -1;
+ int newThreadLevel = -1;
+ int i;
+ for (level = 0; level < depth; level++) {
+ if ((maxCt[level] == 1)
+ && (level != pkgLevel)) {
+ //
+ // Remove this level. Never remove the package level
+ //
+ continue;
+ }
+ if (level == pkgLevel) {
+ newPkgLevel = level;
+ }
+ if (level == coreLevel) {
+ newCoreLevel = level;
+ }
+ if (level == threadLevel) {
+ newThreadLevel = level;
+ }
+ for (proc = 0; (int)proc < nApics; proc++) {
+ new_retval[proc].first.labels[new_level]
+ = retval[proc].first.labels[level];
+ }
+ new_level++;
+ }
+
+ __kmp_free(retval);
+ retval = new_retval;
+ depth = new_depth;
+ pkgLevel = newPkgLevel;
+ coreLevel = newCoreLevel;
+ threadLevel = newThreadLevel;
+ }
+
+ if (__kmp_affinity_gran_levels < 0) {
+ //
+ // Set the granularity level based on what levels are modeled
+ // in the machine topology map.
+ //
+ __kmp_affinity_gran_levels = 0;
+ if ((threadLevel >= 0) && (__kmp_affinity_gran > affinity_gran_thread)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if ((coreLevel >= 0) && (__kmp_affinity_gran > affinity_gran_core)) {
+ __kmp_affinity_gran_levels++;
+ }
+ if (__kmp_affinity_gran > affinity_gran_package) {
+ __kmp_affinity_gran_levels++;
+ }
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(retval, nApics, depth, pkgLevel,
+ coreLevel, threadLevel);
+ }
+
+ __kmp_free(last);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ __kmp_free(totals);
+ KMP_CPU_FREE(oldMask);
+ *address2os = retval;
+ return depth;
+}
+
+
+# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+
+#define osIdIndex 0
+#define threadIdIndex 1
+#define coreIdIndex 2
+#define pkgIdIndex 3
+#define nodeIdIndex 4
+
+typedef unsigned *ProcCpuInfo;
+static unsigned maxIndex = pkgIdIndex;
+
+
+static int
+__kmp_affinity_cmp_ProcCpuInfo_os_id(const void *a, const void *b)
+{
+ const unsigned *aa = (const unsigned *)a;
+ const unsigned *bb = (const unsigned *)b;
+ if (aa[osIdIndex] < bb[osIdIndex]) return -1;
+ if (aa[osIdIndex] > bb[osIdIndex]) return 1;
+ return 0;
+};
+
+
+static int
+__kmp_affinity_cmp_ProcCpuInfo_phys_id(const void *a, const void *b)
+{
+ unsigned i;
+ const unsigned *aa = *((const unsigned **)a);
+ const unsigned *bb = *((const unsigned **)b);
+ for (i = maxIndex; ; i--) {
+ if (aa[i] < bb[i]) return -1;
+ if (aa[i] > bb[i]) return 1;
+ if (i == osIdIndex) break;
+ }
+ return 0;
+}
+
+
+//
+// Parse /proc/cpuinfo (or an alternate file in the same format) to obtain the
+// affinity map.
+//
+static int
+__kmp_affinity_create_cpuinfo_map(AddrUnsPair **address2os, int *line,
+ kmp_i18n_id_t *const msg_id, FILE *f)
+{
+ *address2os = NULL;
+ *msg_id = kmp_i18n_null;
+
+ //
+ // Scan of the file, and count the number of "processor" (osId) fields,
+ // and find the highest value of <n> for a node_<n> field.
+ //
+ char buf[256];
+ unsigned num_records = 0;
+ while (! feof(f)) {
+ buf[sizeof(buf) - 1] = 1;
+ if (! fgets(buf, sizeof(buf), f)) {
+ //
+ // Read errors presumably because of EOF
+ //
+ break;
+ }
+
+ char s1[] = "processor";
+ if (strncmp(buf, s1, sizeof(s1) - 1) == 0) {
+ num_records++;
+ continue;
+ }
+
+ //
+ // FIXME - this will match "node_<n> <garbage>"
+ //
+ unsigned level;
+ if (KMP_SSCANF(buf, "node_%d id", &level) == 1) {
+ if (nodeIdIndex + level >= maxIndex) {
+ maxIndex = nodeIdIndex + level;
+ }
+ continue;
+ }
+ }
+
+ //
+ // Check for empty file / no valid processor records, or too many.
+ // The number of records can't exceed the number of valid bits in the
+ // affinity mask.
+ //
+ if (num_records == 0) {
+ *line = 0;
+ *msg_id = kmp_i18n_str_NoProcRecords;
+ return -1;
+ }
+ if (num_records > (unsigned)__kmp_xproc) {
+ *line = 0;
+ *msg_id = kmp_i18n_str_TooManyProcRecords;
+ return -1;
+ }
+
+ //
+ // Set the file pointer back to the begginning, so that we can scan the
+ // file again, this time performing a full parse of the data.
+ // Allocate a vector of ProcCpuInfo object, where we will place the data.
+ // Adding an extra element at the end allows us to remove a lot of extra
+ // checks for termination conditions.
+ //
+ if (fseek(f, 0, SEEK_SET) != 0) {
+ *line = 0;
+ *msg_id = kmp_i18n_str_CantRewindCpuinfo;
+ return -1;
+ }
+
+ //
+ // Allocate the array of records to store the proc info in. The dummy
+ // element at the end makes the logic in filling them out easier to code.
+ //
+ unsigned **threadInfo = (unsigned **)__kmp_allocate((num_records + 1)
+ * sizeof(unsigned *));
+ unsigned i;
+ for (i = 0; i <= num_records; i++) {
+ threadInfo[i] = (unsigned *)__kmp_allocate((maxIndex + 1)
+ * sizeof(unsigned));
+ }
+
+#define CLEANUP_THREAD_INFO \
+ for (i = 0; i <= num_records; i++) { \
+ __kmp_free(threadInfo[i]); \
+ } \
+ __kmp_free(threadInfo);
+
+ //
+ // A value of UINT_MAX means that we didn't find the field
+ //
+ unsigned __index;
+
+#define INIT_PROC_INFO(p) \
+ for (__index = 0; __index <= maxIndex; __index++) { \
+ (p)[__index] = UINT_MAX; \
+ }
+
+ for (i = 0; i <= num_records; i++) {
+ INIT_PROC_INFO(threadInfo[i]);
+ }
+
+ unsigned num_avail = 0;
+ *line = 0;
+ while (! feof(f)) {
+ //
+ // Create an inner scoping level, so that all the goto targets at the
+ // end of the loop appear in an outer scoping level. This avoids
+ // warnings about jumping past an initialization to a target in the
+ // same block.
+ //
+ {
+ buf[sizeof(buf) - 1] = 1;
+ bool long_line = false;
+ if (! fgets(buf, sizeof(buf), f)) {
+ //
+ // Read errors presumably because of EOF
+ //
+ // If there is valid data in threadInfo[num_avail], then fake
+ // a blank line in ensure that the last address gets parsed.
+ //
+ bool valid = false;
+ for (i = 0; i <= maxIndex; i++) {
+ if (threadInfo[num_avail][i] != UINT_MAX) {
+ valid = true;
+ }
+ }
+ if (! valid) {
+ break;
+ }
+ buf[0] = 0;
+ } else if (!buf[sizeof(buf) - 1]) {
+ //
+ // The line is longer than the buffer. Set a flag and don't
+ // emit an error if we were going to ignore the line, anyway.
+ //
+ long_line = true;
+
+#define CHECK_LINE \
+ if (long_line) { \
+ CLEANUP_THREAD_INFO; \
+ *msg_id = kmp_i18n_str_LongLineCpuinfo; \
+ return -1; \
+ }
+ }
+ (*line)++;
+
+ char s1[] = "processor";
+ if (strncmp(buf, s1, sizeof(s1) - 1) == 0) {
+ CHECK_LINE;
+ char *p = strchr(buf + sizeof(s1) - 1, ':');
+ unsigned val;
+ if ((p == NULL) || (KMP_SSCANF(p + 1, "%u\n", &val) != 1)) goto no_val;
+ if (threadInfo[num_avail][osIdIndex] != UINT_MAX) goto dup_field;
+ threadInfo[num_avail][osIdIndex] = val;
+#if KMP_OS_LINUX && USE_SYSFS_INFO
+ char path[256];
+ KMP_SNPRINTF(path, sizeof(path),
+ "/sys/devices/system/cpu/cpu%u/topology/physical_package_id",
+ threadInfo[num_avail][osIdIndex]);
+ __kmp_read_from_file(path, "%u", &threadInfo[num_avail][pkgIdIndex]);
+
+ KMP_SNPRINTF(path, sizeof(path),
+ "/sys/devices/system/cpu/cpu%u/topology/core_id",
+ threadInfo[num_avail][osIdIndex]);
+ __kmp_read_from_file(path, "%u", &threadInfo[num_avail][coreIdIndex]);
+ continue;
+#else
+ }
+ char s2[] = "physical id";
+ if (strncmp(buf, s2, sizeof(s2) - 1) == 0) {
+ CHECK_LINE;
+ char *p = strchr(buf + sizeof(s2) - 1, ':');
+ unsigned val;
+ if ((p == NULL) || (KMP_SSCANF(p + 1, "%u\n", &val) != 1)) goto no_val;
+ if (threadInfo[num_avail][pkgIdIndex] != UINT_MAX) goto dup_field;
+ threadInfo[num_avail][pkgIdIndex] = val;
+ continue;
+ }
+ char s3[] = "core id";
+ if (strncmp(buf, s3, sizeof(s3) - 1) == 0) {
+ CHECK_LINE;
+ char *p = strchr(buf + sizeof(s3) - 1, ':');
+ unsigned val;
+ if ((p == NULL) || (KMP_SSCANF(p + 1, "%u\n", &val) != 1)) goto no_val;
+ if (threadInfo[num_avail][coreIdIndex] != UINT_MAX) goto dup_field;
+ threadInfo[num_avail][coreIdIndex] = val;
+ continue;
+#endif // KMP_OS_LINUX && USE_SYSFS_INFO
+ }
+ char s4[] = "thread id";
+ if (strncmp(buf, s4, sizeof(s4) - 1) == 0) {
+ CHECK_LINE;
+ char *p = strchr(buf + sizeof(s4) - 1, ':');
+ unsigned val;
+ if ((p == NULL) || (KMP_SSCANF(p + 1, "%u\n", &val) != 1)) goto no_val;
+ if (threadInfo[num_avail][threadIdIndex] != UINT_MAX) goto dup_field;
+ threadInfo[num_avail][threadIdIndex] = val;
+ continue;
+ }
+ unsigned level;
+ if (KMP_SSCANF(buf, "node_%d id", &level) == 1) {
+ CHECK_LINE;
+ char *p = strchr(buf + sizeof(s4) - 1, ':');
+ unsigned val;
+ if ((p == NULL) || (KMP_SSCANF(p + 1, "%u\n", &val) != 1)) goto no_val;
+ KMP_ASSERT(nodeIdIndex + level <= maxIndex);
+ if (threadInfo[num_avail][nodeIdIndex + level] != UINT_MAX) goto dup_field;
+ threadInfo[num_avail][nodeIdIndex + level] = val;
+ continue;
+ }
+
+ //
+ // We didn't recognize the leading token on the line.
+ // There are lots of leading tokens that we don't recognize -
+ // if the line isn't empty, go on to the next line.
+ //
+ if ((*buf != 0) && (*buf != '\n')) {
+ //
+ // If the line is longer than the buffer, read characters
+ // until we find a newline.
+ //
+ if (long_line) {
+ int ch;
+ while (((ch = fgetc(f)) != EOF) && (ch != '\n'));
+ }
+ continue;
+ }
+
+ //
+ // A newline has signalled the end of the processor record.
+ // Check that there aren't too many procs specified.
+ //
+ if ((int)num_avail == __kmp_xproc) {
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_TooManyEntries;
+ return -1;
+ }
+
+ //
+ // Check for missing fields. The osId field must be there, and we
+ // currently require that the physical id field is specified, also.
+ //
+ if (threadInfo[num_avail][osIdIndex] == UINT_MAX) {
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_MissingProcField;
+ return -1;
+ }
+ if (threadInfo[0][pkgIdIndex] == UINT_MAX) {
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_MissingPhysicalIDField;
+ return -1;
+ }
+
+ //
+ // Skip this proc if it is not included in the machine model.
+ //
+ if (! KMP_CPU_ISSET(threadInfo[num_avail][osIdIndex], __kmp_affin_fullMask)) {
+ INIT_PROC_INFO(threadInfo[num_avail]);
+ continue;
+ }
+
+ //
+ // We have a successful parse of this proc's info.
+ // Increment the counter, and prepare for the next proc.
+ //
+ num_avail++;
+ KMP_ASSERT(num_avail <= num_records);
+ INIT_PROC_INFO(threadInfo[num_avail]);
+ }
+ continue;
+
+ no_val:
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_MissingValCpuinfo;
+ return -1;
+
+ dup_field:
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_DuplicateFieldCpuinfo;
+ return -1;
+ }
+ *line = 0;
+
+# if KMP_MIC && REDUCE_TEAM_SIZE
+ unsigned teamSize = 0;
+# endif // KMP_MIC && REDUCE_TEAM_SIZE
+
+ // check for num_records == __kmp_xproc ???
+
+ //
+ // If there's only one thread context to bind to, form an Address object
+ // with depth 1 and return immediately (or, if affinity is off, set
+ // address2os to NULL and return).
+ //
+ // If it is configured to omit the package level when there is only a
+ // single package, the logic at the end of this routine won't work if
+ // there is only a single thread - it would try to form an Address
+ // object with depth 0.
+ //
+ KMP_ASSERT(num_avail > 0);
+ KMP_ASSERT(num_avail <= num_records);
+ if (num_avail == 1) {
+ __kmp_ncores = 1;
+ __kmp_nThreadsPerCore = nCoresPerPkg = nPackages = 1;
+ if (__kmp_affinity_verbose) {
+ if (! KMP_AFFINITY_CAPABLE()) {
+ KMP_INFORM(AffNotCapableUseCpuinfo, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ }
+ else {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ __kmp_affin_fullMask);
+ KMP_INFORM(AffCapableUseCpuinfo, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ }
+ int index;
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+ __kmp_str_buf_print(&buf, "1");
+ for (index = maxIndex - 1; index > pkgIdIndex; index--) {
+ __kmp_str_buf_print(&buf, " x 1");
+ }
+ KMP_INFORM(TopologyExtra, "KMP_AFFINITY", buf.str, 1, 1, 1);
+ __kmp_str_buf_free(&buf);
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ CLEANUP_THREAD_INFO;
+ return 0;
+ }
+
+ *address2os = (AddrUnsPair*)__kmp_allocate(sizeof(AddrUnsPair));
+ Address addr(1);
+ addr.labels[0] = threadInfo[0][pkgIdIndex];
+ (*address2os)[0] = AddrUnsPair(addr, threadInfo[0][osIdIndex]);
+
+ if (__kmp_affinity_gran_levels < 0) {
+ __kmp_affinity_gran_levels = 0;
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(*address2os, 1, 1, 0, -1, -1);
+ }
+
+ CLEANUP_THREAD_INFO;
+ return 1;
+ }
+
+ //
+ // Sort the threadInfo table by physical Id.
+ //
+ qsort(threadInfo, num_avail, sizeof(*threadInfo),
+ __kmp_affinity_cmp_ProcCpuInfo_phys_id);
+
+ //
+ // The table is now sorted by pkgId / coreId / threadId, but we really
+ // don't know the radix of any of the fields. pkgId's may be sparsely
+ // assigned among the chips on a system. Although coreId's are usually
+ // assigned [0 .. coresPerPkg-1] and threadId's are usually assigned
+ // [0..threadsPerCore-1], we don't want to make any such assumptions.
+ //
+ // For that matter, we don't know what coresPerPkg and threadsPerCore
+ // (or the total # packages) are at this point - we want to determine
+ // that now. We only have an upper bound on the first two figures.
+ //
+ unsigned *counts = (unsigned *)__kmp_allocate((maxIndex + 1)
+ * sizeof(unsigned));
+ unsigned *maxCt = (unsigned *)__kmp_allocate((maxIndex + 1)
+ * sizeof(unsigned));
+ unsigned *totals = (unsigned *)__kmp_allocate((maxIndex + 1)
+ * sizeof(unsigned));
+ unsigned *lastId = (unsigned *)__kmp_allocate((maxIndex + 1)
+ * sizeof(unsigned));
+
+ bool assign_thread_ids = false;
+ unsigned threadIdCt;
+ unsigned index;
+
+ restart_radix_check:
+ threadIdCt = 0;
+
+ //
+ // Initialize the counter arrays with data from threadInfo[0].
+ //
+ if (assign_thread_ids) {
+ if (threadInfo[0][threadIdIndex] == UINT_MAX) {
+ threadInfo[0][threadIdIndex] = threadIdCt++;
+ }
+ else if (threadIdCt <= threadInfo[0][threadIdIndex]) {
+ threadIdCt = threadInfo[0][threadIdIndex] + 1;
+ }
+ }
+ for (index = 0; index <= maxIndex; index++) {
+ counts[index] = 1;
+ maxCt[index] = 1;
+ totals[index] = 1;
+ lastId[index] = threadInfo[0][index];;
+ }
+
+ //
+ // Run through the rest of the OS procs.
+ //
+ for (i = 1; i < num_avail; i++) {
+ //
+ // Find the most significant index whose id differs
+ // from the id for the previous OS proc.
+ //
+ for (index = maxIndex; index >= threadIdIndex; index--) {
+ if (assign_thread_ids && (index == threadIdIndex)) {
+ //
+ // Auto-assign the thread id field if it wasn't specified.
+ //
+ if (threadInfo[i][threadIdIndex] == UINT_MAX) {
+ threadInfo[i][threadIdIndex] = threadIdCt++;
+ }
+
+ //
+ // Aparrently the thread id field was specified for some
+ // entries and not others. Start the thread id counter
+ // off at the next higher thread id.
+ //
+ else if (threadIdCt <= threadInfo[i][threadIdIndex]) {
+ threadIdCt = threadInfo[i][threadIdIndex] + 1;
+ }
+ }
+ if (threadInfo[i][index] != lastId[index]) {
+ //
+ // Run through all indices which are less significant,
+ // and reset the counts to 1.
+ //
+ // At all levels up to and including index, we need to
+ // increment the totals and record the last id.
+ //
+ unsigned index2;
+ for (index2 = threadIdIndex; index2 < index; index2++) {
+ totals[index2]++;
+ if (counts[index2] > maxCt[index2]) {
+ maxCt[index2] = counts[index2];
+ }
+ counts[index2] = 1;
+ lastId[index2] = threadInfo[i][index2];
+ }
+ counts[index]++;
+ totals[index]++;
+ lastId[index] = threadInfo[i][index];
+
+ if (assign_thread_ids && (index > threadIdIndex)) {
+
+# if KMP_MIC && REDUCE_TEAM_SIZE
+ //
+ // The default team size is the total #threads in the machine
+ // minus 1 thread for every core that has 3 or more threads.
+ //
+ teamSize += ( threadIdCt <= 2 ) ? ( threadIdCt ) : ( threadIdCt - 1 );
+# endif // KMP_MIC && REDUCE_TEAM_SIZE
+
+ //
+ // Restart the thread counter, as we are on a new core.
+ //
+ threadIdCt = 0;
+
+ //
+ // Auto-assign the thread id field if it wasn't specified.
+ //
+ if (threadInfo[i][threadIdIndex] == UINT_MAX) {
+ threadInfo[i][threadIdIndex] = threadIdCt++;
+ }
+
+ //
+ // Aparrently the thread id field was specified for some
+ // entries and not others. Start the thread id counter
+ // off at the next higher thread id.
+ //
+ else if (threadIdCt <= threadInfo[i][threadIdIndex]) {
+ threadIdCt = threadInfo[i][threadIdIndex] + 1;
+ }
+ }
+ break;
+ }
+ }
+ if (index < threadIdIndex) {
+ //
+ // If thread ids were specified, it is an error if they are not
+ // unique. Also, check that we waven't already restarted the
+ // loop (to be safe - shouldn't need to).
+ //
+ if ((threadInfo[i][threadIdIndex] != UINT_MAX)
+ || assign_thread_ids) {
+ __kmp_free(lastId);
+ __kmp_free(totals);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ CLEANUP_THREAD_INFO;
+ *msg_id = kmp_i18n_str_PhysicalIDsNotUnique;
+ return -1;
+ }
+
+ //
+ // If the thread ids were not specified and we see entries
+ // entries that are duplicates, start the loop over and
+ // assign the thread ids manually.
+ //
+ assign_thread_ids = true;
+ goto restart_radix_check;
+ }
+ }
+
+# if KMP_MIC && REDUCE_TEAM_SIZE
+ //
+ // The default team size is the total #threads in the machine
+ // minus 1 thread for every core that has 3 or more threads.
+ //
+ teamSize += ( threadIdCt <= 2 ) ? ( threadIdCt ) : ( threadIdCt - 1 );
+# endif // KMP_MIC && REDUCE_TEAM_SIZE
+
+ for (index = threadIdIndex; index <= maxIndex; index++) {
+ if (counts[index] > maxCt[index]) {
+ maxCt[index] = counts[index];
+ }
+ }
+
+ __kmp_nThreadsPerCore = maxCt[threadIdIndex];
+ nCoresPerPkg = maxCt[coreIdIndex];
+ nPackages = totals[pkgIdIndex];
+
+ //
+ // Check to see if the machine topology is uniform
+ //
+ unsigned prod = totals[maxIndex];
+ for (index = threadIdIndex; index < maxIndex; index++) {
+ prod *= maxCt[index];
+ }
+ bool uniform = (prod == totals[threadIdIndex]);
+
+ //
+ // When affinity is off, this routine will still be called to set
+ // __kmp_ncores, as well as __kmp_nThreadsPerCore,
+ // nCoresPerPkg, & nPackages. Make sure all these vars are set
+ // correctly, and return now if affinity is not enabled.
+ //
+ __kmp_ncores = totals[coreIdIndex];
+
+ if (__kmp_affinity_verbose) {
+ if (! KMP_AFFINITY_CAPABLE()) {
+ KMP_INFORM(AffNotCapableUseCpuinfo, "KMP_AFFINITY");
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (uniform) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ }
+ else {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, __kmp_affin_fullMask);
+ KMP_INFORM(AffCapableUseCpuinfo, "KMP_AFFINITY");
+ if (__kmp_affinity_respect_mask) {
+ KMP_INFORM(InitOSProcSetRespect, "KMP_AFFINITY", buf);
+ } else {
+ KMP_INFORM(InitOSProcSetNotRespect, "KMP_AFFINITY", buf);
+ }
+ KMP_INFORM(AvailableOSProc, "KMP_AFFINITY", __kmp_avail_proc);
+ if (uniform) {
+ KMP_INFORM(Uniform, "KMP_AFFINITY");
+ } else {
+ KMP_INFORM(NonUniform, "KMP_AFFINITY");
+ }
+ }
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+
+ __kmp_str_buf_print(&buf, "%d", totals[maxIndex]);
+ for (index = maxIndex - 1; index >= pkgIdIndex; index--) {
+ __kmp_str_buf_print(&buf, " x %d", maxCt[index]);
+ }
+ KMP_INFORM(TopologyExtra, "KMP_AFFINITY", buf.str, maxCt[coreIdIndex],
+ maxCt[threadIdIndex], __kmp_ncores);
+
+ __kmp_str_buf_free(&buf);
+ }
+
+# if KMP_MIC && REDUCE_TEAM_SIZE
+ //
+ // Set the default team size.
+ //
+ if ((__kmp_dflt_team_nth == 0) && (teamSize > 0)) {
+ __kmp_dflt_team_nth = teamSize;
+ KA_TRACE(20, ("__kmp_affinity_create_cpuinfo_map: setting __kmp_dflt_team_nth = %d\n",
+ __kmp_dflt_team_nth));
+ }
+# endif // KMP_MIC && REDUCE_TEAM_SIZE
+
+ KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
+ KMP_DEBUG_ASSERT(num_avail == __kmp_avail_proc);
+ __kmp_pu_os_idx = (int*)__kmp_allocate(sizeof(int) * __kmp_avail_proc);
+ for (i = 0; i < num_avail; ++i) { // fill the os indices
+ __kmp_pu_os_idx[i] = threadInfo[i][osIdIndex];
+ }
+
+ if (__kmp_affinity_type == affinity_none) {
+ __kmp_free(lastId);
+ __kmp_free(totals);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ CLEANUP_THREAD_INFO;
+ return 0;
+ }
+
+ //
+ // Count the number of levels which have more nodes at that level than
+ // at the parent's level (with there being an implicit root node of
+ // the top level). This is equivalent to saying that there is at least
+ // one node at this level which has a sibling. These levels are in the
+ // map, and the package level is always in the map.
+ //
+ bool *inMap = (bool *)__kmp_allocate((maxIndex + 1) * sizeof(bool));
+ int level = 0;
+ for (index = threadIdIndex; index < maxIndex; index++) {
+ KMP_ASSERT(totals[index] >= totals[index + 1]);
+ inMap[index] = (totals[index] > totals[index + 1]);
+ }
+ inMap[maxIndex] = (totals[maxIndex] > 1);
+ inMap[pkgIdIndex] = true;
+
+ int depth = 0;
+ for (index = threadIdIndex; index <= maxIndex; index++) {
+ if (inMap[index]) {
+ depth++;
+ }
+ }
+ KMP_ASSERT(depth > 0);
+
+ //
+ // Construct the data structure that is to be returned.
+ //
+ *address2os = (AddrUnsPair*)
+ __kmp_allocate(sizeof(AddrUnsPair) * num_avail);
+ int pkgLevel = -1;
+ int coreLevel = -1;
+ int threadLevel = -1;
+
+ for (i = 0; i < num_avail; ++i) {
+ Address addr(depth);
+ unsigned os = threadInfo[i][osIdIndex];
+ int src_index;
+ int dst_index = 0;
+
+ for (src_index = maxIndex; src_index >= threadIdIndex; src_index--) {
+ if (! inMap[src_index]) {
+ continue;
+ }
+ addr.labels[dst_index] = threadInfo[i][src_index];
+ if (src_index == pkgIdIndex) {
+ pkgLevel = dst_index;
+ }
+ else if (src_index == coreIdIndex) {
+ coreLevel = dst_index;
+ }
+ else if (src_index == threadIdIndex) {
+ threadLevel = dst_index;
+ }
+ dst_index++;
+ }
+ (*address2os)[i] = AddrUnsPair(addr, os);
+ }
+
+ if (__kmp_affinity_gran_levels < 0) {
+ //
+ // Set the granularity level based on what levels are modeled
+ // in the machine topology map.
+ //
+ unsigned src_index;
+ __kmp_affinity_gran_levels = 0;
+ for (src_index = threadIdIndex; src_index <= maxIndex; src_index++) {
+ if (! inMap[src_index]) {
+ continue;
+ }
+ switch (src_index) {
+ case threadIdIndex:
+ if (__kmp_affinity_gran > affinity_gran_thread) {
+ __kmp_affinity_gran_levels++;
+ }
+
+ break;
+ case coreIdIndex:
+ if (__kmp_affinity_gran > affinity_gran_core) {
+ __kmp_affinity_gran_levels++;
+ }
+ break;
+
+ case pkgIdIndex:
+ if (__kmp_affinity_gran > affinity_gran_package) {
+ __kmp_affinity_gran_levels++;
+ }
+ break;
+ }
+ }
+ }
+
+ if (__kmp_affinity_verbose) {
+ __kmp_affinity_print_topology(*address2os, num_avail, depth, pkgLevel,
+ coreLevel, threadLevel);
+ }
+
+ __kmp_free(inMap);
+ __kmp_free(lastId);
+ __kmp_free(totals);
+ __kmp_free(maxCt);
+ __kmp_free(counts);
+ CLEANUP_THREAD_INFO;
+ return depth;
+}
+
+
+//
+// Create and return a table of affinity masks, indexed by OS thread ID.
+// This routine handles OR'ing together all the affinity masks of threads
+// that are sufficiently close, if granularity > fine.
+//
+static kmp_affin_mask_t *
+__kmp_create_masks(unsigned *maxIndex, unsigned *numUnique,
+ AddrUnsPair *address2os, unsigned numAddrs)
+{
+ //
+ // First form a table of affinity masks in order of OS thread id.
+ //
+ unsigned depth;
+ unsigned maxOsId;
+ unsigned i;
+
+ KMP_ASSERT(numAddrs > 0);
+ depth = address2os[0].first.depth;
+
+ maxOsId = 0;
+ for (i = 0; i < numAddrs; i++) {
+ unsigned osId = address2os[i].second;
+ if (osId > maxOsId) {
+ maxOsId = osId;
+ }
+ }
+ kmp_affin_mask_t *osId2Mask;
+ KMP_CPU_ALLOC_ARRAY(osId2Mask, (maxOsId+1));
+
+ //
+ // Sort the address2os table according to physical order. Doing so
+ // will put all threads on the same core/package/node in consecutive
+ // locations.
+ //
+ qsort(address2os, numAddrs, sizeof(*address2os),
+ __kmp_affinity_cmp_Address_labels);
+
+ KMP_ASSERT(__kmp_affinity_gran_levels >= 0);
+ if (__kmp_affinity_verbose && (__kmp_affinity_gran_levels > 0)) {
+ KMP_INFORM(ThreadsMigrate, "KMP_AFFINITY", __kmp_affinity_gran_levels);
+ }
+ if (__kmp_affinity_gran_levels >= (int)depth) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffThreadsMayMigrate);
+ }
+ }
+
+ //
+ // Run through the table, forming the masks for all threads on each
+ // core. Threads on the same core will have identical "Address"
+ // objects, not considering the last level, which must be the thread
+ // id. All threads on a core will appear consecutively.
+ //
+ unsigned unique = 0;
+ unsigned j = 0; // index of 1st thread on core
+ unsigned leader = 0;
+ Address *leaderAddr = &(address2os[0].first);
+ kmp_affin_mask_t *sum;
+ KMP_CPU_ALLOC_ON_STACK(sum);
+ KMP_CPU_ZERO(sum);
+ KMP_CPU_SET(address2os[0].second, sum);
+ for (i = 1; i < numAddrs; i++) {
+ //
+ // If this thread is sufficiently close to the leader (within the
+ // granularity setting), then set the bit for this os thread in the
+ // affinity mask for this group, and go on to the next thread.
+ //
+ if (leaderAddr->isClose(address2os[i].first,
+ __kmp_affinity_gran_levels)) {
+ KMP_CPU_SET(address2os[i].second, sum);
+ continue;
+ }
+
+ //
+ // For every thread in this group, copy the mask to the thread's
+ // entry in the osId2Mask table. Mark the first address as a
+ // leader.
+ //
+ for (; j < i; j++) {
+ unsigned osId = address2os[j].second;
+ KMP_DEBUG_ASSERT(osId <= maxOsId);
+ kmp_affin_mask_t *mask = KMP_CPU_INDEX(osId2Mask, osId);
+ KMP_CPU_COPY(mask, sum);
+ address2os[j].first.leader = (j == leader);
+ }
+ unique++;
+
+ //
+ // Start a new mask.
+ //
+ leader = i;
+ leaderAddr = &(address2os[i].first);
+ KMP_CPU_ZERO(sum);
+ KMP_CPU_SET(address2os[i].second, sum);
+ }
+
+ //
+ // For every thread in last group, copy the mask to the thread's
+ // entry in the osId2Mask table.
+ //
+ for (; j < i; j++) {
+ unsigned osId = address2os[j].second;
+ KMP_DEBUG_ASSERT(osId <= maxOsId);
+ kmp_affin_mask_t *mask = KMP_CPU_INDEX(osId2Mask, osId);
+ KMP_CPU_COPY(mask, sum);
+ address2os[j].first.leader = (j == leader);
+ }
+ unique++;
+ KMP_CPU_FREE_FROM_STACK(sum);
+
+ *maxIndex = maxOsId;
+ *numUnique = unique;
+ return osId2Mask;
+}
+
+
+//
+// Stuff for the affinity proclist parsers. It's easier to declare these vars
+// as file-static than to try and pass them through the calling sequence of
+// the recursive-descent OMP_PLACES parser.
+//
+static kmp_affin_mask_t *newMasks;
+static int numNewMasks;
+static int nextNewMask;
+
+#define ADD_MASK(_mask) \
+ { \
+ if (nextNewMask >= numNewMasks) { \
+ int i; \
+ numNewMasks *= 2; \
+ kmp_affin_mask_t* temp; \
+ KMP_CPU_INTERNAL_ALLOC_ARRAY(temp, numNewMasks); \
+ for(i=0;i<numNewMasks/2;i++) { \
+ kmp_affin_mask_t* src = KMP_CPU_INDEX(newMasks, i); \
+ kmp_affin_mask_t* dest = KMP_CPU_INDEX(temp, i); \
+ KMP_CPU_COPY(dest, src); \
+ } \
+ KMP_CPU_INTERNAL_FREE_ARRAY(newMasks, numNewMasks/2); \
+ newMasks = temp; \
+ } \
+ KMP_CPU_COPY(KMP_CPU_INDEX(newMasks, nextNewMask), (_mask)); \
+ nextNewMask++; \
+ }
+
+#define ADD_MASK_OSID(_osId,_osId2Mask,_maxOsId) \
+ { \
+ if (((_osId) > _maxOsId) || \
+ (! KMP_CPU_ISSET((_osId), KMP_CPU_INDEX((_osId2Mask), (_osId))))) { \
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings \
+ && (__kmp_affinity_type != affinity_none))) { \
+ KMP_WARNING(AffIgnoreInvalidProcID, _osId); \
+ } \
+ } \
+ else { \
+ ADD_MASK(KMP_CPU_INDEX(_osId2Mask, (_osId))); \
+ } \
+ }
+
+
+//
+// Re-parse the proclist (for the explicit affinity type), and form the list
+// of affinity newMasks indexed by gtid.
+//
+static void
+__kmp_affinity_process_proclist(kmp_affin_mask_t **out_masks,
+ unsigned int *out_numMasks, const char *proclist,
+ kmp_affin_mask_t *osId2Mask, int maxOsId)
+{
+ int i;
+ const char *scan = proclist;
+ const char *next = proclist;
+
+ //
+ // We use malloc() for the temporary mask vector,
+ // so that we can use realloc() to extend it.
+ //
+ numNewMasks = 2;
+ KMP_CPU_INTERNAL_ALLOC_ARRAY(newMasks, numNewMasks);
+ nextNewMask = 0;
+ kmp_affin_mask_t *sumMask;
+ KMP_CPU_ALLOC(sumMask);
+ int setSize = 0;
+
+ for (;;) {
+ int start, end, stride;
+
+ SKIP_WS(scan);
+ next = scan;
+ if (*next == '\0') {
+ break;
+ }
+
+ if (*next == '{') {
+ int num;
+ setSize = 0;
+ next++; // skip '{'
+ SKIP_WS(next);
+ scan = next;
+
+ //
+ // Read the first integer in the set.
+ //
+ KMP_ASSERT2((*next >= '0') && (*next <= '9'),
+ "bad proclist");
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT2(num >= 0, "bad explicit proc list");
+
+ //
+ // Copy the mask for that osId to the sum (union) mask.
+ //
+ if ((num > maxOsId) ||
+ (! KMP_CPU_ISSET(num, KMP_CPU_INDEX(osId2Mask, num)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, num);
+ }
+ KMP_CPU_ZERO(sumMask);
+ }
+ else {
+ KMP_CPU_COPY(sumMask, KMP_CPU_INDEX(osId2Mask, num));
+ setSize = 1;
+ }
+
+ for (;;) {
+ //
+ // Check for end of set.
+ //
+ SKIP_WS(next);
+ if (*next == '}') {
+ next++; // skip '}'
+ break;
+ }
+
+ //
+ // Skip optional comma.
+ //
+ if (*next == ',') {
+ next++;
+ }
+ SKIP_WS(next);
+
+ //
+ // Read the next integer in the set.
+ //
+ scan = next;
+ KMP_ASSERT2((*next >= '0') && (*next <= '9'),
+ "bad explicit proc list");
+
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT2(num >= 0, "bad explicit proc list");
+
+ //
+ // Add the mask for that osId to the sum mask.
+ //
+ if ((num > maxOsId) ||
+ (! KMP_CPU_ISSET(num, KMP_CPU_INDEX(osId2Mask, num)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, num);
+ }
+ }
+ else {
+ KMP_CPU_UNION(sumMask, KMP_CPU_INDEX(osId2Mask, num));
+ setSize++;
+ }
+ }
+ if (setSize > 0) {
+ ADD_MASK(sumMask);
+ }
+
+ SKIP_WS(next);
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ continue;
+ }
+
+ //
+ // Read the first integer.
+ //
+ KMP_ASSERT2((*next >= '0') && (*next <= '9'), "bad explicit proc list");
+ SKIP_DIGITS(next);
+ start = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT2(start >= 0, "bad explicit proc list");
+ SKIP_WS(next);
+
+ //
+ // If this isn't a range, then add a mask to the list and go on.
+ //
+ if (*next != '-') {
+ ADD_MASK_OSID(start, osId2Mask, maxOsId);
+
+ //
+ // Skip optional comma.
+ //
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ continue;
+ }
+
+ //
+ // This is a range. Skip over the '-' and read in the 2nd int.
+ //
+ next++; // skip '-'
+ SKIP_WS(next);
+ scan = next;
+ KMP_ASSERT2((*next >= '0') && (*next <= '9'), "bad explicit proc list");
+ SKIP_DIGITS(next);
+ end = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT2(end >= 0, "bad explicit proc list");
+
+ //
+ // Check for a stride parameter
+ //
+ stride = 1;
+ SKIP_WS(next);
+ if (*next == ':') {
+ //
+ // A stride is specified. Skip over the ':" and read the 3rd int.
+ //
+ int sign = +1;
+ next++; // skip ':'
+ SKIP_WS(next);
+ scan = next;
+ if (*next == '-') {
+ sign = -1;
+ next++;
+ SKIP_WS(next);
+ scan = next;
+ }
+ KMP_ASSERT2((*next >= '0') && (*next <= '9'),
+ "bad explicit proc list");
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT2(stride >= 0, "bad explicit proc list");
+ stride *= sign;
+ }
+
+ //
+ // Do some range checks.
+ //
+ KMP_ASSERT2(stride != 0, "bad explicit proc list");
+ if (stride > 0) {
+ KMP_ASSERT2(start <= end, "bad explicit proc list");
+ }
+ else {
+ KMP_ASSERT2(start >= end, "bad explicit proc list");
+ }
+ KMP_ASSERT2((end - start) / stride <= 65536, "bad explicit proc list");
+
+ //
+ // Add the mask for each OS proc # to the list.
+ //
+ if (stride > 0) {
+ do {
+ ADD_MASK_OSID(start, osId2Mask, maxOsId);
+ start += stride;
+ } while (start <= end);
+ }
+ else {
+ do {
+ ADD_MASK_OSID(start, osId2Mask, maxOsId);
+ start += stride;
+ } while (start >= end);
+ }
+
+ //
+ // Skip optional comma.
+ //
+ SKIP_WS(next);
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ }
+
+ *out_numMasks = nextNewMask;
+ if (nextNewMask == 0) {
+ *out_masks = NULL;
+ KMP_CPU_INTERNAL_FREE_ARRAY(newMasks, numNewMasks);
+ return;
+ }
+ KMP_CPU_ALLOC_ARRAY((*out_masks), nextNewMask);
+ for(i = 0; i < nextNewMask; i++) {
+ kmp_affin_mask_t* src = KMP_CPU_INDEX(newMasks, i);
+ kmp_affin_mask_t* dest = KMP_CPU_INDEX((*out_masks), i);
+ KMP_CPU_COPY(dest, src);
+ }
+ KMP_CPU_INTERNAL_FREE_ARRAY(newMasks, numNewMasks);
+ KMP_CPU_FREE(sumMask);
+}
+
+
+# if OMP_40_ENABLED
+
+/*-----------------------------------------------------------------------------
+
+Re-parse the OMP_PLACES proc id list, forming the newMasks for the different
+places. Again, Here is the grammar:
+
+place_list := place
+place_list := place , place_list
+place := num
+place := place : num
+place := place : num : signed
+place := { subplacelist }
+place := ! place // (lowest priority)
+subplace_list := subplace
+subplace_list := subplace , subplace_list
+subplace := num
+subplace := num : num
+subplace := num : num : signed
+signed := num
+signed := + signed
+signed := - signed
+
+-----------------------------------------------------------------------------*/
+
+static void
+__kmp_process_subplace_list(const char **scan, kmp_affin_mask_t *osId2Mask,
+ int maxOsId, kmp_affin_mask_t *tempMask, int *setSize)
+{
+ const char *next;
+
+ for (;;) {
+ int start, count, stride, i;
+
+ //
+ // Read in the starting proc id
+ //
+ SKIP_WS(*scan);
+ KMP_ASSERT2((**scan >= '0') && (**scan <= '9'),
+ "bad explicit places list");
+ next = *scan;
+ SKIP_DIGITS(next);
+ start = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(start >= 0);
+ *scan = next;
+
+ //
+ // valid follow sets are ',' ':' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}' || **scan == ',') {
+ if ((start > maxOsId) ||
+ (! KMP_CPU_ISSET(start, KMP_CPU_INDEX(osId2Mask, start)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, start);
+ }
+ }
+ else {
+ KMP_CPU_UNION(tempMask, KMP_CPU_INDEX(osId2Mask, start));
+ (*setSize)++;
+ }
+ if (**scan == '}') {
+ break;
+ }
+ (*scan)++; // skip ','
+ continue;
+ }
+ KMP_ASSERT2(**scan == ':', "bad explicit places list");
+ (*scan)++; // skip ':'
+
+ //
+ // Read count parameter
+ //
+ SKIP_WS(*scan);
+ KMP_ASSERT2((**scan >= '0') && (**scan <= '9'),
+ "bad explicit places list");
+ next = *scan;
+ SKIP_DIGITS(next);
+ count = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(count >= 0);
+ *scan = next;
+
+ //
+ // valid follow sets are ',' ':' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}' || **scan == ',') {
+ for (i = 0; i < count; i++) {
+ if ((start > maxOsId) ||
+ (! KMP_CPU_ISSET(start, KMP_CPU_INDEX(osId2Mask, start)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, start);
+ }
+ break; // don't proliferate warnings for large count
+ }
+ else {
+ KMP_CPU_UNION(tempMask, KMP_CPU_INDEX(osId2Mask, start));
+ start++;
+ (*setSize)++;
+ }
+ }
+ if (**scan == '}') {
+ break;
+ }
+ (*scan)++; // skip ','
+ continue;
+ }
+ KMP_ASSERT2(**scan == ':', "bad explicit places list");
+ (*scan)++; // skip ':'
+
+ //
+ // Read stride parameter
+ //
+ int sign = +1;
+ for (;;) {
+ SKIP_WS(*scan);
+ if (**scan == '+') {
+ (*scan)++; // skip '+'
+ continue;
+ }
+ if (**scan == '-') {
+ sign *= -1;
+ (*scan)++; // skip '-'
+ continue;
+ }
+ break;
+ }
+ SKIP_WS(*scan);
+ KMP_ASSERT2((**scan >= '0') && (**scan <= '9'),
+ "bad explicit places list");
+ next = *scan;
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(stride >= 0);
+ *scan = next;
+ stride *= sign;
+
+ //
+ // valid follow sets are ',' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}' || **scan == ',') {
+ for (i = 0; i < count; i++) {
+ if ((start > maxOsId) ||
+ (! KMP_CPU_ISSET(start, KMP_CPU_INDEX(osId2Mask, start)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, start);
+ }
+ break; // don't proliferate warnings for large count
+ }
+ else {
+ KMP_CPU_UNION(tempMask, KMP_CPU_INDEX(osId2Mask, start));
+ start += stride;
+ (*setSize)++;
+ }
+ }
+ if (**scan == '}') {
+ break;
+ }
+ (*scan)++; // skip ','
+ continue;
+ }
+
+ KMP_ASSERT2(0, "bad explicit places list");
+ }
+}
+
+
+static void
+__kmp_process_place(const char **scan, kmp_affin_mask_t *osId2Mask,
+ int maxOsId, kmp_affin_mask_t *tempMask, int *setSize)
+{
+ const char *next;
+
+ //
+ // valid follow sets are '{' '!' and num
+ //
+ SKIP_WS(*scan);
+ if (**scan == '{') {
+ (*scan)++; // skip '{'
+ __kmp_process_subplace_list(scan, osId2Mask, maxOsId , tempMask,
+ setSize);
+ KMP_ASSERT2(**scan == '}', "bad explicit places list");
+ (*scan)++; // skip '}'
+ }
+ else if (**scan == '!') {
+ (*scan)++; // skip '!'
+ __kmp_process_place(scan, osId2Mask, maxOsId, tempMask, setSize);
+ KMP_CPU_COMPLEMENT(maxOsId, tempMask);
+ }
+ else if ((**scan >= '0') && (**scan <= '9')) {
+ next = *scan;
+ SKIP_DIGITS(next);
+ int num = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(num >= 0);
+ if ((num > maxOsId) ||
+ (! KMP_CPU_ISSET(num, KMP_CPU_INDEX(osId2Mask, num)))) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffIgnoreInvalidProcID, num);
+ }
+ }
+ else {
+ KMP_CPU_UNION(tempMask, KMP_CPU_INDEX(osId2Mask, num));
+ (*setSize)++;
+ }
+ *scan = next; // skip num
+ }
+ else {
+ KMP_ASSERT2(0, "bad explicit places list");
+ }
+}
+
+
+//static void
+void
+__kmp_affinity_process_placelist(kmp_affin_mask_t **out_masks,
+ unsigned int *out_numMasks, const char *placelist,
+ kmp_affin_mask_t *osId2Mask, int maxOsId)
+{
+ int i,j,count,stride,sign;
+ const char *scan = placelist;
+ const char *next = placelist;
+
+ numNewMasks = 2;
+ KMP_CPU_INTERNAL_ALLOC_ARRAY(newMasks, numNewMasks);
+ nextNewMask = 0;
+
+ // tempMask is modified based on the previous or initial
+ // place to form the current place
+ // previousMask contains the previous place
+ kmp_affin_mask_t *tempMask;
+ kmp_affin_mask_t *previousMask;
+ KMP_CPU_ALLOC(tempMask);
+ KMP_CPU_ZERO(tempMask);
+ KMP_CPU_ALLOC(previousMask);
+ KMP_CPU_ZERO(previousMask);
+ int setSize = 0;
+
+ for (;;) {
+ __kmp_process_place(&scan, osId2Mask, maxOsId, tempMask, &setSize);
+
+ //
+ // valid follow sets are ',' ':' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0' || *scan == ',') {
+ if (setSize > 0) {
+ ADD_MASK(tempMask);
+ }
+ KMP_CPU_ZERO(tempMask);
+ setSize = 0;
+ if (*scan == '\0') {
+ break;
+ }
+ scan++; // skip ','
+ continue;
+ }
+
+ KMP_ASSERT2(*scan == ':', "bad explicit places list");
+ scan++; // skip ':'
+
+ //
+ // Read count parameter
+ //
+ SKIP_WS(scan);
+ KMP_ASSERT2((*scan >= '0') && (*scan <= '9'),
+ "bad explicit places list");
+ next = scan;
+ SKIP_DIGITS(next);
+ count = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(count >= 0);
+ scan = next;
+
+ //
+ // valid follow sets are ',' ':' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0' || *scan == ',') {
+ stride = +1;
+ }
+ else {
+ KMP_ASSERT2(*scan == ':', "bad explicit places list");
+ scan++; // skip ':'
+
+ //
+ // Read stride parameter
+ //
+ sign = +1;
+ for (;;) {
+ SKIP_WS(scan);
+ if (*scan == '+') {
+ scan++; // skip '+'
+ continue;
+ }
+ if (*scan == '-') {
+ sign *= -1;
+ scan++; // skip '-'
+ continue;
+ }
+ break;
+ }
+ SKIP_WS(scan);
+ KMP_ASSERT2((*scan >= '0') && (*scan <= '9'),
+ "bad explicit places list");
+ next = scan;
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(scan, *next);
+ KMP_DEBUG_ASSERT(stride >= 0);
+ scan = next;
+ stride *= sign;
+ }
+
+ // Add places determined by initial_place : count : stride
+ for (i = 0; i < count; i++) {
+ if (setSize == 0) {
+ break;
+ }
+ // Add the current place, then build the next place (tempMask) from that
+ KMP_CPU_COPY(previousMask, tempMask);
+ ADD_MASK(previousMask);
+ KMP_CPU_ZERO(tempMask);
+ setSize = 0;
+ KMP_CPU_SET_ITERATE(j, previousMask) {
+ if (! KMP_CPU_ISSET(j, previousMask)) {
+ continue;
+ }
+ if ((j+stride > maxOsId) || (j+stride < 0) ||
+ (! KMP_CPU_ISSET(j, __kmp_affin_fullMask)) ||
+ (! KMP_CPU_ISSET(j+stride, KMP_CPU_INDEX(osId2Mask, j+stride)))) {
+ if ((__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) && i < count - 1) {
+ KMP_WARNING(AffIgnoreInvalidProcID, j+stride);
+ }
+ continue;
+ }
+ KMP_CPU_SET(j+stride, tempMask);
+ setSize++;
+ }
+ }
+ KMP_CPU_ZERO(tempMask);
+ setSize = 0;
+
+ //
+ // valid follow sets are ',' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0') {
+ break;
+ }
+ if (*scan == ',') {
+ scan++; // skip ','
+ continue;
+ }
+
+ KMP_ASSERT2(0, "bad explicit places list");
+ }
+
+ *out_numMasks = nextNewMask;
+ if (nextNewMask == 0) {
+ *out_masks = NULL;
+ KMP_CPU_INTERNAL_FREE_ARRAY(newMasks, numNewMasks);
+ return;
+ }
+ KMP_CPU_ALLOC_ARRAY((*out_masks), nextNewMask);
+ KMP_CPU_FREE(tempMask);
+ KMP_CPU_FREE(previousMask);
+ for(i = 0; i < nextNewMask; i++) {
+ kmp_affin_mask_t* src = KMP_CPU_INDEX(newMasks, i);
+ kmp_affin_mask_t* dest = KMP_CPU_INDEX((*out_masks), i);
+ KMP_CPU_COPY(dest, src);
+ }
+ KMP_CPU_INTERNAL_FREE_ARRAY(newMasks, numNewMasks);
+}
+
+# endif /* OMP_40_ENABLED */
+
+#undef ADD_MASK
+#undef ADD_MASK_OSID
+
+static void
+__kmp_apply_thread_places(AddrUnsPair **pAddr, int depth)
+{
+ int i, j, k, n_old = 0, n_new = 0, proc_num = 0;
+ if (__kmp_place_num_sockets == 0 &&
+ __kmp_place_num_cores == 0 &&
+ __kmp_place_num_threads_per_core == 0 )
+ goto _exit; // no topology limiting actions requested, exit
+ if (__kmp_place_num_sockets == 0)
+ __kmp_place_num_sockets = nPackages; // use all available sockets
+ if (__kmp_place_num_cores == 0)
+ __kmp_place_num_cores = nCoresPerPkg; // use all available cores
+ if (__kmp_place_num_threads_per_core == 0 ||
+ __kmp_place_num_threads_per_core > __kmp_nThreadsPerCore)
+ __kmp_place_num_threads_per_core = __kmp_nThreadsPerCore; // use all HW contexts
+
+ if ( !__kmp_affinity_uniform_topology() ) {
+ KMP_WARNING( AffHWSubsetNonUniform );
+ goto _exit; // don't support non-uniform topology
+ }
+ if ( depth > 3 ) {
+ KMP_WARNING( AffHWSubsetNonThreeLevel );
+ goto _exit; // don't support not-3-level topology
+ }
+ if (__kmp_place_socket_offset + __kmp_place_num_sockets > nPackages) {
+ KMP_WARNING(AffHWSubsetManySockets);
+ goto _exit;
+ }
+ if ( __kmp_place_core_offset + __kmp_place_num_cores > nCoresPerPkg ) {
+ KMP_WARNING( AffHWSubsetManyCores );
+ goto _exit;
+ }
+
+ AddrUnsPair *newAddr;
+ if (pAddr) // pAddr is NULL in case of affinity_none
+ newAddr = (AddrUnsPair *)__kmp_allocate( sizeof(AddrUnsPair) *
+ __kmp_place_num_sockets * __kmp_place_num_cores * __kmp_place_num_threads_per_core);
+
+ for (i = 0; i < nPackages; ++i) {
+ if (i < __kmp_place_socket_offset ||
+ i >= __kmp_place_socket_offset + __kmp_place_num_sockets) {
+ n_old += nCoresPerPkg * __kmp_nThreadsPerCore; // skip not-requested socket
+ if (__kmp_pu_os_idx != NULL) {
+ for (j = 0; j < nCoresPerPkg; ++j) { // walk through skipped socket
+ for (k = 0; k < __kmp_nThreadsPerCore; ++k) {
+ KMP_CPU_CLR(__kmp_pu_os_idx[proc_num], __kmp_affin_fullMask);
+ ++proc_num;
+ }
+ }
+ }
+ } else {
+ for (j = 0; j < nCoresPerPkg; ++j) { // walk through requested socket
+ if (j < __kmp_place_core_offset ||
+ j >= __kmp_place_core_offset + __kmp_place_num_cores) {
+ n_old += __kmp_nThreadsPerCore; // skip not-requested core
+ if (__kmp_pu_os_idx != NULL) {
+ for (k = 0; k < __kmp_nThreadsPerCore; ++k) { // walk through skipped core
+ KMP_CPU_CLR(__kmp_pu_os_idx[proc_num], __kmp_affin_fullMask);
+ ++proc_num;
+ }
+ }
+ } else {
+ for (k = 0; k < __kmp_nThreadsPerCore; ++k) { // walk through requested core
+ if (k < __kmp_place_num_threads_per_core) {
+ if (pAddr)
+ newAddr[n_new] = (*pAddr)[n_old]; // collect requested thread's data
+ n_new++;
+ } else {
+ if (__kmp_pu_os_idx != NULL)
+ KMP_CPU_CLR(__kmp_pu_os_idx[proc_num], __kmp_affin_fullMask);
+ }
+ n_old++;
+ ++proc_num;
+ }
+ }
+ }
+ }
+ }
+ KMP_DEBUG_ASSERT(n_old == nPackages * nCoresPerPkg * __kmp_nThreadsPerCore);
+ KMP_DEBUG_ASSERT(n_new == __kmp_place_num_sockets * __kmp_place_num_cores *
+ __kmp_place_num_threads_per_core);
+
+ nPackages = __kmp_place_num_sockets; // correct nPackages
+ nCoresPerPkg = __kmp_place_num_cores; // correct nCoresPerPkg
+ __kmp_nThreadsPerCore = __kmp_place_num_threads_per_core; // correct __kmp_nThreadsPerCore
+ __kmp_avail_proc = n_new; // correct avail_proc
+ __kmp_ncores = nPackages * __kmp_place_num_cores; // correct ncores
+
+ if (pAddr) {
+ __kmp_free( *pAddr );
+ *pAddr = newAddr; // replace old topology with new one
+ }
+_exit:
+ if (__kmp_pu_os_idx != NULL) {
+ __kmp_free(__kmp_pu_os_idx);
+ __kmp_pu_os_idx = NULL;
+ }
+}
+
+
+static AddrUnsPair *address2os = NULL;
+static int * procarr = NULL;
+static int __kmp_aff_depth = 0;
+
+#define KMP_EXIT_AFF_NONE \
+ KMP_ASSERT(__kmp_affinity_type == affinity_none); \
+ KMP_ASSERT(address2os == NULL); \
+ __kmp_apply_thread_places(NULL, 0); \
+ return;
+
+static void
+__kmp_aux_affinity_initialize(void)
+{
+ if (__kmp_affinity_masks != NULL) {
+ KMP_ASSERT(__kmp_affin_fullMask != NULL);
+ return;
+ }
+
+ //
+ // Create the "full" mask - this defines all of the processors that we
+ // consider to be in the machine model. If respect is set, then it is
+ // the initialization thread's affinity mask. Otherwise, it is all
+ // processors that we know about on the machine.
+ //
+ if (__kmp_affin_fullMask == NULL) {
+ KMP_CPU_ALLOC(__kmp_affin_fullMask);
+ }
+ if (KMP_AFFINITY_CAPABLE()) {
+ if (__kmp_affinity_respect_mask) {
+ __kmp_get_system_affinity(__kmp_affin_fullMask, TRUE);
+
+ //
+ // Count the number of available processors.
+ //
+ unsigned i;
+ __kmp_avail_proc = 0;
+ KMP_CPU_SET_ITERATE(i, __kmp_affin_fullMask) {
+ if (! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) {
+ continue;
+ }
+ __kmp_avail_proc++;
+ }
+ if (__kmp_avail_proc > __kmp_xproc) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(ErrorInitializeAffinity);
+ }
+ __kmp_affinity_type = affinity_none;
+ KMP_AFFINITY_DISABLE();
+ return;
+ }
+ }
+ else {
+ __kmp_affinity_entire_machine_mask(__kmp_affin_fullMask);
+ __kmp_avail_proc = __kmp_xproc;
+ }
+ }
+
+ int depth = -1;
+ kmp_i18n_id_t msg_id = kmp_i18n_null;
+
+ //
+ // For backward compatibility, setting KMP_CPUINFO_FILE =>
+ // KMP_TOPOLOGY_METHOD=cpuinfo
+ //
+ if ((__kmp_cpuinfo_file != NULL) &&
+ (__kmp_affinity_top_method == affinity_top_method_all)) {
+ __kmp_affinity_top_method = affinity_top_method_cpuinfo;
+ }
+
+ if (__kmp_affinity_top_method == affinity_top_method_all) {
+ //
+ // In the default code path, errors are not fatal - we just try using
+ // another method. We only emit a warning message if affinity is on,
+ // or the verbose flag is set, an the nowarnings flag was not set.
+ //
+ const char *file_name = NULL;
+ int line = 0;
+# if KMP_USE_HWLOC
+ if (depth < 0) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffUsingHwloc, "KMP_AFFINITY");
+ }
+ if(!__kmp_hwloc_error) {
+ depth = __kmp_affinity_create_hwloc_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ } else if(depth < 0 && __kmp_affinity_verbose) {
+ KMP_INFORM(AffIgnoringHwloc, "KMP_AFFINITY");
+ }
+ } else if(__kmp_affinity_verbose) {
+ KMP_INFORM(AffIgnoringHwloc, "KMP_AFFINITY");
+ }
+ }
+# endif
+
+# if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+ if (depth < 0) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffInfoStr, "KMP_AFFINITY", KMP_I18N_STR(Decodingx2APIC));
+ }
+
+ file_name = NULL;
+ depth = __kmp_affinity_create_x2apicid_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+
+ if (depth < 0) {
+ if (__kmp_affinity_verbose) {
+ if (msg_id != kmp_i18n_null) {
+ KMP_INFORM(AffInfoStrStr, "KMP_AFFINITY", __kmp_i18n_catgets(msg_id),
+ KMP_I18N_STR(DecodingLegacyAPIC));
+ }
+ else {
+ KMP_INFORM(AffInfoStr, "KMP_AFFINITY", KMP_I18N_STR(DecodingLegacyAPIC));
+ }
+ }
+
+ file_name = NULL;
+ depth = __kmp_affinity_create_apicid_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ }
+ }
+
+# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+# if KMP_OS_LINUX
+
+ if (depth < 0) {
+ if (__kmp_affinity_verbose) {
+ if (msg_id != kmp_i18n_null) {
+ KMP_INFORM(AffStrParseFilename, "KMP_AFFINITY", __kmp_i18n_catgets(msg_id), "/proc/cpuinfo");
+ }
+ else {
+ KMP_INFORM(AffParseFilename, "KMP_AFFINITY", "/proc/cpuinfo");
+ }
+ }
+
+ FILE *f = fopen("/proc/cpuinfo", "r");
+ if (f == NULL) {
+ msg_id = kmp_i18n_str_CantOpenCpuinfo;
+ }
+ else {
+ file_name = "/proc/cpuinfo";
+ depth = __kmp_affinity_create_cpuinfo_map(&address2os, &line, &msg_id, f);
+ fclose(f);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ }
+ }
+
+# endif /* KMP_OS_LINUX */
+
+# if KMP_GROUP_AFFINITY
+
+ if ((depth < 0) && (__kmp_num_proc_groups > 1)) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffWindowsProcGroupMap, "KMP_AFFINITY");
+ }
+
+ depth = __kmp_affinity_create_proc_group_map(&address2os, &msg_id);
+ KMP_ASSERT(depth != 0);
+ }
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ if (depth < 0) {
+ if (__kmp_affinity_verbose && (msg_id != kmp_i18n_null)) {
+ if (file_name == NULL) {
+ KMP_INFORM(UsingFlatOS, __kmp_i18n_catgets(msg_id));
+ }
+ else if (line == 0) {
+ KMP_INFORM(UsingFlatOSFile, file_name, __kmp_i18n_catgets(msg_id));
+ }
+ else {
+ KMP_INFORM(UsingFlatOSFileLine, file_name, line, __kmp_i18n_catgets(msg_id));
+ }
+ }
+ // FIXME - print msg if msg_id = kmp_i18n_null ???
+
+ file_name = "";
+ depth = __kmp_affinity_create_flat_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ KMP_ASSERT(depth > 0);
+ KMP_ASSERT(address2os != NULL);
+ }
+ }
+
+ //
+ // If the user has specified that a paricular topology discovery method
+ // is to be used, then we abort if that method fails. The exception is
+ // group affinity, which might have been implicitly set.
+ //
+
+# if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+ else if (__kmp_affinity_top_method == affinity_top_method_x2apicid) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffInfoStr, "KMP_AFFINITY",
+ KMP_I18N_STR(Decodingx2APIC));
+ }
+
+ depth = __kmp_affinity_create_x2apicid_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ if (depth < 0) {
+ KMP_ASSERT(msg_id != kmp_i18n_null);
+ KMP_FATAL(MsgExiting, __kmp_i18n_catgets(msg_id));
+ }
+ }
+ else if (__kmp_affinity_top_method == affinity_top_method_apicid) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffInfoStr, "KMP_AFFINITY",
+ KMP_I18N_STR(DecodingLegacyAPIC));
+ }
+
+ depth = __kmp_affinity_create_apicid_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ if (depth < 0) {
+ KMP_ASSERT(msg_id != kmp_i18n_null);
+ KMP_FATAL(MsgExiting, __kmp_i18n_catgets(msg_id));
+ }
+ }
+
+# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ else if (__kmp_affinity_top_method == affinity_top_method_cpuinfo) {
+ const char *filename;
+ if (__kmp_cpuinfo_file != NULL) {
+ filename = __kmp_cpuinfo_file;
+ }
+ else {
+ filename = "/proc/cpuinfo";
+ }
+
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffParseFilename, "KMP_AFFINITY", filename);
+ }
+
+ FILE *f = fopen(filename, "r");
+ if (f == NULL) {
+ int code = errno;
+ if (__kmp_cpuinfo_file != NULL) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(CantOpenFileForReading, filename),
+ KMP_ERR(code),
+ KMP_HNT(NameComesFrom_CPUINFO_FILE),
+ __kmp_msg_null
+ );
+ }
+ else {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(CantOpenFileForReading, filename),
+ KMP_ERR(code),
+ __kmp_msg_null
+ );
+ }
+ }
+ int line = 0;
+ depth = __kmp_affinity_create_cpuinfo_map(&address2os, &line, &msg_id, f);
+ fclose(f);
+ if (depth < 0) {
+ KMP_ASSERT(msg_id != kmp_i18n_null);
+ if (line > 0) {
+ KMP_FATAL(FileLineMsgExiting, filename, line, __kmp_i18n_catgets(msg_id));
+ }
+ else {
+ KMP_FATAL(FileMsgExiting, filename, __kmp_i18n_catgets(msg_id));
+ }
+ }
+ if (__kmp_affinity_type == affinity_none) {
+ KMP_ASSERT(depth == 0);
+ KMP_EXIT_AFF_NONE;
+ }
+ }
+
+# if KMP_GROUP_AFFINITY
+
+ else if (__kmp_affinity_top_method == affinity_top_method_group) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffWindowsProcGroupMap, "KMP_AFFINITY");
+ }
+
+ depth = __kmp_affinity_create_proc_group_map(&address2os, &msg_id);
+ KMP_ASSERT(depth != 0);
+ if (depth < 0) {
+ KMP_ASSERT(msg_id != kmp_i18n_null);
+ KMP_FATAL(MsgExiting, __kmp_i18n_catgets(msg_id));
+ }
+ }
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ else if (__kmp_affinity_top_method == affinity_top_method_flat) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffUsingFlatOS, "KMP_AFFINITY");
+ }
+
+ depth = __kmp_affinity_create_flat_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ // should not fail
+ KMP_ASSERT(depth > 0);
+ KMP_ASSERT(address2os != NULL);
+ }
+
+# if KMP_USE_HWLOC
+ else if (__kmp_affinity_top_method == affinity_top_method_hwloc) {
+ if (__kmp_affinity_verbose) {
+ KMP_INFORM(AffUsingHwloc, "KMP_AFFINITY");
+ }
+ depth = __kmp_affinity_create_hwloc_map(&address2os, &msg_id);
+ if (depth == 0) {
+ KMP_EXIT_AFF_NONE;
+ }
+ }
+# endif // KMP_USE_HWLOC
+
+ if (address2os == NULL) {
+ if (KMP_AFFINITY_CAPABLE()
+ && (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)))) {
+ KMP_WARNING(ErrorInitializeAffinity);
+ }
+ __kmp_affinity_type = affinity_none;
+ KMP_AFFINITY_DISABLE();
+ return;
+ }
+
+ __kmp_apply_thread_places(&address2os, depth);
+
+ //
+ // Create the table of masks, indexed by thread Id.
+ //
+ unsigned maxIndex;
+ unsigned numUnique;
+ kmp_affin_mask_t *osId2Mask = __kmp_create_masks(&maxIndex, &numUnique,
+ address2os, __kmp_avail_proc);
+ if (__kmp_affinity_gran_levels == 0) {
+ KMP_DEBUG_ASSERT((int)numUnique == __kmp_avail_proc);
+ }
+
+ //
+ // Set the childNums vector in all Address objects. This must be done
+ // before we can sort using __kmp_affinity_cmp_Address_child_num(),
+ // which takes into account the setting of __kmp_affinity_compact.
+ //
+ __kmp_affinity_assign_child_nums(address2os, __kmp_avail_proc);
+
+ switch (__kmp_affinity_type) {
+
+ case affinity_explicit:
+ KMP_DEBUG_ASSERT(__kmp_affinity_proclist != NULL);
+# if OMP_40_ENABLED
+ if (__kmp_nested_proc_bind.bind_types[0] == proc_bind_intel)
+# endif
+ {
+ __kmp_affinity_process_proclist(&__kmp_affinity_masks,
+ &__kmp_affinity_num_masks, __kmp_affinity_proclist, osId2Mask,
+ maxIndex);
+ }
+# if OMP_40_ENABLED
+ else {
+ __kmp_affinity_process_placelist(&__kmp_affinity_masks,
+ &__kmp_affinity_num_masks, __kmp_affinity_proclist, osId2Mask,
+ maxIndex);
+ }
+# endif
+ if (__kmp_affinity_num_masks == 0) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none))) {
+ KMP_WARNING(AffNoValidProcID);
+ }
+ __kmp_affinity_type = affinity_none;
+ return;
+ }
+ break;
+
+ //
+ // The other affinity types rely on sorting the Addresses according
+ // to some permutation of the machine topology tree. Set
+ // __kmp_affinity_compact and __kmp_affinity_offset appropriately,
+ // then jump to a common code fragment to do the sort and create
+ // the array of affinity masks.
+ //
+
+ case affinity_logical:
+ __kmp_affinity_compact = 0;
+ if (__kmp_affinity_offset) {
+ __kmp_affinity_offset = __kmp_nThreadsPerCore * __kmp_affinity_offset
+ % __kmp_avail_proc;
+ }
+ goto sortAddresses;
+
+ case affinity_physical:
+ if (__kmp_nThreadsPerCore > 1) {
+ __kmp_affinity_compact = 1;
+ if (__kmp_affinity_compact >= depth) {
+ __kmp_affinity_compact = 0;
+ }
+ } else {
+ __kmp_affinity_compact = 0;
+ }
+ if (__kmp_affinity_offset) {
+ __kmp_affinity_offset = __kmp_nThreadsPerCore * __kmp_affinity_offset
+ % __kmp_avail_proc;
+ }
+ goto sortAddresses;
+
+ case affinity_scatter:
+ if (__kmp_affinity_compact >= depth) {
+ __kmp_affinity_compact = 0;
+ }
+ else {
+ __kmp_affinity_compact = depth - 1 - __kmp_affinity_compact;
+ }
+ goto sortAddresses;
+
+ case affinity_compact:
+ if (__kmp_affinity_compact >= depth) {
+ __kmp_affinity_compact = depth - 1;
+ }
+ goto sortAddresses;
+
+ case affinity_balanced:
+ // Balanced works only for the case of a single package
+ if( nPackages > 1 ) {
+ if( __kmp_affinity_verbose || __kmp_affinity_warnings ) {
+ KMP_WARNING( AffBalancedNotAvail, "KMP_AFFINITY" );
+ }
+ __kmp_affinity_type = affinity_none;
+ return;
+ } else if( __kmp_affinity_uniform_topology() ) {
+ break;
+ } else { // Non-uniform topology
+
+ // Save the depth for further usage
+ __kmp_aff_depth = depth;
+
+ // Number of hyper threads per core in HT machine
+ int nth_per_core = __kmp_nThreadsPerCore;
+
+ int core_level;
+ if( nth_per_core > 1 ) {
+ core_level = depth - 2;
+ } else {
+ core_level = depth - 1;
+ }
+ int ncores = address2os[ __kmp_avail_proc - 1 ].first.labels[ core_level ] + 1;
+ int nproc = nth_per_core * ncores;
+
+ procarr = ( int * )__kmp_allocate( sizeof( int ) * nproc );
+ for( int i = 0; i < nproc; i++ ) {
+ procarr[ i ] = -1;
+ }
+
+ for( int i = 0; i < __kmp_avail_proc; i++ ) {
+ int proc = address2os[ i ].second;
+ // If depth == 3 then level=0 - package, level=1 - core, level=2 - thread.
+ // If there is only one thread per core then depth == 2: level 0 - package,
+ // level 1 - core.
+ int level = depth - 1;
+
+ // __kmp_nth_per_core == 1
+ int thread = 0;
+ int core = address2os[ i ].first.labels[ level ];
+ // If the thread level exists, that is we have more than one thread context per core
+ if( nth_per_core > 1 ) {
+ thread = address2os[ i ].first.labels[ level ] % nth_per_core;
+ core = address2os[ i ].first.labels[ level - 1 ];
+ }
+ procarr[ core * nth_per_core + thread ] = proc;
+ }
+
+ break;
+ }
+
+ sortAddresses:
+ //
+ // Allocate the gtid->affinity mask table.
+ //
+ if (__kmp_affinity_dups) {
+ __kmp_affinity_num_masks = __kmp_avail_proc;
+ }
+ else {
+ __kmp_affinity_num_masks = numUnique;
+ }
+
+# if OMP_40_ENABLED
+ if ( ( __kmp_nested_proc_bind.bind_types[0] != proc_bind_intel )
+ && ( __kmp_affinity_num_places > 0 )
+ && ( (unsigned)__kmp_affinity_num_places < __kmp_affinity_num_masks ) ) {
+ __kmp_affinity_num_masks = __kmp_affinity_num_places;
+ }
+# endif
+
+ KMP_CPU_ALLOC_ARRAY(__kmp_affinity_masks, __kmp_affinity_num_masks);
+
+ //
+ // Sort the address2os table according to the current setting of
+ // __kmp_affinity_compact, then fill out __kmp_affinity_masks.
+ //
+ qsort(address2os, __kmp_avail_proc, sizeof(*address2os),
+ __kmp_affinity_cmp_Address_child_num);
+ {
+ int i;
+ unsigned j;
+ for (i = 0, j = 0; i < __kmp_avail_proc; i++) {
+ if ((! __kmp_affinity_dups) && (! address2os[i].first.leader)) {
+ continue;
+ }
+ unsigned osId = address2os[i].second;
+ kmp_affin_mask_t *src = KMP_CPU_INDEX(osId2Mask, osId);
+ kmp_affin_mask_t *dest
+ = KMP_CPU_INDEX(__kmp_affinity_masks, j);
+ KMP_ASSERT(KMP_CPU_ISSET(osId, src));
+ KMP_CPU_COPY(dest, src);
+ if (++j >= __kmp_affinity_num_masks) {
+ break;
+ }
+ }
+ KMP_DEBUG_ASSERT(j == __kmp_affinity_num_masks);
+ }
+ break;
+
+ default:
+ KMP_ASSERT2(0, "Unexpected affinity setting");
+ }
+
+ __kmp_free(osId2Mask);
+ machine_hierarchy.init(address2os, __kmp_avail_proc);
+}
+#undef KMP_EXIT_AFF_NONE
+
+
+void
+__kmp_affinity_initialize(void)
+{
+ //
+ // Much of the code above was written assumming that if a machine was not
+ // affinity capable, then __kmp_affinity_type == affinity_none. We now
+ // explicitly represent this as __kmp_affinity_type == affinity_disabled.
+ //
+ // There are too many checks for __kmp_affinity_type == affinity_none
+ // in this code. Instead of trying to change them all, check if
+ // __kmp_affinity_type == affinity_disabled, and if so, slam it with
+ // affinity_none, call the real initialization routine, then restore
+ // __kmp_affinity_type to affinity_disabled.
+ //
+ int disabled = (__kmp_affinity_type == affinity_disabled);
+ if (! KMP_AFFINITY_CAPABLE()) {
+ KMP_ASSERT(disabled);
+ }
+ if (disabled) {
+ __kmp_affinity_type = affinity_none;
+ }
+ __kmp_aux_affinity_initialize();
+ if (disabled) {
+ __kmp_affinity_type = affinity_disabled;
+ }
+}
+
+
+void
+__kmp_affinity_uninitialize(void)
+{
+ if (__kmp_affinity_masks != NULL) {
+ KMP_CPU_FREE_ARRAY(__kmp_affinity_masks, __kmp_affinity_num_masks);
+ __kmp_affinity_masks = NULL;
+ }
+ if (__kmp_affin_fullMask != NULL) {
+ KMP_CPU_FREE(__kmp_affin_fullMask);
+ __kmp_affin_fullMask = NULL;
+ }
+ __kmp_affinity_num_masks = 0;
+# if OMP_40_ENABLED
+ __kmp_affinity_num_places = 0;
+# endif
+ if (__kmp_affinity_proclist != NULL) {
+ __kmp_free(__kmp_affinity_proclist);
+ __kmp_affinity_proclist = NULL;
+ }
+ if( address2os != NULL ) {
+ __kmp_free( address2os );
+ address2os = NULL;
+ }
+ if( procarr != NULL ) {
+ __kmp_free( procarr );
+ procarr = NULL;
+ }
+# if KMP_USE_HWLOC
+ if (__kmp_hwloc_topology != NULL) {
+ hwloc_topology_destroy(__kmp_hwloc_topology);
+ __kmp_hwloc_topology = NULL;
+ }
+# endif
+}
+
+
+void
+__kmp_affinity_set_init_mask(int gtid, int isa_root)
+{
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return;
+ }
+
+ kmp_info_t *th = (kmp_info_t *)TCR_SYNC_PTR(__kmp_threads[gtid]);
+ if (th->th.th_affin_mask == NULL) {
+ KMP_CPU_ALLOC(th->th.th_affin_mask);
+ }
+ else {
+ KMP_CPU_ZERO(th->th.th_affin_mask);
+ }
+
+ //
+ // Copy the thread mask to the kmp_info_t strucuture.
+ // If __kmp_affinity_type == affinity_none, copy the "full" mask, i.e. one
+ // that has all of the OS proc ids set, or if __kmp_affinity_respect_mask
+ // is set, then the full mask is the same as the mask of the initialization
+ // thread.
+ //
+ kmp_affin_mask_t *mask;
+ int i;
+
+# if OMP_40_ENABLED
+ if (__kmp_nested_proc_bind.bind_types[0] == proc_bind_intel)
+# endif
+ {
+ if ((__kmp_affinity_type == affinity_none) || (__kmp_affinity_type == affinity_balanced)
+ ) {
+# if KMP_GROUP_AFFINITY
+ if (__kmp_num_proc_groups > 1) {
+ return;
+ }
+# endif
+ KMP_ASSERT(__kmp_affin_fullMask != NULL);
+ i = KMP_PLACE_ALL;
+ mask = __kmp_affin_fullMask;
+ }
+ else {
+ KMP_DEBUG_ASSERT( __kmp_affinity_num_masks > 0 );
+ i = (gtid + __kmp_affinity_offset) % __kmp_affinity_num_masks;
+ mask = KMP_CPU_INDEX(__kmp_affinity_masks, i);
+ }
+ }
+# if OMP_40_ENABLED
+ else {
+ if ((! isa_root)
+ || (__kmp_nested_proc_bind.bind_types[0] == proc_bind_false)) {
+# if KMP_GROUP_AFFINITY
+ if (__kmp_num_proc_groups > 1) {
+ return;
+ }
+# endif
+ KMP_ASSERT(__kmp_affin_fullMask != NULL);
+ i = KMP_PLACE_ALL;
+ mask = __kmp_affin_fullMask;
+ }
+ else {
+ //
+ // int i = some hash function or just a counter that doesn't
+ // always start at 0. Use gtid for now.
+ //
+ KMP_DEBUG_ASSERT( __kmp_affinity_num_masks > 0 );
+ i = (gtid + __kmp_affinity_offset) % __kmp_affinity_num_masks;
+ mask = KMP_CPU_INDEX(__kmp_affinity_masks, i);
+ }
+ }
+# endif
+
+# if OMP_40_ENABLED
+ th->th.th_current_place = i;
+ if (isa_root) {
+ th->th.th_new_place = i;
+ th->th.th_first_place = 0;
+ th->th.th_last_place = __kmp_affinity_num_masks - 1;
+ }
+
+ if (i == KMP_PLACE_ALL) {
+ KA_TRACE(100, ("__kmp_affinity_set_init_mask: binding T#%d to all places\n",
+ gtid));
+ }
+ else {
+ KA_TRACE(100, ("__kmp_affinity_set_init_mask: binding T#%d to place %d\n",
+ gtid, i));
+ }
+# else
+ if (i == -1) {
+ KA_TRACE(100, ("__kmp_affinity_set_init_mask: binding T#%d to __kmp_affin_fullMask\n",
+ gtid));
+ }
+ else {
+ KA_TRACE(100, ("__kmp_affinity_set_init_mask: binding T#%d to mask %d\n",
+ gtid, i));
+ }
+# endif /* OMP_40_ENABLED */
+
+ KMP_CPU_COPY(th->th.th_affin_mask, mask);
+
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ th->th.th_affin_mask);
+ KMP_INFORM(BoundToOSProcSet, "KMP_AFFINITY", (kmp_int32)getpid(), gtid,
+ buf);
+ }
+
+# if KMP_OS_WINDOWS
+ //
+ // On Windows* OS, the process affinity mask might have changed.
+ // If the user didn't request affinity and this call fails,
+ // just continue silently. See CQ171393.
+ //
+ if ( __kmp_affinity_type == affinity_none ) {
+ __kmp_set_system_affinity(th->th.th_affin_mask, FALSE);
+ }
+ else
+# endif
+ __kmp_set_system_affinity(th->th.th_affin_mask, TRUE);
+}
+
+
+# if OMP_40_ENABLED
+
+void
+__kmp_affinity_set_place(int gtid)
+{
+ int retval;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return;
+ }
+
+ kmp_info_t *th = (kmp_info_t *)TCR_SYNC_PTR(__kmp_threads[gtid]);
+
+ KA_TRACE(100, ("__kmp_affinity_set_place: binding T#%d to place %d (current place = %d)\n",
+ gtid, th->th.th_new_place, th->th.th_current_place));
+
+ //
+ // Check that the new place is within this thread's partition.
+ //
+ KMP_DEBUG_ASSERT(th->th.th_affin_mask != NULL);
+ KMP_ASSERT(th->th.th_new_place >= 0);
+ KMP_ASSERT((unsigned)th->th.th_new_place <= __kmp_affinity_num_masks);
+ if (th->th.th_first_place <= th->th.th_last_place) {
+ KMP_ASSERT((th->th.th_new_place >= th->th.th_first_place)
+ && (th->th.th_new_place <= th->th.th_last_place));
+ }
+ else {
+ KMP_ASSERT((th->th.th_new_place <= th->th.th_first_place)
+ || (th->th.th_new_place >= th->th.th_last_place));
+ }
+
+ //
+ // Copy the thread mask to the kmp_info_t strucuture,
+ // and set this thread's affinity.
+ //
+ kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks,
+ th->th.th_new_place);
+ KMP_CPU_COPY(th->th.th_affin_mask, mask);
+ th->th.th_current_place = th->th.th_new_place;
+
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ th->th.th_affin_mask);
+ KMP_INFORM(BoundToOSProcSet, "OMP_PROC_BIND", (kmp_int32)getpid(),
+ gtid, buf);
+ }
+ __kmp_set_system_affinity(th->th.th_affin_mask, TRUE);
+}
+
+# endif /* OMP_40_ENABLED */
+
+
+int
+__kmp_aux_set_affinity(void **mask)
+{
+ int gtid;
+ kmp_info_t *th;
+ int retval;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return -1;
+ }
+
+ gtid = __kmp_entry_gtid();
+ KA_TRACE(1000, ;{
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ (kmp_affin_mask_t *)(*mask));
+ __kmp_debug_printf("kmp_set_affinity: setting affinity mask for thread %d = %s\n",
+ gtid, buf);
+ });
+
+ if (__kmp_env_consistency_check) {
+ if ((mask == NULL) || (*mask == NULL)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity");
+ }
+ else {
+ unsigned proc;
+ int num_procs = 0;
+
+ KMP_CPU_SET_ITERATE(proc, ((kmp_affin_mask_t*)(*mask))) {
+ if (! KMP_CPU_ISSET(proc, __kmp_affin_fullMask)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity");
+ }
+ if (! KMP_CPU_ISSET(proc, (kmp_affin_mask_t *)(*mask))) {
+ continue;
+ }
+ num_procs++;
+ }
+ if (num_procs == 0) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity");
+ }
+
+# if KMP_GROUP_AFFINITY
+ if (__kmp_get_proc_group((kmp_affin_mask_t *)(*mask)) < 0) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity");
+ }
+# endif /* KMP_GROUP_AFFINITY */
+
+ }
+ }
+
+ th = __kmp_threads[gtid];
+ KMP_DEBUG_ASSERT(th->th.th_affin_mask != NULL);
+ retval = __kmp_set_system_affinity((kmp_affin_mask_t *)(*mask), FALSE);
+ if (retval == 0) {
+ KMP_CPU_COPY(th->th.th_affin_mask, (kmp_affin_mask_t *)(*mask));
+ }
+
+# if OMP_40_ENABLED
+ th->th.th_current_place = KMP_PLACE_UNDEFINED;
+ th->th.th_new_place = KMP_PLACE_UNDEFINED;
+ th->th.th_first_place = 0;
+ th->th.th_last_place = __kmp_affinity_num_masks - 1;
+
+ //
+ // Turn off 4.0 affinity for the current tread at this parallel level.
+ //
+ th->th.th_current_task->td_icvs.proc_bind = proc_bind_false;
+# endif
+
+ return retval;
+}
+
+
+int
+__kmp_aux_get_affinity(void **mask)
+{
+ int gtid;
+ int retval;
+ kmp_info_t *th;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return -1;
+ }
+
+ gtid = __kmp_entry_gtid();
+ th = __kmp_threads[gtid];
+ KMP_DEBUG_ASSERT(th->th.th_affin_mask != NULL);
+
+ KA_TRACE(1000, ;{
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ th->th.th_affin_mask);
+ __kmp_printf("kmp_get_affinity: stored affinity mask for thread %d = %s\n", gtid, buf);
+ });
+
+ if (__kmp_env_consistency_check) {
+ if ((mask == NULL) || (*mask == NULL)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_get_affinity");
+ }
+ }
+
+# if !KMP_OS_WINDOWS
+
+ retval = __kmp_get_system_affinity((kmp_affin_mask_t *)(*mask), FALSE);
+ KA_TRACE(1000, ;{
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ (kmp_affin_mask_t *)(*mask));
+ __kmp_printf("kmp_get_affinity: system affinity mask for thread %d = %s\n", gtid, buf);
+ });
+ return retval;
+
+# else
+
+ KMP_CPU_COPY((kmp_affin_mask_t *)(*mask), th->th.th_affin_mask);
+ return 0;
+
+# endif /* KMP_OS_WINDOWS */
+
+}
+
+int
+__kmp_aux_set_affinity_mask_proc(int proc, void **mask)
+{
+ int retval;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return -1;
+ }
+
+ KA_TRACE(1000, ;{
+ int gtid = __kmp_entry_gtid();
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ (kmp_affin_mask_t *)(*mask));
+ __kmp_debug_printf("kmp_set_affinity_mask_proc: setting proc %d in affinity mask for thread %d = %s\n",
+ proc, gtid, buf);
+ });
+
+ if (__kmp_env_consistency_check) {
+ if ((mask == NULL) || (*mask == NULL)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity_mask_proc");
+ }
+ }
+
+ if ((proc < 0)
+# if !KMP_USE_HWLOC
+ || ((unsigned)proc >= KMP_CPU_SETSIZE)
+# endif
+ ) {
+ return -1;
+ }
+ if (! KMP_CPU_ISSET(proc, __kmp_affin_fullMask)) {
+ return -2;
+ }
+
+ KMP_CPU_SET(proc, (kmp_affin_mask_t *)(*mask));
+ return 0;
+}
+
+
+int
+__kmp_aux_unset_affinity_mask_proc(int proc, void **mask)
+{
+ int retval;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return -1;
+ }
+
+ KA_TRACE(1000, ;{
+ int gtid = __kmp_entry_gtid();
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ (kmp_affin_mask_t *)(*mask));
+ __kmp_debug_printf("kmp_unset_affinity_mask_proc: unsetting proc %d in affinity mask for thread %d = %s\n",
+ proc, gtid, buf);
+ });
+
+ if (__kmp_env_consistency_check) {
+ if ((mask == NULL) || (*mask == NULL)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_unset_affinity_mask_proc");
+ }
+ }
+
+ if ((proc < 0)
+# if !KMP_USE_HWLOC
+ || ((unsigned)proc >= KMP_CPU_SETSIZE)
+# endif
+ ) {
+ return -1;
+ }
+ if (! KMP_CPU_ISSET(proc, __kmp_affin_fullMask)) {
+ return -2;
+ }
+
+ KMP_CPU_CLR(proc, (kmp_affin_mask_t *)(*mask));
+ return 0;
+}
+
+
+int
+__kmp_aux_get_affinity_mask_proc(int proc, void **mask)
+{
+ int retval;
+
+ if (! KMP_AFFINITY_CAPABLE()) {
+ return -1;
+ }
+
+ KA_TRACE(1000, ;{
+ int gtid = __kmp_entry_gtid();
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN,
+ (kmp_affin_mask_t *)(*mask));
+ __kmp_debug_printf("kmp_get_affinity_mask_proc: getting proc %d in affinity mask for thread %d = %s\n",
+ proc, gtid, buf);
+ });
+
+ if (__kmp_env_consistency_check) {
+ if ((mask == NULL) || (*mask == NULL)) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_get_affinity_mask_proc");
+ }
+ }
+
+ if ((proc < 0)
+# if !KMP_USE_HWLOC
+ || ((unsigned)proc >= KMP_CPU_SETSIZE)
+# endif
+ ) {
+ return -1;
+ }
+ if (! KMP_CPU_ISSET(proc, __kmp_affin_fullMask)) {
+ return 0;
+ }
+
+ return KMP_CPU_ISSET(proc, (kmp_affin_mask_t *)(*mask));
+}
+
+
+// Dynamic affinity settings - Affinity balanced
+void __kmp_balanced_affinity( int tid, int nthreads )
+{
+ if( __kmp_affinity_uniform_topology() ) {
+ int coreID;
+ int threadID;
+ // Number of hyper threads per core in HT machine
+ int __kmp_nth_per_core = __kmp_avail_proc / __kmp_ncores;
+ // Number of cores
+ int ncores = __kmp_ncores;
+ // How many threads will be bound to each core
+ int chunk = nthreads / ncores;
+ // How many cores will have an additional thread bound to it - "big cores"
+ int big_cores = nthreads % ncores;
+ // Number of threads on the big cores
+ int big_nth = ( chunk + 1 ) * big_cores;
+ if( tid < big_nth ) {
+ coreID = tid / (chunk + 1 );
+ threadID = ( tid % (chunk + 1 ) ) % __kmp_nth_per_core ;
+ } else { //tid >= big_nth
+ coreID = ( tid - big_cores ) / chunk;
+ threadID = ( ( tid - big_cores ) % chunk ) % __kmp_nth_per_core ;
+ }
+
+ KMP_DEBUG_ASSERT2(KMP_AFFINITY_CAPABLE(),
+ "Illegal set affinity operation when not capable");
+
+ kmp_affin_mask_t *mask;
+ KMP_CPU_ALLOC_ON_STACK(mask);
+ KMP_CPU_ZERO(mask);
+
+ // Granularity == thread
+ if( __kmp_affinity_gran == affinity_gran_fine || __kmp_affinity_gran == affinity_gran_thread) {
+ int osID = address2os[ coreID * __kmp_nth_per_core + threadID ].second;
+ KMP_CPU_SET( osID, mask);
+ } else if( __kmp_affinity_gran == affinity_gran_core ) { // Granularity == core
+ for( int i = 0; i < __kmp_nth_per_core; i++ ) {
+ int osID;
+ osID = address2os[ coreID * __kmp_nth_per_core + i ].second;
+ KMP_CPU_SET( osID, mask);
+ }
+ }
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, mask);
+ KMP_INFORM(BoundToOSProcSet, "KMP_AFFINITY", (kmp_int32)getpid(),
+ tid, buf);
+ }
+ __kmp_set_system_affinity( mask, TRUE );
+ KMP_CPU_FREE_FROM_STACK(mask);
+ } else { // Non-uniform topology
+
+ kmp_affin_mask_t *mask;
+ KMP_CPU_ALLOC_ON_STACK(mask);
+ KMP_CPU_ZERO(mask);
+
+ // Number of hyper threads per core in HT machine
+ int nth_per_core = __kmp_nThreadsPerCore;
+ int core_level;
+ if( nth_per_core > 1 ) {
+ core_level = __kmp_aff_depth - 2;
+ } else {
+ core_level = __kmp_aff_depth - 1;
+ }
+
+ // Number of cores - maximum value; it does not count trail cores with 0 processors
+ int ncores = address2os[ __kmp_avail_proc - 1 ].first.labels[ core_level ] + 1;
+
+ // For performance gain consider the special case nthreads == __kmp_avail_proc
+ if( nthreads == __kmp_avail_proc ) {
+ if( __kmp_affinity_gran == affinity_gran_fine || __kmp_affinity_gran == affinity_gran_thread) {
+ int osID = address2os[ tid ].second;
+ KMP_CPU_SET( osID, mask);
+ } else if( __kmp_affinity_gran == affinity_gran_core ) { // Granularity == core
+ int coreID = address2os[ tid ].first.labels[ core_level ];
+ // We'll count found osIDs for the current core; they can be not more than nth_per_core;
+ // since the address2os is sortied we can break when cnt==nth_per_core
+ int cnt = 0;
+ for( int i = 0; i < __kmp_avail_proc; i++ ) {
+ int osID = address2os[ i ].second;
+ int core = address2os[ i ].first.labels[ core_level ];
+ if( core == coreID ) {
+ KMP_CPU_SET( osID, mask);
+ cnt++;
+ if( cnt == nth_per_core ) {
+ break;
+ }
+ }
+ }
+ }
+ } else if( nthreads <= __kmp_ncores ) {
+
+ int core = 0;
+ for( int i = 0; i < ncores; i++ ) {
+ // Check if this core from procarr[] is in the mask
+ int in_mask = 0;
+ for( int j = 0; j < nth_per_core; j++ ) {
+ if( procarr[ i * nth_per_core + j ] != - 1 ) {
+ in_mask = 1;
+ break;
+ }
+ }
+ if( in_mask ) {
+ if( tid == core ) {
+ for( int j = 0; j < nth_per_core; j++ ) {
+ int osID = procarr[ i * nth_per_core + j ];
+ if( osID != -1 ) {
+ KMP_CPU_SET( osID, mask );
+ // For granularity=thread it is enough to set the first available osID for this core
+ if( __kmp_affinity_gran == affinity_gran_fine || __kmp_affinity_gran == affinity_gran_thread) {
+ break;
+ }
+ }
+ }
+ break;
+ } else {
+ core++;
+ }
+ }
+ }
+
+ } else { // nthreads > __kmp_ncores
+
+ // Array to save the number of processors at each core
+ int* nproc_at_core = (int*)KMP_ALLOCA(sizeof(int)*ncores);
+ // Array to save the number of cores with "x" available processors;
+ int* ncores_with_x_procs = (int*)KMP_ALLOCA(sizeof(int)*(nth_per_core+1));
+ // Array to save the number of cores with # procs from x to nth_per_core
+ int* ncores_with_x_to_max_procs = (int*)KMP_ALLOCA(sizeof(int)*(nth_per_core+1));
+
+ for( int i = 0; i <= nth_per_core; i++ ) {
+ ncores_with_x_procs[ i ] = 0;
+ ncores_with_x_to_max_procs[ i ] = 0;
+ }
+
+ for( int i = 0; i < ncores; i++ ) {
+ int cnt = 0;
+ for( int j = 0; j < nth_per_core; j++ ) {
+ if( procarr[ i * nth_per_core + j ] != -1 ) {
+ cnt++;
+ }
+ }
+ nproc_at_core[ i ] = cnt;
+ ncores_with_x_procs[ cnt ]++;
+ }
+
+ for( int i = 0; i <= nth_per_core; i++ ) {
+ for( int j = i; j <= nth_per_core; j++ ) {
+ ncores_with_x_to_max_procs[ i ] += ncores_with_x_procs[ j ];
+ }
+ }
+
+ // Max number of processors
+ int nproc = nth_per_core * ncores;
+ // An array to keep number of threads per each context
+ int * newarr = ( int * )__kmp_allocate( sizeof( int ) * nproc );
+ for( int i = 0; i < nproc; i++ ) {
+ newarr[ i ] = 0;
+ }
+
+ int nth = nthreads;
+ int flag = 0;
+ while( nth > 0 ) {
+ for( int j = 1; j <= nth_per_core; j++ ) {
+ int cnt = ncores_with_x_to_max_procs[ j ];
+ for( int i = 0; i < ncores; i++ ) {
+ // Skip the core with 0 processors
+ if( nproc_at_core[ i ] == 0 ) {
+ continue;
+ }
+ for( int k = 0; k < nth_per_core; k++ ) {
+ if( procarr[ i * nth_per_core + k ] != -1 ) {
+ if( newarr[ i * nth_per_core + k ] == 0 ) {
+ newarr[ i * nth_per_core + k ] = 1;
+ cnt--;
+ nth--;
+ break;
+ } else {
+ if( flag != 0 ) {
+ newarr[ i * nth_per_core + k ] ++;
+ cnt--;
+ nth--;
+ break;
+ }
+ }
+ }
+ }
+ if( cnt == 0 || nth == 0 ) {
+ break;
+ }
+ }
+ if( nth == 0 ) {
+ break;
+ }
+ }
+ flag = 1;
+ }
+ int sum = 0;
+ for( int i = 0; i < nproc; i++ ) {
+ sum += newarr[ i ];
+ if( sum > tid ) {
+ // Granularity == thread
+ if( __kmp_affinity_gran == affinity_gran_fine || __kmp_affinity_gran == affinity_gran_thread) {
+ int osID = procarr[ i ];
+ KMP_CPU_SET( osID, mask);
+ } else if( __kmp_affinity_gran == affinity_gran_core ) { // Granularity == core
+ int coreID = i / nth_per_core;
+ for( int ii = 0; ii < nth_per_core; ii++ ) {
+ int osID = procarr[ coreID * nth_per_core + ii ];
+ if( osID != -1 ) {
+ KMP_CPU_SET( osID, mask);
+ }
+ }
+ }
+ break;
+ }
+ }
+ __kmp_free( newarr );
+ }
+
+ if (__kmp_affinity_verbose) {
+ char buf[KMP_AFFIN_MASK_PRINT_LEN];
+ __kmp_affinity_print_mask(buf, KMP_AFFIN_MASK_PRINT_LEN, mask);
+ KMP_INFORM(BoundToOSProcSet, "KMP_AFFINITY", (kmp_int32)getpid(),
+ tid, buf);
+ }
+ __kmp_set_system_affinity( mask, TRUE );
+ KMP_CPU_FREE_FROM_STACK(mask);
+ }
+}
+
+#if KMP_OS_LINUX
+// We don't need this entry for Windows because
+// there is GetProcessAffinityMask() api
+//
+// The intended usage is indicated by these steps:
+// 1) The user gets the current affinity mask
+// 2) Then sets the affinity by calling this function
+// 3) Error check the return value
+// 4) Use non-OpenMP parallelization
+// 5) Reset the affinity to what was stored in step 1)
+#ifdef __cplusplus
+extern "C"
+#endif
+int
+kmp_set_thread_affinity_mask_initial()
+// the function returns 0 on success,
+// -1 if we cannot bind thread
+// >0 (errno) if an error happened during binding
+{
+ int gtid = __kmp_get_gtid();
+ if (gtid < 0) {
+ // Do not touch non-omp threads
+ KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+ "non-omp thread, returning\n"));
+ return -1;
+ }
+ if (!KMP_AFFINITY_CAPABLE() || !__kmp_init_middle) {
+ KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+ "affinity not initialized, returning\n"));
+ return -1;
+ }
+ KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+ "set full mask for thread %d\n", gtid));
+ KMP_DEBUG_ASSERT(__kmp_affin_fullMask != NULL);
+ return __kmp_set_system_affinity(__kmp_affin_fullMask, FALSE);
+}
+#endif
+
+#endif // KMP_AFFINITY_SUPPORTED
diff --git a/final/runtime/src/kmp_affinity.h b/final/runtime/src/kmp_affinity.h
new file mode 100644
index 0000000..8ed3415
--- /dev/null
+++ b/final/runtime/src/kmp_affinity.h
@@ -0,0 +1,319 @@
+/*
+ * kmp_affinity.h -- header for affinity management
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef KMP_AFFINITY_H
+#define KMP_AFFINITY_H
+
+extern int __kmp_affinity_compact; /* Affinity 'compact' value */
+
+class Address {
+public:
+ static const unsigned maxDepth = 32;
+ unsigned labels[maxDepth];
+ unsigned childNums[maxDepth];
+ unsigned depth;
+ unsigned leader;
+ Address(unsigned _depth)
+ : depth(_depth), leader(FALSE) {
+ }
+ Address &operator=(const Address &b) {
+ depth = b.depth;
+ for (unsigned i = 0; i < depth; i++) {
+ labels[i] = b.labels[i];
+ childNums[i] = b.childNums[i];
+ }
+ leader = FALSE;
+ return *this;
+ }
+ bool operator==(const Address &b) const {
+ if (depth != b.depth)
+ return false;
+ for (unsigned i = 0; i < depth; i++)
+ if(labels[i] != b.labels[i])
+ return false;
+ return true;
+ }
+ bool isClose(const Address &b, int level) const {
+ if (depth != b.depth)
+ return false;
+ if ((unsigned)level >= depth)
+ return true;
+ for (unsigned i = 0; i < (depth - level); i++)
+ if(labels[i] != b.labels[i])
+ return false;
+ return true;
+ }
+ bool operator!=(const Address &b) const {
+ return !operator==(b);
+ }
+ void print() const {
+ unsigned i;
+ printf("Depth: %u --- ", depth);
+ for(i=0;i<depth;i++) {
+ printf("%u ", labels[i]);
+ }
+ }
+};
+
+class AddrUnsPair {
+public:
+ Address first;
+ unsigned second;
+ AddrUnsPair(Address _first, unsigned _second)
+ : first(_first), second(_second) {
+ }
+ AddrUnsPair &operator=(const AddrUnsPair &b)
+ {
+ first = b.first;
+ second = b.second;
+ return *this;
+ }
+ void print() const {
+ printf("first = "); first.print();
+ printf(" --- second = %u", second);
+ }
+ bool operator==(const AddrUnsPair &b) const {
+ if(first != b.first) return false;
+ if(second != b.second) return false;
+ return true;
+ }
+ bool operator!=(const AddrUnsPair &b) const {
+ return !operator==(b);
+ }
+};
+
+
+static int
+__kmp_affinity_cmp_Address_labels(const void *a, const void *b)
+{
+ const Address *aa = (const Address *)&(((AddrUnsPair *)a)
+ ->first);
+ const Address *bb = (const Address *)&(((AddrUnsPair *)b)
+ ->first);
+ unsigned depth = aa->depth;
+ unsigned i;
+ KMP_DEBUG_ASSERT(depth == bb->depth);
+ for (i = 0; i < depth; i++) {
+ if (aa->labels[i] < bb->labels[i]) return -1;
+ if (aa->labels[i] > bb->labels[i]) return 1;
+ }
+ return 0;
+}
+
+
+static int
+__kmp_affinity_cmp_Address_child_num(const void *a, const void *b)
+{
+ const Address *aa = (const Address *)&(((AddrUnsPair *)a)
+ ->first);
+ const Address *bb = (const Address *)&(((AddrUnsPair *)b)
+ ->first);
+ unsigned depth = aa->depth;
+ unsigned i;
+ KMP_DEBUG_ASSERT(depth == bb->depth);
+ KMP_DEBUG_ASSERT((unsigned)__kmp_affinity_compact <= depth);
+ KMP_DEBUG_ASSERT(__kmp_affinity_compact >= 0);
+ for (i = 0; i < (unsigned)__kmp_affinity_compact; i++) {
+ int j = depth - i - 1;
+ if (aa->childNums[j] < bb->childNums[j]) return -1;
+ if (aa->childNums[j] > bb->childNums[j]) return 1;
+ }
+ for (; i < depth; i++) {
+ int j = i - __kmp_affinity_compact;
+ if (aa->childNums[j] < bb->childNums[j]) return -1;
+ if (aa->childNums[j] > bb->childNums[j]) return 1;
+ }
+ return 0;
+}
+
+
+/** A structure for holding machine-specific hierarchy info to be computed once at init.
+ This structure represents a mapping of threads to the actual machine hierarchy, or to
+ our best guess at what the hierarchy might be, for the purpose of performing an
+ efficient barrier. In the worst case, when there is no machine hierarchy information,
+ it produces a tree suitable for a barrier, similar to the tree used in the hyper barrier. */
+class hierarchy_info {
+public:
+ /** Good default values for number of leaves and branching factor, given no affinity information.
+ Behaves a bit like hyper barrier. */
+ static const kmp_uint32 maxLeaves=4;
+ static const kmp_uint32 minBranch=4;
+ /** Number of levels in the hierarchy. Typical levels are threads/core, cores/package
+ or socket, packages/node, nodes/machine, etc. We don't want to get specific with
+ nomenclature. When the machine is oversubscribed we add levels to duplicate the
+ hierarchy, doubling the thread capacity of the hierarchy each time we add a level. */
+ kmp_uint32 maxLevels;
+
+ /** This is specifically the depth of the machine configuration hierarchy, in terms of the
+ number of levels along the longest path from root to any leaf. It corresponds to the
+ number of entries in numPerLevel if we exclude all but one trailing 1. */
+ kmp_uint32 depth;
+ kmp_uint32 base_num_threads;
+ enum init_status { initialized=0, not_initialized=1, initializing=2 };
+ volatile kmp_int8 uninitialized; // 0=initialized, 1=not initialized, 2=initialization in progress
+ volatile kmp_int8 resizing; // 0=not resizing, 1=resizing
+
+ /** Level 0 corresponds to leaves. numPerLevel[i] is the number of children the parent of a
+ node at level i has. For example, if we have a machine with 4 packages, 4 cores/package
+ and 2 HT per core, then numPerLevel = {2, 4, 4, 1, 1}. All empty levels are set to 1. */
+ kmp_uint32 *numPerLevel;
+ kmp_uint32 *skipPerLevel;
+
+ void deriveLevels(AddrUnsPair *adr2os, int num_addrs) {
+ int hier_depth = adr2os[0].first.depth;
+ int level = 0;
+ for (int i=hier_depth-1; i>=0; --i) {
+ int max = -1;
+ for (int j=0; j<num_addrs; ++j) {
+ int next = adr2os[j].first.childNums[i];
+ if (next > max) max = next;
+ }
+ numPerLevel[level] = max+1;
+ ++level;
+ }
+ }
+
+ hierarchy_info() : maxLevels(7), depth(1), uninitialized(not_initialized), resizing(0) {}
+
+ void fini() { if (!uninitialized && numPerLevel) __kmp_free(numPerLevel); }
+
+ void init(AddrUnsPair *adr2os, int num_addrs)
+ {
+ kmp_int8 bool_result = KMP_COMPARE_AND_STORE_ACQ8(&uninitialized, not_initialized, initializing);
+ if (bool_result == 0) { // Wait for initialization
+ while (TCR_1(uninitialized) != initialized) KMP_CPU_PAUSE();
+ return;
+ }
+ KMP_DEBUG_ASSERT(bool_result==1);
+
+ /* Added explicit initialization of the data fields here to prevent usage of dirty value
+ observed when static library is re-initialized multiple times (e.g. when
+ non-OpenMP thread repeatedly launches/joins thread that uses OpenMP). */
+ depth = 1;
+ resizing = 0;
+ maxLevels = 7;
+ numPerLevel = (kmp_uint32 *)__kmp_allocate(maxLevels*2*sizeof(kmp_uint32));
+ skipPerLevel = &(numPerLevel[maxLevels]);
+ for (kmp_uint32 i=0; i<maxLevels; ++i) { // init numPerLevel[*] to 1 item per level
+ numPerLevel[i] = 1;
+ skipPerLevel[i] = 1;
+ }
+
+ // Sort table by physical ID
+ if (adr2os) {
+ qsort(adr2os, num_addrs, sizeof(*adr2os), __kmp_affinity_cmp_Address_labels);
+ deriveLevels(adr2os, num_addrs);
+ }
+ else {
+ numPerLevel[0] = maxLeaves;
+ numPerLevel[1] = num_addrs/maxLeaves;
+ if (num_addrs%maxLeaves) numPerLevel[1]++;
+ }
+
+ base_num_threads = num_addrs;
+ for (int i=maxLevels-1; i>=0; --i) // count non-empty levels to get depth
+ if (numPerLevel[i] != 1 || depth > 1) // only count one top-level '1'
+ depth++;
+
+ kmp_uint32 branch = minBranch;
+ if (numPerLevel[0] == 1) branch = num_addrs/maxLeaves;
+ if (branch<minBranch) branch=minBranch;
+ for (kmp_uint32 d=0; d<depth-1; ++d) { // optimize hierarchy width
+ while (numPerLevel[d] > branch || (d==0 && numPerLevel[d]>maxLeaves)) { // max 4 on level 0!
+ if (numPerLevel[d] & 1) numPerLevel[d]++;
+ numPerLevel[d] = numPerLevel[d] >> 1;
+ if (numPerLevel[d+1] == 1) depth++;
+ numPerLevel[d+1] = numPerLevel[d+1] << 1;
+ }
+ if(numPerLevel[0] == 1) {
+ branch = branch >> 1;
+ if (branch<4) branch = minBranch;
+ }
+ }
+
+ for (kmp_uint32 i=1; i<depth; ++i)
+ skipPerLevel[i] = numPerLevel[i-1] * skipPerLevel[i-1];
+ // Fill in hierarchy in the case of oversubscription
+ for (kmp_uint32 i=depth; i<maxLevels; ++i)
+ skipPerLevel[i] = 2*skipPerLevel[i-1];
+
+ uninitialized = initialized; // One writer
+
+ }
+
+ // Resize the hierarchy if nproc changes to something larger than before
+ void resize(kmp_uint32 nproc)
+ {
+ kmp_int8 bool_result = KMP_COMPARE_AND_STORE_ACQ8(&resizing, 0, 1);
+ while (bool_result == 0) { // someone else is trying to resize
+ KMP_CPU_PAUSE();
+ if (nproc <= base_num_threads) // happy with other thread's resize
+ return;
+ else // try to resize
+ bool_result = KMP_COMPARE_AND_STORE_ACQ8(&resizing, 0, 1);
+ }
+ KMP_DEBUG_ASSERT(bool_result!=0);
+ if (nproc <= base_num_threads) return; // happy with other thread's resize
+
+ // Calculate new maxLevels
+ kmp_uint32 old_sz = skipPerLevel[depth-1];
+ kmp_uint32 incs = 0, old_maxLevels = maxLevels;
+ // First see if old maxLevels is enough to contain new size
+ for (kmp_uint32 i=depth; i<maxLevels && nproc>old_sz; ++i) {
+ skipPerLevel[i] = 2*skipPerLevel[i-1];
+ numPerLevel[i-1] *= 2;
+ old_sz *= 2;
+ depth++;
+ }
+ if (nproc > old_sz) { // Not enough space, need to expand hierarchy
+ while (nproc > old_sz) {
+ old_sz *=2;
+ incs++;
+ depth++;
+ }
+ maxLevels += incs;
+
+ // Resize arrays
+ kmp_uint32 *old_numPerLevel = numPerLevel;
+ kmp_uint32 *old_skipPerLevel = skipPerLevel;
+ numPerLevel = skipPerLevel = NULL;
+ numPerLevel = (kmp_uint32 *)__kmp_allocate(maxLevels*2*sizeof(kmp_uint32));
+ skipPerLevel = &(numPerLevel[maxLevels]);
+
+ // Copy old elements from old arrays
+ for (kmp_uint32 i=0; i<old_maxLevels; ++i) { // init numPerLevel[*] to 1 item per level
+ numPerLevel[i] = old_numPerLevel[i];
+ skipPerLevel[i] = old_skipPerLevel[i];
+ }
+
+ // Init new elements in arrays to 1
+ for (kmp_uint32 i=old_maxLevels; i<maxLevels; ++i) { // init numPerLevel[*] to 1 item per level
+ numPerLevel[i] = 1;
+ skipPerLevel[i] = 1;
+ }
+
+ // Free old arrays
+ __kmp_free(old_numPerLevel);
+ }
+
+ // Fill in oversubscription levels of hierarchy
+ for (kmp_uint32 i=old_maxLevels; i<maxLevels; ++i)
+ skipPerLevel[i] = 2*skipPerLevel[i-1];
+
+ base_num_threads = nproc;
+ resizing = 0; // One writer
+
+ }
+};
+#endif // KMP_AFFINITY_H
diff --git a/final/runtime/src/kmp_alloc.c b/final/runtime/src/kmp_alloc.c
new file mode 100644
index 0000000..af3f1db
--- /dev/null
+++ b/final/runtime/src/kmp_alloc.c
@@ -0,0 +1,2083 @@
+/*
+ * kmp_alloc.c -- private/shared dyanmic memory allocation and management
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_wrapper_malloc.h"
+#include "kmp_io.h"
+
+// Disable bget when it is not used
+#if KMP_USE_BGET
+
+/* Thread private buffer management code */
+
+typedef int (*bget_compact_t)(size_t, int);
+typedef void *(*bget_acquire_t)(size_t);
+typedef void (*bget_release_t)(void *);
+
+/* NOTE: bufsize must be a signed datatype */
+
+#if KMP_OS_WINDOWS
+# if KMP_ARCH_X86 || KMP_ARCH_ARM
+ typedef kmp_int32 bufsize;
+# else
+ typedef kmp_int64 bufsize;
+# endif
+#else
+ typedef ssize_t bufsize;
+#endif
+
+/* The three modes of operation are, fifo search, lifo search, and best-fit */
+
+typedef enum bget_mode {
+ bget_mode_fifo = 0,
+ bget_mode_lifo = 1,
+ bget_mode_best = 2
+} bget_mode_t;
+
+
+static void bpool( kmp_info_t *th, void *buffer, bufsize len);
+static void *bget( kmp_info_t *th, bufsize size);
+static void *bgetz( kmp_info_t *th, bufsize size);
+static void *bgetr( kmp_info_t *th, void *buffer, bufsize newsize);
+static void brel( kmp_info_t *th, void *buf);
+static void bectl( kmp_info_t *th, bget_compact_t compact, bget_acquire_t acquire, bget_release_t release, bufsize pool_incr );
+
+#ifdef KMP_DEBUG
+static void bstats( kmp_info_t *th, bufsize *curalloc, bufsize *totfree, bufsize *maxfree, long *nget, long *nrel);
+static void bstatse( kmp_info_t *th, bufsize *pool_incr, long *npool, long *npget, long *nprel, long *ndget, long *ndrel);
+static void bufdump( kmp_info_t *th, void *buf);
+static void bpoold( kmp_info_t *th, void *pool, int dumpalloc, int dumpfree);
+static int bpoolv( kmp_info_t *th, void *pool);
+#endif
+
+/* BGET CONFIGURATION */
+ /* Buffer allocation size quantum:
+ all buffers allocated are a
+ multiple of this size. This
+ MUST be a power of two. */
+
+ /* On IA-32 architecture with Linux* OS,
+ malloc() does not
+ ensure 16 byte alignmnent */
+
+#if KMP_ARCH_X86 || !KMP_HAVE_QUAD
+
+#define SizeQuant 8
+#define AlignType double
+
+#else
+
+#define SizeQuant 16
+#define AlignType _Quad
+
+#endif
+
+#define BufStats 1 /* Define this symbol to enable the
+ bstats() function which calculates
+ the total free space in the buffer
+ pool, the largest available
+ buffer, and the total space
+ currently allocated. */
+
+#ifdef KMP_DEBUG
+
+#define BufDump 1 /* Define this symbol to enable the
+ bpoold() function which dumps the
+ buffers in a buffer pool. */
+
+#define BufValid 1 /* Define this symbol to enable the
+ bpoolv() function for validating
+ a buffer pool. */
+
+#define DumpData 1 /* Define this symbol to enable the
+ bufdump() function which allows
+ dumping the contents of an allocated
+ or free buffer. */
+#ifdef NOT_USED_NOW
+
+#define FreeWipe 1 /* Wipe free buffers to a guaranteed
+ pattern of garbage to trip up
+ miscreants who attempt to use
+ pointers into released buffers. */
+
+#define BestFit 1 /* Use a best fit algorithm when
+ searching for space for an
+ allocation request. This uses
+ memory more efficiently, but
+ allocation will be much slower. */
+#endif /* NOT_USED_NOW */
+#endif /* KMP_DEBUG */
+
+
+static bufsize bget_bin_size[ ] = {
+ 0,
+// 1 << 6, /* .5 Cache line */
+ 1 << 7, /* 1 Cache line, new */
+ 1 << 8, /* 2 Cache lines */
+ 1 << 9, /* 4 Cache lines, new */
+ 1 << 10, /* 8 Cache lines */
+ 1 << 11, /* 16 Cache lines, new */
+ 1 << 12,
+ 1 << 13, /* new */
+ 1 << 14,
+ 1 << 15, /* new */
+ 1 << 16,
+ 1 << 17,
+ 1 << 18,
+ 1 << 19,
+ 1 << 20, /* 1MB */
+ 1 << 21, /* 2MB */
+ 1 << 22, /* 4MB */
+ 1 << 23, /* 8MB */
+ 1 << 24, /* 16MB */
+ 1 << 25, /* 32MB */
+};
+
+#define MAX_BGET_BINS (int)(sizeof(bget_bin_size) / sizeof(bufsize))
+
+struct bfhead;
+
+/* Declare the interface, including the requested buffer size type,
+ bufsize. */
+
+/* Queue links */
+
+typedef struct qlinks {
+ struct bfhead *flink; /* Forward link */
+ struct bfhead *blink; /* Backward link */
+} qlinks_t;
+
+/* Header in allocated and free buffers */
+
+typedef struct bhead2 {
+ kmp_info_t *bthr; /* The thread which owns the buffer pool */
+ bufsize prevfree; /* Relative link back to previous
+ free buffer in memory or 0 if
+ previous buffer is allocated. */
+ bufsize bsize; /* Buffer size: positive if free,
+ negative if allocated. */
+} bhead2_t;
+
+/* Make sure the bhead structure is a multiple of SizeQuant in size. */
+
+typedef union bhead {
+ KMP_ALIGN( SizeQuant )
+ AlignType b_align;
+ char b_pad[ sizeof(bhead2_t) + (SizeQuant - (sizeof(bhead2_t) % SizeQuant)) ];
+ bhead2_t bb;
+} bhead_t;
+#define BH(p) ((bhead_t *) (p))
+
+/* Header in directly allocated buffers (by acqfcn) */
+
+typedef struct bdhead
+{
+ bufsize tsize; /* Total size, including overhead */
+ bhead_t bh; /* Common header */
+} bdhead_t;
+#define BDH(p) ((bdhead_t *) (p))
+
+/* Header in free buffers */
+
+typedef struct bfhead {
+ bhead_t bh; /* Common allocated/free header */
+ qlinks_t ql; /* Links on free list */
+} bfhead_t;
+#define BFH(p) ((bfhead_t *) (p))
+
+typedef struct thr_data {
+ bfhead_t freelist[ MAX_BGET_BINS ];
+#if BufStats
+ size_t totalloc; /* Total space currently allocated */
+ long numget, numrel; /* Number of bget() and brel() calls */
+ long numpblk; /* Number of pool blocks */
+ long numpget, numprel; /* Number of block gets and rels */
+ long numdget, numdrel; /* Number of direct gets and rels */
+#endif /* BufStats */
+
+ /* Automatic expansion block management functions */
+ bget_compact_t compfcn;
+ bget_acquire_t acqfcn;
+ bget_release_t relfcn;
+
+ bget_mode_t mode; /* what allocation mode to use? */
+
+ bufsize exp_incr; /* Expansion block size */
+ bufsize pool_len; /* 0: no bpool calls have been made
+ -1: not all pool blocks are
+ the same size
+ >0: (common) block size for all
+ bpool calls made so far
+ */
+ bfhead_t * last_pool; /* Last pool owned by this thread (delay dealocation) */
+} thr_data_t;
+
+/* Minimum allocation quantum: */
+
+#define QLSize (sizeof(qlinks_t))
+#define SizeQ ((SizeQuant > QLSize) ? SizeQuant : QLSize)
+#define MaxSize (bufsize)( ~ ( ( (bufsize)( 1 ) << ( sizeof( bufsize ) * CHAR_BIT - 1 ) ) | ( SizeQuant - 1 ) ) )
+ // Maximun for the requested size.
+
+/* End sentinel: value placed in bsize field of dummy block delimiting
+ end of pool block. The most negative number which will fit in a
+ bufsize, defined in a way that the compiler will accept. */
+
+#define ESent ((bufsize) (-(((((bufsize)1)<<((int)sizeof(bufsize)*8-2))-1)*2)-2))
+
+/* ------------------------------------------------------------------------ */
+
+/* Thread Data management routines */
+
+static int
+bget_get_bin( bufsize size )
+{
+ // binary chop bins
+ int lo = 0, hi = MAX_BGET_BINS - 1;
+
+ KMP_DEBUG_ASSERT( size > 0 );
+
+ while ( (hi - lo) > 1 ) {
+ int mid = (lo + hi) >> 1;
+ if (size < bget_bin_size[ mid ])
+ hi = mid - 1;
+ else
+ lo = mid;
+ }
+
+ KMP_DEBUG_ASSERT( (lo >= 0) && (lo < MAX_BGET_BINS) );
+
+ return lo;
+}
+
+static void
+set_thr_data( kmp_info_t *th )
+{
+ int i;
+ thr_data_t *data;
+
+ data =
+ (thr_data_t *)(
+ ( ! th->th.th_local.bget_data ) ? __kmp_allocate( sizeof( *data ) ) : th->th.th_local.bget_data
+ );
+
+ memset( data, '\0', sizeof( *data ) );
+
+ for (i = 0; i < MAX_BGET_BINS; ++i) {
+ data->freelist[ i ].ql.flink = & data->freelist[ i ];
+ data->freelist[ i ].ql.blink = & data->freelist[ i ];
+ }
+
+ th->th.th_local.bget_data = data;
+ th->th.th_local.bget_list = 0;
+#if ! USE_CMP_XCHG_FOR_BGET
+#ifdef USE_QUEUING_LOCK_FOR_BGET
+ __kmp_init_lock( & th->th.th_local.bget_lock );
+#else
+ __kmp_init_bootstrap_lock( & th->th.th_local.bget_lock );
+#endif /* USE_LOCK_FOR_BGET */
+#endif /* ! USE_CMP_XCHG_FOR_BGET */
+}
+
+static thr_data_t *
+get_thr_data( kmp_info_t *th )
+{
+ thr_data_t *data;
+
+ data = (thr_data_t *) th->th.th_local.bget_data;
+
+ KMP_DEBUG_ASSERT( data != 0 );
+
+ return data;
+}
+
+
+#ifdef KMP_DEBUG
+
+static void
+__kmp_bget_validate_queue( kmp_info_t *th )
+{
+ /* NOTE: assume that the global_lock is held */
+
+ void *p = (void *) th->th.th_local.bget_list;
+
+ while (p != 0) {
+ bfhead_t *b = BFH(((char *) p) - sizeof(bhead_t));
+
+ KMP_DEBUG_ASSERT(b->bh.bb.bsize != 0);
+ p = (void *) b->ql.flink;
+ }
+}
+
+#endif
+
+/* Walk the free list and release the enqueued buffers */
+
+static void
+__kmp_bget_dequeue( kmp_info_t *th )
+{
+ void *p = TCR_SYNC_PTR(th->th.th_local.bget_list);
+
+ if (p != 0) {
+ #if USE_CMP_XCHG_FOR_BGET
+ {
+ volatile void *old_value = TCR_SYNC_PTR(th->th.th_local.bget_list);
+ while ( ! KMP_COMPARE_AND_STORE_PTR(
+ & th->th.th_local.bget_list, old_value, NULL ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_SYNC_PTR(th->th.th_local.bget_list);
+ }
+ p = (void *) old_value;
+ }
+ #else /* ! USE_CMP_XCHG_FOR_BGET */
+ #ifdef USE_QUEUING_LOCK_FOR_BGET
+ __kmp_acquire_lock( & th->th.th_local.bget_lock,
+ __kmp_gtid_from_thread(th) );
+ #else
+ __kmp_acquire_bootstrap_lock( & th->th.th_local.bget_lock );
+ #endif /* USE_QUEUING_LOCK_FOR_BGET */
+
+ p = (void *) th->th.th_local.bget_list;
+ th->th.th_local.bget_list = 0;
+
+ #ifdef USE_QUEUING_LOCK_FOR_BGET
+ __kmp_release_lock( & th->th.th_local.bget_lock,
+ __kmp_gtid_from_thread(th) );
+ #else
+ __kmp_release_bootstrap_lock( & th->th.th_local.bget_lock );
+ #endif
+ #endif /* USE_CMP_XCHG_FOR_BGET */
+
+ /* Check again to make sure the list is not empty */
+
+ while (p != 0) {
+ void *buf = p;
+ bfhead_t *b = BFH(((char *) p) - sizeof(bhead_t));
+
+ KMP_DEBUG_ASSERT( b->bh.bb.bsize != 0 );
+ KMP_DEBUG_ASSERT( ( (kmp_uintptr_t)TCR_PTR(b->bh.bb.bthr) & ~1 ) ==
+ (kmp_uintptr_t)th ); // clear possible mark
+ KMP_DEBUG_ASSERT( b->ql.blink == 0 );
+
+ p = (void *) b->ql.flink;
+
+ brel( th, buf );
+ }
+ }
+}
+
+/* Chain together the free buffers by using the thread owner field */
+
+static void
+__kmp_bget_enqueue( kmp_info_t *th, void *buf
+#ifdef USE_QUEUING_LOCK_FOR_BGET
+ , kmp_int32 rel_gtid
+#endif
+ )
+{
+ bfhead_t *b = BFH(((char *) buf) - sizeof(bhead_t));
+
+ KMP_DEBUG_ASSERT( b->bh.bb.bsize != 0 );
+ KMP_DEBUG_ASSERT( ( (kmp_uintptr_t)TCR_PTR(b->bh.bb.bthr) & ~1 ) ==
+ (kmp_uintptr_t)th ); // clear possible mark
+
+ b->ql.blink = 0;
+
+ KC_TRACE( 10, ( "__kmp_bget_enqueue: moving buffer to T#%d list\n",
+ __kmp_gtid_from_thread( th ) ) );
+
+#if USE_CMP_XCHG_FOR_BGET
+ {
+ volatile void *old_value = TCR_PTR(th->th.th_local.bget_list);
+ /* the next pointer must be set before setting bget_list to buf to avoid
+ exposing a broken list to other threads, even for an instant. */
+ b->ql.flink = BFH( old_value );
+
+ while ( ! KMP_COMPARE_AND_STORE_PTR(
+ & th->th.th_local.bget_list, old_value, buf ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_PTR(th->th.th_local.bget_list);
+ /* the next pointer must be set before setting bget_list to buf to avoid
+ exposing a broken list to other threads, even for an instant. */
+ b->ql.flink = BFH( old_value );
+ }
+ }
+#else /* ! USE_CMP_XCHG_FOR_BGET */
+# ifdef USE_QUEUING_LOCK_FOR_BGET
+ __kmp_acquire_lock( & th->th.th_local.bget_lock, rel_gtid );
+# else
+ __kmp_acquire_bootstrap_lock( & th->th.th_local.bget_lock );
+ # endif
+
+ b->ql.flink = BFH( th->th.th_local.bget_list );
+ th->th.th_local.bget_list = (void *) buf;
+
+# ifdef USE_QUEUING_LOCK_FOR_BGET
+ __kmp_release_lock( & th->th.th_local.bget_lock, rel_gtid );
+# else
+ __kmp_release_bootstrap_lock( & th->th.th_local.bget_lock );
+# endif
+#endif /* USE_CMP_XCHG_FOR_BGET */
+}
+
+/* insert buffer back onto a new freelist */
+
+static void
+__kmp_bget_insert_into_freelist( thr_data_t *thr, bfhead_t *b )
+{
+ int bin;
+
+ KMP_DEBUG_ASSERT( ((size_t)b ) % SizeQuant == 0 );
+ KMP_DEBUG_ASSERT( b->bh.bb.bsize % SizeQuant == 0 );
+
+ bin = bget_get_bin( b->bh.bb.bsize );
+
+ KMP_DEBUG_ASSERT(thr->freelist[ bin ].ql.blink->ql.flink == &thr->freelist[ bin ]);
+ KMP_DEBUG_ASSERT(thr->freelist[ bin ].ql.flink->ql.blink == &thr->freelist[ bin ]);
+
+ b->ql.flink = &thr->freelist[ bin ];
+ b->ql.blink = thr->freelist[ bin ].ql.blink;
+
+ thr->freelist[ bin ].ql.blink = b;
+ b->ql.blink->ql.flink = b;
+}
+
+/* unlink the buffer from the old freelist */
+
+static void
+__kmp_bget_remove_from_freelist( bfhead_t *b )
+{
+ KMP_DEBUG_ASSERT(b->ql.blink->ql.flink == b);
+ KMP_DEBUG_ASSERT(b->ql.flink->ql.blink == b);
+
+ b->ql.blink->ql.flink = b->ql.flink;
+ b->ql.flink->ql.blink = b->ql.blink;
+}
+
+/* ------------------------------------------------------------------------ */
+
+/* GET STATS -- check info on free list */
+
+static void
+bcheck( kmp_info_t *th, bufsize *max_free, bufsize *total_free )
+{
+ thr_data_t *thr = get_thr_data( th );
+ int bin;
+
+ *total_free = *max_free = 0;
+
+ for (bin = 0; bin < MAX_BGET_BINS; ++bin) {
+ bfhead_t *b, *best;
+
+ best = &thr->freelist[ bin ];
+ b = best->ql.flink;
+
+ while (b != &thr->freelist[ bin ]) {
+ *total_free += (b->bh.bb.bsize - sizeof( bhead_t ));
+ if ((best == &thr->freelist[ bin ]) || (b->bh.bb.bsize < best->bh.bb.bsize))
+ best = b;
+
+ /* Link to next buffer */
+ b = b->ql.flink;
+ }
+
+ if (*max_free < best->bh.bb.bsize)
+ *max_free = best->bh.bb.bsize;
+ }
+
+ if (*max_free > (bufsize)sizeof( bhead_t ))
+ *max_free -= sizeof( bhead_t );
+}
+
+/* ------------------------------------------------------------------------ */
+
+/* BGET -- Allocate a buffer. */
+
+static void *
+bget( kmp_info_t *th, bufsize requested_size )
+{
+ thr_data_t *thr = get_thr_data( th );
+ bufsize size = requested_size;
+ bfhead_t *b;
+ void *buf;
+ int compactseq = 0;
+ int use_blink = 0;
+/* For BestFit */
+ bfhead_t *best;
+
+ if ( size < 0 || size + sizeof( bhead_t ) > MaxSize ) {
+ return NULL;
+ }; // if
+
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+
+ if (size < (bufsize)SizeQ) { /* Need at least room for the */
+ size = SizeQ; /* queue links. */
+ }
+ #if defined( SizeQuant ) && ( SizeQuant > 1 )
+ size = (size + (SizeQuant - 1)) & (~(SizeQuant - 1));
+ #endif
+
+ size += sizeof(bhead_t); /* Add overhead in allocated buffer
+ to size required. */
+ KMP_DEBUG_ASSERT( size >= 0 );
+ KMP_DEBUG_ASSERT( size % SizeQuant == 0 );
+
+ use_blink = ( thr->mode == bget_mode_lifo );
+
+ /* If a compact function was provided in the call to bectl(), wrap
+ a loop around the allocation process to allow compaction to
+ intervene in case we don't find a suitable buffer in the chain. */
+
+ for (;;) {
+ int bin;
+
+ for (bin = bget_get_bin( size ); bin < MAX_BGET_BINS; ++bin) {
+ /* Link to next buffer */
+ b = ( use_blink ? thr->freelist[ bin ].ql.blink : thr->freelist[ bin ].ql.flink );
+
+ if (thr->mode == bget_mode_best) {
+ best = &thr->freelist[ bin ];
+
+ /* Scan the free list searching for the first buffer big enough
+ to hold the requested size buffer. */
+
+ while (b != &thr->freelist[ bin ]) {
+ if (b->bh.bb.bsize >= (bufsize) size) {
+ if ((best == &thr->freelist[ bin ]) || (b->bh.bb.bsize < best->bh.bb.bsize)) {
+ best = b;
+ }
+ }
+
+ /* Link to next buffer */
+ b = ( use_blink ? b->ql.blink : b->ql.flink );
+ }
+ b = best;
+ }
+
+ while (b != &thr->freelist[ bin ]) {
+ if ((bufsize) b->bh.bb.bsize >= (bufsize) size) {
+
+ /* Buffer is big enough to satisfy the request. Allocate it
+ to the caller. We must decide whether the buffer is large
+ enough to split into the part given to the caller and a
+ free buffer that remains on the free list, or whether the
+ entire buffer should be removed from the free list and
+ given to the caller in its entirety. We only split the
+ buffer if enough room remains for a header plus the minimum
+ quantum of allocation. */
+
+ if ((b->bh.bb.bsize - (bufsize) size) > (bufsize)(SizeQ + (sizeof(bhead_t)))) {
+ bhead_t *ba, *bn;
+
+ ba = BH(((char *) b) + (b->bh.bb.bsize - (bufsize) size));
+ bn = BH(((char *) ba) + size);
+
+ KMP_DEBUG_ASSERT(bn->bb.prevfree == b->bh.bb.bsize);
+
+ /* Subtract size from length of free block. */
+ b->bh.bb.bsize -= (bufsize) size;
+
+ /* Link allocated buffer to the previous free buffer. */
+ ba->bb.prevfree = b->bh.bb.bsize;
+
+ /* Plug negative size into user buffer. */
+ ba->bb.bsize = -size;
+
+ /* Mark this buffer as owned by this thread. */
+ TCW_PTR(ba->bb.bthr, th); // not an allocated address (do not mark it)
+ /* Mark buffer after this one not preceded by free block. */
+ bn->bb.prevfree = 0;
+
+ /* unlink the buffer from the old freelist, and reinsert it into the new freelist */
+ __kmp_bget_remove_from_freelist( b );
+ __kmp_bget_insert_into_freelist( thr, b );
+#if BufStats
+ thr->totalloc += (size_t) size;
+ thr->numget++; /* Increment number of bget() calls */
+#endif
+ buf = (void *) ((((char *) ba) + sizeof(bhead_t)));
+ KMP_DEBUG_ASSERT( ((size_t)buf) % SizeQuant == 0 );
+ return buf;
+ } else {
+ bhead_t *ba;
+
+ ba = BH(((char *) b) + b->bh.bb.bsize);
+
+ KMP_DEBUG_ASSERT(ba->bb.prevfree == b->bh.bb.bsize);
+
+ /* The buffer isn't big enough to split. Give the whole
+ shebang to the caller and remove it from the free list. */
+
+ __kmp_bget_remove_from_freelist( b );
+#if BufStats
+ thr->totalloc += (size_t) b->bh.bb.bsize;
+ thr->numget++; /* Increment number of bget() calls */
+#endif
+ /* Negate size to mark buffer allocated. */
+ b->bh.bb.bsize = -(b->bh.bb.bsize);
+
+ /* Mark this buffer as owned by this thread. */
+ TCW_PTR(ba->bb.bthr, th); // not an allocated address (do not mark it)
+ /* Zero the back pointer in the next buffer in memory
+ to indicate that this buffer is allocated. */
+ ba->bb.prevfree = 0;
+
+ /* Give user buffer starting at queue links. */
+ buf = (void *) &(b->ql);
+ KMP_DEBUG_ASSERT( ((size_t)buf) % SizeQuant == 0 );
+ return buf;
+ }
+ }
+
+ /* Link to next buffer */
+ b = ( use_blink ? b->ql.blink : b->ql.flink );
+ }
+ }
+
+ /* We failed to find a buffer. If there's a compact function
+ defined, notify it of the size requested. If it returns
+ TRUE, try the allocation again. */
+
+ if ((thr->compfcn == 0) || (!(*thr->compfcn)(size, ++compactseq))) {
+ break;
+ }
+ }
+
+ /* No buffer available with requested size free. */
+
+ /* Don't give up yet -- look in the reserve supply. */
+
+ if (thr->acqfcn != 0) {
+ if (size > (bufsize) (thr->exp_incr - sizeof(bhead_t))) {
+
+ /* Request is too large to fit in a single expansion
+ block. Try to satisy it by a direct buffer acquisition. */
+
+ bdhead_t *bdh;
+
+ size += sizeof(bdhead_t) - sizeof(bhead_t);
+
+ KE_TRACE( 10, ("%%%%%% MALLOC( %d )\n", (int) size ) );
+
+ /* richryan */
+ bdh = BDH((*thr->acqfcn)((bufsize) size));
+ if (bdh != NULL) {
+
+ /* Mark the buffer special by setting the size field
+ of its header to zero. */
+ bdh->bh.bb.bsize = 0;
+
+ /* Mark this buffer as owned by this thread. */
+ TCW_PTR(bdh->bh.bb.bthr, th); // don't mark buffer as allocated,
+ // because direct buffer never goes to free list
+ bdh->bh.bb.prevfree = 0;
+ bdh->tsize = size;
+#if BufStats
+ thr->totalloc += (size_t) size;
+ thr->numget++; /* Increment number of bget() calls */
+ thr->numdget++; /* Direct bget() call count */
+#endif
+ buf = (void *) (bdh + 1);
+ KMP_DEBUG_ASSERT( ((size_t)buf) % SizeQuant == 0 );
+ return buf;
+ }
+
+ } else {
+
+ /* Try to obtain a new expansion block */
+
+ void *newpool;
+
+ KE_TRACE( 10, ("%%%%%% MALLOCB( %d )\n", (int) thr->exp_incr ) );
+
+ /* richryan */
+ newpool = (*thr->acqfcn)((bufsize) thr->exp_incr);
+ KMP_DEBUG_ASSERT( ((size_t)newpool) % SizeQuant == 0 );
+ if (newpool != NULL) {
+ bpool( th, newpool, thr->exp_incr);
+ buf = bget( th, requested_size); /* This can't, I say, can't get into a loop. */
+ return buf;
+ }
+ }
+ }
+
+ /* Still no buffer available */
+
+ return NULL;
+}
+
+/* BGETZ -- Allocate a buffer and clear its contents to zero. We clear
+ the entire contents of the buffer to zero, not just the
+ region requested by the caller. */
+
+static void *
+bgetz( kmp_info_t *th, bufsize size )
+{
+ char *buf = (char *) bget( th, size);
+
+ if (buf != NULL) {
+ bhead_t *b;
+ bufsize rsize;
+
+ b = BH(buf - sizeof(bhead_t));
+ rsize = -(b->bb.bsize);
+ if (rsize == 0) {
+ bdhead_t *bd;
+
+ bd = BDH(buf - sizeof(bdhead_t));
+ rsize = bd->tsize - (bufsize) sizeof(bdhead_t);
+ } else {
+ rsize -= sizeof(bhead_t);
+ }
+
+ KMP_DEBUG_ASSERT(rsize >= size);
+
+ (void) memset(buf, 0, (bufsize) rsize);
+ }
+ return ((void *) buf);
+}
+
+/* BGETR -- Reallocate a buffer. This is a minimal implementation,
+ simply in terms of brel() and bget(). It could be
+ enhanced to allow the buffer to grow into adjacent free
+ blocks and to avoid moving data unnecessarily. */
+
+static void *
+bgetr( kmp_info_t *th, void *buf, bufsize size)
+{
+ void *nbuf;
+ bufsize osize; /* Old size of buffer */
+ bhead_t *b;
+
+ nbuf = bget( th, size );
+ if ( nbuf == NULL ) { /* Acquire new buffer */
+ return NULL;
+ }
+ if ( buf == NULL ) {
+ return nbuf;
+ }
+ b = BH(((char *) buf) - sizeof(bhead_t));
+ osize = -b->bb.bsize;
+ if (osize == 0) {
+ /* Buffer acquired directly through acqfcn. */
+ bdhead_t *bd;
+
+ bd = BDH(((char *) buf) - sizeof(bdhead_t));
+ osize = bd->tsize - (bufsize) sizeof(bdhead_t);
+ } else {
+ osize -= sizeof(bhead_t);
+ };
+
+ KMP_DEBUG_ASSERT(osize > 0);
+
+ (void) KMP_MEMCPY((char *) nbuf, (char *) buf, /* Copy the data */
+ (size_t) ((size < osize) ? size : osize));
+ brel( th, buf );
+
+ return nbuf;
+}
+
+/* BREL -- Release a buffer. */
+
+static void
+brel( kmp_info_t *th, void *buf )
+{
+ thr_data_t *thr = get_thr_data( th );
+ bfhead_t *b, *bn;
+ kmp_info_t *bth;
+
+ KMP_DEBUG_ASSERT(buf != NULL);
+ KMP_DEBUG_ASSERT( ((size_t)buf) % SizeQuant == 0 );
+
+ b = BFH(((char *) buf) - sizeof(bhead_t));
+
+ if (b->bh.bb.bsize == 0) { /* Directly-acquired buffer? */
+ bdhead_t *bdh;
+
+ bdh = BDH(((char *) buf) - sizeof(bdhead_t));
+ KMP_DEBUG_ASSERT(b->bh.bb.prevfree == 0);
+#if BufStats
+ thr->totalloc -= (size_t) bdh->tsize;
+ thr->numdrel++; /* Number of direct releases */
+ thr->numrel++; /* Increment number of brel() calls */
+#endif /* BufStats */
+#ifdef FreeWipe
+ (void) memset((char *) buf, 0x55,
+ (size_t) (bdh->tsize - sizeof(bdhead_t)));
+#endif /* FreeWipe */
+
+ KE_TRACE( 10, ("%%%%%% FREE( %p )\n", (void *) bdh ) );
+
+ KMP_DEBUG_ASSERT( thr->relfcn != 0 );
+ (*thr->relfcn)((void *) bdh); /* Release it directly. */
+ return;
+ }
+
+ bth = (kmp_info_t *)( (kmp_uintptr_t)TCR_PTR(b->bh.bb.bthr) & ~1 ); // clear possible mark before comparison
+ if ( bth != th ) {
+ /* Add this buffer to be released by the owning thread later */
+ __kmp_bget_enqueue( bth, buf
+#ifdef USE_QUEUING_LOCK_FOR_BGET
+ , __kmp_gtid_from_thread( th )
+#endif
+ );
+ return;
+ }
+
+ /* Buffer size must be negative, indicating that the buffer is
+ allocated. */
+
+ if (b->bh.bb.bsize >= 0) {
+ bn = NULL;
+ }
+ KMP_DEBUG_ASSERT(b->bh.bb.bsize < 0);
+
+ /* Back pointer in next buffer must be zero, indicating the
+ same thing: */
+
+ KMP_DEBUG_ASSERT(BH((char *) b - b->bh.bb.bsize)->bb.prevfree == 0);
+
+#if BufStats
+ thr->numrel++; /* Increment number of brel() calls */
+ thr->totalloc += (size_t) b->bh.bb.bsize;
+#endif
+
+ /* If the back link is nonzero, the previous buffer is free. */
+
+ if (b->bh.bb.prevfree != 0) {
+ /* The previous buffer is free. Consolidate this buffer with it
+ by adding the length of this buffer to the previous free
+ buffer. Note that we subtract the size in the buffer being
+ released, since it's negative to indicate that the buffer is
+ allocated. */
+
+ register bufsize size = b->bh.bb.bsize;
+
+ /* Make the previous buffer the one we're working on. */
+ KMP_DEBUG_ASSERT(BH((char *) b - b->bh.bb.prevfree)->bb.bsize == b->bh.bb.prevfree);
+ b = BFH(((char *) b) - b->bh.bb.prevfree);
+ b->bh.bb.bsize -= size;
+
+ /* unlink the buffer from the old freelist */
+ __kmp_bget_remove_from_freelist( b );
+ }
+ else {
+ /* The previous buffer isn't allocated. Mark this buffer
+ size as positive (i.e. free) and fall through to place
+ the buffer on the free list as an isolated free block. */
+
+ b->bh.bb.bsize = -b->bh.bb.bsize;
+ }
+
+ /* insert buffer back onto a new freelist */
+ __kmp_bget_insert_into_freelist( thr, b );
+
+
+ /* Now we look at the next buffer in memory, located by advancing from
+ the start of this buffer by its size, to see if that buffer is
+ free. If it is, we combine this buffer with the next one in
+ memory, dechaining the second buffer from the free list. */
+
+ bn = BFH(((char *) b) + b->bh.bb.bsize);
+ if (bn->bh.bb.bsize > 0) {
+
+ /* The buffer is free. Remove it from the free list and add
+ its size to that of our buffer. */
+
+ KMP_DEBUG_ASSERT(BH((char *) bn + bn->bh.bb.bsize)->bb.prevfree == bn->bh.bb.bsize);
+
+ __kmp_bget_remove_from_freelist( bn );
+
+ b->bh.bb.bsize += bn->bh.bb.bsize;
+
+ /* unlink the buffer from the old freelist, and reinsert it into the new freelist */
+
+ __kmp_bget_remove_from_freelist( b );
+ __kmp_bget_insert_into_freelist( thr, b );
+
+ /* Finally, advance to the buffer that follows the newly
+ consolidated free block. We must set its backpointer to the
+ head of the consolidated free block. We know the next block
+ must be an allocated block because the process of recombination
+ guarantees that two free blocks will never be contiguous in
+ memory. */
+
+ bn = BFH(((char *) b) + b->bh.bb.bsize);
+ }
+#ifdef FreeWipe
+ (void) memset(((char *) b) + sizeof(bfhead_t), 0x55,
+ (size_t) (b->bh.bb.bsize - sizeof(bfhead_t)));
+#endif
+ KMP_DEBUG_ASSERT(bn->bh.bb.bsize < 0);
+
+ /* The next buffer is allocated. Set the backpointer in it to point
+ to this buffer; the previous free buffer in memory. */
+
+ bn->bh.bb.prevfree = b->bh.bb.bsize;
+
+ /* If a block-release function is defined, and this free buffer
+ constitutes the entire block, release it. Note that pool_len
+ is defined in such a way that the test will fail unless all
+ pool blocks are the same size. */
+
+ if (thr->relfcn != 0 &&
+ b->bh.bb.bsize == (bufsize)(thr->pool_len - sizeof(bhead_t)))
+ {
+#if BufStats
+ if (thr->numpblk != 1) { /* Do not release the last buffer until finalization time */
+#endif
+
+ KMP_DEBUG_ASSERT(b->bh.bb.prevfree == 0);
+ KMP_DEBUG_ASSERT(BH((char *) b + b->bh.bb.bsize)->bb.bsize == ESent);
+ KMP_DEBUG_ASSERT(BH((char *) b + b->bh.bb.bsize)->bb.prevfree == b->bh.bb.bsize);
+
+ /* Unlink the buffer from the free list */
+ __kmp_bget_remove_from_freelist( b );
+
+ KE_TRACE( 10, ("%%%%%% FREE( %p )\n", (void *) b ) );
+
+ (*thr->relfcn)(b);
+#if BufStats
+ thr->numprel++; /* Nr of expansion block releases */
+ thr->numpblk--; /* Total number of blocks */
+ KMP_DEBUG_ASSERT(thr->numpblk == thr->numpget - thr->numprel);
+
+ /* avoid leaving stale last_pool pointer around if it is being dealloced */
+ if (thr->last_pool == b) thr->last_pool = 0;
+ }
+ else {
+ thr->last_pool = b;
+ }
+#endif /* BufStats */
+ }
+}
+
+/* BECTL -- Establish automatic pool expansion control */
+
+static void
+bectl( kmp_info_t *th, bget_compact_t compact, bget_acquire_t acquire, bget_release_t release, bufsize pool_incr)
+{
+ thr_data_t *thr = get_thr_data( th );
+
+ thr->compfcn = compact;
+ thr->acqfcn = acquire;
+ thr->relfcn = release;
+ thr->exp_incr = pool_incr;
+}
+
+/* BPOOL -- Add a region of memory to the buffer pool. */
+
+static void
+bpool( kmp_info_t *th, void *buf, bufsize len)
+{
+/* int bin = 0; */
+ thr_data_t *thr = get_thr_data( th );
+ bfhead_t *b = BFH(buf);
+ bhead_t *bn;
+
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+
+#ifdef SizeQuant
+ len &= ~(SizeQuant - 1);
+#endif
+ if (thr->pool_len == 0) {
+ thr->pool_len = len;
+ } else if (len != thr->pool_len) {
+ thr->pool_len = -1;
+ }
+#if BufStats
+ thr->numpget++; /* Number of block acquisitions */
+ thr->numpblk++; /* Number of blocks total */
+ KMP_DEBUG_ASSERT(thr->numpblk == thr->numpget - thr->numprel);
+#endif /* BufStats */
+
+ /* Since the block is initially occupied by a single free buffer,
+ it had better not be (much) larger than the largest buffer
+ whose size we can store in bhead.bb.bsize. */
+
+ KMP_DEBUG_ASSERT(len - sizeof(bhead_t) <= -((bufsize) ESent + 1));
+
+ /* Clear the backpointer at the start of the block to indicate that
+ there is no free block prior to this one. That blocks
+ recombination when the first block in memory is released. */
+
+ b->bh.bb.prevfree = 0;
+
+ /* Create a dummy allocated buffer at the end of the pool. This dummy
+ buffer is seen when a buffer at the end of the pool is released and
+ blocks recombination of the last buffer with the dummy buffer at
+ the end. The length in the dummy buffer is set to the largest
+ negative number to denote the end of the pool for diagnostic
+ routines (this specific value is not counted on by the actual
+ allocation and release functions). */
+
+ len -= sizeof(bhead_t);
+ b->bh.bb.bsize = (bufsize) len;
+ /* Set the owner of this buffer */
+ TCW_PTR( b->bh.bb.bthr, (kmp_info_t*)((kmp_uintptr_t)th | 1) ); // mark the buffer as allocated address
+
+ /* Chain the new block to the free list. */
+ __kmp_bget_insert_into_freelist( thr, b );
+
+#ifdef FreeWipe
+ (void) memset(((char *) b) + sizeof(bfhead_t), 0x55,
+ (size_t) (len - sizeof(bfhead_t)));
+#endif
+ bn = BH(((char *) b) + len);
+ bn->bb.prevfree = (bufsize) len;
+ /* Definition of ESent assumes two's complement! */
+ KMP_DEBUG_ASSERT( (~0) == -1 && (bn != 0) );
+
+ bn->bb.bsize = ESent;
+}
+
+/* ------------------------------------------------------------------------ */
+
+/* BFREED -- Dump the free lists for this thread. */
+
+static void
+bfreed( kmp_info_t *th )
+{
+ int bin = 0, count = 0;
+ int gtid = __kmp_gtid_from_thread( th );
+ thr_data_t *thr = get_thr_data( th );
+
+#if BufStats
+ __kmp_printf_no_lock("__kmp_printpool: T#%d total=%" KMP_UINT64_SPEC " get=%" KMP_INT64_SPEC " rel=%" \
+ KMP_INT64_SPEC " pblk=%" KMP_INT64_SPEC " pget=%" KMP_INT64_SPEC " prel=%" KMP_INT64_SPEC \
+ " dget=%" KMP_INT64_SPEC " drel=%" KMP_INT64_SPEC "\n",
+ gtid, (kmp_uint64) thr->totalloc,
+ (kmp_int64) thr->numget, (kmp_int64) thr->numrel,
+ (kmp_int64) thr->numpblk,
+ (kmp_int64) thr->numpget, (kmp_int64) thr->numprel,
+ (kmp_int64) thr->numdget, (kmp_int64) thr->numdrel );
+#endif
+
+ for (bin = 0; bin < MAX_BGET_BINS; ++bin) {
+ bfhead_t *b;
+
+ for (b = thr->freelist[ bin ].ql.flink; b != &thr->freelist[ bin ]; b = b->ql.flink) {
+ bufsize bs = b->bh.bb.bsize;
+
+ KMP_DEBUG_ASSERT( b->ql.blink->ql.flink == b );
+ KMP_DEBUG_ASSERT( b->ql.flink->ql.blink == b );
+ KMP_DEBUG_ASSERT( bs > 0 );
+
+ count += 1;
+
+ __kmp_printf_no_lock("__kmp_printpool: T#%d Free block: 0x%p size %6ld bytes.\n", gtid, b, (long) bs );
+#ifdef FreeWipe
+ {
+ char *lerr = ((char *) b) + sizeof(bfhead_t);
+ if ((bs > sizeof(bfhead_t)) && ((*lerr != 0x55) || (memcmp(lerr, lerr + 1, (size_t) (bs - (sizeof(bfhead_t) + 1))) != 0))) {
+ __kmp_printf_no_lock( "__kmp_printpool: T#%d (Contents of above free block have been overstored.)\n", gtid );
+ }
+ }
+#endif
+ }
+ }
+
+ if (count == 0)
+ __kmp_printf_no_lock("__kmp_printpool: T#%d No free blocks\n", gtid );
+}
+
+/* ------------------------------------------------------------------------ */
+
+#ifdef KMP_DEBUG
+
+#if BufStats
+
+/* BSTATS -- Return buffer allocation free space statistics. */
+
+static void
+bstats( kmp_info_t *th, bufsize *curalloc, bufsize *totfree, bufsize *maxfree, long *nget, long *nrel)
+{
+ int bin = 0;
+ thr_data_t *thr = get_thr_data( th );
+
+ *nget = thr->numget;
+ *nrel = thr->numrel;
+ *curalloc = (bufsize) thr->totalloc;
+ *totfree = 0;
+ *maxfree = -1;
+
+ for (bin = 0; bin < MAX_BGET_BINS; ++bin) {
+ bfhead_t *b = thr->freelist[ bin ].ql.flink;
+
+ while (b != &thr->freelist[ bin ]) {
+ KMP_DEBUG_ASSERT(b->bh.bb.bsize > 0);
+ *totfree += b->bh.bb.bsize;
+ if (b->bh.bb.bsize > *maxfree) {
+ *maxfree = b->bh.bb.bsize;
+ }
+ b = b->ql.flink; /* Link to next buffer */
+ }
+ }
+}
+
+/* BSTATSE -- Return extended statistics */
+
+static void
+bstatse( kmp_info_t *th, bufsize *pool_incr, long *npool, long *npget, long *nprel, long *ndget, long *ndrel)
+{
+ thr_data_t *thr = get_thr_data( th );
+
+ *pool_incr = (thr->pool_len < 0) ? -thr->exp_incr : thr->exp_incr;
+ *npool = thr->numpblk;
+ *npget = thr->numpget;
+ *nprel = thr->numprel;
+ *ndget = thr->numdget;
+ *ndrel = thr->numdrel;
+}
+
+#endif /* BufStats */
+
+/* BUFDUMP -- Dump the data in a buffer. This is called with the user
+ data pointer, and backs up to the buffer header. It will
+ dump either a free block or an allocated one. */
+
+static void
+bufdump( kmp_info_t *th, void *buf )
+{
+ bfhead_t *b;
+ unsigned char *bdump;
+ bufsize bdlen;
+
+ b = BFH(((char *) buf) - sizeof(bhead_t));
+ KMP_DEBUG_ASSERT(b->bh.bb.bsize != 0);
+ if (b->bh.bb.bsize < 0) {
+ bdump = (unsigned char *) buf;
+ bdlen = (-b->bh.bb.bsize) - (bufsize) sizeof(bhead_t);
+ } else {
+ bdump = (unsigned char *) (((char *) b) + sizeof(bfhead_t));
+ bdlen = b->bh.bb.bsize - (bufsize) sizeof(bfhead_t);
+ }
+
+ while (bdlen > 0) {
+ int i, dupes = 0;
+ bufsize l = bdlen;
+ char bhex[50], bascii[20];
+
+ if (l > 16) {
+ l = 16;
+ }
+
+ for (i = 0; i < l; i++) {
+ (void) KMP_SNPRINTF(bhex + i * 3, sizeof(bhex) - i * 3, "%02X ", bdump[i]);
+ if (bdump[i] > 0x20 && bdump[i] < 0x7F)
+ bascii[ i ] = bdump[ i ];
+ else
+ bascii[ i ] = ' ';
+ }
+ bascii[i] = 0;
+ (void) __kmp_printf_no_lock("%-48s %s\n", bhex, bascii);
+ bdump += l;
+ bdlen -= l;
+ while ((bdlen > 16) && (memcmp((char *) (bdump - 16),
+ (char *) bdump, 16) == 0)) {
+ dupes++;
+ bdump += 16;
+ bdlen -= 16;
+ }
+ if (dupes > 1) {
+ (void) __kmp_printf_no_lock(
+ " (%d lines [%d bytes] identical to above line skipped)\n",
+ dupes, dupes * 16);
+ } else if (dupes == 1) {
+ bdump -= 16;
+ bdlen += 16;
+ }
+ }
+}
+
+/* BPOOLD -- Dump a buffer pool. The buffer headers are always listed.
+ If DUMPALLOC is nonzero, the contents of allocated buffers
+ are dumped. If DUMPFREE is nonzero, free blocks are
+ dumped as well. If FreeWipe checking is enabled, free
+ blocks which have been clobbered will always be dumped. */
+
+static void
+bpoold( kmp_info_t *th, void *buf, int dumpalloc, int dumpfree)
+{
+ bfhead_t *b = BFH( (char*)buf - sizeof(bhead_t));
+
+ while (b->bh.bb.bsize != ESent) {
+ bufsize bs = b->bh.bb.bsize;
+
+ if (bs < 0) {
+ bs = -bs;
+ (void) __kmp_printf_no_lock("Allocated buffer: size %6ld bytes.\n", (long) bs);
+ if (dumpalloc) {
+ bufdump( th, (void *) (((char *) b) + sizeof(bhead_t)));
+ }
+ } else {
+ const char *lerr = "";
+
+ KMP_DEBUG_ASSERT(bs > 0);
+ if ((b->ql.blink->ql.flink != b) || (b->ql.flink->ql.blink != b)) {
+ lerr = " (Bad free list links)";
+ }
+ (void) __kmp_printf_no_lock("Free block: size %6ld bytes.%s\n",
+ (long) bs, lerr);
+#ifdef FreeWipe
+ lerr = ((char *) b) + sizeof(bfhead_t);
+ if ((bs > sizeof(bfhead_t)) && ((*lerr != 0x55) ||
+ (memcmp(lerr, lerr + 1,
+ (size_t) (bs - (sizeof(bfhead_t) + 1))) != 0))) {
+ (void) __kmp_printf_no_lock(
+ "(Contents of above free block have been overstored.)\n");
+ bufdump( th, (void *) (((char *) b) + sizeof(bhead_t)));
+ } else
+#endif
+ if (dumpfree) {
+ bufdump( th, (void *) (((char *) b) + sizeof(bhead_t)));
+ }
+ }
+ b = BFH(((char *) b) + bs);
+ }
+}
+
+/* BPOOLV -- Validate a buffer pool. */
+
+static int
+bpoolv( kmp_info_t *th, void *buf )
+{
+ bfhead_t *b = BFH(buf);
+
+ while (b->bh.bb.bsize != ESent) {
+ bufsize bs = b->bh.bb.bsize;
+
+ if (bs < 0) {
+ bs = -bs;
+ } else {
+#ifdef FreeWipe
+ char *lerr = "";
+#endif
+
+ KMP_DEBUG_ASSERT(bs > 0);
+ if (bs <= 0) {
+ return 0;
+ }
+ if ((b->ql.blink->ql.flink != b) || (b->ql.flink->ql.blink != b)) {
+ (void) __kmp_printf_no_lock("Free block: size %6ld bytes. (Bad free list links)\n",
+ (long) bs);
+ KMP_DEBUG_ASSERT(0);
+ return 0;
+ }
+#ifdef FreeWipe
+ lerr = ((char *) b) + sizeof(bfhead_t);
+ if ((bs > sizeof(bfhead_t)) && ((*lerr != 0x55) ||
+ (memcmp(lerr, lerr + 1,
+ (size_t) (bs - (sizeof(bfhead_t) + 1))) != 0))) {
+ (void) __kmp_printf_no_lock(
+ "(Contents of above free block have been overstored.)\n");
+ bufdump( th, (void *) (((char *) b) + sizeof(bhead_t)));
+ KMP_DEBUG_ASSERT(0);
+ return 0;
+ }
+#endif /* FreeWipe */
+ }
+ b = BFH(((char *) b) + bs);
+ }
+ return 1;
+}
+
+#endif /* KMP_DEBUG */
+
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_initialize_bget( kmp_info_t *th )
+{
+ KMP_DEBUG_ASSERT( SizeQuant >= sizeof( void * ) && (th != 0) );
+
+ set_thr_data( th );
+
+ bectl( th, (bget_compact_t) 0, (bget_acquire_t) malloc, (bget_release_t) free,
+ (bufsize) __kmp_malloc_pool_incr );
+}
+
+void
+__kmp_finalize_bget( kmp_info_t *th )
+{
+ thr_data_t *thr;
+ bfhead_t *b;
+
+ KMP_DEBUG_ASSERT( th != 0 );
+
+#if BufStats
+ thr = (thr_data_t *) th->th.th_local.bget_data;
+ KMP_DEBUG_ASSERT( thr != NULL );
+ b = thr->last_pool;
+
+ /* If a block-release function is defined, and this free buffer
+ constitutes the entire block, release it. Note that pool_len
+ is defined in such a way that the test will fail unless all
+ pool blocks are the same size. */
+
+ /* Deallocate the last pool if one exists because we no longer do it in brel() */
+ if (thr->relfcn != 0 && b != 0 && thr->numpblk != 0 &&
+ b->bh.bb.bsize == (bufsize)(thr->pool_len - sizeof(bhead_t)))
+ {
+ KMP_DEBUG_ASSERT(b->bh.bb.prevfree == 0);
+ KMP_DEBUG_ASSERT(BH((char *) b + b->bh.bb.bsize)->bb.bsize == ESent);
+ KMP_DEBUG_ASSERT(BH((char *) b + b->bh.bb.bsize)->bb.prevfree == b->bh.bb.bsize);
+
+ /* Unlink the buffer from the free list */
+ __kmp_bget_remove_from_freelist( b );
+
+ KE_TRACE( 10, ("%%%%%% FREE( %p )\n", (void *) b ) );
+
+ (*thr->relfcn)(b);
+ thr->numprel++; /* Nr of expansion block releases */
+ thr->numpblk--; /* Total number of blocks */
+ KMP_DEBUG_ASSERT(thr->numpblk == thr->numpget - thr->numprel);
+ }
+#endif /* BufStats */
+
+ /* Deallocate bget_data */
+ if ( th->th.th_local.bget_data != NULL ) {
+ __kmp_free( th->th.th_local.bget_data );
+ th->th.th_local.bget_data = NULL;
+ }; // if
+}
+
+void
+kmpc_set_poolsize( size_t size )
+{
+ bectl( __kmp_get_thread(), (bget_compact_t) 0, (bget_acquire_t) malloc,
+ (bget_release_t) free, (bufsize) size );
+}
+
+size_t
+kmpc_get_poolsize( void )
+{
+ thr_data_t *p;
+
+ p = get_thr_data( __kmp_get_thread() );
+
+ return p->exp_incr;
+}
+
+void
+kmpc_set_poolmode( int mode )
+{
+ thr_data_t *p;
+
+ if (mode == bget_mode_fifo || mode == bget_mode_lifo || mode == bget_mode_best) {
+ p = get_thr_data( __kmp_get_thread() );
+ p->mode = (bget_mode_t) mode;
+ }
+}
+
+int
+kmpc_get_poolmode( void )
+{
+ thr_data_t *p;
+
+ p = get_thr_data( __kmp_get_thread() );
+
+ return p->mode;
+}
+
+void
+kmpc_get_poolstat( size_t *maxmem, size_t *allmem )
+{
+ kmp_info_t *th = __kmp_get_thread();
+ bufsize a, b;
+
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+
+ bcheck( th, &a, &b );
+
+ *maxmem = a;
+ *allmem = b;
+}
+
+void
+kmpc_poolprint( void )
+{
+ kmp_info_t *th = __kmp_get_thread();
+
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+
+ bfreed( th );
+}
+
+#endif // #if KMP_USE_BGET
+
+/* ------------------------------------------------------------------------ */
+
+void *
+kmpc_malloc( size_t size )
+{
+ void * ptr;
+ ptr = bget( __kmp_entry_thread(), (bufsize)(size + sizeof(ptr)) );
+ if( ptr != NULL ) {
+ // save allocated pointer just before one returned to user
+ *(void**)ptr = ptr;
+ ptr = (void**)ptr + 1;
+ }
+ return ptr;
+}
+
+#define IS_POWER_OF_TWO(n) (((n)&((n)-1))==0)
+
+void *
+kmpc_aligned_malloc( size_t size, size_t alignment )
+{
+ void * ptr;
+ void * ptr_allocated;
+ KMP_DEBUG_ASSERT( alignment < 32 * 1024 ); // Alignment should not be too big
+ if( !IS_POWER_OF_TWO(alignment) ) {
+ // AC: do we need to issue a warning here?
+ errno = EINVAL;
+ return NULL;
+ }
+ size = size + sizeof( void* ) + alignment;
+ ptr_allocated = bget( __kmp_entry_thread(), (bufsize)size );
+ if( ptr_allocated != NULL ) {
+ // save allocated pointer just before one returned to user
+ ptr = (void*)(((kmp_uintptr_t)ptr_allocated + sizeof( void* ) + alignment) & ~(alignment - 1));
+ *((void**)ptr - 1) = ptr_allocated;
+ } else {
+ ptr = NULL;
+ }
+ return ptr;
+}
+
+void *
+kmpc_calloc( size_t nelem, size_t elsize )
+{
+ void * ptr;
+ ptr = bgetz( __kmp_entry_thread(), (bufsize) (nelem * elsize + sizeof(ptr)) );
+ if( ptr != NULL ) {
+ // save allocated pointer just before one returned to user
+ *(void**)ptr = ptr;
+ ptr = (void**)ptr + 1;
+ }
+ return ptr;
+}
+
+void *
+kmpc_realloc( void * ptr, size_t size )
+{
+ void * result = NULL;
+ if ( ptr == NULL ) {
+ // If pointer is NULL, realloc behaves like malloc.
+ result = bget( __kmp_entry_thread(), (bufsize)(size + sizeof(ptr)) );
+ // save allocated pointer just before one returned to user
+ if( result != NULL ) {
+ *(void**)result = result;
+ result = (void**)result + 1;
+ }
+ } else if ( size == 0 ) {
+ // If size is 0, realloc behaves like free.
+ // The thread must be registered by the call to kmpc_malloc() or kmpc_calloc() before.
+ // So it should be safe to call __kmp_get_thread(), not __kmp_entry_thread().
+ KMP_ASSERT(*((void**)ptr - 1));
+ brel( __kmp_get_thread(), *((void**)ptr - 1) );
+ } else {
+ result = bgetr( __kmp_entry_thread(), *((void**)ptr - 1), (bufsize)(size + sizeof(ptr)) );
+ if( result != NULL ) {
+ *(void**)result = result;
+ result = (void**)result + 1;
+ }
+ }; // if
+ return result;
+}
+
+/* NOTE: the library must have already been initialized by a previous allocate */
+
+void
+kmpc_free( void * ptr )
+{
+ if ( ! __kmp_init_serial ) {
+ return;
+ }; // if
+ if ( ptr != NULL ) {
+ kmp_info_t *th = __kmp_get_thread();
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+ // extract allocated pointer and free it
+ KMP_ASSERT(*((void**)ptr - 1));
+ brel( th, *((void**)ptr - 1) );
+ };
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+void *
+___kmp_thread_malloc( kmp_info_t *th, size_t size KMP_SRC_LOC_DECL )
+{
+ void * ptr;
+ KE_TRACE( 30, (
+ "-> __kmp_thread_malloc( %p, %d ) called from %s:%d\n",
+ th,
+ (int) size
+ KMP_SRC_LOC_PARM
+ ) );
+ ptr = bget( th, (bufsize) size );
+ KE_TRACE( 30, ( "<- __kmp_thread_malloc() returns %p\n", ptr ) );
+ return ptr;
+}
+
+void *
+___kmp_thread_calloc( kmp_info_t *th, size_t nelem, size_t elsize KMP_SRC_LOC_DECL )
+{
+ void * ptr;
+ KE_TRACE( 30, (
+ "-> __kmp_thread_calloc( %p, %d, %d ) called from %s:%d\n",
+ th,
+ (int) nelem,
+ (int) elsize
+ KMP_SRC_LOC_PARM
+ ) );
+ ptr = bgetz( th, (bufsize) (nelem * elsize) );
+ KE_TRACE( 30, ( "<- __kmp_thread_calloc() returns %p\n", ptr ) );
+ return ptr;
+}
+
+void *
+___kmp_thread_realloc( kmp_info_t *th, void *ptr, size_t size KMP_SRC_LOC_DECL )
+{
+ KE_TRACE( 30, (
+ "-> __kmp_thread_realloc( %p, %p, %d ) called from %s:%d\n",
+ th,
+ ptr,
+ (int) size
+ KMP_SRC_LOC_PARM
+ ) );
+ ptr = bgetr( th, ptr, (bufsize) size );
+ KE_TRACE( 30, ( "<- __kmp_thread_realloc() returns %p\n", ptr ) );
+ return ptr;
+}
+
+void
+___kmp_thread_free( kmp_info_t *th, void *ptr KMP_SRC_LOC_DECL )
+{
+ KE_TRACE( 30, (
+ "-> __kmp_thread_free( %p, %p ) called from %s:%d\n",
+ th,
+ ptr
+ KMP_SRC_LOC_PARM
+ ) );
+ if ( ptr != NULL ) {
+ __kmp_bget_dequeue( th ); /* Release any queued buffers */
+ brel( th, ptr );
+ }
+ KE_TRACE( 30, ( "<- __kmp_thread_free()\n" ) );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+/*
+ If LEAK_MEMORY is defined, __kmp_free() will *not* free memory. It causes memory leaks, but it
+ may be useful for debugging memory corruptions, used freed pointers, etc.
+*/
+/* #define LEAK_MEMORY */
+
+struct kmp_mem_descr { // Memory block descriptor.
+ void * ptr_allocated; // Pointer returned by malloc(), subject for free().
+ size_t size_allocated; // Size of allocated memory block.
+ void * ptr_aligned; // Pointer to aligned memory, to be used by client code.
+ size_t size_aligned; // Size of aligned memory block.
+};
+typedef struct kmp_mem_descr kmp_mem_descr_t;
+
+/*
+ Allocate memory on requested boundary, fill allocated memory with 0x00.
+ NULL is NEVER returned, __kmp_abort() is called in case of memory allocation error.
+ Must use __kmp_free when freeing memory allocated by this routine!
+ */
+static
+void *
+___kmp_allocate_align( size_t size, size_t alignment KMP_SRC_LOC_DECL )
+{
+ /*
+ __kmp_allocate() allocates (by call to malloc()) bigger memory block than requested to
+ return properly aligned pointer. Original pointer returned by malloc() and size of allocated
+ block is saved in descriptor just before the aligned pointer. This information used by
+ __kmp_free() -- it has to pass to free() original pointer, not aligned one.
+
+ +---------+------------+-----------------------------------+---------+
+ | padding | descriptor | aligned block | padding |
+ +---------+------------+-----------------------------------+---------+
+ ^ ^
+ | |
+ | +- Aligned pointer returned to caller
+ +- Pointer returned by malloc()
+
+ Aligned block is filled with zeros, paddings are filled with 0xEF.
+ */
+
+ kmp_mem_descr_t descr;
+ kmp_uintptr_t addr_allocated; // Address returned by malloc().
+ kmp_uintptr_t addr_aligned; // Aligned address to return to caller.
+ kmp_uintptr_t addr_descr; // Address of memory block descriptor.
+
+ KE_TRACE( 25, (
+ "-> ___kmp_allocate_align( %d, %d ) called from %s:%d\n",
+ (int) size,
+ (int) alignment
+ KMP_SRC_LOC_PARM
+ ) );
+
+ KMP_DEBUG_ASSERT( alignment < 32 * 1024 ); // Alignment should not be too
+ KMP_DEBUG_ASSERT( sizeof( void * ) <= sizeof( kmp_uintptr_t ) );
+ // Make sure kmp_uintptr_t is enough to store addresses.
+
+ descr.size_aligned = size;
+ descr.size_allocated = descr.size_aligned + sizeof( kmp_mem_descr_t ) + alignment;
+
+#if KMP_DEBUG
+ descr.ptr_allocated = _malloc_src_loc( descr.size_allocated, _file_, _line_ );
+#else
+ descr.ptr_allocated = malloc_src_loc( descr.size_allocated KMP_SRC_LOC_PARM );
+#endif
+ KE_TRACE( 10, (
+ " malloc( %d ) returned %p\n",
+ (int) descr.size_allocated,
+ descr.ptr_allocated
+ ) );
+ if ( descr.ptr_allocated == NULL ) {
+ KMP_FATAL( OutOfHeapMemory );
+ };
+
+ addr_allocated = (kmp_uintptr_t) descr.ptr_allocated;
+ addr_aligned =
+ ( addr_allocated + sizeof( kmp_mem_descr_t ) + alignment )
+ & ~ ( alignment - 1 );
+ addr_descr = addr_aligned - sizeof( kmp_mem_descr_t );
+
+ descr.ptr_aligned = (void *) addr_aligned;
+
+ KE_TRACE( 26, (
+ " ___kmp_allocate_align: "
+ "ptr_allocated=%p, size_allocated=%d, "
+ "ptr_aligned=%p, size_aligned=%d\n",
+ descr.ptr_allocated,
+ (int) descr.size_allocated,
+ descr.ptr_aligned,
+ (int) descr.size_aligned
+ ) );
+
+ KMP_DEBUG_ASSERT( addr_allocated <= addr_descr );
+ KMP_DEBUG_ASSERT( addr_descr + sizeof( kmp_mem_descr_t ) == addr_aligned );
+ KMP_DEBUG_ASSERT( addr_aligned + descr.size_aligned <= addr_allocated + descr.size_allocated );
+ KMP_DEBUG_ASSERT( addr_aligned % alignment == 0 );
+#ifdef KMP_DEBUG
+ memset( descr.ptr_allocated, 0xEF, descr.size_allocated );
+ // Fill allocated memory block with 0xEF.
+#endif
+ memset( descr.ptr_aligned, 0x00, descr.size_aligned );
+ // Fill the aligned memory block (which is intended for using by caller) with 0x00. Do not
+ // put this filling under KMP_DEBUG condition! Many callers expect zeroed memory. (Padding
+ // bytes remain filled with 0xEF in debugging library.)
+ * ( (kmp_mem_descr_t *) addr_descr ) = descr;
+
+ KMP_MB();
+
+ KE_TRACE( 25, ( "<- ___kmp_allocate_align() returns %p\n", descr.ptr_aligned ) );
+ return descr.ptr_aligned;
+} // func ___kmp_allocate_align
+
+
+/*
+ Allocate memory on cache line boundary, fill allocated memory with 0x00.
+ Do not call this func directly! Use __kmp_allocate macro instead.
+ NULL is NEVER returned, __kmp_abort() is called in case of memory allocation error.
+ Must use __kmp_free when freeing memory allocated by this routine!
+ */
+void *
+___kmp_allocate( size_t size KMP_SRC_LOC_DECL )
+{
+ void * ptr;
+ KE_TRACE( 25, ( "-> __kmp_allocate( %d ) called from %s:%d\n", (int) size KMP_SRC_LOC_PARM ) );
+ ptr = ___kmp_allocate_align( size, __kmp_align_alloc KMP_SRC_LOC_PARM );
+ KE_TRACE( 25, ( "<- __kmp_allocate() returns %p\n", ptr ) );
+ return ptr;
+} // func ___kmp_allocate
+
+#if (BUILD_MEMORY==FIRST_TOUCH)
+void *
+__kmp_ft_page_allocate(size_t size)
+{
+ void *adr, *aadr;
+#if KMP_OS_LINUX
+ /* TODO: Use this function to get page size everywhere */
+ int page_size = getpagesize();
+#else
+ /* TODO: Find windows function to get page size and use it everywhere */
+ int page_size = PAGE_SIZE;
+#endif /* KMP_OS_LINUX */
+
+ adr = (void *) __kmp_thread_malloc( __kmp_get_thread(),
+ size + page_size + KMP_PTR_SKIP);
+ if ( adr == 0 )
+ KMP_FATAL( OutOfHeapMemory );
+
+ /* check to see if adr is on a page boundary. */
+ if ( ( (kmp_uintptr_t) adr & (page_size - 1)) == 0)
+ /* nothing to do if adr is already on a page boundary. */
+ aadr = adr;
+ else
+ /* else set aadr to the first page boundary in the allocated memory. */
+ aadr = (void *) ( ( (kmp_uintptr_t) adr + page_size) & ~(page_size - 1) );
+
+ /* the first touch by the owner thread. */
+ *((void**)aadr) = adr;
+
+ /* skip the memory space used for storing adr above. */
+ return (void*)((char*)aadr + KMP_PTR_SKIP);
+}
+#endif
+
+/*
+ Allocate memory on page boundary, fill allocated memory with 0x00.
+ Does not call this func directly! Use __kmp_page_allocate macro instead.
+ NULL is NEVER returned, __kmp_abort() is called in case of memory allocation error.
+ Must use __kmp_free when freeing memory allocated by this routine!
+ */
+void *
+___kmp_page_allocate( size_t size KMP_SRC_LOC_DECL )
+{
+ int page_size = 8 * 1024;
+ void * ptr;
+
+ KE_TRACE( 25, (
+ "-> __kmp_page_allocate( %d ) called from %s:%d\n",
+ (int) size
+ KMP_SRC_LOC_PARM
+ ) );
+ ptr = ___kmp_allocate_align( size, page_size KMP_SRC_LOC_PARM );
+ KE_TRACE( 25, ( "<- __kmp_page_allocate( %d ) returns %p\n", (int) size, ptr ) );
+ return ptr;
+} // ___kmp_page_allocate
+
+/*
+ Free memory allocated by __kmp_allocate() and __kmp_page_allocate().
+ In debug mode, fill the memory block with 0xEF before call to free().
+*/
+void
+___kmp_free( void * ptr KMP_SRC_LOC_DECL )
+{
+ kmp_mem_descr_t descr;
+ kmp_uintptr_t addr_allocated; // Address returned by malloc().
+ kmp_uintptr_t addr_aligned; // Aligned address passed by caller.
+
+ KE_TRACE( 25, ( "-> __kmp_free( %p ) called from %s:%d\n", ptr KMP_SRC_LOC_PARM ) );
+ KMP_ASSERT( ptr != NULL );
+
+ descr = * ( kmp_mem_descr_t *) ( (kmp_uintptr_t) ptr - sizeof( kmp_mem_descr_t ) );
+
+ KE_TRACE( 26, ( " __kmp_free: "
+ "ptr_allocated=%p, size_allocated=%d, "
+ "ptr_aligned=%p, size_aligned=%d\n",
+ descr.ptr_allocated, (int) descr.size_allocated,
+ descr.ptr_aligned, (int) descr.size_aligned ));
+
+ addr_allocated = (kmp_uintptr_t) descr.ptr_allocated;
+ addr_aligned = (kmp_uintptr_t) descr.ptr_aligned;
+
+ KMP_DEBUG_ASSERT( addr_aligned % CACHE_LINE == 0 );
+ KMP_DEBUG_ASSERT( descr.ptr_aligned == ptr );
+ KMP_DEBUG_ASSERT( addr_allocated + sizeof( kmp_mem_descr_t ) <= addr_aligned );
+ KMP_DEBUG_ASSERT( descr.size_aligned < descr.size_allocated );
+ KMP_DEBUG_ASSERT( addr_aligned + descr.size_aligned <= addr_allocated + descr.size_allocated );
+
+ #ifdef KMP_DEBUG
+ memset( descr.ptr_allocated, 0xEF, descr.size_allocated );
+ // Fill memory block with 0xEF, it helps catch using freed memory.
+ #endif
+
+ #ifndef LEAK_MEMORY
+ KE_TRACE( 10, ( " free( %p )\n", descr.ptr_allocated ) );
+ # ifdef KMP_DEBUG
+ _free_src_loc( descr.ptr_allocated, _file_, _line_ );
+ # else
+ free_src_loc( descr.ptr_allocated KMP_SRC_LOC_PARM );
+ # endif
+ #endif
+ KMP_MB();
+ KE_TRACE( 25, ( "<- __kmp_free() returns\n" ) );
+} // func ___kmp_free
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if USE_FAST_MEMORY == 3
+// Allocate fast memory by first scanning the thread's free lists
+// If a chunk the right size exists, grab it off the free list.
+// Otherwise allocate normally using kmp_thread_malloc.
+
+// AC: How to choose the limit? Just get 16 for now...
+#define KMP_FREE_LIST_LIMIT 16
+
+// Always use 128 bytes for determining buckets for caching memory blocks
+#define DCACHE_LINE 128
+
+void *
+___kmp_fast_allocate( kmp_info_t *this_thr, size_t size KMP_SRC_LOC_DECL )
+{
+ void * ptr;
+ int num_lines;
+ int idx;
+ int index;
+ void * alloc_ptr;
+ size_t alloc_size;
+ kmp_mem_descr_t * descr;
+
+ KE_TRACE( 25, ( "-> __kmp_fast_allocate( T#%d, %d ) called from %s:%d\n",
+ __kmp_gtid_from_thread(this_thr), (int) size KMP_SRC_LOC_PARM ) );
+
+ num_lines = ( size + DCACHE_LINE - 1 ) / DCACHE_LINE;
+ idx = num_lines - 1;
+ KMP_DEBUG_ASSERT( idx >= 0 );
+ if ( idx < 2 ) {
+ index = 0; // idx is [ 0, 1 ], use first free list
+ num_lines = 2; // 1, 2 cache lines or less than cache line
+ } else if ( ( idx >>= 2 ) == 0 ) {
+ index = 1; // idx is [ 2, 3 ], use second free list
+ num_lines = 4; // 3, 4 cache lines
+ } else if ( ( idx >>= 2 ) == 0 ) {
+ index = 2; // idx is [ 4, 15 ], use third free list
+ num_lines = 16; // 5, 6, ..., 16 cache lines
+ } else if ( ( idx >>= 2 ) == 0 ) {
+ index = 3; // idx is [ 16, 63 ], use fourth free list
+ num_lines = 64; // 17, 18, ..., 64 cache lines
+ } else {
+ goto alloc_call; // 65 or more cache lines ( > 8KB ), don't use free lists
+ }
+
+ ptr = this_thr->th.th_free_lists[index].th_free_list_self;
+ if ( ptr != NULL ) {
+ // pop the head of no-sync free list
+ this_thr->th.th_free_lists[index].th_free_list_self = *((void **)ptr);
+ KMP_DEBUG_ASSERT( this_thr ==
+ ((kmp_mem_descr_t *)( (kmp_uintptr_t)ptr - sizeof(kmp_mem_descr_t) ))->ptr_aligned );
+ goto end;
+ };
+ ptr = TCR_SYNC_PTR( this_thr->th.th_free_lists[index].th_free_list_sync );
+ if ( ptr != NULL ) {
+ // no-sync free list is empty, use sync free list (filled in by other threads only)
+ // pop the head of the sync free list, push NULL instead
+ while ( ! KMP_COMPARE_AND_STORE_PTR(
+ &this_thr->th.th_free_lists[index].th_free_list_sync, ptr, NULL ) )
+ {
+ KMP_CPU_PAUSE();
+ ptr = TCR_SYNC_PTR( this_thr->th.th_free_lists[index].th_free_list_sync );
+ }
+ // push the rest of chain into no-sync free list (can be NULL if there was the only block)
+ this_thr->th.th_free_lists[index].th_free_list_self = *((void **)ptr);
+ KMP_DEBUG_ASSERT( this_thr ==
+ ((kmp_mem_descr_t *)( (kmp_uintptr_t)ptr - sizeof(kmp_mem_descr_t) ))->ptr_aligned );
+ goto end;
+ }
+
+ alloc_call:
+ // haven't found block in the free lists, thus allocate it
+ size = num_lines * DCACHE_LINE;
+
+ alloc_size = size + sizeof( kmp_mem_descr_t ) + DCACHE_LINE;
+ KE_TRACE( 25, ( "__kmp_fast_allocate: T#%d Calling __kmp_thread_malloc with alloc_size %d\n",
+ __kmp_gtid_from_thread( this_thr ), alloc_size ) );
+ alloc_ptr = bget( this_thr, (bufsize) alloc_size );
+
+ // align ptr to DCACHE_LINE
+ ptr = (void *)(( ((kmp_uintptr_t)alloc_ptr) + sizeof(kmp_mem_descr_t) + DCACHE_LINE ) & ~( DCACHE_LINE - 1 ));
+ descr = (kmp_mem_descr_t *)( ((kmp_uintptr_t)ptr) - sizeof(kmp_mem_descr_t) );
+
+ descr->ptr_allocated = alloc_ptr; // remember allocated pointer
+ // we don't need size_allocated
+ descr->ptr_aligned = (void *)this_thr; // remember allocating thread
+ // (it is already saved in bget buffer,
+ // but we may want to use another allocator in future)
+ descr->size_aligned = size;
+
+ end:
+ KE_TRACE( 25, ( "<- __kmp_fast_allocate( T#%d ) returns %p\n",
+ __kmp_gtid_from_thread( this_thr ), ptr ) );
+ return ptr;
+} // func __kmp_fast_allocate
+
+// Free fast memory and place it on the thread's free list if it is of
+// the correct size.
+void
+___kmp_fast_free( kmp_info_t *this_thr, void * ptr KMP_SRC_LOC_DECL )
+{
+ kmp_mem_descr_t * descr;
+ kmp_info_t * alloc_thr;
+ size_t size;
+ size_t idx;
+ int index;
+
+ KE_TRACE( 25, ( "-> __kmp_fast_free( T#%d, %p ) called from %s:%d\n",
+ __kmp_gtid_from_thread(this_thr), ptr KMP_SRC_LOC_PARM ) );
+ KMP_ASSERT( ptr != NULL );
+
+ descr = (kmp_mem_descr_t *)( ((kmp_uintptr_t)ptr) - sizeof(kmp_mem_descr_t) );
+
+ KE_TRACE(26, (" __kmp_fast_free: size_aligned=%d\n",
+ (int) descr->size_aligned ) );
+
+ size = descr->size_aligned; // 2, 4, 16, 64, 65, 66, ... cache lines
+
+ idx = DCACHE_LINE * 2; // 2 cache lines is minimal size of block
+ if ( idx == size ) {
+ index = 0; // 2 cache lines
+ } else if ( ( idx <<= 1 ) == size ) {
+ index = 1; // 4 cache lines
+ } else if ( ( idx <<= 2 ) == size ) {
+ index = 2; // 16 cache lines
+ } else if ( ( idx <<= 2 ) == size ) {
+ index = 3; // 64 cache lines
+ } else {
+ KMP_DEBUG_ASSERT( size > DCACHE_LINE * 64 );
+ goto free_call; // 65 or more cache lines ( > 8KB )
+ }
+
+ alloc_thr = (kmp_info_t *)descr->ptr_aligned; // get thread owning the block
+ if ( alloc_thr == this_thr ) {
+ // push block to self no-sync free list, linking previous head (LIFO)
+ *((void **)ptr) = this_thr->th.th_free_lists[index].th_free_list_self;
+ this_thr->th.th_free_lists[index].th_free_list_self = ptr;
+ } else {
+ void * head = this_thr->th.th_free_lists[index].th_free_list_other;
+ if ( head == NULL ) {
+ // Create new free list
+ this_thr->th.th_free_lists[index].th_free_list_other = ptr;
+ *((void **)ptr) = NULL; // mark the tail of the list
+ descr->size_allocated = (size_t)1; // head of the list keeps its length
+ } else {
+ // need to check existed "other" list's owner thread and size of queue
+ kmp_mem_descr_t * dsc = (kmp_mem_descr_t *)( (char*)head - sizeof(kmp_mem_descr_t) );
+ kmp_info_t * q_th = (kmp_info_t *)(dsc->ptr_aligned); // allocating thread, same for all queue nodes
+ size_t q_sz = dsc->size_allocated + 1; // new size in case we add current task
+ if ( q_th == alloc_thr && q_sz <= KMP_FREE_LIST_LIMIT ) {
+ // we can add current task to "other" list, no sync needed
+ *((void **)ptr) = head;
+ descr->size_allocated = q_sz;
+ this_thr->th.th_free_lists[index].th_free_list_other = ptr;
+ } else {
+ // either queue blocks owner is changing or size limit exceeded
+ // return old queue to allocating thread (q_th) synchroneously,
+ // and start new list for alloc_thr's tasks
+ void * old_ptr;
+ void * tail = head;
+ void * next = *((void **)head);
+ while ( next != NULL ) {
+ KMP_DEBUG_ASSERT(
+ // queue size should decrease by 1 each step through the list
+ ((kmp_mem_descr_t*)((char*)next - sizeof(kmp_mem_descr_t)))->size_allocated + 1 ==
+ ((kmp_mem_descr_t*)((char*)tail - sizeof(kmp_mem_descr_t)))->size_allocated );
+ tail = next; // remember tail node
+ next = *((void **)next);
+ }
+ KMP_DEBUG_ASSERT( q_th != NULL );
+ // push block to owner's sync free list
+ old_ptr = TCR_PTR( q_th->th.th_free_lists[index].th_free_list_sync );
+ /* the next pointer must be set before setting free_list to ptr to avoid
+ exposing a broken list to other threads, even for an instant. */
+ *((void **)tail) = old_ptr;
+
+ while ( ! KMP_COMPARE_AND_STORE_PTR(
+ &q_th->th.th_free_lists[index].th_free_list_sync,
+ old_ptr,
+ head ) )
+ {
+ KMP_CPU_PAUSE();
+ old_ptr = TCR_PTR( q_th->th.th_free_lists[index].th_free_list_sync );
+ *((void **)tail) = old_ptr;
+ }
+
+ // start new list of not-selt tasks
+ this_thr->th.th_free_lists[index].th_free_list_other = ptr;
+ *((void **)ptr) = NULL;
+ descr->size_allocated = (size_t)1; // head of queue keeps its length
+ }
+ }
+ }
+ goto end;
+
+ free_call:
+ KE_TRACE(25, ( "__kmp_fast_free: T#%d Calling __kmp_thread_free for size %d\n",
+ __kmp_gtid_from_thread( this_thr), size ) );
+ __kmp_bget_dequeue( this_thr ); /* Release any queued buffers */
+ brel( this_thr, descr->ptr_allocated );
+
+ end:
+ KE_TRACE( 25, ( "<- __kmp_fast_free() returns\n" ) );
+
+} // func __kmp_fast_free
+
+
+// Initialize the thread free lists related to fast memory
+// Only do this when a thread is initially created.
+void
+__kmp_initialize_fast_memory( kmp_info_t *this_thr )
+{
+ KE_TRACE(10, ( "__kmp_initialize_fast_memory: Called from th %p\n", this_thr ) );
+
+ memset ( this_thr->th.th_free_lists, 0, NUM_LISTS * sizeof( kmp_free_list_t ) );
+}
+
+// Free the memory in the thread free lists related to fast memory
+// Only do this when a thread is being reaped (destroyed).
+void
+__kmp_free_fast_memory( kmp_info_t *th )
+{
+ // Suppose we use BGET underlying allocator, walk through its structures...
+ int bin;
+ thr_data_t * thr = get_thr_data( th );
+ void ** lst = NULL;
+
+ KE_TRACE(5, ( "__kmp_free_fast_memory: Called T#%d\n",
+ __kmp_gtid_from_thread( th ) ) );
+
+ __kmp_bget_dequeue( th ); // Release any queued buffers
+
+ // Dig through free lists and extract all allocated blocks
+ for ( bin = 0; bin < MAX_BGET_BINS; ++bin ) {
+ bfhead_t * b = thr->freelist[ bin ].ql.flink;
+ while ( b != &thr->freelist[ bin ] ) {
+ if ( (kmp_uintptr_t)b->bh.bb.bthr & 1 ) { // if the buffer is an allocated address?
+ *((void**)b) = lst; // link the list (override bthr, but keep flink yet)
+ lst = (void**)b; // push b into lst
+ }
+ b = b->ql.flink; // get next buffer
+ }
+ }
+ while ( lst != NULL ) {
+ void * next = *lst;
+ KE_TRACE(10, ( "__kmp_free_fast_memory: freeing %p, next=%p th %p (%d)\n",
+ lst, next, th, __kmp_gtid_from_thread( th ) ) );
+ (*thr->relfcn)(lst);
+ #if BufStats
+ // count blocks to prevent problems in __kmp_finalize_bget()
+ thr->numprel++; /* Nr of expansion block releases */
+ thr->numpblk--; /* Total number of blocks */
+ #endif
+ lst = (void**)next;
+ }
+
+ KE_TRACE(5, ( "__kmp_free_fast_memory: Freed T#%d\n",
+ __kmp_gtid_from_thread( th ) ) );
+}
+
+#endif // USE_FAST_MEMORY
diff --git a/final/runtime/src/kmp_atomic.c b/final/runtime/src/kmp_atomic.c
new file mode 100644
index 0000000..5d5d344
--- /dev/null
+++ b/final/runtime/src/kmp_atomic.c
@@ -0,0 +1,2907 @@
+/*
+ * kmp_atomic.c -- ATOMIC implementation routines
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp_atomic.h"
+#include "kmp.h" // TRUE, asm routines prototypes
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+
+/*!
+@defgroup ATOMIC_OPS Atomic Operations
+These functions are used for implementing the many different varieties of atomic operations.
+
+The compiler is at liberty to inline atomic operations that are naturally supported
+by the target architecture. For instance on IA-32 architecture an atomic like this can be inlined
+@code
+static int s = 0;
+#pragma omp atomic
+ s++;
+@endcode
+using the single instruction: `lock; incl s`
+
+However the runtime does provide entrypoints for these operations to support compilers that choose
+not to inline them. (For instance, `__kmpc_atomic_fixed4_add` could be used to perform the
+increment above.)
+
+The names of the functions are encoded by using the data type name and the operation name, as in these tables.
+
+Data Type | Data type encoding
+-----------|---------------
+int8_t | `fixed1`
+uint8_t | `fixed1u`
+int16_t | `fixed2`
+uint16_t | `fixed2u`
+int32_t | `fixed4`
+uint32_t | `fixed4u`
+int32_t | `fixed8`
+uint32_t | `fixed8u`
+float | `float4`
+double | `float8`
+float 10 (8087 eighty bit float) | `float10`
+complex<float> | `cmplx4`
+complex<double> | `cmplx8`
+complex<float10> | `cmplx10`
+<br>
+
+Operation | Operation encoding
+----------|-------------------
++ | add
+- | sub
+\* | mul
+/ | div
+& | andb
+<< | shl
+\>\> | shr
+\| | orb
+^ | xor
+&& | andl
+\|\| | orl
+maximum | max
+minimum | min
+.eqv. | eqv
+.neqv. | neqv
+
+<br>
+For non-commutative operations, `_rev` can also be added for the reversed operation.
+For the functions that capture the result, the suffix `_cpt` is added.
+
+Update Functions
+================
+The general form of an atomic function that just performs an update (without a `capture`)
+@code
+void __kmpc_atomic_<datatype>_<operation>( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs );
+@endcode
+@param ident_t a pointer to source location
+@param gtid the global thread id
+@param lhs a pointer to the left operand
+@param rhs the right operand
+
+`capture` functions
+===================
+The capture functions perform an atomic update and return a result, which is either the value
+before the capture, or that after. They take an additional argument to determine which result is returned.
+Their general form is therefore
+@code
+TYPE __kmpc_atomic_<datatype>_<operation>_cpt( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs, int flag );
+@endcode
+@param ident_t a pointer to source location
+@param gtid the global thread id
+@param lhs a pointer to the left operand
+@param rhs the right operand
+@param flag one if the result is to be captured *after* the operation, zero if captured *before*.
+
+The one set of exceptions to this is the `complex<float>` type where the value is not returned,
+rather an extra argument pointer is passed.
+
+They look like
+@code
+void __kmpc_atomic_cmplx4_<op>_cpt( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag );
+@endcode
+
+Read and Write Operations
+=========================
+The OpenMP<sup>*</sup> standard now supports atomic operations that simply ensure that the
+value is read or written atomically, with no modification
+performed. In many cases on IA-32 architecture these operations can be inlined since
+the architecture guarantees that no tearing occurs on aligned objects
+accessed with a single memory operation of up to 64 bits in size.
+
+The general form of the read operations is
+@code
+TYPE __kmpc_atomic_<type>_rd ( ident_t *id_ref, int gtid, TYPE * loc );
+@endcode
+
+For the write operations the form is
+@code
+void __kmpc_atomic_<type>_wr ( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs );
+@endcode
+
+Full list of functions
+======================
+This leads to the generation of 376 atomic functions, as follows.
+
+Functons for integers
+---------------------
+There are versions here for integers of size 1,2,4 and 8 bytes both signed and unsigned (where that matters).
+@code
+ __kmpc_atomic_fixed1_add
+ __kmpc_atomic_fixed1_add_cpt
+ __kmpc_atomic_fixed1_add_fp
+ __kmpc_atomic_fixed1_andb
+ __kmpc_atomic_fixed1_andb_cpt
+ __kmpc_atomic_fixed1_andl
+ __kmpc_atomic_fixed1_andl_cpt
+ __kmpc_atomic_fixed1_div
+ __kmpc_atomic_fixed1_div_cpt
+ __kmpc_atomic_fixed1_div_cpt_rev
+ __kmpc_atomic_fixed1_div_float8
+ __kmpc_atomic_fixed1_div_fp
+ __kmpc_atomic_fixed1_div_rev
+ __kmpc_atomic_fixed1_eqv
+ __kmpc_atomic_fixed1_eqv_cpt
+ __kmpc_atomic_fixed1_max
+ __kmpc_atomic_fixed1_max_cpt
+ __kmpc_atomic_fixed1_min
+ __kmpc_atomic_fixed1_min_cpt
+ __kmpc_atomic_fixed1_mul
+ __kmpc_atomic_fixed1_mul_cpt
+ __kmpc_atomic_fixed1_mul_float8
+ __kmpc_atomic_fixed1_mul_fp
+ __kmpc_atomic_fixed1_neqv
+ __kmpc_atomic_fixed1_neqv_cpt
+ __kmpc_atomic_fixed1_orb
+ __kmpc_atomic_fixed1_orb_cpt
+ __kmpc_atomic_fixed1_orl
+ __kmpc_atomic_fixed1_orl_cpt
+ __kmpc_atomic_fixed1_rd
+ __kmpc_atomic_fixed1_shl
+ __kmpc_atomic_fixed1_shl_cpt
+ __kmpc_atomic_fixed1_shl_cpt_rev
+ __kmpc_atomic_fixed1_shl_rev
+ __kmpc_atomic_fixed1_shr
+ __kmpc_atomic_fixed1_shr_cpt
+ __kmpc_atomic_fixed1_shr_cpt_rev
+ __kmpc_atomic_fixed1_shr_rev
+ __kmpc_atomic_fixed1_sub
+ __kmpc_atomic_fixed1_sub_cpt
+ __kmpc_atomic_fixed1_sub_cpt_rev
+ __kmpc_atomic_fixed1_sub_fp
+ __kmpc_atomic_fixed1_sub_rev
+ __kmpc_atomic_fixed1_swp
+ __kmpc_atomic_fixed1_wr
+ __kmpc_atomic_fixed1_xor
+ __kmpc_atomic_fixed1_xor_cpt
+ __kmpc_atomic_fixed1u_div
+ __kmpc_atomic_fixed1u_div_cpt
+ __kmpc_atomic_fixed1u_div_cpt_rev
+ __kmpc_atomic_fixed1u_div_fp
+ __kmpc_atomic_fixed1u_div_rev
+ __kmpc_atomic_fixed1u_shr
+ __kmpc_atomic_fixed1u_shr_cpt
+ __kmpc_atomic_fixed1u_shr_cpt_rev
+ __kmpc_atomic_fixed1u_shr_rev
+ __kmpc_atomic_fixed2_add
+ __kmpc_atomic_fixed2_add_cpt
+ __kmpc_atomic_fixed2_add_fp
+ __kmpc_atomic_fixed2_andb
+ __kmpc_atomic_fixed2_andb_cpt
+ __kmpc_atomic_fixed2_andl
+ __kmpc_atomic_fixed2_andl_cpt
+ __kmpc_atomic_fixed2_div
+ __kmpc_atomic_fixed2_div_cpt
+ __kmpc_atomic_fixed2_div_cpt_rev
+ __kmpc_atomic_fixed2_div_float8
+ __kmpc_atomic_fixed2_div_fp
+ __kmpc_atomic_fixed2_div_rev
+ __kmpc_atomic_fixed2_eqv
+ __kmpc_atomic_fixed2_eqv_cpt
+ __kmpc_atomic_fixed2_max
+ __kmpc_atomic_fixed2_max_cpt
+ __kmpc_atomic_fixed2_min
+ __kmpc_atomic_fixed2_min_cpt
+ __kmpc_atomic_fixed2_mul
+ __kmpc_atomic_fixed2_mul_cpt
+ __kmpc_atomic_fixed2_mul_float8
+ __kmpc_atomic_fixed2_mul_fp
+ __kmpc_atomic_fixed2_neqv
+ __kmpc_atomic_fixed2_neqv_cpt
+ __kmpc_atomic_fixed2_orb
+ __kmpc_atomic_fixed2_orb_cpt
+ __kmpc_atomic_fixed2_orl
+ __kmpc_atomic_fixed2_orl_cpt
+ __kmpc_atomic_fixed2_rd
+ __kmpc_atomic_fixed2_shl
+ __kmpc_atomic_fixed2_shl_cpt
+ __kmpc_atomic_fixed2_shl_cpt_rev
+ __kmpc_atomic_fixed2_shl_rev
+ __kmpc_atomic_fixed2_shr
+ __kmpc_atomic_fixed2_shr_cpt
+ __kmpc_atomic_fixed2_shr_cpt_rev
+ __kmpc_atomic_fixed2_shr_rev
+ __kmpc_atomic_fixed2_sub
+ __kmpc_atomic_fixed2_sub_cpt
+ __kmpc_atomic_fixed2_sub_cpt_rev
+ __kmpc_atomic_fixed2_sub_fp
+ __kmpc_atomic_fixed2_sub_rev
+ __kmpc_atomic_fixed2_swp
+ __kmpc_atomic_fixed2_wr
+ __kmpc_atomic_fixed2_xor
+ __kmpc_atomic_fixed2_xor_cpt
+ __kmpc_atomic_fixed2u_div
+ __kmpc_atomic_fixed2u_div_cpt
+ __kmpc_atomic_fixed2u_div_cpt_rev
+ __kmpc_atomic_fixed2u_div_fp
+ __kmpc_atomic_fixed2u_div_rev
+ __kmpc_atomic_fixed2u_shr
+ __kmpc_atomic_fixed2u_shr_cpt
+ __kmpc_atomic_fixed2u_shr_cpt_rev
+ __kmpc_atomic_fixed2u_shr_rev
+ __kmpc_atomic_fixed4_add
+ __kmpc_atomic_fixed4_add_cpt
+ __kmpc_atomic_fixed4_add_fp
+ __kmpc_atomic_fixed4_andb
+ __kmpc_atomic_fixed4_andb_cpt
+ __kmpc_atomic_fixed4_andl
+ __kmpc_atomic_fixed4_andl_cpt
+ __kmpc_atomic_fixed4_div
+ __kmpc_atomic_fixed4_div_cpt
+ __kmpc_atomic_fixed4_div_cpt_rev
+ __kmpc_atomic_fixed4_div_float8
+ __kmpc_atomic_fixed4_div_fp
+ __kmpc_atomic_fixed4_div_rev
+ __kmpc_atomic_fixed4_eqv
+ __kmpc_atomic_fixed4_eqv_cpt
+ __kmpc_atomic_fixed4_max
+ __kmpc_atomic_fixed4_max_cpt
+ __kmpc_atomic_fixed4_min
+ __kmpc_atomic_fixed4_min_cpt
+ __kmpc_atomic_fixed4_mul
+ __kmpc_atomic_fixed4_mul_cpt
+ __kmpc_atomic_fixed4_mul_float8
+ __kmpc_atomic_fixed4_mul_fp
+ __kmpc_atomic_fixed4_neqv
+ __kmpc_atomic_fixed4_neqv_cpt
+ __kmpc_atomic_fixed4_orb
+ __kmpc_atomic_fixed4_orb_cpt
+ __kmpc_atomic_fixed4_orl
+ __kmpc_atomic_fixed4_orl_cpt
+ __kmpc_atomic_fixed4_rd
+ __kmpc_atomic_fixed4_shl
+ __kmpc_atomic_fixed4_shl_cpt
+ __kmpc_atomic_fixed4_shl_cpt_rev
+ __kmpc_atomic_fixed4_shl_rev
+ __kmpc_atomic_fixed4_shr
+ __kmpc_atomic_fixed4_shr_cpt
+ __kmpc_atomic_fixed4_shr_cpt_rev
+ __kmpc_atomic_fixed4_shr_rev
+ __kmpc_atomic_fixed4_sub
+ __kmpc_atomic_fixed4_sub_cpt
+ __kmpc_atomic_fixed4_sub_cpt_rev
+ __kmpc_atomic_fixed4_sub_fp
+ __kmpc_atomic_fixed4_sub_rev
+ __kmpc_atomic_fixed4_swp
+ __kmpc_atomic_fixed4_wr
+ __kmpc_atomic_fixed4_xor
+ __kmpc_atomic_fixed4_xor_cpt
+ __kmpc_atomic_fixed4u_div
+ __kmpc_atomic_fixed4u_div_cpt
+ __kmpc_atomic_fixed4u_div_cpt_rev
+ __kmpc_atomic_fixed4u_div_fp
+ __kmpc_atomic_fixed4u_div_rev
+ __kmpc_atomic_fixed4u_shr
+ __kmpc_atomic_fixed4u_shr_cpt
+ __kmpc_atomic_fixed4u_shr_cpt_rev
+ __kmpc_atomic_fixed4u_shr_rev
+ __kmpc_atomic_fixed8_add
+ __kmpc_atomic_fixed8_add_cpt
+ __kmpc_atomic_fixed8_add_fp
+ __kmpc_atomic_fixed8_andb
+ __kmpc_atomic_fixed8_andb_cpt
+ __kmpc_atomic_fixed8_andl
+ __kmpc_atomic_fixed8_andl_cpt
+ __kmpc_atomic_fixed8_div
+ __kmpc_atomic_fixed8_div_cpt
+ __kmpc_atomic_fixed8_div_cpt_rev
+ __kmpc_atomic_fixed8_div_float8
+ __kmpc_atomic_fixed8_div_fp
+ __kmpc_atomic_fixed8_div_rev
+ __kmpc_atomic_fixed8_eqv
+ __kmpc_atomic_fixed8_eqv_cpt
+ __kmpc_atomic_fixed8_max
+ __kmpc_atomic_fixed8_max_cpt
+ __kmpc_atomic_fixed8_min
+ __kmpc_atomic_fixed8_min_cpt
+ __kmpc_atomic_fixed8_mul
+ __kmpc_atomic_fixed8_mul_cpt
+ __kmpc_atomic_fixed8_mul_float8
+ __kmpc_atomic_fixed8_mul_fp
+ __kmpc_atomic_fixed8_neqv
+ __kmpc_atomic_fixed8_neqv_cpt
+ __kmpc_atomic_fixed8_orb
+ __kmpc_atomic_fixed8_orb_cpt
+ __kmpc_atomic_fixed8_orl
+ __kmpc_atomic_fixed8_orl_cpt
+ __kmpc_atomic_fixed8_rd
+ __kmpc_atomic_fixed8_shl
+ __kmpc_atomic_fixed8_shl_cpt
+ __kmpc_atomic_fixed8_shl_cpt_rev
+ __kmpc_atomic_fixed8_shl_rev
+ __kmpc_atomic_fixed8_shr
+ __kmpc_atomic_fixed8_shr_cpt
+ __kmpc_atomic_fixed8_shr_cpt_rev
+ __kmpc_atomic_fixed8_shr_rev
+ __kmpc_atomic_fixed8_sub
+ __kmpc_atomic_fixed8_sub_cpt
+ __kmpc_atomic_fixed8_sub_cpt_rev
+ __kmpc_atomic_fixed8_sub_fp
+ __kmpc_atomic_fixed8_sub_rev
+ __kmpc_atomic_fixed8_swp
+ __kmpc_atomic_fixed8_wr
+ __kmpc_atomic_fixed8_xor
+ __kmpc_atomic_fixed8_xor_cpt
+ __kmpc_atomic_fixed8u_div
+ __kmpc_atomic_fixed8u_div_cpt
+ __kmpc_atomic_fixed8u_div_cpt_rev
+ __kmpc_atomic_fixed8u_div_fp
+ __kmpc_atomic_fixed8u_div_rev
+ __kmpc_atomic_fixed8u_shr
+ __kmpc_atomic_fixed8u_shr_cpt
+ __kmpc_atomic_fixed8u_shr_cpt_rev
+ __kmpc_atomic_fixed8u_shr_rev
+@endcode
+
+Functions for floating point
+----------------------------
+There are versions here for floating point numbers of size 4, 8, 10 and 16 bytes.
+(Ten byte floats are used by X87, but are now rare).
+@code
+ __kmpc_atomic_float4_add
+ __kmpc_atomic_float4_add_cpt
+ __kmpc_atomic_float4_add_float8
+ __kmpc_atomic_float4_add_fp
+ __kmpc_atomic_float4_div
+ __kmpc_atomic_float4_div_cpt
+ __kmpc_atomic_float4_div_cpt_rev
+ __kmpc_atomic_float4_div_float8
+ __kmpc_atomic_float4_div_fp
+ __kmpc_atomic_float4_div_rev
+ __kmpc_atomic_float4_max
+ __kmpc_atomic_float4_max_cpt
+ __kmpc_atomic_float4_min
+ __kmpc_atomic_float4_min_cpt
+ __kmpc_atomic_float4_mul
+ __kmpc_atomic_float4_mul_cpt
+ __kmpc_atomic_float4_mul_float8
+ __kmpc_atomic_float4_mul_fp
+ __kmpc_atomic_float4_rd
+ __kmpc_atomic_float4_sub
+ __kmpc_atomic_float4_sub_cpt
+ __kmpc_atomic_float4_sub_cpt_rev
+ __kmpc_atomic_float4_sub_float8
+ __kmpc_atomic_float4_sub_fp
+ __kmpc_atomic_float4_sub_rev
+ __kmpc_atomic_float4_swp
+ __kmpc_atomic_float4_wr
+ __kmpc_atomic_float8_add
+ __kmpc_atomic_float8_add_cpt
+ __kmpc_atomic_float8_add_fp
+ __kmpc_atomic_float8_div
+ __kmpc_atomic_float8_div_cpt
+ __kmpc_atomic_float8_div_cpt_rev
+ __kmpc_atomic_float8_div_fp
+ __kmpc_atomic_float8_div_rev
+ __kmpc_atomic_float8_max
+ __kmpc_atomic_float8_max_cpt
+ __kmpc_atomic_float8_min
+ __kmpc_atomic_float8_min_cpt
+ __kmpc_atomic_float8_mul
+ __kmpc_atomic_float8_mul_cpt
+ __kmpc_atomic_float8_mul_fp
+ __kmpc_atomic_float8_rd
+ __kmpc_atomic_float8_sub
+ __kmpc_atomic_float8_sub_cpt
+ __kmpc_atomic_float8_sub_cpt_rev
+ __kmpc_atomic_float8_sub_fp
+ __kmpc_atomic_float8_sub_rev
+ __kmpc_atomic_float8_swp
+ __kmpc_atomic_float8_wr
+ __kmpc_atomic_float10_add
+ __kmpc_atomic_float10_add_cpt
+ __kmpc_atomic_float10_add_fp
+ __kmpc_atomic_float10_div
+ __kmpc_atomic_float10_div_cpt
+ __kmpc_atomic_float10_div_cpt_rev
+ __kmpc_atomic_float10_div_fp
+ __kmpc_atomic_float10_div_rev
+ __kmpc_atomic_float10_mul
+ __kmpc_atomic_float10_mul_cpt
+ __kmpc_atomic_float10_mul_fp
+ __kmpc_atomic_float10_rd
+ __kmpc_atomic_float10_sub
+ __kmpc_atomic_float10_sub_cpt
+ __kmpc_atomic_float10_sub_cpt_rev
+ __kmpc_atomic_float10_sub_fp
+ __kmpc_atomic_float10_sub_rev
+ __kmpc_atomic_float10_swp
+ __kmpc_atomic_float10_wr
+ __kmpc_atomic_float16_add
+ __kmpc_atomic_float16_add_cpt
+ __kmpc_atomic_float16_div
+ __kmpc_atomic_float16_div_cpt
+ __kmpc_atomic_float16_div_cpt_rev
+ __kmpc_atomic_float16_div_rev
+ __kmpc_atomic_float16_max
+ __kmpc_atomic_float16_max_cpt
+ __kmpc_atomic_float16_min
+ __kmpc_atomic_float16_min_cpt
+ __kmpc_atomic_float16_mul
+ __kmpc_atomic_float16_mul_cpt
+ __kmpc_atomic_float16_rd
+ __kmpc_atomic_float16_sub
+ __kmpc_atomic_float16_sub_cpt
+ __kmpc_atomic_float16_sub_cpt_rev
+ __kmpc_atomic_float16_sub_rev
+ __kmpc_atomic_float16_swp
+ __kmpc_atomic_float16_wr
+@endcode
+
+Functions for Complex types
+---------------------------
+Functions for complex types whose component floating point variables are of size 4,8,10 or 16 bytes.
+The names here are based on the size of the component float, *not* the size of the complex type. So
+`__kmpc_atomc_cmplx8_add` is an operation on a `complex<double>` or `complex(kind=8)`, *not* `complex<float>`.
+
+@code
+ __kmpc_atomic_cmplx4_add
+ __kmpc_atomic_cmplx4_add_cmplx8
+ __kmpc_atomic_cmplx4_add_cpt
+ __kmpc_atomic_cmplx4_div
+ __kmpc_atomic_cmplx4_div_cmplx8
+ __kmpc_atomic_cmplx4_div_cpt
+ __kmpc_atomic_cmplx4_div_cpt_rev
+ __kmpc_atomic_cmplx4_div_rev
+ __kmpc_atomic_cmplx4_mul
+ __kmpc_atomic_cmplx4_mul_cmplx8
+ __kmpc_atomic_cmplx4_mul_cpt
+ __kmpc_atomic_cmplx4_rd
+ __kmpc_atomic_cmplx4_sub
+ __kmpc_atomic_cmplx4_sub_cmplx8
+ __kmpc_atomic_cmplx4_sub_cpt
+ __kmpc_atomic_cmplx4_sub_cpt_rev
+ __kmpc_atomic_cmplx4_sub_rev
+ __kmpc_atomic_cmplx4_swp
+ __kmpc_atomic_cmplx4_wr
+ __kmpc_atomic_cmplx8_add
+ __kmpc_atomic_cmplx8_add_cpt
+ __kmpc_atomic_cmplx8_div
+ __kmpc_atomic_cmplx8_div_cpt
+ __kmpc_atomic_cmplx8_div_cpt_rev
+ __kmpc_atomic_cmplx8_div_rev
+ __kmpc_atomic_cmplx8_mul
+ __kmpc_atomic_cmplx8_mul_cpt
+ __kmpc_atomic_cmplx8_rd
+ __kmpc_atomic_cmplx8_sub
+ __kmpc_atomic_cmplx8_sub_cpt
+ __kmpc_atomic_cmplx8_sub_cpt_rev
+ __kmpc_atomic_cmplx8_sub_rev
+ __kmpc_atomic_cmplx8_swp
+ __kmpc_atomic_cmplx8_wr
+ __kmpc_atomic_cmplx10_add
+ __kmpc_atomic_cmplx10_add_cpt
+ __kmpc_atomic_cmplx10_div
+ __kmpc_atomic_cmplx10_div_cpt
+ __kmpc_atomic_cmplx10_div_cpt_rev
+ __kmpc_atomic_cmplx10_div_rev
+ __kmpc_atomic_cmplx10_mul
+ __kmpc_atomic_cmplx10_mul_cpt
+ __kmpc_atomic_cmplx10_rd
+ __kmpc_atomic_cmplx10_sub
+ __kmpc_atomic_cmplx10_sub_cpt
+ __kmpc_atomic_cmplx10_sub_cpt_rev
+ __kmpc_atomic_cmplx10_sub_rev
+ __kmpc_atomic_cmplx10_swp
+ __kmpc_atomic_cmplx10_wr
+ __kmpc_atomic_cmplx16_add
+ __kmpc_atomic_cmplx16_add_cpt
+ __kmpc_atomic_cmplx16_div
+ __kmpc_atomic_cmplx16_div_cpt
+ __kmpc_atomic_cmplx16_div_cpt_rev
+ __kmpc_atomic_cmplx16_div_rev
+ __kmpc_atomic_cmplx16_mul
+ __kmpc_atomic_cmplx16_mul_cpt
+ __kmpc_atomic_cmplx16_rd
+ __kmpc_atomic_cmplx16_sub
+ __kmpc_atomic_cmplx16_sub_cpt
+ __kmpc_atomic_cmplx16_sub_cpt_rev
+ __kmpc_atomic_cmplx16_swp
+ __kmpc_atomic_cmplx16_wr
+@endcode
+*/
+
+/*!
+@ingroup ATOMIC_OPS
+@{
+*/
+
+/*
+ * Global vars
+ */
+
+#ifndef KMP_GOMP_COMPAT
+int __kmp_atomic_mode = 1; // Intel perf
+#else
+int __kmp_atomic_mode = 2; // GOMP compatibility
+#endif /* KMP_GOMP_COMPAT */
+
+KMP_ALIGN(128)
+
+kmp_atomic_lock_t __kmp_atomic_lock; /* Control access to all user coded atomics in Gnu compat mode */
+kmp_atomic_lock_t __kmp_atomic_lock_1i; /* Control access to all user coded atomics for 1-byte fixed data types */
+kmp_atomic_lock_t __kmp_atomic_lock_2i; /* Control access to all user coded atomics for 2-byte fixed data types */
+kmp_atomic_lock_t __kmp_atomic_lock_4i; /* Control access to all user coded atomics for 4-byte fixed data types */
+kmp_atomic_lock_t __kmp_atomic_lock_4r; /* Control access to all user coded atomics for kmp_real32 data type */
+kmp_atomic_lock_t __kmp_atomic_lock_8i; /* Control access to all user coded atomics for 8-byte fixed data types */
+kmp_atomic_lock_t __kmp_atomic_lock_8r; /* Control access to all user coded atomics for kmp_real64 data type */
+kmp_atomic_lock_t __kmp_atomic_lock_8c; /* Control access to all user coded atomics for complex byte data type */
+kmp_atomic_lock_t __kmp_atomic_lock_10r; /* Control access to all user coded atomics for long double data type */
+kmp_atomic_lock_t __kmp_atomic_lock_16r; /* Control access to all user coded atomics for _Quad data type */
+kmp_atomic_lock_t __kmp_atomic_lock_16c; /* Control access to all user coded atomics for double complex data type*/
+kmp_atomic_lock_t __kmp_atomic_lock_20c; /* Control access to all user coded atomics for long double complex type*/
+kmp_atomic_lock_t __kmp_atomic_lock_32c; /* Control access to all user coded atomics for _Quad complex data type */
+
+
+/*
+ 2007-03-02:
+ Without "volatile" specifier in OP_CMPXCHG and MIN_MAX_CMPXCHG we have a
+ bug on *_32 and *_32e. This is just a temporary workaround for the problem.
+ It seems the right solution is writing OP_CMPXCHG and MIN_MAX_CMPXCHG
+ routines in assembler language.
+*/
+#define KMP_ATOMIC_VOLATILE volatile
+
+#if ( KMP_ARCH_X86 ) && KMP_HAVE_QUAD
+
+ static inline void operator +=( Quad_a4_t & lhs, Quad_a4_t & rhs ) { lhs.q += rhs.q; };
+ static inline void operator -=( Quad_a4_t & lhs, Quad_a4_t & rhs ) { lhs.q -= rhs.q; };
+ static inline void operator *=( Quad_a4_t & lhs, Quad_a4_t & rhs ) { lhs.q *= rhs.q; };
+ static inline void operator /=( Quad_a4_t & lhs, Quad_a4_t & rhs ) { lhs.q /= rhs.q; };
+ static inline bool operator < ( Quad_a4_t & lhs, Quad_a4_t & rhs ) { return lhs.q < rhs.q; }
+ static inline bool operator > ( Quad_a4_t & lhs, Quad_a4_t & rhs ) { return lhs.q > rhs.q; }
+
+ static inline void operator +=( Quad_a16_t & lhs, Quad_a16_t & rhs ) { lhs.q += rhs.q; };
+ static inline void operator -=( Quad_a16_t & lhs, Quad_a16_t & rhs ) { lhs.q -= rhs.q; };
+ static inline void operator *=( Quad_a16_t & lhs, Quad_a16_t & rhs ) { lhs.q *= rhs.q; };
+ static inline void operator /=( Quad_a16_t & lhs, Quad_a16_t & rhs ) { lhs.q /= rhs.q; };
+ static inline bool operator < ( Quad_a16_t & lhs, Quad_a16_t & rhs ) { return lhs.q < rhs.q; }
+ static inline bool operator > ( Quad_a16_t & lhs, Quad_a16_t & rhs ) { return lhs.q > rhs.q; }
+
+ static inline void operator +=( kmp_cmplx128_a4_t & lhs, kmp_cmplx128_a4_t & rhs ) { lhs.q += rhs.q; };
+ static inline void operator -=( kmp_cmplx128_a4_t & lhs, kmp_cmplx128_a4_t & rhs ) { lhs.q -= rhs.q; };
+ static inline void operator *=( kmp_cmplx128_a4_t & lhs, kmp_cmplx128_a4_t & rhs ) { lhs.q *= rhs.q; };
+ static inline void operator /=( kmp_cmplx128_a4_t & lhs, kmp_cmplx128_a4_t & rhs ) { lhs.q /= rhs.q; };
+
+ static inline void operator +=( kmp_cmplx128_a16_t & lhs, kmp_cmplx128_a16_t & rhs ) { lhs.q += rhs.q; };
+ static inline void operator -=( kmp_cmplx128_a16_t & lhs, kmp_cmplx128_a16_t & rhs ) { lhs.q -= rhs.q; };
+ static inline void operator *=( kmp_cmplx128_a16_t & lhs, kmp_cmplx128_a16_t & rhs ) { lhs.q *= rhs.q; };
+ static inline void operator /=( kmp_cmplx128_a16_t & lhs, kmp_cmplx128_a16_t & rhs ) { lhs.q /= rhs.q; };
+
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ATOMIC implementation routines */
+/* one routine for each operation and operand type */
+/* ------------------------------------------------------------------------ */
+
+// All routines declarations looks like
+// void __kmpc_atomic_RTYPE_OP( ident_t*, int, TYPE *lhs, TYPE rhs );
+// ------------------------------------------------------------------------
+
+#define KMP_CHECK_GTID \
+ if ( gtid == KMP_GTID_UNKNOWN ) { \
+ gtid = __kmp_entry_gtid(); \
+ } // check and get gtid when needed
+
+// Beginning of a definition (provides name, parameters, gebug trace)
+// TYPE_ID - operands type and size (fixed*, fixed*u for signed, unsigned fixed)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operands' type
+#define ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE, RET_TYPE) \
+RET_TYPE __kmpc_atomic_##TYPE_ID##_##OP_ID( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID ": T#%d\n", gtid ));
+
+// ------------------------------------------------------------------------
+// Lock variables used for critical sections for various size operands
+#define ATOMIC_LOCK0 __kmp_atomic_lock // all types, for Gnu compat
+#define ATOMIC_LOCK1i __kmp_atomic_lock_1i // char
+#define ATOMIC_LOCK2i __kmp_atomic_lock_2i // short
+#define ATOMIC_LOCK4i __kmp_atomic_lock_4i // long int
+#define ATOMIC_LOCK4r __kmp_atomic_lock_4r // float
+#define ATOMIC_LOCK8i __kmp_atomic_lock_8i // long long int
+#define ATOMIC_LOCK8r __kmp_atomic_lock_8r // double
+#define ATOMIC_LOCK8c __kmp_atomic_lock_8c // float complex
+#define ATOMIC_LOCK10r __kmp_atomic_lock_10r // long double
+#define ATOMIC_LOCK16r __kmp_atomic_lock_16r // _Quad
+#define ATOMIC_LOCK16c __kmp_atomic_lock_16c // double complex
+#define ATOMIC_LOCK20c __kmp_atomic_lock_20c // long double complex
+#define ATOMIC_LOCK32c __kmp_atomic_lock_32c // _Quad complex
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ (*lhs) OP (rhs); \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+
+// ------------------------------------------------------------------------
+// For GNU compatibility, we may need to use a critical section,
+// even though it is not required by the ISA.
+//
+// On IA-32 architecture, all atomic operations except for fixed 4 byte add,
+// sub, and bitwise logical ops, and 1 & 2 byte logical ops use a common
+// critical section. On Intel(R) 64, all atomic operations are done with fetch
+// and add or compare and exchange. Therefore, the FLAG parameter to this
+// macro is either KMP_ARCH_X86 or 0 (or 1, for Intel-specific extension which
+// require a critical section, where we predict that they will be implemented
+// in the Gnu codegen by calling GOMP_atomic_start() / GOMP_atomic_end()).
+//
+// When the OP_GOMP_CRITICAL macro is used in a *CRITICAL* macro construct,
+// the FLAG parameter should always be 1. If we know that we will be using
+// a critical section, then we want to make certain that we use the generic
+// lock __kmp_atomic_lock to protect the atomic update, and not of of the
+// locks that are specialized based upon the size or type of the data.
+//
+// If FLAG is 0, then we are relying on dead code elimination by the build
+// compiler to get rid of the useless block of code, and save a needless
+// branch at runtime.
+//
+
+#ifdef KMP_GOMP_COMPAT
+# define OP_GOMP_CRITICAL(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL( OP, 0 ); \
+ return; \
+ }
+# else
+# define OP_GOMP_CRITICAL(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+#if KMP_MIC
+# define KMP_DO_PAUSE _mm_delay_32( 1 )
+#else
+# define KMP_DO_PAUSE KMP_CPU_PAUSE()
+#endif /* KMP_MIC */
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+#define OP_CMPXCHG(TYPE,BITS,OP) \
+ { \
+ TYPE old_value, new_value; \
+ old_value = *(TYPE volatile *)lhs; \
+ new_value = old_value OP rhs; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_DO_PAUSE; \
+ \
+ old_value = *(TYPE volatile *)lhs; \
+ new_value = old_value OP rhs; \
+ } \
+ }
+
+#if USE_CMPXCHG_FIX
+// 2007-06-25:
+// workaround for C78287 (complex(kind=4) data type)
+// lin_32, lin_32e, win_32 and win_32e are affected (I verified the asm)
+// Compiler ignores the volatile qualifier of the temp_val in the OP_CMPXCHG macro.
+// This is a problem of the compiler.
+// Related tracker is C76005, targeted to 11.0.
+// I verified the asm of the workaround.
+#define OP_CMPXCHG_WORKAROUND(TYPE,BITS,OP) \
+ { \
+ struct _sss { \
+ TYPE cmp; \
+ kmp_int##BITS *vvv; \
+ }; \
+ struct _sss old_value, new_value; \
+ old_value.vvv = ( kmp_int##BITS * )&old_value.cmp; \
+ new_value.vvv = ( kmp_int##BITS * )&new_value.cmp; \
+ *old_value.vvv = * ( volatile kmp_int##BITS * ) lhs; \
+ new_value.cmp = old_value.cmp OP rhs; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) old_value.vvv, \
+ *VOLATILE_CAST(kmp_int##BITS *) new_value.vvv ) ) \
+ { \
+ KMP_DO_PAUSE; \
+ \
+ *old_value.vvv = * ( volatile kmp_int##BITS * ) lhs; \
+ new_value.cmp = old_value.cmp OP rhs; \
+ } \
+ }
+// end of the first part of the workaround for C78287
+#endif // USE_CMPXCHG_FIX
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+// ------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ====================================
+#define ATOMIC_FIXED_ADD(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ /* OP used as a sign for subtraction: (lhs-rhs) --> (lhs+-rhs) */ \
+ KMP_TEST_THEN_ADD##BITS( lhs, OP rhs ); \
+}
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG(TYPE,BITS,OP) \
+}
+#if USE_CMPXCHG_FIX
+// -------------------------------------------------------------------------
+// workaround for C78287 (complex(kind=4) data type)
+#define ATOMIC_CMPXCHG_WORKAROUND(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG_WORKAROUND(TYPE,BITS,OP) \
+}
+// end of the second part of the workaround for C78287
+#endif
+
+#else
+// -------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define ATOMIC_FIXED_ADD(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ /* OP used as a sign for subtraction: (lhs-rhs) --> (lhs+-rhs) */ \
+ KMP_TEST_THEN_ADD##BITS( lhs, OP rhs ); \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(OP##=,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(OP##=,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+#if USE_CMPXCHG_FIX
+// -------------------------------------------------------------------------
+// workaround for C78287 (complex(kind=4) data type)
+#define ATOMIC_CMPXCHG_WORKAROUND(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(OP##=,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+// end of the second part of the workaround for C78287
+#endif // USE_CMPXCHG_FIX
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+// Routines for ATOMIC 4-byte operands addition and subtraction
+ATOMIC_FIXED_ADD( fixed4, add, kmp_int32, 32, +, 4i, 3, 0 ) // __kmpc_atomic_fixed4_add
+ATOMIC_FIXED_ADD( fixed4, sub, kmp_int32, 32, -, 4i, 3, 0 ) // __kmpc_atomic_fixed4_sub
+
+ATOMIC_CMPXCHG( float4, add, kmp_real32, 32, +, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_add
+ATOMIC_CMPXCHG( float4, sub, kmp_real32, 32, -, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub
+
+// Routines for ATOMIC 8-byte operands addition and subtraction
+ATOMIC_FIXED_ADD( fixed8, add, kmp_int64, 64, +, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_add
+ATOMIC_FIXED_ADD( fixed8, sub, kmp_int64, 64, -, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_sub
+
+ATOMIC_CMPXCHG( float8, add, kmp_real64, 64, +, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_add
+ATOMIC_CMPXCHG( float8, sub, kmp_real64, 64, -, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_sub
+
+// ------------------------------------------------------------------------
+// Entries definition for integer operands
+// TYPE_ID - operands type and size (fixed4, float4)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operand type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator (used in critical section)
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+// MASK - used for alignment check
+
+// TYPE_ID,OP_ID, TYPE, BITS,OP,LCK_ID,MASK,GOMP_FLAG
+// ------------------------------------------------------------------------
+// Routines for ATOMIC integer operands, other operators
+// ------------------------------------------------------------------------
+// TYPE_ID,OP_ID, TYPE, OP, LCK_ID, GOMP_FLAG
+ATOMIC_CMPXCHG( fixed1, add, kmp_int8, 8, +, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_add
+ATOMIC_CMPXCHG( fixed1, andb, kmp_int8, 8, &, 1i, 0, 0 ) // __kmpc_atomic_fixed1_andb
+ATOMIC_CMPXCHG( fixed1, div, kmp_int8, 8, /, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div
+ATOMIC_CMPXCHG( fixed1u, div, kmp_uint8, 8, /, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_div
+ATOMIC_CMPXCHG( fixed1, mul, kmp_int8, 8, *, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul
+ATOMIC_CMPXCHG( fixed1, orb, kmp_int8, 8, |, 1i, 0, 0 ) // __kmpc_atomic_fixed1_orb
+ATOMIC_CMPXCHG( fixed1, shl, kmp_int8, 8, <<, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shl
+ATOMIC_CMPXCHG( fixed1, shr, kmp_int8, 8, >>, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shr
+ATOMIC_CMPXCHG( fixed1u, shr, kmp_uint8, 8, >>, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_shr
+ATOMIC_CMPXCHG( fixed1, sub, kmp_int8, 8, -, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_sub
+ATOMIC_CMPXCHG( fixed1, xor, kmp_int8, 8, ^, 1i, 0, 0 ) // __kmpc_atomic_fixed1_xor
+ATOMIC_CMPXCHG( fixed2, add, kmp_int16, 16, +, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_add
+ATOMIC_CMPXCHG( fixed2, andb, kmp_int16, 16, &, 2i, 1, 0 ) // __kmpc_atomic_fixed2_andb
+ATOMIC_CMPXCHG( fixed2, div, kmp_int16, 16, /, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div
+ATOMIC_CMPXCHG( fixed2u, div, kmp_uint16, 16, /, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_div
+ATOMIC_CMPXCHG( fixed2, mul, kmp_int16, 16, *, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_mul
+ATOMIC_CMPXCHG( fixed2, orb, kmp_int16, 16, |, 2i, 1, 0 ) // __kmpc_atomic_fixed2_orb
+ATOMIC_CMPXCHG( fixed2, shl, kmp_int16, 16, <<, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shl
+ATOMIC_CMPXCHG( fixed2, shr, kmp_int16, 16, >>, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shr
+ATOMIC_CMPXCHG( fixed2u, shr, kmp_uint16, 16, >>, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_shr
+ATOMIC_CMPXCHG( fixed2, sub, kmp_int16, 16, -, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_sub
+ATOMIC_CMPXCHG( fixed2, xor, kmp_int16, 16, ^, 2i, 1, 0 ) // __kmpc_atomic_fixed2_xor
+ATOMIC_CMPXCHG( fixed4, andb, kmp_int32, 32, &, 4i, 3, 0 ) // __kmpc_atomic_fixed4_andb
+ATOMIC_CMPXCHG( fixed4, div, kmp_int32, 32, /, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_div
+ATOMIC_CMPXCHG( fixed4u, div, kmp_uint32, 32, /, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_div
+ATOMIC_CMPXCHG( fixed4, mul, kmp_int32, 32, *, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_mul
+ATOMIC_CMPXCHG( fixed4, orb, kmp_int32, 32, |, 4i, 3, 0 ) // __kmpc_atomic_fixed4_orb
+ATOMIC_CMPXCHG( fixed4, shl, kmp_int32, 32, <<, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shl
+ATOMIC_CMPXCHG( fixed4, shr, kmp_int32, 32, >>, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shr
+ATOMIC_CMPXCHG( fixed4u, shr, kmp_uint32, 32, >>, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_shr
+ATOMIC_CMPXCHG( fixed4, xor, kmp_int32, 32, ^, 4i, 3, 0 ) // __kmpc_atomic_fixed4_xor
+ATOMIC_CMPXCHG( fixed8, andb, kmp_int64, 64, &, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_andb
+ATOMIC_CMPXCHG( fixed8, div, kmp_int64, 64, /, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div
+ATOMIC_CMPXCHG( fixed8u, div, kmp_uint64, 64, /, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_div
+ATOMIC_CMPXCHG( fixed8, mul, kmp_int64, 64, *, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_mul
+ATOMIC_CMPXCHG( fixed8, orb, kmp_int64, 64, |, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_orb
+ATOMIC_CMPXCHG( fixed8, shl, kmp_int64, 64, <<, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shl
+ATOMIC_CMPXCHG( fixed8, shr, kmp_int64, 64, >>, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shr
+ATOMIC_CMPXCHG( fixed8u, shr, kmp_uint64, 64, >>, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_shr
+ATOMIC_CMPXCHG( fixed8, xor, kmp_int64, 64, ^, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_xor
+ATOMIC_CMPXCHG( float4, div, kmp_real32, 32, /, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div
+ATOMIC_CMPXCHG( float4, mul, kmp_real32, 32, *, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_mul
+ATOMIC_CMPXCHG( float8, div, kmp_real64, 64, /, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_div
+ATOMIC_CMPXCHG( float8, mul, kmp_real64, 64, *, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_mul
+// TYPE_ID,OP_ID, TYPE, OP, LCK_ID, GOMP_FLAG
+
+
+/* ------------------------------------------------------------------------ */
+/* Routines for C/C++ Reduction operators && and || */
+/* ------------------------------------------------------------------------ */
+
+// ------------------------------------------------------------------------
+// Need separate macros for &&, || because there is no combined assignment
+// TODO: eliminate ATOMIC_CRIT_{L,EQV} macros as not used
+#define ATOMIC_CRIT_L(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL( = *lhs OP, GOMP_FLAG ) \
+ OP_CRITICAL( = *lhs OP, LCK_ID ) \
+}
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+// ------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ===================================
+#define ATOMIC_CMPX_L(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL( = *lhs OP, GOMP_FLAG ) \
+ OP_CMPXCHG(TYPE,BITS,OP) \
+}
+
+#else
+// ------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define ATOMIC_CMPX_L(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(= *lhs OP,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(= *lhs OP,LCK_ID) /* unaligned - use critical */ \
+ } \
+}
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ATOMIC_CMPX_L( fixed1, andl, char, 8, &&, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_andl
+ATOMIC_CMPX_L( fixed1, orl, char, 8, ||, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_orl
+ATOMIC_CMPX_L( fixed2, andl, short, 16, &&, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_andl
+ATOMIC_CMPX_L( fixed2, orl, short, 16, ||, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_orl
+ATOMIC_CMPX_L( fixed4, andl, kmp_int32, 32, &&, 4i, 3, 0 ) // __kmpc_atomic_fixed4_andl
+ATOMIC_CMPX_L( fixed4, orl, kmp_int32, 32, ||, 4i, 3, 0 ) // __kmpc_atomic_fixed4_orl
+ATOMIC_CMPX_L( fixed8, andl, kmp_int64, 64, &&, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_andl
+ATOMIC_CMPX_L( fixed8, orl, kmp_int64, 64, ||, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_orl
+
+
+/* ------------------------------------------------------------------------- */
+/* Routines for Fortran operators that matched no one in C: */
+/* MAX, MIN, .EQV., .NEQV. */
+/* Operators .AND., .OR. are covered by __kmpc_atomic_*_{andl,orl} */
+/* Intrinsics IAND, IOR, IEOR are covered by __kmpc_atomic_*_{andb,orb,xor} */
+/* ------------------------------------------------------------------------- */
+
+// -------------------------------------------------------------------------
+// MIN and MAX need separate macros
+// OP - operator to check if we need any actions?
+#define MIN_MAX_CRITSECT(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if ( *lhs OP rhs ) { /* still need actions? */ \
+ *lhs = rhs; \
+ } \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+
+// -------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define GOMP_MIN_MAX_CRITSECT(OP,FLAG) \
+ if (( FLAG ) && ( __kmp_atomic_mode == 2 )) { \
+ KMP_CHECK_GTID; \
+ MIN_MAX_CRITSECT( OP, 0 ); \
+ return; \
+ }
+#else
+#define GOMP_MIN_MAX_CRITSECT(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// -------------------------------------------------------------------------
+#define MIN_MAX_CMPXCHG(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ while ( old_value OP rhs && /* still need actions? */ \
+ ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &rhs ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ } \
+ }
+
+// -------------------------------------------------------------------------
+// 1-byte, 2-byte operands - use critical section
+#define MIN_MAX_CRITICAL(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ if ( *lhs OP rhs ) { /* need actions? */ \
+ GOMP_MIN_MAX_CRITSECT(OP,GOMP_FLAG) \
+ MIN_MAX_CRITSECT(OP,LCK_ID) \
+ } \
+}
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+// -------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ====================================
+#define MIN_MAX_COMPXCHG(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ if ( *lhs OP rhs ) { \
+ GOMP_MIN_MAX_CRITSECT(OP,GOMP_FLAG) \
+ MIN_MAX_CMPXCHG(TYPE,BITS,OP) \
+ } \
+}
+
+#else
+// -------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define MIN_MAX_COMPXCHG(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ if ( *lhs OP rhs ) { \
+ GOMP_MIN_MAX_CRITSECT(OP,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ MIN_MAX_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ MIN_MAX_CRITSECT(OP,LCK_ID) /* unaligned address */ \
+ } \
+ } \
+}
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+MIN_MAX_COMPXCHG( fixed1, max, char, 8, <, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_max
+MIN_MAX_COMPXCHG( fixed1, min, char, 8, >, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_min
+MIN_MAX_COMPXCHG( fixed2, max, short, 16, <, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_max
+MIN_MAX_COMPXCHG( fixed2, min, short, 16, >, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_min
+MIN_MAX_COMPXCHG( fixed4, max, kmp_int32, 32, <, 4i, 3, 0 ) // __kmpc_atomic_fixed4_max
+MIN_MAX_COMPXCHG( fixed4, min, kmp_int32, 32, >, 4i, 3, 0 ) // __kmpc_atomic_fixed4_min
+MIN_MAX_COMPXCHG( fixed8, max, kmp_int64, 64, <, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_max
+MIN_MAX_COMPXCHG( fixed8, min, kmp_int64, 64, >, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_min
+MIN_MAX_COMPXCHG( float4, max, kmp_real32, 32, <, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_max
+MIN_MAX_COMPXCHG( float4, min, kmp_real32, 32, >, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_min
+MIN_MAX_COMPXCHG( float8, max, kmp_real64, 64, <, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_max
+MIN_MAX_COMPXCHG( float8, min, kmp_real64, 64, >, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_min
+#if KMP_HAVE_QUAD
+MIN_MAX_CRITICAL( float16, max, QUAD_LEGACY, <, 16r, 1 ) // __kmpc_atomic_float16_max
+MIN_MAX_CRITICAL( float16, min, QUAD_LEGACY, >, 16r, 1 ) // __kmpc_atomic_float16_min
+#if ( KMP_ARCH_X86 )
+ MIN_MAX_CRITICAL( float16, max_a16, Quad_a16_t, <, 16r, 1 ) // __kmpc_atomic_float16_max_a16
+ MIN_MAX_CRITICAL( float16, min_a16, Quad_a16_t, >, 16r, 1 ) // __kmpc_atomic_float16_min_a16
+#endif
+#endif
+// ------------------------------------------------------------------------
+// Need separate macros for .EQV. because of the need of complement (~)
+// OP ignored for critical sections, ^=~ used instead
+#define ATOMIC_CRIT_EQV(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(^=~,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL(^=~,LCK_ID) /* send assignment and complement */ \
+}
+
+// ------------------------------------------------------------------------
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+// ------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ===================================
+#define ATOMIC_CMPX_EQV(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(^=~,GOMP_FLAG) /* send assignment */ \
+ OP_CMPXCHG(TYPE,BITS,OP) \
+}
+// ------------------------------------------------------------------------
+#else
+// ------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define ATOMIC_CMPX_EQV(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(^=~,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(^=~,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ATOMIC_CMPXCHG( fixed1, neqv, kmp_int8, 8, ^, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_neqv
+ATOMIC_CMPXCHG( fixed2, neqv, kmp_int16, 16, ^, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_neqv
+ATOMIC_CMPXCHG( fixed4, neqv, kmp_int32, 32, ^, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_neqv
+ATOMIC_CMPXCHG( fixed8, neqv, kmp_int64, 64, ^, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_neqv
+ATOMIC_CMPX_EQV( fixed1, eqv, kmp_int8, 8, ^~, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_eqv
+ATOMIC_CMPX_EQV( fixed2, eqv, kmp_int16, 16, ^~, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_eqv
+ATOMIC_CMPX_EQV( fixed4, eqv, kmp_int32, 32, ^~, 4i, 3, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_eqv
+ATOMIC_CMPX_EQV( fixed8, eqv, kmp_int64, 64, ^~, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_eqv
+
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL(OP##=,LCK_ID) /* send assignment */ \
+}
+
+/* ------------------------------------------------------------------------- */
+// routines for long double type
+ATOMIC_CRITICAL( float10, add, long double, +, 10r, 1 ) // __kmpc_atomic_float10_add
+ATOMIC_CRITICAL( float10, sub, long double, -, 10r, 1 ) // __kmpc_atomic_float10_sub
+ATOMIC_CRITICAL( float10, mul, long double, *, 10r, 1 ) // __kmpc_atomic_float10_mul
+ATOMIC_CRITICAL( float10, div, long double, /, 10r, 1 ) // __kmpc_atomic_float10_div
+#if KMP_HAVE_QUAD
+// routines for _Quad type
+ATOMIC_CRITICAL( float16, add, QUAD_LEGACY, +, 16r, 1 ) // __kmpc_atomic_float16_add
+ATOMIC_CRITICAL( float16, sub, QUAD_LEGACY, -, 16r, 1 ) // __kmpc_atomic_float16_sub
+ATOMIC_CRITICAL( float16, mul, QUAD_LEGACY, *, 16r, 1 ) // __kmpc_atomic_float16_mul
+ATOMIC_CRITICAL( float16, div, QUAD_LEGACY, /, 16r, 1 ) // __kmpc_atomic_float16_div
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL( float16, add_a16, Quad_a16_t, +, 16r, 1 ) // __kmpc_atomic_float16_add_a16
+ ATOMIC_CRITICAL( float16, sub_a16, Quad_a16_t, -, 16r, 1 ) // __kmpc_atomic_float16_sub_a16
+ ATOMIC_CRITICAL( float16, mul_a16, Quad_a16_t, *, 16r, 1 ) // __kmpc_atomic_float16_mul_a16
+ ATOMIC_CRITICAL( float16, div_a16, Quad_a16_t, /, 16r, 1 ) // __kmpc_atomic_float16_div_a16
+#endif
+#endif
+// routines for complex types
+
+#if USE_CMPXCHG_FIX
+// workaround for C78287 (complex(kind=4) data type)
+ATOMIC_CMPXCHG_WORKAROUND( cmplx4, add, kmp_cmplx32, 64, +, 8c, 7, 1 ) // __kmpc_atomic_cmplx4_add
+ATOMIC_CMPXCHG_WORKAROUND( cmplx4, sub, kmp_cmplx32, 64, -, 8c, 7, 1 ) // __kmpc_atomic_cmplx4_sub
+ATOMIC_CMPXCHG_WORKAROUND( cmplx4, mul, kmp_cmplx32, 64, *, 8c, 7, 1 ) // __kmpc_atomic_cmplx4_mul
+ATOMIC_CMPXCHG_WORKAROUND( cmplx4, div, kmp_cmplx32, 64, /, 8c, 7, 1 ) // __kmpc_atomic_cmplx4_div
+// end of the workaround for C78287
+#else
+ATOMIC_CRITICAL( cmplx4, add, kmp_cmplx32, +, 8c, 1 ) // __kmpc_atomic_cmplx4_add
+ATOMIC_CRITICAL( cmplx4, sub, kmp_cmplx32, -, 8c, 1 ) // __kmpc_atomic_cmplx4_sub
+ATOMIC_CRITICAL( cmplx4, mul, kmp_cmplx32, *, 8c, 1 ) // __kmpc_atomic_cmplx4_mul
+ATOMIC_CRITICAL( cmplx4, div, kmp_cmplx32, /, 8c, 1 ) // __kmpc_atomic_cmplx4_div
+#endif // USE_CMPXCHG_FIX
+
+ATOMIC_CRITICAL( cmplx8, add, kmp_cmplx64, +, 16c, 1 ) // __kmpc_atomic_cmplx8_add
+ATOMIC_CRITICAL( cmplx8, sub, kmp_cmplx64, -, 16c, 1 ) // __kmpc_atomic_cmplx8_sub
+ATOMIC_CRITICAL( cmplx8, mul, kmp_cmplx64, *, 16c, 1 ) // __kmpc_atomic_cmplx8_mul
+ATOMIC_CRITICAL( cmplx8, div, kmp_cmplx64, /, 16c, 1 ) // __kmpc_atomic_cmplx8_div
+ATOMIC_CRITICAL( cmplx10, add, kmp_cmplx80, +, 20c, 1 ) // __kmpc_atomic_cmplx10_add
+ATOMIC_CRITICAL( cmplx10, sub, kmp_cmplx80, -, 20c, 1 ) // __kmpc_atomic_cmplx10_sub
+ATOMIC_CRITICAL( cmplx10, mul, kmp_cmplx80, *, 20c, 1 ) // __kmpc_atomic_cmplx10_mul
+ATOMIC_CRITICAL( cmplx10, div, kmp_cmplx80, /, 20c, 1 ) // __kmpc_atomic_cmplx10_div
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL( cmplx16, add, CPLX128_LEG, +, 32c, 1 ) // __kmpc_atomic_cmplx16_add
+ATOMIC_CRITICAL( cmplx16, sub, CPLX128_LEG, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub
+ATOMIC_CRITICAL( cmplx16, mul, CPLX128_LEG, *, 32c, 1 ) // __kmpc_atomic_cmplx16_mul
+ATOMIC_CRITICAL( cmplx16, div, CPLX128_LEG, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL( cmplx16, add_a16, kmp_cmplx128_a16_t, +, 32c, 1 ) // __kmpc_atomic_cmplx16_add_a16
+ ATOMIC_CRITICAL( cmplx16, sub_a16, kmp_cmplx128_a16_t, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_a16
+ ATOMIC_CRITICAL( cmplx16, mul_a16, kmp_cmplx128_a16_t, *, 32c, 1 ) // __kmpc_atomic_cmplx16_mul_a16
+ ATOMIC_CRITICAL( cmplx16, div_a16, kmp_cmplx128_a16_t, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_a16
+#endif
+#endif
+
+#if OMP_40_ENABLED
+
+// OpenMP 4.0: x = expr binop x for non-commutative operations.
+// Supported only on IA-32 architecture and Intel(R) 64
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL_REV(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ (*lhs) = (rhs) OP (*lhs); \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_REV(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_REV( OP, 0 ); \
+ return; \
+ }
+#else
+#define OP_GOMP_CRITICAL_REV(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+
+// Beginning of a definition (provides name, parameters, gebug trace)
+// TYPE_ID - operands type and size (fixed*, fixed*u for signed, unsigned fixed)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operands' type
+#define ATOMIC_BEGIN_REV(TYPE_ID,OP_ID,TYPE, RET_TYPE) \
+RET_TYPE __kmpc_atomic_##TYPE_ID##_##OP_ID##_rev( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID "_rev: T#%d\n", gtid ));
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+// Note: temp_val introduced in order to force the compiler to read
+// *lhs only once (w/o it the compiler reads *lhs twice)
+#define OP_CMPXCHG_REV(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value, new_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs OP old_value; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_DO_PAUSE; \
+ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs OP old_value; \
+ } \
+ }
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_REV(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_REV(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL_REV(OP,GOMP_FLAG) \
+ OP_CMPXCHG_REV(TYPE,BITS,OP) \
+}
+
+// ------------------------------------------------------------------------
+// Entries definition for integer operands
+// TYPE_ID - operands type and size (fixed4, float4)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operand type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator (used in critical section)
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+
+// TYPE_ID,OP_ID, TYPE, BITS,OP,LCK_ID,GOMP_FLAG
+// ------------------------------------------------------------------------
+// Routines for ATOMIC integer operands, other operators
+// ------------------------------------------------------------------------
+// TYPE_ID,OP_ID, TYPE, BITS, OP, LCK_ID, GOMP_FLAG
+ATOMIC_CMPXCHG_REV( fixed1, div, kmp_int8, 8, /, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div_rev
+ATOMIC_CMPXCHG_REV( fixed1u, div, kmp_uint8, 8, /, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_div_rev
+ATOMIC_CMPXCHG_REV( fixed1, shl, kmp_int8, 8, <<, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shl_rev
+ATOMIC_CMPXCHG_REV( fixed1, shr, kmp_int8, 8, >>, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shr_rev
+ATOMIC_CMPXCHG_REV( fixed1u, shr, kmp_uint8, 8, >>, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_shr_rev
+ATOMIC_CMPXCHG_REV( fixed1, sub, kmp_int8, 8, -, 1i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_sub_rev
+
+ATOMIC_CMPXCHG_REV( fixed2, div, kmp_int16, 16, /, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div_rev
+ATOMIC_CMPXCHG_REV( fixed2u, div, kmp_uint16, 16, /, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_div_rev
+ATOMIC_CMPXCHG_REV( fixed2, shl, kmp_int16, 16, <<, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shl_rev
+ATOMIC_CMPXCHG_REV( fixed2, shr, kmp_int16, 16, >>, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shr_rev
+ATOMIC_CMPXCHG_REV( fixed2u, shr, kmp_uint16, 16, >>, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_shr_rev
+ATOMIC_CMPXCHG_REV( fixed2, sub, kmp_int16, 16, -, 2i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_sub_rev
+
+ATOMIC_CMPXCHG_REV( fixed4, div, kmp_int32, 32, /, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_div_rev
+ATOMIC_CMPXCHG_REV( fixed4u, div, kmp_uint32, 32, /, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_div_rev
+ATOMIC_CMPXCHG_REV( fixed4, shl, kmp_int32, 32, <<, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shl_rev
+ATOMIC_CMPXCHG_REV( fixed4, shr, kmp_int32, 32, >>, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shr_rev
+ATOMIC_CMPXCHG_REV( fixed4u, shr, kmp_uint32, 32, >>, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_shr_rev
+ATOMIC_CMPXCHG_REV( fixed4, sub, kmp_int32, 32, -, 4i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_sub_rev
+
+ATOMIC_CMPXCHG_REV( fixed8, div, kmp_int64, 64, /, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div_rev
+ATOMIC_CMPXCHG_REV( fixed8u, div, kmp_uint64, 64, /, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_div_rev
+ATOMIC_CMPXCHG_REV( fixed8, shl, kmp_int64, 64, <<, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shl_rev
+ATOMIC_CMPXCHG_REV( fixed8, shr, kmp_int64, 64, >>, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shr_rev
+ATOMIC_CMPXCHG_REV( fixed8u, shr, kmp_uint64, 64, >>, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_shr_rev
+ATOMIC_CMPXCHG_REV( fixed8, sub, kmp_int64, 64, -, 8i, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_sub_rev
+
+ATOMIC_CMPXCHG_REV( float4, div, kmp_real32, 32, /, 4r, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div_rev
+ATOMIC_CMPXCHG_REV( float4, sub, kmp_real32, 32, -, 4r, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub_rev
+
+ATOMIC_CMPXCHG_REV( float8, div, kmp_real64, 64, /, 8r, KMP_ARCH_X86 ) // __kmpc_atomic_float8_div_rev
+ATOMIC_CMPXCHG_REV( float8, sub, kmp_real64, 64, -, 8r, KMP_ARCH_X86 ) // __kmpc_atomic_float8_sub_rev
+// TYPE_ID,OP_ID, TYPE, BITS,OP,LCK_ID, GOMP_FLAG
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL_REV(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_REV(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL_REV(OP,GOMP_FLAG) \
+ OP_CRITICAL_REV(OP,LCK_ID) \
+}
+
+/* ------------------------------------------------------------------------- */
+// routines for long double type
+ATOMIC_CRITICAL_REV( float10, sub, long double, -, 10r, 1 ) // __kmpc_atomic_float10_sub_rev
+ATOMIC_CRITICAL_REV( float10, div, long double, /, 10r, 1 ) // __kmpc_atomic_float10_div_rev
+#if KMP_HAVE_QUAD
+// routines for _Quad type
+ATOMIC_CRITICAL_REV( float16, sub, QUAD_LEGACY, -, 16r, 1 ) // __kmpc_atomic_float16_sub_rev
+ATOMIC_CRITICAL_REV( float16, div, QUAD_LEGACY, /, 16r, 1 ) // __kmpc_atomic_float16_div_rev
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_REV( float16, sub_a16, Quad_a16_t, -, 16r, 1 ) // __kmpc_atomic_float16_sub_a16_rev
+ ATOMIC_CRITICAL_REV( float16, div_a16, Quad_a16_t, /, 16r, 1 ) // __kmpc_atomic_float16_div_a16_rev
+#endif
+#endif
+
+// routines for complex types
+ATOMIC_CRITICAL_REV( cmplx4, sub, kmp_cmplx32, -, 8c, 1 ) // __kmpc_atomic_cmplx4_sub_rev
+ATOMIC_CRITICAL_REV( cmplx4, div, kmp_cmplx32, /, 8c, 1 ) // __kmpc_atomic_cmplx4_div_rev
+ATOMIC_CRITICAL_REV( cmplx8, sub, kmp_cmplx64, -, 16c, 1 ) // __kmpc_atomic_cmplx8_sub_rev
+ATOMIC_CRITICAL_REV( cmplx8, div, kmp_cmplx64, /, 16c, 1 ) // __kmpc_atomic_cmplx8_div_rev
+ATOMIC_CRITICAL_REV( cmplx10, sub, kmp_cmplx80, -, 20c, 1 ) // __kmpc_atomic_cmplx10_sub_rev
+ATOMIC_CRITICAL_REV( cmplx10, div, kmp_cmplx80, /, 20c, 1 ) // __kmpc_atomic_cmplx10_div_rev
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_REV( cmplx16, sub, CPLX128_LEG, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_rev
+ATOMIC_CRITICAL_REV( cmplx16, div, CPLX128_LEG, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_rev
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_REV( cmplx16, sub_a16, kmp_cmplx128_a16_t, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_a16_rev
+ ATOMIC_CRITICAL_REV( cmplx16, div_a16, kmp_cmplx128_a16_t, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_a16_rev
+#endif
+#endif
+
+
+#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
+// End of OpenMP 4.0: x = expr binop x for non-commutative operations.
+
+#endif //OMP_40_ENABLED
+
+
+/* ------------------------------------------------------------------------ */
+/* Routines for mixed types of LHS and RHS, when RHS is "larger" */
+/* Note: in order to reduce the total number of types combinations */
+/* it is supposed that compiler converts RHS to longest floating type,*/
+/* that is _Quad, before call to any of these routines */
+/* Conversion to _Quad will be done by the compiler during calculation, */
+/* conversion back to TYPE - before the assignment, like: */
+/* *lhs = (TYPE)( (_Quad)(*lhs) OP rhs ) */
+/* Performance penalty expected because of SW emulation use */
+/* ------------------------------------------------------------------------ */
+
+#define ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+void __kmpc_atomic_##TYPE_ID##_##OP_ID##_##RTYPE_ID( ident_t *id_ref, int gtid, TYPE * lhs, RTYPE rhs ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID "_" #RTYPE_ID ": T#%d\n", gtid ));
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CRITICAL_FP(TYPE_ID,TYPE,OP_ID,OP,RTYPE_ID,RTYPE,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL(OP##=,LCK_ID) /* send assignment */ \
+}
+
+// -------------------------------------------------------------------------
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+// -------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ====================================
+#define ATOMIC_CMPXCHG_MIX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG(TYPE,BITS,OP) \
+}
+// -------------------------------------------------------------------------
+#else
+// ------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define ATOMIC_CMPXCHG_MIX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(OP##=,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+// RHS=float8
+ATOMIC_CMPXCHG_MIX( fixed1, char, mul, 8, *, float8, kmp_real64, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul_float8
+ATOMIC_CMPXCHG_MIX( fixed1, char, div, 8, /, float8, kmp_real64, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div_float8
+ATOMIC_CMPXCHG_MIX( fixed2, short, mul, 16, *, float8, kmp_real64, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_mul_float8
+ATOMIC_CMPXCHG_MIX( fixed2, short, div, 16, /, float8, kmp_real64, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div_float8
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, mul, 32, *, float8, kmp_real64, 4i, 3, 0 ) // __kmpc_atomic_fixed4_mul_float8
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, div, 32, /, float8, kmp_real64, 4i, 3, 0 ) // __kmpc_atomic_fixed4_div_float8
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, mul, 64, *, float8, kmp_real64, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_mul_float8
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, div, 64, /, float8, kmp_real64, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div_float8
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, add, 32, +, float8, kmp_real64, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_add_float8
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, sub, 32, -, float8, kmp_real64, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub_float8
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, mul, 32, *, float8, kmp_real64, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_mul_float8
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, div, 32, /, float8, kmp_real64, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div_float8
+
+// RHS=float16 (deprecated, to be removed when we are sure the compiler does not use them)
+#if KMP_HAVE_QUAD
+ATOMIC_CMPXCHG_MIX( fixed1, char, add, 8, +, fp, _Quad, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_add_fp
+ATOMIC_CMPXCHG_MIX( fixed1, char, sub, 8, -, fp, _Quad, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_sub_fp
+ATOMIC_CMPXCHG_MIX( fixed1, char, mul, 8, *, fp, _Quad, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul_fp
+ATOMIC_CMPXCHG_MIX( fixed1, char, div, 8, /, fp, _Quad, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div_fp
+ATOMIC_CMPXCHG_MIX( fixed1u, uchar, div, 8, /, fp, _Quad, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_div_fp
+
+ATOMIC_CMPXCHG_MIX( fixed2, short, add, 16, +, fp, _Quad, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_add_fp
+ATOMIC_CMPXCHG_MIX( fixed2, short, sub, 16, -, fp, _Quad, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_sub_fp
+ATOMIC_CMPXCHG_MIX( fixed2, short, mul, 16, *, fp, _Quad, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_mul_fp
+ATOMIC_CMPXCHG_MIX( fixed2, short, div, 16, /, fp, _Quad, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div_fp
+ATOMIC_CMPXCHG_MIX( fixed2u, ushort, div, 16, /, fp, _Quad, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_div_fp
+
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, add, 32, +, fp, _Quad, 4i, 3, 0 ) // __kmpc_atomic_fixed4_add_fp
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, sub, 32, -, fp, _Quad, 4i, 3, 0 ) // __kmpc_atomic_fixed4_sub_fp
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, mul, 32, *, fp, _Quad, 4i, 3, 0 ) // __kmpc_atomic_fixed4_mul_fp
+ATOMIC_CMPXCHG_MIX( fixed4, kmp_int32, div, 32, /, fp, _Quad, 4i, 3, 0 ) // __kmpc_atomic_fixed4_div_fp
+ATOMIC_CMPXCHG_MIX( fixed4u, kmp_uint32, div, 32, /, fp, _Quad, 4i, 3, 0 ) // __kmpc_atomic_fixed4u_div_fp
+
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, add, 64, +, fp, _Quad, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_add_fp
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, sub, 64, -, fp, _Quad, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_sub_fp
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, mul, 64, *, fp, _Quad, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_mul_fp
+ATOMIC_CMPXCHG_MIX( fixed8, kmp_int64, div, 64, /, fp, _Quad, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div_fp
+ATOMIC_CMPXCHG_MIX( fixed8u, kmp_uint64, div, 64, /, fp, _Quad, 8i, 7, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_div_fp
+
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, add, 32, +, fp, _Quad, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_add_fp
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, sub, 32, -, fp, _Quad, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub_fp
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, mul, 32, *, fp, _Quad, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_mul_fp
+ATOMIC_CMPXCHG_MIX( float4, kmp_real32, div, 32, /, fp, _Quad, 4r, 3, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div_fp
+
+ATOMIC_CMPXCHG_MIX( float8, kmp_real64, add, 64, +, fp, _Quad, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_add_fp
+ATOMIC_CMPXCHG_MIX( float8, kmp_real64, sub, 64, -, fp, _Quad, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_sub_fp
+ATOMIC_CMPXCHG_MIX( float8, kmp_real64, mul, 64, *, fp, _Quad, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_mul_fp
+ATOMIC_CMPXCHG_MIX( float8, kmp_real64, div, 64, /, fp, _Quad, 8r, 7, KMP_ARCH_X86 ) // __kmpc_atomic_float8_div_fp
+
+ATOMIC_CRITICAL_FP( float10, long double, add, +, fp, _Quad, 10r, 1 ) // __kmpc_atomic_float10_add_fp
+ATOMIC_CRITICAL_FP( float10, long double, sub, -, fp, _Quad, 10r, 1 ) // __kmpc_atomic_float10_sub_fp
+ATOMIC_CRITICAL_FP( float10, long double, mul, *, fp, _Quad, 10r, 1 ) // __kmpc_atomic_float10_mul_fp
+ATOMIC_CRITICAL_FP( float10, long double, div, /, fp, _Quad, 10r, 1 ) // __kmpc_atomic_float10_div_fp
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+// ------------------------------------------------------------------------
+// X86 or X86_64: no alignment problems ====================================
+#if USE_CMPXCHG_FIX
+// workaround for C78287 (complex(kind=4) data type)
+#define ATOMIC_CMPXCHG_CMPLX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG_WORKAROUND(TYPE,BITS,OP) \
+}
+// end of the second part of the workaround for C78287
+#else
+#define ATOMIC_CMPXCHG_CMPLX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG(TYPE,BITS,OP) \
+}
+#endif // USE_CMPXCHG_FIX
+#else
+// ------------------------------------------------------------------------
+// Code for other architectures that don't handle unaligned accesses.
+#define ATOMIC_CMPXCHG_CMPLX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
+ATOMIC_BEGIN_MIX(TYPE_ID,TYPE,OP_ID,RTYPE_ID,RTYPE) \
+ OP_GOMP_CRITICAL(OP##=,GOMP_FLAG) \
+ if ( ! ( (kmp_uintptr_t) lhs & 0x##MASK) ) { \
+ OP_CMPXCHG(TYPE,BITS,OP) /* aligned address */ \
+ } else { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL(OP##=,LCK_ID) /* unaligned address - use critical */ \
+ } \
+}
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, add, 64, +, cmplx8, kmp_cmplx64, 8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_add_cmplx8
+ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, sub, 64, -, cmplx8, kmp_cmplx64, 8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_sub_cmplx8
+ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, mul, 64, *, cmplx8, kmp_cmplx64, 8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_mul_cmplx8
+ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, div, 64, /, cmplx8, kmp_cmplx64, 8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_div_cmplx8
+
+// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// ------------------------------------------------------------------------
+// Atomic READ routines
+// ------------------------------------------------------------------------
+
+// ------------------------------------------------------------------------
+// Beginning of a definition (provides name, parameters, gebug trace)
+// TYPE_ID - operands type and size (fixed*, fixed*u for signed, unsigned fixed)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operands' type
+#define ATOMIC_BEGIN_READ(TYPE_ID,OP_ID,TYPE, RET_TYPE) \
+RET_TYPE __kmpc_atomic_##TYPE_ID##_##OP_ID( ident_t *id_ref, int gtid, TYPE * loc ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID ": T#%d\n", gtid ));
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store_ret" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+// Note: temp_val introduced in order to force the compiler to read
+// *lhs only once (w/o it the compiler reads *lhs twice)
+// TODO: check if it is still necessary
+// Return old value regardless of the result of "compare & swap# operation
+
+#define OP_CMPXCHG_READ(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ union f_i_union { \
+ TYPE f_val; \
+ kmp_int##BITS i_val; \
+ }; \
+ union f_i_union old_value; \
+ temp_val = *loc; \
+ old_value.f_val = temp_val; \
+ old_value.i_val = KMP_COMPARE_AND_STORE_RET##BITS( (kmp_int##BITS *) loc, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value.i_val, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value.i_val ); \
+ new_value = old_value.f_val; \
+ return new_value; \
+ }
+
+// -------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL_READ(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ new_value = (*loc); \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+
+// -------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_READ(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_READ( OP, 0 ); \
+ return new_value; \
+ }
+#else
+#define OP_GOMP_CRITICAL_READ(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// -------------------------------------------------------------------------
+#define ATOMIC_FIXED_READ(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_READ(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_READ(OP##=,GOMP_FLAG) \
+ new_value = KMP_TEST_THEN_ADD##BITS( loc, OP 0 ); \
+ return new_value; \
+}
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_READ(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_READ(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_READ(OP##=,GOMP_FLAG) \
+ OP_CMPXCHG_READ(TYPE,BITS,OP) \
+}
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL_READ(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_READ(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_READ(OP##=,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL_READ(OP,LCK_ID) /* send assignment */ \
+ return new_value; \
+}
+
+// ------------------------------------------------------------------------
+// Fix for cmplx4 read (CQ220361) on Windows* OS. Regular routine with return value doesn't work.
+// Let's return the read value through the additional parameter.
+
+#if ( KMP_OS_WINDOWS )
+
+#define OP_CRITICAL_READ_WRK(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ (*out) = (*loc); \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_READ_WRK(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_READ_WRK( OP, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_READ_WRK(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+// ------------------------------------------------------------------------
+#define ATOMIC_BEGIN_READ_WRK(TYPE_ID,OP_ID,TYPE) \
+void __kmpc_atomic_##TYPE_ID##_##OP_ID( TYPE * out, ident_t *id_ref, int gtid, TYPE * loc ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID ": T#%d\n", gtid ));
+
+// ------------------------------------------------------------------------
+#define ATOMIC_CRITICAL_READ_WRK(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_READ_WRK(TYPE_ID,OP_ID,TYPE) \
+ OP_GOMP_CRITICAL_READ_WRK(OP##=,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL_READ_WRK(OP,LCK_ID) /* send assignment */ \
+}
+
+#endif // KMP_OS_WINDOWS
+
+// ------------------------------------------------------------------------
+// TYPE_ID,OP_ID, TYPE, OP, GOMP_FLAG
+ATOMIC_FIXED_READ( fixed4, rd, kmp_int32, 32, +, 0 ) // __kmpc_atomic_fixed4_rd
+ATOMIC_FIXED_READ( fixed8, rd, kmp_int64, 64, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_rd
+ATOMIC_CMPXCHG_READ( float4, rd, kmp_real32, 32, +, KMP_ARCH_X86 ) // __kmpc_atomic_float4_rd
+ATOMIC_CMPXCHG_READ( float8, rd, kmp_real64, 64, +, KMP_ARCH_X86 ) // __kmpc_atomic_float8_rd
+
+// !!! TODO: Remove lock operations for "char" since it can't be non-atomic
+ATOMIC_CMPXCHG_READ( fixed1, rd, kmp_int8, 8, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_rd
+ATOMIC_CMPXCHG_READ( fixed2, rd, kmp_int16, 16, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_rd
+
+ATOMIC_CRITICAL_READ( float10, rd, long double, +, 10r, 1 ) // __kmpc_atomic_float10_rd
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_READ( float16, rd, QUAD_LEGACY, +, 16r, 1 ) // __kmpc_atomic_float16_rd
+#endif // KMP_HAVE_QUAD
+
+// Fix for CQ220361 on Windows* OS
+#if ( KMP_OS_WINDOWS )
+ ATOMIC_CRITICAL_READ_WRK( cmplx4, rd, kmp_cmplx32, +, 8c, 1 ) // __kmpc_atomic_cmplx4_rd
+#else
+ ATOMIC_CRITICAL_READ( cmplx4, rd, kmp_cmplx32, +, 8c, 1 ) // __kmpc_atomic_cmplx4_rd
+#endif
+ATOMIC_CRITICAL_READ( cmplx8, rd, kmp_cmplx64, +, 16c, 1 ) // __kmpc_atomic_cmplx8_rd
+ATOMIC_CRITICAL_READ( cmplx10, rd, kmp_cmplx80, +, 20c, 1 ) // __kmpc_atomic_cmplx10_rd
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_READ( cmplx16, rd, CPLX128_LEG, +, 32c, 1 ) // __kmpc_atomic_cmplx16_rd
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_READ( float16, a16_rd, Quad_a16_t, +, 16r, 1 ) // __kmpc_atomic_float16_a16_rd
+ ATOMIC_CRITICAL_READ( cmplx16, a16_rd, kmp_cmplx128_a16_t, +, 32c, 1 ) // __kmpc_atomic_cmplx16_a16_rd
+#endif
+#endif
+
+
+// ------------------------------------------------------------------------
+// Atomic WRITE routines
+// ------------------------------------------------------------------------
+
+#define ATOMIC_XCHG_WR(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP,GOMP_FLAG) \
+ KMP_XCHG_FIXED##BITS( lhs, rhs ); \
+}
+// ------------------------------------------------------------------------
+#define ATOMIC_XCHG_FLOAT_WR(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP,GOMP_FLAG) \
+ KMP_XCHG_REAL##BITS( lhs, rhs ); \
+}
+
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+// Note: temp_val introduced in order to force the compiler to read
+// *lhs only once (w/o it the compiler reads *lhs twice)
+#define OP_CMPXCHG_WR(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value, new_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs; \
+ } \
+ }
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_WR(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP,GOMP_FLAG) \
+ OP_CMPXCHG_WR(TYPE,BITS,OP) \
+}
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL_WR(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN(TYPE_ID,OP_ID,TYPE,void) \
+ OP_GOMP_CRITICAL(OP,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL(OP,LCK_ID) /* send assignment */ \
+}
+// -------------------------------------------------------------------------
+
+ATOMIC_XCHG_WR( fixed1, wr, kmp_int8, 8, =, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_wr
+ATOMIC_XCHG_WR( fixed2, wr, kmp_int16, 16, =, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_wr
+ATOMIC_XCHG_WR( fixed4, wr, kmp_int32, 32, =, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_wr
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CMPXCHG_WR( fixed8, wr, kmp_int64, 64, =, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_wr
+#else
+ ATOMIC_XCHG_WR( fixed8, wr, kmp_int64, 64, =, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_wr
+#endif
+
+ATOMIC_XCHG_FLOAT_WR( float4, wr, kmp_real32, 32, =, KMP_ARCH_X86 ) // __kmpc_atomic_float4_wr
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CMPXCHG_WR( float8, wr, kmp_real64, 64, =, KMP_ARCH_X86 ) // __kmpc_atomic_float8_wr
+#else
+ ATOMIC_XCHG_FLOAT_WR( float8, wr, kmp_real64, 64, =, KMP_ARCH_X86 ) // __kmpc_atomic_float8_wr
+#endif
+
+ATOMIC_CRITICAL_WR( float10, wr, long double, =, 10r, 1 ) // __kmpc_atomic_float10_wr
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_WR( float16, wr, QUAD_LEGACY, =, 16r, 1 ) // __kmpc_atomic_float16_wr
+#endif
+ATOMIC_CRITICAL_WR( cmplx4, wr, kmp_cmplx32, =, 8c, 1 ) // __kmpc_atomic_cmplx4_wr
+ATOMIC_CRITICAL_WR( cmplx8, wr, kmp_cmplx64, =, 16c, 1 ) // __kmpc_atomic_cmplx8_wr
+ATOMIC_CRITICAL_WR( cmplx10, wr, kmp_cmplx80, =, 20c, 1 ) // __kmpc_atomic_cmplx10_wr
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_WR( cmplx16, wr, CPLX128_LEG, =, 32c, 1 ) // __kmpc_atomic_cmplx16_wr
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_WR( float16, a16_wr, Quad_a16_t, =, 16r, 1 ) // __kmpc_atomic_float16_a16_wr
+ ATOMIC_CRITICAL_WR( cmplx16, a16_wr, kmp_cmplx128_a16_t, =, 32c, 1 ) // __kmpc_atomic_cmplx16_a16_wr
+#endif
+#endif
+
+
+// ------------------------------------------------------------------------
+// Atomic CAPTURE routines
+// ------------------------------------------------------------------------
+
+// Beginning of a definition (provides name, parameters, gebug trace)
+// TYPE_ID - operands type and size (fixed*, fixed*u for signed, unsigned fixed)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operands' type
+#define ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,RET_TYPE) \
+RET_TYPE __kmpc_atomic_##TYPE_ID##_##OP_ID( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs, int flag ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID ": T#%d\n", gtid ));
+
+// -------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL_CPT(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if( flag ) { \
+ (*lhs) OP rhs; \
+ new_value = (*lhs); \
+ } else { \
+ new_value = (*lhs); \
+ (*lhs) OP rhs; \
+ } \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return new_value;
+
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_CPT(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_CPT( OP##=, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_CPT(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+// Note: temp_val introduced in order to force the compiler to read
+// *lhs only once (w/o it the compiler reads *lhs twice)
+#define OP_CMPXCHG_CPT(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value, new_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = old_value OP rhs; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = old_value OP rhs; \
+ } \
+ if( flag ) { \
+ return new_value; \
+ } else \
+ return old_value; \
+ }
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_CPT(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_CPT(OP,GOMP_FLAG) \
+ OP_CMPXCHG_CPT(TYPE,BITS,OP) \
+}
+
+// -------------------------------------------------------------------------
+#define ATOMIC_FIXED_ADD_CPT(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE old_value, new_value; \
+ OP_GOMP_CRITICAL_CPT(OP,GOMP_FLAG) \
+ /* OP used as a sign for subtraction: (lhs-rhs) --> (lhs+-rhs) */ \
+ old_value = KMP_TEST_THEN_ADD##BITS( lhs, OP rhs ); \
+ if( flag ) { \
+ return old_value OP rhs; \
+ } else \
+ return old_value; \
+}
+// -------------------------------------------------------------------------
+
+ATOMIC_FIXED_ADD_CPT( fixed4, add_cpt, kmp_int32, 32, +, 0 ) // __kmpc_atomic_fixed4_add_cpt
+ATOMIC_FIXED_ADD_CPT( fixed4, sub_cpt, kmp_int32, 32, -, 0 ) // __kmpc_atomic_fixed4_sub_cpt
+ATOMIC_FIXED_ADD_CPT( fixed8, add_cpt, kmp_int64, 64, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_add_cpt
+ATOMIC_FIXED_ADD_CPT( fixed8, sub_cpt, kmp_int64, 64, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_sub_cpt
+
+ATOMIC_CMPXCHG_CPT( float4, add_cpt, kmp_real32, 32, +, KMP_ARCH_X86 ) // __kmpc_atomic_float4_add_cpt
+ATOMIC_CMPXCHG_CPT( float4, sub_cpt, kmp_real32, 32, -, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub_cpt
+ATOMIC_CMPXCHG_CPT( float8, add_cpt, kmp_real64, 64, +, KMP_ARCH_X86 ) // __kmpc_atomic_float8_add_cpt
+ATOMIC_CMPXCHG_CPT( float8, sub_cpt, kmp_real64, 64, -, KMP_ARCH_X86 ) // __kmpc_atomic_float8_sub_cpt
+
+// ------------------------------------------------------------------------
+// Entries definition for integer operands
+// TYPE_ID - operands type and size (fixed4, float4)
+// OP_ID - operation identifier (add, sub, mul, ...)
+// TYPE - operand type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator (used in critical section)
+// TYPE_ID,OP_ID, TYPE, BITS,OP,GOMP_FLAG
+// ------------------------------------------------------------------------
+// Routines for ATOMIC integer operands, other operators
+// ------------------------------------------------------------------------
+// TYPE_ID,OP_ID, TYPE, OP, GOMP_FLAG
+ATOMIC_CMPXCHG_CPT( fixed1, add_cpt, kmp_int8, 8, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_add_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, andb_cpt, kmp_int8, 8, &, 0 ) // __kmpc_atomic_fixed1_andb_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, div_cpt, kmp_int8, 8, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed1u, div_cpt, kmp_uint8, 8, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, mul_cpt, kmp_int8, 8, *, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, orb_cpt, kmp_int8, 8, |, 0 ) // __kmpc_atomic_fixed1_orb_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, shl_cpt, kmp_int8, 8, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shl_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, shr_cpt, kmp_int8, 8, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed1u, shr_cpt, kmp_uint8, 8, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, sub_cpt, kmp_int8, 8, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_sub_cpt
+ATOMIC_CMPXCHG_CPT( fixed1, xor_cpt, kmp_int8, 8, ^, 0 ) // __kmpc_atomic_fixed1_xor_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, add_cpt, kmp_int16, 16, +, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_add_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, andb_cpt, kmp_int16, 16, &, 0 ) // __kmpc_atomic_fixed2_andb_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, div_cpt, kmp_int16, 16, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed2u, div_cpt, kmp_uint16, 16, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, mul_cpt, kmp_int16, 16, *, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_mul_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, orb_cpt, kmp_int16, 16, |, 0 ) // __kmpc_atomic_fixed2_orb_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, shl_cpt, kmp_int16, 16, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shl_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, shr_cpt, kmp_int16, 16, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed2u, shr_cpt, kmp_uint16, 16, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, sub_cpt, kmp_int16, 16, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_sub_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, xor_cpt, kmp_int16, 16, ^, 0 ) // __kmpc_atomic_fixed2_xor_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, andb_cpt, kmp_int32, 32, &, 0 ) // __kmpc_atomic_fixed4_andb_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, div_cpt, kmp_int32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed4u, div_cpt, kmp_uint32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, mul_cpt, kmp_int32, 32, *, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_mul_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, orb_cpt, kmp_int32, 32, |, 0 ) // __kmpc_atomic_fixed4_orb_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, shl_cpt, kmp_int32, 32, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shl_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, shr_cpt, kmp_int32, 32, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed4u, shr_cpt, kmp_uint32, 32, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, xor_cpt, kmp_int32, 32, ^, 0 ) // __kmpc_atomic_fixed4_xor_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, andb_cpt, kmp_int64, 64, &, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_andb_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, div_cpt, kmp_int64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed8u, div_cpt, kmp_uint64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_div_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, mul_cpt, kmp_int64, 64, *, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_mul_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, orb_cpt, kmp_int64, 64, |, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_orb_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, shl_cpt, kmp_int64, 64, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shl_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, shr_cpt, kmp_int64, 64, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed8u, shr_cpt, kmp_uint64, 64, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_shr_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, xor_cpt, kmp_int64, 64, ^, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_xor_cpt
+ATOMIC_CMPXCHG_CPT( float4, div_cpt, kmp_real32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div_cpt
+ATOMIC_CMPXCHG_CPT( float4, mul_cpt, kmp_real32, 32, *, KMP_ARCH_X86 ) // __kmpc_atomic_float4_mul_cpt
+ATOMIC_CMPXCHG_CPT( float8, div_cpt, kmp_real64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_float8_div_cpt
+ATOMIC_CMPXCHG_CPT( float8, mul_cpt, kmp_real64, 64, *, KMP_ARCH_X86 ) // __kmpc_atomic_float8_mul_cpt
+// TYPE_ID,OP_ID, TYPE, OP, GOMP_FLAG
+
+// ------------------------------------------------------------------------
+// Routines for C/C++ Reduction operators && and ||
+// ------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL_L_CPT(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if( flag ) { \
+ new_value OP rhs; \
+ } else \
+ new_value = (*lhs); \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid );
+
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_L_CPT(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_L_CPT( OP, 0 ); \
+ return new_value; \
+ }
+#else
+#define OP_GOMP_CRITICAL_L_CPT(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// ------------------------------------------------------------------------
+// Need separate macros for &&, || because there is no combined assignment
+#define ATOMIC_CMPX_L_CPT(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_L_CPT( = *lhs OP, GOMP_FLAG ) \
+ OP_CMPXCHG_CPT(TYPE,BITS,OP) \
+}
+
+ATOMIC_CMPX_L_CPT( fixed1, andl_cpt, char, 8, &&, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_andl_cpt
+ATOMIC_CMPX_L_CPT( fixed1, orl_cpt, char, 8, ||, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_orl_cpt
+ATOMIC_CMPX_L_CPT( fixed2, andl_cpt, short, 16, &&, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_andl_cpt
+ATOMIC_CMPX_L_CPT( fixed2, orl_cpt, short, 16, ||, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_orl_cpt
+ATOMIC_CMPX_L_CPT( fixed4, andl_cpt, kmp_int32, 32, &&, 0 ) // __kmpc_atomic_fixed4_andl_cpt
+ATOMIC_CMPX_L_CPT( fixed4, orl_cpt, kmp_int32, 32, ||, 0 ) // __kmpc_atomic_fixed4_orl_cpt
+ATOMIC_CMPX_L_CPT( fixed8, andl_cpt, kmp_int64, 64, &&, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_andl_cpt
+ATOMIC_CMPX_L_CPT( fixed8, orl_cpt, kmp_int64, 64, ||, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_orl_cpt
+
+
+// -------------------------------------------------------------------------
+// Routines for Fortran operators that matched no one in C:
+// MAX, MIN, .EQV., .NEQV.
+// Operators .AND., .OR. are covered by __kmpc_atomic_*_{andl,orl}_cpt
+// Intrinsics IAND, IOR, IEOR are covered by __kmpc_atomic_*_{andb,orb,xor}_cpt
+// -------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------
+// MIN and MAX need separate macros
+// OP - operator to check if we need any actions?
+#define MIN_MAX_CRITSECT_CPT(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if ( *lhs OP rhs ) { /* still need actions? */ \
+ old_value = *lhs; \
+ *lhs = rhs; \
+ if ( flag ) \
+ new_value = rhs; \
+ else \
+ new_value = old_value; \
+ } \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return new_value; \
+
+// -------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define GOMP_MIN_MAX_CRITSECT_CPT(OP,FLAG) \
+ if (( FLAG ) && ( __kmp_atomic_mode == 2 )) { \
+ KMP_CHECK_GTID; \
+ MIN_MAX_CRITSECT_CPT( OP, 0 ); \
+ }
+#else
+#define GOMP_MIN_MAX_CRITSECT_CPT(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// -------------------------------------------------------------------------
+#define MIN_MAX_CMPXCHG_CPT(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ /*TYPE old_value; */ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ while ( old_value OP rhs && /* still need actions? */ \
+ ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &rhs ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ } \
+ if( flag ) \
+ return rhs; \
+ else \
+ return old_value; \
+ }
+
+// -------------------------------------------------------------------------
+// 1-byte, 2-byte operands - use critical section
+#define MIN_MAX_CRITICAL_CPT(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value, old_value; \
+ if ( *lhs OP rhs ) { /* need actions? */ \
+ GOMP_MIN_MAX_CRITSECT_CPT(OP,GOMP_FLAG) \
+ MIN_MAX_CRITSECT_CPT(OP,LCK_ID) \
+ } \
+ return *lhs; \
+}
+
+#define MIN_MAX_COMPXCHG_CPT(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value, old_value; \
+ if ( *lhs OP rhs ) { \
+ GOMP_MIN_MAX_CRITSECT_CPT(OP,GOMP_FLAG) \
+ MIN_MAX_CMPXCHG_CPT(TYPE,BITS,OP) \
+ } \
+ return *lhs; \
+}
+
+
+MIN_MAX_COMPXCHG_CPT( fixed1, max_cpt, char, 8, <, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_max_cpt
+MIN_MAX_COMPXCHG_CPT( fixed1, min_cpt, char, 8, >, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_min_cpt
+MIN_MAX_COMPXCHG_CPT( fixed2, max_cpt, short, 16, <, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_max_cpt
+MIN_MAX_COMPXCHG_CPT( fixed2, min_cpt, short, 16, >, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_min_cpt
+MIN_MAX_COMPXCHG_CPT( fixed4, max_cpt, kmp_int32, 32, <, 0 ) // __kmpc_atomic_fixed4_max_cpt
+MIN_MAX_COMPXCHG_CPT( fixed4, min_cpt, kmp_int32, 32, >, 0 ) // __kmpc_atomic_fixed4_min_cpt
+MIN_MAX_COMPXCHG_CPT( fixed8, max_cpt, kmp_int64, 64, <, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_max_cpt
+MIN_MAX_COMPXCHG_CPT( fixed8, min_cpt, kmp_int64, 64, >, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_min_cpt
+MIN_MAX_COMPXCHG_CPT( float4, max_cpt, kmp_real32, 32, <, KMP_ARCH_X86 ) // __kmpc_atomic_float4_max_cpt
+MIN_MAX_COMPXCHG_CPT( float4, min_cpt, kmp_real32, 32, >, KMP_ARCH_X86 ) // __kmpc_atomic_float4_min_cpt
+MIN_MAX_COMPXCHG_CPT( float8, max_cpt, kmp_real64, 64, <, KMP_ARCH_X86 ) // __kmpc_atomic_float8_max_cpt
+MIN_MAX_COMPXCHG_CPT( float8, min_cpt, kmp_real64, 64, >, KMP_ARCH_X86 ) // __kmpc_atomic_float8_min_cpt
+#if KMP_HAVE_QUAD
+MIN_MAX_CRITICAL_CPT( float16, max_cpt, QUAD_LEGACY, <, 16r, 1 ) // __kmpc_atomic_float16_max_cpt
+MIN_MAX_CRITICAL_CPT( float16, min_cpt, QUAD_LEGACY, >, 16r, 1 ) // __kmpc_atomic_float16_min_cpt
+#if ( KMP_ARCH_X86 )
+ MIN_MAX_CRITICAL_CPT( float16, max_a16_cpt, Quad_a16_t, <, 16r, 1 ) // __kmpc_atomic_float16_max_a16_cpt
+ MIN_MAX_CRITICAL_CPT( float16, min_a16_cpt, Quad_a16_t, >, 16r, 1 ) // __kmpc_atomic_float16_mix_a16_cpt
+#endif
+#endif
+
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_EQV_CPT(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_CPT( OP, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_EQV_CPT(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+// ------------------------------------------------------------------------
+#define ATOMIC_CMPX_EQV_CPT(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_EQV_CPT(^=~,GOMP_FLAG) /* send assignment */ \
+ OP_CMPXCHG_CPT(TYPE,BITS,OP) \
+}
+
+// ------------------------------------------------------------------------
+
+ATOMIC_CMPXCHG_CPT( fixed1, neqv_cpt, kmp_int8, 8, ^, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_neqv_cpt
+ATOMIC_CMPXCHG_CPT( fixed2, neqv_cpt, kmp_int16, 16, ^, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_neqv_cpt
+ATOMIC_CMPXCHG_CPT( fixed4, neqv_cpt, kmp_int32, 32, ^, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_neqv_cpt
+ATOMIC_CMPXCHG_CPT( fixed8, neqv_cpt, kmp_int64, 64, ^, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_neqv_cpt
+ATOMIC_CMPX_EQV_CPT( fixed1, eqv_cpt, kmp_int8, 8, ^~, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_eqv_cpt
+ATOMIC_CMPX_EQV_CPT( fixed2, eqv_cpt, kmp_int16, 16, ^~, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_eqv_cpt
+ATOMIC_CMPX_EQV_CPT( fixed4, eqv_cpt, kmp_int32, 32, ^~, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_eqv_cpt
+ATOMIC_CMPX_EQV_CPT( fixed8, eqv_cpt, kmp_int64, 64, ^~, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_eqv_cpt
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL_CPT(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ OP_GOMP_CRITICAL_CPT(OP,GOMP_FLAG) /* send assignment */ \
+ OP_CRITICAL_CPT(OP##=,LCK_ID) /* send assignment */ \
+}
+
+// ------------------------------------------------------------------------
+
+// Workaround for cmplx4. Regular routines with return value don't work
+// on Win_32e. Let's return captured values through the additional parameter.
+#define OP_CRITICAL_CPT_WRK(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if( flag ) { \
+ (*lhs) OP rhs; \
+ (*out) = (*lhs); \
+ } else { \
+ (*out) = (*lhs); \
+ (*lhs) OP rhs; \
+ } \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return;
+// ------------------------------------------------------------------------
+
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_CPT_WRK(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_CPT_WRK( OP##=, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_CPT_WRK(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+// ------------------------------------------------------------------------
+
+#define ATOMIC_BEGIN_WRK(TYPE_ID,OP_ID,TYPE) \
+void __kmpc_atomic_##TYPE_ID##_##OP_ID( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs, TYPE * out, int flag ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_" #OP_ID ": T#%d\n", gtid ));
+// ------------------------------------------------------------------------
+
+#define ATOMIC_CRITICAL_CPT_WRK(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_WRK(TYPE_ID,OP_ID,TYPE) \
+ OP_GOMP_CRITICAL_CPT_WRK(OP,GOMP_FLAG) \
+ OP_CRITICAL_CPT_WRK(OP##=,LCK_ID) \
+}
+// The end of workaround for cmplx4
+
+/* ------------------------------------------------------------------------- */
+// routines for long double type
+ATOMIC_CRITICAL_CPT( float10, add_cpt, long double, +, 10r, 1 ) // __kmpc_atomic_float10_add_cpt
+ATOMIC_CRITICAL_CPT( float10, sub_cpt, long double, -, 10r, 1 ) // __kmpc_atomic_float10_sub_cpt
+ATOMIC_CRITICAL_CPT( float10, mul_cpt, long double, *, 10r, 1 ) // __kmpc_atomic_float10_mul_cpt
+ATOMIC_CRITICAL_CPT( float10, div_cpt, long double, /, 10r, 1 ) // __kmpc_atomic_float10_div_cpt
+#if KMP_HAVE_QUAD
+// routines for _Quad type
+ATOMIC_CRITICAL_CPT( float16, add_cpt, QUAD_LEGACY, +, 16r, 1 ) // __kmpc_atomic_float16_add_cpt
+ATOMIC_CRITICAL_CPT( float16, sub_cpt, QUAD_LEGACY, -, 16r, 1 ) // __kmpc_atomic_float16_sub_cpt
+ATOMIC_CRITICAL_CPT( float16, mul_cpt, QUAD_LEGACY, *, 16r, 1 ) // __kmpc_atomic_float16_mul_cpt
+ATOMIC_CRITICAL_CPT( float16, div_cpt, QUAD_LEGACY, /, 16r, 1 ) // __kmpc_atomic_float16_div_cpt
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_CPT( float16, add_a16_cpt, Quad_a16_t, +, 16r, 1 ) // __kmpc_atomic_float16_add_a16_cpt
+ ATOMIC_CRITICAL_CPT( float16, sub_a16_cpt, Quad_a16_t, -, 16r, 1 ) // __kmpc_atomic_float16_sub_a16_cpt
+ ATOMIC_CRITICAL_CPT( float16, mul_a16_cpt, Quad_a16_t, *, 16r, 1 ) // __kmpc_atomic_float16_mul_a16_cpt
+ ATOMIC_CRITICAL_CPT( float16, div_a16_cpt, Quad_a16_t, /, 16r, 1 ) // __kmpc_atomic_float16_div_a16_cpt
+#endif
+#endif
+
+// routines for complex types
+
+// cmplx4 routines to return void
+ATOMIC_CRITICAL_CPT_WRK( cmplx4, add_cpt, kmp_cmplx32, +, 8c, 1 ) // __kmpc_atomic_cmplx4_add_cpt
+ATOMIC_CRITICAL_CPT_WRK( cmplx4, sub_cpt, kmp_cmplx32, -, 8c, 1 ) // __kmpc_atomic_cmplx4_sub_cpt
+ATOMIC_CRITICAL_CPT_WRK( cmplx4, mul_cpt, kmp_cmplx32, *, 8c, 1 ) // __kmpc_atomic_cmplx4_mul_cpt
+ATOMIC_CRITICAL_CPT_WRK( cmplx4, div_cpt, kmp_cmplx32, /, 8c, 1 ) // __kmpc_atomic_cmplx4_div_cpt
+
+ATOMIC_CRITICAL_CPT( cmplx8, add_cpt, kmp_cmplx64, +, 16c, 1 ) // __kmpc_atomic_cmplx8_add_cpt
+ATOMIC_CRITICAL_CPT( cmplx8, sub_cpt, kmp_cmplx64, -, 16c, 1 ) // __kmpc_atomic_cmplx8_sub_cpt
+ATOMIC_CRITICAL_CPT( cmplx8, mul_cpt, kmp_cmplx64, *, 16c, 1 ) // __kmpc_atomic_cmplx8_mul_cpt
+ATOMIC_CRITICAL_CPT( cmplx8, div_cpt, kmp_cmplx64, /, 16c, 1 ) // __kmpc_atomic_cmplx8_div_cpt
+ATOMIC_CRITICAL_CPT( cmplx10, add_cpt, kmp_cmplx80, +, 20c, 1 ) // __kmpc_atomic_cmplx10_add_cpt
+ATOMIC_CRITICAL_CPT( cmplx10, sub_cpt, kmp_cmplx80, -, 20c, 1 ) // __kmpc_atomic_cmplx10_sub_cpt
+ATOMIC_CRITICAL_CPT( cmplx10, mul_cpt, kmp_cmplx80, *, 20c, 1 ) // __kmpc_atomic_cmplx10_mul_cpt
+ATOMIC_CRITICAL_CPT( cmplx10, div_cpt, kmp_cmplx80, /, 20c, 1 ) // __kmpc_atomic_cmplx10_div_cpt
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_CPT( cmplx16, add_cpt, CPLX128_LEG, +, 32c, 1 ) // __kmpc_atomic_cmplx16_add_cpt
+ATOMIC_CRITICAL_CPT( cmplx16, sub_cpt, CPLX128_LEG, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_cpt
+ATOMIC_CRITICAL_CPT( cmplx16, mul_cpt, CPLX128_LEG, *, 32c, 1 ) // __kmpc_atomic_cmplx16_mul_cpt
+ATOMIC_CRITICAL_CPT( cmplx16, div_cpt, CPLX128_LEG, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_cpt
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_CPT( cmplx16, add_a16_cpt, kmp_cmplx128_a16_t, +, 32c, 1 ) // __kmpc_atomic_cmplx16_add_a16_cpt
+ ATOMIC_CRITICAL_CPT( cmplx16, sub_a16_cpt, kmp_cmplx128_a16_t, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_a16_cpt
+ ATOMIC_CRITICAL_CPT( cmplx16, mul_a16_cpt, kmp_cmplx128_a16_t, *, 32c, 1 ) // __kmpc_atomic_cmplx16_mul_a16_cpt
+ ATOMIC_CRITICAL_CPT( cmplx16, div_a16_cpt, kmp_cmplx128_a16_t, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_a16_cpt
+#endif
+#endif
+
+#if OMP_40_ENABLED
+
+// OpenMP 4.0: v = x = expr binop x; { v = x; x = expr binop x; } { x = expr binop x; v = x; } for non-commutative operations.
+// Supported only on IA-32 architecture and Intel(R) 64
+
+// -------------------------------------------------------------------------
+// Operation on *lhs, rhs bound by critical section
+// OP - operator (it's supposed to contain an assignment)
+// LCK_ID - lock identifier
+// Note: don't check gtid as it should always be valid
+// 1, 2-byte - expect valid parameter, other - check before this macro
+#define OP_CRITICAL_CPT_REV(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if( flag ) { \
+ /*temp_val = (*lhs);*/\
+ (*lhs) = (rhs) OP (*lhs); \
+ new_value = (*lhs); \
+ } else { \
+ new_value = (*lhs);\
+ (*lhs) = (rhs) OP (*lhs); \
+ } \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return new_value;
+
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_CPT_REV(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_CPT_REV( OP, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_CPT_REV(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+// ------------------------------------------------------------------------
+// Operation on *lhs, rhs using "compare_and_store" routine
+// TYPE - operands' type
+// BITS - size in bits, used to distinguish low level calls
+// OP - operator
+// Note: temp_val introduced in order to force the compiler to read
+// *lhs only once (w/o it the compiler reads *lhs twice)
+#define OP_CMPXCHG_CPT_REV(TYPE,BITS,OP) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value, new_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs OP old_value; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs OP old_value; \
+ } \
+ if( flag ) { \
+ return new_value; \
+ } else \
+ return old_value; \
+ }
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_CPT_REV(TYPE_ID,OP_ID,TYPE,BITS,OP,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ OP_GOMP_CRITICAL_CPT_REV(OP,GOMP_FLAG) \
+ OP_CMPXCHG_CPT_REV(TYPE,BITS,OP) \
+}
+
+
+ATOMIC_CMPXCHG_CPT_REV( fixed1, div_cpt_rev, kmp_int8, 8, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed1u, div_cpt_rev, kmp_uint8, 8, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed1, shl_cpt_rev, kmp_int8, 8, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shl_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed1, shr_cpt_rev, kmp_int8, 8, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed1u, shr_cpt_rev, kmp_uint8, 8, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1u_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed1, sub_cpt_rev, kmp_int8, 8, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_sub_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2, div_cpt_rev, kmp_int16, 16, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2u, div_cpt_rev, kmp_uint16, 16, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2, shl_cpt_rev, kmp_int16, 16, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shl_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2, shr_cpt_rev, kmp_int16, 16, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2u, shr_cpt_rev, kmp_uint16, 16, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2u_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed2, sub_cpt_rev, kmp_int16, 16, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_sub_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4, div_cpt_rev, kmp_int32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4u, div_cpt_rev, kmp_uint32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4, shl_cpt_rev, kmp_int32, 32, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shl_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4, shr_cpt_rev, kmp_int32, 32, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4u, shr_cpt_rev, kmp_uint32, 32, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4u_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed4, sub_cpt_rev, kmp_int32, 32, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_sub_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8, div_cpt_rev, kmp_int64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8u, div_cpt_rev, kmp_uint64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8, shl_cpt_rev, kmp_int64, 64, <<, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shl_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8, shr_cpt_rev, kmp_int64, 64, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8u, shr_cpt_rev, kmp_uint64, 64, >>, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8u_shr_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( fixed8, sub_cpt_rev, kmp_int64, 64, -, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_sub_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( float4, div_cpt_rev, kmp_real32, 32, /, KMP_ARCH_X86 ) // __kmpc_atomic_float4_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( float4, sub_cpt_rev, kmp_real32, 32, -, KMP_ARCH_X86 ) // __kmpc_atomic_float4_sub_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( float8, div_cpt_rev, kmp_real64, 64, /, KMP_ARCH_X86 ) // __kmpc_atomic_float8_div_cpt_rev
+ATOMIC_CMPXCHG_CPT_REV( float8, sub_cpt_rev, kmp_real64, 64, -, KMP_ARCH_X86 ) // __kmpc_atomic_float8_sub_cpt_rev
+// TYPE_ID,OP_ID, TYPE, OP, GOMP_FLAG
+
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+// TYPE_ID, OP_ID, TYPE - detailed above
+// OP - operator
+// LCK_ID - lock identifier, used to possibly distinguish lock variable
+#define ATOMIC_CRITICAL_CPT_REV(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_CPT(TYPE_ID,OP_ID,TYPE,TYPE) \
+ TYPE new_value; \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ /*printf("__kmp_atomic_mode = %d\n", __kmp_atomic_mode);*/\
+ OP_GOMP_CRITICAL_CPT_REV(OP,GOMP_FLAG) \
+ OP_CRITICAL_CPT_REV(OP,LCK_ID) \
+}
+
+
+/* ------------------------------------------------------------------------- */
+// routines for long double type
+ATOMIC_CRITICAL_CPT_REV( float10, sub_cpt_rev, long double, -, 10r, 1 ) // __kmpc_atomic_float10_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( float10, div_cpt_rev, long double, /, 10r, 1 ) // __kmpc_atomic_float10_div_cpt_rev
+#if KMP_HAVE_QUAD
+// routines for _Quad type
+ATOMIC_CRITICAL_CPT_REV( float16, sub_cpt_rev, QUAD_LEGACY, -, 16r, 1 ) // __kmpc_atomic_float16_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( float16, div_cpt_rev, QUAD_LEGACY, /, 16r, 1 ) // __kmpc_atomic_float16_div_cpt_rev
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_CPT_REV( float16, sub_a16_cpt_rev, Quad_a16_t, -, 16r, 1 ) // __kmpc_atomic_float16_sub_a16_cpt_rev
+ ATOMIC_CRITICAL_CPT_REV( float16, div_a16_cpt_rev, Quad_a16_t, /, 16r, 1 ) // __kmpc_atomic_float16_div_a16_cpt_rev
+#endif
+#endif
+
+// routines for complex types
+
+// ------------------------------------------------------------------------
+
+// Workaround for cmplx4. Regular routines with return value don't work
+// on Win_32e. Let's return captured values through the additional parameter.
+#define OP_CRITICAL_CPT_REV_WRK(OP,LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ if( flag ) { \
+ (*lhs) = (rhs) OP (*lhs); \
+ (*out) = (*lhs); \
+ } else { \
+ (*out) = (*lhs); \
+ (*lhs) = (rhs) OP (*lhs); \
+ } \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return;
+// ------------------------------------------------------------------------
+
+#ifdef KMP_GOMP_COMPAT
+#define OP_GOMP_CRITICAL_CPT_REV_WRK(OP,FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ OP_CRITICAL_CPT_REV_WRK( OP, 0 ); \
+ }
+#else
+#define OP_GOMP_CRITICAL_CPT_REV_WRK(OP,FLAG)
+#endif /* KMP_GOMP_COMPAT */
+// ------------------------------------------------------------------------
+
+#define ATOMIC_CRITICAL_CPT_REV_WRK(TYPE_ID,OP_ID,TYPE,OP,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_WRK(TYPE_ID,OP_ID,TYPE) \
+ OP_GOMP_CRITICAL_CPT_REV_WRK(OP,GOMP_FLAG) \
+ OP_CRITICAL_CPT_REV_WRK(OP,LCK_ID) \
+}
+// The end of workaround for cmplx4
+
+
+// !!! TODO: check if we need to return void for cmplx4 routines
+// cmplx4 routines to return void
+ATOMIC_CRITICAL_CPT_REV_WRK( cmplx4, sub_cpt_rev, kmp_cmplx32, -, 8c, 1 ) // __kmpc_atomic_cmplx4_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV_WRK( cmplx4, div_cpt_rev, kmp_cmplx32, /, 8c, 1 ) // __kmpc_atomic_cmplx4_div_cpt_rev
+
+ATOMIC_CRITICAL_CPT_REV( cmplx8, sub_cpt_rev, kmp_cmplx64, -, 16c, 1 ) // __kmpc_atomic_cmplx8_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( cmplx8, div_cpt_rev, kmp_cmplx64, /, 16c, 1 ) // __kmpc_atomic_cmplx8_div_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( cmplx10, sub_cpt_rev, kmp_cmplx80, -, 20c, 1 ) // __kmpc_atomic_cmplx10_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( cmplx10, div_cpt_rev, kmp_cmplx80, /, 20c, 1 ) // __kmpc_atomic_cmplx10_div_cpt_rev
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_CPT_REV( cmplx16, sub_cpt_rev, CPLX128_LEG, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_cpt_rev
+ATOMIC_CRITICAL_CPT_REV( cmplx16, div_cpt_rev, CPLX128_LEG, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_cpt_rev
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_CPT_REV( cmplx16, sub_a16_cpt_rev, kmp_cmplx128_a16_t, -, 32c, 1 ) // __kmpc_atomic_cmplx16_sub_a16_cpt_rev
+ ATOMIC_CRITICAL_CPT_REV( cmplx16, div_a16_cpt_rev, kmp_cmplx128_a16_t, /, 32c, 1 ) // __kmpc_atomic_cmplx16_div_a16_cpt_rev
+#endif
+#endif
+
+// OpenMP 4.0 Capture-write (swap): {v = x; x = expr;}
+
+#define ATOMIC_BEGIN_SWP(TYPE_ID,TYPE) \
+TYPE __kmpc_atomic_##TYPE_ID##_swp( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_swp: T#%d\n", gtid ));
+
+#define CRITICAL_SWP(LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ old_value = (*lhs); \
+ (*lhs) = rhs; \
+ \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return old_value;
+
+// ------------------------------------------------------------------------
+#ifdef KMP_GOMP_COMPAT
+#define GOMP_CRITICAL_SWP(FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ CRITICAL_SWP( 0 ); \
+ }
+#else
+#define GOMP_CRITICAL_SWP(FLAG)
+#endif /* KMP_GOMP_COMPAT */
+
+
+#define ATOMIC_XCHG_SWP(TYPE_ID,TYPE,BITS,GOMP_FLAG) \
+ATOMIC_BEGIN_SWP(TYPE_ID,TYPE) \
+ TYPE old_value; \
+ GOMP_CRITICAL_SWP(GOMP_FLAG) \
+ old_value = KMP_XCHG_FIXED##BITS( lhs, rhs ); \
+ return old_value; \
+}
+// ------------------------------------------------------------------------
+#define ATOMIC_XCHG_FLOAT_SWP(TYPE_ID,TYPE,BITS,GOMP_FLAG) \
+ATOMIC_BEGIN_SWP(TYPE_ID,TYPE) \
+ TYPE old_value; \
+ GOMP_CRITICAL_SWP(GOMP_FLAG) \
+ old_value = KMP_XCHG_REAL##BITS( lhs, rhs ); \
+ return old_value; \
+}
+
+// ------------------------------------------------------------------------
+#define CMPXCHG_SWP(TYPE,BITS) \
+ { \
+ TYPE KMP_ATOMIC_VOLATILE temp_val; \
+ TYPE old_value, new_value; \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs; \
+ while ( ! KMP_COMPARE_AND_STORE_ACQ##BITS( (kmp_int##BITS *) lhs, \
+ *VOLATILE_CAST(kmp_int##BITS *) &old_value, \
+ *VOLATILE_CAST(kmp_int##BITS *) &new_value ) ) \
+ { \
+ KMP_CPU_PAUSE(); \
+ \
+ temp_val = *lhs; \
+ old_value = temp_val; \
+ new_value = rhs; \
+ } \
+ return old_value; \
+ }
+
+// -------------------------------------------------------------------------
+#define ATOMIC_CMPXCHG_SWP(TYPE_ID,TYPE,BITS,GOMP_FLAG) \
+ATOMIC_BEGIN_SWP(TYPE_ID,TYPE) \
+ TYPE old_value; \
+ GOMP_CRITICAL_SWP(GOMP_FLAG) \
+ CMPXCHG_SWP(TYPE,BITS) \
+}
+
+ATOMIC_XCHG_SWP( fixed1, kmp_int8, 8, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_swp
+ATOMIC_XCHG_SWP( fixed2, kmp_int16, 16, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_swp
+ATOMIC_XCHG_SWP( fixed4, kmp_int32, 32, KMP_ARCH_X86 ) // __kmpc_atomic_fixed4_swp
+
+ATOMIC_XCHG_FLOAT_SWP( float4, kmp_real32, 32, KMP_ARCH_X86 ) // __kmpc_atomic_float4_swp
+
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CMPXCHG_SWP( fixed8, kmp_int64, 64, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_swp
+ ATOMIC_CMPXCHG_SWP( float8, kmp_real64, 64, KMP_ARCH_X86 ) // __kmpc_atomic_float8_swp
+#else
+ ATOMIC_XCHG_SWP( fixed8, kmp_int64, 64, KMP_ARCH_X86 ) // __kmpc_atomic_fixed8_swp
+ ATOMIC_XCHG_FLOAT_SWP( float8, kmp_real64, 64, KMP_ARCH_X86 ) // __kmpc_atomic_float8_swp
+#endif
+
+// ------------------------------------------------------------------------
+// Routines for Extended types: long double, _Quad, complex flavours (use critical section)
+#define ATOMIC_CRITICAL_SWP(TYPE_ID,TYPE,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_SWP(TYPE_ID,TYPE) \
+ TYPE old_value; \
+ GOMP_CRITICAL_SWP(GOMP_FLAG) \
+ CRITICAL_SWP(LCK_ID) \
+}
+
+// ------------------------------------------------------------------------
+
+// !!! TODO: check if we need to return void for cmplx4 routines
+// Workaround for cmplx4. Regular routines with return value don't work
+// on Win_32e. Let's return captured values through the additional parameter.
+
+#define ATOMIC_BEGIN_SWP_WRK(TYPE_ID,TYPE) \
+void __kmpc_atomic_##TYPE_ID##_swp( ident_t *id_ref, int gtid, TYPE * lhs, TYPE rhs, TYPE * out ) \
+{ \
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); \
+ KA_TRACE(100,("__kmpc_atomic_" #TYPE_ID "_swp: T#%d\n", gtid ));
+
+
+#define CRITICAL_SWP_WRK(LCK_ID) \
+ __kmp_acquire_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ \
+ tmp = (*lhs); \
+ (*lhs) = (rhs); \
+ (*out) = tmp; \
+ __kmp_release_atomic_lock( & ATOMIC_LOCK##LCK_ID, gtid ); \
+ return;
+
+// ------------------------------------------------------------------------
+
+#ifdef KMP_GOMP_COMPAT
+#define GOMP_CRITICAL_SWP_WRK(FLAG) \
+ if ( (FLAG) && (__kmp_atomic_mode == 2) ) { \
+ KMP_CHECK_GTID; \
+ CRITICAL_SWP_WRK( 0 ); \
+ }
+#else
+#define GOMP_CRITICAL_SWP_WRK(FLAG)
+#endif /* KMP_GOMP_COMPAT */
+// ------------------------------------------------------------------------
+
+#define ATOMIC_CRITICAL_SWP_WRK(TYPE_ID, TYPE,LCK_ID,GOMP_FLAG) \
+ATOMIC_BEGIN_SWP_WRK(TYPE_ID,TYPE) \
+ TYPE tmp; \
+ GOMP_CRITICAL_SWP_WRK(GOMP_FLAG) \
+ CRITICAL_SWP_WRK(LCK_ID) \
+}
+// The end of workaround for cmplx4
+
+
+ATOMIC_CRITICAL_SWP( float10, long double, 10r, 1 ) // __kmpc_atomic_float10_swp
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_SWP( float16, QUAD_LEGACY, 16r, 1 ) // __kmpc_atomic_float16_swp
+#endif
+// cmplx4 routine to return void
+ATOMIC_CRITICAL_SWP_WRK( cmplx4, kmp_cmplx32, 8c, 1 ) // __kmpc_atomic_cmplx4_swp
+
+//ATOMIC_CRITICAL_SWP( cmplx4, kmp_cmplx32, 8c, 1 ) // __kmpc_atomic_cmplx4_swp
+
+
+ATOMIC_CRITICAL_SWP( cmplx8, kmp_cmplx64, 16c, 1 ) // __kmpc_atomic_cmplx8_swp
+ATOMIC_CRITICAL_SWP( cmplx10, kmp_cmplx80, 20c, 1 ) // __kmpc_atomic_cmplx10_swp
+#if KMP_HAVE_QUAD
+ATOMIC_CRITICAL_SWP( cmplx16, CPLX128_LEG, 32c, 1 ) // __kmpc_atomic_cmplx16_swp
+#if ( KMP_ARCH_X86 )
+ ATOMIC_CRITICAL_SWP( float16_a16, Quad_a16_t, 16r, 1 ) // __kmpc_atomic_float16_a16_swp
+ ATOMIC_CRITICAL_SWP( cmplx16_a16, kmp_cmplx128_a16_t, 32c, 1 ) // __kmpc_atomic_cmplx16_a16_swp
+#endif
+#endif
+
+
+// End of OpenMP 4.0 Capture
+
+#endif //OMP_40_ENABLED
+
+#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+
+#undef OP_CRITICAL
+
+/* ------------------------------------------------------------------------ */
+/* Generic atomic routines */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmpc_atomic_1( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ if (
+#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
+ FALSE /* must use lock */
+#else
+ TRUE
+#endif
+ )
+ {
+ kmp_int8 old_value, new_value;
+
+ old_value = *(kmp_int8 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+
+ /* TODO: Should this be acquire or release? */
+ while ( ! KMP_COMPARE_AND_STORE_ACQ8 ( (kmp_int8 *) lhs,
+ *(kmp_int8 *) &old_value, *(kmp_int8 *) &new_value ) )
+ {
+ KMP_CPU_PAUSE();
+
+ old_value = *(kmp_int8 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+ }
+
+ return;
+ }
+ else {
+ //
+ // All 1-byte data is of integer data type.
+ //
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_1i, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_1i, gtid );
+ }
+}
+
+void
+__kmpc_atomic_2( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ if (
+#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
+ FALSE /* must use lock */
+#elif KMP_ARCH_X86 || KMP_ARCH_X86_64
+ TRUE /* no alignment problems */
+#else
+ ! ( (kmp_uintptr_t) lhs & 0x1) /* make sure address is 2-byte aligned */
+#endif
+ )
+ {
+ kmp_int16 old_value, new_value;
+
+ old_value = *(kmp_int16 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+
+ /* TODO: Should this be acquire or release? */
+ while ( ! KMP_COMPARE_AND_STORE_ACQ16 ( (kmp_int16 *) lhs,
+ *(kmp_int16 *) &old_value, *(kmp_int16 *) &new_value ) )
+ {
+ KMP_CPU_PAUSE();
+
+ old_value = *(kmp_int16 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+ }
+
+ return;
+ }
+ else {
+ //
+ // All 2-byte data is of integer data type.
+ //
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_2i, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_2i, gtid );
+ }
+}
+
+void
+__kmpc_atomic_4( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ if (
+ //
+ // FIXME: On IA-32 architecture, gcc uses cmpxchg only for 4-byte ints.
+ // Gomp compatibility is broken if this routine is called for floats.
+ //
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ TRUE /* no alignment problems */
+#else
+ ! ( (kmp_uintptr_t) lhs & 0x3) /* make sure address is 4-byte aligned */
+#endif
+ )
+ {
+ kmp_int32 old_value, new_value;
+
+ old_value = *(kmp_int32 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+
+ /* TODO: Should this be acquire or release? */
+ while ( ! KMP_COMPARE_AND_STORE_ACQ32 ( (kmp_int32 *) lhs,
+ *(kmp_int32 *) &old_value, *(kmp_int32 *) &new_value ) )
+ {
+ KMP_CPU_PAUSE();
+
+ old_value = *(kmp_int32 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+ }
+
+ return;
+ }
+ else {
+ //
+ // Use __kmp_atomic_lock_4i for all 4-byte data,
+ // even if it isn't of integer data type.
+ //
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_4i, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_4i, gtid );
+ }
+}
+
+void
+__kmpc_atomic_8( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ if (
+
+#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
+ FALSE /* must use lock */
+#elif KMP_ARCH_X86 || KMP_ARCH_X86_64
+ TRUE /* no alignment problems */
+#else
+ ! ( (kmp_uintptr_t) lhs & 0x7) /* make sure address is 8-byte aligned */
+#endif
+ )
+ {
+ kmp_int64 old_value, new_value;
+
+ old_value = *(kmp_int64 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+ /* TODO: Should this be acquire or release? */
+ while ( ! KMP_COMPARE_AND_STORE_ACQ64 ( (kmp_int64 *) lhs,
+ *(kmp_int64 *) &old_value,
+ *(kmp_int64 *) &new_value ) )
+ {
+ KMP_CPU_PAUSE();
+
+ old_value = *(kmp_int64 *) lhs;
+ (*f)( &new_value, &old_value, rhs );
+ }
+
+ return;
+ } else {
+ //
+ // Use __kmp_atomic_lock_8i for all 8-byte data,
+ // even if it isn't of integer data type.
+ //
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_8i, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_8i, gtid );
+ }
+}
+
+void
+__kmpc_atomic_10( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_10r, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_10r, gtid );
+}
+
+void
+__kmpc_atomic_16( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_16c, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_16c, gtid );
+}
+
+void
+__kmpc_atomic_20( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_20c, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_20c, gtid );
+}
+
+void
+__kmpc_atomic_32( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_acquire_atomic_lock( & __kmp_atomic_lock_32c, gtid );
+
+ (*f)( lhs, lhs, rhs );
+
+#ifdef KMP_GOMP_COMPAT
+ if ( __kmp_atomic_mode == 2 ) {
+ __kmp_release_atomic_lock( & __kmp_atomic_lock, gtid );
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ __kmp_release_atomic_lock( & __kmp_atomic_lock_32c, gtid );
+}
+
+// AC: same two routines as GOMP_atomic_start/end, but will be called by our compiler
+// duplicated in order to not use 3-party names in pure Intel code
+// TODO: consider adding GTID parameter after consultation with Ernesto/Xinmin.
+void
+__kmpc_atomic_start(void)
+{
+ int gtid = __kmp_entry_gtid();
+ KA_TRACE(20, ("__kmpc_atomic_start: T#%d\n", gtid));
+ __kmp_acquire_atomic_lock(&__kmp_atomic_lock, gtid);
+}
+
+
+void
+__kmpc_atomic_end(void)
+{
+ int gtid = __kmp_get_gtid();
+ KA_TRACE(20, ("__kmpc_atomic_end: T#%d\n", gtid));
+ __kmp_release_atomic_lock(&__kmp_atomic_lock, gtid);
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+/*!
+@}
+*/
+
+// end of file
diff --git a/final/runtime/src/kmp_atomic.h b/final/runtime/src/kmp_atomic.h
new file mode 100644
index 0000000..37b62b7
--- /dev/null
+++ b/final/runtime/src/kmp_atomic.h
@@ -0,0 +1,1045 @@
+/*
+ * kmp_atomic.h - ATOMIC header file
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_ATOMIC_H
+#define KMP_ATOMIC_H
+
+#include "kmp_os.h"
+#include "kmp_lock.h"
+
+#if OMPT_SUPPORT
+#include "ompt-specific.h"
+#endif
+
+// C++ build port.
+// Intel compiler does not support _Complex datatype on win.
+// Intel compiler supports _Complex datatype on lin and mac.
+// On the other side, there is a problem of stack alignment on lin_32 and mac_32
+// if the rhs is cmplx80 or cmplx128 typedef'ed datatype.
+// The decision is: to use compiler supported _Complex type on lin and mac,
+// to use typedef'ed types on win.
+// Condition for WIN64 was modified in anticipation of 10.1 build compiler.
+
+#if defined( __cplusplus ) && ( KMP_OS_WINDOWS )
+ // create shortcuts for c99 complex types
+
+ // Visual Studio cannot have function parameters that have the
+ // align __declspec attribute, so we must remove it. (Compiler Error C2719)
+ #if KMP_COMPILER_MSVC
+ # undef KMP_DO_ALIGN
+ # define KMP_DO_ALIGN(alignment) /* Nothing */
+ #endif
+
+ #if (_MSC_VER < 1600) && defined(_DEBUG)
+ // Workaround for the problem of _DebugHeapTag unresolved external.
+ // This problem prevented to use our static debug library for C tests
+ // compiled with /MDd option (the library itself built with /MTd),
+ #undef _DEBUG
+ #define _DEBUG_TEMPORARILY_UNSET_
+ #endif
+
+ #include <complex>
+
+ template< typename type_lhs, typename type_rhs >
+ std::complex< type_lhs > __kmp_lhs_div_rhs(
+ const std::complex< type_lhs >& lhs,
+ const std::complex< type_rhs >& rhs ) {
+ type_lhs a = lhs.real();
+ type_lhs b = lhs.imag();
+ type_rhs c = rhs.real();
+ type_rhs d = rhs.imag();
+ type_rhs den = c*c + d*d;
+ type_rhs r = ( a*c + b*d );
+ type_rhs i = ( b*c - a*d );
+ std::complex< type_lhs > ret( r/den, i/den );
+ return ret;
+ }
+
+ // complex8
+ struct __kmp_cmplx64_t : std::complex< double > {
+
+ __kmp_cmplx64_t() : std::complex< double > () {}
+
+ __kmp_cmplx64_t( const std::complex< double >& cd )
+ : std::complex< double > ( cd ) {}
+
+ void operator /= ( const __kmp_cmplx64_t& rhs ) {
+ std::complex< double > lhs = *this;
+ *this = __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ __kmp_cmplx64_t operator / ( const __kmp_cmplx64_t& rhs ) {
+ std::complex< double > lhs = *this;
+ return __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ };
+ typedef struct __kmp_cmplx64_t kmp_cmplx64;
+
+ // complex4
+ struct __kmp_cmplx32_t : std::complex< float > {
+
+ __kmp_cmplx32_t() : std::complex< float > () {}
+
+ __kmp_cmplx32_t( const std::complex<float>& cf )
+ : std::complex< float > ( cf ) {}
+
+ __kmp_cmplx32_t operator + ( const __kmp_cmplx32_t& b ) {
+ std::complex< float > lhs = *this;
+ std::complex< float > rhs = b;
+ return ( lhs + rhs );
+ }
+ __kmp_cmplx32_t operator - ( const __kmp_cmplx32_t& b ) {
+ std::complex< float > lhs = *this;
+ std::complex< float > rhs = b;
+ return ( lhs - rhs );
+ }
+ __kmp_cmplx32_t operator * ( const __kmp_cmplx32_t& b ) {
+ std::complex< float > lhs = *this;
+ std::complex< float > rhs = b;
+ return ( lhs * rhs );
+ }
+
+ __kmp_cmplx32_t operator + ( const kmp_cmplx64& b ) {
+ kmp_cmplx64 t = kmp_cmplx64( *this ) + b;
+ std::complex< double > d( t );
+ std::complex< float > f( d );
+ __kmp_cmplx32_t r( f );
+ return r;
+ }
+ __kmp_cmplx32_t operator - ( const kmp_cmplx64& b ) {
+ kmp_cmplx64 t = kmp_cmplx64( *this ) - b;
+ std::complex< double > d( t );
+ std::complex< float > f( d );
+ __kmp_cmplx32_t r( f );
+ return r;
+ }
+ __kmp_cmplx32_t operator * ( const kmp_cmplx64& b ) {
+ kmp_cmplx64 t = kmp_cmplx64( *this ) * b;
+ std::complex< double > d( t );
+ std::complex< float > f( d );
+ __kmp_cmplx32_t r( f );
+ return r;
+ }
+
+ void operator /= ( const __kmp_cmplx32_t& rhs ) {
+ std::complex< float > lhs = *this;
+ *this = __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ __kmp_cmplx32_t operator / ( const __kmp_cmplx32_t& rhs ) {
+ std::complex< float > lhs = *this;
+ return __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ void operator /= ( const kmp_cmplx64& rhs ) {
+ std::complex< float > lhs = *this;
+ *this = __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ __kmp_cmplx32_t operator / ( const kmp_cmplx64& rhs ) {
+ std::complex< float > lhs = *this;
+ return __kmp_lhs_div_rhs( lhs, rhs );
+ }
+ };
+ typedef struct __kmp_cmplx32_t kmp_cmplx32;
+
+ // complex10
+ struct KMP_DO_ALIGN( 16 ) __kmp_cmplx80_t : std::complex< long double > {
+
+ __kmp_cmplx80_t() : std::complex< long double > () {}
+
+ __kmp_cmplx80_t( const std::complex< long double >& cld )
+ : std::complex< long double > ( cld ) {}
+
+ void operator /= ( const __kmp_cmplx80_t& rhs ) {
+ std::complex< long double > lhs = *this;
+ *this = __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ __kmp_cmplx80_t operator / ( const __kmp_cmplx80_t& rhs ) {
+ std::complex< long double > lhs = *this;
+ return __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ };
+ typedef KMP_DO_ALIGN( 16 ) struct __kmp_cmplx80_t kmp_cmplx80;
+
+ // complex16
+ #if KMP_HAVE_QUAD
+ struct __kmp_cmplx128_t : std::complex< _Quad > {
+
+ __kmp_cmplx128_t() : std::complex< _Quad > () {}
+
+ __kmp_cmplx128_t( const std::complex< _Quad >& cq )
+ : std::complex< _Quad > ( cq ) {}
+
+ void operator /= ( const __kmp_cmplx128_t& rhs ) {
+ std::complex< _Quad > lhs = *this;
+ *this = __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ __kmp_cmplx128_t operator / ( const __kmp_cmplx128_t& rhs ) {
+ std::complex< _Quad > lhs = *this;
+ return __kmp_lhs_div_rhs( lhs, rhs );
+ }
+
+ };
+ typedef struct __kmp_cmplx128_t kmp_cmplx128;
+ #endif /* KMP_HAVE_QUAD */
+
+ #ifdef _DEBUG_TEMPORARILY_UNSET_
+ #undef _DEBUG_TEMPORARILY_UNSET_
+ // Set it back now
+ #define _DEBUG 1
+ #endif
+
+#else
+ // create shortcuts for c99 complex types
+ typedef float _Complex kmp_cmplx32;
+ typedef double _Complex kmp_cmplx64;
+ typedef long double _Complex kmp_cmplx80;
+ #if KMP_HAVE_QUAD
+ typedef _Quad _Complex kmp_cmplx128;
+ #endif
+#endif
+
+// Compiler 12.0 changed alignment of 16 and 32-byte arguments (like _Quad
+// and kmp_cmplx128) on IA-32 architecture. The following aligned structures
+// are implemented to support the old alignment in 10.1, 11.0, 11.1 and
+// introduce the new alignment in 12.0. See CQ88405.
+#if KMP_ARCH_X86 && KMP_HAVE_QUAD
+
+ // 4-byte aligned structures for backward compatibility.
+
+ #pragma pack( push, 4 )
+
+
+ struct KMP_DO_ALIGN( 4 ) Quad_a4_t {
+ _Quad q;
+
+ Quad_a4_t( ) : q( ) {}
+ Quad_a4_t( const _Quad & cq ) : q ( cq ) {}
+
+ Quad_a4_t operator + ( const Quad_a4_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a4_t)( lhs + rhs );
+ }
+
+ Quad_a4_t operator - ( const Quad_a4_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a4_t)( lhs - rhs );
+ }
+ Quad_a4_t operator * ( const Quad_a4_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a4_t)( lhs * rhs );
+ }
+
+ Quad_a4_t operator / ( const Quad_a4_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a4_t)( lhs / rhs );
+ }
+
+ };
+
+ struct KMP_DO_ALIGN( 4 ) kmp_cmplx128_a4_t {
+ kmp_cmplx128 q;
+
+ kmp_cmplx128_a4_t() : q () {}
+
+ kmp_cmplx128_a4_t( const kmp_cmplx128 & c128 ) : q ( c128 ) {}
+
+ kmp_cmplx128_a4_t operator + ( const kmp_cmplx128_a4_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a4_t)( lhs + rhs );
+ }
+ kmp_cmplx128_a4_t operator - ( const kmp_cmplx128_a4_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a4_t)( lhs - rhs );
+ }
+ kmp_cmplx128_a4_t operator * ( const kmp_cmplx128_a4_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a4_t)( lhs * rhs );
+ }
+
+ kmp_cmplx128_a4_t operator / ( const kmp_cmplx128_a4_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a4_t)( lhs / rhs );
+ }
+
+ };
+
+ #pragma pack( pop )
+
+ // New 16-byte aligned structures for 12.0 compiler.
+ struct KMP_DO_ALIGN( 16 ) Quad_a16_t {
+ _Quad q;
+
+ Quad_a16_t( ) : q( ) {}
+ Quad_a16_t( const _Quad & cq ) : q ( cq ) {}
+
+ Quad_a16_t operator + ( const Quad_a16_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a16_t)( lhs + rhs );
+ }
+
+ Quad_a16_t operator - ( const Quad_a16_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a16_t)( lhs - rhs );
+ }
+ Quad_a16_t operator * ( const Quad_a16_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a16_t)( lhs * rhs );
+ }
+
+ Quad_a16_t operator / ( const Quad_a16_t& b ) {
+ _Quad lhs = (*this).q;
+ _Quad rhs = b.q;
+ return (Quad_a16_t)( lhs / rhs );
+ }
+ };
+
+ struct KMP_DO_ALIGN( 16 ) kmp_cmplx128_a16_t {
+ kmp_cmplx128 q;
+
+ kmp_cmplx128_a16_t() : q () {}
+
+ kmp_cmplx128_a16_t( const kmp_cmplx128 & c128 ) : q ( c128 ) {}
+
+ kmp_cmplx128_a16_t operator + ( const kmp_cmplx128_a16_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a16_t)( lhs + rhs );
+ }
+ kmp_cmplx128_a16_t operator - ( const kmp_cmplx128_a16_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a16_t)( lhs - rhs );
+ }
+ kmp_cmplx128_a16_t operator * ( const kmp_cmplx128_a16_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a16_t)( lhs * rhs );
+ }
+
+ kmp_cmplx128_a16_t operator / ( const kmp_cmplx128_a16_t& b ) {
+ kmp_cmplx128 lhs = (*this).q;
+ kmp_cmplx128 rhs = b.q;
+ return (kmp_cmplx128_a16_t)( lhs / rhs );
+ }
+ };
+
+#endif
+
+#if ( KMP_ARCH_X86 )
+ #define QUAD_LEGACY Quad_a4_t
+ #define CPLX128_LEG kmp_cmplx128_a4_t
+#else
+ #define QUAD_LEGACY _Quad
+ #define CPLX128_LEG kmp_cmplx128
+#endif
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+extern int __kmp_atomic_mode;
+
+//
+// Atomic locks can easily become contended, so we use queuing locks for them.
+//
+
+typedef kmp_queuing_lock_t kmp_atomic_lock_t;
+
+static inline void
+__kmp_acquire_atomic_lock( kmp_atomic_lock_t *lck, kmp_int32 gtid )
+{
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_wait_atomic)) {
+ ompt_callbacks.ompt_callback(ompt_event_wait_atomic)(
+ (ompt_wait_id_t) lck);
+ }
+#endif
+
+ __kmp_acquire_queuing_lock( lck, gtid );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_acquired_atomic)) {
+ ompt_callbacks.ompt_callback(ompt_event_acquired_atomic)(
+ (ompt_wait_id_t) lck);
+ }
+#endif
+}
+
+static inline int
+__kmp_test_atomic_lock( kmp_atomic_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_test_queuing_lock( lck, gtid );
+}
+
+static inline void
+__kmp_release_atomic_lock( kmp_atomic_lock_t *lck, kmp_int32 gtid )
+{
+ __kmp_release_queuing_lock( lck, gtid );
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_release_atomic)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_atomic)(
+ (ompt_wait_id_t) lck);
+ }
+#endif
+}
+
+static inline void
+__kmp_init_atomic_lock( kmp_atomic_lock_t *lck )
+{
+ __kmp_init_queuing_lock( lck );
+}
+
+static inline void
+__kmp_destroy_atomic_lock( kmp_atomic_lock_t *lck )
+{
+ __kmp_destroy_queuing_lock( lck );
+}
+
+// Global Locks
+
+extern kmp_atomic_lock_t __kmp_atomic_lock; /* Control access to all user coded atomics in Gnu compat mode */
+extern kmp_atomic_lock_t __kmp_atomic_lock_1i; /* Control access to all user coded atomics for 1-byte fixed data types */
+extern kmp_atomic_lock_t __kmp_atomic_lock_2i; /* Control access to all user coded atomics for 2-byte fixed data types */
+extern kmp_atomic_lock_t __kmp_atomic_lock_4i; /* Control access to all user coded atomics for 4-byte fixed data types */
+extern kmp_atomic_lock_t __kmp_atomic_lock_4r; /* Control access to all user coded atomics for kmp_real32 data type */
+extern kmp_atomic_lock_t __kmp_atomic_lock_8i; /* Control access to all user coded atomics for 8-byte fixed data types */
+extern kmp_atomic_lock_t __kmp_atomic_lock_8r; /* Control access to all user coded atomics for kmp_real64 data type */
+extern kmp_atomic_lock_t __kmp_atomic_lock_8c; /* Control access to all user coded atomics for complex byte data type */
+extern kmp_atomic_lock_t __kmp_atomic_lock_10r; /* Control access to all user coded atomics for long double data type */
+extern kmp_atomic_lock_t __kmp_atomic_lock_16r; /* Control access to all user coded atomics for _Quad data type */
+extern kmp_atomic_lock_t __kmp_atomic_lock_16c; /* Control access to all user coded atomics for double complex data type*/
+extern kmp_atomic_lock_t __kmp_atomic_lock_20c; /* Control access to all user coded atomics for long double complex type*/
+extern kmp_atomic_lock_t __kmp_atomic_lock_32c; /* Control access to all user coded atomics for _Quad complex data type */
+
+//
+// Below routines for atomic UPDATE are listed
+//
+
+// 1-byte
+void __kmpc_atomic_fixed1_add( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_andb( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_div( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1u_div( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs );
+void __kmpc_atomic_fixed1_mul( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_orb( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_shl( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_shr( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1u_shr( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs );
+void __kmpc_atomic_fixed1_sub( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_xor( ident_t *id_ref, int gtid, char * lhs, char rhs );
+// 2-byte
+void __kmpc_atomic_fixed2_add( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_andb( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_div( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2u_div( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs );
+void __kmpc_atomic_fixed2_mul( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_orb( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_shl( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_shr( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2u_shr( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs );
+void __kmpc_atomic_fixed2_sub( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_xor( ident_t *id_ref, int gtid, short * lhs, short rhs );
+// 4-byte add / sub fixed
+void __kmpc_atomic_fixed4_add( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_sub( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+// 4-byte add / sub float
+void __kmpc_atomic_float4_add( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+void __kmpc_atomic_float4_sub( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+// 8-byte add / sub fixed
+void __kmpc_atomic_fixed8_add( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_sub( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+// 8-byte add / sub float
+void __kmpc_atomic_float8_add( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float8_sub( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+// 4-byte fixed
+void __kmpc_atomic_fixed4_andb( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_div( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4u_div( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs );
+void __kmpc_atomic_fixed4_mul( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_orb( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_shl( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_shr( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4u_shr( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs );
+void __kmpc_atomic_fixed4_xor( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+// 8-byte fixed
+void __kmpc_atomic_fixed8_andb( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_div( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8u_div( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs );
+void __kmpc_atomic_fixed8_mul( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_orb( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_shl( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_shr( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8u_shr( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs );
+void __kmpc_atomic_fixed8_xor( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+// 4-byte float
+void __kmpc_atomic_float4_div( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+void __kmpc_atomic_float4_mul( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+// 8-byte float
+void __kmpc_atomic_float8_div( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float8_mul( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+// 1-, 2-, 4-, 8-byte logical (&&, ||)
+void __kmpc_atomic_fixed1_andl( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_orl( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed2_andl( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_orl( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed4_andl( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_orl( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed8_andl( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_orl( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+// MIN / MAX
+void __kmpc_atomic_fixed1_max( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_min( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed2_max( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_min( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed4_max( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_min( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed8_max( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_min( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_float4_max( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+void __kmpc_atomic_float4_min( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+void __kmpc_atomic_float8_max( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float8_min( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_float16_max( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+void __kmpc_atomic_float16_min( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary; IA-32 architecture only
+ void __kmpc_atomic_float16_max_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_float16_min_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+#endif
+#endif
+// .NEQV. (same as xor)
+void __kmpc_atomic_fixed1_neqv( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed2_neqv( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed4_neqv( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed8_neqv( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+// .EQV. (same as ~xor)
+void __kmpc_atomic_fixed1_eqv( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed2_eqv( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed4_eqv( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed8_eqv( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+// long double type
+void __kmpc_atomic_float10_add( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+void __kmpc_atomic_float10_sub( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+void __kmpc_atomic_float10_mul( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+void __kmpc_atomic_float10_div( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+// _Quad type
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_float16_add( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+void __kmpc_atomic_float16_sub( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+void __kmpc_atomic_float16_mul( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+void __kmpc_atomic_float16_div( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ void __kmpc_atomic_float16_add_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_float16_sub_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_float16_mul_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_float16_div_a16( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+#endif
+#endif
+// routines for complex types
+void __kmpc_atomic_cmplx4_add( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx4_sub( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx4_mul( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx4_div( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx8_add( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx8_sub( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx8_mul( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx8_div( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx10_add( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+void __kmpc_atomic_cmplx10_sub( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+void __kmpc_atomic_cmplx10_mul( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+void __kmpc_atomic_cmplx10_div( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_cmplx16_add( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+void __kmpc_atomic_cmplx16_sub( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+void __kmpc_atomic_cmplx16_mul( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+void __kmpc_atomic_cmplx16_div( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ void __kmpc_atomic_cmplx16_add_a16( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+ void __kmpc_atomic_cmplx16_sub_a16( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+ void __kmpc_atomic_cmplx16_mul_a16( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+ void __kmpc_atomic_cmplx16_div_a16( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+#endif
+#endif
+
+#if OMP_40_ENABLED
+
+// OpenMP 4.0: x = expr binop x for non-commutative operations.
+// Supported only on IA-32 architecture and Intel(R) 64
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+void __kmpc_atomic_fixed1_sub_rev( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_div_rev( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1u_div_rev( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs );
+void __kmpc_atomic_fixed1_shl_rev( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1_shr_rev( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed1u_shr_rev( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs );
+void __kmpc_atomic_fixed2_sub_rev( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_div_rev( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2u_div_rev( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs );
+void __kmpc_atomic_fixed2_shl_rev( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2_shr_rev( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed2u_shr_rev( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs );
+void __kmpc_atomic_fixed4_sub_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_div_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4u_div_rev( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs );
+void __kmpc_atomic_fixed4_shl_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4_shr_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed4u_shr_rev( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs );
+void __kmpc_atomic_fixed8_sub_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_div_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8u_div_rev( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs );
+void __kmpc_atomic_fixed8_shl_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8_shr_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_fixed8u_shr_rev( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs );
+void __kmpc_atomic_float4_sub_rev( ident_t *id_ref, int gtid, float * lhs, float rhs );
+void __kmpc_atomic_float4_div_rev( ident_t *id_ref, int gtid, float * lhs, float rhs );
+void __kmpc_atomic_float8_sub_rev( ident_t *id_ref, int gtid, double * lhs, double rhs );
+void __kmpc_atomic_float8_div_rev( ident_t *id_ref, int gtid, double * lhs, double rhs );
+void __kmpc_atomic_float10_sub_rev( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+void __kmpc_atomic_float10_div_rev( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_float16_sub_rev( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+void __kmpc_atomic_float16_div_rev( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+#endif
+void __kmpc_atomic_cmplx4_sub_rev( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx4_div_rev( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx8_sub_rev( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx8_div_rev( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx10_sub_rev( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+void __kmpc_atomic_cmplx10_div_rev( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_cmplx16_sub_rev( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+void __kmpc_atomic_cmplx16_div_rev( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ void __kmpc_atomic_float16_sub_a16_rev( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_float16_div_a16_rev( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_cmplx16_sub_a16_rev( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+ void __kmpc_atomic_cmplx16_div_a16_rev( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+#endif
+#endif // KMP_HAVE_QUAD
+
+#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+#endif //OMP_40_ENABLED
+
+// routines for mixed types
+
+// RHS=float8
+void __kmpc_atomic_fixed1_mul_float8( ident_t *id_ref, int gtid, char * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed1_div_float8( ident_t *id_ref, int gtid, char * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed2_mul_float8( ident_t *id_ref, int gtid, short * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed2_div_float8( ident_t *id_ref, int gtid, short * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed4_mul_float8( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed4_div_float8( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed8_mul_float8( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_fixed8_div_float8( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float4_add_float8( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float4_sub_float8( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float4_mul_float8( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float4_div_float8( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real64 rhs );
+
+// RHS=float16 (deprecated, to be removed when we are sure the compiler does not use them)
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_fixed1_add_fp( ident_t *id_ref, int gtid, char * lhs, _Quad rhs );
+void __kmpc_atomic_fixed1_sub_fp( ident_t *id_ref, int gtid, char * lhs, _Quad rhs );
+void __kmpc_atomic_fixed1_mul_fp( ident_t *id_ref, int gtid, char * lhs, _Quad rhs );
+void __kmpc_atomic_fixed1_div_fp( ident_t *id_ref, int gtid, char * lhs, _Quad rhs );
+void __kmpc_atomic_fixed1u_div_fp( ident_t *id_ref, int gtid, unsigned char * lhs, _Quad rhs );
+
+void __kmpc_atomic_fixed2_add_fp( ident_t *id_ref, int gtid, short * lhs, _Quad rhs );
+void __kmpc_atomic_fixed2_sub_fp( ident_t *id_ref, int gtid, short * lhs, _Quad rhs );
+void __kmpc_atomic_fixed2_mul_fp( ident_t *id_ref, int gtid, short * lhs, _Quad rhs );
+void __kmpc_atomic_fixed2_div_fp( ident_t *id_ref, int gtid, short * lhs, _Quad rhs );
+void __kmpc_atomic_fixed2u_div_fp( ident_t *id_ref, int gtid, unsigned short * lhs, _Quad rhs );
+
+void __kmpc_atomic_fixed4_add_fp( ident_t *id_ref, int gtid, kmp_int32 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed4_sub_fp( ident_t *id_ref, int gtid, kmp_int32 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed4_mul_fp( ident_t *id_ref, int gtid, kmp_int32 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed4_div_fp( ident_t *id_ref, int gtid, kmp_int32 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed4u_div_fp( ident_t *id_ref, int gtid, kmp_uint32 * lhs, _Quad rhs );
+
+void __kmpc_atomic_fixed8_add_fp( ident_t *id_ref, int gtid, kmp_int64 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed8_sub_fp( ident_t *id_ref, int gtid, kmp_int64 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed8_mul_fp( ident_t *id_ref, int gtid, kmp_int64 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed8_div_fp( ident_t *id_ref, int gtid, kmp_int64 * lhs, _Quad rhs );
+void __kmpc_atomic_fixed8u_div_fp( ident_t *id_ref, int gtid, kmp_uint64 * lhs, _Quad rhs );
+
+void __kmpc_atomic_float4_add_fp( ident_t *id_ref, int gtid, kmp_real32 * lhs, _Quad rhs );
+void __kmpc_atomic_float4_sub_fp( ident_t *id_ref, int gtid, kmp_real32 * lhs, _Quad rhs );
+void __kmpc_atomic_float4_mul_fp( ident_t *id_ref, int gtid, kmp_real32 * lhs, _Quad rhs );
+void __kmpc_atomic_float4_div_fp( ident_t *id_ref, int gtid, kmp_real32 * lhs, _Quad rhs );
+
+void __kmpc_atomic_float8_add_fp( ident_t *id_ref, int gtid, kmp_real64 * lhs, _Quad rhs );
+void __kmpc_atomic_float8_sub_fp( ident_t *id_ref, int gtid, kmp_real64 * lhs, _Quad rhs );
+void __kmpc_atomic_float8_mul_fp( ident_t *id_ref, int gtid, kmp_real64 * lhs, _Quad rhs );
+void __kmpc_atomic_float8_div_fp( ident_t *id_ref, int gtid, kmp_real64 * lhs, _Quad rhs );
+
+void __kmpc_atomic_float10_add_fp( ident_t *id_ref, int gtid, long double * lhs, _Quad rhs );
+void __kmpc_atomic_float10_sub_fp( ident_t *id_ref, int gtid, long double * lhs, _Quad rhs );
+void __kmpc_atomic_float10_mul_fp( ident_t *id_ref, int gtid, long double * lhs, _Quad rhs );
+void __kmpc_atomic_float10_div_fp( ident_t *id_ref, int gtid, long double * lhs, _Quad rhs );
+#endif // KMP_HAVE_QUAD
+
+// RHS=cmplx8
+void __kmpc_atomic_cmplx4_add_cmplx8( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx4_sub_cmplx8( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx4_mul_cmplx8( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx4_div_cmplx8( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx64 rhs );
+
+// generic atomic routines
+void __kmpc_atomic_1( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_2( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_4( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_8( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_10( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_16( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_20( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+void __kmpc_atomic_32( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
+
+// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+//
+// Below routines for atomic READ are listed
+//
+
+char __kmpc_atomic_fixed1_rd( ident_t *id_ref, int gtid, char * loc );
+short __kmpc_atomic_fixed2_rd( ident_t *id_ref, int gtid, short * loc );
+kmp_int32 __kmpc_atomic_fixed4_rd( ident_t *id_ref, int gtid, kmp_int32 * loc );
+kmp_int64 __kmpc_atomic_fixed8_rd( ident_t *id_ref, int gtid, kmp_int64 * loc );
+kmp_real32 __kmpc_atomic_float4_rd( ident_t *id_ref, int gtid, kmp_real32 * loc );
+kmp_real64 __kmpc_atomic_float8_rd( ident_t *id_ref, int gtid, kmp_real64 * loc );
+long double __kmpc_atomic_float10_rd( ident_t *id_ref, int gtid, long double * loc );
+#if KMP_HAVE_QUAD
+QUAD_LEGACY __kmpc_atomic_float16_rd( ident_t *id_ref, int gtid, QUAD_LEGACY * loc );
+#endif
+// Fix for CQ220361: cmplx4 READ will return void on Windows* OS; read value will be
+// returned through an additional parameter
+#if ( KMP_OS_WINDOWS )
+ void __kmpc_atomic_cmplx4_rd( kmp_cmplx32 * out, ident_t *id_ref, int gtid, kmp_cmplx32 * loc );
+#else
+ kmp_cmplx32 __kmpc_atomic_cmplx4_rd( ident_t *id_ref, int gtid, kmp_cmplx32 * loc );
+#endif
+kmp_cmplx64 __kmpc_atomic_cmplx8_rd( ident_t *id_ref, int gtid, kmp_cmplx64 * loc );
+kmp_cmplx80 __kmpc_atomic_cmplx10_rd( ident_t *id_ref, int gtid, kmp_cmplx80 * loc );
+#if KMP_HAVE_QUAD
+CPLX128_LEG __kmpc_atomic_cmplx16_rd( ident_t *id_ref, int gtid, CPLX128_LEG * loc );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ Quad_a16_t __kmpc_atomic_float16_a16_rd( ident_t * id_ref, int gtid, Quad_a16_t * loc );
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_rd( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * loc );
+#endif
+#endif
+
+
+//
+// Below routines for atomic WRITE are listed
+//
+
+void __kmpc_atomic_fixed1_wr( ident_t *id_ref, int gtid, char * lhs, char rhs );
+void __kmpc_atomic_fixed2_wr( ident_t *id_ref, int gtid, short * lhs, short rhs );
+void __kmpc_atomic_fixed4_wr( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+void __kmpc_atomic_fixed8_wr( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+void __kmpc_atomic_float4_wr( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs );
+void __kmpc_atomic_float8_wr( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs );
+void __kmpc_atomic_float10_wr( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_float16_wr( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+#endif
+void __kmpc_atomic_cmplx4_wr( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+void __kmpc_atomic_cmplx8_wr( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+void __kmpc_atomic_cmplx10_wr( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+#if KMP_HAVE_QUAD
+void __kmpc_atomic_cmplx16_wr( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ void __kmpc_atomic_float16_a16_wr( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ void __kmpc_atomic_cmplx16_a16_wr( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+#endif
+#endif
+
+//
+// Below routines for atomic CAPTURE are listed
+//
+
+// 1-byte
+char __kmpc_atomic_fixed1_add_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_andb_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_div_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+unsigned char __kmpc_atomic_fixed1u_div_cpt( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs, int flag);
+char __kmpc_atomic_fixed1_mul_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_orb_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_shl_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_shr_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+unsigned char __kmpc_atomic_fixed1u_shr_cpt( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs, int flag);
+char __kmpc_atomic_fixed1_sub_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_xor_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+// 2-byte
+short __kmpc_atomic_fixed2_add_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_andb_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_div_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+unsigned short __kmpc_atomic_fixed2u_div_cpt( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs, int flag);
+short __kmpc_atomic_fixed2_mul_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_orb_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_shl_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_shr_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+unsigned short __kmpc_atomic_fixed2u_shr_cpt( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs, int flag);
+short __kmpc_atomic_fixed2_sub_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_xor_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+// 4-byte add / sub fixed
+kmp_int32 __kmpc_atomic_fixed4_add_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_sub_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+// 4-byte add / sub float
+kmp_real32 __kmpc_atomic_float4_add_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+kmp_real32 __kmpc_atomic_float4_sub_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+// 8-byte add / sub fixed
+kmp_int64 __kmpc_atomic_fixed8_add_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_sub_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+// 8-byte add / sub float
+kmp_real64 __kmpc_atomic_float8_add_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+kmp_real64 __kmpc_atomic_float8_sub_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+// 4-byte fixed
+kmp_int32 __kmpc_atomic_fixed4_andb_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_div_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_uint32 __kmpc_atomic_fixed4u_div_cpt( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_mul_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_orb_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_shl_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_shr_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_xor_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+// 8-byte fixed
+kmp_int64 __kmpc_atomic_fixed8_andb_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_div_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_uint64 __kmpc_atomic_fixed8u_div_cpt( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_mul_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_orb_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_shl_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_shr_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_xor_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+// 4-byte float
+kmp_real32 __kmpc_atomic_float4_div_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+kmp_real32 __kmpc_atomic_float4_mul_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+// 8-byte float
+kmp_real64 __kmpc_atomic_float8_div_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+kmp_real64 __kmpc_atomic_float8_mul_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+// 1-, 2-, 4-, 8-byte logical (&&, ||)
+char __kmpc_atomic_fixed1_andl_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_orl_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+short __kmpc_atomic_fixed2_andl_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_orl_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_andl_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_orl_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_andl_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_orl_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+// MIN / MAX
+char __kmpc_atomic_fixed1_max_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+char __kmpc_atomic_fixed1_min_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+short __kmpc_atomic_fixed2_max_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+short __kmpc_atomic_fixed2_min_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_max_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_min_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_max_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_min_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+kmp_real32 __kmpc_atomic_float4_max_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+kmp_real32 __kmpc_atomic_float4_min_cpt( ident_t *id_ref, int gtid, kmp_real32 * lhs, kmp_real32 rhs, int flag);
+kmp_real64 __kmpc_atomic_float8_max_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+kmp_real64 __kmpc_atomic_float8_min_cpt( ident_t *id_ref, int gtid, kmp_real64 * lhs, kmp_real64 rhs, int flag);
+#if KMP_HAVE_QUAD
+QUAD_LEGACY __kmpc_atomic_float16_max_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+QUAD_LEGACY __kmpc_atomic_float16_min_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+#endif
+// .NEQV. (same as xor)
+char __kmpc_atomic_fixed1_neqv_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+short __kmpc_atomic_fixed2_neqv_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_neqv_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_neqv_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+// .EQV. (same as ~xor)
+char __kmpc_atomic_fixed1_eqv_cpt( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag);
+short __kmpc_atomic_fixed2_eqv_cpt( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag);
+kmp_int32 __kmpc_atomic_fixed4_eqv_cpt( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag);
+kmp_int64 __kmpc_atomic_fixed8_eqv_cpt( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag);
+// long double type
+long double __kmpc_atomic_float10_add_cpt( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag);
+long double __kmpc_atomic_float10_sub_cpt( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag);
+long double __kmpc_atomic_float10_mul_cpt( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag);
+long double __kmpc_atomic_float10_div_cpt( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag);
+#if KMP_HAVE_QUAD
+// _Quad type
+QUAD_LEGACY __kmpc_atomic_float16_add_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+QUAD_LEGACY __kmpc_atomic_float16_sub_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+QUAD_LEGACY __kmpc_atomic_float16_mul_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+QUAD_LEGACY __kmpc_atomic_float16_div_cpt( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag);
+#endif
+// routines for complex types
+// Workaround for cmplx4 routines - return void; captured value is returned via the argument
+void __kmpc_atomic_cmplx4_add_cpt( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag);
+void __kmpc_atomic_cmplx4_sub_cpt( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag);
+void __kmpc_atomic_cmplx4_mul_cpt( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag);
+void __kmpc_atomic_cmplx4_div_cpt( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag);
+
+kmp_cmplx64 __kmpc_atomic_cmplx8_add_cpt( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag);
+kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag);
+kmp_cmplx64 __kmpc_atomic_cmplx8_mul_cpt( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag);
+kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag);
+kmp_cmplx80 __kmpc_atomic_cmplx10_add_cpt( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag);
+kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag);
+kmp_cmplx80 __kmpc_atomic_cmplx10_mul_cpt( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag);
+kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag);
+#if KMP_HAVE_QUAD
+CPLX128_LEG __kmpc_atomic_cmplx16_add_cpt( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag);
+CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag);
+CPLX128_LEG __kmpc_atomic_cmplx16_mul_cpt( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag);
+CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag);
+#if ( KMP_ARCH_X86 )
+ // Routines with 16-byte arguments aligned to 16-byte boundary
+ Quad_a16_t __kmpc_atomic_float16_add_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ Quad_a16_t __kmpc_atomic_float16_mul_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ Quad_a16_t __kmpc_atomic_float16_div_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ Quad_a16_t __kmpc_atomic_float16_max_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ Quad_a16_t __kmpc_atomic_float16_min_a16_cpt( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag);
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_add_a16_cpt( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag);
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_sub_a16_cpt( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag);
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_mul_a16_cpt( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag);
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_div_a16_cpt( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag);
+#endif
+#endif
+
+void __kmpc_atomic_start(void);
+void __kmpc_atomic_end(void);
+
+#if OMP_40_ENABLED
+
+// OpenMP 4.0: v = x = expr binop x; { v = x; x = expr binop x; } { x = expr binop x; v = x; } for non-commutative operations.
+
+char __kmpc_atomic_fixed1_sub_cpt_rev( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag );
+char __kmpc_atomic_fixed1_div_cpt_rev( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag );
+unsigned char __kmpc_atomic_fixed1u_div_cpt_rev( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs, int flag );
+char __kmpc_atomic_fixed1_shl_cpt_rev( ident_t *id_ref, int gtid, char * lhs, char rhs , int flag);
+char __kmpc_atomic_fixed1_shr_cpt_rev( ident_t *id_ref, int gtid, char * lhs, char rhs, int flag );
+unsigned char __kmpc_atomic_fixed1u_shr_cpt_rev( ident_t *id_ref, int gtid, unsigned char * lhs, unsigned char rhs, int flag );
+short __kmpc_atomic_fixed2_sub_cpt_rev( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag );
+short __kmpc_atomic_fixed2_div_cpt_rev( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag );
+unsigned short __kmpc_atomic_fixed2u_div_cpt_rev( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs, int flag );
+short __kmpc_atomic_fixed2_shl_cpt_rev( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag );
+short __kmpc_atomic_fixed2_shr_cpt_rev( ident_t *id_ref, int gtid, short * lhs, short rhs, int flag );
+unsigned short __kmpc_atomic_fixed2u_shr_cpt_rev( ident_t *id_ref, int gtid, unsigned short * lhs, unsigned short rhs, int flag );
+kmp_int32 __kmpc_atomic_fixed4_sub_cpt_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag );
+kmp_int32 __kmpc_atomic_fixed4_div_cpt_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag );
+kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_rev( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs, int flag );
+kmp_int32 __kmpc_atomic_fixed4_shl_cpt_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag );
+kmp_int32 __kmpc_atomic_fixed4_shr_cpt_rev( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs, int flag );
+kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt_rev( ident_t *id_ref, int gtid, kmp_uint32 * lhs, kmp_uint32 rhs, int flag );
+kmp_int64 __kmpc_atomic_fixed8_sub_cpt_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag );
+kmp_int64 __kmpc_atomic_fixed8_div_cpt_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag );
+kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_rev( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs, int flag );
+kmp_int64 __kmpc_atomic_fixed8_shl_cpt_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag );
+kmp_int64 __kmpc_atomic_fixed8_shr_cpt_rev( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs, int flag );
+kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt_rev( ident_t *id_ref, int gtid, kmp_uint64 * lhs, kmp_uint64 rhs, int flag );
+float __kmpc_atomic_float4_sub_cpt_rev( ident_t *id_ref, int gtid, float * lhs, float rhs, int flag );
+float __kmpc_atomic_float4_div_cpt_rev( ident_t *id_ref, int gtid, float * lhs, float rhs, int flag );
+double __kmpc_atomic_float8_sub_cpt_rev( ident_t *id_ref, int gtid, double * lhs, double rhs, int flag );
+double __kmpc_atomic_float8_div_cpt_rev( ident_t *id_ref, int gtid, double * lhs, double rhs, int flag );
+long double __kmpc_atomic_float10_sub_cpt_rev( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag );
+long double __kmpc_atomic_float10_div_cpt_rev( ident_t *id_ref, int gtid, long double * lhs, long double rhs, int flag );
+#if KMP_HAVE_QUAD
+QUAD_LEGACY __kmpc_atomic_float16_sub_cpt_rev( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag );
+QUAD_LEGACY __kmpc_atomic_float16_div_cpt_rev( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs, int flag );
+#endif
+// Workaround for cmplx4 routines - return void; captured value is returned via the argument
+void __kmpc_atomic_cmplx4_sub_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag );
+void __kmpc_atomic_cmplx4_div_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out, int flag );
+kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag );
+kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs, int flag );
+kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag );
+kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt_rev( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs, int flag );
+#if KMP_HAVE_QUAD
+CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt_rev( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag );
+CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt_rev( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs, int flag );
+#if ( KMP_ARCH_X86 )
+ Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt_rev( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag );
+ Quad_a16_t __kmpc_atomic_float16_div_a16_cpt_rev( ident_t * id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs, int flag );
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_sub_a16_cpt_rev( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag );
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_div_a16_cpt_rev( ident_t * id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs, int flag );
+#endif
+#endif
+
+// OpenMP 4.0 Capture-write (swap): {v = x; x = expr;}
+char __kmpc_atomic_fixed1_swp( ident_t *id_ref, int gtid, char * lhs, char rhs );
+short __kmpc_atomic_fixed2_swp( ident_t *id_ref, int gtid, short * lhs, short rhs );
+kmp_int32 __kmpc_atomic_fixed4_swp( ident_t *id_ref, int gtid, kmp_int32 * lhs, kmp_int32 rhs );
+kmp_int64 __kmpc_atomic_fixed8_swp( ident_t *id_ref, int gtid, kmp_int64 * lhs, kmp_int64 rhs );
+float __kmpc_atomic_float4_swp( ident_t *id_ref, int gtid, float * lhs, float rhs );
+double __kmpc_atomic_float8_swp( ident_t *id_ref, int gtid, double * lhs, double rhs );
+long double __kmpc_atomic_float10_swp( ident_t *id_ref, int gtid, long double * lhs, long double rhs );
+#if KMP_HAVE_QUAD
+QUAD_LEGACY __kmpc_atomic_float16_swp( ident_t *id_ref, int gtid, QUAD_LEGACY * lhs, QUAD_LEGACY rhs );
+#endif
+// !!! TODO: check if we need a workaround here
+void __kmpc_atomic_cmplx4_swp( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs, kmp_cmplx32 * out );
+//kmp_cmplx32 __kmpc_atomic_cmplx4_swp( ident_t *id_ref, int gtid, kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
+
+kmp_cmplx64 __kmpc_atomic_cmplx8_swp( ident_t *id_ref, int gtid, kmp_cmplx64 * lhs, kmp_cmplx64 rhs );
+kmp_cmplx80 __kmpc_atomic_cmplx10_swp( ident_t *id_ref, int gtid, kmp_cmplx80 * lhs, kmp_cmplx80 rhs );
+#if KMP_HAVE_QUAD
+CPLX128_LEG __kmpc_atomic_cmplx16_swp( ident_t *id_ref, int gtid, CPLX128_LEG * lhs, CPLX128_LEG rhs );
+#if ( KMP_ARCH_X86 )
+ Quad_a16_t __kmpc_atomic_float16_a16_swp( ident_t *id_ref, int gtid, Quad_a16_t * lhs, Quad_a16_t rhs );
+ kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_swp( ident_t *id_ref, int gtid, kmp_cmplx128_a16_t * lhs, kmp_cmplx128_a16_t rhs );
+#endif
+#endif
+
+// End of OpenMP 4.0 capture
+
+#endif //OMP_40_ENABLED
+
+#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif
+
+#endif /* KMP_ATOMIC_H */
+
+// end of file
diff --git a/final/runtime/src/kmp_barrier.cpp b/final/runtime/src/kmp_barrier.cpp
new file mode 100644
index 0000000..e5125b2
--- /dev/null
+++ b/final/runtime/src/kmp_barrier.cpp
@@ -0,0 +1,1764 @@
+/*
+ * kmp_barrier.cpp
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_wait_release.h"
+#include "kmp_stats.h"
+#include "kmp_itt.h"
+#include "kmp_os.h"
+
+
+#if KMP_MIC
+#include <immintrin.h>
+#define USE_NGO_STORES 1
+#endif // KMP_MIC
+
+#if KMP_MIC && USE_NGO_STORES
+// ICV copying
+#define ngo_load(src) __m512d Vt = _mm512_load_pd((void *)(src))
+#define ngo_store_icvs(dst, src) _mm512_storenrngo_pd((void *)(dst), Vt)
+#define ngo_store_go(dst, src) _mm512_storenrngo_pd((void *)(dst), Vt)
+#define ngo_sync() __asm__ volatile ("lock; addl $0,0(%%rsp)" ::: "memory")
+#else
+#define ngo_load(src) ((void)0)
+#define ngo_store_icvs(dst, src) copy_icvs((dst), (src))
+#define ngo_store_go(dst, src) KMP_MEMCPY((dst), (src), CACHE_LINE)
+#define ngo_sync() ((void)0)
+#endif /* KMP_MIC && USE_NGO_STORES */
+
+void __kmp_print_structure(void); // Forward declaration
+
+// ---------------------------- Barrier Algorithms ----------------------------
+
+// Linear Barrier
+static void
+__kmp_linear_barrier_gather(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ void (*reduce)(void *, void *)
+ USE_ITT_BUILD_ARG(void * itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_linear_gather);
+ register kmp_team_t *team = this_thr->th.th_team;
+ register kmp_bstate_t *thr_bar = & this_thr->th.th_bar[bt].bb;
+ register kmp_info_t **other_threads = team->t.t_threads;
+
+ KA_TRACE(20, ("__kmp_linear_barrier_gather: T#%d(%d:%d) enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+ KMP_DEBUG_ASSERT(this_thr == other_threads[this_thr->th.th_info.ds.ds_tid]);
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - save arrive time to the thread
+ if(__kmp_forkjoin_frames_mode == 3 || __kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_arrive_time = this_thr->th.th_bar_min_time = __itt_get_timestamp();
+ }
+#endif
+ // We now perform a linear reduction to signal that all of the threads have arrived.
+ if (!KMP_MASTER_TID(tid)) {
+ KA_TRACE(20, ("__kmp_linear_barrier_gather: T#%d(%d:%d) releasing T#%d(%d:%d)"
+ "arrived(%p): %llu => %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(0, team), team->t.t_id, 0, &thr_bar->b_arrived,
+ thr_bar->b_arrived, thr_bar->b_arrived + KMP_BARRIER_STATE_BUMP));
+ // Mark arrival to master thread
+ /* After performing this write, a worker thread may not assume that the team is valid
+ any more - it could be deallocated by the master thread at any time. */
+ kmp_flag_64 flag(&thr_bar->b_arrived, other_threads[0]);
+ flag.release();
+ } else {
+ register kmp_balign_team_t *team_bar = &team->t.t_bar[bt];
+ register int nproc = this_thr->th.th_team_nproc;
+ register int i;
+ // Don't have to worry about sleep bit here or atomic since team setting
+ register kmp_uint64 new_state = team_bar->b_arrived + KMP_BARRIER_STATE_BUMP;
+
+ // Collect all the worker team member threads.
+ for (i=1; i<nproc; ++i) {
+#if KMP_CACHE_MANAGE
+ // Prefetch next thread's arrived count
+ if (i+1 < nproc)
+ KMP_CACHE_PREFETCH(&other_threads[i+1]->th.th_bar[bt].bb.b_arrived);
+#endif /* KMP_CACHE_MANAGE */
+ KA_TRACE(20, ("__kmp_linear_barrier_gather: T#%d(%d:%d) wait T#%d(%d:%d) "
+ "arrived(%p) == %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(i, team), team->t.t_id, i,
+ &other_threads[i]->th.th_bar[bt].bb.b_arrived, new_state));
+
+ // Wait for worker thread to arrive
+ kmp_flag_64 flag(&other_threads[i]->th.th_bar[bt].bb.b_arrived, new_state);
+ flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - write min of the thread time and the other thread time to the thread.
+ if (__kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_min_time = KMP_MIN(this_thr->th.th_bar_min_time,
+ other_threads[i]->th.th_bar_min_time);
+ }
+#endif
+ if (reduce) {
+ KA_TRACE(100, ("__kmp_linear_barrier_gather: T#%d(%d:%d) += T#%d(%d:%d)\n", gtid,
+ team->t.t_id, tid, __kmp_gtid_from_tid(i, team), team->t.t_id, i));
+ (*reduce)(this_thr->th.th_local.reduce_data,
+ other_threads[i]->th.th_local.reduce_data);
+ }
+ }
+ // Don't have to worry about sleep bit here or atomic since team setting
+ team_bar->b_arrived = new_state;
+ KA_TRACE(20, ("__kmp_linear_barrier_gather: T#%d(%d:%d) set team %d arrived(%p) = %llu\n",
+ gtid, team->t.t_id, tid, team->t.t_id, &team_bar->b_arrived, new_state));
+ }
+ KA_TRACE(20, ("__kmp_linear_barrier_gather: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+static void
+__kmp_linear_barrier_release(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ int propagate_icvs
+ USE_ITT_BUILD_ARG(void *itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_linear_release);
+ register kmp_bstate_t *thr_bar = &this_thr->th.th_bar[bt].bb;
+ register kmp_team_t *team;
+
+ if (KMP_MASTER_TID(tid)) {
+ register unsigned int i;
+ register kmp_uint32 nproc = this_thr->th.th_team_nproc;
+ register kmp_info_t **other_threads;
+
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ other_threads = team->t.t_threads;
+
+ KA_TRACE(20, ("__kmp_linear_barrier_release: T#%d(%d:%d) master enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+
+ if (nproc > 1) {
+#if KMP_BARRIER_ICV_PUSH
+ {
+ KMP_TIME_DEVELOPER_BLOCK(USER_icv_copy);
+ if (propagate_icvs) {
+ ngo_load(&team->t.t_implicit_task_taskdata[0].td_icvs);
+ for (i=1; i<nproc; ++i) {
+ __kmp_init_implicit_task(team->t.t_ident, team->t.t_threads[i], team, i, FALSE);
+ ngo_store_icvs(&team->t.t_implicit_task_taskdata[i].td_icvs,
+ &team->t.t_implicit_task_taskdata[0].td_icvs);
+ }
+ ngo_sync();
+ }
+ }
+#endif // KMP_BARRIER_ICV_PUSH
+
+ // Now, release all of the worker threads
+ for (i=1; i<nproc; ++i) {
+#if KMP_CACHE_MANAGE
+ // Prefetch next thread's go flag
+ if (i+1 < nproc)
+ KMP_CACHE_PREFETCH(&other_threads[i+1]->th.th_bar[bt].bb.b_go);
+#endif /* KMP_CACHE_MANAGE */
+ KA_TRACE(20, ("__kmp_linear_barrier_release: T#%d(%d:%d) releasing T#%d(%d:%d) "
+ "go(%p): %u => %u\n", gtid, team->t.t_id, tid,
+ other_threads[i]->th.th_info.ds.ds_gtid, team->t.t_id, i,
+ &other_threads[i]->th.th_bar[bt].bb.b_go,
+ other_threads[i]->th.th_bar[bt].bb.b_go,
+ other_threads[i]->th.th_bar[bt].bb.b_go + KMP_BARRIER_STATE_BUMP));
+ kmp_flag_64 flag(&other_threads[i]->th.th_bar[bt].bb.b_go, other_threads[i]);
+ flag.release();
+ }
+ }
+ } else { // Wait for the MASTER thread to release us
+ KA_TRACE(20, ("__kmp_linear_barrier_release: T#%d wait go(%p) == %u\n",
+ gtid, &thr_bar->b_go, KMP_BARRIER_STATE_BUMP));
+ kmp_flag_64 flag(&thr_bar->b_go, KMP_BARRIER_STATE_BUMP);
+ flag.wait(this_thr, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if ((__itt_sync_create_ptr && itt_sync_obj == NULL) || KMP_ITT_DEBUG) {
+ // In a fork barrier; cannot get the object reliably (or ITTNOTIFY is disabled)
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier, 0, -1);
+ // Cancel wait on previous parallel region...
+ __kmp_itt_task_starting(itt_sync_obj);
+
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+ if (itt_sync_obj != NULL)
+ // Call prepare as early as possible for "new" barrier
+ __kmp_itt_task_finished(itt_sync_obj);
+ } else
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ // Early exit for reaping threads releasing forkjoin barrier
+ if ( bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done) )
+ return;
+ // The worker thread may now assume that the team is valid.
+#ifdef KMP_DEBUG
+ tid = __kmp_tid_from_gtid(gtid);
+ team = __kmp_threads[gtid]->th.th_team;
+#endif
+ KMP_DEBUG_ASSERT(team != NULL);
+ TCW_4(thr_bar->b_go, KMP_INIT_BARRIER_STATE);
+ KA_TRACE(20, ("__kmp_linear_barrier_release: T#%d(%d:%d) set go(%p) = %u\n",
+ gtid, team->t.t_id, tid, &thr_bar->b_go, KMP_INIT_BARRIER_STATE));
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }
+ KA_TRACE(20, ("__kmp_linear_barrier_release: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+// Tree barrier
+static void
+__kmp_tree_barrier_gather(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ void (*reduce)(void *, void *)
+ USE_ITT_BUILD_ARG(void *itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_tree_gather);
+ register kmp_team_t *team = this_thr->th.th_team;
+ register kmp_bstate_t *thr_bar = &this_thr->th.th_bar[bt].bb;
+ register kmp_info_t **other_threads = team->t.t_threads;
+ register kmp_uint32 nproc = this_thr->th.th_team_nproc;
+ register kmp_uint32 branch_bits = __kmp_barrier_gather_branch_bits[bt];
+ register kmp_uint32 branch_factor = 1 << branch_bits;
+ register kmp_uint32 child;
+ register kmp_uint32 child_tid;
+ register kmp_uint64 new_state;
+
+ KA_TRACE(20, ("__kmp_tree_barrier_gather: T#%d(%d:%d) enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+ KMP_DEBUG_ASSERT(this_thr == other_threads[this_thr->th.th_info.ds.ds_tid]);
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - save arrive time to the thread
+ if(__kmp_forkjoin_frames_mode == 3 || __kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_arrive_time = this_thr->th.th_bar_min_time = __itt_get_timestamp();
+ }
+#endif
+ // Perform tree gather to wait until all threads have arrived; reduce any required data as we go
+ child_tid = (tid << branch_bits) + 1;
+ if (child_tid < nproc) {
+ // Parent threads wait for all their children to arrive
+ new_state = team->t.t_bar[bt].b_arrived + KMP_BARRIER_STATE_BUMP;
+ child = 1;
+ do {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+#if KMP_CACHE_MANAGE
+ // Prefetch next thread's arrived count
+ if (child+1 <= branch_factor && child_tid+1 < nproc)
+ KMP_CACHE_PREFETCH(&other_threads[child_tid+1]->th.th_bar[bt].bb.b_arrived);
+#endif /* KMP_CACHE_MANAGE */
+ KA_TRACE(20, ("__kmp_tree_barrier_gather: T#%d(%d:%d) wait T#%d(%d:%u) "
+ "arrived(%p) == %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(child_tid, team), team->t.t_id, child_tid,
+ &child_bar->b_arrived, new_state));
+ // Wait for child to arrive
+ kmp_flag_64 flag(&child_bar->b_arrived, new_state);
+ flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - write min of the thread time and a child time to the thread.
+ if (__kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_min_time = KMP_MIN(this_thr->th.th_bar_min_time,
+ child_thr->th.th_bar_min_time);
+ }
+#endif
+ if (reduce) {
+ KA_TRACE(100, ("__kmp_tree_barrier_gather: T#%d(%d:%d) += T#%d(%d:%u)\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid));
+ (*reduce)(this_thr->th.th_local.reduce_data, child_thr->th.th_local.reduce_data);
+ }
+ child++;
+ child_tid++;
+ }
+ while (child <= branch_factor && child_tid < nproc);
+ }
+
+ if (!KMP_MASTER_TID(tid)) { // Worker threads
+ register kmp_int32 parent_tid = (tid - 1) >> branch_bits;
+
+ KA_TRACE(20, ("__kmp_tree_barrier_gather: T#%d(%d:%d) releasing T#%d(%d:%d) "
+ "arrived(%p): %llu => %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(parent_tid, team), team->t.t_id, parent_tid,
+ &thr_bar->b_arrived, thr_bar->b_arrived,
+ thr_bar->b_arrived + KMP_BARRIER_STATE_BUMP));
+
+ // Mark arrival to parent thread
+ /* After performing this write, a worker thread may not assume that the team is valid
+ any more - it could be deallocated by the master thread at any time. */
+ kmp_flag_64 flag(&thr_bar->b_arrived, other_threads[parent_tid]);
+ flag.release();
+ } else {
+ // Need to update the team arrived pointer if we are the master thread
+ if (nproc > 1) // New value was already computed above
+ team->t.t_bar[bt].b_arrived = new_state;
+ else
+ team->t.t_bar[bt].b_arrived += KMP_BARRIER_STATE_BUMP;
+ KA_TRACE(20, ("__kmp_tree_barrier_gather: T#%d(%d:%d) set team %d arrived(%p) = %llu\n",
+ gtid, team->t.t_id, tid, team->t.t_id,
+ &team->t.t_bar[bt].b_arrived, team->t.t_bar[bt].b_arrived));
+ }
+ KA_TRACE(20, ("__kmp_tree_barrier_gather: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+static void
+__kmp_tree_barrier_release(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ int propagate_icvs
+ USE_ITT_BUILD_ARG(void *itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_tree_release);
+ register kmp_team_t *team;
+ register kmp_bstate_t *thr_bar = &this_thr->th.th_bar[bt].bb;
+ register kmp_uint32 nproc;
+ register kmp_uint32 branch_bits = __kmp_barrier_release_branch_bits[bt];
+ register kmp_uint32 branch_factor = 1 << branch_bits;
+ register kmp_uint32 child;
+ register kmp_uint32 child_tid;
+
+ // Perform a tree release for all of the threads that have been gathered
+ if (!KMP_MASTER_TID(tid)) { // Handle fork barrier workers who aren't part of a team yet
+ KA_TRACE(20, ("__kmp_tree_barrier_release: T#%d wait go(%p) == %u\n",
+ gtid, &thr_bar->b_go, KMP_BARRIER_STATE_BUMP));
+ // Wait for parent thread to release us
+ kmp_flag_64 flag(&thr_bar->b_go, KMP_BARRIER_STATE_BUMP);
+ flag.wait(this_thr, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if ((__itt_sync_create_ptr && itt_sync_obj == NULL) || KMP_ITT_DEBUG) {
+ // In fork barrier where we could not get the object reliably (or ITTNOTIFY is disabled)
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier, 0, -1);
+ // Cancel wait on previous parallel region...
+ __kmp_itt_task_starting(itt_sync_obj);
+
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+ if (itt_sync_obj != NULL)
+ // Call prepare as early as possible for "new" barrier
+ __kmp_itt_task_finished(itt_sync_obj);
+ } else
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ // Early exit for reaping threads releasing forkjoin barrier
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+
+ // The worker thread may now assume that the team is valid.
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ tid = __kmp_tid_from_gtid(gtid);
+
+ TCW_4(thr_bar->b_go, KMP_INIT_BARRIER_STATE);
+ KA_TRACE(20, ("__kmp_tree_barrier_release: T#%d(%d:%d) set go(%p) = %u\n",
+ gtid, team->t.t_id, tid, &thr_bar->b_go, KMP_INIT_BARRIER_STATE));
+ KMP_MB(); // Flush all pending memory write invalidates.
+ } else {
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ KA_TRACE(20, ("__kmp_tree_barrier_release: T#%d(%d:%d) master enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+ }
+ nproc = this_thr->th.th_team_nproc;
+ child_tid = (tid << branch_bits) + 1;
+
+ if (child_tid < nproc) {
+ register kmp_info_t **other_threads = team->t.t_threads;
+ child = 1;
+ // Parent threads release all their children
+ do {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+#if KMP_CACHE_MANAGE
+ // Prefetch next thread's go count
+ if (child+1 <= branch_factor && child_tid+1 < nproc)
+ KMP_CACHE_PREFETCH(&other_threads[child_tid+1]->th.th_bar[bt].bb.b_go);
+#endif /* KMP_CACHE_MANAGE */
+
+#if KMP_BARRIER_ICV_PUSH
+ {
+ KMP_TIME_DEVELOPER_BLOCK(USER_icv_copy);
+ if (propagate_icvs) {
+ __kmp_init_implicit_task(team->t.t_ident, team->t.t_threads[child_tid],
+ team, child_tid, FALSE);
+ copy_icvs(&team->t.t_implicit_task_taskdata[child_tid].td_icvs,
+ &team->t.t_implicit_task_taskdata[0].td_icvs);
+ }
+ }
+#endif // KMP_BARRIER_ICV_PUSH
+ KA_TRACE(20, ("__kmp_tree_barrier_release: T#%d(%d:%d) releasing T#%d(%d:%u)"
+ "go(%p): %u => %u\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(child_tid, team), team->t.t_id,
+ child_tid, &child_bar->b_go, child_bar->b_go,
+ child_bar->b_go + KMP_BARRIER_STATE_BUMP));
+ // Release child from barrier
+ kmp_flag_64 flag(&child_bar->b_go, child_thr);
+ flag.release();
+ child++;
+ child_tid++;
+ }
+ while (child <= branch_factor && child_tid < nproc);
+ }
+ KA_TRACE(20, ("__kmp_tree_barrier_release: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+
+// Hyper Barrier
+static void
+__kmp_hyper_barrier_gather(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ void (*reduce)(void *, void *)
+ USE_ITT_BUILD_ARG(void *itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_hyper_gather);
+ register kmp_team_t *team = this_thr->th.th_team;
+ register kmp_bstate_t *thr_bar = &this_thr->th.th_bar[bt].bb;
+ register kmp_info_t **other_threads = team->t.t_threads;
+ register kmp_uint64 new_state = KMP_BARRIER_UNUSED_STATE;
+ register kmp_uint32 num_threads = this_thr->th.th_team_nproc;
+ register kmp_uint32 branch_bits = __kmp_barrier_gather_branch_bits[bt];
+ register kmp_uint32 branch_factor = 1 << branch_bits;
+ register kmp_uint32 offset;
+ register kmp_uint32 level;
+
+ KA_TRACE(20, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+
+ KMP_DEBUG_ASSERT(this_thr == other_threads[this_thr->th.th_info.ds.ds_tid]);
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - save arrive time to the thread
+ if(__kmp_forkjoin_frames_mode == 3 || __kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_arrive_time = this_thr->th.th_bar_min_time = __itt_get_timestamp();
+ }
+#endif
+ /* Perform a hypercube-embedded tree gather to wait until all of the threads have
+ arrived, and reduce any required data as we go. */
+ kmp_flag_64 p_flag(&thr_bar->b_arrived);
+ for (level=0, offset=1; offset<num_threads; level+=branch_bits, offset<<=branch_bits)
+ {
+ register kmp_uint32 child;
+ register kmp_uint32 child_tid;
+
+ if (((tid >> level) & (branch_factor - 1)) != 0) {
+ register kmp_int32 parent_tid = tid & ~((1 << (level + branch_bits)) -1);
+
+ KA_TRACE(20, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) releasing T#%d(%d:%d) "
+ "arrived(%p): %llu => %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(parent_tid, team), team->t.t_id, parent_tid,
+ &thr_bar->b_arrived, thr_bar->b_arrived,
+ thr_bar->b_arrived + KMP_BARRIER_STATE_BUMP));
+ // Mark arrival to parent thread
+ /* After performing this write (in the last iteration of the enclosing for loop),
+ a worker thread may not assume that the team is valid any more - it could be
+ deallocated by the master thread at any time. */
+ p_flag.set_waiter(other_threads[parent_tid]);
+ p_flag.release();
+ break;
+ }
+
+ // Parent threads wait for children to arrive
+ if (new_state == KMP_BARRIER_UNUSED_STATE)
+ new_state = team->t.t_bar[bt].b_arrived + KMP_BARRIER_STATE_BUMP;
+ for (child=1, child_tid=tid+(1 << level); child<branch_factor && child_tid<num_threads;
+ child++, child_tid+=(1 << level))
+ {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+#if KMP_CACHE_MANAGE
+ register kmp_uint32 next_child_tid = child_tid + (1 << level);
+ // Prefetch next thread's arrived count
+ if (child+1 < branch_factor && next_child_tid < num_threads)
+ KMP_CACHE_PREFETCH(&other_threads[next_child_tid]->th.th_bar[bt].bb.b_arrived);
+#endif /* KMP_CACHE_MANAGE */
+ KA_TRACE(20, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) wait T#%d(%d:%u) "
+ "arrived(%p) == %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(child_tid, team), team->t.t_id, child_tid,
+ &child_bar->b_arrived, new_state));
+ // Wait for child to arrive
+ kmp_flag_64 c_flag(&child_bar->b_arrived, new_state);
+ c_flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - write min of the thread time and a child time to the thread.
+ if (__kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_min_time = KMP_MIN(this_thr->th.th_bar_min_time,
+ child_thr->th.th_bar_min_time);
+ }
+#endif
+ if (reduce) {
+ KA_TRACE(100, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) += T#%d(%d:%u)\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid));
+ (*reduce)(this_thr->th.th_local.reduce_data, child_thr->th.th_local.reduce_data);
+ }
+ }
+ }
+
+ if (KMP_MASTER_TID(tid)) {
+ // Need to update the team arrived pointer if we are the master thread
+ if (new_state == KMP_BARRIER_UNUSED_STATE)
+ team->t.t_bar[bt].b_arrived += KMP_BARRIER_STATE_BUMP;
+ else
+ team->t.t_bar[bt].b_arrived = new_state;
+ KA_TRACE(20, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) set team %d arrived(%p) = %llu\n",
+ gtid, team->t.t_id, tid, team->t.t_id,
+ &team->t.t_bar[bt].b_arrived, team->t.t_bar[bt].b_arrived));
+ }
+ KA_TRACE(20, ("__kmp_hyper_barrier_gather: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+// The reverse versions seem to beat the forward versions overall
+#define KMP_REVERSE_HYPER_BAR
+static void
+__kmp_hyper_barrier_release(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ int propagate_icvs
+ USE_ITT_BUILD_ARG(void *itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_hyper_release);
+ register kmp_team_t *team;
+ register kmp_bstate_t *thr_bar = & this_thr -> th.th_bar[ bt ].bb;
+ register kmp_info_t **other_threads;
+ register kmp_uint32 num_threads;
+ register kmp_uint32 branch_bits = __kmp_barrier_release_branch_bits[ bt ];
+ register kmp_uint32 branch_factor = 1 << branch_bits;
+ register kmp_uint32 child;
+ register kmp_uint32 child_tid;
+ register kmp_uint32 offset;
+ register kmp_uint32 level;
+
+ /* Perform a hypercube-embedded tree release for all of the threads that have been gathered.
+ If KMP_REVERSE_HYPER_BAR is defined (default) the threads are released in the reverse
+ order of the corresponding gather, otherwise threads are released in the same order. */
+ if (KMP_MASTER_TID(tid)) { // master
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ KA_TRACE(20, ("__kmp_hyper_barrier_release: T#%d(%d:%d) master enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+#if KMP_BARRIER_ICV_PUSH
+ if (propagate_icvs) { // master already has ICVs in final destination; copy
+ copy_icvs(&thr_bar->th_fixed_icvs, &team->t.t_implicit_task_taskdata[tid].td_icvs);
+ }
+#endif
+ }
+ else { // Handle fork barrier workers who aren't part of a team yet
+ KA_TRACE(20, ("__kmp_hyper_barrier_release: T#%d wait go(%p) == %u\n",
+ gtid, &thr_bar->b_go, KMP_BARRIER_STATE_BUMP));
+ // Wait for parent thread to release us
+ kmp_flag_64 flag(&thr_bar->b_go, KMP_BARRIER_STATE_BUMP);
+ flag.wait(this_thr, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if ((__itt_sync_create_ptr && itt_sync_obj == NULL) || KMP_ITT_DEBUG) {
+ // In fork barrier where we could not get the object reliably
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier, 0, -1);
+ // Cancel wait on previous parallel region...
+ __kmp_itt_task_starting(itt_sync_obj);
+
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+ if (itt_sync_obj != NULL)
+ // Call prepare as early as possible for "new" barrier
+ __kmp_itt_task_finished(itt_sync_obj);
+ } else
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ // Early exit for reaping threads releasing forkjoin barrier
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+
+ // The worker thread may now assume that the team is valid.
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ tid = __kmp_tid_from_gtid(gtid);
+
+ TCW_4(thr_bar->b_go, KMP_INIT_BARRIER_STATE);
+ KA_TRACE(20, ("__kmp_hyper_barrier_release: T#%d(%d:%d) set go(%p) = %u\n",
+ gtid, team->t.t_id, tid, &thr_bar->b_go, KMP_INIT_BARRIER_STATE));
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }
+ num_threads = this_thr->th.th_team_nproc;
+ other_threads = team->t.t_threads;
+
+#ifdef KMP_REVERSE_HYPER_BAR
+ // Count up to correct level for parent
+ for (level=0, offset=1; offset<num_threads && (((tid>>level) & (branch_factor-1)) == 0);
+ level+=branch_bits, offset<<=branch_bits);
+
+ // Now go down from there
+ for (level-=branch_bits, offset>>=branch_bits; offset != 0;
+ level-=branch_bits, offset>>=branch_bits)
+#else
+ // Go down the tree, level by level
+ for (level=0, offset=1; offset<num_threads; level+=branch_bits, offset<<=branch_bits)
+#endif // KMP_REVERSE_HYPER_BAR
+ {
+#ifdef KMP_REVERSE_HYPER_BAR
+ /* Now go in reverse order through the children, highest to lowest.
+ Initial setting of child is conservative here. */
+ child = num_threads >> ((level==0)?level:level-1);
+ for (child=(child<branch_factor-1) ? child : branch_factor-1, child_tid=tid+(child<<level);
+ child>=1; child--, child_tid-=(1<<level))
+#else
+ if (((tid >> level) & (branch_factor - 1)) != 0)
+ // No need to go lower than this, since this is the level parent would be notified
+ break;
+ // Iterate through children on this level of the tree
+ for (child=1, child_tid=tid+(1<<level); child<branch_factor && child_tid<num_threads;
+ child++, child_tid+=(1<<level))
+#endif // KMP_REVERSE_HYPER_BAR
+ {
+ if (child_tid >= num_threads) continue; // Child doesn't exist so keep going
+ else {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+#if KMP_CACHE_MANAGE
+ register kmp_uint32 next_child_tid = child_tid - (1 << level);
+ // Prefetch next thread's go count
+# ifdef KMP_REVERSE_HYPER_BAR
+ if (child-1 >= 1 && next_child_tid < num_threads)
+# else
+ if (child+1 < branch_factor && next_child_tid < num_threads)
+# endif // KMP_REVERSE_HYPER_BAR
+ KMP_CACHE_PREFETCH(&other_threads[next_child_tid]->th.th_bar[bt].bb.b_go);
+#endif /* KMP_CACHE_MANAGE */
+
+#if KMP_BARRIER_ICV_PUSH
+ if (propagate_icvs) // push my fixed ICVs to my child
+ copy_icvs(&child_bar->th_fixed_icvs, &thr_bar->th_fixed_icvs);
+#endif // KMP_BARRIER_ICV_PUSH
+
+ KA_TRACE(20, ("__kmp_hyper_barrier_release: T#%d(%d:%d) releasing T#%d(%d:%u)"
+ "go(%p): %u => %u\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(child_tid, team), team->t.t_id,
+ child_tid, &child_bar->b_go, child_bar->b_go,
+ child_bar->b_go + KMP_BARRIER_STATE_BUMP));
+ // Release child from barrier
+ kmp_flag_64 flag(&child_bar->b_go, child_thr);
+ flag.release();
+ }
+ }
+ }
+#if KMP_BARRIER_ICV_PUSH
+ if (propagate_icvs && !KMP_MASTER_TID(tid)) { // copy ICVs locally to final dest
+ __kmp_init_implicit_task(team->t.t_ident, team->t.t_threads[tid], team, tid, FALSE);
+ copy_icvs(&team->t.t_implicit_task_taskdata[tid].td_icvs, &thr_bar->th_fixed_icvs);
+ }
+#endif
+ KA_TRACE(20, ("__kmp_hyper_barrier_release: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+// Hierarchical Barrier
+
+// Initialize thread barrier data
+/* Initializes/re-initializes the hierarchical barrier data stored on a thread. Performs the
+ minimum amount of initialization required based on how the team has changed. Returns true if
+ leaf children will require both on-core and traditional wake-up mechanisms. For example, if the
+ team size increases, threads already in the team will respond to on-core wakeup on their parent
+ thread, but threads newly added to the team will only be listening on the their local b_go. */
+static bool
+__kmp_init_hierarchical_barrier_thread(enum barrier_type bt, kmp_bstate_t *thr_bar, kmp_uint32 nproc,
+ int gtid, int tid, kmp_team_t *team)
+{
+ // Checks to determine if (re-)initialization is needed
+ bool uninitialized = thr_bar->team == NULL;
+ bool team_changed = team != thr_bar->team;
+ bool team_sz_changed = nproc != thr_bar->nproc;
+ bool tid_changed = tid != thr_bar->old_tid;
+ bool retval = false;
+
+ if (uninitialized || team_sz_changed) {
+ __kmp_get_hierarchy(nproc, thr_bar);
+ }
+
+ if (uninitialized || team_sz_changed || tid_changed) {
+ thr_bar->my_level = thr_bar->depth-1; // default for master
+ thr_bar->parent_tid = -1; // default for master
+ if (!KMP_MASTER_TID(tid)) { // if not master, find parent thread in hierarchy
+ kmp_uint32 d=0;
+ while (d<thr_bar->depth) { // find parent based on level of thread in hierarchy, and note level
+ kmp_uint32 rem;
+ if (d == thr_bar->depth-2) { // reached level right below the master
+ thr_bar->parent_tid = 0;
+ thr_bar->my_level = d;
+ break;
+ }
+ else if ((rem = tid%thr_bar->skip_per_level[d+1]) != 0) { // TODO: can we make this op faster?
+ // thread is not a subtree root at next level, so this is max
+ thr_bar->parent_tid = tid - rem;
+ thr_bar->my_level = d;
+ break;
+ }
+ ++d;
+ }
+ }
+ thr_bar->offset = 7-(tid-thr_bar->parent_tid-1);
+ thr_bar->old_tid = tid;
+ thr_bar->wait_flag = KMP_BARRIER_NOT_WAITING;
+ thr_bar->team = team;
+ thr_bar->parent_bar = &team->t.t_threads[thr_bar->parent_tid]->th.th_bar[bt].bb;
+ }
+ if (uninitialized || team_changed || tid_changed) {
+ thr_bar->team = team;
+ thr_bar->parent_bar = &team->t.t_threads[thr_bar->parent_tid]->th.th_bar[bt].bb;
+ retval = true;
+ }
+ if (uninitialized || team_sz_changed || tid_changed) {
+ thr_bar->nproc = nproc;
+ thr_bar->leaf_kids = thr_bar->base_leaf_kids;
+ if (thr_bar->my_level == 0) thr_bar->leaf_kids=0;
+ if (thr_bar->leaf_kids && (kmp_uint32)tid+thr_bar->leaf_kids+1 > nproc)
+ thr_bar->leaf_kids = nproc - tid - 1;
+ thr_bar->leaf_state = 0;
+ for (int i=0; i<thr_bar->leaf_kids; ++i) ((char *)&(thr_bar->leaf_state))[7-i] = 1;
+ }
+ return retval;
+}
+
+static void
+__kmp_hierarchical_barrier_gather(enum barrier_type bt, kmp_info_t *this_thr,
+ int gtid, int tid, void (*reduce) (void *, void *)
+ USE_ITT_BUILD_ARG(void * itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_hier_gather);
+ register kmp_team_t *team = this_thr->th.th_team;
+ register kmp_bstate_t *thr_bar = & this_thr->th.th_bar[bt].bb;
+ register kmp_uint32 nproc = this_thr->th.th_team_nproc;
+ register kmp_info_t **other_threads = team->t.t_threads;
+ register kmp_uint64 new_state;
+
+ int level = team->t.t_level;
+#if OMP_40_ENABLED
+ if (other_threads[0]->th.th_teams_microtask) // are we inside the teams construct?
+ if (this_thr->th.th_teams_size.nteams > 1)
+ ++level; // level was not increased in teams construct for team_of_masters
+#endif
+ if (level == 1) thr_bar->use_oncore_barrier = 1;
+ else thr_bar->use_oncore_barrier = 0; // Do not use oncore barrier when nested
+
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) enter for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+ KMP_DEBUG_ASSERT(this_thr == other_threads[this_thr->th.th_info.ds.ds_tid]);
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - save arrive time to the thread
+ if(__kmp_forkjoin_frames_mode == 3 || __kmp_forkjoin_frames_mode == 2) {
+ this_thr->th.th_bar_arrive_time = __itt_get_timestamp();
+ }
+#endif
+
+ (void)__kmp_init_hierarchical_barrier_thread(bt, thr_bar, nproc, gtid, tid, team);
+
+ if (thr_bar->my_level) { // not a leaf (my_level==0 means leaf)
+ register kmp_int32 child_tid;
+ new_state = (kmp_uint64)team->t.t_bar[bt].b_arrived + KMP_BARRIER_STATE_BUMP;
+ if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME && thr_bar->use_oncore_barrier) {
+ if (thr_bar->leaf_kids) { // First, wait for leaf children to check-in on my b_arrived flag
+ kmp_uint64 leaf_state = KMP_MASTER_TID(tid) ? thr_bar->b_arrived | thr_bar->leaf_state : team->t.t_bar[bt].b_arrived | thr_bar->leaf_state;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) waiting for leaf kids\n",
+ gtid, team->t.t_id, tid));
+ kmp_flag_64 flag(&thr_bar->b_arrived, leaf_state);
+ flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ if (reduce) {
+ for (child_tid=tid+1; child_tid<=tid+thr_bar->leaf_kids; ++child_tid) {
+ KA_TRACE(100, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) += T#%d(%d:%d)\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid));
+ (*reduce)(this_thr->th.th_local.reduce_data, other_threads[child_tid]->th.th_local.reduce_data);
+ }
+ }
+ (void) KMP_TEST_THEN_AND64((volatile kmp_int64 *)&thr_bar->b_arrived, ~(thr_bar->leaf_state)); // clear leaf_state bits
+ }
+ // Next, wait for higher level children on each child's b_arrived flag
+ for (kmp_uint32 d=1; d<thr_bar->my_level; ++d) { // gather lowest level threads first, but skip 0
+ kmp_uint32 last = tid+thr_bar->skip_per_level[d+1], skip = thr_bar->skip_per_level[d];
+ if (last > nproc) last = nproc;
+ for (child_tid=tid+skip; child_tid<(int)last; child_tid+=skip) {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) wait T#%d(%d:%d) "
+ "arrived(%p) == %llu\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid, &child_bar->b_arrived, new_state));
+ kmp_flag_64 flag(&child_bar->b_arrived, new_state);
+ flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ if (reduce) {
+ KA_TRACE(100, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) += T#%d(%d:%d)\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid));
+ (*reduce)(this_thr->th.th_local.reduce_data, child_thr->th.th_local.reduce_data);
+ }
+ }
+ }
+ }
+ else { // Blocktime is not infinite
+ for (kmp_uint32 d=0; d<thr_bar->my_level; ++d) { // Gather lowest level threads first
+ kmp_uint32 last = tid+thr_bar->skip_per_level[d+1], skip = thr_bar->skip_per_level[d];
+ if (last > nproc) last = nproc;
+ for (child_tid=tid+skip; child_tid<(int)last; child_tid+=skip) {
+ register kmp_info_t *child_thr = other_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) wait T#%d(%d:%d) "
+ "arrived(%p) == %llu\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid, &child_bar->b_arrived, new_state));
+ kmp_flag_64 flag(&child_bar->b_arrived, new_state);
+ flag.wait(this_thr, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ if (reduce) {
+ KA_TRACE(100, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) += T#%d(%d:%d)\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid));
+ (*reduce)(this_thr->th.th_local.reduce_data, child_thr->th.th_local.reduce_data);
+ }
+ }
+ }
+ }
+ }
+ // All subordinates are gathered; now release parent if not master thread
+
+ if (!KMP_MASTER_TID(tid)) { // worker threads release parent in hierarchy
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) releasing T#%d(%d:%d) "
+ "arrived(%p): %llu => %llu\n", gtid, team->t.t_id, tid,
+ __kmp_gtid_from_tid(thr_bar->parent_tid, team), team->t.t_id, thr_bar->parent_tid,
+ &thr_bar->b_arrived, thr_bar->b_arrived, thr_bar->b_arrived+KMP_BARRIER_STATE_BUMP));
+ /* Mark arrival to parent: After performing this write, a worker thread may not assume that
+ the team is valid any more - it could be deallocated by the master thread at any time. */
+ if (thr_bar->my_level || __kmp_dflt_blocktime != KMP_MAX_BLOCKTIME
+ || !thr_bar->use_oncore_barrier) { // Parent is waiting on my b_arrived flag; release it
+ kmp_flag_64 flag(&thr_bar->b_arrived, other_threads[thr_bar->parent_tid]);
+ flag.release();
+ }
+ else { // Leaf does special release on the "offset" bits of parent's b_arrived flag
+ thr_bar->b_arrived = team->t.t_bar[bt].b_arrived + KMP_BARRIER_STATE_BUMP;
+ kmp_flag_oncore flag(&thr_bar->parent_bar->b_arrived, thr_bar->offset);
+ flag.set_waiter(other_threads[thr_bar->parent_tid]);
+ flag.release();
+ }
+ } else { // Master thread needs to update the team's b_arrived value
+ team->t.t_bar[bt].b_arrived = new_state;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) set team %d arrived(%p) = %llu\n",
+ gtid, team->t.t_id, tid, team->t.t_id, &team->t.t_bar[bt].b_arrived, team->t.t_bar[bt].b_arrived));
+ }
+ // Is the team access below unsafe or just technically invalid?
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_gather: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+static void
+__kmp_hierarchical_barrier_release(enum barrier_type bt, kmp_info_t *this_thr, int gtid, int tid,
+ int propagate_icvs
+ USE_ITT_BUILD_ARG(void * itt_sync_obj) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_hier_release);
+ register kmp_team_t *team;
+ register kmp_bstate_t *thr_bar = &this_thr->th.th_bar[bt].bb;
+ register kmp_uint32 nproc;
+ bool team_change = false; // indicates on-core barrier shouldn't be used
+
+ if (KMP_MASTER_TID(tid)) {
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) master entered barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+ }
+ else { // Worker threads
+ // Wait for parent thread to release me
+ if (!thr_bar->use_oncore_barrier || __kmp_dflt_blocktime != KMP_MAX_BLOCKTIME
+ || thr_bar->my_level != 0 || thr_bar->team == NULL) {
+ // Use traditional method of waiting on my own b_go flag
+ thr_bar->wait_flag = KMP_BARRIER_OWN_FLAG;
+ kmp_flag_64 flag(&thr_bar->b_go, KMP_BARRIER_STATE_BUMP);
+ flag.wait(this_thr, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ TCW_8(thr_bar->b_go, KMP_INIT_BARRIER_STATE); // Reset my b_go flag for next time
+ }
+ else { // Thread barrier data is initialized, this is a leaf, blocktime is infinite, not nested
+ // Wait on my "offset" bits on parent's b_go flag
+ thr_bar->wait_flag = KMP_BARRIER_PARENT_FLAG;
+ kmp_flag_oncore flag(&thr_bar->parent_bar->b_go, KMP_BARRIER_STATE_BUMP, thr_bar->offset,
+ bt, this_thr
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ flag.wait(this_thr, TRUE);
+ if (thr_bar->wait_flag == KMP_BARRIER_SWITCHING) { // Thread was switched to own b_go
+ TCW_8(thr_bar->b_go, KMP_INIT_BARRIER_STATE); // Reset my b_go flag for next time
+ }
+ else { // Reset my bits on parent's b_go flag
+ ((char*)&(thr_bar->parent_bar->b_go))[thr_bar->offset] = 0;
+ }
+ }
+ thr_bar->wait_flag = KMP_BARRIER_NOT_WAITING;
+ // Early exit for reaping threads releasing forkjoin barrier
+ if (bt == bs_forkjoin_barrier && TCR_4(__kmp_global.g.g_done))
+ return;
+ // The worker thread may now assume that the team is valid.
+ team = __kmp_threads[gtid]->th.th_team;
+ KMP_DEBUG_ASSERT(team != NULL);
+ tid = __kmp_tid_from_gtid(gtid);
+
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) set go(%p) = %u\n",
+ gtid, team->t.t_id, tid, &thr_bar->b_go, KMP_INIT_BARRIER_STATE));
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }
+
+ nproc = this_thr->th.th_team_nproc;
+ int level = team->t.t_level;
+#if OMP_40_ENABLED
+ if (team->t.t_threads[0]->th.th_teams_microtask ) { // are we inside the teams construct?
+ if (team->t.t_pkfn != (microtask_t)__kmp_teams_master && this_thr->th.th_teams_level == level)
+ ++level; // level was not increased in teams construct for team_of_workers
+ if( this_thr->th.th_teams_size.nteams > 1 )
+ ++level; // level was not increased in teams construct for team_of_masters
+ }
+#endif
+ if (level == 1) thr_bar->use_oncore_barrier = 1;
+ else thr_bar->use_oncore_barrier = 0; // Do not use oncore barrier when nested
+
+ // If the team size has increased, we still communicate with old leaves via oncore barrier.
+ unsigned short int old_leaf_kids = thr_bar->leaf_kids;
+ kmp_uint64 old_leaf_state = thr_bar->leaf_state;
+ team_change = __kmp_init_hierarchical_barrier_thread(bt, thr_bar, nproc, gtid, tid, team);
+ // But if the entire team changes, we won't use oncore barrier at all
+ if (team_change) old_leaf_kids = 0;
+
+#if KMP_BARRIER_ICV_PUSH
+ if (propagate_icvs) {
+ __kmp_init_implicit_task(team->t.t_ident, team->t.t_threads[tid], team, tid, FALSE);
+ if (KMP_MASTER_TID(tid)) { // master already has copy in final destination; copy
+ copy_icvs(&thr_bar->th_fixed_icvs, &team->t.t_implicit_task_taskdata[tid].td_icvs);
+ }
+ else if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME && thr_bar->use_oncore_barrier) { // optimization for inf blocktime
+ if (!thr_bar->my_level) // I'm a leaf in the hierarchy (my_level==0)
+ // leaves (on-core children) pull parent's fixed ICVs directly to local ICV store
+ copy_icvs(&team->t.t_implicit_task_taskdata[tid].td_icvs,
+ &thr_bar->parent_bar->th_fixed_icvs);
+ // non-leaves will get ICVs piggybacked with b_go via NGO store
+ }
+ else { // blocktime is not infinite; pull ICVs from parent's fixed ICVs
+ if (thr_bar->my_level) // not a leaf; copy ICVs to my fixed ICVs child can access
+ copy_icvs(&thr_bar->th_fixed_icvs, &thr_bar->parent_bar->th_fixed_icvs);
+ else // leaves copy parent's fixed ICVs directly to local ICV store
+ copy_icvs(&team->t.t_implicit_task_taskdata[tid].td_icvs,
+ &thr_bar->parent_bar->th_fixed_icvs);
+ }
+ }
+#endif // KMP_BARRIER_ICV_PUSH
+
+ // Now, release my children
+ if (thr_bar->my_level) { // not a leaf
+ register kmp_int32 child_tid;
+ kmp_uint32 last;
+ if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME && thr_bar->use_oncore_barrier) {
+ if (KMP_MASTER_TID(tid)) { // do a flat release
+ // Set local b_go to bump children via NGO store of the cache line containing IVCs and b_go.
+ thr_bar->b_go = KMP_BARRIER_STATE_BUMP;
+ // Use ngo stores if available; b_go piggybacks in the last 8 bytes of the cache line
+ ngo_load(&thr_bar->th_fixed_icvs);
+ // This loops over all the threads skipping only the leaf nodes in the hierarchy
+ for (child_tid=thr_bar->skip_per_level[1]; child_tid<(int)nproc; child_tid+=thr_bar->skip_per_level[1]) {
+ register kmp_bstate_t *child_bar = &team->t.t_threads[child_tid]->th.th_bar[bt].bb;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) releasing T#%d(%d:%d)"
+ " go(%p): %u => %u\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid, &child_bar->b_go, child_bar->b_go,
+ child_bar->b_go + KMP_BARRIER_STATE_BUMP));
+ // Use ngo store (if available) to both store ICVs and release child via child's b_go
+ ngo_store_go(&child_bar->th_fixed_icvs, &thr_bar->th_fixed_icvs);
+ }
+ ngo_sync();
+ }
+ TCW_8(thr_bar->b_go, KMP_INIT_BARRIER_STATE); // Reset my b_go flag for next time
+ // Now, release leaf children
+ if (thr_bar->leaf_kids) { // if there are any
+ // We test team_change on the off-chance that the level 1 team changed.
+ if (team_change || old_leaf_kids < thr_bar->leaf_kids) { // some old leaf_kids, some new
+ if (old_leaf_kids) { // release old leaf kids
+ thr_bar->b_go |= old_leaf_state;
+ }
+ // Release new leaf kids
+ last = tid+thr_bar->skip_per_level[1];
+ if (last > nproc) last = nproc;
+ for (child_tid=tid+1+old_leaf_kids; child_tid<(int)last; ++child_tid) { // skip_per_level[0]=1
+ register kmp_info_t *child_thr = team->t.t_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) releasing"
+ " T#%d(%d:%d) go(%p): %u => %u\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid, &child_bar->b_go, child_bar->b_go,
+ child_bar->b_go + KMP_BARRIER_STATE_BUMP));
+ // Release child using child's b_go flag
+ kmp_flag_64 flag(&child_bar->b_go, child_thr);
+ flag.release();
+ }
+ }
+ else { // Release all children at once with leaf_state bits on my own b_go flag
+ thr_bar->b_go |= thr_bar->leaf_state;
+ }
+ }
+ }
+ else { // Blocktime is not infinite; do a simple hierarchical release
+ for (int d=thr_bar->my_level-1; d>=0; --d) { // Release highest level threads first
+ last = tid+thr_bar->skip_per_level[d+1];
+ kmp_uint32 skip = thr_bar->skip_per_level[d];
+ if (last > nproc) last = nproc;
+ for (child_tid=tid+skip; child_tid<(int)last; child_tid+=skip) {
+ register kmp_info_t *child_thr = team->t.t_threads[child_tid];
+ register kmp_bstate_t *child_bar = &child_thr->th.th_bar[bt].bb;
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) releasing T#%d(%d:%d)"
+ " go(%p): %u => %u\n",
+ gtid, team->t.t_id, tid, __kmp_gtid_from_tid(child_tid, team),
+ team->t.t_id, child_tid, &child_bar->b_go, child_bar->b_go,
+ child_bar->b_go + KMP_BARRIER_STATE_BUMP));
+ // Release child using child's b_go flag
+ kmp_flag_64 flag(&child_bar->b_go, child_thr);
+ flag.release();
+ }
+ }
+ }
+#if KMP_BARRIER_ICV_PUSH
+ if (propagate_icvs && !KMP_MASTER_TID(tid)) // non-leaves copy ICVs from fixed ICVs to local dest
+ copy_icvs(&team->t.t_implicit_task_taskdata[tid].td_icvs, &thr_bar->th_fixed_icvs);
+#endif // KMP_BARRIER_ICV_PUSH
+ }
+ KA_TRACE(20, ("__kmp_hierarchical_barrier_release: T#%d(%d:%d) exit for barrier type %d\n",
+ gtid, team->t.t_id, tid, bt));
+}
+
+// ---------------------------- End of Barrier Algorithms ----------------------------
+
+// Internal function to do a barrier.
+/* If is_split is true, do a split barrier, otherwise, do a plain barrier
+ If reduce is non-NULL, do a split reduction barrier, otherwise, do a split barrier
+ Returns 0 if master thread, 1 if worker thread. */
+int
+__kmp_barrier(enum barrier_type bt, int gtid, int is_split, size_t reduce_size,
+ void *reduce_data, void (*reduce)(void *, void *))
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_barrier);
+ KMP_SET_THREAD_STATE_BLOCK(PLAIN_BARRIER);
+ KMP_TIME_PARTITIONED_BLOCK(OMP_plain_barrier);
+ register int tid = __kmp_tid_from_gtid(gtid);
+ register kmp_info_t *this_thr = __kmp_threads[gtid];
+ register kmp_team_t *team = this_thr->th.th_team;
+ register int status = 0;
+ ident_t *loc = __kmp_threads[gtid]->th.th_ident;
+#if OMPT_SUPPORT
+ ompt_task_id_t my_task_id;
+ ompt_parallel_id_t my_parallel_id;
+#endif
+
+ KA_TRACE(15, ("__kmp_barrier: T#%d(%d:%d) has arrived\n",
+ gtid, __kmp_team_from_gtid(gtid)->t.t_id, __kmp_tid_from_gtid(gtid)));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_BLAME
+ my_task_id = team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id;
+ my_parallel_id = team->t.ompt_team_info.parallel_id;
+
+#if OMPT_TRACE
+ if (this_thr->th.ompt_thread_info.state == ompt_state_wait_single) {
+ if (ompt_callbacks.ompt_callback(ompt_event_single_others_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_single_others_end)(
+ my_parallel_id, my_task_id);
+ }
+ }
+#endif
+ if (ompt_callbacks.ompt_callback(ompt_event_barrier_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_barrier_begin)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+ // It is OK to report the barrier state after the barrier begin callback.
+ // According to the OMPT specification, a compliant implementation may
+ // even delay reporting this state until the barrier begins to wait.
+ this_thr->th.ompt_thread_info.state = ompt_state_wait_barrier;
+ }
+#endif
+
+ if (! team->t.t_serialized) {
+#if USE_ITT_BUILD
+ // This value will be used in itt notify events below.
+ void *itt_sync_obj = NULL;
+# if USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bt, 1);
+# endif
+#endif /* USE_ITT_BUILD */
+ if (__kmp_tasking_mode == tskm_extra_barrier) {
+ __kmp_tasking_barrier(team, this_thr, gtid);
+ KA_TRACE(15, ("__kmp_barrier: T#%d(%d:%d) past tasking barrier\n",
+ gtid, __kmp_team_from_gtid(gtid)->t.t_id, __kmp_tid_from_gtid(gtid)));
+ }
+
+ /* Copy the blocktime info to the thread, where __kmp_wait_template() can access it when
+ the team struct is not guaranteed to exist. */
+ // See note about the corresponding code in __kmp_join_barrier() being performance-critical.
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) {
+ this_thr->th.th_team_bt_intervals = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_intervals;
+ this_thr->th.th_team_bt_set = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_set;
+ }
+
+#if USE_ITT_BUILD
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_starting(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+#if USE_DEBUGGER
+ // Let the debugger know: the thread arrived to the barrier and waiting.
+ if (KMP_MASTER_TID(tid)) { // Master counter is stored in team structure.
+ team->t.t_bar[bt].b_master_arrived += 1;
+ } else {
+ this_thr->th.th_bar[bt].bb.b_worker_arrived += 1;
+ } // if
+#endif /* USE_DEBUGGER */
+ if (reduce != NULL) {
+ //KMP_DEBUG_ASSERT( is_split == TRUE ); // #C69956
+ this_thr->th.th_local.reduce_data = reduce_data;
+ }
+
+ if (KMP_MASTER_TID(tid) && __kmp_tasking_mode != tskm_immediate_exec)
+ __kmp_task_team_setup(this_thr, team, 0); // use 0 to only setup the current team if nthreads > 1
+
+ switch (__kmp_barrier_gather_pattern[bt]) {
+ case bp_hyper_bar: {
+ KMP_ASSERT(__kmp_barrier_gather_branch_bits[bt]); // don't set branch bits to 0; use linear
+ __kmp_hyper_barrier_gather(bt, this_thr, gtid, tid, reduce
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_hierarchical_bar: {
+ __kmp_hierarchical_barrier_gather(bt, this_thr, gtid, tid, reduce
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ break;
+ }
+ case bp_tree_bar: {
+ KMP_ASSERT(__kmp_barrier_gather_branch_bits[bt]); // don't set branch bits to 0; use linear
+ __kmp_tree_barrier_gather(bt, this_thr, gtid, tid, reduce
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ default: {
+ __kmp_linear_barrier_gather(bt, this_thr, gtid, tid, reduce
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+ }
+
+ KMP_MB();
+
+ if (KMP_MASTER_TID(tid)) {
+ status = 0;
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_wait(this_thr, team
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+#if USE_DEBUGGER
+ // Let the debugger know: All threads are arrived and starting leaving the barrier.
+ team->t.t_bar[bt].b_team_arrived += 1;
+#endif
+
+#if USE_ITT_BUILD
+ /* TODO: In case of split reduction barrier, master thread may send acquired event early,
+ before the final summation into the shared variable is done (final summation can be a
+ long operation for array reductions). */
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_middle(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier - report frame end (only if active_level == 1)
+ if ((__itt_frame_submit_v3_ptr || KMP_ITT_DEBUG) && __kmp_forkjoin_frames_mode &&
+#if OMP_40_ENABLED
+ this_thr->th.th_teams_microtask == NULL &&
+#endif
+ team->t.t_active_level == 1)
+ {
+ kmp_uint64 cur_time = __itt_get_timestamp();
+ kmp_info_t **other_threads = team->t.t_threads;
+ int nproc = this_thr->th.th_team_nproc;
+ int i;
+ switch(__kmp_forkjoin_frames_mode) {
+ case 1:
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_frame_time, cur_time, 0, loc, nproc);
+ this_thr->th.th_frame_time = cur_time;
+ break;
+ case 2: // AC 2015-01-19: currently does not work for hierarchical (to be fixed)
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_bar_min_time, cur_time, 1, loc, nproc);
+ break;
+ case 3:
+ if( __itt_metadata_add_ptr ) {
+ // Initialize with master's wait time
+ kmp_uint64 delta = cur_time - this_thr->th.th_bar_arrive_time;
+ // Set arrive time to zero to be able to check it in __kmp_invoke_task(); the same is done inside the loop below
+ this_thr->th.th_bar_arrive_time = 0;
+ for (i=1; i<nproc; ++i) {
+ delta += ( cur_time - other_threads[i]->th.th_bar_arrive_time );
+ other_threads[i]->th.th_bar_arrive_time = 0;
+ }
+ __kmp_itt_metadata_imbalance(gtid, this_thr->th.th_frame_time, cur_time, delta, (kmp_uint64)( reduce != NULL));
+ }
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_frame_time, cur_time, 0, loc, nproc);
+ this_thr->th.th_frame_time = cur_time;
+ break;
+ }
+ }
+#endif /* USE_ITT_BUILD */
+ } else {
+ status = 1;
+#if USE_ITT_BUILD
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_middle(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+ }
+ if (status == 1 || ! is_split) {
+ switch (__kmp_barrier_release_pattern[bt]) {
+ case bp_hyper_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bt]);
+ __kmp_hyper_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_hierarchical_bar: {
+ __kmp_hierarchical_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_tree_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bt]);
+ __kmp_tree_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ default: {
+ __kmp_linear_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+ }
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_sync(this_thr, team);
+ }
+ }
+
+#if USE_ITT_BUILD
+ /* GEH: TODO: Move this under if-condition above and also include in
+ __kmp_end_split_barrier(). This will more accurately represent the actual release time
+ of the threads for split barriers. */
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_finished(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+ } else { // Team is serialized.
+ status = 0;
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+#if OMP_45_ENABLED
+ if ( this_thr->th.th_task_team != NULL ) {
+ void *itt_sync_obj = NULL;
+#if USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG) {
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bt, 1);
+ __kmp_itt_barrier_starting(gtid, itt_sync_obj);
+ }
+#endif
+
+ KMP_DEBUG_ASSERT(this_thr->th.th_task_team->tt.tt_found_proxy_tasks == TRUE);
+ __kmp_task_team_wait(this_thr, team
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ __kmp_task_team_setup(this_thr, team, 0);
+
+#if USE_ITT_BUILD
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_finished(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+ }
+#else
+ // The task team should be NULL for serialized code (tasks will be executed immediately)
+ KMP_DEBUG_ASSERT(team->t.t_task_team[this_thr->th.th_task_state] == NULL);
+ KMP_DEBUG_ASSERT(this_thr->th.th_task_team == NULL);
+#endif
+ }
+ }
+ KA_TRACE(15, ("__kmp_barrier: T#%d(%d:%d) is leaving with return value %d\n",
+ gtid, __kmp_team_from_gtid(gtid)->t.t_id, __kmp_tid_from_gtid(gtid), status));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_BLAME
+ if (ompt_callbacks.ompt_callback(ompt_event_barrier_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_barrier_end)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+ this_thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+ }
+#endif
+
+ return status;
+}
+
+
+void
+__kmp_end_split_barrier(enum barrier_type bt, int gtid)
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_end_split_barrier);
+ int tid = __kmp_tid_from_gtid(gtid);
+ kmp_info_t *this_thr = __kmp_threads[gtid];
+ kmp_team_t *team = this_thr->th.th_team;
+
+ if (!team->t.t_serialized) {
+ if (KMP_MASTER_GTID(gtid)) {
+ switch (__kmp_barrier_release_pattern[bt]) {
+ case bp_hyper_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bt]);
+ __kmp_hyper_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(NULL) );
+ break;
+ }
+ case bp_hierarchical_bar: {
+ __kmp_hierarchical_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(NULL));
+ break;
+ }
+ case bp_tree_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bt]);
+ __kmp_tree_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(NULL) );
+ break;
+ }
+ default: {
+ __kmp_linear_barrier_release(bt, this_thr, gtid, tid, FALSE
+ USE_ITT_BUILD_ARG(NULL) );
+ }
+ }
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_sync(this_thr, team);
+ } // if
+ }
+ }
+}
+
+
+void
+__kmp_join_barrier(int gtid)
+{
+ KMP_TIME_PARTITIONED_BLOCK(OMP_fork_join_barrier);
+ KMP_SET_THREAD_STATE_BLOCK(FORK_JOIN_BARRIER);
+ KMP_TIME_DEVELOPER_BLOCK(KMP_join_barrier);
+ register kmp_info_t *this_thr = __kmp_threads[gtid];
+ register kmp_team_t *team;
+ register kmp_uint nproc;
+ kmp_info_t *master_thread;
+ int tid;
+#ifdef KMP_DEBUG
+ int team_id;
+#endif /* KMP_DEBUG */
+#if USE_ITT_BUILD
+ void *itt_sync_obj = NULL;
+# if USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG) // Don't call routine without need
+ // Get object created at fork_barrier
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+# endif
+#endif /* USE_ITT_BUILD */
+ KMP_MB();
+
+ // Get current info
+ team = this_thr->th.th_team;
+ nproc = this_thr->th.th_team_nproc;
+ KMP_DEBUG_ASSERT((int)nproc == team->t.t_nproc);
+ tid = __kmp_tid_from_gtid(gtid);
+#ifdef KMP_DEBUG
+ team_id = team->t.t_id;
+#endif /* KMP_DEBUG */
+ master_thread = this_thr->th.th_team_master;
+#ifdef KMP_DEBUG
+ if (master_thread != team->t.t_threads[0]) {
+ __kmp_print_structure();
+ }
+#endif /* KMP_DEBUG */
+ KMP_DEBUG_ASSERT(master_thread == team->t.t_threads[0]);
+ KMP_MB();
+
+ // Verify state
+ KMP_DEBUG_ASSERT(__kmp_threads && __kmp_threads[gtid]);
+ KMP_DEBUG_ASSERT(TCR_PTR(this_thr->th.th_team));
+ KMP_DEBUG_ASSERT(TCR_PTR(this_thr->th.th_root));
+ KMP_DEBUG_ASSERT(this_thr == team->t.t_threads[tid]);
+ KA_TRACE(10, ("__kmp_join_barrier: T#%d(%d:%d) arrived at join barrier\n", gtid, team_id, tid));
+
+#if OMPT_SUPPORT
+#if OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_barrier_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_barrier_begin)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+#endif
+ this_thr->th.ompt_thread_info.state = ompt_state_wait_barrier;
+#endif
+
+ if (__kmp_tasking_mode == tskm_extra_barrier) {
+ __kmp_tasking_barrier(team, this_thr, gtid);
+ KA_TRACE(10, ("__kmp_join_barrier: T#%d(%d:%d) past taking barrier\n", gtid, team_id, tid));
+ }
+# ifdef KMP_DEBUG
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ KA_TRACE(20, ( "__kmp_join_barrier: T#%d, old team = %d, old task_team = %p, th_task_team = %p\n",
+ __kmp_gtid_from_thread(this_thr), team_id, team->t.t_task_team[this_thr->th.th_task_state],
+ this_thr->th.th_task_team));
+ KMP_DEBUG_ASSERT(this_thr->th.th_task_team == team->t.t_task_team[this_thr->th.th_task_state]);
+ }
+# endif /* KMP_DEBUG */
+
+ /* Copy the blocktime info to the thread, where __kmp_wait_template() can access it when the
+ team struct is not guaranteed to exist. Doing these loads causes a cache miss slows
+ down EPCC parallel by 2x. As a workaround, we do not perform the copy if blocktime=infinite,
+ since the values are not used by __kmp_wait_template() in that case. */
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) {
+ this_thr->th.th_team_bt_intervals = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_intervals;
+ this_thr->th.th_team_bt_set = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_set;
+ }
+
+#if USE_ITT_BUILD
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_starting(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+
+ switch (__kmp_barrier_gather_pattern[bs_forkjoin_barrier]) {
+ case bp_hyper_bar: {
+ KMP_ASSERT(__kmp_barrier_gather_branch_bits[bs_forkjoin_barrier]);
+ __kmp_hyper_barrier_gather(bs_forkjoin_barrier, this_thr, gtid, tid, NULL
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_hierarchical_bar: {
+ __kmp_hierarchical_barrier_gather(bs_forkjoin_barrier, this_thr, gtid, tid, NULL
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_tree_bar: {
+ KMP_ASSERT(__kmp_barrier_gather_branch_bits[bs_forkjoin_barrier]);
+ __kmp_tree_barrier_gather(bs_forkjoin_barrier, this_thr, gtid, tid, NULL
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ default: {
+ __kmp_linear_barrier_gather(bs_forkjoin_barrier, this_thr, gtid, tid, NULL
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+ }
+
+ /* From this point on, the team data structure may be deallocated at any time by the
+ master thread - it is unsafe to reference it in any of the worker threads. Any per-team
+ data items that need to be referenced before the end of the barrier should be moved to
+ the kmp_task_team_t structs. */
+ if (KMP_MASTER_TID(tid)) {
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_wait(this_thr, team
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+#if KMP_STATS_ENABLED
+ // Have master thread flag the workers to indicate they are now waiting for
+ // next parallel region, Also wake them up so they switch their timers to idle.
+ for (int i=0; i<team->t.t_nproc; ++i) {
+ kmp_info_t* team_thread = team->t.t_threads[i];
+ if (team_thread == this_thr)
+ continue;
+ team_thread->th.th_stats->setIdleFlag();
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME && team_thread->th.th_sleep_loc != NULL)
+ __kmp_null_resume_wrapper(__kmp_gtid_from_thread(team_thread), team_thread->th.th_sleep_loc);
+ }
+#endif
+#if USE_ITT_BUILD
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_middle(gtid, itt_sync_obj);
+#endif /* USE_ITT_BUILD */
+
+# if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Join barrier - report frame end
+ if ((__itt_frame_submit_v3_ptr || KMP_ITT_DEBUG) && __kmp_forkjoin_frames_mode &&
+#if OMP_40_ENABLED
+ this_thr->th.th_teams_microtask == NULL &&
+#endif
+ team->t.t_active_level == 1)
+ {
+ kmp_uint64 cur_time = __itt_get_timestamp();
+ ident_t * loc = team->t.t_ident;
+ kmp_info_t **other_threads = team->t.t_threads;
+ int nproc = this_thr->th.th_team_nproc;
+ int i;
+ switch(__kmp_forkjoin_frames_mode) {
+ case 1:
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_frame_time, cur_time, 0, loc, nproc);
+ break;
+ case 2:
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_bar_min_time, cur_time, 1, loc, nproc);
+ break;
+ case 3:
+ if( __itt_metadata_add_ptr ) {
+ // Initialize with master's wait time
+ kmp_uint64 delta = cur_time - this_thr->th.th_bar_arrive_time;
+ // Set arrive time to zero to be able to check it in __kmp_invoke_task(); the same is done inside the loop below
+ this_thr->th.th_bar_arrive_time = 0;
+ for (i=1; i<nproc; ++i) {
+ delta += ( cur_time - other_threads[i]->th.th_bar_arrive_time );
+ other_threads[i]->th.th_bar_arrive_time = 0;
+ }
+ __kmp_itt_metadata_imbalance(gtid, this_thr->th.th_frame_time, cur_time, delta, 0);
+ }
+ __kmp_itt_frame_submit(gtid, this_thr->th.th_frame_time, cur_time, 0, loc, nproc);
+ this_thr->th.th_frame_time = cur_time;
+ break;
+ }
+ }
+# endif /* USE_ITT_BUILD */
+ }
+#if USE_ITT_BUILD
+ else {
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG)
+ __kmp_itt_barrier_middle(gtid, itt_sync_obj);
+ }
+#endif /* USE_ITT_BUILD */
+
+#if KMP_DEBUG
+ if (KMP_MASTER_TID(tid)) {
+ KA_TRACE(15, ("__kmp_join_barrier: T#%d(%d:%d) says all %d team threads arrived\n",
+ gtid, team_id, tid, nproc));
+ }
+#endif /* KMP_DEBUG */
+
+ // TODO now, mark worker threads as done so they may be disbanded
+ KMP_MB(); // Flush all pending memory write invalidates.
+ KA_TRACE(10, ("__kmp_join_barrier: T#%d(%d:%d) leaving\n", gtid, team_id, tid));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_BLAME
+ if (ompt_callbacks.ompt_callback(ompt_event_barrier_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_barrier_end)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+#endif
+
+ // return to default state
+ this_thr->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+}
+
+
+// TODO release worker threads' fork barriers as we are ready instead of all at once
+void
+__kmp_fork_barrier(int gtid, int tid)
+{
+ KMP_TIME_PARTITIONED_BLOCK(OMP_fork_join_barrier);
+ KMP_SET_THREAD_STATE_BLOCK(FORK_JOIN_BARRIER);
+ KMP_TIME_DEVELOPER_BLOCK(KMP_fork_barrier);
+ kmp_info_t *this_thr = __kmp_threads[gtid];
+ kmp_team_t *team = (tid == 0) ? this_thr->th.th_team : NULL;
+#if USE_ITT_BUILD
+ void * itt_sync_obj = NULL;
+#endif /* USE_ITT_BUILD */
+
+ KA_TRACE(10, ("__kmp_fork_barrier: T#%d(%d:%d) has arrived\n",
+ gtid, (team != NULL) ? team->t.t_id : -1, tid));
+
+ // th_team pointer only valid for master thread here
+ if (KMP_MASTER_TID(tid)) {
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG) {
+ // Create itt barrier object
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier, 1);
+ __kmp_itt_barrier_middle(gtid, itt_sync_obj); // Call acquired/releasing
+ }
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+
+#ifdef KMP_DEBUG
+ register kmp_info_t **other_threads = team->t.t_threads;
+ register int i;
+
+ // Verify state
+ KMP_MB();
+
+ for(i=1; i<team->t.t_nproc; ++i) {
+ KA_TRACE(500, ("__kmp_fork_barrier: T#%d(%d:0) checking T#%d(%d:%d) fork go == %u.\n",
+ gtid, team->t.t_id, other_threads[i]->th.th_info.ds.ds_gtid,
+ team->t.t_id, other_threads[i]->th.th_info.ds.ds_tid,
+ other_threads[i]->th.th_bar[bs_forkjoin_barrier].bb.b_go));
+ KMP_DEBUG_ASSERT((TCR_4(other_threads[i]->th.th_bar[bs_forkjoin_barrier].bb.b_go)
+ & ~(KMP_BARRIER_SLEEP_STATE))
+ == KMP_INIT_BARRIER_STATE);
+ KMP_DEBUG_ASSERT(other_threads[i]->th.th_team == team);
+ }
+#endif
+
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_setup(this_thr, team, 0); // 0 indicates setup current task team if nthreads > 1
+ }
+
+ /* The master thread may have changed its blocktime between the join barrier and the
+ fork barrier. Copy the blocktime info to the thread, where __kmp_wait_template() can
+ access it when the team struct is not guaranteed to exist. */
+ // See note about the corresponding code in __kmp_join_barrier() being performance-critical
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) {
+ this_thr->th.th_team_bt_intervals = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_intervals;
+ this_thr->th.th_team_bt_set = team->t.t_implicit_task_taskdata[tid].td_icvs.bt_set;
+ }
+ } // master
+
+ switch (__kmp_barrier_release_pattern[bs_forkjoin_barrier]) {
+ case bp_hyper_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bs_forkjoin_barrier]);
+ __kmp_hyper_barrier_release(bs_forkjoin_barrier, this_thr, gtid, tid, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_hierarchical_bar: {
+ __kmp_hierarchical_barrier_release(bs_forkjoin_barrier, this_thr, gtid, tid, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ case bp_tree_bar: {
+ KMP_ASSERT(__kmp_barrier_release_branch_bits[bs_forkjoin_barrier]);
+ __kmp_tree_barrier_release(bs_forkjoin_barrier, this_thr, gtid, tid, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ break;
+ }
+ default: {
+ __kmp_linear_barrier_release(bs_forkjoin_barrier, this_thr, gtid, tid, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+ }
+ }
+
+ // Early exit for reaping threads releasing forkjoin barrier
+ if (TCR_4(__kmp_global.g.g_done)) {
+ this_thr->th.th_task_team = NULL;
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG) {
+ if (!KMP_MASTER_TID(tid)) {
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+ if (itt_sync_obj)
+ __kmp_itt_barrier_finished(gtid, itt_sync_obj);
+ }
+ }
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ KA_TRACE(10, ("__kmp_fork_barrier: T#%d is leaving early\n", gtid));
+ return;
+ }
+
+ /* We can now assume that a valid team structure has been allocated by the master and
+ propagated to all worker threads. The current thread, however, may not be part of the
+ team, so we can't blindly assume that the team pointer is non-null. */
+ team = (kmp_team_t *)TCR_PTR(this_thr->th.th_team);
+ KMP_DEBUG_ASSERT(team != NULL);
+ tid = __kmp_tid_from_gtid(gtid);
+
+
+#if KMP_BARRIER_ICV_PULL
+ /* Master thread's copy of the ICVs was set up on the implicit taskdata in
+ __kmp_reinitialize_team. __kmp_fork_call() assumes the master thread's implicit task has
+ this data before this function is called. We cannot modify __kmp_fork_call() to look at
+ the fixed ICVs in the master's thread struct, because it is not always the case that the
+ threads arrays have been allocated when __kmp_fork_call() is executed. */
+ {
+ KMP_TIME_DEVELOPER_BLOCK(USER_icv_copy);
+ if (!KMP_MASTER_TID(tid)) { // master thread already has ICVs
+ // Copy the initial ICVs from the master's thread struct to the implicit task for this tid.
+ KA_TRACE(10, ("__kmp_fork_barrier: T#%d(%d) is PULLing ICVs\n", gtid, tid));
+ __kmp_init_implicit_task(team->t.t_ident, team->t.t_threads[tid], team, tid, FALSE);
+ copy_icvs(&team->t.t_implicit_task_taskdata[tid].td_icvs,
+ &team->t.t_threads[0]->th.th_bar[bs_forkjoin_barrier].bb.th_fixed_icvs);
+ }
+ }
+#endif // KMP_BARRIER_ICV_PULL
+
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ __kmp_task_team_sync(this_thr, team);
+ }
+
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ kmp_proc_bind_t proc_bind = team->t.t_proc_bind;
+ if (proc_bind == proc_bind_intel) {
+#endif
+#if KMP_AFFINITY_SUPPORTED
+ // Call dynamic affinity settings
+ if(__kmp_affinity_type == affinity_balanced && team->t.t_size_changed) {
+ __kmp_balanced_affinity(tid, team->t.t_nproc);
+ }
+#endif // KMP_AFFINITY_SUPPORTED
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ }
+ else if (proc_bind != proc_bind_false) {
+ if (this_thr->th.th_new_place == this_thr->th.th_current_place) {
+ KA_TRACE(100, ("__kmp_fork_barrier: T#%d already in correct place %d\n",
+ __kmp_gtid_from_thread(this_thr), this_thr->th.th_current_place));
+ }
+ else {
+ __kmp_affinity_set_place(gtid);
+ }
+ }
+#endif
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if (__itt_sync_create_ptr || KMP_ITT_DEBUG) {
+ if (!KMP_MASTER_TID(tid)) {
+ // Get correct barrier object
+ itt_sync_obj = __kmp_itt_barrier_object(gtid, bs_forkjoin_barrier);
+ __kmp_itt_barrier_finished(gtid, itt_sync_obj); // Workers call acquired
+ } // (prepare called inside barrier_release)
+ }
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ KA_TRACE(10, ("__kmp_fork_barrier: T#%d(%d:%d) is leaving\n", gtid, team->t.t_id, tid));
+}
+
+
+void
+__kmp_setup_icv_copy(kmp_team_t *team, int new_nproc, kmp_internal_control_t *new_icvs, ident_t *loc )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_setup_icv_copy);
+
+ KMP_DEBUG_ASSERT(team && new_nproc && new_icvs);
+ KMP_DEBUG_ASSERT((!TCR_4(__kmp_init_parallel)) || new_icvs->nproc);
+
+ /* Master thread's copy of the ICVs was set up on the implicit taskdata in
+ __kmp_reinitialize_team. __kmp_fork_call() assumes the master thread's implicit task has
+ this data before this function is called. */
+#if KMP_BARRIER_ICV_PULL
+ /* Copy ICVs to master's thread structure into th_fixed_icvs (which remains untouched), where
+ all of the worker threads can access them and make their own copies after the barrier. */
+ KMP_DEBUG_ASSERT(team->t.t_threads[0]); // The threads arrays should be allocated at this point
+ copy_icvs(&team->t.t_threads[0]->th.th_bar[bs_forkjoin_barrier].bb.th_fixed_icvs, new_icvs);
+ KF_TRACE(10, ("__kmp_setup_icv_copy: PULL: T#%d this_thread=%p team=%p\n",
+ 0, team->t.t_threads[0], team));
+#elif KMP_BARRIER_ICV_PUSH
+ // The ICVs will be propagated in the fork barrier, so nothing needs to be done here.
+ KF_TRACE(10, ("__kmp_setup_icv_copy: PUSH: T#%d this_thread=%p team=%p\n",
+ 0, team->t.t_threads[0], team));
+#else
+ // Copy the ICVs to each of the non-master threads. This takes O(nthreads) time.
+ ngo_load(new_icvs);
+ KMP_DEBUG_ASSERT(team->t.t_threads[0]); // The threads arrays should be allocated at this point
+ for (int f=1; f<new_nproc; ++f) { // Skip the master thread
+ // TODO: GEH - pass in better source location info since usually NULL here
+ KF_TRACE(10, ("__kmp_setup_icv_copy: LINEAR: T#%d this_thread=%p team=%p\n",
+ f, team->t.t_threads[f], team));
+ __kmp_init_implicit_task(loc, team->t.t_threads[f], team, f, FALSE);
+ ngo_store_icvs(&team->t.t_implicit_task_taskdata[f].td_icvs, new_icvs);
+ KF_TRACE(10, ("__kmp_setup_icv_copy: LINEAR: T#%d this_thread=%p team=%p\n",
+ f, team->t.t_threads[f], team));
+ }
+ ngo_sync();
+#endif // KMP_BARRIER_ICV_PULL
+}
diff --git a/final/runtime/src/kmp_cancel.cpp b/final/runtime/src/kmp_cancel.cpp
new file mode 100644
index 0000000..5416049
--- /dev/null
+++ b/final/runtime/src/kmp_cancel.cpp
@@ -0,0 +1,282 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+#include "kmp_str.h"
+
+#if OMP_40_ENABLED
+
+/*!
+@ingroup CANCELLATION
+@param loc_ref location of the original task directive
+@param gtid Global thread ID of encountering thread
+@param cncl_kind Cancellation kind (parallel, for, sections, taskgroup)
+
+@return returns true if the cancellation request has been activated and the execution thread
+needs to proceed to the end of the canceled region.
+
+Request cancellation of the binding OpenMP region.
+*/
+kmp_int32 __kmpc_cancel(ident_t* loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind) {
+ kmp_info_t *this_thr = __kmp_threads [ gtid ];
+
+ KC_TRACE( 10, ("__kmpc_cancel: T#%d request %d OMP_CANCELLATION=%d\n", gtid, cncl_kind, __kmp_omp_cancellation) );
+
+ KMP_DEBUG_ASSERT(cncl_kind != cancel_noreq);
+ KMP_DEBUG_ASSERT(cncl_kind == cancel_parallel || cncl_kind == cancel_loop ||
+ cncl_kind == cancel_sections || cncl_kind == cancel_taskgroup);
+ KMP_DEBUG_ASSERT(__kmp_get_gtid() == gtid);
+
+ if (__kmp_omp_cancellation) {
+ switch (cncl_kind) {
+ case cancel_parallel:
+ case cancel_loop:
+ case cancel_sections:
+ // cancellation requests for parallel and worksharing constructs
+ // are handled through the team structure
+ {
+ kmp_team_t *this_team = this_thr->th.th_team;
+ KMP_DEBUG_ASSERT(this_team);
+ kmp_int32 old = KMP_COMPARE_AND_STORE_RET32(&(this_team->t.t_cancel_request), cancel_noreq, cncl_kind);
+ if (old == cancel_noreq || old == cncl_kind) {
+ //printf("__kmpc_cancel: this_team->t.t_cancel_request=%d @ %p\n",
+ // this_team->t.t_cancel_request, &(this_team->t.t_cancel_request));
+ // we do not have a cancellation request in this team or we do have one
+ // that matches the current request -> cancel
+ return 1 /* true */;
+ }
+ break;
+ }
+ case cancel_taskgroup:
+ // cancellation requests for a task group
+ // are handled through the taskgroup structure
+ {
+ kmp_taskdata_t* task;
+ kmp_taskgroup_t* taskgroup;
+
+ task = this_thr->th.th_current_task;
+ KMP_DEBUG_ASSERT( task );
+
+ taskgroup = task->td_taskgroup;
+ if (taskgroup) {
+ kmp_int32 old = KMP_COMPARE_AND_STORE_RET32(&(taskgroup->cancel_request), cancel_noreq, cncl_kind);
+ if (old == cancel_noreq || old == cncl_kind) {
+ // we do not have a cancellation request in this taskgroup or we do have one
+ // that matches the current request -> cancel
+ return 1 /* true */;
+ }
+ }
+ else {
+ // TODO: what needs to happen here?
+ // the specification disallows cancellation w/o taskgroups
+ // so we might do anything here, let's abort for now
+ KMP_ASSERT( 0 /* false */);
+ }
+ }
+ break;
+ default:
+ KMP_ASSERT (0 /* false */);
+ }
+ }
+
+ // ICV OMP_CANCELLATION=false, so we ignored this cancel request
+ KMP_DEBUG_ASSERT(!__kmp_omp_cancellation);
+ return 0 /* false */;
+}
+
+/*!
+@ingroup CANCELLATION
+@param loc_ref location of the original task directive
+@param gtid Global thread ID of encountering thread
+@param cncl_kind Cancellation kind (parallel, for, sections, taskgroup)
+
+@return returns true if a matching cancellation request has been flagged in the RTL and the
+encountering thread has to cancel..
+
+Cancellation point for the encountering thread.
+*/
+kmp_int32 __kmpc_cancellationpoint(ident_t* loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind) {
+ kmp_info_t *this_thr = __kmp_threads [ gtid ];
+
+ KC_TRACE( 10, ("__kmpc_cancellationpoint: T#%d request %d OMP_CANCELLATION=%d\n", gtid, cncl_kind, __kmp_omp_cancellation) );
+
+ KMP_DEBUG_ASSERT(cncl_kind != cancel_noreq);
+ KMP_DEBUG_ASSERT(cncl_kind == cancel_parallel || cncl_kind == cancel_loop ||
+ cncl_kind == cancel_sections || cncl_kind == cancel_taskgroup);
+ KMP_DEBUG_ASSERT(__kmp_get_gtid() == gtid);
+
+ if (__kmp_omp_cancellation) {
+ switch (cncl_kind) {
+ case cancel_parallel:
+ case cancel_loop:
+ case cancel_sections:
+ // cancellation requests for parallel and worksharing constructs
+ // are handled through the team structure
+ {
+ kmp_team_t *this_team = this_thr->th.th_team;
+ KMP_DEBUG_ASSERT(this_team);
+ if (this_team->t.t_cancel_request) {
+ if (cncl_kind == this_team->t.t_cancel_request) {
+ // the request in the team structure matches the type of
+ // cancellation point so we can cancel
+ return 1 /* true */;
+ }
+ KMP_ASSERT( 0 /* false */);
+ }
+ else {
+ // we do not have a cancellation request pending, so we just
+ // ignore this cancellation point
+ return 0;
+ }
+ break;
+ }
+ case cancel_taskgroup:
+ // cancellation requests for a task group
+ // are handled through the taskgroup structure
+ {
+ kmp_taskdata_t* task;
+ kmp_taskgroup_t* taskgroup;
+
+ task = this_thr->th.th_current_task;
+ KMP_DEBUG_ASSERT( task );
+
+ taskgroup = task->td_taskgroup;
+ if (taskgroup) {
+ // return the current status of cancellation for the
+ // taskgroup
+ return !!taskgroup->cancel_request;
+ }
+ else {
+ // if a cancellation point is encountered by a task
+ // that does not belong to a taskgroup, it is OK
+ // to ignore it
+ return 0 /* false */;
+ }
+ }
+ default:
+ KMP_ASSERT (0 /* false */);
+ }
+ }
+
+ // ICV OMP_CANCELLATION=false, so we ignore the cancellation point
+ KMP_DEBUG_ASSERT(!__kmp_omp_cancellation);
+ return 0 /* false */;
+}
+
+/*!
+@ingroup CANCELLATION
+@param loc_ref location of the original task directive
+@param gtid Global thread ID of encountering thread
+
+@return returns true if a matching cancellation request has been flagged in the RTL and the
+encountering thread has to cancel..
+
+Barrier with cancellation point to send threads from the barrier to the
+end of the parallel region. Needs a special code pattern as documented
+in the design document for the cancellation feature.
+*/
+kmp_int32
+__kmpc_cancel_barrier(ident_t *loc, kmp_int32 gtid) {
+ int ret = 0 /* false */;
+ kmp_info_t *this_thr = __kmp_threads [ gtid ];
+ kmp_team_t *this_team = this_thr->th.th_team;
+
+ KMP_DEBUG_ASSERT(__kmp_get_gtid() == gtid);
+
+ // call into the standard barrier
+ __kmpc_barrier(loc, gtid);
+
+ // if cancellation is active, check cancellation flag
+ if (__kmp_omp_cancellation) {
+ // depending on which construct to cancel, check the flag and
+ // reset the flag
+ switch (this_team->t.t_cancel_request) {
+ case cancel_parallel:
+ ret = 1;
+ // ensure that threads have checked the flag, when
+ // leaving the above barrier
+ __kmpc_barrier(loc, gtid);
+ this_team->t.t_cancel_request = cancel_noreq;
+ // the next barrier is the fork/join barrier, which
+ // synchronizes the threads leaving here
+ break;
+ case cancel_loop:
+ case cancel_sections:
+ ret = 1;
+ // ensure that threads have checked the flag, when
+ // leaving the above barrier
+ __kmpc_barrier(loc, gtid);
+ this_team->t.t_cancel_request = cancel_noreq;
+ // synchronize the threads again to make sure we
+ // do not have any run-away threads that cause a race
+ // on the cancellation flag
+ __kmpc_barrier(loc, gtid);
+ break;
+ case cancel_taskgroup:
+ // this case should not occur
+ KMP_ASSERT (0 /* false */ );
+ break;
+ case cancel_noreq:
+ // do nothing
+ break;
+ default:
+ KMP_ASSERT ( 0 /* false */);
+ }
+ }
+
+ return ret;
+}
+
+/*!
+@ingroup CANCELLATION
+@param loc_ref location of the original task directive
+@param gtid Global thread ID of encountering thread
+
+@return returns true if a matching cancellation request has been flagged in the RTL and the
+encountering thread has to cancel..
+
+Query function to query the current status of cancellation requests.
+Can be used to implement the following pattern:
+
+if (kmp_get_cancellation_status(kmp_cancel_parallel)) {
+ perform_cleanup();
+ #pragma omp cancellation point parallel
+}
+*/
+int __kmp_get_cancellation_status(int cancel_kind) {
+ if (__kmp_omp_cancellation) {
+ kmp_info_t *this_thr = __kmp_entry_thread();
+
+ switch (cancel_kind) {
+ case cancel_parallel:
+ case cancel_loop:
+ case cancel_sections:
+ {
+ kmp_team_t *this_team = this_thr->th.th_team;
+ return this_team->t.t_cancel_request == cancel_kind;
+ }
+ case cancel_taskgroup:
+ {
+ kmp_taskdata_t* task;
+ kmp_taskgroup_t* taskgroup;
+ task = this_thr->th.th_current_task;
+ taskgroup = task->td_taskgroup;
+ return taskgroup && taskgroup->cancel_request;
+ }
+ }
+ }
+
+ return 0 /* false */;
+}
+
+#endif
diff --git a/final/runtime/src/kmp_config.h.cmake b/final/runtime/src/kmp_config.h.cmake
new file mode 100644
index 0000000..8eb3e57
--- /dev/null
+++ b/final/runtime/src/kmp_config.h.cmake
@@ -0,0 +1,110 @@
+/*
+ * kmp_config.h -- Feature macros
+ */
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef KMP_CONFIG_H
+#define KMP_CONFIG_H
+
+#include "kmp_platform.h"
+
+// cmakedefine01 MACRO will define MACRO as either 0 or 1
+// cmakedefine MACRO 1 will define MACRO as 1 or leave undefined
+#cmakedefine01 DEBUG_BUILD
+#cmakedefine01 RELWITHDEBINFO_BUILD
+#cmakedefine01 LIBOMP_USE_ITT_NOTIFY
+#define USE_ITT_NOTIFY LIBOMP_USE_ITT_NOTIFY
+#if ! LIBOMP_USE_ITT_NOTIFY
+# define INTEL_NO_ITTNOTIFY_API
+#endif
+#cmakedefine01 LIBOMP_USE_VERSION_SYMBOLS
+#if LIBOMP_USE_VERSION_SYMBOLS
+# define KMP_USE_VERSION_SYMBOLS
+#endif
+#cmakedefine01 LIBOMP_HAVE_WEAK_ATTRIBUTE
+#define KMP_HAVE_WEAK_ATTRIBUTE LIBOMP_HAVE_WEAK_ATTRIBUTE
+#cmakedefine01 LIBOMP_HAVE_PSAPI
+#define KMP_HAVE_PSAPI LIBOMP_HAVE_PSAPI
+#cmakedefine01 LIBOMP_STATS
+#define KMP_STATS_ENABLED LIBOMP_STATS
+#cmakedefine01 LIBOMP_HAVE_X86INTRIN_H
+#define KMP_HAVE_X86INTRIN_H LIBOMP_HAVE_X86INTRIN_H
+#cmakedefine01 LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER
+#define KMP_HAVE___BUILTIN_READCYCLECOUNTER LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER
+#cmakedefine01 LIBOMP_HAVE___RDTSC
+#define KMP_HAVE___RDTSC LIBOMP_HAVE___RDTSC
+#cmakedefine01 LIBOMP_USE_DEBUGGER
+#define USE_DEBUGGER LIBOMP_USE_DEBUGGER
+#cmakedefine01 LIBOMP_OMPT_DEBUG
+#define OMPT_DEBUG LIBOMP_OMPT_DEBUG
+#cmakedefine01 LIBOMP_OMPT_SUPPORT
+#define OMPT_SUPPORT LIBOMP_OMPT_SUPPORT
+#cmakedefine01 LIBOMP_OMPT_BLAME
+#define OMPT_BLAME LIBOMP_OMPT_BLAME
+#cmakedefine01 LIBOMP_OMPT_TRACE
+#define OMPT_TRACE LIBOMP_OMPT_TRACE
+#cmakedefine01 LIBOMP_USE_ADAPTIVE_LOCKS
+#define KMP_USE_ADAPTIVE_LOCKS LIBOMP_USE_ADAPTIVE_LOCKS
+#define KMP_DEBUG_ADAPTIVE_LOCKS 0
+#cmakedefine01 LIBOMP_USE_INTERNODE_ALIGNMENT
+#define KMP_USE_INTERNODE_ALIGNMENT LIBOMP_USE_INTERNODE_ALIGNMENT
+#cmakedefine01 LIBOMP_ENABLE_ASSERTIONS
+#define KMP_USE_ASSERT LIBOMP_ENABLE_ASSERTIONS
+#cmakedefine01 STUBS_LIBRARY
+#cmakedefine01 LIBOMP_USE_HWLOC
+#define KMP_USE_HWLOC LIBOMP_USE_HWLOC
+#define KMP_ARCH_STR "@LIBOMP_LEGAL_ARCH@"
+#define KMP_LIBRARY_FILE "@LIBOMP_LIB_FILE@"
+#define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@
+#define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@
+#define LIBOMP_OMP_VERSION @LIBOMP_OMP_VERSION@
+#define OMP_50_ENABLED (LIBOMP_OMP_VERSION >= 50)
+#define OMP_45_ENABLED (LIBOMP_OMP_VERSION >= 45)
+#define OMP_40_ENABLED (LIBOMP_OMP_VERSION >= 40)
+#define OMP_30_ENABLED (LIBOMP_OMP_VERSION >= 30)
+
+// Configured cache line based on architecture
+#if KMP_ARCH_PPC64
+# define CACHE_LINE 128
+#else
+# define CACHE_LINE 64
+#endif
+
+#if ! KMP_32_BIT_ARCH
+# define BUILD_I8 1
+#endif
+
+#define KMP_DYNAMIC_LIB 1
+#define KMP_NESTED_HOT_TEAMS 1
+#define KMP_ADJUST_BLOCKTIME 1
+#define BUILD_PARALLEL_ORDERED 1
+#define KMP_ASM_INTRINS 1
+#define USE_ITT_BUILD LIBOMP_USE_ITT_NOTIFY
+#define INTEL_ITTNOTIFY_PREFIX __kmp_itt_
+#if ! KMP_MIC
+# define USE_LOAD_BALANCE 1
+#endif
+#if ! (KMP_OS_WINDOWS || KMP_OS_DARWIN)
+# define KMP_TDATA_GTID 1
+#endif
+#if STUBS_LIBRARY
+# define KMP_STUB 1
+#endif
+#if DEBUG_BUILD || RELWITHDEBINFO_BUILD
+# define KMP_DEBUG 1
+#endif
+
+#if KMP_OS_WINDOWS
+# define KMP_WIN_CDECL
+#else
+# define BUILD_TV
+# define KMP_GOMP_COMPAT
+#endif
+
+#endif // KMP_CONFIG_H
diff --git a/final/runtime/src/kmp_csupport.c b/final/runtime/src/kmp_csupport.c
new file mode 100644
index 0000000..4c1d204
--- /dev/null
+++ b/final/runtime/src/kmp_csupport.c
@@ -0,0 +1,3329 @@
+/*
+ * kmp_csupport.c -- kfront linkage support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "omp.h" /* extern "C" declarations of user-visible routines */
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_itt.h"
+#include "kmp_lock.h"
+#include "kmp_error.h"
+#include "kmp_stats.h"
+
+#if OMPT_SUPPORT
+#include "ompt-internal.h"
+#include "ompt-specific.h"
+#endif
+
+#define MAX_MESSAGE 512
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* flags will be used in future, e.g., to implement */
+/* openmp_strict library restrictions */
+
+/*!
+ * @ingroup STARTUP_SHUTDOWN
+ * @param loc in source location information
+ * @param flags in for future use (currently ignored)
+ *
+ * Initialize the runtime library. This call is optional; if it is not made then
+ * it will be implicitly called by attempts to use other library functions.
+ *
+ */
+void
+__kmpc_begin(ident_t *loc, kmp_int32 flags)
+{
+ // By default __kmp_ignore_mppbeg() returns TRUE.
+ if (__kmp_ignore_mppbeg() == FALSE) {
+ __kmp_internal_begin();
+
+ KC_TRACE( 10, ("__kmpc_begin: called\n" ) );
+ }
+}
+
+/*!
+ * @ingroup STARTUP_SHUTDOWN
+ * @param loc source location information
+ *
+ * Shutdown the runtime library. This is also optional, and even if called will not
+ * do anything unless the `KMP_IGNORE_MPPEND` environment variable is set to zero.
+ */
+void
+__kmpc_end(ident_t *loc)
+{
+ // By default, __kmp_ignore_mppend() returns TRUE which makes __kmpc_end() call no-op.
+ // However, this can be overridden with KMP_IGNORE_MPPEND environment variable.
+ // If KMP_IGNORE_MPPEND is 0, __kmp_ignore_mppend() returns FALSE and __kmpc_end()
+ // will unregister this root (it can cause library shut down).
+ if (__kmp_ignore_mppend() == FALSE) {
+ KC_TRACE( 10, ("__kmpc_end: called\n" ) );
+ KA_TRACE( 30, ("__kmpc_end\n" ));
+
+ __kmp_internal_end_thread( -1 );
+ }
+}
+
+/*!
+@ingroup THREAD_STATES
+@param loc Source location information.
+@return The global thread index of the active thread.
+
+This function can be called in any context.
+
+If the runtime has ony been entered at the outermost level from a
+single (necessarily non-OpenMP<sup>*</sup>) thread, then the thread number is that
+which would be returned by omp_get_thread_num() in the outermost
+active parallel construct. (Or zero if there is no active parallel
+construct, since the master thread is necessarily thread zero).
+
+If multiple non-OpenMP threads all enter an OpenMP construct then this
+will be a unique thread identifier among all the threads created by
+the OpenMP runtime (but the value cannote be defined in terms of
+OpenMP thread ids returned by omp_get_thread_num()).
+
+*/
+kmp_int32
+__kmpc_global_thread_num(ident_t *loc)
+{
+ kmp_int32 gtid = __kmp_entry_gtid();
+
+ KC_TRACE( 10, ("__kmpc_global_thread_num: T#%d\n", gtid ) );
+
+ return gtid;
+}
+
+/*!
+@ingroup THREAD_STATES
+@param loc Source location information.
+@return The number of threads under control of the OpenMP<sup>*</sup> runtime
+
+This function can be called in any context.
+It returns the total number of threads under the control of the OpenMP runtime. That is
+not a number that can be determined by any OpenMP standard calls, since the library may be
+called from more than one non-OpenMP thread, and this reflects the total over all such calls.
+Similarly the runtime maintains underlying threads even when they are not active (since the cost
+of creating and destroying OS threads is high), this call counts all such threads even if they are not
+waiting for work.
+*/
+kmp_int32
+__kmpc_global_num_threads(ident_t *loc)
+{
+ KC_TRACE( 10, ("__kmpc_global_num_threads: num_threads = %d\n", __kmp_nth ) );
+
+ return TCR_4(__kmp_nth);
+}
+
+/*!
+@ingroup THREAD_STATES
+@param loc Source location information.
+@return The thread number of the calling thread in the innermost active parallel construct.
+
+*/
+kmp_int32
+__kmpc_bound_thread_num(ident_t *loc)
+{
+ KC_TRACE( 10, ("__kmpc_bound_thread_num: called\n" ) );
+ return __kmp_tid_from_gtid( __kmp_entry_gtid() );
+}
+
+/*!
+@ingroup THREAD_STATES
+@param loc Source location information.
+@return The number of threads in the innermost active parallel construct.
+*/
+kmp_int32
+__kmpc_bound_num_threads(ident_t *loc)
+{
+ KC_TRACE( 10, ("__kmpc_bound_num_threads: called\n" ) );
+
+ return __kmp_entry_thread() -> th.th_team -> t.t_nproc;
+}
+
+/*!
+ * @ingroup DEPRECATED
+ * @param loc location description
+ *
+ * This function need not be called. It always returns TRUE.
+ */
+kmp_int32
+__kmpc_ok_to_fork(ident_t *loc)
+{
+#ifndef KMP_DEBUG
+
+ return TRUE;
+
+#else
+
+ const char *semi2;
+ const char *semi3;
+ int line_no;
+
+ if (__kmp_par_range == 0) {
+ return TRUE;
+ }
+ semi2 = loc->psource;
+ if (semi2 == NULL) {
+ return TRUE;
+ }
+ semi2 = strchr(semi2, ';');
+ if (semi2 == NULL) {
+ return TRUE;
+ }
+ semi2 = strchr(semi2 + 1, ';');
+ if (semi2 == NULL) {
+ return TRUE;
+ }
+ if (__kmp_par_range_filename[0]) {
+ const char *name = semi2 - 1;
+ while ((name > loc->psource) && (*name != '/') && (*name != ';')) {
+ name--;
+ }
+ if ((*name == '/') || (*name == ';')) {
+ name++;
+ }
+ if (strncmp(__kmp_par_range_filename, name, semi2 - name)) {
+ return __kmp_par_range < 0;
+ }
+ }
+ semi3 = strchr(semi2 + 1, ';');
+ if (__kmp_par_range_routine[0]) {
+ if ((semi3 != NULL) && (semi3 > semi2)
+ && (strncmp(__kmp_par_range_routine, semi2 + 1, semi3 - semi2 - 1))) {
+ return __kmp_par_range < 0;
+ }
+ }
+ if (KMP_SSCANF(semi3 + 1, "%d", &line_no) == 1) {
+ if ((line_no >= __kmp_par_range_lb) && (line_no <= __kmp_par_range_ub)) {
+ return __kmp_par_range > 0;
+ }
+ return __kmp_par_range < 0;
+ }
+ return TRUE;
+
+#endif /* KMP_DEBUG */
+
+}
+
+/*!
+@ingroup THREAD_STATES
+@param loc Source location information.
+@return 1 if this thread is executing inside an active parallel region, zero if not.
+*/
+kmp_int32
+__kmpc_in_parallel( ident_t *loc )
+{
+ return __kmp_entry_thread() -> th.th_root -> r.r_active;
+}
+
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param global_tid global thread number
+@param num_threads number of threads requested for this parallel construct
+
+Set the number of threads to be used by the next fork spawned by this thread.
+This call is only required if the parallel construct has a `num_threads` clause.
+*/
+void
+__kmpc_push_num_threads(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_threads )
+{
+ KA_TRACE( 20, ("__kmpc_push_num_threads: enter T#%d num_threads=%d\n",
+ global_tid, num_threads ) );
+
+ __kmp_push_num_threads( loc, global_tid, num_threads );
+}
+
+void
+__kmpc_pop_num_threads(ident_t *loc, kmp_int32 global_tid )
+{
+ KA_TRACE( 20, ("__kmpc_pop_num_threads: enter\n" ) );
+
+ /* the num_threads are automatically popped */
+}
+
+
+#if OMP_40_ENABLED
+
+void
+__kmpc_push_proc_bind(ident_t *loc, kmp_int32 global_tid, kmp_int32 proc_bind )
+{
+ KA_TRACE( 20, ("__kmpc_push_proc_bind: enter T#%d proc_bind=%d\n",
+ global_tid, proc_bind ) );
+
+ __kmp_push_proc_bind( loc, global_tid, (kmp_proc_bind_t)proc_bind );
+}
+
+#endif /* OMP_40_ENABLED */
+
+
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param argc total number of arguments in the ellipsis
+@param microtask pointer to callback routine consisting of outlined parallel construct
+@param ... pointers to shared variables that aren't global
+
+Do the actual fork and call the microtask in the relevant number of threads.
+*/
+void
+__kmpc_fork_call(ident_t *loc, kmp_int32 argc, kmpc_micro microtask, ...)
+{
+ int gtid = __kmp_entry_gtid();
+
+#if (KMP_STATS_ENABLED)
+ int inParallel = __kmpc_in_parallel(loc);
+ if (inParallel)
+ {
+ KMP_COUNT_BLOCK(OMP_NESTED_PARALLEL);
+ }
+ else
+ {
+ KMP_COUNT_BLOCK(OMP_PARALLEL);
+ }
+#endif
+
+ // maybe to save thr_state is enough here
+ {
+ va_list ap;
+ va_start( ap, microtask );
+
+#if OMPT_SUPPORT
+ int tid = __kmp_tid_from_gtid( gtid );
+ kmp_info_t *master_th = __kmp_threads[ gtid ];
+ kmp_team_t *parent_team = master_th->th.th_team;
+ if (ompt_enabled) {
+ parent_team->t.t_implicit_task_taskdata[tid].
+ ompt_task_info.frame.reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_FORKING();
+#endif
+ __kmp_fork_call( loc, gtid, fork_context_intel,
+ argc,
+#if OMPT_SUPPORT
+ VOLATILE_CAST(void *) microtask, // "unwrapped" task
+#endif
+ VOLATILE_CAST(microtask_t) microtask, // "wrapped" task
+ VOLATILE_CAST(launch_t) __kmp_invoke_task_func,
+/* TODO: revert workaround for Intel(R) 64 tracker #96 */
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ &ap
+#else
+ ap
+#endif
+ );
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_JOINING();
+#endif
+ __kmp_join_call( loc, gtid
+#if OMPT_SUPPORT
+ , fork_context_intel
+#endif
+ );
+
+ va_end( ap );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ parent_team->t.t_implicit_task_taskdata[tid].
+ ompt_task_info.frame.reenter_runtime_frame = 0;
+ }
+#endif
+ }
+}
+
+#if OMP_40_ENABLED
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param global_tid global thread number
+@param num_teams number of teams requested for the teams construct
+@param num_threads number of threads per team requested for the teams construct
+
+Set the number of teams to be used by the teams construct.
+This call is only required if the teams construct has a `num_teams` clause
+or a `thread_limit` clause (or both).
+*/
+void
+__kmpc_push_num_teams(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_teams, kmp_int32 num_threads )
+{
+ KA_TRACE( 20, ("__kmpc_push_num_teams: enter T#%d num_teams=%d num_threads=%d\n",
+ global_tid, num_teams, num_threads ) );
+
+ __kmp_push_num_teams( loc, global_tid, num_teams, num_threads );
+}
+
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param argc total number of arguments in the ellipsis
+@param microtask pointer to callback routine consisting of outlined teams construct
+@param ... pointers to shared variables that aren't global
+
+Do the actual fork and call the microtask in the relevant number of threads.
+*/
+void
+__kmpc_fork_teams(ident_t *loc, kmp_int32 argc, kmpc_micro microtask, ...)
+{
+ int gtid = __kmp_entry_gtid();
+ kmp_info_t *this_thr = __kmp_threads[ gtid ];
+ va_list ap;
+ va_start( ap, microtask );
+
+ KMP_COUNT_BLOCK(OMP_TEAMS);
+
+ // remember teams entry point and nesting level
+ this_thr->th.th_teams_microtask = microtask;
+ this_thr->th.th_teams_level = this_thr->th.th_team->t.t_level; // AC: can be >0 on host
+
+#if OMPT_SUPPORT
+ kmp_team_t *parent_team = this_thr->th.th_team;
+ int tid = __kmp_tid_from_gtid( gtid );
+ if (ompt_enabled) {
+ parent_team->t.t_implicit_task_taskdata[tid].
+ ompt_task_info.frame.reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ // check if __kmpc_push_num_teams called, set default number of teams otherwise
+ if ( this_thr->th.th_teams_size.nteams == 0 ) {
+ __kmp_push_num_teams( loc, gtid, 0, 0 );
+ }
+ KMP_DEBUG_ASSERT(this_thr->th.th_set_nproc >= 1);
+ KMP_DEBUG_ASSERT(this_thr->th.th_teams_size.nteams >= 1);
+ KMP_DEBUG_ASSERT(this_thr->th.th_teams_size.nth >= 1);
+
+ __kmp_fork_call( loc, gtid, fork_context_intel,
+ argc,
+#if OMPT_SUPPORT
+ VOLATILE_CAST(void *) microtask, // "unwrapped" task
+#endif
+ VOLATILE_CAST(microtask_t) __kmp_teams_master, // "wrapped" task
+ VOLATILE_CAST(launch_t) __kmp_invoke_teams_master,
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ &ap
+#else
+ ap
+#endif
+ );
+ __kmp_join_call( loc, gtid
+#if OMPT_SUPPORT
+ , fork_context_intel
+#endif
+ );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ parent_team->t.t_implicit_task_taskdata[tid].
+ ompt_task_info.frame.reenter_runtime_frame = NULL;
+ }
+#endif
+
+ this_thr->th.th_teams_microtask = NULL;
+ this_thr->th.th_teams_level = 0;
+ *(kmp_int64*)(&this_thr->th.th_teams_size) = 0L;
+ va_end( ap );
+}
+#endif /* OMP_40_ENABLED */
+
+
+//
+// I don't think this function should ever have been exported.
+// The __kmpc_ prefix was misapplied. I'm fairly certain that no generated
+// openmp code ever called it, but it's been exported from the RTL for so
+// long that I'm afraid to remove the definition.
+//
+int
+__kmpc_invoke_task_func( int gtid )
+{
+ return __kmp_invoke_task_func( gtid );
+}
+
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param global_tid global thread number
+
+Enter a serialized parallel construct. This interface is used to handle a
+conditional parallel region, like this,
+@code
+#pragma omp parallel if (condition)
+@endcode
+when the condition is false.
+*/
+void
+__kmpc_serialized_parallel(ident_t *loc, kmp_int32 global_tid)
+{
+ __kmp_serialized_parallel(loc, global_tid); /* The implementation is now in kmp_runtime.c so that it can share static functions with
+ * kmp_fork_call since the tasks to be done are similar in each case.
+ */
+}
+
+/*!
+@ingroup PARALLEL
+@param loc source location information
+@param global_tid global thread number
+
+Leave a serialized parallel construct.
+*/
+void
+__kmpc_end_serialized_parallel(ident_t *loc, kmp_int32 global_tid)
+{
+ kmp_internal_control_t *top;
+ kmp_info_t *this_thr;
+ kmp_team_t *serial_team;
+
+ KC_TRACE( 10, ("__kmpc_end_serialized_parallel: called by T#%d\n", global_tid ) );
+
+ /* skip all this code for autopar serialized loops since it results in
+ unacceptable overhead */
+ if( loc != NULL && (loc->flags & KMP_IDENT_AUTOPAR ) )
+ return;
+
+ // Not autopar code
+ if( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+ this_thr = __kmp_threads[ global_tid ];
+ serial_team = this_thr->th.th_serial_team;
+
+ #if OMP_45_ENABLED
+ kmp_task_team_t * task_team = this_thr->th.th_task_team;
+
+ // we need to wait for the proxy tasks before finishing the thread
+ if ( task_team != NULL && task_team->tt.tt_found_proxy_tasks )
+ __kmp_task_team_wait(this_thr, serial_team USE_ITT_BUILD_ARG(NULL) ); // is an ITT object needed here?
+ #endif
+
+ KMP_MB();
+ KMP_DEBUG_ASSERT( serial_team );
+ KMP_ASSERT( serial_team -> t.t_serialized );
+ KMP_DEBUG_ASSERT( this_thr -> th.th_team == serial_team );
+ KMP_DEBUG_ASSERT( serial_team != this_thr->th.th_root->r.r_root_team );
+ KMP_DEBUG_ASSERT( serial_team -> t.t_threads );
+ KMP_DEBUG_ASSERT( serial_team -> t.t_threads[0] == this_thr );
+
+ /* If necessary, pop the internal control stack values and replace the team values */
+ top = serial_team -> t.t_control_stack_top;
+ if ( top && top -> serial_nesting_level == serial_team -> t.t_serialized ) {
+ copy_icvs( &serial_team -> t.t_threads[0] -> th.th_current_task -> td_icvs, top );
+ serial_team -> t.t_control_stack_top = top -> next;
+ __kmp_free(top);
+ }
+
+ //if( serial_team -> t.t_serialized > 1 )
+ serial_team -> t.t_level--;
+
+ /* pop dispatch buffers stack */
+ KMP_DEBUG_ASSERT(serial_team->t.t_dispatch->th_disp_buffer);
+ {
+ dispatch_private_info_t * disp_buffer = serial_team->t.t_dispatch->th_disp_buffer;
+ serial_team->t.t_dispatch->th_disp_buffer =
+ serial_team->t.t_dispatch->th_disp_buffer->next;
+ __kmp_free( disp_buffer );
+ }
+
+ -- serial_team -> t.t_serialized;
+ if ( serial_team -> t.t_serialized == 0 ) {
+
+ /* return to the parallel section */
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ if ( __kmp_inherit_fp_control && serial_team->t.t_fp_control_saved ) {
+ __kmp_clear_x87_fpu_status_word();
+ __kmp_load_x87_fpu_control_word( &serial_team->t.t_x87_fpu_control_word );
+ __kmp_load_mxcsr( &serial_team->t.t_mxcsr );
+ }
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ this_thr -> th.th_team = serial_team -> t.t_parent;
+ this_thr -> th.th_info.ds.ds_tid = serial_team -> t.t_master_tid;
+
+ /* restore values cached in the thread */
+ this_thr -> th.th_team_nproc = serial_team -> t.t_parent -> t.t_nproc; /* JPH */
+ this_thr -> th.th_team_master = serial_team -> t.t_parent -> t.t_threads[0]; /* JPH */
+ this_thr -> th.th_team_serialized = this_thr -> th.th_team -> t.t_serialized;
+
+ /* TODO the below shouldn't need to be adjusted for serialized teams */
+ this_thr -> th.th_dispatch = & this_thr -> th.th_team ->
+ t.t_dispatch[ serial_team -> t.t_master_tid ];
+
+ __kmp_pop_current_task_from_thread( this_thr );
+
+ KMP_ASSERT( this_thr -> th.th_current_task -> td_flags.executing == 0 );
+ this_thr -> th.th_current_task -> td_flags.executing = 1;
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ // Copy the task team from the new child / old parent team to the thread.
+ this_thr->th.th_task_team = this_thr->th.th_team->t.t_task_team[this_thr->th.th_task_state];
+ KA_TRACE( 20, ( "__kmpc_end_serialized_parallel: T#%d restoring task_team %p / team %p\n",
+ global_tid, this_thr -> th.th_task_team, this_thr -> th.th_team ) );
+ }
+ } else {
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KA_TRACE( 20, ( "__kmpc_end_serialized_parallel: T#%d decreasing nesting depth of serial team %p to %d\n",
+ global_tid, serial_team, serial_team -> t.t_serialized ) );
+ }
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_parallel( global_tid, NULL );
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information.
+
+Execute <tt>flush</tt>. This is implemented as a full memory fence. (Though
+depending on the memory ordering convention obeyed by the compiler
+even that may not be necessary).
+*/
+void
+__kmpc_flush(ident_t *loc)
+{
+ KC_TRACE( 10, ("__kmpc_flush: called\n" ) );
+
+ /* need explicit __mf() here since use volatile instead in library */
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 )
+ #if KMP_MIC
+ // fence-style instructions do not exist, but lock; xaddl $0,(%rsp) can be used.
+ // We shouldn't need it, though, since the ABI rules require that
+ // * If the compiler generates NGO stores it also generates the fence
+ // * If users hand-code NGO stores they should insert the fence
+ // therefore no incomplete unordered stores should be visible.
+ #else
+ // C74404
+ // This is to address non-temporal store instructions (sfence needed).
+ // The clflush instruction is addressed either (mfence needed).
+ // Probably the non-temporal load monvtdqa instruction should also be addressed.
+ // mfence is a SSE2 instruction. Do not execute it if CPU is not SSE2.
+ if ( ! __kmp_cpuinfo.initialized ) {
+ __kmp_query_cpuid( & __kmp_cpuinfo );
+ }; // if
+ if ( ! __kmp_cpuinfo.sse2 ) {
+ // CPU cannot execute SSE2 instructions.
+ } else {
+ #if KMP_COMPILER_ICC
+ _mm_mfence();
+ #elif KMP_COMPILER_MSVC
+ MemoryBarrier();
+ #else
+ __sync_synchronize();
+ #endif // KMP_COMPILER_ICC
+ }; // if
+ #endif // KMP_MIC
+ #elif (KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+ // Nothing to see here move along
+ #elif KMP_ARCH_PPC64
+ // Nothing needed here (we have a real MB above).
+ #if KMP_OS_CNK
+ // The flushing thread needs to yield here; this prevents a
+ // busy-waiting thread from saturating the pipeline. flush is
+ // often used in loops like this:
+ // while (!flag) {
+ // #pragma omp flush(flag)
+ // }
+ // and adding the yield here is good for at least a 10x speedup
+ // when running >2 threads per core (on the NAS LU benchmark).
+ __kmp_yield(TRUE);
+ #endif
+ #else
+ #error Unknown or unsupported architecture
+ #endif
+
+}
+
+/* -------------------------------------------------------------------------- */
+
+/* -------------------------------------------------------------------------- */
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid thread id.
+
+Execute a barrier.
+*/
+void
+__kmpc_barrier(ident_t *loc, kmp_int32 global_tid)
+{
+ KMP_COUNT_BLOCK(OMP_BARRIER);
+ KC_TRACE( 10, ("__kmpc_barrier: called T#%d\n", global_tid ) );
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+ if ( __kmp_env_consistency_check ) {
+ if ( loc == 0 ) {
+ KMP_WARNING( ConstructIdentInvalid ); // ??? What does it mean for the user?
+ }; // if
+
+ __kmp_check_barrier( global_tid, ct_barrier, loc );
+ }
+
+ __kmp_threads[ global_tid ]->th.th_ident = loc;
+ // TODO: explicit barrier_wait_id:
+ // this function is called when 'barrier' directive is present or
+ // implicit barrier at the end of a worksharing construct.
+ // 1) better to add a per-thread barrier counter to a thread data structure
+ // 2) set to 0 when a new team is created
+ // 4) no sync is required
+
+ __kmp_barrier( bs_plain_barrier, global_tid, FALSE, 0, NULL, NULL );
+}
+
+/* The BARRIER for a MASTER section is always explicit */
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param global_tid global thread number .
+@return 1 if this thread should execute the <tt>master</tt> block, 0 otherwise.
+*/
+kmp_int32
+__kmpc_master(ident_t *loc, kmp_int32 global_tid)
+{
+ int status = 0;
+
+ KC_TRACE( 10, ("__kmpc_master: called T#%d\n", global_tid ) );
+
+ if( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+ if( KMP_MASTER_GTID( global_tid )) {
+ KMP_COUNT_BLOCK(OMP_MASTER);
+ KMP_PUSH_PARTITIONED_TIMER(OMP_master);
+ status = 1;
+ }
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (status) {
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_master_begin)) {
+ kmp_info_t *this_thr = __kmp_threads[ global_tid ];
+ kmp_team_t *team = this_thr -> th.th_team;
+
+ int tid = __kmp_tid_from_gtid( global_tid );
+ ompt_callbacks.ompt_callback(ompt_event_master_begin)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+ }
+#endif
+
+ if ( __kmp_env_consistency_check ) {
+#if KMP_USE_DYNAMIC_LOCK
+ if (status)
+ __kmp_push_sync( global_tid, ct_master, loc, NULL, 0 );
+ else
+ __kmp_check_sync( global_tid, ct_master, loc, NULL, 0 );
+#else
+ if (status)
+ __kmp_push_sync( global_tid, ct_master, loc, NULL );
+ else
+ __kmp_check_sync( global_tid, ct_master, loc, NULL );
+#endif
+ }
+
+ return status;
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param global_tid global thread number .
+
+Mark the end of a <tt>master</tt> region. This should only be called by the thread
+that executes the <tt>master</tt> region.
+*/
+void
+__kmpc_end_master(ident_t *loc, kmp_int32 global_tid)
+{
+ KC_TRACE( 10, ("__kmpc_end_master: called T#%d\n", global_tid ) );
+
+ KMP_DEBUG_ASSERT( KMP_MASTER_GTID( global_tid ));
+ KMP_POP_PARTITIONED_TIMER();
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ kmp_info_t *this_thr = __kmp_threads[ global_tid ];
+ kmp_team_t *team = this_thr -> th.th_team;
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_master_end)) {
+ int tid = __kmp_tid_from_gtid( global_tid );
+ ompt_callbacks.ompt_callback(ompt_event_master_end)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+#endif
+
+ if ( __kmp_env_consistency_check ) {
+ if( global_tid < 0 )
+ KMP_WARNING( ThreadIdentInvalid );
+
+ if( KMP_MASTER_GTID( global_tid ))
+ __kmp_pop_sync( global_tid, ct_master, loc );
+ }
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param gtid global thread number.
+
+Start execution of an <tt>ordered</tt> construct.
+*/
+void
+__kmpc_ordered( ident_t * loc, kmp_int32 gtid )
+{
+ int cid = 0;
+ kmp_info_t *th;
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ KC_TRACE( 10, ("__kmpc_ordered: called T#%d\n", gtid ));
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+#if USE_ITT_BUILD
+ __kmp_itt_ordered_prep( gtid );
+ // TODO: ordered_wait_id
+#endif /* USE_ITT_BUILD */
+
+ th = __kmp_threads[ gtid ];
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ /* OMPT state update */
+ th->th.ompt_thread_info.wait_id = (uint64_t) loc;
+ th->th.ompt_thread_info.state = ompt_state_wait_ordered;
+
+ /* OMPT event callback */
+ if (ompt_callbacks.ompt_callback(ompt_event_wait_ordered)) {
+ ompt_callbacks.ompt_callback(ompt_event_wait_ordered)(
+ th->th.ompt_thread_info.wait_id);
+ }
+ }
+#endif
+
+ if ( th -> th.th_dispatch -> th_deo_fcn != 0 )
+ (*th->th.th_dispatch->th_deo_fcn)( & gtid, & cid, loc );
+ else
+ __kmp_parallel_deo( & gtid, & cid, loc );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ /* OMPT state update */
+ th->th.ompt_thread_info.state = ompt_state_work_parallel;
+ th->th.ompt_thread_info.wait_id = 0;
+
+ /* OMPT event callback */
+ if (ompt_callbacks.ompt_callback(ompt_event_acquired_ordered)) {
+ ompt_callbacks.ompt_callback(ompt_event_acquired_ordered)(
+ th->th.ompt_thread_info.wait_id);
+ }
+ }
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_ordered_start( gtid );
+#endif /* USE_ITT_BUILD */
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param gtid global thread number.
+
+End execution of an <tt>ordered</tt> construct.
+*/
+void
+__kmpc_end_ordered( ident_t * loc, kmp_int32 gtid )
+{
+ int cid = 0;
+ kmp_info_t *th;
+
+ KC_TRACE( 10, ("__kmpc_end_ordered: called T#%d\n", gtid ) );
+
+#if USE_ITT_BUILD
+ __kmp_itt_ordered_end( gtid );
+ // TODO: ordered_wait_id
+#endif /* USE_ITT_BUILD */
+
+ th = __kmp_threads[ gtid ];
+
+ if ( th -> th.th_dispatch -> th_dxo_fcn != 0 )
+ (*th->th.th_dispatch->th_dxo_fcn)( & gtid, & cid, loc );
+ else
+ __kmp_parallel_dxo( & gtid, & cid, loc );
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_release_ordered)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_ordered)(
+ th->th.ompt_thread_info.wait_id);
+ }
+#endif
+}
+
+#if KMP_USE_DYNAMIC_LOCK
+
+static __forceinline void
+__kmp_init_indirect_csptr(kmp_critical_name * crit, ident_t const * loc, kmp_int32 gtid, kmp_indirect_locktag_t tag)
+{
+ // Pointer to the allocated indirect lock is written to crit, while indexing is ignored.
+ void *idx;
+ kmp_indirect_lock_t **lck;
+ lck = (kmp_indirect_lock_t **)crit;
+ kmp_indirect_lock_t *ilk = __kmp_allocate_indirect_lock(&idx, gtid, tag);
+ KMP_I_LOCK_FUNC(ilk, init)(ilk->lock);
+ KMP_SET_I_LOCK_LOCATION(ilk, loc);
+ KMP_SET_I_LOCK_FLAGS(ilk, kmp_lf_critical_section);
+ KA_TRACE(20, ("__kmp_init_indirect_csptr: initialized indirect lock #%d\n", tag));
+#if USE_ITT_BUILD
+ __kmp_itt_critical_creating(ilk->lock, loc);
+#endif
+ int status = KMP_COMPARE_AND_STORE_PTR(lck, 0, ilk);
+ if (status == 0) {
+#if USE_ITT_BUILD
+ __kmp_itt_critical_destroyed(ilk->lock);
+#endif
+ // We don't really need to destroy the unclaimed lock here since it will be cleaned up at program exit.
+ //KMP_D_LOCK_FUNC(&idx, destroy)((kmp_dyna_lock_t *)&idx);
+ }
+ KMP_DEBUG_ASSERT(*lck != NULL);
+}
+
+// Fast-path acquire tas lock
+#define KMP_ACQUIRE_TAS_LOCK(lock, gtid) { \
+ kmp_tas_lock_t *l = (kmp_tas_lock_t *)lock; \
+ if (l->lk.poll != KMP_LOCK_FREE(tas) || \
+ ! KMP_COMPARE_AND_STORE_ACQ32(&(l->lk.poll), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas))) { \
+ kmp_uint32 spins; \
+ KMP_FSYNC_PREPARE(l); \
+ KMP_INIT_YIELD(spins); \
+ if (TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)) { \
+ KMP_YIELD(TRUE); \
+ } else { \
+ KMP_YIELD_SPIN(spins); \
+ } \
+ kmp_backoff_t backoff = __kmp_spin_backoff_params; \
+ while (l->lk.poll != KMP_LOCK_FREE(tas) || \
+ ! KMP_COMPARE_AND_STORE_ACQ32(&(l->lk.poll), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas))) { \
+ __kmp_spin_backoff(&backoff); \
+ if (TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)) { \
+ KMP_YIELD(TRUE); \
+ } else { \
+ KMP_YIELD_SPIN(spins); \
+ } \
+ } \
+ } \
+ KMP_FSYNC_ACQUIRED(l); \
+}
+
+// Fast-path test tas lock
+#define KMP_TEST_TAS_LOCK(lock, gtid, rc) { \
+ kmp_tas_lock_t *l = (kmp_tas_lock_t *)lock; \
+ rc = l->lk.poll == KMP_LOCK_FREE(tas) && \
+ KMP_COMPARE_AND_STORE_ACQ32(&(l->lk.poll), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas)); \
+}
+
+// Fast-path release tas lock
+#define KMP_RELEASE_TAS_LOCK(lock, gtid) { \
+ TCW_4(((kmp_tas_lock_t *)lock)->lk.poll, KMP_LOCK_FREE(tas)); \
+ KMP_MB(); \
+}
+
+#if KMP_USE_FUTEX
+
+# include <unistd.h>
+# include <sys/syscall.h>
+# ifndef FUTEX_WAIT
+# define FUTEX_WAIT 0
+# endif
+# ifndef FUTEX_WAKE
+# define FUTEX_WAKE 1
+# endif
+
+// Fast-path acquire futex lock
+#define KMP_ACQUIRE_FUTEX_LOCK(lock, gtid) { \
+ kmp_futex_lock_t *ftx = (kmp_futex_lock_t *)lock; \
+ kmp_int32 gtid_code = (gtid+1) << 1; \
+ KMP_MB(); \
+ KMP_FSYNC_PREPARE(ftx); \
+ kmp_int32 poll_val; \
+ while ((poll_val = KMP_COMPARE_AND_STORE_RET32(&(ftx->lk.poll), KMP_LOCK_FREE(futex), \
+ KMP_LOCK_BUSY(gtid_code, futex))) != KMP_LOCK_FREE(futex)) { \
+ kmp_int32 cond = KMP_LOCK_STRIP(poll_val) & 1; \
+ if (!cond) { \
+ if (!KMP_COMPARE_AND_STORE_RET32(&(ftx->lk.poll), poll_val, poll_val | KMP_LOCK_BUSY(1, futex))) { \
+ continue; \
+ } \
+ poll_val |= KMP_LOCK_BUSY(1, futex); \
+ } \
+ kmp_int32 rc; \
+ if ((rc = syscall(__NR_futex, &(ftx->lk.poll), FUTEX_WAIT, poll_val, NULL, NULL, 0)) != 0) { \
+ continue; \
+ } \
+ gtid_code |= 1; \
+ } \
+ KMP_FSYNC_ACQUIRED(ftx); \
+}
+
+// Fast-path test futex lock
+#define KMP_TEST_FUTEX_LOCK(lock, gtid, rc) { \
+ kmp_futex_lock_t *ftx = (kmp_futex_lock_t *)lock; \
+ if (KMP_COMPARE_AND_STORE_ACQ32(&(ftx->lk.poll), KMP_LOCK_FREE(futex), KMP_LOCK_BUSY(gtid+1 << 1, futex))) { \
+ KMP_FSYNC_ACQUIRED(ftx); \
+ rc = TRUE; \
+ } else { \
+ rc = FALSE; \
+ } \
+}
+
+// Fast-path release futex lock
+#define KMP_RELEASE_FUTEX_LOCK(lock, gtid) { \
+ kmp_futex_lock_t *ftx = (kmp_futex_lock_t *)lock; \
+ KMP_MB(); \
+ KMP_FSYNC_RELEASING(ftx); \
+ kmp_int32 poll_val = KMP_XCHG_FIXED32(&(ftx->lk.poll), KMP_LOCK_FREE(futex)); \
+ if (KMP_LOCK_STRIP(poll_val) & 1) { \
+ syscall(__NR_futex, &(ftx->lk.poll), FUTEX_WAKE, KMP_LOCK_BUSY(1, futex), NULL, NULL, 0); \
+ } \
+ KMP_MB(); \
+ KMP_YIELD(TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)); \
+}
+
+#endif // KMP_USE_FUTEX
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+static kmp_user_lock_p
+__kmp_get_critical_section_ptr( kmp_critical_name * crit, ident_t const * loc, kmp_int32 gtid )
+{
+ kmp_user_lock_p *lck_pp = (kmp_user_lock_p *)crit;
+
+ //
+ // Because of the double-check, the following load
+ // doesn't need to be volatile.
+ //
+ kmp_user_lock_p lck = (kmp_user_lock_p)TCR_PTR( *lck_pp );
+
+ if ( lck == NULL ) {
+ void * idx;
+
+ // Allocate & initialize the lock.
+ // Remember allocated locks in table in order to free them in __kmp_cleanup()
+ lck = __kmp_user_lock_allocate( &idx, gtid, kmp_lf_critical_section );
+ __kmp_init_user_lock_with_checks( lck );
+ __kmp_set_user_lock_location( lck, loc );
+#if USE_ITT_BUILD
+ __kmp_itt_critical_creating( lck );
+ // __kmp_itt_critical_creating() should be called *before* the first usage of underlying
+ // lock. It is the only place where we can guarantee it. There are chances the lock will
+ // destroyed with no usage, but it is not a problem, because this is not real event seen
+ // by user but rather setting name for object (lock). See more details in kmp_itt.h.
+#endif /* USE_ITT_BUILD */
+
+ //
+ // Use a cmpxchg instruction to slam the start of the critical
+ // section with the lock pointer. If another thread beat us
+ // to it, deallocate the lock, and use the lock that the other
+ // thread allocated.
+ //
+ int status = KMP_COMPARE_AND_STORE_PTR( lck_pp, 0, lck );
+
+ if ( status == 0 ) {
+ // Deallocate the lock and reload the value.
+#if USE_ITT_BUILD
+ __kmp_itt_critical_destroyed( lck );
+ // Let ITT know the lock is destroyed and the same memory location may be reused for
+ // another purpose.
+#endif /* USE_ITT_BUILD */
+ __kmp_destroy_user_lock_with_checks( lck );
+ __kmp_user_lock_free( &idx, gtid, lck );
+ lck = (kmp_user_lock_p)TCR_PTR( *lck_pp );
+ KMP_DEBUG_ASSERT( lck != NULL );
+ }
+ }
+ return lck;
+}
+
+#endif // KMP_USE_DYNAMIC_LOCK
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param global_tid global thread number .
+@param crit identity of the critical section. This could be a pointer to a lock associated with the critical section, or
+some other suitably unique value.
+
+Enter code protected by a `critical` construct.
+This function blocks until the executing thread can enter the critical section.
+*/
+void
+__kmpc_critical( ident_t * loc, kmp_int32 global_tid, kmp_critical_name * crit )
+{
+#if KMP_USE_DYNAMIC_LOCK
+ __kmpc_critical_with_hint(loc, global_tid, crit, omp_lock_hint_none);
+#else
+ KMP_COUNT_BLOCK(OMP_CRITICAL);
+ KMP_TIME_PARTITIONED_BLOCK(OMP_critical_wait); /* Time spent waiting to enter the critical section */
+ kmp_user_lock_p lck;
+
+ KC_TRACE( 10, ("__kmpc_critical: called T#%d\n", global_tid ) );
+
+ //TODO: add THR_OVHD_STATE
+
+ KMP_CHECK_USER_LOCK_INIT();
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_CRITICAL_SIZE ) ) {
+ lck = (kmp_user_lock_p)crit;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_CRITICAL_SIZE ) ) {
+ lck = (kmp_user_lock_p)crit;
+ }
+#endif
+ else { // ticket, queuing or drdpa
+ lck = __kmp_get_critical_section_ptr( crit, loc, global_tid );
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_critical, loc, lck );
+
+ /* since the critical directive binds to all threads, not just
+ * the current team we have to check this even if we are in a
+ * serialized team */
+ /* also, even if we are the uber thread, we still have to conduct the lock,
+ * as we have to contend with sibling threads */
+
+#if USE_ITT_BUILD
+ __kmp_itt_critical_acquiring( lck );
+#endif /* USE_ITT_BUILD */
+ // Value of 'crit' should be good for using as a critical_id of the critical section directive.
+ __kmp_acquire_user_lock_with_checks( lck, global_tid );
+
+#if USE_ITT_BUILD
+ __kmp_itt_critical_acquired( lck );
+#endif /* USE_ITT_BUILD */
+
+ KMP_START_EXPLICIT_TIMER(OMP_critical);
+ KA_TRACE( 15, ("__kmpc_critical: done T#%d\n", global_tid ));
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+#if KMP_USE_DYNAMIC_LOCK
+
+// Converts the given hint to an internal lock implementation
+static __forceinline kmp_dyna_lockseq_t
+__kmp_map_hint_to_lock(uintptr_t hint)
+{
+#if KMP_USE_TSX
+# define KMP_TSX_LOCK(seq) lockseq_##seq
+#else
+# define KMP_TSX_LOCK(seq) __kmp_user_lock_seq
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+# define KMP_CPUINFO_RTM (__kmp_cpuinfo.rtm)
+#else
+# define KMP_CPUINFO_RTM 0
+#endif
+
+ // Hints that do not require further logic
+ if (hint & kmp_lock_hint_hle)
+ return KMP_TSX_LOCK(hle);
+ if (hint & kmp_lock_hint_rtm)
+ return KMP_CPUINFO_RTM ? KMP_TSX_LOCK(rtm): __kmp_user_lock_seq;
+ if (hint & kmp_lock_hint_adaptive)
+ return KMP_CPUINFO_RTM ? KMP_TSX_LOCK(adaptive): __kmp_user_lock_seq;
+
+ // Rule out conflicting hints first by returning the default lock
+ if ((hint & omp_lock_hint_contended) && (hint & omp_lock_hint_uncontended))
+ return __kmp_user_lock_seq;
+ if ((hint & omp_lock_hint_speculative) && (hint & omp_lock_hint_nonspeculative))
+ return __kmp_user_lock_seq;
+
+ // Do not even consider speculation when it appears to be contended
+ if (hint & omp_lock_hint_contended)
+ return lockseq_queuing;
+
+ // Uncontended lock without speculation
+ if ((hint & omp_lock_hint_uncontended) && !(hint & omp_lock_hint_speculative))
+ return lockseq_tas;
+
+ // HLE lock for speculation
+ if (hint & omp_lock_hint_speculative)
+ return KMP_TSX_LOCK(hle);
+
+ return __kmp_user_lock_seq;
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param global_tid global thread number.
+@param crit identity of the critical section. This could be a pointer to a lock associated with the critical section,
+or some other suitably unique value.
+@param hint the lock hint.
+
+Enter code protected by a `critical` construct with a hint. The hint value is used to suggest a lock implementation.
+This function blocks until the executing thread can enter the critical section unless the hint suggests use of
+speculative execution and the hardware supports it.
+*/
+void
+__kmpc_critical_with_hint( ident_t * loc, kmp_int32 global_tid, kmp_critical_name * crit, uintptr_t hint )
+{
+ KMP_COUNT_BLOCK(OMP_CRITICAL);
+ kmp_user_lock_p lck;
+
+ KC_TRACE( 10, ("__kmpc_critical: called T#%d\n", global_tid ) );
+
+ kmp_dyna_lock_t *lk = (kmp_dyna_lock_t *)crit;
+ // Check if it is initialized.
+ if (*lk == 0) {
+ kmp_dyna_lockseq_t lckseq = __kmp_map_hint_to_lock(hint);
+ if (KMP_IS_D_LOCK(lckseq)) {
+ KMP_COMPARE_AND_STORE_ACQ32((volatile kmp_int32 *)crit, 0, KMP_GET_D_TAG(lckseq));
+ } else {
+ __kmp_init_indirect_csptr(crit, loc, global_tid, KMP_GET_I_TAG(lckseq));
+ }
+ }
+ // Branch for accessing the actual lock object and set operation. This branching is inevitable since
+ // this lock initialization does not follow the normal dispatch path (lock table is not used).
+ if (KMP_EXTRACT_D_TAG(lk) != 0) {
+ lck = (kmp_user_lock_p)lk;
+ if (__kmp_env_consistency_check) {
+ __kmp_push_sync(global_tid, ct_critical, loc, lck, __kmp_map_hint_to_lock(hint));
+ }
+# if USE_ITT_BUILD
+ __kmp_itt_critical_acquiring(lck);
+# endif
+# if KMP_USE_INLINED_TAS
+ if (__kmp_user_lock_seq == lockseq_tas && !__kmp_env_consistency_check) {
+ KMP_ACQUIRE_TAS_LOCK(lck, global_tid);
+ } else
+# elif KMP_USE_INLINED_FUTEX
+ if (__kmp_user_lock_seq == lockseq_futex && !__kmp_env_consistency_check) {
+ KMP_ACQUIRE_FUTEX_LOCK(lck, global_tid);
+ } else
+# endif
+ {
+ KMP_D_LOCK_FUNC(lk, set)(lk, global_tid);
+ }
+ } else {
+ kmp_indirect_lock_t *ilk = *((kmp_indirect_lock_t **)lk);
+ lck = ilk->lock;
+ if (__kmp_env_consistency_check) {
+ __kmp_push_sync(global_tid, ct_critical, loc, lck, __kmp_map_hint_to_lock(hint));
+ }
+# if USE_ITT_BUILD
+ __kmp_itt_critical_acquiring(lck);
+# endif
+ KMP_I_LOCK_FUNC(ilk, set)(lck, global_tid);
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_critical_acquired( lck );
+#endif /* USE_ITT_BUILD */
+
+ KMP_PUSH_PARTITIONED_TIMER(OMP_critical);
+ KA_TRACE( 15, ("__kmpc_critical: done T#%d\n", global_tid ));
+} // __kmpc_critical_with_hint
+
+#endif // KMP_USE_DYNAMIC_LOCK
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param global_tid global thread number .
+@param crit identity of the critical section. This could be a pointer to a lock associated with the critical section, or
+some other suitably unique value.
+
+Leave a critical section, releasing any lock that was held during its execution.
+*/
+void
+__kmpc_end_critical(ident_t *loc, kmp_int32 global_tid, kmp_critical_name *crit)
+{
+ kmp_user_lock_p lck;
+
+ KC_TRACE( 10, ("__kmpc_end_critical: called T#%d\n", global_tid ));
+
+#if KMP_USE_DYNAMIC_LOCK
+ if (KMP_IS_D_LOCK(__kmp_user_lock_seq)) {
+ lck = (kmp_user_lock_p)crit;
+ KMP_ASSERT(lck != NULL);
+ if (__kmp_env_consistency_check) {
+ __kmp_pop_sync(global_tid, ct_critical, loc);
+ }
+# if USE_ITT_BUILD
+ __kmp_itt_critical_releasing( lck );
+# endif
+# if KMP_USE_INLINED_TAS
+ if (__kmp_user_lock_seq == lockseq_tas && !__kmp_env_consistency_check) {
+ KMP_RELEASE_TAS_LOCK(lck, global_tid);
+ } else
+# elif KMP_USE_INLINED_FUTEX
+ if (__kmp_user_lock_seq == lockseq_futex && !__kmp_env_consistency_check) {
+ KMP_RELEASE_FUTEX_LOCK(lck, global_tid);
+ } else
+# endif
+ {
+ KMP_D_LOCK_FUNC(lck, unset)((kmp_dyna_lock_t *)lck, global_tid);
+ }
+ } else {
+ kmp_indirect_lock_t *ilk = (kmp_indirect_lock_t *)TCR_PTR(*((kmp_indirect_lock_t **)crit));
+ KMP_ASSERT(ilk != NULL);
+ lck = ilk->lock;
+ if (__kmp_env_consistency_check) {
+ __kmp_pop_sync(global_tid, ct_critical, loc);
+ }
+# if USE_ITT_BUILD
+ __kmp_itt_critical_releasing( lck );
+# endif
+ KMP_I_LOCK_FUNC(ilk, unset)(lck, global_tid);
+ }
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_CRITICAL_SIZE ) ) {
+ lck = (kmp_user_lock_p)crit;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_CRITICAL_SIZE ) ) {
+ lck = (kmp_user_lock_p)crit;
+ }
+#endif
+ else { // ticket, queuing or drdpa
+ lck = (kmp_user_lock_p) TCR_PTR(*((kmp_user_lock_p *)crit));
+ }
+
+ KMP_ASSERT(lck != NULL);
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( global_tid, ct_critical, loc );
+
+#if USE_ITT_BUILD
+ __kmp_itt_critical_releasing( lck );
+#endif /* USE_ITT_BUILD */
+ // Value of 'crit' should be good for using as a critical_id of the critical section directive.
+ __kmp_release_user_lock_with_checks( lck, global_tid );
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_release_critical)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_critical)(
+ (uint64_t) lck);
+ }
+#endif
+
+#endif // KMP_USE_DYNAMIC_LOCK
+ KMP_POP_PARTITIONED_TIMER();
+ KA_TRACE( 15, ("__kmpc_end_critical: done T#%d\n", global_tid ));
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid thread id.
+@return one if the thread should execute the master block, zero otherwise
+
+Start execution of a combined barrier and master. The barrier is executed inside this function.
+*/
+kmp_int32
+__kmpc_barrier_master(ident_t *loc, kmp_int32 global_tid)
+{
+ int status;
+
+ KC_TRACE( 10, ("__kmpc_barrier_master: called T#%d\n", global_tid ) );
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+ if ( __kmp_env_consistency_check )
+ __kmp_check_barrier( global_tid, ct_barrier, loc );
+
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ status = __kmp_barrier( bs_plain_barrier, global_tid, TRUE, 0, NULL, NULL );
+
+ return (status != 0) ? 0 : 1;
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid thread id.
+
+Complete the execution of a combined barrier and master. This function should
+only be called at the completion of the <tt>master</tt> code. Other threads will
+still be waiting at the barrier and this call releases them.
+*/
+void
+__kmpc_end_barrier_master(ident_t *loc, kmp_int32 global_tid)
+{
+ KC_TRACE( 10, ("__kmpc_end_barrier_master: called T#%d\n", global_tid ));
+
+ __kmp_end_split_barrier ( bs_plain_barrier, global_tid );
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid thread id.
+@return one if the thread should execute the master block, zero otherwise
+
+Start execution of a combined barrier and master(nowait) construct.
+The barrier is executed inside this function.
+There is no equivalent "end" function, since the
+*/
+kmp_int32
+__kmpc_barrier_master_nowait( ident_t * loc, kmp_int32 global_tid )
+{
+ kmp_int32 ret;
+
+ KC_TRACE( 10, ("__kmpc_barrier_master_nowait: called T#%d\n", global_tid ));
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+ if ( __kmp_env_consistency_check ) {
+ if ( loc == 0 ) {
+ KMP_WARNING( ConstructIdentInvalid ); // ??? What does it mean for the user?
+ }
+ __kmp_check_barrier( global_tid, ct_barrier, loc );
+ }
+
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ __kmp_barrier( bs_plain_barrier, global_tid, FALSE, 0, NULL, NULL );
+
+ ret = __kmpc_master (loc, global_tid);
+
+ if ( __kmp_env_consistency_check ) {
+ /* there's no __kmpc_end_master called; so the (stats) */
+ /* actions of __kmpc_end_master are done here */
+
+ if ( global_tid < 0 ) {
+ KMP_WARNING( ThreadIdentInvalid );
+ }
+ if (ret) {
+ /* only one thread should do the pop since only */
+ /* one did the push (see __kmpc_master()) */
+
+ __kmp_pop_sync( global_tid, ct_master, loc );
+ }
+ }
+
+ return (ret);
+}
+
+/* The BARRIER for a SINGLE process section is always explicit */
+/*!
+@ingroup WORK_SHARING
+@param loc source location information
+@param global_tid global thread number
+@return One if this thread should execute the single construct, zero otherwise.
+
+Test whether to execute a <tt>single</tt> construct.
+There are no implicit barriers in the two "single" calls, rather the compiler should
+introduce an explicit barrier if it is required.
+*/
+
+kmp_int32
+__kmpc_single(ident_t *loc, kmp_int32 global_tid)
+{
+ kmp_int32 rc = __kmp_enter_single( global_tid, loc, TRUE );
+
+ if (rc) {
+ // We are going to execute the single statement, so we should count it.
+ KMP_COUNT_BLOCK(OMP_SINGLE);
+ KMP_PUSH_PARTITIONED_TIMER(OMP_single);
+ }
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ kmp_info_t *this_thr = __kmp_threads[ global_tid ];
+ kmp_team_t *team = this_thr -> th.th_team;
+ int tid = __kmp_tid_from_gtid( global_tid );
+
+ if (ompt_enabled) {
+ if (rc) {
+ if (ompt_callbacks.ompt_callback(ompt_event_single_in_block_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_single_in_block_begin)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id,
+ team->t.ompt_team_info.microtask);
+ }
+ } else {
+ if (ompt_callbacks.ompt_callback(ompt_event_single_others_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_single_others_begin)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+ this_thr->th.ompt_thread_info.state = ompt_state_wait_single;
+ }
+ }
+#endif
+
+ return rc;
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc source location information
+@param global_tid global thread number
+
+Mark the end of a <tt>single</tt> construct. This function should
+only be called by the thread that executed the block of code protected
+by the `single` construct.
+*/
+void
+__kmpc_end_single(ident_t *loc, kmp_int32 global_tid)
+{
+ __kmp_exit_single( global_tid );
+ KMP_POP_PARTITIONED_TIMER();
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ kmp_info_t *this_thr = __kmp_threads[ global_tid ];
+ kmp_team_t *team = this_thr -> th.th_team;
+ int tid = __kmp_tid_from_gtid( global_tid );
+
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_single_in_block_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_single_in_block_end)(
+ team->t.ompt_team_info.parallel_id,
+ team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id);
+ }
+#endif
+}
+
+/*!
+@ingroup WORK_SHARING
+@param loc Source location
+@param global_tid Global thread id
+
+Mark the end of a statically scheduled loop.
+*/
+void
+__kmpc_for_static_fini( ident_t *loc, kmp_int32 global_tid )
+{
+ KE_TRACE( 10, ("__kmpc_for_static_fini called T#%d\n", global_tid));
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_end)) {
+ ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ ompt_callbacks.ompt_callback(ompt_event_loop_end)(
+ team_info->parallel_id, task_info->task_id);
+ }
+#endif
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_workshare( global_tid, ct_pdo, loc );
+}
+
+/*
+ * User routines which take C-style arguments (call by value)
+ * different from the Fortran equivalent routines
+ */
+
+void
+ompc_set_num_threads( int arg )
+{
+// !!!!! TODO: check the per-task binding
+ __kmp_set_num_threads( arg, __kmp_entry_gtid() );
+}
+
+void
+ompc_set_dynamic( int flag )
+{
+ kmp_info_t *thread;
+
+ /* For the thread-private implementation of the internal controls */
+ thread = __kmp_entry_thread();
+
+ __kmp_save_internal_controls( thread );
+
+ set__dynamic( thread, flag ? TRUE : FALSE );
+}
+
+void
+ompc_set_nested( int flag )
+{
+ kmp_info_t *thread;
+
+ /* For the thread-private internal controls implementation */
+ thread = __kmp_entry_thread();
+
+ __kmp_save_internal_controls( thread );
+
+ set__nested( thread, flag ? TRUE : FALSE );
+}
+
+void
+ompc_set_max_active_levels( int max_active_levels )
+{
+ /* TO DO */
+ /* we want per-task implementation of this internal control */
+
+ /* For the per-thread internal controls implementation */
+ __kmp_set_max_active_levels( __kmp_entry_gtid(), max_active_levels );
+}
+
+void
+ompc_set_schedule( omp_sched_t kind, int modifier )
+{
+// !!!!! TODO: check the per-task binding
+ __kmp_set_schedule( __kmp_entry_gtid(), ( kmp_sched_t ) kind, modifier );
+}
+
+int
+ompc_get_ancestor_thread_num( int level )
+{
+ return __kmp_get_ancestor_thread_num( __kmp_entry_gtid(), level );
+}
+
+int
+ompc_get_team_size( int level )
+{
+ return __kmp_get_team_size( __kmp_entry_gtid(), level );
+}
+
+void
+kmpc_set_stacksize( int arg )
+{
+ // __kmp_aux_set_stacksize initializes the library if needed
+ __kmp_aux_set_stacksize( arg );
+}
+
+void
+kmpc_set_stacksize_s( size_t arg )
+{
+ // __kmp_aux_set_stacksize initializes the library if needed
+ __kmp_aux_set_stacksize( arg );
+}
+
+void
+kmpc_set_blocktime( int arg )
+{
+ int gtid, tid;
+ kmp_info_t *thread;
+
+ gtid = __kmp_entry_gtid();
+ tid = __kmp_tid_from_gtid(gtid);
+ thread = __kmp_thread_from_gtid(gtid);
+
+ __kmp_aux_set_blocktime( arg, thread, tid );
+}
+
+void
+kmpc_set_library( int arg )
+{
+ // __kmp_user_set_library initializes the library if needed
+ __kmp_user_set_library( (enum library_type)arg );
+}
+
+void
+kmpc_set_defaults( char const * str )
+{
+ // __kmp_aux_set_defaults initializes the library if needed
+ __kmp_aux_set_defaults( str, KMP_STRLEN( str ) );
+}
+
+void
+kmpc_set_disp_num_buffers( int arg )
+{
+ // ignore after initialization because some teams have already
+ // allocated dispatch buffers
+ if( __kmp_init_serial == 0 && arg > 0 )
+ __kmp_dispatch_num_buffers = arg;
+}
+
+int
+kmpc_set_affinity_mask_proc( int proc, void **mask )
+{
+#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+#else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_set_affinity_mask_proc( proc, mask );
+#endif
+}
+
+int
+kmpc_unset_affinity_mask_proc( int proc, void **mask )
+{
+#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+#else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_unset_affinity_mask_proc( proc, mask );
+#endif
+}
+
+int
+kmpc_get_affinity_mask_proc( int proc, void **mask )
+{
+#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+#else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_get_affinity_mask_proc( proc, mask );
+#endif
+}
+
+
+/* -------------------------------------------------------------------------- */
+/*!
+@ingroup THREADPRIVATE
+@param loc source location information
+@param gtid global thread number
+@param cpy_size size of the cpy_data buffer
+@param cpy_data pointer to data to be copied
+@param cpy_func helper function to call for copying data
+@param didit flag variable: 1=single thread; 0=not single thread
+
+__kmpc_copyprivate implements the interface for the private data broadcast needed for
+the copyprivate clause associated with a single region in an OpenMP<sup>*</sup> program (both C and Fortran).
+All threads participating in the parallel region call this routine.
+One of the threads (called the single thread) should have the <tt>didit</tt> variable set to 1
+and all other threads should have that variable set to 0.
+All threads pass a pointer to a data buffer (cpy_data) that they have built.
+
+The OpenMP specification forbids the use of nowait on the single region when a copyprivate
+clause is present. However, @ref __kmpc_copyprivate implements a barrier internally to avoid
+race conditions, so the code generation for the single region should avoid generating a barrier
+after the call to @ref __kmpc_copyprivate.
+
+The <tt>gtid</tt> parameter is the global thread id for the current thread.
+The <tt>loc</tt> parameter is a pointer to source location information.
+
+Internal implementation: The single thread will first copy its descriptor address (cpy_data)
+to a team-private location, then the other threads will each call the function pointed to by
+the parameter cpy_func, which carries out the copy by copying the data using the cpy_data buffer.
+
+The cpy_func routine used for the copy and the contents of the data area defined by cpy_data
+and cpy_size may be built in any fashion that will allow the copy to be done. For instance,
+the cpy_data buffer can hold the actual data to be copied or it may hold a list of pointers
+to the data. The cpy_func routine must interpret the cpy_data buffer appropriately.
+
+The interface to cpy_func is as follows:
+@code
+void cpy_func( void *destination, void *source )
+@endcode
+where void *destination is the cpy_data pointer for the thread being copied to
+and void *source is the cpy_data pointer for the thread being copied from.
+*/
+void
+__kmpc_copyprivate( ident_t *loc, kmp_int32 gtid, size_t cpy_size, void *cpy_data, void(*cpy_func)(void*,void*), kmp_int32 didit )
+{
+ void **data_ptr;
+
+ KC_TRACE( 10, ("__kmpc_copyprivate: called T#%d\n", gtid ));
+
+ KMP_MB();
+
+ data_ptr = & __kmp_team_from_gtid( gtid )->t.t_copypriv_data;
+
+ if ( __kmp_env_consistency_check ) {
+ if ( loc == 0 ) {
+ KMP_WARNING( ConstructIdentInvalid );
+ }
+ }
+
+ /* ToDo: Optimize the following two barriers into some kind of split barrier */
+
+ if (didit) *data_ptr = cpy_data;
+
+ /* This barrier is not a barrier region boundary */
+#if USE_ITT_NOTIFY
+ __kmp_threads[gtid]->th.th_ident = loc;
+#endif
+ __kmp_barrier( bs_plain_barrier, gtid, FALSE , 0, NULL, NULL );
+
+ if (! didit) (*cpy_func)( cpy_data, *data_ptr );
+
+ /* Consider next barrier the user-visible barrier for barrier region boundaries */
+ /* Nesting checks are already handled by the single construct checks */
+
+#if USE_ITT_NOTIFY
+ __kmp_threads[gtid]->th.th_ident = loc; // TODO: check if it is needed (e.g. tasks can overwrite the location)
+#endif
+ __kmp_barrier( bs_plain_barrier, gtid, FALSE , 0, NULL, NULL );
+}
+
+/* -------------------------------------------------------------------------- */
+
+#define INIT_LOCK __kmp_init_user_lock_with_checks
+#define INIT_NESTED_LOCK __kmp_init_nested_user_lock_with_checks
+#define ACQUIRE_LOCK __kmp_acquire_user_lock_with_checks
+#define ACQUIRE_LOCK_TIMED __kmp_acquire_user_lock_with_checks_timed
+#define ACQUIRE_NESTED_LOCK __kmp_acquire_nested_user_lock_with_checks
+#define ACQUIRE_NESTED_LOCK_TIMED __kmp_acquire_nested_user_lock_with_checks_timed
+#define RELEASE_LOCK __kmp_release_user_lock_with_checks
+#define RELEASE_NESTED_LOCK __kmp_release_nested_user_lock_with_checks
+#define TEST_LOCK __kmp_test_user_lock_with_checks
+#define TEST_NESTED_LOCK __kmp_test_nested_user_lock_with_checks
+#define DESTROY_LOCK __kmp_destroy_user_lock_with_checks
+#define DESTROY_NESTED_LOCK __kmp_destroy_nested_user_lock_with_checks
+
+
+/*
+ * TODO: Make check abort messages use location info & pass it
+ * into with_checks routines
+ */
+
+#if KMP_USE_DYNAMIC_LOCK
+
+// internal lock initializer
+static __forceinline void
+__kmp_init_lock_with_hint(ident_t *loc, void **lock, kmp_dyna_lockseq_t seq)
+{
+ if (KMP_IS_D_LOCK(seq)) {
+ KMP_INIT_D_LOCK(lock, seq);
+#if USE_ITT_BUILD
+ __kmp_itt_lock_creating((kmp_user_lock_p)lock, NULL);
+#endif
+ } else {
+ KMP_INIT_I_LOCK(lock, seq);
+#if USE_ITT_BUILD
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __kmp_itt_lock_creating(ilk->lock, loc);
+#endif
+ }
+}
+
+// internal nest lock initializer
+static __forceinline void
+__kmp_init_nest_lock_with_hint(ident_t *loc, void **lock, kmp_dyna_lockseq_t seq)
+{
+#if KMP_USE_TSX
+ // Don't have nested lock implementation for speculative locks
+ if (seq == lockseq_hle || seq == lockseq_rtm || seq == lockseq_adaptive)
+ seq = __kmp_user_lock_seq;
+#endif
+ switch (seq) {
+ case lockseq_tas:
+ seq = lockseq_nested_tas;
+ break;
+#if KMP_USE_FUTEX
+ case lockseq_futex:
+ seq = lockseq_nested_futex;
+ break;
+#endif
+ case lockseq_ticket:
+ seq = lockseq_nested_ticket;
+ break;
+ case lockseq_queuing:
+ seq = lockseq_nested_queuing;
+ break;
+ case lockseq_drdpa:
+ seq = lockseq_nested_drdpa;
+ break;
+ default:
+ seq = lockseq_nested_queuing;
+ }
+ KMP_INIT_I_LOCK(lock, seq);
+#if USE_ITT_BUILD
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __kmp_itt_lock_creating(ilk->lock, loc);
+#endif
+}
+
+/* initialize the lock with a hint */
+void
+__kmpc_init_lock_with_hint(ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint)
+{
+ KMP_DEBUG_ASSERT(__kmp_init_serial);
+ if (__kmp_env_consistency_check && user_lock == NULL) {
+ KMP_FATAL(LockIsUninitialized, "omp_init_lock_with_hint");
+ }
+
+ __kmp_init_lock_with_hint(loc, user_lock, __kmp_map_hint_to_lock(hint));
+}
+
+/* initialize the lock with a hint */
+void
+__kmpc_init_nest_lock_with_hint(ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint)
+{
+ KMP_DEBUG_ASSERT(__kmp_init_serial);
+ if (__kmp_env_consistency_check && user_lock == NULL) {
+ KMP_FATAL(LockIsUninitialized, "omp_init_nest_lock_with_hint");
+ }
+
+ __kmp_init_nest_lock_with_hint(loc, user_lock, __kmp_map_hint_to_lock(hint));
+}
+
+#endif // KMP_USE_DYNAMIC_LOCK
+
+/* initialize the lock */
+void
+__kmpc_init_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+#if KMP_USE_DYNAMIC_LOCK
+ KMP_DEBUG_ASSERT(__kmp_init_serial);
+ if (__kmp_env_consistency_check && user_lock == NULL) {
+ KMP_FATAL(LockIsUninitialized, "omp_init_lock");
+ }
+ __kmp_init_lock_with_hint(loc, user_lock, __kmp_user_lock_seq);
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ static char const * const func = "omp_init_lock";
+ kmp_user_lock_p lck;
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ if ( __kmp_env_consistency_check ) {
+ if ( user_lock == NULL ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ }
+
+ KMP_CHECK_USER_LOCK_INIT();
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_user_lock_allocate( user_lock, gtid, 0 );
+ }
+ INIT_LOCK( lck );
+ __kmp_set_user_lock_location( lck, loc );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_init_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_init_lock)((uint64_t) lck);
+ }
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_creating( lck );
+#endif /* USE_ITT_BUILD */
+
+#endif // KMP_USE_DYNAMIC_LOCK
+} // __kmpc_init_lock
+
+/* initialize the lock */
+void
+__kmpc_init_nest_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+#if KMP_USE_DYNAMIC_LOCK
+
+ KMP_DEBUG_ASSERT(__kmp_init_serial);
+ if (__kmp_env_consistency_check && user_lock == NULL) {
+ KMP_FATAL(LockIsUninitialized, "omp_init_nest_lock");
+ }
+ __kmp_init_nest_lock_with_hint(loc, user_lock, __kmp_user_lock_seq);
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ static char const * const func = "omp_init_nest_lock";
+ kmp_user_lock_p lck;
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ if ( __kmp_env_consistency_check ) {
+ if ( user_lock == NULL ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ }
+
+ KMP_CHECK_USER_LOCK_INIT();
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_user_lock_allocate( user_lock, gtid, 0 );
+ }
+
+ INIT_NESTED_LOCK( lck );
+ __kmp_set_user_lock_location( lck, loc );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_init_nest_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_init_nest_lock)((uint64_t) lck);
+ }
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_creating( lck );
+#endif /* USE_ITT_BUILD */
+
+#endif // KMP_USE_DYNAMIC_LOCK
+} // __kmpc_init_nest_lock
+
+void
+__kmpc_destroy_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+#if KMP_USE_DYNAMIC_LOCK
+
+# if USE_ITT_BUILD
+ kmp_user_lock_p lck;
+ if (KMP_EXTRACT_D_TAG(user_lock) == 0) {
+ lck = ((kmp_indirect_lock_t *)KMP_LOOKUP_I_LOCK(user_lock))->lock;
+ } else {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+ __kmp_itt_lock_destroyed(lck);
+# endif
+ KMP_D_LOCK_FUNC(user_lock, destroy)((kmp_dyna_lock_t *)user_lock);
+#else
+ kmp_user_lock_p lck;
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_destroy_lock" );
+ }
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_destroy_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_destroy_lock)((uint64_t) lck);
+ }
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_destroyed( lck );
+#endif /* USE_ITT_BUILD */
+ DESTROY_LOCK( lck );
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ ;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ ;
+ }
+#endif
+ else {
+ __kmp_user_lock_free( user_lock, gtid, lck );
+ }
+#endif // KMP_USE_DYNAMIC_LOCK
+} // __kmpc_destroy_lock
+
+/* destroy the lock */
+void
+__kmpc_destroy_nest_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+#if KMP_USE_DYNAMIC_LOCK
+
+# if USE_ITT_BUILD
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(user_lock);
+ __kmp_itt_lock_destroyed(ilk->lock);
+# endif
+ KMP_D_LOCK_FUNC(user_lock, destroy)((kmp_dyna_lock_t *)user_lock);
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_destroy_nest_lock" );
+ }
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_destroy_nest_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_destroy_nest_lock)((uint64_t) lck);
+ }
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_destroyed( lck );
+#endif /* USE_ITT_BUILD */
+
+ DESTROY_NESTED_LOCK( lck );
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+ ;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ ;
+ }
+#endif
+ else {
+ __kmp_user_lock_free( user_lock, gtid, lck );
+ }
+#endif // KMP_USE_DYNAMIC_LOCK
+} // __kmpc_destroy_nest_lock
+
+void
+__kmpc_set_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+ KMP_COUNT_BLOCK(OMP_set_lock);
+#if KMP_USE_DYNAMIC_LOCK
+ int tag = KMP_EXTRACT_D_TAG(user_lock);
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring((kmp_user_lock_p)user_lock); // itt function will get to the right lock object.
+# endif
+# if KMP_USE_INLINED_TAS
+ if (tag == locktag_tas && !__kmp_env_consistency_check) {
+ KMP_ACQUIRE_TAS_LOCK(user_lock, gtid);
+ } else
+# elif KMP_USE_INLINED_FUTEX
+ if (tag == locktag_futex && !__kmp_env_consistency_check) {
+ KMP_ACQUIRE_FUTEX_LOCK(user_lock, gtid);
+ } else
+# endif
+ {
+ __kmp_direct_set[tag]((kmp_dyna_lock_t *)user_lock, gtid);
+ }
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquired((kmp_user_lock_p)user_lock);
+# endif
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_set_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring( lck );
+#endif /* USE_ITT_BUILD */
+
+ ACQUIRE_LOCK( lck, gtid );
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquired( lck );
+#endif /* USE_ITT_BUILD */
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_acquired_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_acquired_lock)((uint64_t) lck);
+ }
+#endif
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+void
+__kmpc_set_nest_lock( ident_t * loc, kmp_int32 gtid, void ** user_lock ) {
+#if KMP_USE_DYNAMIC_LOCK
+
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring((kmp_user_lock_p)user_lock);
+# endif
+ KMP_D_LOCK_FUNC(user_lock, set)((kmp_dyna_lock_t *)user_lock, gtid);
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquired((kmp_user_lock_p)user_lock);
+#endif
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ // missing support here: need to know whether acquired first or not
+ }
+#endif
+
+#else // KMP_USE_DYNAMIC_LOCK
+ int acquire_status;
+ kmp_user_lock_p lck;
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_set_nest_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring( lck );
+#endif /* USE_ITT_BUILD */
+
+ ACQUIRE_NESTED_LOCK( lck, gtid, &acquire_status );
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquired( lck );
+#endif /* USE_ITT_BUILD */
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ if (acquire_status == KMP_LOCK_ACQUIRED_FIRST) {
+ if(ompt_callbacks.ompt_callback(ompt_event_acquired_nest_lock_first))
+ ompt_callbacks.ompt_callback(ompt_event_acquired_nest_lock_first)((uint64_t) lck);
+ } else {
+ if(ompt_callbacks.ompt_callback(ompt_event_acquired_nest_lock_next))
+ ompt_callbacks.ompt_callback(ompt_event_acquired_nest_lock_next)((uint64_t) lck);
+ }
+ }
+#endif
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+void
+__kmpc_unset_lock( ident_t *loc, kmp_int32 gtid, void **user_lock )
+{
+#if KMP_USE_DYNAMIC_LOCK
+
+ int tag = KMP_EXTRACT_D_TAG(user_lock);
+# if USE_ITT_BUILD
+ __kmp_itt_lock_releasing((kmp_user_lock_p)user_lock);
+# endif
+# if KMP_USE_INLINED_TAS
+ if (tag == locktag_tas && !__kmp_env_consistency_check) {
+ KMP_RELEASE_TAS_LOCK(user_lock, gtid);
+ } else
+# elif KMP_USE_INLINED_FUTEX
+ if (tag == locktag_futex && !__kmp_env_consistency_check) {
+ KMP_RELEASE_FUTEX_LOCK(user_lock, gtid);
+ } else
+# endif
+ {
+ __kmp_direct_unset[tag]((kmp_dyna_lock_t *)user_lock, gtid);
+ }
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+
+ /* Can't use serial interval since not block structured */
+ /* release the lock */
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+ // "fast" path implemented to fix customer performance issue
+#if USE_ITT_BUILD
+ __kmp_itt_lock_releasing( (kmp_user_lock_p)user_lock );
+#endif /* USE_ITT_BUILD */
+ TCW_4(((kmp_user_lock_p)user_lock)->tas.lk.poll, 0);
+ KMP_MB();
+ return;
+#else
+ lck = (kmp_user_lock_p)user_lock;
+#endif
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_unset_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_releasing( lck );
+#endif /* USE_ITT_BUILD */
+
+ RELEASE_LOCK( lck, gtid );
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_release_lock)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_lock)((uint64_t) lck);
+ }
+#endif
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+/* release the lock */
+void
+__kmpc_unset_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock )
+{
+#if KMP_USE_DYNAMIC_LOCK
+
+# if USE_ITT_BUILD
+ __kmp_itt_lock_releasing((kmp_user_lock_p)user_lock);
+# endif
+ KMP_D_LOCK_FUNC(user_lock, unset)((kmp_dyna_lock_t *)user_lock, gtid);
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+
+ /* Can't use serial interval since not block structured */
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+ // "fast" path implemented to fix customer performance issue
+ kmp_tas_lock_t *tl = (kmp_tas_lock_t*)user_lock;
+#if USE_ITT_BUILD
+ __kmp_itt_lock_releasing( (kmp_user_lock_p)user_lock );
+#endif /* USE_ITT_BUILD */
+ if ( --(tl->lk.depth_locked) == 0 ) {
+ TCW_4(tl->lk.poll, 0);
+ }
+ KMP_MB();
+ return;
+#else
+ lck = (kmp_user_lock_p)user_lock;
+#endif
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_unset_nest_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_releasing( lck );
+#endif /* USE_ITT_BUILD */
+
+ int release_status;
+ release_status = RELEASE_NESTED_LOCK( lck, gtid );
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled) {
+ if (release_status == KMP_LOCK_RELEASED) {
+ if (ompt_callbacks.ompt_callback(ompt_event_release_nest_lock_last)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_nest_lock_last)(
+ (uint64_t) lck);
+ }
+ } else if (ompt_callbacks.ompt_callback(ompt_event_release_nest_lock_prev)) {
+ ompt_callbacks.ompt_callback(ompt_event_release_nest_lock_prev)(
+ (uint64_t) lck);
+ }
+ }
+#endif
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+/* try to acquire the lock */
+int
+__kmpc_test_lock( ident_t *loc, kmp_int32 gtid, void **user_lock )
+{
+ KMP_COUNT_BLOCK(OMP_test_lock);
+
+#if KMP_USE_DYNAMIC_LOCK
+ int rc;
+ int tag = KMP_EXTRACT_D_TAG(user_lock);
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring((kmp_user_lock_p)user_lock);
+# endif
+# if KMP_USE_INLINED_TAS
+ if (tag == locktag_tas && !__kmp_env_consistency_check) {
+ KMP_TEST_TAS_LOCK(user_lock, gtid, rc);
+ } else
+# elif KMP_USE_INLINED_FUTEX
+ if (tag == locktag_futex && !__kmp_env_consistency_check) {
+ KMP_TEST_FUTEX_LOCK(user_lock, gtid, rc);
+ } else
+# endif
+ {
+ rc = __kmp_direct_test[tag]((kmp_dyna_lock_t *)user_lock, gtid);
+ }
+ if (rc) {
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquired((kmp_user_lock_p)user_lock);
+# endif
+ return FTN_TRUE;
+ } else {
+# if USE_ITT_BUILD
+ __kmp_itt_lock_cancelled((kmp_user_lock_p)user_lock);
+# endif
+ return FTN_FALSE;
+ }
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+ int rc;
+
+ if ( ( __kmp_user_lock_kind == lk_tas )
+ && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_test_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring( lck );
+#endif /* USE_ITT_BUILD */
+
+ rc = TEST_LOCK( lck, gtid );
+#if USE_ITT_BUILD
+ if ( rc ) {
+ __kmp_itt_lock_acquired( lck );
+ } else {
+ __kmp_itt_lock_cancelled( lck );
+ }
+#endif /* USE_ITT_BUILD */
+ return ( rc ? FTN_TRUE : FTN_FALSE );
+
+ /* Can't use serial interval since not block structured */
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+/* try to acquire the lock */
+int
+__kmpc_test_nest_lock( ident_t *loc, kmp_int32 gtid, void **user_lock )
+{
+#if KMP_USE_DYNAMIC_LOCK
+ int rc;
+# if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring((kmp_user_lock_p)user_lock);
+# endif
+ rc = KMP_D_LOCK_FUNC(user_lock, test)((kmp_dyna_lock_t *)user_lock, gtid);
+# if USE_ITT_BUILD
+ if (rc) {
+ __kmp_itt_lock_acquired((kmp_user_lock_p)user_lock);
+ } else {
+ __kmp_itt_lock_cancelled((kmp_user_lock_p)user_lock);
+ }
+# endif
+ return rc;
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ kmp_user_lock_p lck;
+ int rc;
+
+ if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
+ + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#if KMP_USE_FUTEX
+ else if ( ( __kmp_user_lock_kind == lk_futex )
+ && ( sizeof( lck->futex.lk.poll ) + sizeof( lck->futex.lk.depth_locked )
+ <= OMP_NEST_LOCK_T_SIZE ) ) {
+ lck = (kmp_user_lock_p)user_lock;
+ }
+#endif
+ else {
+ lck = __kmp_lookup_user_lock( user_lock, "omp_test_nest_lock" );
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_lock_acquiring( lck );
+#endif /* USE_ITT_BUILD */
+
+ rc = TEST_NESTED_LOCK( lck, gtid );
+#if USE_ITT_BUILD
+ if ( rc ) {
+ __kmp_itt_lock_acquired( lck );
+ } else {
+ __kmp_itt_lock_cancelled( lck );
+ }
+#endif /* USE_ITT_BUILD */
+ return rc;
+
+ /* Can't use serial interval since not block structured */
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------*/
+
+/*
+ * Interface to fast scalable reduce methods routines
+ */
+
+// keep the selected method in a thread local structure for cross-function usage: will be used in __kmpc_end_reduce* functions;
+// another solution: to re-determine the method one more time in __kmpc_end_reduce* functions (new prototype required then)
+// AT: which solution is better?
+#define __KMP_SET_REDUCTION_METHOD(gtid,rmethod) \
+ ( ( __kmp_threads[ ( gtid ) ] -> th.th_local.packed_reduction_method ) = ( rmethod ) )
+
+#define __KMP_GET_REDUCTION_METHOD(gtid) \
+ ( __kmp_threads[ ( gtid ) ] -> th.th_local.packed_reduction_method )
+
+// description of the packed_reduction_method variable: look at the macros in kmp.h
+
+
+// used in a critical section reduce block
+static __forceinline void
+__kmp_enter_critical_section_reduce_block( ident_t * loc, kmp_int32 global_tid, kmp_critical_name * crit ) {
+
+ // this lock was visible to a customer and to the threading profile tool as a serial overhead span
+ // (although it's used for an internal purpose only)
+ // why was it visible in previous implementation?
+ // should we keep it visible in new reduce block?
+ kmp_user_lock_p lck;
+
+#if KMP_USE_DYNAMIC_LOCK
+
+ kmp_dyna_lock_t *lk = (kmp_dyna_lock_t *)crit;
+ // Check if it is initialized.
+ if (*lk == 0) {
+ if (KMP_IS_D_LOCK(__kmp_user_lock_seq)) {
+ KMP_COMPARE_AND_STORE_ACQ32((volatile kmp_int32 *)crit, 0, KMP_GET_D_TAG(__kmp_user_lock_seq));
+ } else {
+ __kmp_init_indirect_csptr(crit, loc, global_tid, KMP_GET_I_TAG(__kmp_user_lock_seq));
+ }
+ }
+ // Branch for accessing the actual lock object and set operation. This branching is inevitable since
+ // this lock initialization does not follow the normal dispatch path (lock table is not used).
+ if (KMP_EXTRACT_D_TAG(lk) != 0) {
+ lck = (kmp_user_lock_p)lk;
+ KMP_DEBUG_ASSERT(lck != NULL);
+ if (__kmp_env_consistency_check) {
+ __kmp_push_sync(global_tid, ct_critical, loc, lck, __kmp_user_lock_seq);
+ }
+ KMP_D_LOCK_FUNC(lk, set)(lk, global_tid);
+ } else {
+ kmp_indirect_lock_t *ilk = *((kmp_indirect_lock_t **)lk);
+ lck = ilk->lock;
+ KMP_DEBUG_ASSERT(lck != NULL);
+ if (__kmp_env_consistency_check) {
+ __kmp_push_sync(global_tid, ct_critical, loc, lck, __kmp_user_lock_seq);
+ }
+ KMP_I_LOCK_FUNC(ilk, set)(lck, global_tid);
+ }
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ // We know that the fast reduction code is only emitted by Intel compilers
+ // with 32 byte critical sections. If there isn't enough space, then we
+ // have to use a pointer.
+ if ( __kmp_base_user_lock_size <= INTEL_CRITICAL_SIZE ) {
+ lck = (kmp_user_lock_p)crit;
+ }
+ else {
+ lck = __kmp_get_critical_section_ptr( crit, loc, global_tid );
+ }
+ KMP_DEBUG_ASSERT( lck != NULL );
+
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_critical, loc, lck );
+
+ __kmp_acquire_user_lock_with_checks( lck, global_tid );
+
+#endif // KMP_USE_DYNAMIC_LOCK
+}
+
+// used in a critical section reduce block
+static __forceinline void
+__kmp_end_critical_section_reduce_block( ident_t * loc, kmp_int32 global_tid, kmp_critical_name * crit ) {
+
+ kmp_user_lock_p lck;
+
+#if KMP_USE_DYNAMIC_LOCK
+
+ if (KMP_IS_D_LOCK(__kmp_user_lock_seq)) {
+ lck = (kmp_user_lock_p)crit;
+ if (__kmp_env_consistency_check)
+ __kmp_pop_sync(global_tid, ct_critical, loc);
+ KMP_D_LOCK_FUNC(lck, unset)((kmp_dyna_lock_t *)lck, global_tid);
+ } else {
+ kmp_indirect_lock_t *ilk = (kmp_indirect_lock_t *)TCR_PTR(*((kmp_indirect_lock_t **)crit));
+ if (__kmp_env_consistency_check)
+ __kmp_pop_sync(global_tid, ct_critical, loc);
+ KMP_I_LOCK_FUNC(ilk, unset)(ilk->lock, global_tid);
+ }
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+ // We know that the fast reduction code is only emitted by Intel compilers with 32 byte critical
+ // sections. If there isn't enough space, then we have to use a pointer.
+ if ( __kmp_base_user_lock_size > 32 ) {
+ lck = *( (kmp_user_lock_p *) crit );
+ KMP_ASSERT( lck != NULL );
+ } else {
+ lck = (kmp_user_lock_p) crit;
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( global_tid, ct_critical, loc );
+
+ __kmp_release_user_lock_with_checks( lck, global_tid );
+
+#endif // KMP_USE_DYNAMIC_LOCK
+} // __kmp_end_critical_section_reduce_block
+
+
+/* 2.a.i. Reduce Block without a terminating barrier */
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid global thread number
+@param num_vars number of items (variables) to be reduced
+@param reduce_size size of data in bytes to be reduced
+@param reduce_data pointer to data to be reduced
+@param reduce_func callback function providing reduction operation on two operands and returning result of reduction in lhs_data
+@param lck pointer to the unique lock data structure
+@result 1 for the master thread, 0 for all other team threads, 2 for all team threads if atomic reduction needed
+
+The nowait version is used for a reduce clause with the nowait argument.
+*/
+kmp_int32
+__kmpc_reduce_nowait(
+ ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size, void *reduce_data, void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck ) {
+
+ KMP_COUNT_BLOCK(REDUCE_nowait);
+ int retval = 0;
+ PACKED_REDUCTION_METHOD_T packed_reduction_method;
+#if OMP_40_ENABLED
+ kmp_team_t *team;
+ kmp_info_t *th;
+ int teams_swapped = 0, task_state;
+#endif
+ KA_TRACE( 10, ( "__kmpc_reduce_nowait() enter: called T#%d\n", global_tid ) );
+
+ // why do we need this initialization here at all?
+ // Reduction clause can not be used as a stand-alone directive.
+
+ // do not call __kmp_serial_initialize(), it will be called by __kmp_parallel_initialize() if needed
+ // possible detection of false-positive race by the threadchecker ???
+ if( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+ // check correctness of reduce block nesting
+#if KMP_USE_DYNAMIC_LOCK
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_reduce, loc, NULL, 0 );
+#else
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_reduce, loc, NULL );
+#endif
+
+#if OMP_40_ENABLED
+ th = __kmp_thread_from_gtid(global_tid);
+ if( th->th.th_teams_microtask ) { // AC: check if we are inside the teams construct?
+ team = th->th.th_team;
+ if( team->t.t_level == th->th.th_teams_level ) {
+ // this is reduction at teams construct
+ KMP_DEBUG_ASSERT(!th->th.th_info.ds.ds_tid); // AC: check that tid == 0
+ // Let's swap teams temporarily for the reduction barrier
+ teams_swapped = 1;
+ th->th.th_info.ds.ds_tid = team->t.t_master_tid;
+ th->th.th_team = team->t.t_parent;
+ th->th.th_team_nproc = th->th.th_team->t.t_nproc;
+ th->th.th_task_team = th->th.th_team->t.t_task_team[0];
+ task_state = th->th.th_task_state;
+ th->th.th_task_state = 0;
+ }
+ }
+#endif // OMP_40_ENABLED
+
+ // packed_reduction_method value will be reused by __kmp_end_reduce* function, the value should be kept in a variable
+ // the variable should be either a construct-specific or thread-specific property, not a team specific property
+ // (a thread can reach the next reduce block on the next construct, reduce method may differ on the next construct)
+ // an ident_t "loc" parameter could be used as a construct-specific property (what if loc == 0?)
+ // (if both construct-specific and team-specific variables were shared, then unness extra syncs should be needed)
+ // a thread-specific variable is better regarding two issues above (next construct and extra syncs)
+ // a thread-specific "th_local.reduction_method" variable is used currently
+ // each thread executes 'determine' and 'set' lines (no need to execute by one thread, to avoid unness extra syncs)
+
+ packed_reduction_method = __kmp_determine_reduction_method( loc, global_tid, num_vars, reduce_size, reduce_data, reduce_func, lck );
+ __KMP_SET_REDUCTION_METHOD( global_tid, packed_reduction_method );
+
+ if( packed_reduction_method == critical_reduce_block ) {
+
+ __kmp_enter_critical_section_reduce_block( loc, global_tid, lck );
+ retval = 1;
+
+ } else if( packed_reduction_method == empty_reduce_block ) {
+
+ // usage: if team size == 1, no synchronization is required ( Intel platforms only )
+ retval = 1;
+
+ } else if( packed_reduction_method == atomic_reduce_block ) {
+
+ retval = 2;
+
+ // all threads should do this pop here (because __kmpc_end_reduce_nowait() won't be called by the code gen)
+ // (it's not quite good, because the checking block has been closed by this 'pop',
+ // but atomic operation has not been executed yet, will be executed slightly later, literally on next instruction)
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( global_tid, ct_reduce, loc );
+
+ } else if( TEST_REDUCTION_METHOD( packed_reduction_method, tree_reduce_block ) ) {
+
+ //AT: performance issue: a real barrier here
+ //AT: (if master goes slow, other threads are blocked here waiting for the master to come and release them)
+ //AT: (it's not what a customer might expect specifying NOWAIT clause)
+ //AT: (specifying NOWAIT won't result in improvement of performance, it'll be confusing to a customer)
+ //AT: another implementation of *barrier_gather*nowait() (or some other design) might go faster
+ // and be more in line with sense of NOWAIT
+ //AT: TO DO: do epcc test and compare times
+
+ // this barrier should be invisible to a customer and to the threading profile tool
+ // (it's neither a terminating barrier nor customer's code, it's used for an internal purpose)
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ retval = __kmp_barrier( UNPACK_REDUCTION_BARRIER( packed_reduction_method ), global_tid, FALSE, reduce_size, reduce_data, reduce_func );
+ retval = ( retval != 0 ) ? ( 0 ) : ( 1 );
+
+ // all other workers except master should do this pop here
+ // ( none of other workers will get to __kmpc_end_reduce_nowait() )
+ if ( __kmp_env_consistency_check ) {
+ if( retval == 0 ) {
+ __kmp_pop_sync( global_tid, ct_reduce, loc );
+ }
+ }
+
+ } else {
+
+ // should never reach this block
+ KMP_ASSERT( 0 ); // "unexpected method"
+
+ }
+#if OMP_40_ENABLED
+ if( teams_swapped ) {
+ // Restore thread structure
+ th->th.th_info.ds.ds_tid = 0;
+ th->th.th_team = team;
+ th->th.th_team_nproc = team->t.t_nproc;
+ th->th.th_task_team = team->t.t_task_team[task_state];
+ th->th.th_task_state = task_state;
+ }
+#endif
+ KA_TRACE( 10, ( "__kmpc_reduce_nowait() exit: called T#%d: method %08x, returns %08x\n", global_tid, packed_reduction_method, retval ) );
+
+ return retval;
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid global thread id.
+@param lck pointer to the unique lock data structure
+
+Finish the execution of a reduce nowait.
+*/
+void
+__kmpc_end_reduce_nowait( ident_t *loc, kmp_int32 global_tid, kmp_critical_name *lck ) {
+
+ PACKED_REDUCTION_METHOD_T packed_reduction_method;
+
+ KA_TRACE( 10, ( "__kmpc_end_reduce_nowait() enter: called T#%d\n", global_tid ) );
+
+ packed_reduction_method = __KMP_GET_REDUCTION_METHOD( global_tid );
+
+ if( packed_reduction_method == critical_reduce_block ) {
+
+ __kmp_end_critical_section_reduce_block( loc, global_tid, lck );
+
+ } else if( packed_reduction_method == empty_reduce_block ) {
+
+ // usage: if team size == 1, no synchronization is required ( on Intel platforms only )
+
+ } else if( packed_reduction_method == atomic_reduce_block ) {
+
+ // neither master nor other workers should get here
+ // (code gen does not generate this call in case 2: atomic reduce block)
+ // actually it's better to remove this elseif at all;
+ // after removal this value will checked by the 'else' and will assert
+
+ } else if( TEST_REDUCTION_METHOD( packed_reduction_method, tree_reduce_block ) ) {
+
+ // only master gets here
+
+ } else {
+
+ // should never reach this block
+ KMP_ASSERT( 0 ); // "unexpected method"
+
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( global_tid, ct_reduce, loc );
+
+ KA_TRACE( 10, ( "__kmpc_end_reduce_nowait() exit: called T#%d: method %08x\n", global_tid, packed_reduction_method ) );
+
+ return;
+}
+
+/* 2.a.ii. Reduce Block with a terminating barrier */
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid global thread number
+@param num_vars number of items (variables) to be reduced
+@param reduce_size size of data in bytes to be reduced
+@param reduce_data pointer to data to be reduced
+@param reduce_func callback function providing reduction operation on two operands and returning result of reduction in lhs_data
+@param lck pointer to the unique lock data structure
+@result 1 for the master thread, 0 for all other team threads, 2 for all team threads if atomic reduction needed
+
+A blocking reduce that includes an implicit barrier.
+*/
+kmp_int32
+__kmpc_reduce(
+ ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size, void *reduce_data,
+ void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck )
+{
+ KMP_COUNT_BLOCK(REDUCE_wait);
+ int retval = 0;
+ PACKED_REDUCTION_METHOD_T packed_reduction_method;
+
+ KA_TRACE( 10, ( "__kmpc_reduce() enter: called T#%d\n", global_tid ) );
+
+ // why do we need this initialization here at all?
+ // Reduction clause can not be a stand-alone directive.
+
+ // do not call __kmp_serial_initialize(), it will be called by __kmp_parallel_initialize() if needed
+ // possible detection of false-positive race by the threadchecker ???
+ if( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+ // check correctness of reduce block nesting
+#if KMP_USE_DYNAMIC_LOCK
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_reduce, loc, NULL, 0 );
+#else
+ if ( __kmp_env_consistency_check )
+ __kmp_push_sync( global_tid, ct_reduce, loc, NULL );
+#endif
+
+ packed_reduction_method = __kmp_determine_reduction_method( loc, global_tid, num_vars, reduce_size, reduce_data, reduce_func, lck );
+ __KMP_SET_REDUCTION_METHOD( global_tid, packed_reduction_method );
+
+ if( packed_reduction_method == critical_reduce_block ) {
+
+ __kmp_enter_critical_section_reduce_block( loc, global_tid, lck );
+ retval = 1;
+
+ } else if( packed_reduction_method == empty_reduce_block ) {
+
+ // usage: if team size == 1, no synchronization is required ( Intel platforms only )
+ retval = 1;
+
+ } else if( packed_reduction_method == atomic_reduce_block ) {
+
+ retval = 2;
+
+ } else if( TEST_REDUCTION_METHOD( packed_reduction_method, tree_reduce_block ) ) {
+
+ //case tree_reduce_block:
+ // this barrier should be visible to a customer and to the threading profile tool
+ // (it's a terminating barrier on constructs if NOWAIT not specified)
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc; // needed for correct notification of frames
+#endif
+ retval = __kmp_barrier( UNPACK_REDUCTION_BARRIER( packed_reduction_method ), global_tid, TRUE, reduce_size, reduce_data, reduce_func );
+ retval = ( retval != 0 ) ? ( 0 ) : ( 1 );
+
+ // all other workers except master should do this pop here
+ // ( none of other workers except master will enter __kmpc_end_reduce() )
+ if ( __kmp_env_consistency_check ) {
+ if( retval == 0 ) { // 0: all other workers; 1: master
+ __kmp_pop_sync( global_tid, ct_reduce, loc );
+ }
+ }
+
+ } else {
+
+ // should never reach this block
+ KMP_ASSERT( 0 ); // "unexpected method"
+
+ }
+
+ KA_TRACE( 10, ( "__kmpc_reduce() exit: called T#%d: method %08x, returns %08x\n", global_tid, packed_reduction_method, retval ) );
+
+ return retval;
+}
+
+/*!
+@ingroup SYNCHRONIZATION
+@param loc source location information
+@param global_tid global thread id.
+@param lck pointer to the unique lock data structure
+
+Finish the execution of a blocking reduce.
+The <tt>lck</tt> pointer must be the same as that used in the corresponding start function.
+*/
+void
+__kmpc_end_reduce( ident_t *loc, kmp_int32 global_tid, kmp_critical_name *lck ) {
+
+ PACKED_REDUCTION_METHOD_T packed_reduction_method;
+
+ KA_TRACE( 10, ( "__kmpc_end_reduce() enter: called T#%d\n", global_tid ) );
+
+ packed_reduction_method = __KMP_GET_REDUCTION_METHOD( global_tid );
+
+ // this barrier should be visible to a customer and to the threading profile tool
+ // (it's a terminating barrier on constructs if NOWAIT not specified)
+
+ if( packed_reduction_method == critical_reduce_block ) {
+
+ __kmp_end_critical_section_reduce_block( loc, global_tid, lck );
+
+ // TODO: implicit barrier: should be exposed
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ __kmp_barrier( bs_plain_barrier, global_tid, FALSE, 0, NULL, NULL );
+
+ } else if( packed_reduction_method == empty_reduce_block ) {
+
+ // usage: if team size == 1, no synchronization is required ( Intel platforms only )
+
+ // TODO: implicit barrier: should be exposed
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ __kmp_barrier( bs_plain_barrier, global_tid, FALSE, 0, NULL, NULL );
+
+ } else if( packed_reduction_method == atomic_reduce_block ) {
+
+ // TODO: implicit barrier: should be exposed
+#if USE_ITT_NOTIFY
+ __kmp_threads[global_tid]->th.th_ident = loc;
+#endif
+ __kmp_barrier( bs_plain_barrier, global_tid, FALSE, 0, NULL, NULL );
+
+ } else if( TEST_REDUCTION_METHOD( packed_reduction_method, tree_reduce_block ) ) {
+
+ // only master executes here (master releases all other workers)
+ __kmp_end_split_barrier( UNPACK_REDUCTION_BARRIER( packed_reduction_method ), global_tid );
+
+ } else {
+
+ // should never reach this block
+ KMP_ASSERT( 0 ); // "unexpected method"
+
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( global_tid, ct_reduce, loc );
+
+ KA_TRACE( 10, ( "__kmpc_end_reduce() exit: called T#%d: method %08x\n", global_tid, packed_reduction_method ) );
+
+ return;
+}
+
+#undef __KMP_GET_REDUCTION_METHOD
+#undef __KMP_SET_REDUCTION_METHOD
+
+/*-- end of interface to fast scalable reduce routines ---------------------------------------------------------------*/
+
+kmp_uint64
+__kmpc_get_taskid() {
+
+ kmp_int32 gtid;
+ kmp_info_t * thread;
+
+ gtid = __kmp_get_gtid();
+ if ( gtid < 0 ) {
+ return 0;
+ }; // if
+ thread = __kmp_thread_from_gtid( gtid );
+ return thread->th.th_current_task->td_task_id;
+
+} // __kmpc_get_taskid
+
+
+kmp_uint64
+__kmpc_get_parent_taskid() {
+
+ kmp_int32 gtid;
+ kmp_info_t * thread;
+ kmp_taskdata_t * parent_task;
+
+ gtid = __kmp_get_gtid();
+ if ( gtid < 0 ) {
+ return 0;
+ }; // if
+ thread = __kmp_thread_from_gtid( gtid );
+ parent_task = thread->th.th_current_task->td_parent;
+ return ( parent_task == NULL ? 0 : parent_task->td_task_id );
+
+} // __kmpc_get_parent_taskid
+
+void __kmpc_place_threads(int nS, int sO, int nC, int cO, int nT)
+{
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ }
+ __kmp_place_num_sockets = nS;
+ __kmp_place_socket_offset = sO;
+ __kmp_place_num_cores = nC;
+ __kmp_place_core_offset = cO;
+ __kmp_place_num_threads_per_core = nT;
+}
+
+#if OMP_45_ENABLED
+/*!
+@ingroup WORK_SHARING
+@param loc source location information.
+@param gtid global thread number.
+@param num_dims number of associated doacross loops.
+@param dims info on loops bounds.
+
+Initialize doacross loop information.
+Expect compiler send us inclusive bounds,
+e.g. for(i=2;i<9;i+=2) lo=2, up=8, st=2.
+*/
+void
+__kmpc_doacross_init(ident_t *loc, int gtid, int num_dims, struct kmp_dim * dims)
+{
+ int j, idx;
+ kmp_int64 last, trace_count;
+ kmp_info_t *th = __kmp_threads[gtid];
+ kmp_team_t *team = th->th.th_team;
+ kmp_uint32 *flags;
+ kmp_disp_t *pr_buf = th->th.th_dispatch;
+ dispatch_shared_info_t *sh_buf;
+
+ KA_TRACE(20,("__kmpc_doacross_init() enter: called T#%d, num dims %d, active %d\n",
+ gtid, num_dims, !team->t.t_serialized));
+ KMP_DEBUG_ASSERT(dims != NULL);
+ KMP_DEBUG_ASSERT(num_dims > 0);
+
+ if( team->t.t_serialized ) {
+ KA_TRACE(20,("__kmpc_doacross_init() exit: serialized team\n"));
+ return; // no dependencies if team is serialized
+ }
+ KMP_DEBUG_ASSERT(team->t.t_nproc > 1);
+ idx = pr_buf->th_doacross_buf_idx++; // Increment index of shared buffer for the next loop
+ sh_buf = &team->t.t_disp_buffer[idx % __kmp_dispatch_num_buffers];
+
+ // Save bounds info into allocated private buffer
+ KMP_DEBUG_ASSERT(pr_buf->th_doacross_info == NULL);
+ pr_buf->th_doacross_info =
+ (kmp_int64*)__kmp_thread_malloc(th, sizeof(kmp_int64)*(4 * num_dims + 1));
+ KMP_DEBUG_ASSERT(pr_buf->th_doacross_info != NULL);
+ pr_buf->th_doacross_info[0] = (kmp_int64)num_dims; // first element is number of dimensions
+ // Save also address of num_done in order to access it later without knowing the buffer index
+ pr_buf->th_doacross_info[1] = (kmp_int64)&sh_buf->doacross_num_done;
+ pr_buf->th_doacross_info[2] = dims[0].lo;
+ pr_buf->th_doacross_info[3] = dims[0].up;
+ pr_buf->th_doacross_info[4] = dims[0].st;
+ last = 5;
+ for( j = 1; j < num_dims; ++j ) {
+ kmp_int64 range_length; // To keep ranges of all dimensions but the first dims[0]
+ if( dims[j].st == 1 ) { // most common case
+ // AC: should we care of ranges bigger than LLONG_MAX? (not for now)
+ range_length = dims[j].up - dims[j].lo + 1;
+ } else {
+ if( dims[j].st > 0 ) {
+ KMP_DEBUG_ASSERT(dims[j].up > dims[j].lo);
+ range_length = (kmp_uint64)(dims[j].up - dims[j].lo) / dims[j].st + 1;
+ } else { // negative increment
+ KMP_DEBUG_ASSERT(dims[j].lo > dims[j].up);
+ range_length = (kmp_uint64)(dims[j].lo - dims[j].up) / (-dims[j].st) + 1;
+ }
+ }
+ pr_buf->th_doacross_info[last++] = range_length;
+ pr_buf->th_doacross_info[last++] = dims[j].lo;
+ pr_buf->th_doacross_info[last++] = dims[j].up;
+ pr_buf->th_doacross_info[last++] = dims[j].st;
+ }
+
+ // Compute total trip count.
+ // Start with range of dims[0] which we don't need to keep in the buffer.
+ if( dims[0].st == 1 ) { // most common case
+ trace_count = dims[0].up - dims[0].lo + 1;
+ } else if( dims[0].st > 0 ) {
+ KMP_DEBUG_ASSERT(dims[0].up > dims[0].lo);
+ trace_count = (kmp_uint64)(dims[0].up - dims[0].lo) / dims[0].st + 1;
+ } else { // negative increment
+ KMP_DEBUG_ASSERT(dims[0].lo > dims[0].up);
+ trace_count = (kmp_uint64)(dims[0].lo - dims[0].up) / (-dims[0].st) + 1;
+ }
+ for( j = 1; j < num_dims; ++j ) {
+ trace_count *= pr_buf->th_doacross_info[4 * j + 1]; // use kept ranges
+ }
+ KMP_DEBUG_ASSERT(trace_count > 0);
+
+ // Check if shared buffer is not occupied by other loop (idx - __kmp_dispatch_num_buffers)
+ if( idx != sh_buf->doacross_buf_idx ) {
+ // Shared buffer is occupied, wait for it to be free
+ __kmp_wait_yield_4( (kmp_uint32*)&sh_buf->doacross_buf_idx, idx, __kmp_eq_4, NULL );
+ }
+ // Check if we are the first thread. After the CAS the first thread gets 0,
+ // others get 1 if initialization is in progress, allocated pointer otherwise.
+ flags = (kmp_uint32*)KMP_COMPARE_AND_STORE_RET64(
+ (kmp_int64*)&sh_buf->doacross_flags,NULL,(kmp_int64)1);
+ if( flags == NULL ) {
+ // we are the first thread, allocate the array of flags
+ kmp_int64 size = trace_count / 8 + 8; // in bytes, use single bit per iteration
+ sh_buf->doacross_flags = (kmp_uint32*)__kmp_thread_calloc(th, size, 1);
+ } else if( (kmp_int64)flags == 1 ) {
+ // initialization is still in progress, need to wait
+ while( (volatile kmp_int64)sh_buf->doacross_flags == 1 ) {
+ KMP_YIELD(TRUE);
+ }
+ }
+ KMP_DEBUG_ASSERT((kmp_int64)sh_buf->doacross_flags > 1); // check value of pointer
+ pr_buf->th_doacross_flags = sh_buf->doacross_flags; // save private copy in order to not
+ // touch shared buffer on each iteration
+ KA_TRACE(20,("__kmpc_doacross_init() exit: T#%d\n", gtid));
+}
+
+void
+__kmpc_doacross_wait(ident_t *loc, int gtid, long long *vec)
+{
+ kmp_int32 shft, num_dims, i;
+ kmp_uint32 flag;
+ kmp_int64 iter_number; // iteration number of "collapsed" loop nest
+ kmp_info_t *th = __kmp_threads[gtid];
+ kmp_team_t *team = th->th.th_team;
+ kmp_disp_t *pr_buf;
+ kmp_int64 lo, up, st;
+
+ KA_TRACE(20,("__kmpc_doacross_wait() enter: called T#%d\n", gtid));
+ if( team->t.t_serialized ) {
+ KA_TRACE(20,("__kmpc_doacross_wait() exit: serialized team\n"));
+ return; // no dependencies if team is serialized
+ }
+
+ // calculate sequential iteration number and check out-of-bounds condition
+ pr_buf = th->th.th_dispatch;
+ KMP_DEBUG_ASSERT(pr_buf->th_doacross_info != NULL);
+ num_dims = pr_buf->th_doacross_info[0];
+ lo = pr_buf->th_doacross_info[2];
+ up = pr_buf->th_doacross_info[3];
+ st = pr_buf->th_doacross_info[4];
+ if( st == 1 ) { // most common case
+ if( vec[0] < lo || vec[0] > up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[0], lo, up));
+ return;
+ }
+ iter_number = vec[0] - lo;
+ } else if( st > 0 ) {
+ if( vec[0] < lo || vec[0] > up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[0], lo, up));
+ return;
+ }
+ iter_number = (kmp_uint64)(vec[0] - lo) / st;
+ } else { // negative increment
+ if( vec[0] > lo || vec[0] < up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[0], lo, up));
+ return;
+ }
+ iter_number = (kmp_uint64)(lo - vec[0]) / (-st);
+ }
+ for( i = 1; i < num_dims; ++i ) {
+ kmp_int64 iter, ln;
+ kmp_int32 j = i * 4;
+ ln = pr_buf->th_doacross_info[j + 1];
+ lo = pr_buf->th_doacross_info[j + 2];
+ up = pr_buf->th_doacross_info[j + 3];
+ st = pr_buf->th_doacross_info[j + 4];
+ if( st == 1 ) {
+ if( vec[i] < lo || vec[i] > up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[i], lo, up));
+ return;
+ }
+ iter = vec[i] - lo;
+ } else if( st > 0 ) {
+ if( vec[i] < lo || vec[i] > up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[i], lo, up));
+ return;
+ }
+ iter = (kmp_uint64)(vec[i] - lo) / st;
+ } else { // st < 0
+ if( vec[i] > lo || vec[i] < up ) {
+ KA_TRACE(20,(
+ "__kmpc_doacross_wait() exit: T#%d iter %lld is out of bounds [%lld,%lld]\n",
+ gtid, vec[i], lo, up));
+ return;
+ }
+ iter = (kmp_uint64)(lo - vec[i]) / (-st);
+ }
+ iter_number = iter + ln * iter_number;
+ }
+ shft = iter_number % 32; // use 32-bit granularity
+ iter_number >>= 5; // divided by 32
+ flag = 1 << shft;
+ while( (flag & pr_buf->th_doacross_flags[iter_number]) == 0 ) {
+ KMP_YIELD(TRUE);
+ }
+ KA_TRACE(20,("__kmpc_doacross_wait() exit: T#%d wait for iter %lld completed\n",
+ gtid, (iter_number<<5)+shft));
+}
+
+void
+__kmpc_doacross_post(ident_t *loc, int gtid, long long *vec)
+{
+ kmp_int32 shft, num_dims, i;
+ kmp_uint32 flag;
+ kmp_int64 iter_number; // iteration number of "collapsed" loop nest
+ kmp_info_t *th = __kmp_threads[gtid];
+ kmp_team_t *team = th->th.th_team;
+ kmp_disp_t *pr_buf;
+ kmp_int64 lo, st;
+
+ KA_TRACE(20,("__kmpc_doacross_post() enter: called T#%d\n", gtid));
+ if( team->t.t_serialized ) {
+ KA_TRACE(20,("__kmpc_doacross_post() exit: serialized team\n"));
+ return; // no dependencies if team is serialized
+ }
+
+ // calculate sequential iteration number (same as in "wait" but no out-of-bounds checks)
+ pr_buf = th->th.th_dispatch;
+ KMP_DEBUG_ASSERT(pr_buf->th_doacross_info != NULL);
+ num_dims = pr_buf->th_doacross_info[0];
+ lo = pr_buf->th_doacross_info[2];
+ st = pr_buf->th_doacross_info[4];
+ if( st == 1 ) { // most common case
+ iter_number = vec[0] - lo;
+ } else if( st > 0 ) {
+ iter_number = (kmp_uint64)(vec[0] - lo) / st;
+ } else { // negative increment
+ iter_number = (kmp_uint64)(lo - vec[0]) / (-st);
+ }
+ for( i = 1; i < num_dims; ++i ) {
+ kmp_int64 iter, ln;
+ kmp_int32 j = i * 4;
+ ln = pr_buf->th_doacross_info[j + 1];
+ lo = pr_buf->th_doacross_info[j + 2];
+ st = pr_buf->th_doacross_info[j + 4];
+ if( st == 1 ) {
+ iter = vec[i] - lo;
+ } else if( st > 0 ) {
+ iter = (kmp_uint64)(vec[i] - lo) / st;
+ } else { // st < 0
+ iter = (kmp_uint64)(lo - vec[i]) / (-st);
+ }
+ iter_number = iter + ln * iter_number;
+ }
+ shft = iter_number % 32; // use 32-bit granularity
+ iter_number >>= 5; // divided by 32
+ flag = 1 << shft;
+ if( (flag & pr_buf->th_doacross_flags[iter_number]) == 0 )
+ KMP_TEST_THEN_OR32( (kmp_int32*)&pr_buf->th_doacross_flags[iter_number], (kmp_int32)flag );
+ KA_TRACE(20,("__kmpc_doacross_post() exit: T#%d iter %lld posted\n",
+ gtid, (iter_number<<5)+shft));
+}
+
+void
+__kmpc_doacross_fini(ident_t *loc, int gtid)
+{
+ kmp_int64 num_done;
+ kmp_info_t *th = __kmp_threads[gtid];
+ kmp_team_t *team = th->th.th_team;
+ kmp_disp_t *pr_buf = th->th.th_dispatch;
+
+ KA_TRACE(20,("__kmpc_doacross_fini() enter: called T#%d\n", gtid));
+ if( team->t.t_serialized ) {
+ KA_TRACE(20,("__kmpc_doacross_fini() exit: serialized team %p\n", team));
+ return; // nothing to do
+ }
+ num_done = KMP_TEST_THEN_INC64((kmp_int64*)pr_buf->th_doacross_info[1]) + 1;
+ if( num_done == th->th.th_team_nproc ) {
+ // we are the last thread, need to free shared resources
+ int idx = pr_buf->th_doacross_buf_idx - 1;
+ dispatch_shared_info_t *sh_buf = &team->t.t_disp_buffer[idx % __kmp_dispatch_num_buffers];
+ KMP_DEBUG_ASSERT(pr_buf->th_doacross_info[1] == (kmp_int64)&sh_buf->doacross_num_done);
+ KMP_DEBUG_ASSERT(num_done == (kmp_int64)sh_buf->doacross_num_done);
+ KMP_DEBUG_ASSERT(idx == sh_buf->doacross_buf_idx);
+ __kmp_thread_free(th, (void*)sh_buf->doacross_flags);
+ sh_buf->doacross_flags = NULL;
+ sh_buf->doacross_num_done = 0;
+ sh_buf->doacross_buf_idx += __kmp_dispatch_num_buffers; // free buffer for future re-use
+ }
+ // free private resources (need to keep buffer index forever)
+ __kmp_thread_free(th, (void*)pr_buf->th_doacross_info);
+ pr_buf->th_doacross_info = NULL;
+ KA_TRACE(20,("__kmpc_doacross_fini() exit: T#%d\n", gtid));
+}
+#endif
+
+// end of file //
+
diff --git a/final/runtime/src/kmp_debug.c b/final/runtime/src/kmp_debug.c
new file mode 100644
index 0000000..3bbffa5
--- /dev/null
+++ b/final/runtime/src/kmp_debug.c
@@ -0,0 +1,142 @@
+/*
+ * kmp_debug.c -- debug utilities for the Guide library
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_debug.h" /* really necessary? */
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+
+#ifdef KMP_DEBUG
+void
+__kmp_debug_printf_stdout( char const * format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+
+ __kmp_vprintf( kmp_out, format, ap );
+
+ va_end(ap);
+}
+#endif
+
+void
+__kmp_debug_printf( char const * format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+
+ __kmp_vprintf( kmp_err, format, ap );
+
+ va_end( ap );
+}
+
+#ifdef KMP_USE_ASSERT
+ int
+ __kmp_debug_assert(
+ char const * msg,
+ char const * file,
+ int line
+ ) {
+
+ if ( file == NULL ) {
+ file = KMP_I18N_STR( UnknownFile );
+ } else {
+ // Remove directories from path, leave only file name. File name is enough, there is no need
+ // in bothering developers and customers with full paths.
+ char const * slash = strrchr( file, '/' );
+ if ( slash != NULL ) {
+ file = slash + 1;
+ }; // if
+ }; // if
+
+ #ifdef KMP_DEBUG
+ __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
+ __kmp_debug_printf( "Assertion failure at %s(%d): %s.\n", file, line, msg );
+ __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
+ #ifdef USE_ASSERT_BREAK
+ #if KMP_OS_WINDOWS
+ DebugBreak();
+ #endif
+ #endif // USE_ASSERT_BREAK
+ #ifdef USE_ASSERT_STALL
+ /* __kmp_infinite_loop(); */
+ for(;;);
+ #endif // USE_ASSERT_STALL
+ #ifdef USE_ASSERT_SEG
+ {
+ int volatile * ZERO = (int*) 0;
+ ++ (*ZERO);
+ }
+ #endif // USE_ASSERT_SEG
+ #endif
+
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( AssertionFailure, file, line ),
+ KMP_HNT( SubmitBugReport ),
+ __kmp_msg_null
+ );
+
+ return 0;
+
+ } // __kmp_debug_assert
+
+#endif // KMP_USE_ASSERT
+
+/* Dump debugging buffer to stderr */
+void
+__kmp_dump_debug_buffer( void )
+{
+ if ( __kmp_debug_buffer != NULL ) {
+ int i;
+ int dc = __kmp_debug_count;
+ char *db = & __kmp_debug_buffer[ (dc % __kmp_debug_buf_lines) * __kmp_debug_buf_chars ];
+ char *db_end = & __kmp_debug_buffer[ __kmp_debug_buf_lines * __kmp_debug_buf_chars ];
+ char *db2;
+
+ __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
+ __kmp_printf_no_lock( "\nStart dump of debugging buffer (entry=%d):\n",
+ dc % __kmp_debug_buf_lines );
+
+ for ( i = 0; i < __kmp_debug_buf_lines; i++ ) {
+
+ if ( *db != '\0' ) {
+ /* Fix up where no carriage return before string termination char */
+ for ( db2 = db + 1; db2 < db + __kmp_debug_buf_chars - 1; db2 ++) {
+ if ( *db2 == '\0' ) {
+ if ( *(db2-1) != '\n' ) { *db2 = '\n'; *(db2+1) = '\0'; }
+ break;
+ }
+ }
+ /* Handle case at end by shortening the printed message by one char if necessary */
+ if ( db2 == db + __kmp_debug_buf_chars - 1 &&
+ *db2 == '\0' && *(db2-1) != '\n' ) {
+ *(db2-1) = '\n';
+ }
+
+ __kmp_printf_no_lock( "%4d: %.*s", i, __kmp_debug_buf_chars, db );
+ *db = '\0'; /* only let it print once! */
+ }
+
+ db += __kmp_debug_buf_chars;
+ if ( db >= db_end )
+ db = __kmp_debug_buffer;
+ }
+
+ __kmp_printf_no_lock( "End dump of debugging buffer (entry=%d).\n\n",
+ ( dc+i-1 ) % __kmp_debug_buf_lines );
+ __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
+ }
+}
diff --git a/final/runtime/src/kmp_debug.h b/final/runtime/src/kmp_debug.h
new file mode 100644
index 0000000..4d987f5
--- /dev/null
+++ b/final/runtime/src/kmp_debug.h
@@ -0,0 +1,131 @@
+/*
+ * kmp_debug.h -- debug / assertion code for Assure library
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_DEBUG_H
+#define KMP_DEBUG_H
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+// -------------------------------------------------------------------------------------------------
+// Build-time assertion.
+// -------------------------------------------------------------------------------------------------
+
+/*
+ Build-time assertion can do compile-time checking of data structure sizes, etc. This works by
+ declaring a negative-length array if the conditional expression evaluates to false. In that
+ case, the compiler issues a syntax error and stops the compilation. If the expression is
+ true, we get an extraneous static single character array in the scope of the macro.
+
+ Usage:
+
+ KMP_BUILD_ASSERT( sizeof( some_t ) <= 32 );
+ KMP_BUILD_ASSERT( offsetof( some_t, field ) % 8 == 0 );
+
+ Do not use _KMP_BUILD_ASSERT and __KMP_BUILD_ASSERT directly, it is working guts.
+*/
+
+#define __KMP_BUILD_ASSERT( expr, suffix ) typedef char __kmp_build_check_##suffix[ (expr) ? 1 : -1 ]
+#define _KMP_BUILD_ASSERT( expr, suffix ) __KMP_BUILD_ASSERT( (expr), suffix )
+#ifdef KMP_USE_ASSERT
+ #define KMP_BUILD_ASSERT( expr ) _KMP_BUILD_ASSERT( (expr), __LINE__ )
+#else
+ #define KMP_BUILD_ASSERT( expr ) /* nothing to do */
+#endif
+
+// -------------------------------------------------------------------------------------------------
+// Run-time assertions.
+// -------------------------------------------------------------------------------------------------
+
+extern void __kmp_dump_debug_buffer( void );
+
+#ifdef KMP_USE_ASSERT
+ extern int __kmp_debug_assert( char const * expr, char const * file, int line );
+ #ifdef KMP_DEBUG
+ #define KMP_ASSERT( cond ) ( (cond) ? 0 : __kmp_debug_assert( #cond, __FILE__, __LINE__ ) )
+ #define KMP_ASSERT2( cond, msg ) ( (cond) ? 0 : __kmp_debug_assert( (msg), __FILE__, __LINE__ ) )
+ #define KMP_DEBUG_ASSERT( cond ) KMP_ASSERT( cond )
+ #define KMP_DEBUG_ASSERT2( cond, msg ) KMP_ASSERT2( cond, msg )
+ #else
+ // Do not expose condition in release build. Use "assertion failure".
+ #define KMP_ASSERT( cond ) ( (cond) ? 0 : __kmp_debug_assert( "assertion failure", __FILE__, __LINE__ ) )
+ #define KMP_ASSERT2( cond, msg ) KMP_ASSERT( cond )
+ #define KMP_DEBUG_ASSERT( cond ) 0
+ #define KMP_DEBUG_ASSERT2( cond, msg ) 0
+ #endif // KMP_DEBUG
+#else
+ #define KMP_ASSERT( cond ) 0
+ #define KMP_ASSERT2( cond, msg ) 0
+ #define KMP_DEBUG_ASSERT( cond ) 0
+ #define KMP_DEBUG_ASSERT2( cond, msg ) 0
+#endif // KMP_USE_ASSERT
+
+#ifdef KMP_DEBUG
+ extern void __kmp_debug_printf_stdout( char const * format, ... );
+#endif
+extern void __kmp_debug_printf( char const * format, ... );
+
+#ifdef KMP_DEBUG
+
+ extern int kmp_a_debug;
+ extern int kmp_b_debug;
+ extern int kmp_c_debug;
+ extern int kmp_d_debug;
+ extern int kmp_e_debug;
+ extern int kmp_f_debug;
+ extern int kmp_diag;
+
+ #define KA_TRACE(d,x) if (kmp_a_debug >= d) { __kmp_debug_printf x ; }
+ #define KB_TRACE(d,x) if (kmp_b_debug >= d) { __kmp_debug_printf x ; }
+ #define KC_TRACE(d,x) if (kmp_c_debug >= d) { __kmp_debug_printf x ; }
+ #define KD_TRACE(d,x) if (kmp_d_debug >= d) { __kmp_debug_printf x ; }
+ #define KE_TRACE(d,x) if (kmp_e_debug >= d) { __kmp_debug_printf x ; }
+ #define KF_TRACE(d,x) if (kmp_f_debug >= d) { __kmp_debug_printf x ; }
+ #define K_DIAG(d,x) {if (kmp_diag == d) { __kmp_debug_printf_stdout x ; } }
+
+ #define KA_DUMP(d,x) if (kmp_a_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+ #define KB_DUMP(d,x) if (kmp_b_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+ #define KC_DUMP(d,x) if (kmp_c_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+ #define KD_DUMP(d,x) if (kmp_d_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+ #define KE_DUMP(d,x) if (kmp_e_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+ #define KF_DUMP(d,x) if (kmp_f_debug >= d) { int ks; __kmp_disable(&ks); (x) ; __kmp_enable(ks); }
+
+#else
+
+ #define KA_TRACE(d,x) /* nothing to do */
+ #define KB_TRACE(d,x) /* nothing to do */
+ #define KC_TRACE(d,x) /* nothing to do */
+ #define KD_TRACE(d,x) /* nothing to do */
+ #define KE_TRACE(d,x) /* nothing to do */
+ #define KF_TRACE(d,x) /* nothing to do */
+ #define K_DIAG(d,x) {}/* nothing to do */
+
+ #define KA_DUMP(d,x) /* nothing to do */
+ #define KB_DUMP(d,x) /* nothing to do */
+ #define KC_DUMP(d,x) /* nothing to do */
+ #define KD_DUMP(d,x) /* nothing to do */
+ #define KE_DUMP(d,x) /* nothing to do */
+ #define KF_DUMP(d,x) /* nothing to do */
+
+#endif // KMP_DEBUG
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif // __cplusplus
+
+#endif /* KMP_DEBUG_H */
diff --git a/final/runtime/src/kmp_debugger.c b/final/runtime/src/kmp_debugger.c
new file mode 100644
index 0000000..76fe1e0
--- /dev/null
+++ b/final/runtime/src/kmp_debugger.c
@@ -0,0 +1,315 @@
+#if USE_DEBUGGER
+/*
+ * kmp_debugger.c -- debugger support.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_lock.h"
+#include "kmp_omp.h"
+#include "kmp_str.h"
+
+/*
+ NOTE: All variable names are known to the debugger, do not change!
+*/
+
+#ifdef __cplusplus
+ extern "C" {
+ extern kmp_omp_struct_info_t __kmp_omp_debug_struct_info;
+ } // extern "C"
+#endif // __cplusplus
+
+int __kmp_debugging = FALSE; // Boolean whether currently debugging OpenMP RTL.
+
+#define offset_and_size_of( structure, field ) \
+ { \
+ offsetof( structure, field ), \
+ sizeof( ( (structure *) NULL)->field ) \
+ }
+
+#define offset_and_size_not_available \
+ { -1, -1 }
+
+#define addr_and_size_of( var ) \
+ { \
+ (kmp_uint64)( & var ), \
+ sizeof( var ) \
+ }
+
+#define nthr_buffer_size 1024
+static kmp_int32
+kmp_omp_nthr_info_buffer[ nthr_buffer_size ] =
+ { nthr_buffer_size * sizeof( kmp_int32 ) };
+
+/* TODO: Check punctuation for various platforms here */
+static char func_microtask[] = "__kmp_invoke_microtask";
+static char func_fork[] = "__kmpc_fork_call";
+static char func_fork_teams[] = "__kmpc_fork_teams";
+
+
+// Various info about runtime structures: addresses, field offsets, sizes, etc.
+kmp_omp_struct_info_t
+__kmp_omp_debug_struct_info = {
+
+ /* Change this only if you make a fundamental data structure change here */
+ KMP_OMP_VERSION,
+
+ /* sanity check. Only should be checked if versions are identical
+ * This is also used for backward compatibility to get the runtime
+ * structure size if it the runtime is older than the interface */
+ sizeof( kmp_omp_struct_info_t ),
+
+ /* OpenMP RTL version info. */
+ addr_and_size_of( __kmp_version_major ),
+ addr_and_size_of( __kmp_version_minor ),
+ addr_and_size_of( __kmp_version_build ),
+ addr_and_size_of( __kmp_openmp_version ),
+ { (kmp_uint64)( __kmp_copyright ) + KMP_VERSION_MAGIC_LEN, 0 }, // Skip magic prefix.
+
+ /* Various globals. */
+ addr_and_size_of( __kmp_threads ),
+ addr_and_size_of( __kmp_root ),
+ addr_and_size_of( __kmp_threads_capacity ),
+ addr_and_size_of( __kmp_monitor ),
+#if ! KMP_USE_DYNAMIC_LOCK
+ addr_and_size_of( __kmp_user_lock_table ),
+#endif
+ addr_and_size_of( func_microtask ),
+ addr_and_size_of( func_fork ),
+ addr_and_size_of( func_fork_teams ),
+ addr_and_size_of( __kmp_team_counter ),
+ addr_and_size_of( __kmp_task_counter ),
+ addr_and_size_of( kmp_omp_nthr_info_buffer ),
+ sizeof( void * ),
+ OMP_LOCK_T_SIZE < sizeof(void *),
+ bs_last_barrier,
+ INITIAL_TASK_DEQUE_SIZE,
+
+ // thread structure information
+ sizeof( kmp_base_info_t ),
+ offset_and_size_of( kmp_base_info_t, th_info ),
+ offset_and_size_of( kmp_base_info_t, th_team ),
+ offset_and_size_of( kmp_base_info_t, th_root ),
+ offset_and_size_of( kmp_base_info_t, th_serial_team ),
+ offset_and_size_of( kmp_base_info_t, th_ident ),
+ offset_and_size_of( kmp_base_info_t, th_spin_here ),
+ offset_and_size_of( kmp_base_info_t, th_next_waiting ),
+ offset_and_size_of( kmp_base_info_t, th_task_team ),
+ offset_and_size_of( kmp_base_info_t, th_current_task ),
+ offset_and_size_of( kmp_base_info_t, th_task_state ),
+ offset_and_size_of( kmp_base_info_t, th_bar ),
+ offset_and_size_of( kmp_bstate_t, b_worker_arrived ),
+
+#if OMP_40_ENABLED
+ // teams information
+ offset_and_size_of( kmp_base_info_t, th_teams_microtask),
+ offset_and_size_of( kmp_base_info_t, th_teams_level),
+ offset_and_size_of( kmp_teams_size_t, nteams ),
+ offset_and_size_of( kmp_teams_size_t, nth ),
+#endif
+
+ // kmp_desc structure (for info field above)
+ sizeof( kmp_desc_base_t ),
+ offset_and_size_of( kmp_desc_base_t, ds_tid ),
+ offset_and_size_of( kmp_desc_base_t, ds_gtid ),
+ // On Windows* OS, ds_thread contains a thread /handle/, which is not usable, while thread /id/
+ // is in ds_thread_id.
+ #if KMP_OS_WINDOWS
+ offset_and_size_of( kmp_desc_base_t, ds_thread_id),
+ #else
+ offset_and_size_of( kmp_desc_base_t, ds_thread),
+ #endif
+
+ // team structure information
+ sizeof( kmp_base_team_t ),
+ offset_and_size_of( kmp_base_team_t, t_master_tid ),
+ offset_and_size_of( kmp_base_team_t, t_ident ),
+ offset_and_size_of( kmp_base_team_t, t_parent ),
+ offset_and_size_of( kmp_base_team_t, t_nproc ),
+ offset_and_size_of( kmp_base_team_t, t_threads ),
+ offset_and_size_of( kmp_base_team_t, t_serialized ),
+ offset_and_size_of( kmp_base_team_t, t_id ),
+ offset_and_size_of( kmp_base_team_t, t_pkfn ),
+ offset_and_size_of( kmp_base_team_t, t_task_team ),
+ offset_and_size_of( kmp_base_team_t, t_implicit_task_taskdata ),
+#if OMP_40_ENABLED
+ offset_and_size_of( kmp_base_team_t, t_cancel_request ),
+#endif
+ offset_and_size_of( kmp_base_team_t, t_bar ),
+ offset_and_size_of( kmp_balign_team_t, b_master_arrived ),
+ offset_and_size_of( kmp_balign_team_t, b_team_arrived ),
+
+ // root structure information
+ sizeof( kmp_base_root_t ),
+ offset_and_size_of( kmp_base_root_t, r_root_team ),
+ offset_and_size_of( kmp_base_root_t, r_hot_team ),
+ offset_and_size_of( kmp_base_root_t, r_uber_thread ),
+ offset_and_size_not_available,
+
+ // ident structure information
+ sizeof( ident_t ),
+ offset_and_size_of( ident_t, psource ),
+ offset_and_size_of( ident_t, flags ),
+
+ // lock structure information
+ sizeof( kmp_base_queuing_lock_t ),
+ offset_and_size_of( kmp_base_queuing_lock_t, initialized ),
+ offset_and_size_of( kmp_base_queuing_lock_t, location ),
+ offset_and_size_of( kmp_base_queuing_lock_t, tail_id ),
+ offset_and_size_of( kmp_base_queuing_lock_t, head_id ),
+ offset_and_size_of( kmp_base_queuing_lock_t, next_ticket ),
+ offset_and_size_of( kmp_base_queuing_lock_t, now_serving ),
+ offset_and_size_of( kmp_base_queuing_lock_t, owner_id ),
+ offset_and_size_of( kmp_base_queuing_lock_t, depth_locked ),
+ offset_and_size_of( kmp_base_queuing_lock_t, flags ),
+
+#if ! KMP_USE_DYNAMIC_LOCK
+ /* Lock table. */
+ sizeof( kmp_lock_table_t ),
+ offset_and_size_of( kmp_lock_table_t, used ),
+ offset_and_size_of( kmp_lock_table_t, allocated ),
+ offset_and_size_of( kmp_lock_table_t, table ),
+#endif
+
+ // Task team structure information.
+ sizeof( kmp_base_task_team_t ),
+ offset_and_size_of( kmp_base_task_team_t, tt_threads_data ),
+ offset_and_size_of( kmp_base_task_team_t, tt_found_tasks ),
+ offset_and_size_of( kmp_base_task_team_t, tt_nproc ),
+ offset_and_size_of( kmp_base_task_team_t, tt_unfinished_threads ),
+ offset_and_size_of( kmp_base_task_team_t, tt_active ),
+
+ // task_data_t.
+ sizeof( kmp_taskdata_t ),
+ offset_and_size_of( kmp_taskdata_t, td_task_id ),
+ offset_and_size_of( kmp_taskdata_t, td_flags ),
+ offset_and_size_of( kmp_taskdata_t, td_team ),
+ offset_and_size_of( kmp_taskdata_t, td_parent ),
+ offset_and_size_of( kmp_taskdata_t, td_level ),
+ offset_and_size_of( kmp_taskdata_t, td_ident ),
+ offset_and_size_of( kmp_taskdata_t, td_allocated_child_tasks ),
+ offset_and_size_of( kmp_taskdata_t, td_incomplete_child_tasks ),
+
+ offset_and_size_of( kmp_taskdata_t, td_taskwait_ident ),
+ offset_and_size_of( kmp_taskdata_t, td_taskwait_counter ),
+ offset_and_size_of( kmp_taskdata_t, td_taskwait_thread ),
+
+#if OMP_40_ENABLED
+ offset_and_size_of( kmp_taskdata_t, td_taskgroup ),
+ offset_and_size_of( kmp_taskgroup_t, count ),
+ offset_and_size_of( kmp_taskgroup_t, cancel_request ),
+
+ offset_and_size_of( kmp_taskdata_t, td_depnode ),
+ offset_and_size_of( kmp_depnode_list_t, node ),
+ offset_and_size_of( kmp_depnode_list_t, next ),
+ offset_and_size_of( kmp_base_depnode_t, successors ),
+ offset_and_size_of( kmp_base_depnode_t, task ),
+ offset_and_size_of( kmp_base_depnode_t, npredecessors ),
+ offset_and_size_of( kmp_base_depnode_t, nrefs ),
+#endif
+ offset_and_size_of( kmp_task_t, routine ),
+
+ // thread_data_t.
+ sizeof( kmp_thread_data_t ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque_size ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque_head ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque_tail ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque_ntasks ),
+ offset_and_size_of( kmp_base_thread_data_t, td_deque_last_stolen ),
+
+ // The last field.
+ KMP_OMP_VERSION,
+
+}; // __kmp_omp_debug_struct_info
+
+#undef offset_and_size_of
+#undef addr_and_size_of
+
+/*
+ Intel compiler on IA-32 architecture issues a warning "conversion
+ from "unsigned long long" to "char *" may lose significant bits"
+ when 64-bit value is assigned to 32-bit pointer. Use this function
+ to suppress the warning.
+*/
+static inline
+void *
+__kmp_convert_to_ptr(
+ kmp_uint64 addr
+) {
+ #if KMP_COMPILER_ICC
+ #pragma warning( push )
+ #pragma warning( disable: 810 ) // conversion from "unsigned long long" to "char *" may lose significant bits
+ #pragma warning( disable: 1195 ) // conversion from integer to smaller pointer
+ #endif // KMP_COMPILER_ICC
+ return (void *) addr;
+ #if KMP_COMPILER_ICC
+ #pragma warning( pop )
+ #endif // KMP_COMPILER_ICC
+} // __kmp_convert_to_ptr
+
+
+static int
+kmp_location_match(
+ kmp_str_loc_t * loc,
+ kmp_omp_nthr_item_t * item
+) {
+
+ int file_match = 0;
+ int func_match = 0;
+ int line_match = 0;
+
+ char * file = (char *) __kmp_convert_to_ptr( item->file );
+ char * func = (char *) __kmp_convert_to_ptr( item->func );
+ file_match = __kmp_str_fname_match( & loc->fname, file );
+ func_match =
+ item->func == 0 // If item->func is NULL, it allows any func name.
+ ||
+ strcmp( func, "*" ) == 0
+ ||
+ ( loc->func != NULL && strcmp( loc->func, func ) == 0 );
+ line_match =
+ item->begin <= loc->line
+ &&
+ ( item->end <= 0 || loc->line <= item->end ); // if item->end <= 0, it means "end of file".
+
+ return ( file_match && func_match && line_match );
+
+} // kmp_location_match
+
+
+int
+__kmp_omp_num_threads(
+ ident_t const * ident
+) {
+
+ int num_threads = 0;
+
+ kmp_omp_nthr_info_t * info =
+ (kmp_omp_nthr_info_t *) __kmp_convert_to_ptr( __kmp_omp_debug_struct_info.nthr_info.addr );
+ if ( info->num > 0 && info->array != 0 ) {
+ kmp_omp_nthr_item_t * items = (kmp_omp_nthr_item_t *) __kmp_convert_to_ptr( info->array );
+ kmp_str_loc_t loc = __kmp_str_loc_init( ident->psource, 1 );
+ int i;
+ for ( i = 0; i < info->num; ++ i ) {
+ if ( kmp_location_match( & loc, & items[ i ] ) ) {
+ num_threads = items[ i ].num_threads;
+ }; // if
+ }; // for
+ __kmp_str_loc_free( & loc );
+ }; // if
+
+ return num_threads;;
+
+} // __kmp_omp_num_threads
+#endif /* USE_DEBUGGER */
diff --git a/final/runtime/src/kmp_debugger.h b/final/runtime/src/kmp_debugger.h
new file mode 100644
index 0000000..ff0ad96
--- /dev/null
+++ b/final/runtime/src/kmp_debugger.h
@@ -0,0 +1,51 @@
+#if USE_DEBUGGER
+/*
+ * kmp_debugger.h -- debugger support.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_DEBUGGER_H
+#define KMP_DEBUGGER_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+/* * This external variable can be set by any debugger to flag to the runtime that we
+ are currently executing inside a debugger. This will allow the debugger to override
+ the number of threads spawned in a parallel region by using __kmp_omp_num_threads() (below).
+ * When __kmp_debugging is TRUE, each team and each task gets a unique integer identifier
+ that can be used by debugger to conveniently identify teams and tasks.
+ * The debugger has access to __kmp_omp_debug_struct_info which contains information
+ about the OpenMP library's important internal structures. This access will allow the debugger
+ to read detailed information from the typical OpenMP constructs (teams, threads, tasking, etc. )
+ during a debugging session and offer detailed and useful information which the user can probe
+ about the OpenMP portion of their code.
+ */
+extern int __kmp_debugging; /* Boolean whether currently debugging OpenMP RTL */
+// Return number of threads specified by the debugger for given parallel region.
+/* The ident field, which represents a source file location, is used to check if the
+ debugger has changed the number of threads for the parallel region at source file
+ location ident. This way, specific parallel regions' number of threads can be changed
+ at the debugger's request.
+ */
+int __kmp_omp_num_threads( ident_t const * ident );
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif // __cplusplus
+
+
+#endif // KMP_DEBUGGER_H
+
+#endif // USE_DEBUGGER
diff --git a/final/runtime/src/kmp_dispatch.cpp b/final/runtime/src/kmp_dispatch.cpp
new file mode 100644
index 0000000..4df22ed
--- /dev/null
+++ b/final/runtime/src/kmp_dispatch.cpp
@@ -0,0 +1,2768 @@
+/*
+ * kmp_dispatch.cpp: dynamic scheduling - iteration initialization and dispatch.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*
+ * Dynamic scheduling initialization and dispatch.
+ *
+ * NOTE: __kmp_nth is a constant inside of any dispatch loop, however
+ * it may change values between parallel regions. __kmp_max_nth
+ * is the largest value __kmp_nth may take, 1 is the smallest.
+ *
+ */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+// Need to raise Win version from XP to Vista here for support of InterlockedExchange64
+#if defined(_WIN32_WINNT) && defined(_M_IX86)
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0502
+#endif
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_itt.h"
+#include "kmp_str.h"
+#include "kmp_error.h"
+#include "kmp_stats.h"
+#if KMP_OS_WINDOWS && KMP_ARCH_X86
+ #include <float.h>
+#endif
+
+#if OMPT_SUPPORT
+#include "ompt-internal.h"
+#include "ompt-specific.h"
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+// template for type limits
+template< typename T >
+struct i_maxmin {
+ static const T mx;
+ static const T mn;
+};
+template<>
+struct i_maxmin< int > {
+ static const int mx = 0x7fffffff;
+ static const int mn = 0x80000000;
+};
+template<>
+struct i_maxmin< unsigned int > {
+ static const unsigned int mx = 0xffffffff;
+ static const unsigned int mn = 0x00000000;
+};
+template<>
+struct i_maxmin< long long > {
+ static const long long mx = 0x7fffffffffffffffLL;
+ static const long long mn = 0x8000000000000000LL;
+};
+template<>
+struct i_maxmin< unsigned long long > {
+ static const unsigned long long mx = 0xffffffffffffffffLL;
+ static const unsigned long long mn = 0x0000000000000000LL;
+};
+//-------------------------------------------------------------------------
+
+#if KMP_STATIC_STEAL_ENABLED
+
+ // replaces dispatch_private_info{32,64} structures and dispatch_private_info{32,64}_t types
+ template< typename T >
+ struct dispatch_private_infoXX_template {
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ UT count; // unsigned
+ T ub;
+ /* Adding KMP_ALIGN_CACHE here doesn't help / can hurt performance */
+ T lb;
+ ST st; // signed
+ UT tc; // unsigned
+ T static_steal_counter; // for static_steal only; maybe better to put after ub
+
+ /* parm[1-4] are used in different ways by different scheduling algorithms */
+
+ // KMP_ALIGN( 32 ) ensures ( if the KMP_ALIGN macro is turned on )
+ // a) parm3 is properly aligned and
+ // b) all parm1-4 are in the same cache line.
+ // Because of parm1-4 are used together, performance seems to be better
+ // if they are in the same line (not measured though).
+
+ struct KMP_ALIGN( 32 ) { // compiler does not accept sizeof(T)*4
+ T parm1;
+ T parm2;
+ T parm3;
+ T parm4;
+ };
+
+ UT ordered_lower; // unsigned
+ UT ordered_upper; // unsigned
+ #if KMP_OS_WINDOWS
+ T last_upper;
+ #endif /* KMP_OS_WINDOWS */
+ };
+
+#else /* KMP_STATIC_STEAL_ENABLED */
+
+ // replaces dispatch_private_info{32,64} structures and dispatch_private_info{32,64}_t types
+ template< typename T >
+ struct dispatch_private_infoXX_template {
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ T lb;
+ T ub;
+ ST st; // signed
+ UT tc; // unsigned
+
+ T parm1;
+ T parm2;
+ T parm3;
+ T parm4;
+
+ UT count; // unsigned
+
+ UT ordered_lower; // unsigned
+ UT ordered_upper; // unsigned
+ #if KMP_OS_WINDOWS
+ T last_upper;
+ #endif /* KMP_OS_WINDOWS */
+ };
+
+#endif /* KMP_STATIC_STEAL_ENABLED */
+
+// replaces dispatch_private_info structure and dispatch_private_info_t type
+template< typename T >
+struct KMP_ALIGN_CACHE dispatch_private_info_template {
+ // duplicate alignment here, otherwise size of structure is not correct in our compiler
+ union KMP_ALIGN_CACHE private_info_tmpl {
+ dispatch_private_infoXX_template< T > p;
+ dispatch_private_info64_t p64;
+ } u;
+ enum sched_type schedule; /* scheduling algorithm */
+ kmp_uint32 ordered; /* ordered clause specified */
+ kmp_uint32 ordered_bumped;
+ kmp_int32 ordered_dummy[KMP_MAX_ORDERED-3]; // to retain the structure size after making order
+ dispatch_private_info * next; /* stack of buffers for nest of serial regions */
+ kmp_uint32 nomerge; /* don't merge iters if serialized */
+ kmp_uint32 type_size;
+ enum cons_type pushed_ws;
+};
+
+
+// replaces dispatch_shared_info{32,64} structures and dispatch_shared_info{32,64}_t types
+template< typename UT >
+struct dispatch_shared_infoXX_template {
+ /* chunk index under dynamic, number of idle threads under static-steal;
+ iteration index otherwise */
+ volatile UT iteration;
+ volatile UT num_done;
+ volatile UT ordered_iteration;
+ UT ordered_dummy[KMP_MAX_ORDERED-3]; // to retain the structure size making ordered_iteration scalar
+};
+
+// replaces dispatch_shared_info structure and dispatch_shared_info_t type
+template< typename UT >
+struct dispatch_shared_info_template {
+ // we need union here to keep the structure size
+ union shared_info_tmpl {
+ dispatch_shared_infoXX_template< UT > s;
+ dispatch_shared_info64_t s64;
+ } u;
+ volatile kmp_uint32 buffer_index;
+#if OMP_45_ENABLED
+ volatile kmp_int32 doacross_buf_idx; // teamwise index
+ kmp_uint32 *doacross_flags; // array of iteration flags (0/1)
+ kmp_int32 doacross_num_done; // count finished threads
+#endif
+#if KMP_USE_HWLOC
+ // When linking with libhwloc, the ORDERED EPCC test slowsdown on big
+ // machines (> 48 cores). Performance analysis showed that a cache thrash
+ // was occurring and this padding helps alleviate the problem.
+ char padding[64];
+#endif
+};
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#undef USE_TEST_LOCKS
+
+// test_then_add template (general template should NOT be used)
+template< typename T >
+static __forceinline T
+test_then_add( volatile T *p, T d );
+
+template<>
+__forceinline kmp_int32
+test_then_add< kmp_int32 >( volatile kmp_int32 *p, kmp_int32 d )
+{
+ kmp_int32 r;
+ r = KMP_TEST_THEN_ADD32( p, d );
+ return r;
+}
+
+template<>
+__forceinline kmp_int64
+test_then_add< kmp_int64 >( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 r;
+ r = KMP_TEST_THEN_ADD64( p, d );
+ return r;
+}
+
+// test_then_inc_acq template (general template should NOT be used)
+template< typename T >
+static __forceinline T
+test_then_inc_acq( volatile T *p );
+
+template<>
+__forceinline kmp_int32
+test_then_inc_acq< kmp_int32 >( volatile kmp_int32 *p )
+{
+ kmp_int32 r;
+ r = KMP_TEST_THEN_INC_ACQ32( p );
+ return r;
+}
+
+template<>
+__forceinline kmp_int64
+test_then_inc_acq< kmp_int64 >( volatile kmp_int64 *p )
+{
+ kmp_int64 r;
+ r = KMP_TEST_THEN_INC_ACQ64( p );
+ return r;
+}
+
+// test_then_inc template (general template should NOT be used)
+template< typename T >
+static __forceinline T
+test_then_inc( volatile T *p );
+
+template<>
+__forceinline kmp_int32
+test_then_inc< kmp_int32 >( volatile kmp_int32 *p )
+{
+ kmp_int32 r;
+ r = KMP_TEST_THEN_INC32( p );
+ return r;
+}
+
+template<>
+__forceinline kmp_int64
+test_then_inc< kmp_int64 >( volatile kmp_int64 *p )
+{
+ kmp_int64 r;
+ r = KMP_TEST_THEN_INC64( p );
+ return r;
+}
+
+// compare_and_swap template (general template should NOT be used)
+template< typename T >
+static __forceinline kmp_int32
+compare_and_swap( volatile T *p, T c, T s );
+
+template<>
+__forceinline kmp_int32
+compare_and_swap< kmp_int32 >( volatile kmp_int32 *p, kmp_int32 c, kmp_int32 s )
+{
+ return KMP_COMPARE_AND_STORE_REL32( p, c, s );
+}
+
+template<>
+__forceinline kmp_int32
+compare_and_swap< kmp_int64 >( volatile kmp_int64 *p, kmp_int64 c, kmp_int64 s )
+{
+ return KMP_COMPARE_AND_STORE_REL64( p, c, s );
+}
+
+/*
+ Spin wait loop that first does pause, then yield.
+ Waits until function returns non-zero when called with *spinner and check.
+ Does NOT put threads to sleep.
+#if USE_ITT_BUILD
+ Arguments:
+ obj -- is higher-level synchronization object to report to ittnotify. It is used to report
+ locks consistently. For example, if lock is acquired immediately, its address is
+ reported to ittnotify via KMP_FSYNC_ACQUIRED(). However, it lock cannot be acquired
+ immediately and lock routine calls to KMP_WAIT_YIELD(), the later should report the same
+ address, not an address of low-level spinner.
+#endif // USE_ITT_BUILD
+*/
+template< typename UT >
+// ToDo: make inline function (move to header file for icl)
+static UT // unsigned 4- or 8-byte type
+__kmp_wait_yield( volatile UT * spinner,
+ UT checker,
+ kmp_uint32 (* pred)( UT, UT )
+ USE_ITT_BUILD_ARG(void * obj) // Higher-level synchronization object, or NULL.
+ )
+{
+ // note: we may not belong to a team at this point
+ register volatile UT * spin = spinner;
+ register UT check = checker;
+ register kmp_uint32 spins;
+ register kmp_uint32 (*f) ( UT, UT ) = pred;
+ register UT r;
+
+ KMP_FSYNC_SPIN_INIT( obj, (void*) spin );
+ KMP_INIT_YIELD( spins );
+ // main wait spin loop
+ while(!f(r = *spin, check))
+ {
+ KMP_FSYNC_SPIN_PREPARE( obj );
+ /* GEH - remove this since it was accidentally introduced when kmp_wait was split.
+ It causes problems with infinite recursion because of exit lock */
+ /* if ( TCR_4(__kmp_global.g.g_done) && __kmp_global.g.g_abort)
+ __kmp_abort_thread(); */
+
+ // if we are oversubscribed,
+ // or have waited a bit (and KMP_LIBRARY=throughput, then yield
+ // pause is in the following code
+ KMP_YIELD( TCR_4(__kmp_nth) > __kmp_avail_proc );
+ KMP_YIELD_SPIN( spins );
+ }
+ KMP_FSYNC_SPIN_ACQUIRED( obj );
+ return r;
+}
+
+template< typename UT >
+static kmp_uint32 __kmp_eq( UT value, UT checker) {
+ return value == checker;
+}
+
+template< typename UT >
+static kmp_uint32 __kmp_neq( UT value, UT checker) {
+ return value != checker;
+}
+
+template< typename UT >
+static kmp_uint32 __kmp_lt( UT value, UT checker) {
+ return value < checker;
+}
+
+template< typename UT >
+static kmp_uint32 __kmp_ge( UT value, UT checker) {
+ return value >= checker;
+}
+
+template< typename UT >
+static kmp_uint32 __kmp_le( UT value, UT checker) {
+ return value <= checker;
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+static void
+__kmp_dispatch_deo_error( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ kmp_info_t *th;
+
+ KMP_DEBUG_ASSERT( gtid_ref );
+
+ if ( __kmp_env_consistency_check ) {
+ th = __kmp_threads[*gtid_ref];
+ if ( th -> th.th_root -> r.r_active
+ && ( th -> th.th_dispatch -> th_dispatch_pr_current -> pushed_ws != ct_none ) ) {
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_push_sync( *gtid_ref, ct_ordered_in_pdo, loc_ref, NULL, 0 );
+#else
+ __kmp_push_sync( *gtid_ref, ct_ordered_in_pdo, loc_ref, NULL );
+#endif
+ }
+ }
+}
+
+template< typename UT >
+static void
+__kmp_dispatch_deo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ typedef typename traits_t< UT >::signed_t ST;
+ dispatch_private_info_template< UT > * pr;
+
+ int gtid = *gtid_ref;
+// int cid = *cid_ref;
+ kmp_info_t *th = __kmp_threads[ gtid ];
+ KMP_DEBUG_ASSERT( th -> th.th_dispatch );
+
+ KD_TRACE(100, ("__kmp_dispatch_deo: T#%d called\n", gtid ) );
+ if ( __kmp_env_consistency_check ) {
+ pr = reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_pr_current );
+ if ( pr -> pushed_ws != ct_none ) {
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_push_sync( gtid, ct_ordered_in_pdo, loc_ref, NULL, 0 );
+#else
+ __kmp_push_sync( gtid, ct_ordered_in_pdo, loc_ref, NULL );
+#endif
+ }
+ }
+
+ if ( ! th -> th.th_team -> t.t_serialized ) {
+ dispatch_shared_info_template< UT > * sh = reinterpret_cast< dispatch_shared_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_sh_current );
+ UT lower;
+
+ if ( ! __kmp_env_consistency_check ) {
+ pr = reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_pr_current );
+ }
+ lower = pr->u.p.ordered_lower;
+
+ #if ! defined( KMP_GOMP_COMPAT )
+ if ( __kmp_env_consistency_check ) {
+ if ( pr->ordered_bumped ) {
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsMultipleNesting,
+ ct_ordered_in_pdo, loc_ref,
+ & p->stack_data[ p->w_top ]
+ );
+ }
+ }
+ #endif /* !defined(KMP_GOMP_COMPAT) */
+
+ KMP_MB();
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_deo: T#%%d before wait: ordered_iter:%%%s lower:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, lower ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ __kmp_wait_yield< UT >( &sh->u.s.ordered_iteration, lower, __kmp_ge< UT >
+ USE_ITT_BUILD_ARG( NULL )
+ );
+ KMP_MB(); /* is this necessary? */
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_deo: T#%%d after wait: ordered_iter:%%%s lower:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, lower ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ }
+ KD_TRACE(100, ("__kmp_dispatch_deo: T#%d returned\n", gtid ) );
+}
+
+static void
+__kmp_dispatch_dxo_error( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ kmp_info_t *th;
+
+ if ( __kmp_env_consistency_check ) {
+ th = __kmp_threads[*gtid_ref];
+ if ( th -> th.th_dispatch -> th_dispatch_pr_current -> pushed_ws != ct_none ) {
+ __kmp_pop_sync( *gtid_ref, ct_ordered_in_pdo, loc_ref );
+ }
+ }
+}
+
+template< typename UT >
+static void
+__kmp_dispatch_dxo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ typedef typename traits_t< UT >::signed_t ST;
+ dispatch_private_info_template< UT > * pr;
+
+ int gtid = *gtid_ref;
+// int cid = *cid_ref;
+ kmp_info_t *th = __kmp_threads[ gtid ];
+ KMP_DEBUG_ASSERT( th -> th.th_dispatch );
+
+ KD_TRACE(100, ("__kmp_dispatch_dxo: T#%d called\n", gtid ) );
+ if ( __kmp_env_consistency_check ) {
+ pr = reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_pr_current );
+ if ( pr -> pushed_ws != ct_none ) {
+ __kmp_pop_sync( gtid, ct_ordered_in_pdo, loc_ref );
+ }
+ }
+
+ if ( ! th -> th.th_team -> t.t_serialized ) {
+ dispatch_shared_info_template< UT > * sh = reinterpret_cast< dispatch_shared_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_sh_current );
+
+ if ( ! __kmp_env_consistency_check ) {
+ pr = reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th -> th.th_dispatch -> th_dispatch_pr_current );
+ }
+
+ KMP_FSYNC_RELEASING( & sh->u.s.ordered_iteration );
+ #if ! defined( KMP_GOMP_COMPAT )
+ if ( __kmp_env_consistency_check ) {
+ if ( pr->ordered_bumped != 0 ) {
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ /* How to test it? - OM */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsMultipleNesting,
+ ct_ordered_in_pdo, loc_ref,
+ & p->stack_data[ p->w_top ]
+ );
+ }
+ }
+ #endif /* !defined(KMP_GOMP_COMPAT) */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ pr->ordered_bumped += 1;
+
+ KD_TRACE(1000, ("__kmp_dispatch_dxo: T#%d bumping ordered ordered_bumped=%d\n",
+ gtid, pr->ordered_bumped ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* TODO use general release procedure? */
+ test_then_inc< ST >( (volatile ST *) & sh->u.s.ordered_iteration );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+ KD_TRACE(100, ("__kmp_dispatch_dxo: T#%d returned\n", gtid ) );
+}
+
+/* Computes and returns x to the power of y, where y must a non-negative integer */
+template< typename UT >
+static __forceinline long double
+__kmp_pow(long double x, UT y) {
+ long double s=1.0L;
+
+ KMP_DEBUG_ASSERT(x > 0.0 && x < 1.0);
+ //KMP_DEBUG_ASSERT(y >= 0); // y is unsigned
+ while(y) {
+ if ( y & 1 )
+ s *= x;
+ x *= x;
+ y >>= 1;
+ }
+ return s;
+}
+
+/* Computes and returns the number of unassigned iterations after idx chunks have been assigned
+ (the total number of unassigned iterations in chunks with index greater than or equal to idx).
+ __forceinline seems to be broken so that if we __forceinline this function, the behavior is wrong
+ (one of the unit tests, sch_guided_analytical_basic.cpp, fails)
+*/
+template< typename T >
+static __inline typename traits_t< T >::unsigned_t
+__kmp_dispatch_guided_remaining(
+ T tc,
+ typename traits_t< T >::floating_t base,
+ typename traits_t< T >::unsigned_t idx
+) {
+ /* Note: On Windows* OS on IA-32 architecture and Intel(R) 64, at
+ least for ICL 8.1, long double arithmetic may not really have
+ long double precision, even with /Qlong_double. Currently, we
+ workaround that in the caller code, by manipulating the FPCW for
+ Windows* OS on IA-32 architecture. The lack of precision is not
+ expected to be a correctness issue, though.
+ */
+ typedef typename traits_t< T >::unsigned_t UT;
+
+ long double x = tc * __kmp_pow< UT >(base, idx);
+ UT r = (UT) x;
+ if ( x == r )
+ return r;
+ return r + 1;
+}
+
+// Parameters of the guided-iterative algorithm:
+// p2 = n * nproc * ( chunk + 1 ) // point of switching to dynamic
+// p3 = 1 / ( n * nproc ) // remaining iterations multiplier
+// by default n = 2. For example with n = 3 the chunks distribution will be more flat.
+// With n = 1 first chunk is the same as for static schedule, e.g. trip / nproc.
+static int guided_int_param = 2;
+static double guided_flt_param = 0.5;// = 1.0 / guided_int_param;
+
+// UT - unsigned flavor of T, ST - signed flavor of T,
+// DBL - double if sizeof(T)==4, or long double if sizeof(T)==8
+template< typename T >
+static void
+__kmp_dispatch_init(
+ ident_t * loc,
+ int gtid,
+ enum sched_type schedule,
+ T lb,
+ T ub,
+ typename traits_t< T >::signed_t st,
+ typename traits_t< T >::signed_t chunk,
+ int push_ws
+) {
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ typedef typename traits_t< T >::floating_t DBL;
+ static const int ___kmp_size_type = sizeof( UT );
+
+ int active;
+ T tc;
+ kmp_info_t * th;
+ kmp_team_t * team;
+ kmp_uint32 my_buffer_index;
+ dispatch_private_info_template< T > * pr;
+ dispatch_shared_info_template< UT > volatile * sh;
+
+ KMP_BUILD_ASSERT( sizeof( dispatch_private_info_template< T > ) == sizeof( dispatch_private_info ) );
+ KMP_BUILD_ASSERT( sizeof( dispatch_shared_info_template< UT > ) == sizeof( dispatch_shared_info ) );
+
+ if ( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_DISPATCH_INIT();
+#endif
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_init: T#%%d called: schedule:%%d chunk:%%%s lb:%%%s ub:%%%s st:%%%s\n",
+ traits_t< ST >::spec, traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(10, ( buff, gtid, schedule, chunk, lb, ub, st ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ /* setup data */
+ th = __kmp_threads[ gtid ];
+ team = th -> th.th_team;
+ active = ! team -> t.t_serialized;
+ th->th.th_ident = loc;
+
+#if USE_ITT_BUILD
+ kmp_uint64 cur_chunk = chunk;
+ int itt_need_metadata_reporting = __itt_metadata_add_ptr && __kmp_forkjoin_frames_mode == 3 &&
+ KMP_MASTER_GTID(gtid) &&
+#if OMP_40_ENABLED
+ th->th.th_teams_microtask == NULL &&
+#endif
+ team->t.t_active_level == 1;
+#endif
+ if ( ! active ) {
+ pr = reinterpret_cast< dispatch_private_info_template< T >* >
+ ( th -> th.th_dispatch -> th_disp_buffer ); /* top of the stack */
+ } else {
+ KMP_DEBUG_ASSERT( th->th.th_dispatch ==
+ &th->th.th_team->t.t_dispatch[th->th.th_info.ds.ds_tid] );
+
+ my_buffer_index = th->th.th_dispatch->th_disp_index ++;
+
+ /* What happens when number of threads changes, need to resize buffer? */
+ pr = reinterpret_cast< dispatch_private_info_template< T > * >
+ ( &th -> th.th_dispatch -> th_disp_buffer[ my_buffer_index % __kmp_dispatch_num_buffers ] );
+ sh = reinterpret_cast< dispatch_shared_info_template< UT > volatile * >
+ ( &team -> t.t_disp_buffer[ my_buffer_index % __kmp_dispatch_num_buffers ] );
+ }
+
+ #if ( KMP_STATIC_STEAL_ENABLED )
+ if ( SCHEDULE_HAS_NONMONOTONIC(schedule) )
+ // AC: we now have only one implementation of stealing, so use it
+ schedule = kmp_sch_static_steal;
+ else
+ #endif
+ schedule = SCHEDULE_WITHOUT_MODIFIERS(schedule);
+
+ /* Pick up the nomerge/ordered bits from the scheduling type */
+ if ( (schedule >= kmp_nm_lower) && (schedule < kmp_nm_upper) ) {
+ pr->nomerge = TRUE;
+ schedule = (enum sched_type)(((int)schedule) - (kmp_nm_lower - kmp_sch_lower));
+ } else {
+ pr->nomerge = FALSE;
+ }
+ pr->type_size = ___kmp_size_type; // remember the size of variables
+ if ( kmp_ord_lower & schedule ) {
+ pr->ordered = TRUE;
+ schedule = (enum sched_type)(((int)schedule) - (kmp_ord_lower - kmp_sch_lower));
+ } else {
+ pr->ordered = FALSE;
+ }
+
+ if ( schedule == kmp_sch_static ) {
+ schedule = __kmp_static;
+ } else {
+ if ( schedule == kmp_sch_runtime ) {
+ // Use the scheduling specified by OMP_SCHEDULE (or __kmp_sch_default if not specified)
+ schedule = team -> t.t_sched.r_sched_type;
+ // Detail the schedule if needed (global controls are differentiated appropriately)
+ if ( schedule == kmp_sch_guided_chunked ) {
+ schedule = __kmp_guided;
+ } else if ( schedule == kmp_sch_static ) {
+ schedule = __kmp_static;
+ }
+ // Use the chunk size specified by OMP_SCHEDULE (or default if not specified)
+ chunk = team -> t.t_sched.chunk;
+#if USE_ITT_BUILD
+ cur_chunk = chunk;
+#endif
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_init: T#%%d new: schedule:%%d chunk:%%%s\n",
+ traits_t< ST >::spec );
+ KD_TRACE(10, ( buff, gtid, schedule, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } else {
+ if ( schedule == kmp_sch_guided_chunked ) {
+ schedule = __kmp_guided;
+ }
+ if ( chunk <= 0 ) {
+ chunk = KMP_DEFAULT_CHUNK;
+ }
+ }
+
+ if ( schedule == kmp_sch_auto ) {
+ // mapping and differentiation: in the __kmp_do_serial_initialize()
+ schedule = __kmp_auto;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_init: kmp_sch_auto: T#%%d new: schedule:%%d chunk:%%%s\n",
+ traits_t< ST >::spec );
+ KD_TRACE(10, ( buff, gtid, schedule, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ }
+
+ /* guided analytical not safe for too many threads */
+ if ( schedule == kmp_sch_guided_analytical_chunked && th->th.th_team_nproc > 1<<20 ) {
+ schedule = kmp_sch_guided_iterative_chunked;
+ KMP_WARNING( DispatchManyThreads );
+ }
+ pr->u.p.parm1 = chunk;
+ }
+ KMP_ASSERT2( (kmp_sch_lower < schedule && schedule < kmp_sch_upper),
+ "unknown scheduling type" );
+
+ pr->u.p.count = 0;
+
+ if ( __kmp_env_consistency_check ) {
+ if ( st == 0 ) {
+ __kmp_error_construct(
+ kmp_i18n_msg_CnsLoopIncrZeroProhibited,
+ ( pr->ordered ? ct_pdo_ordered : ct_pdo ), loc
+ );
+ }
+ }
+ // compute trip count
+ if ( st == 1 ) { // most common case
+ if ( ub >= lb ) {
+ tc = ub - lb + 1;
+ } else { // ub < lb
+ tc = 0; // zero-trip
+ }
+ } else if ( st < 0 ) {
+ if ( lb >= ub ) {
+ // AC: cast to unsigned is needed for loops like (i=2B; i>-2B; i-=1B),
+ // where the division needs to be unsigned regardless of the result type
+ tc = (UT)(lb - ub) / (-st) + 1;
+ } else { // lb < ub
+ tc = 0; // zero-trip
+ }
+ } else { // st > 0
+ if ( ub >= lb ) {
+ // AC: cast to unsigned is needed for loops like (i=-2B; i<2B; i+=1B),
+ // where the division needs to be unsigned regardless of the result type
+ tc = (UT)(ub - lb) / st + 1;
+ } else { // ub < lb
+ tc = 0; // zero-trip
+ }
+ }
+
+ // Any half-decent optimizer will remove this test when the blocks are empty since the macros expand to nothing
+ // when statistics are disabled.
+ if (schedule == __kmp_static)
+ {
+ KMP_COUNT_BLOCK(OMP_FOR_static);
+ KMP_COUNT_VALUE(FOR_static_iterations, tc);
+ }
+ else
+ {
+ KMP_COUNT_BLOCK(OMP_FOR_dynamic);
+ KMP_COUNT_VALUE(FOR_dynamic_iterations, tc);
+ }
+
+ pr->u.p.lb = lb;
+ pr->u.p.ub = ub;
+ pr->u.p.st = st;
+ pr->u.p.tc = tc;
+
+ #if KMP_OS_WINDOWS
+ pr->u.p.last_upper = ub + st;
+ #endif /* KMP_OS_WINDOWS */
+
+ /* NOTE: only the active parallel region(s) has active ordered sections */
+
+ if ( active ) {
+ if ( pr->ordered == 0 ) {
+ th -> th.th_dispatch -> th_deo_fcn = __kmp_dispatch_deo_error;
+ th -> th.th_dispatch -> th_dxo_fcn = __kmp_dispatch_dxo_error;
+ } else {
+ pr->ordered_bumped = 0;
+
+ pr->u.p.ordered_lower = 1;
+ pr->u.p.ordered_upper = 0;
+
+ th -> th.th_dispatch -> th_deo_fcn = __kmp_dispatch_deo< UT >;
+ th -> th.th_dispatch -> th_dxo_fcn = __kmp_dispatch_dxo< UT >;
+ }
+ }
+
+ if ( __kmp_env_consistency_check ) {
+ enum cons_type ws = pr->ordered ? ct_pdo_ordered : ct_pdo;
+ if ( push_ws ) {
+ __kmp_push_workshare( gtid, ws, loc );
+ pr->pushed_ws = ws;
+ } else {
+ __kmp_check_workshare( gtid, ws, loc );
+ pr->pushed_ws = ct_none;
+ }
+ }
+
+ switch ( schedule ) {
+ #if ( KMP_STATIC_STEAL_ENABLED )
+ case kmp_sch_static_steal:
+ {
+ T nproc = th->th.th_team_nproc;
+ T ntc, init;
+
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d kmp_sch_static_steal case\n", gtid ) );
+
+ ntc = (tc % chunk ? 1 : 0) + tc / chunk;
+ if ( nproc > 1 && ntc >= nproc ) {
+ T id = __kmp_tid_from_gtid(gtid);
+ T small_chunk, extras;
+
+ small_chunk = ntc / nproc;
+ extras = ntc % nproc;
+
+ init = id * small_chunk + ( id < extras ? id : extras );
+ pr->u.p.count = init;
+ pr->u.p.ub = init + small_chunk + ( id < extras ? 1 : 0 );
+
+ pr->u.p.parm2 = lb;
+ //pr->pfields.parm3 = 0; // it's not used in static_steal
+ pr->u.p.parm4 = (id + 1) % nproc; // remember neighbour tid
+ pr->u.p.st = st;
+ if ( ___kmp_size_type > 4 ) {
+ // AC: TODO: check if 16-byte CAS available and use it to
+ // improve performance (probably wait for explicit request
+ // before spending time on this).
+ // For now use dynamically allocated per-thread lock,
+ // free memory in __kmp_dispatch_next when status==0.
+ KMP_DEBUG_ASSERT(th->th.th_dispatch->th_steal_lock == NULL);
+ th->th.th_dispatch->th_steal_lock =
+ (kmp_lock_t*)__kmp_allocate(sizeof(kmp_lock_t));
+ __kmp_init_lock(th->th.th_dispatch->th_steal_lock);
+ }
+ break;
+ } else {
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d falling-through to kmp_sch_static_balanced\n",
+ gtid ) );
+ schedule = kmp_sch_static_balanced;
+ /* too few iterations: fall-through to kmp_sch_static_balanced */
+ } // if
+ /* FALL-THROUGH to static balanced */
+ } // case
+ #endif
+ case kmp_sch_static_balanced:
+ {
+ T nproc = th->th.th_team_nproc;
+ T init, limit;
+
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d kmp_sch_static_balanced case\n",
+ gtid ) );
+
+ if ( nproc > 1 ) {
+ T id = __kmp_tid_from_gtid(gtid);
+
+ if ( tc < nproc ) {
+ if ( id < tc ) {
+ init = id;
+ limit = id;
+ pr->u.p.parm1 = (id == tc - 1); /* parm1 stores *plastiter */
+ } else {
+ pr->u.p.count = 1; /* means no more chunks to execute */
+ pr->u.p.parm1 = FALSE;
+ break;
+ }
+ } else {
+ T small_chunk = tc / nproc;
+ T extras = tc % nproc;
+ init = id * small_chunk + (id < extras ? id : extras);
+ limit = init + small_chunk - (id < extras ? 0 : 1);
+ pr->u.p.parm1 = (id == nproc - 1);
+ }
+ } else {
+ if ( tc > 0 ) {
+ init = 0;
+ limit = tc - 1;
+ pr->u.p.parm1 = TRUE;
+ } else {
+ // zero trip count
+ pr->u.p.count = 1; /* means no more chunks to execute */
+ pr->u.p.parm1 = FALSE;
+ break;
+ }
+ }
+#if USE_ITT_BUILD
+ // Calculate chunk for metadata report
+ if ( itt_need_metadata_reporting )
+ cur_chunk = limit - init + 1;
+#endif
+ if ( st == 1 ) {
+ pr->u.p.lb = lb + init;
+ pr->u.p.ub = lb + limit;
+ } else {
+ T ub_tmp = lb + limit * st; // calculated upper bound, "ub" is user-defined upper bound
+ pr->u.p.lb = lb + init * st;
+ // adjust upper bound to "ub" if needed, so that MS lastprivate will match it exactly
+ if ( st > 0 ) {
+ pr->u.p.ub = ( ub_tmp + st > ub ? ub : ub_tmp );
+ } else {
+ pr->u.p.ub = ( ub_tmp + st < ub ? ub : ub_tmp );
+ }
+ }
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ }
+ break;
+ } // case
+ case kmp_sch_guided_iterative_chunked :
+ {
+ T nproc = th->th.th_team_nproc;
+ KD_TRACE(100,("__kmp_dispatch_init: T#%d kmp_sch_guided_iterative_chunked case\n",gtid));
+
+ if ( nproc > 1 ) {
+ if ( (2L * chunk + 1 ) * nproc >= tc ) {
+ /* chunk size too large, switch to dynamic */
+ schedule = kmp_sch_dynamic_chunked;
+ } else {
+ // when remaining iters become less than parm2 - switch to dynamic
+ pr->u.p.parm2 = guided_int_param * nproc * ( chunk + 1 );
+ *(double*)&pr->u.p.parm3 = guided_flt_param / nproc; // may occupy parm3 and parm4
+ }
+ } else {
+ KD_TRACE(100,("__kmp_dispatch_init: T#%d falling-through to kmp_sch_static_greedy\n",gtid));
+ schedule = kmp_sch_static_greedy;
+ /* team->t.t_nproc == 1: fall-through to kmp_sch_static_greedy */
+ KD_TRACE(100,("__kmp_dispatch_init: T#%d kmp_sch_static_greedy case\n",gtid));
+ pr->u.p.parm1 = tc;
+ } // if
+ } // case
+ break;
+ case kmp_sch_guided_analytical_chunked:
+ {
+ T nproc = th->th.th_team_nproc;
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d kmp_sch_guided_analytical_chunked case\n", gtid));
+
+ if ( nproc > 1 ) {
+ if ( (2L * chunk + 1 ) * nproc >= tc ) {
+ /* chunk size too large, switch to dynamic */
+ schedule = kmp_sch_dynamic_chunked;
+ } else {
+ /* commonly used term: (2 nproc - 1)/(2 nproc) */
+ DBL x;
+
+ #if KMP_OS_WINDOWS && KMP_ARCH_X86
+ /* Linux* OS already has 64-bit computation by default for
+ long double, and on Windows* OS on Intel(R) 64,
+ /Qlong_double doesn't work. On Windows* OS
+ on IA-32 architecture, we need to set precision to
+ 64-bit instead of the default 53-bit. Even though long
+ double doesn't work on Windows* OS on Intel(R) 64, the
+ resulting lack of precision is not expected to impact
+ the correctness of the algorithm, but this has not been
+ mathematically proven.
+ */
+ // save original FPCW and set precision to 64-bit, as
+ // Windows* OS on IA-32 architecture defaults to 53-bit
+ unsigned int oldFpcw = _control87(0,0);
+ _control87(_PC_64,_MCW_PC); // 0,0x30000
+ #endif
+ /* value used for comparison in solver for cross-over point */
+ long double target = ((long double)chunk * 2 + 1) * nproc / tc;
+
+ /* crossover point--chunk indexes equal to or greater than
+ this point switch to dynamic-style scheduling */
+ UT cross;
+
+ /* commonly used term: (2 nproc - 1)/(2 nproc) */
+ x = (long double)1.0 - (long double)0.5 / nproc;
+
+ #ifdef KMP_DEBUG
+ { // test natural alignment
+ struct _test_a {
+ char a;
+ union {
+ char b;
+ DBL d;
+ };
+ } t;
+ ptrdiff_t natural_alignment = (ptrdiff_t)&t.b - (ptrdiff_t)&t - (ptrdiff_t)1;
+ //__kmp_warn( " %llx %llx %lld", (long long)&t.d, (long long)&t, (long long)natural_alignment );
+ KMP_DEBUG_ASSERT( ( ( (ptrdiff_t)&pr->u.p.parm3 ) & ( natural_alignment ) ) == 0 );
+ }
+ #endif // KMP_DEBUG
+
+ /* save the term in thread private dispatch structure */
+ *(DBL*)&pr->u.p.parm3 = x;
+
+ /* solve for the crossover point to the nearest integer i for which C_i <= chunk */
+ {
+ UT left, right, mid;
+ long double p;
+
+ /* estimate initial upper and lower bound */
+
+ /* doesn't matter what value right is as long as it is positive, but
+ it affects performance of the solver
+ */
+ right = 229;
+ p = __kmp_pow< UT >(x,right);
+ if ( p > target ) {
+ do{
+ p *= p;
+ right <<= 1;
+ } while(p>target && right < (1<<27));
+ left = right >> 1; /* lower bound is previous (failed) estimate of upper bound */
+ } else {
+ left = 0;
+ }
+
+ /* bisection root-finding method */
+ while ( left + 1 < right ) {
+ mid = (left + right) / 2;
+ if ( __kmp_pow< UT >(x,mid) > target ) {
+ left = mid;
+ } else {
+ right = mid;
+ }
+ } // while
+ cross = right;
+ }
+ /* assert sanity of computed crossover point */
+ KMP_ASSERT(cross && __kmp_pow< UT >(x, cross - 1) > target && __kmp_pow< UT >(x, cross) <= target);
+
+ /* save the crossover point in thread private dispatch structure */
+ pr->u.p.parm2 = cross;
+
+ // C75803
+ #if ( ( KMP_OS_LINUX || KMP_OS_WINDOWS ) && KMP_ARCH_X86 ) && ( ! defined( KMP_I8 ) )
+ #define GUIDED_ANALYTICAL_WORKAROUND (*( DBL * )&pr->u.p.parm3)
+ #else
+ #define GUIDED_ANALYTICAL_WORKAROUND (x)
+ #endif
+ /* dynamic-style scheduling offset */
+ pr->u.p.count = tc - __kmp_dispatch_guided_remaining(tc, GUIDED_ANALYTICAL_WORKAROUND, cross) - cross * chunk;
+ #if KMP_OS_WINDOWS && KMP_ARCH_X86
+ // restore FPCW
+ _control87(oldFpcw,_MCW_PC);
+ #endif
+ } // if
+ } else {
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d falling-through to kmp_sch_static_greedy\n",
+ gtid ) );
+ schedule = kmp_sch_static_greedy;
+ /* team->t.t_nproc == 1: fall-through to kmp_sch_static_greedy */
+ pr->u.p.parm1 = tc;
+ } // if
+ } // case
+ break;
+ case kmp_sch_static_greedy:
+ KD_TRACE(100,("__kmp_dispatch_init: T#%d kmp_sch_static_greedy case\n",gtid));
+ pr->u.p.parm1 = ( th->th.th_team_nproc > 1 ) ?
+ ( tc + th->th.th_team_nproc - 1 ) / th->th.th_team_nproc :
+ tc;
+ break;
+ case kmp_sch_static_chunked :
+ case kmp_sch_dynamic_chunked :
+ if ( pr->u.p.parm1 <= 0 ) {
+ pr->u.p.parm1 = KMP_DEFAULT_CHUNK;
+ }
+ KD_TRACE(100,("__kmp_dispatch_init: T#%d kmp_sch_static_chunked/kmp_sch_dynamic_chunked cases\n", gtid));
+ break;
+ case kmp_sch_trapezoidal :
+ {
+ /* TSS: trapezoid self-scheduling, minimum chunk_size = parm1 */
+
+ T parm1, parm2, parm3, parm4;
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d kmp_sch_trapezoidal case\n", gtid ) );
+
+ parm1 = chunk;
+
+ /* F : size of the first cycle */
+ parm2 = ( tc / (2 * th->th.th_team_nproc) );
+
+ if ( parm2 < 1 ) {
+ parm2 = 1;
+ }
+
+ /* L : size of the last cycle. Make sure the last cycle
+ * is not larger than the first cycle.
+ */
+ if ( parm1 < 1 ) {
+ parm1 = 1;
+ } else if ( parm1 > parm2 ) {
+ parm1 = parm2;
+ }
+
+ /* N : number of cycles */
+ parm3 = ( parm2 + parm1 );
+ parm3 = ( 2 * tc + parm3 - 1) / parm3;
+
+ if ( parm3 < 2 ) {
+ parm3 = 2;
+ }
+
+ /* sigma : decreasing incr of the trapezoid */
+ parm4 = ( parm3 - 1 );
+ parm4 = ( parm2 - parm1 ) / parm4;
+
+ // pointless check, because parm4 >= 0 always
+ //if ( parm4 < 0 ) {
+ // parm4 = 0;
+ //}
+
+ pr->u.p.parm1 = parm1;
+ pr->u.p.parm2 = parm2;
+ pr->u.p.parm3 = parm3;
+ pr->u.p.parm4 = parm4;
+ } // case
+ break;
+
+ default:
+ {
+ __kmp_msg(
+ kmp_ms_fatal, // Severity
+ KMP_MSG( UnknownSchedTypeDetected ), // Primary message
+ KMP_HNT( GetNewerLibrary ), // Hint
+ __kmp_msg_null // Variadic argument list terminator
+ );
+ }
+ break;
+ } // switch
+ pr->schedule = schedule;
+ if ( active ) {
+ /* The name of this buffer should be my_buffer_index when it's free to use it */
+
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d before wait: my_buffer_index:%d sh->buffer_index:%d\n",
+ gtid, my_buffer_index, sh->buffer_index) );
+ __kmp_wait_yield< kmp_uint32 >( & sh->buffer_index, my_buffer_index, __kmp_eq< kmp_uint32 >
+ USE_ITT_BUILD_ARG( NULL )
+ );
+ // Note: KMP_WAIT_YIELD() cannot be used there: buffer index and my_buffer_index are
+ // *always* 32-bit integers.
+ KMP_MB(); /* is this necessary? */
+ KD_TRACE(100, ("__kmp_dispatch_init: T#%d after wait: my_buffer_index:%d sh->buffer_index:%d\n",
+ gtid, my_buffer_index, sh->buffer_index) );
+
+ th -> th.th_dispatch -> th_dispatch_pr_current = (dispatch_private_info_t*) pr;
+ th -> th.th_dispatch -> th_dispatch_sh_current = (dispatch_shared_info_t*) sh;
+#if USE_ITT_BUILD
+ if ( pr->ordered ) {
+ __kmp_itt_ordered_init( gtid );
+ }; // if
+ // Report loop metadata
+ if ( itt_need_metadata_reporting ) {
+ // Only report metadata by master of active team at level 1
+ kmp_uint64 schedtype = 0;
+ switch ( schedule ) {
+ case kmp_sch_static_chunked:
+ case kmp_sch_static_balanced:// Chunk is calculated in the switch above
+ break;
+ case kmp_sch_static_greedy:
+ cur_chunk = pr->u.p.parm1;
+ break;
+ case kmp_sch_dynamic_chunked:
+ schedtype = 1;
+ break;
+ case kmp_sch_guided_iterative_chunked:
+ case kmp_sch_guided_analytical_chunked:
+ schedtype = 2;
+ break;
+ default:
+// Should we put this case under "static"?
+// case kmp_sch_static_steal:
+ schedtype = 3;
+ break;
+ }
+ __kmp_itt_metadata_loop(loc, schedtype, tc, cur_chunk);
+ }
+#endif /* USE_ITT_BUILD */
+ }; // if
+
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_init: T#%%d returning: schedule:%%d ordered:%%%s lb:%%%s ub:%%%s" \
+ " st:%%%s tc:%%%s count:%%%s\n\tordered_lower:%%%s ordered_upper:%%%s" \
+ " parm1:%%%s parm2:%%%s parm3:%%%s parm4:%%%s\n",
+ traits_t< UT >::spec, traits_t< T >::spec, traits_t< T >::spec,
+ traits_t< ST >::spec, traits_t< UT >::spec, traits_t< UT >::spec,
+ traits_t< UT >::spec, traits_t< UT >::spec, traits_t< T >::spec,
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< T >::spec );
+ KD_TRACE(10, ( buff,
+ gtid, pr->schedule, pr->ordered, pr->u.p.lb, pr->u.p.ub,
+ pr->u.p.st, pr->u.p.tc, pr->u.p.count,
+ pr->u.p.ordered_lower, pr->u.p.ordered_upper, pr->u.p.parm1,
+ pr->u.p.parm2, pr->u.p.parm3, pr->u.p.parm4 ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ #if ( KMP_STATIC_STEAL_ENABLED )
+ // It cannot be guaranteed that after execution of a loop with some other schedule kind
+ // all the parm3 variables will contain the same value.
+ // Even if all parm3 will be the same, it still exists a bad case like using 0 and 1
+ // rather than program life-time increment.
+ // So the dedicated variable is required. The 'static_steal_counter' is used.
+ if( schedule == kmp_sch_static_steal ) {
+ // Other threads will inspect this variable when searching for a victim.
+ // This is a flag showing that other threads may steal from this thread since then.
+ volatile T * p = &pr->u.p.static_steal_counter;
+ *p = *p + 1;
+ }
+ #endif // ( KMP_STATIC_STEAL_ENABLED )
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)) {
+ ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)(
+ team_info->parallel_id, task_info->task_id, team_info->microtask);
+ }
+#endif
+}
+
+/*
+ * For ordered loops, either __kmp_dispatch_finish() should be called after
+ * every iteration, or __kmp_dispatch_finish_chunk() should be called after
+ * every chunk of iterations. If the ordered section(s) were not executed
+ * for this iteration (or every iteration in this chunk), we need to set the
+ * ordered iteration counters so that the next thread can proceed.
+ */
+template< typename UT >
+static void
+__kmp_dispatch_finish( int gtid, ident_t *loc )
+{
+ typedef typename traits_t< UT >::signed_t ST;
+ kmp_info_t *th = __kmp_threads[ gtid ];
+
+ KD_TRACE(100, ("__kmp_dispatch_finish: T#%d called\n", gtid ) );
+ if ( ! th -> th.th_team -> t.t_serialized ) {
+
+ dispatch_private_info_template< UT > * pr =
+ reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th->th.th_dispatch->th_dispatch_pr_current );
+ dispatch_shared_info_template< UT > volatile * sh =
+ reinterpret_cast< dispatch_shared_info_template< UT >volatile* >
+ ( th->th.th_dispatch->th_dispatch_sh_current );
+ KMP_DEBUG_ASSERT( pr );
+ KMP_DEBUG_ASSERT( sh );
+ KMP_DEBUG_ASSERT( th->th.th_dispatch ==
+ &th->th.th_team->t.t_dispatch[th->th.th_info.ds.ds_tid] );
+
+ if ( pr->ordered_bumped ) {
+ KD_TRACE(1000, ("__kmp_dispatch_finish: T#%d resetting ordered_bumped to zero\n",
+ gtid ) );
+ pr->ordered_bumped = 0;
+ } else {
+ UT lower = pr->u.p.ordered_lower;
+
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_finish: T#%%d before wait: ordered_iteration:%%%s lower:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, lower ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ __kmp_wait_yield< UT >(&sh->u.s.ordered_iteration, lower, __kmp_ge< UT >
+ USE_ITT_BUILD_ARG(NULL)
+ );
+ KMP_MB(); /* is this necessary? */
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_finish: T#%%d after wait: ordered_iteration:%%%s lower:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, lower ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ test_then_inc< ST >( (volatile ST *) & sh->u.s.ordered_iteration );
+ } // if
+ } // if
+ KD_TRACE(100, ("__kmp_dispatch_finish: T#%d returned\n", gtid ) );
+}
+
+#ifdef KMP_GOMP_COMPAT
+
+template< typename UT >
+static void
+__kmp_dispatch_finish_chunk( int gtid, ident_t *loc )
+{
+ typedef typename traits_t< UT >::signed_t ST;
+ kmp_info_t *th = __kmp_threads[ gtid ];
+
+ KD_TRACE(100, ("__kmp_dispatch_finish_chunk: T#%d called\n", gtid ) );
+ if ( ! th -> th.th_team -> t.t_serialized ) {
+// int cid;
+ dispatch_private_info_template< UT > * pr =
+ reinterpret_cast< dispatch_private_info_template< UT >* >
+ ( th->th.th_dispatch->th_dispatch_pr_current );
+ dispatch_shared_info_template< UT > volatile * sh =
+ reinterpret_cast< dispatch_shared_info_template< UT >volatile* >
+ ( th->th.th_dispatch->th_dispatch_sh_current );
+ KMP_DEBUG_ASSERT( pr );
+ KMP_DEBUG_ASSERT( sh );
+ KMP_DEBUG_ASSERT( th->th.th_dispatch ==
+ &th->th.th_team->t.t_dispatch[th->th.th_info.ds.ds_tid] );
+
+// for (cid = 0; cid < KMP_MAX_ORDERED; ++cid) {
+ UT lower = pr->u.p.ordered_lower;
+ UT upper = pr->u.p.ordered_upper;
+ UT inc = upper - lower + 1;
+
+ if ( pr->ordered_bumped == inc ) {
+ KD_TRACE(1000, ("__kmp_dispatch_finish: T#%d resetting ordered_bumped to zero\n",
+ gtid ) );
+ pr->ordered_bumped = 0;
+ } else {
+ inc -= pr->ordered_bumped;
+
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_finish_chunk: T#%%d before wait: " \
+ "ordered_iteration:%%%s lower:%%%s upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, lower, upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ __kmp_wait_yield< UT >(&sh->u.s.ordered_iteration, lower, __kmp_ge< UT >
+ USE_ITT_BUILD_ARG(NULL)
+ );
+
+ KMP_MB(); /* is this necessary? */
+ KD_TRACE(1000, ("__kmp_dispatch_finish_chunk: T#%d resetting ordered_bumped to zero\n",
+ gtid ) );
+ pr->ordered_bumped = 0;
+//!!!!! TODO check if the inc should be unsigned, or signed???
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_finish_chunk: T#%%d after wait: " \
+ "ordered_iteration:%%%s inc:%%%s lower:%%%s upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec, traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, sh->u.s.ordered_iteration, inc, lower, upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ test_then_add< ST >( (volatile ST *) & sh->u.s.ordered_iteration, inc);
+ }
+// }
+ }
+ KD_TRACE(100, ("__kmp_dispatch_finish_chunk: T#%d returned\n", gtid ) );
+}
+
+#endif /* KMP_GOMP_COMPAT */
+
+/* Define a macro for exiting __kmp_dispatch_next(). If status is 0
+ * (no more work), then tell OMPT the loop is over. In some cases
+ * kmp_dispatch_fini() is not called. */
+#if OMPT_SUPPORT && OMPT_TRACE
+#define OMPT_LOOP_END \
+ if (status == 0) { \
+ if (ompt_enabled && \
+ ompt_callbacks.ompt_callback(ompt_event_loop_end)) { \
+ ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL); \
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0); \
+ ompt_callbacks.ompt_callback(ompt_event_loop_end)( \
+ team_info->parallel_id, task_info->task_id); \
+ } \
+ }
+#else
+#define OMPT_LOOP_END // no-op
+#endif
+
+template< typename T >
+static int
+__kmp_dispatch_next(
+ ident_t *loc, int gtid, kmp_int32 *p_last, T *p_lb, T *p_ub, typename traits_t< T >::signed_t *p_st
+) {
+
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ typedef typename traits_t< T >::floating_t DBL;
+#if ( KMP_STATIC_STEAL_ENABLED )
+ static const int ___kmp_size_type = sizeof( UT );
+#endif
+
+ // This is potentially slightly misleading, schedule(runtime) will appear here even if the actual runtme schedule
+ // is static. (Which points out a disadavantage of schedule(runtime): even when static scheduling is used it costs
+ // more than a compile time choice to use static scheduling would.)
+ KMP_TIME_PARTITIONED_BLOCK(FOR_dynamic_scheduling);
+
+ int status;
+ dispatch_private_info_template< T > * pr;
+ kmp_info_t * th = __kmp_threads[ gtid ];
+ kmp_team_t * team = th -> th.th_team;
+
+ KMP_DEBUG_ASSERT( p_lb && p_ub && p_st ); // AC: these cannot be NULL
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d called p_lb:%%%s p_ub:%%%s p_st:%%%s p_last: %%p\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(1000, ( buff, gtid, *p_lb, *p_ub, p_st ? *p_st : 0, p_last ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ if ( team -> t.t_serialized ) {
+ /* NOTE: serialize this dispatch becase we are not at the active level */
+ pr = reinterpret_cast< dispatch_private_info_template< T >* >
+ ( th -> th.th_dispatch -> th_disp_buffer ); /* top of the stack */
+ KMP_DEBUG_ASSERT( pr );
+
+ if ( (status = (pr->u.p.tc != 0)) == 0 ) {
+ *p_lb = 0;
+ *p_ub = 0;
+// if ( p_last != NULL )
+// *p_last = 0;
+ if ( p_st != NULL )
+ *p_st = 0;
+ if ( __kmp_env_consistency_check ) {
+ if ( pr->pushed_ws != ct_none ) {
+ pr->pushed_ws = __kmp_pop_workshare( gtid, pr->pushed_ws, loc );
+ }
+ }
+ } else if ( pr->nomerge ) {
+ kmp_int32 last;
+ T start;
+ UT limit, trip, init;
+ ST incr;
+ T chunk = pr->u.p.parm1;
+
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_dynamic_chunked case\n", gtid ) );
+
+ init = chunk * pr->u.p.count++;
+ trip = pr->u.p.tc - 1;
+
+ if ( (status = (init <= trip)) == 0 ) {
+ *p_lb = 0;
+ *p_ub = 0;
+// if ( p_last != NULL )
+// *p_last = 0;
+ if ( p_st != NULL )
+ *p_st = 0;
+ if ( __kmp_env_consistency_check ) {
+ if ( pr->pushed_ws != ct_none ) {
+ pr->pushed_ws = __kmp_pop_workshare( gtid, pr->pushed_ws, loc );
+ }
+ }
+ } else {
+ start = pr->u.p.lb;
+ limit = chunk + init - 1;
+ incr = pr->u.p.st;
+
+ if ( (last = (limit >= trip)) != 0 ) {
+ limit = trip;
+ #if KMP_OS_WINDOWS
+ pr->u.p.last_upper = pr->u.p.ub;
+ #endif /* KMP_OS_WINDOWS */
+ }
+ if ( p_last != NULL )
+ *p_last = last;
+ if ( p_st != NULL )
+ *p_st = incr;
+ if ( incr == 1 ) {
+ *p_lb = start + init;
+ *p_ub = start + limit;
+ } else {
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ }
+
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // if
+ } else {
+ pr->u.p.tc = 0;
+ *p_lb = pr->u.p.lb;
+ *p_ub = pr->u.p.ub;
+ #if KMP_OS_WINDOWS
+ pr->u.p.last_upper = *p_ub;
+ #endif /* KMP_OS_WINDOWS */
+ if ( p_last != NULL )
+ *p_last = TRUE;
+ if ( p_st != NULL )
+ *p_st = pr->u.p.st;
+ } // if
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d serialized case: p_lb:%%%s " \
+ "p_ub:%%%s p_st:%%%s p_last:%%p %%d returning:%%d\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(10, ( buff, gtid, *p_lb, *p_ub, *p_st, p_last, *p_last, status) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_DISPATCH_NEXT();
+#endif
+ OMPT_LOOP_END;
+ return status;
+ } else {
+ kmp_int32 last = 0;
+ dispatch_shared_info_template< UT > *sh;
+ T start;
+ ST incr;
+ UT limit, trip, init;
+
+ KMP_DEBUG_ASSERT( th->th.th_dispatch ==
+ &th->th.th_team->t.t_dispatch[th->th.th_info.ds.ds_tid] );
+
+ pr = reinterpret_cast< dispatch_private_info_template< T >* >
+ ( th->th.th_dispatch->th_dispatch_pr_current );
+ KMP_DEBUG_ASSERT( pr );
+ sh = reinterpret_cast< dispatch_shared_info_template< UT >* >
+ ( th->th.th_dispatch->th_dispatch_sh_current );
+ KMP_DEBUG_ASSERT( sh );
+
+ if ( pr->u.p.tc == 0 ) {
+ // zero trip count
+ status = 0;
+ } else {
+ switch (pr->schedule) {
+ #if ( KMP_STATIC_STEAL_ENABLED )
+ case kmp_sch_static_steal:
+ {
+ T chunk = pr->u.p.parm1;
+ int nproc = th->th.th_team_nproc;
+
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_static_steal case\n", gtid) );
+
+ trip = pr->u.p.tc - 1;
+
+ if ( ___kmp_size_type > 4 ) {
+ // use lock for 8-byte and CAS for 4-byte induction
+ // variable. TODO (optional): check and use 16-byte CAS
+ kmp_lock_t * lck = th->th.th_dispatch->th_steal_lock;
+ KMP_DEBUG_ASSERT(lck != NULL);
+ if( pr->u.p.count < (UT)pr->u.p.ub ) {
+ __kmp_acquire_lock(lck, gtid);
+ // try to get own chunk of iterations
+ init = ( pr->u.p.count )++;
+ status = ( init < (UT)pr->u.p.ub );
+ __kmp_release_lock(lck, gtid);
+ } else {
+ status = 0; // no own chunks
+ }
+ if( !status ) { // try to steal
+ kmp_info_t **other_threads = team->t.t_threads;
+ int while_limit = nproc; // nproc attempts to find a victim
+ int while_index = 0;
+ // TODO: algorithm of searching for a victim
+ // should be cleaned up and measured
+ while ( ( !status ) && ( while_limit != ++while_index ) ) {
+ T remaining;
+ T victimIdx = pr->u.p.parm4;
+ T oldVictimIdx = victimIdx ? victimIdx - 1 : nproc - 1;
+ dispatch_private_info_template< T > * victim =
+ reinterpret_cast< dispatch_private_info_template< T >* >
+ (other_threads[victimIdx]->th.th_dispatch->th_dispatch_pr_current);
+ while( ( victim == NULL || victim == pr ||
+ ( *(volatile T*)&victim->u.p.static_steal_counter !=
+ *(volatile T*)&pr->u.p.static_steal_counter ) ) &&
+ oldVictimIdx != victimIdx )
+ {
+ victimIdx = (victimIdx + 1) % nproc;
+ victim = reinterpret_cast< dispatch_private_info_template< T >* >
+ (other_threads[victimIdx]->th.th_dispatch->th_dispatch_pr_current);
+ };
+ if( !victim ||
+ ( *(volatile T *)&victim->u.p.static_steal_counter !=
+ *(volatile T *)&pr->u.p.static_steal_counter ) )
+ {
+ continue; // try once more (nproc attempts in total)
+ // no victim is ready yet to participate in stealing
+ // because all victims are still in kmp_init_dispatch
+ }
+ if( victim->u.p.count + 2 > (UT)victim->u.p.ub ) {
+ pr->u.p.parm4 = (victimIdx + 1) % nproc; // shift start tid
+ continue; // not enough chunks to steal, goto next victim
+ }
+
+ lck = other_threads[victimIdx]->th.th_dispatch->th_steal_lock;
+ KMP_ASSERT(lck != NULL);
+ __kmp_acquire_lock(lck, gtid);
+ limit = victim->u.p.ub; // keep initial ub
+ if( victim->u.p.count >= limit ||
+ (remaining = limit - victim->u.p.count) < 2 )
+ {
+ __kmp_release_lock(lck, gtid);
+ pr->u.p.parm4 = (victimIdx + 1) % nproc; // next victim
+ continue; // not enough chunks to steal
+ }
+ // stealing succeded, reduce victim's ub by 1/4 of undone chunks or by 1
+ if( remaining > 3 ) {
+ init = ( victim->u.p.ub -= (remaining>>2) ); // steal 1/4 of remaining
+ } else {
+ init = ( victim->u.p.ub -= 1 ); // steal 1 chunk of 2 or 3 remaining
+ }
+ __kmp_release_lock(lck, gtid);
+
+ KMP_DEBUG_ASSERT(init + 1 <= limit);
+ pr->u.p.parm4 = victimIdx; // remember victim to steal from
+ status = 1;
+ while_index = 0;
+ // now update own count and ub with stolen range but init chunk
+ __kmp_acquire_lock(th->th.th_dispatch->th_steal_lock, gtid);
+ pr->u.p.count = init + 1;
+ pr->u.p.ub = limit;
+ __kmp_release_lock(th->th.th_dispatch->th_steal_lock, gtid);
+ } // while (search for victim)
+ } // if (try to find victim and steal)
+ } else {
+ // 4-byte induction variable, use 8-byte CAS for pair (count, ub)
+ typedef union {
+ struct {
+ UT count;
+ T ub;
+ } p;
+ kmp_int64 b;
+ } union_i4;
+ // All operations on 'count' or 'ub' must be combined atomically together.
+ {
+ union_i4 vold, vnew;
+ vold.b = *( volatile kmp_int64 * )(&pr->u.p.count);
+ vnew = vold;
+ vnew.p.count++;
+ while( ! KMP_COMPARE_AND_STORE_ACQ64(
+ ( volatile kmp_int64* )&pr->u.p.count,
+ *VOLATILE_CAST(kmp_int64 *)&vold.b,
+ *VOLATILE_CAST(kmp_int64 *)&vnew.b ) ) {
+ KMP_CPU_PAUSE();
+ vold.b = *( volatile kmp_int64 * )(&pr->u.p.count);
+ vnew = vold;
+ vnew.p.count++;
+ }
+ vnew = vold;
+ init = vnew.p.count;
+ status = ( init < (UT)vnew.p.ub ) ;
+ }
+
+ if( !status ) {
+ kmp_info_t **other_threads = team->t.t_threads;
+ int while_limit = nproc; // nproc attempts to find a victim
+ int while_index = 0;
+
+ // TODO: algorithm of searching for a victim
+ // should be cleaned up and measured
+ while ( ( !status ) && ( while_limit != ++while_index ) ) {
+ union_i4 vold, vnew;
+ kmp_int32 remaining;
+ T victimIdx = pr->u.p.parm4;
+ T oldVictimIdx = victimIdx ? victimIdx - 1 : nproc - 1;
+ dispatch_private_info_template< T > * victim =
+ reinterpret_cast< dispatch_private_info_template< T >* >
+ (other_threads[victimIdx]->th.th_dispatch->th_dispatch_pr_current);
+ while( (victim == NULL || victim == pr ||
+ (*(volatile T*)&victim->u.p.static_steal_counter !=
+ *(volatile T*)&pr->u.p.static_steal_counter)) &&
+ oldVictimIdx != victimIdx )
+ {
+ victimIdx = (victimIdx + 1) % nproc;
+ victim = reinterpret_cast< dispatch_private_info_template< T >* >
+ ( other_threads[victimIdx]->th.th_dispatch->th_dispatch_pr_current );
+ };
+ if( !victim ||
+ ( *(volatile T *)&victim->u.p.static_steal_counter !=
+ *(volatile T *)&pr->u.p.static_steal_counter ) )
+ {
+ continue; // try once more (nproc attempts in total)
+ // no victim is ready yet to participate in stealing
+ // because all victims are still in kmp_init_dispatch
+ }
+ pr->u.p.parm4 = victimIdx; // new victim found
+ while( 1 ) { // CAS loop if victim has enough chunks to steal
+ vold.b = *( volatile kmp_int64 * )( &victim->u.p.count );
+ vnew = vold;
+
+ KMP_DEBUG_ASSERT( (vnew.p.ub - 1) * (UT)chunk <= trip );
+ if ( vnew.p.count >= (UT)vnew.p.ub ||
+ (remaining = vnew.p.ub - vnew.p.count) < 2 )
+ {
+ pr->u.p.parm4 = (victimIdx + 1) % nproc; // shift start victim id
+ break; // not enough chunks to steal, goto next victim
+ }
+ if( remaining > 3 ) {
+ vnew.p.ub -= (remaining>>2); // try to steal 1/4 of remaining
+ } else {
+ vnew.p.ub -= 1; // steal 1 chunk of 2 or 3 remaining
+ }
+ KMP_DEBUG_ASSERT((vnew.p.ub - 1) * (UT)chunk <= trip);
+ // TODO: Should this be acquire or release?
+ if ( KMP_COMPARE_AND_STORE_ACQ64(
+ ( volatile kmp_int64 * )&victim->u.p.count,
+ *VOLATILE_CAST(kmp_int64 *)&vold.b,
+ *VOLATILE_CAST(kmp_int64 *)&vnew.b ) ) {
+ // stealing succedded
+ status = 1;
+ while_index = 0;
+ // now update own count and ub
+ init = vnew.p.ub;
+ vold.p.count = init + 1;
+ #if KMP_ARCH_X86
+ KMP_XCHG_FIXED64(( volatile kmp_int64 * )(&pr->u.p.count), vold.b);
+ #else
+ *( volatile kmp_int64 * )(&pr->u.p.count) = vold.b;
+ #endif
+ break;
+ } // if (check CAS result)
+ KMP_CPU_PAUSE(); // CAS failed, repeate attempt
+ } // while (try to steal from particular victim)
+ } // while (search for victim)
+ } // if (try to find victim and steal)
+ } // if (4-byte induction variable)
+ if ( !status ) {
+ *p_lb = 0;
+ *p_ub = 0;
+ if ( p_st != NULL ) *p_st = 0;
+ } else {
+ start = pr->u.p.parm2;
+ init *= chunk;
+ limit = chunk + init - 1;
+ incr = pr->u.p.st;
+
+ KMP_DEBUG_ASSERT(init <= trip);
+ if ( (last = (limit >= trip)) != 0 )
+ limit = trip;
+ if ( p_st != NULL ) *p_st = incr;
+
+ if ( incr == 1 ) {
+ *p_lb = start + init;
+ *p_ub = start + limit;
+ } else {
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ }
+
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // if
+ break;
+ } // case
+ #endif // ( KMP_STATIC_STEAL_ENABLED )
+ case kmp_sch_static_balanced:
+ {
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_static_balanced case\n", gtid) );
+ if ( (status = !pr->u.p.count) != 0 ) { /* check if thread has any iteration to do */
+ pr->u.p.count = 1;
+ *p_lb = pr->u.p.lb;
+ *p_ub = pr->u.p.ub;
+ last = pr->u.p.parm1;
+ if ( p_st != NULL )
+ *p_st = pr->u.p.st;
+ } else { /* no iterations to do */
+ pr->u.p.lb = pr->u.p.ub + pr->u.p.st;
+ }
+ if ( pr->ordered ) {
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // case
+ break;
+ case kmp_sch_static_greedy: /* original code for kmp_sch_static_greedy was merged here */
+ case kmp_sch_static_chunked:
+ {
+ T parm1;
+
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_static_[affinity|chunked] case\n",
+ gtid ) );
+ parm1 = pr->u.p.parm1;
+
+ trip = pr->u.p.tc - 1;
+ init = parm1 * (pr->u.p.count + __kmp_tid_from_gtid(gtid));
+
+ if ( (status = (init <= trip)) != 0 ) {
+ start = pr->u.p.lb;
+ incr = pr->u.p.st;
+ limit = parm1 + init - 1;
+
+ if ( (last = (limit >= trip)) != 0 )
+ limit = trip;
+
+ if ( p_st != NULL ) *p_st = incr;
+
+ pr->u.p.count += th->th.th_team_nproc;
+
+ if ( incr == 1 ) {
+ *p_lb = start + init;
+ *p_ub = start + limit;
+ }
+ else {
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ }
+
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // if
+ } // case
+ break;
+
+ case kmp_sch_dynamic_chunked:
+ {
+ T chunk = pr->u.p.parm1;
+
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_dynamic_chunked case\n",
+ gtid ) );
+
+ init = chunk * test_then_inc_acq< ST >((volatile ST *) & sh->u.s.iteration );
+ trip = pr->u.p.tc - 1;
+
+ if ( (status = (init <= trip)) == 0 ) {
+ *p_lb = 0;
+ *p_ub = 0;
+ if ( p_st != NULL ) *p_st = 0;
+ } else {
+ start = pr->u.p.lb;
+ limit = chunk + init - 1;
+ incr = pr->u.p.st;
+
+ if ( (last = (limit >= trip)) != 0 )
+ limit = trip;
+
+ if ( p_st != NULL ) *p_st = incr;
+
+ if ( incr == 1 ) {
+ *p_lb = start + init;
+ *p_ub = start + limit;
+ } else {
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ }
+
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // if
+ } // case
+ break;
+
+ case kmp_sch_guided_iterative_chunked:
+ {
+ T chunkspec = pr->u.p.parm1;
+ KD_TRACE(100,
+ ("__kmp_dispatch_next: T#%d kmp_sch_guided_chunked iterative case\n",gtid));
+ trip = pr->u.p.tc;
+ // Start atomic part of calculations
+ while(1) {
+ ST remaining; // signed, because can be < 0
+ init = sh->u.s.iteration; // shared value
+ remaining = trip - init;
+ if ( remaining <= 0 ) { // AC: need to compare with 0 first
+ // nothing to do, don't try atomic op
+ status = 0;
+ break;
+ }
+ if ( (T)remaining < pr->u.p.parm2 ) { // compare with K*nproc*(chunk+1), K=2 by default
+ // use dynamic-style shcedule
+ // atomically inrement iterations, get old value
+ init = test_then_add<ST>( (ST*)&sh->u.s.iteration, (ST)chunkspec );
+ remaining = trip - init;
+ if (remaining <= 0) {
+ status = 0; // all iterations got by other threads
+ } else {
+ // got some iterations to work on
+ status = 1;
+ if ( (T)remaining > chunkspec ) {
+ limit = init + chunkspec - 1;
+ } else {
+ last = 1; // the last chunk
+ limit = init + remaining - 1;
+ } // if
+ } // if
+ break;
+ } // if
+ limit = init + (UT)( remaining * *(double*)&pr->u.p.parm3 ); // divide by K*nproc
+ if ( compare_and_swap<ST>( (ST*)&sh->u.s.iteration, (ST)init, (ST)limit ) ) {
+ // CAS was successful, chunk obtained
+ status = 1;
+ --limit;
+ break;
+ } // if
+ } // while
+ if ( status != 0 ) {
+ start = pr->u.p.lb;
+ incr = pr->u.p.st;
+ if ( p_st != NULL )
+ *p_st = incr;
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } else {
+ *p_lb = 0;
+ *p_ub = 0;
+ if ( p_st != NULL )
+ *p_st = 0;
+ } // if
+ } // case
+ break;
+
+ case kmp_sch_guided_analytical_chunked:
+ {
+ T chunkspec = pr->u.p.parm1;
+ UT chunkIdx;
+ #if KMP_OS_WINDOWS && KMP_ARCH_X86
+ /* for storing original FPCW value for Windows* OS on
+ IA-32 architecture 8-byte version */
+ unsigned int oldFpcw;
+ unsigned int fpcwSet = 0;
+ #endif
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_guided_chunked analytical case\n",
+ gtid ) );
+
+ trip = pr->u.p.tc;
+
+ KMP_DEBUG_ASSERT(th->th.th_team_nproc > 1);
+ KMP_DEBUG_ASSERT((2UL * chunkspec + 1) * (UT)th->th.th_team_nproc < trip);
+
+ while(1) { /* this while loop is a safeguard against unexpected zero chunk sizes */
+ chunkIdx = test_then_inc_acq< ST >((volatile ST *) & sh->u.s.iteration );
+ if ( chunkIdx >= (UT)pr->u.p.parm2 ) {
+ --trip;
+ /* use dynamic-style scheduling */
+ init = chunkIdx * chunkspec + pr->u.p.count;
+ /* need to verify init > 0 in case of overflow in the above calculation */
+ if ( (status = (init > 0 && init <= trip)) != 0 ) {
+ limit = init + chunkspec -1;
+
+ if ( (last = (limit >= trip)) != 0 )
+ limit = trip;
+ }
+ break;
+ } else {
+ /* use exponential-style scheduling */
+ /* The following check is to workaround the lack of long double precision on Windows* OS.
+ This check works around the possible effect that init != 0 for chunkIdx == 0.
+ */
+ #if KMP_OS_WINDOWS && KMP_ARCH_X86
+ /* If we haven't already done so, save original
+ FPCW and set precision to 64-bit, as Windows* OS
+ on IA-32 architecture defaults to 53-bit */
+ if ( !fpcwSet ) {
+ oldFpcw = _control87(0,0);
+ _control87(_PC_64,_MCW_PC);
+ fpcwSet = 0x30000;
+ }
+ #endif
+ if ( chunkIdx ) {
+ init = __kmp_dispatch_guided_remaining< T >(
+ trip, *( DBL * )&pr->u.p.parm3, chunkIdx );
+ KMP_DEBUG_ASSERT(init);
+ init = trip - init;
+ } else
+ init = 0;
+ limit = trip - __kmp_dispatch_guided_remaining< T >(
+ trip, *( DBL * )&pr->u.p.parm3, chunkIdx + 1 );
+ KMP_ASSERT(init <= limit);
+ if ( init < limit ) {
+ KMP_DEBUG_ASSERT(limit <= trip);
+ --limit;
+ status = 1;
+ break;
+ } // if
+ } // if
+ } // while (1)
+ #if KMP_OS_WINDOWS && KMP_ARCH_X86
+ /* restore FPCW if necessary
+ AC: check fpcwSet flag first because oldFpcw can be uninitialized here
+ */
+ if ( fpcwSet && ( oldFpcw & fpcwSet ) )
+ _control87(oldFpcw,_MCW_PC);
+ #endif
+ if ( status != 0 ) {
+ start = pr->u.p.lb;
+ incr = pr->u.p.st;
+ if ( p_st != NULL )
+ *p_st = incr;
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ }
+ } else {
+ *p_lb = 0;
+ *p_ub = 0;
+ if ( p_st != NULL )
+ *p_st = 0;
+ }
+ } // case
+ break;
+
+ case kmp_sch_trapezoidal:
+ {
+ UT index;
+ T parm2 = pr->u.p.parm2;
+ T parm3 = pr->u.p.parm3;
+ T parm4 = pr->u.p.parm4;
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d kmp_sch_trapezoidal case\n",
+ gtid ) );
+
+ index = test_then_inc< ST >( (volatile ST *) & sh->u.s.iteration );
+
+ init = ( index * ( (2*parm2) - (index-1)*parm4 ) ) / 2;
+ trip = pr->u.p.tc - 1;
+
+ if ( (status = ((T)index < parm3 && init <= trip)) == 0 ) {
+ *p_lb = 0;
+ *p_ub = 0;
+ if ( p_st != NULL ) *p_st = 0;
+ } else {
+ start = pr->u.p.lb;
+ limit = ( (index+1) * ( 2*parm2 - index*parm4 ) ) / 2 - 1;
+ incr = pr->u.p.st;
+
+ if ( (last = (limit >= trip)) != 0 )
+ limit = trip;
+
+ if ( p_st != NULL ) *p_st = incr;
+
+ if ( incr == 1 ) {
+ *p_lb = start + init;
+ *p_ub = start + limit;
+ } else {
+ *p_lb = start + init * incr;
+ *p_ub = start + limit * incr;
+ }
+
+ if ( pr->ordered ) {
+ pr->u.p.ordered_lower = init;
+ pr->u.p.ordered_upper = limit;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d ordered_lower:%%%s ordered_upper:%%%s\n",
+ traits_t< UT >::spec, traits_t< UT >::spec );
+ KD_TRACE(1000, ( buff, gtid, pr->u.p.ordered_lower, pr->u.p.ordered_upper ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ } // if
+ } // if
+ } // case
+ break;
+ default:
+ {
+ status = 0; // to avoid complaints on uninitialized variable use
+ __kmp_msg(
+ kmp_ms_fatal, // Severity
+ KMP_MSG( UnknownSchedTypeDetected ), // Primary message
+ KMP_HNT( GetNewerLibrary ), // Hint
+ __kmp_msg_null // Variadic argument list terminator
+ );
+ }
+ break;
+ } // switch
+ } // if tc == 0;
+
+ if ( status == 0 ) {
+ UT num_done;
+
+ num_done = test_then_inc< ST >( (volatile ST *) & sh->u.s.num_done );
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d increment num_done:%%%s\n",
+ traits_t< UT >::spec );
+ KD_TRACE(100, ( buff, gtid, sh->u.s.num_done ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ if ( (ST)num_done == th->th.th_team_nproc - 1 ) {
+ #if ( KMP_STATIC_STEAL_ENABLED )
+ if( pr->schedule == kmp_sch_static_steal && ___kmp_size_type > 4 ) {
+ int i;
+ kmp_info_t **other_threads = team->t.t_threads;
+ // loop complete, safe to destroy locks used for stealing
+ for( i = 0; i < th->th.th_team_nproc; ++i ) {
+ kmp_lock_t * lck = other_threads[i]->th.th_dispatch->th_steal_lock;
+ KMP_ASSERT(lck != NULL);
+ __kmp_destroy_lock( lck );
+ __kmp_free( lck );
+ other_threads[i]->th.th_dispatch->th_steal_lock = NULL;
+ }
+ }
+ #endif
+ /* NOTE: release this buffer to be reused */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ sh->u.s.num_done = 0;
+ sh->u.s.iteration = 0;
+
+ /* TODO replace with general release procedure? */
+ if ( pr->ordered ) {
+ sh->u.s.ordered_iteration = 0;
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ sh -> buffer_index += __kmp_dispatch_num_buffers;
+ KD_TRACE(100, ("__kmp_dispatch_next: T#%d change buffer_index:%d\n",
+ gtid, sh->buffer_index) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ } // if
+ if ( __kmp_env_consistency_check ) {
+ if ( pr->pushed_ws != ct_none ) {
+ pr->pushed_ws = __kmp_pop_workshare( gtid, pr->pushed_ws, loc );
+ }
+ }
+
+ th -> th.th_dispatch -> th_deo_fcn = NULL;
+ th -> th.th_dispatch -> th_dxo_fcn = NULL;
+ th -> th.th_dispatch -> th_dispatch_sh_current = NULL;
+ th -> th.th_dispatch -> th_dispatch_pr_current = NULL;
+ } // if (status == 0)
+#if KMP_OS_WINDOWS
+ else if ( last ) {
+ pr->u.p.last_upper = pr->u.p.ub;
+ }
+#endif /* KMP_OS_WINDOWS */
+ if ( p_last != NULL && status != 0 )
+ *p_last = last;
+ } // if
+
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmp_dispatch_next: T#%%d normal case: " \
+ "p_lb:%%%s p_ub:%%%s p_st:%%%s p_last:%%p returning:%%d\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(10, ( buff, gtid, *p_lb, *p_ub, p_st ? *p_st : 0, p_last, status ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_DISPATCH_NEXT();
+#endif
+ OMPT_LOOP_END;
+ return status;
+}
+
+template< typename T >
+static void
+__kmp_dist_get_bounds(
+ ident_t *loc,
+ kmp_int32 gtid,
+ kmp_int32 *plastiter,
+ T *plower,
+ T *pupper,
+ typename traits_t< T >::signed_t incr
+) {
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ register kmp_uint32 team_id;
+ register kmp_uint32 nteams;
+ register UT trip_count;
+ register kmp_team_t *team;
+ kmp_info_t * th;
+
+ KMP_DEBUG_ASSERT( plastiter && plower && pupper );
+ KE_TRACE( 10, ("__kmpc_dist_get_bounds called (%d)\n", gtid));
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format( "__kmpc_dist_get_bounds: T#%%d liter=%%d "\
+ "iter=(%%%s, %%%s, %%%s) signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec,
+ traits_t< T >::spec );
+ KD_TRACE(100, ( buff, gtid, *plastiter, *plower, *pupper, incr ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ if( __kmp_env_consistency_check ) {
+ if( incr == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrZeroProhibited, ct_pdo, loc );
+ }
+ if( incr > 0 ? (*pupper < *plower) : (*plower < *pupper) ) {
+ // The loop is illegal.
+ // Some zero-trip loops maintained by compiler, e.g.:
+ // for(i=10;i<0;++i) // lower >= upper - run-time check
+ // for(i=0;i>10;--i) // lower <= upper - run-time check
+ // for(i=0;i>10;++i) // incr > 0 - compile-time check
+ // for(i=10;i<0;--i) // incr < 0 - compile-time check
+ // Compiler does not check the following illegal loops:
+ // for(i=0;i<10;i+=incr) // where incr<0
+ // for(i=10;i>0;i-=incr) // where incr<0
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrIllegal, ct_pdo, loc );
+ }
+ }
+ th = __kmp_threads[gtid];
+ team = th->th.th_team;
+ #if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT(th->th.th_teams_microtask); // we are in the teams construct
+ nteams = th->th.th_teams_size.nteams;
+ #endif
+ team_id = team->t.t_master_tid;
+ KMP_DEBUG_ASSERT(nteams == team->t.t_parent->t.t_nproc);
+
+ // compute global trip count
+ if( incr == 1 ) {
+ trip_count = *pupper - *plower + 1;
+ } else if(incr == -1) {
+ trip_count = *plower - *pupper + 1;
+ } else if ( incr > 0 ) {
+ // upper-lower can exceed the limit of signed type
+ trip_count = (UT)(*pupper - *plower) / incr + 1;
+ } else {
+ trip_count = (UT)(*plower - *pupper) / ( -incr ) + 1;
+ }
+
+ if( trip_count <= nteams ) {
+ KMP_DEBUG_ASSERT(
+ __kmp_static == kmp_sch_static_greedy || \
+ __kmp_static == kmp_sch_static_balanced
+ ); // Unknown static scheduling type.
+ // only some teams get single iteration, others get nothing
+ if( team_id < trip_count ) {
+ *pupper = *plower = *plower + team_id * incr;
+ } else {
+ *plower = *pupper + incr; // zero-trip loop
+ }
+ if( plastiter != NULL )
+ *plastiter = ( team_id == trip_count - 1 );
+ } else {
+ if( __kmp_static == kmp_sch_static_balanced ) {
+ register UT chunk = trip_count / nteams;
+ register UT extras = trip_count % nteams;
+ *plower += incr * ( team_id * chunk + ( team_id < extras ? team_id : extras ) );
+ *pupper = *plower + chunk * incr - ( team_id < extras ? 0 : incr );
+ if( plastiter != NULL )
+ *plastiter = ( team_id == nteams - 1 );
+ } else {
+ register T chunk_inc_count =
+ ( trip_count / nteams + ( ( trip_count % nteams ) ? 1 : 0) ) * incr;
+ register T upper = *pupper;
+ KMP_DEBUG_ASSERT( __kmp_static == kmp_sch_static_greedy );
+ // Unknown static scheduling type.
+ *plower += team_id * chunk_inc_count;
+ *pupper = *plower + chunk_inc_count - incr;
+ // Check/correct bounds if needed
+ if( incr > 0 ) {
+ if( *pupper < *plower )
+ *pupper = i_maxmin< T >::mx;
+ if( plastiter != NULL )
+ *plastiter = *plower <= upper && *pupper > upper - incr;
+ if( *pupper > upper )
+ *pupper = upper; // tracker C73258
+ } else {
+ if( *pupper > *plower )
+ *pupper = i_maxmin< T >::mn;
+ if( plastiter != NULL )
+ *plastiter = *plower >= upper && *pupper < upper - incr;
+ if( *pupper < upper )
+ *pupper = upper; // tracker C73258
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+// Dispatch routines
+// Transfer call to template< type T >
+// __kmp_dispatch_init( ident_t *loc, int gtid, enum sched_type schedule,
+// T lb, T ub, ST st, ST chunk )
+extern "C" {
+
+/*!
+@ingroup WORK_SHARING
+@{
+@param loc Source location
+@param gtid Global thread id
+@param schedule Schedule type
+@param lb Lower bound
+@param ub Upper bound
+@param st Step (or increment if you prefer)
+@param chunk The chunk size to block with
+
+This function prepares the runtime to start a dynamically scheduled for loop, saving the loop arguments.
+These functions are all identical apart from the types of the arguments.
+*/
+
+void
+__kmpc_dispatch_init_4( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 lb, kmp_int32 ub, kmp_int32 st, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dispatch_init< kmp_int32 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+/*!
+See @ref __kmpc_dispatch_init_4
+*/
+void
+__kmpc_dispatch_init_4u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dispatch_init< kmp_uint32 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+/*!
+See @ref __kmpc_dispatch_init_4
+*/
+void
+__kmpc_dispatch_init_8( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int64 lb, kmp_int64 ub,
+ kmp_int64 st, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dispatch_init< kmp_int64 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+/*!
+See @ref __kmpc_dispatch_init_4
+*/
+void
+__kmpc_dispatch_init_8u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_uint64 lb, kmp_uint64 ub,
+ kmp_int64 st, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dispatch_init< kmp_uint64 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+/*!
+See @ref __kmpc_dispatch_init_4
+
+Difference from __kmpc_dispatch_init set of functions is these functions
+are called for composite distribute parallel for construct. Thus before
+regular iterations dispatching we need to calc per-team iteration space.
+
+These functions are all identical apart from the types of the arguments.
+*/
+void
+__kmpc_dist_dispatch_init_4( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 *p_last, kmp_int32 lb, kmp_int32 ub, kmp_int32 st, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dist_get_bounds< kmp_int32 >( loc, gtid, p_last, &lb, &ub, st );
+ __kmp_dispatch_init< kmp_int32 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+void
+__kmpc_dist_dispatch_init_4u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 *p_last, kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dist_get_bounds< kmp_uint32 >( loc, gtid, p_last, &lb, &ub, st );
+ __kmp_dispatch_init< kmp_uint32 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+void
+__kmpc_dist_dispatch_init_8( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 *p_last, kmp_int64 lb, kmp_int64 ub, kmp_int64 st, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dist_get_bounds< kmp_int64 >( loc, gtid, p_last, &lb, &ub, st );
+ __kmp_dispatch_init< kmp_int64 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+void
+__kmpc_dist_dispatch_init_8u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 *p_last, kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_dist_get_bounds< kmp_uint64 >( loc, gtid, p_last, &lb, &ub, st );
+ __kmp_dispatch_init< kmp_uint64 >( loc, gtid, schedule, lb, ub, st, chunk, true );
+}
+
+/*!
+@param loc Source code location
+@param gtid Global thread id
+@param p_last Pointer to a flag set to one if this is the last chunk or zero otherwise
+@param p_lb Pointer to the lower bound for the next chunk of work
+@param p_ub Pointer to the upper bound for the next chunk of work
+@param p_st Pointer to the stride for the next chunk of work
+@return one if there is work to be done, zero otherwise
+
+Get the next dynamically allocated chunk of work for this thread.
+If there is no more work, then the lb,ub and stride need not be modified.
+*/
+int
+__kmpc_dispatch_next_4( ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_int32 *p_lb, kmp_int32 *p_ub, kmp_int32 *p_st )
+{
+ return __kmp_dispatch_next< kmp_int32 >( loc, gtid, p_last, p_lb, p_ub, p_st );
+}
+
+/*!
+See @ref __kmpc_dispatch_next_4
+*/
+int
+__kmpc_dispatch_next_4u( ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_uint32 *p_lb, kmp_uint32 *p_ub, kmp_int32 *p_st )
+{
+ return __kmp_dispatch_next< kmp_uint32 >( loc, gtid, p_last, p_lb, p_ub, p_st );
+}
+
+/*!
+See @ref __kmpc_dispatch_next_4
+*/
+int
+__kmpc_dispatch_next_8( ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_int64 *p_lb, kmp_int64 *p_ub, kmp_int64 *p_st )
+{
+ return __kmp_dispatch_next< kmp_int64 >( loc, gtid, p_last, p_lb, p_ub, p_st );
+}
+
+/*!
+See @ref __kmpc_dispatch_next_4
+*/
+int
+__kmpc_dispatch_next_8u( ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_uint64 *p_lb, kmp_uint64 *p_ub, kmp_int64 *p_st )
+{
+ return __kmp_dispatch_next< kmp_uint64 >( loc, gtid, p_last, p_lb, p_ub, p_st );
+}
+
+/*!
+@param loc Source code location
+@param gtid Global thread id
+
+Mark the end of a dynamic loop.
+*/
+void
+__kmpc_dispatch_fini_4( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish< kmp_uint32 >( gtid, loc );
+}
+
+/*!
+See @ref __kmpc_dispatch_fini_4
+*/
+void
+__kmpc_dispatch_fini_8( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish< kmp_uint64 >( gtid, loc );
+}
+
+/*!
+See @ref __kmpc_dispatch_fini_4
+*/
+void
+__kmpc_dispatch_fini_4u( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish< kmp_uint32 >( gtid, loc );
+}
+
+/*!
+See @ref __kmpc_dispatch_fini_4
+*/
+void
+__kmpc_dispatch_fini_8u( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish< kmp_uint64 >( gtid, loc );
+}
+/*! @} */
+
+//-----------------------------------------------------------------------------------------
+//Non-template routines from kmp_dispatch.c used in other sources
+
+kmp_uint32 __kmp_eq_4( kmp_uint32 value, kmp_uint32 checker) {
+ return value == checker;
+}
+
+kmp_uint32 __kmp_neq_4( kmp_uint32 value, kmp_uint32 checker) {
+ return value != checker;
+}
+
+kmp_uint32 __kmp_lt_4( kmp_uint32 value, kmp_uint32 checker) {
+ return value < checker;
+}
+
+kmp_uint32 __kmp_ge_4( kmp_uint32 value, kmp_uint32 checker) {
+ return value >= checker;
+}
+
+kmp_uint32 __kmp_le_4( kmp_uint32 value, kmp_uint32 checker) {
+ return value <= checker;
+}
+
+kmp_uint32
+__kmp_wait_yield_4(volatile kmp_uint32 * spinner,
+ kmp_uint32 checker,
+ kmp_uint32 (* pred)( kmp_uint32, kmp_uint32 )
+ , void * obj // Higher-level synchronization object, or NULL.
+ )
+{
+ // note: we may not belong to a team at this point
+ register volatile kmp_uint32 * spin = spinner;
+ register kmp_uint32 check = checker;
+ register kmp_uint32 spins;
+ register kmp_uint32 (*f) ( kmp_uint32, kmp_uint32 ) = pred;
+ register kmp_uint32 r;
+
+ KMP_FSYNC_SPIN_INIT( obj, (void*) spin );
+ KMP_INIT_YIELD( spins );
+ // main wait spin loop
+ while(!f(r = TCR_4(*spin), check)) {
+ KMP_FSYNC_SPIN_PREPARE( obj );
+ /* GEH - remove this since it was accidentally introduced when kmp_wait was split.
+ It causes problems with infinite recursion because of exit lock */
+ /* if ( TCR_4(__kmp_global.g.g_done) && __kmp_global.g.g_abort)
+ __kmp_abort_thread(); */
+
+ /* if we have waited a bit, or are oversubscribed, yield */
+ /* pause is in the following code */
+ KMP_YIELD( TCR_4(__kmp_nth) > __kmp_avail_proc );
+ KMP_YIELD_SPIN( spins );
+ }
+ KMP_FSYNC_SPIN_ACQUIRED( obj );
+ return r;
+}
+
+void
+__kmp_wait_yield_4_ptr(void *spinner,
+ kmp_uint32 checker,
+ kmp_uint32 (*pred)( void *, kmp_uint32 ),
+ void *obj // Higher-level synchronization object, or NULL.
+ )
+{
+ // note: we may not belong to a team at this point
+ register void *spin = spinner;
+ register kmp_uint32 check = checker;
+ register kmp_uint32 spins;
+ register kmp_uint32 (*f) ( void *, kmp_uint32 ) = pred;
+
+ KMP_FSYNC_SPIN_INIT( obj, spin );
+ KMP_INIT_YIELD( spins );
+ // main wait spin loop
+ while ( !f( spin, check ) ) {
+ KMP_FSYNC_SPIN_PREPARE( obj );
+ /* if we have waited a bit, or are oversubscribed, yield */
+ /* pause is in the following code */
+ KMP_YIELD( TCR_4( __kmp_nth ) > __kmp_avail_proc );
+ KMP_YIELD_SPIN( spins );
+ }
+ KMP_FSYNC_SPIN_ACQUIRED( obj );
+}
+
+} // extern "C"
+
+#ifdef KMP_GOMP_COMPAT
+
+void
+__kmp_aux_dispatch_init_4( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int32 lb, kmp_int32 ub, kmp_int32 st,
+ kmp_int32 chunk, int push_ws )
+{
+ __kmp_dispatch_init< kmp_int32 >( loc, gtid, schedule, lb, ub, st, chunk,
+ push_ws );
+}
+
+void
+__kmp_aux_dispatch_init_4u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st,
+ kmp_int32 chunk, int push_ws )
+{
+ __kmp_dispatch_init< kmp_uint32 >( loc, gtid, schedule, lb, ub, st, chunk,
+ push_ws );
+}
+
+void
+__kmp_aux_dispatch_init_8( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_int64 lb, kmp_int64 ub, kmp_int64 st,
+ kmp_int64 chunk, int push_ws )
+{
+ __kmp_dispatch_init< kmp_int64 >( loc, gtid, schedule, lb, ub, st, chunk,
+ push_ws );
+}
+
+void
+__kmp_aux_dispatch_init_8u( ident_t *loc, kmp_int32 gtid, enum sched_type schedule,
+ kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st,
+ kmp_int64 chunk, int push_ws )
+{
+ __kmp_dispatch_init< kmp_uint64 >( loc, gtid, schedule, lb, ub, st, chunk,
+ push_ws );
+}
+
+void
+__kmp_aux_dispatch_fini_chunk_4( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish_chunk< kmp_uint32 >( gtid, loc );
+}
+
+void
+__kmp_aux_dispatch_fini_chunk_8( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish_chunk< kmp_uint64 >( gtid, loc );
+}
+
+void
+__kmp_aux_dispatch_fini_chunk_4u( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish_chunk< kmp_uint32 >( gtid, loc );
+}
+
+void
+__kmp_aux_dispatch_fini_chunk_8u( ident_t *loc, kmp_int32 gtid )
+{
+ __kmp_dispatch_finish_chunk< kmp_uint64 >( gtid, loc );
+}
+
+#endif /* KMP_GOMP_COMPAT */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
diff --git a/final/runtime/src/kmp_environment.c b/final/runtime/src/kmp_environment.c
new file mode 100644
index 0000000..4e7cf8c
--- /dev/null
+++ b/final/runtime/src/kmp_environment.c
@@ -0,0 +1,596 @@
+/*
+ * kmp_environment.c -- Handle environment variables OS-independently.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*
+ ------------------------------------------------------------------------------------------------
+ We use GetEnvironmentVariable for Windows* OS instead of getenv because the act of
+ loading a DLL on Windows* OS makes any user-set environment variables (i.e. with putenv())
+ unavailable. getenv() apparently gets a clean copy of the env variables as they existed
+ at the start of the run.
+ JH 12/23/2002
+ ------------------------------------------------------------------------------------------------
+ On Windows* OS, there are two environments (at least, see below):
+
+ 1. Environment maintained by Windows* OS on IA-32 architecture.
+ Accessible through GetEnvironmentVariable(),
+ SetEnvironmentVariable(), and GetEnvironmentStrings().
+
+ 2. Environment maintained by C RTL. Accessible through getenv(), putenv().
+
+ putenv() function updates both C and Windows* OS on IA-32 architecture. getenv() function
+ search for variables in C RTL environment only. Windows* OS on IA-32 architecture functions work *only*
+ with Windows* OS on IA-32 architecture.
+
+ Windows* OS on IA-32 architecture maintained by OS, so there is always only one Windows* OS on
+ IA-32 architecture per process. Changes in Windows* OS on IA-32 architecture are process-visible.
+
+ C environment maintained by C RTL. Multiple copies of C RTL may be present in the process, and
+ each C RTL maintains its own environment. :-(
+
+ Thus, proper way to work with environment on Windows* OS is:
+
+ 1. Set variables with putenv() function -- both C and Windows* OS on
+ IA-32 architecture are being updated. Windows* OS on
+ IA-32 architecture may be considered as primary target,
+ while updating C RTL environment is a free bonus.
+
+ 2. Get variables with GetEnvironmentVariable() -- getenv() does not
+ search Windows* OS on IA-32 architecture, and can not see variables
+ set with SetEnvironmentVariable().
+
+ 2007-04-05 -- lev
+ ------------------------------------------------------------------------------------------------
+*/
+
+#include "kmp_environment.h"
+
+#include "kmp_os.h" // KMP_OS_*.
+#include "kmp.h" //
+#include "kmp_str.h" // __kmp_str_*().
+#include "kmp_i18n.h"
+
+#if KMP_OS_UNIX
+ #include <stdlib.h> // getenv, setenv, unsetenv.
+ #include <string.h> // strlen, strcpy.
+ #if KMP_OS_DARWIN
+ #include <crt_externs.h>
+ #define environ (*_NSGetEnviron())
+ #else
+ extern char * * environ;
+ #endif
+#elif KMP_OS_WINDOWS
+ #include <windows.h> // GetEnvironmentVariable, SetEnvironmentVariable, GetLastError.
+#else
+ #error Unknown or unsupported OS.
+#endif
+
+
+// TODO: Eliminate direct memory allocations, use string operations instead.
+
+static inline
+void *
+allocate(
+ size_t size
+) {
+ void * ptr = KMP_INTERNAL_MALLOC( size );
+ if ( ptr == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ return ptr;
+} // allocate
+
+
+char *
+__kmp_env_get( char const * name ) {
+
+ char * result = NULL;
+
+ #if KMP_OS_UNIX
+ char const * value = getenv( name );
+ if ( value != NULL ) {
+ size_t len = KMP_STRLEN( value ) + 1;
+ result = (char *) KMP_INTERNAL_MALLOC( len );
+ if ( result == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ KMP_STRNCPY_S( result, len, value, len );
+ }; // if
+ #elif KMP_OS_WINDOWS
+ /*
+ We use GetEnvironmentVariable for Windows* OS instead of getenv because the act of
+ loading a DLL on Windows* OS makes any user-set environment variables (i.e. with putenv())
+ unavailable. getenv() apparently gets a clean copy of the env variables as they existed
+ at the start of the run.
+ JH 12/23/2002
+ */
+ DWORD rc;
+ rc = GetEnvironmentVariable( name, NULL, 0 );
+ if ( ! rc ) {
+ DWORD error = GetLastError();
+ if ( error != ERROR_ENVVAR_NOT_FOUND ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantGetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ // Variable is not found, it's ok, just continue.
+ } else {
+ DWORD len = rc;
+ result = (char *) KMP_INTERNAL_MALLOC( len );
+ if ( result == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ rc = GetEnvironmentVariable( name, result, len );
+ if ( ! rc ) {
+ // GetEnvironmentVariable() may return 0 if variable is empty.
+ // In such a case GetLastError() returns ERROR_SUCCESS.
+ DWORD error = GetLastError();
+ if ( error != ERROR_SUCCESS ) {
+ // Unexpected error. The variable should be in the environment,
+ // and buffer should be large enough.
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantGetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ KMP_INTERNAL_FREE( (void *) result );
+ result = NULL;
+ }; // if
+ }; // if
+ }; // if
+ #else
+ #error Unknown or unsupported OS.
+ #endif
+
+ return result;
+
+} // func __kmp_env_get
+
+
+// TODO: Find and replace all regular free() with __kmp_env_free().
+
+void
+__kmp_env_free( char const * * value ) {
+
+ KMP_DEBUG_ASSERT( value != NULL );
+ KMP_INTERNAL_FREE( (void *) * value );
+ * value = NULL;
+
+} // func __kmp_env_free
+
+
+
+int
+__kmp_env_exists( char const * name ) {
+
+ #if KMP_OS_UNIX
+ char const * value = getenv( name );
+ return ( ( value == NULL ) ? ( 0 ) : ( 1 ) );
+ #elif KMP_OS_WINDOWS
+ DWORD rc;
+ rc = GetEnvironmentVariable( name, NULL, 0 );
+ if ( rc == 0 ) {
+ DWORD error = GetLastError();
+ if ( error != ERROR_ENVVAR_NOT_FOUND ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantGetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ return 0;
+ }; // if
+ return 1;
+ #else
+ #error Unknown or unsupported OS.
+ #endif
+
+} // func __kmp_env_exists
+
+
+
+void
+__kmp_env_set( char const * name, char const * value, int overwrite ) {
+
+ #if KMP_OS_UNIX
+ int rc = setenv( name, value, overwrite );
+ if ( rc != 0 ) {
+ // Dead code. I tried to put too many variables into Linux* OS
+ // environment on IA-32 architecture. When application consumes
+ // more than ~2.5 GB of memory, entire system feels bad. Sometimes
+ // application is killed (by OS?), sometimes system stops
+ // responding... But this error message never appears. --ln
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetEnvVar, name ),
+ KMP_HNT( NotEnoughMemory ),
+ __kmp_msg_null
+ );
+ }; // if
+ #elif KMP_OS_WINDOWS
+ BOOL rc;
+ if ( ! overwrite ) {
+ rc = GetEnvironmentVariable( name, NULL, 0 );
+ if ( rc ) {
+ // Variable exists, do not overwrite.
+ return;
+ }; // if
+ DWORD error = GetLastError();
+ if ( error != ERROR_ENVVAR_NOT_FOUND ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantGetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ }; // if
+ rc = SetEnvironmentVariable( name, value );
+ if ( ! rc ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ #else
+ #error Unknown or unsupported OS.
+ #endif
+
+} // func __kmp_env_set
+
+
+
+void
+__kmp_env_unset( char const * name ) {
+
+ #if KMP_OS_UNIX
+ unsetenv( name );
+ #elif KMP_OS_WINDOWS
+ BOOL rc = SetEnvironmentVariable( name, NULL );
+ if ( ! rc ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetEnvVar, name ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ #else
+ #error Unknown or unsupported OS.
+ #endif
+
+} // func __kmp_env_unset
+
+// -------------------------------------------------------------------------------------------------
+
+/*
+ Intel OpenMP RTL string representation of environment: just a string of characters, variables
+ are separated with vertical bars, e. g.:
+
+ "KMP_WARNINGS=0|KMP_AFFINITY=compact|"
+
+ Empty variables are allowed and ignored:
+
+ "||KMP_WARNINGS=1||"
+
+*/
+
+static
+void
+___kmp_env_blk_parse_string(
+ kmp_env_blk_t * block, // M: Env block to fill.
+ char const * env // I: String to parse.
+) {
+
+ char const chr_delimiter = '|';
+ char const str_delimiter[] = { chr_delimiter, 0 };
+
+ char * bulk = NULL;
+ kmp_env_var_t * vars = NULL;
+ int count = 0; // Number of used elements in vars array.
+ int delimiters = 0; // Number of delimiters in input string.
+
+ // Copy original string, we will modify the copy.
+ bulk = __kmp_str_format( "%s", env );
+
+ // Loop thru all the vars in environment block. Count delimiters (maximum number of variables
+ // is number of delimiters plus one).
+ {
+ char const * ptr = bulk;
+ for ( ; ; ) {
+ ptr = strchr( ptr, chr_delimiter );
+ if ( ptr == NULL ) {
+ break;
+ }; // if
+ ++ delimiters;
+ ptr += 1;
+ }; // forever
+ }
+
+ // Allocate vars array.
+ vars = (kmp_env_var_t *) allocate( ( delimiters + 1 ) * sizeof( kmp_env_var_t ) );
+
+ // Loop thru all the variables.
+ {
+ char * var; // Pointer to variable (both name and value).
+ char * name; // Pointer to name of variable.
+ char * value; // Pointer to value.
+ char * buf; // Buffer for __kmp_str_token() function.
+ var = __kmp_str_token( bulk, str_delimiter, & buf ); // Get the first var.
+ while ( var != NULL ) {
+ // Save found variable in vars array.
+ __kmp_str_split( var, '=', & name, & value );
+ KMP_DEBUG_ASSERT( count < delimiters + 1 );
+ vars[ count ].name = name;
+ vars[ count ].value = value;
+ ++ count;
+ // Get the next var.
+ var = __kmp_str_token( NULL, str_delimiter, & buf );
+ }; // while
+ }
+
+ // Fill out result.
+ block->bulk = bulk;
+ block->vars = vars;
+ block->count = count;
+
+}; // ___kmp_env_blk_parse_string
+
+
+
+/*
+ Windows* OS (actually, DOS) environment block is a piece of memory with environment variables. Each
+ variable is terminated with zero byte, entire block is terminated with one extra zero byte, so
+ we have two zero bytes at the end of environment block, e. g.:
+
+ "HOME=C:\\users\\lev\x00OS=Windows_NT\x00\x00"
+
+ It is not clear how empty environment is represented. "\x00\x00"?
+*/
+
+#if KMP_OS_WINDOWS
+static
+void
+___kmp_env_blk_parse_windows(
+ kmp_env_blk_t * block, // M: Env block to fill.
+ char const * env // I: Pointer to Windows* OS (DOS) environment block.
+) {
+
+ char * bulk = NULL;
+ kmp_env_var_t * vars = NULL;
+ int count = 0; // Number of used elements in vars array.
+ int size = 0; // Size of bulk.
+
+ char * name; // Pointer to name of variable.
+ char * value; // Pointer to value.
+
+ if ( env != NULL ) {
+
+ // Loop thru all the vars in environment block. Count variables, find size of block.
+ {
+ char const * var; // Pointer to beginning of var.
+ int len; // Length of variable.
+ count = 0;
+ var = env; // The first variable starts and beginning of environment block.
+ len = KMP_STRLEN( var );
+ while ( len != 0 ) {
+ ++ count;
+ size = size + len + 1;
+ var = var + len + 1; // Move pointer to the beginning of the next variable.
+ len = KMP_STRLEN( var );
+ }; // while
+ size = size + 1; // Total size of env block, including terminating zero byte.
+ }
+
+ // Copy original block to bulk, we will modify bulk, not original block.
+ bulk = (char *) allocate( size );
+ KMP_MEMCPY_S( bulk, size, env, size );
+ // Allocate vars array.
+ vars = (kmp_env_var_t *) allocate( count * sizeof( kmp_env_var_t ) );
+
+ // Loop thru all the vars, now in bulk.
+ {
+ char * var; // Pointer to beginning of var.
+ int len; // Length of variable.
+ count = 0;
+ var = bulk;
+ len = KMP_STRLEN( var );
+ while ( len != 0 ) {
+ // Save variable in vars array.
+ __kmp_str_split( var, '=', & name, & value );
+ vars[ count ].name = name;
+ vars[ count ].value = value;
+ ++ count;
+ // Get the next var.
+ var = var + len + 1;
+ len = KMP_STRLEN( var );
+ }; // while
+ }
+
+ }; // if
+
+ // Fill out result.
+ block->bulk = bulk;
+ block->vars = vars;
+ block->count = count;
+
+}; // ___kmp_env_blk_parse_windows
+#endif
+
+
+/*
+ Unix environment block is a array of pointers to variables, last pointer in array is NULL:
+
+ { "HOME=/home/lev", "TERM=xterm", NULL }
+*/
+
+static
+void
+___kmp_env_blk_parse_unix(
+ kmp_env_blk_t * block, // M: Env block to fill.
+ char * * env // I: Unix environment to parse.
+) {
+
+ char * bulk = NULL;
+ kmp_env_var_t * vars = NULL;
+ int count = 0;
+ int size = 0; // Size of bulk.
+
+ // Count number of variables and length of required bulk.
+ {
+ count = 0;
+ size = 0;
+ while ( env[ count ] != NULL ) {
+ size += KMP_STRLEN( env[ count ] ) + 1;
+ ++ count;
+ }; // while
+ }
+
+ // Allocate memory.
+ bulk = (char *) allocate( size );
+ vars = (kmp_env_var_t *) allocate( count * sizeof( kmp_env_var_t ) );
+
+ // Loop thru all the vars.
+ {
+ char * var; // Pointer to beginning of var.
+ char * name; // Pointer to name of variable.
+ char * value; // Pointer to value.
+ int len; // Length of variable.
+ int i;
+ var = bulk;
+ for ( i = 0; i < count; ++ i ) {
+ // Copy variable to bulk.
+ len = KMP_STRLEN( env[ i ] );
+ KMP_MEMCPY_S( var, size, env[ i ], len + 1 );
+ // Save found variable in vars array.
+ __kmp_str_split( var, '=', & name, & value );
+ vars[ i ].name = name;
+ vars[ i ].value = value;
+ // Move pointer.
+ var += len + 1;
+ }; // for
+ }
+
+ // Fill out result.
+ block->bulk = bulk;
+ block->vars = vars;
+ block->count = count;
+
+}; // ___kmp_env_blk_parse_unix
+
+
+
+void
+__kmp_env_blk_init(
+ kmp_env_blk_t * block, // M: Block to initialize.
+ char const * bulk // I: Initialization string, or NULL.
+) {
+
+ if ( bulk != NULL ) {
+ ___kmp_env_blk_parse_string( block, bulk );
+ } else {
+ #if KMP_OS_UNIX
+ ___kmp_env_blk_parse_unix( block, environ );
+ #elif KMP_OS_WINDOWS
+ {
+ char * mem = GetEnvironmentStrings();
+ if ( mem == NULL ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantGetEnvironment ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ ___kmp_env_blk_parse_windows( block, mem );
+ FreeEnvironmentStrings( mem );
+ }
+ #else
+ #error Unknown or unsupported OS.
+ #endif
+ }; // if
+
+} // __kmp_env_blk_init
+
+
+
+static
+int
+___kmp_env_var_cmp( // Comparison function for qsort().
+ kmp_env_var_t const * lhs,
+ kmp_env_var_t const * rhs
+) {
+ return strcmp( lhs->name, rhs->name );
+}
+
+void
+__kmp_env_blk_sort(
+ kmp_env_blk_t * block // M: Block of environment variables to sort.
+) {
+
+ qsort(
+ (void *) block->vars,
+ block->count,
+ sizeof( kmp_env_var_t ),
+ ( int ( * )( void const *, void const * ) ) & ___kmp_env_var_cmp
+ );
+
+} // __kmp_env_block_sort
+
+
+
+void
+__kmp_env_blk_free(
+ kmp_env_blk_t * block // M: Block of environment variables to free.
+) {
+
+ KMP_INTERNAL_FREE( (void *) block->vars );
+ KMP_INTERNAL_FREE( (void *) block->bulk );
+
+ block->count = 0;
+ block->vars = NULL;
+ block->bulk = NULL;
+
+} // __kmp_env_blk_free
+
+
+
+char const * // R: Value of variable or NULL if variable does not exist.
+__kmp_env_blk_var(
+ kmp_env_blk_t * block, // I: Block of environment variables.
+ char const * name // I: Name of variable to find.
+) {
+
+ int i;
+ for ( i = 0; i < block->count; ++ i ) {
+ if ( strcmp( block->vars[ i ].name, name ) == 0 ) {
+ return block->vars[ i ].value;
+ }; // if
+ }; // for
+ return NULL;
+
+} // __kmp_env_block_var
+
+
+// end of file //
diff --git a/final/runtime/src/kmp_environment.h b/final/runtime/src/kmp_environment.h
new file mode 100644
index 0000000..243b547
--- /dev/null
+++ b/final/runtime/src/kmp_environment.h
@@ -0,0 +1,81 @@
+/*
+ * kmp_environment.h -- Handle environment varoiables OS-independently.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_ENVIRONMENT_H
+#define KMP_ENVIRONMENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Return a copy of the value of environment variable or NULL if the variable does not exist.
+// *Note*: Returned pointed *must* be freed after use with __kmp_env_free().
+char * __kmp_env_get( char const * name );
+void __kmp_env_free( char const * * value );
+
+// Return 1 if the environment variable exists or 0 if does not exist.
+int __kmp_env_exists( char const * name );
+
+// Set the environment variable.
+void __kmp_env_set( char const * name, char const * value, int overwrite );
+
+// Unset (remove) environment variable.
+void __kmp_env_unset( char const * name );
+
+
+// -------------------------------------------------------------------------------------------------
+// Working with environment blocks.
+// -------------------------------------------------------------------------------------------------
+
+/*
+ kmp_env_blk_t is read-only collection of environment variables (or environment-like). Usage:
+
+ kmp_env_blk_t block;
+ __kmp_env_blk_init( & block, NULL ); // Initialize block from process environment.
+ // or
+ __kmp_env_blk_init( & block, "KMP_WARNING=1|KMP_AFFINITY=none" ); // from string.
+ __kmp_env_blk_sort( & block ); // Optionally, sort list.
+ for ( i = 0; i < block.count; ++ i ) {
+ // Process block.vars[ i ].name and block.vars[ i ].value...
+ }; // for i
+ __kmp_env_block_free( & block );
+*/
+
+struct __kmp_env_var {
+ char const * name;
+ char const * value;
+};
+typedef struct __kmp_env_var kmp_env_var_t;
+
+struct __kmp_env_blk {
+ char const * bulk;
+ kmp_env_var_t const * vars;
+ int count;
+};
+typedef struct __kmp_env_blk kmp_env_blk_t;
+
+void __kmp_env_blk_init( kmp_env_blk_t * block, char const * bulk );
+void __kmp_env_blk_free( kmp_env_blk_t * block );
+void __kmp_env_blk_sort( kmp_env_blk_t * block );
+char const * __kmp_env_blk_var( kmp_env_blk_t * block, char const * name );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // KMP_ENVIRONMENT_H
+
+// end of file //
+
diff --git a/final/runtime/src/kmp_error.c b/final/runtime/src/kmp_error.c
new file mode 100644
index 0000000..6866df5
--- /dev/null
+++ b/final/runtime/src/kmp_error.c
@@ -0,0 +1,523 @@
+/*
+ * kmp_error.c -- KPTS functions for error checking at runtime
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_str.h"
+#include "kmp_error.h"
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#define MIN_STACK 100
+
+
+static char const * cons_text_c[] = {
+ "(none)",
+ "\"parallel\"",
+ "work-sharing", /* this is not called "for" because of lowering of "sections" pragmas */
+ "\"ordered\" work-sharing", /* this is not called "for ordered" because of lowering of "sections" pragmas */
+ "\"sections\"",
+ "work-sharing", /* this is not called "single" because of lowering of "sections" pragmas */
+ "\"taskq\"",
+ "\"taskq\"",
+ "\"taskq ordered\"",
+ "\"critical\"",
+ "\"ordered\"", /* in PARALLEL */
+ "\"ordered\"", /* in PDO */
+ "\"ordered\"", /* in TASKQ */
+ "\"master\"",
+ "\"reduce\"",
+ "\"barrier\""
+};
+
+#define get_src( ident ) ( (ident) == NULL ? NULL : (ident)->psource )
+
+#define PUSH_MSG( ct, ident ) \
+ "\tpushing on stack: %s (%s)\n", cons_text_c[ (ct) ], get_src( (ident) )
+#define POP_MSG( p ) \
+ "\tpopping off stack: %s (%s)\n", \
+ cons_text_c[ (p)->stack_data[ tos ].type ], \
+ get_src( (p)->stack_data[ tos ].ident )
+
+static int const cons_text_c_num = sizeof( cons_text_c ) / sizeof( char const * );
+
+/* ------------------------------------------------------------------------ */
+/* --------------- START OF STATIC LOCAL ROUTINES ------------------------- */
+/* ------------------------------------------------------------------------ */
+
+static void
+__kmp_check_null_func( void )
+{
+ /* nothing to do */
+}
+
+static void
+__kmp_expand_cons_stack( int gtid, struct cons_header *p )
+{
+ int i;
+ struct cons_data *d;
+
+ /* TODO for monitor perhaps? */
+ if (gtid < 0)
+ __kmp_check_null_func();
+
+ KE_TRACE( 10, ("expand cons_stack (%d %d)\n", gtid, __kmp_get_gtid() ) );
+
+ d = p->stack_data;
+
+ p->stack_size = (p->stack_size * 2) + 100;
+
+ /* TODO free the old data */
+ p->stack_data = (struct cons_data *) __kmp_allocate( sizeof( struct cons_data ) * (p->stack_size+1) );
+
+ for (i = p->stack_top; i >= 0; --i)
+ p->stack_data[i] = d[i];
+
+ /* NOTE: we do not free the old stack_data */
+}
+
+// NOTE: Function returns allocated memory, caller must free it!
+static char const *
+__kmp_pragma(
+ int ct,
+ ident_t const * ident
+) {
+ char const * cons = NULL; // Construct name.
+ char * file = NULL; // File name.
+ char * func = NULL; // Function (routine) name.
+ char * line = NULL; // Line number.
+ kmp_str_buf_t buffer;
+ kmp_msg_t prgm;
+ __kmp_str_buf_init( & buffer );
+ if ( 0 < ct && ct < cons_text_c_num ) {
+ cons = cons_text_c[ ct ];
+ } else {
+ KMP_DEBUG_ASSERT( 0 );
+ };
+ if ( ident != NULL && ident->psource != NULL ) {
+ char * tail = NULL;
+ __kmp_str_buf_print( & buffer, "%s", ident->psource ); // Copy source to buffer.
+ // Split string in buffer to file, func, and line.
+ tail = buffer.str;
+ __kmp_str_split( tail, ';', NULL, & tail );
+ __kmp_str_split( tail, ';', & file, & tail );
+ __kmp_str_split( tail, ';', & func, & tail );
+ __kmp_str_split( tail, ';', & line, & tail );
+ }; // if
+ prgm = __kmp_msg_format( kmp_i18n_fmt_Pragma, cons, file, func, line );
+ __kmp_str_buf_free( & buffer );
+ return prgm.str;
+} // __kmp_pragma
+
+/* ------------------------------------------------------------------------ */
+/* ----------------- END OF STATIC LOCAL ROUTINES ------------------------- */
+/* ------------------------------------------------------------------------ */
+
+
+void
+__kmp_error_construct(
+ kmp_i18n_id_t id, // Message identifier.
+ enum cons_type ct, // Construct type.
+ ident_t const * ident // Construct ident.
+) {
+ char const * construct = __kmp_pragma( ct, ident );
+ __kmp_msg( kmp_ms_fatal, __kmp_msg_format( id, construct ), __kmp_msg_null );
+ KMP_INTERNAL_FREE( (void *) construct );
+}
+
+void
+__kmp_error_construct2(
+ kmp_i18n_id_t id, // Message identifier.
+ enum cons_type ct, // First construct type.
+ ident_t const * ident, // First construct ident.
+ struct cons_data const * cons // Second construct.
+) {
+ char const * construct1 = __kmp_pragma( ct, ident );
+ char const * construct2 = __kmp_pragma( cons->type, cons->ident );
+ __kmp_msg( kmp_ms_fatal, __kmp_msg_format( id, construct1, construct2 ), __kmp_msg_null );
+ KMP_INTERNAL_FREE( (void *) construct1 );
+ KMP_INTERNAL_FREE( (void *) construct2 );
+}
+
+
+struct cons_header *
+__kmp_allocate_cons_stack( int gtid )
+{
+ struct cons_header *p;
+
+ /* TODO for monitor perhaps? */
+ if ( gtid < 0 ) {
+ __kmp_check_null_func();
+ }; // if
+ KE_TRACE( 10, ("allocate cons_stack (%d)\n", gtid ) );
+ p = (struct cons_header *) __kmp_allocate( sizeof( struct cons_header ) );
+ p->p_top = p->w_top = p->s_top = 0;
+ p->stack_data = (struct cons_data *) __kmp_allocate( sizeof( struct cons_data ) * (MIN_STACK+1) );
+ p->stack_size = MIN_STACK;
+ p->stack_top = 0;
+ p->stack_data[ 0 ].type = ct_none;
+ p->stack_data[ 0 ].prev = 0;
+ p->stack_data[ 0 ].ident = NULL;
+ return p;
+}
+
+void
+__kmp_free_cons_stack( void * ptr ) {
+ struct cons_header * p = (struct cons_header *) ptr;
+ if ( p != NULL ) {
+ if ( p->stack_data != NULL ) {
+ __kmp_free( p->stack_data );
+ p->stack_data = NULL;
+ }; // if
+ __kmp_free( p );
+ }; // if
+}
+
+
+#if KMP_DEBUG
+static void
+dump_cons_stack( int gtid, struct cons_header * p ) {
+ int i;
+ int tos = p->stack_top;
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init( & buffer );
+ __kmp_str_buf_print( & buffer, "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n" );
+ __kmp_str_buf_print( & buffer, "Begin construct stack with %d items for thread %d\n", tos, gtid );
+ __kmp_str_buf_print( & buffer, " stack_top=%d { P=%d, W=%d, S=%d }\n", tos, p->p_top, p->w_top, p->s_top );
+ for ( i = tos; i > 0; i-- ) {
+ struct cons_data * c = & ( p->stack_data[ i ] );
+ __kmp_str_buf_print( & buffer, " stack_data[%2d] = { %s (%s) %d %p }\n", i, cons_text_c[ c->type ], get_src( c->ident ), c->prev, c->name );
+ }; // for i
+ __kmp_str_buf_print( & buffer, "End construct stack for thread %d\n", gtid );
+ __kmp_str_buf_print( & buffer, "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n" );
+ __kmp_debug_printf( "%s", buffer.str );
+ __kmp_str_buf_free( & buffer );
+}
+#endif
+
+void
+__kmp_push_parallel( int gtid, ident_t const * ident )
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+
+ KMP_DEBUG_ASSERT( __kmp_threads[ gtid ]-> th.th_cons );
+ KE_TRACE( 10, ("__kmp_push_parallel (%d %d)\n", gtid, __kmp_get_gtid() ) );
+ KE_TRACE( 100, ( PUSH_MSG( ct_parallel, ident ) ) );
+ if ( p->stack_top >= p->stack_size ) {
+ __kmp_expand_cons_stack( gtid, p );
+ }; // if
+ tos = ++p->stack_top;
+ p->stack_data[ tos ].type = ct_parallel;
+ p->stack_data[ tos ].prev = p->p_top;
+ p->stack_data[ tos ].ident = ident;
+ p->stack_data[ tos ].name = NULL;
+ p->p_top = tos;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+}
+
+void
+__kmp_check_workshare( int gtid, enum cons_type ct, ident_t const * ident )
+{
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+
+ KMP_DEBUG_ASSERT( __kmp_threads[ gtid ]-> th.th_cons );
+ KE_TRACE( 10, ("__kmp_check_workshare (%d %d)\n", gtid, __kmp_get_gtid() ) );
+
+
+ if ( p->stack_top >= p->stack_size ) {
+ __kmp_expand_cons_stack( gtid, p );
+ }; // if
+ if ( p->w_top > p->p_top &&
+ !(IS_CONS_TYPE_TASKQ(p->stack_data[ p->w_top ].type) && IS_CONS_TYPE_TASKQ(ct))) {
+ // We are already in a WORKSHARE construct for this PARALLEL region.
+ __kmp_error_construct2( kmp_i18n_msg_CnsInvalidNesting, ct, ident, & p->stack_data[ p->w_top ] );
+ }; // if
+ if ( p->s_top > p->p_top ) {
+ // We are already in a SYNC construct for this PARALLEL region.
+ __kmp_error_construct2( kmp_i18n_msg_CnsInvalidNesting, ct, ident, & p->stack_data[ p->s_top ] );
+ }; // if
+}
+
+void
+__kmp_push_workshare( int gtid, enum cons_type ct, ident_t const * ident )
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ KE_TRACE( 10, ("__kmp_push_workshare (%d %d)\n", gtid, __kmp_get_gtid() ) );
+ __kmp_check_workshare( gtid, ct, ident );
+ KE_TRACE( 100, ( PUSH_MSG( ct, ident ) ) );
+ tos = ++p->stack_top;
+ p->stack_data[ tos ].type = ct;
+ p->stack_data[ tos ].prev = p->w_top;
+ p->stack_data[ tos ].ident = ident;
+ p->stack_data[ tos ].name = NULL;
+ p->w_top = tos;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+}
+
+void
+#if KMP_USE_DYNAMIC_LOCK
+__kmp_check_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p lck, kmp_uint32 seq )
+#else
+__kmp_check_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p lck )
+#endif
+{
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+
+ KE_TRACE( 10, ("__kmp_check_sync (gtid=%d)\n", __kmp_get_gtid() ) );
+
+ if (p->stack_top >= p->stack_size)
+ __kmp_expand_cons_stack( gtid, p );
+
+ if (ct == ct_ordered_in_parallel || ct == ct_ordered_in_pdo || ct == ct_ordered_in_taskq ) {
+ if (p->w_top <= p->p_top) {
+ /* we are not in a worksharing construct */
+ #ifdef BUILD_PARALLEL_ORDERED
+ /* do not report error messages for PARALLEL ORDERED */
+ KMP_ASSERT( ct == ct_ordered_in_parallel );
+ #else
+ __kmp_error_construct( kmp_i18n_msg_CnsBoundToWorksharing, ct, ident );
+ #endif /* BUILD_PARALLEL_ORDERED */
+ } else {
+ /* inside a WORKSHARING construct for this PARALLEL region */
+ if (!IS_CONS_TYPE_ORDERED(p->stack_data[ p->w_top ].type)) {
+ if (p->stack_data[ p->w_top ].type == ct_taskq) {
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsNotInTaskConstruct,
+ ct, ident,
+ & p->stack_data[ p->w_top ]
+ );
+ } else {
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsNoOrderedClause,
+ ct, ident,
+ & p->stack_data[ p->w_top ]
+ );
+ }
+ }
+ }
+ if (p->s_top > p->p_top && p->s_top > p->w_top) {
+ /* inside a sync construct which is inside a worksharing construct */
+ int index = p->s_top;
+ enum cons_type stack_type;
+
+ stack_type = p->stack_data[ index ].type;
+
+ if (stack_type == ct_critical ||
+ ( ( stack_type == ct_ordered_in_parallel ||
+ stack_type == ct_ordered_in_pdo ||
+ stack_type == ct_ordered_in_taskq ) && /* C doesn't allow named ordered; ordered in ordered gets error */
+ p->stack_data[ index ].ident != NULL &&
+ (p->stack_data[ index ].ident->flags & KMP_IDENT_KMPC ))) {
+ /* we are in ORDERED which is inside an ORDERED or CRITICAL construct */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsInvalidNesting,
+ ct, ident,
+ & p->stack_data[ index ]
+ );
+ }
+ }
+ } else if ( ct == ct_critical ) {
+#if KMP_USE_DYNAMIC_LOCK
+ if ( lck != NULL && __kmp_get_user_lock_owner( lck, seq ) == gtid ) { /* this same thread already has lock for this critical section */
+#else
+ if ( lck != NULL && __kmp_get_user_lock_owner( lck ) == gtid ) { /* this same thread already has lock for this critical section */
+#endif
+ int index = p->s_top;
+ struct cons_data cons = { NULL, ct_critical, 0, NULL };
+ /* walk up construct stack and try to find critical with matching name */
+ while ( index != 0 && p->stack_data[ index ].name != lck ) {
+ index = p->stack_data[ index ].prev;
+ }
+ if ( index != 0 ) {
+ /* found match on the stack (may not always because of interleaved critical for Fortran) */
+ cons = p->stack_data[ index ];
+ }
+ /* we are in CRITICAL which is inside a CRITICAL construct of the same name */
+ __kmp_error_construct2( kmp_i18n_msg_CnsNestingSameName, ct, ident, & cons );
+ }
+ } else if ( ct == ct_master || ct == ct_reduce ) {
+ if (p->w_top > p->p_top) {
+ /* inside a WORKSHARING construct for this PARALLEL region */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsInvalidNesting,
+ ct, ident,
+ & p->stack_data[ p->w_top ]
+ );
+ }
+ if (ct == ct_reduce && p->s_top > p->p_top) {
+ /* inside a another SYNC construct for this PARALLEL region */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsInvalidNesting,
+ ct, ident,
+ & p->stack_data[ p->s_top ]
+ );
+ }; // if
+ }; // if
+}
+
+void
+#if KMP_USE_DYNAMIC_LOCK
+__kmp_push_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p lck, kmp_uint32 seq )
+#else
+__kmp_push_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p lck )
+#endif
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+
+ KMP_ASSERT( gtid == __kmp_get_gtid() );
+ KE_TRACE( 10, ("__kmp_push_sync (gtid=%d)\n", gtid ) );
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_check_sync( gtid, ct, ident, lck, seq );
+#else
+ __kmp_check_sync( gtid, ct, ident, lck );
+#endif
+ KE_TRACE( 100, ( PUSH_MSG( ct, ident ) ) );
+ tos = ++ p->stack_top;
+ p->stack_data[ tos ].type = ct;
+ p->stack_data[ tos ].prev = p->s_top;
+ p->stack_data[ tos ].ident = ident;
+ p->stack_data[ tos ].name = lck;
+ p->s_top = tos;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+}
+
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_pop_parallel( int gtid, ident_t const * ident )
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ tos = p->stack_top;
+ KE_TRACE( 10, ("__kmp_pop_parallel (%d %d)\n", gtid, __kmp_get_gtid() ) );
+ if ( tos == 0 || p->p_top == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsDetectedEnd, ct_parallel, ident );
+ }
+ if ( tos != p->p_top || p->stack_data[ tos ].type != ct_parallel ) {
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsExpectedEnd,
+ ct_parallel, ident,
+ & p->stack_data[ tos ]
+ );
+ }
+ KE_TRACE( 100, ( POP_MSG( p ) ) );
+ p->p_top = p->stack_data[ tos ].prev;
+ p->stack_data[ tos ].type = ct_none;
+ p->stack_data[ tos ].ident = NULL;
+ p->stack_top = tos - 1;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+}
+
+enum cons_type
+__kmp_pop_workshare( int gtid, enum cons_type ct, ident_t const * ident )
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+
+ tos = p->stack_top;
+ KE_TRACE( 10, ("__kmp_pop_workshare (%d %d)\n", gtid, __kmp_get_gtid() ) );
+ if ( tos == 0 || p->w_top == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsDetectedEnd, ct, ident );
+ }
+
+ if ( tos != p->w_top ||
+ ( p->stack_data[ tos ].type != ct &&
+ /* below are two exceptions to the rule that construct types must match */
+ ! ( p->stack_data[ tos ].type == ct_pdo_ordered && ct == ct_pdo ) &&
+ ! ( p->stack_data[ tos ].type == ct_task_ordered && ct == ct_task )
+ )
+ ) {
+ __kmp_check_null_func();
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsExpectedEnd,
+ ct, ident,
+ & p->stack_data[ tos ]
+ );
+ }
+ KE_TRACE( 100, ( POP_MSG( p ) ) );
+ p->w_top = p->stack_data[ tos ].prev;
+ p->stack_data[ tos ].type = ct_none;
+ p->stack_data[ tos ].ident = NULL;
+ p->stack_top = tos - 1;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+ return p->stack_data[ p->w_top ].type;
+}
+
+void
+__kmp_pop_sync( int gtid, enum cons_type ct, ident_t const * ident )
+{
+ int tos;
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ tos = p->stack_top;
+ KE_TRACE( 10, ("__kmp_pop_sync (%d %d)\n", gtid, __kmp_get_gtid() ) );
+ if ( tos == 0 || p->s_top == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsDetectedEnd, ct, ident );
+ };
+ if ( tos != p->s_top || p->stack_data[ tos ].type != ct ) {
+ __kmp_check_null_func();
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsExpectedEnd,
+ ct, ident,
+ & p->stack_data[ tos ]
+ );
+ };
+ if ( gtid < 0 ) {
+ __kmp_check_null_func();
+ };
+ KE_TRACE( 100, ( POP_MSG( p ) ) );
+ p->s_top = p->stack_data[ tos ].prev;
+ p->stack_data[ tos ].type = ct_none;
+ p->stack_data[ tos ].ident = NULL;
+ p->stack_top = tos - 1;
+ KE_DUMP( 1000, dump_cons_stack( gtid, p ) );
+}
+
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_check_barrier( int gtid, enum cons_type ct, ident_t const * ident )
+{
+ struct cons_header *p = __kmp_threads[ gtid ]->th.th_cons;
+ KE_TRACE( 10, ("__kmp_check_barrier (loc: %p, gtid: %d %d)\n", ident, gtid, __kmp_get_gtid() ) );
+ if ( ident != 0 ) {
+ __kmp_check_null_func();
+ }
+ if ( p->w_top > p->p_top ) {
+ /* we are already in a WORKSHARING construct for this PARALLEL region */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsInvalidNesting,
+ ct, ident,
+ & p->stack_data[ p->w_top ]
+ );
+ }
+ if (p->s_top > p->p_top) {
+ /* we are already in a SYNC construct for this PARALLEL region */
+ __kmp_error_construct2(
+ kmp_i18n_msg_CnsInvalidNesting,
+ ct, ident,
+ & p->stack_data[ p->s_top ]
+ );
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
diff --git a/final/runtime/src/kmp_error.h b/final/runtime/src/kmp_error.h
new file mode 100644
index 0000000..9dfe111
--- /dev/null
+++ b/final/runtime/src/kmp_error.h
@@ -0,0 +1,57 @@
+/*
+ * kmp_error.h -- PTS functions for error checking at runtime.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_ERROR_H
+#define KMP_ERROR_H
+
+#include "kmp_i18n.h"
+
+/* ------------------------------------------------------------------------ */
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+void __kmp_error_construct( kmp_i18n_id_t id, enum cons_type ct, ident_t const * ident );
+void __kmp_error_construct2( kmp_i18n_id_t id, enum cons_type ct, ident_t const * ident, struct cons_data const * cons );
+
+struct cons_header * __kmp_allocate_cons_stack( int gtid );
+void __kmp_free_cons_stack( void * ptr );
+
+void __kmp_push_parallel( int gtid, ident_t const * ident );
+void __kmp_push_workshare( int gtid, enum cons_type ct, ident_t const * ident );
+#if KMP_USE_DYNAMIC_LOCK
+void __kmp_push_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p name, kmp_uint32 );
+#else
+void __kmp_push_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p name );
+#endif
+
+void __kmp_check_workshare( int gtid, enum cons_type ct, ident_t const * ident );
+#if KMP_USE_DYNAMIC_LOCK
+void __kmp_check_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p name, kmp_uint32 );
+#else
+void __kmp_check_sync( int gtid, enum cons_type ct, ident_t const * ident, kmp_user_lock_p name );
+#endif
+
+void __kmp_pop_parallel( int gtid, ident_t const * ident );
+enum cons_type __kmp_pop_workshare( int gtid, enum cons_type ct, ident_t const * ident );
+void __kmp_pop_sync( int gtid, enum cons_type ct, ident_t const * ident );
+void __kmp_check_barrier( int gtid, enum cons_type ct, ident_t const * ident );
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif
+
+#endif // KMP_ERROR_H
+
diff --git a/final/runtime/src/kmp_ftn_cdecl.c b/final/runtime/src/kmp_ftn_cdecl.c
new file mode 100644
index 0000000..51fa1bf
--- /dev/null
+++ b/final/runtime/src/kmp_ftn_cdecl.c
@@ -0,0 +1,35 @@
+/*
+ * kmp_ftn_cdecl.c -- Fortran __cdecl linkage support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+
+#if KMP_OS_WINDOWS
+# if defined KMP_WIN_CDECL || !defined KMP_DYNAMIC_LIB
+# define KMP_FTN_ENTRIES KMP_FTN_UPPER
+# endif
+#elif KMP_OS_UNIX
+# define KMP_FTN_ENTRIES KMP_FTN_PLAIN
+#endif
+
+// Note: This string is not printed when KMP_VERSION=1.
+char const __kmp_version_ftncdecl[] = KMP_VERSION_PREFIX "Fortran __cdecl OMP support: "
+#ifdef KMP_FTN_ENTRIES
+ "yes";
+# define FTN_STDCALL /* no stdcall */
+# include "kmp_ftn_os.h"
+# include "kmp_ftn_entry.h"
+#else
+ "no";
+#endif /* KMP_FTN_ENTRIES */
diff --git a/final/runtime/src/kmp_ftn_entry.h b/final/runtime/src/kmp_ftn_entry.h
new file mode 100644
index 0000000..b9de5e3
--- /dev/null
+++ b/final/runtime/src/kmp_ftn_entry.h
@@ -0,0 +1,1480 @@
+/*
+ * kmp_ftn_entry.h -- Fortran entry linkage support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef FTN_STDCALL
+# error The support file kmp_ftn_entry.h should not be compiled by itself.
+#endif
+
+#ifdef KMP_STUB
+ #include "kmp_stub.h"
+#endif
+
+#include "kmp_i18n.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+/*
+ * For compatibility with the Gnu/MS Open MP codegen, omp_set_num_threads(),
+ * omp_set_nested(), and omp_set_dynamic() [in lowercase on MS, and w/o
+ * a trailing underscore on Linux* OS] take call by value integer arguments.
+ * + omp_set_max_active_levels()
+ * + omp_set_schedule()
+ *
+ * For backward compatibility with 9.1 and previous Intel compiler, these
+ * entry points take call by reference integer arguments.
+ */
+#ifdef KMP_GOMP_COMPAT
+# if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER)
+# define PASS_ARGS_BY_VALUE 1
+# endif
+#endif
+#if KMP_OS_WINDOWS
+# if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND)
+# define PASS_ARGS_BY_VALUE 1
+# endif
+#endif
+
+// This macro helps to reduce code duplication.
+#ifdef PASS_ARGS_BY_VALUE
+ #define KMP_DEREF
+#else
+ #define KMP_DEREF *
+#endif
+
+void FTN_STDCALL
+FTN_SET_STACKSIZE( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ __kmps_set_stacksize( KMP_DEREF arg );
+ #else
+ // __kmp_aux_set_stacksize initializes the library if needed
+ __kmp_aux_set_stacksize( (size_t) KMP_DEREF arg );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_STACKSIZE_S( size_t KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ __kmps_set_stacksize( KMP_DEREF arg );
+ #else
+ // __kmp_aux_set_stacksize initializes the library if needed
+ __kmp_aux_set_stacksize( KMP_DEREF arg );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_STACKSIZE( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_stacksize();
+ #else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ return (int)__kmp_stksize;
+ #endif
+}
+
+size_t FTN_STDCALL
+FTN_GET_STACKSIZE_S( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_stacksize();
+ #else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ return __kmp_stksize;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_BLOCKTIME( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ __kmps_set_blocktime( KMP_DEREF arg );
+ #else
+ int gtid, tid;
+ kmp_info_t *thread;
+
+ gtid = __kmp_entry_gtid();
+ tid = __kmp_tid_from_gtid(gtid);
+ thread = __kmp_thread_from_gtid(gtid);
+
+ __kmp_aux_set_blocktime( KMP_DEREF arg, thread, tid );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_BLOCKTIME( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_blocktime();
+ #else
+ int gtid, tid;
+ kmp_info_t *thread;
+ kmp_team_p *team;
+
+ gtid = __kmp_entry_gtid();
+ tid = __kmp_tid_from_gtid(gtid);
+ thread = __kmp_thread_from_gtid(gtid);
+ team = __kmp_threads[ gtid ] -> th.th_team;
+
+ /* These must match the settings used in __kmp_wait_sleep() */
+ if ( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
+ KF_TRACE(10, ( "kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n",
+ gtid, team->t.t_id, tid, KMP_MAX_BLOCKTIME) );
+ return KMP_MAX_BLOCKTIME;
+ }
+#ifdef KMP_ADJUST_BLOCKTIME
+ else if ( __kmp_zero_bt && !get__bt_set( team, tid ) ) {
+ KF_TRACE(10, ( "kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n",
+ gtid, team->t.t_id, tid, 0) );
+ return 0;
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+ else {
+ KF_TRACE(10, ( "kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n",
+ gtid, team->t.t_id, tid, get__blocktime( team, tid ) ) );
+ return get__blocktime( team, tid );
+ };
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_LIBRARY_SERIAL( void )
+{
+ #ifdef KMP_STUB
+ __kmps_set_library( library_serial );
+ #else
+ // __kmp_user_set_library initializes the library if needed
+ __kmp_user_set_library( library_serial );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_LIBRARY_TURNAROUND( void )
+{
+ #ifdef KMP_STUB
+ __kmps_set_library( library_turnaround );
+ #else
+ // __kmp_user_set_library initializes the library if needed
+ __kmp_user_set_library( library_turnaround );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_LIBRARY_THROUGHPUT( void )
+{
+ #ifdef KMP_STUB
+ __kmps_set_library( library_throughput );
+ #else
+ // __kmp_user_set_library initializes the library if needed
+ __kmp_user_set_library( library_throughput );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_LIBRARY( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ __kmps_set_library( KMP_DEREF arg );
+ #else
+ enum library_type lib;
+ lib = (enum library_type) KMP_DEREF arg;
+ // __kmp_user_set_library initializes the library if needed
+ __kmp_user_set_library( lib );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_LIBRARY (void)
+{
+ #ifdef KMP_STUB
+ return __kmps_get_library();
+ #else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ }
+ return ((int) __kmp_library);
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_DISP_NUM_BUFFERS( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ ; // empty routine
+ #else
+ // ignore after initialization because some teams have already
+ // allocated dispatch buffers
+ if( __kmp_init_serial == 0 && (KMP_DEREF arg) > 0 )
+ __kmp_dispatch_num_buffers = KMP_DEREF arg;
+ #endif
+}
+
+int FTN_STDCALL
+FTN_SET_AFFINITY( void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_set_affinity( mask );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_AFFINITY( void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_get_affinity( mask );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_AFFINITY_MAX_PROC( void )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return 0;
+ #else
+ //
+ // We really only NEED serial initialization here.
+ //
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ if ( ! ( KMP_AFFINITY_CAPABLE() ) ) {
+ return 0;
+ }
+
+ #if KMP_GROUP_AFFINITY
+ if ( __kmp_num_proc_groups > 1 ) {
+ return (int)(__kmp_num_proc_groups*sizeof(DWORD_PTR)*CHAR_BIT);
+ }
+ #endif /* KMP_GROUP_AFFINITY */
+ return __kmp_xproc;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_CREATE_AFFINITY_MASK( void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ *mask = NULL;
+ #else
+ //
+ // We really only NEED serial initialization here.
+ //
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ # if KMP_USE_HWLOC
+ *mask = (hwloc_cpuset_t)hwloc_bitmap_alloc();
+ # else
+ *mask = kmpc_malloc( __kmp_affin_mask_size );
+ # endif
+ KMP_CPU_ZERO( (kmp_affin_mask_t *)(*mask) );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_DESTROY_AFFINITY_MASK( void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ // Nothing
+ #else
+ //
+ // We really only NEED serial initialization here.
+ //
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ if ( __kmp_env_consistency_check ) {
+ if ( *mask == NULL ) {
+ KMP_FATAL( AffinityInvalidMask, "kmp_destroy_affinity_mask" );
+ }
+ }
+ # if KMP_USE_HWLOC
+ hwloc_bitmap_free((hwloc_cpuset_t)(*mask));
+ # else
+ kmpc_free( *mask );
+ # endif
+ *mask = NULL;
+ #endif
+}
+
+int FTN_STDCALL
+FTN_SET_AFFINITY_MASK_PROC( int KMP_DEREF proc, void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_set_affinity_mask_proc( KMP_DEREF proc, mask );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_UNSET_AFFINITY_MASK_PROC( int KMP_DEREF proc, void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_unset_affinity_mask_proc( KMP_DEREF proc, mask );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_AFFINITY_MASK_PROC( int KMP_DEREF proc, void **mask )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_aux_get_affinity_mask_proc( KMP_DEREF proc, mask );
+ #endif
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/* sets the requested number of threads for the next parallel region */
+
+void FTN_STDCALL
+xexpand(FTN_SET_NUM_THREADS)( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ // Nothing.
+ #else
+ __kmp_set_num_threads( KMP_DEREF arg, __kmp_entry_gtid() );
+ #endif
+}
+
+
+/* returns the number of threads in current team */
+int FTN_STDCALL
+xexpand(FTN_GET_NUM_THREADS)( void )
+{
+ #ifdef KMP_STUB
+ return 1;
+ #else
+ // __kmpc_bound_num_threads initializes the library if needed
+ return __kmpc_bound_num_threads(NULL);
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_MAX_THREADS)( void )
+{
+ #ifdef KMP_STUB
+ return 1;
+ #else
+ int gtid;
+ kmp_info_t *thread;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ gtid = __kmp_entry_gtid();
+ thread = __kmp_threads[ gtid ];
+ //return thread -> th.th_team -> t.t_current_task[ thread->th.th_info.ds.ds_tid ] -> icvs.nproc;
+ return thread -> th.th_current_task -> td_icvs.nproc;
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_THREAD_NUM)( void )
+{
+ #ifdef KMP_STUB
+ return 0;
+ #else
+ int gtid;
+
+ #if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD
+ gtid = __kmp_entry_gtid();
+ #elif KMP_OS_WINDOWS
+ if (!__kmp_init_parallel ||
+ (gtid = (int)((kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key ))) == 0) {
+ // Either library isn't initialized or thread is not registered
+ // 0 is the correct TID in this case
+ return 0;
+ }
+ --gtid; // We keep (gtid+1) in TLS
+ #elif KMP_OS_LINUX
+ #ifdef KMP_TDATA_GTID
+ if ( __kmp_gtid_mode >= 3 ) {
+ if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
+ return 0;
+ }
+ } else {
+ #endif
+ if (!__kmp_init_parallel ||
+ (gtid = (kmp_intptr_t)(pthread_getspecific( __kmp_gtid_threadprivate_key ))) == 0) {
+ return 0;
+ }
+ --gtid;
+ #ifdef KMP_TDATA_GTID
+ }
+ #endif
+ #else
+ #error Unknown or unsupported OS
+ #endif
+
+ return __kmp_tid_from_gtid( gtid );
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_NUM_KNOWN_THREADS( void )
+{
+ #ifdef KMP_STUB
+ return 1;
+ #else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ }
+ /* NOTE: this is not syncronized, so it can change at any moment */
+ /* NOTE: this number also includes threads preallocated in hot-teams */
+ return TCR_4(__kmp_nth);
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_NUM_PROCS)( void )
+{
+ #ifdef KMP_STUB
+ return 1;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_avail_proc;
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_NESTED)( int KMP_DEREF flag )
+{
+ #ifdef KMP_STUB
+ __kmps_set_nested( KMP_DEREF flag );
+ #else
+ kmp_info_t *thread;
+ /* For the thread-private internal controls implementation */
+ thread = __kmp_entry_thread();
+ __kmp_save_internal_controls( thread );
+ set__nested( thread, ( (KMP_DEREF flag) ? TRUE : FALSE ) );
+ #endif
+}
+
+
+int FTN_STDCALL
+xexpand(FTN_GET_NESTED)( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_nested();
+ #else
+ kmp_info_t *thread;
+ thread = __kmp_entry_thread();
+ return get__nested( thread );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_DYNAMIC)( int KMP_DEREF flag )
+{
+ #ifdef KMP_STUB
+ __kmps_set_dynamic( KMP_DEREF flag ? TRUE : FALSE );
+ #else
+ kmp_info_t *thread;
+ /* For the thread-private implementation of the internal controls */
+ thread = __kmp_entry_thread();
+ // !!! What if foreign thread calls it?
+ __kmp_save_internal_controls( thread );
+ set__dynamic( thread, KMP_DEREF flag ? TRUE : FALSE );
+ #endif
+}
+
+
+int FTN_STDCALL
+xexpand(FTN_GET_DYNAMIC)( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_dynamic();
+ #else
+ kmp_info_t *thread;
+ thread = __kmp_entry_thread();
+ return get__dynamic( thread );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_IN_PARALLEL)( void )
+{
+ #ifdef KMP_STUB
+ return 0;
+ #else
+ kmp_info_t *th = __kmp_entry_thread();
+#if OMP_40_ENABLED
+ if ( th->th.th_teams_microtask ) {
+ // AC: r_in_parallel does not work inside teams construct
+ // where real parallel is inactive, but all threads have same root,
+ // so setting it in one team affects other teams.
+ // The solution is to use per-team nesting level
+ return ( th->th.th_team->t.t_active_level ? 1 : 0 );
+ }
+ else
+#endif /* OMP_40_ENABLED */
+ return ( th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_SCHEDULE)( kmp_sched_t KMP_DEREF kind, int KMP_DEREF modifier )
+{
+ #ifdef KMP_STUB
+ __kmps_set_schedule( KMP_DEREF kind, KMP_DEREF modifier );
+ #else
+ /* TO DO */
+ /* For the per-task implementation of the internal controls */
+ __kmp_set_schedule( __kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_GET_SCHEDULE)( kmp_sched_t * kind, int * modifier )
+{
+ #ifdef KMP_STUB
+ __kmps_get_schedule( kind, modifier );
+ #else
+ /* TO DO */
+ /* For the per-task implementation of the internal controls */
+ __kmp_get_schedule( __kmp_entry_gtid(), kind, modifier );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_MAX_ACTIVE_LEVELS)( int KMP_DEREF arg )
+{
+ #ifdef KMP_STUB
+ // Nothing.
+ #else
+ /* TO DO */
+ /* We want per-task implementation of this internal control */
+ __kmp_set_max_active_levels( __kmp_entry_gtid(), KMP_DEREF arg );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_MAX_ACTIVE_LEVELS)( void )
+{
+ #ifdef KMP_STUB
+ return 0;
+ #else
+ /* TO DO */
+ /* We want per-task implementation of this internal control */
+ return __kmp_get_max_active_levels( __kmp_entry_gtid() );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_ACTIVE_LEVEL)( void )
+{
+ #ifdef KMP_STUB
+ return 0; // returns 0 if it is called from the sequential part of the program
+ #else
+ /* TO DO */
+ /* For the per-task implementation of the internal controls */
+ return __kmp_entry_thread() -> th.th_team -> t.t_active_level;
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_LEVEL)( void )
+{
+ #ifdef KMP_STUB
+ return 0; // returns 0 if it is called from the sequential part of the program
+ #else
+ /* TO DO */
+ /* For the per-task implementation of the internal controls */
+ return __kmp_entry_thread() -> th.th_team -> t.t_level;
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_ANCESTOR_THREAD_NUM)( int KMP_DEREF level )
+{
+ #ifdef KMP_STUB
+ return ( KMP_DEREF level ) ? ( -1 ) : ( 0 );
+ #else
+ return __kmp_get_ancestor_thread_num( __kmp_entry_gtid(), KMP_DEREF level );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_TEAM_SIZE)( int KMP_DEREF level )
+{
+ #ifdef KMP_STUB
+ return ( KMP_DEREF level ) ? ( -1 ) : ( 1 );
+ #else
+ return __kmp_get_team_size( __kmp_entry_gtid(), KMP_DEREF level );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_THREAD_LIMIT)( void )
+{
+ #ifdef KMP_STUB
+ return 1; // TO DO: clarify whether it returns 1 or 0?
+ #else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ /* global ICV */
+ return __kmp_max_nth;
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_IN_FINAL)( void )
+{
+ #ifdef KMP_STUB
+ return 0; // TO DO: clarify whether it returns 1 or 0?
+ #else
+ if ( ! TCR_4(__kmp_init_parallel) ) {
+ return 0;
+ }
+ return __kmp_entry_thread() -> th.th_current_task -> td_flags.final;
+ #endif
+}
+
+#if OMP_40_ENABLED
+
+
+kmp_proc_bind_t FTN_STDCALL
+xexpand(FTN_GET_PROC_BIND)( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_proc_bind();
+ #else
+ return get__proc_bind( __kmp_entry_thread() );
+ #endif
+}
+
+#if OMP_45_ENABLED
+int FTN_STDCALL
+FTN_GET_NUM_PLACES( void )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return 0;
+ #else
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ return __kmp_affinity_num_masks;
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_PLACE_NUM_PROCS( int place_num )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return 0;
+ #else
+ int i;
+ int retval = 0;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ if ( place_num < 0 || place_num >= (int)__kmp_affinity_num_masks )
+ return 0;
+ kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
+ KMP_CPU_SET_ITERATE(i, mask) {
+ if ((! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
+ (!KMP_CPU_ISSET(i, mask))) {
+ continue;
+ }
+ ++retval;
+ }
+ return retval;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_GET_PLACE_PROC_IDS( int place_num, int *ids )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ // Nothing.
+ #else
+ int i,j;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ if ( place_num < 0 || place_num >= (int)__kmp_affinity_num_masks )
+ return;
+ kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
+ j = 0;
+ KMP_CPU_SET_ITERATE(i, mask) {
+ if ((! KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
+ (!KMP_CPU_ISSET(i, mask))) {
+ continue;
+ }
+ ids[j++] = i;
+ }
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_PLACE_NUM( void )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return -1;
+ #else
+ int gtid;
+ kmp_info_t *thread;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ gtid = __kmp_entry_gtid();
+ thread = __kmp_thread_from_gtid(gtid);
+ if ( thread->th.th_current_place < 0 )
+ return -1;
+ return thread->th.th_current_place;
+ #endif
+}
+
+int FTN_STDCALL
+FTN_GET_PARTITION_NUM_PLACES( void )
+{
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ return 0;
+ #else
+ int gtid, num_places, first_place, last_place;
+ kmp_info_t *thread;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ gtid = __kmp_entry_gtid();
+ thread = __kmp_thread_from_gtid(gtid);
+ first_place = thread->th.th_first_place;
+ last_place = thread->th.th_last_place;
+ if ( first_place < 0 || last_place < 0 )
+ return 0;
+ if ( first_place <= last_place )
+ num_places = last_place - first_place + 1;
+ else
+ num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
+ return num_places;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_GET_PARTITION_PLACE_NUMS( int *place_nums ) {
+ #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
+ // Nothing.
+ #else
+ int i, gtid, place_num, first_place, last_place, start, end;
+ kmp_info_t *thread;
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ __kmp_middle_initialize();
+ }
+ gtid = __kmp_entry_gtid();
+ thread = __kmp_thread_from_gtid(gtid);
+ first_place = thread->th.th_first_place;
+ last_place = thread->th.th_last_place;
+ if ( first_place < 0 || last_place < 0 )
+ return;
+ if ( first_place <= last_place ) {
+ start = first_place;
+ end = last_place;
+ } else {
+ start = last_place;
+ end = first_place;
+ }
+ for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
+ place_nums[i] = place_num;
+ }
+ #endif
+}
+#endif
+
+int FTN_STDCALL
+xexpand(FTN_GET_NUM_TEAMS)( void )
+{
+ #ifdef KMP_STUB
+ return 1;
+ #else
+ kmp_info_t *thr = __kmp_entry_thread();
+ if ( thr->th.th_teams_microtask ) {
+ kmp_team_t *team = thr->th.th_team;
+ int tlevel = thr->th.th_teams_level;
+ int ii = team->t.t_level; // the level of the teams construct
+ int dd = team -> t.t_serialized;
+ int level = tlevel + 1;
+ KMP_DEBUG_ASSERT( ii >= tlevel );
+ while( ii > level )
+ {
+ for( dd = team -> t.t_serialized; ( dd > 0 ) && ( ii > level ); dd--, ii-- )
+ {
+ }
+ if( team -> t.t_serialized && ( !dd ) ) {
+ team = team->t.t_parent;
+ continue;
+ }
+ if( ii > level ) {
+ team = team->t.t_parent;
+ ii--;
+ }
+ }
+ if ( dd > 1 ) {
+ return 1; // teams region is serialized ( 1 team of 1 thread ).
+ } else {
+ return team->t.t_parent->t.t_nproc;
+ }
+ } else {
+ return 1;
+ }
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_GET_TEAM_NUM)( void )
+{
+ #ifdef KMP_STUB
+ return 0;
+ #else
+ kmp_info_t *thr = __kmp_entry_thread();
+ if ( thr->th.th_teams_microtask ) {
+ kmp_team_t *team = thr->th.th_team;
+ int tlevel = thr->th.th_teams_level; // the level of the teams construct
+ int ii = team->t.t_level;
+ int dd = team -> t.t_serialized;
+ int level = tlevel + 1;
+ KMP_DEBUG_ASSERT( ii >= tlevel );
+ while( ii > level )
+ {
+ for( dd = team -> t.t_serialized; ( dd > 0 ) && ( ii > level ); dd--, ii-- )
+ {
+ }
+ if( team -> t.t_serialized && ( !dd ) ) {
+ team = team->t.t_parent;
+ continue;
+ }
+ if( ii > level ) {
+ team = team->t.t_parent;
+ ii--;
+ }
+ }
+ if ( dd > 1 ) {
+ return 0; // teams region is serialized ( 1 team of 1 thread ).
+ } else {
+ return team->t.t_master_tid;
+ }
+ } else {
+ return 0;
+ }
+ #endif
+}
+
+#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+
+int FTN_STDCALL
+FTN_GET_DEFAULT_DEVICE( void )
+{
+ return 0;
+}
+
+void FTN_STDCALL
+FTN_SET_DEFAULT_DEVICE( int KMP_DEREF arg )
+{
+}
+
+int FTN_STDCALL
+FTN_GET_NUM_DEVICES( void )
+{
+ return 0;
+}
+
+#endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+
+#if ! KMP_OS_LINUX
+
+int FTN_STDCALL
+xexpand(FTN_IS_INITIAL_DEVICE)( void )
+{
+ return 1;
+}
+
+#else
+
+// This internal function is used when the entry from the offload library
+// is not found.
+int _Offload_get_device_number( void ) __attribute__((weak));
+
+int FTN_STDCALL
+xexpand(FTN_IS_INITIAL_DEVICE)( void )
+{
+ if( _Offload_get_device_number ) {
+ return _Offload_get_device_number() == -1;
+ } else {
+ return 1;
+ }
+}
+
+#endif // ! KMP_OS_LINUX
+
+#endif // OMP_40_ENABLED
+
+#if OMP_45_ENABLED && defined(KMP_STUB)
+// OpenMP 4.5 entries for stubs library
+
+int FTN_STDCALL
+FTN_GET_INITIAL_DEVICE(void)
+{
+ return -1;
+}
+
+// As all *target* functions are C-only parameters always passed by value
+void * FTN_STDCALL
+FTN_TARGET_ALLOC(size_t size, int device_num)
+{
+ return 0;
+}
+
+void FTN_STDCALL
+FTN_TARGET_FREE(void * device_ptr, int device_num)
+{
+}
+
+int FTN_STDCALL
+FTN_TARGET_IS_PRESENT(void * ptr, int device_num)
+{
+ return 0;
+}
+
+int FTN_STDCALL
+FTN_TARGET_MEMCPY(void *dst, void *src, size_t length, size_t dst_offset,
+ size_t src_offset, int dst_device, int src_device)
+{
+ return -1;
+}
+
+int FTN_STDCALL
+FTN_TARGET_MEMCPY_RECT(void *dst, void *src, size_t element_size, int num_dims,
+ const size_t *volume, const size_t *dst_offsets,
+ const size_t *src_offsets, const size_t *dst_dimensions,
+ const size_t *src_dimensions, int dst_device, int src_device)
+{
+ return -1;
+}
+
+int FTN_STDCALL
+FTN_TARGET_ASSOCIATE_PTR(void *host_ptr, void *device_ptr, size_t size,
+ size_t device_offset, int device_num)
+{
+ return -1;
+}
+
+int FTN_STDCALL
+FTN_TARGET_DISASSOCIATE_PTR(void *host_ptr, int device_num)
+{
+ return -1;
+}
+#endif // OMP_45_ENABLED && defined(KMP_STUB)
+
+#ifdef KMP_STUB
+typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
+#endif /* KMP_STUB */
+
+#if KMP_USE_DYNAMIC_LOCK
+void FTN_STDCALL
+FTN_INIT_LOCK_WITH_HINT( void **user_lock, uintptr_t KMP_DEREF hint )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
+ #else
+ __kmpc_init_lock_with_hint( NULL, __kmp_entry_gtid(), user_lock, KMP_DEREF hint );
+ #endif
+}
+
+void FTN_STDCALL
+FTN_INIT_NEST_LOCK_WITH_HINT( void **user_lock, uintptr_t KMP_DEREF hint )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
+ #else
+ __kmpc_init_nest_lock_with_hint( NULL, __kmp_entry_gtid(), user_lock, KMP_DEREF hint );
+ #endif
+}
+#endif
+
+/* initialize the lock */
+void FTN_STDCALL
+xexpand(FTN_INIT_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
+ #else
+ __kmpc_init_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+/* initialize the lock */
+void FTN_STDCALL
+xexpand(FTN_INIT_NEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
+ #else
+ __kmpc_init_nest_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_DESTROY_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNINIT;
+ #else
+ __kmpc_destroy_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_DESTROY_NEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ *((kmp_stub_lock_t *)user_lock) = UNINIT;
+ #else
+ __kmpc_destroy_nest_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ if ( *((kmp_stub_lock_t *)user_lock) != UNLOCKED ) {
+ // TODO: Issue an error.
+ }; // if
+ *((kmp_stub_lock_t *)user_lock) = LOCKED;
+ #else
+ __kmpc_set_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_SET_NEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ (*((int *)user_lock))++;
+ #else
+ __kmpc_set_nest_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_UNSET_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ if ( *((kmp_stub_lock_t *)user_lock) == UNLOCKED ) {
+ // TODO: Issue an error.
+ }; // if
+ *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
+ #else
+ __kmpc_unset_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+void FTN_STDCALL
+xexpand(FTN_UNSET_NEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ if ( *((kmp_stub_lock_t *)user_lock) == UNLOCKED ) {
+ // TODO: Issue an error.
+ }; // if
+ (*((int *)user_lock))--;
+ #else
+ __kmpc_unset_nest_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_TEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ if ( *((kmp_stub_lock_t *)user_lock) == LOCKED ) {
+ return 0;
+ }; // if
+ *((kmp_stub_lock_t *)user_lock) = LOCKED;
+ return 1;
+ #else
+ return __kmpc_test_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+int FTN_STDCALL
+xexpand(FTN_TEST_NEST_LOCK)( void **user_lock )
+{
+ #ifdef KMP_STUB
+ if ( *((kmp_stub_lock_t *)user_lock) == UNINIT ) {
+ // TODO: Issue an error.
+ }; // if
+ return ++(*((int *)user_lock));
+ #else
+ return __kmpc_test_nest_lock( NULL, __kmp_entry_gtid(), user_lock );
+ #endif
+}
+
+double FTN_STDCALL
+xexpand(FTN_GET_WTIME)( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_wtime();
+ #else
+ double data;
+ #if ! KMP_OS_LINUX
+ // We don't need library initialization to get the time on Linux* OS.
+ // The routine can be used to measure library initialization time on Linux* OS now.
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ #endif
+ __kmp_elapsed( & data );
+ return data;
+ #endif
+}
+
+double FTN_STDCALL
+xexpand(FTN_GET_WTICK)( void )
+{
+ #ifdef KMP_STUB
+ return __kmps_get_wtick();
+ #else
+ double data;
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ __kmp_elapsed_tick( & data );
+ return data;
+ #endif
+}
+
+/* ------------------------------------------------------------------------ */
+
+void * FTN_STDCALL
+FTN_MALLOC( size_t KMP_DEREF size )
+{
+ // kmpc_malloc initializes the library if needed
+ return kmpc_malloc( KMP_DEREF size );
+}
+
+void * FTN_STDCALL
+FTN_ALIGNED_MALLOC( size_t KMP_DEREF size, size_t KMP_DEREF alignment )
+{
+ // kmpc_aligned_malloc initializes the library if needed
+ return kmpc_aligned_malloc( KMP_DEREF size, KMP_DEREF alignment );
+}
+
+void * FTN_STDCALL
+FTN_CALLOC( size_t KMP_DEREF nelem, size_t KMP_DEREF elsize )
+{
+ // kmpc_calloc initializes the library if needed
+ return kmpc_calloc( KMP_DEREF nelem, KMP_DEREF elsize );
+}
+
+void * FTN_STDCALL
+FTN_REALLOC( void * KMP_DEREF ptr, size_t KMP_DEREF size )
+{
+ // kmpc_realloc initializes the library if needed
+ return kmpc_realloc( KMP_DEREF ptr, KMP_DEREF size );
+}
+
+void FTN_STDCALL
+FTN_FREE( void * KMP_DEREF ptr )
+{
+ // does nothing if the library is not initialized
+ kmpc_free( KMP_DEREF ptr );
+}
+
+void FTN_STDCALL
+FTN_SET_WARNINGS_ON( void )
+{
+ #ifndef KMP_STUB
+ __kmp_generate_warnings = kmp_warnings_explicit;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_WARNINGS_OFF( void )
+{
+ #ifndef KMP_STUB
+ __kmp_generate_warnings = FALSE;
+ #endif
+}
+
+void FTN_STDCALL
+FTN_SET_DEFAULTS( char const * str
+ #ifndef PASS_ARGS_BY_VALUE
+ , int len
+ #endif
+)
+{
+ #ifndef KMP_STUB
+ #ifdef PASS_ARGS_BY_VALUE
+ int len = (int)KMP_STRLEN( str );
+ #endif
+ __kmp_aux_set_defaults( str, len );
+ #endif
+}
+
+/* ------------------------------------------------------------------------ */
+
+
+#if OMP_40_ENABLED
+/* returns the status of cancellation */
+int FTN_STDCALL
+xexpand(FTN_GET_CANCELLATION)(void) {
+#ifdef KMP_STUB
+ return 0 /* false */;
+#else
+ // initialize the library if needed
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ }
+ return __kmp_omp_cancellation;
+#endif
+}
+
+int FTN_STDCALL
+FTN_GET_CANCELLATION_STATUS(int cancel_kind) {
+#ifdef KMP_STUB
+ return 0 /* false */;
+#else
+ return __kmp_get_cancellation_status(cancel_kind);
+#endif
+}
+
+#endif // OMP_40_ENABLED
+
+#if OMP_45_ENABLED
+/* returns the maximum allowed task priority */
+int FTN_STDCALL
+FTN_GET_MAX_TASK_PRIORITY( void )
+{
+#ifdef KMP_STUB
+ return 0;
+#else
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ }
+ return __kmp_max_task_priority;
+#endif
+}
+#endif
+
+// GCC compatibility (versioned symbols)
+#ifdef KMP_USE_VERSION_SYMBOLS
+
+/*
+ These following sections create function aliases (dummy symbols) for the omp_* routines.
+ These aliases will then be versioned according to how libgomp ``versions'' its
+ symbols (OMP_1.0, OMP_2.0, OMP_3.0, ...) while also retaining the
+ default version which libomp uses: VERSION (defined in exports_so.txt)
+ If you want to see the versioned symbols for libgomp.so.1 then just type:
+
+ objdump -T /path/to/libgomp.so.1 | grep omp_
+
+ Example:
+ Step 1) Create __kmp_api_omp_set_num_threads_10_alias
+ which is alias of __kmp_api_omp_set_num_threads
+ Step 2) Set __kmp_api_omp_set_num_threads_10_alias to version: omp_set_num_threads@OMP_1.0
+ Step 2B) Set __kmp_api_omp_set_num_threads to default version : omp_set_num_threads@@VERSION
+*/
+
+// OMP_1.0 aliases
+xaliasify(FTN_SET_NUM_THREADS, 10);
+xaliasify(FTN_GET_NUM_THREADS, 10);
+xaliasify(FTN_GET_MAX_THREADS, 10);
+xaliasify(FTN_GET_THREAD_NUM, 10);
+xaliasify(FTN_GET_NUM_PROCS, 10);
+xaliasify(FTN_IN_PARALLEL, 10);
+xaliasify(FTN_SET_DYNAMIC, 10);
+xaliasify(FTN_GET_DYNAMIC, 10);
+xaliasify(FTN_SET_NESTED, 10);
+xaliasify(FTN_GET_NESTED, 10);
+xaliasify(FTN_INIT_LOCK, 10);
+xaliasify(FTN_INIT_NEST_LOCK, 10);
+xaliasify(FTN_DESTROY_LOCK, 10);
+xaliasify(FTN_DESTROY_NEST_LOCK, 10);
+xaliasify(FTN_SET_LOCK, 10);
+xaliasify(FTN_SET_NEST_LOCK, 10);
+xaliasify(FTN_UNSET_LOCK, 10);
+xaliasify(FTN_UNSET_NEST_LOCK, 10);
+xaliasify(FTN_TEST_LOCK, 10);
+xaliasify(FTN_TEST_NEST_LOCK, 10);
+
+// OMP_2.0 aliases
+xaliasify(FTN_GET_WTICK, 20);
+xaliasify(FTN_GET_WTIME, 20);
+
+// OMP_3.0 aliases
+xaliasify(FTN_SET_SCHEDULE, 30);
+xaliasify(FTN_GET_SCHEDULE, 30);
+xaliasify(FTN_GET_THREAD_LIMIT, 30);
+xaliasify(FTN_SET_MAX_ACTIVE_LEVELS, 30);
+xaliasify(FTN_GET_MAX_ACTIVE_LEVELS, 30);
+xaliasify(FTN_GET_LEVEL, 30);
+xaliasify(FTN_GET_ANCESTOR_THREAD_NUM, 30);
+xaliasify(FTN_GET_TEAM_SIZE, 30);
+xaliasify(FTN_GET_ACTIVE_LEVEL, 30);
+xaliasify(FTN_INIT_LOCK, 30);
+xaliasify(FTN_INIT_NEST_LOCK, 30);
+xaliasify(FTN_DESTROY_LOCK, 30);
+xaliasify(FTN_DESTROY_NEST_LOCK, 30);
+xaliasify(FTN_SET_LOCK, 30);
+xaliasify(FTN_SET_NEST_LOCK, 30);
+xaliasify(FTN_UNSET_LOCK, 30);
+xaliasify(FTN_UNSET_NEST_LOCK, 30);
+xaliasify(FTN_TEST_LOCK, 30);
+xaliasify(FTN_TEST_NEST_LOCK, 30);
+
+// OMP_3.1 aliases
+xaliasify(FTN_IN_FINAL, 31);
+
+#if OMP_40_ENABLED
+// OMP_4.0 aliases
+xaliasify(FTN_GET_PROC_BIND, 40);
+xaliasify(FTN_GET_NUM_TEAMS, 40);
+xaliasify(FTN_GET_TEAM_NUM, 40);
+xaliasify(FTN_GET_CANCELLATION, 40);
+xaliasify(FTN_IS_INITIAL_DEVICE, 40);
+#endif /* OMP_40_ENABLED */
+
+#if OMP_45_ENABLED
+// OMP_4.5 aliases
+#endif
+
+#if OMP_50_ENABLED
+// OMP_5.0 aliases
+#endif
+
+// OMP_1.0 versioned symbols
+xversionify(FTN_SET_NUM_THREADS, 10, "OMP_1.0");
+xversionify(FTN_GET_NUM_THREADS, 10, "OMP_1.0");
+xversionify(FTN_GET_MAX_THREADS, 10, "OMP_1.0");
+xversionify(FTN_GET_THREAD_NUM, 10, "OMP_1.0");
+xversionify(FTN_GET_NUM_PROCS, 10, "OMP_1.0");
+xversionify(FTN_IN_PARALLEL, 10, "OMP_1.0");
+xversionify(FTN_SET_DYNAMIC, 10, "OMP_1.0");
+xversionify(FTN_GET_DYNAMIC, 10, "OMP_1.0");
+xversionify(FTN_SET_NESTED, 10, "OMP_1.0");
+xversionify(FTN_GET_NESTED, 10, "OMP_1.0");
+xversionify(FTN_INIT_LOCK, 10, "OMP_1.0");
+xversionify(FTN_INIT_NEST_LOCK, 10, "OMP_1.0");
+xversionify(FTN_DESTROY_LOCK, 10, "OMP_1.0");
+xversionify(FTN_DESTROY_NEST_LOCK, 10, "OMP_1.0");
+xversionify(FTN_SET_LOCK, 10, "OMP_1.0");
+xversionify(FTN_SET_NEST_LOCK, 10, "OMP_1.0");
+xversionify(FTN_UNSET_LOCK, 10, "OMP_1.0");
+xversionify(FTN_UNSET_NEST_LOCK, 10, "OMP_1.0");
+xversionify(FTN_TEST_LOCK, 10, "OMP_1.0");
+xversionify(FTN_TEST_NEST_LOCK, 10, "OMP_1.0");
+
+// OMP_2.0 versioned symbols
+xversionify(FTN_GET_WTICK, 20, "OMP_2.0");
+xversionify(FTN_GET_WTIME, 20, "OMP_2.0");
+
+// OMP_3.0 versioned symbols
+xversionify(FTN_SET_SCHEDULE, 30, "OMP_3.0");
+xversionify(FTN_GET_SCHEDULE, 30, "OMP_3.0");
+xversionify(FTN_GET_THREAD_LIMIT, 30, "OMP_3.0");
+xversionify(FTN_SET_MAX_ACTIVE_LEVELS, 30, "OMP_3.0");
+xversionify(FTN_GET_MAX_ACTIVE_LEVELS, 30, "OMP_3.0");
+xversionify(FTN_GET_ANCESTOR_THREAD_NUM, 30, "OMP_3.0");
+xversionify(FTN_GET_LEVEL, 30, "OMP_3.0");
+xversionify(FTN_GET_TEAM_SIZE, 30, "OMP_3.0");
+xversionify(FTN_GET_ACTIVE_LEVEL, 30, "OMP_3.0");
+
+// the lock routines have a 1.0 and 3.0 version
+xversionify(FTN_INIT_LOCK, 30, "OMP_3.0");
+xversionify(FTN_INIT_NEST_LOCK, 30, "OMP_3.0");
+xversionify(FTN_DESTROY_LOCK, 30, "OMP_3.0");
+xversionify(FTN_DESTROY_NEST_LOCK, 30, "OMP_3.0");
+xversionify(FTN_SET_LOCK, 30, "OMP_3.0");
+xversionify(FTN_SET_NEST_LOCK, 30, "OMP_3.0");
+xversionify(FTN_UNSET_LOCK, 30, "OMP_3.0");
+xversionify(FTN_UNSET_NEST_LOCK, 30, "OMP_3.0");
+xversionify(FTN_TEST_LOCK, 30, "OMP_3.0");
+xversionify(FTN_TEST_NEST_LOCK, 30, "OMP_3.0");
+
+// OMP_3.1 versioned symbol
+xversionify(FTN_IN_FINAL, 31, "OMP_3.1");
+
+#if OMP_40_ENABLED
+// OMP_4.0 versioned symbols
+xversionify(FTN_GET_PROC_BIND, 40, "OMP_4.0");
+xversionify(FTN_GET_NUM_TEAMS, 40, "OMP_4.0");
+xversionify(FTN_GET_TEAM_NUM, 40, "OMP_4.0");
+xversionify(FTN_GET_CANCELLATION, 40, "OMP_4.0");
+xversionify(FTN_IS_INITIAL_DEVICE, 40, "OMP_4.0");
+#endif /* OMP_40_ENABLED */
+
+#if OMP_45_ENABLED
+// OMP_4.5 versioned symbols
+#endif
+
+#if OMP_50_ENABLED
+// OMP_5.0 versioned symbols
+#endif
+
+#endif // KMP_USE_VERSION_SYMBOLS
+
+#ifdef __cplusplus
+ } //extern "C"
+#endif // __cplusplus
+
+// end of file //
diff --git a/final/runtime/src/kmp_ftn_extra.c b/final/runtime/src/kmp_ftn_extra.c
new file mode 100644
index 0000000..1d0fb4c
--- /dev/null
+++ b/final/runtime/src/kmp_ftn_extra.c
@@ -0,0 +1,33 @@
+/*
+ * kmp_ftn_extra.c -- Fortran 'extra' linkage support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+
+#if KMP_OS_WINDOWS
+# define KMP_FTN_ENTRIES KMP_FTN_PLAIN
+#elif KMP_OS_UNIX
+# define KMP_FTN_ENTRIES KMP_FTN_APPEND
+#endif
+
+// Note: This string is not printed when KMP_VERSION=1.
+char const __kmp_version_ftnextra[] = KMP_VERSION_PREFIX "Fortran \"extra\" OMP support: "
+#ifdef KMP_FTN_ENTRIES
+ "yes";
+# define FTN_STDCALL /* nothing to do */
+# include "kmp_ftn_os.h"
+# include "kmp_ftn_entry.h"
+#else
+ "no";
+#endif /* KMP_FTN_ENTRIES */
diff --git a/final/runtime/src/kmp_ftn_os.h b/final/runtime/src/kmp_ftn_os.h
new file mode 100644
index 0000000..44fb7c9
--- /dev/null
+++ b/final/runtime/src/kmp_ftn_os.h
@@ -0,0 +1,620 @@
+/*
+ * kmp_ftn_os.h -- KPTS Fortran defines header file.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_FTN_OS_H
+#define KMP_FTN_OS_H
+
+// KMP_FNT_ENTRIES may be one of: KMP_FTN_PLAIN, KMP_FTN_UPPER, KMP_FTN_APPEND, KMP_FTN_UAPPEND.
+
+
+/* -------------------------- External definitions ------------------------ */
+
+#if KMP_FTN_ENTRIES == KMP_FTN_PLAIN
+
+ #define FTN_SET_STACKSIZE kmp_set_stacksize
+ #define FTN_SET_STACKSIZE_S kmp_set_stacksize_s
+ #define FTN_GET_STACKSIZE kmp_get_stacksize
+ #define FTN_GET_STACKSIZE_S kmp_get_stacksize_s
+ #define FTN_SET_BLOCKTIME kmp_set_blocktime
+ #define FTN_GET_BLOCKTIME kmp_get_blocktime
+ #define FTN_SET_LIBRARY_SERIAL kmp_set_library_serial
+ #define FTN_SET_LIBRARY_TURNAROUND kmp_set_library_turnaround
+ #define FTN_SET_LIBRARY_THROUGHPUT kmp_set_library_throughput
+ #define FTN_SET_LIBRARY kmp_set_library
+ #define FTN_GET_LIBRARY kmp_get_library
+ #define FTN_SET_DEFAULTS kmp_set_defaults
+ #define FTN_SET_DISP_NUM_BUFFERS kmp_set_disp_num_buffers
+ #define FTN_SET_AFFINITY kmp_set_affinity
+ #define FTN_GET_AFFINITY kmp_get_affinity
+ #define FTN_GET_AFFINITY_MAX_PROC kmp_get_affinity_max_proc
+ #define FTN_CREATE_AFFINITY_MASK kmp_create_affinity_mask
+ #define FTN_DESTROY_AFFINITY_MASK kmp_destroy_affinity_mask
+ #define FTN_SET_AFFINITY_MASK_PROC kmp_set_affinity_mask_proc
+ #define FTN_UNSET_AFFINITY_MASK_PROC kmp_unset_affinity_mask_proc
+ #define FTN_GET_AFFINITY_MASK_PROC kmp_get_affinity_mask_proc
+
+ #define FTN_MALLOC kmp_malloc
+ #define FTN_ALIGNED_MALLOC kmp_aligned_malloc
+ #define FTN_CALLOC kmp_calloc
+ #define FTN_REALLOC kmp_realloc
+ #define FTN_FREE kmp_free
+
+ #define FTN_GET_NUM_KNOWN_THREADS kmp_get_num_known_threads
+
+ #define FTN_SET_NUM_THREADS omp_set_num_threads
+ #define FTN_GET_NUM_THREADS omp_get_num_threads
+ #define FTN_GET_MAX_THREADS omp_get_max_threads
+ #define FTN_GET_THREAD_NUM omp_get_thread_num
+ #define FTN_GET_NUM_PROCS omp_get_num_procs
+ #define FTN_SET_DYNAMIC omp_set_dynamic
+ #define FTN_GET_DYNAMIC omp_get_dynamic
+ #define FTN_SET_NESTED omp_set_nested
+ #define FTN_GET_NESTED omp_get_nested
+ #define FTN_IN_PARALLEL omp_in_parallel
+ #define FTN_GET_THREAD_LIMIT omp_get_thread_limit
+ #define FTN_SET_SCHEDULE omp_set_schedule
+ #define FTN_GET_SCHEDULE omp_get_schedule
+ #define FTN_SET_MAX_ACTIVE_LEVELS omp_set_max_active_levels
+ #define FTN_GET_MAX_ACTIVE_LEVELS omp_get_max_active_levels
+ #define FTN_GET_ACTIVE_LEVEL omp_get_active_level
+ #define FTN_GET_LEVEL omp_get_level
+ #define FTN_GET_ANCESTOR_THREAD_NUM omp_get_ancestor_thread_num
+ #define FTN_GET_TEAM_SIZE omp_get_team_size
+ #define FTN_IN_FINAL omp_in_final
+// #define FTN_SET_PROC_BIND omp_set_proc_bind
+ #define FTN_GET_PROC_BIND omp_get_proc_bind
+// #define FTN_CURR_PROC_BIND omp_curr_proc_bind
+#if OMP_40_ENABLED
+ #define FTN_GET_NUM_TEAMS omp_get_num_teams
+ #define FTN_GET_TEAM_NUM omp_get_team_num
+#endif
+ #define FTN_INIT_LOCK omp_init_lock
+#if KMP_USE_DYNAMIC_LOCK
+ #define FTN_INIT_LOCK_WITH_HINT omp_init_lock_with_hint
+ #define FTN_INIT_NEST_LOCK_WITH_HINT omp_init_nest_lock_with_hint
+#endif
+ #define FTN_DESTROY_LOCK omp_destroy_lock
+ #define FTN_SET_LOCK omp_set_lock
+ #define FTN_UNSET_LOCK omp_unset_lock
+ #define FTN_TEST_LOCK omp_test_lock
+ #define FTN_INIT_NEST_LOCK omp_init_nest_lock
+ #define FTN_DESTROY_NEST_LOCK omp_destroy_nest_lock
+ #define FTN_SET_NEST_LOCK omp_set_nest_lock
+ #define FTN_UNSET_NEST_LOCK omp_unset_nest_lock
+ #define FTN_TEST_NEST_LOCK omp_test_nest_lock
+
+ #define FTN_SET_WARNINGS_ON kmp_set_warnings_on
+ #define FTN_SET_WARNINGS_OFF kmp_set_warnings_off
+
+ #define FTN_GET_WTIME omp_get_wtime
+ #define FTN_GET_WTICK omp_get_wtick
+
+#if OMP_40_ENABLED
+#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+ #define FTN_GET_DEFAULT_DEVICE omp_get_default_device
+ #define FTN_SET_DEFAULT_DEVICE omp_set_default_device
+ #define FTN_GET_NUM_DEVICES omp_get_num_devices
+#endif
+ #define FTN_IS_INITIAL_DEVICE omp_is_initial_device
+#endif
+
+#if OMP_40_ENABLED
+ #define FTN_GET_CANCELLATION omp_get_cancellation
+ #define FTN_GET_CANCELLATION_STATUS kmp_get_cancellation_status
+#endif
+
+#if OMP_45_ENABLED
+ #define FTN_GET_MAX_TASK_PRIORITY omp_get_max_task_priority
+ #define FTN_GET_NUM_PLACES omp_get_num_places
+ #define FTN_GET_PLACE_NUM_PROCS omp_get_place_num_procs
+ #define FTN_GET_PLACE_PROC_IDS omp_get_place_proc_ids
+ #define FTN_GET_PLACE_NUM omp_get_place_num
+ #define FTN_GET_PARTITION_NUM_PLACES omp_get_partition_num_places
+ #define FTN_GET_PARTITION_PLACE_NUMS omp_get_partition_place_nums
+# ifdef KMP_STUB
+ #define FTN_GET_INITIAL_DEVICE omp_get_initial_device
+ #define FTN_TARGET_ALLOC omp_target_alloc
+ #define FTN_TARGET_FREE omp_target_free
+ #define FTN_TARGET_IS_PRESENT omp_target_is_present
+ #define FTN_TARGET_MEMCPY omp_target_memcpy
+ #define FTN_TARGET_MEMCPY_RECT omp_target_memcpy_rect
+ #define FTN_TARGET_ASSOCIATE_PTR omp_target_associate_ptr
+ #define FTN_TARGET_DISASSOCIATE_PTR omp_target_disassociate_ptr
+# endif
+#endif
+
+#endif /* KMP_FTN_PLAIN */
+
+/* ------------------------------------------------------------------------ */
+
+#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
+
+ #define FTN_SET_STACKSIZE kmp_set_stacksize_
+ #define FTN_SET_STACKSIZE_S kmp_set_stacksize_s_
+ #define FTN_GET_STACKSIZE kmp_get_stacksize_
+ #define FTN_GET_STACKSIZE_S kmp_get_stacksize_s_
+ #define FTN_SET_BLOCKTIME kmp_set_blocktime_
+ #define FTN_GET_BLOCKTIME kmp_get_blocktime_
+ #define FTN_SET_LIBRARY_SERIAL kmp_set_library_serial_
+ #define FTN_SET_LIBRARY_TURNAROUND kmp_set_library_turnaround_
+ #define FTN_SET_LIBRARY_THROUGHPUT kmp_set_library_throughput_
+ #define FTN_SET_LIBRARY kmp_set_library_
+ #define FTN_GET_LIBRARY kmp_get_library_
+ #define FTN_SET_DEFAULTS kmp_set_defaults_
+ #define FTN_SET_DISP_NUM_BUFFERS kmp_set_disp_num_buffers_
+ #define FTN_SET_AFFINITY kmp_set_affinity_
+ #define FTN_GET_AFFINITY kmp_get_affinity_
+ #define FTN_GET_AFFINITY_MAX_PROC kmp_get_affinity_max_proc_
+ #define FTN_CREATE_AFFINITY_MASK kmp_create_affinity_mask_
+ #define FTN_DESTROY_AFFINITY_MASK kmp_destroy_affinity_mask_
+ #define FTN_SET_AFFINITY_MASK_PROC kmp_set_affinity_mask_proc_
+ #define FTN_UNSET_AFFINITY_MASK_PROC kmp_unset_affinity_mask_proc_
+ #define FTN_GET_AFFINITY_MASK_PROC kmp_get_affinity_mask_proc_
+
+ #define FTN_MALLOC kmp_malloc_
+ #define FTN_ALIGNED_MALLOC kmp_aligned_malloc_
+ #define FTN_CALLOC kmp_calloc_
+ #define FTN_REALLOC kmp_realloc_
+ #define FTN_FREE kmp_free_
+
+ #define FTN_GET_NUM_KNOWN_THREADS kmp_get_num_known_threads_
+
+ #define FTN_SET_NUM_THREADS omp_set_num_threads_
+ #define FTN_GET_NUM_THREADS omp_get_num_threads_
+ #define FTN_GET_MAX_THREADS omp_get_max_threads_
+ #define FTN_GET_THREAD_NUM omp_get_thread_num_
+ #define FTN_GET_NUM_PROCS omp_get_num_procs_
+ #define FTN_SET_DYNAMIC omp_set_dynamic_
+ #define FTN_GET_DYNAMIC omp_get_dynamic_
+ #define FTN_SET_NESTED omp_set_nested_
+ #define FTN_GET_NESTED omp_get_nested_
+ #define FTN_IN_PARALLEL omp_in_parallel_
+ #define FTN_GET_THREAD_LIMIT omp_get_thread_limit_
+ #define FTN_SET_SCHEDULE omp_set_schedule_
+ #define FTN_GET_SCHEDULE omp_get_schedule_
+ #define FTN_SET_MAX_ACTIVE_LEVELS omp_set_max_active_levels_
+ #define FTN_GET_MAX_ACTIVE_LEVELS omp_get_max_active_levels_
+ #define FTN_GET_ACTIVE_LEVEL omp_get_active_level_
+ #define FTN_GET_LEVEL omp_get_level_
+ #define FTN_GET_ANCESTOR_THREAD_NUM omp_get_ancestor_thread_num_
+ #define FTN_GET_TEAM_SIZE omp_get_team_size_
+ #define FTN_IN_FINAL omp_in_final_
+// #define FTN_SET_PROC_BIND omp_set_proc_bind_
+ #define FTN_GET_PROC_BIND omp_get_proc_bind_
+// #define FTN_CURR_PROC_BIND omp_curr_proc_bind_
+#if OMP_40_ENABLED
+ #define FTN_GET_NUM_TEAMS omp_get_num_teams_
+ #define FTN_GET_TEAM_NUM omp_get_team_num_
+#endif
+ #define FTN_INIT_LOCK omp_init_lock_
+#if KMP_USE_DYNAMIC_LOCK
+ #define FTN_INIT_LOCK_WITH_HINT omp_init_lock_with_hint_
+ #define FTN_INIT_NEST_LOCK_WITH_HINT omp_init_nest_lock_with_hint_
+#endif
+ #define FTN_DESTROY_LOCK omp_destroy_lock_
+ #define FTN_SET_LOCK omp_set_lock_
+ #define FTN_UNSET_LOCK omp_unset_lock_
+ #define FTN_TEST_LOCK omp_test_lock_
+ #define FTN_INIT_NEST_LOCK omp_init_nest_lock_
+ #define FTN_DESTROY_NEST_LOCK omp_destroy_nest_lock_
+ #define FTN_SET_NEST_LOCK omp_set_nest_lock_
+ #define FTN_UNSET_NEST_LOCK omp_unset_nest_lock_
+ #define FTN_TEST_NEST_LOCK omp_test_nest_lock_
+
+ #define FTN_SET_WARNINGS_ON kmp_set_warnings_on_
+ #define FTN_SET_WARNINGS_OFF kmp_set_warnings_off_
+
+ #define FTN_GET_WTIME omp_get_wtime_
+ #define FTN_GET_WTICK omp_get_wtick_
+
+#if OMP_40_ENABLED
+#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+ #define FTN_GET_DEFAULT_DEVICE omp_get_default_device_
+ #define FTN_SET_DEFAULT_DEVICE omp_set_default_device_
+ #define FTN_GET_NUM_DEVICES omp_get_num_devices_
+#endif
+ #define FTN_IS_INITIAL_DEVICE omp_is_initial_device_
+#endif
+
+
+#if OMP_40_ENABLED
+ #define FTN_GET_CANCELLATION omp_get_cancellation_
+ #define FTN_GET_CANCELLATION_STATUS kmp_get_cancellation_status_
+#endif
+
+#if OMP_45_ENABLED
+ #define FTN_GET_MAX_TASK_PRIORITY omp_get_max_task_priority_
+ #define FTN_GET_NUM_PLACES omp_get_num_places_
+ #define FTN_GET_PLACE_NUM_PROCS omp_get_place_num_procs_
+ #define FTN_GET_PLACE_PROC_IDS omp_get_place_proc_ids_
+ #define FTN_GET_PLACE_NUM omp_get_place_num_
+ #define FTN_GET_PARTITION_NUM_PLACES omp_get_partition_num_places_
+ #define FTN_GET_PARTITION_PLACE_NUMS omp_get_partition_place_nums_
+# ifdef KMP_STUB
+ #define FTN_GET_INITIAL_DEVICE omp_get_initial_device_
+ #define FTN_TARGET_ALLOC omp_target_alloc_
+ #define FTN_TARGET_FREE omp_target_free_
+ #define FTN_TARGET_IS_PRESENT omp_target_is_present_
+ #define FTN_TARGET_MEMCPY omp_target_memcpy_
+ #define FTN_TARGET_MEMCPY_RECT omp_target_memcpy_rect_
+ #define FTN_TARGET_ASSOCIATE_PTR omp_target_associate_ptr_
+ #define FTN_TARGET_DISASSOCIATE_PTR omp_target_disassociate_ptr_
+# endif
+#endif
+
+#endif /* KMP_FTN_APPEND */
+
+/* ------------------------------------------------------------------------ */
+
+#if KMP_FTN_ENTRIES == KMP_FTN_UPPER
+
+ #define FTN_SET_STACKSIZE KMP_SET_STACKSIZE
+ #define FTN_SET_STACKSIZE_S KMP_SET_STACKSIZE_S
+ #define FTN_GET_STACKSIZE KMP_GET_STACKSIZE
+ #define FTN_GET_STACKSIZE_S KMP_GET_STACKSIZE_S
+ #define FTN_SET_BLOCKTIME KMP_SET_BLOCKTIME
+ #define FTN_GET_BLOCKTIME KMP_GET_BLOCKTIME
+ #define FTN_SET_LIBRARY_SERIAL KMP_SET_LIBRARY_SERIAL
+ #define FTN_SET_LIBRARY_TURNAROUND KMP_SET_LIBRARY_TURNAROUND
+ #define FTN_SET_LIBRARY_THROUGHPUT KMP_SET_LIBRARY_THROUGHPUT
+ #define FTN_SET_LIBRARY KMP_SET_LIBRARY
+ #define FTN_GET_LIBRARY KMP_GET_LIBRARY
+ #define FTN_SET_DEFAULTS KMP_SET_DEFAULTS
+ #define FTN_SET_DISP_NUM_BUFFERS KMP_SET_DISP_NUM_BUFFERS
+ #define FTN_SET_AFFINITY KMP_SET_AFFINITY
+ #define FTN_GET_AFFINITY KMP_GET_AFFINITY
+ #define FTN_GET_AFFINITY_MAX_PROC KMP_GET_AFFINITY_MAX_PROC
+ #define FTN_CREATE_AFFINITY_MASK KMP_CREATE_AFFINITY_MASK
+ #define FTN_DESTROY_AFFINITY_MASK KMP_DESTROY_AFFINITY_MASK
+ #define FTN_SET_AFFINITY_MASK_PROC KMP_SET_AFFINITY_MASK_PROC
+ #define FTN_UNSET_AFFINITY_MASK_PROC KMP_UNSET_AFFINITY_MASK_PROC
+ #define FTN_GET_AFFINITY_MASK_PROC KMP_GET_AFFINITY_MASK_PROC
+
+ #define FTN_MALLOC KMP_MALLOC
+ #define FTN_ALIGNED_MALLOC KMP_ALIGNED_MALLOC
+ #define FTN_CALLOC KMP_CALLOC
+ #define FTN_REALLOC KMP_REALLOC
+ #define FTN_FREE KMP_FREE
+
+ #define FTN_GET_NUM_KNOWN_THREADS KMP_GET_NUM_KNOWN_THREADS
+
+ #define FTN_SET_NUM_THREADS OMP_SET_NUM_THREADS
+ #define FTN_GET_NUM_THREADS OMP_GET_NUM_THREADS
+ #define FTN_GET_MAX_THREADS OMP_GET_MAX_THREADS
+ #define FTN_GET_THREAD_NUM OMP_GET_THREAD_NUM
+ #define FTN_GET_NUM_PROCS OMP_GET_NUM_PROCS
+ #define FTN_SET_DYNAMIC OMP_SET_DYNAMIC
+ #define FTN_GET_DYNAMIC OMP_GET_DYNAMIC
+ #define FTN_SET_NESTED OMP_SET_NESTED
+ #define FTN_GET_NESTED OMP_GET_NESTED
+ #define FTN_IN_PARALLEL OMP_IN_PARALLEL
+ #define FTN_GET_THREAD_LIMIT OMP_GET_THREAD_LIMIT
+ #define FTN_SET_SCHEDULE OMP_SET_SCHEDULE
+ #define FTN_GET_SCHEDULE OMP_GET_SCHEDULE
+ #define FTN_SET_MAX_ACTIVE_LEVELS OMP_SET_MAX_ACTIVE_LEVELS
+ #define FTN_GET_MAX_ACTIVE_LEVELS OMP_GET_MAX_ACTIVE_LEVELS
+ #define FTN_GET_ACTIVE_LEVEL OMP_GET_ACTIVE_LEVEL
+ #define FTN_GET_LEVEL OMP_GET_LEVEL
+ #define FTN_GET_ANCESTOR_THREAD_NUM OMP_GET_ANCESTOR_THREAD_NUM
+ #define FTN_GET_TEAM_SIZE OMP_GET_TEAM_SIZE
+ #define FTN_IN_FINAL OMP_IN_FINAL
+// #define FTN_SET_PROC_BIND OMP_SET_PROC_BIND
+ #define FTN_GET_PROC_BIND OMP_GET_PROC_BIND
+// #define FTN_CURR_PROC_BIND OMP_CURR_PROC_BIND
+#if OMP_40_ENABLED
+ #define FTN_GET_NUM_TEAMS OMP_GET_NUM_TEAMS
+ #define FTN_GET_TEAM_NUM OMP_GET_TEAM_NUM
+#endif
+ #define FTN_INIT_LOCK OMP_INIT_LOCK
+#if KMP_USE_DYNAMIC_LOCK
+ #define FTN_INIT_LOCK_WITH_HINT OMP_INIT_LOCK_WITH_HINT
+ #define FTN_INIT_NEST_LOCK_WITH_HINT OMP_INIT_NEST_LOCK_WITH_HINT
+#endif
+ #define FTN_DESTROY_LOCK OMP_DESTROY_LOCK
+ #define FTN_SET_LOCK OMP_SET_LOCK
+ #define FTN_UNSET_LOCK OMP_UNSET_LOCK
+ #define FTN_TEST_LOCK OMP_TEST_LOCK
+ #define FTN_INIT_NEST_LOCK OMP_INIT_NEST_LOCK
+ #define FTN_DESTROY_NEST_LOCK OMP_DESTROY_NEST_LOCK
+ #define FTN_SET_NEST_LOCK OMP_SET_NEST_LOCK
+ #define FTN_UNSET_NEST_LOCK OMP_UNSET_NEST_LOCK
+ #define FTN_TEST_NEST_LOCK OMP_TEST_NEST_LOCK
+
+ #define FTN_SET_WARNINGS_ON KMP_SET_WARNINGS_ON
+ #define FTN_SET_WARNINGS_OFF KMP_SET_WARNINGS_OFF
+
+ #define FTN_GET_WTIME OMP_GET_WTIME
+ #define FTN_GET_WTICK OMP_GET_WTICK
+
+#if OMP_40_ENABLED
+#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+ #define FTN_GET_DEFAULT_DEVICE OMP_GET_DEFAULT_DEVICE
+ #define FTN_SET_DEFAULT_DEVICE OMP_SET_DEFAULT_DEVICE
+ #define FTN_GET_NUM_DEVICES OMP_GET_NUM_DEVICES
+#endif
+ #define FTN_IS_INITIAL_DEVICE OMP_IS_INITIAL_DEVICE
+#endif
+
+
+#if OMP_40_ENABLED
+ #define FTN_GET_CANCELLATION OMP_GET_CANCELLATION
+ #define FTN_GET_CANCELLATION_STATUS KMP_GET_CANCELLATION_STATUS
+#endif
+
+#if OMP_45_ENABLED
+ #define FTN_GET_MAX_TASK_PRIORITY OMP_GET_MAX_TASK_PRIORITY
+ #define FTN_GET_NUM_PLACES OMP_GET_NUM_PLACES
+ #define FTN_GET_PLACE_NUM_PROCS OMP_GET_PLACE_NUM_PROCS
+ #define FTN_GET_PLACE_PROC_IDS OMP_GET_PLACE_PROC_IDS
+ #define FTN_GET_PLACE_NUM OMP_GET_PLACE_NUM
+ #define FTN_GET_PARTITION_NUM_PLACES OMP_GET_PARTITION_NUM_PLACES
+ #define FTN_GET_PARTITION_PLACE_NUMS OMP_GET_PARTITION_PLACE_NUMS
+# ifdef KMP_STUB
+ #define FTN_GET_INITIAL_DEVICE OMP_GET_INITIAL_DEVICE
+ #define FTN_TARGET_ALLOC OMP_TARGET_ALLOC
+ #define FTN_TARGET_FREE OMP_TARGET_FREE
+ #define FTN_TARGET_IS_PRESENT OMP_TARGET_IS_PRESENT
+ #define FTN_TARGET_MEMCPY OMP_TARGET_MEMCPY
+ #define FTN_TARGET_MEMCPY_RECT OMP_TARGET_MEMCPY_RECT
+ #define FTN_TARGET_ASSOCIATE_PTR OMP_TARGET_ASSOCIATE_PTR
+ #define FTN_TARGET_DISASSOCIATE_PTR OMP_TARGET_DISASSOCIATE_PTR
+# endif
+#endif
+
+#endif /* KMP_FTN_UPPER */
+
+/* ------------------------------------------------------------------------ */
+
+#if KMP_FTN_ENTRIES == KMP_FTN_UAPPEND
+
+ #define FTN_SET_STACKSIZE KMP_SET_STACKSIZE_
+ #define FTN_SET_STACKSIZE_S KMP_SET_STACKSIZE_S_
+ #define FTN_GET_STACKSIZE KMP_GET_STACKSIZE_
+ #define FTN_GET_STACKSIZE_S KMP_GET_STACKSIZE_S_
+ #define FTN_SET_BLOCKTIME KMP_SET_BLOCKTIME_
+ #define FTN_GET_BLOCKTIME KMP_GET_BLOCKTIME_
+ #define FTN_SET_LIBRARY_SERIAL KMP_SET_LIBRARY_SERIAL_
+ #define FTN_SET_LIBRARY_TURNAROUND KMP_SET_LIBRARY_TURNAROUND_
+ #define FTN_SET_LIBRARY_THROUGHPUT KMP_SET_LIBRARY_THROUGHPUT_
+ #define FTN_SET_LIBRARY KMP_SET_LIBRARY_
+ #define FTN_GET_LIBRARY KMP_GET_LIBRARY_
+ #define FTN_SET_DEFAULTS KMP_SET_DEFAULTS_
+ #define FTN_SET_DISP_NUM_BUFFERS KMP_SET_DISP_NUM_BUFFERS_
+ #define FTN_SET_AFFINITY KMP_SET_AFFINITY_
+ #define FTN_GET_AFFINITY KMP_GET_AFFINITY_
+ #define FTN_GET_AFFINITY_MAX_PROC KMP_GET_AFFINITY_MAX_PROC_
+ #define FTN_CREATE_AFFINITY_MASK KMP_CREATE_AFFINITY_MASK_
+ #define FTN_DESTROY_AFFINITY_MASK KMP_DESTROY_AFFINITY_MASK_
+ #define FTN_SET_AFFINITY_MASK_PROC KMP_SET_AFFINITY_MASK_PROC_
+ #define FTN_UNSET_AFFINITY_MASK_PROC KMP_UNSET_AFFINITY_MASK_PROC_
+ #define FTN_GET_AFFINITY_MASK_PROC KMP_GET_AFFINITY_MASK_PROC_
+
+ #define FTN_MALLOC KMP_MALLOC_
+ #define FTN_ALIGNED_MALLOC KMP_ALIGNED_MALLOC_
+ #define FTN_CALLOC KMP_CALLOC_
+ #define FTN_REALLOC KMP_REALLOC_
+ #define FTN_FREE KMP_FREE_
+
+ #define FTN_GET_NUM_KNOWN_THREADS KMP_GET_NUM_KNOWN_THREADS_
+
+ #define FTN_SET_NUM_THREADS OMP_SET_NUM_THREADS_
+ #define FTN_GET_NUM_THREADS OMP_GET_NUM_THREADS_
+ #define FTN_GET_MAX_THREADS OMP_GET_MAX_THREADS_
+ #define FTN_GET_THREAD_NUM OMP_GET_THREAD_NUM_
+ #define FTN_GET_NUM_PROCS OMP_GET_NUM_PROCS_
+ #define FTN_SET_DYNAMIC OMP_SET_DYNAMIC_
+ #define FTN_GET_DYNAMIC OMP_GET_DYNAMIC_
+ #define FTN_SET_NESTED OMP_SET_NESTED_
+ #define FTN_GET_NESTED OMP_GET_NESTED_
+ #define FTN_IN_PARALLEL OMP_IN_PARALLEL_
+ #define FTN_GET_THREAD_LIMIT OMP_GET_THREAD_LIMIT_
+ #define FTN_SET_SCHEDULE OMP_SET_SCHEDULE_
+ #define FTN_GET_SCHEDULE OMP_GET_SCHEDULE_
+ #define FTN_SET_MAX_ACTIVE_LEVELS OMP_SET_MAX_ACTIVE_LEVELS_
+ #define FTN_GET_MAX_ACTIVE_LEVELS OMP_GET_MAX_ACTIVE_LEVELS_
+ #define FTN_GET_ACTIVE_LEVEL OMP_GET_ACTIVE_LEVEL_
+ #define FTN_GET_LEVEL OMP_GET_LEVEL_
+ #define FTN_GET_ANCESTOR_THREAD_NUM OMP_GET_ANCESTOR_THREAD_NUM_
+ #define FTN_GET_TEAM_SIZE OMP_GET_TEAM_SIZE_
+ #define FTN_IN_FINAL OMP_IN_FINAL_
+// #define FTN_SET_PROC_BIND OMP_SET_PROC_BIND_
+ #define FTN_GET_PROC_BIND OMP_GET_PROC_BIND_
+// #define FTN_CURR_PROC_BIND OMP_CURR_PROC_BIND_
+#if OMP_40_ENABLED
+ #define FTN_GET_NUM_TEAMS OMP_GET_NUM_TEAMS_
+ #define FTN_GET_TEAM_NUM OMP_GET_TEAM_NUM_
+#endif
+ #define FTN_INIT_LOCK OMP_INIT_LOCK_
+#if KMP_USE_DYNAMIC_LOCK
+ #define FTN_INIT_LOCK_WITH_HINT OMP_INIT_LOCK_WITH_HINT_
+ #define FTN_INIT_NEST_LOCK_WITH_HINT OMP_INIT_NEST_LOCK_WITH_HINT_
+#endif
+ #define FTN_DESTROY_LOCK OMP_DESTROY_LOCK_
+ #define FTN_SET_LOCK OMP_SET_LOCK_
+ #define FTN_UNSET_LOCK OMP_UNSET_LOCK_
+ #define FTN_TEST_LOCK OMP_TEST_LOCK_
+ #define FTN_INIT_NEST_LOCK OMP_INIT_NEST_LOCK_
+ #define FTN_DESTROY_NEST_LOCK OMP_DESTROY_NEST_LOCK_
+ #define FTN_SET_NEST_LOCK OMP_SET_NEST_LOCK_
+ #define FTN_UNSET_NEST_LOCK OMP_UNSET_NEST_LOCK_
+ #define FTN_TEST_NEST_LOCK OMP_TEST_NEST_LOCK_
+
+ #define FTN_SET_WARNINGS_ON KMP_SET_WARNINGS_ON_
+ #define FTN_SET_WARNINGS_OFF KMP_SET_WARNINGS_OFF_
+
+ #define FTN_GET_WTIME OMP_GET_WTIME_
+ #define FTN_GET_WTICK OMP_GET_WTICK_
+
+#if OMP_40_ENABLED
+#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
+ #define FTN_GET_DEFAULT_DEVICE OMP_GET_DEFAULT_DEVICE_
+ #define FTN_SET_DEFAULT_DEVICE OMP_SET_DEFAULT_DEVICE_
+ #define FTN_GET_NUM_DEVICES OMP_GET_NUM_DEVICES_
+#endif
+ #define FTN_IS_INITIAL_DEVICE OMP_IS_INITIAL_DEVICE_
+#endif
+
+
+#if OMP_40_ENABLED
+ #define FTN_GET_CANCELLATION OMP_GET_CANCELLATION_
+ #define FTN_GET_CANCELLATION_STATUS KMP_GET_CANCELLATION_STATUS_
+#endif
+
+#if OMP_45_ENABLED
+ #define FTN_GET_MAX_TASK_PRIORITY OMP_GET_MAX_TASK_PRIORITY_
+ #define FTN_GET_NUM_PLACES OMP_GET_NUM_PLACES_
+ #define FTN_GET_PLACE_NUM_PROCS OMP_GET_PLACE_NUM_PROCS_
+ #define FTN_GET_PLACE_PROC_IDS OMP_GET_PLACE_PROC_IDS_
+ #define FTN_GET_PLACE_NUM OMP_GET_PLACE_NUM_
+ #define FTN_GET_PARTITION_NUM_PLACES OMP_GET_PARTITION_NUM_PLACES_
+ #define FTN_GET_PARTITION_PLACE_NUMS OMP_GET_PARTITION_PLACE_NUMS_
+# ifdef KMP_STUB
+ #define FTN_GET_INITIAL_DEVICE OMP_GET_INITIAL_DEVICE_
+ #define FTN_TARGET_ALLOC OMP_TARGET_ALLOC_
+ #define FTN_TARGET_FREE OMP_TARGET_FREE_
+ #define FTN_TARGET_IS_PRESENT OMP_TARGET_IS_PRESENT_
+ #define FTN_TARGET_MEMCPY OMP_TARGET_MEMCPY_
+ #define FTN_TARGET_MEMCPY_RECT OMP_TARGET_MEMCPY_RECT_
+ #define FTN_TARGET_ASSOCIATE_PTR OMP_TARGET_ASSOCIATE_PTR_
+ #define FTN_TARGET_DISASSOCIATE_PTR OMP_TARGET_DISASSOCIATE_PTR_
+# endif
+#endif
+
+#endif /* KMP_FTN_UAPPEND */
+
+/* ------------------------------------------------------------------ */
+/* -------------------------- GOMP API NAMES ------------------------ */
+// All GOMP_1.0 symbols
+#define KMP_API_NAME_GOMP_ATOMIC_END GOMP_atomic_end
+#define KMP_API_NAME_GOMP_ATOMIC_START GOMP_atomic_start
+#define KMP_API_NAME_GOMP_BARRIER GOMP_barrier
+#define KMP_API_NAME_GOMP_CRITICAL_END GOMP_critical_end
+#define KMP_API_NAME_GOMP_CRITICAL_NAME_END GOMP_critical_name_end
+#define KMP_API_NAME_GOMP_CRITICAL_NAME_START GOMP_critical_name_start
+#define KMP_API_NAME_GOMP_CRITICAL_START GOMP_critical_start
+#define KMP_API_NAME_GOMP_LOOP_DYNAMIC_NEXT GOMP_loop_dynamic_next
+#define KMP_API_NAME_GOMP_LOOP_DYNAMIC_START GOMP_loop_dynamic_start
+#define KMP_API_NAME_GOMP_LOOP_END GOMP_loop_end
+#define KMP_API_NAME_GOMP_LOOP_END_NOWAIT GOMP_loop_end_nowait
+#define KMP_API_NAME_GOMP_LOOP_GUIDED_NEXT GOMP_loop_guided_next
+#define KMP_API_NAME_GOMP_LOOP_GUIDED_START GOMP_loop_guided_start
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_NEXT GOMP_loop_ordered_dynamic_next
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_START GOMP_loop_ordered_dynamic_start
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_NEXT GOMP_loop_ordered_guided_next
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_START GOMP_loop_ordered_guided_start
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_NEXT GOMP_loop_ordered_runtime_next
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_START GOMP_loop_ordered_runtime_start
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_NEXT GOMP_loop_ordered_static_next
+#define KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_START GOMP_loop_ordered_static_start
+#define KMP_API_NAME_GOMP_LOOP_RUNTIME_NEXT GOMP_loop_runtime_next
+#define KMP_API_NAME_GOMP_LOOP_RUNTIME_START GOMP_loop_runtime_start
+#define KMP_API_NAME_GOMP_LOOP_STATIC_NEXT GOMP_loop_static_next
+#define KMP_API_NAME_GOMP_LOOP_STATIC_START GOMP_loop_static_start
+#define KMP_API_NAME_GOMP_ORDERED_END GOMP_ordered_end
+#define KMP_API_NAME_GOMP_ORDERED_START GOMP_ordered_start
+#define KMP_API_NAME_GOMP_PARALLEL_END GOMP_parallel_end
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC_START GOMP_parallel_loop_dynamic_start
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED_START GOMP_parallel_loop_guided_start
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START GOMP_parallel_loop_runtime_start
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC_START GOMP_parallel_loop_static_start
+#define KMP_API_NAME_GOMP_PARALLEL_SECTIONS_START GOMP_parallel_sections_start
+#define KMP_API_NAME_GOMP_PARALLEL_START GOMP_parallel_start
+#define KMP_API_NAME_GOMP_SECTIONS_END GOMP_sections_end
+#define KMP_API_NAME_GOMP_SECTIONS_END_NOWAIT GOMP_sections_end_nowait
+#define KMP_API_NAME_GOMP_SECTIONS_NEXT GOMP_sections_next
+#define KMP_API_NAME_GOMP_SECTIONS_START GOMP_sections_start
+#define KMP_API_NAME_GOMP_SINGLE_COPY_END GOMP_single_copy_end
+#define KMP_API_NAME_GOMP_SINGLE_COPY_START GOMP_single_copy_start
+#define KMP_API_NAME_GOMP_SINGLE_START GOMP_single_start
+
+// All GOMP_2.0 symbols
+#define KMP_API_NAME_GOMP_TASK GOMP_task
+#define KMP_API_NAME_GOMP_TASKWAIT GOMP_taskwait
+#define KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_NEXT GOMP_loop_ull_dynamic_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_START GOMP_loop_ull_dynamic_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_NEXT GOMP_loop_ull_guided_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_START GOMP_loop_ull_guided_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT GOMP_loop_ull_ordered_dynamic_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START GOMP_loop_ull_ordered_dynamic_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT GOMP_loop_ull_ordered_guided_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_START GOMP_loop_ull_ordered_guided_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT GOMP_loop_ull_ordered_runtime_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_START GOMP_loop_ull_ordered_runtime_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT GOMP_loop_ull_ordered_static_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_START GOMP_loop_ull_ordered_static_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_NEXT GOMP_loop_ull_runtime_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_START GOMP_loop_ull_runtime_start
+#define KMP_API_NAME_GOMP_LOOP_ULL_STATIC_NEXT GOMP_loop_ull_static_next
+#define KMP_API_NAME_GOMP_LOOP_ULL_STATIC_START GOMP_loop_ull_static_start
+
+// All GOMP_3.0 symbols
+#define KMP_API_NAME_GOMP_TASKYIELD GOMP_taskyield
+
+// All GOMP_4.0 symbols
+// TODO: As of 2013-10-14, none of the GOMP_4.0 functions are implemented in libomp
+#define KMP_API_NAME_GOMP_BARRIER_CANCEL GOMP_barrier_cancel
+#define KMP_API_NAME_GOMP_CANCEL GOMP_cancel
+#define KMP_API_NAME_GOMP_CANCELLATION_POINT GOMP_cancellation_point
+#define KMP_API_NAME_GOMP_LOOP_END_CANCEL GOMP_loop_end_cancel
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC GOMP_parallel_loop_dynamic
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED GOMP_parallel_loop_guided
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME GOMP_parallel_loop_runtime
+#define KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC GOMP_parallel_loop_static
+#define KMP_API_NAME_GOMP_PARALLEL_SECTIONS GOMP_parallel_sections
+#define KMP_API_NAME_GOMP_PARALLEL GOMP_parallel
+#define KMP_API_NAME_GOMP_SECTIONS_END_CANCEL GOMP_sections_end_cancel
+#define KMP_API_NAME_GOMP_TASKGROUP_START GOMP_taskgroup_start
+#define KMP_API_NAME_GOMP_TASKGROUP_END GOMP_taskgroup_end
+/* Target functions should be taken care of by liboffload */
+#define KMP_API_NAME_GOMP_TARGET GOMP_target
+#define KMP_API_NAME_GOMP_TARGET_DATA GOMP_target_data
+#define KMP_API_NAME_GOMP_TARGET_END_DATA GOMP_target_end_data
+#define KMP_API_NAME_GOMP_TARGET_UPDATE GOMP_target_update
+#define KMP_API_NAME_GOMP_TEAMS GOMP_teams
+
+#ifdef KMP_USE_VERSION_SYMBOLS
+ #define xstr(x) str(x)
+ #define str(x) #x
+
+ // If Linux, xexpand prepends __kmp_api_ to the real API name
+ #define xexpand(api_name) expand(api_name)
+ #define expand(api_name) __kmp_api_##api_name
+
+ #define xaliasify(api_name,ver) aliasify(api_name,ver)
+ #define aliasify(api_name,ver) __typeof__(__kmp_api_##api_name) __kmp_api_##api_name##_##ver##_alias __attribute__((alias(xstr(__kmp_api_##api_name))))
+
+ #define xversionify(api_name, version_num, version_str) versionify(api_name, version_num, version_str, "VERSION")
+ #define versionify(api_name, version_num, version_str, default_ver) \
+ __asm__(".symver " xstr(__kmp_api_##api_name##_##version_num##_alias) "," xstr(api_name) "@" version_str "\n\t"); \
+ __asm__(".symver " xstr(__kmp_api_##api_name) "," xstr(api_name) "@@" default_ver "\n\t")
+
+#else // KMP_USE_VERSION_SYMBOLS
+ #define xstr(x) /* Nothing */
+ #define str(x) /* Nothing */
+
+ // if Windows or Mac, xexpand does no name transformation
+ #define xexpand(api_name) expand(api_name)
+ #define expand(api_name) api_name
+
+ #define xaliasify(api_name,ver) /* Nothing */
+ #define aliasify(api_name,ver) /* Nothing */
+
+ #define xversionify(api_name, version_num, version_str) /* Nothing */
+ #define versionify(api_name, version_num, version_str, default_ver) /* Nothing */
+
+#endif // KMP_USE_VERSION_SYMBOLS
+
+#endif /* KMP_FTN_OS_H */
+
diff --git a/final/runtime/src/kmp_ftn_stdcall.c b/final/runtime/src/kmp_ftn_stdcall.c
new file mode 100644
index 0000000..cf70d74
--- /dev/null
+++ b/final/runtime/src/kmp_ftn_stdcall.c
@@ -0,0 +1,35 @@
+/*
+ * kmp_ftn_stdcall.c -- Fortran __stdcall linkage support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+
+// Note: This string is not printed when KMP_VERSION=1.
+char const __kmp_version_ftnstdcall[] = KMP_VERSION_PREFIX "Fortran __stdcall OMP support: "
+#ifdef USE_FTN_STDCALL
+ "yes";
+#else
+ "no";
+#endif
+
+#ifdef USE_FTN_STDCALL
+
+#define FTN_STDCALL KMP_STDCALL
+#define KMP_FTN_ENTRIES USE_FTN_STDCALL
+
+#include "kmp_ftn_os.h"
+#include "kmp_ftn_entry.h"
+
+#endif /* USE_FTN_STDCALL */
+
diff --git a/final/runtime/src/kmp_global.c b/final/runtime/src/kmp_global.c
new file mode 100644
index 0000000..2cf0e2f
--- /dev/null
+++ b/final/runtime/src/kmp_global.c
@@ -0,0 +1,478 @@
+/*
+ * kmp_global.c -- KPTS global variables for runtime support library
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+
+kmp_key_t __kmp_gtid_threadprivate_key;
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+kmp_cpuinfo_t __kmp_cpuinfo = { 0 }; // Not initialized
+#endif
+
+#if KMP_STATS_ENABLED
+#include "kmp_stats.h"
+// lock for modifying the global __kmp_stats_list
+kmp_tas_lock_t __kmp_stats_lock;
+
+// global list of per thread stats, the head is a sentinel node which accumulates all stats produced before __kmp_create_worker is called.
+kmp_stats_list __kmp_stats_list;
+
+// thread local pointer to stats node within list
+__thread kmp_stats_list* __kmp_stats_thread_ptr = &__kmp_stats_list;
+
+// gives reference tick for all events (considered the 0 tick)
+tsc_tick_count __kmp_stats_start_time;
+#endif
+
+/* ----------------------------------------------------- */
+/* INITIALIZATION VARIABLES */
+/* they are syncronized to write during init, but read anytime */
+volatile int __kmp_init_serial = FALSE;
+volatile int __kmp_init_gtid = FALSE;
+volatile int __kmp_init_common = FALSE;
+volatile int __kmp_init_middle = FALSE;
+volatile int __kmp_init_parallel = FALSE;
+volatile int __kmp_init_monitor = 0; /* 1 - launched, 2 - actually started (Windows* OS only) */
+volatile int __kmp_init_user_locks = FALSE;
+
+/* list of address of allocated caches for commons */
+kmp_cached_addr_t *__kmp_threadpriv_cache_list = NULL;
+
+int __kmp_init_counter = 0;
+int __kmp_root_counter = 0;
+int __kmp_version = 0;
+
+volatile kmp_uint32 __kmp_team_counter = 0;
+volatile kmp_uint32 __kmp_task_counter = 0;
+
+unsigned int __kmp_init_wait = KMP_DEFAULT_INIT_WAIT; /* initial number of spin-tests */
+unsigned int __kmp_next_wait = KMP_DEFAULT_NEXT_WAIT; /* susequent number of spin-tests */
+
+size_t __kmp_stksize = KMP_DEFAULT_STKSIZE;
+size_t __kmp_monitor_stksize = 0; // auto adjust
+size_t __kmp_stkoffset = KMP_DEFAULT_STKOFFSET;
+int __kmp_stkpadding = KMP_MIN_STKPADDING;
+
+size_t __kmp_malloc_pool_incr = KMP_DEFAULT_MALLOC_POOL_INCR;
+
+/* Barrier method defaults, settings, and strings */
+/* branch factor = 2^branch_bits (only relevant for tree and hyper barrier types) */
+#if KMP_ARCH_X86_64
+kmp_uint32 __kmp_barrier_gather_bb_dflt = 2; /* branch_factor = 4 */ /* hyper2: C78980 */
+kmp_uint32 __kmp_barrier_release_bb_dflt = 2; /* branch_factor = 4 */ /* hyper2: C78980 */
+#else
+kmp_uint32 __kmp_barrier_gather_bb_dflt = 2; /* branch_factor = 4 */ /* communication in core for MIC */
+kmp_uint32 __kmp_barrier_release_bb_dflt = 2; /* branch_factor = 4 */ /* communication in core for MIC */
+#endif // KMP_ARCH_X86_64
+#if KMP_ARCH_X86_64
+kmp_bar_pat_e __kmp_barrier_gather_pat_dflt = bp_hyper_bar; /* hyper2: C78980 */
+kmp_bar_pat_e __kmp_barrier_release_pat_dflt = bp_hyper_bar; /* hyper2: C78980 */
+#else
+kmp_bar_pat_e __kmp_barrier_gather_pat_dflt = bp_linear_bar;
+kmp_bar_pat_e __kmp_barrier_release_pat_dflt = bp_linear_bar;
+#endif
+kmp_uint32 __kmp_barrier_gather_branch_bits [ bs_last_barrier ] = { 0 };
+kmp_uint32 __kmp_barrier_release_branch_bits [ bs_last_barrier ] = { 0 };
+kmp_bar_pat_e __kmp_barrier_gather_pattern [ bs_last_barrier ] = { bp_linear_bar };
+kmp_bar_pat_e __kmp_barrier_release_pattern [ bs_last_barrier ] = { bp_linear_bar };
+char const *__kmp_barrier_branch_bit_env_name [ bs_last_barrier ] =
+ { "KMP_PLAIN_BARRIER", "KMP_FORKJOIN_BARRIER"
+ #if KMP_FAST_REDUCTION_BARRIER
+ , "KMP_REDUCTION_BARRIER"
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ };
+char const *__kmp_barrier_pattern_env_name [ bs_last_barrier ] =
+ { "KMP_PLAIN_BARRIER_PATTERN", "KMP_FORKJOIN_BARRIER_PATTERN"
+ #if KMP_FAST_REDUCTION_BARRIER
+ , "KMP_REDUCTION_BARRIER_PATTERN"
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ };
+char const *__kmp_barrier_type_name [ bs_last_barrier ] =
+ { "plain", "forkjoin"
+ #if KMP_FAST_REDUCTION_BARRIER
+ , "reduction"
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ };
+char const *__kmp_barrier_pattern_name[bp_last_bar] = {"linear","tree","hyper","hierarchical"};
+
+int __kmp_allThreadsSpecified = 0;
+size_t __kmp_align_alloc = CACHE_LINE;
+
+
+int __kmp_generate_warnings = kmp_warnings_low;
+int __kmp_reserve_warn = 0;
+int __kmp_xproc = 0;
+int __kmp_avail_proc = 0;
+size_t __kmp_sys_min_stksize = KMP_MIN_STKSIZE;
+int __kmp_sys_max_nth = KMP_MAX_NTH;
+int __kmp_max_nth = 0;
+int __kmp_threads_capacity = 0;
+int __kmp_dflt_team_nth = 0;
+int __kmp_dflt_team_nth_ub = 0;
+int __kmp_tp_capacity = 0;
+int __kmp_tp_cached = 0;
+int __kmp_dflt_nested = FALSE;
+int __kmp_dispatch_num_buffers = KMP_DFLT_DISP_NUM_BUFF;
+int __kmp_dflt_max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT; /* max_active_levels limit */
+#if KMP_NESTED_HOT_TEAMS
+int __kmp_hot_teams_mode = 0; /* 0 - free extra threads when reduced */
+ /* 1 - keep extra threads when reduced */
+int __kmp_hot_teams_max_level = 1; /* nesting level of hot teams */
+#endif
+enum library_type __kmp_library = library_none;
+enum sched_type __kmp_sched = kmp_sch_default; /* scheduling method for runtime scheduling */
+enum sched_type __kmp_static = kmp_sch_static_greedy; /* default static scheduling method */
+enum sched_type __kmp_guided = kmp_sch_guided_iterative_chunked; /* default guided scheduling method */
+enum sched_type __kmp_auto = kmp_sch_guided_analytical_chunked; /* default auto scheduling method */
+int __kmp_dflt_blocktime = KMP_DEFAULT_BLOCKTIME;
+int __kmp_monitor_wakeups = KMP_MIN_MONITOR_WAKEUPS;
+int __kmp_bt_intervals = KMP_INTERVALS_FROM_BLOCKTIME( KMP_DEFAULT_BLOCKTIME, KMP_MIN_MONITOR_WAKEUPS );
+#ifdef KMP_ADJUST_BLOCKTIME
+int __kmp_zero_bt = FALSE;
+#endif /* KMP_ADJUST_BLOCKTIME */
+#ifdef KMP_DFLT_NTH_CORES
+int __kmp_ncores = 0;
+#endif
+int __kmp_chunk = 0;
+int __kmp_abort_delay = 0;
+#if KMP_OS_LINUX && defined(KMP_TDATA_GTID)
+int __kmp_gtid_mode = 3; /* use __declspec(thread) TLS to store gtid */
+int __kmp_adjust_gtid_mode = FALSE;
+#elif KMP_OS_WINDOWS
+int __kmp_gtid_mode = 2; /* use TLS functions to store gtid */
+int __kmp_adjust_gtid_mode = FALSE;
+#else
+int __kmp_gtid_mode = 0; /* select method to get gtid based on #threads */
+int __kmp_adjust_gtid_mode = TRUE;
+#endif /* KMP_OS_LINUX && defined(KMP_TDATA_GTID) */
+#ifdef KMP_TDATA_GTID
+#if KMP_OS_WINDOWS
+__declspec(thread) int __kmp_gtid = KMP_GTID_DNE;
+#else
+__thread int __kmp_gtid = KMP_GTID_DNE;
+#endif /* KMP_OS_WINDOWS - workaround because Intel(R) Many Integrated Core compiler 20110316 doesn't accept __declspec */
+#endif /* KMP_TDATA_GTID */
+int __kmp_tls_gtid_min = INT_MAX;
+int __kmp_foreign_tp = TRUE;
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+int __kmp_inherit_fp_control = TRUE;
+kmp_int16 __kmp_init_x87_fpu_control_word = 0;
+kmp_uint32 __kmp_init_mxcsr = 0;
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+#ifdef USE_LOAD_BALANCE
+double __kmp_load_balance_interval = 1.0;
+#endif /* USE_LOAD_BALANCE */
+
+kmp_nested_nthreads_t __kmp_nested_nth = { NULL, 0, 0 };
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+kmp_adaptive_backoff_params_t __kmp_adaptive_backoff_params = { 1, 1024 }; // TODO: tune it!
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+char * __kmp_speculative_statsfile = "-";
+#endif
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+#if OMP_40_ENABLED
+int __kmp_display_env = FALSE;
+int __kmp_display_env_verbose = FALSE;
+int __kmp_omp_cancellation = FALSE;
+#endif
+
+/* map OMP 3.0 schedule types with our internal schedule types */
+enum sched_type __kmp_sch_map[ kmp_sched_upper - kmp_sched_lower_ext + kmp_sched_upper_std - kmp_sched_lower - 2 ] = {
+ kmp_sch_static_chunked, // ==> kmp_sched_static = 1
+ kmp_sch_dynamic_chunked, // ==> kmp_sched_dynamic = 2
+ kmp_sch_guided_chunked, // ==> kmp_sched_guided = 3
+ kmp_sch_auto, // ==> kmp_sched_auto = 4
+ kmp_sch_trapezoidal // ==> kmp_sched_trapezoidal = 101
+ // will likely not used, introduced here just to debug the code
+ // of public intel extension schedules
+};
+
+#if KMP_OS_LINUX
+enum clock_function_type __kmp_clock_function;
+int __kmp_clock_function_param;
+#endif /* KMP_OS_LINUX */
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+enum mic_type __kmp_mic_type = non_mic;
+#endif
+
+#if KMP_AFFINITY_SUPPORTED
+
+# if KMP_USE_HWLOC
+int __kmp_hwloc_error = FALSE;
+hwloc_topology_t __kmp_hwloc_topology = NULL;
+# endif
+
+# if KMP_GROUP_AFFINITY
+
+int __kmp_num_proc_groups = 1;
+
+kmp_GetActiveProcessorCount_t __kmp_GetActiveProcessorCount = NULL;
+kmp_GetActiveProcessorGroupCount_t __kmp_GetActiveProcessorGroupCount = NULL;
+kmp_GetThreadGroupAffinity_t __kmp_GetThreadGroupAffinity = NULL;
+kmp_SetThreadGroupAffinity_t __kmp_SetThreadGroupAffinity = NULL;
+
+# endif /* KMP_GROUP_AFFINITY */
+
+size_t __kmp_affin_mask_size = 0;
+enum affinity_type __kmp_affinity_type = affinity_default;
+enum affinity_gran __kmp_affinity_gran = affinity_gran_default;
+int __kmp_affinity_gran_levels = -1;
+int __kmp_affinity_dups = TRUE;
+enum affinity_top_method __kmp_affinity_top_method = affinity_top_method_default;
+int __kmp_affinity_compact = 0;
+int __kmp_affinity_offset = 0;
+int __kmp_affinity_verbose = FALSE;
+int __kmp_affinity_warnings = TRUE;
+int __kmp_affinity_respect_mask = affinity_respect_mask_default;
+char * __kmp_affinity_proclist = NULL;
+kmp_affin_mask_t *__kmp_affinity_masks = NULL;
+unsigned __kmp_affinity_num_masks = 0;
+
+char const * __kmp_cpuinfo_file = NULL;
+
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+#if OMP_40_ENABLED
+kmp_nested_proc_bind_t __kmp_nested_proc_bind = { NULL, 0, 0 };
+int __kmp_affinity_num_places = 0;
+#endif
+
+int __kmp_place_num_sockets = 0;
+int __kmp_place_socket_offset = 0;
+int __kmp_place_num_cores = 0;
+int __kmp_place_core_offset = 0;
+int __kmp_place_num_threads_per_core = 0;
+
+kmp_tasking_mode_t __kmp_tasking_mode = tskm_task_teams;
+#if OMP_45_ENABLED
+kmp_int32 __kmp_max_task_priority = 0;
+#endif
+
+/* This check ensures that the compiler is passing the correct data type
+ * for the flags formal parameter of the function kmpc_omp_task_alloc().
+ * If the type is not a 4-byte type, then give an error message about
+ * a non-positive length array pointing here. If that happens, the
+ * kmp_tasking_flags_t structure must be redefined to have exactly 32 bits.
+ */
+KMP_BUILD_ASSERT( sizeof(kmp_tasking_flags_t) == 4 );
+
+kmp_int32 __kmp_task_stealing_constraint = 1; /* Constrain task stealing by default */
+
+#ifdef DEBUG_SUSPEND
+int __kmp_suspend_count = 0;
+#endif
+
+int __kmp_settings = FALSE;
+int __kmp_duplicate_library_ok = 0;
+#if USE_ITT_BUILD
+int __kmp_forkjoin_frames = 1;
+int __kmp_forkjoin_frames_mode = 3;
+#endif
+PACKED_REDUCTION_METHOD_T __kmp_force_reduction_method = reduction_method_not_defined;
+int __kmp_determ_red = FALSE;
+
+#ifdef KMP_DEBUG
+int kmp_a_debug = 0;
+int kmp_b_debug = 0;
+int kmp_c_debug = 0;
+int kmp_d_debug = 0;
+int kmp_e_debug = 0;
+int kmp_f_debug = 0;
+int kmp_diag = 0;
+#endif
+
+/* For debug information logging using rotating buffer */
+int __kmp_debug_buf = FALSE; /* TRUE means use buffer, FALSE means print to stderr */
+int __kmp_debug_buf_lines = KMP_DEBUG_BUF_LINES_INIT; /* Lines of debug stored in buffer */
+int __kmp_debug_buf_chars = KMP_DEBUG_BUF_CHARS_INIT; /* Characters allowed per line in buffer */
+int __kmp_debug_buf_atomic = FALSE; /* TRUE means use atomic update of buffer entry pointer */
+
+char *__kmp_debug_buffer = NULL; /* Debug buffer itself */
+int __kmp_debug_count = 0; /* Counter for number of lines printed in buffer so far */
+int __kmp_debug_buf_warn_chars = 0; /* Keep track of char increase recommended in warnings */
+/* end rotating debug buffer */
+
+#ifdef KMP_DEBUG
+int __kmp_par_range; /* +1 => only go par for constructs in range */
+ /* -1 => only go par for constructs outside range */
+char __kmp_par_range_routine[KMP_PAR_RANGE_ROUTINE_LEN] = { '\0' };
+char __kmp_par_range_filename[KMP_PAR_RANGE_FILENAME_LEN] = { '\0' };
+int __kmp_par_range_lb = 0;
+int __kmp_par_range_ub = INT_MAX;
+#endif /* KMP_DEBUG */
+
+/* For printing out dynamic storage map for threads and teams */
+int __kmp_storage_map = FALSE; /* True means print storage map for threads and teams */
+int __kmp_storage_map_verbose = FALSE; /* True means storage map includes placement info */
+int __kmp_storage_map_verbose_specified = FALSE;
+/* Initialize the library data structures when we fork a child process, defaults to TRUE */
+int __kmp_need_register_atfork = TRUE; /* At initialization, call pthread_atfork to install fork handler */
+int __kmp_need_register_atfork_specified = TRUE;
+
+int __kmp_env_chunk = FALSE; /* KMP_CHUNK specified? */
+int __kmp_env_stksize = FALSE; /* KMP_STACKSIZE specified? */
+int __kmp_env_omp_stksize = FALSE; /* OMP_STACKSIZE specified? */
+int __kmp_env_all_threads = FALSE;/* KMP_ALL_THREADS or KMP_MAX_THREADS specified? */
+int __kmp_env_omp_all_threads = FALSE;/* OMP_THREAD_LIMIT specified? */
+int __kmp_env_blocktime = FALSE; /* KMP_BLOCKTIME specified? */
+int __kmp_env_checks = FALSE; /* KMP_CHECKS specified? */
+int __kmp_env_consistency_check = FALSE; /* KMP_CONSISTENCY_CHECK specified? */
+
+kmp_uint32 __kmp_yield_init = KMP_INIT_WAIT;
+kmp_uint32 __kmp_yield_next = KMP_NEXT_WAIT;
+kmp_uint32 __kmp_yielding_on = 1;
+#if KMP_OS_CNK
+kmp_uint32 __kmp_yield_cycle = 0;
+#else
+kmp_uint32 __kmp_yield_cycle = 1; /* Yield-cycle is on by default */
+#endif
+kmp_int32 __kmp_yield_on_count = 10; /* By default, yielding is on for 10 monitor periods. */
+kmp_int32 __kmp_yield_off_count = 1; /* By default, yielding is off for 1 monitor periods. */
+/* ----------------------------------------------------- */
+
+
+/* ------------------------------------------------------ */
+/* STATE mostly syncronized with global lock */
+/* data written to rarely by masters, read often by workers */
+/*
+ * SHALL WE EDIT THE COMMENT BELOW IN SOME WAY?
+ * TODO: None of this global padding stuff works consistently because
+ * the order of declaration is not necessarily correlated to storage order.
+ * To fix this, all the important globals must be put in a big structure
+ * instead.
+ */
+KMP_ALIGN_CACHE
+ kmp_info_t **__kmp_threads = NULL;
+ kmp_root_t **__kmp_root = NULL;
+
+/* data read/written to often by masters */
+KMP_ALIGN_CACHE
+volatile int __kmp_nth = 0;
+volatile int __kmp_all_nth = 0;
+int __kmp_thread_pool_nth = 0;
+volatile kmp_info_t *__kmp_thread_pool = NULL;
+volatile kmp_team_t *__kmp_team_pool = NULL;
+
+KMP_ALIGN_CACHE
+volatile int __kmp_thread_pool_active_nth = 0;
+
+/* -------------------------------------------------
+ * GLOBAL/ROOT STATE */
+KMP_ALIGN_CACHE
+kmp_global_t __kmp_global = {{ 0 }};
+
+/* ----------------------------------------------- */
+/* GLOBAL SYNCHRONIZATION LOCKS */
+/* TODO verify the need for these locks and if they need to be global */
+
+#if KMP_USE_INTERNODE_ALIGNMENT
+/* Multinode systems have larger cache line granularity which can cause
+ * false sharing if the alignment is not large enough for these locks */
+KMP_ALIGN_CACHE_INTERNODE
+
+kmp_bootstrap_lock_t __kmp_initz_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_initz_lock ); /* Control initializations */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_bootstrap_lock_t __kmp_forkjoin_lock; /* control fork/join access */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_bootstrap_lock_t __kmp_exit_lock; /* exit() is not always thread-safe */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_bootstrap_lock_t __kmp_monitor_lock; /* control monitor thread creation */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_bootstrap_lock_t __kmp_tp_cached_lock; /* used for the hack to allow threadprivate cache and __kmp_threads expansion to co-exist */
+
+KMP_ALIGN_CACHE_INTERNODE
+kmp_lock_t __kmp_global_lock; /* Control OS/global access */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_queuing_lock_t __kmp_dispatch_lock; /* Control dispatch access */
+KMP_ALIGN_CACHE_INTERNODE
+kmp_lock_t __kmp_debug_lock; /* Control I/O access for KMP_DEBUG */
+#else
+KMP_ALIGN_CACHE
+
+kmp_bootstrap_lock_t __kmp_initz_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_initz_lock ); /* Control initializations */
+kmp_bootstrap_lock_t __kmp_forkjoin_lock; /* control fork/join access */
+kmp_bootstrap_lock_t __kmp_exit_lock; /* exit() is not always thread-safe */
+kmp_bootstrap_lock_t __kmp_monitor_lock; /* control monitor thread creation */
+kmp_bootstrap_lock_t __kmp_tp_cached_lock; /* used for the hack to allow threadprivate cache and __kmp_threads expansion to co-exist */
+
+KMP_ALIGN(128)
+kmp_lock_t __kmp_global_lock; /* Control OS/global access */
+KMP_ALIGN(128)
+kmp_queuing_lock_t __kmp_dispatch_lock; /* Control dispatch access */
+KMP_ALIGN(128)
+kmp_lock_t __kmp_debug_lock; /* Control I/O access for KMP_DEBUG */
+#endif
+
+/* ----------------------------------------------- */
+
+#if KMP_HANDLE_SIGNALS
+ /*
+ Signal handling is disabled by default, because it confuses users: In case of sigsegv
+ (or other trouble) in user code signal handler catches the signal, which then "appears" in
+ the monitor thread (when the monitor executes raise() function). Users see signal in the
+ monitor thread and blame OpenMP RTL.
+
+ Grant said signal handling required on some older OSes (Irix?) supported by KAI, because
+ bad applications hung but not aborted. Currently it is not a problem for Linux* OS, OS X* and
+ Windows* OS.
+
+ Grant: Found new hangs for EL4, EL5, and a Fedora Core machine. So I'm putting
+ the default back for now to see if that fixes hangs on those machines.
+
+ 2010-04013 Lev: It was a bug in Fortran RTL. Fortran RTL prints a kind of stack backtrace
+ when program is aborting, but the code is not signal-safe. When multiple signals raised at
+ the same time (which occurs in dynamic negative tests because all the worker threads detects
+ the same error), Fortran RTL may hang. The bug finally fixed in Fortran RTL library provided
+ by Steve R., and will be available soon.
+ */
+ int __kmp_handle_signals = FALSE;
+#endif
+
+/* ----------------------------------------------- */
+#ifdef BUILD_TV
+kmp_key_t __kmp_tv_key = 0;
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef DEBUG_SUSPEND
+int
+get_suspend_count_( void ) {
+ int count = __kmp_suspend_count;
+ __kmp_suspend_count = 0;
+ return count;
+}
+void
+set_suspend_count_( int * value ) {
+ __kmp_suspend_count = *value;
+}
+#endif
+
+// Symbols for MS mutual detection.
+int _You_must_link_with_exactly_one_OpenMP_library = 1;
+int _You_must_link_with_Intel_OpenMP_library = 1;
+#if KMP_OS_WINDOWS && ( KMP_VERSION_MAJOR > 4 )
+ int _You_must_link_with_Microsoft_OpenMP_library = 1;
+#endif
+
+// end of file //
diff --git a/final/runtime/src/kmp_gsupport.c b/final/runtime/src/kmp_gsupport.c
new file mode 100644
index 0000000..23c97d1
--- /dev/null
+++ b/final/runtime/src/kmp_gsupport.c
@@ -0,0 +1,1610 @@
+/*
+ * kmp_gsupport.c
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_atomic.h"
+
+#if OMPT_SUPPORT
+#include "ompt-specific.h"
+#endif
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+#define MKLOC(loc,routine) \
+ static ident_t (loc) = {0, KMP_IDENT_KMPC, 0, 0, ";unknown;unknown;0;0;;" };
+
+#include "kmp_ftn_os.h"
+
+void
+xexpand(KMP_API_NAME_GOMP_BARRIER)(void)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_barrier");
+ KA_TRACE(20, ("GOMP_barrier: T#%d\n", gtid));
+ __kmpc_barrier(&loc, gtid);
+}
+
+
+//
+// Mutual exclusion
+//
+
+//
+// The symbol that icc/ifort generates for unnamed for unnamed critical
+// sections - .gomp_critical_user_ - is defined using .comm in any objects
+// reference it. We can't reference it directly here in C code, as the
+// symbol contains a ".".
+//
+// The RTL contains an assembly language definition of .gomp_critical_user_
+// with another symbol __kmp_unnamed_critical_addr initialized with it's
+// address.
+//
+extern kmp_critical_name *__kmp_unnamed_critical_addr;
+
+
+void
+xexpand(KMP_API_NAME_GOMP_CRITICAL_START)(void)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_critical_start");
+ KA_TRACE(20, ("GOMP_critical_start: T#%d\n", gtid));
+ __kmpc_critical(&loc, gtid, __kmp_unnamed_critical_addr);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_CRITICAL_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_critical_end");
+ KA_TRACE(20, ("GOMP_critical_end: T#%d\n", gtid));
+ __kmpc_end_critical(&loc, gtid, __kmp_unnamed_critical_addr);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_CRITICAL_NAME_START)(void **pptr)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_critical_name_start");
+ KA_TRACE(20, ("GOMP_critical_name_start: T#%d\n", gtid));
+ __kmpc_critical(&loc, gtid, (kmp_critical_name *)pptr);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_CRITICAL_NAME_END)(void **pptr)
+{
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_critical_name_end");
+ KA_TRACE(20, ("GOMP_critical_name_end: T#%d\n", gtid));
+ __kmpc_end_critical(&loc, gtid, (kmp_critical_name *)pptr);
+}
+
+
+//
+// The Gnu codegen tries to use locked operations to perform atomic updates
+// inline. If it can't, then it calls GOMP_atomic_start() before performing
+// the update and GOMP_atomic_end() afterward, regardless of the data type.
+//
+
+void
+xexpand(KMP_API_NAME_GOMP_ATOMIC_START)(void)
+{
+ int gtid = __kmp_entry_gtid();
+ KA_TRACE(20, ("GOMP_atomic_start: T#%d\n", gtid));
+
+#if OMPT_SUPPORT
+ __ompt_thread_assign_wait_id(0);
+#endif
+
+ __kmp_acquire_atomic_lock(&__kmp_atomic_lock, gtid);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_ATOMIC_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ KA_TRACE(20, ("GOMP_atomic_start: T#%d\n", gtid));
+ __kmp_release_atomic_lock(&__kmp_atomic_lock, gtid);
+}
+
+
+int
+xexpand(KMP_API_NAME_GOMP_SINGLE_START)(void)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_single_start");
+ KA_TRACE(20, ("GOMP_single_start: T#%d\n", gtid));
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+ //
+ // 3rd parameter == FALSE prevents kmp_enter_single from pushing a
+ // workshare when USE_CHECKS is defined. We need to avoid the push,
+ // as there is no corresponding GOMP_single_end() call.
+ //
+ return __kmp_enter_single(gtid, &loc, FALSE);
+}
+
+
+void *
+xexpand(KMP_API_NAME_GOMP_SINGLE_COPY_START)(void)
+{
+ void *retval;
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_single_copy_start");
+ KA_TRACE(20, ("GOMP_single_copy_start: T#%d\n", gtid));
+
+ if (! TCR_4(__kmp_init_parallel))
+ __kmp_parallel_initialize();
+
+ //
+ // If this is the first thread to enter, return NULL. The generated
+ // code will then call GOMP_single_copy_end() for this thread only,
+ // with the copyprivate data pointer as an argument.
+ //
+ if (__kmp_enter_single(gtid, &loc, FALSE))
+ return NULL;
+
+ //
+ // Wait for the first thread to set the copyprivate data pointer,
+ // and for all other threads to reach this point.
+ //
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+
+ //
+ // Retrieve the value of the copyprivate data point, and wait for all
+ // threads to do likewise, then return.
+ //
+ retval = __kmp_team_from_gtid(gtid)->t.t_copypriv_data;
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+ return retval;
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_SINGLE_COPY_END)(void *data)
+{
+ int gtid = __kmp_get_gtid();
+ KA_TRACE(20, ("GOMP_single_copy_end: T#%d\n", gtid));
+
+ //
+ // Set the copyprivate data pointer fo the team, then hit the barrier
+ // so that the other threads will continue on and read it. Hit another
+ // barrier before continuing, so that the know that the copyprivate
+ // data pointer has been propagated to all threads before trying to
+ // reuse the t_copypriv_data field.
+ //
+ __kmp_team_from_gtid(gtid)->t.t_copypriv_data = data;
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_ORDERED_START)(void)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_ordered_start");
+ KA_TRACE(20, ("GOMP_ordered_start: T#%d\n", gtid));
+ __kmpc_ordered(&loc, gtid);
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_ORDERED_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_ordered_end");
+ KA_TRACE(20, ("GOMP_ordered_start: T#%d\n", gtid));
+ __kmpc_end_ordered(&loc, gtid);
+}
+
+
+//
+// Dispatch macro defs
+//
+// They come in two flavors: 64-bit unsigned, and either 32-bit signed
+// (IA-32 architecture) or 64-bit signed (Intel(R) 64).
+//
+
+#if KMP_ARCH_X86 || KMP_ARCH_ARM
+# define KMP_DISPATCH_INIT __kmp_aux_dispatch_init_4
+# define KMP_DISPATCH_FINI_CHUNK __kmp_aux_dispatch_fini_chunk_4
+# define KMP_DISPATCH_NEXT __kmpc_dispatch_next_4
+#else
+# define KMP_DISPATCH_INIT __kmp_aux_dispatch_init_8
+# define KMP_DISPATCH_FINI_CHUNK __kmp_aux_dispatch_fini_chunk_8
+# define KMP_DISPATCH_NEXT __kmpc_dispatch_next_8
+#endif /* KMP_ARCH_X86 */
+
+# define KMP_DISPATCH_INIT_ULL __kmp_aux_dispatch_init_8u
+# define KMP_DISPATCH_FINI_CHUNK_ULL __kmp_aux_dispatch_fini_chunk_8u
+# define KMP_DISPATCH_NEXT_ULL __kmpc_dispatch_next_8u
+
+
+//
+// The parallel contruct
+//
+
+#ifndef KMP_DEBUG
+static
+#endif /* KMP_DEBUG */
+void
+__kmp_GOMP_microtask_wrapper(int *gtid, int *npr, void (*task)(void *),
+ void *data)
+{
+#if OMPT_SUPPORT
+ kmp_info_t *thr;
+ ompt_frame_t *ompt_frame;
+ ompt_state_t enclosing_state;
+
+ if (ompt_enabled) {
+ // get pointer to thread data structure
+ thr = __kmp_threads[*gtid];
+
+ // save enclosing task state; set current state for task
+ enclosing_state = thr->th.ompt_thread_info.state;
+ thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+
+ // set task frame
+ ompt_frame = __ompt_get_task_frame_internal(0);
+ ompt_frame->exit_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ task(data);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ // clear task frame
+ ompt_frame->exit_runtime_frame = NULL;
+
+ // restore enclosing state
+ thr->th.ompt_thread_info.state = enclosing_state;
+ }
+#endif
+}
+
+
+#ifndef KMP_DEBUG
+static
+#endif /* KMP_DEBUG */
+void
+__kmp_GOMP_parallel_microtask_wrapper(int *gtid, int *npr,
+ void (*task)(void *), void *data, unsigned num_threads, ident_t *loc,
+ enum sched_type schedule, long start, long end, long incr, long chunk_size)
+{
+ //
+ // Intialize the loop worksharing construct.
+ //
+ KMP_DISPATCH_INIT(loc, *gtid, schedule, start, end, incr, chunk_size,
+ schedule != kmp_sch_static);
+
+#if OMPT_SUPPORT
+ kmp_info_t *thr;
+ ompt_frame_t *ompt_frame;
+ ompt_state_t enclosing_state;
+
+ if (ompt_enabled) {
+ thr = __kmp_threads[*gtid];
+ // save enclosing task state; set current state for task
+ enclosing_state = thr->th.ompt_thread_info.state;
+ thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+
+ // set task frame
+ ompt_frame = __ompt_get_task_frame_internal(0);
+ ompt_frame->exit_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ //
+ // Now invoke the microtask.
+ //
+ task(data);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ // clear task frame
+ ompt_frame->exit_runtime_frame = NULL;
+
+ // reset enclosing state
+ thr->th.ompt_thread_info.state = enclosing_state;
+ }
+#endif
+}
+
+
+#ifndef KMP_DEBUG
+static
+#endif /* KMP_DEBUG */
+void
+__kmp_GOMP_fork_call(ident_t *loc, int gtid, void (*unwrapped_task)(void *), microtask_t wrapper, int argc,...)
+{
+ int rc;
+ kmp_info_t *thr = __kmp_threads[gtid];
+ kmp_team_t *team = thr->th.th_team;
+ int tid = __kmp_tid_from_gtid(gtid);
+
+ va_list ap;
+ va_start(ap, argc);
+
+ rc = __kmp_fork_call(loc, gtid, fork_context_gnu, argc,
+#if OMPT_SUPPORT
+ VOLATILE_CAST(void *) unwrapped_task,
+#endif
+ wrapper, __kmp_invoke_task_func,
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ &ap
+#else
+ ap
+#endif
+ );
+
+ va_end(ap);
+
+ if (rc) {
+ __kmp_run_before_invoked_task(gtid, tid, thr, team);
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_TRACE
+ ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+
+ // implicit task callback
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ team_info->parallel_id, task_info->task_id);
+ }
+#endif
+ thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+ }
+#endif
+}
+
+static void
+__kmp_GOMP_serialized_parallel(ident_t *loc, kmp_int32 gtid, void (*task)(void *))
+{
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id;
+ if (ompt_enabled) {
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ task_info->frame.exit_runtime_frame = NULL;
+
+ ompt_parallel_id = __ompt_parallel_id_new(gtid);
+
+ // parallel region callback
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_begin)) {
+ int team_size = 1;
+ ompt_callbacks.ompt_callback(ompt_event_parallel_begin)(
+ task_info->task_id, &task_info->frame, ompt_parallel_id,
+ team_size, (void *) task,
+ OMPT_INVOKER(fork_context_gnu));
+ }
+ }
+#endif
+
+ __kmp_serialized_parallel(loc, gtid);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ kmp_info_t *thr = __kmp_threads[gtid];
+
+ ompt_task_id_t my_ompt_task_id = __ompt_task_id_new(gtid);
+
+ // set up lightweight task
+ ompt_lw_taskteam_t *lwt = (ompt_lw_taskteam_t *)
+ __kmp_allocate(sizeof(ompt_lw_taskteam_t));
+ __ompt_lw_taskteam_init(lwt, thr, gtid, (void *) task, ompt_parallel_id);
+ lwt->ompt_task_info.task_id = my_ompt_task_id;
+ lwt->ompt_task_info.frame.exit_runtime_frame = 0;
+ __ompt_lw_taskteam_link(lwt, thr);
+
+#if OMPT_TRACE
+ // implicit task callback
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ ompt_parallel_id, my_ompt_task_id);
+ }
+ thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+#endif
+ }
+#endif
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_PARALLEL_START)(void (*task)(void *), void *data, unsigned num_threads)
+{
+ int gtid = __kmp_entry_gtid();
+
+#if OMPT_SUPPORT
+ ompt_frame_t *parent_frame;
+
+ if (ompt_enabled) {
+ parent_frame = __ompt_get_task_frame_internal(0);
+ parent_frame->reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ MKLOC(loc, "GOMP_parallel_start");
+ KA_TRACE(20, ("GOMP_parallel_start: T#%d\n", gtid));
+
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) {
+ if (num_threads != 0) {
+ __kmp_push_num_threads(&loc, gtid, num_threads);
+ }
+ __kmp_GOMP_fork_call(&loc, gtid, task,
+ (microtask_t)__kmp_GOMP_microtask_wrapper, 2, task, data);
+ }
+ else {
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task);
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ parent_frame->reenter_runtime_frame = NULL;
+ }
+#endif
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_PARALLEL_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ kmp_info_t *thr;
+
+ thr = __kmp_threads[gtid];
+
+ MKLOC(loc, "GOMP_parallel_end");
+ KA_TRACE(20, ("GOMP_parallel_end: T#%d\n", gtid));
+
+
+#if OMPT_SUPPORT
+ ompt_parallel_id_t parallel_id;
+ ompt_task_id_t serialized_task_id;
+ ompt_frame_t *ompt_frame = NULL;
+
+ if (ompt_enabled) {
+ ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
+ parallel_id = team_info->parallel_id;
+
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ serialized_task_id = task_info->task_id;
+
+ // Record that we re-entered the runtime system in the implicit
+ // task frame representing the parallel region.
+ ompt_frame = &task_info->frame;
+ ompt_frame->reenter_runtime_frame = __builtin_frame_address(0);
+
+ // unlink if necessary. no-op if there is not a lightweight task.
+ ompt_lw_taskteam_t *lwt = __ompt_lw_taskteam_unlink(thr);
+ // GOMP allocates/frees lwt since it can't be kept on the stack
+ if (lwt) {
+ __kmp_free(lwt);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ // Since a lightweight task was destroyed, make sure that the
+ // remaining deepest task knows the stack frame where the runtime
+ // was reentered.
+ ompt_frame = __ompt_get_task_frame_internal(0);
+ ompt_frame->reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+ }
+ }
+#endif
+
+ if (! thr->th.th_team->t.t_serialized) {
+ __kmp_run_after_invoked_task(gtid, __kmp_tid_from_gtid(gtid), thr,
+ thr->th.th_team);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ // Set reenter frame in parent task, which will become current task
+ // in the midst of join. This is needed before the end_parallel callback.
+ ompt_frame = __ompt_get_task_frame_internal(1);
+ ompt_frame->reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ __kmp_join_call(&loc, gtid
+#if OMPT_SUPPORT
+ , fork_context_gnu
+#endif
+ );
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ ompt_frame->reenter_runtime_frame = NULL;
+ }
+#endif
+ }
+ else {
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ parallel_id, serialized_task_id);
+ }
+#endif
+
+ __kmpc_end_serialized_parallel(&loc, gtid);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ // Record that we re-entered the runtime system in the frame that
+ // created the parallel region.
+ ompt_frame->reenter_runtime_frame = __builtin_frame_address(0);
+
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_end)) {
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ ompt_callbacks.ompt_callback(ompt_event_parallel_end)(
+ parallel_id, task_info->task_id,
+ OMPT_INVOKER(fork_context_gnu));
+ }
+
+ ompt_frame->reenter_runtime_frame = NULL;
+
+ thr->th.ompt_thread_info.state =
+ (((thr->th.th_team)->t.t_serialized) ?
+ ompt_state_work_serial : ompt_state_work_parallel);
+ }
+#endif
+ }
+}
+
+
+//
+// Loop worksharing constructs
+//
+
+//
+// The Gnu codegen passes in an exclusive upper bound for the overall range,
+// but the libguide dispatch code expects an inclusive upper bound, hence the
+// "end - incr" 5th argument to KMP_DISPATCH_INIT (and the " ub - str" 11th
+// argument to __kmp_GOMP_fork_call).
+//
+// Conversely, KMP_DISPATCH_NEXT returns and inclusive upper bound in *p_ub,
+// but the Gnu codegen expects an excluside upper bound, so the adjustment
+// "*p_ub += stride" compenstates for the discrepancy.
+//
+// Correction: the gnu codegen always adjusts the upper bound by +-1, not the
+// stride value. We adjust the dispatch parameters accordingly (by +-1), but
+// we still adjust p_ub by the actual stride value.
+//
+// The "runtime" versions do not take a chunk_sz parameter.
+//
+// The profile lib cannot support construct checking of unordered loops that
+// are predetermined by the compiler to be statically scheduled, as the gcc
+// codegen will not always emit calls to GOMP_loop_static_next() to get the
+// next iteration. Instead, it emits inline code to call omp_get_thread_num()
+// num and calculate the iteration space using the result. It doesn't do this
+// with ordered static loop, so they can be checked.
+//
+
+#define LOOP_START(func,schedule) \
+ int func (long lb, long ub, long str, long chunk_sz, long *p_lb, \
+ long *p_ub) \
+ { \
+ int status; \
+ long stride; \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
+ gtid, lb, ub, str, chunk_sz )); \
+ \
+ if ((str > 0) ? (lb < ub) : (lb > ub)) { \
+ KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
+ (schedule) != kmp_sch_static); \
+ status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
+ (kmp_int *)p_ub, (kmp_int *)&stride); \
+ if (status) { \
+ KMP_DEBUG_ASSERT(stride == str); \
+ *p_ub += (str > 0) ? 1 : -1; \
+ } \
+ } \
+ else { \
+ status = 0; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
+ gtid, *p_lb, *p_ub, status)); \
+ return status; \
+ }
+
+
+#define LOOP_RUNTIME_START(func,schedule) \
+ int func (long lb, long ub, long str, long *p_lb, long *p_ub) \
+ { \
+ int status; \
+ long stride; \
+ long chunk_sz = 0; \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz %d\n", \
+ gtid, lb, ub, str, chunk_sz )); \
+ \
+ if ((str > 0) ? (lb < ub) : (lb > ub)) { \
+ KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, TRUE); \
+ status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
+ (kmp_int *)p_ub, (kmp_int *)&stride); \
+ if (status) { \
+ KMP_DEBUG_ASSERT(stride == str); \
+ *p_ub += (str > 0) ? 1 : -1; \
+ } \
+ } \
+ else { \
+ status = 0; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
+ gtid, *p_lb, *p_ub, status)); \
+ return status; \
+ }
+
+
+#define LOOP_NEXT(func,fini_code) \
+ int func(long *p_lb, long *p_ub) \
+ { \
+ int status; \
+ long stride; \
+ int gtid = __kmp_get_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d\n", gtid)); \
+ \
+ fini_code \
+ status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
+ (kmp_int *)p_ub, (kmp_int *)&stride); \
+ if (status) { \
+ *p_ub += (stride > 0) ? 1 : -1; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, stride 0x%lx, " \
+ "returning %d\n", gtid, *p_lb, *p_ub, stride, status)); \
+ return status; \
+ }
+
+
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_STATIC_START), kmp_sch_static)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_STATIC_NEXT), {})
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_DYNAMIC_START), kmp_sch_dynamic_chunked)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_DYNAMIC_NEXT), {})
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_GUIDED_START), kmp_sch_guided_chunked)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_GUIDED_NEXT), {})
+LOOP_RUNTIME_START(xexpand(KMP_API_NAME_GOMP_LOOP_RUNTIME_START), kmp_sch_runtime)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_RUNTIME_NEXT), {})
+
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_START), kmp_ord_static)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK(&loc, gtid); })
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_START), kmp_ord_dynamic_chunked)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK(&loc, gtid); })
+LOOP_START(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_START), kmp_ord_guided_chunked)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK(&loc, gtid); })
+LOOP_RUNTIME_START(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_START), kmp_ord_runtime)
+LOOP_NEXT(xexpand(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK(&loc, gtid); })
+
+
+void
+xexpand(KMP_API_NAME_GOMP_LOOP_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ KA_TRACE(20, ("GOMP_loop_end: T#%d\n", gtid))
+
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+
+ KA_TRACE(20, ("GOMP_loop_end exit: T#%d\n", gtid))
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_LOOP_END_NOWAIT)(void)
+{
+ KA_TRACE(20, ("GOMP_loop_end_nowait: T#%d\n", __kmp_get_gtid()))
+}
+
+
+//
+// Unsigned long long loop worksharing constructs
+//
+// These are new with gcc 4.4
+//
+
+#define LOOP_START_ULL(func,schedule) \
+ int func (int up, unsigned long long lb, unsigned long long ub, \
+ unsigned long long str, unsigned long long chunk_sz, \
+ unsigned long long *p_lb, unsigned long long *p_ub) \
+ { \
+ int status; \
+ long long str2 = up ? ((long long)str) : -((long long)str); \
+ long long stride; \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ \
+ KA_TRACE(20, ( #func ": T#%d, up %d, lb 0x%llx, ub 0x%llx, str 0x%llx, chunk_sz 0x%llx\n", \
+ gtid, up, lb, ub, str, chunk_sz )); \
+ \
+ if ((str > 0) ? (lb < ub) : (lb > ub)) { \
+ KMP_DISPATCH_INIT_ULL(&loc, gtid, (schedule), lb, \
+ (str2 > 0) ? (ub - 1) : (ub + 1), str2, chunk_sz, \
+ (schedule) != kmp_sch_static); \
+ status = KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, \
+ (kmp_uint64 *)p_lb, (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
+ if (status) { \
+ KMP_DEBUG_ASSERT(stride == str2); \
+ *p_ub += (str > 0) ? 1 : -1; \
+ } \
+ } \
+ else { \
+ status = 0; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
+ gtid, *p_lb, *p_ub, status)); \
+ return status; \
+ }
+
+
+#define LOOP_RUNTIME_START_ULL(func,schedule) \
+ int func (int up, unsigned long long lb, unsigned long long ub, \
+ unsigned long long str, unsigned long long *p_lb, \
+ unsigned long long *p_ub) \
+ { \
+ int status; \
+ long long str2 = up ? ((long long)str) : -((long long)str); \
+ unsigned long long stride; \
+ unsigned long long chunk_sz = 0; \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ \
+ KA_TRACE(20, ( #func ": T#%d, up %d, lb 0x%llx, ub 0x%llx, str 0x%llx, chunk_sz 0x%llx\n", \
+ gtid, up, lb, ub, str, chunk_sz )); \
+ \
+ if ((str > 0) ? (lb < ub) : (lb > ub)) { \
+ KMP_DISPATCH_INIT_ULL(&loc, gtid, (schedule), lb, \
+ (str2 > 0) ? (ub - 1) : (ub + 1), str2, chunk_sz, TRUE); \
+ status = KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, \
+ (kmp_uint64 *)p_lb, (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
+ if (status) { \
+ KMP_DEBUG_ASSERT((long long)stride == str2); \
+ *p_ub += (str > 0) ? 1 : -1; \
+ } \
+ } \
+ else { \
+ status = 0; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
+ gtid, *p_lb, *p_ub, status)); \
+ return status; \
+ }
+
+
+#define LOOP_NEXT_ULL(func,fini_code) \
+ int func(unsigned long long *p_lb, unsigned long long *p_ub) \
+ { \
+ int status; \
+ long long stride; \
+ int gtid = __kmp_get_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d\n", gtid)); \
+ \
+ fini_code \
+ status = KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, (kmp_uint64 *)p_lb, \
+ (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
+ if (status) { \
+ *p_ub += (stride > 0) ? 1 : -1; \
+ } \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, stride 0x%llx, " \
+ "returning %d\n", gtid, *p_lb, *p_ub, stride, status)); \
+ return status; \
+ }
+
+
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_START), kmp_sch_static)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_NEXT), {})
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_START), kmp_sch_dynamic_chunked)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_NEXT), {})
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_START), kmp_sch_guided_chunked)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_NEXT), {})
+LOOP_RUNTIME_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_START), kmp_sch_runtime)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_NEXT), {})
+
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_START), kmp_ord_static)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK_ULL(&loc, gtid); })
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START), kmp_ord_dynamic_chunked)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK_ULL(&loc, gtid); })
+LOOP_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_START), kmp_ord_guided_chunked)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK_ULL(&loc, gtid); })
+LOOP_RUNTIME_START_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_START), kmp_ord_runtime)
+LOOP_NEXT_ULL(xexpand(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT), \
+ { KMP_DISPATCH_FINI_CHUNK_ULL(&loc, gtid); })
+
+
+//
+// Combined parallel / loop worksharing constructs
+//
+// There are no ull versions (yet).
+//
+
+#define PARALLEL_LOOP_START(func, schedule, ompt_pre, ompt_post) \
+ void func (void (*task) (void *), void *data, unsigned num_threads, \
+ long lb, long ub, long str, long chunk_sz) \
+ { \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
+ gtid, lb, ub, str, chunk_sz )); \
+ \
+ ompt_pre(); \
+ \
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) { \
+ if (num_threads != 0) { \
+ __kmp_push_num_threads(&loc, gtid, num_threads); \
+ } \
+ __kmp_GOMP_fork_call(&loc, gtid, task, \
+ (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, 9, \
+ task, data, num_threads, &loc, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz); \
+ } \
+ else { \
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task); \
+ } \
+ \
+ KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
+ (schedule) != kmp_sch_static); \
+ \
+ ompt_post(); \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d\n", gtid)); \
+ }
+
+
+
+#if OMPT_SUPPORT
+
+#define OMPT_LOOP_PRE() \
+ ompt_frame_t *parent_frame; \
+ if (ompt_enabled) { \
+ parent_frame = __ompt_get_task_frame_internal(0); \
+ parent_frame->reenter_runtime_frame = __builtin_frame_address(0); \
+ }
+
+
+#define OMPT_LOOP_POST() \
+ if (ompt_enabled) { \
+ parent_frame->reenter_runtime_frame = NULL; \
+ }
+
+#else
+
+#define OMPT_LOOP_PRE()
+
+#define OMPT_LOOP_POST()
+
+#endif
+
+
+PARALLEL_LOOP_START(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC_START),
+ kmp_sch_static, OMPT_LOOP_PRE, OMPT_LOOP_POST)
+PARALLEL_LOOP_START(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC_START),
+ kmp_sch_dynamic_chunked, OMPT_LOOP_PRE, OMPT_LOOP_POST)
+PARALLEL_LOOP_START(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED_START),
+ kmp_sch_guided_chunked, OMPT_LOOP_PRE, OMPT_LOOP_POST)
+PARALLEL_LOOP_START(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START),
+ kmp_sch_runtime, OMPT_LOOP_PRE, OMPT_LOOP_POST)
+
+
+//
+// Tasking constructs
+//
+
+void
+xexpand(KMP_API_NAME_GOMP_TASK)(void (*func)(void *), void *data, void (*copy_func)(void *, void *),
+ long arg_size, long arg_align, bool if_cond, unsigned gomp_flags)
+{
+ MKLOC(loc, "GOMP_task");
+ int gtid = __kmp_entry_gtid();
+ kmp_int32 flags = 0;
+ kmp_tasking_flags_t *input_flags = (kmp_tasking_flags_t *) & flags;
+
+ KA_TRACE(20, ("GOMP_task: T#%d\n", gtid));
+
+ // The low-order bit is the "tied" flag
+ if (gomp_flags & 1) {
+ input_flags->tiedness = 1;
+ }
+ // The second low-order bit is the "final" flag
+ if (gomp_flags & 2) {
+ input_flags->final = 1;
+ }
+ input_flags->native = 1;
+ // __kmp_task_alloc() sets up all other flags
+
+ if (! if_cond) {
+ arg_size = 0;
+ }
+
+ kmp_task_t *task = __kmp_task_alloc(&loc, gtid, input_flags,
+ sizeof(kmp_task_t), arg_size ? arg_size + arg_align - 1 : 0,
+ (kmp_routine_entry_t)func);
+
+ if (arg_size > 0) {
+ if (arg_align > 0) {
+ task->shareds = (void *)((((size_t)task->shareds)
+ + arg_align - 1) / arg_align * arg_align);
+ }
+ //else error??
+
+ if (copy_func) {
+ (*copy_func)(task->shareds, data);
+ }
+ else {
+ KMP_MEMCPY(task->shareds, data, arg_size);
+ }
+ }
+
+ if (if_cond) {
+ __kmpc_omp_task(&loc, gtid, task);
+ }
+ else {
+#if OMPT_SUPPORT
+ ompt_thread_info_t oldInfo;
+ kmp_info_t *thread;
+ kmp_taskdata_t *taskdata;
+ if (ompt_enabled) {
+ // Store the threads states and restore them after the task
+ thread = __kmp_threads[ gtid ];
+ taskdata = KMP_TASK_TO_TASKDATA(task);
+ oldInfo = thread->th.ompt_thread_info;
+ thread->th.ompt_thread_info.wait_id = 0;
+ thread->th.ompt_thread_info.state = ompt_state_work_parallel;
+ taskdata->ompt_task_info.frame.exit_runtime_frame =
+ __builtin_frame_address(0);
+ }
+#endif
+
+ __kmpc_omp_task_begin_if0(&loc, gtid, task);
+ func(data);
+ __kmpc_omp_task_complete_if0(&loc, gtid, task);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ thread->th.ompt_thread_info = oldInfo;
+ taskdata->ompt_task_info.frame.exit_runtime_frame = 0;
+ }
+#endif
+ }
+
+ KA_TRACE(20, ("GOMP_task exit: T#%d\n", gtid));
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_TASKWAIT)(void)
+{
+ MKLOC(loc, "GOMP_taskwait");
+ int gtid = __kmp_entry_gtid();
+
+ KA_TRACE(20, ("GOMP_taskwait: T#%d\n", gtid));
+
+ __kmpc_omp_taskwait(&loc, gtid);
+
+ KA_TRACE(20, ("GOMP_taskwait exit: T#%d\n", gtid));
+}
+
+
+//
+// Sections worksharing constructs
+//
+
+//
+// For the sections construct, we initialize a dynamically scheduled loop
+// worksharing construct with lb 1 and stride 1, and use the iteration #'s
+// that its returns as sections ids.
+//
+// There are no special entry points for ordered sections, so we always use
+// the dynamically scheduled workshare, even if the sections aren't ordered.
+//
+
+unsigned
+xexpand(KMP_API_NAME_GOMP_SECTIONS_START)(unsigned count)
+{
+ int status;
+ kmp_int lb, ub, stride;
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_sections_start");
+ KA_TRACE(20, ("GOMP_sections_start: T#%d\n", gtid));
+
+ KMP_DISPATCH_INIT(&loc, gtid, kmp_nm_dynamic_chunked, 1, count, 1, 1, TRUE);
+
+ status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, &lb, &ub, &stride);
+ if (status) {
+ KMP_DEBUG_ASSERT(stride == 1);
+ KMP_DEBUG_ASSERT(lb > 0);
+ KMP_ASSERT(lb == ub);
+ }
+ else {
+ lb = 0;
+ }
+
+ KA_TRACE(20, ("GOMP_sections_start exit: T#%d returning %u\n", gtid,
+ (unsigned)lb));
+ return (unsigned)lb;
+}
+
+
+unsigned
+xexpand(KMP_API_NAME_GOMP_SECTIONS_NEXT)(void)
+{
+ int status;
+ kmp_int lb, ub, stride;
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_sections_next");
+ KA_TRACE(20, ("GOMP_sections_next: T#%d\n", gtid));
+
+ status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, &lb, &ub, &stride);
+ if (status) {
+ KMP_DEBUG_ASSERT(stride == 1);
+ KMP_DEBUG_ASSERT(lb > 0);
+ KMP_ASSERT(lb == ub);
+ }
+ else {
+ lb = 0;
+ }
+
+ KA_TRACE(20, ("GOMP_sections_next exit: T#%d returning %u\n", gtid,
+ (unsigned)lb));
+ return (unsigned)lb;
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_PARALLEL_SECTIONS_START)(void (*task) (void *), void *data,
+ unsigned num_threads, unsigned count)
+{
+ int gtid = __kmp_entry_gtid();
+
+#if OMPT_SUPPORT
+ ompt_frame_t *parent_frame;
+
+ if (ompt_enabled) {
+ parent_frame = __ompt_get_task_frame_internal(0);
+ parent_frame->reenter_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+ MKLOC(loc, "GOMP_parallel_sections_start");
+ KA_TRACE(20, ("GOMP_parallel_sections_start: T#%d\n", gtid));
+
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) {
+ if (num_threads != 0) {
+ __kmp_push_num_threads(&loc, gtid, num_threads);
+ }
+ __kmp_GOMP_fork_call(&loc, gtid, task,
+ (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, 9, task, data,
+ num_threads, &loc, kmp_nm_dynamic_chunked, (kmp_int)1,
+ (kmp_int)count, (kmp_int)1, (kmp_int)1);
+ }
+ else {
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task);
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ parent_frame->reenter_runtime_frame = NULL;
+ }
+#endif
+
+ KMP_DISPATCH_INIT(&loc, gtid, kmp_nm_dynamic_chunked, 1, count, 1, 1, TRUE);
+
+ KA_TRACE(20, ("GOMP_parallel_sections_start exit: T#%d\n", gtid));
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_SECTIONS_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ KA_TRACE(20, ("GOMP_sections_end: T#%d\n", gtid))
+
+ __kmp_barrier(bs_plain_barrier, gtid, FALSE, 0, NULL, NULL);
+
+ KA_TRACE(20, ("GOMP_sections_end exit: T#%d\n", gtid))
+}
+
+
+void
+xexpand(KMP_API_NAME_GOMP_SECTIONS_END_NOWAIT)(void)
+{
+ KA_TRACE(20, ("GOMP_sections_end_nowait: T#%d\n", __kmp_get_gtid()))
+}
+
+// libgomp has an empty function for GOMP_taskyield as of 2013-10-10
+void
+xexpand(KMP_API_NAME_GOMP_TASKYIELD)(void)
+{
+ KA_TRACE(20, ("GOMP_taskyield: T#%d\n", __kmp_get_gtid()))
+ return;
+}
+
+#if OMP_40_ENABLED // these are new GOMP_4.0 entry points
+
+void
+xexpand(KMP_API_NAME_GOMP_PARALLEL)(void (*task)(void *), void *data, unsigned num_threads, unsigned int flags)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_parallel");
+ KA_TRACE(20, ("GOMP_parallel: T#%d\n", gtid));
+
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) {
+ if (num_threads != 0) {
+ __kmp_push_num_threads(&loc, gtid, num_threads);
+ }
+ if(flags != 0) {
+ __kmp_push_proc_bind(&loc, gtid, (kmp_proc_bind_t)flags);
+ }
+ __kmp_GOMP_fork_call(&loc, gtid, task,
+ (microtask_t)__kmp_GOMP_microtask_wrapper, 2, task, data);
+ }
+ else {
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task);
+ }
+ task(data);
+ xexpand(KMP_API_NAME_GOMP_PARALLEL_END)();
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_PARALLEL_SECTIONS)(void (*task) (void *), void *data,
+ unsigned num_threads, unsigned count, unsigned flags)
+{
+ int gtid = __kmp_entry_gtid();
+ MKLOC(loc, "GOMP_parallel_sections");
+ KA_TRACE(20, ("GOMP_parallel_sections: T#%d\n", gtid));
+
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) {
+ if (num_threads != 0) {
+ __kmp_push_num_threads(&loc, gtid, num_threads);
+ }
+ if(flags != 0) {
+ __kmp_push_proc_bind(&loc, gtid, (kmp_proc_bind_t)flags);
+ }
+ __kmp_GOMP_fork_call(&loc, gtid, task,
+ (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, 9, task, data,
+ num_threads, &loc, kmp_nm_dynamic_chunked, (kmp_int)1,
+ (kmp_int)count, (kmp_int)1, (kmp_int)1);
+ }
+ else {
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task);
+ }
+
+ KMP_DISPATCH_INIT(&loc, gtid, kmp_nm_dynamic_chunked, 1, count, 1, 1, TRUE);
+
+ task(data);
+ xexpand(KMP_API_NAME_GOMP_PARALLEL_END)();
+ KA_TRACE(20, ("GOMP_parallel_sections exit: T#%d\n", gtid));
+}
+
+#define PARALLEL_LOOP(func, schedule) \
+ void func (void (*task) (void *), void *data, unsigned num_threads, \
+ long lb, long ub, long str, long chunk_sz, unsigned flags) \
+ { \
+ int gtid = __kmp_entry_gtid(); \
+ MKLOC(loc, #func); \
+ KA_TRACE(20, ( #func ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
+ gtid, lb, ub, str, chunk_sz )); \
+ \
+ if (__kmpc_ok_to_fork(&loc) && (num_threads != 1)) { \
+ if (num_threads != 0) { \
+ __kmp_push_num_threads(&loc, gtid, num_threads); \
+ } \
+ if (flags != 0) { \
+ __kmp_push_proc_bind(&loc, gtid, (kmp_proc_bind_t)flags); \
+ } \
+ __kmp_GOMP_fork_call(&loc, gtid, task, \
+ (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, 9, \
+ task, data, num_threads, &loc, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz); \
+ } \
+ else { \
+ __kmp_GOMP_serialized_parallel(&loc, gtid, task); \
+ } \
+ \
+ KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
+ (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
+ (schedule) != kmp_sch_static); \
+ task(data); \
+ xexpand(KMP_API_NAME_GOMP_PARALLEL_END)(); \
+ \
+ KA_TRACE(20, ( #func " exit: T#%d\n", gtid)); \
+ }
+
+PARALLEL_LOOP(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC), kmp_sch_static)
+PARALLEL_LOOP(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC), kmp_sch_dynamic_chunked)
+PARALLEL_LOOP(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED), kmp_sch_guided_chunked)
+PARALLEL_LOOP(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME), kmp_sch_runtime)
+
+
+void
+xexpand(KMP_API_NAME_GOMP_TASKGROUP_START)(void)
+{
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_taskgroup_start");
+ KA_TRACE(20, ("GOMP_taskgroup_start: T#%d\n", gtid));
+
+ __kmpc_taskgroup(&loc, gtid);
+
+ return;
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_TASKGROUP_END)(void)
+{
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_taskgroup_end");
+ KA_TRACE(20, ("GOMP_taskgroup_end: T#%d\n", gtid));
+
+ __kmpc_end_taskgroup(&loc, gtid);
+
+ return;
+}
+
+#ifndef KMP_DEBUG
+static
+#endif /* KMP_DEBUG */
+kmp_int32 __kmp_gomp_to_omp_cancellation_kind(int gomp_kind) {
+ kmp_int32 cncl_kind = 0;
+ switch(gomp_kind) {
+ case 1:
+ cncl_kind = cancel_parallel;
+ break;
+ case 2:
+ cncl_kind = cancel_loop;
+ break;
+ case 4:
+ cncl_kind = cancel_sections;
+ break;
+ case 8:
+ cncl_kind = cancel_taskgroup;
+ break;
+ }
+ return cncl_kind;
+}
+
+bool
+xexpand(KMP_API_NAME_GOMP_CANCELLATION_POINT)(int which)
+{
+ if(__kmp_omp_cancellation) {
+ KMP_FATAL(NoGompCancellation);
+ }
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_cancellation_point");
+ KA_TRACE(20, ("GOMP_cancellation_point: T#%d\n", gtid));
+
+ kmp_int32 cncl_kind = __kmp_gomp_to_omp_cancellation_kind(which);
+
+ return __kmpc_cancellationpoint(&loc, gtid, cncl_kind);
+}
+
+bool
+xexpand(KMP_API_NAME_GOMP_BARRIER_CANCEL)(void)
+{
+ if(__kmp_omp_cancellation) {
+ KMP_FATAL(NoGompCancellation);
+ }
+ KMP_FATAL(NoGompCancellation);
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_barrier_cancel");
+ KA_TRACE(20, ("GOMP_barrier_cancel: T#%d\n", gtid));
+
+ return __kmpc_cancel_barrier(&loc, gtid);
+}
+
+bool
+xexpand(KMP_API_NAME_GOMP_CANCEL)(int which, bool do_cancel)
+{
+ if(__kmp_omp_cancellation) {
+ KMP_FATAL(NoGompCancellation);
+ } else {
+ return FALSE;
+ }
+
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_cancel");
+ KA_TRACE(20, ("GOMP_cancel: T#%d\n", gtid));
+
+ kmp_int32 cncl_kind = __kmp_gomp_to_omp_cancellation_kind(which);
+
+ if(do_cancel == FALSE) {
+ return xexpand(KMP_API_NAME_GOMP_CANCELLATION_POINT)(which);
+ } else {
+ return __kmpc_cancel(&loc, gtid, cncl_kind);
+ }
+}
+
+bool
+xexpand(KMP_API_NAME_GOMP_SECTIONS_END_CANCEL)(void)
+{
+ if(__kmp_omp_cancellation) {
+ KMP_FATAL(NoGompCancellation);
+ }
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_sections_end_cancel");
+ KA_TRACE(20, ("GOMP_sections_end_cancel: T#%d\n", gtid));
+
+ return __kmpc_cancel_barrier(&loc, gtid);
+}
+
+bool
+xexpand(KMP_API_NAME_GOMP_LOOP_END_CANCEL)(void)
+{
+ if(__kmp_omp_cancellation) {
+ KMP_FATAL(NoGompCancellation);
+ }
+ int gtid = __kmp_get_gtid();
+ MKLOC(loc, "GOMP_loop_end_cancel");
+ KA_TRACE(20, ("GOMP_loop_end_cancel: T#%d\n", gtid));
+
+ return __kmpc_cancel_barrier(&loc, gtid);
+}
+
+// All target functions are empty as of 2014-05-29
+void
+xexpand(KMP_API_NAME_GOMP_TARGET)(int device, void (*fn) (void *), const void *openmp_target,
+ size_t mapnum, void **hostaddrs, size_t *sizes, unsigned char *kinds)
+{
+ return;
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_TARGET_DATA)(int device, const void *openmp_target, size_t mapnum,
+ void **hostaddrs, size_t *sizes, unsigned char *kinds)
+{
+ return;
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_TARGET_END_DATA)(void)
+{
+ return;
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_TARGET_UPDATE)(int device, const void *openmp_target, size_t mapnum,
+ void **hostaddrs, size_t *sizes, unsigned char *kinds)
+{
+ return;
+}
+
+void
+xexpand(KMP_API_NAME_GOMP_TEAMS)(unsigned int num_teams, unsigned int thread_limit)
+{
+ return;
+}
+#endif // OMP_40_ENABLED
+
+
+/*
+ The following sections of code create aliases for the GOMP_* functions,
+ then create versioned symbols using the assembler directive .symver.
+ This is only pertinent for ELF .so library
+ xaliasify and xversionify are defined in kmp_ftn_os.h
+*/
+
+#ifdef KMP_USE_VERSION_SYMBOLS
+
+// GOMP_1.0 aliases
+xaliasify(KMP_API_NAME_GOMP_ATOMIC_END, 10);
+xaliasify(KMP_API_NAME_GOMP_ATOMIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_BARRIER, 10);
+xaliasify(KMP_API_NAME_GOMP_CRITICAL_END, 10);
+xaliasify(KMP_API_NAME_GOMP_CRITICAL_NAME_END, 10);
+xaliasify(KMP_API_NAME_GOMP_CRITICAL_NAME_START, 10);
+xaliasify(KMP_API_NAME_GOMP_CRITICAL_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_DYNAMIC_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_DYNAMIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_END, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_END_NOWAIT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_GUIDED_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_GUIDED_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_RUNTIME_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_RUNTIME_START, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_STATIC_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_LOOP_STATIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_ORDERED_END, 10);
+xaliasify(KMP_API_NAME_GOMP_ORDERED_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_END, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_SECTIONS_START, 10);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_START, 10);
+xaliasify(KMP_API_NAME_GOMP_SECTIONS_END, 10);
+xaliasify(KMP_API_NAME_GOMP_SECTIONS_END_NOWAIT, 10);
+xaliasify(KMP_API_NAME_GOMP_SECTIONS_NEXT, 10);
+xaliasify(KMP_API_NAME_GOMP_SECTIONS_START, 10);
+xaliasify(KMP_API_NAME_GOMP_SINGLE_COPY_END, 10);
+xaliasify(KMP_API_NAME_GOMP_SINGLE_COPY_START, 10);
+xaliasify(KMP_API_NAME_GOMP_SINGLE_START, 10);
+
+// GOMP_2.0 aliases
+xaliasify(KMP_API_NAME_GOMP_TASK, 20);
+xaliasify(KMP_API_NAME_GOMP_TASKWAIT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_START, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_NEXT, 20);
+xaliasify(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_START, 20);
+
+// GOMP_3.0 aliases
+xaliasify(KMP_API_NAME_GOMP_TASKYIELD, 30);
+
+// GOMP_4.0 aliases
+// The GOMP_parallel* entry points below aren't OpenMP 4.0 related.
+#if OMP_40_ENABLED
+xaliasify(KMP_API_NAME_GOMP_PARALLEL, 40);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_SECTIONS, 40);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC, 40);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED, 40);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME, 40);
+xaliasify(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC, 40);
+xaliasify(KMP_API_NAME_GOMP_TASKGROUP_START, 40);
+xaliasify(KMP_API_NAME_GOMP_TASKGROUP_END, 40);
+xaliasify(KMP_API_NAME_GOMP_BARRIER_CANCEL, 40);
+xaliasify(KMP_API_NAME_GOMP_CANCEL, 40);
+xaliasify(KMP_API_NAME_GOMP_CANCELLATION_POINT, 40);
+xaliasify(KMP_API_NAME_GOMP_LOOP_END_CANCEL, 40);
+xaliasify(KMP_API_NAME_GOMP_SECTIONS_END_CANCEL, 40);
+xaliasify(KMP_API_NAME_GOMP_TARGET, 40);
+xaliasify(KMP_API_NAME_GOMP_TARGET_DATA, 40);
+xaliasify(KMP_API_NAME_GOMP_TARGET_END_DATA, 40);
+xaliasify(KMP_API_NAME_GOMP_TARGET_UPDATE, 40);
+xaliasify(KMP_API_NAME_GOMP_TEAMS, 40);
+#endif
+
+// GOMP_1.0 versioned symbols
+xversionify(KMP_API_NAME_GOMP_ATOMIC_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_ATOMIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_BARRIER, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_CRITICAL_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_CRITICAL_NAME_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_CRITICAL_NAME_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_CRITICAL_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_DYNAMIC_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_DYNAMIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_END_NOWAIT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_GUIDED_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_GUIDED_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_RUNTIME_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_RUNTIME_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_STATIC_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_STATIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_ORDERED_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_ORDERED_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_SECTIONS_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SECTIONS_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SECTIONS_END_NOWAIT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SECTIONS_NEXT, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SECTIONS_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SINGLE_COPY_END, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SINGLE_COPY_START, 10, "GOMP_1.0");
+xversionify(KMP_API_NAME_GOMP_SINGLE_START, 10, "GOMP_1.0");
+
+// GOMP_2.0 versioned symbols
+xversionify(KMP_API_NAME_GOMP_TASK, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_TASKWAIT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_START, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_NEXT, 20, "GOMP_2.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_ULL_STATIC_START, 20, "GOMP_2.0");
+
+// GOMP_3.0 versioned symbols
+xversionify(KMP_API_NAME_GOMP_TASKYIELD, 30, "GOMP_3.0");
+
+// GOMP_4.0 versioned symbols
+#if OMP_40_ENABLED
+xversionify(KMP_API_NAME_GOMP_PARALLEL, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_SECTIONS, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TASKGROUP_START, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TASKGROUP_END, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_BARRIER_CANCEL, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_CANCEL, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_CANCELLATION_POINT, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_LOOP_END_CANCEL, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_SECTIONS_END_CANCEL, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TARGET, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TARGET_DATA, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TARGET_END_DATA, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TARGET_UPDATE, 40, "GOMP_4.0");
+xversionify(KMP_API_NAME_GOMP_TEAMS, 40, "GOMP_4.0");
+#endif
+
+#endif // KMP_USE_VERSION_SYMBOLS
+
+#ifdef __cplusplus
+ } //extern "C"
+#endif // __cplusplus
+
+
diff --git a/final/runtime/src/kmp_i18n.c b/final/runtime/src/kmp_i18n.c
new file mode 100644
index 0000000..8dad255
--- /dev/null
+++ b/final/runtime/src/kmp_i18n.c
@@ -0,0 +1,974 @@
+/*
+ * kmp_i18n.c
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+
+#include "kmp_i18n.h"
+
+#include "kmp_os.h"
+#include "kmp_debug.h"
+#include "kmp.h"
+#include "kmp_lock.h"
+#include "kmp_io.h" // __kmp_printf.
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <locale.h>
+#include <stdarg.h>
+
+#include "kmp_i18n_default.inc"
+#include "kmp_str.h"
+#include "kmp_environment.h"
+
+#undef KMP_I18N_OK
+
+#define get_section( id ) ( (id) >> 16 )
+#define get_number( id ) ( (id) & 0xFFFF )
+
+kmp_msg_t __kmp_msg_empty = { kmp_mt_dummy, 0, "", 0 };
+kmp_msg_t __kmp_msg_null = { kmp_mt_dummy, 0, NULL, 0 };
+static char const * no_message_available = "(No message available)";
+
+enum kmp_i18n_cat_status {
+ KMP_I18N_CLOSED, // Not yet opened or closed.
+ KMP_I18N_OPENED, // Opened successfully, ready to use.
+ KMP_I18N_ABSENT // Opening failed, message catalog should not be used.
+}; // enum kmp_i18n_cat_status
+typedef enum kmp_i18n_cat_status kmp_i18n_cat_status_t;
+static volatile kmp_i18n_cat_status_t status = KMP_I18N_CLOSED;
+
+/*
+ Message catalog is opened at first usage, so we have to synchronize opening to avoid race and
+ multiple openings.
+
+ Closing does not require synchronization, because catalog is closed very late at library
+ shutting down, when no other threads are alive.
+*/
+
+static void __kmp_i18n_do_catopen();
+static kmp_bootstrap_lock_t lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( lock );
+ // `lock' variable may be placed into __kmp_i18n_catopen function because it is used only by
+ // that function. But we afraid a (buggy) compiler may treat it wrongly. So we put it outside of
+ // function just in case.
+
+void
+__kmp_i18n_catopen(
+) {
+ if ( status == KMP_I18N_CLOSED ) {
+ __kmp_acquire_bootstrap_lock( & lock );
+ if ( status == KMP_I18N_CLOSED ) {
+ __kmp_i18n_do_catopen();
+ }; // if
+ __kmp_release_bootstrap_lock( & lock );
+ }; // if
+} // func __kmp_i18n_catopen
+
+
+/*
+ ================================================================================================
+ Linux* OS and OS X* part.
+ ================================================================================================
+*/
+
+#if KMP_OS_UNIX
+#define KMP_I18N_OK
+
+#include <nl_types.h>
+
+#define KMP_I18N_NULLCAT ((nl_catd)( -1 ))
+static nl_catd cat = KMP_I18N_NULLCAT; // !!! Shall it be volatile?
+static char const * name = ( KMP_VERSION_MAJOR == 4 ? "libguide.cat" : "libomp.cat" );
+
+/*
+ Useful links:
+ http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap08.html#tag_08_02
+ http://www.opengroup.org/onlinepubs/000095399/functions/catopen.html
+ http://www.opengroup.org/onlinepubs/000095399/functions/setlocale.html
+*/
+
+void
+__kmp_i18n_do_catopen(
+) {
+ int english = 0;
+ char * lang = __kmp_env_get( "LANG" );
+ // TODO: What about LC_ALL or LC_MESSAGES?
+
+ KMP_DEBUG_ASSERT( status == KMP_I18N_CLOSED );
+ KMP_DEBUG_ASSERT( cat == KMP_I18N_NULLCAT );
+
+ english =
+ lang == NULL || // In all these cases English language is used.
+ strcmp( lang, "" ) == 0 ||
+ strcmp( lang, " " ) == 0 ||
+ // Workaround for Fortran RTL bug DPD200137873 "Fortran runtime resets LANG env var
+ // to space if it is not set".
+ strcmp( lang, "C" ) == 0 ||
+ strcmp( lang, "POSIX" ) == 0;
+
+ if ( ! english ) { // English language is not yet detected, let us continue.
+ // Format of LANG is: [language[_territory][.codeset][@modifier]]
+ // Strip all parts except language.
+ char * tail = NULL;
+ __kmp_str_split( lang, '@', & lang, & tail );
+ __kmp_str_split( lang, '.', & lang, & tail );
+ __kmp_str_split( lang, '_', & lang, & tail );
+ english = ( strcmp( lang, "en" ) == 0 );
+ }; // if
+
+ KMP_INTERNAL_FREE( lang );
+
+ // Do not try to open English catalog because internal messages are
+ // exact copy of messages in English catalog.
+ if ( english ) {
+ status = KMP_I18N_ABSENT; // mark catalog as absent so it will not be re-opened.
+ return;
+ }
+
+ cat = catopen( name, 0 );
+ // TODO: Why do we pass 0 in flags?
+ status = ( cat == KMP_I18N_NULLCAT ? KMP_I18N_ABSENT : KMP_I18N_OPENED );
+
+ if ( status == KMP_I18N_ABSENT ) {
+ if (__kmp_generate_warnings > kmp_warnings_low) { // AC: only issue warning in case explicitly asked to
+ int error = errno; // Save errno immediately.
+ char * nlspath = __kmp_env_get( "NLSPATH" );
+ char * lang = __kmp_env_get( "LANG" );
+
+ // Infinite recursion will not occur -- status is KMP_I18N_ABSENT now, so
+ // __kmp_i18n_catgets() will not try to open catalog, but will return default message.
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantOpenMessageCatalog, name ),
+ KMP_ERR( error ),
+ KMP_HNT( CheckEnvVar, "NLSPATH", nlspath ),
+ KMP_HNT( CheckEnvVar, "LANG", lang ),
+ __kmp_msg_null
+ );
+ KMP_INFORM( WillUseDefaultMessages );
+ KMP_INTERNAL_FREE( nlspath );
+ KMP_INTERNAL_FREE( lang );
+ }
+ } else { // status == KMP_I18N_OPENED
+
+ int section = get_section( kmp_i18n_prp_Version );
+ int number = get_number( kmp_i18n_prp_Version );
+ char const * expected = __kmp_i18n_default_table.sect[ section ].str[ number ];
+ // Expected version of the catalog.
+ kmp_str_buf_t version; // Actual version of the catalog.
+ __kmp_str_buf_init( & version );
+ __kmp_str_buf_print( & version, "%s", catgets( cat, section, number, NULL ) );
+
+ // String returned by catgets is invalid after closing the catalog, so copy it.
+ if ( strcmp( version.str, expected ) != 0 ) {
+ __kmp_i18n_catclose(); // Close bad catalog.
+ status = KMP_I18N_ABSENT; // And mark it as absent.
+ if (__kmp_generate_warnings > kmp_warnings_low) { // AC: only issue warning in case explicitly asked to
+ // And now print a warning using default messages.
+ char const * name = "NLSPATH";
+ char const * nlspath = __kmp_env_get( name );
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( WrongMessageCatalog, name, version.str, expected ),
+ KMP_HNT( CheckEnvVar, name, nlspath ),
+ __kmp_msg_null
+ );
+ KMP_INFORM( WillUseDefaultMessages );
+ KMP_INTERNAL_FREE( (void *) nlspath );
+ } // __kmp_generate_warnings
+ }; // if
+ __kmp_str_buf_free( & version );
+
+ }; // if
+
+} // func __kmp_i18n_do_catopen
+
+
+void
+__kmp_i18n_catclose(
+) {
+ if ( status == KMP_I18N_OPENED ) {
+ KMP_DEBUG_ASSERT( cat != KMP_I18N_NULLCAT );
+ catclose( cat );
+ cat = KMP_I18N_NULLCAT;
+ }; // if
+ status = KMP_I18N_CLOSED;
+} // func __kmp_i18n_catclose
+
+
+char const *
+__kmp_i18n_catgets(
+ kmp_i18n_id_t id
+) {
+
+ int section = get_section( id );
+ int number = get_number( id );
+ char const * message = NULL;
+
+ if ( 1 <= section && section <= __kmp_i18n_default_table.size ) {
+ if ( 1 <= number && number <= __kmp_i18n_default_table.sect[ section ].size ) {
+ if ( status == KMP_I18N_CLOSED ) {
+ __kmp_i18n_catopen();
+ }; // if
+ if ( status == KMP_I18N_OPENED ) {
+ message =
+ catgets(
+ cat,
+ section, number,
+ __kmp_i18n_default_table.sect[ section ].str[ number ]
+ );
+ }; // if
+ if ( message == NULL ) {
+ message = __kmp_i18n_default_table.sect[ section ].str[ number ];
+ }; // if
+ }; // if
+ }; // if
+ if ( message == NULL ) {
+ message = no_message_available;
+ }; // if
+ return message;
+
+} // func __kmp_i18n_catgets
+
+
+#endif // KMP_OS_UNIX
+
+/*
+ ================================================================================================
+ Windows* OS part.
+ ================================================================================================
+*/
+
+#if KMP_OS_WINDOWS
+#define KMP_I18N_OK
+
+#include "kmp_environment.h"
+#include <windows.h>
+
+#define KMP_I18N_NULLCAT NULL
+static HMODULE cat = KMP_I18N_NULLCAT; // !!! Shall it be volatile?
+static char const * name = ( KMP_VERSION_MAJOR == 4 ? "libguide40ui.dll" : "libompui.dll" );
+
+static kmp_i18n_table_t table = { 0, NULL };
+ // Messages formatted by FormatMessage() should be freed, but catgets() interface assumes
+ // user will not free messages. So we cache all the retrieved messages in the table, which
+ // are freed at catclose().
+static UINT const default_code_page = CP_OEMCP;
+static UINT code_page = default_code_page;
+
+static char const * ___catgets( kmp_i18n_id_t id );
+static UINT get_code_page();
+static void kmp_i18n_table_free( kmp_i18n_table_t * table );
+
+
+static UINT
+get_code_page(
+) {
+
+ UINT cp = default_code_page;
+ char const * value = __kmp_env_get( "KMP_CODEPAGE" );
+ if ( value != NULL ) {
+ if ( _stricmp( value, "ANSI" ) == 0 ) {
+ cp = CP_ACP;
+ } else if ( _stricmp( value, "OEM" ) == 0 ) {
+ cp = CP_OEMCP;
+ } else if ( _stricmp( value, "UTF-8" ) == 0 || _stricmp( value, "UTF8" ) == 0 ) {
+ cp = CP_UTF8;
+ } else if ( _stricmp( value, "UTF-7" ) == 0 || _stricmp( value, "UTF7" ) == 0 ) {
+ cp = CP_UTF7;
+ } else {
+ // !!! TODO: Issue a warning?
+ }; // if
+ }; // if
+ KMP_INTERNAL_FREE( (void *) value );
+ return cp;
+
+} // func get_code_page
+
+
+static void
+kmp_i18n_table_free(
+ kmp_i18n_table_t * table
+) {
+ int s;
+ int m;
+ for ( s = 0; s < table->size; ++ s ) {
+ for ( m = 0; m < table->sect[ s ].size; ++ m ) {
+ // Free message.
+ KMP_INTERNAL_FREE( (void *) table->sect[ s ].str[ m ] );
+ table->sect[ s ].str[ m ] = NULL;
+ }; // for m
+ table->sect[ s ].size = 0;
+ // Free section itself.
+ KMP_INTERNAL_FREE ( (void *) table->sect[ s ].str );
+ table->sect[ s ].str = NULL;
+ }; // for s
+ table->size = 0;
+ KMP_INTERNAL_FREE( (void *) table->sect );
+ table->sect = NULL;
+} // kmp_i8n_table_free
+
+
+void
+__kmp_i18n_do_catopen(
+) {
+
+ LCID locale_id = GetThreadLocale();
+ WORD lang_id = LANGIDFROMLCID( locale_id );
+ WORD primary_lang_id = PRIMARYLANGID( lang_id );
+ kmp_str_buf_t path;
+
+ KMP_DEBUG_ASSERT( status == KMP_I18N_CLOSED );
+ KMP_DEBUG_ASSERT( cat == KMP_I18N_NULLCAT );
+
+ __kmp_str_buf_init( & path );
+
+ // Do not try to open English catalog because internal messages are
+ // exact copy of messages in English catalog.
+ if ( primary_lang_id == LANG_ENGLISH ) {
+ status = KMP_I18N_ABSENT; // mark catalog as absent so it will not be re-opened.
+ goto end;
+ }; // if
+
+ // Construct resource DLL name.
+ /*
+ Simple
+ LoadLibrary( name )
+ is not suitable due to security issue (see
+ http://www.microsoft.com/technet/security/advisory/2269637.mspx). We have to specify full
+ path to the message catalog.
+ */
+ {
+
+ // Get handle of our DLL first.
+ HMODULE handle;
+ BOOL brc =
+ GetModuleHandleEx(
+ GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ reinterpret_cast< LPCSTR >( & __kmp_i18n_do_catopen ),
+ & handle
+ );
+ if ( ! brc ) { // Error occurred.
+ status = KMP_I18N_ABSENT; // mark catalog as absent so it will not be re-opened.
+ goto end;
+ // TODO: Enable multiple messages (KMP_MSG) to be passed to __kmp_msg; and print
+ // a proper warning.
+ }; // if
+
+ // Now get path to the our DLL.
+ for ( ; ; ) {
+ DWORD drc = GetModuleFileName( handle, path.str, path.size );
+ if ( drc == 0 ) { // Error occurred.
+ status = KMP_I18N_ABSENT;
+ goto end;
+ }; // if
+ if ( drc < path.size ) {
+ path.used = drc;
+ break;
+ }; // if
+ __kmp_str_buf_reserve( & path, path.size * 2 );
+ }; // forever
+
+ // Now construct the name of message catalog.
+ kmp_str_fname fname;
+ __kmp_str_fname_init( & fname, path.str );
+ __kmp_str_buf_clear( & path );
+ __kmp_str_buf_print( & path, "%s%lu/%s", fname.dir, (unsigned long)( locale_id ), name );
+ __kmp_str_fname_free( & fname );
+
+ }
+
+ // For security reasons, use LoadLibraryEx() and load message catalog as a data file.
+ cat = LoadLibraryEx( path.str, NULL, LOAD_LIBRARY_AS_DATAFILE );
+ status = ( cat == KMP_I18N_NULLCAT ? KMP_I18N_ABSENT : KMP_I18N_OPENED );
+
+ if ( status == KMP_I18N_ABSENT ) {
+ if (__kmp_generate_warnings > kmp_warnings_low) { // AC: only issue warning in case explicitly asked to
+ DWORD error = GetLastError();
+ // Infinite recursion will not occur -- status is KMP_I18N_ABSENT now, so
+ // __kmp_i18n_catgets() will not try to open catalog but will return default message.
+ /*
+ If message catalog for another architecture found (e.g. OpenMP RTL
+ for IA-32 architecture opens libompui.dll for Intel(R) 64)
+ Windows* OS returns error 193 (ERROR_BAD_EXE_FORMAT). However,
+ FormatMessage fails to return a message for this error, so user
+ will see:
+
+ OMP: Warning #2: Cannot open message catalog "1041\libompui.dll":
+ OMP: System error #193: (No system error message available)
+ OMP: Info #3: Default messages will be used.
+
+ Issue a hint in this case to let cause of trouble more understandable.
+ */
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantOpenMessageCatalog, path.str ),
+ KMP_SYSERRCODE( error ),
+ ( error == ERROR_BAD_EXE_FORMAT ? KMP_HNT( BadExeFormat, path.str, KMP_ARCH_STR ) : __kmp_msg_null ),
+ __kmp_msg_null
+ );
+ KMP_INFORM( WillUseDefaultMessages );
+ }
+ } else { // status == KMP_I18N_OPENED
+
+ int section = get_section( kmp_i18n_prp_Version );
+ int number = get_number( kmp_i18n_prp_Version );
+ char const * expected = __kmp_i18n_default_table.sect[ section ].str[ number ];
+ kmp_str_buf_t version; // Actual version of the catalog.
+ __kmp_str_buf_init( & version );
+ __kmp_str_buf_print( & version, "%s", ___catgets( kmp_i18n_prp_Version ) );
+ // String returned by catgets is invalid after closing the catalog, so copy it.
+ if ( strcmp( version.str, expected ) != 0 ) {
+ // Close bad catalog.
+ __kmp_i18n_catclose();
+ status = KMP_I18N_ABSENT; // And mark it as absent.
+ if (__kmp_generate_warnings > kmp_warnings_low) {
+ // And now print a warning using default messages.
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( WrongMessageCatalog, path.str, version.str, expected ),
+ __kmp_msg_null
+ );
+ KMP_INFORM( WillUseDefaultMessages );
+ } // __kmp_generate_warnings
+ }; // if
+ __kmp_str_buf_free( & version );
+
+ }; // if
+ code_page = get_code_page();
+
+ end:
+ __kmp_str_buf_free( & path );
+ return;
+
+} // func __kmp_i18n_do_catopen
+
+
+void
+__kmp_i18n_catclose(
+) {
+ if ( status == KMP_I18N_OPENED ) {
+ KMP_DEBUG_ASSERT( cat != KMP_I18N_NULLCAT );
+ kmp_i18n_table_free( & table );
+ FreeLibrary( cat );
+ cat = KMP_I18N_NULLCAT;
+ }; // if
+ code_page = default_code_page;
+ status = KMP_I18N_CLOSED;
+} // func __kmp_i18n_catclose
+
+/*
+ We use FormatMessage() to get strings from catalog, get system error messages, etc.
+ FormatMessage() tends to return Windows* OS-style end-of-lines, "\r\n". When string is printed,
+ printf() also replaces all the occurrences of "\n" with "\r\n" (again!), so sequences like
+ "\r\r\r\n" appear in output. It is not too good.
+
+ Additional mess comes from message catalog: Our catalog source en_US.mc file (generated by
+ message-converter.pl) contains only "\n" characters, but en_US_msg_1033.bin file (produced by
+ mc.exe) may contain "\r\n" or just "\n". This mess goes from en_US_msg_1033.bin file to
+ message catalog, libompui.dll. For example, message
+
+ Error
+
+ (there is "\n" at the end) is compiled by mc.exe to "Error\r\n", while
+
+ OMP: Error %1!d!: %2!s!\n
+
+ (there is "\n" at the end as well) is compiled to "OMP: Error %1!d!: %2!s!\r\n\n".
+
+ Thus, stripping all "\r" normalizes string and returns it to canonical form, so printf() will
+ produce correct end-of-line sequences.
+
+ ___strip_crs() serves for this purpose: it removes all the occurrences of "\r" in-place and
+ returns new length of string.
+*/
+static
+int
+___strip_crs(
+ char * str
+) {
+ int in = 0; // Input character index.
+ int out = 0; // Output character index.
+ for ( ; ; ) {
+ if ( str[ in ] != '\r' ) {
+ str[ out ] = str[ in ];
+ ++ out;
+ }; // if
+ if ( str[ in ] == 0 ) {
+ break;
+ }; // if
+ ++ in;
+ }; // forever
+ return out - 1;
+} // func __strip_crs
+
+
+static
+char const *
+___catgets(
+ kmp_i18n_id_t id
+) {
+
+ char * result = NULL;
+ PVOID addr = NULL;
+ wchar_t * wmsg = NULL;
+ DWORD wlen = 0;
+ char * msg = NULL;
+ int len = 0;
+ int rc;
+
+ KMP_DEBUG_ASSERT( cat != KMP_I18N_NULLCAT );
+ wlen = // wlen does *not* include terminating null.
+ FormatMessageW(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ cat,
+ id,
+ 0, // LangId
+ (LPWSTR) & addr,
+ 0, // Size in elements, not in bytes.
+ NULL
+ );
+ if ( wlen <= 0 ) {
+ goto end;
+ }; // if
+ wmsg = (wchar_t *) addr; // Warning: wmsg may be not nul-terminated!
+
+ // Calculate length of multibyte message.
+ len = // Since wlen does not include terminating null, len does not include it also.
+ WideCharToMultiByte(
+ code_page,
+ 0, // Flags.
+ wmsg, wlen, // Wide buffer and size.
+ NULL, 0, // Buffer and size.
+ NULL, NULL // Default char and used default char.
+ );
+ if ( len <= 0 ) {
+ goto end;
+ }; // if
+
+ // Allocate memory.
+ msg = (char *) KMP_INTERNAL_MALLOC( len + 1 );
+
+ // Convert wide message to multibyte one.
+ rc =
+ WideCharToMultiByte(
+ code_page,
+ 0, // Flags.
+ wmsg, wlen, // Wide buffer and size.
+ msg, len, // Buffer and size.
+ NULL, NULL // Default char and used default char.
+ );
+ if ( rc <= 0 || rc > len ) {
+ goto end;
+ }; // if
+ KMP_DEBUG_ASSERT( rc == len );
+ len = rc;
+ msg[ len ] = 0; // Put terminating null to the end.
+
+ // Stripping all "\r" before stripping last end-of-line simplifies the task.
+ len = ___strip_crs( msg );
+
+ // Every message in catalog is terminated with "\n". Strip it.
+ if ( len >= 1 && msg[ len - 1 ] == '\n' ) {
+ -- len;
+ msg[ len ] = 0;
+ }; // if
+
+ // Everything looks ok.
+ result = msg;
+ msg = NULL;
+
+ end:
+
+ if ( msg != NULL ) {
+ KMP_INTERNAL_FREE( msg );
+ }; // if
+ if ( wmsg != NULL ) {
+ LocalFree( wmsg );
+ }; // if
+
+ return result;
+
+} // ___catgets
+
+
+char const *
+__kmp_i18n_catgets(
+ kmp_i18n_id_t id
+) {
+
+ int section = get_section( id );
+ int number = get_number( id );
+ char const * message = NULL;
+
+ if ( 1 <= section && section <= __kmp_i18n_default_table.size ) {
+ if ( 1 <= number && number <= __kmp_i18n_default_table.sect[ section ].size ) {
+ if ( status == KMP_I18N_CLOSED ) {
+ __kmp_i18n_catopen();
+ }; // if
+ if ( cat != KMP_I18N_NULLCAT ) {
+ if ( table.size == 0 ) {
+ table.sect = (kmp_i18n_section_t *)
+ KMP_INTERNAL_CALLOC(
+ ( __kmp_i18n_default_table.size + 2 ),
+ sizeof( kmp_i18n_section_t )
+ );
+ table.size = __kmp_i18n_default_table.size;
+ }; // if
+ if ( table.sect[ section ].size == 0 ) {
+ table.sect[ section ].str = (const char **)
+ KMP_INTERNAL_CALLOC(
+ __kmp_i18n_default_table.sect[ section ].size + 2,
+ sizeof( char const * )
+ );
+ table.sect[ section ].size = __kmp_i18n_default_table.sect[ section ].size;
+ }; // if
+ if ( table.sect[ section ].str[ number ] == NULL ) {
+ table.sect[ section ].str[ number ] = ___catgets( id );
+ }; // if
+ message = table.sect[ section ].str[ number ];
+ }; // if
+ if ( message == NULL ) {
+ // Catalog is not opened or message is not found, return default message.
+ message = __kmp_i18n_default_table.sect[ section ].str[ number ];
+ }; // if
+ }; // if
+ }; // if
+ if ( message == NULL ) {
+ message = no_message_available;
+ }; // if
+ return message;
+
+} // func __kmp_i18n_catgets
+
+
+#endif // KMP_OS_WINDOWS
+
+// -------------------------------------------------------------------------------------------------
+
+#ifndef KMP_I18N_OK
+ #error I18n support is not implemented for this OS.
+#endif // KMP_I18N_OK
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_i18n_dump_catalog(
+ kmp_str_buf_t * buffer
+) {
+
+ struct kmp_i18n_id_range_t {
+ kmp_i18n_id_t first;
+ kmp_i18n_id_t last;
+ }; // struct kmp_i18n_id_range_t
+
+ static struct kmp_i18n_id_range_t ranges[] = {
+ { kmp_i18n_prp_first, kmp_i18n_prp_last },
+ { kmp_i18n_str_first, kmp_i18n_str_last },
+ { kmp_i18n_fmt_first, kmp_i18n_fmt_last },
+ { kmp_i18n_msg_first, kmp_i18n_msg_last },
+ { kmp_i18n_hnt_first, kmp_i18n_hnt_last }
+ }; // ranges
+
+ int num_of_ranges = sizeof( ranges ) / sizeof( struct kmp_i18n_id_range_t );
+ int range;
+ kmp_i18n_id_t id;
+
+ for ( range = 0; range < num_of_ranges; ++ range ) {
+ __kmp_str_buf_print( buffer, "*** Set #%d ***\n", range + 1 );
+ for ( id = (kmp_i18n_id_t)( ranges[ range ].first + 1 );
+ id < ranges[ range ].last;
+ id = (kmp_i18n_id_t)( id + 1 ) ) {
+ __kmp_str_buf_print( buffer, "%d: <<%s>>\n", id, __kmp_i18n_catgets( id ) );
+ }; // for id
+ }; // for range
+
+ __kmp_printf( "%s", buffer->str );
+
+} // __kmp_i18n_dump_catalog
+
+// -------------------------------------------------------------------------------------------------
+
+kmp_msg_t
+__kmp_msg_format(
+ kmp_i18n_id_t id,
+ ...
+) {
+
+ kmp_msg_t msg;
+ va_list args;
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init( & buffer );
+
+ va_start( args, id );
+ #if KMP_OS_UNIX
+ // On Linux* OS and OS X*, printf() family functions process parameter numbers, for example:
+ // "%2$s %1$s".
+ __kmp_str_buf_vprint( & buffer, __kmp_i18n_catgets( id ), args );
+ #elif KMP_OS_WINDOWS
+ // On Winodws, printf() family functions does not recognize GNU style parameter numbers,
+ // so we have to use FormatMessage() instead. It recognizes parameter numbers, e. g.:
+ // "%2!s! "%1!s!".
+ {
+ LPTSTR str = NULL;
+ int len;
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ __kmp_i18n_catgets( id ),
+ 0, 0,
+ (LPTSTR)( & str ),
+ 0,
+ & args
+ );
+ len = ___strip_crs( str );
+ __kmp_str_buf_cat( & buffer, str, len );
+ LocalFree( str );
+ }
+ #else
+ #error
+ #endif
+ va_end( args );
+ __kmp_str_buf_detach( & buffer );
+
+ msg.type = (kmp_msg_type_t)( id >> 16 );
+ msg.num = id & 0xFFFF;
+ msg.str = buffer.str;
+ msg.len = buffer.used;
+
+ return msg;
+
+} // __kmp_msg_format
+
+// -------------------------------------------------------------------------------------------------
+
+static
+char *
+sys_error(
+ int err
+) {
+
+ char * message = NULL;
+
+ #if KMP_OS_WINDOWS
+
+ LPVOID buffer = NULL;
+ int len;
+ DWORD rc;
+ rc =
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ err,
+ MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language.
+ (LPTSTR) & buffer,
+ 0,
+ NULL
+ );
+ if ( rc > 0 ) {
+ // Message formatted. Copy it (so we can free it later with normal free().
+ message = __kmp_str_format( "%s", (char *) buffer );
+ len = ___strip_crs( message ); // Delete carriage returns if any.
+ // Strip trailing newlines.
+ while ( len > 0 && message[ len - 1 ] == '\n' ) {
+ -- len;
+ }; // while
+ message[ len ] = 0;
+ } else {
+ // FormatMessage() failed to format system error message. GetLastError() would give us
+ // error code, which we would convert to message... this it dangerous recursion, which
+ // cannot clarify original error, so we will not even start it.
+ }; // if
+ if ( buffer != NULL ) {
+ LocalFree( buffer );
+ }; // if
+
+ #else // Non-Windows* OS: Linux* OS or OS X*
+
+ /*
+ There are 2 incompatible versions of strerror_r:
+
+ char * strerror_r( int, char *, size_t ); // GNU version
+ int strerror_r( int, char *, size_t ); // XSI version
+ */
+
+ #if KMP_OS_LINUX
+
+ // GNU version of strerror_r.
+
+ char buffer[ 2048 ];
+ char * const err_msg = strerror_r( err, buffer, sizeof( buffer ) );
+ // Do not eliminate this assignment to temporary variable, otherwise compiler would
+ // not issue warning if strerror_r() returns `int' instead of expected `char *'.
+ message = __kmp_str_format( "%s", err_msg );
+
+ #else // OS X*, FreeBSD* etc.
+
+ // XSI version of strerror_r.
+
+ int size = 2048;
+ // TODO: Add checking result of malloc().
+ char * buffer = (char *) KMP_INTERNAL_MALLOC( size );
+ int rc;
+ rc = strerror_r( err, buffer, size );
+ if ( rc == -1 ) {
+ rc = errno; // XSI version sets errno.
+ }; // if
+ while ( rc == ERANGE ) { // ERANGE means the buffer is too small.
+ KMP_INTERNAL_FREE( buffer );
+ size *= 2;
+ buffer = (char *) KMP_INTERNAL_MALLOC( size );
+ rc = strerror_r( err, buffer, size );
+ if ( rc == -1 ) {
+ rc = errno; // XSI version sets errno.
+ }; // if
+ }; // while
+ if ( rc == 0 ) {
+ message = buffer;
+ } else {
+ // Buffer is unused. Free it.
+ KMP_INTERNAL_FREE( buffer );
+ }; // if
+
+ #endif
+
+ #endif /* KMP_OS_WINDOWS */
+
+ if ( message == NULL ) {
+ // TODO: I18n this message.
+ message = __kmp_str_format( "%s", "(No system error message available)" );
+ }; // if
+ return message;
+
+} // sys_error
+
+// -------------------------------------------------------------------------------------------------
+
+kmp_msg_t
+__kmp_msg_error_code(
+ int code
+) {
+
+ kmp_msg_t msg;
+ msg.type = kmp_mt_syserr;
+ msg.num = code;
+ msg.str = sys_error( code );
+ msg.len = KMP_STRLEN( msg.str );
+ return msg;
+
+} // __kmp_msg_error_code
+
+// -------------------------------------------------------------------------------------------------
+
+kmp_msg_t
+__kmp_msg_error_mesg(
+ char const * mesg
+) {
+
+ kmp_msg_t msg;
+ msg.type = kmp_mt_syserr;
+ msg.num = 0;
+ msg.str = __kmp_str_format( "%s", mesg );
+ msg.len = KMP_STRLEN( msg.str );
+ return msg;
+
+} // __kmp_msg_error_mesg
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_msg(
+ kmp_msg_severity_t severity,
+ kmp_msg_t message,
+ ...
+) {
+
+ va_list args;
+ kmp_i18n_id_t format; // format identifier
+ kmp_msg_t fmsg; // formatted message
+ kmp_str_buf_t buffer;
+
+ if ( severity != kmp_ms_fatal && __kmp_generate_warnings == kmp_warnings_off )
+ return; // no reason to form a string in order to not print it
+
+ __kmp_str_buf_init( & buffer );
+
+ // Format the primary message.
+ switch ( severity ) {
+ case kmp_ms_inform : {
+ format = kmp_i18n_fmt_Info;
+ } break;
+ case kmp_ms_warning : {
+ format = kmp_i18n_fmt_Warning;
+ } break;
+ case kmp_ms_fatal : {
+ format = kmp_i18n_fmt_Fatal;
+ } break;
+ default : {
+ KMP_DEBUG_ASSERT( 0 );
+ };
+ }; // switch
+ fmsg = __kmp_msg_format( format, message.num, message.str );
+ KMP_INTERNAL_FREE( (void *) message.str );
+ __kmp_str_buf_cat( & buffer, fmsg.str, fmsg.len );
+ KMP_INTERNAL_FREE( (void *) fmsg.str );
+
+ // Format other messages.
+ va_start( args, message );
+ for ( ; ; ) {
+ message = va_arg( args, kmp_msg_t );
+ if ( message.type == kmp_mt_dummy && message.str == NULL ) {
+ break;
+ }; // if
+ if ( message.type == kmp_mt_dummy && message.str == __kmp_msg_empty.str ) {
+ continue;
+ }; // if
+ switch ( message.type ) {
+ case kmp_mt_hint : {
+ format = kmp_i18n_fmt_Hint;
+ } break;
+ case kmp_mt_syserr : {
+ format = kmp_i18n_fmt_SysErr;
+ } break;
+ default : {
+ KMP_DEBUG_ASSERT( 0 );
+ };
+ }; // switch
+ fmsg = __kmp_msg_format( format, message.num, message.str );
+ KMP_INTERNAL_FREE( (void *) message.str );
+ __kmp_str_buf_cat( & buffer, fmsg.str, fmsg.len );
+ KMP_INTERNAL_FREE( (void *) fmsg.str );
+ }; // forever
+ va_end( args );
+
+ // Print formatted messages.
+ // This lock prevents multiple fatal errors on the same problem.
+ // __kmp_acquire_bootstrap_lock( & lock ); // GEH - This lock causing tests to hang on OS X*.
+ __kmp_printf( "%s", buffer.str );
+ __kmp_str_buf_free( & buffer );
+
+ if ( severity == kmp_ms_fatal ) {
+ #if KMP_OS_WINDOWS
+ __kmp_thread_sleep( 500 ); /* Delay to give message a chance to appear before reaping */
+ #endif
+ __kmp_abort_process();
+ }; // if
+
+ // __kmp_release_bootstrap_lock( & lock ); // GEH - this lock causing tests to hang on OS X*.
+
+} // __kmp_msg
+
+// -------------------------------------------------------------------------------------------------
+
+// end of file //
diff --git a/final/runtime/src/kmp_i18n.h b/final/runtime/src/kmp_i18n.h
new file mode 100644
index 0000000..82ec51b
--- /dev/null
+++ b/final/runtime/src/kmp_i18n.h
@@ -0,0 +1,193 @@
+/*
+ * kmp_i18n.h
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_I18N_H
+#define KMP_I18N_H
+
+#include "kmp_str.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+/*
+ kmp_i18n_id.inc defines kmp_i18n_id_t type. It is an enumeration with identifiers of all the
+ messages in the catalog. There is one special identifier: kmp_i18n_null, which denotes absence
+ of message.
+*/
+#include "kmp_i18n_id.inc" // Generated file. Do not edit it manually.
+
+/*
+ Low-level functions handling message catalog. __kmp_i18n_open() opens message catalog,
+ __kmp_i18n_closes() it. Explicit opening is not required: if message catalog is not yet open,
+ __kmp_i18n_catgets() will open it implicitly. However, catalog should be explicitly closed,
+ otherwise resources (mamory, handles) may leak.
+
+ __kmp_i18n_catgets() returns read-only string. It should not be freed.
+
+ KMP_I18N_STR macro simplifies acces to strings in message catalog a bit. Following two lines are
+ equivalent:
+
+ __kmp_i18n_catgets( kmp_i18n_str_Warning )
+ KMP_I18N_STR( Warning )
+*/
+
+void __kmp_i18n_catopen();
+void __kmp_i18n_catclose();
+char const * __kmp_i18n_catgets( kmp_i18n_id_t id );
+
+#define KMP_I18N_STR( id ) __kmp_i18n_catgets( kmp_i18n_str_ ## id )
+
+
+/*
+ ------------------------------------------------------------------------------------------------
+
+ High-level interface for printing strings targeted to the user.
+
+ All the strings are divided into 3 types:
+
+ * messages,
+ * hints,
+ * system errors.
+
+ There are 3 kind of message severities:
+
+ * informational messages,
+ * warnings (non-fatal errors),
+ * fatal errors.
+
+ For example:
+
+ OMP: Warning #2: Cannot open message catalog "libguide.cat": (1)
+ OMP: System error #2: No such file or directory (2)
+ OMP: Hint: Please check NLSPATH environment variable. (3)
+ OMP: Info #3: Default messages will be used. (4)
+
+ where
+
+ (1) is a message of warning severity,
+ (2) is a system error caused the previous warning,
+ (3) is a hint for the user how to fix the problem,
+ (4) is a message of informational severity.
+
+ Usage in complex cases (message is accompanied with hints and system errors):
+
+ int error = errno; // We need save errno immediately, because it may be changed.
+ __kmp_msg(
+ kmp_ms_warning, // Severity
+ KMP_MSG( CantOpenMessageCatalog, name ), // Primary message
+ KMP_ERR( error ), // System error
+ KMP_HNT( CheckNLSPATH ), // Hint
+ __kmp_msg_null // Variadic argument list finisher
+ );
+
+ Usage in simple cases (just a message, no system errors or hints):
+
+ KMP_INFORM( WillUseDefaultMessages );
+ KMP_WARNING( CantOpenMessageCatalog, name );
+ KMP_FATAL( StackOverlap );
+ KMP_SYSFAIL( "pthread_create", status );
+ KMP_CHECK_SYSFAIL( "pthread_create", status );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+
+ ------------------------------------------------------------------------------------------------
+*/
+
+enum kmp_msg_type {
+ kmp_mt_dummy = 0, // Special type for internal purposes.
+ kmp_mt_mesg = 4, // Primary OpenMP message, could be information, warning, or fatal.
+ kmp_mt_hint = 5, // Hint to the user.
+ kmp_mt_syserr = -1 // System error message.
+}; // enum kmp_msg_type
+typedef enum kmp_msg_type kmp_msg_type_t;
+
+struct kmp_msg {
+ kmp_msg_type_t type;
+ int num;
+ char const * str;
+ int len;
+}; // struct kmp_message
+typedef struct kmp_msg kmp_msg_t;
+
+// Two special messages.
+extern kmp_msg_t __kmp_msg_empty; // Can be used in place where message is required syntactically.
+extern kmp_msg_t __kmp_msg_null; // Denotes the end of variadic list of arguments.
+
+// Helper functions. Creates messages either from message catalog or from system. Note: these
+// functions allocate memory. You should pass created messages to __kmp_msg() function, it will
+// print messages and destroy them.
+kmp_msg_t __kmp_msg_format( kmp_i18n_id_t id, ... );
+kmp_msg_t __kmp_msg_error_code( int code );
+kmp_msg_t __kmp_msg_error_mesg( char const * mesg );
+
+// Helper macros to make calls shorter.
+#define KMP_MSG( ... ) __kmp_msg_format( kmp_i18n_msg_ ## __VA_ARGS__ )
+#define KMP_HNT( ... ) __kmp_msg_format( kmp_i18n_hnt_ ## __VA_ARGS__ )
+#define KMP_SYSERRCODE( code ) __kmp_msg_error_code( code )
+#define KMP_SYSERRMESG( mesg ) __kmp_msg_error_mesg( mesg )
+#define KMP_ERR KMP_SYSERRCODE
+
+// Message severity.
+enum kmp_msg_severity {
+ kmp_ms_inform, // Just information for the user.
+ kmp_ms_warning, // Non-fatal error, execution continues.
+ kmp_ms_fatal // Fatal error, program aborts.
+}; // enum kmp_msg_severity
+typedef enum kmp_msg_severity kmp_msg_severity_t;
+
+// Primary function for printing messages for the user. The first message is mandatory. Any number
+// of system errors and hints may be specified. Argument list must be finished with __kmp_msg_null.
+void __kmp_msg( kmp_msg_severity_t severity, kmp_msg_t message, ... );
+
+// Helper macros to make calls shorter in simple cases.
+#define KMP_INFORM( ... ) __kmp_msg( kmp_ms_inform, KMP_MSG( __VA_ARGS__ ), __kmp_msg_null )
+#define KMP_WARNING( ... ) __kmp_msg( kmp_ms_warning, KMP_MSG( __VA_ARGS__ ), __kmp_msg_null )
+#define KMP_FATAL( ... ) __kmp_msg( kmp_ms_fatal, KMP_MSG( __VA_ARGS__ ), __kmp_msg_null )
+#define KMP_SYSFAIL( func, error ) \
+ __kmp_msg( \
+ kmp_ms_fatal, \
+ KMP_MSG( FunctionError, func ), \
+ KMP_SYSERRCODE( error ), \
+ __kmp_msg_null \
+ )
+
+// Check error, if not zero, generate fatal error message.
+#define KMP_CHECK_SYSFAIL( func, error ) \
+ { \
+ if ( error ) { \
+ KMP_SYSFAIL( func, error ); \
+ }; \
+ }
+
+// Check status, if not zero, generate fatal error message using errno.
+#define KMP_CHECK_SYSFAIL_ERRNO( func, status ) \
+ { \
+ if ( status != 0 ) { \
+ int error = errno; \
+ KMP_SYSFAIL( func, error ); \
+ }; \
+ }
+
+#ifdef KMP_DEBUG
+ void __kmp_i18n_dump_catalog( kmp_str_buf_t * buffer );
+#endif // KMP_DEBUG
+
+#ifdef __cplusplus
+ }; // extern "C"
+#endif // __cplusplus
+
+#endif // KMP_I18N_H
+
+// end of file //
diff --git a/final/runtime/src/kmp_import.c b/final/runtime/src/kmp_import.c
new file mode 100644
index 0000000..42fba41
--- /dev/null
+++ b/final/runtime/src/kmp_import.c
@@ -0,0 +1,42 @@
+/*
+ * kmp_import.c
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Object generated from this source file is linked to Windows* OS DLL import library (libompmd.lib)
+ only! It is not a part of regular static or dynamic OpenMP RTL. Any code that just needs to go
+ in the libompmd.lib (but not in libompmt.lib and libompmd.dll) should be placed in this
+ file.
+ ------------------------------------------------------------------------------------------------
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ These symbols are required for mutual exclusion with Microsoft OpenMP RTL (and compatibility
+ with MS Compiler).
+*/
+
+int _You_must_link_with_exactly_one_OpenMP_library = 1;
+int _You_must_link_with_Intel_OpenMP_library = 1;
+int _You_must_link_with_Microsoft_OpenMP_library = 1;
+
+#ifdef __cplusplus
+}
+#endif
+
+// end of file //
diff --git a/final/runtime/src/kmp_io.c b/final/runtime/src/kmp_io.c
new file mode 100644
index 0000000..4e79e22
--- /dev/null
+++ b/final/runtime/src/kmp_io.c
@@ -0,0 +1,248 @@
+/*
+ * KMP_IO.c -- RTL IO
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <string.h>
+#ifndef __ABSOFT_WIN
+# include <sys/types.h>
+#endif
+
+#include "kmp_os.h"
+#include "kmp_lock.h"
+#include "kmp_str.h"
+#include "kmp_io.h"
+#include "kmp.h" // KMP_GTID_DNE, __kmp_debug_buf, etc
+
+#if KMP_OS_WINDOWS
+# pragma warning( push )
+# pragma warning( disable: 271 310 )
+# include <windows.h>
+# pragma warning( pop )
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+kmp_bootstrap_lock_t __kmp_stdio_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_stdio_lock ); /* Control stdio functions */
+kmp_bootstrap_lock_t __kmp_console_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_console_lock ); /* Control console initialization */
+
+#if KMP_OS_WINDOWS
+
+ # ifdef KMP_DEBUG
+ /* __kmp_stdout is used only for dev build */
+ static HANDLE __kmp_stdout = NULL;
+ # endif
+ static HANDLE __kmp_stderr = NULL;
+ static int __kmp_console_exists = FALSE;
+ static kmp_str_buf_t __kmp_console_buf;
+
+ static int
+ is_console( void )
+ {
+ char buffer[ 128 ];
+ DWORD rc = 0;
+ DWORD err = 0;
+ // Try to get console title.
+ SetLastError( 0 );
+ // GetConsoleTitle does not reset last error in case of success or short buffer,
+ // so we need to clear it explicitly.
+ rc = GetConsoleTitle( buffer, sizeof( buffer ) );
+ if ( rc == 0 ) {
+ // rc == 0 means getting console title failed. Let us find out why.
+ err = GetLastError();
+ // err == 0 means buffer too short (we suppose console exists).
+ // In Window applications we usually have err == 6 (invalid handle).
+ }; // if
+ return rc > 0 || err == 0;
+ }
+
+ void
+ __kmp_close_console( void )
+ {
+ /* wait until user presses return before closing window */
+ /* TODO only close if a window was opened */
+ if( __kmp_console_exists ) {
+ #ifdef KMP_DEBUG
+ /* standard out is used only in dev build */
+ __kmp_stdout = NULL;
+ #endif
+ __kmp_stderr = NULL;
+ __kmp_str_buf_free( &__kmp_console_buf );
+ __kmp_console_exists = FALSE;
+ }
+ }
+
+ /* For windows, call this before stdout, stderr, or stdin are used.
+ * It opens a console window and starts processing */
+ static void
+ __kmp_redirect_output( void )
+ {
+ __kmp_acquire_bootstrap_lock( &__kmp_console_lock );
+
+ if( ! __kmp_console_exists ) {
+ #ifdef KMP_DEBUG
+ /* standard out is used only in dev build */
+ HANDLE ho;
+ #endif
+ HANDLE he;
+
+ __kmp_str_buf_init( &__kmp_console_buf );
+
+ AllocConsole();
+ // We do not check the result of AllocConsole because
+ // 1. the call is harmless
+ // 2. it is not clear how to communicate failue
+ // 3. we will detect failure later when we get handle(s)
+
+ #ifdef KMP_DEBUG
+ ho = GetStdHandle( STD_OUTPUT_HANDLE );
+ if ( ho == INVALID_HANDLE_VALUE || ho == NULL ) {
+
+ DWORD err = GetLastError();
+ // TODO: output error somehow (maybe message box)
+ __kmp_stdout = NULL;
+
+ } else {
+
+ __kmp_stdout = ho; // temporary code, need new global for ho
+
+ }
+ #endif
+ he = GetStdHandle( STD_ERROR_HANDLE );
+ if ( he == INVALID_HANDLE_VALUE || he == NULL ) {
+
+ DWORD err = GetLastError();
+ // TODO: output error somehow (maybe message box)
+ __kmp_stderr = NULL;
+
+ } else {
+
+ __kmp_stderr = he; // temporary code, need new global
+ }
+ __kmp_console_exists = TRUE;
+ }
+ __kmp_release_bootstrap_lock( &__kmp_console_lock );
+ }
+
+#else
+ #define __kmp_stderr (stderr)
+#endif /* KMP_OS_WINDOWS */
+
+void
+__kmp_vprintf( enum kmp_io __kmp_io, char const * format, va_list ap )
+{
+ #if KMP_OS_WINDOWS
+ if( !__kmp_console_exists ) {
+ __kmp_redirect_output();
+ }
+ if( ! __kmp_stderr && __kmp_io == kmp_err ) {
+ return;
+ }
+ #ifdef KMP_DEBUG
+ if( ! __kmp_stdout && __kmp_io == kmp_out ) {
+ return;
+ }
+ #endif
+ #endif /* KMP_OS_WINDOWS */
+
+ if ( __kmp_debug_buf && __kmp_debug_buffer != NULL ) {
+
+ int dc = ( __kmp_debug_buf_atomic ?
+ KMP_TEST_THEN_INC32( & __kmp_debug_count) : __kmp_debug_count++ )
+ % __kmp_debug_buf_lines;
+ char *db = & __kmp_debug_buffer[ dc * __kmp_debug_buf_chars ];
+ int chars = 0;
+
+ #ifdef KMP_DEBUG_PIDS
+ chars = KMP_SNPRINTF( db, __kmp_debug_buf_chars, "pid=%d: ", (kmp_int32)getpid() );
+ #endif
+ chars += KMP_VSNPRINTF( db, __kmp_debug_buf_chars, format, ap );
+
+ if ( chars + 1 > __kmp_debug_buf_chars ) {
+ if ( chars + 1 > __kmp_debug_buf_warn_chars ) {
+ #if KMP_OS_WINDOWS
+ DWORD count;
+ __kmp_str_buf_print( &__kmp_console_buf,
+ "OMP warning: Debugging buffer overflow; increase KMP_DEBUG_BUF_CHARS to %d\n",
+ chars + 1 );
+ WriteFile( __kmp_stderr, __kmp_console_buf.str, __kmp_console_buf.used, &count, NULL );
+ __kmp_str_buf_clear( &__kmp_console_buf );
+ #else
+ fprintf( __kmp_stderr,
+ "OMP warning: Debugging buffer overflow; increase KMP_DEBUG_BUF_CHARS to %d\n",
+ chars + 1 );
+ fflush( __kmp_stderr );
+ #endif
+ __kmp_debug_buf_warn_chars = chars + 1;
+ }
+ /* terminate string if overflow occurred */
+ db[ __kmp_debug_buf_chars - 2 ] = '\n';
+ db[ __kmp_debug_buf_chars - 1 ] = '\0';
+ }
+ } else {
+ #if KMP_OS_WINDOWS
+ DWORD count;
+ #ifdef KMP_DEBUG_PIDS
+ __kmp_str_buf_print( &__kmp_console_buf, "pid=%d: ",
+ (kmp_int32)getpid() );
+ #endif
+ __kmp_str_buf_vprint( &__kmp_console_buf, format, ap );
+ WriteFile(
+ __kmp_stderr,
+ __kmp_console_buf.str,
+ __kmp_console_buf.used,
+ &count,
+ NULL
+ );
+ __kmp_str_buf_clear( &__kmp_console_buf );
+ #else
+ #ifdef KMP_DEBUG_PIDS
+ fprintf( __kmp_stderr, "pid=%d: ", (kmp_int32)getpid() );
+ #endif
+ vfprintf( __kmp_stderr, format, ap );
+ fflush( __kmp_stderr );
+ #endif
+ }
+}
+
+void
+__kmp_printf( char const * format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+
+ __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
+ __kmp_vprintf( kmp_err, format, ap );
+ __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
+
+ va_end( ap );
+}
+
+void
+__kmp_printf_no_lock( char const * format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+
+ __kmp_vprintf( kmp_err, format, ap );
+
+ va_end( ap );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
diff --git a/final/runtime/src/kmp_io.h b/final/runtime/src/kmp_io.h
new file mode 100644
index 0000000..a0caa64
--- /dev/null
+++ b/final/runtime/src/kmp_io.h
@@ -0,0 +1,44 @@
+/*
+ * kmp_io.h -- RTL IO header file.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_IO_H
+#define KMP_IO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+enum kmp_io {
+ kmp_out = 0,
+ kmp_err
+};
+
+extern kmp_bootstrap_lock_t __kmp_stdio_lock; /* Control stdio functions */
+extern kmp_bootstrap_lock_t __kmp_console_lock; /* Control console initialization */
+
+extern void __kmp_vprintf( enum kmp_io __kmp_io, char const * format, va_list ap );
+extern void __kmp_printf( char const * format, ... );
+extern void __kmp_printf_no_lock( char const * format, ... );
+extern void __kmp_close_console( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* KMP_IO_H */
+
diff --git a/final/runtime/src/kmp_itt.c b/final/runtime/src/kmp_itt.c
new file mode 100644
index 0000000..f09a03f
--- /dev/null
+++ b/final/runtime/src/kmp_itt.c
@@ -0,0 +1,147 @@
+#include "kmp_config.h"
+
+#if USE_ITT_BUILD
+/*
+ * kmp_itt.c -- ITT Notify interface.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp_itt.h"
+
+#if KMP_DEBUG
+ #include "kmp_itt.inl"
+#endif
+
+
+#if USE_ITT_NOTIFY
+
+ kmp_int32 __kmp_barrier_domain_count;
+ kmp_int32 __kmp_region_domain_count;
+ __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
+ kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain * metadata_domain = NULL;
+ __itt_string_handle * string_handle_imbl = NULL;
+ __itt_string_handle * string_handle_loop = NULL;
+ __itt_string_handle * string_handle_sngl = NULL;
+
+ #include "kmp_version.h"
+ #include "kmp_i18n.h"
+ #include "kmp_str.h"
+
+ KMP_BUILD_ASSERT( sizeof( kmp_itt_mark_t ) == sizeof( __itt_mark_type ) );
+
+ /*
+ Previously used warnings:
+
+ KMP_WARNING( IttAllNotifDisabled );
+ KMP_WARNING( IttObjNotifDisabled );
+ KMP_WARNING( IttMarkNotifDisabled );
+ KMP_WARNING( IttUnloadLibFailed, libittnotify );
+ */
+
+
+ kmp_int32 __kmp_itt_prepare_delay = 0;
+ kmp_bootstrap_lock_t __kmp_itt_debug_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_itt_debug_lock );
+
+#endif // USE_ITT_NOTIFY
+
+void __kmp_itt_initialize() {
+
+ // ITTNotify library is loaded and initialized at first call to any ittnotify function,
+ // so we do not need to explicitly load it any more.
+ // Jusr report OMP RTL version to ITTNotify.
+
+ #if USE_ITT_NOTIFY
+ // Report OpenMP RTL version.
+ kmp_str_buf_t buf;
+ __itt_mark_type version;
+ __kmp_str_buf_init( & buf );
+ __kmp_str_buf_print(
+ & buf,
+ "OMP RTL Version %d.%d.%d",
+ __kmp_version_major,
+ __kmp_version_minor,
+ __kmp_version_build
+ );
+ if ( __itt_api_version_ptr != NULL ) {
+ __kmp_str_buf_print( & buf, ":%s", __itt_api_version() );
+ }; // if
+ version = __itt_mark_create( buf.str );
+ __itt_mark( version, NULL );
+ __kmp_str_buf_free( & buf );
+ #endif
+
+} // __kmp_itt_initialize
+
+
+void __kmp_itt_destroy() {
+ #if USE_ITT_NOTIFY
+ __kmp_itt_fini_ittlib();
+ #endif
+} // __kmp_itt_destroy
+
+
+extern "C"
+void
+__itt_error_handler(
+ __itt_error_code err,
+ va_list args
+) {
+
+ switch ( err ) {
+ case __itt_error_no_module : {
+ char const * library = va_arg( args, char const * );
+ #if KMP_OS_WINDOWS
+ int sys_err = va_arg( args, int );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
+ #else
+ char const * sys_err = va_arg( args, char const * );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRMESG( sys_err ), __kmp_msg_null );
+ #endif
+ } break;
+ case __itt_error_no_symbol : {
+ char const * library = va_arg( args, char const * );
+ char const * symbol = va_arg( args, char const * );
+ KMP_WARNING( IttLookupFailed, symbol, library );
+ } break;
+ case __itt_error_unknown_group : {
+ char const * var = va_arg( args, char const * );
+ char const * group = va_arg( args, char const * );
+ KMP_WARNING( IttUnknownGroup, var, group );
+ } break;
+ case __itt_error_env_too_long : {
+ char const * var = va_arg( args, char const * );
+ size_t act_len = va_arg( args, size_t );
+ size_t max_len = va_arg( args, size_t );
+ KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len );
+ } break;
+ case __itt_error_cant_read_env : {
+ char const * var = va_arg( args, char const * );
+ int sys_err = va_arg( args, int );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), KMP_ERR( sys_err ), __kmp_msg_null );
+ } break;
+ case __itt_error_system : {
+ char const * func = va_arg( args, char const * );
+ int sys_err = va_arg( args, int );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
+ } break;
+ default : {
+ KMP_WARNING( IttUnknownError, err );
+ };
+ }; // switch
+
+} // __itt_error_handler
+
+#endif /* USE_ITT_BUILD */
diff --git a/final/runtime/src/kmp_itt.h b/final/runtime/src/kmp_itt.h
new file mode 100644
index 0000000..286023d
--- /dev/null
+++ b/final/runtime/src/kmp_itt.h
@@ -0,0 +1,312 @@
+#if USE_ITT_BUILD
+/*
+ * kmp_itt.h -- ITT Notify interface.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_ITT_H
+#define KMP_ITT_H
+
+#include "kmp_lock.h"
+
+#define INTEL_ITTNOTIFY_API_PRIVATE
+#include "ittnotify.h"
+#include "legacy/ittnotify.h"
+
+#if KMP_DEBUG
+ #define __kmp_inline // Turn off inlining in debug mode.
+#else
+ #define __kmp_inline static inline
+#endif
+
+#if USE_ITT_NOTIFY
+ extern kmp_int32 __kmp_itt_prepare_delay;
+# ifdef __cplusplus
+ extern "C" void __kmp_itt_fini_ittlib(void);
+# else
+ extern void __kmp_itt_fini_ittlib(void);
+# endif
+#endif
+
+// Simplify the handling of an argument that is only required when USE_ITT_BUILD is enabled.
+#define USE_ITT_BUILD_ARG(x) ,x
+
+void __kmp_itt_initialize();
+void __kmp_itt_destroy();
+
+// -------------------------------------------------------------------------------------------------
+// New stuff for reporting high-level constructs.
+// -------------------------------------------------------------------------------------------------
+
+// Note the naming convention:
+// __kmp_itt_xxxing() function should be called before action, while
+// __kmp_itt_xxxed() function should be called after action.
+
+// --- Parallel region reporting ---
+__kmp_inline void __kmp_itt_region_forking( int gtid, int team_size, int barriers ); // Master only, before forking threads.
+__kmp_inline void __kmp_itt_region_joined( int gtid ); // Master only, after joining threads.
+ // (*) Note: A thread may execute tasks after this point, though.
+
+// --- Frame reporting ---
+// region = 0 - no regions, region = 1 - parallel, region = 2 - serialized parallel
+__kmp_inline void __kmp_itt_frame_submit( int gtid, __itt_timestamp begin, __itt_timestamp end, int imbalance, ident_t *loc, int team_size, int region = 0 );
+
+// --- Metadata reporting ---
+// begin/end - begin/end timestamps of a barrier frame, imbalance - aggregated wait time value, reduction -if this is a reduction barrier
+__kmp_inline void __kmp_itt_metadata_imbalance( int gtid, kmp_uint64 begin, kmp_uint64 end, kmp_uint64 imbalance, kmp_uint64 reduction );
+// sched_type: 0 - static, 1 - dynamic, 2 - guided, 3 - custom (all others); iterations - loop trip count, chunk - chunk size
+__kmp_inline void __kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterations, kmp_uint64 chunk );
+__kmp_inline void __kmp_itt_metadata_single( ident_t * loc );
+
+// --- Barrier reporting ---
+__kmp_inline void * __kmp_itt_barrier_object( int gtid, int bt, int set_name = 0, int delta = 0 );
+__kmp_inline void __kmp_itt_barrier_starting( int gtid, void * object );
+__kmp_inline void __kmp_itt_barrier_middle( int gtid, void * object );
+__kmp_inline void __kmp_itt_barrier_finished( int gtid, void * object );
+
+// --- Taskwait reporting ---
+__kmp_inline void * __kmp_itt_taskwait_object( int gtid );
+__kmp_inline void __kmp_itt_taskwait_starting( int gtid, void * object );
+__kmp_inline void __kmp_itt_taskwait_finished( int gtid, void * object );
+
+// --- Task reporting ---
+__kmp_inline void __kmp_itt_task_starting( void * object );
+__kmp_inline void __kmp_itt_task_finished( void * object );
+
+// --- Lock reporting ---
+#if KMP_USE_DYNAMIC_LOCK
+__kmp_inline void __kmp_itt_lock_creating( kmp_user_lock_p lock, const ident_t * );
+#else
+__kmp_inline void __kmp_itt_lock_creating( kmp_user_lock_p lock );
+#endif
+__kmp_inline void __kmp_itt_lock_acquiring( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_lock_acquired( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_lock_releasing( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_lock_cancelled( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_lock_destroyed( kmp_user_lock_p lock );
+
+// --- Critical reporting ---
+#if KMP_USE_DYNAMIC_LOCK
+__kmp_inline void __kmp_itt_critical_creating( kmp_user_lock_p lock, const ident_t * );
+#else
+__kmp_inline void __kmp_itt_critical_creating( kmp_user_lock_p lock );
+#endif
+__kmp_inline void __kmp_itt_critical_acquiring( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_critical_acquired( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_critical_releasing( kmp_user_lock_p lock );
+__kmp_inline void __kmp_itt_critical_destroyed( kmp_user_lock_p lock );
+
+// --- Single reporting ---
+__kmp_inline void __kmp_itt_single_start( int gtid );
+__kmp_inline void __kmp_itt_single_end( int gtid );
+
+// --- Ordered reporting ---
+__kmp_inline void __kmp_itt_ordered_init( int gtid );
+__kmp_inline void __kmp_itt_ordered_prep( int gtid );
+__kmp_inline void __kmp_itt_ordered_start( int gtid );
+__kmp_inline void __kmp_itt_ordered_end( int gtid );
+
+// --- Threads reporting ---
+__kmp_inline void __kmp_itt_thread_ignore();
+__kmp_inline void __kmp_itt_thread_name( int gtid );
+
+// --- System objects ---
+__kmp_inline void __kmp_itt_system_object_created( void * object, char const * name );
+
+// --- Stack stitching ---
+__kmp_inline __itt_caller __kmp_itt_stack_caller_create(void);
+__kmp_inline void __kmp_itt_stack_caller_destroy(__itt_caller);
+__kmp_inline void __kmp_itt_stack_callee_enter(__itt_caller);
+__kmp_inline void __kmp_itt_stack_callee_leave(__itt_caller);
+
+// -------------------------------------------------------------------------------------------------
+// Old stuff for reporting low-level internal synchronization.
+// -------------------------------------------------------------------------------------------------
+
+#if USE_ITT_NOTIFY
+
+ /*
+ * Support for SSC marks, which are used by SDE
+ * http://software.intel.com/en-us/articles/intel-software-development-emulator
+ * to mark points in instruction traces that represent spin-loops and are
+ * therefore uninteresting when collecting traces for architecture simulation.
+ */
+ #ifndef INCLUDE_SSC_MARKS
+ # define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
+ #endif
+
+ /* Linux 64 only for now */
+ #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
+ // Portable (at least for gcc and icc) code to insert the necessary instructions
+ // to set %ebx and execute the unlikely no-op.
+ #if defined( __INTEL_COMPILER )
+ # define INSERT_SSC_MARK(tag) __SSC_MARK(tag)
+ #else
+ # define INSERT_SSC_MARK(tag) \
+ __asm__ __volatile__ ("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag):"%ebx")
+ #endif
+ #else
+ # define INSERT_SSC_MARK(tag) ((void)0)
+ #endif
+
+ /* Markers for the start and end of regions that represent polling and
+ * are therefore uninteresting to architectural simulations 0x4376 and
+ * 0x4377 are arbitrary numbers that should be unique in the space of
+ * SSC tags, but there is no central issuing authority rather
+ * randomness is expected to work.
+ */
+ #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376)
+ #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377)
+
+ // Markers for architecture simulation.
+ // FORKING : Before the master thread forks.
+ // JOINING : At the start of the join.
+ // INVOKING : Before the threads invoke microtasks.
+ // DISPATCH_INIT: At the start of dynamically scheduled loop.
+ // DISPATCH_NEXT: After claming next iteration of dynamically scheduled loop.
+ #define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693)
+ #define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694)
+ #define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695)
+ #define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696)
+ #define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697)
+
+ // The object is an address that associates a specific set of the prepare, acquire, release,
+ // and cancel operations.
+
+ /* Sync prepare indicates a thread is going to start waiting for another thread
+ to send a release event. This operation should be done just before the thread
+ begins checking for the existence of the release event */
+
+ /* Sync cancel indicates a thread is cancelling a wait on another thread anc
+ continuing execution without waiting for the other thread to release it */
+
+ /* Sync acquired indicates a thread has received a release event from another
+ thread and has stopped waiting. This operation must occur only after the release
+ event is received. */
+
+ /* Sync release indicates a thread is going to send a release event to another thread
+ so it will stop waiting and continue execution. This operation must just happen before
+ the release event. */
+
+ #define KMP_FSYNC_PREPARE( obj ) __itt_fsync_prepare( (void *)( obj ) )
+ #define KMP_FSYNC_CANCEL( obj ) __itt_fsync_cancel( (void *)( obj ) )
+ #define KMP_FSYNC_ACQUIRED( obj ) __itt_fsync_acquired( (void *)( obj ) )
+ #define KMP_FSYNC_RELEASING( obj ) __itt_fsync_releasing( (void *)( obj ) )
+
+ /*
+ In case of waiting in a spin loop, ITT wants KMP_FSYNC_PREPARE() to be called with a delay
+ (and not called at all if waiting time is small). So, in spin loops, do not use
+ KMP_FSYNC_PREPARE(), but use KMP_FSYNC_SPIN_INIT() (before spin loop),
+ KMP_FSYNC_SPIN_PREPARE() (whithin the spin loop), and KMP_FSYNC_SPIN_ACQUIRED().
+ See KMP_WAIT_YIELD() for example.
+ */
+
+ #undef KMP_FSYNC_SPIN_INIT
+ #define KMP_FSYNC_SPIN_INIT( obj, spin ) \
+ int sync_iters = 0; \
+ if ( __itt_fsync_prepare_ptr ) { \
+ if ( obj == NULL ) { \
+ obj = spin; \
+ } /* if */ \
+ } /* if */ \
+ SSC_MARK_SPIN_START()
+
+ #undef KMP_FSYNC_SPIN_PREPARE
+ #define KMP_FSYNC_SPIN_PREPARE( obj ) do { \
+ if ( __itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay ) { \
+ ++ sync_iters; \
+ if ( sync_iters >= __kmp_itt_prepare_delay ) { \
+ KMP_FSYNC_PREPARE( (void*) obj ); \
+ } /* if */ \
+ } /* if */ \
+ } while (0)
+ #undef KMP_FSYNC_SPIN_ACQUIRED
+ #define KMP_FSYNC_SPIN_ACQUIRED( obj ) do { \
+ SSC_MARK_SPIN_END(); \
+ if ( sync_iters >= __kmp_itt_prepare_delay ) { \
+ KMP_FSYNC_ACQUIRED( (void*) obj ); \
+ } /* if */ \
+ } while (0)
+
+ /* ITT will not report objects created within KMP_ITT_IGNORE(), e. g.:
+ KMP_ITT_IGNORE(
+ ptr = malloc( size );
+ );
+ */
+ #define KMP_ITT_IGNORE( statement ) do { \
+ __itt_state_t __itt_state_; \
+ if ( __itt_state_get_ptr ) { \
+ __itt_state_ = __itt_state_get(); \
+ __itt_obj_mode_set( __itt_obj_prop_ignore, __itt_obj_state_set ); \
+ } /* if */ \
+ { statement } \
+ if ( __itt_state_get_ptr ) { \
+ __itt_state_set( __itt_state_ ); \
+ } /* if */ \
+ } while (0)
+
+ const int KMP_MAX_FRAME_DOMAINS = 512; // Maximum number of frame domains to use (maps to
+ // different OpenMP regions in the user source code).
+ extern kmp_int32 __kmp_barrier_domain_count;
+ extern kmp_int32 __kmp_region_domain_count;
+ extern __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
+ extern __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
+ extern __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
+ extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
+ extern __itt_domain * metadata_domain;
+ extern __itt_string_handle * string_handle_imbl;
+ extern __itt_string_handle * string_handle_loop;
+ extern __itt_string_handle * string_handle_sngl;
+
+#else
+
+// Null definitions of the synchronization tracing functions.
+# define KMP_FSYNC_PREPARE( obj ) ((void)0)
+# define KMP_FSYNC_CANCEL( obj ) ((void)0)
+# define KMP_FSYNC_ACQUIRED( obj ) ((void)0)
+# define KMP_FSYNC_RELEASING( obj ) ((void)0)
+
+# define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0)
+# define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0)
+# define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0)
+
+# define KMP_ITT_IGNORE(stmt ) do { stmt } while (0)
+
+#endif // USE_ITT_NOTIFY
+
+#if ! KMP_DEBUG
+ // In release mode include definitions of inline functions.
+ #include "kmp_itt.inl"
+#endif
+
+#endif // KMP_ITT_H
+
+#else /* USE_ITT_BUILD */
+
+// Null definitions of the synchronization tracing functions.
+// If USE_ITT_BULID is not enabled, USE_ITT_NOTIFY cannot be either.
+// By defining these we avoid unpleasant ifdef tests in many places.
+# define KMP_FSYNC_PREPARE( obj ) ((void)0)
+# define KMP_FSYNC_CANCEL( obj ) ((void)0)
+# define KMP_FSYNC_ACQUIRED( obj ) ((void)0)
+# define KMP_FSYNC_RELEASING( obj ) ((void)0)
+
+# define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0)
+# define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0)
+# define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0)
+
+# define KMP_ITT_IGNORE(stmt ) do { stmt } while (0)
+
+# define USE_ITT_BUILD_ARG(x)
+
+#endif /* USE_ITT_BUILD */
diff --git a/final/runtime/src/kmp_itt.inl b/final/runtime/src/kmp_itt.inl
new file mode 100644
index 0000000..fbf8490
--- /dev/null
+++ b/final/runtime/src/kmp_itt.inl
@@ -0,0 +1,1148 @@
+#if USE_ITT_BUILD
+/*
+ * kmp_itt.inl -- Inline functions of ITT Notify.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+// Inline function definitions. This file should be included into kmp_itt.h file for prodiction
+// build (to let compliler inline functions) or into kmp_itt.c file for debug build (to reduce
+// the number of files to recompile and save build time).
+
+
+#include "kmp.h"
+#include "kmp_str.h"
+
+#if KMP_ITT_DEBUG
+ extern kmp_bootstrap_lock_t __kmp_itt_debug_lock;
+ #define KMP_ITT_DEBUG_LOCK() { \
+ __kmp_acquire_bootstrap_lock( & __kmp_itt_debug_lock ); \
+ }
+ #define KMP_ITT_DEBUG_PRINT( ... ) { \
+ fprintf( stderr, "#%02d: ", __kmp_get_gtid() ); \
+ fprintf( stderr, __VA_ARGS__ ); \
+ fflush( stderr ); \
+ __kmp_release_bootstrap_lock( & __kmp_itt_debug_lock ); \
+ }
+#else
+ #define KMP_ITT_DEBUG_LOCK()
+ #define KMP_ITT_DEBUG_PRINT( ... )
+#endif // KMP_ITT_DEBUG
+
+// Ensure that the functions are static if they're supposed to be
+// being inlined. Otherwise they cannot be used in more than one file,
+// since there will be multiple definitions.
+#if KMP_DEBUG
+# define LINKAGE
+#else
+# define LINKAGE static inline
+#endif
+
+// ZCA interface used by Intel(R) Inspector. Intel(R) Parallel Amplifier uses this
+// API to support user-defined synchronization primitives, but does not use ZCA;
+// it would be safe to turn this off until wider support becomes available.
+#if USE_ITT_ZCA
+#ifdef __INTEL_COMPILER
+# if __INTEL_COMPILER >= 1200
+# undef __itt_sync_acquired
+# undef __itt_sync_releasing
+# define __itt_sync_acquired(addr) __notify_zc_intrinsic((char *)"sync_acquired", addr)
+# define __itt_sync_releasing(addr) __notify_intrinsic((char *)"sync_releasing", addr)
+# endif
+#endif
+#endif
+
+static kmp_bootstrap_lock_t metadata_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( metadata_lock );
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Parallel region reporting.
+
+ * __kmp_itt_region_forking should be called by master thread of a team. Exact moment of
+ call does not matter, but it should be completed before any thread of this team calls
+ __kmp_itt_region_starting.
+ * __kmp_itt_region_starting should be called by each thread of a team just before entering
+ parallel region body.
+ * __kmp_itt_region_finished should be called by each thread of a team right after returning
+ from parallel region body.
+ * __kmp_itt_region_joined should be called by master thread of a team, after all threads
+ called __kmp_itt_region_finished.
+
+ Note: Thread waiting at join barrier (after __kmp_itt_region_finished) can execute some more
+ user code -- such a thread can execute tasks.
+
+ Note: The overhead of logging region_starting and region_finished in each thread is too large,
+ so these calls are not used.
+
+ ------------------------------------------------------------------------------------------------
+*/
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_region_forking( int gtid, int team_size, int barriers ) {
+#if USE_ITT_NOTIFY
+ kmp_team_t * team = __kmp_team_from_gtid( gtid );
+ if (team->t.t_active_level > 1)
+ {
+ // The frame notifications are only supported for the outermost teams.
+ return;
+ }
+ ident_t * loc = __kmp_thread_from_gtid( gtid )->th.th_ident;
+ if (loc) {
+ // Use the reserved_2 field to store the index to the region domain.
+ // Assume that reserved_2 contains zero initially. Since zero is special
+ // value here, store the index into domain array increased by 1.
+ if (loc->reserved_2 == 0) {
+ if (__kmp_region_domain_count < KMP_MAX_FRAME_DOMAINS) {
+ int frm = KMP_TEST_THEN_INC32( & __kmp_region_domain_count ); // get "old" value
+ if (frm >= KMP_MAX_FRAME_DOMAINS) {
+ KMP_TEST_THEN_DEC32( & __kmp_region_domain_count ); // revert the count
+ return; // loc->reserved_2 is still 0
+ }
+ //if (!KMP_COMPARE_AND_STORE_ACQ32( &loc->reserved_2, 0, frm + 1 )) {
+ // frm = loc->reserved_2 - 1; // get value saved by other thread for same loc
+ //} // AC: this block is to replace next unsynchronized line
+
+ // We need to save indexes for both region and barrier frames. We'll use loc->reserved_2
+ // field but put region index to the low two bytes and barrier indexes to the high
+ // two bytes. It is OK because KMP_MAX_FRAME_DOMAINS = 512.
+ loc->reserved_2 |= (frm + 1); // save "new" value
+
+ // Transform compiler-generated region location into the format
+ // that the tools more or less standardized on:
+ // "<func>$omp$parallel@[file:]<line>[:<col>]"
+ const char * buff = NULL;
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ buff = __kmp_str_format("%s$omp$parallel:%d@%s:%d:%d",
+ str_loc.func, team_size, str_loc.file,
+ str_loc.line, str_loc.col);
+
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_region_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+
+ __kmp_str_free( &buff );
+ if( barriers ) {
+ if (__kmp_barrier_domain_count < KMP_MAX_FRAME_DOMAINS) {
+ int frm = KMP_TEST_THEN_INC32( & __kmp_barrier_domain_count ); // get "old" value
+ if (frm >= KMP_MAX_FRAME_DOMAINS) {
+ KMP_TEST_THEN_DEC32( & __kmp_barrier_domain_count ); // revert the count
+ return; // loc->reserved_2 is still 0
+ }
+ const char * buff = NULL;
+ buff = __kmp_str_format("%s$omp$barrier@%s:%d",
+ str_loc.func, str_loc.file, str_loc.col);
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_barrier_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+ __kmp_str_free( &buff );
+ // Save the barrier frame index to the high two bytes.
+ loc->reserved_2 |= (frm + 1) << 16;
+ }
+ }
+ __kmp_str_loc_free( &str_loc );
+ __itt_frame_begin_v3(__kmp_itt_region_domains[ frm ], NULL);
+ }
+ } else { // Region domain exists for this location
+ // Check if team size was changed. Then create new region domain for this location
+ int frm = (loc->reserved_2 & 0x0000FFFF) - 1;
+ if( __kmp_itt_region_team_size[frm] != team_size ) {
+ const char * buff = NULL;
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ buff = __kmp_str_format("%s$omp$parallel:%d@%s:%d:%d",
+ str_loc.func, team_size, str_loc.file,
+ str_loc.line, str_loc.col);
+
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_region_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+
+ __kmp_str_free( &buff );
+ __kmp_str_loc_free( &str_loc );
+ __kmp_itt_region_team_size[frm] = team_size;
+ __itt_frame_begin_v3(__kmp_itt_region_domains[frm], NULL);
+ } else { // Team size was not changed. Use existing domain.
+ __itt_frame_begin_v3(__kmp_itt_region_domains[frm], NULL);
+ }
+ }
+ KMP_ITT_DEBUG_LOCK();
+ KMP_ITT_DEBUG_PRINT( "[frm beg] gtid=%d, idx=%x, loc:%p\n",
+ gtid, loc->reserved_2, loc );
+ }
+#endif
+} // __kmp_itt_region_forking
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_frame_submit( int gtid, __itt_timestamp begin, __itt_timestamp end, int imbalance, ident_t * loc, int team_size, int region ) {
+#if USE_ITT_NOTIFY
+ if( region ) {
+ kmp_team_t * team = __kmp_team_from_gtid( gtid );
+ int serialized = ( region == 2 ? 1 : 0 );
+ if (team->t.t_active_level + serialized > 1)
+ {
+ // The frame notifications are only supported for the outermost teams.
+ return;
+ }
+ //Check region domain has not been created before. It's index is saved in the low two bytes.
+ if ((loc->reserved_2 & 0x0000FFFF) == 0) {
+ if (__kmp_region_domain_count < KMP_MAX_FRAME_DOMAINS) {
+ int frm = KMP_TEST_THEN_INC32( & __kmp_region_domain_count ); // get "old" value
+ if (frm >= KMP_MAX_FRAME_DOMAINS) {
+ KMP_TEST_THEN_DEC32( & __kmp_region_domain_count ); // revert the count
+ return; // loc->reserved_2 is still 0
+ }
+
+ // We need to save indexes for both region and barrier frames. We'll use loc->reserved_2
+ // field but put region index to the low two bytes and barrier indexes to the high
+ // two bytes. It is OK because KMP_MAX_FRAME_DOMAINS = 512.
+ loc->reserved_2 |= (frm + 1); // save "new" value
+
+ // Transform compiler-generated region location into the format
+ // that the tools more or less standardized on:
+ // "<func>$omp$parallel:team_size@[file:]<line>[:<col>]"
+ const char * buff = NULL;
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ buff = __kmp_str_format("%s$omp$parallel:%d@%s:%d:%d",
+ str_loc.func, team_size, str_loc.file,
+ str_loc.line, str_loc.col);
+
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_region_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+
+ __kmp_str_free( &buff );
+ __kmp_str_loc_free( &str_loc );
+ __kmp_itt_region_team_size[frm] = team_size;
+ __itt_frame_submit_v3(__kmp_itt_region_domains[ frm ], NULL, begin, end );
+ }
+ } else { // Region domain exists for this location
+ // Check if team size was changed. Then create new region domain for this location
+ int frm = (loc->reserved_2 & 0x0000FFFF) - 1;
+ if( __kmp_itt_region_team_size[frm] != team_size ) {
+ const char * buff = NULL;
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ buff = __kmp_str_format("%s$omp$parallel:%d@%s:%d:%d",
+ str_loc.func, team_size, str_loc.file,
+ str_loc.line, str_loc.col);
+
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_region_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+
+ __kmp_str_free( &buff );
+ __kmp_str_loc_free( &str_loc );
+ __kmp_itt_region_team_size[frm] = team_size;
+ __itt_frame_submit_v3(__kmp_itt_region_domains[ frm ], NULL, begin, end );
+ } else { // Team size was not changed. Use existing domain.
+ __itt_frame_submit_v3(__kmp_itt_region_domains[ frm ], NULL, begin, end );
+ }
+ }
+ KMP_ITT_DEBUG_LOCK();
+ KMP_ITT_DEBUG_PRINT( "[reg sub] gtid=%d, idx=%x, region:%d, loc:%p, beg:%llu, end:%llu\n",
+ gtid, loc->reserved_2, region, loc, begin, end );
+ return;
+ } else { // called for barrier reporting
+ if (loc) {
+ if ((loc->reserved_2 & 0xFFFF0000) == 0) {
+ if (__kmp_barrier_domain_count < KMP_MAX_FRAME_DOMAINS) {
+ int frm = KMP_TEST_THEN_INC32( & __kmp_barrier_domain_count ); // get "old" value
+ if (frm >= KMP_MAX_FRAME_DOMAINS) {
+ KMP_TEST_THEN_DEC32( & __kmp_barrier_domain_count ); // revert the count
+ return; // loc->reserved_2 is still 0
+ }
+ // Save the barrier frame index to the high two bytes.
+ loc->reserved_2 |= (frm + 1) << 16; // save "new" value
+
+ // Transform compiler-generated region location into the format
+ // that the tools more or less standardized on:
+ // "<func>$omp$frame@[file:]<line>[:<col>]"
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ if( imbalance ) {
+ const char * buff_imb = NULL;
+ buff_imb = __kmp_str_format("%s$omp$barrier-imbalance:%d@%s:%d",
+ str_loc.func, team_size, str_loc.file, str_loc.col);
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_imbalance_domains[ frm ] = __itt_domain_create( buff_imb );
+ __itt_suppress_pop();
+ __itt_frame_submit_v3(__kmp_itt_imbalance_domains[ frm ], NULL, begin, end );
+ __kmp_str_free( &buff_imb );
+ } else {
+ const char * buff = NULL;
+ buff = __kmp_str_format("%s$omp$barrier@%s:%d",
+ str_loc.func, str_loc.file, str_loc.col);
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ __kmp_itt_barrier_domains[ frm ] = __itt_domain_create( buff );
+ __itt_suppress_pop();
+ __itt_frame_submit_v3(__kmp_itt_barrier_domains[ frm ], NULL, begin, end );
+ __kmp_str_free( &buff );
+ }
+ __kmp_str_loc_free( &str_loc );
+ }
+ } else { // if it is not 0 then it should be <= KMP_MAX_FRAME_DOMAINS
+ if( imbalance ) {
+ __itt_frame_submit_v3(__kmp_itt_imbalance_domains[ (loc->reserved_2 >> 16) - 1 ], NULL, begin, end );
+ } else {
+ __itt_frame_submit_v3(__kmp_itt_barrier_domains[(loc->reserved_2 >> 16) - 1], NULL, begin, end );
+ }
+ }
+ KMP_ITT_DEBUG_LOCK();
+ KMP_ITT_DEBUG_PRINT( "[frm sub] gtid=%d, idx=%x, loc:%p, beg:%llu, end:%llu\n",
+ gtid, loc->reserved_2, loc, begin, end );
+ }
+ }
+#endif
+} // __kmp_itt_frame_submit
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_metadata_imbalance( int gtid, kmp_uint64 begin, kmp_uint64 end, kmp_uint64 imbalance, kmp_uint64 reduction ) {
+#if USE_ITT_NOTIFY
+ if( metadata_domain == NULL) {
+ __kmp_acquire_bootstrap_lock( & metadata_lock );
+ if( metadata_domain == NULL) {
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ metadata_domain = __itt_domain_create( "OMP Metadata" );
+ string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance");
+ string_handle_loop = __itt_string_handle_create( "omp_metadata_loop");
+ string_handle_sngl = __itt_string_handle_create( "omp_metadata_single");
+ __itt_suppress_pop();
+ }
+ __kmp_release_bootstrap_lock( & metadata_lock );
+ }
+
+ kmp_uint64 imbalance_data[ 4 ];
+ imbalance_data[ 0 ] = begin;
+ imbalance_data[ 1 ] = end;
+ imbalance_data[ 2 ] = imbalance;
+ imbalance_data[ 3 ] = reduction;
+
+ __itt_metadata_add(metadata_domain, __itt_null, string_handle_imbl, __itt_metadata_u64, 4, imbalance_data);
+#endif
+} // __kmp_itt_metadata_imbalance
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterations, kmp_uint64 chunk ) {
+#if USE_ITT_NOTIFY
+ if( metadata_domain == NULL) {
+ __kmp_acquire_bootstrap_lock( & metadata_lock );
+ if( metadata_domain == NULL) {
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ metadata_domain = __itt_domain_create( "OMP Metadata" );
+ string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance");
+ string_handle_loop = __itt_string_handle_create( "omp_metadata_loop");
+ string_handle_sngl = __itt_string_handle_create( "omp_metadata_single");
+ __itt_suppress_pop();
+ }
+ __kmp_release_bootstrap_lock( & metadata_lock );
+ }
+
+ // Parse line and column from psource string: ";file;func;line;col;;"
+ char * s_line;
+ char * s_col;
+ KMP_DEBUG_ASSERT(loc->psource);
+#ifdef __cplusplus
+ s_line = strchr((char*)loc->psource, ';');
+#else
+ s_line = strchr(loc->psource, ';');
+#endif
+ KMP_DEBUG_ASSERT(s_line);
+ s_line = strchr(s_line + 1, ';'); // 2-nd semicolon
+ KMP_DEBUG_ASSERT(s_line);
+ s_line = strchr(s_line + 1, ';'); // 3-rd semicolon
+ KMP_DEBUG_ASSERT(s_line);
+ s_col = strchr(s_line + 1, ';'); // 4-th semicolon
+ KMP_DEBUG_ASSERT(s_col);
+
+ kmp_uint64 loop_data[ 5 ];
+ loop_data[ 0 ] = atoi(s_line + 1); // read line
+ loop_data[ 1 ] = atoi(s_col + 1); // read column
+ loop_data[ 2 ] = sched_type;
+ loop_data[ 3 ] = iterations;
+ loop_data[ 4 ] = chunk;
+
+ __itt_metadata_add(metadata_domain, __itt_null, string_handle_loop, __itt_metadata_u64, 5, loop_data);
+#endif
+} // __kmp_itt_metadata_loop
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_metadata_single( ident_t * loc ) {
+#if USE_ITT_NOTIFY
+ if( metadata_domain == NULL) {
+ __kmp_acquire_bootstrap_lock( & metadata_lock );
+ if( metadata_domain == NULL) {
+ __itt_suppress_push(__itt_suppress_memory_errors);
+ metadata_domain = __itt_domain_create( "OMP Metadata" );
+ string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance");
+ string_handle_loop = __itt_string_handle_create( "omp_metadata_loop");
+ string_handle_sngl = __itt_string_handle_create( "omp_metadata_single");
+ __itt_suppress_pop();
+ }
+ __kmp_release_bootstrap_lock( & metadata_lock );
+ }
+
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
+ kmp_uint64 single_data[ 2 ];
+ single_data[ 0 ] = str_loc.line;
+ single_data[ 1 ] = str_loc.col;
+
+ __kmp_str_loc_free( &str_loc );
+
+ __itt_metadata_add(metadata_domain, __itt_null, string_handle_sngl, __itt_metadata_u64, 2, single_data);
+#endif
+} // __kmp_itt_metadata_single
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_region_starting( int gtid ) {
+#if USE_ITT_NOTIFY
+#endif
+} // __kmp_itt_region_starting
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_region_finished( int gtid ) {
+#if USE_ITT_NOTIFY
+#endif
+} // __kmp_itt_region_finished
+
+// -------------------------------------------------------------------------------------------------
+
+LINKAGE void
+__kmp_itt_region_joined( int gtid ) {
+#if USE_ITT_NOTIFY
+ kmp_team_t * team = __kmp_team_from_gtid( gtid );
+ if (team->t.t_active_level > 1)
+ {
+ // The frame notifications are only supported for the outermost teams.
+ return;
+ }
+ ident_t * loc = __kmp_thread_from_gtid( gtid )->th.th_ident;
+ if (loc && loc->reserved_2)
+ {
+ int frm = (loc->reserved_2 & 0x0000FFFF) - 1;
+ if(frm < KMP_MAX_FRAME_DOMAINS) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_frame_end_v3(__kmp_itt_region_domains[frm], NULL);
+ KMP_ITT_DEBUG_PRINT( "[frm end] gtid=%d, idx=%x, loc:%p\n",
+ gtid, loc->reserved_2, loc );
+ }
+ }
+#endif
+} // __kmp_itt_region_joined
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Barriers reporting.
+
+ A barrier consists of two phases:
+
+ 1. Gather -- master waits for arriving of all the worker threads; each worker thread
+ registers arrival and goes further.
+ 2. Release -- each worker threads waits until master lets it go; master lets worker threads
+ go.
+
+ Function should be called by each thread:
+
+ * __kmp_itt_barrier_starting() -- before arriving to the gather phase.
+ * __kmp_itt_barrier_middle() -- between gather and release phases.
+ * __kmp_itt_barrier_finished() -- after release phase.
+
+ Note: Call __kmp_itt_barrier_object() before call to __kmp_itt_barrier_starting() and save
+ result in local variable. __kmp_itt_barrier_object(), being called too late (e. g. after gather
+ phase) would return itt sync object for the next barrier!
+
+ ITT need an address (void *) to be specified as a sync object. OpenMP RTL does not have
+ barrier object or barrier data structure. Barrier is just a counter in team and thread
+ structures. We could use an address of team structure as an barrier sync object, but ITT wants
+ different objects for different barriers (even whithin the same team). So let us use
+ team address as barrier sync object for the first barrier, then increase it by one for the next
+ barrier, and so on (but wrap it not to use addresses outside of team structure).
+
+ ------------------------------------------------------------------------------------------------
+*/
+
+void *
+__kmp_itt_barrier_object(
+ int gtid,
+ int bt,
+ int set_name,
+ int delta // 0 (current barrier) is default value; specify -1 to get previous barrier.
+) {
+ void * object = NULL;
+#if USE_ITT_NOTIFY
+ kmp_info_t * thr = __kmp_thread_from_gtid( gtid );
+ kmp_team_t * team = thr->th.th_team;
+
+ // NOTE:
+ // If the function is called from __kmp_fork_barrier, team pointer can be NULL. This "if"
+ // helps to avoid crash. However, this is not complete solution, and reporting fork/join
+ // barriers to ITT should be revisited.
+
+ if ( team != NULL ) {
+
+ // Master thread increases b_arrived by KMP_BARRIER_STATE_BUMP each time. Divide b_arrived
+ // by KMP_BARRIER_STATE_BUMP to get plain barrier counter.
+ kmp_uint64 counter = team->t.t_bar[ bt ].b_arrived / KMP_BARRIER_STATE_BUMP + delta;
+ // Now form the barrier id. Encode barrier type (bt) in barrier id too, so barriers of
+ // different types do not have the same ids.
+ KMP_BUILD_ASSERT( sizeof( kmp_team_t ) >= bs_last_barrier );
+ // This conditon is a must (we would have zero divide otherwise).
+ KMP_BUILD_ASSERT( sizeof( kmp_team_t ) >= 2 * bs_last_barrier );
+ // More strong condition: make sure we have room at least for for two differtent ids
+ // (for each barrier type).
+ object =
+ reinterpret_cast< void * >(
+ kmp_uintptr_t( team )
+ + counter % ( sizeof( kmp_team_t ) / bs_last_barrier ) * bs_last_barrier
+ + bt
+ );
+ KMP_ITT_DEBUG_LOCK();
+ KMP_ITT_DEBUG_PRINT( "[bar obj] type=%d, counter=%lld, object=%p\n", bt, counter, object );
+
+ if ( set_name ) {
+ ident_t const * loc = NULL;
+ char const * src = NULL;
+ char const * type = "OMP Barrier";
+ switch ( bt ) {
+ case bs_plain_barrier : {
+ // For plain barrier compiler calls __kmpc_barrier() function, which saves
+ // location in thr->th.th_ident.
+ loc = thr->th.th_ident;
+ // Get the barrier type from flags provided by compiler.
+ kmp_int32 expl = 0;
+ kmp_uint32 impl = 0;
+ if ( loc != NULL ) {
+ src = loc->psource;
+ expl = ( loc->flags & KMP_IDENT_BARRIER_EXPL ) != 0;
+ impl = ( loc->flags & KMP_IDENT_BARRIER_IMPL ) != 0;
+ }; // if
+ if ( impl ) {
+ switch ( loc->flags & KMP_IDENT_BARRIER_IMPL_MASK ) {
+ case KMP_IDENT_BARRIER_IMPL_FOR : {
+ type = "OMP For Barrier";
+ } break;
+ case KMP_IDENT_BARRIER_IMPL_SECTIONS : {
+ type = "OMP Sections Barrier";
+ } break;
+ case KMP_IDENT_BARRIER_IMPL_SINGLE : {
+ type = "OMP Single Barrier";
+ } break;
+ case KMP_IDENT_BARRIER_IMPL_WORKSHARE : {
+ type = "OMP Workshare Barrier";
+ } break;
+ default : {
+ type = "OMP Implicit Barrier";
+ KMP_DEBUG_ASSERT( 0 );
+ };
+ }; /* switch */
+ } else if ( expl ) {
+ type = "OMP Explicit Barrier";
+ }; /* if */
+ } break;
+ case bs_forkjoin_barrier : {
+ // In case of fork/join barrier we can read thr->th.th_ident, because it
+ // contains location of last passed construct (while join barrier is not
+ // such one). Use th_ident of master thread instead -- __kmp_join_call()
+ // called by the master thread saves location.
+ //
+ // AC: cannot read from master because __kmp_join_call may be not called
+ // yet, so we read the location from team. This is the same location.
+ // And team is valid at the enter to join barrier where this happens.
+ loc = team->t.t_ident;
+ if ( loc != NULL ) {
+ src = loc->psource;
+ }; // if
+ type = "OMP Join Barrier";
+ } break;
+ }; // switch
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_create( object, type, src, __itt_attr_barrier );
+ KMP_ITT_DEBUG_PRINT( "[bar sta] scre( %p, \"%s\", \"%s\", __itt_attr_barrier )\n", object, type, src );
+ }; // if
+
+ }; // if
+#endif
+ return object;
+} // __kmp_itt_barrier_object
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_itt_barrier_starting( int gtid, void * object ) {
+#if USE_ITT_NOTIFY
+ if ( !KMP_MASTER_GTID( gtid ) ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_releasing( object );
+ KMP_ITT_DEBUG_PRINT( "[bar sta] srel( %p )\n", object );
+ }; // if
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_prepare( object );
+ KMP_ITT_DEBUG_PRINT( "[bar sta] spre( %p )\n", object );
+#endif
+} // __kmp_itt_barrier_starting
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_itt_barrier_middle( int gtid, void * object ) {
+#if USE_ITT_NOTIFY
+ if ( KMP_MASTER_GTID( gtid ) ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_acquired( object );
+ KMP_ITT_DEBUG_PRINT( "[bar mid] sacq( %p )\n", object );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_releasing( object );
+ KMP_ITT_DEBUG_PRINT( "[bar mid] srel( %p )\n", object );
+ } else {
+ }; // if
+#endif
+} // __kmp_itt_barrier_middle
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_itt_barrier_finished( int gtid, void * object ) {
+#if USE_ITT_NOTIFY
+ if ( KMP_MASTER_GTID( gtid ) ) {
+ } else {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_acquired( object );
+ KMP_ITT_DEBUG_PRINT( "[bar end] sacq( %p )\n", object );
+ }; // if
+#endif
+} // __kmp_itt_barrier_finished
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Taskwait reporting.
+
+ ITT need an address (void *) to be specified as a sync object. OpenMP RTL does not have taskwait
+ structure, so we need to construct something.
+
+*/
+
+void *
+__kmp_itt_taskwait_object( int gtid ) {
+ void * object = NULL;
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ kmp_info_t * thread = __kmp_thread_from_gtid( gtid );
+ kmp_taskdata_t * taskdata = thread -> th.th_current_task;
+ object =
+ reinterpret_cast< void * >(
+ kmp_uintptr_t( taskdata ) + taskdata->td_taskwait_counter % sizeof( kmp_taskdata_t )
+ );
+ }; // if
+#endif
+ return object;
+} // __kmp_itt_taskwait_object
+
+void
+__kmp_itt_taskwait_starting(
+ int gtid,
+ void * object
+) {
+#if USE_ITT_NOTIFY
+ kmp_info_t * thread = __kmp_thread_from_gtid( gtid );
+ kmp_taskdata_t * taskdata = thread -> th.th_current_task;
+ ident_t const * loc = taskdata->td_taskwait_ident;
+ char const * src = ( loc == NULL? NULL : loc->psource );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_create( object, "OMP Taskwait", src, 0 );
+ KMP_ITT_DEBUG_PRINT( "[twa sta] scre( %p, \"OMP Taskwait\", \"%s\", 0 )\n", object, src );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_prepare( object );
+ KMP_ITT_DEBUG_PRINT( "[twa sta] spre( %p )\n", object );
+#endif
+} // __kmp_itt_taskwait_starting
+
+void
+__kmp_itt_taskwait_finished(
+ int gtid,
+ void * object
+) {
+#if USE_ITT_NOTIFY
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_acquired( object );
+ KMP_ITT_DEBUG_PRINT( "[twa end] sacq( %p )\n", object );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_destroy( object );
+ KMP_ITT_DEBUG_PRINT( "[twa end] sdes( %p )\n", object );
+#endif
+} // __kmp_itt_taskwait_finished
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Task reporting.
+
+ Only those tasks are reported which are executed by a thread spinning at barrier (or taskwait).
+ Synch object passed to the function must be barrier of taskwait the threads waiting at.
+ ------------------------------------------------------------------------------------------------
+*/
+
+void
+__kmp_itt_task_starting(
+ void * object // ITT sync object: barrier or taskwait.
+) {
+#if USE_ITT_NOTIFY
+ if ( object != NULL ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_cancel( object );
+ KMP_ITT_DEBUG_PRINT( "[tsk sta] scan( %p )\n", object );
+ }; // if
+#endif
+} // __kmp_itt_task_starting
+
+// -------------------------------------------------------------------------------------------------
+
+void
+__kmp_itt_task_finished(
+ void * object // ITT sync object: barrier or taskwait.
+) {
+#if USE_ITT_NOTIFY
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_prepare( object );
+ KMP_ITT_DEBUG_PRINT( "[tsk end] spre( %p )\n", object );
+#endif
+} // __kmp_itt_task_finished
+
+// -------------------------------------------------------------------------------------------------
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Lock reporting.
+
+ * __kmp_itt_lock_creating( lock ) should be called *before* the first lock operation
+ (set/unset). It is not a real event shown to the user but just setting a name for
+ synchronization object. `lock' is an address of sync object, the same address should be
+ used in all subsequent calls.
+
+ * __kmp_itt_lock_acquiring() should be called before setting the lock.
+
+ * __kmp_itt_lock_acquired() should be called after setting the lock.
+
+ * __kmp_itt_lock_realeasing() should be called before unsetting the lock.
+
+ * __kmp_itt_lock_cancelled() should be called after thread cancelled waiting for the lock.
+
+ * __kmp_itt_lock_destroyed( lock ) should be called after the last lock operation. After
+ __kmp_itt_lock_destroyed() all the references to the same address will be considered
+ as another sync object, not related with the original one.
+ ------------------------------------------------------------------------------------------------
+*/
+
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_USE_DYNAMIC_LOCK
+// Takes location information directly
+__kmp_inline
+void
+___kmp_itt_lock_init( kmp_user_lock_p lock, char const *type, const ident_t *loc ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ char const * src = ( loc == NULL ? NULL : loc->psource );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_create( lock, type, src, 0 );
+ KMP_ITT_DEBUG_PRINT( "[lck ini] scre( %p, \"%s\", \"%s\", 0 )\n", lock, type, src );
+ }
+#endif
+}
+#else // KMP_USE_DYNAMIC_LOCK
+// Internal guts -- common code for locks and critical sections, do not call directly.
+__kmp_inline
+void
+___kmp_itt_lock_init( kmp_user_lock_p lock, char const * type ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ ident_t const * loc = NULL;
+ if ( __kmp_get_user_lock_location_ != NULL )
+ loc = __kmp_get_user_lock_location_( (lock) );
+ char const * src = ( loc == NULL ? NULL : loc->psource );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_create( lock, type, src, 0 );
+ KMP_ITT_DEBUG_PRINT( "[lck ini] scre( %p, \"%s\", \"%s\", 0 )\n", lock, type, src );
+ }; // if
+#endif
+} // ___kmp_itt_lock_init
+#endif // KMP_USE_DYNAMIC_LOCK
+
+// Internal guts -- common code for locks and critical sections, do not call directly.
+__kmp_inline
+void
+___kmp_itt_lock_fini( kmp_user_lock_p lock, char const * type ) {
+#if USE_ITT_NOTIFY
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_destroy( lock );
+ KMP_ITT_DEBUG_PRINT( "[lck dst] sdes( %p )\n", lock );
+#endif
+} // ___kmp_itt_lock_fini
+
+
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_USE_DYNAMIC_LOCK
+void
+__kmp_itt_lock_creating( kmp_user_lock_p lock, const ident_t *loc ) {
+ ___kmp_itt_lock_init( lock, "OMP Lock", loc );
+}
+#else
+void
+__kmp_itt_lock_creating( kmp_user_lock_p lock ) {
+ ___kmp_itt_lock_init( lock, "OMP Lock" );
+} // __kmp_itt_lock_creating
+#endif
+
+void
+__kmp_itt_lock_acquiring( kmp_user_lock_p lock ) {
+#if KMP_USE_DYNAMIC_LOCK && USE_ITT_NOTIFY
+ // postpone lock object access
+ if ( __itt_sync_prepare_ptr ) {
+ if ( KMP_EXTRACT_D_TAG(lock) == 0 ) {
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __itt_sync_prepare( ilk->lock );
+ } else {
+ __itt_sync_prepare( lock );
+ }
+ }
+#else
+ __itt_sync_prepare( lock );
+#endif
+} // __kmp_itt_lock_acquiring
+
+void
+__kmp_itt_lock_acquired( kmp_user_lock_p lock ) {
+#if KMP_USE_DYNAMIC_LOCK && USE_ITT_NOTIFY
+ // postpone lock object access
+ if ( __itt_sync_acquired_ptr ) {
+ if ( KMP_EXTRACT_D_TAG(lock) == 0 ) {
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __itt_sync_acquired( ilk->lock );
+ } else {
+ __itt_sync_acquired( lock );
+ }
+ }
+#else
+ __itt_sync_acquired( lock );
+#endif
+} // __kmp_itt_lock_acquired
+
+void
+__kmp_itt_lock_releasing( kmp_user_lock_p lock ) {
+#if KMP_USE_DYNAMIC_LOCK && USE_ITT_NOTIFY
+ if ( __itt_sync_releasing_ptr ) {
+ if ( KMP_EXTRACT_D_TAG(lock) == 0 ) {
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __itt_sync_releasing( ilk->lock );
+ } else {
+ __itt_sync_releasing( lock );
+ }
+ }
+#else
+ __itt_sync_releasing( lock );
+#endif
+} // __kmp_itt_lock_releasing
+
+void
+__kmp_itt_lock_cancelled( kmp_user_lock_p lock ) {
+#if KMP_USE_DYNAMIC_LOCK && USE_ITT_NOTIFY
+ if ( __itt_sync_cancel_ptr ) {
+ if ( KMP_EXTRACT_D_TAG(lock) == 0 ) {
+ kmp_indirect_lock_t *ilk = KMP_LOOKUP_I_LOCK(lock);
+ __itt_sync_cancel( ilk->lock );
+ } else {
+ __itt_sync_cancel( lock );
+ }
+ }
+#else
+ __itt_sync_cancel( lock );
+#endif
+} // __kmp_itt_lock_cancelled
+
+void
+__kmp_itt_lock_destroyed( kmp_user_lock_p lock ) {
+ ___kmp_itt_lock_fini( lock, "OMP Lock" );
+} // __kmp_itt_lock_destroyed
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Critical reporting.
+
+ Critical sections are treated exactly as locks (but have different object type).
+ ------------------------------------------------------------------------------------------------
+*/
+#if KMP_USE_DYNAMIC_LOCK
+void
+__kmp_itt_critical_creating( kmp_user_lock_p lock, const ident_t *loc ) {
+ ___kmp_itt_lock_init( lock, "OMP Critical", loc);
+}
+#else
+void
+__kmp_itt_critical_creating( kmp_user_lock_p lock ) {
+ ___kmp_itt_lock_init( lock, "OMP Critical" );
+} // __kmp_itt_critical_creating
+#endif
+
+void
+__kmp_itt_critical_acquiring( kmp_user_lock_p lock ) {
+ __itt_sync_prepare( lock );
+} // __kmp_itt_critical_acquiring
+
+void
+__kmp_itt_critical_acquired( kmp_user_lock_p lock ) {
+ __itt_sync_acquired( lock );
+} // __kmp_itt_critical_acquired
+
+void
+__kmp_itt_critical_releasing( kmp_user_lock_p lock ) {
+ __itt_sync_releasing( lock );
+} // __kmp_itt_critical_releasing
+
+void
+__kmp_itt_critical_destroyed( kmp_user_lock_p lock ) {
+ ___kmp_itt_lock_fini( lock, "OMP Critical" );
+} // __kmp_itt_critical_destroyed
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Single reporting.
+ ------------------------------------------------------------------------------------------------
+*/
+
+void
+__kmp_itt_single_start( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_mark_create_ptr || KMP_ITT_DEBUG ) {
+ kmp_info_t * thr = __kmp_thread_from_gtid( (gtid) );
+ ident_t * loc = thr->th.th_ident;
+ char const * src = ( loc == NULL ? NULL : loc->psource );
+ kmp_str_buf_t name;
+ __kmp_str_buf_init( & name );
+ __kmp_str_buf_print( & name, "OMP Single-%s", src );
+ KMP_ITT_DEBUG_LOCK();
+ thr->th.th_itt_mark_single = __itt_mark_create( name.str );
+ KMP_ITT_DEBUG_PRINT( "[sin sta] mcre( \"%s\") -> %d\n", name.str, thr->th.th_itt_mark_single );
+ __kmp_str_buf_free( & name );
+ KMP_ITT_DEBUG_LOCK();
+ __itt_mark( thr->th.th_itt_mark_single, NULL );
+ KMP_ITT_DEBUG_PRINT( "[sin sta] mark( %d, NULL )\n", thr->th.th_itt_mark_single );
+ }; // if
+#endif
+} // __kmp_itt_single_start
+
+void
+__kmp_itt_single_end( int gtid ) {
+#if USE_ITT_NOTIFY
+ __itt_mark_type mark = __kmp_thread_from_gtid( gtid )->th.th_itt_mark_single;
+ KMP_ITT_DEBUG_LOCK();
+ __itt_mark_off( mark );
+ KMP_ITT_DEBUG_PRINT( "[sin end] moff( %d )\n", mark );
+#endif
+} // __kmp_itt_single_end
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Ordered reporting.
+
+ __kmp_itt_ordered_init is called by each thread *before* first using sync
+ object. ITT team would like it to be called once, but it requires extra synchronization.
+
+ __kmp_itt_ordered_prep is called when thread is going to enter ordered section
+ (before synchronization).
+
+ __kmp_itt_ordered_start is called just before entering user code (after
+ synchronization).
+
+ __kmp_itt_ordered_end is called after returning from user code.
+
+ Sync object is th->th.th_dispatch->th_dispatch_sh_current.
+
+ Events are not generated in case of serialized team.
+ ------------------------------------------------------------------------------------------------
+*/
+
+void
+__kmp_itt_ordered_init( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ kmp_info_t * thr = __kmp_thread_from_gtid( gtid );
+ ident_t const * loc = thr->th.th_ident;
+ char const * src = ( loc == NULL ? NULL : loc->psource );
+ __itt_sync_create(
+ thr->th.th_dispatch->th_dispatch_sh_current, "OMP Ordered", src, 0
+ );
+ }; // if
+#endif
+} // __kmp_itt_ordered_init
+
+void
+__kmp_itt_ordered_prep( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ kmp_team_t * t = __kmp_team_from_gtid( gtid );
+ if ( ! t->t.t_serialized ) {
+ kmp_info_t * th = __kmp_thread_from_gtid( gtid );
+ __itt_sync_prepare( th->th.th_dispatch->th_dispatch_sh_current );
+ }; // if
+ }; // if
+#endif
+} // __kmp_itt_ordered_prep
+
+void
+__kmp_itt_ordered_start( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ kmp_team_t * t = __kmp_team_from_gtid( gtid );
+ if ( ! t->t.t_serialized ) {
+ kmp_info_t * th = __kmp_thread_from_gtid( gtid );
+ __itt_sync_acquired( th->th.th_dispatch->th_dispatch_sh_current );
+ }; // if
+ }; // if
+#endif
+} // __kmp_itt_ordered_start
+
+void
+__kmp_itt_ordered_end( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr ) {
+ kmp_team_t * t = __kmp_team_from_gtid( gtid );
+ if ( ! t->t.t_serialized ) {
+ kmp_info_t * th = __kmp_thread_from_gtid( gtid );
+ __itt_sync_releasing( th->th.th_dispatch->th_dispatch_sh_current );
+ }; // if
+ }; // if
+#endif
+} // __kmp_itt_ordered_end
+
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Threads reporting.
+ ------------------------------------------------------------------------------------------------
+*/
+
+void
+__kmp_itt_thread_ignore() {
+ __itt_thr_ignore();
+} // __kmp_itt_thread_ignore
+
+void
+__kmp_itt_thread_name( int gtid ) {
+#if USE_ITT_NOTIFY
+ if ( __itt_thr_name_set_ptr ) {
+ kmp_str_buf_t name;
+ __kmp_str_buf_init( & name );
+ if( KMP_MASTER_GTID(gtid) ) {
+ __kmp_str_buf_print( & name, "OMP Master Thread #%d", gtid );
+ } else {
+ __kmp_str_buf_print( & name, "OMP Worker Thread #%d", gtid );
+ }
+ KMP_ITT_DEBUG_LOCK();
+ __itt_thr_name_set( name.str, name.used );
+ KMP_ITT_DEBUG_PRINT( "[thr nam] name( \"%s\")\n", name.str );
+ __kmp_str_buf_free( & name );
+ }; // if
+#endif
+} // __kmp_itt_thread_name
+
+
+/*
+ --------------------------------------------------------------------------
+ System object reporting.
+
+ ITT catches operations with system sync objects (like Windows* OS on IA-32
+ architecture API critical sections and events). We only need to specify
+ name ("OMP Scheduler") for the object to let ITT know it is an object used
+ by OpenMP RTL for internal purposes.
+ --------------------------------------------------------------------------
+*/
+
+void
+__kmp_itt_system_object_created( void * object, char const * name ) {
+#if USE_ITT_NOTIFY
+ KMP_ITT_DEBUG_LOCK();
+ __itt_sync_create( object, "OMP Scheduler", name, 0 );
+ KMP_ITT_DEBUG_PRINT( "[sys obj] scre( %p, \"OMP Scheduler\", \"%s\", 0 )\n", object, name );
+#endif
+} // __kmp_itt_system_object_created
+
+
+/*
+ ------------------------------------------------------------------------------------------------
+ Stack stitching api.
+
+ Master calls "create" and put the stitching id into team structure.
+ Workers read the stitching id and call "enter" / "leave" api.
+ Master calls "destroy" at the end of the parallel region.
+ ------------------------------------------------------------------------------------------------
+*/
+
+__itt_caller
+__kmp_itt_stack_caller_create()
+{
+#if USE_ITT_NOTIFY
+ if ( !__itt_stack_caller_create_ptr )
+ return NULL;
+ KMP_ITT_DEBUG_LOCK();
+ __itt_caller id = __itt_stack_caller_create();
+ KMP_ITT_DEBUG_PRINT( "[stk cre] %p\n", id );
+ return id;
+#endif
+ return NULL;
+}
+
+void
+__kmp_itt_stack_caller_destroy( __itt_caller id )
+{
+#if USE_ITT_NOTIFY
+ if ( __itt_stack_caller_destroy_ptr ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_stack_caller_destroy( id );
+ KMP_ITT_DEBUG_PRINT( "[stk des] %p\n", id );
+ }
+#endif
+}
+
+void
+__kmp_itt_stack_callee_enter( __itt_caller id )
+{
+#if USE_ITT_NOTIFY
+ if ( __itt_stack_callee_enter_ptr ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_stack_callee_enter( id );
+ KMP_ITT_DEBUG_PRINT( "[stk ent] %p\n", id );
+ }
+#endif
+}
+
+void
+__kmp_itt_stack_callee_leave( __itt_caller id )
+{
+#if USE_ITT_NOTIFY
+ if ( __itt_stack_callee_leave_ptr ) {
+ KMP_ITT_DEBUG_LOCK();
+ __itt_stack_callee_leave( id );
+ KMP_ITT_DEBUG_PRINT( "[stk lea] %p\n", id );
+ }
+#endif
+}
+
+#endif /* USE_ITT_BUILD */
diff --git a/final/runtime/src/kmp_lock.cpp b/final/runtime/src/kmp_lock.cpp
new file mode 100644
index 0000000..2cca611
--- /dev/null
+++ b/final/runtime/src/kmp_lock.cpp
@@ -0,0 +1,4258 @@
+/*
+ * kmp_lock.cpp -- lock-related functions
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stddef.h>
+#include <atomic>
+
+#include "kmp.h"
+#include "kmp_itt.h"
+#include "kmp_i18n.h"
+#include "kmp_lock.h"
+#include "kmp_io.h"
+
+#if KMP_USE_FUTEX
+# include <unistd.h>
+# include <sys/syscall.h>
+// We should really include <futex.h>, but that causes compatibility problems on different
+// Linux* OS distributions that either require that you include (or break when you try to include)
+// <pci/types.h>.
+// Since all we need is the two macros below (which are part of the kernel ABI, so can't change)
+// we just define the constants here and don't include <futex.h>
+# ifndef FUTEX_WAIT
+# define FUTEX_WAIT 0
+# endif
+# ifndef FUTEX_WAKE
+# define FUTEX_WAKE 1
+# endif
+#endif
+
+/* Implement spin locks for internal library use. */
+/* The algorithm implemented is Lamport's bakery lock [1974]. */
+
+void
+__kmp_validate_locks( void )
+{
+ int i;
+ kmp_uint32 x, y;
+
+ /* Check to make sure unsigned arithmetic does wraps properly */
+ x = ~((kmp_uint32) 0) - 2;
+ y = x - 2;
+
+ for (i = 0; i < 8; ++i, ++x, ++y) {
+ kmp_uint32 z = (x - y);
+ KMP_ASSERT( z == 2 );
+ }
+
+ KMP_ASSERT( offsetof( kmp_base_queuing_lock, tail_id ) % 8 == 0 );
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* test and set locks */
+
+//
+// For the non-nested locks, we can only assume that the first 4 bytes were
+// allocated, since gcc only allocates 4 bytes for omp_lock_t, and the Intel
+// compiler only allocates a 4 byte pointer on IA-32 architecture. On
+// Windows* OS on Intel(R) 64, we can assume that all 8 bytes were allocated.
+//
+// gcc reserves >= 8 bytes for nested locks, so we can assume that the
+// entire 8 bytes were allocated for nested locks on all 64-bit platforms.
+//
+
+static kmp_int32
+__kmp_get_tas_lock_owner( kmp_tas_lock_t *lck )
+{
+ return KMP_LOCK_STRIP(TCR_4( lck->lk.poll )) - 1;
+}
+
+static inline bool
+__kmp_is_tas_lock_nestable( kmp_tas_lock_t *lck )
+{
+ return lck->lk.depth_locked != -1;
+}
+
+__forceinline static int
+__kmp_acquire_tas_lock_timed_template( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_MB();
+
+#ifdef USE_LOCK_PROFILE
+ kmp_uint32 curr = KMP_LOCK_STRIP( TCR_4( lck->lk.poll ) );
+ if ( ( curr != 0 ) && ( curr != gtid + 1 ) )
+ __kmp_printf( "LOCK CONTENTION: %p\n", lck );
+ /* else __kmp_printf( "." );*/
+#endif /* USE_LOCK_PROFILE */
+
+ if ( ( lck->lk.poll == KMP_LOCK_FREE(tas) )
+ && KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas) ) ) {
+ KMP_FSYNC_ACQUIRED(lck);
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+
+ kmp_uint32 spins;
+ KMP_FSYNC_PREPARE( lck );
+ KMP_INIT_YIELD( spins );
+ if ( TCR_4( __kmp_nth ) > ( __kmp_avail_proc ? __kmp_avail_proc :
+ __kmp_xproc ) ) {
+ KMP_YIELD( TRUE );
+ }
+ else {
+ KMP_YIELD_SPIN( spins );
+ }
+
+ kmp_backoff_t backoff = __kmp_spin_backoff_params;
+ while ( ( lck->lk.poll != KMP_LOCK_FREE(tas) ) ||
+ ( ! KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas) ) ) ) {
+
+ __kmp_spin_backoff(&backoff);
+ if ( TCR_4( __kmp_nth ) > ( __kmp_avail_proc ? __kmp_avail_proc :
+ __kmp_xproc ) ) {
+ KMP_YIELD( TRUE );
+ }
+ else {
+ KMP_YIELD_SPIN( spins );
+ }
+ }
+ KMP_FSYNC_ACQUIRED( lck );
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_acquire_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_acquire_tas_lock_timed_template( lck, gtid );
+}
+
+static int
+__kmp_acquire_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_tas_lock_owner( lck ) == gtid ) ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+ return __kmp_acquire_tas_lock( lck, gtid );
+}
+
+int
+__kmp_test_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ if ( ( lck->lk.poll == KMP_LOCK_FREE(tas) )
+ && KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(tas), KMP_LOCK_BUSY(gtid+1, tas) ) ) {
+ KMP_FSYNC_ACQUIRED( lck );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static int
+__kmp_test_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ return __kmp_test_tas_lock( lck, gtid );
+}
+
+int
+__kmp_release_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KMP_FSYNC_RELEASING(lck);
+ KMP_ST_REL32( &(lck->lk.poll), KMP_LOCK_FREE(tas) );
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KMP_YIELD( TCR_4( __kmp_nth ) > ( __kmp_avail_proc ? __kmp_avail_proc :
+ __kmp_xproc ) );
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_tas_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_tas_lock_owner( lck ) >= 0 )
+ && ( __kmp_get_tas_lock_owner( lck ) != gtid ) ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_tas_lock( lck, gtid );
+}
+
+void
+__kmp_init_tas_lock( kmp_tas_lock_t * lck )
+{
+ TCW_4( lck->lk.poll, KMP_LOCK_FREE(tas) );
+}
+
+static void
+__kmp_init_tas_lock_with_checks( kmp_tas_lock_t * lck )
+{
+ __kmp_init_tas_lock( lck );
+}
+
+void
+__kmp_destroy_tas_lock( kmp_tas_lock_t *lck )
+{
+ lck->lk.poll = 0;
+}
+
+static void
+__kmp_destroy_tas_lock_with_checks( kmp_tas_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_tas_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_tas_lock( lck );
+}
+
+
+//
+// nested test and set locks
+//
+
+int
+__kmp_acquire_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_tas_lock_owner( lck ) == gtid ) {
+ lck->lk.depth_locked += 1;
+ return KMP_LOCK_ACQUIRED_NEXT;
+ }
+ else {
+ __kmp_acquire_tas_lock_timed_template( lck, gtid );
+ lck->lk.depth_locked = 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+}
+
+static int
+__kmp_acquire_nested_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_nest_lock";
+ if ( ! __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_acquire_nested_tas_lock( lck, gtid );
+}
+
+int
+__kmp_test_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ int retval;
+
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_tas_lock_owner( lck ) == gtid ) {
+ retval = ++lck->lk.depth_locked;
+ }
+ else if ( !__kmp_test_tas_lock( lck, gtid ) ) {
+ retval = 0;
+ }
+ else {
+ KMP_MB();
+ retval = lck->lk.depth_locked = 1;
+ }
+ return retval;
+}
+
+static int
+__kmp_test_nested_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_nest_lock";
+ if ( ! __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_test_nested_tas_lock( lck, gtid );
+}
+
+int
+__kmp_release_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ KMP_MB();
+ if ( --(lck->lk.depth_locked) == 0 ) {
+ __kmp_release_tas_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+ }
+ return KMP_LOCK_STILL_HELD;
+}
+
+static int
+__kmp_release_nested_tas_lock_with_checks( kmp_tas_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_nest_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( ! __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_tas_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_tas_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_nested_tas_lock( lck, gtid );
+}
+
+void
+__kmp_init_nested_tas_lock( kmp_tas_lock_t * lck )
+{
+ __kmp_init_tas_lock( lck );
+ lck->lk.depth_locked = 0; // >= 0 for nestable locks, -1 for simple locks
+}
+
+static void
+__kmp_init_nested_tas_lock_with_checks( kmp_tas_lock_t * lck )
+{
+ __kmp_init_nested_tas_lock( lck );
+}
+
+void
+__kmp_destroy_nested_tas_lock( kmp_tas_lock_t *lck )
+{
+ __kmp_destroy_tas_lock( lck );
+ lck->lk.depth_locked = 0;
+}
+
+static void
+__kmp_destroy_nested_tas_lock_with_checks( kmp_tas_lock_t *lck )
+{
+ char const * const func = "omp_destroy_nest_lock";
+ if ( ! __kmp_is_tas_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_tas_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_nested_tas_lock( lck );
+}
+
+
+#if KMP_USE_FUTEX
+
+/* ------------------------------------------------------------------------ */
+/* futex locks */
+
+// futex locks are really just test and set locks, with a different method
+// of handling contention. They take the same amount of space as test and
+// set locks, and are allocated the same way (i.e. use the area allocated by
+// the compiler for non-nested locks / allocate nested locks on the heap).
+
+static kmp_int32
+__kmp_get_futex_lock_owner( kmp_futex_lock_t *lck )
+{
+ return KMP_LOCK_STRIP(( TCR_4( lck->lk.poll ) >> 1 )) - 1;
+}
+
+static inline bool
+__kmp_is_futex_lock_nestable( kmp_futex_lock_t *lck )
+{
+ return lck->lk.depth_locked != -1;
+}
+
+__forceinline static int
+__kmp_acquire_futex_lock_timed_template( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_int32 gtid_code = ( gtid + 1 ) << 1;
+
+ KMP_MB();
+
+#ifdef USE_LOCK_PROFILE
+ kmp_uint32 curr = KMP_LOCK_STRIP( TCR_4( lck->lk.poll ) );
+ if ( ( curr != 0 ) && ( curr != gtid_code ) )
+ __kmp_printf( "LOCK CONTENTION: %p\n", lck );
+ /* else __kmp_printf( "." );*/
+#endif /* USE_LOCK_PROFILE */
+
+ KMP_FSYNC_PREPARE( lck );
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p(0x%x), T#%d entering\n",
+ lck, lck->lk.poll, gtid ) );
+
+ kmp_int32 poll_val;
+
+ while ( ( poll_val = KMP_COMPARE_AND_STORE_RET32( & ( lck->lk.poll ), KMP_LOCK_FREE(futex),
+ KMP_LOCK_BUSY(gtid_code, futex) ) ) != KMP_LOCK_FREE(futex) ) {
+
+ kmp_int32 cond = KMP_LOCK_STRIP(poll_val) & 1;
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p, T#%d poll_val = 0x%x cond = 0x%x\n",
+ lck, gtid, poll_val, cond ) );
+
+ //
+ // NOTE: if you try to use the following condition for this branch
+ //
+ // if ( poll_val & 1 == 0 )
+ //
+ // Then the 12.0 compiler has a bug where the following block will
+ // always be skipped, regardless of the value of the LSB of poll_val.
+ //
+ if ( ! cond ) {
+ //
+ // Try to set the lsb in the poll to indicate to the owner
+ // thread that they need to wake this thread up.
+ //
+ if ( ! KMP_COMPARE_AND_STORE_REL32( & ( lck->lk.poll ), poll_val, poll_val | KMP_LOCK_BUSY(1, futex) ) ) {
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p(0x%x), T#%d can't set bit 0\n",
+ lck, lck->lk.poll, gtid ) );
+ continue;
+ }
+ poll_val |= KMP_LOCK_BUSY(1, futex);
+
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p(0x%x), T#%d bit 0 set\n",
+ lck, lck->lk.poll, gtid ) );
+ }
+
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p, T#%d before futex_wait(0x%x)\n",
+ lck, gtid, poll_val ) );
+
+ kmp_int32 rc;
+ if ( ( rc = syscall( __NR_futex, & ( lck->lk.poll ), FUTEX_WAIT,
+ poll_val, NULL, NULL, 0 ) ) != 0 ) {
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p, T#%d futex_wait(0x%x) failed (rc=%d errno=%d)\n",
+ lck, gtid, poll_val, rc, errno ) );
+ continue;
+ }
+
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p, T#%d after futex_wait(0x%x)\n",
+ lck, gtid, poll_val ) );
+ //
+ // This thread has now done a successful futex wait call and was
+ // entered on the OS futex queue. We must now perform a futex
+ // wake call when releasing the lock, as we have no idea how many
+ // other threads are in the queue.
+ //
+ gtid_code |= 1;
+ }
+
+ KMP_FSYNC_ACQUIRED( lck );
+ KA_TRACE( 1000, ("__kmp_acquire_futex_lock: lck:%p(0x%x), T#%d exiting\n",
+ lck, lck->lk.poll, gtid ) );
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_acquire_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_acquire_futex_lock_timed_template( lck, gtid );
+}
+
+static int
+__kmp_acquire_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+ if ( ( sizeof ( kmp_futex_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_futex_lock_owner( lck ) == gtid ) ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+ return __kmp_acquire_futex_lock( lck, gtid );
+}
+
+int
+__kmp_test_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ if ( KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(futex), KMP_LOCK_BUSY((gtid+1) << 1, futex) ) ) {
+ KMP_FSYNC_ACQUIRED( lck );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static int
+__kmp_test_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+ if ( ( sizeof ( kmp_futex_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ return __kmp_test_futex_lock( lck, gtid );
+}
+
+int
+__kmp_release_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 1000, ("__kmp_release_futex_lock: lck:%p(0x%x), T#%d entering\n",
+ lck, lck->lk.poll, gtid ) );
+
+ KMP_FSYNC_RELEASING(lck);
+
+ kmp_int32 poll_val = KMP_XCHG_FIXED32( & ( lck->lk.poll ), KMP_LOCK_FREE(futex) );
+
+ KA_TRACE( 1000, ("__kmp_release_futex_lock: lck:%p, T#%d released poll_val = 0x%x\n",
+ lck, gtid, poll_val ) );
+
+ if ( KMP_LOCK_STRIP(poll_val) & 1 ) {
+ KA_TRACE( 1000, ("__kmp_release_futex_lock: lck:%p, T#%d futex_wake 1 thread\n",
+ lck, gtid ) );
+ syscall( __NR_futex, & ( lck->lk.poll ), FUTEX_WAKE, KMP_LOCK_BUSY(1, futex), NULL, NULL, 0 );
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 1000, ("__kmp_release_futex_lock: lck:%p(0x%x), T#%d exiting\n",
+ lck, lck->lk.poll, gtid ) );
+
+ KMP_YIELD( TCR_4( __kmp_nth ) > ( __kmp_avail_proc ? __kmp_avail_proc :
+ __kmp_xproc ) );
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( ( sizeof ( kmp_futex_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_futex_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_futex_lock_owner( lck ) >= 0 )
+ && ( __kmp_get_futex_lock_owner( lck ) != gtid ) ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_futex_lock( lck, gtid );
+}
+
+void
+__kmp_init_futex_lock( kmp_futex_lock_t * lck )
+{
+ TCW_4( lck->lk.poll, KMP_LOCK_FREE(futex) );
+}
+
+static void
+__kmp_init_futex_lock_with_checks( kmp_futex_lock_t * lck )
+{
+ __kmp_init_futex_lock( lck );
+}
+
+void
+__kmp_destroy_futex_lock( kmp_futex_lock_t *lck )
+{
+ lck->lk.poll = 0;
+}
+
+static void
+__kmp_destroy_futex_lock_with_checks( kmp_futex_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+ if ( ( sizeof ( kmp_futex_lock_t ) <= OMP_LOCK_T_SIZE )
+ && __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_futex_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_futex_lock( lck );
+}
+
+
+//
+// nested futex locks
+//
+
+int
+__kmp_acquire_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_futex_lock_owner( lck ) == gtid ) {
+ lck->lk.depth_locked += 1;
+ return KMP_LOCK_ACQUIRED_NEXT;
+ }
+ else {
+ __kmp_acquire_futex_lock_timed_template( lck, gtid );
+ lck->lk.depth_locked = 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+}
+
+static int
+__kmp_acquire_nested_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_nest_lock";
+ if ( ! __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_acquire_nested_futex_lock( lck, gtid );
+}
+
+int
+__kmp_test_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ int retval;
+
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_futex_lock_owner( lck ) == gtid ) {
+ retval = ++lck->lk.depth_locked;
+ }
+ else if ( !__kmp_test_futex_lock( lck, gtid ) ) {
+ retval = 0;
+ }
+ else {
+ KMP_MB();
+ retval = lck->lk.depth_locked = 1;
+ }
+ return retval;
+}
+
+static int
+__kmp_test_nested_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_nest_lock";
+ if ( ! __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_test_nested_futex_lock( lck, gtid );
+}
+
+int
+__kmp_release_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ KMP_MB();
+ if ( --(lck->lk.depth_locked) == 0 ) {
+ __kmp_release_futex_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+ }
+ return KMP_LOCK_STILL_HELD;
+}
+
+static int
+__kmp_release_nested_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_nest_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( ! __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_futex_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_futex_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_nested_futex_lock( lck, gtid );
+}
+
+void
+__kmp_init_nested_futex_lock( kmp_futex_lock_t * lck )
+{
+ __kmp_init_futex_lock( lck );
+ lck->lk.depth_locked = 0; // >= 0 for nestable locks, -1 for simple locks
+}
+
+static void
+__kmp_init_nested_futex_lock_with_checks( kmp_futex_lock_t * lck )
+{
+ __kmp_init_nested_futex_lock( lck );
+}
+
+void
+__kmp_destroy_nested_futex_lock( kmp_futex_lock_t *lck )
+{
+ __kmp_destroy_futex_lock( lck );
+ lck->lk.depth_locked = 0;
+}
+
+static void
+__kmp_destroy_nested_futex_lock_with_checks( kmp_futex_lock_t *lck )
+{
+ char const * const func = "omp_destroy_nest_lock";
+ if ( ! __kmp_is_futex_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_futex_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_nested_futex_lock( lck );
+}
+
+#endif // KMP_USE_FUTEX
+
+
+/* ------------------------------------------------------------------------ */
+/* ticket (bakery) locks */
+
+static kmp_int32
+__kmp_get_ticket_lock_owner( kmp_ticket_lock_t *lck )
+{
+ return std::atomic_load_explicit( &lck->lk.owner_id, std::memory_order_relaxed ) - 1;
+}
+
+static inline bool
+__kmp_is_ticket_lock_nestable( kmp_ticket_lock_t *lck )
+{
+ return std::atomic_load_explicit( &lck->lk.depth_locked, std::memory_order_relaxed ) != -1;
+}
+
+static kmp_uint32
+__kmp_bakery_check( void *now_serving, kmp_uint32 my_ticket )
+{
+ return std::atomic_load_explicit( (std::atomic<unsigned> *)now_serving, std::memory_order_acquire ) == my_ticket;
+}
+
+__forceinline static int
+__kmp_acquire_ticket_lock_timed_template( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_uint32 my_ticket = std::atomic_fetch_add_explicit( &lck->lk.next_ticket, 1U, std::memory_order_relaxed );
+
+#ifdef USE_LOCK_PROFILE
+ if ( std::atomic_load_explicit( &lck->lk.now_serving, std::memory_order_relaxed ) != my_ticket )
+ __kmp_printf( "LOCK CONTENTION: %p\n", lck );
+ /* else __kmp_printf( "." );*/
+#endif /* USE_LOCK_PROFILE */
+
+ if ( std::atomic_load_explicit( &lck->lk.now_serving, std::memory_order_acquire ) == my_ticket ) {
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+ KMP_WAIT_YIELD_PTR( &lck->lk.now_serving, my_ticket, __kmp_bakery_check, lck );
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_acquire_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_acquire_ticket_lock_timed_template( lck, gtid );
+}
+
+static int
+__kmp_acquire_ticket_lock_with_checks( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_ticket_lock_owner( lck ) == gtid ) ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+
+ __kmp_acquire_ticket_lock( lck, gtid );
+
+ std::atomic_store_explicit( &lck->lk.owner_id, gtid + 1, std::memory_order_relaxed );
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_test_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_uint32 my_ticket = std::atomic_load_explicit( &lck->lk.next_ticket, std::memory_order_relaxed );
+
+ if ( std::atomic_load_explicit( &lck->lk.now_serving, std::memory_order_relaxed ) == my_ticket ) {
+ kmp_uint32 next_ticket = my_ticket + 1;
+ if ( std::atomic_compare_exchange_strong_explicit( &lck->lk.next_ticket,
+ &my_ticket, next_ticket, std::memory_order_acquire, std::memory_order_acquire )) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static int
+__kmp_test_ticket_lock_with_checks( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+
+ int retval = __kmp_test_ticket_lock( lck, gtid );
+
+ if ( retval ) {
+ std::atomic_store_explicit( &lck->lk.owner_id, gtid + 1, std::memory_order_relaxed );
+ }
+ return retval;
+}
+
+int
+__kmp_release_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_uint32 distance = std::atomic_load_explicit( &lck->lk.next_ticket, std::memory_order_relaxed ) - std::atomic_load_explicit( &lck->lk.now_serving, std::memory_order_relaxed );
+
+ std::atomic_fetch_add_explicit( &lck->lk.now_serving, 1U, std::memory_order_release );
+
+ KMP_YIELD( distance
+ > (kmp_uint32) (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc) );
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_ticket_lock_with_checks( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_ticket_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_ticket_lock_owner( lck ) >= 0 )
+ && ( __kmp_get_ticket_lock_owner( lck ) != gtid ) ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ std::atomic_store_explicit( &lck->lk.owner_id, 0, std::memory_order_relaxed );
+ return __kmp_release_ticket_lock( lck, gtid );
+}
+
+void
+__kmp_init_ticket_lock( kmp_ticket_lock_t * lck )
+{
+ lck->lk.location = NULL;
+ lck->lk.self = lck;
+ std::atomic_store_explicit( &lck->lk.next_ticket, 0U, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.now_serving, 0U, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.owner_id, 0, std::memory_order_relaxed ); // no thread owns the lock.
+ std::atomic_store_explicit( &lck->lk.depth_locked, -1, std::memory_order_relaxed ); // -1 => not a nested lock.
+ std::atomic_store_explicit( &lck->lk.initialized, true, std::memory_order_release );
+}
+
+static void
+__kmp_init_ticket_lock_with_checks( kmp_ticket_lock_t * lck )
+{
+ __kmp_init_ticket_lock( lck );
+}
+
+void
+__kmp_destroy_ticket_lock( kmp_ticket_lock_t *lck )
+{
+ std::atomic_store_explicit( &lck->lk.initialized, false, std::memory_order_release );
+ lck->lk.self = NULL;
+ lck->lk.location = NULL;
+ std::atomic_store_explicit( &lck->lk.next_ticket, 0U, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.now_serving, 0U, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.owner_id, 0, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.depth_locked, -1, std::memory_order_relaxed );
+}
+
+static void
+__kmp_destroy_ticket_lock_with_checks( kmp_ticket_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_ticket_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_ticket_lock( lck );
+}
+
+
+//
+// nested ticket locks
+//
+
+int
+__kmp_acquire_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_ticket_lock_owner( lck ) == gtid ) {
+ std::atomic_fetch_add_explicit( &lck->lk.depth_locked, 1, std::memory_order_relaxed );
+ return KMP_LOCK_ACQUIRED_NEXT;
+ }
+ else {
+ __kmp_acquire_ticket_lock_timed_template( lck, gtid );
+ std::atomic_store_explicit( &lck->lk.depth_locked, 1, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.owner_id, gtid + 1, std::memory_order_relaxed );
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+}
+
+static int
+__kmp_acquire_nested_ticket_lock_with_checks( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_nest_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_acquire_nested_ticket_lock( lck, gtid );
+}
+
+int
+__kmp_test_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ int retval;
+
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_ticket_lock_owner( lck ) == gtid ) {
+ retval = std::atomic_fetch_add_explicit( &lck->lk.depth_locked, 1, std::memory_order_relaxed ) + 1;
+ }
+ else if ( !__kmp_test_ticket_lock( lck, gtid ) ) {
+ retval = 0;
+ }
+ else {
+ std::atomic_store_explicit( &lck->lk.depth_locked, 1, std::memory_order_relaxed );
+ std::atomic_store_explicit( &lck->lk.owner_id, gtid + 1, std::memory_order_relaxed );
+ retval = 1;
+ }
+ return retval;
+}
+
+static int
+__kmp_test_nested_ticket_lock_with_checks( kmp_ticket_lock_t *lck,
+ kmp_int32 gtid )
+{
+ char const * const func = "omp_test_nest_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_test_nested_ticket_lock( lck, gtid );
+}
+
+int
+__kmp_release_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( ( std::atomic_fetch_add_explicit( &lck->lk.depth_locked, -1, std::memory_order_relaxed ) - 1 ) == 0 ) {
+ std::atomic_store_explicit( &lck->lk.owner_id, 0, std::memory_order_relaxed );
+ __kmp_release_ticket_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+ }
+ return KMP_LOCK_STILL_HELD;
+}
+
+static int
+__kmp_release_nested_ticket_lock_with_checks( kmp_ticket_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_nest_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_ticket_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_ticket_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_nested_ticket_lock( lck, gtid );
+}
+
+void
+__kmp_init_nested_ticket_lock( kmp_ticket_lock_t * lck )
+{
+ __kmp_init_ticket_lock( lck );
+ std::atomic_store_explicit( &lck->lk.depth_locked, 0, std::memory_order_relaxed ); // >= 0 for nestable locks, -1 for simple locks
+}
+
+static void
+__kmp_init_nested_ticket_lock_with_checks( kmp_ticket_lock_t * lck )
+{
+ __kmp_init_nested_ticket_lock( lck );
+}
+
+void
+__kmp_destroy_nested_ticket_lock( kmp_ticket_lock_t *lck )
+{
+ __kmp_destroy_ticket_lock( lck );
+ std::atomic_store_explicit( &lck->lk.depth_locked, 0, std::memory_order_relaxed );
+}
+
+static void
+__kmp_destroy_nested_ticket_lock_with_checks( kmp_ticket_lock_t *lck )
+{
+ char const * const func = "omp_destroy_nest_lock";
+
+ if ( ! std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( lck->lk.self != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_ticket_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_ticket_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_nested_ticket_lock( lck );
+}
+
+
+//
+// access functions to fields which don't exist for all lock kinds.
+//
+
+static int
+__kmp_is_ticket_lock_initialized( kmp_ticket_lock_t *lck )
+{
+ return std::atomic_load_explicit( &lck->lk.initialized, std::memory_order_relaxed ) && ( lck->lk.self == lck);
+}
+
+static const ident_t *
+__kmp_get_ticket_lock_location( kmp_ticket_lock_t *lck )
+{
+ return lck->lk.location;
+}
+
+static void
+__kmp_set_ticket_lock_location( kmp_ticket_lock_t *lck, const ident_t *loc )
+{
+ lck->lk.location = loc;
+}
+
+static kmp_lock_flags_t
+__kmp_get_ticket_lock_flags( kmp_ticket_lock_t *lck )
+{
+ return lck->lk.flags;
+}
+
+static void
+__kmp_set_ticket_lock_flags( kmp_ticket_lock_t *lck, kmp_lock_flags_t flags )
+{
+ lck->lk.flags = flags;
+}
+
+/* ------------------------------------------------------------------------ */
+/* queuing locks */
+
+/*
+ * First the states
+ * (head,tail) = 0, 0 means lock is unheld, nobody on queue
+ * UINT_MAX or -1, 0 means lock is held, nobody on queue
+ * h, h means lock is held or about to transition, 1 element on queue
+ * h, t h <> t, means lock is held or about to transition, >1 elements on queue
+ *
+ * Now the transitions
+ * Acquire(0,0) = -1 ,0
+ * Release(0,0) = Error
+ * Acquire(-1,0) = h ,h h > 0
+ * Release(-1,0) = 0 ,0
+ * Acquire(h,h) = h ,t h > 0, t > 0, h <> t
+ * Release(h,h) = -1 ,0 h > 0
+ * Acquire(h,t) = h ,t' h > 0, t > 0, t' > 0, h <> t, h <> t', t <> t'
+ * Release(h,t) = h',t h > 0, t > 0, h <> t, h <> h', h' maybe = t
+ *
+ * And pictorially
+ *
+ *
+ * +-----+
+ * | 0, 0|------- release -------> Error
+ * +-----+
+ * | ^
+ * acquire| |release
+ * | |
+ * | |
+ * v |
+ * +-----+
+ * |-1, 0|
+ * +-----+
+ * | ^
+ * acquire| |release
+ * | |
+ * | |
+ * v |
+ * +-----+
+ * | h, h|
+ * +-----+
+ * | ^
+ * acquire| |release
+ * | |
+ * | |
+ * v |
+ * +-----+
+ * | h, t|----- acquire, release loopback ---+
+ * +-----+ |
+ * ^ |
+ * | |
+ * +------------------------------------+
+ *
+ */
+
+#ifdef DEBUG_QUEUING_LOCKS
+
+/* Stuff for circular trace buffer */
+#define TRACE_BUF_ELE 1024
+static char traces[TRACE_BUF_ELE][128] = { 0 }
+static int tc = 0;
+#define TRACE_LOCK(X,Y) KMP_SNPRINTF( traces[tc++ % TRACE_BUF_ELE], 128, "t%d at %s\n", X, Y );
+#define TRACE_LOCK_T(X,Y,Z) KMP_SNPRINTF( traces[tc++ % TRACE_BUF_ELE], 128, "t%d at %s%d\n", X,Y,Z );
+#define TRACE_LOCK_HT(X,Y,Z,Q) KMP_SNPRINTF( traces[tc++ % TRACE_BUF_ELE], 128, "t%d at %s %d,%d\n", X, Y, Z, Q );
+
+static void
+__kmp_dump_queuing_lock( kmp_info_t *this_thr, kmp_int32 gtid,
+ kmp_queuing_lock_t *lck, kmp_int32 head_id, kmp_int32 tail_id )
+{
+ kmp_int32 t, i;
+
+ __kmp_printf_no_lock( "\n__kmp_dump_queuing_lock: TRACE BEGINS HERE! \n" );
+
+ i = tc % TRACE_BUF_ELE;
+ __kmp_printf_no_lock( "%s\n", traces[i] );
+ i = (i+1) % TRACE_BUF_ELE;
+ while ( i != (tc % TRACE_BUF_ELE) ) {
+ __kmp_printf_no_lock( "%s", traces[i] );
+ i = (i+1) % TRACE_BUF_ELE;
+ }
+ __kmp_printf_no_lock( "\n" );
+
+ __kmp_printf_no_lock(
+ "\n__kmp_dump_queuing_lock: gtid+1:%d, spin_here:%d, next_wait:%d, head_id:%d, tail_id:%d\n",
+ gtid+1, this_thr->th.th_spin_here, this_thr->th.th_next_waiting,
+ head_id, tail_id );
+
+ __kmp_printf_no_lock( "\t\thead: %d ", lck->lk.head_id );
+
+ if ( lck->lk.head_id >= 1 ) {
+ t = __kmp_threads[lck->lk.head_id-1]->th.th_next_waiting;
+ while (t > 0) {
+ __kmp_printf_no_lock( "-> %d ", t );
+ t = __kmp_threads[t-1]->th.th_next_waiting;
+ }
+ }
+ __kmp_printf_no_lock( "; tail: %d ", lck->lk.tail_id );
+ __kmp_printf_no_lock( "\n\n" );
+}
+
+#endif /* DEBUG_QUEUING_LOCKS */
+
+static kmp_int32
+__kmp_get_queuing_lock_owner( kmp_queuing_lock_t *lck )
+{
+ return TCR_4( lck->lk.owner_id ) - 1;
+}
+
+static inline bool
+__kmp_is_queuing_lock_nestable( kmp_queuing_lock_t *lck )
+{
+ return lck->lk.depth_locked != -1;
+}
+
+/* Acquire a lock using a the queuing lock implementation */
+template <bool takeTime>
+/* [TLW] The unused template above is left behind because of what BEB believes is a
+ potential compiler problem with __forceinline. */
+__forceinline static int
+__kmp_acquire_queuing_lock_timed_template( kmp_queuing_lock_t *lck,
+ kmp_int32 gtid )
+{
+ register kmp_info_t *this_thr = __kmp_thread_from_gtid( gtid );
+ volatile kmp_int32 *head_id_p = & lck->lk.head_id;
+ volatile kmp_int32 *tail_id_p = & lck->lk.tail_id;
+ volatile kmp_uint32 *spin_here_p;
+ kmp_int32 need_mf = 1;
+
+#if OMPT_SUPPORT
+ ompt_state_t prev_state = ompt_state_undefined;
+#endif
+
+ KA_TRACE( 1000, ("__kmp_acquire_queuing_lock: lck:%p, T#%d entering\n", lck, gtid ));
+
+ KMP_FSYNC_PREPARE( lck );
+ KMP_DEBUG_ASSERT( this_thr != NULL );
+ spin_here_p = & this_thr->th.th_spin_here;
+
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "acq ent" );
+ if ( *spin_here_p )
+ __kmp_dump_queuing_lock( this_thr, gtid, lck, *head_id_p, *tail_id_p );
+ if ( this_thr->th.th_next_waiting != 0 )
+ __kmp_dump_queuing_lock( this_thr, gtid, lck, *head_id_p, *tail_id_p );
+#endif
+ KMP_DEBUG_ASSERT( !*spin_here_p );
+ KMP_DEBUG_ASSERT( this_thr->th.th_next_waiting == 0 );
+
+
+ /* The following st.rel to spin_here_p needs to precede the cmpxchg.acq to head_id_p
+ that may follow, not just in execution order, but also in visibility order. This way,
+ when a releasing thread observes the changes to the queue by this thread, it can
+ rightly assume that spin_here_p has already been set to TRUE, so that when it sets
+ spin_here_p to FALSE, it is not premature. If the releasing thread sets spin_here_p
+ to FALSE before this thread sets it to TRUE, this thread will hang.
+ */
+ *spin_here_p = TRUE; /* before enqueuing to prevent race */
+
+ while( 1 ) {
+ kmp_int32 enqueued;
+ kmp_int32 head;
+ kmp_int32 tail;
+
+ head = *head_id_p;
+
+ switch ( head ) {
+
+ case -1:
+ {
+#ifdef DEBUG_QUEUING_LOCKS
+ tail = *tail_id_p;
+ TRACE_LOCK_HT( gtid+1, "acq read: ", head, tail );
+#endif
+ tail = 0; /* to make sure next link asynchronously read is not set accidentally;
+ this assignment prevents us from entering the if ( t > 0 )
+ condition in the enqueued case below, which is not necessary for
+ this state transition */
+
+ need_mf = 0;
+ /* try (-1,0)->(tid,tid) */
+ enqueued = KMP_COMPARE_AND_STORE_ACQ64( (volatile kmp_int64 *) tail_id_p,
+ KMP_PACK_64( -1, 0 ),
+ KMP_PACK_64( gtid+1, gtid+1 ) );
+#ifdef DEBUG_QUEUING_LOCKS
+ if ( enqueued ) TRACE_LOCK( gtid+1, "acq enq: (-1,0)->(tid,tid)" );
+#endif
+ }
+ break;
+
+ default:
+ {
+ tail = *tail_id_p;
+ KMP_DEBUG_ASSERT( tail != gtid + 1 );
+
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK_HT( gtid+1, "acq read: ", head, tail );
+#endif
+
+ if ( tail == 0 ) {
+ enqueued = FALSE;
+ }
+ else {
+ need_mf = 0;
+ /* try (h,t) or (h,h)->(h,tid) */
+ enqueued = KMP_COMPARE_AND_STORE_ACQ32( tail_id_p, tail, gtid+1 );
+
+#ifdef DEBUG_QUEUING_LOCKS
+ if ( enqueued ) TRACE_LOCK( gtid+1, "acq enq: (h,t)->(h,tid)" );
+#endif
+ }
+ }
+ break;
+
+ case 0: /* empty queue */
+ {
+ kmp_int32 grabbed_lock;
+
+#ifdef DEBUG_QUEUING_LOCKS
+ tail = *tail_id_p;
+ TRACE_LOCK_HT( gtid+1, "acq read: ", head, tail );
+#endif
+ /* try (0,0)->(-1,0) */
+
+ /* only legal transition out of head = 0 is head = -1 with no change to tail */
+ grabbed_lock = KMP_COMPARE_AND_STORE_ACQ32( head_id_p, 0, -1 );
+
+ if ( grabbed_lock ) {
+
+ *spin_here_p = FALSE;
+
+ KA_TRACE( 1000, ("__kmp_acquire_queuing_lock: lck:%p, T#%d exiting: no queuing\n",
+ lck, gtid ));
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK_HT( gtid+1, "acq exit: ", head, 0 );
+#endif
+
+#if OMPT_SUPPORT
+ if (ompt_enabled && prev_state != ompt_state_undefined) {
+ /* change the state before clearing wait_id */
+ this_thr->th.ompt_thread_info.state = prev_state;
+ this_thr->th.ompt_thread_info.wait_id = 0;
+ }
+#endif
+
+ KMP_FSYNC_ACQUIRED( lck );
+ return KMP_LOCK_ACQUIRED_FIRST; /* lock holder cannot be on queue */
+ }
+ enqueued = FALSE;
+ }
+ break;
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled && prev_state == ompt_state_undefined) {
+ /* this thread will spin; set wait_id before entering wait state */
+ prev_state = this_thr->th.ompt_thread_info.state;
+ this_thr->th.ompt_thread_info.wait_id = (uint64_t) lck;
+ this_thr->th.ompt_thread_info.state = ompt_state_wait_lock;
+ }
+#endif
+
+ if ( enqueued ) {
+ if ( tail > 0 ) {
+ kmp_info_t *tail_thr = __kmp_thread_from_gtid( tail - 1 );
+ KMP_ASSERT( tail_thr != NULL );
+ tail_thr->th.th_next_waiting = gtid+1;
+ /* corresponding wait for this write in release code */
+ }
+ KA_TRACE( 1000, ("__kmp_acquire_queuing_lock: lck:%p, T#%d waiting for lock\n", lck, gtid ));
+
+
+ /* ToDo: May want to consider using __kmp_wait_sleep or something that sleeps for
+ * throughput only here.
+ */
+ KMP_MB();
+ KMP_WAIT_YIELD(spin_here_p, FALSE, KMP_EQ, lck);
+
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "acq spin" );
+
+ if ( this_thr->th.th_next_waiting != 0 )
+ __kmp_dump_queuing_lock( this_thr, gtid, lck, *head_id_p, *tail_id_p );
+#endif
+ KMP_DEBUG_ASSERT( this_thr->th.th_next_waiting == 0 );
+ KA_TRACE( 1000, ("__kmp_acquire_queuing_lock: lck:%p, T#%d exiting: after waiting on queue\n",
+ lck, gtid ));
+
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "acq exit 2" );
+#endif
+
+#if OMPT_SUPPORT
+ /* change the state before clearing wait_id */
+ this_thr->th.ompt_thread_info.state = prev_state;
+ this_thr->th.ompt_thread_info.wait_id = 0;
+#endif
+
+ /* got lock, we were dequeued by the thread that released lock */
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+
+ /* Yield if number of threads > number of logical processors */
+ /* ToDo: Not sure why this should only be in oversubscription case,
+ maybe should be traditional YIELD_INIT/YIELD_WHEN loop */
+ KMP_YIELD( TCR_4( __kmp_nth ) > (__kmp_avail_proc ? __kmp_avail_proc :
+ __kmp_xproc ) );
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "acq retry" );
+#endif
+
+ }
+ KMP_ASSERT2( 0, "should not get here" );
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_acquire_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ return __kmp_acquire_queuing_lock_timed_template<false>( lck, gtid );
+}
+
+static int
+__kmp_acquire_queuing_lock_with_checks( kmp_queuing_lock_t *lck,
+ kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) == gtid ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+
+ __kmp_acquire_queuing_lock( lck, gtid );
+
+ lck->lk.owner_id = gtid + 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_test_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ volatile kmp_int32 *head_id_p = & lck->lk.head_id;
+ kmp_int32 head;
+#ifdef KMP_DEBUG
+ kmp_info_t *this_thr;
+#endif
+
+ KA_TRACE( 1000, ("__kmp_test_queuing_lock: T#%d entering\n", gtid ));
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+#ifdef KMP_DEBUG
+ this_thr = __kmp_thread_from_gtid( gtid );
+ KMP_DEBUG_ASSERT( this_thr != NULL );
+ KMP_DEBUG_ASSERT( !this_thr->th.th_spin_here );
+#endif
+
+ head = *head_id_p;
+
+ if ( head == 0 ) { /* nobody on queue, nobody holding */
+
+ /* try (0,0)->(-1,0) */
+
+ if ( KMP_COMPARE_AND_STORE_ACQ32( head_id_p, 0, -1 ) ) {
+ KA_TRACE( 1000, ("__kmp_test_queuing_lock: T#%d exiting: holding lock\n", gtid ));
+ KMP_FSYNC_ACQUIRED(lck);
+ return TRUE;
+ }
+ }
+
+ KA_TRACE( 1000, ("__kmp_test_queuing_lock: T#%d exiting: without lock\n", gtid ));
+ return FALSE;
+}
+
+static int
+__kmp_test_queuing_lock_with_checks( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+
+ int retval = __kmp_test_queuing_lock( lck, gtid );
+
+ if ( retval ) {
+ lck->lk.owner_id = gtid + 1;
+ }
+ return retval;
+}
+
+int
+__kmp_release_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ register kmp_info_t *this_thr;
+ volatile kmp_int32 *head_id_p = & lck->lk.head_id;
+ volatile kmp_int32 *tail_id_p = & lck->lk.tail_id;
+
+ KA_TRACE( 1000, ("__kmp_release_queuing_lock: lck:%p, T#%d entering\n", lck, gtid ));
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+ this_thr = __kmp_thread_from_gtid( gtid );
+ KMP_DEBUG_ASSERT( this_thr != NULL );
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "rel ent" );
+
+ if ( this_thr->th.th_spin_here )
+ __kmp_dump_queuing_lock( this_thr, gtid, lck, *head_id_p, *tail_id_p );
+ if ( this_thr->th.th_next_waiting != 0 )
+ __kmp_dump_queuing_lock( this_thr, gtid, lck, *head_id_p, *tail_id_p );
+#endif
+ KMP_DEBUG_ASSERT( !this_thr->th.th_spin_here );
+ KMP_DEBUG_ASSERT( this_thr->th.th_next_waiting == 0 );
+
+ KMP_FSYNC_RELEASING(lck);
+
+ while( 1 ) {
+ kmp_int32 dequeued;
+ kmp_int32 head;
+ kmp_int32 tail;
+
+ head = *head_id_p;
+
+#ifdef DEBUG_QUEUING_LOCKS
+ tail = *tail_id_p;
+ TRACE_LOCK_HT( gtid+1, "rel read: ", head, tail );
+ if ( head == 0 ) __kmp_dump_queuing_lock( this_thr, gtid, lck, head, tail );
+#endif
+ KMP_DEBUG_ASSERT( head != 0 ); /* holding the lock, head must be -1 or queue head */
+
+ if ( head == -1 ) { /* nobody on queue */
+
+ /* try (-1,0)->(0,0) */
+ if ( KMP_COMPARE_AND_STORE_REL32( head_id_p, -1, 0 ) ) {
+ KA_TRACE( 1000, ("__kmp_release_queuing_lock: lck:%p, T#%d exiting: queue empty\n",
+ lck, gtid ));
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK_HT( gtid+1, "rel exit: ", 0, 0 );
+#endif
+
+#if OMPT_SUPPORT
+ /* nothing to do - no other thread is trying to shift blame */
+#endif
+
+ return KMP_LOCK_RELEASED;
+ }
+ dequeued = FALSE;
+
+ }
+ else {
+
+ tail = *tail_id_p;
+ if ( head == tail ) { /* only one thread on the queue */
+
+#ifdef DEBUG_QUEUING_LOCKS
+ if ( head <= 0 ) __kmp_dump_queuing_lock( this_thr, gtid, lck, head, tail );
+#endif
+ KMP_DEBUG_ASSERT( head > 0 );
+
+ /* try (h,h)->(-1,0) */
+ dequeued = KMP_COMPARE_AND_STORE_REL64( (kmp_int64 *) tail_id_p,
+ KMP_PACK_64( head, head ), KMP_PACK_64( -1, 0 ) );
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "rel deq: (h,h)->(-1,0)" );
+#endif
+
+ }
+ else {
+ volatile kmp_int32 *waiting_id_p;
+ kmp_info_t *head_thr = __kmp_thread_from_gtid( head - 1 );
+ KMP_DEBUG_ASSERT( head_thr != NULL );
+ waiting_id_p = & head_thr->th.th_next_waiting;
+
+ /* Does this require synchronous reads? */
+#ifdef DEBUG_QUEUING_LOCKS
+ if ( head <= 0 || tail <= 0 ) __kmp_dump_queuing_lock( this_thr, gtid, lck, head, tail );
+#endif
+ KMP_DEBUG_ASSERT( head > 0 && tail > 0 );
+
+ /* try (h,t)->(h',t) or (t,t) */
+
+ KMP_MB();
+ /* make sure enqueuing thread has time to update next waiting thread field */
+ *head_id_p = KMP_WAIT_YIELD((volatile kmp_uint32*)waiting_id_p, 0, KMP_NEQ, NULL);
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "rel deq: (h,t)->(h',t)" );
+#endif
+ dequeued = TRUE;
+ }
+ }
+
+ if ( dequeued ) {
+ kmp_info_t *head_thr = __kmp_thread_from_gtid( head - 1 );
+ KMP_DEBUG_ASSERT( head_thr != NULL );
+
+ /* Does this require synchronous reads? */
+#ifdef DEBUG_QUEUING_LOCKS
+ if ( head <= 0 || tail <= 0 ) __kmp_dump_queuing_lock( this_thr, gtid, lck, head, tail );
+#endif
+ KMP_DEBUG_ASSERT( head > 0 && tail > 0 );
+
+ /* For clean code only.
+ * Thread not released until next statement prevents race with acquire code.
+ */
+ head_thr->th.th_next_waiting = 0;
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK_T( gtid+1, "rel nw=0 for t=", head );
+#endif
+
+ KMP_MB();
+ /* reset spin value */
+ head_thr->th.th_spin_here = FALSE;
+
+ KA_TRACE( 1000, ("__kmp_release_queuing_lock: lck:%p, T#%d exiting: after dequeuing\n",
+ lck, gtid ));
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "rel exit 2" );
+#endif
+ return KMP_LOCK_RELEASED;
+ }
+ /* KMP_CPU_PAUSE( ); don't want to make releasing thread hold up acquiring threads */
+
+#ifdef DEBUG_QUEUING_LOCKS
+ TRACE_LOCK( gtid+1, "rel retry" );
+#endif
+
+ } /* while */
+ KMP_ASSERT2( 0, "should not get here" );
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_queuing_lock_with_checks( kmp_queuing_lock_t *lck,
+ kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ lck->lk.owner_id = 0;
+ return __kmp_release_queuing_lock( lck, gtid );
+}
+
+void
+__kmp_init_queuing_lock( kmp_queuing_lock_t *lck )
+{
+ lck->lk.location = NULL;
+ lck->lk.head_id = 0;
+ lck->lk.tail_id = 0;
+ lck->lk.next_ticket = 0;
+ lck->lk.now_serving = 0;
+ lck->lk.owner_id = 0; // no thread owns the lock.
+ lck->lk.depth_locked = -1; // >= 0 for nestable locks, -1 for simple locks.
+ lck->lk.initialized = lck;
+
+ KA_TRACE(1000, ("__kmp_init_queuing_lock: lock %p initialized\n", lck));
+}
+
+static void
+__kmp_init_queuing_lock_with_checks( kmp_queuing_lock_t * lck )
+{
+ __kmp_init_queuing_lock( lck );
+}
+
+void
+__kmp_destroy_queuing_lock( kmp_queuing_lock_t *lck )
+{
+ lck->lk.initialized = NULL;
+ lck->lk.location = NULL;
+ lck->lk.head_id = 0;
+ lck->lk.tail_id = 0;
+ lck->lk.next_ticket = 0;
+ lck->lk.now_serving = 0;
+ lck->lk.owner_id = 0;
+ lck->lk.depth_locked = -1;
+}
+
+static void
+__kmp_destroy_queuing_lock_with_checks( kmp_queuing_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_queuing_lock( lck );
+}
+
+
+//
+// nested queuing locks
+//
+
+int
+__kmp_acquire_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_queuing_lock_owner( lck ) == gtid ) {
+ lck->lk.depth_locked += 1;
+ return KMP_LOCK_ACQUIRED_NEXT;
+ }
+ else {
+ __kmp_acquire_queuing_lock_timed_template<false>( lck, gtid );
+ KMP_MB();
+ lck->lk.depth_locked = 1;
+ KMP_MB();
+ lck->lk.owner_id = gtid + 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+}
+
+static int
+__kmp_acquire_nested_queuing_lock_with_checks( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_acquire_nested_queuing_lock( lck, gtid );
+}
+
+int
+__kmp_test_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ int retval;
+
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_queuing_lock_owner( lck ) == gtid ) {
+ retval = ++lck->lk.depth_locked;
+ }
+ else if ( !__kmp_test_queuing_lock( lck, gtid ) ) {
+ retval = 0;
+ }
+ else {
+ KMP_MB();
+ retval = lck->lk.depth_locked = 1;
+ KMP_MB();
+ lck->lk.owner_id = gtid + 1;
+ }
+ return retval;
+}
+
+static int
+__kmp_test_nested_queuing_lock_with_checks( kmp_queuing_lock_t *lck,
+ kmp_int32 gtid )
+{
+ char const * const func = "omp_test_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_test_nested_queuing_lock( lck, gtid );
+}
+
+int
+__kmp_release_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ KMP_MB();
+ if ( --(lck->lk.depth_locked) == 0 ) {
+ KMP_MB();
+ lck->lk.owner_id = 0;
+ __kmp_release_queuing_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+ }
+ return KMP_LOCK_STILL_HELD;
+}
+
+static int
+__kmp_release_nested_queuing_lock_with_checks( kmp_queuing_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_nest_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_nested_queuing_lock( lck, gtid );
+}
+
+void
+__kmp_init_nested_queuing_lock( kmp_queuing_lock_t * lck )
+{
+ __kmp_init_queuing_lock( lck );
+ lck->lk.depth_locked = 0; // >= 0 for nestable locks, -1 for simple locks
+}
+
+static void
+__kmp_init_nested_queuing_lock_with_checks( kmp_queuing_lock_t * lck )
+{
+ __kmp_init_nested_queuing_lock( lck );
+}
+
+void
+__kmp_destroy_nested_queuing_lock( kmp_queuing_lock_t *lck )
+{
+ __kmp_destroy_queuing_lock( lck );
+ lck->lk.depth_locked = 0;
+}
+
+static void
+__kmp_destroy_nested_queuing_lock_with_checks( kmp_queuing_lock_t *lck )
+{
+ char const * const func = "omp_destroy_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_queuing_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_nested_queuing_lock( lck );
+}
+
+
+//
+// access functions to fields which don't exist for all lock kinds.
+//
+
+static int
+__kmp_is_queuing_lock_initialized( kmp_queuing_lock_t *lck )
+{
+ return lck == lck->lk.initialized;
+}
+
+static const ident_t *
+__kmp_get_queuing_lock_location( kmp_queuing_lock_t *lck )
+{
+ return lck->lk.location;
+}
+
+static void
+__kmp_set_queuing_lock_location( kmp_queuing_lock_t *lck, const ident_t *loc )
+{
+ lck->lk.location = loc;
+}
+
+static kmp_lock_flags_t
+__kmp_get_queuing_lock_flags( kmp_queuing_lock_t *lck )
+{
+ return lck->lk.flags;
+}
+
+static void
+__kmp_set_queuing_lock_flags( kmp_queuing_lock_t *lck, kmp_lock_flags_t flags )
+{
+ lck->lk.flags = flags;
+}
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+/*
+ RTM Adaptive locks
+*/
+
+#if KMP_COMPILER_ICC && __INTEL_COMPILER >= 1300
+
+#include <immintrin.h>
+#define SOFT_ABORT_MASK (_XABORT_RETRY | _XABORT_CONFLICT | _XABORT_EXPLICIT)
+
+#else
+
+// Values from the status register after failed speculation.
+#define _XBEGIN_STARTED (~0u)
+#define _XABORT_EXPLICIT (1 << 0)
+#define _XABORT_RETRY (1 << 1)
+#define _XABORT_CONFLICT (1 << 2)
+#define _XABORT_CAPACITY (1 << 3)
+#define _XABORT_DEBUG (1 << 4)
+#define _XABORT_NESTED (1 << 5)
+#define _XABORT_CODE(x) ((unsigned char)(((x) >> 24) & 0xFF))
+
+// Aborts for which it's worth trying again immediately
+#define SOFT_ABORT_MASK (_XABORT_RETRY | _XABORT_CONFLICT | _XABORT_EXPLICIT)
+
+#define STRINGIZE_INTERNAL(arg) #arg
+#define STRINGIZE(arg) STRINGIZE_INTERNAL(arg)
+
+// Access to RTM instructions
+
+/*
+ A version of XBegin which returns -1 on speculation, and the value of EAX on an abort.
+ This is the same definition as the compiler intrinsic that will be supported at some point.
+*/
+static __inline int _xbegin()
+{
+ int res = -1;
+
+#if KMP_OS_WINDOWS
+#if KMP_ARCH_X86_64
+ _asm {
+ _emit 0xC7
+ _emit 0xF8
+ _emit 2
+ _emit 0
+ _emit 0
+ _emit 0
+ jmp L2
+ mov res, eax
+ L2:
+ }
+#else /* IA32 */
+ _asm {
+ _emit 0xC7
+ _emit 0xF8
+ _emit 2
+ _emit 0
+ _emit 0
+ _emit 0
+ jmp L2
+ mov res, eax
+ L2:
+ }
+#endif // KMP_ARCH_X86_64
+#else
+ /* Note that %eax must be noted as killed (clobbered), because
+ * the XSR is returned in %eax(%rax) on abort. Other register
+ * values are restored, so don't need to be killed.
+ *
+ * We must also mark 'res' as an input and an output, since otherwise
+ * 'res=-1' may be dropped as being dead, whereas we do need the
+ * assignment on the successful (i.e., non-abort) path.
+ */
+ __asm__ volatile ("1: .byte 0xC7; .byte 0xF8;\n"
+ " .long 1f-1b-6\n"
+ " jmp 2f\n"
+ "1: movl %%eax,%0\n"
+ "2:"
+ :"+r"(res)::"memory","%eax");
+#endif // KMP_OS_WINDOWS
+ return res;
+}
+
+/*
+ Transaction end
+*/
+static __inline void _xend()
+{
+#if KMP_OS_WINDOWS
+ __asm {
+ _emit 0x0f
+ _emit 0x01
+ _emit 0xd5
+ }
+#else
+ __asm__ volatile (".byte 0x0f; .byte 0x01; .byte 0xd5" :::"memory");
+#endif
+}
+
+/*
+ This is a macro, the argument must be a single byte constant which
+ can be evaluated by the inline assembler, since it is emitted as a
+ byte into the assembly code.
+*/
+#if KMP_OS_WINDOWS
+#define _xabort(ARG) \
+ _asm _emit 0xc6 \
+ _asm _emit 0xf8 \
+ _asm _emit ARG
+#else
+#define _xabort(ARG) \
+ __asm__ volatile (".byte 0xC6; .byte 0xF8; .byte " STRINGIZE(ARG) :::"memory");
+#endif
+
+#endif // KMP_COMPILER_ICC && __INTEL_COMPILER >= 1300
+
+//
+// Statistics is collected for testing purpose
+//
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+
+// We accumulate speculative lock statistics when the lock is destroyed.
+// We keep locks that haven't been destroyed in the liveLocks list
+// so that we can grab their statistics too.
+static kmp_adaptive_lock_statistics_t destroyedStats;
+
+// To hold the list of live locks.
+static kmp_adaptive_lock_info_t liveLocks;
+
+// A lock so we can safely update the list of locks.
+static kmp_bootstrap_lock_t chain_lock;
+
+// Initialize the list of stats.
+void
+__kmp_init_speculative_stats()
+{
+ kmp_adaptive_lock_info_t *lck = &liveLocks;
+
+ memset( ( void * ) & ( lck->stats ), 0, sizeof( lck->stats ) );
+ lck->stats.next = lck;
+ lck->stats.prev = lck;
+
+ KMP_ASSERT( lck->stats.next->stats.prev == lck );
+ KMP_ASSERT( lck->stats.prev->stats.next == lck );
+
+ __kmp_init_bootstrap_lock( &chain_lock );
+
+}
+
+// Insert the lock into the circular list
+static void
+__kmp_remember_lock( kmp_adaptive_lock_info_t * lck )
+{
+ __kmp_acquire_bootstrap_lock( &chain_lock );
+
+ lck->stats.next = liveLocks.stats.next;
+ lck->stats.prev = &liveLocks;
+
+ liveLocks.stats.next = lck;
+ lck->stats.next->stats.prev = lck;
+
+ KMP_ASSERT( lck->stats.next->stats.prev == lck );
+ KMP_ASSERT( lck->stats.prev->stats.next == lck );
+
+ __kmp_release_bootstrap_lock( &chain_lock );
+}
+
+static void
+__kmp_forget_lock( kmp_adaptive_lock_info_t * lck )
+{
+ KMP_ASSERT( lck->stats.next->stats.prev == lck );
+ KMP_ASSERT( lck->stats.prev->stats.next == lck );
+
+ kmp_adaptive_lock_info_t * n = lck->stats.next;
+ kmp_adaptive_lock_info_t * p = lck->stats.prev;
+
+ n->stats.prev = p;
+ p->stats.next = n;
+}
+
+static void
+__kmp_zero_speculative_stats( kmp_adaptive_lock_info_t * lck )
+{
+ memset( ( void * )&lck->stats, 0, sizeof( lck->stats ) );
+ __kmp_remember_lock( lck );
+}
+
+static void
+__kmp_add_stats( kmp_adaptive_lock_statistics_t * t, kmp_adaptive_lock_info_t * lck )
+{
+ kmp_adaptive_lock_statistics_t volatile *s = &lck->stats;
+
+ t->nonSpeculativeAcquireAttempts += lck->acquire_attempts;
+ t->successfulSpeculations += s->successfulSpeculations;
+ t->hardFailedSpeculations += s->hardFailedSpeculations;
+ t->softFailedSpeculations += s->softFailedSpeculations;
+ t->nonSpeculativeAcquires += s->nonSpeculativeAcquires;
+ t->lemmingYields += s->lemmingYields;
+}
+
+static void
+__kmp_accumulate_speculative_stats( kmp_adaptive_lock_info_t * lck)
+{
+ kmp_adaptive_lock_statistics_t *t = &destroyedStats;
+
+ __kmp_acquire_bootstrap_lock( &chain_lock );
+
+ __kmp_add_stats( &destroyedStats, lck );
+ __kmp_forget_lock( lck );
+
+ __kmp_release_bootstrap_lock( &chain_lock );
+}
+
+static float
+percent (kmp_uint32 count, kmp_uint32 total)
+{
+ return (total == 0) ? 0.0: (100.0 * count)/total;
+}
+
+static
+FILE * __kmp_open_stats_file()
+{
+ if (strcmp (__kmp_speculative_statsfile, "-") == 0)
+ return stdout;
+
+ size_t buffLen = KMP_STRLEN( __kmp_speculative_statsfile ) + 20;
+ char buffer[buffLen];
+ KMP_SNPRINTF (&buffer[0], buffLen, __kmp_speculative_statsfile,
+ (kmp_int32)getpid());
+ FILE * result = fopen(&buffer[0], "w");
+
+ // Maybe we should issue a warning here...
+ return result ? result : stdout;
+}
+
+void
+__kmp_print_speculative_stats()
+{
+ if (__kmp_user_lock_kind != lk_adaptive)
+ return;
+
+ FILE * statsFile = __kmp_open_stats_file();
+
+ kmp_adaptive_lock_statistics_t total = destroyedStats;
+ kmp_adaptive_lock_info_t *lck;
+
+ for (lck = liveLocks.stats.next; lck != &liveLocks; lck = lck->stats.next) {
+ __kmp_add_stats( &total, lck );
+ }
+ kmp_adaptive_lock_statistics_t *t = &total;
+ kmp_uint32 totalSections = t->nonSpeculativeAcquires + t->successfulSpeculations;
+ kmp_uint32 totalSpeculations = t->successfulSpeculations + t->hardFailedSpeculations +
+ t->softFailedSpeculations;
+
+ fprintf ( statsFile, "Speculative lock statistics (all approximate!)\n");
+ fprintf ( statsFile, " Lock parameters: \n"
+ " max_soft_retries : %10d\n"
+ " max_badness : %10d\n",
+ __kmp_adaptive_backoff_params.max_soft_retries,
+ __kmp_adaptive_backoff_params.max_badness);
+ fprintf( statsFile, " Non-speculative acquire attempts : %10d\n", t->nonSpeculativeAcquireAttempts );
+ fprintf( statsFile, " Total critical sections : %10d\n", totalSections );
+ fprintf( statsFile, " Successful speculations : %10d (%5.1f%%)\n",
+ t->successfulSpeculations, percent( t->successfulSpeculations, totalSections ) );
+ fprintf( statsFile, " Non-speculative acquires : %10d (%5.1f%%)\n",
+ t->nonSpeculativeAcquires, percent( t->nonSpeculativeAcquires, totalSections ) );
+ fprintf( statsFile, " Lemming yields : %10d\n\n", t->lemmingYields );
+
+ fprintf( statsFile, " Speculative acquire attempts : %10d\n", totalSpeculations );
+ fprintf( statsFile, " Successes : %10d (%5.1f%%)\n",
+ t->successfulSpeculations, percent( t->successfulSpeculations, totalSpeculations ) );
+ fprintf( statsFile, " Soft failures : %10d (%5.1f%%)\n",
+ t->softFailedSpeculations, percent( t->softFailedSpeculations, totalSpeculations ) );
+ fprintf( statsFile, " Hard failures : %10d (%5.1f%%)\n",
+ t->hardFailedSpeculations, percent( t->hardFailedSpeculations, totalSpeculations ) );
+
+ if (statsFile != stdout)
+ fclose( statsFile );
+}
+
+# define KMP_INC_STAT(lck,stat) ( lck->lk.adaptive.stats.stat++ )
+#else
+# define KMP_INC_STAT(lck,stat)
+
+#endif // KMP_DEBUG_ADAPTIVE_LOCKS
+
+static inline bool
+__kmp_is_unlocked_queuing_lock( kmp_queuing_lock_t *lck )
+{
+ // It is enough to check that the head_id is zero.
+ // We don't also need to check the tail.
+ bool res = lck->lk.head_id == 0;
+
+ // We need a fence here, since we must ensure that no memory operations
+ // from later in this thread float above that read.
+#if KMP_COMPILER_ICC
+ _mm_mfence();
+#else
+ __sync_synchronize();
+#endif
+
+ return res;
+}
+
+// Functions for manipulating the badness
+static __inline void
+__kmp_update_badness_after_success( kmp_adaptive_lock_t *lck )
+{
+ // Reset the badness to zero so we eagerly try to speculate again
+ lck->lk.adaptive.badness = 0;
+ KMP_INC_STAT(lck,successfulSpeculations);
+}
+
+// Create a bit mask with one more set bit.
+static __inline void
+__kmp_step_badness( kmp_adaptive_lock_t *lck )
+{
+ kmp_uint32 newBadness = ( lck->lk.adaptive.badness << 1 ) | 1;
+ if ( newBadness > lck->lk.adaptive.max_badness) {
+ return;
+ } else {
+ lck->lk.adaptive.badness = newBadness;
+ }
+}
+
+// Check whether speculation should be attempted.
+static __inline int
+__kmp_should_speculate( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_uint32 badness = lck->lk.adaptive.badness;
+ kmp_uint32 attempts= lck->lk.adaptive.acquire_attempts;
+ int res = (attempts & badness) == 0;
+ return res;
+}
+
+// Attempt to acquire only the speculative lock.
+// Does not back off to the non-speculative lock.
+//
+static int
+__kmp_test_adaptive_lock_only( kmp_adaptive_lock_t * lck, kmp_int32 gtid )
+{
+ int retries = lck->lk.adaptive.max_soft_retries;
+
+ // We don't explicitly count the start of speculation, rather we record
+ // the results (success, hard fail, soft fail). The sum of all of those
+ // is the total number of times we started speculation since all
+ // speculations must end one of those ways.
+ do
+ {
+ kmp_uint32 status = _xbegin();
+ // Switch this in to disable actual speculation but exercise
+ // at least some of the rest of the code. Useful for debugging...
+ // kmp_uint32 status = _XABORT_NESTED;
+
+ if (status == _XBEGIN_STARTED )
+ { /* We have successfully started speculation
+ * Check that no-one acquired the lock for real between when we last looked
+ * and now. This also gets the lock cache line into our read-set,
+ * which we need so that we'll abort if anyone later claims it for real.
+ */
+ if (! __kmp_is_unlocked_queuing_lock( GET_QLK_PTR(lck) ) )
+ {
+ // Lock is now visibly acquired, so someone beat us to it.
+ // Abort the transaction so we'll restart from _xbegin with the
+ // failure status.
+ _xabort(0x01);
+ KMP_ASSERT2( 0, "should not get here" );
+ }
+ return 1; // Lock has been acquired (speculatively)
+ } else {
+ // We have aborted, update the statistics
+ if ( status & SOFT_ABORT_MASK)
+ {
+ KMP_INC_STAT(lck,softFailedSpeculations);
+ // and loop round to retry.
+ }
+ else
+ {
+ KMP_INC_STAT(lck,hardFailedSpeculations);
+ // Give up if we had a hard failure.
+ break;
+ }
+ }
+ } while( retries-- ); // Loop while we have retries, and didn't fail hard.
+
+ // Either we had a hard failure or we didn't succeed softly after
+ // the full set of attempts, so back off the badness.
+ __kmp_step_badness( lck );
+ return 0;
+}
+
+// Attempt to acquire the speculative lock, or back off to the non-speculative one
+// if the speculative lock cannot be acquired.
+// We can succeed speculatively, non-speculatively, or fail.
+static int
+__kmp_test_adaptive_lock( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ // First try to acquire the lock speculatively
+ if ( __kmp_should_speculate( lck, gtid ) && __kmp_test_adaptive_lock_only( lck, gtid ) )
+ return 1;
+
+ // Speculative acquisition failed, so try to acquire it non-speculatively.
+ // Count the non-speculative acquire attempt
+ lck->lk.adaptive.acquire_attempts++;
+
+ // Use base, non-speculative lock.
+ if ( __kmp_test_queuing_lock( GET_QLK_PTR(lck), gtid ) )
+ {
+ KMP_INC_STAT(lck,nonSpeculativeAcquires);
+ return 1; // Lock is acquired (non-speculatively)
+ }
+ else
+ {
+ return 0; // Failed to acquire the lock, it's already visibly locked.
+ }
+}
+
+static int
+__kmp_test_adaptive_lock_with_checks( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+ if ( lck->lk.qlk.initialized != GET_QLK_PTR(lck) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+
+ int retval = __kmp_test_adaptive_lock( lck, gtid );
+
+ if ( retval ) {
+ lck->lk.qlk.owner_id = gtid + 1;
+ }
+ return retval;
+}
+
+// Block until we can acquire a speculative, adaptive lock.
+// We check whether we should be trying to speculate.
+// If we should be, we check the real lock to see if it is free,
+// and, if not, pause without attempting to acquire it until it is.
+// Then we try the speculative acquire.
+// This means that although we suffer from lemmings a little (
+// because all we can't acquire the lock speculatively until
+// the queue of threads waiting has cleared), we don't get into a
+// state where we can never acquire the lock speculatively (because we
+// force the queue to clear by preventing new arrivals from entering the
+// queue).
+// This does mean that when we're trying to break lemmings, the lock
+// is no longer fair. However OpenMP makes no guarantee that its
+// locks are fair, so this isn't a real problem.
+static void
+__kmp_acquire_adaptive_lock( kmp_adaptive_lock_t * lck, kmp_int32 gtid )
+{
+ if ( __kmp_should_speculate( lck, gtid ) )
+ {
+ if ( __kmp_is_unlocked_queuing_lock( GET_QLK_PTR(lck) ) )
+ {
+ if ( __kmp_test_adaptive_lock_only( lck , gtid ) )
+ return;
+ // We tried speculation and failed, so give up.
+ }
+ else
+ {
+ // We can't try speculation until the lock is free, so we
+ // pause here (without suspending on the queueing lock,
+ // to allow it to drain, then try again.
+ // All other threads will also see the same result for
+ // shouldSpeculate, so will be doing the same if they
+ // try to claim the lock from now on.
+ while ( ! __kmp_is_unlocked_queuing_lock( GET_QLK_PTR(lck) ) )
+ {
+ KMP_INC_STAT(lck,lemmingYields);
+ __kmp_yield (TRUE);
+ }
+
+ if ( __kmp_test_adaptive_lock_only( lck, gtid ) )
+ return;
+ }
+ }
+
+ // Speculative acquisition failed, so acquire it non-speculatively.
+ // Count the non-speculative acquire attempt
+ lck->lk.adaptive.acquire_attempts++;
+
+ __kmp_acquire_queuing_lock_timed_template<FALSE>( GET_QLK_PTR(lck), gtid );
+ // We have acquired the base lock, so count that.
+ KMP_INC_STAT(lck,nonSpeculativeAcquires );
+}
+
+static void
+__kmp_acquire_adaptive_lock_with_checks( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+ if ( lck->lk.qlk.initialized != GET_QLK_PTR(lck) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( GET_QLK_PTR(lck) ) == gtid ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+
+ __kmp_acquire_adaptive_lock( lck, gtid );
+
+ lck->lk.qlk.owner_id = gtid + 1;
+}
+
+static int
+__kmp_release_adaptive_lock( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ if ( __kmp_is_unlocked_queuing_lock( GET_QLK_PTR(lck) ) )
+ { // If the lock doesn't look claimed we must be speculating.
+ // (Or the user's code is buggy and they're releasing without locking;
+ // if we had XTEST we'd be able to check that case...)
+ _xend(); // Exit speculation
+ __kmp_update_badness_after_success( lck );
+ }
+ else
+ { // Since the lock *is* visibly locked we're not speculating,
+ // so should use the underlying lock's release scheme.
+ __kmp_release_queuing_lock( GET_QLK_PTR(lck), gtid );
+ }
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_adaptive_lock_with_checks( kmp_adaptive_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( lck->lk.qlk.initialized != GET_QLK_PTR(lck) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( GET_QLK_PTR(lck) ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( GET_QLK_PTR(lck) ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ lck->lk.qlk.owner_id = 0;
+ __kmp_release_adaptive_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+}
+
+static void
+__kmp_init_adaptive_lock( kmp_adaptive_lock_t *lck )
+{
+ __kmp_init_queuing_lock( GET_QLK_PTR(lck) );
+ lck->lk.adaptive.badness = 0;
+ lck->lk.adaptive.acquire_attempts = 0; //nonSpeculativeAcquireAttempts = 0;
+ lck->lk.adaptive.max_soft_retries = __kmp_adaptive_backoff_params.max_soft_retries;
+ lck->lk.adaptive.max_badness = __kmp_adaptive_backoff_params.max_badness;
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+ __kmp_zero_speculative_stats( &lck->lk.adaptive );
+#endif
+ KA_TRACE(1000, ("__kmp_init_adaptive_lock: lock %p initialized\n", lck));
+}
+
+static void
+__kmp_init_adaptive_lock_with_checks( kmp_adaptive_lock_t * lck )
+{
+ __kmp_init_adaptive_lock( lck );
+}
+
+static void
+__kmp_destroy_adaptive_lock( kmp_adaptive_lock_t *lck )
+{
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+ __kmp_accumulate_speculative_stats( &lck->lk.adaptive );
+#endif
+ __kmp_destroy_queuing_lock (GET_QLK_PTR(lck));
+ // Nothing needed for the speculative part.
+}
+
+static void
+__kmp_destroy_adaptive_lock_with_checks( kmp_adaptive_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+ if ( lck->lk.qlk.initialized != GET_QLK_PTR(lck) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_get_queuing_lock_owner( GET_QLK_PTR(lck) ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_adaptive_lock( lck );
+}
+
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+
+/* ------------------------------------------------------------------------ */
+/* DRDPA ticket locks */
+/* "DRDPA" means Dynamically Reconfigurable Distributed Polling Area */
+
+static kmp_int32
+__kmp_get_drdpa_lock_owner( kmp_drdpa_lock_t *lck )
+{
+ return TCR_4( lck->lk.owner_id ) - 1;
+}
+
+static inline bool
+__kmp_is_drdpa_lock_nestable( kmp_drdpa_lock_t *lck )
+{
+ return lck->lk.depth_locked != -1;
+}
+
+__forceinline static int
+__kmp_acquire_drdpa_lock_timed_template( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ kmp_uint64 ticket = KMP_TEST_THEN_INC64((kmp_int64 *)&lck->lk.next_ticket);
+ kmp_uint64 mask = TCR_8(lck->lk.mask); // volatile load
+ volatile struct kmp_base_drdpa_lock::kmp_lock_poll *polls
+ = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ TCR_PTR(lck->lk.polls); // volatile load
+
+#ifdef USE_LOCK_PROFILE
+ if (TCR_8(polls[ticket & mask].poll) != ticket)
+ __kmp_printf("LOCK CONTENTION: %p\n", lck);
+ /* else __kmp_printf( "." );*/
+#endif /* USE_LOCK_PROFILE */
+
+ //
+ // Now spin-wait, but reload the polls pointer and mask, in case the
+ // polling area has been reconfigured. Unless it is reconfigured, the
+ // reloads stay in L1 cache and are cheap.
+ //
+ // Keep this code in sync with KMP_WAIT_YIELD, in kmp_dispatch.c !!!
+ //
+ // The current implementation of KMP_WAIT_YIELD doesn't allow for mask
+ // and poll to be re-read every spin iteration.
+ //
+ kmp_uint32 spins;
+
+ KMP_FSYNC_PREPARE(lck);
+ KMP_INIT_YIELD(spins);
+ while (TCR_8(polls[ticket & mask].poll) < ticket) { // volatile load
+ // If we are oversubscribed,
+ // or have waited a bit (and KMP_LIBRARY=turnaround), then yield.
+ // CPU Pause is in the macros for yield.
+ //
+ KMP_YIELD(TCR_4(__kmp_nth)
+ > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc));
+ KMP_YIELD_SPIN(spins);
+
+ // Re-read the mask and the poll pointer from the lock structure.
+ //
+ // Make certain that "mask" is read before "polls" !!!
+ //
+ // If another thread picks reconfigures the polling area and updates
+ // their values, and we get the new value of mask and the old polls
+ // pointer, we could access memory beyond the end of the old polling
+ // area.
+ //
+ mask = TCR_8(lck->lk.mask); // volatile load
+ polls = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ TCR_PTR(lck->lk.polls); // volatile load
+ }
+
+ //
+ // Critical section starts here
+ //
+ KMP_FSYNC_ACQUIRED(lck);
+ KA_TRACE(1000, ("__kmp_acquire_drdpa_lock: ticket #%lld acquired lock %p\n",
+ ticket, lck));
+ lck->lk.now_serving = ticket; // non-volatile store
+
+ //
+ // Deallocate a garbage polling area if we know that we are the last
+ // thread that could possibly access it.
+ //
+ // The >= check is in case __kmp_test_drdpa_lock() allocated the cleanup
+ // ticket.
+ //
+ if ((lck->lk.old_polls != NULL) && (ticket >= lck->lk.cleanup_ticket)) {
+ __kmp_free((void *)lck->lk.old_polls);
+ lck->lk.old_polls = NULL;
+ lck->lk.cleanup_ticket = 0;
+ }
+
+ //
+ // Check to see if we should reconfigure the polling area.
+ // If there is still a garbage polling area to be deallocated from a
+ // previous reconfiguration, let a later thread reconfigure it.
+ //
+ if (lck->lk.old_polls == NULL) {
+ bool reconfigure = false;
+ volatile struct kmp_base_drdpa_lock::kmp_lock_poll *old_polls = polls;
+ kmp_uint32 num_polls = TCR_4(lck->lk.num_polls);
+
+ if (TCR_4(__kmp_nth)
+ > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)) {
+ //
+ // We are in oversubscription mode. Contract the polling area
+ // down to a single location, if that hasn't been done already.
+ //
+ if (num_polls > 1) {
+ reconfigure = true;
+ num_polls = TCR_4(lck->lk.num_polls);
+ mask = 0;
+ num_polls = 1;
+ polls = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ __kmp_allocate(num_polls * sizeof(*polls));
+ polls[0].poll = ticket;
+ }
+ }
+ else {
+ //
+ // We are in under/fully subscribed mode. Check the number of
+ // threads waiting on the lock. The size of the polling area
+ // should be at least the number of threads waiting.
+ //
+ kmp_uint64 num_waiting = TCR_8(lck->lk.next_ticket) - ticket - 1;
+ if (num_waiting > num_polls) {
+ kmp_uint32 old_num_polls = num_polls;
+ reconfigure = true;
+ do {
+ mask = (mask << 1) | 1;
+ num_polls *= 2;
+ } while (num_polls <= num_waiting);
+
+ //
+ // Allocate the new polling area, and copy the relevant portion
+ // of the old polling area to the new area. __kmp_allocate()
+ // zeroes the memory it allocates, and most of the old area is
+ // just zero padding, so we only copy the release counters.
+ //
+ polls = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ __kmp_allocate(num_polls * sizeof(*polls));
+ kmp_uint32 i;
+ for (i = 0; i < old_num_polls; i++) {
+ polls[i].poll = old_polls[i].poll;
+ }
+ }
+ }
+
+ if (reconfigure) {
+ //
+ // Now write the updated fields back to the lock structure.
+ //
+ // Make certain that "polls" is written before "mask" !!!
+ //
+ // If another thread picks up the new value of mask and the old
+ // polls pointer , it could access memory beyond the end of the
+ // old polling area.
+ //
+ // On x86, we need memory fences.
+ //
+ KA_TRACE(1000, ("__kmp_acquire_drdpa_lock: ticket #%lld reconfiguring lock %p to %d polls\n",
+ ticket, lck, num_polls));
+
+ lck->lk.old_polls = old_polls; // non-volatile store
+ lck->lk.polls = polls; // volatile store
+
+ KMP_MB();
+
+ lck->lk.num_polls = num_polls; // non-volatile store
+ lck->lk.mask = mask; // volatile store
+
+ KMP_MB();
+
+ //
+ // Only after the new polling area and mask have been flushed
+ // to main memory can we update the cleanup ticket field.
+ //
+ // volatile load / non-volatile store
+ //
+ lck->lk.cleanup_ticket = TCR_8(lck->lk.next_ticket);
+ }
+ }
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_acquire_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_acquire_drdpa_lock_timed_template( lck, gtid );
+}
+
+static int
+__kmp_acquire_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_drdpa_lock_owner( lck ) == gtid ) ) {
+ KMP_FATAL( LockIsAlreadyOwned, func );
+ }
+
+ __kmp_acquire_drdpa_lock( lck, gtid );
+
+ lck->lk.owner_id = gtid + 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+}
+
+int
+__kmp_test_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ //
+ // First get a ticket, then read the polls pointer and the mask.
+ // The polls pointer must be read before the mask!!! (See above)
+ //
+ kmp_uint64 ticket = TCR_8(lck->lk.next_ticket); // volatile load
+ volatile struct kmp_base_drdpa_lock::kmp_lock_poll *polls
+ = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ TCR_PTR(lck->lk.polls); // volatile load
+ kmp_uint64 mask = TCR_8(lck->lk.mask); // volatile load
+ if (TCR_8(polls[ticket & mask].poll) == ticket) {
+ kmp_uint64 next_ticket = ticket + 1;
+ if (KMP_COMPARE_AND_STORE_ACQ64((kmp_int64 *)&lck->lk.next_ticket,
+ ticket, next_ticket)) {
+ KMP_FSYNC_ACQUIRED(lck);
+ KA_TRACE(1000, ("__kmp_test_drdpa_lock: ticket #%lld acquired lock %p\n",
+ ticket, lck));
+ lck->lk.now_serving = ticket; // non-volatile store
+
+ //
+ // Since no threads are waiting, there is no possibility that
+ // we would want to reconfigure the polling area. We might
+ // have the cleanup ticket value (which says that it is now
+ // safe to deallocate old_polls), but we'll let a later thread
+ // which calls __kmp_acquire_lock do that - this routine
+ // isn't supposed to block, and we would risk blocks if we
+ // called __kmp_free() to do the deallocation.
+ //
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static int
+__kmp_test_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+
+ int retval = __kmp_test_drdpa_lock( lck, gtid );
+
+ if ( retval ) {
+ lck->lk.owner_id = gtid + 1;
+ }
+ return retval;
+}
+
+int
+__kmp_release_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ //
+ // Read the ticket value from the lock data struct, then the polls
+ // pointer and the mask. The polls pointer must be read before the
+ // mask!!! (See above)
+ //
+ kmp_uint64 ticket = lck->lk.now_serving + 1; // non-volatile load
+ volatile struct kmp_base_drdpa_lock::kmp_lock_poll *polls
+ = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ TCR_PTR(lck->lk.polls); // volatile load
+ kmp_uint64 mask = TCR_8(lck->lk.mask); // volatile load
+ KA_TRACE(1000, ("__kmp_release_drdpa_lock: ticket #%lld released lock %p\n",
+ ticket - 1, lck));
+ KMP_FSYNC_RELEASING(lck);
+ KMP_ST_REL64(&(polls[ticket & mask].poll), ticket); // volatile store
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_drdpa_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( ( gtid >= 0 ) && ( __kmp_get_drdpa_lock_owner( lck ) >= 0 )
+ && ( __kmp_get_drdpa_lock_owner( lck ) != gtid ) ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ lck->lk.owner_id = 0;
+ return __kmp_release_drdpa_lock( lck, gtid );
+}
+
+void
+__kmp_init_drdpa_lock( kmp_drdpa_lock_t *lck )
+{
+ lck->lk.location = NULL;
+ lck->lk.mask = 0;
+ lck->lk.num_polls = 1;
+ lck->lk.polls = (volatile struct kmp_base_drdpa_lock::kmp_lock_poll *)
+ __kmp_allocate(lck->lk.num_polls * sizeof(*(lck->lk.polls)));
+ lck->lk.cleanup_ticket = 0;
+ lck->lk.old_polls = NULL;
+ lck->lk.next_ticket = 0;
+ lck->lk.now_serving = 0;
+ lck->lk.owner_id = 0; // no thread owns the lock.
+ lck->lk.depth_locked = -1; // >= 0 for nestable locks, -1 for simple locks.
+ lck->lk.initialized = lck;
+
+ KA_TRACE(1000, ("__kmp_init_drdpa_lock: lock %p initialized\n", lck));
+}
+
+static void
+__kmp_init_drdpa_lock_with_checks( kmp_drdpa_lock_t * lck )
+{
+ __kmp_init_drdpa_lock( lck );
+}
+
+void
+__kmp_destroy_drdpa_lock( kmp_drdpa_lock_t *lck )
+{
+ lck->lk.initialized = NULL;
+ lck->lk.location = NULL;
+ if (lck->lk.polls != NULL) {
+ __kmp_free((void *)lck->lk.polls);
+ lck->lk.polls = NULL;
+ }
+ if (lck->lk.old_polls != NULL) {
+ __kmp_free((void *)lck->lk.old_polls);
+ lck->lk.old_polls = NULL;
+ }
+ lck->lk.mask = 0;
+ lck->lk.num_polls = 0;
+ lck->lk.cleanup_ticket = 0;
+ lck->lk.next_ticket = 0;
+ lck->lk.now_serving = 0;
+ lck->lk.owner_id = 0;
+ lck->lk.depth_locked = -1;
+}
+
+static void
+__kmp_destroy_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck )
+{
+ char const * const func = "omp_destroy_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ if ( __kmp_get_drdpa_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_drdpa_lock( lck );
+}
+
+
+//
+// nested drdpa ticket locks
+//
+
+int
+__kmp_acquire_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_drdpa_lock_owner( lck ) == gtid ) {
+ lck->lk.depth_locked += 1;
+ return KMP_LOCK_ACQUIRED_NEXT;
+ }
+ else {
+ __kmp_acquire_drdpa_lock_timed_template( lck, gtid );
+ KMP_MB();
+ lck->lk.depth_locked = 1;
+ KMP_MB();
+ lck->lk.owner_id = gtid + 1;
+ return KMP_LOCK_ACQUIRED_FIRST;
+ }
+}
+
+static void
+__kmp_acquire_nested_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_set_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ __kmp_acquire_nested_drdpa_lock( lck, gtid );
+}
+
+int
+__kmp_test_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ int retval;
+
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ if ( __kmp_get_drdpa_lock_owner( lck ) == gtid ) {
+ retval = ++lck->lk.depth_locked;
+ }
+ else if ( !__kmp_test_drdpa_lock( lck, gtid ) ) {
+ retval = 0;
+ }
+ else {
+ KMP_MB();
+ retval = lck->lk.depth_locked = 1;
+ KMP_MB();
+ lck->lk.owner_id = gtid + 1;
+ }
+ return retval;
+}
+
+static int
+__kmp_test_nested_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_test_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ return __kmp_test_nested_drdpa_lock( lck, gtid );
+}
+
+int
+__kmp_release_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+
+ KMP_MB();
+ if ( --(lck->lk.depth_locked) == 0 ) {
+ KMP_MB();
+ lck->lk.owner_id = 0;
+ __kmp_release_drdpa_lock( lck, gtid );
+ return KMP_LOCK_RELEASED;
+ }
+ return KMP_LOCK_STILL_HELD;
+}
+
+static int
+__kmp_release_nested_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck, kmp_int32 gtid )
+{
+ char const * const func = "omp_unset_nest_lock";
+ KMP_MB(); /* in case another processor initialized lock */
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_drdpa_lock_owner( lck ) == -1 ) {
+ KMP_FATAL( LockUnsettingFree, func );
+ }
+ if ( __kmp_get_drdpa_lock_owner( lck ) != gtid ) {
+ KMP_FATAL( LockUnsettingSetByAnother, func );
+ }
+ return __kmp_release_nested_drdpa_lock( lck, gtid );
+}
+
+void
+__kmp_init_nested_drdpa_lock( kmp_drdpa_lock_t * lck )
+{
+ __kmp_init_drdpa_lock( lck );
+ lck->lk.depth_locked = 0; // >= 0 for nestable locks, -1 for simple locks
+}
+
+static void
+__kmp_init_nested_drdpa_lock_with_checks( kmp_drdpa_lock_t * lck )
+{
+ __kmp_init_nested_drdpa_lock( lck );
+}
+
+void
+__kmp_destroy_nested_drdpa_lock( kmp_drdpa_lock_t *lck )
+{
+ __kmp_destroy_drdpa_lock( lck );
+ lck->lk.depth_locked = 0;
+}
+
+static void
+__kmp_destroy_nested_drdpa_lock_with_checks( kmp_drdpa_lock_t *lck )
+{
+ char const * const func = "omp_destroy_nest_lock";
+ if ( lck->lk.initialized != lck ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ if ( ! __kmp_is_drdpa_lock_nestable( lck ) ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ if ( __kmp_get_drdpa_lock_owner( lck ) != -1 ) {
+ KMP_FATAL( LockStillOwned, func );
+ }
+ __kmp_destroy_nested_drdpa_lock( lck );
+}
+
+
+//
+// access functions to fields which don't exist for all lock kinds.
+//
+
+static int
+__kmp_is_drdpa_lock_initialized( kmp_drdpa_lock_t *lck )
+{
+ return lck == lck->lk.initialized;
+}
+
+static const ident_t *
+__kmp_get_drdpa_lock_location( kmp_drdpa_lock_t *lck )
+{
+ return lck->lk.location;
+}
+
+static void
+__kmp_set_drdpa_lock_location( kmp_drdpa_lock_t *lck, const ident_t *loc )
+{
+ lck->lk.location = loc;
+}
+
+static kmp_lock_flags_t
+__kmp_get_drdpa_lock_flags( kmp_drdpa_lock_t *lck )
+{
+ return lck->lk.flags;
+}
+
+static void
+__kmp_set_drdpa_lock_flags( kmp_drdpa_lock_t *lck, kmp_lock_flags_t flags )
+{
+ lck->lk.flags = flags;
+}
+
+// Time stamp counter
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+# define __kmp_tsc() __kmp_hardware_timestamp()
+// Runtime's default backoff parameters
+kmp_backoff_t __kmp_spin_backoff_params = { 1, 4096, 100 };
+#else
+// Use nanoseconds for other platforms
+extern kmp_uint64 __kmp_now_nsec();
+kmp_backoff_t __kmp_spin_backoff_params = { 1, 256, 100 };
+# define __kmp_tsc() __kmp_now_nsec()
+#endif
+
+// A useful predicate for dealing with timestamps that may wrap.
+// Is a before b?
+// Since the timestamps may wrap, this is asking whether it's
+// shorter to go clockwise from a to b around the clock-face, or anti-clockwise.
+// Times where going clockwise is less distance than going anti-clockwise
+// are in the future, others are in the past.
+// e.g.) a = MAX-1, b = MAX+1 (=0), then a > b (true) does not mean a reached b
+// whereas signed(a) = -2, signed(b) = 0 captures the actual difference
+static inline bool before(kmp_uint64 a, kmp_uint64 b)
+{
+ return ((kmp_int64)b - (kmp_int64)a) > 0;
+}
+
+// Truncated binary exponential backoff function
+void
+__kmp_spin_backoff(kmp_backoff_t *boff)
+{
+ // We could flatten this loop, but making it a nested loop gives better result.
+ kmp_uint32 i;
+ for (i = boff->step; i > 0; i--) {
+ kmp_uint64 goal = __kmp_tsc() + boff->min_tick;
+ do {
+ KMP_CPU_PAUSE();
+ } while (before(__kmp_tsc(), goal));
+ }
+ boff->step = (boff->step<<1 | 1) & (boff->max_backoff-1);
+}
+
+#if KMP_USE_DYNAMIC_LOCK
+
+// Direct lock initializers. It simply writes a tag to the low 8 bits of the lock word.
+static void __kmp_init_direct_lock(kmp_dyna_lock_t *lck, kmp_dyna_lockseq_t seq)
+{
+ TCW_4(*lck, KMP_GET_D_TAG(seq));
+ KA_TRACE(20, ("__kmp_init_direct_lock: initialized direct lock with type#%d\n", seq));
+}
+
+#if KMP_USE_TSX
+
+// HLE lock functions - imported from the testbed runtime.
+#define HLE_ACQUIRE ".byte 0xf2;"
+#define HLE_RELEASE ".byte 0xf3;"
+
+static inline kmp_uint32
+swap4(kmp_uint32 volatile *p, kmp_uint32 v)
+{
+ __asm__ volatile(HLE_ACQUIRE "xchg %1,%0"
+ : "+r"(v), "+m"(*p)
+ :
+ : "memory");
+ return v;
+}
+
+static void
+__kmp_destroy_hle_lock(kmp_dyna_lock_t *lck)
+{
+ TCW_4(*lck, 0);
+}
+
+static void
+__kmp_acquire_hle_lock(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ // Use gtid for KMP_LOCK_BUSY if necessary
+ if (swap4(lck, KMP_LOCK_BUSY(1, hle)) != KMP_LOCK_FREE(hle)) {
+ int delay = 1;
+ do {
+ while (*(kmp_uint32 volatile *)lck != KMP_LOCK_FREE(hle)) {
+ for (int i = delay; i != 0; --i)
+ KMP_CPU_PAUSE();
+ delay = ((delay << 1) | 1) & 7;
+ }
+ } while (swap4(lck, KMP_LOCK_BUSY(1, hle)) != KMP_LOCK_FREE(hle));
+ }
+}
+
+static void
+__kmp_acquire_hle_lock_with_checks(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ __kmp_acquire_hle_lock(lck, gtid); // TODO: add checks
+}
+
+static int
+__kmp_release_hle_lock(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ __asm__ volatile(HLE_RELEASE "movl %1,%0"
+ : "=m"(*lck)
+ : "r"(KMP_LOCK_FREE(hle))
+ : "memory");
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_hle_lock_with_checks(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ return __kmp_release_hle_lock(lck, gtid); // TODO: add checks
+}
+
+static int
+__kmp_test_hle_lock(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ return swap4(lck, KMP_LOCK_BUSY(1, hle)) == KMP_LOCK_FREE(hle);
+}
+
+static int
+__kmp_test_hle_lock_with_checks(kmp_dyna_lock_t *lck, kmp_int32 gtid)
+{
+ return __kmp_test_hle_lock(lck, gtid); // TODO: add checks
+}
+
+static void
+__kmp_init_rtm_lock(kmp_queuing_lock_t *lck)
+{
+ __kmp_init_queuing_lock(lck);
+}
+
+static void
+__kmp_destroy_rtm_lock(kmp_queuing_lock_t *lck)
+{
+ __kmp_destroy_queuing_lock(lck);
+}
+
+static void
+__kmp_acquire_rtm_lock(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ unsigned retries=3, status;
+ do {
+ status = _xbegin();
+ if (status == _XBEGIN_STARTED) {
+ if (__kmp_is_unlocked_queuing_lock(lck))
+ return;
+ _xabort(0xff);
+ }
+ if ((status & _XABORT_EXPLICIT) && _XABORT_CODE(status) == 0xff) {
+ // Wait until lock becomes free
+ while (! __kmp_is_unlocked_queuing_lock(lck))
+ __kmp_yield(TRUE);
+ }
+ else if (!(status & _XABORT_RETRY))
+ break;
+ } while (retries--);
+
+ // Fall-back non-speculative lock (xchg)
+ __kmp_acquire_queuing_lock(lck, gtid);
+}
+
+static void
+__kmp_acquire_rtm_lock_with_checks(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ __kmp_acquire_rtm_lock(lck, gtid);
+}
+
+static int
+__kmp_release_rtm_lock(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ if (__kmp_is_unlocked_queuing_lock(lck)) {
+ // Releasing from speculation
+ _xend();
+ }
+ else {
+ // Releasing from a real lock
+ __kmp_release_queuing_lock(lck, gtid);
+ }
+ return KMP_LOCK_RELEASED;
+}
+
+static int
+__kmp_release_rtm_lock_with_checks(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ return __kmp_release_rtm_lock(lck, gtid);
+}
+
+static int
+__kmp_test_rtm_lock(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ unsigned retries=3, status;
+ do {
+ status = _xbegin();
+ if (status == _XBEGIN_STARTED && __kmp_is_unlocked_queuing_lock(lck)) {
+ return 1;
+ }
+ if (!(status & _XABORT_RETRY))
+ break;
+ } while (retries--);
+
+ return (__kmp_is_unlocked_queuing_lock(lck))? 1: 0;
+}
+
+static int
+__kmp_test_rtm_lock_with_checks(kmp_queuing_lock_t *lck, kmp_int32 gtid)
+{
+ return __kmp_test_rtm_lock(lck, gtid);
+}
+
+#endif // KMP_USE_TSX
+
+// Entry functions for indirect locks (first element of direct lock jump tables).
+static void __kmp_init_indirect_lock(kmp_dyna_lock_t * l, kmp_dyna_lockseq_t tag);
+static void __kmp_destroy_indirect_lock(kmp_dyna_lock_t * lock);
+static void __kmp_set_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32);
+static int __kmp_unset_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32);
+static int __kmp_test_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32);
+static void __kmp_set_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32);
+static int __kmp_unset_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32);
+static int __kmp_test_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32);
+
+//
+// Jump tables for the indirect lock functions.
+// Only fill in the odd entries, that avoids the need to shift out the low bit.
+//
+
+// init functions
+#define expand(l, op) 0,__kmp_init_direct_lock,
+void (*__kmp_direct_init[])(kmp_dyna_lock_t *, kmp_dyna_lockseq_t)
+ = { __kmp_init_indirect_lock, 0, KMP_FOREACH_D_LOCK(expand, init) };
+#undef expand
+
+// destroy functions
+#define expand(l, op) 0,(void (*)(kmp_dyna_lock_t *))__kmp_##op##_##l##_lock,
+void (*__kmp_direct_destroy[])(kmp_dyna_lock_t *)
+ = { __kmp_destroy_indirect_lock, 0, KMP_FOREACH_D_LOCK(expand, destroy) };
+#undef expand
+
+// set/acquire functions
+#define expand(l, op) 0,(void (*)(kmp_dyna_lock_t *, kmp_int32))__kmp_##op##_##l##_lock,
+static void (*direct_set[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_set_indirect_lock, 0, KMP_FOREACH_D_LOCK(expand, acquire) };
+#undef expand
+#define expand(l, op) 0,(void (*)(kmp_dyna_lock_t *, kmp_int32))__kmp_##op##_##l##_lock_with_checks,
+static void (*direct_set_check[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_set_indirect_lock_with_checks, 0, KMP_FOREACH_D_LOCK(expand, acquire) };
+#undef expand
+
+// unset/release and test functions
+#define expand(l, op) 0,(int (*)(kmp_dyna_lock_t *, kmp_int32))__kmp_##op##_##l##_lock,
+static int (*direct_unset[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_unset_indirect_lock, 0, KMP_FOREACH_D_LOCK(expand, release) };
+static int (*direct_test[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_test_indirect_lock, 0, KMP_FOREACH_D_LOCK(expand, test) };
+#undef expand
+#define expand(l, op) 0,(int (*)(kmp_dyna_lock_t *, kmp_int32))__kmp_##op##_##l##_lock_with_checks,
+static int (*direct_unset_check[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_unset_indirect_lock_with_checks, 0, KMP_FOREACH_D_LOCK(expand, release) };
+static int (*direct_test_check[])(kmp_dyna_lock_t *, kmp_int32)
+ = { __kmp_test_indirect_lock_with_checks, 0, KMP_FOREACH_D_LOCK(expand, test) };
+#undef expand
+
+// Exposes only one set of jump tables (*lock or *lock_with_checks).
+void (*(*__kmp_direct_set))(kmp_dyna_lock_t *, kmp_int32) = 0;
+int (*(*__kmp_direct_unset))(kmp_dyna_lock_t *, kmp_int32) = 0;
+int (*(*__kmp_direct_test))(kmp_dyna_lock_t *, kmp_int32) = 0;
+
+//
+// Jump tables for the indirect lock functions.
+//
+#define expand(l, op) (void (*)(kmp_user_lock_p))__kmp_##op##_##l##_##lock,
+void (*__kmp_indirect_init[])(kmp_user_lock_p) = { KMP_FOREACH_I_LOCK(expand, init) };
+void (*__kmp_indirect_destroy[])(kmp_user_lock_p) = { KMP_FOREACH_I_LOCK(expand, destroy) };
+#undef expand
+
+// set/acquire functions
+#define expand(l, op) (void (*)(kmp_user_lock_p, kmp_int32))__kmp_##op##_##l##_##lock,
+static void (*indirect_set[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, acquire) };
+#undef expand
+#define expand(l, op) (void (*)(kmp_user_lock_p, kmp_int32))__kmp_##op##_##l##_##lock_with_checks,
+static void (*indirect_set_check[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, acquire) };
+#undef expand
+
+// unset/release and test functions
+#define expand(l, op) (int (*)(kmp_user_lock_p, kmp_int32))__kmp_##op##_##l##_##lock,
+static int (*indirect_unset[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, release) };
+static int (*indirect_test[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, test) };
+#undef expand
+#define expand(l, op) (int (*)(kmp_user_lock_p, kmp_int32))__kmp_##op##_##l##_##lock_with_checks,
+static int (*indirect_unset_check[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, release) };
+static int (*indirect_test_check[])(kmp_user_lock_p, kmp_int32) = { KMP_FOREACH_I_LOCK(expand, test) };
+#undef expand
+
+// Exposes only one jump tables (*lock or *lock_with_checks).
+void (*(*__kmp_indirect_set))(kmp_user_lock_p, kmp_int32) = 0;
+int (*(*__kmp_indirect_unset))(kmp_user_lock_p, kmp_int32) = 0;
+int (*(*__kmp_indirect_test))(kmp_user_lock_p, kmp_int32) = 0;
+
+// Lock index table.
+kmp_indirect_lock_table_t __kmp_i_lock_table;
+
+// Size of indirect locks.
+static kmp_uint32 __kmp_indirect_lock_size[KMP_NUM_I_LOCKS] = { 0 };
+
+// Jump tables for lock accessor/modifier.
+void (*__kmp_indirect_set_location[KMP_NUM_I_LOCKS])(kmp_user_lock_p, const ident_t *) = { 0 };
+void (*__kmp_indirect_set_flags[KMP_NUM_I_LOCKS])(kmp_user_lock_p, kmp_lock_flags_t) = { 0 };
+const ident_t * (*__kmp_indirect_get_location[KMP_NUM_I_LOCKS])(kmp_user_lock_p) = { 0 };
+kmp_lock_flags_t (*__kmp_indirect_get_flags[KMP_NUM_I_LOCKS])(kmp_user_lock_p) = { 0 };
+
+// Use different lock pools for different lock types.
+static kmp_indirect_lock_t * __kmp_indirect_lock_pool[KMP_NUM_I_LOCKS] = { 0 };
+
+// User lock allocator for dynamically dispatched indirect locks.
+// Every entry of the indirect lock table holds the address and type of the allocated indrect lock
+// (kmp_indirect_lock_t), and the size of the table doubles when it is full. A destroyed indirect lock
+// object is returned to the reusable pool of locks, unique to each lock type.
+kmp_indirect_lock_t *
+__kmp_allocate_indirect_lock(void **user_lock, kmp_int32 gtid, kmp_indirect_locktag_t tag)
+{
+ kmp_indirect_lock_t *lck;
+ kmp_lock_index_t idx;
+
+ __kmp_acquire_lock(&__kmp_global_lock, gtid);
+
+ if (__kmp_indirect_lock_pool[tag] != NULL) {
+ // Reuse the allocated and destroyed lock object
+ lck = __kmp_indirect_lock_pool[tag];
+ if (OMP_LOCK_T_SIZE < sizeof(void *))
+ idx = lck->lock->pool.index;
+ __kmp_indirect_lock_pool[tag] = (kmp_indirect_lock_t *)lck->lock->pool.next;
+ KA_TRACE(20, ("__kmp_allocate_indirect_lock: reusing an existing lock %p\n", lck));
+ } else {
+ idx = __kmp_i_lock_table.next;
+ // Check capacity and double the size if it is full
+ if (idx == __kmp_i_lock_table.size) {
+ // Double up the space for block pointers
+ int row = __kmp_i_lock_table.size/KMP_I_LOCK_CHUNK;
+ kmp_indirect_lock_t **old_table = __kmp_i_lock_table.table;
+ __kmp_i_lock_table.table = (kmp_indirect_lock_t **)__kmp_allocate(2*row*sizeof(kmp_indirect_lock_t *));
+ KMP_MEMCPY(__kmp_i_lock_table.table, old_table, row*sizeof(kmp_indirect_lock_t *));
+ __kmp_free(old_table);
+ // Allocate new objects in the new blocks
+ for (int i = row; i < 2*row; ++i)
+ *(__kmp_i_lock_table.table + i) = (kmp_indirect_lock_t *)
+ __kmp_allocate(KMP_I_LOCK_CHUNK*sizeof(kmp_indirect_lock_t));
+ __kmp_i_lock_table.size = 2*idx;
+ }
+ __kmp_i_lock_table.next++;
+ lck = KMP_GET_I_LOCK(idx);
+ // Allocate a new base lock object
+ lck->lock = (kmp_user_lock_p)__kmp_allocate(__kmp_indirect_lock_size[tag]);
+ KA_TRACE(20, ("__kmp_allocate_indirect_lock: allocated a new lock %p\n", lck));
+ }
+
+ __kmp_release_lock(&__kmp_global_lock, gtid);
+
+ lck->type = tag;
+
+ if (OMP_LOCK_T_SIZE < sizeof(void *)) {
+ *((kmp_lock_index_t *)user_lock) = idx << 1; // indirect lock word must be even.
+ } else {
+ *((kmp_indirect_lock_t **)user_lock) = lck;
+ }
+
+ return lck;
+}
+
+// User lock lookup for dynamically dispatched locks.
+static __forceinline
+kmp_indirect_lock_t *
+__kmp_lookup_indirect_lock(void **user_lock, const char *func)
+{
+ if (__kmp_env_consistency_check) {
+ kmp_indirect_lock_t *lck = NULL;
+ if (user_lock == NULL) {
+ KMP_FATAL(LockIsUninitialized, func);
+ }
+ if (OMP_LOCK_T_SIZE < sizeof(void *)) {
+ kmp_lock_index_t idx = KMP_EXTRACT_I_INDEX(user_lock);
+ if (idx >= __kmp_i_lock_table.size) {
+ KMP_FATAL(LockIsUninitialized, func);
+ }
+ lck = KMP_GET_I_LOCK(idx);
+ } else {
+ lck = *((kmp_indirect_lock_t **)user_lock);
+ }
+ if (lck == NULL) {
+ KMP_FATAL(LockIsUninitialized, func);
+ }
+ return lck;
+ } else {
+ if (OMP_LOCK_T_SIZE < sizeof(void *)) {
+ return KMP_GET_I_LOCK(KMP_EXTRACT_I_INDEX(user_lock));
+ } else {
+ return *((kmp_indirect_lock_t **)user_lock);
+ }
+ }
+}
+
+static void
+__kmp_init_indirect_lock(kmp_dyna_lock_t * lock, kmp_dyna_lockseq_t seq)
+{
+#if KMP_USE_ADAPTIVE_LOCKS
+ if (seq == lockseq_adaptive && !__kmp_cpuinfo.rtm) {
+ KMP_WARNING(AdaptiveNotSupported, "kmp_lockseq_t", "adaptive");
+ seq = lockseq_queuing;
+ }
+#endif
+#if KMP_USE_TSX
+ if (seq == lockseq_rtm && !__kmp_cpuinfo.rtm) {
+ seq = lockseq_queuing;
+ }
+#endif
+ kmp_indirect_locktag_t tag = KMP_GET_I_TAG(seq);
+ kmp_indirect_lock_t *l = __kmp_allocate_indirect_lock((void **)lock, __kmp_entry_gtid(), tag);
+ KMP_I_LOCK_FUNC(l, init)(l->lock);
+ KA_TRACE(20, ("__kmp_init_indirect_lock: initialized indirect lock with type#%d\n", seq));
+}
+
+static void
+__kmp_destroy_indirect_lock(kmp_dyna_lock_t * lock)
+{
+ kmp_uint32 gtid = __kmp_entry_gtid();
+ kmp_indirect_lock_t *l = __kmp_lookup_indirect_lock((void **)lock, "omp_destroy_lock");
+ KMP_I_LOCK_FUNC(l, destroy)(l->lock);
+ kmp_indirect_locktag_t tag = l->type;
+
+ __kmp_acquire_lock(&__kmp_global_lock, gtid);
+
+ // Use the base lock's space to keep the pool chain.
+ l->lock->pool.next = (kmp_user_lock_p)__kmp_indirect_lock_pool[tag];
+ if (OMP_LOCK_T_SIZE < sizeof(void *)) {
+ l->lock->pool.index = KMP_EXTRACT_I_INDEX(lock);
+ }
+ __kmp_indirect_lock_pool[tag] = l;
+
+ __kmp_release_lock(&__kmp_global_lock, gtid);
+}
+
+static void
+__kmp_set_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = KMP_LOOKUP_I_LOCK(lock);
+ KMP_I_LOCK_FUNC(l, set)(l->lock, gtid);
+}
+
+static int
+__kmp_unset_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = KMP_LOOKUP_I_LOCK(lock);
+ return KMP_I_LOCK_FUNC(l, unset)(l->lock, gtid);
+}
+
+static int
+__kmp_test_indirect_lock(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = KMP_LOOKUP_I_LOCK(lock);
+ return KMP_I_LOCK_FUNC(l, test)(l->lock, gtid);
+}
+
+static void
+__kmp_set_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = __kmp_lookup_indirect_lock((void **)lock, "omp_set_lock");
+ KMP_I_LOCK_FUNC(l, set)(l->lock, gtid);
+}
+
+static int
+__kmp_unset_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = __kmp_lookup_indirect_lock((void **)lock, "omp_unset_lock");
+ return KMP_I_LOCK_FUNC(l, unset)(l->lock, gtid);
+}
+
+static int
+__kmp_test_indirect_lock_with_checks(kmp_dyna_lock_t * lock, kmp_int32 gtid)
+{
+ kmp_indirect_lock_t *l = __kmp_lookup_indirect_lock((void **)lock, "omp_test_lock");
+ return KMP_I_LOCK_FUNC(l, test)(l->lock, gtid);
+}
+
+kmp_dyna_lockseq_t __kmp_user_lock_seq = lockseq_queuing;
+
+// This is used only in kmp_error.c when consistency checking is on.
+kmp_int32
+__kmp_get_user_lock_owner(kmp_user_lock_p lck, kmp_uint32 seq)
+{
+ switch (seq) {
+ case lockseq_tas:
+ case lockseq_nested_tas:
+ return __kmp_get_tas_lock_owner((kmp_tas_lock_t *)lck);
+#if KMP_USE_FUTEX
+ case lockseq_futex:
+ case lockseq_nested_futex:
+ return __kmp_get_futex_lock_owner((kmp_futex_lock_t *)lck);
+#endif
+ case lockseq_ticket:
+ case lockseq_nested_ticket:
+ return __kmp_get_ticket_lock_owner((kmp_ticket_lock_t *)lck);
+ case lockseq_queuing:
+ case lockseq_nested_queuing:
+#if KMP_USE_ADAPTIVE_LOCKS
+ case lockseq_adaptive:
+#endif
+ return __kmp_get_queuing_lock_owner((kmp_queuing_lock_t *)lck);
+ case lockseq_drdpa:
+ case lockseq_nested_drdpa:
+ return __kmp_get_drdpa_lock_owner((kmp_drdpa_lock_t *)lck);
+ default:
+ return 0;
+ }
+}
+
+// Initializes data for dynamic user locks.
+void
+__kmp_init_dynamic_user_locks()
+{
+ // Initialize jump table for the lock functions
+ if (__kmp_env_consistency_check) {
+ __kmp_direct_set = direct_set_check;
+ __kmp_direct_unset = direct_unset_check;
+ __kmp_direct_test = direct_test_check;
+ __kmp_indirect_set = indirect_set_check;
+ __kmp_indirect_unset = indirect_unset_check;
+ __kmp_indirect_test = indirect_test_check;
+ }
+ else {
+ __kmp_direct_set = direct_set;
+ __kmp_direct_unset = direct_unset;
+ __kmp_direct_test = direct_test;
+ __kmp_indirect_set = indirect_set;
+ __kmp_indirect_unset = indirect_unset;
+ __kmp_indirect_test = indirect_test;
+ }
+
+ // Initialize lock index table
+ __kmp_i_lock_table.size = KMP_I_LOCK_CHUNK;
+ __kmp_i_lock_table.table = (kmp_indirect_lock_t **)__kmp_allocate(sizeof(kmp_indirect_lock_t *));
+ *(__kmp_i_lock_table.table) = (kmp_indirect_lock_t *)
+ __kmp_allocate(KMP_I_LOCK_CHUNK*sizeof(kmp_indirect_lock_t));
+ __kmp_i_lock_table.next = 0;
+
+ // Indirect lock size
+ __kmp_indirect_lock_size[locktag_ticket] = sizeof(kmp_ticket_lock_t);
+ __kmp_indirect_lock_size[locktag_queuing] = sizeof(kmp_queuing_lock_t);
+#if KMP_USE_ADAPTIVE_LOCKS
+ __kmp_indirect_lock_size[locktag_adaptive] = sizeof(kmp_adaptive_lock_t);
+#endif
+ __kmp_indirect_lock_size[locktag_drdpa] = sizeof(kmp_drdpa_lock_t);
+#if KMP_USE_TSX
+ __kmp_indirect_lock_size[locktag_rtm] = sizeof(kmp_queuing_lock_t);
+#endif
+ __kmp_indirect_lock_size[locktag_nested_tas] = sizeof(kmp_tas_lock_t);
+#if KMP_USE_FUTEX
+ __kmp_indirect_lock_size[locktag_nested_futex] = sizeof(kmp_futex_lock_t);
+#endif
+ __kmp_indirect_lock_size[locktag_nested_ticket] = sizeof(kmp_ticket_lock_t);
+ __kmp_indirect_lock_size[locktag_nested_queuing] = sizeof(kmp_queuing_lock_t);
+ __kmp_indirect_lock_size[locktag_nested_drdpa] = sizeof(kmp_drdpa_lock_t);
+
+ // Initialize lock accessor/modifier
+#define fill_jumps(table, expand, sep) { \
+ table[locktag##sep##ticket] = expand(ticket); \
+ table[locktag##sep##queuing] = expand(queuing); \
+ table[locktag##sep##drdpa] = expand(drdpa); \
+}
+
+#if KMP_USE_ADAPTIVE_LOCKS
+# define fill_table(table, expand) { \
+ fill_jumps(table, expand, _); \
+ table[locktag_adaptive] = expand(queuing); \
+ fill_jumps(table, expand, _nested_); \
+}
+#else
+# define fill_table(table, expand) { \
+ fill_jumps(table, expand, _); \
+ fill_jumps(table, expand, _nested_); \
+}
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+#define expand(l) (void (*)(kmp_user_lock_p, const ident_t *))__kmp_set_##l##_lock_location
+ fill_table(__kmp_indirect_set_location, expand);
+#undef expand
+#define expand(l) (void (*)(kmp_user_lock_p, kmp_lock_flags_t))__kmp_set_##l##_lock_flags
+ fill_table(__kmp_indirect_set_flags, expand);
+#undef expand
+#define expand(l) (const ident_t * (*)(kmp_user_lock_p))__kmp_get_##l##_lock_location
+ fill_table(__kmp_indirect_get_location, expand);
+#undef expand
+#define expand(l) (kmp_lock_flags_t (*)(kmp_user_lock_p))__kmp_get_##l##_lock_flags
+ fill_table(__kmp_indirect_get_flags, expand);
+#undef expand
+
+ __kmp_init_user_locks = TRUE;
+}
+
+// Clean up the lock table.
+void
+__kmp_cleanup_indirect_user_locks()
+{
+ kmp_lock_index_t i;
+ int k;
+
+ // Clean up locks in the pools first (they were already destroyed before going into the pools).
+ for (k = 0; k < KMP_NUM_I_LOCKS; ++k) {
+ kmp_indirect_lock_t *l = __kmp_indirect_lock_pool[k];
+ while (l != NULL) {
+ kmp_indirect_lock_t *ll = l;
+ l = (kmp_indirect_lock_t *)l->lock->pool.next;
+ KA_TRACE(20, ("__kmp_cleanup_indirect_user_locks: freeing %p from pool\n", ll));
+ __kmp_free(ll->lock);
+ ll->lock = NULL;
+ }
+ __kmp_indirect_lock_pool[k] = NULL;
+ }
+ // Clean up the remaining undestroyed locks.
+ for (i = 0; i < __kmp_i_lock_table.next; i++) {
+ kmp_indirect_lock_t *l = KMP_GET_I_LOCK(i);
+ if (l->lock != NULL) {
+ // Locks not destroyed explicitly need to be destroyed here.
+ KMP_I_LOCK_FUNC(l, destroy)(l->lock);
+ KA_TRACE(20, ("__kmp_cleanup_indirect_user_locks: destroy/freeing %p from table\n", l));
+ __kmp_free(l->lock);
+ }
+ }
+ // Free the table
+ for (i = 0; i < __kmp_i_lock_table.size / KMP_I_LOCK_CHUNK; i++)
+ __kmp_free(__kmp_i_lock_table.table[i]);
+ __kmp_free(__kmp_i_lock_table.table);
+
+ __kmp_init_user_locks = FALSE;
+}
+
+enum kmp_lock_kind __kmp_user_lock_kind = lk_default;
+int __kmp_num_locks_in_block = 1; // FIXME - tune this value
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+/* ------------------------------------------------------------------------ */
+/* user locks
+ *
+ * They are implemented as a table of function pointers which are set to the
+ * lock functions of the appropriate kind, once that has been determined.
+ */
+
+enum kmp_lock_kind __kmp_user_lock_kind = lk_default;
+
+size_t __kmp_base_user_lock_size = 0;
+size_t __kmp_user_lock_size = 0;
+
+kmp_int32 ( *__kmp_get_user_lock_owner_ )( kmp_user_lock_p lck ) = NULL;
+int ( *__kmp_acquire_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+
+int ( *__kmp_test_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+int ( *__kmp_release_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+void ( *__kmp_init_user_lock_with_checks_ )( kmp_user_lock_p lck ) = NULL;
+void ( *__kmp_destroy_user_lock_ )( kmp_user_lock_p lck ) = NULL;
+void ( *__kmp_destroy_user_lock_with_checks_ )( kmp_user_lock_p lck ) = NULL;
+int ( *__kmp_acquire_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+
+int ( *__kmp_test_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+int ( *__kmp_release_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid ) = NULL;
+void ( *__kmp_init_nested_user_lock_with_checks_ )( kmp_user_lock_p lck ) = NULL;
+void ( *__kmp_destroy_nested_user_lock_with_checks_ )( kmp_user_lock_p lck ) = NULL;
+
+int ( *__kmp_is_user_lock_initialized_ )( kmp_user_lock_p lck ) = NULL;
+const ident_t * ( *__kmp_get_user_lock_location_ )( kmp_user_lock_p lck ) = NULL;
+void ( *__kmp_set_user_lock_location_ )( kmp_user_lock_p lck, const ident_t *loc ) = NULL;
+kmp_lock_flags_t ( *__kmp_get_user_lock_flags_ )( kmp_user_lock_p lck ) = NULL;
+void ( *__kmp_set_user_lock_flags_ )( kmp_user_lock_p lck, kmp_lock_flags_t flags ) = NULL;
+
+void __kmp_set_user_lock_vptrs( kmp_lock_kind_t user_lock_kind )
+{
+ switch ( user_lock_kind ) {
+ case lk_default:
+ default:
+ KMP_ASSERT( 0 );
+
+ case lk_tas: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_tas_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_tas_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_tas_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(tas);
+ KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(tas);
+ }
+ else {
+ KMP_BIND_USER_LOCK(tas);
+ KMP_BIND_NESTED_USER_LOCK(tas);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_tas_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) ) NULL;
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) ) NULL;
+ }
+ break;
+
+#if KMP_USE_FUTEX
+
+ case lk_futex: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_futex_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_futex_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_futex_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(futex);
+ KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(futex);
+ }
+ else {
+ KMP_BIND_USER_LOCK(futex);
+ KMP_BIND_NESTED_USER_LOCK(futex);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_futex_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) ) NULL;
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) ) NULL;
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) ) NULL;
+ }
+ break;
+
+#endif // KMP_USE_FUTEX
+
+ case lk_ticket: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_ticket_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_ticket_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_ticket_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(ticket);
+ KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(ticket);
+ }
+ else {
+ KMP_BIND_USER_LOCK(ticket);
+ KMP_BIND_NESTED_USER_LOCK(ticket);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_ticket_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) )
+ ( &__kmp_is_ticket_lock_initialized );
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_ticket_lock_location );
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) )
+ ( &__kmp_set_ticket_lock_location );
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_ticket_lock_flags );
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) )
+ ( &__kmp_set_ticket_lock_flags );
+ }
+ break;
+
+ case lk_queuing: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_queuing_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_queuing_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(queuing);
+ KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(queuing);
+ }
+ else {
+ KMP_BIND_USER_LOCK(queuing);
+ KMP_BIND_NESTED_USER_LOCK(queuing);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_queuing_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) )
+ ( &__kmp_is_queuing_lock_initialized );
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_location );
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) )
+ ( &__kmp_set_queuing_lock_location );
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_flags );
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) )
+ ( &__kmp_set_queuing_lock_flags );
+ }
+ break;
+
+#if KMP_USE_ADAPTIVE_LOCKS
+ case lk_adaptive: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_adaptive_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_adaptive_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(adaptive);
+ }
+ else {
+ KMP_BIND_USER_LOCK(adaptive);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_adaptive_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) )
+ ( &__kmp_is_queuing_lock_initialized );
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_location );
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) )
+ ( &__kmp_set_queuing_lock_location );
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_queuing_lock_flags );
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) )
+ ( &__kmp_set_queuing_lock_flags );
+
+ }
+ break;
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+ case lk_drdpa: {
+ __kmp_base_user_lock_size = sizeof( kmp_base_drdpa_lock_t );
+ __kmp_user_lock_size = sizeof( kmp_drdpa_lock_t );
+
+ __kmp_get_user_lock_owner_ =
+ ( kmp_int32 ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_drdpa_lock_owner );
+
+ if ( __kmp_env_consistency_check ) {
+ KMP_BIND_USER_LOCK_WITH_CHECKS(drdpa);
+ KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(drdpa);
+ }
+ else {
+ KMP_BIND_USER_LOCK(drdpa);
+ KMP_BIND_NESTED_USER_LOCK(drdpa);
+ }
+
+ __kmp_destroy_user_lock_ =
+ ( void ( * )( kmp_user_lock_p ) )
+ ( &__kmp_destroy_drdpa_lock );
+
+ __kmp_is_user_lock_initialized_ =
+ ( int ( * )( kmp_user_lock_p ) )
+ ( &__kmp_is_drdpa_lock_initialized );
+
+ __kmp_get_user_lock_location_ =
+ ( const ident_t * ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_drdpa_lock_location );
+
+ __kmp_set_user_lock_location_ =
+ ( void ( * )( kmp_user_lock_p, const ident_t * ) )
+ ( &__kmp_set_drdpa_lock_location );
+
+ __kmp_get_user_lock_flags_ =
+ ( kmp_lock_flags_t ( * )( kmp_user_lock_p ) )
+ ( &__kmp_get_drdpa_lock_flags );
+
+ __kmp_set_user_lock_flags_ =
+ ( void ( * )( kmp_user_lock_p, kmp_lock_flags_t ) )
+ ( &__kmp_set_drdpa_lock_flags );
+ }
+ break;
+ }
+}
+
+
+// ----------------------------------------------------------------------------
+// User lock table & lock allocation
+
+kmp_lock_table_t __kmp_user_lock_table = { 1, 0, NULL };
+kmp_user_lock_p __kmp_lock_pool = NULL;
+
+// Lock block-allocation support.
+kmp_block_of_locks* __kmp_lock_blocks = NULL;
+int __kmp_num_locks_in_block = 1; // FIXME - tune this value
+
+static kmp_lock_index_t
+__kmp_lock_table_insert( kmp_user_lock_p lck )
+{
+ // Assume that kmp_global_lock is held upon entry/exit.
+ kmp_lock_index_t index;
+ if ( __kmp_user_lock_table.used >= __kmp_user_lock_table.allocated ) {
+ kmp_lock_index_t size;
+ kmp_user_lock_p *table;
+ // Reallocate lock table.
+ if ( __kmp_user_lock_table.allocated == 0 ) {
+ size = 1024;
+ }
+ else {
+ size = __kmp_user_lock_table.allocated * 2;
+ }
+ table = (kmp_user_lock_p *)__kmp_allocate( sizeof( kmp_user_lock_p ) * size );
+ KMP_MEMCPY( table + 1, __kmp_user_lock_table.table + 1, sizeof( kmp_user_lock_p ) * ( __kmp_user_lock_table.used - 1 ) );
+ table[ 0 ] = (kmp_user_lock_p)__kmp_user_lock_table.table;
+ // We cannot free the previous table now, since it may be in use by other
+ // threads. So save the pointer to the previous table in in the first element of the
+ // new table. All the tables will be organized into a list, and could be freed when
+ // library shutting down.
+ __kmp_user_lock_table.table = table;
+ __kmp_user_lock_table.allocated = size;
+ }
+ KMP_DEBUG_ASSERT( __kmp_user_lock_table.used < __kmp_user_lock_table.allocated );
+ index = __kmp_user_lock_table.used;
+ __kmp_user_lock_table.table[ index ] = lck;
+ ++ __kmp_user_lock_table.used;
+ return index;
+}
+
+static kmp_user_lock_p
+__kmp_lock_block_allocate()
+{
+ // Assume that kmp_global_lock is held upon entry/exit.
+ static int last_index = 0;
+ if ( ( last_index >= __kmp_num_locks_in_block )
+ || ( __kmp_lock_blocks == NULL ) ) {
+ // Restart the index.
+ last_index = 0;
+ // Need to allocate a new block.
+ KMP_DEBUG_ASSERT( __kmp_user_lock_size > 0 );
+ size_t space_for_locks = __kmp_user_lock_size * __kmp_num_locks_in_block;
+ char* buffer = (char*)__kmp_allocate( space_for_locks + sizeof( kmp_block_of_locks ) );
+ // Set up the new block.
+ kmp_block_of_locks *new_block = (kmp_block_of_locks *)(& buffer[space_for_locks]);
+ new_block->next_block = __kmp_lock_blocks;
+ new_block->locks = (void *)buffer;
+ // Publish the new block.
+ KMP_MB();
+ __kmp_lock_blocks = new_block;
+ }
+ kmp_user_lock_p ret = (kmp_user_lock_p)(& ( ( (char *)( __kmp_lock_blocks->locks ) )
+ [ last_index * __kmp_user_lock_size ] ) );
+ last_index++;
+ return ret;
+}
+
+//
+// Get memory for a lock. It may be freshly allocated memory or reused memory
+// from lock pool.
+//
+kmp_user_lock_p
+__kmp_user_lock_allocate( void **user_lock, kmp_int32 gtid,
+ kmp_lock_flags_t flags )
+{
+ kmp_user_lock_p lck;
+ kmp_lock_index_t index;
+ KMP_DEBUG_ASSERT( user_lock );
+
+ __kmp_acquire_lock( &__kmp_global_lock, gtid );
+
+ if ( __kmp_lock_pool == NULL ) {
+ // Lock pool is empty. Allocate new memory.
+ if ( __kmp_num_locks_in_block <= 1 ) { // Tune this cutoff point.
+ lck = (kmp_user_lock_p) __kmp_allocate( __kmp_user_lock_size );
+ }
+ else {
+ lck = __kmp_lock_block_allocate();
+ }
+
+ // Insert lock in the table so that it can be freed in __kmp_cleanup,
+ // and debugger has info on all allocated locks.
+ index = __kmp_lock_table_insert( lck );
+ }
+ else {
+ // Pick up lock from pool.
+ lck = __kmp_lock_pool;
+ index = __kmp_lock_pool->pool.index;
+ __kmp_lock_pool = __kmp_lock_pool->pool.next;
+ }
+
+ //
+ // We could potentially differentiate between nested and regular locks
+ // here, and do the lock table lookup for regular locks only.
+ //
+ if ( OMP_LOCK_T_SIZE < sizeof(void *) ) {
+ * ( (kmp_lock_index_t *) user_lock ) = index;
+ }
+ else {
+ * ( (kmp_user_lock_p *) user_lock ) = lck;
+ }
+
+ // mark the lock if it is critical section lock.
+ __kmp_set_user_lock_flags( lck, flags );
+
+ __kmp_release_lock( & __kmp_global_lock, gtid ); // AC: TODO: move this line upper
+
+ return lck;
+}
+
+// Put lock's memory to pool for reusing.
+void
+__kmp_user_lock_free( void **user_lock, kmp_int32 gtid, kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( user_lock != NULL );
+ KMP_DEBUG_ASSERT( lck != NULL );
+
+ __kmp_acquire_lock( & __kmp_global_lock, gtid );
+
+ lck->pool.next = __kmp_lock_pool;
+ __kmp_lock_pool = lck;
+ if ( OMP_LOCK_T_SIZE < sizeof(void *) ) {
+ kmp_lock_index_t index = * ( (kmp_lock_index_t *) user_lock );
+ KMP_DEBUG_ASSERT( 0 < index && index <= __kmp_user_lock_table.used );
+ lck->pool.index = index;
+ }
+
+ __kmp_release_lock( & __kmp_global_lock, gtid );
+}
+
+kmp_user_lock_p
+__kmp_lookup_user_lock( void **user_lock, char const *func )
+{
+ kmp_user_lock_p lck = NULL;
+
+ if ( __kmp_env_consistency_check ) {
+ if ( user_lock == NULL ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ }
+
+ if ( OMP_LOCK_T_SIZE < sizeof(void *) ) {
+ kmp_lock_index_t index = *( (kmp_lock_index_t *)user_lock );
+ if ( __kmp_env_consistency_check ) {
+ if ( ! ( 0 < index && index < __kmp_user_lock_table.used ) ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ }
+ KMP_DEBUG_ASSERT( 0 < index && index < __kmp_user_lock_table.used );
+ KMP_DEBUG_ASSERT( __kmp_user_lock_size > 0 );
+ lck = __kmp_user_lock_table.table[index];
+ }
+ else {
+ lck = *( (kmp_user_lock_p *)user_lock );
+ }
+
+ if ( __kmp_env_consistency_check ) {
+ if ( lck == NULL ) {
+ KMP_FATAL( LockIsUninitialized, func );
+ }
+ }
+
+ return lck;
+}
+
+void
+__kmp_cleanup_user_locks( void )
+{
+ //
+ // Reset lock pool. Do not worry about lock in the pool -- we will free
+ // them when iterating through lock table (it includes all the locks,
+ // dead or alive).
+ //
+ __kmp_lock_pool = NULL;
+
+#define IS_CRITICAL(lck) \
+ ( ( __kmp_get_user_lock_flags_ != NULL ) && \
+ ( ( *__kmp_get_user_lock_flags_ )( lck ) & kmp_lf_critical_section ) )
+
+ //
+ // Loop through lock table, free all locks.
+ //
+ // Do not free item [0], it is reserved for lock tables list.
+ //
+ // FIXME - we are iterating through a list of (pointers to) objects of
+ // type union kmp_user_lock, but we have no way of knowing whether the
+ // base type is currently "pool" or whatever the global user lock type
+ // is.
+ //
+ // We are relying on the fact that for all of the user lock types
+ // (except "tas"), the first field in the lock struct is the "initialized"
+ // field, which is set to the address of the lock object itself when
+ // the lock is initialized. When the union is of type "pool", the
+ // first field is a pointer to the next object in the free list, which
+ // will not be the same address as the object itself.
+ //
+ // This means that the check ( *__kmp_is_user_lock_initialized_ )( lck )
+ // will fail for "pool" objects on the free list. This must happen as
+ // the "location" field of real user locks overlaps the "index" field
+ // of "pool" objects.
+ //
+ // It would be better to run through the free list, and remove all "pool"
+ // objects from the lock table before executing this loop. However,
+ // "pool" objects do not always have their index field set (only on
+ // lin_32e), and I don't want to search the lock table for the address
+ // of every "pool" object on the free list.
+ //
+ while ( __kmp_user_lock_table.used > 1 ) {
+ const ident *loc;
+
+ //
+ // reduce __kmp_user_lock_table.used before freeing the lock,
+ // so that state of locks is consistent
+ //
+ kmp_user_lock_p lck = __kmp_user_lock_table.table[
+ --__kmp_user_lock_table.used ];
+
+ if ( ( __kmp_is_user_lock_initialized_ != NULL ) &&
+ ( *__kmp_is_user_lock_initialized_ )( lck ) ) {
+ //
+ // Issue a warning if: KMP_CONSISTENCY_CHECK AND lock is
+ // initialized AND it is NOT a critical section (user is not
+ // responsible for destroying criticals) AND we know source
+ // location to report.
+ //
+ if ( __kmp_env_consistency_check && ( ! IS_CRITICAL( lck ) ) &&
+ ( ( loc = __kmp_get_user_lock_location( lck ) ) != NULL ) &&
+ ( loc->psource != NULL ) ) {
+ kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 0 );
+ KMP_WARNING( CnsLockNotDestroyed, str_loc.file, str_loc.line );
+ __kmp_str_loc_free( &str_loc);
+ }
+
+#ifdef KMP_DEBUG
+ if ( IS_CRITICAL( lck ) ) {
+ KA_TRACE( 20, ("__kmp_cleanup_user_locks: free critical section lock %p (%p)\n", lck, *(void**)lck ) );
+ }
+ else {
+ KA_TRACE( 20, ("__kmp_cleanup_user_locks: free lock %p (%p)\n", lck, *(void**)lck ) );
+ }
+#endif // KMP_DEBUG
+
+ //
+ // Cleanup internal lock dynamic resources
+ // (for drdpa locks particularly).
+ //
+ __kmp_destroy_user_lock( lck );
+ }
+
+ //
+ // Free the lock if block allocation of locks is not used.
+ //
+ if ( __kmp_lock_blocks == NULL ) {
+ __kmp_free( lck );
+ }
+ }
+
+#undef IS_CRITICAL
+
+ //
+ // delete lock table(s).
+ //
+ kmp_user_lock_p *table_ptr = __kmp_user_lock_table.table;
+ __kmp_user_lock_table.table = NULL;
+ __kmp_user_lock_table.allocated = 0;
+
+ while ( table_ptr != NULL ) {
+ //
+ // In the first element we saved the pointer to the previous
+ // (smaller) lock table.
+ //
+ kmp_user_lock_p *next = (kmp_user_lock_p *)( table_ptr[ 0 ] );
+ __kmp_free( table_ptr );
+ table_ptr = next;
+ }
+
+ //
+ // Free buffers allocated for blocks of locks.
+ //
+ kmp_block_of_locks_t *block_ptr = __kmp_lock_blocks;
+ __kmp_lock_blocks = NULL;
+
+ while ( block_ptr != NULL ) {
+ kmp_block_of_locks_t *next = block_ptr->next_block;
+ __kmp_free( block_ptr->locks );
+ //
+ // *block_ptr itself was allocated at the end of the locks vector.
+ //
+ block_ptr = next;
+ }
+
+ TCW_4(__kmp_init_user_locks, FALSE);
+}
+
+#endif // KMP_USE_DYNAMIC_LOCK
diff --git a/final/runtime/src/kmp_lock.h b/final/runtime/src/kmp_lock.h
new file mode 100644
index 0000000..4d0a2f2
--- /dev/null
+++ b/final/runtime/src/kmp_lock.h
@@ -0,0 +1,1320 @@
+/*
+ * kmp_lock.h -- lock header file
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_LOCK_H
+#define KMP_LOCK_H
+
+#include <limits.h> // CHAR_BIT
+#include <stddef.h> // offsetof
+
+#include "kmp_os.h"
+#include "kmp_debug.h"
+
+#ifdef __cplusplus
+#include <atomic>
+
+extern "C" {
+#endif // __cplusplus
+
+// ----------------------------------------------------------------------------
+// Have to copy these definitions from kmp.h because kmp.h cannot be included
+// due to circular dependencies. Will undef these at end of file.
+
+#define KMP_PAD(type, sz) (sizeof(type) + (sz - ((sizeof(type) - 1) % (sz)) - 1))
+#define KMP_GTID_DNE (-2)
+
+// Forward declaration of ident and ident_t
+
+struct ident;
+typedef struct ident ident_t;
+
+// End of copied code.
+// ----------------------------------------------------------------------------
+
+//
+// We need to know the size of the area we can assume that the compiler(s)
+// allocated for obects of type omp_lock_t and omp_nest_lock_t. The Intel
+// compiler always allocates a pointer-sized area, as does visual studio.
+//
+// gcc however, only allocates 4 bytes for regular locks, even on 64-bit
+// intel archs. It allocates at least 8 bytes for nested lock (more on
+// recent versions), but we are bounded by the pointer-sized chunks that
+// the Intel compiler allocates.
+//
+
+#if KMP_OS_LINUX && defined(KMP_GOMP_COMPAT)
+# define OMP_LOCK_T_SIZE sizeof(int)
+# define OMP_NEST_LOCK_T_SIZE sizeof(void *)
+#else
+# define OMP_LOCK_T_SIZE sizeof(void *)
+# define OMP_NEST_LOCK_T_SIZE sizeof(void *)
+#endif
+
+//
+// The Intel compiler allocates a 32-byte chunk for a critical section.
+// Both gcc and visual studio only allocate enough space for a pointer.
+// Sometimes we know that the space was allocated by the Intel compiler.
+//
+#define OMP_CRITICAL_SIZE sizeof(void *)
+#define INTEL_CRITICAL_SIZE 32
+
+//
+// lock flags
+//
+typedef kmp_uint32 kmp_lock_flags_t;
+
+#define kmp_lf_critical_section 1
+
+//
+// When a lock table is used, the indices are of kmp_lock_index_t
+//
+typedef kmp_uint32 kmp_lock_index_t;
+
+//
+// When memory allocated for locks are on the lock pool (free list),
+// it is treated as structs of this type.
+//
+struct kmp_lock_pool {
+ union kmp_user_lock *next;
+ kmp_lock_index_t index;
+};
+
+typedef struct kmp_lock_pool kmp_lock_pool_t;
+
+
+extern void __kmp_validate_locks( void );
+
+
+// ----------------------------------------------------------------------------
+//
+// There are 5 lock implementations:
+//
+// 1. Test and set locks.
+// 2. futex locks (Linux* OS on x86 and Intel(R) Many Integrated Core architecture)
+// 3. Ticket (Lamport bakery) locks.
+// 4. Queuing locks (with separate spin fields).
+// 5. DRPA (Dynamically Reconfigurable Distributed Polling Area) locks
+//
+// and 3 lock purposes:
+//
+// 1. Bootstrap locks -- Used for a few locks available at library startup-shutdown time.
+// These do not require non-negative global thread ID's.
+// 2. Internal RTL locks -- Used everywhere else in the RTL
+// 3. User locks (includes critical sections)
+//
+// ----------------------------------------------------------------------------
+
+
+// ============================================================================
+// Lock implementations.
+// ============================================================================
+
+
+// ----------------------------------------------------------------------------
+// Test and set locks.
+//
+// Non-nested test and set locks differ from the other lock kinds (except
+// futex) in that we use the memory allocated by the compiler for the lock,
+// rather than a pointer to it.
+//
+// On lin32, lin_32e, and win_32, the space allocated may be as small as 4
+// bytes, so we have to use a lock table for nested locks, and avoid accessing
+// the depth_locked field for non-nested locks.
+//
+// Information normally available to the tools, such as lock location,
+// lock usage (normal lock vs. critical section), etc. is not available with
+// test and set locks.
+// ----------------------------------------------------------------------------
+
+struct kmp_base_tas_lock {
+ volatile kmp_int32 poll; // 0 => unlocked
+ // locked: (gtid+1) of owning thread
+ kmp_int32 depth_locked; // depth locked, for nested locks only
+};
+
+typedef struct kmp_base_tas_lock kmp_base_tas_lock_t;
+
+union kmp_tas_lock {
+ kmp_base_tas_lock_t lk;
+ kmp_lock_pool_t pool; // make certain struct is large enough
+ double lk_align; // use worst case alignment
+ // no cache line padding
+};
+
+typedef union kmp_tas_lock kmp_tas_lock_t;
+
+//
+// Static initializer for test and set lock variables. Usage:
+// kmp_tas_lock_t xlock = KMP_TAS_LOCK_INITIALIZER( xlock );
+//
+#define KMP_TAS_LOCK_INITIALIZER( lock ) { { 0, 0 } }
+
+extern int __kmp_acquire_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_tas_lock( kmp_tas_lock_t *lck );
+extern void __kmp_destroy_tas_lock( kmp_tas_lock_t *lck );
+
+extern int __kmp_acquire_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_nested_tas_lock( kmp_tas_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_nested_tas_lock( kmp_tas_lock_t *lck );
+extern void __kmp_destroy_nested_tas_lock( kmp_tas_lock_t *lck );
+
+#define KMP_LOCK_RELEASED 1
+#define KMP_LOCK_STILL_HELD 0
+#define KMP_LOCK_ACQUIRED_FIRST 1
+#define KMP_LOCK_ACQUIRED_NEXT 0
+
+#define KMP_USE_FUTEX (KMP_OS_LINUX && !KMP_OS_CNK && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64))
+
+#if KMP_USE_FUTEX
+
+// ----------------------------------------------------------------------------
+// futex locks. futex locks are only available on Linux* OS.
+//
+// Like non-nested test and set lock, non-nested futex locks use the memory
+// allocated by the compiler for the lock, rather than a pointer to it.
+//
+// Information normally available to the tools, such as lock location,
+// lock usage (normal lock vs. critical section), etc. is not available with
+// test and set locks. With non-nested futex locks, the lock owner is not
+// even available.
+// ----------------------------------------------------------------------------
+
+struct kmp_base_futex_lock {
+ volatile kmp_int32 poll; // 0 => unlocked
+ // 2*(gtid+1) of owning thread, 0 if unlocked
+ // locked: (gtid+1) of owning thread
+ kmp_int32 depth_locked; // depth locked, for nested locks only
+};
+
+typedef struct kmp_base_futex_lock kmp_base_futex_lock_t;
+
+union kmp_futex_lock {
+ kmp_base_futex_lock_t lk;
+ kmp_lock_pool_t pool; // make certain struct is large enough
+ double lk_align; // use worst case alignment
+ // no cache line padding
+};
+
+typedef union kmp_futex_lock kmp_futex_lock_t;
+
+//
+// Static initializer for futex lock variables. Usage:
+// kmp_futex_lock_t xlock = KMP_FUTEX_LOCK_INITIALIZER( xlock );
+//
+#define KMP_FUTEX_LOCK_INITIALIZER( lock ) { { 0, 0 } }
+
+extern int __kmp_acquire_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_futex_lock( kmp_futex_lock_t *lck );
+extern void __kmp_destroy_futex_lock( kmp_futex_lock_t *lck );
+
+extern int __kmp_acquire_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_nested_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_nested_futex_lock( kmp_futex_lock_t *lck );
+extern void __kmp_destroy_nested_futex_lock( kmp_futex_lock_t *lck );
+
+#endif // KMP_USE_FUTEX
+
+
+// ----------------------------------------------------------------------------
+// Ticket locks.
+// ----------------------------------------------------------------------------
+
+#ifdef __cplusplus
+
+#ifdef _MSC_VER
+// MSVC won't allow use of std::atomic<> in a union since it has non-trivial copy constructor.
+
+struct kmp_base_ticket_lock {
+ // `initialized' must be the first entry in the lock data structure!
+ std::atomic_bool initialized;
+ volatile union kmp_ticket_lock *self; // points to the lock union
+ ident_t const * location; // Source code location of omp_init_lock().
+ std::atomic_uint next_ticket; // ticket number to give to next thread which acquires
+ std::atomic_uint now_serving; // ticket number for thread which holds the lock
+ std::atomic_int owner_id; // (gtid+1) of owning thread, 0 if unlocked
+ std::atomic_int depth_locked; // depth locked, for nested locks only
+ kmp_lock_flags_t flags; // lock specifics, e.g. critical section lock
+};
+#else
+struct kmp_base_ticket_lock {
+ // `initialized' must be the first entry in the lock data structure!
+ std::atomic<bool> initialized;
+ volatile union kmp_ticket_lock *self; // points to the lock union
+ ident_t const * location; // Source code location of omp_init_lock().
+ std::atomic<unsigned> next_ticket; // ticket number to give to next thread which acquires
+ std::atomic<unsigned> now_serving; // ticket number for thread which holds the lock
+ std::atomic<int> owner_id; // (gtid+1) of owning thread, 0 if unlocked
+ std::atomic<int> depth_locked; // depth locked, for nested locks only
+ kmp_lock_flags_t flags; // lock specifics, e.g. critical section lock
+};
+#endif
+
+#else // __cplusplus
+
+struct kmp_base_ticket_lock;
+
+#endif // !__cplusplus
+
+typedef struct kmp_base_ticket_lock kmp_base_ticket_lock_t;
+
+union KMP_ALIGN_CACHE kmp_ticket_lock {
+ kmp_base_ticket_lock_t lk; // This field must be first to allow static initializing.
+ kmp_lock_pool_t pool;
+ double lk_align; // use worst case alignment
+ char lk_pad[ KMP_PAD( kmp_base_ticket_lock_t, CACHE_LINE ) ];
+};
+
+typedef union kmp_ticket_lock kmp_ticket_lock_t;
+
+//
+// Static initializer for simple ticket lock variables. Usage:
+// kmp_ticket_lock_t xlock = KMP_TICKET_LOCK_INITIALIZER( xlock );
+// Note the macro argument. It is important to make var properly initialized.
+//
+#define KMP_TICKET_LOCK_INITIALIZER( lock ) { { ATOMIC_VAR_INIT(true), \
+ &(lock), \
+ NULL, \
+ ATOMIC_VAR_INIT(0U), \
+ ATOMIC_VAR_INIT(0U), \
+ ATOMIC_VAR_INIT(0), \
+ ATOMIC_VAR_INIT(-1) } }
+
+extern int __kmp_acquire_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_ticket_lock_with_cheks( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_ticket_lock( kmp_ticket_lock_t *lck );
+extern void __kmp_destroy_ticket_lock( kmp_ticket_lock_t *lck );
+
+extern int __kmp_acquire_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_nested_ticket_lock( kmp_ticket_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_nested_ticket_lock( kmp_ticket_lock_t *lck );
+extern void __kmp_destroy_nested_ticket_lock( kmp_ticket_lock_t *lck );
+
+
+// ----------------------------------------------------------------------------
+// Queuing locks.
+// ----------------------------------------------------------------------------
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+struct kmp_adaptive_lock_info;
+
+typedef struct kmp_adaptive_lock_info kmp_adaptive_lock_info_t;
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+
+struct kmp_adaptive_lock_statistics {
+ /* So we can get stats from locks that haven't been destroyed. */
+ kmp_adaptive_lock_info_t * next;
+ kmp_adaptive_lock_info_t * prev;
+
+ /* Other statistics */
+ kmp_uint32 successfulSpeculations;
+ kmp_uint32 hardFailedSpeculations;
+ kmp_uint32 softFailedSpeculations;
+ kmp_uint32 nonSpeculativeAcquires;
+ kmp_uint32 nonSpeculativeAcquireAttempts;
+ kmp_uint32 lemmingYields;
+};
+
+typedef struct kmp_adaptive_lock_statistics kmp_adaptive_lock_statistics_t;
+
+extern void __kmp_print_speculative_stats();
+extern void __kmp_init_speculative_stats();
+
+#endif // KMP_DEBUG_ADAPTIVE_LOCKS
+
+struct kmp_adaptive_lock_info
+{
+ /* Values used for adaptivity.
+ * Although these are accessed from multiple threads we don't access them atomically,
+ * because if we miss updates it probably doesn't matter much. (It just affects our
+ * decision about whether to try speculation on the lock).
+ */
+ kmp_uint32 volatile badness;
+ kmp_uint32 volatile acquire_attempts;
+ /* Parameters of the lock. */
+ kmp_uint32 max_badness;
+ kmp_uint32 max_soft_retries;
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+ kmp_adaptive_lock_statistics_t volatile stats;
+#endif
+};
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+
+struct kmp_base_queuing_lock {
+
+ // `initialized' must be the first entry in the lock data structure!
+ volatile union kmp_queuing_lock *initialized; // Points to the lock union if in initialized state.
+
+ ident_t const * location; // Source code location of omp_init_lock().
+
+ KMP_ALIGN( 8 ) // tail_id must be 8-byte aligned!
+
+ volatile kmp_int32 tail_id; // (gtid+1) of thread at tail of wait queue, 0 if empty
+ // Must be no padding here since head/tail used in 8-byte CAS
+ volatile kmp_int32 head_id; // (gtid+1) of thread at head of wait queue, 0 if empty
+ // Decl order assumes little endian
+ // bakery-style lock
+ volatile kmp_uint32 next_ticket; // ticket number to give to next thread which acquires
+ volatile kmp_uint32 now_serving; // ticket number for thread which holds the lock
+ volatile kmp_int32 owner_id; // (gtid+1) of owning thread, 0 if unlocked
+ kmp_int32 depth_locked; // depth locked, for nested locks only
+
+ kmp_lock_flags_t flags; // lock specifics, e.g. critical section lock
+};
+
+typedef struct kmp_base_queuing_lock kmp_base_queuing_lock_t;
+
+KMP_BUILD_ASSERT( offsetof( kmp_base_queuing_lock_t, tail_id ) % 8 == 0 );
+
+union KMP_ALIGN_CACHE kmp_queuing_lock {
+ kmp_base_queuing_lock_t lk; // This field must be first to allow static initializing.
+ kmp_lock_pool_t pool;
+ double lk_align; // use worst case alignment
+ char lk_pad[ KMP_PAD( kmp_base_queuing_lock_t, CACHE_LINE ) ];
+};
+
+typedef union kmp_queuing_lock kmp_queuing_lock_t;
+
+extern int __kmp_acquire_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_queuing_lock( kmp_queuing_lock_t *lck );
+extern void __kmp_destroy_queuing_lock( kmp_queuing_lock_t *lck );
+
+extern int __kmp_acquire_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_nested_queuing_lock( kmp_queuing_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_nested_queuing_lock( kmp_queuing_lock_t *lck );
+extern void __kmp_destroy_nested_queuing_lock( kmp_queuing_lock_t *lck );
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+// ----------------------------------------------------------------------------
+// Adaptive locks.
+// ----------------------------------------------------------------------------
+struct kmp_base_adaptive_lock {
+ kmp_base_queuing_lock qlk;
+ KMP_ALIGN(CACHE_LINE)
+ kmp_adaptive_lock_info_t adaptive; // Information for the speculative adaptive lock
+};
+
+typedef struct kmp_base_adaptive_lock kmp_base_adaptive_lock_t;
+
+union KMP_ALIGN_CACHE kmp_adaptive_lock {
+ kmp_base_adaptive_lock_t lk;
+ kmp_lock_pool_t pool;
+ double lk_align;
+ char lk_pad[ KMP_PAD(kmp_base_adaptive_lock_t, CACHE_LINE) ];
+};
+typedef union kmp_adaptive_lock kmp_adaptive_lock_t;
+
+# define GET_QLK_PTR(l) ((kmp_queuing_lock_t *) & (l)->lk.qlk)
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+// ----------------------------------------------------------------------------
+// DRDPA ticket locks.
+// ----------------------------------------------------------------------------
+
+struct kmp_base_drdpa_lock {
+ //
+ // All of the fields on the first cache line are only written when
+ // initializing or reconfiguring the lock. These are relatively rare
+ // operations, so data from the first cache line will usually stay
+ // resident in the cache of each thread trying to acquire the lock.
+ //
+ // initialized must be the first entry in the lock data structure!
+ //
+ KMP_ALIGN_CACHE
+
+ volatile union kmp_drdpa_lock * initialized; // points to the lock union if in initialized state
+ ident_t const * location; // Source code location of omp_init_lock().
+ volatile struct kmp_lock_poll {
+ kmp_uint64 poll;
+ } * volatile polls;
+ volatile kmp_uint64 mask; // is 2**num_polls-1 for mod op
+ kmp_uint64 cleanup_ticket; // thread with cleanup ticket
+ volatile struct kmp_lock_poll * old_polls; // will deallocate old_polls
+ kmp_uint32 num_polls; // must be power of 2
+
+ //
+ // next_ticket it needs to exist in a separate cache line, as it is
+ // invalidated every time a thread takes a new ticket.
+ //
+ KMP_ALIGN_CACHE
+
+ volatile kmp_uint64 next_ticket;
+
+ //
+ // now_serving is used to store our ticket value while we hold the lock.
+ // It has a slightly different meaning in the DRDPA ticket locks (where
+ // it is written by the acquiring thread) than it does in the simple
+ // ticket locks (where it is written by the releasing thread).
+ //
+ // Since now_serving is only read an written in the critical section,
+ // it is non-volatile, but it needs to exist on a separate cache line,
+ // as it is invalidated at every lock acquire.
+ //
+ // Likewise, the vars used for nested locks (owner_id and depth_locked)
+ // are only written by the thread owning the lock, so they are put in
+ // this cache line. owner_id is read by other threads, so it must be
+ // declared volatile.
+ //
+ KMP_ALIGN_CACHE
+
+ kmp_uint64 now_serving; // doesn't have to be volatile
+ volatile kmp_uint32 owner_id; // (gtid+1) of owning thread, 0 if unlocked
+ kmp_int32 depth_locked; // depth locked
+ kmp_lock_flags_t flags; // lock specifics, e.g. critical section lock
+};
+
+typedef struct kmp_base_drdpa_lock kmp_base_drdpa_lock_t;
+
+union KMP_ALIGN_CACHE kmp_drdpa_lock {
+ kmp_base_drdpa_lock_t lk; // This field must be first to allow static initializing. */
+ kmp_lock_pool_t pool;
+ double lk_align; // use worst case alignment
+ char lk_pad[ KMP_PAD( kmp_base_drdpa_lock_t, CACHE_LINE ) ];
+};
+
+typedef union kmp_drdpa_lock kmp_drdpa_lock_t;
+
+extern int __kmp_acquire_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_drdpa_lock( kmp_drdpa_lock_t *lck );
+extern void __kmp_destroy_drdpa_lock( kmp_drdpa_lock_t *lck );
+
+extern int __kmp_acquire_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_test_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern int __kmp_release_nested_drdpa_lock( kmp_drdpa_lock_t *lck, kmp_int32 gtid );
+extern void __kmp_init_nested_drdpa_lock( kmp_drdpa_lock_t *lck );
+extern void __kmp_destroy_nested_drdpa_lock( kmp_drdpa_lock_t *lck );
+
+
+// ============================================================================
+// Lock purposes.
+// ============================================================================
+
+
+// ----------------------------------------------------------------------------
+// Bootstrap locks.
+// ----------------------------------------------------------------------------
+
+// Bootstrap locks -- very few locks used at library initialization time.
+// Bootstrap locks are currently implemented as ticket locks.
+// They could also be implemented as test and set lock, but cannot be
+// implemented with other lock kinds as they require gtids which are not
+// available at initialization time.
+
+typedef kmp_ticket_lock_t kmp_bootstrap_lock_t;
+
+#define KMP_BOOTSTRAP_LOCK_INITIALIZER( lock ) KMP_TICKET_LOCK_INITIALIZER( (lock) )
+
+static inline int
+__kmp_acquire_bootstrap_lock( kmp_bootstrap_lock_t *lck )
+{
+ return __kmp_acquire_ticket_lock( lck, KMP_GTID_DNE );
+}
+
+static inline int
+__kmp_test_bootstrap_lock( kmp_bootstrap_lock_t *lck )
+{
+ return __kmp_test_ticket_lock( lck, KMP_GTID_DNE );
+}
+
+static inline void
+__kmp_release_bootstrap_lock( kmp_bootstrap_lock_t *lck )
+{
+ __kmp_release_ticket_lock( lck, KMP_GTID_DNE );
+}
+
+static inline void
+__kmp_init_bootstrap_lock( kmp_bootstrap_lock_t *lck )
+{
+ __kmp_init_ticket_lock( lck );
+}
+
+static inline void
+__kmp_destroy_bootstrap_lock( kmp_bootstrap_lock_t *lck )
+{
+ __kmp_destroy_ticket_lock( lck );
+}
+
+
+// ----------------------------------------------------------------------------
+// Internal RTL locks.
+// ----------------------------------------------------------------------------
+
+//
+// Internal RTL locks are also implemented as ticket locks, for now.
+//
+// FIXME - We should go through and figure out which lock kind works best for
+// each internal lock, and use the type declaration and function calls for
+// that explicit lock kind (and get rid of this section).
+//
+
+typedef kmp_ticket_lock_t kmp_lock_t;
+
+static inline int
+__kmp_acquire_lock( kmp_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_acquire_ticket_lock( lck, gtid );
+}
+
+static inline int
+__kmp_test_lock( kmp_lock_t *lck, kmp_int32 gtid )
+{
+ return __kmp_test_ticket_lock( lck, gtid );
+}
+
+static inline void
+__kmp_release_lock( kmp_lock_t *lck, kmp_int32 gtid )
+{
+ __kmp_release_ticket_lock( lck, gtid );
+}
+
+static inline void
+__kmp_init_lock( kmp_lock_t *lck )
+{
+ __kmp_init_ticket_lock( lck );
+}
+
+static inline void
+__kmp_destroy_lock( kmp_lock_t *lck )
+{
+ __kmp_destroy_ticket_lock( lck );
+}
+
+
+// ----------------------------------------------------------------------------
+// User locks.
+// ----------------------------------------------------------------------------
+
+//
+// Do not allocate objects of type union kmp_user_lock!!!
+// This will waste space unless __kmp_user_lock_kind == lk_drdpa.
+// Instead, check the value of __kmp_user_lock_kind and allocate objects of
+// the type of the appropriate union member, and cast their addresses to
+// kmp_user_lock_p.
+//
+
+enum kmp_lock_kind {
+ lk_default = 0,
+ lk_tas,
+#if KMP_USE_FUTEX
+ lk_futex,
+#endif
+#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
+ lk_hle,
+ lk_rtm,
+#endif
+ lk_ticket,
+ lk_queuing,
+ lk_drdpa,
+#if KMP_USE_ADAPTIVE_LOCKS
+ lk_adaptive
+#endif // KMP_USE_ADAPTIVE_LOCKS
+};
+
+typedef enum kmp_lock_kind kmp_lock_kind_t;
+
+extern kmp_lock_kind_t __kmp_user_lock_kind;
+
+union kmp_user_lock {
+ kmp_tas_lock_t tas;
+#if KMP_USE_FUTEX
+ kmp_futex_lock_t futex;
+#endif
+ kmp_ticket_lock_t ticket;
+ kmp_queuing_lock_t queuing;
+ kmp_drdpa_lock_t drdpa;
+#if KMP_USE_ADAPTIVE_LOCKS
+ kmp_adaptive_lock_t adaptive;
+#endif // KMP_USE_ADAPTIVE_LOCKS
+ kmp_lock_pool_t pool;
+};
+
+typedef union kmp_user_lock *kmp_user_lock_p;
+
+#if ! KMP_USE_DYNAMIC_LOCK
+
+extern size_t __kmp_base_user_lock_size;
+extern size_t __kmp_user_lock_size;
+
+extern kmp_int32 ( *__kmp_get_user_lock_owner_ )( kmp_user_lock_p lck );
+
+static inline kmp_int32
+__kmp_get_user_lock_owner( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_get_user_lock_owner_ != NULL );
+ return ( *__kmp_get_user_lock_owner_ )( lck );
+}
+
+extern int ( *__kmp_acquire_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+
+#define __kmp_acquire_user_lock_with_checks(lck,gtid) \
+ if (__kmp_user_lock_kind == lk_tas) { \
+ if ( __kmp_env_consistency_check ) { \
+ char const * const func = "omp_set_lock"; \
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE ) \
+ && lck->tas.lk.depth_locked != -1 ) { \
+ KMP_FATAL( LockNestableUsedAsSimple, func ); \
+ } \
+ if ( ( gtid >= 0 ) && ( lck->tas.lk.poll - 1 == gtid ) ) { \
+ KMP_FATAL( LockIsAlreadyOwned, func ); \
+ } \
+ } \
+ if ( ( lck->tas.lk.poll != 0 ) || \
+ ( ! KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) ) ) { \
+ kmp_uint32 spins; \
+ KMP_FSYNC_PREPARE( lck ); \
+ KMP_INIT_YIELD( spins ); \
+ if ( TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc) ) { \
+ KMP_YIELD( TRUE ); \
+ } else { \
+ KMP_YIELD_SPIN( spins ); \
+ } \
+ while ( ( lck->tas.lk.poll != 0 ) || \
+ ( ! KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) ) ) { \
+ if ( TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc) ) { \
+ KMP_YIELD( TRUE ); \
+ } else { \
+ KMP_YIELD_SPIN( spins ); \
+ } \
+ } \
+ } \
+ KMP_FSYNC_ACQUIRED( lck ); \
+ } else { \
+ KMP_DEBUG_ASSERT( __kmp_acquire_user_lock_with_checks_ != NULL ); \
+ ( *__kmp_acquire_user_lock_with_checks_ )( lck, gtid ); \
+ }
+
+#else
+static inline int
+__kmp_acquire_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( __kmp_acquire_user_lock_with_checks_ != NULL );
+ return ( *__kmp_acquire_user_lock_with_checks_ )( lck, gtid );
+}
+#endif
+
+extern int ( *__kmp_test_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+
+#include "kmp_i18n.h" /* AC: KMP_FATAL definition */
+extern int __kmp_env_consistency_check; /* AC: copy from kmp.h here */
+static inline int
+__kmp_test_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ if ( __kmp_user_lock_kind == lk_tas ) {
+ if ( __kmp_env_consistency_check ) {
+ char const * const func = "omp_test_lock";
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_LOCK_T_SIZE )
+ && lck->tas.lk.depth_locked != -1 ) {
+ KMP_FATAL( LockNestableUsedAsSimple, func );
+ }
+ }
+ return ( ( lck->tas.lk.poll == 0 ) &&
+ KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) );
+ } else {
+ KMP_DEBUG_ASSERT( __kmp_test_user_lock_with_checks_ != NULL );
+ return ( *__kmp_test_user_lock_with_checks_ )( lck, gtid );
+ }
+}
+#else
+static inline int
+__kmp_test_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( __kmp_test_user_lock_with_checks_ != NULL );
+ return ( *__kmp_test_user_lock_with_checks_ )( lck, gtid );
+}
+#endif
+
+extern int ( *__kmp_release_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+static inline void
+__kmp_release_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( __kmp_release_user_lock_with_checks_ != NULL );
+ ( *__kmp_release_user_lock_with_checks_ ) ( lck, gtid );
+}
+
+extern void ( *__kmp_init_user_lock_with_checks_ )( kmp_user_lock_p lck );
+
+static inline void
+__kmp_init_user_lock_with_checks( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_user_lock_with_checks_ != NULL );
+ ( *__kmp_init_user_lock_with_checks_ )( lck );
+}
+
+//
+// We need a non-checking version of destroy lock for when the RTL is
+// doing the cleanup as it can't always tell if the lock is nested or not.
+//
+extern void ( *__kmp_destroy_user_lock_ )( kmp_user_lock_p lck );
+
+static inline void
+__kmp_destroy_user_lock( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_destroy_user_lock_ != NULL );
+ ( *__kmp_destroy_user_lock_ )( lck );
+}
+
+extern void ( *__kmp_destroy_user_lock_with_checks_ )( kmp_user_lock_p lck );
+
+static inline void
+__kmp_destroy_user_lock_with_checks( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_destroy_user_lock_with_checks_ != NULL );
+ ( *__kmp_destroy_user_lock_with_checks_ )( lck );
+}
+
+extern int ( *__kmp_acquire_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64)
+
+#define __kmp_acquire_nested_user_lock_with_checks(lck,gtid,depth) \
+ if (__kmp_user_lock_kind == lk_tas) { \
+ if ( __kmp_env_consistency_check ) { \
+ char const * const func = "omp_set_nest_lock"; \
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_NEST_LOCK_T_SIZE ) \
+ && lck->tas.lk.depth_locked == -1 ) { \
+ KMP_FATAL( LockSimpleUsedAsNestable, func ); \
+ } \
+ } \
+ if ( lck->tas.lk.poll - 1 == gtid ) { \
+ lck->tas.lk.depth_locked += 1; \
+ *depth = KMP_LOCK_ACQUIRED_NEXT; \
+ } else { \
+ if ( ( lck->tas.lk.poll != 0 ) || \
+ ( ! KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) ) ) { \
+ kmp_uint32 spins; \
+ KMP_FSYNC_PREPARE( lck ); \
+ KMP_INIT_YIELD( spins ); \
+ if ( TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc) ) { \
+ KMP_YIELD( TRUE ); \
+ } else { \
+ KMP_YIELD_SPIN( spins ); \
+ } \
+ while ( ( lck->tas.lk.poll != 0 ) || \
+ ( ! KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) ) ) { \
+ if ( TCR_4(__kmp_nth) > (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc) ) { \
+ KMP_YIELD( TRUE ); \
+ } else { \
+ KMP_YIELD_SPIN( spins ); \
+ } \
+ } \
+ } \
+ lck->tas.lk.depth_locked = 1; \
+ *depth = KMP_LOCK_ACQUIRED_FIRST; \
+ } \
+ KMP_FSYNC_ACQUIRED( lck ); \
+ } else { \
+ KMP_DEBUG_ASSERT( __kmp_acquire_nested_user_lock_with_checks_ != NULL ); \
+ *depth = ( *__kmp_acquire_nested_user_lock_with_checks_ )( lck, gtid ); \
+ }
+
+#else
+static inline void
+__kmp_acquire_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid, int* depth )
+{
+ KMP_DEBUG_ASSERT( __kmp_acquire_nested_user_lock_with_checks_ != NULL );
+ *depth = ( *__kmp_acquire_nested_user_lock_with_checks_ )( lck, gtid );
+}
+#endif
+
+extern int ( *__kmp_test_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64)
+static inline int
+__kmp_test_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ if ( __kmp_user_lock_kind == lk_tas ) {
+ int retval;
+ if ( __kmp_env_consistency_check ) {
+ char const * const func = "omp_test_nest_lock";
+ if ( ( sizeof ( kmp_tas_lock_t ) <= OMP_NEST_LOCK_T_SIZE )
+ && lck->tas.lk.depth_locked == -1 ) {
+ KMP_FATAL( LockSimpleUsedAsNestable, func );
+ }
+ }
+ KMP_DEBUG_ASSERT( gtid >= 0 );
+ if ( lck->tas.lk.poll - 1 == gtid ) { /* __kmp_get_tas_lock_owner( lck ) == gtid */
+ return ++lck->tas.lk.depth_locked; /* same owner, depth increased */
+ }
+ retval = ( ( lck->tas.lk.poll == 0 ) &&
+ KMP_COMPARE_AND_STORE_ACQ32( &(lck->tas.lk.poll), 0, gtid + 1 ) );
+ if ( retval ) {
+ KMP_MB();
+ lck->tas.lk.depth_locked = 1;
+ }
+ return retval;
+ } else {
+ KMP_DEBUG_ASSERT( __kmp_test_nested_user_lock_with_checks_ != NULL );
+ return ( *__kmp_test_nested_user_lock_with_checks_ )( lck, gtid );
+ }
+}
+#else
+static inline int
+__kmp_test_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( __kmp_test_nested_user_lock_with_checks_ != NULL );
+ return ( *__kmp_test_nested_user_lock_with_checks_ )( lck, gtid );
+}
+#endif
+
+extern int ( *__kmp_release_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
+
+static inline int
+__kmp_release_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
+{
+ KMP_DEBUG_ASSERT( __kmp_release_nested_user_lock_with_checks_ != NULL );
+ return ( *__kmp_release_nested_user_lock_with_checks_ )( lck, gtid );
+}
+
+extern void ( *__kmp_init_nested_user_lock_with_checks_ )( kmp_user_lock_p lck );
+
+static inline void __kmp_init_nested_user_lock_with_checks( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_nested_user_lock_with_checks_ != NULL );
+ ( *__kmp_init_nested_user_lock_with_checks_ )( lck );
+}
+
+extern void ( *__kmp_destroy_nested_user_lock_with_checks_ )( kmp_user_lock_p lck );
+
+static inline void
+__kmp_destroy_nested_user_lock_with_checks( kmp_user_lock_p lck )
+{
+ KMP_DEBUG_ASSERT( __kmp_destroy_nested_user_lock_with_checks_ != NULL );
+ ( *__kmp_destroy_nested_user_lock_with_checks_ )( lck );
+}
+
+//
+// user lock functions which do not necessarily exist for all lock kinds.
+//
+// The "set" functions usually have wrapper routines that check for a NULL set
+// function pointer and call it if non-NULL.
+//
+// In some cases, it makes sense to have a "get" wrapper function check for a
+// NULL get function pointer and return NULL / invalid value / error code if
+// the function pointer is NULL.
+//
+// In other cases, the calling code really should differentiate between an
+// unimplemented function and one that is implemented but returning NULL /
+// invalied value. If this is the case, no get function wrapper exists.
+//
+
+extern int ( *__kmp_is_user_lock_initialized_ )( kmp_user_lock_p lck );
+
+// no set function; fields set durining local allocation
+
+extern const ident_t * ( *__kmp_get_user_lock_location_ )( kmp_user_lock_p lck );
+
+static inline const ident_t *
+__kmp_get_user_lock_location( kmp_user_lock_p lck )
+{
+ if ( __kmp_get_user_lock_location_ != NULL ) {
+ return ( *__kmp_get_user_lock_location_ )( lck );
+ }
+ else {
+ return NULL;
+ }
+}
+
+extern void ( *__kmp_set_user_lock_location_ )( kmp_user_lock_p lck, const ident_t *loc );
+
+static inline void
+__kmp_set_user_lock_location( kmp_user_lock_p lck, const ident_t *loc )
+{
+ if ( __kmp_set_user_lock_location_ != NULL ) {
+ ( *__kmp_set_user_lock_location_ )( lck, loc );
+ }
+}
+
+extern kmp_lock_flags_t ( *__kmp_get_user_lock_flags_ )( kmp_user_lock_p lck );
+
+extern void ( *__kmp_set_user_lock_flags_ )( kmp_user_lock_p lck, kmp_lock_flags_t flags );
+
+static inline void
+__kmp_set_user_lock_flags( kmp_user_lock_p lck, kmp_lock_flags_t flags )
+{
+ if ( __kmp_set_user_lock_flags_ != NULL ) {
+ ( *__kmp_set_user_lock_flags_ )( lck, flags );
+ }
+}
+
+//
+// The fuction which sets up all of the vtbl pointers for kmp_user_lock_t.
+//
+extern void __kmp_set_user_lock_vptrs( kmp_lock_kind_t user_lock_kind );
+
+//
+// Macros for binding user lock functions.
+//
+#define KMP_BIND_USER_LOCK_TEMPLATE(nest, kind, suffix) { \
+ __kmp_acquire##nest##user_lock_with_checks_ = ( int (*)( kmp_user_lock_p, kmp_int32 ) ) \
+ __kmp_acquire##nest##kind##_##suffix; \
+ __kmp_release##nest##user_lock_with_checks_ = ( int (*)( kmp_user_lock_p, kmp_int32 ) ) \
+ __kmp_release##nest##kind##_##suffix; \
+ __kmp_test##nest##user_lock_with_checks_ = ( int (*)( kmp_user_lock_p, kmp_int32 ) ) \
+ __kmp_test##nest##kind##_##suffix; \
+ __kmp_init##nest##user_lock_with_checks_ = ( void (*)( kmp_user_lock_p ) ) \
+ __kmp_init##nest##kind##_##suffix; \
+ __kmp_destroy##nest##user_lock_with_checks_ = ( void (*)( kmp_user_lock_p ) ) \
+ __kmp_destroy##nest##kind##_##suffix; \
+}
+
+#define KMP_BIND_USER_LOCK(kind) KMP_BIND_USER_LOCK_TEMPLATE(_, kind, lock)
+#define KMP_BIND_USER_LOCK_WITH_CHECKS(kind) KMP_BIND_USER_LOCK_TEMPLATE(_, kind, lock_with_checks)
+#define KMP_BIND_NESTED_USER_LOCK(kind) KMP_BIND_USER_LOCK_TEMPLATE(_nested_, kind, lock)
+#define KMP_BIND_NESTED_USER_LOCK_WITH_CHECKS(kind) KMP_BIND_USER_LOCK_TEMPLATE(_nested_, kind, lock_with_checks)
+
+// ----------------------------------------------------------------------------
+// User lock table & lock allocation
+// ----------------------------------------------------------------------------
+
+/*
+ On 64-bit Linux* OS (and OS X*) GNU compiler allocates only 4 bytems memory for lock variable, which
+ is not enough to store a pointer, so we have to use lock indexes instead of pointers and
+ maintain lock table to map indexes to pointers.
+
+
+ Note: The first element of the table is not a pointer to lock! It is a pointer to previously
+ allocated table (or NULL if it is the first table).
+
+ Usage:
+
+ if ( OMP_LOCK_T_SIZE < sizeof( <lock> ) ) { // or OMP_NEST_LOCK_T_SIZE
+ Lock table is fully utilized. User locks are indexes, so table is
+ used on user lock operation.
+ Note: it may be the case (lin_32) that we don't need to use a lock
+ table for regular locks, but do need the table for nested locks.
+ }
+ else {
+ Lock table initialized but not actually used.
+ }
+*/
+
+struct kmp_lock_table {
+ kmp_lock_index_t used; // Number of used elements
+ kmp_lock_index_t allocated; // Number of allocated elements
+ kmp_user_lock_p * table; // Lock table.
+};
+
+typedef struct kmp_lock_table kmp_lock_table_t;
+
+extern kmp_lock_table_t __kmp_user_lock_table;
+extern kmp_user_lock_p __kmp_lock_pool;
+
+struct kmp_block_of_locks {
+ struct kmp_block_of_locks * next_block;
+ void * locks;
+};
+
+typedef struct kmp_block_of_locks kmp_block_of_locks_t;
+
+extern kmp_block_of_locks_t *__kmp_lock_blocks;
+extern int __kmp_num_locks_in_block;
+
+extern kmp_user_lock_p __kmp_user_lock_allocate( void **user_lock, kmp_int32 gtid, kmp_lock_flags_t flags );
+extern void __kmp_user_lock_free( void **user_lock, kmp_int32 gtid, kmp_user_lock_p lck );
+extern kmp_user_lock_p __kmp_lookup_user_lock( void **user_lock, char const *func );
+extern void __kmp_cleanup_user_locks();
+
+#define KMP_CHECK_USER_LOCK_INIT() \
+ { \
+ if ( ! TCR_4( __kmp_init_user_locks ) ) { \
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock ); \
+ if ( ! TCR_4( __kmp_init_user_locks ) ) { \
+ TCW_4( __kmp_init_user_locks, TRUE ); \
+ } \
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock ); \
+ } \
+ }
+
+#endif // KMP_USE_DYNAMIC_LOCK
+
+#undef KMP_PAD
+#undef KMP_GTID_DNE
+
+#if KMP_USE_DYNAMIC_LOCK
+
+//
+// KMP_USE_DYNAMIC_LOCK enables dynamic dispatch of lock functions without breaking the current
+// compatibility. Essential functionality of this new code is dynamic dispatch, but it also
+// implements (or enables implementation of) hinted user lock and critical section which will be
+// part of OMP 4.5 soon.
+//
+// Lock type can be decided at creation time (i.e., lock initialization), and subsequent lock
+// function call on the created lock object requires type extraction and call through jump table
+// using the extracted type. This type information is stored in two different ways depending on
+// the size of the lock object, and we differentiate lock types by this size requirement - direct
+// and indirect locks.
+//
+// Direct locks:
+// A direct lock object fits into the space created by the compiler for an omp_lock_t object, and
+// TAS/Futex lock falls into this category. We use low one byte of the lock object as the storage
+// for the lock type, and appropriate bit operation is required to access the data meaningful to
+// the lock algorithms. Also, to differentiate direct lock from indirect lock, 1 is written to LSB
+// of the lock object. The newly introduced "hle" lock is also a direct lock.
+//
+// Indirect locks:
+// An indirect lock object requires more space than the compiler-generated space, and it should be
+// allocated from heap. Depending on the size of the compiler-generated space for the lock (i.e.,
+// size of omp_lock_t), this omp_lock_t object stores either the address of the heap-allocated
+// indirect lock (void * fits in the object) or an index to the indirect lock table entry that
+// holds the address. Ticket/Queuing/DRDPA/Adaptive lock falls into this category, and the newly
+// introduced "rtm" lock is also an indirect lock which was implemented on top of the Queuing lock.
+// When the omp_lock_t object holds an index (not lock address), 0 is written to LSB to
+// differentiate the lock from a direct lock, and the remaining part is the actual index to the
+// indirect lock table.
+//
+
+#include <stdint.h> // for uintptr_t
+
+// Shortcuts
+#define KMP_USE_INLINED_TAS (KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)) && 1
+#define KMP_USE_INLINED_FUTEX KMP_USE_FUTEX && 0
+
+// List of lock definitions; all nested locks are indirect locks.
+// hle lock is xchg lock prefixed with XACQUIRE/XRELEASE.
+// All nested locks are indirect lock types.
+#if KMP_USE_TSX
+# if KMP_USE_FUTEX
+# define KMP_FOREACH_D_LOCK(m, a) m(tas, a) m(futex, a) m(hle, a)
+# define KMP_FOREACH_I_LOCK(m, a) m(ticket, a) m(queuing, a) m(adaptive, a) m(drdpa, a) m(rtm, a) \
+ m(nested_tas, a) m(nested_futex, a) m(nested_ticket, a) \
+ m(nested_queuing, a) m(nested_drdpa, a)
+# else
+# define KMP_FOREACH_D_LOCK(m, a) m(tas, a) m(hle, a)
+# define KMP_FOREACH_I_LOCK(m, a) m(ticket, a) m(queuing, a) m(adaptive, a) m(drdpa, a) m(rtm, a) \
+ m(nested_tas, a) m(nested_ticket, a) \
+ m(nested_queuing, a) m(nested_drdpa, a)
+# endif // KMP_USE_FUTEX
+# define KMP_LAST_D_LOCK lockseq_hle
+#else
+# if KMP_USE_FUTEX
+# define KMP_FOREACH_D_LOCK(m, a) m(tas, a) m(futex, a)
+# define KMP_FOREACH_I_LOCK(m, a) m(ticket, a) m(queuing, a) m(drdpa, a) \
+ m(nested_tas, a) m(nested_futex, a) m(nested_ticket, a) \
+ m(nested_queuing, a) m(nested_drdpa, a)
+# define KMP_LAST_D_LOCK lockseq_futex
+# else
+# define KMP_FOREACH_D_LOCK(m, a) m(tas, a)
+# define KMP_FOREACH_I_LOCK(m, a) m(ticket, a) m(queuing, a) m(drdpa, a) \
+ m(nested_tas, a) m(nested_ticket, a) \
+ m(nested_queuing, a) m(nested_drdpa, a)
+# define KMP_LAST_D_LOCK lockseq_tas
+# endif // KMP_USE_FUTEX
+#endif // KMP_USE_TSX
+
+// Information used in dynamic dispatch
+#define KMP_LOCK_SHIFT 8 // number of low bits to be used as tag for direct locks
+#define KMP_FIRST_D_LOCK lockseq_tas
+#define KMP_FIRST_I_LOCK lockseq_ticket
+#define KMP_LAST_I_LOCK lockseq_nested_drdpa
+#define KMP_NUM_I_LOCKS (locktag_nested_drdpa+1) // number of indirect lock types
+
+// Base type for dynamic locks.
+typedef kmp_uint32 kmp_dyna_lock_t;
+
+// Lock sequence that enumerates all lock kinds.
+// Always make this enumeration consistent with kmp_lockseq_t in the include directory.
+typedef enum {
+ lockseq_indirect = 0,
+#define expand_seq(l,a) lockseq_##l,
+ KMP_FOREACH_D_LOCK(expand_seq, 0)
+ KMP_FOREACH_I_LOCK(expand_seq, 0)
+#undef expand_seq
+} kmp_dyna_lockseq_t;
+
+// Enumerates indirect lock tags.
+typedef enum {
+#define expand_tag(l,a) locktag_##l,
+ KMP_FOREACH_I_LOCK(expand_tag, 0)
+#undef expand_tag
+} kmp_indirect_locktag_t;
+
+// Utility macros that extract information from lock sequences.
+#define KMP_IS_D_LOCK(seq) ((seq) >= KMP_FIRST_D_LOCK && (seq) <= KMP_LAST_D_LOCK)
+#define KMP_IS_I_LOCK(seq) ((seq) >= KMP_FIRST_I_LOCK && (seq) <= KMP_LAST_I_LOCK)
+#define KMP_GET_I_TAG(seq) (kmp_indirect_locktag_t)((seq) - KMP_FIRST_I_LOCK)
+#define KMP_GET_D_TAG(seq) ((seq)<<1 | 1)
+
+// Enumerates direct lock tags starting from indirect tag.
+typedef enum {
+#define expand_tag(l,a) locktag_##l = KMP_GET_D_TAG(lockseq_##l),
+ KMP_FOREACH_D_LOCK(expand_tag, 0)
+#undef expand_tag
+} kmp_direct_locktag_t;
+
+// Indirect lock type
+typedef struct {
+ kmp_user_lock_p lock;
+ kmp_indirect_locktag_t type;
+} kmp_indirect_lock_t;
+
+// Function tables for direct locks. Set/unset/test differentiate functions with/without consistency checking.
+extern void (*__kmp_direct_init[])(kmp_dyna_lock_t *, kmp_dyna_lockseq_t);
+extern void (*__kmp_direct_destroy[])(kmp_dyna_lock_t *);
+extern void (*(*__kmp_direct_set))(kmp_dyna_lock_t *, kmp_int32);
+extern int (*(*__kmp_direct_unset))(kmp_dyna_lock_t *, kmp_int32);
+extern int (*(*__kmp_direct_test))(kmp_dyna_lock_t *, kmp_int32);
+
+// Function tables for indirect locks. Set/unset/test differentiate functions with/withuot consistency checking.
+extern void (*__kmp_indirect_init[])(kmp_user_lock_p);
+extern void (*__kmp_indirect_destroy[])(kmp_user_lock_p);
+extern void (*(*__kmp_indirect_set))(kmp_user_lock_p, kmp_int32);
+extern int (*(*__kmp_indirect_unset))(kmp_user_lock_p, kmp_int32);
+extern int (*(*__kmp_indirect_test))(kmp_user_lock_p, kmp_int32);
+
+// Extracts direct lock tag from a user lock pointer
+#define KMP_EXTRACT_D_TAG(l) (*((kmp_dyna_lock_t *)(l)) & ((1<<KMP_LOCK_SHIFT)-1) & -(*((kmp_dyna_lock_t *)(l)) & 1))
+
+// Extracts indirect lock index from a user lock pointer
+#define KMP_EXTRACT_I_INDEX(l) (*(kmp_lock_index_t *)(l) >> 1)
+
+// Returns function pointer to the direct lock function with l (kmp_dyna_lock_t *) and op (operation type).
+#define KMP_D_LOCK_FUNC(l, op) __kmp_direct_##op[KMP_EXTRACT_D_TAG(l)]
+
+// Returns function pointer to the indirect lock function with l (kmp_indirect_lock_t *) and op (operation type).
+#define KMP_I_LOCK_FUNC(l, op) __kmp_indirect_##op[((kmp_indirect_lock_t *)(l))->type]
+
+// Initializes a direct lock with the given lock pointer and lock sequence.
+#define KMP_INIT_D_LOCK(l, seq) __kmp_direct_init[KMP_GET_D_TAG(seq)]((kmp_dyna_lock_t *)l, seq)
+
+// Initializes an indirect lock with the given lock pointer and lock sequence.
+#define KMP_INIT_I_LOCK(l, seq) __kmp_direct_init[0]((kmp_dyna_lock_t *)(l), seq)
+
+// Returns "free" lock value for the given lock type.
+#define KMP_LOCK_FREE(type) (locktag_##type)
+
+// Returns "busy" lock value for the given lock teyp.
+#define KMP_LOCK_BUSY(v, type) ((v)<<KMP_LOCK_SHIFT | locktag_##type)
+
+// Returns lock value after removing (shifting) lock tag.
+#define KMP_LOCK_STRIP(v) ((v)>>KMP_LOCK_SHIFT)
+
+// Initializes global states and data structures for managing dynamic user locks.
+extern void __kmp_init_dynamic_user_locks();
+
+// Allocates and returns an indirect lock with the given indirect lock tag.
+extern kmp_indirect_lock_t * __kmp_allocate_indirect_lock(void **, kmp_int32, kmp_indirect_locktag_t);
+
+// Cleans up global states and data structures for managing dynamic user locks.
+extern void __kmp_cleanup_indirect_user_locks();
+
+// Default user lock sequence when not using hinted locks.
+extern kmp_dyna_lockseq_t __kmp_user_lock_seq;
+
+// Jump table for "set lock location", available only for indirect locks.
+extern void (*__kmp_indirect_set_location[KMP_NUM_I_LOCKS])(kmp_user_lock_p, const ident_t *);
+#define KMP_SET_I_LOCK_LOCATION(lck, loc) { \
+ if (__kmp_indirect_set_location[(lck)->type] != NULL) \
+ __kmp_indirect_set_location[(lck)->type]((lck)->lock, loc); \
+}
+
+// Jump table for "set lock flags", available only for indirect locks.
+extern void (*__kmp_indirect_set_flags[KMP_NUM_I_LOCKS])(kmp_user_lock_p, kmp_lock_flags_t);
+#define KMP_SET_I_LOCK_FLAGS(lck, flag) { \
+ if (__kmp_indirect_set_flags[(lck)->type] != NULL) \
+ __kmp_indirect_set_flags[(lck)->type]((lck)->lock, flag); \
+}
+
+// Jump table for "get lock location", available only for indirect locks.
+extern const ident_t * (*__kmp_indirect_get_location[KMP_NUM_I_LOCKS])(kmp_user_lock_p);
+#define KMP_GET_I_LOCK_LOCATION(lck) ( __kmp_indirect_get_location[(lck)->type] != NULL \
+ ? __kmp_indirect_get_location[(lck)->type]((lck)->lock) \
+ : NULL )
+
+// Jump table for "get lock flags", available only for indirect locks.
+extern kmp_lock_flags_t (*__kmp_indirect_get_flags[KMP_NUM_I_LOCKS])(kmp_user_lock_p);
+#define KMP_GET_I_LOCK_FLAGS(lck) ( __kmp_indirect_get_flags[(lck)->type] != NULL \
+ ? __kmp_indirect_get_flags[(lck)->type]((lck)->lock) \
+ : NULL )
+
+#define KMP_I_LOCK_CHUNK 1024 // number of kmp_indirect_lock_t objects to be allocated together
+
+// Lock table for indirect locks.
+typedef struct kmp_indirect_lock_table {
+ kmp_indirect_lock_t **table; // blocks of indirect locks allocated
+ kmp_lock_index_t size; // size of the indirect lock table
+ kmp_lock_index_t next; // index to the next lock to be allocated
+} kmp_indirect_lock_table_t;
+
+extern kmp_indirect_lock_table_t __kmp_i_lock_table;
+
+// Returns the indirect lock associated with the given index.
+#define KMP_GET_I_LOCK(index) (*(__kmp_i_lock_table.table + (index)/KMP_I_LOCK_CHUNK) + (index)%KMP_I_LOCK_CHUNK)
+
+// Number of locks in a lock block, which is fixed to "1" now.
+// TODO: No lock block implementation now. If we do support, we need to manage lock block data
+// structure for each indirect lock type.
+extern int __kmp_num_locks_in_block;
+
+// Fast lock table lookup without consistency checking
+#define KMP_LOOKUP_I_LOCK(l) ( (OMP_LOCK_T_SIZE < sizeof(void *)) \
+ ? KMP_GET_I_LOCK(KMP_EXTRACT_I_INDEX(l)) \
+ : *((kmp_indirect_lock_t **)(l)) )
+
+// Used once in kmp_error.c
+extern kmp_int32
+__kmp_get_user_lock_owner(kmp_user_lock_p, kmp_uint32);
+
+#else // KMP_USE_DYNAMIC_LOCK
+
+# define KMP_LOCK_BUSY(v, type) (v)
+# define KMP_LOCK_FREE(type) 0
+# define KMP_LOCK_STRIP(v) (v)
+
+#endif // KMP_USE_DYNAMIC_LOCK
+
+// data structure for using backoff within spin locks.
+typedef struct {
+ kmp_uint32 step; // current step
+ kmp_uint32 max_backoff; // upper bound of outer delay loop
+ kmp_uint32 min_tick; // size of inner delay loop in ticks (machine-dependent)
+} kmp_backoff_t;
+
+// Runtime's default backoff parameters
+extern kmp_backoff_t __kmp_spin_backoff_params;
+
+// Backoff function
+extern void __kmp_spin_backoff(kmp_backoff_t *);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif /* KMP_LOCK_H */
+
diff --git a/final/runtime/src/kmp_omp.h b/final/runtime/src/kmp_omp.h
new file mode 100644
index 0000000..6a76023
--- /dev/null
+++ b/final/runtime/src/kmp_omp.h
@@ -0,0 +1,234 @@
+#if USE_DEBUGGER
+/*
+ * kmp_omp.h -- OpenMP definition for kmp_omp_struct_info_t.
+ * This is for information about runtime library structures.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/* THIS FILE SHOULD NOT BE MODIFIED IN IDB INTERFACE LIBRARY CODE
+ * It should instead be modified in the OpenMP runtime and copied
+ * to the interface library code. This way we can minimize the
+ * problems that this is sure to cause having two copies of the
+ * same file.
+ *
+ * files live in libomp and libomp_db/src/include
+ */
+
+/* CHANGE THIS WHEN STRUCTURES BELOW CHANGE
+ * Before we release this to a customer, please don't change this value. After it is released and
+ * stable, then any new updates to the structures or data structure traversal algorithms need to
+ * change this value.
+ */
+#define KMP_OMP_VERSION 9
+
+typedef struct {
+ kmp_int32 offset;
+ kmp_int32 size;
+} offset_and_size_t;
+
+typedef struct {
+ kmp_uint64 addr;
+ kmp_int32 size;
+ kmp_int32 padding;
+} addr_and_size_t;
+
+typedef struct {
+ kmp_uint64 flags; // Flags for future extensions.
+ kmp_uint64 file; // Pointer to name of source file where the parallel region is.
+ kmp_uint64 func; // Pointer to name of routine where the parallel region is.
+ kmp_int32 begin; // Beginning of source line range.
+ kmp_int32 end; // End of source line range.
+ kmp_int32 num_threads; // Specified number of threads.
+} kmp_omp_nthr_item_t;
+
+typedef struct {
+ kmp_int32 num; // Number of items in the arrray.
+ kmp_uint64 array; // Address of array of kmp_omp_num_threads_item_t.
+} kmp_omp_nthr_info_t;
+
+
+/* This structure is known to the idb interface library */
+typedef struct {
+
+ /* Change this only if you make a fundamental data structure change here */
+ kmp_int32 lib_version;
+
+ /* sanity check. Only should be checked if versions are identical
+ * This is also used for backward compatibility to get the runtime
+ * structure size if it the runtime is older than the interface */
+ kmp_int32 sizeof_this_structure;
+
+ /* OpenMP RTL version info. */
+ addr_and_size_t major;
+ addr_and_size_t minor;
+ addr_and_size_t build;
+ addr_and_size_t openmp_version;
+ addr_and_size_t banner;
+
+ /* Various globals. */
+ addr_and_size_t threads; // Pointer to __kmp_threads.
+ addr_and_size_t roots; // Pointer to __kmp_root.
+ addr_and_size_t capacity; // Pointer to __kmp_threads_capacity.
+ addr_and_size_t monitor; // Pointer to __kmp_monitor.
+#if ! KMP_USE_DYNAMIC_LOCK
+ addr_and_size_t lock_table; // Pointer to __kmp_lock_table.
+#endif
+ addr_and_size_t func_microtask;
+ addr_and_size_t func_fork;
+ addr_and_size_t func_fork_teams;
+ addr_and_size_t team_counter;
+ addr_and_size_t task_counter;
+ addr_and_size_t nthr_info;
+ kmp_int32 address_width;
+ kmp_int32 indexed_locks;
+ kmp_int32 last_barrier; // The end in enum barrier_type
+ kmp_int32 deque_size; // TASK_DEQUE_SIZE
+
+ /* thread structure information. */
+ kmp_int32 th_sizeof_struct;
+ offset_and_size_t th_info; // descriptor for thread
+ offset_and_size_t th_team; // team for this thread
+ offset_and_size_t th_root; // root for this thread
+ offset_and_size_t th_serial_team; // serial team under this thread
+ offset_and_size_t th_ident; // location for this thread (if available)
+ offset_and_size_t th_spin_here; // is thread waiting for lock (if available)
+ offset_and_size_t th_next_waiting; // next thread waiting for lock (if available)
+ offset_and_size_t th_task_team; // task team struct
+ offset_and_size_t th_current_task; // innermost task being executed
+ offset_and_size_t th_task_state; // alternating 0/1 for task team identification
+ offset_and_size_t th_bar;
+ offset_and_size_t th_b_worker_arrived; // the worker increases it by 1 when it arrives to the barrier
+
+#if OMP_40_ENABLED
+ /* teams information */
+ offset_and_size_t th_teams_microtask;// entry address for teams construct
+ offset_and_size_t th_teams_level; // initial level of teams construct
+ offset_and_size_t th_teams_nteams; // number of teams in a league
+ offset_and_size_t th_teams_nth; // number of threads in each team of the league
+#endif
+
+ /* kmp_desc structure (for info field above) */
+ kmp_int32 ds_sizeof_struct;
+ offset_and_size_t ds_tid; // team thread id
+ offset_and_size_t ds_gtid; // global thread id
+ offset_and_size_t ds_thread; // native thread id
+
+ /* team structure information */
+ kmp_int32 t_sizeof_struct;
+ offset_and_size_t t_master_tid; // tid of master in parent team
+ offset_and_size_t t_ident; // location of parallel region
+ offset_and_size_t t_parent; // parent team
+ offset_and_size_t t_nproc; // # team threads
+ offset_and_size_t t_threads; // array of threads
+ offset_and_size_t t_serialized; // # levels of serialized teams
+ offset_and_size_t t_id; // unique team id
+ offset_and_size_t t_pkfn;
+ offset_and_size_t t_task_team; // task team structure
+ offset_and_size_t t_implicit_task; // taskdata for the thread's implicit task
+#if OMP_40_ENABLED
+ offset_and_size_t t_cancel_request;
+#endif
+ offset_and_size_t t_bar;
+ offset_and_size_t t_b_master_arrived; // increased by 1 when master arrives to a barrier
+ offset_and_size_t t_b_team_arrived; // increased by one when all the threads arrived
+
+ /* root structure information */
+ kmp_int32 r_sizeof_struct;
+ offset_and_size_t r_root_team; // team at root
+ offset_and_size_t r_hot_team; // hot team for this root
+ offset_and_size_t r_uber_thread; // root thread
+ offset_and_size_t r_root_id; // unique root id (if available)
+
+ /* ident structure information */
+ kmp_int32 id_sizeof_struct;
+ offset_and_size_t id_psource; /* address of string ";file;func;line1;line2;;". */
+ offset_and_size_t id_flags;
+
+ /* lock structure information */
+ kmp_int32 lk_sizeof_struct;
+ offset_and_size_t lk_initialized;
+ offset_and_size_t lk_location;
+ offset_and_size_t lk_tail_id;
+ offset_and_size_t lk_head_id;
+ offset_and_size_t lk_next_ticket;
+ offset_and_size_t lk_now_serving;
+ offset_and_size_t lk_owner_id;
+ offset_and_size_t lk_depth_locked;
+ offset_and_size_t lk_lock_flags;
+
+#if ! KMP_USE_DYNAMIC_LOCK
+ /* lock_table_t */
+ kmp_int32 lt_size_of_struct; /* Size and layout of kmp_lock_table_t. */
+ offset_and_size_t lt_used;
+ offset_and_size_t lt_allocated;
+ offset_and_size_t lt_table;
+#endif
+
+ /* task_team_t */
+ kmp_int32 tt_sizeof_struct;
+ offset_and_size_t tt_threads_data;
+ offset_and_size_t tt_found_tasks;
+ offset_and_size_t tt_nproc;
+ offset_and_size_t tt_unfinished_threads;
+ offset_and_size_t tt_active;
+
+ /* kmp_taskdata_t */
+ kmp_int32 td_sizeof_struct;
+ offset_and_size_t td_task_id; // task id
+ offset_and_size_t td_flags; // task flags
+ offset_and_size_t td_team; // team for this task
+ offset_and_size_t td_parent; // parent task
+ offset_and_size_t td_level; // task testing level
+ offset_and_size_t td_ident; // task identifier
+ offset_and_size_t td_allocated_child_tasks; // child tasks (+ current task) not yet deallocated
+ offset_and_size_t td_incomplete_child_tasks; // child tasks not yet complete
+
+ /* Taskwait */
+ offset_and_size_t td_taskwait_ident;
+ offset_and_size_t td_taskwait_counter;
+ offset_and_size_t td_taskwait_thread; // gtid + 1 of thread encountered taskwait
+
+#if OMP_40_ENABLED
+ /* Taskgroup */
+ offset_and_size_t td_taskgroup; // pointer to the current taskgroup
+ offset_and_size_t td_task_count; // number of allocated and not yet complete tasks
+ offset_and_size_t td_cancel; // request for cancellation of this taskgroup
+
+ /* Task dependency */
+ offset_and_size_t td_depnode; // pointer to graph node if the task has dependencies
+ offset_and_size_t dn_node;
+ offset_and_size_t dn_next;
+ offset_and_size_t dn_successors;
+ offset_and_size_t dn_task;
+ offset_and_size_t dn_npredecessors;
+ offset_and_size_t dn_nrefs;
+#endif
+ offset_and_size_t dn_routine;
+
+ /* kmp_thread_data_t */
+ kmp_int32 hd_sizeof_struct;
+ offset_and_size_t hd_deque;
+ offset_and_size_t hd_deque_size;
+ offset_and_size_t hd_deque_head;
+ offset_and_size_t hd_deque_tail;
+ offset_and_size_t hd_deque_ntasks;
+ offset_and_size_t hd_deque_last_stolen;
+
+ // The last field of stable version.
+ kmp_uint64 last_field;
+
+} kmp_omp_struct_info_t;
+
+#endif /* USE_DEBUGGER */
+
+/* end of file */
diff --git a/final/runtime/src/kmp_os.h b/final/runtime/src/kmp_os.h
new file mode 100644
index 0000000..3335214
--- /dev/null
+++ b/final/runtime/src/kmp_os.h
@@ -0,0 +1,716 @@
+/*
+ * kmp_os.h -- KPTS runtime header file.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_OS_H
+#define KMP_OS_H
+
+#include "kmp_config.h"
+#include <stdlib.h>
+
+#define KMP_FTN_PLAIN 1
+#define KMP_FTN_APPEND 2
+#define KMP_FTN_UPPER 3
+/*
+#define KMP_FTN_PREPEND 4
+#define KMP_FTN_UAPPEND 5
+*/
+
+#define KMP_PTR_SKIP (sizeof(void*))
+
+/* -------------------------- Compiler variations ------------------------ */
+
+#define KMP_OFF 0
+#define KMP_ON 1
+
+#define KMP_MEM_CONS_VOLATILE 0
+#define KMP_MEM_CONS_FENCE 1
+
+#ifndef KMP_MEM_CONS_MODEL
+# define KMP_MEM_CONS_MODEL KMP_MEM_CONS_VOLATILE
+#endif
+
+/* ------------------------- Compiler recognition ---------------------- */
+#define KMP_COMPILER_ICC 0
+#define KMP_COMPILER_GCC 0
+#define KMP_COMPILER_CLANG 0
+#define KMP_COMPILER_MSVC 0
+
+#if defined( __INTEL_COMPILER )
+# undef KMP_COMPILER_ICC
+# define KMP_COMPILER_ICC 1
+#elif defined( __clang__ )
+# undef KMP_COMPILER_CLANG
+# define KMP_COMPILER_CLANG 1
+#elif defined( __GNUC__ )
+# undef KMP_COMPILER_GCC
+# define KMP_COMPILER_GCC 1
+#elif defined( _MSC_VER )
+# undef KMP_COMPILER_MSVC
+# define KMP_COMPILER_MSVC 1
+#else
+# error Unknown compiler
+#endif
+
+#if (KMP_OS_LINUX || KMP_OS_WINDOWS) && !KMP_OS_CNK && !KMP_ARCH_PPC64
+# define KMP_AFFINITY_SUPPORTED 1
+# if KMP_OS_WINDOWS && KMP_ARCH_X86_64
+# define KMP_GROUP_AFFINITY 1
+# else
+# define KMP_GROUP_AFFINITY 0
+# endif
+#else
+# define KMP_AFFINITY_SUPPORTED 0
+# define KMP_GROUP_AFFINITY 0
+#endif
+
+/* Check for quad-precision extension. */
+#define KMP_HAVE_QUAD 0
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+# if KMP_COMPILER_ICC
+ /* _Quad is already defined for icc */
+# undef KMP_HAVE_QUAD
+# define KMP_HAVE_QUAD 1
+# elif KMP_COMPILER_CLANG
+ /* Clang doesn't support a software-implemented
+ 128-bit extended precision type yet */
+ typedef long double _Quad;
+# elif KMP_COMPILER_GCC
+ typedef __float128 _Quad;
+# undef KMP_HAVE_QUAD
+# define KMP_HAVE_QUAD 1
+# elif KMP_COMPILER_MSVC
+ typedef long double _Quad;
+# endif
+#else
+# if __LDBL_MAX_EXP__ >= 16384 && KMP_COMPILER_GCC
+ typedef long double _Quad;
+# undef KMP_HAVE_QUAD
+# define KMP_HAVE_QUAD 1
+# endif
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+#if KMP_OS_WINDOWS
+ typedef char kmp_int8;
+ typedef unsigned char kmp_uint8;
+ typedef short kmp_int16;
+ typedef unsigned short kmp_uint16;
+ typedef int kmp_int32;
+ typedef unsigned int kmp_uint32;
+# define KMP_INT32_SPEC "d"
+# define KMP_UINT32_SPEC "u"
+# ifndef KMP_STRUCT64
+ typedef __int64 kmp_int64;
+ typedef unsigned __int64 kmp_uint64;
+ #define KMP_INT64_SPEC "I64d"
+ #define KMP_UINT64_SPEC "I64u"
+# else
+ struct kmp_struct64 {
+ kmp_int32 a,b;
+ };
+ typedef struct kmp_struct64 kmp_int64;
+ typedef struct kmp_struct64 kmp_uint64;
+ /* Not sure what to use for KMP_[U]INT64_SPEC here */
+# endif
+# if KMP_ARCH_X86_64
+# define KMP_INTPTR 1
+ typedef __int64 kmp_intptr_t;
+ typedef unsigned __int64 kmp_uintptr_t;
+# define KMP_INTPTR_SPEC "I64d"
+# define KMP_UINTPTR_SPEC "I64u"
+# endif
+#endif /* KMP_OS_WINDOWS */
+
+#if KMP_OS_UNIX
+ typedef char kmp_int8;
+ typedef unsigned char kmp_uint8;
+ typedef short kmp_int16;
+ typedef unsigned short kmp_uint16;
+ typedef int kmp_int32;
+ typedef unsigned int kmp_uint32;
+ typedef long long kmp_int64;
+ typedef unsigned long long kmp_uint64;
+# define KMP_INT32_SPEC "d"
+# define KMP_UINT32_SPEC "u"
+# define KMP_INT64_SPEC "lld"
+# define KMP_UINT64_SPEC "llu"
+#endif /* KMP_OS_UNIX */
+
+#if KMP_ARCH_X86 || KMP_ARCH_ARM
+# define KMP_SIZE_T_SPEC KMP_UINT32_SPEC
+#elif KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
+# define KMP_SIZE_T_SPEC KMP_UINT64_SPEC
+#else
+# error "Can't determine size_t printf format specifier."
+#endif
+
+#if KMP_ARCH_X86
+# define KMP_SIZE_T_MAX (0xFFFFFFFF)
+#else
+# define KMP_SIZE_T_MAX (0xFFFFFFFFFFFFFFFF)
+#endif
+
+typedef size_t kmp_size_t;
+typedef float kmp_real32;
+typedef double kmp_real64;
+
+#ifndef KMP_INTPTR
+# define KMP_INTPTR 1
+ typedef long kmp_intptr_t;
+ typedef unsigned long kmp_uintptr_t;
+# define KMP_INTPTR_SPEC "ld"
+# define KMP_UINTPTR_SPEC "lu"
+#endif
+
+#ifdef BUILD_I8
+ typedef kmp_int64 kmp_int;
+ typedef kmp_uint64 kmp_uint;
+#else
+ typedef kmp_int32 kmp_int;
+ typedef kmp_uint32 kmp_uint;
+#endif /* BUILD_I8 */
+#define KMP_INT_MAX ((kmp_int32)0x7FFFFFFF)
+#define KMP_INT_MIN ((kmp_int32)0x80000000)
+
+#ifdef __cplusplus
+ //-------------------------------------------------------------------------
+ // template for debug prints specification ( d, u, lld, llu ), and to obtain
+ // signed/unsigned flavors of a type
+ template< typename T >
+ struct traits_t {
+ typedef T signed_t;
+ typedef T unsigned_t;
+ typedef T floating_t;
+ static char const * spec;
+ };
+ // int
+ template<>
+ struct traits_t< signed int > {
+ typedef signed int signed_t;
+ typedef unsigned int unsigned_t;
+ typedef double floating_t;
+ static char const * spec;
+ };
+ // unsigned int
+ template<>
+ struct traits_t< unsigned int > {
+ typedef signed int signed_t;
+ typedef unsigned int unsigned_t;
+ typedef double floating_t;
+ static char const * spec;
+ };
+ // long long
+ template<>
+ struct traits_t< signed long long > {
+ typedef signed long long signed_t;
+ typedef unsigned long long unsigned_t;
+ typedef long double floating_t;
+ static char const * spec;
+ };
+ // unsigned long long
+ template<>
+ struct traits_t< unsigned long long > {
+ typedef signed long long signed_t;
+ typedef unsigned long long unsigned_t;
+ typedef long double floating_t;
+ static char const * spec;
+ };
+ //-------------------------------------------------------------------------
+#endif // __cplusplus
+
+#define KMP_EXPORT extern /* export declaration in guide libraries */
+
+#if __GNUC__ >= 4
+ #define __forceinline __inline
+#endif
+
+#define PAGE_SIZE (0x4000)
+#define PAGE_ALIGNED(_addr) ( ! ((size_t) _addr & \
+ (size_t)(PAGE_SIZE - 1)))
+#define ALIGN_TO_PAGE(x) (void *)(((size_t)(x)) & ~((size_t)(PAGE_SIZE - 1)))
+
+/* ---------------------- Support for cache alignment, padding, etc. -----------------*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#define INTERNODE_CACHE_LINE 4096 /* for multi-node systems */
+
+/* Define the default size of the cache line */
+#ifndef CACHE_LINE
+ #define CACHE_LINE 128 /* cache line size in bytes */
+#else
+ #if ( CACHE_LINE < 64 ) && ! defined( KMP_OS_DARWIN )
+ // 2006-02-13: This produces too many warnings on OS X*. Disable it for a while...
+ #warning CACHE_LINE is too small.
+ #endif
+#endif /* CACHE_LINE */
+
+#define KMP_CACHE_PREFETCH(ADDR) /* nothing */
+
+/* Temporary note: if performance testing of this passes, we can remove
+ all references to KMP_DO_ALIGN and replace with KMP_ALIGN. */
+#if KMP_OS_UNIX && defined(__GNUC__)
+# define KMP_DO_ALIGN(bytes) __attribute__((aligned(bytes)))
+# define KMP_ALIGN_CACHE __attribute__((aligned(CACHE_LINE)))
+# define KMP_ALIGN_CACHE_INTERNODE __attribute__((aligned(INTERNODE_CACHE_LINE)))
+# define KMP_ALIGN(bytes) __attribute__((aligned(bytes)))
+#else
+# define KMP_DO_ALIGN(bytes) __declspec( align(bytes) )
+# define KMP_ALIGN_CACHE __declspec( align(CACHE_LINE) )
+# define KMP_ALIGN_CACHE_INTERNODE __declspec( align(INTERNODE_CACHE_LINE) )
+# define KMP_ALIGN(bytes) __declspec( align(bytes) )
+#endif
+
+/* General purpose fence types for memory operations */
+enum kmp_mem_fence_type {
+ kmp_no_fence, /* No memory fence */
+ kmp_acquire_fence, /* Acquire (read) memory fence */
+ kmp_release_fence, /* Release (write) memory fence */
+ kmp_full_fence /* Full (read+write) memory fence */
+};
+
+
+//
+// Synchronization primitives
+//
+
+#if KMP_ASM_INTRINS && KMP_OS_WINDOWS
+
+#include <Windows.h>
+
+#pragma intrinsic(InterlockedExchangeAdd)
+#pragma intrinsic(InterlockedCompareExchange)
+#pragma intrinsic(InterlockedExchange)
+#pragma intrinsic(InterlockedExchange64)
+
+//
+// Using InterlockedIncrement / InterlockedDecrement causes a library loading
+// ordering problem, so we use InterlockedExchangeAdd instead.
+//
+# define KMP_TEST_THEN_INC32(p) InterlockedExchangeAdd( (volatile long *)(p), 1 )
+# define KMP_TEST_THEN_INC_ACQ32(p) InterlockedExchangeAdd( (volatile long *)(p), 1 )
+# define KMP_TEST_THEN_ADD4_32(p) InterlockedExchangeAdd( (volatile long *)(p), 4 )
+# define KMP_TEST_THEN_ADD4_ACQ32(p) InterlockedExchangeAdd( (volatile long *)(p), 4 )
+# define KMP_TEST_THEN_DEC32(p) InterlockedExchangeAdd( (volatile long *)(p), -1 )
+# define KMP_TEST_THEN_DEC_ACQ32(p) InterlockedExchangeAdd( (volatile long *)(p), -1 )
+# define KMP_TEST_THEN_ADD32(p, v) InterlockedExchangeAdd( (volatile long *)(p), (v) )
+
+extern kmp_int8 __kmp_test_then_add8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int8 __kmp_test_then_or8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int8 __kmp_test_then_and8( volatile kmp_int8 *p, kmp_int8 v );
+# define KMP_COMPARE_AND_STORE_RET32(p, cv, sv) InterlockedCompareExchange( (volatile long *)(p),(long)(sv),(long)(cv) )
+
+# define KMP_XCHG_FIXED32(p, v) InterlockedExchange( (volatile long *)(p), (long)(v) )
+# define KMP_XCHG_FIXED64(p, v) InterlockedExchange64( (volatile kmp_int64 *)(p), (kmp_int64)(v) )
+
+inline kmp_real32 KMP_XCHG_REAL32( volatile kmp_real32 *p, kmp_real32 v)
+{
+ kmp_int32 tmp = InterlockedExchange( (volatile long *)p, *(long *)&v);
+ return *(kmp_real32*)&tmp;
+}
+
+//
+// Routines that we still need to implement in assembly.
+//
+extern kmp_int32 __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int32 __kmp_test_then_or32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int32 __kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int64 __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_int64 __kmp_test_then_or64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_int64 __kmp_test_then_and64( volatile kmp_int64 *p, kmp_int64 v );
+
+extern kmp_int8 __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+extern kmp_int16 __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+extern kmp_int32 __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+extern kmp_int32 __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+extern kmp_int8 __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+extern kmp_int16 __kmp_compare_and_store_ret16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+extern kmp_int32 __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+extern kmp_int64 __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+
+extern kmp_int8 __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int16 __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 v );
+extern kmp_int32 __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int64 __kmp_xchg_fixed64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_real32 __kmp_xchg_real32( volatile kmp_real32 *p, kmp_real32 v );
+extern kmp_real64 __kmp_xchg_real64( volatile kmp_real64 *p, kmp_real64 v );
+# define KMP_TEST_THEN_ADD8(p, v) __kmp_test_then_add8( (p), (v) )
+
+//# define KMP_TEST_THEN_INC32(p) __kmp_test_then_add32( (p), 1 )
+# define KMP_TEST_THEN_OR8(p, v) __kmp_test_then_or8( (p), (v) )
+# define KMP_TEST_THEN_AND8(p, v) __kmp_test_then_and8( (p), (v) )
+//# define KMP_TEST_THEN_INC_ACQ32(p) __kmp_test_then_add32( (p), 1 )
+# define KMP_TEST_THEN_INC64(p) __kmp_test_then_add64( (p), 1LL )
+# define KMP_TEST_THEN_INC_ACQ64(p) __kmp_test_then_add64( (p), 1LL )
+//# define KMP_TEST_THEN_ADD4_32(p) __kmp_test_then_add32( (p), 4 )
+//# define KMP_TEST_THEN_ADD4_ACQ32(p) __kmp_test_then_add32( (p), 4 )
+# define KMP_TEST_THEN_ADD4_64(p) __kmp_test_then_add64( (p), 4LL )
+# define KMP_TEST_THEN_ADD4_ACQ64(p) __kmp_test_then_add64( (p), 4LL )
+//# define KMP_TEST_THEN_DEC32(p) __kmp_test_then_add32( (p), -1 )
+//# define KMP_TEST_THEN_DEC_ACQ32(p) __kmp_test_then_add32( (p), -1 )
+# define KMP_TEST_THEN_DEC64(p) __kmp_test_then_add64( (p), -1LL )
+# define KMP_TEST_THEN_DEC_ACQ64(p) __kmp_test_then_add64( (p), -1LL )
+//# define KMP_TEST_THEN_ADD32(p, v) __kmp_test_then_add32( (p), (v) )
+# define KMP_TEST_THEN_ADD64(p, v) __kmp_test_then_add64( (p), (v) )
+
+# define KMP_TEST_THEN_OR32(p, v) __kmp_test_then_or32( (p), (v) )
+# define KMP_TEST_THEN_AND32(p, v) __kmp_test_then_and32( (p), (v) )
+# define KMP_TEST_THEN_OR64(p, v) __kmp_test_then_or64( (p), (v) )
+# define KMP_TEST_THEN_AND64(p, v) __kmp_test_then_and64( (p), (v) )
+
+# define KMP_COMPARE_AND_STORE_ACQ8(p, cv, sv) __kmp_compare_and_store8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL8(p, cv, sv) __kmp_compare_and_store8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ16(p, cv, sv) __kmp_compare_and_store16( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL16(p, cv, sv) __kmp_compare_and_store16( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ32(p, cv, sv) __kmp_compare_and_store32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL32(p, cv, sv) __kmp_compare_and_store32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
+
+# if KMP_ARCH_X86
+# define KMP_COMPARE_AND_STORE_PTR(p, cv, sv) __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
+# else /* 64 bit pointers */
+# define KMP_COMPARE_AND_STORE_PTR(p, cv, sv) __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
+# endif /* KMP_ARCH_X86 */
+
+# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv) __kmp_compare_and_store_ret8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
+//# define KMP_COMPARE_AND_STORE_RET32(p, cv, sv) __kmp_compare_and_store_ret32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_RET64(p, cv, sv) __kmp_compare_and_store_ret64( (p), (cv), (sv) )
+
+# define KMP_XCHG_FIXED8(p, v) __kmp_xchg_fixed8( (volatile kmp_int8*)(p), (kmp_int8)(v) );
+# define KMP_XCHG_FIXED16(p, v) __kmp_xchg_fixed16( (p), (v) );
+//# define KMP_XCHG_FIXED32(p, v) __kmp_xchg_fixed32( (p), (v) );
+//# define KMP_XCHG_FIXED64(p, v) __kmp_xchg_fixed64( (p), (v) );
+//# define KMP_XCHG_REAL32(p, v) __kmp_xchg_real32( (p), (v) );
+# define KMP_XCHG_REAL64(p, v) __kmp_xchg_real64( (p), (v) );
+
+
+#elif (KMP_ASM_INTRINS && KMP_OS_UNIX) || !(KMP_ARCH_X86 || KMP_ARCH_X86_64)
+# define KMP_TEST_THEN_ADD8(p, v) __sync_fetch_and_add( (kmp_int8 *)(p), (v) )
+
+/* cast p to correct type so that proper intrinsic will be used */
+# define KMP_TEST_THEN_INC32(p) __sync_fetch_and_add( (kmp_int32 *)(p), 1 )
+# define KMP_TEST_THEN_OR8(p, v) __sync_fetch_and_or( (kmp_int8 *)(p), (v) )
+# define KMP_TEST_THEN_AND8(p, v) __sync_fetch_and_and( (kmp_int8 *)(p), (v) )
+# define KMP_TEST_THEN_INC_ACQ32(p) __sync_fetch_and_add( (kmp_int32 *)(p), 1 )
+# define KMP_TEST_THEN_INC64(p) __sync_fetch_and_add( (kmp_int64 *)(p), 1LL )
+# define KMP_TEST_THEN_INC_ACQ64(p) __sync_fetch_and_add( (kmp_int64 *)(p), 1LL )
+# define KMP_TEST_THEN_ADD4_32(p) __sync_fetch_and_add( (kmp_int32 *)(p), 4 )
+# define KMP_TEST_THEN_ADD4_ACQ32(p) __sync_fetch_and_add( (kmp_int32 *)(p), 4 )
+# define KMP_TEST_THEN_ADD4_64(p) __sync_fetch_and_add( (kmp_int64 *)(p), 4LL )
+# define KMP_TEST_THEN_ADD4_ACQ64(p) __sync_fetch_and_add( (kmp_int64 *)(p), 4LL )
+# define KMP_TEST_THEN_DEC32(p) __sync_fetch_and_sub( (kmp_int32 *)(p), 1 )
+# define KMP_TEST_THEN_DEC_ACQ32(p) __sync_fetch_and_sub( (kmp_int32 *)(p), 1 )
+# define KMP_TEST_THEN_DEC64(p) __sync_fetch_and_sub( (kmp_int64 *)(p), 1LL )
+# define KMP_TEST_THEN_DEC_ACQ64(p) __sync_fetch_and_sub( (kmp_int64 *)(p), 1LL )
+# define KMP_TEST_THEN_ADD32(p, v) __sync_fetch_and_add( (kmp_int32 *)(p), (v) )
+# define KMP_TEST_THEN_ADD64(p, v) __sync_fetch_and_add( (kmp_int64 *)(p), (v) )
+
+# define KMP_TEST_THEN_OR32(p, v) __sync_fetch_and_or( (kmp_int32 *)(p), (v) )
+# define KMP_TEST_THEN_AND32(p, v) __sync_fetch_and_and( (kmp_int32 *)(p), (v) )
+# define KMP_TEST_THEN_OR64(p, v) __sync_fetch_and_or( (kmp_int64 *)(p), (v) )
+# define KMP_TEST_THEN_AND64(p, v) __sync_fetch_and_and( (kmp_int64 *)(p), (v) )
+
+# define KMP_COMPARE_AND_STORE_ACQ8(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint8 *)(p),(kmp_uint8)(cv),(kmp_uint8)(sv) )
+# define KMP_COMPARE_AND_STORE_REL8(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint8 *)(p),(kmp_uint8)(cv),(kmp_uint8)(sv) )
+# define KMP_COMPARE_AND_STORE_ACQ16(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint16 *)(p),(kmp_uint16)(cv),(kmp_uint16)(sv) )
+# define KMP_COMPARE_AND_STORE_REL16(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint16 *)(p),(kmp_uint16)(cv),(kmp_uint16)(sv) )
+# define KMP_COMPARE_AND_STORE_ACQ32(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint32 *)(p),(kmp_uint32)(cv),(kmp_uint32)(sv) )
+# define KMP_COMPARE_AND_STORE_REL32(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint32 *)(p),(kmp_uint32)(cv),(kmp_uint32)(sv) )
+# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint64 *)(p),(kmp_uint64)(cv),(kmp_uint64)(sv) )
+# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __sync_bool_compare_and_swap( (volatile kmp_uint64 *)(p),(kmp_uint64)(cv),(kmp_uint64)(sv) )
+# define KMP_COMPARE_AND_STORE_PTR(p, cv, sv) __sync_bool_compare_and_swap( (volatile void **)(p),(void *)(cv),(void *)(sv) )
+
+# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv) __sync_val_compare_and_swap( (volatile kmp_uint8 *)(p),(kmp_uint8)(cv),(kmp_uint8)(sv) )
+# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __sync_val_compare_and_swap( (volatile kmp_uint16 *)(p),(kmp_uint16)(cv),(kmp_uint16)(sv) )
+# define KMP_COMPARE_AND_STORE_RET32(p, cv, sv) __sync_val_compare_and_swap( (volatile kmp_uint32 *)(p),(kmp_uint32)(cv),(kmp_uint32)(sv) )
+# define KMP_COMPARE_AND_STORE_RET64(p, cv, sv) __sync_val_compare_and_swap( (volatile kmp_uint64 *)(p),(kmp_uint64)(cv),(kmp_uint64)(sv) )
+
+#define KMP_XCHG_FIXED8(p, v) __sync_lock_test_and_set( (volatile kmp_uint8 *)(p), (kmp_uint8)(v) )
+#define KMP_XCHG_FIXED16(p, v) __sync_lock_test_and_set( (volatile kmp_uint16 *)(p), (kmp_uint16)(v) )
+#define KMP_XCHG_FIXED32(p, v) __sync_lock_test_and_set( (volatile kmp_uint32 *)(p), (kmp_uint32)(v) )
+#define KMP_XCHG_FIXED64(p, v) __sync_lock_test_and_set( (volatile kmp_uint64 *)(p), (kmp_uint64)(v) )
+
+extern kmp_int8 __kmp_test_then_add8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int8 __kmp_test_then_or8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int8 __kmp_test_then_and8( volatile kmp_int8 *p, kmp_int8 v );
+inline kmp_real32 KMP_XCHG_REAL32( volatile kmp_real32 *p, kmp_real32 v)
+{
+ kmp_int32 tmp = __sync_lock_test_and_set( (kmp_int32*)p, *(kmp_int32*)&v);
+ return *(kmp_real32*)&tmp;
+}
+
+inline kmp_real64 KMP_XCHG_REAL64( volatile kmp_real64 *p, kmp_real64 v)
+{
+ kmp_int64 tmp = __sync_lock_test_and_set( (kmp_int64*)p, *(kmp_int64*)&v);
+ return *(kmp_real64*)&tmp;
+}
+
+#else
+
+extern kmp_int32 __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int32 __kmp_test_then_or32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int32 __kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int64 __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_int64 __kmp_test_then_or64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_int64 __kmp_test_then_and64( volatile kmp_int64 *p, kmp_int64 v );
+
+extern kmp_int8 __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+extern kmp_int16 __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+extern kmp_int32 __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+extern kmp_int32 __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+extern kmp_int8 __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+extern kmp_int16 __kmp_compare_and_store_ret16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+extern kmp_int32 __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+extern kmp_int64 __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+
+extern kmp_int8 __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 v );
+extern kmp_int16 __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 v );
+extern kmp_int32 __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 v );
+extern kmp_int64 __kmp_xchg_fixed64( volatile kmp_int64 *p, kmp_int64 v );
+extern kmp_real32 __kmp_xchg_real32( volatile kmp_real32 *p, kmp_real32 v );
+# define KMP_TEST_THEN_ADD8(p, v) __kmp_test_then_add8( (p), (v) )
+extern kmp_real64 __kmp_xchg_real64( volatile kmp_real64 *p, kmp_real64 v );
+
+# define KMP_TEST_THEN_INC32(p) __kmp_test_then_add32( (p), 1 )
+# define KMP_TEST_THEN_OR8(p, v) __kmp_test_then_or8( (p), (v) )
+# define KMP_TEST_THEN_AND8(p, v) __kmp_test_then_and8( (p), (v) )
+# define KMP_TEST_THEN_INC_ACQ32(p) __kmp_test_then_add32( (p), 1 )
+# define KMP_TEST_THEN_INC64(p) __kmp_test_then_add64( (p), 1LL )
+# define KMP_TEST_THEN_INC_ACQ64(p) __kmp_test_then_add64( (p), 1LL )
+# define KMP_TEST_THEN_ADD4_32(p) __kmp_test_then_add32( (p), 4 )
+# define KMP_TEST_THEN_ADD4_ACQ32(p) __kmp_test_then_add32( (p), 4 )
+# define KMP_TEST_THEN_ADD4_64(p) __kmp_test_then_add64( (p), 4LL )
+# define KMP_TEST_THEN_ADD4_ACQ64(p) __kmp_test_then_add64( (p), 4LL )
+# define KMP_TEST_THEN_DEC32(p) __kmp_test_then_add32( (p), -1 )
+# define KMP_TEST_THEN_DEC_ACQ32(p) __kmp_test_then_add32( (p), -1 )
+# define KMP_TEST_THEN_DEC64(p) __kmp_test_then_add64( (p), -1LL )
+# define KMP_TEST_THEN_DEC_ACQ64(p) __kmp_test_then_add64( (p), -1LL )
+# define KMP_TEST_THEN_ADD32(p, v) __kmp_test_then_add32( (p), (v) )
+# define KMP_TEST_THEN_ADD64(p, v) __kmp_test_then_add64( (p), (v) )
+
+# define KMP_TEST_THEN_OR32(p, v) __kmp_test_then_or32( (p), (v) )
+# define KMP_TEST_THEN_AND32(p, v) __kmp_test_then_and32( (p), (v) )
+# define KMP_TEST_THEN_OR64(p, v) __kmp_test_then_or64( (p), (v) )
+# define KMP_TEST_THEN_AND64(p, v) __kmp_test_then_and64( (p), (v) )
+
+# define KMP_COMPARE_AND_STORE_ACQ8(p, cv, sv) __kmp_compare_and_store8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL8(p, cv, sv) __kmp_compare_and_store8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ16(p, cv, sv) __kmp_compare_and_store16( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL16(p, cv, sv) __kmp_compare_and_store16( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ32(p, cv, sv) __kmp_compare_and_store32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL32(p, cv, sv) __kmp_compare_and_store32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
+
+# if KMP_ARCH_X86
+# define KMP_COMPARE_AND_STORE_PTR(p, cv, sv) __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
+# else /* 64 bit pointers */
+# define KMP_COMPARE_AND_STORE_PTR(p, cv, sv) __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
+# endif /* KMP_ARCH_X86 */
+
+# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv) __kmp_compare_and_store_ret8( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_RET32(p, cv, sv) __kmp_compare_and_store_ret32( (p), (cv), (sv) )
+# define KMP_COMPARE_AND_STORE_RET64(p, cv, sv) __kmp_compare_and_store_ret64( (p), (cv), (sv) )
+
+# define KMP_XCHG_FIXED8(p, v) __kmp_xchg_fixed8( (volatile kmp_int8*)(p), (kmp_int8)(v) );
+# define KMP_XCHG_FIXED16(p, v) __kmp_xchg_fixed16( (p), (v) );
+# define KMP_XCHG_FIXED32(p, v) __kmp_xchg_fixed32( (p), (v) );
+# define KMP_XCHG_FIXED64(p, v) __kmp_xchg_fixed64( (p), (v) );
+# define KMP_XCHG_REAL32(p, v) __kmp_xchg_real32( (p), (v) );
+# define KMP_XCHG_REAL64(p, v) __kmp_xchg_real64( (p), (v) );
+
+#endif /* KMP_ASM_INTRINS */
+
+
+/* ------------- relaxed consistency memory model stuff ------------------ */
+
+#if KMP_OS_WINDOWS
+# ifdef __ABSOFT_WIN
+# define KMP_MB() asm ("nop")
+# define KMP_IMB() asm ("nop")
+# else
+# define KMP_MB() /* _asm{ nop } */
+# define KMP_IMB() /* _asm{ nop } */
+# endif
+#endif /* KMP_OS_WINDOWS */
+
+#if KMP_ARCH_PPC64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64
+# define KMP_MB() __sync_synchronize()
+#endif
+
+#ifndef KMP_MB
+# define KMP_MB() /* nothing to do */
+#endif
+
+#ifndef KMP_IMB
+# define KMP_IMB() /* nothing to do */
+#endif
+
+#ifndef KMP_ST_REL32
+# define KMP_ST_REL32(A,D) ( *(A) = (D) )
+#endif
+
+#ifndef KMP_ST_REL64
+# define KMP_ST_REL64(A,D) ( *(A) = (D) )
+#endif
+
+#ifndef KMP_LD_ACQ32
+# define KMP_LD_ACQ32(A) ( *(A) )
+#endif
+
+#ifndef KMP_LD_ACQ64
+# define KMP_LD_ACQ64(A) ( *(A) )
+#endif
+
+#define TCR_1(a) (a)
+#define TCW_1(a,b) (a) = (b)
+/* ------------------------------------------------------------------------ */
+//
+// FIXME - maybe this should this be
+//
+// #define TCR_4(a) (*(volatile kmp_int32 *)(&a))
+// #define TCW_4(a,b) (a) = (*(volatile kmp_int32 *)&(b))
+//
+// #define TCR_8(a) (*(volatile kmp_int64 *)(a))
+// #define TCW_8(a,b) (a) = (*(volatile kmp_int64 *)(&b))
+//
+// I'm fairly certain this is the correct thing to do, but I'm afraid
+// of performance regressions.
+//
+
+#define TCR_4(a) (a)
+#define TCW_4(a,b) (a) = (b)
+#define TCI_4(a) (++(a))
+#define TCD_4(a) (--(a))
+#define TCR_8(a) (a)
+#define TCW_8(a,b) (a) = (b)
+#define TCI_8(a) (++(a))
+#define TCD_8(a) (--(a))
+#define TCR_SYNC_4(a) (a)
+#define TCW_SYNC_4(a,b) (a) = (b)
+#define TCX_SYNC_4(a,b,c) KMP_COMPARE_AND_STORE_REL32((volatile kmp_int32 *)(volatile void *)&(a), (kmp_int32)(b), (kmp_int32)(c))
+#define TCR_SYNC_8(a) (a)
+#define TCW_SYNC_8(a,b) (a) = (b)
+#define TCX_SYNC_8(a,b,c) KMP_COMPARE_AND_STORE_REL64((volatile kmp_int64 *)(volatile void *)&(a), (kmp_int64)(b), (kmp_int64)(c))
+
+#if KMP_ARCH_X86
+// What about ARM?
+ #define TCR_PTR(a) ((void *)TCR_4(a))
+ #define TCW_PTR(a,b) TCW_4((a),(b))
+ #define TCR_SYNC_PTR(a) ((void *)TCR_SYNC_4(a))
+ #define TCW_SYNC_PTR(a,b) TCW_SYNC_4((a),(b))
+ #define TCX_SYNC_PTR(a,b,c) ((void *)TCX_SYNC_4((a),(b),(c)))
+
+#else /* 64 bit pointers */
+
+ #define TCR_PTR(a) ((void *)TCR_8(a))
+ #define TCW_PTR(a,b) TCW_8((a),(b))
+ #define TCR_SYNC_PTR(a) ((void *)TCR_SYNC_8(a))
+ #define TCW_SYNC_PTR(a,b) TCW_SYNC_8((a),(b))
+ #define TCX_SYNC_PTR(a,b,c) ((void *)TCX_SYNC_8((a),(b),(c)))
+
+#endif /* KMP_ARCH_X86 */
+
+/*
+ * If these FTN_{TRUE,FALSE} values change, may need to
+ * change several places where they are used to check that
+ * language is Fortran, not C.
+ */
+
+#ifndef FTN_TRUE
+# define FTN_TRUE TRUE
+#endif
+
+#ifndef FTN_FALSE
+# define FTN_FALSE FALSE
+#endif
+
+typedef void (*microtask_t)( int *gtid, int *npr, ... );
+
+#ifdef USE_VOLATILE_CAST
+# define VOLATILE_CAST(x) (volatile x)
+#else
+# define VOLATILE_CAST(x) (x)
+#endif
+
+#define KMP_WAIT_YIELD __kmp_wait_yield_4
+#define KMP_WAIT_YIELD_PTR __kmp_wait_yield_4_ptr
+#define KMP_EQ __kmp_eq_4
+#define KMP_NEQ __kmp_neq_4
+#define KMP_LT __kmp_lt_4
+#define KMP_GE __kmp_ge_4
+#define KMP_LE __kmp_le_4
+
+/* Workaround for Intel(R) 64 code gen bug when taking address of static array (Intel(R) 64 Tracker #138) */
+#if (KMP_ARCH_X86_64 || KMP_ARCH_PPC64) && KMP_OS_LINUX
+# define STATIC_EFI2_WORKAROUND
+#else
+# define STATIC_EFI2_WORKAROUND static
+#endif
+
+// Support of BGET usage
+#ifndef KMP_USE_BGET
+#define KMP_USE_BGET 1
+#endif
+
+
+// Switches for OSS builds
+#ifndef USE_SYSFS_INFO
+# define USE_SYSFS_INFO 0
+#endif
+#ifndef USE_CMPXCHG_FIX
+# define USE_CMPXCHG_FIX 1
+#endif
+
+// Enable dynamic user lock
+#if OMP_45_ENABLED
+# define KMP_USE_DYNAMIC_LOCK 1
+#endif
+
+// Enable TSX if dynamic user lock is turned on
+#if KMP_USE_DYNAMIC_LOCK
+// Visual studio can't handle the asm sections in this code
+# define KMP_USE_TSX (KMP_ARCH_X86 || KMP_ARCH_X86_64) && !KMP_COMPILER_MSVC
+# ifdef KMP_USE_ADAPTIVE_LOCKS
+# undef KMP_USE_ADAPTIVE_LOCKS
+# endif
+# define KMP_USE_ADAPTIVE_LOCKS KMP_USE_TSX
+#endif
+
+// Enable tick time conversion of ticks to seconds
+#if KMP_STATS_ENABLED
+# define KMP_HAVE_TICK_TIME (KMP_OS_LINUX && (KMP_MIC || KMP_ARCH_X86 || KMP_ARCH_X86_64))
+#endif
+
+// Warning levels
+enum kmp_warnings_level {
+ kmp_warnings_off = 0, /* No warnings */
+ kmp_warnings_low, /* Minimal warnings (default) */
+ kmp_warnings_explicit = 6, /* Explicitly set to ON - more warnings */
+ kmp_warnings_verbose /* reserved */
+};
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif /* KMP_OS_H */
+// Safe C API
+#include "kmp_safe_c_api.h"
+
diff --git a/final/runtime/src/kmp_platform.h b/final/runtime/src/kmp_platform.h
new file mode 100644
index 0000000..b6a19dc
--- /dev/null
+++ b/final/runtime/src/kmp_platform.h
@@ -0,0 +1,171 @@
+/*
+ * kmp_platform.h -- header for determining operating system and architecture
+ */
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef KMP_PLATFORM_H
+#define KMP_PLATFORM_H
+
+/* ---------------------- Operating system recognition ------------------- */
+
+#define KMP_OS_LINUX 0
+#define KMP_OS_FREEBSD 0
+#define KMP_OS_NETBSD 0
+#define KMP_OS_DARWIN 0
+#define KMP_OS_WINDOWS 0
+#define KMP_OS_CNK 0
+#define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */
+
+
+#ifdef _WIN32
+# undef KMP_OS_WINDOWS
+# define KMP_OS_WINDOWS 1
+#endif
+
+#if ( defined __APPLE__ && defined __MACH__ )
+# undef KMP_OS_DARWIN
+# define KMP_OS_DARWIN 1
+#endif
+
+// in some ppc64 linux installations, only the second condition is met
+#if ( defined __linux )
+# undef KMP_OS_LINUX
+# define KMP_OS_LINUX 1
+#elif ( defined __linux__)
+# undef KMP_OS_LINUX
+# define KMP_OS_LINUX 1
+#else
+#endif
+
+#if ( defined __FreeBSD__ )
+# undef KMP_OS_FREEBSD
+# define KMP_OS_FREEBSD 1
+#endif
+
+#if ( defined __NetBSD__ )
+# undef KMP_OS_NETBSD
+# define KMP_OS_NETBSD 1
+#endif
+
+#if ( defined __bgq__ )
+# undef KMP_OS_CNK
+# define KMP_OS_CNK 1
+#endif
+
+#if (1 != KMP_OS_LINUX + KMP_OS_FREEBSD + KMP_OS_NETBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS)
+# error Unknown OS
+#endif
+
+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DARWIN
+# undef KMP_OS_UNIX
+# define KMP_OS_UNIX 1
+#endif
+
+/* ---------------------- Architecture recognition ------------------- */
+
+#define KMP_ARCH_X86 0
+#define KMP_ARCH_X86_64 0
+#define KMP_ARCH_AARCH64 0
+#define KMP_ARCH_PPC64_BE 0
+#define KMP_ARCH_PPC64_LE 0
+#define KMP_ARCH_PPC64 (KMP_ARCH_PPC64_LE || KMP_ARCH_PPC64_BE)
+
+#if KMP_OS_WINDOWS
+# if defined _M_AMD64
+# undef KMP_ARCH_X86_64
+# define KMP_ARCH_X86_64 1
+# else
+# undef KMP_ARCH_X86
+# define KMP_ARCH_X86 1
+# endif
+#endif
+
+#if KMP_OS_UNIX
+# if defined __x86_64
+# undef KMP_ARCH_X86_64
+# define KMP_ARCH_X86_64 1
+# elif defined __i386
+# undef KMP_ARCH_X86
+# define KMP_ARCH_X86 1
+# elif defined __powerpc64__
+# if defined __LITTLE_ENDIAN__
+# undef KMP_ARCH_PPC64_LE
+# define KMP_ARCH_PPC64_LE 1
+# else
+# undef KMP_ARCH_PPC64_BE
+# define KMP_ARCH_PPC64_BE 1
+# endif
+# elif defined __aarch64__
+# undef KMP_ARCH_AARCH64
+# define KMP_ARCH_AARCH64 1
+# endif
+#endif
+
+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) || \
+ defined(__ARM_ARCH_7A__)
+# define KMP_ARCH_ARMV7 1
+#endif
+
+#if defined(KMP_ARCH_ARMV7) || defined(__ARM_ARCH_6__) || \
+ defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
+ defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6T2__) || \
+ defined(__ARM_ARCH_6ZK__)
+# define KMP_ARCH_ARMV6 1
+#endif
+
+#if defined(KMP_ARCH_ARMV6) || defined(__ARM_ARCH_5T__) || \
+ defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || \
+ defined(__ARM_ARCH_5TEJ__)
+# define KMP_ARCH_ARMV5 1
+#endif
+
+#if defined(KMP_ARCH_ARMV5) || defined(__ARM_ARCH_4__) || \
+ defined(__ARM_ARCH_4T__)
+# define KMP_ARCH_ARMV4 1
+#endif
+
+#if defined(KMP_ARCH_ARMV4) || defined(__ARM_ARCH_3__) || \
+ defined(__ARM_ARCH_3M__)
+# define KMP_ARCH_ARMV3 1
+#endif
+
+#if defined(KMP_ARCH_ARMV3) || defined(__ARM_ARCH_2__)
+# define KMP_ARCH_ARMV2 1
+#endif
+
+#if defined(KMP_ARCH_ARMV2)
+# define KMP_ARCH_ARM 1
+#endif
+
+#if defined(__MIC__) || defined(__MIC2__)
+# define KMP_MIC 1
+# if __MIC2__ || __KNC__
+# define KMP_MIC1 0
+# define KMP_MIC2 1
+# else
+# define KMP_MIC1 1
+# define KMP_MIC2 0
+# endif
+#else
+# define KMP_MIC 0
+# define KMP_MIC1 0
+# define KMP_MIC2 0
+#endif
+
+/* Specify 32 bit architectures here */
+#define KMP_32_BIT_ARCH (KMP_ARCH_X86 || KMP_ARCH_ARM)
+
+// TODO: Fixme - This is clever, but really fugly
+#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64 + KMP_ARCH_AARCH64)
+# error Unknown or unsupported architecture
+#endif
+
+#endif // KMP_PLATFORM_H
diff --git a/final/runtime/src/kmp_runtime.c b/final/runtime/src/kmp_runtime.c
new file mode 100644
index 0000000..180c533
--- /dev/null
+++ b/final/runtime/src/kmp_runtime.c
@@ -0,0 +1,7618 @@
+/*
+ * kmp_runtime.c -- KPTS runtime support library
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_atomic.h"
+#include "kmp_wrapper_getpid.h"
+#include "kmp_environment.h"
+#include "kmp_itt.h"
+#include "kmp_str.h"
+#include "kmp_settings.h"
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+#include "kmp_error.h"
+#include "kmp_stats.h"
+#include "kmp_wait_release.h"
+
+#if OMPT_SUPPORT
+#include "ompt-specific.h"
+#endif
+
+/* these are temporary issues to be dealt with */
+#define KMP_USE_PRCTL 0
+
+#if KMP_OS_WINDOWS
+#include <process.h>
+#endif
+
+
+#if defined(KMP_GOMP_COMPAT)
+char const __kmp_version_alt_comp[] = KMP_VERSION_PREFIX "alternative compiler support: yes";
+#endif /* defined(KMP_GOMP_COMPAT) */
+
+char const __kmp_version_omp_api[] = KMP_VERSION_PREFIX "API version: "
+#if OMP_40_ENABLED
+ "4.0 (201307)";
+#else
+ "3.1 (201107)";
+#endif
+
+#ifdef KMP_DEBUG
+char const __kmp_version_lock[] = KMP_VERSION_PREFIX "lock type: run time selectable";
+#endif /* KMP_DEBUG */
+
+#define KMP_MIN( x, y ) ( (x) < (y) ? (x) : (y) )
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+kmp_info_t __kmp_monitor;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* Forward declarations */
+
+void __kmp_cleanup( void );
+
+static void __kmp_initialize_info( kmp_info_t *, kmp_team_t *, int tid, int gtid );
+static void __kmp_initialize_team( kmp_team_t * team, int new_nproc, kmp_internal_control_t * new_icvs, ident_t * loc );
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+static void __kmp_partition_places( kmp_team_t *team, int update_master_only=0 );
+#endif
+static void __kmp_do_serial_initialize( void );
+void __kmp_fork_barrier( int gtid, int tid );
+void __kmp_join_barrier( int gtid );
+void __kmp_setup_icv_copy( kmp_team_t *team, int new_nproc, kmp_internal_control_t * new_icvs, ident_t *loc );
+
+#ifdef USE_LOAD_BALANCE
+static int __kmp_load_balance_nproc( kmp_root_t * root, int set_nproc );
+#endif
+
+static int __kmp_expand_threads(int nWish, int nNeed);
+#if KMP_OS_WINDOWS
+static int __kmp_unregister_root_other_thread( int gtid );
+#endif
+static void __kmp_unregister_library( void ); // called by __kmp_internal_end()
+static void __kmp_reap_thread( kmp_info_t * thread, int is_root );
+static kmp_info_t *__kmp_thread_pool_insert_pt = NULL;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* Calculate the identifier of the current thread */
+/* fast (and somewhat portable) way to get unique */
+/* identifier of executing thread. */
+/* returns KMP_GTID_DNE if we haven't been assigned a gtid */
+
+int
+__kmp_get_global_thread_id( )
+{
+ int i;
+ kmp_info_t **other_threads;
+ size_t stack_data;
+ char *stack_addr;
+ size_t stack_size;
+ char *stack_base;
+
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id: entering, nproc=%d all_nproc=%d\n",
+ __kmp_nth, __kmp_all_nth ));
+
+ /* JPH - to handle the case where __kmpc_end(0) is called immediately prior to a
+ parallel region, made it return KMP_GTID_DNE to force serial_initialize by
+ caller. Had to handle KMP_GTID_DNE at all call-sites, or else guarantee
+ __kmp_init_gtid for this to work. */
+
+ if ( !TCR_4(__kmp_init_gtid) ) return KMP_GTID_DNE;
+
+#ifdef KMP_TDATA_GTID
+ if ( TCR_4(__kmp_gtid_mode) >= 3) {
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id: using TDATA\n" ));
+ return __kmp_gtid;
+ }
+#endif
+ if ( TCR_4(__kmp_gtid_mode) >= 2) {
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id: using keyed TLS\n" ));
+ return __kmp_gtid_get_specific();
+ }
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id: using internal alg.\n" ));
+
+ stack_addr = (char*) & stack_data;
+ other_threads = __kmp_threads;
+
+ /*
+ ATT: The code below is a source of potential bugs due to unsynchronized access to
+ __kmp_threads array. For example:
+ 1. Current thread loads other_threads[i] to thr and checks it, it is non-NULL.
+ 2. Current thread is suspended by OS.
+ 3. Another thread unregisters and finishes (debug versions of free() may fill memory
+ with something like 0xEF).
+ 4. Current thread is resumed.
+ 5. Current thread reads junk from *thr.
+ TODO: Fix it.
+ --ln
+ */
+
+ for( i = 0 ; i < __kmp_threads_capacity ; i++ ) {
+
+ kmp_info_t *thr = (kmp_info_t *)TCR_SYNC_PTR(other_threads[i]);
+ if( !thr ) continue;
+
+ stack_size = (size_t)TCR_PTR(thr->th.th_info.ds.ds_stacksize);
+ stack_base = (char *)TCR_PTR(thr->th.th_info.ds.ds_stackbase);
+
+ /* stack grows down -- search through all of the active threads */
+
+ if( stack_addr <= stack_base ) {
+ size_t stack_diff = stack_base - stack_addr;
+
+ if( stack_diff <= stack_size ) {
+ /* The only way we can be closer than the allocated */
+ /* stack size is if we are running on this thread. */
+ KMP_DEBUG_ASSERT( __kmp_gtid_get_specific() == i );
+ return i;
+ }
+ }
+ }
+
+ /* get specific to try and determine our gtid */
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id: internal alg. failed to find "
+ "thread, using TLS\n" ));
+ i = __kmp_gtid_get_specific();
+
+ /*fprintf( stderr, "=== %d\n", i ); */ /* GROO */
+
+ /* if we havn't been assigned a gtid, then return code */
+ if( i<0 ) return i;
+
+ /* dynamically updated stack window for uber threads to avoid get_specific call */
+ if( ! TCR_4(other_threads[i]->th.th_info.ds.ds_stackgrow) ) {
+ KMP_FATAL( StackOverflow, i );
+ }
+
+ stack_base = (char *) other_threads[i]->th.th_info.ds.ds_stackbase;
+ if( stack_addr > stack_base ) {
+ TCW_PTR(other_threads[i]->th.th_info.ds.ds_stackbase, stack_addr);
+ TCW_PTR(other_threads[i]->th.th_info.ds.ds_stacksize,
+ other_threads[i]->th.th_info.ds.ds_stacksize + stack_addr - stack_base);
+ } else {
+ TCW_PTR(other_threads[i]->th.th_info.ds.ds_stacksize, stack_base - stack_addr);
+ }
+
+ /* Reprint stack bounds for ubermaster since they have been refined */
+ if ( __kmp_storage_map ) {
+ char *stack_end = (char *) other_threads[i]->th.th_info.ds.ds_stackbase;
+ char *stack_beg = stack_end - other_threads[i]->th.th_info.ds.ds_stacksize;
+ __kmp_print_storage_map_gtid( i, stack_beg, stack_end,
+ other_threads[i]->th.th_info.ds.ds_stacksize,
+ "th_%d stack (refinement)", i );
+ }
+ return i;
+}
+
+int
+__kmp_get_global_thread_id_reg( )
+{
+ int gtid;
+
+ if ( !__kmp_init_serial ) {
+ gtid = KMP_GTID_DNE;
+ } else
+#ifdef KMP_TDATA_GTID
+ if ( TCR_4(__kmp_gtid_mode) >= 3 ) {
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id_reg: using TDATA\n" ));
+ gtid = __kmp_gtid;
+ } else
+#endif
+ if ( TCR_4(__kmp_gtid_mode) >= 2 ) {
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id_reg: using keyed TLS\n" ));
+ gtid = __kmp_gtid_get_specific();
+ } else {
+ KA_TRACE( 1000, ( "*** __kmp_get_global_thread_id_reg: using internal alg.\n" ));
+ gtid = __kmp_get_global_thread_id();
+ }
+
+ /* we must be a new uber master sibling thread */
+ if( gtid == KMP_GTID_DNE ) {
+ KA_TRACE( 10, ( "__kmp_get_global_thread_id_reg: Encountered new root thread. "
+ "Registering a new gtid.\n" ));
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+ if( !__kmp_init_serial ) {
+ __kmp_do_serial_initialize();
+ gtid = __kmp_gtid_get_specific();
+ } else {
+ gtid = __kmp_register_root(FALSE);
+ }
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ /*__kmp_printf( "+++ %d\n", gtid ); */ /* GROO */
+ }
+
+ KMP_DEBUG_ASSERT( gtid >=0 );
+
+ return gtid;
+}
+
+/* caller must hold forkjoin_lock */
+void
+__kmp_check_stack_overlap( kmp_info_t *th )
+{
+ int f;
+ char *stack_beg = NULL;
+ char *stack_end = NULL;
+ int gtid;
+
+ KA_TRACE(10,("__kmp_check_stack_overlap: called\n"));
+ if ( __kmp_storage_map ) {
+ stack_end = (char *) th->th.th_info.ds.ds_stackbase;
+ stack_beg = stack_end - th->th.th_info.ds.ds_stacksize;
+
+ gtid = __kmp_gtid_from_thread( th );
+
+ if (gtid == KMP_GTID_MONITOR) {
+ __kmp_print_storage_map_gtid( gtid, stack_beg, stack_end, th->th.th_info.ds.ds_stacksize,
+ "th_%s stack (%s)", "mon",
+ ( th->th.th_info.ds.ds_stackgrow ) ? "initial" : "actual" );
+ } else {
+ __kmp_print_storage_map_gtid( gtid, stack_beg, stack_end, th->th.th_info.ds.ds_stacksize,
+ "th_%d stack (%s)", gtid,
+ ( th->th.th_info.ds.ds_stackgrow ) ? "initial" : "actual" );
+ }
+ }
+
+ /* No point in checking ubermaster threads since they use refinement and cannot overlap */
+ gtid = __kmp_gtid_from_thread( th );
+ if ( __kmp_env_checks == TRUE && !KMP_UBER_GTID(gtid))
+ {
+ KA_TRACE(10,("__kmp_check_stack_overlap: performing extensive checking\n"));
+ if ( stack_beg == NULL ) {
+ stack_end = (char *) th->th.th_info.ds.ds_stackbase;
+ stack_beg = stack_end - th->th.th_info.ds.ds_stacksize;
+ }
+
+ for( f=0 ; f < __kmp_threads_capacity ; f++ ) {
+ kmp_info_t *f_th = (kmp_info_t *)TCR_SYNC_PTR(__kmp_threads[f]);
+
+ if( f_th && f_th != th ) {
+ char *other_stack_end = (char *)TCR_PTR(f_th->th.th_info.ds.ds_stackbase);
+ char *other_stack_beg = other_stack_end -
+ (size_t)TCR_PTR(f_th->th.th_info.ds.ds_stacksize);
+ if((stack_beg > other_stack_beg && stack_beg < other_stack_end) ||
+ (stack_end > other_stack_beg && stack_end < other_stack_end)) {
+
+ /* Print the other stack values before the abort */
+ if ( __kmp_storage_map )
+ __kmp_print_storage_map_gtid( -1, other_stack_beg, other_stack_end,
+ (size_t)TCR_PTR(f_th->th.th_info.ds.ds_stacksize),
+ "th_%d stack (overlapped)",
+ __kmp_gtid_from_thread( f_th ) );
+
+ __kmp_msg( kmp_ms_fatal, KMP_MSG( StackOverlap ), KMP_HNT( ChangeStackLimit ), __kmp_msg_null );
+ }
+ }
+ }
+ }
+ KA_TRACE(10,("__kmp_check_stack_overlap: returning\n"));
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_infinite_loop( void )
+{
+ static int done = FALSE;
+
+ while (! done) {
+ KMP_YIELD( 1 );
+ }
+}
+
+#define MAX_MESSAGE 512
+
+void
+__kmp_print_storage_map_gtid( int gtid, void *p1, void *p2, size_t size, char const *format, ...) {
+ char buffer[MAX_MESSAGE];
+ va_list ap;
+
+ va_start( ap, format);
+ KMP_SNPRINTF( buffer, sizeof(buffer), "OMP storage map: %p %p%8lu %s\n", p1, p2, (unsigned long) size, format );
+ __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
+ __kmp_vprintf( kmp_err, buffer, ap );
+#if KMP_PRINT_DATA_PLACEMENT
+ int node;
+ if(gtid >= 0) {
+ if(p1 <= p2 && (char*)p2 - (char*)p1 == size) {
+ if( __kmp_storage_map_verbose ) {
+ node = __kmp_get_host_node(p1);
+ if(node < 0) /* doesn't work, so don't try this next time */
+ __kmp_storage_map_verbose = FALSE;
+ else {
+ char *last;
+ int lastNode;
+ int localProc = __kmp_get_cpu_from_gtid(gtid);
+
+ p1 = (void *)( (size_t)p1 & ~((size_t)PAGE_SIZE - 1) );
+ p2 = (void *)( ((size_t) p2 - 1) & ~((size_t)PAGE_SIZE - 1) );
+ if(localProc >= 0)
+ __kmp_printf_no_lock(" GTID %d localNode %d\n", gtid, localProc>>1);
+ else
+ __kmp_printf_no_lock(" GTID %d\n", gtid);
+# if KMP_USE_PRCTL
+/* The more elaborate format is disabled for now because of the prctl hanging bug. */
+ do {
+ last = p1;
+ lastNode = node;
+ /* This loop collates adjacent pages with the same host node. */
+ do {
+ (char*)p1 += PAGE_SIZE;
+ } while(p1 <= p2 && (node = __kmp_get_host_node(p1)) == lastNode);
+ __kmp_printf_no_lock(" %p-%p memNode %d\n", last,
+ (char*)p1 - 1, lastNode);
+ } while(p1 <= p2);
+# else
+ __kmp_printf_no_lock(" %p-%p memNode %d\n", p1,
+ (char*)p1 + (PAGE_SIZE - 1), __kmp_get_host_node(p1));
+ if(p1 < p2) {
+ __kmp_printf_no_lock(" %p-%p memNode %d\n", p2,
+ (char*)p2 + (PAGE_SIZE - 1), __kmp_get_host_node(p2));
+ }
+# endif
+ }
+ }
+ } else
+ __kmp_printf_no_lock(" %s\n", KMP_I18N_STR( StorageMapWarning ) );
+ }
+#endif /* KMP_PRINT_DATA_PLACEMENT */
+ __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
+}
+
+void
+__kmp_warn( char const * format, ... )
+{
+ char buffer[MAX_MESSAGE];
+ va_list ap;
+
+ if ( __kmp_generate_warnings == kmp_warnings_off ) {
+ return;
+ }
+
+ va_start( ap, format );
+
+ KMP_SNPRINTF( buffer, sizeof(buffer) , "OMP warning: %s\n", format );
+ __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
+ __kmp_vprintf( kmp_err, buffer, ap );
+ __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
+
+ va_end( ap );
+}
+
+void
+__kmp_abort_process()
+{
+
+ // Later threads may stall here, but that's ok because abort() will kill them.
+ __kmp_acquire_bootstrap_lock( & __kmp_exit_lock );
+
+ if ( __kmp_debug_buf ) {
+ __kmp_dump_debug_buffer();
+ }; // if
+
+ if ( KMP_OS_WINDOWS ) {
+ // Let other threads know of abnormal termination and prevent deadlock
+ // if abort happened during library initialization or shutdown
+ __kmp_global.g.g_abort = SIGABRT;
+
+ /*
+ On Windows* OS by default abort() causes pop-up error box, which stalls nightly testing.
+ Unfortunately, we cannot reliably suppress pop-up error boxes. _set_abort_behavior()
+ works well, but this function is not available in VS7 (this is not problem for DLL, but
+ it is a problem for static OpenMP RTL). SetErrorMode (and so, timelimit utility) does
+ not help, at least in some versions of MS C RTL.
+
+ It seems following sequence is the only way to simulate abort() and avoid pop-up error
+ box.
+ */
+ raise( SIGABRT );
+ _exit( 3 ); // Just in case, if signal ignored, exit anyway.
+ } else {
+ abort();
+ }; // if
+
+ __kmp_infinite_loop();
+ __kmp_release_bootstrap_lock( & __kmp_exit_lock );
+
+} // __kmp_abort_process
+
+void
+__kmp_abort_thread( void )
+{
+ // TODO: Eliminate g_abort global variable and this function.
+ // In case of abort just call abort(), it will kill all the threads.
+ __kmp_infinite_loop();
+} // __kmp_abort_thread
+
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Print out the storage map for the major kmp_info_t thread data structures
+ * that are allocated together.
+ */
+
+static void
+__kmp_print_thread_storage_map( kmp_info_t *thr, int gtid )
+{
+ __kmp_print_storage_map_gtid( gtid, thr, thr + 1, sizeof(kmp_info_t), "th_%d", gtid );
+
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_info, &thr->th.th_team, sizeof(kmp_desc_t),
+ "th_%d.th_info", gtid );
+
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_local, &thr->th.th_pri_head, sizeof(kmp_local_t),
+ "th_%d.th_local", gtid );
+
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_bar[0], &thr->th.th_bar[bs_last_barrier],
+ sizeof(kmp_balign_t) * bs_last_barrier, "th_%d.th_bar", gtid );
+
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_bar[bs_plain_barrier],
+ &thr->th.th_bar[bs_plain_barrier+1],
+ sizeof(kmp_balign_t), "th_%d.th_bar[plain]", gtid);
+
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_bar[bs_forkjoin_barrier],
+ &thr->th.th_bar[bs_forkjoin_barrier+1],
+ sizeof(kmp_balign_t), "th_%d.th_bar[forkjoin]", gtid);
+
+ #if KMP_FAST_REDUCTION_BARRIER
+ __kmp_print_storage_map_gtid( gtid, &thr->th.th_bar[bs_reduction_barrier],
+ &thr->th.th_bar[bs_reduction_barrier+1],
+ sizeof(kmp_balign_t), "th_%d.th_bar[reduction]", gtid);
+ #endif // KMP_FAST_REDUCTION_BARRIER
+}
+
+/*
+ * Print out the storage map for the major kmp_team_t team data structures
+ * that are allocated together.
+ */
+
+static void
+__kmp_print_team_storage_map( const char *header, kmp_team_t *team, int team_id, int num_thr )
+{
+ int num_disp_buff = team->t.t_max_nproc > 1 ? __kmp_dispatch_num_buffers : 2;
+ __kmp_print_storage_map_gtid( -1, team, team + 1, sizeof(kmp_team_t), "%s_%d",
+ header, team_id );
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_bar[0], &team->t.t_bar[bs_last_barrier],
+ sizeof(kmp_balign_team_t) * bs_last_barrier, "%s_%d.t_bar", header, team_id );
+
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_bar[bs_plain_barrier], &team->t.t_bar[bs_plain_barrier+1],
+ sizeof(kmp_balign_team_t), "%s_%d.t_bar[plain]", header, team_id );
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_bar[bs_forkjoin_barrier], &team->t.t_bar[bs_forkjoin_barrier+1],
+ sizeof(kmp_balign_team_t), "%s_%d.t_bar[forkjoin]", header, team_id );
+
+ #if KMP_FAST_REDUCTION_BARRIER
+ __kmp_print_storage_map_gtid( -1, &team->t.t_bar[bs_reduction_barrier], &team->t.t_bar[bs_reduction_barrier+1],
+ sizeof(kmp_balign_team_t), "%s_%d.t_bar[reduction]", header, team_id );
+ #endif // KMP_FAST_REDUCTION_BARRIER
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_dispatch[0], &team->t.t_dispatch[num_thr],
+ sizeof(kmp_disp_t) * num_thr, "%s_%d.t_dispatch", header, team_id );
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_threads[0], &team->t.t_threads[num_thr],
+ sizeof(kmp_info_t *) * num_thr, "%s_%d.t_threads", header, team_id );
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_disp_buffer[0], &team->t.t_disp_buffer[num_disp_buff],
+ sizeof(dispatch_shared_info_t) * num_disp_buff, "%s_%d.t_disp_buffer",
+ header, team_id );
+
+
+ __kmp_print_storage_map_gtid( -1, &team->t.t_taskq, &team->t.t_copypriv_data,
+ sizeof(kmp_taskq_t), "%s_%d.t_taskq", header, team_id );
+}
+
+static void __kmp_init_allocator() {}
+static void __kmp_fini_allocator() {}
+
+/* ------------------------------------------------------------------------ */
+
+#ifdef KMP_DYNAMIC_LIB
+# if KMP_OS_WINDOWS
+
+static void
+__kmp_reset_lock( kmp_bootstrap_lock_t* lck ) {
+ // TODO: Change to __kmp_break_bootstrap_lock().
+ __kmp_init_bootstrap_lock( lck ); // make the lock released
+}
+
+static void
+__kmp_reset_locks_on_process_detach( int gtid_req ) {
+ int i;
+ int thread_count;
+
+ // PROCESS_DETACH is expected to be called by a thread
+ // that executes ProcessExit() or FreeLibrary().
+ // OS terminates other threads (except the one calling ProcessExit or FreeLibrary).
+ // So, it might be safe to access the __kmp_threads[] without taking the forkjoin_lock.
+ // However, in fact, some threads can be still alive here, although being about to be terminated.
+ // The threads in the array with ds_thread==0 are most suspicious.
+ // Actually, it can be not safe to access the __kmp_threads[].
+
+ // TODO: does it make sense to check __kmp_roots[] ?
+
+ // Let's check that there are no other alive threads registered with the OMP lib.
+ while( 1 ) {
+ thread_count = 0;
+ for( i = 0; i < __kmp_threads_capacity; ++i ) {
+ if( !__kmp_threads ) continue;
+ kmp_info_t* th = __kmp_threads[ i ];
+ if( th == NULL ) continue;
+ int gtid = th->th.th_info.ds.ds_gtid;
+ if( gtid == gtid_req ) continue;
+ if( gtid < 0 ) continue;
+ DWORD exit_val;
+ int alive = __kmp_is_thread_alive( th, &exit_val );
+ if( alive ) {
+ ++thread_count;
+ }
+ }
+ if( thread_count == 0 ) break; // success
+ }
+
+ // Assume that I'm alone.
+
+ // Now it might be probably safe to check and reset locks.
+ // __kmp_forkjoin_lock and __kmp_stdio_lock are expected to be reset.
+ __kmp_reset_lock( &__kmp_forkjoin_lock );
+ #ifdef KMP_DEBUG
+ __kmp_reset_lock( &__kmp_stdio_lock );
+ #endif // KMP_DEBUG
+}
+
+BOOL WINAPI
+DllMain( HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved ) {
+ //__kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+
+ switch( fdwReason ) {
+
+ case DLL_PROCESS_ATTACH:
+ KA_TRACE( 10, ("DllMain: PROCESS_ATTACH\n" ));
+
+ return TRUE;
+
+ case DLL_PROCESS_DETACH:
+ KA_TRACE( 10, ("DllMain: PROCESS_DETACH T#%d\n",
+ __kmp_gtid_get_specific() ));
+
+ if( lpReserved != NULL )
+ {
+ // lpReserved is used for telling the difference:
+ // lpReserved == NULL when FreeLibrary() was called,
+ // lpReserved != NULL when the process terminates.
+ // When FreeLibrary() is called, worker threads remain alive.
+ // So they will release the forkjoin lock by themselves.
+ // When the process terminates, worker threads disappear triggering
+ // the problem of unreleased forkjoin lock as described below.
+
+ // A worker thread can take the forkjoin lock.
+ // The problem comes up if that worker thread becomes dead
+ // before it releases the forkjoin lock.
+ // The forkjoin lock remains taken, while the thread
+ // executing DllMain()->PROCESS_DETACH->__kmp_internal_end_library() below
+ // will try to take the forkjoin lock and will always fail,
+ // so that the application will never finish [normally].
+ // This scenario is possible if __kmpc_end() has not been executed.
+ // It looks like it's not a corner case, but common cases:
+ // - the main function was compiled by an alternative compiler;
+ // - the main function was compiled by icl but without /Qopenmp (application with plugins);
+ // - application terminates by calling C exit(), Fortran CALL EXIT() or Fortran STOP.
+ // - alive foreign thread prevented __kmpc_end from doing cleanup.
+
+ // This is a hack to work around the problem.
+ // TODO: !!! to figure out something better.
+ __kmp_reset_locks_on_process_detach( __kmp_gtid_get_specific() );
+ }
+
+ __kmp_internal_end_library( __kmp_gtid_get_specific() );
+
+ return TRUE;
+
+ case DLL_THREAD_ATTACH:
+ KA_TRACE( 10, ("DllMain: THREAD_ATTACH\n" ));
+
+ /* if we wanted to register new siblings all the time here call
+ * __kmp_get_gtid(); */
+ return TRUE;
+
+ case DLL_THREAD_DETACH:
+ KA_TRACE( 10, ("DllMain: THREAD_DETACH T#%d\n",
+ __kmp_gtid_get_specific() ));
+
+ __kmp_internal_end_thread( __kmp_gtid_get_specific() );
+ return TRUE;
+ }
+
+ return TRUE;
+}
+
+# endif /* KMP_OS_WINDOWS */
+#endif /* KMP_DYNAMIC_LIB */
+
+
+/* ------------------------------------------------------------------------ */
+
+/* Change the library type to "status" and return the old type */
+/* called from within initialization routines where __kmp_initz_lock is held */
+int
+__kmp_change_library( int status )
+{
+ int old_status;
+
+ old_status = __kmp_yield_init & 1; // check whether KMP_LIBRARY=throughput (even init count)
+
+ if (status) {
+ __kmp_yield_init |= 1; // throughput => turnaround (odd init count)
+ }
+ else {
+ __kmp_yield_init &= ~1; // turnaround => throughput (even init count)
+ }
+
+ return old_status; // return previous setting of whether KMP_LIBRARY=throughput
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* __kmp_parallel_deo --
+ * Wait until it's our turn.
+ */
+void
+__kmp_parallel_deo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ int gtid = *gtid_ref;
+#ifdef BUILD_PARALLEL_ORDERED
+ kmp_team_t *team = __kmp_team_from_gtid( gtid );
+#endif /* BUILD_PARALLEL_ORDERED */
+
+ if( __kmp_env_consistency_check ) {
+ if( __kmp_threads[gtid]->th.th_root->r.r_active )
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_push_sync( gtid, ct_ordered_in_parallel, loc_ref, NULL, 0 );
+#else
+ __kmp_push_sync( gtid, ct_ordered_in_parallel, loc_ref, NULL );
+#endif
+ }
+#ifdef BUILD_PARALLEL_ORDERED
+ if( !team->t.t_serialized ) {
+ KMP_MB();
+ KMP_WAIT_YIELD(&team->t.t_ordered.dt.t_value, __kmp_tid_from_gtid( gtid ), KMP_EQ, NULL);
+ KMP_MB();
+ }
+#endif /* BUILD_PARALLEL_ORDERED */
+}
+
+/* __kmp_parallel_dxo --
+ * Signal the next task.
+ */
+
+void
+__kmp_parallel_dxo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ int gtid = *gtid_ref;
+#ifdef BUILD_PARALLEL_ORDERED
+ int tid = __kmp_tid_from_gtid( gtid );
+ kmp_team_t *team = __kmp_team_from_gtid( gtid );
+#endif /* BUILD_PARALLEL_ORDERED */
+
+ if( __kmp_env_consistency_check ) {
+ if( __kmp_threads[gtid]->th.th_root->r.r_active )
+ __kmp_pop_sync( gtid, ct_ordered_in_parallel, loc_ref );
+ }
+#ifdef BUILD_PARALLEL_ORDERED
+ if ( ! team->t.t_serialized ) {
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* use the tid of the next thread in this team */
+ /* TODO repleace with general release procedure */
+ team->t.t_ordered.dt.t_value = ((tid + 1) % team->t.t_nproc );
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_release_ordered)) {
+ /* accept blame for "ordered" waiting */
+ kmp_info_t *this_thread = __kmp_threads[gtid];
+ ompt_callbacks.ompt_callback(ompt_event_release_ordered)(
+ this_thread->th.ompt_thread_info.wait_id);
+ }
+#endif
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+#endif /* BUILD_PARALLEL_ORDERED */
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* The BARRIER for a SINGLE process section is always explicit */
+
+int
+__kmp_enter_single( int gtid, ident_t *id_ref, int push_ws )
+{
+ int status;
+ kmp_info_t *th;
+ kmp_team_t *team;
+
+ if( ! TCR_4(__kmp_init_parallel) )
+ __kmp_parallel_initialize();
+
+ th = __kmp_threads[ gtid ];
+ team = th->th.th_team;
+ status = 0;
+
+ th->th.th_ident = id_ref;
+
+ if ( team->t.t_serialized ) {
+ status = 1;
+ } else {
+ kmp_int32 old_this = th->th.th_local.this_construct;
+
+ ++th->th.th_local.this_construct;
+ /* try to set team count to thread count--success means thread got the
+ single block
+ */
+ /* TODO: Should this be acquire or release? */
+ if (team->t.t_construct == old_this) {
+ status = KMP_COMPARE_AND_STORE_ACQ32(&team->t.t_construct, old_this,
+ th->th.th_local.this_construct);
+ }
+#if USE_ITT_BUILD
+ if ( __itt_metadata_add_ptr && __kmp_forkjoin_frames_mode == 3 && KMP_MASTER_GTID(gtid) &&
+#if OMP_40_ENABLED
+ th->th.th_teams_microtask == NULL &&
+#endif
+ team->t.t_active_level == 1 )
+ { // Only report metadata by master of active team at level 1
+ __kmp_itt_metadata_single( id_ref );
+ }
+#endif /* USE_ITT_BUILD */
+ }
+
+ if( __kmp_env_consistency_check ) {
+ if (status && push_ws) {
+ __kmp_push_workshare( gtid, ct_psingle, id_ref );
+ } else {
+ __kmp_check_workshare( gtid, ct_psingle, id_ref );
+ }
+ }
+#if USE_ITT_BUILD
+ if ( status ) {
+ __kmp_itt_single_start( gtid );
+ }
+#endif /* USE_ITT_BUILD */
+ return status;
+}
+
+void
+__kmp_exit_single( int gtid )
+{
+#if USE_ITT_BUILD
+ __kmp_itt_single_end( gtid );
+#endif /* USE_ITT_BUILD */
+ if( __kmp_env_consistency_check )
+ __kmp_pop_workshare( gtid, ct_psingle, NULL );
+}
+
+
+/*
+ * determine if we can go parallel or must use a serialized parallel region and
+ * how many threads we can use
+ * set_nproc is the number of threads requested for the team
+ * returns 0 if we should serialize or only use one thread,
+ * otherwise the number of threads to use
+ * The forkjoin lock is held by the caller.
+ */
+static int
+__kmp_reserve_threads( kmp_root_t *root, kmp_team_t *parent_team,
+ int master_tid, int set_nthreads
+#if OMP_40_ENABLED
+ , int enter_teams
+#endif /* OMP_40_ENABLED */
+)
+{
+ int capacity;
+ int new_nthreads;
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ KMP_DEBUG_ASSERT( root && parent_team );
+
+ //
+ // If dyn-var is set, dynamically adjust the number of desired threads,
+ // according to the method specified by dynamic_mode.
+ //
+ new_nthreads = set_nthreads;
+ if ( ! get__dynamic_2( parent_team, master_tid ) ) {
+ ;
+ }
+#ifdef USE_LOAD_BALANCE
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_load_balance ) {
+ new_nthreads = __kmp_load_balance_nproc( root, set_nthreads );
+ if ( new_nthreads == 1 ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d load balance reduced reservation to 1 thread\n",
+ master_tid ));
+ return 1;
+ }
+ if ( new_nthreads < set_nthreads ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d load balance reduced reservation to %d threads\n",
+ master_tid, new_nthreads ));
+ }
+ }
+#endif /* USE_LOAD_BALANCE */
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_thread_limit ) {
+ new_nthreads = __kmp_avail_proc - __kmp_nth + (root->r.r_active ? 1
+ : root->r.r_hot_team->t.t_nproc);
+ if ( new_nthreads <= 1 ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d thread limit reduced reservation to 1 thread\n",
+ master_tid ));
+ return 1;
+ }
+ if ( new_nthreads < set_nthreads ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d thread limit reduced reservation to %d threads\n",
+ master_tid, new_nthreads ));
+ }
+ else {
+ new_nthreads = set_nthreads;
+ }
+ }
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_random ) {
+ if ( set_nthreads > 2 ) {
+ new_nthreads = __kmp_get_random( parent_team->t.t_threads[master_tid] );
+ new_nthreads = ( new_nthreads % set_nthreads ) + 1;
+ if ( new_nthreads == 1 ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d dynamic random reduced reservation to 1 thread\n",
+ master_tid ));
+ return 1;
+ }
+ if ( new_nthreads < set_nthreads ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d dynamic random reduced reservation to %d threads\n",
+ master_tid, new_nthreads ));
+ }
+ }
+ }
+ else {
+ KMP_ASSERT( 0 );
+ }
+
+ //
+ // Respect KMP_ALL_THREADS, KMP_MAX_THREADS, OMP_THREAD_LIMIT.
+ //
+ if ( __kmp_nth + new_nthreads - ( root->r.r_active ? 1 :
+ root->r.r_hot_team->t.t_nproc ) > __kmp_max_nth ) {
+ int tl_nthreads = __kmp_max_nth - __kmp_nth + ( root->r.r_active ? 1 :
+ root->r.r_hot_team->t.t_nproc );
+ if ( tl_nthreads <= 0 ) {
+ tl_nthreads = 1;
+ }
+
+ //
+ // If dyn-var is false, emit a 1-time warning.
+ //
+ if ( ! get__dynamic_2( parent_team, master_tid )
+ && ( ! __kmp_reserve_warn ) ) {
+ __kmp_reserve_warn = 1;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantFormThrTeam, set_nthreads, tl_nthreads ),
+ KMP_HNT( Unset_ALL_THREADS ),
+ __kmp_msg_null
+ );
+ }
+ if ( tl_nthreads == 1 ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d KMP_ALL_THREADS reduced reservation to 1 thread\n",
+ master_tid ));
+ return 1;
+ }
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d KMP_ALL_THREADS reduced reservation to %d threads\n",
+ master_tid, tl_nthreads ));
+ new_nthreads = tl_nthreads;
+ }
+
+ //
+ // Check if the threads array is large enough, or needs expanding.
+ //
+ // See comment in __kmp_register_root() about the adjustment if
+ // __kmp_threads[0] == NULL.
+ //
+ capacity = __kmp_threads_capacity;
+ if ( TCR_PTR(__kmp_threads[0]) == NULL ) {
+ --capacity;
+ }
+ if ( __kmp_nth + new_nthreads - ( root->r.r_active ? 1 :
+ root->r.r_hot_team->t.t_nproc ) > capacity ) {
+ //
+ // Expand the threads array.
+ //
+ int slotsRequired = __kmp_nth + new_nthreads - ( root->r.r_active ? 1 :
+ root->r.r_hot_team->t.t_nproc ) - capacity;
+ int slotsAdded = __kmp_expand_threads(slotsRequired, slotsRequired);
+ if ( slotsAdded < slotsRequired ) {
+ //
+ // The threads array was not expanded enough.
+ //
+ new_nthreads -= ( slotsRequired - slotsAdded );
+ KMP_ASSERT( new_nthreads >= 1 );
+
+ //
+ // If dyn-var is false, emit a 1-time warning.
+ //
+ if ( ! get__dynamic_2( parent_team, master_tid )
+ && ( ! __kmp_reserve_warn ) ) {
+ __kmp_reserve_warn = 1;
+ if ( __kmp_tp_cached ) {
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantFormThrTeam, set_nthreads, new_nthreads ),
+ KMP_HNT( Set_ALL_THREADPRIVATE, __kmp_tp_capacity ),
+ KMP_HNT( PossibleSystemLimitOnThreads ),
+ __kmp_msg_null
+ );
+ }
+ else {
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantFormThrTeam, set_nthreads, new_nthreads ),
+ KMP_HNT( SystemLimitOnThreads ),
+ __kmp_msg_null
+ );
+ }
+ }
+ }
+ }
+
+ if ( new_nthreads == 1 ) {
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d serializing team after reclaiming dead roots and rechecking; requested %d threads\n",
+ __kmp_get_gtid(), set_nthreads ) );
+ return 1;
+ }
+
+ KC_TRACE( 10, ( "__kmp_reserve_threads: T#%d allocating %d threads; requested %d threads\n",
+ __kmp_get_gtid(), new_nthreads, set_nthreads ));
+ return new_nthreads;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* allocate threads from the thread pool and assign them to the new team */
+/* we are assured that there are enough threads available, because we
+ * checked on that earlier within critical section forkjoin */
+
+static void
+__kmp_fork_team_threads( kmp_root_t *root, kmp_team_t *team,
+ kmp_info_t *master_th, int master_gtid )
+{
+ int i;
+ int use_hot_team;
+
+ KA_TRACE( 10, ("__kmp_fork_team_threads: new_nprocs = %d\n", team->t.t_nproc ) );
+ KMP_DEBUG_ASSERT( master_gtid == __kmp_get_gtid() );
+ KMP_MB();
+
+ /* first, let's setup the master thread */
+ master_th->th.th_info.ds.ds_tid = 0;
+ master_th->th.th_team = team;
+ master_th->th.th_team_nproc = team->t.t_nproc;
+ master_th->th.th_team_master = master_th;
+ master_th->th.th_team_serialized = FALSE;
+ master_th->th.th_dispatch = & team->t.t_dispatch[ 0 ];
+
+ /* make sure we are not the optimized hot team */
+#if KMP_NESTED_HOT_TEAMS
+ use_hot_team = 0;
+ kmp_hot_team_ptr_t *hot_teams = master_th->th.th_hot_teams;
+ if( hot_teams ) { // hot teams array is not allocated if KMP_HOT_TEAMS_MAX_LEVEL=0
+ int level = team->t.t_active_level - 1; // index in array of hot teams
+ if( master_th->th.th_teams_microtask ) { // are we inside the teams?
+ if( master_th->th.th_teams_size.nteams > 1 ) {
+ ++level; // level was not increased in teams construct for team_of_masters
+ }
+ if( team->t.t_pkfn != (microtask_t)__kmp_teams_master &&
+ master_th->th.th_teams_level == team->t.t_level ) {
+ ++level; // level was not increased in teams construct for team_of_workers before the parallel
+ } // team->t.t_level will be increased inside parallel
+ }
+ if( level < __kmp_hot_teams_max_level ) {
+ if( hot_teams[level].hot_team ) {
+ // hot team has already been allocated for given level
+ KMP_DEBUG_ASSERT(hot_teams[level].hot_team == team);
+ use_hot_team = 1; // the team is ready to use
+ } else {
+ use_hot_team = 0; // AC: threads are not allocated yet
+ hot_teams[level].hot_team = team; // remember new hot team
+ hot_teams[level].hot_team_nth = team->t.t_nproc;
+ }
+ } else {
+ use_hot_team = 0;
+ }
+ }
+#else
+ use_hot_team = team == root->r.r_hot_team;
+#endif
+ if ( !use_hot_team ) {
+
+ /* install the master thread */
+ team->t.t_threads[ 0 ] = master_th;
+ __kmp_initialize_info( master_th, team, 0, master_gtid );
+
+ /* now, install the worker threads */
+ for ( i=1 ; i < team->t.t_nproc ; i++ ) {
+
+ /* fork or reallocate a new thread and install it in team */
+ kmp_info_t *thr = __kmp_allocate_thread( root, team, i );
+ team->t.t_threads[ i ] = thr;
+ KMP_DEBUG_ASSERT( thr );
+ KMP_DEBUG_ASSERT( thr->th.th_team == team );
+ /* align team and thread arrived states */
+ KA_TRACE( 20, ("__kmp_fork_team_threads: T#%d(%d:%d) init arrived T#%d(%d:%d) join =%llu, plain=%llu\n",
+ __kmp_gtid_from_tid( 0, team ), team->t.t_id, 0,
+ __kmp_gtid_from_tid( i, team ), team->t.t_id, i,
+ team->t.t_bar[ bs_forkjoin_barrier ].b_arrived,
+ team->t.t_bar[ bs_plain_barrier ].b_arrived ) );
+#if OMP_40_ENABLED
+ thr->th.th_teams_microtask = master_th->th.th_teams_microtask;
+ thr->th.th_teams_level = master_th->th.th_teams_level;
+ thr->th.th_teams_size = master_th->th.th_teams_size;
+#endif
+ { // Initialize threads' barrier data.
+ int b;
+ kmp_balign_t * balign = team->t.t_threads[ i ]->th.th_bar;
+ for ( b = 0; b < bs_last_barrier; ++ b ) {
+ balign[ b ].bb.b_arrived = team->t.t_bar[ b ].b_arrived;
+ KMP_DEBUG_ASSERT(balign[b].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#if USE_DEBUGGER
+ balign[ b ].bb.b_worker_arrived = team->t.t_bar[ b ].b_team_arrived;
+#endif
+ }; // for b
+ }
+ }
+
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ __kmp_partition_places( team );
+#endif
+
+ }
+
+ KMP_MB();
+}
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+//
+// Propagate any changes to the floating point control registers out to the team
+// We try to avoid unnecessary writes to the relevant cache line in the team structure,
+// so we don't make changes unless they are needed.
+//
+inline static void
+propagateFPControl(kmp_team_t * team)
+{
+ if ( __kmp_inherit_fp_control ) {
+ kmp_int16 x87_fpu_control_word;
+ kmp_uint32 mxcsr;
+
+ // Get master values of FPU control flags (both X87 and vector)
+ __kmp_store_x87_fpu_control_word( &x87_fpu_control_word );
+ __kmp_store_mxcsr( &mxcsr );
+ mxcsr &= KMP_X86_MXCSR_MASK;
+
+ // There is no point looking at t_fp_control_saved here.
+ // If it is TRUE, we still have to update the values if they are different from those we now have.
+ // If it is FALSE we didn't save anything yet, but our objective is the same. We have to ensure
+ // that the values in the team are the same as those we have.
+ // So, this code achieves what we need whether or not t_fp_control_saved is true.
+ // By checking whether the value needs updating we avoid unnecessary writes that would put the
+ // cache-line into a written state, causing all threads in the team to have to read it again.
+ KMP_CHECK_UPDATE(team->t.t_x87_fpu_control_word, x87_fpu_control_word);
+ KMP_CHECK_UPDATE(team->t.t_mxcsr, mxcsr);
+ // Although we don't use this value, other code in the runtime wants to know whether it should restore them.
+ // So we must ensure it is correct.
+ KMP_CHECK_UPDATE(team->t.t_fp_control_saved, TRUE);
+ }
+ else {
+ // Similarly here. Don't write to this cache-line in the team structure unless we have to.
+ KMP_CHECK_UPDATE(team->t.t_fp_control_saved, FALSE);
+ }
+}
+
+// Do the opposite, setting the hardware registers to the updated values from the team.
+inline static void
+updateHWFPControl(kmp_team_t * team)
+{
+ if ( __kmp_inherit_fp_control && team->t.t_fp_control_saved ) {
+ //
+ // Only reset the fp control regs if they have been changed in the team.
+ // the parallel region that we are exiting.
+ //
+ kmp_int16 x87_fpu_control_word;
+ kmp_uint32 mxcsr;
+ __kmp_store_x87_fpu_control_word( &x87_fpu_control_word );
+ __kmp_store_mxcsr( &mxcsr );
+ mxcsr &= KMP_X86_MXCSR_MASK;
+
+ if ( team->t.t_x87_fpu_control_word != x87_fpu_control_word ) {
+ __kmp_clear_x87_fpu_status_word();
+ __kmp_load_x87_fpu_control_word( &team->t.t_x87_fpu_control_word );
+ }
+
+ if ( team->t.t_mxcsr != mxcsr ) {
+ __kmp_load_mxcsr( &team->t.t_mxcsr );
+ }
+ }
+}
+#else
+# define propagateFPControl(x) ((void)0)
+# define updateHWFPControl(x) ((void)0)
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+static void
+__kmp_alloc_argv_entries( int argc, kmp_team_t *team, int realloc ); // forward declaration
+
+/*
+ * Run a parallel region that has been serialized, so runs only in a team of the single master thread.
+ */
+void
+__kmp_serialized_parallel(ident_t *loc, kmp_int32 global_tid)
+{
+ kmp_info_t *this_thr;
+ kmp_team_t *serial_team;
+
+ KC_TRACE( 10, ("__kmpc_serialized_parallel: called by T#%d\n", global_tid ) );
+
+ /* Skip all this code for autopar serialized loops since it results in
+ unacceptable overhead */
+ if( loc != NULL && (loc->flags & KMP_IDENT_AUTOPAR ) )
+ return;
+
+ if( ! TCR_4( __kmp_init_parallel ) )
+ __kmp_parallel_initialize();
+
+ this_thr = __kmp_threads[ global_tid ];
+ serial_team = this_thr->th.th_serial_team;
+
+ /* utilize the serialized team held by this thread */
+ KMP_DEBUG_ASSERT( serial_team );
+ KMP_MB();
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KMP_DEBUG_ASSERT(this_thr->th.th_task_team == this_thr->th.th_team->t.t_task_team[this_thr->th.th_task_state]);
+ KMP_DEBUG_ASSERT( serial_team->t.t_task_team[this_thr->th.th_task_state] == NULL );
+ KA_TRACE( 20, ( "__kmpc_serialized_parallel: T#%d pushing task_team %p / team %p, new task_team = NULL\n",
+ global_tid, this_thr->th.th_task_team, this_thr->th.th_team ) );
+ this_thr->th.th_task_team = NULL;
+ }
+
+#if OMP_40_ENABLED
+ kmp_proc_bind_t proc_bind = this_thr->th.th_set_proc_bind;
+ if ( this_thr->th.th_current_task->td_icvs.proc_bind == proc_bind_false ) {
+ proc_bind = proc_bind_false;
+ }
+ else if ( proc_bind == proc_bind_default ) {
+ //
+ // No proc_bind clause was specified, so use the current value
+ // of proc-bind-var for this parallel region.
+ //
+ proc_bind = this_thr->th.th_current_task->td_icvs.proc_bind;
+ }
+ //
+ // Reset for next parallel region
+ //
+ this_thr->th.th_set_proc_bind = proc_bind_default;
+#endif /* OMP_40_ENABLED */
+
+ if( this_thr->th.th_team != serial_team ) {
+ // Nested level will be an index in the nested nthreads array
+ int level = this_thr->th.th_team->t.t_level;
+
+ if( serial_team->t.t_serialized ) {
+ /* this serial team was already used
+ * TODO increase performance by making this locks more specific */
+ kmp_team_t *new_team;
+
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id = __ompt_parallel_id_new(global_tid);
+#endif
+
+ new_team = __kmp_allocate_team(this_thr->th.th_root, 1, 1,
+#if OMPT_SUPPORT
+ ompt_parallel_id,
+#endif
+#if OMP_40_ENABLED
+ proc_bind,
+#endif
+ & this_thr->th.th_current_task->td_icvs,
+ 0 USE_NESTED_HOT_ARG(NULL) );
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ KMP_ASSERT( new_team );
+
+ /* setup new serialized team and install it */
+ new_team->t.t_threads[0] = this_thr;
+ new_team->t.t_parent = this_thr->th.th_team;
+ serial_team = new_team;
+ this_thr->th.th_serial_team = serial_team;
+
+ KF_TRACE( 10, ( "__kmpc_serialized_parallel: T#%d allocated new serial team %p\n",
+ global_tid, serial_team ) );
+
+
+ /* TODO the above breaks the requirement that if we run out of
+ * resources, then we can still guarantee that serialized teams
+ * are ok, since we may need to allocate a new one */
+ } else {
+ KF_TRACE( 10, ( "__kmpc_serialized_parallel: T#%d reusing cached serial team %p\n",
+ global_tid, serial_team ) );
+ }
+
+ /* we have to initialize this serial team */
+ KMP_DEBUG_ASSERT( serial_team->t.t_threads );
+ KMP_DEBUG_ASSERT( serial_team->t.t_threads[0] == this_thr );
+ KMP_DEBUG_ASSERT( this_thr->th.th_team != serial_team );
+ serial_team->t.t_ident = loc;
+ serial_team->t.t_serialized = 1;
+ serial_team->t.t_nproc = 1;
+ serial_team->t.t_parent = this_thr->th.th_team;
+ serial_team->t.t_sched = this_thr->th.th_team->t.t_sched;
+ this_thr->th.th_team = serial_team;
+ serial_team->t.t_master_tid = this_thr->th.th_info.ds.ds_tid;
+
+ KF_TRACE( 10, ( "__kmpc_serialized_parallel: T#d curtask=%p\n",
+ global_tid, this_thr->th.th_current_task ) );
+ KMP_ASSERT( this_thr->th.th_current_task->td_flags.executing == 1 );
+ this_thr->th.th_current_task->td_flags.executing = 0;
+
+ __kmp_push_current_task_to_thread( this_thr, serial_team, 0 );
+
+ /* TODO: GEH: do the ICVs work for nested serialized teams? Don't we need an implicit task for
+ each serialized task represented by team->t.t_serialized? */
+ copy_icvs(
+ & this_thr->th.th_current_task->td_icvs,
+ & this_thr->th.th_current_task->td_parent->td_icvs );
+
+ // Thread value exists in the nested nthreads array for the next nested level
+ if ( __kmp_nested_nth.used && ( level + 1 < __kmp_nested_nth.used ) ) {
+ this_thr->th.th_current_task->td_icvs.nproc = __kmp_nested_nth.nth[ level + 1 ];
+ }
+
+#if OMP_40_ENABLED
+ if ( __kmp_nested_proc_bind.used && ( level + 1 < __kmp_nested_proc_bind.used ) ) {
+ this_thr->th.th_current_task->td_icvs.proc_bind
+ = __kmp_nested_proc_bind.bind_types[ level + 1 ];
+ }
+#endif /* OMP_40_ENABLED */
+
+#if USE_DEBUGGER
+ serial_team->t.t_pkfn = (microtask_t)( ~0 ); // For the debugger.
+#endif
+ this_thr->th.th_info.ds.ds_tid = 0;
+
+ /* set thread cache values */
+ this_thr->th.th_team_nproc = 1;
+ this_thr->th.th_team_master = this_thr;
+ this_thr->th.th_team_serialized = 1;
+
+ serial_team->t.t_level = serial_team->t.t_parent->t.t_level + 1;
+ serial_team->t.t_active_level = serial_team->t.t_parent->t.t_active_level;
+
+ propagateFPControl (serial_team);
+
+ /* check if we need to allocate dispatch buffers stack */
+ KMP_DEBUG_ASSERT(serial_team->t.t_dispatch);
+ if ( !serial_team->t.t_dispatch->th_disp_buffer ) {
+ serial_team->t.t_dispatch->th_disp_buffer = (dispatch_private_info_t *)
+ __kmp_allocate( sizeof( dispatch_private_info_t ) );
+ }
+ this_thr->th.th_dispatch = serial_team->t.t_dispatch;
+
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id = __ompt_parallel_id_new(global_tid);
+ __ompt_team_assign_id(serial_team, ompt_parallel_id);
+#endif
+
+ KMP_MB();
+
+ } else {
+ /* this serialized team is already being used,
+ * that's fine, just add another nested level */
+ KMP_DEBUG_ASSERT( this_thr->th.th_team == serial_team );
+ KMP_DEBUG_ASSERT( serial_team->t.t_threads );
+ KMP_DEBUG_ASSERT( serial_team->t.t_threads[0] == this_thr );
+ ++ serial_team->t.t_serialized;
+ this_thr->th.th_team_serialized = serial_team->t.t_serialized;
+
+ // Nested level will be an index in the nested nthreads array
+ int level = this_thr->th.th_team->t.t_level;
+ // Thread value exists in the nested nthreads array for the next nested level
+ if ( __kmp_nested_nth.used && ( level + 1 < __kmp_nested_nth.used ) ) {
+ this_thr->th.th_current_task->td_icvs.nproc = __kmp_nested_nth.nth[ level + 1 ];
+ }
+ serial_team->t.t_level++;
+ KF_TRACE( 10, ( "__kmpc_serialized_parallel: T#%d increasing nesting level of serial team %p to %d\n",
+ global_tid, serial_team, serial_team->t.t_level ) );
+
+ /* allocate/push dispatch buffers stack */
+ KMP_DEBUG_ASSERT(serial_team->t.t_dispatch);
+ {
+ dispatch_private_info_t * disp_buffer = (dispatch_private_info_t *)
+ __kmp_allocate( sizeof( dispatch_private_info_t ) );
+ disp_buffer->next = serial_team->t.t_dispatch->th_disp_buffer;
+ serial_team->t.t_dispatch->th_disp_buffer = disp_buffer;
+ }
+ this_thr->th.th_dispatch = serial_team->t.t_dispatch;
+
+ KMP_MB();
+ }
+
+ if ( __kmp_env_consistency_check )
+ __kmp_push_parallel( global_tid, NULL );
+
+}
+
+/* most of the work for a fork */
+/* return true if we really went parallel, false if serialized */
+int
+__kmp_fork_call(
+ ident_t * loc,
+ int gtid,
+ enum fork_context_e call_context, // Intel, GNU, ...
+ kmp_int32 argc,
+#if OMPT_SUPPORT
+ void *unwrapped_task,
+#endif
+ microtask_t microtask,
+ launch_t invoker,
+/* TODO: revert workaround for Intel(R) 64 tracker #96 */
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ va_list * ap
+#else
+ va_list ap
+#endif
+ )
+{
+ void **argv;
+ int i;
+ int master_tid;
+ int master_this_cons;
+ kmp_team_t *team;
+ kmp_team_t *parent_team;
+ kmp_info_t *master_th;
+ kmp_root_t *root;
+ int nthreads;
+ int master_active;
+ int master_set_numthreads;
+ int level;
+#if OMP_40_ENABLED
+ int active_level;
+ int teams_level;
+#endif
+#if KMP_NESTED_HOT_TEAMS
+ kmp_hot_team_ptr_t **p_hot_teams;
+#endif
+ { // KMP_TIME_BLOCK
+ KMP_TIME_DEVELOPER_BLOCK(KMP_fork_call);
+ KMP_COUNT_VALUE(OMP_PARALLEL_args, argc);
+
+ KA_TRACE( 20, ("__kmp_fork_call: enter T#%d\n", gtid ));
+ if ( __kmp_stkpadding > 0 && __kmp_root[gtid] != NULL ) {
+ /* Some systems prefer the stack for the root thread(s) to start with */
+ /* some gap from the parent stack to prevent false sharing. */
+ void *dummy = KMP_ALLOCA(__kmp_stkpadding);
+ /* These 2 lines below are so this does not get optimized out */
+ if ( __kmp_stkpadding > KMP_MAX_STKPADDING )
+ __kmp_stkpadding += (short)((kmp_int64)dummy);
+ }
+
+ /* initialize if needed */
+ KMP_DEBUG_ASSERT( __kmp_init_serial ); // AC: potentially unsafe, not in sync with shutdown
+ if( ! TCR_4(__kmp_init_parallel) )
+ __kmp_parallel_initialize();
+
+ /* setup current data */
+ master_th = __kmp_threads[ gtid ]; // AC: potentially unsafe, not in sync with shutdown
+ parent_team = master_th->th.th_team;
+ master_tid = master_th->th.th_info.ds.ds_tid;
+ master_this_cons = master_th->th.th_local.this_construct;
+ root = master_th->th.th_root;
+ master_active = root->r.r_active;
+ master_set_numthreads = master_th->th.th_set_nproc;
+
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id;
+ ompt_task_id_t ompt_task_id;
+ ompt_frame_t *ompt_frame;
+ ompt_task_id_t my_task_id;
+ ompt_parallel_id_t my_parallel_id;
+
+ if (ompt_enabled) {
+ ompt_parallel_id = __ompt_parallel_id_new(gtid);
+ ompt_task_id = __ompt_get_task_id_internal(0);
+ ompt_frame = __ompt_get_task_frame_internal(0);
+ }
+#endif
+
+ // Nested level will be an index in the nested nthreads array
+ level = parent_team->t.t_level;
+ active_level = parent_team->t.t_active_level; // is used to launch non-serial teams even if nested is not allowed
+#if OMP_40_ENABLED
+ teams_level = master_th->th.th_teams_level; // needed to check nesting inside the teams
+#endif
+#if KMP_NESTED_HOT_TEAMS
+ p_hot_teams = &master_th->th.th_hot_teams;
+ if( *p_hot_teams == NULL && __kmp_hot_teams_max_level > 0 ) {
+ *p_hot_teams = (kmp_hot_team_ptr_t*)__kmp_allocate(
+ sizeof(kmp_hot_team_ptr_t) * __kmp_hot_teams_max_level);
+ (*p_hot_teams)[0].hot_team = root->r.r_hot_team;
+ (*p_hot_teams)[0].hot_team_nth = 1; // it is either actual or not needed (when active_level > 0)
+ }
+#endif
+
+#if OMPT_SUPPORT
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_parallel_begin)) {
+ int team_size = master_set_numthreads;
+
+ ompt_callbacks.ompt_callback(ompt_event_parallel_begin)(
+ ompt_task_id, ompt_frame, ompt_parallel_id,
+ team_size, unwrapped_task, OMPT_INVOKER(call_context));
+ }
+#endif
+
+ master_th->th.th_ident = loc;
+
+#if OMP_40_ENABLED
+ if ( master_th->th.th_teams_microtask &&
+ ap && microtask != (microtask_t)__kmp_teams_master && level == teams_level ) {
+ // AC: This is start of parallel that is nested inside teams construct.
+ // The team is actual (hot), all workers are ready at the fork barrier.
+ // No lock needed to initialize the team a bit, then free workers.
+ parent_team->t.t_ident = loc;
+ __kmp_alloc_argv_entries( argc, parent_team, TRUE );
+ parent_team->t.t_argc = argc;
+ argv = (void**)parent_team->t.t_argv;
+ for( i=argc-1; i >= 0; --i )
+/* TODO: revert workaround for Intel(R) 64 tracker #96 */
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ *argv++ = va_arg( *ap, void * );
+#else
+ *argv++ = va_arg( ap, void * );
+#endif
+ /* Increment our nested depth levels, but not increase the serialization */
+ if ( parent_team == master_th->th.th_serial_team ) {
+ // AC: we are in serialized parallel
+ __kmpc_serialized_parallel(loc, gtid);
+ KMP_DEBUG_ASSERT( parent_team->t.t_serialized > 1 );
+ parent_team->t.t_serialized--; // AC: need this in order enquiry functions
+ // work correctly, will restore at join time
+
+#if OMPT_SUPPORT
+ void *dummy;
+ void **exit_runtime_p;
+
+ ompt_lw_taskteam_t lw_taskteam;
+
+ if (ompt_enabled) {
+ __ompt_lw_taskteam_init(&lw_taskteam, master_th, gtid,
+ unwrapped_task, ompt_parallel_id);
+ lw_taskteam.ompt_task_info.task_id = __ompt_task_id_new(gtid);
+ exit_runtime_p = &(lw_taskteam.ompt_task_info.frame.exit_runtime_frame);
+
+ __ompt_lw_taskteam_link(&lw_taskteam, master_th);
+
+#if OMPT_TRACE
+ /* OMPT implicit task begin */
+ my_task_id = lw_taskteam.ompt_task_info.task_id;
+ my_parallel_id = parent_team->t.ompt_team_info.parallel_id;
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+
+ /* OMPT state */
+ master_th->th.ompt_thread_info.state = ompt_state_work_parallel;
+ } else {
+ exit_runtime_p = &dummy;
+ }
+#endif
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ __kmp_invoke_microtask( microtask, gtid, 0, argc, parent_team->t.t_argv
+#if OMPT_SUPPORT
+ , exit_runtime_p
+#endif
+ );
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_TRACE
+ lw_taskteam.ompt_task_info.frame.exit_runtime_frame = 0;
+
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ ompt_parallel_id, ompt_task_id);
+ }
+
+ __ompt_lw_taskteam_unlink(master_th);
+ // reset clear the task id only after unlinking the task
+ lw_taskteam.ompt_task_info.task_id = ompt_task_id_none;
+#endif
+
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_parallel_end)(
+ ompt_parallel_id, ompt_task_id,
+ OMPT_INVOKER(call_context));
+ }
+ master_th->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+ return TRUE;
+ }
+
+ parent_team->t.t_pkfn = microtask;
+#if OMPT_SUPPORT
+ parent_team->t.ompt_team_info.microtask = unwrapped_task;
+#endif
+ parent_team->t.t_invoke = invoker;
+ KMP_TEST_THEN_INC32( (kmp_int32*) &root->r.r_in_parallel );
+ parent_team->t.t_active_level ++;
+ parent_team->t.t_level ++;
+
+ /* Change number of threads in the team if requested */
+ if ( master_set_numthreads ) { // The parallel has num_threads clause
+ if ( master_set_numthreads < master_th->th.th_teams_size.nth ) {
+ // AC: only can reduce the number of threads dynamically, cannot increase
+ kmp_info_t **other_threads = parent_team->t.t_threads;
+ parent_team->t.t_nproc = master_set_numthreads;
+ for ( i = 0; i < master_set_numthreads; ++i ) {
+ other_threads[i]->th.th_team_nproc = master_set_numthreads;
+ }
+ // Keep extra threads hot in the team for possible next parallels
+ }
+ master_th->th.th_set_nproc = 0;
+ }
+
+#if USE_DEBUGGER
+ if ( __kmp_debugging ) { // Let debugger override number of threads.
+ int nth = __kmp_omp_num_threads( loc );
+ if ( nth > 0 ) { // 0 means debugger does not want to change number of threads.
+ master_set_numthreads = nth;
+ }; // if
+ }; // if
+#endif
+
+ KF_TRACE( 10, ( "__kmp_fork_call: before internal fork: root=%p, team=%p, master_th=%p, gtid=%d\n", root, parent_team, master_th, gtid ) );
+ __kmp_internal_fork( loc, gtid, parent_team );
+ KF_TRACE( 10, ( "__kmp_fork_call: after internal fork: root=%p, team=%p, master_th=%p, gtid=%d\n", root, parent_team, master_th, gtid ) );
+
+ /* Invoke microtask for MASTER thread */
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d(%d:0) invoke microtask = %p\n",
+ gtid, parent_team->t.t_id, parent_team->t.t_pkfn ) );
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ if (! parent_team->t.t_invoke( gtid )) {
+ KMP_ASSERT2( 0, "cannot invoke microtask for MASTER thread" );
+ }
+ }
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d(%d:0) done microtask = %p\n",
+ gtid, parent_team->t.t_id, parent_team->t.t_pkfn ) );
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 20, ("__kmp_fork_call: parallel exit T#%d\n", gtid ));
+
+ return TRUE;
+ } // Parallel closely nested in teams construct
+#endif /* OMP_40_ENABLED */
+
+#if KMP_DEBUG
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KMP_DEBUG_ASSERT(master_th->th.th_task_team == parent_team->t.t_task_team[master_th->th.th_task_state]);
+ }
+#endif
+
+ if ( parent_team->t.t_active_level >= master_th->th.th_current_task->td_icvs.max_active_levels ) {
+ nthreads = 1;
+ } else {
+#if OMP_40_ENABLED
+ int enter_teams = ((ap==NULL && active_level==0)||(ap && teams_level>0 && teams_level==level));
+#endif
+ nthreads = master_set_numthreads ?
+ master_set_numthreads : get__nproc_2( parent_team, master_tid ); // TODO: get nproc directly from current task
+
+ // Check if we need to take forkjoin lock? (no need for serialized parallel out of teams construct).
+ // This code moved here from __kmp_reserve_threads() to speedup nested serialized parallels.
+ if (nthreads > 1) {
+ if ( ( !get__nested(master_th) && (root->r.r_in_parallel
+#if OMP_40_ENABLED
+ && !enter_teams
+#endif /* OMP_40_ENABLED */
+ ) ) || ( __kmp_library == library_serial ) ) {
+ KC_TRACE( 10, ( "__kmp_fork_call: T#%d serializing team; requested %d threads\n",
+ gtid, nthreads ));
+ nthreads = 1;
+ }
+ }
+ if ( nthreads > 1 ) {
+ /* determine how many new threads we can use */
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ nthreads = __kmp_reserve_threads(root, parent_team, master_tid, nthreads
+#if OMP_40_ENABLED
+/* AC: If we execute teams from parallel region (on host), then teams should be created
+ but each can only have 1 thread if nesting is disabled. If teams called from serial region,
+ then teams and their threads should be created regardless of the nesting setting. */
+ , enter_teams
+#endif /* OMP_40_ENABLED */
+ );
+ if ( nthreads == 1 ) {
+ // Free lock for single thread execution here;
+ // for multi-thread execution it will be freed later
+ // after team of threads created and initialized
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ }
+ }
+ }
+ KMP_DEBUG_ASSERT( nthreads > 0 );
+
+ /* If we temporarily changed the set number of threads then restore it now */
+ master_th->th.th_set_nproc = 0;
+
+ /* create a serialized parallel region? */
+ if ( nthreads == 1 ) {
+ /* josh todo: hypothetical question: what do we do for OS X*? */
+#if KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
+ void * args[ argc ];
+#else
+ void * * args = (void**) KMP_ALLOCA( argc * sizeof( void * ) );
+#endif /* KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) */
+
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d serializing parallel region\n", gtid ));
+
+ __kmpc_serialized_parallel(loc, gtid);
+
+ if ( call_context == fork_context_intel ) {
+ /* TODO this sucks, use the compiler itself to pass args! :) */
+ master_th->th.th_serial_team->t.t_ident = loc;
+#if OMP_40_ENABLED
+ if ( !ap ) {
+ // revert change made in __kmpc_serialized_parallel()
+ master_th->th.th_serial_team->t.t_level--;
+ // Get args from parent team for teams construct
+
+#if OMPT_SUPPORT
+ void *dummy;
+ void **exit_runtime_p;
+
+ ompt_lw_taskteam_t lw_taskteam;
+
+ if (ompt_enabled) {
+ __ompt_lw_taskteam_init(&lw_taskteam, master_th, gtid,
+ unwrapped_task, ompt_parallel_id);
+ lw_taskteam.ompt_task_info.task_id = __ompt_task_id_new(gtid);
+ exit_runtime_p = &(lw_taskteam.ompt_task_info.frame.exit_runtime_frame);
+
+ __ompt_lw_taskteam_link(&lw_taskteam, master_th);
+
+#if OMPT_TRACE
+ my_task_id = lw_taskteam.ompt_task_info.task_id;
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ ompt_parallel_id, my_task_id);
+ }
+#endif
+
+ /* OMPT state */
+ master_th->th.ompt_thread_info.state = ompt_state_work_parallel;
+ } else {
+ exit_runtime_p = &dummy;
+ }
+#endif
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ __kmp_invoke_microtask( microtask, gtid, 0, argc, parent_team->t.t_argv
+#if OMPT_SUPPORT
+ , exit_runtime_p
+#endif
+ );
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ lw_taskteam.ompt_task_info.frame.exit_runtime_frame = 0;
+
+#if OMPT_TRACE
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ ompt_parallel_id, ompt_task_id);
+ }
+#endif
+
+ __ompt_lw_taskteam_unlink(master_th);
+ // reset clear the task id only after unlinking the task
+ lw_taskteam.ompt_task_info.task_id = ompt_task_id_none;
+
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_parallel_end)(
+ ompt_parallel_id, ompt_task_id,
+ OMPT_INVOKER(call_context));
+ }
+ master_th->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+ } else if ( microtask == (microtask_t)__kmp_teams_master ) {
+ KMP_DEBUG_ASSERT( master_th->th.th_team == master_th->th.th_serial_team );
+ team = master_th->th.th_team;
+ //team->t.t_pkfn = microtask;
+ team->t.t_invoke = invoker;
+ __kmp_alloc_argv_entries( argc, team, TRUE );
+ team->t.t_argc = argc;
+ argv = (void**) team->t.t_argv;
+ if ( ap ) {
+ for( i=argc-1; i >= 0; --i )
+// TODO: revert workaround for Intel(R) 64 tracker #96
+# if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ *argv++ = va_arg( *ap, void * );
+# else
+ *argv++ = va_arg( ap, void * );
+# endif
+ } else {
+ for( i=0; i < argc; ++i )
+ // Get args from parent team for teams construct
+ argv[i] = parent_team->t.t_argv[i];
+ }
+ // AC: revert change made in __kmpc_serialized_parallel()
+ // because initial code in teams should have level=0
+ team->t.t_level--;
+ // AC: call special invoker for outer "parallel" of the teams construct
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ invoker(gtid);
+ }
+ } else {
+#endif /* OMP_40_ENABLED */
+ argv = args;
+ for( i=argc-1; i >= 0; --i )
+// TODO: revert workaround for Intel(R) 64 tracker #96
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ *argv++ = va_arg( *ap, void * );
+#else
+ *argv++ = va_arg( ap, void * );
+#endif
+ KMP_MB();
+
+#if OMPT_SUPPORT
+ void *dummy;
+ void **exit_runtime_p;
+
+ ompt_lw_taskteam_t lw_taskteam;
+
+ if (ompt_enabled) {
+ __ompt_lw_taskteam_init(&lw_taskteam, master_th, gtid,
+ unwrapped_task, ompt_parallel_id);
+ lw_taskteam.ompt_task_info.task_id = __ompt_task_id_new(gtid);
+ exit_runtime_p = &(lw_taskteam.ompt_task_info.frame.exit_runtime_frame);
+
+ __ompt_lw_taskteam_link(&lw_taskteam, master_th);
+
+#if OMPT_TRACE
+ /* OMPT implicit task begin */
+ my_task_id = lw_taskteam.ompt_task_info.task_id;
+ my_parallel_id = ompt_parallel_id;
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+
+ /* OMPT state */
+ master_th->th.ompt_thread_info.state = ompt_state_work_parallel;
+ } else {
+ exit_runtime_p = &dummy;
+ }
+#endif
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ __kmp_invoke_microtask( microtask, gtid, 0, argc, args
+#if OMPT_SUPPORT
+ , exit_runtime_p
+#endif
+ );
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+#if OMPT_TRACE
+ lw_taskteam.ompt_task_info.frame.exit_runtime_frame = 0;
+
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+
+ __ompt_lw_taskteam_unlink(master_th);
+ // reset clear the task id only after unlinking the task
+ lw_taskteam.ompt_task_info.task_id = ompt_task_id_none;
+
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_parallel_end)(
+ ompt_parallel_id, ompt_task_id,
+ OMPT_INVOKER(call_context));
+ }
+ master_th->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+#if OMP_40_ENABLED
+ }
+#endif /* OMP_40_ENABLED */
+ }
+ else if ( call_context == fork_context_gnu ) {
+#if OMPT_SUPPORT
+ ompt_lw_taskteam_t *lwt = (ompt_lw_taskteam_t *)
+ __kmp_allocate(sizeof(ompt_lw_taskteam_t));
+ __ompt_lw_taskteam_init(lwt, master_th, gtid,
+ unwrapped_task, ompt_parallel_id);
+
+ lwt->ompt_task_info.task_id = __ompt_task_id_new(gtid);
+ lwt->ompt_task_info.frame.exit_runtime_frame = 0;
+ __ompt_lw_taskteam_link(lwt, master_th);
+#endif
+
+ // we were called from GNU native code
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d serial exit\n", gtid ));
+ return FALSE;
+ }
+ else {
+ KMP_ASSERT2( call_context < fork_context_last, "__kmp_fork_call: unknown fork_context parameter" );
+ }
+
+
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d serial exit\n", gtid ));
+ KMP_MB();
+ return FALSE;
+ }
+
+ // GEH: only modify the executing flag in the case when not serialized
+ // serialized case is handled in kmpc_serialized_parallel
+ KF_TRACE( 10, ( "__kmp_fork_call: parent_team_aclevel=%d, master_th=%p, curtask=%p, curtask_max_aclevel=%d\n",
+ parent_team->t.t_active_level, master_th, master_th->th.th_current_task,
+ master_th->th.th_current_task->td_icvs.max_active_levels ) );
+ // TODO: GEH - cannot do this assertion because root thread not set up as executing
+ // KMP_ASSERT( master_th->th.th_current_task->td_flags.executing == 1 );
+ master_th->th.th_current_task->td_flags.executing = 0;
+
+#if OMP_40_ENABLED
+ if ( !master_th->th.th_teams_microtask || level > teams_level )
+#endif /* OMP_40_ENABLED */
+ {
+ /* Increment our nested depth level */
+ KMP_TEST_THEN_INC32( (kmp_int32*) &root->r.r_in_parallel );
+ }
+
+ // See if we need to make a copy of the ICVs.
+ int nthreads_icv = master_th->th.th_current_task->td_icvs.nproc;
+ if ((level+1 < __kmp_nested_nth.used) && (__kmp_nested_nth.nth[level+1] != nthreads_icv)) {
+ nthreads_icv = __kmp_nested_nth.nth[level+1];
+ }
+ else {
+ nthreads_icv = 0; // don't update
+ }
+
+#if OMP_40_ENABLED
+ // Figure out the proc_bind_policy for the new team.
+ kmp_proc_bind_t proc_bind = master_th->th.th_set_proc_bind;
+ kmp_proc_bind_t proc_bind_icv = proc_bind_default; // proc_bind_default means don't update
+ if ( master_th->th.th_current_task->td_icvs.proc_bind == proc_bind_false ) {
+ proc_bind = proc_bind_false;
+ }
+ else {
+ if (proc_bind == proc_bind_default) {
+ // No proc_bind clause specified; use current proc-bind-var for this parallel region
+ proc_bind = master_th->th.th_current_task->td_icvs.proc_bind;
+ }
+ /* else: The proc_bind policy was specified explicitly on parallel clause. This
+ overrides proc-bind-var for this parallel region, but does not change proc-bind-var. */
+ // Figure the value of proc-bind-var for the child threads.
+ if ((level+1 < __kmp_nested_proc_bind.used)
+ && (__kmp_nested_proc_bind.bind_types[level+1] != master_th->th.th_current_task->td_icvs.proc_bind)) {
+ proc_bind_icv = __kmp_nested_proc_bind.bind_types[level+1];
+ }
+ }
+
+ // Reset for next parallel region
+ master_th->th.th_set_proc_bind = proc_bind_default;
+#endif /* OMP_40_ENABLED */
+
+ if ((nthreads_icv > 0)
+#if OMP_40_ENABLED
+ || (proc_bind_icv != proc_bind_default)
+#endif /* OMP_40_ENABLED */
+ ) {
+ kmp_internal_control_t new_icvs;
+ copy_icvs(&new_icvs, &master_th->th.th_current_task->td_icvs);
+ new_icvs.next = NULL;
+ if (nthreads_icv > 0) {
+ new_icvs.nproc = nthreads_icv;
+ }
+
+#if OMP_40_ENABLED
+ if (proc_bind_icv != proc_bind_default) {
+ new_icvs.proc_bind = proc_bind_icv;
+ }
+#endif /* OMP_40_ENABLED */
+
+ /* allocate a new parallel team */
+ KF_TRACE( 10, ( "__kmp_fork_call: before __kmp_allocate_team\n" ) );
+ team = __kmp_allocate_team(root, nthreads, nthreads,
+#if OMPT_SUPPORT
+ ompt_parallel_id,
+#endif
+#if OMP_40_ENABLED
+ proc_bind,
+#endif
+ &new_icvs, argc USE_NESTED_HOT_ARG(master_th) );
+ } else {
+ /* allocate a new parallel team */
+ KF_TRACE( 10, ( "__kmp_fork_call: before __kmp_allocate_team\n" ) );
+ team = __kmp_allocate_team(root, nthreads, nthreads,
+#if OMPT_SUPPORT
+ ompt_parallel_id,
+#endif
+#if OMP_40_ENABLED
+ proc_bind,
+#endif
+ &master_th->th.th_current_task->td_icvs, argc
+ USE_NESTED_HOT_ARG(master_th) );
+ }
+ KF_TRACE( 10, ( "__kmp_fork_call: after __kmp_allocate_team - team = %p\n", team ) );
+
+ /* setup the new team */
+ KMP_CHECK_UPDATE(team->t.t_master_tid, master_tid);
+ KMP_CHECK_UPDATE(team->t.t_master_this_cons, master_this_cons);
+ KMP_CHECK_UPDATE(team->t.t_ident, loc);
+ KMP_CHECK_UPDATE(team->t.t_parent, parent_team);
+ KMP_CHECK_UPDATE_SYNC(team->t.t_pkfn, microtask);
+#if OMPT_SUPPORT
+ KMP_CHECK_UPDATE_SYNC(team->t.ompt_team_info.microtask, unwrapped_task);
+#endif
+ KMP_CHECK_UPDATE(team->t.t_invoke, invoker); /* TODO move this to root, maybe */
+ // TODO: parent_team->t.t_level == INT_MAX ???
+#if OMP_40_ENABLED
+ if ( !master_th->th.th_teams_microtask || level > teams_level ) {
+#endif /* OMP_40_ENABLED */
+ int new_level = parent_team->t.t_level + 1;
+ KMP_CHECK_UPDATE(team->t.t_level, new_level);
+ new_level = parent_team->t.t_active_level + 1;
+ KMP_CHECK_UPDATE(team->t.t_active_level, new_level);
+#if OMP_40_ENABLED
+ } else {
+ // AC: Do not increase parallel level at start of the teams construct
+ int new_level = parent_team->t.t_level;
+ KMP_CHECK_UPDATE(team->t.t_level, new_level);
+ new_level = parent_team->t.t_active_level;
+ KMP_CHECK_UPDATE(team->t.t_active_level, new_level);
+ }
+#endif /* OMP_40_ENABLED */
+ kmp_r_sched_t new_sched = get__sched_2(parent_team, master_tid);
+ if (team->t.t_sched.r_sched_type != new_sched.r_sched_type || team->t.t_sched.chunk != new_sched.chunk)
+ team->t.t_sched = new_sched; // set master's schedule as new run-time schedule
+
+#if OMP_40_ENABLED
+ KMP_CHECK_UPDATE(team->t.t_cancel_request, cancel_noreq);
+#endif
+
+ // Update the floating point rounding in the team if required.
+ propagateFPControl(team);
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ // Set master's task team to team's task team. Unless this is hot team, it should be NULL.
+#if 0
+ // Patch out an assertion that trips while the runtime seems to operate correctly.
+ // Avoiding the preconditions that cause the assertion to trip has been promised as a forthcoming patch.
+ KMP_DEBUG_ASSERT(master_th->th.th_task_team == parent_team->t.t_task_team[master_th->th.th_task_state]);
+#endif
+ KA_TRACE( 20, ( "__kmp_fork_call: Master T#%d pushing task_team %p / team %p, new task_team %p / team %p\n",
+ __kmp_gtid_from_thread( master_th ), master_th->th.th_task_team,
+ parent_team, team->t.t_task_team[master_th->th.th_task_state], team ) );
+
+ if ( active_level || master_th->th.th_task_team ) {
+ // Take a memo of master's task_state
+ KMP_DEBUG_ASSERT(master_th->th.th_task_state_memo_stack);
+ if (master_th->th.th_task_state_top >= master_th->th.th_task_state_stack_sz) { // increase size
+ kmp_uint32 new_size = 2*master_th->th.th_task_state_stack_sz;
+ kmp_uint8 *old_stack, *new_stack;
+ kmp_uint32 i;
+ new_stack = (kmp_uint8 *)__kmp_allocate(new_size);
+ for (i=0; i<master_th->th.th_task_state_stack_sz; ++i) {
+ new_stack[i] = master_th->th.th_task_state_memo_stack[i];
+ }
+ for (i=master_th->th.th_task_state_stack_sz; i<new_size; ++i) { // zero-init rest of stack
+ new_stack[i] = 0;
+ }
+ old_stack = master_th->th.th_task_state_memo_stack;
+ master_th->th.th_task_state_memo_stack = new_stack;
+ master_th->th.th_task_state_stack_sz = new_size;
+ __kmp_free(old_stack);
+ }
+ // Store master's task_state on stack
+ master_th->th.th_task_state_memo_stack[master_th->th.th_task_state_top] = master_th->th.th_task_state;
+ master_th->th.th_task_state_top++;
+#if KMP_NESTED_HOT_TEAMS
+ if (team == master_th->th.th_hot_teams[active_level].hot_team) { // Restore master's nested state if nested hot team
+ master_th->th.th_task_state = master_th->th.th_task_state_memo_stack[master_th->th.th_task_state_top];
+ }
+ else {
+#endif
+ master_th->th.th_task_state = 0;
+#if KMP_NESTED_HOT_TEAMS
+ }
+#endif
+ }
+#if !KMP_NESTED_HOT_TEAMS
+ KMP_DEBUG_ASSERT((master_th->th.th_task_team == NULL) || (team == root->r.r_hot_team));
+#endif
+ }
+
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d(%d:%d)->(%d:0) created a team of %d threads\n",
+ gtid, parent_team->t.t_id, team->t.t_master_tid, team->t.t_id, team->t.t_nproc ));
+ KMP_DEBUG_ASSERT( team != root->r.r_hot_team ||
+ ( team->t.t_master_tid == 0 &&
+ ( team->t.t_parent == root->r.r_root_team || team->t.t_parent->t.t_serialized ) ));
+ KMP_MB();
+
+ /* now, setup the arguments */
+ argv = (void**)team->t.t_argv;
+#if OMP_40_ENABLED
+ if ( ap ) {
+#endif /* OMP_40_ENABLED */
+ for ( i=argc-1; i >= 0; --i ) {
+// TODO: revert workaround for Intel(R) 64 tracker #96
+#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
+ void *new_argv = va_arg(*ap, void *);
+#else
+ void *new_argv = va_arg(ap, void *);
+#endif
+ KMP_CHECK_UPDATE(*argv, new_argv);
+ argv++;
+ }
+#if OMP_40_ENABLED
+ } else {
+ for ( i=0; i < argc; ++i ) {
+ // Get args from parent team for teams construct
+ KMP_CHECK_UPDATE(argv[i], team->t.t_parent->t.t_argv[i]);
+ }
+ }
+#endif /* OMP_40_ENABLED */
+
+ /* now actually fork the threads */
+ KMP_CHECK_UPDATE(team->t.t_master_active, master_active);
+ if (!root->r.r_active) // Only do assignment if it prevents cache ping-pong
+ root->r.r_active = TRUE;
+
+ __kmp_fork_team_threads( root, team, master_th, gtid );
+ __kmp_setup_icv_copy( team, nthreads, &master_th->th.th_current_task->td_icvs, loc );
+
+#if OMPT_SUPPORT
+ master_th->th.ompt_thread_info.state = ompt_state_work_parallel;
+#endif
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+
+#if USE_ITT_BUILD
+ if ( team->t.t_active_level == 1 // only report frames at level 1
+# if OMP_40_ENABLED
+ && !master_th->th.th_teams_microtask // not in teams construct
+# endif /* OMP_40_ENABLED */
+ ) {
+#if USE_ITT_NOTIFY
+ if ( ( __itt_frame_submit_v3_ptr || KMP_ITT_DEBUG ) &&
+ ( __kmp_forkjoin_frames_mode == 3 || __kmp_forkjoin_frames_mode == 1 ) )
+ {
+ kmp_uint64 tmp_time = 0;
+ if ( __itt_get_timestamp_ptr )
+ tmp_time = __itt_get_timestamp();
+ // Internal fork - report frame begin
+ master_th->th.th_frame_time = tmp_time;
+ if ( __kmp_forkjoin_frames_mode == 3 )
+ team->t.t_region_time = tmp_time;
+ } else // only one notification scheme (either "submit" or "forking/joined", not both)
+#endif /* USE_ITT_NOTIFY */
+ if ( ( __itt_frame_begin_v3_ptr || KMP_ITT_DEBUG ) &&
+ __kmp_forkjoin_frames && !__kmp_forkjoin_frames_mode )
+ { // Mark start of "parallel" region for VTune.
+ __kmp_itt_region_forking(gtid, team->t.t_nproc, 0);
+ }
+ }
+#endif /* USE_ITT_BUILD */
+
+ /* now go on and do the work */
+ KMP_DEBUG_ASSERT( team == __kmp_threads[gtid]->th.th_team );
+ KMP_MB();
+ KF_TRACE(10, ("__kmp_internal_fork : root=%p, team=%p, master_th=%p, gtid=%d\n",
+ root, team, master_th, gtid));
+
+#if USE_ITT_BUILD
+ if ( __itt_stack_caller_create_ptr ) {
+ team->t.t_stack_id = __kmp_itt_stack_caller_create(); // create new stack stitching id before entering fork barrier
+ }
+#endif /* USE_ITT_BUILD */
+
+#if OMP_40_ENABLED
+ if ( ap ) // AC: skip __kmp_internal_fork at teams construct, let only master threads execute
+#endif /* OMP_40_ENABLED */
+ {
+ __kmp_internal_fork( loc, gtid, team );
+ KF_TRACE(10, ("__kmp_internal_fork : after : root=%p, team=%p, master_th=%p, gtid=%d\n",
+ root, team, master_th, gtid));
+ }
+
+ if (call_context == fork_context_gnu) {
+ KA_TRACE( 20, ("__kmp_fork_call: parallel exit T#%d\n", gtid ));
+ return TRUE;
+ }
+
+ /* Invoke microtask for MASTER thread */
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d(%d:0) invoke microtask = %p\n",
+ gtid, team->t.t_id, team->t.t_pkfn ) );
+ } // END of timer KMP_fork_call block
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ // KMP_TIME_DEVELOPER_BLOCK(USER_master_invoke);
+ if (! team->t.t_invoke( gtid )) {
+ KMP_ASSERT2( 0, "cannot invoke microtask for MASTER thread" );
+ }
+ }
+ KA_TRACE( 20, ("__kmp_fork_call: T#%d(%d:0) done microtask = %p\n",
+ gtid, team->t.t_id, team->t.t_pkfn ) );
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 20, ("__kmp_fork_call: parallel exit T#%d\n", gtid ));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ master_th->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+
+ return TRUE;
+}
+
+#if OMPT_SUPPORT
+static inline void
+__kmp_join_restore_state(
+ kmp_info_t *thread,
+ kmp_team_t *team)
+{
+ // restore state outside the region
+ thread->th.ompt_thread_info.state = ((team->t.t_serialized) ?
+ ompt_state_work_serial : ompt_state_work_parallel);
+}
+
+static inline void
+__kmp_join_ompt(
+ kmp_info_t *thread,
+ kmp_team_t *team,
+ ompt_parallel_id_t parallel_id,
+ fork_context_e fork_context)
+{
+ if (ompt_callbacks.ompt_callback(ompt_event_parallel_end)) {
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ ompt_callbacks.ompt_callback(ompt_event_parallel_end)(
+ parallel_id, task_info->task_id, OMPT_INVOKER(fork_context));
+ }
+
+ __kmp_join_restore_state(thread,team);
+}
+#endif
+
+void
+__kmp_join_call(ident_t *loc, int gtid
+#if OMPT_SUPPORT
+ , enum fork_context_e fork_context
+#endif
+#if OMP_40_ENABLED
+ , int exit_teams
+#endif /* OMP_40_ENABLED */
+)
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_join_call);
+ kmp_team_t *team;
+ kmp_team_t *parent_team;
+ kmp_info_t *master_th;
+ kmp_root_t *root;
+ int master_active;
+ int i;
+
+ KA_TRACE( 20, ("__kmp_join_call: enter T#%d\n", gtid ));
+
+ /* setup current data */
+ master_th = __kmp_threads[ gtid ];
+ root = master_th->th.th_root;
+ team = master_th->th.th_team;
+ parent_team = team->t.t_parent;
+
+ master_th->th.th_ident = loc;
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ master_th->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+
+#if KMP_DEBUG
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KA_TRACE( 20, ( "__kmp_join_call: T#%d, old team = %p old task_team = %p, th_task_team = %p\n",
+ __kmp_gtid_from_thread( master_th ), team,
+ team->t.t_task_team[master_th->th.th_task_state], master_th->th.th_task_team) );
+ KMP_DEBUG_ASSERT( master_th->th.th_task_team == team->t.t_task_team[master_th->th.th_task_state] );
+ }
+#endif
+
+ if( team->t.t_serialized ) {
+#if OMP_40_ENABLED
+ if ( master_th->th.th_teams_microtask ) {
+ // We are in teams construct
+ int level = team->t.t_level;
+ int tlevel = master_th->th.th_teams_level;
+ if ( level == tlevel ) {
+ // AC: we haven't incremented it earlier at start of teams construct,
+ // so do it here - at the end of teams construct
+ team->t.t_level++;
+ } else if ( level == tlevel + 1 ) {
+ // AC: we are exiting parallel inside teams, need to increment serialization
+ // in order to restore it in the next call to __kmpc_end_serialized_parallel
+ team->t.t_serialized++;
+ }
+ }
+#endif /* OMP_40_ENABLED */
+ __kmpc_end_serialized_parallel( loc, gtid );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ __kmp_join_restore_state(master_th, parent_team);
+ }
+#endif
+
+ return;
+ }
+
+ master_active = team->t.t_master_active;
+
+#if OMP_40_ENABLED
+ if (!exit_teams)
+#endif /* OMP_40_ENABLED */
+ {
+ // AC: No barrier for internal teams at exit from teams construct.
+ // But there is barrier for external team (league).
+ __kmp_internal_join( loc, gtid, team );
+ }
+#if OMP_40_ENABLED
+ else {
+ master_th->th.th_task_state = 0; // AC: no tasking in teams (out of any parallel)
+ }
+#endif /* OMP_40_ENABLED */
+
+ KMP_MB();
+
+#if OMPT_SUPPORT
+ ompt_parallel_id_t parallel_id = team->t.ompt_team_info.parallel_id;
+#endif
+
+#if USE_ITT_BUILD
+ if ( __itt_stack_caller_create_ptr ) {
+ __kmp_itt_stack_caller_destroy( (__itt_caller)team->t.t_stack_id ); // destroy the stack stitching id after join barrier
+ }
+
+ // Mark end of "parallel" region for VTune.
+ if ( team->t.t_active_level == 1
+# if OMP_40_ENABLED
+ && !master_th->th.th_teams_microtask /* not in teams construct */
+# endif /* OMP_40_ENABLED */
+ ) {
+ master_th->th.th_ident = loc;
+ // only one notification scheme (either "submit" or "forking/joined", not both)
+ if ( ( __itt_frame_submit_v3_ptr || KMP_ITT_DEBUG ) && __kmp_forkjoin_frames_mode == 3 )
+ __kmp_itt_frame_submit( gtid, team->t.t_region_time, master_th->th.th_frame_time,
+ 0, loc, master_th->th.th_team_nproc, 1 );
+ else if ( ( __itt_frame_end_v3_ptr || KMP_ITT_DEBUG ) &&
+ ! __kmp_forkjoin_frames_mode && __kmp_forkjoin_frames )
+ __kmp_itt_region_joined( gtid );
+ } // active_level == 1
+#endif /* USE_ITT_BUILD */
+
+#if OMP_40_ENABLED
+ if ( master_th->th.th_teams_microtask &&
+ !exit_teams &&
+ team->t.t_pkfn != (microtask_t)__kmp_teams_master &&
+ team->t.t_level == master_th->th.th_teams_level + 1 ) {
+ // AC: We need to leave the team structure intact at the end
+ // of parallel inside the teams construct, so that at the next
+ // parallel same (hot) team works, only adjust nesting levels
+
+ /* Decrement our nested depth level */
+ team->t.t_level --;
+ team->t.t_active_level --;
+ KMP_TEST_THEN_DEC32( (kmp_int32*) &root->r.r_in_parallel );
+
+ /* Restore number of threads in the team if needed */
+ if ( master_th->th.th_team_nproc < master_th->th.th_teams_size.nth ) {
+ int old_num = master_th->th.th_team_nproc;
+ int new_num = master_th->th.th_teams_size.nth;
+ kmp_info_t **other_threads = team->t.t_threads;
+ team->t.t_nproc = new_num;
+ for ( i = 0; i < old_num; ++i ) {
+ other_threads[i]->th.th_team_nproc = new_num;
+ }
+ // Adjust states of non-used threads of the team
+ for ( i = old_num; i < new_num; ++i ) {
+ // Re-initialize thread's barrier data.
+ int b;
+ kmp_balign_t * balign = other_threads[i]->th.th_bar;
+ for ( b = 0; b < bs_last_barrier; ++ b ) {
+ balign[ b ].bb.b_arrived = team->t.t_bar[ b ].b_arrived;
+ KMP_DEBUG_ASSERT(balign[ b ].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#if USE_DEBUGGER
+ balign[ b ].bb.b_worker_arrived = team->t.t_bar[ b ].b_team_arrived;
+#endif
+ }
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ // Synchronize thread's task state
+ other_threads[i]->th.th_task_state = master_th->th.th_task_state;
+ }
+ }
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ __kmp_join_ompt(master_th, parent_team, parallel_id, fork_context);
+ }
+#endif
+
+ return;
+ }
+#endif /* OMP_40_ENABLED */
+
+ /* do cleanup and restore the parent team */
+ master_th->th.th_info .ds.ds_tid = team->t.t_master_tid;
+ master_th->th.th_local.this_construct = team->t.t_master_this_cons;
+
+ master_th->th.th_dispatch =
+ & parent_team->t.t_dispatch[ team->t.t_master_tid ];
+
+ /* jc: The following lock has instructions with REL and ACQ semantics,
+ separating the parallel user code called in this parallel region
+ from the serial user code called after this function returns.
+ */
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+#if OMP_40_ENABLED
+ if ( !master_th->th.th_teams_microtask || team->t.t_level > master_th->th.th_teams_level )
+#endif /* OMP_40_ENABLED */
+ {
+ /* Decrement our nested depth level */
+ KMP_TEST_THEN_DEC32( (kmp_int32*) &root->r.r_in_parallel );
+ }
+ KMP_DEBUG_ASSERT( root->r.r_in_parallel >= 0 );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if(ompt_enabled){
+ ompt_task_info_t *task_info = __ompt_get_taskinfo(0);
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ parallel_id, task_info->task_id);
+ }
+ task_info->frame.exit_runtime_frame = 0;
+ task_info->task_id = 0;
+ }
+#endif
+
+ KF_TRACE( 10, ("__kmp_join_call1: T#%d, this_thread=%p team=%p\n",
+ 0, master_th, team ) );
+ __kmp_pop_current_task_from_thread( master_th );
+
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ //
+ // Restore master thread's partition.
+ //
+ master_th->th.th_first_place = team->t.t_first_place;
+ master_th->th.th_last_place = team->t.t_last_place;
+#endif /* OMP_40_ENABLED */
+
+ updateHWFPControl (team);
+
+ if ( root->r.r_active != master_active )
+ root->r.r_active = master_active;
+
+ __kmp_free_team( root, team USE_NESTED_HOT_ARG(master_th) ); // this will free worker threads
+
+ /* this race was fun to find. make sure the following is in the critical
+ * region otherwise assertions may fail occasionally since the old team
+ * may be reallocated and the hierarchy appears inconsistent. it is
+ * actually safe to run and won't cause any bugs, but will cause those
+ * assertion failures. it's only one deref&assign so might as well put this
+ * in the critical region */
+ master_th->th.th_team = parent_team;
+ master_th->th.th_team_nproc = parent_team->t.t_nproc;
+ master_th->th.th_team_master = parent_team->t.t_threads[0];
+ master_th->th.th_team_serialized = parent_team->t.t_serialized;
+
+ /* restore serialized team, if need be */
+ if( parent_team->t.t_serialized &&
+ parent_team != master_th->th.th_serial_team &&
+ parent_team != root->r.r_root_team ) {
+ __kmp_free_team( root, master_th->th.th_serial_team USE_NESTED_HOT_ARG(NULL) );
+ master_th->th.th_serial_team = parent_team;
+ }
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ if (master_th->th.th_task_state_top > 0) { // Restore task state from memo stack
+ KMP_DEBUG_ASSERT(master_th->th.th_task_state_memo_stack);
+ // Remember master's state if we re-use this nested hot team
+ master_th->th.th_task_state_memo_stack[master_th->th.th_task_state_top] = master_th->th.th_task_state;
+ --master_th->th.th_task_state_top; // pop
+ // Now restore state at this level
+ master_th->th.th_task_state = master_th->th.th_task_state_memo_stack[master_th->th.th_task_state_top];
+ }
+ // Copy the task team from the parent team to the master thread
+ master_th->th.th_task_team = parent_team->t.t_task_team[master_th->th.th_task_state];
+ KA_TRACE( 20, ( "__kmp_join_call: Master T#%d restoring task_team %p / team %p\n",
+ __kmp_gtid_from_thread( master_th ), master_th->th.th_task_team, parent_team ) );
+ }
+
+ // TODO: GEH - cannot do this assertion because root thread not set up as executing
+ // KMP_ASSERT( master_th->th.th_current_task->td_flags.executing == 0 );
+ master_th->th.th_current_task->td_flags.executing = 1;
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ __kmp_join_ompt(master_th, parent_team, parallel_id, fork_context);
+ }
+#endif
+
+ KMP_MB();
+ KA_TRACE( 20, ("__kmp_join_call: exit T#%d\n", gtid ));
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* Check whether we should push an internal control record onto the
+ serial team stack. If so, do it. */
+void
+__kmp_save_internal_controls ( kmp_info_t * thread )
+{
+
+ if ( thread->th.th_team != thread->th.th_serial_team ) {
+ return;
+ }
+ if (thread->th.th_team->t.t_serialized > 1) {
+ int push = 0;
+
+ if (thread->th.th_team->t.t_control_stack_top == NULL) {
+ push = 1;
+ } else {
+ if ( thread->th.th_team->t.t_control_stack_top->serial_nesting_level !=
+ thread->th.th_team->t.t_serialized ) {
+ push = 1;
+ }
+ }
+ if (push) { /* push a record on the serial team's stack */
+ kmp_internal_control_t * control = (kmp_internal_control_t *) __kmp_allocate(sizeof(kmp_internal_control_t));
+
+ copy_icvs( control, & thread->th.th_current_task->td_icvs );
+
+ control->serial_nesting_level = thread->th.th_team->t.t_serialized;
+
+ control->next = thread->th.th_team->t.t_control_stack_top;
+ thread->th.th_team->t.t_control_stack_top = control;
+ }
+ }
+}
+
+/* Changes set_nproc */
+void
+__kmp_set_num_threads( int new_nth, int gtid )
+{
+ kmp_info_t *thread;
+ kmp_root_t *root;
+
+ KF_TRACE( 10, ("__kmp_set_num_threads: new __kmp_nth = %d\n", new_nth ));
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ if (new_nth < 1)
+ new_nth = 1;
+ else if (new_nth > __kmp_max_nth)
+ new_nth = __kmp_max_nth;
+
+ KMP_COUNT_VALUE(OMP_set_numthreads, new_nth);
+ thread = __kmp_threads[gtid];
+
+ __kmp_save_internal_controls( thread );
+
+ set__nproc( thread, new_nth );
+
+ //
+ // If this omp_set_num_threads() call will cause the hot team size to be
+ // reduced (in the absence of a num_threads clause), then reduce it now,
+ // rather than waiting for the next parallel region.
+ //
+ root = thread->th.th_root;
+ if ( __kmp_init_parallel && ( ! root->r.r_active )
+ && ( root->r.r_hot_team->t.t_nproc > new_nth )
+#if KMP_NESTED_HOT_TEAMS
+ && __kmp_hot_teams_max_level && !__kmp_hot_teams_mode
+#endif
+ ) {
+ kmp_team_t *hot_team = root->r.r_hot_team;
+ int f;
+
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ // Release the extra threads we don't need any more.
+ for ( f = new_nth; f < hot_team->t.t_nproc; f++ ) {
+ KMP_DEBUG_ASSERT( hot_team->t.t_threads[f] != NULL );
+ if ( __kmp_tasking_mode != tskm_immediate_exec) {
+ // When decreasing team size, threads no longer in the team should unref task team.
+ hot_team->t.t_threads[f]->th.th_task_team = NULL;
+ }
+ __kmp_free_thread( hot_team->t.t_threads[f] );
+ hot_team->t.t_threads[f] = NULL;
+ }
+ hot_team->t.t_nproc = new_nth;
+#if KMP_NESTED_HOT_TEAMS
+ if( thread->th.th_hot_teams ) {
+ KMP_DEBUG_ASSERT( hot_team == thread->th.th_hot_teams[0].hot_team );
+ thread->th.th_hot_teams[0].hot_team_nth = new_nth;
+ }
+#endif
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ //
+ // Update the t_nproc field in the threads that are still active.
+ //
+ for( f=0 ; f < new_nth; f++ ) {
+ KMP_DEBUG_ASSERT( hot_team->t.t_threads[f] != NULL );
+ hot_team->t.t_threads[f]->th.th_team_nproc = new_nth;
+ }
+ // Special flag in case omp_set_num_threads() call
+ hot_team->t.t_size_changed = -1;
+ }
+}
+
+/* Changes max_active_levels */
+void
+__kmp_set_max_active_levels( int gtid, int max_active_levels )
+{
+ kmp_info_t *thread;
+
+ KF_TRACE( 10, ( "__kmp_set_max_active_levels: new max_active_levels for thread %d = (%d)\n", gtid, max_active_levels ) );
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ // validate max_active_levels
+ if( max_active_levels < 0 ) {
+ KMP_WARNING( ActiveLevelsNegative, max_active_levels );
+ // We ignore this call if the user has specified a negative value.
+ // The current setting won't be changed. The last valid setting will be used.
+ // A warning will be issued (if warnings are allowed as controlled by the KMP_WARNINGS env var).
+ KF_TRACE( 10, ( "__kmp_set_max_active_levels: the call is ignored: new max_active_levels for thread %d = (%d)\n", gtid, max_active_levels ) );
+ return;
+ }
+ if( max_active_levels <= KMP_MAX_ACTIVE_LEVELS_LIMIT ) {
+ // it's OK, the max_active_levels is within the valid range: [ 0; KMP_MAX_ACTIVE_LEVELS_LIMIT ]
+ // We allow a zero value. (implementation defined behavior)
+ } else {
+ KMP_WARNING( ActiveLevelsExceedLimit, max_active_levels, KMP_MAX_ACTIVE_LEVELS_LIMIT );
+ max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
+ // Current upper limit is MAX_INT. (implementation defined behavior)
+ // If the input exceeds the upper limit, we correct the input to be the upper limit. (implementation defined behavior)
+ // Actually, the flow should never get here until we use MAX_INT limit.
+ }
+ KF_TRACE( 10, ( "__kmp_set_max_active_levels: after validation: new max_active_levels for thread %d = (%d)\n", gtid, max_active_levels ) );
+
+ thread = __kmp_threads[ gtid ];
+
+ __kmp_save_internal_controls( thread );
+
+ set__max_active_levels( thread, max_active_levels );
+
+}
+
+/* Gets max_active_levels */
+int
+__kmp_get_max_active_levels( int gtid )
+{
+ kmp_info_t *thread;
+
+ KF_TRACE( 10, ( "__kmp_get_max_active_levels: thread %d\n", gtid ) );
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ thread = __kmp_threads[ gtid ];
+ KMP_DEBUG_ASSERT( thread->th.th_current_task );
+ KF_TRACE( 10, ( "__kmp_get_max_active_levels: thread %d, curtask=%p, curtask_maxaclevel=%d\n",
+ gtid, thread->th.th_current_task, thread->th.th_current_task->td_icvs.max_active_levels ) );
+ return thread->th.th_current_task->td_icvs.max_active_levels;
+}
+
+/* Changes def_sched_var ICV values (run-time schedule kind and chunk) */
+void
+__kmp_set_schedule( int gtid, kmp_sched_t kind, int chunk )
+{
+ kmp_info_t *thread;
+// kmp_team_t *team;
+
+ KF_TRACE( 10, ("__kmp_set_schedule: new schedule for thread %d = (%d, %d)\n", gtid, (int)kind, chunk ));
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ // Check if the kind parameter is valid, correct if needed.
+ // Valid parameters should fit in one of two intervals - standard or extended:
+ // <lower>, <valid>, <upper_std>, <lower_ext>, <valid>, <upper>
+ // 2008-01-25: 0, 1 - 4, 5, 100, 101 - 102, 103
+ if ( kind <= kmp_sched_lower || kind >= kmp_sched_upper ||
+ ( kind <= kmp_sched_lower_ext && kind >= kmp_sched_upper_std ) )
+ {
+ // TODO: Hint needs attention in case we change the default schedule.
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( ScheduleKindOutOfRange, kind ),
+ KMP_HNT( DefaultScheduleKindUsed, "static, no chunk" ),
+ __kmp_msg_null
+ );
+ kind = kmp_sched_default;
+ chunk = 0; // ignore chunk value in case of bad kind
+ }
+
+ thread = __kmp_threads[ gtid ];
+
+ __kmp_save_internal_controls( thread );
+
+ if ( kind < kmp_sched_upper_std ) {
+ if ( kind == kmp_sched_static && chunk < KMP_DEFAULT_CHUNK ) {
+ // differ static chunked vs. unchunked:
+ // chunk should be invalid to indicate unchunked schedule (which is the default)
+ thread->th.th_current_task->td_icvs.sched.r_sched_type = kmp_sch_static;
+ } else {
+ thread->th.th_current_task->td_icvs.sched.r_sched_type = __kmp_sch_map[ kind - kmp_sched_lower - 1 ];
+ }
+ } else {
+ // __kmp_sch_map[ kind - kmp_sched_lower_ext + kmp_sched_upper_std - kmp_sched_lower - 2 ];
+ thread->th.th_current_task->td_icvs.sched.r_sched_type =
+ __kmp_sch_map[ kind - kmp_sched_lower_ext + kmp_sched_upper_std - kmp_sched_lower - 2 ];
+ }
+ if ( kind == kmp_sched_auto ) {
+ // ignore parameter chunk for schedule auto
+ thread->th.th_current_task->td_icvs.sched.chunk = KMP_DEFAULT_CHUNK;
+ } else {
+ thread->th.th_current_task->td_icvs.sched.chunk = chunk;
+ }
+}
+
+/* Gets def_sched_var ICV values */
+void
+__kmp_get_schedule( int gtid, kmp_sched_t * kind, int * chunk )
+{
+ kmp_info_t *thread;
+ enum sched_type th_type;
+
+ KF_TRACE( 10, ("__kmp_get_schedule: thread %d\n", gtid ));
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ thread = __kmp_threads[ gtid ];
+
+ th_type = thread->th.th_current_task->td_icvs.sched.r_sched_type;
+
+ switch ( th_type ) {
+ case kmp_sch_static:
+ case kmp_sch_static_greedy:
+ case kmp_sch_static_balanced:
+ *kind = kmp_sched_static;
+ *chunk = 0; // chunk was not set, try to show this fact via zero value
+ return;
+ case kmp_sch_static_chunked:
+ *kind = kmp_sched_static;
+ break;
+ case kmp_sch_dynamic_chunked:
+ *kind = kmp_sched_dynamic;
+ break;
+ case kmp_sch_guided_chunked:
+ case kmp_sch_guided_iterative_chunked:
+ case kmp_sch_guided_analytical_chunked:
+ *kind = kmp_sched_guided;
+ break;
+ case kmp_sch_auto:
+ *kind = kmp_sched_auto;
+ break;
+ case kmp_sch_trapezoidal:
+ *kind = kmp_sched_trapezoidal;
+ break;
+/*
+ case kmp_sch_static_steal:
+ *kind = kmp_sched_static_steal;
+ break;
+*/
+ default:
+ KMP_FATAL( UnknownSchedulingType, th_type );
+ }
+
+ *chunk = thread->th.th_current_task->td_icvs.sched.chunk;
+}
+
+int
+__kmp_get_ancestor_thread_num( int gtid, int level ) {
+
+ int ii, dd;
+ kmp_team_t *team;
+ kmp_info_t *thr;
+
+ KF_TRACE( 10, ("__kmp_get_ancestor_thread_num: thread %d %d\n", gtid, level ));
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ // validate level
+ if( level == 0 ) return 0;
+ if( level < 0 ) return -1;
+ thr = __kmp_threads[ gtid ];
+ team = thr->th.th_team;
+ ii = team->t.t_level;
+ if( level > ii ) return -1;
+
+#if OMP_40_ENABLED
+ if( thr->th.th_teams_microtask ) {
+ // AC: we are in teams region where multiple nested teams have same level
+ int tlevel = thr->th.th_teams_level; // the level of the teams construct
+ if( level <= tlevel ) { // otherwise usual algorithm works (will not touch the teams)
+ KMP_DEBUG_ASSERT( ii >= tlevel );
+ // AC: As we need to pass by the teams league, we need to artificially increase ii
+ if ( ii == tlevel ) {
+ ii += 2; // three teams have same level
+ } else {
+ ii ++; // two teams have same level
+ }
+ }
+ }
+#endif
+
+ if( ii == level ) return __kmp_tid_from_gtid( gtid );
+
+ dd = team->t.t_serialized;
+ level++;
+ while( ii > level )
+ {
+ for( dd = team->t.t_serialized; ( dd > 0 ) && ( ii > level ); dd--, ii-- )
+ {
+ }
+ if( ( team->t.t_serialized ) && ( !dd ) ) {
+ team = team->t.t_parent;
+ continue;
+ }
+ if( ii > level ) {
+ team = team->t.t_parent;
+ dd = team->t.t_serialized;
+ ii--;
+ }
+ }
+
+ return ( dd > 1 ) ? ( 0 ) : ( team->t.t_master_tid );
+}
+
+int
+__kmp_get_team_size( int gtid, int level ) {
+
+ int ii, dd;
+ kmp_team_t *team;
+ kmp_info_t *thr;
+
+ KF_TRACE( 10, ("__kmp_get_team_size: thread %d %d\n", gtid, level ));
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+
+ // validate level
+ if( level == 0 ) return 1;
+ if( level < 0 ) return -1;
+ thr = __kmp_threads[ gtid ];
+ team = thr->th.th_team;
+ ii = team->t.t_level;
+ if( level > ii ) return -1;
+
+#if OMP_40_ENABLED
+ if( thr->th.th_teams_microtask ) {
+ // AC: we are in teams region where multiple nested teams have same level
+ int tlevel = thr->th.th_teams_level; // the level of the teams construct
+ if( level <= tlevel ) { // otherwise usual algorithm works (will not touch the teams)
+ KMP_DEBUG_ASSERT( ii >= tlevel );
+ // AC: As we need to pass by the teams league, we need to artificially increase ii
+ if ( ii == tlevel ) {
+ ii += 2; // three teams have same level
+ } else {
+ ii ++; // two teams have same level
+ }
+ }
+ }
+#endif
+
+ while( ii > level )
+ {
+ for( dd = team->t.t_serialized; ( dd > 0 ) && ( ii > level ); dd--, ii-- )
+ {
+ }
+ if( team->t.t_serialized && ( !dd ) ) {
+ team = team->t.t_parent;
+ continue;
+ }
+ if( ii > level ) {
+ team = team->t.t_parent;
+ ii--;
+ }
+ }
+
+ return team->t.t_nproc;
+}
+
+kmp_r_sched_t
+__kmp_get_schedule_global() {
+// This routine created because pairs (__kmp_sched, __kmp_chunk) and (__kmp_static, __kmp_guided)
+// may be changed by kmp_set_defaults independently. So one can get the updated schedule here.
+
+ kmp_r_sched_t r_sched;
+
+ // create schedule from 4 globals: __kmp_sched, __kmp_chunk, __kmp_static, __kmp_guided
+ // __kmp_sched should keep original value, so that user can set KMP_SCHEDULE multiple times,
+ // and thus have different run-time schedules in different roots (even in OMP 2.5)
+ if ( __kmp_sched == kmp_sch_static ) {
+ r_sched.r_sched_type = __kmp_static; // replace STATIC with more detailed schedule (balanced or greedy)
+ } else if ( __kmp_sched == kmp_sch_guided_chunked ) {
+ r_sched.r_sched_type = __kmp_guided; // replace GUIDED with more detailed schedule (iterative or analytical)
+ } else {
+ r_sched.r_sched_type = __kmp_sched; // (STATIC_CHUNKED), or (DYNAMIC_CHUNKED), or other
+ }
+
+ if ( __kmp_chunk < KMP_DEFAULT_CHUNK ) { // __kmp_chunk may be wrong here (if it was not ever set)
+ r_sched.chunk = KMP_DEFAULT_CHUNK;
+ } else {
+ r_sched.chunk = __kmp_chunk;
+ }
+
+ return r_sched;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+
+/*
+ * Allocate (realloc == FALSE) * or reallocate (realloc == TRUE)
+ * at least argc number of *t_argv entries for the requested team.
+ */
+static void
+__kmp_alloc_argv_entries( int argc, kmp_team_t *team, int realloc )
+{
+
+ KMP_DEBUG_ASSERT( team );
+ if( !realloc || argc > team->t.t_max_argc ) {
+
+ KA_TRACE( 100, ( "__kmp_alloc_argv_entries: team %d: needed entries=%d, current entries=%d\n",
+ team->t.t_id, argc, ( realloc ) ? team->t.t_max_argc : 0 ));
+ /* if previously allocated heap space for args, free them */
+ if ( realloc && team->t.t_argv != &team->t.t_inline_argv[0] )
+ __kmp_free( (void *) team->t.t_argv );
+
+ if ( argc <= KMP_INLINE_ARGV_ENTRIES ) {
+ /* use unused space in the cache line for arguments */
+ team->t.t_max_argc = KMP_INLINE_ARGV_ENTRIES;
+ KA_TRACE( 100, ( "__kmp_alloc_argv_entries: team %d: inline allocate %d argv entries\n",
+ team->t.t_id, team->t.t_max_argc ));
+ team->t.t_argv = &team->t.t_inline_argv[0];
+ if ( __kmp_storage_map ) {
+ __kmp_print_storage_map_gtid( -1, &team->t.t_inline_argv[0],
+ &team->t.t_inline_argv[KMP_INLINE_ARGV_ENTRIES],
+ (sizeof(void *) * KMP_INLINE_ARGV_ENTRIES),
+ "team_%d.t_inline_argv",
+ team->t.t_id );
+ }
+ } else {
+ /* allocate space for arguments in the heap */
+ team->t.t_max_argc = ( argc <= (KMP_MIN_MALLOC_ARGV_ENTRIES >> 1 )) ?
+ KMP_MIN_MALLOC_ARGV_ENTRIES : 2 * argc;
+ KA_TRACE( 100, ( "__kmp_alloc_argv_entries: team %d: dynamic allocate %d argv entries\n",
+ team->t.t_id, team->t.t_max_argc ));
+ team->t.t_argv = (void**) __kmp_page_allocate( sizeof(void*) * team->t.t_max_argc );
+ if ( __kmp_storage_map ) {
+ __kmp_print_storage_map_gtid( -1, &team->t.t_argv[0], &team->t.t_argv[team->t.t_max_argc],
+ sizeof(void *) * team->t.t_max_argc, "team_%d.t_argv",
+ team->t.t_id );
+ }
+ }
+ }
+}
+
+static void
+__kmp_allocate_team_arrays(kmp_team_t *team, int max_nth)
+{
+ int i;
+ int num_disp_buff = max_nth > 1 ? __kmp_dispatch_num_buffers : 2;
+ team->t.t_threads = (kmp_info_t**) __kmp_allocate( sizeof(kmp_info_t*) * max_nth );
+ team->t.t_disp_buffer = (dispatch_shared_info_t*)
+ __kmp_allocate( sizeof(dispatch_shared_info_t) * num_disp_buff );
+ team->t.t_dispatch = (kmp_disp_t*) __kmp_allocate( sizeof(kmp_disp_t) * max_nth );
+ team->t.t_implicit_task_taskdata = (kmp_taskdata_t*) __kmp_allocate( sizeof(kmp_taskdata_t) * max_nth );
+ team->t.t_max_nproc = max_nth;
+
+ /* setup dispatch buffers */
+ for(i = 0 ; i < num_disp_buff; ++i) {
+ team->t.t_disp_buffer[i].buffer_index = i;
+#if OMP_45_ENABLED
+ team->t.t_disp_buffer[i].doacross_buf_idx = i;
+#endif
+ }
+}
+
+static void
+__kmp_free_team_arrays(kmp_team_t *team) {
+ /* Note: this does not free the threads in t_threads (__kmp_free_threads) */
+ int i;
+ for ( i = 0; i < team->t.t_max_nproc; ++ i ) {
+ if ( team->t.t_dispatch[ i ].th_disp_buffer != NULL ) {
+ __kmp_free( team->t.t_dispatch[ i ].th_disp_buffer );
+ team->t.t_dispatch[ i ].th_disp_buffer = NULL;
+ }; // if
+ }; // for
+ __kmp_free(team->t.t_threads);
+ __kmp_free(team->t.t_disp_buffer);
+ __kmp_free(team->t.t_dispatch);
+ __kmp_free(team->t.t_implicit_task_taskdata);
+ team->t.t_threads = NULL;
+ team->t.t_disp_buffer = NULL;
+ team->t.t_dispatch = NULL;
+ team->t.t_implicit_task_taskdata = 0;
+}
+
+static void
+__kmp_reallocate_team_arrays(kmp_team_t *team, int max_nth) {
+ kmp_info_t **oldThreads = team->t.t_threads;
+
+ __kmp_free(team->t.t_disp_buffer);
+ __kmp_free(team->t.t_dispatch);
+ __kmp_free(team->t.t_implicit_task_taskdata);
+ __kmp_allocate_team_arrays(team, max_nth);
+
+ KMP_MEMCPY(team->t.t_threads, oldThreads, team->t.t_nproc * sizeof (kmp_info_t*));
+
+ __kmp_free(oldThreads);
+}
+
+static kmp_internal_control_t
+__kmp_get_global_icvs( void ) {
+
+ kmp_r_sched_t r_sched = __kmp_get_schedule_global(); // get current state of scheduling globals
+
+#if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT( __kmp_nested_proc_bind.used > 0 );
+#endif /* OMP_40_ENABLED */
+
+ kmp_internal_control_t g_icvs = {
+ 0, //int serial_nesting_level; //corresponds to the value of the th_team_serialized field
+ (kmp_int8)__kmp_dflt_nested, //int nested; //internal control for nested parallelism (per thread)
+ (kmp_int8)__kmp_global.g.g_dynamic, //internal control for dynamic adjustment of threads (per thread)
+ (kmp_int8)__kmp_env_blocktime, //int bt_set; //internal control for whether blocktime is explicitly set
+ __kmp_dflt_blocktime, //int blocktime; //internal control for blocktime
+ __kmp_bt_intervals, //int bt_intervals; //internal control for blocktime intervals
+ __kmp_dflt_team_nth, //int nproc; //internal control for # of threads for next parallel region (per thread)
+ // (use a max ub on value if __kmp_parallel_initialize not called yet)
+ __kmp_dflt_max_active_levels, //int max_active_levels; //internal control for max_active_levels
+ r_sched, //kmp_r_sched_t sched; //internal control for runtime schedule {sched,chunk} pair
+#if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0],
+#endif /* OMP_40_ENABLED */
+ NULL //struct kmp_internal_control *next;
+ };
+
+ return g_icvs;
+}
+
+static kmp_internal_control_t
+__kmp_get_x_global_icvs( const kmp_team_t *team ) {
+
+ kmp_internal_control_t gx_icvs;
+ gx_icvs.serial_nesting_level = 0; // probably =team->t.t_serial like in save_inter_controls
+ copy_icvs( & gx_icvs, & team->t.t_threads[0]->th.th_current_task->td_icvs );
+ gx_icvs.next = NULL;
+
+ return gx_icvs;
+}
+
+static void
+__kmp_initialize_root( kmp_root_t *root )
+{
+ int f;
+ kmp_team_t *root_team;
+ kmp_team_t *hot_team;
+ int hot_team_max_nth;
+ kmp_r_sched_t r_sched = __kmp_get_schedule_global(); // get current state of scheduling globals
+ kmp_internal_control_t r_icvs = __kmp_get_global_icvs();
+ KMP_DEBUG_ASSERT( root );
+ KMP_ASSERT( ! root->r.r_begin );
+
+ /* setup the root state structure */
+ __kmp_init_lock( &root->r.r_begin_lock );
+ root->r.r_begin = FALSE;
+ root->r.r_active = FALSE;
+ root->r.r_in_parallel = 0;
+ root->r.r_blocktime = __kmp_dflt_blocktime;
+ root->r.r_nested = __kmp_dflt_nested;
+
+ /* setup the root team for this task */
+ /* allocate the root team structure */
+ KF_TRACE( 10, ( "__kmp_initialize_root: before root_team\n" ) );
+
+ root_team =
+ __kmp_allocate_team(
+ root,
+ 1, // new_nproc
+ 1, // max_nproc
+#if OMPT_SUPPORT
+ 0, // root parallel id
+#endif
+#if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0],
+#endif
+ &r_icvs,
+ 0 // argc
+ USE_NESTED_HOT_ARG(NULL) // master thread is unknown
+ );
+#if USE_DEBUGGER
+ // Non-NULL value should be assigned to make the debugger display the root team.
+ TCW_SYNC_PTR(root_team->t.t_pkfn, (microtask_t)( ~ 0 ));
+#endif
+
+ KF_TRACE( 10, ( "__kmp_initialize_root: after root_team = %p\n", root_team ) );
+
+ root->r.r_root_team = root_team;
+ root_team->t.t_control_stack_top = NULL;
+
+ /* initialize root team */
+ root_team->t.t_threads[0] = NULL;
+ root_team->t.t_nproc = 1;
+ root_team->t.t_serialized = 1;
+ // TODO???: root_team->t.t_max_active_levels = __kmp_dflt_max_active_levels;
+ root_team->t.t_sched.r_sched_type = r_sched.r_sched_type;
+ root_team->t.t_sched.chunk = r_sched.chunk;
+ KA_TRACE( 20, ("__kmp_initialize_root: init root team %d arrived: join=%u, plain=%u\n",
+ root_team->t.t_id, KMP_INIT_BARRIER_STATE, KMP_INIT_BARRIER_STATE ));
+
+ /* setup the hot team for this task */
+ /* allocate the hot team structure */
+ KF_TRACE( 10, ( "__kmp_initialize_root: before hot_team\n" ) );
+
+ hot_team =
+ __kmp_allocate_team(
+ root,
+ 1, // new_nproc
+ __kmp_dflt_team_nth_ub * 2, // max_nproc
+#if OMPT_SUPPORT
+ 0, // root parallel id
+#endif
+#if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0],
+#endif
+ &r_icvs,
+ 0 // argc
+ USE_NESTED_HOT_ARG(NULL) // master thread is unknown
+ );
+ KF_TRACE( 10, ( "__kmp_initialize_root: after hot_team = %p\n", hot_team ) );
+
+ root->r.r_hot_team = hot_team;
+ root_team->t.t_control_stack_top = NULL;
+
+ /* first-time initialization */
+ hot_team->t.t_parent = root_team;
+
+ /* initialize hot team */
+ hot_team_max_nth = hot_team->t.t_max_nproc;
+ for ( f = 0; f < hot_team_max_nth; ++ f ) {
+ hot_team->t.t_threads[ f ] = NULL;
+ }; // for
+ hot_team->t.t_nproc = 1;
+ // TODO???: hot_team->t.t_max_active_levels = __kmp_dflt_max_active_levels;
+ hot_team->t.t_sched.r_sched_type = r_sched.r_sched_type;
+ hot_team->t.t_sched.chunk = r_sched.chunk;
+ hot_team->t.t_size_changed = 0;
+}
+
+#ifdef KMP_DEBUG
+
+
+typedef struct kmp_team_list_item {
+ kmp_team_p const * entry;
+ struct kmp_team_list_item * next;
+} kmp_team_list_item_t;
+typedef kmp_team_list_item_t * kmp_team_list_t;
+
+
+static void
+__kmp_print_structure_team_accum( // Add team to list of teams.
+ kmp_team_list_t list, // List of teams.
+ kmp_team_p const * team // Team to add.
+) {
+
+ // List must terminate with item where both entry and next are NULL.
+ // Team is added to the list only once.
+ // List is sorted in ascending order by team id.
+ // Team id is *not* a key.
+
+ kmp_team_list_t l;
+
+ KMP_DEBUG_ASSERT( list != NULL );
+ if ( team == NULL ) {
+ return;
+ }; // if
+
+ __kmp_print_structure_team_accum( list, team->t.t_parent );
+ __kmp_print_structure_team_accum( list, team->t.t_next_pool );
+
+ // Search list for the team.
+ l = list;
+ while ( l->next != NULL && l->entry != team ) {
+ l = l->next;
+ }; // while
+ if ( l->next != NULL ) {
+ return; // Team has been added before, exit.
+ }; // if
+
+ // Team is not found. Search list again for insertion point.
+ l = list;
+ while ( l->next != NULL && l->entry->t.t_id <= team->t.t_id ) {
+ l = l->next;
+ }; // while
+
+ // Insert team.
+ {
+ kmp_team_list_item_t * item =
+ (kmp_team_list_item_t *)KMP_INTERNAL_MALLOC( sizeof( kmp_team_list_item_t ) );
+ * item = * l;
+ l->entry = team;
+ l->next = item;
+ }
+
+}
+
+static void
+__kmp_print_structure_team(
+ char const * title,
+ kmp_team_p const * team
+
+) {
+ __kmp_printf( "%s", title );
+ if ( team != NULL ) {
+ __kmp_printf( "%2x %p\n", team->t.t_id, team );
+ } else {
+ __kmp_printf( " - (nil)\n" );
+ }; // if
+}
+
+static void
+__kmp_print_structure_thread(
+ char const * title,
+ kmp_info_p const * thread
+
+) {
+ __kmp_printf( "%s", title );
+ if ( thread != NULL ) {
+ __kmp_printf( "%2d %p\n", thread->th.th_info.ds.ds_gtid, thread );
+ } else {
+ __kmp_printf( " - (nil)\n" );
+ }; // if
+}
+
+void
+__kmp_print_structure(
+ void
+) {
+
+ kmp_team_list_t list;
+
+ // Initialize list of teams.
+ list = (kmp_team_list_item_t *)KMP_INTERNAL_MALLOC( sizeof( kmp_team_list_item_t ) );
+ list->entry = NULL;
+ list->next = NULL;
+
+ __kmp_printf( "\n------------------------------\nGlobal Thread Table\n------------------------------\n" );
+ {
+ int gtid;
+ for ( gtid = 0; gtid < __kmp_threads_capacity; ++ gtid ) {
+ __kmp_printf( "%2d", gtid );
+ if ( __kmp_threads != NULL ) {
+ __kmp_printf( " %p", __kmp_threads[ gtid ] );
+ }; // if
+ if ( __kmp_root != NULL ) {
+ __kmp_printf( " %p", __kmp_root[ gtid ] );
+ }; // if
+ __kmp_printf( "\n" );
+ }; // for gtid
+ }
+
+ // Print out __kmp_threads array.
+ __kmp_printf( "\n------------------------------\nThreads\n------------------------------\n" );
+ if ( __kmp_threads != NULL ) {
+ int gtid;
+ for ( gtid = 0; gtid < __kmp_threads_capacity; ++ gtid ) {
+ kmp_info_t const * thread = __kmp_threads[ gtid ];
+ if ( thread != NULL ) {
+ __kmp_printf( "GTID %2d %p:\n", gtid, thread );
+ __kmp_printf( " Our Root: %p\n", thread->th.th_root );
+ __kmp_print_structure_team( " Our Team: ", thread->th.th_team );
+ __kmp_print_structure_team( " Serial Team: ", thread->th.th_serial_team );
+ __kmp_printf( " Threads: %2d\n", thread->th.th_team_nproc );
+ __kmp_print_structure_thread( " Master: ", thread->th.th_team_master );
+ __kmp_printf( " Serialized?: %2d\n", thread->th.th_team_serialized );
+ __kmp_printf( " Set NProc: %2d\n", thread->th.th_set_nproc );
+#if OMP_40_ENABLED
+ __kmp_printf( " Set Proc Bind: %2d\n", thread->th.th_set_proc_bind );
+#endif
+ __kmp_print_structure_thread( " Next in pool: ", thread->th.th_next_pool );
+ __kmp_printf( "\n" );
+ __kmp_print_structure_team_accum( list, thread->th.th_team );
+ __kmp_print_structure_team_accum( list, thread->th.th_serial_team );
+ }; // if
+ }; // for gtid
+ } else {
+ __kmp_printf( "Threads array is not allocated.\n" );
+ }; // if
+
+ // Print out __kmp_root array.
+ __kmp_printf( "\n------------------------------\nUbers\n------------------------------\n" );
+ if ( __kmp_root != NULL ) {
+ int gtid;
+ for ( gtid = 0; gtid < __kmp_threads_capacity; ++ gtid ) {
+ kmp_root_t const * root = __kmp_root[ gtid ];
+ if ( root != NULL ) {
+ __kmp_printf( "GTID %2d %p:\n", gtid, root );
+ __kmp_print_structure_team( " Root Team: ", root->r.r_root_team );
+ __kmp_print_structure_team( " Hot Team: ", root->r.r_hot_team );
+ __kmp_print_structure_thread( " Uber Thread: ", root->r.r_uber_thread );
+ __kmp_printf( " Active?: %2d\n", root->r.r_active );
+ __kmp_printf( " Nested?: %2d\n", root->r.r_nested );
+ __kmp_printf( " In Parallel: %2d\n", root->r.r_in_parallel );
+ __kmp_printf( "\n" );
+ __kmp_print_structure_team_accum( list, root->r.r_root_team );
+ __kmp_print_structure_team_accum( list, root->r.r_hot_team );
+ }; // if
+ }; // for gtid
+ } else {
+ __kmp_printf( "Ubers array is not allocated.\n" );
+ }; // if
+
+ __kmp_printf( "\n------------------------------\nTeams\n------------------------------\n" );
+ while ( list->next != NULL ) {
+ kmp_team_p const * team = list->entry;
+ int i;
+ __kmp_printf( "Team %2x %p:\n", team->t.t_id, team );
+ __kmp_print_structure_team( " Parent Team: ", team->t.t_parent );
+ __kmp_printf( " Master TID: %2d\n", team->t.t_master_tid );
+ __kmp_printf( " Max threads: %2d\n", team->t.t_max_nproc );
+ __kmp_printf( " Levels of serial: %2d\n", team->t.t_serialized );
+ __kmp_printf( " Number threads: %2d\n", team->t.t_nproc );
+ for ( i = 0; i < team->t.t_nproc; ++ i ) {
+ __kmp_printf( " Thread %2d: ", i );
+ __kmp_print_structure_thread( "", team->t.t_threads[ i ] );
+ }; // for i
+ __kmp_print_structure_team( " Next in pool: ", team->t.t_next_pool );
+ __kmp_printf( "\n" );
+ list = list->next;
+ }; // while
+
+ // Print out __kmp_thread_pool and __kmp_team_pool.
+ __kmp_printf( "\n------------------------------\nPools\n------------------------------\n" );
+ __kmp_print_structure_thread( "Thread pool: ", (kmp_info_t *)__kmp_thread_pool );
+ __kmp_print_structure_team( "Team pool: ", (kmp_team_t *)__kmp_team_pool );
+ __kmp_printf( "\n" );
+
+ // Free team list.
+ while ( list != NULL ) {
+ kmp_team_list_item_t * item = list;
+ list = list->next;
+ KMP_INTERNAL_FREE( item );
+ }; // while
+
+}
+
+#endif
+
+
+//---------------------------------------------------------------------------
+// Stuff for per-thread fast random number generator
+// Table of primes
+
+static const unsigned __kmp_primes[] = {
+ 0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,
+ 0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,
+ 0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,
+ 0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,
+ 0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,
+ 0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,
+ 0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,
+ 0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,
+ 0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,
+ 0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,
+ 0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,
+ 0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,
+ 0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,
+ 0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,
+ 0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,
+ 0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f
+};
+
+//---------------------------------------------------------------------------
+// __kmp_get_random: Get a random number using a linear congruential method.
+
+unsigned short
+__kmp_get_random( kmp_info_t * thread )
+{
+ unsigned x = thread->th.th_x;
+ unsigned short r = x>>16;
+
+ thread->th.th_x = x*thread->th.th_a+1;
+
+ KA_TRACE(30, ("__kmp_get_random: THREAD: %d, RETURN: %u\n",
+ thread->th.th_info.ds.ds_tid, r) );
+
+ return r;
+}
+//--------------------------------------------------------
+// __kmp_init_random: Initialize a random number generator
+
+void
+__kmp_init_random( kmp_info_t * thread )
+{
+ unsigned seed = thread->th.th_info.ds.ds_tid;
+
+ thread->th.th_a = __kmp_primes[seed%(sizeof(__kmp_primes)/sizeof(__kmp_primes[0]))];
+ thread->th.th_x = (seed+1)*thread->th.th_a+1;
+ KA_TRACE(30, ("__kmp_init_random: THREAD: %u; A: %u\n", seed, thread->th.th_a) );
+}
+
+
+#if KMP_OS_WINDOWS
+/* reclaim array entries for root threads that are already dead, returns number reclaimed */
+static int
+__kmp_reclaim_dead_roots(void) {
+ int i, r = 0;
+
+ for(i = 0; i < __kmp_threads_capacity; ++i) {
+ if( KMP_UBER_GTID( i ) &&
+ !__kmp_still_running((kmp_info_t *)TCR_SYNC_PTR(__kmp_threads[i])) &&
+ !__kmp_root[i]->r.r_active ) { // AC: reclaim only roots died in non-active state
+ r += __kmp_unregister_root_other_thread(i);
+ }
+ }
+ return r;
+}
+#endif
+
+/*
+ This function attempts to create free entries in __kmp_threads and __kmp_root, and returns the number of
+ free entries generated.
+
+ For Windows* OS static library, the first mechanism used is to reclaim array entries for root threads that are
+ already dead.
+
+ On all platforms, expansion is attempted on the arrays __kmp_threads_ and __kmp_root, with appropriate
+ update to __kmp_threads_capacity. Array capacity is increased by doubling with clipping to
+ __kmp_tp_capacity, if threadprivate cache array has been created.
+ Synchronization with __kmpc_threadprivate_cached is done using __kmp_tp_cached_lock.
+
+ After any dead root reclamation, if the clipping value allows array expansion to result in the generation
+ of a total of nWish free slots, the function does that expansion. If not, but the clipping value allows
+ array expansion to result in the generation of a total of nNeed free slots, the function does that expansion.
+ Otherwise, nothing is done beyond the possible initial root thread reclamation. However, if nNeed is zero,
+ a best-effort attempt is made to fulfil nWish as far as possible, i.e. the function will attempt to create
+ as many free slots as possible up to nWish.
+
+ If any argument is negative, the behavior is undefined.
+*/
+static int
+__kmp_expand_threads(int nWish, int nNeed) {
+ int added = 0;
+ int old_tp_cached;
+ int __kmp_actual_max_nth;
+
+ if(nNeed > nWish) /* normalize the arguments */
+ nWish = nNeed;
+#if KMP_OS_WINDOWS && !defined KMP_DYNAMIC_LIB
+/* only for Windows static library */
+ /* reclaim array entries for root threads that are already dead */
+ added = __kmp_reclaim_dead_roots();
+
+ if(nNeed) {
+ nNeed -= added;
+ if(nNeed < 0)
+ nNeed = 0;
+ }
+ if(nWish) {
+ nWish -= added;
+ if(nWish < 0)
+ nWish = 0;
+ }
+#endif
+ if(nWish <= 0)
+ return added;
+
+ while(1) {
+ int nTarget;
+ int minimumRequiredCapacity;
+ int newCapacity;
+ kmp_info_t **newThreads;
+ kmp_root_t **newRoot;
+
+ //
+ // Note that __kmp_threads_capacity is not bounded by __kmp_max_nth.
+ // If __kmp_max_nth is set to some value less than __kmp_sys_max_nth
+ // by the user via OMP_THREAD_LIMIT, then __kmp_threads_capacity may
+ // become > __kmp_max_nth in one of two ways:
+ //
+ // 1) The initialization thread (gtid = 0) exits. __kmp_threads[0]
+ // may not be resused by another thread, so we may need to increase
+ // __kmp_threads_capacity to __kmp_max_threads + 1.
+ //
+ // 2) New foreign root(s) are encountered. We always register new
+ // foreign roots. This may cause a smaller # of threads to be
+ // allocated at subsequent parallel regions, but the worker threads
+ // hang around (and eventually go to sleep) and need slots in the
+ // __kmp_threads[] array.
+ //
+ // Anyway, that is the reason for moving the check to see if
+ // __kmp_max_threads was exceeded into __kmp_reseerve_threads()
+ // instead of having it performed here. -BB
+ //
+ old_tp_cached = __kmp_tp_cached;
+ __kmp_actual_max_nth = old_tp_cached ? __kmp_tp_capacity : __kmp_sys_max_nth;
+ KMP_DEBUG_ASSERT(__kmp_actual_max_nth >= __kmp_threads_capacity);
+
+ /* compute expansion headroom to check if we can expand and whether to aim for nWish or nNeed */
+ nTarget = nWish;
+ if(__kmp_actual_max_nth - __kmp_threads_capacity < nTarget) {
+ /* can't fulfil nWish, so try nNeed */
+ if(nNeed) {
+ nTarget = nNeed;
+ if(__kmp_actual_max_nth - __kmp_threads_capacity < nTarget) {
+ /* possible expansion too small -- give up */
+ break;
+ }
+ } else {
+ /* best-effort */
+ nTarget = __kmp_actual_max_nth - __kmp_threads_capacity;
+ if(!nTarget) {
+ /* can expand at all -- give up */
+ break;
+ }
+ }
+ }
+ minimumRequiredCapacity = __kmp_threads_capacity + nTarget;
+
+ newCapacity = __kmp_threads_capacity;
+ do{
+ newCapacity =
+ newCapacity <= (__kmp_actual_max_nth >> 1) ?
+ (newCapacity << 1) :
+ __kmp_actual_max_nth;
+ } while(newCapacity < minimumRequiredCapacity);
+ newThreads = (kmp_info_t**) __kmp_allocate((sizeof(kmp_info_t*) + sizeof(kmp_root_t*)) * newCapacity + CACHE_LINE);
+ newRoot = (kmp_root_t**) ((char*)newThreads + sizeof(kmp_info_t*) * newCapacity );
+ KMP_MEMCPY(newThreads, __kmp_threads, __kmp_threads_capacity * sizeof(kmp_info_t*));
+ KMP_MEMCPY(newRoot, __kmp_root, __kmp_threads_capacity * sizeof(kmp_root_t*));
+ memset(newThreads + __kmp_threads_capacity, 0,
+ (newCapacity - __kmp_threads_capacity) * sizeof(kmp_info_t*));
+ memset(newRoot + __kmp_threads_capacity, 0,
+ (newCapacity - __kmp_threads_capacity) * sizeof(kmp_root_t*));
+
+ if(!old_tp_cached && __kmp_tp_cached && newCapacity > __kmp_tp_capacity) {
+ /* __kmp_tp_cached has changed, i.e. __kmpc_threadprivate_cached has allocated a threadprivate cache
+ while we were allocating the expanded array, and our new capacity is larger than the threadprivate
+ cache capacity, so we should deallocate the expanded arrays and try again. This is the first check
+ of a double-check pair.
+ */
+ __kmp_free(newThreads);
+ continue; /* start over and try again */
+ }
+ __kmp_acquire_bootstrap_lock(&__kmp_tp_cached_lock);
+ if(!old_tp_cached && __kmp_tp_cached && newCapacity > __kmp_tp_capacity) {
+ /* Same check as above, but this time with the lock so we can be sure if we can succeed. */
+ __kmp_release_bootstrap_lock(&__kmp_tp_cached_lock);
+ __kmp_free(newThreads);
+ continue; /* start over and try again */
+ } else {
+ /* success */
+ // __kmp_free( __kmp_threads ); // ATT: It leads to crash. Need to be investigated.
+ //
+ *(kmp_info_t**volatile*)&__kmp_threads = newThreads;
+ *(kmp_root_t**volatile*)&__kmp_root = newRoot;
+ added += newCapacity - __kmp_threads_capacity;
+ *(volatile int*)&__kmp_threads_capacity = newCapacity;
+ __kmp_release_bootstrap_lock(&__kmp_tp_cached_lock);
+ break; /* succeeded, so we can exit the loop */
+ }
+ }
+ return added;
+}
+
+/* register the current thread as a root thread and obtain our gtid */
+/* we must have the __kmp_initz_lock held at this point */
+/* Argument TRUE only if are the thread that calls from __kmp_do_serial_initialize() */
+int
+__kmp_register_root( int initial_thread )
+{
+ kmp_info_t *root_thread;
+ kmp_root_t *root;
+ int gtid;
+ int capacity;
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+ KA_TRACE( 20, ("__kmp_register_root: entered\n"));
+ KMP_MB();
+
+
+ /*
+ 2007-03-02:
+
+ If initial thread did not invoke OpenMP RTL yet, and this thread is not an initial one,
+ "__kmp_all_nth >= __kmp_threads_capacity" condition does not work as expected -- it may
+ return false (that means there is at least one empty slot in __kmp_threads array), but it
+ is possible the only free slot is #0, which is reserved for initial thread and so cannot be
+ used for this one. Following code workarounds this bug.
+
+ However, right solution seems to be not reserving slot #0 for initial thread because:
+ (1) there is no magic in slot #0,
+ (2) we cannot detect initial thread reliably (the first thread which does serial
+ initialization may be not a real initial thread).
+ */
+ capacity = __kmp_threads_capacity;
+ if ( ! initial_thread && TCR_PTR(__kmp_threads[0]) == NULL ) {
+ -- capacity;
+ }; // if
+
+ /* see if there are too many threads */
+ if ( __kmp_all_nth >= capacity && !__kmp_expand_threads( 1, 1 ) ) {
+ if ( __kmp_tp_cached ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantRegisterNewThread ),
+ KMP_HNT( Set_ALL_THREADPRIVATE, __kmp_tp_capacity ),
+ KMP_HNT( PossibleSystemLimitOnThreads ),
+ __kmp_msg_null
+ );
+ }
+ else {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantRegisterNewThread ),
+ KMP_HNT( SystemLimitOnThreads ),
+ __kmp_msg_null
+ );
+ }
+ }; // if
+
+ /* find an available thread slot */
+ /* Don't reassign the zero slot since we need that to only be used by initial
+ thread */
+ for( gtid=(initial_thread ? 0 : 1) ; TCR_PTR(__kmp_threads[gtid]) != NULL ; gtid++ )
+ ;
+ KA_TRACE( 1, ("__kmp_register_root: found slot in threads array: T#%d\n", gtid ));
+ KMP_ASSERT( gtid < __kmp_threads_capacity );
+
+ /* update global accounting */
+ __kmp_all_nth ++;
+ TCW_4(__kmp_nth, __kmp_nth + 1);
+
+ //
+ // if __kmp_adjust_gtid_mode is set, then we use method #1 (sp search)
+ // for low numbers of procs, and method #2 (keyed API call) for higher
+ // numbers of procs.
+ //
+ if ( __kmp_adjust_gtid_mode ) {
+ if ( __kmp_all_nth >= __kmp_tls_gtid_min ) {
+ if ( TCR_4(__kmp_gtid_mode) != 2) {
+ TCW_4(__kmp_gtid_mode, 2);
+ }
+ }
+ else {
+ if (TCR_4(__kmp_gtid_mode) != 1 ) {
+ TCW_4(__kmp_gtid_mode, 1);
+ }
+ }
+ }
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime to zero if necessary */
+ /* Middle initialization might not have occurred yet */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ if ( __kmp_nth > __kmp_avail_proc ) {
+ __kmp_zero_bt = TRUE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ /* setup this new hierarchy */
+ if( ! ( root = __kmp_root[gtid] )) {
+ root = __kmp_root[gtid] = (kmp_root_t*) __kmp_allocate( sizeof(kmp_root_t) );
+ KMP_DEBUG_ASSERT( ! root->r.r_root_team );
+ }
+
+ __kmp_initialize_root( root );
+
+ /* setup new root thread structure */
+ if( root->r.r_uber_thread ) {
+ root_thread = root->r.r_uber_thread;
+ } else {
+ root_thread = (kmp_info_t*) __kmp_allocate( sizeof(kmp_info_t) );
+ if ( __kmp_storage_map ) {
+ __kmp_print_thread_storage_map( root_thread, gtid );
+ }
+ root_thread->th.th_info .ds.ds_gtid = gtid;
+ root_thread->th.th_root = root;
+ if( __kmp_env_consistency_check ) {
+ root_thread->th.th_cons = __kmp_allocate_cons_stack( gtid );
+ }
+ #if USE_FAST_MEMORY
+ __kmp_initialize_fast_memory( root_thread );
+ #endif /* USE_FAST_MEMORY */
+
+ #if KMP_USE_BGET
+ KMP_DEBUG_ASSERT( root_thread->th.th_local.bget_data == NULL );
+ __kmp_initialize_bget( root_thread );
+ #endif
+ __kmp_init_random( root_thread ); // Initialize random number generator
+ }
+
+ /* setup the serial team held in reserve by the root thread */
+ if( ! root_thread->th.th_serial_team ) {
+ kmp_internal_control_t r_icvs = __kmp_get_global_icvs();
+ KF_TRACE( 10, ( "__kmp_register_root: before serial_team\n" ) );
+
+ root_thread->th.th_serial_team = __kmp_allocate_team( root, 1, 1,
+#if OMPT_SUPPORT
+ 0, // root parallel id
+#endif
+#if OMP_40_ENABLED
+ proc_bind_default,
+#endif
+ &r_icvs,
+ 0 USE_NESTED_HOT_ARG(NULL) );
+ }
+ KMP_ASSERT( root_thread->th.th_serial_team );
+ KF_TRACE( 10, ( "__kmp_register_root: after serial_team = %p\n",
+ root_thread->th.th_serial_team ) );
+
+ /* drop root_thread into place */
+ TCW_SYNC_PTR(__kmp_threads[gtid], root_thread);
+
+ root->r.r_root_team->t.t_threads[0] = root_thread;
+ root->r.r_hot_team ->t.t_threads[0] = root_thread;
+ root_thread->th.th_serial_team->t.t_threads[0] = root_thread;
+ root_thread->th.th_serial_team->t.t_serialized = 0; // AC: the team created in reserve, not for execution (it is unused for now).
+ root->r.r_uber_thread = root_thread;
+
+ /* initialize the thread, get it ready to go */
+ __kmp_initialize_info( root_thread, root->r.r_root_team, 0, gtid );
+ TCW_4(__kmp_init_gtid, TRUE);
+
+ /* prepare the master thread for get_gtid() */
+ __kmp_gtid_set_specific( gtid );
+
+#if USE_ITT_BUILD
+ __kmp_itt_thread_name( gtid );
+#endif /* USE_ITT_BUILD */
+
+ #ifdef KMP_TDATA_GTID
+ __kmp_gtid = gtid;
+ #endif
+ __kmp_create_worker( gtid, root_thread, __kmp_stksize );
+ KMP_DEBUG_ASSERT( __kmp_gtid_get_specific() == gtid );
+
+ KA_TRACE( 20, ("__kmp_register_root: T#%d init T#%d(%d:%d) arrived: join=%u, plain=%u\n",
+ gtid, __kmp_gtid_from_tid( 0, root->r.r_hot_team ),
+ root->r.r_hot_team->t.t_id, 0, KMP_INIT_BARRIER_STATE,
+ KMP_INIT_BARRIER_STATE ) );
+ { // Initialize barrier data.
+ int b;
+ for ( b = 0; b < bs_last_barrier; ++ b ) {
+ root_thread->th.th_bar[ b ].bb.b_arrived = KMP_INIT_BARRIER_STATE;
+#if USE_DEBUGGER
+ root_thread->th.th_bar[ b ].bb.b_worker_arrived = 0;
+#endif
+ }; // for
+ }
+ KMP_DEBUG_ASSERT( root->r.r_hot_team->t.t_bar[ bs_forkjoin_barrier ].b_arrived == KMP_INIT_BARRIER_STATE );
+
+#if KMP_AFFINITY_SUPPORTED
+# if OMP_40_ENABLED
+ root_thread->th.th_current_place = KMP_PLACE_UNDEFINED;
+ root_thread->th.th_new_place = KMP_PLACE_UNDEFINED;
+ root_thread->th.th_first_place = KMP_PLACE_UNDEFINED;
+ root_thread->th.th_last_place = KMP_PLACE_UNDEFINED;
+# endif
+
+ if ( TCR_4(__kmp_init_middle) ) {
+ __kmp_affinity_set_init_mask( gtid, TRUE );
+ }
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+ __kmp_root_counter ++;
+
+ KMP_MB();
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ return gtid;
+}
+
+#if KMP_NESTED_HOT_TEAMS
+static int
+__kmp_free_hot_teams( kmp_root_t *root, kmp_info_t *thr, int level, const int max_level )
+{
+ int i, n, nth;
+ kmp_hot_team_ptr_t *hot_teams = thr->th.th_hot_teams;
+ if( !hot_teams || !hot_teams[level].hot_team ) {
+ return 0;
+ }
+ KMP_DEBUG_ASSERT( level < max_level );
+ kmp_team_t *team = hot_teams[level].hot_team;
+ nth = hot_teams[level].hot_team_nth;
+ n = nth - 1; // master is not freed
+ if( level < max_level - 1 ) {
+ for( i = 0; i < nth; ++i ) {
+ kmp_info_t *th = team->t.t_threads[i];
+ n += __kmp_free_hot_teams( root, th, level + 1, max_level );
+ if( i > 0 && th->th.th_hot_teams ) {
+ __kmp_free( th->th.th_hot_teams );
+ th->th.th_hot_teams = NULL;
+ }
+ }
+ }
+ __kmp_free_team( root, team, NULL );
+ return n;
+}
+#endif
+
+/* Resets a root thread and clear its root and hot teams.
+ Returns the number of __kmp_threads entries directly and indirectly freed.
+*/
+static int
+__kmp_reset_root(int gtid, kmp_root_t *root)
+{
+ kmp_team_t * root_team = root->r.r_root_team;
+ kmp_team_t * hot_team = root->r.r_hot_team;
+ int n = hot_team->t.t_nproc;
+ int i;
+
+ KMP_DEBUG_ASSERT( ! root->r.r_active );
+
+ root->r.r_root_team = NULL;
+ root->r.r_hot_team = NULL;
+ // __kmp_free_team() does not free hot teams, so we have to clear r_hot_team before call
+ // to __kmp_free_team().
+ __kmp_free_team( root, root_team USE_NESTED_HOT_ARG(NULL) );
+#if KMP_NESTED_HOT_TEAMS
+ if( __kmp_hot_teams_max_level > 0 ) { // need to free nested hot teams and their threads if any
+ for( i = 0; i < hot_team->t.t_nproc; ++i ) {
+ kmp_info_t *th = hot_team->t.t_threads[i];
+ if( __kmp_hot_teams_max_level > 1 ) {
+ n += __kmp_free_hot_teams( root, th, 1, __kmp_hot_teams_max_level );
+ }
+ if( th->th.th_hot_teams ) {
+ __kmp_free( th->th.th_hot_teams );
+ th->th.th_hot_teams = NULL;
+ }
+ }
+ }
+#endif
+ __kmp_free_team( root, hot_team USE_NESTED_HOT_ARG(NULL) );
+
+ //
+ // Before we can reap the thread, we need to make certain that all
+ // other threads in the teams that had this root as ancestor have stopped trying to steal tasks.
+ //
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ __kmp_wait_to_unref_task_teams();
+ }
+
+ #if KMP_OS_WINDOWS
+ /* Close Handle of root duplicated in __kmp_create_worker (tr #62919) */
+ KA_TRACE( 10, ("__kmp_reset_root: free handle, th = %p, handle = %" KMP_UINTPTR_SPEC "\n",
+ (LPVOID)&(root->r.r_uber_thread->th),
+ root->r.r_uber_thread->th.th_info.ds.ds_thread ) );
+ __kmp_free_handle( root->r.r_uber_thread->th.th_info.ds.ds_thread );
+ #endif /* KMP_OS_WINDOWS */
+
+#if OMPT_SUPPORT
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_thread_end)) {
+ int gtid = __kmp_get_gtid();
+ __ompt_thread_end(ompt_thread_initial, gtid);
+ }
+#endif
+
+ TCW_4(__kmp_nth, __kmp_nth - 1); // __kmp_reap_thread will decrement __kmp_all_nth.
+ __kmp_reap_thread( root->r.r_uber_thread, 1 );
+
+ // We canot put root thread to __kmp_thread_pool, so we have to reap it istead of freeing.
+ root->r.r_uber_thread = NULL;
+ /* mark root as no longer in use */
+ root->r.r_begin = FALSE;
+
+ return n;
+}
+
+void
+__kmp_unregister_root_current_thread( int gtid )
+{
+ KA_TRACE( 1, ("__kmp_unregister_root_current_thread: enter T#%d\n", gtid ));
+ /* this lock should be ok, since unregister_root_current_thread is never called during
+ * and abort, only during a normal close. furthermore, if you have the
+ * forkjoin lock, you should never try to get the initz lock */
+
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+ if( TCR_4(__kmp_global.g.g_done) || !__kmp_init_serial ) {
+ KC_TRACE( 10, ("__kmp_unregister_root_current_thread: already finished, exiting T#%d\n", gtid ));
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ return;
+ }
+ kmp_root_t *root = __kmp_root[gtid];
+
+ KMP_DEBUG_ASSERT( __kmp_threads && __kmp_threads[gtid] );
+ KMP_ASSERT( KMP_UBER_GTID( gtid ));
+ KMP_ASSERT( root == __kmp_threads[gtid]->th.th_root );
+ KMP_ASSERT( root->r.r_active == FALSE );
+
+
+ KMP_MB();
+
+#if OMP_45_ENABLED
+ kmp_info_t * thread = __kmp_threads[gtid];
+ kmp_team_t * team = thread->th.th_team;
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+
+ // we need to wait for the proxy tasks before finishing the thread
+ if ( task_team != NULL && task_team->tt.tt_found_proxy_tasks ) {
+#if OMPT_SUPPORT
+ // the runtime is shutting down so we won't report any events
+ thread->th.ompt_thread_info.state = ompt_state_undefined;
+#endif
+ __kmp_task_team_wait(thread, team USE_ITT_BUILD_ARG(NULL));
+ }
+#endif
+
+ __kmp_reset_root(gtid, root);
+
+ /* free up this thread slot */
+ __kmp_gtid_set_specific( KMP_GTID_DNE );
+#ifdef KMP_TDATA_GTID
+ __kmp_gtid = KMP_GTID_DNE;
+#endif
+
+ KMP_MB();
+ KC_TRACE( 10, ("__kmp_unregister_root_current_thread: T#%d unregistered\n", gtid ));
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+}
+
+#if KMP_OS_WINDOWS
+/* __kmp_forkjoin_lock must be already held
+ Unregisters a root thread that is not the current thread. Returns the number of
+ __kmp_threads entries freed as a result.
+ */
+static int
+__kmp_unregister_root_other_thread( int gtid )
+{
+ kmp_root_t *root = __kmp_root[gtid];
+ int r;
+
+ KA_TRACE( 1, ("__kmp_unregister_root_other_thread: enter T#%d\n", gtid ));
+ KMP_DEBUG_ASSERT( __kmp_threads && __kmp_threads[gtid] );
+ KMP_ASSERT( KMP_UBER_GTID( gtid ));
+ KMP_ASSERT( root == __kmp_threads[gtid]->th.th_root );
+ KMP_ASSERT( root->r.r_active == FALSE );
+
+ r = __kmp_reset_root(gtid, root);
+ KC_TRACE( 10, ("__kmp_unregister_root_other_thread: T#%d unregistered\n", gtid ));
+ return r;
+}
+#endif
+
+#if KMP_DEBUG
+void __kmp_task_info() {
+
+ kmp_int32 gtid = __kmp_entry_gtid();
+ kmp_int32 tid = __kmp_tid_from_gtid( gtid );
+ kmp_info_t *this_thr = __kmp_threads[ gtid ];
+ kmp_team_t *steam = this_thr->th.th_serial_team;
+ kmp_team_t *team = this_thr->th.th_team;
+
+ __kmp_printf( "__kmp_task_info: gtid=%d tid=%d t_thread=%p team=%p curtask=%p ptask=%p\n",
+ gtid, tid, this_thr, team, this_thr->th.th_current_task, team->t.t_implicit_task_taskdata[tid].td_parent );
+}
+#endif // KMP_DEBUG
+
+/* TODO optimize with one big memclr, take out what isn't needed,
+ * split responsibility to workers as much as possible, and delay
+ * initialization of features as much as possible */
+static void
+__kmp_initialize_info( kmp_info_t *this_thr, kmp_team_t *team, int tid, int gtid )
+{
+ /* this_thr->th.th_info.ds.ds_gtid is setup in kmp_allocate_thread/create_worker
+ * this_thr->th.th_serial_team is setup in __kmp_allocate_thread */
+ kmp_info_t *master = team->t.t_threads[0];
+ KMP_DEBUG_ASSERT( this_thr != NULL );
+ KMP_DEBUG_ASSERT( this_thr->th.th_serial_team );
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( team->t.t_threads );
+ KMP_DEBUG_ASSERT( team->t.t_dispatch );
+ KMP_DEBUG_ASSERT( master );
+ KMP_DEBUG_ASSERT( master->th.th_root );
+
+ KMP_MB();
+
+ TCW_SYNC_PTR(this_thr->th.th_team, team);
+
+ this_thr->th.th_info.ds.ds_tid = tid;
+ this_thr->th.th_set_nproc = 0;
+#if OMP_40_ENABLED
+ this_thr->th.th_set_proc_bind = proc_bind_default;
+# if KMP_AFFINITY_SUPPORTED
+ this_thr->th.th_new_place = this_thr->th.th_current_place;
+# endif
+#endif
+ this_thr->th.th_root = master->th.th_root;
+
+ /* setup the thread's cache of the team structure */
+ this_thr->th.th_team_nproc = team->t.t_nproc;
+ this_thr->th.th_team_master = master;
+ this_thr->th.th_team_serialized = team->t.t_serialized;
+ TCW_PTR(this_thr->th.th_sleep_loc, NULL);
+
+ KMP_DEBUG_ASSERT( team->t.t_implicit_task_taskdata );
+
+ KF_TRACE( 10, ( "__kmp_initialize_info1: T#%d:%d this_thread=%p curtask=%p\n",
+ tid, gtid, this_thr, this_thr->th.th_current_task ) );
+
+ __kmp_init_implicit_task( this_thr->th.th_team_master->th.th_ident, this_thr, team, tid, TRUE );
+
+ KF_TRACE( 10, ( "__kmp_initialize_info2: T#%d:%d this_thread=%p curtask=%p\n",
+ tid, gtid, this_thr, this_thr->th.th_current_task ) );
+ // TODO: Initialize ICVs from parent; GEH - isn't that already done in __kmp_initialize_team()?
+
+ /* TODO no worksharing in speculative threads */
+ this_thr->th.th_dispatch = &team->t.t_dispatch[ tid ];
+
+ this_thr->th.th_local.this_construct = 0;
+
+#ifdef BUILD_TV
+ this_thr->th.th_local.tv_data = 0;
+#endif
+
+ if ( ! this_thr->th.th_pri_common ) {
+ this_thr->th.th_pri_common = (struct common_table *) __kmp_allocate( sizeof(struct common_table) );
+ if ( __kmp_storage_map ) {
+ __kmp_print_storage_map_gtid(
+ gtid, this_thr->th.th_pri_common, this_thr->th.th_pri_common + 1,
+ sizeof( struct common_table ), "th_%d.th_pri_common\n", gtid
+ );
+ }; // if
+ this_thr->th.th_pri_head = NULL;
+ }; // if
+
+ /* Initialize dynamic dispatch */
+ {
+ volatile kmp_disp_t *dispatch = this_thr->th.th_dispatch;
+ /*
+ * Use team max_nproc since this will never change for the team.
+ */
+ size_t disp_size = sizeof( dispatch_private_info_t ) *
+ ( team->t.t_max_nproc == 1 ? 1 : __kmp_dispatch_num_buffers );
+ KD_TRACE( 10, ("__kmp_initialize_info: T#%d max_nproc: %d\n", gtid, team->t.t_max_nproc ) );
+ KMP_ASSERT( dispatch );
+ KMP_DEBUG_ASSERT( team->t.t_dispatch );
+ KMP_DEBUG_ASSERT( dispatch == &team->t.t_dispatch[ tid ] );
+
+ dispatch->th_disp_index = 0;
+#if OMP_45_ENABLED
+ dispatch->th_doacross_buf_idx = 0;
+#endif
+ if( ! dispatch->th_disp_buffer ) {
+ dispatch->th_disp_buffer = (dispatch_private_info_t *) __kmp_allocate( disp_size );
+
+ if ( __kmp_storage_map ) {
+ __kmp_print_storage_map_gtid( gtid, &dispatch->th_disp_buffer[ 0 ],
+ &dispatch->th_disp_buffer[ team->t.t_max_nproc == 1 ? 1 : __kmp_dispatch_num_buffers ],
+ disp_size, "th_%d.th_dispatch.th_disp_buffer "
+ "(team_%d.t_dispatch[%d].th_disp_buffer)",
+ gtid, team->t.t_id, gtid );
+ }
+ } else {
+ memset( & dispatch->th_disp_buffer[0], '\0', disp_size );
+ }
+
+ dispatch->th_dispatch_pr_current = 0;
+ dispatch->th_dispatch_sh_current = 0;
+
+ dispatch->th_deo_fcn = 0; /* ORDERED */
+ dispatch->th_dxo_fcn = 0; /* END ORDERED */
+ }
+
+ this_thr->th.th_next_pool = NULL;
+
+ if (!this_thr->th.th_task_state_memo_stack) {
+ size_t i;
+ this_thr->th.th_task_state_memo_stack = (kmp_uint8 *) __kmp_allocate( 4*sizeof(kmp_uint8) );
+ this_thr->th.th_task_state_top = 0;
+ this_thr->th.th_task_state_stack_sz = 4;
+ for (i=0; i<this_thr->th.th_task_state_stack_sz; ++i) // zero init the stack
+ this_thr->th.th_task_state_memo_stack[i] = 0;
+ }
+
+ KMP_DEBUG_ASSERT( !this_thr->th.th_spin_here );
+ KMP_DEBUG_ASSERT( this_thr->th.th_next_waiting == 0 );
+
+ KMP_MB();
+}
+
+
+/* allocate a new thread for the requesting team. this is only called from within a
+ * forkjoin critical section. we will first try to get an available thread from the
+ * thread pool. if none is available, we will fork a new one assuming we are able
+ * to create a new one. this should be assured, as the caller should check on this
+ * first.
+ */
+kmp_info_t *
+__kmp_allocate_thread( kmp_root_t *root, kmp_team_t *team, int new_tid )
+{
+ kmp_team_t *serial_team;
+ kmp_info_t *new_thr;
+ int new_gtid;
+
+ KA_TRACE( 20, ("__kmp_allocate_thread: T#%d\n", __kmp_get_gtid() ));
+ KMP_DEBUG_ASSERT( root && team );
+#if !KMP_NESTED_HOT_TEAMS
+ KMP_DEBUG_ASSERT( KMP_MASTER_GTID( __kmp_get_gtid() ));
+#endif
+ KMP_MB();
+
+ /* first, try to get one from the thread pool */
+ if ( __kmp_thread_pool ) {
+
+ new_thr = (kmp_info_t*)__kmp_thread_pool;
+ __kmp_thread_pool = (volatile kmp_info_t *) new_thr->th.th_next_pool;
+ if ( new_thr == __kmp_thread_pool_insert_pt ) {
+ __kmp_thread_pool_insert_pt = NULL;
+ }
+ TCW_4(new_thr->th.th_in_pool, FALSE);
+ //
+ // Don't touch th_active_in_pool or th_active.
+ // The worker thread adjusts those flags as it sleeps/awakens.
+ //
+ __kmp_thread_pool_nth--;
+
+ KA_TRACE( 20, ("__kmp_allocate_thread: T#%d using thread T#%d\n",
+ __kmp_get_gtid(), new_thr->th.th_info.ds.ds_gtid ));
+ KMP_ASSERT( ! new_thr->th.th_team );
+ KMP_DEBUG_ASSERT( __kmp_nth < __kmp_threads_capacity );
+ KMP_DEBUG_ASSERT( __kmp_thread_pool_nth >= 0 );
+
+ /* setup the thread structure */
+ __kmp_initialize_info( new_thr, team, new_tid, new_thr->th.th_info.ds.ds_gtid );
+ KMP_DEBUG_ASSERT( new_thr->th.th_serial_team );
+
+ TCW_4(__kmp_nth, __kmp_nth + 1);
+
+ new_thr->th.th_task_state = 0;
+ new_thr->th.th_task_state_top = 0;
+ new_thr->th.th_task_state_stack_sz = 4;
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime back to zero if necessar y */
+ /* Middle initialization might not have occurred yet */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ if ( __kmp_nth > __kmp_avail_proc ) {
+ __kmp_zero_bt = TRUE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+#if KMP_DEBUG
+ // If thread entered pool via __kmp_free_thread, wait_flag should != KMP_BARRIER_PARENT_FLAG.
+ int b;
+ kmp_balign_t * balign = new_thr->th.th_bar;
+ for( b = 0; b < bs_last_barrier; ++ b )
+ KMP_DEBUG_ASSERT(balign[b].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#endif
+
+ KF_TRACE( 10, ("__kmp_allocate_thread: T#%d using thread %p T#%d\n",
+ __kmp_get_gtid(), new_thr, new_thr->th.th_info.ds.ds_gtid ));
+
+ KMP_MB();
+ return new_thr;
+ }
+
+
+ /* no, well fork a new one */
+ KMP_ASSERT( __kmp_nth == __kmp_all_nth );
+ KMP_ASSERT( __kmp_all_nth < __kmp_threads_capacity );
+
+ //
+ // If this is the first worker thread the RTL is creating, then also
+ // launch the monitor thread. We try to do this as early as possible.
+ //
+ if ( ! TCR_4( __kmp_init_monitor ) ) {
+ __kmp_acquire_bootstrap_lock( & __kmp_monitor_lock );
+ if ( ! TCR_4( __kmp_init_monitor ) ) {
+ KF_TRACE( 10, ( "before __kmp_create_monitor\n" ) );
+ TCW_4( __kmp_init_monitor, 1 );
+ __kmp_create_monitor( & __kmp_monitor );
+ KF_TRACE( 10, ( "after __kmp_create_monitor\n" ) );
+ #if KMP_OS_WINDOWS
+ // AC: wait until monitor has started. This is a fix for CQ232808.
+ // The reason is that if the library is loaded/unloaded in a loop with small (parallel)
+ // work in between, then there is high probability that monitor thread started after
+ // the library shutdown. At shutdown it is too late to cope with the problem, because
+ // when the master is in DllMain (process detach) the monitor has no chances to start
+ // (it is blocked), and master has no means to inform the monitor that the library has gone,
+ // because all the memory which the monitor can access is going to be released/reset.
+ while ( TCR_4(__kmp_init_monitor) < 2 ) {
+ KMP_YIELD( TRUE );
+ }
+ KF_TRACE( 10, ( "after monitor thread has started\n" ) );
+ #endif
+ }
+ __kmp_release_bootstrap_lock( & __kmp_monitor_lock );
+ }
+
+ KMP_MB();
+ for( new_gtid=1 ; TCR_PTR(__kmp_threads[new_gtid]) != NULL; ++new_gtid ) {
+ KMP_DEBUG_ASSERT( new_gtid < __kmp_threads_capacity );
+ }
+
+ /* allocate space for it. */
+ new_thr = (kmp_info_t*) __kmp_allocate( sizeof(kmp_info_t) );
+
+ TCW_SYNC_PTR(__kmp_threads[new_gtid], new_thr);
+
+ if ( __kmp_storage_map ) {
+ __kmp_print_thread_storage_map( new_thr, new_gtid );
+ }
+
+ /* add the reserve serialized team, initialized from the team's master thread */
+ {
+ kmp_internal_control_t r_icvs = __kmp_get_x_global_icvs( team );
+ KF_TRACE( 10, ( "__kmp_allocate_thread: before th_serial/serial_team\n" ) );
+
+ new_thr->th.th_serial_team = serial_team =
+ (kmp_team_t*) __kmp_allocate_team( root, 1, 1,
+#if OMPT_SUPPORT
+ 0, // root parallel id
+#endif
+#if OMP_40_ENABLED
+ proc_bind_default,
+#endif
+ &r_icvs,
+ 0 USE_NESTED_HOT_ARG(NULL) );
+ }
+ KMP_ASSERT ( serial_team );
+ serial_team->t.t_serialized = 0; // AC: the team created in reserve, not for execution (it is unused for now).
+ serial_team->t.t_threads[0] = new_thr;
+ KF_TRACE( 10, ( "__kmp_allocate_thread: after th_serial/serial_team : new_thr=%p\n",
+ new_thr ) );
+
+ /* setup the thread structures */
+ __kmp_initialize_info( new_thr, team, new_tid, new_gtid );
+
+ #if USE_FAST_MEMORY
+ __kmp_initialize_fast_memory( new_thr );
+ #endif /* USE_FAST_MEMORY */
+
+ #if KMP_USE_BGET
+ KMP_DEBUG_ASSERT( new_thr->th.th_local.bget_data == NULL );
+ __kmp_initialize_bget( new_thr );
+ #endif
+
+ __kmp_init_random( new_thr ); // Initialize random number generator
+
+ /* Initialize these only once when thread is grabbed for a team allocation */
+ KA_TRACE( 20, ("__kmp_allocate_thread: T#%d init go fork=%u, plain=%u\n",
+ __kmp_get_gtid(), KMP_INIT_BARRIER_STATE, KMP_INIT_BARRIER_STATE ));
+
+ int b;
+ kmp_balign_t * balign = new_thr->th.th_bar;
+ for(b=0; b<bs_last_barrier; ++b) {
+ balign[b].bb.b_go = KMP_INIT_BARRIER_STATE;
+ balign[b].bb.team = NULL;
+ balign[b].bb.wait_flag = KMP_BARRIER_NOT_WAITING;
+ balign[b].bb.use_oncore_barrier = 0;
+ }
+
+ new_thr->th.th_spin_here = FALSE;
+ new_thr->th.th_next_waiting = 0;
+
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+ new_thr->th.th_current_place = KMP_PLACE_UNDEFINED;
+ new_thr->th.th_new_place = KMP_PLACE_UNDEFINED;
+ new_thr->th.th_first_place = KMP_PLACE_UNDEFINED;
+ new_thr->th.th_last_place = KMP_PLACE_UNDEFINED;
+#endif
+
+ TCW_4(new_thr->th.th_in_pool, FALSE);
+ new_thr->th.th_active_in_pool = FALSE;
+ TCW_4(new_thr->th.th_active, TRUE);
+
+ /* adjust the global counters */
+ __kmp_all_nth ++;
+ __kmp_nth ++;
+
+ //
+ // if __kmp_adjust_gtid_mode is set, then we use method #1 (sp search)
+ // for low numbers of procs, and method #2 (keyed API call) for higher
+ // numbers of procs.
+ //
+ if ( __kmp_adjust_gtid_mode ) {
+ if ( __kmp_all_nth >= __kmp_tls_gtid_min ) {
+ if ( TCR_4(__kmp_gtid_mode) != 2) {
+ TCW_4(__kmp_gtid_mode, 2);
+ }
+ }
+ else {
+ if (TCR_4(__kmp_gtid_mode) != 1 ) {
+ TCW_4(__kmp_gtid_mode, 1);
+ }
+ }
+ }
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime back to zero if necessary */
+ /* Middle initialization might not have occurred yet */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ if ( __kmp_nth > __kmp_avail_proc ) {
+ __kmp_zero_bt = TRUE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ /* actually fork it and create the new worker thread */
+ KF_TRACE( 10, ("__kmp_allocate_thread: before __kmp_create_worker: %p\n", new_thr ));
+ __kmp_create_worker( new_gtid, new_thr, __kmp_stksize );
+ KF_TRACE( 10, ("__kmp_allocate_thread: after __kmp_create_worker: %p\n", new_thr ));
+
+ KA_TRACE( 20, ("__kmp_allocate_thread: T#%d forked T#%d\n", __kmp_get_gtid(), new_gtid ));
+ KMP_MB();
+ return new_thr;
+}
+
+/*
+ * reinitialize team for reuse.
+ *
+ * The hot team code calls this case at every fork barrier, so EPCC barrier
+ * test are extremely sensitive to changes in it, esp. writes to the team
+ * struct, which cause a cache invalidation in all threads.
+ *
+ * IF YOU TOUCH THIS ROUTINE, RUN EPCC C SYNCBENCH ON A BIG-IRON MACHINE!!!
+ */
+static void
+__kmp_reinitialize_team( kmp_team_t *team, kmp_internal_control_t *new_icvs, ident_t *loc ) {
+ KF_TRACE( 10, ( "__kmp_reinitialize_team: enter this_thread=%p team=%p\n",
+ team->t.t_threads[0], team ) );
+ KMP_DEBUG_ASSERT( team && new_icvs);
+ KMP_DEBUG_ASSERT( ( ! TCR_4(__kmp_init_parallel) ) || new_icvs->nproc );
+ KMP_CHECK_UPDATE(team->t.t_ident, loc);
+
+ KMP_CHECK_UPDATE(team->t.t_id, KMP_GEN_TEAM_ID());
+
+ // Copy ICVs to the master thread's implicit taskdata
+ __kmp_init_implicit_task( loc, team->t.t_threads[0], team, 0, FALSE );
+ copy_icvs(&team->t.t_implicit_task_taskdata[0].td_icvs, new_icvs);
+
+ KF_TRACE( 10, ( "__kmp_reinitialize_team: exit this_thread=%p team=%p\n",
+ team->t.t_threads[0], team ) );
+}
+
+
+/* initialize the team data structure
+ * this assumes the t_threads and t_max_nproc are already set
+ * also, we don't touch the arguments */
+static void
+__kmp_initialize_team(
+ kmp_team_t * team,
+ int new_nproc,
+ kmp_internal_control_t * new_icvs,
+ ident_t * loc
+) {
+ KF_TRACE( 10, ( "__kmp_initialize_team: enter: team=%p\n", team ) );
+
+ /* verify */
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( new_nproc <= team->t.t_max_nproc );
+ KMP_DEBUG_ASSERT( team->t.t_threads );
+ KMP_MB();
+
+ team->t.t_master_tid = 0; /* not needed */
+ /* team->t.t_master_bar; not needed */
+ team->t.t_serialized = new_nproc > 1 ? 0 : 1;
+ team->t.t_nproc = new_nproc;
+
+ /* team->t.t_parent = NULL; TODO not needed & would mess up hot team */
+ team->t.t_next_pool = NULL;
+ /* memset( team->t.t_threads, 0, sizeof(kmp_info_t*)*new_nproc ); would mess up hot team */
+
+ TCW_SYNC_PTR(team->t.t_pkfn, NULL); /* not needed */
+ team->t.t_invoke = NULL; /* not needed */
+
+ // TODO???: team->t.t_max_active_levels = new_max_active_levels;
+ team->t.t_sched = new_icvs->sched;
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ team->t.t_fp_control_saved = FALSE; /* not needed */
+ team->t.t_x87_fpu_control_word = 0; /* not needed */
+ team->t.t_mxcsr = 0; /* not needed */
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ team->t.t_construct = 0;
+ __kmp_init_lock( & team->t.t_single_lock );
+
+ team->t.t_ordered .dt.t_value = 0;
+ team->t.t_master_active = FALSE;
+
+ memset( & team->t.t_taskq, '\0', sizeof( kmp_taskq_t ));
+
+#ifdef KMP_DEBUG
+ team->t.t_copypriv_data = NULL; /* not necessary, but nice for debugging */
+#endif
+ team->t.t_copyin_counter = 0; /* for barrier-free copyin implementation */
+
+ team->t.t_control_stack_top = NULL;
+
+ __kmp_reinitialize_team( team, new_icvs, loc );
+
+ KMP_MB();
+ KF_TRACE( 10, ( "__kmp_initialize_team: exit: team=%p\n", team ) );
+}
+
+#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+/* Sets full mask for thread and returns old mask, no changes to structures. */
+static void
+__kmp_set_thread_affinity_mask_full_tmp( kmp_affin_mask_t *old_mask )
+{
+ if ( KMP_AFFINITY_CAPABLE() ) {
+ int status;
+ if ( old_mask != NULL ) {
+ status = __kmp_get_system_affinity( old_mask, TRUE );
+ int error = errno;
+ if ( status != 0 ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( ChangeThreadAffMaskError ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ }
+ __kmp_set_system_affinity( __kmp_affin_fullMask, TRUE );
+ }
+}
+#endif
+
+#if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
+
+//
+// __kmp_partition_places() is the heart of the OpenMP 4.0 affinity mechanism.
+// It calculats the worker + master thread's partition based upon the parent
+// thread's partition, and binds each worker to a thread in their partition.
+// The master thread's partition should already include its current binding.
+//
+static void
+__kmp_partition_places( kmp_team_t *team, int update_master_only )
+{
+ //
+ // Copy the master thread's place partion to the team struct
+ //
+ kmp_info_t *master_th = team->t.t_threads[0];
+ KMP_DEBUG_ASSERT( master_th != NULL );
+ kmp_proc_bind_t proc_bind = team->t.t_proc_bind;
+ int first_place = master_th->th.th_first_place;
+ int last_place = master_th->th.th_last_place;
+ int masters_place = master_th->th.th_current_place;
+ team->t.t_first_place = first_place;
+ team->t.t_last_place = last_place;
+
+ KA_TRACE( 20, ("__kmp_partition_places: enter: proc_bind = %d T#%d(%d:0) bound to place %d partition = [%d,%d]\n",
+ proc_bind, __kmp_gtid_from_thread( team->t.t_threads[0] ), team->t.t_id,
+ masters_place, first_place, last_place ) );
+
+ switch ( proc_bind ) {
+
+ case proc_bind_default:
+ //
+ // serial teams might have the proc_bind policy set to
+ // proc_bind_default. It doesn't matter, as we don't
+ // rebind the master thread for any proc_bind policy.
+ //
+ KMP_DEBUG_ASSERT( team->t.t_nproc == 1 );
+ break;
+
+ case proc_bind_master:
+ {
+ int f;
+ int n_th = team->t.t_nproc;
+ for ( f = 1; f < n_th; f++ ) {
+ kmp_info_t *th = team->t.t_threads[f];
+ KMP_DEBUG_ASSERT( th != NULL );
+ th->th.th_first_place = first_place;
+ th->th.th_last_place = last_place;
+ th->th.th_new_place = masters_place;
+
+ KA_TRACE( 100, ("__kmp_partition_places: master: T#%d(%d:%d) place %d partition = [%d,%d]\n",
+ __kmp_gtid_from_thread( team->t.t_threads[f] ),
+ team->t.t_id, f, masters_place, first_place, last_place ) );
+ }
+ }
+ break;
+
+ case proc_bind_close:
+ {
+ int f;
+ int n_th = team->t.t_nproc;
+ int n_places;
+ if ( first_place <= last_place ) {
+ n_places = last_place - first_place + 1;
+ }
+ else {
+ n_places = __kmp_affinity_num_masks - first_place + last_place + 1;
+ }
+ if ( n_th <= n_places ) {
+ int place = masters_place;
+ for ( f = 1; f < n_th; f++ ) {
+ kmp_info_t *th = team->t.t_threads[f];
+ KMP_DEBUG_ASSERT( th != NULL );
+
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ th->th.th_first_place = first_place;
+ th->th.th_last_place = last_place;
+ th->th.th_new_place = place;
+
+ KA_TRACE( 100, ("__kmp_partition_places: close: T#%d(%d:%d) place %d partition = [%d,%d]\n",
+ __kmp_gtid_from_thread( team->t.t_threads[f] ),
+ team->t.t_id, f, place, first_place, last_place ) );
+ }
+ }
+ else {
+ int S, rem, gap, s_count;
+ S = n_th / n_places;
+ s_count = 0;
+ rem = n_th - ( S * n_places );
+ gap = rem > 0 ? n_places/rem : n_places;
+ int place = masters_place;
+ int gap_ct = gap;
+ for ( f = 0; f < n_th; f++ ) {
+ kmp_info_t *th = team->t.t_threads[f];
+ KMP_DEBUG_ASSERT( th != NULL );
+
+ th->th.th_first_place = first_place;
+ th->th.th_last_place = last_place;
+ th->th.th_new_place = place;
+ s_count++;
+
+ if ( (s_count == S) && rem && (gap_ct == gap) ) {
+ // do nothing, add an extra thread to place on next iteration
+ }
+ else if ( (s_count == S+1) && rem && (gap_ct == gap) ) {
+ // we added an extra thread to this place; move to next place
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ s_count = 0;
+ gap_ct = 1;
+ rem--;
+ }
+ else if (s_count == S) { // place full; don't add extra
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ gap_ct++;
+ s_count = 0;
+ }
+
+ KA_TRACE( 100, ("__kmp_partition_places: close: T#%d(%d:%d) place %d partition = [%d,%d]\n",
+ __kmp_gtid_from_thread( team->t.t_threads[f] ),
+ team->t.t_id, f, th->th.th_new_place, first_place,
+ last_place ) );
+ }
+ KMP_DEBUG_ASSERT( place == masters_place );
+ }
+ }
+ break;
+
+ case proc_bind_spread:
+ {
+ int f;
+ int n_th = team->t.t_nproc;
+ int n_places;
+ int thidx;
+ if ( first_place <= last_place ) {
+ n_places = last_place - first_place + 1;
+ }
+ else {
+ n_places = __kmp_affinity_num_masks - first_place + last_place + 1;
+ }
+ if ( n_th <= n_places ) {
+ int place = masters_place;
+ int S = n_places/n_th;
+ int s_count, rem, gap, gap_ct;
+ rem = n_places - n_th*S;
+ gap = rem ? n_th/rem : 1;
+ gap_ct = gap;
+ thidx = n_th;
+ if (update_master_only == 1)
+ thidx = 1;
+ for ( f = 0; f < thidx; f++ ) {
+ kmp_info_t *th = team->t.t_threads[f];
+ KMP_DEBUG_ASSERT( th != NULL );
+
+ th->th.th_first_place = place;
+ th->th.th_new_place = place;
+ s_count = 1;
+ while (s_count < S) {
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ s_count++;
+ }
+ if (rem && (gap_ct == gap)) {
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ rem--;
+ gap_ct = 0;
+ }
+ th->th.th_last_place = place;
+ gap_ct++;
+
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+
+ KA_TRACE( 100, ("__kmp_partition_places: spread: T#%d(%d:%d) place %d partition = [%d,%d]\n",
+ __kmp_gtid_from_thread( team->t.t_threads[f] ),
+ team->t.t_id, f, th->th.th_new_place,
+ th->th.th_first_place, th->th.th_last_place ) );
+ }
+ KMP_DEBUG_ASSERT( update_master_only || place == masters_place );
+ }
+ else {
+ int S, rem, gap, s_count;
+ S = n_th / n_places;
+ s_count = 0;
+ rem = n_th - ( S * n_places );
+ gap = rem > 0 ? n_places/rem : n_places;
+ int place = masters_place;
+ int gap_ct = gap;
+ thidx = n_th;
+ if (update_master_only == 1)
+ thidx = 1;
+ for ( f = 0; f < thidx; f++ ) {
+ kmp_info_t *th = team->t.t_threads[f];
+ KMP_DEBUG_ASSERT( th != NULL );
+
+ th->th.th_first_place = place;
+ th->th.th_last_place = place;
+ th->th.th_new_place = place;
+ s_count++;
+
+ if ( (s_count == S) && rem && (gap_ct == gap) ) {
+ // do nothing, add an extra thread to place on next iteration
+ }
+ else if ( (s_count == S+1) && rem && (gap_ct == gap) ) {
+ // we added an extra thread to this place; move on to next place
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ s_count = 0;
+ gap_ct = 1;
+ rem--;
+ }
+ else if (s_count == S) { // place is full; don't add extra thread
+ if ( place == last_place ) {
+ place = first_place;
+ }
+ else if ( place == (int)(__kmp_affinity_num_masks - 1) ) {
+ place = 0;
+ }
+ else {
+ place++;
+ }
+ gap_ct++;
+ s_count = 0;
+ }
+
+ KA_TRACE( 100, ("__kmp_partition_places: spread: T#%d(%d:%d) place %d partition = [%d,%d]\n",
+ __kmp_gtid_from_thread( team->t.t_threads[f] ),
+ team->t.t_id, f, th->th.th_new_place,
+ th->th.th_first_place, th->th.th_last_place) );
+ }
+ KMP_DEBUG_ASSERT( update_master_only || place == masters_place );
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ KA_TRACE( 20, ("__kmp_partition_places: exit T#%d\n", team->t.t_id ) );
+}
+
+#endif /* OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED */
+
+/* allocate a new team data structure to use. take one off of the free pool if available */
+kmp_team_t *
+__kmp_allocate_team( kmp_root_t *root, int new_nproc, int max_nproc,
+#if OMPT_SUPPORT
+ ompt_parallel_id_t ompt_parallel_id,
+#endif
+#if OMP_40_ENABLED
+ kmp_proc_bind_t new_proc_bind,
+#endif
+ kmp_internal_control_t *new_icvs,
+ int argc USE_NESTED_HOT_ARG(kmp_info_t *master) )
+{
+ KMP_TIME_DEVELOPER_BLOCK(KMP_allocate_team);
+ int f;
+ kmp_team_t *team;
+ int use_hot_team = ! root->r.r_active;
+ int level = 0;
+
+ KA_TRACE( 20, ("__kmp_allocate_team: called\n"));
+ KMP_DEBUG_ASSERT( new_nproc >=1 && argc >=0 );
+ KMP_DEBUG_ASSERT( max_nproc >= new_nproc );
+ KMP_MB();
+
+#if KMP_NESTED_HOT_TEAMS
+ kmp_hot_team_ptr_t *hot_teams;
+ if( master ) {
+ team = master->th.th_team;
+ level = team->t.t_active_level;
+ if( master->th.th_teams_microtask ) { // in teams construct?
+ if( master->th.th_teams_size.nteams > 1 && ( // #teams > 1
+ team->t.t_pkfn == (microtask_t)__kmp_teams_master || // inner fork of the teams
+ master->th.th_teams_level < team->t.t_level ) ) { // or nested parallel inside the teams
+ ++level; // not increment if #teams==1, or for outer fork of the teams; increment otherwise
+ }
+ }
+ hot_teams = master->th.th_hot_teams;
+ if( level < __kmp_hot_teams_max_level && hot_teams && hot_teams[level].hot_team )
+ { // hot team has already been allocated for given level
+ use_hot_team = 1;
+ } else {
+ use_hot_team = 0;
+ }
+ }
+#endif
+ // Optimization to use a "hot" team
+ if( use_hot_team && new_nproc > 1 ) {
+ KMP_DEBUG_ASSERT( new_nproc == max_nproc );
+#if KMP_NESTED_HOT_TEAMS
+ team = hot_teams[level].hot_team;
+#else
+ team = root->r.r_hot_team;
+#endif
+#if KMP_DEBUG
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KA_TRACE( 20, ("__kmp_allocate_team: hot team task_team[0] = %p task_team[1] = %p before reinit\n",
+ team->t.t_task_team[0], team->t.t_task_team[1] ));
+ }
+#endif
+
+ // Has the number of threads changed?
+ /* Let's assume the most common case is that the number of threads is unchanged, and
+ put that case first. */
+ if (team->t.t_nproc == new_nproc) { // Check changes in number of threads
+ KA_TRACE( 20, ("__kmp_allocate_team: reusing hot team\n" ));
+ // This case can mean that omp_set_num_threads() was called and the hot team size
+ // was already reduced, so we check the special flag
+ if ( team->t.t_size_changed == -1 ) {
+ team->t.t_size_changed = 1;
+ } else {
+ KMP_CHECK_UPDATE(team->t.t_size_changed, 0);
+ }
+
+ // TODO???: team->t.t_max_active_levels = new_max_active_levels;
+ kmp_r_sched_t new_sched = new_icvs->sched;
+ if (team->t.t_sched.r_sched_type != new_sched.r_sched_type ||
+ team->t.t_sched.chunk != new_sched.chunk)
+ team->t.t_sched = new_sched; // set master's schedule as new run-time schedule
+
+ __kmp_reinitialize_team( team, new_icvs, root->r.r_uber_thread->th.th_ident );
+
+ KF_TRACE( 10, ("__kmp_allocate_team2: T#%d, this_thread=%p team=%p\n",
+ 0, team->t.t_threads[0], team ) );
+ __kmp_push_current_task_to_thread( team->t.t_threads[ 0 ], team, 0 );
+
+#if OMP_40_ENABLED
+# if KMP_AFFINITY_SUPPORTED
+ if ( ( team->t.t_size_changed == 0 )
+ && ( team->t.t_proc_bind == new_proc_bind ) ) {
+ if (new_proc_bind == proc_bind_spread) {
+ __kmp_partition_places(team, 1); // add flag to update only master for spread
+ }
+ KA_TRACE( 200, ("__kmp_allocate_team: reusing hot team #%d bindings: proc_bind = %d, partition = [%d,%d]\n",
+ team->t.t_id, new_proc_bind, team->t.t_first_place,
+ team->t.t_last_place ) );
+ }
+ else {
+ KMP_CHECK_UPDATE(team->t.t_proc_bind, new_proc_bind);
+ __kmp_partition_places( team );
+ }
+# else
+ KMP_CHECK_UPDATE(team->t.t_proc_bind, new_proc_bind);
+# endif /* KMP_AFFINITY_SUPPORTED */
+#endif /* OMP_40_ENABLED */
+ }
+ else if( team->t.t_nproc > new_nproc ) {
+ KA_TRACE( 20, ("__kmp_allocate_team: decreasing hot team thread count to %d\n", new_nproc ));
+
+ team->t.t_size_changed = 1;
+#if KMP_NESTED_HOT_TEAMS
+ if( __kmp_hot_teams_mode == 0 ) {
+ // AC: saved number of threads should correspond to team's value in this mode,
+ // can be bigger in mode 1, when hot team has some threads in reserve
+ KMP_DEBUG_ASSERT(hot_teams[level].hot_team_nth == team->t.t_nproc);
+ hot_teams[level].hot_team_nth = new_nproc;
+#endif // KMP_NESTED_HOT_TEAMS
+ /* release the extra threads we don't need any more */
+ for( f = new_nproc ; f < team->t.t_nproc ; f++ ) {
+ KMP_DEBUG_ASSERT( team->t.t_threads[ f ] );
+ if ( __kmp_tasking_mode != tskm_immediate_exec) {
+ // When decreasing team size, threads no longer in the team should unref task team.
+ team->t.t_threads[f]->th.th_task_team = NULL;
+ }
+ __kmp_free_thread( team->t.t_threads[ f ] );
+ team->t.t_threads[ f ] = NULL;
+ }
+#if KMP_NESTED_HOT_TEAMS
+ } // (__kmp_hot_teams_mode == 0)
+#endif // KMP_NESTED_HOT_TEAMS
+ team->t.t_nproc = new_nproc;
+ // TODO???: team->t.t_max_active_levels = new_max_active_levels;
+ if (team->t.t_sched.r_sched_type != new_icvs->sched.r_sched_type ||
+ team->t.t_sched.chunk != new_icvs->sched.chunk)
+ team->t.t_sched = new_icvs->sched;
+ __kmp_reinitialize_team( team, new_icvs, root->r.r_uber_thread->th.th_ident );
+
+ /* update the remaining threads */
+ for(f = 0; f < new_nproc; ++f) {
+ team->t.t_threads[f]->th.th_team_nproc = new_nproc;
+ }
+ // restore the current task state of the master thread: should be the implicit task
+ KF_TRACE( 10, ("__kmp_allocate_team: T#%d, this_thread=%p team=%p\n",
+ 0, team->t.t_threads[0], team ) );
+
+ __kmp_push_current_task_to_thread( team->t.t_threads[ 0 ], team, 0 );
+
+#ifdef KMP_DEBUG
+ for ( f = 0; f < team->t.t_nproc; f++ ) {
+ KMP_DEBUG_ASSERT( team->t.t_threads[f] &&
+ team->t.t_threads[f]->th.th_team_nproc == team->t.t_nproc );
+ }
+#endif
+
+#if OMP_40_ENABLED
+ KMP_CHECK_UPDATE(team->t.t_proc_bind, new_proc_bind);
+# if KMP_AFFINITY_SUPPORTED
+ __kmp_partition_places( team );
+# endif
+#endif
+ }
+ else { // team->t.t_nproc < new_nproc
+#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+ kmp_affin_mask_t *old_mask;
+ if ( KMP_AFFINITY_CAPABLE() ) {
+ KMP_CPU_ALLOC(old_mask);
+ }
+#endif
+
+ KA_TRACE( 20, ("__kmp_allocate_team: increasing hot team thread count to %d\n", new_nproc ));
+
+ team->t.t_size_changed = 1;
+
+#if KMP_NESTED_HOT_TEAMS
+ int avail_threads = hot_teams[level].hot_team_nth;
+ if( new_nproc < avail_threads )
+ avail_threads = new_nproc;
+ kmp_info_t **other_threads = team->t.t_threads;
+ for ( f = team->t.t_nproc; f < avail_threads; ++f ) {
+ // Adjust barrier data of reserved threads (if any) of the team
+ // Other data will be set in __kmp_initialize_info() below.
+ int b;
+ kmp_balign_t * balign = other_threads[f]->th.th_bar;
+ for ( b = 0; b < bs_last_barrier; ++ b ) {
+ balign[b].bb.b_arrived = team->t.t_bar[b].b_arrived;
+ KMP_DEBUG_ASSERT(balign[b].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#if USE_DEBUGGER
+ balign[b].bb.b_worker_arrived = team->t.t_bar[b].b_team_arrived;
+#endif
+ }
+ }
+ if( hot_teams[level].hot_team_nth >= new_nproc ) {
+ // we have all needed threads in reserve, no need to allocate any
+ // this only possible in mode 1, cannot have reserved threads in mode 0
+ KMP_DEBUG_ASSERT(__kmp_hot_teams_mode == 1);
+ team->t.t_nproc = new_nproc; // just get reserved threads involved
+ } else {
+ // we may have some threads in reserve, but not enough
+ team->t.t_nproc = hot_teams[level].hot_team_nth; // get reserved threads involved if any
+ hot_teams[level].hot_team_nth = new_nproc; // adjust hot team max size
+#endif // KMP_NESTED_HOT_TEAMS
+ if(team->t.t_max_nproc < new_nproc) {
+ /* reallocate larger arrays */
+ __kmp_reallocate_team_arrays(team, new_nproc);
+ __kmp_reinitialize_team( team, new_icvs, NULL );
+ }
+
+#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+ /* Temporarily set full mask for master thread before
+ creation of workers. The reason is that workers inherit
+ the affinity from master, so if a lot of workers are
+ created on the single core quickly, they don't get
+ a chance to set their own affinity for a long time.
+ */
+ __kmp_set_thread_affinity_mask_full_tmp( old_mask );
+#endif
+
+ /* allocate new threads for the hot team */
+ for( f = team->t.t_nproc ; f < new_nproc ; f++ ) {
+ kmp_info_t * new_worker = __kmp_allocate_thread( root, team, f );
+ KMP_DEBUG_ASSERT( new_worker );
+ team->t.t_threads[ f ] = new_worker;
+
+ KA_TRACE( 20, ("__kmp_allocate_team: team %d init T#%d arrived: join=%llu, plain=%llu\n",
+ team->t.t_id, __kmp_gtid_from_tid( f, team ), team->t.t_id, f,
+ team->t.t_bar[bs_forkjoin_barrier].b_arrived,
+ team->t.t_bar[bs_plain_barrier].b_arrived ) );
+
+ { // Initialize barrier data for new threads.
+ int b;
+ kmp_balign_t * balign = new_worker->th.th_bar;
+ for( b = 0; b < bs_last_barrier; ++ b ) {
+ balign[ b ].bb.b_arrived = team->t.t_bar[ b ].b_arrived;
+ KMP_DEBUG_ASSERT(balign[b].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#if USE_DEBUGGER
+ balign[ b ].bb.b_worker_arrived = team->t.t_bar[ b ].b_team_arrived;
+#endif
+ }
+ }
+ }
+
+#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+ if ( KMP_AFFINITY_CAPABLE() ) {
+ /* Restore initial master thread's affinity mask */
+ __kmp_set_system_affinity( old_mask, TRUE );
+ KMP_CPU_FREE(old_mask);
+ }
+#endif
+#if KMP_NESTED_HOT_TEAMS
+ } // end of check of t_nproc vs. new_nproc vs. hot_team_nth
+#endif // KMP_NESTED_HOT_TEAMS
+ /* make sure everyone is syncronized */
+ int old_nproc = team->t.t_nproc; // save old value and use to update only new threads below
+ __kmp_initialize_team( team, new_nproc, new_icvs, root->r.r_uber_thread->th.th_ident );
+
+ /* reinitialize the threads */
+ KMP_DEBUG_ASSERT(team->t.t_nproc == new_nproc);
+ for (f=0; f < team->t.t_nproc; ++f)
+ __kmp_initialize_info( team->t.t_threads[ f ], team, f, __kmp_gtid_from_tid( f, team ) );
+ if (level) { // set th_task_state for new threads in nested hot team
+ // __kmp_initialize_info() no longer zeroes th_task_state, so we should only need to set the
+ // th_task_state for the new threads. th_task_state for master thread will not be accurate until
+ // after this in __kmp_fork_call(), so we look to the master's memo_stack to get the correct value.
+ for (f=old_nproc; f < team->t.t_nproc; ++f)
+ team->t.t_threads[f]->th.th_task_state = team->t.t_threads[0]->th.th_task_state_memo_stack[level];
+ }
+ else { // set th_task_state for new threads in non-nested hot team
+ int old_state = team->t.t_threads[0]->th.th_task_state; // copy master's state
+ for (f=old_nproc; f < team->t.t_nproc; ++f)
+ team->t.t_threads[f]->th.th_task_state = old_state;
+ }
+
+#ifdef KMP_DEBUG
+ for ( f = 0; f < team->t.t_nproc; ++ f ) {
+ KMP_DEBUG_ASSERT( team->t.t_threads[f] &&
+ team->t.t_threads[f]->th.th_team_nproc == team->t.t_nproc );
+ }
+#endif
+
+#if OMP_40_ENABLED
+ KMP_CHECK_UPDATE(team->t.t_proc_bind, new_proc_bind);
+# if KMP_AFFINITY_SUPPORTED
+ __kmp_partition_places( team );
+# endif
+#endif
+ } // Check changes in number of threads
+
+#if OMP_40_ENABLED
+ kmp_info_t *master = team->t.t_threads[0];
+ if( master->th.th_teams_microtask ) {
+ for( f = 1; f < new_nproc; ++f ) {
+ // propagate teams construct specific info to workers
+ kmp_info_t *thr = team->t.t_threads[f];
+ thr->th.th_teams_microtask = master->th.th_teams_microtask;
+ thr->th.th_teams_level = master->th.th_teams_level;
+ thr->th.th_teams_size = master->th.th_teams_size;
+ }
+ }
+#endif /* OMP_40_ENABLED */
+#if KMP_NESTED_HOT_TEAMS
+ if( level ) {
+ // Sync barrier state for nested hot teams, not needed for outermost hot team.
+ for( f = 1; f < new_nproc; ++f ) {
+ kmp_info_t *thr = team->t.t_threads[f];
+ int b;
+ kmp_balign_t * balign = thr->th.th_bar;
+ for( b = 0; b < bs_last_barrier; ++ b ) {
+ balign[ b ].bb.b_arrived = team->t.t_bar[ b ].b_arrived;
+ KMP_DEBUG_ASSERT(balign[b].bb.wait_flag != KMP_BARRIER_PARENT_FLAG);
+#if USE_DEBUGGER
+ balign[ b ].bb.b_worker_arrived = team->t.t_bar[ b ].b_team_arrived;
+#endif
+ }
+ }
+ }
+#endif // KMP_NESTED_HOT_TEAMS
+
+ /* reallocate space for arguments if necessary */
+ __kmp_alloc_argv_entries( argc, team, TRUE );
+ KMP_CHECK_UPDATE(team->t.t_argc, argc);
+ //
+ // The hot team re-uses the previous task team,
+ // if untouched during the previous release->gather phase.
+ //
+
+ KF_TRACE( 10, ( " hot_team = %p\n", team ) );
+
+#if KMP_DEBUG
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ KA_TRACE( 20, ("__kmp_allocate_team: hot team task_team[0] = %p task_team[1] = %p after reinit\n",
+ team->t.t_task_team[0], team->t.t_task_team[1] ));
+ }
+#endif
+
+#if OMPT_SUPPORT
+ __ompt_team_assign_id(team, ompt_parallel_id);
+#endif
+
+ KMP_MB();
+
+ return team;
+ }
+
+ /* next, let's try to take one from the team pool */
+ KMP_MB();
+ for( team = (kmp_team_t*) __kmp_team_pool ; (team) ; )
+ {
+ /* TODO: consider resizing undersized teams instead of reaping them, now that we have a resizing mechanism */
+ if ( team->t.t_max_nproc >= max_nproc ) {
+ /* take this team from the team pool */
+ __kmp_team_pool = team->t.t_next_pool;
+
+ /* setup the team for fresh use */
+ __kmp_initialize_team( team, new_nproc, new_icvs, NULL );
+
+ KA_TRACE( 20, ( "__kmp_allocate_team: setting task_team[0] %p and task_team[1] %p to NULL\n",
+ &team->t.t_task_team[0], &team->t.t_task_team[1]) );
+ team->t.t_task_team[0] = NULL;
+ team->t.t_task_team[1] = NULL;
+
+ /* reallocate space for arguments if necessary */
+ __kmp_alloc_argv_entries( argc, team, TRUE );
+ KMP_CHECK_UPDATE(team->t.t_argc, argc);
+
+ KA_TRACE( 20, ("__kmp_allocate_team: team %d init arrived: join=%u, plain=%u\n",
+ team->t.t_id, KMP_INIT_BARRIER_STATE, KMP_INIT_BARRIER_STATE ));
+ { // Initialize barrier data.
+ int b;
+ for ( b = 0; b < bs_last_barrier; ++ b) {
+ team->t.t_bar[ b ].b_arrived = KMP_INIT_BARRIER_STATE;
+#if USE_DEBUGGER
+ team->t.t_bar[ b ].b_master_arrived = 0;
+ team->t.t_bar[ b ].b_team_arrived = 0;
+#endif
+ }
+ }
+
+#if OMP_40_ENABLED
+ team->t.t_proc_bind = new_proc_bind;
+#endif
+
+ KA_TRACE( 20, ("__kmp_allocate_team: using team from pool %d.\n", team->t.t_id ));
+
+#if OMPT_SUPPORT
+ __ompt_team_assign_id(team, ompt_parallel_id);
+#endif
+
+ KMP_MB();
+
+ return team;
+ }
+
+ /* reap team if it is too small, then loop back and check the next one */
+ /* not sure if this is wise, but, will be redone during the hot-teams rewrite. */
+ /* TODO: Use technique to find the right size hot-team, don't reap them */
+ team = __kmp_reap_team( team );
+ __kmp_team_pool = team;
+ }
+
+ /* nothing available in the pool, no matter, make a new team! */
+ KMP_MB();
+ team = (kmp_team_t*) __kmp_allocate( sizeof( kmp_team_t ) );
+
+ /* and set it up */
+ team->t.t_max_nproc = max_nproc;
+ /* NOTE well, for some reason allocating one big buffer and dividing it
+ * up seems to really hurt performance a lot on the P4, so, let's not use
+ * this... */
+ __kmp_allocate_team_arrays( team, max_nproc );
+
+ KA_TRACE( 20, ( "__kmp_allocate_team: making a new team\n" ) );
+ __kmp_initialize_team( team, new_nproc, new_icvs, NULL );
+
+ KA_TRACE( 20, ( "__kmp_allocate_team: setting task_team[0] %p and task_team[1] %p to NULL\n",
+ &team->t.t_task_team[0], &team->t.t_task_team[1] ) );
+ team->t.t_task_team[0] = NULL; // to be removed, as __kmp_allocate zeroes memory, no need to duplicate
+ team->t.t_task_team[1] = NULL; // to be removed, as __kmp_allocate zeroes memory, no need to duplicate
+
+ if ( __kmp_storage_map ) {
+ __kmp_print_team_storage_map( "team", team, team->t.t_id, new_nproc );
+ }
+
+ /* allocate space for arguments */
+ __kmp_alloc_argv_entries( argc, team, FALSE );
+ team->t.t_argc = argc;
+
+ KA_TRACE( 20, ("__kmp_allocate_team: team %d init arrived: join=%u, plain=%u\n",
+ team->t.t_id, KMP_INIT_BARRIER_STATE, KMP_INIT_BARRIER_STATE ));
+ { // Initialize barrier data.
+ int b;
+ for ( b = 0; b < bs_last_barrier; ++ b ) {
+ team->t.t_bar[ b ].b_arrived = KMP_INIT_BARRIER_STATE;
+#if USE_DEBUGGER
+ team->t.t_bar[ b ].b_master_arrived = 0;
+ team->t.t_bar[ b ].b_team_arrived = 0;
+#endif
+ }
+ }
+
+#if OMP_40_ENABLED
+ team->t.t_proc_bind = new_proc_bind;
+#endif
+
+#if OMPT_SUPPORT
+ __ompt_team_assign_id(team, ompt_parallel_id);
+ team->t.ompt_serialized_team_info = NULL;
+#endif
+
+ KMP_MB();
+
+ KA_TRACE( 20, ("__kmp_allocate_team: done creating a new team %d.\n", team->t.t_id ));
+
+ return team;
+}
+
+/* TODO implement hot-teams at all levels */
+/* TODO implement lazy thread release on demand (disband request) */
+
+/* free the team. return it to the team pool. release all the threads
+ * associated with it */
+void
+__kmp_free_team( kmp_root_t *root, kmp_team_t *team USE_NESTED_HOT_ARG(kmp_info_t *master) )
+{
+ int f;
+ KA_TRACE( 20, ("__kmp_free_team: T#%d freeing team %d\n", __kmp_get_gtid(), team->t.t_id ));
+
+ /* verify state */
+ KMP_DEBUG_ASSERT( root );
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( team->t.t_nproc <= team->t.t_max_nproc );
+ KMP_DEBUG_ASSERT( team->t.t_threads );
+
+ int use_hot_team = team == root->r.r_hot_team;
+#if KMP_NESTED_HOT_TEAMS
+ int level;
+ kmp_hot_team_ptr_t *hot_teams;
+ if( master ) {
+ level = team->t.t_active_level - 1;
+ if( master->th.th_teams_microtask ) { // in teams construct?
+ if( master->th.th_teams_size.nteams > 1 ) {
+ ++level; // level was not increased in teams construct for team_of_masters
+ }
+ if( team->t.t_pkfn != (microtask_t)__kmp_teams_master &&
+ master->th.th_teams_level == team->t.t_level ) {
+ ++level; // level was not increased in teams construct for team_of_workers before the parallel
+ } // team->t.t_level will be increased inside parallel
+ }
+ hot_teams = master->th.th_hot_teams;
+ if( level < __kmp_hot_teams_max_level ) {
+ KMP_DEBUG_ASSERT( team == hot_teams[level].hot_team );
+ use_hot_team = 1;
+ }
+ }
+#endif // KMP_NESTED_HOT_TEAMS
+
+ /* team is done working */
+ TCW_SYNC_PTR(team->t.t_pkfn, NULL); // Important for Debugging Support Library.
+ team->t.t_copyin_counter = 0; // init counter for possible reuse
+ // Do not reset pointer to parent team to NULL for hot teams.
+
+ /* if we are non-hot team, release our threads */
+ if( ! use_hot_team ) {
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ // Delete task teams
+ int tt_idx;
+ for (tt_idx=0; tt_idx<2; ++tt_idx) {
+ kmp_task_team_t *task_team = team->t.t_task_team[tt_idx];
+ if ( task_team != NULL ) {
+ for (f=0; f<team->t.t_nproc; ++f) { // Have all threads unref task teams
+ team->t.t_threads[f]->th.th_task_team = NULL;
+ }
+ KA_TRACE( 20, ( "__kmp_free_team: T#%d deactivating task_team %p on team %d\n", __kmp_get_gtid(), task_team, team->t.t_id ) );
+#if KMP_NESTED_HOT_TEAMS
+ __kmp_free_task_team( master, task_team );
+#endif
+ team->t.t_task_team[tt_idx] = NULL;
+ }
+ }
+ }
+
+ // Reset pointer to parent team only for non-hot teams.
+ team->t.t_parent = NULL;
+ team->t.t_level = 0;
+ team->t.t_active_level = 0;
+
+ /* free the worker threads */
+ for ( f = 1; f < team->t.t_nproc; ++ f ) {
+ KMP_DEBUG_ASSERT( team->t.t_threads[ f ] );
+ __kmp_free_thread( team->t.t_threads[ f ] );
+ team->t.t_threads[ f ] = NULL;
+ }
+
+ /* put the team back in the team pool */
+ /* TODO limit size of team pool, call reap_team if pool too large */
+ team->t.t_next_pool = (kmp_team_t*) __kmp_team_pool;
+ __kmp_team_pool = (volatile kmp_team_t*) team;
+ }
+
+ KMP_MB();
+}
+
+
+/* reap the team. destroy it, reclaim all its resources and free its memory */
+kmp_team_t *
+__kmp_reap_team( kmp_team_t *team )
+{
+ kmp_team_t *next_pool = team->t.t_next_pool;
+
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( team->t.t_dispatch );
+ KMP_DEBUG_ASSERT( team->t.t_disp_buffer );
+ KMP_DEBUG_ASSERT( team->t.t_threads );
+ KMP_DEBUG_ASSERT( team->t.t_argv );
+
+ /* TODO clean the threads that are a part of this? */
+
+ /* free stuff */
+
+ __kmp_free_team_arrays( team );
+ if ( team->t.t_argv != &team->t.t_inline_argv[0] )
+ __kmp_free( (void*) team->t.t_argv );
+ __kmp_free( team );
+
+ KMP_MB();
+ return next_pool;
+}
+
+//
+// Free the thread. Don't reap it, just place it on the pool of available
+// threads.
+//
+// Changes for Quad issue 527845: We need a predictable OMP tid <-> gtid
+// binding for the affinity mechanism to be useful.
+//
+// Now, we always keep the free list (__kmp_thread_pool) sorted by gtid.
+// However, we want to avoid a potential performance problem by always
+// scanning through the list to find the correct point at which to insert
+// the thread (potential N**2 behavior). To do this we keep track of the
+// last place a thread struct was inserted (__kmp_thread_pool_insert_pt).
+// With single-level parallelism, threads will always be added to the tail
+// of the list, kept track of by __kmp_thread_pool_insert_pt. With nested
+// parallelism, all bets are off and we may need to scan through the entire
+// free list.
+//
+// This change also has a potentially large performance benefit, for some
+// applications. Previously, as threads were freed from the hot team, they
+// would be placed back on the free list in inverse order. If the hot team
+// grew back to it's original size, then the freed thread would be placed
+// back on the hot team in reverse order. This could cause bad cache
+// locality problems on programs where the size of the hot team regularly
+// grew and shrunk.
+//
+// Now, for single-level parallelism, the OMP tid is alway == gtid.
+//
+void
+__kmp_free_thread( kmp_info_t *this_th )
+{
+ int gtid;
+ kmp_info_t **scan;
+
+ KA_TRACE( 20, ("__kmp_free_thread: T#%d putting T#%d back on free pool.\n",
+ __kmp_get_gtid(), this_th->th.th_info.ds.ds_gtid ));
+
+ KMP_DEBUG_ASSERT( this_th );
+
+ // When moving thread to pool, switch thread to wait on own b_go flag, and uninitialized (NULL team).
+ int b;
+ kmp_balign_t *balign = this_th->th.th_bar;
+ for (b=0; b<bs_last_barrier; ++b) {
+ if (balign[b].bb.wait_flag == KMP_BARRIER_PARENT_FLAG)
+ balign[b].bb.wait_flag = KMP_BARRIER_SWITCH_TO_OWN_FLAG;
+ balign[b].bb.team = NULL;
+ }
+ this_th->th.th_task_state = 0;
+
+ /* put thread back on the free pool */
+ TCW_PTR(this_th->th.th_team, NULL);
+ TCW_PTR(this_th->th.th_root, NULL);
+ TCW_PTR(this_th->th.th_dispatch, NULL); /* NOT NEEDED */
+
+ //
+ // If the __kmp_thread_pool_insert_pt is already past the new insert
+ // point, then we need to re-scan the entire list.
+ //
+ gtid = this_th->th.th_info.ds.ds_gtid;
+ if ( __kmp_thread_pool_insert_pt != NULL ) {
+ KMP_DEBUG_ASSERT( __kmp_thread_pool != NULL );
+ if ( __kmp_thread_pool_insert_pt->th.th_info.ds.ds_gtid > gtid ) {
+ __kmp_thread_pool_insert_pt = NULL;
+ }
+ }
+
+ //
+ // Scan down the list to find the place to insert the thread.
+ // scan is the address of a link in the list, possibly the address of
+ // __kmp_thread_pool itself.
+ //
+ // In the absence of nested parallism, the for loop will have 0 iterations.
+ //
+ if ( __kmp_thread_pool_insert_pt != NULL ) {
+ scan = &( __kmp_thread_pool_insert_pt->th.th_next_pool );
+ }
+ else {
+ scan = (kmp_info_t **)&__kmp_thread_pool;
+ }
+ for (; ( *scan != NULL ) && ( (*scan)->th.th_info.ds.ds_gtid < gtid );
+ scan = &( (*scan)->th.th_next_pool ) );
+
+ //
+ // Insert the new element on the list, and set __kmp_thread_pool_insert_pt
+ // to its address.
+ //
+ TCW_PTR(this_th->th.th_next_pool, *scan);
+ __kmp_thread_pool_insert_pt = *scan = this_th;
+ KMP_DEBUG_ASSERT( ( this_th->th.th_next_pool == NULL )
+ || ( this_th->th.th_info.ds.ds_gtid
+ < this_th->th.th_next_pool->th.th_info.ds.ds_gtid ) );
+ TCW_4(this_th->th.th_in_pool, TRUE);
+ __kmp_thread_pool_nth++;
+
+ TCW_4(__kmp_nth, __kmp_nth - 1);
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime back to user setting or default if necessary */
+ /* Middle initialization might never have occurred */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ KMP_DEBUG_ASSERT( __kmp_avail_proc > 0 );
+ if ( __kmp_nth <= __kmp_avail_proc ) {
+ __kmp_zero_bt = FALSE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ KMP_MB();
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+void *
+__kmp_launch_thread( kmp_info_t *this_thr )
+{
+ int gtid = this_thr->th.th_info.ds.ds_gtid;
+/* void *stack_data;*/
+ kmp_team_t *(*volatile pteam);
+
+ KMP_MB();
+ KA_TRACE( 10, ("__kmp_launch_thread: T#%d start\n", gtid ) );
+
+ if( __kmp_env_consistency_check ) {
+ this_thr->th.th_cons = __kmp_allocate_cons_stack( gtid ); // ATT: Memory leak?
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ this_thr->th.ompt_thread_info.state = ompt_state_overhead;
+ this_thr->th.ompt_thread_info.wait_id = 0;
+ this_thr->th.ompt_thread_info.idle_frame = __builtin_frame_address(0);
+ if (ompt_callbacks.ompt_callback(ompt_event_thread_begin)) {
+ __ompt_thread_begin(ompt_thread_worker, gtid);
+ }
+ }
+#endif
+
+ /* This is the place where threads wait for work */
+ while( ! TCR_4(__kmp_global.g.g_done) ) {
+ KMP_DEBUG_ASSERT( this_thr == __kmp_threads[ gtid ] );
+ KMP_MB();
+
+ /* wait for work to do */
+ KA_TRACE( 20, ("__kmp_launch_thread: T#%d waiting for work\n", gtid ));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ this_thr->th.ompt_thread_info.state = ompt_state_idle;
+ }
+#endif
+
+ /* No tid yet since not part of a team */
+ __kmp_fork_barrier( gtid, KMP_GTID_DNE );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ this_thr->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+
+ pteam = (kmp_team_t *(*))(& this_thr->th.th_team);
+
+ /* have we been allocated? */
+ if ( TCR_SYNC_PTR(*pteam) && !TCR_4(__kmp_global.g.g_done) ) {
+#if OMPT_SUPPORT
+ ompt_task_info_t *task_info;
+ ompt_parallel_id_t my_parallel_id;
+ if (ompt_enabled) {
+ task_info = __ompt_get_taskinfo(0);
+ my_parallel_id = (*pteam)->t.ompt_team_info.parallel_id;
+ }
+#endif
+ /* we were just woken up, so run our new task */
+ if ( TCR_SYNC_PTR((*pteam)->t.t_pkfn) != NULL ) {
+ int rc;
+ KA_TRACE(20, ("__kmp_launch_thread: T#%d(%d:%d) invoke microtask = %p\n",
+ gtid, (*pteam)->t.t_id, __kmp_tid_from_gtid(gtid), (*pteam)->t.t_pkfn));
+
+ updateHWFPControl (*pteam);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ this_thr->th.ompt_thread_info.state = ompt_state_work_parallel;
+ // Initialize OMPT task id for implicit task.
+ int tid = __kmp_tid_from_gtid(gtid);
+ task_info->task_id = __ompt_task_id_new(tid);
+ }
+#endif
+
+ KMP_STOP_DEVELOPER_EXPLICIT_TIMER(USER_launch_thread_loop);
+ {
+ KMP_TIME_DEVELOPER_BLOCK(USER_worker_invoke);
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ rc = (*pteam)->t.t_invoke( gtid );
+ }
+ KMP_START_DEVELOPER_EXPLICIT_TIMER(USER_launch_thread_loop);
+ KMP_ASSERT( rc );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ /* no frame set while outside task */
+ task_info->frame.exit_runtime_frame = 0;
+
+ this_thr->th.ompt_thread_info.state = ompt_state_overhead;
+ }
+#endif
+ KMP_MB();
+ KA_TRACE(20, ("__kmp_launch_thread: T#%d(%d:%d) done microtask = %p\n",
+ gtid, (*pteam)->t.t_id, __kmp_tid_from_gtid(gtid), (*pteam)->t.t_pkfn));
+ }
+ /* join barrier after parallel region */
+ __kmp_join_barrier( gtid );
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ if (ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)) {
+ // don't access *pteam here: it may have already been freed
+ // by the master thread behind the barrier (possible race)
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_end)(
+ my_parallel_id, task_info->task_id);
+ }
+ task_info->frame.exit_runtime_frame = 0;
+ task_info->task_id = 0;
+ }
+#endif
+ }
+ }
+ TCR_SYNC_PTR((intptr_t)__kmp_global.g.g_done);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_thread_end)) {
+ __ompt_thread_end(ompt_thread_worker, gtid);
+ }
+#endif
+
+ this_thr->th.th_task_team = NULL;
+ /* run the destructors for the threadprivate data for this thread */
+ __kmp_common_destroy_gtid( gtid );
+
+ KA_TRACE( 10, ("__kmp_launch_thread: T#%d done\n", gtid ) );
+ KMP_MB();
+ return this_thr;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_internal_end_dest( void *specific_gtid )
+{
+ #if KMP_COMPILER_ICC
+ #pragma warning( push )
+ #pragma warning( disable: 810 ) // conversion from "void *" to "int" may lose significant bits
+ #endif
+ // Make sure no significant bits are lost
+ int gtid = (kmp_intptr_t)specific_gtid - 1;
+ #if KMP_COMPILER_ICC
+ #pragma warning( pop )
+ #endif
+
+ KA_TRACE( 30, ("__kmp_internal_end_dest: T#%d\n", gtid));
+ /* NOTE: the gtid is stored as gitd+1 in the thread-local-storage
+ * this is because 0 is reserved for the nothing-stored case */
+
+ /* josh: One reason for setting the gtid specific data even when it is being
+ destroyed by pthread is to allow gtid lookup through thread specific data
+ (__kmp_gtid_get_specific). Some of the code, especially stat code,
+ that gets executed in the call to __kmp_internal_end_thread, actually
+ gets the gtid through the thread specific data. Setting it here seems
+ rather inelegant and perhaps wrong, but allows __kmp_internal_end_thread
+ to run smoothly.
+ todo: get rid of this after we remove the dependence on
+ __kmp_gtid_get_specific
+ */
+ if(gtid >= 0 && KMP_UBER_GTID(gtid))
+ __kmp_gtid_set_specific( gtid );
+ #ifdef KMP_TDATA_GTID
+ __kmp_gtid = gtid;
+ #endif
+ __kmp_internal_end_thread( gtid );
+}
+
+#if KMP_OS_UNIX && KMP_DYNAMIC_LIB
+
+// 2009-09-08 (lev): It looks the destructor does not work. In simple test cases destructors work
+// perfectly, but in real libomp.so I have no evidence it is ever called. However, -fini linker
+// option in makefile.mk works fine.
+
+__attribute__(( destructor ))
+void
+__kmp_internal_end_dtor( void )
+{
+ __kmp_internal_end_atexit();
+}
+
+void
+__kmp_internal_end_fini( void )
+{
+ __kmp_internal_end_atexit();
+}
+
+#endif
+
+/* [Windows] josh: when the atexit handler is called, there may still be more than one thread alive */
+void
+__kmp_internal_end_atexit( void )
+{
+ KA_TRACE( 30, ( "__kmp_internal_end_atexit\n" ) );
+ /* [Windows]
+ josh: ideally, we want to completely shutdown the library in this atexit handler, but
+ stat code that depends on thread specific data for gtid fails because that data becomes
+ unavailable at some point during the shutdown, so we call __kmp_internal_end_thread
+ instead. We should eventually remove the dependency on __kmp_get_specific_gtid in the
+ stat code and use __kmp_internal_end_library to cleanly shutdown the library.
+
+// TODO: Can some of this comment about GVS be removed?
+ I suspect that the offending stat code is executed when the calling thread tries to
+ clean up a dead root thread's data structures, resulting in GVS code trying to close
+ the GVS structures for that thread, but since the stat code uses
+ __kmp_get_specific_gtid to get the gtid with the assumption that the calling thread is
+ cleaning up itself instead of another thread, it gets confused. This happens because
+ allowing a thread to unregister and cleanup another thread is a recent modification for
+ addressing an issue with Maxon Cinema4D. Based on the current design (20050722), a
+ thread may end up trying to unregister another thread only if thread death does not
+ trigger the calling of __kmp_internal_end_thread. For Linux* OS, there is the thread
+ specific data destructor function to detect thread death. For Windows dynamic, there
+ is DllMain(THREAD_DETACH). For Windows static, there is nothing. Thus, the
+ workaround is applicable only for Windows static stat library.
+ */
+ __kmp_internal_end_library( -1 );
+ #if KMP_OS_WINDOWS
+ __kmp_close_console();
+ #endif
+}
+
+static void
+__kmp_reap_thread(
+ kmp_info_t * thread,
+ int is_root
+) {
+
+ // It is assumed __kmp_forkjoin_lock is acquired.
+
+ int gtid;
+
+ KMP_DEBUG_ASSERT( thread != NULL );
+
+ gtid = thread->th.th_info.ds.ds_gtid;
+
+ if ( ! is_root ) {
+
+ if ( __kmp_dflt_blocktime != KMP_MAX_BLOCKTIME ) {
+ /* Assume the threads are at the fork barrier here */
+ KA_TRACE( 20, ("__kmp_reap_thread: releasing T#%d from fork barrier for reap\n", gtid ) );
+ /* Need release fence here to prevent seg faults for tree forkjoin barrier (GEH) */
+ kmp_flag_64 flag(&thread->th.th_bar[ bs_forkjoin_barrier ].bb.b_go, thread);
+ __kmp_release_64(&flag);
+ }; // if
+
+ // Terminate OS thread.
+ __kmp_reap_worker( thread );
+
+ //
+ // The thread was killed asynchronously. If it was actively
+ // spinning in the thread pool, decrement the global count.
+ //
+ // There is a small timing hole here - if the worker thread was
+ // just waking up after sleeping in the pool, had reset it's
+ // th_active_in_pool flag but not decremented the global counter
+ // __kmp_thread_pool_active_nth yet, then the global counter
+ // might not get updated.
+ //
+ // Currently, this can only happen as the library is unloaded,
+ // so there are no harmful side effects.
+ //
+ if ( thread->th.th_active_in_pool ) {
+ thread->th.th_active_in_pool = FALSE;
+ KMP_TEST_THEN_DEC32(
+ (kmp_int32 *) &__kmp_thread_pool_active_nth );
+ KMP_DEBUG_ASSERT( TCR_4(__kmp_thread_pool_active_nth) >= 0 );
+ }
+
+ // Decrement # of [worker] threads in the pool.
+ KMP_DEBUG_ASSERT( __kmp_thread_pool_nth > 0 );
+ --__kmp_thread_pool_nth;
+ }; // if
+
+ // Free the fast memory for tasking
+ #if USE_FAST_MEMORY
+ __kmp_free_fast_memory( thread );
+ #endif /* USE_FAST_MEMORY */
+
+ __kmp_suspend_uninitialize_thread( thread );
+
+ KMP_DEBUG_ASSERT( __kmp_threads[ gtid ] == thread );
+ TCW_SYNC_PTR(__kmp_threads[gtid], NULL);
+
+ -- __kmp_all_nth;
+ // __kmp_nth was decremented when thread is added to the pool.
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime back to user setting or default if necessary */
+ /* Middle initialization might never have occurred */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ KMP_DEBUG_ASSERT( __kmp_avail_proc > 0 );
+ if ( __kmp_nth <= __kmp_avail_proc ) {
+ __kmp_zero_bt = FALSE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ /* free the memory being used */
+ if( __kmp_env_consistency_check ) {
+ if ( thread->th.th_cons ) {
+ __kmp_free_cons_stack( thread->th.th_cons );
+ thread->th.th_cons = NULL;
+ }; // if
+ }
+
+ if ( thread->th.th_pri_common != NULL ) {
+ __kmp_free( thread->th.th_pri_common );
+ thread->th.th_pri_common = NULL;
+ }; // if
+
+ if (thread->th.th_task_state_memo_stack != NULL) {
+ __kmp_free(thread->th.th_task_state_memo_stack);
+ thread->th.th_task_state_memo_stack = NULL;
+ }
+
+ #if KMP_USE_BGET
+ if ( thread->th.th_local.bget_data != NULL ) {
+ __kmp_finalize_bget( thread );
+ }; // if
+ #endif
+
+#if KMP_AFFINITY_SUPPORTED
+ if ( thread->th.th_affin_mask != NULL ) {
+ KMP_CPU_FREE( thread->th.th_affin_mask );
+ thread->th.th_affin_mask = NULL;
+ }; // if
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+ __kmp_reap_team( thread->th.th_serial_team );
+ thread->th.th_serial_team = NULL;
+ __kmp_free( thread );
+
+ KMP_MB();
+
+} // __kmp_reap_thread
+
+static void
+__kmp_internal_end(void)
+{
+ int i;
+
+ /* First, unregister the library */
+ __kmp_unregister_library();
+
+ #if KMP_OS_WINDOWS
+ /* In Win static library, we can't tell when a root actually dies, so we
+ reclaim the data structures for any root threads that have died but not
+ unregistered themselves, in order to shut down cleanly.
+ In Win dynamic library we also can't tell when a thread dies.
+ */
+ __kmp_reclaim_dead_roots(); // AC: moved here to always clean resources of dead roots
+ #endif
+
+ for( i=0 ; i<__kmp_threads_capacity ; i++ )
+ if( __kmp_root[i] )
+ if( __kmp_root[i]->r.r_active )
+ break;
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ TCW_SYNC_4(__kmp_global.g.g_done, TRUE);
+
+ if ( i < __kmp_threads_capacity ) {
+ // 2009-09-08 (lev): Other alive roots found. Why do we kill the monitor??
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ //
+ // Need to check that monitor was initialized before reaping it.
+ // If we are called form __kmp_atfork_child (which sets
+ // __kmp_init_parallel = 0), then __kmp_monitor will appear to
+ // contain valid data, but it is only valid in the parent process,
+ // not the child.
+ //
+ // New behavior (201008): instead of keying off of the flag
+ // __kmp_init_parallel, the monitor thread creation is keyed off
+ // of the new flag __kmp_init_monitor.
+ //
+ __kmp_acquire_bootstrap_lock( & __kmp_monitor_lock );
+ if ( TCR_4( __kmp_init_monitor ) ) {
+ __kmp_reap_monitor( & __kmp_monitor );
+ TCW_4( __kmp_init_monitor, 0 );
+ }
+ __kmp_release_bootstrap_lock( & __kmp_monitor_lock );
+ KA_TRACE( 10, ("__kmp_internal_end: monitor reaped\n" ) );
+ } else {
+ /* TODO move this to cleanup code */
+ #ifdef KMP_DEBUG
+ /* make sure that everything has properly ended */
+ for ( i = 0; i < __kmp_threads_capacity; i++ ) {
+ if( __kmp_root[i] ) {
+// KMP_ASSERT( ! KMP_UBER_GTID( i ) ); // AC: there can be uber threads alive here
+ KMP_ASSERT( ! __kmp_root[i]->r.r_active ); // TODO: can they be active?
+ }
+ }
+ #endif
+
+ KMP_MB();
+
+ // Reap the worker threads.
+ // This is valid for now, but be careful if threads are reaped sooner.
+ while ( __kmp_thread_pool != NULL ) { // Loop thru all the thread in the pool.
+ // Get the next thread from the pool.
+ kmp_info_t * thread = (kmp_info_t *) __kmp_thread_pool;
+ __kmp_thread_pool = thread->th.th_next_pool;
+ // Reap it.
+ thread->th.th_next_pool = NULL;
+ thread->th.th_in_pool = FALSE;
+ __kmp_reap_thread( thread, 0 );
+ }; // while
+ __kmp_thread_pool_insert_pt = NULL;
+
+ // Reap teams.
+ while ( __kmp_team_pool != NULL ) { // Loop thru all the teams in the pool.
+ // Get the next team from the pool.
+ kmp_team_t * team = (kmp_team_t *) __kmp_team_pool;
+ __kmp_team_pool = team->t.t_next_pool;
+ // Reap it.
+ team->t.t_next_pool = NULL;
+ __kmp_reap_team( team );
+ }; // while
+
+ __kmp_reap_task_teams( );
+
+ for ( i = 0; i < __kmp_threads_capacity; ++ i ) {
+ // TBD: Add some checking...
+ // Something like KMP_DEBUG_ASSERT( __kmp_thread[ i ] == NULL );
+ }
+
+ /* Make sure all threadprivate destructors get run by joining with all worker
+ threads before resetting this flag */
+ TCW_SYNC_4(__kmp_init_common, FALSE);
+
+ KA_TRACE( 10, ("__kmp_internal_end: all workers reaped\n" ) );
+ KMP_MB();
+
+ //
+ // See note above: One of the possible fixes for CQ138434 / CQ140126
+ //
+ // FIXME: push both code fragments down and CSE them?
+ // push them into __kmp_cleanup() ?
+ //
+ __kmp_acquire_bootstrap_lock( & __kmp_monitor_lock );
+ if ( TCR_4( __kmp_init_monitor ) ) {
+ __kmp_reap_monitor( & __kmp_monitor );
+ TCW_4( __kmp_init_monitor, 0 );
+ }
+ __kmp_release_bootstrap_lock( & __kmp_monitor_lock );
+ KA_TRACE( 10, ("__kmp_internal_end: monitor reaped\n" ) );
+
+ } /* else !__kmp_global.t_active */
+ TCW_4(__kmp_init_gtid, FALSE);
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ __kmp_cleanup();
+#if OMPT_SUPPORT
+ ompt_fini();
+#endif
+}
+
+void
+__kmp_internal_end_library( int gtid_req )
+{
+ /* if we have already cleaned up, don't try again, it wouldn't be pretty */
+ /* this shouldn't be a race condition because __kmp_internal_end() is the
+ * only place to clear __kmp_serial_init */
+ /* we'll check this later too, after we get the lock */
+ // 2009-09-06: We do not set g_abort without setting g_done. This check looks redundaant,
+ // because the next check will work in any case.
+ if( __kmp_global.g.g_abort ) {
+ KA_TRACE( 11, ("__kmp_internal_end_library: abort, exiting\n" ));
+ /* TODO abort? */
+ return;
+ }
+ if( TCR_4(__kmp_global.g.g_done) || !__kmp_init_serial ) {
+ KA_TRACE( 10, ("__kmp_internal_end_library: already finished\n" ));
+ return;
+ }
+
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* find out who we are and what we should do */
+ {
+ int gtid = (gtid_req>=0) ? gtid_req : __kmp_gtid_get_specific();
+ KA_TRACE( 10, ("__kmp_internal_end_library: enter T#%d (%d)\n", gtid, gtid_req ));
+ if( gtid == KMP_GTID_SHUTDOWN ) {
+ KA_TRACE( 10, ("__kmp_internal_end_library: !__kmp_init_runtime, system already shutdown\n" ));
+ return;
+ } else if( gtid == KMP_GTID_MONITOR ) {
+ KA_TRACE( 10, ("__kmp_internal_end_library: monitor thread, gtid not registered, or system shutdown\n" ));
+ return;
+ } else if( gtid == KMP_GTID_DNE ) {
+ KA_TRACE( 10, ("__kmp_internal_end_library: gtid not registered or system shutdown\n" ));
+ /* we don't know who we are, but we may still shutdown the library */
+ } else if( KMP_UBER_GTID( gtid )) {
+ /* unregister ourselves as an uber thread. gtid is no longer valid */
+ if( __kmp_root[gtid]->r.r_active ) {
+ __kmp_global.g.g_abort = -1;
+ TCW_SYNC_4(__kmp_global.g.g_done, TRUE);
+ KA_TRACE( 10, ("__kmp_internal_end_library: root still active, abort T#%d\n", gtid ));
+ return;
+ } else {
+ KA_TRACE( 10, ("__kmp_internal_end_library: unregistering sibling T#%d\n", gtid ));
+ __kmp_unregister_root_current_thread( gtid );
+ }
+ } else {
+ /* worker threads may call this function through the atexit handler, if they call exit() */
+ /* For now, skip the usual subsequent processing and just dump the debug buffer.
+ TODO: do a thorough shutdown instead
+ */
+ #ifdef DUMP_DEBUG_ON_EXIT
+ if ( __kmp_debug_buf )
+ __kmp_dump_debug_buffer( );
+ #endif
+ return;
+ }
+ }
+ /* synchronize the termination process */
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+
+ /* have we already finished */
+ if( __kmp_global.g.g_abort ) {
+ KA_TRACE( 10, ("__kmp_internal_end_library: abort, exiting\n" ));
+ /* TODO abort? */
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+ if( TCR_4(__kmp_global.g.g_done) || !__kmp_init_serial ) {
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+
+ /* We need this lock to enforce mutex between this reading of
+ __kmp_threads_capacity and the writing by __kmp_register_root.
+ Alternatively, we can use a counter of roots that is
+ atomically updated by __kmp_get_global_thread_id_reg,
+ __kmp_do_serial_initialize and __kmp_internal_end_*.
+ */
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ /* now we can safely conduct the actual termination */
+ __kmp_internal_end();
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+
+ KA_TRACE( 10, ("__kmp_internal_end_library: exit\n" ) );
+
+ #ifdef DUMP_DEBUG_ON_EXIT
+ if ( __kmp_debug_buf )
+ __kmp_dump_debug_buffer();
+ #endif
+
+ #if KMP_OS_WINDOWS
+ __kmp_close_console();
+ #endif
+
+ __kmp_fini_allocator();
+
+} // __kmp_internal_end_library
+
+void
+__kmp_internal_end_thread( int gtid_req )
+{
+ int i;
+
+ /* if we have already cleaned up, don't try again, it wouldn't be pretty */
+ /* this shouldn't be a race condition because __kmp_internal_end() is the
+ * only place to clear __kmp_serial_init */
+ /* we'll check this later too, after we get the lock */
+ // 2009-09-06: We do not set g_abort without setting g_done. This check looks redundant,
+ // because the next check will work in any case.
+ if( __kmp_global.g.g_abort ) {
+ KA_TRACE( 11, ("__kmp_internal_end_thread: abort, exiting\n" ));
+ /* TODO abort? */
+ return;
+ }
+ if( TCR_4(__kmp_global.g.g_done) || !__kmp_init_serial ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: already finished\n" ));
+ return;
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* find out who we are and what we should do */
+ {
+ int gtid = (gtid_req>=0) ? gtid_req : __kmp_gtid_get_specific();
+ KA_TRACE( 10, ("__kmp_internal_end_thread: enter T#%d (%d)\n", gtid, gtid_req ));
+ if( gtid == KMP_GTID_SHUTDOWN ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: !__kmp_init_runtime, system already shutdown\n" ));
+ return;
+ } else if( gtid == KMP_GTID_MONITOR ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: monitor thread, gtid not registered, or system shutdown\n" ));
+ return;
+ } else if( gtid == KMP_GTID_DNE ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: gtid not registered or system shutdown\n" ));
+ return;
+ /* we don't know who we are */
+ } else if( KMP_UBER_GTID( gtid )) {
+ /* unregister ourselves as an uber thread. gtid is no longer valid */
+ if( __kmp_root[gtid]->r.r_active ) {
+ __kmp_global.g.g_abort = -1;
+ TCW_SYNC_4(__kmp_global.g.g_done, TRUE);
+ KA_TRACE( 10, ("__kmp_internal_end_thread: root still active, abort T#%d\n", gtid ));
+ return;
+ } else {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: unregistering sibling T#%d\n", gtid ));
+ __kmp_unregister_root_current_thread( gtid );
+ }
+ } else {
+ /* just a worker thread, let's leave */
+ KA_TRACE( 10, ("__kmp_internal_end_thread: worker thread T#%d\n", gtid ));
+
+ if ( gtid >= 0 ) {
+ __kmp_threads[gtid]->th.th_task_team = NULL;
+ }
+
+ KA_TRACE( 10, ("__kmp_internal_end_thread: worker thread done, exiting T#%d\n", gtid ));
+ return;
+ }
+ }
+ #if defined KMP_DYNAMIC_LIB
+ // AC: lets not shutdown the Linux* OS dynamic library at the exit of uber thread,
+ // because we will better shutdown later in the library destructor.
+ // The reason of this change is performance problem when non-openmp thread
+ // in a loop forks and joins many openmp threads. We can save a lot of time
+ // keeping worker threads alive until the program shutdown.
+ // OM: Removed Linux* OS restriction to fix the crash on OS X* (DPD200239966) and
+ // Windows(DPD200287443) that occurs when using critical sections from foreign threads.
+ KA_TRACE( 10, ("__kmp_internal_end_thread: exiting T#%d\n", gtid_req) );
+ return;
+ #endif
+ /* synchronize the termination process */
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+
+ /* have we already finished */
+ if( __kmp_global.g.g_abort ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: abort, exiting\n" ));
+ /* TODO abort? */
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+ if( TCR_4(__kmp_global.g.g_done) || !__kmp_init_serial ) {
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+
+ /* We need this lock to enforce mutex between this reading of
+ __kmp_threads_capacity and the writing by __kmp_register_root.
+ Alternatively, we can use a counter of roots that is
+ atomically updated by __kmp_get_global_thread_id_reg,
+ __kmp_do_serial_initialize and __kmp_internal_end_*.
+ */
+
+ /* should we finish the run-time? are all siblings done? */
+ __kmp_acquire_bootstrap_lock( &__kmp_forkjoin_lock );
+
+ for ( i = 0; i < __kmp_threads_capacity; ++ i ) {
+ if ( KMP_UBER_GTID( i ) ) {
+ KA_TRACE( 10, ("__kmp_internal_end_thread: remaining sibling task: gtid==%d\n", i ));
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ };
+ }
+
+ /* now we can safely conduct the actual termination */
+
+ __kmp_internal_end();
+
+ __kmp_release_bootstrap_lock( &__kmp_forkjoin_lock );
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+
+ KA_TRACE( 10, ("__kmp_internal_end_thread: exit T#%d\n", gtid_req ) );
+
+ #ifdef DUMP_DEBUG_ON_EXIT
+ if ( __kmp_debug_buf )
+ __kmp_dump_debug_buffer();
+ #endif
+} // __kmp_internal_end_thread
+
+// -------------------------------------------------------------------------------------------------
+// Library registration stuff.
+
+static long __kmp_registration_flag = 0;
+ // Random value used to indicate library initialization.
+static char * __kmp_registration_str = NULL;
+ // Value to be saved in env var __KMP_REGISTERED_LIB_<pid>.
+
+
+static inline
+char *
+__kmp_reg_status_name() {
+ /*
+ On RHEL 3u5 if linked statically, getpid() returns different values in each thread.
+ If registration and unregistration go in different threads (omp_misc_other_root_exit.cpp test case),
+ the name of registered_lib_env env var can not be found, because the name will contain different pid.
+ */
+ return __kmp_str_format( "__KMP_REGISTERED_LIB_%d", (int) getpid() );
+} // __kmp_reg_status_get
+
+
+void
+__kmp_register_library_startup(
+ void
+) {
+
+ char * name = __kmp_reg_status_name(); // Name of the environment variable.
+ int done = 0;
+ union {
+ double dtime;
+ long ltime;
+ } time;
+ #if KMP_OS_WINDOWS
+ __kmp_initialize_system_tick();
+ #endif
+ __kmp_read_system_time( & time.dtime );
+ __kmp_registration_flag = 0xCAFE0000L | ( time.ltime & 0x0000FFFFL );
+ __kmp_registration_str =
+ __kmp_str_format(
+ "%p-%lx-%s",
+ & __kmp_registration_flag,
+ __kmp_registration_flag,
+ KMP_LIBRARY_FILE
+ );
+
+ KA_TRACE( 50, ( "__kmp_register_library_startup: %s=\"%s\"\n", name, __kmp_registration_str ) );
+
+ while ( ! done ) {
+
+ char * value = NULL; // Actual value of the environment variable.
+
+ // Set environment variable, but do not overwrite if it is exist.
+ __kmp_env_set( name, __kmp_registration_str, 0 );
+ // Check the variable is written.
+ value = __kmp_env_get( name );
+ if ( value != NULL && strcmp( value, __kmp_registration_str ) == 0 ) {
+
+ done = 1; // Ok, environment variable set successfully, exit the loop.
+
+ } else {
+
+ // Oops. Write failed. Another copy of OpenMP RTL is in memory.
+ // Check whether it alive or dead.
+ int neighbor = 0; // 0 -- unknown status, 1 -- alive, 2 -- dead.
+ char * tail = value;
+ char * flag_addr_str = NULL;
+ char * flag_val_str = NULL;
+ char const * file_name = NULL;
+ __kmp_str_split( tail, '-', & flag_addr_str, & tail );
+ __kmp_str_split( tail, '-', & flag_val_str, & tail );
+ file_name = tail;
+ if ( tail != NULL ) {
+ long * flag_addr = 0;
+ long flag_val = 0;
+ KMP_SSCANF( flag_addr_str, "%p", & flag_addr );
+ KMP_SSCANF( flag_val_str, "%lx", & flag_val );
+ if ( flag_addr != 0 && flag_val != 0 && strcmp( file_name, "" ) != 0 ) {
+ // First, check whether environment-encoded address is mapped into addr space.
+ // If so, dereference it to see if it still has the right value.
+
+ if ( __kmp_is_address_mapped( flag_addr ) && * flag_addr == flag_val ) {
+ neighbor = 1;
+ } else {
+ // If not, then we know the other copy of the library is no longer running.
+ neighbor = 2;
+ }; // if
+ }; // if
+ }; // if
+ switch ( neighbor ) {
+ case 0 : // Cannot parse environment variable -- neighbor status unknown.
+ // Assume it is the incompatible format of future version of the library.
+ // Assume the other library is alive.
+ // WARN( ... ); // TODO: Issue a warning.
+ file_name = "unknown library";
+ // Attention! Falling to the next case. That's intentional.
+ case 1 : { // Neighbor is alive.
+ // Check it is allowed.
+ char * duplicate_ok = __kmp_env_get( "KMP_DUPLICATE_LIB_OK" );
+ if ( ! __kmp_str_match_true( duplicate_ok ) ) {
+ // That's not allowed. Issue fatal error.
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( DuplicateLibrary, KMP_LIBRARY_FILE, file_name ),
+ KMP_HNT( DuplicateLibrary ),
+ __kmp_msg_null
+ );
+ }; // if
+ KMP_INTERNAL_FREE( duplicate_ok );
+ __kmp_duplicate_library_ok = 1;
+ done = 1; // Exit the loop.
+ } break;
+ case 2 : { // Neighbor is dead.
+ // Clear the variable and try to register library again.
+ __kmp_env_unset( name );
+ } break;
+ default : {
+ KMP_DEBUG_ASSERT( 0 );
+ } break;
+ }; // switch
+
+ }; // if
+ KMP_INTERNAL_FREE( (void *) value );
+
+ }; // while
+ KMP_INTERNAL_FREE( (void *) name );
+
+} // func __kmp_register_library_startup
+
+
+void
+__kmp_unregister_library( void ) {
+
+ char * name = __kmp_reg_status_name();
+ char * value = __kmp_env_get( name );
+
+ KMP_DEBUG_ASSERT( __kmp_registration_flag != 0 );
+ KMP_DEBUG_ASSERT( __kmp_registration_str != NULL );
+ if ( value != NULL && strcmp( value, __kmp_registration_str ) == 0 ) {
+ // Ok, this is our variable. Delete it.
+ __kmp_env_unset( name );
+ }; // if
+
+ KMP_INTERNAL_FREE( __kmp_registration_str );
+ KMP_INTERNAL_FREE( value );
+ KMP_INTERNAL_FREE( name );
+
+ __kmp_registration_flag = 0;
+ __kmp_registration_str = NULL;
+
+} // __kmp_unregister_library
+
+
+// End of Library registration stuff.
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+
+static void __kmp_check_mic_type()
+{
+ kmp_cpuid_t cpuid_state = {0};
+ kmp_cpuid_t * cs_p = &cpuid_state;
+ __kmp_x86_cpuid(1, 0, cs_p);
+ // We don't support mic1 at the moment
+ if( (cs_p->eax & 0xff0) == 0xB10 ) {
+ __kmp_mic_type = mic2;
+ } else if( (cs_p->eax & 0xf0ff0) == 0x50670 ) {
+ __kmp_mic_type = mic3;
+ } else {
+ __kmp_mic_type = non_mic;
+ }
+}
+
+#endif /* KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS) */
+
+static void
+__kmp_do_serial_initialize( void )
+{
+ int i, gtid;
+ int size;
+
+ KA_TRACE( 10, ("__kmp_do_serial_initialize: enter\n" ) );
+
+ KMP_DEBUG_ASSERT( sizeof( kmp_int32 ) == 4 );
+ KMP_DEBUG_ASSERT( sizeof( kmp_uint32 ) == 4 );
+ KMP_DEBUG_ASSERT( sizeof( kmp_int64 ) == 8 );
+ KMP_DEBUG_ASSERT( sizeof( kmp_uint64 ) == 8 );
+ KMP_DEBUG_ASSERT( sizeof( kmp_intptr_t ) == sizeof( void * ) );
+
+#if OMPT_SUPPORT
+ ompt_pre_init();
+#endif
+
+ __kmp_validate_locks();
+
+ /* Initialize internal memory allocator */
+ __kmp_init_allocator();
+
+ /* Register the library startup via an environment variable
+ and check to see whether another copy of the library is already
+ registered. */
+
+ __kmp_register_library_startup( );
+
+ /* TODO reinitialization of library */
+ if( TCR_4(__kmp_global.g.g_done) ) {
+ KA_TRACE( 10, ("__kmp_do_serial_initialize: reinitialization of library\n" ) );
+ }
+
+ __kmp_global.g.g_abort = 0;
+ TCW_SYNC_4(__kmp_global.g.g_done, FALSE);
+
+ /* initialize the locks */
+#if KMP_USE_ADAPTIVE_LOCKS
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+ __kmp_init_speculative_stats();
+#endif
+#endif
+#if KMP_STATS_ENABLED
+ __kmp_init_tas_lock( & __kmp_stats_lock );
+#endif
+ __kmp_init_lock( & __kmp_global_lock );
+ __kmp_init_queuing_lock( & __kmp_dispatch_lock );
+ __kmp_init_lock( & __kmp_debug_lock );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_1i );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_2i );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_4i );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_4r );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_8i );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_8r );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_8c );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_10r );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_16r );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_16c );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_20c );
+ __kmp_init_atomic_lock( & __kmp_atomic_lock_32c );
+ __kmp_init_bootstrap_lock( & __kmp_forkjoin_lock );
+ __kmp_init_bootstrap_lock( & __kmp_exit_lock );
+ __kmp_init_bootstrap_lock( & __kmp_monitor_lock );
+ __kmp_init_bootstrap_lock( & __kmp_tp_cached_lock );
+
+ /* conduct initialization and initial setup of configuration */
+
+ __kmp_runtime_initialize();
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ __kmp_check_mic_type();
+#endif
+
+ // Some global variable initialization moved here from kmp_env_initialize()
+#ifdef KMP_DEBUG
+ kmp_diag = 0;
+#endif
+ __kmp_abort_delay = 0;
+
+ // From __kmp_init_dflt_team_nth()
+ /* assume the entire machine will be used */
+ __kmp_dflt_team_nth_ub = __kmp_xproc;
+ if( __kmp_dflt_team_nth_ub < KMP_MIN_NTH ) {
+ __kmp_dflt_team_nth_ub = KMP_MIN_NTH;
+ }
+ if( __kmp_dflt_team_nth_ub > __kmp_sys_max_nth ) {
+ __kmp_dflt_team_nth_ub = __kmp_sys_max_nth;
+ }
+ __kmp_max_nth = __kmp_sys_max_nth;
+
+ // Three vars below moved here from __kmp_env_initialize() "KMP_BLOCKTIME" part
+ __kmp_dflt_blocktime = KMP_DEFAULT_BLOCKTIME;
+ __kmp_monitor_wakeups = KMP_WAKEUPS_FROM_BLOCKTIME( __kmp_dflt_blocktime, __kmp_monitor_wakeups );
+ __kmp_bt_intervals = KMP_INTERVALS_FROM_BLOCKTIME( __kmp_dflt_blocktime, __kmp_monitor_wakeups );
+ // From "KMP_LIBRARY" part of __kmp_env_initialize()
+ __kmp_library = library_throughput;
+ // From KMP_SCHEDULE initialization
+ __kmp_static = kmp_sch_static_balanced;
+ // AC: do not use analytical here, because it is non-monotonous
+ //__kmp_guided = kmp_sch_guided_iterative_chunked;
+ //__kmp_auto = kmp_sch_guided_analytical_chunked; // AC: it is the default, no need to repeate assignment
+ // Barrier initialization. Moved here from __kmp_env_initialize() Barrier branch bit control and barrier method
+ // control parts
+ #if KMP_FAST_REDUCTION_BARRIER
+ #define kmp_reduction_barrier_gather_bb ((int)1)
+ #define kmp_reduction_barrier_release_bb ((int)1)
+ #define kmp_reduction_barrier_gather_pat bp_hyper_bar
+ #define kmp_reduction_barrier_release_pat bp_hyper_bar
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ for ( i=bs_plain_barrier; i<bs_last_barrier; i++ ) {
+ __kmp_barrier_gather_branch_bits [ i ] = __kmp_barrier_gather_bb_dflt;
+ __kmp_barrier_release_branch_bits[ i ] = __kmp_barrier_release_bb_dflt;
+ __kmp_barrier_gather_pattern [ i ] = __kmp_barrier_gather_pat_dflt;
+ __kmp_barrier_release_pattern[ i ] = __kmp_barrier_release_pat_dflt;
+ #if KMP_FAST_REDUCTION_BARRIER
+ if( i == bs_reduction_barrier ) { // tested and confirmed on ALTIX only ( lin_64 ): hyper,1
+ __kmp_barrier_gather_branch_bits [ i ] = kmp_reduction_barrier_gather_bb;
+ __kmp_barrier_release_branch_bits[ i ] = kmp_reduction_barrier_release_bb;
+ __kmp_barrier_gather_pattern [ i ] = kmp_reduction_barrier_gather_pat;
+ __kmp_barrier_release_pattern[ i ] = kmp_reduction_barrier_release_pat;
+ }
+ #endif // KMP_FAST_REDUCTION_BARRIER
+ }
+ #if KMP_FAST_REDUCTION_BARRIER
+ #undef kmp_reduction_barrier_release_pat
+ #undef kmp_reduction_barrier_gather_pat
+ #undef kmp_reduction_barrier_release_bb
+ #undef kmp_reduction_barrier_gather_bb
+ #endif // KMP_FAST_REDUCTION_BARRIER
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if (__kmp_mic_type == mic2) { // KNC
+ // AC: plane=3,2, forkjoin=2,1 are optimal for 240 threads on KNC
+ __kmp_barrier_gather_branch_bits [ bs_plain_barrier ] = 3; // plain gather
+ __kmp_barrier_release_branch_bits[ bs_forkjoin_barrier ] = 1; // forkjoin release
+ __kmp_barrier_gather_pattern [ bs_forkjoin_barrier ] = bp_hierarchical_bar;
+ __kmp_barrier_release_pattern[ bs_forkjoin_barrier ] = bp_hierarchical_bar;
+ }
+#if KMP_FAST_REDUCTION_BARRIER
+ if (__kmp_mic_type == mic2) { // KNC
+ __kmp_barrier_gather_pattern [ bs_reduction_barrier ] = bp_hierarchical_bar;
+ __kmp_barrier_release_pattern[ bs_reduction_barrier ] = bp_hierarchical_bar;
+ }
+#endif
+#endif
+
+ // From KMP_CHECKS initialization
+#ifdef KMP_DEBUG
+ __kmp_env_checks = TRUE; /* development versions have the extra checks */
+#else
+ __kmp_env_checks = FALSE; /* port versions do not have the extra checks */
+#endif
+
+ // From "KMP_FOREIGN_THREADS_THREADPRIVATE" initialization
+ __kmp_foreign_tp = TRUE;
+
+ __kmp_global.g.g_dynamic = FALSE;
+ __kmp_global.g.g_dynamic_mode = dynamic_default;
+
+ __kmp_env_initialize( NULL );
+
+ // Print all messages in message catalog for testing purposes.
+ #ifdef KMP_DEBUG
+ char const * val = __kmp_env_get( "KMP_DUMP_CATALOG" );
+ if ( __kmp_str_match_true( val ) ) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init( & buffer );
+ __kmp_i18n_dump_catalog( & buffer );
+ __kmp_printf( "%s", buffer.str );
+ __kmp_str_buf_free( & buffer );
+ }; // if
+ __kmp_env_free( & val );
+ #endif
+
+ __kmp_threads_capacity = __kmp_initial_threads_capacity( __kmp_dflt_team_nth_ub );
+ // Moved here from __kmp_env_initialize() "KMP_ALL_THREADPRIVATE" part
+ __kmp_tp_capacity = __kmp_default_tp_capacity(__kmp_dflt_team_nth_ub, __kmp_max_nth, __kmp_allThreadsSpecified);
+
+ // If the library is shut down properly, both pools must be NULL. Just in case, set them
+ // to NULL -- some memory may leak, but subsequent code will work even if pools are not freed.
+ KMP_DEBUG_ASSERT( __kmp_thread_pool == NULL );
+ KMP_DEBUG_ASSERT( __kmp_thread_pool_insert_pt == NULL );
+ KMP_DEBUG_ASSERT( __kmp_team_pool == NULL );
+ __kmp_thread_pool = NULL;
+ __kmp_thread_pool_insert_pt = NULL;
+ __kmp_team_pool = NULL;
+
+ /* Allocate all of the variable sized records */
+ /* NOTE: __kmp_threads_capacity entries are allocated, but the arrays are expandable */
+ /* Since allocation is cache-aligned, just add extra padding at the end */
+ size = (sizeof(kmp_info_t*) + sizeof(kmp_root_t*))*__kmp_threads_capacity + CACHE_LINE;
+ __kmp_threads = (kmp_info_t**) __kmp_allocate( size );
+ __kmp_root = (kmp_root_t**) ((char*)__kmp_threads + sizeof(kmp_info_t*) * __kmp_threads_capacity );
+
+ /* init thread counts */
+ KMP_DEBUG_ASSERT( __kmp_all_nth == 0 ); // Asserts fail if the library is reinitializing and
+ KMP_DEBUG_ASSERT( __kmp_nth == 0 ); // something was wrong in termination.
+ __kmp_all_nth = 0;
+ __kmp_nth = 0;
+
+ /* setup the uber master thread and hierarchy */
+ gtid = __kmp_register_root( TRUE );
+ KA_TRACE( 10, ("__kmp_do_serial_initialize T#%d\n", gtid ));
+ KMP_ASSERT( KMP_UBER_GTID( gtid ) );
+ KMP_ASSERT( KMP_INITIAL_GTID( gtid ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ __kmp_common_initialize();
+
+ #if KMP_OS_UNIX
+ /* invoke the child fork handler */
+ __kmp_register_atfork();
+ #endif
+
+ #if ! defined KMP_DYNAMIC_LIB
+ {
+ /* Invoke the exit handler when the program finishes, only for static library.
+ For dynamic library, we already have _fini and DllMain.
+ */
+ int rc = atexit( __kmp_internal_end_atexit );
+ if ( rc != 0 ) {
+ __kmp_msg( kmp_ms_fatal, KMP_MSG( FunctionError, "atexit()" ), KMP_ERR( rc ), __kmp_msg_null );
+ }; // if
+ }
+ #endif
+
+ #if KMP_HANDLE_SIGNALS
+ #if KMP_OS_UNIX
+ /* NOTE: make sure that this is called before the user installs
+ * their own signal handlers so that the user handlers
+ * are called first. this way they can return false,
+ * not call our handler, avoid terminating the library,
+ * and continue execution where they left off. */
+ __kmp_install_signals( FALSE );
+ #endif /* KMP_OS_UNIX */
+ #if KMP_OS_WINDOWS
+ __kmp_install_signals( TRUE );
+ #endif /* KMP_OS_WINDOWS */
+ #endif
+
+ /* we have finished the serial initialization */
+ __kmp_init_counter ++;
+
+ __kmp_init_serial = TRUE;
+
+ if (__kmp_settings) {
+ __kmp_env_print();
+ }
+
+#if OMP_40_ENABLED
+ if (__kmp_display_env || __kmp_display_env_verbose) {
+ __kmp_env_print_2();
+ }
+#endif // OMP_40_ENABLED
+
+#if OMPT_SUPPORT
+ ompt_post_init();
+#endif
+
+ KMP_MB();
+
+ KA_TRACE( 10, ("__kmp_do_serial_initialize: exit\n" ) );
+}
+
+void
+__kmp_serial_initialize( void )
+{
+ if ( __kmp_init_serial ) {
+ return;
+ }
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+ if ( __kmp_init_serial ) {
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+ __kmp_do_serial_initialize();
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+}
+
+static void
+__kmp_do_middle_initialize( void )
+{
+ int i, j;
+ int prev_dflt_team_nth;
+
+ if( !__kmp_init_serial ) {
+ __kmp_do_serial_initialize();
+ }
+
+ KA_TRACE( 10, ("__kmp_middle_initialize: enter\n" ) );
+
+ //
+ // Save the previous value for the __kmp_dflt_team_nth so that
+ // we can avoid some reinitialization if it hasn't changed.
+ //
+ prev_dflt_team_nth = __kmp_dflt_team_nth;
+
+#if KMP_AFFINITY_SUPPORTED
+ //
+ // __kmp_affinity_initialize() will try to set __kmp_ncores to the
+ // number of cores on the machine.
+ //
+ __kmp_affinity_initialize();
+
+ //
+ // Run through the __kmp_threads array and set the affinity mask
+ // for each root thread that is currently registered with the RTL.
+ //
+ for ( i = 0; i < __kmp_threads_capacity; i++ ) {
+ if ( TCR_PTR( __kmp_threads[ i ] ) != NULL ) {
+ __kmp_affinity_set_init_mask( i, TRUE );
+ }
+ }
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+ KMP_ASSERT( __kmp_xproc > 0 );
+ if ( __kmp_avail_proc == 0 ) {
+ __kmp_avail_proc = __kmp_xproc;
+ }
+
+ // If there were empty places in num_threads list (OMP_NUM_THREADS=,,2,3), correct them now
+ j = 0;
+ while ( ( j < __kmp_nested_nth.used ) && ! __kmp_nested_nth.nth[ j ] ) {
+ __kmp_nested_nth.nth[ j ] = __kmp_dflt_team_nth = __kmp_dflt_team_nth_ub = __kmp_avail_proc;
+ j++;
+ }
+
+ if ( __kmp_dflt_team_nth == 0 ) {
+#ifdef KMP_DFLT_NTH_CORES
+ //
+ // Default #threads = #cores
+ //
+ __kmp_dflt_team_nth = __kmp_ncores;
+ KA_TRACE( 20, ("__kmp_middle_initialize: setting __kmp_dflt_team_nth = __kmp_ncores (%d)\n",
+ __kmp_dflt_team_nth ) );
+#else
+ //
+ // Default #threads = #available OS procs
+ //
+ __kmp_dflt_team_nth = __kmp_avail_proc;
+ KA_TRACE( 20, ("__kmp_middle_initialize: setting __kmp_dflt_team_nth = __kmp_avail_proc(%d)\n",
+ __kmp_dflt_team_nth ) );
+#endif /* KMP_DFLT_NTH_CORES */
+ }
+
+ if ( __kmp_dflt_team_nth < KMP_MIN_NTH ) {
+ __kmp_dflt_team_nth = KMP_MIN_NTH;
+ }
+ if( __kmp_dflt_team_nth > __kmp_sys_max_nth ) {
+ __kmp_dflt_team_nth = __kmp_sys_max_nth;
+ }
+
+ //
+ // There's no harm in continuing if the following check fails,
+ // but it indicates an error in the previous logic.
+ //
+ KMP_DEBUG_ASSERT( __kmp_dflt_team_nth <= __kmp_dflt_team_nth_ub );
+
+ if ( __kmp_dflt_team_nth != prev_dflt_team_nth ) {
+ //
+ // Run through the __kmp_threads array and set the num threads icv
+ // for each root thread that is currently registered with the RTL
+ // (which has not already explicitly set its nthreads-var with a
+ // call to omp_set_num_threads()).
+ //
+ for ( i = 0; i < __kmp_threads_capacity; i++ ) {
+ kmp_info_t *thread = __kmp_threads[ i ];
+ if ( thread == NULL ) continue;
+ if ( thread->th.th_current_task->td_icvs.nproc != 0 ) continue;
+
+ set__nproc( __kmp_threads[ i ], __kmp_dflt_team_nth );
+ }
+ }
+ KA_TRACE( 20, ("__kmp_middle_initialize: final value for __kmp_dflt_team_nth = %d\n",
+ __kmp_dflt_team_nth) );
+
+#ifdef KMP_ADJUST_BLOCKTIME
+ /* Adjust blocktime to zero if necessary */
+ /* now that __kmp_avail_proc is set */
+ if ( !__kmp_env_blocktime && ( __kmp_avail_proc > 0 ) ) {
+ KMP_DEBUG_ASSERT( __kmp_avail_proc > 0 );
+ if ( __kmp_nth > __kmp_avail_proc ) {
+ __kmp_zero_bt = TRUE;
+ }
+ }
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ /* we have finished middle initialization */
+ TCW_SYNC_4(__kmp_init_middle, TRUE);
+
+ KA_TRACE( 10, ("__kmp_do_middle_initialize: exit\n" ) );
+}
+
+void
+__kmp_middle_initialize( void )
+{
+ if ( __kmp_init_middle ) {
+ return;
+ }
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+ if ( __kmp_init_middle ) {
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+ return;
+ }
+ __kmp_do_middle_initialize();
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+}
+
+void
+__kmp_parallel_initialize( void )
+{
+ int gtid = __kmp_entry_gtid(); // this might be a new root
+
+ /* synchronize parallel initialization (for sibling) */
+ if( TCR_4(__kmp_init_parallel) ) return;
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+ if( TCR_4(__kmp_init_parallel) ) { __kmp_release_bootstrap_lock( &__kmp_initz_lock ); return; }
+
+ /* TODO reinitialization after we have already shut down */
+ if( TCR_4(__kmp_global.g.g_done) ) {
+ KA_TRACE( 10, ("__kmp_parallel_initialize: attempt to init while shutting down\n" ) );
+ __kmp_infinite_loop();
+ }
+
+ /* jc: The lock __kmp_initz_lock is already held, so calling __kmp_serial_initialize
+ would cause a deadlock. So we call __kmp_do_serial_initialize directly.
+ */
+ if( !__kmp_init_middle ) {
+ __kmp_do_middle_initialize();
+ }
+
+ /* begin initialization */
+ KA_TRACE( 10, ("__kmp_parallel_initialize: enter\n" ) );
+ KMP_ASSERT( KMP_UBER_GTID( gtid ) );
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ //
+ // Save the FP control regs.
+ // Worker threads will set theirs to these values at thread startup.
+ //
+ __kmp_store_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
+ __kmp_store_mxcsr( &__kmp_init_mxcsr );
+ __kmp_init_mxcsr &= KMP_X86_MXCSR_MASK;
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+#if KMP_OS_UNIX
+# if KMP_HANDLE_SIGNALS
+ /* must be after __kmp_serial_initialize */
+ __kmp_install_signals( TRUE );
+# endif
+#endif
+
+ __kmp_suspend_initialize();
+
+#if defined(USE_LOAD_BALANCE)
+ if ( __kmp_global.g.g_dynamic_mode == dynamic_default ) {
+ __kmp_global.g.g_dynamic_mode = dynamic_load_balance;
+ }
+#else
+ if ( __kmp_global.g.g_dynamic_mode == dynamic_default ) {
+ __kmp_global.g.g_dynamic_mode = dynamic_thread_limit;
+ }
+#endif
+
+ if ( __kmp_version ) {
+ __kmp_print_version_2();
+ }
+
+ /* we have finished parallel initialization */
+ TCW_SYNC_4(__kmp_init_parallel, TRUE);
+
+ KMP_MB();
+ KA_TRACE( 10, ("__kmp_parallel_initialize: exit\n" ) );
+
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_run_before_invoked_task( int gtid, int tid, kmp_info_t *this_thr,
+ kmp_team_t *team )
+{
+ kmp_disp_t *dispatch;
+
+ KMP_MB();
+
+ /* none of the threads have encountered any constructs, yet. */
+ this_thr->th.th_local.this_construct = 0;
+#if KMP_CACHE_MANAGE
+ KMP_CACHE_PREFETCH( &this_thr->th.th_bar[ bs_forkjoin_barrier ].bb.b_arrived );
+#endif /* KMP_CACHE_MANAGE */
+ dispatch = (kmp_disp_t *)TCR_PTR(this_thr->th.th_dispatch);
+ KMP_DEBUG_ASSERT( dispatch );
+ KMP_DEBUG_ASSERT( team->t.t_dispatch );
+ //KMP_DEBUG_ASSERT( this_thr->th.th_dispatch == &team->t.t_dispatch[ this_thr->th.th_info.ds.ds_tid ] );
+
+ dispatch->th_disp_index = 0; /* reset the dispatch buffer counter */
+#if OMP_45_ENABLED
+ dispatch->th_doacross_buf_idx = 0; /* reset the doacross dispatch buffer counter */
+#endif
+ if( __kmp_env_consistency_check )
+ __kmp_push_parallel( gtid, team->t.t_ident );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+}
+
+void
+__kmp_run_after_invoked_task( int gtid, int tid, kmp_info_t *this_thr,
+ kmp_team_t *team )
+{
+ if( __kmp_env_consistency_check )
+ __kmp_pop_parallel( gtid, team->t.t_ident );
+}
+
+int
+__kmp_invoke_task_func( int gtid )
+{
+ int rc;
+ int tid = __kmp_tid_from_gtid( gtid );
+ kmp_info_t *this_thr = __kmp_threads[ gtid ];
+ kmp_team_t *team = this_thr->th.th_team;
+
+ __kmp_run_before_invoked_task( gtid, tid, this_thr, team );
+#if USE_ITT_BUILD
+ if ( __itt_stack_caller_create_ptr ) {
+ __kmp_itt_stack_callee_enter( (__itt_caller)team->t.t_stack_id ); // inform ittnotify about entering user's code
+ }
+#endif /* USE_ITT_BUILD */
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_INVOKING();
+#endif
+
+#if OMPT_SUPPORT
+ void *dummy;
+ void **exit_runtime_p;
+ ompt_task_id_t my_task_id;
+ ompt_parallel_id_t my_parallel_id;
+
+ if (ompt_enabled) {
+ exit_runtime_p = &(team->t.t_implicit_task_taskdata[tid].
+ ompt_task_info.frame.exit_runtime_frame);
+ } else {
+ exit_runtime_p = &dummy;
+ }
+
+#if OMPT_TRACE
+ my_task_id = team->t.t_implicit_task_taskdata[tid].ompt_task_info.task_id;
+ my_parallel_id = team->t.ompt_team_info.parallel_id;
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_implicit_task_begin)(
+ my_parallel_id, my_task_id);
+ }
+#endif
+#endif
+
+ {
+ KMP_TIME_PARTITIONED_BLOCK(OMP_parallel);
+ KMP_SET_THREAD_STATE_BLOCK(IMPLICIT_TASK);
+ rc = __kmp_invoke_microtask( (microtask_t) TCR_SYNC_PTR(team->t.t_pkfn),
+ gtid, tid, (int) team->t.t_argc, (void **) team->t.t_argv
+#if OMPT_SUPPORT
+ , exit_runtime_p
+#endif
+ );
+ }
+
+#if USE_ITT_BUILD
+ if ( __itt_stack_caller_create_ptr ) {
+ __kmp_itt_stack_callee_leave( (__itt_caller)team->t.t_stack_id ); // inform ittnotify about leaving user's code
+ }
+#endif /* USE_ITT_BUILD */
+ __kmp_run_after_invoked_task( gtid, tid, this_thr, team );
+
+ return rc;
+}
+
+#if OMP_40_ENABLED
+void
+__kmp_teams_master( int gtid )
+{
+ // This routine is called by all master threads in teams construct
+ kmp_info_t *thr = __kmp_threads[ gtid ];
+ kmp_team_t *team = thr->th.th_team;
+ ident_t *loc = team->t.t_ident;
+ thr->th.th_set_nproc = thr->th.th_teams_size.nth;
+ KMP_DEBUG_ASSERT( thr->th.th_teams_microtask );
+ KMP_DEBUG_ASSERT( thr->th.th_set_nproc );
+ KA_TRACE( 20, ("__kmp_teams_master: T#%d, Tid %d, microtask %p\n",
+ gtid, __kmp_tid_from_gtid( gtid ), thr->th.th_teams_microtask ) );
+ // Launch league of teams now, but not let workers execute
+ // (they hang on fork barrier until next parallel)
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_FORKING();
+#endif
+ __kmp_fork_call( loc, gtid, fork_context_intel,
+ team->t.t_argc,
+#if OMPT_SUPPORT
+ (void *)thr->th.th_teams_microtask, // "unwrapped" task
+#endif
+ (microtask_t)thr->th.th_teams_microtask, // "wrapped" task
+ VOLATILE_CAST(launch_t) __kmp_invoke_task_func,
+ NULL );
+#if INCLUDE_SSC_MARKS
+ SSC_MARK_JOINING();
+#endif
+
+ // AC: last parameter "1" eliminates join barrier which won't work because
+ // worker threads are in a fork barrier waiting for more parallel regions
+ __kmp_join_call( loc, gtid
+#if OMPT_SUPPORT
+ , fork_context_intel
+#endif
+ , 1 );
+}
+
+int
+__kmp_invoke_teams_master( int gtid )
+{
+ kmp_info_t *this_thr = __kmp_threads[ gtid ];
+ kmp_team_t *team = this_thr->th.th_team;
+ #if KMP_DEBUG
+ if ( !__kmp_threads[gtid]-> th.th_team->t.t_serialized )
+ KMP_DEBUG_ASSERT( (void*)__kmp_threads[gtid]-> th.th_team->t.t_pkfn == (void*)__kmp_teams_master );
+ #endif
+ __kmp_run_before_invoked_task( gtid, 0, this_thr, team );
+ __kmp_teams_master( gtid );
+ __kmp_run_after_invoked_task( gtid, 0, this_thr, team );
+ return 1;
+}
+#endif /* OMP_40_ENABLED */
+
+/* this sets the requested number of threads for the next parallel region
+ * encountered by this team */
+/* since this should be enclosed in the forkjoin critical section it
+ * should avoid race conditions with assymmetrical nested parallelism */
+
+void
+__kmp_push_num_threads( ident_t *id, int gtid, int num_threads )
+{
+ kmp_info_t *thr = __kmp_threads[gtid];
+
+ if( num_threads > 0 )
+ thr->th.th_set_nproc = num_threads;
+}
+
+#if OMP_40_ENABLED
+
+/* this sets the requested number of teams for the teams region and/or
+ * the number of threads for the next parallel region encountered */
+void
+__kmp_push_num_teams( ident_t *id, int gtid, int num_teams, int num_threads )
+{
+ kmp_info_t *thr = __kmp_threads[gtid];
+ KMP_DEBUG_ASSERT(num_teams >= 0);
+ KMP_DEBUG_ASSERT(num_threads >= 0);
+
+ if( num_teams == 0 )
+ num_teams = 1; // default number of teams is 1.
+ if( num_teams > __kmp_max_nth ) { // if too many teams requested?
+ if ( !__kmp_reserve_warn ) {
+ __kmp_reserve_warn = 1;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantFormThrTeam, num_teams, __kmp_max_nth ),
+ KMP_HNT( Unset_ALL_THREADS ),
+ __kmp_msg_null
+ );
+ }
+ num_teams = __kmp_max_nth;
+ }
+ // Set number of teams (number of threads in the outer "parallel" of the teams)
+ thr->th.th_set_nproc = thr->th.th_teams_size.nteams = num_teams;
+
+ // Remember the number of threads for inner parallel regions
+ if( num_threads == 0 ) {
+ if( !TCR_4(__kmp_init_middle) )
+ __kmp_middle_initialize(); // get __kmp_avail_proc calculated
+ num_threads = __kmp_avail_proc / num_teams;
+ if( num_teams * num_threads > __kmp_max_nth ) {
+ // adjust num_threads w/o warning as it is not user setting
+ num_threads = __kmp_max_nth / num_teams;
+ }
+ } else {
+ if( num_teams * num_threads > __kmp_max_nth ) {
+ int new_threads = __kmp_max_nth / num_teams;
+ if ( !__kmp_reserve_warn ) { // user asked for too many threads
+ __kmp_reserve_warn = 1; // that conflicts with OMP_THREAD_LIMIT
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantFormThrTeam, num_threads, new_threads ),
+ KMP_HNT( Unset_ALL_THREADS ),
+ __kmp_msg_null
+ );
+ }
+ num_threads = new_threads;
+ }
+ }
+ thr->th.th_teams_size.nth = num_threads;
+}
+
+
+//
+// Set the proc_bind var to use in the following parallel region.
+//
+void
+__kmp_push_proc_bind( ident_t *id, int gtid, kmp_proc_bind_t proc_bind )
+{
+ kmp_info_t *thr = __kmp_threads[gtid];
+ thr->th.th_set_proc_bind = proc_bind;
+}
+
+#endif /* OMP_40_ENABLED */
+
+/* Launch the worker threads into the microtask. */
+
+void
+__kmp_internal_fork( ident_t *id, int gtid, kmp_team_t *team )
+{
+ kmp_info_t *this_thr = __kmp_threads[gtid];
+
+#ifdef KMP_DEBUG
+ int f;
+#endif /* KMP_DEBUG */
+
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( this_thr->th.th_team == team );
+ KMP_ASSERT( KMP_MASTER_GTID(gtid) );
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ team->t.t_construct = 0; /* no single directives seen yet */
+ team->t.t_ordered.dt.t_value = 0; /* thread 0 enters the ordered section first */
+
+ /* Reset the identifiers on the dispatch buffer */
+ KMP_DEBUG_ASSERT( team->t.t_disp_buffer );
+ if ( team->t.t_max_nproc > 1 ) {
+ int i;
+ for (i = 0; i < __kmp_dispatch_num_buffers; ++i) {
+ team->t.t_disp_buffer[ i ].buffer_index = i;
+#if OMP_45_ENABLED
+ team->t.t_disp_buffer[i].doacross_buf_idx = i;
+#endif
+ }
+ } else {
+ team->t.t_disp_buffer[ 0 ].buffer_index = 0;
+#if OMP_45_ENABLED
+ team->t.t_disp_buffer[0].doacross_buf_idx = 0;
+#endif
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ KMP_ASSERT( this_thr->th.th_team == team );
+
+#ifdef KMP_DEBUG
+ for( f=0 ; f<team->t.t_nproc ; f++ ) {
+ KMP_DEBUG_ASSERT( team->t.t_threads[f] &&
+ team->t.t_threads[f]->th.th_team_nproc == team->t.t_nproc );
+ }
+#endif /* KMP_DEBUG */
+
+ /* release the worker threads so they may begin working */
+ __kmp_fork_barrier( gtid, 0 );
+}
+
+
+void
+__kmp_internal_join( ident_t *id, int gtid, kmp_team_t *team )
+{
+ kmp_info_t *this_thr = __kmp_threads[gtid];
+
+ KMP_DEBUG_ASSERT( team );
+ KMP_DEBUG_ASSERT( this_thr->th.th_team == team );
+ KMP_ASSERT( KMP_MASTER_GTID(gtid) );
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* Join barrier after fork */
+
+#ifdef KMP_DEBUG
+ if (__kmp_threads[gtid] && __kmp_threads[gtid]->th.th_team_nproc != team->t.t_nproc ) {
+ __kmp_printf("GTID: %d, __kmp_threads[%d]=%p\n",gtid, gtid, __kmp_threads[gtid]);
+ __kmp_printf("__kmp_threads[%d]->th.th_team_nproc=%d, TEAM: %p, team->t.t_nproc=%d\n",
+ gtid, __kmp_threads[gtid]->th.th_team_nproc, team, team->t.t_nproc);
+ __kmp_print_structure();
+ }
+ KMP_DEBUG_ASSERT( __kmp_threads[gtid] &&
+ __kmp_threads[gtid]->th.th_team_nproc == team->t.t_nproc );
+#endif /* KMP_DEBUG */
+
+ __kmp_join_barrier( gtid ); /* wait for everyone */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ KMP_ASSERT( this_thr->th.th_team == team );
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef USE_LOAD_BALANCE
+
+//
+// Return the worker threads actively spinning in the hot team, if we
+// are at the outermost level of parallelism. Otherwise, return 0.
+//
+static int
+__kmp_active_hot_team_nproc( kmp_root_t *root )
+{
+ int i;
+ int retval;
+ kmp_team_t *hot_team;
+
+ if ( root->r.r_active ) {
+ return 0;
+ }
+ hot_team = root->r.r_hot_team;
+ if ( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
+ return hot_team->t.t_nproc - 1; // Don't count master thread
+ }
+
+ //
+ // Skip the master thread - it is accounted for elsewhere.
+ //
+ retval = 0;
+ for ( i = 1; i < hot_team->t.t_nproc; i++ ) {
+ if ( hot_team->t.t_threads[i]->th.th_active ) {
+ retval++;
+ }
+ }
+ return retval;
+}
+
+//
+// Perform an automatic adjustment to the number of
+// threads used by the next parallel region.
+//
+static int
+__kmp_load_balance_nproc( kmp_root_t *root, int set_nproc )
+{
+ int retval;
+ int pool_active;
+ int hot_team_active;
+ int team_curr_active;
+ int system_active;
+
+ KB_TRACE( 20, ("__kmp_load_balance_nproc: called root:%p set_nproc:%d\n",
+ root, set_nproc ) );
+ KMP_DEBUG_ASSERT( root );
+ KMP_DEBUG_ASSERT( root->r.r_root_team->t.t_threads[0]->th.th_current_task->td_icvs.dynamic == TRUE );
+ KMP_DEBUG_ASSERT( set_nproc > 1 );
+
+ if ( set_nproc == 1) {
+ KB_TRACE( 20, ("__kmp_load_balance_nproc: serial execution.\n" ) );
+ return 1;
+ }
+
+ //
+ // Threads that are active in the thread pool, active in the hot team
+ // for this particular root (if we are at the outer par level), and
+ // the currently executing thread (to become the master) are available
+ // to add to the new team, but are currently contributing to the system
+ // load, and must be accounted for.
+ //
+ pool_active = TCR_4(__kmp_thread_pool_active_nth);
+ hot_team_active = __kmp_active_hot_team_nproc( root );
+ team_curr_active = pool_active + hot_team_active + 1;
+
+ //
+ // Check the system load.
+ //
+ system_active = __kmp_get_load_balance( __kmp_avail_proc + team_curr_active );
+ KB_TRACE( 30, ("__kmp_load_balance_nproc: system active = %d pool active = %d hot team active = %d\n",
+ system_active, pool_active, hot_team_active ) );
+
+ if ( system_active < 0 ) {
+ //
+ // There was an error reading the necessary info from /proc,
+ // so use the thread limit algorithm instead. Once we set
+ // __kmp_global.g.g_dynamic_mode = dynamic_thread_limit,
+ // we shouldn't wind up getting back here.
+ //
+ __kmp_global.g.g_dynamic_mode = dynamic_thread_limit;
+ KMP_WARNING( CantLoadBalUsing, "KMP_DYNAMIC_MODE=thread limit" );
+
+ //
+ // Make this call behave like the thread limit algorithm.
+ //
+ retval = __kmp_avail_proc - __kmp_nth + (root->r.r_active ? 1
+ : root->r.r_hot_team->t.t_nproc);
+ if ( retval > set_nproc ) {
+ retval = set_nproc;
+ }
+ if ( retval < KMP_MIN_NTH ) {
+ retval = KMP_MIN_NTH;
+ }
+
+ KB_TRACE( 20, ("__kmp_load_balance_nproc: thread limit exit. retval:%d\n", retval ) );
+ return retval;
+ }
+
+ //
+ // There is a slight delay in the load balance algorithm in detecting
+ // new running procs. The real system load at this instant should be
+ // at least as large as the #active omp thread that are available to
+ // add to the team.
+ //
+ if ( system_active < team_curr_active ) {
+ system_active = team_curr_active;
+ }
+ retval = __kmp_avail_proc - system_active + team_curr_active;
+ if ( retval > set_nproc ) {
+ retval = set_nproc;
+ }
+ if ( retval < KMP_MIN_NTH ) {
+ retval = KMP_MIN_NTH;
+ }
+
+ KB_TRACE( 20, ("__kmp_load_balance_nproc: exit. retval:%d\n", retval ) );
+ return retval;
+} // __kmp_load_balance_nproc()
+
+#endif /* USE_LOAD_BALANCE */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* NOTE: this is called with the __kmp_init_lock held */
+void
+__kmp_cleanup( void )
+{
+ int f;
+
+ KA_TRACE( 10, ("__kmp_cleanup: enter\n" ) );
+
+ if (TCR_4(__kmp_init_parallel)) {
+#if KMP_HANDLE_SIGNALS
+ __kmp_remove_signals();
+#endif
+ TCW_4(__kmp_init_parallel, FALSE);
+ }
+
+ if (TCR_4(__kmp_init_middle)) {
+#if KMP_AFFINITY_SUPPORTED
+ __kmp_affinity_uninitialize();
+#endif /* KMP_AFFINITY_SUPPORTED */
+ __kmp_cleanup_hierarchy();
+ TCW_4(__kmp_init_middle, FALSE);
+ }
+
+ KA_TRACE( 10, ("__kmp_cleanup: go serial cleanup\n" ) );
+
+ if (__kmp_init_serial) {
+ __kmp_runtime_destroy();
+ __kmp_init_serial = FALSE;
+ }
+
+ for ( f = 0; f < __kmp_threads_capacity; f++ ) {
+ if ( __kmp_root[ f ] != NULL ) {
+ __kmp_free( __kmp_root[ f ] );
+ __kmp_root[ f ] = NULL;
+ }
+ }
+ __kmp_free( __kmp_threads );
+ // __kmp_threads and __kmp_root were allocated at once, as single block, so there is no need in
+ // freeing __kmp_root.
+ __kmp_threads = NULL;
+ __kmp_root = NULL;
+ __kmp_threads_capacity = 0;
+
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_cleanup_indirect_user_locks();
+#else
+ __kmp_cleanup_user_locks();
+#endif
+
+ #if KMP_AFFINITY_SUPPORTED
+ KMP_INTERNAL_FREE( (void *) __kmp_cpuinfo_file );
+ __kmp_cpuinfo_file = NULL;
+ #endif /* KMP_AFFINITY_SUPPORTED */
+
+ #if KMP_USE_ADAPTIVE_LOCKS
+ #if KMP_DEBUG_ADAPTIVE_LOCKS
+ __kmp_print_speculative_stats();
+ #endif
+ #endif
+ KMP_INTERNAL_FREE( __kmp_nested_nth.nth );
+ __kmp_nested_nth.nth = NULL;
+ __kmp_nested_nth.size = 0;
+ __kmp_nested_nth.used = 0;
+
+ __kmp_i18n_catclose();
+
+#if KMP_STATS_ENABLED
+ __kmp_accumulate_stats_at_exit();
+ __kmp_stats_list.deallocate();
+#endif
+
+ KA_TRACE( 10, ("__kmp_cleanup: exit\n" ) );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+int
+__kmp_ignore_mppbeg( void )
+{
+ char *env;
+
+ if ((env = getenv( "KMP_IGNORE_MPPBEG" )) != NULL) {
+ if (__kmp_str_match_false( env ))
+ return FALSE;
+ }
+ // By default __kmpc_begin() is no-op.
+ return TRUE;
+}
+
+int
+__kmp_ignore_mppend( void )
+{
+ char *env;
+
+ if ((env = getenv( "KMP_IGNORE_MPPEND" )) != NULL) {
+ if (__kmp_str_match_false( env ))
+ return FALSE;
+ }
+ // By default __kmpc_end() is no-op.
+ return TRUE;
+}
+
+void
+__kmp_internal_begin( void )
+{
+ int gtid;
+ kmp_root_t *root;
+
+ /* this is a very important step as it will register new sibling threads
+ * and assign these new uber threads a new gtid */
+ gtid = __kmp_entry_gtid();
+ root = __kmp_threads[ gtid ]->th.th_root;
+ KMP_ASSERT( KMP_UBER_GTID( gtid ));
+
+ if( root->r.r_begin ) return;
+ __kmp_acquire_lock( &root->r.r_begin_lock, gtid );
+ if( root->r.r_begin ) {
+ __kmp_release_lock( & root->r.r_begin_lock, gtid );
+ return;
+ }
+
+ root->r.r_begin = TRUE;
+
+ __kmp_release_lock( & root->r.r_begin_lock, gtid );
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_user_set_library (enum library_type arg)
+{
+ int gtid;
+ kmp_root_t *root;
+ kmp_info_t *thread;
+
+ /* first, make sure we are initialized so we can get our gtid */
+
+ gtid = __kmp_entry_gtid();
+ thread = __kmp_threads[ gtid ];
+
+ root = thread->th.th_root;
+
+ KA_TRACE( 20, ("__kmp_user_set_library: enter T#%d, arg: %d, %d\n", gtid, arg, library_serial ));
+ if (root->r.r_in_parallel) { /* Must be called in serial section of top-level thread */
+ KMP_WARNING( SetLibraryIncorrectCall );
+ return;
+ }
+
+ switch ( arg ) {
+ case library_serial :
+ thread->th.th_set_nproc = 0;
+ set__nproc( thread, 1 );
+ break;
+ case library_turnaround :
+ thread->th.th_set_nproc = 0;
+ set__nproc( thread, __kmp_dflt_team_nth ? __kmp_dflt_team_nth : __kmp_dflt_team_nth_ub );
+ break;
+ case library_throughput :
+ thread->th.th_set_nproc = 0;
+ set__nproc( thread, __kmp_dflt_team_nth ? __kmp_dflt_team_nth : __kmp_dflt_team_nth_ub );
+ break;
+ default:
+ KMP_FATAL( UnknownLibraryType, arg );
+ }
+
+ __kmp_aux_set_library ( arg );
+}
+
+void
+__kmp_aux_set_stacksize( size_t arg )
+{
+ if (! __kmp_init_serial)
+ __kmp_serial_initialize();
+
+#if KMP_OS_DARWIN
+ if (arg & (0x1000 - 1)) {
+ arg &= ~(0x1000 - 1);
+ if(arg + 0x1000) /* check for overflow if we round up */
+ arg += 0x1000;
+ }
+#endif
+ __kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
+
+ /* only change the default stacksize before the first parallel region */
+ if (! TCR_4(__kmp_init_parallel)) {
+ size_t value = arg; /* argument is in bytes */
+
+ if (value < __kmp_sys_min_stksize )
+ value = __kmp_sys_min_stksize ;
+ else if (value > KMP_MAX_STKSIZE)
+ value = KMP_MAX_STKSIZE;
+
+ __kmp_stksize = value;
+
+ __kmp_env_stksize = TRUE; /* was KMP_STACKSIZE specified? */
+ }
+
+ __kmp_release_bootstrap_lock( &__kmp_initz_lock );
+}
+
+/* set the behaviour of the runtime library */
+/* TODO this can cause some odd behaviour with sibling parallelism... */
+void
+__kmp_aux_set_library (enum library_type arg)
+{
+ __kmp_library = arg;
+
+ switch ( __kmp_library ) {
+ case library_serial :
+ {
+ KMP_INFORM( LibraryIsSerial );
+ (void) __kmp_change_library( TRUE );
+ }
+ break;
+ case library_turnaround :
+ (void) __kmp_change_library( TRUE );
+ break;
+ case library_throughput :
+ (void) __kmp_change_library( FALSE );
+ break;
+ default:
+ KMP_FATAL( UnknownLibraryType, arg );
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_aux_set_blocktime (int arg, kmp_info_t *thread, int tid)
+{
+ int blocktime = arg; /* argument is in milliseconds */
+ int bt_intervals;
+ int bt_set;
+
+ __kmp_save_internal_controls( thread );
+
+ /* Normalize and set blocktime for the teams */
+ if (blocktime < KMP_MIN_BLOCKTIME)
+ blocktime = KMP_MIN_BLOCKTIME;
+ else if (blocktime > KMP_MAX_BLOCKTIME)
+ blocktime = KMP_MAX_BLOCKTIME;
+
+ set__blocktime_team( thread->th.th_team, tid, blocktime );
+ set__blocktime_team( thread->th.th_serial_team, 0, blocktime );
+
+ /* Calculate and set blocktime intervals for the teams */
+ bt_intervals = KMP_INTERVALS_FROM_BLOCKTIME(blocktime, __kmp_monitor_wakeups);
+
+ set__bt_intervals_team( thread->th.th_team, tid, bt_intervals );
+ set__bt_intervals_team( thread->th.th_serial_team, 0, bt_intervals );
+
+ /* Set whether blocktime has been set to "TRUE" */
+ bt_set = TRUE;
+
+ set__bt_set_team( thread->th.th_team, tid, bt_set );
+ set__bt_set_team( thread->th.th_serial_team, 0, bt_set );
+ KF_TRACE(10, ( "kmp_set_blocktime: T#%d(%d:%d), blocktime=%d, bt_intervals=%d, monitor_updates=%d\n",
+ __kmp_gtid_from_tid(tid, thread->th.th_team),
+ thread->th.th_team->t.t_id, tid, blocktime, bt_intervals, __kmp_monitor_wakeups ) );
+}
+
+void
+__kmp_aux_set_defaults(
+ char const * str,
+ int len
+) {
+ if ( ! __kmp_init_serial ) {
+ __kmp_serial_initialize();
+ };
+ __kmp_env_initialize( str );
+
+ if (__kmp_settings
+#if OMP_40_ENABLED
+ || __kmp_display_env || __kmp_display_env_verbose
+#endif // OMP_40_ENABLED
+ ) {
+ __kmp_env_print();
+ }
+} // __kmp_aux_set_defaults
+
+/* ------------------------------------------------------------------------ */
+
+/*
+ * internal fast reduction routines
+ */
+
+PACKED_REDUCTION_METHOD_T
+__kmp_determine_reduction_method( ident_t *loc, kmp_int32 global_tid,
+ kmp_int32 num_vars, size_t reduce_size, void *reduce_data, void (*reduce_func)(void *lhs_data, void *rhs_data),
+ kmp_critical_name *lck )
+{
+
+ // Default reduction method: critical construct ( lck != NULL, like in current PAROPT )
+ // If ( reduce_data!=NULL && reduce_func!=NULL ): the tree-reduction method can be selected by RTL
+ // If loc->flags contains KMP_IDENT_ATOMIC_REDUCE, the atomic reduce method can be selected by RTL
+ // Finally, it's up to OpenMP RTL to make a decision on which method to select among generated by PAROPT.
+
+ PACKED_REDUCTION_METHOD_T retval;
+
+ int team_size;
+
+ KMP_DEBUG_ASSERT( loc ); // it would be nice to test ( loc != 0 )
+ KMP_DEBUG_ASSERT( lck ); // it would be nice to test ( lck != 0 )
+
+ #define FAST_REDUCTION_ATOMIC_METHOD_GENERATED ( ( loc->flags & ( KMP_IDENT_ATOMIC_REDUCE ) ) == ( KMP_IDENT_ATOMIC_REDUCE ) )
+ #define FAST_REDUCTION_TREE_METHOD_GENERATED ( ( reduce_data ) && ( reduce_func ) )
+
+ retval = critical_reduce_block;
+
+ team_size = __kmp_get_team_num_threads( global_tid ); // another choice of getting a team size ( with 1 dynamic deference ) is slower
+
+ if( team_size == 1 ) {
+
+ retval = empty_reduce_block;
+
+ } else {
+
+ int atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
+ int tree_available = FAST_REDUCTION_TREE_METHOD_GENERATED;
+
+ #if KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
+
+ #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN
+
+ int teamsize_cutoff = 4;
+
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic ) {
+ teamsize_cutoff = 8;
+ }
+#endif
+ if( tree_available ) {
+ if( team_size <= teamsize_cutoff ) {
+ if ( atomic_available ) {
+ retval = atomic_reduce_block;
+ }
+ } else {
+ retval = TREE_REDUCE_BLOCK_WITH_REDUCTION_BARRIER;
+ }
+ } else if ( atomic_available ) {
+ retval = atomic_reduce_block;
+ }
+ #else
+ #error "Unknown or unsupported OS"
+ #endif // KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN
+
+ #elif KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_AARCH
+
+ #if KMP_OS_LINUX || KMP_OS_WINDOWS
+
+ // basic tuning
+
+ if( atomic_available ) {
+ if( num_vars <= 2 ) { // && ( team_size <= 8 ) due to false-sharing ???
+ retval = atomic_reduce_block;
+ }
+ } // otherwise: use critical section
+
+ #elif KMP_OS_DARWIN
+
+ if( atomic_available && ( num_vars <= 3 ) ) {
+ retval = atomic_reduce_block;
+ } else if( tree_available ) {
+ if( ( reduce_size > ( 9 * sizeof( kmp_real64 ) ) ) && ( reduce_size < ( 2000 * sizeof( kmp_real64 ) ) ) ) {
+ retval = TREE_REDUCE_BLOCK_WITH_PLAIN_BARRIER;
+ }
+ } // otherwise: use critical section
+
+ #else
+ #error "Unknown or unsupported OS"
+ #endif
+
+ #else
+ #error "Unknown or unsupported architecture"
+ #endif
+
+ }
+
+ // KMP_FORCE_REDUCTION
+
+ // If the team is serialized (team_size == 1), ignore the forced reduction
+ // method and stay with the unsynchronized method (empty_reduce_block)
+ if( __kmp_force_reduction_method != reduction_method_not_defined && team_size != 1) {
+
+ PACKED_REDUCTION_METHOD_T forced_retval;
+
+ int atomic_available, tree_available;
+
+ switch( ( forced_retval = __kmp_force_reduction_method ) )
+ {
+ case critical_reduce_block:
+ KMP_ASSERT( lck ); // lck should be != 0
+ break;
+
+ case atomic_reduce_block:
+ atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
+ KMP_ASSERT( atomic_available ); // atomic_available should be != 0
+ break;
+
+ case tree_reduce_block:
+ tree_available = FAST_REDUCTION_TREE_METHOD_GENERATED;
+ KMP_ASSERT( tree_available ); // tree_available should be != 0
+ #if KMP_FAST_REDUCTION_BARRIER
+ forced_retval = TREE_REDUCE_BLOCK_WITH_REDUCTION_BARRIER;
+ #endif
+ break;
+
+ default:
+ KMP_ASSERT( 0 ); // "unsupported method specified"
+ }
+
+ retval = forced_retval;
+ }
+
+ KA_TRACE(10, ( "reduction method selected=%08x\n", retval ) );
+
+ #undef FAST_REDUCTION_TREE_METHOD_GENERATED
+ #undef FAST_REDUCTION_ATOMIC_METHOD_GENERATED
+
+ return ( retval );
+}
+
+// this function is for testing set/get/determine reduce method
+kmp_int32
+__kmp_get_reduce_method( void ) {
+ return ( ( __kmp_entry_thread()->th.th_local.packed_reduction_method ) >> 8 );
+}
+
+/* ------------------------------------------------------------------------ */
diff --git a/final/runtime/src/kmp_safe_c_api.h b/final/runtime/src/kmp_safe_c_api.h
new file mode 100644
index 0000000..1feaf8c
--- /dev/null
+++ b/final/runtime/src/kmp_safe_c_api.h
@@ -0,0 +1,62 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_SAFE_C_API_H
+#define KMP_SAFE_C_API_H
+
+//
+// Replacement for banned C API
+//
+
+// Not every unsafe call listed here is handled now, but keeping everything
+// in one place should be handy for future maintenance.
+#if KMP_OS_WINDOWS
+
+# define RSIZE_MAX_STR ( 4UL << 10 ) // 4KB
+
+// _malloca was suggested, but it is not a drop-in replacement for _alloca
+# define KMP_ALLOCA _alloca
+
+# define KMP_MEMCPY_S memcpy_s
+# define KMP_SNPRINTF sprintf_s
+# define KMP_SSCANF sscanf_s
+# define KMP_STRCPY_S strcpy_s
+# define KMP_STRNCPY_S strncpy_s
+
+// Use this only when buffer size is unknown
+# define KMP_MEMCPY(dst, src, cnt) memcpy_s(dst, cnt, src, cnt)
+
+# define KMP_STRLEN(str) strnlen_s(str, RSIZE_MAX_STR)
+
+// Use this only when buffer size is unknown
+# define KMP_STRNCPY(dst, src, cnt) strncpy_s(dst, cnt, src, cnt)
+
+// _TRUNCATE insures buffer size > max string to print.
+# define KMP_VSNPRINTF(dst, cnt, fmt, arg) vsnprintf_s(dst, cnt, _TRUNCATE, fmt, arg)
+
+#else // KMP_OS_WINDOWS
+
+// For now, these macros use the existing API.
+
+# define KMP_ALLOCA alloca
+# define KMP_MEMCPY_S(dst, bsz, src, cnt) memcpy(dst, src, cnt)
+# define KMP_SNPRINTF snprintf
+# define KMP_SSCANF sscanf
+# define KMP_STRCPY_S(dst, bsz, src) strcpy(dst, src)
+# define KMP_STRNCPY_S(dst, bsz, src, cnt) strncpy(dst, src, cnt)
+# define KMP_VSNPRINTF vsnprintf
+# define KMP_STRNCPY strncpy
+# define KMP_STRLEN strlen
+# define KMP_MEMCPY memcpy
+
+#endif // KMP_OS_WINDOWS
+
+#endif // KMP_SAFE_C_API_H
diff --git a/final/runtime/src/kmp_sched.cpp b/final/runtime/src/kmp_sched.cpp
new file mode 100644
index 0000000..b6f3081
--- /dev/null
+++ b/final/runtime/src/kmp_sched.cpp
@@ -0,0 +1,974 @@
+/*
+ * kmp_sched.c -- static scheduling -- iteration initialization
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+/*
+ * Static scheduling initialization.
+ *
+ * NOTE: team->t.t_nproc is a constant inside of any dispatch loop, however
+ * it may change values between parallel regions. __kmp_max_nth
+ * is the largest value __kmp_nth may take, 1 is the smallest.
+ *
+ */
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_str.h"
+#include "kmp_error.h"
+#include "kmp_stats.h"
+#include "kmp_itt.h"
+
+#if OMPT_SUPPORT
+#include "ompt-specific.h"
+#endif
+
+// template for type limits
+template< typename T >
+struct i_maxmin {
+ static const T mx;
+ static const T mn;
+};
+template<>
+struct i_maxmin< int > {
+ static const int mx = 0x7fffffff;
+ static const int mn = 0x80000000;
+};
+template<>
+struct i_maxmin< unsigned int > {
+ static const unsigned int mx = 0xffffffff;
+ static const unsigned int mn = 0x00000000;
+};
+template<>
+struct i_maxmin< long long > {
+ static const long long mx = 0x7fffffffffffffffLL;
+ static const long long mn = 0x8000000000000000LL;
+};
+template<>
+struct i_maxmin< unsigned long long > {
+ static const unsigned long long mx = 0xffffffffffffffffLL;
+ static const unsigned long long mn = 0x0000000000000000LL;
+};
+//-------------------------------------------------------------------------
+#ifdef KMP_DEBUG
+//-------------------------------------------------------------------------
+// template for debug prints specification ( d, u, lld, llu )
+ char const * traits_t< int >::spec = "d";
+ char const * traits_t< unsigned int >::spec = "u";
+ char const * traits_t< long long >::spec = "lld";
+ char const * traits_t< unsigned long long >::spec = "llu";
+//-------------------------------------------------------------------------
+#endif
+
+template< typename T >
+static void
+__kmp_for_static_init(
+ ident_t *loc,
+ kmp_int32 global_tid,
+ kmp_int32 schedtype,
+ kmp_int32 *plastiter,
+ T *plower,
+ T *pupper,
+ typename traits_t< T >::signed_t *pstride,
+ typename traits_t< T >::signed_t incr,
+ typename traits_t< T >::signed_t chunk
+) {
+ KMP_COUNT_BLOCK(OMP_FOR_static);
+ KMP_TIME_PARTITIONED_BLOCK(FOR_static_scheduling);
+
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ /* this all has to be changed back to TID and such.. */
+ register kmp_int32 gtid = global_tid;
+ register kmp_uint32 tid;
+ register kmp_uint32 nth;
+ register UT trip_count;
+ register kmp_team_t *team;
+ register kmp_info_t *th = __kmp_threads[ gtid ];
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ ompt_team_info_t *team_info = NULL;
+ ompt_task_info_t *task_info = NULL;
+
+ if (ompt_enabled) {
+ // Only fully initialize variables needed by OMPT if OMPT is enabled.
+ team_info = __ompt_get_teaminfo(0, NULL);
+ task_info = __ompt_get_taskinfo(0);
+ }
+#endif
+
+ KMP_DEBUG_ASSERT( plastiter && plower && pupper && pstride );
+ KE_TRACE( 10, ("__kmpc_for_static_init called (%d)\n", global_tid));
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_for_static_init: T#%%d sched=%%d liter=%%d iter=(%%%s," \
+ " %%%s, %%%s) incr=%%%s chunk=%%%s signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec,
+ traits_t< ST >::spec, traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, global_tid, schedtype, *plastiter,
+ *plower, *pupper, *pstride, incr, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ if ( __kmp_env_consistency_check ) {
+ __kmp_push_workshare( global_tid, ct_pdo, loc );
+ if ( incr == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrZeroProhibited, ct_pdo, loc );
+ }
+ }
+ /* special handling for zero-trip loops */
+ if ( incr > 0 ? (*pupper < *plower) : (*plower < *pupper) ) {
+ if( plastiter != NULL )
+ *plastiter = FALSE;
+ /* leave pupper and plower set to entire iteration space */
+ *pstride = incr; /* value should never be used */
+ // *plower = *pupper - incr; // let compiler bypass the illegal loop (like for(i=1;i<10;i--)) THIS LINE CAUSED shape2F/h_tests_1.f TO HAVE A FAILURE ON A ZERO-TRIP LOOP (lower=1,\
+ upper=0,stride=1) - JPH June 23, 2009.
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_for_static_init:(ZERO TRIP) liter=%%d lower=%%%s upper=%%%s stride = %%%s signed?<%s>, loc = %%s\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, *plastiter, *plower, *pupper, *pstride, loc->psource ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ KE_TRACE( 10, ("__kmpc_for_static_init: T#%d return\n", global_tid ) );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)(
+ team_info->parallel_id, task_info->task_id,
+ team_info->microtask);
+ }
+#endif
+ KMP_COUNT_VALUE (FOR_static_iterations, 0);
+ return;
+ }
+
+ #if OMP_40_ENABLED
+ // Although there are schedule enumerations above kmp_ord_upper which are not schedules for "distribute",
+ // the only ones which are useful are dynamic, so cannot be seen here, since this codepath is only executed
+ // for static schedules.
+ if ( schedtype > kmp_ord_upper ) {
+ // we are in DISTRIBUTE construct
+ schedtype += kmp_sch_static - kmp_distribute_static; // AC: convert to usual schedule type
+ tid = th->th.th_team->t.t_master_tid;
+ team = th->th.th_team->t.t_parent;
+ } else
+ #endif
+ {
+ tid = __kmp_tid_from_gtid( global_tid );
+ team = th->th.th_team;
+ }
+
+ /* determine if "for" loop is an active worksharing construct */
+ if ( team -> t.t_serialized ) {
+ /* serialized parallel, each thread executes whole iteration space */
+ if( plastiter != NULL )
+ *plastiter = TRUE;
+ /* leave pupper and plower set to entire iteration space */
+ *pstride = (incr > 0) ? (*pupper - *plower + 1) : (-(*plower - *pupper + 1));
+
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_for_static_init: (serial) liter=%%d lower=%%%s upper=%%%s stride = %%%s\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(100, ( buff, *plastiter, *plower, *pupper, *pstride ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ KE_TRACE( 10, ("__kmpc_for_static_init: T#%d return\n", global_tid ) );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)(
+ team_info->parallel_id, task_info->task_id,
+ team_info->microtask);
+ }
+#endif
+ return;
+ }
+ nth = team->t.t_nproc;
+ if ( nth == 1 ) {
+ if( plastiter != NULL )
+ *plastiter = TRUE;
+ *pstride = (incr > 0) ? (*pupper - *plower + 1) : (-(*plower - *pupper + 1));
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_for_static_init: (serial) liter=%%d lower=%%%s upper=%%%s stride = %%%s\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec );
+ KD_TRACE(100, ( buff, *plastiter, *plower, *pupper, *pstride ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ KE_TRACE( 10, ("__kmpc_for_static_init: T#%d return\n", global_tid ) );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)(
+ team_info->parallel_id, task_info->task_id,
+ team_info->microtask);
+ }
+#endif
+ return;
+ }
+
+ /* compute trip count */
+ if ( incr == 1 ) {
+ trip_count = *pupper - *plower + 1;
+ } else if (incr == -1) {
+ trip_count = *plower - *pupper + 1;
+ } else if ( incr > 0 ) {
+ // upper-lower can exceed the limit of signed type
+ trip_count = (UT)(*pupper - *plower) / incr + 1;
+ } else {
+ trip_count = (UT)(*plower - *pupper) / (-incr) + 1;
+ }
+
+ if ( __kmp_env_consistency_check ) {
+ /* tripcount overflow? */
+ if ( trip_count == 0 && *pupper != *plower ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsIterationRangeTooLarge, ct_pdo, loc );
+ }
+ }
+ KMP_COUNT_VALUE (FOR_static_iterations, trip_count);
+
+ /* compute remaining parameters */
+ switch ( schedtype ) {
+ case kmp_sch_static:
+ {
+ if ( trip_count < nth ) {
+ KMP_DEBUG_ASSERT(
+ __kmp_static == kmp_sch_static_greedy || \
+ __kmp_static == kmp_sch_static_balanced
+ ); // Unknown static scheduling type.
+ if ( tid < trip_count ) {
+ *pupper = *plower = *plower + tid * incr;
+ } else {
+ *plower = *pupper + incr;
+ }
+ if( plastiter != NULL )
+ *plastiter = ( tid == trip_count - 1 );
+ } else {
+ if ( __kmp_static == kmp_sch_static_balanced ) {
+ register UT small_chunk = trip_count / nth;
+ register UT extras = trip_count % nth;
+ *plower += incr * ( tid * small_chunk + ( tid < extras ? tid : extras ) );
+ *pupper = *plower + small_chunk * incr - ( tid < extras ? 0 : incr );
+ if( plastiter != NULL )
+ *plastiter = ( tid == nth - 1 );
+ } else {
+ register T big_chunk_inc_count = ( trip_count/nth +
+ ( ( trip_count % nth ) ? 1 : 0) ) * incr;
+ register T old_upper = *pupper;
+
+ KMP_DEBUG_ASSERT( __kmp_static == kmp_sch_static_greedy );
+ // Unknown static scheduling type.
+
+ *plower += tid * big_chunk_inc_count;
+ *pupper = *plower + big_chunk_inc_count - incr;
+ if ( incr > 0 ) {
+ if( *pupper < *plower )
+ *pupper = i_maxmin< T >::mx;
+ if( plastiter != NULL )
+ *plastiter = *plower <= old_upper && *pupper > old_upper - incr;
+ if ( *pupper > old_upper ) *pupper = old_upper; // tracker C73258
+ } else {
+ if( *pupper > *plower )
+ *pupper = i_maxmin< T >::mn;
+ if( plastiter != NULL )
+ *plastiter = *plower >= old_upper && *pupper < old_upper - incr;
+ if ( *pupper < old_upper ) *pupper = old_upper; // tracker C73258
+ }
+ }
+ }
+ break;
+ }
+ case kmp_sch_static_chunked:
+ {
+ register ST span;
+ if ( chunk < 1 ) {
+ chunk = 1;
+ }
+ span = chunk * incr;
+ *pstride = span * nth;
+ *plower = *plower + (span * tid);
+ *pupper = *plower + span - incr;
+ if( plastiter != NULL )
+ *plastiter = (tid == ((trip_count - 1)/( UT )chunk) % nth);
+ break;
+ }
+#if OMP_45_ENABLED
+ case kmp_sch_static_balanced_chunked:
+ {
+ register T old_upper = *pupper;
+ // round up to make sure the chunk is enough to cover all iterations
+ register UT span = (trip_count+nth-1) / nth;
+
+ // perform chunk adjustment
+ chunk = (span + chunk - 1) & ~(chunk-1);
+
+ span = chunk * incr;
+ *plower = *plower + (span * tid);
+ *pupper = *plower + span - incr;
+ if ( incr > 0 ) {
+ if ( *pupper > old_upper ) *pupper = old_upper;
+ } else
+ if ( *pupper < old_upper ) *pupper = old_upper;
+
+ if( plastiter != NULL )
+ *plastiter = ( tid == ((trip_count - 1)/( UT )chunk) );
+ break;
+ }
+#endif
+ default:
+ KMP_ASSERT2( 0, "__kmpc_for_static_init: unknown scheduling type" );
+ break;
+ }
+
+#if USE_ITT_BUILD
+ // Report loop metadata
+ if ( KMP_MASTER_TID(tid) && __itt_metadata_add_ptr && __kmp_forkjoin_frames_mode == 3 &&
+#if OMP_40_ENABLED
+ th->th.th_teams_microtask == NULL &&
+#endif
+ team->t.t_active_level == 1 )
+ {
+ kmp_uint64 cur_chunk = chunk;
+ // Calculate chunk in case it was not specified; it is specified for kmp_sch_static_chunked
+ if ( schedtype == kmp_sch_static ) {
+ cur_chunk = trip_count / nth + ( ( trip_count % nth ) ? 1 : 0);
+ }
+ // 0 - "static" schedule
+ __kmp_itt_metadata_loop(loc, 0, trip_count, cur_chunk);
+ }
+#endif
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_for_static_init: liter=%%d lower=%%%s upper=%%%s stride = %%%s signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, *plastiter, *plower, *pupper, *pstride ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ KE_TRACE( 10, ("__kmpc_for_static_init: T#%d return\n", global_tid ) );
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_loop_begin)(
+ team_info->parallel_id, task_info->task_id, team_info->microtask);
+ }
+#endif
+
+ return;
+}
+
+template< typename T >
+static void
+__kmp_dist_for_static_init(
+ ident_t *loc,
+ kmp_int32 gtid,
+ kmp_int32 schedule,
+ kmp_int32 *plastiter,
+ T *plower,
+ T *pupper,
+ T *pupperDist,
+ typename traits_t< T >::signed_t *pstride,
+ typename traits_t< T >::signed_t incr,
+ typename traits_t< T >::signed_t chunk
+) {
+ KMP_COUNT_BLOCK(OMP_DISTRIBUTE);
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ register kmp_uint32 tid;
+ register kmp_uint32 nth;
+ register kmp_uint32 team_id;
+ register kmp_uint32 nteams;
+ register UT trip_count;
+ register kmp_team_t *team;
+ kmp_info_t * th;
+
+ KMP_DEBUG_ASSERT( plastiter && plower && pupper && pupperDist && pstride );
+ KE_TRACE( 10, ("__kmpc_dist_for_static_init called (%d)\n", gtid));
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_dist_for_static_init: T#%%d schedLoop=%%d liter=%%d "\
+ "iter=(%%%s, %%%s, %%%s) chunk=%%%s signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec,
+ traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, gtid, schedule, *plastiter,
+ *plower, *pupper, incr, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ if( __kmp_env_consistency_check ) {
+ __kmp_push_workshare( gtid, ct_pdo, loc );
+ if( incr == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrZeroProhibited, ct_pdo, loc );
+ }
+ if( incr > 0 ? (*pupper < *plower) : (*plower < *pupper) ) {
+ // The loop is illegal.
+ // Some zero-trip loops maintained by compiler, e.g.:
+ // for(i=10;i<0;++i) // lower >= upper - run-time check
+ // for(i=0;i>10;--i) // lower <= upper - run-time check
+ // for(i=0;i>10;++i) // incr > 0 - compile-time check
+ // for(i=10;i<0;--i) // incr < 0 - compile-time check
+ // Compiler does not check the following illegal loops:
+ // for(i=0;i<10;i+=incr) // where incr<0
+ // for(i=10;i>0;i-=incr) // where incr<0
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrIllegal, ct_pdo, loc );
+ }
+ }
+ tid = __kmp_tid_from_gtid( gtid );
+ th = __kmp_threads[gtid];
+ nth = th->th.th_team_nproc;
+ team = th->th.th_team;
+ #if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT(th->th.th_teams_microtask); // we are in the teams construct
+ nteams = th->th.th_teams_size.nteams;
+ #endif
+ team_id = team->t.t_master_tid;
+ KMP_DEBUG_ASSERT(nteams == team->t.t_parent->t.t_nproc);
+
+ // compute global trip count
+ if( incr == 1 ) {
+ trip_count = *pupper - *plower + 1;
+ } else if(incr == -1) {
+ trip_count = *plower - *pupper + 1;
+ } else if ( incr > 0 ) {
+ // upper-lower can exceed the limit of signed type
+ trip_count = (UT)(*pupper - *plower) / incr + 1;
+ } else {
+ trip_count = (UT)(*plower - *pupper) / (-incr) + 1;
+ }
+
+ *pstride = *pupper - *plower; // just in case (can be unused)
+ if( trip_count <= nteams ) {
+ KMP_DEBUG_ASSERT(
+ __kmp_static == kmp_sch_static_greedy || \
+ __kmp_static == kmp_sch_static_balanced
+ ); // Unknown static scheduling type.
+ // only masters of some teams get single iteration, other threads get nothing
+ if( team_id < trip_count && tid == 0 ) {
+ *pupper = *pupperDist = *plower = *plower + team_id * incr;
+ } else {
+ *pupperDist = *pupper;
+ *plower = *pupper + incr; // compiler should skip loop body
+ }
+ if( plastiter != NULL )
+ *plastiter = ( tid == 0 && team_id == trip_count - 1 );
+ } else {
+ // Get the team's chunk first (each team gets at most one chunk)
+ if( __kmp_static == kmp_sch_static_balanced ) {
+ register UT chunkD = trip_count / nteams;
+ register UT extras = trip_count % nteams;
+ *plower += incr * ( team_id * chunkD + ( team_id < extras ? team_id : extras ) );
+ *pupperDist = *plower + chunkD * incr - ( team_id < extras ? 0 : incr );
+ if( plastiter != NULL )
+ *plastiter = ( team_id == nteams - 1 );
+ } else {
+ register T chunk_inc_count =
+ ( trip_count / nteams + ( ( trip_count % nteams ) ? 1 : 0) ) * incr;
+ register T upper = *pupper;
+ KMP_DEBUG_ASSERT( __kmp_static == kmp_sch_static_greedy );
+ // Unknown static scheduling type.
+ *plower += team_id * chunk_inc_count;
+ *pupperDist = *plower + chunk_inc_count - incr;
+ // Check/correct bounds if needed
+ if( incr > 0 ) {
+ if( *pupperDist < *plower )
+ *pupperDist = i_maxmin< T >::mx;
+ if( plastiter != NULL )
+ *plastiter = *plower <= upper && *pupperDist > upper - incr;
+ if( *pupperDist > upper )
+ *pupperDist = upper; // tracker C73258
+ if( *plower > *pupperDist ) {
+ *pupper = *pupperDist; // no iterations available for the team
+ goto end;
+ }
+ } else {
+ if( *pupperDist > *plower )
+ *pupperDist = i_maxmin< T >::mn;
+ if( plastiter != NULL )
+ *plastiter = *plower >= upper && *pupperDist < upper - incr;
+ if( *pupperDist < upper )
+ *pupperDist = upper; // tracker C73258
+ if( *plower < *pupperDist ) {
+ *pupper = *pupperDist; // no iterations available for the team
+ goto end;
+ }
+ }
+ }
+ // Get the parallel loop chunk now (for thread)
+ // compute trip count for team's chunk
+ if( incr == 1 ) {
+ trip_count = *pupperDist - *plower + 1;
+ } else if(incr == -1) {
+ trip_count = *plower - *pupperDist + 1;
+ } else if ( incr > 1 ) {
+ // upper-lower can exceed the limit of signed type
+ trip_count = (UT)(*pupperDist - *plower) / incr + 1;
+ } else {
+ trip_count = (UT)(*plower - *pupperDist) / (-incr) + 1;
+ }
+ KMP_DEBUG_ASSERT( trip_count );
+ switch( schedule ) {
+ case kmp_sch_static:
+ {
+ if( trip_count <= nth ) {
+ KMP_DEBUG_ASSERT(
+ __kmp_static == kmp_sch_static_greedy || \
+ __kmp_static == kmp_sch_static_balanced
+ ); // Unknown static scheduling type.
+ if( tid < trip_count )
+ *pupper = *plower = *plower + tid * incr;
+ else
+ *plower = *pupper + incr; // no iterations available
+ if( plastiter != NULL )
+ if( *plastiter != 0 && !( tid == trip_count - 1 ) )
+ *plastiter = 0;
+ } else {
+ if( __kmp_static == kmp_sch_static_balanced ) {
+ register UT chunkL = trip_count / nth;
+ register UT extras = trip_count % nth;
+ *plower += incr * (tid * chunkL + (tid < extras ? tid : extras));
+ *pupper = *plower + chunkL * incr - (tid < extras ? 0 : incr);
+ if( plastiter != NULL )
+ if( *plastiter != 0 && !( tid == nth - 1 ) )
+ *plastiter = 0;
+ } else {
+ register T chunk_inc_count =
+ ( trip_count / nth + ( ( trip_count % nth ) ? 1 : 0) ) * incr;
+ register T upper = *pupperDist;
+ KMP_DEBUG_ASSERT( __kmp_static == kmp_sch_static_greedy );
+ // Unknown static scheduling type.
+ *plower += tid * chunk_inc_count;
+ *pupper = *plower + chunk_inc_count - incr;
+ if( incr > 0 ) {
+ if( *pupper < *plower )
+ *pupper = i_maxmin< T >::mx;
+ if( plastiter != NULL )
+ if( *plastiter != 0 && !(*plower <= upper && *pupper > upper - incr) )
+ *plastiter = 0;
+ if( *pupper > upper )
+ *pupper = upper;//tracker C73258
+ } else {
+ if( *pupper > *plower )
+ *pupper = i_maxmin< T >::mn;
+ if( plastiter != NULL )
+ if( *plastiter != 0 && !(*plower >= upper && *pupper < upper - incr) )
+ *plastiter = 0;
+ if( *pupper < upper )
+ *pupper = upper;//tracker C73258
+ }
+ }
+ }
+ break;
+ }
+ case kmp_sch_static_chunked:
+ {
+ register ST span;
+ if( chunk < 1 )
+ chunk = 1;
+ span = chunk * incr;
+ *pstride = span * nth;
+ *plower = *plower + (span * tid);
+ *pupper = *plower + span - incr;
+ if( plastiter != NULL )
+ if( *plastiter != 0 && !(tid == ((trip_count - 1) / ( UT )chunk) % nth) )
+ *plastiter = 0;
+ break;
+ }
+ default:
+ KMP_ASSERT2( 0, "__kmpc_dist_for_static_init: unknown loop scheduling type" );
+ break;
+ }
+ }
+ end:;
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format(
+ "__kmpc_dist_for_static_init: last=%%d lo=%%%s up=%%%s upDist=%%%s "\
+ "stride=%%%s signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< T >::spec,
+ traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, *plastiter, *plower, *pupper, *pupperDist, *pstride ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+ KE_TRACE( 10, ("__kmpc_dist_for_static_init: T#%d return\n", gtid ) );
+ return;
+}
+
+template< typename T >
+static void
+__kmp_team_static_init(
+ ident_t *loc,
+ kmp_int32 gtid,
+ kmp_int32 *p_last,
+ T *p_lb,
+ T *p_ub,
+ typename traits_t< T >::signed_t *p_st,
+ typename traits_t< T >::signed_t incr,
+ typename traits_t< T >::signed_t chunk
+) {
+ // The routine returns the first chunk distributed to the team and
+ // stride for next chunks calculation.
+ // Last iteration flag set for the team that will execute
+ // the last iteration of the loop.
+ // The routine is called for dist_schedue(static,chunk) only.
+ typedef typename traits_t< T >::unsigned_t UT;
+ typedef typename traits_t< T >::signed_t ST;
+ kmp_uint32 team_id;
+ kmp_uint32 nteams;
+ UT trip_count;
+ T lower;
+ T upper;
+ ST span;
+ kmp_team_t *team;
+ kmp_info_t *th;
+
+ KMP_DEBUG_ASSERT( p_last && p_lb && p_ub && p_st );
+ KE_TRACE( 10, ("__kmp_team_static_init called (%d)\n", gtid));
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format( "__kmp_team_static_init enter: T#%%d liter=%%d "\
+ "iter=(%%%s, %%%s, %%%s) chunk %%%s; signed?<%s>\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec,
+ traits_t< ST >::spec, traits_t< T >::spec );
+ KD_TRACE(100, ( buff, gtid, *p_last, *p_lb, *p_ub, *p_st, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+
+ lower = *p_lb;
+ upper = *p_ub;
+ if( __kmp_env_consistency_check ) {
+ if( incr == 0 ) {
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrZeroProhibited, ct_pdo, loc );
+ }
+ if( incr > 0 ? (upper < lower) : (lower < upper) ) {
+ // The loop is illegal.
+ // Some zero-trip loops maintained by compiler, e.g.:
+ // for(i=10;i<0;++i) // lower >= upper - run-time check
+ // for(i=0;i>10;--i) // lower <= upper - run-time check
+ // for(i=0;i>10;++i) // incr > 0 - compile-time check
+ // for(i=10;i<0;--i) // incr < 0 - compile-time check
+ // Compiler does not check the following illegal loops:
+ // for(i=0;i<10;i+=incr) // where incr<0
+ // for(i=10;i>0;i-=incr) // where incr<0
+ __kmp_error_construct( kmp_i18n_msg_CnsLoopIncrIllegal, ct_pdo, loc );
+ }
+ }
+ th = __kmp_threads[gtid];
+ team = th->th.th_team;
+ #if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT(th->th.th_teams_microtask); // we are in the teams construct
+ nteams = th->th.th_teams_size.nteams;
+ #endif
+ team_id = team->t.t_master_tid;
+ KMP_DEBUG_ASSERT(nteams == team->t.t_parent->t.t_nproc);
+
+ // compute trip count
+ if( incr == 1 ) {
+ trip_count = upper - lower + 1;
+ } else if(incr == -1) {
+ trip_count = lower - upper + 1;
+ } else if ( incr > 0 ) {
+ // upper-lower can exceed the limit of signed type
+ trip_count = (UT)(upper - lower) / incr + 1;
+ } else {
+ trip_count = (UT)(lower - upper) / (-incr) + 1;
+ }
+ if( chunk < 1 )
+ chunk = 1;
+ span = chunk * incr;
+ *p_st = span * nteams;
+ *p_lb = lower + (span * team_id);
+ *p_ub = *p_lb + span - incr;
+ if ( p_last != NULL )
+ *p_last = (team_id == ((trip_count - 1)/(UT)chunk) % nteams);
+ // Correct upper bound if needed
+ if( incr > 0 ) {
+ if( *p_ub < *p_lb ) // overflow?
+ *p_ub = i_maxmin< T >::mx;
+ if( *p_ub > upper )
+ *p_ub = upper; // tracker C73258
+ } else { // incr < 0
+ if( *p_ub > *p_lb )
+ *p_ub = i_maxmin< T >::mn;
+ if( *p_ub < upper )
+ *p_ub = upper; // tracker C73258
+ }
+ #ifdef KMP_DEBUG
+ {
+ const char * buff;
+ // create format specifiers before the debug output
+ buff = __kmp_str_format( "__kmp_team_static_init exit: T#%%d team%%u liter=%%d "\
+ "iter=(%%%s, %%%s, %%%s) chunk %%%s\n",
+ traits_t< T >::spec, traits_t< T >::spec, traits_t< ST >::spec,
+ traits_t< ST >::spec );
+ KD_TRACE(100, ( buff, gtid, team_id, *p_last, *p_lb, *p_ub, *p_st, chunk ) );
+ __kmp_str_free( &buff );
+ }
+ #endif
+}
+
+//--------------------------------------------------------------------------------------
+extern "C" {
+
+/*!
+@ingroup WORK_SHARING
+@param loc Source code location
+@param gtid Global thread id of this thread
+@param schedtype Scheduling type
+@param plastiter Pointer to the "last iteration" flag
+@param plower Pointer to the lower bound
+@param pupper Pointer to the upper bound
+@param pstride Pointer to the stride
+@param incr Loop increment
+@param chunk The chunk size
+
+Each of the four functions here are identical apart from the argument types.
+
+The functions compute the upper and lower bounds and stride to be used for the set of iterations
+to be executed by the current thread from the statically scheduled loop that is described by the
+initial values of the bounds, stride, increment and chunk size.
+
+@{
+*/
+void
+__kmpc_for_static_init_4( ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter,
+ kmp_int32 *plower, kmp_int32 *pupper,
+ kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk )
+{
+ __kmp_for_static_init< kmp_int32 >(
+ loc, gtid, schedtype, plastiter, plower, pupper, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_for_static_init_4
+ */
+void
+__kmpc_for_static_init_4u( ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter,
+ kmp_uint32 *plower, kmp_uint32 *pupper,
+ kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk )
+{
+ __kmp_for_static_init< kmp_uint32 >(
+ loc, gtid, schedtype, plastiter, plower, pupper, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_for_static_init_4
+ */
+void
+__kmpc_for_static_init_8( ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter,
+ kmp_int64 *plower, kmp_int64 *pupper,
+ kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk )
+{
+ __kmp_for_static_init< kmp_int64 >(
+ loc, gtid, schedtype, plastiter, plower, pupper, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_for_static_init_4
+ */
+void
+__kmpc_for_static_init_8u( ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter,
+ kmp_uint64 *plower, kmp_uint64 *pupper,
+ kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk )
+{
+ __kmp_for_static_init< kmp_uint64 >(
+ loc, gtid, schedtype, plastiter, plower, pupper, pstride, incr, chunk );
+}
+/*!
+@}
+*/
+
+/*!
+@ingroup WORK_SHARING
+@param loc Source code location
+@param gtid Global thread id of this thread
+@param schedule Scheduling type for the parallel loop
+@param plastiter Pointer to the "last iteration" flag
+@param plower Pointer to the lower bound
+@param pupper Pointer to the upper bound of loop chunk
+@param pupperD Pointer to the upper bound of dist_chunk
+@param pstride Pointer to the stride for parallel loop
+@param incr Loop increment
+@param chunk The chunk size for the parallel loop
+
+Each of the four functions here are identical apart from the argument types.
+
+The functions compute the upper and lower bounds and strides to be used for the set of iterations
+to be executed by the current thread from the statically scheduled loop that is described by the
+initial values of the bounds, strides, increment and chunks for parallel loop and distribute
+constructs.
+
+@{
+*/
+void
+__kmpc_dist_for_static_init_4(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter,
+ kmp_int32 *plower, kmp_int32 *pupper, kmp_int32 *pupperD,
+ kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk )
+{
+ __kmp_dist_for_static_init< kmp_int32 >(
+ loc, gtid, schedule, plastiter, plower, pupper, pupperD, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_dist_for_static_init_4
+ */
+void
+__kmpc_dist_for_static_init_4u(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter,
+ kmp_uint32 *plower, kmp_uint32 *pupper, kmp_uint32 *pupperD,
+ kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk )
+{
+ __kmp_dist_for_static_init< kmp_uint32 >(
+ loc, gtid, schedule, plastiter, plower, pupper, pupperD, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_dist_for_static_init_4
+ */
+void
+__kmpc_dist_for_static_init_8(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter,
+ kmp_int64 *plower, kmp_int64 *pupper, kmp_int64 *pupperD,
+ kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk )
+{
+ __kmp_dist_for_static_init< kmp_int64 >(
+ loc, gtid, schedule, plastiter, plower, pupper, pupperD, pstride, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_dist_for_static_init_4
+ */
+void
+__kmpc_dist_for_static_init_8u(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter,
+ kmp_uint64 *plower, kmp_uint64 *pupper, kmp_uint64 *pupperD,
+ kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk )
+{
+ __kmp_dist_for_static_init< kmp_uint64 >(
+ loc, gtid, schedule, plastiter, plower, pupper, pupperD, pstride, incr, chunk );
+}
+/*!
+@}
+*/
+
+//-----------------------------------------------------------------------------------------
+// Auxiliary routines for Distribute Parallel Loop construct implementation
+// Transfer call to template< type T >
+// __kmp_team_static_init( ident_t *loc, int gtid,
+// int *p_last, T *lb, T *ub, ST *st, ST incr, ST chunk )
+
+/*!
+@ingroup WORK_SHARING
+@{
+@param loc Source location
+@param gtid Global thread id
+@param p_last pointer to last iteration flag
+@param p_lb pointer to Lower bound
+@param p_ub pointer to Upper bound
+@param p_st Step (or increment if you prefer)
+@param incr Loop increment
+@param chunk The chunk size to block with
+
+The functions compute the upper and lower bounds and stride to be used for the set of iterations
+to be executed by the current team from the statically scheduled loop that is described by the
+initial values of the bounds, stride, increment and chunk for the distribute construct as part of
+composite distribute parallel loop construct.
+These functions are all identical apart from the types of the arguments.
+*/
+
+void
+__kmpc_team_static_init_4(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_int32 *p_lb, kmp_int32 *p_ub, kmp_int32 *p_st, kmp_int32 incr, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_team_static_init< kmp_int32 >( loc, gtid, p_last, p_lb, p_ub, p_st, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_team_static_init_4
+ */
+void
+__kmpc_team_static_init_4u(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_uint32 *p_lb, kmp_uint32 *p_ub, kmp_int32 *p_st, kmp_int32 incr, kmp_int32 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_team_static_init< kmp_uint32 >( loc, gtid, p_last, p_lb, p_ub, p_st, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_team_static_init_4
+ */
+void
+__kmpc_team_static_init_8(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_int64 *p_lb, kmp_int64 *p_ub, kmp_int64 *p_st, kmp_int64 incr, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_team_static_init< kmp_int64 >( loc, gtid, p_last, p_lb, p_ub, p_st, incr, chunk );
+}
+
+/*!
+ See @ref __kmpc_team_static_init_4
+ */
+void
+__kmpc_team_static_init_8u(
+ ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last,
+ kmp_uint64 *p_lb, kmp_uint64 *p_ub, kmp_int64 *p_st, kmp_int64 incr, kmp_int64 chunk )
+{
+ KMP_DEBUG_ASSERT( __kmp_init_serial );
+ __kmp_team_static_init< kmp_uint64 >( loc, gtid, p_last, p_lb, p_ub, p_st, incr, chunk );
+}
+/*!
+@}
+*/
+
+} // extern "C"
+
diff --git a/final/runtime/src/kmp_settings.c b/final/runtime/src/kmp_settings.c
new file mode 100644
index 0000000..1da8bbe
--- /dev/null
+++ b/final/runtime/src/kmp_settings.c
@@ -0,0 +1,5636 @@
+/*
+ * kmp_settings.c -- Initialize environment variables
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_wrapper_getpid.h"
+#include "kmp_environment.h"
+#include "kmp_atomic.h"
+#include "kmp_itt.h"
+#include "kmp_str.h"
+#include "kmp_settings.h"
+#include "kmp_i18n.h"
+#include "kmp_lock.h"
+#include "kmp_io.h"
+
+static int __kmp_env_toPrint( char const * name, int flag );
+
+bool __kmp_env_format = 0; // 0 - old format; 1 - new format
+// -------------------------------------------------------------------------------------------------
+// Helper string functions. Subject to move to kmp_str.
+// -------------------------------------------------------------------------------------------------
+
+static double
+__kmp_convert_to_double( char const * s )
+{
+ double result;
+
+ if ( KMP_SSCANF( s, "%lf", &result ) < 1 ) {
+ result = 0.0;
+ }
+
+ return result;
+}
+
+#ifdef KMP_DEBUG
+static unsigned int
+__kmp_readstr_with_sentinel(char *dest, char const * src, size_t len, char sentinel) {
+ unsigned int i;
+ for (i = 0; i < len; i++) {
+ if ((*src == '\0') || (*src == sentinel)) {
+ break;
+ }
+ *(dest++) = *(src++);
+ }
+ *dest = '\0';
+ return i;
+}
+#endif
+
+static int
+__kmp_match_with_sentinel( char const * a, char const * b, size_t len, char sentinel ) {
+ size_t l = 0;
+
+ if(a == NULL)
+ a = "";
+ if(b == NULL)
+ b = "";
+ while(*a && *b && *b != sentinel) {
+ char ca = *a, cb = *b;
+
+ if(ca >= 'a' && ca <= 'z')
+ ca -= 'a' - 'A';
+ if(cb >= 'a' && cb <= 'z')
+ cb -= 'a' - 'A';
+ if(ca != cb)
+ return FALSE;
+ ++l;
+ ++a;
+ ++b;
+ }
+ return l >= len;
+}
+
+//
+// Expected usage:
+// token is the token to check for.
+// buf is the string being parsed.
+// *end returns the char after the end of the token.
+// it is not modified unless a match occurs.
+//
+//
+// Example 1:
+//
+// if (__kmp_match_str("token", buf, *end) {
+// <do something>
+// buf = end;
+// }
+//
+// Example 2:
+//
+// if (__kmp_match_str("token", buf, *end) {
+// char *save = **end;
+// **end = sentinel;
+// <use any of the __kmp*_with_sentinel() functions>
+// **end = save;
+// buf = end;
+// }
+//
+
+static int
+__kmp_match_str( char const *token, char const *buf, const char **end) {
+
+ KMP_ASSERT(token != NULL);
+ KMP_ASSERT(buf != NULL);
+ KMP_ASSERT(end != NULL);
+
+ while (*token && *buf) {
+ char ct = *token, cb = *buf;
+
+ if(ct >= 'a' && ct <= 'z')
+ ct -= 'a' - 'A';
+ if(cb >= 'a' && cb <= 'z')
+ cb -= 'a' - 'A';
+ if (ct != cb)
+ return FALSE;
+ ++token;
+ ++buf;
+ }
+ if (*token) {
+ return FALSE;
+ }
+ *end = buf;
+ return TRUE;
+}
+
+
+static size_t
+__kmp_round4k( size_t size ) {
+ size_t _4k = 4 * 1024;
+ if ( size & ( _4k - 1 ) ) {
+ size &= ~ ( _4k - 1 );
+ if ( size <= KMP_SIZE_T_MAX - _4k ) {
+ size += _4k; // Round up if there is no overflow.
+ }; // if
+ }; // if
+ return size;
+} // __kmp_round4k
+
+
+/*
+ Here, multipliers are like __kmp_convert_to_seconds, but floating-point
+ values are allowed, and the return value is in milliseconds. The default
+ multiplier is milliseconds. Returns INT_MAX only if the value specified
+ matches "infinit*". Returns -1 if specified string is invalid.
+*/
+int
+__kmp_convert_to_milliseconds( char const * data )
+{
+ int ret, nvalues, factor;
+ char mult, extra;
+ double value;
+
+ if (data == NULL) return (-1);
+ if ( __kmp_str_match( "infinit", -1, data)) return (INT_MAX);
+ value = (double) 0.0;
+ mult = '\0';
+ nvalues = KMP_SSCANF (data, "%lf%c%c", &value, &mult, &extra);
+ if (nvalues < 1) return (-1);
+ if (nvalues == 1) mult = '\0';
+ if (nvalues == 3) return (-1);
+
+ if (value < 0) return (-1);
+
+ switch (mult) {
+ case '\0':
+ /* default is milliseconds */
+ factor = 1;
+ break;
+ case 's': case 'S':
+ factor = 1000;
+ break;
+ case 'm': case 'M':
+ factor = 1000 * 60;
+ break;
+ case 'h': case 'H':
+ factor = 1000 * 60 * 60;
+ break;
+ case 'd': case 'D':
+ factor = 1000 * 24 * 60 * 60;
+ break;
+ default:
+ return (-1);
+ }
+
+ if ( value >= ( (INT_MAX-1) / factor) )
+ ret = INT_MAX-1; /* Don't allow infinite value here */
+ else
+ ret = (int) (value * (double) factor); /* truncate to int */
+
+ return ret;
+}
+
+
+static int
+__kmp_strcasecmp_with_sentinel( char const * a, char const * b, char sentinel ) {
+ if(a == NULL)
+ a = "";
+ if(b == NULL)
+ b = "";
+ while(*a && *b && *b != sentinel) {
+ char ca = *a, cb = *b;
+
+ if(ca >= 'a' && ca <= 'z')
+ ca -= 'a' - 'A';
+ if(cb >= 'a' && cb <= 'z')
+ cb -= 'a' - 'A';
+ if(ca != cb)
+ return (int)(unsigned char)*a - (int)(unsigned char)*b;
+ ++a;
+ ++b;
+ }
+ return *a ?
+ (*b && *b != sentinel) ? (int)(unsigned char)*a - (int)(unsigned char)*b : 1 :
+ (*b && *b != sentinel) ? -1 : 0;
+}
+
+
+// =================================================================================================
+// Table structures and helper functions.
+// =================================================================================================
+
+typedef struct __kmp_setting kmp_setting_t;
+typedef struct __kmp_stg_ss_data kmp_stg_ss_data_t;
+typedef struct __kmp_stg_wp_data kmp_stg_wp_data_t;
+typedef struct __kmp_stg_fr_data kmp_stg_fr_data_t;
+
+typedef void ( * kmp_stg_parse_func_t )( char const * name, char const * value, void * data );
+typedef void ( * kmp_stg_print_func_t )( kmp_str_buf_t * buffer, char const * name, void * data );
+
+struct __kmp_setting {
+ char const * name; // Name of setting (environment variable).
+ kmp_stg_parse_func_t parse; // Parser function.
+ kmp_stg_print_func_t print; // Print function.
+ void * data; // Data passed to parser and printer.
+ int set; // Variable set during this "session"
+ // (__kmp_env_initialize() or kmp_set_defaults() call).
+ int defined; // Variable set in any "session".
+}; // struct __kmp_setting
+
+struct __kmp_stg_ss_data {
+ size_t factor; // Default factor: 1 for KMP_STACKSIZE, 1024 for others.
+ kmp_setting_t * * rivals; // Array of pointers to rivals (including itself).
+}; // struct __kmp_stg_ss_data
+
+struct __kmp_stg_wp_data {
+ int omp; // 0 -- KMP_LIBRARY, 1 -- OMP_WAIT_POLICY.
+ kmp_setting_t * * rivals; // Array of pointers to rivals (including itself).
+}; // struct __kmp_stg_wp_data
+
+struct __kmp_stg_fr_data {
+ int force; // 0 -- KMP_DETERMINISTIC_REDUCTION, 1 -- KMP_FORCE_REDUCTION.
+ kmp_setting_t * * rivals; // Array of pointers to rivals (including itself).
+}; // struct __kmp_stg_fr_data
+
+static int
+__kmp_stg_check_rivals( // 0 -- Ok, 1 -- errors found.
+ char const * name, // Name of variable.
+ char const * value, // Value of the variable.
+ kmp_setting_t * * rivals // List of rival settings (the list must include current one).
+);
+
+
+// -------------------------------------------------------------------------------------------------
+// Helper parse functions.
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_bool(
+ char const * name,
+ char const * value,
+ int * out
+) {
+ if ( __kmp_str_match_true( value ) ) {
+ * out = TRUE;
+ } else if (__kmp_str_match_false( value ) ) {
+ * out = FALSE;
+ } else {
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( BadBoolValue, name, value ),
+ KMP_HNT( ValidBoolValues ),
+ __kmp_msg_null
+ );
+ }; // if
+} // __kmp_stg_parse_bool
+
+static void
+__kmp_stg_parse_size(
+ char const * name,
+ char const * value,
+ size_t size_min,
+ size_t size_max,
+ int * is_specified,
+ size_t * out,
+ size_t factor
+) {
+ char const * msg = NULL;
+ #if KMP_OS_DARWIN
+ size_min = __kmp_round4k( size_min );
+ size_max = __kmp_round4k( size_max );
+ #endif // KMP_OS_DARWIN
+ if ( value ) {
+ if ( is_specified != NULL ) {
+ * is_specified = 1;
+ }; // if
+ __kmp_str_to_size( value, out, factor, & msg );
+ if ( msg == NULL ) {
+ if ( * out > size_max ) {
+ * out = size_max;
+ msg = KMP_I18N_STR( ValueTooLarge );
+ } else if ( * out < size_min ) {
+ * out = size_min;
+ msg = KMP_I18N_STR( ValueTooSmall );
+ } else {
+ #if KMP_OS_DARWIN
+ size_t round4k = __kmp_round4k( * out );
+ if ( * out != round4k ) {
+ * out = round4k;
+ msg = KMP_I18N_STR( NotMultiple4K );
+ }; // if
+ #endif
+ }; // if
+ } else {
+ // If integer overflow occurred, * out == KMP_SIZE_T_MAX. Cut it to size_max silently.
+ if ( * out < size_min ) {
+ * out = size_max;
+ }
+ else if ( * out > size_max ) {
+ * out = size_max;
+ }; // if
+ }; // if
+ if ( msg != NULL ) {
+ // Message is not empty. Print warning.
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init( & buf );
+ __kmp_str_buf_print_size( & buf, * out );
+ KMP_WARNING( ParseSizeIntWarn, name, value, msg );
+ KMP_INFORM( Using_str_Value, name, buf.str );
+ __kmp_str_buf_free( & buf );
+ }; // if
+ }; // if
+} // __kmp_stg_parse_size
+
+#if KMP_AFFINITY_SUPPORTED
+static void
+__kmp_stg_parse_str(
+ char const * name,
+ char const * value,
+ char const * * out
+) {
+ KMP_INTERNAL_FREE( (void *) * out );
+ * out = __kmp_str_format( "%s", value );
+} // __kmp_stg_parse_str
+#endif
+
+static void
+__kmp_stg_parse_int(
+ char const * name, // I: Name of environment variable (used in warning messages).
+ char const * value, // I: Value of environment variable to parse.
+ int min, // I: Miminal allowed value.
+ int max, // I: Maximum allowed value.
+ int * out // O: Output (parsed) value.
+) {
+ char const * msg = NULL;
+ kmp_uint64 uint = * out;
+ __kmp_str_to_uint( value, & uint, & msg );
+ if ( msg == NULL ) {
+ if ( uint < (unsigned int)min ) {
+ msg = KMP_I18N_STR( ValueTooSmall );
+ uint = min;
+ } else if ( uint > (unsigned int)max ) {
+ msg = KMP_I18N_STR( ValueTooLarge );
+ uint = max;
+ }; // if
+ } else {
+ // If overflow occurred msg contains error message and uint is very big. Cut tmp it
+ // to INT_MAX.
+ if ( uint < (unsigned int)min ) {
+ uint = min;
+ }
+ else if ( uint > (unsigned int)max ) {
+ uint = max;
+ }; // if
+ }; // if
+ if ( msg != NULL ) {
+ // Message is not empty. Print warning.
+ kmp_str_buf_t buf;
+ KMP_WARNING( ParseSizeIntWarn, name, value, msg );
+ __kmp_str_buf_init( & buf );
+ __kmp_str_buf_print( &buf, "%" KMP_UINT64_SPEC "", uint );
+ KMP_INFORM( Using_uint64_Value, name, buf.str );
+ __kmp_str_buf_free( &buf );
+ }; // if
+ * out = uint;
+} // __kmp_stg_parse_int
+
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+static void
+__kmp_stg_parse_file(
+ char const * name,
+ char const * value,
+ char * suffix,
+ char * * out
+) {
+ char buffer[256];
+ char *t;
+ int hasSuffix;
+ KMP_INTERNAL_FREE( (void *) * out );
+ t = (char *) strrchr(value, '.');
+ hasSuffix = t && __kmp_str_eqf( t, suffix );
+ t = __kmp_str_format( "%s%s", value, hasSuffix ? "" : suffix );
+ __kmp_expand_file_name( buffer, sizeof(buffer), t);
+ KMP_INTERNAL_FREE(t);
+ * out = __kmp_str_format( "%s", buffer );
+} // __kmp_stg_parse_file
+#endif
+
+#ifdef KMP_DEBUG
+static char * par_range_to_print = NULL;
+
+static void
+__kmp_stg_parse_par_range(
+ char const * name,
+ char const * value,
+ int * out_range,
+ char * out_routine,
+ char * out_file,
+ int * out_lb,
+ int * out_ub
+) {
+ size_t len = KMP_STRLEN( value + 1 );
+ par_range_to_print = (char *) KMP_INTERNAL_MALLOC( len +1 );
+ KMP_STRNCPY_S( par_range_to_print, len + 1, value, len + 1);
+ __kmp_par_range = +1;
+ __kmp_par_range_lb = 0;
+ __kmp_par_range_ub = INT_MAX;
+ for (;;) {
+ unsigned int len;
+ if (( value == NULL ) || ( *value == '\0' )) {
+ break;
+ }
+ if ( ! __kmp_strcasecmp_with_sentinel( "routine", value, '=' )) {
+ value = strchr( value, '=' ) + 1;
+ len = __kmp_readstr_with_sentinel( out_routine,
+ value, KMP_PAR_RANGE_ROUTINE_LEN - 1, ',' );
+ if ( len == 0 ) {
+ goto par_range_error;
+ }
+ value = strchr( value, ',' );
+ if ( value != NULL ) {
+ value++;
+ }
+ continue;
+ }
+ if ( ! __kmp_strcasecmp_with_sentinel( "filename", value, '=' )) {
+ value = strchr( value, '=' ) + 1;
+ len = __kmp_readstr_with_sentinel( out_file,
+ value, KMP_PAR_RANGE_FILENAME_LEN - 1, ',' );
+ if ( len == 0) {
+ goto par_range_error;
+ }
+ value = strchr( value, ',' );
+ if ( value != NULL ) {
+ value++;
+ }
+ continue;
+ }
+ if (( ! __kmp_strcasecmp_with_sentinel( "range", value, '=' ))
+ || ( ! __kmp_strcasecmp_with_sentinel( "incl_range", value, '=' ))) {
+ value = strchr( value, '=' ) + 1;
+ if ( KMP_SSCANF( value, "%d:%d", out_lb, out_ub ) != 2 ) {
+ goto par_range_error;
+ }
+ *out_range = +1;
+ value = strchr( value, ',' );
+ if ( value != NULL ) {
+ value++;
+ }
+ continue;
+ }
+ if ( ! __kmp_strcasecmp_with_sentinel( "excl_range", value, '=' )) {
+ value = strchr( value, '=' ) + 1;
+ if ( KMP_SSCANF( value, "%d:%d", out_lb, out_ub) != 2 ) {
+ goto par_range_error;
+ }
+ *out_range = -1;
+ value = strchr( value, ',' );
+ if ( value != NULL ) {
+ value++;
+ }
+ continue;
+ }
+ par_range_error:
+ KMP_WARNING( ParRangeSyntax, name );
+ __kmp_par_range = 0;
+ break;
+ }
+} // __kmp_stg_parse_par_range
+#endif
+
+int
+__kmp_initial_threads_capacity( int req_nproc )
+{
+ int nth = 32;
+
+ /* MIN( MAX( 32, 4 * $OMP_NUM_THREADS, 4 * omp_get_num_procs() ), __kmp_max_nth) */
+ if (nth < (4 * req_nproc))
+ nth = (4 * req_nproc);
+ if (nth < (4 * __kmp_xproc))
+ nth = (4 * __kmp_xproc);
+
+ if (nth > __kmp_max_nth)
+ nth = __kmp_max_nth;
+
+ return nth;
+}
+
+
+int
+__kmp_default_tp_capacity( int req_nproc, int max_nth, int all_threads_specified) {
+ int nth = 128;
+
+ if(all_threads_specified)
+ return max_nth;
+ /* MIN( MAX (128, 4 * $OMP_NUM_THREADS, 4 * omp_get_num_procs() ), __kmp_max_nth ) */
+ if (nth < (4 * req_nproc))
+ nth = (4 * req_nproc);
+ if (nth < (4 * __kmp_xproc))
+ nth = (4 * __kmp_xproc);
+
+ if (nth > __kmp_max_nth)
+ nth = __kmp_max_nth;
+
+ return nth;
+}
+
+
+// -------------------------------------------------------------------------------------------------
+// Helper print functions.
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_print_bool( kmp_str_buf_t * buffer, char const * name, int value ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_BOOL;
+ } else {
+ __kmp_str_buf_print( buffer, " %s=%s\n", name, value ? "true" : "false" );
+ }
+} // __kmp_stg_print_bool
+
+static void
+__kmp_stg_print_int( kmp_str_buf_t * buffer, char const * name, int value ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_INT;
+ } else {
+ __kmp_str_buf_print( buffer, " %s=%d\n", name, value );
+ }
+} // __kmp_stg_print_int
+
+static void
+__kmp_stg_print_uint64( kmp_str_buf_t * buffer, char const * name, kmp_uint64 value ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_UINT64;
+ } else {
+ __kmp_str_buf_print( buffer, " %s=%" KMP_UINT64_SPEC "\n", name, value );
+ }
+} // __kmp_stg_print_uint64
+
+static void
+__kmp_stg_print_str( kmp_str_buf_t * buffer, char const * name, char const * value ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_STR;
+ } else {
+ __kmp_str_buf_print( buffer, " %s=%s\n", name, value );
+ }
+} // __kmp_stg_print_str
+
+static void
+__kmp_stg_print_size( kmp_str_buf_t * buffer, char const * name, size_t value ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ __kmp_str_buf_print_size( buffer, value );
+ __kmp_str_buf_print( buffer, "'\n" );
+ } else {
+ __kmp_str_buf_print( buffer, " %s=", name );
+ __kmp_str_buf_print_size( buffer, value );
+ __kmp_str_buf_print( buffer, "\n" );
+ return;
+ }
+} // __kmp_stg_print_size
+
+
+// =================================================================================================
+// Parse and print functions.
+// =================================================================================================
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ALL_THREADS, KMP_MAX_THREADS, OMP_THREAD_LIMIT
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_all_threads( char const * name, char const * value, void * data ) {
+
+ kmp_setting_t * * rivals = (kmp_setting_t * *) data;
+ int rc;
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }; // if
+ if ( ! __kmp_strcasecmp_with_sentinel( "all", value, 0 ) ) {
+ __kmp_max_nth = __kmp_xproc;
+ __kmp_allThreadsSpecified = 1;
+ } else {
+ __kmp_stg_parse_int( name, value, 1, __kmp_sys_max_nth, & __kmp_max_nth );
+ __kmp_allThreadsSpecified = 0;
+ }
+ K_DIAG( 1, ( "__kmp_max_nth == %d\n", __kmp_max_nth ) );
+
+} // __kmp_stg_parse_all_threads
+
+static void
+__kmp_stg_print_all_threads( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_max_nth );
+} // __kmp_stg_print_all_threads
+
+// -------------------------------------------------------------------------------------------------
+// KMP_BLOCKTIME
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_blocktime( char const * name, char const * value, void * data ) {
+ __kmp_dflt_blocktime = __kmp_convert_to_milliseconds( value );
+ if ( __kmp_dflt_blocktime < 0 ) {
+ __kmp_dflt_blocktime = KMP_DEFAULT_BLOCKTIME;
+ __kmp_msg( kmp_ms_warning, KMP_MSG( InvalidValue, name, value ), __kmp_msg_null );
+ KMP_INFORM( Using_int_Value, name, __kmp_dflt_blocktime );
+ __kmp_env_blocktime = FALSE; // Revert to default as if var not set.
+ } else {
+ if ( __kmp_dflt_blocktime < KMP_MIN_BLOCKTIME ) {
+ __kmp_dflt_blocktime = KMP_MIN_BLOCKTIME;
+ __kmp_msg( kmp_ms_warning, KMP_MSG( SmallValue, name, value ), __kmp_msg_null );
+ KMP_INFORM( MinValueUsing, name, __kmp_dflt_blocktime );
+ } else if ( __kmp_dflt_blocktime > KMP_MAX_BLOCKTIME ) {
+ __kmp_dflt_blocktime = KMP_MAX_BLOCKTIME;
+ __kmp_msg( kmp_ms_warning, KMP_MSG( LargeValue, name, value ), __kmp_msg_null );
+ KMP_INFORM( MaxValueUsing, name, __kmp_dflt_blocktime );
+ }; // if
+ __kmp_env_blocktime = TRUE; // KMP_BLOCKTIME was specified.
+ }; // if
+ // calculate number of monitor thread wakeup intervals corresonding to blocktime.
+ __kmp_monitor_wakeups = KMP_WAKEUPS_FROM_BLOCKTIME( __kmp_dflt_blocktime, __kmp_monitor_wakeups );
+ __kmp_bt_intervals = KMP_INTERVALS_FROM_BLOCKTIME( __kmp_dflt_blocktime, __kmp_monitor_wakeups );
+ K_DIAG( 1, ( "__kmp_env_blocktime == %d\n", __kmp_env_blocktime ) );
+ if ( __kmp_env_blocktime ) {
+ K_DIAG( 1, ( "__kmp_dflt_blocktime == %d\n", __kmp_dflt_blocktime ) );
+ }
+} // __kmp_stg_parse_blocktime
+
+static void
+__kmp_stg_print_blocktime( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_dflt_blocktime );
+} // __kmp_stg_print_blocktime
+
+// -------------------------------------------------------------------------------------------------
+// KMP_DUPLICATE_LIB_OK
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_duplicate_lib_ok( char const * name, char const * value, void * data ) {
+ /* actually this variable is not supported,
+ put here for compatibility with earlier builds and for static/dynamic combination */
+ __kmp_stg_parse_bool( name, value, & __kmp_duplicate_library_ok );
+} // __kmp_stg_parse_duplicate_lib_ok
+
+static void
+__kmp_stg_print_duplicate_lib_ok( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_duplicate_library_ok );
+} // __kmp_stg_print_duplicate_lib_ok
+
+// -------------------------------------------------------------------------------------------------
+// KMP_INHERIT_FP_CONTROL
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+static void
+__kmp_stg_parse_inherit_fp_control( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_inherit_fp_control );
+} // __kmp_stg_parse_inherit_fp_control
+
+static void
+__kmp_stg_print_inherit_fp_control( kmp_str_buf_t * buffer, char const * name, void * data ) {
+#if KMP_DEBUG
+ __kmp_stg_print_bool( buffer, name, __kmp_inherit_fp_control );
+#endif /* KMP_DEBUG */
+} // __kmp_stg_print_inherit_fp_control
+
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+// -------------------------------------------------------------------------------------------------
+// KMP_LIBRARY, OMP_WAIT_POLICY
+// -------------------------------------------------------------------------------------------------
+
+static char const *blocktime_str = NULL;
+
+static void
+__kmp_stg_parse_wait_policy( char const * name, char const * value, void * data ) {
+
+ kmp_stg_wp_data_t * wait = (kmp_stg_wp_data_t *) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, wait->rivals );
+ if ( rc ) {
+ return;
+ }; // if
+
+ if ( wait->omp ) {
+ if ( __kmp_str_match( "ACTIVE", 1, value ) ) {
+ __kmp_library = library_turnaround;
+ if ( blocktime_str == NULL ) {
+ // KMP_BLOCKTIME not specified, so set default to "infinite".
+ __kmp_dflt_blocktime = KMP_MAX_BLOCKTIME;
+ }
+ } else if ( __kmp_str_match( "PASSIVE", 1, value ) ) {
+ __kmp_library = library_throughput;
+ if ( blocktime_str == NULL ) {
+ // KMP_BLOCKTIME not specified, so set default to 0.
+ __kmp_dflt_blocktime = 0;
+ }
+ } else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }; // if
+ } else {
+ if ( __kmp_str_match( "serial", 1, value ) ) { /* S */
+ __kmp_library = library_serial;
+ } else if ( __kmp_str_match( "throughput", 2, value ) ) { /* TH */
+ __kmp_library = library_throughput;
+ } else if ( __kmp_str_match( "turnaround", 2, value ) ) { /* TU */
+ __kmp_library = library_turnaround;
+ } else if ( __kmp_str_match( "dedicated", 1, value ) ) { /* D */
+ __kmp_library = library_turnaround;
+ } else if ( __kmp_str_match( "multiuser", 1, value ) ) { /* M */
+ __kmp_library = library_throughput;
+ } else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }; // if
+ }; // if
+ __kmp_aux_set_library( __kmp_library );
+
+} // __kmp_stg_parse_wait_policy
+
+static void
+__kmp_stg_print_wait_policy( kmp_str_buf_t * buffer, char const * name, void * data ) {
+
+ kmp_stg_wp_data_t * wait = (kmp_stg_wp_data_t *) data;
+ char const * value = NULL;
+
+ if ( wait->omp ) {
+ switch ( __kmp_library ) {
+ case library_turnaround : {
+ value = "ACTIVE";
+ } break;
+ case library_throughput : {
+ value = "PASSIVE";
+ } break;
+ }; // switch
+ } else {
+ switch ( __kmp_library ) {
+ case library_serial : {
+ value = "serial";
+ } break;
+ case library_turnaround : {
+ value = "turnaround";
+ } break;
+ case library_throughput : {
+ value = "throughput";
+ } break;
+ }; // switch
+ }; // if
+ if ( value != NULL ) {
+ __kmp_stg_print_str( buffer, name, value );
+ }; // if
+
+} // __kmp_stg_print_wait_policy
+
+// -------------------------------------------------------------------------------------------------
+// KMP_MONITOR_STACKSIZE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_monitor_stacksize( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_size(
+ name,
+ value,
+ __kmp_sys_min_stksize,
+ KMP_MAX_STKSIZE,
+ NULL,
+ & __kmp_monitor_stksize,
+ 1
+ );
+} // __kmp_stg_parse_monitor_stacksize
+
+static void
+__kmp_stg_print_monitor_stacksize( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if( __kmp_env_format ) {
+ if ( __kmp_monitor_stksize > 0 )
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ else
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ if ( __kmp_monitor_stksize > 0 ) {
+ __kmp_str_buf_print_size( buffer, __kmp_monitor_stksize );
+ } else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ if( __kmp_env_format && __kmp_monitor_stksize ) {
+ __kmp_str_buf_print( buffer, "'\n");
+ }
+
+} // __kmp_stg_print_monitor_stacksize
+
+// -------------------------------------------------------------------------------------------------
+// KMP_SETTINGS
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_settings( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_settings );
+} // __kmp_stg_parse_settings
+
+static void
+__kmp_stg_print_settings( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_settings );
+} // __kmp_stg_print_settings
+
+// -------------------------------------------------------------------------------------------------
+// KMP_STACKPAD
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_stackpad( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int(
+ name, // Env var name
+ value, // Env var value
+ KMP_MIN_STKPADDING, // Min value
+ KMP_MAX_STKPADDING, // Max value
+ & __kmp_stkpadding // Var to initialize
+ );
+} // __kmp_stg_parse_stackpad
+
+static void
+__kmp_stg_print_stackpad( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_stkpadding );
+} // __kmp_stg_print_stackpad
+
+// -------------------------------------------------------------------------------------------------
+// KMP_STACKOFFSET
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_stackoffset( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_size(
+ name, // Env var name
+ value, // Env var value
+ KMP_MIN_STKOFFSET, // Min value
+ KMP_MAX_STKOFFSET, // Max value
+ NULL, //
+ & __kmp_stkoffset, // Var to initialize
+ 1
+ );
+} // __kmp_stg_parse_stackoffset
+
+static void
+__kmp_stg_print_stackoffset( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_size( buffer, name, __kmp_stkoffset );
+} // __kmp_stg_print_stackoffset
+
+// -------------------------------------------------------------------------------------------------
+// KMP_STACKSIZE, OMP_STACKSIZE, GOMP_STACKSIZE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_stacksize( char const * name, char const * value, void * data ) {
+
+ kmp_stg_ss_data_t * stacksize = (kmp_stg_ss_data_t *) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, stacksize->rivals );
+ if ( rc ) {
+ return;
+ }; // if
+ __kmp_stg_parse_size(
+ name, // Env var name
+ value, // Env var value
+ __kmp_sys_min_stksize, // Min value
+ KMP_MAX_STKSIZE, // Max value
+ & __kmp_env_stksize, //
+ & __kmp_stksize, // Var to initialize
+ stacksize->factor
+ );
+
+} // __kmp_stg_parse_stacksize
+
+// This function is called for printing both KMP_STACKSIZE (factor is 1) and OMP_STACKSIZE (factor is 1024).
+// Currently it is not possible to print OMP_STACKSIZE value in bytes. We can consider adding this
+// possibility by a customer request in future.
+static void
+__kmp_stg_print_stacksize( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ kmp_stg_ss_data_t * stacksize = (kmp_stg_ss_data_t *) data;
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ __kmp_str_buf_print_size( buffer, (__kmp_stksize % 1024) ? __kmp_stksize / stacksize->factor : __kmp_stksize );
+ __kmp_str_buf_print( buffer, "'\n" );
+ } else {
+ __kmp_str_buf_print( buffer, " %s=", name );
+ __kmp_str_buf_print_size( buffer, (__kmp_stksize % 1024) ? __kmp_stksize / stacksize->factor : __kmp_stksize );
+ __kmp_str_buf_print( buffer, "\n" );
+ }
+} // __kmp_stg_print_stacksize
+
+// -------------------------------------------------------------------------------------------------
+// KMP_VERSION
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_version( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_version );
+} // __kmp_stg_parse_version
+
+static void
+__kmp_stg_print_version( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_version );
+} // __kmp_stg_print_version
+
+// -------------------------------------------------------------------------------------------------
+// KMP_WARNINGS
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_warnings( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_generate_warnings );
+ if (__kmp_generate_warnings != kmp_warnings_off) { // AC: we have only 0/1 values documented,
+ __kmp_generate_warnings = kmp_warnings_explicit; // so reset it to explicit in order to
+ } // distinguish from default setting
+} // __kmp_env_parse_warnings
+
+static void
+__kmp_stg_print_warnings( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_generate_warnings ); // AC: TODO: change to print_int?
+} // __kmp_env_print_warnings // (needs documentation change)...
+
+// -------------------------------------------------------------------------------------------------
+// OMP_NESTED, OMP_NUM_THREADS
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_nested( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_dflt_nested );
+} // __kmp_stg_parse_nested
+
+static void
+__kmp_stg_print_nested( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_dflt_nested );
+} // __kmp_stg_print_nested
+
+static void
+__kmp_parse_nested_num_threads( const char *var, const char *env, kmp_nested_nthreads_t *nth_array )
+{
+ const char *next = env;
+ const char *scan = next;
+
+ int total = 0; // Count elements that were set. It'll be used as an array size
+ int prev_comma = FALSE; // For correct processing sequential commas
+
+ // Count the number of values in the env. var string
+ for ( ; ; ) {
+ SKIP_WS( next );
+
+ if ( *next == '\0' ) {
+ break;
+ }
+ // Next character is not an integer or not a comma => end of list
+ if ( ( ( *next < '0' ) || ( *next > '9' ) ) && ( *next !=',') ) {
+ KMP_WARNING( NthSyntaxError, var, env );
+ return;
+ }
+ // The next character is ','
+ if ( *next == ',' ) {
+ // ',' is the fisrt character
+ if ( total == 0 || prev_comma ) {
+ total++;
+ }
+ prev_comma = TRUE;
+ next++; //skip ','
+ SKIP_WS( next );
+ }
+ // Next character is a digit
+ if ( *next >= '0' && *next <= '9' ) {
+ prev_comma = FALSE;
+ SKIP_DIGITS( next );
+ total++;
+ const char *tmp = next;
+ SKIP_WS( tmp );
+ if ( ( *next == ' ' || *next == '\t' ) && ( *tmp >= '0' && *tmp <= '9' ) ) {
+ KMP_WARNING( NthSpacesNotAllowed, var, env );
+ return;
+ }
+ }
+ }
+ KMP_DEBUG_ASSERT( total > 0 );
+ if( total <= 0 ) {
+ KMP_WARNING( NthSyntaxError, var, env );
+ return;
+ }
+
+ // Check if the nested nthreads array exists
+ if ( ! nth_array->nth ) {
+ // Allocate an array of double size
+ nth_array->nth = ( int * )KMP_INTERNAL_MALLOC( sizeof( int ) * total * 2 );
+ if ( nth_array->nth == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }
+ nth_array->size = total * 2;
+ } else {
+ if ( nth_array->size < total ) {
+ // Increase the array size
+ do {
+ nth_array->size *= 2;
+ } while ( nth_array->size < total );
+
+ nth_array->nth = (int *) KMP_INTERNAL_REALLOC(
+ nth_array->nth, sizeof( int ) * nth_array->size );
+ if ( nth_array->nth == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }
+ }
+ }
+ nth_array->used = total;
+ int i = 0;
+
+ prev_comma = FALSE;
+ total = 0;
+ // Save values in the array
+ for ( ; ; ) {
+ SKIP_WS( scan );
+ if ( *scan == '\0' ) {
+ break;
+ }
+ // The next character is ','
+ if ( *scan == ',' ) {
+ // ',' in the beginning of the list
+ if ( total == 0 ) {
+ // The value is supposed to be equal to __kmp_avail_proc but it is unknown at the moment.
+ // So let's put a placeholder (#threads = 0) to correct it later.
+ nth_array->nth[i++] = 0;
+ total++;
+ }else if ( prev_comma ) {
+ // Num threads is inherited from the previous level
+ nth_array->nth[i] = nth_array->nth[i - 1];
+ i++;
+ total++;
+ }
+ prev_comma = TRUE;
+ scan++; //skip ','
+ SKIP_WS( scan );
+ }
+ // Next character is a digit
+ if ( *scan >= '0' && *scan <= '9' ) {
+ int num;
+ const char *buf = scan;
+ char const * msg = NULL;
+ prev_comma = FALSE;
+ SKIP_DIGITS( scan );
+ total++;
+
+ num = __kmp_str_to_int( buf, *scan );
+ if ( num < KMP_MIN_NTH ) {
+ msg = KMP_I18N_STR( ValueTooSmall );
+ num = KMP_MIN_NTH;
+ } else if ( num > __kmp_sys_max_nth ) {
+ msg = KMP_I18N_STR( ValueTooLarge );
+ num = __kmp_sys_max_nth;
+ }
+ if ( msg != NULL ) {
+ // Message is not empty. Print warning.
+ KMP_WARNING( ParseSizeIntWarn, var, env, msg );
+ KMP_INFORM( Using_int_Value, var, num );
+ }
+ nth_array->nth[i++] = num;
+ }
+ }
+}
+
+static void
+__kmp_stg_parse_num_threads( char const * name, char const * value, void * data ) {
+ // TODO: Remove this option. OMP_NUM_THREADS is a list of positive integers!
+ if ( ! __kmp_strcasecmp_with_sentinel( "all", value, 0 ) ) {
+ // The array of 1 element
+ __kmp_nested_nth.nth = ( int* )KMP_INTERNAL_MALLOC( sizeof( int ) );
+ __kmp_nested_nth.size = __kmp_nested_nth.used = 1;
+ __kmp_nested_nth.nth[0] = __kmp_dflt_team_nth = __kmp_dflt_team_nth_ub = __kmp_xproc;
+ } else {
+ __kmp_parse_nested_num_threads( name, value, & __kmp_nested_nth );
+ if ( __kmp_nested_nth.nth ) {
+ __kmp_dflt_team_nth = __kmp_nested_nth.nth[0];
+ if ( __kmp_dflt_team_nth_ub < __kmp_dflt_team_nth ) {
+ __kmp_dflt_team_nth_ub = __kmp_dflt_team_nth;
+ }
+ }
+ }; // if
+ K_DIAG( 1, ( "__kmp_dflt_team_nth == %d\n", __kmp_dflt_team_nth ) );
+} // __kmp_stg_parse_num_threads
+
+static void
+__kmp_stg_print_num_threads( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ if ( __kmp_nested_nth.used ) {
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init( &buf );
+ for ( int i = 0; i < __kmp_nested_nth.used; i++) {
+ __kmp_str_buf_print( &buf, "%d", __kmp_nested_nth.nth[i] );
+ if ( i < __kmp_nested_nth.used - 1 ) {
+ __kmp_str_buf_print( &buf, "," );
+ }
+ }
+ __kmp_str_buf_print( buffer, "='%s'\n", buf.str );
+ __kmp_str_buf_free(&buf);
+ } else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+} // __kmp_stg_print_num_threads
+
+// -------------------------------------------------------------------------------------------------
+// OpenMP 3.0: KMP_TASKING, OMP_MAX_ACTIVE_LEVELS,
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_tasking( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, (int)tskm_max, (int *)&__kmp_tasking_mode );
+} // __kmp_stg_parse_tasking
+
+static void
+__kmp_stg_print_tasking( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_tasking_mode );
+} // __kmp_stg_print_tasking
+
+static void
+__kmp_stg_parse_task_stealing( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, 1, (int *)&__kmp_task_stealing_constraint );
+} // __kmp_stg_parse_task_stealing
+
+static void
+__kmp_stg_print_task_stealing( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_task_stealing_constraint );
+} // __kmp_stg_print_task_stealing
+
+static void
+__kmp_stg_parse_max_active_levels( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, KMP_MAX_ACTIVE_LEVELS_LIMIT, & __kmp_dflt_max_active_levels );
+} // __kmp_stg_parse_max_active_levels
+
+static void
+__kmp_stg_print_max_active_levels( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_dflt_max_active_levels );
+} // __kmp_stg_print_max_active_levels
+
+#if OMP_45_ENABLED
+// -------------------------------------------------------------------------------------------------
+// OpenMP 4.5: OMP_MAX_TASK_PRIORITY
+// -------------------------------------------------------------------------------------------------
+static void
+__kmp_stg_parse_max_task_priority(char const *name, char const *value, void *data) {
+ __kmp_stg_parse_int(name, value, 0, KMP_MAX_TASK_PRIORITY_LIMIT, &__kmp_max_task_priority);
+} // __kmp_stg_parse_max_task_priority
+
+static void
+__kmp_stg_print_max_task_priority(kmp_str_buf_t *buffer, char const *name, void *data) {
+ __kmp_stg_print_int(buffer, name, __kmp_max_task_priority);
+} // __kmp_stg_print_max_task_priority
+#endif // OMP_45_ENABLED
+
+// -------------------------------------------------------------------------------------------------
+// KMP_DISP_NUM_BUFFERS
+// -------------------------------------------------------------------------------------------------
+static void
+__kmp_stg_parse_disp_buffers( char const * name, char const * value, void * data ) {
+ if ( TCR_4(__kmp_init_serial) ) {
+ KMP_WARNING( EnvSerialWarn, name );
+ return;
+ } // read value before serial initialization only
+ __kmp_stg_parse_int( name, value, 1, KMP_MAX_NTH, & __kmp_dispatch_num_buffers );
+} // __kmp_stg_parse_disp_buffers
+
+static void
+__kmp_stg_print_disp_buffers( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_dispatch_num_buffers );
+} // __kmp_stg_print_disp_buffers
+
+#if KMP_NESTED_HOT_TEAMS
+// -------------------------------------------------------------------------------------------------
+// KMP_HOT_TEAMS_MAX_LEVEL, KMP_HOT_TEAMS_MODE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_hot_teams_level( char const * name, char const * value, void * data ) {
+ if ( TCR_4(__kmp_init_parallel) ) {
+ KMP_WARNING( EnvParallelWarn, name );
+ return;
+ } // read value before first parallel only
+ __kmp_stg_parse_int( name, value, 0, KMP_MAX_ACTIVE_LEVELS_LIMIT, & __kmp_hot_teams_max_level );
+} // __kmp_stg_parse_hot_teams_level
+
+static void
+__kmp_stg_print_hot_teams_level( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_hot_teams_max_level );
+} // __kmp_stg_print_hot_teams_level
+
+static void
+__kmp_stg_parse_hot_teams_mode( char const * name, char const * value, void * data ) {
+ if ( TCR_4(__kmp_init_parallel) ) {
+ KMP_WARNING( EnvParallelWarn, name );
+ return;
+ } // read value before first parallel only
+ __kmp_stg_parse_int( name, value, 0, KMP_MAX_ACTIVE_LEVELS_LIMIT, & __kmp_hot_teams_mode );
+} // __kmp_stg_parse_hot_teams_mode
+
+static void
+__kmp_stg_print_hot_teams_mode( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_hot_teams_mode );
+} // __kmp_stg_print_hot_teams_mode
+
+#endif // KMP_NESTED_HOT_TEAMS
+
+// -------------------------------------------------------------------------------------------------
+// KMP_HANDLE_SIGNALS
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_HANDLE_SIGNALS
+
+static void
+__kmp_stg_parse_handle_signals( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_handle_signals );
+} // __kmp_stg_parse_handle_signals
+
+static void
+__kmp_stg_print_handle_signals( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_handle_signals );
+} // __kmp_stg_print_handle_signals
+
+#endif // KMP_HANDLE_SIGNALS
+
+// -------------------------------------------------------------------------------------------------
+// KMP_X_DEBUG, KMP_DEBUG, KMP_DEBUG_BUF_*, KMP_DIAG
+// -------------------------------------------------------------------------------------------------
+
+#ifdef KMP_DEBUG
+
+#define KMP_STG_X_DEBUG( x ) \
+ static void __kmp_stg_parse_##x##_debug( char const * name, char const * value, void * data ) { \
+ __kmp_stg_parse_int( name, value, 0, INT_MAX, & kmp_##x##_debug ); \
+ } /* __kmp_stg_parse_x_debug */ \
+ static void __kmp_stg_print_##x##_debug( kmp_str_buf_t * buffer, char const * name, void * data ) { \
+ __kmp_stg_print_int( buffer, name, kmp_##x##_debug ); \
+ } /* __kmp_stg_print_x_debug */
+
+KMP_STG_X_DEBUG( a )
+KMP_STG_X_DEBUG( b )
+KMP_STG_X_DEBUG( c )
+KMP_STG_X_DEBUG( d )
+KMP_STG_X_DEBUG( e )
+KMP_STG_X_DEBUG( f )
+
+#undef KMP_STG_X_DEBUG
+
+static void
+__kmp_stg_parse_debug( char const * name, char const * value, void * data ) {
+ int debug = 0;
+ __kmp_stg_parse_int( name, value, 0, INT_MAX, & debug );
+ if ( kmp_a_debug < debug ) {
+ kmp_a_debug = debug;
+ }; // if
+ if ( kmp_b_debug < debug ) {
+ kmp_b_debug = debug;
+ }; // if
+ if ( kmp_c_debug < debug ) {
+ kmp_c_debug = debug;
+ }; // if
+ if ( kmp_d_debug < debug ) {
+ kmp_d_debug = debug;
+ }; // if
+ if ( kmp_e_debug < debug ) {
+ kmp_e_debug = debug;
+ }; // if
+ if ( kmp_f_debug < debug ) {
+ kmp_f_debug = debug;
+ }; // if
+} // __kmp_stg_parse_debug
+
+static void
+__kmp_stg_parse_debug_buf( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_debug_buf );
+ // !!! TODO: Move buffer initialization of of this file! It may works incorrectly if
+ // KMP_DEBUG_BUF is parsed before KMP_DEBUG_BUF_LINES or KMP_DEBUG_BUF_CHARS.
+ if ( __kmp_debug_buf ) {
+ int i;
+ int elements = __kmp_debug_buf_lines * __kmp_debug_buf_chars;
+
+ /* allocate and initialize all entries in debug buffer to empty */
+ __kmp_debug_buffer = (char *) __kmp_page_allocate( elements * sizeof( char ) );
+ for ( i = 0; i < elements; i += __kmp_debug_buf_chars )
+ __kmp_debug_buffer[i] = '\0';
+
+ __kmp_debug_count = 0;
+ }
+ K_DIAG( 1, ( "__kmp_debug_buf = %d\n", __kmp_debug_buf ) );
+} // __kmp_stg_parse_debug_buf
+
+static void
+__kmp_stg_print_debug_buf( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_debug_buf );
+} // __kmp_stg_print_debug_buf
+
+static void
+__kmp_stg_parse_debug_buf_atomic( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_debug_buf_atomic );
+} // __kmp_stg_parse_debug_buf_atomic
+
+static void
+__kmp_stg_print_debug_buf_atomic( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_debug_buf_atomic );
+} // __kmp_stg_print_debug_buf_atomic
+
+static void
+__kmp_stg_parse_debug_buf_chars( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int(
+ name,
+ value,
+ KMP_DEBUG_BUF_CHARS_MIN,
+ INT_MAX,
+ & __kmp_debug_buf_chars
+ );
+} // __kmp_stg_debug_parse_buf_chars
+
+static void
+__kmp_stg_print_debug_buf_chars( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_debug_buf_chars );
+} // __kmp_stg_print_debug_buf_chars
+
+static void
+__kmp_stg_parse_debug_buf_lines( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int(
+ name,
+ value,
+ KMP_DEBUG_BUF_LINES_MIN,
+ INT_MAX,
+ & __kmp_debug_buf_lines
+ );
+} // __kmp_stg_parse_debug_buf_lines
+
+static void
+__kmp_stg_print_debug_buf_lines( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_debug_buf_lines );
+} // __kmp_stg_print_debug_buf_lines
+
+static void
+__kmp_stg_parse_diag( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, INT_MAX, & kmp_diag );
+} // __kmp_stg_parse_diag
+
+static void
+__kmp_stg_print_diag( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, kmp_diag );
+} // __kmp_stg_print_diag
+
+#endif // KMP_DEBUG
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ALIGN_ALLOC
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_align_alloc( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_size(
+ name,
+ value,
+ CACHE_LINE,
+ INT_MAX,
+ NULL,
+ & __kmp_align_alloc,
+ 1
+ );
+} // __kmp_stg_parse_align_alloc
+
+static void
+__kmp_stg_print_align_alloc( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_size( buffer, name, __kmp_align_alloc );
+} // __kmp_stg_print_align_alloc
+
+// -------------------------------------------------------------------------------------------------
+// KMP_PLAIN_BARRIER, KMP_FORKJOIN_BARRIER, KMP_REDUCTION_BARRIER
+// -------------------------------------------------------------------------------------------------
+
+// TODO: Remove __kmp_barrier_branch_bit_env_name varibale, remove loops from parse and print
+// functions, pass required info through data argument.
+
+static void
+__kmp_stg_parse_barrier_branch_bit( char const * name, char const * value, void * data ) {
+ const char *var;
+
+ /* ---------- Barrier branch bit control ------------ */
+ for ( int i=bs_plain_barrier; i<bs_last_barrier; i++ ) {
+ var = __kmp_barrier_branch_bit_env_name[ i ];
+ if ( ( strcmp( var, name) == 0 ) && ( value != 0 ) ) {
+ char *comma;
+
+ comma = (char *) strchr( value, ',' );
+ __kmp_barrier_gather_branch_bits[ i ] = ( kmp_uint32 ) __kmp_str_to_int( value, ',' );
+ /* is there a specified release parameter? */
+ if ( comma == NULL ) {
+ __kmp_barrier_release_branch_bits[ i ] = __kmp_barrier_release_bb_dflt;
+ } else {
+ __kmp_barrier_release_branch_bits[ i ] = (kmp_uint32) __kmp_str_to_int( comma + 1, 0 );
+
+ if ( __kmp_barrier_release_branch_bits[ i ] > KMP_MAX_BRANCH_BITS ) {
+ __kmp_msg( kmp_ms_warning, KMP_MSG( BarrReleaseValueInvalid, name, comma + 1 ), __kmp_msg_null );
+ __kmp_barrier_release_branch_bits[ i ] = __kmp_barrier_release_bb_dflt;
+ }
+ }
+ if ( __kmp_barrier_gather_branch_bits[ i ] > KMP_MAX_BRANCH_BITS ) {
+ KMP_WARNING( BarrGatherValueInvalid, name, value );
+ KMP_INFORM( Using_uint_Value, name, __kmp_barrier_gather_bb_dflt );
+ __kmp_barrier_gather_branch_bits[ i ] = __kmp_barrier_gather_bb_dflt;
+ }
+ }
+ K_DIAG(1, ("%s == %d,%d\n", __kmp_barrier_branch_bit_env_name[ i ], \
+ __kmp_barrier_gather_branch_bits [ i ], \
+ __kmp_barrier_release_branch_bits [ i ]))
+ }
+} // __kmp_stg_parse_barrier_branch_bit
+
+static void
+__kmp_stg_print_barrier_branch_bit( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ const char *var;
+ for ( int i=bs_plain_barrier; i<bs_last_barrier; i++ ) {
+ var = __kmp_barrier_branch_bit_env_name[ i ];
+ if ( strcmp( var, name) == 0 ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(__kmp_barrier_branch_bit_env_name[ i ]);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", __kmp_barrier_branch_bit_env_name[ i ] );
+ }
+ __kmp_str_buf_print( buffer, "%d,%d'\n", __kmp_barrier_gather_branch_bits [ i ], __kmp_barrier_release_branch_bits [ i ]);
+ }
+ }
+} // __kmp_stg_print_barrier_branch_bit
+
+
+// -------------------------------------------------------------------------------------------------
+// KMP_PLAIN_BARRIER_PATTERN, KMP_FORKJOIN_BARRIER_PATTERN, KMP_REDUCTION_BARRIER_PATTERN
+// -------------------------------------------------------------------------------------------------
+
+// TODO: Remove __kmp_barrier_pattern_name variable, remove loops from parse and print functions,
+// pass required data to functions through data argument.
+
+static void
+__kmp_stg_parse_barrier_pattern( char const * name, char const * value, void * data ) {
+ const char *var;
+ /* ---------- Barrier method control ------------ */
+
+ for ( int i=bs_plain_barrier; i<bs_last_barrier; i++ ) {
+ var = __kmp_barrier_pattern_env_name[ i ];
+
+ if ( ( strcmp ( var, name ) == 0 ) && ( value != 0 ) ) {
+ int j;
+ char *comma = (char *) strchr( value, ',' );
+
+ /* handle first parameter: gather pattern */
+ for ( j = bp_linear_bar; j<bp_last_bar; j++ ) {
+ if (__kmp_match_with_sentinel( __kmp_barrier_pattern_name[j], value, 1, ',' )) {
+ __kmp_barrier_gather_pattern[ i ] = (kmp_bar_pat_e) j;
+ break;
+ }
+ }
+ if ( j == bp_last_bar ) {
+ KMP_WARNING( BarrGatherValueInvalid, name, value );
+ KMP_INFORM( Using_str_Value, name, __kmp_barrier_pattern_name[ bp_linear_bar ] );
+ }
+
+ /* handle second parameter: release pattern */
+ if ( comma != NULL ) {
+ for ( j = bp_linear_bar; j < bp_last_bar; j++ ) {
+ if ( __kmp_str_match( __kmp_barrier_pattern_name[j], 1, comma + 1 ) ) {
+ __kmp_barrier_release_pattern[ i ] = (kmp_bar_pat_e) j;
+ break;
+ }
+ }
+ if (j == bp_last_bar) {
+ __kmp_msg( kmp_ms_warning, KMP_MSG( BarrReleaseValueInvalid, name, comma + 1 ), __kmp_msg_null );
+ KMP_INFORM( Using_str_Value, name, __kmp_barrier_pattern_name[ bp_linear_bar ] );
+ }
+ }
+ }
+ }
+} // __kmp_stg_parse_barrier_pattern
+
+static void
+__kmp_stg_print_barrier_pattern( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ const char *var;
+ for ( int i=bs_plain_barrier; i<bs_last_barrier; i++ ) {
+ var = __kmp_barrier_pattern_env_name[ i ];
+ if ( strcmp ( var, name ) == 0 ) {
+ int j = __kmp_barrier_gather_pattern [ i ];
+ int k = __kmp_barrier_release_pattern [ i ];
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(__kmp_barrier_pattern_env_name[ i ]);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", __kmp_barrier_pattern_env_name[ i ] );
+ }
+ __kmp_str_buf_print( buffer, "%s,%s'\n", __kmp_barrier_pattern_name [ j ], __kmp_barrier_pattern_name [ k ]);
+ }
+ }
+} // __kmp_stg_print_barrier_pattern
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ABORT_DELAY
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_abort_delay( char const * name, char const * value, void * data ) {
+ // Units of KMP_DELAY_ABORT are seconds, units of __kmp_abort_delay is milliseconds.
+ int delay = __kmp_abort_delay / 1000;
+ __kmp_stg_parse_int( name, value, 0, INT_MAX / 1000, & delay );
+ __kmp_abort_delay = delay * 1000;
+} // __kmp_stg_parse_abort_delay
+
+static void
+__kmp_stg_print_abort_delay( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_abort_delay );
+} // __kmp_stg_print_abort_delay
+
+// -------------------------------------------------------------------------------------------------
+// KMP_CPUINFO_FILE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_cpuinfo_file( char const * name, char const * value, void * data ) {
+ #if KMP_AFFINITY_SUPPORTED
+ __kmp_stg_parse_str( name, value, & __kmp_cpuinfo_file );
+ K_DIAG( 1, ( "__kmp_cpuinfo_file == %s\n", __kmp_cpuinfo_file ) );
+ #endif
+} //__kmp_stg_parse_cpuinfo_file
+
+static void
+__kmp_stg_print_cpuinfo_file( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ #if KMP_AFFINITY_SUPPORTED
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ if ( __kmp_cpuinfo_file ) {
+ __kmp_str_buf_print( buffer, "='%s'\n", __kmp_cpuinfo_file );
+ } else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ #endif
+} //__kmp_stg_print_cpuinfo_file
+
+// -------------------------------------------------------------------------------------------------
+// KMP_FORCE_REDUCTION, KMP_DETERMINISTIC_REDUCTION
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_force_reduction( char const * name, char const * value, void * data )
+{
+ kmp_stg_fr_data_t * reduction = (kmp_stg_fr_data_t *) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, reduction->rivals );
+ if ( rc ) {
+ return;
+ }; // if
+ if ( reduction->force ) {
+ if( value != 0 ) {
+ if( __kmp_str_match( "critical", 0, value ) )
+ __kmp_force_reduction_method = critical_reduce_block;
+ else if( __kmp_str_match( "atomic", 0, value ) )
+ __kmp_force_reduction_method = atomic_reduce_block;
+ else if( __kmp_str_match( "tree", 0, value ) )
+ __kmp_force_reduction_method = tree_reduce_block;
+ else {
+ KMP_FATAL( UnknownForceReduction, name, value );
+ }
+ }
+ } else {
+ __kmp_stg_parse_bool( name, value, & __kmp_determ_red );
+ if( __kmp_determ_red ) {
+ __kmp_force_reduction_method = tree_reduce_block;
+ } else {
+ __kmp_force_reduction_method = reduction_method_not_defined;
+ }
+ }
+ K_DIAG( 1, ( "__kmp_force_reduction_method == %d\n", __kmp_force_reduction_method ) );
+} // __kmp_stg_parse_force_reduction
+
+static void
+__kmp_stg_print_force_reduction( kmp_str_buf_t * buffer, char const * name, void * data ) {
+
+ kmp_stg_fr_data_t * reduction = (kmp_stg_fr_data_t *) data;
+ if ( reduction->force ) {
+ if( __kmp_force_reduction_method == critical_reduce_block) {
+ __kmp_stg_print_str( buffer, name, "critical");
+ } else if ( __kmp_force_reduction_method == atomic_reduce_block ) {
+ __kmp_stg_print_str( buffer, name, "atomic");
+ } else if ( __kmp_force_reduction_method == tree_reduce_block ) {
+ __kmp_stg_print_str( buffer, name, "tree");
+ } else {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ } else {
+ __kmp_stg_print_bool( buffer, name, __kmp_determ_red );
+ }
+
+
+} // __kmp_stg_print_force_reduction
+
+// -------------------------------------------------------------------------------------------------
+// KMP_STORAGE_MAP
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_storage_map( char const * name, char const * value, void * data ) {
+ if ( __kmp_str_match( "verbose", 1, value ) ) {
+ __kmp_storage_map = TRUE;
+ __kmp_storage_map_verbose = TRUE;
+ __kmp_storage_map_verbose_specified = TRUE;
+
+ } else {
+ __kmp_storage_map_verbose = FALSE;
+ __kmp_stg_parse_bool( name, value, & __kmp_storage_map ); // !!!
+ }; // if
+} // __kmp_stg_parse_storage_map
+
+static void
+__kmp_stg_print_storage_map( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if ( __kmp_storage_map_verbose || __kmp_storage_map_verbose_specified ) {
+ __kmp_stg_print_str( buffer, name, "verbose" );
+ } else {
+ __kmp_stg_print_bool( buffer, name, __kmp_storage_map );
+ }
+} // __kmp_stg_print_storage_map
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ALL_THREADPRIVATE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_all_threadprivate( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, __kmp_allThreadsSpecified ? __kmp_max_nth : 1, __kmp_max_nth,
+ & __kmp_tp_capacity );
+} // __kmp_stg_parse_all_threadprivate
+
+static void
+__kmp_stg_print_all_threadprivate( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_tp_capacity );
+
+}
+
+// -------------------------------------------------------------------------------------------------
+// KMP_FOREIGN_THREADS_THREADPRIVATE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_foreign_threads_threadprivate( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_foreign_tp );
+} // __kmp_stg_parse_foreign_threads_threadprivate
+
+static void
+__kmp_stg_print_foreign_threads_threadprivate( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_foreign_tp );
+} // __kmp_stg_print_foreign_threads_threadprivate
+
+
+// -------------------------------------------------------------------------------------------------
+// KMP_AFFINITY, GOMP_CPU_AFFINITY, KMP_TOPOLOGY_METHOD
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_AFFINITY_SUPPORTED
+//
+// Parse the proc id list. Return TRUE if successful, FALSE otherwise.
+//
+static int
+__kmp_parse_affinity_proc_id_list( const char *var, const char *env,
+ const char **nextEnv, char **proclist )
+{
+ const char *scan = env;
+ const char *next = scan;
+ int empty = TRUE;
+
+ *proclist = NULL;
+
+ for (;;) {
+ int start, end, stride;
+
+ SKIP_WS(scan);
+ next = scan;
+ if (*next == '\0') {
+ break;
+ }
+
+ if (*next == '{') {
+ int num;
+ next++; // skip '{'
+ SKIP_WS(next);
+ scan = next;
+
+ //
+ // Read the first integer in the set.
+ //
+ if ((*next < '0') || (*next > '9')) {
+ KMP_WARNING( AffSyntaxError, var );
+ return FALSE;
+ }
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(num >= 0);
+
+ for (;;) {
+ //
+ // Check for end of set.
+ //
+ SKIP_WS(next);
+ if (*next == '}') {
+ next++; // skip '}'
+ break;
+ }
+
+ //
+ // Skip optional comma.
+ //
+ if (*next == ',') {
+ next++;
+ }
+ SKIP_WS(next);
+
+ //
+ // Read the next integer in the set.
+ //
+ scan = next;
+ if ((*next < '0') || (*next > '9')) {
+ KMP_WARNING( AffSyntaxError, var );
+ return FALSE;
+ }
+
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(num >= 0);
+ }
+ empty = FALSE;
+
+ SKIP_WS(next);
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ continue;
+ }
+
+ //
+ // Next character is not an integer => end of list
+ //
+ if ((*next < '0') || (*next > '9')) {
+ if (empty) {
+ KMP_WARNING( AffSyntaxError, var );
+ return FALSE;
+ }
+ break;
+ }
+
+ //
+ // Read the first integer.
+ //
+ SKIP_DIGITS(next);
+ start = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(start >= 0);
+ SKIP_WS(next);
+
+ //
+ // If this isn't a range, then go on.
+ //
+ if (*next != '-') {
+ empty = FALSE;
+
+ //
+ // Skip optional comma.
+ //
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ continue;
+ }
+
+ //
+ // This is a range. Skip over the '-' and read in the 2nd int.
+ //
+ next++; // skip '-'
+ SKIP_WS(next);
+ scan = next;
+ if ((*next < '0') || (*next > '9')) {
+ KMP_WARNING( AffSyntaxError, var );
+ return FALSE;
+ }
+ SKIP_DIGITS(next);
+ end = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(end >= 0);
+
+ //
+ // Check for a stride parameter
+ //
+ stride = 1;
+ SKIP_WS(next);
+ if (*next == ':') {
+ //
+ // A stride is specified. Skip over the ':" and read the 3rd int.
+ //
+ int sign = +1;
+ next++; // skip ':'
+ SKIP_WS(next);
+ scan = next;
+ if (*next == '-') {
+ sign = -1;
+ next++;
+ SKIP_WS(next);
+ scan = next;
+ }
+ if ((*next < '0') || (*next > '9')) {
+ KMP_WARNING( AffSyntaxError, var );
+ return FALSE;
+ }
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(stride >= 0);
+ stride *= sign;
+ }
+
+ //
+ // Do some range checks.
+ //
+ if (stride == 0) {
+ KMP_WARNING( AffZeroStride, var );
+ return FALSE;
+ }
+ if (stride > 0) {
+ if (start > end) {
+ KMP_WARNING( AffStartGreaterEnd, var, start, end );
+ return FALSE;
+ }
+ }
+ else {
+ if (start < end) {
+ KMP_WARNING( AffStrideLessZero, var, start, end );
+ return FALSE;
+ }
+ }
+ if ((end - start) / stride > 65536 ) {
+ KMP_WARNING( AffRangeTooBig, var, end, start, stride );
+ return FALSE;
+ }
+
+ empty = FALSE;
+
+ //
+ // Skip optional comma.
+ //
+ SKIP_WS(next);
+ if (*next == ',') {
+ next++;
+ }
+ scan = next;
+ }
+
+ *nextEnv = next;
+
+ {
+ int len = next - env;
+ char *retlist = (char *)__kmp_allocate((len + 1) * sizeof(char));
+ KMP_MEMCPY_S(retlist, (len+1)*sizeof(char), env, len * sizeof(char));
+ retlist[len] = '\0';
+ *proclist = retlist;
+ }
+ return TRUE;
+}
+
+
+//
+// If KMP_AFFINITY is specified without a type, then
+// __kmp_affinity_notype should point to its setting.
+//
+static kmp_setting_t *__kmp_affinity_notype = NULL;
+
+static void
+__kmp_parse_affinity_env( char const * name, char const * value,
+ enum affinity_type * out_type,
+ char ** out_proclist,
+ int * out_verbose,
+ int * out_warn,
+ int * out_respect,
+ enum affinity_gran * out_gran,
+ int * out_gran_levels,
+ int * out_dups,
+ int * out_compact,
+ int * out_offset
+)
+{
+ char * buffer = NULL; // Copy of env var value.
+ char * buf = NULL; // Buffer for strtok_r() function.
+ char * next = NULL; // end of token / start of next.
+ const char * start; // start of current token (for err msgs)
+ int count = 0; // Counter of parsed integer numbers.
+ int number[ 2 ]; // Parsed numbers.
+
+ // Guards.
+ int type = 0;
+ int proclist = 0;
+ int max_proclist = 0;
+ int verbose = 0;
+ int warnings = 0;
+ int respect = 0;
+ int gran = 0;
+ int dups = 0;
+
+ KMP_ASSERT( value != NULL );
+
+ if ( TCR_4(__kmp_init_middle) ) {
+ KMP_WARNING( EnvMiddleWarn, name );
+ __kmp_env_toPrint( name, 0 );
+ return;
+ }
+ __kmp_env_toPrint( name, 1 );
+
+ buffer = __kmp_str_format( "%s", value ); // Copy env var to keep original intact.
+ buf = buffer;
+ SKIP_WS(buf);
+
+ // Helper macros.
+
+ //
+ // If we see a parse error, emit a warning and scan to the next ",".
+ //
+ // FIXME - there's got to be a better way to print an error
+ // message, hopefully without overwritting peices of buf.
+ //
+ #define EMIT_WARN(skip,errlist) \
+ { \
+ char ch; \
+ if (skip) { \
+ SKIP_TO(next, ','); \
+ } \
+ ch = *next; \
+ *next = '\0'; \
+ KMP_WARNING errlist; \
+ *next = ch; \
+ if (skip) { \
+ if (ch == ',') next++; \
+ } \
+ buf = next; \
+ }
+
+ #define _set_param(_guard,_var,_val) \
+ { \
+ if ( _guard == 0 ) { \
+ _var = _val; \
+ } else { \
+ EMIT_WARN( FALSE, ( AffParamDefined, name, start ) ); \
+ }; \
+ ++ _guard; \
+ }
+
+ #define set_type(val) _set_param( type, *out_type, val )
+ #define set_verbose(val) _set_param( verbose, *out_verbose, val )
+ #define set_warnings(val) _set_param( warnings, *out_warn, val )
+ #define set_respect(val) _set_param( respect, *out_respect, val )
+ #define set_dups(val) _set_param( dups, *out_dups, val )
+ #define set_proclist(val) _set_param( proclist, *out_proclist, val )
+
+ #define set_gran(val,levels) \
+ { \
+ if ( gran == 0 ) { \
+ *out_gran = val; \
+ *out_gran_levels = levels; \
+ } else { \
+ EMIT_WARN( FALSE, ( AffParamDefined, name, start ) ); \
+ }; \
+ ++ gran; \
+ }
+
+# if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT( ( __kmp_nested_proc_bind.bind_types != NULL )
+ && ( __kmp_nested_proc_bind.used > 0 ) );
+# endif
+
+ while ( *buf != '\0' ) {
+ start = next = buf;
+
+ if (__kmp_match_str("none", buf, (const char **)&next)) {
+ set_type( affinity_none );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("scatter", buf, (const char **)&next)) {
+ set_type( affinity_scatter );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("compact", buf, (const char **)&next)) {
+ set_type( affinity_compact );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("logical", buf, (const char **)&next)) {
+ set_type( affinity_logical );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("physical", buf, (const char **)&next)) {
+ set_type( affinity_physical );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("explicit", buf, (const char **)&next)) {
+ set_type( affinity_explicit );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("balanced", buf, (const char **)&next)) {
+ set_type( affinity_balanced );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("disabled", buf, (const char **)&next)) {
+ set_type( affinity_disabled );
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+# endif
+ buf = next;
+ } else if (__kmp_match_str("verbose", buf, (const char **)&next)) {
+ set_verbose( TRUE );
+ buf = next;
+ } else if (__kmp_match_str("noverbose", buf, (const char **)&next)) {
+ set_verbose( FALSE );
+ buf = next;
+ } else if (__kmp_match_str("warnings", buf, (const char **)&next)) {
+ set_warnings( TRUE );
+ buf = next;
+ } else if (__kmp_match_str("nowarnings", buf, (const char **)&next)) {
+ set_warnings( FALSE );
+ buf = next;
+ } else if (__kmp_match_str("respect", buf, (const char **)&next)) {
+ set_respect( TRUE );
+ buf = next;
+ } else if (__kmp_match_str("norespect", buf, (const char **)&next)) {
+ set_respect( FALSE );
+ buf = next;
+ } else if (__kmp_match_str("duplicates", buf, (const char **)&next)
+ || __kmp_match_str("dups", buf, (const char **)&next)) {
+ set_dups( TRUE );
+ buf = next;
+ } else if (__kmp_match_str("noduplicates", buf, (const char **)&next)
+ || __kmp_match_str("nodups", buf, (const char **)&next)) {
+ set_dups( FALSE );
+ buf = next;
+ } else if (__kmp_match_str("granularity", buf, (const char **)&next)
+ || __kmp_match_str("gran", buf, (const char **)&next)) {
+ SKIP_WS(next);
+ if (*next != '=') {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+ next++; // skip '='
+ SKIP_WS(next);
+
+ buf = next;
+ if (__kmp_match_str("fine", buf, (const char **)&next)) {
+ set_gran( affinity_gran_fine, -1 );
+ buf = next;
+ } else if (__kmp_match_str("thread", buf, (const char **)&next)) {
+ set_gran( affinity_gran_thread, -1 );
+ buf = next;
+ } else if (__kmp_match_str("core", buf, (const char **)&next)) {
+ set_gran( affinity_gran_core, -1 );
+ buf = next;
+ } else if (__kmp_match_str("package", buf, (const char **)&next)) {
+ set_gran( affinity_gran_package, -1 );
+ buf = next;
+ } else if (__kmp_match_str("node", buf, (const char **)&next)) {
+ set_gran( affinity_gran_node, -1 );
+ buf = next;
+# if KMP_GROUP_AFFINITY
+ } else if (__kmp_match_str("group", buf, (const char **)&next)) {
+ set_gran( affinity_gran_group, -1 );
+ buf = next;
+# endif /* KMP_GROUP AFFINITY */
+ } else if ((*buf >= '0') && (*buf <= '9')) {
+ int n;
+ next = buf;
+ SKIP_DIGITS(next);
+ n = __kmp_str_to_int( buf, *next );
+ KMP_ASSERT(n >= 0);
+ buf = next;
+ set_gran( affinity_gran_default, n );
+ } else {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+ } else if (__kmp_match_str("proclist", buf, (const char **)&next)) {
+ char *temp_proclist;
+
+ SKIP_WS(next);
+ if (*next != '=') {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+ next++; // skip '='
+ SKIP_WS(next);
+ if (*next != '[') {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+ next++; // skip '['
+ buf = next;
+ if (! __kmp_parse_affinity_proc_id_list(name, buf,
+ (const char **)&next, &temp_proclist)) {
+ //
+ // warning already emitted.
+ //
+ SKIP_TO(next, ']');
+ if (*next == ']') next++;
+ SKIP_TO(next, ',');
+ if (*next == ',') next++;
+ buf = next;
+ continue;
+ }
+ if (*next != ']') {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+ next++; // skip ']'
+ set_proclist( temp_proclist );
+ } else if ((*buf >= '0') && (*buf <= '9')) {
+ // Parse integer numbers -- permute and offset.
+ int n;
+ next = buf;
+ SKIP_DIGITS(next);
+ n = __kmp_str_to_int( buf, *next );
+ KMP_ASSERT(n >= 0);
+ buf = next;
+ if ( count < 2 ) {
+ number[ count ] = n;
+ } else {
+ KMP_WARNING( AffManyParams, name, start );
+ }; // if
+ ++ count;
+ } else {
+ EMIT_WARN( TRUE, ( AffInvalidParam, name, start ) );
+ continue;
+ }
+
+ SKIP_WS(next);
+ if (*next == ',') {
+ next++;
+ SKIP_WS(next);
+ }
+ else if (*next != '\0') {
+ const char *temp = next;
+ EMIT_WARN( TRUE, ( ParseExtraCharsWarn, name, temp ) );
+ continue;
+ }
+ buf = next;
+ } // while
+
+ #undef EMIT_WARN
+ #undef _set_param
+ #undef set_type
+ #undef set_verbose
+ #undef set_warnings
+ #undef set_respect
+ #undef set_granularity
+
+ KMP_INTERNAL_FREE( buffer );
+
+ if ( proclist ) {
+ if ( ! type ) {
+ KMP_WARNING( AffProcListNoType, name );
+ __kmp_affinity_type = affinity_explicit;
+ }
+ else if ( __kmp_affinity_type != affinity_explicit ) {
+ KMP_WARNING( AffProcListNotExplicit, name );
+ KMP_ASSERT( *out_proclist != NULL );
+ KMP_INTERNAL_FREE( *out_proclist );
+ *out_proclist = NULL;
+ }
+ }
+ switch ( *out_type ) {
+ case affinity_logical:
+ case affinity_physical: {
+ if ( count > 0 ) {
+ *out_offset = number[ 0 ];
+ }; // if
+ if ( count > 1 ) {
+ KMP_WARNING( AffManyParamsForLogic, name, number[ 1 ] );
+ }; // if
+ } break;
+ case affinity_balanced: {
+ if ( count > 0 ) {
+ *out_compact = number[ 0 ];
+ }; // if
+ if ( count > 1 ) {
+ *out_offset = number[ 1 ];
+ }; // if
+
+ if ( __kmp_affinity_gran == affinity_gran_default ) {
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic ) {
+ if( __kmp_affinity_verbose || __kmp_affinity_warnings ) {
+ KMP_WARNING( AffGranUsing, "KMP_AFFINITY", "fine" );
+ }
+ __kmp_affinity_gran = affinity_gran_fine;
+ } else
+#endif
+ {
+ if( __kmp_affinity_verbose || __kmp_affinity_warnings ) {
+ KMP_WARNING( AffGranUsing, "KMP_AFFINITY", "core" );
+ }
+ __kmp_affinity_gran = affinity_gran_core;
+ }
+ }
+ } break;
+ case affinity_scatter:
+ case affinity_compact: {
+ if ( count > 0 ) {
+ *out_compact = number[ 0 ];
+ }; // if
+ if ( count > 1 ) {
+ *out_offset = number[ 1 ];
+ }; // if
+ } break;
+ case affinity_explicit: {
+ if ( *out_proclist == NULL ) {
+ KMP_WARNING( AffNoProcList, name );
+ __kmp_affinity_type = affinity_none;
+ }
+ if ( count > 0 ) {
+ KMP_WARNING( AffNoParam, name, "explicit" );
+ }
+ } break;
+ case affinity_none: {
+ if ( count > 0 ) {
+ KMP_WARNING( AffNoParam, name, "none" );
+ }; // if
+ } break;
+ case affinity_disabled: {
+ if ( count > 0 ) {
+ KMP_WARNING( AffNoParam, name, "disabled" );
+ }; // if
+ } break;
+ case affinity_default: {
+ if ( count > 0 ) {
+ KMP_WARNING( AffNoParam, name, "default" );
+ }; // if
+ } break;
+ default: {
+ KMP_ASSERT( 0 );
+ };
+ }; // switch
+} // __kmp_parse_affinity_env
+
+static void
+__kmp_stg_parse_affinity( char const * name, char const * value, void * data )
+{
+ kmp_setting_t **rivals = (kmp_setting_t **) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }
+
+ __kmp_parse_affinity_env( name, value, & __kmp_affinity_type,
+ & __kmp_affinity_proclist, & __kmp_affinity_verbose,
+ & __kmp_affinity_warnings, & __kmp_affinity_respect_mask,
+ & __kmp_affinity_gran, & __kmp_affinity_gran_levels,
+ & __kmp_affinity_dups, & __kmp_affinity_compact,
+ & __kmp_affinity_offset );
+
+} // __kmp_stg_parse_affinity
+
+static void
+__kmp_stg_print_affinity( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", name );
+ }
+ if ( __kmp_affinity_verbose ) {
+ __kmp_str_buf_print( buffer, "%s,", "verbose");
+ } else {
+ __kmp_str_buf_print( buffer, "%s,", "noverbose");
+ }
+ if ( __kmp_affinity_warnings ) {
+ __kmp_str_buf_print( buffer, "%s,", "warnings");
+ } else {
+ __kmp_str_buf_print( buffer, "%s,", "nowarnings");
+ }
+ if ( KMP_AFFINITY_CAPABLE() ) {
+ if ( __kmp_affinity_respect_mask ) {
+ __kmp_str_buf_print( buffer, "%s,", "respect");
+ } else {
+ __kmp_str_buf_print( buffer, "%s,", "norespect");
+ }
+ switch ( __kmp_affinity_gran ) {
+ case affinity_gran_default:
+ __kmp_str_buf_print( buffer, "%s", "granularity=default,");
+ break;
+ case affinity_gran_fine:
+ __kmp_str_buf_print( buffer, "%s", "granularity=fine,");
+ break;
+ case affinity_gran_thread:
+ __kmp_str_buf_print( buffer, "%s", "granularity=thread,");
+ break;
+ case affinity_gran_core:
+ __kmp_str_buf_print( buffer, "%s", "granularity=core,");
+ break;
+ case affinity_gran_package:
+ __kmp_str_buf_print( buffer, "%s", "granularity=package,");
+ break;
+ case affinity_gran_node:
+ __kmp_str_buf_print( buffer, "%s", "granularity=node,");
+ break;
+# if KMP_GROUP_AFFINITY
+ case affinity_gran_group:
+ __kmp_str_buf_print( buffer, "%s", "granularity=group,");
+ break;
+# endif /* KMP_GROUP_AFFINITY */
+ }
+ if ( __kmp_affinity_dups ) {
+ __kmp_str_buf_print( buffer, "%s,", "duplicates");
+ } else {
+ __kmp_str_buf_print( buffer, "%s,", "noduplicates");
+ }
+ }
+ if ( ! KMP_AFFINITY_CAPABLE() ) {
+ __kmp_str_buf_print( buffer, "%s", "disabled" );
+ }
+ else switch ( __kmp_affinity_type ){
+ case affinity_none:
+ __kmp_str_buf_print( buffer, "%s", "none");
+ break;
+ case affinity_physical:
+ __kmp_str_buf_print( buffer, "%s,%d", "physical",
+ __kmp_affinity_offset );
+ break;
+ case affinity_logical:
+ __kmp_str_buf_print( buffer, "%s,%d", "logical",
+ __kmp_affinity_offset );
+ break;
+ case affinity_compact:
+ __kmp_str_buf_print( buffer, "%s,%d,%d", "compact",
+ __kmp_affinity_compact, __kmp_affinity_offset );
+ break;
+ case affinity_scatter:
+ __kmp_str_buf_print( buffer, "%s,%d,%d", "scatter",
+ __kmp_affinity_compact, __kmp_affinity_offset );
+ break;
+ case affinity_explicit:
+ __kmp_str_buf_print( buffer, "%s=[%s],%s", "proclist",
+ __kmp_affinity_proclist, "explicit" );
+ break;
+ case affinity_balanced:
+ __kmp_str_buf_print( buffer, "%s,%d,%d", "balanced",
+ __kmp_affinity_compact, __kmp_affinity_offset );
+ break;
+ case affinity_disabled:
+ __kmp_str_buf_print( buffer, "%s", "disabled");
+ break;
+ case affinity_default:
+ __kmp_str_buf_print( buffer, "%s", "default");
+ break;
+ default:
+ __kmp_str_buf_print( buffer, "%s", "<unknown>");
+ break;
+ }
+ __kmp_str_buf_print( buffer, "'\n" );
+} //__kmp_stg_print_affinity
+
+# ifdef KMP_GOMP_COMPAT
+
+static void
+__kmp_stg_parse_gomp_cpu_affinity( char const * name, char const * value, void * data )
+{
+ const char * next = NULL;
+ char * temp_proclist;
+ kmp_setting_t **rivals = (kmp_setting_t **) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }
+
+ if ( TCR_4(__kmp_init_middle) ) {
+ KMP_WARNING( EnvMiddleWarn, name );
+ __kmp_env_toPrint( name, 0 );
+ return;
+ }
+
+ __kmp_env_toPrint( name, 1 );
+
+ if ( __kmp_parse_affinity_proc_id_list( name, value, &next,
+ &temp_proclist )) {
+ SKIP_WS(next);
+ if (*next == '\0') {
+ //
+ // GOMP_CPU_AFFINITY => granularity=fine,explicit,proclist=...
+ //
+ __kmp_affinity_proclist = temp_proclist;
+ __kmp_affinity_type = affinity_explicit;
+ __kmp_affinity_gran = affinity_gran_fine;
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ }
+ else {
+ KMP_WARNING( AffSyntaxError, name );
+ if (temp_proclist != NULL) {
+ KMP_INTERNAL_FREE((void *)temp_proclist);
+ }
+ }
+ }
+ else {
+ //
+ // Warning already emitted
+ //
+ __kmp_affinity_type = affinity_none;
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+# endif
+ }
+} // __kmp_stg_parse_gomp_cpu_affinity
+
+# endif /* KMP_GOMP_COMPAT */
+
+
+# if OMP_40_ENABLED
+
+/*-----------------------------------------------------------------------------
+
+The OMP_PLACES proc id list parser. Here is the grammar:
+
+place_list := place
+place_list := place , place_list
+place := num
+place := place : num
+place := place : num : signed
+place := { subplacelist }
+place := ! place // (lowest priority)
+subplace_list := subplace
+subplace_list := subplace , subplace_list
+subplace := num
+subplace := num : num
+subplace := num : num : signed
+signed := num
+signed := + signed
+signed := - signed
+
+-----------------------------------------------------------------------------*/
+
+static int
+__kmp_parse_subplace_list( const char *var, const char **scan )
+{
+ const char *next;
+
+ for (;;) {
+ int start, count, stride;
+
+ //
+ // Read in the starting proc id
+ //
+ SKIP_WS(*scan);
+ if ((**scan < '0') || (**scan > '9')) {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ next = *scan;
+ SKIP_DIGITS(next);
+ start = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(start >= 0);
+ *scan = next;
+
+ //
+ // valid follow sets are ',' ':' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}') {
+ break;
+ }
+ if (**scan == ',') {
+ (*scan)++; // skip ','
+ continue;
+ }
+ if (**scan != ':') {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ (*scan)++; // skip ':'
+
+ //
+ // Read count parameter
+ //
+ SKIP_WS(*scan);
+ if ((**scan < '0') || (**scan > '9')) {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ next = *scan;
+ SKIP_DIGITS(next);
+ count = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(count >= 0);
+ *scan = next;
+
+ //
+ // valid follow sets are ',' ':' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}') {
+ break;
+ }
+ if (**scan == ',') {
+ (*scan)++; // skip ','
+ continue;
+ }
+ if (**scan != ':') {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ (*scan)++; // skip ':'
+
+ //
+ // Read stride parameter
+ //
+ int sign = +1;
+ for (;;) {
+ SKIP_WS(*scan);
+ if (**scan == '+') {
+ (*scan)++; // skip '+'
+ continue;
+ }
+ if (**scan == '-') {
+ sign *= -1;
+ (*scan)++; // skip '-'
+ continue;
+ }
+ break;
+ }
+ SKIP_WS(*scan);
+ if ((**scan < '0') || (**scan > '9')) {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ next = *scan;
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(stride >= 0);
+ *scan = next;
+ stride *= sign;
+
+ //
+ // valid follow sets are ',' and '}'
+ //
+ SKIP_WS(*scan);
+ if (**scan == '}') {
+ break;
+ }
+ if (**scan == ',') {
+ (*scan)++; // skip ','
+ continue;
+ }
+
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static int
+__kmp_parse_place( const char *var, const char ** scan )
+{
+ const char *next;
+
+ //
+ // valid follow sets are '{' '!' and num
+ //
+ SKIP_WS(*scan);
+ if (**scan == '{') {
+ (*scan)++; // skip '{'
+ if (! __kmp_parse_subplace_list(var, scan)) {
+ return FALSE;
+ }
+ if (**scan != '}') {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ (*scan)++; // skip '}'
+ }
+ else if (**scan == '!') {
+ (*scan)++; // skip '!'
+ return __kmp_parse_place(var, scan); //'!' has lower precedence than ':'
+ }
+ else if ((**scan >= '0') && (**scan <= '9')) {
+ next = *scan;
+ SKIP_DIGITS(next);
+ int proc = __kmp_str_to_int(*scan, *next);
+ KMP_ASSERT(proc >= 0);
+ *scan = next;
+ }
+ else {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static int
+__kmp_parse_place_list( const char *var, const char *env, char **place_list )
+{
+ const char *scan = env;
+ const char *next = scan;
+
+ for (;;) {
+ int start, count, stride;
+
+ if (! __kmp_parse_place(var, &scan)) {
+ return FALSE;
+ }
+
+ //
+ // valid follow sets are ',' ':' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0') {
+ break;
+ }
+ if (*scan == ',') {
+ scan++; // skip ','
+ continue;
+ }
+ if (*scan != ':') {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ scan++; // skip ':'
+
+ //
+ // Read count parameter
+ //
+ SKIP_WS(scan);
+ if ((*scan < '0') || (*scan > '9')) {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ next = scan;
+ SKIP_DIGITS(next);
+ count = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(count >= 0);
+ scan = next;
+
+ //
+ // valid follow sets are ',' ':' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0') {
+ break;
+ }
+ if (*scan == ',') {
+ scan++; // skip ','
+ continue;
+ }
+ if (*scan != ':') {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ scan++; // skip ':'
+
+ //
+ // Read stride parameter
+ //
+ int sign = +1;
+ for (;;) {
+ SKIP_WS(scan);
+ if (*scan == '+') {
+ scan++; // skip '+'
+ continue;
+ }
+ if (*scan == '-') {
+ sign *= -1;
+ scan++; // skip '-'
+ continue;
+ }
+ break;
+ }
+ SKIP_WS(scan);
+ if ((*scan < '0') || (*scan > '9')) {
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+ next = scan;
+ SKIP_DIGITS(next);
+ stride = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(stride >= 0);
+ scan = next;
+ stride *= sign;
+
+ //
+ // valid follow sets are ',' and EOL
+ //
+ SKIP_WS(scan);
+ if (*scan == '\0') {
+ break;
+ }
+ if (*scan == ',') {
+ scan++; // skip ','
+ continue;
+ }
+
+ KMP_WARNING( SyntaxErrorUsing, var, "\"threads\"" );
+ return FALSE;
+ }
+
+ {
+ int len = scan - env;
+ char *retlist = (char *)__kmp_allocate((len + 1) * sizeof(char));
+ KMP_MEMCPY_S(retlist, (len+1)*sizeof(char), env, len * sizeof(char));
+ retlist[len] = '\0';
+ *place_list = retlist;
+ }
+ return TRUE;
+}
+
+static void
+__kmp_stg_parse_places( char const * name, char const * value, void * data )
+{
+ int count;
+ const char *scan = value;
+ const char *next = scan;
+ const char *kind = "\"threads\"";
+ kmp_setting_t **rivals = (kmp_setting_t **) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }
+
+ //
+ // If OMP_PROC_BIND is not specified but OMP_PLACES is,
+ // then let OMP_PROC_BIND default to true.
+ //
+ if ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_default ) {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_true;
+ }
+
+ //__kmp_affinity_num_places = 0;
+
+ if ( __kmp_match_str( "threads", scan, &next ) ) {
+ scan = next;
+ __kmp_affinity_type = affinity_compact;
+ __kmp_affinity_gran = affinity_gran_thread;
+ __kmp_affinity_dups = FALSE;
+ kind = "\"threads\"";
+ }
+ else if ( __kmp_match_str( "cores", scan, &next ) ) {
+ scan = next;
+ __kmp_affinity_type = affinity_compact;
+ __kmp_affinity_gran = affinity_gran_core;
+ __kmp_affinity_dups = FALSE;
+ kind = "\"cores\"";
+ }
+ else if ( __kmp_match_str( "sockets", scan, &next ) ) {
+ scan = next;
+ __kmp_affinity_type = affinity_compact;
+ __kmp_affinity_gran = affinity_gran_package;
+ __kmp_affinity_dups = FALSE;
+ kind = "\"sockets\"";
+ }
+ else {
+ if ( __kmp_affinity_proclist != NULL ) {
+ KMP_INTERNAL_FREE( (void *)__kmp_affinity_proclist );
+ __kmp_affinity_proclist = NULL;
+ }
+ if ( __kmp_parse_place_list( name, value, &__kmp_affinity_proclist ) ) {
+ __kmp_affinity_type = affinity_explicit;
+ __kmp_affinity_gran = affinity_gran_fine;
+ __kmp_affinity_dups = FALSE;
+ if ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_default ) {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_true;
+ }
+ }
+ return;
+ }
+
+ if ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_default ) {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_true;
+ }
+
+ SKIP_WS(scan);
+ if ( *scan == '\0' ) {
+ return;
+ }
+
+ //
+ // Parse option count parameter in parentheses
+ //
+ if ( *scan != '(' ) {
+ KMP_WARNING( SyntaxErrorUsing, name, kind );
+ return;
+ }
+ scan++; // skip '('
+
+ SKIP_WS(scan);
+ next = scan;
+ SKIP_DIGITS(next);
+ count = __kmp_str_to_int(scan, *next);
+ KMP_ASSERT(count >= 0);
+ scan = next;
+
+ SKIP_WS(scan);
+ if ( *scan != ')' ) {
+ KMP_WARNING( SyntaxErrorUsing, name, kind );
+ return;
+ }
+ scan++; // skip ')'
+
+ SKIP_WS(scan);
+ if ( *scan != '\0' ) {
+ KMP_WARNING( ParseExtraCharsWarn, name, scan );
+ }
+ __kmp_affinity_num_places = count;
+}
+
+static void
+__kmp_stg_print_places( kmp_str_buf_t * buffer, char const * name,
+ void * data )
+{
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ if ( ( __kmp_nested_proc_bind.used == 0 )
+ || ( __kmp_nested_proc_bind.bind_types == NULL )
+ || ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_false ) ) {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ else if ( __kmp_affinity_type == affinity_explicit ) {
+ if ( __kmp_affinity_proclist != NULL ) {
+ __kmp_str_buf_print( buffer, "='%s'\n", __kmp_affinity_proclist );
+ }
+ else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ }
+ else if ( __kmp_affinity_type == affinity_compact ) {
+ int num;
+ if ( __kmp_affinity_num_masks > 0 ) {
+ num = __kmp_affinity_num_masks;
+ }
+ else if ( __kmp_affinity_num_places > 0 ) {
+ num = __kmp_affinity_num_places;
+ }
+ else {
+ num = 0;
+ }
+ if ( __kmp_affinity_gran == affinity_gran_thread ) {
+ if ( num > 0 ) {
+ __kmp_str_buf_print( buffer, "='threads(%d)'\n", num );
+ }
+ else {
+ __kmp_str_buf_print( buffer, "='threads'\n" );
+ }
+ }
+ else if ( __kmp_affinity_gran == affinity_gran_core ) {
+ if ( num > 0 ) {
+ __kmp_str_buf_print( buffer, "='cores(%d)' \n", num );
+ }
+ else {
+ __kmp_str_buf_print( buffer, "='cores'\n" );
+ }
+ }
+ else if ( __kmp_affinity_gran == affinity_gran_package ) {
+ if ( num > 0 ) {
+ __kmp_str_buf_print( buffer, "='sockets(%d)'\n", num );
+ }
+ else {
+ __kmp_str_buf_print( buffer, "='sockets'\n" );
+ }
+ }
+ else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ }
+ else {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+}
+
+# endif /* OMP_40_ENABLED */
+
+# if (! OMP_40_ENABLED)
+
+static void
+__kmp_stg_parse_proc_bind( char const * name, char const * value, void * data )
+{
+ int enabled;
+ kmp_setting_t **rivals = (kmp_setting_t **) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }
+
+ //
+ // in OMP 3.1, OMP_PROC_BIND is strictly a boolean
+ //
+ __kmp_stg_parse_bool( name, value, & enabled );
+ if ( enabled ) {
+ //
+ // OMP_PROC_BIND => granularity=fine,scatter on MIC
+ // OMP_PROC_BIND => granularity=core,scatter elsewhere
+ //
+ __kmp_affinity_type = affinity_scatter;
+# if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic )
+ __kmp_affinity_gran = affinity_gran_fine;
+ else
+# endif
+ __kmp_affinity_gran = affinity_gran_core;
+ }
+ else {
+ __kmp_affinity_type = affinity_none;
+ }
+} // __kmp_parse_proc_bind
+
+# endif /* if (! OMP_40_ENABLED) */
+
+
+static void
+__kmp_stg_parse_topology_method( char const * name, char const * value,
+ void * data ) {
+ if ( __kmp_str_match( "all", 1, value ) ) {
+ __kmp_affinity_top_method = affinity_top_method_all;
+ }
+# if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ else if ( __kmp_str_match( "x2apic id", 9, value )
+ || __kmp_str_match( "x2apic_id", 9, value )
+ || __kmp_str_match( "x2apic-id", 9, value )
+ || __kmp_str_match( "x2apicid", 8, value )
+ || __kmp_str_match( "cpuid leaf 11", 13, value )
+ || __kmp_str_match( "cpuid_leaf_11", 13, value )
+ || __kmp_str_match( "cpuid-leaf-11", 13, value )
+ || __kmp_str_match( "cpuid leaf11", 12, value )
+ || __kmp_str_match( "cpuid_leaf11", 12, value )
+ || __kmp_str_match( "cpuid-leaf11", 12, value )
+ || __kmp_str_match( "cpuidleaf 11", 12, value )
+ || __kmp_str_match( "cpuidleaf_11", 12, value )
+ || __kmp_str_match( "cpuidleaf-11", 12, value )
+ || __kmp_str_match( "cpuidleaf11", 11, value )
+ || __kmp_str_match( "cpuid 11", 8, value )
+ || __kmp_str_match( "cpuid_11", 8, value )
+ || __kmp_str_match( "cpuid-11", 8, value )
+ || __kmp_str_match( "cpuid11", 7, value )
+ || __kmp_str_match( "leaf 11", 7, value )
+ || __kmp_str_match( "leaf_11", 7, value )
+ || __kmp_str_match( "leaf-11", 7, value )
+ || __kmp_str_match( "leaf11", 6, value ) ) {
+ __kmp_affinity_top_method = affinity_top_method_x2apicid;
+ }
+ else if ( __kmp_str_match( "apic id", 7, value )
+ || __kmp_str_match( "apic_id", 7, value )
+ || __kmp_str_match( "apic-id", 7, value )
+ || __kmp_str_match( "apicid", 6, value )
+ || __kmp_str_match( "cpuid leaf 4", 12, value )
+ || __kmp_str_match( "cpuid_leaf_4", 12, value )
+ || __kmp_str_match( "cpuid-leaf-4", 12, value )
+ || __kmp_str_match( "cpuid leaf4", 11, value )
+ || __kmp_str_match( "cpuid_leaf4", 11, value )
+ || __kmp_str_match( "cpuid-leaf4", 11, value )
+ || __kmp_str_match( "cpuidleaf 4", 11, value )
+ || __kmp_str_match( "cpuidleaf_4", 11, value )
+ || __kmp_str_match( "cpuidleaf-4", 11, value )
+ || __kmp_str_match( "cpuidleaf4", 10, value )
+ || __kmp_str_match( "cpuid 4", 7, value )
+ || __kmp_str_match( "cpuid_4", 7, value )
+ || __kmp_str_match( "cpuid-4", 7, value )
+ || __kmp_str_match( "cpuid4", 6, value )
+ || __kmp_str_match( "leaf 4", 6, value )
+ || __kmp_str_match( "leaf_4", 6, value )
+ || __kmp_str_match( "leaf-4", 6, value )
+ || __kmp_str_match( "leaf4", 5, value ) ) {
+ __kmp_affinity_top_method = affinity_top_method_apicid;
+ }
+# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+ else if ( __kmp_str_match( "/proc/cpuinfo", 2, value )
+ || __kmp_str_match( "cpuinfo", 5, value )) {
+ __kmp_affinity_top_method = affinity_top_method_cpuinfo;
+ }
+# if KMP_GROUP_AFFINITY
+ else if ( __kmp_str_match( "group", 1, value ) ) {
+ __kmp_affinity_top_method = affinity_top_method_group;
+ }
+# endif /* KMP_GROUP_AFFINITY */
+ else if ( __kmp_str_match( "flat", 1, value ) ) {
+ __kmp_affinity_top_method = affinity_top_method_flat;
+ }
+# if KMP_USE_HWLOC
+ else if ( __kmp_str_match( "hwloc", 1, value) ) {
+ __kmp_affinity_top_method = affinity_top_method_hwloc;
+ }
+# endif
+ else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }
+} // __kmp_stg_parse_topology_method
+
+static void
+__kmp_stg_print_topology_method( kmp_str_buf_t * buffer, char const * name,
+ void * data ) {
+# if KMP_DEBUG
+ char const * value = NULL;
+
+ switch ( __kmp_affinity_top_method ) {
+ case affinity_top_method_default:
+ value = "default";
+ break;
+
+ case affinity_top_method_all:
+ value = "all";
+ break;
+
+# if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ case affinity_top_method_x2apicid:
+ value = "x2APIC id";
+ break;
+
+ case affinity_top_method_apicid:
+ value = "APIC id";
+ break;
+# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ case affinity_top_method_cpuinfo:
+ value = "cpuinfo";
+ break;
+
+# if KMP_GROUP_AFFINITY
+ case affinity_top_method_group:
+ value = "group";
+ break;
+# endif /* KMP_GROUP_AFFINITY */
+
+ case affinity_top_method_flat:
+ value = "flat";
+ break;
+ }
+
+ if ( value != NULL ) {
+ __kmp_stg_print_str( buffer, name, value );
+ }
+# endif /* KMP_DEBUG */
+} // __kmp_stg_print_topology_method
+
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+
+#if OMP_40_ENABLED
+
+//
+// OMP_PROC_BIND / bind-var is functional on all 4.0 builds, including OS X*
+// OMP_PLACES / place-partition-var is not.
+//
+static void
+__kmp_stg_parse_proc_bind( char const * name, char const * value, void * data )
+{
+ kmp_setting_t **rivals = (kmp_setting_t **) data;
+ int rc;
+
+ rc = __kmp_stg_check_rivals( name, value, rivals );
+ if ( rc ) {
+ return;
+ }
+
+ //
+ // in OMP 4.0 OMP_PROC_BIND is a vector of proc_bind types.
+ //
+ KMP_DEBUG_ASSERT( (__kmp_nested_proc_bind.bind_types != NULL)
+ && ( __kmp_nested_proc_bind.used > 0 ) );
+
+ const char *buf = value;
+ const char *next;
+ int num;
+ SKIP_WS( buf );
+ if ( (*buf >= '0') && (*buf <= '9') ) {
+ next = buf;
+ SKIP_DIGITS( next );
+ num = __kmp_str_to_int( buf, *next );
+ KMP_ASSERT( num >= 0 );
+ buf = next;
+ SKIP_WS( buf );
+ }
+ else {
+ num = -1;
+ }
+
+ next = buf;
+ if ( __kmp_match_str( "disabled", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+# if KMP_AFFINITY_SUPPORTED
+ __kmp_affinity_type = affinity_disabled;
+# endif /* KMP_AFFINITY_SUPPORTED */
+ __kmp_nested_proc_bind.used = 1;
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+ }
+ else if ( ( num == (int)proc_bind_false )
+ || __kmp_match_str( "false", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+# if KMP_AFFINITY_SUPPORTED
+ __kmp_affinity_type = affinity_none;
+# endif /* KMP_AFFINITY_SUPPORTED */
+ __kmp_nested_proc_bind.used = 1;
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+ }
+ else if ( ( num == (int)proc_bind_true )
+ || __kmp_match_str( "true", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+ __kmp_nested_proc_bind.used = 1;
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_true;
+ }
+ else {
+ //
+ // Count the number of values in the env var string
+ //
+ const char *scan;
+ int nelem = 1;
+ for ( scan = buf; *scan != '\0'; scan++ ) {
+ if ( *scan == ',' ) {
+ nelem++;
+ }
+ }
+
+ //
+ // Create / expand the nested proc_bind array as needed
+ //
+ if ( __kmp_nested_proc_bind.size < nelem ) {
+ __kmp_nested_proc_bind.bind_types = (kmp_proc_bind_t *)
+ KMP_INTERNAL_REALLOC( __kmp_nested_proc_bind.bind_types,
+ sizeof(kmp_proc_bind_t) * nelem );
+ if ( __kmp_nested_proc_bind.bind_types == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }
+ __kmp_nested_proc_bind.size = nelem;
+ }
+ __kmp_nested_proc_bind.used = nelem;
+
+ //
+ // Save values in the nested proc_bind array
+ //
+ int i = 0;
+ for (;;) {
+ enum kmp_proc_bind_t bind;
+
+ if ( ( num == (int)proc_bind_master )
+ || __kmp_match_str( "master", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+ bind = proc_bind_master;
+ }
+ else if ( ( num == (int)proc_bind_close )
+ || __kmp_match_str( "close", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+ bind = proc_bind_close;
+ }
+ else if ( ( num == (int)proc_bind_spread )
+ || __kmp_match_str( "spread", buf, &next ) ) {
+ buf = next;
+ SKIP_WS( buf );
+ bind = proc_bind_spread;
+ }
+ else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+ __kmp_nested_proc_bind.used = 1;
+ return;
+ }
+
+ __kmp_nested_proc_bind.bind_types[i++] = bind;
+ if ( i >= nelem ) {
+ break;
+ }
+ KMP_DEBUG_ASSERT( *buf == ',' );
+ buf++;
+ SKIP_WS( buf );
+
+ //
+ // Read next value if it was specified as an integer
+ //
+ if ( (*buf >= '0') && (*buf <= '9') ) {
+ next = buf;
+ SKIP_DIGITS( next );
+ num = __kmp_str_to_int( buf, *next );
+ KMP_ASSERT( num >= 0 );
+ buf = next;
+ SKIP_WS( buf );
+ }
+ else {
+ num = -1;
+ }
+ }
+ SKIP_WS( buf );
+ }
+ if ( *buf != '\0' ) {
+ KMP_WARNING( ParseExtraCharsWarn, name, buf );
+ }
+}
+
+
+static void
+__kmp_stg_print_proc_bind( kmp_str_buf_t * buffer, char const * name,
+ void * data )
+{
+ int nelem = __kmp_nested_proc_bind.used;
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME;
+ } else {
+ __kmp_str_buf_print( buffer, " %s", name );
+ }
+ if ( nelem == 0 ) {
+ __kmp_str_buf_print( buffer, ": %s\n", KMP_I18N_STR( NotDefined ) );
+ }
+ else {
+ int i;
+ __kmp_str_buf_print( buffer, "='", name );
+ for ( i = 0; i < nelem; i++ ) {
+ switch ( __kmp_nested_proc_bind.bind_types[i] ) {
+ case proc_bind_false:
+ __kmp_str_buf_print( buffer, "false" );
+ break;
+
+ case proc_bind_true:
+ __kmp_str_buf_print( buffer, "true" );
+ break;
+
+ case proc_bind_master:
+ __kmp_str_buf_print( buffer, "master" );
+ break;
+
+ case proc_bind_close:
+ __kmp_str_buf_print( buffer, "close" );
+ break;
+
+ case proc_bind_spread:
+ __kmp_str_buf_print( buffer, "spread" );
+ break;
+
+ case proc_bind_intel:
+ __kmp_str_buf_print( buffer, "intel" );
+ break;
+
+ case proc_bind_default:
+ __kmp_str_buf_print( buffer, "default" );
+ break;
+ }
+ if ( i < nelem - 1 ) {
+ __kmp_str_buf_print( buffer, "," );
+ }
+ }
+ __kmp_str_buf_print( buffer, "'\n" );
+ }
+}
+
+#endif /* OMP_40_ENABLED */
+
+
+// -------------------------------------------------------------------------------------------------
+// OMP_DYNAMIC
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_omp_dynamic( char const * name, char const * value, void * data )
+{
+ __kmp_stg_parse_bool( name, value, & (__kmp_global.g.g_dynamic) );
+} // __kmp_stg_parse_omp_dynamic
+
+static void
+__kmp_stg_print_omp_dynamic( kmp_str_buf_t * buffer, char const * name, void * data )
+{
+ __kmp_stg_print_bool( buffer, name, __kmp_global.g.g_dynamic );
+} // __kmp_stg_print_omp_dynamic
+
+static void
+__kmp_stg_parse_kmp_dynamic_mode( char const * name, char const * value, void * data )
+{
+ if ( TCR_4(__kmp_init_parallel) ) {
+ KMP_WARNING( EnvParallelWarn, name );
+ __kmp_env_toPrint( name, 0 );
+ return;
+ }
+#ifdef USE_LOAD_BALANCE
+ else if ( __kmp_str_match( "load balance", 2, value )
+ || __kmp_str_match( "load_balance", 2, value )
+ || __kmp_str_match( "load-balance", 2, value )
+ || __kmp_str_match( "loadbalance", 2, value )
+ || __kmp_str_match( "balance", 1, value ) ) {
+ __kmp_global.g.g_dynamic_mode = dynamic_load_balance;
+ }
+#endif /* USE_LOAD_BALANCE */
+ else if ( __kmp_str_match( "thread limit", 1, value )
+ || __kmp_str_match( "thread_limit", 1, value )
+ || __kmp_str_match( "thread-limit", 1, value )
+ || __kmp_str_match( "threadlimit", 1, value )
+ || __kmp_str_match( "limit", 2, value ) ) {
+ __kmp_global.g.g_dynamic_mode = dynamic_thread_limit;
+ }
+ else if ( __kmp_str_match( "random", 1, value ) ) {
+ __kmp_global.g.g_dynamic_mode = dynamic_random;
+ }
+ else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }
+} //__kmp_stg_parse_kmp_dynamic_mode
+
+static void
+__kmp_stg_print_kmp_dynamic_mode( kmp_str_buf_t * buffer, char const * name, void * data )
+{
+#if KMP_DEBUG
+ if ( __kmp_global.g.g_dynamic_mode == dynamic_default ) {
+ __kmp_str_buf_print( buffer, " %s: %s \n", name, KMP_I18N_STR( NotDefined ) );
+ }
+# ifdef USE_LOAD_BALANCE
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_load_balance ) {
+ __kmp_stg_print_str( buffer, name, "load balance" );
+ }
+# endif /* USE_LOAD_BALANCE */
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_thread_limit ) {
+ __kmp_stg_print_str( buffer, name, "thread limit" );
+ }
+ else if ( __kmp_global.g.g_dynamic_mode == dynamic_random ) {
+ __kmp_stg_print_str( buffer, name, "random" );
+ }
+ else {
+ KMP_ASSERT(0);
+ }
+#endif /* KMP_DEBUG */
+} // __kmp_stg_print_kmp_dynamic_mode
+
+
+#ifdef USE_LOAD_BALANCE
+
+// -------------------------------------------------------------------------------------------------
+// KMP_LOAD_BALANCE_INTERVAL
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_ld_balance_interval( char const * name, char const * value, void * data )
+{
+ double interval = __kmp_convert_to_double( value );
+ if ( interval >= 0 ) {
+ __kmp_load_balance_interval = interval;
+ } else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }; // if
+} // __kmp_stg_parse_load_balance_interval
+
+static void
+__kmp_stg_print_ld_balance_interval( kmp_str_buf_t * buffer, char const * name, void * data ) {
+#if KMP_DEBUG
+ __kmp_str_buf_print( buffer, " %s=%8.6f\n", name, __kmp_load_balance_interval );
+#endif /* KMP_DEBUG */
+} // __kmp_stg_print_load_balance_interval
+
+#endif /* USE_LOAD_BALANCE */
+
+// -------------------------------------------------------------------------------------------------
+// KMP_INIT_AT_FORK
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_init_at_fork( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_need_register_atfork );
+ if ( __kmp_need_register_atfork ) {
+ __kmp_need_register_atfork_specified = TRUE;
+ };
+} // __kmp_stg_parse_init_at_fork
+
+static void
+__kmp_stg_print_init_at_fork( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_need_register_atfork_specified );
+} // __kmp_stg_print_init_at_fork
+
+// -------------------------------------------------------------------------------------------------
+// KMP_SCHEDULE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_schedule( char const * name, char const * value, void * data ) {
+
+ if ( value != NULL ) {
+ size_t length = KMP_STRLEN( value );
+ if ( length > INT_MAX ) {
+ KMP_WARNING( LongValue, name );
+ } else {
+ char *semicolon;
+ if( value[ length - 1 ] == '"' || value[ length -1 ] == '\'' )
+ KMP_WARNING( UnbalancedQuotes, name );
+ do {
+ char sentinel;
+
+ semicolon = (char *) strchr( value, ';' );
+ if( *value && semicolon != value ) {
+ char *comma = (char *) strchr( value, ',' );
+
+ if ( comma ) {
+ ++comma;
+ sentinel = ',';
+ } else
+ sentinel = ';';
+ if ( !__kmp_strcasecmp_with_sentinel( "static", value, sentinel ) ) {
+ if( !__kmp_strcasecmp_with_sentinel( "greedy", comma, ';' ) ) {
+ __kmp_static = kmp_sch_static_greedy;
+ continue;
+ } else if( !__kmp_strcasecmp_with_sentinel( "balanced", comma, ';' ) ) {
+ __kmp_static = kmp_sch_static_balanced;
+ continue;
+ }
+ } else if ( !__kmp_strcasecmp_with_sentinel( "guided", value, sentinel ) ) {
+ if ( !__kmp_strcasecmp_with_sentinel( "iterative", comma, ';' ) ) {
+ __kmp_guided = kmp_sch_guided_iterative_chunked;
+ continue;
+ } else if ( !__kmp_strcasecmp_with_sentinel( "analytical", comma, ';' ) ) {
+ /* analytical not allowed for too many threads */
+ __kmp_guided = kmp_sch_guided_analytical_chunked;
+ continue;
+ }
+ }
+ KMP_WARNING( InvalidClause, name, value );
+ } else
+ KMP_WARNING( EmptyClause, name );
+ } while ( (value = semicolon ? semicolon + 1 : NULL) );
+ }
+ }; // if
+
+} // __kmp_stg_parse__schedule
+
+static void
+__kmp_stg_print_schedule( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", name );
+ }
+ if ( __kmp_static == kmp_sch_static_greedy ) {
+ __kmp_str_buf_print( buffer, "%s", "static,greedy");
+ } else if ( __kmp_static == kmp_sch_static_balanced ) {
+ __kmp_str_buf_print ( buffer, "%s", "static,balanced");
+ }
+ if ( __kmp_guided == kmp_sch_guided_iterative_chunked ) {
+ __kmp_str_buf_print( buffer, ";%s'\n", "guided,iterative");
+ } else if ( __kmp_guided == kmp_sch_guided_analytical_chunked ) {
+ __kmp_str_buf_print( buffer, ";%s'\n", "guided,analytical");
+ }
+} // __kmp_stg_print_schedule
+
+// -------------------------------------------------------------------------------------------------
+// OMP_SCHEDULE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_omp_schedule( char const * name, char const * value, void * data )
+{
+ size_t length;
+ if( value ) {
+ length = KMP_STRLEN( value );
+ if( length ) {
+ char *comma = (char *) strchr( value, ',' );
+ if( value[ length - 1 ] == '"' || value[ length -1 ] == '\'')
+ KMP_WARNING( UnbalancedQuotes, name );
+ /* get the specified scheduling style */
+ if (!__kmp_strcasecmp_with_sentinel("dynamic", value, ',')) /* DYNAMIC */
+ __kmp_sched = kmp_sch_dynamic_chunked;
+ else if (!__kmp_strcasecmp_with_sentinel("guided", value, ',')) /* GUIDED */
+ __kmp_sched = kmp_sch_guided_chunked;
+// AC: TODO: add AUTO schedule, and pprobably remove TRAPEZOIDAL (OMP 3.0 does not allow it)
+ else if (!__kmp_strcasecmp_with_sentinel("auto", value, ',')) { /* AUTO */
+ __kmp_sched = kmp_sch_auto;
+ if( comma ) {
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IgnoreChunk, name, comma ), __kmp_msg_null );
+ comma = NULL;
+ }
+ }
+ else if (!__kmp_strcasecmp_with_sentinel("trapezoidal", value, ',')) /* TRAPEZOIDAL */
+ __kmp_sched = kmp_sch_trapezoidal;
+ else if (!__kmp_strcasecmp_with_sentinel("static", value, ',')) /* STATIC */
+ __kmp_sched = kmp_sch_static;
+#if KMP_STATIC_STEAL_ENABLED
+ else if (!__kmp_strcasecmp_with_sentinel("static_steal", value, ','))
+ __kmp_sched = kmp_sch_static_steal;
+#endif
+ else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ value = NULL; /* skip processing of comma */
+ }
+ if( value && comma ) {
+ __kmp_env_chunk = TRUE;
+
+ if(__kmp_sched == kmp_sch_static)
+ __kmp_sched = kmp_sch_static_chunked;
+ ++comma;
+ __kmp_chunk = __kmp_str_to_int( comma, 0 );
+ if ( __kmp_chunk < 1 ) {
+ __kmp_chunk = KMP_DEFAULT_CHUNK;
+ __kmp_msg( kmp_ms_warning, KMP_MSG( InvalidChunk, name, comma ), __kmp_msg_null );
+ KMP_INFORM( Using_int_Value, name, __kmp_chunk );
+// AC: next block commented out until KMP_DEFAULT_CHUNK != KMP_MIN_CHUNK (to improve code coverage :)
+// The default chunk size is 1 according to standard, thus making KMP_MIN_CHUNK not 1 we would introduce mess:
+// wrong chunk becomes 1, but it will be impossible to explicitely set 1, because it becomes KMP_MIN_CHUNK...
+// } else if ( __kmp_chunk < KMP_MIN_CHUNK ) {
+// __kmp_chunk = KMP_MIN_CHUNK;
+ } else if ( __kmp_chunk > KMP_MAX_CHUNK ) {
+ __kmp_chunk = KMP_MAX_CHUNK;
+ __kmp_msg( kmp_ms_warning, KMP_MSG( LargeChunk, name, comma ), __kmp_msg_null );
+ KMP_INFORM( Using_int_Value, name, __kmp_chunk );
+ }
+ } else
+ __kmp_env_chunk = FALSE;
+ } else
+ KMP_WARNING( EmptyString, name );
+ }
+ K_DIAG(1, ("__kmp_static == %d\n", __kmp_static))
+ K_DIAG(1, ("__kmp_guided == %d\n", __kmp_guided))
+ K_DIAG(1, ("__kmp_sched == %d\n", __kmp_sched))
+ K_DIAG(1, ("__kmp_chunk == %d\n", __kmp_chunk))
+} // __kmp_stg_parse_omp_schedule
+
+static void
+__kmp_stg_print_omp_schedule( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", name );
+ }
+ if ( __kmp_chunk ) {
+ switch ( __kmp_sched ) {
+ case kmp_sch_dynamic_chunked:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "dynamic", __kmp_chunk);
+ break;
+ case kmp_sch_guided_iterative_chunked:
+ case kmp_sch_guided_analytical_chunked:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "guided", __kmp_chunk);
+ break;
+ case kmp_sch_trapezoidal:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "trapezoidal", __kmp_chunk);
+ break;
+ case kmp_sch_static:
+ case kmp_sch_static_chunked:
+ case kmp_sch_static_balanced:
+ case kmp_sch_static_greedy:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "static", __kmp_chunk);
+ break;
+ case kmp_sch_static_steal:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "static_steal", __kmp_chunk);
+ break;
+ case kmp_sch_auto:
+ __kmp_str_buf_print( buffer, "%s,%d'\n", "auto", __kmp_chunk);
+ break;
+ }
+ } else {
+ switch ( __kmp_sched ) {
+ case kmp_sch_dynamic_chunked:
+ __kmp_str_buf_print( buffer, "%s'\n", "dynamic");
+ break;
+ case kmp_sch_guided_iterative_chunked:
+ case kmp_sch_guided_analytical_chunked:
+ __kmp_str_buf_print( buffer, "%s'\n", "guided");
+ break;
+ case kmp_sch_trapezoidal:
+ __kmp_str_buf_print( buffer, "%s'\n", "trapezoidal");
+ break;
+ case kmp_sch_static:
+ case kmp_sch_static_chunked:
+ case kmp_sch_static_balanced:
+ case kmp_sch_static_greedy:
+ __kmp_str_buf_print( buffer, "%s'\n", "static");
+ break;
+ case kmp_sch_static_steal:
+ __kmp_str_buf_print( buffer, "%s'\n", "static_steal");
+ break;
+ case kmp_sch_auto:
+ __kmp_str_buf_print( buffer, "%s'\n", "auto");
+ break;
+ }
+ }
+} // __kmp_stg_print_omp_schedule
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ATOMIC_MODE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_atomic_mode( char const * name, char const * value, void * data ) {
+ // Modes: 0 -- do not change default; 1 -- Intel perf mode, 2 -- GOMP compatibility mode.
+ int mode = 0;
+ int max = 1;
+ #ifdef KMP_GOMP_COMPAT
+ max = 2;
+ #endif /* KMP_GOMP_COMPAT */
+ __kmp_stg_parse_int( name, value, 0, max, & mode );
+ // TODO; parse_int is not very suitable for this case. In case of overflow it is better to use
+ // 0 rather that max value.
+ if ( mode > 0 ) {
+ __kmp_atomic_mode = mode;
+ }; // if
+} // __kmp_stg_parse_atomic_mode
+
+static void
+__kmp_stg_print_atomic_mode( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_atomic_mode );
+} // __kmp_stg_print_atomic_mode
+
+
+// -------------------------------------------------------------------------------------------------
+// KMP_CONSISTENCY_CHECK
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_consistency_check( char const * name, char const * value, void * data ) {
+ if ( ! __kmp_strcasecmp_with_sentinel( "all", value, 0 ) ) {
+ // Note, this will not work from kmp_set_defaults because th_cons stack was not allocated
+ // for existed thread(s) thus the first __kmp_push_<construct> will break with assertion.
+ // TODO: allocate th_cons if called from kmp_set_defaults.
+ __kmp_env_consistency_check = TRUE;
+ } else if ( ! __kmp_strcasecmp_with_sentinel( "none", value, 0 ) ) {
+ __kmp_env_consistency_check = FALSE;
+ } else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }; // if
+} // __kmp_stg_parse_consistency_check
+
+static void
+__kmp_stg_print_consistency_check( kmp_str_buf_t * buffer, char const * name, void * data ) {
+#if KMP_DEBUG
+ const char *value = NULL;
+
+ if ( __kmp_env_consistency_check ) {
+ value = "all";
+ } else {
+ value = "none";
+ }
+
+ if ( value != NULL ) {
+ __kmp_stg_print_str( buffer, name, value );
+ }
+#endif /* KMP_DEBUG */
+} // __kmp_stg_print_consistency_check
+
+
+#if USE_ITT_BUILD
+// -------------------------------------------------------------------------------------------------
+// KMP_ITT_PREPARE_DELAY
+// -------------------------------------------------------------------------------------------------
+
+#if USE_ITT_NOTIFY
+
+static void
+__kmp_stg_parse_itt_prepare_delay( char const * name, char const * value, void * data )
+{
+ // Experimental code: KMP_ITT_PREPARE_DELAY specifies numbert of loop iterations.
+ int delay = 0;
+ __kmp_stg_parse_int( name, value, 0, INT_MAX, & delay );
+ __kmp_itt_prepare_delay = delay;
+} // __kmp_str_parse_itt_prepare_delay
+
+static void
+__kmp_stg_print_itt_prepare_delay( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_uint64( buffer, name, __kmp_itt_prepare_delay );
+
+} // __kmp_str_print_itt_prepare_delay
+
+#endif // USE_ITT_NOTIFY
+#endif /* USE_ITT_BUILD */
+
+// -------------------------------------------------------------------------------------------------
+// KMP_MALLOC_POOL_INCR
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_malloc_pool_incr( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_size(
+ name,
+ value,
+ KMP_MIN_MALLOC_POOL_INCR,
+ KMP_MAX_MALLOC_POOL_INCR,
+ NULL,
+ & __kmp_malloc_pool_incr,
+ 1
+ );
+} // __kmp_stg_parse_malloc_pool_incr
+
+static void
+__kmp_stg_print_malloc_pool_incr( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_size( buffer, name, __kmp_malloc_pool_incr );
+
+} // _kmp_stg_print_malloc_pool_incr
+
+
+#ifdef KMP_DEBUG
+
+// -------------------------------------------------------------------------------------------------
+// KMP_PAR_RANGE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_par_range_env( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_par_range(
+ name,
+ value,
+ & __kmp_par_range,
+ __kmp_par_range_routine,
+ __kmp_par_range_filename,
+ & __kmp_par_range_lb,
+ & __kmp_par_range_ub
+ );
+} // __kmp_stg_parse_par_range_env
+
+static void
+__kmp_stg_print_par_range_env( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if (__kmp_par_range != 0) {
+ __kmp_stg_print_str( buffer, name, par_range_to_print );
+ }
+} // __kmp_stg_print_par_range_env
+
+// -------------------------------------------------------------------------------------------------
+// KMP_YIELD_CYCLE, KMP_YIELD_ON, KMP_YIELD_OFF
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_yield_cycle( char const * name, char const * value, void * data ) {
+ int flag = __kmp_yield_cycle;
+ __kmp_stg_parse_bool( name, value, & flag );
+ __kmp_yield_cycle = flag;
+} // __kmp_stg_parse_yield_cycle
+
+static void
+__kmp_stg_print_yield_cycle( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_yield_cycle );
+} // __kmp_stg_print_yield_cycle
+
+static void
+__kmp_stg_parse_yield_on( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 2, INT_MAX, & __kmp_yield_on_count );
+} // __kmp_stg_parse_yield_on
+
+static void
+__kmp_stg_print_yield_on( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_yield_on_count );
+} // __kmp_stg_print_yield_on
+
+static void
+__kmp_stg_parse_yield_off( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 2, INT_MAX, & __kmp_yield_off_count );
+} // __kmp_stg_parse_yield_off
+
+static void
+__kmp_stg_print_yield_off( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_yield_off_count );
+} // __kmp_stg_print_yield_off
+
+#endif
+
+// -------------------------------------------------------------------------------------------------
+// KMP_INIT_WAIT, KMP_NEXT_WAIT
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_init_wait( char const * name, char const * value, void * data ) {
+ int wait;
+ KMP_ASSERT( ( __kmp_init_wait & 1 ) == 0 );
+ wait = __kmp_init_wait / 2;
+ __kmp_stg_parse_int( name, value, KMP_MIN_INIT_WAIT, KMP_MAX_INIT_WAIT, & wait );
+ __kmp_init_wait = wait * 2;
+ KMP_ASSERT( ( __kmp_init_wait & 1 ) == 0 );
+ __kmp_yield_init = __kmp_init_wait;
+} // __kmp_stg_parse_init_wait
+
+static void
+__kmp_stg_print_init_wait( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_init_wait );
+} // __kmp_stg_print_init_wait
+
+static void
+__kmp_stg_parse_next_wait( char const * name, char const * value, void * data ) {
+ int wait;
+ KMP_ASSERT( ( __kmp_next_wait & 1 ) == 0 );
+ wait = __kmp_next_wait / 2;
+ __kmp_stg_parse_int( name, value, KMP_MIN_NEXT_WAIT, KMP_MAX_NEXT_WAIT, & wait );
+ __kmp_next_wait = wait * 2;
+ KMP_ASSERT( ( __kmp_next_wait & 1 ) == 0 );
+ __kmp_yield_next = __kmp_next_wait;
+} // __kmp_stg_parse_next_wait
+
+static void
+__kmp_stg_print_next_wait( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_next_wait );
+} //__kmp_stg_print_next_wait
+
+
+// -------------------------------------------------------------------------------------------------
+// KMP_GTID_MODE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_gtid_mode( char const * name, char const * value, void * data ) {
+ //
+ // Modes:
+ // 0 -- do not change default
+ // 1 -- sp search
+ // 2 -- use "keyed" TLS var, i.e.
+ // pthread_getspecific(Linux* OS/OS X*) or TlsGetValue(Windows* OS)
+ // 3 -- __declspec(thread) TLS var in tdata section
+ //
+ int mode = 0;
+ int max = 2;
+ #ifdef KMP_TDATA_GTID
+ max = 3;
+ #endif /* KMP_TDATA_GTID */
+ __kmp_stg_parse_int( name, value, 0, max, & mode );
+ // TODO; parse_int is not very suitable for this case. In case of overflow it is better to use
+ // 0 rather that max value.
+ if ( mode == 0 ) {
+ __kmp_adjust_gtid_mode = TRUE;
+ }
+ else {
+ __kmp_gtid_mode = mode;
+ __kmp_adjust_gtid_mode = FALSE;
+ }; // if
+} // __kmp_str_parse_gtid_mode
+
+static void
+__kmp_stg_print_gtid_mode( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if ( __kmp_adjust_gtid_mode ) {
+ __kmp_stg_print_int( buffer, name, 0 );
+ }
+ else {
+ __kmp_stg_print_int( buffer, name, __kmp_gtid_mode );
+ }
+} // __kmp_stg_print_gtid_mode
+
+// -------------------------------------------------------------------------------------------------
+// KMP_NUM_LOCKS_IN_BLOCK
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_lock_block( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, KMP_INT_MAX, & __kmp_num_locks_in_block );
+} // __kmp_str_parse_lock_block
+
+static void
+__kmp_stg_print_lock_block( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_num_locks_in_block );
+} // __kmp_stg_print_lock_block
+
+// -------------------------------------------------------------------------------------------------
+// KMP_LOCK_KIND
+// -------------------------------------------------------------------------------------------------
+
+#if KMP_USE_DYNAMIC_LOCK
+# define KMP_STORE_LOCK_SEQ(a) (__kmp_user_lock_seq = lockseq_##a)
+#else
+# define KMP_STORE_LOCK_SEQ(a)
+#endif
+
+static void
+__kmp_stg_parse_lock_kind( char const * name, char const * value, void * data ) {
+ if ( __kmp_init_user_locks ) {
+ KMP_WARNING( EnvLockWarn, name );
+ return;
+ }
+
+ if ( __kmp_str_match( "tas", 2, value )
+ || __kmp_str_match( "test and set", 2, value )
+ || __kmp_str_match( "test_and_set", 2, value )
+ || __kmp_str_match( "test-and-set", 2, value )
+ || __kmp_str_match( "test andset", 2, value )
+ || __kmp_str_match( "test_andset", 2, value )
+ || __kmp_str_match( "test-andset", 2, value )
+ || __kmp_str_match( "testand set", 2, value )
+ || __kmp_str_match( "testand_set", 2, value )
+ || __kmp_str_match( "testand-set", 2, value )
+ || __kmp_str_match( "testandset", 2, value ) ) {
+ __kmp_user_lock_kind = lk_tas;
+ KMP_STORE_LOCK_SEQ(tas);
+ }
+#if KMP_USE_FUTEX
+ else if ( __kmp_str_match( "futex", 1, value ) ) {
+ if ( __kmp_futex_determine_capable() ) {
+ __kmp_user_lock_kind = lk_futex;
+ KMP_STORE_LOCK_SEQ(futex);
+ }
+ else {
+ KMP_WARNING( FutexNotSupported, name, value );
+ }
+ }
+#endif
+ else if ( __kmp_str_match( "ticket", 2, value ) ) {
+ __kmp_user_lock_kind = lk_ticket;
+ KMP_STORE_LOCK_SEQ(ticket);
+ }
+ else if ( __kmp_str_match( "queuing", 1, value )
+ || __kmp_str_match( "queue", 1, value ) ) {
+ __kmp_user_lock_kind = lk_queuing;
+ KMP_STORE_LOCK_SEQ(queuing);
+ }
+ else if ( __kmp_str_match( "drdpa ticket", 1, value )
+ || __kmp_str_match( "drdpa_ticket", 1, value )
+ || __kmp_str_match( "drdpa-ticket", 1, value )
+ || __kmp_str_match( "drdpaticket", 1, value )
+ || __kmp_str_match( "drdpa", 1, value ) ) {
+ __kmp_user_lock_kind = lk_drdpa;
+ KMP_STORE_LOCK_SEQ(drdpa);
+ }
+#if KMP_USE_ADAPTIVE_LOCKS
+ else if ( __kmp_str_match( "adaptive", 1, value ) ) {
+ if( __kmp_cpuinfo.rtm ) { // ??? Is cpuinfo available here?
+ __kmp_user_lock_kind = lk_adaptive;
+ KMP_STORE_LOCK_SEQ(adaptive);
+ } else {
+ KMP_WARNING( AdaptiveNotSupported, name, value );
+ __kmp_user_lock_kind = lk_queuing;
+ KMP_STORE_LOCK_SEQ(queuing);
+ }
+ }
+#endif // KMP_USE_ADAPTIVE_LOCKS
+#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
+ else if ( __kmp_str_match("rtm", 1, value) ) {
+ if ( __kmp_cpuinfo.rtm ) {
+ __kmp_user_lock_kind = lk_rtm;
+ KMP_STORE_LOCK_SEQ(rtm);
+ } else {
+ KMP_WARNING( AdaptiveNotSupported, name, value );
+ __kmp_user_lock_kind = lk_queuing;
+ KMP_STORE_LOCK_SEQ(queuing);
+ }
+ }
+ else if ( __kmp_str_match("hle", 1, value) ) {
+ __kmp_user_lock_kind = lk_hle;
+ KMP_STORE_LOCK_SEQ(hle);
+ }
+#endif
+ else {
+ KMP_WARNING( StgInvalidValue, name, value );
+ }
+}
+
+static void
+__kmp_stg_print_lock_kind( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ const char *value = NULL;
+
+ switch ( __kmp_user_lock_kind ) {
+ case lk_default:
+ value = "default";
+ break;
+
+ case lk_tas:
+ value = "tas";
+ break;
+
+#if KMP_USE_FUTEX
+ case lk_futex:
+ value = "futex";
+ break;
+#endif
+
+#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
+ case lk_rtm:
+ value = "rtm";
+ break;
+
+ case lk_hle:
+ value = "hle";
+ break;
+#endif
+
+ case lk_ticket:
+ value = "ticket";
+ break;
+
+ case lk_queuing:
+ value = "queuing";
+ break;
+
+ case lk_drdpa:
+ value = "drdpa";
+ break;
+#if KMP_USE_ADAPTIVE_LOCKS
+ case lk_adaptive:
+ value = "adaptive";
+ break;
+#endif
+ }
+
+ if ( value != NULL ) {
+ __kmp_stg_print_str( buffer, name, value );
+ }
+}
+
+// -------------------------------------------------------------------------------------------------
+// KMP_SPIN_BACKOFF_PARAMS
+// -------------------------------------------------------------------------------------------------
+
+// KMP_SPIN_BACKOFF_PARAMS=max_backoff[,min_tick] (max backoff size, min tick for machine pause)
+static void
+__kmp_stg_parse_spin_backoff_params(const char* name, const char* value, void* data)
+{
+ const char *next = value;
+
+ int total = 0; // Count elements that were set. It'll be used as an array size
+ int prev_comma = FALSE; // For correct processing sequential commas
+ int i;
+
+ kmp_uint32 max_backoff = __kmp_spin_backoff_params.max_backoff;
+ kmp_uint32 min_tick = __kmp_spin_backoff_params.min_tick;
+
+ // Run only 3 iterations because it is enough to read two values or find a syntax error
+ for ( i = 0; i < 3 ; i++) {
+ SKIP_WS( next );
+
+ if ( *next == '\0' ) {
+ break;
+ }
+ // Next character is not an integer or not a comma OR number of values > 2 => end of list
+ if ( ( ( *next < '0' || *next > '9' ) && *next !=',' ) || total > 2 ) {
+ KMP_WARNING( EnvSyntaxError, name, value );
+ return;
+ }
+ // The next character is ','
+ if ( *next == ',' ) {
+ // ',' is the fisrt character
+ if ( total == 0 || prev_comma ) {
+ total++;
+ }
+ prev_comma = TRUE;
+ next++; //skip ','
+ SKIP_WS( next );
+ }
+ // Next character is a digit
+ if ( *next >= '0' && *next <= '9' ) {
+ int num;
+ const char *buf = next;
+ char const * msg = NULL;
+ prev_comma = FALSE;
+ SKIP_DIGITS( next );
+ total++;
+
+ const char *tmp = next;
+ SKIP_WS( tmp );
+ if ( ( *next == ' ' || *next == '\t' ) && ( *tmp >= '0' && *tmp <= '9' ) ) {
+ KMP_WARNING( EnvSpacesNotAllowed, name, value );
+ return;
+ }
+
+ num = __kmp_str_to_int( buf, *next );
+ if ( num <= 0 ) { // The number of retries should be > 0
+ msg = KMP_I18N_STR( ValueTooSmall );
+ num = 1;
+ } else if ( num > KMP_INT_MAX ) {
+ msg = KMP_I18N_STR( ValueTooLarge );
+ num = KMP_INT_MAX;
+ }
+ if ( msg != NULL ) {
+ // Message is not empty. Print warning.
+ KMP_WARNING( ParseSizeIntWarn, name, value, msg );
+ KMP_INFORM( Using_int_Value, name, num );
+ }
+ if( total == 1 ) {
+ max_backoff = num;
+ } else if( total == 2 ) {
+ min_tick = num;
+ }
+ }
+ }
+ KMP_DEBUG_ASSERT( total > 0 );
+ if( total <= 0 ) {
+ KMP_WARNING( EnvSyntaxError, name, value );
+ return;
+ }
+ __kmp_spin_backoff_params.max_backoff = max_backoff;
+ __kmp_spin_backoff_params.min_tick = min_tick;
+}
+
+static void
+__kmp_stg_print_spin_backoff_params(kmp_str_buf_t *buffer, char const* name, void* data)
+{
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", name );
+ }
+ __kmp_str_buf_print( buffer, "%d,%d'\n", __kmp_spin_backoff_params.max_backoff,
+ __kmp_spin_backoff_params.min_tick );
+}
+
+#if KMP_USE_ADAPTIVE_LOCKS
+
+// -------------------------------------------------------------------------------------------------
+// KMP_ADAPTIVE_LOCK_PROPS, KMP_SPECULATIVE_STATSFILE
+// -------------------------------------------------------------------------------------------------
+
+// Parse out values for the tunable parameters from a string of the form
+// KMP_ADAPTIVE_LOCK_PROPS=max_soft_retries[,max_badness]
+static void
+__kmp_stg_parse_adaptive_lock_props( const char *name, const char *value, void *data )
+{
+ int max_retries = 0;
+ int max_badness = 0;
+
+ const char *next = value;
+
+ int total = 0; // Count elements that were set. It'll be used as an array size
+ int prev_comma = FALSE; // For correct processing sequential commas
+ int i;
+
+ // Save values in the structure __kmp_speculative_backoff_params
+ // Run only 3 iterations because it is enough to read two values or find a syntax error
+ for ( i = 0; i < 3 ; i++) {
+ SKIP_WS( next );
+
+ if ( *next == '\0' ) {
+ break;
+ }
+ // Next character is not an integer or not a comma OR number of values > 2 => end of list
+ if ( ( ( *next < '0' || *next > '9' ) && *next !=',' ) || total > 2 ) {
+ KMP_WARNING( EnvSyntaxError, name, value );
+ return;
+ }
+ // The next character is ','
+ if ( *next == ',' ) {
+ // ',' is the fisrt character
+ if ( total == 0 || prev_comma ) {
+ total++;
+ }
+ prev_comma = TRUE;
+ next++; //skip ','
+ SKIP_WS( next );
+ }
+ // Next character is a digit
+ if ( *next >= '0' && *next <= '9' ) {
+ int num;
+ const char *buf = next;
+ char const * msg = NULL;
+ prev_comma = FALSE;
+ SKIP_DIGITS( next );
+ total++;
+
+ const char *tmp = next;
+ SKIP_WS( tmp );
+ if ( ( *next == ' ' || *next == '\t' ) && ( *tmp >= '0' && *tmp <= '9' ) ) {
+ KMP_WARNING( EnvSpacesNotAllowed, name, value );
+ return;
+ }
+
+ num = __kmp_str_to_int( buf, *next );
+ if ( num < 0 ) { // The number of retries should be >= 0
+ msg = KMP_I18N_STR( ValueTooSmall );
+ num = 1;
+ } else if ( num > KMP_INT_MAX ) {
+ msg = KMP_I18N_STR( ValueTooLarge );
+ num = KMP_INT_MAX;
+ }
+ if ( msg != NULL ) {
+ // Message is not empty. Print warning.
+ KMP_WARNING( ParseSizeIntWarn, name, value, msg );
+ KMP_INFORM( Using_int_Value, name, num );
+ }
+ if( total == 1 ) {
+ max_retries = num;
+ } else if( total == 2 ) {
+ max_badness = num;
+ }
+ }
+ }
+ KMP_DEBUG_ASSERT( total > 0 );
+ if( total <= 0 ) {
+ KMP_WARNING( EnvSyntaxError, name, value );
+ return;
+ }
+ __kmp_adaptive_backoff_params.max_soft_retries = max_retries;
+ __kmp_adaptive_backoff_params.max_badness = max_badness;
+}
+
+
+static void
+__kmp_stg_print_adaptive_lock_props(kmp_str_buf_t * buffer, char const * name, void * data )
+{
+ if( __kmp_env_format ) {
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ } else {
+ __kmp_str_buf_print( buffer, " %s='", name );
+ }
+ __kmp_str_buf_print( buffer, "%d,%d'\n", __kmp_adaptive_backoff_params.max_soft_retries,
+ __kmp_adaptive_backoff_params.max_badness );
+} // __kmp_stg_print_adaptive_lock_props
+
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+
+static void
+__kmp_stg_parse_speculative_statsfile( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_file( name, value, "", & __kmp_speculative_statsfile );
+} // __kmp_stg_parse_speculative_statsfile
+
+static void
+__kmp_stg_print_speculative_statsfile( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if ( __kmp_str_match( "-", 0, __kmp_speculative_statsfile ) ) {
+ __kmp_stg_print_str( buffer, name, "stdout" );
+ } else {
+ __kmp_stg_print_str( buffer, name, __kmp_speculative_statsfile );
+ }
+
+} // __kmp_stg_print_speculative_statsfile
+
+#endif // KMP_DEBUG_ADAPTIVE_LOCKS
+
+#endif // KMP_USE_ADAPTIVE_LOCKS
+
+// -------------------------------------------------------------------------------------------------
+// KMP_HW_SUBSET (was KMP_PLACE_THREADS)
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_hw_subset( char const * name, char const * value, void * data ) {
+ // Value example: 5Cx2Tx15O
+ // Which means "use 5 cores with offset 15, 2 threads per core"
+ // AC: extended to sockets level, examples of
+ // "use 2 sockets with offset 6, 2 cores with offset 2 per socket, 2 threads per core":
+ // 2s,6o,2c,2o,2t; 2s,6o,2c,2t,2o; 2s@6,2c@2,2t
+ // To not break legacy code core-offset can be last;
+ // postfix "o" or prefix @ can be offset designator.
+ // Note: not all syntax errors are analyzed, some may be skipped.
+#define CHECK_DELIM(_x) (*(_x) == ',' || *(_x) == 'x')
+ static int parsed = 0;
+ int num;
+ int single_warning = 0;
+ int flagS = 0, flagC = 0, flagT = 0, flagSO = 0, flagCO = 0;
+ const char *next = value;
+ const char *prev;
+
+ if( strcmp(name, "KMP_PLACE_THREADS") == 0 ) {
+ KMP_INFORM(EnvVarDeprecated,name,"KMP_HW_SUBSET");
+ if( parsed == 1 ) {
+ return; // already parsed KMP_HW_SUBSET
+ }
+ }
+ parsed = 1;
+
+ SKIP_WS(next); // skip white spaces
+ if (*next == '\0')
+ return; // no data provided, retain default values
+ if( strcmp(name, "KMP_PLACE_THREADS") == 0 ) {
+ KMP_INFORM(EnvVarDeprecated,name,"KMP_HW_SUBSET");
+ if( parsed == 1 ) {
+ return; // already parsed KMP_HW_SUBSET
+ }
+ }
+ parsed = 1;
+
+ SKIP_WS(next); // skip white spaces
+ if (*next == '\0')
+ return; // no data provided, retain default values
+ // Get num_sockets first (or whatever specified)
+ if (*next >= '0' && *next <= '9') {
+ prev = next;
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ SKIP_WS(next);
+ if (*next == 's' || *next == 'S') { // e.g. "2s"
+ __kmp_place_num_sockets = num;
+ flagS = 1; // got num sockets
+ next++;
+ if (*next == '@') { // socket offset, e.g. "2s@4"
+ flagSO = 1;
+ prev = ++next; // don't allow spaces for simplicity
+ if (!(*next >= '0' && *next <= '9')) {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ __kmp_place_socket_offset = num;
+ }
+ } else if (*next == 'c' || *next == 'C') {
+ __kmp_place_num_cores = num;
+ flagS = flagC = 1; // sockets were not specified - use default
+ next++;
+ if (*next == '@') { // core offset, e.g. "2c@6"
+ flagCO = 1;
+ prev = ++next; // don't allow spaces for simplicity
+ if (!(*next >= '0' && *next <= '9')) {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ __kmp_place_core_offset = num;
+ }
+ } else if (CHECK_DELIM(next)) {
+ __kmp_place_num_cores = num; // no letter-designator - num cores
+ flagS = flagC = 1; // sockets were not specified - use default
+ next++;
+ } else if (*next == 't' || *next == 'T') {
+ __kmp_place_num_threads_per_core = num;
+ // sockets, cores were not specified - use default
+ return; // we ignore offset value in case all cores are used
+ } else if (*next == '\0') {
+ __kmp_place_num_cores = num;
+ return; // the only value provided - set num cores
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ KMP_DEBUG_ASSERT(flagS); // num sockets should already be set here
+ SKIP_WS(next);
+ if (*next == '\0')
+ return; // " n " - something like this
+ if (CHECK_DELIM(next)) {
+ next++; // skip delimiter
+ SKIP_WS(next);
+ }
+
+ // Get second value (could be offset, num_cores, num_threads)
+ if (*next >= '0' && *next <= '9') {
+ prev = next;
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ SKIP_WS(next);
+ if (*next == 'c' || *next == 'C') {
+ KMP_DEBUG_ASSERT(flagC == 0);
+ __kmp_place_num_cores = num;
+ flagC = 1;
+ next++;
+ if (*next == '@') { // core offset, e.g. "2c@6"
+ flagCO = 1;
+ prev = ++next; // don't allow spaces for simplicity
+ if (!(*next >= '0' && *next <= '9')) {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ __kmp_place_core_offset = num;
+ }
+ } else if (*next == 'o' || *next == 'O') { // offset specified
+ KMP_WARNING(AffHWSubsetDeprecated);
+ single_warning = 1;
+ if (flagC) { // whether num_cores already specified (sockets skipped)
+ KMP_DEBUG_ASSERT(!flagCO); // either "o" or @, not both
+ __kmp_place_core_offset = num;
+ } else {
+ KMP_DEBUG_ASSERT(!flagSO); // either "o" or @, not both
+ __kmp_place_socket_offset = num;
+ }
+ next++;
+ } else if (*next == 't' || *next == 'T') {
+ KMP_DEBUG_ASSERT(flagT == 0);
+ __kmp_place_num_threads_per_core = num;
+ flagC = 1; // num_cores could be skipped ?
+ flagT = 1;
+ next++; // can have core-offset specified after num threads
+ } else if (*next == '\0') {
+ KMP_DEBUG_ASSERT(flagC); // 4x2 means 4 cores 2 threads per core
+ __kmp_place_num_threads_per_core = num;
+ return; // two values provided without letter-designator
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ SKIP_WS(next);
+ if (*next == '\0')
+ return; // " Ns,Nc " - something like this
+ if (CHECK_DELIM(next)) {
+ next++; // skip delimiter
+ SKIP_WS(next);
+ }
+
+ // Get third value (could be core-offset, num_cores, num_threads)
+ if (*next >= '0' && *next <= '9') {
+ prev = next;
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ SKIP_WS(next);
+ if (*next == 't' || *next == 'T') {
+ KMP_DEBUG_ASSERT(flagT == 0);
+ __kmp_place_num_threads_per_core = num;
+ if (flagC == 0)
+ return; // num_cores could be skipped (e.g. 2s,4o,2t)
+ flagT = 1;
+ next++; // can have core-offset specified later (e.g. 2s,1c,2t,3o)
+ } else if (*next == 'c' || *next == 'C') {
+ KMP_DEBUG_ASSERT(flagC == 0);
+ __kmp_place_num_cores = num;
+ flagC = 1;
+ next++;
+ //KMP_DEBUG_ASSERT(*next != '@'); // socket offset used "o" designator
+ } else if (*next == 'o' || *next == 'O') {
+ KMP_WARNING(AffHWSubsetDeprecated);
+ single_warning = 1;
+ KMP_DEBUG_ASSERT(flagC);
+ //KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
+ __kmp_place_core_offset = num;
+ next++;
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ KMP_DEBUG_ASSERT(flagC);
+ SKIP_WS(next);
+ if ( *next == '\0' )
+ return;
+ if (CHECK_DELIM(next)) {
+ next++; // skip delimiter
+ SKIP_WS(next);
+ }
+
+ // Get 4-th value (could be core-offset, num_threads)
+ if (*next >= '0' && *next <= '9') {
+ prev = next;
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ SKIP_WS(next);
+ if (*next == 'o' || *next == 'O') {
+ if (!single_warning) { // warn once
+ KMP_WARNING(AffHWSubsetDeprecated);
+ }
+ KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
+ __kmp_place_core_offset = num;
+ next++;
+ } else if (*next == 't' || *next == 'T') {
+ KMP_DEBUG_ASSERT(flagT == 0);
+ __kmp_place_num_threads_per_core = num;
+ flagT = 1;
+ next++; // can have core-offset specified after num threads
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ return;
+ }
+ SKIP_WS(next);
+ if ( *next == '\0' )
+ return;
+ if (CHECK_DELIM(next)) {
+ next++; // skip delimiter
+ SKIP_WS(next);
+ }
+
+ // Get 5-th value (could be core-offset, num_threads)
+ if (*next >= '0' && *next <= '9') {
+ prev = next;
+ SKIP_DIGITS(next);
+ num = __kmp_str_to_int(prev, *next);
+ SKIP_WS(next);
+ if (*next == 'o' || *next == 'O') {
+ if (!single_warning) { // warn once
+ KMP_WARNING(AffHWSubsetDeprecated);
+ }
+ KMP_DEBUG_ASSERT(flagT);
+ KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
+ __kmp_place_core_offset = num;
+ } else if (*next == 't' || *next == 'T') {
+ KMP_DEBUG_ASSERT(flagT == 0);
+ __kmp_place_num_threads_per_core = num;
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ }
+ } else {
+ KMP_WARNING(AffHWSubsetInvalid, name, value);
+ }
+ return;
+#undef CHECK_DELIM
+}
+
+static void
+__kmp_stg_print_hw_subset( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ if (__kmp_place_num_sockets + __kmp_place_num_cores + __kmp_place_num_threads_per_core) {
+ int comma = 0;
+ kmp_str_buf_t buf;
+ __kmp_str_buf_init(&buf);
+ if(__kmp_env_format)
+ KMP_STR_BUF_PRINT_NAME_EX(name);
+ else
+ __kmp_str_buf_print(buffer, " %s='", name);
+ if (__kmp_place_num_sockets) {
+ __kmp_str_buf_print(&buf, "%ds", __kmp_place_num_sockets);
+ if (__kmp_place_socket_offset)
+ __kmp_str_buf_print(&buf, "@%d", __kmp_place_socket_offset);
+ comma = 1;
+ }
+ if (__kmp_place_num_cores) {
+ __kmp_str_buf_print(&buf, "%s%dc", comma?",":"", __kmp_place_num_cores);
+ if (__kmp_place_core_offset)
+ __kmp_str_buf_print(&buf, "@%d", __kmp_place_core_offset);
+ comma = 1;
+ }
+ if (__kmp_place_num_threads_per_core)
+ __kmp_str_buf_print(&buf, "%s%dt", comma?",":"", __kmp_place_num_threads_per_core);
+ __kmp_str_buf_print(buffer, "%s'\n", buf.str );
+ __kmp_str_buf_free(&buf);
+/*
+ } else {
+ __kmp_str_buf_print( buffer, " %s: %s \n", name, KMP_I18N_STR( NotDefined ) );
+*/
+ }
+}
+
+#if USE_ITT_BUILD
+// -------------------------------------------------------------------------------------------------
+// KMP_FORKJOIN_FRAMES
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_forkjoin_frames( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_bool( name, value, & __kmp_forkjoin_frames );
+} // __kmp_stg_parse_forkjoin_frames
+
+static void
+__kmp_stg_print_forkjoin_frames( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_forkjoin_frames );
+} // __kmp_stg_print_forkjoin_frames
+
+// -------------------------------------------------------------------------------------------------
+// KMP_FORKJOIN_FRAMES_MODE
+// -------------------------------------------------------------------------------------------------
+
+static void
+__kmp_stg_parse_forkjoin_frames_mode( char const * name, char const * value, void * data ) {
+ __kmp_stg_parse_int( name, value, 0, 3, & __kmp_forkjoin_frames_mode );
+} // __kmp_stg_parse_forkjoin_frames
+
+static void
+__kmp_stg_print_forkjoin_frames_mode( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_int( buffer, name, __kmp_forkjoin_frames_mode );
+} // __kmp_stg_print_forkjoin_frames
+#endif /* USE_ITT_BUILD */
+
+// -------------------------------------------------------------------------------------------------
+// OMP_DISPLAY_ENV
+// -------------------------------------------------------------------------------------------------
+
+#if OMP_40_ENABLED
+
+static void
+__kmp_stg_parse_omp_display_env( char const * name, char const * value, void * data )
+{
+ if ( __kmp_str_match( "VERBOSE", 1, value ) )
+ {
+ __kmp_display_env_verbose = TRUE;
+ } else {
+ __kmp_stg_parse_bool( name, value, & __kmp_display_env );
+ }
+
+} // __kmp_stg_parse_omp_display_env
+
+static void
+__kmp_stg_print_omp_display_env( kmp_str_buf_t * buffer, char const * name, void * data )
+{
+ if ( __kmp_display_env_verbose )
+ {
+ __kmp_stg_print_str( buffer, name, "VERBOSE" );
+ } else {
+ __kmp_stg_print_bool( buffer, name, __kmp_display_env );
+ }
+} // __kmp_stg_print_omp_display_env
+
+static void
+__kmp_stg_parse_omp_cancellation( char const * name, char const * value, void * data ) {
+ if ( TCR_4(__kmp_init_parallel) ) {
+ KMP_WARNING( EnvParallelWarn, name );
+ return;
+ } // read value before first parallel only
+ __kmp_stg_parse_bool( name, value, & __kmp_omp_cancellation );
+} // __kmp_stg_parse_omp_cancellation
+
+static void
+__kmp_stg_print_omp_cancellation( kmp_str_buf_t * buffer, char const * name, void * data ) {
+ __kmp_stg_print_bool( buffer, name, __kmp_omp_cancellation );
+} // __kmp_stg_print_omp_cancellation
+
+#endif
+
+// -------------------------------------------------------------------------------------------------
+// Table.
+// -------------------------------------------------------------------------------------------------
+
+
+static kmp_setting_t __kmp_stg_table[] = {
+
+ { "KMP_ALL_THREADS", __kmp_stg_parse_all_threads, __kmp_stg_print_all_threads, NULL, 0, 0 },
+ { "KMP_BLOCKTIME", __kmp_stg_parse_blocktime, __kmp_stg_print_blocktime, NULL, 0, 0 },
+ { "KMP_DUPLICATE_LIB_OK", __kmp_stg_parse_duplicate_lib_ok, __kmp_stg_print_duplicate_lib_ok, NULL, 0, 0 },
+ { "KMP_LIBRARY", __kmp_stg_parse_wait_policy, __kmp_stg_print_wait_policy, NULL, 0, 0 },
+ { "KMP_MAX_THREADS", __kmp_stg_parse_all_threads, NULL, NULL, 0, 0 }, // For backward compatibility
+ { "KMP_MONITOR_STACKSIZE", __kmp_stg_parse_monitor_stacksize, __kmp_stg_print_monitor_stacksize, NULL, 0, 0 },
+ { "KMP_SETTINGS", __kmp_stg_parse_settings, __kmp_stg_print_settings, NULL, 0, 0 },
+ { "KMP_STACKOFFSET", __kmp_stg_parse_stackoffset, __kmp_stg_print_stackoffset, NULL, 0, 0 },
+ { "KMP_STACKSIZE", __kmp_stg_parse_stacksize, __kmp_stg_print_stacksize, NULL, 0, 0 },
+ { "KMP_STACKPAD", __kmp_stg_parse_stackpad, __kmp_stg_print_stackpad, NULL, 0, 0 },
+ { "KMP_VERSION", __kmp_stg_parse_version, __kmp_stg_print_version, NULL, 0, 0 },
+ { "KMP_WARNINGS", __kmp_stg_parse_warnings, __kmp_stg_print_warnings, NULL, 0, 0 },
+
+ { "OMP_NESTED", __kmp_stg_parse_nested, __kmp_stg_print_nested, NULL, 0, 0 },
+ { "OMP_NUM_THREADS", __kmp_stg_parse_num_threads, __kmp_stg_print_num_threads, NULL, 0, 0 },
+ { "OMP_STACKSIZE", __kmp_stg_parse_stacksize, __kmp_stg_print_stacksize, NULL, 0, 0 },
+
+ { "KMP_TASKING", __kmp_stg_parse_tasking, __kmp_stg_print_tasking, NULL, 0, 0 },
+ { "KMP_TASK_STEALING_CONSTRAINT", __kmp_stg_parse_task_stealing, __kmp_stg_print_task_stealing, NULL, 0, 0 },
+ { "OMP_MAX_ACTIVE_LEVELS", __kmp_stg_parse_max_active_levels, __kmp_stg_print_max_active_levels, NULL, 0, 0 },
+#if OMP_45_ENABLED
+ { "OMP_MAX_TASK_PRIORITY", __kmp_stg_parse_max_task_priority, __kmp_stg_print_max_task_priority, NULL, 0, 0 },
+#endif
+ { "OMP_THREAD_LIMIT", __kmp_stg_parse_all_threads, __kmp_stg_print_all_threads, NULL, 0, 0 },
+ { "OMP_WAIT_POLICY", __kmp_stg_parse_wait_policy, __kmp_stg_print_wait_policy, NULL, 0, 0 },
+ { "KMP_DISP_NUM_BUFFERS", __kmp_stg_parse_disp_buffers, __kmp_stg_print_disp_buffers, NULL, 0, 0 },
+#if KMP_NESTED_HOT_TEAMS
+ { "KMP_HOT_TEAMS_MAX_LEVEL", __kmp_stg_parse_hot_teams_level, __kmp_stg_print_hot_teams_level, NULL, 0, 0 },
+ { "KMP_HOT_TEAMS_MODE", __kmp_stg_parse_hot_teams_mode, __kmp_stg_print_hot_teams_mode, NULL, 0, 0 },
+#endif // KMP_NESTED_HOT_TEAMS
+
+#if KMP_HANDLE_SIGNALS
+ { "KMP_HANDLE_SIGNALS", __kmp_stg_parse_handle_signals, __kmp_stg_print_handle_signals, NULL, 0, 0 },
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ { "KMP_INHERIT_FP_CONTROL", __kmp_stg_parse_inherit_fp_control, __kmp_stg_print_inherit_fp_control, NULL, 0, 0 },
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+#ifdef KMP_GOMP_COMPAT
+ { "GOMP_STACKSIZE", __kmp_stg_parse_stacksize, NULL, NULL, 0, 0 },
+#endif
+
+#ifdef KMP_DEBUG
+ { "KMP_A_DEBUG", __kmp_stg_parse_a_debug, __kmp_stg_print_a_debug, NULL, 0, 0 },
+ { "KMP_B_DEBUG", __kmp_stg_parse_b_debug, __kmp_stg_print_b_debug, NULL, 0, 0 },
+ { "KMP_C_DEBUG", __kmp_stg_parse_c_debug, __kmp_stg_print_c_debug, NULL, 0, 0 },
+ { "KMP_D_DEBUG", __kmp_stg_parse_d_debug, __kmp_stg_print_d_debug, NULL, 0, 0 },
+ { "KMP_E_DEBUG", __kmp_stg_parse_e_debug, __kmp_stg_print_e_debug, NULL, 0, 0 },
+ { "KMP_F_DEBUG", __kmp_stg_parse_f_debug, __kmp_stg_print_f_debug, NULL, 0, 0 },
+ { "KMP_DEBUG", __kmp_stg_parse_debug, NULL, /* no print */ NULL, 0, 0 },
+ { "KMP_DEBUG_BUF", __kmp_stg_parse_debug_buf, __kmp_stg_print_debug_buf, NULL, 0, 0 },
+ { "KMP_DEBUG_BUF_ATOMIC", __kmp_stg_parse_debug_buf_atomic, __kmp_stg_print_debug_buf_atomic, NULL, 0, 0 },
+ { "KMP_DEBUG_BUF_CHARS", __kmp_stg_parse_debug_buf_chars, __kmp_stg_print_debug_buf_chars, NULL, 0, 0 },
+ { "KMP_DEBUG_BUF_LINES", __kmp_stg_parse_debug_buf_lines, __kmp_stg_print_debug_buf_lines, NULL, 0, 0 },
+ { "KMP_DIAG", __kmp_stg_parse_diag, __kmp_stg_print_diag, NULL, 0, 0 },
+
+ { "KMP_PAR_RANGE", __kmp_stg_parse_par_range_env, __kmp_stg_print_par_range_env, NULL, 0, 0 },
+ { "KMP_YIELD_CYCLE", __kmp_stg_parse_yield_cycle, __kmp_stg_print_yield_cycle, NULL, 0, 0 },
+ { "KMP_YIELD_ON", __kmp_stg_parse_yield_on, __kmp_stg_print_yield_on, NULL, 0, 0 },
+ { "KMP_YIELD_OFF", __kmp_stg_parse_yield_off, __kmp_stg_print_yield_off, NULL, 0, 0 },
+#endif // KMP_DEBUG
+
+ { "KMP_ALIGN_ALLOC", __kmp_stg_parse_align_alloc, __kmp_stg_print_align_alloc, NULL, 0, 0 },
+
+ { "KMP_PLAIN_BARRIER", __kmp_stg_parse_barrier_branch_bit, __kmp_stg_print_barrier_branch_bit, NULL, 0, 0 },
+ { "KMP_PLAIN_BARRIER_PATTERN", __kmp_stg_parse_barrier_pattern, __kmp_stg_print_barrier_pattern, NULL, 0, 0 },
+ { "KMP_FORKJOIN_BARRIER", __kmp_stg_parse_barrier_branch_bit, __kmp_stg_print_barrier_branch_bit, NULL, 0, 0 },
+ { "KMP_FORKJOIN_BARRIER_PATTERN", __kmp_stg_parse_barrier_pattern, __kmp_stg_print_barrier_pattern, NULL, 0, 0 },
+#if KMP_FAST_REDUCTION_BARRIER
+ { "KMP_REDUCTION_BARRIER", __kmp_stg_parse_barrier_branch_bit, __kmp_stg_print_barrier_branch_bit, NULL, 0, 0 },
+ { "KMP_REDUCTION_BARRIER_PATTERN", __kmp_stg_parse_barrier_pattern, __kmp_stg_print_barrier_pattern, NULL, 0, 0 },
+#endif
+
+ { "KMP_ABORT_DELAY", __kmp_stg_parse_abort_delay, __kmp_stg_print_abort_delay, NULL, 0, 0 },
+ { "KMP_CPUINFO_FILE", __kmp_stg_parse_cpuinfo_file, __kmp_stg_print_cpuinfo_file, NULL, 0, 0 },
+ { "KMP_FORCE_REDUCTION", __kmp_stg_parse_force_reduction, __kmp_stg_print_force_reduction, NULL, 0, 0 },
+ { "KMP_DETERMINISTIC_REDUCTION", __kmp_stg_parse_force_reduction, __kmp_stg_print_force_reduction, NULL, 0, 0 },
+ { "KMP_STORAGE_MAP", __kmp_stg_parse_storage_map, __kmp_stg_print_storage_map, NULL, 0, 0 },
+ { "KMP_ALL_THREADPRIVATE", __kmp_stg_parse_all_threadprivate, __kmp_stg_print_all_threadprivate, NULL, 0, 0 },
+ { "KMP_FOREIGN_THREADS_THREADPRIVATE", __kmp_stg_parse_foreign_threads_threadprivate, __kmp_stg_print_foreign_threads_threadprivate, NULL, 0, 0 },
+
+#if KMP_AFFINITY_SUPPORTED
+ { "KMP_AFFINITY", __kmp_stg_parse_affinity, __kmp_stg_print_affinity, NULL, 0, 0 },
+# ifdef KMP_GOMP_COMPAT
+ { "GOMP_CPU_AFFINITY", __kmp_stg_parse_gomp_cpu_affinity, NULL, /* no print */ NULL, 0, 0 },
+# endif /* KMP_GOMP_COMPAT */
+# if OMP_40_ENABLED
+ { "OMP_PROC_BIND", __kmp_stg_parse_proc_bind, __kmp_stg_print_proc_bind, NULL, 0, 0 },
+ { "OMP_PLACES", __kmp_stg_parse_places, __kmp_stg_print_places, NULL, 0, 0 },
+# else
+ { "OMP_PROC_BIND", __kmp_stg_parse_proc_bind, NULL, /* no print */ NULL, 0, 0 },
+# endif /* OMP_40_ENABLED */
+
+ { "KMP_TOPOLOGY_METHOD", __kmp_stg_parse_topology_method, __kmp_stg_print_topology_method, NULL, 0, 0 },
+
+#else
+
+ //
+ // KMP_AFFINITY is not supported on OS X*, nor is OMP_PLACES.
+ // OMP_PROC_BIND and proc-bind-var are supported, however.
+ //
+# if OMP_40_ENABLED
+ { "OMP_PROC_BIND", __kmp_stg_parse_proc_bind, __kmp_stg_print_proc_bind, NULL, 0, 0 },
+# endif
+
+#endif // KMP_AFFINITY_SUPPORTED
+
+ { "KMP_INIT_AT_FORK", __kmp_stg_parse_init_at_fork, __kmp_stg_print_init_at_fork, NULL, 0, 0 },
+ { "KMP_SCHEDULE", __kmp_stg_parse_schedule, __kmp_stg_print_schedule, NULL, 0, 0 },
+ { "OMP_SCHEDULE", __kmp_stg_parse_omp_schedule, __kmp_stg_print_omp_schedule, NULL, 0, 0 },
+ { "KMP_ATOMIC_MODE", __kmp_stg_parse_atomic_mode, __kmp_stg_print_atomic_mode, NULL, 0, 0 },
+ { "KMP_CONSISTENCY_CHECK", __kmp_stg_parse_consistency_check, __kmp_stg_print_consistency_check, NULL, 0, 0 },
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ { "KMP_ITT_PREPARE_DELAY", __kmp_stg_parse_itt_prepare_delay, __kmp_stg_print_itt_prepare_delay, NULL, 0, 0 },
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ { "KMP_MALLOC_POOL_INCR", __kmp_stg_parse_malloc_pool_incr, __kmp_stg_print_malloc_pool_incr, NULL, 0, 0 },
+ { "KMP_INIT_WAIT", __kmp_stg_parse_init_wait, __kmp_stg_print_init_wait, NULL, 0, 0 },
+ { "KMP_NEXT_WAIT", __kmp_stg_parse_next_wait, __kmp_stg_print_next_wait, NULL, 0, 0 },
+ { "KMP_GTID_MODE", __kmp_stg_parse_gtid_mode, __kmp_stg_print_gtid_mode, NULL, 0, 0 },
+ { "OMP_DYNAMIC", __kmp_stg_parse_omp_dynamic, __kmp_stg_print_omp_dynamic, NULL, 0, 0 },
+ { "KMP_DYNAMIC_MODE", __kmp_stg_parse_kmp_dynamic_mode, __kmp_stg_print_kmp_dynamic_mode, NULL, 0, 0 },
+
+#ifdef USE_LOAD_BALANCE
+ { "KMP_LOAD_BALANCE_INTERVAL", __kmp_stg_parse_ld_balance_interval,__kmp_stg_print_ld_balance_interval,NULL, 0, 0 },
+#endif
+
+ { "KMP_NUM_LOCKS_IN_BLOCK", __kmp_stg_parse_lock_block, __kmp_stg_print_lock_block, NULL, 0, 0 },
+ { "KMP_LOCK_KIND", __kmp_stg_parse_lock_kind, __kmp_stg_print_lock_kind, NULL, 0, 0 },
+ { "KMP_SPIN_BACKOFF_PARAMS", __kmp_stg_parse_spin_backoff_params, __kmp_stg_print_spin_backoff_params, NULL, 0, 0 },
+#if KMP_USE_ADAPTIVE_LOCKS
+ { "KMP_ADAPTIVE_LOCK_PROPS", __kmp_stg_parse_adaptive_lock_props,__kmp_stg_print_adaptive_lock_props, NULL, 0, 0 },
+#if KMP_DEBUG_ADAPTIVE_LOCKS
+ { "KMP_SPECULATIVE_STATSFILE", __kmp_stg_parse_speculative_statsfile,__kmp_stg_print_speculative_statsfile, NULL, 0, 0 },
+#endif
+#endif // KMP_USE_ADAPTIVE_LOCKS
+ { "KMP_PLACE_THREADS", __kmp_stg_parse_hw_subset, __kmp_stg_print_hw_subset, NULL, 0, 0 },
+ { "KMP_HW_SUBSET", __kmp_stg_parse_hw_subset, __kmp_stg_print_hw_subset, NULL, 0, 0 },
+#if USE_ITT_BUILD
+ { "KMP_FORKJOIN_FRAMES", __kmp_stg_parse_forkjoin_frames, __kmp_stg_print_forkjoin_frames, NULL, 0, 0 },
+ { "KMP_FORKJOIN_FRAMES_MODE", __kmp_stg_parse_forkjoin_frames_mode,__kmp_stg_print_forkjoin_frames_mode, NULL, 0, 0 },
+#endif
+
+# if OMP_40_ENABLED
+ { "OMP_DISPLAY_ENV", __kmp_stg_parse_omp_display_env, __kmp_stg_print_omp_display_env, NULL, 0, 0 },
+ { "OMP_CANCELLATION", __kmp_stg_parse_omp_cancellation, __kmp_stg_print_omp_cancellation, NULL, 0, 0 },
+#endif
+ { "", NULL, NULL, NULL, 0, 0 }
+}; // settings
+
+static int const __kmp_stg_count = sizeof( __kmp_stg_table ) / sizeof( kmp_setting_t );
+
+static inline
+kmp_setting_t *
+__kmp_stg_find( char const * name ) {
+
+ int i;
+ if ( name != NULL ) {
+ for ( i = 0; i < __kmp_stg_count; ++ i ) {
+ if ( strcmp( __kmp_stg_table[ i ].name, name ) == 0 ) {
+ return & __kmp_stg_table[ i ];
+ }; // if
+ }; // for
+ }; // if
+ return NULL;
+
+} // __kmp_stg_find
+
+
+static int
+__kmp_stg_cmp( void const * _a, void const * _b ) {
+ kmp_setting_t * a = (kmp_setting_t *) _a;
+ kmp_setting_t * b = (kmp_setting_t *) _b;
+
+ //
+ // Process KMP_AFFINITY last.
+ // It needs to come after OMP_PLACES and GOMP_CPU_AFFINITY.
+ //
+ if ( strcmp( a->name, "KMP_AFFINITY" ) == 0 ) {
+ if ( strcmp( b->name, "KMP_AFFINITY" ) == 0 ) {
+ return 0;
+ }
+ return 1;
+ }
+ else if ( strcmp( b->name, "KMP_AFFINITY" ) == 0 ) {
+ return -1;
+ }
+ return strcmp( a->name, b->name );
+} // __kmp_stg_cmp
+
+
+static void
+__kmp_stg_init( void
+) {
+
+ static int initialized = 0;
+
+ if ( ! initialized ) {
+
+ // Sort table.
+ qsort( __kmp_stg_table, __kmp_stg_count - 1, sizeof( kmp_setting_t ), __kmp_stg_cmp );
+
+ { // Initialize *_STACKSIZE data.
+
+ kmp_setting_t * kmp_stacksize = __kmp_stg_find( "KMP_STACKSIZE" ); // 1st priority.
+#ifdef KMP_GOMP_COMPAT
+ kmp_setting_t * gomp_stacksize = __kmp_stg_find( "GOMP_STACKSIZE" ); // 2nd priority.
+#endif
+ kmp_setting_t * omp_stacksize = __kmp_stg_find( "OMP_STACKSIZE" ); // 3rd priority.
+
+ // !!! volatile keyword is Intel (R) C Compiler bug CQ49908 workaround.
+ // !!! Compiler does not understand rivals is used and optimizes out assignments
+ // !!! rivals[ i ++ ] = ...;
+ static kmp_setting_t * volatile rivals[ 4 ];
+ static kmp_stg_ss_data_t kmp_data = { 1, (kmp_setting_t **)rivals };
+#ifdef KMP_GOMP_COMPAT
+ static kmp_stg_ss_data_t gomp_data = { 1024, (kmp_setting_t **)rivals };
+#endif
+ static kmp_stg_ss_data_t omp_data = { 1024, (kmp_setting_t **)rivals };
+ int i = 0;
+
+ rivals[ i ++ ] = kmp_stacksize;
+#ifdef KMP_GOMP_COMPAT
+ if ( gomp_stacksize != NULL ) {
+ rivals[ i ++ ] = gomp_stacksize;
+ }; // if
+#endif
+ rivals[ i ++ ] = omp_stacksize;
+ rivals[ i ++ ] = NULL;
+
+ kmp_stacksize->data = & kmp_data;
+#ifdef KMP_GOMP_COMPAT
+ if ( gomp_stacksize != NULL ) {
+ gomp_stacksize->data = & gomp_data;
+ }; // if
+#endif
+ omp_stacksize->data = & omp_data;
+
+ }
+
+ { // Initialize KMP_LIBRARY and OMP_WAIT_POLICY data.
+
+ kmp_setting_t * kmp_library = __kmp_stg_find( "KMP_LIBRARY" ); // 1st priority.
+ kmp_setting_t * omp_wait_policy = __kmp_stg_find( "OMP_WAIT_POLICY" ); // 2nd priority.
+
+ // !!! volatile keyword is Intel (R) C Compiler bug CQ49908 workaround.
+ static kmp_setting_t * volatile rivals[ 3 ];
+ static kmp_stg_wp_data_t kmp_data = { 0, (kmp_setting_t **)rivals };
+ static kmp_stg_wp_data_t omp_data = { 1, (kmp_setting_t **)rivals };
+ int i = 0;
+
+ rivals[ i ++ ] = kmp_library;
+ if ( omp_wait_policy != NULL ) {
+ rivals[ i ++ ] = omp_wait_policy;
+ }; // if
+ rivals[ i ++ ] = NULL;
+
+ kmp_library->data = & kmp_data;
+ if ( omp_wait_policy != NULL ) {
+ omp_wait_policy->data = & omp_data;
+ }; // if
+
+ }
+
+ { // Initialize KMP_ALL_THREADS, KMP_MAX_THREADS, and OMP_THREAD_LIMIT data.
+
+ kmp_setting_t * kmp_all_threads = __kmp_stg_find( "KMP_ALL_THREADS" ); // 1st priority.
+ kmp_setting_t * kmp_max_threads = __kmp_stg_find( "KMP_MAX_THREADS" ); // 2nd priority.
+ kmp_setting_t * omp_thread_limit = __kmp_stg_find( "OMP_THREAD_LIMIT" ); // 3rd priority.
+
+ // !!! volatile keyword is Intel (R) C Compiler bug CQ49908 workaround.
+ static kmp_setting_t * volatile rivals[ 4 ];
+ int i = 0;
+
+ rivals[ i ++ ] = kmp_all_threads;
+ rivals[ i ++ ] = kmp_max_threads;
+ if ( omp_thread_limit != NULL ) {
+ rivals[ i ++ ] = omp_thread_limit;
+ }; // if
+ rivals[ i ++ ] = NULL;
+
+ kmp_all_threads->data = (void*)& rivals;
+ kmp_max_threads->data = (void*)& rivals;
+ if ( omp_thread_limit != NULL ) {
+ omp_thread_limit->data = (void*)& rivals;
+ }; // if
+
+ }
+
+#if KMP_AFFINITY_SUPPORTED
+ { // Initialize KMP_AFFINITY, GOMP_CPU_AFFINITY, and OMP_PROC_BIND data.
+
+ kmp_setting_t * kmp_affinity = __kmp_stg_find( "KMP_AFFINITY" ); // 1st priority.
+ KMP_DEBUG_ASSERT( kmp_affinity != NULL );
+
+# ifdef KMP_GOMP_COMPAT
+ kmp_setting_t * gomp_cpu_affinity = __kmp_stg_find( "GOMP_CPU_AFFINITY" ); // 2nd priority.
+ KMP_DEBUG_ASSERT( gomp_cpu_affinity != NULL );
+# endif
+
+ kmp_setting_t * omp_proc_bind = __kmp_stg_find( "OMP_PROC_BIND" ); // 3rd priority.
+ KMP_DEBUG_ASSERT( omp_proc_bind != NULL );
+
+ // !!! volatile keyword is Intel (R) C Compiler bug CQ49908 workaround.
+ static kmp_setting_t * volatile rivals[ 4 ];
+ int i = 0;
+
+ rivals[ i ++ ] = kmp_affinity;
+
+# ifdef KMP_GOMP_COMPAT
+ rivals[ i ++ ] = gomp_cpu_affinity;
+ gomp_cpu_affinity->data = (void*)& rivals;
+# endif
+
+ rivals[ i ++ ] = omp_proc_bind;
+ omp_proc_bind->data = (void*)& rivals;
+ rivals[ i ++ ] = NULL;
+
+# if OMP_40_ENABLED
+ static kmp_setting_t * volatile places_rivals[ 4 ];
+ i = 0;
+
+ kmp_setting_t * omp_places = __kmp_stg_find( "OMP_PLACES" ); // 3rd priority.
+ KMP_DEBUG_ASSERT( omp_places != NULL );
+
+ places_rivals[ i ++ ] = kmp_affinity;
+# ifdef KMP_GOMP_COMPAT
+ places_rivals[ i ++ ] = gomp_cpu_affinity;
+# endif
+ places_rivals[ i ++ ] = omp_places;
+ omp_places->data = (void*)& places_rivals;
+ places_rivals[ i ++ ] = NULL;
+# endif
+ }
+#else
+ // KMP_AFFINITY not supported, so OMP_PROC_BIND has no rivals.
+ // OMP_PLACES not supported yet.
+#endif // KMP_AFFINITY_SUPPORTED
+
+ { // Initialize KMP_DETERMINISTIC_REDUCTION and KMP_FORCE_REDUCTION data.
+
+ kmp_setting_t * kmp_force_red = __kmp_stg_find( "KMP_FORCE_REDUCTION" ); // 1st priority.
+ kmp_setting_t * kmp_determ_red = __kmp_stg_find( "KMP_DETERMINISTIC_REDUCTION" ); // 2nd priority.
+
+ // !!! volatile keyword is Intel (R) C Compiler bug CQ49908 workaround.
+ static kmp_setting_t * volatile rivals[ 3 ];
+ static kmp_stg_fr_data_t force_data = { 1, (kmp_setting_t **)rivals };
+ static kmp_stg_fr_data_t determ_data = { 0, (kmp_setting_t **)rivals };
+ int i = 0;
+
+ rivals[ i ++ ] = kmp_force_red;
+ if ( kmp_determ_red != NULL ) {
+ rivals[ i ++ ] = kmp_determ_red;
+ }; // if
+ rivals[ i ++ ] = NULL;
+
+ kmp_force_red->data = & force_data;
+ if ( kmp_determ_red != NULL ) {
+ kmp_determ_red->data = & determ_data;
+ }; // if
+ }
+
+ initialized = 1;
+
+ }; // if
+
+ // Reset flags.
+ int i;
+ for ( i = 0; i < __kmp_stg_count; ++ i ) {
+ __kmp_stg_table[ i ].set = 0;
+ }; // for
+
+} // __kmp_stg_init
+
+
+static void
+__kmp_stg_parse(
+ char const * name,
+ char const * value
+) {
+
+ // On Windows* OS there are some nameless variables like "C:=C:\" (yeah, really nameless, they are
+ // presented in environment block as "=C:=C\\\x00=D:=D:\\\x00...", so let us skip them.
+ if ( name[ 0 ] == 0 ) {
+ return;
+ }; // if
+
+ if ( value != NULL ) {
+ kmp_setting_t * setting = __kmp_stg_find( name );
+ if ( setting != NULL ) {
+ setting->parse( name, value, setting->data );
+ setting->defined = 1;
+ }; // if
+ }; // if
+
+} // __kmp_stg_parse
+
+
+static int
+__kmp_stg_check_rivals( // 0 -- Ok, 1 -- errors found.
+ char const * name, // Name of variable.
+ char const * value, // Value of the variable.
+ kmp_setting_t * * rivals // List of rival settings (the list must include current one).
+) {
+
+ if ( rivals == NULL ) {
+ return 0;
+ }
+
+ // Loop thru higher priority settings (listed before current).
+ int i = 0;
+ for ( ; strcmp( rivals[ i ]->name, name ) != 0; i++ ) {
+ KMP_DEBUG_ASSERT( rivals[ i ] != NULL );
+
+#if KMP_AFFINITY_SUPPORTED
+ if ( rivals[ i ] == __kmp_affinity_notype ) {
+ //
+ // If KMP_AFFINITY is specified without a type name,
+ // it does not rival OMP_PROC_BIND or GOMP_CPU_AFFINITY.
+ //
+ continue;
+ }
+#endif
+
+ if ( rivals[ i ]->set ) {
+ KMP_WARNING( StgIgnored, name, rivals[ i ]->name );
+ return 1;
+ }; // if
+ }; // while
+
+ ++ i; // Skip current setting.
+ return 0;
+
+}; // __kmp_stg_check_rivals
+
+
+static int
+__kmp_env_toPrint( char const * name, int flag ) {
+ int rc = 0;
+ kmp_setting_t * setting = __kmp_stg_find( name );
+ if ( setting != NULL ) {
+ rc = setting->defined;
+ if ( flag >= 0 ) {
+ setting->defined = flag;
+ }; // if
+ }; // if
+ return rc;
+}
+
+
+static void
+__kmp_aux_env_initialize( kmp_env_blk_t* block ) {
+
+ char const * value;
+
+ /* OMP_NUM_THREADS */
+ value = __kmp_env_blk_var( block, "OMP_NUM_THREADS" );
+ if ( value ) {
+ ompc_set_num_threads( __kmp_dflt_team_nth );
+ }
+
+ /* KMP_BLOCKTIME */
+ value = __kmp_env_blk_var( block, "KMP_BLOCKTIME" );
+ if ( value ) {
+ kmpc_set_blocktime( __kmp_dflt_blocktime );
+ }
+
+ /* OMP_NESTED */
+ value = __kmp_env_blk_var( block, "OMP_NESTED" );
+ if ( value ) {
+ ompc_set_nested( __kmp_dflt_nested );
+ }
+
+ /* OMP_DYNAMIC */
+ value = __kmp_env_blk_var( block, "OMP_DYNAMIC" );
+ if ( value ) {
+ ompc_set_dynamic( __kmp_global.g.g_dynamic );
+ }
+
+}
+
+void
+__kmp_env_initialize( char const * string ) {
+
+ kmp_env_blk_t block;
+ int i;
+
+ __kmp_stg_init();
+
+ // Hack!!!
+ if ( string == NULL ) {
+ // __kmp_max_nth = __kmp_sys_max_nth;
+ __kmp_threads_capacity = __kmp_initial_threads_capacity( __kmp_dflt_team_nth_ub );
+ }; // if
+ __kmp_env_blk_init( & block, string );
+
+ //
+ // update the set flag on all entries that have an env var
+ //
+ for ( i = 0; i < block.count; ++ i ) {
+ if (( block.vars[ i ].name == NULL )
+ || ( *block.vars[ i ].name == '\0')) {
+ continue;
+ }
+ if ( block.vars[ i ].value == NULL ) {
+ continue;
+ }
+ kmp_setting_t * setting = __kmp_stg_find( block.vars[ i ].name );
+ if ( setting != NULL ) {
+ setting->set = 1;
+ }
+ }; // for i
+
+ // We need to know if blocktime was set when processing OMP_WAIT_POLICY
+ blocktime_str = __kmp_env_blk_var( & block, "KMP_BLOCKTIME" );
+
+ // Special case. If we parse environment, not a string, process KMP_WARNINGS first.
+ if ( string == NULL ) {
+ char const * name = "KMP_WARNINGS";
+ char const * value = __kmp_env_blk_var( & block, name );
+ __kmp_stg_parse( name, value );
+ }; // if
+
+#if KMP_AFFINITY_SUPPORTED
+ //
+ // Special case. KMP_AFFINITY is not a rival to other affinity env vars
+ // if no affinity type is specified. We want to allow
+ // KMP_AFFINITY=[no],verbose/[no]warnings/etc. to be enabled when
+ // specifying the affinity type via GOMP_CPU_AFFINITY or the OMP 4.0
+ // affinity mechanism.
+ //
+ __kmp_affinity_notype = NULL;
+ char const *aff_str = __kmp_env_blk_var( & block, "KMP_AFFINITY" );
+ if ( aff_str != NULL ) {
+ //
+ // Check if the KMP_AFFINITY type is specified in the string.
+ // We just search the string for "compact", "scatter", etc.
+ // without really parsing the string. The syntax of the
+ // KMP_AFFINITY env var is such that none of the affinity
+ // type names can appear anywhere other that the type
+ // specifier, even as substrings.
+ //
+ // I can't find a case-insensitive version of strstr on Windows* OS.
+ // Use the case-sensitive version for now.
+ //
+
+# if KMP_OS_WINDOWS
+# define FIND strstr
+# else
+# define FIND strcasestr
+# endif
+
+ if ( ( FIND( aff_str, "none" ) == NULL )
+ && ( FIND( aff_str, "physical" ) == NULL )
+ && ( FIND( aff_str, "logical" ) == NULL )
+ && ( FIND( aff_str, "compact" ) == NULL )
+ && ( FIND( aff_str, "scatter" ) == NULL )
+ && ( FIND( aff_str, "explicit" ) == NULL )
+ && ( FIND( aff_str, "balanced" ) == NULL )
+ && ( FIND( aff_str, "disabled" ) == NULL ) ) {
+ __kmp_affinity_notype = __kmp_stg_find( "KMP_AFFINITY" );
+ }
+ else {
+ //
+ // A new affinity type is specified.
+ // Reset the affinity flags to their default values,
+ // in case this is called from kmp_set_defaults().
+ //
+ __kmp_affinity_type = affinity_default;
+ __kmp_affinity_gran = affinity_gran_default;
+ __kmp_affinity_top_method = affinity_top_method_default;
+ __kmp_affinity_respect_mask = affinity_respect_mask_default;
+ }
+# undef FIND
+
+#if OMP_40_ENABLED
+ //
+ // Also reset the affinity flags if OMP_PROC_BIND is specified.
+ //
+ aff_str = __kmp_env_blk_var( & block, "OMP_PROC_BIND" );
+ if ( aff_str != NULL ) {
+ __kmp_affinity_type = affinity_default;
+ __kmp_affinity_gran = affinity_gran_default;
+ __kmp_affinity_top_method = affinity_top_method_default;
+ __kmp_affinity_respect_mask = affinity_respect_mask_default;
+ }
+#endif /* OMP_40_ENABLED */
+ }
+
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+#if OMP_40_ENABLED
+ //
+ // Set up the nested proc bind type vector.
+ //
+ if ( __kmp_nested_proc_bind.bind_types == NULL ) {
+ __kmp_nested_proc_bind.bind_types = (kmp_proc_bind_t *)
+ KMP_INTERNAL_MALLOC( sizeof(kmp_proc_bind_t) );
+ if ( __kmp_nested_proc_bind.bind_types == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }
+ __kmp_nested_proc_bind.size = 1;
+ __kmp_nested_proc_bind.used = 1;
+# if KMP_AFFINITY_SUPPORTED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_default;
+# else
+ // default proc bind is false if affinity not supported
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+# endif
+
+ }
+#endif /* OMP_40_ENABLED */
+
+ //
+ // Now process all of the settings.
+ //
+ for ( i = 0; i < block.count; ++ i ) {
+ __kmp_stg_parse( block.vars[ i ].name, block.vars[ i ].value );
+ }; // for i
+
+ //
+ // If user locks have been allocated yet, don't reset the lock vptr table.
+ //
+ if ( ! __kmp_init_user_locks ) {
+ if ( __kmp_user_lock_kind == lk_default ) {
+ __kmp_user_lock_kind = lk_queuing;
+ }
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_init_dynamic_user_locks();
+#else
+ __kmp_set_user_lock_vptrs( __kmp_user_lock_kind );
+#endif
+ }
+ else {
+ KMP_DEBUG_ASSERT( string != NULL); // kmp_set_defaults() was called
+ KMP_DEBUG_ASSERT( __kmp_user_lock_kind != lk_default );
+ // Binds lock functions again to follow the transition between different
+ // KMP_CONSISTENCY_CHECK values. Calling this again is harmless as long
+ // as we do not allow lock kind changes after making a call to any
+ // user lock functions (true).
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_init_dynamic_user_locks();
+#else
+ __kmp_set_user_lock_vptrs( __kmp_user_lock_kind );
+#endif
+ }
+
+#if KMP_AFFINITY_SUPPORTED
+
+ if ( ! TCR_4(__kmp_init_middle) ) {
+ //
+ // Determine if the machine/OS is actually capable of supporting
+ // affinity.
+ //
+ const char *var = "KMP_AFFINITY";
+# if KMP_USE_HWLOC
+ if(__kmp_hwloc_topology == NULL) {
+ if(hwloc_topology_init(&__kmp_hwloc_topology) < 0) {
+ __kmp_hwloc_error = TRUE;
+ if(__kmp_affinity_verbose)
+ KMP_WARNING(AffHwlocErrorOccurred, var, "hwloc_topology_init()");
+ }
+ if(hwloc_topology_load(__kmp_hwloc_topology) < 0) {
+ __kmp_hwloc_error = TRUE;
+ if(__kmp_affinity_verbose)
+ KMP_WARNING(AffHwlocErrorOccurred, var, "hwloc_topology_load()");
+ }
+ }
+# endif
+ if ( __kmp_affinity_type == affinity_disabled ) {
+ KMP_AFFINITY_DISABLE();
+ }
+ else if ( ! KMP_AFFINITY_CAPABLE() ) {
+# if KMP_USE_HWLOC
+ const hwloc_topology_support* topology_support = hwloc_topology_get_support(__kmp_hwloc_topology);
+ // Is the system capable of setting/getting this thread's affinity?
+ // also, is topology discovery possible? (pu indicates ability to discover processing units)
+ // and finally, were there no errors when calling any hwloc_* API functions?
+ if(topology_support && topology_support->cpubind->set_thisthread_cpubind &&
+ topology_support->cpubind->get_thisthread_cpubind &&
+ topology_support->discovery->pu &&
+ !__kmp_hwloc_error)
+ {
+ // enables affinity according to KMP_AFFINITY_CAPABLE() macro
+ KMP_AFFINITY_ENABLE(TRUE);
+ } else {
+ // indicate that hwloc didn't work and disable affinity
+ __kmp_hwloc_error = TRUE;
+ KMP_AFFINITY_DISABLE();
+ }
+# else
+ __kmp_affinity_determine_capable( var );
+# endif // KMP_USE_HWLOC
+ if ( ! KMP_AFFINITY_CAPABLE() ) {
+ if ( __kmp_affinity_verbose || ( __kmp_affinity_warnings
+ && ( __kmp_affinity_type != affinity_default )
+ && ( __kmp_affinity_type != affinity_none )
+ && ( __kmp_affinity_type != affinity_disabled ) ) ) {
+ KMP_WARNING( AffNotSupported, var );
+ }
+ __kmp_affinity_type = affinity_disabled;
+ __kmp_affinity_respect_mask = 0;
+ __kmp_affinity_gran = affinity_gran_fine;
+ }
+ }
+
+# if OMP_40_ENABLED
+ if ( __kmp_affinity_type == affinity_disabled ) {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+ }
+ else if ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_true ) {
+ //
+ // OMP_PROC_BIND=true maps to OMP_PROC_BIND=spread.
+ //
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_spread;
+ }
+# endif /* OMP_40_ENABLED */
+
+ if ( KMP_AFFINITY_CAPABLE() ) {
+
+# if KMP_GROUP_AFFINITY
+
+ //
+ // Handle the Win 64 group affinity stuff if there are multiple
+ // processor groups, or if the user requested it, and OMP 4.0
+ // affinity is not in effect.
+ //
+ if ( ( ( __kmp_num_proc_groups > 1 )
+ && ( __kmp_affinity_type == affinity_default )
+# if OMP_40_ENABLED
+ && ( __kmp_nested_proc_bind.bind_types[0] == proc_bind_default ) )
+# endif
+ || ( __kmp_affinity_top_method == affinity_top_method_group ) ) {
+ if ( __kmp_affinity_respect_mask == affinity_respect_mask_default ) {
+ __kmp_affinity_respect_mask = FALSE;
+ }
+ if ( __kmp_affinity_type == affinity_default ) {
+ __kmp_affinity_type = affinity_compact;
+# if OMP_40_ENABLED
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+# endif
+ }
+ if ( __kmp_affinity_top_method == affinity_top_method_default ) {
+ if ( __kmp_affinity_gran == affinity_gran_default ) {
+ __kmp_affinity_top_method = affinity_top_method_group;
+ __kmp_affinity_gran = affinity_gran_group;
+ }
+ else if ( __kmp_affinity_gran == affinity_gran_group ) {
+ __kmp_affinity_top_method = affinity_top_method_group;
+ }
+ else {
+ __kmp_affinity_top_method = affinity_top_method_all;
+ }
+ }
+ else if ( __kmp_affinity_top_method == affinity_top_method_group ) {
+ if ( __kmp_affinity_gran == affinity_gran_default ) {
+ __kmp_affinity_gran = affinity_gran_group;
+ }
+ else if ( ( __kmp_affinity_gran != affinity_gran_group )
+ && ( __kmp_affinity_gran != affinity_gran_fine )
+ && ( __kmp_affinity_gran != affinity_gran_thread ) ) {
+ const char *str = NULL;
+ switch ( __kmp_affinity_gran ) {
+ case affinity_gran_core: str = "core"; break;
+ case affinity_gran_package: str = "package"; break;
+ case affinity_gran_node: str = "node"; break;
+ default: KMP_DEBUG_ASSERT( 0 );
+ }
+ KMP_WARNING( AffGranTopGroup, var, str );
+ __kmp_affinity_gran = affinity_gran_fine;
+ }
+ }
+ else {
+ if ( __kmp_affinity_gran == affinity_gran_default ) {
+ __kmp_affinity_gran = affinity_gran_core;
+ }
+ else if ( __kmp_affinity_gran == affinity_gran_group ) {
+ const char *str = NULL;
+ switch ( __kmp_affinity_type ) {
+ case affinity_physical: str = "physical"; break;
+ case affinity_logical: str = "logical"; break;
+ case affinity_compact: str = "compact"; break;
+ case affinity_scatter: str = "scatter"; break;
+ case affinity_explicit: str = "explicit"; break;
+ // No MIC on windows, so no affinity_balanced case
+ default: KMP_DEBUG_ASSERT( 0 );
+ }
+ KMP_WARNING( AffGranGroupType, var, str );
+ __kmp_affinity_gran = affinity_gran_core;
+ }
+ }
+ }
+ else
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ {
+ if ( __kmp_affinity_respect_mask == affinity_respect_mask_default ) {
+# if KMP_GROUP_AFFINITY
+ if ( __kmp_num_proc_groups > 1 ) {
+ __kmp_affinity_respect_mask = FALSE;
+ }
+ else
+# endif /* KMP_GROUP_AFFINITY */
+ {
+ __kmp_affinity_respect_mask = TRUE;
+ }
+ }
+# if OMP_40_ENABLED
+ if ( ( __kmp_nested_proc_bind.bind_types[0] != proc_bind_intel )
+ && ( __kmp_nested_proc_bind.bind_types[0] != proc_bind_default ) ) {
+ if ( __kmp_affinity_type == affinity_default ) {
+ __kmp_affinity_type = affinity_compact;
+ __kmp_affinity_dups = FALSE;
+ }
+ }
+ else
+# endif /* OMP_40_ENABLED */
+ if ( __kmp_affinity_type == affinity_default ) {
+#if OMP_40_ENABLED
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic ) {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
+ } else
+#endif
+ {
+ __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
+ }
+#endif /* OMP_40_ENABLED */
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic ) {
+ __kmp_affinity_type = affinity_scatter;
+ } else
+#endif
+ {
+ __kmp_affinity_type = affinity_none;
+ }
+
+ }
+ if ( ( __kmp_affinity_gran == affinity_gran_default )
+ && ( __kmp_affinity_gran_levels < 0 ) ) {
+#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
+ if( __kmp_mic_type != non_mic ) {
+ __kmp_affinity_gran = affinity_gran_fine;
+ } else
+#endif
+ {
+ __kmp_affinity_gran = affinity_gran_core;
+ }
+ }
+ if ( __kmp_affinity_top_method == affinity_top_method_default ) {
+ __kmp_affinity_top_method = affinity_top_method_all;
+ }
+ }
+ }
+
+ K_DIAG( 1, ( "__kmp_affinity_type == %d\n", __kmp_affinity_type ) );
+ K_DIAG( 1, ( "__kmp_affinity_compact == %d\n", __kmp_affinity_compact ) );
+ K_DIAG( 1, ( "__kmp_affinity_offset == %d\n", __kmp_affinity_offset ) );
+ K_DIAG( 1, ( "__kmp_affinity_verbose == %d\n", __kmp_affinity_verbose ) );
+ K_DIAG( 1, ( "__kmp_affinity_warnings == %d\n", __kmp_affinity_warnings ) );
+ K_DIAG( 1, ( "__kmp_affinity_respect_mask == %d\n", __kmp_affinity_respect_mask ) );
+ K_DIAG( 1, ( "__kmp_affinity_gran == %d\n", __kmp_affinity_gran ) );
+
+ KMP_DEBUG_ASSERT( __kmp_affinity_type != affinity_default);
+# if OMP_40_ENABLED
+ KMP_DEBUG_ASSERT( __kmp_nested_proc_bind.bind_types[0] != proc_bind_default );
+# endif
+ }
+
+#endif /* KMP_AFFINITY_SUPPORTED */
+
+ if ( __kmp_version ) {
+ __kmp_print_version_1();
+ }; // if
+
+ // Post-initialization step: some env. vars need their value's further processing
+ if ( string != NULL) { // kmp_set_defaults() was called
+ __kmp_aux_env_initialize( &block );
+ }
+
+ __kmp_env_blk_free( & block );
+
+ KMP_MB();
+
+} // __kmp_env_initialize
+
+
+void
+__kmp_env_print() {
+
+ kmp_env_blk_t block;
+ int i;
+ kmp_str_buf_t buffer;
+
+ __kmp_stg_init();
+ __kmp_str_buf_init( & buffer );
+
+ __kmp_env_blk_init( & block, NULL );
+ __kmp_env_blk_sort( & block );
+
+ // Print real environment values.
+ __kmp_str_buf_print( & buffer, "\n%s\n\n", KMP_I18N_STR( UserSettings ) );
+ for ( i = 0; i < block.count; ++ i ) {
+ char const * name = block.vars[ i ].name;
+ char const * value = block.vars[ i ].value;
+ if (
+ ( KMP_STRLEN( name ) > 4 && strncmp( name, "KMP_", 4 ) == 0 )
+ || strncmp( name, "OMP_", 4 ) == 0
+ #ifdef KMP_GOMP_COMPAT
+ || strncmp( name, "GOMP_", 5 ) == 0
+ #endif // KMP_GOMP_COMPAT
+ ) {
+ __kmp_str_buf_print( & buffer, " %s=%s\n", name, value );
+ }; // if
+ }; // for
+ __kmp_str_buf_print( & buffer, "\n" );
+
+ // Print internal (effective) settings.
+ __kmp_str_buf_print( & buffer, "%s\n\n", KMP_I18N_STR( EffectiveSettings ) );
+ for ( int i = 0; i < __kmp_stg_count; ++ i ) {
+ if ( __kmp_stg_table[ i ].print != NULL ) {
+ __kmp_stg_table[ i ].print( & buffer, __kmp_stg_table[ i ].name, __kmp_stg_table[ i ].data );
+ }; // if
+ }; // for
+
+ __kmp_printf( "%s", buffer.str );
+
+ __kmp_env_blk_free( & block );
+ __kmp_str_buf_free( & buffer );
+
+ __kmp_printf("\n");
+
+} // __kmp_env_print
+
+
+#if OMP_40_ENABLED
+void
+__kmp_env_print_2() {
+
+ kmp_env_blk_t block;
+ kmp_str_buf_t buffer;
+
+ __kmp_env_format = 1;
+
+ __kmp_stg_init();
+ __kmp_str_buf_init( & buffer );
+
+ __kmp_env_blk_init( & block, NULL );
+ __kmp_env_blk_sort( & block );
+
+ __kmp_str_buf_print( & buffer, "\n%s\n", KMP_I18N_STR( DisplayEnvBegin ) );
+ __kmp_str_buf_print( & buffer, " _OPENMP='%d'\n", __kmp_openmp_version );
+
+ for ( int i = 0; i < __kmp_stg_count; ++ i ) {
+ if ( __kmp_stg_table[ i ].print != NULL &&
+ ( ( __kmp_display_env && strncmp( __kmp_stg_table[ i ].name, "OMP_", 4 ) == 0 ) || __kmp_display_env_verbose ) ) {
+ __kmp_stg_table[ i ].print( & buffer, __kmp_stg_table[ i ].name, __kmp_stg_table[ i ].data );
+ }; // if
+ }; // for
+
+ __kmp_str_buf_print( & buffer, "%s\n", KMP_I18N_STR( DisplayEnvEnd ) );
+ __kmp_str_buf_print( & buffer, "\n" );
+
+ __kmp_printf( "%s", buffer.str );
+
+ __kmp_env_blk_free( & block );
+ __kmp_str_buf_free( & buffer );
+
+ __kmp_printf("\n");
+
+} // __kmp_env_print_2
+#endif // OMP_40_ENABLED
+
+// end of file
+
diff --git a/final/runtime/src/kmp_settings.h b/final/runtime/src/kmp_settings.h
new file mode 100644
index 0000000..7232e61
--- /dev/null
+++ b/final/runtime/src/kmp_settings.h
@@ -0,0 +1,50 @@
+/*
+ * kmp_settings.h -- Initialize environment variables
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_SETTINGS_H
+#define KMP_SETTINGS_H
+
+void __kmp_reset_global_vars( void );
+void __kmp_env_initialize( char const * );
+void __kmp_env_print();
+#if OMP_40_ENABLED
+void __kmp_env_print_2();
+#endif // OMP_40_ENABLED
+
+int __kmp_initial_threads_capacity( int req_nproc );
+void __kmp_init_dflt_team_nth();
+int __kmp_convert_to_milliseconds( char const * );
+int __kmp_default_tp_capacity( int, int, int);
+
+#if KMP_MIC
+#define KMP_STR_BUF_PRINT_NAME __kmp_str_buf_print( buffer, " %s %s", KMP_I18N_STR(Device), name )
+#define KMP_STR_BUF_PRINT_NAME_EX(x) __kmp_str_buf_print( buffer, " %s %s='", KMP_I18N_STR(Device), x )
+#define KMP_STR_BUF_PRINT_BOOL __kmp_str_buf_print( buffer, " %s %s='%s'\n", KMP_I18N_STR(Device), name, value ? "TRUE" : "FALSE" );
+#define KMP_STR_BUF_PRINT_INT __kmp_str_buf_print( buffer, " %s %s='%d'\n", KMP_I18N_STR(Device), name, value )
+#define KMP_STR_BUF_PRINT_UINT64 __kmp_str_buf_print( buffer, " %s %s='%" KMP_UINT64_SPEC "'\n", KMP_I18N_STR(Device), name, value );
+#define KMP_STR_BUF_PRINT_STR __kmp_str_buf_print( buffer, " %s %s='%s'\n", KMP_I18N_STR(Device), name, value )
+#else
+#define KMP_STR_BUF_PRINT_NAME __kmp_str_buf_print( buffer, " %s %s", KMP_I18N_STR(Host), name )
+#define KMP_STR_BUF_PRINT_NAME_EX(x) __kmp_str_buf_print( buffer, " %s %s='", KMP_I18N_STR(Host), x )
+#define KMP_STR_BUF_PRINT_BOOL __kmp_str_buf_print( buffer, " %s %s='%s'\n", KMP_I18N_STR(Host), name, value ? "TRUE" : "FALSE" );
+#define KMP_STR_BUF_PRINT_INT __kmp_str_buf_print( buffer, " %s %s='%d'\n", KMP_I18N_STR(Host), name, value )
+#define KMP_STR_BUF_PRINT_UINT64 __kmp_str_buf_print( buffer, " %s %s='%" KMP_UINT64_SPEC "'\n", KMP_I18N_STR(Host), name, value );
+#define KMP_STR_BUF_PRINT_STR __kmp_str_buf_print( buffer, " %s %s='%s'\n", KMP_I18N_STR(Host), name, value )
+#endif
+
+#endif // KMP_SETTINGS_H
+
+// end of file //
+
diff --git a/final/runtime/src/kmp_stats.cpp b/final/runtime/src/kmp_stats.cpp
new file mode 100644
index 0000000..a65a481
--- /dev/null
+++ b/final/runtime/src/kmp_stats.cpp
@@ -0,0 +1,709 @@
+/** @file kmp_stats.cpp
+ * Statistics gathering and processing.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "kmp.h"
+#include "kmp_str.h"
+#include "kmp_lock.h"
+#include "kmp_stats.h"
+
+#include <algorithm>
+#include <sstream>
+#include <iomanip>
+#include <stdlib.h> // for atexit
+#include <ctime>
+
+#define STRINGIZE2(x) #x
+#define STRINGIZE(x) STRINGIZE2(x)
+
+#define expandName(name,flags,ignore) {STRINGIZE(name),flags},
+statInfo timeStat::timerInfo[] = {
+ KMP_FOREACH_TIMER(expandName,0)
+ {0,0}
+};
+const statInfo counter::counterInfo[] = {
+ KMP_FOREACH_COUNTER(expandName,0)
+ {0,0}
+};
+#undef expandName
+
+#define expandName(ignore1,ignore2,ignore3) {0.0,0.0,0.0},
+kmp_stats_output_module::rgb_color kmp_stats_output_module::timerColorInfo[] = {
+ KMP_FOREACH_TIMER(expandName,0)
+ {0.0,0.0,0.0}
+};
+#undef expandName
+
+const kmp_stats_output_module::rgb_color kmp_stats_output_module::globalColorArray[] = {
+ {1.0, 0.0, 0.0}, // red
+ {1.0, 0.6, 0.0}, // orange
+ {1.0, 1.0, 0.0}, // yellow
+ {0.0, 1.0, 0.0}, // green
+ {0.0, 0.0, 1.0}, // blue
+ {0.6, 0.2, 0.8}, // purple
+ {1.0, 0.0, 1.0}, // magenta
+ {0.0, 0.4, 0.2}, // dark green
+ {1.0, 1.0, 0.6}, // light yellow
+ {0.6, 0.4, 0.6}, // dirty purple
+ {0.0, 1.0, 1.0}, // cyan
+ {1.0, 0.4, 0.8}, // pink
+ {0.5, 0.5, 0.5}, // grey
+ {0.8, 0.7, 0.5}, // brown
+ {0.6, 0.6, 1.0}, // light blue
+ {1.0, 0.7, 0.5}, // peach
+ {0.8, 0.5, 1.0}, // lavender
+ {0.6, 0.0, 0.0}, // dark red
+ {0.7, 0.6, 0.0}, // gold
+ {0.0, 0.0, 0.0} // black
+};
+
+// Ensure that the atexit handler only runs once.
+static uint32_t statsPrinted = 0;
+
+// output interface
+static kmp_stats_output_module __kmp_stats_global_output;
+
+/* ****************************************************** */
+/* ************* statistic member functions ************* */
+
+void statistic::addSample(double sample)
+{
+ double delta = sample - meanVal;
+
+ sampleCount = sampleCount + 1;
+ meanVal = meanVal + delta/sampleCount;
+ m2 = m2 + delta*(sample - meanVal);
+
+ minVal = std::min(minVal, sample);
+ maxVal = std::max(maxVal, sample);
+}
+
+statistic & statistic::operator+= (const statistic & other)
+{
+ if (sampleCount == 0)
+ {
+ *this = other;
+ return *this;
+ }
+
+ uint64_t newSampleCount = sampleCount + other.sampleCount;
+ double dnsc = double(newSampleCount);
+ double dsc = double(sampleCount);
+ double dscBydnsc = dsc/dnsc;
+ double dosc = double(other.sampleCount);
+ double delta = other.meanVal - meanVal;
+
+ // Try to order these calculations to avoid overflows.
+ // If this were Fortran, then the compiler would not be able to re-order over brackets.
+ // In C++ it may be legal to do that (we certainly hope it doesn't, and CC+ Programming Language 2nd edition
+ // suggests it shouldn't, since it says that exploitation of associativity can only be made if the operation
+ // really is associative (which floating addition isn't...)).
+ meanVal = meanVal*dscBydnsc + other.meanVal*(1-dscBydnsc);
+ m2 = m2 + other.m2 + dscBydnsc*dosc*delta*delta;
+ minVal = std::min (minVal, other.minVal);
+ maxVal = std::max (maxVal, other.maxVal);
+ sampleCount = newSampleCount;
+
+
+ return *this;
+}
+
+void statistic::scale(double factor)
+{
+ minVal = minVal*factor;
+ maxVal = maxVal*factor;
+ meanVal= meanVal*factor;
+ m2 = m2*factor*factor;
+ return;
+}
+
+std::string statistic::format(char unit, bool total) const
+{
+ std::string result = formatSI(sampleCount,9,' ');
+
+ if (sampleCount == 0)
+ {
+ result = result + std::string(", ") + formatSI(0.0, 9, unit);
+ result = result + std::string(", ") + formatSI(0.0, 9, unit);
+ result = result + std::string(", ") + formatSI(0.0, 9, unit);
+ if (total)
+ result = result + std::string(", ") + formatSI(0.0, 9, unit);
+ result = result + std::string(", ") + formatSI(0.0, 9, unit);
+ }
+ else
+ {
+ result = result + std::string(", ") + formatSI(minVal, 9, unit);
+ result = result + std::string(", ") + formatSI(meanVal, 9, unit);
+ result = result + std::string(", ") + formatSI(maxVal, 9, unit);
+ if (total)
+ result = result + std::string(", ") + formatSI(meanVal*sampleCount, 9, unit);
+ result = result + std::string(", ") + formatSI(getSD(), 9, unit);
+ }
+ return result;
+}
+
+/* ********************************************************** */
+/* ************* explicitTimer member functions ************* */
+
+void explicitTimer::start(timer_e timerEnumValue) {
+ startTime = tsc_tick_count::now();
+ totalPauseTime = 0;
+ if(timeStat::logEvent(timerEnumValue)) {
+ __kmp_stats_thread_ptr->incrementNestValue();
+ }
+ return;
+}
+
+void explicitTimer::stop(timer_e timerEnumValue) {
+ if (startTime.getValue() == 0)
+ return;
+
+ tsc_tick_count finishTime = tsc_tick_count::now();
+
+ //stat->addSample ((tsc_tick_count::now() - startTime).ticks());
+ stat->addSample(((finishTime - startTime) - totalPauseTime).ticks());
+
+ if(timeStat::logEvent(timerEnumValue)) {
+ __kmp_stats_thread_ptr->push_event(startTime.getValue() - __kmp_stats_start_time.getValue(), finishTime.getValue() - __kmp_stats_start_time.getValue(), __kmp_stats_thread_ptr->getNestValue(), timerEnumValue);
+ __kmp_stats_thread_ptr->decrementNestValue();
+ }
+
+ /* We accept the risk that we drop a sample because it really did start at t==0. */
+ startTime = 0;
+ return;
+}
+
+/* ************************************************************** */
+/* ************* partitionedTimers member functions ************* */
+partitionedTimers::partitionedTimers() {
+ timer_stack.reserve(8);
+}
+
+// add a timer to this collection of partitioned timers.
+void partitionedTimers::add_timer(explicit_timer_e timer_index, explicitTimer* timer_pointer) {
+ KMP_DEBUG_ASSERT((int)timer_index < (int)EXPLICIT_TIMER_LAST+1);
+ timers[timer_index] = timer_pointer;
+}
+
+// initialize the paritioned timers to an initial timer
+void partitionedTimers::init(timerPair init_timer_pair) {
+ KMP_DEBUG_ASSERT(this->timer_stack.size() == 0);
+ timer_stack.push_back(init_timer_pair);
+ timers[init_timer_pair.get_index()]->start(init_timer_pair.get_timer());
+}
+
+// stop/save the current timer, and start the new timer (timer_pair)
+// There is a special condition where if the current timer is equal to
+// the one you are trying to push, then it only manipulates the stack,
+// and it won't stop/start the currently running timer.
+void partitionedTimers::push(timerPair timer_pair) {
+ // get the current timer
+ // stop current timer
+ // push new timer
+ // start the new timer
+ KMP_DEBUG_ASSERT(this->timer_stack.size() > 0);
+ timerPair current_timer = timer_stack.back();
+ timer_stack.push_back(timer_pair);
+ if(current_timer != timer_pair) {
+ timers[current_timer.get_index()]->pause();
+ timers[timer_pair.get_index()]->start(timer_pair.get_timer());
+ }
+}
+
+// stop/discard the current timer, and start the previously saved timer
+void partitionedTimers::pop() {
+ // get the current timer
+ // stop current timer
+ // pop current timer
+ // get the new current timer and start it back up
+ KMP_DEBUG_ASSERT(this->timer_stack.size() > 1);
+ timerPair current_timer = timer_stack.back();
+ timer_stack.pop_back();
+ timerPair new_timer = timer_stack.back();
+ if(current_timer != new_timer) {
+ timers[current_timer.get_index()]->stop(current_timer.get_timer());
+ timers[new_timer.get_index()]->resume();
+ }
+}
+
+// Wind up all the currently running timers.
+// This pops off all the timers from the stack and clears the stack
+// After this is called, init() must be run again to initialize the
+// stack of timers
+void partitionedTimers::windup() {
+ while(timer_stack.size() > 1) {
+ this->pop();
+ }
+ if(timer_stack.size() > 0) {
+ timerPair last_timer = timer_stack.back();
+ timer_stack.pop_back();
+ timers[last_timer.get_index()]->stop(last_timer.get_timer());
+ }
+}
+
+/* ******************************************************************* */
+/* ************* kmp_stats_event_vector member functions ************* */
+
+void kmp_stats_event_vector::deallocate() {
+ __kmp_free(events);
+ internal_size = 0;
+ allocated_size = 0;
+ events = NULL;
+}
+
+// This function is for qsort() which requires the compare function to return
+// either a negative number if event1 < event2, a positive number if event1 > event2
+// or zero if event1 == event2.
+// This sorts by start time (lowest to highest).
+int compare_two_events(const void* event1, const void* event2) {
+ kmp_stats_event* ev1 = (kmp_stats_event*)event1;
+ kmp_stats_event* ev2 = (kmp_stats_event*)event2;
+
+ if(ev1->getStart() < ev2->getStart()) return -1;
+ else if(ev1->getStart() > ev2->getStart()) return 1;
+ else return 0;
+}
+
+void kmp_stats_event_vector::sort() {
+ qsort(events, internal_size, sizeof(kmp_stats_event), compare_two_events);
+}
+
+/* *********************************************************** */
+/* ************* kmp_stats_list member functions ************* */
+
+// returns a pointer to newly created stats node
+kmp_stats_list* kmp_stats_list::push_back(int gtid) {
+ kmp_stats_list* newnode = (kmp_stats_list*)__kmp_allocate(sizeof(kmp_stats_list));
+ // placement new, only requires space and pointer and initializes (so __kmp_allocate instead of C++ new[] is used)
+ new (newnode) kmp_stats_list();
+ newnode->setGtid(gtid);
+ newnode->prev = this->prev;
+ newnode->next = this;
+ newnode->prev->next = newnode;
+ newnode->next->prev = newnode;
+ return newnode;
+}
+void kmp_stats_list::deallocate() {
+ kmp_stats_list* ptr = this->next;
+ kmp_stats_list* delptr = this->next;
+ while(ptr != this) {
+ delptr = ptr;
+ ptr=ptr->next;
+ // placement new means we have to explicitly call destructor.
+ delptr->_event_vector.deallocate();
+ delptr->~kmp_stats_list();
+ __kmp_free(delptr);
+ }
+}
+kmp_stats_list::iterator kmp_stats_list::begin() {
+ kmp_stats_list::iterator it;
+ it.ptr = this->next;
+ return it;
+}
+kmp_stats_list::iterator kmp_stats_list::end() {
+ kmp_stats_list::iterator it;
+ it.ptr = this;
+ return it;
+}
+int kmp_stats_list::size() {
+ int retval;
+ kmp_stats_list::iterator it;
+ for(retval=0, it=begin(); it!=end(); it++, retval++) {}
+ return retval;
+}
+
+/* ********************************************************************* */
+/* ************* kmp_stats_list::iterator member functions ************* */
+
+kmp_stats_list::iterator::iterator() : ptr(NULL) {}
+kmp_stats_list::iterator::~iterator() {}
+kmp_stats_list::iterator kmp_stats_list::iterator::operator++() {
+ this->ptr = this->ptr->next;
+ return *this;
+}
+kmp_stats_list::iterator kmp_stats_list::iterator::operator++(int dummy) {
+ this->ptr = this->ptr->next;
+ return *this;
+}
+kmp_stats_list::iterator kmp_stats_list::iterator::operator--() {
+ this->ptr = this->ptr->prev;
+ return *this;
+}
+kmp_stats_list::iterator kmp_stats_list::iterator::operator--(int dummy) {
+ this->ptr = this->ptr->prev;
+ return *this;
+}
+bool kmp_stats_list::iterator::operator!=(const kmp_stats_list::iterator & rhs) {
+ return this->ptr!=rhs.ptr;
+}
+bool kmp_stats_list::iterator::operator==(const kmp_stats_list::iterator & rhs) {
+ return this->ptr==rhs.ptr;
+}
+kmp_stats_list* kmp_stats_list::iterator::operator*() const {
+ return this->ptr;
+}
+
+/* *************************************************************** */
+/* ************* kmp_stats_output_module functions ************** */
+
+const char* kmp_stats_output_module::eventsFileName = NULL;
+const char* kmp_stats_output_module::plotFileName = NULL;
+int kmp_stats_output_module::printPerThreadFlag = 0;
+int kmp_stats_output_module::printPerThreadEventsFlag = 0;
+
+// init() is called very near the beginning of execution time in the constructor of __kmp_stats_global_output
+void kmp_stats_output_module::init()
+{
+ char * statsFileName = getenv("KMP_STATS_FILE");
+ eventsFileName = getenv("KMP_STATS_EVENTS_FILE");
+ plotFileName = getenv("KMP_STATS_PLOT_FILE");
+ char * threadStats = getenv("KMP_STATS_THREADS");
+ char * threadEvents = getenv("KMP_STATS_EVENTS");
+
+ // set the stats output filenames based on environment variables and defaults
+ if(statsFileName) {
+ // append the process id to the output filename
+ // events.csv --> events-pid.csv
+ size_t index;
+ std::string baseFileName, pid, suffix;
+ std::stringstream ss;
+ outputFileName = std::string(statsFileName);
+ index = outputFileName.find_last_of('.');
+ if(index == std::string::npos) {
+ baseFileName = outputFileName;
+ } else {
+ baseFileName = outputFileName.substr(0, index);
+ suffix = outputFileName.substr(index);
+ }
+ ss << getpid();
+ pid = ss.str();
+ outputFileName = baseFileName + "-" + pid + suffix;
+ }
+ eventsFileName = eventsFileName ? eventsFileName : "events.dat";
+ plotFileName = plotFileName ? plotFileName : "events.plt";
+
+ // set the flags based on environment variables matching: true, on, 1, .true. , .t. , yes
+ printPerThreadFlag = __kmp_str_match_true(threadStats);
+ printPerThreadEventsFlag = __kmp_str_match_true(threadEvents);
+
+ if(printPerThreadEventsFlag) {
+ // assigns a color to each timer for printing
+ setupEventColors();
+ } else {
+ // will clear flag so that no event will be logged
+ timeStat::clearEventFlags();
+ }
+
+ return;
+}
+
+void kmp_stats_output_module::setupEventColors() {
+ int i;
+ int globalColorIndex = 0;
+ int numGlobalColors = sizeof(globalColorArray) / sizeof(rgb_color);
+ for(i=0;i<TIMER_LAST;i++) {
+ if(timeStat::logEvent((timer_e)i)) {
+ timerColorInfo[i] = globalColorArray[globalColorIndex];
+ globalColorIndex = (globalColorIndex+1)%numGlobalColors;
+ }
+ }
+ return;
+}
+
+void kmp_stats_output_module::printTimerStats(FILE *statsOut, statistic const * theStats, statistic const * totalStats)
+{
+ fprintf (statsOut, "Timer, SampleCount, Min, Mean, Max, Total, SD\n");
+ for (timer_e s = timer_e(0); s<TIMER_LAST; s = timer_e(s+1)) {
+ statistic const * stat = &theStats[s];
+ char tag = timeStat::noUnits(s) ? ' ' : 'T';
+
+ fprintf (statsOut, "%-28s, %s\n", timeStat::name(s), stat->format(tag, true).c_str());
+ }
+ // Also print the Total_ versions of times.
+ for (timer_e s = timer_e(0); s<TIMER_LAST; s = timer_e(s+1)) {
+ char tag = timeStat::noUnits(s) ? ' ' : 'T';
+ if (totalStats && !timeStat::noTotal(s))
+ fprintf(statsOut, "Total_%-22s, %s\n", timeStat::name(s), totalStats[s].format(tag, true).c_str());
+ }
+}
+
+void kmp_stats_output_module::printCounterStats(FILE *statsOut, statistic const * theStats)
+{
+ fprintf (statsOut, "Counter, ThreadCount, Min, Mean, Max, Total, SD\n");
+ for (int s = 0; s<COUNTER_LAST; s++) {
+ statistic const * stat = &theStats[s];
+ fprintf (statsOut, "%-25s, %s\n", counter::name(counter_e(s)), stat->format(' ', true).c_str());
+ }
+}
+
+void kmp_stats_output_module::printCounters(FILE * statsOut, counter const * theCounters)
+{
+ // We print all the counters even if they are zero.
+ // That makes it easier to slice them into a spreadsheet if you need to.
+ fprintf (statsOut, "\nCounter, Count\n");
+ for (int c = 0; c<COUNTER_LAST; c++) {
+ counter const * stat = &theCounters[c];
+ fprintf (statsOut, "%-25s, %s\n", counter::name(counter_e(c)), formatSI(stat->getValue(), 9, ' ').c_str());
+ }
+}
+
+void kmp_stats_output_module::printEvents(FILE* eventsOut, kmp_stats_event_vector* theEvents, int gtid) {
+ // sort by start time before printing
+ theEvents->sort();
+ for (int i = 0; i < theEvents->size(); i++) {
+ kmp_stats_event ev = theEvents->at(i);
+ rgb_color color = getEventColor(ev.getTimerName());
+ fprintf(eventsOut, "%d %lu %lu %1.1f rgb(%1.1f,%1.1f,%1.1f) %s\n",
+ gtid,
+ ev.getStart(),
+ ev.getStop(),
+ 1.2 - (ev.getNestLevel() * 0.2),
+ color.r, color.g, color.b,
+ timeStat::name(ev.getTimerName())
+ );
+ }
+ return;
+}
+
+void kmp_stats_output_module::windupExplicitTimers()
+{
+ // Wind up any explicit timers. We assume that it's fair at this point to just walk all the explcit timers in all threads
+ // and say "it's over".
+ // If the timer wasn't running, this won't record anything anyway.
+ kmp_stats_list::iterator it;
+ for(it = __kmp_stats_list.begin(); it != __kmp_stats_list.end(); it++) {
+ kmp_stats_list* ptr = *it;
+ ptr->getPartitionedTimers()->windup();
+ for (int timer=0; timer<EXPLICIT_TIMER_LAST; timer++) {
+ ptr->getExplicitTimer(explicit_timer_e(timer))->stop((timer_e)timer);
+ }
+ }
+}
+
+void kmp_stats_output_module::printPloticusFile() {
+ int i;
+ int size = __kmp_stats_list.size();
+ FILE* plotOut = fopen(plotFileName, "w+");
+
+ fprintf(plotOut, "#proc page\n"
+ " pagesize: 15 10\n"
+ " scale: 1.0\n\n");
+
+ fprintf(plotOut, "#proc getdata\n"
+ " file: %s\n\n",
+ eventsFileName);
+
+ fprintf(plotOut, "#proc areadef\n"
+ " title: OpenMP Sampling Timeline\n"
+ " titledetails: align=center size=16\n"
+ " rectangle: 1 1 13 9\n"
+ " xautorange: datafield=2,3\n"
+ " yautorange: -1 %d\n\n",
+ size);
+
+ fprintf(plotOut, "#proc xaxis\n"
+ " stubs: inc\n"
+ " stubdetails: size=12\n"
+ " label: Time (ticks)\n"
+ " labeldetails: size=14\n\n");
+
+ fprintf(plotOut, "#proc yaxis\n"
+ " stubs: inc 1\n"
+ " stubrange: 0 %d\n"
+ " stubdetails: size=12\n"
+ " label: Thread #\n"
+ " labeldetails: size=14\n\n",
+ size-1);
+
+ fprintf(plotOut, "#proc bars\n"
+ " exactcolorfield: 5\n"
+ " axis: x\n"
+ " locfield: 1\n"
+ " segmentfields: 2 3\n"
+ " barwidthfield: 4\n\n");
+
+ // create legend entries corresponding to the timer color
+ for(i=0;i<TIMER_LAST;i++) {
+ if(timeStat::logEvent((timer_e)i)) {
+ rgb_color c = getEventColor((timer_e)i);
+ fprintf(plotOut, "#proc legendentry\n"
+ " sampletype: color\n"
+ " label: %s\n"
+ " details: rgb(%1.1f,%1.1f,%1.1f)\n\n",
+ timeStat::name((timer_e)i),
+ c.r, c.g, c.b);
+
+ }
+ }
+
+ fprintf(plotOut, "#proc legend\n"
+ " format: down\n"
+ " location: max max\n\n");
+ fclose(plotOut);
+ return;
+}
+
+/*
+ * Print some useful information about
+ * * the date and time this experiment ran.
+ * * the machine on which it ran.
+ * We output all of this as stylised comments, though we may decide to parse some of it.
+ */
+void kmp_stats_output_module::printHeaderInfo(FILE * statsOut)
+{
+ std::time_t now = std::time(0);
+ char buffer[40];
+ char hostName[80];
+
+ std::strftime(&buffer[0], sizeof(buffer), "%c", std::localtime(&now));
+ fprintf (statsOut, "# Time of run: %s\n", &buffer[0]);
+ if (gethostname(&hostName[0], sizeof(hostName)) == 0)
+ fprintf (statsOut,"# Hostname: %s\n", &hostName[0]);
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ fprintf (statsOut, "# CPU: %s\n", &__kmp_cpuinfo.name[0]);
+ fprintf (statsOut, "# Family: %d, Model: %d, Stepping: %d\n", __kmp_cpuinfo.family, __kmp_cpuinfo.model, __kmp_cpuinfo.stepping);
+ if (__kmp_cpuinfo.frequency == 0)
+ fprintf (statsOut, "# Nominal frequency: Unknown\n");
+ else
+ fprintf (statsOut, "# Nominal frequency: %sz\n", formatSI(double(__kmp_cpuinfo.frequency),9,'H').c_str());
+#endif
+}
+
+void kmp_stats_output_module::outputStats(const char* heading)
+{
+ // Stop all the explicit timers in all threads
+ // Do this before declaring the local statistics because thay have constructors so will take time to create.
+ windupExplicitTimers();
+
+ statistic allStats[TIMER_LAST];
+ statistic totalStats[TIMER_LAST]; /* Synthesized, cross threads versions of normal timer stats */
+ statistic allCounters[COUNTER_LAST];
+
+ FILE * statsOut = !outputFileName.empty() ? fopen (outputFileName.c_str(), "a+") : stderr;
+ if (!statsOut)
+ statsOut = stderr;
+
+ FILE * eventsOut;
+ if (eventPrintingEnabled()) {
+ eventsOut = fopen(eventsFileName, "w+");
+ }
+
+ printHeaderInfo (statsOut);
+ fprintf(statsOut, "%s\n",heading);
+ // Accumulate across threads.
+ kmp_stats_list::iterator it;
+ for (it = __kmp_stats_list.begin(); it != __kmp_stats_list.end(); it++) {
+ int t = (*it)->getGtid();
+ // Output per thread stats if requested.
+ if (printPerThreadFlag) {
+ fprintf (statsOut, "Thread %d\n", t);
+ printTimerStats (statsOut, (*it)->getTimers(), 0);
+ printCounters (statsOut, (*it)->getCounters());
+ fprintf (statsOut,"\n");
+ }
+ // Output per thread events if requested.
+ if (eventPrintingEnabled()) {
+ kmp_stats_event_vector events = (*it)->getEventVector();
+ printEvents(eventsOut, &events, t);
+ }
+
+ // Accumulate timers.
+ for (timer_e s = timer_e(0); s<TIMER_LAST; s = timer_e(s+1)) {
+ // See if we should ignore this timer when aggregating
+ if ((timeStat::masterOnly(s) && (t != 0)) || // Timer is only valid on the master and this thread is a worker
+ (timeStat::workerOnly(s) && (t == 0)) // Timer is only valid on a worker and this thread is the master
+ )
+ {
+ continue;
+ }
+
+ statistic * threadStat = (*it)->getTimer(s);
+ allStats[s] += *threadStat;
+
+ // Add Total stats for timers that are valid in more than one thread
+ if (!timeStat::noTotal(s))
+ totalStats[s].addSample(threadStat->getTotal());
+ }
+
+ // Accumulate counters.
+ for (counter_e c = counter_e(0); c<COUNTER_LAST; c = counter_e(c+1)) {
+ if (counter::masterOnly(c) && t != 0)
+ continue;
+ allCounters[c].addSample ((*it)->getCounter(c)->getValue());
+ }
+ }
+
+ if (eventPrintingEnabled()) {
+ printPloticusFile();
+ fclose(eventsOut);
+ }
+
+ fprintf (statsOut, "Aggregate for all threads\n");
+ printTimerStats (statsOut, &allStats[0], &totalStats[0]);
+ fprintf (statsOut, "\n");
+ printCounterStats (statsOut, &allCounters[0]);
+
+ if (statsOut != stderr)
+ fclose(statsOut);
+}
+
+/* ************************************************** */
+/* ************* exported C functions ************** */
+
+// no name mangling for these functions, we want the c files to be able to get at these functions
+extern "C" {
+
+void __kmp_reset_stats()
+{
+ kmp_stats_list::iterator it;
+ for(it = __kmp_stats_list.begin(); it != __kmp_stats_list.end(); it++) {
+ timeStat * timers = (*it)->getTimers();
+ counter * counters = (*it)->getCounters();
+ explicitTimer * eTimers = (*it)->getExplicitTimers();
+
+ for (int t = 0; t<TIMER_LAST; t++)
+ timers[t].reset();
+
+ for (int c = 0; c<COUNTER_LAST; c++)
+ counters[c].reset();
+
+ for (int t=0; t<EXPLICIT_TIMER_LAST; t++)
+ eTimers[t].reset();
+
+ // reset the event vector so all previous events are "erased"
+ (*it)->resetEventVector();
+ }
+}
+
+// This function will reset all stats and stop all threads' explicit timers if they haven't been stopped already.
+void __kmp_output_stats(const char * heading)
+{
+ __kmp_stats_global_output.outputStats(heading);
+ __kmp_reset_stats();
+}
+
+void __kmp_accumulate_stats_at_exit(void)
+{
+ // Only do this once.
+ if (KMP_XCHG_FIXED32(&statsPrinted, 1) != 0)
+ return;
+
+ __kmp_output_stats("Statistics on exit");
+}
+
+void __kmp_stats_init(void)
+{
+}
+
+} // extern "C"
+
diff --git a/final/runtime/src/kmp_stats.h b/final/runtime/src/kmp_stats.h
new file mode 100644
index 0000000..b767fdf
--- /dev/null
+++ b/final/runtime/src/kmp_stats.h
@@ -0,0 +1,904 @@
+#ifndef KMP_STATS_H
+#define KMP_STATS_H
+
+/** @file kmp_stats.h
+ * Functions for collecting statistics.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "kmp_config.h"
+
+#if KMP_STATS_ENABLED
+/*
+ * Statistics accumulator.
+ * Accumulates number of samples and computes min, max, mean, standard deviation on the fly.
+ *
+ * Online variance calculation algorithm from http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm
+ */
+
+#include <limits>
+#include <math.h>
+#include <vector>
+#include <string>
+#include <stdint.h>
+#include <new> // placement new
+#include "kmp_stats_timing.h"
+
+/*
+ * Enable developer statistics here if you want them. They are more detailed than is useful for application characterisation and
+ * are intended for the runtime library developer.
+ */
+// #define KMP_DEVELOPER_STATS 1
+
+/*!
+ * @ingroup STATS_GATHERING
+ * \brief flags to describe the statistic (timer or counter)
+ *
+ */
+enum stats_flags_e {
+ noTotal = 1<<0, //!< do not show a TOTAL_aggregation for this statistic
+ onlyInMaster = 1<<1, //!< statistic is valid only for master
+ noUnits = 1<<2, //!< statistic doesn't need units printed next to it in output
+ notInMaster = 1<<3, //!< statistic is valid only for non-master threads
+ logEvent = 1<<4 //!< statistic can be logged on the event timeline when KMP_STATS_EVENTS is on (valid only for timers)
+};
+
+/*!
+ * @ingroup STATS_GATHERING
+ * \brief the states which a thread can be in
+ *
+ */
+enum stats_state_e {
+ IDLE,
+ SERIAL_REGION,
+ FORK_JOIN_BARRIER,
+ PLAIN_BARRIER,
+ TASKWAIT,
+ TASKYIELD,
+ TASKGROUP,
+ IMPLICIT_TASK,
+ EXPLICIT_TASK
+};
+
+/*!
+ * \brief Add new counters under KMP_FOREACH_COUNTER() macro in kmp_stats.h
+ *
+ * @param macro a user defined macro that takes three arguments - macro(COUNTER_NAME, flags, arg)
+ * @param arg a user defined argument to send to the user defined macro
+ *
+ * \details A counter counts the occurrence of some event.
+ * Each thread accumulates its own count, at the end of execution the counts are aggregated treating each thread
+ * as a separate measurement. (Unless onlyInMaster is set, in which case there's only a single measurement).
+ * The min,mean,max are therefore the values for the threads.
+ * Adding the counter here and then putting a KMP_BLOCK_COUNTER(name) at the point you want to count is all you need to do.
+ * All of the tables and printing is generated from this macro.
+ * Format is "macro(name, flags, arg)"
+ *
+ * @ingroup STATS_GATHERING
+ */
+#define KMP_FOREACH_COUNTER(macro, arg) \
+ macro (OMP_PARALLEL, stats_flags_e::onlyInMaster | stats_flags_e::noTotal, arg) \
+ macro (OMP_NESTED_PARALLEL, 0, arg) \
+ macro (OMP_FOR_static, 0, arg) \
+ macro (OMP_FOR_dynamic, 0, arg) \
+ macro (OMP_DISTRIBUTE, 0, arg) \
+ macro (OMP_BARRIER, 0, arg) \
+ macro (OMP_CRITICAL,0, arg) \
+ macro (OMP_SINGLE, 0, arg) \
+ macro (OMP_MASTER, 0, arg) \
+ macro (OMP_TEAMS, 0, arg) \
+ macro (OMP_set_lock, 0, arg) \
+ macro (OMP_test_lock, 0, arg) \
+ macro (REDUCE_wait, 0, arg) \
+ macro (REDUCE_nowait, 0, arg) \
+ macro (OMP_TASKYIELD, 0, arg) \
+ macro (OMP_TASKLOOP, 0, arg) \
+ macro (TASK_executed, 0, arg) \
+ macro (TASK_cancelled, 0, arg) \
+ macro (TASK_stolen, 0, arg) \
+ macro (LAST,0,arg)
+
+/*!
+ * \brief Add new timers under KMP_FOREACH_TIMER() macro in kmp_stats.h
+ *
+ * @param macro a user defined macro that takes three arguments - macro(TIMER_NAME, flags, arg)
+ * @param arg a user defined argument to send to the user defined macro
+ *
+ * \details A timer collects multiple samples of some count in each thread and then finally aggregates alll of the samples from all of the threads.
+ * For most timers the printing code also provides an aggregation over the thread totals. These are printed as TOTAL_foo.
+ * The count is normally a time (in ticks), hence the name "timer". (But can be any value, so we use this for "number of arguments passed to fork"
+ * as well).
+ * For timers the threads are not significant, it's the individual observations that count, so the statistics are at that level.
+ * Format is "macro(name, flags, arg)"
+ *
+ * @ingroup STATS_GATHERING2
+ */
+#define KMP_FOREACH_TIMER(macro, arg) \
+ macro (OMP_worker_thread_life, 0, arg) \
+ macro (FOR_static_scheduling, 0, arg) \
+ macro (FOR_dynamic_scheduling, 0, arg) \
+ macro (OMP_critical, 0, arg) \
+ macro (OMP_critical_wait, 0, arg) \
+ macro (OMP_single, 0, arg) \
+ macro (OMP_master, 0, arg) \
+ macro (OMP_idle, 0, arg) \
+ macro (OMP_plain_barrier, 0, arg) \
+ macro (OMP_fork_join_barrier, 0, arg) \
+ macro (OMP_parallel, 0, arg) \
+ macro (OMP_task_immediate, 0, arg) \
+ macro (OMP_task_taskwait, 0, arg) \
+ macro (OMP_task_taskyield, 0, arg) \
+ macro (OMP_task_taskgroup, 0, arg) \
+ macro (OMP_task_join_bar, 0, arg) \
+ macro (OMP_task_plain_bar, 0, arg) \
+ macro (OMP_serial, 0, arg) \
+ macro (OMP_taskloop_scheduling, 0, arg) \
+ macro (OMP_set_numthreads, stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
+ macro (OMP_PARALLEL_args, stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
+ macro (FOR_static_iterations, stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
+ macro (FOR_dynamic_iterations,stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
+ KMP_FOREACH_DEVELOPER_TIMER(macro, arg) \
+ macro (LAST,0, arg)
+
+
+// OMP_start_end -- Time from when OpenMP is initialized until the stats are printed at exit
+// OMP_serial -- Thread zero time executing serial code
+// OMP_work -- Elapsed time in code dispatched by a fork (measured in the thread)
+// OMP_barrier -- Time at "real" barriers (includes task time)
+// FOR_static_scheduling -- Time spent doing scheduling for a static "for"
+// FOR_dynamic_scheduling -- Time spent doing scheduling for a dynamic "for"
+// OMP_idle -- Worker threads time spent waiting for inclusion in a parallel region
+// OMP_plain_barrier -- Time spent in a barrier construct
+// OMP_fork_join_barrier -- Time spent in a the fork-join barrier surrounding a parallel region
+// OMP_parallel -- Time spent inside a parallel construct
+// OMP_task_immediate -- Time spent executing non-deferred tasks
+// OMP_task_taskwait -- Time spent executing tasks inside a taskwait construct
+// OMP_task_taskyield -- Time spent executing tasks inside a taskyield construct
+// OMP_task_taskgroup -- Time spent executing tasks inside a taskygroup construct
+// OMP_task_join_bar -- Time spent executing tasks inside a join barrier
+// OMP_task_plain_bar -- Time spent executing tasks inside a barrier construct
+// OMP_single -- Time spent executing a "single" region
+// OMP_master -- Time spent executing a "master" region
+// OMP_set_numthreads -- Values passed to omp_set_num_threads
+// OMP_PARALLEL_args -- Number of arguments passed to a parallel region
+// FOR_static_iterations -- Number of available parallel chunks of work in a static for
+// FOR_dynamic_iterations -- Number of available parallel chunks of work in a dynamic for
+// Both adjust for any chunking, so if there were an iteration count of 20 but a chunk size of 10, we'd record 2.
+
+#if (KMP_DEVELOPER_STATS)
+// Timers which are of interest to runtime library developers, not end users.
+// These have to be explicitly enabled in addition to the other stats.
+
+// KMP_fork_barrier -- time in __kmp_fork_barrier
+// KMP_join_barrier -- time in __kmp_join_barrier
+// KMP_barrier -- time in __kmp_barrier
+// KMP_end_split_barrier -- time in __kmp_end_split_barrier
+// KMP_setup_icv_copy -- time in __kmp_setup_icv_copy
+// KMP_icv_copy -- start/stop timer for any ICV copying
+// KMP_linear_gather -- time in __kmp_linear_barrier_gather
+// KMP_linear_release -- time in __kmp_linear_barrier_release
+// KMP_tree_gather -- time in __kmp_tree_barrier_gather
+// KMP_tree_release -- time in __kmp_tree_barrier_release
+// KMP_hyper_gather -- time in __kmp_hyper_barrier_gather
+// KMP_hyper_release -- time in __kmp_hyper_barrier_release
+# define KMP_FOREACH_DEVELOPER_TIMER(macro, arg) \
+ macro (KMP_fork_call, 0, arg) \
+ macro (KMP_join_call, 0, arg) \
+ macro (KMP_fork_barrier, stats_flags_e::logEvent, arg) \
+ macro (KMP_join_barrier, stats_flags_e::logEvent, arg) \
+ macro (KMP_barrier, 0, arg) \
+ macro (KMP_end_split_barrier, 0, arg) \
+ macro (KMP_hier_gather, 0, arg) \
+ macro (KMP_hier_release, 0, arg) \
+ macro (KMP_hyper_gather, stats_flags_e::logEvent, arg) \
+ macro (KMP_hyper_release, stats_flags_e::logEvent, arg) \
+ macro (KMP_linear_gather, 0, arg) \
+ macro (KMP_linear_release, 0, arg) \
+ macro (KMP_tree_gather, 0, arg) \
+ macro (KMP_tree_release, 0, arg) \
+ macro (USER_master_invoke, stats_flags_e::logEvent, arg) \
+ macro (USER_worker_invoke, stats_flags_e::logEvent, arg) \
+ macro (USER_resume, stats_flags_e::logEvent, arg) \
+ macro (USER_suspend, stats_flags_e::logEvent, arg) \
+ macro (USER_launch_thread_loop, stats_flags_e::logEvent, arg) \
+ macro (KMP_allocate_team, 0, arg) \
+ macro (KMP_setup_icv_copy, 0, arg) \
+ macro (USER_icv_copy, 0, arg)
+#else
+# define KMP_FOREACH_DEVELOPER_TIMER(macro, arg)
+#endif
+
+/*!
+ * \brief Add new explicit timers under KMP_FOREACH_EXPLICIT_TIMER() macro.
+ *
+ * @param macro a user defined macro that takes three arguments - macro(TIMER_NAME, flags, arg)
+ * @param arg a user defined argument to send to the user defined macro
+ *
+ * \warning YOU MUST HAVE THE SAME NAMED TIMER UNDER KMP_FOREACH_TIMER() OR ELSE BAD THINGS WILL HAPPEN!
+ *
+ * \details Explicit timers are ones where we need to allocate a timer itself (as well as the accumulated timing statistics).
+ * We allocate these on a per-thread basis, and explicitly start and stop them.
+ * Block timers just allocate the timer itself on the stack, and use the destructor to notice block exit; they don't
+ * need to be defined here.
+ * The name here should be the same as that of a timer above.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_FOREACH_EXPLICIT_TIMER(macro, arg) \
+ macro(OMP_worker_thread_life, 0, arg) \
+ macro(FOR_static_scheduling, 0, arg) \
+ macro(FOR_dynamic_scheduling, 0, arg) \
+ macro(OMP_critical, 0, arg) \
+ macro(OMP_critical_wait, 0, arg) \
+ macro(OMP_single, 0, arg) \
+ macro(OMP_master, 0, arg) \
+ macro(OMP_idle, 0, arg) \
+ macro(OMP_plain_barrier, 0, arg) \
+ macro(OMP_fork_join_barrier, 0, arg) \
+ macro(OMP_parallel, 0, arg) \
+ macro(OMP_task_immediate, 0, arg) \
+ macro(OMP_task_taskwait, 0, arg) \
+ macro(OMP_task_taskyield, 0, arg) \
+ macro(OMP_task_taskgroup, 0, arg) \
+ macro(OMP_task_join_bar, 0, arg) \
+ macro(OMP_task_plain_bar, 0, arg) \
+ macro(OMP_serial, 0, arg) \
+ macro(OMP_taskloop_scheduling, 0, arg) \
+ KMP_FOREACH_EXPLICIT_DEVELOPER_TIMER(macro,arg) \
+ macro(LAST, 0, arg)
+
+#if (KMP_DEVELOPER_STATS)
+# define KMP_FOREACH_EXPLICIT_DEVELOPER_TIMER(macro, arg) \
+ macro(USER_launch_thread_loop, stats_flags_e::logEvent, arg)
+#else
+# define KMP_FOREACH_EXPLICIT_DEVELOPER_TIMER(macro, arg)
+#endif
+
+#define ENUMERATE(name,ignore,prefix) prefix##name,
+enum timer_e {
+ KMP_FOREACH_TIMER(ENUMERATE, TIMER_)
+};
+
+enum explicit_timer_e {
+ KMP_FOREACH_EXPLICIT_TIMER(ENUMERATE, EXPLICIT_TIMER_)
+};
+
+enum counter_e {
+ KMP_FOREACH_COUNTER(ENUMERATE, COUNTER_)
+};
+#undef ENUMERATE
+
+class timerPair {
+ explicit_timer_e timer_index;
+ timer_e timer;
+ public:
+ timerPair(explicit_timer_e ti, timer_e t) : timer_index(ti), timer(t) {}
+ inline explicit_timer_e get_index() const { return timer_index; }
+ inline timer_e get_timer() const { return timer; }
+ bool operator==(const timerPair & rhs) {
+ return this->get_index() == rhs.get_index();
+ }
+ bool operator!=(const timerPair & rhs) {
+ return !(*this == rhs);
+ }
+};
+
+class statistic
+{
+ double minVal;
+ double maxVal;
+ double meanVal;
+ double m2;
+ uint64_t sampleCount;
+
+ public:
+ statistic() { reset(); }
+ statistic (statistic const &o): minVal(o.minVal), maxVal(o.maxVal), meanVal(o.meanVal), m2(o.m2), sampleCount(o.sampleCount) {}
+
+ double getMin() const { return minVal; }
+ double getMean() const { return meanVal; }
+ double getMax() const { return maxVal; }
+ uint64_t getCount() const { return sampleCount; }
+ double getSD() const { return sqrt(m2/sampleCount); }
+ double getTotal() const { return sampleCount*meanVal; }
+
+ void reset()
+ {
+ minVal = std::numeric_limits<double>::max();
+ maxVal = -std::numeric_limits<double>::max();
+ meanVal= 0.0;
+ m2 = 0.0;
+ sampleCount = 0;
+ }
+ void addSample(double sample);
+ void scale (double factor);
+ void scaleDown(double f) { scale (1./f); }
+ statistic & operator+= (statistic const & other);
+
+ std::string format(char unit, bool total=false) const;
+};
+
+struct statInfo
+{
+ const char * name;
+ uint32_t flags;
+};
+
+class timeStat : public statistic
+{
+ static statInfo timerInfo[];
+
+ public:
+ timeStat() : statistic() {}
+ static const char * name(timer_e e) { return timerInfo[e].name; }
+ static bool noTotal (timer_e e) { return timerInfo[e].flags & stats_flags_e::noTotal; }
+ static bool masterOnly (timer_e e) { return timerInfo[e].flags & stats_flags_e::onlyInMaster; }
+ static bool workerOnly (timer_e e) { return timerInfo[e].flags & stats_flags_e::notInMaster; }
+ static bool noUnits (timer_e e) { return timerInfo[e].flags & stats_flags_e::noUnits; }
+ static bool logEvent (timer_e e) { return timerInfo[e].flags & stats_flags_e::logEvent; }
+ static void clearEventFlags() {
+ for(int i=0;i<TIMER_LAST;i++) {
+ timerInfo[i].flags &= (~(stats_flags_e::logEvent));
+ }
+ }
+};
+
+// Where we need explicitly to start and end the timer, this version can be used
+// Since these timers normally aren't nicely scoped, so don't have a good place to live
+// on the stack of the thread, they're more work to use.
+class explicitTimer
+{
+ timeStat * stat;
+ tsc_tick_count startTime;
+ tsc_tick_count pauseStartTime;
+ tsc_tick_count::tsc_interval_t totalPauseTime;
+
+ public:
+ explicitTimer () : stat(0), startTime(0), pauseStartTime(0), totalPauseTime() { }
+ explicitTimer (timeStat * s) : stat(s), startTime(), pauseStartTime(0), totalPauseTime() { }
+
+ void setStat (timeStat *s) { stat = s; }
+ void start(timer_e timerEnumValue);
+ void pause() { pauseStartTime = tsc_tick_count::now(); }
+ void resume() { totalPauseTime += (tsc_tick_count::now() - pauseStartTime); }
+ void stop(timer_e timerEnumValue);
+ void reset() { startTime = 0; pauseStartTime = 0; totalPauseTime = 0; }
+};
+
+// Where all you need is to time a block, this is enough.
+// (It avoids the need to have an explicit end, leaving the scope suffices.)
+class blockTimer : public explicitTimer
+{
+ timer_e timerEnumValue;
+ public:
+ blockTimer (timeStat * s, timer_e newTimerEnumValue) : timerEnumValue(newTimerEnumValue), explicitTimer(s) { start(timerEnumValue); }
+ ~blockTimer() { stop(timerEnumValue); }
+};
+
+// Where you need to partition a threads clock ticks into separate states
+// e.g., a partitionedTimers class with two timers of EXECUTING_TASK, and
+// DOING_NOTHING would render these conditions:
+// time(EXECUTING_TASK) + time(DOING_NOTHING) = total time thread is alive
+// No clock tick in the EXECUTING_TASK is a member of DOING_NOTHING and vice versa
+class partitionedTimers
+{
+ private:
+ explicitTimer* timers[EXPLICIT_TIMER_LAST+1];
+ std::vector<timerPair> timer_stack;
+ public:
+ partitionedTimers();
+ void add_timer(explicit_timer_e timer_index, explicitTimer* timer_pointer);
+ void init(timerPair timer_index);
+ void push(timerPair timer_index);
+ void pop();
+ void windup();
+};
+
+// Special wrapper around the partioned timers to aid timing code blocks
+// It avoids the need to have an explicit end, leaving the scope suffices.
+class blockPartitionedTimer
+{
+ partitionedTimers* part_timers;
+ timerPair timer_pair;
+ public:
+ blockPartitionedTimer(partitionedTimers* pt, timerPair tp) : part_timers(pt), timer_pair(tp) { part_timers->push(timer_pair); }
+ ~blockPartitionedTimer() { part_timers->pop(); }
+};
+
+// Special wrapper around the thread state to aid in keeping state in code blocks
+// It avoids the need to have an explicit end, leaving the scope suffices.
+class blockThreadState
+{
+ stats_state_e* state_pointer;
+ stats_state_e old_state;
+ public:
+ blockThreadState(stats_state_e* thread_state_pointer, stats_state_e new_state) : state_pointer(thread_state_pointer), old_state(*thread_state_pointer) {
+ *state_pointer = new_state;
+ }
+ ~blockThreadState() { *state_pointer = old_state; }
+};
+
+// If all you want is a count, then you can use this...
+// The individual per-thread counts will be aggregated into a statistic at program exit.
+class counter
+{
+ uint64_t value;
+ static const statInfo counterInfo[];
+
+ public:
+ counter() : value(0) {}
+ void increment() { value++; }
+ uint64_t getValue() const { return value; }
+ void reset() { value = 0; }
+ static const char * name(counter_e e) { return counterInfo[e].name; }
+ static bool masterOnly (counter_e e) { return counterInfo[e].flags & stats_flags_e::onlyInMaster; }
+};
+
+/* ****************************************************************
+ Class to implement an event
+
+ There are four components to an event: start time, stop time
+ nest_level, and timer_name.
+ The start and stop time should be obvious (recorded in clock ticks).
+ The nest_level relates to the bar width in the timeline graph.
+ The timer_name is used to determine which timer event triggered this event.
+
+ the interface to this class is through four read-only operations:
+ 1) getStart() -- returns the start time as 64 bit integer
+ 2) getStop() -- returns the stop time as 64 bit integer
+ 3) getNestLevel() -- returns the nest level of the event
+ 4) getTimerName() -- returns the timer name that triggered event
+
+ *MORE ON NEST_LEVEL*
+ The nest level is used in the bar graph that represents the timeline.
+ Its main purpose is for showing how events are nested inside eachother.
+ For example, say events, A, B, and C are recorded. If the timeline
+ looks like this:
+
+Begin -------------------------------------------------------------> Time
+ | | | | | |
+ A B C C B A
+ start start start end end end
+
+ Then A, B, C will have a nest level of 1, 2, 3 respectively.
+ These values are then used to calculate the barwidth so you can
+ see that inside A, B has occurred, and inside B, C has occurred.
+ Currently, this is shown with A's bar width being larger than B's
+ bar width, and B's bar width being larger than C's bar width.
+
+**************************************************************** */
+class kmp_stats_event {
+ uint64_t start;
+ uint64_t stop;
+ int nest_level;
+ timer_e timer_name;
+ public:
+ kmp_stats_event() : start(0), stop(0), nest_level(0), timer_name(TIMER_LAST) {}
+ kmp_stats_event(uint64_t strt, uint64_t stp, int nst, timer_e nme) : start(strt), stop(stp), nest_level(nst), timer_name(nme) {}
+ inline uint64_t getStart() const { return start; }
+ inline uint64_t getStop() const { return stop; }
+ inline int getNestLevel() const { return nest_level; }
+ inline timer_e getTimerName() const { return timer_name; }
+};
+
+/* ****************************************************************
+ Class to implement a dynamically expandable array of events
+
+ ---------------------------------------------------------
+ | event 1 | event 2 | event 3 | event 4 | ... | event N |
+ ---------------------------------------------------------
+
+ An event is pushed onto the back of this array at every
+ explicitTimer->stop() call. The event records the thread #,
+ start time, stop time, and nest level related to the bar width.
+
+ The event vector starts at size INIT_SIZE and grows (doubles in size)
+ if needed. An implication of this behavior is that log(N)
+ reallocations are needed (where N is number of events). If you want
+ to avoid reallocations, then set INIT_SIZE to a large value.
+
+ the interface to this class is through six operations:
+ 1) reset() -- sets the internal_size back to 0 but does not deallocate any memory
+ 2) size() -- returns the number of valid elements in the vector
+ 3) push_back(start, stop, nest, timer_name) -- pushes an event onto
+ the back of the array
+ 4) deallocate() -- frees all memory associated with the vector
+ 5) sort() -- sorts the vector by start time
+ 6) operator[index] or at(index) -- returns event reference at that index
+
+**************************************************************** */
+class kmp_stats_event_vector {
+ kmp_stats_event* events;
+ int internal_size;
+ int allocated_size;
+ static const int INIT_SIZE = 1024;
+ public:
+ kmp_stats_event_vector() {
+ events = (kmp_stats_event*)__kmp_allocate(sizeof(kmp_stats_event)*INIT_SIZE);
+ internal_size = 0;
+ allocated_size = INIT_SIZE;
+ }
+ ~kmp_stats_event_vector() {}
+ inline void reset() { internal_size = 0; }
+ inline int size() const { return internal_size; }
+ void push_back(uint64_t start_time, uint64_t stop_time, int nest_level, timer_e name) {
+ int i;
+ if(internal_size == allocated_size) {
+ kmp_stats_event* tmp = (kmp_stats_event*)__kmp_allocate(sizeof(kmp_stats_event)*allocated_size*2);
+ for(i=0;i<internal_size;i++) tmp[i] = events[i];
+ __kmp_free(events);
+ events = tmp;
+ allocated_size*=2;
+ }
+ events[internal_size] = kmp_stats_event(start_time, stop_time, nest_level, name);
+ internal_size++;
+ return;
+ }
+ void deallocate();
+ void sort();
+ const kmp_stats_event & operator[](int index) const { return events[index]; }
+ kmp_stats_event & operator[](int index) { return events[index]; }
+ const kmp_stats_event & at(int index) const { return events[index]; }
+ kmp_stats_event & at(int index) { return events[index]; }
+};
+
+/* ****************************************************************
+ Class to implement a doubly-linked, circular, statistics list
+
+ |---| ---> |---| ---> |---| ---> |---| ---> ... next
+ | | | | | | | |
+ |---| <--- |---| <--- |---| <--- |---| <--- ... prev
+ Sentinel first second third
+ Node node node node
+
+ The Sentinel Node is the user handle on the list.
+ The first node corresponds to thread 0's statistics.
+ The second node corresponds to thread 1's statistics and so on...
+
+ Each node has a _timers, _counters, and _explicitTimers array to
+ hold that thread's statistics. The _explicitTimers
+ point to the correct _timer and update its statistics at every stop() call.
+ The explicitTimers' pointers are set up in the constructor.
+ Each node also has an event vector to hold that thread's timing events.
+ The event vector expands as necessary and records the start-stop times
+ for each timer.
+
+ The nestLevel variable is for plotting events and is related
+ to the bar width in the timeline graph.
+
+ Every thread will have a __thread local pointer to its node in
+ the list. The sentinel node is used by the master thread to
+ store "dummy" statistics before __kmp_create_worker() is called.
+
+**************************************************************** */
+class kmp_stats_list {
+ int gtid;
+ timeStat _timers[TIMER_LAST+1];
+ counter _counters[COUNTER_LAST+1];
+ explicitTimer _explicitTimers[EXPLICIT_TIMER_LAST+1];
+ partitionedTimers _partitionedTimers;
+ int _nestLevel; // one per thread
+ kmp_stats_event_vector _event_vector;
+ kmp_stats_list* next;
+ kmp_stats_list* prev;
+ stats_state_e state;
+ int thread_is_idle_flag;
+ public:
+ kmp_stats_list() : _nestLevel(0), _event_vector(), next(this), prev(this),
+ state(IDLE), thread_is_idle_flag(0) {
+#define doInit(name,ignore1,ignore2) \
+ getExplicitTimer(EXPLICIT_TIMER_##name)->setStat(getTimer(TIMER_##name)); \
+ _partitionedTimers.add_timer(EXPLICIT_TIMER_##name, getExplicitTimer(EXPLICIT_TIMER_##name));
+ KMP_FOREACH_EXPLICIT_TIMER(doInit,0);
+#undef doInit
+ }
+ ~kmp_stats_list() { }
+ inline timeStat * getTimer(timer_e idx) { return &_timers[idx]; }
+ inline counter * getCounter(counter_e idx) { return &_counters[idx]; }
+ inline explicitTimer * getExplicitTimer(explicit_timer_e idx) { return &_explicitTimers[idx]; }
+ inline partitionedTimers * getPartitionedTimers() { return &_partitionedTimers; }
+ inline timeStat * getTimers() { return _timers; }
+ inline counter * getCounters() { return _counters; }
+ inline explicitTimer * getExplicitTimers() { return _explicitTimers; }
+ inline kmp_stats_event_vector & getEventVector() { return _event_vector; }
+ inline void resetEventVector() { _event_vector.reset(); }
+ inline void incrementNestValue() { _nestLevel++; }
+ inline int getNestValue() { return _nestLevel; }
+ inline void decrementNestValue() { _nestLevel--; }
+ inline int getGtid() const { return gtid; }
+ inline void setGtid(int newgtid) { gtid = newgtid; }
+ inline void setState(stats_state_e newstate) { state = newstate; }
+ inline stats_state_e getState() const { return state; }
+ inline stats_state_e * getStatePointer() { return &state; }
+ inline bool isIdle() { return thread_is_idle_flag==1; }
+ inline void setIdleFlag() { thread_is_idle_flag = 1; }
+ inline void resetIdleFlag() { thread_is_idle_flag = 0; }
+ kmp_stats_list* push_back(int gtid); // returns newly created list node
+ inline void push_event(uint64_t start_time, uint64_t stop_time, int nest_level, timer_e name) {
+ _event_vector.push_back(start_time, stop_time, nest_level, name);
+ }
+ void deallocate();
+ class iterator;
+ kmp_stats_list::iterator begin();
+ kmp_stats_list::iterator end();
+ int size();
+ class iterator {
+ kmp_stats_list* ptr;
+ friend kmp_stats_list::iterator kmp_stats_list::begin();
+ friend kmp_stats_list::iterator kmp_stats_list::end();
+ public:
+ iterator();
+ ~iterator();
+ iterator operator++();
+ iterator operator++(int dummy);
+ iterator operator--();
+ iterator operator--(int dummy);
+ bool operator!=(const iterator & rhs);
+ bool operator==(const iterator & rhs);
+ kmp_stats_list* operator*() const; // dereference operator
+ };
+};
+
+/* ****************************************************************
+ Class to encapsulate all output functions and the environment variables
+
+ This module holds filenames for various outputs (normal stats, events, plot file),
+ as well as coloring information for the plot file.
+
+ The filenames and flags variables are read from environment variables.
+ These are read once by the constructor of the global variable __kmp_stats_output
+ which calls init().
+
+ During this init() call, event flags for the timeStat::timerInfo[] global array
+ are cleared if KMP_STATS_EVENTS is not true (on, 1, yes).
+
+ The only interface function that is public is outputStats(heading). This function
+ should print out everything it needs to, either to files or stderr,
+ depending on the environment variables described below
+
+ ENVIRONMENT VARIABLES:
+ KMP_STATS_FILE -- if set, all statistics (not events) will be printed to this file,
+ otherwise, print to stderr
+ KMP_STATS_THREADS -- if set to "on", then will print per thread statistics to either
+ KMP_STATS_FILE or stderr
+ KMP_STATS_PLOT_FILE -- if set, print the ploticus plot file to this filename,
+ otherwise, the plot file is sent to "events.plt"
+ KMP_STATS_EVENTS -- if set to "on", then log events, otherwise, don't log events
+ KMP_STATS_EVENTS_FILE -- if set, all events are outputted to this file,
+ otherwise, output is sent to "events.dat"
+
+**************************************************************** */
+class kmp_stats_output_module {
+
+ public:
+ struct rgb_color {
+ float r;
+ float g;
+ float b;
+ };
+
+ private:
+ std::string outputFileName;
+ static const char* eventsFileName;
+ static const char* plotFileName;
+ static int printPerThreadFlag;
+ static int printPerThreadEventsFlag;
+ static const rgb_color globalColorArray[];
+ static rgb_color timerColorInfo[];
+
+ void init();
+ static void setupEventColors();
+ static void printPloticusFile();
+ static void printHeaderInfo(FILE *statsOut);
+ static void printTimerStats(FILE *statsOut, statistic const * theStats, statistic const * totalStats);
+ static void printCounterStats(FILE *statsOut, statistic const * theStats);
+ static void printCounters(FILE * statsOut, counter const * theCounters);
+ static void printEvents(FILE * eventsOut, kmp_stats_event_vector* theEvents, int gtid);
+ static rgb_color getEventColor(timer_e e) { return timerColorInfo[e]; }
+ static void windupExplicitTimers();
+ bool eventPrintingEnabled() const { return printPerThreadEventsFlag; }
+
+ public:
+ kmp_stats_output_module() { init(); }
+ void outputStats(const char* heading);
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void __kmp_stats_init();
+void __kmp_reset_stats();
+void __kmp_output_stats(const char *);
+void __kmp_accumulate_stats_at_exit(void);
+// thread local pointer to stats node within list
+extern __thread kmp_stats_list* __kmp_stats_thread_ptr;
+// head to stats list.
+extern kmp_stats_list __kmp_stats_list;
+// lock for __kmp_stats_list
+extern kmp_tas_lock_t __kmp_stats_lock;
+// reference start time
+extern tsc_tick_count __kmp_stats_start_time;
+// interface to output
+extern kmp_stats_output_module __kmp_stats_output;
+
+#ifdef __cplusplus
+}
+#endif
+
+// Simple, standard interfaces that drop out completely if stats aren't enabled
+
+
+/*!
+ * \brief Uses specified timer (name) to time code block.
+ *
+ * @param name timer name as specified under the KMP_FOREACH_TIMER() macro
+ *
+ * \details Use KMP_TIME_BLOCK(name) macro to time a code block. This will record the time taken in the block
+ * and use the destructor to stop the timer. Convenient!
+ * With this definition you can't have more than one KMP_TIME_BLOCK in the same code block.
+ * I don't think that's a problem.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_TIME_BLOCK(name) \
+ blockTimer __BLOCKTIME__(__kmp_stats_thread_ptr->getTimer(TIMER_##name), TIMER_##name)
+
+/*!
+ * \brief Adds value to specified timer (name).
+ *
+ * @param name timer name as specified under the KMP_FOREACH_TIMER() macro
+ * @param value double precision sample value to add to statistics for the timer
+ *
+ * \details Use KMP_COUNT_VALUE(name, value) macro to add a particular value to a timer statistics.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_COUNT_VALUE(name, value) \
+ __kmp_stats_thread_ptr->getTimer(TIMER_##name)->addSample(value)
+
+/*!
+ * \brief Increments specified counter (name).
+ *
+ * @param name counter name as specified under the KMP_FOREACH_COUNTER() macro
+ *
+ * \details Use KMP_COUNT_BLOCK(name, value) macro to increment a statistics counter for the executing thread.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_COUNT_BLOCK(name) \
+ __kmp_stats_thread_ptr->getCounter(COUNTER_##name)->increment()
+
+/*!
+ * \brief "Starts" an explicit timer which will need a corresponding KMP_STOP_EXPLICIT_TIMER() macro.
+ *
+ * @param name explicit timer name as specified under the KMP_FOREACH_EXPLICIT_TIMER() macro
+ *
+ * \details Use to start a timer. This will need a corresponding KMP_STOP_EXPLICIT_TIMER()
+ * macro to stop the timer unlike the KMP_TIME_BLOCK(name) macro which has an implicit stopping macro at the end
+ * of the code block. All explicit timers are stopped at library exit time before the final statistics are outputted.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_START_EXPLICIT_TIMER(name) \
+ __kmp_stats_thread_ptr->getExplicitTimer(EXPLICIT_TIMER_##name)->start(TIMER_##name)
+
+/*!
+ * \brief "Stops" an explicit timer.
+ *
+ * @param name explicit timer name as specified under the KMP_FOREACH_EXPLICIT_TIMER() macro
+ *
+ * \details Use KMP_STOP_EXPLICIT_TIMER(name) to stop a timer. When this is done, the time between the last KMP_START_EXPLICIT_TIMER(name)
+ * and this KMP_STOP_EXPLICIT_TIMER(name) will be added to the timer's stat value. The timer will then be reset.
+ * After the KMP_STOP_EXPLICIT_TIMER(name) macro is called, another call to KMP_START_EXPLICIT_TIMER(name) will start the timer once again.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_STOP_EXPLICIT_TIMER(name) \
+ __kmp_stats_thread_ptr->getExplicitTimer(EXPLICIT_TIMER_##name)->stop(TIMER_##name)
+
+/*!
+ * \brief Outputs the current thread statistics and reset them.
+ *
+ * @param heading_string heading put above the final stats output
+ *
+ * \details Explicitly stops all timers and outputs all stats.
+ * Environment variable, `OMPTB_STATSFILE=filename`, can be used to output the stats to a filename instead of stderr
+ * Environment variable, `OMPTB_STATSTHREADS=true|undefined`, can be used to output thread specific stats
+ * For now the `OMPTB_STATSTHREADS` environment variable can either be defined with any value, which will print out thread
+ * specific stats, or it can be undefined (not specified in the environment) and thread specific stats won't be printed
+ * It should be noted that all statistics are reset when this macro is called.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_OUTPUT_STATS(heading_string) \
+ __kmp_output_stats(heading_string)
+
+/*!
+ * \brief Initializes the paritioned timers to begin with name.
+ *
+ * @param name timer which you want this thread to begin with
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_INIT_PARTITIONED_TIMERS(name) \
+ __kmp_stats_thread_ptr->getPartitionedTimers()->init(timerPair(EXPLICIT_TIMER_##name, TIMER_##name))
+
+#define KMP_TIME_PARTITIONED_BLOCK(name) \
+ blockPartitionedTimer __PBLOCKTIME__(__kmp_stats_thread_ptr->getPartitionedTimers(), \
+ timerPair(EXPLICIT_TIMER_##name, TIMER_##name))
+
+#define KMP_PUSH_PARTITIONED_TIMER(name) \
+ __kmp_stats_thread_ptr->getPartitionedTimers()->push(timerPair(EXPLICIT_TIMER_##name, TIMER_##name))
+
+#define KMP_POP_PARTITIONED_TIMER() \
+ __kmp_stats_thread_ptr->getPartitionedTimers()->pop()
+
+#define KMP_SET_THREAD_STATE(state_name) \
+ __kmp_stats_thread_ptr->setState(state_name)
+
+#define KMP_GET_THREAD_STATE() \
+ __kmp_stats_thread_ptr->getState()
+
+#define KMP_SET_THREAD_STATE_BLOCK(state_name) \
+ blockThreadState __BTHREADSTATE__(__kmp_stats_thread_ptr->getStatePointer(), state_name)
+
+/*!
+ * \brief resets all stats (counters to 0, timers to 0 elapsed ticks)
+ *
+ * \details Reset all stats for all threads.
+ *
+ * @ingroup STATS_GATHERING
+*/
+#define KMP_RESET_STATS() __kmp_reset_stats()
+
+#if (KMP_DEVELOPER_STATS)
+# define KMP_TIME_DEVELOPER_BLOCK(n) KMP_TIME_BLOCK(n)
+# define KMP_COUNT_DEVELOPER_VALUE(n,v) KMP_COUNT_VALUE(n,v)
+# define KMP_COUNT_DEVELOPER_BLOCK(n) KMP_COUNT_BLOCK(n)
+# define KMP_START_DEVELOPER_EXPLICIT_TIMER(n) KMP_START_EXPLICIT_TIMER(n)
+# define KMP_STOP_DEVELOPER_EXPLICIT_TIMER(n) KMP_STOP_EXPLICIT_TIMER(n)
+#else
+// Null definitions
+# define KMP_TIME_DEVELOPER_BLOCK(n) ((void)0)
+# define KMP_COUNT_DEVELOPER_VALUE(n,v) ((void)0)
+# define KMP_COUNT_DEVELOPER_BLOCK(n) ((void)0)
+# define KMP_START_DEVELOPER_EXPLICIT_TIMER(n) ((void)0)
+# define KMP_STOP_DEVELOPER_EXPLICIT_TIMER(n) ((void)0)
+#endif
+
+#else // KMP_STATS_ENABLED
+
+// Null definitions
+#define KMP_TIME_BLOCK(n) ((void)0)
+#define KMP_COUNT_VALUE(n,v) ((void)0)
+#define KMP_COUNT_BLOCK(n) ((void)0)
+#define KMP_START_EXPLICIT_TIMER(n) ((void)0)
+#define KMP_STOP_EXPLICIT_TIMER(n) ((void)0)
+
+#define KMP_OUTPUT_STATS(heading_string) ((void)0)
+#define KMP_RESET_STATS() ((void)0)
+
+#define KMP_TIME_DEVELOPER_BLOCK(n) ((void)0)
+#define KMP_COUNT_DEVELOPER_VALUE(n,v) ((void)0)
+#define KMP_COUNT_DEVELOPER_BLOCK(n) ((void)0)
+#define KMP_START_DEVELOPER_EXPLICIT_TIMER(n) ((void)0)
+#define KMP_STOP_DEVELOPER_EXPLICIT_TIMER(n) ((void)0)
+#define KMP_INIT_PARTITIONED_TIMERS(name) ((void)0)
+#define KMP_TIME_PARTITIONED_BLOCK(name) ((void)0)
+#define KMP_PUSH_PARTITIONED_TIMER(name) ((void)0)
+#define KMP_POP_PARTITIONED_TIMER() ((void)0)
+#define KMP_SET_THREAD_STATE(state_name) ((void)0)
+#define KMP_GET_THREAD_STATE() ((void)0)
+#define KMP_SET_THREAD_STATE_BLOCK(state_name) ((void)0)
+#endif // KMP_STATS_ENABLED
+
+#endif // KMP_STATS_H
diff --git a/final/runtime/src/kmp_stats_timing.cpp b/final/runtime/src/kmp_stats_timing.cpp
new file mode 100644
index 0000000..62cecc8
--- /dev/null
+++ b/final/runtime/src/kmp_stats_timing.cpp
@@ -0,0 +1,144 @@
+/** @file kmp_stats_timing.cpp
+ * Timing functions
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+
+#include "kmp.h"
+#include "kmp_stats_timing.h"
+
+using namespace std;
+
+#if KMP_HAVE_TICK_TIME
+# if KMP_MIC
+double tsc_tick_count::tick_time()
+{
+ // pretty bad assumption of 1GHz clock for MIC
+ return 1/((double)1000*1.e6);
+}
+# elif KMP_ARCH_X86 || KMP_ARCH_X86_64
+# include <string.h>
+// Extract the value from the CPUID information
+double tsc_tick_count::tick_time()
+{
+ static double result = 0.0;
+
+ if (result == 0.0)
+ {
+ kmp_cpuid_t cpuinfo;
+ char brand[256];
+
+ __kmp_x86_cpuid(0x80000000, 0, &cpuinfo);
+ memset(brand, 0, sizeof(brand));
+ int ids = cpuinfo.eax;
+
+ for (unsigned int i=2; i<(ids^0x80000000)+2; i++)
+ __kmp_x86_cpuid(i | 0x80000000, 0, (kmp_cpuid_t*)(brand+(i-2)*sizeof(kmp_cpuid_t)));
+
+ char * start = &brand[0];
+ for (;*start == ' '; start++)
+ ;
+
+ char * end = brand + KMP_STRLEN(brand) - 3;
+ uint64_t multiplier;
+
+ if (*end == 'M') multiplier = 1000LL*1000LL;
+ else if (*end == 'G') multiplier = 1000LL*1000LL*1000LL;
+ else if (*end == 'T') multiplier = 1000LL*1000LL*1000LL*1000LL;
+ else
+ {
+ cout << "Error determining multiplier '" << *end << "'\n";
+ exit (-1);
+ }
+ *end = 0;
+ while (*end != ' ') end--;
+ end++;
+
+ double freq = strtod(end, &start);
+ if (freq == 0.0)
+ {
+ cout << "Error calculating frequency " << end << "\n";
+ exit (-1);
+ }
+
+ result = ((double)1.0)/(freq * multiplier);
+ }
+ return result;
+}
+# endif
+#endif
+
+static bool useSI = true;
+
+// Return a formatted string after normalising the value into
+// engineering style and using a suitable unit prefix (e.g. ms, us, ns).
+std::string formatSI(double interval, int width, char unit)
+{
+ std::stringstream os;
+
+ if (useSI)
+ {
+ // Preserve accuracy for small numbers, since we only multiply and the positive powers
+ // of ten are precisely representable.
+ static struct { double scale; char prefix; } ranges[] = {
+ {1.e12,'f'},
+ {1.e9, 'p'},
+ {1.e6, 'n'},
+ {1.e3, 'u'},
+ {1.0, 'm'},
+ {1.e-3,' '},
+ {1.e-6,'k'},
+ {1.e-9,'M'},
+ {1.e-12,'G'},
+ {1.e-15,'T'},
+ {1.e-18,'P'},
+ {1.e-21,'E'},
+ {1.e-24,'Z'},
+ {1.e-27,'Y'}
+ };
+
+ if (interval == 0.0)
+ {
+ os << std::setw(width-3) << std::right << "0.00" << std::setw(3) << unit;
+ return os.str();
+ }
+
+ bool negative = false;
+ if (interval < 0.0)
+ {
+ negative = true;
+ interval = -interval;
+ }
+
+ for (int i=0; i<(int)(sizeof(ranges)/sizeof(ranges[0])); i++)
+ {
+ if (interval*ranges[i].scale < 1.e0)
+ {
+ interval = interval * 1000.e0 * ranges[i].scale;
+ os << std::fixed << std::setprecision(2) << std::setw(width-3) << std::right <<
+ (negative ? -interval : interval) << std::setw(2) << ranges[i].prefix << std::setw(1) << unit;
+
+ return os.str();
+ }
+ }
+ }
+ os << std::setprecision(2) << std::fixed << std::right << std::setw(width-3) << interval << std::setw(3) << unit;
+
+ return os.str();
+}
diff --git a/final/runtime/src/kmp_stats_timing.h b/final/runtime/src/kmp_stats_timing.h
new file mode 100644
index 0000000..0605d94
--- /dev/null
+++ b/final/runtime/src/kmp_stats_timing.h
@@ -0,0 +1,112 @@
+#ifndef KMP_STATS_TIMING_H
+#define KMP_STATS_TIMING_H
+
+/** @file kmp_stats_timing.h
+ * Access to real time clock and timers.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+
+#include <stdint.h>
+#include <string>
+#include <limits>
+#include "kmp_os.h"
+#if KMP_HAVE_X86INTRIN_H
+# include <x86intrin.h>
+#endif
+
+class tsc_tick_count {
+ private:
+ int64_t my_count;
+
+ public:
+ class tsc_interval_t {
+ int64_t value;
+ explicit tsc_interval_t(int64_t _value) : value(_value) {}
+ public:
+ tsc_interval_t() : value(0) {}; // Construct 0 time duration
+#if KMP_HAVE_TICK_TIME
+ double seconds() const; // Return the length of a time interval in seconds
+#endif
+ double ticks() const { return double(value); }
+ int64_t getValue() const { return value; }
+ tsc_interval_t& operator=(int64_t nvalue) { value = nvalue; return *this; }
+
+ friend class tsc_tick_count;
+
+ friend tsc_interval_t operator-(const tsc_tick_count& t1,
+ const tsc_tick_count& t0);
+ friend tsc_interval_t operator-(const tsc_tick_count::tsc_interval_t& i1,
+ const tsc_tick_count::tsc_interval_t& i0);
+ friend tsc_interval_t& operator+=(tsc_tick_count::tsc_interval_t& i1,
+ const tsc_tick_count::tsc_interval_t& i0);
+ };
+
+#if KMP_HAVE___BUILTIN_READCYCLECOUNTER
+ tsc_tick_count() : my_count(static_cast<int64_t>(__builtin_readcyclecounter())) {}
+#elif KMP_HAVE___RDTSC
+ tsc_tick_count() : my_count(static_cast<int64_t>(__rdtsc())) {};
+#else
+# error Must have high resolution timer defined
+#endif
+ tsc_tick_count(int64_t value) : my_count(value) {};
+ int64_t getValue() const { return my_count; }
+ tsc_tick_count later (tsc_tick_count const other) const {
+ return my_count > other.my_count ? (*this) : other;
+ }
+ tsc_tick_count earlier(tsc_tick_count const other) const {
+ return my_count < other.my_count ? (*this) : other;
+ }
+#if KMP_HAVE_TICK_TIME
+ static double tick_time(); // returns seconds per cycle (period) of clock
+#endif
+ static tsc_tick_count now() { return tsc_tick_count(); } // returns the rdtsc register value
+ friend tsc_tick_count::tsc_interval_t operator-(const tsc_tick_count& t1, const tsc_tick_count& t0);
+};
+
+inline tsc_tick_count::tsc_interval_t operator-(const tsc_tick_count& t1, const tsc_tick_count& t0)
+{
+ return tsc_tick_count::tsc_interval_t( t1.my_count-t0.my_count );
+}
+
+inline tsc_tick_count::tsc_interval_t operator-(const tsc_tick_count::tsc_interval_t& i1, const tsc_tick_count::tsc_interval_t& i0)
+{
+ return tsc_tick_count::tsc_interval_t( i1.value-i0.value );
+}
+
+inline tsc_tick_count::tsc_interval_t& operator+=(tsc_tick_count::tsc_interval_t& i1, const tsc_tick_count::tsc_interval_t& i0)
+{
+ i1.value += i0.value;
+ return i1;
+}
+
+#if KMP_HAVE_TICK_TIME
+inline double tsc_tick_count::tsc_interval_t::seconds() const
+{
+ return value*tick_time();
+}
+#endif
+
+extern std::string formatSI(double interval, int width, char unit);
+
+inline std::string formatSeconds(double interval, int width)
+{
+ return formatSI(interval, width, 'S');
+}
+
+inline std::string formatTicks(double interval, int width)
+{
+ return formatSI(interval, width, 'T');
+}
+
+#endif // KMP_STATS_TIMING_H
diff --git a/final/runtime/src/kmp_str.c b/final/runtime/src/kmp_str.c
new file mode 100644
index 0000000..b5f7005
--- /dev/null
+++ b/final/runtime/src/kmp_str.c
@@ -0,0 +1,883 @@
+/*
+ * kmp_str.c -- String manipulation routines.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp_str.h"
+
+#include <stdarg.h> // va_*
+#include <stdio.h> // vsnprintf()
+#include <stdlib.h> // malloc(), realloc()
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+
+/*
+ ------------------------------------------------------------------------------------------------
+ String buffer.
+ ------------------------------------------------------------------------------------------------
+
+ Usage:
+
+ // Declare buffer and initialize it.
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init( & buffer );
+
+ // Print to buffer.
+ __kmp_str_buf_print( & buffer, "Error in file \"%s\" line %d\n", "foo.c", 12 );
+ __kmp_str_buf_print( & buffer, " <%s>\n", line );
+
+ // Use buffer contents. buffer.str is a pointer to data, buffer.used is a number of printed
+ // characters (not including terminating zero).
+ write( fd, buffer.str, buffer.used );
+
+ // Free buffer.
+ __kmp_str_buf_free( & buffer );
+
+ // Alternatively, you can detach allocated memory from buffer:
+ __kmp_str_buf_detach( & buffer );
+ return buffer.str; // That memory should be freed eventually.
+
+
+ Notes:
+
+ * Buffer users may use buffer.str and buffer.used. Users should not change any fields of
+ buffer directly.
+
+ * buffer.str is never NULL. If buffer is empty, buffer.str points to empty string ("").
+
+ * For performance reasons, buffer uses stack memory (buffer.bulk) first. If stack memory is
+ exhausted, buffer allocates memory on heap by malloc(), and reallocates it by realloc()
+ as amount of used memory grows.
+
+ * Buffer doubles amount of allocated memory each time it is exhausted.
+
+ ------------------------------------------------------------------------------------------------
+*/
+
+// TODO: __kmp_str_buf_print() can use thread local memory allocator.
+
+#define KMP_STR_BUF_INVARIANT( b ) \
+ { \
+ KMP_DEBUG_ASSERT( (b)->str != NULL ); \
+ KMP_DEBUG_ASSERT( (b)->size >= sizeof( (b)->bulk ) ); \
+ KMP_DEBUG_ASSERT( (b)->size % sizeof( (b)->bulk ) == 0 ); \
+ KMP_DEBUG_ASSERT( (unsigned)(b)->used < (b)->size ); \
+ KMP_DEBUG_ASSERT( (b)->size == sizeof( (b)->bulk ) ? (b)->str == & (b)->bulk[ 0 ] : 1 ); \
+ KMP_DEBUG_ASSERT( (b)->size > sizeof( (b)->bulk ) ? (b)->str != & (b)->bulk[ 0 ] : 1 ); \
+ }
+
+void
+ __kmp_str_buf_clear(
+ kmp_str_buf_t * buffer
+) {
+ KMP_STR_BUF_INVARIANT( buffer );
+ if ( buffer->used > 0 ) {
+ buffer->used = 0;
+ buffer->str[ 0 ] = 0;
+ }; // if
+ KMP_STR_BUF_INVARIANT( buffer );
+} // __kmp_str_buf_clear
+
+
+void
+__kmp_str_buf_reserve(
+ kmp_str_buf_t * buffer,
+ int size
+) {
+
+ KMP_STR_BUF_INVARIANT( buffer );
+ KMP_DEBUG_ASSERT( size >= 0 );
+
+ if ( buffer->size < (unsigned int)size ) {
+
+ // Calculate buffer size.
+ do {
+ buffer->size *= 2;
+ } while ( buffer->size < (unsigned int)size );
+
+ // Enlarge buffer.
+ if ( buffer->str == & buffer->bulk[ 0 ] ) {
+ buffer->str = (char *) KMP_INTERNAL_MALLOC( buffer->size );
+ if ( buffer->str == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ KMP_MEMCPY_S( buffer->str, buffer->size, buffer->bulk, buffer->used + 1 );
+ } else {
+ buffer->str = (char *) KMP_INTERNAL_REALLOC( buffer->str, buffer->size );
+ if ( buffer->str == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ }; // if
+
+ }; // if
+
+ KMP_DEBUG_ASSERT( buffer->size > 0 );
+ KMP_DEBUG_ASSERT( buffer->size >= (unsigned)size );
+ KMP_STR_BUF_INVARIANT( buffer );
+
+} // __kmp_str_buf_reserve
+
+
+void
+__kmp_str_buf_detach(
+ kmp_str_buf_t * buffer
+) {
+
+ KMP_STR_BUF_INVARIANT( buffer );
+
+ // If internal bulk is used, allocate memory and copy it.
+ if ( buffer->size <= sizeof( buffer->bulk ) ) {
+ buffer->str = (char *) KMP_INTERNAL_MALLOC( buffer->size );
+ if ( buffer->str == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+ KMP_MEMCPY_S( buffer->str, buffer->size, buffer->bulk, buffer->used + 1 );
+ }; // if
+
+} // __kmp_str_buf_detach
+
+
+void
+__kmp_str_buf_free(
+ kmp_str_buf_t * buffer
+) {
+ KMP_STR_BUF_INVARIANT( buffer );
+ if ( buffer->size > sizeof( buffer->bulk ) ) {
+ KMP_INTERNAL_FREE( buffer->str );
+ }; // if
+ buffer->str = buffer->bulk;
+ buffer->size = sizeof( buffer->bulk );
+ buffer->used = 0;
+ KMP_STR_BUF_INVARIANT( buffer );
+} // __kmp_str_buf_free
+
+
+void
+__kmp_str_buf_cat(
+ kmp_str_buf_t * buffer,
+ char const * str,
+ int len
+) {
+ KMP_STR_BUF_INVARIANT( buffer );
+ KMP_DEBUG_ASSERT( str != NULL );
+ KMP_DEBUG_ASSERT( len >= 0 );
+ __kmp_str_buf_reserve( buffer, buffer->used + len + 1 );
+ KMP_MEMCPY( buffer->str + buffer->used, str, len );
+ buffer->str[ buffer->used + len ] = 0;
+ buffer->used += len;
+ KMP_STR_BUF_INVARIANT( buffer );
+} // __kmp_str_buf_cat
+
+
+void
+__kmp_str_buf_vprint(
+ kmp_str_buf_t * buffer,
+ char const * format,
+ va_list args
+) {
+
+ KMP_STR_BUF_INVARIANT( buffer );
+
+ for ( ; ; ) {
+
+ int const free = buffer->size - buffer->used;
+ int rc;
+ int size;
+
+ // Try to format string.
+ {
+ /*
+ On Linux* OS Intel(R) 64, vsnprintf() modifies args argument, so vsnprintf() crashes if it
+ is called for the second time with the same args. To prevent the crash, we have to
+ pass a fresh intact copy of args to vsnprintf() on each iteration.
+
+ Unfortunately, standard va_copy() macro is not available on Windows* OS. However, it
+ seems vsnprintf() does not modify args argument on Windows* OS.
+ */
+
+ #if ! KMP_OS_WINDOWS
+ va_list _args;
+ __va_copy( _args, args ); // Make copy of args.
+ #define args _args // Substitute args with its copy, _args.
+ #endif // KMP_OS_WINDOWS
+ rc = KMP_VSNPRINTF( buffer->str + buffer->used, free, format, args );
+ #if ! KMP_OS_WINDOWS
+ #undef args // Remove substitution.
+ va_end( _args );
+ #endif // KMP_OS_WINDOWS
+ }
+
+ // No errors, string has been formatted.
+ if ( rc >= 0 && rc < free ) {
+ buffer->used += rc;
+ break;
+ }; // if
+
+ // Error occurred, buffer is too small.
+ if ( rc >= 0 ) {
+ // C99-conforming implementation of vsnprintf returns required buffer size.
+ size = buffer->used + rc + 1;
+ } else {
+ // Older implementations just return -1. Double buffer size.
+ size = buffer->size * 2;
+ }; // if
+
+ // Enlarge buffer.
+ __kmp_str_buf_reserve( buffer, size );
+
+ // And try again.
+
+ }; // forever
+
+ KMP_DEBUG_ASSERT( buffer->size > 0 );
+ KMP_STR_BUF_INVARIANT( buffer );
+
+} // __kmp_str_buf_vprint
+
+
+void
+__kmp_str_buf_print(
+ kmp_str_buf_t * buffer,
+ char const * format,
+ ...
+) {
+
+ va_list args;
+ va_start( args, format );
+ __kmp_str_buf_vprint( buffer, format, args );
+ va_end( args );
+
+} // __kmp_str_buf_print
+
+
+/*
+ The function prints specified size to buffer. Size is expressed using biggest possible unit, for
+ example 1024 is printed as "1k".
+*/
+
+void
+__kmp_str_buf_print_size(
+ kmp_str_buf_t * buf,
+ size_t size
+) {
+
+ char const * names[] = { "", "k", "M", "G", "T", "P", "E", "Z", "Y" };
+ int const units = sizeof( names ) / sizeof( char const * );
+ int u = 0;
+ if ( size > 0 ) {
+ while ( ( size % 1024 == 0 ) && ( u + 1 < units ) ) {
+ size = size / 1024;
+ ++ u;
+ }; // while
+ }; // if
+
+ __kmp_str_buf_print( buf, "%" KMP_SIZE_T_SPEC "%s", size, names[ u ] );
+
+} // __kmp_str_buf_print_size
+
+
+void
+__kmp_str_fname_init(
+ kmp_str_fname_t * fname,
+ char const * path
+) {
+
+ fname->path = NULL;
+ fname->dir = NULL;
+ fname->base = NULL;
+
+ if ( path != NULL ) {
+ char * slash = NULL; // Pointer to the last character of dir.
+ char * base = NULL; // Pointer to the beginning of basename.
+ fname->path = __kmp_str_format( "%s", path );
+ // Original code used strdup() function to copy a string, but on Windows* OS Intel(R) 64 it
+ // causes assertioon id debug heap, so I had to replace strdup with __kmp_str_format().
+ if ( KMP_OS_WINDOWS ) {
+ __kmp_str_replace( fname->path, '\\', '/' );
+ }; // if
+ fname->dir = __kmp_str_format( "%s", fname->path );
+ slash = strrchr( fname->dir, '/' );
+ if ( KMP_OS_WINDOWS && slash == NULL ) { // On Windows* OS, if slash not found,
+ char first = TOLOWER( fname->dir[ 0 ] ); // look for drive.
+ if ( 'a' <= first && first <= 'z' && fname->dir[ 1 ] == ':' ) {
+ slash = & fname->dir[ 1 ];
+ }; // if
+ }; // if
+ base = ( slash == NULL ? fname->dir : slash + 1 );
+ fname->base = __kmp_str_format( "%s", base ); // Copy basename
+ * base = 0; // and truncate dir.
+ }; // if
+
+} // kmp_str_fname_init
+
+
+void
+__kmp_str_fname_free(
+ kmp_str_fname_t * fname
+) {
+ __kmp_str_free( (char const **)( & fname->path ) );
+ __kmp_str_free( (char const **)( & fname->dir ) );
+ __kmp_str_free( (char const **)( & fname->base ) );
+} // kmp_str_fname_free
+
+
+int
+__kmp_str_fname_match(
+ kmp_str_fname_t const * fname,
+ char const * pattern
+) {
+
+ int dir_match = 1;
+ int base_match = 1;
+
+ if ( pattern != NULL ) {
+ kmp_str_fname_t ptrn;
+ __kmp_str_fname_init( & ptrn, pattern );
+ dir_match =
+ strcmp( ptrn.dir, "*/" ) == 0
+ ||
+ ( fname->dir != NULL && __kmp_str_eqf( fname->dir, ptrn.dir ) );
+ base_match =
+ strcmp( ptrn.base, "*" ) == 0
+ ||
+ ( fname->base != NULL && __kmp_str_eqf( fname->base, ptrn.base ) );
+ __kmp_str_fname_free( & ptrn );
+ }; // if
+
+ return dir_match && base_match;
+
+} // __kmp_str_fname_match
+
+
+kmp_str_loc_t
+__kmp_str_loc_init(
+ char const * psource,
+ int init_fname
+) {
+
+ kmp_str_loc_t loc;
+
+ loc._bulk = NULL;
+ loc.file = NULL;
+ loc.func = NULL;
+ loc.line = 0;
+ loc.col = 0;
+
+ if ( psource != NULL ) {
+
+ char * str = NULL;
+ char * dummy = NULL;
+ char * line = NULL;
+ char * col = NULL;
+
+ // Copy psource to keep it intact.
+ loc._bulk = __kmp_str_format( "%s", psource );
+
+ // Parse psource string: ";file;func;line;col;;"
+ str = loc._bulk;
+ __kmp_str_split( str, ';', & dummy, & str );
+ __kmp_str_split( str, ';', & loc.file, & str );
+ __kmp_str_split( str, ';', & loc.func, & str );
+ __kmp_str_split( str, ';', & line, & str );
+ __kmp_str_split( str, ';', & col, & str );
+
+ // Convert line and col into numberic values.
+ if ( line != NULL ) {
+ loc.line = atoi( line );
+ if ( loc.line < 0 ) {
+ loc.line = 0;
+ }; // if
+ }; // if
+ if ( col != NULL ) {
+ loc.col = atoi( col );
+ if ( loc.col < 0 ) {
+ loc.col = 0;
+ }; // if
+ }; // if
+
+ }; // if
+
+ __kmp_str_fname_init( & loc.fname, init_fname ? loc.file : NULL );
+
+ return loc;
+
+} // kmp_str_loc_init
+
+
+void
+__kmp_str_loc_free(
+ kmp_str_loc_t * loc
+) {
+ __kmp_str_fname_free( & loc->fname );
+ KMP_INTERNAL_FREE( loc->_bulk );
+ loc->_bulk = NULL;
+ loc->file = NULL;
+ loc->func = NULL;
+} // kmp_str_loc_free
+
+
+
+/*
+ This function is intended to compare file names. On Windows* OS file names are case-insensitive,
+ so functions performs case-insensitive comparison. On Linux* OS it performs case-sensitive
+ comparison.
+ Note: The function returns *true* if strings are *equal*.
+*/
+
+int
+__kmp_str_eqf( // True, if strings are equal, false otherwise.
+ char const * lhs, // First string.
+ char const * rhs // Second string.
+) {
+ int result;
+ #if KMP_OS_WINDOWS
+ result = ( _stricmp( lhs, rhs ) == 0 );
+ #else
+ result = ( strcmp( lhs, rhs ) == 0 );
+ #endif
+ return result;
+} // __kmp_str_eqf
+
+
+/*
+ This function is like sprintf, but it *allocates* new buffer, which must be freed eventually by
+ __kmp_str_free(). The function is very convenient for constructing strings, it successfully
+ replaces strdup(), strcat(), it frees programmer from buffer allocations and helps to avoid
+ buffer overflows. Examples:
+
+ str = __kmp_str_format( "%s", orig ); // strdup(), do not care about buffer size.
+ __kmp_str_free( & str );
+ str = __kmp_str_format( "%s%s", orig1, orig2 ); // strcat(), do not care about buffer size.
+ __kmp_str_free( & str );
+ str = __kmp_str_format( "%s/%s.txt", path, file ); // constructing string.
+ __kmp_str_free( & str );
+
+ Performance note:
+ This function allocates memory with malloc() calls, so do not call it from
+ performance-critical code. In performance-critical code consider using kmp_str_buf_t
+ instead, since it uses stack-allocated buffer for short strings.
+
+ Why does this function use malloc()?
+ 1. __kmp_allocate() returns cache-aligned memory allocated with malloc(). There are no
+ reasons in using __kmp_allocate() for strings due to extra overhead while cache-aligned
+ memory is not necessary.
+ 2. __kmp_thread_malloc() cannot be used because it requires pointer to thread structure.
+ We need to perform string operations during library startup (for example, in
+ __kmp_register_library_startup()) when no thread structures are allocated yet.
+ So standard malloc() is the only available option.
+*/
+
+// TODO: Find and replace all regular free() with __kmp_str_free().
+
+char *
+__kmp_str_format( // Allocated string.
+ char const * format, // Format string.
+ ... // Other parameters.
+) {
+
+ va_list args;
+ int size = 512;
+ char * buffer = NULL;
+ int rc;
+
+ // Allocate buffer.
+ buffer = (char *) KMP_INTERNAL_MALLOC( size );
+ if ( buffer == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+
+ for ( ; ; ) {
+
+ // Try to format string.
+ va_start( args, format );
+ rc = KMP_VSNPRINTF( buffer, size, format, args );
+ va_end( args );
+
+ // No errors, string has been formatted.
+ if ( rc >= 0 && rc < size ) {
+ break;
+ }; // if
+
+ // Error occurred, buffer is too small.
+ if ( rc >= 0 ) {
+ // C99-conforming implementation of vsnprintf returns required buffer size.
+ size = rc + 1;
+ } else {
+ // Older implementations just return -1.
+ size = size * 2;
+ }; // if
+
+ // Enlarge buffer and try again.
+ buffer = (char *) KMP_INTERNAL_REALLOC( buffer, size );
+ if ( buffer == NULL ) {
+ KMP_FATAL( MemoryAllocFailed );
+ }; // if
+
+ }; // forever
+
+ return buffer;
+
+} // func __kmp_str_format
+
+
+void
+__kmp_str_free(
+ char const * * str
+) {
+ KMP_DEBUG_ASSERT( str != NULL );
+ KMP_INTERNAL_FREE( (void *) * str );
+ * str = NULL;
+} // func __kmp_str_free
+
+
+/* If len is zero, returns true iff target and data have exact case-insensitive match.
+ If len is negative, returns true iff target is a case-insensitive substring of data.
+ If len is positive, returns true iff target is a case-insensitive substring of data or
+ vice versa, and neither is shorter than len.
+*/
+int
+__kmp_str_match(
+ char const * target,
+ int len,
+ char const * data
+) {
+ int i;
+ if ( target == NULL || data == NULL ) {
+ return FALSE;
+ }; // if
+ for ( i = 0; target[i] && data[i]; ++ i ) {
+ if ( TOLOWER( target[i] ) != TOLOWER( data[i] ) ) {
+ return FALSE;
+ }; // if
+ }; // for i
+ return ( ( len > 0 ) ? i >= len : ( ! target[i] && ( len || ! data[i] ) ) );
+} // __kmp_str_match
+
+
+int
+__kmp_str_match_false( char const * data ) {
+ int result =
+ __kmp_str_match( "false", 1, data ) ||
+ __kmp_str_match( "off", 2, data ) ||
+ __kmp_str_match( "0", 1, data ) ||
+ __kmp_str_match( ".false.", 2, data ) ||
+ __kmp_str_match( ".f.", 2, data ) ||
+ __kmp_str_match( "no", 1, data );
+ return result;
+} // __kmp_str_match_false
+
+
+int
+__kmp_str_match_true( char const * data ) {
+ int result =
+ __kmp_str_match( "true", 1, data ) ||
+ __kmp_str_match( "on", 2, data ) ||
+ __kmp_str_match( "1", 1, data ) ||
+ __kmp_str_match( ".true.", 2, data ) ||
+ __kmp_str_match( ".t.", 2, data ) ||
+ __kmp_str_match( "yes", 1, data );
+ return result;
+} // __kmp_str_match_true
+
+void
+__kmp_str_replace(
+ char * str,
+ char search_for,
+ char replace_with
+) {
+
+ char * found = NULL;
+
+ found = strchr( str, search_for );
+ while ( found ) {
+ * found = replace_with;
+ found = strchr( found + 1, search_for );
+ }; // while
+
+} // __kmp_str_replace
+
+
+void
+__kmp_str_split(
+ char * str, // I: String to split.
+ char delim, // I: Character to split on.
+ char ** head, // O: Pointer to head (may be NULL).
+ char ** tail // O: Pointer to tail (may be NULL).
+) {
+ char * h = str;
+ char * t = NULL;
+ if ( str != NULL ) {
+ char * ptr = strchr( str, delim );
+ if ( ptr != NULL ) {
+ * ptr = 0;
+ t = ptr + 1;
+ }; // if
+ }; // if
+ if ( head != NULL ) {
+ * head = h;
+ }; // if
+ if ( tail != NULL ) {
+ * tail = t;
+ }; // if
+} // __kmp_str_split
+
+/*
+ strtok_r() is not available on Windows* OS. This function reimplements strtok_r().
+*/
+char *
+__kmp_str_token(
+ char * str, // String to split into tokens. Note: String *is* modified!
+ char const * delim, // Delimiters.
+ char ** buf // Internal buffer.
+) {
+ char * token = NULL;
+ #if KMP_OS_WINDOWS
+ // On Windows* OS there is no strtok_r() function. Let us implement it.
+ if ( str != NULL ) {
+ * buf = str; // First call, initialize buf.
+ }; // if
+ * buf += strspn( * buf, delim ); // Skip leading delimiters.
+ if ( ** buf != 0 ) { // Rest of the string is not yet empty.
+ token = * buf; // Use it as result.
+ * buf += strcspn( * buf, delim ); // Skip non-delimiters.
+ if ( ** buf != 0 ) { // Rest of the string is not yet empty.
+ ** buf = 0; // Terminate token here.
+ * buf += 1; // Advance buf to start with the next token next time.
+ }; // if
+ }; // if
+ #else
+ // On Linux* OS and OS X*, strtok_r() is available. Let us use it.
+ token = strtok_r( str, delim, buf );
+ #endif
+ return token;
+}; // __kmp_str_token
+
+
+int
+__kmp_str_to_int(
+ char const * str,
+ char sentinel
+) {
+ int result, factor;
+ char const * t;
+
+ result = 0;
+
+ for (t = str; *t != '\0'; ++t) {
+ if (*t < '0' || *t > '9')
+ break;
+ result = (result * 10) + (*t - '0');
+ }
+
+ switch (*t) {
+ case '\0': /* the current default for no suffix is bytes */
+ factor = 1;
+ break;
+ case 'b': case 'B': /* bytes */
+ ++t;
+ factor = 1;
+ break;
+ case 'k': case 'K': /* kilo-bytes */
+ ++t;
+ factor = 1024;
+ break;
+ case 'm': case 'M': /* mega-bytes */
+ ++t;
+ factor = (1024 * 1024);
+ break;
+ default:
+ if(*t != sentinel)
+ return (-1);
+ t = "";
+ factor = 1;
+ }
+
+ if (result > (INT_MAX / factor))
+ result = INT_MAX;
+ else
+ result *= factor;
+
+ return (*t != 0 ? 0 : result);
+
+} // __kmp_str_to_int
+
+
+/*
+ The routine parses input string. It is expected it is a unsigned integer with optional unit.
+ Units are: "b" for bytes, "kb" or just "k" for kilobytes, "mb" or "m" for megabytes, ..., "yb"
+ or "y" for yottabytes. :-) Unit name is case-insensitive. The routine returns 0 if everything is
+ ok, or error code: -1 in case of overflow, -2 in case of unknown unit. *size is set to parsed
+ value. In case of overflow *size is set to KMP_SIZE_T_MAX, in case of unknown unit *size is set
+ to zero.
+*/
+void
+__kmp_str_to_size( // R: Error code.
+ char const * str, // I: String of characters, unsigned number and unit ("b", "kb", etc).
+ size_t * out, // O: Parsed number.
+ size_t dfactor, // I: The factor if none of the letters specified.
+ char const * * error // O: Null if everything is ok, error message otherwise.
+) {
+
+ size_t value = 0;
+ size_t factor = 0;
+ int overflow = 0;
+ int i = 0;
+ int digit;
+
+
+ KMP_DEBUG_ASSERT( str != NULL );
+
+ // Skip spaces.
+ while ( str[ i ] == ' ' || str[ i ] == '\t') {
+ ++ i;
+ }; // while
+
+ // Parse number.
+ if ( str[ i ] < '0' || str[ i ] > '9' ) {
+ * error = KMP_I18N_STR( NotANumber );
+ return;
+ }; // if
+ do {
+ digit = str[ i ] - '0';
+ overflow = overflow || ( value > ( KMP_SIZE_T_MAX - digit ) / 10 );
+ value = ( value * 10 ) + digit;
+ ++ i;
+ } while ( str[ i ] >= '0' && str[ i ] <= '9' );
+
+ // Skip spaces.
+ while ( str[ i ] == ' ' || str[ i ] == '\t' ) {
+ ++ i;
+ }; // while
+
+ // Parse unit.
+ #define _case( ch, exp ) \
+ case ch : \
+ case ch - ( 'a' - 'A' ) : { \
+ size_t shift = (exp) * 10; \
+ ++ i; \
+ if ( shift < sizeof( size_t ) * 8 ) { \
+ factor = (size_t)( 1 ) << shift; \
+ } else { \
+ overflow = 1; \
+ }; \
+ } break;
+ switch ( str[ i ] ) {
+ _case( 'k', 1 ); // Kilo
+ _case( 'm', 2 ); // Mega
+ _case( 'g', 3 ); // Giga
+ _case( 't', 4 ); // Tera
+ _case( 'p', 5 ); // Peta
+ _case( 'e', 6 ); // Exa
+ _case( 'z', 7 ); // Zetta
+ _case( 'y', 8 ); // Yotta
+ // Oops. No more units...
+ }; // switch
+ #undef _case
+ if ( str[ i ] == 'b' || str[ i ] == 'B' ) { // Skip optional "b".
+ if ( factor == 0 ) {
+ factor = 1;
+ }
+ ++ i;
+ }; // if
+ if ( ! ( str[ i ] == ' ' || str[ i ] == '\t' || str[ i ] == 0 ) ) { // Bad unit
+ * error = KMP_I18N_STR( BadUnit );
+ return;
+ }; // if
+
+ if ( factor == 0 ) {
+ factor = dfactor;
+ }
+
+ // Apply factor.
+ overflow = overflow || ( value > ( KMP_SIZE_T_MAX / factor ) );
+ value *= factor;
+
+ // Skip spaces.
+ while ( str[ i ] == ' ' || str[ i ] == '\t' ) {
+ ++ i;
+ }; // while
+
+ if ( str[ i ] != 0 ) {
+ * error = KMP_I18N_STR( IllegalCharacters );
+ return;
+ }; // if
+
+ if ( overflow ) {
+ * error = KMP_I18N_STR( ValueTooLarge );
+ * out = KMP_SIZE_T_MAX;
+ return;
+ }; // if
+
+ * error = NULL;
+ * out = value;
+
+} // __kmp_str_to_size
+
+
+void
+__kmp_str_to_uint( // R: Error code.
+ char const * str, // I: String of characters, unsigned number.
+ kmp_uint64 * out, // O: Parsed number.
+ char const * * error // O: Null if everything is ok, error message otherwise.
+) {
+
+ size_t value = 0;
+ int overflow = 0;
+ int i = 0;
+ int digit;
+
+
+ KMP_DEBUG_ASSERT( str != NULL );
+
+ // Skip spaces.
+ while ( str[ i ] == ' ' || str[ i ] == '\t' ) {
+ ++ i;
+ }; // while
+
+ // Parse number.
+ if ( str[ i ] < '0' || str[ i ] > '9' ) {
+ * error = KMP_I18N_STR( NotANumber );
+ return;
+ }; // if
+ do {
+ digit = str[ i ] - '0';
+ overflow = overflow || ( value > ( KMP_SIZE_T_MAX - digit ) / 10 );
+ value = ( value * 10 ) + digit;
+ ++ i;
+ } while ( str[ i ] >= '0' && str[ i ] <= '9' );
+
+ // Skip spaces.
+ while ( str[ i ] == ' ' || str[ i ] == '\t' ) {
+ ++ i;
+ }; // while
+
+ if ( str[ i ] != 0 ) {
+ * error = KMP_I18N_STR( IllegalCharacters );
+ return;
+ }; // if
+
+ if ( overflow ) {
+ * error = KMP_I18N_STR( ValueTooLarge );
+ * out = (kmp_uint64) -1;
+ return;
+ }; // if
+
+ * error = NULL;
+ * out = value;
+
+} // __kmp_str_to_unit
+
+
+
+// end of file //
diff --git a/final/runtime/src/kmp_str.h b/final/runtime/src/kmp_str.h
new file mode 100644
index 0000000..ba71bba
--- /dev/null
+++ b/final/runtime/src/kmp_str.h
@@ -0,0 +1,119 @@
+/*
+ * kmp_str.h -- String manipulation routines.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_STR_H
+#define KMP_STR_H
+
+#include <string.h>
+#include <stdarg.h>
+
+#include "kmp_os.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+#if KMP_OS_WINDOWS
+# define strdup _strdup
+#endif
+
+/* some macros to replace ctype.h functions */
+#define TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) + 'a' - 'A') : (c))
+
+struct kmp_str_buf {
+ char * str; // Pointer to buffer content, read only.
+ unsigned int size; // Do not change this field!
+ int used; // Number of characters printed to buffer, read only.
+ char bulk[ 512 ]; // Do not use this field!
+}; // struct kmp_str_buf
+typedef struct kmp_str_buf kmp_str_buf_t;
+
+#define __kmp_str_buf_init( b ) { (b)->str = (b)->bulk; (b)->size = sizeof( (b)->bulk ); (b)->used = 0; (b)->bulk[ 0 ] = 0; }
+
+void __kmp_str_buf_clear( kmp_str_buf_t * buffer );
+void __kmp_str_buf_reserve( kmp_str_buf_t * buffer, int size );
+void __kmp_str_buf_detach( kmp_str_buf_t * buffer );
+void __kmp_str_buf_free( kmp_str_buf_t * buffer );
+void __kmp_str_buf_cat( kmp_str_buf_t * buffer, char const * str, int len );
+void __kmp_str_buf_vprint( kmp_str_buf_t * buffer, char const * format, va_list args );
+void __kmp_str_buf_print( kmp_str_buf_t * buffer, char const * format, ... );
+void __kmp_str_buf_print_size( kmp_str_buf_t * buffer, size_t size );
+
+/*
+ File name parser. Usage:
+
+ kmp_str_fname_t fname = __kmp_str_fname_init( path );
+ // Use fname.path (copy of original path ), fname.dir, fname.base.
+ // Note fname.dir concatenated with fname.base gives exact copy of path.
+ __kmp_str_fname_free( & fname );
+
+*/
+struct kmp_str_fname {
+ char * path;
+ char * dir;
+ char * base;
+}; // struct kmp_str_fname
+typedef struct kmp_str_fname kmp_str_fname_t;
+void __kmp_str_fname_init( kmp_str_fname_t * fname, char const * path );
+void __kmp_str_fname_free( kmp_str_fname_t * fname );
+// Compares file name with specified patern. If pattern is NULL, any fname matched.
+int __kmp_str_fname_match( kmp_str_fname_t const * fname, char const * pattern );
+
+/*
+ The compiler provides source locations in string form ";file;func;line;col;;". It not not
+ convenient for manupulation. These structure keeps source location in more convenient form.
+ Usage:
+
+ kmp_str_loc_t loc = __kmp_str_loc_init( ident->psource, 0 );
+ // use loc.file, loc.func, loc.line, loc.col.
+ // loc.fname is available if the second argument of __kmp_str_loc_init is true.
+ __kmp_str_loc_free( & loc );
+
+ If psource is NULL or does not follow format above, file and/or func may be NULL pointers.
+*/
+struct kmp_str_loc {
+ char * _bulk; // Do not use thid field.
+ kmp_str_fname_t fname; // Will be initialized if init_fname is true.
+ char * file;
+ char * func;
+ int line;
+ int col;
+}; // struct kmp_str_loc
+typedef struct kmp_str_loc kmp_str_loc_t;
+kmp_str_loc_t __kmp_str_loc_init( char const * psource, int init_fname );
+void __kmp_str_loc_free( kmp_str_loc_t * loc );
+
+int __kmp_str_eqf( char const * lhs, char const * rhs );
+char * __kmp_str_format( char const * format, ... );
+void __kmp_str_free( char const * * str );
+int __kmp_str_match( char const * target, int len, char const * data );
+int __kmp_str_match_false( char const * data );
+int __kmp_str_match_true( char const * data );
+void __kmp_str_replace( char * str, char search_for, char replace_with );
+void __kmp_str_split( char * str, char delim, char ** head, char ** tail );
+char * __kmp_str_token( char * str, char const * delim, char ** buf );
+int __kmp_str_to_int( char const * str, char sentinel );
+
+void __kmp_str_to_size( char const * str, size_t * out, size_t dfactor, char const * * error );
+void __kmp_str_to_uint( char const * str, kmp_uint64 * out, char const * * error );
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif // __cplusplus
+
+#endif // KMP_STR_H
+
+// end of file //
+
diff --git a/final/runtime/src/kmp_stub.c b/final/runtime/src/kmp_stub.c
new file mode 100644
index 0000000..437bf3d
--- /dev/null
+++ b/final/runtime/src/kmp_stub.c
@@ -0,0 +1,270 @@
+/*
+ * kmp_stub.c -- stub versions of user-callable OpenMP RT functions.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include <stdlib.h>
+#include <limits.h>
+#include <errno.h>
+
+#include "omp.h" // Function renamings.
+#include "kmp.h" // KMP_DEFAULT_STKSIZE
+#include "kmp_stub.h"
+
+#if KMP_OS_WINDOWS
+ #include <windows.h>
+#else
+ #include <sys/time.h>
+#endif
+
+// Moved from omp.h
+#define omp_set_max_active_levels ompc_set_max_active_levels
+#define omp_set_schedule ompc_set_schedule
+#define omp_get_ancestor_thread_num ompc_get_ancestor_thread_num
+#define omp_get_team_size ompc_get_team_size
+
+#define omp_set_num_threads ompc_set_num_threads
+#define omp_set_dynamic ompc_set_dynamic
+#define omp_set_nested ompc_set_nested
+#define kmp_set_stacksize kmpc_set_stacksize
+#define kmp_set_stacksize_s kmpc_set_stacksize_s
+#define kmp_set_blocktime kmpc_set_blocktime
+#define kmp_set_library kmpc_set_library
+#define kmp_set_defaults kmpc_set_defaults
+#define kmp_set_disp_num_buffers kmpc_set_disp_num_buffers
+#define kmp_malloc kmpc_malloc
+#define kmp_aligned_malloc kmpc_aligned_malloc
+#define kmp_calloc kmpc_calloc
+#define kmp_realloc kmpc_realloc
+#define kmp_free kmpc_free
+
+static double frequency = 0.0;
+
+// Helper functions.
+static size_t __kmps_init() {
+ static int initialized = 0;
+ static size_t dummy = 0;
+ if ( ! initialized ) {
+
+ // TODO: Analyze KMP_VERSION environment variable, print __kmp_version_copyright and
+ // __kmp_version_build_time.
+ // WARNING: Do not use "fprintf( stderr, ... )" because it will cause unresolved "__iob"
+ // symbol (see C70080). We need to extract __kmp_printf() stuff from kmp_runtime.c and use
+ // it.
+
+ // Trick with dummy variable forces linker to keep __kmp_version_copyright and
+ // __kmp_version_build_time strings in executable file (in case of static linkage).
+ // When KMP_VERSION analyze is implemented, dummy variable should be deleted, function
+ // should return void.
+ dummy = __kmp_version_copyright - __kmp_version_build_time;
+
+ #if KMP_OS_WINDOWS
+ LARGE_INTEGER freq;
+ BOOL status = QueryPerformanceFrequency( & freq );
+ if ( status ) {
+ frequency = double( freq.QuadPart );
+ }; // if
+ #endif
+
+ initialized = 1;
+ }; // if
+ return dummy;
+}; // __kmps_init
+
+#define i __kmps_init();
+
+/* set API functions */
+void omp_set_num_threads( omp_int_t num_threads ) { i; }
+void omp_set_dynamic( omp_int_t dynamic ) { i; __kmps_set_dynamic( dynamic ); }
+void omp_set_nested( omp_int_t nested ) { i; __kmps_set_nested( nested ); }
+void omp_set_max_active_levels( omp_int_t max_active_levels ) { i; }
+void omp_set_schedule( omp_sched_t kind, omp_int_t modifier ) { i; __kmps_set_schedule( (kmp_sched_t)kind, modifier ); }
+int omp_get_ancestor_thread_num( omp_int_t level ) { i; return ( level ) ? ( -1 ) : ( 0 ); }
+int omp_get_team_size( omp_int_t level ) { i; return ( level ) ? ( -1 ) : ( 1 ); }
+int kmpc_set_affinity_mask_proc( int proc, void **mask ) { i; return -1; }
+int kmpc_unset_affinity_mask_proc( int proc, void **mask ) { i; return -1; }
+int kmpc_get_affinity_mask_proc( int proc, void **mask ) { i; return -1; }
+
+/* kmp API functions */
+void kmp_set_stacksize( omp_int_t arg ) { i; __kmps_set_stacksize( arg ); }
+void kmp_set_stacksize_s( size_t arg ) { i; __kmps_set_stacksize( arg ); }
+void kmp_set_blocktime( omp_int_t arg ) { i; __kmps_set_blocktime( arg ); }
+void kmp_set_library( omp_int_t arg ) { i; __kmps_set_library( arg ); }
+void kmp_set_defaults( char const * str ) { i; }
+void kmp_set_disp_num_buffers( omp_int_t arg ) { i; }
+
+/* KMP memory management functions. */
+void * kmp_malloc( size_t size ) { i; return malloc( size ); }
+void * kmp_aligned_malloc( size_t sz, size_t a ) {
+ i;
+#if KMP_OS_WINDOWS
+ errno = ENOSYS; // not supported
+ return NULL; // no standard aligned allocator on Windows (pre - C11)
+#else
+ void *res;
+ int err;
+ if( err = posix_memalign( &res, a, sz ) ) {
+ errno = err; // can be EINVAL or ENOMEM
+ return NULL;
+ }
+ return res;
+#endif
+}
+void * kmp_calloc( size_t nelem, size_t elsize ) { i; return calloc( nelem, elsize ); }
+void * kmp_realloc( void *ptr, size_t size ) { i; return realloc( ptr, size ); }
+void kmp_free( void * ptr ) { i; free( ptr ); }
+
+static int __kmps_blocktime = INT_MAX;
+
+void __kmps_set_blocktime( int arg ) {
+ i;
+ __kmps_blocktime = arg;
+} // __kmps_set_blocktime
+
+int __kmps_get_blocktime( void ) {
+ i;
+ return __kmps_blocktime;
+} // __kmps_get_blocktime
+
+static int __kmps_dynamic = 0;
+
+void __kmps_set_dynamic( int arg ) {
+ i;
+ __kmps_dynamic = arg;
+} // __kmps_set_dynamic
+
+int __kmps_get_dynamic( void ) {
+ i;
+ return __kmps_dynamic;
+} // __kmps_get_dynamic
+
+static int __kmps_library = 1000;
+
+void __kmps_set_library( int arg ) {
+ i;
+ __kmps_library = arg;
+} // __kmps_set_library
+
+int __kmps_get_library( void ) {
+ i;
+ return __kmps_library;
+} // __kmps_get_library
+
+static int __kmps_nested = 0;
+
+void __kmps_set_nested( int arg ) {
+ i;
+ __kmps_nested = arg;
+} // __kmps_set_nested
+
+int __kmps_get_nested( void ) {
+ i;
+ return __kmps_nested;
+} // __kmps_get_nested
+
+static size_t __kmps_stacksize = KMP_DEFAULT_STKSIZE;
+
+void __kmps_set_stacksize( int arg ) {
+ i;
+ __kmps_stacksize = arg;
+} // __kmps_set_stacksize
+
+int __kmps_get_stacksize( void ) {
+ i;
+ return __kmps_stacksize;
+} // __kmps_get_stacksize
+
+static kmp_sched_t __kmps_sched_kind = kmp_sched_default;
+static int __kmps_sched_modifier = 0;
+
+ void __kmps_set_schedule( kmp_sched_t kind, int modifier ) {
+ i;
+ __kmps_sched_kind = kind;
+ __kmps_sched_modifier = modifier;
+ } // __kmps_set_schedule
+
+ void __kmps_get_schedule( kmp_sched_t *kind, int *modifier ) {
+ i;
+ *kind = __kmps_sched_kind;
+ *modifier = __kmps_sched_modifier;
+ } // __kmps_get_schedule
+
+#if OMP_40_ENABLED
+
+static kmp_proc_bind_t __kmps_proc_bind = proc_bind_false;
+
+void __kmps_set_proc_bind( kmp_proc_bind_t arg ) {
+ i;
+ __kmps_proc_bind = arg;
+} // __kmps_set_proc_bind
+
+kmp_proc_bind_t __kmps_get_proc_bind( void ) {
+ i;
+ return __kmps_proc_bind;
+} // __kmps_get_proc_bind
+
+#endif /* OMP_40_ENABLED */
+
+double __kmps_get_wtime( void ) {
+ // Elapsed wall clock time (in second) from "sometime in the past".
+ double wtime = 0.0;
+ i;
+ #if KMP_OS_WINDOWS
+ if ( frequency > 0.0 ) {
+ LARGE_INTEGER now;
+ BOOL status = QueryPerformanceCounter( & now );
+ if ( status ) {
+ wtime = double( now.QuadPart ) / frequency;
+ }; // if
+ }; // if
+ #else
+ // gettimeofday() returns seconds and microseconds since the Epoch.
+ struct timeval tval;
+ int rc;
+ rc = gettimeofday( & tval, NULL );
+ if ( rc == 0 ) {
+ wtime = (double)( tval.tv_sec ) + 1.0E-06 * (double)( tval.tv_usec );
+ } else {
+ // TODO: Assert or abort here.
+ }; // if
+ #endif
+ return wtime;
+}; // __kmps_get_wtime
+
+double __kmps_get_wtick( void ) {
+ // Number of seconds between successive clock ticks.
+ double wtick = 0.0;
+ i;
+ #if KMP_OS_WINDOWS
+ {
+ DWORD increment;
+ DWORD adjustment;
+ BOOL disabled;
+ BOOL rc;
+ rc = GetSystemTimeAdjustment( & adjustment, & increment, & disabled );
+ if ( rc ) {
+ wtick = 1.0E-07 * (double)( disabled ? increment : adjustment );
+ } else {
+ // TODO: Assert or abort here.
+ wtick = 1.0E-03;
+ }; // if
+ }
+ #else
+ // TODO: gettimeofday() returns in microseconds, but what the precision?
+ wtick = 1.0E-06;
+ #endif
+ return wtick;
+}; // __kmps_get_wtick
+
+// end of file //
+
diff --git a/final/runtime/src/kmp_stub.h b/final/runtime/src/kmp_stub.h
new file mode 100644
index 0000000..cdcffa3
--- /dev/null
+++ b/final/runtime/src/kmp_stub.h
@@ -0,0 +1,61 @@
+/*
+ * kmp_stub.h
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_STUB_H
+#define KMP_STUB_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+void __kmps_set_blocktime( int arg );
+int __kmps_get_blocktime( void );
+void __kmps_set_dynamic( int arg );
+int __kmps_get_dynamic( void );
+void __kmps_set_library( int arg );
+int __kmps_get_library( void );
+void __kmps_set_nested( int arg );
+int __kmps_get_nested( void );
+void __kmps_set_stacksize( int arg );
+int __kmps_get_stacksize();
+
+#ifndef KMP_SCHED_TYPE_DEFINED
+#define KMP_SCHED_TYPE_DEFINED
+typedef enum kmp_sched {
+ kmp_sched_static = 1, // mapped to kmp_sch_static_chunked (33)
+ kmp_sched_dynamic = 2, // mapped to kmp_sch_dynamic_chunked (35)
+ kmp_sched_guided = 3, // mapped to kmp_sch_guided_chunked (36)
+ kmp_sched_auto = 4, // mapped to kmp_sch_auto (38)
+ kmp_sched_default = kmp_sched_static // default scheduling
+} kmp_sched_t;
+#endif
+void __kmps_set_schedule( kmp_sched_t kind, int modifier );
+void __kmps_get_schedule( kmp_sched_t *kind, int *modifier );
+
+#if OMP_40_ENABLED
+void __kmps_set_proc_bind( kmp_proc_bind_t arg );
+kmp_proc_bind_t __kmps_get_proc_bind( void );
+#endif /* OMP_40_ENABLED */
+
+double __kmps_get_wtime();
+double __kmps_get_wtick();
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif // __cplusplus
+
+#endif // KMP_STUB_H
+
+// end of file //
diff --git a/final/runtime/src/kmp_taskdeps.cpp b/final/runtime/src/kmp_taskdeps.cpp
new file mode 100644
index 0000000..46ba5df
--- /dev/null
+++ b/final/runtime/src/kmp_taskdeps.cpp
@@ -0,0 +1,587 @@
+/*
+ * kmp_taskdeps.cpp
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+//#define KMP_SUPPORT_GRAPH_OUTPUT 1
+
+#include "kmp.h"
+#include "kmp_io.h"
+#include "kmp_wait_release.h"
+
+#if OMP_40_ENABLED
+
+//TODO: Improve memory allocation? keep a list of pre-allocated structures? allocate in blocks? re-use list finished list entries?
+//TODO: don't use atomic ref counters for stack-allocated nodes.
+//TODO: find an alternate to atomic refs for heap-allocated nodes?
+//TODO: Finish graph output support
+//TODO: kmp_lock_t seems a tad to big (and heavy weight) for this. Check other runtime locks
+//TODO: Any ITT support needed?
+
+#ifdef KMP_SUPPORT_GRAPH_OUTPUT
+static kmp_int32 kmp_node_id_seed = 0;
+#endif
+
+static void
+__kmp_init_node ( kmp_depnode_t *node )
+{
+ node->dn.task = NULL; // set to null initially, it will point to the right task once dependences have been processed
+ node->dn.successors = NULL;
+ __kmp_init_lock(&node->dn.lock);
+ node->dn.nrefs = 1; // init creates the first reference to the node
+#ifdef KMP_SUPPORT_GRAPH_OUTPUT
+ node->dn.id = KMP_TEST_THEN_INC32(&kmp_node_id_seed);
+#endif
+}
+
+static inline kmp_depnode_t *
+__kmp_node_ref ( kmp_depnode_t *node )
+{
+ KMP_TEST_THEN_INC32(&node->dn.nrefs);
+ return node;
+}
+
+static inline void
+__kmp_node_deref ( kmp_info_t *thread, kmp_depnode_t *node )
+{
+ if (!node) return;
+
+ kmp_int32 n = KMP_TEST_THEN_DEC32(&node->dn.nrefs) - 1;
+ if ( n == 0 ) {
+ KMP_ASSERT(node->dn.nrefs == 0);
+#if USE_FAST_MEMORY
+ __kmp_fast_free(thread,node);
+#else
+ __kmp_thread_free(thread,node);
+#endif
+ }
+}
+
+#define KMP_ACQUIRE_DEPNODE(gtid,n) __kmp_acquire_lock(&(n)->dn.lock,(gtid))
+#define KMP_RELEASE_DEPNODE(gtid,n) __kmp_release_lock(&(n)->dn.lock,(gtid))
+
+static void
+__kmp_depnode_list_free ( kmp_info_t *thread, kmp_depnode_list *list );
+
+enum {
+ KMP_DEPHASH_OTHER_SIZE = 97,
+ KMP_DEPHASH_MASTER_SIZE = 997
+};
+
+static inline kmp_int32
+__kmp_dephash_hash ( kmp_intptr_t addr, size_t hsize )
+{
+ //TODO alternate to try: set = (((Addr64)(addrUsefulBits * 9.618)) % m_num_sets );
+ return ((addr >> 6) ^ (addr >> 2)) % hsize;
+}
+
+static kmp_dephash_t *
+__kmp_dephash_create ( kmp_info_t *thread, kmp_taskdata_t *current_task )
+{
+ kmp_dephash_t *h;
+
+ size_t h_size;
+
+ if ( current_task->td_flags.tasktype == TASK_IMPLICIT )
+ h_size = KMP_DEPHASH_MASTER_SIZE;
+ else
+ h_size = KMP_DEPHASH_OTHER_SIZE;
+
+ kmp_int32 size = h_size * sizeof(kmp_dephash_entry_t) + sizeof(kmp_dephash_t);
+
+#if USE_FAST_MEMORY
+ h = (kmp_dephash_t *) __kmp_fast_allocate( thread, size );
+#else
+ h = (kmp_dephash_t *) __kmp_thread_malloc( thread, size );
+#endif
+ h->size = h_size;
+
+#ifdef KMP_DEBUG
+ h->nelements = 0;
+ h->nconflicts = 0;
+#endif
+ h->buckets = (kmp_dephash_entry **)(h+1);
+
+ for ( size_t i = 0; i < h_size; i++ )
+ h->buckets[i] = 0;
+
+ return h;
+}
+
+static void
+__kmp_dephash_free ( kmp_info_t *thread, kmp_dephash_t *h )
+{
+ for ( size_t i=0; i < h->size; i++ ) {
+ if ( h->buckets[i] ) {
+ kmp_dephash_entry_t *next;
+ for ( kmp_dephash_entry_t *entry = h->buckets[i]; entry; entry = next ) {
+ next = entry->next_in_bucket;
+ __kmp_depnode_list_free(thread,entry->last_ins);
+ __kmp_node_deref(thread,entry->last_out);
+#if USE_FAST_MEMORY
+ __kmp_fast_free(thread,entry);
+#else
+ __kmp_thread_free(thread,entry);
+#endif
+ }
+ }
+ }
+#if USE_FAST_MEMORY
+ __kmp_fast_free(thread,h);
+#else
+ __kmp_thread_free(thread,h);
+#endif
+}
+
+static kmp_dephash_entry *
+__kmp_dephash_find ( kmp_info_t *thread, kmp_dephash_t *h, kmp_intptr_t addr )
+{
+ kmp_int32 bucket = __kmp_dephash_hash(addr,h->size);
+
+ kmp_dephash_entry_t *entry;
+ for ( entry = h->buckets[bucket]; entry; entry = entry->next_in_bucket )
+ if ( entry->addr == addr ) break;
+
+ if ( entry == NULL ) {
+ // create entry. This is only done by one thread so no locking required
+#if USE_FAST_MEMORY
+ entry = (kmp_dephash_entry_t *) __kmp_fast_allocate( thread, sizeof(kmp_dephash_entry_t) );
+#else
+ entry = (kmp_dephash_entry_t *) __kmp_thread_malloc( thread, sizeof(kmp_dephash_entry_t) );
+#endif
+ entry->addr = addr;
+ entry->last_out = NULL;
+ entry->last_ins = NULL;
+ entry->next_in_bucket = h->buckets[bucket];
+ h->buckets[bucket] = entry;
+#ifdef KMP_DEBUG
+ h->nelements++;
+ if ( entry->next_in_bucket ) h->nconflicts++;
+#endif
+ }
+ return entry;
+}
+
+static kmp_depnode_list_t *
+__kmp_add_node ( kmp_info_t *thread, kmp_depnode_list_t *list, kmp_depnode_t *node )
+{
+ kmp_depnode_list_t *new_head;
+
+#if USE_FAST_MEMORY
+ new_head = (kmp_depnode_list_t *) __kmp_fast_allocate(thread,sizeof(kmp_depnode_list_t));
+#else
+ new_head = (kmp_depnode_list_t *) __kmp_thread_malloc(thread,sizeof(kmp_depnode_list_t));
+#endif
+
+ new_head->node = __kmp_node_ref(node);
+ new_head->next = list;
+
+ return new_head;
+}
+
+static void
+__kmp_depnode_list_free ( kmp_info_t *thread, kmp_depnode_list *list )
+{
+ kmp_depnode_list *next;
+
+ for ( ; list ; list = next ) {
+ next = list->next;
+
+ __kmp_node_deref(thread,list->node);
+#if USE_FAST_MEMORY
+ __kmp_fast_free(thread,list);
+#else
+ __kmp_thread_free(thread,list);
+#endif
+ }
+}
+
+static inline void
+__kmp_track_dependence ( kmp_depnode_t *source, kmp_depnode_t *sink,
+ kmp_task_t *sink_task )
+{
+#ifdef KMP_SUPPORT_GRAPH_OUTPUT
+ kmp_taskdata_t * task_source = KMP_TASK_TO_TASKDATA(source->dn.task);
+ kmp_taskdata_t * task_sink = KMP_TASK_TO_TASKDATA(sink->dn.task); // this can be NULL when if(0) ...
+
+ __kmp_printf("%d(%s) -> %d(%s)\n", source->dn.id, task_source->td_ident->psource, sink->dn.id, task_sink->td_ident->psource);
+#endif
+#if OMPT_SUPPORT && OMPT_TRACE
+ /* OMPT tracks dependences between task (a=source, b=sink) in which
+ task a blocks the execution of b through the ompt_new_dependence_callback */
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_task_dependence_pair))
+ {
+ kmp_taskdata_t * task_source = KMP_TASK_TO_TASKDATA(source->dn.task);
+ kmp_taskdata_t * task_sink = KMP_TASK_TO_TASKDATA(sink_task);
+
+ ompt_callbacks.ompt_callback(ompt_event_task_dependence_pair)(
+ task_source->ompt_task_info.task_id,
+ task_sink->ompt_task_info.task_id);
+ }
+#endif /* OMPT_SUPPORT && OMPT_TRACE */
+}
+
+template< bool filter >
+static inline kmp_int32
+__kmp_process_deps ( kmp_int32 gtid, kmp_depnode_t *node, kmp_dephash_t *hash,
+ bool dep_barrier,kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_task_t *task )
+{
+ KA_TRACE(30, ("__kmp_process_deps<%d>: T#%d processing %d depencies : dep_barrier = %d\n", filter, gtid, ndeps, dep_barrier ) );
+
+ kmp_info_t *thread = __kmp_threads[ gtid ];
+ kmp_int32 npredecessors=0;
+ for ( kmp_int32 i = 0; i < ndeps ; i++ ) {
+ const kmp_depend_info_t * dep = &dep_list[i];
+
+ KMP_DEBUG_ASSERT(dep->flags.in);
+
+ if ( filter && dep->base_addr == 0 ) continue; // skip filtered entries
+
+ kmp_dephash_entry_t *info = __kmp_dephash_find(thread,hash,dep->base_addr);
+ kmp_depnode_t *last_out = info->last_out;
+
+ if ( dep->flags.out && info->last_ins ) {
+ for ( kmp_depnode_list_t * p = info->last_ins; p; p = p->next ) {
+ kmp_depnode_t * indep = p->node;
+ if ( indep->dn.task ) {
+ KMP_ACQUIRE_DEPNODE(gtid,indep);
+ if ( indep->dn.task ) {
+ __kmp_track_dependence(indep,node,task);
+ indep->dn.successors = __kmp_add_node(thread, indep->dn.successors, node);
+ KA_TRACE(40,("__kmp_process_deps<%d>: T#%d adding dependence from %p to %p\n",
+ filter,gtid, KMP_TASK_TO_TASKDATA(indep->dn.task), KMP_TASK_TO_TASKDATA(node->dn.task)));
+ npredecessors++;
+ }
+ KMP_RELEASE_DEPNODE(gtid,indep);
+ }
+ }
+
+ __kmp_depnode_list_free(thread,info->last_ins);
+ info->last_ins = NULL;
+
+ } else if ( last_out && last_out->dn.task ) {
+ KMP_ACQUIRE_DEPNODE(gtid,last_out);
+ if ( last_out->dn.task ) {
+ __kmp_track_dependence(last_out,node,task);
+ last_out->dn.successors = __kmp_add_node(thread, last_out->dn.successors, node);
+ KA_TRACE(40,("__kmp_process_deps<%d>: T#%d adding dependence from %p to %p\n",
+ filter,gtid, KMP_TASK_TO_TASKDATA(last_out->dn.task), KMP_TASK_TO_TASKDATA(node->dn.task)));
+
+ npredecessors++;
+ }
+ KMP_RELEASE_DEPNODE(gtid,last_out);
+ }
+
+ if ( dep_barrier ) {
+ // if this is a sync point in the serial sequence, then the previous outputs are guaranteed to be completed after
+ // the execution of this task so the previous output nodes can be cleared.
+ __kmp_node_deref(thread,last_out);
+ info->last_out = NULL;
+ } else {
+ if ( dep->flags.out ) {
+ __kmp_node_deref(thread,last_out);
+ info->last_out = __kmp_node_ref(node);
+ } else
+ info->last_ins = __kmp_add_node(thread, info->last_ins, node);
+ }
+
+ }
+
+ KA_TRACE(30, ("__kmp_process_deps<%d>: T#%d found %d predecessors\n", filter, gtid, npredecessors ) );
+
+ return npredecessors;
+}
+
+#define NO_DEP_BARRIER (false)
+#define DEP_BARRIER (true)
+
+// returns true if the task has any outstanding dependence
+static bool
+__kmp_check_deps ( kmp_int32 gtid, kmp_depnode_t *node, kmp_task_t *task, kmp_dephash_t *hash, bool dep_barrier,
+ kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list )
+{
+ int i;
+
+#if KMP_DEBUG
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+#endif
+ KA_TRACE(20, ("__kmp_check_deps: T#%d checking dependencies for task %p : %d possibly aliased dependencies, %d non-aliased depedencies : dep_barrier=%d .\n", gtid, taskdata, ndeps, ndeps_noalias, dep_barrier ) );
+
+ // Filter deps in dep_list
+ // TODO: Different algorithm for large dep_list ( > 10 ? )
+ for ( i = 0; i < ndeps; i ++ ) {
+ if ( dep_list[i].base_addr != 0 )
+ for ( int j = i+1; j < ndeps; j++ )
+ if ( dep_list[i].base_addr == dep_list[j].base_addr ) {
+ dep_list[i].flags.in |= dep_list[j].flags.in;
+ dep_list[i].flags.out |= dep_list[j].flags.out;
+ dep_list[j].base_addr = 0; // Mark j element as void
+ }
+ }
+
+ // doesn't need to be atomic as no other thread is going to be accessing this node just yet
+ // npredecessors is set -1 to ensure that none of the releasing tasks queues this task before we have finished processing all the dependencies
+ node->dn.npredecessors = -1;
+
+ // used to pack all npredecessors additions into a single atomic operation at the end
+ int npredecessors;
+
+ npredecessors = __kmp_process_deps<true>(gtid, node, hash, dep_barrier,
+ ndeps, dep_list, task);
+ npredecessors += __kmp_process_deps<false>(gtid, node, hash, dep_barrier,
+ ndeps_noalias, noalias_dep_list, task);
+
+ node->dn.task = task;
+ KMP_MB();
+
+ // Account for our initial fake value
+ npredecessors++;
+
+ // Update predecessors and obtain current value to check if there are still any outstandig dependences (some tasks may have finished while we processed the dependences)
+ npredecessors = KMP_TEST_THEN_ADD32(&node->dn.npredecessors, npredecessors) + npredecessors;
+
+ KA_TRACE(20, ("__kmp_check_deps: T#%d found %d predecessors for task %p \n", gtid, npredecessors, taskdata ) );
+
+ // beyond this point the task could be queued (and executed) by a releasing task...
+ return npredecessors > 0 ? true : false;
+}
+
+void
+__kmp_release_deps ( kmp_int32 gtid, kmp_taskdata_t *task )
+{
+ kmp_info_t *thread = __kmp_threads[ gtid ];
+ kmp_depnode_t *node = task->td_depnode;
+
+ if ( task->td_dephash ) {
+ KA_TRACE(40, ("__kmp_realease_deps: T#%d freeing dependencies hash of task %p.\n", gtid, task ) );
+ __kmp_dephash_free(thread,task->td_dephash);
+ }
+
+ if ( !node ) return;
+
+ KA_TRACE(20, ("__kmp_realease_deps: T#%d notifying succesors of task %p.\n", gtid, task ) );
+
+ KMP_ACQUIRE_DEPNODE(gtid,node);
+ node->dn.task = NULL; // mark this task as finished, so no new dependencies are generated
+ KMP_RELEASE_DEPNODE(gtid,node);
+
+ kmp_depnode_list_t *next;
+ for ( kmp_depnode_list_t *p = node->dn.successors; p; p = next ) {
+ kmp_depnode_t *successor = p->node;
+ kmp_int32 npredecessors = KMP_TEST_THEN_DEC32(&successor->dn.npredecessors) - 1;
+
+ // successor task can be NULL for wait_depends or because deps are still being processed
+ if ( npredecessors == 0 ) {
+ KMP_MB();
+ if ( successor->dn.task ) {
+ KA_TRACE(20, ("__kmp_realease_deps: T#%d successor %p of %p scheduled for execution.\n", gtid, successor->dn.task, task ) );
+ __kmp_omp_task(gtid,successor->dn.task,false);
+ }
+ }
+
+ next = p->next;
+ __kmp_node_deref(thread,p->node);
+#if USE_FAST_MEMORY
+ __kmp_fast_free(thread,p);
+#else
+ __kmp_thread_free(thread,p);
+#endif
+ }
+
+ __kmp_node_deref(thread,node);
+
+ KA_TRACE(20, ("__kmp_realease_deps: T#%d all successors of %p notified of completation\n", gtid, task ) );
+}
+
+/*!
+@ingroup TASKING
+@param loc_ref location of the original task directive
+@param gtid Global Thread ID of encountering thread
+@param new_task task thunk allocated by __kmp_omp_task_alloc() for the ''new task''
+@param ndeps Number of depend items with possible aliasing
+@param dep_list List of depend items with possible aliasing
+@param ndeps_noalias Number of depend items with no aliasing
+@param noalias_dep_list List of depend items with no aliasing
+
+@return Returns either TASK_CURRENT_NOT_QUEUED if the current task was not suspendend and queued, or TASK_CURRENT_QUEUED if it was suspended and queued
+
+Schedule a non-thread-switchable task with dependences for execution
+*/
+kmp_int32
+__kmpc_omp_task_with_deps( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task,
+ kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list )
+{
+
+ kmp_taskdata_t * new_taskdata = KMP_TASK_TO_TASKDATA(new_task);
+ KA_TRACE(10, ("__kmpc_omp_task_with_deps(enter): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, new_taskdata ) );
+
+ kmp_info_t *thread = __kmp_threads[ gtid ];
+ kmp_taskdata_t * current_task = thread->th.th_current_task;
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ /* OMPT grab all dependences if requested by the tool */
+ if (ompt_enabled && ndeps+ndeps_noalias > 0 &&
+ ompt_callbacks.ompt_callback(ompt_event_task_dependences))
+ {
+ kmp_int32 i;
+
+ new_taskdata->ompt_task_info.ndeps = ndeps+ndeps_noalias;
+ new_taskdata->ompt_task_info.deps = (ompt_task_dependence_t *)
+ KMP_OMPT_DEPS_ALLOC(thread,
+ (ndeps+ndeps_noalias)*sizeof(ompt_task_dependence_t));
+
+ KMP_ASSERT(new_taskdata->ompt_task_info.deps != NULL);
+
+ for (i = 0; i < ndeps; i++)
+ {
+ new_taskdata->ompt_task_info.deps[i].variable_addr =
+ (void*) dep_list[i].base_addr;
+ if (dep_list[i].flags.in && dep_list[i].flags.out)
+ new_taskdata->ompt_task_info.deps[i].dependence_flags =
+ ompt_task_dependence_type_inout;
+ else if (dep_list[i].flags.out)
+ new_taskdata->ompt_task_info.deps[i].dependence_flags =
+ ompt_task_dependence_type_out;
+ else if (dep_list[i].flags.in)
+ new_taskdata->ompt_task_info.deps[i].dependence_flags =
+ ompt_task_dependence_type_in;
+ }
+ for (i = 0; i < ndeps_noalias; i++)
+ {
+ new_taskdata->ompt_task_info.deps[ndeps+i].variable_addr =
+ (void*) noalias_dep_list[i].base_addr;
+ if (noalias_dep_list[i].flags.in && noalias_dep_list[i].flags.out)
+ new_taskdata->ompt_task_info.deps[ndeps+i].dependence_flags =
+ ompt_task_dependence_type_inout;
+ else if (noalias_dep_list[i].flags.out)
+ new_taskdata->ompt_task_info.deps[ndeps+i].dependence_flags =
+ ompt_task_dependence_type_out;
+ else if (noalias_dep_list[i].flags.in)
+ new_taskdata->ompt_task_info.deps[ndeps+i].dependence_flags =
+ ompt_task_dependence_type_in;
+ }
+ }
+#endif /* OMPT_SUPPORT && OMPT_TRACE */
+
+ bool serial = current_task->td_flags.team_serial || current_task->td_flags.tasking_ser || current_task->td_flags.final;
+#if OMP_45_ENABLED
+ serial = serial && !(new_taskdata->td_flags.proxy == TASK_PROXY);
+#endif
+
+ if ( !serial && ( ndeps > 0 || ndeps_noalias > 0 )) {
+ /* if no dependencies have been tracked yet, create the dependence hash */
+ if ( current_task->td_dephash == NULL )
+ current_task->td_dephash = __kmp_dephash_create(thread, current_task);
+
+#if USE_FAST_MEMORY
+ kmp_depnode_t *node = (kmp_depnode_t *) __kmp_fast_allocate(thread,sizeof(kmp_depnode_t));
+#else
+ kmp_depnode_t *node = (kmp_depnode_t *) __kmp_thread_malloc(thread,sizeof(kmp_depnode_t));
+#endif
+
+ __kmp_init_node(node);
+ new_taskdata->td_depnode = node;
+
+ if ( __kmp_check_deps( gtid, node, new_task, current_task->td_dephash, NO_DEP_BARRIER,
+ ndeps, dep_list, ndeps_noalias,noalias_dep_list ) ) {
+ KA_TRACE(10, ("__kmpc_omp_task_with_deps(exit): T#%d task had blocking dependencies: "
+ "loc=%p task=%p, return: TASK_CURRENT_NOT_QUEUED\n", gtid, loc_ref,
+ new_taskdata ) );
+ return TASK_CURRENT_NOT_QUEUED;
+ }
+ } else {
+#if OMP_45_ENABLED
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+ if ( task_team && task_team->tt.tt_found_proxy_tasks )
+ __kmpc_omp_wait_deps ( loc_ref, gtid, ndeps, dep_list, ndeps_noalias, noalias_dep_list );
+ else
+#endif
+ KA_TRACE(10, ("__kmpc_omp_task_with_deps(exit): T#%d ignored dependencies for task (serialized)"
+ "loc=%p task=%p\n", gtid, loc_ref, new_taskdata ) );
+ }
+
+ KA_TRACE(10, ("__kmpc_omp_task_with_deps(exit): T#%d task had no blocking dependencies : "
+ "loc=%p task=%p, transferring to __kmpc_omp_task\n", gtid, loc_ref,
+ new_taskdata ) );
+
+ return __kmpc_omp_task(loc_ref,gtid,new_task);
+}
+
+/*!
+@ingroup TASKING
+@param loc_ref location of the original task directive
+@param gtid Global Thread ID of encountering thread
+@param ndeps Number of depend items with possible aliasing
+@param dep_list List of depend items with possible aliasing
+@param ndeps_noalias Number of depend items with no aliasing
+@param noalias_dep_list List of depend items with no aliasing
+
+Blocks the current task until all specifies dependencies have been fulfilled.
+*/
+void
+__kmpc_omp_wait_deps ( ident_t *loc_ref, kmp_int32 gtid, kmp_int32 ndeps, kmp_depend_info_t *dep_list,
+ kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list )
+{
+ KA_TRACE(10, ("__kmpc_omp_wait_deps(enter): T#%d loc=%p\n", gtid, loc_ref) );
+
+ if ( ndeps == 0 && ndeps_noalias == 0 ) {
+ KA_TRACE(10, ("__kmpc_omp_wait_deps(exit): T#%d has no dependencies to wait upon : loc=%p\n", gtid, loc_ref) );
+ return;
+ }
+
+ kmp_info_t *thread = __kmp_threads[ gtid ];
+ kmp_taskdata_t * current_task = thread->th.th_current_task;
+
+ // We can return immediately as:
+ // - dependences are not computed in serial teams (except if we have proxy tasks)
+ // - if the dephash is not yet created it means we have nothing to wait for
+ bool ignore = current_task->td_flags.team_serial || current_task->td_flags.tasking_ser || current_task->td_flags.final;
+#if OMP_45_ENABLED
+ ignore = ignore && thread->th.th_task_team != NULL && thread->th.th_task_team->tt.tt_found_proxy_tasks == FALSE;
+#endif
+ ignore = ignore || current_task->td_dephash == NULL;
+
+ if ( ignore ) {
+ KA_TRACE(10, ("__kmpc_omp_wait_deps(exit): T#%d has no blocking dependencies : loc=%p\n", gtid, loc_ref) );
+ return;
+ }
+
+ kmp_depnode_t node;
+ __kmp_init_node(&node);
+
+ if (!__kmp_check_deps( gtid, &node, NULL, current_task->td_dephash, DEP_BARRIER,
+ ndeps, dep_list, ndeps_noalias, noalias_dep_list )) {
+ KA_TRACE(10, ("__kmpc_omp_wait_deps(exit): T#%d has no blocking dependencies : loc=%p\n", gtid, loc_ref) );
+ return;
+ }
+
+ int thread_finished = FALSE;
+ kmp_flag_32 flag((volatile kmp_uint32 *)&(node.dn.npredecessors), 0U);
+ while ( node.dn.npredecessors > 0 ) {
+ flag.execute_tasks(thread, gtid, FALSE, &thread_finished,
+#if USE_ITT_BUILD
+ NULL,
+#endif
+ __kmp_task_stealing_constraint );
+ }
+
+ KA_TRACE(10, ("__kmpc_omp_wait_deps(exit): T#%d finished waiting : loc=%p\n", gtid, loc_ref) );
+}
+
+#endif /* OMP_40_ENABLED */
+
diff --git a/final/runtime/src/kmp_tasking.c b/final/runtime/src/kmp_tasking.c
new file mode 100644
index 0000000..ce1b63d
--- /dev/null
+++ b/final/runtime/src/kmp_tasking.c
@@ -0,0 +1,3102 @@
+/*
+ * kmp_tasking.c -- OpenMP 3.0 tasking support.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_itt.h"
+#include "kmp_wait_release.h"
+#include "kmp_stats.h"
+
+#if OMPT_SUPPORT
+#include "ompt-specific.h"
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+
+/* forward declaration */
+static void __kmp_enable_tasking( kmp_task_team_t *task_team, kmp_info_t *this_thr );
+static void __kmp_alloc_task_deque( kmp_info_t *thread, kmp_thread_data_t *thread_data );
+static int __kmp_realloc_task_threads_data( kmp_info_t *thread, kmp_task_team_t *task_team );
+
+#ifdef OMP_45_ENABLED
+static void __kmp_bottom_half_finish_proxy( kmp_int32 gtid, kmp_task_t * ptask );
+#endif
+
+#ifdef BUILD_TIED_TASK_STACK
+
+//---------------------------------------------------------------------------
+// __kmp_trace_task_stack: print the tied tasks from the task stack in order
+// from top do bottom
+//
+// gtid: global thread identifier for thread containing stack
+// thread_data: thread data for task team thread containing stack
+// threshold: value above which the trace statement triggers
+// location: string identifying call site of this function (for trace)
+
+static void
+__kmp_trace_task_stack( kmp_int32 gtid, kmp_thread_data_t *thread_data, int threshold, char *location )
+{
+ kmp_task_stack_t *task_stack = & thread_data->td.td_susp_tied_tasks;
+ kmp_taskdata_t **stack_top = task_stack -> ts_top;
+ kmp_int32 entries = task_stack -> ts_entries;
+ kmp_taskdata_t *tied_task;
+
+ KA_TRACE(threshold, ("__kmp_trace_task_stack(start): location = %s, gtid = %d, entries = %d, "
+ "first_block = %p, stack_top = %p \n",
+ location, gtid, entries, task_stack->ts_first_block, stack_top ) );
+
+ KMP_DEBUG_ASSERT( stack_top != NULL );
+ KMP_DEBUG_ASSERT( entries > 0 );
+
+ while ( entries != 0 )
+ {
+ KMP_DEBUG_ASSERT( stack_top != & task_stack->ts_first_block.sb_block[0] );
+ // fix up ts_top if we need to pop from previous block
+ if ( entries & TASK_STACK_INDEX_MASK == 0 )
+ {
+ kmp_stack_block_t *stack_block = (kmp_stack_block_t *) (stack_top) ;
+
+ stack_block = stack_block -> sb_prev;
+ stack_top = & stack_block -> sb_block[TASK_STACK_BLOCK_SIZE];
+ }
+
+ // finish bookkeeping
+ stack_top--;
+ entries--;
+
+ tied_task = * stack_top;
+
+ KMP_DEBUG_ASSERT( tied_task != NULL );
+ KMP_DEBUG_ASSERT( tied_task -> td_flags.tasktype == TASK_TIED );
+
+ KA_TRACE(threshold, ("__kmp_trace_task_stack(%s): gtid=%d, entry=%d, "
+ "stack_top=%p, tied_task=%p\n",
+ location, gtid, entries, stack_top, tied_task ) );
+ }
+ KMP_DEBUG_ASSERT( stack_top == & task_stack->ts_first_block.sb_block[0] );
+
+ KA_TRACE(threshold, ("__kmp_trace_task_stack(exit): location = %s, gtid = %d\n",
+ location, gtid ) );
+}
+
+//---------------------------------------------------------------------------
+// __kmp_init_task_stack: initialize the task stack for the first time
+// after a thread_data structure is created.
+// It should not be necessary to do this again (assuming the stack works).
+//
+// gtid: global thread identifier of calling thread
+// thread_data: thread data for task team thread containing stack
+
+static void
+__kmp_init_task_stack( kmp_int32 gtid, kmp_thread_data_t *thread_data )
+{
+ kmp_task_stack_t *task_stack = & thread_data->td.td_susp_tied_tasks;
+ kmp_stack_block_t *first_block;
+
+ // set up the first block of the stack
+ first_block = & task_stack -> ts_first_block;
+ task_stack -> ts_top = (kmp_taskdata_t **) first_block;
+ memset( (void *) first_block, '\0', TASK_STACK_BLOCK_SIZE * sizeof(kmp_taskdata_t *));
+
+ // initialize the stack to be empty
+ task_stack -> ts_entries = TASK_STACK_EMPTY;
+ first_block -> sb_next = NULL;
+ first_block -> sb_prev = NULL;
+}
+
+
+//---------------------------------------------------------------------------
+// __kmp_free_task_stack: free the task stack when thread_data is destroyed.
+//
+// gtid: global thread identifier for calling thread
+// thread_data: thread info for thread containing stack
+
+static void
+__kmp_free_task_stack( kmp_int32 gtid, kmp_thread_data_t *thread_data )
+{
+ kmp_task_stack_t *task_stack = & thread_data->td.td_susp_tied_tasks;
+ kmp_stack_block_t *stack_block = & task_stack -> ts_first_block;
+
+ KMP_DEBUG_ASSERT( task_stack -> ts_entries == TASK_STACK_EMPTY );
+ // free from the second block of the stack
+ while ( stack_block != NULL ) {
+ kmp_stack_block_t *next_block = (stack_block) ? stack_block -> sb_next : NULL;
+
+ stack_block -> sb_next = NULL;
+ stack_block -> sb_prev = NULL;
+ if (stack_block != & task_stack -> ts_first_block) {
+ __kmp_thread_free( thread, stack_block ); // free the block, if not the first
+ }
+ stack_block = next_block;
+ }
+ // initialize the stack to be empty
+ task_stack -> ts_entries = 0;
+ task_stack -> ts_top = NULL;
+}
+
+
+//---------------------------------------------------------------------------
+// __kmp_push_task_stack: Push the tied task onto the task stack.
+// Grow the stack if necessary by allocating another block.
+//
+// gtid: global thread identifier for calling thread
+// thread: thread info for thread containing stack
+// tied_task: the task to push on the stack
+
+static void
+__kmp_push_task_stack( kmp_int32 gtid, kmp_info_t *thread, kmp_taskdata_t * tied_task )
+{
+ // GEH - need to consider what to do if tt_threads_data not allocated yet
+ kmp_thread_data_t *thread_data = & thread -> th.th_task_team ->
+ tt.tt_threads_data[ __kmp_tid_from_gtid( gtid ) ];
+ kmp_task_stack_t *task_stack = & thread_data->td.td_susp_tied_tasks ;
+
+ if ( tied_task->td_flags.team_serial || tied_task->td_flags.tasking_ser ) {
+ return; // Don't push anything on stack if team or team tasks are serialized
+ }
+
+ KMP_DEBUG_ASSERT( tied_task -> td_flags.tasktype == TASK_TIED );
+ KMP_DEBUG_ASSERT( task_stack -> ts_top != NULL );
+
+ KA_TRACE(20, ("__kmp_push_task_stack(enter): GTID: %d; THREAD: %p; TASK: %p\n",
+ gtid, thread, tied_task ) );
+ // Store entry
+ * (task_stack -> ts_top) = tied_task;
+
+ // Do bookkeeping for next push
+ task_stack -> ts_top++;
+ task_stack -> ts_entries++;
+
+ if ( task_stack -> ts_entries & TASK_STACK_INDEX_MASK == 0 )
+ {
+ // Find beginning of this task block
+ kmp_stack_block_t *stack_block =
+ (kmp_stack_block_t *) (task_stack -> ts_top - TASK_STACK_BLOCK_SIZE);
+
+ // Check if we already have a block
+ if ( stack_block -> sb_next != NULL )
+ { // reset ts_top to beginning of next block
+ task_stack -> ts_top = & stack_block -> sb_next -> sb_block[0];
+ }
+ else
+ { // Alloc new block and link it up
+ kmp_stack_block_t *new_block = (kmp_stack_block_t *)
+ __kmp_thread_calloc(thread, sizeof(kmp_stack_block_t));
+
+ task_stack -> ts_top = & new_block -> sb_block[0];
+ stack_block -> sb_next = new_block;
+ new_block -> sb_prev = stack_block;
+ new_block -> sb_next = NULL;
+
+ KA_TRACE(30, ("__kmp_push_task_stack(): GTID: %d; TASK: %p; Alloc new block: %p\n",
+ gtid, tied_task, new_block ) );
+ }
+ }
+ KA_TRACE(20, ("__kmp_push_task_stack(exit): GTID: %d; TASK: %p\n", gtid, tied_task ) );
+}
+
+//---------------------------------------------------------------------------
+// __kmp_pop_task_stack: Pop the tied task from the task stack. Don't return
+// the task, just check to make sure it matches the ending task passed in.
+//
+// gtid: global thread identifier for the calling thread
+// thread: thread info structure containing stack
+// tied_task: the task popped off the stack
+// ending_task: the task that is ending (should match popped task)
+
+static void
+__kmp_pop_task_stack( kmp_int32 gtid, kmp_info_t *thread, kmp_taskdata_t *ending_task )
+{
+ // GEH - need to consider what to do if tt_threads_data not allocated yet
+ kmp_thread_data_t *thread_data = & thread -> th.th_task_team -> tt_threads_data[ __kmp_tid_from_gtid( gtid ) ];
+ kmp_task_stack_t *task_stack = & thread_data->td.td_susp_tied_tasks ;
+ kmp_taskdata_t *tied_task;
+
+ if ( ending_task->td_flags.team_serial || ending_task->td_flags.tasking_ser ) {
+ return; // Don't pop anything from stack if team or team tasks are serialized
+ }
+
+ KMP_DEBUG_ASSERT( task_stack -> ts_top != NULL );
+ KMP_DEBUG_ASSERT( task_stack -> ts_entries > 0 );
+
+ KA_TRACE(20, ("__kmp_pop_task_stack(enter): GTID: %d; THREAD: %p\n", gtid, thread ) );
+
+ // fix up ts_top if we need to pop from previous block
+ if ( task_stack -> ts_entries & TASK_STACK_INDEX_MASK == 0 )
+ {
+ kmp_stack_block_t *stack_block =
+ (kmp_stack_block_t *) (task_stack -> ts_top) ;
+
+ stack_block = stack_block -> sb_prev;
+ task_stack -> ts_top = & stack_block -> sb_block[TASK_STACK_BLOCK_SIZE];
+ }
+
+ // finish bookkeeping
+ task_stack -> ts_top--;
+ task_stack -> ts_entries--;
+
+ tied_task = * (task_stack -> ts_top );
+
+ KMP_DEBUG_ASSERT( tied_task != NULL );
+ KMP_DEBUG_ASSERT( tied_task -> td_flags.tasktype == TASK_TIED );
+ KMP_DEBUG_ASSERT( tied_task == ending_task ); // If we built the stack correctly
+
+ KA_TRACE(20, ("__kmp_pop_task_stack(exit): GTID: %d; TASK: %p\n", gtid, tied_task ) );
+ return;
+}
+#endif /* BUILD_TIED_TASK_STACK */
+
+//---------------------------------------------------
+// __kmp_push_task: Add a task to the thread's deque
+
+static kmp_int32
+__kmp_push_task(kmp_int32 gtid, kmp_task_t * task )
+{
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+ kmp_int32 tid = __kmp_tid_from_gtid( gtid );
+ kmp_thread_data_t * thread_data;
+
+ KA_TRACE(20, ("__kmp_push_task: T#%d trying to push task %p.\n", gtid, taskdata ) );
+
+ if ( taskdata->td_flags.tiedness == TASK_UNTIED ) {
+ // untied task needs to increment counter so that the task structure is not freed prematurely
+ kmp_int32 counter = 1 + KMP_TEST_THEN_INC32(&taskdata->td_untied_count);
+ KA_TRACE(20, ( "__kmp_push_task: T#%d untied_count (%d) incremented for task %p\n",
+ gtid, counter, taskdata ) );
+ }
+
+ // The first check avoids building task_team thread data if serialized
+ if ( taskdata->td_flags.task_serial ) {
+ KA_TRACE(20, ( "__kmp_push_task: T#%d team serialized; returning TASK_NOT_PUSHED for task %p\n",
+ gtid, taskdata ) );
+ return TASK_NOT_PUSHED;
+ }
+
+ // Now that serialized tasks have returned, we can assume that we are not in immediate exec mode
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+ if ( ! KMP_TASKING_ENABLED(task_team) ) {
+ __kmp_enable_tasking( task_team, thread );
+ }
+ KMP_DEBUG_ASSERT( TCR_4(task_team -> tt.tt_found_tasks) == TRUE );
+ KMP_DEBUG_ASSERT( TCR_PTR(task_team -> tt.tt_threads_data) != NULL );
+
+ // Find tasking deque specific to encountering thread
+ thread_data = & task_team -> tt.tt_threads_data[ tid ];
+
+ // No lock needed since only owner can allocate
+ if (thread_data -> td.td_deque == NULL ) {
+ __kmp_alloc_task_deque( thread, thread_data );
+ }
+
+ // Check if deque is full
+ if ( TCR_4(thread_data -> td.td_deque_ntasks) >= TASK_DEQUE_SIZE(thread_data->td) )
+ {
+ KA_TRACE(20, ( "__kmp_push_task: T#%d deque is full; returning TASK_NOT_PUSHED for task %p\n",
+ gtid, taskdata ) );
+ return TASK_NOT_PUSHED;
+ }
+
+ // Lock the deque for the task push operation
+ __kmp_acquire_bootstrap_lock( & thread_data -> td.td_deque_lock );
+
+#if OMP_45_ENABLED
+ // Need to recheck as we can get a proxy task from a thread outside of OpenMP
+ if ( TCR_4(thread_data -> td.td_deque_ntasks) >= TASK_DEQUE_SIZE(thread_data->td) )
+ {
+ __kmp_release_bootstrap_lock( & thread_data -> td.td_deque_lock );
+ KA_TRACE(20, ( "__kmp_push_task: T#%d deque is full on 2nd check; returning TASK_NOT_PUSHED for task %p\n",
+ gtid, taskdata ) );
+ return TASK_NOT_PUSHED;
+ }
+#else
+ // Must have room since no thread can add tasks but calling thread
+ KMP_DEBUG_ASSERT( TCR_4(thread_data -> td.td_deque_ntasks) < TASK_DEQUE_SIZE(thread_data->td) );
+#endif
+
+ thread_data -> td.td_deque[ thread_data -> td.td_deque_tail ] = taskdata; // Push taskdata
+ // Wrap index.
+ thread_data -> td.td_deque_tail = ( thread_data -> td.td_deque_tail + 1 ) & TASK_DEQUE_MASK(thread_data->td);
+ TCW_4(thread_data -> td.td_deque_ntasks, TCR_4(thread_data -> td.td_deque_ntasks) + 1); // Adjust task count
+
+ __kmp_release_bootstrap_lock( & thread_data -> td.td_deque_lock );
+
+ KA_TRACE(20, ("__kmp_push_task: T#%d returning TASK_SUCCESSFULLY_PUSHED: "
+ "task=%p ntasks=%d head=%u tail=%u\n",
+ gtid, taskdata, thread_data->td.td_deque_ntasks,
+ thread_data->td.td_deque_tail, thread_data->td.td_deque_head) );
+
+ return TASK_SUCCESSFULLY_PUSHED;
+}
+
+
+//-----------------------------------------------------------------------------------------
+// __kmp_pop_current_task_from_thread: set up current task from called thread when team ends
+// this_thr: thread structure to set current_task in.
+
+void
+__kmp_pop_current_task_from_thread( kmp_info_t *this_thr )
+{
+ KF_TRACE( 10, ("__kmp_pop_current_task_from_thread(enter): T#%d this_thread=%p, curtask=%p, "
+ "curtask_parent=%p\n",
+ 0, this_thr, this_thr -> th.th_current_task,
+ this_thr -> th.th_current_task -> td_parent ) );
+
+ this_thr -> th.th_current_task = this_thr -> th.th_current_task -> td_parent;
+
+ KF_TRACE( 10, ("__kmp_pop_current_task_from_thread(exit): T#%d this_thread=%p, curtask=%p, "
+ "curtask_parent=%p\n",
+ 0, this_thr, this_thr -> th.th_current_task,
+ this_thr -> th.th_current_task -> td_parent ) );
+}
+
+
+//---------------------------------------------------------------------------------------
+// __kmp_push_current_task_to_thread: set up current task in called thread for a new team
+// this_thr: thread structure to set up
+// team: team for implicit task data
+// tid: thread within team to set up
+
+void
+__kmp_push_current_task_to_thread( kmp_info_t *this_thr, kmp_team_t *team, int tid )
+{
+ // current task of the thread is a parent of the new just created implicit tasks of new team
+ KF_TRACE( 10, ( "__kmp_push_current_task_to_thread(enter): T#%d this_thread=%p curtask=%p "
+ "parent_task=%p\n",
+ tid, this_thr, this_thr->th.th_current_task,
+ team->t.t_implicit_task_taskdata[tid].td_parent ) );
+
+ KMP_DEBUG_ASSERT (this_thr != NULL);
+
+ if( tid == 0 ) {
+ if( this_thr->th.th_current_task != & team -> t.t_implicit_task_taskdata[ 0 ] ) {
+ team -> t.t_implicit_task_taskdata[ 0 ].td_parent = this_thr->th.th_current_task;
+ this_thr->th.th_current_task = & team -> t.t_implicit_task_taskdata[ 0 ];
+ }
+ } else {
+ team -> t.t_implicit_task_taskdata[ tid ].td_parent = team -> t.t_implicit_task_taskdata[ 0 ].td_parent;
+ this_thr->th.th_current_task = & team -> t.t_implicit_task_taskdata[ tid ];
+ }
+
+ KF_TRACE( 10, ( "__kmp_push_current_task_to_thread(exit): T#%d this_thread=%p curtask=%p "
+ "parent_task=%p\n",
+ tid, this_thr, this_thr->th.th_current_task,
+ team->t.t_implicit_task_taskdata[tid].td_parent ) );
+}
+
+
+//----------------------------------------------------------------------
+// __kmp_task_start: bookkeeping for a task starting execution
+// GTID: global thread id of calling thread
+// task: task starting execution
+// current_task: task suspending
+
+static void
+__kmp_task_start( kmp_int32 gtid, kmp_task_t * task, kmp_taskdata_t * current_task )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+
+ KA_TRACE(10, ("__kmp_task_start(enter): T#%d starting task %p: current_task=%p\n",
+ gtid, taskdata, current_task) );
+
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.tasktype == TASK_EXPLICIT );
+
+ // mark currently executing task as suspended
+ // TODO: GEH - make sure root team implicit task is initialized properly.
+ // KMP_DEBUG_ASSERT( current_task -> td_flags.executing == 1 );
+ current_task -> td_flags.executing = 0;
+
+ // Add task to stack if tied
+#ifdef BUILD_TIED_TASK_STACK
+ if ( taskdata -> td_flags.tiedness == TASK_TIED )
+ {
+ __kmp_push_task_stack( gtid, thread, taskdata );
+ }
+#endif /* BUILD_TIED_TASK_STACK */
+
+ // mark starting task as executing and as current task
+ thread -> th.th_current_task = taskdata;
+
+ KMP_DEBUG_ASSERT( taskdata->td_flags.started == 0 || taskdata->td_flags.tiedness == TASK_UNTIED );
+ KMP_DEBUG_ASSERT( taskdata->td_flags.executing == 0 || taskdata->td_flags.tiedness == TASK_UNTIED );
+ taskdata -> td_flags.started = 1;
+ taskdata -> td_flags.executing = 1;
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.complete == 0 );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.freed == 0 );
+
+ // GEH TODO: shouldn't we pass some sort of location identifier here?
+ // APT: yes, we will pass location here.
+ // need to store current thread state (in a thread or taskdata structure)
+ // before setting work_state, otherwise wrong state is set after end of task
+
+ KA_TRACE(10, ("__kmp_task_start(exit): T#%d task=%p\n",
+ gtid, taskdata ) );
+
+#if OMPT_SUPPORT
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_task_begin)) {
+ kmp_taskdata_t *parent = taskdata->td_parent;
+ ompt_callbacks.ompt_callback(ompt_event_task_begin)(
+ parent ? parent->ompt_task_info.task_id : ompt_task_id_none,
+ parent ? &(parent->ompt_task_info.frame) : NULL,
+ taskdata->ompt_task_info.task_id,
+ taskdata->ompt_task_info.function);
+ }
+#endif
+#if OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE
+ /* OMPT emit all dependences if requested by the tool */
+ if (ompt_enabled && taskdata->ompt_task_info.ndeps > 0 &&
+ ompt_callbacks.ompt_callback(ompt_event_task_dependences))
+ {
+ ompt_callbacks.ompt_callback(ompt_event_task_dependences)(
+ taskdata->ompt_task_info.task_id,
+ taskdata->ompt_task_info.deps,
+ taskdata->ompt_task_info.ndeps
+ );
+ /* We can now free the allocated memory for the dependencies */
+ KMP_OMPT_DEPS_FREE (thread, taskdata->ompt_task_info.deps);
+ taskdata->ompt_task_info.deps = NULL;
+ taskdata->ompt_task_info.ndeps = 0;
+ }
+#endif /* OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE */
+
+ return;
+}
+
+
+//----------------------------------------------------------------------
+// __kmpc_omp_task_begin_if0: report that a given serialized task has started execution
+// loc_ref: source location information; points to beginning of task block.
+// gtid: global thread number.
+// task: task thunk for the started task.
+
+void
+__kmpc_omp_task_begin_if0( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * task )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_taskdata_t * current_task = __kmp_threads[ gtid ] -> th.th_current_task;
+
+ KA_TRACE(10, ("__kmpc_omp_task_begin_if0(enter): T#%d loc=%p task=%p current_task=%p\n",
+ gtid, loc_ref, taskdata, current_task ) );
+
+ if ( taskdata->td_flags.tiedness == TASK_UNTIED ) {
+ // untied task needs to increment counter so that the task structure is not freed prematurely
+ kmp_int32 counter = 1 + KMP_TEST_THEN_INC32(&taskdata->td_untied_count);
+ KA_TRACE(20, ( "__kmpc_omp_task_begin_if0: T#%d untied_count (%d) incremented for task %p\n",
+ gtid, counter, taskdata ) );
+ }
+
+ taskdata -> td_flags.task_serial = 1; // Execute this task immediately, not deferred.
+ __kmp_task_start( gtid, task, current_task );
+
+ KA_TRACE(10, ("__kmpc_omp_task_begin_if0(exit): T#%d loc=%p task=%p,\n",
+ gtid, loc_ref, taskdata ) );
+
+ return;
+}
+
+#ifdef TASK_UNUSED
+//----------------------------------------------------------------------
+// __kmpc_omp_task_begin: report that a given task has started execution
+// NEVER GENERATED BY COMPILER, DEPRECATED!!!
+
+void
+__kmpc_omp_task_begin( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * task )
+{
+ kmp_taskdata_t * current_task = __kmp_threads[ gtid ] -> th.th_current_task;
+
+ KA_TRACE(10, ("__kmpc_omp_task_begin(enter): T#%d loc=%p task=%p current_task=%p\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task), current_task ) );
+
+ __kmp_task_start( gtid, task, current_task );
+
+ KA_TRACE(10, ("__kmpc_omp_task_begin(exit): T#%d loc=%p task=%p,\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task) ) );
+
+ return;
+}
+#endif // TASK_UNUSED
+
+
+//-------------------------------------------------------------------------------------
+// __kmp_free_task: free the current task space and the space for shareds
+// gtid: Global thread ID of calling thread
+// taskdata: task to free
+// thread: thread data structure of caller
+
+static void
+__kmp_free_task( kmp_int32 gtid, kmp_taskdata_t * taskdata, kmp_info_t * thread )
+{
+ KA_TRACE(30, ("__kmp_free_task: T#%d freeing data from task %p\n",
+ gtid, taskdata) );
+
+ // Check to make sure all flags and counters have the correct values
+ KMP_DEBUG_ASSERT( taskdata->td_flags.tasktype == TASK_EXPLICIT );
+ KMP_DEBUG_ASSERT( taskdata->td_flags.executing == 0 );
+ KMP_DEBUG_ASSERT( taskdata->td_flags.complete == 1 );
+ KMP_DEBUG_ASSERT( taskdata->td_flags.freed == 0 );
+ KMP_DEBUG_ASSERT( TCR_4(taskdata->td_allocated_child_tasks) == 0 || taskdata->td_flags.task_serial == 1);
+ KMP_DEBUG_ASSERT( TCR_4(taskdata->td_incomplete_child_tasks) == 0 );
+
+ taskdata->td_flags.freed = 1;
+ // deallocate the taskdata and shared variable blocks associated with this task
+ #if USE_FAST_MEMORY
+ __kmp_fast_free( thread, taskdata );
+ #else /* ! USE_FAST_MEMORY */
+ __kmp_thread_free( thread, taskdata );
+ #endif
+
+ KA_TRACE(20, ("__kmp_free_task: T#%d freed task %p\n",
+ gtid, taskdata) );
+}
+
+//-------------------------------------------------------------------------------------
+// __kmp_free_task_and_ancestors: free the current task and ancestors without children
+//
+// gtid: Global thread ID of calling thread
+// taskdata: task to free
+// thread: thread data structure of caller
+
+static void
+__kmp_free_task_and_ancestors( kmp_int32 gtid, kmp_taskdata_t * taskdata, kmp_info_t * thread )
+{
+ kmp_int32 children = 0;
+ kmp_int32 team_or_tasking_serialized = taskdata -> td_flags.team_serial || taskdata -> td_flags.tasking_ser;
+
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.tasktype == TASK_EXPLICIT );
+
+ if ( !team_or_tasking_serialized ) {
+ children = KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata -> td_allocated_child_tasks) ) - 1;
+ KMP_DEBUG_ASSERT( children >= 0 );
+ }
+
+ // Now, go up the ancestor tree to see if any ancestors can now be freed.
+ while ( children == 0 )
+ {
+ kmp_taskdata_t * parent_taskdata = taskdata -> td_parent;
+
+ KA_TRACE(20, ("__kmp_free_task_and_ancestors(enter): T#%d task %p complete "
+ "and freeing itself\n", gtid, taskdata) );
+
+ // --- Deallocate my ancestor task ---
+ __kmp_free_task( gtid, taskdata, thread );
+
+ taskdata = parent_taskdata;
+
+ // Stop checking ancestors at implicit task or if tasking serialized
+ // instead of walking up ancestor tree to avoid premature deallocation of ancestors.
+ if ( team_or_tasking_serialized || taskdata -> td_flags.tasktype == TASK_IMPLICIT )
+ return;
+
+ if ( !team_or_tasking_serialized ) {
+ // Predecrement simulated by "- 1" calculation
+ children = KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata -> td_allocated_child_tasks) ) - 1;
+ KMP_DEBUG_ASSERT( children >= 0 );
+ }
+ }
+
+ KA_TRACE(20, ("__kmp_free_task_and_ancestors(exit): T#%d task %p has %d children; "
+ "not freeing it yet\n", gtid, taskdata, children) );
+}
+
+//---------------------------------------------------------------------
+// __kmp_task_finish: bookkeeping to do when a task finishes execution
+// gtid: global thread ID for calling thread
+// task: task to be finished
+// resumed_task: task to be resumed. (may be NULL if task is serialized)
+
+static void
+__kmp_task_finish( kmp_int32 gtid, kmp_task_t *task, kmp_taskdata_t *resumed_task )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+ kmp_int32 children = 0;
+
+#if OMPT_SUPPORT
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_task_end)) {
+ kmp_taskdata_t *parent = taskdata->td_parent;
+ ompt_callbacks.ompt_callback(ompt_event_task_end)(
+ taskdata->ompt_task_info.task_id);
+ }
+#endif
+
+ KA_TRACE(10, ("__kmp_task_finish(enter): T#%d finishing task %p and resuming task %p\n",
+ gtid, taskdata, resumed_task) );
+
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.tasktype == TASK_EXPLICIT );
+
+ // Pop task from stack if tied
+#ifdef BUILD_TIED_TASK_STACK
+ if ( taskdata -> td_flags.tiedness == TASK_TIED )
+ {
+ __kmp_pop_task_stack( gtid, thread, taskdata );
+ }
+#endif /* BUILD_TIED_TASK_STACK */
+
+ if ( taskdata->td_flags.tiedness == TASK_UNTIED ) {
+ // untied task needs to check the counter so that the task structure is not freed prematurely
+ kmp_int32 counter = KMP_TEST_THEN_DEC32(&taskdata->td_untied_count) - 1;
+ KA_TRACE(20, ( "__kmp_task_finish: T#%d untied_count (%d) decremented for task %p\n",
+ gtid, counter, taskdata ) );
+ if ( counter > 0 ) {
+ // untied task is not done, to be continued possibly by other thread, do not free it now
+ if (resumed_task == NULL) {
+ KMP_DEBUG_ASSERT( taskdata->td_flags.task_serial );
+ resumed_task = taskdata->td_parent; // In a serialized task, the resumed task is the parent
+ }
+ thread->th.th_current_task = resumed_task; // restore current_task
+ resumed_task->td_flags.executing = 1; // resume previous task
+ KA_TRACE(10, ("__kmp_task_finish(exit): T#%d partially done task %p, resuming task %p\n",
+ gtid, taskdata, resumed_task) );
+ return;
+ }
+ }
+
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.complete == 0 );
+ taskdata -> td_flags.complete = 1; // mark the task as completed
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.started == 1 );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.freed == 0 );
+
+ // Only need to keep track of count if team parallel and tasking not serialized
+ if ( !( taskdata -> td_flags.team_serial || taskdata -> td_flags.tasking_ser ) ) {
+ // Predecrement simulated by "- 1" calculation
+ children = KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata -> td_parent -> td_incomplete_child_tasks) ) - 1;
+ KMP_DEBUG_ASSERT( children >= 0 );
+#if OMP_40_ENABLED
+ if ( taskdata->td_taskgroup )
+ KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata->td_taskgroup->count) );
+ __kmp_release_deps(gtid,taskdata);
+#endif
+ }
+
+ // td_flags.executing must be marked as 0 after __kmp_release_deps has been called
+ // Othertwise, if a task is executed immediately from the release_deps code
+ // the flag will be reset to 1 again by this same function
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.executing == 1 );
+ taskdata -> td_flags.executing = 0; // suspend the finishing task
+
+ KA_TRACE(20, ("__kmp_task_finish: T#%d finished task %p, %d incomplete children\n",
+ gtid, taskdata, children) );
+
+#if OMP_40_ENABLED
+ /* If the tasks' destructor thunk flag has been set, we need to invoke the
+ destructor thunk that has been generated by the compiler.
+ The code is placed here, since at this point other tasks might have been released
+ hence overlapping the destructor invokations with some other work in the
+ released tasks. The OpenMP spec is not specific on when the destructors are
+ invoked, so we should be free to choose.
+ */
+ if (taskdata->td_flags.destructors_thunk) {
+ kmp_routine_entry_t destr_thunk = task->data1.destructors;
+ KMP_ASSERT(destr_thunk);
+ destr_thunk(gtid, task);
+ }
+#endif // OMP_40_ENABLED
+
+ // bookkeeping for resuming task:
+ // GEH - note tasking_ser => task_serial
+ KMP_DEBUG_ASSERT( (taskdata->td_flags.tasking_ser || taskdata->td_flags.task_serial) ==
+ taskdata->td_flags.task_serial);
+ if ( taskdata->td_flags.task_serial )
+ {
+ if (resumed_task == NULL) {
+ resumed_task = taskdata->td_parent; // In a serialized task, the resumed task is the parent
+ }
+ else {
+ // verify resumed task passed in points to parent
+ KMP_DEBUG_ASSERT( resumed_task == taskdata->td_parent );
+ }
+ }
+ else {
+ KMP_DEBUG_ASSERT( resumed_task != NULL ); // verify that resumed task is passed as arguemnt
+ }
+
+ // Free this task and then ancestor tasks if they have no children.
+ // Restore th_current_task first as suggested by John:
+ // johnmc: if an asynchronous inquiry peers into the runtime system
+ // it doesn't see the freed task as the current task.
+ thread->th.th_current_task = resumed_task;
+ __kmp_free_task_and_ancestors(gtid, taskdata, thread);
+
+ // TODO: GEH - make sure root team implicit task is initialized properly.
+ // KMP_DEBUG_ASSERT( resumed_task->td_flags.executing == 0 );
+ resumed_task->td_flags.executing = 1; // resume previous task
+
+ KA_TRACE(10, ("__kmp_task_finish(exit): T#%d finished task %p, resuming task %p\n",
+ gtid, taskdata, resumed_task) );
+
+ return;
+}
+
+//---------------------------------------------------------------------
+// __kmpc_omp_task_complete_if0: report that a task has completed execution
+// loc_ref: source location information; points to end of task block.
+// gtid: global thread number.
+// task: task thunk for the completed task.
+
+void
+__kmpc_omp_task_complete_if0( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task )
+{
+ KA_TRACE(10, ("__kmpc_omp_task_complete_if0(enter): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task) ) );
+
+ __kmp_task_finish( gtid, task, NULL ); // this routine will provide task to resume
+
+ KA_TRACE(10, ("__kmpc_omp_task_complete_if0(exit): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task) ) );
+
+ return;
+}
+
+#ifdef TASK_UNUSED
+//---------------------------------------------------------------------
+// __kmpc_omp_task_complete: report that a task has completed execution
+// NEVER GENERATED BY COMPILER, DEPRECATED!!!
+
+void
+__kmpc_omp_task_complete( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task )
+{
+ KA_TRACE(10, ("__kmpc_omp_task_complete(enter): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task) ) );
+
+ __kmp_task_finish( gtid, task, NULL ); // Not sure how to find task to resume
+
+ KA_TRACE(10, ("__kmpc_omp_task_complete(exit): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, KMP_TASK_TO_TASKDATA(task) ) );
+ return;
+}
+#endif // TASK_UNUSED
+
+
+#if OMPT_SUPPORT
+//----------------------------------------------------------------------------------------------------
+// __kmp_task_init_ompt:
+// Initialize OMPT fields maintained by a task. This will only be called after
+// ompt_tool, so we already know whether ompt is enabled or not.
+
+static inline void
+__kmp_task_init_ompt( kmp_taskdata_t * task, int tid, void * function )
+{
+ if (ompt_enabled) {
+ task->ompt_task_info.task_id = __ompt_task_id_new(tid);
+ task->ompt_task_info.function = function;
+ task->ompt_task_info.frame.exit_runtime_frame = NULL;
+ task->ompt_task_info.frame.reenter_runtime_frame = NULL;
+#if OMP_40_ENABLED
+ task->ompt_task_info.ndeps = 0;
+ task->ompt_task_info.deps = NULL;
+#endif /* OMP_40_ENABLED */
+ }
+}
+#endif
+
+
+//----------------------------------------------------------------------------------------------------
+// __kmp_init_implicit_task: Initialize the appropriate fields in the implicit task for a given thread
+//
+// loc_ref: reference to source location of parallel region
+// this_thr: thread data structure corresponding to implicit task
+// team: team for this_thr
+// tid: thread id of given thread within team
+// set_curr_task: TRUE if need to push current task to thread
+// NOTE: Routine does not set up the implicit task ICVS. This is assumed to have already been done elsewhere.
+// TODO: Get better loc_ref. Value passed in may be NULL
+
+void
+__kmp_init_implicit_task( ident_t *loc_ref, kmp_info_t *this_thr, kmp_team_t *team, int tid, int set_curr_task )
+{
+ kmp_taskdata_t * task = & team->t.t_implicit_task_taskdata[ tid ];
+
+ KF_TRACE(10, ("__kmp_init_implicit_task(enter): T#:%d team=%p task=%p, reinit=%s\n",
+ tid, team, task, set_curr_task ? "TRUE" : "FALSE" ) );
+
+ task->td_task_id = KMP_GEN_TASK_ID();
+ task->td_team = team;
+// task->td_parent = NULL; // fix for CQ230101 (broken parent task info in debugger)
+ task->td_ident = loc_ref;
+ task->td_taskwait_ident = NULL;
+ task->td_taskwait_counter = 0;
+ task->td_taskwait_thread = 0;
+
+ task->td_flags.tiedness = TASK_TIED;
+ task->td_flags.tasktype = TASK_IMPLICIT;
+#if OMP_45_ENABLED
+ task->td_flags.proxy = TASK_FULL;
+#endif
+
+ // All implicit tasks are executed immediately, not deferred
+ task->td_flags.task_serial = 1;
+ task->td_flags.tasking_ser = ( __kmp_tasking_mode == tskm_immediate_exec );
+ task->td_flags.team_serial = ( team->t.t_serialized ) ? 1 : 0;
+
+ task->td_flags.started = 1;
+ task->td_flags.executing = 1;
+ task->td_flags.complete = 0;
+ task->td_flags.freed = 0;
+
+#if OMP_40_ENABLED
+ task->td_dephash = NULL;
+ task->td_depnode = NULL;
+#endif
+
+ if (set_curr_task) { // only do this initialization the first time a thread is created
+ task->td_incomplete_child_tasks = 0;
+ task->td_allocated_child_tasks = 0; // Not used because do not need to deallocate implicit task
+#if OMP_40_ENABLED
+ task->td_taskgroup = NULL; // An implicit task does not have taskgroup
+#endif
+ __kmp_push_current_task_to_thread( this_thr, team, tid );
+ } else {
+ KMP_DEBUG_ASSERT(task->td_incomplete_child_tasks == 0);
+ KMP_DEBUG_ASSERT(task->td_allocated_child_tasks == 0);
+ }
+
+#if OMPT_SUPPORT
+ __kmp_task_init_ompt(task, tid, NULL);
+#endif
+
+ KF_TRACE(10, ("__kmp_init_implicit_task(exit): T#:%d team=%p task=%p\n",
+ tid, team, task ) );
+}
+
+// Round up a size to a power of two specified by val
+// Used to insert padding between structures co-allocated using a single malloc() call
+static size_t
+__kmp_round_up_to_val( size_t size, size_t val ) {
+ if ( size & ( val - 1 ) ) {
+ size &= ~ ( val - 1 );
+ if ( size <= KMP_SIZE_T_MAX - val ) {
+ size += val; // Round up if there is no overflow.
+ }; // if
+ }; // if
+ return size;
+} // __kmp_round_up_to_va
+
+
+//---------------------------------------------------------------------------------
+// __kmp_task_alloc: Allocate the taskdata and task data structures for a task
+//
+// loc_ref: source location information
+// gtid: global thread number.
+// flags: include tiedness & task type (explicit vs. implicit) of the ''new'' task encountered.
+// Converted from kmp_int32 to kmp_tasking_flags_t in routine.
+// sizeof_kmp_task_t: Size in bytes of kmp_task_t data structure including private vars accessed in task.
+// sizeof_shareds: Size in bytes of array of pointers to shared vars accessed in task.
+// task_entry: Pointer to task code entry point generated by compiler.
+// returns: a pointer to the allocated kmp_task_t structure (task).
+
+kmp_task_t *
+__kmp_task_alloc( ident_t *loc_ref, kmp_int32 gtid, kmp_tasking_flags_t *flags,
+ size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+ kmp_routine_entry_t task_entry )
+{
+ kmp_task_t *task;
+ kmp_taskdata_t *taskdata;
+ kmp_info_t *thread = __kmp_threads[ gtid ];
+ kmp_team_t *team = thread->th.th_team;
+ kmp_taskdata_t *parent_task = thread->th.th_current_task;
+ size_t shareds_offset;
+
+ KA_TRACE(10, ("__kmp_task_alloc(enter): T#%d loc=%p, flags=(0x%x) "
+ "sizeof_task=%ld sizeof_shared=%ld entry=%p\n",
+ gtid, loc_ref, *((kmp_int32 *)flags), sizeof_kmp_task_t,
+ sizeof_shareds, task_entry) );
+
+ if ( parent_task->td_flags.final ) {
+ if (flags->merged_if0) {
+ }
+ flags->final = 1;
+ }
+
+#if OMP_45_ENABLED
+ if ( flags->proxy == TASK_PROXY ) {
+ flags->tiedness = TASK_UNTIED;
+ flags->merged_if0 = 1;
+
+ /* are we running in a sequential parallel or tskm_immediate_exec... we need tasking support enabled */
+ if ( (thread->th.th_task_team) == NULL ) {
+ /* This should only happen if the team is serialized
+ setup a task team and propagate it to the thread
+ */
+ KMP_DEBUG_ASSERT(team->t.t_serialized);
+ KA_TRACE(30,("T#%d creating task team in __kmp_task_alloc for proxy task\n", gtid));
+ __kmp_task_team_setup(thread,team,1); // 1 indicates setup the current team regardless of nthreads
+ thread->th.th_task_team = team->t.t_task_team[thread->th.th_task_state];
+ }
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+
+ /* tasking must be enabled now as the task might not be pushed */
+ if ( !KMP_TASKING_ENABLED( task_team ) ) {
+ KA_TRACE(30,("T#%d enabling tasking in __kmp_task_alloc for proxy task\n", gtid));
+ __kmp_enable_tasking( task_team, thread );
+ kmp_int32 tid = thread->th.th_info.ds.ds_tid;
+ kmp_thread_data_t * thread_data = & task_team -> tt.tt_threads_data[ tid ];
+ // No lock needed since only owner can allocate
+ if (thread_data -> td.td_deque == NULL ) {
+ __kmp_alloc_task_deque( thread, thread_data );
+ }
+ }
+
+ if ( task_team->tt.tt_found_proxy_tasks == FALSE )
+ TCW_4(task_team -> tt.tt_found_proxy_tasks, TRUE);
+ }
+#endif
+
+ // Calculate shared structure offset including padding after kmp_task_t struct
+ // to align pointers in shared struct
+ shareds_offset = sizeof( kmp_taskdata_t ) + sizeof_kmp_task_t;
+ shareds_offset = __kmp_round_up_to_val( shareds_offset, sizeof( void * ));
+
+ // Allocate a kmp_taskdata_t block and a kmp_task_t block.
+ KA_TRACE(30, ("__kmp_task_alloc: T#%d First malloc size: %ld\n",
+ gtid, shareds_offset) );
+ KA_TRACE(30, ("__kmp_task_alloc: T#%d Second malloc size: %ld\n",
+ gtid, sizeof_shareds) );
+
+ // Avoid double allocation here by combining shareds with taskdata
+ #if USE_FAST_MEMORY
+ taskdata = (kmp_taskdata_t *) __kmp_fast_allocate( thread, shareds_offset + sizeof_shareds );
+ #else /* ! USE_FAST_MEMORY */
+ taskdata = (kmp_taskdata_t *) __kmp_thread_malloc( thread, shareds_offset + sizeof_shareds );
+ #endif /* USE_FAST_MEMORY */
+
+ task = KMP_TASKDATA_TO_TASK(taskdata);
+
+ // Make sure task & taskdata are aligned appropriately
+#if KMP_ARCH_X86 || KMP_ARCH_PPC64 || !KMP_HAVE_QUAD
+ KMP_DEBUG_ASSERT( ( ((kmp_uintptr_t)taskdata) & (sizeof(double)-1) ) == 0 );
+ KMP_DEBUG_ASSERT( ( ((kmp_uintptr_t)task) & (sizeof(double)-1) ) == 0 );
+#else
+ KMP_DEBUG_ASSERT( ( ((kmp_uintptr_t)taskdata) & (sizeof(_Quad)-1) ) == 0 );
+ KMP_DEBUG_ASSERT( ( ((kmp_uintptr_t)task) & (sizeof(_Quad)-1) ) == 0 );
+#endif
+ if (sizeof_shareds > 0) {
+ // Avoid double allocation here by combining shareds with taskdata
+ task->shareds = & ((char *) taskdata)[ shareds_offset ];
+ // Make sure shareds struct is aligned to pointer size
+ KMP_DEBUG_ASSERT( ( ((kmp_uintptr_t)task->shareds) & (sizeof(void *)-1) ) == 0 );
+ } else {
+ task->shareds = NULL;
+ }
+ task->routine = task_entry;
+ task->part_id = 0; // AC: Always start with 0 part id
+
+ taskdata->td_task_id = KMP_GEN_TASK_ID();
+ taskdata->td_team = team;
+ taskdata->td_alloc_thread = thread;
+ taskdata->td_parent = parent_task;
+ taskdata->td_level = parent_task->td_level + 1; // increment nesting level
+ taskdata->td_untied_count = 0;
+ taskdata->td_ident = loc_ref;
+ taskdata->td_taskwait_ident = NULL;
+ taskdata->td_taskwait_counter = 0;
+ taskdata->td_taskwait_thread = 0;
+ KMP_DEBUG_ASSERT( taskdata->td_parent != NULL );
+#if OMP_45_ENABLED
+ // avoid copying icvs for proxy tasks
+ if ( flags->proxy == TASK_FULL )
+#endif
+ copy_icvs( &taskdata->td_icvs, &taskdata->td_parent->td_icvs );
+
+ taskdata->td_flags.tiedness = flags->tiedness;
+ taskdata->td_flags.final = flags->final;
+ taskdata->td_flags.merged_if0 = flags->merged_if0;
+#if OMP_40_ENABLED
+ taskdata->td_flags.destructors_thunk = flags->destructors_thunk;
+#endif // OMP_40_ENABLED
+#if OMP_45_ENABLED
+ taskdata->td_flags.proxy = flags->proxy;
+ taskdata->td_task_team = thread->th.th_task_team;
+ taskdata->td_size_alloc = shareds_offset + sizeof_shareds;
+#endif
+ taskdata->td_flags.tasktype = TASK_EXPLICIT;
+
+ // GEH - TODO: fix this to copy parent task's value of tasking_ser flag
+ taskdata->td_flags.tasking_ser = ( __kmp_tasking_mode == tskm_immediate_exec );
+
+ // GEH - TODO: fix this to copy parent task's value of team_serial flag
+ taskdata->td_flags.team_serial = ( team->t.t_serialized ) ? 1 : 0;
+
+ // GEH - Note we serialize the task if the team is serialized to make sure implicit parallel region
+ // tasks are not left until program termination to execute. Also, it helps locality to execute
+ // immediately.
+ taskdata->td_flags.task_serial = ( parent_task->td_flags.final
+ || taskdata->td_flags.team_serial || taskdata->td_flags.tasking_ser );
+
+ taskdata->td_flags.started = 0;
+ taskdata->td_flags.executing = 0;
+ taskdata->td_flags.complete = 0;
+ taskdata->td_flags.freed = 0;
+
+ taskdata->td_flags.native = flags->native;
+
+ taskdata->td_incomplete_child_tasks = 0;
+ taskdata->td_allocated_child_tasks = 1; // start at one because counts current task and children
+#if OMP_40_ENABLED
+ taskdata->td_taskgroup = parent_task->td_taskgroup; // task inherits the taskgroup from the parent task
+ taskdata->td_dephash = NULL;
+ taskdata->td_depnode = NULL;
+#endif
+
+ // Only need to keep track of child task counts if team parallel and tasking not serialized or if it is a proxy task
+#if OMP_45_ENABLED
+ if ( flags->proxy == TASK_PROXY || !( taskdata -> td_flags.team_serial || taskdata -> td_flags.tasking_ser ) )
+#else
+ if ( !( taskdata -> td_flags.team_serial || taskdata -> td_flags.tasking_ser ) )
+#endif
+ {
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& parent_task->td_incomplete_child_tasks) );
+#if OMP_40_ENABLED
+ if ( parent_task->td_taskgroup )
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& parent_task->td_taskgroup->count) );
+#endif
+ // Only need to keep track of allocated child tasks for explicit tasks since implicit not deallocated
+ if ( taskdata->td_parent->td_flags.tasktype == TASK_EXPLICIT ) {
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& taskdata->td_parent->td_allocated_child_tasks) );
+ }
+ }
+
+ KA_TRACE(20, ("__kmp_task_alloc(exit): T#%d created task %p parent=%p\n",
+ gtid, taskdata, taskdata->td_parent) );
+
+#if OMPT_SUPPORT
+ __kmp_task_init_ompt(taskdata, gtid, (void*) task_entry);
+#endif
+
+ return task;
+}
+
+
+kmp_task_t *
+__kmpc_omp_task_alloc( ident_t *loc_ref, kmp_int32 gtid, kmp_int32 flags,
+ size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+ kmp_routine_entry_t task_entry )
+{
+ kmp_task_t *retval;
+ kmp_tasking_flags_t *input_flags = (kmp_tasking_flags_t *) & flags;
+
+ input_flags->native = FALSE;
+ // __kmp_task_alloc() sets up all other runtime flags
+
+#if OMP_45_ENABLED
+ KA_TRACE(10, ("__kmpc_omp_task_alloc(enter): T#%d loc=%p, flags=(%s %s) "
+ "sizeof_task=%ld sizeof_shared=%ld entry=%p\n",
+ gtid, loc_ref, input_flags->tiedness ? "tied " : "untied",
+ input_flags->proxy ? "proxy" : "",
+ sizeof_kmp_task_t, sizeof_shareds, task_entry) );
+#else
+ KA_TRACE(10, ("__kmpc_omp_task_alloc(enter): T#%d loc=%p, flags=(%s) "
+ "sizeof_task=%ld sizeof_shared=%ld entry=%p\n",
+ gtid, loc_ref, input_flags->tiedness ? "tied " : "untied",
+ sizeof_kmp_task_t, sizeof_shareds, task_entry) );
+#endif
+
+ retval = __kmp_task_alloc( loc_ref, gtid, input_flags, sizeof_kmp_task_t,
+ sizeof_shareds, task_entry );
+
+ KA_TRACE(20, ("__kmpc_omp_task_alloc(exit): T#%d retval %p\n", gtid, retval) );
+
+ return retval;
+}
+
+//-----------------------------------------------------------
+// __kmp_invoke_task: invoke the specified task
+//
+// gtid: global thread ID of caller
+// task: the task to invoke
+// current_task: the task to resume after task invokation
+
+static void
+__kmp_invoke_task( kmp_int32 gtid, kmp_task_t *task, kmp_taskdata_t * current_task )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_uint64 cur_time;
+#if OMP_40_ENABLED
+ int discard = 0 /* false */;
+#endif
+ KA_TRACE(30, ("__kmp_invoke_task(enter): T#%d invoking task %p, current_task=%p\n",
+ gtid, taskdata, current_task) );
+ KMP_DEBUG_ASSERT(task);
+#if OMP_45_ENABLED
+ if ( taskdata->td_flags.proxy == TASK_PROXY &&
+ taskdata->td_flags.complete == 1)
+ {
+ // This is a proxy task that was already completed but it needs to run
+ // its bottom-half finish
+ KA_TRACE(30, ("__kmp_invoke_task: T#%d running bottom finish for proxy task %p\n",
+ gtid, taskdata) );
+
+ __kmp_bottom_half_finish_proxy(gtid,task);
+
+ KA_TRACE(30, ("__kmp_invoke_task(exit): T#%d completed bottom finish for proxy task %p, resuming task %p\n", gtid, taskdata, current_task) );
+
+ return;
+ }
+#endif
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if(__kmp_forkjoin_frames_mode == 3) {
+ // Get the current time stamp to measure task execution time to correct barrier imbalance time
+ cur_time = __itt_get_timestamp();
+ }
+#endif
+
+#if OMP_45_ENABLED
+ // Proxy tasks are not handled by the runtime
+ if ( taskdata->td_flags.proxy != TASK_PROXY )
+#endif
+ __kmp_task_start( gtid, task, current_task );
+
+#if OMPT_SUPPORT
+ ompt_thread_info_t oldInfo;
+ kmp_info_t * thread;
+ if (ompt_enabled) {
+ // Store the threads states and restore them after the task
+ thread = __kmp_threads[ gtid ];
+ oldInfo = thread->th.ompt_thread_info;
+ thread->th.ompt_thread_info.wait_id = 0;
+ thread->th.ompt_thread_info.state = ompt_state_work_parallel;
+ taskdata->ompt_task_info.frame.exit_runtime_frame = __builtin_frame_address(0);
+ }
+#endif
+
+#if OMP_40_ENABLED
+ // TODO: cancel tasks if the parallel region has also been cancelled
+ // TODO: check if this sequence can be hoisted above __kmp_task_start
+ // if cancellation has been enabled for this run ...
+ if (__kmp_omp_cancellation) {
+ kmp_info_t *this_thr = __kmp_threads [ gtid ];
+ kmp_team_t * this_team = this_thr->th.th_team;
+ kmp_taskgroup_t * taskgroup = taskdata->td_taskgroup;
+ if ((taskgroup && taskgroup->cancel_request) || (this_team->t.t_cancel_request == cancel_parallel)) {
+ KMP_COUNT_BLOCK(TASK_cancelled);
+ // this task belongs to a task group and we need to cancel it
+ discard = 1 /* true */;
+ }
+ }
+
+ //
+ // Invoke the task routine and pass in relevant data.
+ // Thunks generated by gcc take a different argument list.
+ //
+ if (!discard) {
+#if KMP_STATS_ENABLED
+ KMP_COUNT_BLOCK(TASK_executed);
+ switch(KMP_GET_THREAD_STATE()) {
+ case FORK_JOIN_BARRIER: KMP_PUSH_PARTITIONED_TIMER(OMP_task_join_bar); break;
+ case PLAIN_BARRIER: KMP_PUSH_PARTITIONED_TIMER(OMP_task_plain_bar); break;
+ case TASKYIELD: KMP_PUSH_PARTITIONED_TIMER(OMP_task_taskyield); break;
+ case TASKWAIT: KMP_PUSH_PARTITIONED_TIMER(OMP_task_taskwait); break;
+ case TASKGROUP: KMP_PUSH_PARTITIONED_TIMER(OMP_task_taskgroup); break;
+ default: KMP_PUSH_PARTITIONED_TIMER(OMP_task_immediate); break;
+ }
+#endif // KMP_STATS_ENABLED
+#endif // OMP_40_ENABLED
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ /* let OMPT know that we're about to run this task */
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_task_switch))
+ {
+ ompt_callbacks.ompt_callback(ompt_event_task_switch)(
+ current_task->ompt_task_info.task_id,
+ taskdata->ompt_task_info.task_id);
+ }
+#endif
+
+#ifdef KMP_GOMP_COMPAT
+ if (taskdata->td_flags.native) {
+ ((void (*)(void *))(*(task->routine)))(task->shareds);
+ }
+ else
+#endif /* KMP_GOMP_COMPAT */
+ {
+ (*(task->routine))(gtid, task);
+ }
+ KMP_POP_PARTITIONED_TIMER();
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ /* let OMPT know that we're returning to the callee task */
+ if (ompt_enabled &&
+ ompt_callbacks.ompt_callback(ompt_event_task_switch))
+ {
+ ompt_callbacks.ompt_callback(ompt_event_task_switch)(
+ taskdata->ompt_task_info.task_id,
+ current_task->ompt_task_info.task_id);
+ }
+#endif
+
+#if OMP_40_ENABLED
+ }
+#endif // OMP_40_ENABLED
+
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ thread->th.ompt_thread_info = oldInfo;
+ taskdata->ompt_task_info.frame.exit_runtime_frame = 0;
+ }
+#endif
+
+#if OMP_45_ENABLED
+ // Proxy tasks are not handled by the runtime
+ if ( taskdata->td_flags.proxy != TASK_PROXY )
+#endif
+ __kmp_task_finish( gtid, task, current_task );
+
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ // Barrier imbalance - correct arrive time after the task finished
+ if(__kmp_forkjoin_frames_mode == 3) {
+ kmp_info_t *this_thr = __kmp_threads [ gtid ];
+ if(this_thr->th.th_bar_arrive_time) {
+ this_thr->th.th_bar_arrive_time += (__itt_get_timestamp() - cur_time);
+ }
+ }
+#endif
+ KA_TRACE(30, ("__kmp_invoke_task(exit): T#%d completed task %p, resuming task %p\n",
+ gtid, taskdata, current_task) );
+ return;
+}
+
+//-----------------------------------------------------------------------
+// __kmpc_omp_task_parts: Schedule a thread-switchable task for execution
+//
+// loc_ref: location of original task pragma (ignored)
+// gtid: Global Thread ID of encountering thread
+// new_task: task thunk allocated by __kmp_omp_task_alloc() for the ''new task''
+// Returns:
+// TASK_CURRENT_NOT_QUEUED (0) if did not suspend and queue current task to be resumed later.
+// TASK_CURRENT_QUEUED (1) if suspended and queued the current task to be resumed later.
+
+kmp_int32
+__kmpc_omp_task_parts( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task)
+{
+ kmp_taskdata_t * new_taskdata = KMP_TASK_TO_TASKDATA(new_task);
+
+ KA_TRACE(10, ("__kmpc_omp_task_parts(enter): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, new_taskdata ) );
+
+ /* Should we execute the new task or queue it? For now, let's just always try to
+ queue it. If the queue fills up, then we'll execute it. */
+
+ if ( __kmp_push_task( gtid, new_task ) == TASK_NOT_PUSHED ) // if cannot defer
+ { // Execute this task immediately
+ kmp_taskdata_t * current_task = __kmp_threads[ gtid ] -> th.th_current_task;
+ new_taskdata->td_flags.task_serial = 1;
+ __kmp_invoke_task( gtid, new_task, current_task );
+ }
+
+ KA_TRACE(10, ("__kmpc_omp_task_parts(exit): T#%d returning TASK_CURRENT_NOT_QUEUED: "
+ "loc=%p task=%p, return: TASK_CURRENT_NOT_QUEUED\n", gtid, loc_ref,
+ new_taskdata ) );
+
+ return TASK_CURRENT_NOT_QUEUED;
+}
+
+//---------------------------------------------------------------------
+// __kmp_omp_task: Schedule a non-thread-switchable task for execution
+// gtid: Global Thread ID of encountering thread
+// new_task: non-thread-switchable task thunk allocated by __kmp_omp_task_alloc()
+// serialize_immediate: if TRUE then if the task is executed immediately its execution will be serialized
+// returns:
+//
+// TASK_CURRENT_NOT_QUEUED (0) if did not suspend and queue current task to be resumed later.
+// TASK_CURRENT_QUEUED (1) if suspended and queued the current task to be resumed later.
+kmp_int32
+__kmp_omp_task( kmp_int32 gtid, kmp_task_t * new_task, bool serialize_immediate )
+{
+ kmp_taskdata_t * new_taskdata = KMP_TASK_TO_TASKDATA(new_task);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ new_taskdata->ompt_task_info.frame.reenter_runtime_frame =
+ __builtin_frame_address(0);
+ }
+#endif
+
+ /* Should we execute the new task or queue it? For now, let's just always try to
+ queue it. If the queue fills up, then we'll execute it. */
+#if OMP_45_ENABLED
+ if ( new_taskdata->td_flags.proxy == TASK_PROXY || __kmp_push_task( gtid, new_task ) == TASK_NOT_PUSHED ) // if cannot defer
+#else
+ if ( __kmp_push_task( gtid, new_task ) == TASK_NOT_PUSHED ) // if cannot defer
+#endif
+ { // Execute this task immediately
+ kmp_taskdata_t * current_task = __kmp_threads[ gtid ] -> th.th_current_task;
+ if ( serialize_immediate )
+ new_taskdata -> td_flags.task_serial = 1;
+ __kmp_invoke_task( gtid, new_task, current_task );
+ }
+
+#if OMPT_SUPPORT
+ if (ompt_enabled) {
+ new_taskdata->ompt_task_info.frame.reenter_runtime_frame = 0;
+ }
+#endif
+
+ return TASK_CURRENT_NOT_QUEUED;
+}
+
+//---------------------------------------------------------------------
+// __kmpc_omp_task: Wrapper around __kmp_omp_task to schedule a non-thread-switchable task from
+// the parent thread only!
+// loc_ref: location of original task pragma (ignored)
+// gtid: Global Thread ID of encountering thread
+// new_task: non-thread-switchable task thunk allocated by __kmp_omp_task_alloc()
+// returns:
+//
+// TASK_CURRENT_NOT_QUEUED (0) if did not suspend and queue current task to be resumed later.
+// TASK_CURRENT_QUEUED (1) if suspended and queued the current task to be resumed later.
+
+kmp_int32
+__kmpc_omp_task( ident_t *loc_ref, kmp_int32 gtid, kmp_task_t * new_task)
+{
+ kmp_int32 res;
+ KMP_SET_THREAD_STATE_BLOCK(EXPLICIT_TASK);
+
+#if KMP_DEBUG
+ kmp_taskdata_t * new_taskdata = KMP_TASK_TO_TASKDATA(new_task);
+#endif
+ KA_TRACE(10, ("__kmpc_omp_task(enter): T#%d loc=%p task=%p\n",
+ gtid, loc_ref, new_taskdata ) );
+
+ res = __kmp_omp_task(gtid,new_task,true);
+
+ KA_TRACE(10, ("__kmpc_omp_task(exit): T#%d returning TASK_CURRENT_NOT_QUEUED: loc=%p task=%p\n",
+ gtid, loc_ref, new_taskdata ) );
+ return res;
+}
+
+//-------------------------------------------------------------------------------------
+// __kmpc_omp_taskwait: Wait until all tasks generated by the current task are complete
+
+kmp_int32
+__kmpc_omp_taskwait( ident_t *loc_ref, kmp_int32 gtid )
+{
+ kmp_taskdata_t * taskdata;
+ kmp_info_t * thread;
+ int thread_finished = FALSE;
+ KMP_SET_THREAD_STATE_BLOCK(TASKWAIT);
+
+ KA_TRACE(10, ("__kmpc_omp_taskwait(enter): T#%d loc=%p\n", gtid, loc_ref) );
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+ // GEH TODO: shouldn't we have some sort of OMPRAP API calls here to mark begin wait?
+
+ thread = __kmp_threads[ gtid ];
+ taskdata = thread -> th.th_current_task;
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ ompt_task_id_t my_task_id;
+ ompt_parallel_id_t my_parallel_id;
+
+ if (ompt_enabled) {
+ kmp_team_t *team = thread->th.th_team;
+ my_task_id = taskdata->ompt_task_info.task_id;
+ my_parallel_id = team->t.ompt_team_info.parallel_id;
+
+ taskdata->ompt_task_info.frame.reenter_runtime_frame = __builtin_frame_address(0);
+ if (ompt_callbacks.ompt_callback(ompt_event_taskwait_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_taskwait_begin)(
+ my_parallel_id, my_task_id);
+ }
+ }
+#endif
+
+ // Debugger: The taskwait is active. Store location and thread encountered the taskwait.
+#if USE_ITT_BUILD
+ // Note: These values are used by ITT events as well.
+#endif /* USE_ITT_BUILD */
+ taskdata->td_taskwait_counter += 1;
+ taskdata->td_taskwait_ident = loc_ref;
+ taskdata->td_taskwait_thread = gtid + 1;
+
+#if USE_ITT_BUILD
+ void * itt_sync_obj = __kmp_itt_taskwait_object( gtid );
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_starting( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+
+#if OMP_45_ENABLED
+ if ( ! taskdata->td_flags.team_serial || (thread->th.th_task_team != NULL && thread->th.th_task_team->tt.tt_found_proxy_tasks) )
+#else
+ if ( ! taskdata->td_flags.team_serial )
+#endif
+ {
+ // GEH: if team serialized, avoid reading the volatile variable below.
+ kmp_flag_32 flag(&(taskdata->td_incomplete_child_tasks), 0U);
+ while ( TCR_4(taskdata -> td_incomplete_child_tasks) != 0 ) {
+ flag.execute_tasks(thread, gtid, FALSE, &thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), __kmp_task_stealing_constraint );
+ }
+ }
+#if USE_ITT_BUILD
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_finished( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+
+ // GEH TODO: shouldn't we have some sort of OMPRAP API calls here to mark end of wait?
+ // Debugger: The taskwait is completed. Location remains, but thread is negated.
+ taskdata->td_taskwait_thread = - taskdata->td_taskwait_thread;
+
+#if OMPT_SUPPORT && OMPT_TRACE
+ if (ompt_enabled) {
+ if (ompt_callbacks.ompt_callback(ompt_event_taskwait_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_taskwait_end)(
+ my_parallel_id, my_task_id);
+ }
+ taskdata->ompt_task_info.frame.reenter_runtime_frame = 0;
+ }
+#endif
+ }
+
+ KA_TRACE(10, ("__kmpc_omp_taskwait(exit): T#%d task %p finished waiting, "
+ "returning TASK_CURRENT_NOT_QUEUED\n", gtid, taskdata) );
+
+ return TASK_CURRENT_NOT_QUEUED;
+}
+
+
+//-------------------------------------------------
+// __kmpc_omp_taskyield: switch to a different task
+
+kmp_int32
+__kmpc_omp_taskyield( ident_t *loc_ref, kmp_int32 gtid, int end_part )
+{
+ kmp_taskdata_t * taskdata;
+ kmp_info_t * thread;
+ int thread_finished = FALSE;
+
+ KMP_COUNT_BLOCK(OMP_TASKYIELD);
+ KMP_SET_THREAD_STATE_BLOCK(TASKYIELD);
+
+ KA_TRACE(10, ("__kmpc_omp_taskyield(enter): T#%d loc=%p end_part = %d\n",
+ gtid, loc_ref, end_part) );
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec && __kmp_init_parallel ) {
+ // GEH TODO: shouldn't we have some sort of OMPRAP API calls here to mark begin wait?
+
+ thread = __kmp_threads[ gtid ];
+ taskdata = thread -> th.th_current_task;
+ // Should we model this as a task wait or not?
+ // Debugger: The taskwait is active. Store location and thread encountered the taskwait.
+#if USE_ITT_BUILD
+ // Note: These values are used by ITT events as well.
+#endif /* USE_ITT_BUILD */
+ taskdata->td_taskwait_counter += 1;
+ taskdata->td_taskwait_ident = loc_ref;
+ taskdata->td_taskwait_thread = gtid + 1;
+
+#if USE_ITT_BUILD
+ void * itt_sync_obj = __kmp_itt_taskwait_object( gtid );
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_starting( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+ if ( ! taskdata->td_flags.team_serial ) {
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+ if (task_team != NULL) {
+ if (KMP_TASKING_ENABLED(task_team)) {
+ __kmp_execute_tasks_32( thread, gtid, NULL, FALSE, &thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), __kmp_task_stealing_constraint );
+ }
+ }
+ }
+#if USE_ITT_BUILD
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_finished( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+
+ // GEH TODO: shouldn't we have some sort of OMPRAP API calls here to mark end of wait?
+ // Debugger: The taskwait is completed. Location remains, but thread is negated.
+ taskdata->td_taskwait_thread = - taskdata->td_taskwait_thread;
+ }
+
+ KA_TRACE(10, ("__kmpc_omp_taskyield(exit): T#%d task %p resuming, "
+ "returning TASK_CURRENT_NOT_QUEUED\n", gtid, taskdata) );
+
+ return TASK_CURRENT_NOT_QUEUED;
+}
+
+
+#if OMP_40_ENABLED
+//-------------------------------------------------------------------------------------
+// __kmpc_taskgroup: Start a new taskgroup
+
+void
+__kmpc_taskgroup( ident_t* loc, int gtid )
+{
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+ kmp_taskdata_t * taskdata = thread->th.th_current_task;
+ kmp_taskgroup_t * tg_new =
+ (kmp_taskgroup_t *)__kmp_thread_malloc( thread, sizeof( kmp_taskgroup_t ) );
+ KA_TRACE(10, ("__kmpc_taskgroup: T#%d loc=%p group=%p\n", gtid, loc, tg_new) );
+ tg_new->count = 0;
+ tg_new->cancel_request = cancel_noreq;
+ tg_new->parent = taskdata->td_taskgroup;
+ taskdata->td_taskgroup = tg_new;
+}
+
+
+//-------------------------------------------------------------------------------------
+// __kmpc_end_taskgroup: Wait until all tasks generated by the current task
+// and its descendants are complete
+
+void
+__kmpc_end_taskgroup( ident_t* loc, int gtid )
+{
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+ kmp_taskdata_t * taskdata = thread->th.th_current_task;
+ kmp_taskgroup_t * taskgroup = taskdata->td_taskgroup;
+ int thread_finished = FALSE;
+
+ KA_TRACE(10, ("__kmpc_end_taskgroup(enter): T#%d loc=%p\n", gtid, loc) );
+ KMP_DEBUG_ASSERT( taskgroup != NULL );
+ KMP_SET_THREAD_STATE_BLOCK(TASKGROUP);
+
+ if ( __kmp_tasking_mode != tskm_immediate_exec ) {
+#if USE_ITT_BUILD
+ // For ITT the taskgroup wait is similar to taskwait until we need to distinguish them
+ void * itt_sync_obj = __kmp_itt_taskwait_object( gtid );
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_starting( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+
+#if OMP_45_ENABLED
+ if ( ! taskdata->td_flags.team_serial || (thread->th.th_task_team != NULL && thread->th.th_task_team->tt.tt_found_proxy_tasks) )
+#else
+ if ( ! taskdata->td_flags.team_serial )
+#endif
+ {
+ kmp_flag_32 flag(&(taskgroup->count), 0U);
+ while ( TCR_4(taskgroup->count) != 0 ) {
+ flag.execute_tasks(thread, gtid, FALSE, &thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), __kmp_task_stealing_constraint );
+ }
+ }
+
+#if USE_ITT_BUILD
+ if ( itt_sync_obj != NULL )
+ __kmp_itt_taskwait_finished( gtid, itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+ }
+ KMP_DEBUG_ASSERT( taskgroup->count == 0 );
+
+ // Restore parent taskgroup for the current task
+ taskdata->td_taskgroup = taskgroup->parent;
+ __kmp_thread_free( thread, taskgroup );
+
+ KA_TRACE(10, ("__kmpc_end_taskgroup(exit): T#%d task %p finished waiting\n", gtid, taskdata) );
+}
+#endif
+
+
+//------------------------------------------------------
+// __kmp_remove_my_task: remove a task from my own deque
+
+static kmp_task_t *
+__kmp_remove_my_task( kmp_info_t * thread, kmp_int32 gtid, kmp_task_team_t *task_team,
+ kmp_int32 is_constrained )
+{
+ kmp_task_t * task;
+ kmp_taskdata_t * taskdata;
+ kmp_thread_data_t *thread_data;
+ kmp_uint32 tail;
+
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+ KMP_DEBUG_ASSERT( task_team -> tt.tt_threads_data != NULL ); // Caller should check this condition
+
+ thread_data = & task_team -> tt.tt_threads_data[ __kmp_tid_from_gtid( gtid ) ];
+
+ KA_TRACE(10, ("__kmp_remove_my_task(enter): T#%d ntasks=%d head=%u tail=%u\n",
+ gtid, thread_data->td.td_deque_ntasks, thread_data->td.td_deque_head,
+ thread_data->td.td_deque_tail) );
+
+ if (TCR_4(thread_data -> td.td_deque_ntasks) == 0) {
+ KA_TRACE(10, ("__kmp_remove_my_task(exit #1): T#%d No tasks to remove: ntasks=%d head=%u tail=%u\n",
+ gtid, thread_data->td.td_deque_ntasks, thread_data->td.td_deque_head,
+ thread_data->td.td_deque_tail) );
+ return NULL;
+ }
+
+ __kmp_acquire_bootstrap_lock( & thread_data -> td.td_deque_lock );
+
+ if (TCR_4(thread_data -> td.td_deque_ntasks) == 0) {
+ __kmp_release_bootstrap_lock( & thread_data -> td.td_deque_lock );
+ KA_TRACE(10, ("__kmp_remove_my_task(exit #2): T#%d No tasks to remove: ntasks=%d head=%u tail=%u\n",
+ gtid, thread_data->td.td_deque_ntasks, thread_data->td.td_deque_head,
+ thread_data->td.td_deque_tail) );
+ return NULL;
+ }
+
+ tail = ( thread_data -> td.td_deque_tail - 1 ) & TASK_DEQUE_MASK(thread_data->td); // Wrap index.
+ taskdata = thread_data -> td.td_deque[ tail ];
+
+ if (is_constrained && (taskdata->td_flags.tiedness == TASK_TIED)) {
+ // we need to check if the candidate obeys task scheduling constraint:
+ // only child of current task can be scheduled
+ kmp_taskdata_t * current = thread->th.th_current_task;
+ kmp_int32 level = current->td_level;
+ kmp_taskdata_t * parent = taskdata->td_parent;
+ while ( parent != current && parent->td_level > level ) {
+ parent = parent->td_parent; // check generation up to the level of the current task
+ KMP_DEBUG_ASSERT(parent != NULL);
+ }
+ if ( parent != current ) {
+ // If the tail task is not a child, then no other child can appear in the deque.
+ __kmp_release_bootstrap_lock( & thread_data -> td.td_deque_lock );
+ KA_TRACE(10, ("__kmp_remove_my_task(exit #2): T#%d No tasks to remove: ntasks=%d head=%u tail=%u\n",
+ gtid, thread_data->td.td_deque_ntasks, thread_data->td.td_deque_head,
+ thread_data->td.td_deque_tail) );
+ return NULL;
+ }
+ }
+
+ thread_data -> td.td_deque_tail = tail;
+ TCW_4(thread_data -> td.td_deque_ntasks, thread_data -> td.td_deque_ntasks - 1);
+
+ __kmp_release_bootstrap_lock( & thread_data->td.td_deque_lock );
+
+ KA_TRACE(10, ("__kmp_remove_my_task(exit #2): T#%d task %p removed: ntasks=%d head=%u tail=%u\n",
+ gtid, taskdata, thread_data->td.td_deque_ntasks, thread_data->td.td_deque_head,
+ thread_data->td.td_deque_tail) );
+
+ task = KMP_TASKDATA_TO_TASK( taskdata );
+ return task;
+}
+
+
+//-----------------------------------------------------------
+// __kmp_steal_task: remove a task from another thread's deque
+// Assume that calling thread has already checked existence of
+// task_team thread_data before calling this routine.
+
+static kmp_task_t *
+__kmp_steal_task( kmp_info_t *victim, kmp_int32 gtid, kmp_task_team_t *task_team,
+ volatile kmp_uint32 *unfinished_threads, int *thread_finished,
+ kmp_int32 is_constrained )
+{
+ kmp_task_t * task;
+ kmp_taskdata_t * taskdata;
+ kmp_thread_data_t *victim_td, *threads_data;
+ kmp_int32 victim_tid;
+
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+
+ threads_data = task_team -> tt.tt_threads_data;
+ KMP_DEBUG_ASSERT( threads_data != NULL ); // Caller should check this condition
+
+ victim_tid = victim->th.th_info.ds.ds_tid;
+ victim_td = & threads_data[ victim_tid ];
+
+ KA_TRACE(10, ("__kmp_steal_task(enter): T#%d try to steal from T#%d: task_team=%p ntasks=%d "
+ "head=%u tail=%u\n",
+ gtid, __kmp_gtid_from_thread( victim ), task_team, victim_td->td.td_deque_ntasks,
+ victim_td->td.td_deque_head, victim_td->td.td_deque_tail) );
+
+ if ( (TCR_4(victim_td -> td.td_deque_ntasks) == 0) || // Caller should not check this condition
+ (TCR_PTR(victim->th.th_task_team) != task_team)) // GEH: why would this happen?
+ {
+ KA_TRACE(10, ("__kmp_steal_task(exit #1): T#%d could not steal from T#%d: task_team=%p "
+ "ntasks=%d head=%u tail=%u\n",
+ gtid, __kmp_gtid_from_thread( victim ), task_team, victim_td->td.td_deque_ntasks,
+ victim_td->td.td_deque_head, victim_td->td.td_deque_tail) );
+ return NULL;
+ }
+
+ __kmp_acquire_bootstrap_lock( & victim_td -> td.td_deque_lock );
+
+ // Check again after we acquire the lock
+ if ( (TCR_4(victim_td -> td.td_deque_ntasks) == 0) ||
+ (TCR_PTR(victim->th.th_task_team) != task_team)) // GEH: why would this happen?
+ {
+ __kmp_release_bootstrap_lock( & victim_td -> td.td_deque_lock );
+ KA_TRACE(10, ("__kmp_steal_task(exit #2): T#%d could not steal from T#%d: task_team=%p "
+ "ntasks=%d head=%u tail=%u\n",
+ gtid, __kmp_gtid_from_thread( victim ), task_team, victim_td->td.td_deque_ntasks,
+ victim_td->td.td_deque_head, victim_td->td.td_deque_tail) );
+ return NULL;
+ }
+
+ KMP_DEBUG_ASSERT( victim_td -> td.td_deque != NULL );
+
+ if ( !is_constrained ) {
+ taskdata = victim_td -> td.td_deque[ victim_td -> td.td_deque_head ];
+ KMP_ASSERT(taskdata);
+ // Bump head pointer and Wrap.
+ victim_td -> td.td_deque_head = ( victim_td -> td.td_deque_head + 1 ) & TASK_DEQUE_MASK(victim_td->td);
+ } else {
+ // While we have postponed tasks let's steal from tail of the deque (smaller tasks)
+ kmp_int32 tail = ( victim_td -> td.td_deque_tail - 1 ) & TASK_DEQUE_MASK(victim_td->td); // Wrap index.
+ taskdata = victim_td -> td.td_deque[ tail ];
+ KMP_ASSERT(taskdata);
+ // we need to check if the candidate obeys task scheduling constraint:
+ // only child of current task can be scheduled
+ kmp_taskdata_t * current = __kmp_threads[ gtid ]->th.th_current_task;
+ kmp_int32 level = current->td_level;
+ kmp_taskdata_t * parent = taskdata->td_parent;
+ while ( parent != current && parent->td_level > level ) {
+ parent = parent->td_parent; // check generation up to the level of the current task
+ KMP_DEBUG_ASSERT(parent != NULL);
+ }
+ if ( parent != current && (taskdata->td_flags.tiedness == TASK_TIED) ) { // untied is always allowed to be stolen
+ // If the tail task is not a child, then no other childs can appear in the deque (?).
+ __kmp_release_bootstrap_lock( & victim_td -> td.td_deque_lock );
+ KA_TRACE(10, ("__kmp_steal_task(exit #2): T#%d could not steal from T#%d: task_team=%p "
+ "ntasks=%d head=%u tail=%u\n",
+ gtid, __kmp_gtid_from_thread( threads_data[victim_tid].td.td_thr ),
+ task_team, victim_td->td.td_deque_ntasks,
+ victim_td->td.td_deque_head, victim_td->td.td_deque_tail) );
+ return NULL;
+ }
+ victim_td -> td.td_deque_tail = tail;
+ }
+ if (*thread_finished) {
+ // We need to un-mark this victim as a finished victim. This must be done before
+ // releasing the lock, or else other threads (starting with the master victim)
+ // might be prematurely released from the barrier!!!
+ kmp_uint32 count;
+
+ count = KMP_TEST_THEN_INC32( (kmp_int32 *)unfinished_threads );
+
+ KA_TRACE(20, ("__kmp_steal_task: T#%d inc unfinished_threads to %d: task_team=%p\n",
+ gtid, count + 1, task_team) );
+
+ *thread_finished = FALSE;
+ }
+ TCW_4(victim_td -> td.td_deque_ntasks, TCR_4(victim_td -> td.td_deque_ntasks) - 1);
+
+ __kmp_release_bootstrap_lock( & victim_td -> td.td_deque_lock );
+
+ KMP_COUNT_BLOCK(TASK_stolen);
+ KA_TRACE(10, ("__kmp_steal_task(exit #3): T#%d stole task %p from T#%d: task_team=%p "
+ "ntasks=%d head=%u tail=%u\n",
+ gtid, taskdata, __kmp_gtid_from_thread( victim ), task_team,
+ victim_td->td.td_deque_ntasks, victim_td->td.td_deque_head,
+ victim_td->td.td_deque_tail) );
+
+ task = KMP_TASKDATA_TO_TASK( taskdata );
+ return task;
+}
+
+
+//-----------------------------------------------------------------------------
+// __kmp_execute_tasks_template: Choose and execute tasks until either the condition
+// is statisfied (return true) or there are none left (return false).
+// final_spin is TRUE if this is the spin at the release barrier.
+// thread_finished indicates whether the thread is finished executing all
+// the tasks it has on its deque, and is at the release barrier.
+// spinner is the location on which to spin.
+// spinner == NULL means only execute a single task and return.
+// checker is the value to check to terminate the spin.
+template <class C>
+static inline int __kmp_execute_tasks_template(kmp_info_t *thread, kmp_int32 gtid, C *flag, int final_spin,
+ int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained)
+{
+ kmp_task_team_t * task_team = thread->th.th_task_team;
+ kmp_thread_data_t * threads_data;
+ kmp_task_t * task;
+ kmp_info_t * other_thread;
+ kmp_taskdata_t * current_task = thread -> th.th_current_task;
+ volatile kmp_uint32 * unfinished_threads;
+ kmp_int32 nthreads, victim=-2, use_own_tasks=1, new_victim=0, tid=thread->th.th_info.ds.ds_tid;
+
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+ KMP_DEBUG_ASSERT( thread == __kmp_threads[ gtid ] );
+
+ if (task_team == NULL) return FALSE;
+
+ KA_TRACE(15, ("__kmp_execute_tasks_template(enter): T#%d final_spin=%d *thread_finished=%d\n",
+ gtid, final_spin, *thread_finished) );
+
+ threads_data = (kmp_thread_data_t *)TCR_PTR(task_team -> tt.tt_threads_data);
+ KMP_DEBUG_ASSERT( threads_data != NULL );
+
+ nthreads = task_team -> tt.tt_nproc;
+ unfinished_threads = &(task_team -> tt.tt_unfinished_threads);
+#if OMP_45_ENABLED
+ KMP_DEBUG_ASSERT( nthreads > 1 || task_team->tt.tt_found_proxy_tasks);
+#else
+ KMP_DEBUG_ASSERT( nthreads > 1 );
+#endif
+ KMP_DEBUG_ASSERT( (int)(TCR_4(*unfinished_threads)) >= 0 );
+
+ while (1) { // Outer loop keeps trying to find tasks in case of single thread getting tasks from target constructs
+ while (1) { // Inner loop to find a task and execute it
+ task = NULL;
+ if (use_own_tasks) { // check on own queue first
+ task = __kmp_remove_my_task( thread, gtid, task_team, is_constrained );
+ }
+ if ((task == NULL) && (nthreads > 1)) { // Steal a task
+ int asleep = 1;
+ use_own_tasks = 0;
+ // Try to steal from the last place I stole from successfully.
+ if (victim == -2) { // haven't stolen anything yet
+ victim = threads_data[tid].td.td_deque_last_stolen;
+ if (victim != -1) // if we have a last stolen from victim, get the thread
+ other_thread = threads_data[victim].td.td_thr;
+ }
+ if (victim != -1) { // found last victim
+ asleep = 0;
+ }
+ else if (!new_victim) { // no recent steals and we haven't already used a new victim; select a random thread
+ do { // Find a different thread to steal work from.
+ // Pick a random thread. Initial plan was to cycle through all the threads, and only return if
+ // we tried to steal from every thread, and failed. Arch says that's not such a great idea.
+ victim = __kmp_get_random(thread) % (nthreads - 1);
+ if (victim >= tid) {
+ ++victim; // Adjusts random distribution to exclude self
+ }
+ // Found a potential victim
+ other_thread = threads_data[victim].td.td_thr;
+ // There is a slight chance that __kmp_enable_tasking() did not wake up all threads
+ // waiting at the barrier. If victim is sleeping, then wake it up. Since we were going to
+ // pay the cache miss penalty for referencing another thread's kmp_info_t struct anyway,
+ // the check shouldn't cost too much performance at this point. In extra barrier mode, tasks
+ // do not sleep at the separate tasking barrier, so this isn't a problem.
+ asleep = 0;
+ if ( ( __kmp_tasking_mode == tskm_task_teams ) &&
+ (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) &&
+ (TCR_PTR(other_thread->th.th_sleep_loc) != NULL)) {
+ asleep = 1;
+ __kmp_null_resume_wrapper(__kmp_gtid_from_thread(other_thread), other_thread->th.th_sleep_loc);
+ // A sleeping thread should not have any tasks on it's queue. There is a slight
+ // possibility that it resumes, steals a task from another thread, which spawns more
+ // tasks, all in the time that it takes this thread to check => don't write an assertion
+ // that the victim's queue is empty. Try stealing from a different thread.
+ }
+ } while (asleep);
+ }
+
+ if (!asleep) {
+ // We have a victim to try to steal from
+ task = __kmp_steal_task(other_thread, gtid, task_team, unfinished_threads, thread_finished, is_constrained);
+ }
+ if (task != NULL) { // set last stolen to victim
+ if (threads_data[tid].td.td_deque_last_stolen != victim) {
+ threads_data[tid].td.td_deque_last_stolen = victim;
+ // The pre-refactored code did not try more than 1 successful new vicitm,
+ // unless the last one generated more local tasks; new_victim keeps track of this
+ new_victim = 1;
+ }
+ }
+ else { // No tasks found; unset last_stolen
+ KMP_CHECK_UPDATE(threads_data[tid].td.td_deque_last_stolen, -1);
+ victim = -2; // no successful victim found
+ }
+ }
+
+ if (task == NULL) // break out of tasking loop
+ break;
+
+ // Found a task; execute it
+#if USE_ITT_BUILD && USE_ITT_NOTIFY
+ if ( __itt_sync_create_ptr || KMP_ITT_DEBUG ) {
+ if ( itt_sync_obj == NULL ) { // we are at fork barrier where we could not get the object reliably
+ itt_sync_obj = __kmp_itt_barrier_object( gtid, bs_forkjoin_barrier );
+ }
+ __kmp_itt_task_starting( itt_sync_obj );
+ }
+#endif /* USE_ITT_BUILD && USE_ITT_NOTIFY */
+ __kmp_invoke_task( gtid, task, current_task );
+#if USE_ITT_BUILD
+ if ( itt_sync_obj != NULL ) __kmp_itt_task_finished( itt_sync_obj );
+#endif /* USE_ITT_BUILD */
+ // If this thread is only partway through the barrier and the condition is met, then return now,
+ // so that the barrier gather/release pattern can proceed. If this thread is in the last spin loop
+ // in the barrier, waiting to be released, we know that the termination condition will not be
+ // satisified, so don't waste any cycles checking it.
+ if (flag == NULL || (!final_spin && flag->done_check())) {
+ KA_TRACE(15, ("__kmp_execute_tasks_template: T#%d spin condition satisfied\n", gtid) );
+ return TRUE;
+ }
+ if (thread->th.th_task_team == NULL) {
+ break;
+ }
+ KMP_YIELD( __kmp_library == library_throughput ); // Yield before executing next task
+ // If execution of a stolen task results in more tasks being placed on our run queue, reset use_own_tasks
+ if (!use_own_tasks && TCR_4(threads_data[tid].td.td_deque_ntasks) != 0) {
+ KA_TRACE(20, ("__kmp_execute_tasks_template: T#%d stolen task spawned other tasks, restart\n", gtid));
+ use_own_tasks = 1;
+ new_victim = 0;
+ }
+ }
+
+ // The task source has been exhausted. If in final spin loop of barrier, check if termination condition is satisfied.
+#if OMP_45_ENABLED
+ // The work queue may be empty but there might be proxy tasks still executing
+ if (final_spin && TCR_4(current_task->td_incomplete_child_tasks) == 0)
+#else
+ if (final_spin)
+#endif
+ {
+ // First, decrement the #unfinished threads, if that has not already been done. This decrement
+ // might be to the spin location, and result in the termination condition being satisfied.
+ if (! *thread_finished) {
+ kmp_uint32 count;
+
+ count = KMP_TEST_THEN_DEC32( (kmp_int32 *)unfinished_threads ) - 1;
+ KA_TRACE(20, ("__kmp_execute_tasks_template: T#%d dec unfinished_threads to %d task_team=%p\n",
+ gtid, count, task_team) );
+ *thread_finished = TRUE;
+ }
+
+ // It is now unsafe to reference thread->th.th_team !!!
+ // Decrementing task_team->tt.tt_unfinished_threads can allow the master thread to pass through
+ // the barrier, where it might reset each thread's th.th_team field for the next parallel region.
+ // If we can steal more work, we know that this has not happened yet.
+ if (flag != NULL && flag->done_check()) {
+ KA_TRACE(15, ("__kmp_execute_tasks_template: T#%d spin condition satisfied\n", gtid) );
+ return TRUE;
+ }
+ }
+
+ // If this thread's task team is NULL, master has recognized that there are no more tasks; bail out
+ if (thread->th.th_task_team == NULL) {
+ KA_TRACE(15, ("__kmp_execute_tasks_template: T#%d no more tasks\n", gtid) );
+ return FALSE;
+ }
+
+#if OMP_45_ENABLED
+ // We could be getting tasks from target constructs; if this is the only thread, keep trying to execute
+ // tasks from own queue
+ if (nthreads == 1)
+ use_own_tasks = 1;
+ else
+#endif
+ {
+ KA_TRACE(15, ("__kmp_execute_tasks_template: T#%d can't find work\n", gtid) );
+ return FALSE;
+ }
+ }
+}
+
+int __kmp_execute_tasks_32(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_32 *flag, int final_spin,
+ int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained)
+{
+ return __kmp_execute_tasks_template(thread, gtid, flag, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+}
+
+int __kmp_execute_tasks_64(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_64 *flag, int final_spin,
+ int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained)
+{
+ return __kmp_execute_tasks_template(thread, gtid, flag, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+}
+
+int __kmp_execute_tasks_oncore(kmp_info_t *thread, kmp_int32 gtid, kmp_flag_oncore *flag, int final_spin,
+ int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained)
+{
+ return __kmp_execute_tasks_template(thread, gtid, flag, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+}
+
+
+
+//-----------------------------------------------------------------------------
+// __kmp_enable_tasking: Allocate task team and resume threads sleeping at the
+// next barrier so they can assist in executing enqueued tasks.
+// First thread in allocates the task team atomically.
+
+static void
+__kmp_enable_tasking( kmp_task_team_t *task_team, kmp_info_t *this_thr )
+{
+ kmp_thread_data_t *threads_data;
+ int nthreads, i, is_init_thread;
+
+ KA_TRACE( 10, ( "__kmp_enable_tasking(enter): T#%d\n",
+ __kmp_gtid_from_thread( this_thr ) ) );
+
+ KMP_DEBUG_ASSERT(task_team != NULL);
+ KMP_DEBUG_ASSERT(this_thr->th.th_team != NULL);
+
+ nthreads = task_team->tt.tt_nproc;
+ KMP_DEBUG_ASSERT(nthreads > 0);
+ KMP_DEBUG_ASSERT(nthreads == this_thr->th.th_team->t.t_nproc);
+
+ // Allocate or increase the size of threads_data if necessary
+ is_init_thread = __kmp_realloc_task_threads_data( this_thr, task_team );
+
+ if (!is_init_thread) {
+ // Some other thread already set up the array.
+ KA_TRACE( 20, ( "__kmp_enable_tasking(exit): T#%d: threads array already set up.\n",
+ __kmp_gtid_from_thread( this_thr ) ) );
+ return;
+ }
+ threads_data = (kmp_thread_data_t *)TCR_PTR(task_team -> tt.tt_threads_data);
+ KMP_DEBUG_ASSERT( threads_data != NULL );
+
+ if ( ( __kmp_tasking_mode == tskm_task_teams ) &&
+ ( __kmp_dflt_blocktime != KMP_MAX_BLOCKTIME ) )
+ {
+ // Release any threads sleeping at the barrier, so that they can steal
+ // tasks and execute them. In extra barrier mode, tasks do not sleep
+ // at the separate tasking barrier, so this isn't a problem.
+ for (i = 0; i < nthreads; i++) {
+ volatile void *sleep_loc;
+ kmp_info_t *thread = threads_data[i].td.td_thr;
+
+ if (i == this_thr->th.th_info.ds.ds_tid) {
+ continue;
+ }
+ // Since we haven't locked the thread's suspend mutex lock at this
+ // point, there is a small window where a thread might be putting
+ // itself to sleep, but hasn't set the th_sleep_loc field yet.
+ // To work around this, __kmp_execute_tasks_template() periodically checks
+ // see if other threads are sleeping (using the same random
+ // mechanism that is used for task stealing) and awakens them if
+ // they are.
+ if ( ( sleep_loc = TCR_PTR( thread -> th.th_sleep_loc) ) != NULL )
+ {
+ KF_TRACE( 50, ( "__kmp_enable_tasking: T#%d waking up thread T#%d\n",
+ __kmp_gtid_from_thread( this_thr ),
+ __kmp_gtid_from_thread( thread ) ) );
+ __kmp_null_resume_wrapper(__kmp_gtid_from_thread(thread), sleep_loc);
+ }
+ else {
+ KF_TRACE( 50, ( "__kmp_enable_tasking: T#%d don't wake up thread T#%d\n",
+ __kmp_gtid_from_thread( this_thr ),
+ __kmp_gtid_from_thread( thread ) ) );
+ }
+ }
+ }
+
+ KA_TRACE( 10, ( "__kmp_enable_tasking(exit): T#%d\n",
+ __kmp_gtid_from_thread( this_thr ) ) );
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* // TODO: Check the comment consistency
+ * Utility routines for "task teams". A task team (kmp_task_t) is kind of
+ * like a shadow of the kmp_team_t data struct, with a different lifetime.
+ * After a child * thread checks into a barrier and calls __kmp_release() from
+ * the particular variant of __kmp_<barrier_kind>_barrier_gather(), it can no
+ * longer assume that the kmp_team_t structure is intact (at any moment, the
+ * master thread may exit the barrier code and free the team data structure,
+ * and return the threads to the thread pool).
+ *
+ * This does not work with the the tasking code, as the thread is still
+ * expected to participate in the execution of any tasks that may have been
+ * spawned my a member of the team, and the thread still needs access to all
+ * to each thread in the team, so that it can steal work from it.
+ *
+ * Enter the existence of the kmp_task_team_t struct. It employs a reference
+ * counting mechanims, and is allocated by the master thread before calling
+ * __kmp_<barrier_kind>_release, and then is release by the last thread to
+ * exit __kmp_<barrier_kind>_release at the next barrier. I.e. the lifetimes
+ * of the kmp_task_team_t structs for consecutive barriers can overlap
+ * (and will, unless the master thread is the last thread to exit the barrier
+ * release phase, which is not typical).
+ *
+ * The existence of such a struct is useful outside the context of tasking,
+ * but for now, I'm trying to keep it specific to the OMP_30_ENABLED macro,
+ * so that any performance differences show up when comparing the 2.5 vs. 3.0
+ * libraries.
+ *
+ * We currently use the existence of the threads array as an indicator that
+ * tasks were spawned since the last barrier. If the structure is to be
+ * useful outside the context of tasking, then this will have to change, but
+ * not settting the field minimizes the performance impact of tasking on
+ * barriers, when no explicit tasks were spawned (pushed, actually).
+ */
+
+
+static kmp_task_team_t *__kmp_free_task_teams = NULL; // Free list for task_team data structures
+// Lock for task team data structures
+static kmp_bootstrap_lock_t __kmp_task_team_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_task_team_lock );
+
+
+//------------------------------------------------------------------------------
+// __kmp_alloc_task_deque:
+// Allocates a task deque for a particular thread, and initialize the necessary
+// data structures relating to the deque. This only happens once per thread
+// per task team since task teams are recycled.
+// No lock is needed during allocation since each thread allocates its own
+// deque.
+
+static void
+__kmp_alloc_task_deque( kmp_info_t *thread, kmp_thread_data_t *thread_data )
+{
+ __kmp_init_bootstrap_lock( & thread_data -> td.td_deque_lock );
+ KMP_DEBUG_ASSERT( thread_data -> td.td_deque == NULL );
+
+ // Initialize last stolen task field to "none"
+ thread_data -> td.td_deque_last_stolen = -1;
+
+ KMP_DEBUG_ASSERT( TCR_4(thread_data -> td.td_deque_ntasks) == 0 );
+ KMP_DEBUG_ASSERT( thread_data -> td.td_deque_head == 0 );
+ KMP_DEBUG_ASSERT( thread_data -> td.td_deque_tail == 0 );
+
+ KE_TRACE( 10, ( "__kmp_alloc_task_deque: T#%d allocating deque[%d] for thread_data %p\n",
+ __kmp_gtid_from_thread( thread ), INITIAL_TASK_DEQUE_SIZE, thread_data ) );
+ // Allocate space for task deque, and zero the deque
+ // Cannot use __kmp_thread_calloc() because threads not around for
+ // kmp_reap_task_team( ).
+ thread_data -> td.td_deque = (kmp_taskdata_t **)
+ __kmp_allocate( INITIAL_TASK_DEQUE_SIZE * sizeof(kmp_taskdata_t *));
+ thread_data -> td.td_deque_size = INITIAL_TASK_DEQUE_SIZE;
+}
+
+//------------------------------------------------------------------------------
+// __kmp_realloc_task_deque:
+// Re-allocates a task deque for a particular thread, copies the content from the old deque
+// and adjusts the necessary data structures relating to the deque.
+// This operation must be done with a the deque_lock being held
+
+static void __kmp_realloc_task_deque ( kmp_info_t *thread, kmp_thread_data_t *thread_data )
+{
+ kmp_int32 size = TASK_DEQUE_SIZE(thread_data->td);
+ kmp_int32 new_size = 2 * size;
+
+ KE_TRACE( 10, ( "__kmp_realloc_task_deque: T#%d reallocating deque[from %d to %d] for thread_data %p\n",
+ __kmp_gtid_from_thread( thread ), size, new_size, thread_data ) );
+
+ kmp_taskdata_t ** new_deque = (kmp_taskdata_t **) __kmp_allocate( new_size * sizeof(kmp_taskdata_t *));
+
+ int i,j;
+ for ( i = thread_data->td.td_deque_head, j = 0; j < size; i = (i+1) & TASK_DEQUE_MASK(thread_data->td), j++ )
+ new_deque[j] = thread_data->td.td_deque[i];
+
+ __kmp_free(thread_data->td.td_deque);
+
+ thread_data -> td.td_deque_head = 0;
+ thread_data -> td.td_deque_tail = size;
+ thread_data -> td.td_deque = new_deque;
+ thread_data -> td.td_deque_size = new_size;
+}
+
+//------------------------------------------------------------------------------
+// __kmp_free_task_deque:
+// Deallocates a task deque for a particular thread.
+// Happens at library deallocation so don't need to reset all thread data fields.
+
+static void
+__kmp_free_task_deque( kmp_thread_data_t *thread_data )
+{
+ __kmp_acquire_bootstrap_lock( & thread_data -> td.td_deque_lock );
+
+ if ( thread_data -> td.td_deque != NULL ) {
+ TCW_4(thread_data -> td.td_deque_ntasks, 0);
+ __kmp_free( thread_data -> td.td_deque );
+ thread_data -> td.td_deque = NULL;
+ }
+ __kmp_release_bootstrap_lock( & thread_data -> td.td_deque_lock );
+
+#ifdef BUILD_TIED_TASK_STACK
+ // GEH: Figure out what to do here for td_susp_tied_tasks
+ if ( thread_data -> td.td_susp_tied_tasks.ts_entries != TASK_STACK_EMPTY ) {
+ __kmp_free_task_stack( __kmp_thread_from_gtid( gtid ), thread_data );
+ }
+#endif // BUILD_TIED_TASK_STACK
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_realloc_task_threads_data:
+// Allocates a threads_data array for a task team, either by allocating an initial
+// array or enlarging an existing array. Only the first thread to get the lock
+// allocs or enlarges the array and re-initializes the array eleemnts.
+// That thread returns "TRUE", the rest return "FALSE".
+// Assumes that the new array size is given by task_team -> tt.tt_nproc.
+// The current size is given by task_team -> tt.tt_max_threads.
+
+static int
+__kmp_realloc_task_threads_data( kmp_info_t *thread, kmp_task_team_t *task_team )
+{
+ kmp_thread_data_t ** threads_data_p;
+ kmp_int32 nthreads, maxthreads;
+ int is_init_thread = FALSE;
+
+ if ( TCR_4(task_team -> tt.tt_found_tasks) ) {
+ // Already reallocated and initialized.
+ return FALSE;
+ }
+
+ threads_data_p = & task_team -> tt.tt_threads_data;
+ nthreads = task_team -> tt.tt_nproc;
+ maxthreads = task_team -> tt.tt_max_threads;
+
+ // All threads must lock when they encounter the first task of the implicit task
+ // region to make sure threads_data fields are (re)initialized before used.
+ __kmp_acquire_bootstrap_lock( & task_team -> tt.tt_threads_lock );
+
+ if ( ! TCR_4(task_team -> tt.tt_found_tasks) ) {
+ // first thread to enable tasking
+ kmp_team_t *team = thread -> th.th_team;
+ int i;
+
+ is_init_thread = TRUE;
+ if ( maxthreads < nthreads ) {
+
+ if ( *threads_data_p != NULL ) {
+ kmp_thread_data_t *old_data = *threads_data_p;
+ kmp_thread_data_t *new_data = NULL;
+
+ KE_TRACE( 10, ( "__kmp_realloc_task_threads_data: T#%d reallocating "
+ "threads data for task_team %p, new_size = %d, old_size = %d\n",
+ __kmp_gtid_from_thread( thread ), task_team,
+ nthreads, maxthreads ) );
+ // Reallocate threads_data to have more elements than current array
+ // Cannot use __kmp_thread_realloc() because threads not around for
+ // kmp_reap_task_team( ). Note all new array entries are initialized
+ // to zero by __kmp_allocate().
+ new_data = (kmp_thread_data_t *)
+ __kmp_allocate( nthreads * sizeof(kmp_thread_data_t) );
+ // copy old data to new data
+ KMP_MEMCPY_S( (void *) new_data, nthreads * sizeof(kmp_thread_data_t),
+ (void *) old_data,
+ maxthreads * sizeof(kmp_taskdata_t *) );
+
+#ifdef BUILD_TIED_TASK_STACK
+ // GEH: Figure out if this is the right thing to do
+ for (i = maxthreads; i < nthreads; i++) {
+ kmp_thread_data_t *thread_data = & (*threads_data_p)[i];
+ __kmp_init_task_stack( __kmp_gtid_from_thread( thread ), thread_data );
+ }
+#endif // BUILD_TIED_TASK_STACK
+ // Install the new data and free the old data
+ (*threads_data_p) = new_data;
+ __kmp_free( old_data );
+ }
+ else {
+ KE_TRACE( 10, ( "__kmp_realloc_task_threads_data: T#%d allocating "
+ "threads data for task_team %p, size = %d\n",
+ __kmp_gtid_from_thread( thread ), task_team, nthreads ) );
+ // Make the initial allocate for threads_data array, and zero entries
+ // Cannot use __kmp_thread_calloc() because threads not around for
+ // kmp_reap_task_team( ).
+ *threads_data_p = (kmp_thread_data_t *)
+ __kmp_allocate( nthreads * sizeof(kmp_thread_data_t) );
+#ifdef BUILD_TIED_TASK_STACK
+ // GEH: Figure out if this is the right thing to do
+ for (i = 0; i < nthreads; i++) {
+ kmp_thread_data_t *thread_data = & (*threads_data_p)[i];
+ __kmp_init_task_stack( __kmp_gtid_from_thread( thread ), thread_data );
+ }
+#endif // BUILD_TIED_TASK_STACK
+ }
+ task_team -> tt.tt_max_threads = nthreads;
+ }
+ else {
+ // If array has (more than) enough elements, go ahead and use it
+ KMP_DEBUG_ASSERT( *threads_data_p != NULL );
+ }
+
+ // initialize threads_data pointers back to thread_info structures
+ for (i = 0; i < nthreads; i++) {
+ kmp_thread_data_t *thread_data = & (*threads_data_p)[i];
+ thread_data -> td.td_thr = team -> t.t_threads[i];
+
+ if ( thread_data -> td.td_deque_last_stolen >= nthreads) {
+ // The last stolen field survives across teams / barrier, and the number
+ // of threads may have changed. It's possible (likely?) that a new
+ // parallel region will exhibit the same behavior as the previous region.
+ thread_data -> td.td_deque_last_stolen = -1;
+ }
+ }
+
+ KMP_MB();
+ TCW_SYNC_4(task_team -> tt.tt_found_tasks, TRUE);
+ }
+
+ __kmp_release_bootstrap_lock( & task_team -> tt.tt_threads_lock );
+ return is_init_thread;
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_free_task_threads_data:
+// Deallocates a threads_data array for a task team, including any attached
+// tasking deques. Only occurs at library shutdown.
+
+static void
+__kmp_free_task_threads_data( kmp_task_team_t *task_team )
+{
+ __kmp_acquire_bootstrap_lock( & task_team -> tt.tt_threads_lock );
+ if ( task_team -> tt.tt_threads_data != NULL ) {
+ int i;
+ for (i = 0; i < task_team->tt.tt_max_threads; i++ ) {
+ __kmp_free_task_deque( & task_team -> tt.tt_threads_data[i] );
+ }
+ __kmp_free( task_team -> tt.tt_threads_data );
+ task_team -> tt.tt_threads_data = NULL;
+ }
+ __kmp_release_bootstrap_lock( & task_team -> tt.tt_threads_lock );
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_allocate_task_team:
+// Allocates a task team associated with a specific team, taking it from
+// the global task team free list if possible. Also initializes data structures.
+
+static kmp_task_team_t *
+__kmp_allocate_task_team( kmp_info_t *thread, kmp_team_t *team )
+{
+ kmp_task_team_t *task_team = NULL;
+ int nthreads;
+
+ KA_TRACE( 20, ( "__kmp_allocate_task_team: T#%d entering; team = %p\n",
+ (thread ? __kmp_gtid_from_thread( thread ) : -1), team ) );
+
+ if (TCR_PTR(__kmp_free_task_teams) != NULL) {
+ // Take a task team from the task team pool
+ __kmp_acquire_bootstrap_lock( &__kmp_task_team_lock );
+ if (__kmp_free_task_teams != NULL) {
+ task_team = __kmp_free_task_teams;
+ TCW_PTR(__kmp_free_task_teams, task_team -> tt.tt_next);
+ task_team -> tt.tt_next = NULL;
+ }
+ __kmp_release_bootstrap_lock( &__kmp_task_team_lock );
+ }
+
+ if (task_team == NULL) {
+ KE_TRACE( 10, ( "__kmp_allocate_task_team: T#%d allocating "
+ "task team for team %p\n",
+ __kmp_gtid_from_thread( thread ), team ) );
+ // Allocate a new task team if one is not available.
+ // Cannot use __kmp_thread_malloc() because threads not around for
+ // kmp_reap_task_team( ).
+ task_team = (kmp_task_team_t *) __kmp_allocate( sizeof(kmp_task_team_t) );
+ __kmp_init_bootstrap_lock( & task_team -> tt.tt_threads_lock );
+ //task_team -> tt.tt_threads_data = NULL; // AC: __kmp_allocate zeroes returned memory
+ //task_team -> tt.tt_max_threads = 0;
+ //task_team -> tt.tt_next = NULL;
+ }
+
+ TCW_4(task_team -> tt.tt_found_tasks, FALSE);
+#if OMP_45_ENABLED
+ TCW_4(task_team -> tt.tt_found_proxy_tasks, FALSE);
+#endif
+ task_team -> tt.tt_nproc = nthreads = team->t.t_nproc;
+
+ TCW_4( task_team -> tt.tt_unfinished_threads, nthreads );
+ TCW_4( task_team -> tt.tt_active, TRUE );
+
+ KA_TRACE( 20, ( "__kmp_allocate_task_team: T#%d exiting; task_team = %p unfinished_threads init'd to %d\n",
+ (thread ? __kmp_gtid_from_thread( thread ) : -1), task_team, task_team -> tt.tt_unfinished_threads) );
+ return task_team;
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_free_task_team:
+// Frees the task team associated with a specific thread, and adds it
+// to the global task team free list.
+
+void
+__kmp_free_task_team( kmp_info_t *thread, kmp_task_team_t *task_team )
+{
+ KA_TRACE( 20, ( "__kmp_free_task_team: T#%d task_team = %p\n",
+ thread ? __kmp_gtid_from_thread( thread ) : -1, task_team ) );
+
+ // Put task team back on free list
+ __kmp_acquire_bootstrap_lock( & __kmp_task_team_lock );
+
+ KMP_DEBUG_ASSERT( task_team -> tt.tt_next == NULL );
+ task_team -> tt.tt_next = __kmp_free_task_teams;
+ TCW_PTR(__kmp_free_task_teams, task_team);
+
+ __kmp_release_bootstrap_lock( & __kmp_task_team_lock );
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_reap_task_teams:
+// Free all the task teams on the task team free list.
+// Should only be done during library shutdown.
+// Cannot do anything that needs a thread structure or gtid since they are already gone.
+
+void
+__kmp_reap_task_teams( void )
+{
+ kmp_task_team_t *task_team;
+
+ if ( TCR_PTR(__kmp_free_task_teams) != NULL ) {
+ // Free all task_teams on the free list
+ __kmp_acquire_bootstrap_lock( &__kmp_task_team_lock );
+ while ( ( task_team = __kmp_free_task_teams ) != NULL ) {
+ __kmp_free_task_teams = task_team -> tt.tt_next;
+ task_team -> tt.tt_next = NULL;
+
+ // Free threads_data if necessary
+ if ( task_team -> tt.tt_threads_data != NULL ) {
+ __kmp_free_task_threads_data( task_team );
+ }
+ __kmp_free( task_team );
+ }
+ __kmp_release_bootstrap_lock( &__kmp_task_team_lock );
+ }
+}
+
+//------------------------------------------------------------------------------
+// __kmp_wait_to_unref_task_teams:
+// Some threads could still be in the fork barrier release code, possibly
+// trying to steal tasks. Wait for each thread to unreference its task team.
+//
+void
+__kmp_wait_to_unref_task_teams(void)
+{
+ kmp_info_t *thread;
+ kmp_uint32 spins;
+ int done;
+
+ KMP_INIT_YIELD( spins );
+
+ for (;;) {
+ done = TRUE;
+
+ // TODO: GEH - this may be is wrong because some sync would be necessary
+ // in case threads are added to the pool during the traversal.
+ // Need to verify that lock for thread pool is held when calling
+ // this routine.
+ for (thread = (kmp_info_t *)__kmp_thread_pool;
+ thread != NULL;
+ thread = thread->th.th_next_pool)
+ {
+#if KMP_OS_WINDOWS
+ DWORD exit_val;
+#endif
+ if ( TCR_PTR(thread->th.th_task_team) == NULL ) {
+ KA_TRACE( 10, ("__kmp_wait_to_unref_task_team: T#%d task_team == NULL\n",
+ __kmp_gtid_from_thread( thread ) ) );
+ continue;
+ }
+#if KMP_OS_WINDOWS
+ // TODO: GEH - add this check for Linux* OS / OS X* as well?
+ if (!__kmp_is_thread_alive(thread, &exit_val)) {
+ thread->th.th_task_team = NULL;
+ continue;
+ }
+#endif
+
+ done = FALSE; // Because th_task_team pointer is not NULL for this thread
+
+ KA_TRACE( 10, ("__kmp_wait_to_unref_task_team: Waiting for T#%d to unreference task_team\n",
+ __kmp_gtid_from_thread( thread ) ) );
+
+ if ( __kmp_dflt_blocktime != KMP_MAX_BLOCKTIME ) {
+ volatile void *sleep_loc;
+ // If the thread is sleeping, awaken it.
+ if ( ( sleep_loc = TCR_PTR( thread->th.th_sleep_loc) ) != NULL ) {
+ KA_TRACE( 10, ( "__kmp_wait_to_unref_task_team: T#%d waking up thread T#%d\n",
+ __kmp_gtid_from_thread( thread ), __kmp_gtid_from_thread( thread ) ) );
+ __kmp_null_resume_wrapper(__kmp_gtid_from_thread(thread), sleep_loc);
+ }
+ }
+ }
+ if (done) {
+ break;
+ }
+
+ // If we are oversubscribed,
+ // or have waited a bit (and library mode is throughput), yield.
+ // Pause is in the following code.
+ KMP_YIELD( TCR_4(__kmp_nth) > __kmp_avail_proc );
+ KMP_YIELD_SPIN( spins ); // Yields only if KMP_LIBRARY=throughput
+ }
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_task_team_setup: Create a task_team for the current team, but use
+// an already created, unused one if it already exists.
+void
+__kmp_task_team_setup( kmp_info_t *this_thr, kmp_team_t *team, int always )
+{
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+
+ // If this task_team hasn't been created yet, allocate it. It will be used in the region after the next.
+ // If it exists, it is the current task team and shouldn't be touched yet as it may still be in use.
+ if (team->t.t_task_team[this_thr->th.th_task_state] == NULL && (always || team->t.t_nproc > 1) ) {
+ team->t.t_task_team[this_thr->th.th_task_state] = __kmp_allocate_task_team( this_thr, team );
+ KA_TRACE(20, ("__kmp_task_team_setup: Master T#%d created new task_team %p for team %d at parity=%d\n",
+ __kmp_gtid_from_thread(this_thr), team->t.t_task_team[this_thr->th.th_task_state],
+ ((team != NULL) ? team->t.t_id : -1), this_thr->th.th_task_state));
+ }
+
+ // After threads exit the release, they will call sync, and then point to this other task_team; make sure it is
+ // allocated and properly initialized. As threads spin in the barrier release phase, they will continue to use the
+ // previous task_team struct(above), until they receive the signal to stop checking for tasks (they can't safely
+ // reference the kmp_team_t struct, which could be reallocated by the master thread). No task teams are formed for
+ // serialized teams.
+ if (team->t.t_nproc > 1) {
+ int other_team = 1 - this_thr->th.th_task_state;
+ if (team->t.t_task_team[other_team] == NULL) { // setup other team as well
+ team->t.t_task_team[other_team] = __kmp_allocate_task_team( this_thr, team );
+ KA_TRACE(20, ("__kmp_task_team_setup: Master T#%d created second new task_team %p for team %d at parity=%d\n",
+ __kmp_gtid_from_thread( this_thr ), team->t.t_task_team[other_team],
+ ((team != NULL) ? team->t.t_id : -1), other_team ));
+ }
+ else { // Leave the old task team struct in place for the upcoming region; adjust as needed
+ kmp_task_team_t *task_team = team->t.t_task_team[other_team];
+ if (!task_team->tt.tt_active || team->t.t_nproc != task_team->tt.tt_nproc) {
+ TCW_4(task_team->tt.tt_nproc, team->t.t_nproc);
+ TCW_4(task_team->tt.tt_found_tasks, FALSE);
+#if OMP_45_ENABLED
+ TCW_4(task_team->tt.tt_found_proxy_tasks, FALSE);
+#endif
+ TCW_4(task_team->tt.tt_unfinished_threads, team->t.t_nproc );
+ TCW_4(task_team->tt.tt_active, TRUE );
+ }
+ // if team size has changed, the first thread to enable tasking will realloc threads_data if necessary
+ KA_TRACE(20, ("__kmp_task_team_setup: Master T#%d reset next task_team %p for team %d at parity=%d\n",
+ __kmp_gtid_from_thread( this_thr ), team->t.t_task_team[other_team],
+ ((team != NULL) ? team->t.t_id : -1), other_team ));
+ }
+ }
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_task_team_sync: Propagation of task team data from team to threads
+// which happens just after the release phase of a team barrier. This may be
+// called by any thread, but only for teams with # threads > 1.
+
+void
+__kmp_task_team_sync( kmp_info_t *this_thr, kmp_team_t *team )
+{
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+
+ // Toggle the th_task_state field, to switch which task_team this thread refers to
+ this_thr->th.th_task_state = 1 - this_thr->th.th_task_state;
+ // It is now safe to propagate the task team pointer from the team struct to the current thread.
+ TCW_PTR(this_thr->th.th_task_team, team->t.t_task_team[this_thr->th.th_task_state]);
+ KA_TRACE(20, ("__kmp_task_team_sync: Thread T#%d task team switched to task_team %p from Team #%d (parity=%d)\n",
+ __kmp_gtid_from_thread( this_thr ), this_thr->th.th_task_team,
+ ((team != NULL) ? team->t.t_id : -1), this_thr->th.th_task_state));
+}
+
+
+//--------------------------------------------------------------------------------------------
+// __kmp_task_team_wait: Master thread waits for outstanding tasks after the barrier gather
+// phase. Only called by master thread if #threads in team > 1 or if proxy tasks were created.
+// wait is a flag that defaults to 1 (see kmp.h), but waiting can be turned off by passing in 0
+// optionally as the last argument. When wait is zero, master thread does not wait for
+// unfinished_threads to reach 0.
+void
+__kmp_task_team_wait( kmp_info_t *this_thr, kmp_team_t *team
+ USE_ITT_BUILD_ARG(void * itt_sync_obj)
+ , int wait)
+{
+ kmp_task_team_t *task_team = team->t.t_task_team[this_thr->th.th_task_state];
+
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode != tskm_immediate_exec );
+ KMP_DEBUG_ASSERT( task_team == this_thr->th.th_task_team );
+
+ if ( ( task_team != NULL ) && KMP_TASKING_ENABLED(task_team) ) {
+ if (wait) {
+ KA_TRACE(20, ("__kmp_task_team_wait: Master T#%d waiting for all tasks (for unfinished_threads to reach 0) on task_team = %p\n",
+ __kmp_gtid_from_thread(this_thr), task_team));
+ // Worker threads may have dropped through to release phase, but could still be executing tasks. Wait
+ // here for tasks to complete. To avoid memory contention, only master thread checks termination condition.
+ kmp_flag_32 flag(&task_team->tt.tt_unfinished_threads, 0U);
+ flag.wait(this_thr, TRUE
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ }
+ // Deactivate the old task team, so that the worker threads will stop referencing it while spinning.
+ KA_TRACE(20, ("__kmp_task_team_wait: Master T#%d deactivating task_team %p: "
+ "setting active to false, setting local and team's pointer to NULL\n",
+ __kmp_gtid_from_thread(this_thr), task_team));
+#if OMP_45_ENABLED
+ KMP_DEBUG_ASSERT( task_team->tt.tt_nproc > 1 || task_team->tt.tt_found_proxy_tasks == TRUE );
+ TCW_SYNC_4( task_team->tt.tt_found_proxy_tasks, FALSE );
+#else
+ KMP_DEBUG_ASSERT( task_team->tt.tt_nproc > 1 );
+#endif
+ TCW_SYNC_4( task_team->tt.tt_active, FALSE );
+ KMP_MB();
+
+ TCW_PTR(this_thr->th.th_task_team, NULL);
+ }
+}
+
+
+//------------------------------------------------------------------------------
+// __kmp_tasking_barrier:
+// This routine may only called when __kmp_tasking_mode == tskm_extra_barrier.
+// Internal function to execute all tasks prior to a regular barrier or a
+// join barrier. It is a full barrier itself, which unfortunately turns
+// regular barriers into double barriers and join barriers into 1 1/2
+// barriers.
+void
+__kmp_tasking_barrier( kmp_team_t *team, kmp_info_t *thread, int gtid )
+{
+ volatile kmp_uint32 *spin = &team->t.t_task_team[thread->th.th_task_state]->tt.tt_unfinished_threads;
+ int flag = FALSE;
+ KMP_DEBUG_ASSERT( __kmp_tasking_mode == tskm_extra_barrier );
+
+#if USE_ITT_BUILD
+ KMP_FSYNC_SPIN_INIT( spin, (kmp_uint32*) NULL );
+#endif /* USE_ITT_BUILD */
+ kmp_flag_32 spin_flag(spin, 0U);
+ while (! spin_flag.execute_tasks(thread, gtid, TRUE, &flag
+ USE_ITT_BUILD_ARG(NULL), 0 ) ) {
+#if USE_ITT_BUILD
+ // TODO: What about itt_sync_obj??
+ KMP_FSYNC_SPIN_PREPARE( spin );
+#endif /* USE_ITT_BUILD */
+
+ if( TCR_4(__kmp_global.g.g_done) ) {
+ if( __kmp_global.g.g_abort )
+ __kmp_abort_thread( );
+ break;
+ }
+ KMP_YIELD( TRUE ); // GH: We always yield here
+ }
+#if USE_ITT_BUILD
+ KMP_FSYNC_SPIN_ACQUIRED( (void*) spin );
+#endif /* USE_ITT_BUILD */
+}
+
+
+#if OMP_45_ENABLED
+
+/* __kmp_give_task puts a task into a given thread queue if:
+ - the queue for that thread was created
+ - there's space in that queue
+
+ Because of this, __kmp_push_task needs to check if there's space after getting the lock
+ */
+static bool __kmp_give_task ( kmp_info_t *thread, kmp_int32 tid, kmp_task_t * task, kmp_int32 pass )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ kmp_task_team_t * task_team = taskdata->td_task_team;
+
+ KA_TRACE(20, ("__kmp_give_task: trying to give task %p to thread %d.\n", taskdata, tid ) );
+
+ // If task_team is NULL something went really bad...
+ KMP_DEBUG_ASSERT( task_team != NULL );
+
+ bool result = false;
+ kmp_thread_data_t * thread_data = & task_team -> tt.tt_threads_data[ tid ];
+
+ if (thread_data -> td.td_deque == NULL ) {
+ // There's no queue in this thread, go find another one
+ // We're guaranteed that at least one thread has a queue
+ KA_TRACE(30, ("__kmp_give_task: thread %d has no queue while giving task %p.\n", tid, taskdata ) );
+ return result;
+ }
+
+ if ( TCR_4(thread_data -> td.td_deque_ntasks) >= TASK_DEQUE_SIZE(thread_data->td) )
+ {
+ KA_TRACE(30, ("__kmp_give_task: queue is full while giving task %p to thread %d.\n", taskdata, tid ) );
+
+ // if this deque is bigger than the pass ratio give a chance to another thread
+ if ( TASK_DEQUE_SIZE(thread_data->td)/INITIAL_TASK_DEQUE_SIZE >= pass ) return result;
+
+ __kmp_acquire_bootstrap_lock( & thread_data-> td.td_deque_lock );
+ __kmp_realloc_task_deque(thread,thread_data);
+
+ } else {
+
+ __kmp_acquire_bootstrap_lock( & thread_data-> td.td_deque_lock );
+
+ if ( TCR_4(thread_data -> td.td_deque_ntasks) >= TASK_DEQUE_SIZE(thread_data->td) )
+ {
+ KA_TRACE(30, ("__kmp_give_task: queue is full while giving task %p to thread %d.\n", taskdata, tid ) );
+
+ // if this deque is bigger than the pass ratio give a chance to another thread
+ if ( TASK_DEQUE_SIZE(thread_data->td)/INITIAL_TASK_DEQUE_SIZE >= pass )
+ goto release_and_exit;
+
+ __kmp_realloc_task_deque(thread,thread_data);
+ }
+ }
+
+ // lock is held here, and there is space in the deque
+
+ thread_data -> td.td_deque[ thread_data -> td.td_deque_tail ] = taskdata;
+ // Wrap index.
+ thread_data -> td.td_deque_tail = ( thread_data -> td.td_deque_tail + 1 ) & TASK_DEQUE_MASK(thread_data->td);
+ TCW_4(thread_data -> td.td_deque_ntasks, TCR_4(thread_data -> td.td_deque_ntasks) + 1);
+
+ result = true;
+ KA_TRACE(30, ("__kmp_give_task: successfully gave task %p to thread %d.\n", taskdata, tid ) );
+
+release_and_exit:
+ __kmp_release_bootstrap_lock( & thread_data-> td.td_deque_lock );
+
+ return result;
+}
+
+
+/* The finish of the a proxy tasks is divided in two pieces:
+ - the top half is the one that can be done from a thread outside the team
+ - the bottom half must be run from a them within the team
+
+ In order to run the bottom half the task gets queued back into one of the threads of the team.
+ Once the td_incomplete_child_task counter of the parent is decremented the threads can leave the barriers.
+ So, the bottom half needs to be queued before the counter is decremented. The top half is therefore divided in two parts:
+ - things that can be run before queuing the bottom half
+ - things that must be run after queuing the bottom half
+
+ This creates a second race as the bottom half can free the task before the second top half is executed. To avoid this
+ we use the td_incomplete_child_task of the proxy task to synchronize the top and bottom half.
+*/
+
+static void __kmp_first_top_half_finish_proxy( kmp_taskdata_t * taskdata )
+{
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.tasktype == TASK_EXPLICIT );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.proxy == TASK_PROXY );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.complete == 0 );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.freed == 0 );
+
+ taskdata -> td_flags.complete = 1; // mark the task as completed
+
+ if ( taskdata->td_taskgroup )
+ KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata->td_taskgroup->count) );
+
+ // Create an imaginary children for this task so the bottom half cannot release the task before we have completed the second top half
+ TCI_4(taskdata->td_incomplete_child_tasks);
+}
+
+static void __kmp_second_top_half_finish_proxy( kmp_taskdata_t * taskdata )
+{
+ kmp_int32 children = 0;
+
+ // Predecrement simulated by "- 1" calculation
+ children = KMP_TEST_THEN_DEC32( (kmp_int32 *)(& taskdata -> td_parent -> td_incomplete_child_tasks) ) - 1;
+ KMP_DEBUG_ASSERT( children >= 0 );
+
+ // Remove the imaginary children
+ TCD_4(taskdata->td_incomplete_child_tasks);
+}
+
+static void __kmp_bottom_half_finish_proxy( kmp_int32 gtid, kmp_task_t * ptask )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(ptask);
+ kmp_info_t * thread = __kmp_threads[ gtid ];
+
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.proxy == TASK_PROXY );
+ KMP_DEBUG_ASSERT( taskdata -> td_flags.complete == 1 ); // top half must run before bottom half
+
+ // We need to wait to make sure the top half is finished
+ // Spinning here should be ok as this should happen quickly
+ while ( TCR_4(taskdata->td_incomplete_child_tasks) > 0 ) ;
+
+ __kmp_release_deps(gtid,taskdata);
+ __kmp_free_task_and_ancestors(gtid, taskdata, thread);
+}
+
+/*!
+@ingroup TASKING
+@param gtid Global Thread ID of encountering thread
+@param ptask Task which execution is completed
+
+Execute the completation of a proxy task from a thread of that is part of the team. Run first and bottom halves directly.
+*/
+void __kmpc_proxy_task_completed( kmp_int32 gtid, kmp_task_t *ptask )
+{
+ KMP_DEBUG_ASSERT( ptask != NULL );
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(ptask);
+ KA_TRACE(10, ("__kmp_proxy_task_completed(enter): T#%d proxy task %p completing\n", gtid, taskdata ) );
+
+ KMP_DEBUG_ASSERT( taskdata->td_flags.proxy == TASK_PROXY );
+
+ __kmp_first_top_half_finish_proxy(taskdata);
+ __kmp_second_top_half_finish_proxy(taskdata);
+ __kmp_bottom_half_finish_proxy(gtid,ptask);
+
+ KA_TRACE(10, ("__kmp_proxy_task_completed(exit): T#%d proxy task %p completing\n", gtid, taskdata ) );
+}
+
+/*!
+@ingroup TASKING
+@param ptask Task which execution is completed
+
+Execute the completation of a proxy task from a thread that could not belong to the team.
+*/
+void __kmpc_proxy_task_completed_ooo ( kmp_task_t *ptask )
+{
+ KMP_DEBUG_ASSERT( ptask != NULL );
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(ptask);
+
+ KA_TRACE(10, ("__kmp_proxy_task_completed_ooo(enter): proxy task completing ooo %p\n", taskdata ) );
+
+ KMP_DEBUG_ASSERT( taskdata->td_flags.proxy == TASK_PROXY );
+
+ __kmp_first_top_half_finish_proxy(taskdata);
+
+ // Enqueue task to complete bottom half completion from a thread within the corresponding team
+ kmp_team_t * team = taskdata->td_team;
+ kmp_int32 nthreads = team->t.t_nproc;
+ kmp_info_t *thread;
+
+ //This should be similar to start_k = __kmp_get_random( thread ) % nthreads but we cannot use __kmp_get_random here
+ kmp_int32 start_k = 0;
+ kmp_int32 pass = 1;
+ kmp_int32 k = start_k;
+
+ do {
+ //For now we're just linearly trying to find a thread
+ thread = team->t.t_threads[k];
+ k = (k+1) % nthreads;
+
+ // we did a full pass through all the threads
+ if ( k == start_k ) pass = pass << 1;
+
+ } while ( !__kmp_give_task( thread, k, ptask, pass ) );
+
+ __kmp_second_top_half_finish_proxy(taskdata);
+
+ KA_TRACE(10, ("__kmp_proxy_task_completed_ooo(exit): proxy task completing ooo %p\n", taskdata ) );
+}
+
+//---------------------------------------------------------------------------------
+// __kmp_task_dup_alloc: Allocate the taskdata and make a copy of source task for taskloop
+//
+// thread: allocating thread
+// task_src: pointer to source task to be duplicated
+// returns: a pointer to the allocated kmp_task_t structure (task).
+kmp_task_t *
+__kmp_task_dup_alloc( kmp_info_t *thread, kmp_task_t *task_src )
+{
+ kmp_task_t *task;
+ kmp_taskdata_t *taskdata;
+ kmp_taskdata_t *taskdata_src;
+ kmp_taskdata_t *parent_task = thread->th.th_current_task;
+ size_t shareds_offset;
+ size_t task_size;
+
+ KA_TRACE(10, ("__kmp_task_dup_alloc(enter): Th %p, source task %p\n", thread, task_src) );
+ taskdata_src = KMP_TASK_TO_TASKDATA( task_src );
+ KMP_DEBUG_ASSERT( taskdata_src->td_flags.proxy == TASK_FULL ); // it should not be proxy task
+ KMP_DEBUG_ASSERT( taskdata_src->td_flags.tasktype == TASK_EXPLICIT );
+ task_size = taskdata_src->td_size_alloc;
+
+ // Allocate a kmp_taskdata_t block and a kmp_task_t block.
+ KA_TRACE(30, ("__kmp_task_dup_alloc: Th %p, malloc size %ld\n", thread, task_size) );
+ #if USE_FAST_MEMORY
+ taskdata = (kmp_taskdata_t *)__kmp_fast_allocate( thread, task_size );
+ #else
+ taskdata = (kmp_taskdata_t *)__kmp_thread_malloc( thread, task_size );
+ #endif /* USE_FAST_MEMORY */
+ KMP_MEMCPY(taskdata, taskdata_src, task_size);
+
+ task = KMP_TASKDATA_TO_TASK(taskdata);
+
+ // Initialize new task (only specific fields not affected by memcpy)
+ taskdata->td_task_id = KMP_GEN_TASK_ID();
+ if( task->shareds != NULL ) { // need setup shareds pointer
+ shareds_offset = (char*)task_src->shareds - (char*)taskdata_src;
+ task->shareds = &((char*)taskdata)[shareds_offset];
+ KMP_DEBUG_ASSERT( (((kmp_uintptr_t)task->shareds) & (sizeof(void*)-1)) == 0 );
+ }
+ taskdata->td_alloc_thread = thread;
+ taskdata->td_taskgroup = parent_task->td_taskgroup; // task inherits the taskgroup from the parent task
+
+ // Only need to keep track of child task counts if team parallel and tasking not serialized
+ if ( !( taskdata->td_flags.team_serial || taskdata->td_flags.tasking_ser ) ) {
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& parent_task->td_incomplete_child_tasks) );
+ if ( parent_task->td_taskgroup )
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& parent_task->td_taskgroup->count) );
+ // Only need to keep track of allocated child tasks for explicit tasks since implicit not deallocated
+ if ( taskdata->td_parent->td_flags.tasktype == TASK_EXPLICIT )
+ KMP_TEST_THEN_INC32( (kmp_int32 *)(& taskdata->td_parent->td_allocated_child_tasks) );
+ }
+
+ KA_TRACE(20, ("__kmp_task_dup_alloc(exit): Th %p, created task %p, parent=%p\n",
+ thread, taskdata, taskdata->td_parent) );
+#if OMPT_SUPPORT
+ __kmp_task_init_ompt(taskdata, thread->th.th_info.ds.ds_gtid, (void*)task->routine);
+#endif
+ return task;
+}
+
+// Routine optionally generated by th ecompiler for setting the lastprivate flag
+// and calling needed constructors for private/firstprivate objects
+// (used to form taskloop tasks from pattern task)
+typedef void(*p_task_dup_t)(kmp_task_t *, kmp_task_t *, kmp_int32);
+
+//---------------------------------------------------------------------------------
+// __kmp_taskloop_linear: Start tasks of the taskloop linearly
+//
+// loc Source location information
+// gtid Global thread ID
+// task Task with whole loop iteration range
+// lb Pointer to loop lower bound
+// ub Pointer to loop upper bound
+// st Loop stride
+// sched Schedule specified 0/1/2 for none/grainsize/num_tasks
+// grainsize Schedule value if specified
+// task_dup Tasks duplication routine
+void
+__kmp_taskloop_linear(ident_t *loc, int gtid, kmp_task_t *task,
+ kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st,
+ int sched, kmp_uint64 grainsize, void *task_dup )
+{
+ KMP_COUNT_BLOCK(OMP_TASKLOOP);
+ KMP_TIME_PARTITIONED_BLOCK(OMP_taskloop_scheduling);
+ p_task_dup_t ptask_dup = (p_task_dup_t)task_dup;
+ kmp_uint64 tc;
+ kmp_uint64 lower = *lb; // compiler provides global bounds here
+ kmp_uint64 upper = *ub;
+ kmp_uint64 i, num_tasks = 0, extras = 0;
+ kmp_info_t *thread = __kmp_threads[gtid];
+ kmp_taskdata_t *current_task = thread->th.th_current_task;
+ kmp_task_t *next_task;
+ kmp_int32 lastpriv = 0;
+ size_t lower_offset = (char*)lb - (char*)task; // remember offset of lb in the task structure
+ size_t upper_offset = (char*)ub - (char*)task; // remember offset of ub in the task structure
+
+ // compute trip count
+ if ( st == 1 ) { // most common case
+ tc = upper - lower + 1;
+ } else if ( st < 0 ) {
+ tc = (lower - upper) / (-st) + 1;
+ } else { // st > 0
+ tc = (upper - lower) / st + 1;
+ }
+ if(tc == 0) {
+ KA_TRACE(20, ("__kmpc_taskloop(exit): T#%d zero-trip loop\n", gtid));
+ // free the pattern task and exit
+ __kmp_task_start( gtid, task, current_task );
+ // do not execute anything for zero-trip loop
+ __kmp_task_finish( gtid, task, current_task );
+ return;
+ }
+
+ // compute num_tasks/grainsize based on the input provided
+ switch( sched ) {
+ case 0: // no schedule clause specified, we can choose the default
+ // let's try to schedule (team_size*10) tasks
+ grainsize = thread->th.th_team_nproc * 10;
+ case 2: // num_tasks provided
+ if( grainsize > tc ) {
+ num_tasks = tc; // too big num_tasks requested, adjust values
+ grainsize = 1;
+ extras = 0;
+ } else {
+ num_tasks = grainsize;
+ grainsize = tc / num_tasks;
+ extras = tc % num_tasks;
+ }
+ break;
+ case 1: // grainsize provided
+ if( grainsize > tc ) {
+ num_tasks = 1; // too big grainsize requested, adjust values
+ grainsize = tc;
+ extras = 0;
+ } else {
+ num_tasks = tc / grainsize;
+ grainsize = tc / num_tasks; // adjust grainsize for balanced distribution of iterations
+ extras = tc % num_tasks;
+ }
+ break;
+ default:
+ KMP_ASSERT2(0, "unknown scheduling of taskloop");
+ }
+ KMP_DEBUG_ASSERT(tc == num_tasks * grainsize + extras);
+ KMP_DEBUG_ASSERT(num_tasks > extras);
+ KMP_DEBUG_ASSERT(num_tasks > 0);
+ KA_TRACE(20, ("__kmpc_taskloop: T#%d will launch: num_tasks %lld, grainsize %lld, extras %lld\n",
+ gtid, num_tasks, grainsize, extras));
+
+ // Main loop, launch num_tasks tasks, assign grainsize iterations each task
+ for( i = 0; i < num_tasks; ++i ) {
+ kmp_uint64 chunk_minus_1;
+ if( extras == 0 ) {
+ chunk_minus_1 = grainsize - 1;
+ } else {
+ chunk_minus_1 = grainsize;
+ --extras; // first extras iterations get bigger chunk (grainsize+1)
+ }
+ upper = lower + st * chunk_minus_1;
+ if( i == num_tasks - 1 ) {
+ // schedule the last task, set lastprivate flag
+ lastpriv = 1;
+#if KMP_DEBUG
+ if( st == 1 )
+ KMP_DEBUG_ASSERT(upper == *ub);
+ else if( st > 0 )
+ KMP_DEBUG_ASSERT(upper+st > *ub);
+ else
+ KMP_DEBUG_ASSERT(upper+st < *ub);
+#endif
+ }
+ next_task = __kmp_task_dup_alloc(thread, task); // allocate new task
+ *(kmp_uint64*)((char*)next_task + lower_offset) = lower; // adjust task-specific bounds
+ *(kmp_uint64*)((char*)next_task + upper_offset) = upper;
+ if( ptask_dup != NULL )
+ ptask_dup(next_task, task, lastpriv); // set lastprivate flag, construct fistprivates, etc.
+ KA_TRACE(20, ("__kmpc_taskloop: T#%d schedule task %p: lower %lld, upper %lld (offsets %p %p)\n",
+ gtid, next_task, lower, upper, lower_offset, upper_offset));
+ __kmp_omp_task(gtid, next_task, true); // schedule new task
+ lower = upper + st; // adjust lower bound for the next iteration
+ }
+ // free the pattern task and exit
+ __kmp_task_start( gtid, task, current_task );
+ // do not execute the pattern task, just do bookkeeping
+ __kmp_task_finish( gtid, task, current_task );
+}
+
+/*!
+@ingroup TASKING
+@param loc Source location information
+@param gtid Global thread ID
+@param task Task structure
+@param if_val Value of the if clause
+@param lb Pointer to loop lower bound
+@param ub Pointer to loop upper bound
+@param st Loop stride
+@param nogroup Flag, 1 if nogroup clause specified, 0 otherwise
+@param sched Schedule specified 0/1/2 for none/grainsize/num_tasks
+@param grainsize Schedule value if specified
+@param task_dup Tasks duplication routine
+
+Execute the taskloop construct.
+*/
+void
+__kmpc_taskloop(ident_t *loc, int gtid, kmp_task_t *task, int if_val,
+ kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st,
+ int nogroup, int sched, kmp_uint64 grainsize, void *task_dup )
+{
+ kmp_taskdata_t * taskdata = KMP_TASK_TO_TASKDATA(task);
+ KMP_DEBUG_ASSERT( task != NULL );
+
+ KA_TRACE(10, ("__kmpc_taskloop(enter): T#%d, pattern task %p, lb %lld ub %lld st %lld, grain %llu(%d)\n",
+ gtid, taskdata, *lb, *ub, st, grainsize, sched));
+
+ // check if clause value first
+ if( if_val == 0 ) { // if(0) specified, mark task as serial
+ taskdata->td_flags.task_serial = 1;
+ taskdata->td_flags.tiedness = TASK_TIED; // AC: serial task cannot be untied
+ }
+ if( nogroup == 0 ) {
+ __kmpc_taskgroup( loc, gtid );
+ }
+
+ if( 1 /* AC: use some heuristic here to choose task scheduling method */ ) {
+ __kmp_taskloop_linear( loc, gtid, task, lb, ub, st, sched, grainsize, task_dup );
+ }
+
+ if( nogroup == 0 ) {
+ __kmpc_end_taskgroup( loc, gtid );
+ }
+ KA_TRACE(10, ("__kmpc_taskloop(exit): T#%d\n", gtid));
+}
+
+#endif
diff --git a/final/runtime/src/kmp_taskq.c b/final/runtime/src/kmp_taskq.c
new file mode 100644
index 0000000..3079d45
--- /dev/null
+++ b/final/runtime/src/kmp_taskq.c
@@ -0,0 +1,2032 @@
+/*
+ * kmp_taskq.c -- TASKQ support for OpenMP.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+#include "kmp_error.h"
+
+#define MAX_MESSAGE 512
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Taskq routines and global variables
+ */
+
+#define KMP_DEBUG_REF_CTS(x) KF_TRACE(1, x);
+
+#define THREAD_ALLOC_FOR_TASKQ
+
+static int
+in_parallel_context( kmp_team_t *team )
+{
+ return ! team -> t.t_serialized;
+}
+
+static void
+__kmp_taskq_eo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ int gtid = *gtid_ref;
+ int tid = __kmp_tid_from_gtid( gtid );
+ kmp_uint32 my_token;
+ kmpc_task_queue_t *taskq;
+ kmp_taskq_t *tq = & __kmp_threads[gtid] -> th.th_team -> t.t_taskq;
+
+ if ( __kmp_env_consistency_check )
+#if KMP_USE_DYNAMIC_LOCK
+ __kmp_push_sync( gtid, ct_ordered_in_taskq, loc_ref, NULL, 0 );
+#else
+ __kmp_push_sync( gtid, ct_ordered_in_taskq, loc_ref, NULL );
+#endif
+
+ if ( ! __kmp_threads[ gtid ]-> th.th_team -> t.t_serialized ) {
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* GEH - need check here under stats to make sure */
+ /* inside task (curr_thunk[*tid_ref] != NULL) */
+
+ my_token =tq->tq_curr_thunk[ tid ]-> th_tasknum;
+
+ taskq = tq->tq_curr_thunk[ tid ]-> th.th_shareds -> sv_queue;
+
+ KMP_WAIT_YIELD(&taskq->tq_tasknum_serving, my_token, KMP_EQ, NULL);
+ KMP_MB();
+ }
+}
+
+static void
+__kmp_taskq_xo( int *gtid_ref, int *cid_ref, ident_t *loc_ref )
+{
+ int gtid = *gtid_ref;
+ int tid = __kmp_tid_from_gtid( gtid );
+ kmp_uint32 my_token;
+ kmp_taskq_t *tq = & __kmp_threads[gtid] -> th.th_team -> t.t_taskq;
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_sync( gtid, ct_ordered_in_taskq, loc_ref );
+
+ if ( ! __kmp_threads[ gtid ]-> th.th_team -> t.t_serialized ) {
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* GEH - need check here under stats to make sure */
+ /* inside task (curr_thunk[tid] != NULL) */
+
+ my_token = tq->tq_curr_thunk[ tid ]->th_tasknum;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ tq->tq_curr_thunk[ tid ]-> th.th_shareds -> sv_queue -> tq_tasknum_serving = my_token + 1;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+}
+
+static void
+__kmp_taskq_check_ordered( kmp_int32 gtid, kmpc_thunk_t *thunk )
+{
+ kmp_uint32 my_token;
+ kmpc_task_queue_t *taskq;
+
+ /* assume we are always called from an active parallel context */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ my_token = thunk -> th_tasknum;
+
+ taskq = thunk -> th.th_shareds -> sv_queue;
+
+ if(taskq->tq_tasknum_serving <= my_token) {
+ KMP_WAIT_YIELD(&taskq->tq_tasknum_serving, my_token, KMP_GE, NULL);
+ KMP_MB();
+ taskq->tq_tasknum_serving = my_token +1;
+ KMP_MB();
+ }
+}
+
+#ifdef KMP_DEBUG
+
+static void
+__kmp_dump_TQF(kmp_int32 flags)
+{
+ if (flags & TQF_IS_ORDERED)
+ __kmp_printf("ORDERED ");
+ if (flags & TQF_IS_LASTPRIVATE)
+ __kmp_printf("LAST_PRIV ");
+ if (flags & TQF_IS_NOWAIT)
+ __kmp_printf("NOWAIT ");
+ if (flags & TQF_HEURISTICS)
+ __kmp_printf("HEURIST ");
+ if (flags & TQF_INTERFACE_RESERVED1)
+ __kmp_printf("RESERV1 ");
+ if (flags & TQF_INTERFACE_RESERVED2)
+ __kmp_printf("RESERV2 ");
+ if (flags & TQF_INTERFACE_RESERVED3)
+ __kmp_printf("RESERV3 ");
+ if (flags & TQF_INTERFACE_RESERVED4)
+ __kmp_printf("RESERV4 ");
+ if (flags & TQF_IS_LAST_TASK)
+ __kmp_printf("LAST_TASK ");
+ if (flags & TQF_TASKQ_TASK)
+ __kmp_printf("TASKQ_TASK ");
+ if (flags & TQF_RELEASE_WORKERS)
+ __kmp_printf("RELEASE ");
+ if (flags & TQF_ALL_TASKS_QUEUED)
+ __kmp_printf("ALL_QUEUED ");
+ if (flags & TQF_PARALLEL_CONTEXT)
+ __kmp_printf("PARALLEL ");
+ if (flags & TQF_DEALLOCATED)
+ __kmp_printf("DEALLOC ");
+ if (!(flags & (TQF_INTERNAL_FLAGS|TQF_INTERFACE_FLAGS)))
+ __kmp_printf("(NONE)");
+}
+
+static void
+__kmp_dump_thunk( kmp_taskq_t *tq, kmpc_thunk_t *thunk, kmp_int32 global_tid )
+{
+ int i;
+ int nproc = __kmp_threads[global_tid] -> th.th_team -> t.t_nproc;
+
+ __kmp_printf("\tThunk at %p on (%d): ", thunk, global_tid);
+
+ if (thunk != NULL) {
+ for (i = 0; i < nproc; i++) {
+ if( tq->tq_curr_thunk[i] == thunk ) {
+ __kmp_printf("[%i] ", i);
+ }
+ }
+ __kmp_printf("th_shareds=%p, ", thunk->th.th_shareds);
+ __kmp_printf("th_task=%p, ", thunk->th_task);
+ __kmp_printf("th_encl_thunk=%p, ", thunk->th_encl_thunk);
+ __kmp_printf("th_status=%d, ", thunk->th_status);
+ __kmp_printf("th_tasknum=%u, ", thunk->th_tasknum);
+ __kmp_printf("th_flags="); __kmp_dump_TQF(thunk->th_flags);
+ }
+
+ __kmp_printf("\n");
+}
+
+static void
+__kmp_dump_thunk_stack(kmpc_thunk_t *thunk, kmp_int32 thread_num)
+{
+ kmpc_thunk_t *th;
+
+ __kmp_printf(" Thunk stack for T#%d: ", thread_num);
+
+ for (th = thunk; th != NULL; th = th->th_encl_thunk )
+ __kmp_printf("%p ", th);
+
+ __kmp_printf("\n");
+}
+
+static void
+__kmp_dump_task_queue( kmp_taskq_t *tq, kmpc_task_queue_t *queue, kmp_int32 global_tid )
+{
+ int qs, count, i;
+ kmpc_thunk_t *thunk;
+ kmpc_task_queue_t *taskq;
+
+ __kmp_printf("Task Queue at %p on (%d):\n", queue, global_tid);
+
+ if (queue != NULL) {
+ int in_parallel = queue->tq_flags & TQF_PARALLEL_CONTEXT;
+
+ if ( __kmp_env_consistency_check ) {
+ __kmp_printf(" tq_loc : ");
+ }
+ if (in_parallel) {
+
+ //if (queue->tq.tq_parent != 0)
+ //__kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ //__kmp_acquire_lock(& queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ __kmp_printf(" tq_parent : %p\n", queue->tq.tq_parent);
+ __kmp_printf(" tq_first_child : %p\n", queue->tq_first_child);
+ __kmp_printf(" tq_next_child : %p\n", queue->tq_next_child);
+ __kmp_printf(" tq_prev_child : %p\n", queue->tq_prev_child);
+ __kmp_printf(" tq_ref_count : %d\n", queue->tq_ref_count);
+
+ //__kmp_release_lock(& queue->tq_link_lck, global_tid);
+
+ //if (queue->tq.tq_parent != 0)
+ //__kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ //__kmp_acquire_lock(& queue->tq_free_thunks_lck, global_tid);
+ //__kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ __kmp_printf(" tq_shareds : ");
+ for (i=0; i<((queue == tq->tq_root) ? queue->tq_nproc : 1); i++)
+ __kmp_printf("%p ", queue->tq_shareds[i].ai_data);
+ __kmp_printf("\n");
+
+ if (in_parallel) {
+ __kmp_printf(" tq_tasknum_queuing : %u\n", queue->tq_tasknum_queuing);
+ __kmp_printf(" tq_tasknum_serving : %u\n", queue->tq_tasknum_serving);
+ }
+
+ __kmp_printf(" tq_queue : %p\n", queue->tq_queue);
+ __kmp_printf(" tq_thunk_space : %p\n", queue->tq_thunk_space);
+ __kmp_printf(" tq_taskq_slot : %p\n", queue->tq_taskq_slot);
+
+ __kmp_printf(" tq_free_thunks : ");
+ for (thunk = queue->tq_free_thunks; thunk != NULL; thunk = thunk->th.th_next_free )
+ __kmp_printf("%p ", thunk);
+ __kmp_printf("\n");
+
+ __kmp_printf(" tq_nslots : %d\n", queue->tq_nslots);
+ __kmp_printf(" tq_head : %d\n", queue->tq_head);
+ __kmp_printf(" tq_tail : %d\n", queue->tq_tail);
+ __kmp_printf(" tq_nfull : %d\n", queue->tq_nfull);
+ __kmp_printf(" tq_hiwat : %d\n", queue->tq_hiwat);
+ __kmp_printf(" tq_flags : "); __kmp_dump_TQF(queue->tq_flags);
+ __kmp_printf("\n");
+
+ if (in_parallel) {
+ __kmp_printf(" tq_th_thunks : ");
+ for (i = 0; i < queue->tq_nproc; i++) {
+ __kmp_printf("%d ", queue->tq_th_thunks[i].ai_data);
+ }
+ __kmp_printf("\n");
+ }
+
+ __kmp_printf("\n");
+ __kmp_printf(" Queue slots:\n");
+
+
+ qs = queue->tq_tail;
+ for ( count = 0; count < queue->tq_nfull; ++count ) {
+ __kmp_printf("(%d)", qs);
+ __kmp_dump_thunk( tq, queue->tq_queue[qs].qs_thunk, global_tid );
+ qs = (qs+1) % queue->tq_nslots;
+ }
+
+ __kmp_printf("\n");
+
+ if (in_parallel) {
+ if (queue->tq_taskq_slot != NULL) {
+ __kmp_printf(" TaskQ slot:\n");
+ __kmp_dump_thunk( tq, (kmpc_thunk_t *) queue->tq_taskq_slot, global_tid );
+ __kmp_printf("\n");
+ }
+ //__kmp_release_lock(& queue->tq_queue_lck, global_tid);
+ //__kmp_release_lock(& queue->tq_free_thunks_lck, global_tid);
+ }
+ }
+
+ __kmp_printf(" Taskq freelist: ");
+
+ //__kmp_acquire_lock( & tq->tq_freelist_lck, global_tid );
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ for( taskq = tq->tq_freelist; taskq != NULL; taskq = taskq->tq.tq_next_free )
+ __kmp_printf("%p ", taskq);
+
+ //__kmp_release_lock( & tq->tq_freelist_lck, global_tid );
+
+ __kmp_printf("\n\n");
+}
+
+static void
+__kmp_aux_dump_task_queue_tree( kmp_taskq_t *tq, kmpc_task_queue_t *curr_queue, kmp_int32 level, kmp_int32 global_tid )
+{
+ int i, count, qs;
+ int nproc = __kmp_threads[global_tid] -> th.th_team -> t.t_nproc;
+ kmpc_task_queue_t *queue = curr_queue;
+
+ if (curr_queue == NULL)
+ return;
+
+ __kmp_printf(" ");
+
+ for (i=0; i<level; i++)
+ __kmp_printf(" ");
+
+ __kmp_printf("%p", curr_queue);
+
+ for (i = 0; i < nproc; i++) {
+ if( tq->tq_curr_thunk[i] && tq->tq_curr_thunk[i]->th.th_shareds->sv_queue == curr_queue ) {
+ __kmp_printf(" [%i]", i);
+ }
+ }
+
+ __kmp_printf(":");
+
+ //__kmp_acquire_lock(& curr_queue->tq_queue_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ qs = curr_queue->tq_tail;
+
+ for ( count = 0; count < curr_queue->tq_nfull; ++count ) {
+ __kmp_printf("%p ", curr_queue->tq_queue[qs].qs_thunk);
+ qs = (qs+1) % curr_queue->tq_nslots;
+ }
+
+ //__kmp_release_lock(& curr_queue->tq_queue_lck, global_tid);
+
+ __kmp_printf("\n");
+
+ if (curr_queue->tq_first_child) {
+ //__kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ if (curr_queue->tq_first_child) {
+ for(queue = (kmpc_task_queue_t *)curr_queue->tq_first_child;
+ queue != NULL;
+ queue = queue->tq_next_child) {
+ __kmp_aux_dump_task_queue_tree( tq, queue, level+1, global_tid );
+ }
+ }
+
+ //__kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ }
+}
+
+static void
+__kmp_dump_task_queue_tree( kmp_taskq_t *tq, kmpc_task_queue_t *tqroot, kmp_int32 global_tid)
+{
+ __kmp_printf("TaskQ Tree at root %p on (%d):\n", tqroot, global_tid);
+
+ __kmp_aux_dump_task_queue_tree( tq, tqroot, 0, global_tid );
+
+ __kmp_printf("\n");
+}
+#endif
+
+/* --------------------------------------------------------------------------- */
+
+/*
+ New taskq storage routines that try to minimize overhead of mallocs but
+ still provide cache line alignment.
+*/
+
+
+static void *
+__kmp_taskq_allocate(size_t size, kmp_int32 global_tid)
+{
+ void *addr, *orig_addr;
+ size_t bytes;
+
+ KB_TRACE( 5, ("__kmp_taskq_allocate: called size=%d, gtid=%d\n", (int) size, global_tid ) );
+
+ bytes = sizeof(void *) + CACHE_LINE + size;
+
+#ifdef THREAD_ALLOC_FOR_TASKQ
+ orig_addr = (void *) __kmp_thread_malloc( __kmp_thread_from_gtid(global_tid), bytes );
+#else
+ KE_TRACE( 10, ("%%%%%% MALLOC( %d )\n", bytes ) );
+ orig_addr = (void *) KMP_INTERNAL_MALLOC( bytes );
+#endif /* THREAD_ALLOC_FOR_TASKQ */
+
+ if (orig_addr == 0)
+ KMP_FATAL( OutOfHeapMemory );
+
+ addr = orig_addr;
+
+ if (((kmp_uintptr_t) addr & ( CACHE_LINE - 1 )) != 0) {
+ KB_TRACE( 50, ("__kmp_taskq_allocate: adjust for cache alignment\n" ) );
+ addr = (void *) (((kmp_uintptr_t) addr + CACHE_LINE) & ~( CACHE_LINE - 1 ));
+ }
+
+ (* (void **) addr) = orig_addr;
+
+ KB_TRACE( 10, ("__kmp_taskq_allocate: allocate: %p, use: %p - %p, size: %d, gtid: %d\n",
+ orig_addr, ((void **) addr) + 1, ((char *)(((void **) addr) + 1)) + size-1,
+ (int) size, global_tid ));
+
+ return ( ((void **) addr) + 1 );
+}
+
+static void
+__kmpc_taskq_free(void *p, kmp_int32 global_tid)
+{
+ KB_TRACE( 5, ("__kmpc_taskq_free: called addr=%p, gtid=%d\n", p, global_tid ) );
+
+ KB_TRACE(10, ("__kmpc_taskq_free: freeing: %p, gtid: %d\n", (*( ((void **) p)-1)), global_tid ));
+
+#ifdef THREAD_ALLOC_FOR_TASKQ
+ __kmp_thread_free( __kmp_thread_from_gtid(global_tid), *( ((void **) p)-1) );
+#else
+ KMP_INTERNAL_FREE( *( ((void **) p)-1) );
+#endif /* THREAD_ALLOC_FOR_TASKQ */
+}
+
+/* --------------------------------------------------------------------------- */
+
+/*
+ * Keep freed kmpc_task_queue_t on an internal freelist and recycle since
+ * they're of constant size.
+ */
+
+static kmpc_task_queue_t *
+__kmp_alloc_taskq ( kmp_taskq_t *tq, int in_parallel, kmp_int32 nslots, kmp_int32 nthunks,
+ kmp_int32 nshareds, kmp_int32 nproc, size_t sizeof_thunk,
+ size_t sizeof_shareds, kmpc_thunk_t **new_taskq_thunk, kmp_int32 global_tid )
+{
+ kmp_int32 i;
+ size_t bytes;
+ kmpc_task_queue_t *new_queue;
+ kmpc_aligned_shared_vars_t *shared_var_array;
+ char *shared_var_storage;
+ char *pt; /* for doing byte-adjusted address computations */
+
+ __kmp_acquire_lock( & tq->tq_freelist_lck, global_tid );
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ if( tq->tq_freelist ) {
+ new_queue = tq -> tq_freelist;
+ tq -> tq_freelist = tq -> tq_freelist -> tq.tq_next_free;
+
+ KMP_DEBUG_ASSERT(new_queue->tq_flags & TQF_DEALLOCATED);
+
+ new_queue->tq_flags = 0;
+
+ __kmp_release_lock( & tq->tq_freelist_lck, global_tid );
+ }
+ else {
+ __kmp_release_lock( & tq->tq_freelist_lck, global_tid );
+
+ new_queue = (kmpc_task_queue_t *) __kmp_taskq_allocate (sizeof (kmpc_task_queue_t), global_tid);
+ new_queue->tq_flags = 0;
+ }
+
+ /* space in the task queue for queue slots (allocate as one big chunk */
+ /* of storage including new_taskq_task space) */
+
+ sizeof_thunk += (CACHE_LINE - (sizeof_thunk % CACHE_LINE)); /* pad to cache line size */
+ pt = (char *) __kmp_taskq_allocate (nthunks * sizeof_thunk, global_tid);
+ new_queue->tq_thunk_space = (kmpc_thunk_t *)pt;
+ *new_taskq_thunk = (kmpc_thunk_t *)(pt + (nthunks - 1) * sizeof_thunk);
+
+ /* chain the allocated thunks into a freelist for this queue */
+
+ new_queue->tq_free_thunks = (kmpc_thunk_t *)pt;
+
+ for (i = 0; i < (nthunks - 2); i++) {
+ ((kmpc_thunk_t *)(pt+i*sizeof_thunk))->th.th_next_free = (kmpc_thunk_t *)(pt + (i+1)*sizeof_thunk);
+#ifdef KMP_DEBUG
+ ((kmpc_thunk_t *)(pt+i*sizeof_thunk))->th_flags = TQF_DEALLOCATED;
+#endif
+ }
+
+ ((kmpc_thunk_t *)(pt+(nthunks-2)*sizeof_thunk))->th.th_next_free = NULL;
+#ifdef KMP_DEBUG
+ ((kmpc_thunk_t *)(pt+(nthunks-2)*sizeof_thunk))->th_flags = TQF_DEALLOCATED;
+#endif
+
+ /* initialize the locks */
+
+ if (in_parallel) {
+ __kmp_init_lock( & new_queue->tq_link_lck );
+ __kmp_init_lock( & new_queue->tq_free_thunks_lck );
+ __kmp_init_lock( & new_queue->tq_queue_lck );
+ }
+
+ /* now allocate the slots */
+
+ bytes = nslots * sizeof (kmpc_aligned_queue_slot_t);
+ new_queue->tq_queue = (kmpc_aligned_queue_slot_t *) __kmp_taskq_allocate( bytes, global_tid );
+
+ /* space for array of pointers to shared variable structures */
+ sizeof_shareds += sizeof(kmpc_task_queue_t *);
+ sizeof_shareds += (CACHE_LINE - (sizeof_shareds % CACHE_LINE)); /* pad to cache line size */
+
+ bytes = nshareds * sizeof (kmpc_aligned_shared_vars_t);
+ shared_var_array = (kmpc_aligned_shared_vars_t *) __kmp_taskq_allocate ( bytes, global_tid);
+
+ bytes = nshareds * sizeof_shareds;
+ shared_var_storage = (char *) __kmp_taskq_allocate ( bytes, global_tid);
+
+ for (i=0; i<nshareds; i++) {
+ shared_var_array[i].ai_data = (kmpc_shared_vars_t *) (shared_var_storage + i*sizeof_shareds);
+ shared_var_array[i].ai_data->sv_queue = new_queue;
+ }
+ new_queue->tq_shareds = shared_var_array;
+
+
+ /* array for number of outstanding thunks per thread */
+
+ if (in_parallel) {
+ bytes = nproc * sizeof(kmpc_aligned_int32_t);
+ new_queue->tq_th_thunks = (kmpc_aligned_int32_t *) __kmp_taskq_allocate ( bytes, global_tid);
+ new_queue->tq_nproc = nproc;
+
+ for (i=0; i<nproc; i++)
+ new_queue->tq_th_thunks[i].ai_data = 0;
+ }
+
+ return new_queue;
+}
+
+static void
+__kmp_free_taskq (kmp_taskq_t *tq, kmpc_task_queue_t *p, int in_parallel, kmp_int32 global_tid)
+{
+ __kmpc_taskq_free(p->tq_thunk_space, global_tid);
+ __kmpc_taskq_free(p->tq_queue, global_tid);
+
+ /* free shared var structure storage */
+ __kmpc_taskq_free((void *) p->tq_shareds[0].ai_data, global_tid);
+
+ /* free array of pointers to shared vars storage */
+ __kmpc_taskq_free(p->tq_shareds, global_tid);
+
+#ifdef KMP_DEBUG
+ p->tq_first_child = NULL;
+ p->tq_next_child = NULL;
+ p->tq_prev_child = NULL;
+ p->tq_ref_count = -10;
+ p->tq_shareds = NULL;
+ p->tq_tasknum_queuing = 0;
+ p->tq_tasknum_serving = 0;
+ p->tq_queue = NULL;
+ p->tq_thunk_space = NULL;
+ p->tq_taskq_slot = NULL;
+ p->tq_free_thunks = NULL;
+ p->tq_nslots = 0;
+ p->tq_head = 0;
+ p->tq_tail = 0;
+ p->tq_nfull = 0;
+ p->tq_hiwat = 0;
+
+ if (in_parallel) {
+ int i;
+
+ for (i=0; i<p->tq_nproc; i++)
+ p->tq_th_thunks[i].ai_data = 0;
+ }
+ if ( __kmp_env_consistency_check )
+ p->tq_loc = NULL;
+ KMP_DEBUG_ASSERT( p->tq_flags & TQF_DEALLOCATED );
+ p->tq_flags = TQF_DEALLOCATED;
+#endif /* KMP_DEBUG */
+
+ if (in_parallel) {
+ __kmpc_taskq_free(p->tq_th_thunks, global_tid);
+ __kmp_destroy_lock(& p->tq_link_lck);
+ __kmp_destroy_lock(& p->tq_queue_lck);
+ __kmp_destroy_lock(& p->tq_free_thunks_lck);
+ }
+#ifdef KMP_DEBUG
+ p->tq_th_thunks = NULL;
+#endif /* KMP_DEBUG */
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ __kmp_acquire_lock( & tq->tq_freelist_lck, global_tid );
+ p->tq.tq_next_free = tq->tq_freelist;
+
+ tq->tq_freelist = p;
+ __kmp_release_lock( & tq->tq_freelist_lck, global_tid );
+}
+
+/*
+ * Once a group of thunks has been allocated for use in a particular queue,
+ * these are managed via a per-queue freelist.
+ * We force a check that there's always a thunk free if we need one.
+ */
+
+static kmpc_thunk_t *
+__kmp_alloc_thunk (kmpc_task_queue_t *queue, int in_parallel, kmp_int32 global_tid)
+{
+ kmpc_thunk_t *fl;
+
+ if (in_parallel) {
+ __kmp_acquire_lock(& queue->tq_free_thunks_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ fl = queue->tq_free_thunks;
+
+ KMP_DEBUG_ASSERT (fl != NULL);
+
+ queue->tq_free_thunks = fl->th.th_next_free;
+ fl->th_flags = 0;
+
+ if (in_parallel)
+ __kmp_release_lock(& queue->tq_free_thunks_lck, global_tid);
+
+ return fl;
+}
+
+static void
+__kmp_free_thunk (kmpc_task_queue_t *queue, kmpc_thunk_t *p, int in_parallel, kmp_int32 global_tid)
+{
+#ifdef KMP_DEBUG
+ p->th_task = 0;
+ p->th_encl_thunk = 0;
+ p->th_status = 0;
+ p->th_tasknum = 0;
+ /* Also could zero pointers to private vars */
+#endif
+
+ if (in_parallel) {
+ __kmp_acquire_lock(& queue->tq_free_thunks_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ p->th.th_next_free = queue->tq_free_thunks;
+ queue->tq_free_thunks = p;
+
+#ifdef KMP_DEBUG
+ p->th_flags = TQF_DEALLOCATED;
+#endif
+
+ if (in_parallel)
+ __kmp_release_lock(& queue->tq_free_thunks_lck, global_tid);
+}
+
+/* --------------------------------------------------------------------------- */
+
+/* returns nonzero if the queue just became full after the enqueue */
+
+static kmp_int32
+__kmp_enqueue_task ( kmp_taskq_t *tq, kmp_int32 global_tid, kmpc_task_queue_t *queue, kmpc_thunk_t *thunk, int in_parallel )
+{
+ kmp_int32 ret;
+
+ /* dkp: can we get around the lock in the TQF_RELEASE_WORKERS case (only the master is executing then) */
+ if (in_parallel) {
+ __kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ KMP_DEBUG_ASSERT (queue->tq_nfull < queue->tq_nslots); /* check queue not full */
+
+ queue->tq_queue[(queue->tq_head)++].qs_thunk = thunk;
+
+ if (queue->tq_head >= queue->tq_nslots)
+ queue->tq_head = 0;
+
+ (queue->tq_nfull)++;
+
+ KMP_MB(); /* to assure that nfull is seen to increase before TQF_ALL_TASKS_QUEUED is set */
+
+ ret = (in_parallel) ? (queue->tq_nfull == queue->tq_nslots) : FALSE;
+
+ if (in_parallel) {
+ /* don't need to wait until workers are released before unlocking */
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+
+ if( tq->tq_global_flags & TQF_RELEASE_WORKERS ) {
+ /* If just creating the root queue, the worker threads are waiting at */
+ /* a join barrier until now, when there's something in the queue for */
+ /* them to do; release them now to do work. */
+ /* This should only be done when this is the first task enqueued, */
+ /* so reset the flag here also. */
+
+ tq->tq_global_flags &= ~TQF_RELEASE_WORKERS; /* no lock needed, workers are still in spin mode */
+
+ KMP_MB(); /* avoid releasing barrier twice if taskq_task switches threads */
+
+ __kmpc_end_barrier_master( NULL, global_tid);
+ }
+ }
+
+ return ret;
+}
+
+static kmpc_thunk_t *
+__kmp_dequeue_task (kmp_int32 global_tid, kmpc_task_queue_t *queue, int in_parallel)
+{
+ kmpc_thunk_t *pt;
+ int tid = __kmp_tid_from_gtid( global_tid );
+
+ KMP_DEBUG_ASSERT (queue->tq_nfull > 0); /* check queue not empty */
+
+ if (queue->tq.tq_parent != NULL && in_parallel) {
+ int ct;
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ ct = ++(queue->tq_ref_count);
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p inc %d\n",
+ __LINE__, global_tid, queue, ct));
+ }
+
+ pt = queue->tq_queue[(queue->tq_tail)++].qs_thunk;
+
+ if (queue->tq_tail >= queue->tq_nslots)
+ queue->tq_tail = 0;
+
+ if (in_parallel) {
+ queue->tq_th_thunks[tid].ai_data++;
+
+ KMP_MB(); /* necessary so ai_data increment is propagated to other threads immediately (digital) */
+
+ KF_TRACE(200, ("__kmp_dequeue_task: T#%d(:%d) now has %d outstanding thunks from queue %p\n",
+ global_tid, tid, queue->tq_th_thunks[tid].ai_data, queue));
+ }
+
+ (queue->tq_nfull)--;
+
+#ifdef KMP_DEBUG
+ KMP_MB();
+
+ /* necessary so (queue->tq_nfull > 0) above succeeds after tq_nfull is decremented */
+
+ KMP_DEBUG_ASSERT(queue->tq_nfull >= 0);
+
+ if (in_parallel) {
+ KMP_DEBUG_ASSERT(queue->tq_th_thunks[tid].ai_data <= __KMP_TASKQ_THUNKS_PER_TH);
+ }
+#endif
+
+ return pt;
+}
+
+/*
+ * Find the next (non-null) task to dequeue and return it.
+ * This is never called unless in_parallel=TRUE
+ *
+ * Here are the rules for deciding which queue to take the task from:
+ * 1. Walk up the task queue tree from the current queue's parent and look
+ * on the way up (for loop, below).
+ * 2. Do a depth-first search back down the tree from the root and
+ * look (find_task_in_descendant_queue()).
+ *
+ * Here are the rules for deciding which task to take from a queue
+ * (__kmp_find_task_in_queue ()):
+ * 1. Never take the last task from a queue if TQF_IS_LASTPRIVATE; this task
+ * must be staged to make sure we execute the last one with
+ * TQF_IS_LAST_TASK at the end of task queue execution.
+ * 2. If the queue length is below some high water mark and the taskq task
+ * is enqueued, prefer running the taskq task.
+ * 3. Otherwise, take a (normal) task from the queue.
+ *
+ * If we do all this and return pt == NULL at the bottom of this routine,
+ * this means there are no more tasks to execute (except possibly for
+ * TQF_IS_LASTPRIVATE).
+ */
+
+static kmpc_thunk_t *
+__kmp_find_task_in_queue (kmp_int32 global_tid, kmpc_task_queue_t *queue)
+{
+ kmpc_thunk_t *pt = NULL;
+ int tid = __kmp_tid_from_gtid( global_tid );
+
+ /* To prevent deadlock from tq_queue_lck if queue already deallocated */
+ if ( !(queue->tq_flags & TQF_DEALLOCATED) ) {
+
+ __kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+
+ /* Check again to avoid race in __kmpc_end_taskq() */
+ if ( !(queue->tq_flags & TQF_DEALLOCATED) ) {
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ if ((queue->tq_taskq_slot != NULL) && (queue->tq_nfull <= queue->tq_hiwat)) {
+ /* if there's enough room in the queue and the dispatcher */
+ /* (taskq task) is available, schedule more tasks */
+ pt = (kmpc_thunk_t *) queue->tq_taskq_slot;
+ queue->tq_taskq_slot = NULL;
+ }
+ else if (queue->tq_nfull == 0 ||
+ queue->tq_th_thunks[tid].ai_data >= __KMP_TASKQ_THUNKS_PER_TH) {
+ /* do nothing if no thunks available or this thread can't */
+ /* run any because it already is executing too many */
+
+ pt = NULL;
+ }
+ else if (queue->tq_nfull > 1) {
+ /* always safe to schedule a task even if TQF_IS_LASTPRIVATE */
+
+ pt = __kmp_dequeue_task (global_tid, queue, TRUE);
+ }
+ else if (!(queue->tq_flags & TQF_IS_LASTPRIVATE)) {
+ /* one thing in queue, always safe to schedule if !TQF_IS_LASTPRIVATE */
+
+ pt = __kmp_dequeue_task (global_tid, queue, TRUE);
+ }
+ else if (queue->tq_flags & TQF_IS_LAST_TASK) {
+ /* TQF_IS_LASTPRIVATE, one thing in queue, kmpc_end_taskq_task() */
+ /* has been run so this is last task, run with TQF_IS_LAST_TASK so */
+ /* instrumentation does copy-out. */
+
+ pt = __kmp_dequeue_task (global_tid, queue, TRUE);
+ pt->th_flags |= TQF_IS_LAST_TASK; /* don't need test_then_or since already locked */
+ }
+ }
+
+ /* GEH - What happens here if is lastprivate, but not last task? */
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+ }
+
+ return pt;
+}
+
+/*
+ * Walk a tree of queues starting at queue's first child
+ * and return a non-NULL thunk if one can be scheduled.
+ * Must only be called when in_parallel=TRUE
+ */
+
+static kmpc_thunk_t *
+__kmp_find_task_in_descendant_queue (kmp_int32 global_tid, kmpc_task_queue_t *curr_queue)
+{
+ kmpc_thunk_t *pt = NULL;
+ kmpc_task_queue_t *queue = curr_queue;
+
+ if (curr_queue->tq_first_child != NULL) {
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ queue = (kmpc_task_queue_t *) curr_queue->tq_first_child;
+ if (queue == NULL) {
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ return NULL;
+ }
+
+ while (queue != NULL) {
+ int ct;
+ kmpc_task_queue_t *next;
+
+ ct= ++(queue->tq_ref_count);
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p inc %d\n",
+ __LINE__, global_tid, queue, ct));
+
+ pt = __kmp_find_task_in_queue (global_tid, queue);
+
+ if (pt != NULL) {
+ int ct;
+
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( queue->tq_ref_count >= 0 );
+
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+
+ return pt;
+ }
+
+ /* although reference count stays active during descendant walk, shouldn't matter */
+ /* since if children still exist, reference counts aren't being monitored anyway */
+
+ pt = __kmp_find_task_in_descendant_queue (global_tid, queue);
+
+ if (pt != NULL) {
+ int ct;
+
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+
+ return pt;
+ }
+
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ next = queue->tq_next_child;
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+
+ queue = next;
+ }
+
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ }
+
+ return pt;
+}
+
+/*
+ * Walk up the taskq tree looking for a task to execute.
+ * If we get to the root, search the tree for a descendent queue task.
+ * Must only be called when in_parallel=TRUE
+ */
+
+static kmpc_thunk_t *
+__kmp_find_task_in_ancestor_queue (kmp_taskq_t *tq, kmp_int32 global_tid, kmpc_task_queue_t *curr_queue)
+{
+ kmpc_task_queue_t *queue;
+ kmpc_thunk_t *pt;
+
+ pt = NULL;
+
+ if (curr_queue->tq.tq_parent != NULL) {
+ queue = curr_queue->tq.tq_parent;
+
+ while (queue != NULL) {
+ if (queue->tq.tq_parent != NULL) {
+ int ct;
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ ct = ++(queue->tq_ref_count);
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p inc %d\n",
+ __LINE__, global_tid, queue, ct));
+ }
+
+ pt = __kmp_find_task_in_queue (global_tid, queue);
+ if (pt != NULL) {
+ if (queue->tq.tq_parent != NULL) {
+ int ct;
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work without this call for digital/alpha, needed for IBM/RS6000 */
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ }
+
+ return pt;
+ }
+
+ if (queue->tq.tq_parent != NULL) {
+ int ct;
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+ }
+ queue = queue->tq.tq_parent;
+
+ if (queue != NULL)
+ __kmp_release_lock(& queue->tq_link_lck, global_tid);
+ }
+
+ }
+
+ pt = __kmp_find_task_in_descendant_queue( global_tid, tq->tq_root );
+
+ return pt;
+}
+
+static int
+__kmp_taskq_tasks_finished (kmpc_task_queue_t *queue)
+{
+ int i;
+
+ /* KMP_MB(); *//* is this really necessary? */
+
+ for (i=0; i<queue->tq_nproc; i++) {
+ if (queue->tq_th_thunks[i].ai_data != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static int
+__kmp_taskq_has_any_children (kmpc_task_queue_t *queue)
+{
+ return (queue->tq_first_child != NULL);
+}
+
+static void
+__kmp_remove_queue_from_tree( kmp_taskq_t *tq, kmp_int32 global_tid, kmpc_task_queue_t *queue, int in_parallel )
+{
+#ifdef KMP_DEBUG
+ kmp_int32 i;
+ kmpc_thunk_t *thunk;
+#endif
+
+ KF_TRACE(50, ("Before Deletion of TaskQ at %p on (%d):\n", queue, global_tid));
+ KF_DUMP(50, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+ /* sub-queue in a recursion, not the root task queue */
+ KMP_DEBUG_ASSERT (queue->tq.tq_parent != NULL);
+
+ if (in_parallel) {
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ KMP_DEBUG_ASSERT (queue->tq_first_child == NULL);
+
+ /* unlink queue from its siblings if any at this level */
+ if (queue->tq_prev_child != NULL)
+ queue->tq_prev_child->tq_next_child = queue->tq_next_child;
+ if (queue->tq_next_child != NULL)
+ queue->tq_next_child->tq_prev_child = queue->tq_prev_child;
+ if (queue->tq.tq_parent->tq_first_child == queue)
+ queue->tq.tq_parent->tq_first_child = queue->tq_next_child;
+
+ queue->tq_prev_child = NULL;
+ queue->tq_next_child = NULL;
+
+ if (in_parallel) {
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p waiting for ref_count of %d to reach 1\n",
+ __LINE__, global_tid, queue, queue->tq_ref_count));
+
+ /* wait until all other threads have stopped accessing this queue */
+ while (queue->tq_ref_count > 1) {
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_WAIT_YIELD((volatile kmp_uint32*)&queue->tq_ref_count, 1, KMP_LE, NULL);
+
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+ }
+
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ }
+
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p freeing queue\n",
+ __LINE__, global_tid, queue));
+
+#ifdef KMP_DEBUG
+ KMP_DEBUG_ASSERT(queue->tq_flags & TQF_ALL_TASKS_QUEUED);
+ KMP_DEBUG_ASSERT(queue->tq_nfull == 0);
+
+ for (i=0; i<queue->tq_nproc; i++) {
+ KMP_DEBUG_ASSERT(queue->tq_th_thunks[i].ai_data == 0);
+ }
+
+ i = 0;
+ for (thunk=queue->tq_free_thunks; thunk != NULL; thunk=thunk->th.th_next_free)
+ ++i;
+
+ KMP_ASSERT (i == queue->tq_nslots + (queue->tq_nproc * __KMP_TASKQ_THUNKS_PER_TH));
+#endif
+
+ /* release storage for queue entry */
+ __kmp_free_taskq ( tq, queue, TRUE, global_tid );
+
+ KF_TRACE(50, ("After Deletion of TaskQ at %p on (%d):\n", queue, global_tid));
+ KF_DUMP(50, __kmp_dump_task_queue_tree( tq, tq->tq_root, global_tid ));
+}
+
+/*
+ * Starting from indicated queue, proceed downward through tree and
+ * remove all taskqs which are finished, but only go down to taskqs
+ * which have the "nowait" clause present. Assume this is only called
+ * when in_parallel=TRUE.
+ */
+
+static void
+__kmp_find_and_remove_finished_child_taskq( kmp_taskq_t *tq, kmp_int32 global_tid, kmpc_task_queue_t *curr_queue )
+{
+ kmpc_task_queue_t *queue = curr_queue;
+
+ if (curr_queue->tq_first_child != NULL) {
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ queue = (kmpc_task_queue_t *) curr_queue->tq_first_child;
+ if (queue != NULL) {
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ return;
+ }
+
+ while (queue != NULL) {
+ kmpc_task_queue_t *next;
+ int ct = ++(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p inc %d\n",
+ __LINE__, global_tid, queue, ct));
+
+
+ /* although reference count stays active during descendant walk, */
+ /* shouldn't matter since if children still exist, reference */
+ /* counts aren't being monitored anyway */
+
+ if (queue->tq_flags & TQF_IS_NOWAIT) {
+ __kmp_find_and_remove_finished_child_taskq ( tq, global_tid, queue );
+
+ if ((queue->tq_flags & TQF_ALL_TASKS_QUEUED) && (queue->tq_nfull == 0) &&
+ __kmp_taskq_tasks_finished(queue) && ! __kmp_taskq_has_any_children(queue)) {
+
+ /*
+ Only remove this if we have not already marked it for deallocation.
+ This should prevent multiple threads from trying to free this.
+ */
+
+ if ( __kmp_test_lock(& queue->tq_queue_lck, global_tid) ) {
+ if ( !(queue->tq_flags & TQF_DEALLOCATED) ) {
+ queue->tq_flags |= TQF_DEALLOCATED;
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+
+ __kmp_remove_queue_from_tree( tq, global_tid, queue, TRUE );
+
+ /* Can't do any more here since can't be sure where sibling queue is so just exit this level */
+ return;
+ }
+ else {
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+ }
+ }
+ /* otherwise, just fall through and decrement reference count */
+ }
+ }
+
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ next = queue->tq_next_child;
+
+ ct = --(queue->tq_ref_count);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+
+ queue = next;
+ }
+
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ }
+}
+
+/*
+ * Starting from indicated queue, proceed downward through tree and
+ * remove all taskq's assuming all are finished and
+ * assuming NO other threads are executing at this point.
+ */
+
+static void
+__kmp_remove_all_child_taskq( kmp_taskq_t *tq, kmp_int32 global_tid, kmpc_task_queue_t *queue )
+{
+ kmpc_task_queue_t *next_child;
+
+ queue = (kmpc_task_queue_t *) queue->tq_first_child;
+
+ while (queue != NULL) {
+ __kmp_remove_all_child_taskq ( tq, global_tid, queue );
+
+ next_child = queue->tq_next_child;
+ queue->tq_flags |= TQF_DEALLOCATED;
+ __kmp_remove_queue_from_tree ( tq, global_tid, queue, FALSE );
+ queue = next_child;
+ }
+}
+
+static void
+__kmp_execute_task_from_queue( kmp_taskq_t *tq, ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk, int in_parallel )
+{
+ kmpc_task_queue_t *queue = thunk->th.th_shareds->sv_queue;
+ kmp_int32 tid = __kmp_tid_from_gtid( global_tid );
+
+ KF_TRACE(100, ("After dequeueing this Task on (%d):\n", global_tid));
+ KF_DUMP(100, __kmp_dump_thunk( tq, thunk, global_tid ));
+ KF_TRACE(100, ("Task Queue: %p looks like this (%d):\n", queue, global_tid));
+ KF_DUMP(100, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+ /*
+ * For the taskq task, the curr_thunk pushes and pop pairs are set up as follows:
+ *
+ * happens exactly once:
+ * 1) __kmpc_taskq : push (if returning thunk only)
+ * 4) __kmpc_end_taskq_task : pop
+ *
+ * optionally happens *each* time taskq task is dequeued/enqueued:
+ * 2) __kmpc_taskq_task : pop
+ * 3) __kmp_execute_task_from_queue : push
+ *
+ * execution ordering: 1,(2,3)*,4
+ */
+
+ if (!(thunk->th_flags & TQF_TASKQ_TASK)) {
+ kmp_int32 index = (queue == tq->tq_root) ? tid : 0;
+ thunk->th.th_shareds = (kmpc_shared_vars_t *) queue->tq_shareds[index].ai_data;
+
+ if ( __kmp_env_consistency_check ) {
+ __kmp_push_workshare( global_tid,
+ (queue->tq_flags & TQF_IS_ORDERED) ? ct_task_ordered : ct_task,
+ queue->tq_loc );
+ }
+ }
+ else {
+ if ( __kmp_env_consistency_check )
+ __kmp_push_workshare( global_tid, ct_taskq, queue->tq_loc );
+ }
+
+ if (in_parallel) {
+ thunk->th_encl_thunk = tq->tq_curr_thunk[tid];
+ tq->tq_curr_thunk[tid] = thunk;
+
+ KF_DUMP( 200, __kmp_dump_thunk_stack( tq->tq_curr_thunk[tid], global_tid ));
+ }
+
+ KF_TRACE( 50, ("Begin Executing Thunk %p from queue %p on (%d)\n", thunk, queue, global_tid));
+ thunk->th_task (global_tid, thunk);
+ KF_TRACE( 50, ("End Executing Thunk %p from queue %p on (%d)\n", thunk, queue, global_tid));
+
+ if (!(thunk->th_flags & TQF_TASKQ_TASK)) {
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_workshare( global_tid, (queue->tq_flags & TQF_IS_ORDERED) ? ct_task_ordered : ct_task,
+ queue->tq_loc );
+
+ if (in_parallel) {
+ tq->tq_curr_thunk[tid] = thunk->th_encl_thunk;
+ thunk->th_encl_thunk = NULL;
+ KF_DUMP( 200, __kmp_dump_thunk_stack( tq->tq_curr_thunk[tid], global_tid ));
+ }
+
+ if ((thunk->th_flags & TQF_IS_ORDERED) && in_parallel) {
+ __kmp_taskq_check_ordered(global_tid, thunk);
+ }
+
+ __kmp_free_thunk (queue, thunk, in_parallel, global_tid);
+
+ KF_TRACE(100, ("T#%d After freeing thunk: %p, TaskQ looks like this:\n", global_tid, thunk));
+ KF_DUMP(100, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+ if (in_parallel) {
+ KMP_MB(); /* needed so thunk put on free list before outstanding thunk count is decremented */
+
+ KMP_DEBUG_ASSERT(queue->tq_th_thunks[tid].ai_data >= 1);
+
+ KF_TRACE( 200, ("__kmp_execute_task_from_queue: T#%d has %d thunks in queue %p\n",
+ global_tid, queue->tq_th_thunks[tid].ai_data-1, queue));
+
+ queue->tq_th_thunks[tid].ai_data--;
+
+ /* KMP_MB(); */ /* is MB really necessary ? */
+ }
+
+ if (queue->tq.tq_parent != NULL && in_parallel) {
+ int ct;
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ ct = --(queue->tq_ref_count);
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p dec %d\n",
+ __LINE__, global_tid, queue, ct));
+ KMP_DEBUG_ASSERT( ct >= 0 );
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------- */
+
+/* starts a taskq; creates and returns a thunk for the taskq_task */
+/* also, returns pointer to shared vars for this thread in "shareds" arg */
+
+kmpc_thunk_t *
+__kmpc_taskq( ident_t *loc, kmp_int32 global_tid, kmpc_task_t taskq_task,
+ size_t sizeof_thunk, size_t sizeof_shareds,
+ kmp_int32 flags, kmpc_shared_vars_t **shareds )
+{
+ int in_parallel;
+ kmp_int32 nslots, nthunks, nshareds, nproc;
+ kmpc_task_queue_t *new_queue, *curr_queue;
+ kmpc_thunk_t *new_taskq_thunk;
+ kmp_info_t *th;
+ kmp_team_t *team;
+ kmp_taskq_t *tq;
+ kmp_int32 tid;
+
+ KE_TRACE( 10, ("__kmpc_taskq called (%d)\n", global_tid));
+
+ th = __kmp_threads[ global_tid ];
+ team = th -> th.th_team;
+ tq = & team -> t.t_taskq;
+ nproc = team -> t.t_nproc;
+ tid = __kmp_tid_from_gtid( global_tid );
+
+ /* find out whether this is a parallel taskq or serialized one. */
+ in_parallel = in_parallel_context( team );
+
+ if( ! tq->tq_root ) {
+ if (in_parallel) {
+ /* Vector ORDERED SECTION to taskq version */
+ th->th.th_dispatch->th_deo_fcn = __kmp_taskq_eo;
+
+ /* Vector ORDERED SECTION to taskq version */
+ th->th.th_dispatch->th_dxo_fcn = __kmp_taskq_xo;
+ }
+
+ if (in_parallel) {
+ /* This shouldn't be a barrier region boundary, it will confuse the user. */
+ /* Need the boundary to be at the end taskq instead. */
+ if ( __kmp_barrier( bs_plain_barrier, global_tid, TRUE, 0, NULL, NULL )) {
+ /* Creating the active root queue, and we are not the master thread. */
+ /* The master thread below created the queue and tasks have been */
+ /* enqueued, and the master thread released this barrier. This */
+ /* worker thread can now proceed and execute tasks. See also the */
+ /* TQF_RELEASE_WORKERS which is used to handle this case. */
+
+ *shareds = (kmpc_shared_vars_t *) tq->tq_root->tq_shareds[tid].ai_data;
+
+ KE_TRACE( 10, ("__kmpc_taskq return (%d)\n", global_tid));
+
+ return NULL;
+ }
+ }
+
+ /* master thread only executes this code */
+
+ if( tq->tq_curr_thunk_capacity < nproc ) {
+ if(tq->tq_curr_thunk)
+ __kmp_free(tq->tq_curr_thunk);
+ else {
+ /* only need to do this once at outer level, i.e. when tq_curr_thunk is still NULL */
+ __kmp_init_lock( & tq->tq_freelist_lck );
+ }
+
+ tq->tq_curr_thunk = (kmpc_thunk_t **) __kmp_allocate( nproc * sizeof(kmpc_thunk_t *) );
+ tq -> tq_curr_thunk_capacity = nproc;
+ }
+
+ if (in_parallel)
+ tq->tq_global_flags = TQF_RELEASE_WORKERS;
+ }
+
+ /* dkp: in future, if flags & TQF_HEURISTICS, will choose nslots based */
+ /* on some heuristics (e.g., depth of queue nesting?). */
+
+ nslots = (in_parallel) ? (2 * nproc) : 1;
+
+ /* There must be nproc * __KMP_TASKQ_THUNKS_PER_TH extra slots for pending */
+ /* jobs being executed by other threads, and one extra for taskq slot */
+
+ nthunks = (in_parallel) ? (nslots + (nproc * __KMP_TASKQ_THUNKS_PER_TH) + 1) : nslots + 2;
+
+ /* Only the root taskq gets a per-thread array of shareds. */
+ /* The rest of the taskq's only get one copy of the shared vars. */
+
+ nshareds = ( !tq->tq_root && in_parallel) ? nproc : 1;
+
+ /* create overall queue data structure and its components that require allocation */
+
+ new_queue = __kmp_alloc_taskq ( tq, in_parallel, nslots, nthunks, nshareds, nproc,
+ sizeof_thunk, sizeof_shareds, &new_taskq_thunk, global_tid );
+
+ /* rest of new_queue initializations */
+
+ new_queue->tq_flags = flags & TQF_INTERFACE_FLAGS;
+
+ if (in_parallel) {
+ new_queue->tq_tasknum_queuing = 0;
+ new_queue->tq_tasknum_serving = 0;
+ new_queue->tq_flags |= TQF_PARALLEL_CONTEXT;
+ }
+
+ new_queue->tq_taskq_slot = NULL;
+ new_queue->tq_nslots = nslots;
+ new_queue->tq_hiwat = HIGH_WATER_MARK (nslots);
+ new_queue->tq_nfull = 0;
+ new_queue->tq_head = 0;
+ new_queue->tq_tail = 0;
+ new_queue->tq_loc = loc;
+
+ if ((new_queue->tq_flags & TQF_IS_ORDERED) && in_parallel) {
+ /* prepare to serve the first-queued task's ORDERED directive */
+ new_queue->tq_tasknum_serving = 1;
+
+ /* Vector ORDERED SECTION to taskq version */
+ th->th.th_dispatch->th_deo_fcn = __kmp_taskq_eo;
+
+ /* Vector ORDERED SECTION to taskq version */
+ th->th.th_dispatch->th_dxo_fcn = __kmp_taskq_xo;
+ }
+
+ /* create a new thunk for the taskq_task in the new_queue */
+ *shareds = (kmpc_shared_vars_t *) new_queue->tq_shareds[0].ai_data;
+
+ new_taskq_thunk->th.th_shareds = *shareds;
+ new_taskq_thunk->th_task = taskq_task;
+ new_taskq_thunk->th_flags = new_queue->tq_flags | TQF_TASKQ_TASK;
+ new_taskq_thunk->th_status = 0;
+
+ KMP_DEBUG_ASSERT (new_taskq_thunk->th_flags & TQF_TASKQ_TASK);
+
+ /* KMP_MB(); */ /* make sure these inits complete before threads start using this queue (necessary?) */
+
+ /* insert the new task queue into the tree, but only after all fields initialized */
+
+ if (in_parallel) {
+ if( ! tq->tq_root ) {
+ new_queue->tq.tq_parent = NULL;
+ new_queue->tq_first_child = NULL;
+ new_queue->tq_next_child = NULL;
+ new_queue->tq_prev_child = NULL;
+ new_queue->tq_ref_count = 1;
+ tq->tq_root = new_queue;
+ }
+ else {
+ curr_queue = tq->tq_curr_thunk[tid]->th.th_shareds->sv_queue;
+ new_queue->tq.tq_parent = curr_queue;
+ new_queue->tq_first_child = NULL;
+ new_queue->tq_prev_child = NULL;
+ new_queue->tq_ref_count = 1; /* for this the thread that built the queue */
+
+ KMP_DEBUG_REF_CTS(("line %d gtid %d: Q %p alloc %d\n",
+ __LINE__, global_tid, new_queue, new_queue->tq_ref_count));
+
+ __kmp_acquire_lock(& curr_queue->tq_link_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ new_queue->tq_next_child = (struct kmpc_task_queue_t *) curr_queue->tq_first_child;
+
+ if (curr_queue->tq_first_child != NULL)
+ curr_queue->tq_first_child->tq_prev_child = new_queue;
+
+ curr_queue->tq_first_child = new_queue;
+
+ __kmp_release_lock(& curr_queue->tq_link_lck, global_tid);
+ }
+
+ /* set up thunk stack only after code that determines curr_queue above */
+ new_taskq_thunk->th_encl_thunk = tq->tq_curr_thunk[tid];
+ tq->tq_curr_thunk[tid] = new_taskq_thunk;
+
+ KF_DUMP( 200, __kmp_dump_thunk_stack( tq->tq_curr_thunk[tid], global_tid ));
+ }
+ else {
+ new_taskq_thunk->th_encl_thunk = 0;
+ new_queue->tq.tq_parent = NULL;
+ new_queue->tq_first_child = NULL;
+ new_queue->tq_next_child = NULL;
+ new_queue->tq_prev_child = NULL;
+ new_queue->tq_ref_count = 1;
+ }
+
+#ifdef KMP_DEBUG
+ KF_TRACE(150, ("Creating TaskQ Task on (%d):\n", global_tid));
+ KF_DUMP(150, __kmp_dump_thunk( tq, new_taskq_thunk, global_tid ));
+
+ if (in_parallel) {
+ KF_TRACE(25, ("After TaskQ at %p Creation on (%d):\n", new_queue, global_tid));
+ } else {
+ KF_TRACE(25, ("After Serial TaskQ at %p Creation on (%d):\n", new_queue, global_tid));
+ }
+
+ KF_DUMP(25, __kmp_dump_task_queue( tq, new_queue, global_tid ));
+
+ if (in_parallel) {
+ KF_DUMP(50, __kmp_dump_task_queue_tree( tq, tq->tq_root, global_tid ));
+ }
+#endif /* KMP_DEBUG */
+
+ if ( __kmp_env_consistency_check )
+ __kmp_push_workshare( global_tid, ct_taskq, new_queue->tq_loc );
+
+ KE_TRACE( 10, ("__kmpc_taskq return (%d)\n", global_tid));
+
+ return new_taskq_thunk;
+}
+
+
+/* ends a taskq; last thread out destroys the queue */
+
+void
+__kmpc_end_taskq(ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *taskq_thunk)
+{
+#ifdef KMP_DEBUG
+ kmp_int32 i;
+#endif
+ kmp_taskq_t *tq;
+ int in_parallel;
+ kmp_info_t *th;
+ kmp_int32 is_outermost;
+ kmpc_task_queue_t *queue;
+ kmpc_thunk_t *thunk;
+ int nproc;
+
+ KE_TRACE( 10, ("__kmpc_end_taskq called (%d)\n", global_tid));
+
+ tq = & __kmp_threads[global_tid] -> th.th_team -> t.t_taskq;
+ nproc = __kmp_threads[global_tid] -> th.th_team -> t.t_nproc;
+
+ /* For the outermost taskq only, all but one thread will have taskq_thunk == NULL */
+ queue = (taskq_thunk == NULL) ? tq->tq_root : taskq_thunk->th.th_shareds->sv_queue;
+
+ KE_TRACE( 50, ("__kmpc_end_taskq queue=%p (%d) \n", queue, global_tid));
+ is_outermost = (queue == tq->tq_root);
+ in_parallel = (queue->tq_flags & TQF_PARALLEL_CONTEXT);
+
+ if (in_parallel) {
+ kmp_uint32 spins;
+
+ /* this is just a safeguard to release the waiting threads if */
+ /* the outermost taskq never queues a task */
+
+ if (is_outermost && (KMP_MASTER_GTID( global_tid ))) {
+ if( tq->tq_global_flags & TQF_RELEASE_WORKERS ) {
+ /* no lock needed, workers are still in spin mode */
+ tq->tq_global_flags &= ~TQF_RELEASE_WORKERS;
+
+ __kmp_end_split_barrier( bs_plain_barrier, global_tid );
+ }
+ }
+
+ /* keep dequeueing work until all tasks are queued and dequeued */
+
+ do {
+ /* wait until something is available to dequeue */
+ KMP_INIT_YIELD(spins);
+
+ while ( (queue->tq_nfull == 0)
+ && (queue->tq_taskq_slot == NULL)
+ && (! __kmp_taskq_has_any_children(queue) )
+ && (! (queue->tq_flags & TQF_ALL_TASKS_QUEUED) )
+ ) {
+ KMP_YIELD_WHEN( TRUE, spins );
+ }
+
+ /* check to see if we can execute tasks in the queue */
+ while ( ( (queue->tq_nfull != 0) || (queue->tq_taskq_slot != NULL) )
+ && (thunk = __kmp_find_task_in_queue(global_tid, queue)) != NULL
+ ) {
+ KF_TRACE(50, ("Found thunk: %p in primary queue %p (%d)\n", thunk, queue, global_tid));
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ /* see if work found can be found in a descendant queue */
+ if ( (__kmp_taskq_has_any_children(queue))
+ && (thunk = __kmp_find_task_in_descendant_queue(global_tid, queue)) != NULL
+ ) {
+
+ KF_TRACE(50, ("Stole thunk: %p in descendant queue: %p while waiting in queue: %p (%d)\n",
+ thunk, thunk->th.th_shareds->sv_queue, queue, global_tid ));
+
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ } while ( (! (queue->tq_flags & TQF_ALL_TASKS_QUEUED))
+ || (queue->tq_nfull != 0)
+ );
+
+ KF_TRACE(50, ("All tasks queued and dequeued in queue: %p (%d)\n", queue, global_tid));
+
+ /* wait while all tasks are not finished and more work found
+ in descendant queues */
+
+ while ( (!__kmp_taskq_tasks_finished(queue))
+ && (thunk = __kmp_find_task_in_descendant_queue(global_tid, queue)) != NULL
+ ) {
+
+ KF_TRACE(50, ("Stole thunk: %p in descendant queue: %p while waiting in queue: %p (%d)\n",
+ thunk, thunk->th.th_shareds->sv_queue, queue, global_tid));
+
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ KF_TRACE(50, ("No work found in descendent queues or all work finished in queue: %p (%d)\n", queue, global_tid));
+
+ if (!is_outermost) {
+ /* need to return if NOWAIT present and not outermost taskq */
+
+ if (queue->tq_flags & TQF_IS_NOWAIT) {
+ __kmp_acquire_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+ queue->tq_ref_count--;
+ KMP_DEBUG_ASSERT( queue->tq_ref_count >= 0 );
+ __kmp_release_lock(& queue->tq.tq_parent->tq_link_lck, global_tid);
+
+ KE_TRACE( 10, ("__kmpc_end_taskq return for nowait case (%d)\n", global_tid));
+
+ return;
+ }
+
+ __kmp_find_and_remove_finished_child_taskq( tq, global_tid, queue );
+
+ /* WAIT until all tasks are finished and no child queues exist before proceeding */
+ KMP_INIT_YIELD(spins);
+
+ while (!__kmp_taskq_tasks_finished(queue) || __kmp_taskq_has_any_children(queue)) {
+ thunk = __kmp_find_task_in_ancestor_queue( tq, global_tid, queue );
+
+ if (thunk != NULL) {
+ KF_TRACE(50, ("Stole thunk: %p in ancestor queue: %p while waiting in queue: %p (%d)\n",
+ thunk, thunk->th.th_shareds->sv_queue, queue, global_tid));
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ KMP_YIELD_WHEN( thunk == NULL, spins );
+
+ __kmp_find_and_remove_finished_child_taskq( tq, global_tid, queue );
+ }
+
+ __kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+ if ( !(queue->tq_flags & TQF_DEALLOCATED) ) {
+ queue->tq_flags |= TQF_DEALLOCATED;
+ }
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+
+ /* only the allocating thread can deallocate the queue */
+ if (taskq_thunk != NULL) {
+ __kmp_remove_queue_from_tree( tq, global_tid, queue, TRUE );
+ }
+
+ KE_TRACE( 10, ("__kmpc_end_taskq return for non_outermost queue, wait case (%d)\n", global_tid));
+
+ return;
+ }
+
+ /* Outermost Queue: steal work from descendants until all tasks are finished */
+
+ KMP_INIT_YIELD(spins);
+
+ while (!__kmp_taskq_tasks_finished(queue)) {
+ thunk = __kmp_find_task_in_descendant_queue(global_tid, queue);
+
+ if (thunk != NULL) {
+ KF_TRACE(50, ("Stole thunk: %p in descendant queue: %p while waiting in queue: %p (%d)\n",
+ thunk, thunk->th.th_shareds->sv_queue, queue, global_tid));
+
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ KMP_YIELD_WHEN( thunk == NULL, spins );
+ }
+
+ /* Need this barrier to prevent destruction of queue before threads have all executed above code */
+ /* This may need to be done earlier when NOWAIT is implemented for the outermost level */
+
+ if ( !__kmp_barrier( bs_plain_barrier, global_tid, TRUE, 0, NULL, NULL )) {
+ /* the queue->tq_flags & TQF_IS_NOWAIT case is not yet handled here; */
+ /* for right now, everybody waits, and the master thread destroys the */
+ /* remaining queues. */
+
+ __kmp_remove_all_child_taskq( tq, global_tid, queue );
+
+ /* Now destroy the root queue */
+ KF_TRACE(100, ("T#%d Before Deletion of top-level TaskQ at %p:\n", global_tid, queue ));
+ KF_DUMP(100, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+#ifdef KMP_DEBUG
+ /* the root queue entry */
+ KMP_DEBUG_ASSERT ((queue->tq.tq_parent == NULL) && (queue->tq_next_child == NULL));
+
+ /* children must all be gone by now because of barrier above */
+ KMP_DEBUG_ASSERT (queue->tq_first_child == NULL);
+
+ for (i=0; i<nproc; i++) {
+ KMP_DEBUG_ASSERT(queue->tq_th_thunks[i].ai_data == 0);
+ }
+
+ for (i=0, thunk=queue->tq_free_thunks; thunk != NULL; i++, thunk=thunk->th.th_next_free);
+
+ KMP_DEBUG_ASSERT (i == queue->tq_nslots + (nproc * __KMP_TASKQ_THUNKS_PER_TH));
+
+ for (i = 0; i < nproc; i++) {
+ KMP_DEBUG_ASSERT( ! tq->tq_curr_thunk[i] );
+ }
+#endif
+ /* unlink the root queue entry */
+ tq -> tq_root = NULL;
+
+ /* release storage for root queue entry */
+ KF_TRACE(50, ("After Deletion of top-level TaskQ at %p on (%d):\n", queue, global_tid));
+
+ queue->tq_flags |= TQF_DEALLOCATED;
+ __kmp_free_taskq ( tq, queue, in_parallel, global_tid );
+
+ KF_DUMP(50, __kmp_dump_task_queue_tree( tq, tq->tq_root, global_tid ));
+
+ /* release the workers now that the data structures are up to date */
+ __kmp_end_split_barrier( bs_plain_barrier, global_tid );
+ }
+
+ th = __kmp_threads[ global_tid ];
+
+ /* Reset ORDERED SECTION to parallel version */
+ th->th.th_dispatch->th_deo_fcn = 0;
+
+ /* Reset ORDERED SECTION to parallel version */
+ th->th.th_dispatch->th_dxo_fcn = 0;
+ }
+ else {
+ /* in serial execution context, dequeue the last task */
+ /* and execute it, if there were any tasks encountered */
+
+ if (queue->tq_nfull > 0) {
+ KMP_DEBUG_ASSERT(queue->tq_nfull == 1);
+
+ thunk = __kmp_dequeue_task(global_tid, queue, in_parallel);
+
+ if (queue->tq_flags & TQF_IS_LAST_TASK) {
+ /* TQF_IS_LASTPRIVATE, one thing in queue, __kmpc_end_taskq_task() */
+ /* has been run so this is last task, run with TQF_IS_LAST_TASK so */
+ /* instrumentation does copy-out. */
+
+ /* no need for test_then_or call since already locked */
+ thunk->th_flags |= TQF_IS_LAST_TASK;
+ }
+
+ KF_TRACE(50, ("T#%d found thunk: %p in serial queue: %p\n", global_tid, thunk, queue));
+
+ __kmp_execute_task_from_queue( tq, loc, global_tid, thunk, in_parallel );
+ }
+
+ /* destroy the unattached serial queue now that there is no more work to do */
+ KF_TRACE(100, ("Before Deletion of Serialized TaskQ at %p on (%d):\n", queue, global_tid));
+ KF_DUMP(100, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+#ifdef KMP_DEBUG
+ i = 0;
+ for (thunk=queue->tq_free_thunks; thunk != NULL; thunk=thunk->th.th_next_free)
+ ++i;
+ KMP_DEBUG_ASSERT (i == queue->tq_nslots + 1);
+#endif
+ /* release storage for unattached serial queue */
+ KF_TRACE(50, ("Serialized TaskQ at %p deleted on (%d).\n", queue, global_tid));
+
+ queue->tq_flags |= TQF_DEALLOCATED;
+ __kmp_free_taskq ( tq, queue, in_parallel, global_tid );
+ }
+
+ KE_TRACE( 10, ("__kmpc_end_taskq return (%d)\n", global_tid));
+}
+
+/* Enqueues a task for thunk previously created by __kmpc_task_buffer. */
+/* Returns nonzero if just filled up queue */
+
+kmp_int32
+__kmpc_task(ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk)
+{
+ kmp_int32 ret;
+ kmpc_task_queue_t *queue;
+ int in_parallel;
+ kmp_taskq_t *tq;
+
+ KE_TRACE( 10, ("__kmpc_task called (%d)\n", global_tid));
+
+ KMP_DEBUG_ASSERT (!(thunk->th_flags & TQF_TASKQ_TASK)); /* thunk->th_task is a regular task */
+
+ tq = &__kmp_threads[global_tid] -> th.th_team -> t.t_taskq;
+ queue = thunk->th.th_shareds->sv_queue;
+ in_parallel = (queue->tq_flags & TQF_PARALLEL_CONTEXT);
+
+ if (in_parallel && (thunk->th_flags & TQF_IS_ORDERED))
+ thunk->th_tasknum = ++queue->tq_tasknum_queuing;
+
+ /* For serial execution dequeue the preceding task and execute it, if one exists */
+ /* This cannot be the last task. That one is handled in __kmpc_end_taskq */
+
+ if (!in_parallel && queue->tq_nfull > 0) {
+ kmpc_thunk_t *prev_thunk;
+
+ KMP_DEBUG_ASSERT(queue->tq_nfull == 1);
+
+ prev_thunk = __kmp_dequeue_task(global_tid, queue, in_parallel);
+
+ KF_TRACE(50, ("T#%d found thunk: %p in serial queue: %p\n", global_tid, prev_thunk, queue));
+
+ __kmp_execute_task_from_queue( tq, loc, global_tid, prev_thunk, in_parallel );
+ }
+
+ /* The instrumentation sequence is: __kmpc_task_buffer(), initialize private */
+ /* variables, __kmpc_task(). The __kmpc_task_buffer routine checks that the */
+ /* task queue is not full and allocates a thunk (which is then passed to */
+ /* __kmpc_task()). So, the enqueue below should never fail due to a full queue. */
+
+ KF_TRACE(100, ("After enqueueing this Task on (%d):\n", global_tid));
+ KF_DUMP(100, __kmp_dump_thunk( tq, thunk, global_tid ));
+
+ ret = __kmp_enqueue_task ( tq, global_tid, queue, thunk, in_parallel );
+
+ KF_TRACE(100, ("Task Queue looks like this on (%d):\n", global_tid));
+ KF_DUMP(100, __kmp_dump_task_queue( tq, queue, global_tid ));
+
+ KE_TRACE( 10, ("__kmpc_task return (%d)\n", global_tid));
+
+ return ret;
+}
+
+/* enqueues a taskq_task for thunk previously created by __kmpc_taskq */
+/* this should never be called unless in a parallel context */
+
+void
+__kmpc_taskq_task(ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk, kmp_int32 status)
+{
+ kmpc_task_queue_t *queue;
+ kmp_taskq_t *tq = &__kmp_threads[global_tid] -> th.th_team -> t.t_taskq;
+ int tid = __kmp_tid_from_gtid( global_tid );
+
+ KE_TRACE( 10, ("__kmpc_taskq_task called (%d)\n", global_tid));
+ KF_TRACE(100, ("TaskQ Task argument thunk on (%d):\n", global_tid));
+ KF_DUMP(100, __kmp_dump_thunk( tq, thunk, global_tid ));
+
+ queue = thunk->th.th_shareds->sv_queue;
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_workshare( global_tid, ct_taskq, loc );
+
+ /* thunk->th_task is the taskq_task */
+ KMP_DEBUG_ASSERT (thunk->th_flags & TQF_TASKQ_TASK);
+
+ /* not supposed to call __kmpc_taskq_task if it's already enqueued */
+ KMP_DEBUG_ASSERT (queue->tq_taskq_slot == NULL);
+
+ /* dequeue taskq thunk from curr_thunk stack */
+ tq->tq_curr_thunk[tid] = thunk->th_encl_thunk;
+ thunk->th_encl_thunk = NULL;
+
+ KF_DUMP( 200, __kmp_dump_thunk_stack( tq->tq_curr_thunk[tid], global_tid ));
+
+ thunk->th_status = status;
+
+ KMP_MB(); /* flush thunk->th_status before taskq_task enqueued to avoid race condition */
+
+ /* enqueue taskq_task in thunk into special slot in queue */
+ /* GEH - probably don't need to lock taskq slot since only one */
+ /* thread enqueues & already a lock set at dequeue point */
+
+ queue->tq_taskq_slot = thunk;
+
+ KE_TRACE( 10, ("__kmpc_taskq_task return (%d)\n", global_tid));
+}
+
+/* ends a taskq_task; done generating tasks */
+
+void
+__kmpc_end_taskq_task(ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *thunk)
+{
+ kmp_taskq_t *tq;
+ kmpc_task_queue_t *queue;
+ int in_parallel;
+ int tid;
+
+ KE_TRACE( 10, ("__kmpc_end_taskq_task called (%d)\n", global_tid));
+
+ tq = &__kmp_threads[global_tid] -> th.th_team -> t.t_taskq;
+ queue = thunk->th.th_shareds->sv_queue;
+ in_parallel = (queue->tq_flags & TQF_PARALLEL_CONTEXT);
+ tid = __kmp_tid_from_gtid( global_tid );
+
+ if ( __kmp_env_consistency_check )
+ __kmp_pop_workshare( global_tid, ct_taskq, loc );
+
+ if (in_parallel) {
+#if KMP_ARCH_X86 || \
+ KMP_ARCH_X86_64
+
+ KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_ALL_TASKS_QUEUED );
+#else
+ {
+ __kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work fine without this call for digital/alpha, needed for IBM/RS6000 */
+
+ queue->tq_flags |= TQF_ALL_TASKS_QUEUED;
+
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+ }
+#endif
+ }
+
+ if (thunk->th_flags & TQF_IS_LASTPRIVATE) {
+ /* Normally, __kmp_find_task_in_queue() refuses to schedule the last task in the */
+ /* queue if TQF_IS_LASTPRIVATE so we can positively identify that last task */
+ /* and run it with its TQF_IS_LAST_TASK bit turned on in th_flags. When */
+ /* __kmpc_end_taskq_task() is called we are done generating all the tasks, so */
+ /* we know the last one in the queue is the lastprivate task. Mark the queue */
+ /* as having gotten to this state via tq_flags & TQF_IS_LAST_TASK; when that */
+ /* task actually executes mark it via th_flags & TQF_IS_LAST_TASK (this th_flags */
+ /* bit signals the instrumented code to do copy-outs after execution). */
+
+ if (! in_parallel) {
+ /* No synchronization needed for serial context */
+ queue->tq_flags |= TQF_IS_LAST_TASK;
+ }
+ else {
+#if KMP_ARCH_X86 || \
+ KMP_ARCH_X86_64
+
+ KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_IS_LAST_TASK );
+#else
+ {
+ __kmp_acquire_lock(& queue->tq_queue_lck, global_tid);
+
+ KMP_MB(); /* make sure data structures are in consistent state before querying them */
+ /* Seems to work without this call for digital/alpha, needed for IBM/RS6000 */
+
+ queue->tq_flags |= TQF_IS_LAST_TASK;
+
+ __kmp_release_lock(& queue->tq_queue_lck, global_tid);
+ }
+#endif
+ /* to prevent race condition where last task is dequeued but */
+ /* flag isn't visible yet (not sure about this) */
+ KMP_MB();
+ }
+ }
+
+ /* dequeue taskq thunk from curr_thunk stack */
+ if (in_parallel) {
+ tq->tq_curr_thunk[tid] = thunk->th_encl_thunk;
+ thunk->th_encl_thunk = NULL;
+
+ KF_DUMP( 200, __kmp_dump_thunk_stack( tq->tq_curr_thunk[tid], global_tid ));
+ }
+
+ KE_TRACE( 10, ("__kmpc_end_taskq_task return (%d)\n", global_tid));
+}
+
+/* returns thunk for a regular task based on taskq_thunk */
+/* (__kmpc_taskq_task does the analogous thing for a TQF_TASKQ_TASK) */
+
+kmpc_thunk_t *
+__kmpc_task_buffer(ident_t *loc, kmp_int32 global_tid, kmpc_thunk_t *taskq_thunk, kmpc_task_t task)
+{
+ kmp_taskq_t *tq;
+ kmpc_task_queue_t *queue;
+ kmpc_thunk_t *new_thunk;
+ int in_parallel;
+
+ KE_TRACE( 10, ("__kmpc_task_buffer called (%d)\n", global_tid));
+
+ KMP_DEBUG_ASSERT (taskq_thunk->th_flags & TQF_TASKQ_TASK); /* taskq_thunk->th_task is the taskq_task */
+
+ tq = &__kmp_threads[global_tid] -> th.th_team -> t.t_taskq;
+ queue = taskq_thunk->th.th_shareds->sv_queue;
+ in_parallel = (queue->tq_flags & TQF_PARALLEL_CONTEXT);
+
+ /* The instrumentation sequence is: __kmpc_task_buffer(), initialize private */
+ /* variables, __kmpc_task(). The __kmpc_task_buffer routine checks that the */
+ /* task queue is not full and allocates a thunk (which is then passed to */
+ /* __kmpc_task()). So, we can pre-allocate a thunk here assuming it will be */
+ /* the next to be enqueued in __kmpc_task(). */
+
+ new_thunk = __kmp_alloc_thunk (queue, in_parallel, global_tid);
+ new_thunk->th.th_shareds = (kmpc_shared_vars_t *) queue->tq_shareds[0].ai_data;
+ new_thunk->th_encl_thunk = NULL;
+ new_thunk->th_task = task;
+
+ /* GEH - shouldn't need to lock the read of tq_flags here */
+ new_thunk->th_flags = queue->tq_flags & TQF_INTERFACE_FLAGS;
+
+ new_thunk->th_status = 0;
+
+ KMP_DEBUG_ASSERT (!(new_thunk->th_flags & TQF_TASKQ_TASK));
+
+ KF_TRACE(100, ("Creating Regular Task on (%d):\n", global_tid));
+ KF_DUMP(100, __kmp_dump_thunk( tq, new_thunk, global_tid ));
+
+ KE_TRACE( 10, ("__kmpc_task_buffer return (%d)\n", global_tid));
+
+ return new_thunk;
+}
+
+/* --------------------------------------------------------------------------- */
diff --git a/final/runtime/src/kmp_threadprivate.c b/final/runtime/src/kmp_threadprivate.c
new file mode 100644
index 0000000..2a18d80
--- /dev/null
+++ b/final/runtime/src/kmp_threadprivate.c
@@ -0,0 +1,733 @@
+/*
+ * kmp_threadprivate.c -- OpenMP threadprivate support library
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_itt.h"
+#include "kmp_i18n.h"
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#define USE_CHECKS_COMMON
+
+#define KMP_INLINE_SUBR 1
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+kmp_threadprivate_insert_private_data( int gtid, void *pc_addr, void *data_addr, size_t pc_size );
+struct private_common *
+kmp_threadprivate_insert( int gtid, void *pc_addr, void *data_addr, size_t pc_size );
+
+struct shared_table __kmp_threadprivate_d_table;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+static
+#ifdef KMP_INLINE_SUBR
+__forceinline
+#endif
+struct private_common *
+__kmp_threadprivate_find_task_common( struct common_table *tbl, int gtid, void *pc_addr )
+
+{
+ struct private_common *tn;
+
+#ifdef KMP_TASK_COMMON_DEBUG
+ KC_TRACE( 10, ( "__kmp_threadprivate_find_task_common: thread#%d, called with address %p\n",
+ gtid, pc_addr ) );
+ dump_list();
+#endif
+
+ for (tn = tbl->data[ KMP_HASH(pc_addr) ]; tn; tn = tn->next) {
+ if (tn->gbl_addr == pc_addr) {
+#ifdef KMP_TASK_COMMON_DEBUG
+ KC_TRACE( 10, ( "__kmp_threadprivate_find_task_common: thread#%d, found node %p on list\n",
+ gtid, pc_addr ) );
+#endif
+ return tn;
+ }
+ }
+ return 0;
+}
+
+static
+#ifdef KMP_INLINE_SUBR
+__forceinline
+#endif
+struct shared_common *
+__kmp_find_shared_task_common( struct shared_table *tbl, int gtid, void *pc_addr )
+{
+ struct shared_common *tn;
+
+ for (tn = tbl->data[ KMP_HASH(pc_addr) ]; tn; tn = tn->next) {
+ if (tn->gbl_addr == pc_addr) {
+#ifdef KMP_TASK_COMMON_DEBUG
+ KC_TRACE( 10, ( "__kmp_find_shared_task_common: thread#%d, found node %p on list\n",
+ gtid, pc_addr ) );
+#endif
+ return tn;
+ }
+ }
+ return 0;
+}
+
+
+/*
+ * Create a template for the data initialized storage.
+ * Either the template is NULL indicating zero fill,
+ * or the template is a copy of the original data.
+ */
+
+static struct private_data *
+__kmp_init_common_data( void *pc_addr, size_t pc_size )
+{
+ struct private_data *d;
+ size_t i;
+ char *p;
+
+ d = (struct private_data *) __kmp_allocate( sizeof( struct private_data ) );
+/*
+ d->data = 0; // AC: commented out because __kmp_allocate zeroes the memory
+ d->next = 0;
+*/
+ d->size = pc_size;
+ d->more = 1;
+
+ p = (char*)pc_addr;
+
+ for (i = pc_size; i > 0; --i) {
+ if (*p++ != '\0') {
+ d->data = __kmp_allocate( pc_size );
+ KMP_MEMCPY( d->data, pc_addr, pc_size );
+ break;
+ }
+ }
+
+ return d;
+}
+
+/*
+ * Initialize the data area from the template.
+ */
+
+static void
+__kmp_copy_common_data( void *pc_addr, struct private_data *d )
+{
+ char *addr = (char *) pc_addr;
+ int i, offset;
+
+ for (offset = 0; d != 0; d = d->next) {
+ for (i = d->more; i > 0; --i) {
+ if (d->data == 0)
+ memset( & addr[ offset ], '\0', d->size );
+ else
+ KMP_MEMCPY( & addr[ offset ], d->data, d->size );
+ offset += d->size;
+ }
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* we are called from __kmp_serial_initialize() with __kmp_initz_lock held. */
+void
+__kmp_common_initialize( void )
+{
+ if( ! TCR_4(__kmp_init_common) ) {
+ int q;
+#ifdef KMP_DEBUG
+ int gtid;
+#endif
+
+ __kmp_threadpriv_cache_list = NULL;
+
+#ifdef KMP_DEBUG
+ /* verify the uber masters were initialized */
+ for(gtid = 0 ; gtid < __kmp_threads_capacity; gtid++ )
+ if( __kmp_root[gtid] ) {
+ KMP_DEBUG_ASSERT( __kmp_root[gtid]->r.r_uber_thread );
+ for ( q = 0; q< KMP_HASH_TABLE_SIZE; ++q)
+ KMP_DEBUG_ASSERT( !__kmp_root[gtid]->r.r_uber_thread->th.th_pri_common->data[q] );
+/* __kmp_root[ gitd ]-> r.r_uber_thread -> th.th_pri_common -> data[ q ] = 0;*/
+ }
+#endif /* KMP_DEBUG */
+
+ for (q = 0; q < KMP_HASH_TABLE_SIZE; ++q)
+ __kmp_threadprivate_d_table.data[ q ] = 0;
+
+ TCW_4(__kmp_init_common, TRUE);
+ }
+}
+
+/* Call all destructors for threadprivate data belonging to all threads.
+ Currently unused! */
+void
+__kmp_common_destroy( void )
+{
+ if( TCR_4(__kmp_init_common) ) {
+ int q;
+
+ TCW_4(__kmp_init_common, FALSE);
+
+ for (q = 0; q < KMP_HASH_TABLE_SIZE; ++q) {
+ int gtid;
+ struct private_common *tn;
+ struct shared_common *d_tn;
+
+ /* C++ destructors need to be called once per thread before exiting */
+ /* don't call destructors for master thread though unless we used copy constructor */
+
+ for (d_tn = __kmp_threadprivate_d_table.data[ q ]; d_tn; d_tn = d_tn->next) {
+ if (d_tn->is_vec) {
+ if (d_tn->dt.dtorv != 0) {
+ for (gtid = 0; gtid < __kmp_all_nth; ++gtid) {
+ if( __kmp_threads[gtid] ) {
+ if( (__kmp_foreign_tp) ? (! KMP_INITIAL_GTID (gtid)) :
+ (! KMP_UBER_GTID (gtid)) ) {
+ tn = __kmp_threadprivate_find_task_common( __kmp_threads[ gtid ]->th.th_pri_common,
+ gtid, d_tn->gbl_addr );
+ if (tn) {
+ (*d_tn->dt.dtorv) (tn->par_addr, d_tn->vec_len);
+ }
+ }
+ }
+ }
+ if (d_tn->obj_init != 0) {
+ (*d_tn->dt.dtorv) (d_tn->obj_init, d_tn->vec_len);
+ }
+ }
+ } else {
+ if (d_tn->dt.dtor != 0) {
+ for (gtid = 0; gtid < __kmp_all_nth; ++gtid) {
+ if( __kmp_threads[gtid] ) {
+ if( (__kmp_foreign_tp) ? (! KMP_INITIAL_GTID (gtid)) :
+ (! KMP_UBER_GTID (gtid)) ) {
+ tn = __kmp_threadprivate_find_task_common( __kmp_threads[ gtid ]->th.th_pri_common,
+ gtid, d_tn->gbl_addr );
+ if (tn) {
+ (*d_tn->dt.dtor) (tn->par_addr);
+ }
+ }
+ }
+ }
+ if (d_tn->obj_init != 0) {
+ (*d_tn->dt.dtor) (d_tn->obj_init);
+ }
+ }
+ }
+ }
+ __kmp_threadprivate_d_table.data[ q ] = 0;
+ }
+ }
+}
+
+/* Call all destructors for threadprivate data belonging to this thread */
+void
+__kmp_common_destroy_gtid( int gtid )
+{
+ struct private_common *tn;
+ struct shared_common *d_tn;
+
+ KC_TRACE( 10, ("__kmp_common_destroy_gtid: T#%d called\n", gtid ) );
+ if( (__kmp_foreign_tp) ? (! KMP_INITIAL_GTID (gtid)) :
+ (! KMP_UBER_GTID (gtid)) ) {
+
+ if( TCR_4(__kmp_init_common) ) {
+
+ /* Cannot do this here since not all threads have destroyed their data */
+ /* TCW_4(__kmp_init_common, FALSE); */
+
+ for (tn = __kmp_threads[ gtid ]->th.th_pri_head; tn; tn = tn->link) {
+
+ d_tn = __kmp_find_shared_task_common( &__kmp_threadprivate_d_table,
+ gtid, tn->gbl_addr );
+
+ KMP_DEBUG_ASSERT( d_tn );
+
+ if (d_tn->is_vec) {
+ if (d_tn->dt.dtorv != 0) {
+ (void) (*d_tn->dt.dtorv) (tn->par_addr, d_tn->vec_len);
+ }
+ if (d_tn->obj_init != 0) {
+ (void) (*d_tn->dt.dtorv) (d_tn->obj_init, d_tn->vec_len);
+ }
+ } else {
+ if (d_tn->dt.dtor != 0) {
+ (void) (*d_tn->dt.dtor) (tn->par_addr);
+ }
+ if (d_tn->obj_init != 0) {
+ (void) (*d_tn->dt.dtor) (d_tn->obj_init);
+ }
+ }
+ }
+ KC_TRACE( 30, ("__kmp_common_destroy_gtid: T#%d threadprivate destructors complete\n",
+ gtid ) );
+ }
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef KMP_TASK_COMMON_DEBUG
+static void
+dump_list( void )
+{
+ int p, q;
+
+ for (p = 0; p < __kmp_all_nth; ++p) {
+ if( !__kmp_threads[p] ) continue;
+ for (q = 0; q < KMP_HASH_TABLE_SIZE; ++q) {
+ if (__kmp_threads[ p ]->th.th_pri_common->data[ q ]) {
+ struct private_common *tn;
+
+ KC_TRACE( 10, ( "\tdump_list: gtid:%d addresses\n", p ) );
+
+ for (tn = __kmp_threads[ p ]->th.th_pri_common->data[ q ]; tn; tn = tn->next) {
+ KC_TRACE( 10, ( "\tdump_list: THREADPRIVATE: Serial %p -> Parallel %p\n",
+ tn->gbl_addr, tn->par_addr ) );
+ }
+ }
+ }
+ }
+}
+#endif /* KMP_TASK_COMMON_DEBUG */
+
+
+/*
+ * NOTE: this routine is to be called only from the serial part of the program.
+ */
+
+void
+kmp_threadprivate_insert_private_data( int gtid, void *pc_addr, void *data_addr, size_t pc_size )
+{
+ struct shared_common **lnk_tn, *d_tn;
+ KMP_DEBUG_ASSERT( __kmp_threads[ gtid ] &&
+ __kmp_threads[ gtid ] -> th.th_root -> r.r_active == 0 );
+
+ d_tn = __kmp_find_shared_task_common( &__kmp_threadprivate_d_table,
+ gtid, pc_addr );
+
+ if (d_tn == 0) {
+ d_tn = (struct shared_common *) __kmp_allocate( sizeof( struct shared_common ) );
+
+ d_tn->gbl_addr = pc_addr;
+ d_tn->pod_init = __kmp_init_common_data( data_addr, pc_size );
+/*
+ d_tn->obj_init = 0; // AC: commented out because __kmp_allocate zeroes the memory
+ d_tn->ct.ctor = 0;
+ d_tn->cct.cctor = 0;;
+ d_tn->dt.dtor = 0;
+ d_tn->is_vec = FALSE;
+ d_tn->vec_len = 0L;
+*/
+ d_tn->cmn_size = pc_size;
+
+ __kmp_acquire_lock( &__kmp_global_lock, gtid );
+
+ lnk_tn = &(__kmp_threadprivate_d_table.data[ KMP_HASH(pc_addr) ]);
+
+ d_tn->next = *lnk_tn;
+ *lnk_tn = d_tn;
+
+ __kmp_release_lock( &__kmp_global_lock, gtid );
+ }
+}
+
+struct private_common *
+kmp_threadprivate_insert( int gtid, void *pc_addr, void *data_addr, size_t pc_size )
+{
+ struct private_common *tn, **tt;
+ struct shared_common *d_tn;
+
+ /* +++++++++ START OF CRITICAL SECTION +++++++++ */
+
+ __kmp_acquire_lock( & __kmp_global_lock, gtid );
+
+ tn = (struct private_common *) __kmp_allocate( sizeof (struct private_common) );
+
+ tn->gbl_addr = pc_addr;
+
+ d_tn = __kmp_find_shared_task_common( &__kmp_threadprivate_d_table,
+ gtid, pc_addr ); /* Only the MASTER data table exists. */
+
+ if (d_tn != 0) {
+ /* This threadprivate variable has already been seen. */
+
+ if ( d_tn->pod_init == 0 && d_tn->obj_init == 0 ) {
+ d_tn->cmn_size = pc_size;
+
+ if (d_tn->is_vec) {
+ if (d_tn->ct.ctorv != 0) {
+ /* Construct from scratch so no prototype exists */
+ d_tn->obj_init = 0;
+ }
+ else if (d_tn->cct.cctorv != 0) {
+ /* Now data initialize the prototype since it was previously registered */
+ d_tn->obj_init = (void *) __kmp_allocate( d_tn->cmn_size );
+ (void) (*d_tn->cct.cctorv) (d_tn->obj_init, pc_addr, d_tn->vec_len);
+ }
+ else {
+ d_tn->pod_init = __kmp_init_common_data( data_addr, d_tn->cmn_size );
+ }
+ } else {
+ if (d_tn->ct.ctor != 0) {
+ /* Construct from scratch so no prototype exists */
+ d_tn->obj_init = 0;
+ }
+ else if (d_tn->cct.cctor != 0) {
+ /* Now data initialize the prototype since it was previously registered */
+ d_tn->obj_init = (void *) __kmp_allocate( d_tn->cmn_size );
+ (void) (*d_tn->cct.cctor) (d_tn->obj_init, pc_addr);
+ }
+ else {
+ d_tn->pod_init = __kmp_init_common_data( data_addr, d_tn->cmn_size );
+ }
+ }
+ }
+ }
+ else {
+ struct shared_common **lnk_tn;
+
+ d_tn = (struct shared_common *) __kmp_allocate( sizeof( struct shared_common ) );
+ d_tn->gbl_addr = pc_addr;
+ d_tn->cmn_size = pc_size;
+ d_tn->pod_init = __kmp_init_common_data( data_addr, pc_size );
+/*
+ d_tn->obj_init = 0; // AC: commented out because __kmp_allocate zeroes the memory
+ d_tn->ct.ctor = 0;
+ d_tn->cct.cctor = 0;
+ d_tn->dt.dtor = 0;
+ d_tn->is_vec = FALSE;
+ d_tn->vec_len = 0L;
+*/
+ lnk_tn = &(__kmp_threadprivate_d_table.data[ KMP_HASH(pc_addr) ]);
+
+ d_tn->next = *lnk_tn;
+ *lnk_tn = d_tn;
+ }
+
+ tn->cmn_size = d_tn->cmn_size;
+
+ if ( (__kmp_foreign_tp) ? (KMP_INITIAL_GTID (gtid)) : (KMP_UBER_GTID (gtid)) ) {
+ tn->par_addr = (void *) pc_addr;
+ }
+ else {
+ tn->par_addr = (void *) __kmp_allocate( tn->cmn_size );
+ }
+
+ __kmp_release_lock( & __kmp_global_lock, gtid );
+
+ /* +++++++++ END OF CRITICAL SECTION +++++++++ */
+
+#ifdef USE_CHECKS_COMMON
+ if (pc_size > d_tn->cmn_size) {
+ KC_TRACE( 10, ( "__kmp_threadprivate_insert: THREADPRIVATE: %p (%"
+ KMP_UINTPTR_SPEC " ,%" KMP_UINTPTR_SPEC ")\n",
+ pc_addr, pc_size, d_tn->cmn_size ) );
+ KMP_FATAL( TPCommonBlocksInconsist );
+ }
+#endif /* USE_CHECKS_COMMON */
+
+ tt = &(__kmp_threads[ gtid ]->th.th_pri_common->data[ KMP_HASH(pc_addr) ]);
+
+#ifdef KMP_TASK_COMMON_DEBUG
+ if (*tt != 0) {
+ KC_TRACE( 10, ( "__kmp_threadprivate_insert: WARNING! thread#%d: collision on %p\n",
+ gtid, pc_addr ) );
+ }
+#endif
+ tn->next = *tt;
+ *tt = tn;
+
+#ifdef KMP_TASK_COMMON_DEBUG
+ KC_TRACE( 10, ( "__kmp_threadprivate_insert: thread#%d, inserted node %p on list\n",
+ gtid, pc_addr ) );
+ dump_list( );
+#endif
+
+ /* Link the node into a simple list */
+
+ tn->link = __kmp_threads[ gtid ]->th.th_pri_head;
+ __kmp_threads[ gtid ]->th.th_pri_head = tn;
+
+#ifdef BUILD_TV
+ __kmp_tv_threadprivate_store( __kmp_threads[ gtid ], tn->gbl_addr, tn->par_addr );
+#endif
+
+ if( (__kmp_foreign_tp) ? (KMP_INITIAL_GTID (gtid)) : (KMP_UBER_GTID (gtid)) )
+ return tn;
+
+ /*
+ * if C++ object with copy constructor, use it;
+ * else if C++ object with constructor, use it for the non-master copies only;
+ * else use pod_init and memcpy
+ *
+ * C++ constructors need to be called once for each non-master thread on allocate
+ * C++ copy constructors need to be called once for each thread on allocate
+ */
+
+ /*
+ * C++ object with constructors/destructors;
+ * don't call constructors for master thread though
+ */
+ if (d_tn->is_vec) {
+ if ( d_tn->ct.ctorv != 0) {
+ (void) (*d_tn->ct.ctorv) (tn->par_addr, d_tn->vec_len);
+ } else if (d_tn->cct.cctorv != 0) {
+ (void) (*d_tn->cct.cctorv) (tn->par_addr, d_tn->obj_init, d_tn->vec_len);
+ } else if (tn->par_addr != tn->gbl_addr) {
+ __kmp_copy_common_data( tn->par_addr, d_tn->pod_init );
+ }
+ } else {
+ if ( d_tn->ct.ctor != 0 ) {
+ (void) (*d_tn->ct.ctor) (tn->par_addr);
+ } else if (d_tn->cct.cctor != 0) {
+ (void) (*d_tn->cct.cctor) (tn->par_addr, d_tn->obj_init);
+ } else if (tn->par_addr != tn->gbl_addr) {
+ __kmp_copy_common_data( tn->par_addr, d_tn->pod_init );
+ }
+ }
+/* !BUILD_OPENMP_C
+ if (tn->par_addr != tn->gbl_addr)
+ __kmp_copy_common_data( tn->par_addr, d_tn->pod_init ); */
+
+ return tn;
+}
+
+/* ------------------------------------------------------------------------ */
+/* We are currently parallel, and we know the thread id. */
+/* ------------------------------------------------------------------------ */
+
+/*!
+ @ingroup THREADPRIVATE
+
+ @param loc source location information
+ @param data pointer to data being privatized
+ @param ctor pointer to constructor function for data
+ @param cctor pointer to copy constructor function for data
+ @param dtor pointer to destructor function for data
+
+ Register constructors and destructors for thread private data.
+ This function is called when executing in parallel, when we know the thread id.
+*/
+void
+__kmpc_threadprivate_register(ident_t *loc, void *data, kmpc_ctor ctor, kmpc_cctor cctor, kmpc_dtor dtor)
+{
+ struct shared_common *d_tn, **lnk_tn;
+
+ KC_TRACE( 10, ("__kmpc_threadprivate_register: called\n" ) );
+
+#ifdef USE_CHECKS_COMMON
+ /* copy constructor must be zero for current code gen (Nov 2002 - jph) */
+ KMP_ASSERT( cctor == 0);
+#endif /* USE_CHECKS_COMMON */
+
+ /* Only the global data table exists. */
+ d_tn = __kmp_find_shared_task_common( &__kmp_threadprivate_d_table, -1, data );
+
+ if (d_tn == 0) {
+ d_tn = (struct shared_common *) __kmp_allocate( sizeof( struct shared_common ) );
+ d_tn->gbl_addr = data;
+
+ d_tn->ct.ctor = ctor;
+ d_tn->cct.cctor = cctor;
+ d_tn->dt.dtor = dtor;
+/*
+ d_tn->is_vec = FALSE; // AC: commented out because __kmp_allocate zeroes the memory
+ d_tn->vec_len = 0L;
+ d_tn->obj_init = 0;
+ d_tn->pod_init = 0;
+*/
+ lnk_tn = &(__kmp_threadprivate_d_table.data[ KMP_HASH(data) ]);
+
+ d_tn->next = *lnk_tn;
+ *lnk_tn = d_tn;
+ }
+}
+
+void *
+__kmpc_threadprivate(ident_t *loc, kmp_int32 global_tid, void *data, size_t size)
+{
+ void *ret;
+ struct private_common *tn;
+
+ KC_TRACE( 10, ("__kmpc_threadprivate: T#%d called\n", global_tid ) );
+
+#ifdef USE_CHECKS_COMMON
+ if (! __kmp_init_serial)
+ KMP_FATAL( RTLNotInitialized );
+#endif /* USE_CHECKS_COMMON */
+
+ if ( ! __kmp_threads[global_tid] -> th.th_root -> r.r_active && ! __kmp_foreign_tp ) {
+ /* The parallel address will NEVER overlap with the data_address */
+ /* dkp: 3rd arg to kmp_threadprivate_insert_private_data() is the data_address; use data_address = data */
+
+ KC_TRACE( 20, ("__kmpc_threadprivate: T#%d inserting private data\n", global_tid ) );
+ kmp_threadprivate_insert_private_data( global_tid, data, data, size );
+
+ ret = data;
+ }
+ else {
+ KC_TRACE( 50, ("__kmpc_threadprivate: T#%d try to find private data at address %p\n",
+ global_tid, data ) );
+ tn = __kmp_threadprivate_find_task_common( __kmp_threads[ global_tid ]->th.th_pri_common, global_tid, data );
+
+ if ( tn ) {
+ KC_TRACE( 20, ("__kmpc_threadprivate: T#%d found data\n", global_tid ) );
+#ifdef USE_CHECKS_COMMON
+ if ((size_t) size > tn->cmn_size) {
+ KC_TRACE( 10, ( "THREADPRIVATE: %p (%" KMP_UINTPTR_SPEC " ,%" KMP_UINTPTR_SPEC ")\n",
+ data, size, tn->cmn_size ) );
+ KMP_FATAL( TPCommonBlocksInconsist );
+ }
+#endif /* USE_CHECKS_COMMON */
+ }
+ else {
+ /* The parallel address will NEVER overlap with the data_address */
+ /* dkp: 3rd arg to kmp_threadprivate_insert() is the data_address; use data_address = data */
+ KC_TRACE( 20, ("__kmpc_threadprivate: T#%d inserting data\n", global_tid ) );
+ tn = kmp_threadprivate_insert( global_tid, data, data, size );
+ }
+
+ ret = tn->par_addr;
+ }
+ KC_TRACE( 10, ("__kmpc_threadprivate: T#%d exiting; return value = %p\n",
+ global_tid, ret ) );
+
+ return ret;
+}
+
+/*!
+ @ingroup THREADPRIVATE
+ @param loc source location information
+ @param global_tid global thread number
+ @param data pointer to data to privatize
+ @param size size of data to privatize
+ @param cache pointer to cache
+ @return pointer to private storage
+
+ Allocate private storage for threadprivate data.
+*/
+void *
+__kmpc_threadprivate_cached(
+ ident_t * loc,
+ kmp_int32 global_tid, // gtid.
+ void * data, // Pointer to original global variable.
+ size_t size, // Size of original global variable.
+ void *** cache
+) {
+ KC_TRACE( 10, ("__kmpc_threadprivate_cached: T#%d called with cache: %p, address: %p, size: %"
+ KMP_SIZE_T_SPEC "\n",
+ global_tid, *cache, data, size ) );
+
+ if ( TCR_PTR(*cache) == 0) {
+ __kmp_acquire_lock( & __kmp_global_lock, global_tid );
+
+ if ( TCR_PTR(*cache) == 0) {
+ __kmp_acquire_bootstrap_lock(&__kmp_tp_cached_lock);
+ __kmp_tp_cached = 1;
+ __kmp_release_bootstrap_lock(&__kmp_tp_cached_lock);
+ void ** my_cache;
+ KMP_ITT_IGNORE(
+ my_cache = (void**)
+ __kmp_allocate(sizeof( void * ) * __kmp_tp_capacity + sizeof ( kmp_cached_addr_t ));
+ );
+ // No need to zero the allocated memory; __kmp_allocate does that.
+ KC_TRACE( 50, ("__kmpc_threadprivate_cached: T#%d allocated cache at address %p\n",
+ global_tid, my_cache ) );
+
+ /* TODO: free all this memory in __kmp_common_destroy using __kmp_threadpriv_cache_list */
+ /* Add address of mycache to linked list for cleanup later */
+ kmp_cached_addr_t *tp_cache_addr;
+
+ tp_cache_addr = (kmp_cached_addr_t *) & my_cache[__kmp_tp_capacity];
+ tp_cache_addr -> addr = my_cache;
+ tp_cache_addr -> next = __kmp_threadpriv_cache_list;
+ __kmp_threadpriv_cache_list = tp_cache_addr;
+
+ KMP_MB();
+
+ TCW_PTR( *cache, my_cache);
+
+ KMP_MB();
+ }
+
+ __kmp_release_lock( & __kmp_global_lock, global_tid );
+ }
+
+ void *ret;
+ if ((ret = TCR_PTR((*cache)[ global_tid ])) == 0) {
+ ret = __kmpc_threadprivate( loc, global_tid, data, (size_t) size);
+
+ TCW_PTR( (*cache)[ global_tid ], ret);
+ }
+ KC_TRACE( 10, ("__kmpc_threadprivate_cached: T#%d exiting; return value = %p\n",
+ global_tid, ret ) );
+
+ return ret;
+}
+
+/*!
+ @ingroup THREADPRIVATE
+ @param loc source location information
+ @param data pointer to data being privatized
+ @param ctor pointer to constructor function for data
+ @param cctor pointer to copy constructor function for data
+ @param dtor pointer to destructor function for data
+ @param vector_length length of the vector (bytes or elements?)
+ Register vector constructors and destructors for thread private data.
+*/
+void
+__kmpc_threadprivate_register_vec( ident_t *loc, void *data, kmpc_ctor_vec ctor,
+ kmpc_cctor_vec cctor, kmpc_dtor_vec dtor,
+ size_t vector_length )
+{
+ struct shared_common *d_tn, **lnk_tn;
+
+ KC_TRACE( 10, ("__kmpc_threadprivate_register_vec: called\n" ) );
+
+#ifdef USE_CHECKS_COMMON
+ /* copy constructor must be zero for current code gen (Nov 2002 - jph) */
+ KMP_ASSERT( cctor == 0);
+#endif /* USE_CHECKS_COMMON */
+
+ d_tn = __kmp_find_shared_task_common( &__kmp_threadprivate_d_table,
+ -1, data ); /* Only the global data table exists. */
+
+ if (d_tn == 0) {
+ d_tn = (struct shared_common *) __kmp_allocate( sizeof( struct shared_common ) );
+ d_tn->gbl_addr = data;
+
+ d_tn->ct.ctorv = ctor;
+ d_tn->cct.cctorv = cctor;
+ d_tn->dt.dtorv = dtor;
+ d_tn->is_vec = TRUE;
+ d_tn->vec_len = (size_t) vector_length;
+/*
+ d_tn->obj_init = 0; // AC: commented out because __kmp_allocate zeroes the memory
+ d_tn->pod_init = 0;
+*/
+ lnk_tn = &(__kmp_threadprivate_d_table.data[ KMP_HASH(data) ]);
+
+ d_tn->next = *lnk_tn;
+ *lnk_tn = d_tn;
+ }
+}
diff --git a/final/runtime/src/kmp_utility.c b/final/runtime/src/kmp_utility.c
new file mode 100644
index 0000000..761fd06
--- /dev/null
+++ b/final/runtime/src/kmp_utility.c
@@ -0,0 +1,429 @@
+/*
+ * kmp_utility.c -- Utility routines for the OpenMP support library.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_wrapper_getpid.h"
+#include "kmp_str.h"
+#include <float.h>
+#include "kmp_i18n.h"
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+static const char *unknown = "unknown";
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+/* NOTE: If called before serial_initialize (i.e. from runtime_initialize), then */
+/* the debugging package has not been initialized yet, and only "0" will print */
+/* debugging output since the environment variables have not been read. */
+
+#ifdef KMP_DEBUG
+static int trace_level = 5;
+#endif
+
+/*
+ * LOG_ID_BITS = ( 1 + floor( log_2( max( log_per_phy - 1, 1 ))))
+ * APIC_ID = (PHY_ID << LOG_ID_BITS) | LOG_ID
+ * PHY_ID = APIC_ID >> LOG_ID_BITS
+ */
+int
+__kmp_get_physical_id( int log_per_phy, int apic_id )
+{
+ int index_lsb, index_msb, temp;
+
+ if (log_per_phy > 1) {
+ index_lsb = 0;
+ index_msb = 31;
+
+ temp = log_per_phy;
+ while ( (temp & 1) == 0 ) {
+ temp >>= 1;
+ index_lsb++;
+ }
+
+ temp = log_per_phy;
+ while ( (temp & 0x80000000)==0 ) {
+ temp <<= 1;
+ index_msb--;
+ }
+
+ /* If >1 bits were set in log_per_phy, choose next higher power of 2 */
+ if (index_lsb != index_msb) index_msb++;
+
+ return ( (int) (apic_id >> index_msb) );
+ }
+
+ return apic_id;
+}
+
+
+/*
+ * LOG_ID_BITS = ( 1 + floor( log_2( max( log_per_phy - 1, 1 ))))
+ * APIC_ID = (PHY_ID << LOG_ID_BITS) | LOG_ID
+ * LOG_ID = APIC_ID & (( 1 << LOG_ID_BITS ) - 1 )
+ */
+int
+__kmp_get_logical_id( int log_per_phy, int apic_id )
+{
+ unsigned current_bit;
+ int bits_seen;
+
+ if (log_per_phy <= 1) return ( 0 );
+
+ bits_seen = 0;
+
+ for (current_bit = 1; log_per_phy != 0; current_bit <<= 1) {
+ if ( log_per_phy & current_bit ) {
+ log_per_phy &= ~current_bit;
+ bits_seen++;
+ }
+ }
+
+ /* If exactly 1 bit was set in log_per_phy, choose next lower power of 2 */
+ if (bits_seen == 1) {
+ current_bit >>= 1;
+ }
+
+ return ( (int) ((current_bit - 1) & apic_id) );
+}
+
+
+static
+kmp_uint64
+__kmp_parse_frequency( // R: Frequency in Hz.
+ char const * frequency // I: Float number and unit: MHz, GHz, or TGz.
+) {
+
+ double value = 0.0;
+ char const * unit = NULL;
+ kmp_uint64 result = 0; /* Zero is a better unknown value than all ones. */
+
+ if ( frequency == NULL ) {
+ return result;
+ }; // if
+ value = strtod( frequency, (char * *) & unit ); // strtod() does not like "char const *".
+ if ( 0 < value && value <= DBL_MAX ) { // Good value (not overflow, underflow, etc).
+ if ( strcmp( unit, "MHz" ) == 0 ) {
+ value = value * 1.0E+6;
+ } else if ( strcmp( unit, "GHz" ) == 0 ) {
+ value = value * 1.0E+9;
+ } else if ( strcmp( unit, "THz" ) == 0 ) {
+ value = value * 1.0E+12;
+ } else { // Wrong unit.
+ return result;
+ }; // if
+ result = value;
+ }; // if
+ return result;
+
+}; // func __kmp_parse_cpu_frequency
+
+void
+__kmp_query_cpuid( kmp_cpuinfo_t *p )
+{
+ struct kmp_cpuid buf;
+ int max_arg;
+ int log_per_phy;
+#ifdef KMP_DEBUG
+ int cflush_size;
+#endif
+
+ p->initialized = 1;
+
+ p->sse2 = 1; // Assume SSE2 by default.
+
+ __kmp_x86_cpuid( 0, 0, &buf );
+
+ KA_TRACE( trace_level, ("INFO: CPUID %d: EAX=0x%08X EBX=0x%08X ECX=0x%08X EDX=0x%08X\n",
+ 0, buf.eax, buf.ebx, buf.ecx, buf.edx ) );
+
+ max_arg = buf.eax;
+
+ p->apic_id = -1;
+
+ if (max_arg >= 1) {
+ int i;
+ kmp_uint32 t, data[ 4 ];
+
+ __kmp_x86_cpuid( 1, 0, &buf );
+ KA_TRACE( trace_level, ("INFO: CPUID %d: EAX=0x%08X EBX=0x%08X ECX=0x%08X EDX=0x%08X\n",
+ 1, buf.eax, buf.ebx, buf.ecx, buf.edx ) );
+
+ {
+#define get_value(reg,lo,mask) ( ( ( reg ) >> ( lo ) ) & ( mask ) )
+
+ p->signature = buf.eax;
+ p->family = get_value( buf.eax, 20, 0xff ) + get_value( buf.eax, 8, 0x0f );
+ p->model = ( get_value( buf.eax, 16, 0x0f ) << 4 ) + get_value( buf.eax, 4, 0x0f );
+ p->stepping = get_value( buf.eax, 0, 0x0f );
+
+#undef get_value
+
+ KA_TRACE( trace_level, (" family = %d, model = %d, stepping = %d\n", p->family, p->model, p->stepping ) );
+ }
+
+ for ( t = buf.ebx, i = 0; i < 4; t >>= 8, ++i ) {
+ data[ i ] = (t & 0xff);
+ }; // for
+
+ p->sse2 = ( buf.edx >> 26 ) & 1;
+
+#ifdef KMP_DEBUG
+
+ if ( (buf.edx >> 4) & 1 ) {
+ /* TSC - Timestamp Counter Available */
+ KA_TRACE( trace_level, (" TSC" ) );
+ }
+ if ( (buf.edx >> 8) & 1 ) {
+ /* CX8 - CMPXCHG8B Instruction Available */
+ KA_TRACE( trace_level, (" CX8" ) );
+ }
+ if ( (buf.edx >> 9) & 1 ) {
+ /* APIC - Local APIC Present (multi-processor operation support */
+ KA_TRACE( trace_level, (" APIC" ) );
+ }
+ if ( (buf.edx >> 15) & 1 ) {
+ /* CMOV - Conditional MOVe Instruction Available */
+ KA_TRACE( trace_level, (" CMOV" ) );
+ }
+ if ( (buf.edx >> 18) & 1 ) {
+ /* PSN - Processor Serial Number Available */
+ KA_TRACE( trace_level, (" PSN" ) );
+ }
+ if ( (buf.edx >> 19) & 1 ) {
+ /* CLFULSH - Cache Flush Instruction Available */
+ cflush_size = data[ 1 ] * 8; /* Bits 15-08: CLFLUSH line size = 8 (64 bytes) */
+ KA_TRACE( trace_level, (" CLFLUSH(%db)", cflush_size ) );
+
+ }
+ if ( (buf.edx >> 21) & 1 ) {
+ /* DTES - Debug Trace & EMON Store */
+ KA_TRACE( trace_level, (" DTES" ) );
+ }
+ if ( (buf.edx >> 22) & 1 ) {
+ /* ACPI - ACPI Support Available */
+ KA_TRACE( trace_level, (" ACPI" ) );
+ }
+ if ( (buf.edx >> 23) & 1 ) {
+ /* MMX - Multimedia Extensions */
+ KA_TRACE( trace_level, (" MMX" ) );
+ }
+ if ( (buf.edx >> 25) & 1 ) {
+ /* SSE - SSE Instructions */
+ KA_TRACE( trace_level, (" SSE" ) );
+ }
+ if ( (buf.edx >> 26) & 1 ) {
+ /* SSE2 - SSE2 Instructions */
+ KA_TRACE( trace_level, (" SSE2" ) );
+ }
+ if ( (buf.edx >> 27) & 1 ) {
+ /* SLFSNP - Self-Snooping Cache */
+ KA_TRACE( trace_level, (" SLFSNP" ) );
+ }
+#endif /* KMP_DEBUG */
+
+ if ( (buf.edx >> 28) & 1 ) {
+ /* Bits 23-16: Logical Processors per Physical Processor (1 for P4) */
+ log_per_phy = data[ 2 ];
+ p->apic_id = data[ 3 ]; /* Bits 31-24: Processor Initial APIC ID (X) */
+ KA_TRACE( trace_level, (" HT(%d TPUs)", log_per_phy ) );
+
+ if( log_per_phy > 1 ) {
+ /* default to 1k FOR JT-enabled processors (4k on OS X*) */
+#if KMP_OS_DARWIN
+ p->cpu_stackoffset = 4 * 1024;
+#else
+ p->cpu_stackoffset = 1 * 1024;
+#endif
+ }
+
+ p->physical_id = __kmp_get_physical_id( log_per_phy, p->apic_id );
+ p->logical_id = __kmp_get_logical_id( log_per_phy, p->apic_id );
+ }
+#ifdef KMP_DEBUG
+ if ( (buf.edx >> 29) & 1 ) {
+ /* ATHROTL - Automatic Throttle Control */
+ KA_TRACE( trace_level, (" ATHROTL" ) );
+ }
+ KA_TRACE( trace_level, (" ]\n" ) );
+
+ for (i = 2; i <= max_arg; ++i) {
+ __kmp_x86_cpuid( i, 0, &buf );
+ KA_TRACE( trace_level,
+ ( "INFO: CPUID %d: EAX=0x%08X EBX=0x%08X ECX=0x%08X EDX=0x%08X\n",
+ i, buf.eax, buf.ebx, buf.ecx, buf.edx ) );
+ }
+#endif
+#if KMP_USE_ADAPTIVE_LOCKS
+ p->rtm = 0;
+ if (max_arg > 7)
+ {
+ /* RTM bit CPUID.07:EBX, bit 11 */
+ __kmp_x86_cpuid(7, 0, &buf);
+ p->rtm = (buf.ebx >> 11) & 1;
+ KA_TRACE( trace_level, (" RTM" ) );
+ }
+#endif
+ }; // if
+
+ { // Parse CPU brand string for frequency, saving the string for later.
+ int i;
+ kmp_cpuid_t * base = (kmp_cpuid_t *)&p->name[0];
+
+ // Get CPU brand string.
+ for ( i = 0; i < 3; ++ i ) {
+ __kmp_x86_cpuid( 0x80000002 + i, 0, base+i );
+ }; // for
+ p->name[ sizeof(p->name) - 1 ] = 0; // Just in case. ;-)
+ KA_TRACE( trace_level, ( "cpu brand string: \"%s\"\n", &p->name[0] ) );
+
+ // Parse frequency.
+ p->frequency = __kmp_parse_frequency( strrchr( &p->name[0], ' ' ) );
+ KA_TRACE( trace_level, ( "cpu frequency from brand string: %" KMP_UINT64_SPEC "\n", p->frequency ) );
+ }
+}
+
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+/* ------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------ */
+
+void
+__kmp_expand_host_name( char *buffer, size_t size )
+{
+ KMP_DEBUG_ASSERT(size >= sizeof(unknown));
+#if KMP_OS_WINDOWS
+ {
+ DWORD s = size;
+
+ if (! GetComputerNameA( buffer, & s ))
+ KMP_STRCPY_S( buffer, size, unknown );
+ }
+#else
+ buffer[size - 2] = 0;
+ if (gethostname( buffer, size ) || buffer[size - 2] != 0)
+ KMP_STRCPY_S( buffer, size, unknown );
+#endif
+}
+
+/* Expand the meta characters in the filename:
+ *
+ * Currently defined characters are:
+ *
+ * %H the hostname
+ * %P the number of threads used.
+ * %I the unique identifier for this run.
+ */
+
+void
+__kmp_expand_file_name( char *result, size_t rlen, char *pattern )
+{
+ char *pos = result, *end = result + rlen - 1;
+ char buffer[256];
+ int default_cpu_width = 1;
+ int snp_result;
+
+ KMP_DEBUG_ASSERT(rlen > 0);
+ *end = 0;
+ {
+ int i;
+ for(i = __kmp_xproc; i >= 10; i /= 10, ++default_cpu_width);
+ }
+
+ if (pattern != NULL) {
+ while (*pattern != '\0' && pos < end) {
+ if (*pattern != '%') {
+ *pos++ = *pattern++;
+ } else {
+ char *old_pattern = pattern;
+ int width = 1;
+ int cpu_width = default_cpu_width;
+
+ ++pattern;
+
+ if (*pattern >= '0' && *pattern <= '9') {
+ width = 0;
+ do {
+ width = (width * 10) + *pattern++ - '0';
+ } while (*pattern >= '0' && *pattern <= '9');
+ if (width < 0 || width > 1024)
+ width = 1;
+
+ cpu_width = width;
+ }
+
+ switch (*pattern) {
+ case 'H':
+ case 'h':
+ {
+ __kmp_expand_host_name( buffer, sizeof( buffer ) );
+ KMP_STRNCPY( pos, buffer, end - pos + 1);
+ if(*end == 0) {
+ while ( *pos )
+ ++pos;
+ ++pattern;
+ } else
+ pos = end;
+ }
+ break;
+ case 'P':
+ case 'p':
+ {
+ snp_result = KMP_SNPRINTF( pos, end - pos + 1, "%0*d", cpu_width, __kmp_dflt_team_nth );
+ if(snp_result >= 0 && snp_result <= end - pos) {
+ while ( *pos )
+ ++pos;
+ ++pattern;
+ } else
+ pos = end;
+ }
+ break;
+ case 'I':
+ case 'i':
+ {
+ pid_t id = getpid();
+ snp_result = KMP_SNPRINTF( pos, end - pos + 1, "%0*d", width, id );
+ if(snp_result >= 0 && snp_result <= end - pos) {
+ while ( *pos )
+ ++pos;
+ ++pattern;
+ } else
+ pos = end;
+ break;
+ }
+ case '%':
+ {
+ *pos++ = '%';
+ ++pattern;
+ break;
+ }
+ default:
+ {
+ *pos++ = '%';
+ pattern = old_pattern + 1;
+ break;
+ }
+ }
+ }
+ }
+ /* TODO: How do we get rid of this? */
+ if(*pattern != '\0')
+ KMP_FATAL( FileNameTooLong );
+ }
+
+ *pos = '\0';
+}
+
diff --git a/final/runtime/src/kmp_version.c b/final/runtime/src/kmp_version.c
new file mode 100644
index 0000000..143de67
--- /dev/null
+++ b/final/runtime/src/kmp_version.c
@@ -0,0 +1,212 @@
+/*
+ * kmp_version.c
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_io.h"
+#include "kmp_version.h"
+
+// Replace with snapshot date YYYYMMDD for promotion build.
+#define KMP_VERSION_BUILD 20140926
+
+// Helper macros to convert value of macro to string literal.
+#define _stringer( x ) #x
+#define stringer( x ) _stringer( x )
+
+// Detect compiler.
+#if KMP_COMPILER_ICC
+ #if __INTEL_COMPILER == 1010
+ #define KMP_COMPILER "Intel C++ Compiler 10.1"
+ #elif __INTEL_COMPILER == 1100
+ #define KMP_COMPILER "Intel C++ Compiler 11.0"
+ #elif __INTEL_COMPILER == 1110
+ #define KMP_COMPILER "Intel C++ Compiler 11.1"
+ #elif __INTEL_COMPILER == 1200
+ #define KMP_COMPILER "Intel C++ Compiler 12.0"
+ #elif __INTEL_COMPILER == 1210
+ #define KMP_COMPILER "Intel C++ Compiler 12.1"
+ #elif __INTEL_COMPILER == 1300
+ #define KMP_COMPILER "Intel C++ Compiler 13.0"
+ #elif __INTEL_COMPILER == 1310
+ #define KMP_COMPILER "Intel C++ Compiler 13.1"
+ #elif __INTEL_COMPILER == 1400
+ #define KMP_COMPILER "Intel C++ Compiler 14.0"
+ #elif __INTEL_COMPILER == 1410
+ #define KMP_COMPILER "Intel C++ Compiler 14.1"
+ #elif __INTEL_COMPILER == 1500
+ #define KMP_COMPILER "Intel C++ Compiler 15.0"
+ #elif __INTEL_COMPILER == 1600
+ #define KMP_COMPILER "Intel C++ Compiler 16.0"
+ #elif __INTEL_COMPILER == 1700
+ #define KMP_COMPILER "Intel C++ Compiler 17.0"
+ #elif __INTEL_COMPILER == 9998
+ #define KMP_COMPILER "Intel C++ Compiler mainline"
+ #elif __INTEL_COMPILER == 9999
+ #define KMP_COMPILER "Intel C++ Compiler mainline"
+ #endif
+#elif KMP_COMPILER_CLANG
+ #define KMP_COMPILER "Clang " stringer( __clang_major__ ) "." stringer( __clang_minor__ )
+#elif KMP_COMPILER_GCC
+ #define KMP_COMPILER "GCC " stringer( __GNUC__ ) "." stringer( __GNUC_MINOR__ )
+#elif KMP_COMPILER_MSVC
+ #define KMP_COMPILER "MSVC " stringer( _MSC_FULL_VER )
+#endif
+#ifndef KMP_COMPILER
+ #warning "Unknown compiler"
+ #define KMP_COMPILER "unknown compiler"
+#endif
+
+// Detect librray type (perf, stub).
+#ifdef KMP_STUB
+ #define KMP_LIB_TYPE "stub"
+#else
+ #define KMP_LIB_TYPE "performance"
+#endif // KMP_LIB_TYPE
+
+// Detect link type (static, dynamic).
+#ifdef KMP_DYNAMIC_LIB
+ #define KMP_LINK_TYPE "dynamic"
+#else
+ #define KMP_LINK_TYPE "static"
+#endif // KMP_LINK_TYPE
+
+// Finally, define strings.
+#define KMP_LIBRARY KMP_LIB_TYPE " library (" KMP_LINK_TYPE ")"
+#define KMP_COPYRIGHT ""
+
+int const __kmp_version_major = KMP_VERSION_MAJOR;
+int const __kmp_version_minor = KMP_VERSION_MINOR;
+int const __kmp_version_build = KMP_VERSION_BUILD;
+int const __kmp_openmp_version =
+ #if OMP_40_ENABLED
+ 201307;
+ #else
+ 201107;
+ #endif
+
+/* Do NOT change the format of this string! Intel(R) Thread Profiler checks for a
+ specific format some changes in the recognition routine there need to
+ be made before this is changed.
+*/
+char const __kmp_copyright[] =
+ KMP_VERSION_PREFIX KMP_LIBRARY
+ " ver. " stringer( KMP_VERSION_MAJOR ) "." stringer( KMP_VERSION_MINOR )
+ "." stringer( KMP_VERSION_BUILD ) " "
+ KMP_COPYRIGHT;
+
+char const __kmp_version_copyright[] = KMP_VERSION_PREFIX KMP_COPYRIGHT;
+char const __kmp_version_lib_ver[] = KMP_VERSION_PREFIX "version: " stringer( KMP_VERSION_MAJOR ) "." stringer( KMP_VERSION_MINOR ) "." stringer( KMP_VERSION_BUILD );
+char const __kmp_version_lib_type[] = KMP_VERSION_PREFIX "library type: " KMP_LIB_TYPE;
+char const __kmp_version_link_type[] = KMP_VERSION_PREFIX "link type: " KMP_LINK_TYPE;
+char const __kmp_version_build_time[] = KMP_VERSION_PREFIX "build time: " "no_timestamp";
+#if KMP_MIC2
+ char const __kmp_version_target_env[] = KMP_VERSION_PREFIX "target environment: MIC2";
+#endif
+char const __kmp_version_build_compiler[] = KMP_VERSION_PREFIX "build compiler: " KMP_COMPILER;
+
+//
+// Called at serial initialization time.
+//
+static int __kmp_version_1_printed = FALSE;
+
+void
+__kmp_print_version_1( void )
+{
+ if ( __kmp_version_1_printed ) {
+ return;
+ }; // if
+ __kmp_version_1_printed = TRUE;
+
+ #ifndef KMP_STUB
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init( & buffer );
+ // Print version strings skipping initial magic.
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_lib_ver[ KMP_VERSION_MAGIC_LEN ] );
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_lib_type[ KMP_VERSION_MAGIC_LEN ] );
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_link_type[ KMP_VERSION_MAGIC_LEN ] );
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_build_time[ KMP_VERSION_MAGIC_LEN ] );
+ #if KMP_MIC
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_target_env[ KMP_VERSION_MAGIC_LEN ] );
+ #endif
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_build_compiler[ KMP_VERSION_MAGIC_LEN ] );
+ #if defined(KMP_GOMP_COMPAT)
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_alt_comp[ KMP_VERSION_MAGIC_LEN ] );
+ #endif /* defined(KMP_GOMP_COMPAT) */
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_omp_api[ KMP_VERSION_MAGIC_LEN ] );
+ __kmp_str_buf_print( & buffer, "%sdynamic error checking: %s\n", KMP_VERSION_PREF_STR, ( __kmp_env_consistency_check ? "yes" : "no" ) );
+ #ifdef KMP_DEBUG
+ for ( int i = bs_plain_barrier; i < bs_last_barrier; ++ i ) {
+ __kmp_str_buf_print(
+ & buffer,
+ "%s%s barrier branch bits: gather=%u, release=%u\n",
+ KMP_VERSION_PREF_STR,
+ __kmp_barrier_type_name[ i ],
+ __kmp_barrier_gather_branch_bits[ i ],
+ __kmp_barrier_release_branch_bits[ i ]
+ ); // __kmp_str_buf_print
+ }; // for i
+ for ( int i = bs_plain_barrier; i < bs_last_barrier; ++ i ) {
+ __kmp_str_buf_print(
+ & buffer,
+ "%s%s barrier pattern: gather=%s, release=%s\n",
+ KMP_VERSION_PREF_STR,
+ __kmp_barrier_type_name[ i ],
+ __kmp_barrier_pattern_name[ __kmp_barrier_gather_pattern[ i ] ],
+ __kmp_barrier_pattern_name[ __kmp_barrier_release_pattern[ i ] ]
+ ); // __kmp_str_buf_print
+ }; // for i
+ __kmp_str_buf_print( & buffer, "%s\n", & __kmp_version_lock[ KMP_VERSION_MAGIC_LEN ] );
+ #endif
+ __kmp_str_buf_print(
+ & buffer,
+ "%sthread affinity support: %s\n",
+ KMP_VERSION_PREF_STR,
+ #if KMP_AFFINITY_SUPPORTED
+ (
+ KMP_AFFINITY_CAPABLE()
+ ?
+ (
+ __kmp_affinity_type == affinity_none
+ ?
+ "not used"
+ :
+ "yes"
+ )
+ :
+ "no"
+ )
+ #else
+ "no"
+ #endif
+ );
+ __kmp_printf( "%s", buffer.str );
+ __kmp_str_buf_free( & buffer );
+ K_DIAG( 1, ( "KMP_VERSION is true\n" ) );
+ #endif // KMP_STUB
+} // __kmp_print_version_1
+
+//
+// Called at parallel initialization time.
+//
+static int __kmp_version_2_printed = FALSE;
+
+void
+__kmp_print_version_2( void ) {
+ if ( __kmp_version_2_printed ) {
+ return;
+ }; // if
+ __kmp_version_2_printed = TRUE;
+} // __kmp_print_version_2
+
+// end of file //
diff --git a/final/runtime/src/kmp_version.h b/final/runtime/src/kmp_version.h
new file mode 100644
index 0000000..212853b
--- /dev/null
+++ b/final/runtime/src/kmp_version.h
@@ -0,0 +1,68 @@
+/*
+ * kmp_version.h -- version number for this release
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_VERSION_H
+#define KMP_VERSION_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif // __cplusplus
+
+#ifndef KMP_VERSION_MAJOR
+ #error KMP_VERSION_MAJOR macro is not defined.
+#endif
+#define KMP_VERSION_MINOR 0
+/*
+ Using "magic" prefix in all the version strings is rather convenient to get static version info
+ from binaries by using standard utilities "strings" and "grep", e. g.:
+ $ strings libomp.so | grep "@(#)"
+ gives clean list of all version strings in the library. Leading zero helps to keep version
+ string separate from printable characters which may occurs just before version string.
+*/
+#define KMP_VERSION_MAGIC_STR "\x00@(#) "
+#define KMP_VERSION_MAGIC_LEN 6 // Length of KMP_VERSION_MAGIC_STR.
+#define KMP_VERSION_PREF_STR "Intel(R) OMP "
+#define KMP_VERSION_PREFIX KMP_VERSION_MAGIC_STR KMP_VERSION_PREF_STR
+
+/* declare all the version string constants for KMP_VERSION env. variable */
+extern int const __kmp_version_major;
+extern int const __kmp_version_minor;
+extern int const __kmp_version_build;
+extern int const __kmp_openmp_version;
+extern char const __kmp_copyright[]; // Old variable, kept for compatibility with ITC and ITP.
+extern char const __kmp_version_copyright[];
+extern char const __kmp_version_lib_ver[];
+extern char const __kmp_version_lib_type[];
+extern char const __kmp_version_link_type[];
+extern char const __kmp_version_build_time[];
+extern char const __kmp_version_target_env[];
+extern char const __kmp_version_build_compiler[];
+extern char const __kmp_version_alt_comp[];
+extern char const __kmp_version_omp_api[];
+// ??? extern char const __kmp_version_debug[];
+extern char const __kmp_version_lock[];
+extern char const __kmp_version_nested_stats_reporting[];
+extern char const __kmp_version_ftnstdcall[];
+extern char const __kmp_version_ftncdecl[];
+extern char const __kmp_version_ftnextra[];
+
+void __kmp_print_version_1( void );
+void __kmp_print_version_2( void );
+
+#ifdef __cplusplus
+ } // extern "C"
+#endif // __cplusplus
+
+#endif /* KMP_VERSION_H */
diff --git a/final/runtime/src/kmp_wait_release.cpp b/final/runtime/src/kmp_wait_release.cpp
new file mode 100644
index 0000000..05b1e05
--- /dev/null
+++ b/final/runtime/src/kmp_wait_release.cpp
@@ -0,0 +1,26 @@
+/*
+ * kmp_wait_release.cpp -- Wait/Release implementation
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "kmp_wait_release.h"
+
+void __kmp_wait_64(kmp_info_t *this_thr, kmp_flag_64 *flag, int final_spin
+ USE_ITT_BUILD_ARG(void * itt_sync_obj) )
+{
+ __kmp_wait_template(this_thr, flag, final_spin
+ USE_ITT_BUILD_ARG(itt_sync_obj) );
+}
+
+void __kmp_release_64(kmp_flag_64 *flag) {
+ __kmp_release_template(flag);
+}
diff --git a/final/runtime/src/kmp_wait_release.h b/final/runtime/src/kmp_wait_release.h
new file mode 100644
index 0000000..c8f6b5c
--- /dev/null
+++ b/final/runtime/src/kmp_wait_release.h
@@ -0,0 +1,598 @@
+/*
+ * kmp_wait_release.h -- Wait/Release implementation
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_WAIT_RELEASE_H
+#define KMP_WAIT_RELEASE_H
+
+#include "kmp.h"
+#include "kmp_itt.h"
+#include "kmp_stats.h"
+
+/*!
+@defgroup WAIT_RELEASE Wait/Release operations
+
+The definitions and functions here implement the lowest level thread
+synchronizations of suspending a thread and awaking it. They are used
+to build higher level operations such as barriers and fork/join.
+*/
+
+/*!
+@ingroup WAIT_RELEASE
+@{
+*/
+
+/*!
+ * The flag_type describes the storage used for the flag.
+ */
+enum flag_type {
+ flag32, /**< 32 bit flags */
+ flag64, /**< 64 bit flags */
+ flag_oncore /**< special 64-bit flag for on-core barrier (hierarchical) */
+};
+
+/*!
+ * Base class for wait/release volatile flag
+ */
+template <typename P>
+class kmp_flag {
+ volatile P * loc; /**< Pointer to the flag storage that is modified by another thread */
+ flag_type t; /**< "Type" of the flag in loc */
+ public:
+ typedef P flag_t;
+ kmp_flag(volatile P *p, flag_type ft) : loc(p), t(ft) {}
+ /*!
+ * @result the pointer to the actual flag
+ */
+ volatile P * get() { return loc; }
+ /*!
+ * @param new_loc in set loc to point at new_loc
+ */
+ void set(volatile P *new_loc) { loc = new_loc; }
+ /*!
+ * @result the flag_type
+ */
+ flag_type get_type() { return t; }
+ // Derived classes must provide the following:
+ /*
+ kmp_info_t * get_waiter(kmp_uint32 i);
+ kmp_uint32 get_num_waiters();
+ bool done_check();
+ bool done_check_val(P old_loc);
+ bool notdone_check();
+ P internal_release();
+ void suspend(int th_gtid);
+ void resume(int th_gtid);
+ P set_sleeping();
+ P unset_sleeping();
+ bool is_sleeping();
+ bool is_any_sleeping();
+ bool is_sleeping_val(P old_loc);
+ int execute_tasks(kmp_info_t *this_thr, kmp_int32 gtid, int final_spin, int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained);
+ */
+};
+
+/* Spin wait loop that first does pause, then yield, then sleep. A thread that calls __kmp_wait_*
+ must make certain that another thread calls __kmp_release to wake it back up to prevent deadlocks! */
+template <class C>
+static inline void
+__kmp_wait_template(kmp_info_t *this_thr, C *flag, int final_spin
+ USE_ITT_BUILD_ARG(void * itt_sync_obj) )
+{
+ // NOTE: We may not belong to a team at this point.
+ volatile typename C::flag_t *spin = flag->get();
+ kmp_uint32 spins;
+ kmp_uint32 hibernate;
+ int th_gtid;
+ int tasks_completed = FALSE;
+ int oversubscribed;
+
+ KMP_FSYNC_SPIN_INIT(spin, NULL);
+ if (flag->done_check()) {
+ KMP_FSYNC_SPIN_ACQUIRED(spin);
+ return;
+ }
+ th_gtid = this_thr->th.th_info.ds.ds_gtid;
+ KA_TRACE(20, ("__kmp_wait_sleep: T#%d waiting for flag(%p)\n", th_gtid, flag));
+#if KMP_STATS_ENABLED
+ stats_state_e thread_state = KMP_GET_THREAD_STATE();
+#endif
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ ompt_state_t ompt_state = this_thr->th.ompt_thread_info.state;
+ if (ompt_enabled &&
+ ompt_state != ompt_state_undefined) {
+ if (ompt_state == ompt_state_idle) {
+ if (ompt_callbacks.ompt_callback(ompt_event_idle_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_idle_begin)(th_gtid + 1);
+ }
+ } else if (ompt_callbacks.ompt_callback(ompt_event_wait_barrier_begin)) {
+ KMP_DEBUG_ASSERT(ompt_state == ompt_state_wait_barrier ||
+ ompt_state == ompt_state_wait_barrier_implicit ||
+ ompt_state == ompt_state_wait_barrier_explicit);
+
+ ompt_lw_taskteam_t* team = this_thr->th.th_team->t.ompt_serialized_team_info;
+ ompt_parallel_id_t pId;
+ ompt_task_id_t tId;
+ if (team){
+ pId = team->ompt_team_info.parallel_id;
+ tId = team->ompt_task_info.task_id;
+ } else {
+ pId = this_thr->th.th_team->t.ompt_team_info.parallel_id;
+ tId = this_thr->th.th_current_task->ompt_task_info.task_id;
+ }
+ ompt_callbacks.ompt_callback(ompt_event_wait_barrier_begin)(pId, tId);
+ }
+ }
+#endif
+
+ // Setup for waiting
+ KMP_INIT_YIELD(spins);
+
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) {
+ // The worker threads cannot rely on the team struct existing at this point.
+ // Use the bt values cached in the thread struct instead.
+#ifdef KMP_ADJUST_BLOCKTIME
+ if (__kmp_zero_bt && !this_thr->th.th_team_bt_set)
+ // Force immediate suspend if not set by user and more threads than available procs
+ hibernate = 0;
+ else
+ hibernate = this_thr->th.th_team_bt_intervals;
+#else
+ hibernate = this_thr->th.th_team_bt_intervals;
+#endif /* KMP_ADJUST_BLOCKTIME */
+
+ /* If the blocktime is nonzero, we want to make sure that we spin wait for the entirety
+ of the specified #intervals, plus up to one interval more. This increment make
+ certain that this thread doesn't go to sleep too soon. */
+ if (hibernate != 0)
+ hibernate++;
+
+ // Add in the current time value.
+ hibernate += TCR_4(__kmp_global.g.g_time.dt.t_value);
+ KF_TRACE(20, ("__kmp_wait_sleep: T#%d now=%d, hibernate=%d, intervals=%d\n",
+ th_gtid, __kmp_global.g.g_time.dt.t_value, hibernate,
+ hibernate - __kmp_global.g.g_time.dt.t_value));
+ }
+
+ oversubscribed = (TCR_4(__kmp_nth) > __kmp_avail_proc);
+ KMP_MB();
+
+ // Main wait spin loop
+ while (flag->notdone_check()) {
+ int in_pool;
+ kmp_task_team_t * task_team = NULL;
+ if (__kmp_tasking_mode != tskm_immediate_exec) {
+ task_team = this_thr->th.th_task_team;
+ /* If the thread's task team pointer is NULL, it means one of 3 things:
+ 1) A newly-created thread is first being released by __kmp_fork_barrier(), and
+ its task team has not been set up yet.
+ 2) All tasks have been executed to completion.
+ 3) Tasking is off for this region. This could be because we are in a serialized region
+ (perhaps the outer one), or else tasking was manually disabled (KMP_TASKING=0). */
+ if (task_team != NULL) {
+ if (TCR_SYNC_4(task_team->tt.tt_active)) {
+ if (KMP_TASKING_ENABLED(task_team))
+ flag->execute_tasks(this_thr, th_gtid, final_spin, &tasks_completed
+ USE_ITT_BUILD_ARG(itt_sync_obj), 0);
+ }
+ else {
+ KMP_DEBUG_ASSERT(!KMP_MASTER_TID(this_thr->th.th_info.ds.ds_tid));
+ this_thr->th.th_task_team = NULL;
+ }
+ } // if
+ } // if
+
+ KMP_FSYNC_SPIN_PREPARE(spin);
+ if (TCR_4(__kmp_global.g.g_done)) {
+ if (__kmp_global.g.g_abort)
+ __kmp_abort_thread();
+ break;
+ }
+
+ // If we are oversubscribed, or have waited a bit (and KMP_LIBRARY=throughput), then yield
+ KMP_YIELD(oversubscribed);
+ // TODO: Should it be number of cores instead of thread contexts? Like:
+ // KMP_YIELD(TCR_4(__kmp_nth) > __kmp_ncores);
+ // Need performance improvement data to make the change...
+ KMP_YIELD_SPIN(spins);
+
+ // Check if this thread was transferred from a team
+ // to the thread pool (or vice-versa) while spinning.
+ in_pool = !!TCR_4(this_thr->th.th_in_pool);
+ if (in_pool != !!this_thr->th.th_active_in_pool) {
+ if (in_pool) { // Recently transferred from team to pool
+ KMP_TEST_THEN_INC32((kmp_int32 *)&__kmp_thread_pool_active_nth);
+ this_thr->th.th_active_in_pool = TRUE;
+ /* Here, we cannot assert that:
+ KMP_DEBUG_ASSERT(TCR_4(__kmp_thread_pool_active_nth) <= __kmp_thread_pool_nth);
+ __kmp_thread_pool_nth is inc/dec'd by the master thread while the fork/join
+ lock is held, whereas __kmp_thread_pool_active_nth is inc/dec'd asynchronously
+ by the workers. The two can get out of sync for brief periods of time. */
+ }
+ else { // Recently transferred from pool to team
+ KMP_TEST_THEN_DEC32((kmp_int32 *) &__kmp_thread_pool_active_nth);
+ KMP_DEBUG_ASSERT(TCR_4(__kmp_thread_pool_active_nth) >= 0);
+ this_thr->th.th_active_in_pool = FALSE;
+ }
+ }
+
+#if KMP_STATS_ENABLED
+ // Check if thread has been signalled to idle state
+ // This indicates that the logical "join-barrier" has finished
+ if (this_thr->th.th_stats->isIdle() && KMP_GET_THREAD_STATE() == FORK_JOIN_BARRIER) {
+ KMP_SET_THREAD_STATE(IDLE);
+ KMP_PUSH_PARTITIONED_TIMER(OMP_idle);
+ }
+#endif
+
+ // Don't suspend if KMP_BLOCKTIME is set to "infinite"
+ if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME)
+ continue;
+
+ // Don't suspend if there is a likelihood of new tasks being spawned.
+ if ((task_team != NULL) && TCR_4(task_team->tt.tt_found_tasks))
+ continue;
+
+ // If we have waited a bit more, fall asleep
+ if (TCR_4(__kmp_global.g.g_time.dt.t_value) < hibernate)
+ continue;
+
+ KF_TRACE(50, ("__kmp_wait_sleep: T#%d suspend time reached\n", th_gtid));
+
+ flag->suspend(th_gtid);
+
+ if (TCR_4(__kmp_global.g.g_done)) {
+ if (__kmp_global.g.g_abort)
+ __kmp_abort_thread();
+ break;
+ }
+ // TODO: If thread is done with work and times out, disband/free
+ }
+
+#if OMPT_SUPPORT && OMPT_BLAME
+ if (ompt_enabled &&
+ ompt_state != ompt_state_undefined) {
+ if (ompt_state == ompt_state_idle) {
+ if (ompt_callbacks.ompt_callback(ompt_event_idle_end)) {
+ ompt_callbacks.ompt_callback(ompt_event_idle_end)(th_gtid + 1);
+ }
+ } else if (ompt_callbacks.ompt_callback(ompt_event_wait_barrier_end)) {
+ KMP_DEBUG_ASSERT(ompt_state == ompt_state_wait_barrier ||
+ ompt_state == ompt_state_wait_barrier_implicit ||
+ ompt_state == ompt_state_wait_barrier_explicit);
+
+ ompt_lw_taskteam_t* team = this_thr->th.th_team->t.ompt_serialized_team_info;
+ ompt_parallel_id_t pId;
+ ompt_task_id_t tId;
+ if (team){
+ pId = team->ompt_team_info.parallel_id;
+ tId = team->ompt_task_info.task_id;
+ } else {
+ pId = this_thr->th.th_team->t.ompt_team_info.parallel_id;
+ tId = this_thr->th.th_current_task->ompt_task_info.task_id;
+ }
+ ompt_callbacks.ompt_callback(ompt_event_wait_barrier_end)(pId, tId);
+ }
+ }
+#endif
+#if KMP_STATS_ENABLED
+ // If we were put into idle state, pop that off the state stack
+ if (KMP_GET_THREAD_STATE() == IDLE) {
+ KMP_POP_PARTITIONED_TIMER();
+ KMP_SET_THREAD_STATE(thread_state);
+ this_thr->th.th_stats->resetIdleFlag();
+ }
+#endif
+
+ KMP_FSYNC_SPIN_ACQUIRED(spin);
+}
+
+/* Release any threads specified as waiting on the flag by releasing the flag and resume the waiting thread
+ if indicated by the sleep bit(s). A thread that calls __kmp_wait_template must call this function to wake
+ up the potentially sleeping thread and prevent deadlocks! */
+template <class C>
+static inline void
+__kmp_release_template(C *flag)
+{
+#ifdef KMP_DEBUG
+ int gtid = TCR_4(__kmp_init_gtid) ? __kmp_get_gtid() : -1;
+#endif
+ KF_TRACE(20, ("__kmp_release: T#%d releasing flag(%x)\n", gtid, flag->get()));
+ KMP_DEBUG_ASSERT(flag->get());
+ KMP_FSYNC_RELEASING(flag->get());
+
+ flag->internal_release();
+
+ KF_TRACE(100, ("__kmp_release: T#%d set new spin=%d\n", gtid, flag->get(), *(flag->get())));
+
+ if (__kmp_dflt_blocktime != KMP_MAX_BLOCKTIME) {
+ // Only need to check sleep stuff if infinite block time not set
+ if (flag->is_any_sleeping()) { // Are *any* of the threads that wait on this flag sleeping?
+ for (unsigned int i=0; i<flag->get_num_waiters(); ++i) {
+ kmp_info_t * waiter = flag->get_waiter(i); // if a sleeping waiter exists at i, sets current_waiter to i inside the flag
+ if (waiter) {
+ int wait_gtid = waiter->th.th_info.ds.ds_gtid;
+ // Wake up thread if needed
+ KF_TRACE(50, ("__kmp_release: T#%d waking up thread T#%d since sleep flag(%p) set\n",
+ gtid, wait_gtid, flag->get()));
+ flag->resume(wait_gtid); // unsets flag's current_waiter when done
+ }
+ }
+ }
+ }
+}
+
+template <typename FlagType>
+struct flag_traits {};
+
+template <>
+struct flag_traits<kmp_uint32> {
+ typedef kmp_uint32 flag_t;
+ static const flag_type t = flag32;
+ static inline flag_t tcr(flag_t f) { return TCR_4(f); }
+ static inline flag_t test_then_add4(volatile flag_t *f) { return KMP_TEST_THEN_ADD4_32((volatile kmp_int32 *)f); }
+ static inline flag_t test_then_or(volatile flag_t *f, flag_t v) { return KMP_TEST_THEN_OR32((volatile kmp_int32 *)f, v); }
+ static inline flag_t test_then_and(volatile flag_t *f, flag_t v) { return KMP_TEST_THEN_AND32((volatile kmp_int32 *)f, v); }
+};
+
+template <>
+struct flag_traits<kmp_uint64> {
+ typedef kmp_uint64 flag_t;
+ static const flag_type t = flag64;
+ static inline flag_t tcr(flag_t f) { return TCR_8(f); }
+ static inline flag_t test_then_add4(volatile flag_t *f) { return KMP_TEST_THEN_ADD4_64((volatile kmp_int64 *)f); }
+ static inline flag_t test_then_or(volatile flag_t *f, flag_t v) { return KMP_TEST_THEN_OR64((volatile kmp_int64 *)f, v); }
+ static inline flag_t test_then_and(volatile flag_t *f, flag_t v) { return KMP_TEST_THEN_AND64((volatile kmp_int64 *)f, v); }
+};
+
+template <typename FlagType>
+class kmp_basic_flag : public kmp_flag<FlagType> {
+ typedef flag_traits<FlagType> traits_type;
+ FlagType checker; /**< Value to compare flag to to check if flag has been released. */
+ kmp_info_t * waiting_threads[1]; /**< Array of threads sleeping on this thread. */
+ kmp_uint32 num_waiting_threads; /**< Number of threads sleeping on this thread. */
+ public:
+ kmp_basic_flag(volatile FlagType *p) : kmp_flag<FlagType>(p, traits_type::t), num_waiting_threads(0) {}
+ kmp_basic_flag(volatile FlagType *p, kmp_info_t *thr) : kmp_flag<FlagType>(p, traits_type::t), num_waiting_threads(1) {
+ waiting_threads[0] = thr;
+ }
+ kmp_basic_flag(volatile FlagType *p, FlagType c) : kmp_flag<FlagType>(p, traits_type::t), checker(c), num_waiting_threads(0) {}
+ /*!
+ * param i in index into waiting_threads
+ * @result the thread that is waiting at index i
+ */
+ kmp_info_t * get_waiter(kmp_uint32 i) {
+ KMP_DEBUG_ASSERT(i<num_waiting_threads);
+ return waiting_threads[i];
+ }
+ /*!
+ * @result num_waiting_threads
+ */
+ kmp_uint32 get_num_waiters() { return num_waiting_threads; }
+ /*!
+ * @param thr in the thread which is now waiting
+ *
+ * Insert a waiting thread at index 0.
+ */
+ void set_waiter(kmp_info_t *thr) {
+ waiting_threads[0] = thr;
+ num_waiting_threads = 1;
+ }
+ /*!
+ * @result true if the flag object has been released.
+ */
+ bool done_check() { return traits_type::tcr(*(this->get())) == checker; }
+ /*!
+ * @param old_loc in old value of flag
+ * @result true if the flag's old value indicates it was released.
+ */
+ bool done_check_val(FlagType old_loc) { return old_loc == checker; }
+ /*!
+ * @result true if the flag object is not yet released.
+ * Used in __kmp_wait_template like:
+ * @code
+ * while (flag.notdone_check()) { pause(); }
+ * @endcode
+ */
+ bool notdone_check() { return traits_type::tcr(*(this->get())) != checker; }
+ /*!
+ * @result Actual flag value before release was applied.
+ * Trigger all waiting threads to run by modifying flag to release state.
+ */
+ void internal_release() {
+ (void) traits_type::test_then_add4((volatile FlagType *)this->get());
+ }
+ /*!
+ * @result Actual flag value before sleep bit(s) set.
+ * Notes that there is at least one thread sleeping on the flag by setting sleep bit(s).
+ */
+ FlagType set_sleeping() {
+ return traits_type::test_then_or((volatile FlagType *)this->get(), KMP_BARRIER_SLEEP_STATE);
+ }
+ /*!
+ * @result Actual flag value before sleep bit(s) cleared.
+ * Notes that there are no longer threads sleeping on the flag by clearing sleep bit(s).
+ */
+ FlagType unset_sleeping() {
+ return traits_type::test_then_and((volatile FlagType *)this->get(), ~KMP_BARRIER_SLEEP_STATE);
+ }
+ /*!
+ * @param old_loc in old value of flag
+ * Test whether there are threads sleeping on the flag's old value in old_loc.
+ */
+ bool is_sleeping_val(FlagType old_loc) { return old_loc & KMP_BARRIER_SLEEP_STATE; }
+ /*!
+ * Test whether there are threads sleeping on the flag.
+ */
+ bool is_sleeping() { return is_sleeping_val(*(this->get())); }
+ bool is_any_sleeping() { return is_sleeping_val(*(this->get())); }
+ kmp_uint8 *get_stolen() { return NULL; }
+ enum barrier_type get_bt() { return bs_last_barrier; }
+};
+
+class kmp_flag_32 : public kmp_basic_flag<kmp_uint32> {
+ public:
+ kmp_flag_32(volatile kmp_uint32 *p) : kmp_basic_flag<kmp_uint32>(p) {}
+ kmp_flag_32(volatile kmp_uint32 *p, kmp_info_t *thr) : kmp_basic_flag<kmp_uint32>(p, thr) {}
+ kmp_flag_32(volatile kmp_uint32 *p, kmp_uint32 c) : kmp_basic_flag<kmp_uint32>(p, c) {}
+ void suspend(int th_gtid) { __kmp_suspend_32(th_gtid, this); }
+ void resume(int th_gtid) { __kmp_resume_32(th_gtid, this); }
+ int execute_tasks(kmp_info_t *this_thr, kmp_int32 gtid, int final_spin, int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained) {
+ return __kmp_execute_tasks_32(this_thr, gtid, this, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+ }
+ void wait(kmp_info_t *this_thr, int final_spin
+ USE_ITT_BUILD_ARG(void * itt_sync_obj)) {
+ __kmp_wait_template(this_thr, this, final_spin
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ }
+ void release() { __kmp_release_template(this); }
+ flag_type get_ptr_type() { return flag32; }
+};
+
+class kmp_flag_64 : public kmp_basic_flag<kmp_uint64> {
+ public:
+ kmp_flag_64(volatile kmp_uint64 *p) : kmp_basic_flag<kmp_uint64>(p) {}
+ kmp_flag_64(volatile kmp_uint64 *p, kmp_info_t *thr) : kmp_basic_flag<kmp_uint64>(p, thr) {}
+ kmp_flag_64(volatile kmp_uint64 *p, kmp_uint64 c) : kmp_basic_flag<kmp_uint64>(p, c) {}
+ void suspend(int th_gtid) { __kmp_suspend_64(th_gtid, this); }
+ void resume(int th_gtid) { __kmp_resume_64(th_gtid, this); }
+ int execute_tasks(kmp_info_t *this_thr, kmp_int32 gtid, int final_spin, int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained) {
+ return __kmp_execute_tasks_64(this_thr, gtid, this, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+ }
+ void wait(kmp_info_t *this_thr, int final_spin
+ USE_ITT_BUILD_ARG(void * itt_sync_obj)) {
+ __kmp_wait_template(this_thr, this, final_spin
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ }
+ void release() { __kmp_release_template(this); }
+ flag_type get_ptr_type() { return flag64; }
+};
+
+// Hierarchical 64-bit on-core barrier instantiation
+class kmp_flag_oncore : public kmp_flag<kmp_uint64> {
+ kmp_uint64 checker;
+ kmp_info_t * waiting_threads[1];
+ kmp_uint32 num_waiting_threads;
+ kmp_uint32 offset; /**< Portion of flag that is of interest for an operation. */
+ bool flag_switch; /**< Indicates a switch in flag location. */
+ enum barrier_type bt; /**< Barrier type. */
+ kmp_info_t * this_thr; /**< Thread that may be redirected to different flag location. */
+#if USE_ITT_BUILD
+ void *itt_sync_obj; /**< ITT object that must be passed to new flag location. */
+#endif
+ unsigned char& byteref(volatile kmp_uint64* loc, size_t offset) { return ((unsigned char *)loc)[offset]; }
+public:
+ kmp_flag_oncore(volatile kmp_uint64 *p)
+ : kmp_flag<kmp_uint64>(p, flag_oncore), num_waiting_threads(0), flag_switch(false) {}
+ kmp_flag_oncore(volatile kmp_uint64 *p, kmp_uint32 idx)
+ : kmp_flag<kmp_uint64>(p, flag_oncore), num_waiting_threads(0), offset(idx), flag_switch(false) {}
+ kmp_flag_oncore(volatile kmp_uint64 *p, kmp_uint64 c, kmp_uint32 idx, enum barrier_type bar_t,
+ kmp_info_t * thr
+#if USE_ITT_BUILD
+ , void *itt
+#endif
+ )
+ : kmp_flag<kmp_uint64>(p, flag_oncore), checker(c), num_waiting_threads(0), offset(idx),
+ flag_switch(false), bt(bar_t), this_thr(thr)
+#if USE_ITT_BUILD
+ , itt_sync_obj(itt)
+#endif
+ {}
+ kmp_info_t * get_waiter(kmp_uint32 i) {
+ KMP_DEBUG_ASSERT(i<num_waiting_threads);
+ return waiting_threads[i];
+ }
+ kmp_uint32 get_num_waiters() { return num_waiting_threads; }
+ void set_waiter(kmp_info_t *thr) {
+ waiting_threads[0] = thr;
+ num_waiting_threads = 1;
+ }
+ bool done_check_val(kmp_uint64 old_loc) { return byteref(&old_loc,offset) == checker; }
+ bool done_check() { return done_check_val(*get()); }
+ bool notdone_check() {
+ // Calculate flag_switch
+ if (this_thr->th.th_bar[bt].bb.wait_flag == KMP_BARRIER_SWITCH_TO_OWN_FLAG)
+ flag_switch = true;
+ if (byteref(get(),offset) != 1 && !flag_switch)
+ return true;
+ else if (flag_switch) {
+ this_thr->th.th_bar[bt].bb.wait_flag = KMP_BARRIER_SWITCHING;
+ kmp_flag_64 flag(&this_thr->th.th_bar[bt].bb.b_go, (kmp_uint64)KMP_BARRIER_STATE_BUMP);
+ __kmp_wait_64(this_thr, &flag, TRUE
+#if USE_ITT_BUILD
+ , itt_sync_obj
+#endif
+ );
+ }
+ return false;
+ }
+ void internal_release() {
+ if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
+ byteref(get(),offset) = 1;
+ }
+ else {
+ kmp_uint64 mask=0;
+ byteref(&mask,offset) = 1;
+ (void) KMP_TEST_THEN_OR64((volatile kmp_int64 *)get(), mask);
+ }
+ }
+ kmp_uint64 set_sleeping() {
+ return KMP_TEST_THEN_OR64((kmp_int64 volatile *)get(), KMP_BARRIER_SLEEP_STATE);
+ }
+ kmp_uint64 unset_sleeping() {
+ return KMP_TEST_THEN_AND64((kmp_int64 volatile *)get(), ~KMP_BARRIER_SLEEP_STATE);
+ }
+ bool is_sleeping_val(kmp_uint64 old_loc) { return old_loc & KMP_BARRIER_SLEEP_STATE; }
+ bool is_sleeping() { return is_sleeping_val(*get()); }
+ bool is_any_sleeping() { return is_sleeping_val(*get()); }
+ void wait(kmp_info_t *this_thr, int final_spin) {
+ __kmp_wait_template<kmp_flag_oncore>(this_thr, this, final_spin
+ USE_ITT_BUILD_ARG(itt_sync_obj));
+ }
+ void release() { __kmp_release_template(this); }
+ void suspend(int th_gtid) { __kmp_suspend_oncore(th_gtid, this); }
+ void resume(int th_gtid) { __kmp_resume_oncore(th_gtid, this); }
+ int execute_tasks(kmp_info_t *this_thr, kmp_int32 gtid, int final_spin, int *thread_finished
+ USE_ITT_BUILD_ARG(void * itt_sync_obj), kmp_int32 is_constrained) {
+ return __kmp_execute_tasks_oncore(this_thr, gtid, this, final_spin, thread_finished
+ USE_ITT_BUILD_ARG(itt_sync_obj), is_constrained);
+ }
+ kmp_uint8 *get_stolen() { return NULL; }
+ enum barrier_type get_bt() { return bt; }
+ flag_type get_ptr_type() { return flag_oncore; }
+};
+
+// Used to wake up threads, volatile void* flag is usually the th_sleep_loc associated
+// with int gtid.
+static inline void __kmp_null_resume_wrapper(int gtid, volatile void *flag) {
+ if (!flag) return;
+
+ switch (((kmp_flag_64 *)flag)->get_type()) {
+ case flag32: __kmp_resume_32(gtid, NULL); break;
+ case flag64: __kmp_resume_64(gtid, NULL); break;
+ case flag_oncore: __kmp_resume_oncore(gtid, NULL); break;
+ }
+}
+
+/*!
+@}
+*/
+
+#endif // KMP_WAIT_RELEASE_H
diff --git a/final/runtime/src/kmp_wrapper_getpid.h b/final/runtime/src/kmp_wrapper_getpid.h
new file mode 100644
index 0000000..61a046c
--- /dev/null
+++ b/final/runtime/src/kmp_wrapper_getpid.h
@@ -0,0 +1,56 @@
+/*
+ * kmp_wrapper_getpid.h -- getpid() declaration.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_WRAPPER_GETPID_H
+#define KMP_WRAPPER_GETPID_H
+
+#if KMP_OS_UNIX
+
+ // On Unix-like systems (Linux* OS and OS X*) getpid() is declared in standard headers.
+ #include <sys/types.h>
+ #include <unistd.h>
+
+#elif KMP_OS_WINDOWS
+
+ // On Windows* OS _getpid() returns int (not pid_t) and is declared in "process.h".
+ #include <process.h>
+ // Let us simulate Unix.
+ typedef int pid_t;
+ #define getpid _getpid
+
+#else
+
+ #error Unknown or unsupported OS.
+
+#endif
+
+/*
+ TODO: All the libomp source code uses pid_t type for storing the result of getpid(), it is good.
+ But often it printed as "%d", that is not good, because it ignores pid_t definition (may pid_t
+ be longer that int?). It seems all pid prints should be rewritten as
+
+ printf( "%" KMP_UINT64_SPEC, (kmp_uint64) pid );
+
+ or (at least) as
+
+ printf( "%" KMP_UINT32_SPEC, (kmp_uint32) pid );
+
+ (kmp_uint32, kmp_uint64, KMP_UINT64_SPEC, and KMP_UNIT32_SPEC are defined in "kmp_os.h".)
+
+*/
+
+#endif // KMP_WRAPPER_GETPID_H
+
+// end of file //
diff --git a/final/runtime/src/kmp_wrapper_malloc.h b/final/runtime/src/kmp_wrapper_malloc.h
new file mode 100644
index 0000000..453d1ef
--- /dev/null
+++ b/final/runtime/src/kmp_wrapper_malloc.h
@@ -0,0 +1,205 @@
+/*
+ * kmp_wrapper_malloc.h -- Wrappers for memory allocation routines
+ * (malloc(), free(), and others).
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef KMP_WRAPPER_MALLOC_H
+#define KMP_WRAPPER_MALLOC_H
+
+/*
+ This header serves for 3 purposes:
+
+ 1. Declaring standard memory allocation rourines in OS-independent way.
+ 2. Passing source location info through memory allocation wrappers.
+ 3. Enabling native memory debugging capabilities.
+
+
+ 1. Declaring standard memory allocation rourines in OS-independent way.
+ -----------------------------------------------------------------------
+
+ On Linux* OS, alloca() function is declared in <alloca.h> header, while on Windows* OS there is no
+ <alloca.h> header, function _alloca() (note underscore!) is declared in <malloc.h>. This header
+ eliminates these differences, so client code incluiding "kmp_wrapper_malloc.h" can rely on
+ following routines:
+
+ malloc
+ calloc
+ realloc
+ free
+ alloca
+
+ in OS-independent way. It also enables memory tracking capabilities in debug build. (Currently
+ it is available only on Windows* OS.)
+
+
+ 2. Passing source location info through memory allocation wrappers.
+ -------------------------------------------------------------------
+
+ Some tools may help debugging memory errors, for example, report memory leaks. However, memory
+ allocation wrappers may hinder source location.
+
+ For example:
+
+ void * aligned_malloc( int size ) {
+ void * ptr = malloc( size ); // All the memory leaks will be reported at this line.
+ // some adjustments...
+ return ptr;
+ };
+
+ ptr = aligned_malloc( size ); // Memory leak will *not* be detected here. :-(
+
+ To overcome the problem, information about original source location should be passed through all
+ the memory allocation wrappers, for example:
+
+ void * aligned_malloc( int size, char const * file, int line ) {
+ void * ptr = _malloc_dbg( size, file, line );
+ // some adjustments...
+ return ptr;
+ };
+
+ void * ptr = aligned_malloc( size, __FILE__, __LINE__ );
+
+ This is a good idea for debug, but passing additional arguments impacts performance. Disabling
+ extra arguments in release version of the software introduces too many conditional compilation,
+ which makes code unreadable. This header defines few macros and functions facilitating it:
+
+ void * _aligned_malloc( int size KMP_SRC_LOC_DECL ) {
+ void * ptr = malloc_src_loc( size KMP_SRC_LOC_PARM );
+ // some adjustments...
+ return ptr;
+ };
+ #define aligned_malloc( size ) _aligned_malloc( (size) KMP_SRC_LOC_CURR )
+ // Use macro instead of direct call to function.
+
+ void * ptr = aligned_malloc( size ); // Bingo! Memory leak will be reported at this line.
+
+
+ 3. Enabling native memory debugging capabilities.
+ -------------------------------------------------
+
+ Some platforms may offer memory debugging capabilities. For example, debug version of Microsoft
+ RTL tracks all memory allocations and can report memory leaks. This header enables this, and
+ makes report more useful (see "Passing source location info through memory allocation
+ wrappers").
+
+*/
+
+#include <stdlib.h>
+
+#include "kmp_os.h"
+
+// Include alloca() declaration.
+#if KMP_OS_WINDOWS
+ #include <malloc.h> // Windows* OS: _alloca() declared in "malloc.h".
+ #define alloca _alloca // Allow to use alloca() with no underscore.
+#elif KMP_OS_FREEBSD || KMP_OS_NETBSD
+ // Declared in "stdlib.h".
+#elif KMP_OS_UNIX
+ #include <alloca.h> // Linux* OS and OS X*: alloc() declared in "alloca".
+#else
+ #error Unknown or unsupported OS.
+#endif
+
+/*
+ KMP_SRC_LOC_DECL -- Declaring source location paramemters, to be used in function declaration.
+ KMP_SRC_LOC_PARM -- Source location paramemters, to be used to pass parameters to underlying
+ levels.
+ KMP_SRC_LOC_CURR -- Source location arguments describing current location, to be used at
+ top-level.
+
+ Typical usage:
+
+ void * _aligned_malloc( int size KMP_SRC_LOC_DECL ) {
+ // Note: Comma is missed before KMP_SRC_LOC_DECL.
+ KE_TRACE( 25, ( "called from %s:%d\n", KMP_SRC_LOC_PARM ) );
+ ...
+ }
+ #define aligned_malloc( size ) _aligned_malloc( (size) KMP_SRC_LOC_CURR )
+ // Use macro instead of direct call to function -- macro passes info about current
+ // source location to the func.
+*/
+#if KMP_DEBUG
+ #define KMP_SRC_LOC_DECL , char const * _file_, int _line_
+ #define KMP_SRC_LOC_PARM , _file_, _line_
+ #define KMP_SRC_LOC_CURR , __FILE__, __LINE__
+#else
+ #define KMP_SRC_LOC_DECL
+ #define KMP_SRC_LOC_PARM
+ #define KMP_SRC_LOC_CURR
+#endif // KMP_DEBUG
+
+/*
+ malloc_src_loc() and free_src_loc() are pseudo-functions (really macros) with accepts extra
+ arguments (source location info) in debug mode. They should be used in place of malloc() and
+ free(), this allows enabling native memory debugging capabilities (if any).
+
+ Typical usage:
+
+ ptr = malloc_src_loc( size KMP_SRC_LOC_PARM );
+ // Inside memory allocation wrapper, or
+ ptr = malloc_src_loc( size KMP_SRC_LOC_CURR );
+ // Outside of memory allocation wrapper.
+
+
+*/
+#define malloc_src_loc( args ) _malloc_src_loc( args )
+#define free_src_loc( args ) _free_src_loc( args )
+ /*
+ Depending on build mode (debug or release), malloc_src_loc is declared with 1 or 3
+ parameters, but calls to malloc_src_loc() are always the same:
+
+ ... malloc_src_loc( size KMP_SRC_LOC_PARM ); // or KMP_SRC_LOC_CURR
+
+ Compiler issues warning/error "too few arguments in macro invocation". Declaring two
+ macroses, malloc_src_loc() and _malloc_src_loc() overcomes the problem.
+ */
+
+#if KMP_DEBUG
+
+ #if KMP_OS_WINDOWS && _DEBUG
+ // KMP_DEBUG != _DEBUG. MS debug RTL is available only if _DEBUG is defined.
+
+ // Windows* OS has native memory debugging capabilities. Enable them.
+
+ #include <crtdbg.h>
+
+ #define KMP_MEM_BLOCK _CLIENT_BLOCK
+ #define malloc( size ) _malloc_dbg( (size), KMP_MEM_BLOCK, __FILE__, __LINE__ )
+ #define calloc( num, size ) _calloc_dbg( (num), (size), KMP_MEM_BLOCK, __FILE__, __LINE__ )
+ #define realloc( ptr, size ) _realloc_dbg( (ptr), (size), KMP_MEM_BLOCK, __FILE__, __LINE__ )
+ #define free( ptr ) _free_dbg( (ptr), KMP_MEM_BLOCK )
+
+ #define _malloc_src_loc( size, file, line ) _malloc_dbg( (size), KMP_MEM_BLOCK, (file), (line) )
+ #define _free_src_loc( ptr, file, line ) _free_dbg( (ptr), KMP_MEM_BLOCK )
+
+ #else
+
+ // Linux* OS, OS X*, or non-debug Windows* OS.
+
+ #define _malloc_src_loc( size, file, line ) malloc( (size) )
+ #define _free_src_loc( ptr, file, line ) free( (ptr) )
+
+ #endif
+
+#else
+
+ // In release build malloc_src_loc() and free_src_loc() do not have extra parameters.
+ #define _malloc_src_loc( size ) malloc( (size) )
+ #define _free_src_loc( ptr ) free( (ptr) )
+
+#endif // KMP_DEBUG
+
+#endif // KMP_WRAPPER_MALLOC_H
+
+// end of file //
diff --git a/final/runtime/src/libomp.rc.var b/final/runtime/src/libomp.rc.var
new file mode 100644
index 0000000..cf6a9c9
--- /dev/null
+++ b/final/runtime/src/libomp.rc.var
@@ -0,0 +1,70 @@
+// libomp.rc.var
+
+//
+////===----------------------------------------------------------------------===//
+////
+//// The LLVM Compiler Infrastructure
+////
+//// This file is dual licensed under the MIT and the University of Illinois Open
+//// Source Licenses. See LICENSE.txt for details.
+////
+////===----------------------------------------------------------------------===//
+//
+
+#include "winres.h"
+#include "kmp_config.h"
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // English (U.S.) resources
+#pragma code_page(1252)
+
+VS_VERSION_INFO VERSIONINFO
+ // Parts of FILEVERSION and PRODUCTVERSION are 16-bit fields, entire build date yyyymmdd
+ // does not fit into one version part, so we need to split it into yyyy and mmdd:
+ FILEVERSION @LIBOMP_VERSION_MAJOR@,@LIBOMP_VERSION_MINOR@,@LIBOMP_VERSION_BUILD_YEAR@,@LIBOMP_VERSION_BUILD_MONTH_DAY@
+ PRODUCTVERSION @LIBOMP_VERSION_MAJOR@,@LIBOMP_VERSION_MINOR@,@LIBOMP_VERSION_BUILD_YEAR@,@LIBOMP_VERSION_BUILD_MONTH_DAY@
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+ FILEFLAGS 0
+#if KMP_DEBUG
+ | VS_FF_DEBUG
+#endif
+#if @LIBOMP_VERSION_BUILD@ == 0
+ | VS_FF_PRIVATEBUILD | VS_FF_PRERELEASE
+#endif
+ FILEOS VOS_NT_WINDOWS32 // Windows* Server* 2003, XP*, 2000, or NT*
+ FILETYPE VFT_DLL
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" // U.S. English, Unicode (0x04b0 == 1200)
+ BEGIN
+
+ // FileDescription and LegalCopyright should be short.
+ VALUE "FileDescription", "LLVM* OpenMP* Runtime Library\0"
+ // Following values may be relatively long.
+ VALUE "CompanyName", "LLVM\0"
+ // VALUE "LegalTrademarks", "\0" // Not used for now.
+ VALUE "ProductName", "LLVM* OpenMP* Runtime Library\0"
+ VALUE "ProductVersion", "@LIBOMP_VERSION_MAJOR@.@LIBOMP_VERSION_MINOR@\0"
+ VALUE "FileVersion", "@LIBOMP_VERSION_BUILD@\0"
+ VALUE "InternalName", "@LIBOMP_LIB_FILE@\0"
+ VALUE "OriginalFilename", "@LIBOMP_LIB_FILE@\0"
+ VALUE "Comments",
+ "LLVM* OpenMP* @LIBOMP_LEGAL_TYPE@ Library "
+ "version @LIBOMP_VERSION_MAJOR@.@LIBOMP_VERSION_MINOR@.@LIBOMP_VERSION_BUILD@ "
+ "for @LIBOMP_LEGAL_ARCH@ architecture built on @LIBOMP_BUILD_DATE@.\0"
+#if @LIBOMP_VERSION_BUILD@ == 0
+ VALUE "PrivateBuild",
+ "This is a development build.\0"
+#endif
+ // VALUE "SpecialBuild", "\0" // Not used for now.
+
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 1033, 1200
+ // 1033 -- U.S. English, 1200 -- Unicode
+ END
+ END
+
+// end of file //
diff --git a/final/runtime/src/ompt-event-specific.h b/final/runtime/src/ompt-event-specific.h
new file mode 100644
index 0000000..fdf1213
--- /dev/null
+++ b/final/runtime/src/ompt-event-specific.h
@@ -0,0 +1,152 @@
+#ifndef __OMPT_EVENT_SPECIFIC_H__
+#define __OMPT_EVENT_SPECIFIC_H__
+
+/******************************************************************************
+ * File: ompt-event-specific.h
+ *
+ * Description:
+ *
+ * specify which of the OMPT events are implemented by this runtime system
+ * and the level of their implementation by a runtime system.
+ *****************************************************************************/
+
+#define _ompt_tokenpaste_helper(x,y) x ## y
+#define _ompt_tokenpaste(x,y) _ompt_tokenpaste_helper(x,y)
+#define ompt_event_implementation_status(e) _ompt_tokenpaste(e,_implemented)
+
+
+/*----------------------------------------------------------------------------
+ | Specify whether an event may occur or not, and whether event callbacks
+ | never, sometimes, or always occur.
+ |
+ | The values for these constants are defined in section 6.1.2 of
+ | the OMPT TR. They are exposed to tools through ompt_set_callback.
+ +--------------------------------------------------------------------------*/
+
+#define ompt_event_NEVER ompt_set_result_event_never_occurs
+#define ompt_event_UNIMPLEMENTED ompt_set_result_event_may_occur_no_callback
+#define ompt_event_MAY_CONVENIENT ompt_set_result_event_may_occur_callback_some
+#define ompt_event_MAY_ALWAYS ompt_set_result_event_may_occur_callback_always
+
+#if OMPT_TRACE
+#define ompt_event_MAY_ALWAYS_TRACE ompt_event_MAY_ALWAYS
+#else
+#define ompt_event_MAY_ALWAYS_TRACE ompt_event_UNIMPLEMENTED
+#endif
+
+#if OMPT_BLAME
+#define ompt_event_MAY_ALWAYS_BLAME ompt_event_MAY_ALWAYS
+#else
+#define ompt_event_MAY_ALWAYS_BLAME ompt_event_UNIMPLEMENTED
+#endif
+
+/*----------------------------------------------------------------------------
+ | Mandatory Events
+ +--------------------------------------------------------------------------*/
+
+#define ompt_event_parallel_begin_implemented ompt_event_MAY_ALWAYS
+#define ompt_event_parallel_end_implemented ompt_event_MAY_ALWAYS
+
+#define ompt_event_task_begin_implemented ompt_event_MAY_ALWAYS
+#define ompt_event_task_end_implemented ompt_event_MAY_ALWAYS
+
+#define ompt_event_thread_begin_implemented ompt_event_MAY_ALWAYS
+#define ompt_event_thread_end_implemented ompt_event_MAY_ALWAYS
+
+#define ompt_event_control_implemented ompt_event_MAY_ALWAYS
+
+#define ompt_event_runtime_shutdown_implemented ompt_event_MAY_ALWAYS
+
+
+/*----------------------------------------------------------------------------
+ | Optional Events (blame shifting)
+ +--------------------------------------------------------------------------*/
+
+#define ompt_event_idle_begin_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_idle_end_implemented ompt_event_MAY_ALWAYS_BLAME
+
+#define ompt_event_wait_barrier_begin_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_wait_barrier_end_implemented ompt_event_MAY_ALWAYS_BLAME
+
+#define ompt_event_wait_taskwait_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_wait_taskwait_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_wait_taskgroup_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_wait_taskgroup_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_release_lock_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_release_nest_lock_last_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_release_critical_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_release_atomic_implemented ompt_event_MAY_ALWAYS_BLAME
+#define ompt_event_release_ordered_implemented ompt_event_MAY_ALWAYS_BLAME
+
+
+/*----------------------------------------------------------------------------
+ | Optional Events (synchronous events)
+ +--------------------------------------------------------------------------*/
+
+#define ompt_event_implicit_task_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_implicit_task_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_initial_task_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_initial_task_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_task_switch_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_loop_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_loop_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_sections_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_sections_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_single_in_block_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_single_in_block_end_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_single_others_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_single_others_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_workshare_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_workshare_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_master_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_master_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_barrier_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_barrier_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_taskwait_begin_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_taskwait_end_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_taskgroup_begin_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_taskgroup_end_implemented ompt_event_UNIMPLEMENTED
+
+#define ompt_event_release_nest_lock_prev_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_wait_lock_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_wait_nest_lock_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_wait_critical_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_wait_atomic_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_wait_ordered_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_acquired_lock_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_acquired_nest_lock_first_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_acquired_nest_lock_next_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_acquired_critical_implemented ompt_event_UNIMPLEMENTED
+#define ompt_event_acquired_atomic_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_acquired_ordered_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_init_lock_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_init_nest_lock_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_destroy_lock_implemented ompt_event_MAY_ALWAYS_TRACE
+#define ompt_event_destroy_nest_lock_implemented ompt_event_MAY_ALWAYS_TRACE
+
+#define ompt_event_flush_implemented ompt_event_UNIMPLEMENTED
+
+#if OMP_40_ENABLED
+# define ompt_event_task_dependences_implemented ompt_event_MAY_ALWAYS_TRACE
+# define ompt_event_task_dependence_pair_implemented ompt_event_MAY_ALWAYS_TRACE
+#else
+# define ompt_event_task_dependences_implemented ompt_event_UNIMPLEMENTED
+# define ompt_event_task_dependence_pair_implemented ompt_event_UNIMPLEMENTED
+#endif /* OMP_40_ENABLED */
+
+#endif
diff --git a/final/runtime/src/ompt-general.c b/final/runtime/src/ompt-general.c
new file mode 100644
index 0000000..34f1073
--- /dev/null
+++ b/final/runtime/src/ompt-general.c
@@ -0,0 +1,535 @@
+/*****************************************************************************
+ * system include files
+ ****************************************************************************/
+
+#include <assert.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/*****************************************************************************
+ * ompt include files
+ ****************************************************************************/
+
+#include "ompt-specific.c"
+
+
+
+/*****************************************************************************
+ * macros
+ ****************************************************************************/
+
+#define ompt_get_callback_success 1
+#define ompt_get_callback_failure 0
+
+#define no_tool_present 0
+
+#define OMPT_API_ROUTINE static
+
+#ifndef OMPT_STR_MATCH
+#define OMPT_STR_MATCH(haystack, needle) (!strcasecmp(haystack, needle))
+#endif
+
+
+/*****************************************************************************
+ * types
+ ****************************************************************************/
+
+typedef struct {
+ const char *state_name;
+ ompt_state_t state_id;
+} ompt_state_info_t;
+
+
+enum tool_setting_e {
+ omp_tool_error,
+ omp_tool_unset,
+ omp_tool_disabled,
+ omp_tool_enabled
+};
+
+
+typedef void (*ompt_initialize_t) (
+ ompt_function_lookup_t ompt_fn_lookup,
+ const char *version,
+ unsigned int ompt_version
+);
+
+
+
+/*****************************************************************************
+ * global variables
+ ****************************************************************************/
+
+int ompt_enabled = 0;
+
+ompt_state_info_t ompt_state_info[] = {
+#define ompt_state_macro(state, code) { # state, state },
+ FOREACH_OMPT_STATE(ompt_state_macro)
+#undef ompt_state_macro
+};
+
+ompt_callbacks_t ompt_callbacks;
+
+static ompt_initialize_t ompt_initialize_fn = NULL;
+
+
+
+/*****************************************************************************
+ * forward declarations
+ ****************************************************************************/
+
+static ompt_interface_fn_t ompt_fn_lookup(const char *s);
+
+OMPT_API_ROUTINE ompt_thread_id_t ompt_get_thread_id(void);
+
+
+/*****************************************************************************
+ * initialization and finalization (private operations)
+ ****************************************************************************/
+
+/* On Unix-like systems that support weak symbols the following implementation
+ * of ompt_tool() will be used in case no tool-supplied implementation of
+ * this function is present in the address space of a process.
+ *
+ * On Windows, the ompt_tool_windows function is used to find the
+ * ompt_tool symbol across all modules loaded by a process. If ompt_tool is
+ * found, ompt_tool's return value is used to initialize the tool. Otherwise,
+ * NULL is returned and OMPT won't be enabled */
+#if OMPT_HAVE_WEAK_ATTRIBUTE
+_OMP_EXTERN
+__attribute__ (( weak ))
+ompt_initialize_t ompt_tool()
+{
+#if OMPT_DEBUG
+ printf("ompt_tool() is called from the RTL\n");
+#endif
+ return NULL;
+}
+
+#elif OMPT_HAVE_PSAPI
+
+#include <psapi.h>
+#pragma comment(lib, "psapi.lib")
+#define ompt_tool ompt_tool_windows
+
+// The number of loaded modules to start enumeration with EnumProcessModules()
+#define NUM_MODULES 128
+
+static
+ompt_initialize_t ompt_tool_windows()
+{
+ int i;
+ DWORD needed, new_size;
+ HMODULE *modules;
+ HANDLE process = GetCurrentProcess();
+ modules = (HMODULE*)malloc( NUM_MODULES * sizeof(HMODULE) );
+ ompt_initialize_t (*ompt_tool_p)() = NULL;
+
+#if OMPT_DEBUG
+ printf("ompt_tool_windows(): looking for ompt_tool\n");
+#endif
+ if (!EnumProcessModules( process, modules, NUM_MODULES * sizeof(HMODULE),
+ &needed)) {
+ // Regardless of the error reason use the stub initialization function
+ free(modules);
+ return NULL;
+ }
+ // Check if NUM_MODULES is enough to list all modules
+ new_size = needed / sizeof(HMODULE);
+ if (new_size > NUM_MODULES) {
+#if OMPT_DEBUG
+ printf("ompt_tool_windows(): resize buffer to %d bytes\n", needed);
+#endif
+ modules = (HMODULE*)realloc( modules, needed );
+ // If resizing failed use the stub function.
+ if (!EnumProcessModules(process, modules, needed, &needed)) {
+ free(modules);
+ return NULL;
+ }
+ }
+ for (i = 0; i < new_size; ++i) {
+ (FARPROC &)ompt_tool_p = GetProcAddress(modules[i], "ompt_tool");
+ if (ompt_tool_p) {
+#if OMPT_DEBUG
+ TCHAR modName[MAX_PATH];
+ if (GetModuleFileName(modules[i], modName, MAX_PATH))
+ printf("ompt_tool_windows(): ompt_tool found in module %s\n",
+ modName);
+#endif
+ free(modules);
+ return ompt_tool_p();
+ }
+#if OMPT_DEBUG
+ else {
+ TCHAR modName[MAX_PATH];
+ if (GetModuleFileName(modules[i], modName, MAX_PATH))
+ printf("ompt_tool_windows(): ompt_tool not found in module %s\n",
+ modName);
+ }
+#endif
+ }
+ free(modules);
+ return NULL;
+}
+#else
+# error Either __attribute__((weak)) or psapi.dll are required for OMPT support
+#endif // OMPT_HAVE_WEAK_ATTRIBUTE
+
+void ompt_pre_init()
+{
+ //--------------------------------------------------
+ // Execute the pre-initialization logic only once.
+ //--------------------------------------------------
+ static int ompt_pre_initialized = 0;
+
+ if (ompt_pre_initialized) return;
+
+ ompt_pre_initialized = 1;
+
+ //--------------------------------------------------
+ // Use a tool iff a tool is enabled and available.
+ //--------------------------------------------------
+ const char *ompt_env_var = getenv("OMP_TOOL");
+ tool_setting_e tool_setting = omp_tool_error;
+
+ if (!ompt_env_var || !strcmp(ompt_env_var, ""))
+ tool_setting = omp_tool_unset;
+ else if (OMPT_STR_MATCH(ompt_env_var, "disabled"))
+ tool_setting = omp_tool_disabled;
+ else if (OMPT_STR_MATCH(ompt_env_var, "enabled"))
+ tool_setting = omp_tool_enabled;
+
+#if OMPT_DEBUG
+ printf("ompt_pre_init(): tool_setting = %d\n", tool_setting);
+#endif
+ switch(tool_setting) {
+ case omp_tool_disabled:
+ break;
+
+ case omp_tool_unset:
+ case omp_tool_enabled:
+ ompt_initialize_fn = ompt_tool();
+ if (ompt_initialize_fn) {
+ ompt_enabled = 1;
+ }
+ break;
+
+ case omp_tool_error:
+ fprintf(stderr,
+ "Warning: OMP_TOOL has invalid value \"%s\".\n"
+ " legal values are (NULL,\"\",\"disabled\","
+ "\"enabled\").\n", ompt_env_var);
+ break;
+ }
+#if OMPT_DEBUG
+ printf("ompt_pre_init(): ompt_enabled = %d\n", ompt_enabled);
+#endif
+}
+
+
+void ompt_post_init()
+{
+ //--------------------------------------------------
+ // Execute the post-initialization logic only once.
+ //--------------------------------------------------
+ static int ompt_post_initialized = 0;
+
+ if (ompt_post_initialized) return;
+
+ ompt_post_initialized = 1;
+
+ //--------------------------------------------------
+ // Initialize the tool if so indicated.
+ //--------------------------------------------------
+ if (ompt_enabled) {
+ ompt_initialize_fn(ompt_fn_lookup, ompt_get_runtime_version(),
+ OMPT_VERSION);
+
+ ompt_thread_t *root_thread = ompt_get_thread();
+
+ ompt_set_thread_state(root_thread, ompt_state_overhead);
+
+ if (ompt_callbacks.ompt_callback(ompt_event_thread_begin)) {
+ ompt_callbacks.ompt_callback(ompt_event_thread_begin)
+ (ompt_thread_initial, ompt_get_thread_id());
+ }
+
+ ompt_set_thread_state(root_thread, ompt_state_work_serial);
+ }
+}
+
+
+void ompt_fini()
+{
+ if (ompt_enabled) {
+ if (ompt_callbacks.ompt_callback(ompt_event_runtime_shutdown)) {
+ ompt_callbacks.ompt_callback(ompt_event_runtime_shutdown)();
+ }
+ }
+
+ ompt_enabled = 0;
+}
+
+
+/*****************************************************************************
+ * interface operations
+ ****************************************************************************/
+
+/*****************************************************************************
+ * state
+ ****************************************************************************/
+
+OMPT_API_ROUTINE int ompt_enumerate_state(int current_state, int *next_state,
+ const char **next_state_name)
+{
+ const static int len = sizeof(ompt_state_info) / sizeof(ompt_state_info_t);
+ int i = 0;
+
+ for (i = 0; i < len - 1; i++) {
+ if (ompt_state_info[i].state_id == current_state) {
+ *next_state = ompt_state_info[i+1].state_id;
+ *next_state_name = ompt_state_info[i+1].state_name;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+
+
+/*****************************************************************************
+ * callbacks
+ ****************************************************************************/
+
+OMPT_API_ROUTINE int ompt_set_callback(ompt_event_t evid, ompt_callback_t cb)
+{
+ switch (evid) {
+
+#define ompt_event_macro(event_name, callback_type, event_id) \
+ case event_name: \
+ if (ompt_event_implementation_status(event_name)) { \
+ ompt_callbacks.ompt_callback(event_name) = (callback_type) cb; \
+ } \
+ return ompt_event_implementation_status(event_name);
+
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+
+#undef ompt_event_macro
+
+ default: return ompt_set_result_registration_error;
+ }
+}
+
+
+OMPT_API_ROUTINE int ompt_get_callback(ompt_event_t evid, ompt_callback_t *cb)
+{
+ switch (evid) {
+
+#define ompt_event_macro(event_name, callback_type, event_id) \
+ case event_name: \
+ if (ompt_event_implementation_status(event_name)) { \
+ ompt_callback_t mycb = \
+ (ompt_callback_t) ompt_callbacks.ompt_callback(event_name); \
+ if (mycb) { \
+ *cb = mycb; \
+ return ompt_get_callback_success; \
+ } \
+ } \
+ return ompt_get_callback_failure;
+
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+
+#undef ompt_event_macro
+
+ default: return ompt_get_callback_failure;
+ }
+}
+
+
+/*****************************************************************************
+ * parallel regions
+ ****************************************************************************/
+
+OMPT_API_ROUTINE ompt_parallel_id_t ompt_get_parallel_id(int ancestor_level)
+{
+ return __ompt_get_parallel_id_internal(ancestor_level);
+}
+
+
+OMPT_API_ROUTINE int ompt_get_parallel_team_size(int ancestor_level)
+{
+ return __ompt_get_parallel_team_size_internal(ancestor_level);
+}
+
+
+OMPT_API_ROUTINE void *ompt_get_parallel_function(int ancestor_level)
+{
+ return __ompt_get_parallel_function_internal(ancestor_level);
+}
+
+
+OMPT_API_ROUTINE ompt_state_t ompt_get_state(ompt_wait_id_t *ompt_wait_id)
+{
+ ompt_state_t thread_state = __ompt_get_state_internal(ompt_wait_id);
+
+ if (thread_state == ompt_state_undefined) {
+ thread_state = ompt_state_work_serial;
+ }
+
+ return thread_state;
+}
+
+
+
+/*****************************************************************************
+ * threads
+ ****************************************************************************/
+
+
+OMPT_API_ROUTINE void *ompt_get_idle_frame()
+{
+ return __ompt_get_idle_frame_internal();
+}
+
+
+
+/*****************************************************************************
+ * tasks
+ ****************************************************************************/
+
+
+OMPT_API_ROUTINE ompt_thread_id_t ompt_get_thread_id(void)
+{
+ return __ompt_get_thread_id_internal();
+}
+
+OMPT_API_ROUTINE ompt_task_id_t ompt_get_task_id(int depth)
+{
+ return __ompt_get_task_id_internal(depth);
+}
+
+
+OMPT_API_ROUTINE ompt_frame_t *ompt_get_task_frame(int depth)
+{
+ return __ompt_get_task_frame_internal(depth);
+}
+
+
+OMPT_API_ROUTINE void *ompt_get_task_function(int depth)
+{
+ return __ompt_get_task_function_internal(depth);
+}
+
+
+/*****************************************************************************
+ * placeholders
+ ****************************************************************************/
+
+// Don't define this as static. The loader may choose to eliminate the symbol
+// even though it is needed by tools.
+#define OMPT_API_PLACEHOLDER
+
+// Ensure that placeholders don't have mangled names in the symbol table.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+OMPT_API_PLACEHOLDER void ompt_idle(void)
+{
+ // This function is a placeholder used to represent the calling context of
+ // idle OpenMP worker threads. It is not meant to be invoked.
+ assert(0);
+}
+
+
+OMPT_API_PLACEHOLDER void ompt_overhead(void)
+{
+ // This function is a placeholder used to represent the OpenMP context of
+ // threads working in the OpenMP runtime. It is not meant to be invoked.
+ assert(0);
+}
+
+
+OMPT_API_PLACEHOLDER void ompt_barrier_wait(void)
+{
+ // This function is a placeholder used to represent the OpenMP context of
+ // threads waiting for a barrier in the OpenMP runtime. It is not meant
+ // to be invoked.
+ assert(0);
+}
+
+
+OMPT_API_PLACEHOLDER void ompt_task_wait(void)
+{
+ // This function is a placeholder used to represent the OpenMP context of
+ // threads waiting for a task in the OpenMP runtime. It is not meant
+ // to be invoked.
+ assert(0);
+}
+
+
+OMPT_API_PLACEHOLDER void ompt_mutex_wait(void)
+{
+ // This function is a placeholder used to represent the OpenMP context of
+ // threads waiting for a mutex in the OpenMP runtime. It is not meant
+ // to be invoked.
+ assert(0);
+}
+
+#ifdef __cplusplus
+};
+#endif
+
+
+/*****************************************************************************
+ * compatability
+ ****************************************************************************/
+
+OMPT_API_ROUTINE int ompt_get_ompt_version()
+{
+ return OMPT_VERSION;
+}
+
+
+
+/*****************************************************************************
+ * application-facing API
+ ****************************************************************************/
+
+
+/*----------------------------------------------------------------------------
+ | control
+ ---------------------------------------------------------------------------*/
+
+_OMP_EXTERN void ompt_control(uint64_t command, uint64_t modifier)
+{
+ if (ompt_enabled && ompt_callbacks.ompt_callback(ompt_event_control)) {
+ ompt_callbacks.ompt_callback(ompt_event_control)(command, modifier);
+ }
+}
+
+
+
+/*****************************************************************************
+ * API inquiry for tool
+ ****************************************************************************/
+
+static ompt_interface_fn_t ompt_fn_lookup(const char *s)
+{
+
+#define ompt_interface_fn(fn) \
+ if (strcmp(s, #fn) == 0) return (ompt_interface_fn_t) fn;
+
+ FOREACH_OMPT_INQUIRY_FN(ompt_interface_fn)
+
+ FOREACH_OMPT_PLACEHOLDER_FN(ompt_interface_fn)
+
+ return (ompt_interface_fn_t) 0;
+}
diff --git a/final/runtime/src/ompt-internal.h b/final/runtime/src/ompt-internal.h
new file mode 100644
index 0000000..42da9d8
--- /dev/null
+++ b/final/runtime/src/ompt-internal.h
@@ -0,0 +1,93 @@
+#ifndef __OMPT_INTERNAL_H__
+#define __OMPT_INTERNAL_H__
+
+#include "ompt.h"
+#include "ompt-event-specific.h"
+
+#define OMPT_VERSION 1
+
+#define _OMP_EXTERN extern "C"
+
+#define OMPT_INVOKER(x) \
+ ((x == fork_context_gnu) ? ompt_invoker_program : ompt_invoker_runtime)
+
+
+#define ompt_callback(e) e ## _callback
+
+
+typedef struct ompt_callbacks_s {
+#define ompt_event_macro(event, callback, eventid) callback ompt_callback(event);
+
+ FOREACH_OMPT_EVENT(ompt_event_macro)
+
+#undef ompt_event_macro
+} ompt_callbacks_t;
+
+
+
+typedef struct {
+ ompt_frame_t frame;
+ void* function;
+ ompt_task_id_t task_id;
+#if OMP_40_ENABLED
+ int ndeps;
+ ompt_task_dependence_t *deps;
+#endif /* OMP_40_ENABLED */
+} ompt_task_info_t;
+
+
+typedef struct {
+ ompt_parallel_id_t parallel_id;
+ void *microtask;
+} ompt_team_info_t;
+
+
+typedef struct ompt_lw_taskteam_s {
+ ompt_team_info_t ompt_team_info;
+ ompt_task_info_t ompt_task_info;
+ struct ompt_lw_taskteam_s *parent;
+} ompt_lw_taskteam_t;
+
+
+typedef struct ompt_parallel_info_s {
+ ompt_task_id_t parent_task_id; /* id of parent task */
+ ompt_parallel_id_t parallel_id; /* id of parallel region */
+ ompt_frame_t *parent_task_frame; /* frame data of parent task */
+ void *parallel_function; /* pointer to outlined function */
+} ompt_parallel_info_t;
+
+
+typedef struct {
+ ompt_state_t state;
+ ompt_wait_id_t wait_id;
+ void *idle_frame;
+} ompt_thread_info_t;
+
+
+extern ompt_callbacks_t ompt_callbacks;
+
+#if OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE
+#if USE_FAST_MEMORY
+# define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate
+# define KMP_OMPT_DEPS_FREE __kmp_fast_free
+# else
+# define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc
+# define KMP_OMPT_DEPS_FREE __kmp_thread_free
+# endif
+#endif /* OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void ompt_pre_init(void);
+void ompt_post_init(void);
+void ompt_fini(void);
+
+extern int ompt_enabled;
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
diff --git a/final/runtime/src/ompt-specific.c b/final/runtime/src/ompt-specific.c
new file mode 100644
index 0000000..49f668a
--- /dev/null
+++ b/final/runtime/src/ompt-specific.c
@@ -0,0 +1,332 @@
+//******************************************************************************
+// include files
+//******************************************************************************
+
+#include "kmp.h"
+#include "ompt-internal.h"
+#include "ompt-specific.h"
+
+//******************************************************************************
+// macros
+//******************************************************************************
+
+#define GTID_TO_OMPT_THREAD_ID(id) ((ompt_thread_id_t) (id >=0) ? id + 1: 0)
+
+#define LWT_FROM_TEAM(team) (team)->t.ompt_serialized_team_info;
+
+#define OMPT_THREAD_ID_BITS 16
+
+// 2013 08 24 - John Mellor-Crummey
+// ideally, a thread should assign its own ids based on thread private data.
+// however, the way the intel runtime reinitializes thread data structures
+// when it creates teams makes it difficult to maintain persistent thread
+// data. using a shared variable instead is simple. I leave it to intel to
+// sort out how to implement a higher performance version in their runtime.
+
+// when using fetch_and_add to generate the IDs, there isn't any reason to waste
+// bits for thread id.
+#if 0
+#define NEXT_ID(id_ptr,tid) \
+ ((KMP_TEST_THEN_INC64(id_ptr) << OMPT_THREAD_ID_BITS) | (tid))
+#else
+#define NEXT_ID(id_ptr,tid) (KMP_TEST_THEN_INC64((volatile kmp_int64 *)id_ptr))
+#endif
+
+//******************************************************************************
+// private operations
+//******************************************************************************
+
+//----------------------------------------------------------
+// traverse the team and task hierarchy
+// note: __ompt_get_teaminfo and __ompt_get_taskinfo
+// traverse the hierarchy similarly and need to be
+// kept consistent
+//----------------------------------------------------------
+
+ompt_team_info_t *
+__ompt_get_teaminfo(int depth, int *size)
+{
+ kmp_info_t *thr = ompt_get_thread();
+
+ if (thr) {
+ kmp_team *team = thr->th.th_team;
+ if (team == NULL) return NULL;
+
+ ompt_lw_taskteam_t *lwt = LWT_FROM_TEAM(team);
+
+ while(depth > 0) {
+ // next lightweight team (if any)
+ if (lwt) lwt = lwt->parent;
+
+ // next heavyweight team (if any) after
+ // lightweight teams are exhausted
+ if (!lwt && team) team=team->t.t_parent;
+
+ depth--;
+ }
+
+ if (lwt) {
+ // lightweight teams have one task
+ if (size) *size = 1;
+
+ // return team info for lightweight team
+ return &lwt->ompt_team_info;
+ } else if (team) {
+ // extract size from heavyweight team
+ if (size) *size = team->t.t_nproc;
+
+ // return team info for heavyweight team
+ return &team->t.ompt_team_info;
+ }
+ }
+
+ return NULL;
+}
+
+
+ompt_task_info_t *
+__ompt_get_taskinfo(int depth)
+{
+ ompt_task_info_t *info = NULL;
+ kmp_info_t *thr = ompt_get_thread();
+
+ if (thr) {
+ kmp_taskdata_t *taskdata = thr->th.th_current_task;
+ ompt_lw_taskteam_t *lwt = LWT_FROM_TEAM(taskdata->td_team);
+
+ while (depth > 0) {
+ // next lightweight team (if any)
+ if (lwt) lwt = lwt->parent;
+
+ // next heavyweight team (if any) after
+ // lightweight teams are exhausted
+ if (!lwt && taskdata) {
+ taskdata = taskdata->td_parent;
+ if (taskdata) {
+ lwt = LWT_FROM_TEAM(taskdata->td_team);
+ }
+ }
+ depth--;
+ }
+
+ if (lwt) {
+ info = &lwt->ompt_task_info;
+ } else if (taskdata) {
+ info = &taskdata->ompt_task_info;
+ }
+ }
+
+ return info;
+}
+
+
+
+//******************************************************************************
+// interface operations
+//******************************************************************************
+
+//----------------------------------------------------------
+// thread support
+//----------------------------------------------------------
+
+ompt_parallel_id_t
+__ompt_thread_id_new()
+{
+ static uint64_t ompt_thread_id = 1;
+ return NEXT_ID(&ompt_thread_id, 0);
+}
+
+void
+__ompt_thread_begin(ompt_thread_type_t thread_type, int gtid)
+{
+ ompt_callbacks.ompt_callback(ompt_event_thread_begin)(
+ thread_type, GTID_TO_OMPT_THREAD_ID(gtid));
+}
+
+
+void
+__ompt_thread_end(ompt_thread_type_t thread_type, int gtid)
+{
+ ompt_callbacks.ompt_callback(ompt_event_thread_end)(
+ thread_type, GTID_TO_OMPT_THREAD_ID(gtid));
+}
+
+
+ompt_thread_id_t
+__ompt_get_thread_id_internal()
+{
+ // FIXME
+ // until we have a better way of assigning ids, use __kmp_get_gtid
+ // since the return value might be negative, we need to test that before
+ // assigning it to an ompt_thread_id_t, which is unsigned.
+ int id = __kmp_get_gtid();
+ assert(id >= 0);
+
+ return GTID_TO_OMPT_THREAD_ID(id);
+}
+
+//----------------------------------------------------------
+// state support
+//----------------------------------------------------------
+
+void
+__ompt_thread_assign_wait_id(void *variable)
+{
+ int gtid = __kmp_gtid_get_specific();
+ kmp_info_t *ti = ompt_get_thread_gtid(gtid);
+
+ ti->th.ompt_thread_info.wait_id = (ompt_wait_id_t) variable;
+}
+
+ompt_state_t
+__ompt_get_state_internal(ompt_wait_id_t *ompt_wait_id)
+{
+ kmp_info_t *ti = ompt_get_thread();
+
+ if (ti) {
+ if (ompt_wait_id)
+ *ompt_wait_id = ti->th.ompt_thread_info.wait_id;
+ return ti->th.ompt_thread_info.state;
+ }
+ return ompt_state_undefined;
+}
+
+//----------------------------------------------------------
+// idle frame support
+//----------------------------------------------------------
+
+void *
+__ompt_get_idle_frame_internal(void)
+{
+ kmp_info_t *ti = ompt_get_thread();
+ return ti ? ti->th.ompt_thread_info.idle_frame : NULL;
+}
+
+
+//----------------------------------------------------------
+// parallel region support
+//----------------------------------------------------------
+
+ompt_parallel_id_t
+__ompt_parallel_id_new(int gtid)
+{
+ static uint64_t ompt_parallel_id = 1;
+ return gtid >= 0 ? NEXT_ID(&ompt_parallel_id, gtid) : 0;
+}
+
+
+void *
+__ompt_get_parallel_function_internal(int depth)
+{
+ ompt_team_info_t *info = __ompt_get_teaminfo(depth, NULL);
+ void *function = info ? info->microtask : NULL;
+ return function;
+}
+
+
+ompt_parallel_id_t
+__ompt_get_parallel_id_internal(int depth)
+{
+ ompt_team_info_t *info = __ompt_get_teaminfo(depth, NULL);
+ ompt_parallel_id_t id = info ? info->parallel_id : 0;
+ return id;
+}
+
+
+int
+__ompt_get_parallel_team_size_internal(int depth)
+{
+ // initialize the return value with the error value.
+ // if there is a team at the specified depth, the default
+ // value will be overwritten the size of that team.
+ int size = -1;
+ (void) __ompt_get_teaminfo(depth, &size);
+ return size;
+}
+
+
+//----------------------------------------------------------
+// lightweight task team support
+//----------------------------------------------------------
+
+void
+__ompt_lw_taskteam_init(ompt_lw_taskteam_t *lwt, kmp_info_t *thr,
+ int gtid, void *microtask,
+ ompt_parallel_id_t ompt_pid)
+{
+ lwt->ompt_team_info.parallel_id = ompt_pid;
+ lwt->ompt_team_info.microtask = microtask;
+ lwt->ompt_task_info.task_id = 0;
+ lwt->ompt_task_info.frame.reenter_runtime_frame = 0;
+ lwt->ompt_task_info.frame.exit_runtime_frame = 0;
+ lwt->ompt_task_info.function = NULL;
+ lwt->parent = 0;
+}
+
+
+void
+__ompt_lw_taskteam_link(ompt_lw_taskteam_t *lwt, kmp_info_t *thr)
+{
+ ompt_lw_taskteam_t *my_parent = thr->th.th_team->t.ompt_serialized_team_info;
+ lwt->parent = my_parent;
+ thr->th.th_team->t.ompt_serialized_team_info = lwt;
+}
+
+
+ompt_lw_taskteam_t *
+__ompt_lw_taskteam_unlink(kmp_info_t *thr)
+{
+ ompt_lw_taskteam_t *lwtask = thr->th.th_team->t.ompt_serialized_team_info;
+ if (lwtask) thr->th.th_team->t.ompt_serialized_team_info = lwtask->parent;
+ return lwtask;
+}
+
+
+//----------------------------------------------------------
+// task support
+//----------------------------------------------------------
+
+ompt_task_id_t
+__ompt_task_id_new(int gtid)
+{
+ static uint64_t ompt_task_id = 1;
+ return NEXT_ID(&ompt_task_id, gtid);
+}
+
+
+ompt_task_id_t
+__ompt_get_task_id_internal(int depth)
+{
+ ompt_task_info_t *info = __ompt_get_taskinfo(depth);
+ ompt_task_id_t task_id = info ? info->task_id : 0;
+ return task_id;
+}
+
+
+void *
+__ompt_get_task_function_internal(int depth)
+{
+ ompt_task_info_t *info = __ompt_get_taskinfo(depth);
+ void *function = info ? info->function : NULL;
+ return function;
+}
+
+
+ompt_frame_t *
+__ompt_get_task_frame_internal(int depth)
+{
+ ompt_task_info_t *info = __ompt_get_taskinfo(depth);
+ ompt_frame_t *frame = info ? frame = &info->frame : NULL;
+ return frame;
+}
+
+
+//----------------------------------------------------------
+// team support
+//----------------------------------------------------------
+
+void
+__ompt_team_assign_id(kmp_team_t *team, ompt_parallel_id_t ompt_pid)
+{
+ team->t.ompt_team_info.parallel_id = ompt_pid;
+}
diff --git a/final/runtime/src/ompt-specific.h b/final/runtime/src/ompt-specific.h
new file mode 100644
index 0000000..c8b50fb
--- /dev/null
+++ b/final/runtime/src/ompt-specific.h
@@ -0,0 +1,90 @@
+#ifndef OMPT_SPECIFIC_H
+#define OMPT_SPECIFIC_H
+
+#include "kmp.h"
+
+/*****************************************************************************
+ * types
+ ****************************************************************************/
+
+typedef kmp_info_t ompt_thread_t;
+
+
+
+/*****************************************************************************
+ * forward declarations
+ ****************************************************************************/
+
+void __ompt_team_assign_id(kmp_team_t *team, ompt_parallel_id_t ompt_pid);
+void __ompt_thread_assign_wait_id(void *variable);
+
+void __ompt_lw_taskteam_init(ompt_lw_taskteam_t *lwt, ompt_thread_t *thr,
+ int gtid, void *microtask,
+ ompt_parallel_id_t ompt_pid);
+
+void __ompt_lw_taskteam_link(ompt_lw_taskteam_t *lwt, ompt_thread_t *thr);
+
+ompt_lw_taskteam_t * __ompt_lw_taskteam_unlink(ompt_thread_t *thr);
+
+ompt_parallel_id_t __ompt_parallel_id_new(int gtid);
+ompt_task_id_t __ompt_task_id_new(int gtid);
+
+ompt_team_info_t *__ompt_get_teaminfo(int depth, int *size);
+
+ompt_task_info_t *__ompt_get_taskinfo(int depth);
+
+void __ompt_thread_begin(ompt_thread_type_t thread_type, int gtid);
+
+void __ompt_thread_end(ompt_thread_type_t thread_type, int gtid);
+
+int __ompt_get_parallel_team_size_internal(int ancestor_level);
+
+ompt_task_id_t __ompt_get_task_id_internal(int depth);
+
+ompt_frame_t *__ompt_get_task_frame_internal(int depth);
+
+
+
+/*****************************************************************************
+ * macros
+ ****************************************************************************/
+
+#define OMPT_HAVE_WEAK_ATTRIBUTE KMP_HAVE_WEAK_ATTRIBUTE
+#define OMPT_HAVE_PSAPI KMP_HAVE_PSAPI
+#define OMPT_STR_MATCH(haystack, needle) __kmp_str_match(haystack, 0, needle)
+
+
+
+//******************************************************************************
+// inline functions
+//******************************************************************************
+
+inline ompt_thread_t *
+ompt_get_thread_gtid(int gtid)
+{
+ return (gtid >= 0) ? __kmp_thread_from_gtid(gtid) : NULL;
+}
+
+
+inline ompt_thread_t *
+ompt_get_thread()
+{
+ int gtid = __kmp_get_gtid();
+ return ompt_get_thread_gtid(gtid);
+}
+
+
+inline void
+ompt_set_thread_state(ompt_thread_t *thread, ompt_state_t state)
+{
+ thread->th.ompt_thread_info.state = state;
+}
+
+
+inline const char *
+ompt_get_runtime_version()
+{
+ return &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN];
+}
+
+#endif
diff --git a/final/runtime/src/test-touch.c b/final/runtime/src/test-touch.c
new file mode 100644
index 0000000..6ce529a
--- /dev/null
+++ b/final/runtime/src/test-touch.c
@@ -0,0 +1,31 @@
+// test-touch.c //
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern double omp_get_wtime();
+extern int omp_get_num_threads();
+extern int omp_get_max_threads();
+#ifdef __cplusplus
+}
+#endif
+
+int main() {
+ omp_get_wtime();
+ omp_get_num_threads();
+ omp_get_max_threads();
+ return 0;
+}
+
+// end of file //
diff --git a/final/runtime/src/thirdparty/ittnotify/disable_warnings.h b/final/runtime/src/thirdparty/ittnotify/disable_warnings.h
new file mode 100644
index 0000000..4b242fd
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/disable_warnings.h
@@ -0,0 +1,29 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ittnotify_config.h"
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+#pragma warning (disable: 593) /* parameter "XXXX" was set but never used */
+#pragma warning (disable: 344) /* typedef name has already been declared (with same type) */
+#pragma warning (disable: 174) /* expression has no effect */
+#pragma warning (disable: 4127) /* conditional expression is constant */
+#pragma warning (disable: 4306) /* conversion from '?' to '?' of greater size */
+
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if defined __INTEL_COMPILER
+
+#pragma warning (disable: 869) /* parameter "XXXXX" was never referenced */
+#pragma warning (disable: 1418) /* external function definition with no prior declaration */
+#pragma warning (disable: 1419) /* external declaration in primary source file */
+
+#endif /* __INTEL_COMPILER */
diff --git a/final/runtime/src/thirdparty/ittnotify/ittnotify.h b/final/runtime/src/thirdparty/ittnotify/ittnotify.h
new file mode 100644
index 0000000..484e257
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/ittnotify.h
@@ -0,0 +1,3804 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _ITTNOTIFY_H_
+#define _ITTNOTIFY_H_
+
+/**
+@file
+@brief Public User API functions and types
+@mainpage
+
+The ITT API is used to annotate a user's program with additional information
+that can be used by correctness and performance tools. The user inserts
+calls in their program. Those calls generate information that is collected
+at runtime, and used by Intel(R) Threading Tools.
+
+@section API Concepts
+The following general concepts are used throughout the API.
+
+@subsection Unicode Support
+Many API functions take character string arguments. On Windows, there
+are two versions of each such function. The function name is suffixed
+by W if Unicode support is enabled, and by A otherwise. Any API function
+that takes a character string argument adheres to this convention.
+
+@subsection Conditional Compilation
+Many users prefer having an option to modify ITT API code when linking it
+inside their runtimes. ITT API header file provides a mechanism to replace
+ITT API function names inside your code with empty strings. To do this,
+define the macros INTEL_NO_ITTNOTIFY_API during compilation and remove the
+static library from the linker script.
+
+@subsection Domains
+[see domains]
+Domains provide a way to separate notification for different modules or
+libraries in a program. Domains are specified by dotted character strings,
+e.g. TBB.Internal.Control.
+
+A mechanism (to be specified) is provided to enable and disable
+domains. By default, all domains are enabled.
+@subsection Named Entities and Instances
+Named entities (frames, regions, tasks, and markers) communicate
+information about the program to the analysis tools. A named entity often
+refers to a section of program code, or to some set of logical concepts
+that the programmer wants to group together.
+
+Named entities relate to the programmer's static view of the program. When
+the program actually executes, many instances of a given named entity
+may be created.
+
+The API annotations denote instances of named entities. The actual
+named entities are displayed using the analysis tools. In other words,
+the named entities come into existence when instances are created.
+
+Instances of named entities may have instance identifiers (IDs). Some
+API calls use instance identifiers to create relationships between
+different instances of named entities. Other API calls associate data
+with instances of named entities.
+
+Some named entities must always have instance IDs. In particular, regions
+and frames always have IDs. Task and markers need IDs only if the ID is
+needed in another API call (such as adding a relation or metadata).
+
+The lifetime of instance IDs is distinct from the lifetime of
+instances. This allows various relationships to be specified separate
+from the actual execution of instances. This flexibility comes at the
+expense of extra API calls.
+
+The same ID may not be reused for different instances, unless a previous
+[ref] __itt_id_destroy call for that ID has been issued.
+*/
+
+/** @cond exclude_from_documentation */
+#ifndef ITT_OS_WIN
+# define ITT_OS_WIN 1
+#endif /* ITT_OS_WIN */
+
+#ifndef ITT_OS_LINUX
+# define ITT_OS_LINUX 2
+#endif /* ITT_OS_LINUX */
+
+#ifndef ITT_OS_MAC
+# define ITT_OS_MAC 3
+#endif /* ITT_OS_MAC */
+
+#ifndef ITT_OS
+# if defined WIN32 || defined _WIN32
+# define ITT_OS ITT_OS_WIN
+# elif defined( __APPLE__ ) && defined( __MACH__ )
+# define ITT_OS ITT_OS_MAC
+# else
+# define ITT_OS ITT_OS_LINUX
+# endif
+#endif /* ITT_OS */
+
+#ifndef ITT_PLATFORM_WIN
+# define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */
+
+#ifndef ITT_PLATFORM_POSIX
+# define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM_MAC
+# define ITT_PLATFORM_MAC 3
+#endif /* ITT_PLATFORM_MAC */
+
+#ifndef ITT_PLATFORM
+# if ITT_OS==ITT_OS_WIN
+# define ITT_PLATFORM ITT_PLATFORM_WIN
+# elif ITT_OS==ITT_OS_MAC
+# define ITT_PLATFORM ITT_PLATFORM_MAC
+# else
+# define ITT_PLATFORM ITT_PLATFORM_POSIX
+# endif
+#endif /* ITT_PLATFORM */
+
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
+#include <stddef.h>
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <tchar.h>
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifndef CDECL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define CDECL __cdecl
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define CDECL __attribute__ ((cdecl))
+# else /* _M_IX86 || __i386__ */
+# define CDECL /* actual only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+#ifndef STDCALL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define STDCALL __stdcall
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define STDCALL __attribute__ ((stdcall))
+# else /* _M_IX86 || __i386__ */
+# define STDCALL /* supported only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* STDCALL */
+
+#define ITTAPI CDECL
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL CDECL
+#define LIBITTAPI_CALL CDECL
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define ITT_INLINE __forceinline
+#define ITT_INLINE_ATTRIBUTE /* nothing */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define ITT_INLINE static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
+#else /* __STRICT_ANSI__ */
+#define ITT_INLINE static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
+#endif /* __STRICT_ANSI__ */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
+
+#ifdef INTEL_ITTNOTIFY_ENABLE_LEGACY
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# pragma message("WARNING!!! Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro")
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# warning "Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro"
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# include "legacy/ittnotify.h"
+#endif /* INTEL_ITTNOTIFY_ENABLE_LEGACY */
+
+/** @cond exclude_from_documentation */
+/* Helper macro for joining tokens */
+#define ITT_JOIN_AUX(p,n) p##n
+#define ITT_JOIN(p,n) ITT_JOIN_AUX(p,n)
+
+#ifdef ITT_MAJOR
+#undef ITT_MAJOR
+#endif
+#ifdef ITT_MINOR
+#undef ITT_MINOR
+#endif
+#define ITT_MAJOR 3
+#define ITT_MINOR 0
+
+/* Standard versioning of a token with major and minor version numbers */
+#define ITT_VERSIONIZE(x) \
+ ITT_JOIN(x, \
+ ITT_JOIN(_, \
+ ITT_JOIN(ITT_MAJOR, \
+ ITT_JOIN(_, ITT_MINOR))))
+
+#ifndef INTEL_ITTNOTIFY_PREFIX
+# define INTEL_ITTNOTIFY_PREFIX __itt_
+#endif /* INTEL_ITTNOTIFY_PREFIX */
+#ifndef INTEL_ITTNOTIFY_POSTFIX
+# define INTEL_ITTNOTIFY_POSTFIX _ptr_
+#endif /* INTEL_ITTNOTIFY_POSTFIX */
+
+#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
+#define ITTNOTIFY_NAME(n) ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
+
+#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
+#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)
+
+#define ITTNOTIFY_VOID_D0(n,d) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_VOID_D1(n,d,x) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_VOID_D2(n,d,x,y) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+#define ITTNOTIFY_DATA_D0(n,d) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_DATA_D1(n,d,x) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_DATA_D2(n,d,x,y) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+
+#ifdef ITT_STUB
+#undef ITT_STUB
+#endif
+#ifdef ITT_STUBV
+#undef ITT_STUBV
+#endif
+#define ITT_STUBV(api,type,name,args) \
+ typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args; \
+ extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
+#define ITT_STUB ITT_STUBV
+/** @endcond */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** @cond exclude_from_gpa_documentation */
+/**
+ * @defgroup public Public API
+ * @{
+ * @}
+ */
+
+/**
+ * @defgroup control Collection Control
+ * @ingroup public
+ * General behavior: application continues to run, but no profiling information is being collected
+ *
+ * Pausing occurs not only for the current thread but for all process as well as spawned processes
+ * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:
+ * - Does not analyze or report errors that involve memory access.
+ * - Other errors are reported as usual. Pausing data collection in
+ * Intel(R) Parallel Inspector and Intel(R) Inspector XE
+ * only pauses tracing and analyzing memory access.
+ * It does not pause tracing or analyzing threading APIs.
+ * .
+ * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:
+ * - Does continue to record when new threads are started.
+ * .
+ * - Other effects:
+ * - Possible reduction of runtime overhead.
+ * .
+ * @{
+ */
+/** @brief Pause collection */
+void ITTAPI __itt_pause(void);
+/** @brief Resume collection */
+void ITTAPI __itt_resume(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, pause, (void))
+ITT_STUBV(ITTAPI, void, resume, (void))
+#define __itt_pause ITTNOTIFY_VOID(pause)
+#define __itt_pause_ptr ITTNOTIFY_NAME(pause)
+#define __itt_resume ITTNOTIFY_VOID(resume)
+#define __itt_resume_ptr ITTNOTIFY_NAME(resume)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_pause()
+#define __itt_pause_ptr 0
+#define __itt_resume()
+#define __itt_resume_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_pause_ptr 0
+#define __itt_resume_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} control group */
+/** @endcond */
+
+/**
+ * @defgroup threads Threads
+ * @ingroup public
+ * Give names to threads
+ * @{
+ */
+/**
+ * @brief Sets thread name of calling thread
+ * @param[in] name - name of thread
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_thread_set_nameA(const char *name);
+void ITTAPI __itt_thread_set_nameW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_thread_set_name __itt_thread_set_nameW
+# define __itt_thread_set_name_ptr __itt_thread_set_nameW_ptr
+#else /* UNICODE */
+# define __itt_thread_set_name __itt_thread_set_nameA
+# define __itt_thread_set_name_ptr __itt_thread_set_nameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_thread_set_name(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char *name))
+ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, thread_set_name, (const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thread_set_nameA ITTNOTIFY_VOID(thread_set_nameA)
+#define __itt_thread_set_nameA_ptr ITTNOTIFY_NAME(thread_set_nameA)
+#define __itt_thread_set_nameW ITTNOTIFY_VOID(thread_set_nameW)
+#define __itt_thread_set_nameW_ptr ITTNOTIFY_NAME(thread_set_nameW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thread_set_name ITTNOTIFY_VOID(thread_set_name)
+#define __itt_thread_set_name_ptr ITTNOTIFY_NAME(thread_set_name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thread_set_nameA(name)
+#define __itt_thread_set_nameA_ptr 0
+#define __itt_thread_set_nameW(name)
+#define __itt_thread_set_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thread_set_name(name)
+#define __itt_thread_set_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thread_set_nameA_ptr 0
+#define __itt_thread_set_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thread_set_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @cond exclude_from_gpa_documentation */
+
+/**
+ * @brief Mark current thread as ignored from this point on, for the duration of its existence.
+ */
+void ITTAPI __itt_thread_ignore(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, thread_ignore, (void))
+#define __itt_thread_ignore ITTNOTIFY_VOID(thread_ignore)
+#define __itt_thread_ignore_ptr ITTNOTIFY_NAME(thread_ignore)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_thread_ignore()
+#define __itt_thread_ignore_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_thread_ignore_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} threads group */
+
+/**
+ * @defgroup suppress Error suppression
+ * @ingroup public
+ * General behavior: application continues to run, but errors are suppressed
+ *
+ * @{
+ */
+
+/*****************************************************************//**
+ * @name group of functions used for error suppression in correctness tools
+ *********************************************************************/
+/** @{ */
+/**
+ * @hideinitializer
+ * @brief possible value for suppression mask
+ */
+#define __itt_suppress_all_errors 0x7fffffff
+
+/**
+ * @hideinitializer
+ * @brief possible value for suppression mask (suppresses errors from threading analysis)
+ */
+#define __itt_suppress_threading_errors 0x000000ff
+
+/**
+ * @hideinitializer
+ * @brief possible value for suppression mask (suppresses errors from memory analysis)
+ */
+#define __itt_suppress_memory_errors 0x0000ff00
+
+/**
+ * @brief Start suppressing errors identified in mask on this thread
+ */
+void ITTAPI __itt_suppress_push(unsigned int mask);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask))
+#define __itt_suppress_push ITTNOTIFY_VOID(suppress_push)
+#define __itt_suppress_push_ptr ITTNOTIFY_NAME(suppress_push)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_suppress_push(mask)
+#define __itt_suppress_push_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_suppress_push_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Undo the effects of the matching call to __itt_suppress_push
+ */
+void ITTAPI __itt_suppress_pop(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, suppress_pop, (void))
+#define __itt_suppress_pop ITTNOTIFY_VOID(suppress_pop)
+#define __itt_suppress_pop_ptr ITTNOTIFY_NAME(suppress_pop)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_suppress_pop()
+#define __itt_suppress_pop_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_suppress_pop_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @enum __itt_model_disable
+ * @brief Enumerator for the disable methods
+ */
+typedef enum __itt_suppress_mode {
+ __itt_unsuppress_range,
+ __itt_suppress_range
+} __itt_suppress_mode_t;
+
+/**
+ * @brief Mark a range of memory for error suppression or unsuppression for error types included in mask
+ */
+void ITTAPI __itt_suppress_mark_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size))
+#define __itt_suppress_mark_range ITTNOTIFY_VOID(suppress_mark_range)
+#define __itt_suppress_mark_range_ptr ITTNOTIFY_NAME(suppress_mark_range)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_suppress_mark_range(mask)
+#define __itt_suppress_mark_range_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_suppress_mark_range_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Undo the effect of a matching call to __itt_suppress_mark_range. If not matching
+ * call is found, nothing is changed.
+ */
+void ITTAPI __itt_suppress_clear_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, suppress_clear_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size))
+#define __itt_suppress_clear_range ITTNOTIFY_VOID(suppress_clear_range)
+#define __itt_suppress_clear_range_ptr ITTNOTIFY_NAME(suppress_clear_range)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_suppress_clear_range(mask)
+#define __itt_suppress_clear_range_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_suppress_clear_range_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} */
+/** @} suppress group */
+
+/**
+ * @defgroup sync Synchronization
+ * @ingroup public
+ * Indicate user-written synchronization code
+ * @{
+ */
+/**
+ * @hideinitializer
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_barrier 1
+
+/**
+ * @hideinitializer
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_mutex 2
+
+/**
+@brief Name a synchronization object
+@param[in] addr Handle for the synchronization object. You should
+use a real address to uniquely identify the synchronization object.
+@param[in] objtype null-terminated object type string. If NULL is
+passed, the name will be "User Synchronization".
+@param[in] objname null-terminated object name string. If NULL,
+no name will be assigned to the object.
+@param[in] attribute one of [#__itt_attr_barrier, #__itt_attr_mutex]
+ */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_sync_createA(void *addr, const char *objtype, const char *objname, int attribute);
+void ITTAPI __itt_sync_createW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_sync_create __itt_sync_createW
+# define __itt_sync_create_ptr __itt_sync_createW_ptr
+#else /* UNICODE */
+# define __itt_sync_create __itt_sync_createA
+# define __itt_sync_create_ptr __itt_sync_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_sync_create (void *addr, const char *objtype, const char *objname, int attribute);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char *objtype, const char *objname, int attribute))
+ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_create, (void *addr, const char* objtype, const char* objname, int attribute))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_createA ITTNOTIFY_VOID(sync_createA)
+#define __itt_sync_createA_ptr ITTNOTIFY_NAME(sync_createA)
+#define __itt_sync_createW ITTNOTIFY_VOID(sync_createW)
+#define __itt_sync_createW_ptr ITTNOTIFY_NAME(sync_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_create ITTNOTIFY_VOID(sync_create)
+#define __itt_sync_create_ptr ITTNOTIFY_NAME(sync_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_createA(addr, objtype, objname, attribute)
+#define __itt_sync_createA_ptr 0
+#define __itt_sync_createW(addr, objtype, objname, attribute)
+#define __itt_sync_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_create(addr, objtype, objname, attribute)
+#define __itt_sync_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_createA_ptr 0
+#define __itt_sync_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+@brief Rename a synchronization object
+
+You can use the rename call to assign or reassign a name to a given
+synchronization object.
+@param[in] addr handle for the synchronization object.
+@param[in] name null-terminated object name string.
+*/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_sync_renameA(void *addr, const char *name);
+void ITTAPI __itt_sync_renameW(void *addr, const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_sync_rename __itt_sync_renameW
+# define __itt_sync_rename_ptr __itt_sync_renameW_ptr
+#else /* UNICODE */
+# define __itt_sync_rename __itt_sync_renameA
+# define __itt_sync_rename_ptr __itt_sync_renameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_sync_rename(void *addr, const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char *name))
+ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_rename, (void *addr, const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_renameA ITTNOTIFY_VOID(sync_renameA)
+#define __itt_sync_renameA_ptr ITTNOTIFY_NAME(sync_renameA)
+#define __itt_sync_renameW ITTNOTIFY_VOID(sync_renameW)
+#define __itt_sync_renameW_ptr ITTNOTIFY_NAME(sync_renameW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_rename ITTNOTIFY_VOID(sync_rename)
+#define __itt_sync_rename_ptr ITTNOTIFY_NAME(sync_rename)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_renameA(addr, name)
+#define __itt_sync_renameA_ptr 0
+#define __itt_sync_renameW(addr, name)
+#define __itt_sync_renameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_rename(addr, name)
+#define __itt_sync_rename_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_renameA_ptr 0
+#define __itt_sync_renameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_rename_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ @brief Destroy a synchronization object.
+ @param addr Handle for the synchronization object.
+ */
+void ITTAPI __itt_sync_destroy(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr))
+#define __itt_sync_destroy ITTNOTIFY_VOID(sync_destroy)
+#define __itt_sync_destroy_ptr ITTNOTIFY_NAME(sync_destroy)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_sync_destroy(addr)
+#define __itt_sync_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_sync_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/*****************************************************************//**
+ * @name group of functions is used for performance measurement tools
+ *********************************************************************/
+/** @{ */
+/**
+ * @brief Enter spin loop on user-defined sync object
+ */
+void ITTAPI __itt_sync_prepare(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, sync_prepare, (void *addr))
+#define __itt_sync_prepare ITTNOTIFY_VOID(sync_prepare)
+#define __itt_sync_prepare_ptr ITTNOTIFY_NAME(sync_prepare)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_sync_prepare(addr)
+#define __itt_sync_prepare_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_sync_prepare_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Quit spin loop without acquiring spin object
+ */
+void ITTAPI __itt_sync_cancel(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr))
+#define __itt_sync_cancel ITTNOTIFY_VOID(sync_cancel)
+#define __itt_sync_cancel_ptr ITTNOTIFY_NAME(sync_cancel)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_sync_cancel(addr)
+#define __itt_sync_cancel_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_sync_cancel_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Successful spin loop completion (sync object acquired)
+ */
+void ITTAPI __itt_sync_acquired(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr))
+#define __itt_sync_acquired ITTNOTIFY_VOID(sync_acquired)
+#define __itt_sync_acquired_ptr ITTNOTIFY_NAME(sync_acquired)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_sync_acquired(addr)
+#define __itt_sync_acquired_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_sync_acquired_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Start sync object releasing code. Is called before the lock release call.
+ */
+void ITTAPI __itt_sync_releasing(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, sync_releasing, (void *addr))
+#define __itt_sync_releasing ITTNOTIFY_VOID(sync_releasing)
+#define __itt_sync_releasing_ptr ITTNOTIFY_NAME(sync_releasing)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_sync_releasing(addr)
+#define __itt_sync_releasing_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_sync_releasing_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} */
+
+/** @} sync group */
+
+/**************************************************************//**
+ * @name group of functions is used for correctness checking tools
+ ******************************************************************/
+/** @{ */
+/**
+ * @ingroup legacy
+ * @deprecated Legacy API
+ * @brief Fast synchronization which does no require spinning.
+ * - This special function is to be used by TBB and OpenMP libraries only when they know
+ * there is no spin but they need to suppress TC warnings about shared variable modifications.
+ * - It only has corresponding pointers in static library and does not have corresponding function
+ * in dynamic library.
+ * @see void __itt_sync_prepare(void* addr);
+ */
+void ITTAPI __itt_fsync_prepare(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr))
+#define __itt_fsync_prepare ITTNOTIFY_VOID(fsync_prepare)
+#define __itt_fsync_prepare_ptr ITTNOTIFY_NAME(fsync_prepare)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_fsync_prepare(addr)
+#define __itt_fsync_prepare_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_fsync_prepare_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup legacy
+ * @deprecated Legacy API
+ * @brief Fast synchronization which does no require spinning.
+ * - This special function is to be used by TBB and OpenMP libraries only when they know
+ * there is no spin but they need to suppress TC warnings about shared variable modifications.
+ * - It only has corresponding pointers in static library and does not have corresponding function
+ * in dynamic library.
+ * @see void __itt_sync_cancel(void *addr);
+ */
+void ITTAPI __itt_fsync_cancel(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr))
+#define __itt_fsync_cancel ITTNOTIFY_VOID(fsync_cancel)
+#define __itt_fsync_cancel_ptr ITTNOTIFY_NAME(fsync_cancel)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_fsync_cancel(addr)
+#define __itt_fsync_cancel_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_fsync_cancel_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup legacy
+ * @deprecated Legacy API
+ * @brief Fast synchronization which does no require spinning.
+ * - This special function is to be used by TBB and OpenMP libraries only when they know
+ * there is no spin but they need to suppress TC warnings about shared variable modifications.
+ * - It only has corresponding pointers in static library and does not have corresponding function
+ * in dynamic library.
+ * @see void __itt_sync_acquired(void *addr);
+ */
+void ITTAPI __itt_fsync_acquired(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr))
+#define __itt_fsync_acquired ITTNOTIFY_VOID(fsync_acquired)
+#define __itt_fsync_acquired_ptr ITTNOTIFY_NAME(fsync_acquired)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_fsync_acquired(addr)
+#define __itt_fsync_acquired_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_fsync_acquired_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup legacy
+ * @deprecated Legacy API
+ * @brief Fast synchronization which does no require spinning.
+ * - This special function is to be used by TBB and OpenMP libraries only when they know
+ * there is no spin but they need to suppress TC warnings about shared variable modifications.
+ * - It only has corresponding pointers in static library and does not have corresponding function
+ * in dynamic library.
+ * @see void __itt_sync_releasing(void* addr);
+ */
+void ITTAPI __itt_fsync_releasing(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr))
+#define __itt_fsync_releasing ITTNOTIFY_VOID(fsync_releasing)
+#define __itt_fsync_releasing_ptr ITTNOTIFY_NAME(fsync_releasing)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_fsync_releasing(addr)
+#define __itt_fsync_releasing_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_fsync_releasing_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} */
+
+/**
+ * @defgroup model Modeling by Intel(R) Parallel Advisor
+ * @ingroup public
+ * This is the subset of itt used for modeling by Intel(R) Parallel Advisor.
+ * This API is called ONLY using annotate.h, by "Annotation" macros
+ * the user places in their sources during the parallelism modeling steps.
+ *
+ * site_begin/end and task_begin/end take the address of handle variables,
+ * which are writeable by the API. Handles must be 0 initialized prior
+ * to the first call to begin, or may cause a run-time failure.
+ * The handles are initialized in a multi-thread safe way by the API if
+ * the handle is 0. The commonly expected idiom is one static handle to
+ * identify a site or task. If a site or task of the same name has already
+ * been started during this collection, the same handle MAY be returned,
+ * but is not required to be - it is unspecified if data merging is done
+ * based on name. These routines also take an instance variable. Like
+ * the lexical instance, these must be 0 initialized. Unlike the lexical
+ * instance, this is used to track a single dynamic instance.
+ *
+ * API used by the Intel(R) Parallel Advisor to describe potential concurrency
+ * and related activities. User-added source annotations expand to calls
+ * to these procedures to enable modeling of a hypothetical concurrent
+ * execution serially.
+ * @{
+ */
+#if !defined(_ADVISOR_ANNOTATE_H_) || defined(ANNOTATE_EXPAND_NULL)
+
+typedef void* __itt_model_site; /*!< @brief handle for lexical site */
+typedef void* __itt_model_site_instance; /*!< @brief handle for dynamic instance */
+typedef void* __itt_model_task; /*!< @brief handle for lexical site */
+typedef void* __itt_model_task_instance; /*!< @brief handle for dynamic instance */
+
+/**
+ * @enum __itt_model_disable
+ * @brief Enumerator for the disable methods
+ */
+typedef enum {
+ __itt_model_disable_observation,
+ __itt_model_disable_collection
+} __itt_model_disable;
+
+#endif /* !_ADVISOR_ANNOTATE_H_ || ANNOTATE_EXPAND_NULL */
+
+/**
+ * @brief ANNOTATE_SITE_BEGIN/ANNOTATE_SITE_END support.
+ *
+ * site_begin/end model a potential concurrency site.
+ * site instances may be recursively nested with themselves.
+ * site_end exits the most recently started but unended site for the current
+ * thread. The handle passed to end may be used to validate structure.
+ * Instances of a site encountered on different threads concurrently
+ * are considered completely distinct. If the site name for two different
+ * lexical sites match, it is unspecified whether they are treated as the
+ * same or different for data presentation.
+ */
+void ITTAPI __itt_model_site_begin(__itt_model_site *site, __itt_model_site_instance *instance, const char *name);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_model_site_beginW(const wchar_t *name);
+#endif
+void ITTAPI __itt_model_site_beginA(const char *name);
+void ITTAPI __itt_model_site_beginAL(const char *name, size_t siteNameLen);
+void ITTAPI __itt_model_site_end (__itt_model_site *site, __itt_model_site_instance *instance);
+void ITTAPI __itt_model_site_end_2(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_site_begin, (__itt_model_site *site, __itt_model_site_instance *instance, const char *name))
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, model_site_beginW, (const wchar_t *name))
+#endif
+ITT_STUBV(ITTAPI, void, model_site_beginA, (const char *name))
+ITT_STUBV(ITTAPI, void, model_site_beginAL, (const char *name, size_t siteNameLen))
+ITT_STUBV(ITTAPI, void, model_site_end, (__itt_model_site *site, __itt_model_site_instance *instance))
+ITT_STUBV(ITTAPI, void, model_site_end_2, (void))
+#define __itt_model_site_begin ITTNOTIFY_VOID(model_site_begin)
+#define __itt_model_site_begin_ptr ITTNOTIFY_NAME(model_site_begin)
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW ITTNOTIFY_VOID(model_site_beginW)
+#define __itt_model_site_beginW_ptr ITTNOTIFY_NAME(model_site_beginW)
+#endif
+#define __itt_model_site_beginA ITTNOTIFY_VOID(model_site_beginA)
+#define __itt_model_site_beginA_ptr ITTNOTIFY_NAME(model_site_beginA)
+#define __itt_model_site_beginAL ITTNOTIFY_VOID(model_site_beginAL)
+#define __itt_model_site_beginAL_ptr ITTNOTIFY_NAME(model_site_beginAL)
+#define __itt_model_site_end ITTNOTIFY_VOID(model_site_end)
+#define __itt_model_site_end_ptr ITTNOTIFY_NAME(model_site_end)
+#define __itt_model_site_end_2 ITTNOTIFY_VOID(model_site_end_2)
+#define __itt_model_site_end_2_ptr ITTNOTIFY_NAME(model_site_end_2)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_site_begin(site, instance, name)
+#define __itt_model_site_begin_ptr 0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW(name)
+#define __itt_model_site_beginW_ptr 0
+#endif
+#define __itt_model_site_beginA(name)
+#define __itt_model_site_beginA_ptr 0
+#define __itt_model_site_beginAL(name, siteNameLen)
+#define __itt_model_site_beginAL_ptr 0
+#define __itt_model_site_end(site, instance)
+#define __itt_model_site_end_ptr 0
+#define __itt_model_site_end_2()
+#define __itt_model_site_end_2_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_site_begin_ptr 0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW_ptr 0
+#endif
+#define __itt_model_site_beginA_ptr 0
+#define __itt_model_site_beginAL_ptr 0
+#define __itt_model_site_end_ptr 0
+#define __itt_model_site_end_2_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_TASK_BEGIN/ANNOTATE_TASK_END support
+ *
+ * task_begin/end model a potential task, which is contained within the most
+ * closely enclosing dynamic site. task_end exits the most recently started
+ * but unended task. The handle passed to end may be used to validate
+ * structure. It is unspecified if bad dynamic nesting is detected. If it
+ * is, it should be encoded in the resulting data collection. The collector
+ * should not fail due to construct nesting issues, nor attempt to directly
+ * indicate the problem.
+ */
+void ITTAPI __itt_model_task_begin(__itt_model_task *task, __itt_model_task_instance *instance, const char *name);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_model_task_beginW(const wchar_t *name);
+void ITTAPI __itt_model_iteration_taskW(const wchar_t *name);
+#endif
+void ITTAPI __itt_model_task_beginA(const char *name);
+void ITTAPI __itt_model_task_beginAL(const char *name, size_t taskNameLen);
+void ITTAPI __itt_model_iteration_taskA(const char *name);
+void ITTAPI __itt_model_iteration_taskAL(const char *name, size_t taskNameLen);
+void ITTAPI __itt_model_task_end (__itt_model_task *task, __itt_model_task_instance *instance);
+void ITTAPI __itt_model_task_end_2(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_task_begin, (__itt_model_task *task, __itt_model_task_instance *instance, const char *name))
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, model_task_beginW, (const wchar_t *name))
+ITT_STUBV(ITTAPI, void, model_iteration_taskW, (const wchar_t *name))
+#endif
+ITT_STUBV(ITTAPI, void, model_task_beginA, (const char *name))
+ITT_STUBV(ITTAPI, void, model_task_beginAL, (const char *name, size_t taskNameLen))
+ITT_STUBV(ITTAPI, void, model_iteration_taskA, (const char *name))
+ITT_STUBV(ITTAPI, void, model_iteration_taskAL, (const char *name, size_t taskNameLen))
+ITT_STUBV(ITTAPI, void, model_task_end, (__itt_model_task *task, __itt_model_task_instance *instance))
+ITT_STUBV(ITTAPI, void, model_task_end_2, (void))
+#define __itt_model_task_begin ITTNOTIFY_VOID(model_task_begin)
+#define __itt_model_task_begin_ptr ITTNOTIFY_NAME(model_task_begin)
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW ITTNOTIFY_VOID(model_task_beginW)
+#define __itt_model_task_beginW_ptr ITTNOTIFY_NAME(model_task_beginW)
+#define __itt_model_iteration_taskW ITTNOTIFY_VOID(model_iteration_taskW)
+#define __itt_model_iteration_taskW_ptr ITTNOTIFY_NAME(model_iteration_taskW)
+#endif
+#define __itt_model_task_beginA ITTNOTIFY_VOID(model_task_beginA)
+#define __itt_model_task_beginA_ptr ITTNOTIFY_NAME(model_task_beginA)
+#define __itt_model_task_beginAL ITTNOTIFY_VOID(model_task_beginAL)
+#define __itt_model_task_beginAL_ptr ITTNOTIFY_NAME(model_task_beginAL)
+#define __itt_model_iteration_taskA ITTNOTIFY_VOID(model_iteration_taskA)
+#define __itt_model_iteration_taskA_ptr ITTNOTIFY_NAME(model_iteration_taskA)
+#define __itt_model_iteration_taskAL ITTNOTIFY_VOID(model_iteration_taskAL)
+#define __itt_model_iteration_taskAL_ptr ITTNOTIFY_NAME(model_iteration_taskAL)
+#define __itt_model_task_end ITTNOTIFY_VOID(model_task_end)
+#define __itt_model_task_end_ptr ITTNOTIFY_NAME(model_task_end)
+#define __itt_model_task_end_2 ITTNOTIFY_VOID(model_task_end_2)
+#define __itt_model_task_end_2_ptr ITTNOTIFY_NAME(model_task_end_2)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_task_begin(task, instance, name)
+#define __itt_model_task_begin_ptr 0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW(name)
+#define __itt_model_task_beginW_ptr 0
+#endif
+#define __itt_model_task_beginA(name)
+#define __itt_model_task_beginA_ptr 0
+#define __itt_model_task_beginAL(name, siteNameLen)
+#define __itt_model_task_beginAL_ptr 0
+#define __itt_model_iteration_taskA(name)
+#define __itt_model_iteration_taskA_ptr 0
+#define __itt_model_iteration_taskAL(name, siteNameLen)
+#define __itt_model_iteration_taskAL_ptr 0
+#define __itt_model_task_end(task, instance)
+#define __itt_model_task_end_ptr 0
+#define __itt_model_task_end_2()
+#define __itt_model_task_end_2_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_task_begin_ptr 0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW_ptr 0
+#endif
+#define __itt_model_task_beginA_ptr 0
+#define __itt_model_task_beginAL_ptr 0
+#define __itt_model_iteration_taskA_ptr 0
+#define __itt_model_iteration_taskAL_ptr 0
+#define __itt_model_task_end_ptr 0
+#define __itt_model_task_end_2_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_LOCK_ACQUIRE/ANNOTATE_LOCK_RELEASE support
+ *
+ * lock_acquire/release model a potential lock for both lockset and
+ * performance modeling. Each unique address is modeled as a separate
+ * lock, with invalid addresses being valid lock IDs. Specifically:
+ * no storage is accessed by the API at the specified address - it is only
+ * used for lock identification. Lock acquires may be self-nested and are
+ * unlocked by a corresponding number of releases.
+ * (These closely correspond to __itt_sync_acquired/__itt_sync_releasing,
+ * but may not have identical semantics.)
+ */
+void ITTAPI __itt_model_lock_acquire(void *lock);
+void ITTAPI __itt_model_lock_acquire_2(void *lock);
+void ITTAPI __itt_model_lock_release(void *lock);
+void ITTAPI __itt_model_lock_release_2(void *lock);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock))
+ITT_STUBV(ITTAPI, void, model_lock_acquire_2, (void *lock))
+ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock))
+ITT_STUBV(ITTAPI, void, model_lock_release_2, (void *lock))
+#define __itt_model_lock_acquire ITTNOTIFY_VOID(model_lock_acquire)
+#define __itt_model_lock_acquire_ptr ITTNOTIFY_NAME(model_lock_acquire)
+#define __itt_model_lock_acquire_2 ITTNOTIFY_VOID(model_lock_acquire_2)
+#define __itt_model_lock_acquire_2_ptr ITTNOTIFY_NAME(model_lock_acquire_2)
+#define __itt_model_lock_release ITTNOTIFY_VOID(model_lock_release)
+#define __itt_model_lock_release_ptr ITTNOTIFY_NAME(model_lock_release)
+#define __itt_model_lock_release_2 ITTNOTIFY_VOID(model_lock_release_2)
+#define __itt_model_lock_release_2_ptr ITTNOTIFY_NAME(model_lock_release_2)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_lock_acquire(lock)
+#define __itt_model_lock_acquire_ptr 0
+#define __itt_model_lock_acquire_2(lock)
+#define __itt_model_lock_acquire_2_ptr 0
+#define __itt_model_lock_release(lock)
+#define __itt_model_lock_release_ptr 0
+#define __itt_model_lock_release_2(lock)
+#define __itt_model_lock_release_2_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_lock_acquire_ptr 0
+#define __itt_model_lock_acquire_2_ptr 0
+#define __itt_model_lock_release_ptr 0
+#define __itt_model_lock_release_2_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_RECORD_ALLOCATION/ANNOTATE_RECORD_DEALLOCATION support
+ *
+ * record_allocation/deallocation describe user-defined memory allocator
+ * behavior, which may be required for correctness modeling to understand
+ * when storage is not expected to be actually reused across threads.
+ */
+void ITTAPI __itt_model_record_allocation (void *addr, size_t size);
+void ITTAPI __itt_model_record_deallocation(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_record_allocation, (void *addr, size_t size))
+ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr))
+#define __itt_model_record_allocation ITTNOTIFY_VOID(model_record_allocation)
+#define __itt_model_record_allocation_ptr ITTNOTIFY_NAME(model_record_allocation)
+#define __itt_model_record_deallocation ITTNOTIFY_VOID(model_record_deallocation)
+#define __itt_model_record_deallocation_ptr ITTNOTIFY_NAME(model_record_deallocation)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_record_allocation(addr, size)
+#define __itt_model_record_allocation_ptr 0
+#define __itt_model_record_deallocation(addr)
+#define __itt_model_record_deallocation_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_record_allocation_ptr 0
+#define __itt_model_record_deallocation_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_INDUCTION_USES support
+ *
+ * Note particular storage is inductive through the end of the current site
+ */
+void ITTAPI __itt_model_induction_uses(void* addr, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_induction_uses, (void *addr, size_t size))
+#define __itt_model_induction_uses ITTNOTIFY_VOID(model_induction_uses)
+#define __itt_model_induction_uses_ptr ITTNOTIFY_NAME(model_induction_uses)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_induction_uses(addr, size)
+#define __itt_model_induction_uses_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_induction_uses_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_REDUCTION_USES support
+ *
+ * Note particular storage is used for reduction through the end
+ * of the current site
+ */
+void ITTAPI __itt_model_reduction_uses(void* addr, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_reduction_uses, (void *addr, size_t size))
+#define __itt_model_reduction_uses ITTNOTIFY_VOID(model_reduction_uses)
+#define __itt_model_reduction_uses_ptr ITTNOTIFY_NAME(model_reduction_uses)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_reduction_uses(addr, size)
+#define __itt_model_reduction_uses_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_reduction_uses_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_OBSERVE_USES support
+ *
+ * Have correctness modeling record observations about uses of storage
+ * through the end of the current site
+ */
+void ITTAPI __itt_model_observe_uses(void* addr, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_observe_uses, (void *addr, size_t size))
+#define __itt_model_observe_uses ITTNOTIFY_VOID(model_observe_uses)
+#define __itt_model_observe_uses_ptr ITTNOTIFY_NAME(model_observe_uses)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_observe_uses(addr, size)
+#define __itt_model_observe_uses_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_observe_uses_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_CLEAR_USES support
+ *
+ * Clear the special handling of a piece of storage related to induction,
+ * reduction or observe_uses
+ */
+void ITTAPI __itt_model_clear_uses(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_clear_uses, (void *addr))
+#define __itt_model_clear_uses ITTNOTIFY_VOID(model_clear_uses)
+#define __itt_model_clear_uses_ptr ITTNOTIFY_NAME(model_clear_uses)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_clear_uses(addr)
+#define __itt_model_clear_uses_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_clear_uses_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief ANNOTATE_DISABLE_*_PUSH/ANNOTATE_DISABLE_*_POP support
+ *
+ * disable_push/disable_pop push and pop disabling based on a parameter.
+ * Disabling observations stops processing of memory references during
+ * correctness modeling, and all annotations that occur in the disabled
+ * region. This allows description of code that is expected to be handled
+ * specially during conversion to parallelism or that is not recognized
+ * by tools (e.g. some kinds of synchronization operations.)
+ * This mechanism causes all annotations in the disabled region, other
+ * than disable_push and disable_pop, to be ignored. (For example, this
+ * might validly be used to disable an entire parallel site and the contained
+ * tasks and locking in it for data collection purposes.)
+ * The disable for collection is a more expensive operation, but reduces
+ * collector overhead significantly. This applies to BOTH correctness data
+ * collection and performance data collection. For example, a site
+ * containing a task might only enable data collection for the first 10
+ * iterations. Both performance and correctness data should reflect this,
+ * and the program should run as close to full speed as possible when
+ * collection is disabled.
+ */
+void ITTAPI __itt_model_disable_push(__itt_model_disable x);
+void ITTAPI __itt_model_disable_pop(void);
+void ITTAPI __itt_model_aggregate_task(size_t x);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x))
+ITT_STUBV(ITTAPI, void, model_disable_pop, (void))
+ITT_STUBV(ITTAPI, void, model_aggregate_task, (size_t x))
+#define __itt_model_disable_push ITTNOTIFY_VOID(model_disable_push)
+#define __itt_model_disable_push_ptr ITTNOTIFY_NAME(model_disable_push)
+#define __itt_model_disable_pop ITTNOTIFY_VOID(model_disable_pop)
+#define __itt_model_disable_pop_ptr ITTNOTIFY_NAME(model_disable_pop)
+#define __itt_model_aggregate_task ITTNOTIFY_VOID(model_aggregate_task)
+#define __itt_model_aggregate_task_ptr ITTNOTIFY_NAME(model_aggregate_task)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_model_disable_push(x)
+#define __itt_model_disable_push_ptr 0
+#define __itt_model_disable_pop()
+#define __itt_model_disable_pop_ptr 0
+#define __itt_model_aggregate_task(x)
+#define __itt_model_aggregate_task_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_model_disable_push_ptr 0
+#define __itt_model_disable_pop_ptr 0
+#define __itt_model_aggregate_task_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} model group */
+
+/**
+ * @defgroup heap Heap
+ * @ingroup public
+ * Heap group
+ * @{
+ */
+
+typedef void* __itt_heap_function;
+
+/**
+ * @brief Create an identification for heap function
+ * @return non-zero identifier or NULL
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_heap_function ITTAPI __itt_heap_function_createA(const char* name, const char* domain);
+__itt_heap_function ITTAPI __itt_heap_function_createW(const wchar_t* name, const wchar_t* domain);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_heap_function_create __itt_heap_function_createW
+# define __itt_heap_function_create_ptr __itt_heap_function_createW_ptr
+#else
+# define __itt_heap_function_create __itt_heap_function_createA
+# define __itt_heap_function_create_ptr __itt_heap_function_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_heap_function ITTAPI __itt_heap_function_create(const char* name, const char* domain);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char* name, const char* domain))
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t* name, const wchar_t* domain))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create, (const char* name, const char* domain))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_heap_function_createA ITTNOTIFY_DATA(heap_function_createA)
+#define __itt_heap_function_createA_ptr ITTNOTIFY_NAME(heap_function_createA)
+#define __itt_heap_function_createW ITTNOTIFY_DATA(heap_function_createW)
+#define __itt_heap_function_createW_ptr ITTNOTIFY_NAME(heap_function_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_heap_function_create ITTNOTIFY_DATA(heap_function_create)
+#define __itt_heap_function_create_ptr ITTNOTIFY_NAME(heap_function_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_heap_function_createA(name, domain) (__itt_heap_function)0
+#define __itt_heap_function_createA_ptr 0
+#define __itt_heap_function_createW(name, domain) (__itt_heap_function)0
+#define __itt_heap_function_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_heap_function_create(name, domain) (__itt_heap_function)0
+#define __itt_heap_function_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_heap_function_createA_ptr 0
+#define __itt_heap_function_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_heap_function_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an allocation begin occurrence.
+ */
+void ITTAPI __itt_heap_allocate_begin(__itt_heap_function h, size_t size, int initialized);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized))
+#define __itt_heap_allocate_begin ITTNOTIFY_VOID(heap_allocate_begin)
+#define __itt_heap_allocate_begin_ptr ITTNOTIFY_NAME(heap_allocate_begin)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_allocate_begin(h, size, initialized)
+#define __itt_heap_allocate_begin_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_allocate_begin_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an allocation end occurrence.
+ */
+void ITTAPI __itt_heap_allocate_end(__itt_heap_function h, void** addr, size_t size, int initialized);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized))
+#define __itt_heap_allocate_end ITTNOTIFY_VOID(heap_allocate_end)
+#define __itt_heap_allocate_end_ptr ITTNOTIFY_NAME(heap_allocate_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_allocate_end(h, addr, size, initialized)
+#define __itt_heap_allocate_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_allocate_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an free begin occurrence.
+ */
+void ITTAPI __itt_heap_free_begin(__itt_heap_function h, void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr))
+#define __itt_heap_free_begin ITTNOTIFY_VOID(heap_free_begin)
+#define __itt_heap_free_begin_ptr ITTNOTIFY_NAME(heap_free_begin)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_free_begin(h, addr)
+#define __itt_heap_free_begin_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_free_begin_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an free end occurrence.
+ */
+void ITTAPI __itt_heap_free_end(__itt_heap_function h, void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr))
+#define __itt_heap_free_end ITTNOTIFY_VOID(heap_free_end)
+#define __itt_heap_free_end_ptr ITTNOTIFY_NAME(heap_free_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_free_end(h, addr)
+#define __itt_heap_free_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_free_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an reallocation begin occurrence.
+ */
+void ITTAPI __itt_heap_reallocate_begin(__itt_heap_function h, void* addr, size_t new_size, int initialized);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized))
+#define __itt_heap_reallocate_begin ITTNOTIFY_VOID(heap_reallocate_begin)
+#define __itt_heap_reallocate_begin_ptr ITTNOTIFY_NAME(heap_reallocate_begin)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_reallocate_begin(h, addr, new_size, initialized)
+#define __itt_heap_reallocate_begin_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_reallocate_begin_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an reallocation end occurrence.
+ */
+void ITTAPI __itt_heap_reallocate_end(__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized))
+#define __itt_heap_reallocate_end ITTNOTIFY_VOID(heap_reallocate_end)
+#define __itt_heap_reallocate_end_ptr ITTNOTIFY_NAME(heap_reallocate_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_reallocate_end(h, addr, new_addr, new_size, initialized)
+#define __itt_heap_reallocate_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_reallocate_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief internal access begin */
+void ITTAPI __itt_heap_internal_access_begin(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void))
+#define __itt_heap_internal_access_begin ITTNOTIFY_VOID(heap_internal_access_begin)
+#define __itt_heap_internal_access_begin_ptr ITTNOTIFY_NAME(heap_internal_access_begin)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_internal_access_begin()
+#define __itt_heap_internal_access_begin_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_internal_access_begin_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief internal access end */
+void ITTAPI __itt_heap_internal_access_end(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void))
+#define __itt_heap_internal_access_end ITTNOTIFY_VOID(heap_internal_access_end)
+#define __itt_heap_internal_access_end_ptr ITTNOTIFY_NAME(heap_internal_access_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_internal_access_end()
+#define __itt_heap_internal_access_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_internal_access_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief record memory growth begin */
+void ITTAPI __itt_heap_record_memory_growth_begin(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin, (void))
+#define __itt_heap_record_memory_growth_begin ITTNOTIFY_VOID(heap_record_memory_growth_begin)
+#define __itt_heap_record_memory_growth_begin_ptr ITTNOTIFY_NAME(heap_record_memory_growth_begin)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_record_memory_growth_begin()
+#define __itt_heap_record_memory_growth_begin_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_record_memory_growth_begin_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief record memory growth end */
+void ITTAPI __itt_heap_record_memory_growth_end(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void))
+#define __itt_heap_record_memory_growth_end ITTNOTIFY_VOID(heap_record_memory_growth_end)
+#define __itt_heap_record_memory_growth_end_ptr ITTNOTIFY_NAME(heap_record_memory_growth_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_record_memory_growth_end()
+#define __itt_heap_record_memory_growth_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_record_memory_growth_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Specify the type of heap detection/reporting to modify.
+ */
+/**
+ * @hideinitializer
+ * @brief Report on memory leaks.
+ */
+#define __itt_heap_leaks 0x00000001
+
+/**
+ * @hideinitializer
+ * @brief Report on memory growth.
+ */
+#define __itt_heap_growth 0x00000002
+
+
+/** @brief heap reset detection */
+void ITTAPI __itt_heap_reset_detection(unsigned int reset_mask);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_reset_detection, (unsigned int reset_mask))
+#define __itt_heap_reset_detection ITTNOTIFY_VOID(heap_reset_detection)
+#define __itt_heap_reset_detection_ptr ITTNOTIFY_NAME(heap_reset_detection)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_reset_detection()
+#define __itt_heap_reset_detection_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_reset_detection_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief report */
+void ITTAPI __itt_heap_record(unsigned int record_mask);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, heap_record, (unsigned int record_mask))
+#define __itt_heap_record ITTNOTIFY_VOID(heap_record)
+#define __itt_heap_record_ptr ITTNOTIFY_NAME(heap_record)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_heap_record()
+#define __itt_heap_record_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_heap_record_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @} heap group */
+/** @endcond */
+/* ========================================================================== */
+
+/**
+ * @defgroup domains Domains
+ * @ingroup public
+ * Domains group
+ * @{
+ */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_domain
+{
+ volatile int flags; /*!< Zero if disabled, non-zero if enabled. The meaning of different non-zero values is reserved to the runtime */
+ const char* nameA; /*!< Copy of original name in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+ const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+#else /* UNICODE || _UNICODE */
+ void* nameW;
+#endif /* UNICODE || _UNICODE */
+ int extra1; /*!< Reserved to the runtime */
+ void* extra2; /*!< Reserved to the runtime */
+ struct ___itt_domain* next;
+} __itt_domain;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @ingroup domains
+ * @brief Create a domain.
+ * Create domain using some domain name: the URI naming style is recommended.
+ * Because the set of domains is expected to be static over the application's
+ * execution time, there is no mechanism to destroy a domain.
+ * Any domain can be accessed by any thread in the process, regardless of
+ * which thread created the domain. This call is thread-safe.
+ * @param[in] name name of domain
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_domain* ITTAPI __itt_domain_createA(const char *name);
+__itt_domain* ITTAPI __itt_domain_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_domain_create __itt_domain_createW
+# define __itt_domain_create_ptr __itt_domain_createW_ptr
+#else /* UNICODE */
+# define __itt_domain_create __itt_domain_createA
+# define __itt_domain_create_ptr __itt_domain_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_domain* ITTAPI __itt_domain_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char *name))
+ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_domain*, domain_create, (const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA ITTNOTIFY_DATA(domain_createA)
+#define __itt_domain_createA_ptr ITTNOTIFY_NAME(domain_createA)
+#define __itt_domain_createW ITTNOTIFY_DATA(domain_createW)
+#define __itt_domain_createW_ptr ITTNOTIFY_NAME(domain_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create ITTNOTIFY_DATA(domain_create)
+#define __itt_domain_create_ptr ITTNOTIFY_NAME(domain_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA(name) (__itt_domain*)0
+#define __itt_domain_createA_ptr 0
+#define __itt_domain_createW(name) (__itt_domain*)0
+#define __itt_domain_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create(name) (__itt_domain*)0
+#define __itt_domain_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA_ptr 0
+#define __itt_domain_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} domains group */
+
+/**
+ * @defgroup ids IDs
+ * @ingroup public
+ * IDs group
+ * @{
+ */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_id
+{
+ unsigned long long d1, d2, d3;
+} __itt_id;
+
+#pragma pack(pop)
+/** @endcond */
+
+static const __itt_id __itt_null = { 0, 0, 0 };
+
+/**
+ * @ingroup ids
+ * @brief A convenience function is provided to create an ID without domain control.
+ * @brief This is a convenience function to initialize an __itt_id structure.
+ * After you make the ID with this function, you still must create it with the
+ * __itt_id_create function before using the ID to identify a named entity.
+ * @param[in] addr The address of object; high QWORD of the ID value.
+ * @param[in] extra The extra data to unique identify object; low QWORD of the ID value.
+ */
+
+ITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra) ITT_INLINE_ATTRIBUTE;
+ITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra)
+{
+ __itt_id id = __itt_null;
+ id.d1 = (unsigned long long)((uintptr_t)addr);
+ id.d2 = (unsigned long long)extra;
+ id.d3 = (unsigned long long)0; /* Reserved. Must be zero */
+ return id;
+}
+
+/**
+ * @ingroup ids
+ * @brief Create an instance of identifier.
+ * This establishes the beginning of the lifetime of an instance of
+ * the given ID in the trace. Once this lifetime starts, the ID
+ * can be used to tag named entity instances in calls such as
+ * __itt_task_begin, and to specify relationships among
+ * identified named entity instances, using the \ref relations APIs.
+ * Instance IDs are not domain specific!
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] id The ID to create.
+ */
+void ITTAPI __itt_id_create(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id))
+#define __itt_id_create(d,x) ITTNOTIFY_VOID_D1(id_create,d,x)
+#define __itt_id_create_ptr ITTNOTIFY_NAME(id_create)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_create(domain,id)
+#define __itt_id_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_id_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup ids
+ * @brief Destroy an instance of identifier.
+ * This ends the lifetime of the current instance of the given ID value in the trace.
+ * Any relationships that are established after this lifetime ends are invalid.
+ * This call must be performed before the given ID value can be reused for a different
+ * named entity instance.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] id The ID to destroy.
+ */
+void ITTAPI __itt_id_destroy(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id))
+#define __itt_id_destroy(d,x) ITTNOTIFY_VOID_D1(id_destroy,d,x)
+#define __itt_id_destroy_ptr ITTNOTIFY_NAME(id_destroy)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_destroy(domain,id)
+#define __itt_id_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_id_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} ids group */
+
+/**
+ * @defgroup handless String Handles
+ * @ingroup public
+ * String Handles group
+ * @{
+ */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_string_handle
+{
+ const char* strA; /*!< Copy of original string in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+ const wchar_t* strW; /*!< Copy of original string in UNICODE. */
+#else /* UNICODE || _UNICODE */
+ void* strW;
+#endif /* UNICODE || _UNICODE */
+ int extra1; /*!< Reserved. Must be zero */
+ void* extra2; /*!< Reserved. Must be zero */
+ struct ___itt_string_handle* next;
+} __itt_string_handle;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @ingroup handles
+ * @brief Create a string handle.
+ * Create and return handle value that can be associated with a string.
+ * Consecutive calls to __itt_string_handle_create with the same name
+ * return the same value. Because the set of string handles is expected to remain
+ * static during the application's execution time, there is no mechanism to destroy a string handle.
+ * Any string handle can be accessed by any thread in the process, regardless of which thread created
+ * the string handle. This call is thread-safe.
+ * @param[in] name The input string
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_string_handle* ITTAPI __itt_string_handle_createA(const char *name);
+__itt_string_handle* ITTAPI __itt_string_handle_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_string_handle_create __itt_string_handle_createW
+# define __itt_string_handle_create_ptr __itt_string_handle_createW_ptr
+#else /* UNICODE */
+# define __itt_string_handle_create __itt_string_handle_createA
+# define __itt_string_handle_create_ptr __itt_string_handle_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_string_handle* ITTAPI __itt_string_handle_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char *name))
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create, (const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA ITTNOTIFY_DATA(string_handle_createA)
+#define __itt_string_handle_createA_ptr ITTNOTIFY_NAME(string_handle_createA)
+#define __itt_string_handle_createW ITTNOTIFY_DATA(string_handle_createW)
+#define __itt_string_handle_createW_ptr ITTNOTIFY_NAME(string_handle_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create ITTNOTIFY_DATA(string_handle_create)
+#define __itt_string_handle_create_ptr ITTNOTIFY_NAME(string_handle_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA(name) (__itt_string_handle*)0
+#define __itt_string_handle_createA_ptr 0
+#define __itt_string_handle_createW(name) (__itt_string_handle*)0
+#define __itt_string_handle_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create(name) (__itt_string_handle*)0
+#define __itt_string_handle_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA_ptr 0
+#define __itt_string_handle_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} handles group */
+
+/** @cond exclude_from_documentation */
+typedef unsigned long long __itt_timestamp;
+/** @endcond */
+
+static const __itt_timestamp __itt_timestamp_none = (__itt_timestamp)-1LL;
+
+/** @cond exclude_from_gpa_documentation */
+
+/**
+ * @ingroup timestamps
+ * @brief Return timestamp corresponding to the current moment.
+ * This returns the timestamp in the format that is the most relevant for the current
+ * host or platform (RDTSC, QPC, and others). You can use the "<" operator to
+ * compare __itt_timestamp values.
+ */
+__itt_timestamp ITTAPI __itt_get_timestamp(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void))
+#define __itt_get_timestamp ITTNOTIFY_DATA(get_timestamp)
+#define __itt_get_timestamp_ptr ITTNOTIFY_NAME(get_timestamp)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_get_timestamp()
+#define __itt_get_timestamp_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_get_timestamp_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} timestamps */
+/** @endcond */
+
+/** @cond exclude_from_gpa_documentation */
+
+/**
+ * @defgroup regions Regions
+ * @ingroup public
+ * Regions group
+ * @{
+ */
+/**
+ * @ingroup regions
+ * @brief Begin of region instance.
+ * Successive calls to __itt_region_begin with the same ID are ignored
+ * until a call to __itt_region_end with the same ID
+ * @param[in] domain The domain for this region instance
+ * @param[in] id The instance ID for this region instance. Must not be __itt_null
+ * @param[in] parentid The instance ID for the parent of this region instance, or __itt_null
+ * @param[in] name The name of this region
+ */
+void ITTAPI __itt_region_begin(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);
+
+/**
+ * @ingroup regions
+ * @brief End of region instance.
+ * The first call to __itt_region_end with a given ID ends the
+ * region. Successive calls with the same ID are ignored, as are
+ * calls that do not have a matching __itt_region_begin call.
+ * @param[in] domain The domain for this region instance
+ * @param[in] id The instance ID for this region instance
+ */
+void ITTAPI __itt_region_end(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, region_end, (const __itt_domain *domain, __itt_id id))
+#define __itt_region_begin(d,x,y,z) ITTNOTIFY_VOID_D3(region_begin,d,x,y,z)
+#define __itt_region_begin_ptr ITTNOTIFY_NAME(region_begin)
+#define __itt_region_end(d,x) ITTNOTIFY_VOID_D1(region_end,d,x)
+#define __itt_region_end_ptr ITTNOTIFY_NAME(region_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_region_begin(d,x,y,z)
+#define __itt_region_begin_ptr 0
+#define __itt_region_end(d,x)
+#define __itt_region_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_region_begin_ptr 0
+#define __itt_region_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} regions group */
+
+/**
+ * @defgroup frames Frames
+ * @ingroup public
+ * Frames are similar to regions, but are intended to be easier to use and to implement.
+ * In particular:
+ * - Frames always represent periods of elapsed time
+ * - By default, frames have no nesting relationships
+ * @{
+ */
+
+/**
+ * @ingroup frames
+ * @brief Begin a frame instance.
+ * Successive calls to __itt_frame_begin with the
+ * same ID are ignored until a call to __itt_frame_end with the same ID.
+ * @param[in] domain The domain for this frame instance
+ * @param[in] id The instance ID for this frame instance or NULL
+ */
+void ITTAPI __itt_frame_begin_v3(const __itt_domain *domain, __itt_id *id);
+
+/**
+ * @ingroup frames
+ * @brief End a frame instance.
+ * The first call to __itt_frame_end with a given ID
+ * ends the frame. Successive calls with the same ID are ignored, as are
+ * calls that do not have a matching __itt_frame_begin call.
+ * @param[in] domain The domain for this frame instance
+ * @param[in] id The instance ID for this frame instance or NULL for current
+ */
+void ITTAPI __itt_frame_end_v3(const __itt_domain *domain, __itt_id *id);
+
+/**
+ * @ingroup frames
+ * @brief Submits a frame instance.
+ * Successive calls to __itt_frame_begin or __itt_frame_submit with the
+ * same ID are ignored until a call to __itt_frame_end or __itt_frame_submit
+ * with the same ID.
+ * Passing special __itt_timestamp_none value as "end" argument means
+ * take the current timestamp as the end timestamp.
+ * @param[in] domain The domain for this frame instance
+ * @param[in] id The instance ID for this frame instance or NULL
+ * @param[in] begin Timestamp of the beginning of the frame
+ * @param[in] end Timestamp of the end of the frame
+ */
+void ITTAPI __itt_frame_submit_v3(const __itt_domain *domain, __itt_id *id,
+ __itt_timestamp begin, __itt_timestamp end);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id))
+ITT_STUBV(ITTAPI, void, frame_end_v3, (const __itt_domain *domain, __itt_id *id))
+ITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end))
+#define __itt_frame_begin_v3(d,x) ITTNOTIFY_VOID_D1(frame_begin_v3,d,x)
+#define __itt_frame_begin_v3_ptr ITTNOTIFY_NAME(frame_begin_v3)
+#define __itt_frame_end_v3(d,x) ITTNOTIFY_VOID_D1(frame_end_v3,d,x)
+#define __itt_frame_end_v3_ptr ITTNOTIFY_NAME(frame_end_v3)
+#define __itt_frame_submit_v3(d,x,b,e) ITTNOTIFY_VOID_D3(frame_submit_v3,d,x,b,e)
+#define __itt_frame_submit_v3_ptr ITTNOTIFY_NAME(frame_submit_v3)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_frame_begin_v3(domain,id)
+#define __itt_frame_begin_v3_ptr 0
+#define __itt_frame_end_v3(domain,id)
+#define __itt_frame_end_v3_ptr 0
+#define __itt_frame_submit_v3(domain,id,begin,end)
+#define __itt_frame_submit_v3_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_frame_begin_v3_ptr 0
+#define __itt_frame_end_v3_ptr 0
+#define __itt_frame_submit_v3_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} frames group */
+/** @endcond */
+
+/**
+ * @defgroup taskgroup Task Group
+ * @ingroup public
+ * Task Group
+ * @{
+ */
+/**
+ * @ingroup task_groups
+ * @brief Denotes a task_group instance.
+ * Successive calls to __itt_task_group with the same ID are ignored.
+ * @param[in] domain The domain for this task_group instance
+ * @param[in] id The instance ID for this task_group instance. Must not be __itt_null.
+ * @param[in] parentid The instance ID for the parent of this task_group instance, or __itt_null.
+ * @param[in] name The name of this task_group
+ */
+void ITTAPI __itt_task_group(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+#define __itt_task_group(d,x,y,z) ITTNOTIFY_VOID_D3(task_group,d,x,y,z)
+#define __itt_task_group_ptr ITTNOTIFY_NAME(task_group)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_group(d,x,y,z)
+#define __itt_task_group_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_task_group_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} taskgroup group */
+
+/**
+ * @defgroup tasks Tasks
+ * @ingroup public
+ * A task instance represents a piece of work performed by a particular
+ * thread for a period of time. A call to __itt_task_begin creates a
+ * task instance. This becomes the current instance for that task on that
+ * thread. A following call to __itt_task_end on the same thread ends the
+ * instance. There may be multiple simultaneous instances of tasks with the
+ * same name on different threads. If an ID is specified, the task instance
+ * receives that ID. Nested tasks are allowed.
+ *
+ * Note: The task is defined by the bracketing of __itt_task_begin and
+ * __itt_task_end on the same thread. If some scheduling mechanism causes
+ * task switching (the thread executes a different user task) or task
+ * switching (the user task switches to a different thread) then this breaks
+ * the notion of current instance. Additional API calls are required to
+ * deal with that possibility.
+ * @{
+ */
+
+/**
+ * @ingroup tasks
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid The instance ID for this task instance, or __itt_null
+ * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null
+ * @param[in] name The name of this task
+ */
+void ITTAPI __itt_task_begin(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name);
+
+/**
+ * @ingroup tasks
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid The identifier for this task instance (may be 0)
+ * @param[in] parentid The parent of this task (may be 0)
+ * @param[in] fn The pointer to the function you are tracing
+ */
+void ITTAPI __itt_task_begin_fn(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, void* fn);
+
+/**
+ * @ingroup tasks
+ * @brief End the current task instance.
+ * @param[in] domain The domain for this task
+ */
+void ITTAPI __itt_task_end(const __itt_domain *domain);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parentid, void* fn))
+ITT_STUBV(ITTAPI, void, task_end, (const __itt_domain *domain))
+#define __itt_task_begin(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin,d,x,y,z)
+#define __itt_task_begin_ptr ITTNOTIFY_NAME(task_begin)
+#define __itt_task_begin_fn(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_fn,d,x,y,z)
+#define __itt_task_begin_fn_ptr ITTNOTIFY_NAME(task_begin_fn)
+#define __itt_task_end(d) ITTNOTIFY_VOID_D0(task_end,d)
+#define __itt_task_end_ptr ITTNOTIFY_NAME(task_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin(domain,id,parentid,name)
+#define __itt_task_begin_ptr 0
+#define __itt_task_begin_fn(domain,id,parentid,fn)
+#define __itt_task_begin_fn_ptr 0
+#define __itt_task_end(domain)
+#define __itt_task_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_ptr 0
+#define __itt_task_begin_fn_ptr 0
+#define __itt_task_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} tasks group */
+
+/**
+ * @defgroup counters Counters
+ * @ingroup public
+ * Counters are user-defined objects with a monotonically increasing
+ * value. Counter values are 64-bit unsigned integers. Counter values
+ * are tracked per-thread. Counters have names that can be displayed in
+ * the tools.
+ * @{
+ */
+
+/**
+ * @ingroup counters
+ * @brief Increment a counter by one.
+ * The first call with a given name creates a counter by that name and sets its
+ * value to zero on every thread. Successive calls increment the counter value
+ * on the thread on which the call is issued.
+ * @param[in] domain The domain controlling the call. Counter names are not domain specific.
+ * The domain argument is used only to enable or disable the API calls.
+ * @param[in] name The name of the counter
+ */
+void ITTAPI __itt_counter_inc_v3(const __itt_domain *domain, __itt_string_handle *name);
+
+/**
+ * @ingroup counters
+ * @brief Increment a counter by the value specified in delta.
+ * @param[in] domain The domain controlling the call. Counter names are not domain specific.
+ * The domain argument is used only to enable or disable the API calls.
+ * @param[in] name The name of the counter
+ * @param[in] delta The amount by which to increment the counter
+ */
+void ITTAPI __itt_counter_inc_delta_v3(const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc_v3, (const __itt_domain *domain, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta))
+#define __itt_counter_inc_v3(d,x) ITTNOTIFY_VOID_D1(counter_inc_v3,d,x)
+#define __itt_counter_inc_v3_ptr ITTNOTIFY_NAME(counter_inc_v3)
+#define __itt_counter_inc_delta_v3(d,x,y) ITTNOTIFY_VOID_D2(counter_inc_delta_v3,d,x,y)
+#define __itt_counter_inc_delta_v3_ptr ITTNOTIFY_NAME(counter_inc_delta_v3)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc_v3(domain,name)
+#define __itt_counter_inc_v3_ptr 0
+#define __itt_counter_inc_delta_v3(domain,name,delta)
+#define __itt_counter_inc_delta_v3_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_v3_ptr 0
+#define __itt_counter_inc_delta_v3_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} counters group */
+
+/**
+ * @defgroup markers Markers
+ * Markers represent a single discreet event in time. Markers have a scope,
+ * described by an enumerated type __itt_scope. Markers are created by
+ * the API call __itt_marker. A marker instance can be given an ID for use in
+ * adding metadata.
+ * @{
+ */
+
+/**
+ * @brief Describes the scope of an event object in the trace.
+ */
+typedef enum
+{
+ __itt_scope_unknown = 0,
+ __itt_scope_global,
+ __itt_scope_track_group,
+ __itt_scope_track,
+ __itt_scope_task,
+ __itt_scope_marker
+} __itt_scope;
+
+/** @cond exclude_from_documentation */
+#define __itt_marker_scope_unknown __itt_scope_unknown
+#define __itt_marker_scope_global __itt_scope_global
+#define __itt_marker_scope_process __itt_scope_track_group
+#define __itt_marker_scope_thread __itt_scope_track
+#define __itt_marker_scope_task __itt_scope_task
+/** @endcond */
+
+/**
+ * @ingroup markers
+ * @brief Create a marker instance
+ * @param[in] domain The domain for this marker
+ * @param[in] id The instance ID for this marker or __itt_null
+ * @param[in] name The name for this marker
+ * @param[in] scope The scope for this marker
+ */
+void ITTAPI __itt_marker(const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope))
+#define __itt_marker(d,x,y,z) ITTNOTIFY_VOID_D3(marker,d,x,y,z)
+#define __itt_marker_ptr ITTNOTIFY_NAME(marker)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_marker(domain,id,name,scope)
+#define __itt_marker_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_marker_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} markers group */
+
+/**
+ * @defgroup metadata Metadata
+ * The metadata API is used to attach extra information to named
+ * entities. Metadata can be attached to an identified named entity by ID,
+ * or to the current entity (which is always a task).
+ *
+ * Conceptually metadata has a type (what kind of metadata), a key (the
+ * name of the metadata), and a value (the actual data). The encoding of
+ * the value depends on the type of the metadata.
+ *
+ * The type of metadata is specified by an enumerated type __itt_metdata_type.
+ * @{
+ */
+
+/**
+ * @ingroup parameters
+ * @brief describes the type of metadata
+ */
+typedef enum {
+ __itt_metadata_unknown = 0,
+ __itt_metadata_u64, /**< Unsigned 64-bit integer */
+ __itt_metadata_s64, /**< Signed 64-bit integer */
+ __itt_metadata_u32, /**< Unsigned 32-bit integer */
+ __itt_metadata_s32, /**< Signed 32-bit integer */
+ __itt_metadata_u16, /**< Unsigned 16-bit integer */
+ __itt_metadata_s16, /**< Signed 16-bit integer */
+ __itt_metadata_float, /**< Signed 32-bit floating-point */
+ __itt_metadata_double /**< SIgned 64-bit floating-point */
+} __itt_metadata_type;
+
+/**
+ * @ingroup parameters
+ * @brief Add metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+ * @param[in] key The name of the metadata
+ * @param[in] type The type of the metadata
+ * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.
+ * @param[in] data The metadata itself
+*/
+void ITTAPI __itt_metadata_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))
+#define __itt_metadata_add(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add,d,x,y,z,a,b)
+#define __itt_metadata_add_ptr ITTNOTIFY_NAME(metadata_add)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_metadata_add(d,x,y,z,a,b)
+#define __itt_metadata_add_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_metadata_add_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add string metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+ * @param[in] key The name of the metadata
+ * @param[in] data The metadata itself
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
+*/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_metadata_str_addA(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);
+void ITTAPI __itt_metadata_str_addW(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_metadata_str_add __itt_metadata_str_addW
+# define __itt_metadata_str_add_ptr __itt_metadata_str_addW_ptr
+#else /* UNICODE */
+# define __itt_metadata_str_add __itt_metadata_str_addA
+# define __itt_metadata_str_add_ptr __itt_metadata_str_addA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_metadata_str_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);
+#endif
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))
+ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addA,d,x,y,z,a)
+#define __itt_metadata_str_addA_ptr ITTNOTIFY_NAME(metadata_str_addA)
+#define __itt_metadata_str_addW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addW,d,x,y,z,a)
+#define __itt_metadata_str_addW_ptr ITTNOTIFY_NAME(metadata_str_addW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add,d,x,y,z,a)
+#define __itt_metadata_str_add_ptr ITTNOTIFY_NAME(metadata_str_add)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA(d,x,y,z,a)
+#define __itt_metadata_str_addA_ptr 0
+#define __itt_metadata_str_addW(d,x,y,z,a)
+#define __itt_metadata_str_addW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add(d,x,y,z,a)
+#define __itt_metadata_str_add_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA_ptr 0
+#define __itt_metadata_str_addW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] scope The scope of the instance to which the metadata is to be added
+
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+
+ * @param[in] key The name of the metadata
+ * @param[in] type The type of the metadata
+ * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.
+ * @param[in] data The metadata itself
+*/
+void ITTAPI __itt_metadata_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))
+#define __itt_metadata_add_with_scope(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add_with_scope,d,x,y,z,a,b)
+#define __itt_metadata_add_with_scope_ptr ITTNOTIFY_NAME(metadata_add_with_scope)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_metadata_add_with_scope(d,x,y,z,a,b)
+#define __itt_metadata_add_with_scope_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_metadata_add_with_scope_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add string metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] scope The scope of the instance to which the metadata is to be added
+
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+
+ * @param[in] key The name of the metadata
+ * @param[in] data The metadata itself
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
+*/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_metadata_str_add_with_scopeA(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);
+void ITTAPI __itt_metadata_str_add_with_scopeW(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_metadata_str_add_with_scope __itt_metadata_str_add_with_scopeW
+# define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeW_ptr
+#else /* UNICODE */
+# define __itt_metadata_str_add_with_scope __itt_metadata_str_add_with_scopeA
+# define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_metadata_str_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);
+#endif
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeA,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeA_ptr ITTNOTIFY_NAME(metadata_str_add_with_scopeA)
+#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeW,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeW_ptr ITTNOTIFY_NAME(metadata_str_add_with_scopeW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scope,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scope_ptr ITTNOTIFY_NAME(metadata_str_add_with_scope)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeA_ptr 0
+#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scope_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA_ptr 0
+#define __itt_metadata_str_add_with_scopeW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @} metadata group */
+
+/**
+ * @defgroup relations Relations
+ * Instances of named entities can be explicitly associated with other
+ * instances using instance IDs and the relationship API calls.
+ *
+ * @{
+ */
+
+/**
+ * @ingroup relations
+ * @brief The kind of relation between two instances is specified by the enumerated type __itt_relation.
+ * Relations between instances can be added with an API call. The relation
+ * API uses instance IDs. Relations can be added before or after the actual
+ * instances are created and persist independently of the instances. This
+ * is the motivation for having different lifetimes for instance IDs and
+ * the actual instances.
+ */
+typedef enum
+{
+ __itt_relation_is_unknown = 0,
+ __itt_relation_is_dependent_on, /**< "A is dependent on B" means that A cannot start until B completes */
+ __itt_relation_is_sibling_of, /**< "A is sibling of B" means that A and B were created as a group */
+ __itt_relation_is_parent_of, /**< "A is parent of B" means that A created B */
+ __itt_relation_is_continuation_of, /**< "A is continuation of B" means that A assumes the dependencies of B */
+ __itt_relation_is_child_of, /**< "A is child of B" means that A was created by B (inverse of is_parent_of) */
+ __itt_relation_is_continued_by, /**< "A is continued by B" means that B assumes the dependencies of A (inverse of is_continuation_of) */
+ __itt_relation_is_predecessor_to /**< "A is predecessor to B" means that B cannot start until A completes (inverse of is_dependent_on) */
+} __itt_relation;
+
+/**
+ * @ingroup relations
+ * @brief Add a relation to the current task instance.
+ * The current task instance is the head of the relation.
+ * @param[in] domain The domain controlling this call
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_to_current(const __itt_domain *domain, __itt_relation relation, __itt_id tail);
+
+/**
+ * @ingroup relations
+ * @brief Add a relation between two instance identifiers.
+ * @param[in] domain The domain controlling this call
+ * @param[in] head The ID for the head of the relation
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add(const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail))
+ITT_STUBV(ITTAPI, void, relation_add, (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail))
+#define __itt_relation_add_to_current(d,x,y) ITTNOTIFY_VOID_D2(relation_add_to_current,d,x,y)
+#define __itt_relation_add_to_current_ptr ITTNOTIFY_NAME(relation_add_to_current)
+#define __itt_relation_add(d,x,y,z) ITTNOTIFY_VOID_D3(relation_add,d,x,y,z)
+#define __itt_relation_add_ptr ITTNOTIFY_NAME(relation_add)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_relation_add_to_current(d,x,y)
+#define __itt_relation_add_to_current_ptr 0
+#define __itt_relation_add(d,x,y,z)
+#define __itt_relation_add_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_relation_add_to_current_ptr 0
+#define __itt_relation_add_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} relations group */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_clock_info
+{
+ unsigned long long clock_freq; /*!< Clock domain frequency */
+ unsigned long long clock_base; /*!< Clock domain base timestamp */
+} __itt_clock_info;
+
+#pragma pack(pop)
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+typedef void (ITTAPI *__itt_get_clock_info_fn)(__itt_clock_info* clock_info, void* data);
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_clock_domain
+{
+ __itt_clock_info info; /*!< Most recent clock domain info */
+ __itt_get_clock_info_fn fn; /*!< Callback function pointer */
+ void* fn_data; /*!< Input argument for the callback function */
+ int extra1; /*!< Reserved. Must be zero */
+ void* extra2; /*!< Reserved. Must be zero */
+ struct ___itt_clock_domain* next;
+} __itt_clock_domain;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @ingroup clockdomains
+ * @brief Create a clock domain.
+ * Certain applications require the capability to trace their application using
+ * a clock domain different than the CPU, for instance the instrumentation of events
+ * that occur on a GPU.
+ * Because the set of domains is expected to be static over the application's execution time,
+ * there is no mechanism to destroy a domain.
+ * Any domain can be accessed by any thread in the process, regardless of which thread created
+ * the domain. This call is thread-safe.
+ * @param[in] fn A pointer to a callback function which retrieves alternative CPU timestamps
+ * @param[in] fn_data Argument for a callback function; may be NULL
+ */
+__itt_clock_domain* ITTAPI __itt_clock_domain_create(__itt_get_clock_info_fn fn, void* fn_data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data))
+#define __itt_clock_domain_create ITTNOTIFY_DATA(clock_domain_create)
+#define __itt_clock_domain_create_ptr ITTNOTIFY_NAME(clock_domain_create)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_clock_domain_create(fn,fn_data) (__itt_clock_domain*)0
+#define __itt_clock_domain_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_clock_domain_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomains
+ * @brief Recalculate clock domains frequences and clock base timestamps.
+ */
+void ITTAPI __itt_clock_domain_reset(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, clock_domain_reset, (void))
+#define __itt_clock_domain_reset ITTNOTIFY_VOID(clock_domain_reset)
+#define __itt_clock_domain_reset_ptr ITTNOTIFY_NAME(clock_domain_reset)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_clock_domain_reset()
+#define __itt_clock_domain_reset_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_clock_domain_reset_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Create an instance of identifier. This establishes the beginning of the lifetime of
+ * an instance of the given ID in the trace. Once this lifetime starts, the ID can be used to
+ * tag named entity instances in calls such as __itt_task_begin, and to specify relationships among
+ * identified named entity instances, using the \ref relations APIs.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The ID to create.
+ */
+void ITTAPI __itt_id_create_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);
+
+/**
+ * @ingroup clockdomain
+ * @brief Destroy an instance of identifier. This ends the lifetime of the current instance of the
+ * given ID value in the trace. Any relationships that are established after this lifetime ends are
+ * invalid. This call must be performed before the given ID value can be reused for a different
+ * named entity instance.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The ID to destroy.
+ */
+void ITTAPI __itt_id_destroy_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_create_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))
+ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))
+#define __itt_id_create_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_create_ex,d,x,y,z)
+#define __itt_id_create_ex_ptr ITTNOTIFY_NAME(id_create_ex)
+#define __itt_id_destroy_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_destroy_ex,d,x,y,z)
+#define __itt_id_destroy_ex_ptr ITTNOTIFY_NAME(id_destroy_ex)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_create_ex(domain,clock_domain,timestamp,id)
+#define __itt_id_create_ex_ptr 0
+#define __itt_id_destroy_ex(domain,clock_domain,timestamp,id)
+#define __itt_id_destroy_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_id_create_ex_ptr 0
+#define __itt_id_destroy_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The instance ID for this task instance, or __itt_null
+ * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null
+ * @param[in] name The name of this task
+ */
+void ITTAPI __itt_task_begin_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The identifier for this task instance, or __itt_null
+ * @param[in] parentid The parent of this task, or __itt_null
+ * @param[in] fn The pointer to the function you are tracing
+ */
+void ITTAPI __itt_task_begin_fn_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, void* fn);
+
+/**
+ * @ingroup clockdomain
+ * @brief End the current task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ */
+void ITTAPI __itt_task_end_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn))
+ITT_STUBV(ITTAPI, void, task_end_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp))
+#define __itt_task_begin_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_ex,d,x,y,z,a,b)
+#define __itt_task_begin_ex_ptr ITTNOTIFY_NAME(task_begin_ex)
+#define __itt_task_begin_fn_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_fn_ex,d,x,y,z,a,b)
+#define __itt_task_begin_fn_ex_ptr ITTNOTIFY_NAME(task_begin_fn_ex)
+#define __itt_task_end_ex(d,x,y) ITTNOTIFY_VOID_D2(task_end_ex,d,x,y)
+#define __itt_task_end_ex_ptr ITTNOTIFY_NAME(task_end_ex)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin_ex(domain,clock_domain,timestamp,id,parentid,name)
+#define __itt_task_begin_ex_ptr 0
+#define __itt_task_begin_fn_ex(domain,clock_domain,timestamp,id,parentid,fn)
+#define __itt_task_begin_fn_ex_ptr 0
+#define __itt_task_end_ex(domain,clock_domain,timestamp)
+#define __itt_task_end_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_ex_ptr 0
+#define __itt_task_begin_fn_ex_ptr 0
+#define __itt_task_end_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup markers
+ * @brief Create a marker instance.
+ * @param[in] domain The domain for this marker
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The instance ID for this marker, or __itt_null
+ * @param[in] name The name for this marker
+ * @param[in] scope The scope for this marker
+ */
+void ITTAPI __itt_marker_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope))
+#define __itt_marker_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(marker_ex,d,x,y,z,a,b)
+#define __itt_marker_ex_ptr ITTNOTIFY_NAME(marker_ex)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_marker_ex(domain,clock_domain,timestamp,id,name,scope)
+#define __itt_marker_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_marker_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Add a relation to the current task instance.
+ * The current task instance is the head of the relation.
+ * @param[in] domain The domain controlling this call
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_to_current_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail);
+
+/**
+ * @ingroup clockdomain
+ * @brief Add a relation between two instance identifiers.
+ * @param[in] domain The domain controlling this call
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] head The ID for the head of the relation
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail))
+ITT_STUBV(ITTAPI, void, relation_add_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail))
+#define __itt_relation_add_to_current_ex(d,x,y,z,a) ITTNOTIFY_VOID_D4(relation_add_to_current_ex,d,x,y,z,a)
+#define __itt_relation_add_to_current_ex_ptr ITTNOTIFY_NAME(relation_add_to_current_ex)
+#define __itt_relation_add_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b)
+#define __itt_relation_add_ex_ptr ITTNOTIFY_NAME(relation_add_ex)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_relation_add_to_current_ex(domain,clock_domain,timestame,relation,tail)
+#define __itt_relation_add_to_current_ex_ptr 0
+#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail)
+#define __itt_relation_add_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_relation_add_to_current_ex_ptr 0
+#define __itt_relation_add_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+typedef enum ___itt_track_group_type
+{
+ __itt_track_group_type_normal = 0
+} __itt_track_group_type;
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_track_group
+{
+ __itt_string_handle* name; /*!< Name of the track group */
+ struct ___itt_track* track; /*!< List of child tracks */
+ __itt_track_group_type tgtype; /*!< Type of the track group */
+ int extra1; /*!< Reserved. Must be zero */
+ void* extra2; /*!< Reserved. Must be zero */
+ struct ___itt_track_group* next;
+} __itt_track_group;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @brief Placeholder for custom track types. Currently, "normal" custom track
+ * is the only available track type.
+ */
+typedef enum ___itt_track_type
+{
+ __itt_track_type_normal = 0
+#ifdef INTEL_ITTNOTIFY_API_PRIVATE
+ , __itt_track_type_queue
+#endif /* INTEL_ITTNOTIFY_API_PRIVATE */
+} __itt_track_type;
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_track
+{
+ __itt_string_handle* name; /*!< Name of the track group */
+ __itt_track_group* group; /*!< Parent group to a track */
+ __itt_track_type ttype; /*!< Type of the track */
+ int extra1; /*!< Reserved. Must be zero */
+ void* extra2; /*!< Reserved. Must be zero */
+ struct ___itt_track* next;
+} __itt_track;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @brief Create logical track group.
+ */
+__itt_track_group* ITTAPI __itt_track_group_create(__itt_string_handle* name, __itt_track_group_type track_group_type);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type))
+#define __itt_track_group_create ITTNOTIFY_DATA(track_group_create)
+#define __itt_track_group_create_ptr ITTNOTIFY_NAME(track_group_create)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_track_group_create(name) (__itt_track_group*)0
+#define __itt_track_group_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_track_group_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Create logical track.
+ */
+__itt_track* ITTAPI __itt_track_create(__itt_track_group* track_group, __itt_string_handle* name, __itt_track_type track_type);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type))
+#define __itt_track_create ITTNOTIFY_DATA(track_create)
+#define __itt_track_create_ptr ITTNOTIFY_NAME(track_create)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_track_create(track_group,name,track_type) (__itt_track*)0
+#define __itt_track_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_track_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Set the logical track.
+ */
+void ITTAPI __itt_set_track(__itt_track* track);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, set_track, (__itt_track *track))
+#define __itt_set_track ITTNOTIFY_VOID(set_track)
+#define __itt_set_track_ptr ITTNOTIFY_NAME(set_track)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_set_track(track)
+#define __itt_set_track_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_set_track_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/* ========================================================================== */
+/** @cond exclude_from_gpa_documentation */
+/**
+ * @defgroup events Events
+ * @ingroup public
+ * Events group
+ * @{
+ */
+/** @brief user event type */
+typedef int __itt_event;
+
+/**
+ * @brief Create an event notification
+ * @note name or namelen being null/name and namelen not matching, user event feature not enabled
+ * @return non-zero event identifier upon success and __itt_err otherwise
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_event LIBITTAPI __itt_event_createA(const char *name, int namelen);
+__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_event_create __itt_event_createW
+# define __itt_event_create_ptr __itt_event_createW_ptr
+#else
+# define __itt_event_create __itt_event_createA
+# define __itt_event_create_ptr __itt_event_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA ITTNOTIFY_DATA(event_createA)
+#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)
+#define __itt_event_createW ITTNOTIFY_DATA(event_createW)
+#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create ITTNOTIFY_DATA(event_create)
+#define __itt_event_create_ptr ITTNOTIFY_NAME(event_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA(name, namelen) (__itt_event)0
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW(name, namelen) (__itt_event)0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create(name, namelen) (__itt_event)0
+#define __itt_event_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event occurrence.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_start(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))
+#define __itt_event_start ITTNOTIFY_DATA(event_start)
+#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_start(event) (int)0
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event end occurrence.
+ * @note It is optional if events do not have durations.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_end(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
+#define __itt_event_end ITTNOTIFY_DATA(event_end)
+#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_end(event) (int)0
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} events group */
+
+
+/**
+ * @defgroup arrays Arrays Visualizer
+ * @ingroup public
+ * Visualize arrays
+ * @{
+ */
+
+/**
+ * @enum __itt_av_data_type
+ * @brief Defines types of arrays data (for C/C++ intrinsic types)
+ */
+typedef enum
+{
+ __itt_e_first = 0,
+ __itt_e_char = 0, /* 1-byte integer */
+ __itt_e_uchar, /* 1-byte unsigned integer */
+ __itt_e_int16, /* 2-byte integer */
+ __itt_e_uint16, /* 2-byte unsigned integer */
+ __itt_e_int32, /* 4-byte integer */
+ __itt_e_uint32, /* 4-byte unsigned integer */
+ __itt_e_int64, /* 8-byte integer */
+ __itt_e_uint64, /* 8-byte unsigned integer */
+ __itt_e_float, /* 4-byte floating */
+ __itt_e_double, /* 8-byte floating */
+ __itt_e_last = __itt_e_double
+} __itt_av_data_type;
+
+/**
+ * @brief Save an array data to a file.
+ * Output format is defined by the file extension. The csv and bmp formats are supported (bmp - for 2-dimensional array only).
+ * @param[in] data - pointer to the array data
+ * @param[in] rank - the rank of the array
+ * @param[in] dimensions - pointer to an array of integers, which specifies the array dimensions.
+ * The size of dimensions must be equal to the rank
+ * @param[in] type - the type of the array, specified as one of the __itt_av_data_type values (for intrinsic types)
+ * @param[in] filePath - the file path; the output format is defined by the file extension
+ * @param[in] columnOrder - defines how the array is stored in the linear memory.
+ * It should be 1 for column-major order (e.g. in FORTRAN) or 0 - for row-major order (e.g. in C).
+ */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI __itt_av_saveA(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder);
+int ITTAPI __itt_av_saveW(void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_av_save __itt_av_saveW
+# define __itt_av_save_ptr __itt_av_saveW_ptr
+#else /* UNICODE */
+# define __itt_av_save __itt_av_saveA
+# define __itt_av_save_ptr __itt_av_saveA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int ITTAPI __itt_av_save(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder))
+ITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, av_save, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_av_saveA ITTNOTIFY_DATA(av_saveA)
+#define __itt_av_saveA_ptr ITTNOTIFY_NAME(av_saveA)
+#define __itt_av_saveW ITTNOTIFY_DATA(av_saveW)
+#define __itt_av_saveW_ptr ITTNOTIFY_NAME(av_saveW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_av_save ITTNOTIFY_DATA(av_save)
+#define __itt_av_save_ptr ITTNOTIFY_NAME(av_save)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_av_saveA(name)
+#define __itt_av_saveA_ptr 0
+#define __itt_av_saveW(name)
+#define __itt_av_saveW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_av_save(name)
+#define __itt_av_save_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_av_saveA_ptr 0
+#define __itt_av_saveW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_av_save_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+void ITTAPI __itt_enable_attach(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, enable_attach, (void))
+#define __itt_enable_attach ITTNOTIFY_VOID(enable_attach)
+#define __itt_enable_attach_ptr ITTNOTIFY_NAME(enable_attach)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_enable_attach()
+#define __itt_enable_attach_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_enable_attach_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @cond exclude_from_gpa_documentation */
+
+/** @} arrays group */
+
+/** @endcond */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ITTNOTIFY_H_ */
+
+#ifdef INTEL_ITTNOTIFY_API_PRIVATE
+
+#ifndef _ITTNOTIFY_PRIVATE_
+#define _ITTNOTIFY_PRIVATE_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @ingroup tasks
+ * @brief Begin an overlapped task instance.
+ * @param[in] domain The domain for this task.
+ * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
+ * @param[in] parentid The parent of this task, or __itt_null.
+ * @param[in] name The name of this task.
+ */
+void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
+ * @param[in] parentid The parent of this task, or __itt_null.
+ * @param[in] name The name of this task.
+ */
+void ITTAPI __itt_task_begin_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup tasks
+ * @brief End an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid Explicit ID of finished task
+ */
+void ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid);
+
+/**
+ * @ingroup clockdomain
+ * @brief End an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid Explicit ID of finished task
+ */
+void ITTAPI __itt_task_end_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex, (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name))
+ITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id taskid))
+ITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid))
+#define __itt_task_begin_overlapped(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z)
+#define __itt_task_begin_overlapped_ptr ITTNOTIFY_NAME(task_begin_overlapped)
+#define __itt_task_begin_overlapped_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_overlapped_ex,d,x,y,z,a,b)
+#define __itt_task_begin_overlapped_ex_ptr ITTNOTIFY_NAME(task_begin_overlapped_ex)
+#define __itt_task_end_overlapped(d,x) ITTNOTIFY_VOID_D1(task_end_overlapped,d,x)
+#define __itt_task_end_overlapped_ptr ITTNOTIFY_NAME(task_end_overlapped)
+#define __itt_task_end_overlapped_ex(d,x,y,z) ITTNOTIFY_VOID_D3(task_end_overlapped_ex,d,x,y,z)
+#define __itt_task_end_overlapped_ex_ptr ITTNOTIFY_NAME(task_end_overlapped_ex)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin_overlapped(domain,taskid,parentid,name)
+#define __itt_task_begin_overlapped_ptr 0
+#define __itt_task_begin_overlapped_ex(domain,clock_domain,timestamp,taskid,parentid,name)
+#define __itt_task_begin_overlapped_ex_ptr 0
+#define __itt_task_end_overlapped(domain,taskid)
+#define __itt_task_end_overlapped_ptr 0
+#define __itt_task_end_overlapped_ex(domain,clock_domain,timestamp,taskid)
+#define __itt_task_end_overlapped_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_overlapped_ptr 0
+#define __itt_task_begin_overlapped_ex_ptr 0
+#define __itt_task_end_overlapped_ptr 0
+#define __itt_task_end_overlapped_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @defgroup makrs_internal Marks
+ * @ingroup internal
+ * Marks group
+ * @warning Internal API:
+ * - It is not shipped to outside of Intel
+ * - It is delivered to internal Intel teams using e-mail or SVN access only
+ * @{
+ */
+/** @brief user mark type */
+typedef int __itt_mark_type;
+
+/**
+ * @brief Creates a user mark type with the specified name using char or Unicode string.
+ * @param[in] name - name of mark to create
+ * @return Returns a handle to the mark type
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_mark_type ITTAPI __itt_mark_createA(const char *name);
+__itt_mark_type ITTAPI __itt_mark_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_mark_create __itt_mark_createW
+# define __itt_mark_create_ptr __itt_mark_createW_ptr
+#else /* UNICODE */
+# define __itt_mark_create __itt_mark_createA
+# define __itt_mark_create_ptr __itt_mark_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_mark_type ITTAPI __itt_mark_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char *name))
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_mark_type, mark_create, (const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA ITTNOTIFY_DATA(mark_createA)
+#define __itt_mark_createA_ptr ITTNOTIFY_NAME(mark_createA)
+#define __itt_mark_createW ITTNOTIFY_DATA(mark_createW)
+#define __itt_mark_createW_ptr ITTNOTIFY_NAME(mark_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create ITTNOTIFY_DATA(mark_create)
+#define __itt_mark_create_ptr ITTNOTIFY_NAME(mark_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA(name) (__itt_mark_type)0
+#define __itt_mark_createA_ptr 0
+#define __itt_mark_createW(name) (__itt_mark_type)0
+#define __itt_mark_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create(name) (__itt_mark_type)0
+#define __itt_mark_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA_ptr 0
+#define __itt_mark_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Creates a "discrete" user mark type of the specified type and an optional parameter using char or Unicode string.
+ *
+ * - The mark of "discrete" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign.
+ * - The call is "synchronous" - function returns after mark is actually added to results.
+ * - This function is useful, for example, to mark different phases of application
+ * (beginning of the next mark automatically meand end of current region).
+ * - Can be used together with "continuous" marks (see below) at the same collection session
+ * @param[in] mt - mark, created by __itt_mark_create(const char* name) function
+ * @param[in] parameter - string parameter of mark
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI __itt_markA(__itt_mark_type mt, const char *parameter);
+int ITTAPI __itt_markW(__itt_mark_type mt, const wchar_t *parameter);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_mark __itt_markW
+# define __itt_mark_ptr __itt_markW_ptr
+#else /* UNICODE */
+# define __itt_mark __itt_markA
+# define __itt_mark_ptr __itt_markA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int ITTAPI __itt_mark(__itt_mark_type mt, const char *parameter);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char *parameter))
+ITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark, (__itt_mark_type mt, const char *parameter))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA ITTNOTIFY_DATA(markA)
+#define __itt_markA_ptr ITTNOTIFY_NAME(markA)
+#define __itt_markW ITTNOTIFY_DATA(markW)
+#define __itt_markW_ptr ITTNOTIFY_NAME(markW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark ITTNOTIFY_DATA(mark)
+#define __itt_mark_ptr ITTNOTIFY_NAME(mark)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA(mt, parameter) (int)0
+#define __itt_markA_ptr 0
+#define __itt_markW(mt, parameter) (int)0
+#define __itt_markW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark(mt, parameter) (int)0
+#define __itt_mark_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA_ptr 0
+#define __itt_markW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Use this if necessary to create a "discrete" user event type (mark) for process
+ * rather then for one thread
+ * @see int __itt_mark(__itt_mark_type mt, const char* parameter);
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI __itt_mark_globalA(__itt_mark_type mt, const char *parameter);
+int ITTAPI __itt_mark_globalW(__itt_mark_type mt, const wchar_t *parameter);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_mark_global __itt_mark_globalW
+# define __itt_mark_global_ptr __itt_mark_globalW_ptr
+#else /* UNICODE */
+# define __itt_mark_global __itt_mark_globalA
+# define __itt_mark_global_ptr __itt_mark_globalA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int ITTAPI __itt_mark_global(__itt_mark_type mt, const char *parameter);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char *parameter))
+ITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark_global, (__itt_mark_type mt, const char *parameter))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA ITTNOTIFY_DATA(mark_globalA)
+#define __itt_mark_globalA_ptr ITTNOTIFY_NAME(mark_globalA)
+#define __itt_mark_globalW ITTNOTIFY_DATA(mark_globalW)
+#define __itt_mark_globalW_ptr ITTNOTIFY_NAME(mark_globalW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global ITTNOTIFY_DATA(mark_global)
+#define __itt_mark_global_ptr ITTNOTIFY_NAME(mark_global)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA(mt, parameter) (int)0
+#define __itt_mark_globalA_ptr 0
+#define __itt_mark_globalW(mt, parameter) (int)0
+#define __itt_mark_globalW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global(mt, parameter) (int)0
+#define __itt_mark_global_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA_ptr 0
+#define __itt_mark_globalW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Creates an "end" point for "continuous" mark with specified name.
+ *
+ * - Returns zero value in case of success, non-zero value otherwise.
+ * Also returns non-zero value when preceding "begin" point for the
+ * mark with the same name failed to be created or not created.
+ * - The mark of "continuous" type is placed to collection results in
+ * case of success. It appears in overtime view(s) as a special tick
+ * sign (different from "discrete" mark) together with line from
+ * corresponding "begin" mark to "end" mark.
+ * @note Continuous marks can overlap and be nested inside each other.
+ * Discrete mark can be nested inside marked region
+ * @param[in] mt - mark, created by __itt_mark_create(const char* name) function
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+int ITTAPI __itt_mark_off(__itt_mark_type mt);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt))
+#define __itt_mark_off ITTNOTIFY_DATA(mark_off)
+#define __itt_mark_off_ptr ITTNOTIFY_NAME(mark_off)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_mark_off(mt) (int)0
+#define __itt_mark_off_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_mark_off_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Use this if necessary to create an "end" point for mark of process
+ * @see int __itt_mark_off(__itt_mark_type mt);
+ */
+int ITTAPI __itt_mark_global_off(__itt_mark_type mt);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt))
+#define __itt_mark_global_off ITTNOTIFY_DATA(mark_global_off)
+#define __itt_mark_global_off_ptr ITTNOTIFY_NAME(mark_global_off)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_mark_global_off(mt) (int)0
+#define __itt_mark_global_off_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_mark_global_off_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} marks group */
+
+/**
+ * @defgroup counters_internal Counters
+ * @ingroup internal
+ * Counters group
+ * @{
+ */
+/**
+ * @brief opaque structure for counter identification
+ */
+typedef struct ___itt_counter *__itt_counter;
+
+/**
+ * @brief Create a counter with given name/domain for the calling thread
+ *
+ * After __itt_counter_create() is called, __itt_counter_inc() / __itt_counter_inc_delta() can be used
+ * to increment the counter on any thread
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_counter ITTAPI __itt_counter_createA(const char *name, const char *domain);
+__itt_counter ITTAPI __itt_counter_createW(const wchar_t *name, const wchar_t *domain);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_counter_create __itt_counter_createW
+# define __itt_counter_create_ptr __itt_counter_createW_ptr
+#else /* UNICODE */
+# define __itt_counter_create __itt_counter_createA
+# define __itt_counter_create_ptr __itt_counter_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_counter ITTAPI __itt_counter_create(const char *name, const char *domain);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char *name, const char *domain))
+ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_counter, counter_create, (const char *name, const char *domain))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA ITTNOTIFY_DATA(counter_createA)
+#define __itt_counter_createA_ptr ITTNOTIFY_NAME(counter_createA)
+#define __itt_counter_createW ITTNOTIFY_DATA(counter_createW)
+#define __itt_counter_createW_ptr ITTNOTIFY_NAME(counter_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create ITTNOTIFY_DATA(counter_create)
+#define __itt_counter_create_ptr ITTNOTIFY_NAME(counter_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA(name, domain)
+#define __itt_counter_createA_ptr 0
+#define __itt_counter_createW(name, domain)
+#define __itt_counter_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create(name, domain)
+#define __itt_counter_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA_ptr 0
+#define __itt_counter_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Destroy the counter identified by the pointer previously returned by __itt_counter_create()
+ */
+void ITTAPI __itt_counter_destroy(__itt_counter id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id))
+#define __itt_counter_destroy ITTNOTIFY_VOID(counter_destroy)
+#define __itt_counter_destroy_ptr ITTNOTIFY_NAME(counter_destroy)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_destroy(id)
+#define __itt_counter_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Increment the counter value
+ */
+void ITTAPI __itt_counter_inc(__itt_counter id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id))
+#define __itt_counter_inc ITTNOTIFY_VOID(counter_inc)
+#define __itt_counter_inc_ptr ITTNOTIFY_NAME(counter_inc)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc(id)
+#define __itt_counter_inc_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Increment the counter value with x
+ */
+void ITTAPI __itt_counter_inc_delta(__itt_counter id, unsigned long long value);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value))
+#define __itt_counter_inc_delta ITTNOTIFY_VOID(counter_inc_delta)
+#define __itt_counter_inc_delta_ptr ITTNOTIFY_NAME(counter_inc_delta)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc_delta(id, value)
+#define __itt_counter_inc_delta_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_delta_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} counters group */
+
+/**
+ * @defgroup stitch Stack Stitching
+ * @ingroup internal
+ * Stack Stitching group
+ * @{
+ */
+/**
+ * @brief opaque structure for counter identification
+ */
+typedef struct ___itt_caller *__itt_caller;
+
+/**
+ * @brief Create the stitch point e.g. a point in call stack where other stacks should be stitched to.
+ * The function returns a unique identifier which is used to match the cut points with corresponding stitch points.
+ */
+__itt_caller ITTAPI __itt_stack_caller_create(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void))
+#define __itt_stack_caller_create ITTNOTIFY_DATA(stack_caller_create)
+#define __itt_stack_caller_create_ptr ITTNOTIFY_NAME(stack_caller_create)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_caller_create() (__itt_caller)0
+#define __itt_stack_caller_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_caller_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Destroy the inforamtion about stitch point identified by the pointer previously returned by __itt_stack_caller_create()
+ */
+void ITTAPI __itt_stack_caller_destroy(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id))
+#define __itt_stack_caller_destroy ITTNOTIFY_VOID(stack_caller_destroy)
+#define __itt_stack_caller_destroy_ptr ITTNOTIFY_NAME(stack_caller_destroy)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_caller_destroy(id)
+#define __itt_stack_caller_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_caller_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Sets the cut point. Stack from each event which occurs after this call will be cut
+ * at the same stack level the function was called and stitched to the corresponding stitch point.
+ */
+void ITTAPI __itt_stack_callee_enter(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id))
+#define __itt_stack_callee_enter ITTNOTIFY_VOID(stack_callee_enter)
+#define __itt_stack_callee_enter_ptr ITTNOTIFY_NAME(stack_callee_enter)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_callee_enter(id)
+#define __itt_stack_callee_enter_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_callee_enter_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief This function eliminates the cut point which was set by latest __itt_stack_callee_enter().
+ */
+void ITTAPI __itt_stack_callee_leave(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id))
+#define __itt_stack_callee_leave ITTNOTIFY_VOID(stack_callee_leave)
+#define __itt_stack_callee_leave_ptr ITTNOTIFY_NAME(stack_callee_leave)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_callee_leave(id)
+#define __itt_stack_callee_leave_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_callee_leave_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @} stitch group */
+
+/* ***************************************************************************************************************************** */
+
+#include <stdarg.h>
+
+/** @cond exclude_from_documentation */
+typedef enum __itt_error_code
+{
+ __itt_error_success = 0, /*!< no error */
+ __itt_error_no_module = 1, /*!< module can't be loaded */
+ /* %1$s -- library name; win: %2$d -- system error code; unx: %2$s -- system error message. */
+ __itt_error_no_symbol = 2, /*!< symbol not found */
+ /* %1$s -- library name, %2$s -- symbol name. */
+ __itt_error_unknown_group = 3, /*!< unknown group specified */
+ /* %1$s -- env var name, %2$s -- group name. */
+ __itt_error_cant_read_env = 4, /*!< GetEnvironmentVariable() failed */
+ /* %1$s -- env var name, %2$d -- system error. */
+ __itt_error_env_too_long = 5, /*!< variable value too long */
+ /* %1$s -- env var name, %2$d -- actual length of the var, %3$d -- max allowed length. */
+ __itt_error_system = 6 /*!< pthread_mutexattr_init or pthread_mutex_init failed */
+ /* %1$s -- function name, %2$d -- errno. */
+} __itt_error_code;
+
+typedef void (__itt_error_handler_t)(__itt_error_code code, va_list);
+__itt_error_handler_t* __itt_set_error_handler(__itt_error_handler_t*);
+
+const char* ITTAPI __itt_api_version(void);
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#define __itt_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler)
+void __itt_error_handler(__itt_error_code code, va_list args);
+extern const int ITTNOTIFY_NAME(err);
+#define __itt_err ITTNOTIFY_NAME(err)
+ITT_STUB(ITTAPI, const char*, api_version, (void))
+#define __itt_api_version ITTNOTIFY_DATA(api_version)
+#define __itt_api_version_ptr ITTNOTIFY_NAME(api_version)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_api_version() (const char*)0
+#define __itt_api_version_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_api_version_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ITTNOTIFY_PRIVATE_ */
+
+#endif /* INTEL_ITTNOTIFY_API_PRIVATE */
diff --git a/final/runtime/src/thirdparty/ittnotify/ittnotify_config.h b/final/runtime/src/thirdparty/ittnotify/ittnotify_config.h
new file mode 100644
index 0000000..1068239
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/ittnotify_config.h
@@ -0,0 +1,478 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _ITTNOTIFY_CONFIG_H_
+#define _ITTNOTIFY_CONFIG_H_
+
+/** @cond exclude_from_documentation */
+#ifndef ITT_OS_WIN
+# define ITT_OS_WIN 1
+#endif /* ITT_OS_WIN */
+
+#ifndef ITT_OS_LINUX
+# define ITT_OS_LINUX 2
+#endif /* ITT_OS_LINUX */
+
+#ifndef ITT_OS_MAC
+# define ITT_OS_MAC 3
+#endif /* ITT_OS_MAC */
+
+#ifndef ITT_OS
+# if defined WIN32 || defined _WIN32
+# define ITT_OS ITT_OS_WIN
+# elif defined( __APPLE__ ) && defined( __MACH__ )
+# define ITT_OS ITT_OS_MAC
+# else
+# define ITT_OS ITT_OS_LINUX
+# endif
+#endif /* ITT_OS */
+
+#ifndef ITT_PLATFORM_WIN
+# define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */
+
+#ifndef ITT_PLATFORM_POSIX
+# define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM_MAC
+# define ITT_PLATFORM_MAC 3
+#endif /* ITT_PLATFORM_MAC */
+
+#ifndef ITT_PLATFORM
+# if ITT_OS==ITT_OS_WIN
+# define ITT_PLATFORM ITT_PLATFORM_WIN
+# elif ITT_OS==ITT_OS_MAC
+# define ITT_PLATFORM ITT_PLATFORM_MAC
+# else
+# define ITT_PLATFORM ITT_PLATFORM_POSIX
+# endif
+#endif /* ITT_PLATFORM */
+
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
+#include <stddef.h>
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <tchar.h>
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifndef CDECL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define CDECL __cdecl
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define CDECL __attribute__ ((cdecl))
+# else /* _M_IX86 || __i386__ */
+# define CDECL /* actual only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+#ifndef STDCALL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define STDCALL __stdcall
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define STDCALL __attribute__ ((stdcall))
+# else /* _M_IX86 || __i386__ */
+# define STDCALL /* supported only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* STDCALL */
+
+#define ITTAPI CDECL
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL CDECL
+#define LIBITTAPI_CALL CDECL
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define ITT_INLINE __forceinline
+#define ITT_INLINE_ATTRIBUTE /* nothing */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define ITT_INLINE static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
+#else /* __STRICT_ANSI__ */
+#define ITT_INLINE static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
+#endif /* __STRICT_ANSI__ */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
+
+#ifndef ITT_ARCH_IA32
+# define ITT_ARCH_IA32 1
+#endif /* ITT_ARCH_IA32 */
+
+#ifndef ITT_ARCH_IA32E
+# define ITT_ARCH_IA32E 2
+#endif /* ITT_ARCH_IA32E */
+
+/* Was there a magical reason we didn't have 3 here before? */
+#ifndef ITT_ARCH_AARCH64
+# define ITT_ARCH_AARCH64 3
+#endif /* ITT_ARCH_AARCH64 */
+
+#ifndef ITT_ARCH_ARM
+# define ITT_ARCH_ARM 4
+#endif /* ITT_ARCH_ARM */
+
+#ifndef ITT_ARCH_PPC64
+# define ITT_ARCH_PPC64 5
+#endif /* ITT_ARCH_PPC64 */
+
+
+#ifndef ITT_ARCH
+# if defined _M_IX86 || defined __i386__
+# define ITT_ARCH ITT_ARCH_IA32
+# elif defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+# define ITT_ARCH ITT_ARCH_IA32E
+# elif defined _M_IA64 || defined __ia64__
+# define ITT_ARCH ITT_ARCH_IA64
+# elif defined _M_ARM || __arm__
+# define ITT_ARCH ITT_ARCH_ARM
+# elif defined __powerpc64__
+# define ITT_ARCH ITT_ARCH_PPC64
+# elif defined __aarch64__
+# define ITT_ARCH ITT_ARCH_AARCH64
+# endif
+#endif
+
+#ifdef __cplusplus
+# define ITT_EXTERN_C extern "C"
+# define ITT_EXTERN_C_BEGIN extern "C" {
+# define ITT_EXTERN_C_END }
+#else
+# define ITT_EXTERN_C /* nothing */
+# define ITT_EXTERN_C_BEGIN /* nothing */
+# define ITT_EXTERN_C_END /* nothing */
+#endif /* __cplusplus */
+
+#define ITT_TO_STR_AUX(x) #x
+#define ITT_TO_STR(x) ITT_TO_STR_AUX(x)
+
+#define __ITT_BUILD_ASSERT(expr, suffix) do { \
+ static char __itt_build_check_##suffix[(expr) ? 1 : -1]; \
+ __itt_build_check_##suffix[0] = 0; \
+} while(0)
+#define _ITT_BUILD_ASSERT(expr, suffix) __ITT_BUILD_ASSERT((expr), suffix)
+#define ITT_BUILD_ASSERT(expr) _ITT_BUILD_ASSERT((expr), __LINE__)
+
+#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
+
+/* Replace with snapshot date YYYYMMDD for promotion build. */
+#define API_VERSION_BUILD 20111111
+
+#ifndef API_VERSION_NUM
+#define API_VERSION_NUM 0.0.0
+#endif /* API_VERSION_NUM */
+
+#define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) \
+ " (" ITT_TO_STR(API_VERSION_BUILD) ")"
+
+/* OS communication functions */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <windows.h>
+typedef HMODULE lib_t;
+typedef DWORD TIDT;
+typedef CRITICAL_SECTION mutex_t;
+#define MUTEX_INITIALIZER { 0 }
+#define strong_alias(name, aliasname) /* empty for Windows */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <dlfcn.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
+#endif /* _GNU_SOURCE */
+#ifndef __USE_UNIX98
+#define __USE_UNIX98 1 /* need for PTHREAD_MUTEX_RECURSIVE, on SLES11.1 with gcc 4.3.4 wherein pthread.h missing dependency on __USE_XOPEN2K8 */
+#endif /*__USE_UNIX98*/
+#include <pthread.h>
+typedef void* lib_t;
+typedef pthread_t TIDT;
+typedef pthread_mutex_t mutex_t;
+#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+#define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_get_proc(lib, name) GetProcAddress(lib, name)
+#define __itt_mutex_init(mutex) InitializeCriticalSection(mutex)
+#define __itt_mutex_lock(mutex) EnterCriticalSection(mutex)
+#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
+#define __itt_load_lib(name) LoadLibraryA(name)
+#define __itt_unload_lib(handle) FreeLibrary(handle)
+#define __itt_system_error() (int)GetLastError()
+#define __itt_fstrcmp(s1, s2) lstrcmpA(s1, s2)
+#define __itt_fstrlen(s) lstrlenA(s)
+#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
+#define __itt_fstrdup(s) _strdup(s)
+#define __itt_thread_id() GetCurrentThreadId()
+#define __itt_thread_yield() SwitchToThread()
+#ifndef ITT_SIMPLE_INIT
+ITT_INLINE long
+__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
+ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
+{
+ return InterlockedIncrement(ptr);
+}
+#endif /* ITT_SIMPLE_INIT */
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+#define __itt_get_proc(lib, name) dlsym(lib, name)
+#define __itt_mutex_init(mutex) {\
+ pthread_mutexattr_t mutex_attr; \
+ int error_code = pthread_mutexattr_init(&mutex_attr); \
+ if (error_code) \
+ __itt_report_error(__itt_error_system, "pthread_mutexattr_init", \
+ error_code); \
+ error_code = pthread_mutexattr_settype(&mutex_attr, \
+ PTHREAD_MUTEX_RECURSIVE); \
+ if (error_code) \
+ __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", \
+ error_code); \
+ error_code = pthread_mutex_init(mutex, &mutex_attr); \
+ if (error_code) \
+ __itt_report_error(__itt_error_system, "pthread_mutex_init", \
+ error_code); \
+ error_code = pthread_mutexattr_destroy(&mutex_attr); \
+ if (error_code) \
+ __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", \
+ error_code); \
+}
+#define __itt_mutex_lock(mutex) pthread_mutex_lock(mutex)
+#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
+#define __itt_load_lib(name) dlopen(name, RTLD_LAZY)
+#define __itt_unload_lib(handle) dlclose(handle)
+#define __itt_system_error() errno
+#define __itt_fstrcmp(s1, s2) strcmp(s1, s2)
+#define __itt_fstrlen(s) strlen(s)
+#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
+#define __itt_fstrdup(s) strdup(s)
+#define __itt_thread_id() pthread_self()
+#define __itt_thread_yield() sched_yield()
+#if ITT_ARCH==ITT_ARCH_IA64
+#ifdef __INTEL_COMPILER
+#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
+#else /* __INTEL_COMPILER */
+/* TODO: Add Support for not Intel compilers for IA-64 architecture */
+#endif /* __INTEL_COMPILER */
+#elif ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_IA32E /* ITT_ARCH!=ITT_ARCH_IA64 */
+ITT_INLINE long
+__TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;
+ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)
+{
+ long result;
+ __asm__ __volatile__("lock\nxadd %0,%1"
+ : "=r"(result),"=m"(*(int*)ptr)
+ : "0"(addend), "m"(*(int*)ptr)
+ : "memory");
+ return result;
+}
+#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64 || ITT_ARCH==ITT_ARCH_AARCH64
+#define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)
+#endif /* ITT_ARCH==ITT_ARCH_IA64 */
+#ifndef ITT_SIMPLE_INIT
+ITT_INLINE long
+__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
+ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
+{
+ return __TBB_machine_fetchadd4(ptr, 1) + 1L;
+}
+#endif /* ITT_SIMPLE_INIT */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+typedef enum {
+ __itt_collection_normal = 0,
+ __itt_collection_paused = 1
+} __itt_collection_state;
+
+typedef enum {
+ __itt_thread_normal = 0,
+ __itt_thread_ignored = 1
+} __itt_thread_state;
+
+#pragma pack(push, 8)
+
+typedef struct ___itt_thread_info
+{
+ const char* nameA; /*!< Copy of original name in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+ const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+#else /* UNICODE || _UNICODE */
+ void* nameW;
+#endif /* UNICODE || _UNICODE */
+ TIDT tid;
+ __itt_thread_state state; /*!< Thread state (paused or normal) */
+ int extra1; /*!< Reserved to the runtime */
+ void* extra2; /*!< Reserved to the runtime */
+ struct ___itt_thread_info* next;
+} __itt_thread_info;
+
+#include "ittnotify_types.h" /* For __itt_group_id definition */
+
+typedef struct ___itt_api_info_20101001
+{
+ const char* name;
+ void** func_ptr;
+ void* init_func;
+ __itt_group_id group;
+} __itt_api_info_20101001;
+
+typedef struct ___itt_api_info
+{
+ const char* name;
+ void** func_ptr;
+ void* init_func;
+ void* null_func;
+ __itt_group_id group;
+} __itt_api_info;
+
+struct ___itt_domain;
+struct ___itt_string_handle;
+
+typedef struct ___itt_global
+{
+ unsigned char magic[8];
+ unsigned long version_major;
+ unsigned long version_minor;
+ unsigned long version_build;
+ volatile long api_initialized;
+ volatile long mutex_initialized;
+ volatile long atomic_counter;
+ mutex_t mutex;
+ lib_t lib;
+ void* error_handler;
+ const char** dll_path_ptr;
+ __itt_api_info* api_list_ptr;
+ struct ___itt_global* next;
+ /* Joinable structures below */
+ __itt_thread_info* thread_list;
+ struct ___itt_domain* domain_list;
+ struct ___itt_string_handle* string_list;
+ __itt_collection_state state;
+} __itt_global;
+
+#pragma pack(pop)
+
+#define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
+ h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
+ if (h != NULL) { \
+ h->tid = t; \
+ h->nameA = NULL; \
+ h->nameW = n ? _wcsdup(n) : NULL; \
+ h->state = s; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->thread_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
+ h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
+ if (h != NULL) { \
+ h->tid = t; \
+ h->nameA = n ? __itt_fstrdup(n) : NULL; \
+ h->nameW = NULL; \
+ h->state = s; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->thread_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
+ h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
+ if (h != NULL) { \
+ h->flags = 0; /* domain is disabled by default */ \
+ h->nameA = NULL; \
+ h->nameW = name ? _wcsdup(name) : NULL; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->domain_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
+ h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
+ if (h != NULL) { \
+ h->flags = 0; /* domain is disabled by default */ \
+ h->nameA = name ? __itt_fstrdup(name) : NULL; \
+ h->nameW = NULL; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->domain_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
+ h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
+ if (h != NULL) { \
+ h->strA = NULL; \
+ h->strW = name ? _wcsdup(name) : NULL; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->string_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
+ h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
+ if (h != NULL) { \
+ h->strA = name ? __itt_fstrdup(name) : NULL; \
+ h->strW = NULL; \
+ h->extra1 = 0; /* reserved */ \
+ h->extra2 = NULL; /* reserved */ \
+ h->next = NULL; \
+ if (h_tail == NULL) \
+ (gptr)->string_list = h; \
+ else \
+ h_tail->next = h; \
+ } \
+}
+
+#endif /* _ITTNOTIFY_CONFIG_H_ */
diff --git a/final/runtime/src/thirdparty/ittnotify/ittnotify_static.c b/final/runtime/src/thirdparty/ittnotify/ittnotify_static.c
new file mode 100644
index 0000000..5f36573
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/ittnotify_static.c
@@ -0,0 +1,1051 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "kmp_config.h"
+#include "ittnotify_config.h"
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define PATH_MAX 512
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+#include <limits.h>
+#include <dlfcn.h>
+#include <errno.h>
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#define INTEL_NO_MACRO_BODY
+#define INTEL_ITTNOTIFY_API_PRIVATE
+#include "ittnotify.h"
+#include "legacy/ittnotify.h"
+
+#include "disable_warnings.h"
+
+static const char api_version[] = API_VERSION "\0\n@(#) $Revision: 43375 $\n";
+
+#define _N_(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
+
+#if ITT_OS==ITT_OS_WIN
+static const char* ittnotify_lib_name = "libittnotify.dll";
+#elif ITT_OS==ITT_OS_LINUX
+static const char* ittnotify_lib_name = "libittnotify.so";
+#elif ITT_OS==ITT_OS_MAC
+static const char* ittnotify_lib_name = "libittnotify.dylib";
+#else
+#error Unsupported or unknown OS.
+#endif
+
+#ifdef __ANDROID__
+#include <android/log.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/limits.h>
+
+#ifdef ITT_ANDROID_LOG
+ #define ITT_ANDROID_LOG_TAG "INTEL_VTUNE_USERAPI"
+ #define ITT_ANDROID_LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, ITT_ANDROID_LOG_TAG, __VA_ARGS__))
+ #define ITT_ANDROID_LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, ITT_ANDROID_LOG_TAG, __VA_ARGS__))
+ #define ITT_ANDROID_LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR,ITT_ANDROID_LOG_TAG, __VA_ARGS__))
+ #define ITT_ANDROID_LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG,ITT_ANDROID_LOG_TAG, __VA_ARGS__))
+#else
+ #define ITT_ANDROID_LOGI(...)
+ #define ITT_ANDROID_LOGW(...)
+ #define ITT_ANDROID_LOGE(...)
+ #define ITT_ANDROID_LOGD(...)
+#endif
+
+/* default location of userapi collector on Android */
+#define ANDROID_ITTNOTIFY_DEFAULT_PATH "/data/data/com.intel.vtune/intel/libittnotify.so"
+#endif
+
+
+#ifndef LIB_VAR_NAME
+#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM
+#define LIB_VAR_NAME INTEL_LIBITTNOTIFY32
+#else
+#define LIB_VAR_NAME INTEL_LIBITTNOTIFY64
+#endif
+#endif /* LIB_VAR_NAME */
+
+#define ITT_MUTEX_INIT_AND_LOCK(p) { \
+ if (!p.mutex_initialized) \
+ { \
+ if (__itt_interlocked_increment(&p.atomic_counter) == 1) \
+ { \
+ __itt_mutex_init(&p.mutex); \
+ p.mutex_initialized = 1; \
+ } \
+ else \
+ while (!p.mutex_initialized) \
+ __itt_thread_yield(); \
+ } \
+ __itt_mutex_lock(&p.mutex); \
+}
+
+const int _N_(err) = 0;
+
+typedef int (__itt_init_ittlib_t)(const char*, __itt_group_id);
+
+/* this define used to control initialization function name. */
+#ifndef __itt_init_ittlib_name
+ITT_EXTERN_C int _N_(init_ittlib)(const char*, __itt_group_id);
+static __itt_init_ittlib_t* __itt_init_ittlib_ptr = _N_(init_ittlib);
+#define __itt_init_ittlib_name __itt_init_ittlib_ptr
+#endif /* __itt_init_ittlib_name */
+
+typedef void (__itt_fini_ittlib_t)(void);
+
+/* this define used to control finalization function name. */
+#ifndef __itt_fini_ittlib_name
+ITT_EXTERN_C void _N_(fini_ittlib)(void);
+static __itt_fini_ittlib_t* __itt_fini_ittlib_ptr = _N_(fini_ittlib);
+#define __itt_fini_ittlib_name __itt_fini_ittlib_ptr
+#endif /* __itt_fini_ittlib_name */
+
+/* building pointers to imported funcs */
+#undef ITT_STUBV
+#undef ITT_STUB
+#define ITT_STUB(api,type,name,args,params,ptr,group,format) \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args; \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
+{ \
+ __itt_init_ittlib_name(NULL, __itt_group_all); \
+ if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \
+ return ITTNOTIFY_NAME(name) params; \
+ else \
+ return (type)0; \
+}
+
+#define ITT_STUBV(api,type,name,args,params,ptr,group,format) \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args; \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
+{ \
+ __itt_init_ittlib_name(NULL, __itt_group_all); \
+ if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \
+ ITTNOTIFY_NAME(name) params; \
+ else \
+ return; \
+}
+
+#undef __ITT_INTERNAL_INIT
+#include "ittnotify_static.h"
+
+#undef ITT_STUB
+#undef ITT_STUBV
+#define ITT_STUB(api,type,name,args,params,ptr,group,format) \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args; \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END
+
+#define ITT_STUBV(api,type,name,args,params,ptr,group,format) \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args; \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END
+
+#define __ITT_INTERNAL_INIT
+#include "ittnotify_static.h"
+#undef __ITT_INTERNAL_INIT
+
+ITT_GROUP_LIST(group_list);
+
+#pragma pack(push, 8)
+
+typedef struct ___itt_group_alias
+{
+ const char* env_var;
+ __itt_group_id groups;
+} __itt_group_alias;
+
+static __itt_group_alias group_alias[] = {
+ { "KMP_FOR_TPROFILE", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync | __itt_group_mark) },
+ { "KMP_FOR_TCHECK", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync | __itt_group_fsync | __itt_group_mark | __itt_group_suppress) },
+ { NULL, (__itt_group_none) },
+ { api_version, (__itt_group_none) } /* !!! Just to avoid unused code elimination !!! */
+};
+
+#pragma pack(pop)
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static __itt_api_info api_list[] = {
+/* Define functions with static implementation */
+#undef ITT_STUB
+#undef ITT_STUBV
+#define ITT_STUB(api,type,name,args,params,nameindll,group,format) { ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (__itt_group_id)(group)},
+#define ITT_STUBV ITT_STUB
+#define __ITT_INTERNAL_INIT
+#include "ittnotify_static.h"
+#undef __ITT_INTERNAL_INIT
+/* Define functions without static implementation */
+#undef ITT_STUB
+#undef ITT_STUBV
+#define ITT_STUB(api,type,name,args,params,nameindll,group,format) {ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), NULL, (__itt_group_id)(group)},
+#define ITT_STUBV ITT_STUB
+#include "ittnotify_static.h"
+ {NULL, NULL, NULL, NULL, __itt_group_none}
+};
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/* private, init thread info item. used for internal purposes */
+static __itt_thread_info init_thread_info = {
+ (const char*)NULL, /* nameA */
+#if defined(UNICODE) || defined(_UNICODE)
+ (const wchar_t*)NULL, /* nameW */
+#else
+ (void*)NULL, /* nameW */
+#endif
+ 0, /* tid */
+ __itt_thread_normal, /* state */
+ 0, /* extra1 */
+ (void*)NULL, /* extra2 */
+ (__itt_thread_info*)NULL /* next */
+};
+
+/* private, NULL domain item. used for internal purposes */
+static __itt_domain null_domain = {
+ 0, /* flags: disabled by default */
+ (const char*)NULL, /* nameA */
+#if defined(UNICODE) || defined(_UNICODE)
+ (const wchar_t*)NULL, /* nameW */
+#else
+ (void*)NULL, /* nameW */
+#endif
+ 0, /* extra1 */
+ (void*)NULL, /* extra2 */
+ (__itt_domain*)NULL /* next */
+};
+
+/* private, NULL string handle item. used for internal purposes */
+static __itt_string_handle null_string_handle = {
+ (const char*)NULL, /* strA */
+#if defined(UNICODE) || defined(_UNICODE)
+ (const wchar_t*)NULL, /* strW */
+#else
+ (void*)NULL, /* strW */
+#endif
+ 0, /* extra1 */
+ (void*)NULL, /* extra2 */
+ (__itt_string_handle*)NULL /* next */
+};
+
+static const char dll_path[PATH_MAX] = { 0 };
+
+/* static part descriptor which handles. all notification api attributes. */
+__itt_global _N_(_ittapi_global) = {
+ ITT_MAGIC, /* identification info */
+ ITT_MAJOR, ITT_MINOR, API_VERSION_BUILD, /* version info */
+ 0, /* api_initialized */
+ 0, /* mutex_initialized */
+ 0, /* atomic_counter */
+ MUTEX_INITIALIZER, /* mutex */
+ NULL, /* dynamic library handle */
+ NULL, /* error_handler */
+ (const char**)&dll_path, /* dll_path_ptr */
+ (__itt_api_info*)&api_list, /* api_list_ptr */
+ NULL, /* next __itt_global */
+ (__itt_thread_info*)&init_thread_info, /* thread_list */
+ (__itt_domain*)&null_domain, /* domain_list */
+ (__itt_string_handle*)&null_string_handle, /* string_list */
+ __itt_collection_normal /* collection state */
+};
+
+typedef void (__itt_api_init_t)(__itt_global*, __itt_group_id);
+typedef void (__itt_api_fini_t)(__itt_global*);
+
+/* ========================================================================= */
+
+#ifdef ITT_NOTIFY_EXT_REPORT
+ITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static void __itt_report_error(__itt_error_code code, ...)
+{
+ va_list args;
+ va_start(args, code);
+ if (_N_(_ittapi_global).error_handler != NULL)
+ {
+ __itt_error_handler_t* handler = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler;
+ handler(code, args);
+ }
+#ifdef ITT_NOTIFY_EXT_REPORT
+ _N_(error_handler)(code, args);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+ va_end(args);
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))(const wchar_t* name)
+{
+ __itt_domain *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init)))
+ return ITTNOTIFY_NAME(domain_createW)(name);
+ }
+
+ if (name == NULL)
+ return _N_(_ittapi_global).domain_list;
+
+ ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+ for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)
+ if (h->nameW != NULL && !wcscmp(h->nameW, name))
+ break;
+ if (h == NULL) {
+ NEW_DOMAIN_W(&_N_(_ittapi_global),h,h_tail,name);
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+ return h;
+}
+
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))(const char* name)
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+ __itt_domain *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ if (ITTNOTIFY_NAME(domain_createA) && ITTNOTIFY_NAME(domain_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init)))
+ return ITTNOTIFY_NAME(domain_createA)(name);
+#else
+ if (ITTNOTIFY_NAME(domain_create) && ITTNOTIFY_NAME(domain_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init)))
+ return ITTNOTIFY_NAME(domain_create)(name);
+#endif
+ }
+
+ if (name == NULL)
+ return _N_(_ittapi_global).domain_list;
+
+ ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+ for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)
+ if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name))
+ break;
+ if (h == NULL) {
+ NEW_DOMAIN_A(&_N_(_ittapi_global),h,h_tail,name);
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+ return h;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))(const wchar_t* name)
+{
+ __itt_string_handle *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init)))
+ return ITTNOTIFY_NAME(string_handle_createW)(name);
+ }
+
+ if (name == NULL)
+ return _N_(_ittapi_global).string_list;
+
+ ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+ for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)
+ if (h->strW != NULL && !wcscmp(h->strW, name))
+ break;
+ if (h == NULL) {
+ NEW_STRING_HANDLE_W(&_N_(_ittapi_global),h,h_tail,name);
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+ return h;
+}
+
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init))(const char* name)
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+ __itt_string_handle *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ if (ITTNOTIFY_NAME(string_handle_createA) && ITTNOTIFY_NAME(string_handle_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init)))
+ return ITTNOTIFY_NAME(string_handle_createA)(name);
+#else
+ if (ITTNOTIFY_NAME(string_handle_create) && ITTNOTIFY_NAME(string_handle_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init)))
+ return ITTNOTIFY_NAME(string_handle_create)(name);
+#endif
+ }
+
+ if (name == NULL)
+ return _N_(_ittapi_global).string_list;
+
+ ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+ for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)
+ if (h->strA != NULL && !__itt_fstrcmp(h->strA, name))
+ break;
+ if (h == NULL) {
+ NEW_STRING_HANDLE_A(&_N_(_ittapi_global),h,h_tail,name);
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+ return h;
+}
+
+/* -------------------------------------------------------------------------- */
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))(void)
+{
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init)))
+ {
+ ITTNOTIFY_NAME(pause)();
+ return;
+ }
+ }
+ _N_(_ittapi_global).state = __itt_collection_paused;
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))(void)
+{
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init)))
+ {
+ ITTNOTIFY_NAME(resume)();
+ return;
+ }
+ }
+ _N_(_ittapi_global).state = __itt_collection_normal;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(const wchar_t* name)
+{
+ TIDT tid = __itt_thread_id();
+ __itt_thread_info *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init)))
+ {
+ ITTNOTIFY_NAME(thread_set_nameW)(name);
+ return;
+ }
+ }
+
+ __itt_mutex_lock(&_N_(_ittapi_global).mutex);
+ for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
+ if (h->tid == tid)
+ break;
+ if (h == NULL) {
+ NEW_THREAD_INFO_W(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_normal, name);
+ }
+ else
+ {
+ h->nameW = name ? _wcsdup(name) : NULL;
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+}
+
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setW),_init))(const wchar_t* name, int namelen)
+{
+ namelen = namelen;
+ ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(name);
+ return 0;
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(const char* name)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+ TIDT tid = __itt_thread_id();
+ __itt_thread_info *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init)))
+ {
+ ITTNOTIFY_NAME(thread_set_nameA)(name);
+ return;
+ }
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init)))
+ {
+ ITTNOTIFY_NAME(thread_set_name)(name);
+ return;
+ }
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ }
+
+ __itt_mutex_lock(&_N_(_ittapi_global).mutex);
+ for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
+ if (h->tid == tid)
+ break;
+ if (h == NULL) {
+ NEW_THREAD_INFO_A(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_normal, name);
+ }
+ else
+ {
+ h->nameA = name ? __itt_fstrdup(name) : NULL;
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setA),_init))(const char* name, int namelen)
+{
+ namelen = namelen;
+ ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(name);
+ return 0;
+}
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char* name, int namelen)
+{
+ namelen = namelen;
+ ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(name);
+ return 0;
+}
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(void)
+{
+ TIDT tid = __itt_thread_id();
+ __itt_thread_info *h_tail, *h;
+
+ if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+ {
+ __itt_init_ittlib_name(NULL, __itt_group_all);
+ if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init)))
+ {
+ ITTNOTIFY_NAME(thread_ignore)();
+ return;
+ }
+ }
+
+ __itt_mutex_lock(&_N_(_ittapi_global).mutex);
+ for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
+ if (h->tid == tid)
+ break;
+ if (h == NULL) {
+ static const char* name = "unknown";
+ NEW_THREAD_INFO_A(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_ignored, name);
+ }
+ else
+ {
+ h->state = __itt_thread_ignored;
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_ignore),_init))(void)
+{
+ ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))();
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(enable_attach),_init))(void)
+{
+#ifdef __ANDROID__
+ /*
+ * if LIB_VAR_NAME env variable were set before then stay previous value
+ * else set default path
+ */
+ setenv(ITT_TO_STR(LIB_VAR_NAME), ANDROID_ITTNOTIFY_DEFAULT_PATH, 0);
+#endif
+}
+
+/* -------------------------------------------------------------------------- */
+
+static const char* __itt_fsplit(const char* s, const char* sep, const char** out, int* len)
+{
+ int i;
+ int j;
+
+ if (!s || !sep || !out || !len)
+ return NULL;
+
+ for (i = 0; s[i]; i++)
+ {
+ int b = 0;
+ for (j = 0; sep[j]; j++)
+ if (s[i] == sep[j])
+ {
+ b = 1;
+ break;
+ }
+ if (!b)
+ break;
+ }
+
+ if (!s[i])
+ return NULL;
+
+ *len = 0;
+ *out = &s[i];
+
+ for (; s[i]; i++, (*len)++)
+ {
+ int b = 0;
+ for (j = 0; sep[j]; j++)
+ if (s[i] == sep[j])
+ {
+ b = 1;
+ break;
+ }
+ if (b)
+ break;
+ }
+
+ for (; s[i]; i++)
+ {
+ int b = 0;
+ for (j = 0; sep[j]; j++)
+ if (s[i] == sep[j])
+ {
+ b = 1;
+ break;
+ }
+ if (!b)
+ break;
+ }
+
+ return &s[i];
+}
+
+/* This function return value of env variable that placed into static buffer.
+ * !!! The same static buffer is used for subsequent calls. !!!
+ * This was done to aviod dynamic allocation for few calls.
+ * Actually we need this function only four times.
+ */
+static const char* __itt_get_env_var(const char* name)
+{
+#define MAX_ENV_VALUE_SIZE 4086
+ static char env_buff[MAX_ENV_VALUE_SIZE];
+ static char* env_value = (char*)env_buff;
+
+ if (name != NULL)
+ {
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);
+ DWORD rc = GetEnvironmentVariableA(name, env_value, (DWORD)max_len);
+ if (rc >= max_len)
+ __itt_report_error(__itt_error_env_too_long, name, (size_t)rc - 1, (size_t)(max_len - 1));
+ else if (rc > 0)
+ {
+ const char* ret = (const char*)env_value;
+ env_value += rc + 1;
+ return ret;
+ }
+ else
+ {
+ /* If environment variable is empty, GetEnvirornmentVariables()
+ * returns zero (number of characters (not including terminating null),
+ * and GetLastError() returns ERROR_SUCCESS. */
+ DWORD err = GetLastError();
+ if (err == ERROR_SUCCESS)
+ return env_value;
+
+ if (err != ERROR_ENVVAR_NOT_FOUND)
+ __itt_report_error(__itt_error_cant_read_env, name, (int)err);
+ }
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ char* env = getenv(name);
+ if (env != NULL)
+ {
+ size_t len = strlen(env);
+ size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);
+ if (len < max_len)
+ {
+ const char* ret = (const char*)env_value;
+ strncpy(env_value, env, len + 1);
+ env_value += len + 1;
+ return ret;
+ } else
+ __itt_report_error(__itt_error_env_too_long, name, (size_t)len, (size_t)(max_len - 1));
+ }
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ }
+ return NULL;
+}
+
+static const char* __itt_get_lib_name(void)
+{
+ const char* lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));
+
+#ifdef __ANDROID__
+ if (lib_name == NULL)
+ {
+ const char* const system_wide_marker_filename = "/data/local/tmp/com.intel.itt.collector_lib";
+ int itt_marker_file_fd = open(system_wide_marker_filename, O_RDONLY);
+ ssize_t res = 0;
+
+ if (itt_marker_file_fd == -1)
+ {
+ const pid_t my_pid = getpid();
+ char cmdline_path[PATH_MAX] = {0};
+ char package_name[PATH_MAX] = {0};
+ char app_sandbox_file[PATH_MAX] = {0};
+ int cmdline_fd = 0;
+
+ ITT_ANDROID_LOGI("Unable to open system-wide marker file.");
+ snprintf(cmdline_path, PATH_MAX - 1, "/proc/%d/cmdline", my_pid);
+ ITT_ANDROID_LOGI("CMD file: %s\n", cmdline_path);
+ cmdline_fd = open(cmdline_path, O_RDONLY);
+ if (cmdline_fd == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to open %s file!", cmdline_path);
+ return lib_name;
+ }
+ res = read(cmdline_fd, package_name, PATH_MAX - 1);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to read %s file!", cmdline_path);
+ res = close(cmdline_fd);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to close %s file!", cmdline_path);
+ }
+ return lib_name;
+ }
+ res = close(cmdline_fd);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to close %s file!", cmdline_path);
+ return lib_name;
+ }
+ ITT_ANDROID_LOGI("Package name: %s\n", package_name);
+ snprintf(app_sandbox_file, PATH_MAX - 1, "/data/data/%s/com.intel.itt.collector_lib", package_name);
+ ITT_ANDROID_LOGI("Lib marker file name: %s\n", app_sandbox_file);
+ itt_marker_file_fd = open(app_sandbox_file, O_RDONLY);
+ if (itt_marker_file_fd == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to open app marker file!");
+ return lib_name;
+ }
+ }
+
+ {
+ char itt_lib_name[PATH_MAX] = {0};
+
+ res = read(itt_marker_file_fd, itt_lib_name, PATH_MAX - 1);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to read %s file!", itt_marker_file_fd);
+ res = close(itt_marker_file_fd);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to close %s file!", itt_marker_file_fd);
+ }
+ return lib_name;
+ }
+ ITT_ANDROID_LOGI("ITT Lib path: %s", itt_lib_name);
+ res = close(itt_marker_file_fd);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to close %s file!", itt_marker_file_fd);
+ return lib_name;
+ }
+ ITT_ANDROID_LOGI("Set env");
+ res = setenv(ITT_TO_STR(LIB_VAR_NAME), itt_lib_name, 0);
+ if (res == -1)
+ {
+ ITT_ANDROID_LOGE("Unable to set env var!");
+ return lib_name;
+ }
+ lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));
+ ITT_ANDROID_LOGI("ITT Lib path from env: %s", itt_lib_name);
+ }
+ }
+#endif
+
+ return lib_name;
+}
+
+#ifndef min
+#define min(a,b) (a) < (b) ? (a) : (b)
+#endif /* min */
+
+static __itt_group_id __itt_get_groups(void)
+{
+ register int i;
+ __itt_group_id res = __itt_group_none;
+ const char* var_name = "INTEL_ITTNOTIFY_GROUPS";
+ const char* group_str = __itt_get_env_var(var_name);
+
+ if (group_str != NULL)
+ {
+ int len;
+ char gr[255];
+ const char* chunk;
+ while ((group_str = __itt_fsplit(group_str, ",; ", &chunk, &len)) != NULL)
+ {
+ __itt_fstrcpyn(gr, chunk, sizeof(gr) - 1);
+ gr[min(len, (int)(sizeof(gr) - 1))] = 0;
+
+ for (i = 0; group_list[i].name != NULL; i++)
+ {
+ if (!__itt_fstrcmp(gr, group_list[i].name))
+ {
+ res = (__itt_group_id)(res | group_list[i].id);
+ break;
+ }
+ }
+ }
+ /* TODO: !!! Workaround for bug with warning for unknown group !!!
+ * Should be fixed in new initialization scheme.
+ * Now the following groups should be set always. */
+ for (i = 0; group_list[i].id != __itt_group_none; i++)
+ if (group_list[i].id != __itt_group_all &&
+ group_list[i].id > __itt_group_splitter_min &&
+ group_list[i].id < __itt_group_splitter_max)
+ res = (__itt_group_id)(res | group_list[i].id);
+ return res;
+ }
+ else
+ {
+ for (i = 0; group_alias[i].env_var != NULL; i++)
+ if (__itt_get_env_var(group_alias[i].env_var) != NULL)
+ return group_alias[i].groups;
+ }
+
+ return res;
+}
+
+static int __itt_lib_version(lib_t lib)
+{
+ if (lib == NULL)
+ return 0;
+ if (__itt_get_proc(lib, "__itt_api_init"))
+ return 2;
+ if (__itt_get_proc(lib, "__itt_api_version"))
+ return 1;
+ return 0;
+}
+
+/* It's not used right now! Comment it out to avoid warnings.
+static void __itt_reinit_all_pointers(void)
+{
+ register int i;
+ // Fill all pointers with initial stubs
+ for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].init_func;
+}
+*/
+
+static void __itt_nullify_all_pointers(void)
+{
+ register int i;
+ /* Nulify all pointers except domain_create and string_handle_create */
+ for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */
+#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_EXTERN_C void _N_(fini_ittlib)(void)
+{
+ __itt_api_fini_t* __itt_api_fini_ptr;
+ static volatile TIDT current_thread = 0;
+
+ if (_N_(_ittapi_global).api_initialized)
+ {
+ __itt_mutex_lock(&_N_(_ittapi_global).mutex);
+ if (_N_(_ittapi_global).api_initialized)
+ {
+ if (current_thread == 0)
+ {
+ current_thread = __itt_thread_id();
+ __itt_api_fini_ptr = (__itt_api_fini_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, "__itt_api_fini");
+ if (__itt_api_fini_ptr)
+ __itt_api_fini_ptr(&_N_(_ittapi_global));
+
+ __itt_nullify_all_pointers();
+
+ /* TODO: !!! not safe !!! don't support unload so far.
+ * if (_N_(_ittapi_global).lib != NULL)
+ * __itt_unload_lib(_N_(_ittapi_global).lib);
+ * _N_(_ittapi_global).lib = NULL;
+ */
+ _N_(_ittapi_global).api_initialized = 0;
+ current_thread = 0;
+ }
+ }
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+ }
+}
+
+ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_groups)
+{
+ register int i;
+ __itt_group_id groups;
+#ifdef ITT_COMPLETE_GROUP
+ __itt_group_id zero_group = __itt_group_none;
+#endif /* ITT_COMPLETE_GROUP */
+ static volatile TIDT current_thread = 0;
+
+ if (!_N_(_ittapi_global).api_initialized)
+ {
+#ifndef ITT_SIMPLE_INIT
+ ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+#endif /* ITT_SIMPLE_INIT */
+
+ if (!_N_(_ittapi_global).api_initialized)
+ {
+ if (current_thread == 0)
+ {
+ current_thread = __itt_thread_id();
+ _N_(_ittapi_global).thread_list->tid = current_thread;
+ if (lib_name == NULL)
+ lib_name = __itt_get_lib_name();
+ groups = __itt_get_groups();
+ if (groups != __itt_group_none || lib_name != NULL)
+ {
+ _N_(_ittapi_global).lib = __itt_load_lib((lib_name == NULL) ? ittnotify_lib_name : lib_name);
+
+ if (_N_(_ittapi_global).lib != NULL)
+ {
+ __itt_api_init_t* __itt_api_init_ptr;
+ int lib_version = __itt_lib_version(_N_(_ittapi_global).lib);
+
+ switch (lib_version) {
+ case 0:
+ groups = __itt_group_legacy;
+ case 1:
+ /* Fill all pointers from dynamic library */
+ for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+ {
+ if (_N_(_ittapi_global).api_list_ptr[i].group & groups & init_groups)
+ {
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = (void*)__itt_get_proc(_N_(_ittapi_global).lib, _N_(_ittapi_global).api_list_ptr[i].name);
+ if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr == NULL)
+ {
+ /* Restore pointers for function with static implementation */
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
+ __itt_report_error(__itt_error_no_symbol, lib_name, _N_(_ittapi_global).api_list_ptr[i].name);
+#ifdef ITT_COMPLETE_GROUP
+ zero_group = (__itt_group_id)(zero_group | _N_(_ittapi_global).api_list_ptr[i].group);
+#endif /* ITT_COMPLETE_GROUP */
+ }
+ }
+ else
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
+ }
+
+ if (groups == __itt_group_legacy)
+ {
+ /* Compatibility with legacy tools */
+ ITTNOTIFY_NAME(thread_ignore) = ITTNOTIFY_NAME(thr_ignore);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ ITTNOTIFY_NAME(sync_createA) = ITTNOTIFY_NAME(sync_set_nameA);
+ ITTNOTIFY_NAME(sync_createW) = ITTNOTIFY_NAME(sync_set_nameW);
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ ITTNOTIFY_NAME(sync_create) = ITTNOTIFY_NAME(sync_set_name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ ITTNOTIFY_NAME(sync_prepare) = ITTNOTIFY_NAME(notify_sync_prepare);
+ ITTNOTIFY_NAME(sync_cancel) = ITTNOTIFY_NAME(notify_sync_cancel);
+ ITTNOTIFY_NAME(sync_acquired) = ITTNOTIFY_NAME(notify_sync_acquired);
+ ITTNOTIFY_NAME(sync_releasing) = ITTNOTIFY_NAME(notify_sync_releasing);
+ }
+
+#ifdef ITT_COMPLETE_GROUP
+ for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+ if (_N_(_ittapi_global).api_list_ptr[i].group & zero_group)
+ *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
+#endif /* ITT_COMPLETE_GROUP */
+ break;
+ case 2:
+ __itt_api_init_ptr = (__itt_api_init_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, "__itt_api_init");
+ if (__itt_api_init_ptr)
+ __itt_api_init_ptr(&_N_(_ittapi_global), init_groups);
+ break;
+ }
+ }
+ else
+ {
+ __itt_nullify_all_pointers();
+
+ __itt_report_error(__itt_error_no_module, lib_name,
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ __itt_system_error()
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ dlerror()
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ );
+ }
+ }
+ else
+ {
+ __itt_nullify_all_pointers();
+ }
+ _N_(_ittapi_global).api_initialized = 1;
+ current_thread = 0;
+ /* !!! Just to avoid unused code elimination !!! */
+ if (__itt_fini_ittlib_ptr == _N_(fini_ittlib)) current_thread = 0;
+ }
+ }
+
+#ifndef ITT_SIMPLE_INIT
+ __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+#endif /* ITT_SIMPLE_INIT */
+ }
+
+ /* Evaluating if any function ptr is non empty and it's in init_groups */
+ for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+ if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr != _N_(_ittapi_global).api_list_ptr[i].null_func &&
+ _N_(_ittapi_global).api_list_ptr[i].group & init_groups)
+ return 1;
+ return 0;
+}
+
+ITT_EXTERN_C __itt_error_handler_t* _N_(set_error_handler)(__itt_error_handler_t* handler)
+{
+ __itt_error_handler_t* prev = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler;
+ _N_(_ittapi_global).error_handler = (void*)(size_t)handler;
+ return prev;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
diff --git a/final/runtime/src/thirdparty/ittnotify/ittnotify_static.h b/final/runtime/src/thirdparty/ittnotify/ittnotify_static.h
new file mode 100644
index 0000000..a218cc8
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/ittnotify_static.h
@@ -0,0 +1,316 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ittnotify_config.h"
+
+#ifndef ITT_FORMAT_DEFINED
+# ifndef ITT_FORMAT
+# define ITT_FORMAT
+# endif /* ITT_FORMAT */
+# ifndef ITT_NO_PARAMS
+# define ITT_NO_PARAMS
+# endif /* ITT_NO_PARAMS */
+#endif /* ITT_FORMAT_DEFINED */
+
+/*
+ * parameters for macro expected:
+ * ITT_STUB(api, type, func_name, arguments, params, func_name_in_dll, group, printf_fmt)
+ */
+#ifdef __ITT_INTERNAL_INIT
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char *name), (ITT_FORMAT name), domain_createA, __itt_group_structure, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name), (ITT_FORMAT name), domain_createW, __itt_group_structure, "\"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_domain*, domain_create, (const char *name), (ITT_FORMAT name), domain_create, __itt_group_structure, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char *name), (ITT_FORMAT name), string_handle_createA, __itt_group_structure, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name), (ITT_FORMAT name), string_handle_createW, __itt_group_structure, "\"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create, (const char *name), (ITT_FORMAT name), string_handle_create, __itt_group_structure, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(ITTAPI, void, pause, (void), (ITT_NO_PARAMS), pause, __itt_group_control | __itt_group_legacy, "no args")
+ITT_STUBV(ITTAPI, void, resume, (void), (ITT_NO_PARAMS), resume, __itt_group_control | __itt_group_legacy, "no args")
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char *name), (ITT_FORMAT name), thread_set_nameA, __itt_group_thread, "\"%s\"")
+ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name), (ITT_FORMAT name), thread_set_nameW, __itt_group_thread, "\"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, thread_set_name, (const char *name), (ITT_FORMAT name), thread_set_name, __itt_group_thread, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, thread_ignore, (void), (ITT_NO_PARAMS), thread_ignore, __itt_group_thread, "no args")
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setA, __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
+ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setW, __itt_group_thread | __itt_group_legacy, "\"%S\", %d")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int, thr_name_set, (const char *name, int namelen), (ITT_FORMAT name, namelen), thr_name_set, __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(LIBITTAPI, void, thr_ignore, (void), (ITT_NO_PARAMS), thr_ignore, __itt_group_thread | __itt_group_legacy, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+
+ITT_STUBV(ITTAPI, void, enable_attach, (void), (ITT_NO_PARAMS), enable_attach, __itt_group_all, "no args")
+
+#else /* __ITT_INTERNAL_INIT */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x")
+ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\", \"%S\", %x")
+ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char *name), (ITT_FORMAT addr, name), sync_renameA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\"")
+ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name), (ITT_FORMAT addr, name), sync_renameW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_create, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_create, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x")
+ITT_STUBV(ITTAPI, void, sync_rename, (void *addr, const char *name), (ITT_FORMAT addr, name), sync_rename, __itt_group_sync | __itt_group_fsync, "%p, \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr), (ITT_FORMAT addr), sync_destroy, __itt_group_sync | __itt_group_fsync, "%p")
+
+ITT_STUBV(ITTAPI, void, sync_prepare, (void* addr), (ITT_FORMAT addr), sync_prepare, __itt_group_sync, "%p")
+ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr), (ITT_FORMAT addr), sync_cancel, __itt_group_sync, "%p")
+ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr), (ITT_FORMAT addr), sync_acquired, __itt_group_sync, "%p")
+ITT_STUBV(ITTAPI, void, sync_releasing, (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_sync, "%p")
+
+ITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask), (ITT_FORMAT mask), suppress_push, __itt_group_suppress, "%p")
+ITT_STUBV(ITTAPI, void, suppress_pop, (void), (ITT_NO_PARAMS), suppress_pop, __itt_group_suppress, "no args")
+ITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_mark_range, __itt_group_suppress, "%d, %p, %p, %d")
+ITT_STUBV(ITTAPI, void, suppress_clear_range,(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_clear_range,__itt_group_suppress, "%d, %p, %p, %d")
+
+ITT_STUBV(ITTAPI, void, fsync_prepare, (void* addr), (ITT_FORMAT addr), sync_prepare, __itt_group_fsync, "%p")
+ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr), (ITT_FORMAT addr), sync_cancel, __itt_group_fsync, "%p")
+ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr), (ITT_FORMAT addr), sync_acquired, __itt_group_fsync, "%p")
+ITT_STUBV(ITTAPI, void, fsync_releasing, (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_fsync, "%p")
+
+ITT_STUBV(ITTAPI, void, model_site_begin, (__itt_model_site *site, __itt_model_site_instance *instance, const char *name), (ITT_FORMAT site, instance, name), model_site_begin, __itt_group_model, "%p, %p, \"%s\"")
+ITT_STUBV(ITTAPI, void, model_site_end, (__itt_model_site *site, __itt_model_site_instance *instance), (ITT_FORMAT site, instance), model_site_end, __itt_group_model, "%p, %p")
+ITT_STUBV(ITTAPI, void, model_task_begin, (__itt_model_task *task, __itt_model_task_instance *instance, const char *name), (ITT_FORMAT task, instance, name), model_task_begin, __itt_group_model, "%p, %p, \"%s\"")
+ITT_STUBV(ITTAPI, void, model_task_end, (__itt_model_task *task, __itt_model_task_instance *instance), (ITT_FORMAT task, instance), model_task_end, __itt_group_model, "%p, %p")
+ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock), (ITT_FORMAT lock), model_lock_acquire, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock), (ITT_FORMAT lock), model_lock_release, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_record_allocation, (void *addr, size_t size), (ITT_FORMAT addr, size), model_record_allocation, __itt_group_model, "%p, %d")
+ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr), (ITT_FORMAT addr), model_record_deallocation, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_induction_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_induction_uses, __itt_group_model, "%p, %d")
+ITT_STUBV(ITTAPI, void, model_reduction_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_reduction_uses, __itt_group_model, "%p, %d")
+ITT_STUBV(ITTAPI, void, model_observe_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_observe_uses, __itt_group_model, "%p, %d")
+ITT_STUBV(ITTAPI, void, model_clear_uses, (void* addr), (ITT_FORMAT addr), model_clear_uses, __itt_group_model, "%p")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, model_site_beginW, (const wchar_t *name), (ITT_FORMAT name), model_site_beginW, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_task_beginW, (const wchar_t *name), (ITT_FORMAT name), model_task_beginW, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_iteration_taskW, (const wchar_t *name), (ITT_FORMAT name), model_iteration_taskW, __itt_group_model, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, model_site_beginA, (const char *name), (ITT_FORMAT name), model_site_beginA, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_site_beginAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_site_beginAL, __itt_group_model, "\"%s\", %d")
+ITT_STUBV(ITTAPI, void, model_task_beginA, (const char *name), (ITT_FORMAT name), model_task_beginA, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_task_beginAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_task_beginAL, __itt_group_model, "\"%s\", %d")
+ITT_STUBV(ITTAPI, void, model_iteration_taskA, (const char *name), (ITT_FORMAT name), model_iteration_taskA, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_iteration_taskAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_iteration_taskAL, __itt_group_model, "\"%s\", %d")
+ITT_STUBV(ITTAPI, void, model_site_end_2, (void), (ITT_NO_PARAMS), model_site_end_2, __itt_group_model, "no args")
+ITT_STUBV(ITTAPI, void, model_task_end_2, (void), (ITT_NO_PARAMS), model_task_end_2, __itt_group_model, "no args")
+ITT_STUBV(ITTAPI, void, model_lock_acquire_2, (void *lock), (ITT_FORMAT lock), model_lock_acquire_2, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_lock_release_2, (void *lock), (ITT_FORMAT lock), model_lock_release_2, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_aggregate_task, (size_t count), (ITT_FORMAT count), model_aggregate_task, __itt_group_model, "%d")
+ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x), (ITT_FORMAT x), model_disable_push, __itt_group_model, "%p")
+ITT_STUBV(ITTAPI, void, model_disable_pop, (void), (ITT_NO_PARAMS), model_disable_pop, __itt_group_model, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char *name, const char *domain), (ITT_FORMAT name, domain), heap_function_createA, __itt_group_heap, "\"%s\", \"%s\"")
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), heap_function_createW, __itt_group_heap, "\"%s\", \"%s\"")
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create, (const char *name, const char *domain), (ITT_FORMAT name, domain), heap_function_create, __itt_group_heap, "\"%s\", \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized), (ITT_FORMAT h, size, initialized), heap_allocate_begin, __itt_group_heap, "%p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized), (ITT_FORMAT h, addr, size, initialized), heap_allocate_end, __itt_group_heap, "%p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_begin, __itt_group_heap, "%p, %p")
+ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_end, __itt_group_heap, "%p, %p")
+ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_size, initialized), heap_reallocate_begin, __itt_group_heap, "%p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_addr, new_size, initialized), heap_reallocate_end, __itt_group_heap, "%p, %p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void), (ITT_NO_PARAMS), heap_internal_access_begin, __itt_group_heap, "no args")
+ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void), (ITT_NO_PARAMS), heap_internal_access_end, __itt_group_heap, "no args")
+ITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin, (void), (ITT_NO_PARAMS), heap_record_memory_growth_begin, __itt_group_heap, "no args")
+ITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void), (ITT_NO_PARAMS), heap_record_memory_growth_end, __itt_group_heap, "no args")
+ITT_STUBV(ITTAPI, void, heap_reset_detection, (unsigned int reset_mask), (ITT_FORMAT reset_mask), heap_reset_detection, __itt_group_heap, "%u")
+ITT_STUBV(ITTAPI, void, heap_record, (unsigned int record_mask), (ITT_FORMAT record_mask), heap_record, __itt_group_heap, "%u")
+
+ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_create, __itt_group_structure, "%p, %lu")
+ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_destroy, __itt_group_structure, "%p, %lu")
+
+ITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void), (ITT_NO_PARAMS), get_timestamp, __itt_group_structure, "no args")
+
+ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), region_begin, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, region_end, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), region_end, __itt_group_structure, "%p, %lu")
+
+#ifndef __ITT_INTERNAL_BODY
+ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_begin_v3, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, frame_end_v3, (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_end_v3, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end), (ITT_FORMAT domain, id, begin, end), frame_submit_v3, __itt_group_structure, "%p, %p, %lu, %lu")
+#endif /* __ITT_INTERNAL_BODY */
+
+ITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_group, __itt_group_structure, "%p, %lu, %lu, %p")
+
+ITT_STUBV(ITTAPI, void, task_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parent, void* fn), (ITT_FORMAT domain, id, parent, fn), task_begin_fn, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end, (const __itt_domain *domain), (ITT_FORMAT domain), task_end, __itt_group_structure, "%p")
+
+ITT_STUBV(ITTAPI, void, counter_inc_v3, (const __itt_domain *domain, __itt_string_handle *name), (ITT_FORMAT domain, name), counter_inc_v3, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long value), (ITT_FORMAT domain, name, value), counter_inc_delta_v3, __itt_group_structure, "%p, %p, %lu")
+
+ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, id, name, scope), marker, __itt_group_structure, "%p, %lu, %p, %d")
+
+ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, id, key, type, count, data), metadata_add, __itt_group_structure, "%p, %lu, %p, %d, %lu, %p")
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addA, __itt_group_structure, "%p, %lu, %p, %p, %lu")
+ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addW, __itt_group_structure, "%p, %lu, %p, %p, %lu")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_add, __itt_group_structure, "%p, %lu, %p, %p, %lu")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, relation, tail), relation_add_to_current, __itt_group_structure, "%p, %lu, %p")
+ITT_STUBV(ITTAPI, void, relation_add, (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, head, relation, tail), relation_add, __itt_group_structure, "%p, %p, %lu, %p")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen), (ITT_FORMAT name, namelen), event_createA, __itt_group_mark | __itt_group_legacy, "\"%s\", %d")
+ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), event_createW, __itt_group_mark | __itt_group_legacy, "\"%S\", %d")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen), (ITT_FORMAT name, namelen), event_create, __itt_group_mark | __itt_group_legacy, "\"%s\", %d")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event), (ITT_FORMAT event), event_start, __itt_group_mark | __itt_group_legacy, "%d")
+ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event), (ITT_FORMAT event), event_end, __itt_group_mark | __itt_group_legacy, "%d")
+#endif /* __ITT_INTERNAL_BODY */
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", \"%s\", %x")
+ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%S\", \"%S\", %x")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_set_name, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_name, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "p, \"%s\", \"%s\", %x")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *p, const char *objtype, int typelen, const char *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", %d, \"%s\", %d, %x")
+ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *p, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%S\", %d, \"%S\", %d, %x")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int, notify_sync_name, (void *p, const char *objtype, int typelen, const char *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_name, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", %d, \"%s\", %d, %x")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *p), (ITT_FORMAT p), notify_sync_prepare, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p")
+ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *p), (ITT_FORMAT p), notify_sync_cancel, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p")
+ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *p), (ITT_FORMAT p), notify_sync_acquired, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p")
+ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *p), (ITT_FORMAT p), notify_sync_releasing, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p")
+#endif /* __ITT_INTERNAL_BODY */
+
+ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_read, __itt_group_legacy, "%p, %lu")
+ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_write, __itt_group_legacy, "%p, %lu")
+ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_update, __itt_group_legacy, "%p, %lu")
+
+ITT_STUB(LIBITTAPI, __itt_state_t, state_get, (void), (ITT_NO_PARAMS), state_get, __itt_group_legacy, "no args")
+ITT_STUB(LIBITTAPI, __itt_state_t, state_set, (__itt_state_t s), (ITT_FORMAT s), state_set, __itt_group_legacy, "%d")
+ITT_STUB(LIBITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s), (ITT_FORMAT p, s), obj_mode_set, __itt_group_legacy, "%d, %d")
+ITT_STUB(LIBITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s), (ITT_FORMAT p, s), thr_mode_set, __itt_group_legacy, "%d, %d")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char *domain), (ITT_FORMAT domain), frame_createA, __itt_group_frame, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (ITT_FORMAT domain), frame_createW, __itt_group_frame, "\"%s\"")
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_frame, frame_create, (const char *domain), (ITT_FORMAT domain), frame_create, __itt_group_frame, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame), (ITT_FORMAT frame), frame_begin, __itt_group_frame, "%p")
+ITT_STUBV(ITTAPI, void, frame_end, (__itt_frame frame), (ITT_FORMAT frame), frame_end, __itt_group_frame, "%p")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char *name, const char *domain), (ITT_FORMAT name, domain), counter_createA, __itt_group_counter, "\"%s\", \"%s\"")
+ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), counter_createW, __itt_group_counter, "\"%s\", \"%s\"")
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_counter, counter_create, (const char *name, const char *domain), (ITT_FORMAT name, domain), counter_create, __itt_group_counter, "\"%s\", \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id), (ITT_FORMAT id), counter_destroy, __itt_group_counter, "%p")
+ITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id), (ITT_FORMAT id), counter_inc, __itt_group_counter, "%p")
+ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_inc_delta, __itt_group_counter, "%p, %lu")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char *name), (ITT_FORMAT name), mark_createA, __itt_group_mark, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name), (ITT_FORMAT name), mark_createW, __itt_group_mark, "\"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_mark_type, mark_create, (const char *name), (ITT_FORMAT name), mark_create, __itt_group_mark, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), markA, __itt_group_mark, "%d, \"%s\"")
+ITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), markW, __itt_group_mark, "%d, \"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark, __itt_group_mark, "%d, \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt), (ITT_FORMAT mt), mark_off, __itt_group_mark, "%d")
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark_globalA, __itt_group_mark, "%d, \"%s\"")
+ITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), mark_globalW, __itt_group_mark, "%d, \"%S\"")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark_global, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark_global, __itt_group_mark, "%d, \"%S\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt), (ITT_FORMAT mt), mark_global_off, __itt_group_mark, "%d")
+
+#ifndef __ITT_INTERNAL_BODY
+ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void), (ITT_NO_PARAMS), stack_caller_create, __itt_group_stitch, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id), (ITT_FORMAT id), stack_caller_destroy, __itt_group_stitch, "%p")
+ITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id), (ITT_FORMAT id), stack_callee_enter, __itt_group_stitch, "%p")
+ITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id), (ITT_FORMAT id), stack_callee_leave, __itt_group_stitch, "%p")
+
+ITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data), (ITT_FORMAT fn, fn_data), clock_domain_create, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, clock_domain_reset, (void), (ITT_NO_PARAMS), clock_domain_reset, __itt_group_structure, "no args")
+ITT_STUBV(ITTAPI, void, id_create_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_create_ex, __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_destroy_ex, __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, task_begin_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, fn), task_begin_fn_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp), (ITT_FORMAT domain, clock_domain, timestamp), task_end_ex, __itt_group_structure, "%p, %p, %lu")
+ITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin_overlapped, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), task_end_overlapped, __itt_group_structure, "%p, %lu")
+ITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), task_end_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, clock_domain, timestamp, id, name, scope), marker_ex, __itt_group_structure, "%p, %p, %lu, %lu, %p, %d")
+ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, scope, key, type, count, data), metadata_add_with_scope, __itt_group_structure, "%p, %d, %p, %d, %lu, %p")
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeA, __itt_group_structure, "%p, %d, %p, %p, %lu")
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeW, __itt_group_structure, "%p, %d, %p, %p, %lu")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scope, __itt_group_structure, "%p, %d, %p, %p, %lu")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, relation, tail), relation_add_to_current_ex, __itt_group_structure, "%p, %p, %lu, %d, %lu")
+ITT_STUBV(ITTAPI, void, relation_add_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, head, relation, tail), relation_add_ex, __itt_group_structure, "%p, %p, %lu, %lu, %d, %lu")
+ITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type), (ITT_FORMAT name, track_group_type), track_group_create, __itt_group_structure, "%p, %d")
+ITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type), (ITT_FORMAT track_group, name, track_type), track_create, __itt_group_structure, "%p, %p, %d")
+ITT_STUBV(ITTAPI, void, set_track, (__itt_track *track), (ITT_FORMAT track), set_track, __itt_group_structure, "%p")
+
+#ifndef __ITT_INTERNAL_BODY
+ITT_STUB(ITTAPI, const char*, api_version, (void), (ITT_NO_PARAMS), api_version, __itt_group_all & ~__itt_group_legacy, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveA, __itt_group_arrays, "%p, %d, %p, %d, \"%s\", %d")
+ITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveW, __itt_group_arrays, "%p, %d, %p, %d, \"%S\", %d")
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, av_save, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_save, __itt_group_arrays, "%p, %d, %p, %d, \"%s\", %d")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+
+#endif /* __ITT_INTERNAL_INIT */
diff --git a/final/runtime/src/thirdparty/ittnotify/ittnotify_types.h b/final/runtime/src/thirdparty/ittnotify/ittnotify_types.h
new file mode 100644
index 0000000..3695a67
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/ittnotify_types.h
@@ -0,0 +1,67 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _ITTNOTIFY_TYPES_H_
+#define _ITTNOTIFY_TYPES_H_
+
+typedef enum ___itt_group_id
+{
+ __itt_group_none = 0,
+ __itt_group_legacy = 1<<0,
+ __itt_group_control = 1<<1,
+ __itt_group_thread = 1<<2,
+ __itt_group_mark = 1<<3,
+ __itt_group_sync = 1<<4,
+ __itt_group_fsync = 1<<5,
+ __itt_group_jit = 1<<6,
+ __itt_group_model = 1<<7,
+ __itt_group_splitter_min = 1<<7,
+ __itt_group_counter = 1<<8,
+ __itt_group_frame = 1<<9,
+ __itt_group_stitch = 1<<10,
+ __itt_group_heap = 1<<11,
+ __itt_group_splitter_max = 1<<12,
+ __itt_group_structure = 1<<12,
+ __itt_group_suppress = 1<<13,
+ __itt_group_arrays = 1<<14,
+ __itt_group_all = -1
+} __itt_group_id;
+
+#pragma pack(push, 8)
+
+typedef struct ___itt_group_list
+{
+ __itt_group_id id;
+ const char* name;
+} __itt_group_list;
+
+#pragma pack(pop)
+
+#define ITT_GROUP_LIST(varname) \
+ static __itt_group_list varname[] = { \
+ { __itt_group_all, "all" }, \
+ { __itt_group_control, "control" }, \
+ { __itt_group_thread, "thread" }, \
+ { __itt_group_mark, "mark" }, \
+ { __itt_group_sync, "sync" }, \
+ { __itt_group_fsync, "fsync" }, \
+ { __itt_group_jit, "jit" }, \
+ { __itt_group_model, "model" }, \
+ { __itt_group_counter, "counter" }, \
+ { __itt_group_frame, "frame" }, \
+ { __itt_group_stitch, "stitch" }, \
+ { __itt_group_heap, "heap" }, \
+ { __itt_group_structure, "structure" }, \
+ { __itt_group_suppress, "suppress" }, \
+ { __itt_group_arrays, "arrays" }, \
+ { __itt_group_none, NULL } \
+ }
+
+#endif /* _ITTNOTIFY_TYPES_H_ */
diff --git a/final/runtime/src/thirdparty/ittnotify/legacy/ittnotify.h b/final/runtime/src/thirdparty/ittnotify/legacy/ittnotify.h
new file mode 100644
index 0000000..5ec2c0b
--- /dev/null
+++ b/final/runtime/src/thirdparty/ittnotify/legacy/ittnotify.h
@@ -0,0 +1,972 @@
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LEGACY_ITTNOTIFY_H_
+#define _LEGACY_ITTNOTIFY_H_
+
+/**
+ * @file
+ * @brief Legacy User API functions and types
+ */
+
+/** @cond exclude_from_documentation */
+#ifndef ITT_OS_WIN
+# define ITT_OS_WIN 1
+#endif /* ITT_OS_WIN */
+
+#ifndef ITT_OS_LINUX
+# define ITT_OS_LINUX 2
+#endif /* ITT_OS_LINUX */
+
+#ifndef ITT_OS_MAC
+# define ITT_OS_MAC 3
+#endif /* ITT_OS_MAC */
+
+#ifndef ITT_OS
+# if defined WIN32 || defined _WIN32
+# define ITT_OS ITT_OS_WIN
+# elif defined( __APPLE__ ) && defined( __MACH__ )
+# define ITT_OS ITT_OS_MAC
+# else
+# define ITT_OS ITT_OS_LINUX
+# endif
+#endif /* ITT_OS */
+
+#ifndef ITT_PLATFORM_WIN
+# define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */
+
+#ifndef ITT_PLATFORM_POSIX
+# define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM_MAC
+# define ITT_PLATFORM_MAC 3
+#endif /* ITT_PLATFORM_MAC */
+
+#ifndef ITT_PLATFORM
+# if ITT_OS==ITT_OS_WIN
+# define ITT_PLATFORM ITT_PLATFORM_WIN
+# elif ITT_OS==ITT_OS_MAC
+# define ITT_PLATFORM ITT_PLATFORM_MAC
+# else
+# define ITT_PLATFORM ITT_PLATFORM_POSIX
+# endif
+#endif /* ITT_PLATFORM */
+
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
+#include <stddef.h>
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <tchar.h>
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifndef CDECL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define CDECL __cdecl
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define CDECL __attribute__ ((cdecl))
+# else /* _M_IX86 || __i386__ */
+# define CDECL /* actual only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+#ifndef STDCALL
+# if ITT_PLATFORM==ITT_PLATFORM_WIN
+# define STDCALL __stdcall
+# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+# if defined _M_IX86 || defined __i386__
+# define STDCALL __attribute__ ((stdcall))
+# else /* _M_IX86 || __i386__ */
+# define STDCALL /* supported only on x86 platform */
+# endif /* _M_IX86 || __i386__ */
+# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* STDCALL */
+
+#define ITTAPI CDECL
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL CDECL
+#define LIBITTAPI_CALL CDECL
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define ITT_INLINE __forceinline
+#define ITT_INLINE_ATTRIBUTE /* nothing */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define ITT_INLINE static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
+#else /* __STRICT_ANSI__ */
+#define ITT_INLINE static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
+#endif /* __STRICT_ANSI__ */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+/* Helper macro for joining tokens */
+#define ITT_JOIN_AUX(p,n) p##n
+#define ITT_JOIN(p,n) ITT_JOIN_AUX(p,n)
+
+#ifdef ITT_MAJOR
+#undef ITT_MAJOR
+#endif
+#ifdef ITT_MINOR
+#undef ITT_MINOR
+#endif
+#define ITT_MAJOR 3
+#define ITT_MINOR 0
+
+/* Standard versioning of a token with major and minor version numbers */
+#define ITT_VERSIONIZE(x) \
+ ITT_JOIN(x, \
+ ITT_JOIN(_, \
+ ITT_JOIN(ITT_MAJOR, \
+ ITT_JOIN(_, ITT_MINOR))))
+
+#ifndef INTEL_ITTNOTIFY_PREFIX
+# define INTEL_ITTNOTIFY_PREFIX __itt_
+#endif /* INTEL_ITTNOTIFY_PREFIX */
+#ifndef INTEL_ITTNOTIFY_POSTFIX
+# define INTEL_ITTNOTIFY_POSTFIX _ptr_
+#endif /* INTEL_ITTNOTIFY_POSTFIX */
+
+#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
+#define ITTNOTIFY_NAME(n) ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
+
+#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
+#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)
+
+#define ITTNOTIFY_VOID_D0(n,d) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_VOID_D1(n,d,x) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_VOID_D2(n,d,x,y) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+#define ITTNOTIFY_DATA_D0(n,d) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_DATA_D1(n,d,x) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_DATA_D2(n,d,x,y) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+
+#ifdef ITT_STUB
+#undef ITT_STUB
+#endif
+#ifdef ITT_STUBV
+#undef ITT_STUBV
+#endif
+#define ITT_STUBV(api,type,name,args) \
+ typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args; \
+ extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
+#define ITT_STUB ITT_STUBV
+/** @endcond */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup legacy Legacy API
+ * @{
+ * @}
+ */
+
+/**
+ * @defgroup legacy_control Collection Control
+ * @ingroup legacy
+ * General behavior: application continues to run, but no profiling information is being collected
+ *
+ * Pausing occurs not only for the current thread but for all process as well as spawned processes
+ * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:
+ * - Does not analyze or report errors that involve memory access.
+ * - Other errors are reported as usual. Pausing data collection in
+ * Intel(R) Parallel Inspector and Intel(R) Inspector XE
+ * only pauses tracing and analyzing memory access.
+ * It does not pause tracing or analyzing threading APIs.
+ * .
+ * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:
+ * - Does continue to record when new threads are started.
+ * .
+ * - Other effects:
+ * - Possible reduction of runtime overhead.
+ * .
+ * @{
+ */
+#ifndef _ITTNOTIFY_H_
+/** @brief Pause collection */
+void ITTAPI __itt_pause(void);
+/** @brief Resume collection */
+void ITTAPI __itt_resume(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, pause, (void))
+ITT_STUBV(ITTAPI, void, resume, (void))
+#define __itt_pause ITTNOTIFY_VOID(pause)
+#define __itt_pause_ptr ITTNOTIFY_NAME(pause)
+#define __itt_resume ITTNOTIFY_VOID(resume)
+#define __itt_resume_ptr ITTNOTIFY_NAME(resume)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_pause()
+#define __itt_pause_ptr 0
+#define __itt_resume()
+#define __itt_resume_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_pause_ptr 0
+#define __itt_resume_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+#endif /* _ITTNOTIFY_H_ */
+/** @} legacy_control group */
+
+/**
+ * @defgroup legacy_threads Threads
+ * @ingroup legacy
+ * Threads group
+ * @warning Legacy API
+ * @{
+ */
+/**
+ * @deprecated Legacy API
+ * @brief Set name to be associated with thread in analysis GUI.
+ * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched)
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int LIBITTAPI __itt_thr_name_setA(const char *name, int namelen);
+int LIBITTAPI __itt_thr_name_setW(const wchar_t *name, int namelen);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_thr_name_set __itt_thr_name_setW
+# define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr
+#else
+# define __itt_thr_name_set __itt_thr_name_setA
+# define __itt_thr_name_set_ptr __itt_thr_name_setA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int LIBITTAPI __itt_thr_name_set(const char *name, int namelen);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char *name, int namelen))
+ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int, thr_name_set, (const char *name, int namelen))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thr_name_setA ITTNOTIFY_DATA(thr_name_setA)
+#define __itt_thr_name_setA_ptr ITTNOTIFY_NAME(thr_name_setA)
+#define __itt_thr_name_setW ITTNOTIFY_DATA(thr_name_setW)
+#define __itt_thr_name_setW_ptr ITTNOTIFY_NAME(thr_name_setW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thr_name_set ITTNOTIFY_DATA(thr_name_set)
+#define __itt_thr_name_set_ptr ITTNOTIFY_NAME(thr_name_set)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thr_name_setA(name, namelen)
+#define __itt_thr_name_setA_ptr 0
+#define __itt_thr_name_setW(name, namelen)
+#define __itt_thr_name_setW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thr_name_set(name, namelen)
+#define __itt_thr_name_set_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_thr_name_setA_ptr 0
+#define __itt_thr_name_setW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thr_name_set_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Mark current thread as ignored from this point on, for the duration of its existence.
+ */
+void LIBITTAPI __itt_thr_ignore(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, thr_ignore, (void))
+#define __itt_thr_ignore ITTNOTIFY_VOID(thr_ignore)
+#define __itt_thr_ignore_ptr ITTNOTIFY_NAME(thr_ignore)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_thr_ignore()
+#define __itt_thr_ignore_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_thr_ignore_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} legacy_threads group */
+
+/**
+ * @defgroup legacy_sync Synchronization
+ * @ingroup legacy
+ * Synchronization group
+ * @warning Legacy API
+ * @{
+ */
+/**
+ * @hideinitializer
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_barrier 1
+
+/**
+ * @hideinitializer
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_mutex 2
+
+/**
+ * @deprecated Legacy API
+ * @brief Assign a name to a sync object using char or Unicode string
+ * @param[in] addr - pointer to the sync object. You should use a real pointer to your object
+ * to make sure that the values don't clash with other object addresses
+ * @param[in] objtype - null-terminated object type string. If NULL is passed, the object will
+ * be assumed to be of generic "User Synchronization" type
+ * @param[in] objname - null-terminated object name string. If NULL, no name will be assigned
+ * to the object -- you can use the __itt_sync_rename call later to assign
+ * the name
+ * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the
+ * exact semantics of how prepare/acquired/releasing calls work.
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_sync_set_nameA(void *addr, const char *objtype, const char *objname, int attribute);
+void ITTAPI __itt_sync_set_nameW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_sync_set_name __itt_sync_set_nameW
+# define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr
+#else /* UNICODE */
+# define __itt_sync_set_name __itt_sync_set_nameA
+# define __itt_sync_set_name_ptr __itt_sync_set_nameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_sync_set_name(void *addr, const char* objtype, const char* objname, int attribute);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char *objtype, const char *objname, int attribute))
+ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, sync_set_name, (void *addr, const char *objtype, const char *objname, int attribute))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_set_nameA ITTNOTIFY_VOID(sync_set_nameA)
+#define __itt_sync_set_nameA_ptr ITTNOTIFY_NAME(sync_set_nameA)
+#define __itt_sync_set_nameW ITTNOTIFY_VOID(sync_set_nameW)
+#define __itt_sync_set_nameW_ptr ITTNOTIFY_NAME(sync_set_nameW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_set_name ITTNOTIFY_VOID(sync_set_name)
+#define __itt_sync_set_name_ptr ITTNOTIFY_NAME(sync_set_name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_set_nameA(addr, objtype, objname, attribute)
+#define __itt_sync_set_nameA_ptr 0
+#define __itt_sync_set_nameW(addr, objtype, objname, attribute)
+#define __itt_sync_set_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_set_name(addr, objtype, objname, attribute)
+#define __itt_sync_set_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_set_nameA_ptr 0
+#define __itt_sync_set_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_sync_set_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Assign a name and type to a sync object using char or Unicode string
+ * @param[in] addr - pointer to the sync object. You should use a real pointer to your object
+ * to make sure that the values don't clash with other object addresses
+ * @param[in] objtype - null-terminated object type string. If NULL is passed, the object will
+ * be assumed to be of generic "User Synchronization" type
+ * @param[in] objname - null-terminated object name string. If NULL, no name will be assigned
+ * to the object -- you can use the __itt_sync_rename call later to assign
+ * the name
+ * @param[in] typelen, namelen - a length of string for appropriate objtype and objname parameter
+ * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the
+ * exact semantics of how prepare/acquired/releasing calls work.
+ * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched)
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int LIBITTAPI __itt_notify_sync_nameA(void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute);
+int LIBITTAPI __itt_notify_sync_nameW(void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_notify_sync_name __itt_notify_sync_nameW
+#else
+# define __itt_notify_sync_name __itt_notify_sync_nameA
+#endif
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int LIBITTAPI __itt_notify_sync_name(void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute))
+ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int, notify_sync_name, (void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_notify_sync_nameA ITTNOTIFY_DATA(notify_sync_nameA)
+#define __itt_notify_sync_nameA_ptr ITTNOTIFY_NAME(notify_sync_nameA)
+#define __itt_notify_sync_nameW ITTNOTIFY_DATA(notify_sync_nameW)
+#define __itt_notify_sync_nameW_ptr ITTNOTIFY_NAME(notify_sync_nameW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_notify_sync_name ITTNOTIFY_DATA(notify_sync_name)
+#define __itt_notify_sync_name_ptr ITTNOTIFY_NAME(notify_sync_name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_notify_sync_nameA(addr, objtype, typelen, objname, namelen, attribute)
+#define __itt_notify_sync_nameA_ptr 0
+#define __itt_notify_sync_nameW(addr, objtype, typelen, objname, namelen, attribute)
+#define __itt_notify_sync_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_notify_sync_name(addr, objtype, typelen, objname, namelen, attribute)
+#define __itt_notify_sync_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_notify_sync_nameA_ptr 0
+#define __itt_notify_sync_nameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_notify_sync_name_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Enter spin loop on user-defined sync object
+ */
+void LIBITTAPI __itt_notify_sync_prepare(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr))
+#define __itt_notify_sync_prepare ITTNOTIFY_VOID(notify_sync_prepare)
+#define __itt_notify_sync_prepare_ptr ITTNOTIFY_NAME(notify_sync_prepare)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_notify_sync_prepare(addr)
+#define __itt_notify_sync_prepare_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_notify_sync_prepare_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Quit spin loop without acquiring spin object
+ */
+void LIBITTAPI __itt_notify_sync_cancel(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr))
+#define __itt_notify_sync_cancel ITTNOTIFY_VOID(notify_sync_cancel)
+#define __itt_notify_sync_cancel_ptr ITTNOTIFY_NAME(notify_sync_cancel)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_notify_sync_cancel(addr)
+#define __itt_notify_sync_cancel_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_notify_sync_cancel_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Successful spin loop completion (sync object acquired)
+ */
+void LIBITTAPI __itt_notify_sync_acquired(void *addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr))
+#define __itt_notify_sync_acquired ITTNOTIFY_VOID(notify_sync_acquired)
+#define __itt_notify_sync_acquired_ptr ITTNOTIFY_NAME(notify_sync_acquired)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_notify_sync_acquired(addr)
+#define __itt_notify_sync_acquired_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_notify_sync_acquired_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Start sync object releasing code. Is called before the lock release call.
+ */
+void LIBITTAPI __itt_notify_sync_releasing(void* addr);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr))
+#define __itt_notify_sync_releasing ITTNOTIFY_VOID(notify_sync_releasing)
+#define __itt_notify_sync_releasing_ptr ITTNOTIFY_NAME(notify_sync_releasing)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_notify_sync_releasing(addr)
+#define __itt_notify_sync_releasing_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_notify_sync_releasing_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} legacy_sync group */
+
+#ifndef _ITTNOTIFY_H_
+/**
+ * @defgroup legacy_events Events
+ * @ingroup legacy
+ * Events group
+ * @{
+ */
+
+/** @brief user event type */
+typedef int __itt_event;
+
+/**
+ * @brief Create an event notification
+ * @note name or namelen being null/name and namelen not matching, user event feature not enabled
+ * @return non-zero event identifier upon success and __itt_err otherwise
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_event LIBITTAPI __itt_event_createA(const char *name, int namelen);
+__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_event_create __itt_event_createW
+# define __itt_event_create_ptr __itt_event_createW_ptr
+#else
+# define __itt_event_create __itt_event_createA
+# define __itt_event_create_ptr __itt_event_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA ITTNOTIFY_DATA(event_createA)
+#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)
+#define __itt_event_createW ITTNOTIFY_DATA(event_createW)
+#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create ITTNOTIFY_DATA(event_create)
+#define __itt_event_create_ptr ITTNOTIFY_NAME(event_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA(name, namelen) (__itt_event)0
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW(name, namelen) (__itt_event)0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create(name, namelen) (__itt_event)0
+#define __itt_event_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event occurrence.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_start(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))
+#define __itt_event_start ITTNOTIFY_DATA(event_start)
+#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_start(event) (int)0
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event end occurrence.
+ * @note It is optional if events do not have durations.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_end(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
+#define __itt_event_end ITTNOTIFY_DATA(event_end)
+#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_end(event) (int)0
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} legacy_events group */
+#endif /* _ITTNOTIFY_H_ */
+
+/**
+ * @defgroup legacy_memory Memory Accesses
+ * @ingroup legacy
+ */
+
+/**
+ * @deprecated Legacy API
+ * @brief Inform the tool of memory accesses on reading
+ */
+void LIBITTAPI __itt_memory_read(void *addr, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size))
+#define __itt_memory_read ITTNOTIFY_VOID(memory_read)
+#define __itt_memory_read_ptr ITTNOTIFY_NAME(memory_read)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_memory_read(addr, size)
+#define __itt_memory_read_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_memory_read_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Inform the tool of memory accesses on writing
+ */
+void LIBITTAPI __itt_memory_write(void *addr, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size))
+#define __itt_memory_write ITTNOTIFY_VOID(memory_write)
+#define __itt_memory_write_ptr ITTNOTIFY_NAME(memory_write)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_memory_write(addr, size)
+#define __itt_memory_write_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_memory_write_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief Inform the tool of memory accesses on updating
+ */
+void LIBITTAPI __itt_memory_update(void *address, size_t size);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size))
+#define __itt_memory_update ITTNOTIFY_VOID(memory_update)
+#define __itt_memory_update_ptr ITTNOTIFY_NAME(memory_update)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_memory_update(addr, size)
+#define __itt_memory_update_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_memory_update_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} legacy_memory group */
+
+/**
+ * @defgroup legacy_state Thread and Object States
+ * @ingroup legacy
+ */
+
+/** @brief state type */
+typedef int __itt_state_t;
+
+/** @cond exclude_from_documentation */
+typedef enum __itt_obj_state {
+ __itt_obj_state_err = 0,
+ __itt_obj_state_clr = 1,
+ __itt_obj_state_set = 2,
+ __itt_obj_state_use = 3
+} __itt_obj_state_t;
+
+typedef enum __itt_thr_state {
+ __itt_thr_state_err = 0,
+ __itt_thr_state_clr = 1,
+ __itt_thr_state_set = 2
+} __itt_thr_state_t;
+
+typedef enum __itt_obj_prop {
+ __itt_obj_prop_watch = 1,
+ __itt_obj_prop_ignore = 2,
+ __itt_obj_prop_sharable = 3
+} __itt_obj_prop_t;
+
+typedef enum __itt_thr_prop {
+ __itt_thr_prop_quiet = 1
+} __itt_thr_prop_t;
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief managing thread and object states
+ */
+__itt_state_t LIBITTAPI __itt_state_get(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_state_t, state_get, (void))
+#define __itt_state_get ITTNOTIFY_DATA(state_get)
+#define __itt_state_get_ptr ITTNOTIFY_NAME(state_get)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_state_get(void) (__itt_state_t)0
+#define __itt_state_get_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_state_get_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief managing thread and object states
+ */
+__itt_state_t LIBITTAPI __itt_state_set(__itt_state_t s);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s))
+#define __itt_state_set ITTNOTIFY_DATA(state_set)
+#define __itt_state_set_ptr ITTNOTIFY_NAME(state_set)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_state_set(s) (__itt_state_t)0
+#define __itt_state_set_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_state_set_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief managing thread and object modes
+ */
+__itt_thr_state_t LIBITTAPI __itt_thr_mode_set(__itt_thr_prop_t p, __itt_thr_state_t s);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s))
+#define __itt_thr_mode_set ITTNOTIFY_DATA(thr_mode_set)
+#define __itt_thr_mode_set_ptr ITTNOTIFY_NAME(thr_mode_set)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_thr_mode_set(p, s) (__itt_thr_state_t)0
+#define __itt_thr_mode_set_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_thr_mode_set_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @deprecated Legacy API
+ * @brief managing thread and object modes
+ */
+__itt_obj_state_t LIBITTAPI __itt_obj_mode_set(__itt_obj_prop_t p, __itt_obj_state_t s);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s))
+#define __itt_obj_mode_set ITTNOTIFY_DATA(obj_mode_set)
+#define __itt_obj_mode_set_ptr ITTNOTIFY_NAME(obj_mode_set)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_obj_mode_set(p, s) (__itt_obj_state_t)0
+#define __itt_obj_mode_set_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_obj_mode_set_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} legacy_state group */
+
+/**
+ * @defgroup frames Frames
+ * @ingroup legacy
+ * Frames group
+ * @{
+ */
+/**
+ * @brief opaque structure for frame identification
+ */
+typedef struct __itt_frame_t *__itt_frame;
+
+/**
+ * @brief Create a global frame with given domain
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_frame ITTAPI __itt_frame_createA(const char *domain);
+__itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain);
+#if defined(UNICODE) || defined(_UNICODE)
+# define __itt_frame_create __itt_frame_createW
+# define __itt_frame_create_ptr __itt_frame_createW_ptr
+#else /* UNICODE */
+# define __itt_frame_create __itt_frame_createA
+# define __itt_frame_create_ptr __itt_frame_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_frame ITTAPI __itt_frame_create(const char *domain);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char *domain))
+ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_frame, frame_create, (const char *domain))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA ITTNOTIFY_DATA(frame_createA)
+#define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA)
+#define __itt_frame_createW ITTNOTIFY_DATA(frame_createW)
+#define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create ITTNOTIFY_DATA(frame_create)
+#define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA(domain)
+#define __itt_frame_createA_ptr 0
+#define __itt_frame_createW(domain)
+#define __itt_frame_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create(domain)
+#define __itt_frame_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA_ptr 0
+#define __itt_frame_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief Record an frame begin occurrence. */
+void ITTAPI __itt_frame_begin(__itt_frame frame);
+/** @brief Record an frame end occurrence. */
+void ITTAPI __itt_frame_end (__itt_frame frame);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame))
+ITT_STUBV(ITTAPI, void, frame_end, (__itt_frame frame))
+#define __itt_frame_begin ITTNOTIFY_VOID(frame_begin)
+#define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin)
+#define __itt_frame_end ITTNOTIFY_VOID(frame_end)
+#define __itt_frame_end_ptr ITTNOTIFY_NAME(frame_end)
+#else /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_frame_begin(frame)
+#define __itt_frame_begin_ptr 0
+#define __itt_frame_end(frame)
+#define __itt_frame_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else /* INTEL_NO_MACRO_BODY */
+#define __itt_frame_begin_ptr 0
+#define __itt_frame_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} frames group */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _LEGACY_ITTNOTIFY_H_ */
diff --git a/final/runtime/src/z_Linux_asm.s b/final/runtime/src/z_Linux_asm.s
new file mode 100644
index 0000000..60130a4
--- /dev/null
+++ b/final/runtime/src/z_Linux_asm.s
@@ -0,0 +1,1807 @@
+// z_Linux_asm.s: - microtasking routines specifically
+// written for Intel platforms running Linux* OS
+
+//
+////===----------------------------------------------------------------------===//
+////
+//// The LLVM Compiler Infrastructure
+////
+//// This file is dual licensed under the MIT and the University of Illinois Open
+//// Source Licenses. See LICENSE.txt for details.
+////
+////===----------------------------------------------------------------------===//
+//
+
+// -----------------------------------------------------------------------
+// macros
+// -----------------------------------------------------------------------
+
+#include "kmp_config.h"
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+
+# if KMP_MIC
+//
+// the 'delay r16/r32/r64' should be used instead of the 'pause'.
+// The delay operation has the effect of removing the current thread from
+// the round-robin HT mechanism, and therefore speeds up the issue rate of
+// the other threads on the same core.
+//
+// A value of 0 works fine for <= 2 threads per core, but causes the EPCC
+// barrier time to increase greatly for 3 or more threads per core.
+//
+// A value of 100 works pretty well for up to 4 threads per core, but isn't
+// quite as fast as 0 for 2 threads per core.
+//
+// We need to check what happens for oversubscription / > 4 threads per core.
+// It is possible that we need to pass the delay value in as a parameter
+// that the caller determines based on the total # threads / # cores.
+//
+//.macro pause_op
+// mov $100, %rax
+// delay %rax
+//.endm
+# else
+# define pause_op .byte 0xf3,0x90
+# endif // KMP_MIC
+
+# if KMP_OS_DARWIN
+# define KMP_PREFIX_UNDERSCORE(x) _##x // extra underscore for OS X* symbols
+# define KMP_LABEL(x) L_##x // form the name of label
+.macro KMP_CFI_DEF_OFFSET
+.endmacro
+.macro KMP_CFI_OFFSET
+.endmacro
+.macro KMP_CFI_REGISTER
+.endmacro
+.macro KMP_CFI_DEF
+.endmacro
+.macro ALIGN
+ .align $0
+.endmacro
+.macro DEBUG_INFO
+/* Not sure what .size does in icc, not sure if we need to do something
+ similar for OS X*.
+*/
+.endmacro
+.macro PROC
+ ALIGN 4
+ .globl KMP_PREFIX_UNDERSCORE($0)
+KMP_PREFIX_UNDERSCORE($0):
+.endmacro
+# else // KMP_OS_DARWIN
+# define KMP_PREFIX_UNDERSCORE(x) x // no extra underscore for Linux* OS symbols
+// Format labels so that they don't override function names in gdb's backtraces
+// MIC assembler doesn't accept .L syntax, the L works fine there (as well as on OS X*)
+# if KMP_MIC
+# define KMP_LABEL(x) L_##x // local label
+# else
+# define KMP_LABEL(x) .L_##x // local label hidden from backtraces
+# endif // KMP_MIC
+.macro ALIGN size
+ .align 1<<(\size)
+.endm
+.macro DEBUG_INFO proc
+ .cfi_endproc
+// Not sure why we need .type and .size for the functions
+ .align 16
+ .type \proc,@function
+ .size \proc,.-\proc
+.endm
+.macro PROC proc
+ ALIGN 4
+ .globl KMP_PREFIX_UNDERSCORE(\proc)
+KMP_PREFIX_UNDERSCORE(\proc):
+ .cfi_startproc
+.endm
+.macro KMP_CFI_DEF_OFFSET sz
+ .cfi_def_cfa_offset \sz
+.endm
+.macro KMP_CFI_OFFSET reg, sz
+ .cfi_offset \reg,\sz
+.endm
+.macro KMP_CFI_REGISTER reg
+ .cfi_def_cfa_register \reg
+.endm
+.macro KMP_CFI_DEF reg, sz
+ .cfi_def_cfa \reg,\sz
+.endm
+# endif // KMP_OS_DARWIN
+#endif // KMP_ARCH_X86 || KMP_ARCH_x86_64
+
+#if KMP_OS_LINUX && KMP_ARCH_AARCH64
+
+# define KMP_PREFIX_UNDERSCORE(x) x // no extra underscore for Linux* OS symbols
+// Format labels so that they don't override function names in gdb's backtraces
+# define KMP_LABEL(x) .L_##x // local label hidden from backtraces
+
+.macro ALIGN size
+ .align 1<<(\size)
+.endm
+
+.macro DEBUG_INFO proc
+ .cfi_endproc
+// Not sure why we need .type and .size for the functions
+ ALIGN 2
+ .type \proc,@function
+ .size \proc,.-\proc
+.endm
+
+.macro PROC proc
+ ALIGN 2
+ .globl KMP_PREFIX_UNDERSCORE(\proc)
+KMP_PREFIX_UNDERSCORE(\proc):
+ .cfi_startproc
+.endm
+
+#endif // KMP_OS_LINUX && KMP_ARCH_AARCH64
+
+// -----------------------------------------------------------------------
+// data
+// -----------------------------------------------------------------------
+
+#ifdef KMP_GOMP_COMPAT
+
+//
+// Support for unnamed common blocks.
+//
+// Because the symbol ".gomp_critical_user_" contains a ".", we have to
+// put this stuff in assembly.
+//
+
+# if KMP_ARCH_X86
+# if KMP_OS_DARWIN
+ .data
+ .comm .gomp_critical_user_,32
+ .data
+ .globl ___kmp_unnamed_critical_addr
+___kmp_unnamed_critical_addr:
+ .long .gomp_critical_user_
+# else /* Linux* OS */
+ .data
+ .comm .gomp_critical_user_,32,8
+ .data
+ ALIGN 4
+ .global __kmp_unnamed_critical_addr
+__kmp_unnamed_critical_addr:
+ .4byte .gomp_critical_user_
+ .type __kmp_unnamed_critical_addr,@object
+ .size __kmp_unnamed_critical_addr,4
+# endif /* KMP_OS_DARWIN */
+# endif /* KMP_ARCH_X86 */
+
+# if KMP_ARCH_X86_64
+# if KMP_OS_DARWIN
+ .data
+ .comm .gomp_critical_user_,32
+ .data
+ .globl ___kmp_unnamed_critical_addr
+___kmp_unnamed_critical_addr:
+ .quad .gomp_critical_user_
+# else /* Linux* OS */
+ .data
+ .comm .gomp_critical_user_,32,8
+ .data
+ ALIGN 8
+ .global __kmp_unnamed_critical_addr
+__kmp_unnamed_critical_addr:
+ .8byte .gomp_critical_user_
+ .type __kmp_unnamed_critical_addr,@object
+ .size __kmp_unnamed_critical_addr,8
+# endif /* KMP_OS_DARWIN */
+# endif /* KMP_ARCH_X86_64 */
+
+#endif /* KMP_GOMP_COMPAT */
+
+
+#if KMP_ARCH_X86 && !KMP_ARCH_PPC64
+
+// -----------------------------------------------------------------------
+// microtasking routines specifically written for IA-32 architecture
+// running Linux* OS
+// -----------------------------------------------------------------------
+//
+
+ .ident "Intel Corporation"
+ .data
+ ALIGN 4
+// void
+// __kmp_x86_pause( void );
+//
+
+ .text
+ PROC __kmp_x86_pause
+
+ pause_op
+ ret
+
+ DEBUG_INFO __kmp_x86_pause
+
+//
+// void
+// __kmp_x86_cpuid( int mode, int mode2, void *cpuid_buffer );
+//
+ PROC __kmp_x86_cpuid
+
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %edi
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+
+ movl 8(%ebp), %eax
+ movl 12(%ebp), %ecx
+ cpuid // Query the CPUID for the current processor
+
+ movl 16(%ebp), %edi
+ movl %eax, 0(%edi)
+ movl %ebx, 4(%edi)
+ movl %ecx, 8(%edi)
+ movl %edx, 12(%edi)
+
+ popl %edx
+ popl %ecx
+ popl %ebx
+ popl %edi
+ movl %ebp, %esp
+ popl %ebp
+ ret
+
+ DEBUG_INFO __kmp_x86_cpuid
+
+
+# if !KMP_ASM_INTRINS
+
+//------------------------------------------------------------------------
+//
+// kmp_int32
+// __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 d );
+//
+
+ PROC __kmp_test_then_add32
+
+ movl 4(%esp), %ecx
+ movl 8(%esp), %eax
+ lock
+ xaddl %eax,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_test_then_add32
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed8
+//
+// kmp_int32
+// __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 d );
+//
+// parameters:
+// p: 4(%esp)
+// d: 8(%esp)
+//
+// return: %al
+
+ PROC __kmp_xchg_fixed8
+
+ movl 4(%esp), %ecx // "p"
+ movb 8(%esp), %al // "d"
+
+ lock
+ xchgb %al,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed8
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed16
+//
+// kmp_int16
+// __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 d );
+//
+// parameters:
+// p: 4(%esp)
+// d: 8(%esp)
+// return: %ax
+
+ PROC __kmp_xchg_fixed16
+
+ movl 4(%esp), %ecx // "p"
+ movw 8(%esp), %ax // "d"
+
+ lock
+ xchgw %ax,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed16
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed32
+//
+// kmp_int32
+// __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 d );
+//
+// parameters:
+// p: 4(%esp)
+// d: 8(%esp)
+//
+// return: %eax
+
+ PROC __kmp_xchg_fixed32
+
+ movl 4(%esp), %ecx // "p"
+ movl 8(%esp), %eax // "d"
+
+ lock
+ xchgl %eax,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed32
+
+
+//
+// kmp_int8
+// __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+//
+
+ PROC __kmp_compare_and_store8
+
+ movl 4(%esp), %ecx
+ movb 8(%esp), %al
+ movb 12(%esp), %dl
+ lock
+ cmpxchgb %dl,(%ecx)
+ sete %al // if %al == (%ecx) set %al = 1 else set %al = 0
+ and $1, %eax // sign extend previous instruction
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store8
+
+//
+// kmp_int16
+// __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+//
+
+ PROC __kmp_compare_and_store16
+
+ movl 4(%esp), %ecx
+ movw 8(%esp), %ax
+ movw 12(%esp), %dx
+ lock
+ cmpxchgw %dx,(%ecx)
+ sete %al // if %ax == (%ecx) set %al = 1 else set %al = 0
+ and $1, %eax // sign extend previous instruction
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store16
+
+//
+// kmp_int32
+// __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+//
+
+ PROC __kmp_compare_and_store32
+
+ movl 4(%esp), %ecx
+ movl 8(%esp), %eax
+ movl 12(%esp), %edx
+ lock
+ cmpxchgl %edx,(%ecx)
+ sete %al // if %eax == (%ecx) set %al = 1 else set %al = 0
+ and $1, %eax // sign extend previous instruction
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store32
+
+//
+// kmp_int32
+// __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+//
+ PROC __kmp_compare_and_store64
+
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %edi
+ movl 8(%ebp), %edi
+ movl 12(%ebp), %eax // "cv" low order word
+ movl 16(%ebp), %edx // "cv" high order word
+ movl 20(%ebp), %ebx // "sv" low order word
+ movl 24(%ebp), %ecx // "sv" high order word
+ lock
+ cmpxchg8b (%edi)
+ sete %al // if %edx:eax == (%edi) set %al = 1 else set %al = 0
+ and $1, %eax // sign extend previous instruction
+ popl %edi
+ popl %ebx
+ movl %ebp, %esp
+ popl %ebp
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store64
+
+//
+// kmp_int8
+// __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+//
+
+ PROC __kmp_compare_and_store_ret8
+
+ movl 4(%esp), %ecx
+ movb 8(%esp), %al
+ movb 12(%esp), %dl
+ lock
+ cmpxchgb %dl,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret8
+
+//
+// kmp_int16
+// __kmp_compare_and_store_ret16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+//
+
+ PROC __kmp_compare_and_store_ret16
+
+ movl 4(%esp), %ecx
+ movw 8(%esp), %ax
+ movw 12(%esp), %dx
+ lock
+ cmpxchgw %dx,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret16
+
+//
+// kmp_int32
+// __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+//
+
+ PROC __kmp_compare_and_store_ret32
+
+ movl 4(%esp), %ecx
+ movl 8(%esp), %eax
+ movl 12(%esp), %edx
+ lock
+ cmpxchgl %edx,(%ecx)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret32
+
+//
+// kmp_int64
+// __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+//
+ PROC __kmp_compare_and_store_ret64
+
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %edi
+ movl 8(%ebp), %edi
+ movl 12(%ebp), %eax // "cv" low order word
+ movl 16(%ebp), %edx // "cv" high order word
+ movl 20(%ebp), %ebx // "sv" low order word
+ movl 24(%ebp), %ecx // "sv" high order word
+ lock
+ cmpxchg8b (%edi)
+ popl %edi
+ popl %ebx
+ movl %ebp, %esp
+ popl %ebp
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret64
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_real32
+//
+// kmp_real32
+// __kmp_xchg_real32( volatile kmp_real32 *addr, kmp_real32 data );
+//
+// parameters:
+// addr: 4(%esp)
+// data: 8(%esp)
+//
+// return: %eax
+
+
+ PROC __kmp_xchg_real32
+
+ pushl %ebp
+ movl %esp, %ebp
+ subl $4, %esp
+ pushl %esi
+
+ movl 4(%ebp), %esi
+ flds (%esi)
+ // load <addr>
+ fsts -4(%ebp)
+ // store old value
+
+ movl 8(%ebp), %eax
+
+ lock
+ xchgl %eax, (%esi)
+
+ flds -4(%ebp)
+ // return old value
+
+ popl %esi
+ movl %ebp, %esp
+ popl %ebp
+ ret
+
+ DEBUG_INFO __kmp_xchg_real32
+
+# endif /* !KMP_ASM_INTRINS */
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_load_x87_fpu_control_word
+//
+// void
+// __kmp_load_x87_fpu_control_word( kmp_int16 *p );
+//
+// parameters:
+// p: 4(%esp)
+//
+
+ PROC __kmp_load_x87_fpu_control_word
+
+ movl 4(%esp), %eax
+ fldcw (%eax)
+ ret
+
+ DEBUG_INFO __kmp_load_x87_fpu_control_word
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_store_x87_fpu_control_word
+//
+// void
+// __kmp_store_x87_fpu_control_word( kmp_int16 *p );
+//
+// parameters:
+// p: 4(%esp)
+//
+
+ PROC __kmp_store_x87_fpu_control_word
+
+ movl 4(%esp), %eax
+ fstcw (%eax)
+ ret
+
+ DEBUG_INFO __kmp_store_x87_fpu_control_word
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_clear_x87_fpu_status_word
+//
+// void
+// __kmp_clear_x87_fpu_status_word();
+//
+//
+
+ PROC __kmp_clear_x87_fpu_status_word
+
+ fnclex
+ ret
+
+ DEBUG_INFO __kmp_clear_x87_fpu_status_word
+
+
+//------------------------------------------------------------------------
+//
+// typedef void (*microtask_t)( int *gtid, int *tid, ... );
+//
+// int
+// __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid,
+// int argc, void *p_argv[] ) {
+// (*pkfn)( & gtid, & gtid, argv[0], ... );
+// return 1;
+// }
+
+// -- Begin __kmp_invoke_microtask
+// mark_begin;
+ PROC __kmp_invoke_microtask
+
+ pushl %ebp
+ KMP_CFI_DEF_OFFSET 8
+ KMP_CFI_OFFSET ebp,-8
+ movl %esp,%ebp // establish the base pointer for this routine.
+ KMP_CFI_REGISTER ebp
+ subl $8,%esp // allocate space for two local variables.
+ // These varibales are:
+ // argv: -4(%ebp)
+ // temp: -8(%ebp)
+ //
+ pushl %ebx // save %ebx to use during this routine
+ //
+#if OMPT_SUPPORT
+ movl 28(%ebp),%ebx // get exit_frame address
+ movl %ebp,(%ebx) // save exit_frame
+#endif
+
+ movl 20(%ebp),%ebx // Stack alignment - # args
+ addl $2,%ebx // #args +2 Always pass at least 2 args (gtid and tid)
+ shll $2,%ebx // Number of bytes used on stack: (#args+2)*4
+ movl %esp,%eax //
+ subl %ebx,%eax // %esp-((#args+2)*4) -> %eax -- without mods, stack ptr would be this
+ movl %eax,%ebx // Save to %ebx
+ andl $0xFFFFFF80,%eax // mask off 7 bits
+ subl %eax,%ebx // Amount to subtract from %esp
+ subl %ebx,%esp // Prepare the stack ptr --
+ // now it will be aligned on 128-byte boundary at the call
+
+ movl 24(%ebp),%eax // copy from p_argv[]
+ movl %eax,-4(%ebp) // into the local variable *argv.
+
+ movl 20(%ebp),%ebx // argc is 20(%ebp)
+ shll $2,%ebx
+
+KMP_LABEL(invoke_2):
+ cmpl $0,%ebx
+ jg KMP_LABEL(invoke_4)
+ jmp KMP_LABEL(invoke_3)
+ ALIGN 2
+KMP_LABEL(invoke_4):
+ movl -4(%ebp),%eax
+ subl $4,%ebx // decrement argc.
+ addl %ebx,%eax // index into argv.
+ movl (%eax),%edx
+ pushl %edx
+
+ jmp KMP_LABEL(invoke_2)
+ ALIGN 2
+KMP_LABEL(invoke_3):
+ leal 16(%ebp),%eax // push & tid
+ pushl %eax
+
+ leal 12(%ebp),%eax // push & gtid
+ pushl %eax
+
+ movl 8(%ebp),%ebx
+ call *%ebx // call (*pkfn)();
+
+ movl $1,%eax // return 1;
+
+ movl -12(%ebp),%ebx // restore %ebx
+ leave
+ KMP_CFI_DEF esp,4
+ ret
+
+ DEBUG_INFO __kmp_invoke_microtask
+// -- End __kmp_invoke_microtask
+
+
+// kmp_uint64
+// __kmp_hardware_timestamp(void)
+ PROC __kmp_hardware_timestamp
+ rdtsc
+ ret
+
+ DEBUG_INFO __kmp_hardware_timestamp
+// -- End __kmp_hardware_timestamp
+
+// -----------------------------------------------------------------------
+#endif /* KMP_ARCH_X86 */
+
+
+#if KMP_ARCH_X86_64
+
+// -----------------------------------------------------------------------
+// microtasking routines specifically written for IA-32 architecture and
+// Intel(R) 64 running Linux* OS
+// -----------------------------------------------------------------------
+
+// -- Machine type P
+// mark_description "Intel Corporation";
+ .ident "Intel Corporation"
+// -- .file "z_Linux_asm.s"
+ .data
+ ALIGN 4
+
+// To prevent getting our code into .data section .text added to every routine definition for x86_64.
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_x86_cpuid
+//
+// void
+// __kmp_x86_cpuid( int mode, int mode2, void *cpuid_buffer );
+//
+// parameters:
+// mode: %edi
+// mode2: %esi
+// cpuid_buffer: %rdx
+
+ .text
+ PROC __kmp_x86_cpuid
+
+ pushq %rbp
+ movq %rsp,%rbp
+ pushq %rbx // callee-save register
+
+ movl %esi, %ecx // "mode2"
+ movl %edi, %eax // "mode"
+ movq %rdx, %rsi // cpuid_buffer
+ cpuid // Query the CPUID for the current processor
+
+ movl %eax, 0(%rsi) // store results into buffer
+ movl %ebx, 4(%rsi)
+ movl %ecx, 8(%rsi)
+ movl %edx, 12(%rsi)
+
+ popq %rbx // callee-save register
+ movq %rbp, %rsp
+ popq %rbp
+ ret
+
+ DEBUG_INFO __kmp_x86_cpuid
+
+
+
+# if !KMP_ASM_INTRINS
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_test_then_add32
+//
+// kmp_int32
+// __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 d );
+//
+// parameters:
+// p: %rdi
+// d: %esi
+//
+// return: %eax
+
+ .text
+ PROC __kmp_test_then_add32
+
+ movl %esi, %eax // "d"
+ lock
+ xaddl %eax,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_test_then_add32
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_test_then_add64
+//
+// kmp_int64
+// __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d );
+//
+// parameters:
+// p: %rdi
+// d: %rsi
+// return: %rax
+
+ .text
+ PROC __kmp_test_then_add64
+
+ movq %rsi, %rax // "d"
+ lock
+ xaddq %rax,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_test_then_add64
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed8
+//
+// kmp_int32
+// __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 d );
+//
+// parameters:
+// p: %rdi
+// d: %sil
+//
+// return: %al
+
+ .text
+ PROC __kmp_xchg_fixed8
+
+ movb %sil, %al // "d"
+
+ lock
+ xchgb %al,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed8
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed16
+//
+// kmp_int16
+// __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 d );
+//
+// parameters:
+// p: %rdi
+// d: %si
+// return: %ax
+
+ .text
+ PROC __kmp_xchg_fixed16
+
+ movw %si, %ax // "d"
+
+ lock
+ xchgw %ax,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed16
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed32
+//
+// kmp_int32
+// __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 d );
+//
+// parameters:
+// p: %rdi
+// d: %esi
+//
+// return: %eax
+
+ .text
+ PROC __kmp_xchg_fixed32
+
+ movl %esi, %eax // "d"
+
+ lock
+ xchgl %eax,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed32
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_fixed64
+//
+// kmp_int64
+// __kmp_xchg_fixed64( volatile kmp_int64 *p, kmp_int64 d );
+//
+// parameters:
+// p: %rdi
+// d: %rsi
+// return: %rax
+
+ .text
+ PROC __kmp_xchg_fixed64
+
+ movq %rsi, %rax // "d"
+
+ lock
+ xchgq %rax,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_xchg_fixed64
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store8
+//
+// kmp_int8
+// __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %esi
+// sv: %edx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store8
+
+ movb %sil, %al // "cv"
+ lock
+ cmpxchgb %dl,(%rdi)
+ sete %al // if %al == (%rdi) set %al = 1 else set %al = 0
+ andq $1, %rax // sign extend previous instruction for return value
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store8
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store16
+//
+// kmp_int16
+// __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %si
+// sv: %dx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store16
+
+ movw %si, %ax // "cv"
+ lock
+ cmpxchgw %dx,(%rdi)
+ sete %al // if %ax == (%rdi) set %al = 1 else set %al = 0
+ andq $1, %rax // sign extend previous instruction for return value
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store16
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store32
+//
+// kmp_int32
+// __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %esi
+// sv: %edx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store32
+
+ movl %esi, %eax // "cv"
+ lock
+ cmpxchgl %edx,(%rdi)
+ sete %al // if %eax == (%rdi) set %al = 1 else set %al = 0
+ andq $1, %rax // sign extend previous instruction for return value
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store32
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store64
+//
+// kmp_int32
+// __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %rsi
+// sv: %rdx
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store64
+
+ movq %rsi, %rax // "cv"
+ lock
+ cmpxchgq %rdx,(%rdi)
+ sete %al // if %rax == (%rdi) set %al = 1 else set %al = 0
+ andq $1, %rax // sign extend previous instruction for return value
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store64
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store_ret8
+//
+// kmp_int8
+// __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %esi
+// sv: %edx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store_ret8
+
+ movb %sil, %al // "cv"
+ lock
+ cmpxchgb %dl,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret8
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store_ret16
+//
+// kmp_int16
+// __kmp_compare_and_store16_ret( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %si
+// sv: %dx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store_ret16
+
+ movw %si, %ax // "cv"
+ lock
+ cmpxchgw %dx,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret16
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store_ret32
+//
+// kmp_int32
+// __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %esi
+// sv: %edx
+//
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store_ret32
+
+ movl %esi, %eax // "cv"
+ lock
+ cmpxchgl %edx,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret32
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_compare_and_store_ret64
+//
+// kmp_int64
+// __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+//
+// parameters:
+// p: %rdi
+// cv: %rsi
+// sv: %rdx
+// return: %eax
+
+ .text
+ PROC __kmp_compare_and_store_ret64
+
+ movq %rsi, %rax // "cv"
+ lock
+ cmpxchgq %rdx,(%rdi)
+ ret
+
+ DEBUG_INFO __kmp_compare_and_store_ret64
+
+# endif /* !KMP_ASM_INTRINS */
+
+
+# if !KMP_MIC
+
+# if !KMP_ASM_INTRINS
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_real32
+//
+// kmp_real32
+// __kmp_xchg_real32( volatile kmp_real32 *addr, kmp_real32 data );
+//
+// parameters:
+// addr: %rdi
+// data: %xmm0 (lower 4 bytes)
+//
+// return: %xmm0 (lower 4 bytes)
+
+ .text
+ PROC __kmp_xchg_real32
+
+ movd %xmm0, %eax // load "data" to eax
+
+ lock
+ xchgl %eax, (%rdi)
+
+ movd %eax, %xmm0 // load old value into return register
+
+ ret
+
+ DEBUG_INFO __kmp_xchg_real32
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_xchg_real64
+//
+// kmp_real64
+// __kmp_xchg_real64( volatile kmp_real64 *addr, kmp_real64 data );
+//
+// parameters:
+// addr: %rdi
+// data: %xmm0 (lower 8 bytes)
+// return: %xmm0 (lower 8 bytes)
+//
+
+ .text
+ PROC __kmp_xchg_real64
+
+ movd %xmm0, %rax // load "data" to rax
+
+ lock
+ xchgq %rax, (%rdi)
+
+ movd %rax, %xmm0 // load old value into return register
+ ret
+
+ DEBUG_INFO __kmp_xchg_real64
+
+
+# endif /* !KMP_MIC */
+
+# endif /* !KMP_ASM_INTRINS */
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_load_x87_fpu_control_word
+//
+// void
+// __kmp_load_x87_fpu_control_word( kmp_int16 *p );
+//
+// parameters:
+// p: %rdi
+//
+
+ .text
+ PROC __kmp_load_x87_fpu_control_word
+
+ fldcw (%rdi)
+ ret
+
+ DEBUG_INFO __kmp_load_x87_fpu_control_word
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_store_x87_fpu_control_word
+//
+// void
+// __kmp_store_x87_fpu_control_word( kmp_int16 *p );
+//
+// parameters:
+// p: %rdi
+//
+
+ .text
+ PROC __kmp_store_x87_fpu_control_word
+
+ fstcw (%rdi)
+ ret
+
+ DEBUG_INFO __kmp_store_x87_fpu_control_word
+
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_clear_x87_fpu_status_word
+//
+// void
+// __kmp_clear_x87_fpu_status_word();
+//
+//
+
+ .text
+ PROC __kmp_clear_x87_fpu_status_word
+
+#if KMP_MIC
+// TODO: remove the workaround for problem with fnclex instruction (no CQ known)
+ fstenv -32(%rsp) // store FP env
+ andw $~0x80ff, 4-32(%rsp) // clear 0-7,15 bits of FP SW
+ fldenv -32(%rsp) // load FP env back
+ ret
+#else
+ fnclex
+ ret
+#endif
+
+ DEBUG_INFO __kmp_clear_x87_fpu_status_word
+
+
+//------------------------------------------------------------------------
+//
+// typedef void (*microtask_t)( int *gtid, int *tid, ... );
+//
+// int
+// __kmp_invoke_microtask( void (*pkfn) (int gtid, int tid, ...),
+// int gtid, int tid,
+// int argc, void *p_argv[] ) {
+// (*pkfn)( & gtid, & tid, argv[0], ... );
+// return 1;
+// }
+//
+// note:
+// at call to pkfn must have %rsp 128-byte aligned for compiler
+//
+// parameters:
+// %rdi: pkfn
+// %esi: gtid
+// %edx: tid
+// %ecx: argc
+// %r8: p_argv
+// %r9: &exit_frame
+//
+// locals:
+// __gtid: gtid parm pushed on stack so can pass &gtid to pkfn
+// __tid: tid parm pushed on stack so can pass &tid to pkfn
+//
+// reg temps:
+// %rax: used all over the place
+// %rdx: used in stack pointer alignment calculation
+// %r11: used to traverse p_argv array
+// %rsi: used as temporary for stack parameters
+// used as temporary for number of pkfn parms to push
+// %rbx: used to hold pkfn address, and zero constant, callee-save
+//
+// return: %eax (always 1/TRUE)
+//
+
+__gtid = -16
+__tid = -24
+
+// -- Begin __kmp_invoke_microtask
+// mark_begin;
+ .text
+ PROC __kmp_invoke_microtask
+
+ pushq %rbp // save base pointer
+ KMP_CFI_DEF_OFFSET 16
+ KMP_CFI_OFFSET rbp,-16
+ movq %rsp,%rbp // establish the base pointer for this routine.
+ KMP_CFI_REGISTER rbp
+
+#if OMPT_SUPPORT
+ movq %rbp, (%r9) // save exit_frame
+#endif
+
+ pushq %rbx // %rbx is callee-saved register
+ pushq %rsi // Put gtid on stack so can pass &tgid to pkfn
+ pushq %rdx // Put tid on stack so can pass &tid to pkfn
+
+ movq %rcx, %rax // Stack alignment calculation begins; argc -> %rax
+ movq $0, %rbx // constant for cmovs later
+ subq $4, %rax // subtract four args passed in registers to pkfn
+#if KMP_MIC
+ js KMP_LABEL(kmp_0) // jump to movq
+ jmp KMP_LABEL(kmp_0_exit) // jump ahead
+KMP_LABEL(kmp_0):
+ movq %rbx, %rax // zero negative value in %rax <- max(0, argc-4)
+KMP_LABEL(kmp_0_exit):
+#else
+ cmovsq %rbx, %rax // zero negative value in %rax <- max(0, argc-4)
+#endif // KMP_MIC
+
+ movq %rax, %rsi // save max(0, argc-4) -> %rsi for later
+ shlq $3, %rax // Number of bytes used on stack: max(0, argc-4)*8
+
+ movq %rsp, %rdx //
+ subq %rax, %rdx // %rsp-(max(0,argc-4)*8) -> %rdx --
+ // without align, stack ptr would be this
+ movq %rdx, %rax // Save to %rax
+
+ andq $0xFFFFFFFFFFFFFF80, %rax // mask off lower 7 bits (128 bytes align)
+ subq %rax, %rdx // Amount to subtract from %rsp
+ subq %rdx, %rsp // Prepare the stack ptr --
+ // now %rsp will align to 128-byte boundary at call site
+
+ // setup pkfn parameter reg and stack
+ movq %rcx, %rax // argc -> %rax
+ cmpq $0, %rsi
+ je KMP_LABEL(kmp_invoke_pass_parms) // jump ahead if no parms to push
+ shlq $3, %rcx // argc*8 -> %rcx
+ movq %r8, %rdx // p_argv -> %rdx
+ addq %rcx, %rdx // &p_argv[argc] -> %rdx
+
+ movq %rsi, %rcx // max (0, argc-4) -> %rcx
+
+KMP_LABEL(kmp_invoke_push_parms):
+ // push nth - 7th parms to pkfn on stack
+ subq $8, %rdx // decrement p_argv pointer to previous parm
+ movq (%rdx), %rsi // p_argv[%rcx-1] -> %rsi
+ pushq %rsi // push p_argv[%rcx-1] onto stack (reverse order)
+ subl $1, %ecx
+
+// C69570: "X86_64_RELOC_BRANCH not supported" error at linking on mac_32e
+// if the name of the label that is an operand of this jecxz starts with a dot (".");
+// Apple's linker does not support 1-byte length relocation;
+// Resolution: replace all .labelX entries with L_labelX.
+
+ jecxz KMP_LABEL(kmp_invoke_pass_parms) // stop when four p_argv[] parms left
+ jmp KMP_LABEL(kmp_invoke_push_parms)
+ ALIGN 3
+KMP_LABEL(kmp_invoke_pass_parms): // put 1st - 6th parms to pkfn in registers.
+ // order here is important to avoid trashing
+ // registers used for both input and output parms!
+ movq %rdi, %rbx // pkfn -> %rbx
+ leaq __gtid(%rbp), %rdi // &gtid -> %rdi (store 1st parm to pkfn)
+ leaq __tid(%rbp), %rsi // &tid -> %rsi (store 2nd parm to pkfn)
+
+ movq %r8, %r11 // p_argv -> %r11
+
+#if KMP_MIC
+ cmpq $4, %rax // argc >= 4?
+ jns KMP_LABEL(kmp_4) // jump to movq
+ jmp KMP_LABEL(kmp_4_exit) // jump ahead
+KMP_LABEL(kmp_4):
+ movq 24(%r11), %r9 // p_argv[3] -> %r9 (store 6th parm to pkfn)
+KMP_LABEL(kmp_4_exit):
+
+ cmpq $3, %rax // argc >= 3?
+ jns KMP_LABEL(kmp_3) // jump to movq
+ jmp KMP_LABEL(kmp_3_exit) // jump ahead
+KMP_LABEL(kmp_3):
+ movq 16(%r11), %r8 // p_argv[2] -> %r8 (store 5th parm to pkfn)
+KMP_LABEL(kmp_3_exit):
+
+ cmpq $2, %rax // argc >= 2?
+ jns KMP_LABEL(kmp_2) // jump to movq
+ jmp KMP_LABEL(kmp_2_exit) // jump ahead
+KMP_LABEL(kmp_2):
+ movq 8(%r11), %rcx // p_argv[1] -> %rcx (store 4th parm to pkfn)
+KMP_LABEL(kmp_2_exit):
+
+ cmpq $1, %rax // argc >= 1?
+ jns KMP_LABEL(kmp_1) // jump to movq
+ jmp KMP_LABEL(kmp_1_exit) // jump ahead
+KMP_LABEL(kmp_1):
+ movq (%r11), %rdx // p_argv[0] -> %rdx (store 3rd parm to pkfn)
+KMP_LABEL(kmp_1_exit):
+#else
+ cmpq $4, %rax // argc >= 4?
+ cmovnsq 24(%r11), %r9 // p_argv[3] -> %r9 (store 6th parm to pkfn)
+
+ cmpq $3, %rax // argc >= 3?
+ cmovnsq 16(%r11), %r8 // p_argv[2] -> %r8 (store 5th parm to pkfn)
+
+ cmpq $2, %rax // argc >= 2?
+ cmovnsq 8(%r11), %rcx // p_argv[1] -> %rcx (store 4th parm to pkfn)
+
+ cmpq $1, %rax // argc >= 1?
+ cmovnsq (%r11), %rdx // p_argv[0] -> %rdx (store 3rd parm to pkfn)
+#endif // KMP_MIC
+
+ call *%rbx // call (*pkfn)();
+ movq $1, %rax // move 1 into return register;
+
+ movq -8(%rbp), %rbx // restore %rbx using %rbp since %rsp was modified
+ movq %rbp, %rsp // restore stack pointer
+ popq %rbp // restore frame pointer
+ KMP_CFI_DEF rsp,8
+ ret
+
+ DEBUG_INFO __kmp_invoke_microtask
+// -- End __kmp_invoke_microtask
+
+// kmp_uint64
+// __kmp_hardware_timestamp(void)
+ .text
+ PROC __kmp_hardware_timestamp
+ rdtsc
+ shlq $32, %rdx
+ orq %rdx, %rax
+ ret
+
+ DEBUG_INFO __kmp_hardware_timestamp
+// -- End __kmp_hardware_timestamp
+
+//------------------------------------------------------------------------
+//
+// FUNCTION __kmp_bsr32
+//
+// int
+// __kmp_bsr32( int );
+//
+
+ .text
+ PROC __kmp_bsr32
+
+ bsr %edi,%eax
+ ret
+
+ DEBUG_INFO __kmp_bsr32
+
+
+// -----------------------------------------------------------------------
+#endif /* KMP_ARCH_X86_64 */
+
+// '
+#if KMP_OS_LINUX && KMP_ARCH_AARCH64
+
+//------------------------------------------------------------------------
+//
+// typedef void (*microtask_t)( int *gtid, int *tid, ... );
+//
+// int
+// __kmp_invoke_microtask( void (*pkfn) (int gtid, int tid, ...),
+// int gtid, int tid,
+// int argc, void *p_argv[] ) {
+// (*pkfn)( & gtid, & tid, argv[0], ... );
+// return 1;
+// }
+//
+// parameters:
+// x0: pkfn
+// w1: gtid
+// w2: tid
+// w3: argc
+// x4: p_argv
+// x5: &exit_frame
+//
+// locals:
+// __gtid: gtid parm pushed on stack so can pass &gtid to pkfn
+// __tid: tid parm pushed on stack so can pass &tid to pkfn
+//
+// reg temps:
+// x8: used to hold pkfn address
+// w9: used as temporary for number of pkfn parms
+// x10: used to traverse p_argv array
+// x11: used as temporary for stack placement calculation
+// x12: used as temporary for stack parameters
+// x19: used to preserve exit_frame_ptr, callee-save
+//
+// return: w0 (always 1/TRUE)
+//
+
+__gtid = 4
+__tid = 8
+
+// -- Begin __kmp_invoke_microtask
+// mark_begin;
+ .text
+ PROC __kmp_invoke_microtask
+
+ stp x29, x30, [sp, #-16]!
+# if OMPT_SUPPORT
+ stp x19, x20, [sp, #-16]!
+# endif
+ mov x29, sp
+
+ orr w9, wzr, #1
+ add w9, w9, w3, lsr #1
+ sub sp, sp, w9, lsl #4
+ mov x11, sp
+
+ mov x8, x0
+ str w1, [x29, #-__gtid]
+ str w2, [x29, #-__tid]
+ mov w9, w3
+ mov x10, x4
+# if OMPT_SUPPORT
+ mov x19, x5
+ str x29, [x19]
+# endif
+
+ sub x0, x29, #__gtid
+ sub x1, x29, #__tid
+
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x2, [x10]
+
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x3, [x10, #8]!
+
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x4, [x10, #8]!
+
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x5, [x10, #8]!
+
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x6, [x10, #8]!
+
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x7, [x10, #8]!
+
+KMP_LABEL(kmp_0):
+ sub w9, w9, #1
+ cbz w9, KMP_LABEL(kmp_1)
+ ldr x12, [x10, #8]!
+ str x12, [x11], #8
+ b KMP_LABEL(kmp_0)
+KMP_LABEL(kmp_1):
+ blr x8
+ orr w0, wzr, #1
+ mov sp, x29
+# if OMPT_SUPPORT
+ str xzr, [x19]
+ ldp x19, x20, [sp], #16
+# endif
+ ldp x29, x30, [sp], #16
+ ret
+
+ DEBUG_INFO __kmp_invoke_microtask
+// -- End __kmp_invoke_microtask
+
+#endif /* KMP_OS_LINUX && KMP_ARCH_AARCH64 */
+
+#if KMP_ARCH_PPC64
+
+//------------------------------------------------------------------------
+//
+// typedef void (*microtask_t)( int *gtid, int *tid, ... );
+//
+// int
+// __kmp_invoke_microtask( void (*pkfn) (int gtid, int tid, ...),
+// int gtid, int tid,
+// int argc, void *p_argv[] ) {
+// (*pkfn)( & gtid, & tid, argv[0], ... );
+// return 1;
+// }
+//
+// parameters:
+// r3: pkfn
+// r4: gtid
+// r5: tid
+// r6: argc
+// r7: p_argv
+// r8: &exit_frame
+//
+// return: r3 (always 1/TRUE)
+//
+ .text
+# if KMP_ARCH_PPC64_LE
+ .abiversion 2
+# endif
+ .globl __kmp_invoke_microtask
+
+# if KMP_ARCH_PPC64_LE
+ .p2align 4
+# else
+ .p2align 2
+# endif
+
+ .type __kmp_invoke_microtask,@function
+
+# if KMP_ARCH_PPC64_LE
+__kmp_invoke_microtask:
+.Lfunc_begin0:
+.Lfunc_gep0:
+ addis 2, 12, .TOC.-.Lfunc_gep0@ha
+ addi 2, 2, .TOC.-.Lfunc_gep0@l
+.Lfunc_lep0:
+ .localentry __kmp_invoke_microtask, .Lfunc_lep0-.Lfunc_gep0
+# else
+ .section .opd,"aw",@progbits
+__kmp_invoke_microtask:
+ .p2align 3
+ .quad .Lfunc_begin0
+ .quad .TOC.@tocbase
+ .quad 0
+ .text
+.Lfunc_begin0:
+# endif
+
+// -- Begin __kmp_invoke_microtask
+// mark_begin;
+
+// We need to allocate a stack frame large enough to hold all of the parameters
+// on the stack for the microtask plus what this function needs. That's 48
+// bytes under the ELFv1 ABI (32 bytes under ELFv2), plus 8*(2 + argc) for the
+// parameters to the microtask, plus 8 bytes to store the values of r4 and r5,
+// and 8 bytes to store r31. With OMP-T support, we need an additional 8 bytes
+// to save r30 to hold a copy of r8.
+
+ .cfi_startproc
+ mflr 0
+ std 31, -8(1)
+ std 0, 16(1)
+
+// This is unusual because normally we'd set r31 equal to r1 after the stack
+// frame is established. In this case, however, we need to dynamically compute
+// the stack frame size, and so we keep a direct copy of r1 to access our
+// register save areas and restore the r1 value before returning.
+ mr 31, 1
+ .cfi_def_cfa_register r31
+ .cfi_offset r31, -8
+ .cfi_offset lr, 16
+
+// Compute the size necessary for the local stack frame.
+# if KMP_ARCH_PPC64_LE
+ li 12, 72
+# else
+ li 12, 88
+# endif
+ sldi 0, 6, 3
+ add 12, 0, 12
+ neg 12, 12
+
+// We need to make sure that the stack frame stays aligned (to 16 bytes, except
+// under the BG/Q CNK, where it must be to 32 bytes).
+# if KMP_OS_CNK
+ li 0, -32
+# else
+ li 0, -16
+# endif
+ and 12, 0, 12
+
+// Establish the local stack frame.
+ stdux 1, 1, 12
+
+# if OMPT_SUPPORT
+ .cfi_offset r30, -16
+ std 30, -16(31)
+ std 1, 0(8)
+ mr 30, 8
+# endif
+
+// Store gtid and tid to the stack because they're passed by reference to the microtask.
+ stw 4, -20(31)
+ stw 5, -24(31)
+
+ mr 12, 6
+ mr 4, 7
+
+ cmpwi 0, 12, 1
+ blt 0, .Lcall
+
+ ld 5, 0(4)
+
+ cmpwi 0, 12, 2
+ blt 0, .Lcall
+
+ ld 6, 8(4)
+
+ cmpwi 0, 12, 3
+ blt 0, .Lcall
+
+ ld 7, 16(4)
+
+ cmpwi 0, 12, 4
+ blt 0, .Lcall
+
+ ld 8, 24(4)
+
+ cmpwi 0, 12, 5
+ blt 0, .Lcall
+
+ ld 9, 32(4)
+
+ cmpwi 0, 12, 6
+ blt 0, .Lcall
+
+ ld 10, 40(4)
+
+ cmpwi 0, 12, 7
+ blt 0, .Lcall
+
+// There are more than 6 microtask parameters, so we need to store the
+// remainder to the stack.
+ addi 12, 12, -6
+ mtctr 12
+
+// These are set to 8 bytes before the first desired store address (we're using
+// pre-increment loads and stores in the loop below). The parameter save area
+// for the microtask begins 48 + 8*8 == 112 bytes above r1 for ELFv1 and
+// 32 + 8*8 == 96 bytes above r1 for ELFv2.
+ addi 4, 4, 40
+# if KMP_ARCH_PPC64_LE
+ addi 12, 1, 88
+# else
+ addi 12, 1, 104
+# endif
+
+.Lnext:
+ ldu 0, 8(4)
+ stdu 0, 8(12)
+ bdnz .Lnext
+
+.Lcall:
+# if KMP_ARCH_PPC64_LE
+ std 2, 24(1)
+ mr 12, 3
+#else
+ std 2, 40(1)
+// For ELFv1, we need to load the actual function address from the function descriptor.
+ ld 12, 0(3)
+ ld 2, 8(3)
+ ld 11, 16(3)
+#endif
+
+ addi 3, 31, -20
+ addi 4, 31, -24
+
+ mtctr 12
+ bctrl
+# if KMP_ARCH_PPC64_LE
+ ld 2, 24(1)
+# else
+ ld 2, 40(1)
+# endif
+
+# if OMPT_SUPPORT
+ li 3, 0
+ std 3, 0(30)
+# endif
+
+ li 3, 1
+
+# if OMPT_SUPPORT
+ ld 30, -16(31)
+# endif
+
+ mr 1, 31
+ ld 0, 16(1)
+ ld 31, -8(1)
+ mtlr 0
+ blr
+
+ .long 0
+ .quad 0
+.Lfunc_end0:
+ .size __kmp_invoke_microtask, .Lfunc_end0-.Lfunc_begin0
+ .cfi_endproc
+
+// -- End __kmp_invoke_microtask
+
+#endif /* KMP_ARCH_PPC64 */
+
+#if KMP_ARCH_ARM
+ .data
+ .comm .gomp_critical_user_,32,8
+ .data
+ .align 4
+ .global __kmp_unnamed_critical_addr
+__kmp_unnamed_critical_addr:
+ .4byte .gomp_critical_user_
+ .size __kmp_unnamed_critical_addr,4
+#endif /* KMP_ARCH_ARM */
+
+#if KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
+ .data
+ .comm .gomp_critical_user_,32,8
+ .data
+ .align 8
+ .global __kmp_unnamed_critical_addr
+__kmp_unnamed_critical_addr:
+ .8byte .gomp_critical_user_
+ .size __kmp_unnamed_critical_addr,8
+#endif /* KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 */
+
+#if KMP_OS_LINUX
+# if KMP_ARCH_ARM
+.section .note.GNU-stack,"",%progbits
+# else
+.section .note.GNU-stack,"",@progbits
+# endif
+#endif
diff --git a/final/runtime/src/z_Linux_util.c b/final/runtime/src/z_Linux_util.c
new file mode 100644
index 0000000..5f42d72
--- /dev/null
+++ b/final/runtime/src/z_Linux_util.c
@@ -0,0 +1,2659 @@
+/*
+ * z_Linux_util.c -- platform specific routines.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_wrapper_getpid.h"
+#include "kmp_itt.h"
+#include "kmp_str.h"
+#include "kmp_i18n.h"
+#include "kmp_lock.h"
+#include "kmp_io.h"
+#include "kmp_stats.h"
+#include "kmp_wait_release.h"
+
+#if !KMP_OS_FREEBSD && !KMP_OS_NETBSD
+# include <alloca.h>
+#endif
+#include <unistd.h>
+#include <math.h> // HUGE_VAL.
+#include <sys/time.h>
+#include <sys/times.h>
+#include <sys/resource.h>
+#include <sys/syscall.h>
+
+#if KMP_OS_LINUX && !KMP_OS_CNK
+# include <sys/sysinfo.h>
+# if KMP_USE_FUTEX
+// We should really include <futex.h>, but that causes compatibility problems on different
+// Linux* OS distributions that either require that you include (or break when you try to include)
+// <pci/types.h>.
+// Since all we need is the two macros below (which are part of the kernel ABI, so can't change)
+// we just define the constants here and don't include <futex.h>
+# ifndef FUTEX_WAIT
+# define FUTEX_WAIT 0
+# endif
+# ifndef FUTEX_WAKE
+# define FUTEX_WAKE 1
+# endif
+# endif
+#elif KMP_OS_DARWIN
+# include <sys/sysctl.h>
+# include <mach/mach.h>
+#elif KMP_OS_FREEBSD
+# include <pthread_np.h>
+#endif
+
+#include <dirent.h>
+#include <ctype.h>
+#include <fcntl.h>
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+struct kmp_sys_timer {
+ struct timespec start;
+};
+
+// Convert timespec to nanoseconds.
+#define TS2NS(timespec) (((timespec).tv_sec * 1e9) + (timespec).tv_nsec)
+
+static struct kmp_sys_timer __kmp_sys_timer_data;
+
+#if KMP_HANDLE_SIGNALS
+ typedef void (* sig_func_t )( int );
+ STATIC_EFI2_WORKAROUND struct sigaction __kmp_sighldrs[ NSIG ];
+ static sigset_t __kmp_sigset;
+#endif
+
+static int __kmp_init_runtime = FALSE;
+
+static int __kmp_fork_count = 0;
+
+static pthread_condattr_t __kmp_suspend_cond_attr;
+static pthread_mutexattr_t __kmp_suspend_mutex_attr;
+
+static kmp_cond_align_t __kmp_wait_cv;
+static kmp_mutex_align_t __kmp_wait_mx;
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef DEBUG_SUSPEND
+static void
+__kmp_print_cond( char *buffer, kmp_cond_align_t *cond )
+{
+ KMP_SNPRINTF( buffer, 128, "(cond (lock (%ld, %d)), (descr (%p)))",
+ cond->c_cond.__c_lock.__status, cond->c_cond.__c_lock.__spinlock,
+ cond->c_cond.__c_waiting );
+}
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if ( KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED)
+
+/*
+ * Affinity support
+ */
+
+/*
+ * On some of the older OS's that we build on, these constants aren't present
+ * in <asm/unistd.h> #included from <sys.syscall.h>. They must be the same on
+ * all systems of the same arch where they are defined, and they cannot change.
+ * stone forever.
+ */
+
+# if KMP_ARCH_X86 || KMP_ARCH_ARM
+# ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity 241
+# elif __NR_sched_setaffinity != 241
+# error Wrong code for setaffinity system call.
+# endif /* __NR_sched_setaffinity */
+# ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity 242
+# elif __NR_sched_getaffinity != 242
+# error Wrong code for getaffinity system call.
+# endif /* __NR_sched_getaffinity */
+
+# elif KMP_ARCH_AARCH64
+# ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity 122
+# elif __NR_sched_setaffinity != 122
+# error Wrong code for setaffinity system call.
+# endif /* __NR_sched_setaffinity */
+# ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity 123
+# elif __NR_sched_getaffinity != 123
+# error Wrong code for getaffinity system call.
+# endif /* __NR_sched_getaffinity */
+
+# elif KMP_ARCH_X86_64
+# ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity 203
+# elif __NR_sched_setaffinity != 203
+# error Wrong code for setaffinity system call.
+# endif /* __NR_sched_setaffinity */
+# ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity 204
+# elif __NR_sched_getaffinity != 204
+# error Wrong code for getaffinity system call.
+# endif /* __NR_sched_getaffinity */
+
+# elif KMP_ARCH_PPC64
+# ifndef __NR_sched_setaffinity
+# define __NR_sched_setaffinity 222
+# elif __NR_sched_setaffinity != 222
+# error Wrong code for setaffinity system call.
+# endif /* __NR_sched_setaffinity */
+# ifndef __NR_sched_getaffinity
+# define __NR_sched_getaffinity 223
+# elif __NR_sched_getaffinity != 223
+# error Wrong code for getaffinity system call.
+# endif /* __NR_sched_getaffinity */
+
+
+# else
+# error Unknown or unsupported architecture
+
+# endif /* KMP_ARCH_* */
+
+int
+__kmp_set_system_affinity( kmp_affin_mask_t const *mask, int abort_on_error )
+{
+ KMP_ASSERT2(KMP_AFFINITY_CAPABLE(),
+ "Illegal set affinity operation when not capable");
+#if KMP_USE_HWLOC
+ int retval = hwloc_set_cpubind(__kmp_hwloc_topology, (hwloc_cpuset_t)mask, HWLOC_CPUBIND_THREAD);
+#else
+ int retval = syscall( __NR_sched_setaffinity, 0, __kmp_affin_mask_size, mask );
+#endif
+ if (retval >= 0) {
+ return 0;
+ }
+ int error = errno;
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FatalSysError ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+}
+
+int
+__kmp_get_system_affinity( kmp_affin_mask_t *mask, int abort_on_error )
+{
+ KMP_ASSERT2(KMP_AFFINITY_CAPABLE(),
+ "Illegal get affinity operation when not capable");
+
+#if KMP_USE_HWLOC
+ int retval = hwloc_get_cpubind(__kmp_hwloc_topology, (hwloc_cpuset_t)mask, HWLOC_CPUBIND_THREAD);
+#else
+ int retval = syscall( __NR_sched_getaffinity, 0, __kmp_affin_mask_size, mask );
+#endif
+ if (retval >= 0) {
+ return 0;
+ }
+ int error = errno;
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FatalSysError ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+}
+
+void
+__kmp_affinity_bind_thread( int which )
+{
+ KMP_ASSERT2(KMP_AFFINITY_CAPABLE(),
+ "Illegal set affinity operation when not capable");
+
+ kmp_affin_mask_t *mask;
+ KMP_CPU_ALLOC_ON_STACK(mask);
+ KMP_CPU_ZERO(mask);
+ KMP_CPU_SET(which, mask);
+ __kmp_set_system_affinity(mask, TRUE);
+ KMP_CPU_FREE_FROM_STACK(mask);
+}
+
+/*
+ * Determine if we can access affinity functionality on this version of
+ * Linux* OS by checking __NR_sched_{get,set}affinity system calls, and set
+ * __kmp_affin_mask_size to the appropriate value (0 means not capable).
+ */
+void
+__kmp_affinity_determine_capable(const char *env_var)
+{
+ //
+ // Check and see if the OS supports thread affinity.
+ //
+
+# define KMP_CPU_SET_SIZE_LIMIT (1024*1024)
+
+ int gCode;
+ int sCode;
+ kmp_affin_mask_t *buf;
+ buf = ( kmp_affin_mask_t * ) KMP_INTERNAL_MALLOC( KMP_CPU_SET_SIZE_LIMIT );
+
+ // If Linux* OS:
+ // If the syscall fails or returns a suggestion for the size,
+ // then we don't have to search for an appropriate size.
+ gCode = syscall( __NR_sched_getaffinity, 0, KMP_CPU_SET_SIZE_LIMIT, buf );
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "initial getaffinity call returned %d errno = %d\n",
+ gCode, errno));
+
+ //if ((gCode < 0) && (errno == ENOSYS))
+ if (gCode < 0) {
+ //
+ // System call not supported
+ //
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)
+ && (__kmp_affinity_type != affinity_default)
+ && (__kmp_affinity_type != affinity_disabled))) {
+ int error = errno;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( GetAffSysCallNotSupported, env_var ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ KMP_AFFINITY_DISABLE();
+ KMP_INTERNAL_FREE(buf);
+ return;
+ }
+ if (gCode > 0) { // Linux* OS only
+ // The optimal situation: the OS returns the size of the buffer
+ // it expects.
+ //
+ // A verification of correct behavior is that Isetaffinity on a NULL
+ // buffer with the same size fails with errno set to EFAULT.
+ sCode = syscall( __NR_sched_setaffinity, 0, gCode, NULL );
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "setaffinity for mask size %d returned %d errno = %d\n",
+ gCode, sCode, errno));
+ if (sCode < 0) {
+ if (errno == ENOSYS) {
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)
+ && (__kmp_affinity_type != affinity_default)
+ && (__kmp_affinity_type != affinity_disabled))) {
+ int error = errno;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( SetAffSysCallNotSupported, env_var ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ KMP_AFFINITY_DISABLE();
+ KMP_INTERNAL_FREE(buf);
+ }
+ if (errno == EFAULT) {
+ KMP_AFFINITY_ENABLE(gCode);
+ KA_TRACE(10, ( "__kmp_affinity_determine_capable: "
+ "affinity supported (mask size %d)\n",
+ (int)__kmp_affin_mask_size));
+ KMP_INTERNAL_FREE(buf);
+ return;
+ }
+ }
+ }
+
+ //
+ // Call the getaffinity system call repeatedly with increasing set sizes
+ // until we succeed, or reach an upper bound on the search.
+ //
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "searching for proper set size\n"));
+ int size;
+ for (size = 1; size <= KMP_CPU_SET_SIZE_LIMIT; size *= 2) {
+ gCode = syscall( __NR_sched_getaffinity, 0, size, buf );
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "getaffinity for mask size %d returned %d errno = %d\n", size,
+ gCode, errno));
+
+ if (gCode < 0) {
+ if ( errno == ENOSYS )
+ {
+ //
+ // We shouldn't get here
+ //
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "inconsistent OS call behavior: errno == ENOSYS for mask size %d\n",
+ size));
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)
+ && (__kmp_affinity_type != affinity_default)
+ && (__kmp_affinity_type != affinity_disabled))) {
+ int error = errno;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( GetAffSysCallNotSupported, env_var ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ KMP_AFFINITY_DISABLE();
+ KMP_INTERNAL_FREE(buf);
+ return;
+ }
+ continue;
+ }
+
+ sCode = syscall( __NR_sched_setaffinity, 0, gCode, NULL );
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "setaffinity for mask size %d returned %d errno = %d\n",
+ gCode, sCode, errno));
+ if (sCode < 0) {
+ if (errno == ENOSYS) { // Linux* OS only
+ //
+ // We shouldn't get here
+ //
+ KA_TRACE(30, ( "__kmp_affinity_determine_capable: "
+ "inconsistent OS call behavior: errno == ENOSYS for mask size %d\n",
+ size));
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)
+ && (__kmp_affinity_type != affinity_default)
+ && (__kmp_affinity_type != affinity_disabled))) {
+ int error = errno;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( SetAffSysCallNotSupported, env_var ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ KMP_AFFINITY_DISABLE();
+ KMP_INTERNAL_FREE(buf);
+ return;
+ }
+ if (errno == EFAULT) {
+ KMP_AFFINITY_ENABLE(gCode);
+ KA_TRACE(10, ( "__kmp_affinity_determine_capable: "
+ "affinity supported (mask size %d)\n",
+ (int)__kmp_affin_mask_size));
+ KMP_INTERNAL_FREE(buf);
+ return;
+ }
+ }
+ }
+ //int error = errno; // save uncaught error code
+ KMP_INTERNAL_FREE(buf);
+ // errno = error; // restore uncaught error code, will be printed at the next KMP_WARNING below
+
+ //
+ // Affinity is not supported
+ //
+ KMP_AFFINITY_DISABLE();
+ KA_TRACE(10, ( "__kmp_affinity_determine_capable: "
+ "cannot determine mask size - affinity not supported\n"));
+ if (__kmp_affinity_verbose || (__kmp_affinity_warnings
+ && (__kmp_affinity_type != affinity_none)
+ && (__kmp_affinity_type != affinity_default)
+ && (__kmp_affinity_type != affinity_disabled))) {
+ KMP_WARNING( AffCantGetMaskSize, env_var );
+ }
+}
+
+#endif // KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_USE_FUTEX
+
+int
+__kmp_futex_determine_capable()
+{
+ int loc = 0;
+ int rc = syscall( __NR_futex, &loc, FUTEX_WAKE, 1, NULL, NULL, 0 );
+ int retval = ( rc == 0 ) || ( errno != ENOSYS );
+
+ KA_TRACE(10, ( "__kmp_futex_determine_capable: rc = %d errno = %d\n", rc,
+ errno ) );
+ KA_TRACE(10, ( "__kmp_futex_determine_capable: futex syscall%s supported\n",
+ retval ? "" : " not" ) );
+
+ return retval;
+}
+
+#endif // KMP_USE_FUTEX
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if (KMP_ARCH_X86 || KMP_ARCH_X86_64) && (! KMP_ASM_INTRINS)
+/*
+ * Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
+ * use compare_and_store for these routines
+ */
+
+kmp_int8
+__kmp_test_then_or8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int8 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value | d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value | d;
+ }
+ return old_value;
+}
+
+kmp_int8
+__kmp_test_then_and8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int8 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value & d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value & d;
+ }
+ return old_value;
+}
+
+kmp_int32
+__kmp_test_then_or32( volatile kmp_int32 *p, kmp_int32 d )
+{
+ kmp_int32 old_value, new_value;
+
+ old_value = TCR_4( *p );
+ new_value = old_value | d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_4( *p );
+ new_value = old_value | d;
+ }
+ return old_value;
+}
+
+kmp_int32
+__kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 d )
+{
+ kmp_int32 old_value, new_value;
+
+ old_value = TCR_4( *p );
+ new_value = old_value & d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_4( *p );
+ new_value = old_value & d;
+ }
+ return old_value;
+}
+
+# if KMP_ARCH_X86 || KMP_ARCH_PPC64 || (KMP_OS_LINUX && KMP_ARCH_AARCH64)
+kmp_int8
+__kmp_test_then_add8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int8 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value + d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value + d;
+ }
+ return old_value;
+}
+
+kmp_int64
+__kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value + d;
+
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value + d;
+ }
+ return old_value;
+}
+# endif /* KMP_ARCH_X86 || KMP_ARCH_PPC64 || (KMP_OS_LINUX && KMP_ARCH_AARCH64) */
+
+kmp_int64
+__kmp_test_then_or64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value | d;
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value | d;
+ }
+ return old_value;
+}
+
+kmp_int64
+__kmp_test_then_and64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value & d;
+ while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value & d;
+ }
+ return old_value;
+}
+
+#endif /* (KMP_ARCH_X86 || KMP_ARCH_X86_64) && (! KMP_ASM_INTRINS) */
+
+void
+__kmp_terminate_thread( int gtid )
+{
+ int status;
+ kmp_info_t *th = __kmp_threads[ gtid ];
+
+ if ( !th ) return;
+
+ #ifdef KMP_CANCEL_THREADS
+ KA_TRACE( 10, ("__kmp_terminate_thread: kill (%d)\n", gtid ) );
+ status = pthread_cancel( th->th.th_info.ds.ds_thread );
+ if ( status != 0 && status != ESRCH ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantTerminateWorkerThread ),
+ KMP_ERR( status ),
+ __kmp_msg_null
+ );
+ }; // if
+ #endif
+ __kmp_yield( TRUE );
+} //
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+/*
+ * Set thread stack info according to values returned by
+ * pthread_getattr_np().
+ * If values are unreasonable, assume call failed and use
+ * incremental stack refinement method instead.
+ * Returns TRUE if the stack parameters could be determined exactly,
+ * FALSE if incremental refinement is necessary.
+ */
+static kmp_int32
+__kmp_set_stack_info( int gtid, kmp_info_t *th )
+{
+ int stack_data;
+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
+ /* Linux* OS only -- no pthread_getattr_np support on OS X* */
+ pthread_attr_t attr;
+ int status;
+ size_t size = 0;
+ void * addr = 0;
+
+ /* Always do incremental stack refinement for ubermaster threads since the initial
+ thread stack range can be reduced by sibling thread creation so pthread_attr_getstack
+ may cause thread gtid aliasing */
+ if ( ! KMP_UBER_GTID(gtid) ) {
+
+ /* Fetch the real thread attributes */
+ status = pthread_attr_init( &attr );
+ KMP_CHECK_SYSFAIL( "pthread_attr_init", status );
+#if KMP_OS_FREEBSD || KMP_OS_NETBSD
+ status = pthread_attr_get_np( pthread_self(), &attr );
+ KMP_CHECK_SYSFAIL( "pthread_attr_get_np", status );
+#else
+ status = pthread_getattr_np( pthread_self(), &attr );
+ KMP_CHECK_SYSFAIL( "pthread_getattr_np", status );
+#endif
+ status = pthread_attr_getstack( &attr, &addr, &size );
+ KMP_CHECK_SYSFAIL( "pthread_attr_getstack", status );
+ KA_TRACE( 60, ( "__kmp_set_stack_info: T#%d pthread_attr_getstack returned size: %lu, "
+ "low addr: %p\n",
+ gtid, size, addr ));
+
+ status = pthread_attr_destroy( &attr );
+ KMP_CHECK_SYSFAIL( "pthread_attr_destroy", status );
+ }
+
+ if ( size != 0 && addr != 0 ) { /* was stack parameter determination successful? */
+ /* Store the correct base and size */
+ TCW_PTR(th->th.th_info.ds.ds_stackbase, (((char *)addr) + size));
+ TCW_PTR(th->th.th_info.ds.ds_stacksize, size);
+ TCW_4(th->th.th_info.ds.ds_stackgrow, FALSE);
+ return TRUE;
+ }
+#endif /* KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD */
+ /* Use incremental refinement starting from initial conservative estimate */
+ TCW_PTR(th->th.th_info.ds.ds_stacksize, 0);
+ TCW_PTR(th -> th.th_info.ds.ds_stackbase, &stack_data);
+ TCW_4(th->th.th_info.ds.ds_stackgrow, TRUE);
+ return FALSE;
+}
+
+static void*
+__kmp_launch_worker( void *thr )
+{
+ int status, old_type, old_state;
+#ifdef KMP_BLOCK_SIGNALS
+ sigset_t new_set, old_set;
+#endif /* KMP_BLOCK_SIGNALS */
+ void *exit_val;
+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
+ void * volatile padding = 0;
+#endif
+ int gtid;
+
+ gtid = ((kmp_info_t*)thr) -> th.th_info.ds.ds_gtid;
+ __kmp_gtid_set_specific( gtid );
+#ifdef KMP_TDATA_GTID
+ __kmp_gtid = gtid;
+#endif
+#if KMP_STATS_ENABLED
+ // set __thread local index to point to thread-specific stats
+ __kmp_stats_thread_ptr = ((kmp_info_t*)thr)->th.th_stats;
+ KMP_START_EXPLICIT_TIMER(OMP_worker_thread_life);
+ KMP_SET_THREAD_STATE(IDLE);
+ KMP_INIT_PARTITIONED_TIMERS(OMP_idle);
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_thread_name( gtid );
+#endif /* USE_ITT_BUILD */
+
+#if KMP_AFFINITY_SUPPORTED
+ __kmp_affinity_set_init_mask( gtid, FALSE );
+#endif
+
+#ifdef KMP_CANCEL_THREADS
+ status = pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, & old_type );
+ KMP_CHECK_SYSFAIL( "pthread_setcanceltype", status );
+ /* josh todo: isn't PTHREAD_CANCEL_ENABLE default for newly-created threads? */
+ status = pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, & old_state );
+ KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
+#endif
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ //
+ // Set the FP control regs to be a copy of
+ // the parallel initialization thread's.
+ //
+ __kmp_clear_x87_fpu_status_word();
+ __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
+ __kmp_load_mxcsr( &__kmp_init_mxcsr );
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+#ifdef KMP_BLOCK_SIGNALS
+ status = sigfillset( & new_set );
+ KMP_CHECK_SYSFAIL_ERRNO( "sigfillset", status );
+ status = pthread_sigmask( SIG_BLOCK, & new_set, & old_set );
+ KMP_CHECK_SYSFAIL( "pthread_sigmask", status );
+#endif /* KMP_BLOCK_SIGNALS */
+
+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
+ if ( __kmp_stkoffset > 0 && gtid > 0 ) {
+ padding = KMP_ALLOCA( gtid * __kmp_stkoffset );
+ }
+#endif
+
+ KMP_MB();
+ __kmp_set_stack_info( gtid, (kmp_info_t*)thr );
+
+ __kmp_check_stack_overlap( (kmp_info_t*)thr );
+
+ exit_val = __kmp_launch_thread( (kmp_info_t *) thr );
+
+#ifdef KMP_BLOCK_SIGNALS
+ status = pthread_sigmask( SIG_SETMASK, & old_set, NULL );
+ KMP_CHECK_SYSFAIL( "pthread_sigmask", status );
+#endif /* KMP_BLOCK_SIGNALS */
+
+ return exit_val;
+}
+
+/* The monitor thread controls all of the threads in the complex */
+
+static void*
+__kmp_launch_monitor( void *thr )
+{
+ int status, old_type, old_state;
+#ifdef KMP_BLOCK_SIGNALS
+ sigset_t new_set;
+#endif /* KMP_BLOCK_SIGNALS */
+ struct timespec interval;
+ int yield_count;
+ int yield_cycles = 0;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #1 launched\n" ) );
+
+ /* register us as the monitor thread */
+ __kmp_gtid_set_specific( KMP_GTID_MONITOR );
+#ifdef KMP_TDATA_GTID
+ __kmp_gtid = KMP_GTID_MONITOR;
+#endif
+
+ KMP_MB();
+
+#if USE_ITT_BUILD
+ __kmp_itt_thread_ignore(); // Instruct Intel(R) Threading Tools to ignore monitor thread.
+#endif /* USE_ITT_BUILD */
+
+ __kmp_set_stack_info( ((kmp_info_t*)thr)->th.th_info.ds.ds_gtid, (kmp_info_t*)thr );
+
+ __kmp_check_stack_overlap( (kmp_info_t*)thr );
+
+#ifdef KMP_CANCEL_THREADS
+ status = pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, & old_type );
+ KMP_CHECK_SYSFAIL( "pthread_setcanceltype", status );
+ /* josh todo: isn't PTHREAD_CANCEL_ENABLE default for newly-created threads? */
+ status = pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, & old_state );
+ KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
+#endif
+
+ #if KMP_REAL_TIME_FIX
+ // This is a potential fix which allows application with real-time scheduling policy work.
+ // However, decision about the fix is not made yet, so it is disabled by default.
+ { // Are program started with real-time scheduling policy?
+ int sched = sched_getscheduler( 0 );
+ if ( sched == SCHED_FIFO || sched == SCHED_RR ) {
+ // Yes, we are a part of real-time application. Try to increase the priority of the
+ // monitor.
+ struct sched_param param;
+ int max_priority = sched_get_priority_max( sched );
+ int rc;
+ KMP_WARNING( RealTimeSchedNotSupported );
+ sched_getparam( 0, & param );
+ if ( param.sched_priority < max_priority ) {
+ param.sched_priority += 1;
+ rc = sched_setscheduler( 0, sched, & param );
+ if ( rc != 0 ) {
+ int error = errno;
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantChangeMonitorPriority ),
+ KMP_ERR( error ),
+ KMP_MSG( MonitorWillStarve ),
+ __kmp_msg_null
+ );
+ }; // if
+ } else {
+ // We cannot abort here, because number of CPUs may be enough for all the threads,
+ // including the monitor thread, so application could potentially work...
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( RunningAtMaxPriority ),
+ KMP_MSG( MonitorWillStarve ),
+ KMP_HNT( RunningAtMaxPriority ),
+ __kmp_msg_null
+ );
+ }; // if
+ }; // if
+ TCW_4( __kmp_global.g.g_time.dt.t_value, 0 ); // AC: free thread that waits for monitor started
+ }
+ #endif // KMP_REAL_TIME_FIX
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ if ( __kmp_monitor_wakeups == 1 ) {
+ interval.tv_sec = 1;
+ interval.tv_nsec = 0;
+ } else {
+ interval.tv_sec = 0;
+ interval.tv_nsec = (KMP_NSEC_PER_SEC / __kmp_monitor_wakeups);
+ }
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #2 monitor\n" ) );
+
+ if (__kmp_yield_cycle) {
+ __kmp_yielding_on = 0; /* Start out with yielding shut off */
+ yield_count = __kmp_yield_off_count;
+ } else {
+ __kmp_yielding_on = 1; /* Yielding is on permanently */
+ }
+
+ while( ! TCR_4( __kmp_global.g.g_done ) ) {
+ struct timespec now;
+ struct timeval tval;
+
+ /* This thread monitors the state of the system */
+
+ KA_TRACE( 15, ( "__kmp_launch_monitor: update\n" ) );
+
+ status = gettimeofday( &tval, NULL );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+ TIMEVAL_TO_TIMESPEC( &tval, &now );
+
+ now.tv_sec += interval.tv_sec;
+ now.tv_nsec += interval.tv_nsec;
+
+ if (now.tv_nsec >= KMP_NSEC_PER_SEC) {
+ now.tv_sec += 1;
+ now.tv_nsec -= KMP_NSEC_PER_SEC;
+ }
+
+ status = pthread_mutex_lock( & __kmp_wait_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_lock", status );
+ // AC: the monitor should not fall asleep if g_done has been set
+ if ( !TCR_4(__kmp_global.g.g_done) ) { // check once more under mutex
+ status = pthread_cond_timedwait( &__kmp_wait_cv.c_cond, &__kmp_wait_mx.m_mutex, &now );
+ if ( status != 0 ) {
+ if ( status != ETIMEDOUT && status != EINTR ) {
+ KMP_SYSFAIL( "pthread_cond_timedwait", status );
+ };
+ };
+ };
+ status = pthread_mutex_unlock( & __kmp_wait_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+
+ if (__kmp_yield_cycle) {
+ yield_cycles++;
+ if ( (yield_cycles % yield_count) == 0 ) {
+ if (__kmp_yielding_on) {
+ __kmp_yielding_on = 0; /* Turn it off now */
+ yield_count = __kmp_yield_off_count;
+ } else {
+ __kmp_yielding_on = 1; /* Turn it on now */
+ yield_count = __kmp_yield_on_count;
+ }
+ yield_cycles = 0;
+ }
+ } else {
+ __kmp_yielding_on = 1;
+ }
+
+ TCW_4( __kmp_global.g.g_time.dt.t_value,
+ TCR_4( __kmp_global.g.g_time.dt.t_value ) + 1 );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #3 cleanup\n" ) );
+
+#ifdef KMP_BLOCK_SIGNALS
+ status = sigfillset( & new_set );
+ KMP_CHECK_SYSFAIL_ERRNO( "sigfillset", status );
+ status = pthread_sigmask( SIG_UNBLOCK, & new_set, NULL );
+ KMP_CHECK_SYSFAIL( "pthread_sigmask", status );
+#endif /* KMP_BLOCK_SIGNALS */
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #4 finished\n" ) );
+
+ if( __kmp_global.g.g_abort != 0 ) {
+ /* now we need to terminate the worker threads */
+ /* the value of t_abort is the signal we caught */
+
+ int gtid;
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #5 terminate sig=%d\n", __kmp_global.g.g_abort ) );
+
+ /* terminate the OpenMP worker threads */
+ /* TODO this is not valid for sibling threads!!
+ * the uber master might not be 0 anymore.. */
+ for (gtid = 1; gtid < __kmp_threads_capacity; ++gtid)
+ __kmp_terminate_thread( gtid );
+
+ __kmp_cleanup();
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #6 raise sig=%d\n", __kmp_global.g.g_abort ) );
+
+ if (__kmp_global.g.g_abort > 0)
+ raise( __kmp_global.g.g_abort );
+
+ }
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: #7 exit\n" ) );
+
+ return thr;
+}
+
+void
+__kmp_create_worker( int gtid, kmp_info_t *th, size_t stack_size )
+{
+ pthread_t handle;
+ pthread_attr_t thread_attr;
+ int status;
+
+
+ th->th.th_info.ds.ds_gtid = gtid;
+
+#if KMP_STATS_ENABLED
+ // sets up worker thread stats
+ __kmp_acquire_tas_lock(&__kmp_stats_lock, gtid);
+
+ // th->th.th_stats is used to transfer thread specific stats-pointer to __kmp_launch_worker
+ // So when thread is created (goes into __kmp_launch_worker) it will
+ // set it's __thread local pointer to th->th.th_stats
+ th->th.th_stats = __kmp_stats_list.push_back(gtid);
+ if(KMP_UBER_GTID(gtid)) {
+ __kmp_stats_start_time = tsc_tick_count::now();
+ __kmp_stats_thread_ptr = th->th.th_stats;
+ __kmp_stats_init();
+ KMP_START_EXPLICIT_TIMER(OMP_worker_thread_life);
+ KMP_SET_THREAD_STATE(SERIAL_REGION);
+ KMP_INIT_PARTITIONED_TIMERS(OMP_serial);
+ }
+ __kmp_release_tas_lock(&__kmp_stats_lock, gtid);
+
+#endif // KMP_STATS_ENABLED
+
+ if ( KMP_UBER_GTID(gtid) ) {
+ KA_TRACE( 10, ("__kmp_create_worker: uber thread (%d)\n", gtid ) );
+ th -> th.th_info.ds.ds_thread = pthread_self();
+ __kmp_set_stack_info( gtid, th );
+ __kmp_check_stack_overlap( th );
+ return;
+ }; // if
+
+ KA_TRACE( 10, ("__kmp_create_worker: try to create thread (%d)\n", gtid ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+#ifdef KMP_THREAD_ATTR
+ status = pthread_attr_init( &thread_attr );
+ if ( status != 0 ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantInitThreadAttrs ), KMP_ERR( status ), __kmp_msg_null);
+ }; // if
+ status = pthread_attr_setdetachstate( & thread_attr, PTHREAD_CREATE_JOINABLE );
+ if ( status != 0 ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantSetWorkerState ), KMP_ERR( status ), __kmp_msg_null);
+ }; // if
+
+ /* Set stack size for this thread now.
+ * The multiple of 2 is there because on some machines, requesting an unusual stacksize
+ * causes the thread to have an offset before the dummy alloca() takes place to create the
+ * offset. Since we want the user to have a sufficient stacksize AND support a stack offset, we
+ * alloca() twice the offset so that the upcoming alloca() does not eliminate any premade
+ * offset, and also gives the user the stack space they requested for all threads */
+ stack_size += gtid * __kmp_stkoffset * 2;
+
+ KA_TRACE( 10, ( "__kmp_create_worker: T#%d, default stacksize = %lu bytes, "
+ "__kmp_stksize = %lu bytes, final stacksize = %lu bytes\n",
+ gtid, KMP_DEFAULT_STKSIZE, __kmp_stksize, stack_size ) );
+
+# ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ status = pthread_attr_setstacksize( & thread_attr, stack_size );
+# ifdef KMP_BACKUP_STKSIZE
+ if ( status != 0 ) {
+ if ( ! __kmp_env_stksize ) {
+ stack_size = KMP_BACKUP_STKSIZE + gtid * __kmp_stkoffset;
+ __kmp_stksize = KMP_BACKUP_STKSIZE;
+ KA_TRACE( 10, ("__kmp_create_worker: T#%d, default stacksize = %lu bytes, "
+ "__kmp_stksize = %lu bytes, (backup) final stacksize = %lu "
+ "bytes\n",
+ gtid, KMP_DEFAULT_STKSIZE, __kmp_stksize, stack_size )
+ );
+ status = pthread_attr_setstacksize( &thread_attr, stack_size );
+ }; // if
+ }; // if
+# endif /* KMP_BACKUP_STKSIZE */
+ if ( status != 0 ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantSetWorkerStackSize, stack_size ), KMP_ERR( status ),
+ KMP_HNT( ChangeWorkerStackSize ), __kmp_msg_null);
+ }; // if
+# endif /* _POSIX_THREAD_ATTR_STACKSIZE */
+
+#endif /* KMP_THREAD_ATTR */
+
+ status = pthread_create( & handle, & thread_attr, __kmp_launch_worker, (void *) th );
+ if ( status != 0 || ! handle ) { // ??? Why do we check handle??
+#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ if ( status == EINVAL ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantSetWorkerStackSize, stack_size ), KMP_ERR( status ),
+ KMP_HNT( IncreaseWorkerStackSize ), __kmp_msg_null);
+ };
+ if ( status == ENOMEM ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantSetWorkerStackSize, stack_size ), KMP_ERR( status ),
+ KMP_HNT( DecreaseWorkerStackSize ), __kmp_msg_null);
+ };
+#endif /* _POSIX_THREAD_ATTR_STACKSIZE */
+ if ( status == EAGAIN ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( NoResourcesForWorkerThread ), KMP_ERR( status ),
+ KMP_HNT( Decrease_NUM_THREADS ), __kmp_msg_null);
+ }; // if
+ KMP_SYSFAIL( "pthread_create", status );
+ }; // if
+
+ th->th.th_info.ds.ds_thread = handle;
+
+#ifdef KMP_THREAD_ATTR
+ status = pthread_attr_destroy( & thread_attr );
+ if ( status ) {
+ __kmp_msg(kmp_ms_warning, KMP_MSG( CantDestroyThreadAttrs ), KMP_ERR( status ), __kmp_msg_null);
+ }; // if
+#endif /* KMP_THREAD_ATTR */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ("__kmp_create_worker: done creating thread (%d)\n", gtid ) );
+
+} // __kmp_create_worker
+
+
+void
+__kmp_create_monitor( kmp_info_t *th )
+{
+ pthread_t handle;
+ pthread_attr_t thread_attr;
+ size_t size;
+ int status;
+ int auto_adj_size = FALSE;
+
+ if( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
+ // We don't need monitor thread in case of MAX_BLOCKTIME
+ KA_TRACE( 10, ("__kmp_create_monitor: skipping monitor thread because of MAX blocktime\n" ) );
+ th->th.th_info.ds.ds_tid = 0; // this makes reap_monitor no-op
+ th->th.th_info.ds.ds_gtid = 0;
+ return;
+ }
+ KA_TRACE( 10, ("__kmp_create_monitor: try to create monitor\n" ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ th->th.th_info.ds.ds_tid = KMP_GTID_MONITOR;
+ th->th.th_info.ds.ds_gtid = KMP_GTID_MONITOR;
+ #if KMP_REAL_TIME_FIX
+ TCW_4( __kmp_global.g.g_time.dt.t_value, -1 ); // Will use it for synchronization a bit later.
+ #else
+ TCW_4( __kmp_global.g.g_time.dt.t_value, 0 );
+ #endif // KMP_REAL_TIME_FIX
+
+ #ifdef KMP_THREAD_ATTR
+ if ( __kmp_monitor_stksize == 0 ) {
+ __kmp_monitor_stksize = KMP_DEFAULT_MONITOR_STKSIZE;
+ auto_adj_size = TRUE;
+ }
+ status = pthread_attr_init( &thread_attr );
+ if ( status != 0 ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantInitThreadAttrs ),
+ KMP_ERR( status ),
+ __kmp_msg_null
+ );
+ }; // if
+ status = pthread_attr_setdetachstate( & thread_attr, PTHREAD_CREATE_JOINABLE );
+ if ( status != 0 ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetMonitorState ),
+ KMP_ERR( status ),
+ __kmp_msg_null
+ );
+ }; // if
+
+ #ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ status = pthread_attr_getstacksize( & thread_attr, & size );
+ KMP_CHECK_SYSFAIL( "pthread_attr_getstacksize", status );
+ #else
+ size = __kmp_sys_min_stksize;
+ #endif /* _POSIX_THREAD_ATTR_STACKSIZE */
+ #endif /* KMP_THREAD_ATTR */
+
+ if ( __kmp_monitor_stksize == 0 ) {
+ __kmp_monitor_stksize = KMP_DEFAULT_MONITOR_STKSIZE;
+ }
+ if ( __kmp_monitor_stksize < __kmp_sys_min_stksize ) {
+ __kmp_monitor_stksize = __kmp_sys_min_stksize;
+ }
+
+ KA_TRACE( 10, ( "__kmp_create_monitor: default stacksize = %lu bytes,"
+ "requested stacksize = %lu bytes\n",
+ size, __kmp_monitor_stksize ) );
+
+ retry:
+
+ /* Set stack size for this thread now. */
+
+ #ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ KA_TRACE( 10, ( "__kmp_create_monitor: setting stacksize = %lu bytes,",
+ __kmp_monitor_stksize ) );
+ status = pthread_attr_setstacksize( & thread_attr, __kmp_monitor_stksize );
+ if ( status != 0 ) {
+ if ( auto_adj_size ) {
+ __kmp_monitor_stksize *= 2;
+ goto retry;
+ }
+ __kmp_msg(
+ kmp_ms_warning, // should this be fatal? BB
+ KMP_MSG( CantSetMonitorStackSize, (long int) __kmp_monitor_stksize ),
+ KMP_ERR( status ),
+ KMP_HNT( ChangeMonitorStackSize ),
+ __kmp_msg_null
+ );
+ }; // if
+ #endif /* _POSIX_THREAD_ATTR_STACKSIZE */
+
+ status = pthread_create( &handle, & thread_attr, __kmp_launch_monitor, (void *) th );
+
+ if ( status != 0 ) {
+ #ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ if ( status == EINVAL ) {
+ if ( auto_adj_size && ( __kmp_monitor_stksize < (size_t)0x40000000 ) ) {
+ __kmp_monitor_stksize *= 2;
+ goto retry;
+ }
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetMonitorStackSize, __kmp_monitor_stksize ),
+ KMP_ERR( status ),
+ KMP_HNT( IncreaseMonitorStackSize ),
+ __kmp_msg_null
+ );
+ }; // if
+ if ( status == ENOMEM ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetMonitorStackSize, __kmp_monitor_stksize ),
+ KMP_ERR( status ),
+ KMP_HNT( DecreaseMonitorStackSize ),
+ __kmp_msg_null
+ );
+ }; // if
+ #endif /* _POSIX_THREAD_ATTR_STACKSIZE */
+ if ( status == EAGAIN ) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( NoResourcesForMonitorThread ),
+ KMP_ERR( status ),
+ KMP_HNT( DecreaseNumberOfThreadsInUse ),
+ __kmp_msg_null
+ );
+ }; // if
+ KMP_SYSFAIL( "pthread_create", status );
+ }; // if
+
+ th->th.th_info.ds.ds_thread = handle;
+
+ #if KMP_REAL_TIME_FIX
+ // Wait for the monitor thread is really started and set its *priority*.
+ KMP_DEBUG_ASSERT( sizeof( kmp_uint32 ) == sizeof( __kmp_global.g.g_time.dt.t_value ) );
+ __kmp_wait_yield_4(
+ (kmp_uint32 volatile *) & __kmp_global.g.g_time.dt.t_value, -1, & __kmp_neq_4, NULL
+ );
+ #endif // KMP_REAL_TIME_FIX
+
+ #ifdef KMP_THREAD_ATTR
+ status = pthread_attr_destroy( & thread_attr );
+ if ( status != 0 ) {
+ __kmp_msg( //
+ kmp_ms_warning,
+ KMP_MSG( CantDestroyThreadAttrs ),
+ KMP_ERR( status ),
+ __kmp_msg_null
+ );
+ }; // if
+ #endif
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ( "__kmp_create_monitor: monitor created %#.8lx\n", th->th.th_info.ds.ds_thread ) );
+
+} // __kmp_create_monitor
+
+void
+__kmp_exit_thread(
+ int exit_status
+) {
+ pthread_exit( (void *)(intptr_t) exit_status );
+} // __kmp_exit_thread
+
+void __kmp_resume_monitor();
+
+void
+__kmp_reap_monitor( kmp_info_t *th )
+{
+ int status;
+ void *exit_val;
+
+ KA_TRACE( 10, ("__kmp_reap_monitor: try to reap monitor thread with handle %#.8lx\n",
+ th->th.th_info.ds.ds_thread ) );
+
+ // If monitor has been created, its tid and gtid should be KMP_GTID_MONITOR.
+ // If both tid and gtid are 0, it means the monitor did not ever start.
+ // If both tid and gtid are KMP_GTID_DNE, the monitor has been shut down.
+ KMP_DEBUG_ASSERT( th->th.th_info.ds.ds_tid == th->th.th_info.ds.ds_gtid );
+ if ( th->th.th_info.ds.ds_gtid != KMP_GTID_MONITOR ) {
+ KA_TRACE( 10, ("__kmp_reap_monitor: monitor did not start, returning\n") );
+ return;
+ }; // if
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+
+ /* First, check to see whether the monitor thread exists to wake it up. This is
+ to avoid performance problem when the monitor sleeps during blocktime-size
+ interval */
+
+ status = pthread_kill( th->th.th_info.ds.ds_thread, 0 );
+ if (status != ESRCH) {
+ __kmp_resume_monitor(); // Wake up the monitor thread
+ }
+ KA_TRACE( 10, ("__kmp_reap_monitor: try to join with monitor\n") );
+ status = pthread_join( th->th.th_info.ds.ds_thread, & exit_val);
+ if (exit_val != th) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( ReapMonitorError ),
+ KMP_ERR( status ),
+ __kmp_msg_null
+ );
+ }
+
+ th->th.th_info.ds.ds_tid = KMP_GTID_DNE;
+ th->th.th_info.ds.ds_gtid = KMP_GTID_DNE;
+
+ KA_TRACE( 10, ("__kmp_reap_monitor: done reaping monitor thread with handle %#.8lx\n",
+ th->th.th_info.ds.ds_thread ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+}
+
+void
+__kmp_reap_worker( kmp_info_t *th )
+{
+ int status;
+ void *exit_val;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ("__kmp_reap_worker: try to reap T#%d\n", th->th.th_info.ds.ds_gtid ) );
+
+ status = pthread_join( th->th.th_info.ds.ds_thread, & exit_val);
+#ifdef KMP_DEBUG
+ /* Don't expose these to the user until we understand when they trigger */
+ if ( status != 0 ) {
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( ReapWorkerError ), KMP_ERR( status ), __kmp_msg_null);
+ }
+ if ( exit_val != th ) {
+ KA_TRACE( 10, ( "__kmp_reap_worker: worker T#%d did not reap properly, exit_val = %p\n",
+ th->th.th_info.ds.ds_gtid, exit_val ) );
+ }
+#endif /* KMP_DEBUG */
+
+ KA_TRACE( 10, ("__kmp_reap_worker: done reaping T#%d\n", th->th.th_info.ds.ds_gtid ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_HANDLE_SIGNALS
+
+
+static void
+__kmp_null_handler( int signo )
+{
+ // Do nothing, for doing SIG_IGN-type actions.
+} // __kmp_null_handler
+
+
+static void
+__kmp_team_handler( int signo )
+{
+ if ( __kmp_global.g.g_abort == 0 ) {
+ /* Stage 1 signal handler, let's shut down all of the threads */
+ #ifdef KMP_DEBUG
+ __kmp_debug_printf( "__kmp_team_handler: caught signal = %d\n", signo );
+ #endif
+ switch ( signo ) {
+ case SIGHUP :
+ case SIGINT :
+ case SIGQUIT :
+ case SIGILL :
+ case SIGABRT :
+ case SIGFPE :
+ case SIGBUS :
+ case SIGSEGV :
+ #ifdef SIGSYS
+ case SIGSYS :
+ #endif
+ case SIGTERM :
+ if ( __kmp_debug_buf ) {
+ __kmp_dump_debug_buffer( );
+ }; // if
+ KMP_MB(); // Flush all pending memory write invalidates.
+ TCW_4( __kmp_global.g.g_abort, signo );
+ KMP_MB(); // Flush all pending memory write invalidates.
+ TCW_4( __kmp_global.g.g_done, TRUE );
+ KMP_MB(); // Flush all pending memory write invalidates.
+ break;
+ default:
+ #ifdef KMP_DEBUG
+ __kmp_debug_printf( "__kmp_team_handler: unknown signal type" );
+ #endif
+ break;
+ }; // switch
+ }; // if
+} // __kmp_team_handler
+
+
+static
+void __kmp_sigaction( int signum, const struct sigaction * act, struct sigaction * oldact ) {
+ int rc = sigaction( signum, act, oldact );
+ KMP_CHECK_SYSFAIL_ERRNO( "sigaction", rc );
+}
+
+
+static void
+__kmp_install_one_handler( int sig, sig_func_t handler_func, int parallel_init )
+{
+ KMP_MB(); // Flush all pending memory write invalidates.
+ KB_TRACE( 60, ( "__kmp_install_one_handler( %d, ..., %d )\n", sig, parallel_init ) );
+ if ( parallel_init ) {
+ struct sigaction new_action;
+ struct sigaction old_action;
+ new_action.sa_handler = handler_func;
+ new_action.sa_flags = 0;
+ sigfillset( & new_action.sa_mask );
+ __kmp_sigaction( sig, & new_action, & old_action );
+ if ( old_action.sa_handler == __kmp_sighldrs[ sig ].sa_handler ) {
+ sigaddset( & __kmp_sigset, sig );
+ } else {
+ // Restore/keep user's handler if one previously installed.
+ __kmp_sigaction( sig, & old_action, NULL );
+ }; // if
+ } else {
+ // Save initial/system signal handlers to see if user handlers installed.
+ __kmp_sigaction( sig, NULL, & __kmp_sighldrs[ sig ] );
+ }; // if
+ KMP_MB(); // Flush all pending memory write invalidates.
+} // __kmp_install_one_handler
+
+
+static void
+__kmp_remove_one_handler( int sig )
+{
+ KB_TRACE( 60, ( "__kmp_remove_one_handler( %d )\n", sig ) );
+ if ( sigismember( & __kmp_sigset, sig ) ) {
+ struct sigaction old;
+ KMP_MB(); // Flush all pending memory write invalidates.
+ __kmp_sigaction( sig, & __kmp_sighldrs[ sig ], & old );
+ if ( ( old.sa_handler != __kmp_team_handler ) && ( old.sa_handler != __kmp_null_handler ) ) {
+ // Restore the users signal handler.
+ KB_TRACE( 10, ( "__kmp_remove_one_handler: oops, not our handler, restoring: sig=%d\n", sig ) );
+ __kmp_sigaction( sig, & old, NULL );
+ }; // if
+ sigdelset( & __kmp_sigset, sig );
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }; // if
+} // __kmp_remove_one_handler
+
+
+void
+__kmp_install_signals( int parallel_init )
+{
+ KB_TRACE( 10, ( "__kmp_install_signals( %d )\n", parallel_init ) );
+ if ( __kmp_handle_signals || ! parallel_init ) {
+ // If ! parallel_init, we do not install handlers, just save original handlers.
+ // Let us do it even __handle_signals is 0.
+ sigemptyset( & __kmp_sigset );
+ __kmp_install_one_handler( SIGHUP, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGINT, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGQUIT, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGILL, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGABRT, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGFPE, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGBUS, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGSEGV, __kmp_team_handler, parallel_init );
+ #ifdef SIGSYS
+ __kmp_install_one_handler( SIGSYS, __kmp_team_handler, parallel_init );
+ #endif // SIGSYS
+ __kmp_install_one_handler( SIGTERM, __kmp_team_handler, parallel_init );
+ #ifdef SIGPIPE
+ __kmp_install_one_handler( SIGPIPE, __kmp_team_handler, parallel_init );
+ #endif // SIGPIPE
+ }; // if
+} // __kmp_install_signals
+
+
+void
+__kmp_remove_signals( void )
+{
+ int sig;
+ KB_TRACE( 10, ( "__kmp_remove_signals()\n" ) );
+ for ( sig = 1; sig < NSIG; ++ sig ) {
+ __kmp_remove_one_handler( sig );
+ }; // for sig
+} // __kmp_remove_signals
+
+
+#endif // KMP_HANDLE_SIGNALS
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_enable( int new_state )
+{
+ #ifdef KMP_CANCEL_THREADS
+ int status, old_state;
+ status = pthread_setcancelstate( new_state, & old_state );
+ KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
+ KMP_DEBUG_ASSERT( old_state == PTHREAD_CANCEL_DISABLE );
+ #endif
+}
+
+void
+__kmp_disable( int * old_state )
+{
+ #ifdef KMP_CANCEL_THREADS
+ int status;
+ status = pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, old_state );
+ KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
+ #endif
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+static void
+__kmp_atfork_prepare (void)
+{
+ /* nothing to do */
+}
+
+static void
+__kmp_atfork_parent (void)
+{
+ /* nothing to do */
+}
+
+/*
+ Reset the library so execution in the child starts "all over again" with
+ clean data structures in initial states. Don't worry about freeing memory
+ allocated by parent, just abandon it to be safe.
+*/
+static void
+__kmp_atfork_child (void)
+{
+ /* TODO make sure this is done right for nested/sibling */
+ // ATT: Memory leaks are here? TODO: Check it and fix.
+ /* KMP_ASSERT( 0 ); */
+
+ ++__kmp_fork_count;
+
+ __kmp_init_runtime = FALSE;
+ __kmp_init_monitor = 0;
+ __kmp_init_parallel = FALSE;
+ __kmp_init_middle = FALSE;
+ __kmp_init_serial = FALSE;
+ TCW_4(__kmp_init_gtid, FALSE);
+ __kmp_init_common = FALSE;
+
+ TCW_4(__kmp_init_user_locks, FALSE);
+#if ! KMP_USE_DYNAMIC_LOCK
+ __kmp_user_lock_table.used = 1;
+ __kmp_user_lock_table.allocated = 0;
+ __kmp_user_lock_table.table = NULL;
+ __kmp_lock_blocks = NULL;
+#endif
+
+ __kmp_all_nth = 0;
+ TCW_4(__kmp_nth, 0);
+
+ /* Must actually zero all the *cache arguments passed to __kmpc_threadprivate here
+ so threadprivate doesn't use stale data */
+ KA_TRACE( 10, ( "__kmp_atfork_child: checking cache address list %p\n",
+ __kmp_threadpriv_cache_list ) );
+
+ while ( __kmp_threadpriv_cache_list != NULL ) {
+
+ if ( *__kmp_threadpriv_cache_list -> addr != NULL ) {
+ KC_TRACE( 50, ( "__kmp_atfork_child: zeroing cache at address %p\n",
+ &(*__kmp_threadpriv_cache_list -> addr) ) );
+
+ *__kmp_threadpriv_cache_list -> addr = NULL;
+ }
+ __kmp_threadpriv_cache_list = __kmp_threadpriv_cache_list -> next;
+ }
+
+ __kmp_init_runtime = FALSE;
+
+ /* reset statically initialized locks */
+ __kmp_init_bootstrap_lock( &__kmp_initz_lock );
+ __kmp_init_bootstrap_lock( &__kmp_stdio_lock );
+ __kmp_init_bootstrap_lock( &__kmp_console_lock );
+
+ /* This is necessary to make sure no stale data is left around */
+ /* AC: customers complain that we use unsafe routines in the atfork
+ handler. Mathworks: dlsym() is unsafe. We call dlsym and dlopen
+ in dynamic_link when check the presence of shared tbbmalloc library.
+ Suggestion is to make the library initialization lazier, similar
+ to what done for __kmpc_begin(). */
+ // TODO: synchronize all static initializations with regular library
+ // startup; look at kmp_global.c and etc.
+ //__kmp_internal_begin ();
+
+}
+
+void
+__kmp_register_atfork(void) {
+ if ( __kmp_need_register_atfork ) {
+ int status = pthread_atfork( __kmp_atfork_prepare, __kmp_atfork_parent, __kmp_atfork_child );
+ KMP_CHECK_SYSFAIL( "pthread_atfork", status );
+ __kmp_need_register_atfork = FALSE;
+ }
+}
+
+void
+__kmp_suspend_initialize( void )
+{
+ int status;
+ status = pthread_mutexattr_init( &__kmp_suspend_mutex_attr );
+ KMP_CHECK_SYSFAIL( "pthread_mutexattr_init", status );
+ status = pthread_condattr_init( &__kmp_suspend_cond_attr );
+ KMP_CHECK_SYSFAIL( "pthread_condattr_init", status );
+}
+
+static void
+__kmp_suspend_initialize_thread( kmp_info_t *th )
+{
+ if ( th->th.th_suspend_init_count <= __kmp_fork_count ) {
+ /* this means we haven't initialized the suspension pthread objects for this thread
+ in this instance of the process */
+ int status;
+ status = pthread_cond_init( &th->th.th_suspend_cv.c_cond, &__kmp_suspend_cond_attr );
+ KMP_CHECK_SYSFAIL( "pthread_cond_init", status );
+ status = pthread_mutex_init( &th->th.th_suspend_mx.m_mutex, & __kmp_suspend_mutex_attr );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_init", status );
+ *(volatile int*)&th->th.th_suspend_init_count = __kmp_fork_count + 1;
+ };
+}
+
+void
+__kmp_suspend_uninitialize_thread( kmp_info_t *th )
+{
+ if(th->th.th_suspend_init_count > __kmp_fork_count) {
+ /* this means we have initialize the suspension pthread objects for this thread
+ in this instance of the process */
+ int status;
+
+ status = pthread_cond_destroy( &th->th.th_suspend_cv.c_cond );
+ if ( status != 0 && status != EBUSY ) {
+ KMP_SYSFAIL( "pthread_cond_destroy", status );
+ };
+ status = pthread_mutex_destroy( &th->th.th_suspend_mx.m_mutex );
+ if ( status != 0 && status != EBUSY ) {
+ KMP_SYSFAIL( "pthread_mutex_destroy", status );
+ };
+ --th->th.th_suspend_init_count;
+ KMP_DEBUG_ASSERT(th->th.th_suspend_init_count == __kmp_fork_count);
+ }
+}
+
+/* This routine puts the calling thread to sleep after setting the
+ * sleep bit for the indicated flag variable to true.
+ */
+template <class C>
+static inline void __kmp_suspend_template( int th_gtid, C *flag )
+{
+ KMP_TIME_DEVELOPER_BLOCK(USER_suspend);
+ kmp_info_t *th = __kmp_threads[th_gtid];
+ int status;
+ typename C::flag_t old_spin;
+
+ KF_TRACE( 30, ("__kmp_suspend_template: T#%d enter for flag = %p\n", th_gtid, flag->get() ) );
+
+ __kmp_suspend_initialize_thread( th );
+
+ status = pthread_mutex_lock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_lock", status );
+
+ KF_TRACE( 10, ( "__kmp_suspend_template: T#%d setting sleep bit for spin(%p)\n",
+ th_gtid, flag->get() ) );
+
+ /* TODO: shouldn't this use release semantics to ensure that __kmp_suspend_initialize_thread
+ gets called first?
+ */
+ old_spin = flag->set_sleeping();
+
+ KF_TRACE( 5, ( "__kmp_suspend_template: T#%d set sleep bit for spin(%p)==%x, was %x\n",
+ th_gtid, flag->get(), *(flag->get()), old_spin ) );
+
+ if ( flag->done_check_val(old_spin) ) {
+ old_spin = flag->unset_sleeping();
+ KF_TRACE( 5, ( "__kmp_suspend_template: T#%d false alarm, reset sleep bit for spin(%p)\n",
+ th_gtid, flag->get()) );
+ } else {
+ /* Encapsulate in a loop as the documentation states that this may
+ * "with low probability" return when the condition variable has
+ * not been signaled or broadcast
+ */
+ int deactivated = FALSE;
+ TCW_PTR(th->th.th_sleep_loc, (void *)flag);
+ while ( flag->is_sleeping() ) {
+#ifdef DEBUG_SUSPEND
+ char buffer[128];
+ __kmp_suspend_count++;
+ __kmp_print_cond( buffer, &th->th.th_suspend_cv );
+ __kmp_printf( "__kmp_suspend_template: suspending T#%d: %s\n", th_gtid, buffer );
+#endif
+ // Mark the thread as no longer active (only in the first iteration of the loop).
+ if ( ! deactivated ) {
+ th->th.th_active = FALSE;
+ if ( th->th.th_active_in_pool ) {
+ th->th.th_active_in_pool = FALSE;
+ KMP_TEST_THEN_DEC32(
+ (kmp_int32 *) &__kmp_thread_pool_active_nth );
+ KMP_DEBUG_ASSERT( TCR_4(__kmp_thread_pool_active_nth) >= 0 );
+ }
+ deactivated = TRUE;
+ }
+
+#if USE_SUSPEND_TIMEOUT
+ struct timespec now;
+ struct timeval tval;
+ int msecs;
+
+ status = gettimeofday( &tval, NULL );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+ TIMEVAL_TO_TIMESPEC( &tval, &now );
+
+ msecs = (4*__kmp_dflt_blocktime) + 200;
+ now.tv_sec += msecs / 1000;
+ now.tv_nsec += (msecs % 1000)*1000;
+
+ KF_TRACE( 15, ( "__kmp_suspend_template: T#%d about to perform pthread_cond_timedwait\n",
+ th_gtid ) );
+ status = pthread_cond_timedwait( &th->th.th_suspend_cv.c_cond, &th->th.th_suspend_mx.m_mutex, & now );
+#else
+ KF_TRACE( 15, ( "__kmp_suspend_template: T#%d about to perform pthread_cond_wait\n",
+ th_gtid ) );
+ status = pthread_cond_wait( &th->th.th_suspend_cv.c_cond, &th->th.th_suspend_mx.m_mutex );
+#endif
+
+ if ( (status != 0) && (status != EINTR) && (status != ETIMEDOUT) ) {
+ KMP_SYSFAIL( "pthread_cond_wait", status );
+ }
+#ifdef KMP_DEBUG
+ if (status == ETIMEDOUT) {
+ if ( flag->is_sleeping() ) {
+ KF_TRACE( 100, ( "__kmp_suspend_template: T#%d timeout wakeup\n", th_gtid ) );
+ } else {
+ KF_TRACE( 2, ( "__kmp_suspend_template: T#%d timeout wakeup, sleep bit not set!\n",
+ th_gtid ) );
+ }
+ } else if ( flag->is_sleeping() ) {
+ KF_TRACE( 100, ( "__kmp_suspend_template: T#%d spurious wakeup\n", th_gtid ) );
+ }
+#endif
+ } // while
+
+ // Mark the thread as active again (if it was previous marked as inactive)
+ if ( deactivated ) {
+ th->th.th_active = TRUE;
+ if ( TCR_4(th->th.th_in_pool) ) {
+ KMP_TEST_THEN_INC32( (kmp_int32 *) &__kmp_thread_pool_active_nth );
+ th->th.th_active_in_pool = TRUE;
+ }
+ }
+ }
+
+#ifdef DEBUG_SUSPEND
+ {
+ char buffer[128];
+ __kmp_print_cond( buffer, &th->th.th_suspend_cv);
+ __kmp_printf( "__kmp_suspend_template: T#%d has awakened: %s\n", th_gtid, buffer );
+ }
+#endif
+
+ status = pthread_mutex_unlock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+
+ KF_TRACE( 30, ("__kmp_suspend_template: T#%d exit\n", th_gtid ) );
+}
+
+void __kmp_suspend_32(int th_gtid, kmp_flag_32 *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+void __kmp_suspend_64(int th_gtid, kmp_flag_64 *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+void __kmp_suspend_oncore(int th_gtid, kmp_flag_oncore *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+
+
+/* This routine signals the thread specified by target_gtid to wake up
+ * after setting the sleep bit indicated by the flag argument to FALSE.
+ * The target thread must already have called __kmp_suspend_template()
+ */
+template <class C>
+static inline void __kmp_resume_template( int target_gtid, C *flag )
+{
+ KMP_TIME_DEVELOPER_BLOCK(USER_resume);
+ kmp_info_t *th = __kmp_threads[target_gtid];
+ int status;
+
+#ifdef KMP_DEBUG
+ int gtid = TCR_4(__kmp_init_gtid) ? __kmp_get_gtid() : -1;
+#endif
+
+ KF_TRACE( 30, ( "__kmp_resume_template: T#%d wants to wakeup T#%d enter\n", gtid, target_gtid ) );
+ KMP_DEBUG_ASSERT( gtid != target_gtid );
+
+ __kmp_suspend_initialize_thread( th );
+
+ status = pthread_mutex_lock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_lock", status );
+
+ if (!flag) { // coming from __kmp_null_resume_wrapper
+ flag = (C *)th->th.th_sleep_loc;
+ }
+
+ // First, check if the flag is null or its type has changed. If so, someone else woke it up.
+ if (!flag || flag->get_type() != flag->get_ptr_type()) { // get_ptr_type simply shows what flag was cast to
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d exiting, thread T#%d already awake: flag(%p)\n",
+ gtid, target_gtid, NULL ) );
+ status = pthread_mutex_unlock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+ return;
+ }
+ else { // if multiple threads are sleeping, flag should be internally referring to a specific thread here
+ typename C::flag_t old_spin = flag->unset_sleeping();
+ if ( ! flag->is_sleeping_val(old_spin) ) {
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d exiting, thread T#%d already awake: flag(%p): "
+ "%u => %u\n",
+ gtid, target_gtid, flag->get(), old_spin, *flag->get() ) );
+ status = pthread_mutex_unlock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+ return;
+ }
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d about to wakeup T#%d, reset sleep bit for flag's loc(%p): "
+ "%u => %u\n",
+ gtid, target_gtid, flag->get(), old_spin, *flag->get() ) );
+ }
+ TCW_PTR(th->th.th_sleep_loc, NULL);
+
+
+#ifdef DEBUG_SUSPEND
+ {
+ char buffer[128];
+ __kmp_print_cond( buffer, &th->th.th_suspend_cv );
+ __kmp_printf( "__kmp_resume_template: T#%d resuming T#%d: %s\n", gtid, target_gtid, buffer );
+ }
+#endif
+
+ status = pthread_cond_signal( &th->th.th_suspend_cv.c_cond );
+ KMP_CHECK_SYSFAIL( "pthread_cond_signal", status );
+ status = pthread_mutex_unlock( &th->th.th_suspend_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+ KF_TRACE( 30, ( "__kmp_resume_template: T#%d exiting after signaling wake up for T#%d\n",
+ gtid, target_gtid ) );
+}
+
+void __kmp_resume_32(int target_gtid, kmp_flag_32 *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+void __kmp_resume_64(int target_gtid, kmp_flag_64 *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+void __kmp_resume_oncore(int target_gtid, kmp_flag_oncore *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+
+void
+__kmp_resume_monitor()
+{
+ KMP_TIME_DEVELOPER_BLOCK(USER_resume);
+ int status;
+#ifdef KMP_DEBUG
+ int gtid = TCR_4(__kmp_init_gtid) ? __kmp_get_gtid() : -1;
+ KF_TRACE( 30, ( "__kmp_resume_monitor: T#%d wants to wakeup T#%d enter\n",
+ gtid, KMP_GTID_MONITOR ) );
+ KMP_DEBUG_ASSERT( gtid != KMP_GTID_MONITOR );
+#endif
+ status = pthread_mutex_lock( &__kmp_wait_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_lock", status );
+#ifdef DEBUG_SUSPEND
+ {
+ char buffer[128];
+ __kmp_print_cond( buffer, &__kmp_wait_cv.c_cond );
+ __kmp_printf( "__kmp_resume_monitor: T#%d resuming T#%d: %s\n", gtid, KMP_GTID_MONITOR, buffer );
+ }
+#endif
+ status = pthread_cond_signal( &__kmp_wait_cv.c_cond );
+ KMP_CHECK_SYSFAIL( "pthread_cond_signal", status );
+ status = pthread_mutex_unlock( &__kmp_wait_mx.m_mutex );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_unlock", status );
+ KF_TRACE( 30, ( "__kmp_resume_monitor: T#%d exiting after signaling wake up for T#%d\n",
+ gtid, KMP_GTID_MONITOR ) );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_yield( int cond )
+{
+ if (cond && __kmp_yielding_on) {
+ sched_yield();
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_gtid_set_specific( int gtid )
+{
+ if( __kmp_init_gtid ) {
+ int status;
+ status = pthread_setspecific( __kmp_gtid_threadprivate_key, (void*)(intptr_t)(gtid+1) );
+ KMP_CHECK_SYSFAIL( "pthread_setspecific", status );
+ } else {
+ KA_TRACE( 50, ("__kmp_gtid_set_specific: runtime shutdown, returning\n" ) );
+ }
+}
+
+int
+__kmp_gtid_get_specific()
+{
+ int gtid;
+ if ( !__kmp_init_gtid ) {
+ KA_TRACE( 50, ("__kmp_gtid_get_specific: runtime shutdown, returning KMP_GTID_SHUTDOWN\n" ) );
+ return KMP_GTID_SHUTDOWN;
+ }
+ gtid = (int)(size_t)pthread_getspecific( __kmp_gtid_threadprivate_key );
+ if ( gtid == 0 ) {
+ gtid = KMP_GTID_DNE;
+ }
+ else {
+ gtid--;
+ }
+ KA_TRACE( 50, ("__kmp_gtid_get_specific: key:%d gtid:%d\n",
+ __kmp_gtid_threadprivate_key, gtid ));
+ return gtid;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+double
+__kmp_read_cpu_time( void )
+{
+ /*clock_t t;*/
+ struct tms buffer;
+
+ /*t =*/ times( & buffer );
+
+ return (buffer.tms_utime + buffer.tms_cutime) / (double) CLOCKS_PER_SEC;
+}
+
+int
+__kmp_read_system_info( struct kmp_sys_info *info )
+{
+ int status;
+ struct rusage r_usage;
+
+ memset( info, 0, sizeof( *info ) );
+
+ status = getrusage( RUSAGE_SELF, &r_usage);
+ KMP_CHECK_SYSFAIL_ERRNO( "getrusage", status );
+
+ info->maxrss = r_usage.ru_maxrss; /* the maximum resident set size utilized (in kilobytes) */
+ info->minflt = r_usage.ru_minflt; /* the number of page faults serviced without any I/O */
+ info->majflt = r_usage.ru_majflt; /* the number of page faults serviced that required I/O */
+ info->nswap = r_usage.ru_nswap; /* the number of times a process was "swapped" out of memory */
+ info->inblock = r_usage.ru_inblock; /* the number of times the file system had to perform input */
+ info->oublock = r_usage.ru_oublock; /* the number of times the file system had to perform output */
+ info->nvcsw = r_usage.ru_nvcsw; /* the number of times a context switch was voluntarily */
+ info->nivcsw = r_usage.ru_nivcsw; /* the number of times a context switch was forced */
+
+ return (status != 0);
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_read_system_time( double *delta )
+{
+ double t_ns;
+ struct timeval tval;
+ struct timespec stop;
+ int status;
+
+ status = gettimeofday( &tval, NULL );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+ TIMEVAL_TO_TIMESPEC( &tval, &stop );
+ t_ns = TS2NS(stop) - TS2NS(__kmp_sys_timer_data.start);
+ *delta = (t_ns * 1e-9);
+}
+
+void
+__kmp_clear_system_time( void )
+{
+ struct timeval tval;
+ int status;
+ status = gettimeofday( &tval, NULL );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+ TIMEVAL_TO_TIMESPEC( &tval, &__kmp_sys_timer_data.start );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#ifdef BUILD_TV
+
+void
+__kmp_tv_threadprivate_store( kmp_info_t *th, void *global_addr, void *thread_addr )
+{
+ struct tv_data *p;
+
+ p = (struct tv_data *) __kmp_allocate( sizeof( *p ) );
+
+ p->u.tp.global_addr = global_addr;
+ p->u.tp.thread_addr = thread_addr;
+
+ p->type = (void *) 1;
+
+ p->next = th->th.th_local.tv_data;
+ th->th.th_local.tv_data = p;
+
+ if ( p->next == 0 ) {
+ int rc = pthread_setspecific( __kmp_tv_key, p );
+ KMP_CHECK_SYSFAIL( "pthread_setspecific", rc );
+ }
+}
+
+#endif /* BUILD_TV */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+static int
+__kmp_get_xproc( void ) {
+
+ int r = 0;
+
+ #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
+
+ r = sysconf( _SC_NPROCESSORS_ONLN );
+
+ #elif KMP_OS_DARWIN
+
+ // Bug C77011 High "OpenMP Threads and number of active cores".
+
+ // Find the number of available CPUs.
+ kern_return_t rc;
+ host_basic_info_data_t info;
+ mach_msg_type_number_t num = HOST_BASIC_INFO_COUNT;
+ rc = host_info( mach_host_self(), HOST_BASIC_INFO, (host_info_t) & info, & num );
+ if ( rc == 0 && num == HOST_BASIC_INFO_COUNT ) {
+ // Cannot use KA_TRACE() here because this code works before trace support is
+ // initialized.
+ r = info.avail_cpus;
+ } else {
+ KMP_WARNING( CantGetNumAvailCPU );
+ KMP_INFORM( AssumedNumCPU );
+ }; // if
+
+ #else
+
+ #error "Unknown or unsupported OS."
+
+ #endif
+
+ return r > 0 ? r : 2; /* guess value of 2 if OS told us 0 */
+
+} // __kmp_get_xproc
+
+int
+__kmp_read_from_file( char const *path, char const *format, ... )
+{
+ int result;
+ va_list args;
+
+ va_start(args, format);
+ FILE *f = fopen(path, "rb");
+ if ( f == NULL )
+ return 0;
+ result = vfscanf(f, format, args);
+ fclose(f);
+
+ return result;
+}
+
+void
+__kmp_runtime_initialize( void )
+{
+ int status;
+ pthread_mutexattr_t mutex_attr;
+ pthread_condattr_t cond_attr;
+
+ if ( __kmp_init_runtime ) {
+ return;
+ }; // if
+
+ #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 )
+ if ( ! __kmp_cpuinfo.initialized ) {
+ __kmp_query_cpuid( &__kmp_cpuinfo );
+ }; // if
+ #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ __kmp_xproc = __kmp_get_xproc();
+
+ if ( sysconf( _SC_THREADS ) ) {
+
+ /* Query the maximum number of threads */
+ __kmp_sys_max_nth = sysconf( _SC_THREAD_THREADS_MAX );
+ if ( __kmp_sys_max_nth == -1 ) {
+ /* Unlimited threads for NPTL */
+ __kmp_sys_max_nth = INT_MAX;
+ }
+ else if ( __kmp_sys_max_nth <= 1 ) {
+ /* Can't tell, just use PTHREAD_THREADS_MAX */
+ __kmp_sys_max_nth = KMP_MAX_NTH;
+ }
+
+ /* Query the minimum stack size */
+ __kmp_sys_min_stksize = sysconf( _SC_THREAD_STACK_MIN );
+ if ( __kmp_sys_min_stksize <= 1 ) {
+ __kmp_sys_min_stksize = KMP_MIN_STKSIZE;
+ }
+ }
+
+ /* Set up minimum number of threads to switch to TLS gtid */
+ __kmp_tls_gtid_min = KMP_TLS_GTID_MIN;
+
+ #ifdef BUILD_TV
+ {
+ int rc = pthread_key_create( & __kmp_tv_key, 0 );
+ KMP_CHECK_SYSFAIL( "pthread_key_create", rc );
+ }
+ #endif
+
+ status = pthread_key_create( &__kmp_gtid_threadprivate_key, __kmp_internal_end_dest );
+ KMP_CHECK_SYSFAIL( "pthread_key_create", status );
+ status = pthread_mutexattr_init( & mutex_attr );
+ KMP_CHECK_SYSFAIL( "pthread_mutexattr_init", status );
+ status = pthread_mutex_init( & __kmp_wait_mx.m_mutex, & mutex_attr );
+ KMP_CHECK_SYSFAIL( "pthread_mutex_init", status );
+ status = pthread_condattr_init( & cond_attr );
+ KMP_CHECK_SYSFAIL( "pthread_condattr_init", status );
+ status = pthread_cond_init( & __kmp_wait_cv.c_cond, & cond_attr );
+ KMP_CHECK_SYSFAIL( "pthread_cond_init", status );
+#if USE_ITT_BUILD
+ __kmp_itt_initialize();
+#endif /* USE_ITT_BUILD */
+
+ __kmp_init_runtime = TRUE;
+}
+
+void
+__kmp_runtime_destroy( void )
+{
+ int status;
+
+ if ( ! __kmp_init_runtime ) {
+ return; // Nothing to do.
+ };
+
+#if USE_ITT_BUILD
+ __kmp_itt_destroy();
+#endif /* USE_ITT_BUILD */
+
+ status = pthread_key_delete( __kmp_gtid_threadprivate_key );
+ KMP_CHECK_SYSFAIL( "pthread_key_delete", status );
+ #ifdef BUILD_TV
+ status = pthread_key_delete( __kmp_tv_key );
+ KMP_CHECK_SYSFAIL( "pthread_key_delete", status );
+ #endif
+
+ status = pthread_mutex_destroy( & __kmp_wait_mx.m_mutex );
+ if ( status != 0 && status != EBUSY ) {
+ KMP_SYSFAIL( "pthread_mutex_destroy", status );
+ }
+ status = pthread_cond_destroy( & __kmp_wait_cv.c_cond );
+ if ( status != 0 && status != EBUSY ) {
+ KMP_SYSFAIL( "pthread_cond_destroy", status );
+ }
+ #if KMP_AFFINITY_SUPPORTED
+ __kmp_affinity_uninitialize();
+ #endif
+
+ __kmp_init_runtime = FALSE;
+}
+
+
+/* Put the thread to sleep for a time period */
+/* NOTE: not currently used anywhere */
+void
+__kmp_thread_sleep( int millis )
+{
+ sleep( ( millis + 500 ) / 1000 );
+}
+
+/* Calculate the elapsed wall clock time for the user */
+void
+__kmp_elapsed( double *t )
+{
+ int status;
+# ifdef FIX_SGI_CLOCK
+ struct timespec ts;
+
+ status = clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &ts );
+ KMP_CHECK_SYSFAIL_ERRNO( "clock_gettime", status );
+ *t = (double) ts.tv_nsec * (1.0 / (double) KMP_NSEC_PER_SEC) +
+ (double) ts.tv_sec;
+# else
+ struct timeval tv;
+
+ status = gettimeofday( & tv, NULL );
+ KMP_CHECK_SYSFAIL_ERRNO( "gettimeofday", status );
+ *t = (double) tv.tv_usec * (1.0 / (double) KMP_USEC_PER_SEC) +
+ (double) tv.tv_sec;
+# endif
+}
+
+/* Calculate the elapsed wall clock tick for the user */
+void
+__kmp_elapsed_tick( double *t )
+{
+ *t = 1 / (double) CLOCKS_PER_SEC;
+}
+
+/* Return the current time stamp in nsec */
+kmp_uint64
+__kmp_now_nsec()
+{
+ struct timeval t;
+ gettimeofday(&t, NULL);
+ return KMP_NSEC_PER_SEC*t.tv_sec + 1000*t.tv_usec;
+}
+
+/*
+ Determine whether the given address is mapped into the current address space.
+*/
+
+int
+__kmp_is_address_mapped( void * addr ) {
+
+ int found = 0;
+ int rc;
+
+ #if KMP_OS_LINUX || KMP_OS_FREEBSD
+
+ /*
+ On Linux* OS, read the /proc/<pid>/maps pseudo-file to get all the address ranges mapped
+ into the address space.
+ */
+
+ char * name = __kmp_str_format( "/proc/%d/maps", getpid() );
+ FILE * file = NULL;
+
+ file = fopen( name, "r" );
+ KMP_ASSERT( file != NULL );
+
+ for ( ; ; ) {
+
+ void * beginning = NULL;
+ void * ending = NULL;
+ char perms[ 5 ];
+
+ rc = fscanf( file, "%p-%p %4s %*[^\n]\n", & beginning, & ending, perms );
+ if ( rc == EOF ) {
+ break;
+ }; // if
+ KMP_ASSERT( rc == 3 && KMP_STRLEN( perms ) == 4 ); // Make sure all fields are read.
+
+ // Ending address is not included in the region, but beginning is.
+ if ( ( addr >= beginning ) && ( addr < ending ) ) {
+ perms[ 2 ] = 0; // 3th and 4th character does not matter.
+ if ( strcmp( perms, "rw" ) == 0 ) {
+ // Memory we are looking for should be readable and writable.
+ found = 1;
+ }; // if
+ break;
+ }; // if
+
+ }; // forever
+
+ // Free resources.
+ fclose( file );
+ KMP_INTERNAL_FREE( name );
+
+ #elif KMP_OS_DARWIN
+
+ /*
+ On OS X*, /proc pseudo filesystem is not available. Try to read memory using vm
+ interface.
+ */
+
+ int buffer;
+ vm_size_t count;
+ rc =
+ vm_read_overwrite(
+ mach_task_self(), // Task to read memory of.
+ (vm_address_t)( addr ), // Address to read from.
+ 1, // Number of bytes to be read.
+ (vm_address_t)( & buffer ), // Address of buffer to save read bytes in.
+ & count // Address of var to save number of read bytes in.
+ );
+ if ( rc == 0 ) {
+ // Memory successfully read.
+ found = 1;
+ }; // if
+
+ #elif KMP_OS_FREEBSD || KMP_OS_NETBSD
+
+ // FIXME(FreeBSD, NetBSD): Implement this
+ found = 1;
+
+ #else
+
+ #error "Unknown or unsupported OS"
+
+ #endif
+
+ return found;
+
+} // __kmp_is_address_mapped
+
+#ifdef USE_LOAD_BALANCE
+
+
+# if KMP_OS_DARWIN
+
+// The function returns the rounded value of the system load average
+// during given time interval which depends on the value of
+// __kmp_load_balance_interval variable (default is 60 sec, other values
+// may be 300 sec or 900 sec).
+// It returns -1 in case of error.
+int
+__kmp_get_load_balance( int max )
+{
+ double averages[3];
+ int ret_avg = 0;
+
+ int res = getloadavg( averages, 3 );
+
+ //Check __kmp_load_balance_interval to determine which of averages to use.
+ // getloadavg() may return the number of samples less than requested that is
+ // less than 3.
+ if ( __kmp_load_balance_interval < 180 && ( res >= 1 ) ) {
+ ret_avg = averages[0];// 1 min
+ } else if ( ( __kmp_load_balance_interval >= 180
+ && __kmp_load_balance_interval < 600 ) && ( res >= 2 ) ) {
+ ret_avg = averages[1];// 5 min
+ } else if ( ( __kmp_load_balance_interval >= 600 ) && ( res == 3 ) ) {
+ ret_avg = averages[2];// 15 min
+ } else {// Error occurred
+ return -1;
+ }
+
+ return ret_avg;
+}
+
+# else // Linux* OS
+
+// The fuction returns number of running (not sleeping) threads, or -1 in case of error.
+// Error could be reported if Linux* OS kernel too old (without "/proc" support).
+// Counting running threads stops if max running threads encountered.
+int
+__kmp_get_load_balance( int max )
+{
+ static int permanent_error = 0;
+
+ static int glb_running_threads = 0; /* Saved count of the running threads for the thread balance algortihm */
+ static double glb_call_time = 0; /* Thread balance algorithm call time */
+
+ int running_threads = 0; // Number of running threads in the system.
+
+ DIR * proc_dir = NULL; // Handle of "/proc/" directory.
+ struct dirent * proc_entry = NULL;
+
+ kmp_str_buf_t task_path; // "/proc/<pid>/task/<tid>/" path.
+ DIR * task_dir = NULL; // Handle of "/proc/<pid>/task/<tid>/" directory.
+ struct dirent * task_entry = NULL;
+ int task_path_fixed_len;
+
+ kmp_str_buf_t stat_path; // "/proc/<pid>/task/<tid>/stat" path.
+ int stat_file = -1;
+ int stat_path_fixed_len;
+
+ int total_processes = 0; // Total number of processes in system.
+ int total_threads = 0; // Total number of threads in system.
+
+ double call_time = 0.0;
+
+ __kmp_str_buf_init( & task_path );
+ __kmp_str_buf_init( & stat_path );
+
+ __kmp_elapsed( & call_time );
+
+ if ( glb_call_time &&
+ ( call_time - glb_call_time < __kmp_load_balance_interval ) ) {
+ running_threads = glb_running_threads;
+ goto finish;
+ }
+
+ glb_call_time = call_time;
+
+ // Do not spend time on scanning "/proc/" if we have a permanent error.
+ if ( permanent_error ) {
+ running_threads = -1;
+ goto finish;
+ }; // if
+
+ if ( max <= 0 ) {
+ max = INT_MAX;
+ }; // if
+
+ // Open "/proc/" directory.
+ proc_dir = opendir( "/proc" );
+ if ( proc_dir == NULL ) {
+ // Cannot open "/prroc/". Probably the kernel does not support it. Return an error now and
+ // in subsequent calls.
+ running_threads = -1;
+ permanent_error = 1;
+ goto finish;
+ }; // if
+
+ // Initialize fixed part of task_path. This part will not change.
+ __kmp_str_buf_cat( & task_path, "/proc/", 6 );
+ task_path_fixed_len = task_path.used; // Remember number of used characters.
+
+ proc_entry = readdir( proc_dir );
+ while ( proc_entry != NULL ) {
+ // Proc entry is a directory and name starts with a digit. Assume it is a process'
+ // directory.
+ if ( proc_entry->d_type == DT_DIR && isdigit( proc_entry->d_name[ 0 ] ) ) {
+
+ ++ total_processes;
+ // Make sure init process is the very first in "/proc", so we can replace
+ // strcmp( proc_entry->d_name, "1" ) == 0 with simpler total_processes == 1.
+ // We are going to check that total_processes == 1 => d_name == "1" is true (where
+ // "=>" is implication). Since C++ does not have => operator, let us replace it with its
+ // equivalent: a => b == ! a || b.
+ KMP_DEBUG_ASSERT( total_processes != 1 || strcmp( proc_entry->d_name, "1" ) == 0 );
+
+ // Construct task_path.
+ task_path.used = task_path_fixed_len; // Reset task_path to "/proc/".
+ __kmp_str_buf_cat( & task_path, proc_entry->d_name, KMP_STRLEN( proc_entry->d_name ) );
+ __kmp_str_buf_cat( & task_path, "/task", 5 );
+
+ task_dir = opendir( task_path.str );
+ if ( task_dir == NULL ) {
+ // Process can finish between reading "/proc/" directory entry and opening process'
+ // "task/" directory. So, in general case we should not complain, but have to skip
+ // this process and read the next one.
+ // But on systems with no "task/" support we will spend lot of time to scan "/proc/"
+ // tree again and again without any benefit. "init" process (its pid is 1) should
+ // exist always, so, if we cannot open "/proc/1/task/" directory, it means "task/"
+ // is not supported by kernel. Report an error now and in the future.
+ if ( strcmp( proc_entry->d_name, "1" ) == 0 ) {
+ running_threads = -1;
+ permanent_error = 1;
+ goto finish;
+ }; // if
+ } else {
+ // Construct fixed part of stat file path.
+ __kmp_str_buf_clear( & stat_path );
+ __kmp_str_buf_cat( & stat_path, task_path.str, task_path.used );
+ __kmp_str_buf_cat( & stat_path, "/", 1 );
+ stat_path_fixed_len = stat_path.used;
+
+ task_entry = readdir( task_dir );
+ while ( task_entry != NULL ) {
+ // It is a directory and name starts with a digit.
+ if ( proc_entry->d_type == DT_DIR && isdigit( task_entry->d_name[ 0 ] ) ) {
+
+ ++ total_threads;
+
+ // Consruct complete stat file path. Easiest way would be:
+ // __kmp_str_buf_print( & stat_path, "%s/%s/stat", task_path.str, task_entry->d_name );
+ // but seriae of __kmp_str_buf_cat works a bit faster.
+ stat_path.used = stat_path_fixed_len; // Reset stat path to its fixed part.
+ __kmp_str_buf_cat( & stat_path, task_entry->d_name, KMP_STRLEN( task_entry->d_name ) );
+ __kmp_str_buf_cat( & stat_path, "/stat", 5 );
+
+ // Note: Low-level API (open/read/close) is used. High-level API
+ // (fopen/fclose) works ~ 30 % slower.
+ stat_file = open( stat_path.str, O_RDONLY );
+ if ( stat_file == -1 ) {
+ // We cannot report an error because task (thread) can terminate just
+ // before reading this file.
+ } else {
+ /*
+ Content of "stat" file looks like:
+
+ 24285 (program) S ...
+
+ It is a single line (if program name does not include fanny
+ symbols). First number is a thread id, then name of executable file
+ name in paretheses, then state of the thread. We need just thread
+ state.
+
+ Good news: Length of program name is 15 characters max. Longer
+ names are truncated.
+
+ Thus, we need rather short buffer: 15 chars for program name +
+ 2 parenthesis, + 3 spaces + ~7 digits of pid = 37.
+
+ Bad news: Program name may contain special symbols like space,
+ closing parenthesis, or even new line. This makes parsing "stat"
+ file not 100 % reliable. In case of fanny program names parsing
+ may fail (report incorrect thread state).
+
+ Parsing "status" file looks more promissing (due to different
+ file structure and escaping special symbols) but reading and
+ parsing of "status" file works slower.
+
+ -- ln
+ */
+ char buffer[ 65 ];
+ int len;
+ len = read( stat_file, buffer, sizeof( buffer ) - 1 );
+ if ( len >= 0 ) {
+ buffer[ len ] = 0;
+ // Using scanf:
+ // sscanf( buffer, "%*d (%*s) %c ", & state );
+ // looks very nice, but searching for a closing parenthesis works a
+ // bit faster.
+ char * close_parent = strstr( buffer, ") " );
+ if ( close_parent != NULL ) {
+ char state = * ( close_parent + 2 );
+ if ( state == 'R' ) {
+ ++ running_threads;
+ if ( running_threads >= max ) {
+ goto finish;
+ }; // if
+ }; // if
+ }; // if
+ }; // if
+ close( stat_file );
+ stat_file = -1;
+ }; // if
+ }; // if
+ task_entry = readdir( task_dir );
+ }; // while
+ closedir( task_dir );
+ task_dir = NULL;
+ }; // if
+ }; // if
+ proc_entry = readdir( proc_dir );
+ }; // while
+
+ //
+ // There _might_ be a timing hole where the thread executing this
+ // code get skipped in the load balance, and running_threads is 0.
+ // Assert in the debug builds only!!!
+ //
+ KMP_DEBUG_ASSERT( running_threads > 0 );
+ if ( running_threads <= 0 ) {
+ running_threads = 1;
+ }
+
+ finish: // Clean up and exit.
+ if ( proc_dir != NULL ) {
+ closedir( proc_dir );
+ }; // if
+ __kmp_str_buf_free( & task_path );
+ if ( task_dir != NULL ) {
+ closedir( task_dir );
+ }; // if
+ __kmp_str_buf_free( & stat_path );
+ if ( stat_file != -1 ) {
+ close( stat_file );
+ }; // if
+
+ glb_running_threads = running_threads;
+
+ return running_threads;
+
+} // __kmp_get_load_balance
+
+# endif // KMP_OS_DARWIN
+
+#endif // USE_LOAD_BALANCE
+
+#if !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_MIC || (KMP_OS_LINUX && KMP_ARCH_AARCH64) || KMP_ARCH_PPC64)
+
+// we really only need the case with 1 argument, because CLANG always build
+// a struct of pointers to shared variables referenced in the outlined function
+int
+__kmp_invoke_microtask( microtask_t pkfn,
+ int gtid, int tid,
+ int argc, void *p_argv[]
+#if OMPT_SUPPORT
+ , void **exit_frame_ptr
+#endif
+)
+{
+#if OMPT_SUPPORT
+ *exit_frame_ptr = __builtin_frame_address(0);
+#endif
+
+ switch (argc) {
+ default:
+ fprintf(stderr, "Too many args to microtask: %d!\n", argc);
+ fflush(stderr);
+ exit(-1);
+ case 0:
+ (*pkfn)(&gtid, &tid);
+ break;
+ case 1:
+ (*pkfn)(&gtid, &tid, p_argv[0]);
+ break;
+ case 2:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1]);
+ break;
+ case 3:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2]);
+ break;
+ case 4:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3]);
+ break;
+ case 5:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4]);
+ break;
+ case 6:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5]);
+ break;
+ case 7:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6]);
+ break;
+ case 8:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7]);
+ break;
+ case 9:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8]);
+ break;
+ case 10:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9]);
+ break;
+ case 11:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10]);
+ break;
+ case 12:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11]);
+ break;
+ case 13:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12]);
+ break;
+ case 14:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12], p_argv[13]);
+ break;
+ case 15:
+ (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],
+ p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],
+ p_argv[11], p_argv[12], p_argv[13], p_argv[14]);
+ break;
+ }
+
+#if OMPT_SUPPORT
+ *exit_frame_ptr = 0;
+#endif
+
+ return 1;
+}
+
+#endif
+
+// end of file //
+
diff --git a/final/runtime/src/z_Windows_NT-586_asm.asm b/final/runtime/src/z_Windows_NT-586_asm.asm
new file mode 100644
index 0000000..a4f9a38
--- /dev/null
+++ b/final/runtime/src/z_Windows_NT-586_asm.asm
@@ -0,0 +1,1402 @@
+; z_Windows_NT-586_asm.asm: - microtasking routines specifically
+; written for IA-32 architecture and Intel(R) 64 running Windows* OS
+
+;
+;//===----------------------------------------------------------------------===//
+;//
+;// The LLVM Compiler Infrastructure
+;//
+;// This file is dual licensed under the MIT and the University of Illinois Open
+;// Source Licenses. See LICENSE.txt for details.
+;//
+;//===----------------------------------------------------------------------===//
+;
+
+ TITLE z_Windows_NT-586_asm.asm
+
+; ============================= IA-32 architecture ==========================
+ifdef _M_IA32
+
+ .586P
+
+if @Version gt 510
+ .model HUGE
+else
+_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
+_TEXT ENDS
+_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
+_DATA ENDS
+CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
+CONST ENDS
+_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
+_BSS ENDS
+$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
+$$SYMBOLS ENDS
+$$TYPES SEGMENT BYTE USE32 'DEBTYP'
+$$TYPES ENDS
+_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
+_TLS ENDS
+FLAT GROUP _DATA, CONST, _BSS
+ ASSUME CS: FLAT, DS: FLAT, SS: FLAT
+endif
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_x86_pause
+;
+; void
+; __kmp_x86_pause( void )
+;
+
+PUBLIC ___kmp_x86_pause
+_p$ = 4
+_d$ = 8
+_TEXT SEGMENT
+ ALIGN 16
+___kmp_x86_pause PROC NEAR
+
+ db 0f3H
+ db 090H ;; pause
+ ret
+
+___kmp_x86_pause ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_x86_cpuid
+;
+; void
+; __kmp_x86_cpuid( int mode, int mode2, struct kmp_cpuid *p );
+;
+
+PUBLIC ___kmp_x86_cpuid
+_TEXT SEGMENT
+ ALIGN 16
+_mode$ = 8
+_mode2$ = 12
+_p$ = 16
+_eax$ = 0
+_ebx$ = 4
+_ecx$ = 8
+_edx$ = 12
+
+___kmp_x86_cpuid PROC NEAR
+
+ push ebp
+ mov ebp, esp
+
+ push edi
+ push ebx
+ push ecx
+ push edx
+
+ mov eax, DWORD PTR _mode$[ebp]
+ mov ecx, DWORD PTR _mode2$[ebp]
+ cpuid ; Query the CPUID for the current processor
+
+ mov edi, DWORD PTR _p$[ebp]
+ mov DWORD PTR _eax$[ edi ], eax
+ mov DWORD PTR _ebx$[ edi ], ebx
+ mov DWORD PTR _ecx$[ edi ], ecx
+ mov DWORD PTR _edx$[ edi ], edx
+
+ pop edx
+ pop ecx
+ pop ebx
+ pop edi
+
+ mov esp, ebp
+ pop ebp
+ ret
+
+___kmp_x86_cpuid ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_test_then_add32
+;
+; kmp_int32
+; __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 d );
+;
+
+PUBLIC ___kmp_test_then_add32
+_p$ = 4
+_d$ = 8
+_TEXT SEGMENT
+ ALIGN 16
+___kmp_test_then_add32 PROC NEAR
+
+ mov eax, DWORD PTR _d$[esp]
+ mov ecx, DWORD PTR _p$[esp]
+lock xadd DWORD PTR [ecx], eax
+ ret
+
+___kmp_test_then_add32 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store8
+;
+; kmp_int8
+; __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+;
+
+PUBLIC ___kmp_compare_and_store8
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store8 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov al, BYTE PTR _cv$[esp]
+ mov dl, BYTE PTR _sv$[esp]
+lock cmpxchg BYTE PTR [ecx], dl
+ sete al ; if al == [ecx] set al = 1 else set al = 0
+ and eax, 1 ; sign extend previous instruction
+ ret
+
+___kmp_compare_and_store8 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store16
+;
+; kmp_int16
+; __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+;
+
+PUBLIC ___kmp_compare_and_store16
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store16 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov ax, WORD PTR _cv$[esp]
+ mov dx, WORD PTR _sv$[esp]
+lock cmpxchg WORD PTR [ecx], dx
+ sete al ; if ax == [ecx] set al = 1 else set al = 0
+ and eax, 1 ; sign extend previous instruction
+ ret
+
+___kmp_compare_and_store16 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store32
+;
+; kmp_int32
+; __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+;
+
+PUBLIC ___kmp_compare_and_store32
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store32 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov eax, DWORD PTR _cv$[esp]
+ mov edx, DWORD PTR _sv$[esp]
+lock cmpxchg DWORD PTR [ecx], edx
+ sete al ; if eax == [ecx] set al = 1 else set al = 0
+ and eax, 1 ; sign extend previous instruction
+ ret
+
+___kmp_compare_and_store32 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store64
+;
+; kmp_int32
+; __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+;
+
+PUBLIC ___kmp_compare_and_store64
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 8
+_cv_low$ = 12
+_cv_high$ = 16
+_sv_low$ = 20
+_sv_high$ = 24
+
+___kmp_compare_and_store64 PROC NEAR
+
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edi
+ mov edi, DWORD PTR _p$[ebp]
+ mov eax, DWORD PTR _cv_low$[ebp]
+ mov edx, DWORD PTR _cv_high$[ebp]
+ mov ebx, DWORD PTR _sv_low$[ebp]
+ mov ecx, DWORD PTR _sv_high$[ebp]
+lock cmpxchg8b QWORD PTR [edi]
+ sete al ; if edx:eax == [edi] set al = 1 else set al = 0
+ and eax, 1 ; sign extend previous instruction
+ pop edi
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+
+___kmp_compare_and_store64 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed8
+;
+; kmp_int8
+; __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 d );
+;
+
+PUBLIC ___kmp_xchg_fixed8
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_d$ = 8
+
+___kmp_xchg_fixed8 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov al, BYTE PTR _d$[esp]
+lock xchg BYTE PTR [ecx], al
+ ret
+
+___kmp_xchg_fixed8 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed16
+;
+; kmp_int16
+; __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 d );
+;
+
+PUBLIC ___kmp_xchg_fixed16
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_d$ = 8
+
+___kmp_xchg_fixed16 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov ax, WORD PTR _d$[esp]
+lock xchg WORD PTR [ecx], ax
+ ret
+
+___kmp_xchg_fixed16 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed32
+;
+; kmp_int32
+; __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 d );
+;
+
+PUBLIC ___kmp_xchg_fixed32
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_d$ = 8
+
+___kmp_xchg_fixed32 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov eax, DWORD PTR _d$[esp]
+lock xchg DWORD PTR [ecx], eax
+ ret
+
+___kmp_xchg_fixed32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_real32
+;
+; kmp_real32
+; __kmp_xchg_real32( volatile kmp_real32 *p, kmp_real32 d );
+;
+
+PUBLIC ___kmp_xchg_real32
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 8
+_d$ = 12
+_old_value$ = -4
+
+___kmp_xchg_real32 PROC NEAR
+
+ push ebp
+ mov ebp, esp
+ sub esp, 4
+ push esi
+ mov esi, DWORD PTR _p$[ebp]
+
+ fld DWORD PTR [esi]
+ ;; load <addr>
+ fst DWORD PTR _old_value$[ebp]
+ ;; store into old_value
+
+ mov eax, DWORD PTR _d$[ebp]
+
+lock xchg DWORD PTR [esi], eax
+
+ fld DWORD PTR _old_value$[ebp]
+ ;; return old_value
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+
+___kmp_xchg_real32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store_ret8
+;
+; kmp_int8
+; __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+;
+
+PUBLIC ___kmp_compare_and_store_ret8
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store_ret8 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov al, BYTE PTR _cv$[esp]
+ mov dl, BYTE PTR _sv$[esp]
+lock cmpxchg BYTE PTR [ecx], dl
+ ret
+
+___kmp_compare_and_store_ret8 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store_ret16
+;
+; kmp_int16
+; __kmp_compare_and_store_ret16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+;
+
+PUBLIC ___kmp_compare_and_store_ret16
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store_ret16 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov ax, WORD PTR _cv$[esp]
+ mov dx, WORD PTR _sv$[esp]
+lock cmpxchg WORD PTR [ecx], dx
+ ret
+
+___kmp_compare_and_store_ret16 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store_ret32
+;
+; kmp_int32
+; __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+;
+
+PUBLIC ___kmp_compare_and_store_ret32
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+_cv$ = 8
+_sv$ = 12
+
+___kmp_compare_and_store_ret32 PROC NEAR
+
+ mov ecx, DWORD PTR _p$[esp]
+ mov eax, DWORD PTR _cv$[esp]
+ mov edx, DWORD PTR _sv$[esp]
+lock cmpxchg DWORD PTR [ecx], edx
+ ret
+
+___kmp_compare_and_store_ret32 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_compare_and_store_ret64
+;
+; kmp_int64
+; __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+;
+
+PUBLIC ___kmp_compare_and_store_ret64
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 8
+_cv_low$ = 12
+_cv_high$ = 16
+_sv_low$ = 20
+_sv_high$ = 24
+
+___kmp_compare_and_store_ret64 PROC NEAR
+
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edi
+ mov edi, DWORD PTR _p$[ebp]
+ mov eax, DWORD PTR _cv_low$[ebp]
+ mov edx, DWORD PTR _cv_high$[ebp]
+ mov ebx, DWORD PTR _sv_low$[ebp]
+ mov ecx, DWORD PTR _sv_high$[ebp]
+lock cmpxchg8b QWORD PTR [edi]
+ pop edi
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+
+___kmp_compare_and_store_ret64 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_load_x87_fpu_control_word
+;
+; void
+; __kmp_load_x87_fpu_control_word( kmp_int16 *p );
+;
+; parameters:
+; p: 4(%esp)
+
+PUBLIC ___kmp_load_x87_fpu_control_word
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+
+___kmp_load_x87_fpu_control_word PROC NEAR
+
+ mov eax, DWORD PTR _p$[esp]
+ fldcw WORD PTR [eax]
+ ret
+
+___kmp_load_x87_fpu_control_word ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_store_x87_fpu_control_word
+;
+; void
+; __kmp_store_x87_fpu_control_word( kmp_int16 *p );
+;
+; parameters:
+; p: 4(%esp)
+
+PUBLIC ___kmp_store_x87_fpu_control_word
+_TEXT SEGMENT
+ ALIGN 16
+_p$ = 4
+
+___kmp_store_x87_fpu_control_word PROC NEAR
+
+ mov eax, DWORD PTR _p$[esp]
+ fstcw WORD PTR [eax]
+ ret
+
+___kmp_store_x87_fpu_control_word ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_clear_x87_fpu_status_word
+;
+; void
+; __kmp_clear_x87_fpu_status_word();
+;
+
+PUBLIC ___kmp_clear_x87_fpu_status_word
+_TEXT SEGMENT
+ ALIGN 16
+
+___kmp_clear_x87_fpu_status_word PROC NEAR
+
+ fnclex
+ ret
+
+___kmp_clear_x87_fpu_status_word ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_invoke_microtask
+;
+; typedef void (*microtask_t)( int *gtid, int *tid, ... );
+;
+; int
+; __kmp_invoke_microtask( microtask_t pkfn,
+; int gtid, int tid,
+; int argc, void *p_argv[] )
+;
+
+PUBLIC ___kmp_invoke_microtask
+_TEXT SEGMENT
+ ALIGN 16
+_pkfn$ = 8
+_gtid$ = 12
+_tid$ = 16
+_argc$ = 20
+_argv$ = 24
+if OMPT_SUPPORT
+_exit_frame$ = 28
+endif
+_i$ = -8
+_stk_adj$ = -16
+_vptr$ = -12
+_qptr$ = -4
+
+___kmp_invoke_microtask PROC NEAR
+; Line 102
+ push ebp
+ mov ebp, esp
+ sub esp, 16 ; 00000010H
+ push ebx
+ push esi
+ push edi
+if OMPT_SUPPORT
+ mov eax, DWORD PTR _exit_frame$[ebp]
+ mov DWORD PTR [eax], ebp
+endif
+; Line 114
+ mov eax, DWORD PTR _argc$[ebp]
+ mov DWORD PTR _i$[ebp], eax
+
+;; ------------------------------------------------------------
+ lea edx, DWORD PTR [eax*4+8]
+ mov ecx, esp ; Save current SP into ECX
+ mov eax,edx ; Save the size of the args in eax
+ sub ecx,edx ; esp-((#args+2)*4) -> ecx -- without mods, stack ptr would be this
+ mov edx,ecx ; Save to edx
+ and ecx,-128 ; Mask off 7 bits
+ sub edx,ecx ; Amount to subtract from esp
+ sub esp,edx ; Prepare stack ptr-- Now it will be aligned on 128-byte boundary at the call
+
+ add edx,eax ; Calculate total size of the stack decrement.
+ mov DWORD PTR _stk_adj$[ebp], edx
+;; ------------------------------------------------------------
+
+ jmp SHORT $L22237
+$L22238:
+ mov ecx, DWORD PTR _i$[ebp]
+ sub ecx, 1
+ mov DWORD PTR _i$[ebp], ecx
+$L22237:
+ cmp DWORD PTR _i$[ebp], 0
+ jle SHORT $L22239
+; Line 116
+ mov edx, DWORD PTR _i$[ebp]
+ mov eax, DWORD PTR _argv$[ebp]
+ mov ecx, DWORD PTR [eax+edx*4-4]
+ mov DWORD PTR _vptr$[ebp], ecx
+; Line 123
+ mov eax, DWORD PTR _vptr$[ebp]
+; Line 124
+ push eax
+; Line 127
+ jmp SHORT $L22238
+$L22239:
+; Line 129
+ lea edx, DWORD PTR _tid$[ebp]
+ mov DWORD PTR _vptr$[ebp], edx
+; Line 130
+ lea eax, DWORD PTR _gtid$[ebp]
+ mov DWORD PTR _qptr$[ebp], eax
+; Line 143
+ mov eax, DWORD PTR _vptr$[ebp]
+; Line 144
+ push eax
+; Line 145
+ mov eax, DWORD PTR _qptr$[ebp]
+; Line 146
+ push eax
+; Line 147
+ call DWORD PTR _pkfn$[ebp]
+; Line 148
+ add esp, DWORD PTR _stk_adj$[ebp]
+; Line 152
+ mov eax, 1
+; Line 153
+ pop edi
+ pop esi
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret 0
+___kmp_invoke_microtask ENDP
+_TEXT ENDS
+
+endif
+
+; ==================================== Intel(R) 64 ===================================
+
+ifdef _M_AMD64
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_x86_cpuid
+;
+; void
+; __kmp_x86_cpuid( int mode, int mode2, struct kmp_cpuid *p );
+;
+; parameters:
+; mode: ecx
+; mode2: edx
+; cpuid_buffer: r8
+
+PUBLIC __kmp_x86_cpuid
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_x86_cpuid PROC FRAME ;NEAR
+
+ push rbp
+ .pushreg rbp
+ mov rbp, rsp
+ .setframe rbp, 0
+ push rbx ; callee-save register
+ .pushreg rbx
+ .ENDPROLOG
+
+ mov r10, r8 ; p parameter
+ mov eax, ecx ; mode parameter
+ mov ecx, edx ; mode2 parameter
+ cpuid ; Query the CPUID for the current processor
+
+ mov DWORD PTR 0[ r10 ], eax ; store results into buffer
+ mov DWORD PTR 4[ r10 ], ebx
+ mov DWORD PTR 8[ r10 ], ecx
+ mov DWORD PTR 12[ r10 ], edx
+
+ pop rbx ; callee-save register
+ mov rsp, rbp
+ pop rbp
+ ret
+
+__kmp_x86_cpuid ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_test_then_add32
+;
+; kmp_int32
+; __kmp_test_then_add32( volatile kmp_int32 *p, kmp_int32 d );
+;
+; parameters:
+; p: rcx
+; d: edx
+;
+; return: eax
+
+PUBLIC __kmp_test_then_add32
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_test_then_add32 PROC ;NEAR
+
+ mov eax, edx
+lock xadd DWORD PTR [rcx], eax
+ ret
+
+__kmp_test_then_add32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_test_then_add64
+;
+; kmp_int32
+; __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d );
+;
+; parameters:
+; p: rcx
+; d: rdx
+;
+; return: rax
+
+PUBLIC __kmp_test_then_add64
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_test_then_add64 PROC ;NEAR
+
+ mov rax, rdx
+lock xadd QWORD PTR [rcx], rax
+ ret
+
+__kmp_test_then_add64 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store8
+;
+; kmp_int8
+; __kmp_compare_and_store8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store8
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store8 PROC ;NEAR
+
+ mov al, dl ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg BYTE PTR [rcx], dl
+ sete al ; if al == [rcx] set al = 1 else set al = 0
+ and rax, 1 ; sign extend previous instruction
+ ret
+
+__kmp_compare_and_store8 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store16
+;
+; kmp_int16
+; __kmp_compare_and_store16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store16
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store16 PROC ;NEAR
+
+ mov ax, dx ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg WORD PTR [rcx], dx
+ sete al ; if ax == [rcx] set al = 1 else set al = 0
+ and rax, 1 ; sign extend previous instruction
+ ret
+
+__kmp_compare_and_store16 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store32
+;
+; kmp_int32
+; __kmp_compare_and_store32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store32
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store32 PROC ;NEAR
+
+ mov eax, edx ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg DWORD PTR [rcx], edx
+ sete al ; if eax == [rcx] set al = 1 else set al = 0
+ and rax, 1 ; sign extend previous instruction
+ ret
+
+__kmp_compare_and_store32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store64
+;
+; kmp_int32
+; __kmp_compare_and_store64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+; parameters:
+; p: rcx
+; cv: rdx
+; sv: r8
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store64
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store64 PROC ;NEAR
+
+ mov rax, rdx ; "cv"
+ mov rdx, r8 ; "sv"
+lock cmpxchg QWORD PTR [rcx], rdx
+ sete al ; if rax == [rcx] set al = 1 else set al = 0
+ and rax, 1 ; sign extend previous instruction
+ ret
+
+__kmp_compare_and_store64 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed8
+;
+; kmp_int8
+; __kmp_xchg_fixed8( volatile kmp_int8 *p, kmp_int8 d );
+;
+; parameters:
+; p: rcx
+; d: dl
+;
+; return: al
+
+PUBLIC __kmp_xchg_fixed8
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_xchg_fixed8 PROC ;NEAR
+
+ mov al, dl
+lock xchg BYTE PTR [rcx], al
+ ret
+
+__kmp_xchg_fixed8 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed16
+;
+; kmp_int16
+; __kmp_xchg_fixed16( volatile kmp_int16 *p, kmp_int16 d );
+;
+; parameters:
+; p: rcx
+; d: dx
+;
+; return: ax
+
+PUBLIC __kmp_xchg_fixed16
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_xchg_fixed16 PROC ;NEAR
+
+ mov ax, dx
+lock xchg WORD PTR [rcx], ax
+ ret
+
+__kmp_xchg_fixed16 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed32
+;
+; kmp_int32
+; __kmp_xchg_fixed32( volatile kmp_int32 *p, kmp_int32 d );
+;
+; parameters:
+; p: rcx
+; d: edx
+;
+; return: eax
+
+PUBLIC __kmp_xchg_fixed32
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_xchg_fixed32 PROC ;NEAR
+
+ mov eax, edx
+lock xchg DWORD PTR [rcx], eax
+ ret
+
+__kmp_xchg_fixed32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION ___kmp_xchg_fixed64
+;
+; kmp_int64
+; __kmp_xchg_fixed64( volatile kmp_int64 *p, kmp_int64 d );
+;
+; parameters:
+; p: rcx
+; d: rdx
+;
+; return: rax
+
+PUBLIC __kmp_xchg_fixed64
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_xchg_fixed64 PROC ;NEAR
+
+ mov rax, rdx
+lock xchg QWORD PTR [rcx], rax
+ ret
+
+__kmp_xchg_fixed64 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store_ret8
+;
+; kmp_int8
+; __kmp_compare_and_store_ret8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store_ret8
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store_ret8 PROC ;NEAR
+ mov al, dl ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg BYTE PTR [rcx], dl
+ ; Compare AL with [rcx]. If equal set
+ ; ZF and exchange DL with [rcx]. Else, clear
+ ; ZF and load [rcx] into AL.
+ ret
+
+__kmp_compare_and_store_ret8 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store_ret16
+;
+; kmp_int16
+; __kmp_compare_and_store_ret16( volatile kmp_int16 *p, kmp_int16 cv, kmp_int16 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store_ret16
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store_ret16 PROC ;NEAR
+
+ mov ax, dx ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg WORD PTR [rcx], dx
+ ret
+
+__kmp_compare_and_store_ret16 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store_ret32
+;
+; kmp_int32
+; __kmp_compare_and_store_ret32( volatile kmp_int32 *p, kmp_int32 cv, kmp_int32 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: eax
+
+PUBLIC __kmp_compare_and_store_ret32
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store_ret32 PROC ;NEAR
+
+ mov eax, edx ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg DWORD PTR [rcx], edx
+ ret
+
+__kmp_compare_and_store_ret32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store_ret64
+;
+; kmp_int64
+; __kmp_compare_and_store_ret64( volatile kmp_int64 *p, kmp_int64 cv, kmp_int64 sv );
+; parameters:
+; p: rcx
+; cv: rdx
+; sv: r8
+;
+; return: rax
+
+PUBLIC __kmp_compare_and_store_ret64
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store_ret64 PROC ;NEAR
+
+ mov rax, rdx ; "cv"
+ mov rdx, r8 ; "sv"
+lock cmpxchg QWORD PTR [rcx], rdx
+ ret
+
+__kmp_compare_and_store_ret64 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_compare_and_store_loop8
+;
+; kmp_int8
+; __kmp_compare_and_store_loop8( volatile kmp_int8 *p, kmp_int8 cv, kmp_int8 sv );
+; parameters:
+; p: rcx
+; cv: edx
+; sv: r8d
+;
+; return: al
+
+PUBLIC __kmp_compare_and_store_loop8
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_compare_and_store_loop8 PROC ;NEAR
+$__kmp_loop:
+ mov al, dl ; "cv"
+ mov edx, r8d ; "sv"
+lock cmpxchg BYTE PTR [rcx], dl
+ ; Compare AL with [rcx]. If equal set
+ ; ZF and exchange DL with [rcx]. Else, clear
+ ; ZF and load [rcx] into AL.
+ jz SHORT $__kmp_success
+
+ db 0f3H
+ db 090H ; pause
+
+ jmp SHORT $__kmp_loop
+
+$__kmp_success:
+ ret
+
+__kmp_compare_and_store_loop8 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_xchg_real32
+;
+; kmp_real32
+; __kmp_xchg_real32( volatile kmp_real32 *p, kmp_real32 d );
+;
+; parameters:
+; p: rcx
+; d: xmm1 (lower 4 bytes)
+;
+; return: xmm0 (lower 4 bytes)
+
+PUBLIC __kmp_xchg_real32
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_xchg_real32 PROC ;NEAR
+
+ movd eax, xmm1 ; load d
+
+lock xchg DWORD PTR [rcx], eax
+
+ movd xmm0, eax ; load old value into return register
+ ret
+
+__kmp_xchg_real32 ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_xchg_real64
+;
+; kmp_real64
+; __kmp_xchg_real64( volatile kmp_real64 *p, kmp_real64 d );
+;
+; parameters:
+; p: rcx
+; d: xmm1 (lower 8 bytes)
+;
+; return: xmm0 (lower 8 bytes)
+
+PUBLIC __kmp_xchg_real64
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_xchg_real64 PROC ;NEAR
+
+ movd rax, xmm1 ; load "d"
+
+lock xchg QWORD PTR [rcx], rax
+
+ movd xmm0, rax ; load old value into return register
+ ret
+
+__kmp_xchg_real64 ENDP
+_TEXT ENDS
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_load_x87_fpu_control_word
+;
+; void
+; __kmp_load_x87_fpu_control_word( kmp_int16 *p );
+;
+; parameters:
+; p: rcx
+;
+
+PUBLIC __kmp_load_x87_fpu_control_word
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_load_x87_fpu_control_word PROC ;NEAR
+
+ fldcw WORD PTR [rcx]
+ ret
+
+__kmp_load_x87_fpu_control_word ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_store_x87_fpu_control_word
+;
+; void
+; __kmp_store_x87_fpu_control_word( kmp_int16 *p );
+;
+; parameters:
+; p: rcx
+;
+
+PUBLIC __kmp_store_x87_fpu_control_word
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_store_x87_fpu_control_word PROC ;NEAR
+
+ fstcw WORD PTR [rcx]
+ ret
+
+__kmp_store_x87_fpu_control_word ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_clear_x87_fpu_status_word
+;
+; void
+; __kmp_clear_x87_fpu_status_word()
+;
+
+PUBLIC __kmp_clear_x87_fpu_status_word
+_TEXT SEGMENT
+ ALIGN 16
+__kmp_clear_x87_fpu_status_word PROC ;NEAR
+
+ fnclex
+ ret
+
+__kmp_clear_x87_fpu_status_word ENDP
+_TEXT ENDS
+
+
+;------------------------------------------------------------------------
+;
+; FUNCTION __kmp_invoke_microtask
+;
+; typedef void (*microtask_t)( int *gtid, int *tid, ... );
+;
+; int
+; __kmp_invoke_microtask( microtask_t pkfn,
+; int gtid, int tid,
+; int argc, void *p_argv[] ) {
+;
+; (*pkfn) ( &gtid, &tid, argv[0], ... );
+; return 1;
+; }
+;
+; note:
+; just before call to pkfn must have rsp 128-byte aligned for compiler
+;
+; parameters:
+; rcx: pkfn 16[rbp]
+; edx: gtid 24[rbp]
+; r8d: tid 32[rbp]
+; r9d: argc 40[rbp]
+; [st]: p_argv 48[rbp]
+;
+; reg temps:
+; rax: used all over the place
+; rdx: used all over the place
+; rcx: used as argument counter for push parms loop
+; r10: used to hold pkfn function pointer argument
+;
+; return: eax (always 1/TRUE)
+;
+
+$_pkfn = 16
+$_gtid = 24
+$_tid = 32
+$_argc = 40
+$_p_argv = 48
+if OMPT_SUPPORT
+$_exit_frame = 56
+endif
+
+PUBLIC __kmp_invoke_microtask
+_TEXT SEGMENT
+ ALIGN 16
+
+__kmp_invoke_microtask PROC FRAME ;NEAR
+ mov QWORD PTR 16[rsp], rdx ; home gtid parameter
+ mov QWORD PTR 24[rsp], r8 ; home tid parameter
+ push rbp ; save base pointer
+ .pushreg rbp
+ sub rsp, 0 ; no fixed allocation necessary - end prolog
+
+ lea rbp, QWORD PTR [rsp] ; establish the base pointer
+ .setframe rbp, 0
+ .ENDPROLOG
+if OMPT_SUPPORT
+ mov rax, QWORD PTR $_exit_frame[rbp]
+ mov QWORD PTR [rax], rbp
+endif
+ mov r10, rcx ; save pkfn pointer for later
+
+;; ------------------------------------------------------------
+ mov rax, r9 ; rax <= argc
+ cmp rax, 2
+ jge SHORT $_kmp_invoke_stack_align
+ mov rax, 2 ; set 4 homes if less than 2 parms
+$_kmp_invoke_stack_align:
+ lea rdx, QWORD PTR [rax*8+16] ; rax <= (argc + 2) * 8
+ mov rax, rsp ; Save current SP into rax
+ sub rax, rdx ; rsp - ((argc+2)*8) -> rax
+ ; without align, rsp would be this
+ and rax, -128 ; Mask off 7 bits (128-byte align)
+ add rax, rdx ; add space for push's in a loop below
+ mov rsp, rax ; Prepare the stack ptr
+ ; Now it will align to 128-byte at the call
+;; ------------------------------------------------------------
+ ; setup pkfn parameter stack
+ mov rax, r9 ; rax <= argc
+ shl rax, 3 ; rax <= argc*8
+ mov rdx, QWORD PTR $_p_argv[rbp] ; rdx <= p_argv
+ add rdx, rax ; rdx <= &p_argv[argc]
+ mov rcx, r9 ; rcx <= argc
+ jecxz SHORT $_kmp_invoke_pass_parms ; nothing to push if argc=0
+ cmp ecx, 1 ; if argc=1 branch ahead
+ je SHORT $_kmp_invoke_one_parm
+ sub ecx, 2 ; if argc=2 branch ahead, subtract two from
+ je SHORT $_kmp_invoke_two_parms
+
+$_kmp_invoke_push_parms: ; push last - 5th parms to pkfn on stack
+ sub rdx, 8 ; decrement p_argv pointer to previous parm
+ mov r8, QWORD PTR [rdx] ; r8 <= p_argv[rcx-1]
+ push r8 ; push p_argv[rcx-1] onto stack (reverse order)
+ sub ecx, 1
+ jecxz SHORT $_kmp_invoke_two_parms
+ jmp SHORT $_kmp_invoke_push_parms
+
+$_kmp_invoke_two_parms:
+ sub rdx, 8 ; put 4th parm to pkfn in r9
+ mov r9, QWORD PTR [rdx] ; r9 <= p_argv[1]
+
+$_kmp_invoke_one_parm:
+ sub rdx, 8 ; put 3rd parm to pkfn in r8
+ mov r8, QWORD PTR [rdx] ; r8 <= p_argv[0]
+
+$_kmp_invoke_pass_parms: ; put 1st & 2nd parms to pkfn in registers
+ lea rdx, QWORD PTR $_tid[rbp] ; rdx <= &tid (2nd parm to pkfn)
+ lea rcx, QWORD PTR $_gtid[rbp] ; rcx <= &gtid (1st parm to pkfn)
+ sub rsp, 32 ; add stack space for first four parms
+ mov rax, r10 ; rax <= pkfn
+ call rax ; call (*pkfn)()
+ mov rax, 1 ; move 1 into return register;
+
+ lea rsp, QWORD PTR [rbp] ; restore stack pointer
+
+; add rsp, 0 ; no fixed allocation necessary - start epilog
+ pop rbp ; restore frame pointer
+ ret
+__kmp_invoke_microtask ENDP
+_TEXT ENDS
+
+endif
+
+END
diff --git a/final/runtime/src/z_Windows_NT-586_util.c b/final/runtime/src/z_Windows_NT-586_util.c
new file mode 100644
index 0000000..3aeafae
--- /dev/null
+++ b/final/runtime/src/z_Windows_NT-586_util.c
@@ -0,0 +1,163 @@
+/*
+ * z_Windows_NT-586_util.c -- platform specific routines.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+
+#if (KMP_ARCH_X86 || KMP_ARCH_X86_64)
+/* Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
+ * use compare_and_store for these routines
+ */
+
+kmp_int8
+__kmp_test_then_or8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int8 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value | d;
+
+ while ( ! __kmp_compare_and_store8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value | d;
+ }
+ return old_value;
+}
+
+kmp_int8
+__kmp_test_then_and8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int8 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value & d;
+
+ while ( ! __kmp_compare_and_store8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value & d;
+ }
+ return old_value;
+}
+
+kmp_int32
+__kmp_test_then_or32( volatile kmp_int32 *p, kmp_int32 d )
+{
+ kmp_int32 old_value, new_value;
+
+ old_value = TCR_4( *p );
+ new_value = old_value | d;
+
+ while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_4( *p );
+ new_value = old_value | d;
+ }
+ return old_value;
+}
+
+kmp_int32
+__kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 d )
+{
+ kmp_int32 old_value, new_value;
+
+ old_value = TCR_4( *p );
+ new_value = old_value & d;
+
+ while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_4( *p );
+ new_value = old_value & d;
+ }
+ return old_value;
+}
+
+kmp_int8
+__kmp_test_then_add8( volatile kmp_int8 *p, kmp_int8 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_1( *p );
+ new_value = old_value + d;
+ while ( ! __kmp_compare_and_store8 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_1( *p );
+ new_value = old_value + d;
+ }
+ return old_value;
+}
+
+#if KMP_ARCH_X86
+kmp_int64
+__kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value + d;
+ while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value + d;
+ }
+ return old_value;
+}
+#endif /* KMP_ARCH_X86 */
+
+kmp_int64
+__kmp_test_then_or64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value | d;
+ while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value | d;
+ }
+
+ return old_value;
+}
+
+kmp_int64
+__kmp_test_then_and64( volatile kmp_int64 *p, kmp_int64 d )
+{
+ kmp_int64 old_value, new_value;
+
+ old_value = TCR_8( *p );
+ new_value = old_value & d;
+ while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )
+ {
+ KMP_CPU_PAUSE();
+ old_value = TCR_8( *p );
+ new_value = old_value & d;
+ }
+
+ return old_value;
+}
+
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
diff --git a/final/runtime/src/z_Windows_NT_util.c b/final/runtime/src/z_Windows_NT_util.c
new file mode 100644
index 0000000..f3ae0a4
--- /dev/null
+++ b/final/runtime/src/z_Windows_NT_util.c
@@ -0,0 +1,1974 @@
+/*
+ * z_Windows_NT_util.c -- platform specific routines.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp.h"
+#include "kmp_itt.h"
+#include "kmp_i18n.h"
+#include "kmp_io.h"
+#include "kmp_wait_release.h"
+
+/* This code is related to NtQuerySystemInformation() function. This function
+ is used in the Load balance algorithm for OMP_DYNAMIC=true to find the
+ number of running threads in the system. */
+
+#include <ntstatus.h>
+#include <ntsecapi.h> // UNICODE_STRING
+
+enum SYSTEM_INFORMATION_CLASS {
+ SystemProcessInformation = 5
+}; // SYSTEM_INFORMATION_CLASS
+
+struct CLIENT_ID {
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+}; // struct CLIENT_ID
+
+enum THREAD_STATE {
+ StateInitialized,
+ StateReady,
+ StateRunning,
+ StateStandby,
+ StateTerminated,
+ StateWait,
+ StateTransition,
+ StateUnknown
+}; // enum THREAD_STATE
+
+struct VM_COUNTERS {
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PrivatePageCount;
+}; // struct VM_COUNTERS
+
+struct SYSTEM_THREAD {
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER CreateTime;
+ ULONG WaitTime;
+ LPVOID StartAddress;
+ CLIENT_ID ClientId;
+ DWORD Priority;
+ LONG BasePriority;
+ ULONG ContextSwitchCount;
+ THREAD_STATE State;
+ ULONG WaitReason;
+}; // SYSTEM_THREAD
+
+KMP_BUILD_ASSERT( offsetof( SYSTEM_THREAD, KernelTime ) == 0 );
+#if KMP_ARCH_X86
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_THREAD, StartAddress ) == 28 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_THREAD, State ) == 52 );
+#else
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_THREAD, StartAddress ) == 32 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_THREAD, State ) == 68 );
+#endif
+
+struct SYSTEM_PROCESS_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG NumberOfThreads;
+ LARGE_INTEGER Reserved[ 3 ];
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER KernelTime;
+ UNICODE_STRING ImageName;
+ DWORD BasePriority;
+ HANDLE ProcessId;
+ HANDLE ParentProcessId;
+ ULONG HandleCount;
+ ULONG Reserved2[ 2 ];
+ VM_COUNTERS VMCounters;
+ IO_COUNTERS IOCounters;
+ SYSTEM_THREAD Threads[ 1 ];
+}; // SYSTEM_PROCESS_INFORMATION
+typedef SYSTEM_PROCESS_INFORMATION * PSYSTEM_PROCESS_INFORMATION;
+
+KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, NextEntryOffset ) == 0 );
+KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, CreateTime ) == 32 );
+KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, ImageName ) == 56 );
+#if KMP_ARCH_X86
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, ProcessId ) == 68 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, HandleCount ) == 76 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, VMCounters ) == 88 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, IOCounters ) == 136 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, Threads ) == 184 );
+#else
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, ProcessId ) == 80 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, HandleCount ) == 96 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, VMCounters ) == 112 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, IOCounters ) == 208 );
+ KMP_BUILD_ASSERT( offsetof( SYSTEM_PROCESS_INFORMATION, Threads ) == 256 );
+#endif
+
+typedef NTSTATUS (NTAPI *NtQuerySystemInformation_t)( SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG );
+NtQuerySystemInformation_t NtQuerySystemInformation = NULL;
+
+HMODULE ntdll = NULL;
+
+/* End of NtQuerySystemInformation()-related code */
+
+#if KMP_GROUP_AFFINITY
+static HMODULE kernel32 = NULL;
+#endif /* KMP_GROUP_AFFINITY */
+
+/* ----------------------------------------------------------------------------------- */
+/* ----------------------------------------------------------------------------------- */
+
+#if KMP_HANDLE_SIGNALS
+ typedef void (* sig_func_t )( int );
+ static sig_func_t __kmp_sighldrs[ NSIG ];
+ static int __kmp_siginstalled[ NSIG ];
+#endif
+
+static HANDLE __kmp_monitor_ev;
+static kmp_int64 __kmp_win32_time;
+double __kmp_win32_tick;
+
+int __kmp_init_runtime = FALSE;
+CRITICAL_SECTION __kmp_win32_section;
+
+void
+__kmp_win32_mutex_init( kmp_win32_mutex_t *mx )
+{
+ InitializeCriticalSection( & mx->cs );
+#if USE_ITT_BUILD
+ __kmp_itt_system_object_created( & mx->cs, "Critical Section" );
+#endif /* USE_ITT_BUILD */
+}
+
+void
+__kmp_win32_mutex_destroy( kmp_win32_mutex_t *mx )
+{
+ DeleteCriticalSection( & mx->cs );
+}
+
+void
+__kmp_win32_mutex_lock( kmp_win32_mutex_t *mx )
+{
+ EnterCriticalSection( & mx->cs );
+}
+
+void
+__kmp_win32_mutex_unlock( kmp_win32_mutex_t *mx )
+{
+ LeaveCriticalSection( & mx->cs );
+}
+
+void
+__kmp_win32_cond_init( kmp_win32_cond_t *cv )
+{
+ cv->waiters_count_ = 0;
+ cv->wait_generation_count_ = 0;
+ cv->release_count_ = 0;
+
+ /* Initialize the critical section */
+ __kmp_win32_mutex_init( & cv->waiters_count_lock_ );
+
+ /* Create a manual-reset event. */
+ cv->event_ = CreateEvent( NULL, // no security
+ TRUE, // manual-reset
+ FALSE, // non-signaled initially
+ NULL ); // unnamed
+#if USE_ITT_BUILD
+ __kmp_itt_system_object_created( cv->event_, "Event" );
+#endif /* USE_ITT_BUILD */
+}
+
+void
+__kmp_win32_cond_destroy( kmp_win32_cond_t *cv )
+{
+ __kmp_win32_mutex_destroy( & cv->waiters_count_lock_ );
+ __kmp_free_handle( cv->event_ );
+ memset( cv, '\0', sizeof( *cv ) );
+}
+
+/* TODO associate cv with a team instead of a thread so as to optimize
+ * the case where we wake up a whole team */
+
+void
+__kmp_win32_cond_wait( kmp_win32_cond_t *cv, kmp_win32_mutex_t *mx, kmp_info_t *th, int need_decrease_load )
+{
+ int my_generation;
+ int last_waiter;
+
+ /* Avoid race conditions */
+ __kmp_win32_mutex_lock( &cv->waiters_count_lock_ );
+
+ /* Increment count of waiters */
+ cv->waiters_count_++;
+
+ /* Store current generation in our activation record. */
+ my_generation = cv->wait_generation_count_;
+
+ __kmp_win32_mutex_unlock( &cv->waiters_count_lock_ );
+ __kmp_win32_mutex_unlock( mx );
+
+ for (;;) {
+ int wait_done;
+
+ /* Wait until the event is signaled */
+ WaitForSingleObject( cv->event_, INFINITE );
+
+ __kmp_win32_mutex_lock( &cv->waiters_count_lock_ );
+
+ /* Exit the loop when the <cv->event_> is signaled and
+ * there are still waiting threads from this <wait_generation>
+ * that haven't been released from this wait yet. */
+ wait_done = ( cv->release_count_ > 0 ) &&
+ ( cv->wait_generation_count_ != my_generation );
+
+ __kmp_win32_mutex_unlock( &cv->waiters_count_lock_);
+
+ /* there used to be a semicolon after the if statement,
+ * it looked like a bug, so i removed it */
+ if( wait_done )
+ break;
+ }
+
+ __kmp_win32_mutex_lock( mx );
+ __kmp_win32_mutex_lock( &cv->waiters_count_lock_ );
+
+ cv->waiters_count_--;
+ cv->release_count_--;
+
+ last_waiter = ( cv->release_count_ == 0 );
+
+ __kmp_win32_mutex_unlock( &cv->waiters_count_lock_ );
+
+ if( last_waiter ) {
+ /* We're the last waiter to be notified, so reset the manual event. */
+ ResetEvent( cv->event_ );
+ }
+}
+
+void
+__kmp_win32_cond_broadcast( kmp_win32_cond_t *cv )
+{
+ __kmp_win32_mutex_lock( &cv->waiters_count_lock_ );
+
+ if( cv->waiters_count_ > 0 ) {
+ SetEvent( cv->event_ );
+ /* Release all the threads in this generation. */
+
+ cv->release_count_ = cv->waiters_count_;
+
+ /* Start a new generation. */
+ cv->wait_generation_count_++;
+ }
+
+ __kmp_win32_mutex_unlock( &cv->waiters_count_lock_ );
+}
+
+void
+__kmp_win32_cond_signal( kmp_win32_cond_t *cv )
+{
+ __kmp_win32_cond_broadcast( cv );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_enable( int new_state )
+{
+ if (__kmp_init_runtime)
+ LeaveCriticalSection( & __kmp_win32_section );
+}
+
+void
+__kmp_disable( int *old_state )
+{
+ *old_state = 0;
+
+ if (__kmp_init_runtime)
+ EnterCriticalSection( & __kmp_win32_section );
+}
+
+void
+__kmp_suspend_initialize( void )
+{
+ /* do nothing */
+}
+
+static void
+__kmp_suspend_initialize_thread( kmp_info_t *th )
+{
+ if ( ! TCR_4( th->th.th_suspend_init ) ) {
+ /* this means we haven't initialized the suspension pthread objects for this thread
+ in this instance of the process */
+ __kmp_win32_cond_init( &th->th.th_suspend_cv );
+ __kmp_win32_mutex_init( &th->th.th_suspend_mx );
+ TCW_4( th->th.th_suspend_init, TRUE );
+ }
+}
+
+void
+__kmp_suspend_uninitialize_thread( kmp_info_t *th )
+{
+ if ( TCR_4( th->th.th_suspend_init ) ) {
+ /* this means we have initialize the suspension pthread objects for this thread
+ in this instance of the process */
+ __kmp_win32_cond_destroy( & th->th.th_suspend_cv );
+ __kmp_win32_mutex_destroy( & th->th.th_suspend_mx );
+ TCW_4( th->th.th_suspend_init, FALSE );
+ }
+}
+
+/* This routine puts the calling thread to sleep after setting the
+ * sleep bit for the indicated flag variable to true.
+ */
+template <class C>
+static inline void __kmp_suspend_template( int th_gtid, C *flag )
+{
+ kmp_info_t *th = __kmp_threads[th_gtid];
+ int status;
+ typename C::flag_t old_spin;
+
+ KF_TRACE( 30, ("__kmp_suspend_template: T#%d enter for flag's loc(%p)\n", th_gtid, flag->get() ) );
+
+ __kmp_suspend_initialize_thread( th );
+ __kmp_win32_mutex_lock( &th->th.th_suspend_mx );
+
+ KF_TRACE( 10, ( "__kmp_suspend_template: T#%d setting sleep bit for flag's loc(%p)\n",
+ th_gtid, flag->get() ) );
+
+ /* TODO: shouldn't this use release semantics to ensure that __kmp_suspend_initialize_thread
+ gets called first?
+ */
+ old_spin = flag->set_sleeping();
+
+ KF_TRACE( 5, ( "__kmp_suspend_template: T#%d set sleep bit for flag's loc(%p)==%d\n",
+ th_gtid, flag->get(), *(flag->get()) ) );
+
+ if ( flag->done_check_val(old_spin) ) {
+ old_spin = flag->unset_sleeping();
+ KF_TRACE( 5, ( "__kmp_suspend_template: T#%d false alarm, reset sleep bit for flag's loc(%p)\n",
+ th_gtid, flag->get()) );
+ } else {
+#ifdef DEBUG_SUSPEND
+ __kmp_suspend_count++;
+#endif
+ /* Encapsulate in a loop as the documentation states that this may
+ * "with low probability" return when the condition variable has
+ * not been signaled or broadcast
+ */
+ int deactivated = FALSE;
+ TCW_PTR(th->th.th_sleep_loc, (void *)flag);
+ while ( flag->is_sleeping() ) {
+ KF_TRACE( 15, ("__kmp_suspend_template: T#%d about to perform kmp_win32_cond_wait()\n",
+ th_gtid ) );
+ // Mark the thread as no longer active (only in the first iteration of the loop).
+ if ( ! deactivated ) {
+ th->th.th_active = FALSE;
+ if ( th->th.th_active_in_pool ) {
+ th->th.th_active_in_pool = FALSE;
+ KMP_TEST_THEN_DEC32(
+ (kmp_int32 *) &__kmp_thread_pool_active_nth );
+ KMP_DEBUG_ASSERT( TCR_4(__kmp_thread_pool_active_nth) >= 0 );
+ }
+ deactivated = TRUE;
+
+ __kmp_win32_cond_wait( &th->th.th_suspend_cv, &th->th.th_suspend_mx, 0, 0 );
+ }
+ else {
+ __kmp_win32_cond_wait( &th->th.th_suspend_cv, &th->th.th_suspend_mx, 0, 0 );
+ }
+
+#ifdef KMP_DEBUG
+ if( flag->is_sleeping() ) {
+ KF_TRACE( 100, ("__kmp_suspend_template: T#%d spurious wakeup\n", th_gtid ));
+ }
+#endif /* KMP_DEBUG */
+
+ } // while
+
+ // Mark the thread as active again (if it was previous marked as inactive)
+ if ( deactivated ) {
+ th->th.th_active = TRUE;
+ if ( TCR_4(th->th.th_in_pool) ) {
+ KMP_TEST_THEN_INC32(
+ (kmp_int32 *) &__kmp_thread_pool_active_nth );
+ th->th.th_active_in_pool = TRUE;
+ }
+ }
+ }
+
+ __kmp_win32_mutex_unlock( &th->th.th_suspend_mx );
+
+ KF_TRACE( 30, ("__kmp_suspend_template: T#%d exit\n", th_gtid ) );
+}
+
+void __kmp_suspend_32(int th_gtid, kmp_flag_32 *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+void __kmp_suspend_64(int th_gtid, kmp_flag_64 *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+void __kmp_suspend_oncore(int th_gtid, kmp_flag_oncore *flag) {
+ __kmp_suspend_template(th_gtid, flag);
+}
+
+
+/* This routine signals the thread specified by target_gtid to wake up
+ * after setting the sleep bit indicated by the flag argument to FALSE
+ */
+template <class C>
+static inline void __kmp_resume_template( int target_gtid, C *flag )
+{
+ kmp_info_t *th = __kmp_threads[target_gtid];
+ int status;
+
+#ifdef KMP_DEBUG
+ int gtid = TCR_4(__kmp_init_gtid) ? __kmp_get_gtid() : -1;
+#endif
+
+ KF_TRACE( 30, ( "__kmp_resume_template: T#%d wants to wakeup T#%d enter\n", gtid, target_gtid ) );
+
+ __kmp_suspend_initialize_thread( th );
+ __kmp_win32_mutex_lock( &th->th.th_suspend_mx );
+
+ if (!flag) { // coming from __kmp_null_resume_wrapper
+ flag = (C *)th->th.th_sleep_loc;
+ }
+
+ // First, check if the flag is null or its type has changed. If so, someone else woke it up.
+ if (!flag || flag->get_type() != flag->get_ptr_type()) { // get_ptr_type simply shows what flag was cast to
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d exiting, thread T#%d already awake: flag's loc(%p)\n",
+ gtid, target_gtid, NULL ) );
+ __kmp_win32_mutex_unlock( &th->th.th_suspend_mx );
+ return;
+ }
+ else {
+ typename C::flag_t old_spin = flag->unset_sleeping();
+ if ( !flag->is_sleeping_val(old_spin) ) {
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d exiting, thread T#%d already awake: flag's loc(%p): "
+ "%u => %u\n",
+ gtid, target_gtid, flag->get(), old_spin, *(flag->get()) ) );
+ __kmp_win32_mutex_unlock( &th->th.th_suspend_mx );
+ return;
+ }
+ }
+ TCW_PTR(th->th.th_sleep_loc, NULL);
+
+ KF_TRACE( 5, ( "__kmp_resume_template: T#%d about to wakeup T#%d, reset sleep bit for flag's loc(%p)\n",
+ gtid, target_gtid, flag->get() ) );
+
+ __kmp_win32_cond_signal( &th->th.th_suspend_cv );
+ __kmp_win32_mutex_unlock( &th->th.th_suspend_mx );
+
+ KF_TRACE( 30, ( "__kmp_resume_template: T#%d exiting after signaling wake up for T#%d\n",
+ gtid, target_gtid ) );
+}
+
+void __kmp_resume_32(int target_gtid, kmp_flag_32 *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+void __kmp_resume_64(int target_gtid, kmp_flag_64 *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+void __kmp_resume_oncore(int target_gtid, kmp_flag_oncore *flag) {
+ __kmp_resume_template(target_gtid, flag);
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_yield( int cond )
+{
+ if (cond)
+ Sleep(0);
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_gtid_set_specific( int gtid )
+{
+ if( __kmp_init_gtid ) {
+ KA_TRACE( 50, ("__kmp_gtid_set_specific: T#%d key:%d\n",
+ gtid, __kmp_gtid_threadprivate_key ));
+ if( ! TlsSetValue( __kmp_gtid_threadprivate_key, (LPVOID)(gtid+1)) )
+ KMP_FATAL( TLSSetValueFailed );
+ } else {
+ KA_TRACE( 50, ("__kmp_gtid_set_specific: runtime shutdown, returning\n" ) );
+ }
+}
+
+int
+__kmp_gtid_get_specific()
+{
+ int gtid;
+ if( !__kmp_init_gtid ) {
+ KA_TRACE( 50, ("__kmp_gtid_get_specific: runtime shutdown, returning KMP_GTID_SHUTDOWN\n" ) );
+ return KMP_GTID_SHUTDOWN;
+ }
+ gtid = (int)(kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key );
+ if ( gtid == 0 ) {
+ gtid = KMP_GTID_DNE;
+ }
+ else {
+ gtid--;
+ }
+ KA_TRACE( 50, ("__kmp_gtid_get_specific: key:%d gtid:%d\n",
+ __kmp_gtid_threadprivate_key, gtid ));
+ return gtid;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_GROUP_AFFINITY
+
+//
+// Only 1 DWORD in the mask should have any procs set.
+// Return the appropriate index, or -1 for an invalid mask.
+//
+int
+__kmp_get_proc_group( kmp_affin_mask_t const *mask )
+{
+ int i;
+ int group = -1;
+ for (i = 0; i < __kmp_num_proc_groups; i++) {
+#if KMP_USE_HWLOC
+ // On windows, the long type is always 32 bits
+ unsigned long first_32_bits = hwloc_bitmap_to_ith_ulong((hwloc_const_bitmap_t)mask, i*2);
+ unsigned long second_32_bits = hwloc_bitmap_to_ith_ulong((hwloc_const_bitmap_t)mask, i*2+1);
+ if (first_32_bits == 0 && second_32_bits == 0) {
+ continue;
+ }
+#else
+ if (mask[i] == 0) {
+ continue;
+ }
+#endif
+ if (group >= 0) {
+ return -1;
+ }
+ group = i;
+ }
+ return group;
+}
+
+#endif /* KMP_GROUP_AFFINITY */
+
+int
+__kmp_set_system_affinity( kmp_affin_mask_t const *mask, int abort_on_error )
+{
+#if KMP_USE_HWLOC
+ int retval = hwloc_set_cpubind(__kmp_hwloc_topology, (hwloc_cpuset_t)mask, HWLOC_CPUBIND_THREAD);
+ if (retval >= 0) {
+ return 0;
+ }
+ int error = errno;
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FatalSysError ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+#else
+# if KMP_GROUP_AFFINITY
+
+ if (__kmp_num_proc_groups > 1) {
+ //
+ // Check for a valid mask.
+ //
+ GROUP_AFFINITY ga;
+ int group = __kmp_get_proc_group( mask );
+ if (group < 0) {
+ if (abort_on_error) {
+ KMP_FATAL(AffinityInvalidMask, "kmp_set_affinity");
+ }
+ return -1;
+ }
+
+ //
+ // Transform the bit vector into a GROUP_AFFINITY struct
+ // and make the system call to set affinity.
+ //
+ ga.Group = group;
+ ga.Mask = mask[group];
+ ga.Reserved[0] = ga.Reserved[1] = ga.Reserved[2] = 0;
+
+ KMP_DEBUG_ASSERT(__kmp_SetThreadGroupAffinity != NULL);
+ if (__kmp_SetThreadGroupAffinity(GetCurrentThread(), &ga, NULL) == 0) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetThreadAffMask ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+ }
+ }
+ else
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ {
+ if (!SetThreadAffinityMask( GetCurrentThread(), *mask )) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetThreadAffMask ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+ }
+ }
+#endif /* KMP_USE_HWLOC */
+ return 0;
+}
+
+int
+__kmp_get_system_affinity( kmp_affin_mask_t *mask, int abort_on_error )
+{
+#if KMP_USE_HWLOC
+ int retval = hwloc_get_cpubind(__kmp_hwloc_topology, (hwloc_cpuset_t)mask, HWLOC_CPUBIND_THREAD);
+ if (retval >= 0) {
+ return 0;
+ }
+ int error = errno;
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FatalSysError ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ return error;
+#else /* KMP_USE_HWLOC */
+# if KMP_GROUP_AFFINITY
+
+ if (__kmp_num_proc_groups > 1) {
+ KMP_CPU_ZERO(mask);
+ GROUP_AFFINITY ga;
+ KMP_DEBUG_ASSERT(__kmp_GetThreadGroupAffinity != NULL);
+
+ if (__kmp_GetThreadGroupAffinity(GetCurrentThread(), &ga) == 0) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(FunctionError, "GetThreadGroupAffinity()"),
+ KMP_ERR(error),
+ __kmp_msg_null
+ );
+ }
+ return error;
+ }
+
+ if ((ga.Group < 0) || (ga.Group > __kmp_num_proc_groups)
+ || (ga.Mask == 0)) {
+ return -1;
+ }
+
+ mask[ga.Group] = ga.Mask;
+ }
+ else
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ {
+ kmp_affin_mask_t newMask, sysMask, retval;
+
+ if (!GetProcessAffinityMask(GetCurrentProcess(), &newMask, &sysMask)) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(FunctionError, "GetProcessAffinityMask()"),
+ KMP_ERR(error),
+ __kmp_msg_null
+ );
+ }
+ return error;
+ }
+ retval = SetThreadAffinityMask(GetCurrentThread(), newMask);
+ if (! retval) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(FunctionError, "SetThreadAffinityMask()"),
+ KMP_ERR(error),
+ __kmp_msg_null
+ );
+ }
+ return error;
+ }
+ newMask = SetThreadAffinityMask(GetCurrentThread(), retval);
+ if (! newMask) {
+ DWORD error = GetLastError();
+ if (abort_on_error) {
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG(FunctionError, "SetThreadAffinityMask()"),
+ KMP_ERR(error),
+ __kmp_msg_null
+ );
+ }
+ }
+ *mask = retval;
+ }
+#endif /* KMP_USE_HWLOC */
+ return 0;
+}
+
+void
+__kmp_affinity_bind_thread( int proc )
+{
+#if KMP_USE_HWLOC
+ kmp_affin_mask_t *mask;
+ KMP_CPU_ALLOC_ON_STACK(mask);
+ KMP_CPU_ZERO(mask);
+ KMP_CPU_SET(proc, mask);
+ __kmp_set_system_affinity(mask, TRUE);
+ KMP_CPU_FREE_FROM_STACK(mask);
+#else /* KMP_USE_HWLOC */
+# if KMP_GROUP_AFFINITY
+
+ if (__kmp_num_proc_groups > 1) {
+ //
+ // Form the GROUP_AFFINITY struct directly, rather than filling
+ // out a bit vector and calling __kmp_set_system_affinity().
+ //
+ GROUP_AFFINITY ga;
+ KMP_DEBUG_ASSERT((proc >= 0) && (proc < (__kmp_num_proc_groups
+ * CHAR_BIT * sizeof(DWORD_PTR))));
+ ga.Group = proc / (CHAR_BIT * sizeof(DWORD_PTR));
+ ga.Mask = (unsigned long long)1 << (proc % (CHAR_BIT * sizeof(DWORD_PTR)));
+ ga.Reserved[0] = ga.Reserved[1] = ga.Reserved[2] = 0;
+
+ KMP_DEBUG_ASSERT(__kmp_SetThreadGroupAffinity != NULL);
+ if (__kmp_SetThreadGroupAffinity(GetCurrentThread(), &ga, NULL) == 0) {
+ DWORD error = GetLastError();
+ if (__kmp_affinity_verbose) { // AC: continue silently if not verbose
+ __kmp_msg(
+ kmp_ms_warning,
+ KMP_MSG( CantSetThreadAffMask ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ }
+ }
+ else
+
+# endif /* KMP_GROUP_AFFINITY */
+
+ {
+ kmp_affin_mask_t mask;
+ KMP_CPU_ZERO(&mask);
+ KMP_CPU_SET(proc, &mask);
+ __kmp_set_system_affinity(&mask, TRUE);
+ }
+#endif /* KMP_USE_HWLOC */
+}
+
+void
+__kmp_affinity_determine_capable( const char *env_var )
+{
+ //
+ // All versions of Windows* OS (since Win '95) support SetThreadAffinityMask().
+ //
+
+#if KMP_GROUP_AFFINITY
+ KMP_AFFINITY_ENABLE(__kmp_num_proc_groups*sizeof(kmp_affin_mask_t));
+#else
+ KMP_AFFINITY_ENABLE(sizeof(kmp_affin_mask_t));
+#endif
+
+ KA_TRACE( 10, (
+ "__kmp_affinity_determine_capable: "
+ "Windows* OS affinity interface functional (mask size = %" KMP_SIZE_T_SPEC ").\n",
+ __kmp_affin_mask_size
+ ) );
+}
+
+double
+__kmp_read_cpu_time( void )
+{
+ FILETIME CreationTime, ExitTime, KernelTime, UserTime;
+ int status;
+ double cpu_time;
+
+ cpu_time = 0;
+
+ status = GetProcessTimes( GetCurrentProcess(), &CreationTime,
+ &ExitTime, &KernelTime, &UserTime );
+
+ if (status) {
+ double sec = 0;
+
+ sec += KernelTime.dwHighDateTime;
+ sec += UserTime.dwHighDateTime;
+
+ /* Shift left by 32 bits */
+ sec *= (double) (1 << 16) * (double) (1 << 16);
+
+ sec += KernelTime.dwLowDateTime;
+ sec += UserTime.dwLowDateTime;
+
+ cpu_time += (sec * 100.0) / KMP_NSEC_PER_SEC;
+ }
+
+ return cpu_time;
+}
+
+int
+__kmp_read_system_info( struct kmp_sys_info *info )
+{
+ info->maxrss = 0; /* the maximum resident set size utilized (in kilobytes) */
+ info->minflt = 0; /* the number of page faults serviced without any I/O */
+ info->majflt = 0; /* the number of page faults serviced that required I/O */
+ info->nswap = 0; /* the number of times a process was "swapped" out of memory */
+ info->inblock = 0; /* the number of times the file system had to perform input */
+ info->oublock = 0; /* the number of times the file system had to perform output */
+ info->nvcsw = 0; /* the number of times a context switch was voluntarily */
+ info->nivcsw = 0; /* the number of times a context switch was forced */
+
+ return 1;
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+
+void
+__kmp_runtime_initialize( void )
+{
+ SYSTEM_INFO info;
+ kmp_str_buf_t path;
+ UINT path_size;
+
+ if ( __kmp_init_runtime ) {
+ return;
+ };
+
+#if KMP_DYNAMIC_LIB
+ /* Pin dynamic library for the lifetime of application */
+ {
+ // First, turn off error message boxes
+ UINT err_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
+ HMODULE h;
+ BOOL ret = GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+ |GET_MODULE_HANDLE_EX_FLAG_PIN,
+ (LPCTSTR)&__kmp_serial_initialize, &h);
+ KMP_DEBUG_ASSERT2(h && ret, "OpenMP RTL cannot find itself loaded");
+ SetErrorMode (err_mode); // Restore error mode
+ KA_TRACE( 10, ("__kmp_runtime_initialize: dynamic library pinned\n") );
+ }
+#endif
+
+ InitializeCriticalSection( & __kmp_win32_section );
+#if USE_ITT_BUILD
+ __kmp_itt_system_object_created( & __kmp_win32_section, "Critical Section" );
+#endif /* USE_ITT_BUILD */
+ __kmp_initialize_system_tick();
+
+ #if (KMP_ARCH_X86 || KMP_ARCH_X86_64)
+ if ( ! __kmp_cpuinfo.initialized ) {
+ __kmp_query_cpuid( & __kmp_cpuinfo );
+ }; // if
+ #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ /* Set up minimum number of threads to switch to TLS gtid */
+ #if KMP_OS_WINDOWS && ! defined KMP_DYNAMIC_LIB
+ // Windows* OS, static library.
+ /*
+ New thread may use stack space previously used by another thread, currently terminated.
+ On Windows* OS, in case of static linking, we do not know the moment of thread termination,
+ and our structures (__kmp_threads and __kmp_root arrays) are still keep info about dead
+ threads. This leads to problem in __kmp_get_global_thread_id() function: it wrongly
+ finds gtid (by searching through stack addresses of all known threads) for unregistered
+ foreign tread.
+
+ Setting __kmp_tls_gtid_min to 0 workarounds this problem: __kmp_get_global_thread_id()
+ does not search through stacks, but get gtid from TLS immediately.
+
+ --ln
+ */
+ __kmp_tls_gtid_min = 0;
+ #else
+ __kmp_tls_gtid_min = KMP_TLS_GTID_MIN;
+ #endif
+
+ /* for the static library */
+ if ( !__kmp_gtid_threadprivate_key ) {
+ __kmp_gtid_threadprivate_key = TlsAlloc();
+ if( __kmp_gtid_threadprivate_key == TLS_OUT_OF_INDEXES ) {
+ KMP_FATAL( TLSOutOfIndexes );
+ }
+ }
+
+
+ //
+ // Load ntdll.dll.
+ //
+ /*
+ Simple
+ GetModuleHandle( "ntdll.dl" )
+ is not suitable due to security issue (see
+ http://www.microsoft.com/technet/security/advisory/2269637.mspx). We have to specify full
+ path to the library.
+ */
+ __kmp_str_buf_init( & path );
+ path_size = GetSystemDirectory( path.str, path.size );
+ KMP_DEBUG_ASSERT( path_size > 0 );
+ if ( path_size >= path.size ) {
+ //
+ // Buffer is too short. Expand the buffer and try again.
+ //
+ __kmp_str_buf_reserve( & path, path_size );
+ path_size = GetSystemDirectory( path.str, path.size );
+ KMP_DEBUG_ASSERT( path_size > 0 );
+ }; // if
+ if ( path_size > 0 && path_size < path.size ) {
+ //
+ // Now we have system directory name in the buffer.
+ // Append backslash and name of dll to form full path,
+ //
+ path.used = path_size;
+ __kmp_str_buf_print( & path, "\\%s", "ntdll.dll" );
+
+ //
+ // Now load ntdll using full path.
+ //
+ ntdll = GetModuleHandle( path.str );
+ }
+
+ KMP_DEBUG_ASSERT( ntdll != NULL );
+ if ( ntdll != NULL ) {
+ NtQuerySystemInformation = (NtQuerySystemInformation_t) GetProcAddress( ntdll, "NtQuerySystemInformation" );
+ }
+ KMP_DEBUG_ASSERT( NtQuerySystemInformation != NULL );
+
+#if KMP_GROUP_AFFINITY
+ //
+ // Load kernel32.dll.
+ // Same caveat - must use full system path name.
+ //
+ if ( path_size > 0 && path_size < path.size ) {
+ //
+ // Truncate the buffer back to just the system path length,
+ // discarding "\\ntdll.dll", and replacing it with "kernel32.dll".
+ //
+ path.used = path_size;
+ __kmp_str_buf_print( & path, "\\%s", "kernel32.dll" );
+
+ //
+ // Load kernel32.dll using full path.
+ //
+ kernel32 = GetModuleHandle( path.str );
+ KA_TRACE( 10, ("__kmp_runtime_initialize: kernel32.dll = %s\n", path.str ) );
+
+ //
+ // Load the function pointers to kernel32.dll routines
+ // that may or may not exist on this system.
+ //
+ if ( kernel32 != NULL ) {
+ __kmp_GetActiveProcessorCount = (kmp_GetActiveProcessorCount_t) GetProcAddress( kernel32, "GetActiveProcessorCount" );
+ __kmp_GetActiveProcessorGroupCount = (kmp_GetActiveProcessorGroupCount_t) GetProcAddress( kernel32, "GetActiveProcessorGroupCount" );
+ __kmp_GetThreadGroupAffinity = (kmp_GetThreadGroupAffinity_t) GetProcAddress( kernel32, "GetThreadGroupAffinity" );
+ __kmp_SetThreadGroupAffinity = (kmp_SetThreadGroupAffinity_t) GetProcAddress( kernel32, "SetThreadGroupAffinity" );
+
+ KA_TRACE( 10, ("__kmp_runtime_initialize: __kmp_GetActiveProcessorCount = %p\n", __kmp_GetActiveProcessorCount ) );
+ KA_TRACE( 10, ("__kmp_runtime_initialize: __kmp_GetActiveProcessorGroupCount = %p\n", __kmp_GetActiveProcessorGroupCount ) );
+ KA_TRACE( 10, ("__kmp_runtime_initialize:__kmp_GetThreadGroupAffinity = %p\n", __kmp_GetThreadGroupAffinity ) );
+ KA_TRACE( 10, ("__kmp_runtime_initialize: __kmp_SetThreadGroupAffinity = %p\n", __kmp_SetThreadGroupAffinity ) );
+ KA_TRACE( 10, ("__kmp_runtime_initialize: sizeof(kmp_affin_mask_t) = %d\n", sizeof(kmp_affin_mask_t) ) );
+
+ //
+ // See if group affinity is supported on this system.
+ // If so, calculate the #groups and #procs.
+ //
+ // Group affinity was introduced with Windows* 7 OS and
+ // Windows* Server 2008 R2 OS.
+ //
+ if ( ( __kmp_GetActiveProcessorCount != NULL )
+ && ( __kmp_GetActiveProcessorGroupCount != NULL )
+ && ( __kmp_GetThreadGroupAffinity != NULL )
+ && ( __kmp_SetThreadGroupAffinity != NULL )
+ && ( ( __kmp_num_proc_groups
+ = __kmp_GetActiveProcessorGroupCount() ) > 1 ) ) {
+ //
+ // Calculate the total number of active OS procs.
+ //
+ int i;
+
+ KA_TRACE( 10, ("__kmp_runtime_initialize: %d processor groups detected\n", __kmp_num_proc_groups ) );
+
+ __kmp_xproc = 0;
+
+ for ( i = 0; i < __kmp_num_proc_groups; i++ ) {
+ DWORD size = __kmp_GetActiveProcessorCount( i );
+ __kmp_xproc += size;
+ KA_TRACE( 10, ("__kmp_runtime_initialize: proc group %d size = %d\n", i, size ) );
+ }
+ }
+ else {
+ KA_TRACE( 10, ("__kmp_runtime_initialize: %d processor groups detected\n", __kmp_num_proc_groups ) );
+ }
+ }
+ }
+ if ( __kmp_num_proc_groups <= 1 ) {
+ GetSystemInfo( & info );
+ __kmp_xproc = info.dwNumberOfProcessors;
+ }
+#else
+ GetSystemInfo( & info );
+ __kmp_xproc = info.dwNumberOfProcessors;
+#endif /* KMP_GROUP_AFFINITY */
+
+ //
+ // If the OS said there were 0 procs, take a guess and use a value of 2.
+ // This is done for Linux* OS, also. Do we need error / warning?
+ //
+ if ( __kmp_xproc <= 0 ) {
+ __kmp_xproc = 2;
+ }
+
+ KA_TRACE( 5, ("__kmp_runtime_initialize: total processors = %d\n", __kmp_xproc) );
+
+ __kmp_str_buf_free( & path );
+
+#if USE_ITT_BUILD
+ __kmp_itt_initialize();
+#endif /* USE_ITT_BUILD */
+
+ __kmp_init_runtime = TRUE;
+} // __kmp_runtime_initialize
+
+void
+__kmp_runtime_destroy( void )
+{
+ if ( ! __kmp_init_runtime ) {
+ return;
+ }
+
+#if USE_ITT_BUILD
+ __kmp_itt_destroy();
+#endif /* USE_ITT_BUILD */
+
+ /* we can't DeleteCriticalsection( & __kmp_win32_section ); */
+ /* due to the KX_TRACE() commands */
+ KA_TRACE( 40, ("__kmp_runtime_destroy\n" ));
+
+ if( __kmp_gtid_threadprivate_key ) {
+ TlsFree( __kmp_gtid_threadprivate_key );
+ __kmp_gtid_threadprivate_key = 0;
+ }
+
+ __kmp_affinity_uninitialize();
+ DeleteCriticalSection( & __kmp_win32_section );
+
+ ntdll = NULL;
+ NtQuerySystemInformation = NULL;
+
+#if KMP_ARCH_X86_64
+ kernel32 = NULL;
+ __kmp_GetActiveProcessorCount = NULL;
+ __kmp_GetActiveProcessorGroupCount = NULL;
+ __kmp_GetThreadGroupAffinity = NULL;
+ __kmp_SetThreadGroupAffinity = NULL;
+#endif // KMP_ARCH_X86_64
+
+ __kmp_init_runtime = FALSE;
+}
+
+
+void
+__kmp_terminate_thread( int gtid )
+{
+ kmp_info_t *th = __kmp_threads[ gtid ];
+
+ if( !th ) return;
+
+ KA_TRACE( 10, ("__kmp_terminate_thread: kill (%d)\n", gtid ) );
+
+ if (TerminateThread( th->th.th_info.ds.ds_thread, (DWORD) -1) == FALSE) {
+ /* It's OK, the thread may have exited already */
+ }
+ __kmp_free_handle( th->th.th_info.ds.ds_thread );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void
+__kmp_clear_system_time( void )
+{
+ BOOL status;
+ LARGE_INTEGER time;
+ status = QueryPerformanceCounter( & time );
+ __kmp_win32_time = (kmp_int64) time.QuadPart;
+}
+
+void
+__kmp_initialize_system_tick( void )
+{
+ {
+ BOOL status;
+ LARGE_INTEGER freq;
+
+ status = QueryPerformanceFrequency( & freq );
+ if (! status) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FunctionError, "QueryPerformanceFrequency()" ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+
+ }
+ else {
+ __kmp_win32_tick = ((double) 1.0) / (double) freq.QuadPart;
+ }
+ }
+}
+
+/* Calculate the elapsed wall clock time for the user */
+
+void
+__kmp_elapsed( double *t )
+{
+ BOOL status;
+ LARGE_INTEGER now;
+ status = QueryPerformanceCounter( & now );
+ *t = ((double) now.QuadPart) * __kmp_win32_tick;
+}
+
+/* Calculate the elapsed wall clock tick for the user */
+
+void
+__kmp_elapsed_tick( double *t )
+{
+ *t = __kmp_win32_tick;
+}
+
+void
+__kmp_read_system_time( double *delta )
+{
+ if (delta != NULL) {
+ BOOL status;
+ LARGE_INTEGER now;
+
+ status = QueryPerformanceCounter( & now );
+
+ *delta = ((double) (((kmp_int64) now.QuadPart) - __kmp_win32_time))
+ * __kmp_win32_tick;
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+void * __stdcall
+__kmp_launch_worker( void *arg )
+{
+ volatile void *stack_data;
+ void *exit_val;
+ void *padding = 0;
+ kmp_info_t *this_thr = (kmp_info_t *) arg;
+ int gtid;
+
+ gtid = this_thr->th.th_info.ds.ds_gtid;
+ __kmp_gtid_set_specific( gtid );
+#ifdef KMP_TDATA_GTID
+ #error "This define causes problems with LoadLibrary() + declspec(thread) " \
+ "on Windows* OS. See CQ50564, tests kmp_load_library*.c and this MSDN " \
+ "reference: http://support.microsoft.com/kb/118816"
+ //__kmp_gtid = gtid;
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_thread_name( gtid );
+#endif /* USE_ITT_BUILD */
+
+ __kmp_affinity_set_init_mask( gtid, FALSE );
+
+#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+ //
+ // Set the FP control regs to be a copy of
+ // the parallel initialization thread's.
+ //
+ __kmp_clear_x87_fpu_status_word();
+ __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
+ __kmp_load_mxcsr( &__kmp_init_mxcsr );
+#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
+
+ if ( __kmp_stkoffset > 0 && gtid > 0 ) {
+ padding = KMP_ALLOCA( gtid * __kmp_stkoffset );
+ }
+
+ KMP_FSYNC_RELEASING( &this_thr -> th.th_info.ds.ds_alive );
+ this_thr -> th.th_info.ds.ds_thread_id = GetCurrentThreadId();
+ TCW_4( this_thr -> th.th_info.ds.ds_alive, TRUE );
+
+ if ( TCR_4(__kmp_gtid_mode) < 2 ) { // check stack only if it is used to get gtid
+ TCW_PTR(this_thr->th.th_info.ds.ds_stackbase, &stack_data);
+ KMP_ASSERT( this_thr -> th.th_info.ds.ds_stackgrow == FALSE );
+ __kmp_check_stack_overlap( this_thr );
+ }
+ KMP_MB();
+ exit_val = __kmp_launch_thread( this_thr );
+ KMP_FSYNC_RELEASING( &this_thr -> th.th_info.ds.ds_alive );
+ TCW_4( this_thr -> th.th_info.ds.ds_alive, FALSE );
+ KMP_MB();
+ return exit_val;
+}
+
+/* The monitor thread controls all of the threads in the complex */
+
+void * __stdcall
+__kmp_launch_monitor( void *arg )
+{
+ DWORD wait_status;
+ kmp_thread_t monitor;
+ int status;
+ int interval;
+ kmp_info_t *this_thr = (kmp_info_t *) arg;
+
+ KMP_DEBUG_ASSERT(__kmp_init_monitor);
+ TCW_4( __kmp_init_monitor, 2 ); // AC: Signal the library that monitor has started
+ // TODO: hide "2" in enum (like {true,false,started})
+ this_thr -> th.th_info.ds.ds_thread_id = GetCurrentThreadId();
+ TCW_4( this_thr -> th.th_info.ds.ds_alive, TRUE );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ KA_TRACE( 10, ("__kmp_launch_monitor: launched\n" ) );
+
+ monitor = GetCurrentThread();
+
+ /* set thread priority */
+ status = SetThreadPriority( monitor, THREAD_PRIORITY_HIGHEST );
+ if (! status) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetThreadPriority ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+
+ /* register us as monitor */
+ __kmp_gtid_set_specific( KMP_GTID_MONITOR );
+#ifdef KMP_TDATA_GTID
+ #error "This define causes problems with LoadLibrary() + declspec(thread) " \
+ "on Windows* OS. See CQ50564, tests kmp_load_library*.c and this MSDN " \
+ "reference: http://support.microsoft.com/kb/118816"
+ //__kmp_gtid = KMP_GTID_MONITOR;
+#endif
+
+#if USE_ITT_BUILD
+ __kmp_itt_thread_ignore(); // Instruct Intel(R) Threading Tools to ignore monitor thread.
+#endif /* USE_ITT_BUILD */
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ interval = ( 1000 / __kmp_monitor_wakeups ); /* in milliseconds */
+
+ while (! TCR_4(__kmp_global.g.g_done)) {
+ /* This thread monitors the state of the system */
+
+ KA_TRACE( 15, ( "__kmp_launch_monitor: update\n" ) );
+
+ wait_status = WaitForSingleObject( __kmp_monitor_ev, interval );
+
+ if (wait_status == WAIT_TIMEOUT) {
+ TCW_4( __kmp_global.g.g_time.dt.t_value,
+ TCR_4( __kmp_global.g.g_time.dt.t_value ) + 1 );
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: finished\n" ) );
+
+ status = SetThreadPriority( monitor, THREAD_PRIORITY_NORMAL );
+ if (! status) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetThreadPriority ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+
+ if (__kmp_global.g.g_abort != 0) {
+ /* now we need to terminate the worker threads */
+ /* the value of t_abort is the signal we caught */
+
+ int gtid;
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: terminate sig=%d\n", (__kmp_global.g.g_abort) ) );
+
+ /* terminate the OpenMP worker threads */
+ /* TODO this is not valid for sibling threads!!
+ * the uber master might not be 0 anymore.. */
+ for (gtid = 1; gtid < __kmp_threads_capacity; ++gtid)
+ __kmp_terminate_thread( gtid );
+
+ __kmp_cleanup();
+
+ Sleep( 0 );
+
+ KA_TRACE( 10, ("__kmp_launch_monitor: raise sig=%d\n", (__kmp_global.g.g_abort) ) );
+
+ if (__kmp_global.g.g_abort > 0) {
+ raise( __kmp_global.g.g_abort );
+ }
+ }
+
+ TCW_4( this_thr -> th.th_info.ds.ds_alive, FALSE );
+
+ KMP_MB();
+ return arg;
+}
+
+void
+__kmp_create_worker( int gtid, kmp_info_t *th, size_t stack_size )
+{
+ kmp_thread_t handle;
+ DWORD idThread;
+
+ KA_TRACE( 10, ("__kmp_create_worker: try to create thread (%d)\n", gtid ) );
+
+ th->th.th_info.ds.ds_gtid = gtid;
+
+ if ( KMP_UBER_GTID(gtid) ) {
+ int stack_data;
+
+ /* TODO: GetCurrentThread() returns a pseudo-handle that is unsuitable for other threads to use.
+ Is it appropriate to just use GetCurrentThread? When should we close this handle? When
+ unregistering the root?
+ */
+ {
+ BOOL rc;
+ rc = DuplicateHandle(
+ GetCurrentProcess(),
+ GetCurrentThread(),
+ GetCurrentProcess(),
+ &th->th.th_info.ds.ds_thread,
+ 0,
+ FALSE,
+ DUPLICATE_SAME_ACCESS
+ );
+ KMP_ASSERT( rc );
+ KA_TRACE( 10, (" __kmp_create_worker: ROOT Handle duplicated, th = %p, handle = %" KMP_UINTPTR_SPEC "\n",
+ (LPVOID)th,
+ th->th.th_info.ds.ds_thread ) );
+ th->th.th_info.ds.ds_thread_id = GetCurrentThreadId();
+ }
+ if ( TCR_4(__kmp_gtid_mode) < 2 ) { // check stack only if it is used to get gtid
+ /* we will dynamically update the stack range if gtid_mode == 1 */
+ TCW_PTR(th->th.th_info.ds.ds_stackbase, &stack_data);
+ TCW_PTR(th->th.th_info.ds.ds_stacksize, 0);
+ TCW_4(th->th.th_info.ds.ds_stackgrow, TRUE);
+ __kmp_check_stack_overlap( th );
+ }
+ }
+ else {
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ /* Set stack size for this thread now. */
+ KA_TRACE( 10, ( "__kmp_create_worker: stack_size = %" KMP_SIZE_T_SPEC
+ " bytes\n", stack_size ) );
+
+ stack_size += gtid * __kmp_stkoffset;
+
+ TCW_PTR(th->th.th_info.ds.ds_stacksize, stack_size);
+ TCW_4(th->th.th_info.ds.ds_stackgrow, FALSE);
+
+ KA_TRACE( 10, ( "__kmp_create_worker: (before) stack_size = %"
+ KMP_SIZE_T_SPEC
+ " bytes, &__kmp_launch_worker = %p, th = %p, "
+ "&idThread = %p\n",
+ (SIZE_T) stack_size,
+ (LPTHREAD_START_ROUTINE) & __kmp_launch_worker,
+ (LPVOID) th, &idThread ) );
+
+ handle = CreateThread( NULL, (SIZE_T) stack_size,
+ (LPTHREAD_START_ROUTINE) __kmp_launch_worker,
+ (LPVOID) th, STACK_SIZE_PARAM_IS_A_RESERVATION, &idThread );
+
+ KA_TRACE( 10, ( "__kmp_create_worker: (after) stack_size = %"
+ KMP_SIZE_T_SPEC
+ " bytes, &__kmp_launch_worker = %p, th = %p, "
+ "idThread = %u, handle = %" KMP_UINTPTR_SPEC "\n",
+ (SIZE_T) stack_size,
+ (LPTHREAD_START_ROUTINE) & __kmp_launch_worker,
+ (LPVOID) th, idThread, handle ) );
+
+ if ( handle == 0 ) {
+ DWORD error = GetLastError();
+ __kmp_msg(kmp_ms_fatal, KMP_MSG( CantCreateThread ), KMP_ERR( error ), __kmp_msg_null);
+ } else {
+ th->th.th_info.ds.ds_thread = handle;
+ }
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ }
+
+ KA_TRACE( 10, ("__kmp_create_worker: done creating thread (%d)\n", gtid ) );
+}
+
+int
+__kmp_still_running(kmp_info_t *th) {
+ return (WAIT_TIMEOUT == WaitForSingleObject( th->th.th_info.ds.ds_thread, 0));
+}
+
+void
+__kmp_create_monitor( kmp_info_t *th )
+{
+ kmp_thread_t handle;
+ DWORD idThread;
+ int ideal, new_ideal;
+
+ if( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
+ // We don't need monitor thread in case of MAX_BLOCKTIME
+ KA_TRACE( 10, ("__kmp_create_monitor: skipping monitor thread because of MAX blocktime\n" ) );
+ th->th.th_info.ds.ds_tid = 0; // this makes reap_monitor no-op
+ th->th.th_info.ds.ds_gtid = 0;
+ TCW_4( __kmp_init_monitor, 2 ); // Signal to stop waiting for monitor creation
+ return;
+ }
+ KA_TRACE( 10, ("__kmp_create_monitor: try to create monitor\n" ) );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ __kmp_monitor_ev = CreateEvent( NULL, TRUE, FALSE, NULL );
+ if ( __kmp_monitor_ev == NULL ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantCreateEvent ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+#if USE_ITT_BUILD
+ __kmp_itt_system_object_created( __kmp_monitor_ev, "Event" );
+#endif /* USE_ITT_BUILD */
+
+ th->th.th_info.ds.ds_tid = KMP_GTID_MONITOR;
+ th->th.th_info.ds.ds_gtid = KMP_GTID_MONITOR;
+
+ // FIXME - on Windows* OS, if __kmp_monitor_stksize = 0, figure out how
+ // to automatically expand stacksize based on CreateThread error code.
+ if ( __kmp_monitor_stksize == 0 ) {
+ __kmp_monitor_stksize = KMP_DEFAULT_MONITOR_STKSIZE;
+ }
+ if ( __kmp_monitor_stksize < __kmp_sys_min_stksize ) {
+ __kmp_monitor_stksize = __kmp_sys_min_stksize;
+ }
+
+ KA_TRACE( 10, ("__kmp_create_monitor: requested stacksize = %d bytes\n",
+ (int) __kmp_monitor_stksize ) );
+
+ TCW_4( __kmp_global.g.g_time.dt.t_value, 0 );
+
+ handle = CreateThread( NULL, (SIZE_T) __kmp_monitor_stksize,
+ (LPTHREAD_START_ROUTINE) __kmp_launch_monitor,
+ (LPVOID) th, STACK_SIZE_PARAM_IS_A_RESERVATION, &idThread );
+ if (handle == 0) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantCreateThread ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ else
+ th->th.th_info.ds.ds_thread = handle;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ("__kmp_create_monitor: monitor created %p\n",
+ (void *) th->th.th_info.ds.ds_thread ) );
+}
+
+/*
+ Check to see if thread is still alive.
+
+ NOTE: The ExitProcess(code) system call causes all threads to Terminate
+ with a exit_val = code. Because of this we can not rely on
+ exit_val having any particular value. So this routine may
+ return STILL_ALIVE in exit_val even after the thread is dead.
+*/
+
+int
+__kmp_is_thread_alive( kmp_info_t * th, DWORD *exit_val )
+{
+ DWORD rc;
+ rc = GetExitCodeThread( th->th.th_info.ds.ds_thread, exit_val );
+ if ( rc == 0 ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FunctionError, "GetExitCodeThread()" ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }; // if
+ return ( *exit_val == STILL_ACTIVE );
+}
+
+
+void
+__kmp_exit_thread(
+ int exit_status
+) {
+ ExitThread( exit_status );
+} // __kmp_exit_thread
+
+/*
+ This is a common part for both __kmp_reap_worker() and __kmp_reap_monitor().
+*/
+static void
+__kmp_reap_common( kmp_info_t * th )
+{
+ DWORD exit_val;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ KA_TRACE( 10, ( "__kmp_reap_common: try to reap (%d)\n", th->th.th_info.ds.ds_gtid ) );
+
+ /*
+ 2006-10-19:
+
+ There are two opposite situations:
+
+ 1. Windows* OS keep thread alive after it resets ds_alive flag and exits from thread
+ function. (For example, see C70770/Q394281 "unloading of dll based on OMP is very
+ slow".)
+ 2. Windows* OS may kill thread before it resets ds_alive flag.
+
+ Right solution seems to be waiting for *either* thread termination *or* ds_alive resetting.
+
+ */
+
+ {
+ // TODO: This code is very similar to KMP_WAIT_YIELD. Need to generalize KMP_WAIT_YIELD to
+ // cover this usage also.
+ void * obj = NULL;
+ register kmp_uint32 spins;
+#if USE_ITT_BUILD
+ KMP_FSYNC_SPIN_INIT( obj, (void*) & th->th.th_info.ds.ds_alive );
+#endif /* USE_ITT_BUILD */
+ KMP_INIT_YIELD( spins );
+ do {
+#if USE_ITT_BUILD
+ KMP_FSYNC_SPIN_PREPARE( obj );
+#endif /* USE_ITT_BUILD */
+ __kmp_is_thread_alive( th, &exit_val );
+ KMP_YIELD( TCR_4(__kmp_nth) > __kmp_avail_proc );
+ KMP_YIELD_SPIN( spins );
+ } while ( exit_val == STILL_ACTIVE && TCR_4( th->th.th_info.ds.ds_alive ) );
+#if USE_ITT_BUILD
+ if ( exit_val == STILL_ACTIVE ) {
+ KMP_FSYNC_CANCEL( obj );
+ } else {
+ KMP_FSYNC_SPIN_ACQUIRED( obj );
+ }; // if
+#endif /* USE_ITT_BUILD */
+ }
+
+ __kmp_free_handle( th->th.th_info.ds.ds_thread );
+
+ /*
+ * NOTE: The ExitProcess(code) system call causes all threads to Terminate
+ * with a exit_val = code. Because of this we can not rely on
+ * exit_val having any particular value.
+ */
+ if ( exit_val == STILL_ACTIVE ) {
+ KA_TRACE( 1, ( "__kmp_reap_common: thread still active.\n" ) );
+ } else if ( (void *) exit_val != (void *) th) {
+ KA_TRACE( 1, ( "__kmp_reap_common: ExitProcess / TerminateThread used?\n" ) );
+ }; // if
+
+ KA_TRACE( 10,
+ (
+ "__kmp_reap_common: done reaping (%d), handle = %" KMP_UINTPTR_SPEC "\n",
+ th->th.th_info.ds.ds_gtid,
+ th->th.th_info.ds.ds_thread
+ )
+ );
+
+ th->th.th_info.ds.ds_thread = 0;
+ th->th.th_info.ds.ds_tid = KMP_GTID_DNE;
+ th->th.th_info.ds.ds_gtid = KMP_GTID_DNE;
+ th->th.th_info.ds.ds_thread_id = 0;
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+}
+
+void
+__kmp_reap_monitor( kmp_info_t *th )
+{
+ int status;
+
+ KA_TRACE( 10, ("__kmp_reap_monitor: try to reap %p\n",
+ (void *) th->th.th_info.ds.ds_thread ) );
+
+ // If monitor has been created, its tid and gtid should be KMP_GTID_MONITOR.
+ // If both tid and gtid are 0, it means the monitor did not ever start.
+ // If both tid and gtid are KMP_GTID_DNE, the monitor has been shut down.
+ KMP_DEBUG_ASSERT( th->th.th_info.ds.ds_tid == th->th.th_info.ds.ds_gtid );
+ if ( th->th.th_info.ds.ds_gtid != KMP_GTID_MONITOR ) {
+ KA_TRACE( 10, ("__kmp_reap_monitor: monitor did not start, returning\n") );
+ return;
+ }; // if
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+
+ status = SetEvent( __kmp_monitor_ev );
+ if ( status == FALSE ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantSetEvent ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+ KA_TRACE( 10, ( "__kmp_reap_monitor: reaping thread (%d)\n", th->th.th_info.ds.ds_gtid ) );
+ __kmp_reap_common( th );
+
+ __kmp_free_handle( __kmp_monitor_ev );
+
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+}
+
+void
+__kmp_reap_worker( kmp_info_t * th )
+{
+ KA_TRACE( 10, ( "__kmp_reap_worker: reaping thread (%d)\n", th->th.th_info.ds.ds_gtid ) );
+ __kmp_reap_common( th );
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+#if KMP_HANDLE_SIGNALS
+
+
+static void
+__kmp_team_handler( int signo )
+{
+ if ( __kmp_global.g.g_abort == 0 ) {
+ // Stage 1 signal handler, let's shut down all of the threads.
+ if ( __kmp_debug_buf ) {
+ __kmp_dump_debug_buffer();
+ }; // if
+ KMP_MB(); // Flush all pending memory write invalidates.
+ TCW_4( __kmp_global.g.g_abort, signo );
+ KMP_MB(); // Flush all pending memory write invalidates.
+ TCW_4( __kmp_global.g.g_done, TRUE );
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }
+} // __kmp_team_handler
+
+
+
+static
+sig_func_t __kmp_signal( int signum, sig_func_t handler ) {
+ sig_func_t old = signal( signum, handler );
+ if ( old == SIG_ERR ) {
+ int error = errno;
+ __kmp_msg( kmp_ms_fatal, KMP_MSG( FunctionError, "signal" ), KMP_ERR( error ), __kmp_msg_null );
+ }; // if
+ return old;
+}
+
+static void
+__kmp_install_one_handler(
+ int sig,
+ sig_func_t handler,
+ int parallel_init
+) {
+ sig_func_t old;
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+ KB_TRACE( 60, ("__kmp_install_one_handler: called: sig=%d\n", sig ) );
+ if ( parallel_init ) {
+ old = __kmp_signal( sig, handler );
+ // SIG_DFL on Windows* OS in NULL or 0.
+ if ( old == __kmp_sighldrs[ sig ] ) {
+ __kmp_siginstalled[ sig ] = 1;
+ } else {
+ // Restore/keep user's handler if one previously installed.
+ old = __kmp_signal( sig, old );
+ }; // if
+ } else {
+ // Save initial/system signal handlers to see if user handlers installed.
+ // 2009-09-23: It is a dead code. On Windows* OS __kmp_install_signals called once with
+ // parallel_init == TRUE.
+ old = __kmp_signal( sig, SIG_DFL );
+ __kmp_sighldrs[ sig ] = old;
+ __kmp_signal( sig, old );
+ }; // if
+ KMP_MB(); /* Flush all pending memory write invalidates. */
+} // __kmp_install_one_handler
+
+static void
+__kmp_remove_one_handler( int sig ) {
+ if ( __kmp_siginstalled[ sig ] ) {
+ sig_func_t old;
+ KMP_MB(); // Flush all pending memory write invalidates.
+ KB_TRACE( 60, ( "__kmp_remove_one_handler: called: sig=%d\n", sig ) );
+ old = __kmp_signal( sig, __kmp_sighldrs[ sig ] );
+ if ( old != __kmp_team_handler ) {
+ KB_TRACE( 10, ( "__kmp_remove_one_handler: oops, not our handler, restoring: sig=%d\n", sig ) );
+ old = __kmp_signal( sig, old );
+ }; // if
+ __kmp_sighldrs[ sig ] = NULL;
+ __kmp_siginstalled[ sig ] = 0;
+ KMP_MB(); // Flush all pending memory write invalidates.
+ }; // if
+} // __kmp_remove_one_handler
+
+
+void
+__kmp_install_signals( int parallel_init )
+{
+ KB_TRACE( 10, ( "__kmp_install_signals: called\n" ) );
+ if ( ! __kmp_handle_signals ) {
+ KB_TRACE( 10, ( "__kmp_install_signals: KMP_HANDLE_SIGNALS is false - handlers not installed\n" ) );
+ return;
+ }; // if
+ __kmp_install_one_handler( SIGINT, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGILL, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGABRT, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGFPE, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGSEGV, __kmp_team_handler, parallel_init );
+ __kmp_install_one_handler( SIGTERM, __kmp_team_handler, parallel_init );
+} // __kmp_install_signals
+
+
+void
+__kmp_remove_signals( void )
+{
+ int sig;
+ KB_TRACE( 10, ("__kmp_remove_signals: called\n" ) );
+ for ( sig = 1; sig < NSIG; ++ sig ) {
+ __kmp_remove_one_handler( sig );
+ }; // for sig
+} // __kmp_remove_signals
+
+
+#endif // KMP_HANDLE_SIGNALS
+
+/* Put the thread to sleep for a time period */
+void
+__kmp_thread_sleep( int millis )
+{
+ DWORD status;
+
+ status = SleepEx( (DWORD) millis, FALSE );
+ if ( status ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( FunctionError, "SleepEx()" ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+}
+
+/* Determine whether the given address is mapped into the current address space. */
+int
+__kmp_is_address_mapped( void * addr )
+{
+ DWORD status;
+ MEMORY_BASIC_INFORMATION lpBuffer;
+ SIZE_T dwLength;
+
+ dwLength = sizeof(MEMORY_BASIC_INFORMATION);
+
+ status = VirtualQuery( addr, &lpBuffer, dwLength );
+
+ return !((( lpBuffer.State == MEM_RESERVE) || ( lpBuffer.State == MEM_FREE )) ||
+ (( lpBuffer.Protect == PAGE_NOACCESS ) || ( lpBuffer.Protect == PAGE_EXECUTE )));
+}
+
+kmp_uint64
+__kmp_hardware_timestamp(void)
+{
+ kmp_uint64 r = 0;
+
+ QueryPerformanceCounter((LARGE_INTEGER*) &r);
+ return r;
+}
+
+/* Free handle and check the error code */
+void
+__kmp_free_handle( kmp_thread_t tHandle )
+{
+/* called with parameter type HANDLE also, thus suppose kmp_thread_t defined as HANDLE */
+ BOOL rc;
+ rc = CloseHandle( tHandle );
+ if ( !rc ) {
+ DWORD error = GetLastError();
+ __kmp_msg(
+ kmp_ms_fatal,
+ KMP_MSG( CantCloseHandle ),
+ KMP_ERR( error ),
+ __kmp_msg_null
+ );
+ }
+}
+
+int
+__kmp_get_load_balance( int max ) {
+
+ static ULONG glb_buff_size = 100 * 1024;
+
+ static int glb_running_threads = 0; /* Saved count of the running threads for the thread balance algortihm */
+ static double glb_call_time = 0; /* Thread balance algorithm call time */
+
+ int running_threads = 0; // Number of running threads in the system.
+ NTSTATUS status = 0;
+ ULONG buff_size = 0;
+ ULONG info_size = 0;
+ void * buffer = NULL;
+ PSYSTEM_PROCESS_INFORMATION spi = NULL;
+ int first_time = 1;
+
+ double call_time = 0.0; //start, finish;
+
+ __kmp_elapsed( & call_time );
+
+ if ( glb_call_time &&
+ ( call_time - glb_call_time < __kmp_load_balance_interval ) ) {
+ running_threads = glb_running_threads;
+ goto finish;
+ }
+ glb_call_time = call_time;
+
+ // Do not spend time on running algorithm if we have a permanent error.
+ if ( NtQuerySystemInformation == NULL ) {
+ running_threads = -1;
+ goto finish;
+ }; // if
+
+ if ( max <= 0 ) {
+ max = INT_MAX;
+ }; // if
+
+ do {
+
+ if ( first_time ) {
+ buff_size = glb_buff_size;
+ } else {
+ buff_size = 2 * buff_size;
+ }
+
+ buffer = KMP_INTERNAL_REALLOC( buffer, buff_size );
+ if ( buffer == NULL ) {
+ running_threads = -1;
+ goto finish;
+ }; // if
+ status = NtQuerySystemInformation( SystemProcessInformation, buffer, buff_size, & info_size );
+ first_time = 0;
+
+ } while ( status == STATUS_INFO_LENGTH_MISMATCH );
+ glb_buff_size = buff_size;
+
+ #define CHECK( cond ) \
+ { \
+ KMP_DEBUG_ASSERT( cond ); \
+ if ( ! ( cond ) ) { \
+ running_threads = -1; \
+ goto finish; \
+ } \
+ }
+
+ CHECK( buff_size >= info_size );
+ spi = PSYSTEM_PROCESS_INFORMATION( buffer );
+ for ( ; ; ) {
+ ptrdiff_t offset = uintptr_t( spi ) - uintptr_t( buffer );
+ CHECK( 0 <= offset && offset + sizeof( SYSTEM_PROCESS_INFORMATION ) < info_size );
+ HANDLE pid = spi->ProcessId;
+ ULONG num = spi->NumberOfThreads;
+ CHECK( num >= 1 );
+ size_t spi_size = sizeof( SYSTEM_PROCESS_INFORMATION ) + sizeof( SYSTEM_THREAD ) * ( num - 1 );
+ CHECK( offset + spi_size < info_size ); // Make sure process info record fits the buffer.
+ if ( spi->NextEntryOffset != 0 ) {
+ CHECK( spi_size <= spi->NextEntryOffset ); // And do not overlap with the next record.
+ }; // if
+ // pid == 0 corresponds to the System Idle Process. It always has running threads
+ // on all cores. So, we don't consider the running threads of this process.
+ if ( pid != 0 ) {
+ for ( int i = 0; i < num; ++ i ) {
+ THREAD_STATE state = spi->Threads[ i ].State;
+ // Count threads that have Ready or Running state.
+ // !!! TODO: Why comment does not match the code???
+ if ( state == StateRunning ) {
+ ++ running_threads;
+ // Stop counting running threads if the number is already greater than
+ // the number of available cores
+ if ( running_threads >= max ) {
+ goto finish;
+ }
+ } // if
+ }; // for i
+ } // if
+ if ( spi->NextEntryOffset == 0 ) {
+ break;
+ }; // if
+ spi = PSYSTEM_PROCESS_INFORMATION( uintptr_t( spi ) + spi->NextEntryOffset );
+ }; // forever
+
+ #undef CHECK
+
+ finish: // Clean up and exit.
+
+ if ( buffer != NULL ) {
+ KMP_INTERNAL_FREE( buffer );
+ }; // if
+
+ glb_running_threads = running_threads;
+
+ return running_threads;
+
+} //__kmp_get_load_balance()
+
diff --git a/final/runtime/test/CMakeLists.txt b/final/runtime/test/CMakeLists.txt
new file mode 100644
index 0000000..cc4fc41
--- /dev/null
+++ b/final/runtime/test/CMakeLists.txt
@@ -0,0 +1,99 @@
+# CMakeLists.txt file for unit testing OpenMP Library
+include(FindPythonInterp)
+include(CheckTypeSize)
+include(CheckLibraryExists)
+
+if(NOT PYTHONINTERP_FOUND)
+ libomp_warning_say("Could not find Python.")
+ libomp_warning_say("The check-libomp target will not be available!")
+ return()
+endif()
+
+# Some tests use math functions
+check_library_exists(m sqrt "" LIBOMP_HAVE_LIBM)
+
+macro(pythonize_bool var)
+ if (${var})
+ set(${var} True)
+ else()
+ set(${var} False)
+ endif()
+endmacro()
+
+pythonize_bool(LIBOMP_USE_HWLOC)
+pythonize_bool(LIBOMP_OMPT_SUPPORT)
+pythonize_bool(LIBOMP_OMPT_BLAME)
+pythonize_bool(LIBOMP_OMPT_TRACE)
+pythonize_bool(LIBOMP_HAVE_LIBM)
+
+set(LIBOMP_TEST_CFLAGS "" CACHE STRING
+ "Extra compiler flags to send to the test compiler")
+
+if(${LIBOMP_STANDALONE_BUILD})
+ # Make sure we can use the console pool for recent cmake and ninja > 1.5
+ if(CMAKE_VERSION VERSION_LESS 3.1.20141117)
+ set(cmake_3_2_USES_TERMINAL)
+ else()
+ set(cmake_3_2_USES_TERMINAL USES_TERMINAL)
+ endif()
+ set(LIBOMP_TEST_COMPILER ${CMAKE_C_COMPILER} CACHE STRING
+ "Compiler to use for testing OpenMP library")
+ set(LIBOMP_TEST_OPENMP_FLAG -fopenmp CACHE STRING
+ "OpenMP compiler flag to use for testing OpenMP library")
+ set(LIBOMP_LLVM_LIT_EXECUTABLE "" CACHE STRING
+ "Path to llvm-lit")
+ find_program(LIT_EXECUTABLE
+ NAMES llvm-lit lit.py
+ HINTS ${LIBOMP_LLVM_LIT_EXECUTABLE}
+ PATHS ${OPENMP_LLVM_TOOLS_DIR})
+ if(NOT LIT_EXECUTABLE)
+ libomp_say("Cannot find llvm-lit.")
+ libomp_say("Please put llvm-lit in your PATH, set LIBOMP_LLVM_LIT_EXECUTABLE to its full path or point OPENMP_LLVM_TOOLS_DIR to its directory")
+ libomp_warning_say("The check-libomp target will not be available!")
+ return()
+ endif()
+ find_program(FILECHECK_EXECUTABLE
+ NAMES FileCheck
+ PATHS ${OPENMP_LLVM_TOOLS_DIR})
+ if (NOT FILECHECK_EXECUTABLE)
+ # set to empty string so that lit can disable dependent tests
+ set(FILECHECK_EXECUTABLE "")
+ endif()
+ # Set lit arguments
+ # The -j 1 lets the actual tests run with the entire machine.
+ # We have one test thread that spawns the tests serially. This allows
+ # Each test to use the entire machine.
+ set(LIBOMP_LIT_ARGS_DEFAULT "-sv --show-unsupported --show-xfail")
+ if(MSVC OR XCODE)
+ set(LIBOMP_LIT_ARGS_DEFAULT "${LIBOMP_LIT_ARGS_DEFAULT} --no-progress-bar")
+ endif()
+ set(LIBOMP_LIT_ARGS "${LIBOMP_LIT_ARGS_DEFAULT}" CACHE STRING
+ "Default options for lit")
+ separate_arguments(LIBOMP_LIT_ARGS)
+ add_custom_target(check-libomp
+ COMMAND ${PYTHON_EXECUTABLE} ${LIT_EXECUTABLE} ${LIBOMP_LIT_ARGS} ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS omp
+ COMMENT "Running libomp tests"
+ ${cmake_3_2_USES_TERMINAL}
+ )
+else()
+ # LLVM source tree build, test just-built clang
+ if(NOT MSVC)
+ set(LIBOMP_TEST_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
+ else()
+ set(LIBOMP_TEST_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe)
+ endif()
+ set(LIBOMP_TEST_OPENMP_FLAG -fopenmp=libomp)
+ set(FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck)
+ # Use add_lit_testsuite() from LLVM CMake.
+ add_lit_testsuite(check-libomp
+ "Running libomp tests"
+ ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS clang clang-headers FileCheck omp
+ )
+endif()
+
+# Configure the lit.site.cfg.in file
+set(AUTO_GEN_COMMENT "## Autogenerated by libomp configuration.\n# Do not edit!")
+configure_file(lit.site.cfg.in lit.site.cfg @ONLY)
+
diff --git a/final/runtime/test/api/has_openmp.c b/final/runtime/test/api/has_openmp.c
new file mode 100644
index 0000000..da95f59
--- /dev/null
+++ b/final/runtime/test/api/has_openmp.c
@@ -0,0 +1,23 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+int test_has_openmp()
+{
+ int rvalue = 0;
+#ifdef _OPENMP
+ rvalue = 1;
+#endif
+ return (rvalue);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+ if(!test_has_openmp()) {
+ num_failed++;
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/api/kmp_aligned_malloc.c b/final/runtime/test/api/kmp_aligned_malloc.c
new file mode 100644
index 0000000..5302fec
--- /dev/null
+++ b/final/runtime/test/api/kmp_aligned_malloc.c
@@ -0,0 +1,62 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdint.h>
+#include <omp.h>
+#include "omp_testsuite.h"
+
+int alignments[] = {64, 128, 256, 512, 1024, 2048, 4096};
+
+unsigned aligned_by(uint64_t addr) {
+ uint64_t alignment = 1;
+ while((addr & (alignment-1)) == 0) {
+ alignment <<= 1;
+ }
+ return (alignment >> 1);
+}
+
+int test_kmp_aligned_malloc()
+{
+ int err = 0;
+ #pragma omp parallel shared(err)
+ {
+ int i;
+ int* ptr;
+ uint64_t addr;
+ int tid = omp_get_thread_num();
+
+ for(i = 0; i < sizeof(alignments)/sizeof(int); i++) {
+ int alignment = alignments[i];
+ // allocate 64 bytes with 64-byte alignment
+ // allocate 128 bytes with 128-byte alignment, etc.
+ ptr = (int*)kmp_aligned_malloc(alignment, alignment);
+ addr = (uint64_t)ptr;
+ if(addr & (alignment-1)) {
+ printf("thread %d: addr = %p (aligned to %u bytes) but expected "
+ " alignment = %d\n", tid, ptr, aligned_by(addr), alignment);
+ err = 1;
+ }
+ kmp_free(ptr);
+ }
+
+ ptr = kmp_aligned_malloc(128, 127);
+ if (ptr != NULL) {
+ printf("thread %d: kmp_aligned_malloc() didn't return NULL when "
+ "alignment was not power of 2\n", tid);
+ err = 1;
+ }
+ } /* end of parallel */
+ return !err;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_kmp_aligned_malloc()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/api/omp_get_num_threads.c b/final/runtime/test/api/omp_get_num_threads.c
new file mode 100644
index 0000000..daf286d
--- /dev/null
+++ b/final/runtime/test/api/omp_get_num_threads.c
@@ -0,0 +1,39 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_get_num_threads()
+{
+ /* checks that omp_get_num_threads is equal to the number of
+ threads */
+ int nthreads_lib;
+ int nthreads = 0;
+
+ nthreads_lib = -1;
+
+ #pragma omp parallel
+ {
+ #pragma omp critical
+ {
+ nthreads++;
+ } /* end of critical */
+ #pragma omp single
+ {
+ nthreads_lib = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+ return (nthreads == nthreads_lib);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_get_num_threads()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/api/omp_get_wtick.c b/final/runtime/test/api/omp_get_wtick.c
new file mode 100644
index 0000000..8b35226
--- /dev/null
+++ b/final/runtime/test/api/omp_get_wtick.c
@@ -0,0 +1,24 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_get_wtick()
+{
+ double tick;
+ tick = -1.;
+ tick = omp_get_wtick ();
+ return ((tick > 0.0) && (tick < 0.01));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_get_wtick()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/api/omp_get_wtime.c b/final/runtime/test/api/omp_get_wtime.c
new file mode 100644
index 0000000..b309440
--- /dev/null
+++ b/final/runtime/test/api/omp_get_wtime.c
@@ -0,0 +1,33 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_get_wtime()
+{
+ double start;
+ double end;
+ double measured_time;
+ double wait_time = 5.0;
+ start = 0;
+ end = 0;
+ start = omp_get_wtime();
+ my_sleep (wait_time);
+ end = omp_get_wtime();
+ measured_time = end-start;
+ return ((measured_time > 0.97 * wait_time) && (measured_time < 1.03 * wait_time)) ;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_get_wtime()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/api/omp_in_parallel.c b/final/runtime/test/api/omp_in_parallel.c
new file mode 100644
index 0000000..d09313e
--- /dev/null
+++ b/final/runtime/test/api/omp_in_parallel.c
@@ -0,0 +1,39 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+/*
+ * Checks that false is returned when called from serial region
+ * and true is returned when called within parallel region.
+ */
+int test_omp_in_parallel()
+{
+ int serial;
+ int isparallel;
+
+ serial = 1;
+ isparallel = 0;
+ serial = omp_in_parallel();
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ isparallel = omp_in_parallel();
+ }
+ }
+ return (!(serial) && isparallel);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_in_parallel()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/atomic/omp_atomic.c b/final/runtime/test/atomic/omp_atomic.c
new file mode 100644
index 0000000..7cdd30d
--- /dev/null
+++ b/final/runtime/test/atomic/omp_atomic.c
@@ -0,0 +1,366 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+
+int test_omp_atomic()
+{
+ int sum;
+ int diff;
+ double dsum = 0;
+ double dt = 0.5; /* base of geometric row for + and - test*/
+ double ddiff;
+ int product;
+ int x;
+ int *logics;
+ int bit_and = 1;
+ int bit_or = 0;
+ int exclusiv_bit_or = 0;
+ int j;
+ int known_sum;
+ int known_diff;
+ int known_product;
+ int result = 0;
+ int logic_and = 1;
+ int logic_or = 0;
+ double dknown_sum;
+ double rounding_error = 1.E-9;
+ double dpt, div;
+ int logicsArray[LOOPCOUNT];
+ logics = logicsArray;
+
+ sum = 0;
+ diff = 0;
+ product = 1;
+
+ // sum of integers test
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ #pragma omp atomic
+ sum += i;
+ }
+
+ }
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ if (known_sum != sum)
+ {
+ fprintf(stderr,
+ "Error in sum with integers: Result was %d instead of %d.\n",
+ sum, known_sum);
+ result++;
+ }
+
+ // difference of integers test
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++) {
+ #pragma omp atomic
+ diff -= i;
+ }
+ }
+ known_diff = ((LOOPCOUNT - 1) * LOOPCOUNT) / 2 * -1;
+ if (diff != known_diff)
+ {
+ fprintf (stderr,
+ "Error in difference with integers: Result was %d instead of 0.\n",
+ diff);
+ result++;
+ }
+
+ // sum of doubles test
+ dsum = 0;
+ dpt = 1;
+ for (j = 0; j < DOUBLE_DIGITS; ++j) {
+ dpt *= dt;
+ }
+ dknown_sum = (1 - dpt) / (1 -dt);
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < DOUBLE_DIGITS; ++i) {
+ #pragma omp atomic
+ dsum += pow (dt, i);
+ }
+ }
+ if (dsum != dknown_sum && (fabs (dsum - dknown_sum) > rounding_error)) {
+ fprintf (stderr, "Error in sum with doubles: Result was %f"
+ " instead of: %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum - dknown_sum);
+ result++;
+ }
+
+ // difference of doubles test
+ dpt = 1;
+ for (j = 0; j < DOUBLE_DIGITS; ++j) {
+ dpt *= dt;
+ }
+ ddiff = (1 - dpt) / (1 - dt);
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < DOUBLE_DIGITS; ++i) {
+ #pragma omp atomic
+ ddiff -= pow (dt, i);
+ }
+ }
+ if (fabs (ddiff) > rounding_error) {
+ fprintf (stderr,
+ "Error in difference with doubles: Result was %E instead of 0.0\n",
+ ddiff);
+ result++;
+ }
+
+ // product of integers test
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 1; i <= MAX_FACTOR; i++) {
+ #pragma omp atomic
+ product *= i;
+ }
+ }
+ known_product = KNOWN_PRODUCT;
+ if (known_product != product) {
+ fprintf (stderr,
+ "Error in product with integers: Result was %d instead of %d\n",
+ product, known_product);
+ result++;
+ }
+
+ // division of integers test
+ product = KNOWN_PRODUCT;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 1; i <= MAX_FACTOR; ++i) {
+ #pragma omp atomic
+ product /= i;
+ }
+ }
+ if (product != 1) {
+ fprintf (stderr,
+ "Error in product division with integers: Result was %d"
+ " instead of 1\n",
+ product);
+ result++;
+ }
+
+ // division of doubles test
+ div = 5.0E+5;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 1; i <= MAX_FACTOR; i++) {
+ #pragma omp atomic
+ div /= i;
+ }
+ }
+ if (fabs(div-0.137787) >= 1.0E-4 ) {
+ result++;
+ fprintf (stderr, "Error in division with double: Result was %f"
+ " instead of 0.137787\n", div);
+ }
+
+ // ++ test
+ x = 0;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ x++;
+ }
+ }
+ if (x != LOOPCOUNT) {
+ result++;
+ fprintf (stderr, "Error in ++\n");
+ }
+
+ // -- test
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ x--;
+ }
+ }
+ if (x != 0) {
+ result++;
+ fprintf (stderr, "Error in --\n");
+ }
+
+ // bit-and test part 1
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ logics[j] = 1;
+ }
+ bit_and = 1;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ bit_and &= logics[i];
+ }
+ }
+ if (!bit_and) {
+ result++;
+ fprintf (stderr, "Error in BIT AND part 1\n");
+ }
+
+ // bit-and test part 2
+ bit_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ bit_and &= logics[i];
+ }
+ }
+ if (bit_and) {
+ result++;
+ fprintf (stderr, "Error in BIT AND part 2\n");
+ }
+
+ // bit-or test part 1
+ for (j = 0; j < LOOPCOUNT; j++) {
+ logics[j] = 0;
+ }
+ bit_or = 0;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ bit_or |= logics[i];
+ }
+ }
+ if (bit_or) {
+ result++;
+ fprintf (stderr, "Error in BIT OR part 1\n");
+ }
+
+ // bit-or test part 2
+ bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+ #pragma omp parallel
+ {
+
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ bit_or |= logics[i];
+ }
+ }
+ if (!bit_or) {
+ result++;
+ fprintf (stderr, "Error in BIT OR part 2\n");
+ }
+
+ // bit-xor test part 1
+ for (j = 0; j < LOOPCOUNT; j++) {
+ logics[j] = 0;
+ }
+ exclusiv_bit_or = 0;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ exclusiv_bit_or ^= logics[i];
+ }
+ }
+ if (exclusiv_bit_or) {
+ result++;
+ fprintf (stderr, "Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ // bit-xor test part 2
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ #pragma omp atomic
+ exclusiv_bit_or ^= logics[i];
+ }
+
+ }
+ if (!exclusiv_bit_or) {
+ result++;
+ fprintf (stderr, "Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ // left shift test
+ x = 1;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < 10; ++i) {
+ #pragma omp atomic
+ x <<= 1;
+ }
+
+ }
+ if ( x != 1024) {
+ result++;
+ fprintf (stderr, "Error in <<\n");
+ x = 1024;
+ }
+
+ // right shift test
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for
+ for (i = 0; i < 10; ++i) {
+ #pragma omp atomic
+ x >>= 1;
+ }
+ }
+ if (x != 1) {
+ result++;
+ fprintf (stderr, "Error in >>\n");
+ }
+
+ return (result == 0);
+} // test_omp_atomic()
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_atomic()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/barrier/omp_barrier.c b/final/runtime/test/barrier/omp_barrier.c
new file mode 100644
index 0000000..a3fb060
--- /dev/null
+++ b/final/runtime/test/barrier/omp_barrier.c
@@ -0,0 +1,44 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_barrier()
+{
+ int result1;
+ int result2;
+ result1 = 0;
+ result2 = 0;
+
+ #pragma omp parallel
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ if (rank ==1) {
+ my_sleep(((double)SLEEPTIME)/REPETITIONS); // give 1 sec to whole test
+ result2 = 3;
+ }
+ #pragma omp barrier
+ if (rank == 2) {
+ result1 = result2;
+ }
+ }
+ return (result1 == 3);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+#ifdef _OPENMP
+ omp_set_dynamic(0); // prevent runtime to change number of threads
+ omp_set_num_threads(4); // the test expects at least 3 threads
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_barrier()) {
+ num_failed++;
+ }
+ }
+#endif
+ return num_failed;
+}
diff --git a/final/runtime/test/critical/omp_critical.c b/final/runtime/test/critical/omp_critical.c
new file mode 100644
index 0000000..e07dbcb
--- /dev/null
+++ b/final/runtime/test/critical/omp_critical.c
@@ -0,0 +1,37 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_critical()
+{
+ int sum;
+ int known_sum;
+
+ sum=0;
+ #pragma omp parallel
+ {
+ int mysum=0;
+ int i;
+ #pragma omp for
+ for (i = 0; i < 1000; i++)
+ mysum = mysum + i;
+
+ #pragma omp critical
+ sum = mysum +sum;
+ }
+ known_sum = 999 * 1000 / 2;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_critical()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/env/kmp_set_dispatch_buf.c b/final/runtime/test/env/kmp_set_dispatch_buf.c
new file mode 100644
index 0000000..49eb7b5
--- /dev/null
+++ b/final/runtime/test/env/kmp_set_dispatch_buf.c
@@ -0,0 +1,76 @@
+// RUN: %libomp-compile && env KMP_DISP_NUM_BUFFERS=0 %libomp-run
+// RUN: env KMP_DISP_NUM_BUFFERS=1 %libomp-run && env KMP_DISP_NUM_BUFFERS=3 %libomp-run
+// RUN: env KMP_DISP_NUM_BUFFERS=4 %libomp-run && env KMP_DISP_NUM_BUFFERS=7 %libomp-run
+// RUN: %libomp-compile -DMY_SCHEDULE=guided && env KMP_DISP_NUM_BUFFERS=1 %libomp-run
+// RUN: env KMP_DISP_NUM_BUFFERS=3 %libomp-run && env KMP_DISP_NUM_BUFFERS=4 %libomp-run
+// RUN: env KMP_DISP_NUM_BUFFERS=7 %libomp-run
+#include <stdio.h>
+#include <omp.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "omp_testsuite.h"
+
+#define INCR 7
+#define MY_MAX 200
+#define MY_MIN -200
+#define NUM_LOOPS 100
+#ifndef MY_SCHEDULE
+# define MY_SCHEDULE dynamic
+#endif
+
+int a, b, a_known_value, b_known_value;
+
+int test_kmp_set_disp_num_buffers()
+{
+ int success = 1;
+ a = 0;
+ b = 0;
+ // run many small dynamic loops to stress the dispatch buffer system
+ #pragma omp parallel
+ {
+ int i,j;
+ for (j = 0; j < NUM_LOOPS; j++) {
+ #pragma omp for schedule(MY_SCHEDULE) nowait
+ for (i = MY_MIN; i < MY_MAX; i+=INCR) {
+ #pragma omp atomic
+ a++;
+ }
+ #pragma omp for schedule(MY_SCHEDULE) nowait
+ for (i = MY_MAX; i >= MY_MIN; i-=INCR) {
+ #pragma omp atomic
+ b++;
+ }
+ }
+ }
+ // detect failure
+ if (a != a_known_value || b != b_known_value) {
+ success = 0;
+ printf("a = %d (should be %d), b = %d (should be %d)\n", a, a_known_value,
+ b, b_known_value);
+ }
+ return success;
+}
+
+int main(int argc, char** argv)
+{
+ int i,j;
+ int num_failed=0;
+
+ // figure out the known values to compare with calculated result
+ a_known_value = 0;
+ b_known_value = 0;
+
+ for (j = 0; j < NUM_LOOPS; j++) {
+ for (i = MY_MIN; i < MY_MAX; i+=INCR)
+ a_known_value++;
+ for (i = MY_MAX; i >= MY_MIN; i-=INCR)
+ b_known_value++;
+ }
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_kmp_set_disp_num_buffers()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/env/omp_wait_policy.c b/final/runtime/test/env/omp_wait_policy.c
new file mode 100644
index 0000000..b260ce4
--- /dev/null
+++ b/final/runtime/test/env/omp_wait_policy.c
@@ -0,0 +1,40 @@
+// RUN: %libomp-compile && env OMP_WAIT_POLICY=active %libomp-run active
+// RUN: %libomp-compile && env OMP_WAIT_POLICY=passive %libomp-run passive
+//
+// OMP_WAIT_POLICY=active should imply blocktime == INT_MAX
+// i.e., threads spin-wait forever
+// OMP_WAIT_POLICY=passive should imply blocktime == 0
+// i.e., threads immediately sleep
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+#include "omp_testsuite.h"
+
+void usage() {
+ fprintf(stderr, "usage: omp_wait_policy active|passive\n");
+}
+
+int main(int argc, char** argv)
+{
+ int blocktime, retval=1;
+ const char* env_var_value;
+
+ if (argc != 2) {
+ usage();
+ return 1;
+ }
+
+ blocktime = kmp_get_blocktime();
+
+ env_var_value = argv[1];
+ if (!strcmp(env_var_value, "active")) {
+ retval = (blocktime != INT_MAX);
+ } else if (!strcmp(env_var_value, "passive")) {
+ retval = (blocktime != 0);
+ } else {
+ usage();
+ retval = 1;
+ }
+
+ return retval;
+}
diff --git a/final/runtime/test/flush/omp_flush.c b/final/runtime/test/flush/omp_flush.c
new file mode 100644
index 0000000..3fd3cdf
--- /dev/null
+++ b/final/runtime/test/flush/omp_flush.c
@@ -0,0 +1,45 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_flush()
+{
+ int result1;
+ int result2;
+ int dummy;
+
+ result1 = 0;
+ result2 = 0;
+
+ #pragma omp parallel
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ #pragma omp barrier
+ if (rank == 1) {
+ result2 = 3;
+ #pragma omp flush (result2)
+ dummy = result2;
+ }
+ if (rank == 0) {
+ my_sleep(SLEEPTIME);
+ #pragma omp flush (result2)
+ result1 = result2;
+ }
+ } /* end of parallel */
+ return ((result1 == result2) && (result2 == dummy) && (result2 == 3));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for (i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_flush()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/lit.cfg b/final/runtime/test/lit.cfg
new file mode 100644
index 0000000..7f18da4
--- /dev/null
+++ b/final/runtime/test/lit.cfg
@@ -0,0 +1,105 @@
+# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
+# Configuration file for the 'lit' test runner.
+
+import os
+import re
+import subprocess
+import lit.formats
+
+# Tell pylint that we know config and lit_config exist somewhere.
+if 'PYLINT_IMPORT' in os.environ:
+ config = object()
+ lit_config = object()
+
+def append_dynamic_library_path(path):
+ if config.operating_system == 'Windows':
+ name = 'PATH'
+ sep = ';'
+ elif config.operating_system == 'Darwin':
+ name = 'DYLD_LIBRARY_PATH'
+ sep = ':'
+ else:
+ name = 'LD_LIBRARY_PATH'
+ sep = ':'
+ if name in config.environment:
+ config.environment[name] = path + sep + config.environment[name]
+ else:
+ config.environment[name] = path
+
+# name: The name of this test suite.
+config.name = 'libomp'
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = ['.c']
+
+# test_source_root: The root path where tests are located.
+config.test_source_root = os.path.dirname(__file__)
+
+# test_exec_root: The root object directory where output is placed
+config.test_exec_root = config.libomp_obj_root
+
+# test format
+config.test_format = lit.formats.ShTest()
+
+# compiler flags
+config.test_cflags = config.test_openmp_flag + \
+ " -I " + config.test_source_root + \
+ " -I " + config.omp_header_directory + \
+ " -L " + config.library_dir + \
+ " " + config.test_extra_cflags
+
+# extra libraries
+libs = ""
+if config.has_libm:
+ libs += " -lm"
+
+# Allow XFAIL to work
+config.target_triple = [ ]
+if re.search('gcc', config.test_compiler) is not None:
+ config.available_features.add('gcc')
+
+# Setup environment to find dynamic library at runtime
+append_dynamic_library_path(config.library_dir)
+if config.using_hwloc:
+ append_dynamic_library_path(config.hwloc_library_dir)
+
+# Rpath modifications for Darwin
+if config.operating_system == 'Darwin':
+ config.test_cflags += " -Wl,-rpath," + config.library_dir
+ if config.using_hwloc:
+ config.test_cflags += " -Wl,-rpath," + config.hwloc_library_dir
+
+# Find the SDK on Darwin
+if config.operating_system == 'Darwin':
+ cmd = subprocess.Popen(['xcrun', '--show-sdk-path'],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = cmd.communicate()
+ out = out.strip()
+ res = cmd.wait()
+ if res == 0 and out:
+ config.test_cflags += " -isysroot " + out
+
+# Disable OMPT tests if FileCheck was not found
+if config.has_ompt and config.test_filecheck == "":
+ lit_config.note("Not testing OMPT because FileCheck was not found")
+ config.has_ompt = False
+
+if config.has_ompt:
+ config.available_features.add("ompt")
+ # for callback.h
+ config.test_cflags += " -I " + config.test_source_root + "/ompt"
+
+# substitutions
+if config.has_ompt:
+ config.substitutions.append(("FileCheck", config.test_filecheck))
+ config.substitutions.append(("%sort-threads", "sort --numeric-sort --stable"))
+
+config.substitutions.append(("%libomp-compile-and-run", \
+ "%libomp-compile && %libomp-run"))
+config.substitutions.append(("%libomp-compile", \
+ "%clang %cflags %s -o %t" + libs))
+config.substitutions.append(("%libomp-run", "%t"))
+config.substitutions.append(("%clang", config.test_compiler))
+config.substitutions.append(("%openmp_flag", config.test_openmp_flag))
+config.substitutions.append(("%cflags", config.test_cflags))
+
diff --git a/final/runtime/test/lit.site.cfg.in b/final/runtime/test/lit.site.cfg.in
new file mode 100644
index 0000000..448132e
--- /dev/null
+++ b/final/runtime/test/lit.site.cfg.in
@@ -0,0 +1,18 @@
+@AUTO_GEN_COMMENT@
+
+config.test_compiler = "@LIBOMP_TEST_COMPILER@"
+config.test_filecheck = "@FILECHECK_EXECUTABLE@"
+config.test_openmp_flag = "@LIBOMP_TEST_OPENMP_FLAG@"
+config.test_extra_cflags = "@LIBOMP_TEST_CFLAGS@"
+config.libomp_obj_root = "@CMAKE_CURRENT_BINARY_DIR@"
+config.library_dir = "@LIBOMP_LIBRARY_DIR@"
+config.omp_header_directory = "@LIBOMP_BINARY_DIR@/src"
+config.operating_system = "@CMAKE_SYSTEM_NAME@"
+config.hwloc_library_dir = "@LIBOMP_HWLOC_LIBRARY_DIR@"
+config.using_hwloc = @LIBOMP_USE_HWLOC@
+config.has_ompt = @LIBOMP_OMPT_SUPPORT@ and @LIBOMP_OMPT_BLAME@ and @LIBOMP_OMPT_TRACE@
+config.has_libm = @LIBOMP_HAVE_LIBM@
+
+# Let the main config do the real work.
+lit_config.load_config(config, "@LIBOMP_BASE_DIR@/test/lit.cfg")
+
diff --git a/final/runtime/test/lock/omp_lock.c b/final/runtime/test/lock/omp_lock.c
new file mode 100644
index 0000000..1301f27
--- /dev/null
+++ b/final/runtime/test/lock/omp_lock.c
@@ -0,0 +1,47 @@
+// RUN: %libomp-compile-and-run
+// RUN: env KMP_LOCK_KIND=tas KMP_SPIN_BACKOFF_PARAMS=2048,200 %libomp-run
+// RUN: env KMP_LOCK_KIND=futex %libomp-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_lock_t lck;
+
+int test_omp_lock()
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_lock(&lck);
+ #pragma omp parallel shared(lck)
+ {
+ #pragma omp for
+ for(i = 0; i < LOOPCOUNT; i++) {
+ omp_set_lock(&lck);
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ omp_unset_lock(&lck);
+ }
+ }
+ omp_destroy_lock(&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_lock()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/lock/omp_nest_lock.c b/final/runtime/test/lock/omp_nest_lock.c
new file mode 100644
index 0000000..33d7c6a
--- /dev/null
+++ b/final/runtime/test/lock/omp_nest_lock.c
@@ -0,0 +1,45 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_nest_lock_t lck;
+
+int test_omp_nest_lock()
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_nest_lock(&lck);
+ #pragma omp parallel shared(lck)
+ {
+ #pragma omp for
+ for(i = 0; i < LOOPCOUNT; i++) {
+ omp_set_nest_lock(&lck);
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ omp_unset_nest_lock(&lck);
+ }
+ }
+ omp_destroy_nest_lock(&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_nest_lock()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/lock/omp_test_lock.c b/final/runtime/test/lock/omp_test_lock.c
new file mode 100644
index 0000000..c512055
--- /dev/null
+++ b/final/runtime/test/lock/omp_test_lock.c
@@ -0,0 +1,47 @@
+// RUN: %libomp-compile-and-run
+// RUN: env KMP_LOCK_KIND=tas %libomp-run
+// RUN: env KMP_LOCK_KIND=futex %libomp-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_lock_t lck;
+
+int test_omp_test_lock()
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_lock (&lck);
+ #pragma omp parallel shared(lck)
+ {
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++) {
+ while (!omp_test_lock (&lck))
+ {};
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ omp_unset_lock (&lck);
+ }
+ }
+ omp_destroy_lock(&lck);
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_test_lock()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/lock/omp_test_nest_lock.c b/final/runtime/test/lock/omp_test_nest_lock.c
new file mode 100644
index 0000000..2fa6fd2
--- /dev/null
+++ b/final/runtime/test/lock/omp_test_nest_lock.c
@@ -0,0 +1,47 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+static omp_nest_lock_t lck;
+
+int test_omp_test_nest_lock()
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_nest_lock (&lck);
+ #pragma omp parallel shared(lck)
+ {
+ #pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ /*omp_set_lock(&lck);*/
+ while(!omp_test_nest_lock (&lck))
+ {};
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ omp_unset_nest_lock (&lck);
+ }
+ }
+ omp_destroy_nest_lock (&lck);
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_test_nest_lock()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/master/omp_master.c b/final/runtime/test/master/omp_master.c
new file mode 100644
index 0000000..1cc7f9e
--- /dev/null
+++ b/final/runtime/test/master/omp_master.c
@@ -0,0 +1,38 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_master()
+{
+ int nthreads;
+ int executing_thread;
+
+ nthreads = 0;
+ executing_thread = -1;
+
+ #pragma omp parallel
+ {
+ #pragma omp master
+ {
+ #pragma omp critical
+ {
+ nthreads++;
+ }
+ executing_thread = omp_get_thread_num();
+ } /* end of master*/
+ } /* end of parallel*/
+ return ((nthreads == 1) && (executing_thread == 0));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_master()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/master/omp_master_3.c b/final/runtime/test/master/omp_master_3.c
new file mode 100644
index 0000000..2e9fdf8
--- /dev/null
+++ b/final/runtime/test/master/omp_master_3.c
@@ -0,0 +1,44 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_master_3()
+{
+ int nthreads;
+ int executing_thread;
+ int tid_result = 0; /* counts up the number of wrong thread no. for
+ the master thread. (Must be 0) */
+ nthreads = 0;
+ executing_thread = -1;
+
+ #pragma omp parallel
+ {
+ #pragma omp master
+ {
+ int tid = omp_get_thread_num();
+ if (tid != 0) {
+ #pragma omp critical
+ { tid_result++; }
+ }
+ #pragma omp critical
+ {
+ nthreads++;
+ }
+ executing_thread = omp_get_thread_num ();
+ } /* end of master*/
+ } /* end of parallel*/
+ return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_master_3()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/misc_bugs/many-microtask-args.c b/final/runtime/test/misc_bugs/many-microtask-args.c
new file mode 100644
index 0000000..a354872
--- /dev/null
+++ b/final/runtime/test/misc_bugs/many-microtask-args.c
@@ -0,0 +1,38 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+
+int main()
+{
+
+ int i1 = 0;
+ int i2 = 1;
+ int i3 = 2;
+ int i4 = 3;
+ int i5 = 4;
+ int i6 = 6;
+ int i7 = 7;
+ int i8 = 8;
+ int i9 = 9;
+ int i10 = 10;
+ int i11 = 11;
+ int i12 = 12;
+ int i13 = 13;
+ int i14 = 14;
+ int i15 = 15;
+ int i16 = 16;
+
+ int r = 0;
+ #pragma omp parallel for firstprivate(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16) reduction(+:r)
+ for (int i = 0; i < i16; i++) {
+ r += i + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15 + i16;
+ }
+
+ int rf = 2216;
+ if (r != rf) {
+ fprintf(stderr, "r should be %d but instead equals %d\n", rf, r);
+ return 1;
+ }
+
+ return 0;
+}
+
diff --git a/final/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c b/final/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c
new file mode 100644
index 0000000..4d70d47
--- /dev/null
+++ b/final/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c
@@ -0,0 +1,81 @@
+// RUN: %libomp-compile -lpthread && %libomp-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+#define NUM_THREADS 10
+
+/*
+ After hot teams were enabled by default, the library started using levels
+ kept in the team structure. The levels are broken in case foreign thread
+ exits and puts its team into the pool which is then re-used by another foreign
+ thread. The broken behavior observed is when printing the levels for each
+ new team, one gets 1, 2, 1, 2, 1, 2, etc. This makes the library believe that
+ every other team is nested which is incorrect. What is wanted is for the
+ levels to be 1, 1, 1, etc.
+*/
+
+int a = 0;
+int level;
+
+typedef struct thread_arg_t {
+ int iterations;
+} thread_arg_t;
+
+void* thread_function(void* arg) {
+ int i;
+ thread_arg_t* targ = (thread_arg_t*)arg;
+ int iterations = targ->iterations;
+ #pragma omp parallel private(i)
+ {
+ // level should always be 1
+ #pragma omp single
+ level = omp_get_level();
+
+ #pragma omp for
+ for(i = 0; i < iterations; i++) {
+ #pragma omp atomic
+ a++;
+ }
+ }
+}
+
+int test_omp_team_reuse()
+{
+ int i;
+ int success = 1;
+ pthread_t thread[NUM_THREADS];
+ thread_arg_t thread_arg[NUM_THREADS];
+ // launch NUM_THREADS threads, one at a time to perform thread_function()
+ for(i = 0; i < NUM_THREADS; i++) {
+ thread_arg[i].iterations = i + 1;
+ pthread_create(thread+i, NULL, thread_function, thread_arg+i);
+ pthread_join(*(thread+i), NULL);
+ // level read in thread_function()'s parallel region should be 1
+ if(level != 1) {
+ fprintf(stderr, "error: for pthread %d level should be 1 but "
+ "instead equals %d\n", i, level);
+ success = 0;
+ }
+ }
+ // make sure the for loop works
+ int known_sum = (NUM_THREADS * (NUM_THREADS+1)) / 2;
+ if(a != known_sum) {
+ fprintf(stderr, "a should be %d but instead equals %d\n", known_sum, a);
+ success = 0;
+ }
+ return success;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ a = 0;
+ if(!test_omp_team_reuse()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/omp_my_sleep.h b/final/runtime/test/omp_my_sleep.h
new file mode 100644
index 0000000..138d930
--- /dev/null
+++ b/final/runtime/test/omp_my_sleep.h
@@ -0,0 +1,33 @@
+#ifndef MY_SLEEP_H
+#define MY_SLEEP_H
+
+/*! Utility function to have a sleep function with better resolution and
+ * which only stops one thread. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+
+#if defined(_WIN32)
+# include <windows.h>
+// Windows version of my_sleep() function
+static void my_sleep(double sleeptime) {
+ DWORD ms = (DWORD) (sleeptime * 1000.0);
+ Sleep(ms);
+}
+
+
+#else // _WIN32
+
+// Unices version of my_sleep() function
+static void my_sleep(double sleeptime) {
+ struct timespec ts;
+ ts.tv_sec = (time_t)sleeptime;
+ ts.tv_nsec = (long)((sleeptime - (double)ts.tv_sec) * 1E9);
+ nanosleep(&ts, NULL);
+}
+
+#endif // _WIN32
+
+#endif // MY_SLEEP_H
diff --git a/final/runtime/test/omp_testsuite.h b/final/runtime/test/omp_testsuite.h
new file mode 100644
index 0000000..eef5470
--- /dev/null
+++ b/final/runtime/test/omp_testsuite.h
@@ -0,0 +1,79 @@
+/* Global headerfile of the OpenMP Testsuite */
+
+#ifndef OMP_TESTSUITE_H
+#define OMP_TESTSUITE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <omp.h>
+
+/* General */
+/**********************************************************/
+#define LOOPCOUNT 1000 /* Number of iterations to slit amongst threads */
+#define REPETITIONS 10 /* Number of times to run each test */
+
+/* following times are in seconds */
+#define SLEEPTIME 1
+
+/* Definitions for tasks */
+/**********************************************************/
+#define NUM_TASKS 25
+#define MAX_TASKS_PER_THREAD 5
+
+#ifdef _WIN32
+// Windows versions of pthread_create() and pthread_join()
+# include <windows.h>
+typedef HANDLE pthread_t;
+
+// encapsulates the information about a pthread-callable function
+struct thread_func_info_t {
+ void* (*start_routine)(void*);
+ void* arg;
+};
+
+// call the void* start_routine(void*);
+static DWORD __thread_func_wrapper(LPVOID lpParameter) {
+ struct thread_func_info_t* function_information;
+ function_information = (struct thread_func_info_t*)lpParameter;
+ function_information->start_routine(function_information->arg);
+ free(function_information);
+ return 0;
+}
+
+// attr is ignored
+static int pthread_create(pthread_t *thread, void *attr,
+ void *(*start_routine) (void *), void *arg) {
+ pthread_t pthread;
+ struct thread_func_info_t* info;
+ info = (struct thread_func_info_t*)malloc(sizeof(struct thread_func_info_t));
+ info->start_routine = start_routine;
+ info->arg = arg;
+ pthread = CreateThread(NULL, 0, __thread_func_wrapper, info, 0, NULL);
+ if (pthread == NULL) {
+ fprintf(stderr, "CreateThread() failed: Error #%u.\n", GetLastError());
+ exit(1);
+ }
+ *thread = pthread;
+ return 0;
+}
+// retval is ignored for now
+static int pthread_join(pthread_t thread, void **retval) {
+ int rc;
+ rc = WaitForSingleObject(thread, INFINITE);
+ if (rc == WAIT_FAILED) {
+ fprintf(stderr, "WaitForSingleObject() failed: Error #%u.\n",
+ GetLastError());
+ exit(1);
+ }
+ rc = CloseHandle(thread);
+ if (rc == 0) {
+ fprintf(stderr, "CloseHandle() failed: Error #%u.\n", GetLastError());
+ exit(1);
+ }
+ return 0;
+}
+#else
+# include <pthread.h>
+#endif
+
+#endif
diff --git a/final/runtime/test/ompt/callback.h b/final/runtime/test/ompt/callback.h
new file mode 100644
index 0000000..0a7eb78
--- /dev/null
+++ b/final/runtime/test/ompt/callback.h
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include <inttypes.h>
+#include <ompt.h>
+
+static ompt_get_task_id_t ompt_get_task_id;
+static ompt_get_thread_id_t ompt_get_thread_id;
+static ompt_get_parallel_id_t ompt_get_parallel_id;
+
+static void print_ids(int level)
+{
+ printf("%" PRIu64 ": level %d: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), level, ompt_get_parallel_id(level), ompt_get_task_id(level));
+}
+
+static void
+on_ompt_event_barrier_begin(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id)
+{
+ printf("%" PRIu64 ": ompt_event_barrier_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id);
+}
+
+static void
+on_ompt_event_barrier_end(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id)
+{
+ printf("%" PRIu64 ": ompt_event_barrier_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id);
+}
+
+static void
+on_ompt_event_implicit_task_begin(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id)
+{
+ printf("%" PRIu64 ": ompt_event_implicit_task_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id);
+}
+
+static void
+on_ompt_event_implicit_task_end(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id)
+{
+ printf("%" PRIu64 ": ompt_event_implicit_task_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id);
+}
+
+static void
+on_ompt_event_loop_begin(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t parent_task_id,
+ void *workshare_function)
+{
+ printf("%" PRIu64 ": ompt_event_loop_begin: parallel_id=%" PRIu64 ", parent_task_id=%" PRIu64 ", workshare_function=%p\n", ompt_get_thread_id(), parallel_id, parent_task_id, workshare_function);
+}
+
+static void
+on_ompt_event_loop_end(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id)
+{
+ printf("%" PRIu64 ": ompt_event_loop_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id);
+}
+
+static void
+on_ompt_event_parallel_begin(
+ ompt_task_id_t parent_task_id,
+ ompt_frame_t *parent_task_frame,
+ ompt_parallel_id_t parallel_id,
+ uint32_t requested_team_size,
+ void *parallel_function,
+ ompt_invoker_t invoker)
+{
+ printf("%" PRIu64 ": ompt_event_parallel_begin: parent_task_id=%" PRIu64 ", parent_task_frame=%p, parallel_id=%" PRIu64 ", requested_team_size=%" PRIu32 ", parallel_function=%p, invoker=%d\n", ompt_get_thread_id(), parent_task_id, parent_task_frame, parallel_id, requested_team_size, parallel_function, invoker);
+}
+
+static void
+on_ompt_event_parallel_end(
+ ompt_parallel_id_t parallel_id,
+ ompt_task_id_t task_id,
+ ompt_invoker_t invoker)
+{
+ printf("%" PRIu64 ": ompt_event_parallel_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 ", invoker=%d\n", ompt_get_thread_id(), parallel_id, task_id, invoker);
+}
+
+
+void ompt_initialize(
+ ompt_function_lookup_t lookup,
+ const char *runtime_version,
+ unsigned int ompt_version)
+{
+ ompt_set_callback_t ompt_set_callback = (ompt_set_callback_t) lookup("ompt_set_callback");
+ ompt_get_task_id = (ompt_get_task_id_t) lookup("ompt_get_task_id");
+ ompt_get_thread_id = (ompt_get_thread_id_t) lookup("ompt_get_thread_id");
+ ompt_get_parallel_id = (ompt_get_parallel_id_t) lookup("ompt_get_parallel_id");
+
+ ompt_set_callback(ompt_event_barrier_begin, (ompt_callback_t) &on_ompt_event_barrier_begin);
+ ompt_set_callback(ompt_event_barrier_end, (ompt_callback_t) &on_ompt_event_barrier_end);
+ ompt_set_callback(ompt_event_implicit_task_begin, (ompt_callback_t) &on_ompt_event_implicit_task_begin);
+ ompt_set_callback(ompt_event_implicit_task_end, (ompt_callback_t) &on_ompt_event_implicit_task_end);
+ ompt_set_callback(ompt_event_loop_begin, (ompt_callback_t) &on_ompt_event_loop_begin);
+ ompt_set_callback(ompt_event_loop_end, (ompt_callback_t) &on_ompt_event_loop_end);
+ ompt_set_callback(ompt_event_parallel_begin, (ompt_callback_t) &on_ompt_event_parallel_begin);
+ ompt_set_callback(ompt_event_parallel_end, (ompt_callback_t) &on_ompt_event_parallel_end);
+}
+
+ompt_initialize_t ompt_tool()
+{
+ return &ompt_initialize;
+}
diff --git a/final/runtime/test/ompt/parallel/nested.c b/final/runtime/test/ompt/parallel/nested.c
new file mode 100644
index 0000000..1c0601a
--- /dev/null
+++ b/final/runtime/test/ompt/parallel/nested.c
@@ -0,0 +1,239 @@
+// RUN: %libomp-compile-and-run | FileCheck %s
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck --check-prefix=THREADS %s
+// REQUIRES: ompt
+#include "callback.h"
+#include <omp.h>
+
+int main()
+{
+ omp_set_nested(1);
+
+ #pragma omp parallel num_threads(4)
+ {
+ print_ids(0);
+ print_ids(1);
+ #pragma omp parallel num_threads(4)
+ {
+ print_ids(0);
+ print_ids(1);
+ print_ids(2);
+ }
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // Note that we cannot ensure that the worker threads have already called barrier_end and implicit_task_end before parallel_end!
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+
+
+ // THREADS: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // nested parallel masters
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION:0x[0-f]+]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // nested parallel worker threads
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // can't reliably tell which parallel region is the parent...
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id={{[0-9]+}}, task_id={{[0-9]+}}
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/parallel/nested_serialized.c b/final/runtime/test/ompt/parallel/nested_serialized.c
new file mode 100644
index 0000000..fecbddc
--- /dev/null
+++ b/final/runtime/test/ompt/parallel/nested_serialized.c
@@ -0,0 +1,105 @@
+// RUN: %libomp-compile-and-run | FileCheck %s
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck --check-prefix=THREADS %s
+// REQUIRES: ompt
+#include "callback.h"
+#include <omp.h>
+
+int main()
+{
+ omp_set_nested(0);
+
+ #pragma omp parallel num_threads(4)
+ {
+ print_ids(0);
+ print_ids(1);
+ #pragma omp parallel num_threads(4)
+ {
+ print_ids(0);
+ print_ids(1);
+ print_ids(2);
+ }
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // Note that we cannot ensure that the worker threads have already called barrier_end and implicit_task_end before parallel_end!
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+
+
+ // THREADS: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION:0x[0-f]+]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[NESTED_PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=[[NESTED_PARALLEL_FUNCTION]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 2: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[NESTED_IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end: parallel_id=[[NESTED_PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/parallel/normal.c b/final/runtime/test/ompt/parallel/normal.c
new file mode 100644
index 0000000..872843d
--- /dev/null
+++ b/final/runtime/test/ompt/parallel/normal.c
@@ -0,0 +1,68 @@
+// RUN: %libomp-compile-and-run | FileCheck %s
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck --check-prefix=THREADS %s
+// REQUIRES: ompt
+#include "callback.h"
+
+int main()
+{
+ #pragma omp parallel num_threads(4)
+ {
+ print_ids(0);
+ print_ids(1);
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // Note that we cannot ensure that the worker threads have already called barrier_end and implicit_task_end before parallel_end!
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+
+
+ // THREADS: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker={{.*}}
+
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/parallel/serialized.c b/final/runtime/test/ompt/parallel/serialized.c
new file mode 100644
index 0000000..a5a3f03
--- /dev/null
+++ b/final/runtime/test/ompt/parallel/serialized.c
@@ -0,0 +1,23 @@
+// RUN: %libomp-compile-and-run | FileCheck %s
+// REQUIRES: ompt
+#include "callback.h"
+
+int main()
+{
+ #pragma omp parallel num_threads(1)
+ {
+ print_ids(0);
+ print_ids(1);
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=1, parallel_function=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:.+]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[MASTER_ID]]: level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[MASTER_ID]]: level 1: parallel_id=0, task_id=[[PARENT_TASK_ID]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: parallel_id=[[PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/worksharing/for/auto.c b/final/runtime/test/ompt/worksharing/for/auto.c
new file mode 100644
index 0000000..17d26f5
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/auto.c
@@ -0,0 +1,7 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base.h
+// REQUIRES: ompt
+// GCC doesn't call runtime for auto = static schedule
+// XFAIL: gcc
+
+#define SCHEDULE auto
+#include "base.h"
diff --git a/final/runtime/test/ompt/worksharing/for/auto_serialized.c b/final/runtime/test/ompt/worksharing/for/auto_serialized.c
new file mode 100644
index 0000000..f756166
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/auto_serialized.c
@@ -0,0 +1,7 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base_serialized.h
+// REQUIRES: ompt
+// GCC doesn't call runtime for auto = static schedule
+// XFAIL: gcc
+
+#define SCHEDULE auto
+#include "base_serialized.h"
diff --git a/final/runtime/test/ompt/worksharing/for/base.h b/final/runtime/test/ompt/worksharing/for/base.h
new file mode 100644
index 0000000..0615ed1
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/base.h
@@ -0,0 +1,35 @@
+#include "callback.h"
+#include <omp.h>
+
+int main()
+{
+ unsigned int i;
+
+ #pragma omp parallel for num_threads(4) schedule(SCHEDULE)
+ for (i = 0; i < 4; i++) {
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id={{[0-9]+}}, parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=4, parallel_function=0x{{[0-f]+}}, invoker={{.*}}
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_loop_begin: parallel_id=[[PARALLEL_ID]], parent_task_id=[[IMPLICIT_TASK_ID]], workshare_function=0x{{[0-f]+}}
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_loop_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_begin: parallel_id=[[PARALLEL_ID]], parent_task_id=[[IMPLICIT_TASK_ID]], workshare_function=0x{{[0-f]+}}
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_begin: parallel_id=[[PARALLEL_ID]], parent_task_id=[[IMPLICIT_TASK_ID]], workshare_function=0x{{[0-f]+}}
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_begin: parallel_id=[[PARALLEL_ID]], parent_task_id=[[IMPLICIT_TASK_ID]], workshare_function=0x{{[0-f]+}}
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_loop_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/worksharing/for/base_serialized.h b/final/runtime/test/ompt/worksharing/for/base_serialized.h
new file mode 100644
index 0000000..1c059f0
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/base_serialized.h
@@ -0,0 +1,20 @@
+#include "callback.h"
+#include <omp.h>
+
+int main()
+{
+ unsigned int i;
+
+ #pragma omp parallel for num_threads(1) schedule(SCHEDULE)
+ for (i = 0; i < 1; i++) {
+ }
+
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame=0x{{[0-f]+}}, parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=1, parallel_function=0x{{[0-f]+}}, invoker={{.+}}
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_loop_begin: parallel_id=[[PARALLEL_ID]], parent_task_id=[[IMPLICIT_TASK_ID]], workshare_function=0x{{[0-f]+}}
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_loop_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
+
+ return 0;
+}
diff --git a/final/runtime/test/ompt/worksharing/for/dynamic.c b/final/runtime/test/ompt/worksharing/for/dynamic.c
new file mode 100644
index 0000000..ca5ae10
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/dynamic.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base.h
+// REQUIRES: ompt
+
+#define SCHEDULE dynamic
+#include "base.h"
diff --git a/final/runtime/test/ompt/worksharing/for/dynamic_serialized.c b/final/runtime/test/ompt/worksharing/for/dynamic_serialized.c
new file mode 100644
index 0000000..0f80929
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/dynamic_serialized.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base_serialized.h
+// REQUIRES: ompt
+
+#define SCHEDULE dynamic
+#include "base_serialized.h"
diff --git a/final/runtime/test/ompt/worksharing/for/guided.c b/final/runtime/test/ompt/worksharing/for/guided.c
new file mode 100644
index 0000000..01bff4e
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/guided.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base.h
+// REQUIRES: ompt
+
+#define SCHEDULE guided
+#include "base.h"
diff --git a/final/runtime/test/ompt/worksharing/for/guided_serialized.c b/final/runtime/test/ompt/worksharing/for/guided_serialized.c
new file mode 100644
index 0000000..4b5096d
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/guided_serialized.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base_serialized.h
+// REQUIRES: ompt
+
+#define SCHEDULE guided
+#include "base_serialized.h"
diff --git a/final/runtime/test/ompt/worksharing/for/runtime.c b/final/runtime/test/ompt/worksharing/for/runtime.c
new file mode 100644
index 0000000..bcf160f
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/runtime.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base.h
+// REQUIRES: ompt
+
+#define SCHEDULE runtime
+#include "base.h"
diff --git a/final/runtime/test/ompt/worksharing/for/runtime_serialized.c b/final/runtime/test/ompt/worksharing/for/runtime_serialized.c
new file mode 100644
index 0000000..231d67d
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/runtime_serialized.c
@@ -0,0 +1,5 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base_serialized.h
+// REQUIRES: ompt
+
+#define SCHEDULE runtime
+#include "base_serialized.h"
diff --git a/final/runtime/test/ompt/worksharing/for/static.c b/final/runtime/test/ompt/worksharing/for/static.c
new file mode 100644
index 0000000..4d99059
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/static.c
@@ -0,0 +1,7 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base.h
+// REQUIRES: ompt
+// GCC doesn't call runtime for static schedule
+// XFAIL: gcc
+
+#define SCHEDULE static
+#include "base.h"
diff --git a/final/runtime/test/ompt/worksharing/for/static_serialized.c b/final/runtime/test/ompt/worksharing/for/static_serialized.c
new file mode 100644
index 0000000..4860d49
--- /dev/null
+++ b/final/runtime/test/ompt/worksharing/for/static_serialized.c
@@ -0,0 +1,7 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %S/base_serialized.h
+// REQUIRES: ompt
+// GCC doesn't call runtime for static schedule
+// XFAIL: gcc
+
+#define SCHEDULE static
+#include "base_serialized.h"
diff --git a/final/runtime/test/parallel/omp_nested.c b/final/runtime/test/parallel/omp_nested.c
new file mode 100644
index 0000000..f73e072
--- /dev/null
+++ b/final/runtime/test/parallel/omp_nested.c
@@ -0,0 +1,41 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+/*
+ * Test if the compiler supports nested parallelism
+ * By Chunhua Liao, University of Houston
+ * Oct. 2005
+ */
+int test_omp_nested()
+{
+ int counter = 0;
+#ifdef _OPENMP
+ omp_set_nested(1);
+#endif
+
+ #pragma omp parallel shared(counter)
+ {
+ #pragma omp critical
+ counter++;
+ #pragma omp parallel
+ {
+ #pragma omp critical
+ counter--;
+ }
+ }
+ return (counter != 0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_nested()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_copyin.c b/final/runtime/test/parallel/omp_parallel_copyin.c
new file mode 100644
index 0000000..600f9b7
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_copyin.c
@@ -0,0 +1,47 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+static int sum1 = 789;
+#pragma omp threadprivate(sum1)
+
+int test_omp_parallel_copyin()
+{
+ int sum, num_threads;
+ int known_sum;
+
+ sum = 0;
+ sum1 = 7;
+ num_threads = 0;
+
+ #pragma omp parallel copyin(sum1)
+ {
+ /*printf("sum1=%d\n",sum1);*/
+ int i;
+ #pragma omp for
+ for (i = 1; i < 1000; i++) {
+ sum1 = sum1 + i;
+ } /*end of for*/
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ } /*end of critical*/
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_copyin()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_default.c b/final/runtime/test/parallel/omp_parallel_default.c
new file mode 100644
index 0000000..0a8e09e
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_default.c
@@ -0,0 +1,43 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_default()
+{
+ int i;
+ int sum;
+ int mysum;
+ int known_sum;
+ sum =0;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+
+ #pragma omp parallel default(shared) private(i) private(mysum)
+ {
+ mysum = 0;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ mysum = mysum + i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + mysum;
+ } /* end of critical */
+ } /* end of parallel */
+ if (known_sum != sum) {
+ fprintf(stderr, "KNOWN_SUM = %d; SUM = %d\n", known_sum, sum);
+ }
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_default()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_firstprivate.c b/final/runtime/test/parallel/omp_parallel_firstprivate.c
new file mode 100644
index 0000000..dbee76c
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_firstprivate.c
@@ -0,0 +1,46 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+//static int sum1 = 789;
+
+int test_omp_parallel_firstprivate()
+{
+ int sum, num_threads,sum1;
+ int known_sum;
+
+ sum = 0;
+ sum1=7;
+ num_threads = 0;
+
+ #pragma omp parallel firstprivate(sum1)
+ {
+ /*printf("sum1=%d\n",sum1);*/
+ int i;
+ #pragma omp for
+ for (i = 1; i < 1000; i++) {
+ sum1 = sum1 + i;
+ } /*end of for*/
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ } /*end of critical*/
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_if.c b/final/runtime/test/parallel/omp_parallel_if.c
new file mode 100644
index 0000000..abbf3cd
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_if.c
@@ -0,0 +1,40 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_if()
+{
+ int i;
+ int sum;
+ int known_sum;
+ int mysum;
+ int control=1;
+
+ sum =0;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+ #pragma omp parallel private(i) if(control==0)
+ {
+ mysum = 0;
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ mysum = mysum + i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + mysum;
+ }
+ }
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_if()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_num_threads.c b/final/runtime/test/parallel/omp_parallel_num_threads.c
new file mode 100644
index 0000000..8af1f9d
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_num_threads.c
@@ -0,0 +1,46 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_num_threads()
+{
+ int num_failed;
+ int threads;
+ int nthreads;
+ int max_threads = 0;
+
+ num_failed = 0;
+
+ /* first we check how many threads are available */
+ #pragma omp parallel
+ {
+ #pragma omp master
+ max_threads = omp_get_num_threads ();
+ }
+
+ /* we increase the number of threads from one to maximum:*/
+ for(threads = 1; threads <= max_threads; threads++) {
+ nthreads = 0;
+ #pragma omp parallel reduction(+:num_failed) num_threads(threads)
+ {
+ num_failed = num_failed + !(threads == omp_get_num_threads());
+ #pragma omp atomic
+ nthreads += 1;
+ }
+ num_failed = num_failed + !(nthreads == threads);
+ }
+ return (!num_failed);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_num_threads()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_private.c b/final/runtime/test/parallel/omp_parallel_private.c
new file mode 100644
index 0000000..238e806
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_private.c
@@ -0,0 +1,46 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+//static int sum1 = 789;
+
+int test_omp_parallel_private()
+{
+ int sum, num_threads,sum1;
+ int known_sum;
+
+ sum = 0;
+ num_threads = 0;
+
+ #pragma omp parallel private(sum1)
+ {
+ int i;
+ sum1 = 7;
+ /*printf("sum1=%d\n",sum1);*/
+ #pragma omp for
+ for (i = 1; i < 1000; i++) {
+ sum1 = sum1 + i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ }
+ }
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_reduction.c b/final/runtime/test/parallel/omp_parallel_reduction.c
new file mode 100644
index 0000000..bb00939
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_reduction.c
@@ -0,0 +1,254 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+
+int test_omp_parallel_reduction()
+{
+ int sum;
+ int known_sum;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[LOOPCOUNT];
+ int i;
+ double dpt;
+ int result;
+
+ sum =0;
+ dsum=0;
+ product=1;
+ logic_and=1;
+ logic_or=0;
+ bit_and=1;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result=0;
+ dt = 1./3.;
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+
+ /* Tests for integers */
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:sum)
+ for (i=1;i<=LOOPCOUNT;i++) {
+ sum=sum+i;
+ }
+
+ if(known_sum!=sum) {
+ result++;
+ fprintf(stderr,"Error in sum with integers: Result was %d instead of %d\n",sum,known_sum);
+ }
+
+ diff = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:diff)
+ for (i=1;i<=LOOPCOUNT;++i) {
+ diff=diff-i;
+ }
+
+ if(diff != 0) {
+ result++;
+ fprintf(stderr,"Error in difference with integers: Result was %d instead of 0.\n",diff);
+ }
+
+ /* Tests for doubles */
+ dsum=0;
+ dpt=1;
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:dsum)
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dsum += pow(dt,i);
+ }
+
+ if( fabs(dsum-dknown_sum) > rounding_error ) {
+ result++;
+ fprintf(stderr,"Error in sum with doubles: Result was %f instead of %f (Difference: %E)\n",dsum,dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dpt*=dt;
+ }
+ fprintf(stderr,"\n");
+ ddiff = (1-dpt)/(1-dt);
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:ddiff)
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ ddiff -= pow(dt,i);
+ }
+ if( fabs(ddiff) > rounding_error) {
+ result++;
+ fprintf(stderr,"Error in Difference with doubles: Result was %E instead of 0.0\n",ddiff);
+ }
+
+ /* Tests for product of integers */
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(*:product)
+ for(i=1;i<=MAX_FACTOR;i++) {
+ product *= i;
+ }
+
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product) {
+ result++;
+ fprintf(stderr,"Error in Product with integers: Result was %d instead of %d\n\n",product,known_product);
+ }
+
+ /* Tests for logical and */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(&&:logic_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_and = (logic_and && logics[i]);
+ }
+ if(!logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 1.\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(&&:logic_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_and = logic_and && logics[i];
+ }
+ if(logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 2.\n");
+ }
+
+ /* Tests for logical or */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(||:logic_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_or = logic_or || logics[i];
+ }
+ if(logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 1.\n");
+ }
+ logic_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(||:logic_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_or = logic_or || logics[i];
+ }
+ if(!logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 2.\n");
+ }
+
+ /* Tests for bitwise and */
+ for(i=0;i<LOOPCOUNT;++i) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(&:bit_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ if(!bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 1.\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(&:bit_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ if(bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 2.\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ /* Tests for bitwise or */
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(|:bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ if(bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(|:bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ if(!bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ /* Tests for bitwise xor */
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(^:exclusiv_bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(^:exclusiv_bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(!exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_reduction()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/parallel/omp_parallel_shared.c b/final/runtime/test/parallel/omp_parallel_shared.c
new file mode 100644
index 0000000..3146ca6
--- /dev/null
+++ b/final/runtime/test/parallel/omp_parallel_shared.c
@@ -0,0 +1,46 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_shared()
+{
+ int i;
+ int sum;
+ int known_sum;
+
+ sum = 0;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+
+ #pragma omp parallel private(i) shared(sum)
+ {
+
+ int mysum = 0;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ mysum = mysum + i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + mysum;
+ }
+
+
+ }
+ if (known_sum != sum) {
+ fprintf(stderr, "KNOWN_SUM = %d; SUM = %d\n", known_sum, sum);
+ }
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_shared()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/kmp_taskloop.c b/final/runtime/test/tasking/kmp_taskloop.c
new file mode 100644
index 0000000..3b318bd
--- /dev/null
+++ b/final/runtime/test/tasking/kmp_taskloop.c
@@ -0,0 +1,158 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <omp.h>
+#include "omp_my_sleep.h"
+
+#define N 4
+#define GRAIN 10
+#define STRIDE 3
+
+// globals
+int th_counter[N];
+int counter;
+
+
+// Compiler-generated code (emulation)
+typedef struct ident {
+ void* dummy;
+} ident_t;
+
+typedef struct shar {
+ int(*pth_counter)[N];
+ int *pcounter;
+ int *pj;
+} *pshareds;
+
+typedef struct task {
+ pshareds shareds;
+ int(* routine)(int,struct task*);
+ int part_id;
+// privates:
+ unsigned long long lb; // library always uses ULONG
+ unsigned long long ub;
+ int st;
+ int last;
+ int i;
+ int j;
+ int th;
+} *ptask, kmp_task_t;
+
+typedef int(* task_entry_t)( int, ptask );
+
+void
+__task_dup_entry(ptask task_dst, ptask task_src, int lastpriv)
+{
+// setup lastprivate flag
+ task_dst->last = lastpriv;
+// could be constructor calls here...
+}
+
+
+// OpenMP RTL interfaces
+typedef unsigned long long kmp_uint64;
+typedef long long kmp_int64;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void
+__kmpc_taskloop(ident_t *loc, int gtid, kmp_task_t *task, int if_val,
+ kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st,
+ int nogroup, int sched, kmp_int64 grainsize, void *task_dup );
+ptask
+__kmpc_omp_task_alloc( ident_t *loc, int gtid, int flags,
+ size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+ task_entry_t task_entry );
+void __kmpc_atomic_fixed4_add(void *id_ref, int gtid, int * lhs, int rhs);
+int __kmpc_global_thread_num(void *id_ref);
+#ifdef __cplusplus
+}
+#endif
+
+
+// User's code
+int task_entry(int gtid, ptask task)
+{
+ pshareds pshar = task->shareds;
+ for( task->i = task->lb; task->i <= (int)task->ub; task->i += task->st ) {
+ task->th = omp_get_thread_num();
+ __kmpc_atomic_fixed4_add(NULL,gtid,pshar->pcounter,1);
+ __kmpc_atomic_fixed4_add(NULL,gtid,&((*pshar->pth_counter)[task->th]),1);
+ task->j = task->i;
+ }
+ my_sleep( 0.1 ); // sleep 100 ms in order to allow other threads to steal tasks
+ if( task->last ) {
+ *(pshar->pj) = task->j; // lastprivate
+ }
+ return 0;
+}
+
+int main()
+{
+ int i, j, gtid = __kmpc_global_thread_num(NULL);
+ ptask task;
+ pshareds psh;
+ omp_set_dynamic(0);
+ counter = 0;
+ for( i=0; i<N; ++i )
+ th_counter[i] = 0;
+ #pragma omp parallel num_threads(N)
+ {
+ #pragma omp master
+ {
+ int gtid = __kmpc_global_thread_num(NULL);
+/*
+ * This is what the OpenMP runtime calls correspond to:
+ #pragma omp taskloop num_tasks(N) lastprivate(j)
+ for( i=0; i<N*GRAIN*STRIDE-1; i+=STRIDE )
+ {
+ int th = omp_get_thread_num();
+ #pragma omp atomic
+ counter++;
+ #pragma omp atomic
+ th_counter[th]++;
+ j = i;
+ }
+*/
+ task = __kmpc_omp_task_alloc(NULL,gtid,1,sizeof(struct task),sizeof(struct shar),&task_entry);
+ psh = task->shareds;
+ psh->pth_counter = &th_counter;
+ psh->pcounter = &counter;
+ psh->pj = &j;
+ task->lb = 0;
+ task->ub = N*GRAIN*STRIDE-2;
+ task->st = STRIDE;
+
+ __kmpc_taskloop(
+ NULL, // location
+ gtid, // gtid
+ task, // task structure
+ 1, // if clause value
+ &task->lb, // lower bound
+ &task->ub, // upper bound
+ STRIDE, // loop increment
+ 0, // 1 if nogroup specified
+ 2, // schedule type: 0-none, 1-grainsize, 2-num_tasks
+ N, // schedule value (ignored for type 0)
+ (void*)&__task_dup_entry // tasks duplication routine
+ );
+ } // end master
+ } // end parallel
+// check results
+ if( j != N*GRAIN*STRIDE-STRIDE ) {
+ printf("Error in lastprivate, %d != %d\n",j,N*GRAIN*STRIDE-STRIDE);
+ return 1;
+ }
+ if( counter != N*GRAIN ) {
+ printf("Error, counter %d != %d\n",counter,N*GRAIN);
+ return 1;
+ }
+ for( i=0; i<N; ++i ) {
+ if( th_counter[i] % GRAIN ) {
+ printf("Error, th_counter[%d] = %d\n",i,th_counter[i]);
+ return 1;
+ }
+ }
+ printf("passed\n");
+ return 0;
+}
diff --git a/final/runtime/test/tasking/nested_parallel_tasking.c b/final/runtime/test/tasking/nested_parallel_tasking.c
new file mode 100644
index 0000000..4374d6e
--- /dev/null
+++ b/final/runtime/test/tasking/nested_parallel_tasking.c
@@ -0,0 +1,32 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <omp.h>
+
+/*
+ * This test would hang when level instead of active level
+ * used to push task state.
+ */
+
+int main()
+{
+ // If num_threads is changed to a value greater than 1, then the test passes
+ #pragma omp parallel num_threads(1)
+ {
+ #pragma omp parallel
+ printf("Hello World from thread %d\n", omp_get_thread_num());
+ }
+
+ printf("omp_num_threads: %d\n", omp_get_max_threads());
+
+ #pragma omp parallel
+ {
+ #pragma omp master
+ #pragma omp task default(none)
+ {
+ printf("%d is executing this task\n", omp_get_thread_num());
+ }
+ }
+
+ printf("pass\n");
+ return 0;
+}
diff --git a/final/runtime/test/tasking/omp_task.c b/final/runtime/test/tasking/omp_task.c
new file mode 100644
index 0000000..c534abe
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task.c
@@ -0,0 +1,52 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_task()
+{
+ int tids[NUM_TASKS];
+ int i;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+ #pragma omp task
+ {
+ my_sleep (SLEEPTIME);
+ tids[myi] = omp_get_thread_num();
+ } /* end of omp task */
+ } /* end of for */
+ } /* end of single */
+ } /*end of parallel */
+
+ /* Now we ckeck if more than one thread executed the tasks. */
+ for (i = 1; i < NUM_TASKS; i++) {
+ if (tids[0] != tids[i])
+ return 1;
+ }
+ return 0;
+} /* end of check_parallel_for_private */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_task_final.c b/final/runtime/test/tasking/omp_task_final.c
new file mode 100644
index 0000000..b531af6
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_final.c
@@ -0,0 +1,65 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_task_final()
+{
+ int tids[NUM_TASKS];
+ int includedtids[NUM_TASKS];
+ int i;
+ int error = 0;
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+
+ #pragma omp task final(i>=10)
+ {
+ tids[myi] = omp_get_thread_num();
+ /* we generate included tasks for final tasks */
+ if(myi >= 10) {
+ int included = myi;
+ #pragma omp task
+ {
+ my_sleep (SLEEPTIME);
+ includedtids[included] = omp_get_thread_num();
+ } /* end of omp included task of the final task */
+ my_sleep (SLEEPTIME);
+ } /* end of if it is a final task*/
+ } /* end of omp task */
+ } /* end of for */
+ } /* end of single */
+ } /*end of parallel */
+
+ /* Now we ckeck if more than one thread executed the final task and its included task. */
+ for (i = 10; i < NUM_TASKS; i++) {
+ if (tids[i] != includedtids[i]) {
+ error++;
+ }
+ }
+ return (error==0);
+} /* end of check_paralel_for_private */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_final()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
+
diff --git a/final/runtime/test/tasking/omp_task_firstprivate.c b/final/runtime/test/tasking/omp_task_firstprivate.c
new file mode 100644
index 0000000..d1f7c35
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_firstprivate.c
@@ -0,0 +1,51 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int test_omp_task_firstprivate()
+{
+ int i;
+ int sum = 1234;
+ int known_sum;
+ int result = 0; /* counts the wrong sums from tasks */
+
+ known_sum = 1234 + (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ #pragma omp task firstprivate(sum)
+ {
+ int j;
+ for (j = 0; j <= LOOPCOUNT; j++) {
+ #pragma omp flush
+ sum += j;
+ }
+
+ /* check if calculated sum was right */
+ if (sum != known_sum) {
+ #pragma omp critical
+ { result++; }
+ }
+ } /* omp task */
+ } /* for loop */
+ } /* omp single */
+ } /* omp parallel */
+ return (result == 0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_task_if.c b/final/runtime/test/tasking/omp_task_if.c
new file mode 100644
index 0000000..8b4728e
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_if.c
@@ -0,0 +1,43 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_task_if()
+{
+ int condition_false;
+ int count;
+ int result;
+
+ count=0;
+ condition_false = (count == 1);
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ #pragma omp task if (condition_false) shared(count, result)
+ {
+ my_sleep (SLEEPTIME);
+ #pragma omp critical
+ result = (0 == count);
+ } /* end of omp task */
+ #pragma omp critical
+ count = 1;
+ } /* end of single */
+ } /*end of parallel */
+ return result;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_if()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_task_imp_firstprivate.c b/final/runtime/test/tasking/omp_task_imp_firstprivate.c
new file mode 100644
index 0000000..905ab9a
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_imp_firstprivate.c
@@ -0,0 +1,47 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+int test_omp_task_imp_firstprivate()
+{
+ int i=5;
+ int k = 0;
+ int result = 0;
+ int task_result = 1;
+ #pragma omp parallel firstprivate(i)
+ {
+ #pragma omp single
+ {
+ for (k = 0; k < NUM_TASKS; k++) {
+ #pragma omp task shared(result , task_result)
+ {
+ int j;
+ //check if i is private
+ if(i != 5)
+ task_result = 0;
+ for(j = 0; j < NUM_TASKS; j++)
+ i++;
+ //this should be firstprivate implicitly
+ }
+ }
+ #pragma omp taskwait
+ result = (task_result && i==5);
+ }
+ }
+ return result;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_imp_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_task_priority.c b/final/runtime/test/tasking/omp_task_priority.c
new file mode 100644
index 0000000..7b62360
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_priority.c
@@ -0,0 +1,22 @@
+// RUN: %libomp-compile && env OMP_MAX_TASK_PRIORITY=42 %libomp-run
+// Test OMP 4.5 task priorities
+// Currently only API function and envirable parsing implemented.
+// Test environment sets envirable: OMP_MAX_TASK_PRIORITY=42 as tested below.
+#include <stdio.h>
+#include <omp.h>
+
+int main (void) {
+ int passed;
+
+ passed = (omp_get_max_task_priority() == 42);
+ printf("Got %d\n", omp_get_max_task_priority());
+
+ if (passed) {
+ printf("passed\n");
+ return 0;
+ }
+
+ printf("failed\n");
+ return 1;
+}
+
diff --git a/final/runtime/test/tasking/omp_task_private.c b/final/runtime/test/tasking/omp_task_private.c
new file mode 100644
index 0000000..7a93716
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_private.c
@@ -0,0 +1,53 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+int test_omp_task_private()
+{
+ int i;
+ int known_sum;
+ int sum = 0;
+ int result = 0; /* counts the wrong sums from tasks */
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ #pragma omp task private(sum) shared(result, known_sum)
+ {
+ int j;
+ //if sum is private, initialize to 0
+ sum = 0;
+ for (j = 0; j <= LOOPCOUNT; j++) {
+ #pragma omp flush
+ sum += j;
+ }
+ /* check if calculated sum was right */
+ if (sum != known_sum) {
+ #pragma omp critical
+ result++;
+ }
+ } /* end of omp task */
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel*/
+ return (result == 0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_task_shared.c b/final/runtime/test/tasking/omp_task_shared.c
new file mode 100644
index 0000000..0304026
--- /dev/null
+++ b/final/runtime/test/tasking/omp_task_shared.c
@@ -0,0 +1,41 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+int test_omp_task_imp_shared()
+{
+ int i;
+ int k = 0;
+ int result = 0;
+ i=0;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ for (k = 0; k < NUM_TASKS; k++) {
+ #pragma omp task shared(i)
+ {
+ #pragma omp atomic
+ i++;
+ //this should be shared implicitly
+ }
+ }
+ }
+ result = i;
+ return ((result == NUM_TASKS));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_task_imp_shared()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_taskwait.c b/final/runtime/test/tasking/omp_taskwait.c
new file mode 100644
index 0000000..c3a0ea7
--- /dev/null
+++ b/final/runtime/test/tasking/omp_taskwait.c
@@ -0,0 +1,74 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_taskwait()
+{
+ int result1 = 0; /* Stores number of not finished tasks after the taskwait */
+ int result2 = 0; /* Stores number of wrong array elements at the end */
+ int array[NUM_TASKS];
+ int i;
+
+ /* fill array */
+ for (i = 0; i < NUM_TASKS; i++)
+ array[i] = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+ #pragma omp task
+ {
+ my_sleep (SLEEPTIME);
+ array[myi] = 1;
+ } /* end of omp task */
+ } /* end of for */
+ #pragma omp taskwait
+ /* check if all tasks were finished */
+ for (i = 0; i < NUM_TASKS; i++)
+ if (array[i] != 1)
+ result1++;
+
+ /* generate some more tasks which now shall overwrite
+ * the values in the tids array */
+ for (i = 0; i < NUM_TASKS; i++) {
+ int myi;
+ myi = i;
+ #pragma omp task
+ {
+ array[myi] = 2;
+ } /* end of omp task */
+ } /* end of for */
+ } /* end of single */
+ } /*end of parallel */
+
+ /* final check, if all array elements contain the right values: */
+ for (i = 0; i < NUM_TASKS; i++) {
+ if (array[i] != 2)
+ result2++;
+ }
+ return ((result1 == 0) && (result2 == 0));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_taskwait()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/tasking/omp_taskyield.c b/final/runtime/test/tasking/omp_taskyield.c
new file mode 100644
index 0000000..5bb6984
--- /dev/null
+++ b/final/runtime/test/tasking/omp_taskyield.c
@@ -0,0 +1,58 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int test_omp_taskyield()
+{
+ int i;
+ int count = 0;
+ int start_tid[NUM_TASKS];
+ int current_tid[NUM_TASKS];
+
+ for (i=0; i< NUM_TASKS; i++) {
+ start_tid[i]=0;
+ current_tid[i]=0;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ int myi = i;
+ #pragma omp task untied
+ {
+ my_sleep(SLEEPTIME);
+ start_tid[myi] = omp_get_thread_num();
+ #pragma omp taskyield
+ if((start_tid[myi] %2) ==0){
+ my_sleep(SLEEPTIME);
+ current_tid[myi] = omp_get_thread_num();
+ } /*end of if*/
+ } /* end of omp task */
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel */
+ for (i=0;i<NUM_TASKS; i++) {
+ //printf("start_tid[%d]=%d, current_tid[%d]=%d\n",
+ //i, start_tid[i], i , current_tid[i]);
+ if (current_tid[i] == start_tid[i])
+ count++;
+ }
+ return (count<NUM_TASKS);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_taskyield()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/threadprivate/omp_threadprivate.c b/final/runtime/test/threadprivate/omp_threadprivate.c
new file mode 100644
index 0000000..a3dd80d
--- /dev/null
+++ b/final/runtime/test/threadprivate/omp_threadprivate.c
@@ -0,0 +1,102 @@
+// RUN: %libomp-compile-and-run
+/*
+ * Threadprivate is tested in 2 ways:
+ * 1. The global variable declared as threadprivate should have
+ * local copy for each thread. Otherwise race condition and
+ * wrong result.
+ * 2. If the value of local copy is retained for the two adjacent
+ * parallel regions
+ */
+#include "omp_testsuite.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+static int sum0=0;
+static int myvalue = 0;
+
+#pragma omp threadprivate(sum0)
+#pragma omp threadprivate(myvalue)
+
+int test_omp_threadprivate()
+{
+ int sum = 0;
+ int known_sum;
+ int i;
+ int iter;
+ int *data;
+ int size;
+ int num_failed = 0;
+ int my_random;
+ omp_set_dynamic(0);
+
+ #pragma omp parallel private(i)
+ {
+ sum0 = 0;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum0 = sum0 + i;
+ } /*end of for*/
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ } /* end of parallel */
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ if (known_sum != sum ) {
+ fprintf (stderr, " known_sum = %d, sum = %d\n", known_sum, sum);
+ }
+
+ /* the next parallel region is just used to get the number of threads*/
+ omp_set_dynamic(0);
+ #pragma omp parallel
+ {
+ #pragma omp master
+ {
+ size=omp_get_num_threads();
+ data=(int*) malloc(size*sizeof(int));
+ }
+ }/* end parallel*/
+
+ srand(45);
+ for (iter = 0; iter < 100; iter++) {
+ my_random = rand(); /* random number generator is
+ called inside serial region*/
+
+ /* the first parallel region is used to initialiye myvalue
+ and the array with my_random+rank */
+ #pragma omp parallel
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ myvalue = data[rank] = my_random + rank;
+ }
+
+ /* the second parallel region verifies that the
+ value of "myvalue" is retained */
+ #pragma omp parallel reduction(+:num_failed)
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ num_failed = num_failed + (myvalue != data[rank]);
+ if(myvalue != data[rank]) {
+ fprintf (stderr, " myvalue = %d, data[rank]= %d\n",
+ myvalue, data[rank]);
+ }
+ }
+ }
+ free (data);
+ return (known_sum == sum) && !num_failed;
+} /* end of check_threadprivate*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_threadprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/threadprivate/omp_threadprivate_for.c b/final/runtime/test/threadprivate/omp_threadprivate_for.c
new file mode 100644
index 0000000..3342e63
--- /dev/null
+++ b/final/runtime/test/threadprivate/omp_threadprivate_for.c
@@ -0,0 +1,48 @@
+// RUN: %libomp-compile-and-run
+#include "omp_testsuite.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+static int i;
+#pragma omp threadprivate(i)
+
+int test_omp_threadprivate_for()
+{
+ int known_sum;
+ int sum;
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ sum = 0;
+
+ #pragma omp parallel
+ {
+ int sum0 = 0, i0;
+ #pragma omp for
+ for (i0 = 1; i0 <= LOOPCOUNT; i0++) {
+ i = i0;
+ sum0 = sum0 + i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ } /* end of parallel */
+
+ if (known_sum != sum ) {
+ fprintf(stderr, " known_sum = %d, sum = %d\n", known_sum, sum);
+ }
+ return (known_sum == sum);
+} /* end of check_threadprivate*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_threadprivate_for()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/bug_set_schedule_0.c b/final/runtime/test/worksharing/for/bug_set_schedule_0.c
new file mode 100644
index 0000000..889e239
--- /dev/null
+++ b/final/runtime/test/worksharing/for/bug_set_schedule_0.c
@@ -0,0 +1,40 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <omp.h>
+#include "omp_testsuite.h"
+
+/* Test that the chunk size is set to default (1) when
+ chunk size <= 0 is specified */
+int a = 0;
+
+int test_set_schedule_0()
+{
+ int i;
+ a = 0;
+ omp_set_schedule(omp_sched_dynamic,0);
+
+ #pragma omp parallel
+ {
+ #pragma omp for schedule(runtime)
+ for(i = 0; i < 10; i++) {
+ #pragma omp atomic
+ a++;
+ if(a > 10)
+ exit(1);
+ }
+ }
+ return a==10;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_set_schedule_0()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/kmp_doacross_check.c b/final/runtime/test/worksharing/for/kmp_doacross_check.c
new file mode 100644
index 0000000..c0ee201
--- /dev/null
+++ b/final/runtime/test/worksharing/for/kmp_doacross_check.c
@@ -0,0 +1,56 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+
+#define N 1000
+
+struct dim {
+ long long lo; // lower
+ long long up; // upper
+ long long st; // stride
+};
+extern void __kmpc_doacross_init(void*, int, int, struct dim *);
+extern void __kmpc_doacross_wait(void*, int, long long*);
+extern void __kmpc_doacross_post(void*, int, long long*);
+extern void __kmpc_doacross_fini(void*, int);
+extern int __kmpc_global_thread_num(void*);
+
+int main()
+{
+ int i;
+ int iter[N];
+ struct dim dims;
+ for( i = 0; i < N; ++i )
+ iter[i] = 1;
+ dims.lo = 1;
+ dims.up = N-1;
+ dims.st = 1;
+ #pragma omp parallel
+ {
+ int i, gtid;
+ long long vec;
+ gtid = __kmpc_global_thread_num(NULL);
+ __kmpc_doacross_init(NULL,gtid,1,&dims); // thread starts the loop
+ #pragma omp for nowait schedule(dynamic)
+ for( i = 1; i < N; ++i )
+ {
+ // runtime call corresponding to #pragma omp ordered depend(sink:i-1)
+ vec=i-1;
+ __kmpc_doacross_wait(NULL,gtid,&vec);
+ // user's code
+ iter[i] = iter[i-1] + 1;
+ // runtime call corresponding to #pragma omp ordered depend(source)
+ vec=i;
+ __kmpc_doacross_post(NULL,gtid,&vec);
+ }
+ // thread finishes the loop (should be before the loop barrier)
+ __kmpc_doacross_fini(NULL,gtid);
+ }
+ if( iter[N-1] == N ) {
+ printf("passed\n");
+ } else {
+ printf("failed %d != %d\n", iter[N-1], N);
+ return 1;
+ }
+ return 0;
+}
+
diff --git a/final/runtime/test/worksharing/for/kmp_set_dispatch_buf.c b/final/runtime/test/worksharing/for/kmp_set_dispatch_buf.c
new file mode 100644
index 0000000..a6378fe
--- /dev/null
+++ b/final/runtime/test/worksharing/for/kmp_set_dispatch_buf.c
@@ -0,0 +1,91 @@
+// RUN: %libomp-compile && %libomp-run 7
+// RUN: %libomp-run 0 && %libomp-run -1
+// RUN: %libomp-run 1 && %libomp-run 2 && %libomp-run 5
+// RUN: %libomp-compile -DMY_SCHEDULE=guided && %libomp-run 7
+// RUN: %libomp-run 1 && %libomp-run 2 && %libomp-run 5
+#include <stdio.h>
+#include <omp.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "omp_testsuite.h"
+
+#define INCR 7
+#define MY_MAX 200
+#define MY_MIN -200
+#ifndef MY_SCHEDULE
+# define MY_SCHEDULE dynamic
+#endif
+
+int num_disp_buffers, num_loops;
+int a, b, a_known_value, b_known_value;
+
+int test_kmp_set_disp_num_buffers()
+{
+ int success = 1;
+ a = 0;
+ b = 0;
+ // run many small dynamic loops to stress the dispatch buffer system
+ #pragma omp parallel
+ {
+ int i,j;
+ for (j = 0; j < num_loops; j++) {
+ #pragma omp for schedule(MY_SCHEDULE) nowait
+ for (i = MY_MIN; i < MY_MAX; i+=INCR) {
+ #pragma omp atomic
+ a++;
+ }
+ #pragma omp for schedule(MY_SCHEDULE) nowait
+ for (i = MY_MAX; i >= MY_MIN; i-=INCR) {
+ #pragma omp atomic
+ b++;
+ }
+ }
+ }
+ // detect failure
+ if (a != a_known_value || b != b_known_value) {
+ success = 0;
+ printf("a = %d (should be %d), b = %d (should be %d)\n", a, a_known_value,
+ b, b_known_value);
+ }
+ return success;
+}
+
+int main(int argc, char** argv)
+{
+ int i,j;
+ int num_failed=0;
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s num_disp_buffers\n", argv[0]);
+ exit(1);
+ }
+
+ // set the number of dispatch buffers
+ num_disp_buffers = atoi(argv[1]);
+ kmp_set_disp_num_buffers(num_disp_buffers);
+
+ // figure out the known values to compare with calculated result
+ a_known_value = 0;
+ b_known_value = 0;
+
+ // if specified to use bad num_disp_buffers set num_loops
+ // to something reasonable
+ if (num_disp_buffers <= 0)
+ num_loops = 10;
+ else
+ num_loops = num_disp_buffers*10;
+
+ for (j = 0; j < num_loops; j++) {
+ for (i = MY_MIN; i < MY_MAX; i+=INCR)
+ a_known_value++;
+ for (i = MY_MAX; i >= MY_MIN; i-=INCR)
+ b_known_value++;
+ }
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_kmp_set_disp_num_buffers()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_bigbounds.c b/final/runtime/test/worksharing/for/omp_for_bigbounds.c
new file mode 100644
index 0000000..82f579b
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_bigbounds.c
@@ -0,0 +1,67 @@
+// RUN: %libomp-compile -DMY_SCHEDULE=static && %libomp-run
+// RUN: %libomp-compile -DMY_SCHEDULE=dynamic && %libomp-run
+// RUN: %libomp-compile -DMY_SCHEDULE=guided && %libomp-run
+// XFAIL: *
+/*
+ * Test that large bounds are handled properly and calculations of
+ * loop iterations don't accidently overflow
+ */
+#include <stdio.h>
+#include <omp.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "omp_testsuite.h"
+
+#define INCR 50000000
+#define MY_MAX 2000000000
+#define MY_MIN -2000000000
+#ifndef MY_SCHEDULE
+# define MY_SCHEDULE static
+#endif
+
+int a, b, a_known_value, b_known_value;
+
+int test_omp_for_bigbounds()
+{
+ a = 0;
+ b = 0;
+ #pragma omp parallel
+ {
+ int i;
+ #pragma omp for schedule(MY_SCHEDULE)
+ for (i = INT_MIN; i < MY_MAX; i+=INCR) {
+ #pragma omp atomic
+ a++;
+ }
+ #pragma omp for schedule(MY_SCHEDULE)
+ for (i = INT_MAX; i >= MY_MIN; i-=INCR) {
+ #pragma omp atomic
+ b++;
+ }
+ }
+ printf("a = %d (should be %d), b = %d (should be %d)\n", a, a_known_value, b, b_known_value);
+ return (a == a_known_value && b == b_known_value);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ a_known_value = 0;
+ for (i = INT_MIN; i < MY_MAX; i+=INCR) {
+ a_known_value++;
+ }
+
+ b_known_value = 0;
+ for (i = INT_MAX; i >= MY_MIN; i-=INCR) {
+ b_known_value++;
+ }
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_bigbounds()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_collapse.c b/final/runtime/test/worksharing/for/omp_for_collapse.c
new file mode 100644
index 0000000..a08086d
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_collapse.c
@@ -0,0 +1,51 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function to check that i is increasing monotonically
+ with each call */
+static int check_i_islarger (int i)
+{
+ static int last_i;
+ int islarger;
+ if (i==1)
+ last_i=0;
+ islarger = ((i >= last_i)&&(i - last_i<=1));
+ last_i = i;
+ return (islarger);
+}
+
+int test_omp_for_collapse()
+{
+ int is_larger = 1;
+
+ #pragma omp parallel
+ {
+ int i,j;
+ int my_islarger = 1;
+ #pragma omp for private(i,j) schedule(static,1) collapse(2) ordered
+ for (i = 1; i < 100; i++) {
+ for (j =1; j <100; j++) {
+ #pragma omp ordered
+ my_islarger = check_i_islarger(i)&&my_islarger;
+ }
+ }
+ #pragma omp critical
+ is_larger = is_larger && my_islarger;
+ }
+ return (is_larger);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_collapse()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_firstprivate.c b/final/runtime/test/worksharing/for/omp_for_firstprivate.c
new file mode 100644
index 0000000..6c4121c
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_firstprivate.c
@@ -0,0 +1,55 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int test_omp_for_firstprivate()
+{
+ int sum;
+ int sum0;
+ int known_sum;
+ int threadsnum;
+
+ sum = 0;
+ sum0 = 12345;
+ sum1 = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ threadsnum=omp_get_num_threads();
+ }
+ /* sum0 = 0; */
+
+ int i;
+ #pragma omp for firstprivate(sum0)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum0 = sum0 + i;
+ sum1 = sum0;
+ } /* end of for */
+
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ } /* end of critical */
+ } /* end of parallel */
+ known_sum = 12345* threadsnum+ (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_lastprivate.c b/final/runtime/test/worksharing/for/omp_for_lastprivate.c
new file mode 100644
index 0000000..88694b8
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_lastprivate.c
@@ -0,0 +1,52 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int sum0;
+#pragma omp threadprivate(sum0)
+
+int test_omp_for_lastprivate()
+{
+ int sum = 0;
+ int known_sum;
+ int i0;
+
+ i0 = -1;
+
+ #pragma omp parallel
+ {
+ sum0 = 0;
+ { /* Begin of orphaned block */
+ int i;
+ #pragma omp for schedule(static,7) lastprivate(i0)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum0 = sum0 + i;
+ i0 = i;
+ } /* end of for */
+ } /* end of orphaned block */
+
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /* end of critical */
+ } /* end of parallel */
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ fprintf(stderr, "known_sum = %d , sum = %d\n",known_sum,sum);
+ fprintf(stderr, "LOOPCOUNT = %d , i0 = %d\n",LOOPCOUNT,i0);
+ return ((known_sum == sum) && (i0 == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for (i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_lastprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_nowait.c b/final/runtime/test/worksharing/for/omp_for_nowait.c
new file mode 100644
index 0000000..95a4775
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_nowait.c
@@ -0,0 +1,77 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+/*
+ * This test will hang if the nowait is not working properly.
+ *
+ * It relies on a thread skipping to the second for construct to
+ * release the threads in the first for construct.
+ *
+ * Also, we use static scheduling to guarantee that one
+ * thread will make it to the second for construct.
+ */
+volatile int release;
+volatile int count;
+
+void wait_for_release_then_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d enters first for construct"
+ " and waits.\n", rank);
+ while (release == 0);
+ #pragma omp atomic
+ count++;
+}
+
+void release_and_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d sets release to 1\n", rank);
+ release = 1;
+ #pragma omp atomic
+ count++;
+}
+
+int test_omp_for_nowait()
+{
+ release = 0;
+ count = 0;
+
+ #pragma omp parallel num_threads(4)
+ {
+ int rank;
+ int i;
+
+ rank = omp_get_thread_num();
+
+ #pragma omp for schedule(static) nowait
+ for (i = 0; i < 4; i++) {
+ if (i < 3)
+ wait_for_release_then_increment(rank);
+ else {
+ fprintf(stderr, "Thread nr %d enters first for and goes "
+ "immediately to the next for construct to release.\n", rank);
+ #pragma omp atomic
+ count++;
+ }
+ }
+
+ #pragma omp for schedule(static)
+ for (i = 0; i < 4; i++) {
+ release_and_increment(rank);
+ }
+ }
+ return (count==8);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_nowait()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_ordered.c b/final/runtime/test/worksharing/for/omp_for_ordered.c
new file mode 100644
index 0000000..18ac7eb
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_ordered.c
@@ -0,0 +1,60 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+static int last_i = 0;
+
+/* Utility function to check that i is increasing monotonically
+ with each call */
+static int check_i_islarger (int i)
+{
+ int islarger;
+ islarger = (i > last_i);
+ last_i = i;
+ return (islarger);
+}
+
+int test_omp_for_ordered()
+{
+ int sum;
+ int is_larger = 1;
+ int known_sum;
+
+ last_i = 0;
+ sum = 0;
+
+ #pragma omp parallel
+ {
+ int i;
+ int my_islarger = 1;
+ #pragma omp for schedule(static,1) ordered
+ for (i = 1; i < 100; i++) {
+ #pragma omp ordered
+ {
+ my_islarger = check_i_islarger(i) && my_islarger;
+ sum = sum + i;
+ }
+ }
+ #pragma omp critical
+ {
+ is_larger = is_larger && my_islarger;
+ }
+ }
+
+ known_sum=(99 * 100) / 2;
+ return ((known_sum == sum) && is_larger);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_ordered()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_private.c b/final/runtime/test/worksharing/for/omp_for_private.c
new file mode 100644
index 0000000..1f537b9
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_private.c
@@ -0,0 +1,63 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+static void do_some_work()
+{
+ int i;
+ double sum = 0;
+ for(i = 0; i < 1000; i++){
+ sum += sqrt ((double) i);
+ }
+}
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int test_omp_for_private()
+{
+ int sum = 0;
+ int sum0;
+ int known_sum;
+
+ sum0 = 0; /* setting (global) sum0 = 0 */
+
+ #pragma omp parallel
+ {
+ sum1 = 0; /* setting sum1 in each thread to 0 */
+ { /* begin of orphaned block */
+ int i;
+ #pragma omp for private(sum0) schedule(static,1)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum0 = sum1;
+ #pragma omp flush
+ sum0 = sum0 + i;
+ do_some_work ();
+ #pragma omp flush
+ sum1 = sum0;
+ }
+ } /* end of orphaned block */
+
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ } /*end of critical*/
+ } /* end of parallel*/
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_reduction.c b/final/runtime/test/worksharing/for/omp_for_reduction.c
new file mode 100644
index 0000000..28f0907
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_reduction.c
@@ -0,0 +1,339 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+
+int test_omp_for_reduction ()
+{
+ double dt;
+ int sum;
+ int diff;
+ int product = 1;
+ double dsum;
+ double dknown_sum;
+ double ddiff;
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int *logics;
+ int i;
+ int known_sum;
+ int known_product;
+ double rounding_error = 1.E-9; /* over all rounding error to be
+ ignored in the double tests */
+ double dpt;
+ int result = 0;
+ int logicsArray[LOOPCOUNT];
+
+ /* Variables for integer tests */
+ sum = 0;
+ product = 1;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ /* variabels for double tests */
+ dt = 1. / 3.; /* base of geometric row for + and - test*/
+ dsum = 0.;
+ /* Variabeles for logic tests */
+ logics = logicsArray;
+ logic_and = 1;
+ logic_or = 0;
+ /* Variabeles for bit operators tests */
+ bit_and = 1;
+ bit_or = 0;
+ /* Variables for exclusiv bit or */
+ exclusiv_bit_or = 0;
+
+ /************************************************************************/
+ /** Tests for integers **/
+ /************************************************************************/
+
+ /**** Testing integer addition ****/
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(+:sum)
+ for (j = 1; j <= LOOPCOUNT; j++) {
+ sum = sum + j;
+ }
+ }
+ if (known_sum != sum) {
+ result++;
+ fprintf (stderr, "Error in sum with integers: Result was %d"
+ " instead of %d.\n", sum, known_sum);
+ }
+
+ /**** Testing integer subtracton ****/
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(-:diff)
+ for (j = 1; j <= LOOPCOUNT; j++) {
+ diff = diff - j;
+ }
+ }
+ if (diff != 0) {
+ result++;
+ fprintf (stderr, "Error in difference with integers: Result was %d"
+ " instead of 0.\n", diff);
+ }
+
+ /**** Testing integer multiplication ****/
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(*:product)
+ for (j = 1; j <= MAX_FACTOR; j++) {
+ product *= j;
+ }
+ }
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product) {
+ result++;
+ fprintf (stderr,"Error in Product with integers: Result was %d"
+ " instead of %d\n",product,known_product);
+ }
+
+ /************************************************************************/
+ /** Tests for doubles **/
+ /************************************************************************/
+
+ /**** Testing double addition ****/
+ dsum = 0.;
+ dpt = 1.;
+ for (i = 0; i < DOUBLE_DIGITS; ++i) {
+ dpt *= dt;
+ }
+ dknown_sum = (1 - dpt) / (1 - dt);
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(+:dsum)
+ for (j = 0; j < DOUBLE_DIGITS; j++) {
+ dsum += pow (dt, j);
+ }
+ }
+ if (fabs (dsum - dknown_sum) > rounding_error) {
+ result++;
+ fprintf (stderr, "\nError in sum with doubles: Result was %f"
+ " instead of: %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum-dknown_sum);
+ }
+
+ /**** Testing double subtraction ****/
+ ddiff = (1 - dpt) / (1 - dt);
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(-:ddiff)
+ for (j = 0; j < DOUBLE_DIGITS; ++j) {
+ ddiff -= pow (dt, j);
+ }
+ }
+ if (fabs (ddiff) > rounding_error) {
+ result++;
+ fprintf (stderr, "Error in Difference with doubles: Result was %E"
+ " instead of 0.0\n", ddiff);
+ }
+
+
+ /************************************************************************/
+ /** Tests for logical values **/
+ /************************************************************************/
+
+ /**** Testing logic and ****/
+ for (i = 0; i < LOOPCOUNT; i++) {
+ logics[i] = 1;
+ }
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(&&:logic_and)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ logic_and = (logic_and && logics[j]);
+ }
+ }
+ if(!logic_and) {
+ result++;
+ fprintf (stderr, "Error in logic AND part 1\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(&&:logic_and)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ logic_and = logic_and && logics[j];
+ }
+ }
+ if(logic_and) {
+ result++;
+ fprintf (stderr, "Error in logic AND part 2\n");
+ }
+
+ /**** Testing logic or ****/
+ for (i = 0; i < LOOPCOUNT; i++) {
+ logics[i] = 0;
+ }
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(||:logic_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ logic_or = logic_or || logics[j];
+ }
+ }
+ if (logic_or) {
+ result++;
+ fprintf (stderr, "Error in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(||:logic_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ logic_or = logic_or || logics[j];
+ }
+ }
+ if(!logic_or) {
+ result++;
+ fprintf (stderr, "Error in logic OR part 2\n");
+ }
+
+ /************************************************************************/
+ /** Tests for bit values **/
+ /************************************************************************/
+
+ /**** Testing bit and ****/
+ for (i = 0; i < LOOPCOUNT; ++i) {
+ logics[i] = 1;
+ }
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(&:bit_and)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ bit_and = (bit_and & logics[j]);
+ }
+ }
+ if (!bit_and) {
+ result++;
+ fprintf (stderr, "Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(&:bit_and)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ bit_and = bit_and & logics[j];
+ }
+ }
+ if (bit_and) {
+ result++;
+ fprintf (stderr, "Error in BIT AND part 2\n");
+ }
+
+ /**** Testing bit or ****/
+ for (i = 0; i < LOOPCOUNT; i++) {
+ logics[i] = 0;
+ }
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(|:bit_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ bit_or = bit_or | logics[j];
+ }
+ }
+ if (bit_or) {
+ result++;
+ fprintf (stderr, "Error in BIT OR part 1\n");
+ }
+
+ bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(|:bit_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ bit_or = bit_or | logics[j];
+ }
+ }
+ if (!bit_or) {
+ result++;
+ fprintf (stderr, "Error in BIT OR part 2\n");
+ }
+
+ /**** Testing exclusive bit or ****/
+ for (i = 0; i < LOOPCOUNT; i++) {
+ logics[i] = 0;
+ }
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(^:exclusiv_bit_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[j];
+ }
+ }
+ if (exclusiv_bit_or) {
+ result++;
+ fprintf (stderr, "Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+ #pragma omp parallel
+ {
+ int j;
+ #pragma omp for schedule(dynamic,1) reduction(^:exclusiv_bit_or)
+ for (j = 0; j < LOOPCOUNT; ++j) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[j];
+ }
+ }
+ if (!exclusiv_bit_or) {
+ result++;
+ fprintf (stderr, "Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ return (result == 0);
+ free (logics);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_reduction()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_auto.c b/final/runtime/test/worksharing/for/omp_for_schedule_auto.c
new file mode 100644
index 0000000..075617c
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_schedule_auto.c
@@ -0,0 +1,69 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int test_omp_for_auto()
+{
+ int j;
+ int sum;
+ int sum0;
+ int known_sum;
+ int threadsnum;
+
+ sum = 0;
+ sum0 = 12345;
+
+ // array which keeps track of which threads participated in the for loop
+ // e.g., given 4 threads, [ 0 | 1 | 1 | 0 ] implies
+ // threads 0 and 3 did not, threads 1 and 2 did
+ int max_threads = omp_get_max_threads();
+ int* active_threads = (int*)malloc(sizeof(int)*max_threads);
+ for(j = 0; j < max_threads; j++)
+ active_threads[j] = 0;
+
+ #pragma omp parallel
+ {
+ int i;
+ sum1 = 0;
+ #pragma omp for firstprivate(sum0) schedule(auto)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ active_threads[omp_get_thread_num()] = 1;
+ sum0 = sum0 + i;
+ sum1 = sum0;
+ }
+
+ #pragma omp critical
+ {
+ sum = sum + sum1;
+ }
+ }
+
+ // count the threads that participated (sum is stored in threadsnum)
+ threadsnum=0;
+ for(j = 0; j < max_threads; j++) {
+ if(active_threads[j])
+ threadsnum++;
+ }
+ free(active_threads);
+
+ known_sum = 12345 * threadsnum + (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_auto()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_dynamic.c b/final/runtime/test/worksharing/for/omp_for_schedule_dynamic.c
new file mode 100644
index 0000000..6d4f59b
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_schedule_dynamic.c
@@ -0,0 +1,89 @@
+// RUN: %libomp-compile-and-run
+/*
+ * Test for dynamic scheduling with chunk size
+ * Method: caculate how many times the iteration space is dispatched
+ * and judge if each dispatch has the requested chunk size
+ * unless it is the last one.
+ * It is possible for two adjacent chunks are assigned to the same thread
+ * Modified by Chunhua Liao
+ */
+#include <stdio.h>
+#include <omp.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+#define CFDMAX_SIZE 100
+const int chunk_size = 7;
+
+int test_omp_for_schedule_dynamic()
+{
+ int tid;
+ int *tids;
+ int i;
+ int tidsArray[CFDMAX_SIZE];
+ int count = 0;
+ int tmp_count = 0; /*dispatch times*/
+ int *tmp; /*store chunk size for each dispatch*/
+ int result = 0;
+
+ tids = tidsArray;
+
+ #pragma omp parallel private(tid) shared(tids)
+ { /* begin of parallel */
+ int tid;
+ tid = omp_get_thread_num ();
+ #pragma omp for schedule(dynamic,chunk_size)
+ for (i = 0; i < CFDMAX_SIZE; i++) {
+ tids[i] = tid;
+ }
+ }
+
+ for (i = 0; i < CFDMAX_SIZE - 1; ++i) {
+ if (tids[i] != tids[i + 1]) {
+ count++;
+ }
+ }
+
+ tmp = (int *) malloc (sizeof (int) * (count + 1));
+ tmp[0] = 1;
+
+ for (i = 0; i < CFDMAX_SIZE - 1; ++i) {
+ if (tmp_count > count) {
+ printf ("--------------------\nTestinternal Error: List too small!!!\n--------------------\n"); /* Error handling */
+ break;
+ }
+ if (tids[i] != tids[i + 1]) {
+ tmp_count++;
+ tmp[tmp_count] = 1;
+ } else {
+ tmp[tmp_count]++;
+ }
+ }
+ /* is dynamic statement working? */
+ for (i = 0; i < count; i++) {
+ if ((tmp[i]%chunk_size)!=0) {
+ /* it is possible for 2 adjacent chunks assigned to a same thread */
+ result++;
+ fprintf(stderr,"The intermediate dispatch has wrong chunksize.\n");
+ /* result += ((tmp[i] / chunk_size) - 1); */
+ }
+ }
+ if ((tmp[count]%chunk_size)!=(CFDMAX_SIZE%chunk_size)) {
+ result++;
+ fprintf(stderr,"the last dispatch has wrong chunksize.\n");
+ }
+ /* for (int i=0;i<count+1;++i) printf("%d\t:=\t%d\n",i+1,tmp[i]); */
+ return (result==0);
+}
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_schedule_dynamic()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_guided.c b/final/runtime/test/worksharing/for/omp_for_schedule_guided.c
new file mode 100644
index 0000000..1ee7449
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_schedule_guided.c
@@ -0,0 +1,217 @@
+// RUN: %libomp-compile-and-run
+
+/* Test for guided scheduling
+ * Ensure threads get chunks interleavely first
+ * Then judge the chunk sizes are decreasing to a stable value
+ * Modified by Chunhua Liao
+ * For example, 100 iteration on 2 threads, chunksize 7
+ * one line for each dispatch, 0/1 means thread id
+ * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24
+ * 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18
+ * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14
+ * 1 1 1 1 1 1 1 1 1 1 10
+ * 0 0 0 0 0 0 0 0 8
+ * 1 1 1 1 1 1 1 7
+ * 0 0 0 0 0 0 0 7
+ * 1 1 1 1 1 1 1 7
+ * 0 0 0 0 0 5
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.005
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0001
+#endif
+
+int test_omp_for_schedule_guided()
+{
+ int * tids;
+ int * chunksizes;
+ int notout;
+ int maxiter;
+ int threads;
+ int i;
+ int result;
+
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ maxiter = 0;
+ result = 1;
+ notout = 1;
+
+ /* Testing if enough threads are available for this check. */
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ threads = omp_get_num_threads();
+ }
+ }
+
+ /* ensure there are at least two threads */
+ if (threads < 2) {
+ omp_set_num_threads(2);
+ threads = 2;
+ }
+
+ /* Now the real parallel work:
+ * Each thread will start immediately with the first chunk.
+ */
+ #pragma omp parallel shared(tids,maxiter)
+ { /* begin of parallel */
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+ #pragma omp for nowait schedule(guided)
+ for(j = 0; j < CFSMAX_SIZE; ++j) {
+ count = 0.;
+ #pragma omp flush(maxiter)
+ if (j > maxiter) {
+ #pragma omp critical
+ {
+ maxiter = j;
+ }
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+ #pragma omp flush(maxiter,notout)
+ while (notout && (count < MAX_TIME) && (maxiter == j)) {
+ #pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+#ifdef VERBOSE
+ printf(".");
+#endif
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of for */
+ notout = 0;
+ #pragma omp flush(maxiter,notout)
+ } /* end of parallel */
+
+ /*******************************************************
+ * evaluation of the values *
+ *******************************************************/
+ {
+ int determined_chunksize = 1;
+ int last_threadnr = tids[0];
+ int global_chunknr = 0;
+ int openwork = CFSMAX_SIZE;
+ int expected_chunk_size;
+ int* local_chunknr = (int*)malloc(threads * sizeof(int));
+ double c = 1;
+
+ for (i = 0; i < threads; i++)
+ local_chunknr[i] = 0;
+
+ tids[CFSMAX_SIZE] = -1;
+
+ /*
+ * determine the number of global chunks
+ */
+ // fprintf(stderr,"# global_chunknr thread local_chunknr chunksize\n");
+ for(i = 1; i <= CFSMAX_SIZE; ++i) {
+ if (last_threadnr==tids[i]) {
+ determined_chunksize++;
+ } else {
+ /* fprintf(stderr, "%d\t%d\t%d\t%d\n", global_chunknr,
+ last_threadnr, local_chunknr[last_threadnr], m); */
+ global_chunknr++;
+ local_chunknr[last_threadnr]++;
+ last_threadnr = tids[i];
+ determined_chunksize = 1;
+ }
+ }
+ /* now allocate the memory for saving the sizes of the global chunks */
+ chunksizes = (int*)malloc(global_chunknr * sizeof(int));
+
+ /*
+ * Evaluate the sizes of the global chunks
+ */
+ global_chunknr = 0;
+ determined_chunksize = 1;
+ last_threadnr = tids[0];
+ for (i = 1; i <= CFSMAX_SIZE; ++i) {
+ /* If the threadnumber was the same as before increase the
+ * detected chunksize for this chunk otherwise set the detected
+ * chunksize again to one and save the number of the next
+ * thread in last_threadnr.
+ */
+ if (last_threadnr == tids[i]) {
+ determined_chunksize++;
+ } else {
+ chunksizes[global_chunknr] = determined_chunksize;
+ global_chunknr++;
+ local_chunknr[last_threadnr]++;
+ last_threadnr = tids[i];
+ determined_chunksize = 1;
+ }
+ }
+
+#ifdef VERBOSE
+ fprintf(stderr, "found\texpected\tconstant\n");
+#endif
+
+ /* identify the constant c for the exponential
+ decrease of the chunksize */
+ expected_chunk_size = openwork / threads;
+ c = (double) chunksizes[0] / expected_chunk_size;
+
+ for (i = 0; i < global_chunknr; i++) {
+ /* calculate the new expected chunksize */
+ if (expected_chunk_size > 1)
+ expected_chunk_size = c * openwork / threads;
+#ifdef VERBOSE
+ fprintf(stderr, "%8d\t%8d\t%lf\n", chunksizes[i],
+ expected_chunk_size, c * chunksizes[i]/expected_chunk_size);
+#endif
+ /* check if chunksize is inside the rounding errors */
+ if (abs (chunksizes[i] - expected_chunk_size) >= 2) {
+ result = 0;
+#ifndef VERBOSE
+ fprintf(stderr, "Chunksize differed from expected "
+ "value: %d instead of %d\n", chunksizes[i],
+ expected_chunk_size);
+ return 0;
+#endif
+ } /* end if */
+
+#ifndef VERBOSE
+ if (expected_chunk_size - chunksizes[i] < 0)
+ fprintf(stderr, "Chunksize did not decrease: %d"
+ " instead of %d\n", chunksizes[i],expected_chunk_size);
+#endif
+
+ /* calculating the remaining amount of work */
+ openwork -= chunksizes[i];
+ }
+ }
+ return result;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_schedule_guided()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_static.c b/final/runtime/test/worksharing/for/omp_for_schedule_static.c
new file mode 100644
index 0000000..f46a544
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_schedule_static.c
@@ -0,0 +1,154 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.01
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0005
+#endif
+
+int test_omp_for_schedule_static()
+{
+ int threads;
+ int i,lasttid;
+ int * tids;
+ int notout;
+ int maxiter;
+ int chunk_size;
+ int counter = 0;
+ int tmp_count=1;
+ int lastthreadsstarttid = -1;
+ int result = 1;
+
+ chunk_size = 7;
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ notout = 1;
+ maxiter = 0;
+
+ #pragma omp parallel shared(tids,counter)
+ { /* begin of parallel*/
+ #pragma omp single
+ {
+ threads = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+
+ if (threads < 2) {
+ omp_set_num_threads(2);
+ threads = 2;
+ }
+ fprintf (stderr,"Using an internal count of %d\nUsing a specified"
+ " chunksize of %d\n", CFSMAX_SIZE, chunk_size);
+ tids[CFSMAX_SIZE] = -1; /* setting endflag */
+ #pragma omp parallel shared(tids)
+ { /* begin of parallel */
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+ #pragma omp for nowait schedule(static,chunk_size)
+ for(j = 0; j < CFSMAX_SIZE; ++j) {
+ count = 0.;
+ #pragma omp flush(maxiter)
+ if (j > maxiter) {
+ #pragma omp critical
+ {
+ maxiter = j;
+ }
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+ while (notout && (count < MAX_TIME) && (maxiter == j)) {
+ #pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+ printf(".");
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of for */
+ notout = 0;
+ #pragma omp flush(maxiter,notout)
+ } /* end of parallel */
+
+ /**** analysing the data in array tids ****/
+
+ lasttid = tids[0];
+ tmp_count = 0;
+
+ for (i = 0; i < CFSMAX_SIZE + 1; ++i) {
+ /* If the work was done by the same thread increase tmp_count by one. */
+ if (tids[i] == lasttid) {
+ tmp_count++;
+#ifdef VERBOSE
+ fprintf (stderr, "%d: %d \n", i, tids[i]);
+#endif
+ continue;
+ }
+
+ /* Check if the next thread had has the right thread number. When finding
+ * threadnumber -1 the end should be reached.
+ */
+ if (tids[i] == (lasttid + 1) % threads || tids[i] == -1) {
+ /* checking for the right chunk size */
+ if (tmp_count == chunk_size) {
+ tmp_count = 1;
+ lasttid = tids[i];
+#ifdef VERBOSE
+ fprintf (stderr, "OK\n");
+#endif
+ } else {
+ /* If the chunk size was wrong, check if the end was reached */
+ if (tids[i] == -1) {
+ if (i == CFSMAX_SIZE) {
+ fprintf (stderr, "Last thread had chunk size %d\n",
+ tmp_count);
+ break;
+ } else {
+ fprintf (stderr, "ERROR: Last thread (thread with"
+ " number -1) was found before the end.\n");
+ result = 0;
+ }
+ } else {
+ fprintf (stderr, "ERROR: chunk size was %d. (assigned"
+ " was %d)\n", tmp_count, chunk_size);
+ result = 0;
+ }
+ }
+ } else {
+ fprintf(stderr, "ERROR: Found thread with number %d (should be"
+ " inbetween 0 and %d).", tids[i], threads - 1);
+ result = 0;
+ }
+#ifdef VERBOSE
+ fprintf (stderr, "%d: %d \n", i, tids[i]);
+#endif
+ }
+
+ return result;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_schedule_static()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_static_3.c b/final/runtime/test/worksharing/for/omp_for_schedule_static_3.c
new file mode 100644
index 0000000..922f27a
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_for_schedule_static_3.c
@@ -0,0 +1,202 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.01
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0005
+#endif
+
+#define VERBOSE 0
+
+int test_omp_for_schedule_static_3()
+{
+ int threads;
+ int i,lasttid;
+
+ int * tids;
+ int * tids2;
+ int notout;
+ int maxiter;
+ int chunk_size;
+
+ int counter = 0;
+ int tmp_count=1;
+ int lastthreadsstarttid = -1;
+ int result = 1;
+ chunk_size = 7;
+
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ notout = 1;
+ maxiter = 0;
+
+ #pragma omp parallel shared(tids,counter)
+ { /* begin of parallel*/
+ #pragma omp single
+ {
+ threads = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+
+ /* Ensure that at least two threads are created */
+ if (threads < 2) {
+ omp_set_num_threads(2);
+ threads = 2;
+ }
+ fprintf (stderr,"Using an internal count of %d\nUsing a"
+ " specified chunksize of %d\n", CFSMAX_SIZE, chunk_size);
+ tids[CFSMAX_SIZE] = -1; /* setting endflag */
+
+ #pragma omp parallel shared(tids)
+ { /* begin of parallel */
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+ #pragma omp for nowait schedule(static,chunk_size)
+ for(j = 0; j < CFSMAX_SIZE; ++j) {
+ count = 0.;
+ #pragma omp flush(maxiter)
+ if (j > maxiter) {
+ #pragma omp critical
+ {
+ maxiter = j;
+ }
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+ while (notout && (count < MAX_TIME) && (maxiter == j)) {
+ #pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+ printf(".");
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of omp parallel for */
+
+ notout = 0;
+ #pragma omp flush(maxiter,notout)
+ } /* end of parallel */
+
+ /**** analysing the data in array tids ****/
+
+ lasttid = tids[0];
+ tmp_count = 0;
+
+ for (i = 0; i < CFSMAX_SIZE + 1; ++i) {
+ /* If the work was done by the same thread
+ increase tmp_count by one. */
+ if (tids[i] == lasttid) {
+ tmp_count++;
+#ifdef VERBOSE
+ fprintf (stderr, "%d: %d \n", i, tids[i]);
+#endif
+ continue;
+ }
+
+ /* Check if the next thread had has the right thread number.
+ * When finding threadnumber -1 the end should be reached.
+ */
+ if (tids[i] == (lasttid + 1) % threads || tids[i] == -1) {
+ /* checking for the right chunk size */
+ if (tmp_count == chunk_size) {
+ tmp_count = 1;
+ lasttid = tids[i];
+#ifdef VERBOSE
+ fprintf (stderr, "OK\n");
+#endif
+ } else {
+ /* If the chunk size was wrong, check if the end was reached */
+ if (tids[i] == -1) {
+ if (i == CFSMAX_SIZE) {
+ fprintf (stderr, "Last thread had chunk size %d\n",
+ tmp_count);
+ break;
+ } else {
+ fprintf (stderr, "ERROR: Last thread (thread with"
+ " number -1) was found before the end.\n");
+ result = 0;
+ }
+ } else {
+ fprintf (stderr, "ERROR: chunk size was %d. (assigned"
+ " was %d)\n", tmp_count, chunk_size);
+ result = 0;
+ }
+ }
+ } else {
+ fprintf(stderr, "ERROR: Found thread with number %d (should be"
+ " inbetween 0 and %d).", tids[i], threads - 1);
+ result = 0;
+ }
+#ifdef VERBOSE
+ fprintf (stderr, "%d: %d \n", i, tids[i]);
+#endif
+ }
+
+ /* Now we check if several loop regions in one parallel region have the
+ * same logical assignement of chunks to threads. We use the nowait
+ * clause to increase the probability to get an error. */
+
+ /* First we allocate some more memmory */
+ free (tids);
+ tids = (int *) malloc (sizeof (int) * LOOPCOUNT);
+ tids2 = (int *) malloc (sizeof (int) * LOOPCOUNT);
+
+ #pragma omp parallel
+ {
+ {
+ int n;
+ #pragma omp for schedule(static) nowait
+ for (n = 0; n < LOOPCOUNT; n++) {
+ if (LOOPCOUNT == n + 1 )
+ my_sleep(SLEEPTIME);
+
+ tids[n] = omp_get_thread_num();
+ }
+ }
+ {
+ int m;
+ #pragma omp for schedule(static) nowait
+ for (m = 1; m <= LOOPCOUNT; m++) {
+ tids2[m-1] = omp_get_thread_num();
+ }
+ }
+ }
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ if (tids[i] != tids2[i]) {
+ fprintf (stderr, "Chunk no. %d was assigned once to thread %d and"
+ " later to thread %d.\n", i, tids[i],tids2[i]);
+ result = 0;
+ }
+
+ free (tids);
+ free (tids2);
+ return result;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for (i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_for_schedule_static_3()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_firstprivate.c b/final/runtime/test/worksharing/for/omp_parallel_for_firstprivate.c
new file mode 100644
index 0000000..3b3bf7d
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_firstprivate.c
@@ -0,0 +1,35 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_for_firstprivate()
+{
+ int sum ;
+ int i2;
+ int i;
+ int known_sum;
+
+ sum=0;
+ i2=3;
+
+ #pragma omp parallel for reduction(+:sum) private(i) firstprivate(i2)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum = sum + (i + i2);
+ }
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 + i2 * LOOPCOUNT;
+ return (known_sum == sum);
+} /* end of check_parallel_for_fistprivate */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_if.c b/final/runtime/test/worksharing/for/omp_parallel_for_if.c
new file mode 100644
index 0000000..57fe498
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_if.c
@@ -0,0 +1,42 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_for_if()
+{
+ int known_sum;
+ int num_threads;
+ int sum, sum2;
+ int i;
+ int control;
+
+ control = 0;
+ num_threads=0;
+ sum = 0;
+ sum2 = 0;
+
+ #pragma omp parallel for private(i) if (control==1)
+ for (i=0; i <= LOOPCOUNT; i++) {
+ num_threads = omp_get_num_threads();
+ sum = sum + i;
+ }
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ fprintf(stderr, "Number of threads determined by"
+ " omp_get_num_threads: %d\n", num_threads);
+ return (known_sum == sum && num_threads == 1);
+} /* end of check_parallel_for_private */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_if()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_lastprivate.c b/final/runtime/test/worksharing/for/omp_parallel_for_lastprivate.c
new file mode 100644
index 0000000..a53cfb2
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_lastprivate.c
@@ -0,0 +1,37 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_for_lastprivate()
+{
+ int sum;
+ int i;
+ int i0;
+ int known_sum;
+
+ sum =0;
+ i0 = -1;
+
+ #pragma omp parallel for reduction(+:sum) \
+ schedule(static,7) private(i) lastprivate(i0)
+ for (i = 1; i <= LOOPCOUNT; i++) {
+ sum = sum + i;
+ i0 = i;
+ } /* end of parallel for */
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return ((known_sum == sum) && (i0 == LOOPCOUNT));
+} /* end of check_parallel_for_lastprivate */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_lastprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_ordered.c b/final/runtime/test/worksharing/for/omp_parallel_for_ordered.c
new file mode 100644
index 0000000..5fef460
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_ordered.c
@@ -0,0 +1,64 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+static int last_i = 0;
+
+int i;
+#pragma omp threadprivate(i)
+
+/* Variable ii is used to avoid problems with a threadprivate variable used as a loop
+ * index. See test omp_threadprivate_for.
+ */
+static int ii;
+#pragma omp threadprivate(ii)
+
+/*!
+ Utility function: returns true if the passed argument is larger than
+ the argument of the last call of this function.
+ */
+static int check_i_islarger2(int i)
+{
+ int islarger;
+ islarger = (i > last_i);
+ last_i = i;
+ return (islarger);
+}
+
+int test_omp_parallel_for_ordered()
+{
+ int sum;
+ int is_larger;
+ int known_sum;
+ int i;
+
+ sum = 0;
+ is_larger = 1;
+ last_i = 0;
+ #pragma omp parallel for schedule(static,1) private(i) ordered
+ for (i = 1; i < 100; i++) {
+ ii = i;
+ #pragma omp ordered
+ {
+ is_larger = check_i_islarger2 (ii) && is_larger;
+ sum = sum + ii;
+ }
+ }
+ known_sum = (99 * 100) / 2;
+ fprintf (stderr," known_sum = %d , sum = %d \n", known_sum, sum);
+ fprintf (stderr," is_larger = %d\n", is_larger);
+ return (known_sum == sum) && is_larger;
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_ordered()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_private.c b/final/runtime/test/worksharing/for/omp_parallel_for_private.c
new file mode 100644
index 0000000..1231d36
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_private.c
@@ -0,0 +1,50 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/*! Utility function to spend some time in a loop */
+static void do_some_work (void)
+{
+ int i;
+ double sum = 0;
+ for(i = 0; i < 1000; i++){
+ sum += sqrt (i);
+ }
+}
+
+int test_omp_parallel_for_private()
+{
+ int sum;
+ int i;
+ int i2;
+ int known_sum;
+
+ sum =0;
+ i2=0;
+
+ #pragma omp parallel for reduction(+:sum) schedule(static,1) private(i) private(i2)
+ for (i=1;i<=LOOPCOUNT;i++)
+ {
+ i2 = i;
+ #pragma omp flush
+ do_some_work ();
+ #pragma omp flush
+ sum = sum + i2;
+ } /*end of for*/
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+} /* end of check_parallel_for_private */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/for/omp_parallel_for_reduction.c b/final/runtime/test/worksharing/for/omp_parallel_for_reduction.c
new file mode 100644
index 0000000..118d730
--- /dev/null
+++ b/final/runtime/test/worksharing/for/omp_parallel_for_reduction.c
@@ -0,0 +1,266 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+
+int test_omp_parallel_for_reduction()
+{
+ int sum;
+ int known_sum;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[LOOPCOUNT];
+ int i;
+ double dpt;
+ int result;
+
+ sum =0;
+ dsum=0;
+ dt = 1./3.;
+ result = 0;
+ product = 1;
+ logic_and=1;
+ logic_or=0;
+ bit_and=1;
+ bit_or=0;
+ exclusiv_bit_or=0;
+
+ /* Tests for integers */
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:sum)
+ for (i=1;i<=LOOPCOUNT;i++) {
+ sum=sum+i;
+ }
+ if(known_sum!=sum) {
+ result++;
+ fprintf(stderr,"Error in sum with integers: Result was %d"
+ " instead of %d\n",sum,known_sum);
+ }
+
+ diff = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:diff)
+ for (i=1;i<=LOOPCOUNT;++i) {
+ diff=diff-i;
+ }
+ if(diff != 0) {
+ result++;
+ fprintf(stderr,"Error in difference with integers: Result was %d"
+ " instead of 0.\n",diff);
+ }
+
+ /* Tests for doubles */
+ dsum=0;
+ dpt=1;
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:dsum)
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dsum += pow(dt,i);
+ }
+ if( fabs(dsum-dknown_sum) > rounding_error ) {
+ result++;
+ fprintf(stderr,"Error in sum with doubles: Result was %f"
+ " instead of %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ dpt*=dt;
+ }
+ fprintf(stderr,"\n");
+ ddiff = (1-dpt)/(1-dt);
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:ddiff)
+ for (i=0;i<DOUBLE_DIGITS;++i) {
+ ddiff -= pow(dt,i);
+ }
+ if( fabs(ddiff) > rounding_error) {
+ result++;
+ fprintf(stderr,"Error in Difference with doubles: Result was %E"
+ " instead of 0.0\n",ddiff);
+ }
+
+ /* Tests for integers */
+ #pragma omp parallel for schedule(dynamic,1) private(i) reduction(*:product)
+ for(i=1;i<=MAX_FACTOR;i++) {
+ product *= i;
+ }
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product) {
+ result++;
+ fprintf(stderr,"Error in Product with integers: Result was %d"
+ " instead of %d\n\n",product,known_product);
+ }
+
+ /* Tests for logic AND */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(&&:logic_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_and = (logic_and && logics[i]);
+ }
+ if(!logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 1.\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(&&:logic_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_and = logic_and && logics[i];
+ }
+ if(logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 2.\n");
+ }
+
+ /* Tests for logic OR */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(||:logic_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_or = logic_or || logics[i];
+ }
+ if(logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 1.\n");
+ }
+ logic_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(||:logic_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ logic_or = logic_or || logics[i];
+ }
+ if(!logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 2.\n");
+ }
+
+ /* Tests for bitwise AND */
+ for(i=0;i<LOOPCOUNT;++i) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(&:bit_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ if(!bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 1.\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(&:bit_and)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ if(bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 2.\n");
+ }
+
+ /* Tests for bitwise OR */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(|:bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ if(bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(|:bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ if(!bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 2\n");
+ }
+
+ /* Tests for bitwise XOR */
+ for(i=0;i<LOOPCOUNT;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(^:exclusiv_bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+ #pragma omp parallel for schedule(dynamic,1) private(i) \
+ reduction(^:exclusiv_bit_or)
+ for(i=0;i<LOOPCOUNT;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(!exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_for_reduction()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_parallel_sections_firstprivate.c b/final/runtime/test/worksharing/sections/omp_parallel_sections_firstprivate.c
new file mode 100644
index 0000000..1780fab
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_parallel_sections_firstprivate.c
@@ -0,0 +1,54 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_sections_firstprivate()
+{
+ int sum;
+ int sum0;
+ int known_sum;
+
+ sum =7;
+ sum0=11;
+
+ #pragma omp parallel sections firstprivate(sum0)
+ {
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ }
+
+ known_sum=11*3+7;
+ return (known_sum==sum);
+} /* end of check_section_firstprivate*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_sections_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_parallel_sections_lastprivate.c b/final/runtime/test/worksharing/sections/omp_parallel_sections_lastprivate.c
new file mode 100644
index 0000000..9b775ec
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_parallel_sections_lastprivate.c
@@ -0,0 +1,71 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_sections_lastprivate()
+{
+ int sum;
+ int sum0;
+ int i;
+ int i0;
+ int known_sum;
+ sum =0;
+ sum0 = 0;
+ i0 = -1;
+
+ #pragma omp parallel sections private(i,sum0) lastprivate(i0)
+ {
+ #pragma omp section
+ {
+ sum0=0;
+ for (i=1;i<400;i++) {
+ sum0=sum0+i;
+ i0=i;
+ }
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0=0;
+ for(i=400;i<700;i++) {
+ sum0=sum0+i;
+ i0=i;
+ }
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0=0;
+ for(i=700;i<1000;i++) {
+ sum0=sum0+i;
+ i0=i;
+ }
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ }
+
+ known_sum=(999*1000)/2;
+ return ((known_sum==sum) && (i0==999) );
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_sections_lastprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_parallel_sections_private.c b/final/runtime/test/worksharing/sections/omp_parallel_sections_private.c
new file mode 100644
index 0000000..7dab295
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_parallel_sections_private.c
@@ -0,0 +1,64 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_sections_private()
+{
+ int sum;
+ int sum0;
+ int i;
+ int known_sum;
+
+ sum = 7;
+ sum0=0;
+
+ #pragma omp parallel sections private(sum0, i)
+ {
+ #pragma omp section
+ {
+ sum0=0;
+ for (i=1;i<400;i++)
+ sum0=sum0+i;
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0=0;
+ for(i=400;i<700;i++)
+ sum0=sum0+i;
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0=0;
+ for(i=700;i<1000;i++)
+ sum0=sum0+i;
+ #pragma omp critical
+ {
+ sum= sum+sum0;
+ }
+ }
+ }
+
+ known_sum=(999*1000)/2+7;
+ return (known_sum==sum);
+} /* end of check_section_private*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_sections_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_parallel_sections_reduction.c b/final/runtime/test/worksharing/sections/omp_parallel_sections_reduction.c
new file mode 100644
index 0000000..0d49865
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_parallel_sections_reduction.c
@@ -0,0 +1,508 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int test_omp_parallel_sections_reduction()
+{
+ int sum;
+ int known_sum;
+ double dpt;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-5;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int bit_and;
+ int logic_or;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[1000];
+ int i;
+ int result;
+
+ sum = 7;
+ dsum=0;
+ product =1;
+ dpt = 1;
+ logic_and=1;
+ bit_and=1;
+ logic_or=0;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result =0;
+ /* int my_islarger;*/
+ /*int is_larger=1;*/
+
+ // Test summation of integers
+ known_sum = (999*1000)/2+7;
+ #pragma omp parallel sections private(i) reduction(+:sum)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ sum=sum+i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ sum=sum+i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ sum=sum+i;
+ }
+ }
+ }
+ if(known_sum!=sum) {
+ result++;
+ fprintf(stderr,"Error in sum with integers: Result was %d"
+ " instead of %d.\n",sum, known_sum);
+ }
+
+ // Test differences of integers
+ diff = (999*1000)/2;
+ #pragma omp parallel sections private(i) reduction(-:diff)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ diff=diff-i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ diff=diff-i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ diff=diff-i;
+ }
+ }
+ }
+ if(diff != 0) {
+ result++;
+ fprintf(stderr,"Error in Difference with integers: Result was %d"
+ " instead of 0.\n",diff);
+ }
+
+ // Test summation of doubles
+ for (i=0;i<20;++i) {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+ #pragma omp parallel sections private(i) reduction(+:dsum)
+ {
+ #pragma omp section
+ {
+ for (i=0;i<6;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=6;i<12;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=12;i<20;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ }
+ if( fabs(dsum-dknown_sum) > rounding_error ) {
+ result++;
+ fprintf(stderr,"Error in sum with doubles: Result was %f"
+ " instead of %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum-dknown_sum);
+ }
+
+ // Test differences of doubles
+ dpt=1;
+ for (i=0;i<20;++i) {
+ dpt*=dt;
+ }
+ fprintf(stderr,"\n");
+ ddiff = (1-dpt)/(1-dt);
+ #pragma omp parallel sections private(i) reduction(-:ddiff)
+ {
+ #pragma omp section
+ {
+ for (i=0;i<6;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=6;i<12;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=12;i<20;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ }
+ if( fabs(ddiff) > rounding_error) {
+ result++;
+ fprintf(stderr,"Error in Difference with doubles: Result was %E"
+ " instead of 0.0\n",ddiff);
+ }
+
+ // Test product of integers
+ known_product = 3628800;
+ #pragma omp parallel sections private(i) reduction(*:product)
+ {
+ #pragma omp section
+ {
+ for(i=1;i<3;i++) {
+ product *= i;
+ }
+ }
+ #pragma omp section
+ {
+ for(i=3;i<7;i++) {
+ product *= i;
+ }
+ }
+ #pragma omp section
+ {
+ for(i=7;i<11;i++) {
+ product *= i;
+ }
+ }
+ }
+ if(known_product != product) {
+ result++;
+ fprintf(stderr,"Error in Product with integers: Result was %d"
+ " instead of %d\n",product,known_product);
+ }
+
+ // Test logical AND
+ for(i=0;i<1000;i++) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel sections private(i) reduction(&&:logic_and)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ if(!logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 1\n");
+ }
+ logic_and = 1;
+ logics[501] = 0;
+
+ #pragma omp parallel sections private(i) reduction(&&:logic_and)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ if(logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 2");
+ }
+
+ // Test logical OR
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel sections private(i) reduction(||:logic_or)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ if(logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel sections private(i) reduction(||:logic_or)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ if(!logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 2\n");
+ }
+
+ // Test bitwise AND
+ for(i=0;i<1000;++i) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel sections private(i) reduction(&:bit_and)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ }
+ if(!bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[501]=0;
+
+ #pragma omp parallel sections private(i) reduction(&:bit_and)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ }
+ if(bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 2");
+ }
+
+ // Test bitwise OR
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel sections private(i) reduction(|:bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ if(bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel sections private(i) reduction(|:bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ if(!bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 2\n");
+ }
+
+ // Test bitwise XOR
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel sections private(i) reduction(^:exclusiv_bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ if(exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel sections private(i) reduction(^:exclusiv_bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ if(!exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_parallel_sections_reduction()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_section_firstprivate.c b/final/runtime/test/worksharing/sections/omp_section_firstprivate.c
new file mode 100644
index 0000000..5526475
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_section_firstprivate.c
@@ -0,0 +1,55 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_section_firstprivate()
+{
+ int sum;
+ int sum0;
+ int known_sum;
+
+ sum0 = 11;
+ sum = 7;
+ #pragma omp parallel
+ {
+ #pragma omp sections firstprivate(sum0)
+ {
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ #pragma omp section
+ {
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ }
+ }
+ known_sum = 11 * 3 + 7;
+ return (known_sum == sum);
+} /* end of check_section_firstprivate*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_section_firstprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_section_lastprivate.c b/final/runtime/test/worksharing/sections/omp_section_lastprivate.c
new file mode 100644
index 0000000..0dbbea9
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_section_lastprivate.c
@@ -0,0 +1,76 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_section_lastprivate()
+{
+ int i0 = -1;
+ int sum = 0;
+ int i;
+ int sum0 = 0;
+ int known_sum;
+
+ i0 = -1;
+ sum = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections lastprivate(i0) private(i,sum0)
+ {
+ #pragma omp section
+ {
+ sum0 = 0;
+ for (i = 1; i < 400; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ } /* end of section */
+ #pragma omp section
+ {
+ sum0 = 0;
+ for(i = 400; i < 700; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ }
+ #pragma omp section
+ {
+ sum0 = 0;
+ for(i = 700; i < 1000; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ } /* end of section */
+ } /* end of sections*/
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2;
+ return ((known_sum == sum) && (i0 == 999) );
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_section_lastprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_section_private.c b/final/runtime/test/worksharing/sections/omp_section_private.c
new file mode 100644
index 0000000..bf2a30d
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_section_private.c
@@ -0,0 +1,66 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_section_private()
+{
+ int sum;
+ int sum0;
+ int i;
+ int known_sum;
+
+ sum = 7;
+ sum0 = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(sum0,i)
+ {
+ #pragma omp section
+ {
+ sum0 = 0;
+ for (i = 1; i < 400; i++)
+ sum0 = sum0 + i;
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0 = 0;
+ for (i = 400; i < 700; i++)
+ sum0 = sum0 + i;
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ #pragma omp section
+ {
+ sum0 = 0;
+ for (i = 700; i < 1000; i++)
+ sum0 = sum0 + i;
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ }
+ }
+ } /*end of sections*/
+ } /* end of parallel */
+ known_sum = (999 * 1000) / 2 + 7;
+ return (known_sum == sum);
+} /* end of check_section_private*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_section_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_sections_nowait.c b/final/runtime/test/worksharing/sections/omp_sections_nowait.c
new file mode 100644
index 0000000..caff254
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_sections_nowait.c
@@ -0,0 +1,104 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+/*
+ * This test will hang if the nowait is not working properly
+ *
+ * It relies on a thread skipping to the second sections construct to
+ * release the threads in the first sections construct
+ *
+ * Also, since scheduling of sections is implementation defined, it is
+ * necessary to have all four sections in the second sections construct
+ * release the threads since we can't guarantee which section a single thread
+ * will execute.
+ */
+volatile int release;
+volatile int count;
+
+void wait_for_release_then_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d enters first section"
+ " and waits.\n", rank);
+ while (release == 0);
+ #pragma omp atomic
+ count++;
+}
+
+void release_and_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d sets release to 1\n", rank);
+ release = 1;
+ #pragma omp flush(release)
+ #pragma omp atomic
+ count++;
+}
+
+int test_omp_sections_nowait()
+{
+ release = 0;
+ count = 0;
+
+ #pragma omp parallel num_threads(4)
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ #pragma omp sections nowait
+ {
+ #pragma omp section
+ {
+ wait_for_release_then_increment(rank);
+ }
+ #pragma omp section
+ {
+ wait_for_release_then_increment(rank);
+ }
+ #pragma omp section
+ {
+ wait_for_release_then_increment(rank);
+ }
+ #pragma omp section
+ {
+ fprintf(stderr, "Thread nr %d enters first sections and goes "
+ "immediately to next sections construct to release.\n", rank);
+ #pragma omp atomic
+ count++;
+ }
+ }
+ /* Begin of second sections environment */
+ #pragma omp sections
+ {
+ #pragma omp section
+ {
+ release_and_increment(rank);
+ }
+ #pragma omp section
+ {
+ release_and_increment(rank);
+ }
+ #pragma omp section
+ {
+ release_and_increment(rank);
+ }
+ #pragma omp section
+ {
+ release_and_increment(rank);
+ }
+ }
+ }
+ // Check to make sure all eight sections were executed
+ return (count==8);
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_sections_nowait()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/sections/omp_sections_reduction.c b/final/runtime/test/worksharing/sections/omp_sections_reduction.c
new file mode 100644
index 0000000..1fdb5ec
--- /dev/null
+++ b/final/runtime/test/worksharing/sections/omp_sections_reduction.c
@@ -0,0 +1,543 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int test_omp_sections_reduction()
+{
+ int sum;
+ int known_sum;
+ double dpt,dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int bit_and;
+ int logic_or;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[1000];
+ int i;
+ int result;
+ /* int my_islarger; */
+ /*int is_larger=1;*/
+ sum =7;
+ dpt =1;
+ dsum=0;
+ product =1;
+ logic_and=1;
+ bit_and=1;
+ logic_or=0;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result = 0;
+ dt = 1./3.;
+
+ known_sum = (999*1000)/2+7;
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(+:sum)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ sum=sum+i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ sum=sum+i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ sum=sum+i;
+ }
+ }
+ }
+ }
+ if(known_sum!=sum) {
+ ++result;
+ fprintf(stderr,"Error in sum with integers: Result was %d"
+ " instead of %d\n", sum,known_sum);
+ }
+
+ diff = (999*1000)/2;
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(-:diff)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ diff=diff-i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ diff=diff-i;
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ diff=diff-i;
+ }
+ }
+ }
+ }
+ if(diff != 0) {
+ result++;
+ fprintf(stderr,"Error in Difference with integers: Result was %d"
+ " instead of 0.\n",diff);
+ }
+
+ for (i=0;i<20;++i) {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(+:dsum)
+ {
+ #pragma omp section
+ {
+ for (i=0;i<6;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=6;i<12;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=12;i<20;++i) {
+ dsum += pow(dt,i);
+ }
+ }
+ }
+ }
+ if( fabs(dsum-dknown_sum) > rounding_error ) {
+ result++;
+ fprintf(stderr,"Error in sum with doubles: Result was %f"
+ " instead of %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+ for (i=0;i<20;++i) {
+ dpt*=dt;
+ }
+ fprintf(stderr,"\n");
+ ddiff = (1-dpt)/(1-dt);
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(-:ddiff)
+ {
+ #pragma omp section
+ {
+ for (i=0;i<6;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=6;i<12;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=12;i<20;++i) {
+ ddiff -= pow(dt,i);
+ }
+ }
+ }
+ }
+
+ if(fabs(ddiff) > rounding_error) {
+ result++;
+ fprintf(stderr,"Error in Difference with doubles: Result was %E"
+ " instead of 0.0\n",ddiff);
+ }
+
+ known_product = 3628800;
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(*:product)
+ {
+ #pragma omp section
+ {
+ for(i=1;i<3;i++) {
+ product *= i;
+ }
+ }
+ #pragma omp section
+ {
+ for(i=3;i<7;i++) {
+ product *= i;
+ }
+ }
+ #pragma omp section
+ {
+ for(i=7;i<11;i++) {
+ product *= i;
+ }
+ }
+ }
+ }
+ if(known_product != product) {
+ result++;
+ fprintf(stderr,"Error in Product with integers: Result was %d"
+ " instead of %d\n",product,known_product);
+ }
+
+ for(i=0;i<1000;i++) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(&&:logic_and)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ }
+ if(!logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 1\n");
+ }
+
+ logic_and = 1;
+ logics[501] = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(&&:logic_and)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ }
+ if(logic_and) {
+ result++;
+ fprintf(stderr,"Error in logic AND part 2\n");
+ }
+
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(||:logic_or)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ }
+ if(logic_or) {
+ result++;
+ fprintf(stderr,"\nError in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(||:logic_or)
+ {
+ #pragma omp section
+ {
+ for (i=1;i<300;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=300;i<700;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for (i=700;i<1000;i++) {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ }
+ if(!logic_or) {
+ result++;
+ fprintf(stderr,"Error in logic OR part 2\n");
+ }
+
+ for(i=0;i<1000;++i) {
+ logics[i]=1;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(&:bit_and)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ }
+ }
+ if(!bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[501]=0;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(&:bit_and)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ }
+ }
+ if(bit_and) {
+ result++;
+ fprintf(stderr,"Error in BIT AND part 2\n");
+ }
+
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(|:bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ }
+ if(bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(|:bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ }
+ if(!bit_or) {
+ result++;
+ fprintf(stderr,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<1000;i++) {
+ logics[i]=0;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(^:exclusiv_bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ }
+ if(exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[501]=1;
+
+ #pragma omp parallel
+ {
+ #pragma omp sections private(i) reduction(^:exclusiv_bit_or)
+ {
+ #pragma omp section
+ {
+ for(i=0;i<300;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=300;i<700;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ #pragma omp section
+ {
+ for(i=700;i<1000;++i) {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ }
+ if(!exclusiv_bit_or) {
+ result++;
+ fprintf(stderr,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_sections_reduction()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/single/omp_single.c b/final/runtime/test/worksharing/single/omp_single.c
new file mode 100644
index 0000000..4963579
--- /dev/null
+++ b/final/runtime/test/worksharing/single/omp_single.c
@@ -0,0 +1,44 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int test_omp_single()
+{
+ int nr_threads_in_single;
+ int result;
+ int nr_iterations;
+ int i;
+
+ nr_threads_in_single = 0;
+ result = 0;
+ nr_iterations = 0;
+
+ #pragma omp parallel private(i)
+ {
+ for (i = 0; i < LOOPCOUNT; i++) {
+ #pragma omp single
+ {
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ }
+ }
+ }
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+} /* end of check_single*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_single()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/single/omp_single_copyprivate.c b/final/runtime/test/worksharing/single/omp_single_copyprivate.c
new file mode 100644
index 0000000..ef5cd95
--- /dev/null
+++ b/final/runtime/test/worksharing/single/omp_single_copyprivate.c
@@ -0,0 +1,60 @@
+// RUN: %libomp-compile-and-run
+#include "omp_testsuite.h"
+
+#define DEBUG_TEST 0
+
+int j;
+#pragma omp threadprivate(j)
+
+int test_omp_single_copyprivate()
+{
+ int result;
+ int nr_iterations;
+
+ result = 0;
+ nr_iterations = 0;
+ #pragma omp parallel
+ {
+ int i;
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+#if DEBUG_TEST
+ int thread;
+ thread = omp_get_thread_num ();
+#endif
+ #pragma omp single copyprivate(j)
+ {
+ nr_iterations++;
+ j = i;
+#if DEBUG_TEST
+ printf ("thread %d assigns, j = %d, i = %d\n", thread, j, i);
+#endif
+ }
+#if DEBUG_TEST
+ #pragma omp barrier
+#endif
+ #pragma omp critical
+ {
+#if DEBUG_TEST
+ printf ("thread = %d, j = %d, i = %d\n", thread, j, i);
+#endif
+ result = result + j - i;
+ }
+ #pragma omp barrier
+ } /* end of for */
+ } /* end of parallel */
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_single_copyprivate()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/single/omp_single_nowait.c b/final/runtime/test/worksharing/single/omp_single_nowait.c
new file mode 100644
index 0000000..22f8930
--- /dev/null
+++ b/final/runtime/test/worksharing/single/omp_single_nowait.c
@@ -0,0 +1,73 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+/*
+ * This test will hang if the nowait is not working properly
+ *
+ * It relies on a one thread skipping to the last single construct to
+ * release the threads in the first three single constructs
+ */
+volatile int release;
+volatile int count;
+
+void wait_for_release_then_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d enters first section"
+ " and waits.\n", rank);
+ while (release == 0);
+ #pragma omp atomic
+ count++;
+}
+
+void release_and_increment(int rank)
+{
+ fprintf(stderr, "Thread nr %d sets release to 1\n", rank);
+ release = 1;
+ #pragma omp atomic
+ count++;
+}
+
+int test_omp_single_nowait()
+{
+ release = 0;
+ count = 0;
+
+ #pragma omp parallel num_threads(4)
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ #pragma omp single nowait
+ {
+ wait_for_release_then_increment(rank);
+ }
+ #pragma omp single nowait
+ {
+ wait_for_release_then_increment(rank);
+ }
+ #pragma omp single nowait
+ {
+ wait_for_release_then_increment(rank);
+ }
+
+ #pragma omp single
+ {
+ release_and_increment(rank);
+ }
+ }
+ // Check to make sure all four singles were executed
+ return (count==4);
+} /* end of check_single_nowait*/
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_single_nowait()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/test/worksharing/single/omp_single_private.c b/final/runtime/test/worksharing/single/omp_single_private.c
new file mode 100644
index 0000000..a27f8de
--- /dev/null
+++ b/final/runtime/test/worksharing/single/omp_single_private.c
@@ -0,0 +1,57 @@
+// RUN: %libomp-compile-and-run
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int myit = 0;
+#pragma omp threadprivate(myit)
+int myresult = 0;
+#pragma omp threadprivate(myresult)
+
+int test_omp_single_private()
+{
+ int nr_threads_in_single;
+ int result;
+ int nr_iterations;
+ int i;
+
+ myit = 0;
+ nr_threads_in_single = 0;
+ nr_iterations = 0;
+ result = 0;
+
+ #pragma omp parallel private(i)
+ {
+ myresult = 0;
+ myit = 0;
+ for (i = 0; i < LOOPCOUNT; i++) {
+ #pragma omp single private(nr_threads_in_single) nowait
+ {
+ nr_threads_in_single = 0;
+ #pragma omp flush
+ nr_threads_in_single++;
+ #pragma omp flush
+ myit++;
+ myresult = myresult + nr_threads_in_single;
+ }
+ }
+ #pragma omp critical
+ {
+ result += nr_threads_in_single;
+ nr_iterations += myit;
+ }
+ }
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+} /* end of check_single private */
+
+int main()
+{
+ int i;
+ int num_failed=0;
+
+ for(i = 0; i < REPETITIONS; i++) {
+ if(!test_omp_single_private()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
diff --git a/final/runtime/tools/check-depends.pl b/final/runtime/tools/check-depends.pl
new file mode 100755
index 0000000..47e7e5a
--- /dev/null
+++ b/final/runtime/tools/check-depends.pl
@@ -0,0 +1,506 @@
+#!/usr/bin/env perl
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use tools;
+
+our $VERSION = "0.005";
+my $target_os;
+my $target_arch;
+
+# --------------------------------------------------------------------------------------------------
+# Ouput parse error.
+# $tool -- Name of tool.
+# @bulk -- Output of the tool.
+# $n -- Number of line caused parse error.
+sub parse_error($\@$) {
+ my ( $tool, $bulk, $n ) = @_;
+ my @bulk;
+ for ( my $i = 0; $i < @$bulk; ++ $i ) {
+ push( @bulk, ( $i == $n ? ">>> " : " " ) . $bulk->[ $i ] );
+ }; # for $i
+ runtime_error( "Fail to parse $tool output:", @bulk, "(eof)" );
+}; # sub parse_error
+
+
+# --------------------------------------------------------------------------------------------------
+# Linux* OS version of get_deps() parses output of ldd:
+#
+# $ ldd libname.so
+# libc.so.6 => /lib64/libc.so.6 (0x00002b60fedd8000)
+# libdl.so.2 => /lib64/libdl.so.2 (0x00002b60ff12b000)
+# libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b60ff32f000)
+# /lib64/ld-linux-x86-64.so.2 (0x0000003879400000)
+#
+# Note: ldd printd all the dependencies, direct and indirect. (For example, if specified library
+# requires libdl.so, and libdl.so requires /lib/ld-linux.so, ldd prints both libdl.so and
+# /lib/ld-linux.so). If you do not want indirect dependencies, look at readelf tool.
+#
+sub get_deps_ldd($) {
+
+ my $lib = shift ( @_ );
+ my $tool = "ldd";
+ my @bulk;
+ my @deps;
+
+ execute( [ $tool, $lib ], -stdout => \@bulk );
+ debug( @bulk, "(eof)" );
+
+ foreach my $i ( 0 .. @bulk - 1 ) {
+ my $line = $bulk[ $i ];
+ if ( $line !~ m{^\s*(?:([_a-z0-9.+-/]*)\s+=>\s+)?([_a-z0-9.+-/]*)\s+\(0x[0-9a-z]*\)$}i ) {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ my $dep = ( defined( $1 ) ? $1 : $2 );
+ push( @deps, $dep );
+ }; # foreach $i
+
+ return @deps;
+
+}; # sub get_deps_ldd
+
+
+# --------------------------------------------------------------------------------------------------
+# Another Linux* OS version of get_deps() parses output of readelf:
+#
+# $ readelf -d exports/lin_32e/lib/libomp.so
+#
+# Dynamic segment at offset 0x87008 contains 24 entries:
+# Tag Type Name/Value
+# 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
+# 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
+# 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
+# 0x000000000000000e (SONAME) Library soname: [libomp.so]
+# 0x000000000000000d (FINI) 0x51caa
+# 0x0000000000000004 (HASH) 0x158
+# 0x0000000000000005 (STRTAB) 0x9350
+# ...
+#
+# Note: In contrast to ldd, readlef shows only direct dependencies.
+#
+sub get_deps_readelf($) {
+
+ my $file = shift ( @_ );
+ my $tool;
+ my @bulk;
+ my @deps;
+
+ if($target_arch eq "mic") {
+ $tool = "x86_64-k1om-linux-readelf";
+ } else {
+ $tool = "readelf";
+ }
+
+ # Force the readelf call to be in English. For example, when readelf
+ # is called on a french localization, it will find "Librairie partagees"
+ # instead of shared library
+ $ENV{ LANG } = "C";
+
+ execute( [ $tool, "-d", $file ], -stdout => \@bulk );
+ debug( @bulk, "(eof)" );
+
+ my $i = 0;
+ # Parse header.
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ if ( $i == @bulk - 1 and $bulk[ $i ] =~ m{^There is no dynamic section in this file\.\s*$} ) {
+ # This is not dynamic executable => no dependencies.
+ return @deps;
+ }; # if
+ ( $i < @bulk and $bulk[ $i ] =~ m{^Dynamic (?:segment|section) at offset 0x[0-9a-f]+ contains \d+ entries:\s*$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*Tag\s+Type\s+Name/Value\s*$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ # Parse body.
+ while ( $i < @bulk ) {
+ my $line = $bulk[ $i ];
+ if ( $line !~ m{^\s*0x[0-9a-f]+\s+\(([_A-Z0-9]+)\)\s+(.*)\s*$}i ) {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ my ( $type, $value ) = ( $1, $2 );
+ if ( $type eq "NEEDED" ) {
+ if ( $value !~ m{\AShared library: \[(.*)\]\z} ) {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ my $dep = $1;
+ push( @deps, $dep );
+ }; # if
+ ++ $i;
+ }; # foreach $i
+
+ return @deps;
+
+}; # sub get_deps_readelf
+
+
+# --------------------------------------------------------------------------------------------------
+# OS X* version of get_deps() parses output of otool:
+#
+# $ otool -L libname.dylib
+# exports/mac_32/lib.thin/libomp.dylib:
+# libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
+# /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.3)
+#
+sub get_deps_otool($) {
+
+ my $file = shift ( @_ );
+ my $name = get_file( $file );
+ my $tool = "otool";
+ my @bulk;
+ my @deps;
+
+ if ( $target_arch eq "32e" ) {
+ # On older (Tiger) systems otool does not recognize 64-bit binaries, so try to locate
+ # otool64.
+ my $path = which( "otool64" );
+ if ( defined ( $path ) ) {
+ $tool = "otool64";
+ }; # if
+ }; # if
+
+ execute( [ $tool, "-L", $file ], -stdout => \@bulk );
+ debug( @bulk, "(eof)" );
+
+ my $i = 0;
+ # Parse the first one or two lines separately.
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\Q$file\E:$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ if ( $name =~ m{\.dylib\z} ) {
+ # Added "@rpath/" enables dynamic load of the library designated at link time.
+ $name = '@rpath/' . $name;
+ # In case of dynamic library otool print the library itself as a dependent library.
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s+\Q$name\E\s+\(compatibility version.*\)$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ }; # if
+
+ # Then parse the rest.
+ while ( $i < @bulk ) {
+ my $line = $bulk[ $i ];
+ if ( $line !~ m/^\s*(.*)\s+\(compatibility version\s.*\)$/ ) {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ my ( $dep ) = ( $1 );
+ push( @deps, $dep );
+ ++ $i;
+ }; # while
+
+ return @deps;
+
+}; # sub get_deps_otool
+
+
+# --------------------------------------------------------------------------------------------------
+# Windows* OS version of get_deps() parses output of link:
+#
+# > link -dump -dependents libname.dll
+# Microsoft (R) COFF/PE Dumper Version 8.00.40310.39
+# Copyright (C) Microsoft Corporation. All rights reserved.
+# Dump of file S:\Projects.OMP\users\omalyshe\omp\libomp\exports\win_64\lib\libompmd.dll
+# File Type: DLL
+# Image has the following dependencies:
+# KERNEL32.dll
+# Summary
+# C000 .data
+# 6000 .pdata
+# 18000 .rdata
+# ...
+#
+# > link -dump -directives libname.lib
+# Microsoft (R) COFF/PE Dumper Version 8.00.40310.39
+# Copyright (C) Microsoft Corporation. All rights reserved.
+# Dump of file S:\Projects.OMP\users\omalyshe\omp\libomp\exports\win_32e\lib\libimp5mt.lib
+# File Type: LIBRARY
+# Linker Directives
+# -----------------
+# -defaultlib:"uuid.lib"
+# -defaultlib:"uuid.lib"
+# .....
+# Summary
+# 3250 .bss
+# 3FBC .data
+# 34 .data1
+# ....
+sub get_deps_link($) {
+
+ my ( $lib ) = @_;
+ my $tool = "link";
+ my @bulk;
+ my @deps;
+
+ my $ext = lc( get_ext( $lib ) );
+ if ( $ext !~ m{\A\.(?:lib|dll|exe)\z}i ) {
+ runtime_error( "Incorrect file is specified: `$lib'; only `lib', `dll' or `exe' file expected" );
+ }; # if
+
+ execute(
+ [ $tool, "/dump", ( $ext eq ".lib" ? "/directives" : "/dependents" ), $lib ],
+ -stdout => \@bulk
+ );
+
+ debug( @bulk, "(eof)" );
+
+ my $i = 0;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^Microsoft \(R\) COFF\/PE Dumper Version.*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^Copyright \(C\) Microsoft Corporation\..*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^Dump of file\s\Q$lib\E$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^File Type:\s(.*)$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+ ( $i < @bulk and $bulk[ $i ] =~ m{^\s*$} ) or parse_error( $tool, @bulk, $i ); ++ $i;
+
+ if ( $ext eq ".lib" ) {
+
+ my %deps;
+ while ( $i < @bulk ) {
+ my $line = $bulk[ $i ];
+ if ( 0 ) {
+ } elsif ( $line =~ m{^\s*[-/]defaultlib\:(.*)\s*$}i ) {
+ my $dep = $1;
+ # Normalize library name:
+ $dep = lc( $1 ); # Convert to lower case.
+ $dep =~ s{\A"(.*)"\z}{$1}; # Drop surrounding quotes (if any).
+ $dep =~ s{\.lib\z}{}; # Drop .lib suffix (if any).
+ $deps{ $dep } = 1;
+ } elsif ( $line =~ m{^\s*Linker Directives\s*$} ) {
+ } elsif ( $line =~ m{^\s*-+\s*$} ) {
+ } elsif ( $line =~ m{^\s*/alternatename\:.*$} ) {
+ } elsif ( $line =~ m{^\s*$} ) {
+ } elsif ( $line =~ m{^\s*/FAILIFMISMATCH\:.*$} ) {
+ # This directive is produced only by _MSC_VER=1600
+ } elsif ( $line =~ m{^\s*Summary\s*$} ) {
+ last;
+ } else {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ ++ $i;
+ } # while
+ @deps = keys( %deps );
+
+ } else {
+
+ ( $i < @bulk and $bulk[ $i ] =~ m{\s*Image has the following dependencies\:$} )
+ or parse_error( $tool, @bulk, $i );
+ ++ $i;
+ while ( $i < @bulk ) {
+ my $line = $bulk[ $i ];
+ if ( 0 ) {
+ } elsif ( $line =~ m{^\s*$} ) {
+ # Ignore empty lines.
+ } elsif ( $line =~ m{^\s*(.*\.dll)$}i ) {
+ my $dep = lc( $1 );
+ push( @deps, $dep );
+ } elsif ( $line =~ m{^\s*Summary$} ) {
+ last;
+ } else {
+ parse_error( $tool, @bulk, $i );
+ }; # if
+ ++ $i;
+ }; # while
+
+ }; # if
+
+ return @deps;
+
+}; # sub get_deps_link
+
+
+# --------------------------------------------------------------------------------------------------
+# Main.
+# --------------------------------------------------------------------------------------------------
+
+# Parse command line.
+my $expected;
+my $bare;
+Getopt::Long::Configure( "permute" );
+get_options(
+ "os=s" => \$target_os,
+ "arch=s" => \$target_arch,
+ "bare" => \$bare,
+ "expected=s" => \$expected,
+);
+my @expected;
+if ( defined( $expected ) ) {
+ if ( $expected ne "none" ) {
+ @expected = sort( split( ",", $expected ) );
+ if ( $target_os eq "win" ) {
+ @expected = map( lc( $_ ), @expected );
+ }; # if
+ }; # if
+}; # if
+if ( @ARGV < 1 ) {
+ cmdline_error( "Specify a library name to check for dependencies" );
+}; # if
+if ( @ARGV > 1 ) {
+ cmdline_error( "Too many arguments" );
+}; # if
+my $lib = shift( @ARGV );
+if ( not -e $lib ){
+ runtime_error( "Specified file does not exist: \"$lib\"" );
+}; # if
+
+# Select appropriate get_deps implementation.
+if ( 0 ) {
+} elsif ( $target_os eq "lin" ) {
+ *get_deps = \*get_deps_readelf;
+} elsif ( $target_os eq "mac" ) {
+ *get_deps = \*get_deps_otool;
+} elsif ( $target_os eq "win" ) {
+ *get_deps = \*get_deps_link;
+} else {
+ runtime_error( "OS \"$target_os\" not supported" );
+}; # if
+
+# Do the work.
+my @deps = sort( get_deps( $lib ) );
+if ( $bare ) {
+ print( map( "$_\n", @deps ) );
+} else {
+ info( "Dependencies:", @deps ? map( " $_", @deps ) : "(none)" );
+}; # if
+if ( defined( $expected ) ) {
+ my %deps = map( ( $_ => 1 ), @deps );
+ foreach my $dep ( @expected ) {
+ delete( $deps{ $dep } );
+ }; # foreach
+ my @unexpected = sort( keys( %deps ) );
+ if ( @unexpected ) {
+ runtime_error( "Unexpected dependencies:", map( " $_", @unexpected ) );
+ }; # if
+}; # if
+
+exit( 0 );
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<check-depends.pl> -- Check dependencies for a specified library.
+
+=head1 SYNOPSIS
+
+B<check-depends.pl> I<OPTIONS>... I<library>
+
+=head1 DESCRIPTION
+
+C<check-depends.pl> finds direct dependencies for a specified library. List of actual dependencies
+is sorted alphabetically and printed. If list of expected dependencies is specified, the scripts
+checks the library has only allowed dependencies. In case of not expected depndencies the script
+issues error message and exits with non-zero code.
+
+Linux* OS and OS X*: The script finds dependencies only for dymamic libraries. Windows* OS: The script
+finds dependencies for either static or dymamic libraries.
+
+The script uses external tools. On Linux* OS, it runs F<readelf>, on OS X* -- F<otool> (or F<otool64>),
+on Windows* OS -- F<link>.
+
+On Windows* OS dependencies are printed in lower case, case of expected dependencies ignored.
+
+=head1 OPTIONS
+
+=over
+
+=item B<--bare>
+
+Do not use fancy formatting; produce plain, bare output: just a list of libraries,
+a library per line.
+
+=item B<--expected=>I<list>
+
+I<list> is comma-separated list of expected dependencies (or C<none>).
+If C<--expected> option specified, C<check-depends.pl> checks the specified library
+has only expected dependencies.
+
+=item B<--os=>I<str>
+
+Specify target OS (tool to use) manually.
+Useful for cross-build, when host OS is not the same as target OS.
+I<str> should be either C<lin>, C<mac>, or C<win>.
+
+=back
+
+=head2 Standard Options
+
+=over
+
+=item B<--help>
+
+Print short help message and exit.
+
+=item B<--doc>
+
+=item B<--manual>
+
+Print full documentation and exit.
+
+=item B<--quiet>
+
+Do not output informational messages.
+
+=item B<--version>
+
+Print version and exit.
+
+=back
+
+=head1 ARGUMENTS
+
+=over
+
+=item I<library>
+
+A name of library to find or check dependencies.
+
+=back
+
+=head1 EXAMPLES
+
+Just print library dependencies (Windows* OS):
+
+ > check-depends.pl exports/win_32/lib/libompmd.dll
+ check-depends.pl: (i) Dependencies:
+ check-depends.pl: (i) kernel32.dll
+
+Print library dependencies, use bare output (Linux* OS):
+
+ $ check-depends.pl --bare exports/lin_32e/lib/libomp_db.so
+ libc.so.6
+ libdl.so.2
+ libpthread.so.0
+
+Check the library does not have any dependencies (OS X*):
+
+ $ check-depends.pl --expected=none exports/mac_32/lib/libomp.dylib
+ check-depends.pl: (i) Dependencies:
+ check-depends.pl: (i) /usr/lib/libSystem.B.dylib
+ check-depends.pl: (x) Unexpected dependencies:
+ check-depends.pl: (x) /usr/lib/libSystem.B.dylib
+ $ echo $?
+ 2
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/check-execstack.pl b/final/runtime/tools/check-execstack.pl
new file mode 100755
index 0000000..cf24742
--- /dev/null
+++ b/final/runtime/tools/check-execstack.pl
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use tools;
+
+our $VERSION = "0.002";
+my $target_arch;
+
+sub execstack($) {
+ my ( $file ) = @_;
+ my @output;
+ my @stack;
+ my $tool;
+ if($target_arch eq "mic") {
+ $tool = "x86_64-k1om-linux-readelf";
+ } else {
+ $tool = "readelf";
+ }
+ execute( [ $tool, "-l", "-W", $file ], -stdout => \@output );
+ @stack = grep( $_ =~ m{\A\s*(?:GNU_)?STACK\s+}, @output );
+ if ( not @stack ) {
+ # Interpret missed "STACK" line as error.
+ runtime_error( "$file: No stack segment found; looks like stack would be executable." );
+ }; # if
+ if ( @stack > 1 ) {
+ runtime_error( "$file: More than one stack segment found.", "readelf output:", @output, "(eof)" );
+ }; # if
+ # Typical stack lines are:
+ # Linux* OS IA-32 architecture:
+ # GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
+ # Linux* OS Intel(R) 64:
+ # GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RWE 0x8
+ if ( $stack[ 0 ] !~ m{\A\s*(?:GNU_)?STACK(?:\s+0x[0-9a-f]+){5}\s+([R ][W ][E ])\s+0x[0-9a-f]+\s*\z} ) {
+ runtime_error( "$file: Cannot parse stack segment line:", ">>> $stack[ 0 ]" );
+ }; # if
+ my $attrs = $1;
+ if ( $attrs =~ m{E} ) {
+ runtime_error( "$file: Stack is executable" );
+ }; # if
+}; # sub execstack
+
+get_options(
+ "arch=s" => \$target_arch,
+);
+
+foreach my $file ( @ARGV ) {
+ execstack( $file );
+}; # foreach $file
+
+exit( 0 );
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<check-execstack.pl> -- Check whether stack is executable, issue an error if so.
+
+=head1 SYNOPSIS
+
+B<check-execstack.pl> I<optiion>... I<file>...
+
+=head1 DESCRIPTION
+
+The script checks whether stack of specified executable file, and issues error if stack is
+executable. If stack is not executable, the script exits silently with zero exit code.
+
+The script runs C<readelf> utility to get information about specified executable file. So, the
+script fails if C<readelf> is not available. Effectively it means the script works only on Linux* OS
+(and, probably, Intel(R) Many Integrated Core Architecture).
+
+=head1 OPTIONS
+
+=over
+
+=item Standard Options
+
+=over
+
+=item B<--doc>
+
+=item B<--manual>
+
+Print full help message and exit.
+
+=item B<--help>
+
+Print short help message and exit.
+
+=item B<--usage>
+
+Print very short usage message and exit.
+
+=item B<--verbose>
+
+Do print informational messages.
+
+=item B<--version>
+
+Print program version and exit.
+
+=item B<--quiet>
+
+Work quiet, do not print informational messages.
+
+=back
+
+=back
+
+=head1 ARGUMENTS
+
+=over
+
+=item I<file>
+
+A name of executable or shared object to check. Multiple files may be specified.
+
+=back
+
+=head1 EXAMPLES
+
+Check libomp.so library:
+
+ $ check-execstack.pl libomp.so
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/check-instruction-set.pl b/final/runtime/tools/check-instruction-set.pl
new file mode 100755
index 0000000..b505e48
--- /dev/null
+++ b/final/runtime/tools/check-instruction-set.pl
@@ -0,0 +1,321 @@
+#!/usr/bin/perl
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use tools;
+
+our $VERSION = "0.004";
+my $target_os;
+my $target_arch;
+my $target_mic_arch;
+
+my $hex = qr{[0-9a-f]}i; # hex digit.
+
+# mic-specific details.
+
+sub bad_mic_fmt($) {
+ # Before we allowed both elf64-x86-64-freebsd and elf-l1om-freebsd.
+ # Now the first one is obsolete, only elf64-l1om-freebsd is allowed.
+ my ( $fmt ) = @_;
+ if ( 0 ) {
+ } elsif ( "$target_mic_arch" eq "knf" ) {
+ return $fmt !~ m{\Aelf64-l1om?\z};
+ } elsif ( "$target_mic_arch" eq "knc" ) {
+ return $fmt !~ m{\Aelf64-k1om?\z};
+ } else {
+ return 1;
+ };
+}; # sub bad_mic_fmt
+
+# Undesired instructions for mic: all x87 and some other.
+# AC: Since compiler 2010-06-30 x87 instructions are supported, removed the check of x87.
+my $mic_bad_re;
+sub bad_mic_instr($$) {
+ my ( $instr, $args ) = @_;
+ if ( "$target_mic_arch" eq "knc" ) {
+ # workaround of bad code generation on KNF Linux* OS:
+ return ( defined( $instr ) and $instr =~ $mic_bad_re );
+ } else {
+ return ( defined( $instr ) and $instr =~ $mic_bad_re or defined( $args ) and $args =~ m{xmm}i );
+ }
+}; # sub bad_mic_instr
+
+# lin_32-specific details.
+
+sub bad_ia32_fmt($) {
+ my ( $fmt ) = @_;
+ return $fmt !~ m{\Aelf32-i386\z};
+}; # sub bad_ia32_fmt
+
+my @sse2 =
+ qw{
+ movapd movupd movhpd movlpd movmskpd movsd
+ addpd addsd subpd subsd mulpd mulsd divpd divsd sqrtpd sqrtsd maxpd maxsd minpd minsd
+ andpd andnpd orpd xorpd
+ cmppd cmpsd comisd ucomisd
+ shufpd unpckhpd unpcklpd
+ cvtpd2pi cvttpd2pi cvtpi2pd cvtpd2dq cvttpd2dq cvtdq2pd cvtps2pd cvtpd2ps cvtss2sd cvtsd2ss
+ cvtsd2si cvttsd2si cvtsi2sd cvtdq2ps cvtps2dq cvttps2dq movdqa movdqu movq2dq movdq2q
+ pmuludq paddq psubq pshuflw pshufhw pshufd pslldq psrldq punpckhqdq punpcklqdq clflush
+ lfence mfence maskmovdqu movntpd movntdq movnti
+ };
+my @sse3 =
+ qw{
+ fisttp lddqu addsubps addsubpd haddps hsubps haddpd hsubpd movshdup movsldup movddup monitor
+ mwait
+ };
+my @ssse3 =
+ qw{
+ phaddw phaddsw phaddd phsubw phsubsw phsubd pabsb pabsw pabsd pmaddubsw pmulhrsw pshufb
+ psignb psignw psignd palignr
+ };
+my @sse4 =
+ (
+ # SSE4.1
+ qw{
+ pmulld pmuldq dppd dpps movntdqa blendpd blendps blendvpd blendvps pblendvb pblendw pminuw
+ pminud pminsb pminsd pmaxuw pmaxud pmaxsb pmaxsd roundps roundpd roundss roundsd extractps
+ insertps pinsrb pinsrd pinsrq pextrb pextrw pextrd pextrq pmovsxbw pmovzxbw pmovsxbd
+ pmovzxbd pmovsxwd pmovzxwd pmovsxbq pmovzxbq pmovsxwq pmovzxwq pmovsxdq pmovzxdq mpsadbw
+ phminposuw ptest pcmpeqq packusdw
+ },
+ # SSE4.2
+ qw{
+ pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq crc32 popcnt
+ }
+ );
+
+# Undesired instructions for IA-32 architecture: Pentium 4 (SSE2) and newer.
+# TODO: It would be much more reliable to list *allowed* instructions rather than list undesired
+# instructions. In such a case the list will be stable and not require update when SSE5 is released.
+my @ia32_bad_list = ( @sse2, @sse3, @ssse3, @sse4 );
+
+my $ia32_bad_re = qr{@{[ "^(?:" . join( "|", @ia32_bad_list ) . ")" ]}}i;
+
+sub bad_ia32_instr($$) {
+ my ( $instr, $args ) = @_;
+ return ( defined( $instr ) and $instr =~ $ia32_bad_re );
+}; # sub bad_ia32_instr
+
+sub check_file($;$$) {
+
+ my ( $file, $show_instructions, $max_instructions ) = @_;
+ my @bulk;
+
+ if ( not defined( $max_instructions ) ) {
+ $max_instructions = 100;
+ }; # if
+
+ execute( [ "x86_64-k1om-linux-objdump", "-d", $file ], -stdout => \@bulk );
+
+ my $n = 0;
+ my $errors = 0;
+ my $current_func = ""; # Name of current fuction.
+ my $reported_func = ""; # name of last reported function.
+ foreach my $line ( @bulk ) {
+ ++ $n;
+ if ( 0 ) {
+ } elsif ( $line =~ m{^\s*$} ) {
+ # Empty line.
+ # Ignore.
+ } elsif ( $line =~ m{^In archive (.*?):\s*$} ) {
+ # In archive libomp.a:
+ } elsif ( $line =~ m{^(?:.*?):\s*file format (.*?)\s*$} ) {
+ # libomp.so: file format elf64-x86-64-freebsd
+ # kmp_ftn_cdecl.o: file format elf64-x86-64
+ my $fmt = $1;
+ if ( bad_fmt( $fmt ) ) {
+ runtime_error( "Invalid file format: $fmt." );
+ }; # if
+ } elsif ( $line =~ m{^Disassembly of section (.*?):\s*$} ) {
+ # Disassembly of section .plt:
+ } elsif ( $line =~ m{^$hex+ <([^>]+)>:\s*$} ) {
+ # 0000000000017e98 <__kmp_str_format@plt-0x10>:
+ $current_func = $1;
+ } elsif ( $line =~ m{^\s*\.{3}\s*$} ) {
+ } elsif ( $line =~ m{^\s*($hex+):\s+($hex$hex(?: $hex$hex)*)\s+(?:lock\s+|rex[.a-z]*\s+)?([^ ]+)(?:\s+([^#]+?))?\s*(?:#|$)} ) {
+ # 17e98: ff 35 fa 7d 26 00 pushq 0x267dfa(%rip) # 27fc98 <_GLOBAL_OFFSET_TABLE>
+ my ( $addr, $dump, $instr, $args ) = ( $1, $2, $3, $4 );
+ # Check this is not a bad instruction and xmm registers are not used.
+ if ( bad_instr( $instr, $args ) ) {
+ if ( $errors == 0 ) {
+ warning( "Invalid instructions found in `$file':" );
+ }; # if
+ if ( $current_func ne $reported_func ) {
+ warning( " $current_func" );
+ $reported_func = $current_func;
+ }; # if
+ ++ $errors;
+ if ( $show_instructions ) {
+ warning( " $line" );
+ }; # if
+ if ( $errors >= $max_instructions ) {
+ info( "$errors invalid instructions found; scanning stopped." );
+ last;
+ }; # if
+ }; # if
+ } else {
+ runtime_error( "Error parsing objdump output line $n:\n>>>> $line\n" );
+ }; # if
+ }; # foreach $line
+
+ return $errors;
+
+}; # sub check_file
+
+# --------------------------------------------------------------------------------------------------
+
+# Parse command line.
+my $max_instructions;
+my $show_instructions;
+get_options(
+ "os=s" => \$target_os,
+ "arch=s" => \$target_arch,
+ "mic-arch=s" => \$target_mic_arch,
+ "max-instructions=i" => \$max_instructions,
+ "show-instructions!" => \$show_instructions,
+);
+my $target_platform = $target_os . "_" . $target_arch;
+if ( "$target_os" eq "lin" and "$target_mic_arch" eq "knf" ) {
+ $mic_bad_re = qr{^(?:pause|[slm]fence|scatter|gather|cmpxchg16b|clevict[12])}i;
+} else {
+ $mic_bad_re = qr{^(?:pause|[slm]fence|scatter|gather|cmov|cmpxchg16b|clevict[12])}i;
+};
+if ( 0 ) {
+} elsif ( $target_platform eq "lin_mic" ) {
+ *bad_instr = \*bad_mic_instr;
+ *bad_fmt = \*bad_mic_fmt;
+} elsif ( $target_platform eq "lin_32" ) {
+ *bad_instr = \*bad_ia32_instr;
+ *bad_fmt = \*bad_ia32_fmt;
+} else {
+ runtime_error( "Only works on lin_32 and lin_mic platforms." );
+}; # if
+
+# Do the work.
+my $rc = 0;
+if ( not @ARGV ) {
+ info( "No arguments specified -- nothing to do." );
+} else {
+ foreach my $arg ( @ARGV ) {
+ my $errs = check_file( $arg, $show_instructions, $max_instructions );
+ if ( $errs > 0 ) {
+ $rc = 3;
+ }; # if
+ }; # foreach $arg
+}; # if
+
+exit( $rc );
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<check-instruction-set.pl> -- Make sure binary file does not contain undesired instructions.
+
+=head1 SYNOPSIS
+
+B<check-instructions.pl> I<option>... I<file>...
+
+=head1 OPTIONS
+
+=over
+
+=item B<--architecture=>I<arch>
+
+Specify target architecture.
+
+=item B<--max-instructions=>I<number>
+
+Stop scanning if I<number> invalid instructions found. 100 by default.
+
+=item B<--os=>I<os>
+
+Specify target OS.
+
+=item B<-->[B<no->]B<show-instructions>
+
+Show invalid instructions found in the file. Bu default, instructions are not shown.
+
+=item Standard Options
+
+=over
+
+=item B<--doc>
+
+=item B<--manual>
+
+Print full help message and exit.
+
+=item B<--help>
+
+Print short help message and exit.
+
+=item B<--usage>
+
+Print very short usage message and exit.
+
+=item B<--verbose>
+
+Do print informational messages.
+
+=item B<--version>
+
+Print program version and exit.
+
+=item B<--quiet>
+
+Work quiet, do not print informational messages.
+
+=back
+
+=back
+
+=head1 ARGUMENTS
+
+=over
+
+=item I<file>
+
+File (object file or library, either static or dynamic) to check.
+
+=back
+
+=head1 DESCRIPTION
+
+The script runs F<objdump> utility to get disassembler listing and checks the file does not contain
+unwanted instructions.
+
+Currently the script works only for:
+
+=over
+
+=item C<lin_mic>
+
+Intel(R) Many Integrated Core Architecture target OS. Undesired unstructions are: all x87 instructions and some others.
+
+=item C<lin_32>
+
+Undesired instructions are instructions not valid for Pentium 3 processor (SSE2 and newer).
+
+=back
+
+=cut
+
diff --git a/final/runtime/tools/generate-def.pl b/final/runtime/tools/generate-def.pl
new file mode 100755
index 0000000..7c2b0f3
--- /dev/null
+++ b/final/runtime/tools/generate-def.pl
@@ -0,0 +1,321 @@
+#!/usr/bin/env perl
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Some pragmas.
+use strict; # Restrict unsafe constructs.
+use warnings; # Enable all warnings.
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use tools;
+
+our $VERSION = "0.004";
+
+#
+# Subroutines.
+#
+
+sub parse_input($\%) {
+
+ my ( $input, $defs ) = @_;
+ my @bulk = read_file( $input );
+ my %entries;
+ my %ordinals;
+ my @dirs;
+ my $value = 1;
+
+ my $error =
+ sub {
+ my ( $msg, $l, $line ) = @_;
+ runtime_error(
+ "Error parsing file \"$input\" line $l:\n" .
+ " $line" .
+ ( $msg ? $msg . "\n" : () )
+ );
+ }; # sub
+
+ my $n = 0; # Line number.
+ foreach my $line ( @bulk ) {
+ ++ $n;
+ if ( 0 ) {
+ } elsif ( $line =~ m{^\s*(?:#|\n)} ) {
+ # Empty line or comment. Skip it.
+ } elsif ( $line =~ m{^\s*%} ) {
+ # A directive.
+ if ( 0 ) {
+ } elsif ( $line =~ m{^\s*%\s*if(n)?def\s+([A-Za-z0-9_]+)\s*(?:#|\n)} ) {
+ my ( $negation, $name ) = ( $1, $2 );
+ my $dir = { n => $n, line => $line, name => $name, value => $value };
+ push( @dirs, $dir );
+ $value = ( $value and ( $negation xor $defs->{ $name } ) );
+ } elsif ( $line =~ m{^\s*%\s*endif\s*(?:#|\n)} ) {
+ if ( not @dirs ) {
+ $error->( "Orphan %endif directive.", $n, $line );
+ }; # if
+ my $dir = pop( @dirs );
+ $value = $dir->{ value };
+ } else {
+ $error->( "Bad directive.", $n, $line );
+ }; # if
+ } elsif ( $line =~ m{^\s*(-)?\s*([A-Za-z0-9_]+)(?:\s+(\d+|DATA))?\s*(?:#|\n)} ) {
+ my ( $obsolete, $entry, $ordinal ) = ( $1, $2, $3 );
+ if ( $value ) {
+ if ( exists( $entries{ $entry } ) ) {
+ $error->( "Entry \"$entry\" has already been specified.", $n, $line );
+ }; # if
+ $entries{ $entry } = { ordinal => $ordinal, obsolete => defined( $obsolete ) };
+ if ( defined( $ordinal ) and $ordinal ne "DATA" ) {
+ if ( $ordinal >= 1000 and $entry =~ m{\A[ok]mp_} ) {
+ $error->( "Ordinal of user-callable entry must be < 1000", $n, $line );
+ }; # if
+ if ( $ordinal >= 1000 and $ordinal < 2000 ) {
+ $error->( "Ordinals between 1000 and 1999 are reserved.", $n, $line );
+ }; # if
+ if ( exists( $ordinals{ $ordinal } ) ) {
+ $error->( "Ordinal $ordinal has already been used.", $n, $line );
+ }; # if
+ $ordinals{ $ordinal } = $entry;
+ }; # if
+ }; # if
+ } else {
+ $error->( "", $n, $line );
+ }; # if
+ }; # foreach
+
+ if ( @dirs ) {
+ my $dir = pop( @dirs );
+ $error->( "Unterminated %if direcive.", $dir->{ n }, $dir->{ line } );
+ }; # while
+
+ return %entries;
+
+}; # sub parse_input
+
+sub process(\%) {
+
+ my ( $entries ) = @_;
+
+ foreach my $entry ( keys( %$entries ) ) {
+ if ( not $entries->{ $entry }->{ obsolete } ) {
+ my $ordinal = $entries->{ $entry }->{ ordinal };
+ if ( $entry =~ m{\A[ok]mp_} ) {
+ if ( not defined( $ordinal ) or $ordinal eq "DATA" ) {
+ runtime_error(
+ "Bad entry \"$entry\": ordinal number is not specified."
+ );
+ }; # if
+ $entries->{ uc( $entry ) } = { ordinal => 1000 + $ordinal };
+ }; # if
+ }; # if
+ }; # foreach
+
+ return %$entries;
+
+}; # sub process
+
+sub generate_output(\%$) {
+
+ my ( $entries, $output ) = @_;
+ my $bulk;
+
+ $bulk = "EXPORTS\n";
+ foreach my $entry ( sort( keys( %$entries ) ) ) {
+ if ( not $entries->{ $entry }->{ obsolete } ) {
+ $bulk .= sprintf( " %-40s ", $entry );
+ my $ordinal = $entries->{ $entry }->{ ordinal };
+ if ( defined( $ordinal ) ) {
+ if ( $ordinal eq "DATA" ) {
+ $bulk .= "DATA";
+ } else {
+ $bulk .= "\@" . $ordinal;
+ }; # if
+ }; # if
+ $bulk .= "\n";
+ }; # if
+ }; # foreach
+ if ( defined( $output ) ) {
+ write_file( $output, \$bulk );
+ } else {
+ print( $bulk );
+ }; # if
+
+}; # sub generate_ouput
+
+#
+# Parse command line.
+#
+
+my $input; # The name of input file.
+my $output; # The name of output file.
+my %defs;
+
+get_options(
+ "output=s" => \$output,
+ "D|define=s" =>
+ sub {
+ my ( $opt_name, $opt_value ) = @_;
+ my ( $def_name, $def_value );
+ if ( $opt_value =~ m{\A(.*?)=(.*)\z} ) {
+ ( $def_name, $def_value ) = ( $1, $2 );
+ } else {
+ ( $def_name, $def_value ) = ( $opt_value, 1 );
+ }; # if
+ $defs{ $def_name } = $def_value;
+ },
+);
+
+if ( @ARGV == 0 ) {
+ cmdline_error( "Not enough arguments." );
+}; # if
+if ( @ARGV > 1 ) {
+ cmdline_error( "Too many arguments." );
+}; # if
+$input = shift( @ARGV );
+
+#
+# Work.
+#
+
+my %data = parse_input( $input, %defs );
+%data = process( %data );
+generate_output( %data, $output );
+exit( 0 );
+
+__END__
+
+#
+# Embedded documentation.
+#
+
+=pod
+
+=head1 NAME
+
+B<generate-def.pl> -- Generate def file for OpenMP RTL.
+
+=head1 SYNOPSIS
+
+B<generate-def.pl> I<OPTION>... I<file>
+
+=head1 OPTIONS
+
+=over
+
+=item B<--define=>I<name>[=I<value>]
+
+=item B<-D> I<name>[=I<value>]
+
+Define specified name. If I<value> is omitted, I<name> is defined to 1. If I<value> is 0 or empty,
+name is B<not> defined.
+
+=item B<--output=>I<file>
+
+=item B<-o> I<file>
+
+Specify output file name. If option is not present, result is printed to stdout.
+
+=item B<--doc>
+
+=item B<--manual>
+
+Print full help message and exit.
+
+=item B<--help>
+
+Print short help message and exit.
+
+=item B<--usage>
+
+Print very short usage message and exit.
+
+=item B<--verbose>
+
+Do print informational messages.
+
+=item B<--version>
+
+Print version and exit.
+
+=item B<--quiet>
+
+Work quiet, do not print informational messages.
+
+=back
+
+=head1 ARGUMENTS
+
+=over
+
+=item I<file>
+
+A name of input file.
+
+=back
+
+=head1 DESCRIPTION
+
+The script reads input file, process conditional directives, checks content for consistency, and
+generates ouptput file suitable for linker.
+
+=head2 Input File Format
+
+=over
+
+=item Comments
+
+ # It's a comment.
+
+Comments start with C<#> symbol and continue to the end of line.
+
+=item Conditional Directives
+
+ %ifdef name
+ %ifndef name
+ %endif
+
+A part of file surrounded by C<%ifdef I<name>> and C<%endif> directives is a conditional part -- it
+has effect only if I<name> is defined in the comman line by B<--define> option. C<%ifndef> is a
+negated version of C<%ifdef> -- conditional part has an effect only if I<name> is B<not> defined.
+
+Conditional parts may be nested.
+
+=item Export Definitions
+
+ symbol
+ symbol ordinal
+ symbol DATA
+
+Symbols starting with C<omp_> or C<kmp_> must have ordinal specified. They are subjects for special
+processing: each symbol generates two output lines: original one and upper case version. The ordinal
+number of the second is original ordinal increased by 1000.
+
+=item Obsolete Symbols
+
+ - symbol
+ - symbol ordinal
+ - symbol DATA
+
+Obsolete symbols look like export definitions prefixed with minus sign. Obsolete symbols do not
+affect the output, but obsolete symbols and their ordinals cannot be (re)used in export definitions.
+
+=back
+
+=head1 EXAMPLES
+
+ $ generate-def.pl -D stub -D USE_TCHECK=0 -o libguide.def dllexport
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/lib/Build.pm b/final/runtime/tools/lib/Build.pm
new file mode 100644
index 0000000..cf67156
--- /dev/null
+++ b/final/runtime/tools/lib/Build.pm
@@ -0,0 +1,264 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+package Build;
+
+use strict;
+use warnings;
+
+use Cwd qw{};
+
+use LibOMP;
+use tools;
+use Uname;
+use Platform ":vars";
+
+my $host = Uname::host_name();
+my $root = $ENV{ LIBOMP_WORK };
+my $tmp = $ENV{ LIBOMP_TMP };
+my $out = $ENV{ LIBOMP_EXPORTS };
+
+my @jobs;
+our $start = time();
+
+# --------------------------------------------------------------------------------------------------
+# Helper functions.
+# --------------------------------------------------------------------------------------------------
+
+# tstr -- Time string. Returns string "yyyy-dd-mm hh:mm:ss UTC".
+sub tstr(;$) {
+ my ( $time ) = @_;
+ if ( not defined( $time ) ) {
+ $time = time();
+ }; # if
+ my ( $sec, $min, $hour, $day, $month, $year ) = gmtime( $time );
+ $month += 1;
+ $year += 1900;
+ my $str = sprintf( "%04d-%02d-%02d %02d:%02d:%02d UTC", $year, $month, $day, $hour, $min, $sec );
+ return $str;
+}; # sub tstr
+
+# dstr -- Duration string. Returns string "hh:mm:ss".
+sub dstr($) {
+ # Get time in seconds and format it as time in hours, minutes, seconds.
+ my ( $sec ) = @_;
+ my ( $h, $m, $s );
+ $h = int( $sec / 3600 );
+ $sec = $sec - $h * 3600;
+ $m = int( $sec / 60 );
+ $sec = $sec - $m * 60;
+ $s = int( $sec );
+ $sec = $sec - $s;
+ return sprintf( "%02d:%02d:%02d", $h, $m, $s );
+}; # sub dstr
+
+# rstr -- Result string.
+sub rstr($) {
+ my ( $rc ) = @_;
+ return ( $rc == 0 ? "+++ Success +++" : "--- Failure ---" );
+}; # sub rstr
+
+sub shorter($;$) {
+ # Return shorter variant of path -- either absolute or relative.
+ my ( $path, $base ) = @_;
+ my $abs = abs_path( $path );
+ my $rel = rel_path( $path, $base );
+ if ( $rel eq "" ) {
+ $rel = ".";
+ }; # if
+ $path = ( length( $rel ) < length( $abs ) ? $rel : $abs );
+ if ( $target_os eq "win" ) {
+ $path =~ s{\\}{/}g;
+ }; # if
+ return $path;
+}; # sub shorter
+
+sub tee($$) {
+
+ my ( $action, $file ) = @_;
+ my $pid = 0;
+
+ my $save_stdout = Symbol::gensym();
+ my $save_stderr = Symbol::gensym();
+
+ # --- redirect stdout ---
+ STDOUT->flush();
+ # Save stdout in $save_stdout.
+ open( $save_stdout, ">&" . STDOUT->fileno() )
+ or die( "Cannot dup filehandle: $!; stopped" );
+ # Redirect stdout to tee or to file.
+ if ( $tools::verbose ) {
+ $pid = open( STDOUT, "| tee -a \"$file\"" )
+ or die "Cannot open pipe to \"tee\": $!; stopped";
+ } else {
+ open( STDOUT, ">>$file" )
+ or die "Cannot open file \"$file\" for writing: $!; stopped";
+ }; # if
+
+ # --- redirect stderr ---
+ STDERR->flush();
+ # Save stderr in $save_stderr.
+ open( $save_stderr, ">&" . STDERR->fileno() )
+ or die( "Cannot dup filehandle: $!; stopped" );
+ # Redirect stderr to stdout.
+ open( STDERR, ">&" . STDOUT->fileno() )
+ or die( "Cannot dup filehandle: $!; stopped" );
+
+ # Perform actions.
+ $action->();
+
+ # --- restore stderr ---
+ STDERR->flush();
+ # Restore stderr from $save_stderr.
+ open( STDERR, ">&" . $save_stderr->fileno() )
+ or die( "Cannot dup filehandle: $!; stopped" );
+ # Close $save_stderr.
+ $save_stderr->close() or die ( "Cannot close filehandle: $!; stopped" );
+
+ # --- restore stdout ---
+ STDOUT->flush();
+ # Restore stdout from $save_stdout.
+ open( STDOUT, ">&" . $save_stdout->fileno() )
+ or die( "Cannot dup filehandle: $!; stopped" );
+ # Close $save_stdout.
+ $save_stdout->close() or die ( "Cannot close filehandle: $!; stopped" );
+
+ # Wait for the child tee process, otherwise output of make and build.pl interleaves.
+ if ( $pid != 0 ) {
+ waitpid( $pid, 0 );
+ }; # if
+
+}; # sub tee
+
+sub log_it($$@) {
+ my ( $title, $format, @args ) = @_;
+ my $message = sprintf( $format, @args );
+ my $progress = cat_file( $tmp, sprintf( "%s-%s.log", $target_platform, Uname::host_name() ) );
+ if ( $title ne "" and $message ne "" ) {
+ my $line = sprintf( "%-15s : %s\n", $title, $message );
+ info( $line );
+ write_file( $progress, tstr() . ": " . $line, -append => 1 );
+ } else {
+ write_file( $progress, "\n", -append => 1 );
+ }; # if
+}; # sub log_it
+
+sub progress($$@) {
+ my ( $title, $format, @args ) = @_;
+ log_it( $title, $format, @args );
+}; # sub progress
+
+sub summary() {
+ my $total = @jobs;
+ my $success = 0;
+ my $finish = time();
+ foreach my $job ( @jobs ) {
+ my ( $build_dir, $rc ) = ( $job->{ build_dir }, $job->{ rc } );
+ progress( rstr( $rc ), "%s", $build_dir );
+ if ( $rc == 0 ) {
+ ++ $success;
+ }; # if
+ }; # foreach $job
+ my $failure = $total - $success;
+ progress( "Successes", "%3d of %3d", $success, $total );
+ progress( "Failures", "%3d of %3d", $failure, $total );
+ progress( "Time elapsed", " %s", dstr( $finish - $start ) );
+ progress( "Overall result", "%s", rstr( $failure ) );
+ return $failure;
+}; # sub summary
+
+# --------------------------------------------------------------------------------------------------
+# Worker functions.
+# --------------------------------------------------------------------------------------------------
+
+sub init() {
+ make_dir( $tmp );
+}; # sub init
+
+sub clean(@) {
+ # Clean directories.
+ my ( @dirs ) = @_;
+ my $exit = 0;
+ # Mimisc makefile -- print a command.
+ print( "rm -f -r " . join( " ", map( shorter( $_ ) . "/*", @dirs ) ) . "\n" );
+ $exit =
+ execute(
+ [ $^X, cat_file( $ENV{ LIBOMP_WORK }, "tools", "clean-dir.pl" ), @dirs ],
+ -ignore_status => 1,
+ ( $tools::verbose ? () : ( -stdout => undef, -stderr => "" ) ),
+ );
+ return $exit;
+}; # sub clean
+
+sub make($$$) {
+ # Change dir to build one and run make.
+ my ( $job, $clean, $marker ) = @_;
+ my $dir = $job->{ build_dir };
+ my $makefile = $job->{ makefile };
+ my $args = $job->{ make_args };
+ my $cwd = Cwd::cwd();
+ my $width = -10;
+
+ my $exit;
+ $dir = cat_dir( $tmp, $dir );
+ make_dir( $dir );
+ change_dir( $dir );
+
+ my $actions =
+ sub {
+ my $start = time();
+ $makefile = shorter( $makefile );
+ print( "-" x 79, "\n" );
+ printf( "%${width}s: %s\n", "Started", tstr( $start ) );
+ printf( "%${width}s: %s\n", "Root dir", $root );
+ printf( "%${width}s: %s\n", "Build dir", shorter( $dir, $root ) );
+ printf( "%${width}s: %s\n", "Makefile", $makefile );
+ print( "-" x 79, "\n" );
+ {
+ # Use shorter LIBOMP_WORK to have shorter command lines.
+ # Note: Some tools may not work if current dir is changed.
+ local $ENV{ LIBOMP_WORK } = shorter( $ENV{ LIBOMP_WORK } );
+ $exit =
+ execute(
+ [
+ "make",
+ "-r",
+ "-f", $makefile,
+ "arch=" . $target_arch,
+ "marker=$marker",
+ @$args
+ ],
+ -ignore_status => 1
+ );
+ if ( $clean and $exit == 0 ) {
+ $exit = clean( $dir );
+ }; # if
+ }
+ my $finish = time();
+ print( "-" x 79, "\n" );
+ printf( "%${width}s: %s\n", "Finished", tstr( $finish ) );
+ printf( "%${width}s: %s\n", "Elapsed", dstr( $finish - $start ) );
+ printf( "%${width}s: %s\n", "Result", rstr( $exit ) );
+ print( "-" x 79, "\n" );
+ print( "\n" );
+ }; # sub
+ tee( $actions, "build.log" );
+
+ change_dir( $cwd );
+
+ # Save completed job to be able print summary later.
+ $job->{ rc } = $exit;
+ push( @jobs, $job );
+
+ return $exit;
+
+}; # sub make
+
+1;
diff --git a/final/runtime/tools/lib/LibOMP.pm b/final/runtime/tools/lib/LibOMP.pm
new file mode 100644
index 0000000..012767e
--- /dev/null
+++ b/final/runtime/tools/lib/LibOMP.pm
@@ -0,0 +1,85 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+package LibOMP;
+
+use strict;
+use warnings;
+
+use tools;
+
+sub empty($) {
+ my ( $var ) = @_;
+ return (not exists($ENV{$var})) or (not defined($ENV{$var})) or ($ENV{$var} eq "");
+}; # sub empty
+
+my ( $base, $out, $tmp );
+if ( empty( "LIBOMP_WORK" ) ) {
+ # $FindBin::Bin is not used intentionally because it gives real path. I want to use absolute,
+ # but not real one (real path does not contain symlinks while absolute path may contain
+ # symlinks).
+ $base = get_dir( get_dir( abs_path( $0 ) ) );
+} else {
+ $base = abs_path( $ENV{ LIBOMP_WORK } );
+}; # if
+
+if ( empty( "LIBOMP_EXPORTS" ) ) {
+ $out = cat_dir( $base, "exports" );
+} else {
+ $out = abs_path( $ENV{ LIBOMP_EXPORTS } );
+}; # if
+
+if ( empty( "LIBOMP_TMP" ) ) {
+ $tmp = cat_dir( $base, "tmp" );
+} else {
+ $tmp = abs_path( $ENV{ LIBOMP_TMP } );
+}; # if
+
+$ENV{ LIBOMP_WORK } = $base;
+$ENV{ LIBOMP_EXPORTS } = $out;
+$ENV{ LIBOMP_TMP } = $tmp;
+
+return 1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<LibOMP.pm> --
+
+=head1 SYNOPSIS
+
+ use FindBin;
+ use lib "$FindBin::Bin/lib";
+ use LibOMP;
+
+ $ENV{ LIBOMP_WORK }
+ $ENV{ LIBOMP_TMP }
+ $ENV{ LIBOMP_EXPORTS }
+
+=head1 DESCRIPTION
+
+The module checks C<LIBOMP_WORK>, C<LIBOMP_EXPORTS>, and C<LIBOMP_TMP> environments variables.
+If a variable set, the module makes sure it is absolute. If a variable does not exist, the module
+sets it to default value.
+
+Default value for C<LIBOMP_EXPORTS> is C<$LIBOMP_WORK/exports>, for C<LIBOMP_TMP> --
+C<$LIBOMP_WORK/tmp>.
+
+Value for C<LIBOMP_WORK> is guessed. The module assumes the script (which uses the module) is
+located in C<tools/> directory of libomp directory tree, and uses path of the script to calculate
+C<LIBOMP_WORK>,
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/lib/Platform.pm b/final/runtime/tools/lib/Platform.pm
new file mode 100644
index 0000000..6a2b3b6
--- /dev/null
+++ b/final/runtime/tools/lib/Platform.pm
@@ -0,0 +1,473 @@
+#
+# This is not a runnable script, it is a Perl module, a collection of variables, subroutines, etc.
+# to be used in Perl scripts.
+#
+# To get help about exported variables and subroutines, execute the following command:
+#
+# perldoc Platform.pm
+#
+# or see POD (Plain Old Documentation) imbedded to the source...
+#
+#
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+package Platform;
+
+use strict;
+use warnings;
+
+use base "Exporter";
+
+use Uname;
+
+my @vars;
+
+BEGIN {
+ @vars = qw{ $host_arch $host_os $host_platform $target_arch $target_mic_arch $target_os $target_platform };
+}
+
+our $VERSION = "0.014";
+our @EXPORT = qw{};
+our @EXPORT_OK = ( qw{ canon_arch canon_os canon_mic_arch legal_arch arch_opt }, @vars );
+our %EXPORT_TAGS = ( all => [ @EXPORT_OK ], vars => \@vars );
+
+# Canonize architecture name.
+sub canon_arch($) {
+ my ( $arch ) = @_;
+ if ( defined( $arch ) ) {
+ if ( $arch =~ m{\A\s*(?:32|IA-?32|IA-?32 architecture|i[3456]86|x86)\s*\z}i ) {
+ $arch = "32";
+ } elsif ( $arch =~ m{\A\s*(?:48|(?:ia)?32e|Intel\s*64|Intel\(R\)\s*64|x86[_-]64|x64|AMD64)\s*\z}i ) {
+ $arch = "32e";
+ } elsif ( $arch =~ m{\Aarm(?:v7\D*)?\z} ) {
+ $arch = "arm";
+ } elsif ( $arch =~ m{\Appc64le} ) {
+ $arch = "ppc64le";
+ } elsif ( $arch =~ m{\Appc64} ) {
+ $arch = "ppc64";
+ } elsif ( $arch =~ m{\Aaarch64} ) {
+ $arch = "aarch64";
+ } elsif ( $arch =~ m{\Amic} ) {
+ $arch = "mic";
+ } else {
+ $arch = undef;
+ }; # if
+ }; # if
+ return $arch;
+}; # sub canon_arch
+
+# Canonize Intel(R) Many Integrated Core Architecture name.
+sub canon_mic_arch($) {
+ my ( $mic_arch ) = @_;
+ if ( defined( $mic_arch ) ) {
+ if ( $mic_arch =~ m{\Aknf} ) {
+ $mic_arch = "knf";
+ } elsif ( $mic_arch =~ m{\Aknc}) {
+ $mic_arch = "knc";
+ } elsif ( $mic_arch =~ m{\Aknl} ) {
+ $mic_arch = "knl";
+ } else {
+ $mic_arch = undef;
+ }; # if
+ }; # if
+ return $mic_arch;
+}; # sub canon_mic_arch
+
+{ # Return legal approved architecture name.
+ my %legal = (
+ "32" => "IA-32 architecture",
+ "32e" => "Intel(R) 64",
+ "arm" => "ARM",
+ "aarch64" => "AArch64",
+ "mic" => "Intel(R) Many Integrated Core Architecture",
+ );
+
+ sub legal_arch($) {
+ my ( $arch ) = @_;
+ $arch = canon_arch( $arch );
+ if ( defined( $arch ) ) {
+ $arch = $legal{ $arch };
+ }; # if
+ return $arch;
+ }; # sub legal_arch
+}
+
+{ # Return architecture name suitable for Intel compiler setup scripts.
+ my %option = (
+ "32" => "ia32",
+ "32e" => "intel64",
+ "64" => "ia64",
+ "arm" => "arm",
+ "aarch64" => "aarch",
+ "mic" => "intel64",
+ );
+
+ sub arch_opt($) {
+ my ( $arch ) = @_;
+ $arch = canon_arch( $arch );
+ if ( defined( $arch ) ) {
+ $arch = $option{ $arch };
+ }; # if
+ return $arch;
+ }; # sub arch_opt
+}
+
+# Canonize OS name.
+sub canon_os($) {
+ my ( $os ) = @_;
+ if ( defined( $os ) ) {
+ if ( $os =~ m{\A\s*(?:Linux|lin|l)\s*\z}i ) {
+ $os = "lin";
+ } elsif ( $os =~ m{\A\s*(?:Mac(?:\s*OS(?:\s*X)?)?|mac|m|Darwin)\s*\z}i ) {
+ $os = "mac";
+ } elsif ( $os =~ m{\A\s*(?:Win(?:dows)?(?:(?:_|\s*)?(?:NT|XP|95|98|2003))?|w)\s*\z}i ) {
+ $os = "win";
+ } else {
+ $os = undef;
+ }; # if
+ }; # if
+ return $os;
+}; # sub canon_os
+
+my ( $_host_os, $_host_arch, $_target_os, $_target_arch, $_target_mic_arch, $_default_mic_arch);
+
+# Set the default mic-arch value.
+$_default_mic_arch = "knc";
+
+sub set_target_arch($) {
+ my ( $arch ) = canon_arch( $_[ 0 ] );
+ if ( defined( $arch ) ) {
+ $_target_arch = $arch;
+ $ENV{ LIBOMP_ARCH } = $arch;
+ }; # if
+ return $arch;
+}; # sub set_target_arch
+
+sub set_target_mic_arch($) {
+ my ( $mic_arch ) = canon_mic_arch( $_[ 0 ] );
+ if ( defined( $mic_arch ) ) {
+ $_target_mic_arch = $mic_arch;
+ $ENV{ LIBOMP_MIC_ARCH } = $mic_arch;
+ }; # if
+ return $mic_arch;
+}; # sub set_target_mic_arch
+
+sub set_target_os($) {
+ my ( $os ) = canon_os( $_[ 0 ] );
+ if ( defined( $os ) ) {
+ $_target_os = $os;
+ $ENV{ LIBOMP_OS } = $os;
+ }; # if
+ return $os;
+}; # sub set_target_os
+
+sub target_options() {
+ my @options = (
+ "target-os|os=s" =>
+ sub {
+ set_target_os( $_[ 1 ] ) or
+ die "Bad value of --target-os option: \"$_[ 1 ]\"\n";
+ },
+ "target-architecture|targert-arch|architecture|arch=s" =>
+ sub {
+ set_target_arch( $_[ 1 ] ) or
+ die "Bad value of --target-architecture option: \"$_[ 1 ]\"\n";
+ },
+ "target-mic-architecture|targert-mic-arch|mic-architecture|mic-arch=s" =>
+ sub {
+ set_target_mic_arch( $_[ 1 ] ) or
+ die "Bad value of --target-mic-architecture option: \"$_[ 1 ]\"\n";
+ },
+ );
+ return @options;
+}; # sub target_options
+
+# Detect host arch.
+{
+ my $hardware_platform = Uname::hardware_platform();
+ if ( 0 ) {
+ } elsif ( $hardware_platform eq "i386" ) {
+ $_host_arch = "32";
+ } elsif ( $hardware_platform eq "ia64" ) {
+ $_host_arch = "64";
+ } elsif ( $hardware_platform eq "x86_64" ) {
+ $_host_arch = "32e";
+ } elsif ( $hardware_platform eq "arm" ) {
+ $_host_arch = "arm";
+ } elsif ( $hardware_platform eq "ppc64le" ) {
+ $_host_arch = "ppc64le";
+ } elsif ( $hardware_platform eq "ppc64" ) {
+ $_host_arch = "ppc64";
+ } elsif ( $hardware_platform eq "aarch64" ) {
+ $_host_arch = "aarch64";
+ } else {
+ die "Unsupported host hardware platform: \"$hardware_platform\"; stopped";
+ }; # if
+}
+
+# Detect host OS.
+{
+ my $operating_system = Uname::operating_system();
+ if ( 0 ) {
+ } elsif ( $operating_system eq "GNU/Linux" ) {
+ $_host_os = "lin";
+ } elsif ( $operating_system eq "FreeBSD" ) {
+ # Host OS resembles Linux.
+ $_host_os = "lin";
+ } elsif ( $operating_system eq "NetBSD" ) {
+ # Host OS resembles Linux.
+ $_host_os = "lin";
+ } elsif ( $operating_system eq "Darwin" ) {
+ $_host_os = "mac";
+ } elsif ( $operating_system eq "MS Windows" ) {
+ $_host_os = "win";
+ } else {
+ die "Unsupported host operating system: \"$operating_system\"; stopped";
+ }; # if
+}
+
+# Detect target arch.
+if ( defined( $ENV{ LIBOMP_ARCH } ) ) {
+ # Use arch specified in LIBOMP_ARCH.
+ $_target_arch = canon_arch( $ENV{ LIBOMP_ARCH } );
+ if ( not defined( $_target_arch ) ) {
+ die "Unknown architecture specified in LIBOMP_ARCH environment variable: \"$ENV{ LIBOMP_ARCH }\"";
+ }; # if
+} else {
+ # Otherwise use host architecture.
+ $_target_arch = $_host_arch;
+}; # if
+$ENV{ LIBOMP_ARCH } = $_target_arch;
+
+# Detect target Intel(R) Many Integrated Core Architecture.
+if ( defined( $ENV{ LIBOMP_MIC_ARCH } ) ) {
+ # Use mic arch specified in LIBOMP_MIC_ARCH.
+ $_target_mic_arch = canon_mic_arch( $ENV{ LIBOMP_MIC_ARCH } );
+ if ( not defined( $_target_mic_arch ) ) {
+ die "Unknown architecture specified in LIBOMP_MIC_ARCH environment variable: \"$ENV{ LIBOMP_MIC_ARCH }\"";
+ }; # if
+} else {
+ # Otherwise use default Intel(R) Many Integrated Core Architecture.
+ $_target_mic_arch = $_default_mic_arch;
+}; # if
+$ENV{ LIBOMP_MIC_ARCH } = $_target_mic_arch;
+
+# Detect target OS.
+if ( defined( $ENV{ LIBOMP_OS } ) ) {
+ # Use OS specified in LIBOMP_OS.
+ $_target_os = canon_os( $ENV{ LIBOMP_OS } );
+ if ( not defined( $_target_os ) ) {
+ die "Unknown OS specified in LIBOMP_OS environment variable: \"$ENV{ LIBOMP_OS }\"";
+ }; # if
+} else {
+ # Otherwise use host OS.
+ $_target_os = $_host_os;
+}; # if
+$ENV{ LIBOMP_OS } = $_target_os;
+
+use vars @vars;
+
+tie( $host_arch, "Platform::host_arch" );
+tie( $host_os, "Platform::host_os" );
+tie( $host_platform, "Platform::host_platform" );
+tie( $target_arch, "Platform::target_arch" );
+tie( $target_mic_arch, "Platform::target_mic_arch" );
+tie( $target_os, "Platform::target_os" );
+tie( $target_platform, "Platform::target_platform" );
+
+{ package Platform::base;
+
+ use Carp;
+
+ use Tie::Scalar;
+ use base "Tie::StdScalar";
+
+ sub STORE {
+ my $self = shift( @_ );
+ croak( "Modifying \$" . ref( $self ) . " is not allowed; stopped" );
+ }; # sub STORE
+
+} # package Platform::base
+
+{ package Platform::host_arch;
+ use base "Platform::base";
+ sub FETCH {
+ return $_host_arch;
+ }; # sub FETCH
+} # package Platform::host_arch
+
+{ package Platform::host_os;
+ use base "Platform::base";
+ sub FETCH {
+ return $_host_os;
+ }; # sub FETCH
+} # package Platform::host_os
+
+{ package Platform::host_platform;
+ use base "Platform::base";
+ sub FETCH {
+ return "${_host_os}_${_host_arch}";
+ }; # sub FETCH
+} # package Platform::host_platform
+
+{ package Platform::target_arch;
+ use base "Platform::base";
+ sub FETCH {
+ return $_target_arch;
+ }; # sub FETCH
+} # package Platform::target_arch
+
+{ package Platform::target_mic_arch;
+ use base "Platform::base";
+ sub FETCH {
+ return $_target_mic_arch;
+ }; # sub FETCH
+} # package Platform::target_mic_arch
+
+{ package Platform::target_os;
+ use base "Platform::base";
+ sub FETCH {
+ return $_target_os;
+ }; # sub FETCH
+} # package Platform::target_os
+
+{ package Platform::target_platform;
+ use base "Platform::base";
+ sub FETCH {
+ if ($_target_arch eq "mic") {
+ return "${_target_os}_${_target_mic_arch}";
+ } else {
+ return "${_target_os}_${_target_arch}";
+ }
+ }; # sub FETCH
+} # package Platform::target_platform
+
+
+return 1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<Platform.pm> -- Few subroutines to get OS, architecture and platform name in form suitable for
+naming files, directories, macros, etc.
+
+=head1 SYNOPSIS
+
+ use Platform ":all";
+ use tools;
+
+ my $arch = canon_arch( "em64T" ); # Returns "32e".
+ my $legal = legal_arch( "em64t" ); # Returns "Intel(R) 64".
+ my $option = arch_opt( "em64t" ); # Returns "intel64".
+ my $os = canon_os( "Windows NT" ); # Returns "win".
+
+ print( $host_arch, $host_os, $host_platform );
+ print( $taregt_arch, $target_os, $target_platform );
+
+ tools::get_options(
+ Platform::target_options(),
+ ...
+ );
+
+
+=head1 DESCRIPTION
+
+Environment variable LIBOMP_OS specifies target OS to report. If LIBOMP_OS id not defined,
+the script assumes host OS is target OS.
+
+Environment variable LIBOMP_ARCH specifies target architecture to report. If LIBOMP_ARCH is not defined,
+the script assumes host architecture is target one.
+
+=head2 Functions.
+
+=over
+
+=item B<canon_arch( $arch )>
+
+Input string is an architecture name to canonize. The function recognizes many variants, for example:
+C<32e>, C<Intel64>, C<Intel(R) 64>, etc. Returned string is a canononized architecture name,
+one of: C<32>, C<32e>, C<64>, C<arm>, C<ppc64le>, C<ppc64>, C<mic>, or C<undef> is input string is not recognized.
+
+=item B<legal_arch( $arch )>
+
+Input string is architecture name. The function recognizes the same variants as C<arch_canon()> does.
+Returned string is a name approved by Intel Legal, one of: C<IA-32 architecture>, C<Intel(R) 64>
+or C<undef> if input string is not recognized.
+
+=item B<arch_opt( $arch )>
+
+Input string is architecture name. The function recognizes the same variants as C<arch_canon()> does.
+Returned string is an architecture name suitable for passing to compiler setup scripts
+(e. g. C<iccvars.sh>), one of: C<IA-32 architecture>, C<Intel(R) 64> or C<undef> if input string is not
+recognized.
+
+=item B<canon_os( $os )>
+
+Input string is OS name to canonize. The function recognizes many variants, for example: C<mac>, C<OS X>, etc. Returned string is a canonized OS name, one of: C<lin>,
+C<mac>, C<win>, or C<undef> is input string is not recognized.
+
+=item B<target_options()>
+
+Returns array suitable for passing to C<tools::get_options()> to let a script recognize
+C<--target-architecture=I<str>> and C<--target-os=I<str>> options. Typical usage is:
+
+ use tools;
+ use Platform;
+
+ my ( $os, $arch, $platform ); # Global variables, not initialized.
+
+ ...
+
+ get_options(
+ Platform::target_options(), # Let script recognize --target-os and --target-arch options.
+ ...
+ );
+ # Initialize variabls after parsing command line.
+ ( $os, $arch, $platform ) = ( Platform::target_os(), Platform::target_arch(), Platform::target_platform() );
+
+=back
+
+=head2 Variables
+
+=item B<$host_arch>
+
+Canonized name of host architecture.
+
+=item B<$host_os>
+
+Canonized name of host OS.
+
+=item B<$host_platform>
+
+Host platform name (concatenated canonized OS name, underscore, and canonized architecture name).
+
+=item B<$target_arch>
+
+Canonized name of target architecture.
+
+=item B<$target_os>
+
+Canonized name of target OS.
+
+=item B<$target_platform>
+
+Target platform name (concatenated canonized OS name, underscore, and canonized architecture name).
+
+=back
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/lib/Uname.pm b/final/runtime/tools/lib/Uname.pm
new file mode 100644
index 0000000..415070b
--- /dev/null
+++ b/final/runtime/tools/lib/Uname.pm
@@ -0,0 +1,635 @@
+#
+# This is not a runnable script, it is a Perl module, a collection of variables, subroutines, etc.
+# To get help about exported variables and subroutines, execute the following command:
+#
+# perldoc Uname.pm
+#
+# or see POD (Plain Old Documentation) embedded to the source...
+#
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+package Uname;
+
+use strict;
+use warnings;
+use warnings::register;
+use Exporter;
+
+use POSIX;
+use File::Glob ":glob";
+use Net::Domain qw{};
+
+# Following code does not work with Perl 5.6 on Linux* OS and Windows* OS:
+#
+# use if $^O eq "darwin", tools => qw{};
+#
+# The workaround for Perl 5.6:
+#
+BEGIN {
+ if ( $^O eq "darwin" or $^O eq "linux" ) {
+ require tools;
+ import tools;
+ }; # if
+ if ( $^O eq "MSWin32" ) {
+ require Win32;
+ }; # if
+}; # BEGIN
+
+my $mswin = qr{\A(?:MSWin32|Windows_NT)\z};
+
+my @posix = qw{ kernel_name fqdn kernel_release kernel_version machine };
+ # Properties supported by POSIX::uname().
+my @linux =
+ qw{ processor hardware_platform operating_system };
+ # Properties reported by uname in Linux* OS.
+my @base = ( @posix, @linux );
+ # Base properties.
+my @aux =
+ (
+ qw{ host_name domain_name },
+ map( "operating_system_$_", qw{ name release codename description } )
+ );
+ # Auxiliary properties.
+my @all = ( @base, @aux );
+ # All the properties.
+my @meta = qw{ base_names all_names value };
+ # Meta functions.
+
+our $VERSION = "0.07";
+our @ISA = qw{ Exporter };
+our @EXPORT = qw{};
+our @EXPORT_OK = ( @all, @meta );
+our %EXPORT_TAGS =
+ (
+ base => [ @base ],
+ all => [ @all ],
+ meta => [ @meta ],
+ );
+
+my %values;
+ # Hash of values. Some values are strings, some may be references to code which should be
+ # evaluated to get real value. This trick is implemented because call to Net::Domain::hostfqdn()
+ # is relatively slow.
+
+# Get values from POSIX::uname().
+@values{ @posix } = POSIX::uname();
+
+# On some systems POSIX::uname() returns "short" node name (without domain name). To be consistent
+# on all systems, we will get node name from alternative source.
+if ( $^O =~ m/cygwin/i ) {
+ # Function from Net::Domain module works well, but on Cygwin it prints to
+ # stderr "domainname: not found". So we will use environment variables for now.
+ $values{ fqdn } = lc( $ENV{ COMPUTERNAME } . "." . $ENV{ USERDNSDOMAIN } );
+} else {
+ # On systems other than Cygwin, let us use Net::Domain::hostfqdn(), but do it only node name
+ # is really requested.
+ $values{ fqdn } =
+ sub {
+ my $fqdn = Net::Domain::hostfqdn(); # "fqdn" stands for "fully qualified doamain name".
+ # On some systems POSIX::uname() and Net::Domain::hostfqdn() reports different names.
+ # Let us issue a warning if they significantly different. Names are insignificantly
+ # different if POSIX::uname() matches the beginning of Net::Domain::hostfqdn().
+ if (
+ $fqdn eq substr( $fqdn, 0, length( $fqdn ) )
+ &&
+ (
+ length( $fqdn ) == length( $fqdn )
+ ||
+ substr( $fqdn, length( $fqdn ), 1 ) eq "."
+ )
+ ) {
+ # Ok.
+ } else {
+ warnings::warnif(
+ "POSIX::uname() and Net::Domain::hostfqdn() reported different names: " .
+ "\"$values{ fqdn }\" and \"$fqdn\" respectively\n"
+ );
+ }; # if
+ return $fqdn;
+ }; # sub
+}; # if
+
+if ( $^O =~ $mswin ) {
+ if (
+ $values{ machine } =~ m{\A(?:x86|[56]86)\z}
+ and
+ exists( $ENV{ PROCESSOR_ARCHITECTURE } ) and $ENV{ PROCESSOR_ARCHITECTURE } eq "x86"
+ and
+ exists( $ENV{ PROCESSOR_ARCHITEW6432 } )
+ ) {
+ if ( $ENV{ PROCESSOR_ARCHITEW6432 } eq "AMD64" ) {
+ $values{ machine } = "x86_64";
+ }; # if
+ }; # if
+}; # if
+
+# Some values are not returned by POSIX::uname(), let us compute them.
+
+# processor.
+$values{ processor } = $values{ machine };
+
+# hardware_platform.
+if ( 0 ) {
+} elsif ( $^O eq "linux" or $^O eq "freebsd" or $^O eq "netbsd" ) {
+ if ( 0 ) {
+ } elsif ( $values{ machine } =~ m{\Ai[3456]86\z} ) {
+ $values{ hardware_platform } = "i386";
+ } elsif ( $values{ machine } =~ m{\A(x86_64|amd64)\z} ) {
+ $values{ hardware_platform } = "x86_64";
+ } elsif ( $values{ machine } =~ m{\Aarmv7\D*\z} ) {
+ $values{ hardware_platform } = "arm";
+ } elsif ( $values{ machine } =~ m{\Appc64le\z} ) {
+ $values{ hardware_platform } = "ppc64le";
+ } elsif ( $values{ machine } =~ m{\Appc64\z} ) {
+ $values{ hardware_platform } = "ppc64";
+ } elsif ( $values{ machine } =~ m{\Aaarch64\z} ) {
+ $values{ hardware_platform } = "aarch64";
+ } else {
+ die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";
+ }; # if
+} elsif ( $^O eq "darwin" ) {
+ if ( 0 ) {
+ } elsif ( $values{ machine } eq "x86" or $values{ machine } eq "i386" ) {
+ $values{ hardware_platform } =
+ sub {
+ my $platform = "i386";
+ # Some OSes on Intel(R) 64 still reports "i386" machine. Verify it by using
+ # the value returned by 'sysctl -n hw.optional.x86_64'. On Intel(R) 64-bit systems the
+ # value == 1; on 32-bit systems the 'hw.optional.x86_64' property either does not exist
+ # or the value == 0. The path variable does not contain a path to sysctl when
+ # started by crontab.
+ my $sysctl = ( which( "sysctl" ) or "/usr/sbin/sysctl" );
+ my $output;
+ debug( "Executing $sysctl..." );
+ execute( [ $sysctl, "-n", "hw.optional.x86_64" ], -stdout => \$output, -stderr => undef );
+ chomp( $output );
+ if ( 0 ) {
+ } elsif ( "$output" eq "" or "$output" eq "0" ) {
+ $platform = "i386";
+ } elsif ( "$output" eq "1" ) {
+ $platform = "x86_64";
+ } else {
+ die "Unsupported value (\"$output\") returned by \"$sysctl -n hw.optional.x86_64\"; stopped";
+ }; # if
+ return $platform;
+ }; # sub {
+ } elsif ( $values{ machine } eq "x86_64" ) {
+ # Some OS X* versions report "x86_64".
+ $values{ hardware_platform } = "x86_64";
+ } else {
+ die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";
+ }; # if
+} elsif ( $^O =~ $mswin ) {
+ if ( 0 ) {
+ } elsif ( $values{ machine } =~ m{\A(?:x86|[56]86)\z} ) {
+ $values{ hardware_platform } = "i386";
+ } elsif ( $values{ machine } eq "x86_64" or $values{ machine } eq "amd64" ) {
+ # ActivePerl for IA-32 architecture returns "x86_64", while ActivePerl for Intel(R) 64 returns "amd64".
+ $values{ hardware_platform } = "x86_64";
+ } else {
+ die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";
+ }; # if
+} elsif ( $^O eq "cygwin" ) {
+ if ( 0 ) {
+ } elsif ( $values{ machine } =~ m{\Ai[3456]86\z} ) {
+ $values{ hardware_platform } = "i386";
+ } elsif ( $values{ machine } eq "x86_64" ) {
+ $values{ hardware_platform } = "x86_64";
+ } else {
+ die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";
+ }; # if
+} else {
+ die "Unsupported OS (\"$^O\"); stopped";
+}; # if
+
+# operating_system.
+if ( 0 ) {
+} elsif ( $values{ kernel_name } eq "Linux" ) {
+ $values{ operating_system } = "GNU/Linux";
+ my $release; # Name of chosen "*-release" file.
+ my $bulk; # Content of release file.
+ # On Ubuntu, lsb-release is quite informative, e. g.:
+ # DISTRIB_ID=Ubuntu
+ # DISTRIB_RELEASE=9.04
+ # DISTRIB_CODENAME=jaunty
+ # DISTRIB_DESCRIPTION="Ubuntu 9.04"
+ # Try lsb-release first. But on some older systems lsb-release is not informative.
+ # It may contain just one line:
+ # LSB_VERSION="1.3"
+ $release = "/etc/lsb-release";
+ if ( -e $release ) {
+ $bulk = read_file( $release );
+ } else {
+ $bulk = "";
+ }; # if
+ if ( $bulk =~ m{^DISTRIB_} ) {
+ # Ok, this lsb-release is informative.
+ $bulk =~ m{^DISTRIB_ID\s*=\s*(.*?)\s*$}m
+ or runtime_error( "$release: There is no DISTRIB_ID:", $bulk, "(eof)" );
+ $values{ operating_system_name } = $1;
+ $bulk =~ m{^DISTRIB_RELEASE\s*=\s*(.*?)\s*$}m
+ or runtime_error( "$release: There is no DISTRIB_RELEASE:", $bulk, "(eof)" );
+ $values{ operating_system_release } = $1;
+ $bulk =~ m{^DISTRIB_CODENAME\s*=\s*(.*?)\s*$}m
+ or runtime_error( "$release: There is no DISTRIB_CODENAME:", $bulk, "(eof)" );
+ $values{ operating_system_codename } = $1;
+ $bulk =~ m{^DISTRIB_DESCRIPTION\s*="?\s*(.*?)"?\s*$}m
+ or runtime_error( "$release: There is no DISTRIB_DESCRIPTION:", $bulk, "(eof)" );
+ $values{ operating_system_description } = $1;
+ } else {
+ # Oops. lsb-release is missed or not informative. Try other *-release files.
+ $release = "/etc/system-release";
+ if ( not -e $release ) { # Use /etc/system-release" if such file exists.
+ # Otherwise try other "/etc/*-release" files, but ignore "/etc/lsb-release".
+ my @releases = grep( $_ ne "/etc/lsb-release", bsd_glob( "/etc/*-release" ) );
+ # On some Fedora systems there are two files: fedora-release and redhat-release
+ # with identical content. If fedora-release present, ignore redjat-release.
+ if ( grep( $_ eq "/etc/fedora-release", @releases ) ) {
+ @releases = grep( $_ ne "/etc/redhat-release", @releases );
+ }; # if
+ if ( @releases == 1 ) {
+ $release = $releases[ 0 ];
+ } else {
+ if ( @releases == 0 ) {
+ # No *-release files found, try debian_version.
+ $release = "/etc/debian_version";
+ if ( not -e $release ) {
+ $release = undef;
+ warning( "No release files found in \"/etc/\" directory." );
+ }; # if
+ } else {
+ $release = undef;
+ warning( "More than one release files found in \"/etc/\" directory:", @releases );
+ }; # if
+ }; # if
+ }; # if
+ if ( defined( $release ) ) {
+ $bulk = read_file( $release );
+ if ( $release =~ m{system|redhat|fedora} ) {
+ # Red Hat or Fedora. Parse the first line of file.
+ # Typical values of *-release (one of):
+ # Red Hat Enterprise Linux* OS Server release 5.2 (Tikanga)
+ # Red Hat Enterprise Linux* OS AS release 3 (Taroon Update 4)
+ # Fedora release 10 (Cambridge)
+ $bulk =~ m{\A(.*)$}m
+ or runtime_error( "$release: Cannot find the first line:", $bulk, "(eof)" );
+ my $first_line = $1;
+ $values{ operating_system_description } = $first_line;
+ $first_line =~ m{\A(.*?)\s+release\s+(.*?)(?:\s+\((.*?)(?:\s+Update\s+(.*?))?\))?\s*$}
+ or runtime_error( "$release:1: Cannot parse line:", $first_line );
+ $values{ operating_system_name } = $1;
+ $values{ operating_system_release } = $2 . ( defined( $4 ) ? ".$4" : "" );
+ $values{ operating_system_codename } = $3;
+ } elsif ( $release =~ m{SuSE} ) {
+ # Typical SuSE-release:
+ # SUSE Linux* OS Enterprise Server 10 (x86_64)
+ # VERSION = 10
+ # PATCHLEVEL = 2
+ $bulk =~ m{\A(.*)$}m
+ or runtime_error( "$release: Cannot find the first line:", $bulk, "(eof)" );
+ my $first_line = $1;
+ $values{ operating_system_description } = $first_line;
+ $first_line =~ m{^(.*?)\s*(\d+)\s*\(.*?\)\s*$}
+ or runtime_error( "$release:1: Cannot parse line:", $first_line );
+ $values{ operating_system_name } = $1;
+ $bulk =~ m{^VERSION\s*=\s*(.*)\s*$}m
+ or runtime_error( "$release: There is no VERSION:", $bulk, "(eof)" );
+ $values{ operating_system_release } = $1;
+ if ( $bulk =~ m{^PATCHLEVEL\s*=\s*(.*)\s*$}m ) {
+ $values{ operating_system_release } .= ".$1";
+ }; # if
+ } elsif ( $release =~ m{debian_version} ) {
+ # Debian. The file debian_version contains just version number, nothing more:
+ # 4.0
+ my $name = "Debian";
+ $bulk =~ m{\A(.*)$}m
+ or runtime_error( "$release: Cannot find the first line:", $bulk, "(eof)" );
+ my $version = $1;
+ $values{ operating_system_name } = $name;
+ $values{ operating_system_release } = $version;
+ $values{ operating_system_codename } = "unknown";
+ $values{ operating_system_description } = sprintf( "%s %s", $name, $version );
+ }; # if
+ }; # if
+ }; # if
+ if ( not defined( $values{ operating_system_name } ) ) {
+ $values{ operating_system_name } = "GNU/Linux";
+ }; # if
+} elsif ( $values{ kernel_name } eq "Darwin" ) {
+ my %codenames = (
+ 10.4 => "Tiger",
+ 10.5 => "Leopard",
+ 10.6 => "Snow Leopard",
+ );
+ my $darwin;
+ my $get_os_info =
+ sub {
+ my ( $name ) = @_;
+ if ( not defined $darwin ) {
+ $darwin->{ operating_system } = "Darwin";
+ # sw_vers prints OS X* version to stdout:
+ # ProductName: OS X*
+ # ProductVersion: 10.4.11
+ # BuildVersion: 8S2167
+ # It does not print codename, so we code OS X* codenames here.
+ my $sw_vers = which( "sw_vers" ) || "/usr/bin/sw_vers";
+ my $output;
+ debug( "Executing $sw_vers..." );
+ execute( [ $sw_vers ], -stdout => \$output, -stderr => undef );
+ $output =~ m{^ProductName:\s*(.*)\s*$}m
+ or runtime_error( "There is no ProductName in sw_vers output:", $output, "(eof)" );
+ my $name = $1;
+ $output =~ m{^ProductVersion:\s*(.*)\s*$}m
+ or runtime_error( "There is no ProductVersion in sw_vers output:", $output, "(eof)" );
+ my $release = $1;
+ # Sometimes release reported as "10.4.11" (3 componentes), sometimes as "10.6".
+ # Handle both variants.
+ $release =~ m{^(\d+.\d+)(?:\.\d+)?(?=\s|$)}
+ or runtime_error( "Cannot parse OS X* version: $release" );
+ my $version = $1;
+ my $codename = ( $codenames{ $version } or "unknown" );
+ $darwin->{ operating_system_name } = $name;
+ $darwin->{ operating_system_release } = $release;
+ $darwin->{ operating_system_codename } = $codename;
+ $darwin->{ operating_system_description } = sprintf( "%s %s (%s)", $name, $release, $codename );
+ }; # if
+ return $darwin->{ $name };
+ }; # sub
+ $values{ operating_system } = sub { $get_os_info->( "operating_system" ); };
+ $values{ operating_system_name } = sub { $get_os_info->( "operating_system_name" ); };
+ $values{ operating_system_release } = sub { $get_os_info->( "operating_system_release" ); };
+ $values{ operating_system_codename } = sub { $get_os_info->( "operating_system_codename" ); };
+ $values{ operating_system_description } = sub { $get_os_info->( "operating_system_description" ); };
+} elsif ( $values{ kernel_name } =~ m{\AWindows[ _]NT\z} ) {
+ $values{ operating_system } = "MS Windows";
+ # my @os_name = Win32::GetOSName();
+ # $values{ operating_system_release } = $os_name[ 0 ];
+ # $values{ operating_system_update } = $os_name[ 1 ];
+} elsif ( $values{ kernel_name } =~ m{\ACYGWIN_NT-} ) {
+ $values{ operating_system } = "MS Windows";
+} elsif ( $values{ kernel_name } =~ m{\AFreeBSD} ) {
+ $values{ operating_system } = "FreeBSD";
+} elsif ( $values{ kernel_name } =~ m{\ANetBSD} ) {
+ $values{ operating_system } = "NetBSD";
+} else {
+ die "Unsupported kernel_name (\"$values{ kernel_name }\") returned by POSIX::uname(); stopped";
+}; # if
+
+# host_name and domain_name
+$values{ host_name } =
+ sub {
+ my $fqdn = value( "fqdn" );
+ $fqdn =~ m{\A([^.]*)(?:\.(.*))?\z};
+ my $host_name = $1;
+ if ( not defined( $host_name ) or $host_name eq "" ) {
+ die "Unexpected error: undefined or empty host name; stopped";
+ }; # if
+ return $host_name;
+ };
+$values{ domain_name } =
+ sub {
+ my $fqdn = value( "fqdn" );
+ $fqdn =~ m{\A([^.]*)(?:\.(.*))?\z};
+ my $domain_name = $2;
+ if ( not defined( $domain_name ) or $domain_name eq "" ) {
+ die "Unexpected error: undefined or empty domain name; stopped";
+ }; # if
+ return $domain_name;
+ };
+
+# Replace undefined values with "unknown".
+foreach my $name ( @all ) {
+ if ( not defined( $values{ $name } ) ) {
+ $values{ $name } = "unknown";
+ }; # if
+}; # foreach $name
+
+# Export functions reporting properties.
+foreach my $name ( @all ) {
+ no strict "refs";
+ *$name = sub { return value( $name ); };
+}; # foreach $name
+
+# This function returns base names.
+sub base_names {
+ return @base;
+}; # sub base_names
+
+# This function returns all the names.
+sub all_names {
+ return @all;
+}; # sub all_names
+
+# This function returns value by the specified name.
+sub value($) {
+ my $name = shift( @_ );
+ if ( ref( $values{ $name } ) ) {
+ my $value = $values{ $name }->();
+ $values{ $name } = $value;
+ }; # if
+ return $values{ $name };
+}; # sub value
+
+return 1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<Uname.pm> -- A few subroutines to get system information usually provided by
+C</bin/uname> and C<POSIX::uname()>.
+
+=head1 SYNOPSIS
+
+ use Uname;
+
+ # Base property functions.
+ $kernel_name = Uname::kernel_name();
+ $fqdn = Uname::fqdn();
+ $kernel_release = Uname::kernel_release();
+ $kernel_version = Uname::kernel_version();
+ $machine = Uname::machine();
+ $processor = Uname::processor();
+ $hardware_platform = Uname::hardware_platform();
+ $operating_system = Uname::operating_system();
+
+ # Auxiliary property functions.
+ $host_name = Uname::host_name();
+ $domain_name = Uname::domain_name();
+ $os_name = Uname::operating_system_name();
+ $os_release = Uname::operating_system_release();
+ $os_codename = Uname::operating_system_codename();
+ $os_description = Uname::operating_system_description();
+
+ # Meta functions.
+ @base_names = Uname::base_names();
+ @all_names = Uname::all_names();
+ $kernel_name = Uname::value( "kernel_name" );
+
+=head1 DESCRIPTION
+
+B<Uname.pm> resembles functionality found in C<POSIX::uname()> function or in C<uname> program.
+However, both C<POSIX::uname()> and C</bin/uname> have some disadvantages:
+
+=over
+
+=item *
+
+C<uname> may be not available in some environments, for example, in Windows* OS
+(C<uname> may be found in some third-party software packages, like MKS Toolkit or Cygwin, but it is
+not a part of OS).
+
+=item *
+
+There are many different versions of C<uname>. For example, C<uname> on OS X* does not
+recognize options C<-i>, C<-o>, and any long options.
+
+=item *
+
+Different versions of C<uname> may report the same property differently. For example,
+C<uname> on Linux* OS reports machine as C<i686>, while C<uname> on OS X* reports the same machine as
+C<x86>.
+
+=item *
+
+C<POSIX::uname()> returns list of values. I cannot recall what is the fourth element of the list.
+
+=back
+
+=head2 Base Functions
+
+Base property functions provide the information as C<uname> program.
+
+=over
+
+=item B<kernel_name()>
+
+Returns the kernel name, as reported by C<POSIX::uname()>.
+
+=item B<fqdn()>
+
+Returns the FQDN, fully qualified domain name. On some systems C<POSIX::uname()> reports short node
+name (with no domain name), on others C<POSIX::uname()> reports full node name. This
+function strive to return FQDN always (by refining C<POSIX::uname()> with
+C<Net::Domain::hostfqdn()>).
+
+=item B<kernel_release()>
+
+Returns the kernel release string, as reported by C<POSIX::uname()>. Usually the string consists of
+several numbers, separated by dots and dashes, but may also include some non-numeric substrings like
+"smp".
+
+=item B<kernel_version()>
+
+Returns the kernel version string, as reported by C<POSIX::uname()>. It is B<not> several
+dot-separated numbers but much longer string describing the kernel.
+For example, on Linux* OS it includes build date.
+If you look for something identifying the kernel, look at L<kernel_release>.
+
+=item B<machine()>
+
+Returns the machine hardware name, as reported by POSIX::uname(). Not reliable. Different OSes may
+report the same machine hardware name differently. For example, Linux* OS reports C<i686>, while OS X*
+reports C<x86> on the same machine.
+
+=item B<processor()>
+
+Returns the processor type. Not reliable. Usually the same as C<machine>.
+
+=item B<hardware_platform()>
+
+One of: C<i386> or C<x86_64>.
+
+=item B<operating_system()>
+
+One of: C<GNU/Linux>, C<OS X*>, or C<MS Windows>.
+
+=back
+
+=head2 Auxiliary Functions
+
+Auxiliary functions extends base functions with information not reported by C<uname> program.
+
+Auxiliary functions collect information from different sources. For example, on OS X*, they may
+call C<sw_vers> program to find out OS release; on Linux* OS they may parse C</etc/redhat-release> file,
+etc.
+
+=over
+
+=item B<host_name()>
+
+Returns host name (FQDN with dropped domain part).
+
+=item B<domain_name()>
+
+Returns domain name (FQDN with dropped host part).
+
+=item B<operating_system_name>
+
+Name of operating system or name of Linux* OS distribution, like "Fedora" or
+"Red Hat Enterprise Linux* OS Server".
+
+=item B<operating_system_release>
+
+Release (version) of operating system or Linux* OS distribution. Usually it is a series of
+dot-separated numbers.
+
+=item B<operating_system_codename>
+
+Codename of operating system release or Linux* OS distribution. For example, Fedora 10 is "Cambridge"
+while OS X* 10.4 is "Tiger".
+
+=item B<operating_system_description>
+
+Longer string. Usually it includes all the operating system properting mentioned above -- name,
+release, codename in parentheses.
+
+=back
+
+=head2 Meta Functions
+
+=over
+
+=item B<base_names()>
+
+This function returns the list of base property names.
+
+=item B<all_names()>
+
+This function returns the list of all property names.
+
+=item B<value(> I<name> B<)>
+
+This function returns the value of the property specified by I<name>.
+
+=back
+
+=head1 EXAMPLES
+
+ use Uname;
+
+ print( Uname::string(), "\n" );
+
+ foreach my $name ( Uname::all_names() ) {
+ print( "$name=\"" . Uname::value( $name ) . "\"\n" );
+ }; # foreach $name
+
+=head1 SEE ALSO
+
+L<POSIX::uname>, L<uname>.
+
+=cut
+
+# end of file #
+
diff --git a/final/runtime/tools/lib/tools.pm b/final/runtime/tools/lib/tools.pm
new file mode 100644
index 0000000..ce5cf44
--- /dev/null
+++ b/final/runtime/tools/lib/tools.pm
@@ -0,0 +1,1981 @@
+#
+# This is not a runnable script, it is a Perl module, a collection of variables, subroutines, etc.
+# to be used in other scripts.
+#
+# To get help about exported variables and subroutines, please execute the following command:
+#
+# perldoc tools.pm
+#
+# or see POD (Plain Old Documentation) imbedded to the source...
+#
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+=head1 NAME
+
+B<tools.pm> -- A collection of subroutines which are widely used in Perl scripts.
+
+=head1 SYNOPSIS
+
+ use FindBin;
+ use lib "$FindBin::Bin/lib";
+ use tools;
+
+=head1 DESCRIPTION
+
+B<Note:> Because this collection is small and intended for widely using in particular project,
+all variables and functions are exported by default.
+
+B<Note:> I have some ideas how to improve this collection, but it is in my long-term plans.
+Current shape is not ideal, but good enough to use.
+
+=cut
+
+package tools;
+
+use strict;
+use warnings;
+
+use vars qw( @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS );
+require Exporter;
+@ISA = qw( Exporter );
+
+my @vars = qw( $tool );
+my @utils = qw( check_opts validate );
+my @opts = qw( get_options );
+my @print = qw( debug info warning cmdline_error runtime_error question );
+my @name = qw( get_vol get_dir get_file get_name get_ext cat_file cat_dir );
+my @file = qw( which abs_path rel_path real_path make_dir clean_dir copy_dir move_dir del_dir change_dir copy_file move_file del_file );
+my @io = qw( read_file write_file );
+my @exec = qw( execute backticks );
+my @string = qw{ pad };
+@EXPORT = ( @utils, @opts, @vars, @print, @name, @file, @io, @exec, @string );
+
+use UNIVERSAL ();
+
+use FindBin;
+use IO::Handle;
+use IO::File;
+use IO::Dir;
+# Not available on some machines: use IO::Zlib;
+
+use Getopt::Long ();
+use Pod::Usage ();
+use Carp ();
+use File::Copy ();
+use File::Path ();
+use File::Temp ();
+use File::Spec ();
+use POSIX qw{ :fcntl_h :errno_h };
+use Cwd ();
+use Symbol ();
+
+use Data::Dumper;
+
+use vars qw( $tool $verbose $timestamps );
+$tool = $FindBin::Script;
+
+my @warning = ( sub {}, \&warning, \&runtime_error );
+
+
+sub check_opts(\%$;$) {
+
+ my $opts = shift( @_ ); # Referense to hash containing real options and their values.
+ my $good = shift( @_ ); # Reference to an array containing all known option names.
+ my $msg = shift( @_ ); # Optional (non-mandatory) message.
+
+ if ( not defined( $msg ) ) {
+ $msg = "unknown option(s) passed"; # Default value for $msg.
+ }; # if
+
+ # I'll use these hashes as sets of options.
+ my %good = map( ( $_ => 1 ), @$good ); # %good now is filled with all known options.
+ my %bad; # %bad is empty.
+
+ foreach my $opt ( keys( %$opts ) ) { # For each real option...
+ if ( not exists( $good{ $opt } ) ) { # Look its name in the set of known options...
+ $bad{ $opt } = 1; # Add unknown option to %bad set.
+ delete( $opts->{ $opt } ); # And delete original option.
+ }; # if
+ }; # foreach $opt
+ if ( %bad ) { # If %bad set is not empty...
+ my @caller = caller( 1 ); # Issue a warning.
+ local $Carp::CarpLevel = 2;
+ Carp::cluck( $caller[ 3 ] . ": " . $msg . ": " . join( ", ", sort( keys( %bad ) ) ) );
+ }; # if
+
+ return 1;
+
+}; # sub check_opts
+
+
+# --------------------------------------------------------------------------------------------------
+# Purpose:
+# Check subroutine arguments.
+# Synopsis:
+# my %opts = validate( params => \@_, spec => { ... }, caller => n );
+# Arguments:
+# params -- A reference to subroutine's actual arguments.
+# spec -- Specification of expected arguments.
+# caller -- ...
+# Return value:
+# A hash of validated options.
+# Description:
+# I would like to use Params::Validate module, but it is not a part of default Perl
+# distribution, so I cannot rely on it. This subroutine resembles to some extent to
+# Params::Validate::validate_with().
+# Specification of expected arguments:
+# { $opt => { type => $type, default => $default }, ... }
+# $opt -- String, option name.
+# $type -- String, expected type(s). Allowed values are "SCALAR", "UNDEF", "BOOLEAN",
+# "ARRAYREF", "HASHREF", "CODEREF". Multiple types may listed using bar:
+# "SCALAR|ARRAYREF". The type string is case-insensitive.
+# $default -- Default value for an option. Will be used if option is not specified or
+# undefined.
+#
+sub validate(@) {
+
+ my %opts = @_; # Temporary use %opts for parameters of `validate' subroutine.
+ my $params = $opts{ params };
+ my $caller = ( $opts{ caller } or 0 ) + 1;
+ my $spec = $opts{ spec };
+ undef( %opts ); # Ok, Clean %opts, now we will collect result of the subroutine.
+
+ # Find out caller package, filename, line, and subroutine name.
+ my ( $pkg, $file, $line, $subr ) = caller( $caller );
+ my @errors; # We will collect errors in array not to stop on the first found error.
+ my $error =
+ sub ($) {
+ my $msg = shift( @_ );
+ push( @errors, "$msg at $file line $line.\n" );
+ }; # sub
+
+ # Check options.
+ while ( @$params ) {
+ # Check option name.
+ my $opt = shift( @$params );
+ if ( not exists( $spec->{ $opt } ) ) {
+ $error->( "Invalid option `$opt'" );
+ shift( @$params ); # Skip value of unknow option.
+ next;
+ }; # if
+ # Check option value exists.
+ if ( not @$params ) {
+ $error->( "Option `$opt' does not have a value" );
+ next;
+ }; # if
+ my $val = shift( @$params );
+ # Check option value type.
+ if ( exists( $spec->{ $opt }->{ type } ) ) {
+ # Type specification exists. Check option value type.
+ my $actual_type;
+ if ( ref( $val ) ne "" ) {
+ $actual_type = ref( $val ) . "REF";
+ } else {
+ $actual_type = ( defined( $val ) ? "SCALAR" : "UNDEF" );
+ }; # if
+ my @wanted_types = split( m{\|}, lc( $spec->{ $opt }->{ type } ) );
+ my $wanted_types = join( "|", map( $_ eq "boolean" ? "scalar|undef" : quotemeta( $_ ), @wanted_types ) );
+ if ( $actual_type !~ m{\A(?:$wanted_types)\z}i ) {
+ $actual_type = lc( $actual_type );
+ $wanted_types = lc( join( " or ", map( "`$_'", @wanted_types ) ) );
+ $error->( "Option `$opt' value type is `$actual_type' but expected to be $wanted_types" );
+ next;
+ }; # if
+ }; # if
+ if ( exists( $spec->{ $opt }->{ values } ) ) {
+ my $values = $spec->{ $opt }->{ values };
+ if ( not grep( $_ eq $val, @$values ) ) {
+ $values = join( ", ", map( "`$_'", @$values ) );
+ $error->( "Option `$opt' value is `$val' but expected to be one of $values" );
+ next;
+ }; # if
+ }; # if
+ $opts{ $opt } = $val;
+ }; # while
+
+ # Assign default values.
+ foreach my $opt ( keys( %$spec ) ) {
+ if ( not defined( $opts{ $opt } ) and exists( $spec->{ $opt }->{ default } ) ) {
+ $opts{ $opt } = $spec->{ $opt }->{ default };
+ }; # if
+ }; # foreach $opt
+
+ # If we found any errors, raise them.
+ if ( @errors ) {
+ die join( "", @errors );
+ }; # if
+
+ return %opts;
+
+}; # sub validate
+
+# =================================================================================================
+# Get option helpers.
+# =================================================================================================
+
+=head2 Get option helpers.
+
+=cut
+
+# -------------------------------------------------------------------------------------------------
+
+=head3 get_options
+
+B<Synopsis:>
+
+ get_options( @arguments )
+
+B<Description:>
+
+It is very simple wrapper arounf Getopt::Long::GetOptions. It passes all arguments to GetOptions,
+and add definitions for standard help options: --help, --doc, --verbose, and --quiet.
+When GetOptions finihes, this subroutine checks exit code, if it is non-zero, standard error
+message is issued and script terminated.
+
+If --verbose or --quiet option is specified, C<tools.pm_verbose> environment variable is set.
+It is the way to propagate verbose/quiet mode to callee Perl scripts.
+
+=cut
+
+sub get_options {
+
+ Getopt::Long::Configure( "no_ignore_case" );
+ Getopt::Long::GetOptions(
+ "h0|usage" => sub { Pod::Usage::pod2usage( -exitval => 0, -verbose => 0 ); },
+ "h1|h|help" => sub { Pod::Usage::pod2usage( -exitval => 0, -verbose => 1 ); },
+ "h2|doc|manual" => sub { Pod::Usage::pod2usage( -exitval => 0, -verbose => 2 ); },
+ "version" => sub { print( "$tool version $main::VERSION\n" ); exit( 0 ); },
+ "v|verbose" => sub { ++ $verbose; $ENV{ "tools.pm_verbose" } = $verbose; },
+ "quiet" => sub { -- $verbose; $ENV{ "tools.pm_verbose" } = $verbose; },
+ "with-timestamps" => sub { $timestamps = 1; $ENV{ "tools.pm_timestamps" } = $timestamps; },
+ @_, # Caller argumetsa are at the end so caller options overrides standard.
+ ) or cmdline_error();
+
+}; # sub get_options
+
+
+# =================================================================================================
+# Print utilities.
+# =================================================================================================
+
+=pod
+
+=head2 Print utilities.
+
+Each of the print subroutines prepends each line of its output with the name of current script and
+the type of information, for example:
+
+ info( "Writing file..." );
+
+will print
+
+ <script>: (i): Writing file...
+
+while
+
+ warning( "File does not exist!" );
+
+will print
+
+ <script>: (!): File does not exist!
+
+Here are exported items:
+
+=cut
+
+# -------------------------------------------------------------------------------------------------
+
+sub _format_message($\@;$) {
+
+ my $prefix = shift( @_ );
+ my $args = shift( @_ );
+ my $no_eol = shift( @_ ); # Do not append "\n" to the last line.
+ my $message = "";
+
+ my $ts = "";
+ if ( $timestamps ) {
+ my ( $sec, $min, $hour, $day, $month, $year ) = gmtime();
+ $month += 1;
+ $year += 1900;
+ $ts = sprintf( "%04d-%02d-%02d %02d:%02d:%02d UTC: ", $year, $month, $day, $hour, $min, $sec );
+ }; # if
+ for my $i ( 1 .. @$args ) {
+ my @lines = split( "\n", $args->[ $i - 1 ] );
+ for my $j ( 1 .. @lines ) {
+ my $line = $lines[ $j - 1 ];
+ my $last_line = ( ( $i == @$args ) and ( $j == @lines ) );
+ my $eol = ( ( substr( $line, -1 ) eq "\n" ) or defined( $no_eol ) ? "" : "\n" );
+ $message .= "$ts$tool: ($prefix) " . $line . $eol;
+ }; # foreach $j
+ }; # foreach $i
+ return $message;
+
+}; # sub _format_message
+
+#--------------------------------------------------------------------------------------------------
+
+=pod
+
+=head3 $verbose
+
+B<Synopsis:>
+
+ $verbose
+
+B<Description:>
+
+Package variable. It determines verbosity level, which affects C<warning()>, C<info()>, and
+C<debug()> subroutnes .
+
+The variable gets initial value from C<tools.pm_verbose> environment variable if it is exists.
+If the environment variable does not exist, variable is set to 2.
+
+Initial value may be overridden later directly or by C<get_options> function.
+
+=cut
+
+$verbose = exists( $ENV{ "tools.pm_verbose" } ) ? $ENV{ "tools.pm_verbose" } : 2;
+
+#--------------------------------------------------------------------------------------------------
+
+=pod
+
+=head3 $timestamps
+
+B<Synopsis:>
+
+ $timestamps
+
+B<Description:>
+
+Package variable. It determines whether C<debug()>, C<info()>, C<warning()>, C<runtime_error()>
+subroutnes print timestamps or not.
+
+The variable gets initial value from C<tools.pm_timestamps> environment variable if it is exists.
+If the environment variable does not exist, variable is set to false.
+
+Initial value may be overridden later directly or by C<get_options()> function.
+
+=cut
+
+$timestamps = exists( $ENV{ "tools.pm_timestamps" } ) ? $ENV{ "tools.pm_timestamps" } : 0;
+
+# -------------------------------------------------------------------------------------------------
+
+=pod
+
+=head3 debug
+
+B<Synopsis:>
+
+ debug( @messages )
+
+B<Description:>
+
+If verbosity level is 3 or higher, print debug information to the stderr, prepending it with "(#)"
+prefix.
+
+=cut
+
+sub debug(@) {
+
+ if ( $verbose >= 3 ) {
+ STDOUT->flush();
+ STDERR->print( _format_message( "#", @_ ) );
+ }; # if
+ return 1;
+
+}; # sub debug
+
+#--------------------------------------------------------------------------------------------------
+
+=pod
+
+=head3 info
+
+B<Synopsis:>
+
+ info( @messages )
+
+B<Description:>
+
+If verbosity level is 2 or higher, print information to the stderr, prepending it with "(i)" prefix.
+
+=cut
+
+sub info(@) {
+
+ if ( $verbose >= 2 ) {
+ STDOUT->flush();
+ STDERR->print( _format_message( "i", @_ ) );
+ }; # if
+
+}; # sub info
+
+#--------------------------------------------------------------------------------------------------
+
+=head3 warning
+
+B<Synopsis:>
+
+ warning( @messages )
+
+B<Description:>
+
+If verbosity level is 1 or higher, issue a warning, prepending it with "(!)" prefix.
+
+=cut
+
+sub warning(@) {
+
+ if ( $verbose >= 1 ) {
+ STDOUT->flush();
+ warn( _format_message( "!", @_ ) );
+ }; # if
+
+}; # sub warning
+
+# -------------------------------------------------------------------------------------------------
+
+=head3 cmdline_error
+
+B<Synopsis:>
+
+ cmdline_error( @message )
+
+B<Description:>
+
+Print error message and exit the program with status 2.
+
+This function is intended to complain on command line errors, e. g. unknown
+options, invalid arguments, etc.
+
+=cut
+
+sub cmdline_error(;$) {
+
+ my $message = shift( @_ );
+
+ if ( defined( $message ) ) {
+ if ( substr( $message, -1, 1 ) ne "\n" ) {
+ $message .= "\n";
+ }; # if
+ } else {
+ $message = "";
+ }; # if
+ STDOUT->flush();
+ die $message . "Try --help option for more information.\n";
+
+}; # sub cmdline_error
+
+# -------------------------------------------------------------------------------------------------
+
+=head3 runtime_error
+
+B<Synopsis:>
+
+ runtime_error( @message )
+
+B<Description:>
+
+Print error message and exits the program with status 3.
+
+This function is intended to complain on runtime errors, e. g.
+directories which are not found, non-writable files, etc.
+
+=cut
+
+sub runtime_error(@) {
+
+ STDOUT->flush();
+ die _format_message( "x", @_ );
+
+}; # sub runtime_error
+
+#--------------------------------------------------------------------------------------------------
+
+=head3 question
+
+B<Synopsis:>
+
+ question( $prompt; $answer, $choices )
+
+B<Description:>
+
+Print $promp to the stderr, prepending it with "question:" prefix. Read a line from stdin, chop
+"\n" from the end, it is answer.
+
+If $answer is defined, it is treated as first user input.
+
+If $choices is specified, it could be a regexp for validating user input, or a string. In latter
+case it interpreted as list of characters, acceptable (case-insensitive) choices. If user enters
+non-acceptable answer, question continue asking until answer is acceptable.
+If $choices is not specified, any answer is acceptable.
+
+In case of end-of-file (or Ctrl+D pressed by user), $answer is C<undef>.
+
+B<Examples:>
+
+ my $answer;
+ question( "Save file [yn]? ", $answer, "yn" );
+ # We accepts only "y", "Y", "n", or "N".
+ question( "Press enter to continue or Ctrl+C to abort..." );
+ # We are not interested in answer value -- in case of Ctrl+C the script will be terminated,
+ # otherwise we continue execution.
+ question( "File name? ", $answer );
+ # Any answer is acceptable.
+
+=cut
+
+sub question($;\$$) {
+
+ my $prompt = shift( @_ );
+ my $answer = shift( @_ );
+ my $choices = shift( @_ );
+ my $a = ( defined( $answer ) ? $$answer : undef );
+
+ if ( ref( $choices ) eq "Regexp" ) {
+ # It is already a regular expression, do nothing.
+ } elsif ( defined( $choices ) ) {
+ # Convert string to a regular expression.
+ $choices = qr/[@{ [ quotemeta( $choices ) ] }]/i;
+ }; # if
+
+ for ( ; ; ) {
+ STDERR->print( _format_message( "?", @{ [ $prompt ] }, "no_eol" ) );
+ STDERR->flush();
+ if ( defined( $a ) ) {
+ STDOUT->print( $a . "\n" );
+ } else {
+ $a = <STDIN>;
+ }; # if
+ if ( not defined( $a ) ) {
+ last;
+ }; # if
+ chomp( $a );
+ if ( not defined( $choices ) or ( $a =~ m/^$choices$/ ) ) {
+ last;
+ }; # if
+ $a = undef;
+ }; # forever
+ if ( defined( $answer ) ) {
+ $$answer = $a;
+ }; # if
+
+}; # sub question
+
+# -------------------------------------------------------------------------------------------------
+
+# Returns volume part of path.
+sub get_vol($) {
+
+ my $path = shift( @_ );
+ my ( $vol, undef, undef ) = File::Spec->splitpath( $path );
+ return $vol;
+
+}; # sub get_vol
+
+# Returns directory part of path.
+sub get_dir($) {
+
+ my $path = File::Spec->canonpath( shift( @_ ) );
+ my ( $vol, $dir, undef ) = File::Spec->splitpath( $path );
+ my @dirs = File::Spec->splitdir( $dir );
+ pop( @dirs );
+ $dir = File::Spec->catdir( @dirs );
+ $dir = File::Spec->catpath( $vol, $dir, undef );
+ return $dir;
+
+}; # sub get_dir
+
+# Returns file part of path.
+sub get_file($) {
+
+ my $path = shift( @_ );
+ my ( undef, undef, $file ) = File::Spec->splitpath( $path );
+ return $file;
+
+}; # sub get_file
+
+# Returns file part of path without last suffix.
+sub get_name($) {
+
+ my $path = shift( @_ );
+ my ( undef, undef, $file ) = File::Spec->splitpath( $path );
+ $file =~ s{\.[^.]*\z}{};
+ return $file;
+
+}; # sub get_name
+
+# Returns last suffix of file part of path.
+sub get_ext($) {
+
+ my $path = shift( @_ );
+ my ( undef, undef, $file ) = File::Spec->splitpath( $path );
+ my $ext = "";
+ if ( $file =~ m{(\.[^.]*)\z} ) {
+ $ext = $1;
+ }; # if
+ return $ext;
+
+}; # sub get_ext
+
+sub cat_file(@) {
+
+ my $path = shift( @_ );
+ my $file = pop( @_ );
+ my @dirs = @_;
+
+ my ( $vol, $dirs ) = File::Spec->splitpath( $path, "no_file" );
+ @dirs = ( File::Spec->splitdir( $dirs ), @dirs );
+ $dirs = File::Spec->catdir( @dirs );
+ $path = File::Spec->catpath( $vol, $dirs, $file );
+
+ return $path;
+
+}; # sub cat_file
+
+sub cat_dir(@) {
+
+ my $path = shift( @_ );
+ my @dirs = @_;
+
+ my ( $vol, $dirs ) = File::Spec->splitpath( $path, "no_file" );
+ @dirs = ( File::Spec->splitdir( $dirs ), @dirs );
+ $dirs = File::Spec->catdir( @dirs );
+ $path = File::Spec->catpath( $vol, $dirs, "" );
+
+ return $path;
+
+}; # sub cat_dir
+
+# =================================================================================================
+# File and directory manipulation subroutines.
+# =================================================================================================
+
+=head2 File and directory manipulation subroutines.
+
+=over
+
+=cut
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<which( $file, @options )>
+
+Searches for specified executable file in the (specified) directories.
+Raises a runtime eroror if no executable file found. Returns a full path of found executable(s).
+
+Options:
+
+=over
+
+=item C<-all> =E<gt> I<bool>
+
+Do not stop on the first found file. Note, that list of full paths is returned in this case.
+
+=item C<-dirs> =E<gt> I<ref_to_array>
+
+Specify directory list to search through. If option is not passed, PATH environment variable
+is used for directory list.
+
+=item C<-exec> =E<gt> I<bool>
+
+Whether check for executable files or not. By default, C<which> searches executable files.
+However, on Cygwin executable check never performed.
+
+=back
+
+Examples:
+
+Look for "echo" in the directories specified in PATH:
+
+ my $echo = which( "echo" );
+
+Look for all occurenses of "cp" in the PATH:
+
+ my @cps = which( "cp", -all => 1 );
+
+Look for the first occurrence of "icc" in the specified directories:
+
+ my $icc = which( "icc", -dirs => [ ".", "/usr/local/bin", "/usr/bin", "/bin" ] );
+
+Look for the the C<omp_lib.f> file:
+
+ my @omp_lib = which( "omp_lib.f", -all => 1, -exec => 0, -dirs => [ @include ] );
+
+=cut
+
+sub which($@) {
+
+ my $file = shift( @_ );
+ my %opts = @_;
+
+ check_opts( %opts, [ qw( -all -dirs -exec ) ] );
+ if ( $opts{ -all } and not wantarray() ) {
+ local $Carp::CarpLevel = 1;
+ Carp::cluck( "`-all' option passed to `which' but list is not expected" );
+ }; # if
+ if ( not defined( $opts{ -exec } ) ) {
+ $opts{ -exec } = 1;
+ }; # if
+
+ my $dirs = ( exists( $opts{ -dirs } ) ? $opts{ -dirs } : [ File::Spec->path() ] );
+ my @found;
+
+ my @exts = ( "" );
+ if ( $^O eq "MSWin32" and $opts{ -exec } ) {
+ if ( defined( $ENV{ PATHEXT } ) ) {
+ push( @exts, split( ";", $ENV{ PATHEXT } ) );
+ } else {
+ # If PATHEXT does not exist, use default value.
+ push( @exts, qw{ .COM .EXE .BAT .CMD } );
+ }; # if
+ }; # if
+
+ loop:
+ foreach my $dir ( @$dirs ) {
+ foreach my $ext ( @exts ) {
+ my $path = File::Spec->catfile( $dir, $file . $ext );
+ if ( -e $path ) {
+ # Executable bit is not reliable on Cygwin, do not check it.
+ if ( not $opts{ -exec } or -x $path or $^O eq "cygwin" ) {
+ push( @found, $path );
+ if ( not $opts{ -all } ) {
+ last loop;
+ }; # if
+ }; # if
+ }; # if
+ }; # foreach $ext
+ }; # foreach $dir
+
+ if ( not @found ) {
+ # TBD: We need to introduce an option for conditional enabling this error.
+ # runtime_error( "Could not find \"$file\" executable file in PATH." );
+ }; # if
+ if ( @found > 1 ) {
+ # TBD: Issue a warning?
+ }; # if
+
+ if ( $opts{ -all } ) {
+ return @found;
+ } else {
+ return $found[ 0 ];
+ }; # if
+
+}; # sub which
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<abs_path( $path, $base )>
+
+Return absolute path for an argument.
+
+Most of the work is done by C<File::Spec->rel2abs()>. C<abs_path()> additionally collapses
+C<dir1/../dir2> to C<dir2>.
+
+It is not so naive and made intentionally. For example on Linux* OS in Bash if F<link/> is a symbolic
+link to directory F<some_dir/>
+
+ $ cd link
+ $ cd ..
+
+brings you back to F<link/>'s parent, not to parent of F<some_dir/>,
+
+=cut
+
+sub abs_path($;$) {
+
+ my ( $path, $base ) = @_;
+ $path = File::Spec->rel2abs( $path, ( defined( $base ) ? $base : $ENV{ PWD } ) );
+ my ( $vol, $dir, $file ) = File::Spec->splitpath( $path );
+ while ( $dir =~ s{/(?!\.\.)[^/]*/\.\.(?:/|\z)}{/} ) {
+ }; # while
+ $path = File::Spec->canonpath( File::Spec->catpath( $vol, $dir, $file ) );
+ return $path;
+
+}; # sub abs_path
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<rel_path( $path, $base )>
+
+Return relative path for an argument.
+
+=cut
+
+sub rel_path($;$) {
+
+ my ( $path, $base ) = @_;
+ $path = File::Spec->abs2rel( abs_path( $path ), $base );
+ return $path;
+
+}; # sub rel_path
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<real_path( $dir )>
+
+Return real absolute path for an argument. In the result all relative components (F<.> and F<..>)
+and U<symbolic links are resolved>.
+
+In most cases it is not what you want. Consider using C<abs_path> first.
+
+C<abs_path> function from B<Cwd> module works with directories only. This function works with files
+as well. But, if file is a symbolic link, function does not resolve it (yet).
+
+The function uses C<runtime_error> to raise an error if something wrong.
+
+=cut
+
+sub real_path($) {
+
+ my $orig_path = shift( @_ );
+ my $real_path;
+ my $message = "";
+ if ( not -e $orig_path ) {
+ $message = "\"$orig_path\" does not exists";
+ } else {
+ # Cwd::abs_path does not work with files, so in this case we should handle file separately.
+ my $file;
+ if ( not -d $orig_path ) {
+ ( my $vol, my $dir, $file ) = File::Spec->splitpath( File::Spec->rel2abs( $orig_path ) );
+ $orig_path = File::Spec->catpath( $vol, $dir );
+ }; # if
+ {
+ local $SIG{ __WARN__ } = sub { $message = $_[ 0 ]; };
+ $real_path = Cwd::abs_path( $orig_path );
+ };
+ if ( defined( $file ) ) {
+ $real_path = File::Spec->catfile( $real_path, $file );
+ }; # if
+ }; # if
+ if ( not defined( $real_path ) or $message ne "" ) {
+ $message =~ s/^stat\(.*\): (.*)\s+at .*? line \d+\s*\z/$1/;
+ runtime_error( "Could not find real path for \"$orig_path\"" . ( $message ne "" ? ": $message" : "" ) );
+ }; # if
+ return $real_path;
+
+}; # sub real_path
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<make_dir( $dir, @options )>
+
+Make a directory.
+
+This function makes a directory. If necessary, more than one level can be created.
+If directory exists, warning issues (the script behavior depends on value of
+C<-warning_level> option). If directory creation fails or C<$dir> exists but it is not a
+directory, error isssues.
+
+Options:
+
+=over
+
+=item C<-mode>
+
+The numeric mode for new directories, 0750 (rwxr-x---) by default.
+
+=back
+
+=cut
+
+sub make_dir($@) {
+
+ my $dir = shift( @_ );
+ my %opts =
+ validate(
+ params => \@_,
+ spec => {
+ parents => { type => "boolean", default => 1 },
+ mode => { type => "scalar", default => 0777 },
+ },
+ );
+
+ my $prefix = "Could not create directory \"$dir\"";
+
+ if ( -e $dir ) {
+ if ( -d $dir ) {
+ } else {
+ runtime_error( "$prefix: it exists, but not a directory." );
+ }; # if
+ } else {
+ eval {
+ File::Path::mkpath( $dir, 0, $opts{ mode } );
+ }; # eval
+ if ( $@ ) {
+ $@ =~ s{\s+at (?:[a-zA-Z0-9 /_.]*/)?tools\.pm line \d+\s*}{};
+ runtime_error( "$prefix: $@" );
+ }; # if
+ if ( not -d $dir ) { # Just in case, check it one more time...
+ runtime_error( "$prefix." );
+ }; # if
+ }; # if
+
+}; # sub make_dir
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<copy_dir( $src_dir, $dst_dir, @options )>
+
+Copy directory recursively.
+
+This function copies a directory recursively.
+If source directory does not exist or not a directory, error issues.
+
+Options:
+
+=over
+
+=item C<-overwrite>
+
+Overwrite destination directory, if it exists.
+
+=back
+
+=cut
+
+sub copy_dir($$@) {
+
+ my $src = shift( @_ );
+ my $dst = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Could not copy directory \"$src\" to \"$dst\"";
+
+ if ( not -e $src ) {
+ runtime_error( "$prefix: \"$src\" does not exist." );
+ }; # if
+ if ( not -d $src ) {
+ runtime_error( "$prefix: \"$src\" is not a directory." );
+ }; # if
+ if ( -e $dst ) {
+ if ( -d $dst ) {
+ if ( $opts{ -overwrite } ) {
+ del_dir( $dst );
+ } else {
+ runtime_error( "$prefix: \"$dst\" already exists." );
+ }; # if
+ } else {
+ runtime_error( "$prefix: \"$dst\" is not a directory." );
+ }; # if
+ }; # if
+
+ execute( [ "cp", "-R", $src, $dst ] );
+
+}; # sub copy_dir
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<move_dir( $src_dir, $dst_dir, @options )>
+
+Move directory.
+
+Options:
+
+=over
+
+=item C<-overwrite>
+
+Overwrite destination directory, if it exists.
+
+=back
+
+=cut
+
+sub move_dir($$@) {
+
+ my $src = shift( @_ );
+ my $dst = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Could not copy directory \"$src\" to \"$dst\"";
+
+ if ( not -e $src ) {
+ runtime_error( "$prefix: \"$src\" does not exist." );
+ }; # if
+ if ( not -d $src ) {
+ runtime_error( "$prefix: \"$src\" is not a directory." );
+ }; # if
+ if ( -e $dst ) {
+ if ( -d $dst ) {
+ if ( $opts{ -overwrite } ) {
+ del_dir( $dst );
+ } else {
+ runtime_error( "$prefix: \"$dst\" already exists." );
+ }; # if
+ } else {
+ runtime_error( "$prefix: \"$dst\" is not a directory." );
+ }; # if
+ }; # if
+
+ execute( [ "mv", $src, $dst ] );
+
+}; # sub move_dir
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<clean_dir( $dir, @options )>
+
+Clean a directory: delete all the entries (recursively), but leave the directory.
+
+Options:
+
+=over
+
+=item C<-force> => bool
+
+If a directory is not writable, try to change permissions first, then clean it.
+
+=item C<-skip> => regexp
+
+Regexp. If a directory entry mached the regexp, it is skipped, not deleted. (As a subsequence,
+a directory containing skipped entries is not deleted.)
+
+=back
+
+=cut
+
+sub _clean_dir($);
+
+sub _clean_dir($) {
+ our %_clean_dir_opts;
+ my ( $dir ) = @_;
+ my $skip = $_clean_dir_opts{ skip }; # Regexp.
+ my $skipped = 0; # Number of skipped files.
+ my $prefix = "Cleaning `$dir' failed:";
+ my @stat = stat( $dir );
+ my $mode = $stat[ 2 ];
+ if ( not @stat ) {
+ runtime_error( $prefix, "Cannot stat `$dir': $!" );
+ }; # if
+ if ( not -d _ ) {
+ runtime_error( $prefix, "It is not a directory." );
+ }; # if
+ if ( not -w _ ) { # Directory is not writable.
+ if ( not -o _ or not $_clean_dir_opts{ force } ) {
+ runtime_error( $prefix, "Directory is not writable." );
+ }; # if
+ # Directory is not writable but mine. Try to change permissions.
+ chmod( $mode | S_IWUSR, $dir )
+ or runtime_error( $prefix, "Cannot make directory writable: $!" );
+ }; # if
+ my $handle = IO::Dir->new( $dir ) or runtime_error( $prefix, "Cannot read directory: $!" );
+ my @entries = File::Spec->no_upwards( $handle->read() );
+ $handle->close() or runtime_error( $prefix, "Cannot read directory: $!" );
+ foreach my $entry ( @entries ) {
+ my $path = cat_file( $dir, $entry );
+ if ( defined( $skip ) and $entry =~ $skip ) {
+ ++ $skipped;
+ } else {
+ if ( -l $path ) {
+ unlink( $path ) or runtime_error( $prefix, "Cannot delete symlink `$path': $!" );
+ } else {
+ stat( $path ) or runtime_error( $prefix, "Cannot stat `$path': $! " );
+ if ( -f _ ) {
+ del_file( $path );
+ } elsif ( -d _ ) {
+ my $rc = _clean_dir( $path );
+ if ( $rc == 0 ) {
+ rmdir( $path ) or runtime_error( $prefix, "Cannot delete directory `$path': $!" );
+ }; # if
+ $skipped += $rc;
+ } else {
+ runtime_error( $prefix, "`$path' is neither a file nor a directory." );
+ }; # if
+ }; # if
+ }; # if
+ }; # foreach
+ return $skipped;
+}; # sub _clean_dir
+
+
+sub clean_dir($@) {
+ my $dir = shift( @_ );
+ our %_clean_dir_opts;
+ local %_clean_dir_opts =
+ validate(
+ params => \@_,
+ spec => {
+ skip => { type => "regexpref" },
+ force => { type => "boolean" },
+ },
+ );
+ my $skipped = _clean_dir( $dir );
+ return $skipped;
+}; # sub clean_dir
+
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<del_dir( $dir, @options )>
+
+Delete a directory recursively.
+
+This function deletes a directory. If directory can not be deleted or it is not a directory, error
+message issues (and script exists).
+
+Options:
+
+=over
+
+=back
+
+=cut
+
+sub del_dir($@) {
+
+ my $dir = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Deleting directory \"$dir\" failed";
+ our %_clean_dir_opts;
+ local %_clean_dir_opts =
+ validate(
+ params => \@_,
+ spec => {
+ force => { type => "boolean" },
+ },
+ );
+
+ if ( not -e $dir ) {
+ # Nothing to do.
+ return;
+ }; # if
+ if ( not -d $dir ) {
+ runtime_error( "$prefix: it is not a directory." );
+ }; # if
+ _clean_dir( $dir );
+ rmdir( $dir ) or runtime_error( "$prefix." );
+
+}; # sub del_dir
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<change_dir( $dir )>
+
+Change current directory.
+
+If any error occurred, error issues and script exits.
+
+=cut
+
+sub change_dir($) {
+
+ my $dir = shift( @_ );
+
+ Cwd::chdir( $dir )
+ or runtime_error( "Could not chdir to \"$dir\": $!" );
+
+}; # sub change_dir
+
+
+# -------------------------------------------------------------------------------------------------
+
+=item C<copy_file( $src_file, $dst_file, @options )>
+
+Copy file.
+
+This function copies a file. If source does not exist or is not a file, error issues.
+
+Options:
+
+=over
+
+=item C<-overwrite>
+
+Overwrite destination file, if it exists.
+
+=back
+
+=cut
+
+sub copy_file($$@) {
+
+ my $src = shift( @_ );
+ my $dst = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Could not copy file \"$src\" to \"$dst\"";
+
+ if ( not -e $src ) {
+ runtime_error( "$prefix: \"$src\" does not exist." );
+ }; # if
+ if ( not -f $src ) {
+ runtime_error( "$prefix: \"$src\" is not a file." );
+ }; # if
+ if ( -e $dst ) {
+ if ( -f $dst ) {
+ if ( $opts{ -overwrite } ) {
+ del_file( $dst );
+ } else {
+ runtime_error( "$prefix: \"$dst\" already exists." );
+ }; # if
+ } else {
+ runtime_error( "$prefix: \"$dst\" is not a file." );
+ }; # if
+ }; # if
+
+ File::Copy::copy( $src, $dst ) or runtime_error( "$prefix: $!" );
+ # On Windows* OS File::Copy preserves file attributes, but on Linux* OS it doesn't.
+ # So we should do it manually...
+ if ( $^O =~ m/^linux\z/ ) {
+ my $mode = ( stat( $src ) )[ 2 ]
+ or runtime_error( "$prefix: cannot get status info for source file." );
+ chmod( $mode, $dst )
+ or runtime_error( "$prefix: cannot change mode of destination file." );
+ }; # if
+
+}; # sub copy_file
+
+# -------------------------------------------------------------------------------------------------
+
+sub move_file($$@) {
+
+ my $src = shift( @_ );
+ my $dst = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Could not move file \"$src\" to \"$dst\"";
+
+ check_opts( %opts, [ qw( -overwrite ) ] );
+
+ if ( not -e $src ) {
+ runtime_error( "$prefix: \"$src\" does not exist." );
+ }; # if
+ if ( not -f $src ) {
+ runtime_error( "$prefix: \"$src\" is not a file." );
+ }; # if
+ if ( -e $dst ) {
+ if ( -f $dst ) {
+ if ( $opts{ -overwrite } ) {
+ #
+ } else {
+ runtime_error( "$prefix: \"$dst\" already exists." );
+ }; # if
+ } else {
+ runtime_error( "$prefix: \"$dst\" is not a file." );
+ }; # if
+ }; # if
+
+ File::Copy::move( $src, $dst ) or runtime_error( "$prefix: $!" );
+
+}; # sub move_file
+
+# -------------------------------------------------------------------------------------------------
+
+sub del_file($) {
+ my $files = shift( @_ );
+ if ( ref( $files ) eq "" ) {
+ $files = [ $files ];
+ }; # if
+ foreach my $file ( @$files ) {
+ debug( "Deleting file `$file'..." );
+ my $rc = unlink( $file );
+ if ( $rc == 0 && $! != ENOENT ) {
+ # Reporn an error, but ignore ENOENT, because the goal is achieved.
+ runtime_error( "Deleting file `$file' failed: $!" );
+ }; # if
+ }; # foreach $file
+}; # sub del_file
+
+# -------------------------------------------------------------------------------------------------
+
+=back
+
+=cut
+
+# =================================================================================================
+# File I/O subroutines.
+# =================================================================================================
+
+=head2 File I/O subroutines.
+
+=cut
+
+#--------------------------------------------------------------------------------------------------
+
+=head3 read_file
+
+B<Synopsis:>
+
+ read_file( $file, @options )
+
+B<Description:>
+
+Read file and return its content. In scalar context function returns a scalar, in list context
+function returns list of lines.
+
+Note: If the last of file does not terminate with newline, function will append it.
+
+B<Arguments:>
+
+=over
+
+=item B<$file>
+
+A name or handle of file to read from.
+
+=back
+
+B<Options:>
+
+=over
+
+=item B<-binary>
+
+If true, file treats as a binary file: no newline conversion, no truncating trailing space, no
+newline removing performed. Entire file returned as a scalar.
+
+=item B<-bulk>
+
+This option is allowed only in binary mode. Option's value should be a reference to a scalar.
+If option present, file content placed to pointee scalar and function returns true (1).
+
+=item B<-chomp>
+
+If true, newline characters are removed from file content. By default newline characters remain.
+This option is not applicable in binary mode.
+
+=item B<-keep_trailing_space>
+
+If true, trainling space remain at the ends of lines. By default all trailing spaces are removed.
+This option is not applicable in binary mode.
+
+=back
+
+B<Examples:>
+
+Return file as single line, remove trailing spaces.
+
+ my $bulk = read_file( "message.txt" );
+
+Return file as list of lines with removed trailing space and
+newline characters.
+
+ my @bulk = read_file( "message.txt", -chomp => 1 );
+
+Read a binary file:
+
+ my $bulk = read_file( "message.txt", -binary => 1 );
+
+Read a big binary file:
+
+ my $bulk;
+ read_file( "big_binary_file", -binary => 1, -bulk => \$bulk );
+
+Read from standard input:
+
+ my @bulk = read_file( \*STDIN );
+
+=cut
+
+sub read_file($@) {
+
+ my $file = shift( @_ ); # The name or handle of file to read from.
+ my %opts = @_; # Options.
+
+ my $name;
+ my $handle;
+ my @bulk;
+ my $error = \&runtime_error;
+
+ my @binopts = qw( -binary -error -bulk ); # Options available in binary mode.
+ my @txtopts = qw( -binary -error -keep_trailing_space -chomp -layer ); # Options available in text (non-binary) mode.
+ check_opts( %opts, [ @binopts, @txtopts ] );
+ if ( $opts{ -binary } ) {
+ check_opts( %opts, [ @binopts ], "these options cannot be used with -binary" );
+ } else {
+ check_opts( %opts, [ @txtopts ], "these options cannot be used without -binary" );
+ }; # if
+ if ( not exists( $opts{ -error } ) ) {
+ $opts{ -error } = "error";
+ }; # if
+ if ( $opts{ -error } eq "warning" ) {
+ $error = \&warning;
+ } elsif( $opts{ -error } eq "ignore" ) {
+ $error = sub {};
+ } elsif ( ref( $opts{ -error } ) eq "ARRAY" ) {
+ $error = sub { push( @{ $opts{ -error } }, $_[ 0 ] ); };
+ }; # if
+
+ if ( ( ref( $file ) eq "GLOB" ) or UNIVERSAL::isa( $file, "IO::Handle" ) ) {
+ $name = "unknown";
+ $handle = $file;
+ } else {
+ $name = $file;
+ if ( get_ext( $file ) eq ".gz" and not $opts{ -binary } ) {
+ $handle = IO::Zlib->new( $name, "rb" );
+ } else {
+ $handle = IO::File->new( $name, "r" );
+ }; # if
+ if ( not defined( $handle ) ) {
+ $error->( "File \"$name\" could not be opened for input: $!" );
+ }; # if
+ }; # if
+ if ( defined( $handle ) ) {
+ if ( $opts{ -binary } ) {
+ binmode( $handle );
+ local $/ = undef; # Set input record separator to undef to read entire file as one line.
+ if ( exists( $opts{ -bulk } ) ) {
+ ${ $opts{ -bulk } } = $handle->getline();
+ } else {
+ $bulk[ 0 ] = $handle->getline();
+ }; # if
+ } else {
+ if ( defined( $opts{ -layer } ) ) {
+ binmode( $handle, $opts{ -layer } );
+ }; # if
+ @bulk = $handle->getlines();
+ # Special trick for UTF-8 files: Delete BOM, if any.
+ if ( defined( $opts{ -layer } ) and $opts{ -layer } eq ":utf8" ) {
+ if ( substr( $bulk[ 0 ], 0, 1 ) eq "\x{FEFF}" ) {
+ substr( $bulk[ 0 ], 0, 1 ) = "";
+ }; # if
+ }; # if
+ }; # if
+ $handle->close()
+ or $error->( "File \"$name\" could not be closed after input: $!" );
+ } else {
+ if ( $opts{ -binary } and exists( $opts{ -bulk } ) ) {
+ ${ $opts{ -bulk } } = "";
+ }; # if
+ }; # if
+ if ( $opts{ -binary } ) {
+ if ( exists( $opts{ -bulk } ) ) {
+ return 1;
+ } else {
+ return $bulk[ 0 ];
+ }; # if
+ } else {
+ if ( ( @bulk > 0 ) and ( substr( $bulk[ -1 ], -1, 1 ) ne "\n" ) ) {
+ $bulk[ -1 ] .= "\n";
+ }; # if
+ if ( not $opts{ -keep_trailing_space } ) {
+ map( $_ =~ s/\s+\n\z/\n/, @bulk );
+ }; # if
+ if ( $opts{ -chomp } ) {
+ chomp( @bulk );
+ }; # if
+ if ( wantarray() ) {
+ return @bulk;
+ } else {
+ return join( "", @bulk );
+ }; # if
+ }; # if
+
+}; # sub read_file
+
+#--------------------------------------------------------------------------------------------------
+
+=head3 write_file
+
+B<Synopsis:>
+
+ write_file( $file, $bulk, @options )
+
+B<Description:>
+
+Write file.
+
+B<Arguments:>
+
+=over
+
+=item B<$file>
+
+The name or handle of file to writte to.
+
+=item B<$bulk>
+
+Bulk to write to a file. Can be a scalar, or a reference to scalar or an array.
+
+=back
+
+B<Options:>
+
+=over
+
+=item B<-backup>
+
+If true, create a backup copy of file overwritten. Backup copy is placed into the same directory.
+The name of backup copy is the same as the name of file with `~' appended. By default backup copy
+is not created.
+
+=item B<-append>
+
+If true, the text will be added to existing file.
+
+=back
+
+B<Examples:>
+
+ write_file( "message.txt", \$bulk );
+ # Write file, take content from a scalar.
+
+ write_file( "message.txt", \@bulk, -backup => 1 );
+ # Write file, take content from an array, create a backup copy.
+
+=cut
+
+sub write_file($$@) {
+
+ my $file = shift( @_ ); # The name or handle of file to write to.
+ my $bulk = shift( @_ ); # The text to write. Can be reference to array or scalar.
+ my %opts = @_; # Options.
+
+ my $name;
+ my $handle;
+
+ check_opts( %opts, [ qw( -append -backup -binary -layer ) ] );
+
+ my $mode = $opts{ -append } ? "a": "w";
+ if ( ( ref( $file ) eq "GLOB" ) or UNIVERSAL::isa( $file, "IO::Handle" ) ) {
+ $name = "unknown";
+ $handle = $file;
+ } else {
+ $name = $file;
+ if ( $opts{ -backup } and ( -f $name ) ) {
+ copy_file( $name, $name . "~", -overwrite => 1 );
+ }; # if
+ $handle = IO::File->new( $name, $mode )
+ or runtime_error( "File \"$name\" could not be opened for output: $!" );
+ }; # if
+ if ( $opts{ -binary } ) {
+ binmode( $handle );
+ } elsif ( $opts{ -layer } ) {
+ binmode( $handle, $opts{ -layer } );
+ }; # if
+ if ( ref( $bulk ) eq "" ) {
+ if ( defined( $bulk ) ) {
+ $handle->print( $bulk );
+ if ( not $opts{ -binary } and ( substr( $bulk, -1 ) ne "\n" ) ) {
+ $handle->print( "\n" );
+ }; # if
+ }; # if
+ } elsif ( ref( $bulk ) eq "SCALAR" ) {
+ if ( defined( $$bulk ) ) {
+ $handle->print( $$bulk );
+ if ( not $opts{ -binary } and ( substr( $$bulk, -1 ) ne "\n" ) ) {
+ $handle->print( "\n" );
+ }; # if
+ }; # if
+ } elsif ( ref( $bulk ) eq "ARRAY" ) {
+ foreach my $line ( @$bulk ) {
+ if ( defined( $line ) ) {
+ $handle->print( $line );
+ if ( not $opts{ -binary } and ( substr( $line, -1 ) ne "\n" ) ) {
+ $handle->print( "\n" );
+ }; # if
+ }; # if
+ }; # foreach
+ } else {
+ Carp::croak( "write_file: \$bulk must be a scalar or reference to (scalar or array)" );
+ }; # if
+ $handle->close()
+ or runtime_error( "File \"$name\" could not be closed after output: $!" );
+
+}; # sub write_file
+
+#--------------------------------------------------------------------------------------------------
+
+=cut
+
+# =================================================================================================
+# Execution subroutines.
+# =================================================================================================
+
+=head2 Execution subroutines.
+
+=over
+
+=cut
+
+#--------------------------------------------------------------------------------------------------
+
+sub _pre {
+
+ my $arg = shift( @_ );
+
+ # If redirection is not required, exit.
+ if ( not exists( $arg->{ redir } ) ) {
+ return 0;
+ }; # if
+
+ # Input parameters.
+ my $mode = $arg->{ mode }; # Mode, "<" (input ) or ">" (output).
+ my $handle = $arg->{ handle }; # Handle to manipulate.
+ my $redir = $arg->{ redir }; # Data, a file name if a scalar, or file contents, if a reference.
+
+ # Output parameters.
+ my $save_handle;
+ my $temp_handle;
+ my $temp_name;
+
+ # Save original handle (by duping it).
+ $save_handle = Symbol::gensym();
+ $handle->flush();
+ open( $save_handle, $mode . "&" . $handle->fileno() )
+ or die( "Cannot dup filehandle: $!" );
+
+ # Prepare a file to IO.
+ if ( UNIVERSAL::isa( $redir, "IO::Handle" ) or ( ref( $redir ) eq "GLOB" ) ) {
+ # $redir is reference to an object of IO::Handle class (or its decedant).
+ $temp_handle = $redir;
+ } elsif ( ref( $redir ) ) {
+ # $redir is a reference to content to be read/written.
+ # Prepare temp file.
+ ( $temp_handle, $temp_name ) =
+ File::Temp::tempfile(
+ "$tool.XXXXXXXX",
+ DIR => File::Spec->tmpdir(),
+ SUFFIX => ".tmp",
+ UNLINK => 1
+ );
+ if ( not defined( $temp_handle ) ) {
+ runtime_error( "Could not create temp file." );
+ }; # if
+ if ( $mode eq "<" ) {
+ # It is a file to be read by child, prepare file content to be read.
+ $temp_handle->print( ref( $redir ) eq "SCALAR" ? ${ $redir } : @{ $redir } );
+ $temp_handle->flush();
+ seek( $temp_handle, 0, 0 );
+ # Unfortunatelly, I could not use OO interface to seek.
+ # ActivePerl 5.6.1 complains on both forms:
+ # $temp_handle->seek( 0 ); # As declared in IO::Seekable.
+ # $temp_handle->setpos( 0 ); # As described in documentation.
+ } elsif ( $mode eq ">" ) {
+ # It is a file for output. Clear output variable.
+ if ( ref( $redir ) eq "SCALAR" ) {
+ ${ $redir } = "";
+ } else {
+ @{ $redir } = ();
+ }; # if
+ }; # if
+ } else {
+ # $redir is a name of file to be read/written.
+ # Just open file.
+ if ( defined( $redir ) ) {
+ $temp_name = $redir;
+ } else {
+ $temp_name = File::Spec->devnull();
+ }; # if
+ $temp_handle = IO::File->new( $temp_name, $mode )
+ or runtime_error( "file \"$temp_name\" could not be opened for " . ( $mode eq "<" ? "input" : "output" ) . ": $!" );
+ }; # if
+
+ # Redirect handle to temp file.
+ open( $handle, $mode . "&" . $temp_handle->fileno() )
+ or die( "Cannot dup filehandle: $!" );
+
+ # Save output parameters.
+ $arg->{ save_handle } = $save_handle;
+ $arg->{ temp_handle } = $temp_handle;
+ $arg->{ temp_name } = $temp_name;
+
+}; # sub _pre
+
+
+sub _post {
+
+ my $arg = shift( @_ );
+
+ # Input parameters.
+ my $mode = $arg->{ mode }; # Mode, "<" or ">".
+ my $handle = $arg->{ handle }; # Handle to save and set.
+ my $redir = $arg->{ redir }; # Data, a file name if a scalar, or file contents, if a reference.
+
+ # Parameters saved during preprocessing.
+ my $save_handle = $arg->{ save_handle };
+ my $temp_handle = $arg->{ temp_handle };
+ my $temp_name = $arg->{ temp_name };
+
+ # If no handle was saved, exit.
+ if ( not $save_handle ) {
+ return 0;
+ }; # if
+
+ # Close handle.
+ $handle->close()
+ or die( "$!" );
+
+ # Read the content of temp file, if necessary, and close temp file.
+ if ( ( $mode ne "<" ) and ref( $redir ) ) {
+ $temp_handle->flush();
+ seek( $temp_handle, 0, 0 );
+ if ( $^O =~ m/MSWin/ ) {
+ binmode( $temp_handle, ":crlf" );
+ }; # if
+ if ( ref( $redir ) eq "SCALAR" ) {
+ ${ $redir } .= join( "", $temp_handle->getlines() );
+ } elsif ( ref( $redir ) eq "ARRAY" ) {
+ push( @{ $redir }, $temp_handle->getlines() );
+ }; # if
+ }; # if
+ if ( not UNIVERSAL::isa( $redir, "IO::Handle" ) ) {
+ $temp_handle->close()
+ or die( "$!" );
+ }; # if
+
+ # Restore handle to original value.
+ $save_handle->flush();
+ open( $handle, $mode . "&" . $save_handle->fileno() )
+ or die( "Cannot dup filehandle: $!" );
+
+ # Close save handle.
+ $save_handle->close()
+ or die( "$!" );
+
+ # Delete parameters saved during preprocessing.
+ delete( $arg->{ save_handle } );
+ delete( $arg->{ temp_handle } );
+ delete( $arg->{ temp_name } );
+
+}; # sub _post
+
+#--------------------------------------------------------------------------------------------------
+
+=item C<execute( [ @command ], @options )>
+
+Execute specified program or shell command.
+
+Program is specified by reference to an array, that array is passed to C<system()> function which
+executes the command. See L<perlfunc> for details how C<system()> interprets various forms of
+C<@command>.
+
+By default, in case of any error error message is issued and script terminated (by runtime_error()).
+Function returns an exit code of program.
+
+Alternatively, he function may return exit status of the program (see C<-ignore_status>) or signal
+(see C<-ignore_signal>) so caller may analyze it and continue execution.
+
+Options:
+
+=over
+
+=item C<-stdin>
+
+Redirect stdin of program. The value of option can be:
+
+=over
+
+=item C<undef>
+
+Stdin of child is attached to null device.
+
+=item a string
+
+Stdin of child is attached to a file with name specified by option.
+
+=item a reference to a scalar
+
+A dereferenced scalar is written to a temp file, and child's stdin is attached to that file.
+
+=item a reference to an array
+
+A dereferenced array is written to a temp file, and child's stdin is attached to that file.
+
+=back
+
+=item C<-stdout>
+
+Redirect stdout. Possible values are the same as for C<-stdin> option. The only difference is
+reference specifies a variable receiving program's output.
+
+=item C<-stderr>
+
+It similar to C<-stdout>, but redirects stderr. There is only one additional value:
+
+=over
+
+=item an empty string
+
+means that stderr should be redirected to the same place where stdout is redirected to.
+
+=back
+
+=item C<-append>
+
+Redirected stream will not overwrite previous content of file (or variable).
+Note, that option affects both stdout and stderr.
+
+=item C<-ignore_status>
+
+By default, subroutine raises an error and exits the script if program returns non-exit status. If
+this options is true, no error is raised. Instead, status is returned as function result (and $@ is
+set to error message).
+
+=item C<-ignore_signal>
+
+By default, subroutine raises an error and exits the script if program die with signal. If
+this options is true, no error is raised in such a case. Instead, signal number is returned (as
+negative value), error message is placed to C<$@> variable.
+
+If command is not even started, -256 is returned.
+
+=back
+
+Examples:
+
+ execute( [ "cmd.exe", "/c", "dir" ] );
+ # Execute NT shell with specified options, no redirections are
+ # made.
+
+ my $output;
+ execute( [ "cvs", "-n", "-q", "update", "." ], -stdout => \$output );
+ # Execute "cvs -n -q update ." command, output is saved
+ # in $output variable.
+
+ my @output;
+ execute( [ qw( cvs -n -q update . ) ], -stdout => \@output, -stderr => undef );
+ # Execute specified command, output is saved in @output
+ # variable, stderr stream is redirected to null device
+ # (/dev/null in Linux* OS an nul in Windows* OS).
+
+=cut
+
+sub execute($@) {
+
+ # !!! Add something to complain on unknown options...
+
+ my $command = shift( @_ );
+ my %opts = @_;
+ my $prefix = "Could not execute $command->[ 0 ]";
+
+ check_opts( %opts, [ qw( -stdin -stdout -stderr -append -ignore_status -ignore_signal ) ] );
+
+ if ( ref( $command ) ne "ARRAY" ) {
+ Carp::croak( "execute: $command must be a reference to array" );
+ }; # if
+
+ my $stdin = { handle => \*STDIN, mode => "<" };
+ my $stdout = { handle => \*STDOUT, mode => ">" };
+ my $stderr = { handle => \*STDERR, mode => ">" };
+ my $streams = {
+ stdin => $stdin,
+ stdout => $stdout,
+ stderr => $stderr
+ }; # $streams
+
+ for my $stream ( qw( stdin stdout stderr ) ) {
+ if ( exists( $opts{ "-$stream" } ) ) {
+ if ( ref( $opts{ "-$stream" } ) !~ m/\A(|SCALAR|ARRAY)\z/ ) {
+ Carp::croak( "execute: -$stream option: must have value of scalar, or reference to (scalar or array)." );
+ }; # if
+ $streams->{ $stream }->{ redir } = $opts{ "-$stream" };
+ }; # if
+ if ( $opts{ -append } and ( $streams->{ $stream }->{ mode } ) eq ">" ) {
+ $streams->{ $stream }->{ mode } = ">>";
+ }; # if
+ }; # foreach $stream
+
+ _pre( $stdin );
+ _pre( $stdout );
+ if ( defined( $stderr->{ redir } ) and not ref( $stderr->{ redir } ) and ( $stderr->{ redir } eq "" ) ) {
+ if ( exists( $stdout->{ redir } ) ) {
+ $stderr->{ redir } = $stdout->{ temp_handle };
+ } else {
+ $stderr->{ redir } = ${ $stdout->{ handle } };
+ }; # if
+ }; # if
+ _pre( $stderr );
+ my $rc = system( @$command );
+ my $errno = $!;
+ my $child = $?;
+ _post( $stderr );
+ _post( $stdout );
+ _post( $stdin );
+
+ my $exit = 0;
+ my $signal_num = $child & 127;
+ my $exit_status = $child >> 8;
+ $@ = "";
+
+ if ( $rc == -1 ) {
+ $@ = "\"$command->[ 0 ]\" failed: $errno";
+ $exit = -256;
+ if ( not $opts{ -ignore_signal } ) {
+ runtime_error( $@ );
+ }; # if
+ } elsif ( $signal_num != 0 ) {
+ $@ = "\"$command->[ 0 ]\" failed due to signal $signal_num.";
+ $exit = - $signal_num;
+ if ( not $opts{ -ignore_signal } ) {
+ runtime_error( $@ );
+ }; # if
+ } elsif ( $exit_status != 0 ) {
+ $@ = "\"$command->[ 0 ]\" returned non-zero status $exit_status.";
+ $exit = $exit_status;
+ if ( not $opts{ -ignore_status } ) {
+ runtime_error( $@ );
+ }; # if
+ }; # if
+
+ return $exit;
+
+}; # sub execute
+
+#--------------------------------------------------------------------------------------------------
+
+=item C<backticks( [ @command ], @options )>
+
+Run specified program or shell command and return output.
+
+In scalar context entire output is returned in a single string. In list context list of strings
+is returned. Function issues an error and exits script if any error occurs.
+
+=cut
+
+
+sub backticks($@) {
+
+ my $command = shift( @_ );
+ my %opts = @_;
+ my @output;
+
+ check_opts( %opts, [ qw( -chomp ) ] );
+
+ execute( $command, -stdout => \@output );
+
+ if ( $opts{ -chomp } ) {
+ chomp( @output );
+ }; # if
+
+ return ( wantarray() ? @output : join( "", @output ) );
+
+}; # sub backticks
+
+#--------------------------------------------------------------------------------------------------
+
+sub pad($$$) {
+ my ( $str, $length, $pad ) = @_;
+ my $lstr = length( $str ); # Length of source string.
+ if ( $lstr < $length ) {
+ my $lpad = length( $pad ); # Length of pad.
+ my $count = int( ( $length - $lstr ) / $lpad ); # Number of pad repetitions.
+ my $tail = $length - ( $lstr + $lpad * $count );
+ $str = $str . ( $pad x $count ) . substr( $pad, 0, $tail );
+ }; # if
+ return $str;
+}; # sub pad
+
+# --------------------------------------------------------------------------------------------------
+
+=back
+
+=cut
+
+#--------------------------------------------------------------------------------------------------
+
+return 1;
+
+#--------------------------------------------------------------------------------------------------
+
+=cut
+
+# End of file.
diff --git a/final/runtime/tools/message-converter.pl b/final/runtime/tools/message-converter.pl
new file mode 100755
index 0000000..e22c928
--- /dev/null
+++ b/final/runtime/tools/message-converter.pl
@@ -0,0 +1,775 @@
+#!/usr/bin/perl
+
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+use strict;
+use warnings;
+
+use File::Glob ":glob";
+use Encode qw{ encode };
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use tools;
+
+our $VERSION = "0.04";
+my $escape = qr{%};
+my $placeholder = qr{(\d)\$(s|l?[du])};
+my $target_os;
+
+my $sections =
+ {
+ meta => { short => "prp" }, # "prp" stands for "property".
+ strings => { short => "str" },
+ formats => { short => "fmt" },
+ messages => { short => "msg" },
+ hints => { short => "hnt" },
+ };
+my @sections = qw{ meta strings formats messages hints };
+# Assign section properties: long name, set number, base number.
+map( $sections->{ $sections[ $_ ] }->{ long } = $sections[ $_ ], ( 0 .. @sections - 1 ) );
+map( $sections->{ $sections[ $_ ] }->{ set } = ( $_ + 1 ), ( 0 .. @sections - 1 ) );
+map( $sections->{ $sections[ $_ ] }->{ base } = ( ( $_ + 1 ) << 16 ), ( 0 .. @sections - 1 ) );
+
+# Properties of Meta section.
+my @properties = qw{ Language Country LangId Version Revision };
+
+
+sub _generate_comment($$$) {
+
+ my ( $data, $open, $close ) = @_;
+ my $bulk =
+ $open . " Do not edit this file! " . $close . "\n" .
+ $open . " The file was generated from " . get_file( $data->{ "%meta" }->{ source } ) .
+ " by " . $tool . " on " . localtime() . ". " . $close . "\n";
+ return $bulk;
+
+}; # sub _generate_comment
+
+
+sub msg2sgn($) {
+
+ # Convert message string to signature. Signature is a list of placeholders in sorted order.
+ # For example, signature of "%1$s value \"%2$s\" is invalid." is "%1$s %2$s".
+
+ my ( $msg ) = @_;
+ my @placeholders;
+ pos( $msg ) = 0;
+ while ( $msg =~ m{\G.*?$escape$placeholder}g ) {
+ $placeholders[ $1 - 1 ] = "%$1\$$2";
+ }; # while
+ for ( my $i = 1; $i <= @placeholders; ++ $i ) {
+ if ( not defined( $placeholders[ $i - 1 ] ) ) {
+ $placeholders[ $i - 1 ] = "%$i\$-";
+ }; # if
+ }; # for $i
+ return join( " ", @placeholders );
+
+}; # sub msg2sgn
+
+
+sub msg2src($) {
+
+ # Convert message string to a C string constant.
+
+ my ( $msg ) = @_;
+ if ( $target_os eq "win" ) {
+ $msg =~ s{$escape$placeholder}{\%$1!$2!}g;
+ }; # if
+ return $msg;
+
+}; # sub msg2src
+
+
+my $special =
+ {
+ "n" => "\n",
+ "t" => "\t",
+ };
+
+sub msg2mc($) {
+ my ( $msg ) = @_;
+ $msg = msg2src( $msg ); # Get windows style placeholders.
+ $msg =~ s{\\(.)}{ exists( $special->{ $1 } ) ? $special->{ $1 } : $1 }ge;
+ return $msg;
+}; # sub msg2mc
+
+
+
+sub parse_message($) {
+
+ my ( $msg ) = @_;
+ pos( $msg ) = 0;
+ for ( ; ; ) {
+ if ( $msg !~ m{\G.*?$escape}gc ) {
+ last;
+ }
+ if ( $msg !~ m{\G$placeholder}gc ) {
+ return "Bad %-sequence near \"%" . substr( $msg, pos( $msg ), 7 ) . "\"";
+ }; # if
+ }; # forever
+ return undef;
+
+}; # sub parse_message
+
+
+sub parse_source($) {
+
+ my ( $name ) = @_;
+
+ my @bulk = read_file( $name, -layer => ":utf8" );
+ my $data = {};
+
+ my $line;
+ my $n = 0; # Line number.
+ my $obsolete = 0; # Counter of obsolete entries.
+ my $last_idx;
+ my %idents;
+ my $section;
+
+ my $error =
+ sub {
+ my ( $n, $line, $msg ) = @_;
+ runtime_error( "Error parsing $name line $n: " . "$msg:\n" . " $line" );
+ }; # sub
+
+ foreach $line ( @bulk ) {
+ ++ $n;
+ # Skip empty lines and comments.
+ if ( $line =~ m{\A\s*(\n|#)} ) {
+ $last_idx = undef;
+ next;
+ }; # if
+ # Parse section header.
+ if ( $line =~ m{\A-\*-\s*([A-Z_]*)\s*-\*-\s*\n\z}i ) {
+ $section = ( lc( $1 ) );
+ if ( not grep( $section eq $_, @sections ) ) {
+ $error->( $n, $line, "Unknown section \"$section\" specified" );
+ }; # if
+ if ( exists( $data->{ $section } ) ) {
+ $error->( $n, $line, "Multiple sections of the same type specified" );
+ }; # if
+ %idents = (); # Clean list of known message identifiers.
+ next;
+ }; # if
+ if ( not defined( $section ) ) {
+ $error->( $n, $line, "Section heading expected" );
+ }; # if
+ # Parse section body.
+ if ( $section eq "meta" ) {
+ if ( $line =~ m{\A([A-Z_][A-Z_0-9]*)\s+"(.*)"\s*?\n?\z}i ) {
+ # Parse meta properties (such as Language, Country, and LangId).
+ my ( $property, $value ) = ( $1, $2 );
+ if ( not grep( $_ eq $property , @properties ) ) {
+ $error->( $n, $line, "Unknown property \"$property\" specified" );
+ }; # if
+ if ( exists( $data->{ "%meta" }->{ $property } ) ) {
+ $error->( $n, $line, "Property \"$property\" has already been specified" );
+ }; # if
+ $data->{ "%meta" }->{ $property } = $value;
+ $last_idx = undef;
+ next;
+ }; # if
+ $error->( $n, $line, "Property line expected" );
+ }; # if
+ # Parse message.
+ if ( $line =~ m{\A([A-Z_][A-Z_0-9]*)\s+"(.*)"\s*?\n?\z}i ) {
+ my ( $ident, $message ) = ( $1, $2 );
+ if ( $ident eq "OBSOLETE" ) {
+ # If id is "OBSOLETE", add a unique suffix. It provides convenient way to mark
+ # obsolete messages.
+ ++ $obsolete;
+ $ident .= $obsolete;
+ }; # if
+ if ( exists( $idents{ $ident } ) ) {
+ $error->( $n, $line, "Identifier \"$ident\" is redefined" );
+ }; # if
+ # Check %-sequences.
+ my $err = parse_message( $message );
+ if ( $err ) {
+ $error->( $n, $line, $err );
+ }; # if
+ # Save message.
+ push( @{ $data->{ $section } }, [ $ident, $message ] );
+ $idents{ $ident } = 1;
+ $last_idx = @{ $data->{ $section } } - 1;
+ next;
+ }; # if
+ # Parse continuation line.
+ if ( $line =~ m{\A\s*"(.*)"\s*\z} ) {
+ my $message = $1;
+ if ( not defined( $last_idx ) ) {
+ $error->( $n, $line, "Unexpected continuation line" );
+ }; # if
+ # Check %-sequences.
+ my $err = parse_message( $message );
+ if ( $err ) {
+ $error->( $n, $line, $err );
+ }; # if
+ # Save continuation.
+ $data->{ $section }->[ $last_idx ]->[ 1 ] .= $message;
+ next;
+ }; # if
+ $error->( $n, $line, "Message definition expected" );
+ }; # foreach
+ $data->{ "%meta" }->{ source } = $name;
+ foreach my $section ( @sections ) {
+ if ( not exists( $data->{ $section } ) ) {
+ $data->{ $section } = [];
+ }; # if
+ }; # foreach $section
+
+ foreach my $property ( @properties ) {
+ if ( not defined( $data->{ "%meta" }->{ $property } ) ) {
+ runtime_error(
+ "Error parsing $name: " .
+ "Required \"$property\" property is not specified"
+ );
+ }; # if
+ push( @{ $data->{ meta } }, [ $property, $data->{ "%meta" }->{ $property } ] );
+ }; # foreach
+
+ return $data;
+
+}; # sub parse_source
+
+
+sub generate_enum($$$) {
+
+ my ( $data, $file, $prefix ) = @_;
+ my $bulk = "";
+
+ $bulk =
+ _generate_comment( $data, "//", "//" ) .
+ "\n" .
+ "enum ${prefix}_id {\n\n" .
+ " // A special id for absence of message.\n" .
+ " ${prefix}_null = 0,\n\n";
+
+ foreach my $section ( @sections ) {
+ my $props = $sections->{ $section }; # Section properties.
+ my $short = $props->{ short }; # Short section name, frequently used.
+ $bulk .=
+ " // Set #$props->{ set }, $props->{ long }.\n" .
+ " ${prefix}_${short}_first = $props->{ base },\n";
+ foreach my $item ( @{ $data->{ $section } } ) {
+ my ( $ident, undef ) = @$item;
+ $bulk .= " ${prefix}_${short}_${ident},\n";
+ }; # foreach
+ $bulk .= " ${prefix}_${short}_last,\n\n";
+ }; # foreach $type
+ $bulk .= " ${prefix}_xxx_lastest\n\n";
+
+ $bulk .=
+ "}; // enum ${prefix}_id\n" .
+ "\n" .
+ "typedef enum ${prefix}_id ${prefix}_id_t;\n" .
+ "\n";
+
+ $bulk .=
+ "\n" .
+ "// end of file //\n";
+
+ write_file( $file, \$bulk );
+
+}; # sub generate_enum
+
+
+sub generate_signature($$) {
+
+ my ( $data, $file ) = @_;
+ my $bulk = "";
+
+ $bulk .= "// message catalog signature file //\n\n";
+
+ foreach my $section ( @sections ) {
+ my $props = $sections->{ $section }; # Section properties.
+ my $short = $props->{ short }; # Short section name, frequently used.
+ $bulk .= "-*- " . uc( $props->{ long } ) . "-*-\n\n";
+ foreach my $item ( @{ $data->{ $section } } ) {
+ my ( $ident, $msg ) = @$item;
+ $bulk .= sprintf( "%-40s %s\n", $ident, msg2sgn( $msg ) );
+ }; # foreach
+ $bulk .= "\n";
+ }; # foreach $type
+
+ $bulk .= "// end of file //\n";
+
+ write_file( $file, \$bulk );
+
+}; # sub generate_signature
+
+
+sub generate_default($$$) {
+
+ my ( $data, $file, $prefix ) = @_;
+ my $bulk = "";
+
+ $bulk .=
+ _generate_comment( $data, "//", "//" ) .
+ "\n";
+
+ foreach my $section ( @sections ) {
+ $bulk .=
+ "static char const *\n" .
+ "__${prefix}_default_${section}" . "[] =\n" .
+ " {\n" .
+ " NULL,\n";
+ foreach my $item ( @{ $data->{ $section } } ) {
+ my ( undef, $msg ) = @$item;
+ $bulk .= " \"" . msg2src( $msg ) . "\",\n";
+ }; # while
+ $bulk .=
+ " NULL\n" .
+ " };\n" .
+ "\n";
+ }; # foreach $type
+
+ $bulk .=
+ "struct kmp_i18n_section {\n" .
+ " int size;\n" .
+ " char const ** str;\n" .
+ "}; // struct kmp_i18n_section\n" .
+ "typedef struct kmp_i18n_section kmp_i18n_section_t;\n" .
+ "\n" .
+ "static kmp_i18n_section_t\n" .
+ "__${prefix}_sections[] =\n" .
+ " {\n" .
+ " { 0, NULL },\n";
+ foreach my $section ( @sections ) {
+ $bulk .=
+ " { " . @{ $data->{ $section } } . ", __${prefix}_default_${section} },\n";
+ }; # foreach $type
+ $bulk .=
+ " { 0, NULL }\n" .
+ " };\n" .
+ "\n";
+
+ $bulk .=
+ "struct kmp_i18n_table {\n" .
+ " int size;\n" .
+ " kmp_i18n_section_t * sect;\n" .
+ "}; // struct kmp_i18n_table\n" .
+ "typedef struct kmp_i18n_table kmp_i18n_table_t;\n" .
+ "\n" .
+ "static kmp_i18n_table_t __kmp_i18n_default_table =\n" .
+ " {\n" .
+ " " . @sections . ",\n" .
+ " __kmp_i18n_sections\n" .
+ " };\n" .
+ "\n" .
+ "// end of file //\n";
+
+ write_file( $file, \$bulk );
+
+}; # sub generate_default
+
+
+sub generate_message_unix($$) {
+
+ my ( $data, $file ) = @_;
+ my $bulk = "";
+
+ $bulk .=
+ _generate_comment( $data, "\$", "\$" ) .
+ "\n" .
+ "\$quote \"\n\n";
+
+ foreach my $section ( @sections ) {
+ $bulk .=
+ "\$ " . ( "-" x 78 ) . "\n\$ $section\n\$ " . ( "-" x 78 ) . "\n\n" .
+ "\$set $sections->{ $section }->{ set }\n" .
+ "\n";
+ my $n = 0;
+ foreach my $item ( @{ $data->{ $section } } ) {
+ my ( undef, $msg ) = @$item;
+ ++ $n;
+ $bulk .= "$n \"" . msg2src( $msg ) . "\"\n";
+ }; # foreach
+ $bulk .= "\n";
+ }; # foreach $type
+
+ $bulk .=
+ "\n" .
+ "\$ end of file \$\n";
+
+ write_file( $file, \$bulk, -layer => ":utf8" );
+
+}; # sub generate_message_linux
+
+
+sub generate_message_windows($$) {
+
+ my ( $data, $file ) = @_;
+ my $bulk = "";
+ my $language = $data->{ "%meta" }->{ Language };
+ my $langid = $data->{ "%meta" }->{ LangId };
+
+ $bulk .=
+ _generate_comment( $data, ";", ";" ) .
+ "\n" .
+ "LanguageNames = ($language=$langid:msg_$langid)\n" .
+ "\n";
+
+ $bulk .=
+ "FacilityNames=(\n";
+ foreach my $section ( @sections ) {
+ my $props = $sections->{ $section }; # Section properties.
+ $bulk .=
+ " $props->{ short }=" . $props->{ set } ."\n";
+ }; # foreach $section
+ $bulk .=
+ ")\n\n";
+
+ foreach my $section ( @sections ) {
+ my $short = $sections->{ $section }->{ short };
+ my $n = 0;
+ foreach my $item ( @{ $data->{ $section } } ) {
+ my ( undef, $msg ) = @$item;
+ ++ $n;
+ $bulk .=
+ "MessageId=$n\n" .
+ "Facility=$short\n" .
+ "Language=$language\n" .
+ msg2mc( $msg ) . "\n.\n\n";
+ }; # foreach $item
+ }; # foreach $section
+
+ $bulk .=
+ "\n" .
+ "; end of file ;\n";
+
+ $bulk = encode( "UTF-16LE", $bulk ); # Convert text to UTF-16LE used in Windows* OS.
+ write_file( $file, \$bulk, -binary => 1 );
+
+}; # sub generate_message_windows
+
+
+#
+# Parse command line.
+#
+
+my $input_file;
+my $enum_file;
+my $signature_file;
+my $default_file;
+my $message_file;
+my $id;
+my $prefix = "";
+get_options(
+ "os=s" => \$target_os,
+ "enum-file=s" => \$enum_file,
+ "signature-file=s" => \$signature_file,
+ "default-file=s" => \$default_file,
+ "message-file=s" => \$message_file,
+ "id|lang-id" => \$id,
+ "prefix=s" => \$prefix,
+);
+if ( @ARGV == 0 ) {
+ cmdline_error( "No source file specified -- nothing to do" );
+}; # if
+if ( @ARGV > 1 ) {
+ cmdline_error( "Too many source files specified" );
+}; # if
+$input_file = $ARGV[ 0 ];
+
+
+my $generate_message;
+if ( $target_os =~ m{\A(?:lin|mac)\z} ) {
+ $generate_message = \&generate_message_unix;
+} elsif ( $target_os eq "win" ) {
+ $generate_message = \&generate_message_windows;
+} else {
+ runtime_error( "OS \"$target_os\" is not supported" );
+}; # if
+
+
+#
+# Do the work.
+#
+
+my $data = parse_source( $input_file );
+if ( defined( $id ) ) {
+ print( $data->{ "%meta" }->{ LangId }, "\n" );
+}; # if
+if ( defined( $enum_file ) ) {
+ generate_enum( $data, $enum_file, $prefix );
+}; # if
+if ( defined( $signature_file ) ) {
+ generate_signature( $data, $signature_file );
+}; # if
+if ( defined( $default_file ) ) {
+ generate_default( $data, $default_file, $prefix );
+}; # if
+if ( defined( $message_file ) ) {
+ $generate_message->( $data, $message_file );
+}; # if
+
+exit( 0 );
+
+__END__
+
+=pod
+
+=head1 NAME
+
+B<message-converter.pl> -- Convert message catalog source file into another text forms.
+
+=head1 SYNOPSIS
+
+B<message-converter.pl> I<option>... <file>
+
+=head1 OPTIONS
+
+=over
+
+=item B<--enum-file=>I<file>
+
+Generate enum file named I<file>.
+
+=item B<--default-file=>I<file>
+
+Generate default messages file named I<file>.
+
+=item B<--lang-id>
+
+Print language identifier of the message catalog source file.
+
+=item B<--message-file=>I<file>
+
+Generate message file.
+
+=item B<--signature-file=>I<file>
+
+Generate signature file.
+
+Signatures are used for checking compatibility. For example, to check a primary
+catalog and its translation to another language, signatures of both catalogs should be generated
+and compared. If signatures are identical, catalogs are compatible.
+
+=item B<--prefix=>I<prefix>
+
+Prefix to be used for all C identifiers (type and variable names) in enum and default messages
+files.
+
+=item B<--os=>I<str>
+
+Specify OS name the message formats to be converted for. If not specified expolicitly, value of
+LIBOMP_OS environment variable is used. If LIBOMP_OS is not defined, host OS is detected.
+
+Depending on OS, B<message-converter.pl> converts message formats to GNU style or MS style.
+
+=item Standard Options
+
+=over
+
+=item B<--doc>
+
+=item B<--manual>
+
+Print full documentation and exit.
+
+=item B<--help>
+
+Print short help message and exit.
+
+=item B<--version>
+
+Print version string and exit.
+
+=back
+
+=back
+
+=head1 ARGUMENTS
+
+=over
+
+=item I<file>
+
+A name of input file.
+
+=back
+
+=head1 DESCRIPTION
+
+=head2 Message Catalog File Format
+
+It is plain text file in UTF-8 encoding. Empty lines and lines beginning with sharp sign (C<#>) are
+ignored. EBNF syntax of content:
+
+ catalog = { section };
+ section = header body;
+ header = "-*- " section-id " -*-" "\n";
+ body = { message };
+ message = message-id string "\n" { string "\n" };
+ section-id = identifier;
+ message-id = "OBSOLETE" | identifier;
+ identifier = letter { letter | digit | "_" };
+ string = """ { character } """;
+
+Identifier starts with letter, with following letters, digits, and underscores. Identifiers are
+case-sensitive. Setion identifiers are fixed: C<META>, C<STRINGS>, C<FORMATS>, C<MESSAGES> and
+C<HINTS>. Message identifiers must be unique within section. Special C<OBSOLETE> pseudo-identifier
+may be used many times.
+
+String is a C string literal which must not cross line boundaries.
+Long messages may occupy multiple lines, a string per line.
+
+Message may include printf-like GNU-style placeholders for arguments: C<%I<n>$I<t>>,
+where I<n> is argument number (C<1>, C<2>, ...),
+I<t> -- argument type, C<s> (string) or C<d> (32-bit integer).
+
+See also comments in F<i18n/en_US.txt>.
+
+=head2 Output Files
+
+This script can generate 3 different text files from single source:
+
+=over
+
+=item Enum file.
+
+Enum file is a C include file, containing definitions of message identifiers, e. g.:
+
+ enum kmp_i18n_id {
+
+ // Set #1, meta.
+ kmp_i18n_prp_first = 65536,
+ kmp_i18n_prp_Language,
+ kmp_i18n_prp_Country,
+ kmp_i18n_prp_LangId,
+ kmp_i18n_prp_Version,
+ kmp_i18n_prp_Revision,
+ kmp_i18n_prp_last,
+
+ // Set #2, strings.
+ kmp_i18n_str_first = 131072,
+ kmp_i18n_str_Error,
+ kmp_i18n_str_UnknownFile,
+ kmp_i18n_str_NotANumber,
+ ...
+
+ // Set #3, fotrmats.
+ ...
+
+ kmp_i18n_xxx_lastest
+
+ }; // enum kmp_i18n_id
+
+ typedef enum kmp_i18n_id kmp_i18n_id_t;
+
+=item Default messages file.
+
+Default messages file is a C include file containing default messages to be embedded into
+application (and used if external message catalog does not exist or could not be open):
+
+ static char const *
+ __kmp_i18n_default_meta[] =
+ {
+ NULL,
+ "English",
+ "USA",
+ "1033",
+ "2",
+ "20090806",
+ NULL
+ };
+
+ static char const *
+ __kmp_i18n_default_strings[] =
+ {
+ "Error",
+ "(unknown file)",
+ "not a number",
+ ...
+ NULL
+ };
+
+ ...
+
+=item Message file.
+
+Message file is an input for message compiler, F<gencat> on Linux* OS and OS X*, or F<mc.exe> on
+Windows* OS.
+
+Here is the example of Linux* OS message file:
+
+ $quote "
+ 1 "Japanese"
+ 2 "Japan"
+ 3 "1041"
+ 4 "2"
+ 5 "Based on Enlish message catalog revision 20090806"
+ ...
+
+Example of Windows* OS message file:
+
+ LanguageNames = (Japanese=10041:msg_1041)
+
+ FacilityNames = (
+ prp=1
+ str=2
+ fmt=3
+ ...
+ )
+
+ MessageId=1
+ Facility=prp
+ Language=Japanese
+ Japanese
+ .
+
+ ...
+
+=item Signature.
+
+Signature is a processed source file: comments stripped, strings deleted, but placeholders kept and
+sorted.
+
+ -*- FORMATS-*-
+
+ Info %1$d %2$s
+ Warning %1$d %2$s
+ Fatal %1$d %2$s
+ SysErr %1$d %2$s
+ Hint %1$- %2$s
+ Pragma %1$s %2$s %3$s %4$s
+
+The purpose of signatures -- compare two message source files for compatibility. If signatures of
+two message sources are the same, binary message catalogs will be compatible.
+
+=back
+
+=head1 EXAMPLES
+
+Generate include file containing message identifiers:
+
+ $ message-converter.pl --enum-file=kmp_i18n_id.inc en_US.txt
+
+Generate include file contating default messages:
+
+ $ message-converter.pl --default-file=kmp_i18n_default.inc en_US.txt
+
+Generate input file for message compiler, Linux* OS example:
+
+ $ message-converter.pl --message-file=ru_RU.UTF-8.msg ru_RU.txt
+
+Generate input file for message compiler, Windows* OS example:
+
+ > message-converter.pl --message-file=ru_RU.UTF-8.mc ru_RU.txt
+
+=cut
+
+# end of file #
+
diff --git a/final/testsuite/LICENSE b/final/testsuite/LICENSE
new file mode 100644
index 0000000..c19fb01
--- /dev/null
+++ b/final/testsuite/LICENSE
@@ -0,0 +1,34 @@
+ Copyright (c) 2011, 2012
+ University of Houston System
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ o Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ o Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ o Neither the name of the University of Houston System nor the names of its
+ contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/final/testsuite/LLVM-IR/lit.cfg b/final/testsuite/LLVM-IR/lit.cfg
new file mode 100644
index 0000000..1957819
--- /dev/null
+++ b/final/testsuite/LLVM-IR/lit.cfg
@@ -0,0 +1,78 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+import os
+import sys
+import re
+import platform
+
+try:
+ import lit.util
+ import lit.formats
+except ImportError:
+ pass
+
+# name: The name of this test suite.
+config.name = 'OpenMPValidationSuite'
+
+# testFormat: The test format to use to interpret tests.
+config.test_format = lit.formats.ShTest(execute_external=False)
+
+# suffixes: A list of file extensions to treat as test files
+# Note this can be overridden by lit.local.cfg files
+config.suffixes = ['.ll']
+
+# test_source_root: The root path where tests are located.
+#config.test_source_root = "/home/ichoyjx/install/openmp/testsuite/bin"
+#os.path.dirname(__file__)
+
+# test_exec_root: The root path where tests should be run.
+#mpvs_obj_root = getattr(config, 'mpvs_obj_root', None)
+#if mpvs_obj_root is not None:
+config.test_exec_root = "./"
+#os.path.join(mpvs_obj_root, 'src')
+
+# Discover the 'clang' and 'clangcc' to use.
+
+import os
+
+def inferClang(PATH):
+ # Determine which clang to use.
+ clang = os.getenv('CLANG')
+
+ # If the user set clang in the environment, definitely use that and don't
+ # try to validate.
+ if clang:
+ return clang
+
+ # Otherwise look in the path.
+ clang = lit.util.which('clang', PATH)
+
+ if not clang:
+ lit_config.fatal("couldn't find 'clang' program, try setting "
+ "CLANG in your environment")
+
+ return clang
+
+config.clang = inferClang(config.environment['PATH']).replace('\\', '/')
+config.substitutions.append( ('%clang', ' ' + config.clang + ' ') )
+
+# Propogate some environment variable to test environment.
+def addEnv(name):
+ if name in os.environ:
+ config.environment[name] = os.environ[name]
+
+addEnv('HOME')
+addEnv('PWD')
+
+
+addEnv('C_INCLUDE_PATH')
+addEnv('CPLUS_INCLUDE_PATH')
+addEnv('LIBRARY_PATH')
+addEnv('LD_LIBRARY_PATH')
+addEnv('DYLD_LIBRARY_PATH')
+
+# Check that the object root is known.
+if config.test_exec_root is None:
+ lit.fatal('test execution root not set!')
diff --git a/final/testsuite/LLVM-IR/lit.site.cfg.in b/final/testsuite/LLVM-IR/lit.site.cfg.in
new file mode 100644
index 0000000..11866d4
--- /dev/null
+++ b/final/testsuite/LLVM-IR/lit.site.cfg.in
@@ -0,0 +1,30 @@
+## Autogenerated by LLVM/Clang configuration.
+#config.mpvs_src_root = "/home/ichoyjx/install/openmp/testsuite/bin/c"
+config.mpvs_obj_root = "/tmp"
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+
+
+# Needed to check if a hack needs to be applied
+config.llvm_version_major = "@LLVM_VERSION_MAJOR@"
+
+# Compilers
+# FIXME: use llvmcc not llvmgcc
+config.llvmclang = "clang"
+
+# Features
+config.enable_uclibc = True if @ENABLE_UCLIBC@ == 1 else False
+config.enable_posix_runtime = True if @ENABLE_POSIX_RUNTIME@ == 1 else False
+config.have_selinux = True if @HAVE_SELINUX@ == 1 else False
+
+# Current target
+config.target_triple = "@TARGET_TRIPLE@"
+
+# Let the main config do the real work.
+try:
+ lit
+except NameError:
+ # Use lit_config class
+ lit_config.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg")
+else:
+ # Use old lit class
+ lit.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg")
diff --git a/final/testsuite/LLVM-IR/lit.tmp b/final/testsuite/LLVM-IR/lit.tmp
new file mode 100644
index 0000000..81d30fb
--- /dev/null
+++ b/final/testsuite/LLVM-IR/lit.tmp
@@ -0,0 +1 @@
+../LLVM-IR/lin_32e/
diff --git a/final/testsuite/Makefile b/final/testsuite/Makefile
new file mode 100644
index 0000000..cdbc3dc
--- /dev/null
+++ b/final/testsuite/Makefile
@@ -0,0 +1,254 @@
+# General Makefile containing all the necessary compiler flags for the tests
+
+# modify CC and CFLAGS for OpenMP C compilers
+# modify FC and FFLAGS for OpenMP Fortran compilers
+
+
+# Content:
+#########################################################
+
+# 1. Basic usage
+# 2. General testsuite settings
+# 3. Compiler selection and Flags
+
+#########################################################
+
+
+#########################################################
+# 1. Basic usage
+#########################################################
+# make ctest generate c test "ctest"
+# make ftest generate fortran test "ftest"
+# make clean removes all sources and binaries
+# make cleanall removes sources,binaries and logfiles
+
+
+#########################################################
+# 2. General testsuite settings
+#########################################################
+
+# For general testsuite settings see the configuration file
+# ompts.conf
+
+#########################################################
+# 3. Compiler selection and Flags
+#########################################################
+
+# CLANG Compiler
+CC = clang
+CFLAGS = -fopenmp -S -emit-llvm
+FC = gfortran
+FFLAGS = -fopenmp -lm
+FFLAGS = -fopenmp -lm -O3
+
+# GNU Compiler
+# CC = gcc
+# CFLAGS = -fopenmp -lm -O3
+# FC = gfortran
+# FFLAGS = -fopenmp -lm
+# FFLAGS = -fopenmp -lm -O3
+
+# Fujitsu Compilers:
+#CC = fcc
+#CFLAGS = -KOMP,fast_GP2=2
+#FC=frt
+#FFLAGS=-KOMP,fast_GP2=2 -w -Am -X9 -Fixed
+
+
+# PGI compilers
+#CC = pgcc
+#CFLAGS = -mp
+#CFLAGS = -mp -DVERBOSE
+#CFLAGS = -fast -mp
+
+#FC = pgf90
+#FFLAGS = -fast -mp
+#FFLAGS = -mp -g
+
+
+# Intel compilers:
+#CC = icc
+#CFLAGS = -O3 -ip -openmp
+#CFLAGS = -Wall -O0 -openmp
+#CFLAGS = -openmp -lm
+#CFLAGS = -openmp -lm -DVERBOSE
+
+#FC = ifort
+#FFLAGS = -openmp -lm -fpp
+
+# Omni compilers:
+#CC = ompcc
+#CFLAGS = -O3 -lm
+
+
+# Assure compilers:
+#CC = assurec
+#CFLAGS = -O3 -WApname=project -DUSE_ASSURE=1
+#FC =
+#FFLAGS =
+
+# NEC:
+#CC = c++
+#CC = sxc++
+#CFLAGS = -Popenmp
+
+#FC=sxf90
+#FFLAGS= -Popenmp
+
+
+# Hitachi:
+#CC = xcc
+#CFLAGS = -O4 -pvec +Op -parallel -omp
+#FC =
+#FFLAGS =
+
+
+# SGI:
+#CC = cc
+#CFLAGS = -mp -lm
+#FC =
+#FFLAGS =
+
+
+# IBM compilers:
+#CC = xlc_r
+#CFLAGS = -qsmp=omp -lm
+
+
+#FC=xlf90_r
+#FFLAGS=-qsmp=omp -qfixed=132 -qlanglvl=extended
+
+
+# SUN compilers
+#CC = cc
+#CFLAGS = -fast -xopenmp -lm
+
+#FC =f90
+#FFLAGS = -xopenmp -fast -lm
+
+
+# open64 compilers
+# remark: -I. was a workaround because the installation came without omp.h file
+#CC = opencc
+#CFLAGS = -O0 -openmp -lm -I. -lomp -lpthread
+#CFLAGS = -O0 -openmp -lm -I /home/matthew/opt/usr/include -lpthread
+#CFLAGS = -openmp -lm
+
+#FC = openf90
+#FFLAGS = -O0 -openmp -lm -lomp -lpthread
+
+
+#Pathscale Compiler
+#CC = pathcc
+#CFLAGS = -mp -Ofast -lm
+
+#FC=pathf90
+#FFLAGS= -mp -Ofast -lm
+
+
+#OpenUH Compiler
+#CC = uhcc
+#CFLAGS = -mp
+
+#FC = uhf90
+#FFLAGS = -mp
+
+# Check path
+FILE=LLVM-IR/lit.tmp
+CHECK_PATH=`cat $(FILE)`
+
+#########################################################################
+
+help:
+ @echo "OpenMP Validation Suite, v3.0"
+ @echo "(C) University of Stuttgart, University of Houston"
+ @echo ""
+ @echo "Do make [rule], where rule may be one of:"
+ @echo " ctest"
+ @echo " Build and run the OpenMP/C validation tests."
+ @echo " ftest"
+ @echo " Build and run the OpenMP/Fortran validation tests."
+ @echo " print_compile_options"
+ @echo " Display the default compiler and compiler options being tested"
+ @echo " cleansrcs"
+ @echo " Remove sources generated from the templates"
+ @echo " cleanbins"
+ @echo " Remove executables from bin/ directory"
+ @echo " cleanouts"
+ @echo " Remove all *.out files from bin/ directory"
+ @echo " cleanlogs"
+ @echo " Remove all *.log files from bin/ directory"
+ @echo " clean"
+ @echo " Clean out and log files"
+ @echo " distclean"
+ @echo " Clean arch test directory with clean"
+ @echo " veryclean"
+ @echo " Remove the entire bin/c directory with distclean"
+
+omp_my_sleep:
+ mkdir -p bin/c
+ cp omp_my_sleep.h bin/c/
+omp_testsuite: omp_testsuite.h
+ mkdir -p bin/c
+ cp omp_testsuite.h bin/c/
+omp_testsuite.h: ompts-c.conf c/*
+ ./ompts_makeHeader.pl -f=ompts-c.conf -t=c
+.c.o: omp_testsuite omp_my_sleep
+ $(CC) $(CFLAGS) -c $<
+
+ctest: omp_my_sleep omp_testsuite
+ ./runtest.pl --lang=c testlist-c.txt
+ cd bin/; make -j
+
+ftest:
+ mkdir -p bin/fortran
+ cp omp_testsuite.f bin/fortran
+ cp omp_my_sleep.f bin/fortran
+ ./runtest.pl --lang=fortran testlist-f.txt
+
+print_compile_options:
+ @echo "-------------------"
+ @echo "C compiler"
+ @echo "-------------------"
+ @echo "compilation: $(CC) $(CFLAGS)"
+ @$(CC) --version
+ @echo "-------------------"
+ @echo "Fortran compiler"
+ @echo "-------------------"
+ @echo "compilation: $(FC) $(FFLAGS)"
+ @$(FC) --version
+
+
+
+path_to_arch=$(shell ../runtime/tools/check-openmp-test.pl)
+
+cleansrcs:
+ find bin/ -iname "*.[cf]" -exec rm -rf {} \;
+cleanbins:
+ find bin/c -perm /a+x -type f -exec rm -rf {} \;
+ find ./bin/c -not -name "*.c" -a -not -name "*.ll" -type f -exec rm -rf {} \;
+cleanouts:
+ find bin/ -iname "*.out" -exec rm -rf {} \;
+cleanlogs:
+ find bin/ -iname "*.log" -exec rm -rf {} \;
+ rm -rf ./$(path_to_arch)
+
+clean: cleanouts cleanlogs cleanbins cleansrcs
+
+distclean: clean
+ rm -rf bin/c/*
+ rm -rf LLVM-IR/$(CHECK_PATH)
+
+veryclean: distclean
+ rm -rf bin/c/
+ rm -rf bin/fortran/
+
+
+cleanall:
+ rm -rf ./bin/c/
+ rm -rf ./bin/fortran/
+ rm -rf ./LLVM-IR/$(path_to_arch)
+ rm -rf ./$(path_to_arch)
+ rm -rf ./*.log
+
+
diff --git a/final/testsuite/README_LLVM_OPENMP b/final/testsuite/README_LLVM_OPENMP
new file mode 100644
index 0000000..108cada
--- /dev/null
+++ b/final/testsuite/README_LLVM_OPENMP
@@ -0,0 +1,46 @@
+ ============================================================================
+| To use the OpenMP Validation Suite for testing |
+| LLVM OpenMP Implementation |
+| High Performance Computing and Tools, |
+| University of Houston |
+| Jan. 2015 |
+ ============================================================================
+
+Two new files have been added to openmp/runtime: check-openmp.pl and check-openmp-test.pl
+Go to /openmp/runtime, run:
+make test compiler=clang
+make test-clean
+
+------------------------------------------------------------------------------
+For the OpenMP-LLVM Project, following are the Files and Directories to know about:
+
+
+ c Directory containing the templates for the c tests
+ fortran Directory containing the templates for the Fortran
+ Makefile Makefile containing options for compilation
+ README_LLVM_OPENMP README file for to use the OpenMP test-suite
+ README_OpenMP_Validation_Suite README file on the Validation Suite, templates, etc.,
+ as a basis for testing the LLVM OpenMP implementation.
+ LLVM_IR Directory containing target-specific IR files
+ bin/lit files In the lit model, every test must exist inside some test suite.
+ lit resolves the inputs specified on the command line to
+ test suites by searching upwards from the input path
+ until it finds a lit.cfg or lit.site.cfg file.
+ These files serve as both a marker of test suites and
+ as configuration files which lit loads in order to
+ understand how to find and run the tests inside the test suite.
+ bin/header Header for the tests, calls clang driver for the test,
+ and executes the resulting executable
+ bin/Makefile To generate LLVM_IR files
+ bin/distribute.sh Generates LLVM_IR files, finds the architecture and OS, moves
+ the generated IR files to the corresponding folder
+ runtime/tools/check-openmp.pl Retrieving the right path
+ runtime/tools/
+ check-openmp-test.pl Returns the architecture and OS, e.g. lin_32e
+------------------------------------------------------------------------------
+
+Contact and Support
+==============================================================================
+
+Contact: http://www.cs.uh.edu/~hpctools/
+Email: sunita@cs.uh.edu
diff --git a/final/testsuite/README_OpenMP_Validation_Suite b/final/testsuite/README_OpenMP_Validation_Suite
new file mode 100644
index 0000000..8ca7c61
--- /dev/null
+++ b/final/testsuite/README_OpenMP_Validation_Suite
@@ -0,0 +1,334 @@
+ ============================================================================
+| OpenMP Validation Suite V 3.0 |
+| High Performance Computing Center, Stuttgart |
+| High Performance Computing and Tools, University of Houston |
+| Jan. 2012 |
+ ============================================================================
+
+
+TABLE OF CONTENTS
+
+I INTRODUCTION
+I.1. Aims and general function
+I.2. Files and directories
+
+II USAGE
+II.1. First run with make
+II.2 Where to search for results
+II.3. Using the runtest script
+
+III Adding and modifying tests
+III.1. The template structure
+
+IV Known Issues and Workaround
+
+V Contact and Support
+
+------------------------------------------------------------------------------
+
+I. INTRODUCTION
+==============================================================================
+
+I.1. Aims and general function
+--------------------------------
+
+The OpenMP validation suite is designed to verify the correct implementation
+of OpenMP in compilers. It is capable of checking Fortran as well as c
+compiler.
+
+Testing the implementation is based on statistics. Each directive is tested
+by computing and verifying the result with the already known value. In most
+cases a wrong implementation can result in the right values. So the tests are
+run several times.
+
+Additionally, the validation suite creates so called crosstests for each
+directive. These are tests in which either the directive is missing or used
+with different arguments. If this so called crosstest fails, this indicates
+strongly that the previous test is capable of testing the directive.
+
+Lastly, an orphaned test is also run to determine if the directive being
+tested is able to correctly run when 'orphaned' from the main function.
+Essentially, the directive's code is placed into its own function which is
+called during execution of the main function and often inside a parallel
+region.
+
+
+I.2. Files and directories
+----------------------------
+
+
+d c directory containing the templates for the c tests
+d fortran directory containing the templates for the Fortran
+ tests
+ Makefile Makefile containing options for compilation
+ common_utility.f
+ omp_my_sleep.h thread save sleep function
+ omp_testsuite.f Fortran header file
+ omp_testsuite.h autogenerated c-header file
+ ompts-c.conf configuration file for the c tests about how often
+ the tests shall be executed or how large the loop size
+ is
+ ompts_makeHeader.pl perl module for automatically generation of an up
+ to date header file
+ ompts_parserFunctions.pm perl module containing general functions for
+ the parser.pl script
+ ompts_parser.pl script for generating the source code out of the templates
+ ompts_standaloneProc.c framework for the c tests
+ ompts_standaloneProc.f framework for the Fortran tests
+ README the README file you've already found ;-)
+ LICENSE contains license information
+ runtest.pl the frame program of the test suite
+ testlist-f.txt test list containing the available tests for Fortran
+ testlist-c.txt test list containing the available tests for c
+
+
+------------------------------------------------------------------------------
+
+II. USAGE
+==============================================================================
+
+
+II.1. First run with make
+--------------------------
+
+
+You can do a first simple run of the testsuite only after one step of
+configuration:
+
+1) Modify the ompts.conf and ompts-c.conf file, change the number of threads
+and number of repetitions of each test.
+
+2) Modify the Makefile, uncommenting the CC/FC and CFLAGS/FFLAGS variables for
+the compiler of your choice.
+
+And now you can run the testsuite either for a C compiler with:
+
+> make ctest
+
+or for a Fortran compiler with:
+
+> make ftest
+
+
+II.2. Running custom tests
+--------------------------
+
+
+In order to run single tests or custom groups of tests, two make commmands
+are defined: make stest and make fstest. These two command reference the file
+customtest.txt when looking for a testlist to use. Simply edit customtest.txt
+to include the desired test or tests. If customtest.txt contains c tests,
+
+> make stest
+
+or for fortran tests
+
+> make fstest
+
+In order to change the number of threads used in the tests, simply edit the
+Makefile variables MINTHREADS and MAXTHREADS. By default, they are configured
+to use 2 threads. To change the number of times each test is run, for c tests
+edit the REPETITIONS variable in the file ompts-c.conf. The LOOPCOUNT and
+SLEEPTIME variables can also be changed here. For fortran tests, edit the file
+omp_testsuite.f to change both the LOOPCOUNT and the number of times each test
+is run.
+
+
+
+II.3. Understanding the results
+---------------------------------
+
+
+When running the testsuite the results will be shown on the screen.
+
+If you need the results for further purpose you can use the results.txt, which
+is a simple list containing the results for each directive
+in a single line. Each line starts with the name of the directive. Then follows
+the result of the test given in the percentage of the passed tests. If 100% of
+the tests passed successfully, the second number gives the result of the
+corresponding crosstest. Crosstests will only be run if the normal test passes
+with 100% accuracy. If a crosstest was not run or a test does not exist, it is
+denotated by a "-".
+After the results of the normal tests, there follow a series of tests in the
+orphaned mode. If there were no orphaned tests available this is shown by a "-".
+
+If you run the testsuite with different numbers of threads (e.g. using the
+runtest.pl script) the results are shown in blocks of 4 columns for each number
+of threads.
+
+If a test fails you can find more detailed information in the ompts.log,
+bin/c/*.out and *.log files. While the ompts.log file contains all compiler
+error messages for all tests, the *.out and *.log files contain detailed inforamtion
+on the execution process of the single tests.
+In the *.out files there are listed all the results of the single executions of
+the tests. In the *.log files there are error messages of the tests itself.
+
+
+II.4. Cleaning Up
+-----------------
+
+
+Because many files are generated for each tested directive, it is often necessary
+to clean the main directory after a battery of tests. To clean all generated files
+in the main directory including the results and log files,
+
+> make clean
+
+
+To clean only the logs and out files,
+
+> make cleanlogs
+
+To clean only the results,
+
+> make cleanresults
+
+
+
+II.4. Using the runtest script
+-------------------------------
+
+
+So for special purpose you can use the runtest.pl script, which allows a lot
+more options for the execution process than the execution with make.
+
+Using the runtest.pl script is rather easy. You can use the the test suite only
+after two steps of modifications:
+
+1.) Modify the Makefile to your wishes choosing your compiler and the necessary
+ compiler flags.
+2.) If necessary edit one of the test lists (testlist-c.txt) and comment out the
+ tests you do not want to run using # at the beginning of a line. Testlists for Fortran end
+ with -f.txt while test lists for c with -c.txt.
+
+And now you can run the test suite either for Fortran using
+ # > ./runtest.pl -lang=fortran -d=fortran testlist-f.txt
+or for c
+ # > ./runtest.pl -lang=c -d=c testlist-c.txt
+
+With the --help option you can show the complete list of options and their
+explanations.
+
+The test results are summarized in cresults or fresults.txt while *.log keep
+details for individual tests. There is also a file (ompts.log) keeping
+compilation information. (see section II.2 )
+
+If you don't want to test the directives in orphaned mode you can use the
+-norphan option. You also can use the runtest.pl script either to compile all
+tests or run compiled tests e.g. for cross compilation on other platforms. For
+this there are the options -norun and -nocompile.
+
+Happy testing!
+
+
+------------------------------------------------------------------------------
+
+III. How to add new tests / The structure of test templates
+==============================================================================
+
+III.1 The template structure
+------------------------------
+
+The test suite is based on templates so that you only have one file for test,
+crosstest and the orphaned versions of them.
+
+ A) Description of the template structure
+
+The syntax of the templates is much like xml. So each test begins with
+'<ompts:test>' and ends with '</ompts:test>'.
+
+In between there are several other blocks holding information:
+
+- <ompts:testdescription> </ompts:testdescription> In between this tag you can
+ give a description on what the test checks and how it works.
+
+- <ompts:ompversion> </ompts:version> This tag is used to specify the
+ OpenMP-version which includes the tested directive.
+
+- <ompts:directive> </ompts:directive> Used to specify the directive how it is
+ called in the programming language.
+
+- <ompts:dependences> </ompts:dependences> With this tag you can specify other
+ omp directives which are necessary for the correct execution of your test.
+The directives have to be listed by their directive names as it is called in
+the programming language. Multiple directives are separated by ','.
+
+- <ompts:testcode> </ompts:testcode> In this tag stands the whole source code
+for the test / crosstest. Each test has to be written as a function. The
+syntax of the functions differs between C and Fortran: In C it has to take a
+file pointer 'FILE * logFile' and return an int. If the test has been passed
+successful it has to return a value unequal to 0. The file pointer can be used
+to write information into a log file. In Fortran the function takes no
+argument and the function name must not exceed XX characters. The return value
+has to be specified using the '<testfunctionname>' tags. It has to be 1 if the
+test succeeded and 0 if the test failed. For details see the example.
+
+To tell the test suite the name of your test function you have to enclose it
+into the '<ompts:testcode:functionname> </ompts:testcode:functionname>' tag.
+
+If there are differences between test and crosstest you can use the
+<ompts:check> </ompts:check> and <ompts:crosscheck> </ompts:crosscheck> tag.
+When generating the test the parser will use the code enclosed in
+<ompts:check> tags and cut out the code written in <ompts:crosscheck> tags. So
+you have two possibilities to write your template for test and crosstest: The
+first way you can write the complete code is to write the test in one
+<ompts:check> tag and later the crosstest in one <ompts:crosscheck> tag. The
+second way is to write both tests only by enclosing differing parts in
+corresponding tags.
+
+The first method should be preferred if test and crosstest differ much from
+each other. The second e.g. if you only want to change a few options like
+replacing an omp singleprivate clause by an omp private clause or to cut out
+a directive like omp flush. When you use the first way you have to take care
+of the function name! You have to declare it twice with
+<ompts:testcode:functionname>!
+
+- <ompts:orphan> </ompts:orphan> This tag can be used if you want to enable
+ your test to check the directive in orphan regions, too. The code enclosed
+in this part will be written to a separate function which will be called
+instead. If you have variables which are used outside this region you have to
+declare them as global variables enclosed in an <ompts:orphan:vars> tag. For
+further information see the description of the <ompts:orphan:vars> tag.
+
+- <ompts:orphan:vars> </ompts:orphan:vars> This tag is used to specify global
+ variables for an orphan region which allow the exchange of values between
+the main program and the orphaned functions. The usage differs between C and
+Fortran. In C you have to use a single declaration for each variable. You can
+either declare all variables in one single or in several different regions. You
+must not initialize the variables inside! In Fortran you have to put all
+declarations in one single tag. Because there exist no global variables as in
+C you have to use common blocks. For further information see the examples.
+
+III.2. Adding tests to the test lists
+--------------------------------------
+
+After you have created a new test you have to add them to a testlist. Simply
+add the function name in a new Line into a file.
+
+
+
+------------------------------------------------------------------------------
+
+
+IV. Known Issues and Workaround
+==============================================================================
+
+The Sun OS has a problem with the -maxdepth option on the 'make cleanall'
+command. This prevents the tests from being removed from the working directory
+and can cause problems with future tests. To remedy, edit the makefile line
+under the clean command:
+
+ -rm [cf]test*.[cf] [cf]crosstest*.[cf] [cf]ctest*.[cf] [cf]orphan*.[cf]
+
+Change to:
+
+ -rm [cf]test* [cf]crosstest* [cf]ctest* [cf]orphan*
+
+
+
+------------------------------------------------------------------------------
+
+V. Contact and Support
+==============================================================================
+
+Contact: http://www.cs.uh.edu/~hpctools
diff --git a/final/testsuite/adding_xfails.py b/final/testsuite/adding_xfails.py
new file mode 100755
index 0000000..2ad48d9
--- /dev/null
+++ b/final/testsuite/adding_xfails.py
@@ -0,0 +1,32 @@
+
+import os
+import commands
+
+perl = "/usr/bin/perl"
+LLVM = "./LLVM-IR/"
+temp_filename = "temp"
+XFAIL_text = "; XFAIL: *\n"
+
+
+arch_file_list = dict()
+arch_file_list['lin_32e'] = ['test_omp_task_final.ll', 'test_omp_task_untied.ll']
+
+
+arch_script = "../runtime/tools/check-openmp-test.pl"
+arch_cmd = perl + " " + arch_script
+arch = commands.getoutput(arch_cmd)
+arch = arch[:len(arch)-1]
+
+print "Adding XFAILS ..."
+
+for f in arch_file_list[arch]:
+ filename = LLVM + arch + "/" + f
+ lines = open(filename).readlines()
+ lines.insert(1, XFAIL_text)
+ f2 = open(temp_filename, "w")
+ for l in lines:
+ f2.write(l)
+ f2.close()
+
+ os.system("mv " + temp_filename + " " + filename)
+
diff --git a/final/testsuite/bin/Makefile b/final/testsuite/bin/Makefile
new file mode 100644
index 0000000..1dbd3ba
--- /dev/null
+++ b/final/testsuite/bin/Makefile
@@ -0,0 +1,23 @@
+CC = clang
+CFLAGS = -fopenmp -S -emit-llvm
+INCL =
+LIBS =
+
+BIN =
+SRC_DIR = ./c
+SRC_FILES := $(foreach DIR, $(SRC_DIR), $(wildcard $(SRC_DIR)/*.c))
+OBJS := $(patsubst %.c, %.o, $(SRC_FILES))
+TARGETLIST := $(patsubst %.c, %, $(SRC_FILES))
+
+all:$(TARGETLIST)
+ ./distribute.sh
+ @ echo all done
+
+.PHONY: clean
+
+$(TARGETLIST): $(SRC_FILES)
+ $(CC) $(CFLAGS) $(LIBS) $(INCL) $@.c -o $@.ll
+
+clean:
+ @ rm -rf c/*
+ @ echo clean bin done
diff --git a/final/testsuite/bin/distribute.sh b/final/testsuite/bin/distribute.sh
new file mode 100755
index 0000000..dbb0f5f
--- /dev/null
+++ b/final/testsuite/bin/distribute.sh
@@ -0,0 +1,125 @@
+#!/bin/bash
+
+# add header for .ll files
+
+# get tmp header
+cp header /tmp/tmp.header
+echo >> /tmp/tmp.header
+
+# create temporary test package
+mkdir c-$MACHTYPE$OSTYPE
+`cp c/*.ll c-$MACHTYPE$OSTYPE/`
+
+# add new header into .ll files
+for file in c-$MACHTYPE$OSTYPE/*
+do
+ cp $file /tmp/tmp.ll.bf
+ cat /tmp/tmp.header /tmp/tmp.ll.bf > /tmp/tmp.ll
+ mv /tmp/tmp.ll $file
+done
+
+
+# in bin/, target is ../LLVM-IR/ARCH/OS
+LEVEL=../LLVM-IR/
+ARCH_PATH=../LLVM-IR/
+OS_PATH=../LLVM-IR/
+
+# for linux system, add your arch and os here
+declare -a ARCHes=(x86 x86_64 powerpc arm mips darwin)
+declare -a OSes=(linux macosx windows darwin)
+
+declare lowerARCH
+declare lowerOS
+
+# target directory name
+declare upperARCH
+declare upperOS
+
+lowerARCH=$(echo "$MACHTYPE" | tr '[:upper:]' '[:lower:]')
+lowerOS=$(echo "$OSTYPE" | tr '[:upper:]' '[:lower:]')
+
+# ARCH
+for i in ${ARCHes[@]}
+do
+ result=$(echo "${lowerARCH}" | grep $i)
+ if [[ "$result" != "" ]]
+ then
+ # upperARCH=$i
+ upperARCH=$(echo "$i" | tr '[:lower:]' '[:upper:]')
+ fi
+done
+
+if [[ "$upperARCH" == "" ]]
+then
+ echo "Not found ${lowerARCH} in the [${ARCHes[@]}]!"
+ exit
+fi
+
+# OS
+for i in ${OSes[@]}
+do
+ result=$(echo "${lowerOS}" | grep $i)
+ if [[ "$result" != "" ]]
+ then
+ # upperOS=$i
+ upperOS=$(echo "$i" | tr '[:lower:]' '[:upper:]')
+ fi
+done
+
+if [[ "$upperOS" == "" ]]
+then
+ echo "Not found ${lowerOS} in the [${OSes[@]}]!"
+ exit
+fi
+
+# survived, assemble the path
+# ARCH_PATH+=$upperARCH/
+# OS_PATH+=$upperARCH/$upperOS/
+ARCH_newFormat=.
+if [ $upperARCH = "X86" ]; then
+ ARCH_newFormat=32
+else
+ ARCH_newFormat=32e
+fi
+OS_newFormat=.
+if [ $upperOS = "LINUX" ]; then
+ OS_newFormat=lin
+elif [ $upperOS = "MACOSX" ]; then
+ OS_newFormat=mac
+elif [ $upperOS = "WINDOWS" ]; then
+ OS_newFormat=win
+elif [ $upperOS = "DARWIN" ]; then
+ OS_newFormat=dar
+else
+ OS_newFormat=unknown
+fi
+OS_PATH+=$OS_newFormat"_"$ARCH_newFormat
+
+# test and create directory
+if [ ! -d "$LEVEL" ]; then
+ mkdir $LEVEL
+ mkdir $OS_PATH
+else
+ if [ ! -d "$OS_PATH" ]; then
+ mkdir $OS_PATH
+ fi
+fi
+
+# reserve the tmp path to LLVM-IR/ARCH/OS
+echo $OS_PATH"/" > lit.tmp
+
+# OS_ARCH=$OS_newFormat"_"$ARCH_newFormat
+# echo -e "if not '$OS_ARCH' in config.root.targets:" > $OS_PATH'/'lit.local.cfg
+# echo -e "\tconfig.unsupported = True" >> $OS_PATH'/'lit.local.cfg
+
+# copy *.ll files to ARCH/OS
+`cp lit.* $LEVEL`
+
+# omit orph test
+`rm c-$MACHTYPE$OSTYPE/ctest_*.ll`
+`rm c-$MACHTYPE$OSTYPE/orph_ctest_*.ll`
+`cp c-$MACHTYPE$OSTYPE/*.ll $OS_PATH`
+
+# clean
+`rm /tmp/tmp.*`
+rm -rf c-$MACHTYPE$OSTYPE/
diff --git a/final/testsuite/bin/header b/final/testsuite/bin/header
new file mode 100644
index 0000000..3741e62
--- /dev/null
+++ b/final/testsuite/bin/header
@@ -0,0 +1,6 @@
+; RUN: %clang -lomp -lm %s -o %t && %t 2>&1 | FileCheck %s
+; CHECK-NOT: Test failed
+; CHECK: Directive worked without errors
+
+
+
diff --git a/final/testsuite/bin/lit.cfg b/final/testsuite/bin/lit.cfg
new file mode 100644
index 0000000..1957819
--- /dev/null
+++ b/final/testsuite/bin/lit.cfg
@@ -0,0 +1,78 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+import os
+import sys
+import re
+import platform
+
+try:
+ import lit.util
+ import lit.formats
+except ImportError:
+ pass
+
+# name: The name of this test suite.
+config.name = 'OpenMPValidationSuite'
+
+# testFormat: The test format to use to interpret tests.
+config.test_format = lit.formats.ShTest(execute_external=False)
+
+# suffixes: A list of file extensions to treat as test files
+# Note this can be overridden by lit.local.cfg files
+config.suffixes = ['.ll']
+
+# test_source_root: The root path where tests are located.
+#config.test_source_root = "/home/ichoyjx/install/openmp/testsuite/bin"
+#os.path.dirname(__file__)
+
+# test_exec_root: The root path where tests should be run.
+#mpvs_obj_root = getattr(config, 'mpvs_obj_root', None)
+#if mpvs_obj_root is not None:
+config.test_exec_root = "./"
+#os.path.join(mpvs_obj_root, 'src')
+
+# Discover the 'clang' and 'clangcc' to use.
+
+import os
+
+def inferClang(PATH):
+ # Determine which clang to use.
+ clang = os.getenv('CLANG')
+
+ # If the user set clang in the environment, definitely use that and don't
+ # try to validate.
+ if clang:
+ return clang
+
+ # Otherwise look in the path.
+ clang = lit.util.which('clang', PATH)
+
+ if not clang:
+ lit_config.fatal("couldn't find 'clang' program, try setting "
+ "CLANG in your environment")
+
+ return clang
+
+config.clang = inferClang(config.environment['PATH']).replace('\\', '/')
+config.substitutions.append( ('%clang', ' ' + config.clang + ' ') )
+
+# Propogate some environment variable to test environment.
+def addEnv(name):
+ if name in os.environ:
+ config.environment[name] = os.environ[name]
+
+addEnv('HOME')
+addEnv('PWD')
+
+
+addEnv('C_INCLUDE_PATH')
+addEnv('CPLUS_INCLUDE_PATH')
+addEnv('LIBRARY_PATH')
+addEnv('LD_LIBRARY_PATH')
+addEnv('DYLD_LIBRARY_PATH')
+
+# Check that the object root is known.
+if config.test_exec_root is None:
+ lit.fatal('test execution root not set!')
diff --git a/final/testsuite/bin/lit.site.cfg.in b/final/testsuite/bin/lit.site.cfg.in
new file mode 100644
index 0000000..11866d4
--- /dev/null
+++ b/final/testsuite/bin/lit.site.cfg.in
@@ -0,0 +1,30 @@
+## Autogenerated by LLVM/Clang configuration.
+#config.mpvs_src_root = "/home/ichoyjx/install/openmp/testsuite/bin/c"
+config.mpvs_obj_root = "/tmp"
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+
+
+# Needed to check if a hack needs to be applied
+config.llvm_version_major = "@LLVM_VERSION_MAJOR@"
+
+# Compilers
+# FIXME: use llvmcc not llvmgcc
+config.llvmclang = "clang"
+
+# Features
+config.enable_uclibc = True if @ENABLE_UCLIBC@ == 1 else False
+config.enable_posix_runtime = True if @ENABLE_POSIX_RUNTIME@ == 1 else False
+config.have_selinux = True if @HAVE_SELINUX@ == 1 else False
+
+# Current target
+config.target_triple = "@TARGET_TRIPLE@"
+
+# Let the main config do the real work.
+try:
+ lit
+except NameError:
+ # Use lit_config class
+ lit_config.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg")
+else:
+ # Use old lit class
+ lit.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg")
diff --git a/final/testsuite/bin/lit.tmp b/final/testsuite/bin/lit.tmp
new file mode 100644
index 0000000..81d30fb
--- /dev/null
+++ b/final/testsuite/bin/lit.tmp
@@ -0,0 +1 @@
+../LLVM-IR/lin_32e/
diff --git a/final/testsuite/c/has_openmp.c b/final/testsuite/c/has_openmp.c
new file mode 100644
index 0000000..983a973
--- /dev/null
+++ b/final/testsuite/c/has_openmp.c
@@ -0,0 +1,30 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the OpenMp support.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>_OPENMP</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>has_openmp</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int rvalue = 0;
+ </ompts:orphan:vars>
+
+ <ompts:orphan>
+ <ompts:check>
+#ifdef _OPENMP
+ rvalue = 1;
+#endif
+ </ompts:check>
+ <ompts:crosscheck>
+#if 0
+ rvalue = 1;
+#endif
+ </ompts:crosscheck>
+ </ompts:orphan>
+ return (rvalue);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_atomic.c b/final/testsuite/c/omp_atomic.c
new file mode 100644
index 0000000..6c2d1aa
--- /dev/null
+++ b/final/testsuite/c/omp_atomic.c
@@ -0,0 +1,434 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp atomic directive by counting up a variable in a parallelized loop with an atomic directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp atomic</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_atomic</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum;
+ int diff;
+ double dsum = 0;
+ double dt = 0.5; /* base of geometric row for + and - test*/
+ double ddiff;
+ int product;
+ int x;
+ int *logics;
+ int bit_and = 1;
+ int bit_or = 0;
+ int exclusiv_bit_or = 0;
+ </ompts:orphan:vars>
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+ int j;
+ int known_sum;
+ int known_diff;
+ int known_product;
+ int result = 0;
+ int logic_and = 1;
+ int logic_or = 0;
+ double dknown_sum;
+ double rounding_error = 1.E-9;
+ double dpt, div;
+ int logicsArray[LOOPCOUNT];
+ logics = logicsArray;
+
+ sum = 0;
+ diff = 0;
+ product = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ sum += i;
+ }
+ </ompts:orphan>
+ }
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ if (known_sum != sum)
+ {
+ fprintf (logFile,
+ "Error in sum with integers: Result was %d instead of %d.\n",
+ sum, known_sum);
+ result++;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ diff -= i;
+ }
+ </ompts:orphan>
+ }
+ known_diff = ((LOOPCOUNT - 1) * LOOPCOUNT) / 2 * -1;
+ if (diff != known_diff)
+ {
+ fprintf (logFile,
+ "Error in difference with integers: Result was %d instead of 0.\n",
+ diff);
+ result++;
+ }
+
+ /* Tests for doubles */
+ dsum = 0;
+ dpt = 1;
+
+ for (j = 0; j < DOUBLE_DIGITS; ++j)
+ {
+ dpt *= dt;
+ }
+ dknown_sum = (1 - dpt) / (1 -dt);
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < DOUBLE_DIGITS; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ dsum += pow (dt, i);
+ }
+ </ompts:orphan>
+ }
+
+ if (dsum != dknown_sum && (fabs (dsum - dknown_sum) > rounding_error))
+ {
+ fprintf (logFile,
+ "Error in sum with doubles: Result was %f instead of: %f (Difference: %E)\n",
+ dsum, dknown_sum, dsum - dknown_sum);
+ result++;
+ }
+
+ dpt = 1;
+
+ for (j = 0; j < DOUBLE_DIGITS; ++j)
+ {
+ dpt *= dt;
+ }
+ ddiff = (1 - dpt) / (1 - dt);
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < DOUBLE_DIGITS; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ ddiff -= pow (dt, i);
+ }
+ </ompts:orphan>
+ }
+ if (fabs (ddiff) > rounding_error)
+ {
+ fprintf (logFile,
+ "Error in difference with doubles: Result was %E instead of 0.0\n",
+ ddiff);
+ result++;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i <= MAX_FACTOR; i++)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ product *= i;
+ }
+ </ompts:orphan>
+ }
+
+ known_product = KNOWN_PRODUCT;
+ if (known_product != product)
+ {
+ fprintf (logFile,
+ "Error in product with integers: Result was %d instead of %d\n",
+ product, known_product);
+ result++;
+ }
+
+ product = KNOWN_PRODUCT;
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i <= MAX_FACTOR; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ product /= i;
+ }
+ </ompts:orphan>
+ }
+
+ if (product != 1)
+ {
+ fprintf (logFile,
+ "Error in product division with integers: Result was %d instead of 1\n",
+ product);
+ result++;
+ }
+
+ div = 5.0E+5;
+#pragma omp parallel
+ {
+ int i;
+#pragma omp for
+ for (i = 1; i <= MAX_FACTOR; i++)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ div /= i;
+ }
+ }
+
+ if (fabs(div-0.137787) >= 1.0E-4 )
+ {
+ result++;
+ fprintf (logFile,
+ "Error in division with double: Result was %f instead of 0.137787\n", div);
+ }
+
+ x = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ x++;
+ }
+ </ompts:orphan>
+ }
+
+ if (x != LOOPCOUNT)
+ {
+ result++;
+ fprintf (logFile, "Error in ++\n");
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ x--;
+ }
+ </ompts:orphan>
+ }
+
+ if (x != 0)
+ {
+ result++;
+ fprintf (logFile, "Error in --\n");
+ }
+
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ logics[j] = 1;
+ }
+ bit_and = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ bit_and &= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (!bit_and)
+ {
+ result++;
+ fprintf (logFile, "Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ bit_and &= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (bit_and)
+ {
+ result++;
+ fprintf (logFile, "Error in BIT AND part 2\n");
+ }
+
+ for (j = 0; j < LOOPCOUNT; j++)
+ {
+ logics[j] = 0;
+ }
+ bit_or = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ bit_or |= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (bit_or)
+ {
+ result++;
+ fprintf (logFile, "Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ bit_or |= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (!bit_or)
+ {
+ result++;
+ fprintf (logFile, "Error in BIT OR part 2\n");
+ }
+
+ for (j = 0; j < LOOPCOUNT; j++)
+ {
+ logics[j] = 0;
+ }
+ exclusiv_bit_or = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ exclusiv_bit_or ^= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (exclusiv_bit_or)
+ {
+ result++;
+ fprintf (logFile, "Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ exclusiv_bit_or ^= logics[i];
+ }
+ </ompts:orphan>
+ }
+
+ if (!exclusiv_bit_or)
+ {
+ result++;
+ fprintf (logFile, "Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ x = 1;
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < 10; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ x <<= 1;
+ }
+ </ompts:orphan>
+ }
+
+ if ( x != 1024)
+ {
+ result++;
+ fprintf (logFile, "Error in <<\n");
+ x = 1024;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 0; i < 10; ++i)
+ {
+ <ompts:check>#pragma omp atomic</ompts:check>
+ x >>= 1;
+ }
+ </ompts:orphan>
+ }
+
+ if (x != 1)
+ {
+ result++;
+ fprintf (logFile, "Error in >>\n");
+ }
+
+ return (result == 0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_barrier.c b/final/testsuite/c/omp_barrier.c
new file mode 100644
index 0000000..df669e2
--- /dev/null
+++ b/final/testsuite/c/omp_barrier.c
@@ -0,0 +1,41 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp barrier directive. The test creates several threads and sends one of them sleeping before setting a flag. After the barrier the other ones do some little work depending on the flag.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp barrier</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_barrier</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int result1;
+ int result2;
+ </ompts:orphan:vars>
+
+ result1 = 0;
+ result2 = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int rank;
+ rank = omp_get_thread_num ();
+ if (rank ==1) {
+ my_sleep(SLEEPTIME_LONG);
+ result2 = 3;
+ }
+<ompts:check>#pragma omp barrier</ompts:check>
+ if (rank == 2) {
+ result1 = result2;
+ }
+ </ompts:orphan>
+ }
+ printf("result1=%d\n",result1);
+ return (result1 == 3);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_critical.c b/final/testsuite/c/omp_critical.c
new file mode 100644
index 0000000..cb3f264
--- /dev/null
+++ b/final/testsuite/c/omp_critical.c
@@ -0,0 +1,42 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp critical directive by counting up a variable in a parallelized loop within a critical section.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp critical</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_critical</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum;
+ </ompts:orphan:vars>
+ sum=0;
+ int known_sum;
+
+ <ompts:orphan>
+ #pragma omp parallel
+ {
+ int mysum=0;
+ int i;
+
+ #pragma omp for
+ for (i = 0; i < 1000; i++)
+ mysum = mysum + i;
+
+ <ompts:check>#pragma omp critical</ompts:check>
+ sum = mysum +sum;
+
+ } /* end of parallel */
+ </ompts:orphan>
+
+ printf("sum=%d\n",sum);
+ known_sum = 999 * 1000 / 2;
+ return (known_sum == sum);
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_flush.c b/final/testsuite/c/omp_flush.c
new file mode 100644
index 0000000..3fabf8e
--- /dev/null
+++ b/final/testsuite/c/omp_flush.c
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp flush directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp flush</ompts:directive>
+<ompts:dependences>omp barrier</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_flush</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int result1;
+ int result2;
+ int dummy;
+ </ompts:orphan:vars>
+
+ result1 = 0;
+ result2 = 0;
+
+#pragma omp parallel
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+
+#pragma omp barrier
+ if (rank == 1) {
+ result2 = 3;
+ <ompts:orphan>
+ <ompts:check>#pragma omp flush (result2)</ompts:check>
+ dummy = result2;
+ </ompts:orphan>
+ }
+
+ if (rank == 0) {
+ <ompts:check>my_sleep(SLEEPTIME_LONG);</ompts:check>
+ <ompts:orphan>
+ <ompts:check>#pragma omp flush (result2)</ompts:check>
+ result1 = result2;
+ </ompts:orphan>
+ }
+ } /* end of parallel */
+
+ return ((result1 == result2) && (result2 == dummy) && (result2 == 3));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_collapse.c b/final/testsuite/c/omp_for_collapse.c
new file mode 100644
index 0000000..7216f40
--- /dev/null
+++ b/final/testsuite/c/omp_for_collapse.c
@@ -0,0 +1,56 @@
+<ompts:test>
+<ompts:testdescription>Test with omp for collapse clause. Bind with two loops. Without the collapse clause, the first loop will not be ordered</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp for collapse</ompts:directive>
+<ompts:dependences>omp critical,omp for schedule</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+
+/* Utility function to check that i is increasing monotonically
+ with each call */
+static int check_i_islarger (int i)
+{
+ static int last_i;
+ int islarger;
+ if (i==1)
+ last_i=0;
+ islarger = ((i >= last_i)&&(i - last_i<=1));
+ last_i = i;
+ return (islarger);
+}
+
+int <ompts:testcode:functionname>omp_for_collapse</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int is_larger = 1;
+ </ompts:orphan:vars>
+
+ #pragma omp parallel
+ {
+ <ompts:orphan>
+ int i,j;
+ int my_islarger = 1;
+ #pragma omp for private(i,j) schedule(static,1) <ompts:check>collapse(2)</ompts:check> ordered
+ for (i = 1; i < 100; i++){
+ <ompts:crosscheck>my_islarger = check_i_islarger(i)&& my_islarger;</ompts:crosscheck>
+ for (j =1; j <100; j++)
+ {
+ <ompts:check>
+ #pragma omp ordered
+ my_islarger = check_i_islarger(i)&&my_islarger;
+ </ompts:check>
+ } /* end of for */
+ }
+ #pragma omp critical
+ is_larger = is_larger && my_islarger;
+ </ompts:orphan>
+ }
+
+ return (is_larger);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_firstprivate.c b/final/testsuite/c/omp_for_firstprivate.c
new file mode 100644
index 0000000..2272014
--- /dev/null
+++ b/final/testsuite/c/omp_for_firstprivate.c
@@ -0,0 +1,55 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp for firstprivate clause by counting up a variable in a parallelized loop. Each thread has a firstprivate variable (1) and an variable (2) declared by for firstprivate. First it stores the result of its last iteration in variable (2). Then it stores the value of the variable (2) in its firstprivate variable (1). At the end all firstprivate variables (1) are added to a total sum in a critical section and compared with the correct result.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp for firstprivate</ompts:directive>
+<ompts:dependences>omp critical,omp parallel firstprivate</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int <ompts:testcode:functionname>omp_for_firstprivate</ompts:testcode:functionname> (FILE * logFile)
+{
+ int sum;
+ <ompts:orphan:vars>
+ int sum0;
+ </ompts:orphan:vars>
+
+ int known_sum;
+ int threadsnum;
+
+ sum = 0;
+ sum0 = 12345;
+ sum1 = 0;
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ threadsnum=omp_get_num_threads();
+ }
+ /* sum0 = 0; */
+ <ompts:orphan>
+ int i;
+#pragma omp for <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum0 + i;
+ sum1 = sum0;
+ } /* end of for */
+ </ompts:orphan>
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ } /* end of critical */
+ } /* end of parallel */
+
+ known_sum = 12345* threadsnum+ (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_lastprivate.c b/final/testsuite/c/omp_for_lastprivate.c
new file mode 100644
index 0000000..c2080a2
--- /dev/null
+++ b/final/testsuite/c/omp_for_lastprivate.c
@@ -0,0 +1,52 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp for lastprivate clause by counting up a variable in a parallelized loop. Each thread saves the next summand in a lastprivate variable i0. At the end i0 is compared to the value of the expected last summand.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for lastprivate</ompts:directive>
+<ompts:dependences>omp critical,omp parallel firstprivate,omp schedule</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+int sum0;
+#pragma omp threadprivate(sum0)
+
+int <ompts:testcode:functionname>omp_for_lastprivate</ompts:testcode:functionname> (FILE * logFile)
+{
+ int sum = 0;
+ int known_sum;
+ <ompts:orphan:vars>
+ int i0;
+ </ompts:orphan:vars>
+
+ i0 = -1;
+
+#pragma omp parallel
+ {
+ sum0 = 0;
+ { /* Begin of orphaned block */
+ <ompts:orphan>
+ int i;
+#pragma omp for schedule(static,7) <ompts:check>lastprivate(i0)</ompts:check>
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ } /* end of for */
+ </ompts:orphan>
+ } /* end of orphaned block */
+
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /* end of critical */
+ } /* end of parallel */
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ fprintf(logFile," known_sum = %d , sum = %d \n",known_sum,sum);
+ fprintf(logFile," LOOPCOUNT = %d , i0 = %d \n",LOOPCOUNT,i0);
+ return ((known_sum == sum) && (i0 == LOOPCOUNT) );
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_nowait.c b/final/testsuite/c/omp_for_nowait.c
new file mode 100644
index 0000000..a3ec40b
--- /dev/null
+++ b/final/testsuite/c/omp_for_nowait.c
@@ -0,0 +1,57 @@
+<ompts:test>
+<ompts:description>Test which checks the omp parallel for nowait directive. It fills an array with values and operates on these in the following.</ompts:description>
+<ompts:directive>omp parallel for nowait</ompts:directive>
+<ompts:version>1.0</ompts:version>
+<ompts:dependences>omp parallel for, omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_for_nowait</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int result;
+ int count;
+ </ompts:orphan:vars>
+ int j;
+ int myarray[LOOPCOUNT];
+
+ result = 0;
+ count = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int rank;
+ int i;
+
+ rank = omp_get_thread_num();
+
+#pragma omp for <ompts:check>nowait</ompts:check>
+ for (i = 0; i < LOOPCOUNT; i++) {
+ if (i == 0) {
+ fprintf (logFile, "Thread nr %d entering for loop and going to sleep.\n", rank);
+ my_sleep(SLEEPTIME);
+ count = 1;
+#pragma omp flush(count)
+ fprintf (logFile, "Thread nr %d woke up and set count = 1.\n", rank);
+ }
+ }
+
+ fprintf (logFile, "Thread nr %d exited first for loop and enters the second.\n", rank);
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+#pragma omp flush(count)
+ if (count == 0)
+ result = 1;
+ }
+ </ompts:orphan>
+ }
+
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_ordered.c b/final/testsuite/c/omp_for_ordered.c
new file mode 100644
index 0000000..6297d04
--- /dev/null
+++ b/final/testsuite/c/omp_for_ordered.c
@@ -0,0 +1,60 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp ordered directive by counting up an variable in an parallelized loop and watching each iteration if the sumand is larger as the last one.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for ordered</ompts:directive>
+<ompts:dependences>omp critical,omp for schedule</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+static int last_i = 0;
+
+/* Utility function to check that i is increasing monotonically
+ with each call */
+static int check_i_islarger (int i)
+{
+ int islarger;
+ islarger = (i > last_i);
+ last_i = i;
+ return (islarger);
+}
+
+int <ompts:testcode:functionname>omp_for_ordered</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum;
+ int is_larger = 1;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ last_i = 0;
+ sum = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+ int my_islarger = 1;
+#pragma omp for schedule(static,1) ordered
+ for (i = 1; i < 100; i++)
+ {
+ <ompts:check>#pragma omp ordered</ompts:check>
+ {
+ my_islarger = check_i_islarger(i) && my_islarger;
+ sum = sum + i;
+ } /* end of ordered */
+ } /* end of for */
+#pragma omp critical
+ {
+ is_larger = is_larger && my_islarger;
+ } /* end of critical */
+ </ompts:orphan>
+ }
+
+ known_sum=(99 * 100) / 2;
+ return ((known_sum == sum) && is_larger);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_private.c b/final/testsuite/c/omp_for_private.c
new file mode 100644
index 0000000..8a65110
--- /dev/null
+++ b/final/testsuite/c/omp_for_private.c
@@ -0,0 +1,64 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp for private clause by counting up a variable in a parallelized loop. Each thread has a private variable (1) and a variable (2) declared by for private. First it stores the result of its last iteration in variable (2). Then this thread waits some time before it stores the value of the variable (2) in its private variable (1). At the beginning of the next iteration the value of (1) is assigned to (2). At the end all private variables (1) are added to a total sum in a critical section and compared with the correct result.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for private</ompts:directive>
+<ompts:dependences>omp parallel,omp flush,omp critical,omp threadprivate</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+static void do_some_work (){
+ int i;
+ double sum = 0;
+ for(i = 0; i < 1000; i++){
+ sum += sqrt ((double) i);
+ }
+}
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int <ompts:testcode:functionname>omp_for_private</ompts:testcode:functionname> (FILE * logFile)
+{
+ int sum = 0;
+ <ompts:orphan:vars>
+ int sum0;
+ </ompts:orphan:vars>
+
+ int known_sum;
+
+ sum0 = 0; /* setting (global) sum0 = 0 */
+
+#pragma omp parallel
+ {
+ sum1 = 0; /* setting sum1 in each thread to 0 */
+
+ { /* begin of orphaned block */
+ <ompts:orphan>
+ int i;
+#pragma omp for <ompts:check>private(sum0)</ompts:check> schedule(static,1)
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum1;
+#pragma omp flush
+ sum0 = sum0 + i;
+ do_some_work ();
+#pragma omp flush
+ sum1 = sum0;
+ } /* end of for */
+ </ompts:orphan>
+ } /* end of orphaned block */
+
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ } /*end of critical*/
+ } /* end of parallel*/
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_reduction.c b/final/testsuite/c/omp_for_reduction.c
new file mode 100644
index 0000000..6dd1917
--- /dev/null
+++ b/final/testsuite/c/omp_for_reduction.c
@@ -0,0 +1,429 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp for reduction directive wich all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for reduction</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_for_reduction</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ double dt;
+ int sum;
+ int diff;
+ int product = 1;
+ double dsum;
+ double dknown_sum;
+ double ddiff;
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int *logics;
+ </ompts:orphan:vars>
+
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+
+ int i;
+ int known_sum;
+ int known_product;
+ double rounding_error = 1.E-9; /* over all rounding error to be ignored in the double tests */
+ double dpt;
+ int result = 0;
+ int logicsArray[LOOPCOUNT];
+
+ /* Variables for integer tests */
+ sum = 0;
+ product = 1;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ /* variabels for double tests */
+ dt = 1. / 3.; /* base of geometric row for + and - test*/
+ dsum = 0.;
+ /* Variabeles for logic tests */
+ logics = logicsArray;
+ logic_and = 1;
+ logic_or = 0;
+ /* Variabeles for bit operators tests */
+ bit_and = 1;
+ bit_or = 0;
+ /* Variables for exclusiv bit or */
+ exclusiv_bit_or = 0;
+
+
+/****************************************************************************/
+/** Tests for integers **/
+/****************************************************************************/
+
+
+/**** Testing integer addition ****/
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(+:sum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (j = 1; j <= LOOPCOUNT; j++)
+ {
+ sum = sum + j;
+ }
+ </ompts:orphan>
+ }
+
+ if (known_sum != sum) {
+ result++;
+ fprintf (logFile, "Error in sum with integers: Result was %d instead of %d.\n", sum, known_sum);
+ }
+
+
+/**** Testing integer subtracton ****/
+
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(-:diff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (j = 1; j <= LOOPCOUNT; j++)
+ {
+ diff = diff - j;
+ }
+ </ompts:orphan>
+ }
+
+ if (diff != 0) {
+ result++;
+ fprintf (logFile, "Error in difference with integers: Result was %d instead of 0.\n", diff);
+ }
+
+
+/**** Testing integer multiplication ****/
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(*:product)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (j = 1; j <= MAX_FACTOR; j++)
+ {
+ product *= j;
+ }
+ </ompts:orphan>
+ }
+
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product)
+ {
+ result++;
+ fprintf (logFile,"Error in Product with integers: Result was %d instead of %d\n",product,known_product);
+ }
+
+
+/****************************************************************************/
+/** Tests for doubles **/
+/****************************************************************************/
+
+
+/**** Testing double addition ****/
+
+ dsum = 0.;
+ dpt = 1.;
+
+ for (i = 0; i < DOUBLE_DIGITS; ++i)
+ {
+ dpt *= dt;
+ }
+ dknown_sum = (1 - dpt) / (1 - dt);
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(+:dsum)</ompts:check>
+ for (j = 0; j < DOUBLE_DIGITS; j++)
+ {
+ dsum += pow (dt, j);
+ }
+ </ompts:orphan>
+ }
+
+ if (fabs (dsum - dknown_sum) > rounding_error) {
+ result++;
+ fprintf (logFile, "\nError in sum with doubles: Result was %f instead of: %f (Difference: %E)\n", dsum, dknown_sum, dsum-dknown_sum);
+ }
+
+#if 0
+ dpt = 1.;
+ for (i = 0; i < DOUBLE_DIGITS; ++i)
+ {
+ dpt *= dt;
+ }
+#endif
+
+
+/**** Testing double subtraction ****/
+
+ ddiff = (1 - dpt) / (1 - dt);
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(-:ddiff)</ompts:check>
+ for (j = 0; j < DOUBLE_DIGITS; ++j)
+ {
+ ddiff -= pow (dt, j);
+ }
+ </ompts:orphan>
+ }
+
+ if (fabs (ddiff) > rounding_error) {
+ result++;
+ fprintf (logFile, "Error in Difference with doubles: Result was %E instead of 0.0\n", ddiff);
+ }
+
+
+/****************************************************************************/
+/** Tests for logical values **/
+/****************************************************************************/
+
+
+/**** Testing logic and ****/
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ logics[i] = 1;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(&&:logic_and)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ logic_and = (logic_and && logics[j]);
+ }
+ </ompts:orphan>
+ }
+
+ if(!logic_and) {
+ result++;
+ fprintf (logFile, "Error in logic AND part 1\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ logic_and = logic_and && logics[j];
+ }
+ </ompts:orphan>
+ }
+
+ if(logic_and) {
+ result++;
+ fprintf (logFile, "Error in logic AND part 2\n");
+ }
+
+
+/**** Testing logic or ****/
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ logics[i] = 0;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(||:logic_or) </ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ logic_or = logic_or || logics[j];
+ }
+ </ompts:orphan>
+ }
+
+ if (logic_or) {
+ result++;
+ fprintf (logFile, "Error in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(||:logic_or)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ logic_or = logic_or || logics[j];
+ }
+ </ompts:orphan>
+ }
+
+ if(!logic_or) {
+ result++;
+ fprintf (logFile, "Error in logic OR part 2\n");
+ }
+
+
+/****************************************************************************/
+/** Tests for bit values **/
+/****************************************************************************/
+
+
+/**** Testing bit and ****/
+
+ for (i = 0; i < LOOPCOUNT; ++i)
+ {
+ logics[i] = 1;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(&:bit_and) </ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ bit_and = (bit_and & logics[j]);
+ }
+ </ompts:orphan>
+ }
+
+ if (!bit_and) {
+ result++;
+ fprintf (logFile, "Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT / 2] = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(&:bit_and)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ bit_and = bit_and & logics[j];
+ }
+ </ompts:orphan>
+ }
+ if (bit_and) {
+ result++;
+ fprintf (logFile, "Error in BIT AND part 2\n");
+ }
+
+
+/**** Testing bit or ****/
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ logics[i] = 0;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(|:bit_or)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ bit_or = bit_or | logics[j];
+ }
+ </ompts:orphan>
+ }
+
+ if (bit_or) {
+ result++;
+ fprintf (logFile, "Error in BIT OR part 1\n");
+ }
+
+ bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(|:bit_or)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ bit_or = bit_or | logics[j];
+ }
+ </ompts:orphan>
+ }
+ if (!bit_or) {
+ result++;
+ fprintf (logFile, "Error in BIT OR part 2\n");
+ }
+
+
+/**** Testing exclusive bit or ****/
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ logics[i] = 0;
+ }
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[j];
+ }
+ </ompts:orphan>
+ }
+ if (exclusiv_bit_or) {
+ result++;
+ fprintf (logFile, "Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT / 2] = 1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int j;
+#pragma omp for schedule(dynamic,1) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check>
+ for (j = 0; j < LOOPCOUNT; ++j)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[j];
+ }
+ </ompts:orphan>
+ }
+ if (!exclusiv_bit_or) {
+ result++;
+ fprintf (logFile, "Error in EXCLUSIV BIT OR part 2\n");
+ }
+
+ /*fprintf ("\nResult:%d\n", result);*/
+ return (result == 0);
+
+ free (logics);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_schedule_auto.c b/final/testsuite/c/omp_for_schedule_auto.c
new file mode 100644
index 0000000..e61a1c4
--- /dev/null
+++ b/final/testsuite/c/omp_for_schedule_auto.c
@@ -0,0 +1,55 @@
+<ompts:test>
+<ompts:testdescription>Test with omp for schedule auto</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp for auto</ompts:directive>
+<ompts:dependences>omp critical,omp parallel firstprivate</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+
+#include "omp_testsuite.h"
+
+int sum1;
+#pragma omp threadprivate(sum1)
+
+int <ompts:testcode:functionname>omp_for_auto</ompts:testcode:functionname> (FILE * logFile)
+{
+ int sum;
+ <ompts:orphan:vars>
+ int sum0;
+ </ompts:orphan:vars>
+
+ int known_sum;
+ int threadsnum;
+
+ sum = 0;
+ sum0 = 12345;
+ sum1 = 0;
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ threadsnum=omp_get_num_threads();
+ }
+ /* sum0 = 0; */
+ <ompts:orphan>
+ int i;
+#pragma omp for <ompts:check>firstprivate(sum0) schedule(auto)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum0 + i;
+ sum1 = sum0;
+ } /* end of for */
+ </ompts:orphan>
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ } /* end of critical */
+ } /* end of parallel */
+
+ known_sum = 12345* threadsnum+ (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_schedule_dynamic.c b/final/testsuite/c/omp_for_schedule_dynamic.c
new file mode 100644
index 0000000..d2cda56
--- /dev/null
+++ b/final/testsuite/c/omp_for_schedule_dynamic.c
@@ -0,0 +1,111 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the dynamic option of the omp for schedule directive</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for schedule(dynamic)</ompts:directive>
+<ompts:dependences>omp flush,omp for nowait,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+
+/*
+* Test for dynamic scheduling with chunk size
+* Method: caculate how many times the iteration space is dispatched
+* and judge if each dispatch has the requested chunk size
+* unless it is the last one.
+* It is possible for two adjacent chunks are assigned to the same thread
+* Modifyied by Chunhua Liao
+*/
+#include <stdio.h>
+#include <omp.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define CFDMAX_SIZE 100
+const int chunk_size = 7;
+
+int <ompts:testcode:functionname>omp_for_schedule_dynamic</ompts:testcode:functionname> (FILE * logFile)
+{
+ int tid;
+<ompts:orphan:vars>
+ int *tids;
+ int i;
+</ompts:orphan:vars>
+
+ int tidsArray[CFDMAX_SIZE];
+ int count = 0;
+ int tmp_count = 0; /*dispatch times*/
+ int *tmp; /*store chunk size for each dispatch*/
+ int result = 0;
+
+ tids = tidsArray;
+
+#pragma omp parallel private(tid) shared(tids)
+ { /* begin of parallel */
+ <ompts:orphan>
+ int tid;
+
+ tid = omp_get_thread_num ();
+#pragma omp for <ompts:check>schedule(dynamic,chunk_size)</ompts:check>
+ for (i = 0; i < CFDMAX_SIZE; i++)
+ {
+ tids[i] = tid;
+ }
+ </ompts:orphan>
+ } /* end of parallel */
+
+ for (i = 0; i < CFDMAX_SIZE - 1; ++i)
+ {
+ if (tids[i] != tids[i + 1])
+ {
+ count++;
+ }
+ }
+
+ tmp = (int *) malloc (sizeof (int) * (count + 1));
+ tmp[0] = 1;
+
+ for (i = 0; i < CFDMAX_SIZE - 1; ++i)
+ {
+ if (tmp_count > count)
+ {
+ printf ("--------------------\nTestinternal Error: List too small!!!\n--------------------\n"); /* Error handling */
+ break;
+ }
+ if (tids[i] != tids[i + 1])
+ {
+ tmp_count++;
+ tmp[tmp_count] = 1;
+ }
+ else
+ {
+ tmp[tmp_count]++;
+ }
+ }
+/*
+printf("debug----\n");
+ for (i = 0; i < CFDMAX_SIZE; ++i)
+ printf("%d ",tids[i]);
+printf("debug----\n");
+*/
+/* is dynamic statement working? */
+ for (i = 0; i < count; i++)
+ {
+ if ((tmp[i]%chunk_size)!=0)
+/*it is possible for 2 adjacent chunks assigned to a same thread*/
+ {
+ result++;
+ fprintf(logFile,"The intermediate dispatch has wrong chunksize.\n");
+ /*result += ((tmp[i] / chunk_size) - 1);*/
+ }
+ }
+ if ((tmp[count]%chunk_size)!=(CFDMAX_SIZE%chunk_size))
+ {
+ result++;
+ fprintf(logFile,"the last dispatch has wrong chunksize.\n");
+ }
+ /* for (int i=0;i<count+1;++i) printf("%d\t:=\t%d\n",i+1,tmp[i]); */
+ return (result==0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_schedule_guided.c b/final/testsuite/c/omp_for_schedule_guided.c
new file mode 100644
index 0000000..83564a5
--- /dev/null
+++ b/final/testsuite/c/omp_for_schedule_guided.c
@@ -0,0 +1,225 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the guided option of the omp for schedule directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for schedule(guided)</ompts:directive>
+<ompts:dependences>omp flush,omp for nowait,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+/* Test for guided scheduling
+ * Ensure threads get chunks interleavely first
+ * Then judge the chunk sizes are decreasing to a stable value
+ * Modified by Chunhua Liao
+ * For example, 100 iteration on 2 threads, chunksize 7
+ * one line for each dispatch, 0/1 means thread id
+ * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24
+ * 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18
+ * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14
+ * 1 1 1 1 1 1 1 1 1 1 10
+ * 0 0 0 0 0 0 0 0 8
+ * 1 1 1 1 1 1 1 7
+ * 0 0 0 0 0 0 0 7
+ * 1 1 1 1 1 1 1 7
+ * 0 0 0 0 0 5
+*/
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define NUMBER_OF_THREADS 10
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.005
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0001
+#endif
+
+int <ompts:testcode:functionname>omp_for_schedule_guided</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int * tids;
+ int * chunksizes;
+ int notout;
+ int maxiter;
+ </ompts:orphan:vars>
+
+ int threads;
+ int i;
+ int result;
+
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ maxiter = 0;
+ result = 1;
+ notout = 1;
+
+/* Testing if enought threads are available for this check. */
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ threads = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+
+ if (threads < 2) {
+ printf ("This test only works with at least two threads .\n");
+ fprintf (logFile, "This test only works with at least two threads. Available were only %d thread(s).\n", threads);
+ return (0);
+ } /* end if */
+
+
+ /* Now the real parallel work:
+ *
+ * Each thread will start immediately with the first chunk.
+ */
+#pragma omp parallel shared(tids,maxiter)
+ { /* begin of parallel */
+ <ompts:orphan>
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+#pragma omp for nowait <ompts:check>schedule(guided)</ompts:check>
+ for(j = 0; j < CFSMAX_SIZE; ++j)
+ {
+ count = 0.;
+#pragma omp flush(maxiter)
+ if (j > maxiter)
+ {
+#pragma omp critical
+ {
+ maxiter = j;
+ } /* end of critical */
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+#pragma omp flush(maxiter,notout)
+ while (notout && (count < MAX_TIME) && (maxiter == j))
+ {
+#pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+#ifdef VERBOSE
+ printf(".");
+#endif
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of for */
+
+ notout = 0;
+#pragma omp flush(maxiter,notout)
+ </ompts:orphan>
+ } /* end of parallel */
+
+/*******************************************************
+ * evaluation of the values *
+ *******************************************************/
+ {
+ int determined_chunksize = 1;
+ int last_threadnr = tids[0];
+ int global_chunknr = 0;
+ int local_chunknr[NUMBER_OF_THREADS];
+ int openwork = CFSMAX_SIZE;
+ int expected_chunk_size;
+ double c = 1;
+
+ for (i = 0; i < NUMBER_OF_THREADS; i++)
+ local_chunknr[i] = 0;
+
+ tids[CFSMAX_SIZE] = -1;
+
+ /*
+ * determine the number of global chunks
+ */
+ /*fprintf(logFile,"# global_chunknr thread local_chunknr chunksize\n"); */
+ for(i = 1; i <= CFSMAX_SIZE; ++i)
+ {
+ if (last_threadnr==tids[i]) {
+ determined_chunksize++;
+ }
+ else
+ {
+ /* fprintf (logFile, "%d\t%d\t%d\t%d\n", global_chunknr,last_threadnr, local_chunknr[last_threadnr], m); */
+ global_chunknr++;
+ local_chunknr[last_threadnr]++;
+ last_threadnr = tids[i];
+ determined_chunksize = 1;
+ }
+ }
+ /* now allocate the memory for saving the sizes of the global chunks */
+ chunksizes = (int*)malloc(global_chunknr * sizeof(int));
+
+ /*
+ * Evaluate the sizes of the global chunks
+ */
+ global_chunknr = 0;
+ determined_chunksize = 1;
+ last_threadnr = tids[0];
+ for (i = 1; i <= CFSMAX_SIZE; ++i)
+ {
+ /* If the threadnumber was the same as before increase the detected chunksize for this chunk
+ * otherwise set the detected chunksize again to one and save the number of the next thread in last_threadnr.
+ */
+ if (last_threadnr == tids[i]) {
+ determined_chunksize++;
+ }
+ else {
+ chunksizes[global_chunknr] = determined_chunksize;
+ global_chunknr++;
+ local_chunknr[last_threadnr]++;
+ last_threadnr = tids[i];
+ determined_chunksize = 1;
+ }
+ }
+
+#ifdef VERBOSE
+ fprintf (logFile, "found\texpected\tconstant\n");
+#endif
+
+ /* identify the constant c for the exponential decrease of the chunksize */
+ expected_chunk_size = openwork / threads;
+ c = (double) chunksizes[0] / expected_chunk_size;
+
+ for (i = 0; i < global_chunknr; i++)
+ {
+ /* calculate the new expected chunksize */
+ if (expected_chunk_size > 1)
+ expected_chunk_size = c * openwork / threads;
+
+#ifdef VERBOSE
+ fprintf (logFile, "%8d\t%8d\t%lf\n", chunksizes[i], expected_chunk_size, c * chunksizes[i]/expected_chunk_size);
+#endif
+
+ /* check if chunksize is inside the rounding errors */
+ if (abs (chunksizes[i] - expected_chunk_size) >= 2) {
+ result = 0;
+#ifndef VERBOSE
+ fprintf (logFile, "Chunksize differed from expected value: %d instead of %d\n", chunksizes[i], expected_chunk_size);
+ return 0;
+#endif
+ } /* end if */
+
+#ifndef VERBOSE
+ if (expected_chunk_size - chunksizes[i] < 0 )
+ fprintf (logFile, "Chunksize did not decrease: %d instead of %d\n", chunksizes[i],expected_chunk_size);
+#endif
+
+ /* calculating the remaining amount of work */
+ openwork -= chunksizes[i];
+ }
+ }
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
+
diff --git a/final/testsuite/c/omp_for_schedule_static.c b/final/testsuite/c/omp_for_schedule_static.c
new file mode 100644
index 0000000..d71d7d4
--- /dev/null
+++ b/final/testsuite/c/omp_for_schedule_static.c
@@ -0,0 +1,165 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the static option of the omp for schedule directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp for schedule(static)</ompts:directive>
+<ompts:dependences>omp for nowait,omp flush,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define NUMBER_OF_THREADS 10
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.01
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0005
+#endif
+
+
+int <ompts:testcode:functionname>omp_for_schedule_static</ompts:testcode:functionname> (FILE * logFile)
+{
+ int threads;
+ int i,lasttid;
+ <ompts:orphan:vars>
+ int * tids;
+ int notout;
+ int maxiter;
+ int chunk_size;
+ </ompts:orphan:vars>
+ int counter = 0;
+ int tmp_count=1;
+ int lastthreadsstarttid = -1;
+ int result = 1;
+ chunk_size = 7;
+
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ notout = 1;
+ maxiter = 0;
+
+#pragma omp parallel shared(tids,counter)
+ { /* begin of parallel*/
+#pragma omp single
+ {
+ threads = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+
+ if (threads < 2)
+ {
+ printf ("This test only works with at least two threads");
+ fprintf (logFile,"This test only works with at least two threads");
+ return 0;
+ }
+ else
+ {
+ fprintf (logFile,"Using an internal count of %d\nUsing a specified chunksize of %d\n", CFSMAX_SIZE, chunk_size);
+ tids[CFSMAX_SIZE] = -1; /* setting endflag */
+#pragma omp parallel shared(tids)
+ { /* begin of parallel */
+ <ompts:orphan>
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+#pragma omp for nowait <ompts:check>schedule(static,chunk_size)</ompts:check>
+ for(j = 0; j < CFSMAX_SIZE; ++j)
+ {
+ count = 0.;
+#pragma omp flush(maxiter)
+ if (j > maxiter)
+ {
+#pragma omp critical
+ {
+ maxiter = j;
+ } /* end of critical */
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+ while (notout && (count < MAX_TIME) && (maxiter == j))
+ {
+#pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+ printf(".");
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of for */
+
+ notout = 0;
+#pragma omp flush(maxiter,notout)
+ </ompts:orphan>
+ } /* end of parallel */
+
+ /**** analysing the data in array tids ****/
+
+ lasttid = tids[0];
+ tmp_count = 0;
+
+ for (i = 0; i < CFSMAX_SIZE + 1; ++i)
+ {
+ /* If the work was done by the same thread increase tmp_count by one. */
+ if (tids[i] == lasttid) {
+ tmp_count++;
+#ifdef VERBOSE
+ fprintf (logFile, "%d: %d \n", i, tids[i]);
+#endif
+ continue;
+ }
+
+ /* Check if the next thread had has the right thread number. When finding
+ * threadnumber -1 the end should be reached.
+ */
+ if (tids[i] == (lasttid + 1) % threads || tids[i] == -1) {
+ /* checking for the right chunk size */
+ if (tmp_count == chunk_size) {
+ tmp_count = 1;
+ lasttid = tids[i];
+#ifdef VERBOSE
+ fprintf (logFile, "OK\n");
+#endif
+ }
+ /* If the chunk size was wrong, check if the end was reached */
+ else {
+ if (tids[i] == -1) {
+ if (i == CFSMAX_SIZE) {
+ fprintf (logFile, "Last thread had chunk size %d\n", tmp_count);
+ break;
+ }
+ else {
+ fprintf (logFile, "ERROR: Last thread (thread with number -1) was found before the end.\n");
+ result = 0;
+ }
+ }
+ else {
+ fprintf (logFile, "ERROR: chunk size was %d. (assigned was %d)\n", tmp_count, chunk_size);
+ result = 0;
+ }
+ }
+ }
+ else {
+ fprintf(logFile, "ERROR: Found thread with number %d (should be inbetween 0 and %d).", tids[i], threads - 1);
+ result = 0;
+ }
+#ifdef VERBOSE
+ fprintf (logFile, "%d: %d \n", i, tids[i]);
+#endif
+ }
+ }
+
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_for_schedule_static_3.c b/final/testsuite/c/omp_for_schedule_static_3.c
new file mode 100644
index 0000000..928667f
--- /dev/null
+++ b/final/testsuite/c/omp_for_schedule_static_3.c
@@ -0,0 +1,212 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the static option of the omp for schedule directive considering the specifications for the chunk distribution of several loop regions is the same as specified in the Open MP standard version 3.0.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp for schedule(static)</ompts:directive>
+<ompts:dependences>omp for nowait,omp flush,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+#define NUMBER_OF_THREADS 10
+#define CFSMAX_SIZE 1000
+#define MAX_TIME 0.01
+
+#ifdef SLEEPTIME
+#undef SLEEPTIME
+#define SLEEPTIME 0.0005
+#endif
+
+#define VERBOSE 0
+
+
+int <ompts:testcode:functionname>omp_for_schedule_static_3</ompts:testcode:functionname> (FILE * logFile)
+{
+ int threads;
+ int i,lasttid;
+ <ompts:orphan:vars>
+ int * tids;
+ int * tids2;
+ int notout;
+ int maxiter;
+ int chunk_size;
+ </ompts:orphan:vars>
+ int counter = 0;
+ int tmp_count=1;
+ int lastthreadsstarttid = -1;
+ int result = 1;
+ chunk_size = 7;
+
+ tids = (int *) malloc (sizeof (int) * (CFSMAX_SIZE + 1));
+ notout = 1;
+ maxiter = 0;
+
+#pragma omp parallel shared(tids,counter)
+ { /* begin of parallel*/
+#pragma omp single
+ {
+ threads = omp_get_num_threads ();
+ } /* end of single */
+ } /* end of parallel */
+
+ if (threads < 2)
+ {
+ printf ("This test only works with at least two threads");
+ fprintf (logFile,"This test only works with at least two threads");
+ return 0;
+ }
+ else
+ {
+ fprintf (logFile,"Using an internal count of %d\nUsing a specified chunksize of %d\n", CFSMAX_SIZE, chunk_size);
+ tids[CFSMAX_SIZE] = -1; /* setting endflag */
+#pragma omp parallel shared(tids)
+ { /* begin of parallel */
+ <ompts:orphan>
+ double count;
+ int tid;
+ int j;
+
+ tid = omp_get_thread_num ();
+
+#pragma omp for nowait <ompts:check>schedule(static,chunk_size)</ompts:check>
+ for(j = 0; j < CFSMAX_SIZE; ++j)
+ {
+ count = 0.;
+#pragma omp flush(maxiter)
+ if (j > maxiter)
+ {
+#pragma omp critical
+ {
+ maxiter = j;
+ } /* end of critical */
+ }
+ /*printf ("thread %d sleeping\n", tid);*/
+ while (notout && (count < MAX_TIME) && (maxiter == j))
+ {
+#pragma omp flush(maxiter,notout)
+ my_sleep (SLEEPTIME);
+ count += SLEEPTIME;
+ printf(".");
+ }
+#ifdef VERBOSE
+ if (count > 0.) printf(" waited %lf s\n", count);
+#endif
+ /*printf ("thread %d awake\n", tid);*/
+ tids[j] = tid;
+#ifdef VERBOSE
+ printf("%d finished by %d\n",j,tid);
+#endif
+ } /* end of for */
+
+ notout = 0;
+#pragma omp flush(maxiter,notout)
+ </ompts:orphan>
+ } /* end of parallel */
+
+ /**** analysing the data in array tids ****/
+
+ lasttid = tids[0];
+ tmp_count = 0;
+
+ for (i = 0; i < CFSMAX_SIZE + 1; ++i)
+ {
+ /* If the work was done by the same thread increase tmp_count by one. */
+ if (tids[i] == lasttid) {
+ tmp_count++;
+#ifdef VERBOSE
+ fprintf (logFile, "%d: %d \n", i, tids[i]);
+#endif
+ continue;
+ }
+
+ /* Check if the next thread had has the right thread number. When finding
+ * threadnumber -1 the end should be reached.
+ */
+ if (tids[i] == (lasttid + 1) % threads || tids[i] == -1) {
+ /* checking for the right chunk size */
+ if (tmp_count == chunk_size) {
+ tmp_count = 1;
+ lasttid = tids[i];
+#ifdef VERBOSE
+ fprintf (logFile, "OK\n");
+#endif
+ }
+ /* If the chunk size was wrong, check if the end was reached */
+ else {
+ if (tids[i] == -1) {
+ if (i == CFSMAX_SIZE) {
+ fprintf (logFile, "Last thread had chunk size %d\n", tmp_count);
+ break;
+ }
+ else {
+ fprintf (logFile, "ERROR: Last thread (thread with number -1) was found before the end.\n");
+ result = 0;
+ }
+ }
+ else {
+ fprintf (logFile, "ERROR: chunk size was %d. (assigned was %d)\n", tmp_count, chunk_size);
+ result = 0;
+ }
+ }
+ }
+ else {
+ fprintf(logFile, "ERROR: Found thread with number %d (should be inbetween 0 and %d).", tids[i], threads - 1);
+ result = 0;
+ }
+#ifdef VERBOSE
+ fprintf (logFile, "%d: %d \n", i, tids[i]);
+#endif
+ }
+ }
+
+ /* Now we check if several loop regions in one parallel region have the same
+ * logical assignement of chunks to threads.
+ * We use the nowait clause to increase the probability to get an error. */
+
+ /* First we allocate some more memmory */
+ free (tids);
+ tids = (int *) malloc (sizeof (int) * LOOPCOUNT);
+ tids2 = (int *) malloc (sizeof (int) * LOOPCOUNT);
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ {
+ int n;
+#pragma omp for <ompts:check>schedule(static)</ompts:check> nowait
+ for (n = 0; n < LOOPCOUNT; n++)
+ {
+ if (LOOPCOUNT == n + 1 )
+ my_sleep(SLEEPTIME);
+
+ tids[n] = omp_get_thread_num();
+ }
+ }
+ </ompts:orphan>
+ <ompts:orphan>
+ {
+ int m;
+#pragma omp for <ompts:check>schedule(static)</ompts:check> nowait
+ for (m = 1; m <= LOOPCOUNT; m++)
+ {
+ tids2[m-1] = omp_get_thread_num();
+ }
+ }
+ </ompts:orphan>
+ }
+
+ for (i = 0; i < LOOPCOUNT; i++)
+ if (tids[i] != tids2[i]) {
+ fprintf (logFile, "Chunk no. %d was assigned once to thread %d and later to thread %d.\n", i, tids[i],tids2[i]);
+ result = 0;
+ }
+
+ free (tids);
+ free (tids2);
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_get_num_threads.c b/final/testsuite/c/omp_get_num_threads.c
new file mode 100644
index 0000000..4b092ba
--- /dev/null
+++ b/final/testsuite/c/omp_get_num_threads.c
@@ -0,0 +1,39 @@
+<ompts:test>
+<ompts:testdescription>Test which checks that the omp_get_num_threads returns the correct number of threads. Therefor it counts up a variable in a parallelized section and compars this value with the result of the omp_get_num_threads function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_num_threads</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_get_num_threads</ompts:testcode:functionname> (FILE * logFile)
+{
+ /* checks that omp_get_num_threads is equal to the number of
+ threads */
+ <ompts:orphan:vars>
+ int nthreads_lib;
+ </ompts:orphan:vars>
+ int nthreads = 0;
+
+ nthreads_lib = -1;
+
+#pragma omp parallel
+ {
+#pragma omp critical
+ {
+ nthreads++;
+ } /* end of critical */
+#pragma omp single
+ {
+<ompts:orphan>
+ <ompts:check>nthreads_lib = omp_get_num_threads ();</ompts:check>
+</ompts:orphan>
+ } /* end of single */
+ } /* end of parallel */
+
+ fprintf (logFile, "Counted %d threads. get_num_threads returned %d.\n", nthreads, nthreads_lib);
+ return (nthreads == nthreads_lib);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_get_wtick.c b/final/testsuite/c/omp_get_wtick.c
new file mode 100644
index 0000000..e82b57f
--- /dev/null
+++ b/final/testsuite/c/omp_get_wtick.c
@@ -0,0 +1,24 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_get_wtick function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_wtick</ompts:directive>
+<ompts:testcode>
+#include<stdio.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_get_wtick</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ double tick;
+ </ompts:orphan:vars>
+ tick = -1.;
+
+ <ompts:orphan>
+ <ompts:check>tick = omp_get_wtick ();</ompts:check>
+ </ompts:orphan>
+ fprintf (logFile, "Work took %lf sec. time.\n", tick);
+ return ((tick > 0.0) && (tick < 0.01));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_get_wtime.c b/final/testsuite/c/omp_get_wtime.c
new file mode 100644
index 0000000..9f0226d
--- /dev/null
+++ b/final/testsuite/c/omp_get_wtime.c
@@ -0,0 +1,38 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_get_wtime function. It compares the time with which is called a sleep function with the time it took by messuring the difference between the call of the sleep function and its end.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_wtime</ompts:directive>
+<ompts:testcode>
+#include<stdio.h>
+#include<stdlib.h>
+#include<unistd.h>
+
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_get_wtime</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ double start;
+ double end;
+ </ompts:orphan:vars>
+ double measured_time;
+ int wait_time = 1;
+
+ start = 0;
+ end = 0;
+
+ <ompts:orphan>
+ <ompts:check>start = omp_get_wtime ();</ompts:check>
+ </ompts:orphan>
+ my_sleep (wait_time);
+ <ompts:orphan>
+ <ompts:check>end = omp_get_wtime ();</ompts:check>
+ </ompts:orphan>
+ measured_time = end-start;
+ fprintf(logFile, "Work took %lf sec. time.\n", measured_time);
+ return ((measured_time > 0.99 * wait_time) && (measured_time < 1.01 * wait_time)) ;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_in_parallel.c b/final/testsuite/c/omp_in_parallel.c
new file mode 100644
index 0000000..09b6111
--- /dev/null
+++ b/final/testsuite/c/omp_in_parallel.c
@@ -0,0 +1,51 @@
+<ompts:test>
+<ompts:testdescription>Test which checks that omp_in_parallel returns false when called from a serial region and true when called within a parallel region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_in_parallel</ompts:directive>
+<ompts:testcode>
+/*
+ * Checks that false is returned when called from serial region
+ * and true is returned when called within parallel region.
+ */
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_in_parallel</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int serial;
+ int isparallel;
+ </ompts:orphan:vars>
+
+ serial = 1;
+ isparallel = 0;
+
+ <ompts:check>
+ <ompts:orphan>
+ serial = omp_in_parallel ();
+ </ompts:orphan>
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ <ompts:orphan>
+ isparallel = omp_in_parallel ();
+ </ompts:orphan>
+ }
+ }
+ </ompts:check>
+
+ <ompts:crosscheck>
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+
+ }
+ }
+ </ompts:crosscheck>
+
+ return (!(serial) && isparallel);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_lock.c b/final/testsuite/c/omp_lock.c
new file mode 100644
index 0000000..a529c07
--- /dev/null
+++ b/final/testsuite/c/omp_lock.c
@@ -0,0 +1,45 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_set_lock and the omp_unset_lock function by counting the threads entering and exiting a single region with locks.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_lock_t lck;
+
+int <ompts:testcode:functionname>omp_lock</ompts:testcode:functionname>(FILE * logFile)
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+ omp_init_lock (&lck);
+
+#pragma omp parallel shared(lck)
+ {
+ #pragma omp for
+ for(i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+ <ompts:check>omp_set_lock (&lck);</ompts:check>
+ </ompts:orphan>
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ <ompts:orphan>
+ <ompts:check>omp_unset_lock(&lck);</ompts:check>
+ </ompts:orphan>
+ }
+ }
+ omp_destroy_lock (&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_master.c b/final/testsuite/c/omp_master.c
new file mode 100644
index 0000000..cdb2f1e
--- /dev/null
+++ b/final/testsuite/c/omp_master.c
@@ -0,0 +1,37 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp master directive by counting up a variable in a omp master section.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp master</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_master</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int nthreads;
+ int executing_thread;
+ </ompts:orphan:vars>
+
+ nthreads = 0;
+ executing_thread = -1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ <ompts:check>#pragma omp master </ompts:check>
+ {
+#pragma omp critical
+ {
+ nthreads++;
+ }
+ executing_thread = omp_get_thread_num ();
+
+ } /* end of master*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ return ((nthreads == 1) && (executing_thread == 0));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_master_3.c b/final/testsuite/c/omp_master_3.c
new file mode 100644
index 0000000..8e98129
--- /dev/null
+++ b/final/testsuite/c/omp_master_3.c
@@ -0,0 +1,44 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp master directive by counting up a variable in a omp master section. It also checks that the master thread has the thread number 0 as specified in the Open MP standard version 3.0.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp master</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_master_3</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int nthreads;
+ int executing_thread;
+ int tid_result = 0; /* counts up the number of wrong thread no. for
+ the master thread. (Must be 0) */
+ </ompts:orphan:vars>
+
+ nthreads = 0;
+ executing_thread = -1;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ <ompts:check>#pragma omp master </ompts:check>
+ {
+ int tid = omp_get_thread_num();
+ if (tid != 0) {
+#pragma omp critical
+ { tid_result++; }
+ }
+#pragma omp critical
+ {
+ nthreads++;
+ }
+ executing_thread = omp_get_thread_num ();
+
+ } /* end of master*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_nest_lock.c b/final/testsuite/c/omp_nest_lock.c
new file mode 100644
index 0000000..3ade389
--- /dev/null
+++ b/final/testsuite/c/omp_nest_lock.c
@@ -0,0 +1,45 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_set_nest_lock and the omp_unset_nest_lock function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_nest_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_nest_lock_t lck;
+
+int <ompts:testcode:functionname>omp_nest_lock</ompts:testcode:functionname>(FILE * logFile)
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_nest_lock (&lck);
+
+#pragma omp parallel shared(lck)
+ {
+#pragma omp for
+ for(i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+ <ompts:check>omp_set_nest_lock (&lck);</ompts:check>
+ </ompts:orphan>
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ <ompts:orphan>
+ <ompts:check>omp_unset_nest_lock (&lck);</ompts:check>
+ </ompts:orphan>
+ }
+ }
+ omp_destroy_nest_lock (&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_nested.c b/final/testsuite/c/omp_nested.c
new file mode 100644
index 0000000..9657bc8
--- /dev/null
+++ b/final/testsuite/c/omp_nested.c
@@ -0,0 +1,42 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_nested function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_nested</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+/*
+ * Test if the compiler supports nested parallelism
+ * By Chunhua Liao, University of Houston
+ * Oct. 2005
+ */
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_nested</ompts:testcode:functionname>(FILE * logFile)
+{
+
+ <ompts:orphan:vars>
+ int counter = 0;
+ </ompts:orphan:vars>
+
+#ifdef _OPENMP
+ <ompts:check>omp_set_nested(1);</ompts:check>
+ <ompts:crosscheck>omp_set_nested(0);</ompts:crosscheck>
+#endif
+
+#pragma omp parallel shared(counter)
+{
+<ompts:orphan>
+#pragma omp critical
+ counter ++;
+#pragma omp parallel
+ {
+#pragma omp critical
+ counter --;
+ }
+</ompts:orphan>
+}
+ return (counter != 0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_copyin.c b/final/testsuite/c/omp_parallel_copyin.c
new file mode 100644
index 0000000..382bfa2
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_copyin.c
@@ -0,0 +1,47 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel copyin directive.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel copyin</ompts:directive>
+<ompts:dependences>omp critical,omp threadprivate</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+static int sum1 = 789;
+#pragma omp threadprivate(sum1)
+
+int <ompts:testcode:functionname>omp_parallel_copyin</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum, num_threads;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ sum = 0;
+ sum1 = 7;
+ num_threads = 0;
+
+#pragma omp parallel <ompts:check>copyin(sum1)</ompts:check>
+ {
+ /*printf("sum1=%d\n",sum1);*/
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i < 1000; i++)
+ {
+ sum1 = sum1 + i;
+ } /*end of for*/
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ } /*end of critical*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_default.c b/final/testsuite/c/omp_parallel_default.c
new file mode 100644
index 0000000..6c87371
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_default.c
@@ -0,0 +1,44 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the default option of the parallel construct.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel default</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_default</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int i;
+ int sum;
+ int mysum;
+ </ompts:orphan:vars>
+
+ int known_sum;
+ sum =0;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+
+ <ompts:orphan>
+ #pragma omp parallel <ompts:check>default(shared)</ompts:check> private(i) private(mysum<ompts:crosscheck>,sum</ompts:crosscheck>)
+ {
+ mysum = 0;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ mysum = mysum + i;
+ }
+#pragma omp critical
+ {
+ sum = sum + mysum;
+ } /* end of critical */
+ } /* end of parallel */
+ </ompts:orphan>
+ if (known_sum != sum) {
+ fprintf(logFile, "KNOWN_SUM = %d; SUM = %d\n", known_sum, sum);
+ }
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_firstprivate.c b/final/testsuite/c/omp_parallel_firstprivate.c
new file mode 100644
index 0000000..2415b4c
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_firstprivate.c
@@ -0,0 +1,48 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel firstprivate directive.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel firstprivate</ompts:directive>
+<ompts:dependences>omp for omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+//static int sum1 = 789;
+
+int <ompts:testcode:functionname>omp_parallel_firstprivate</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum, num_threads,sum1;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ sum = 0;
+ sum1=7;
+ num_threads = 0;
+
+
+#pragma omp parallel <ompts:check>firstprivate(sum1)</ompts:check><ompts:crosscheck>private(sum1)</ompts:crosscheck>
+ {
+
+ /*printf("sum1=%d\n",sum1);*/
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i < 1000; i++)
+ {
+ sum1 = sum1 + i;
+ } /*end of for*/
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ } /*end of critical*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_firstprivate.c b/final/testsuite/c/omp_parallel_for_firstprivate.c
new file mode 100644
index 0000000..5cb4926
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_firstprivate.c
@@ -0,0 +1,36 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for firstprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for firstprivate</ompts:directive>
+<ompts:dependences>omp parallel for reduction,omp parallel for private</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_for_firstprivate</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum ;
+ int i2;
+ int i;
+ </ompts:orphan:vars>
+
+ sum=0;
+ i2=3;
+ int known_sum;
+
+ #pragma omp parallel for reduction(+:sum) private(i) <ompts:check>firstprivate(i2)</ompts:check><ompts:crosscheck>private(i2)</ompts:crosscheck>
+ <ompts:orphan>
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum = sum + (i + i2);
+ } /*end of for*/
+ </ompts:orphan>
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 + i2 * LOOPCOUNT;
+
+ return (known_sum == sum);
+
+} /* end of check_parallel_for_fistprivate */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_if.c b/final/testsuite/c/omp_parallel_for_if.c
new file mode 100644
index 0000000..52886ba
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_if.c
@@ -0,0 +1,38 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for if directive. Needs at least two threads.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for if</ompts:directive>
+<ompts:dependences></ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_for_if</ompts:testcode:functionname>(FILE * logFile){
+ int known_sum;
+ <ompts:orphan:vars>
+ int num_threads;
+ int sum, sum2;
+ int i;
+ int control;
+ </ompts:orphan:vars>
+ control = 0;
+ num_threads=0;
+ sum = 0;
+ sum2 = 0;
+
+#pragma omp parallel for private(i) <ompts:check>if (control==1)</ompts:check>
+ <ompts:orphan>
+ for (i=0; i <= LOOPCOUNT; i++)
+ {
+ num_threads = omp_get_num_threads();
+ sum = sum + i;
+ } /*end of for*/
+
+ </ompts:orphan>
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ fprintf (logFile, "Number of threads determined by omp_get_num_threads: %d\n", num_threads);
+ return (known_sum == sum && num_threads == 1);
+} /* end of check_parallel_for_private */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_lastprivate.c b/final/testsuite/c/omp_parallel_for_lastprivate.c
new file mode 100644
index 0000000..909deba
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_lastprivate.c
@@ -0,0 +1,34 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for lastprivate</ompts:directive>
+<ompts:dependences>omp parallel for reduction,omp parallel for private</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_for_lastprivate</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int i;
+ int i0;
+ </ompts:orphan:vars>
+
+ sum =0;
+ i0 = -1;
+ int known_sum;
+
+#pragma omp parallel for reduction(+:sum) schedule(static,7) private(i) <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck>
+ <ompts:orphan>
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum = sum + i;
+ i0 = i;
+ } /*end of for*/
+ /* end of parallel*/
+ </ompts:orphan>
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return ((known_sum == sum) && (i0 == LOOPCOUNT));
+} /* end of check_parallel_for_lastprivate */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_ordered.c b/final/testsuite/c/omp_parallel_for_ordered.c
new file mode 100644
index 0000000..b1a4bc9
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_ordered.c
@@ -0,0 +1,62 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for ordered directive</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for ordered</ompts:directive>
+<ompts:dependences>omp parallel schedule(static)</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+static int last_i = 0;
+int i;
+
+#pragma omp threadprivate(i)
+
+/* Variable ii is used to avoid problems with a threadprivate variable used as a loop
+ * index. See test omp_threadprivate_for.
+ */
+static int ii;
+#pragma omp threadprivate(ii)
+
+/*!
+ Utility function: returns true if the passed argument is larger than
+ the argument of the last call of this function.
+ */
+static int check_i_islarger2 (int i){
+ int islarger;
+ islarger = (i > last_i);
+ last_i = i;
+ return (islarger);
+}
+
+int <ompts:testcode:functionname>omp_parallel_for_ordered</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int is_larger;
+ </ompts:orphan:vars>
+
+ int known_sum;
+ int i;
+
+ sum = 0;
+ is_larger = 1;
+ last_i = 0;
+#pragma omp parallel for schedule(static,1) private(i) <ompts:check>ordered</ompts:check>
+ for (i = 1; i < 100; i++)
+ {
+ ii = i;
+ <ompts:orphan>
+<ompts:check>#pragma omp ordered</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+ is_larger = check_i_islarger2 (ii) && is_larger;
+ sum = sum + ii;
+ }
+ </ompts:orphan>
+ }
+ known_sum = (99 * 100) / 2;
+ fprintf (logFile," known_sum = %d , sum = %d \n", known_sum, sum);
+ fprintf (logFile," is_larger = %d\n", is_larger);
+ return (known_sum == sum) && is_larger;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_private.c b/final/testsuite/c/omp_parallel_for_private.c
new file mode 100644
index 0000000..40280cc
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_private.c
@@ -0,0 +1,48 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for private directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for private</ompts:directive>
+<ompts:dependences>omp parallel for reduction,omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/*! Utility function to spend some time in a loop */
+static void do_some_work (void){
+ int i;
+ double sum = 0;
+ for(i = 0; i < 1000; i++){
+ sum += sqrt (i);
+ }
+}
+
+int <ompts:testcode:functionname>omp_parallel_for_private</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int i;
+ int i2;
+ </ompts:orphan:vars>
+
+ sum =0;
+ i2=0;
+ int known_sum;
+
+#pragma omp parallel for reduction(+:sum) schedule(static,1) private(i) <ompts:check>private(i2)</ompts:check>
+ <ompts:orphan>
+
+ for (i=1;i<=LOOPCOUNT;i++)
+ {
+ i2 = i;
+#pragma omp flush
+ do_some_work ();
+#pragma omp flush
+ sum = sum + i2;
+ } /*end of for*/
+ </ompts:orphan>
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ return (known_sum == sum);
+} /* end of check_parallel_for_private */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_for_reduction.c b/final/testsuite/c/omp_parallel_for_reduction.c
new file mode 100644
index 0000000..6c991f7
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_for_reduction.c
@@ -0,0 +1,280 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for reduction directive with all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for reduction</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_parallel_for_reduction</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int known_sum;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[LOOPCOUNT];
+ int i;
+ double dpt;
+ int result;
+ </ompts:orphan:vars>
+
+ sum =0;
+ dsum=0;
+ dt = 1./3.;
+ result = 0;
+ product = 1;
+ logic_and=1;
+ logic_or=0;
+ bit_and=1;
+ bit_or=0;
+ exclusiv_bit_or=0;
+
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+<ompts:orphan>
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(+:sum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=1;i<=LOOPCOUNT;i++)
+ {
+ sum=sum+i;
+ }
+
+ if(known_sum!=sum)
+ {
+ result++;
+ fprintf(logFile,"Error in sum with integers: Result was %d instead of %d\n",sum,known_sum);
+ }
+
+ diff = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(-:diff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=1;i<=LOOPCOUNT;++i)
+ {
+ diff=diff-i;
+ }
+
+ if(diff != 0)
+ {
+ result++;
+ fprintf(logFile,"Error in difference with integers: Result was %d instead of 0.\n",diff);
+ }
+
+ /* Tests for doubles */
+ dsum=0;
+ dpt=1;
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(+:dsum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dsum += pow(dt,i);
+ }
+
+ if( fabs(dsum-dknown_sum) > rounding_error )
+ {
+ result++;
+ fprintf(logFile,"Error in sum with doubles: Result was %f instead of %f (Difference: %E)\n",dsum,dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dpt*=dt;
+ }
+ fprintf(logFile,"\n");
+ ddiff = (1-dpt)/(1-dt);
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(-:ddiff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ if( fabs(ddiff) > rounding_error)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with doubles: Result was %E instead of 0.0\n",ddiff);
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(*:product)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=1;i<=MAX_FACTOR;i++)
+ {
+ product *= i;
+ }
+
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product)
+ {
+ result++;
+ fprintf(logFile,"Error in Product with integers: Result was %d instead of %d\n\n",product,known_product);
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ if(!logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 1.\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_and = logic_and && logics[i];
+ }
+ if(logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 2.\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_or = logic_or || logics[i];
+ }
+ if(logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 1.\n");
+ }
+ logic_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_or = logic_or || logics[i];
+ }
+ if(!logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 2.\n");
+ }
+
+
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ if(!bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 1.\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ if(bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 2.\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ if(bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ if(!bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(!exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+</ompts:orphan>
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_if.c b/final/testsuite/c/omp_parallel_if.c
new file mode 100644
index 0000000..d3f45b1
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_if.c
@@ -0,0 +1,40 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the if option of the parallel construct.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel if</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_if</ompts:testcode:functionname> (FILE * logFile)
+{
+<ompts:orphan:vars>
+ int i;
+ int sum;
+ int known_sum;
+ int mysum;
+ int control=1;
+</ompts:orphan:vars>
+ sum =0;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+#pragma omp parallel private(i) <ompts:check>if(control==0)</ompts:check>
+ {
+ <ompts:orphan>
+ mysum = 0;
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ mysum = mysum + i;
+ }
+#pragma omp critical
+ {
+ sum = sum + mysum;
+ } /* end of critical */
+ </ompts:orphan>
+ } /* end of parallel */
+
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_num_threads.c b/final/testsuite/c/omp_parallel_num_threads.c
new file mode 100644
index 0000000..897fed2
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_num_threads.c
@@ -0,0 +1,46 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_parallel_num_threads directive by counting the threads in a parallel region which was started with an explicitly stated number of threads.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parellel num_threads</ompts:directive>
+<ompts:dependences>omp master,omp parallel reduction,omp atomic</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_num_threads</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int failed;
+ int threads;
+ int nthreads;
+ </ompts:orphan:vars>
+
+ int max_threads = 0;
+
+ failed = 0;
+
+ /* first we check how many threads are available */
+#pragma omp parallel
+ {
+#pragma omp master
+ max_threads = omp_get_num_threads ();
+ }
+
+ /* we increase the number of threads from one to maximum:*/
+ for (threads = 1; threads <= max_threads; threads++)
+ {
+ nthreads = 0;
+
+ <ompts:orphan>
+#pragma omp parallel reduction(+:failed) <ompts:check>num_threads(threads)</ompts:check>
+ {
+ failed = failed + !(threads == omp_get_num_threads ());
+#pragma omp atomic
+ nthreads += 1;
+ }
+ </ompts:orphan>
+ failed = failed + !(nthreads == threads);
+ }
+ return (!failed);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_private.c b/final/testsuite/c/omp_parallel_private.c
new file mode 100644
index 0000000..fdccc09
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_private.c
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel private directive.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel private</ompts:directive>
+<ompts:dependences>omp for omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <stdlib.h>
+#include "omp_testsuite.h"
+
+//static int sum1 = 789;
+
+int <ompts:testcode:functionname>omp_parallel_private</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int sum, num_threads,sum1;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ sum = 0;
+ <ompts:crosscheck> sum1=0; </ompts:crosscheck>
+ num_threads = 0;
+
+
+#pragma omp parallel <ompts:check>private(sum1)</ompts:check>
+ {
+ <ompts:check>
+ sum1 = 7;
+ </ompts:check>
+ /*printf("sum1=%d\n",sum1);*/
+ <ompts:orphan>
+ int i;
+#pragma omp for
+ for (i = 1; i < 1000; i++)
+ {
+ sum1 = sum1 + i;
+ } /*end of for*/
+#pragma omp critical
+ {
+ sum = sum + sum1;
+ num_threads++;
+ } /*end of critical*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2 + 7 * num_threads;
+ return (known_sum == sum);
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_reduction.c b/final/testsuite/c/omp_parallel_reduction.c
new file mode 100644
index 0000000..96f8394
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_reduction.c
@@ -0,0 +1,278 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel reduction directive with all its options.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel reduction</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_parallel_reduction</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int known_sum;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+#define DOUBLE_DIGITS 20 /* dt^DOUBLE_DIGITS */
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+#define MAX_FACTOR 10
+#define KNOWN_PRODUCT 3628800 /* 10! */
+ int logic_and;
+ int logic_or;
+ int bit_and;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[LOOPCOUNT];
+ int i;
+ double dpt;
+ int result;
+</ompts:orphan:vars>
+ sum =0;
+ dsum=0;
+ product=1;
+ logic_and=1;
+ logic_or=0;
+ bit_and=1;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result=0;
+ dt = 1./3.;
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+<ompts:orphan>
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(+:sum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=1;i<=LOOPCOUNT;i++)
+ {
+ sum=sum+i;
+ }
+
+ if(known_sum!=sum)
+ {
+ result++;
+ fprintf(logFile,"Error in sum with integers: Result was %d instead of %d\n",sum,known_sum);
+ }
+
+ diff = (LOOPCOUNT*(LOOPCOUNT+1))/2;
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(-:diff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=1;i<=LOOPCOUNT;++i)
+ {
+ diff=diff-i;
+ }
+
+ if(diff != 0)
+ {
+ result++;
+ fprintf(logFile,"Error in difference with integers: Result was %d instead of 0.\n",diff);
+ }
+
+ /* Tests for doubles */
+ dsum=0;
+ dpt=1;
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(+:dsum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dsum += pow(dt,i);
+ }
+
+ if( fabs(dsum-dknown_sum) > rounding_error )
+ {
+ result++;
+ fprintf(logFile,"Error in sum with doubles: Result was %f instead of %f (Difference: %E)\n",dsum,dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ dpt*=dt;
+ }
+ fprintf(logFile,"\n");
+ ddiff = (1-dpt)/(1-dt);
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(-:ddiff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for (i=0;i<DOUBLE_DIGITS;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ if( fabs(ddiff) > rounding_error)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with doubles: Result was %E instead of 0.0\n",ddiff);
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(*:product)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=1;i<=MAX_FACTOR;i++)
+ {
+ product *= i;
+ }
+
+ known_product = KNOWN_PRODUCT;
+ if(known_product != product)
+ {
+ result++;
+ fprintf(logFile,"Error in Product with integers: Result was %d instead of %d\n\n",product,known_product);
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ if(!logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 1.\n");
+ }
+
+ logic_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_and = logic_and && logics[i];
+ }
+ if(logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 2.\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_or = logic_or || logics[i];
+ }
+ if(logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 1.\n");
+ }
+ logic_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logic_or = logic_or || logics[i];
+ }
+ if(!logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 2.\n");
+ }
+
+
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ if(!bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 1.\n");
+ }
+
+ bit_and = 1;
+ logics[LOOPCOUNT/2]=0;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ if(bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 2.\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ if(bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ if(!bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<LOOPCOUNT;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[LOOPCOUNT/2]=1;
+
+#pragma omp parallel for schedule(dynamic,1) private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ for(i=0;i<LOOPCOUNT;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ if(!exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+ </ompts:orphan>
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_sections_firstprivate.c b/final/testsuite/c/omp_parallel_sections_firstprivate.c
new file mode 100644
index 0000000..2933839
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_sections_firstprivate.c
@@ -0,0 +1,49 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections firstprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections firstprivate</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_sections_firstprivate</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int sum0;
+ </ompts:orphan:vars>
+ int known_sum;
+ sum =7;
+ sum0=11;
+
+<ompts:orphan>
+#pragma omp parallel sections <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+ {
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+ } /*end of parallel sections*/
+</ompts:orphan>
+known_sum=11*3+7;
+return (known_sum==sum);
+} /* end of check_section_firstprivate*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_sections_lastprivate.c b/final/testsuite/c/omp_parallel_sections_lastprivate.c
new file mode 100644
index 0000000..55ae5f0
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_sections_lastprivate.c
@@ -0,0 +1,70 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections lastprivate</ompts:directive>
+<ompts:dependences>omp critical,omp parallel sections private</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_sections_lastprivate</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int sum0;
+ int i;
+ int i0;
+ </ompts:orphan:vars>
+ int known_sum;
+ sum =0;
+ sum0 = 0;
+ i0 = -1;
+
+ <ompts:orphan>
+#pragma omp parallel sections private(i,sum0) <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ sum0=0;
+ for (i=1;i<400;i++)
+ {
+ sum0=sum0+i;
+ i0=i;
+ }
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical*/
+ }/* end of section */
+#pragma omp section
+ {
+ sum0=0;
+ for(i=400;i<700;i++)
+ {
+ sum0=sum0+i; /*end of for*/
+ i0=i;
+ }
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical*/
+ }
+#pragma omp section
+ {
+ sum0=0;
+ for(i=700;i<1000;i++)
+ {
+ sum0=sum0+i;
+ i0=i;
+ }
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical*/
+ }
+ }/* end of parallel sections*/
+ </ompts:orphan>
+ known_sum=(999*1000)/2;
+ return ((known_sum==sum) && (i0==999) );
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_sections_private.c b/final/testsuite/c/omp_parallel_sections_private.c
new file mode 100644
index 0000000..c5fe414
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_sections_private.c
@@ -0,0 +1,65 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections private directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections private</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_sections_private</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int sum0;
+ int i;
+ </ompts:orphan:vars>
+ int known_sum;
+ sum = 7;
+ sum0=0;
+
+<ompts:orphan>
+#pragma omp parallel sections private(<ompts:check>sum0,</ompts:check> i)
+ {
+#pragma omp section
+ {
+ <ompts:check>
+ sum0=0;
+ </ompts:check>
+ for (i=1;i<400;i++)
+ sum0=sum0+i;
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+ <ompts:check>
+ sum0=0;
+ </ompts:check>
+ for(i=400;i<700;i++)
+ sum0=sum0+i;
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+ <ompts:check>
+ sum0=0;
+ </ompts:check>
+ for(i=700;i<1000;i++)
+ sum0=sum0+i;
+#pragma omp critical
+ {
+ sum= sum+sum0;
+ } /*end of critical */
+ }
+ } /*end of parallel sections*/
+</ompts:orphan>
+known_sum=(999*1000)/2+7;
+return (known_sum==sum);
+} /* end of check_section_private*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_sections_reduction.c b/final/testsuite/c/omp_parallel_sections_reduction.c
new file mode 100644
index 0000000..cadea6a
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_sections_reduction.c
@@ -0,0 +1,568 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections reduction directive with all its option.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections reduction</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_parallel_sections_reduction</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int known_sum;
+ double dpt;
+ double dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-5;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int bit_and;
+ int logic_or;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[1000];
+ int i;
+ int result;
+ </ompts:orphan:vars>
+
+ sum = 7;
+ dsum=0;
+ product =1;
+ dpt = 1;
+ logic_and=1;
+ bit_and=1;
+ logic_or=0;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result =0;
+ /* int my_islarger;*/
+ /*int is_larger=1;*/
+ known_sum = (999*1000)/2+7;
+
+ <ompts:orphan>
+#pragma omp parallel sections private(i) <ompts:check>reduction(+:sum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ sum=sum+i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ sum=sum+i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ sum=sum+i;
+ }
+ }
+ }
+
+ if(known_sum!=sum)
+ {
+ result++;
+ fprintf(logFile,"Error in sum with integers: Result was %d instead of %d.\n",sum, known_sum);
+ }
+
+ diff = (999*1000)/2;
+#pragma omp parallel sections private(i) <ompts:check>reduction(-:diff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ diff=diff-i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ diff=diff-i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ diff=diff-i;
+ }
+ }
+ }
+
+
+ if(diff != 0)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with integers: Result was %d instead of 0.\n",diff);
+ }
+ for (i=0;i<20;++i)
+ {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+#pragma omp parallel sections private(i) <ompts:check>reduction(+:dsum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=0;i<6;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=6;i<12;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=12;i<20;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+ }
+
+
+ if( fabs(dsum-dknown_sum) > rounding_error )
+ {
+ result++;
+ fprintf(logFile,"Error in sum with doubles: Result was %f instead of %f (Difference: %E)\n",dsum,dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<20;++i)
+ {
+ dpt*=dt;
+ }
+ fprintf(logFile,"\n");
+ ddiff = (1-dpt)/(1-dt);
+#pragma omp parallel sections private(i) <ompts:check>reduction(-:ddiff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=0;i<6;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=6;i<12;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=12;i<20;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+ }
+
+ if( fabs(ddiff) > rounding_error)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with doubles: Result was %E instead of 0.0\n",ddiff);
+ }
+
+ known_product = 3628800;
+#pragma omp parallel sections private(i) <ompts:check>reduction(*:product)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=1;i<3;i++)
+ {
+ product *= i;
+ }
+ }
+#pragma omp section
+ {
+ for(i=3;i<7;i++)
+ {
+ product *= i;
+ }
+ }
+#pragma omp section
+ {
+ for(i=7;i<11;i++)
+ {
+ product *= i;
+ }
+ }
+ }
+
+
+ if(known_product != product)
+ {
+ result++;
+ fprintf(logFile,"Error in Product with integers: Result was %d instead of %d\n",product,known_product);
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+
+ if(!logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 1\n");
+ }
+
+ logic_and = 1;
+ logics[501] = 0;
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+
+ if(logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 2");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+
+ if(logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+
+ if(!logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 2\n");
+ }
+
+ for(i=0;i<1000;++i)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ }
+ if(!bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[501]=0;
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ }
+ if(bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 2");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ if(bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ if(!bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ if(exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel sections private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ if(!exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+</ompts:orphan>
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_parallel_shared.c b/final/testsuite/c/omp_parallel_shared.c
new file mode 100644
index 0000000..1f28e38
--- /dev/null
+++ b/final/testsuite/c/omp_parallel_shared.c
@@ -0,0 +1,43 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the shared option of the parallel construct.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp parallel shared</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_parallel_shared</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int i;
+ int sum;
+ </ompts:orphan:vars>
+ sum = 0;
+ int known_sum;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2 ;
+
+#pragma omp parallel private(i) <ompts:check>shared(sum)</ompts:check> <ompts:crosscheck>firstprivate(sum)</ompts:crosscheck>
+ {
+ <ompts:orphan>
+ int mysum = 0;
+#pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ mysum = mysum + i;
+ }
+#pragma omp critical
+ {
+ sum = sum + mysum;
+ } /* end of critical */
+</ompts:orphan>
+
+ } /* end of parallel */
+ if (known_sum != sum) {
+ fprintf(logFile, "KNOWN_SUM = %d; SUM = %d\n", known_sum, sum);
+ }
+ return (known_sum == sum);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_section_firstprivate.c b/final/testsuite/c/omp_section_firstprivate.c
new file mode 100644
index 0000000..a035d10
--- /dev/null
+++ b/final/testsuite/c/omp_section_firstprivate.c
@@ -0,0 +1,52 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp section firstprivate directive by adding a variable which is defined before the parallel region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp firstprivate</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_section_firstprivate</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int sum0;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ sum0 = 11;
+ sum = 7;
+#pragma omp parallel
+ {
+<ompts:orphan>
+#pragma omp sections <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+ {
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+ } /*end of sections*/
+</ompts:orphan>
+ } /* end of parallel */
+ known_sum = 11 * 3 + 7;
+ return (known_sum == sum);
+} /* end of check_section_firstprivate*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_section_lastprivate.c b/final/testsuite/c/omp_section_lastprivate.c
new file mode 100644
index 0000000..56ae0df
--- /dev/null
+++ b/final/testsuite/c/omp_section_lastprivate.c
@@ -0,0 +1,73 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp section lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp section lastprivate</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_section_lastprivate</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int i0 = -1;
+ int sum = 0;
+ int i;
+ int sum0 = 0;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ i0 = -1;
+ sum = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+#pragma omp sections <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck> private(i,sum0)
+ {
+#pragma omp section
+ {
+ sum0 = 0;
+ for (i = 1; i < 400; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ } /* end of section */
+#pragma omp section
+ {
+ sum0 = 0;
+ for(i = 400; i < 700; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ }
+#pragma omp section
+ {
+ sum0 = 0;
+ for(i = 700; i < 1000; i++)
+ {
+ sum0 = sum0 + i;
+ i0 = i;
+ }
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical*/
+ }
+ } /* end of sections*/
+ </ompts:orphan>
+ } /* end of parallel*/
+ known_sum = (999 * 1000) / 2;
+ return ((known_sum == sum) && (i0 == 999) );
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_section_private.c b/final/testsuite/c/omp_section_private.c
new file mode 100644
index 0000000..399a2f8
--- /dev/null
+++ b/final/testsuite/c/omp_section_private.c
@@ -0,0 +1,69 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp section private directive by upcounting a variable in a to several sections splitted loop.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp section private</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_section_private</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int sum0;
+ int i;
+ </ompts:orphan:vars>
+ int known_sum;
+
+ sum = 7;
+ sum0 = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+#pragma omp sections <ompts:check>private(sum0,i)</ompts:check><ompts:crosscheck>private(i)</ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ <ompts:check>
+ sum0 = 0;
+ </ompts:check>
+ for (i = 1; i < 400; i++)
+ sum0 = sum0 + i;
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+ <ompts:check>
+ sum0 = 0;
+ </ompts:check>
+ for (i = 400; i < 700; i++)
+ sum0 = sum0 + i;
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+#pragma omp section
+ {
+ <ompts:check>
+ sum0 = 0;
+ </ompts:check>
+ for (i = 700; i < 1000; i++)
+ sum0 = sum0 + i;
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ }
+ } /*end of sections*/
+ </ompts:orphan>
+ } /* end of parallel */
+ known_sum = (999 * 1000) / 2 + 7;
+ return (known_sum == sum);
+} /* end of check_section_private*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_sections_nowait.c b/final/testsuite/c/omp_sections_nowait.c
new file mode 100644
index 0000000..b91a375
--- /dev/null
+++ b/final/testsuite/c/omp_sections_nowait.c
@@ -0,0 +1,66 @@
+<ompts:test>
+<ompts:description>Test which checks the omp parallel for nowait directive. It fills an array with values and operates on these in the following.</ompts:description>
+<ompts:directive>omp parallel sections nowait</ompts:directive>
+<ompts:version>1.0</ompts:version>
+<ompts:dependences>omp parallel sections, omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_sections_nowait</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int result;
+ int count;
+ </ompts:orphan:vars>
+ int j;
+
+ result = 0;
+ count = 0;
+
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int rank;
+
+ rank = omp_get_thread_num ();
+
+#pragma omp sections <ompts:check>nowait</ompts:check>
+ {
+#pragma omp section
+ {
+ fprintf (logFile, "Thread nr %d enters first section and gets sleeping.\n", rank);
+ my_sleep(SLEEPTIME);
+ count = 1;
+ fprintf (logFile, "Thread nr %d woke up an set count to 1.\n", rank);
+#pragma omp flush(count)
+ }
+#pragma omp section
+ {
+ fprintf (logFile, "Thread nr %d executed work in the first section.\n", rank);
+ }
+ }
+/* Begin of second sections environment */
+#pragma omp sections
+ {
+#pragma omp section
+ {
+ fprintf (logFile, "Thread nr %d executed work in the second section.\n", rank);
+ }
+#pragma omp section
+ {
+ fprintf (logFile, "Thread nr %d executed work in the second section and controls the value of count\n", rank);
+ if (count == 0)
+ result = 1;
+ fprintf (logFile, "cout was %d", count);
+ }
+ }
+ </ompts:orphan>
+ }
+
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_sections_reduction.c b/final/testsuite/c/omp_sections_reduction.c
new file mode 100644
index 0000000..7e7829a
--- /dev/null
+++ b/final/testsuite/c/omp_sections_reduction.c
@@ -0,0 +1,613 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp sections reduction directive with all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp sections reduction</ompts:directive>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+int <ompts:testcode:functionname>omp_sections_reduction</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int sum;
+ int known_sum;
+ double dpt,dsum;
+ double dknown_sum;
+ double dt=0.5; /* base of geometric row for + and - test*/
+ double rounding_error= 1.E-9;
+ int diff;
+ double ddiff;
+ int product;
+ int known_product;
+ int logic_and;
+ int bit_and;
+ int logic_or;
+ int bit_or;
+ int exclusiv_bit_or;
+ int logics[1000];
+ int i;
+ int result;
+ </ompts:orphan:vars>
+ /* int my_islarger;*/
+ /*int is_larger=1;*/
+
+ sum =7;
+ dpt =1;
+ dsum=0;
+ product =1;
+ logic_and=1;
+ bit_and=1;
+ logic_or=0;
+ bit_or=0;
+ exclusiv_bit_or=0;
+ result = 0;
+ dt = 1./3.;
+ known_sum = (999*1000)/2+7;
+<ompts:orphan>
+#pragma omp parallel
+ {
+
+#pragma omp sections private(i) <ompts:check>reduction(+:sum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ sum=sum+i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ sum=sum+i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ sum=sum+i;
+ }
+ }
+ }
+ }
+
+ if(known_sum!=sum)
+ {
+ ++result;
+ fprintf(logFile,"Error in sum with integers: Result was %d instead of %d\n", sum,known_sum);
+ }
+
+ diff = (999*1000)/2;
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(-:diff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ diff=diff-i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ diff=diff-i;
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ diff=diff-i;
+ }
+ }
+ }
+ }
+
+ if(diff != 0)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with integers: Result was %d instead of 0.\n",diff);
+ }
+
+ for (i=0;i<20;++i)
+ {
+ dpt*=dt;
+ }
+ dknown_sum = (1-dpt)/(1-dt);
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(+:dsum)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=0;i<6;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=6;i<12;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=12;i<20;++i)
+ {
+ dsum += pow(dt,i);
+ }
+ }
+ }
+ }
+
+ if( fabs(dsum-dknown_sum) > rounding_error )
+ {
+ result++;
+ fprintf(logFile,"Error in sum with doubles: Result was %f instead of %f (Difference: %E)\n",dsum,dknown_sum, dsum-dknown_sum);
+ }
+
+ dpt=1;
+
+ for (i=0;i<20;++i)
+ {
+ dpt*=dt;
+ }
+ fprintf(logFile,"\n");
+ ddiff = (1-dpt)/(1-dt);
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(-:ddiff)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=0;i<6;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=6;i<12;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+#pragma omp section
+ {
+ for (i=12;i<20;++i)
+ {
+ ddiff -= pow(dt,i);
+ }
+ }
+ }
+ }
+
+ if( fabs(ddiff) > rounding_error)
+ {
+ result++;
+ fprintf(logFile,"Error in Difference with doubles: Result was %E instead of 0.0\n",ddiff);
+ }
+
+
+ known_product = 3628800;
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(*:product)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=1;i<3;i++)
+ {
+ product *= i;
+ }
+ }
+#pragma omp section
+ {
+ for(i=3;i<7;i++)
+ {
+ product *= i;
+ }
+ }
+#pragma omp section
+ {
+ for(i=7;i<11;i++)
+ {
+ product *= i;
+ }
+ }
+ }
+ }
+
+ if(known_product != product)
+ {
+ result++;
+ fprintf(logFile,"Error in Product with integers: Result was %d instead of %d\n",product,known_product);
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ }
+
+ if(!logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 1\n");
+ }
+
+ logic_and = 1;
+ logics[501] = 0;
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(&&:logic_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_and = (logic_and && logics[i]);
+ }
+ }
+ }
+ }
+
+ if(logic_and)
+ {
+ result++;
+ fprintf(logFile,"Error in logic AND part 2\n");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ }
+
+ if(logic_or)
+ {
+ result++;
+ fprintf(logFile,"\nError in logic OR part 1\n");
+ }
+
+ logic_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(||:logic_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for (i=1;i<300;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=300;i<700;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for (i=700;i<1000;i++)
+ {
+ logic_or = (logic_or || logics[i]);
+ }
+ }
+ }
+ }
+
+ if(!logic_or)
+ {
+ result++;
+ fprintf(logFile,"Error in logic OR part 2\n");
+ }
+
+
+ for(i=0;i<1000;++i)
+ {
+ logics[i]=1;
+ }
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_and = (bit_and & logics[i]);
+ }
+ }
+ }
+ }
+ if(!bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 1\n");
+ }
+
+ bit_and = 1;
+ logics[501]=0;
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(&:bit_and)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_and = bit_and & logics[i];
+ }
+ }
+ }
+ }
+ if(bit_and)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT AND part 2\n");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ }
+ if(bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 1\n");
+ }
+ bit_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(|:bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ bit_or = bit_or | logics[i];
+ }
+ }
+ }
+ }
+ if(!bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in BIT OR part 2\n");
+ }
+
+ for(i=0;i<1000;i++)
+ {
+ logics[i]=0;
+ }
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ }
+ if(exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 1\n");
+ }
+
+ exclusiv_bit_or = 0;
+ logics[501]=1;
+
+#pragma omp parallel
+ {
+#pragma omp sections private(i) <ompts:check>reduction(^:exclusiv_bit_or)</ompts:check><ompts:crosscheck></ompts:crosscheck>
+ {
+#pragma omp section
+ {
+ for(i=0;i<300;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=300;i<700;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+#pragma omp section
+ {
+ for(i=700;i<1000;++i)
+ {
+ exclusiv_bit_or = exclusiv_bit_or ^ logics[i];
+ }
+ }
+ }
+ }
+ if(!exclusiv_bit_or)
+ {
+ result++;
+ fprintf(logFile,"Error in EXCLUSIV BIT OR part 2\n");
+ }
+</ompts:orphan>
+ /*printf("\nResult:%d\n",result);*/
+ return (result==0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_single.c b/final/testsuite/c/omp_single.c
new file mode 100644
index 0000000..032b0d2
--- /dev/null
+++ b/final/testsuite/c/omp_single.c
@@ -0,0 +1,43 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single directive by controlling how often a directive is called in an omp single region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single</ompts:directive>
+<ompts:dependences>omp parallel private,omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_single</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int nr_threads_in_single;
+ int result;
+ int nr_iterations;
+ int i;
+ </ompts:orphan:vars>
+
+ nr_threads_in_single = 0;
+ result = 0;
+ nr_iterations = 0;
+
+#pragma omp parallel private(i)
+ {
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+ <ompts:check>#pragma omp single </ompts:check>
+ {
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ } /* end of single */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of parallel */
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+} /* end of check_single*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_single_copyprivate.c b/final/testsuite/c/omp_single_copyprivate.c
new file mode 100644
index 0000000..bc7cd54
--- /dev/null
+++ b/final/testsuite/c/omp_single_copyprivate.c
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single copyprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single copyprivate</ompts:directive>
+<ompts:dependences>omp parllel,omp critical</ompts:dependences>
+<ompts:testcode>
+#include "omp_testsuite.h"
+
+int j;
+#pragma omp threadprivate(j)
+
+int <ompts:testcode:functionname>omp_single_copyprivate</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int result;
+ int nr_iterations;
+ </ompts:orphan:vars>
+
+ result = 0;
+ nr_iterations = 0;
+#pragma omp parallel
+ {
+ <ompts:orphan>
+ int i;
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ /*
+ int thread;
+ thread = omp_get_thread_num ();
+ */
+#pragma omp single <ompts:check>copyprivate(j)</ompts:check>
+ {
+ nr_iterations++;
+ j = i;
+ /*printf ("thread %d assigns, j = %d, i = %d\n", thread, j, i);*/
+ }
+ /* #pragma omp barrier*/
+#pragma omp critical
+ {
+ /*printf ("thread = %d, j = %d, i = %d\n", thread, j, i);*/
+ result = result + j - i;
+ }
+#pragma omp barrier
+ } /* end of for */
+ </ompts:orphan>
+ } /* end of parallel */
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_single_nowait.c b/final/testsuite/c/omp_single_nowait.c
new file mode 100644
index 0000000..9b7a250
--- /dev/null
+++ b/final/testsuite/c/omp_single_nowait.c
@@ -0,0 +1,60 @@
+<ompts:test>
+<ompts:testdescription></ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single nowait</ompts:directive>
+<ompts:dependences>omp critical,omp atomic</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int my_iterations;
+#pragma omp threadprivate(my_iterations)
+
+int <ompts:testcode:functionname>omp_single_nowait</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int nr_iterations;
+ </ompts:orphan:vars>
+
+ int total_iterations = 0;
+ int i;
+
+ nr_iterations = 0;
+ my_iterations = 0;
+
+#pragma omp parallel private(i)
+ {
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+ <ompts:check>#pragma omp single nowait</ompts:check>
+ {
+#pragma omp atomic
+ nr_iterations++;
+ } /* end of single*/
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of parallel */
+
+#pragma omp parallel private(i)
+ {
+ my_iterations = 0;
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+ <ompts:check>#pragma omp single nowait</ompts:check>
+ {
+ my_iterations++;
+ } /* end of single*/
+ </ompts:orphan>
+ } /* end of for */
+#pragma omp critical
+ {
+ total_iterations += my_iterations;
+ }
+
+ } /* end of parallel */
+ return ((nr_iterations == LOOPCOUNT) && (total_iterations == LOOPCOUNT));
+} /* end of check_single_nowait*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_single_private.c b/final/testsuite/c/omp_single_private.c
new file mode 100644
index 0000000..a7502c7
--- /dev/null
+++ b/final/testsuite/c/omp_single_private.c
@@ -0,0 +1,56 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single private directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp singel private</ompts:directive>
+<ompts:dependences>omp critical,omp flush,omp single nowait</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+int myit = 0;
+#pragma omp threadprivate(myit)
+int myresult = 0;
+#pragma omp threadprivate(myresult)
+
+int <ompts:testcode:functionname>omp_single_private</ompts:testcode:functionname>(FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int nr_threads_in_single;
+ int result;
+ int nr_iterations;
+ </ompts:orphan:vars>
+ int i;
+
+ myit = 0;
+ nr_threads_in_single = 0;
+ nr_iterations = 0;
+ result = 0;
+
+#pragma omp parallel private(i)
+ {
+ myresult = 0;
+ myit = 0;
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ <ompts:orphan>
+#pragma omp single <ompts:check>private(nr_threads_in_single) </ompts:check>nowait
+ {
+ nr_threads_in_single = 0;
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ myit++;
+ myresult = myresult + nr_threads_in_single;
+ } /* end of single */
+ </ompts:orphan>
+ } /* end of for */
+#pragma omp critical
+ {
+ result += nr_threads_in_single;
+ nr_iterations += myit;
+ }
+ } /* end of parallel */
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+} /* end of check_single private */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task.c b/final/testsuite/c/omp_task.c
new file mode 100644
index 0000000..ae89790
--- /dev/null
+++ b/final/testsuite/c/omp_task.c
@@ -0,0 +1,52 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp task directive. The idea of the tests is to generate a set of tasks in a single region. We let pause the tasks generated so that other threads get sheduled to the newly opened tasks.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task</ompts:directive>
+<ompts:dependences>omp single</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+
+int <ompts:testcode:functionname>omp_task</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int tids[NUM_TASKS];
+ int i;
+ </ompts:orphan:vars>
+
+#pragma omp parallel
+{
+#pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ <ompts:orphan>
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+
+<ompts:check>#pragma omp task</ompts:check>
+ {
+ my_sleep (SLEEPTIME);
+
+ tids[myi] = omp_get_thread_num();
+ } /* end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+} /*end of parallel */
+
+/* Now we ckeck if more than one thread executed the tasks. */
+ for (i = 1; i < NUM_TASKS; i++) {
+ if (tids[0] != tids[i])
+ return 1;
+ }
+ return 0;
+} /* end of check_parallel_for_private */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_final.c b/final/testsuite/c/omp_task_final.c
new file mode 100644
index 0000000..4e00c5f
--- /dev/null
+++ b/final/testsuite/c/omp_task_final.c
@@ -0,0 +1,52 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp task directive. The idea of the tests is to generate a set of tasks in a single region. We let pause the tasks generated so that other threads get sheduled to the newly opened tasks.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task final</ompts:directive>
+<ompts:dependences>omp single</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+
+int <ompts:testcode:functionname>omp_task_final</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int tids[NUM_TASKS];
+ int i;
+ </ompts:orphan:vars>
+ int error;
+#pragma omp parallel
+{
+#pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ <ompts:orphan>
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+
+ #pragma omp task <ompts:check>final(i>=10)</ompts:check>
+ {
+ my_sleep (SLEEPTIME);
+
+ tids[myi] = omp_get_thread_num();
+ } /* end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+} /*end of parallel */
+
+/* Now we ckeck if more than one thread executed the tasks. */
+ for (i = 10; i < NUM_TASKS; i++) {
+ if (tids[10] != tids[i])
+ error++;
+ }
+ return (error==0);
+} /* end of check_parallel_for_private */
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_firstprivate.c b/final/testsuite/c/omp_task_firstprivate.c
new file mode 100644
index 0000000..7aa0746
--- /dev/null
+++ b/final/testsuite/c/omp_task_firstprivate.c
@@ -0,0 +1,51 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the firstprivate clause of the task directive. We create a set of tasks in a single region. We defines a variable named sum unequal zero which gets declared firstprivate for each task. Now each task calcualtes a sum using this private variable. Before each calcualation step we introduce a flush command so that maybe the private variabel gets bad. At the end we check if the calculated sum was right.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task firstprivate</ompts:directive>
+<ompts:dependences>omp single,omp flush,omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+int <ompts:testcode:functionname>omp_task_firstprivate</ompts:testcode:functionname> (FILE * logFile)
+{
+ int i;
+ <ompts:orphan:vars>
+ int sum = 1234;
+ int known_sum;
+ int result = 0; /* counts the wrong sums from tasks */
+ </ompts:orphan:vars>
+
+ known_sum = 1234 + (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++)
+ {
+ <ompts:orphan>
+#pragma omp task <ompts:check>firstprivate(sum)</ompts:check>
+ {
+ int j;
+ for (j = 0; j <= LOOPCOUNT; j++) {
+#pragma omp flush
+ sum += j;
+ }
+
+ /* check if calculated sum was right */
+ if (sum != known_sum) {
+#pragma omp critical
+ { result++; }
+ }
+ } /* end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel*/
+
+ return (result == 0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_if.c b/final/testsuite/c/omp_task_if.c
new file mode 100644
index 0000000..c07ab2f
--- /dev/null
+++ b/final/testsuite/c/omp_task_if.c
@@ -0,0 +1,43 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the if clause of the omp task directive. The idear of the tests is to generate a tasks in a single region and pause it immediately. The parent thread now shall set a counter variable which the paused task shall evaluate when woke up.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task if</ompts:directive>
+<ompts:dependences>omp single,omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+
+int <ompts:testcode:functionname>omp_task_if</ompts:testcode:functionname>(FILE * logFile){
+ <ompts:orphan:vars>
+ int condition_false;
+ int count;
+ int result;
+ </ompts:orphan:vars>
+ count=0;
+ condition_false = (logFile == NULL);
+#pragma omp parallel
+{
+#pragma omp single
+ {
+ <ompts:orphan>
+#pragma omp task <ompts:check>if (condition_false)</ompts:check> shared(count, result)
+ {
+ my_sleep (SLEEPTIME_LONG);
+//#pragma omp flush (count)
+ result = (0 == count);
+ } /* end of omp task */
+ </ompts:orphan>
+
+ count = 1;
+//#pragma omp flush (count)
+
+ } /* end of single */
+} /*end of parallel */
+
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_imp_firstprivate.c b/final/testsuite/c/omp_task_imp_firstprivate.c
new file mode 100644
index 0000000..bb8f0ef
--- /dev/null
+++ b/final/testsuite/c/omp_task_imp_firstprivate.c
@@ -0,0 +1,51 @@
+<ompts:test>
+<ompts:testdescription> Test to see if implied private works properly</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task</ompts:directive>
+<ompts:dependences>omp single</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+
+
+/* Utility function do spend some time in a loop */
+int <ompts:testcode:functionname>omp_task_imp_firstprivate</ompts:testcode:functionname> (FILE * logFile)
+{
+ int i=5;
+ int k = 0;
+ int result = 0;
+ int task_result = 1;
+ #pragma omp parallel firstprivate(i)
+ {
+ #pragma omp single
+ {
+
+
+ for (k = 0; k < NUM_TASKS; k++)
+ {
+ #pragma omp task shared(result , task_result<ompts:crosscheck>, i</ompts:crosscheck>)
+ {
+ int j;
+ //check if i is private
+ if(i != 5)
+ task_result = 0;
+
+ for(j = 0; j < NUM_TASKS; j++)
+ i++;
+ //this should be firstprivate implicitly
+ }
+ }
+
+ #pragma omp taskwait
+ result = (task_result && i==5);
+ }
+
+ }
+
+ return result;
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_private.c b/final/testsuite/c/omp_task_private.c
new file mode 100644
index 0000000..59e26dd
--- /dev/null
+++ b/final/testsuite/c/omp_task_private.c
@@ -0,0 +1,53 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the private clause of the task directive. We create a set of tasks in a single region. We defines a variable named sum which gets declared private for each task. Now each task calcualtes a sum using this private variable. Before each calcualation step we introduce a flush command so that maybe the private variabel gets bad. At the end we check if the calculated sum was right.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task private</ompts:directive>
+<ompts:dependences>omp single,omp flush,omp critical</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+/* Utility function do spend some time in a loop */
+int <ompts:testcode:functionname>omp_task_private</ompts:testcode:functionname> (FILE * logFile)
+{
+ int i;
+ <ompts:orphan:vars>
+ int known_sum;
+ int sum = 0;
+ int result = 0; /* counts the wrong sums from tasks */
+ </ompts:orphan:vars>
+
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++)
+ {
+ <ompts:orphan>
+#pragma omp task <ompts:check>private(sum)</ompts:check> shared(result, known_sum)
+ {
+ int j;
+ //if sum is private, initialize to 0
+ <ompts:check>sum = 0;</ompts:check>
+ for (j = 0; j <= LOOPCOUNT; j++) {
+#pragma omp flush
+ sum += j;
+ }
+ /* check if calculated sum was right */
+ if (sum != known_sum) {
+#pragma omp critical
+ result++;
+ }
+ } /* end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel*/
+
+ return (result == 0);
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_shared.c b/final/testsuite/c/omp_task_shared.c
new file mode 100644
index 0000000..74c2109
--- /dev/null
+++ b/final/testsuite/c/omp_task_shared.c
@@ -0,0 +1,47 @@
+<ompts:test>
+<ompts:testdescription> Test to see if implied shared works correctly</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task</ompts:directive>
+<ompts:dependences>omp single, omp task firstprivate</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+
+
+
+
+/* Utility function do spend some time in a loop */
+int <ompts:testcode:functionname>omp_task_imp_shared</ompts:testcode:functionname> (FILE * logFile)
+{
+ <ompts:orphan:vars>
+ int i;
+ </ompts:orphan:vars>
+ i=0;
+ int k = 0;
+ int result = 0;
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ for (k = 0; k < NUM_TASKS; k++)
+ {
+ <ompts:orphan>
+ #pragma omp task <ompts:crosscheck> firstprivate(i) </ompts:crosscheck> <ompts:check> shared(i)</ompts:check>
+ {
+ #pragma omp atomic
+ i++;
+ //this should be shared implicitly
+
+ }
+ </ompts:orphan>
+ }
+
+ }
+
+result = i;
+return ((result == NUM_TASKS));
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_task_untied.c b/final/testsuite/c/omp_task_untied.c
new file mode 100644
index 0000000..3d6ebe2
--- /dev/null
+++ b/final/testsuite/c/omp_task_untied.c
@@ -0,0 +1,69 @@
+<ompts:test>
+<ompts:testdescription>Test for untied clause. First generate a set of tasks and pause it immediately. Then we resume half of them and check whether they are scheduled by different threads</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task untied</ompts:directive>
+<ompts:dependences>omp taskwait</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_task_untied</ompts:testcode:functionname>(FILE * logFile){
+
+ <ompts:orphan:vars>
+ int i;
+ int count;
+ int start_tid[NUM_TASKS];
+ int current_tid[NUM_TASKS];
+ </ompts:orphan:vars>
+ count = 0;
+
+ /*initialization*/
+ for (i=0; i< NUM_TASKS; i++){
+ start_tid[i]=0;
+ current_tid[i]=0;
+ }
+
+ #pragma omp parallel firstprivate(i)
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ <ompts:orphan>
+ int myi = i;
+ #pragma omp task <ompts:check>untied</ompts:check>
+ {
+ my_sleep(SLEEPTIME);
+ start_tid[myi] = omp_get_thread_num();
+ current_tid[myi] = omp_get_thread_num();
+
+ #pragma omp taskwait
+
+ <ompts:check>if((start_tid[myi] %2) !=0){</ompts:check>
+ my_sleep(SLEEPTIME);
+ current_tid[myi] = omp_get_thread_num();
+ <ompts:check>
+ } /* end of if */
+ else {
+ current_tid[myi] = omp_get_thread_num();
+ }
+ </ompts:check>
+
+ } /*end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel */
+
+ for (i=0;i<NUM_TASKS; i++)
+ {
+ printf("start_tid[%d]=%d, current_tid[%d]=%d\n",i, start_tid[i], i , current_tid[i]);
+ if (current_tid[i] == start_tid[i])
+ count++;
+ }
+ return (count<NUM_TASKS);
+}
+</ompts:testcode>
+
+</ompts:test>
diff --git a/final/testsuite/c/omp_taskwait.c b/final/testsuite/c/omp_taskwait.c
new file mode 100644
index 0000000..88761f2
--- /dev/null
+++ b/final/testsuite/c/omp_taskwait.c
@@ -0,0 +1,75 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp taskwait directive. First we generate a set of tasks, which set the elements of an array to a specific value. Then we do a taskwait and check if all tasks finished meaning all array elements contain the right value. Then we generate a second set setting the array elements to another value. After the parallel region we check if all tasks of the second set finished and were executed after the tasks of the first set.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp taskwait</ompts:directive>
+<ompts:dependences>omp single,omp task</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+
+int <ompts:testcode:functionname>omp_taskwait</ompts:testcode:functionname>(FILE * logFile){
+ int result1 = 0; /* Stores number of not finished tasks after the taskwait */
+ int result2 = 0; /* Stores number of wrong array elements at the end */
+
+ int array[NUM_TASKS];
+ int i;
+
+ /* fill array */
+ for (i = 0; i < NUM_TASKS; i++)
+ array[i] = 0;
+
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ /* First we have to store the value of the loop index in a new variable
+ * which will be private for each task because otherwise it will be overwritten
+ * if the execution of the task takes longer than the time which is needed to
+ * enter the next step of the loop!
+ */
+ int myi;
+ myi = i;
+#pragma omp task
+ {
+ my_sleep (SLEEPTIME);
+ array[myi] = 1;
+ } /* end of omp task */
+ } /* end of for */
+
+<ompts:orphan>
+<ompts:check>#pragma omp taskwait</ompts:check>
+</ompts:orphan>
+
+ /* check if all tasks were finished */
+ for (i = 0; i < NUM_TASKS; i++)
+ if (array[i] != 1)
+ result1++;
+
+ /* generate some more tasks which now shall overwrite
+ * the values in the tids array */
+ for (i = 0; i < NUM_TASKS; i++) {
+ int myi;
+ myi = i;
+#pragma omp task
+ {
+ array[myi] = 2;
+ } /* end of omp task */
+ } /* end of for */
+
+ } /* end of single */
+ } /*end of parallel */
+
+ /* final check, if all array elements contain the right values: */
+ for (i = 0; i < NUM_TASKS; i++) {
+ if (array[i] != 2)
+ result2++;
+ }
+
+ return ((result1 == 0) && (result2 == 0));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_taskyield.c b/final/testsuite/c/omp_taskyield.c
new file mode 100644
index 0000000..1d1271e
--- /dev/null
+++ b/final/testsuite/c/omp_taskyield.c
@@ -0,0 +1,59 @@
+<ompts:test>
+<ompts:testdescription>Test taskyield directive. First generate a set of tasks and pause it immediately. Then we resume half of them and check whether they are scheduled by different threads</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp taskyield</ompts:directive>
+<ompts:dependences>omp taskwait</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include <math.h>
+#include "omp_testsuite.h"
+#include "omp_my_sleep.h"
+
+int <ompts:testcode:functionname>omp_taskyield</ompts:testcode:functionname>(FILE * logFile){
+
+ <ompts:orphan:vars>
+ int i;
+ int count = 0;
+ int start_tid[NUM_TASKS];
+ int current_tid[NUM_TASKS];
+ </ompts:orphan:vars>
+ for (i=0; i< NUM_TASKS; i++){
+ start_tid[i]=0;
+ current_tid[i]=0;
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ for (i = 0; i < NUM_TASKS; i++) {
+ <ompts:orphan>
+ int myi = i;
+ <ompts:check>#pragma omp task untied</ompts:check>
+ {
+ my_sleep(SLEEPTIME);
+ start_tid[myi] = omp_get_thread_num();
+
+ #pragma omp taskyield
+
+ if((start_tid[myi] %2) ==0){
+ my_sleep(SLEEPTIME);
+ current_tid[myi] = omp_get_thread_num();
+ } /*end of if*/
+ } /* end of omp task */
+ </ompts:orphan>
+ } /* end of for */
+ } /* end of single */
+ } /* end of parallel */
+
+ for (i=0;i<NUM_TASKS; i++)
+ {
+ //printf("start_tid[%d]=%d, current_tid[%d]=%d\n",i, start_tid[i], i , current_tid[i]);
+ if (current_tid[i] == start_tid[i])
+ count++;
+ }
+ return (count<NUM_TASKS);
+}
+</ompts:testcode>
+
+</ompts:test>
diff --git a/final/testsuite/c/omp_test_lock.c b/final/testsuite/c/omp_test_lock.c
new file mode 100644
index 0000000..e889dfb
--- /dev/null
+++ b/final/testsuite/c/omp_test_lock.c
@@ -0,0 +1,47 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_testlock function. The test counts the threads entering and exiting a single region which is build with a test_lock in an endless loop.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_test_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+omp_lock_t lck;
+
+int <ompts:testcode:functionname>omp_test_lock</ompts:testcode:functionname>(FILE * logFile)
+{
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_lock (&lck);
+
+#pragma omp parallel shared(lck)
+ {
+
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ /*omp_set_lock(&lck);*/
+ <ompts:orphan>
+ <ompts:check>while (!omp_test_lock (&lck))
+ {};</ompts:check>
+ </ompts:orphan>
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ <ompts:check>omp_unset_lock (&lck);</ompts:check>
+ }
+ }
+ omp_destroy_lock(&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_test_nest_lock.c b/final/testsuite/c/omp_test_nest_lock.c
new file mode 100644
index 0000000..a8d6a45
--- /dev/null
+++ b/final/testsuite/c/omp_test_nest_lock.c
@@ -0,0 +1,48 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_test_nest_lock function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_test_nest_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+#include <stdio.h>
+#include "omp_testsuite.h"
+
+
+static omp_nest_lock_t lck;
+
+int <ompts:testcode:functionname>omp_test_nest_lock</ompts:testcode:functionname>(FILE * logFile)
+{
+
+ int nr_threads_in_single = 0;
+ int result = 0;
+ int nr_iterations = 0;
+ int i;
+
+ omp_init_nest_lock (&lck);
+
+#pragma omp parallel shared(lck)
+ {
+
+#pragma omp for
+ for (i = 0; i < LOOPCOUNT; i++)
+ {
+ /*omp_set_lock(&lck);*/
+<ompts:orphan>
+ <ompts:check>while(!omp_test_nest_lock (&lck))
+ {};</ompts:check>
+</ompts:orphan>
+#pragma omp flush
+ nr_threads_in_single++;
+#pragma omp flush
+ nr_iterations++;
+ nr_threads_in_single--;
+ result = result + nr_threads_in_single;
+ <ompts:check>omp_unset_nest_lock (&lck);</ompts:check>
+ }
+ }
+ omp_destroy_nest_lock (&lck);
+
+ return ((result == 0) && (nr_iterations == LOOPCOUNT));
+}
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_threadprivate.c b/final/testsuite/c/omp_threadprivate.c
new file mode 100644
index 0000000..8e4d7aa
--- /dev/null
+++ b/final/testsuite/c/omp_threadprivate.c
@@ -0,0 +1,97 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp threadprivate directive by filling an array with random numbers in an parallelised region. Each thread generates one number of the array and saves this in a temporary threadprivate variable. In a second parallelised region the test controls, that the temporary variable contains still the former value by comparing it with the one in the array.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp threadprivate</ompts:directive>
+<ompts:dependences>omp critical,omp_set_dynamic,omp_get_num_threads</ompts:dependences>
+<ompts:testcode>
+/*
+ * Threadprivate is tested in 2 ways:
+ * 1. The global variable declared as threadprivate should have
+ * local copy for each thread. Otherwise race condition and
+ * wrong result.
+ * 2. If the value of local copy is retained for the two adjacent
+ * parallel regions
+ */
+#include "omp_testsuite.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+static int sum0=0;
+static int myvalue = 0;
+
+<ompts:check>#pragma omp threadprivate(sum0)</ompts:check>
+<ompts:check>#pragma omp threadprivate(myvalue)</ompts:check>
+
+
+int <ompts:testcode:functionname>omp_threadprivate</ompts:testcode:functionname>(FILE * logFile)
+{
+ int sum = 0;
+ int known_sum;
+ int i;
+ int iter;
+ int *data;
+ int size;
+ int failed = 0;
+ int my_random;
+ omp_set_dynamic(0);
+
+ #pragma omp parallel private(i)
+ {
+ sum0 = 0;
+ #pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum0 + i;
+ } /*end of for*/
+ #pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ } /* end of parallel */
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ if (known_sum != sum ) {
+ fprintf (logFile, " known_sum = %d, sum = %d\n", known_sum, sum);
+ }
+
+ /* the next parallel region is just used to get the number of threads*/
+ omp_set_dynamic(0);
+ #pragma omp parallel
+ {
+ #pragma omp master
+ {
+ size=omp_get_num_threads();
+ data=(int*) malloc(size*sizeof(int));
+ }
+ }/* end parallel*/
+
+
+ srand(45);
+ for (iter = 0; iter < 100; iter++){
+ my_random = rand(); /* random number generator is called inside serial region*/
+
+ /* the first parallel region is used to initialiye myvalue and the array with my_random+rank*/
+ #pragma omp parallel
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ myvalue = data[rank] = my_random + rank;
+ }
+
+ /* the second parallel region verifies that the value of "myvalue" is retained */
+ #pragma omp parallel reduction(+:failed)
+ {
+ int rank;
+ rank = omp_get_thread_num ();
+ failed = failed + (myvalue != data[rank]);
+ if(myvalue != data[rank]){
+ fprintf (logFile, " myvalue = %d, data[rank]= %d\n", myvalue, data[rank]);
+ }
+ }
+ }
+ free (data);
+
+ return (known_sum == sum) && !failed;
+
+} /* end of check_threadprivate*/
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/c/omp_threadprivate_for.c b/final/testsuite/c/omp_threadprivate_for.c
new file mode 100644
index 0000000..034359d
--- /dev/null
+++ b/final/testsuite/c/omp_threadprivate_for.c
@@ -0,0 +1,44 @@
+<ompts:test>
+<ompts:testdescription>Test which checks if a variable declared as threadprivate can be used as a loopindex.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp threadprivate</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+#include "omp_testsuite.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+static int i;
+<ompts:check>#pragma omp threadprivate(i)</ompts:check>
+
+int <ompts:testcode:functionname>omp_threadprivate_for</ompts:testcode:functionname>(FILE * logFile)
+{
+ int known_sum;
+ int sum;
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
+ sum = 0;
+
+#pragma omp parallel
+ {
+ int sum0 = 0;
+#pragma omp for
+ for (i = 1; i <= LOOPCOUNT; i++)
+ {
+ sum0 = sum0 + i;
+ } /*end of for*/
+#pragma omp critical
+ {
+ sum = sum + sum0;
+ } /*end of critical */
+ } /* end of parallel */
+
+ if (known_sum != sum ) {
+ fprintf (logFile, " known_sum = %d, sum = %d\n", known_sum, sum);
+ }
+
+ return (known_sum == sum);
+
+} /* end of check_threadprivate*/
+</ompts:testcode>
+</ompts:test>
+
diff --git a/final/testsuite/common_utility.f b/final/testsuite/common_utility.f
new file mode 100644
index 0000000..f6d1078
--- /dev/null
+++ b/final/testsuite/common_utility.f
@@ -0,0 +1,57 @@
+ subroutine print_result(s,crossfailed,M,name)
+ implicit none
+ character (len=*)::name
+ real cert
+ integer M,crossfailed
+ integer s
+ character (len=11) :: c
+ character (len=18) :: c2
+ cert=100.0*crossfailed/M
+! print *, "cert", cert, "cross ", crossfailed
+! test1=hundred*crossfailed
+ c="% certainty"
+ c2=" ... verified with "
+ if(s.eq.1) then
+ write (*,"(A, A, F7.2, A)") name, c2, cert, c
+ else
+ write (*,"(A,A)") name," ... FAILED"
+ endif
+ end
+
+ subroutine do_test(test_func,cross_test_func,name,N,failed,
+ x num_tests,crosschecked)
+ implicit none
+ integer succeed
+ integer crossfail
+ integer failed
+ integer, external::test_func
+ integer, external::cross_test_func
+ character (len=*)::name
+ integer fail
+ integer N,i
+ integer num_tests,crosschecked
+ num_tests=num_tests+1
+ succeed=1
+ crossfail=0
+ fail=0
+ do i=1,N
+ if(test_func().eq.0) then
+ succeed=0
+ fail=fail+1
+ exit
+ end if
+ if(cross_test_func().eq.0) then
+! print *, crossfail
+ crossfail=crossfail+1.0
+ end if
+ enddo
+
+ if (fail .ne. 0) then
+ failed=failed+1
+ else
+ if(crossfail .ne. 0) then
+ crosschecked=crosschecked+1
+ end if
+ endif
+ call print_result(succeed,crossfail,N,name)
+ end
diff --git a/final/testsuite/fortran/OMP1_TEST b/final/testsuite/fortran/OMP1_TEST
new file mode 100644
index 0000000..a164ce0
--- /dev/null
+++ b/final/testsuite/fortran/OMP1_TEST
@@ -0,0 +1,36 @@
+has_openmp
+omp_nested
+omp_get_num_threads
+omp_in_parallel
+do_ordered
+do_reduction
+do_private
+do_firstprivate
+do_lastprivate
+section_reduction
+section_private
+section_firstprivate
+section_lastprivate
+single
+single_private
+single_nowait
+par_do_ordered
+par_do_reduction
+par_do_private
+par_do_firstprivate
+par_do_lastprivate
+par_section_reduction
+par_section_private
+par_section_firstprivate
+par_section_lastprivate
+omp_master_thread
+omp_critical
+omp_atomic
+omp_barrier
+omp_flush
+omp_threadprivate
+omp_copyin
+omp_lock
+omp_testlock
+omp_nest_lock
+omp_nest_testlock
diff --git a/final/testsuite/fortran/OMP2_TEST b/final/testsuite/fortran/OMP2_TEST
new file mode 100644
index 0000000..2e47665
--- /dev/null
+++ b/final/testsuite/fortran/OMP2_TEST
@@ -0,0 +1,5 @@
+omp_num_threads
+omp_workshare
+omp_time
+omp_ticks_time
+single_copyprivate
diff --git a/final/testsuite/fortran/common_utility.f b/final/testsuite/fortran/common_utility.f
new file mode 100644
index 0000000..f6d1078
--- /dev/null
+++ b/final/testsuite/fortran/common_utility.f
@@ -0,0 +1,57 @@
+ subroutine print_result(s,crossfailed,M,name)
+ implicit none
+ character (len=*)::name
+ real cert
+ integer M,crossfailed
+ integer s
+ character (len=11) :: c
+ character (len=18) :: c2
+ cert=100.0*crossfailed/M
+! print *, "cert", cert, "cross ", crossfailed
+! test1=hundred*crossfailed
+ c="% certainty"
+ c2=" ... verified with "
+ if(s.eq.1) then
+ write (*,"(A, A, F7.2, A)") name, c2, cert, c
+ else
+ write (*,"(A,A)") name," ... FAILED"
+ endif
+ end
+
+ subroutine do_test(test_func,cross_test_func,name,N,failed,
+ x num_tests,crosschecked)
+ implicit none
+ integer succeed
+ integer crossfail
+ integer failed
+ integer, external::test_func
+ integer, external::cross_test_func
+ character (len=*)::name
+ integer fail
+ integer N,i
+ integer num_tests,crosschecked
+ num_tests=num_tests+1
+ succeed=1
+ crossfail=0
+ fail=0
+ do i=1,N
+ if(test_func().eq.0) then
+ succeed=0
+ fail=fail+1
+ exit
+ end if
+ if(cross_test_func().eq.0) then
+! print *, crossfail
+ crossfail=crossfail+1.0
+ end if
+ enddo
+
+ if (fail .ne. 0) then
+ failed=failed+1
+ else
+ if(crossfail .ne. 0) then
+ crosschecked=crosschecked+1
+ end if
+ endif
+ call print_result(succeed,crossfail,N,name)
+ end
diff --git a/final/testsuite/fortran/do_collapse.f b/final/testsuite/fortran/do_collapse.f
new file mode 100644
index 0000000..1817250
--- /dev/null
+++ b/final/testsuite/fortran/do_collapse.f
@@ -0,0 +1,67 @@
+<ompts:test>
+<ompts:testdescription>Test with omp for collapse clause. Bind with two loops. Without the collapse clause, the first loop will not be ordered</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp do collapse</ompts:directive>
+<ompts:dependences>omp critical,omp do schedule</ompts:dependences>
+<ompts:testcode>
+ LOGICAL FUNCTION check_is_larger(i)
+ implicit none
+ INTEGER :: i
+ INTEGER, save :: last_i
+ LOGICAL :: is_larger
+
+ if (i .eq. 1) last_i = 0
+
+ is_larger = (i .ge. last_i) .and. ((i-last_i) .le. 1)
+ last_i = i
+
+ check_is_larger = is_larger
+
+ END FUNCTION check_is_larger
+
+ INTEGER FUNCTION <ompts:testcode:functionname>do_collapse</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER i, j
+<ompts:orphan:vars>
+ LOGICAL check_is_larger
+ LOGICAL my_is_larger
+ LOGICAL is_larger
+ COMMON /orphvars/ is_larger
+</ompts:orphan:vars>
+
+ INCLUDE "omp_testsuite.f"
+
+ is_larger = .true.
+
+!$omp parallel private(my_is_larger)
+<ompts:orphan>
+ my_is_larger = .true.
+!$omp do private(i,j) schedule(static,1) <ompts:check>collapse(2)</ompts:check>
+!$omp+ ordered
+ DO i=1,100
+ <ompts:crosscheck>
+ my_is_larger = check_is_larger(i) .and. my_is_larger
+ </ompts:crosscheck>
+ DO j=1,00
+ <ompts:check>
+!$omp ordered
+ my_is_larger = check_is_larger(i) .and. my_is_larger
+!$omp end ordered
+ </ompts:check>
+ END DO
+ END DO
+!$omp end do
+!$omp critical
+ is_larger = is_larger .and. my_is_larger
+!$omp end critical
+</ompts:orphan>
+!$omp end parallel
+
+ if (is_larger) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_firstprivate.f b/final/testsuite/fortran/do_firstprivate.f
new file mode 100644
index 0000000..0792361
--- /dev/null
+++ b/final/testsuite/fortran/do_firstprivate.f
@@ -0,0 +1,56 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp do firstprivate clause by counting up a variable in a parallelized loop. Each thread has a firstprivate variable (1) and an variable (2) declared by do firstprivate. First it stores the result of its last iteration in variable (2). Then it stores the value of the variable (2) in its firstprivate variable (1). At the end all firstprivate variables (1) are added to a total sum in a critical section and compared with the correct result.</ompts:testdescription>
+<ompts:version>2.0</ompts:version>
+<ompts:directive>omp do firstprivate</ompts:directive>
+<ompts:dependences>omp parallel private, omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>do_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, known_sum
+ INTEGER numthreads
+ INTEGER omp_get_num_threads
+<ompts:orphan:vars>
+ INTEGER sum0, sum1, i
+ COMMON /orphvars/ sum0, sum1, i
+</ompts:orphan:vars>
+
+ INCLUDE "omp_testsuite.f"
+
+ sum = 0
+ sum0 = 12345
+ sum1 = 0
+
+
+!$omp parallel firstprivate(sum1)
+!$omp single
+ numthreads = omp_get_num_threads()
+!$omp end single
+
+
+<ompts:orphan>
+!$omp do <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private (sum0)</ompts:crosscheck>
+ DO i=1,LOOPCOUNT
+ sum0 = sum0 + i
+ sum1 = sum0
+ END DO
+!$omp end do
+</ompts:orphan>
+
+
+!$omp critical
+ WRITE (1,*) sum0
+ sum = sum + sum1
+!$omp end critical
+!$omp end parallel
+
+
+ known_sum=12345*numthreads+ (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ WRITE (1,*) "Found sum was", sum, "instead of", known_sum
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_lastprivate.f b/final/testsuite/fortran/do_lastprivate.f
new file mode 100644
index 0000000..4202e50
--- /dev/null
+++ b/final/testsuite/fortran/do_lastprivate.f
@@ -0,0 +1,39 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp do lastprivate clause by counting up a variable in a parallelized loop. Each thread saves the next summand in a lastprivate variable i0. At the end i0 is compared to the value of the expected last summand.</ompts:testdescription>
+<ompts:version>2.0</ompts:version>
+<ompts:directive>omp do private</ompts:directive>
+<ompts:dependences>omp parallel firstprivate, omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>do_lastprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum,known_sum
+<ompts:orphan:vars>
+ INTEGER sum0,i0,i
+ COMMON /orphvars/ sum0,i0,i
+</ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+ sum = 0
+ sum0 = 0
+ i0 = -1
+!$omp parallel firstprivate(sum0)
+<ompts:orphan>
+!$omp do schedule(static,7) <ompts:check>lastprivate(i0)</ompts:check>
+ DO i=1, LOOPCOUNT
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+<ompts:check>!$omp end do</ompts:check>
+</ompts:orphan>
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( known_sum .EQ. sum .AND. i0 .EQ. LOOPCOUNT ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_ordered.f b/final/testsuite/fortran/do_ordered.f
new file mode 100644
index 0000000..b087f81
--- /dev/null
+++ b/final/testsuite/fortran/do_ordered.f
@@ -0,0 +1,73 @@
+<ompts:test>
+<ompts:directive>do ordered</ompts:directive>
+<ompts:version>2.0</ompts:version>
+<ompts:dependences>parallel private, critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION i_islarger(i)
+ IMPLICIT NONE
+ INTEGER i, islarger
+ INTEGER last_i
+ COMMON /mycom/ last_i
+ IF ( i .GT. last_i) THEN
+ islarger = 1
+ ELSE
+ islarger = 0
+ END If
+ last_i = i
+ i_islarger = islarger
+ END
+
+ INTEGER FUNCTION <ompts:testcode:functionname>do_ordered</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER known_sum, is_larger
+ INTEGER last_i
+ INTEGER i_islarger
+ COMMON /mycom/ last_i
+
+<ompts:orphan:parms> i </ompts:orphan:parms>
+
+<ompts:orphan:vars>
+ INTEGER sum, i, my_islarger
+ COMMON /orphvars/ my_islarger, sum
+</ompts:orphan:vars>
+
+ sum = 0
+ is_larger = 1
+ last_i = 0
+!$omp parallel private(my_islarger)
+ my_islarger = 1
+!$omp do schedule(static,1) ordered
+ DO i=1, 99
+<ompts:orphan>
+<ompts:check>
+!$omp ordered
+</ompts:check>
+ IF (i_islarger(i) .EQ. 1 .AND. my_islarger .EQ. 1) THEN
+ my_islarger = 1
+ ELSE
+ my_islarger = 0
+ END IF
+ sum = sum + i
+<ompts:check>
+!$omp end ordered
+</ompts:check>
+</ompts:orphan>
+ END DO
+!$omp end do
+!$omp critical
+ IF (is_larger .EQ. 1 .AND. my_islarger .EQ. 1 ) THEN
+ is_larger = 1
+ ELSE
+ is_larger = 0
+ END IF
+!$omp end critical
+!$omp end parallel
+ known_sum = (99*100)/2
+ IF ( known_sum .EQ. sum .AND. is_larger .EQ. 1) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_private.f b/final/testsuite/fortran/do_private.f
new file mode 100644
index 0000000..2e587cf
--- /dev/null
+++ b/final/testsuite/fortran/do_private.f
@@ -0,0 +1,67 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp do private clause by counting up a variable in a parallelized loop. Each thread has a private variable (1) and an variable (2) declared by for private. First it stores the result of its last iteration in variable (2). Then this thread waits some time before it stores the value of the variable (2) in its private variable (1). At the beginning of the next iteration the value of (1) is assigned to (2). At the end all private variables (1) are added to a total sum in a critical section and compared with the correct result.</ompts:testdescription>
+<ompts:version>2.0</ompts:version>
+<ompts:directive>omp do private</ompts:directive>
+<ompts:dependences>omp parallel private, omp flush, omp critical</ompts:dependences>
+<ompts:testcode>
+ SUBROUTINE do_some_work()
+ IMPLICIT NONE
+ INTEGER i
+ INTRINSIC sqrt
+ DOUBLE PRECISION sum
+
+ INCLUDE "omp_testsuite.f"
+ sum=0.0
+ DO i=0, LOOPCOUNT-1
+ sum = sum + sqrt(REAL(i))
+ ENDDO
+
+ END
+
+ INTEGER FUNCTION <ompts:testcode:functionname>do_private</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, known_sum
+<ompts:orphan:vars>
+ INTEGER sum0, sum1, i
+ COMMON /orphvars/ sum0, sum1, i
+</ompts:orphan:vars>
+
+ INCLUDE "omp_testsuite.f"
+
+ sum = 0
+ sum0 = 0
+ sum1 = 0
+
+!$omp parallel private(sum1)
+ sum0 = 0
+ sum1 = 0
+
+<ompts:orphan>
+!$omp do <ompts:check>private(sum0)</ompts:check> schedule(static,1)
+ DO i=1, LOOPCOUNT
+ sum0 = sum1
+!$omp flush
+ sum0 = sum0 + i
+ CALL do_some_work()
+!$omp flush
+! print *, sum0
+ sum1 = sum0
+ END DO
+!$omp end do
+</ompts:orphan>
+
+!$omp critical
+ sum = sum + sum1
+!$omp end critical
+!$omp end parallel
+
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+! print *, "sum:", sum, "known_sum", known_sum
+ IF ( known_sum .EQ. sum) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_reduction.f b/final/testsuite/fortran/do_reduction.f
new file mode 100644
index 0000000..2b25a45
--- /dev/null
+++ b/final/testsuite/fortran/do_reduction.f
@@ -0,0 +1,514 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp do reduction directive wich all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp do reduction</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>do_reduction</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum2, known_sum
+ INTEGER known_product
+ DOUBLE PRECISION rounding_error, dpt
+ INTEGER double_DIGITS
+ DOUBLE PRECISION dknown_sum
+ INTEGER result
+ INCLUDE "omp_testsuite.f"
+ PARAMETER (known_product=3628800)
+ PARAMETER (rounding_error=1.E-6)
+<ompts:orphan:vars>
+ INTEGER sum,diff,product,i
+ DOUBLE PRECISION dsum,ddiff,dt
+ LOGICAL logic_and, logic_or, logic_eqv,logic_neqv
+ LOGICAL logics(LOOPCOUNT)
+ INTEGER bit_and, bit_or
+ INTEGER exclusiv_bit_or
+ INTEGER min_value, max_value
+ INTEGER int_array(LOOPCOUNT)
+ DOUBLE PRECISION d_array(LOOPCOUNT)
+ DOUBLE PRECISION dmin, dmax
+ COMMON /orphvars/ sum,product,diff,i,dsum,ddiff,dt,logic_and,
+ & logic_or,logic_eqv,logic_neqv,logics,bit_and,bit_or,int_array,
+ & exclusiv_bit_or,min_value,dmin,dmax,d_array,max_value
+ INTEGER MAX_FACTOR
+ PARAMETER (double_DIGITS=20,MAX_FACTOR=10)
+</ompts:orphan:vars>
+
+ dt = 1./3.
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+ product = 1
+ sum2 = 0
+ sum = 0
+ dsum = 0.
+ result =0
+ logic_and = .true.
+ logic_or = .false.
+ bit_and = 1
+ bit_or = 0
+ exclusiv_bit_or = 0
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic, 1) <ompts:check>reduction(+:sum)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ sum = sum + i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (known_sum .NE. sum) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with integers: Result was ",
+ & sum,"instead of ", known_sum
+ END IF
+
+
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic, 1) <ompts:check>reduction (-: diff)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ diff = diff - i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( diff .NE. 0 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in difference with integers: Result was ",
+ & sum,"instead of 0."
+ END IF
+
+!... Test for doubles
+ dsum =0.
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt= dpt * dt
+ END DO
+ dknown_sum = (1-dpt)/(1-dt)
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(+:dsum)</ompts:check>
+ DO i=0,DOUBLE_DIGITS-1
+ dsum = dsum + dt**i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+
+ IF(dsum .NE. dknown_sum .AND.
+ & ABS(dsum - dknown_sum) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with doubles: Result was ",
+ & dsum,"instead of ",dknown_sum,"(Difference: ",
+ & dsum - dknown_sum,")"
+ END IF
+ dpt = 1
+
+
+
+ DO i=1, DOUBLE_DIGITS
+ dpt = dpt*dt
+ END DO
+ ddiff = ( 1-dpt)/(1-dt)
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(-:ddiff)</ompts:check>
+ DO i=0, DOUBLE_DIGITS-1
+ ddiff = ddiff - dt**i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( ABS(ddiff) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Difference with doubles: Result was ",
+ & ddiff,"instead of 0.0"
+ END IF
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(*:product)</ompts:check>
+ DO i=1,MAX_FACTOR
+ product = product * i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (known_product .NE. product) THEN
+ result = result + 1
+ write(1,*) "Error in Product with integers: Result was ",
+ & product," instead of",known_product
+ END IF
+
+ DO i=1,LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (.NOT. logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND part 1"
+ END IF
+
+
+ logic_and = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND pass 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_or) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 1"
+ END IF
+
+ logic_or = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( .NOT. logic_or ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 2"
+ END IF
+
+!... Test logic EQV, unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+ logic_eqv = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (.NOT. logic_eqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 1"
+ END IF
+
+ logic_eqv = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( logic_eqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 2"
+ END IF
+
+!... Test logic NEQV, which is unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+ logic_neqv = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.NEQV.:logic_neqv)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_neqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 1"
+ END IF
+
+ logic_neqv = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(.neqv.:logic_neqv)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( .NOT. logic_neqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 1
+ END DO
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IAND:bit_and)</ompts:check>
+ DO i=1, LOOPCOUNT
+!... iand(I,J): Returns value resulting from boolean AND of
+!... pair of bits in each of I and J.
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_and .LT. 1 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 1"
+ END IF
+
+ bit_and = 1
+ int_array(LOOPCOUNT/2) = 0
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IAND:bit_and)</ompts:check>
+ DO i=1, LOOPCOUNT
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF( bit_and .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IOR:bit_or)</ompts:check>
+ DO i=1, LOOPCOUNT
+!... Ior(I,J): Returns value resulting from boolean OR of
+!... pair of bits in each of I and J.
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 1"
+ END IF
+
+
+ bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IOR:bit_or)</ompts:check>
+ DO i=1, LOOPCOUNT
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( exclusiv_bit_or .ge. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 1"
+ END IF
+
+ exclusiv_bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( exclusiv_bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 2"
+ END IF
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = 10 - i
+ END DO
+
+ min_value = 65535
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(MIN:min_value)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ min_value = MIN(min_value,int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( min_value .GT. (10-LOOPCOUNT) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = i
+ END DO
+
+ max_value = -32768
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(MAX:max_value)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ max_value = MAX(max_value,int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( max_value .LT. LOOPCOUNT )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MAX"
+ END IF
+
+!... test double min, max
+ DO i=1,LOOPCOUNT
+ d_array(i) = 10 - i*dt
+ END DO
+
+ dmin = 2**10
+ dt = 0.5
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(MIN:dmin)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( dmin .GT. (10-dt) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ d_array(i) = i * dt
+ END DO
+
+ dmax= - (2**10)
+
+!$omp parallel
+<ompts:orphan>
+!$omp do schedule(dynamic,1) <ompts:check>reduction(MAX:dmax)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ dmax= MAX(dmax,d_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( dmax .LT. LOOPCOUNT*dt )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MAX"
+ END IF
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_schedule_dynamic.f b/final/testsuite/fortran/do_schedule_dynamic.f
new file mode 100644
index 0000000..18f8ba7
--- /dev/null
+++ b/final/testsuite/fortran/do_schedule_dynamic.f
@@ -0,0 +1,90 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the dynamic option of the omp do schedule directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp do schedule(dynamic)</ompts:directive>
+<ompts:dependences>omp flush,omp do nowait,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+
+
+ INTEGER FUNCTION <ompts:testcode:functionname>do_schedule_dynamic</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ CHARACTER*30 logfile
+ INTEGER omp_get_thread_num,omp_get_num_threads
+ INTEGER threads
+ INTEGER count, tmp_count
+ INTEGER,ALLOCATABLE:: tmp(:)
+ INTEGER ii
+ INTEGER result
+
+<ompts:orphan:vars>
+ INTEGER CFDMAX_SIZE
+ PARAMETER (CFDMAX_SIZE = 1000)
+ INTEGER i,tids(0:CFDMAX_SIZE-1),tid,chunk_size
+ COMMON /orphvars/ i,tids,tid,chunk_size
+</ompts:orphan:vars>
+
+ chunk_size = 7
+ count = 0
+ tmp_count = 0
+ result = 0
+ ii = 0
+
+!$omp parallel private(tid)
+ tid = omp_get_thread_num()
+<ompts:orphan>
+!$omp do <ompts:check>schedule(dynamic,chunk_size)</ompts:check>
+ DO i=0, CFDMAX_SIZE-1
+ tids(i) = tid
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ DO i=0, CFDMAX_SIZE - 2
+ IF ( tids(i) .ne. tids(i+1) ) THEN
+ count = count + 1
+ END IF
+ END DO
+
+ ALLOCATE( tmp(0:count) )
+ tmp(0) = 1
+
+ DO i = 0, CFDMAX_SIZE - 2
+ IF ( tmp_count .GT. count ) THEN
+ WRITE(*,*) "--------------------"
+ WRITE(*,*) "Testinternal Error: List too small!!!"
+ WRITE(*,*) "--------------------"
+ GOTO 10
+ END If
+ IF ( tids(i) .NE. tids(i+1) ) then
+ tmp_count = tmp_count + 1
+ tmp(tmp_count) = 1
+ ELSE
+ tmp(tmp_count) = tmp(tmp_count) +1
+ END IF
+ END DO
+
+!... is dynamic statement working?
+
+ 10 DO i=0, count -1
+ IF ( MOD(tmp(i),chunk_size) .ne. 0 ) THEN
+! ... it is possible for 2 adjacent chunks assigned to a same thread
+ result = result + 1
+ WRITE(1,*) "The intermediate dispatch has wrong chunksize."
+ END IF
+ END DO
+
+ IF ( MOD(tmp(count), chunk_size) .NE.
+ & MOD (CFDMAX_SIZE, chunk_size) ) THEN
+ result = result + 1
+ WRITE(1,*) "the last dispatch has wrong chunksize."
+ END IF
+
+ IF ( result .eq. 0) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/do_schedule_guided.f b/final/testsuite/fortran/do_schedule_guided.f
new file mode 100644
index 0000000..5d0e7ed
--- /dev/null
+++ b/final/testsuite/fortran/do_schedule_guided.f
@@ -0,0 +1,174 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the guided option of the omp do schedule directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp do schedule(guided)</ompts:directive>
+<ompts:dependences>omp flush,omp do nowait,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+ ! TODO:
+ ! C. Niethammer:
+ ! Find check to decide if the test was run as schedule(static) because
+ ! this also can pass the test if the work is divided into thread-counts
+ INTEGER FUNCTION <ompts:testcode:functionname>do_schedule_guided</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_thread_num,omp_get_num_threads
+ CHARACTER*20 logfile
+ INTEGER threads
+ INTEGER tmp_count
+ INTEGER, allocatable :: tmp(:)
+ INTEGER ii, flag
+ INTEGER result
+ INTEGER expected
+ INTEGER openwork
+ DOUBLE PRECISION c
+
+ <ompts:orphan:vars>
+ INTEGER i
+ INTEGER tid
+ INTEGER count
+
+ INTEGER DELAY
+ INTEGER MAX_TIME
+ INTEGER CFSMAX_SIZE
+
+! ... choose small iteration space for small sync. overhead
+ PARAMETER (DELAY = 1)
+ PARAMETER (MAX_TIME = 5)
+ PARAMETER (CFSMAX_SIZE = 150)
+
+ INTEGER notout
+ INTEGER maxiter
+ INTEGER tids(0:CFSMAX_SIZE-1)
+
+ COMMON /orphvars/ notout,maxiter,tids
+ </ompts:orphan:vars>
+
+ result = 0
+ notout = 1
+ maxiter = 0
+ count = 0
+ tmp_count = 0
+ openwork = CFSMAX_SIZE
+<ompts:check>
+
+! Determine the number of available threads
+!$omp parallel
+!$omp single
+ threads = omp_get_num_threads()
+!$omp end single
+!$omp end parallel
+ IF ( threads .LT. 2) THEN
+ PRINT *,"This test only works with at least two threads"
+ WRITE(1,*) "This test only works with at least two threads"
+ <testfunctionname></testfunctionname> = 0
+ STOP
+ END IF
+
+! ... Now the real parallel work:
+! ... Each thread will start immediately with the first chunk.
+
+!$omp parallel private(tid,count) shared(tids,maxiter)
+ tid = omp_get_thread_num()
+ <ompts:orphan>
+!$omp do schedule(guided)
+ DO i = 0 , CFSMAX_SIZE-1
+ count = 0
+!$omp flush(maxiter)
+ IF ( i .GT. maxiter ) THEN
+!$omp critical
+ maxiter = i
+!$omp end critical
+ END IF
+
+!.. if it is not our turn we wait
+! a) until another thread executed an iteration
+! with a higher iteration count
+! b) we are at the end of the loop (first thread finished
+! and set notout=0 OR
+! c) timeout arrived
+
+!$omp flush(maxiter,notout)
+ IF ( notout .GE. 1 .AND. count .LT. MAX_TIME
+ & .AND. maxiter .EQ. i ) THEN
+ DO WHILE ( notout .GE. 1 .AND. count .LT. MAX_TIME
+ & .AND. maxiter .EQ. i )
+ CALL sleep(DELAY)
+ count = count + DELAY
+ END DO
+ END IF
+ tids(i) = tid
+ END DO
+!$omp end do nowait
+ </ompts:orphan>
+
+ notout = 0
+!$omp flush(notout)
+
+!$omp end parallel
+
+!*******************************************************!
+! evaluation of the values
+!*******************************************************!
+ count = 0
+
+ DO i=0, CFSMAX_SIZE - 2
+ IF ( tids(i) .NE. tids(i+1) ) THEN
+ count = count + 1
+ END IF
+ END DO
+
+ ALLOCATE( tmp(0:count) )
+ tmp_count = 0
+ tmp(0) = 1
+! ... calculate the chunksize for each dispatch
+
+ DO i=0, CFSMAX_SIZE - 2
+ IF ( tids(i) .EQ. tids(i+1) ) THEN
+ tmp(tmp_count) = tmp(tmp_count) + 1
+ ELSE
+ tmp_count = tmp_count + 1
+ tmp(tmp_count) = 1
+ END IF
+ END DO
+
+! ... Check if chunk sizes are decreased until equals to
+! ... the specified one, ignore the last dispatch
+! ... for possible smaller remainder
+
+! Determine the constant
+ expected = openwork / threads
+ c = real(tmp(0)) / real(expected)
+ WRITE(1,*) "Found constant to be ", c
+
+ DO i = 0, count - 2
+ WRITE(1,*) "open:", openwork, "size:", tmp(i)
+ IF (expected .GT. 1) THEN
+ expected = c * openwork / threads
+ END IF
+
+ IF (abs(tmp(i) - expected) .GE. 2 ) THEN
+ result = 1
+ WRITE(1,*) "Chunksize differed from expected ",
+ & "value: ",tmp(i), "instead ", expected
+ END IF
+
+ IF (i .GT. 0 .AND. (tmp(i-1) - tmp(i)) .LT. 0) THEN
+ WRITE(1,*) "Chunksize did not decrease: ", tmp(i),
+ & "instead",tmp(i-1)
+ END IF
+
+ openwork = openwork - tmp(i)
+ END DO
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:check>
+<ompts:crosscheck>
+ <testfunctionname></testfunctionname> = 0
+ END
+</ompts:crosscheck>
+</ompts:testcode>
+</omtps:test>
diff --git a/final/testsuite/fortran/do_schedule_static.f b/final/testsuite/fortran/do_schedule_static.f
new file mode 100644
index 0000000..7ab02f8
--- /dev/null
+++ b/final/testsuite/fortran/do_schedule_static.f
@@ -0,0 +1,70 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the static option of the omp do schedule directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp do schedule(static)</ompts:directive>
+<ompts:dependences>omp do nowait,omp flush,omp critical,omp single</ompts:dependences>
+<ompts:testcode>
+
+ INTEGER FUNCTION <ompts:testcode:functionname>do_schedule_static</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_thread_num,omp_get_num_threads
+ CHARACTER*30 logfile
+ INTEGER threads
+ INTEGER count
+ INTEGER ii
+ INTEGER result
+<ompts:orphan:vars>
+ INTEGER CFSMAX_SIZE
+ PARAMETER (CFSMAX_SIZE = 1000)
+ INTEGER i,tids(0:CFSMAX_SIZE-1), tid, chunk_size
+ COMMON /orphvars/ i,tid,tids,chunk_size
+</ompts:orphan:vars>
+
+ chunk_size = 7
+ result = 0
+ ii = 0
+
+!$omp parallel
+!$omp single
+ threads = omp_get_num_threads()
+!$omp end single
+!$omp end parallel
+
+ IF ( threads .LT. 2) THEN
+ PRINT *,"This test only works with at least two threads"
+ WRITE(1,*) "This test only works with at least two threads"
+ <testfunctionname></testfunctionname> = 0
+ STOP
+ ELSE
+ WRITE(1,*) "Using an internal count of ",CFSMAX_SIZE
+ WRITE(1,*) "Using a specified chunksize of ",chunk_size
+
+!$omp parallel private(tid) shared(tids)
+ tid = omp_get_thread_num()
+<ompts:orphan>
+!$omp do <ompts:check>schedule(static,chunk_size)</ompts:check>
+ DO i = 0 ,CFSMAX_SIZE -1
+ tids(i) = tid
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ DO i = 0, CFSMAX_SIZE-1
+!... round-robin for static chunk
+ ii = mod( i/chunk_size,threads)
+ IF (tids(i) .NE. ii ) THEN
+ result = result + 1
+ WRITE(1,*)"Iteration ",i,"should be assigned to ",
+ & ii,"instead of ",tids(i)
+ END IF
+ END DO
+ IF ( result .EQ. 0 )THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/has_openmp.f b/final/testsuite/fortran/has_openmp.f
new file mode 100644
index 0000000..5585ef2
--- /dev/null
+++ b/final/testsuite/fortran/has_openmp.f
@@ -0,0 +1,25 @@
+<ompts:test>
+<ompts:version>2.0</ompts:version>
+<ompts:testdescription>Testing if the conditional compilation is supported or not.
+Yi Wen at 05032004: Do we want to write two versions of has_omp? both C23456789
+and #ifdef formats are supposed to work. At least Sun's compiler cannot deal with
+the second format (#ifdef)</ompts:testdescription>
+
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>has_openmp</ompts:testcode:functionname>()
+ <testfunctionname></testfunctionname> = 0
+
+<ompts:check>
+!version 1.
+!C23456789
+!$ <testfunctionname></testfunctionname> = 1
+
+! version 2.
+!#ifdef _OPENMP
+ <testfunctionname></testfunctionname> = 1
+!#endif
+</ompts:check>
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_atomic.f b/final/testsuite/fortran/omp_atomic.f
new file mode 100644
index 0000000..ee74450
--- /dev/null
+++ b/final/testsuite/fortran/omp_atomic.f
@@ -0,0 +1,588 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp atomic directive by counting up a variable in a parallelized loop with an atomic directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp atomic</ompts:directive>
+<ompts:testcode>
+!********************************************************************
+! Functions: omp_atomic
+! change "character*20" into "character (LEN=20)::"
+! get rid of the "tab" key by Zhenying Liu, on Oct. 16, 2005.
+!********************************************************************
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_atomic</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ INTEGER sum2, known_sum
+ INTEGER known_product, int_const
+ DOUBLE PRECISION rounding_error, dpt
+ INTEGER double_DIGITS
+ DOUBLE PRECISION dknown_sum
+ INTEGER result
+ PARAMETER (int_const=10,known_product=3628800)
+ PARAMETER (rounding_error=1.E-2)
+<ompts:orphan:vars>
+ INTEGER sum,i,diff,product
+ DOUBLE PRECISION dsum,dt,ddiff
+ LOGICAL logic_and, logic_or, logic_eqv,logic_neqv
+ INTEGER bit_and, bit_or
+ INTEGER exclusiv_bit_or
+ INTEGER min_value, max_value
+ DOUBLE PRECISION dmin, dmax
+ LOGICAL logics(LOOPCOUNT)
+ INTEGER int_array(LOOPCOUNT)
+ DOUBLE PRECISION d_array(LOOPCOUNT)
+ COMMON /orphvars/ sum,product,diff,i,dsum,ddiff,dt,logic_and,
+ & logic_or,logic_eqv,logic_neqv,logics,bit_and,bit_or,int_array,
+ & exclusiv_bit_or,min_value,dmin,dmax,d_array,max_value
+ INTEGER MAX_FACTOR
+ PARAMETER (double_DIGITS=20,MAX_FACTOR=10)
+</ompts:orphan:vars>
+
+ dt = 1./3.
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+ product = 1
+ sum2 = 0
+ sum = 0
+ dsum = 0.
+ result =0
+ logic_and = .true.
+ logic_or = .false.
+ bit_and = 1
+ bit_or = 0
+ exclusiv_bit_or = 0
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i =1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ sum = sum + i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (known_sum .NE. sum) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with integers: Result was ",
+ & sum,"instead of ", known_sum
+ END If
+
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i =1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ diff = diff - i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( diff .NE. 0 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in difference with integers: Result was ",
+ & diff,"instead of 0."
+ END IF
+
+!... Test for doubles
+ dsum = 0.
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt= dpt * dt
+ END DO
+ dknown_sum = (1-dpt)/(1-dt)
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=0,DOUBLE_DIGITS-1
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ dsum = dsum + dt**i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+
+ IF (dsum .NE. dknown_sum .AND.
+ & ABS(dsum - dknown_sum) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with doubles: Result was ",
+ & dsum,"instead of ",dknown_sum,"(Difference: ",
+ & dsum - dknown_sum,")"
+ END IF
+ dpt = 1
+
+
+ DO i=1, DOUBLE_DIGITS
+ dpt = dpt*dt
+ END DO
+
+ ddiff = ( 1-dpt)/(1-dt)
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=0, DOUBLE_DIGITS-1
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ ddiff = ddiff - dt**i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( ABS(ddiff) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Difference with doubles: Result was ",
+ & ddiff,"instead of 0.0"
+ END IF
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,MAX_FACTOR
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ product = product * i
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (known_product .NE. product) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Product with integers: Result was ",
+ & product," instead of",known_product
+ END IF
+
+ DO i=1,LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (.NOT. logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND part 1"
+ END IF
+
+
+ logic_and = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND pass 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_or) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 1"
+ END IF
+
+ logic_or = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( .NOT. logic_or ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 2"
+ END IF
+
+!... Test logic EQV, unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+ logic_eqv = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (.NOT. logic_eqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 1"
+ END IF
+
+ logic_eqv = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( logic_eqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 2"
+ END IF
+
+!... Test logic NEQV, which is unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+ logic_neqv = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_neqv = logic_neqv .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF (logic_neqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 1"
+ END IF
+
+ logic_neqv = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1,LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ logic_neqv = logic_neqv .OR. logics(i)
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( .NOT. logic_neqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 1
+ END DO
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1, LOOPCOUNT
+!... iand(I,J): Returns value resulting from boolean AND of
+!... pair of bits in each of I and J.
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_and .LT. 1 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 1"
+ END If
+
+ bit_and = 1
+ int_array(LOOPCOUNT/2) = 0
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF( bit_and .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1, LOOPCOUNT
+!... Ior(I,J): Returns value resulting from boolean OR of
+!... pair of bits in each of I and J.
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ bit_or = Ior(bit_or, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 1"
+ END IF
+
+
+ bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i=1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( bit_or .le. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( exclusiv_bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 1"
+ END IF
+
+ exclusiv_bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( exclusiv_bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 2"
+ END IF
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = 10 - i
+ END DO
+
+ min_value = 65535
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ min_value = min(min_value,int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( min_value .GT. (10-LOOPCOUNT) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = i
+ END DO
+
+ max_value = -32768
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ max_value = max(max_value,int_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( max_value .LT. LOOPCOUNT )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MAX"
+ END IF
+
+!... test double min, max
+ DO i=1,LOOPCOUNT
+ d_array(i) = 10 - i*dt
+ END DO
+
+ dmin = 2**10
+ dt = 0.5
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( dmin .GT. (10-dt) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ d_array(i) = i * dt
+ END DO
+
+ dmax= - (2**10)
+
+!$omp parallel
+<ompts:orphan>
+!$omp do
+ DO i = 1, LOOPCOUNT
+<ompts:check>
+!$omp atomic
+</ompts:check>
+ dmax= max(dmax,d_array(i) )
+ END DO
+!$omp end do
+</ompts:orphan>
+!$omp end parallel
+
+ IF ( dmax .LT. LOOPCOUNT*dt )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MAX"
+ END IF
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname>= 1
+ ELSE
+ <testfunctionname></testfunctionname>= 0
+ END IF
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_barrier.f b/final/testsuite/fortran/omp_barrier.f
new file mode 100644
index 0000000..5125994
--- /dev/null
+++ b/final/testsuite/fortran/omp_barrier.f
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp barrier directive. The test creates several threads and sends one of them sleeping before setting a flag. After the barrier the other ones do some little work depending on the flag.</ ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp barrier</ompts:directive>
+<ompts:testcode>
+
+ SUBROUTINE do_some_work3()
+ REAL i
+ INTRINSIC sqrt
+ DOUBLE PRECISION sum
+ INCLUDE "omp_testsuite.f"
+ sum = 0.0
+ DO WHILE (i < LOOPCOUNT-1)
+ sum = sum + sqrt(i)
+ i = i + 1
+ END DO
+ END
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_barrier</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sleeptime
+ INTEGER omp_get_thread_num
+ INTEGER result1, result2, rank
+ result1 = 0
+ result2 = 0
+ sleeptime = 1
+!$omp parallel private(rank)
+ rank = omp_get_thread_num()
+! PRINT *, "rank", rank
+ IF ( rank .EQ. 1 ) THEN
+ CALL sleep(sleeptime)
+ result2 = 3
+ END IF
+ <ompts:orphan>
+ <ompts:check>
+!$omp barrier
+ </ompts:check>
+ </ompts:orphan>
+ IF ( rank .EQ. 0 ) THEN
+ result1 = result2
+ END IF
+!$omp end parallel
+ IF ( result1 .EQ. 3 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_copyin.f b/final/testsuite/fortran/omp_copyin.f
new file mode 100644
index 0000000..714f149
--- /dev/null
+++ b/final/testsuite/fortran/omp_copyin.f
@@ -0,0 +1,47 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel copyin directive.</ ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel copyin</ompts:directive>
+<ompts:dependences>omp critical,omp threadprivate</ompts:dependences>
+<ompts:testcode>
+! Changelog:
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_copyin</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER known_sum
+ <ompts:orphan:vars>
+! INTEGER, SAVE::sum1
+! implicitly by omp_threadprivate, see spec25 Chap. 2.8.2
+ INTEGER sum1
+ COMMON /csum1/ sum1
+ INTEGER sum, i, threads
+ COMMON /orphvars/ sum, i, threads
+! C. Niethammer 30.11.06: moved threadprivate statement into the orphaned
+! function
+!$omp threadprivate(/csum1/)
+ </ompts:orphan:vars>
+
+ sum = 0
+ sum1 = 7
+ threads = 0
+ <ompts:orphan>
+!$omp parallel <ompts:check>copyin(sum1)</ompts:check>
+! print *,"sum1",sum1
+!$omp do
+ DO i=1, 999
+ sum1 = sum1 + i
+ END DO
+!$omp critical
+ sum = sum + sum1
+ threads = threads + 1
+!$omp end critical
+!$omp end parallel
+ </ompts:orphan>
+ known_sum = 999*1000/2 + 7*threads
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_critical.f b/final/testsuite/fortran/omp_critical.f
new file mode 100644
index 0000000..892dd2b
--- /dev/null
+++ b/final/testsuite/fortran/omp_critical.f
@@ -0,0 +1,59 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp critical directive by counting up a variable in a parallelized region within a critical section.
+
+</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp critical</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_critical</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER known_sum
+ <ompts:orphan:vars>
+ INTEGER i,j,myi,myj, sum
+ COMMON /orphvars/ sum, myi, myj
+ </ompts:orphan:vars>
+ sum = 0
+ myi = 0
+ myj = 500
+!$omp parallel
+!$omp sections
+
+!$omp section
+ DO i = 0 , 499
+ <ompts:orphan>
+ <ompts:check>
+!$omp critical
+ </ompts:check>
+ sum = sum + myi
+ myi = myi + 1
+ <ompts:check>
+!$omp end critical
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+
+!$omp section
+ DO j = 500 , 999
+ <ompts:orphan>
+ <ompts:check>
+!$omp critical
+ </ompts:check>
+ sum = sum + myj
+ myj = myj + 1
+ <ompts:check>
+!$omp end critical
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end sections
+!$omp end parallel
+ known_sum = 999*1000/2
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ WRITE (1,*) "Found sum was", sum, "instead", known_sum
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_flush.f b/final/testsuite/fortran/omp_flush.f
new file mode 100644
index 0000000..30daf50
--- /dev/null
+++ b/final/testsuite/fortran/omp_flush.f
@@ -0,0 +1,49 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp flush directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp flush</ompts:directive>
+<ompts:dependences>omp barrier</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_flush</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result1, dummy, rank
+ INTEGER omp_get_thread_num
+ <ompts:orphan:vars>
+ INTEGER result2
+ COMMON /orphvars/ result2
+ </ompts:orphan:vars>
+ result1=0
+ result2=0
+!$omp parallel private(rank)
+ rank = omp_get_thread_num()
+!$omp barrier
+ IF ( rank .EQ. 1 ) THEN
+ result2 = 3
+ <ompts:orphan>
+ <ompts:check>
+!$omp flush(result2)
+ </ompts:check>
+ </ompts:orphan>
+ dummy = result2
+ END IF
+ IF ( rank .EQ. 0 ) THEN
+ call sleep(1)
+ <ompts:orphan>
+ <ompts:check>
+!$omp flush(result2)
+ </ompts:check>
+ </ompts:orphan>
+ result1 = result2
+ END IF
+!$omp end parallel
+
+! PRINT *,"1:", result1, "2:", result2, "dummy", dummy
+ IF ( (result1 .EQ. result2) .AND. (result2 .EQ. dummy) .AND.
+ & (result2 .EQ. 3) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_get_num_threads.f b/final/testsuite/fortran/omp_get_num_threads.f
new file mode 100644
index 0000000..467ad9f
--- /dev/null
+++ b/final/testsuite/fortran/omp_get_num_threads.f
@@ -0,0 +1,37 @@
+<ompts:test>
+<ompts:testdescription>Test which checks that the omp_get_num_threads returns the correct number of threads. Therefor it counts up a variable in a parallelized section and compars this value with the result of the omp_get_num_threads function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_num_threads</ompts:directive>
+<ompts:dependences>omp critical,somp single</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_get_num_threads</ompts:testcode:functionname>()
+ INTEGER nthreads
+ INTEGER omp_get_num_threads
+ <ompts:orphan:vars>
+ INTEGER nthreads_lib
+ COMMON /orphvars/ nthreads_lib
+ </ompts:orphan:vars>
+ nthreads=0
+ nthreads_lib=-1
+
+!$omp parallel
+!shared(nthreads,nthreads_lib)
+!$omp critical
+ nthreads = nthreads + 1
+!$omp end critical
+!$omp single
+ <ompts:orphan>
+ <ompts:check>
+ nthreads_lib=omp_get_num_threads()
+ </ompts:check>
+ </ompts:orphan>
+!$omp end single
+!$omp end parallel
+ IF (nthreads .EQ. nthreads_lib) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_get_wticks.f b/final/testsuite/fortran/omp_get_wticks.f
new file mode 100644
index 0000000..762d03d
--- /dev/null
+++ b/final/testsuite/fortran/omp_get_wticks.f
@@ -0,0 +1,28 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_get_wtick function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_wtick</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_get_wticks</ompts:testcode:functionname>()
+ IMPLICIT NONE
+<ompts:orphan:vars>
+ DOUBLE PRECISION tick
+ COMMON /orphvars/ tick
+ include "omp_lib.h"
+</ompts:orphan:vars>
+! DOUBLE PRECISION omp_get_wtick
+ tick = 1
+ <ompts:orphan>
+<ompts:check>
+ tick=omp_get_wticK()
+</ompts:check>
+ </ompts:orphan>
+ WRITE(1,*) "work took",tick,"sec. time."
+ IF(tick .GT. 0. .AND. tick .LT. 0.01) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_in_parallel.f b/final/testsuite/fortran/omp_in_parallel.f
new file mode 100644
index 0000000..45edff6
--- /dev/null
+++ b/final/testsuite/fortran/omp_in_parallel.f
@@ -0,0 +1,41 @@
+<ompts:test>
+<ompts:testdescription>Test which checks that omp_in_parallel returns false when called from a serial region and true when called within a parallel region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_in_parallel</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_in_parallel</ompts:testcode:functionname>()
+! checks that false is returned when called from serial region
+! and true is returned when called within parallel region
+ LOGICAL omp_in_parallel
+ <ompts:orphan:vars>
+! LOGICAL omp_in_parallel
+ LOGICAL serial, parallel
+ COMMON /orphvars/ serial, parallel
+ </ompts:orphan:vars>
+ serial=.TRUE.
+ parallel=.FALSE.
+
+ <ompts:orphan>
+ <ompts:check>
+ serial=omp_in_parallel()
+ </ompts:check>
+ </ompts:orphan>
+
+!$omp parallel
+!$omp single
+ <ompts:orphan>
+ <ompts:check>
+ parallel=omp_in_parallel();
+ </ompts:check>
+ </ompts:orphan>
+!$omp end single
+!$omp end parallel
+
+ IF ( (.NOT. serial) .AND. (parallel) ) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_lock.f b/final/testsuite/fortran/omp_lock.f
new file mode 100644
index 0000000..29026c5
--- /dev/null
+++ b/final/testsuite/fortran/omp_lock.f
@@ -0,0 +1,58 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_set_lock and the omp_unset_lock function by counting the threads entering and exiting a single region with locks.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_lock</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result
+ INTEGER nr_threads_in_single
+ INTEGER nr_iterations
+ INTEGER i
+!lock variable
+ <ompts:orphan:vars>
+ INCLUDE "omp_lib.h"
+ INTEGER (KIND=OMP_LOCK_KIND) :: lock
+ COMMON /orphvars/ lock
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+
+!result is:
+! 0 -- if the test fails
+! 1 -- if the test succeeds
+ CALL omp_init_lock(lock)
+ nr_iterations=0
+ nr_threads_in_single=0
+ result=0
+!$omp parallel shared(lock,nr_threads_in_single,nr_iterations,result)
+!$omp do
+ DO i=1,LOOPCOUNT
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_set_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+!$omp flush
+ nr_threads_in_single=nr_threads_in_single+1
+!$omp flush
+ nr_iterations=nr_iterations+1
+ nr_threads_in_single=nr_threads_in_single-1
+ result=result+nr_threads_in_single
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_unset_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end do
+!$omp end parallel
+ CALL omp_destroy_lock(lock)
+ IF(result.EQ.0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ ENDIf
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_master.f b/final/testsuite/fortran/omp_master.f
new file mode 100644
index 0000000..65e1f3d
--- /dev/null
+++ b/final/testsuite/fortran/omp_master.f
@@ -0,0 +1,39 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp master directive by counting up a variable in a omp master section.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp master</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_master</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_thread_num
+ <ompts:orphan:vars>
+ INTEGER nthreads, executing_thread
+ COMMON /orphvars/ nthreads, executing_thread
+ </ompts:orphan:vars>
+ nthreads=0
+ executing_thread=-1
+
+!$omp parallel
+ <ompts:orphan>
+ <ompts:check>
+!$omp master
+ </ompts:check>
+!$omp critical
+ nthreads = nthreads + 1
+!$omp end critical
+ executing_thread=omp_get_thread_num()
+ <ompts:check>
+!$omp end master
+ </ompts:check>
+ </ompts:orphan>
+!$omp end parallel
+
+ IF ( (nthreads .EQ. 1) .AND. (executing_thread .EQ. 0) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_master_3.f b/final/testsuite/fortran/omp_master_3.f
new file mode 100644
index 0000000..a222c48
--- /dev/null
+++ b/final/testsuite/fortran/omp_master_3.f
@@ -0,0 +1,49 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp master directive by counting up a variable in a omp master section. It also checks that the master thread has the thread number 0 as specified in the OpenMP standard version 3.0.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp master</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_master_3</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_thread_num
+ <ompts:orphan:vars>
+ INTEGER nthreads, executing_thread
+ INTEGER tid_result ! counts up the number of wrong thread no.
+ ! for the master thread
+ COMMON /orphvars/ nthreads, executing_thread, tid_result
+ </ompts:orphan:vars>
+ tid_result = 0
+ nthreads=0
+ executing_thread=-1
+
+!$omp parallel
+ <ompts:orphan>
+ <ompts:check>
+!$omp master
+ </ompts:check>
+ if (omp_get_thread_num() .ne. 0) then
+!$omp critical
+ tid_result = tid_result + 1
+!$omp end critical
+ end if
+!$omp critical
+ nthreads = nthreads + 1
+!$omp end critical
+ executing_thread=omp_get_thread_num()
+ <ompts:check>
+!$omp end master
+ </ompts:check>
+ </ompts:orphan>
+!$omp end parallel
+
+ IF ( (nthreads .EQ. 1) .AND. (executing_thread .EQ. 0) .AND.
+ & (tid_result .EQ. 0) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
+
diff --git a/final/testsuite/fortran/omp_nest_lock.f b/final/testsuite/fortran/omp_nest_lock.f
new file mode 100644
index 0000000..9b9e3aa
--- /dev/null
+++ b/final/testsuite/fortran/omp_nest_lock.f
@@ -0,0 +1,59 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_set_nest_lock and the omp_unset_nest_lock function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_nest_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_nest_lock</ompts:testcode:functionname>()
+ IMPLICIT NONE
+!result is:
+! 0 -- if the test fails
+! 1 -- if the test succeeds
+ INTEGER result
+ INTEGER nr_threads_in_single
+ INTEGER nr_iterations
+ INTEGER i
+ <ompts:orphan:vars>
+ INCLUDE "omp_lib.h"
+ INTEGER (KIND=OMP_NEST_LOCK_KIND) :: lock
+ COMMON /orphvars/ lock
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+
+ nr_iterations=0
+ nr_threads_in_single=0
+ CALL omp_init_nest_lock(lock)
+ result=0
+
+!$omp parallel shared(lock,nr_threads_in_single,nr_iterations,result)
+!$omp do
+ DO i=1,LOOPCOUNT
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_set_nest_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+!$omp flush
+ nr_threads_in_single=nr_threads_in_single+1
+!$omp flush
+ nr_iterations=nr_iterations+1
+ nr_threads_in_single=nr_threads_in_single-1
+ result=result+nr_threads_in_single
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_unset_nest_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end do
+!$omp end parallel
+ CALL omp_destroy_nest_lock(lock)
+! PRINT *, result, nr_iterations
+ IF(result.EQ.0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_nested.f b/final/testsuite/fortran/omp_nested.f
new file mode 100644
index 0000000..5435151
--- /dev/null
+++ b/final/testsuite/fortran/omp_nested.f
@@ -0,0 +1,53 @@
+<ompts:test>
+<ompts:testdescription>Test if the compiler support nested parallelism.</ompts:testdescription>
+<ompts:version>2.5</ompts:version>
+<ompts:directive>nestedtest</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_nested</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+<ompts:orphan:vars>
+ INTEGER counter
+ COMMON /orphvars/ counter
+</ompts:orphan:vars>
+
+ counter =0
+
+ <ompts:check>
+!$ CALL OMP_SET_NESTED(.TRUE.)
+!#ifdef _OPENMP
+! CALL OMP_SET_NESTED(.TRUE.)
+!#endif
+ </ompts:check>
+ <ompts:crosscheck>
+!$ CALL OMP_SET_NESTED(.FALSE.)
+!#ifdef _OPENMP
+! CALL OMP_SET_NESTED(.FALSE.)
+!#endif
+ </ompts:crosscheck>
+
+!$omp parallel
+ <ompts:orphan>
+!$omp critical
+ counter = counter + 1
+!$omp end critical
+
+!$omp parallel
+!$omp critical
+ counter = counter - 1
+!$omp end critical
+!$omp end parallel
+ </ompts:orphan>
+!$omp end parallel
+
+ IF (counter .EQ. 0 ) THEN
+ WRITE (1,*) "Counter was 0"
+ <testfunctionname></testfunctionname> = 0
+ ELSE
+ WRITE (1,*) "Counter was", counter
+ <testfunctionname></testfunctionname> = 1
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_num_threads.f b/final/testsuite/fortran/omp_num_threads.f
new file mode 100644
index 0000000..a1ede73
--- /dev/null
+++ b/final/testsuite/fortran/omp_num_threads.f
@@ -0,0 +1,60 @@
+<ompts:test>
+<ompts:testdescription>Test which checks that the omp_get_num_threads returns the correct number of threads. Therefor it counts up a variable in a parallelized section and compars this value with the result of the omp_get_num_threads function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_num_threads</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_num_threads</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER i, max_threads
+ INTEGER omp_get_num_threads
+<ompts:orphan:vars>
+ INTEGER failed,threads,nthreads,tmp
+ COMMON /orphvars/ failed,threads,nthreads
+</ompts:orphan:vars>
+
+ failed = 0
+ max_threads = 0
+
+!$omp parallel
+!$omp master
+ max_threads = OMP_GET_NUM_THREADS()
+!$omp end master
+!$omp end parallel
+! print *, "max threads:",max_threads
+
+!Yi Wen added omp_Set_dynamics here to make sure num_threads clause work
+!Thanks to Dr. Yin Ma in Absoft. should be not be called before the test loop
+!because it allows the dynamic adjustment of the number of threads at runtime
+!instead of using the max_threads set.
+
+ !CALL OMP_SET_DYNAMIC(.TRUE.)
+ DO threads = 1, max_threads
+ nthreads = 0
+ <ompts:orphan>
+!$omp parallel num_threads(threads) reduction(+:failed)
+! print *, threads, omp_get_num_threads()
+ tmp = omp_get_num_threads()
+ IF ( threads .NE. tmp ) THEN
+ failed = failed + 1
+ WRITE (1,*) "Error: found ", tmp, " instead of ",
+ & threads, " threads"
+ END IF
+!$omp atomic
+ nthreads = nthreads + 1
+!$omp end parallel
+ </ompts:orphan>
+! print *, threads, nthreads
+ <ompts:check>IF ( nthreads .NE. threads ) THEN</ompts:check>
+ <ompts:crosscheck>IF ( nthreads .EQ. threads ) THEN</ompts:crosscheck>
+ failed = failed + 1
+ END IF
+ END DO
+
+ IF(failed .NE. 0) THEN
+ <testfunctionname></testfunctionname> = 0
+ ELSE
+ <testfunctionname></testfunctionname> = 1
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_single.f b/final/testsuite/fortran/omp_single.f
new file mode 100644
index 0000000..e8821ca
--- /dev/null
+++ b/final/testsuite/fortran/omp_single.f
@@ -0,0 +1,40 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single directive by controlling how often a directive is called in an omp single region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single</ompts:directive>
+<ompts:dependences>omp parallel private,omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_single</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER i
+ <ompts:orphan:vars>
+ INTEGER nr_threads_in_single,nr_iterations,result
+ COMMON /orphvars/ nr_threads_in_single,nr_iterations,result
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+ nr_threads_in_single=0
+ result=0
+ nr_iterations=0
+!$omp parallel
+ DO i=0, LOOPCOUNT-1
+ <ompts:orphan>
+!$omp single
+!$omp flush
+ nr_threads_in_single = nr_threads_in_single + 1
+!$omp flush
+ nr_iterations = nr_iterations + 1
+ <ompts:check>nr_threads_in_single = nr_threads_in_single - 1</ompts:check>
+ <ompts:crosscheck>nr_threads_in_single = nr_threads_in_single + 1</ompts:crosscheck>
+ result = result + nr_threads_in_single
+!$omp end single
+ </ompts:orphan>
+ END DO
+!$omp end parallel
+ IF ( result .EQ. 0 .AND. nr_iterations .EQ. LOOPCOUNT ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task.f b/final/testsuite/fortran/omp_task.f
new file mode 100644
index 0000000..273d7b0
--- /dev/null
+++ b/final/testsuite/fortran/omp_task.f
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp task directive. The idea of the tests is to generate a set of tasks in a single region. We let pause the tasks generated so that other threads get sheduled to the newly opened tasks.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task</ompts:directive>
+<ompts:dependences>omp single</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ <ompts:orphan:vars>
+ INTEGER omp_get_num_threads, omp_get_thread_num
+ EXTERNAL my_sleep
+ INTEGER myj
+ INTEGER i,j
+ INTEGER tids(NUM_TASKS)
+ COMMON /orphvars/ j,tids
+ </ompts:orphan:vars>
+!$omp parallel private(myj) shared(j)
+!$omp single
+ do i=1, NUM_TASKS
+ j = i
+ <ompts:orphan>
+ myj = j
+ <ompts:check>
+!$omp task
+ </ompts:check>
+ call my_sleep(SLEEPTIME)
+ tids(myj) = omp_get_thread_num()
+ <ompts:check>
+!$omp end task
+ </ompts:check>
+ </ompts:orphan>
+ end do
+!$omp end single
+!$omp end parallel
+
+ <testfunctionname></testfunctionname> = 0
+
+ ! check if more than one thread executed the tasks.
+ do i=1, NUM_TASKS
+ if (tids(1) .ne. tids(i)) then
+ <testfunctionname></testfunctionname> = 1
+ end if
+ end do
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task_firstprivate.f b/final/testsuite/fortran/omp_task_firstprivate.f
new file mode 100644
index 0000000..ca7759e
--- /dev/null
+++ b/final/testsuite/fortran/omp_task_firstprivate.f
@@ -0,0 +1,54 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the firstprivate clause of the task directive. We create a set of tasks in a single region. We defines a variable named sum unequal zero which gets declared firstprivate for each task. Now each task calcualtes a sum using this private variable. Before each calcualation step we introduce a flush command so that maybe the private variabel gets bad. At the end we check if the calculated sum was right.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task firstprivate</ompts:directive>
+<ompts:dependences>omp single,omp critical</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ INTEGER j,i
+ <ompts:orphan:vars>
+ external my_sleep
+ INTEGER my_sum
+ INTEGER known_sum
+ INTEGER rslt
+ COMMON /orphvars/ my_sum, known_sum, rslt
+ </ompts:orphan:vars>
+
+ my_sum = 1234
+ known_sum = 1234 + (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+
+!$omp parallel private(j)
+!$omp single
+ do i=1, NUM_TASKS
+ <ompts:orphan>
+!$omp task <ompts:check>firstprivate(my_sum)</ompts:check>
+ do j = 0, LOOPCOUNT
+!$omp flush
+ my_sum = my_sum + j
+ end do
+
+ ! check if calculated my_sum was right
+ if (my_sum .ne. known_sum) then
+!$omp critical
+ rslt = rslt + 1
+!$omp end critical
+ end if
+!$omp end task
+ </ompts:orphan>
+ end do
+!$omp end single
+!$omp end parallel
+
+ if (rslt .eq. 0) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task_if.f b/final/testsuite/fortran/omp_task_if.f
new file mode 100644
index 0000000..149f457
--- /dev/null
+++ b/final/testsuite/fortran/omp_task_if.f
@@ -0,0 +1,45 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the if clause of the omp task directive. The idear of the tests is to generate a tasks in a single region and pause it immediately. The parent thread now shall set a counter variable which the paused task shall evaluate when woke up.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task if</ompts:directive>
+<ompts:dependences>omp single,omp flush</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task_if</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ <ompts:orphan:vars>
+ external my_sleep
+ INTEGER dummy
+ LOGICAL condition_false
+ INTEGER cnt
+ INTEGER rslt
+ COMMON /orphvars/ condition_false, cnt, rslt
+ </ompts:orphan:vars>
+
+ cnt = 0
+ condition_false = (dummy .eq. 314159)
+
+!$omp parallel
+!$omp single
+ <ompts:orphan>
+!$omp task <ompts:check>if (condition_false)</ompts:check> shared(cnt,rslt)
+ call my_sleep(SLEEPTIME_LONG)
+!$omp flush
+ if (cnt .eq. 0) then
+ rslt = 1
+ else
+ rslt = 0
+ end if
+!$omp end task
+ </ompts:orphan>
+ cnt = 1
+!$omp end single
+!$omp end parallel
+
+ <testfunctionname></testfunctionname> = rslt
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task_private.f b/final/testsuite/fortran/omp_task_private.f
new file mode 100644
index 0000000..5e44bc5
--- /dev/null
+++ b/final/testsuite/fortran/omp_task_private.f
@@ -0,0 +1,55 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the private clause of the task directive. We create a set of tasks in a single region. We defines a variable named sum which gets declared private for each task. Now each task calcualtes a sum using this private variable. Before each calcualation step we introduce a flush command so that maybe the private variabel gets bad. At the end we check if the calculated sum was right.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task private</ompts:directive>
+<ompts:dependences>omp single,omp critical</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ INTEGER j,i
+ <ompts:orphan:vars>
+ external my_sleep
+ INTEGER my_sum
+ INTEGER known_sum
+ INTEGER rslt
+ COMMON /orphvars/ my_sum, known_sum, rslt
+ </ompts:orphan:vars>
+
+ my_sum = 0
+ rslt = 0
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+
+!$omp parallel private(j)
+!$omp single
+ do i=1, NUM_TASKS
+ <ompts:orphan>
+!$omp task <ompts:check>private(my_sum)</ompts:check> shared(rslt, known_sum)
+ <ompts:check>my_sum = 0</ompts:check>
+ do j = 0, LOOPCOUNT
+ my_sum = my_sum + j
+ end do
+
+ ! check if calculated my_sum was right
+ if (my_sum .ne. known_sum) then
+!$omp critical
+ rslt = rslt + 1
+!$omp end critical
+ end if
+!$omp end task
+ </ompts:orphan>
+ end do
+!$omp end single
+!$omp end parallel
+
+ if (rslt .eq. 0) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task_shared.f b/final/testsuite/fortran/omp_task_shared.f
new file mode 100644
index 0000000..58564b3
--- /dev/null
+++ b/final/testsuite/fortran/omp_task_shared.f
@@ -0,0 +1,47 @@
+<ompts:test>
+<ompts:testdescription> Test to see if implied shared works correctly</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task</ompts:directive>
+<ompts:dependences>omp single, omp task firstprivate</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task_shared</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ <ompts:orphan:vars>
+ external my_sleep
+ INTEGER i
+ COMMON /orphvars/ i
+ </ompts:orphan:vars>
+ INTEGER rslt
+ INTEGER k
+
+ i = 0
+ k = 0
+ rslt = 0
+
+!$omp parallel private(k) shared(i)
+!$omp single
+ do k=1, NUM_TASKS
+ <ompts:orphan>
+!$omp task <ompts:crosscheck>firstprivate(i)</ompts:crosscheck>
+!$omp+ <ompts:check>shared(i)</ompts:check>
+!$omp atomic
+ i = i + 1
+!$omp end task
+ </ompts:orphan>
+ end do
+!$omp end single
+!$omp end parallel
+
+ rslt = i
+ if (rslt .eq. NUM_TASKS) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_task_untied.f b/final/testsuite/fortran/omp_task_untied.f
new file mode 100644
index 0000000..e58e935
--- /dev/null
+++ b/final/testsuite/fortran/omp_task_untied.f
@@ -0,0 +1,63 @@
+<ompts:test>
+<ompts:testdescription>Test for untied clause. First generate a set of tasks and pause it immediately. Then we resume half of them and check whether they are scheduled by different threads</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp task untied</ompts:directive>
+<ompts:dependences>omp taskwait</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_task_untied</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ <ompts:orphan:vars>
+ EXTERNAL my_sleep
+ INTEGER omp_get_num_threads, omp_get_thread_num
+ INTEGER myj
+ INTEGER i,j
+ INTEGER cnt
+ INTEGER start_tid(NUM_TASKS)
+ INTEGER current_tid(NUM_TASKS)
+ COMMON /orphvars/ j, cnt, start_tid, current_tid
+ </ompts:orphan:vars>
+
+ cnt = 0
+ do i = 1, NUM_TASKS
+ start_tid(i) = 0
+ current_tid(i) = 0
+ end do
+
+!$omp parallel private(myj) shared(j)
+!$omp single
+ do i=1, NUM_TASKS
+ j = i
+ <ompts:orphan>
+ myj = j
+!$omp task <ompts:check>untied</ompts:check>
+ call my_sleep(SLEEPTIME)
+ start_tid(myj) = omp_get_thread_num()
+!$omp taskwait
+ <ompts:check>if (MOD(start_tid(myj),2) .ne. 0) then</ompts:check>
+ call my_sleep(SLEEPTIME)
+ current_tid(myj) = omp_get_thread_num()
+ <ompts:check>
+ else
+ current_tid(myj) = omp_get_thread_num()
+ end if</ompts:check>
+!$omp end task
+ </ompts:orphan>
+ end do
+!$omp end single
+!$omp end parallel
+
+ <testfunctionname></testfunctionname> = 0
+
+ ! check if at least one untied task switched threads
+ do i=1, NUM_TASKS
+ if (current_tid(i) .ne. start_tid(i)) then
+ <testfunctionname></testfunctionname> = 1
+ end if
+ end do
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_taskwait.f b/final/testsuite/fortran/omp_taskwait.f
new file mode 100644
index 0000000..2aa94c4
--- /dev/null
+++ b/final/testsuite/fortran/omp_taskwait.f
@@ -0,0 +1,83 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp taskwait directive. First we generate a set of tasks, which set the elements of an array to a specific value. Then we do a taskwait and check if all tasks finished meaning all array elements contain the right value. Then we generate a second set setting the array elements to another value. After the parallel region we check if all tasks of the second set finished and were executed after the tasks of the first set.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp taskwait</ompts:directive>
+<ompts:dependences>omp single,omp task</ompts:dependences>
+<ompts:testcode>
+ INCLUDE "omp_my_sleep.f"
+
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_taskwait</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INCLUDE "omp_testsuite.f"
+ INTEGER result1, result2
+ INTEGER array(NUM_TASKS)
+ INTEGER i, myi
+ <ompts:orphan:vars>
+ external my_sleep
+ </ompts:orphan:vars>
+
+ result1 = 0
+ result2 = 0
+
+ ! fill array
+ do i = 1, NUM_TASKS
+ array(i) = 0
+ end do
+
+!$omp parallel shared(i) private(myi)
+!$omp single
+ do i=1, NUM_TASKS
+ ! First we have to store the value of the loop index in a new variable
+ ! which will be private for each task because otherwise it will be
+ ! overwritten if the execution of the task takes longer than the time
+ ! which is needed to enter the next step of the loop!
+
+ myi = i
+
+!$omp task
+ call my_sleep(SLEEPTIME)
+ array(myi) = 1
+!$omp end task
+ end do
+
+ <ompts:orphan>
+ <ompts:check>
+!$omp taskwait
+ </ompts:check>
+ </ompts:orphan>
+
+ ! check if all tasks were finished
+ do i=1, NUM_TASKS
+ if (array(i) .ne. 1) then
+ result1 = result1 + 1
+ end if
+ end do
+
+ ! generate some more tasks which now shall overwrite the valuesin the
+ ! array
+ do i=1, NUM_TASKS
+ myi = i
+!$omp task
+ array(myi) = 2
+!$omp end task
+ end do
+
+!$omp end single
+!$omp end parallel
+
+ ! final check, if all array elements contain the right values
+ do i=1, NUM_TASKS
+ if (array(i) .ne. 2) then
+ result2 = result2 + 1
+ end if
+ end do
+
+ if ( (result1 .eq. 0) .and. (result2 .eq. 0) ) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_test_nest_lock.f b/final/testsuite/fortran/omp_test_nest_lock.f
new file mode 100644
index 0000000..8396d24
--- /dev/null
+++ b/final/testsuite/fortran/omp_test_nest_lock.f
@@ -0,0 +1,61 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_test_nest_lock function.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_test_nest_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_test_nest_lock</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result
+!result is:
+! 0 -- if the test fails
+! 1 -- if the test succeeds
+ INTEGER nr_threads_in_single
+ INTEGER nr_iterations
+ INTEGER i
+ <ompts:orphan:vars>
+ include "omp_lib.h"
+ INTEGER (KIND=OMP_NEST_LOCK_KIND) :: lock
+ COMMON /orphvars/ lock
+ </ompts:orphan:vars>
+! INTEGER lck
+ INCLUDE "omp_testsuite.f"
+
+ nr_iterations=0
+ nr_threads_in_single=0
+ CALL OMP_INIT_NEST_LOCK(lock)
+ result=0
+
+!$omp parallel shared(lock,nr_threads_in_single,nr_iterations,result)
+!$omp do
+ DO i=1,LOOPCOUNT
+ <ompts:orphan>
+ <ompts:check>
+ DO WHILE(OMP_TEST_NEST_LOCK(lock) .EQ. 0)
+ END DO
+ </ompts:check>
+ </ompts:orphan>
+!$omp flush
+ nr_threads_in_single=nr_threads_in_single+1
+!$omp flush
+ nr_iterations=nr_iterations+1
+ nr_threads_in_single=nr_threads_in_single-1
+ result=result+nr_threads_in_single
+ <ompts:orphan>
+ <ompts:check>
+ CALL OMP_UNSET_NEST_LOCK(lock)
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end do
+!$omp end parallel
+ CALL omp_destroy_nest_lock(lock)
+! print *, result, nr_iterations
+ IF(result.EQ.0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ ENDIF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_testlock.f b/final/testsuite/fortran/omp_testlock.f
new file mode 100644
index 0000000..3b1304d
--- /dev/null
+++ b/final/testsuite/fortran/omp_testlock.f
@@ -0,0 +1,57 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_testlock function. The test counts the threads entering and exiting a single region which is build with a test_lock in an endless loop.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_test_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_testlock</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result
+ INTEGER nr_threads_in_single
+ INTEGER nr_iterations
+ INTEGER i
+ <ompts:orphan:vars>
+ include "omp_lib.h"
+ INTEGER (KIND=OMP_LOCK_KIND)::lock
+ COMMON /orphvars/ lock
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+
+ nr_iterations=0
+ nr_threads_in_single=0
+ CALL OMP_INIT_LOCK(lock)
+ result=0
+
+!$omp parallel shared(lock,nr_threads_in_single,nr_iterations,result)
+!$omp do
+ DO i=1,LOOPCOUNT
+ <ompts:orphan>
+ <ompts:check>
+ DO WHILE (.NOT. OMP_TEST_LOCK(lock))
+ END DO
+ </ompts:check>
+ </ompts:orphan>
+!$omp flush
+ nr_threads_in_single=nr_threads_in_single+1
+!$omp flush
+ nr_iterations=nr_iterations+1
+ nr_threads_in_single=nr_threads_in_single-1
+ result=result+nr_threads_in_single
+ <ompts:orphan>
+ <ompts:check>
+ CALL OMP_UNSET_LOCK(lock)
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end do
+!$omp end parallel
+ CALL OMP_DESTROY_LOCK(lock)
+! print *, result, nr_iterations
+ IF(result.EQ.0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ ENDIF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_testsuite.f b/final/testsuite/fortran/omp_testsuite.f
new file mode 100644
index 0000000..42d4821
--- /dev/null
+++ b/final/testsuite/fortran/omp_testsuite.f
@@ -0,0 +1,2 @@
+ integer LOOPCOUNT
+ parameter (LOOPCOUNT=1000)
diff --git a/final/testsuite/fortran/omp_threadprivate.f b/final/testsuite/fortran/omp_threadprivate.f
new file mode 100644
index 0000000..c920498
--- /dev/null
+++ b/final/testsuite/fortran/omp_threadprivate.f
@@ -0,0 +1,89 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp threadprivate directive by filling an array with random numbers in an parallelised region. Each thread generates one number of the array and saves this in a temporary threadprivate variable. In a second parallelised region the test controls, that the temporary variable contains still the former value by comparing it with the one in the array.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp threadprivate</ompts:directive>
+<ompts:dependences>omp critical,omp_set_dynamic,omp_get_num_threads,omp master</ompts:dependences>
+<ompts:testcode>
+!Yi Wen modified this function from his own understanding of the semantics
+!of C version at 05042004
+!The undeestanding is that sum0 and myvalue can be local static variables
+!of the chk_omp_threadprivate function. There is no need to use common
+!block
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_threadprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, known_sum, i , iter, rank,size, failed
+ INTEGER omp_get_num_threads, omp_get_thread_num
+ REAL my_random
+ REAL, ALLOCATABLE:: data(:)
+ INTEGER random_size
+ INTRINSIC random_number
+ INTRINSIC random_seed
+ EXTERNAL omp_set_dynamic
+
+!Yi Wen modified at 05042004 : add "save"
+ INTEGER, SAVE:: sum0
+ REAL, SAVE::myvalue
+!Yi Wen commented two common blocks
+! common/csum0/ sum0
+! common/cmyvalue/ myvalue
+!!!!!!!!!!$omp threadprivate(/csum0/,/cmyvalue/)
+ <ompts:check>
+!$omp threadprivate(sum0,myvalue)
+ </ompts:check>
+ INCLUDE "omp_testsuite.f"
+
+ sum = 0
+ failed = 0
+ sum0=0
+ myvalue=0
+ random_size=45
+ CALL omp_set_dynamic(.FALSE.)
+!$omp parallel
+ sum0 = 0
+!$omp do
+ DO i=1, LOOPCOUNT
+ sum0 = sum0 + i
+ END DO
+!$omp end do
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( known_sum .NE. sum ) THEN
+ PRINT *, ' known_sum =', known_sum, ', sum =',sum
+ END IF
+
+ CALL omp_set_dynamic(.FALSE.)
+
+!$omp parallel
+!$omp master
+ size = omp_get_num_threads()
+ ALLOCATE ( data(size) )
+!$omp end master
+!$omp end parallel
+ CALL RANDOM_SEED(SIZE=random_size)
+ DO iter = 0, 99
+ CALL RANDOM_NUMBER(HARVEST=my_random)
+!$omp parallel private(rank)
+ rank = omp_get_thread_num()+1
+ myvalue = my_random + rank
+ data(rank) = myvalue
+!$omp end parallel
+!$omp parallel private(rank)
+ rank = omp_get_thread_num()+1
+ IF ( myvalue .NE. data(rank) ) THEN
+ failed = failed + 1
+ PRINT *, ' myvalue =',myvalue,' data(rank)=', data(rank)
+ END IF
+!$omp end parallel
+ END DO
+ DEALLOCATE( data)
+ IF ( (known_sum .EQ. sum) .AND. (failed .NE. 1) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_workshare.f b/final/testsuite/fortran/omp_workshare.f
new file mode 100644
index 0000000..a8faa27
--- /dev/null
+++ b/final/testsuite/fortran/omp_workshare.f
@@ -0,0 +1,142 @@
+<ompts:test>
+<ompts:testdescription>Test which checks if WORKSHARE is present.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp workshare</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+!********************************************************************
+! Function: omp_workshare
+!
+! by Chunhua Liao, University of Houston
+! Oct. 2005 - First version
+!
+! The idea for the test is that if WORKSHARE is not present,
+! the array assignment in PARALLEL region will be executed by each
+! thread and then wrongfully repeated several times.
+!
+! TODO:Do we need test for WHERE and FORALL?
+! A simple test for WHERE and FORALL is added by Zhenying Liu
+!********************************************************************
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_workshare</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result,i
+ INTEGER scalar02,scalar12,scalar22,scalar32,count
+ REAL, DIMENSION(1000)::FF
+<ompts:orphan:vars>
+ INTEGER scalar0,scalar1,scalar2,scalar3
+ INTEGER, DIMENSION(1000)::AA,BB,CC
+ REAL, DIMENSION(1000)::DD
+ COMMON /orphvars/ scalar0,scalar1,scalar2,scalar3,
+ & AA,BB,CC,DD
+</ompts:orphan:vars>
+
+ result=0
+ scalar0=0
+ scalar02=0
+ scalar1=0
+ scalar12=0
+ scalar2=0
+ scalar22=0
+ scalar3=0
+ scalar32=0
+
+ count = 0
+
+ AA=0
+ BB=0
+
+ do i=1,1000
+ CC(i) = i
+ FF(i) = 1.0/i
+ end do
+
+!$OMP PARALLEL
+<ompts:orphan>
+<ompts:check>!$OMP WORKSHARE</ompts:check>
+
+! test if work is divided or not for array assignment
+ AA=AA+1
+
+! test if scalar assignment is treated as a single unit of work
+ scalar0=scalar0+1
+
+! test if atomic is treated as a single unit of work
+!$OMP ATOMIC
+ scalar1=scalar1+1
+! test if critical is treated as a single unit of work
+!$OMP CRITICAL
+ scalar2=scalar2+1
+!$OMP END CRITICAL
+
+! test if PARALLEL is treated as a single unit of work
+!$OMP PARALLEL
+ scalar3=scalar3+1
+!$OMP END PARALLEL
+
+ WHERE ( CC .ne. 0 ) DD = 1.0/CC
+
+ FORALL (I=1:1000) CC(i) = -i
+
+<ompts:check>!$OMP END WORKSHARE</ompts:check>
+</ompts:orphan>
+!$OMP END PARALLEL
+
+!sequential equivalent statements for comparison
+ BB=BB+1
+ scalar02=scalar02+1
+ scalar12=scalar12+1
+ scalar22=scalar22+1
+ scalar32=scalar32+1
+
+! write (1,*) "ck:sum of AA is",SUM(AA)," sum of BB is ",sum(BB)
+ if (SUM(AA)/=SUM(BB)) then
+ write(1,*) "Array assignment has some problem"
+ result=result +1
+ endif
+ if (scalar0/=scalar02) then
+ write(1,*) "Scalar assignment has some problem"
+ result = result +1
+ endif
+ if (scalar1/=scalar12) then
+ write(1,*) "Atomic inside WORKSHARE has some problem"
+ result = result +1
+ endif
+ if (scalar2/=scalar22) then
+ write(1,*) "CRITICAL inside WORKSHARE has some problem"
+ result = result +1
+ endif
+ if (scalar3/=scalar32) then
+ write(1,*) "PARALLEL inside WORKSHARE has some problem"
+ result = result +1
+ endif
+ do i=1,1000
+ if ( abs( DD(i)- FF(i)) .gt. 1.0E-4 ) then
+ count = count + 1
+ end if
+ end do
+ if ( count .ne. 0 ) then
+ result = result + 1
+ write(1,*) "WHERE has some problem"
+ end if
+
+ count = 0
+ do i=1,1000
+ if ( CC(i) .ne. -i ) then
+ count = count + 1
+ end if
+ end do
+ if ( count .ne. 0 ) then
+ result = result + 1
+ write(1,*) "FORALL has some problem"
+ end if
+
+
+!if anything is wrong, set return value to 0
+ if (result==0) then
+ <testfunctionname></testfunctionname> = 1
+ else
+ <testfunctionname></testfunctionname> = 0
+ end if
+ end
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_workshare_default.f b/final/testsuite/fortran/omp_workshare_default.f
new file mode 100644
index 0000000..f774c43
--- /dev/null
+++ b/final/testsuite/fortran/omp_workshare_default.f
@@ -0,0 +1,36 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp master directive by counting up a variable in a omp master section.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp workshare default</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_workshare_default</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum
+ INTEGER known_sum
+ INTEGER mysum
+ INTEGER i
+
+ known_sum = 999*1000/2
+
+!$omp parallel default(private) shared(sum)
+!$omp do
+ DO i = 1, 999
+ mysum = mysum + i
+ END DO
+!$omp end do
+
+!$omp critical
+ sum = sum + mysum
+!$omp end critical
+
+!$omp end parallel
+
+ IF ( (known_sum .EQ. sum) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/omp_wtime.f b/final/testsuite/fortran/omp_wtime.f
new file mode 100644
index 0000000..557334f
--- /dev/null
+++ b/final/testsuite/fortran/omp_wtime.f
@@ -0,0 +1,43 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_get_wtime function. It compares the time with which is called a sleep function with the time it took by messuring the difference between the call of the sleep function and its end.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp_get_wtime</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_wtime</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ <ompts:orphan:vars>
+ DOUBLE PRECISION start
+ DOUBLE PRECISION endtime
+ COMMON start, endtime
+ include "omp_lib.h"
+ </ompts:orphan:vars>
+ INTEGER wait_time
+ DOUBLE PRECISION measured_time
+ INTEGER fileunit
+ wait_time=1
+
+ start = 0;
+ endtime = 0;
+
+ <ompts:orphan>
+ <ompts:check>
+ start=omp_get_wtime()
+ </ompts:check>
+ </ompts:orphan>
+ CALL sleep(wait_time)
+ <ompts:orphan>
+ <ompts:check>
+ endtime=omp_get_wtime()
+ </ompts:check>
+ </ompts:orphan>
+ measured_time=endtime-start
+ WRITE(1,*) "work took",measured_time,"sec. time."
+ IF(measured_time.GT.0.99*wait_time .AND.
+ & measured_time .LT. 1.01*wait_time) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_firstprivate.f b/final/testsuite/fortran/par_do_firstprivate.f
new file mode 100644
index 0000000..79ae527
--- /dev/null
+++ b/final/testsuite/fortran/par_do_firstprivate.f
@@ -0,0 +1,26 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel do firstprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel for firstprivate</ompts:directive>
+<ompts:dependences>par do reduction,par do private</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum,known_sum, i2, i
+ INCLUDE "omp_testsuite.f"
+ sum =0
+ i2 = 3
+!$omp parallel do <ompts:check>firstprivate(i2)</ompts:check><ompts:crosscheck>private(i2)</ompts:crosscheck> reduction(+:sum)
+ DO i=1, LOOPCOUNT
+ sum = sum + ( i+ i2)
+ END DO
+!$omp end parallel do
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2+3*LOOPCOUNT
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_if.f b/final/testsuite/fortran/par_do_if.f
new file mode 100644
index 0000000..0b7fc9a
--- /dev/null
+++ b/final/testsuite/fortran/par_do_if.f
@@ -0,0 +1,32 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel for if directive. Needs at least two threads.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel do if</ompts:directive>
+<ompts:dependences></ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_if</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_num_threads
+ INTEGER sum,known_sum, i, num_threads
+ INTEGER control
+ INCLUDE "omp_testsuite.f"
+ sum = 0
+
+ control = 0
+!$omp parallel do <ompts:check>if (control == 1)</ompts:check>
+ DO i=1, LOOPCOUNT
+ sum = sum + i
+ num_threads = omp_get_num_threads ()
+ END DO
+!$omp end parallel do
+ WRITE (1,*) "Number of threads determined by:"\
+ "omg_get_num_threasd:", num_threads
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( known_sum .EQ. sum .AND. num_threads .EQ. 1) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_lastprivate.f b/final/testsuite/fortran/par_do_lastprivate.f
new file mode 100644
index 0000000..180210c
--- /dev/null
+++ b/final/testsuite/fortran/par_do_lastprivate.f
@@ -0,0 +1,28 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel do lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel do lastprivate</ompts:directive>
+<ompts:dependences>par do reduction, par do private</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_lastprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, known_sum, i , i0
+ INCLUDE "omp_testsuite.f"
+ sum = 0
+ i0 = -1
+
+!$omp parallel do reduction(+:sum) schedule(static,7) <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck>
+ DO i=1, LOOPCOUNT
+ sum = sum + i
+ i0 = i
+ END DO
+!$omp end parallel do
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( (known_sum .EQ. sum) .AND. (i0 .EQ. LOOPCOUNT) ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_ordered.f b/final/testsuite/fortran/par_do_ordered.f
new file mode 100644
index 0000000..33d4cd0
--- /dev/null
+++ b/final/testsuite/fortran/par_do_ordered.f
@@ -0,0 +1,67 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel do ordered directive</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel do ordered</ompts:directive>
+<ompts:dependences>par schedule stat</ompts:dependences>
+<ompts:testcode>
+! **********************************************************
+! Helper function is_larger
+! **********************************************************
+ INTEGER FUNCTION i_islarger2(i)
+ IMPLICIT NONE
+ INTEGER i
+ INTEGER last_i,islarger
+ COMMON /com/ last_i
+ INCLUDE "omp_testsuite.f"
+! print *, "last_i",last_i, "i", i
+! last_i is a global variable
+ IF ( i .GT. last_i ) THEN
+ islarger = 1
+ ELSE
+ islarger = 0
+ END IF
+ last_i = i
+ i_islarger2 = islarger
+ END FUNCTION
+
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_ordered</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ COMMON /com/ last_i
+ INTEGER known_sum,i, last_i
+<ompts:orphan:vars>
+ INTEGER is_larger,sum,i_islarger2
+ COMMON /orphvars/ is_larger,sum,i
+</ompts:orphan:vars>
+
+ sum=0
+ is_larger=1
+ last_i=0
+!$omp parallel do schedule(static, 1) ordered
+ DO i=1, 99
+ <ompts:orphan>
+ <ompts:check>
+!$omp ordered
+ </ompts:check>
+ IF( i_islarger2(i) .EQ. 1 .AND. is_larger .EQ. 1 ) THEN
+ is_larger = 1
+ ELSE
+ is_larger = 0
+ END IF
+ sum = sum + i
+ <ompts:check>
+!$omp end ordered
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end parallel do
+ known_sum = (99*100)/2
+!Yi Wen; Sun compiler will fail sometimes
+! print *, "sum", sum, "ks", known_sum, "la", is_larger
+ IF ( known_sum .EQ. sum .AND. is_larger .EQ. 1 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_private.f b/final/testsuite/fortran/par_do_private.f
new file mode 100644
index 0000000..dd39ab9
--- /dev/null
+++ b/final/testsuite/fortran/par_do_private.f
@@ -0,0 +1,46 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel do private directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel do private</ompts:directive>
+<ompts:dependences>par do reduction,omp flush</ompts:dependences>
+<ompts:testcode>
+ SUBROUTINE do_some_work2()
+ IMPLICIT NONE
+ REAL i
+ DOUBLE PRECISION sum
+ INTRINSIC sqrt
+ INCLUDE "omp_testsuite.f"
+ sum = 0.0
+ i = 0
+ DO WHILE (i < LOOPCOUNT)
+ sum = sum + sqrt(i)
+ i = i + 1
+ END DO
+ END
+
+!********************************************************************
+
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_private</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum,known_sum, i, i2, i3
+ INCLUDE "omp_testsuite.f"
+ sum = 0
+
+!$omp parallel do reduction(+:sum) <ompts:check>private(i2)</ompts:check> schedule(static,1)
+ DO i=1, LOOPCOUNT
+ i2 = i
+!$omp flush
+ CALL do_some_work2()
+!$omp flush
+ sum = sum + i2
+ END DO
+!$omp end parallel do
+ known_sum = (LOOPCOUNT*(LOOPCOUNT+1))/2
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_do_reduction.f b/final/testsuite/fortran/par_do_reduction.f
new file mode 100644
index 0000000..9a3f455
--- /dev/null
+++ b/final/testsuite/fortran/par_do_reduction.f
@@ -0,0 +1,415 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel do reduction directive with all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel do reduction</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_do_reduction</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, sum2, known_sum, i, i2,diff
+ INTEGER product,known_product,int_const
+ INTEGER MAX_FACTOR
+ DOUBLE PRECISION dsum,dknown_sum,dt,dpt
+ DOUBLE PRECISION rounding_error, ddiff
+ INTEGER double_DIGITS
+ LOGICAL logic_and, logic_or, logic_eqv,logic_neqv
+ INTEGER bit_and, bit_or
+ INTEGER exclusiv_bit_or
+ INTEGER min_value, max_value
+ DOUBLE PRECISION dmin, dmax
+ INTEGER result
+ INCLUDE "omp_testsuite.f"
+ LOGICAL logics(LOOPCOUNT)
+ INTEGER int_array(LOOPCOUNT)
+ DOUBLE PRECISION d_array(LOOPCOUNT)
+ PARAMETER (int_const=10,known_product=3628800)
+ PARAMETER (double_DIGITS=20,MAX_FACTOR=10)
+ PARAMETER (rounding_error=1.E-6)
+
+ dt = 1./3.
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+ product = 1
+ sum2 = 0
+ sum = 0
+ dsum = 0.
+ result =0
+ logic_and = .true.
+ logic_or = .false.
+ bit_and = 1
+ bit_or = 0
+ exclusiv_bit_or = 0
+!$omp parallel do schedule(dynamic, 1) <ompts:check>reduction(+:sum)</ompts:check>
+ DO i =1, LOOPCOUNT
+ sum = sum + i
+ END DO
+!$omp end parallel do
+
+ IF (known_sum .NE. sum) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with integers: Result was ",
+ & sum,"instead of ", known_sum
+ END IF
+
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+
+
+
+!$omp parallel do schedule(dynamic, 1) <ompts:check>reduction (-: diff)</ompts:check>
+ DO i =1, LOOPCOUNT
+ diff = diff - i
+ END DO
+!$omp end parallel do
+
+ IF ( diff .NE. 0 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in difference with integers: Result was ",
+ & sum,"instead of 0."
+ END IF
+
+!... Test for doubles
+ dsum =0.
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt= dpt * dt
+ END DO
+ dknown_sum = (1-dpt)/(1-dt)
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(+:dsum)</ompts:check>
+ DO i=0,DOUBLE_DIGITS-1
+ dsum = dsum + dt**i
+ END DO
+!$omp end parallel do
+
+
+ IF(dsum .NE. dknown_sum .AND.
+ & abs(dsum - dknown_sum) .GT. rounding_error ) THEN
+ result = result + 1
+ write(1,*) "Error in sum with doubles: Result was ",
+ & dsum,"instead of ",dknown_sum,"(Difference: ",
+ & dsum - dknown_sum,")"
+ END IF
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt = dpt*dt
+ END DO
+ ddiff = ( 1-dpt)/(1-dt)
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(-:ddiff)</ompts:check>
+ DO i=0, DOUBLE_DIGITS-1
+ ddiff = ddiff - dt**i
+ END DO
+!$omp end parallel do
+
+ IF ( ABS(ddiff) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Difference with doubles: Result was ",
+ & ddiff,"instead of 0.0"
+ END IF
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(*:product)</ompts:check>
+ DO i=1,MAX_FACTOR
+ product = product * i
+ END DO
+!$omp end parallel do
+
+ IF (known_product .NE. product) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Product with integers: Result was ",
+ & product," instead of",known_product
+ END IF
+
+ DO i=1,LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF (.NOT. logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND part 1"
+ END IF
+
+
+ logic_and = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF (logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND pass 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_or = logic_or .or. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF (logic_or) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 1"
+ END IF
+
+ logic_or = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF ( .NOT. logic_or ) THEn
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 2"
+ END IF
+
+!... Test logic EQV, unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+ logic_eqv = .TRUE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF (.NOT. logic_eqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 1"
+ END IF
+
+ logic_eqv = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF ( logic_eqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 2"
+ END IF
+
+!... Test logic NEQV, which is unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+ logic_neqv = .FALSE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.NEQV.:logic_neqv)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF (logic_neqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 1"
+ END IF
+
+ logic_neqv = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(.NEQV.:logic_neqv)</ompts:check>
+ DO i=1,LOOPCOUNT
+ logic_neqv = logic_neqv .neqv. logics(i)
+ END DO
+!$omp end parallel do
+
+ IF ( .NOT. logic_neqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 1
+ END DO
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(IAND:bit_and)</ompts:check>
+ DO i=1, LOOPCOUNT
+!... iand(I,J): Returns value resulting from boolean AND of
+!... pair of bits in each of I and J.
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp end parallel do
+
+ IF ( bit_and .LT. 1 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 1"
+ END IF
+
+ bit_and = 1
+ int_array(LOOPCOUNT/2) = 0
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(IAND:bit_and)</ompts:check>
+ DO i=1, LOOPCOUNT
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF( bit_and .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+
+!$omp parallel do schedule(dynamic,1) reduction(IOR:bit_or)
+ DO i=1, LOOPCOUNT
+!... Ior(I,J): Returns value resulting from boolean OR of
+!... pair of bits in each of I and J.
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 1"
+ END IF
+
+
+ bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(IOR:bit_or)</ompts:check>
+ DO i=1, LOOPCOUNT
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( bit_or .LE. 0) then
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end parallel do
+
+ IF ( exclusiv_bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 1"
+ END IF
+
+ exclusiv_bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end parallel do
+
+ IF ( exclusiv_bit_or .le. 0) then
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 2"
+ END IF
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = 10 - i
+ END DO
+
+ min_value = 65535
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(MIN:min_value)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ min_value = MIN(min_value,int_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( min_value .GT. (10-LOOPCOUNT) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = i
+ END DO
+
+ max_value = -32768
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(MAX:max_value)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ max_value = MAX(max_value,int_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( max_value .LT. LOOPCOUNT )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MAX"
+ END IF
+
+!... test double min, max
+ DO i=1,LOOPCOUNT
+ d_array(i) = 10 - i*dt
+ END DO
+
+ dmin = 2**10
+ dt = 0.5
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(MIN:dmin)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( dmin .GT. (10-dt) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ d_array(i) = i * dt
+ END DO
+
+ dmax= - (2**10)
+
+!$omp parallel do schedule(dynamic,1) <ompts:check>reduction(max:dmax)</ompts:check>
+ DO i = 1, LOOPCOUNT
+ dmax= max(dmax,d_array(i) )
+ END DO
+!$omp end parallel do
+
+ IF ( dmax .LT. LOOPCOUNT*dt )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MAX"
+ END IF
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_section_firstprivate.f b/final/testsuite/fortran/par_section_firstprivate.f
new file mode 100644
index 0000000..b32b85c
--- /dev/null
+++ b/final/testsuite/fortran/par_section_firstprivate.f
@@ -0,0 +1,34 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections firstprivate clause.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections firstprivate</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_section_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, sum0, known_sum
+ sum = 7
+ sum0 = 11
+!$omp parallel sections <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+!$omp section
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+<ompts:crosscheck>!$omp section</ompts:crosscheck>
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+<ompts:crosscheck>!$omp section</ompts:crosscheck>
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel sections
+ known_sum = 11*3 + 7
+ IF ( known_sum .EQ. sum ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_section_lastprivate.f b/final/testsuite/fortran/par_section_lastprivate.f
new file mode 100644
index 0000000..d9c721d
--- /dev/null
+++ b/final/testsuite/fortran/par_section_lastprivate.f
@@ -0,0 +1,51 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections lastprivate</ompts:directive>
+<ompts:dependences>omp critical,omp parallel sections private</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_section_lastprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, sum0, known_sum, i ,i0
+ sum = 0
+ sum0 = 0
+ i0 = -1
+!$omp parallel sections <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck> private(i,sum0)
+!$omp section
+ sum0 = 0
+ DO i=1, 399
+ sum0 = sum0 + i
+ i0=i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=400, 699
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=700, 999
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel sections
+ known_sum = (999*1000)/2
+! print *, "sum", sum, "ks", known_sum, i0
+ IF ( known_sum .EQ. sum .AND. i0 .EQ. 999 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/par_section_private.f b/final/testsuite/fortran/par_section_private.f
new file mode 100644
index 0000000..fd0ac0e
--- /dev/null
+++ b/final/testsuite/fortran/par_section_private.f
@@ -0,0 +1,86 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the parallel section private clause.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel section private</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_section_private</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, sum0, known_sum, i
+ sum = 7
+ sum0 = 0
+!$omp parallel sections<ompts:check>private(sum0,i)</ompts:check><ompts:crosscheck>private(i)</ompts:crosscheck>
+!$omp section
+ sum0 = 0
+ DO i=1, 399
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=400, 699
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=700, 999
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel sections
+ known_sum = (999*1000)/2+7
+ IF ( known_sum .eq. sum ) then
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
+
+ integer function crschk_par_section_private()
+ implicit none
+ integer sum, sum0, known_sum, i
+ sum = 7
+ sum0 = 0
+!$omp parallel sections private(i)
+!$omp section
+ sum0 = 0
+ do i=1, 399
+ sum0 = sum0 + i
+ end do
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ do i=400, 699
+ sum0 = sum0 + i
+ end do
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ do i=700, 999
+ sum0 = sum0 + i
+ end do
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end parallel sections
+ known_sum = (999*1000)/2+7
+ if ( known_sum .eq. sum ) then
+ crschk_par_section_private = 1
+ else
+ crschk_par_section_private = 0
+ end if
+ end
+
diff --git a/final/testsuite/fortran/par_section_reduct.f b/final/testsuite/fortran/par_section_reduct.f
new file mode 100644
index 0000000..adde304
--- /dev/null
+++ b/final/testsuite/fortran/par_section_reduct.f
@@ -0,0 +1,631 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp parallel sections reduction directive with all its option.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel sections reduction</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>par_section_reduct</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum, sum2, known_sum, i, i2,diff
+ INTEGER product,known_product,int_const
+ INTEGER MAX_FACTOR
+ DOUBLE PRECISION dsum,dknown_sum,dt,dpt
+ DOUBLE PRECISION rounding_error, ddiff
+ INTEGER DOUBLE_DIGITS
+ LOGICAL logic_and, logic_or, logic_eqv,logic_neqv
+ INTEGER bit_and, bit_or
+ INTEGER exclusiv_bit_or
+ INTEGER min_value, max_value
+ DOUBLE PRECISION dmin, dmax
+ INTEGER result
+ INCLUDE "omp_testsuite.f"
+ LOGICAL logics(LOOPCOUNT)
+ INTEGER int_array(LOOPCOUNT)
+ DOUBLE PRECISION d_array(LOOPCOUNT)
+ PARAMETER (int_const=10,known_product=3628800)
+ PARAMETER (DOUBLE_DIGITS=20,MAX_FACTOR=10)
+ PARAMETER (rounding_error=1.E-6)
+
+ INTEGER cut1, cut2, cut3, cut4
+
+ dt = 1./3.
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+ product = 1
+ sum2 = 0
+ sum = 0
+ dsum = 0.
+ result =0
+ logic_and = .TRUE.
+ logic_or = .FALSE.
+ bit_and = 1
+ bit_or = 0
+ exclusiv_bit_or = 0
+ cut1 = NINT(LOOPCOUNT / 3.)
+ cut2 = cut1 + 1
+ cut3 = 2 * cut1
+ cut4 = cut3 + 1
+
+!$omp parallel sections private(i) <ompts:check>reduction(+:sum)</ompts:check>
+!$omp section
+ DO i =1, cut1
+ sum = sum + i
+ END DO
+!$omp section
+ DO i =cut2, cut3
+ sum = sum + i
+ END DO
+!$omp section
+ DO i =cut4, LOOPCOUNT
+ sum = sum + i
+ END DO
+!$omp end parallel sections
+
+ IF (known_sum .NE. sum) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with integers: Result was ",
+ & sum,"instead of ", known_sum
+ END IF
+
+ diff = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+
+
+!$omp parallel sections <ompts:check>reduction (-: diff)</ompts:check>
+!$omp section
+ DO i =1, cut1
+ diff = diff - i
+ END DO
+!$omp section
+ DO i =cut2, cut3
+ diff = diff - i
+ END DO
+!$omp section
+ DO i =cut4, LOOPCOUNT
+ diff = diff - i
+ END DO
+!$omp end parallel sections
+
+ IF ( diff .NE. 0 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in difference with integers: Result was ",
+ & sum,"instead of 0."
+ END IF
+
+!... Test for doubles
+ dsum =0.
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt= dpt * dt
+ END DO
+ dknown_sum = (1-dpt)/(1-dt)
+!$omp parallel sections <ompts:check>reduction(+:dsum)</ompts:check>
+!$omp section
+ DO i=0,6
+ dsum = dsum + dt**i
+ END DO
+!$omp section
+ DO i=7,12
+ dsum = dsum + dt**i
+ END DO
+!$omp section
+ DO i=13,DOUBLE_DIGITS-1
+ dsum = dsum + dt**i
+ END DO
+!$omp end parallel sections
+
+
+ IF(dsum .NE. dknown_sum .AND.
+ & ABS(dsum - dknown_sum) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with doubles: Result was ",
+ & dsum,"instead of ",dknown_sum,"(Difference: ",
+ & dsum - dknown_sum,")"
+ END IF
+ dpt = 1
+
+
+
+ DO i=1, DOUBLE_DIGITS
+ dpt = dpt*dt
+ END DO
+ ddiff = ( 1-dpt)/(1-dt)
+!$omp parallel sections <ompts:check>reduction(-:ddiff)</ompts:check>
+!$omp section
+ DO i=0, 6
+ ddiff = ddiff - dt**i
+ END DO
+!$omp section
+ DO i=7, 12
+ ddiff = ddiff - dt**i
+ END DO
+!$omp section
+ DO i=13, DOUBLE_DIGITS-1
+ ddiff = ddiff - dt**i
+ END DO
+!$omp end parallel sections
+
+ IF ( ABS(ddiff) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Difference with doubles: Result was ",
+ & ddiff,"instead of 0.0"
+ END IF
+
+!$omp parallel sections <ompts:check>reduction(*:product)</ompts:check>
+!$omp section
+ DO i=1,3
+ product = product * i
+ END DO
+!$omp section
+ DO i=4,6
+ product = product * i
+ END DO
+!$omp section
+ DO i=7,10
+ product = product * i
+ END DO
+!$omp end parallel sections
+
+ IF (known_product .NE. product) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Product with integers: Result was ",
+ & product," instead of",known_product
+ END IF
+
+ DO i=1,LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+!$omp parallel sections <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end parallel sections
+
+ if (.not. logic_and) then
+ result = result + 1
+ write(1,*) "Error in logic AND part 1"
+ end if
+
+
+ logic_and = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel sections <ompts:check>reduction(.AND.:logic_and)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF (logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND pass 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+!$omp parallel sections <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF (logic_or) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 1"
+ END IF
+
+ logic_or = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel sections <ompts:check>reduction(.OR.:logic_or)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF ( .NOT. logic_or ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 2"
+ END IF
+
+!... Test logic EQV, unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+ logic_eqv = .TRUE.
+
+!$omp parallel sections <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF (.NOT. logic_eqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 1"
+ END IF
+
+ logic_eqv = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel sections <ompts:check>reduction(.EQV.:logic_eqv)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF ( logic_eqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 2"
+ END IF
+
+!... Test logic NEQV, which is unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+ logic_neqv = .FALSE.
+
+!$omp parallel sections <ompts:check>reduction(.NEQV.:logic_neqv)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF (logic_neqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 1"
+ END IF
+
+ logic_neqv = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel sections <ompts:check>reduction(.NEQV.:logic_neqv)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp end parallel sections
+
+ IF ( .NOT. logic_neqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 1
+ END DO
+!$omp parallel sections <ompts:check>reduction(IAND:bit_and)</ompts:check>
+!... iand(I,J): Returns value resulting from boolean AND of
+!... pair of bits in each of I and J.
+!$omp section
+ DO i=1, cut1
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_and = IAND(bit_and,int_array(i))
+ END DO
+!$omp end parallel sections
+
+ IF ( bit_and .LT. 1 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 1"
+ END IF
+
+ bit_and = 1
+ int_array(LOOPCOUNT/2) = 0
+
+!$omp parallel sections <ompts:check>reduction(IAND:bit_and)</ompts:check>
+!$omp section
+ DO i=1, cut1
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_and = IAND ( bit_and, int_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF( bit_and .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+
+!$omp parallel sections <ompts:check>reduction(IOR:bit_or)</ompts:check>
+!... Ior(I,J): Returns value resulting from boolean OR of
+!... pair of bits in each of I and J.
+!$omp section
+ DO i=1, cut1
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 1"
+ END IF
+
+
+ bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+!$omp parallel sections <ompts:check>reduction(IOR:bit_or)</ompts:check>
+!$omp section
+ DO i=1, cut1
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_or = IOR(bit_or, int_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+!$omp parallel sections <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end parallel sections
+
+ IF ( exclusiv_bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 1"
+ END IF
+
+ exclusiv_bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+
+!$omp parallel sections <ompts:check>reduction(IEOR:exclusiv_bit_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ exclusiv_bit_or = IEOR(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp end parallel sections
+
+ IF ( exclusiv_bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 2"
+ END IF
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = 10 - i
+ END DO
+
+ min_value = 65535
+
+!$omp parallel sections <ompts:check>reduction(MIN:min_value)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ min_value = MIN(min_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ min_value = MIN(min_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ min_value = MIN(min_value,int_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( min_value .GT. (10-LOOPCOUNT) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = i
+ END DO
+
+ max_value = -32768
+
+!$omp parallel sections <ompts:check>reduction(MAX:max_value)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ max_value = MAX(max_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ max_value = MAX(max_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ max_value = MAX(max_value,int_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( max_value .LT. LOOPCOUNT )THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MAX"
+ END IF
+
+!... test double min, max
+ DO i=1,LOOPCOUNT
+ d_array(i) = 10 - i*dt
+ END DO
+
+ dmin = 2**10
+ dt = 0.5
+
+!$omp parallel sections <ompts:check>reduction(MIN:dmin)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ dmin= MIN(dmin,d_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( dmin .GT. (10-dt) )THEN
+ result = result + 1
+ WRITE(1,*) "Error in double MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ d_array(i) = i * dt
+ END DO
+
+ dmax= - (2**10)
+
+!$omp parallel sections <ompts:check>reduction(MAX:dmax)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ dmax= MAX(dmax,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ dmax= MAX(dmax,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ dmax= MAX(dmax,d_array(i) )
+ END DO
+!$omp end parallel sections
+
+ IF ( dmax .lt. LOOPCOUNT*dt )THEN
+ result = result + 1
+ write(1,*) "Error in double MAX"
+ END IF
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+
+ CLOSE(2)
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/section_firstprivate.f b/final/testsuite/fortran/section_firstprivate.f
new file mode 100644
index 0000000..630058a
--- /dev/null
+++ b/final/testsuite/fortran/section_firstprivate.f
@@ -0,0 +1,41 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp section firstprivate directive by adding a variable which is defined before the parallel region.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp firstprivate</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>section_firstprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER known_sum
+<ompts:orphan:vars>
+ INTEGER sum,sum0
+ COMMON /orphvars/ sum,sum0
+</ompts:orphan:vars>
+ sum = 7
+ sum0 = 11
+!$omp parallel
+ <ompts:orphan>
+!$omp sections <ompts:check>firstprivate(sum0)</ompts:check><ompts:crosscheck>private(sum0)</ompts:crosscheck>
+!$omp section
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end sections
+ </ompts:orphan>
+!$omp end parallel
+ known_sum = 11*3+7
+ IF ( known_sum .EQ. sum) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/section_lastprivate.f b/final/testsuite/fortran/section_lastprivate.f
new file mode 100644
index 0000000..5ba7148
--- /dev/null
+++ b/final/testsuite/fortran/section_lastprivate.f
@@ -0,0 +1,62 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp section lastprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp section lastprivate</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>section_lastprivate</ompts:testcode:functionname>()
+ INTEGER known_sum
+
+ <ompts:orphan:vars>
+ INTEGER i, i0, sum, sum0
+ COMMON /orphvars/ i,i0,sum
+ </ompts:orphan:vars>
+
+ sum = 0
+ sum0 = 0
+ i0 = -1
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>lastprivate(i0)</ompts:check><ompts:crosscheck>private(i0)</ompts:crosscheck> private(i,sum0)
+!$omp section
+ sum0 = 0
+ DO i=1, 399
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=400, 699
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=700, 999
+ sum0 = sum0 + i
+ i0 = i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end sections
+</ompts:orphan>
+!$omp end parallel
+
+ known_sum = (999*1000)/2
+ IF ( known_sum .EQ. sum .AND. i0 .EQ. 999 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</omts:test>
+
+
diff --git a/final/testsuite/fortran/section_private.f b/final/testsuite/fortran/section_private.f
new file mode 100644
index 0000000..28b8090
--- /dev/null
+++ b/final/testsuite/fortran/section_private.f
@@ -0,0 +1,55 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the parallel section private clause.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp parallel section private</ompts:directive>
+<ompts:dependences>omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>section_private</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER known_sum
+<ompts:orphan:vars>
+ INTEGER sum,sum0,i
+ COMMON /orphvars/ sum,sum0,i
+</ompts:orphan:vars>
+
+ sum = 7
+ sum0 = 0
+!$omp parallel
+ <ompts:orphan>
+!$omp sections <ompts:check>private(sum0,i)</ompts:check><ompts:crosscheck>private(i)</ompts:crosscheck>
+!$omp section
+ sum0 = 0
+ DO i=1, 399
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=400, 699
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp section
+ sum0 = 0
+ DO i=700, 999
+ sum0 = sum0 + i
+ END DO
+!$omp critical
+ sum = sum + sum0
+!$omp end critical
+!$omp end sections
+ </ompts:orphan>
+!$omp end parallel
+ known_sum = (999*1000)/2+7
+ IF ( known_sum .EQ. sum) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/section_reduction.f b/final/testsuite/fortran/section_reduction.f
new file mode 100644
index 0000000..d7e70f9
--- /dev/null
+++ b/final/testsuite/fortran/section_reduction.f
@@ -0,0 +1,743 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp sections reduction directive with all its options.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp sections reduction</ompts:directive>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>section_reduction</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER sum2, known_sum, i2
+ INTEGER known_product,int_const
+ INTEGER MAX_FACTOR
+ DOUBLE PRECISION dknown_sum,dpt
+ INTEGER result
+ INCLUDE "omp_testsuite.f"
+ PARAMETER (int_const=10,known_product=3628800)
+
+ <ompts:orphan:vars>
+ INTEGER i,dummy
+ INTEGER sum, dIFf
+ DOUBLE PRECISION dt
+ DOUBLE PRECISION dsum, ddIFf
+ INTEGER product
+ LOGICAL logics(LOOPCOUNT)
+ INTEGER int_array(LOOPCOUNT)
+ LOGICAL logic_and, logic_or, logic_eqv,logic_neqv
+ INTEGER bit_and, bit_or
+ INTEGER exclusiv_bit_or
+ INTEGER min_value, max_value
+ DOUBLE PRECISION d_array(LOOPCOUNT)
+ DOUBLE PRECISION dmin, dmax
+
+ INTEGER DOUBLE_DIGITS
+ INTEGER cut1, cut2, cut3, cut4
+ PARAMETER (DOUBLE_DIGITS=20,MAX_FACTOR=10)
+ DOUBLE PRECISION rounding_error
+ PARAMETER (rounding_error=1.E-6)
+
+ COMMON /orphvars/ i,sum,dIFf,product,dt,dsum,ddIFf,logic_and,
+ & logic_or,logic_eqv,logic_neqv,logics,int_array,bit_and,bit_or,
+ & exclusiv_bit_or,min_value,dmin,dmax,d_array,max_value
+
+ cut1 = NINT(LOOPCOUNT / 3.3)
+ cut2 = cut1 + 1
+ cut3 = cut1 * 2
+ cut4 = cut3 + 1
+
+ </ompts:orphan:vars>
+
+ dt = 1./3.
+ known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2
+ product = 1
+ sum2 = 0
+ sum = 0
+ dsum = 0.
+ result =0
+ logic_and = .true.
+ logic_or = .false.
+ bit_and = 1
+ bit_or = 0
+ exclusiv_bit_or = 0
+ cut1 = NINT(LOOPCOUNT / 3.3)
+ cut2 = cut1 + 1
+ cut3 = cut1 * 2
+ cut4 = cut3 + 1
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections private(i) <ompts:check>reduction(+:sum)</ompts:check>
+!$omp section
+ DO i =1, cut1
+ sum = sum + i
+ END DO
+!$omp section
+ DO i =cut2, cut3
+ sum = sum + i
+ END DO
+!$omp section
+ DO i =cut4, LOOPCOUNT
+ sum = sum + i
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (known_sum .NE. sum) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with integers: Result was ",
+ & sum,"instead of ", known_sum
+ END IF
+
+ dIFf = known_sum
+
+
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction (-: dIFf)</ompts:check>
+!$omp section
+ DO i =1, cut1
+ dIFf = dIFf - i
+ END DO
+!$omp section
+ DO i =cut2, cut3
+ dIFf = dIFf - i
+ END DO
+!$omp section
+ DO i =cut4, LOOPCOUNT
+ dIFf = dIFf - i
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( dIFf .NE. 0 ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in dIFference with integers: Result was ",
+ & sum,"instead of 0."
+ END IF
+
+!**********************************************************************!
+! Test for DOubles
+!**********************************************************************!
+ dsum = 0.
+ dpt = 1
+
+ DO i=1, DOUBLE_DIGITS
+ dpt= dpt * dt
+ END DO
+ dknown_sum = (1-dpt)/(1-dt)
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(+:dsum)</ompts:check>
+!$omp section
+ DO i=0,6
+ dsum = dsum + dt**i
+ END DO
+!$omp section
+ DO i=7,12
+ dsum = dsum + dt**i
+ END DO
+!$omp section
+ DO i=13,DOUBLE_DIGITS-1
+ dsum = dsum + dt**i
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+
+ IF (dsum .NE. dknown_sum .AND.
+ & abs(dsum - dknown_sum) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in sum with DOubles: Result was ",
+ & dsum,"instead of ",dknown_sum,"(DIFference: ",
+ & dsum - dknown_sum,")"
+ END IF
+
+ dpt = 1
+ DO i=1, DOUBLE_DIGITS
+ dpt = dpt*dt
+ END DO
+
+ ddIFf = ( 1-dpt)/(1-dt)
+!$omp parallel
+!$omp sections <ompts:check>reduction(-:ddIFf)</ompts:check>
+!$omp section
+ DO i=0, 6
+ ddIFf = ddIFf - dt**i
+ END DO
+!$omp section
+ DO i=7, 12
+ ddIFf = ddIFf - dt**i
+ END DO
+!$omp section
+ DO i=13, DOUBLE_DIGITS-1
+ ddIFf = ddIFf - dt**i
+ END DO
+!$omp END sections
+!$omp END parallel
+
+ IF ( abs(ddIFf) .GT. rounding_error ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in DIFference with DOubles: Result was ",
+ & ddIFf,"instead of 0.0"
+ END IF
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(*:product)</ompts:check>
+!$omp section
+ DO i=1,3
+ product = product * i
+ END DO
+!$omp section
+ DO i=4,6
+ product = product * i
+ END DO
+!$omp section
+ DO i=7,10
+ product = product * i
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (known_product .NE. product) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Product with integers: Result was ",
+ & product," instead of",known_product
+ END IF
+
+ DO i=1,LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.and.:logic_and)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (.NOT. logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND part 1"
+ END IF
+
+
+ logic_and = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.and.:logic_and)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_and = logic_and .AND. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (logic_and) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic AND pass 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ logics(i) = .FALSE.
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.or.:logic_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (logic_or) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 1"
+ END IF
+
+ logic_or = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.or.:logic_or)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_or = logic_or .OR. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( .NOT. logic_or ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic OR part 2"
+ END IF
+
+!... Test logic EQV, unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .TRUE.
+ END DO
+
+ logic_eqv = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.eqv.:logic_eqv)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (.NOT. logic_eqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 1"
+ END IF
+
+ logic_eqv = .TRUE.
+ logics(LOOPCOUNT/2) = .FALSE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.eqv.:logic_eqv)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_eqv = logic_eqv .EQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_eqv = logic_eqv .eqv. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_eqv = logic_eqv .eqv. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( logic_eqv ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic EQV part 2"
+ END IF
+
+!... Test logic NEQV, which is unique in Fortran
+ DO i=1, LOOPCOUNT
+ logics(i) = .false.
+ END DO
+
+ logic_neqv = .false.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.neqv.:logic_neqv)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF (logic_neqv) THEN
+ result = result + 1
+ WRITE(1,*) "Error in logic NEQV part 1"
+ END IF
+
+ logic_neqv = .FALSE.
+ logics(LOOPCOUNT/2) = .TRUE.
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(.neqv.:logic_neqv)</ompts:check>
+!$omp section
+ DO i=1,cut1
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut2,cut3
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp section
+ DO i=cut4,LOOPCOUNT
+ logic_neqv = logic_neqv .NEQV. logics(i)
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( .NOT. logic_neqv ) THEN
+ result = result + 1
+ write(1,*) "Error in logic NEQV part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 1
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(iand:bit_and)</ompts:check>
+!... iand(I,J): Returns value resulting from boolean AND of
+!... pair of bits in each of I and J.
+!$omp section
+ DO i=1, cut1
+ bit_and = iand(bit_and,int_array(i))
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_and = iand(bit_and,int_array(i))
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_and = iand(bit_and,int_array(i))
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( bit_and .lt. 1 ) THEN
+ result = result + 1
+ write(1,*) "Error in IAND part 1"
+ END IF
+
+ bit_and = 1
+ int_array(LOOPCOUNT/2) = 0
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(iand:bit_and)</ompts:check>
+!$omp section
+ DO i=1, cut1
+ bit_and = iand ( bit_and, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_and = iand ( bit_and, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_and = iand ( bit_and, int_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF( bit_and .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in IAND part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(ior:bit_or)</ompts:check>
+!... Ior(I,J): Returns value resulting from boolean OR of
+!... pair of bits in each of I and J.
+!$omp section
+ DO i=1, cut1
+ bit_or = ior(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_or = ior(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_or = ior(bit_or, int_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 1"
+ END IF
+
+
+ bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(ior:bit_or)</ompts:check>
+!$omp section
+ DO i=1, cut1
+ bit_or = Ior(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut2, cut3
+ bit_or = Ior(bit_or, int_array(i) )
+ END DO
+!$omp section
+ DO i=cut4, LOOPCOUNT
+ bit_or = Ior(bit_or, int_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ior part 2"
+ END IF
+
+ DO i=1, LOOPCOUNT
+ int_array(i) = 0
+ END DO
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(ieor:exclusiv_bit_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( exclusiv_bit_or .GE. 1) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 1"
+ END IF
+
+ exclusiv_bit_or = 0
+ int_array(LOOPCOUNT/2) = 1
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(ieor:exclusiv_bit_or)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ exclusiv_bit_or = ieor(exclusiv_bit_or, int_array(i))
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( exclusiv_bit_or .LE. 0) THEN
+ result = result + 1
+ WRITE(1,*) "Error in Ieor part 2"
+ END IF
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = 10 - i
+ END DO
+
+ min_value = 65535
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(min:min_value)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ min_value = min(min_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ min_value = min(min_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ min_value = min(min_value,int_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( min_value .GT. (10-LOOPCOUNT) ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ int_array(i) = i
+ END DO
+
+ max_value = -32768
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(max:max_value)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ max_value = max(max_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ max_value = max(max_value,int_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ max_value = max(max_value,int_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( max_value .LT. LOOPCOUNT ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in integer MAX"
+ END IF
+
+!... test DOuble min, max
+ DO i=1,LOOPCOUNT
+ d_array(i) = 10 - i*dt
+ END DO
+
+ dmin = 2**10
+ dt = 0.5
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(min:dmin)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ dmin= min(dmin,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ dmin= min(dmin,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ dmin= min(dmin,d_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( dmin .GT. (10-dt) ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in DOuble MIN"
+ END IF
+
+
+ DO i=1,LOOPCOUNT
+ d_array(i) = i * dt
+ END DO
+
+ dmax= - (2**10)
+
+!$omp parallel
+<ompts:orphan>
+!$omp sections <ompts:check>reduction(max:dmax)</ompts:check>
+!$omp section
+ DO i = 1, cut1
+ dmax= max(dmax,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut2, cut3
+ dmax= max(dmax,d_array(i) )
+ END DO
+!$omp section
+ DO i = cut4, LOOPCOUNT
+ dmax= max(dmax,d_array(i) )
+ END DO
+!$omp END sections
+</ompts:orphan>
+!$omp END parallel
+
+ IF ( dmax .LT. LOOPCOUNT*dt ) THEN
+ result = result + 1
+ WRITE(1,*) "Error in DOuble MAX"
+ END IF
+
+ IF ( result .EQ. 0 ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+
+ CLOSE(2)
+
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/single_copyprivate.f b/final/testsuite/fortran/single_copyprivate.f
new file mode 100644
index 0000000..0878a66
--- /dev/null
+++ b/final/testsuite/fortran/single_copyprivate.f
@@ -0,0 +1,41 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single copyprivate directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single copyprivate</ompts:directive>
+<ompts:dependences>omp parllel,omp critical</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>single_copyprivate</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER omp_get_thread_num
+ INCLUDE "omp_testsuite.f"
+<ompts:orphan:vars>
+ INTEGER i,j,thread,nr_iterations,result
+ COMMON /orphvars/ nr_iterations,result
+</ompts:orphan:vars>
+
+ result=0
+ nr_iterations=0
+
+!$omp parallel private(i,j,thread)
+ <ompts:orphan>
+ DO i=0,LOOPCOUNT-1
+ thread=OMP_GET_THREAD_NUM()
+!$omp single
+ nr_iterations=nr_iterations+1
+ j=i
+!$omp end single <ompts:check>copyprivate(j)</ompts:check>
+!$omp critical
+ result=result+j-i;
+!$omp end critical
+ END DO
+ </ompts:orphan>
+!$omp end parallel
+ IF(result .EQ. 0 .AND.
+ & nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/single_nowait.f b/final/testsuite/fortran/single_nowait.f
new file mode 100644
index 0000000..f944af5
--- /dev/null
+++ b/final/testsuite/fortran/single_nowait.f
@@ -0,0 +1,50 @@
+<ompts:test>
+<ompts:testdescription></ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp single nowait</ompts:directive>
+<ompts:dependences>omp critical,omp atomic</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>single_nowait</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result, total_iterations, my_iterations,i
+ INCLUDE "omp_testsuite.f"
+<ompts:orphan:vars>
+ INTEGER nr_iterations
+ COMMON /orphvars/ nr_iterations
+</ompts:orphan:vars>
+
+ result=0
+ nr_iterations=0
+ total_iterations=0
+ my_iterations=0
+
+!$omp parallel private(i)
+ DO i=0, LOOPCOUNT -1
+ <ompts:orphan>
+<ompts:check>!$omp single</ompts:check>
+!$omp atomic
+ nr_iterations = nr_iterations + 1
+<ompts:check>!$omp end single nowait</ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end parallel
+!$omp parallel private(i,my_iterations)
+ my_iterations = 0
+ DO i=0, LOOPCOUNT -1
+<ompts:check>!$omp single</ompts:check>
+ my_iterations = my_iterations + 1
+<ompts:check>!$omp end single nowait</ompts:check>
+ END DO
+!$omp critical
+ total_iterations = total_iterations + my_iterations
+!$omp end critical
+!$omp end parallel
+ IF ( nr_iterations .EQ. LOOPCOUNT .AND.
+ & total_iterations .EQ. LOOPCOUNT ) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END FUNCTION
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/single_private.f b/final/testsuite/fortran/single_private.f
new file mode 100644
index 0000000..7ad4a6a
--- /dev/null
+++ b/final/testsuite/fortran/single_private.f
@@ -0,0 +1,51 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp single private directive.</ompts:testdescription>
+<ompts:ompversion>2.0</ompts:ompversion>
+<ompts:directive>omp singel private</ompts:directive>
+<ompts:dependences>omp critical,omp flush,omp single nowait</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>single_private</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER nr_iterations, i
+ <ompts:orphan:vars>
+ INTEGER result
+ INTEGER nr_threads_in_single, myresult, myit
+ COMMON /orphvars/ result,nr_iterations
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+ nr_threads_in_single=0
+ result=0
+ myresult=0
+ myit=0
+ nr_iterations=0
+!$omp parallel private(i, myresult, myit)
+<ompts:orphan>
+ myresult = 0
+ myit = 0
+ nr_threads_in_single=0
+!$omp barrier
+ DO i=0, LOOPCOUNT -1
+!$omp single <ompts:check>private(nr_threads_in_single)</ompts:check>
+ nr_threads_in_single = 0
+!$omp flush
+ nr_threads_in_single = nr_threads_in_single + 1
+!$omp flush
+ myit = myit + 1
+ myresult = myresult + nr_threads_in_single
+!$omp end single nowait
+ END DO
+!$omp critical
+ result = result + nr_threads_in_single
+ nr_iterations = nr_iterations + myit
+!$omp end critical
+</ompts:orphan>
+!$omp end parallel
+ WRITE(1,*) "result is",result,"nr_it is",nr_iterations
+ IF ( result .EQ. 0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname> = 1
+ ELSE
+ <testfunctionname></testfunctionname> = 0
+ END IF
+ END
+</ompts:testcode>
+</ompts:test>
diff --git a/final/testsuite/fortran/testlist-f.txt b/final/testsuite/fortran/testlist-f.txt
new file mode 100644
index 0000000..41766e0
--- /dev/null
+++ b/final/testsuite/fortran/testlist-f.txt
@@ -0,0 +1,45 @@
+do_firstprivate.f
+do_lastprivate
+do_ordered
+do_private
+do_reduction
+#do_schedule_dynamic
+#do_schedule_guided
+#do_schedule_static
+has_openmp
+#omp_atomic
+omp_barrier
+omp_copyin
+omp_critical
+#omp_flush
+omp_get_num_threads
+omp_in_parallel
+omp_lock
+omp_master
+omp_nest_lock
+omp_nest_testlock
+omp_nested
+omp_num_threads
+omp_testlock
+omp_testsuite
+omp_threadprivate
+#omp_ticks_time
+#omp_workshare
+#omp_wtime
+#par_dofirstprivate
+#par_do_lastprivate
+#par_do_ordered
+#par_do_private
+#par_do_reduction
+#par_sectionirstprivate.f
+#par_section_lastprivate
+#par_section_private
+#par_section_reduction
+#sectionirstprivate.f
+#section_lastprivate
+#section_private
+#section_reduction
+#single
+#single_copyprivate
+#single_nowait
+#single_private
diff --git a/final/testsuite/omp_my_sleep.f b/final/testsuite/omp_my_sleep.f
new file mode 100644
index 0000000..e3cb04b
--- /dev/null
+++ b/final/testsuite/omp_my_sleep.f
@@ -0,0 +1,26 @@
+! Utility functions to have a sleep function with better resolution and
+! which only stops one thread.
+
+ subroutine my_sleep(sleeptime)
+ implicit none
+ double precision :: sleeptime
+ integer :: u
+ integer :: t(8)
+ integer :: ms1, ms2
+ integer :: cnt
+
+ u = sleeptime * 1000
+
+ call date_and_time(values=t)
+
+ ! calculate start time in ms
+ ms1 = t(8) + t(7)*1000 + t(6)*60000 + t(5)*3600000
+
+ ms2 = ms1
+ cnt = 0
+ do while ( (ms2 - ms1) < u)
+ call date_and_time(values=t)
+ ms2 = t(8) + t(7)*1000 + t(6)*60000 + t(5)*3600000
+ cnt = cnt+1
+ end do
+ end subroutine
diff --git a/final/testsuite/omp_my_sleep.h b/final/testsuite/omp_my_sleep.h
new file mode 100644
index 0000000..8390a5b
--- /dev/null
+++ b/final/testsuite/omp_my_sleep.h
@@ -0,0 +1,35 @@
+#ifndef MY_SLEEP_H
+#define MY_SLEEP_H
+
+#include <stdio.h>
+#include<stdlib.h>
+#include<unistd.h>
+
+#include <sys/times.h>
+#include <sys/time.h>
+#include <time.h>
+#include <errno.h>
+
+/*! Utility function to have a sleep function with better resolution and which only stops one thread. */
+
+static void my_sleep(double sleeptime){
+ struct timeval tv;
+ struct timezone tzp;
+ double start;
+ double real;
+ if(gettimeofday(&tv,&tzp)!=0) {
+ perror("get_time: ");
+ exit(-1);
+ }
+ start = (double)tv.tv_sec + ((double)tv.tv_usec/1000000.0);
+ real=start;
+ while( (real-start)<sleeptime){
+ if(gettimeofday(&tv,&tzp)!=0) {
+ perror("get_time: ");
+ exit(-1);
+ }
+ real = (double)tv.tv_sec + ((double)tv.tv_usec/1000000.0);
+ }
+}
+
+#endif
diff --git a/final/testsuite/omp_testsuite.f b/final/testsuite/omp_testsuite.f
new file mode 100644
index 0000000..e135313
--- /dev/null
+++ b/final/testsuite/omp_testsuite.f
@@ -0,0 +1,14 @@
+ INTEGER N !The number of times each test is run
+ PARAMETER (N=1)
+ CHARACTER*8 OMPTS_VERSION
+ PARAMETER (OMPTS_VERSION="3.0.a")
+ INTEGER LOOPCOUNT !The number of times each loop is run
+ PARAMETER (LOOPCOUNT=1000)
+ DOUBLE PRECISION SLEEPTIME
+ PARAMETER (SLEEPTIME = .01)
+ DOUBLE PRECISION SLEEPTIME_LONG
+ PARAMETER (SLEEPTIME_LONG = 0.5)
+ INTEGER NUM_TASKS
+ PARAMETER (NUM_TASKS=25)
+ INTEGER MAX_TASKS_PER_THREAD
+ PARAMETER (MAX_TASKS_PER_THREAD=5)
diff --git a/final/testsuite/omp_testsuite.h b/final/testsuite/omp_testsuite.h
new file mode 100644
index 0000000..a808d92
--- /dev/null
+++ b/final/testsuite/omp_testsuite.h
@@ -0,0 +1,164 @@
+/* Global headerfile of the OpenMP Testsuite */
+
+/* This file was created with the ompts_makeHeader.pl script using the following opions: */
+/* -f=ompts-c.conf -t=c */
+
+
+#ifndef OMP_TESTSUITE_H
+#define OMP_TESTSUITE_H
+
+#include <stdio.h>
+#include <omp.h>
+
+/* Version info */
+/**********************************************************/
+#define OMPTS_VERSION "3.0a"
+
+/* General */
+/**********************************************************/
+#define LOOPCOUNT 1000
+#define REPETITIONS 20
+/* following times are in seconds */
+#define SLEEPTIME 0.01
+#define SLEEPTIME_LONG 0.5
+
+/* Definitions for tasks */
+/**********************************************************/
+#define NUM_TASKS 25
+#define MAX_TASKS_PER_THREAD 5
+int test_omp_parallel_for_ordered(FILE * logfile); /* Test for omp parallel for ordered */
+int crosstest_omp_parallel_for_ordered(FILE * logfile); /* Crosstest for omp parallel for ordered */
+int test_omp_task_imp_firstprivate(FILE * logfile); /* Test for omp task */
+int crosstest_omp_task_imp_firstprivate(FILE * logfile); /* Crosstest for omp task */
+int test_omp_taskwait(FILE * logfile); /* Test for omp taskwait */
+int crosstest_omp_taskwait(FILE * logfile); /* Crosstest for omp taskwait */
+int test_omp_barrier(FILE * logfile); /* Test for omp barrier */
+int crosstest_omp_barrier(FILE * logfile); /* Crosstest for omp barrier */
+int test_omp_parallel_for_if(FILE * logfile); /* Test for omp parallel for if */
+int crosstest_omp_parallel_for_if(FILE * logfile); /* Crosstest for omp parallel for if */
+int test_omp_atomic(FILE * logfile); /* Test for omp atomic */
+int crosstest_omp_atomic(FILE * logfile); /* Crosstest for omp atomic */
+int test_omp_get_num_threads(FILE * logfile); /* Test for omp_get_num_threads */
+int crosstest_omp_get_num_threads(FILE * logfile); /* Crosstest for omp_get_num_threads */
+int test_omp_section_private(FILE * logfile); /* Test for omp section private */
+int crosstest_omp_section_private(FILE * logfile); /* Crosstest for omp section private */
+int test_omp_parallel_if(FILE * logfile); /* Test for omp parallel if */
+int crosstest_omp_parallel_if(FILE * logfile); /* Crosstest for omp parallel if */
+int test_omp_lock(FILE * logfile); /* Test for omp_lock */
+int crosstest_omp_lock(FILE * logfile); /* Crosstest for omp_lock */
+int test_omp_parallel_shared(FILE * logfile); /* Test for omp parallel shared */
+int crosstest_omp_parallel_shared(FILE * logfile); /* Crosstest for omp parallel shared */
+int test_omp_task_imp_shared(FILE * logfile); /* Test for omp task */
+int crosstest_omp_task_imp_shared(FILE * logfile); /* Crosstest for omp task */
+int test_omp_task_private(FILE * logfile); /* Test for omp task private */
+int crosstest_omp_task_private(FILE * logfile); /* Crosstest for omp task private */
+int test_omp_section_lastprivate(FILE * logfile); /* Test for omp section lastprivate */
+int crosstest_omp_section_lastprivate(FILE * logfile); /* Crosstest for omp section lastprivate */
+int test_omp_parallel_firstprivate(FILE * logfile); /* Test for omp parallel firstprivate */
+int crosstest_omp_parallel_firstprivate(FILE * logfile); /* Crosstest for omp parallel firstprivate */
+int test_omp_for_auto(FILE * logfile); /* Test for omp for auto */
+int crosstest_omp_for_auto(FILE * logfile); /* Crosstest for omp for auto */
+int test_omp_for_schedule_static(FILE * logfile); /* Test for omp for schedule(static) */
+int crosstest_omp_for_schedule_static(FILE * logfile); /* Crosstest for omp for schedule(static) */
+int test_omp_threadprivate_for(FILE * logfile); /* Test for omp threadprivate */
+int crosstest_omp_threadprivate_for(FILE * logfile); /* Crosstest for omp threadprivate */
+int test_omp_task_untied(FILE * logfile); /* Test for omp task untied */
+int crosstest_omp_task_untied(FILE * logfile); /* Crosstest for omp task untied */
+int test_omp_parallel_private(FILE * logfile); /* Test for omp parallel private */
+int crosstest_omp_parallel_private(FILE * logfile); /* Crosstest for omp parallel private */
+int test_omp_single_nowait(FILE * logfile); /* Test for omp single nowait */
+int crosstest_omp_single_nowait(FILE * logfile); /* Crosstest for omp single nowait */
+int test_omp_critical(FILE * logfile); /* Test for omp critical */
+int crosstest_omp_critical(FILE * logfile); /* Crosstest for omp critical */
+int test_omp_get_wtick(FILE * logfile); /* Test for omp_get_wtick */
+int crosstest_omp_get_wtick(FILE * logfile); /* Crosstest for omp_get_wtick */
+int test_omp_single(FILE * logfile); /* Test for omp single */
+int crosstest_omp_single(FILE * logfile); /* Crosstest for omp single */
+int test_omp_parallel_sections_reduction(FILE * logfile); /* Test for omp parallel sections reduction */
+int crosstest_omp_parallel_sections_reduction(FILE * logfile); /* Crosstest for omp parallel sections reduction */
+int test_omp_taskyield(FILE * logfile); /* Test for omp taskyield */
+int crosstest_omp_taskyield(FILE * logfile); /* Crosstest for omp taskyield */
+int test_has_openmp(FILE * logfile); /* Test for _OPENMP */
+int crosstest_has_openmp(FILE * logfile); /* Crosstest for _OPENMP */
+int test_omp_parallel_for_lastprivate(FILE * logfile); /* Test for omp parallel for lastprivate */
+int crosstest_omp_parallel_for_lastprivate(FILE * logfile); /* Crosstest for omp parallel for lastprivate */
+int test_omp_parallel_sections_lastprivate(FILE * logfile); /* Test for omp parallel sections lastprivate */
+int crosstest_omp_parallel_sections_lastprivate(FILE * logfile); /* Crosstest for omp parallel sections lastprivate */
+int test_omp_for_lastprivate(FILE * logfile); /* Test for omp for lastprivate */
+int crosstest_omp_for_lastprivate(FILE * logfile); /* Crosstest for omp for lastprivate */
+int test_omp_parallel_sections_firstprivate(FILE * logfile); /* Test for omp parallel sections firstprivate */
+int crosstest_omp_parallel_sections_firstprivate(FILE * logfile); /* Crosstest for omp parallel sections firstprivate */
+int test_omp_parallel_for_reduction(FILE * logfile); /* Test for omp parallel for reduction */
+int crosstest_omp_parallel_for_reduction(FILE * logfile); /* Crosstest for omp parallel for reduction */
+int test_omp_test_lock(FILE * logfile); /* Test for omp_test_lock */
+int crosstest_omp_test_lock(FILE * logfile); /* Crosstest for omp_test_lock */
+int test_omp_parallel_for_firstprivate(FILE * logfile); /* Test for omp parallel for firstprivate */
+int crosstest_omp_parallel_for_firstprivate(FILE * logfile); /* Crosstest for omp parallel for firstprivate */
+int test_omp_parallel_sections_private(FILE * logfile); /* Test for omp parallel sections private */
+int crosstest_omp_parallel_sections_private(FILE * logfile); /* Crosstest for omp parallel sections private */
+int test_omp_parallel_num_threads(FILE * logfile); /* Test for omp parellel num_threads */
+int crosstest_omp_parallel_num_threads(FILE * logfile); /* Crosstest for omp parellel num_threads */
+int test_omp_for_reduction(FILE * logfile); /* Test for omp for reduction */
+int crosstest_omp_for_reduction(FILE * logfile); /* Crosstest for omp for reduction */
+int test_omp_sections_nowait(FILE * logfile); /* Test for omp parallel sections nowait */
+int crosstest_omp_sections_nowait(FILE * logfile); /* Crosstest for omp parallel sections nowait */
+int test_omp_parallel_reduction(FILE * logfile); /* Test for omp parallel reduction */
+int crosstest_omp_parallel_reduction(FILE * logfile); /* Crosstest for omp parallel reduction */
+int test_omp_nested(FILE * logfile); /* Test for omp_nested */
+int crosstest_omp_nested(FILE * logfile); /* Crosstest for omp_nested */
+int test_omp_threadprivate(FILE * logfile); /* Test for omp threadprivate */
+int crosstest_omp_threadprivate(FILE * logfile); /* Crosstest for omp threadprivate */
+int test_omp_sections_reduction(FILE * logfile); /* Test for omp sections reduction */
+int crosstest_omp_sections_reduction(FILE * logfile); /* Crosstest for omp sections reduction */
+int test_omp_for_schedule_guided(FILE * logfile); /* Test for omp for schedule(guided) */
+int crosstest_omp_for_schedule_guided(FILE * logfile); /* Crosstest for omp for schedule(guided) */
+int test_omp_task_final(FILE * logfile); /* Test for omp task final */
+int crosstest_omp_task_final(FILE * logfile); /* Crosstest for omp task final */
+int test_omp_parallel_for_private(FILE * logfile); /* Test for omp parallel for private */
+int crosstest_omp_parallel_for_private(FILE * logfile); /* Crosstest for omp parallel for private */
+int test_omp_flush(FILE * logfile); /* Test for omp flush */
+int crosstest_omp_flush(FILE * logfile); /* Crosstest for omp flush */
+int test_omp_for_private(FILE * logfile); /* Test for omp for private */
+int crosstest_omp_for_private(FILE * logfile); /* Crosstest for omp for private */
+int test_omp_for_ordered(FILE * logfile); /* Test for omp for ordered */
+int crosstest_omp_for_ordered(FILE * logfile); /* Crosstest for omp for ordered */
+int test_omp_single_copyprivate(FILE * logfile); /* Test for omp single copyprivate */
+int crosstest_omp_single_copyprivate(FILE * logfile); /* Crosstest for omp single copyprivate */
+int test_omp_task_if(FILE * logfile); /* Test for omp task if */
+int crosstest_omp_task_if(FILE * logfile); /* Crosstest for omp task if */
+int test_omp_section_firstprivate(FILE * logfile); /* Test for omp firstprivate */
+int crosstest_omp_section_firstprivate(FILE * logfile); /* Crosstest for omp firstprivate */
+int test_omp_for_schedule_static_3(FILE * logfile); /* Test for omp for schedule(static) */
+int crosstest_omp_for_schedule_static_3(FILE * logfile); /* Crosstest for omp for schedule(static) */
+int test_omp_task_firstprivate(FILE * logfile); /* Test for omp task firstprivate */
+int crosstest_omp_task_firstprivate(FILE * logfile); /* Crosstest for omp task firstprivate */
+int test_omp_for_collapse(FILE * logfile); /* Test for omp for collapse */
+int crosstest_omp_for_collapse(FILE * logfile); /* Crosstest for omp for collapse */
+int test_omp_in_parallel(FILE * logfile); /* Test for omp_in_parallel */
+int crosstest_omp_in_parallel(FILE * logfile); /* Crosstest for omp_in_parallel */
+int test_omp_for_schedule_dynamic(FILE * logfile); /* Test for omp for schedule(dynamic) */
+int crosstest_omp_for_schedule_dynamic(FILE * logfile); /* Crosstest for omp for schedule(dynamic) */
+int test_omp_for_firstprivate(FILE * logfile); /* Test for omp for firstprivate */
+int crosstest_omp_for_firstprivate(FILE * logfile); /* Crosstest for omp for firstprivate */
+int test_omp_master(FILE * logfile); /* Test for omp master */
+int crosstest_omp_master(FILE * logfile); /* Crosstest for omp master */
+int test_omp_single_private(FILE * logfile); /* Test for omp singel private */
+int crosstest_omp_single_private(FILE * logfile); /* Crosstest for omp singel private */
+int test_omp_task(FILE * logfile); /* Test for omp task */
+int crosstest_omp_task(FILE * logfile); /* Crosstest for omp task */
+int test_omp_parallel_default(FILE * logfile); /* Test for omp parallel default */
+int crosstest_omp_parallel_default(FILE * logfile); /* Crosstest for omp parallel default */
+int test_omp_for_nowait(FILE * logfile); /* Test for omp parallel for nowait */
+int crosstest_omp_for_nowait(FILE * logfile); /* Crosstest for omp parallel for nowait */
+int test_omp_test_nest_lock(FILE * logfile); /* Test for omp_test_nest_lock */
+int crosstest_omp_test_nest_lock(FILE * logfile); /* Crosstest for omp_test_nest_lock */
+int test_omp_nest_lock(FILE * logfile); /* Test for omp_nest_lock */
+int crosstest_omp_nest_lock(FILE * logfile); /* Crosstest for omp_nest_lock */
+int test_omp_parallel_copyin(FILE * logfile); /* Test for omp parallel copyin */
+int crosstest_omp_parallel_copyin(FILE * logfile); /* Crosstest for omp parallel copyin */
+int test_omp_master_3(FILE * logfile); /* Test for omp master */
+int crosstest_omp_master_3(FILE * logfile); /* Crosstest for omp master */
+int test_omp_get_wtime(FILE * logfile); /* Test for omp_get_wtime */
+int crosstest_omp_get_wtime(FILE * logfile); /* Crosstest for omp_get_wtime */
+
+#endif
diff --git a/final/testsuite/ompts-c.conf b/final/testsuite/ompts-c.conf
new file mode 100644
index 0000000..f10b950
--- /dev/null
+++ b/final/testsuite/ompts-c.conf
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <omp.h>
+
+/* Version info */
+/**********************************************************/
+#define OMPTS_VERSION "3.0a"
+
+/* General */
+/**********************************************************/
+#define LOOPCOUNT 1000
+#define REPETITIONS 20
+/* following times are in seconds */
+#define SLEEPTIME 0.01
+#define SLEEPTIME_LONG 0.5
+
+/* Definitions for tasks */
+/**********************************************************/
+#define NUM_TASKS 25
+#define MAX_TASKS_PER_THREAD 5
diff --git a/final/testsuite/ompts-f.conf b/final/testsuite/ompts-f.conf
new file mode 100644
index 0000000..525af30
--- /dev/null
+++ b/final/testsuite/ompts-f.conf
@@ -0,0 +1 @@
+!Empty config file
diff --git a/final/testsuite/ompts.conf b/final/testsuite/ompts.conf
new file mode 100755
index 0000000..33135b5
--- /dev/null
+++ b/final/testsuite/ompts.conf
@@ -0,0 +1,26 @@
+<config>
+<globalconfig>
+<logfile>ompts.log</logfile>
+<singletesttimeout>120</singletesttimeout>
+<displayerrors>1</displayerrors>
+<displaywarnings>0</displaywarnings>
+<envsetthreadscommand>OMP_NUM_THREADS=%n; export OMP_NUM_THREADS;</envsetthreadscommand>
+<resultsfile>results.txt</resultsfile>
+<numthreads>8</numthreads>
+</globalconfig>
+
+<languages>
+<language>
+<languagename>c</languagename>
+<dir>c</dir>
+<fileextension>c</fileextension>
+<templateparsername>template_parser_c.pl</templateparsername>
+</language>
+<language>
+<languagename>fortran</languagename>
+<dir>fortran</dir>
+<fileextension>f</fileextension>
+<templateparsername>template_parser_fortran.pl</templateparsername>
+</language>
+</languages>
+</config>
diff --git a/final/testsuite/ompts_makeHeader.pl b/final/testsuite/ompts_makeHeader.pl
new file mode 100755
index 0000000..7212cec
--- /dev/null
+++ b/final/testsuite/ompts_makeHeader.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/perl -w
+
+# ompts_makeHeader [options] -f=NAME -t=DIR
+#
+# Creats the headerfile for the OpenMP-Testsuite out of the templatefiles
+# witch are in the default/explicitely specified dir and the settings in the
+# given config file.
+#
+# ATTENTION:
+# At the moment it builts only a c-headerfile!
+#
+# -f=FILENAME: Using file FILENAME as configfile
+# -t=DIR: Directory holding the template files
+#
+# options
+# -i=FILENAME: Include other Headerfile. The files to be included must be specified
+# after setting this option. (Not implemented yet.)
+# -o=FILENAME: outputfilename (default is "omp_testsuite.h")
+
+$headerfile = "\/\* Global headerfile of the OpenMP Testsuite \*\/\n\n\/\* This file was created with the ompts_makeHeader.pl script using the following opions:\ *\/\n\/\* ";
+if(@ARGV > 0)
+{
+ foreach $opt (@ARGV)
+ {
+ $headerfile .= "$opt ";
+ }
+}
+else
+{
+ $headerfile .= "No options were specified";
+}
+$headerfile .=" \*\/\n\n\n";
+
+use Getopt::Long;
+GetOptions("-o=s" => \$outfile, "-f=s" =>\$configfile, "-t=s" => \$templatedir, "-i=s" => \$include);
+
+$include = "";
+
+
+# Getting and verifying the necessary options:
+if(!$configfile) {
+ die "Config file name is missing.";
+}
+else {
+ if (!(-e $configfile)) {
+ die "Could not find config file $configfile.";
+ }
+}
+
+if(!$templatedir) {
+ die "Directoryname is missing.";
+}
+
+if(!$outfile){
+ $outfile = "omp_testsuite.h"; # setting default value for the headerfile
+}
+
+
+
+#@includefiles; # list holing extra includefiles specified by the user
+
+
+# generating the head of the includeguard:
+$headerfile .= "\#ifndef OMP_TESTSUITE_H\n\#define OMP_TESTSUITE_H\n\n";
+
+# inserting general settings out of the configfile:
+open(OMPTS_CONF,$configfile) or die "Could not open the global config file $configfile.";
+while(<OMPTS_CONF>){
+ $headerfile .= $_;
+}
+close(OMPTS_CONF);
+
+# searching the tests:
+opendir TEMPLATEDIR, $templatedir or die "Could not open dir $templatedir.";
+@templates = grep /(.*)\.c/, readdir TEMPLATEDIR;
+closedir TEMPLATEDIR;
+
+# inserting the function declarations:
+foreach $template (@templates){
+ $source = "";
+ open(TEMPLATE,$templatedir."/".$template) or die "Could not open the following sourcefile: ".$templatedir."/".$template;
+ while(<TEMPLATE>){
+ $source .= $_;
+ }
+ close(TEMPLATE);
+ $source =~ /\<ompts\:testcode\:functionname\>(.*)\<\/ompts\:testcode\:functionname\>/;
+ $functionname = $1."(FILE \* logfile);";
+ $source =~ /\<ompts\:directive\>(.*)\<\/ompts\:directive\>/;
+ $directive = $1;
+ $headerfile .= "int test_".$functionname." /* Test for ".$directive." */\n";
+ $headerfile .= "int crosstest_".$functionname." /* Crosstest for ".$directive." */\n";
+}
+
+# inserting the end of the includeguard:
+$headerfile .= "\n#endif";
+
+# craeting the headerfile:
+open(OUTFILE,">".$outfile) or die "Could not create the haedaerfile ($outfile)";
+print OUTFILE $headerfile."\n";
+close(OUTFILE);
+
diff --git a/final/testsuite/ompts_parser.pl b/final/testsuite/ompts_parser.pl
new file mode 100755
index 0000000..98d7271
--- /dev/null
+++ b/final/testsuite/ompts_parser.pl
@@ -0,0 +1,167 @@
+#!/usr/bin/env perl
+
+# ompts_parser [option] SOURCEFILE
+#
+# Creats the tests and the crosstests for the OpenMP-Testsuite out of an templatefiles which are given to the programm.
+#
+# Options:
+# -test: make test
+# -crosstest: make crosstest
+# -orphan if possible generate tests using orphan regions (not implemented yet)
+# -lang=LANG preprocessing for language LANG, where LANG is one of the following languages:
+# c, fortran
+# -o=FILENAME outputfile (only when one templatefile is specified)
+
+
+# Using Getopt::long to extract the programm options
+use Getopt::Long;
+# Using functions: Set of subroutines to modify the testcode
+use ompts_parserFunctions;
+
+# Getting given options
+GetOptions("-test" => \$test,"-crosstest" => \$crosstest, "-o=s" => \$outputfile, "-orphan" => \$orphan, "-f!", "-lang=s" => \$language);
+
+# Remaining arguments are the templatefiles.
+# Adding these to the list of to be parsed files if they exist.
+foreach $file(@ARGV)
+{
+ if(-e $file){ push(@sourcefiles,$file); }
+ else { print "Error: Unknown Option $file\n"; }
+}
+
+# Checking if options were valid:
+#################################################################
+# preparations and checks for sourcefiles
+if(@sourcefiles == 0){die "No files to parse are specified!";}
+if($outputfile && (@sourcefiles != 1 || ($test && $crosstest) ) ){die "There were multiple files for one outputfiles specified!";}
+# preparations fopr orphan tests
+if($orphan){ $orphanprefix = "orphaned"; }
+else { $orphanprefix = ""; }
+# preparations for test / crosstest
+if($test){push(@testtypes,"test");
+# %checks['test']="check";
+}
+if($crosstest){push(@testtypes,"ctest");
+# %checks['crosstest']="crosscheck";
+}
+# preparations and checks for language
+if($language eq"c") { $extension = "c";}
+elsif($language eq "fortran" or $language eq "f") { $language = "f"; $extension = "f";}
+else { die "You must specify a valid language!"; }
+
+
+# Reading the templates for the tests into @sources
+foreach $srcfile (@sourcefiles)
+{
+ # Reading the content of the current sourcefile into $src
+ open(TEST,$srcfile) or print "Error: Could not open template $srcfile\n";
+ while(<TEST>){ $src .= $_; }
+ close(TEST);
+ # Adding the content $src to the end of the list @sources
+ push(@sources,$src);
+}
+
+# Extracting the source for the mainprogramm and saving it in $mainprocsrc
+if($language eq "c") { $mainprocsrc = "ompts_standaloneProc.c"; }
+elsif($language eq "f") { $mainprocsrc = "ompts_standaloneProc.f"; }
+open(MAINPROC,$mainprocsrc) or die "Could not open the sourcefile for the main program $mainprocsrc";
+while(<MAINPROC>){
+ $mainproc .= $_;
+}
+
+foreach $testtype (@testtypes)
+{
+ foreach $src(@sources)
+ {
+# Some temporary testinformation:
+ ($description) = get_tag_values('ompts:testdescription',$src);
+ ($directive) = get_tag_values('ompts:directive',$src);
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$src);
+
+ open(OUTFILE,">".$language.$orphanprefix.$testtype."_".$functionname.".".$extension) or die("Could not create the output file for $directive");
+
+# Creating the source for the test:
+ ($code) = get_tag_values('ompts:testcode',$src);
+# Putting together the functions and the mainprogramm:
+ $code .= $mainproc;
+
+# get the parameters <ompts:orphan:params> by joon
+# thanks to Dr. Yin Ma in Absoft
+ ($parms) = get_tag_values('ompts:orphan:parms',$code);
+ ($parms) = leave_single_space($parms);
+# to remove parameters tag between 'ompts:orphan:parms' by joon
+ ($code) = replace_tags('ompts:orphan:parms','',$code);
+
+# Make modifications for the orphaned testversion if necessary:
+ if($orphan)
+ {
+# Get the global variables:
+ @defs = get_tag_values("ompts:orphan:vars",$code);
+ $orphvarsdef = "";
+ foreach $_ (@defs)
+ {
+ #print $_;
+ if(not /^[ ]*$/gs) { $orphvarsdef = join("\n",$orphvarsdef,$_); }
+ #print "OK\n".$orphvarsdef;
+ }
+ if($language eq "f")
+ {
+# Generate the orphan subroutines:
+ $orphfuncs = create_orph_fortranfunctions("$testtype_", $code);
+# Replace orphan regions by functioncalls:
+ ($code) = orphan_regions2fortranfunctions( "$testtype_", ($code) );
+ ($code) = enlarge_tags('ompts:orphan:vars','','',($code));
+ ($code) = enlarge_tags('ompts:orphan:parms','','',($code));
+ #to find orphan call statemetn and add parameters
+
+# Put all together:
+ $code = $code . $orphfuncs;
+ }
+ elsif($language eq "c")
+ {
+# Generate predeclarations for orpahn functions:
+ $orphfuncsdefs = orph_functions_declarations("$testtype_",$code);
+# Generate the orphan functions:
+ $orphfuncs = create_orph_cfunctions("$testtype_",$code);
+# Repla:e orphan regions by functioncalls:
+ ($code) = orphan_regions2cfunctions( "$testtype_", ($code) );
+# Deleting the former declarations of the variables in the orphan regions:
+ ($code) = delete_tags('ompts:orphan:vars',($code));
+# Put all together:
+ $code = "#include \"omp_testsuite.h\"\n".$orphvarsdef . $orphfuncsdefs . $code . $orphfuncs;
+ }
+ else {
+ print "An error occurred!";
+ }
+ }
+# remove parameters between <ompts:orphan:parms> tags, added by joon
+ ($code)= replace_tags('ompts:orphan:parms',$code);
+
+# Remove the marks for the orpahn regions and its variables:
+ ($code) = enlarge_tags('ompts:orphan','','',($code));
+ ($code) = enlarge_tags('ompts:orphan:vars','','',($code));
+
+# remove parameters between for orphaned directive parametes, added by joon
+ ($code) = enlarge_tags('ompts:orphan:parms','','',($code));
+
+ if($testtype eq "test") {
+# Remove the marks for the testcode and remove the code for the crosstests:
+ ($code) = enlarge_tags('ompts:check','','',($code));
+ ($code) = delete_tags('ompts:crosscheck',($code));
+ }
+ elsif($testtype eq "ctest") {
+# Remove the marks for the crosstestcode and remove the code for the tests:
+ ($code) = enlarge_tags('ompts:crosscheck','','',($code));
+ ($code) = delete_tags('ompts:check',($code));
+ }
+# Making some final modifications:
+ ($code) = replace_tags('testfunctionname',$testtype."_".$functionname,($code));
+ ($code) = replace_tags('directive',$directive,($code));
+ ($code) = replace_tags('description',$description,($code));
+ ($code) = enlarge_tags('ompts:testcode:functionname',$testtype."_",'',($code) );
+# $code = "\#include \"omp_testsuite.h\"\n".$code;
+# Write the result into the file and close it:
+ print OUTFILE $code;
+ close(OUTFILE);
+ }
+}
diff --git a/final/testsuite/ompts_parserFunctions.pm b/final/testsuite/ompts_parserFunctions.pm
new file mode 100755
index 0000000..38cedb0
--- /dev/null
+++ b/final/testsuite/ompts_parserFunctions.pm
@@ -0,0 +1,280 @@
+#!/usr/bin/perl -w
+
+# functions.pm
+# This package contains a set of subroutines to modify the templates for the openMP Testuite.
+
+
+################################################################################
+# subroutines to extract, modify or delete tags from the template
+################################################################################
+
+# LIST get_tag_values( $tagname, $string )
+# subrutine to get the text encloded by a tag.
+# Returns a list containing the inner texts of the found tags
+sub get_tag_values
+{
+ my ( $tagname, $string );
+ ( $tagname, $string ) = @_;
+ my (@tmp,@tmp2);
+ @tmp = split(/\<$tagname\>/,$string);
+ foreach $_(@tmp){
+ push(@tmp2,split(/\<\/$tagname\>/));
+ }
+ my(@result,$i);
+ $i=1; # couter to get only every second item
+ foreach $_(@tmp2){
+ if($i%2 eq 0){
+ push(@result,$_);
+ }
+ $i++;
+ }
+ return @result;
+}
+
+# LIST replace_tags( $tagname, $replacestring, @list )
+# subrutine to replace tags by a replacestring.
+# Returns a list of the srings after conversion.
+sub replace_tags
+{
+ my ($tagname, $replacestring, @stringlist, @result);
+ ($tagname, $replacestring, @stringlist) = @_;
+ foreach $_(@stringlist) {
+ s#\<$tagname\>(.*?)\<\/$tagname\>#$replacestring#gs;
+ push(@result,$_);
+ }
+ return @result;
+}
+
+# LIST enlarge_tags( $tagname, $before, $after, @list )
+# subrutine to replace tags by the tags added by a string before and after.
+# Returns a list of the srings after conversion.
+sub enlarge_tags
+{
+ my ($tagname, $before, $after, @stringlist,@result);
+ ($tagname, $before, $after, @stringlist) = @_;
+ foreach $_(@stringlist) {
+ s#\<$tagname\>(.*?)\<\/$tagname\>#$before$1$after#gs;
+ push(@result,$_);
+ }
+ return @result;
+}
+
+# LIST delete_tags( $tagname, @list )
+# subrutine to delete tags in a string.
+# Returns a list of the cleared strings
+sub delete_tags
+{
+ my($tagname,@stringlist);
+ ($tagname, @stringlist) = @_;
+ my(@result);
+ foreach $_(@stringlist) {
+ s#\<$tagname\>(.*?)\<\/$tagname\>##gs;
+ push(@result,$_);
+ }
+ return @result;
+}
+
+
+
+################################################################################
+# subroutines for generating "orpahned" tests
+################################################################################
+
+# SCALAR create_orph_cfunctions( $prefix, $code )
+# returns a string containing the definitions of the functions for the
+# orphan regions.
+sub create_orph_cfunctions
+{
+ my ($code,@defs);
+ ($code) = @_;
+ @defs = get_tag_values('ompts:orphan',$code);
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$code);
+ my ( @result,$functionsrc, $i);
+ $functionsrc = "\n/* Automatically generated definitions of the orphan functions */\n";
+
+ $i = 1;
+ foreach (@defs) {
+ $functionsrc .= "\nvoid orph$i\_$functionname (FILE * logFile) {";
+ $functionsrc .= $_;
+ $functionsrc .= "\n}\n";
+ $i++;
+ }
+ $functionsrc .= "/* End of automatically generated definitions */\n";
+ return $functionsrc;
+}
+
+# SCALAR create_orph_fortranfunctions( $prefix, $code )
+# returns a string containing the definitions of the functions for the
+# orphan regions.
+sub create_orph_fortranfunctions
+{
+ my ($prefix,$code,@defs,$orphan_parms);
+ ($prefix,$code,$orphan_parms) = @_;
+ @defs = get_tag_values('ompts:orphan',$code);
+
+ #to remove space and put a single space
+ if($orphan_parms ne "")
+ {
+ $orphan_parms =~ s/[ \t]+//sg;
+ $orphan_parms =~ s/[ \t]+\n/\n/sg;
+ }
+
+ ($orphanvarsdefs) = get_tag_values('ompts:orphan:vars',$code);
+ foreach (@varsdef) {
+ if (not /[^ \n$]*/){ $orphanvarsdefs = join("\n",$orphanvarsdef,$_);}
+ }
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$code);
+ my ( @result,$functionsrc, $i);
+ $functionsrc = "\n! Definitions of the orphan functions\n";
+ $i = 1;
+ foreach $_(@defs)
+ {
+ $functionsrc .= "\n SUBROUTINE orph$i\_$prefix\_$functionname\($orphan_parms\)\n ";
+ $functionsrc .= "INCLUDE \"omp_testsuite.f\"\n";
+ $functionsrc .= $orphanvarsdefs."\n";
+ $functionsrc .= $_;
+ $functionsrc .= "\n";
+ $functionsrc .= " END SUBROUTINE\n! End of definition\n\n";
+ $i++;
+ }
+ return $functionsrc;
+}
+
+# LIST orphan_regions2cfunctions( $prefix, @code )
+# replaces orphan regions by functioncalls in C/C++.
+sub orphan_regions2cfunctions
+{
+ my ($code, $i, $functionname);
+ ($code) = @_;
+ $i = 1;
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$code);
+ while( /\<ompts\:orphan\>(.*)\<\/ompts\:orphan\>/s) {
+ s#\<ompts\:orphan\>(.*?)\<\/ompts\:orphan\>#orph$i\_$functionname (logFile);#s;
+ $i++;
+ }
+ return $code;
+}
+
+# LIST orphan_regions2fortranfunctions( $prefix, @code )
+# replaces orphan regions by functioncalls in fortran
+sub orphan_regions2fortranfunctions
+{
+ my ( $prefix, @code, $my_parms, $i, $functionname);
+ ($prefix, ($code), $my_parms) = @_;
+ $i = 1;
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$code);
+ foreach $_(($code))
+ {
+ while( /\<ompts\:orphan\>(.*)\<\/ompts\:orphan\>/s)
+ {
+ s#\<ompts\:orphan\>(.*?)\<\/ompts\:orphan\># CALL orph$i\_$prefix\_$functionname\($my_parms\);#s;
+ $i++;
+ }
+ }
+ return ($code);
+}
+
+# SCALAR orph_functions_declarations( $prefix, $code )
+# returns a sring including the declaration of the functions used
+# in the orphan regions. The function names are generated using
+# the $prefix as prefix for the functionname.
+sub orph_functions_declarations
+{
+ my ($prefix, $code);
+ ($prefix, $code) = @_;
+ my ( @defs, $result );
+
+ # creating declarations for later used functions
+ $result .= "\n\n/* Declaration of the functions containing the code for the orphan regions */\n#include <stdio.h>\n";
+ @defs = get_tag_values('ompts:orphan',$code);
+ my ($functionname,$i);
+ ($functionname) = get_tag_values('ompts:testcode:functionname',$code);
+ $i = 1;
+ foreach $_(@defs) {
+ $result .= "\nvoid orph$i\_$prefix\_$functionname ( FILE * logFile );";
+ $i++;
+ }
+ $result .= "\n\n/* End of declaration */\n\n";
+ return $result;
+}
+
+# SCALAR make_global_vars_definition( $code )
+# returns a sring including the declaration for the vars needed to
+# be declared global for the orphan region.
+sub make_global_vars_def
+{
+ my ( $code );
+ ($code) = @_;
+ my ( @defs, $result, @tmp, @tmp2 ,$predefinitions);
+
+ # creating global declarations for the variables.
+ $result = "\n\n/* Declaration of the variables used in the orphan region. */\n";
+
+ # get all tags containing the variable definitions
+ @defs = get_tag_values('ompts:orphan:vars',$code);
+ foreach $_(@defs)
+ {
+ # cutting the different declarations in the same tag by the ';' as cuttmark
+ @tmp = split(/;/,$_);
+ foreach $_(@tmp)
+ {
+ # replacing newlines and double spaces
+ s/\n//gs;
+ s/ //gs;
+ # put the new declaration at the end of $result
+ if($_ ne ""){ $result .= "\n $_;"; }
+ }
+ }
+ $result .= "\n\n/* End of declaration. */\n\n";
+ return $result;
+}
+
+# SCALAR extern_vars_definition( $code )
+# returns a sring including the declaration for the vars needed to
+# be declared extern for the orphan region.
+sub extern_vars_def
+{
+ my ( $code );
+ ($code) = @_;
+ my ( @defs, $result, @tmp, @tmp2 ,$predefinitions);
+
+ # creating declarations for the extern variables.
+ $result = "\n\n/* Declaration of the extern variables used in the orphan region. */\n";
+ # $result .= "\n#include <stdio.h>\n#include <omp.h>\n";
+ $result .= "\nextern FILE * logFile;";
+
+ # get all tags containing the variable definitions
+ @defs = get_tag_values('ompts:orphan:vars',$code);
+ foreach $_(@defs)
+ {
+ # cutting the different declarations in the same tag by the ';' as cuttmark
+ @tmp = split(/;/,$_);
+ foreach $_(@tmp)
+ {
+ # replacing newlines and double spaces
+ s/\n//gs;
+ s/ //gs;
+ # cutting off definitions
+ @tmp2 = split("=",$_);
+ # put the new declaration at the end of $result
+ $result .= "\nextern $tmp2[0];";
+ }
+ }
+ $result .= "\n\n/* End of declaration. */\n\n";
+ return $result;
+}
+
+sub leave_single_space
+{
+ my($str);
+ ($str)=@_;
+ if($str ne "")
+ {
+ $str =~ s/^[ \t]+/ /;
+ $str =~ s/[ \t]+\n$/\n/;
+ $str =~ s/[ \t]+//g;
+ }
+ return $str;
+}
+
+return 1;
diff --git a/final/testsuite/ompts_standaloneProc.c b/final/testsuite/ompts_standaloneProc.c
new file mode 100644
index 0000000..591b593
--- /dev/null
+++ b/final/testsuite/ompts_standaloneProc.c
@@ -0,0 +1,51 @@
+int main()
+{
+ int i; /* Loop index */
+ int result; /* return value of the program */
+ int failed=0; /* Number of failed tests */
+ int success=0; /* number of succeeded tests */
+ static FILE * logFile; /* pointer onto the logfile */
+ static const char * logFileName = "<testfunctionname></testfunctionname>.log"; /* name of the logfile */
+
+
+ /* Open a new Logfile or overwrite the existing one. */
+ logFile = fopen(logFileName,"w+");
+
+ printf("######## OpenMP Validation Suite V %s ######\n", OMPTS_VERSION );
+ printf("## Repetitions: %3d ####\n",REPETITIONS);
+ printf("## Loop Count : %6d ####\n",LOOPCOUNT);
+ printf("##############################################\n");
+ printf("Testing <directive></directive>\n\n");
+
+ fprintf(logFile,"######## OpenMP Validation Suite V %s ######\n", OMPTS_VERSION );
+ fprintf(logFile,"## Repetitions: %3d ####\n",REPETITIONS);
+ fprintf(logFile,"## Loop Count : %6d ####\n",LOOPCOUNT);
+ fprintf(logFile,"##############################################\n");
+ fprintf(logFile,"Testing <directive></directive>\n\n");
+
+ for ( i = 0; i < REPETITIONS; i++ ) {
+ fprintf (logFile, "\n\n%d. run of <testfunctionname></testfunctionname> out of %d\n\n",i+1,REPETITIONS);
+ if(<testfunctionname></testfunctionname>(logFile)){
+ fprintf(logFile,"Test successful.\n");
+ success++;
+ }
+ else {
+ fprintf(logFile,"Error: Test failed.\n");
+ printf("Error: Test failed.\n");
+ failed++;
+ }
+ }
+
+ if(failed==0){
+ fprintf(logFile,"\nDirective worked without errors.\n");
+ printf("Directive worked without errors.\n");
+ result=0;
+ }
+ else{
+ fprintf(logFile,"\nDirective failed the test %i times out of %i. %i were successful\n",failed,REPETITIONS,success);
+ printf("Directive failed the test %i times out of %i.\n%i test(s) were successful\n",failed,REPETITIONS,success);
+ result = (int) (((double) failed / (double) REPETITIONS ) * 100 );
+ }
+ printf ("Result: %i\n", result);
+ return result;
+}
diff --git a/final/testsuite/ompts_standaloneProc.f b/final/testsuite/ompts_standaloneProc.f
new file mode 100644
index 0000000..4afcab6
--- /dev/null
+++ b/final/testsuite/ompts_standaloneProc.f
@@ -0,0 +1,68 @@
+!This is the main driver to invoke different test functions
+ PROGRAM <testfunctionname></testfunctionname>_main
+ IMPLICIT NONE
+ INTEGER failed, success !Number of failed/succeeded tests
+ INTEGER num_tests,crosschecked, crossfailed, j
+ INTEGER temp,temp1
+ INCLUDE "omp_testsuite.f"
+
+ INTEGER <testfunctionname></testfunctionname>
+
+
+ CHARACTER*50 logfilename !Pointer to logfile
+ INTEGER result
+
+ num_tests = 0
+ crosschecked = 0
+ crossfailed = 0
+ result = 1
+ failed = 0
+
+ !Open a new logfile or overwrite the existing one.
+ logfilename = "bin/fortran/<testfunctionname></testfunctionname>.log"
+! WRITE (*,*) "Enter logFilename:"
+! READ (*,*) logfilename
+
+ OPEN (1, FILE = logfilename)
+
+ WRITE (*,*) "######## OpenMP Validation Suite V 3.0a ######"
+ WRITE (*,*) "## Repetitions:", N
+ WRITE (*,*) "## Loop Count :", LOOPCOUNT
+ WRITE (*,*) "##############################################"
+ WRITE (*,*)
+
+ crossfailed=0
+ result=1
+ WRITE (1,*) "--------------------------------------------------"
+ WRITE (1,*) "Testing <directive></directive>"
+ WRITE (1,*) "--------------------------------------------------"
+ WRITE (1,*)
+ WRITE (1,*) "testname: <testfunctionname></testfunctionname>"
+ WRITE (1,*) "(Crosstests should fail)"
+ WRITE (1,*)
+
+ DO j = 1, N
+ temp = <testfunctionname></testfunctionname>()
+ IF (temp .EQ. 1) THEN
+ WRITE (1,*) j, ". test successful."
+ success = success + 1
+ ELSE
+ WRITE (1,*) "Error: ",j, ". test failed."
+ failed = failed + 1
+ ENDIF
+ END DO
+
+
+ IF (failed .EQ. 0) THEN
+ WRITE (1,*) "Directive worked without errors."
+ WRITE (*,*) "Directive worked without errors."
+ result = 0
+ WRITE (*,*) "Result:",result
+ ELSE
+ WRITE (1,*) "Directive failed the test ", failed, " times."
+ WRITE (*,*) "Directive failed the test ", failed, " times."
+ result = failed * 100 / N
+ WRITE (*,*) "Result:",result
+ ENDIF
+ CALL EXIT (result)
+ END PROGRAM
diff --git a/final/testsuite/runtest.pl b/final/testsuite/runtest.pl
new file mode 100755
index 0000000..3472351
--- /dev/null
+++ b/final/testsuite/runtest.pl
@@ -0,0 +1,592 @@
+#!/usr/bin/env perl
+
+# runtest [options] FILENAME
+#
+# Read the file FILENAME. Each line contains a test.
+# Convert template to test and crosstest.
+# If possilble generate orphaned testversions, too.
+# Use make to compile the test
+
+################################################################################
+# Global configuration options for the runtestscript itself:
+################################################################################
+
+# name of the global configuration file for the testsuite:
+$config_file = "ompts.conf";
+$logfile = "ompts.log"; # overwriteable by value in config file
+$env_set_threads_command = 'OMP_NUM_THREADS=%n; export OMP_NUM_THREADS;';
+$debug_mode = 0;
+################################################################################
+# After this line the script part begins! Do not edit anithing below
+################################################################################
+
+
+# Namespaces:
+use Getopt::Long;
+#use Unix::PID;
+use Data::Dumper;
+use ompts_parserFunctions;
+
+# Extracting given options
+GetOptions("help",
+ "listlanguages",
+ "lang=s",
+ "list",
+ "testinfo=s",
+ "numthreads=i",
+ "test=s",
+ "compile!",
+ "run!",
+ "orphan!",
+ "resultfile=s"
+ );
+
+# Get global configuratino options from config file:
+if(! -e $config_file){ error ("Could not find config file $config_file\n", 1);}
+open (CONFIG, "<$config_file") or error ("Could not open config file $config_file\n", 2);
+while (<CONFIG>) { $config .= $_; }
+close (CONFIG);
+
+($logfile) = get_tag_values ("logfile", $config);
+($timeout) = get_tag_values ("singletesttimeout", $config);
+($display_errors) = get_tag_values("displayerrors", $config);
+($display_warnings) = get_tag_values ("displaywarnings", $config);
+($numthreads) = get_tag_values ("numthreads", $config);
+($env_set_threads_command) = get_tag_values("envsetthreadscommand",$config);
+$env_set_threads_command =~ s/\%n/$numthreads/g;
+@languages = get_tag_values ("language", $config);
+
+if (!defined($opt_compile)) {$opt_compile = 1;}
+if (!defined($opt_run)) {$opt_run = 1;}
+if (!defined($opt_orphan)) {$opt_orphan = 1;}
+if (!defined($opt_resultsfile)) {($opt_resultsfile) = get_tag_values("resultsfile", $config);}
+if ( defined($opt_numthreads) && ($opt_numthreads > 0)) {$numthreads = $opt_numthreads;}
+if ($debug_mode) {
+print <<EOF;
+Testsuite configuration:
+Logfile = $logfile
+Timeout = $timeout seconds
+Language: $opt_lang
+Display errors: $display_errors
+Display warnings: $display_warnings
+Resultsfile: $opt_resultsfile
+Numthreads: $numthreads
+------------------------------
+EOF
+}
+
+$num_construcs = 0;
+$num_tests = 0;
+$num_failed_tests = 0;
+$num_successful_tests = 0;
+$num_verified_tests = 0;
+$num_failed_compilation = 0;
+
+$num_normal_tests_failed = 0;
+$num_normal_tests_compile_error = 0;
+$num_normal_tests_timed_out = 0;
+$num_normal_tests_successful = 0;
+$num_normal_tests_verified = 0;
+
+$num_orphaned_tests_failed = 0;
+$num_orphaned_tests_compile_error = 0;
+$num_orphaned_tests_timed_out = 0;
+$num_orphaned_tests_successful = 0;
+$num_orphaned_tests_verified = 0;
+
+if ($opt_help) { print_help_text (); exit 0; }
+if ($opt_listlanguages){ print_avail_langs (); exit 0; }
+if ($opt_list) { print_avail_tests (); exit 0; }
+if ($opt_testinfo) { print_testinfo (); exit 0; }
+if ($opt_test) { write_result_file_head();
+ execute_single_test (); exit 0; }
+if (-e $ARGV[0]) { write_result_file_head();
+ execute_testlist($ARGV[0]); print_results();
+ result_summary(); exit 0;}
+
+################################################################################
+# sub function definitions
+################################################################################
+
+# Function which prints the results file
+sub print_results
+{
+ system("echo; cat $opt_resultsfile; echo;");
+}
+
+# Function which prints a summary of all test
+sub result_summary
+{
+ my $num_directives = @test_results;
+
+ print <<EOF;
+
+Summary:
+S Number of tested Open MP constructs: $num_constructs
+S Number of used tests: $num_tests
+S Number of failed tests: $num_failed_tests
+S Number of successful tests: $num_successful_tests
+S + from this were verified: $num_verified_tests
+
+Normal tests:
+N Number of failed tests: $num_normal_tests_failed
+N + from this fail compilation: $num_normal_tests_compile_error
+N + from this timed out $num_normal_tests_timed_out
+N Number of successful tests: $num_normal_tests_successful
+N + from this were verified: $num_normal_tests_verified
+
+Orphaned tests:
+O Number of failed tests: $num_orphaned_tests_failed
+O + from this fail compilation: $num_orphaned_tests_compile_error
+O + from this timed out $num_orphaned_tests_timed_out
+O Number of successful tests: $num_orphaned_tests_successful
+O + from this were verified: $num_orphaned_tests_verified
+EOF
+
+}
+
+# Function that executest the tests specified in the given list
+sub execute_testlist
+{
+ my ($filename) = @_;
+ # opening testlist
+ open(TESTS,$filename) or error ("Could not open $filename\n", 1);
+TEST: while (<TESTS>) {
+ if (/^\s*#/) {next TEST;}
+ if (/^\s*$/) {next TEST;}
+ $opt_test = $_;
+ chomp ($opt_test);
+ execute_single_test ();
+ }
+# print Dumper(@test_results);
+}
+
+# Function that executes a system command but takes care of the global timeout
+# If command did not finish inbetween returns '-' otherwise the exit status of
+# the system command
+sub timed_sys_command
+{
+ my ($command) = @_;
+ my $exit_status = '-';
+
+# set up the timeout for the command
+ eval {
+ local $SIG{ALRM} = sub {die "alarm\n"};
+ alarm $timeout;
+ log_message_add ("Starting command \"$command\"");
+ $exit_status = system ($command);
+ alarm 0;
+ };
+# check if command finished during the maximum execution time
+ if ($@ eq "alarm\n") {
+# test timed out
+# my $pid = Unix::PID->new();
+# $pid->get_pidof($command, 1);
+# $pid->kill();
+ if ($debug_mode) {
+ log_message_add ("Command \"$command\" reached max execution time.\n");
+ }
+ return "TO";
+ }
+# test finished
+ return $exit_status;
+}
+
+# Function that runs the tests given as a array containing the testnames
+# Returns an array containing the percent values of the passed tests and the
+# successful crosstests.
+sub run_test
+{
+ my ($testname, $orphan) = @_;
+ my $bin_name, $cbin_name;
+ my $cmd, $exit_status, $failed;
+ my $resulttest, $resultctest;
+
+# path to test and crosstest either in normal or in orphaned version
+ if ($orphan) {
+ $bin_name = "bin/$opt_lang/orph_test_$testname";
+ $cbin_name = "bin/$opt_lang/orph_ctest_$testname";
+ } else {
+ $bin_name = "bin/$opt_lang/test_$testname";
+ $cbin_name = "bin/$opt_lang/ctest_$testname";
+ }
+# Check if executables exist
+ if (! -e $bin_name) {
+ test_error ("Could not find executable \"$bin_name\".");
+ return ('test' => '-', 'crosstest' => '-');
+ }
+# run the test
+ $cmd = "$env_set_threads_command ./$bin_name >$bin_name.out";
+ print "Running test with $numthreads threads .";
+ $exit_status = timed_sys_command ($cmd);
+############################################################
+# Check if test finished within max execution time
+ if ($exit_status eq 'TO') {
+ print ".... failed (timeout)\n";
+ return ('test' => 'TO', 'crosstest' => '-')
+ }
+############################################################
+# check if all tests were successful
+ $failed = $exit_status >> 8;
+ if ($failed < 0 or $failed > 100) { $failed = 100; }
+ $resulttest = 100 - $failed;
+ if ($resulttest eq 100) {
+ print ".... success ...";
+ } else {
+ print ".... failed $failed\% of the tests\n";
+ return ('test' => $resulttest, 'crosstest' => '-');
+ }
+############################################################
+
+# do crosstest
+# check if executable exist
+ if (! -e $cbin_name) {
+ test_error ("Could not find executable \"$cbin_name\".");
+ print "... not verified (crosstest missing)\n";
+ return ('test' => $resulttest, 'crosstest' => '-');
+ }
+# run crosstest
+# Test was successful, so it makes sense to run the crosstest
+ $cmd = "$env_set_threads_command ./$cbin_name > $cbin_name.out";
+ $exit_status = timed_sys_command ($cmd);
+############################################################
+# Check if crosstest finished within max execution time
+ if ($exit_status eq 'TO') {
+ print "... not verified (timeout)\n";
+ return ('test' => $result, 'crosstest' => 'TO');
+ }
+############################################################
+# test if crosstests failed as expected
+ $resultctest = $exit_status >> 8;
+ if ($resultctest > 0) {
+ print "... and verified with $resultctest\% certainty\n";
+ } else {
+ print "... but might be lucky\n";
+ }
+ return ('test' => $resulttest, 'crosstest' => $resultctest);
+############################################################
+}
+
+# Function that generates the test binaries out of the sourcecode
+sub compile_src
+{
+ my ($testname, $orphan) = @_;
+ print "Compiling soures ............";
+ if ($orphan) {
+# Make orphaned tests
+ $exec_name = "bin/$opt_lang/orph_test_$testname";
+ $crossexe_name = "bin/$opt_lang/orph_ctest_$testname";
+ $resulttest = system ("make $exec_name > $exec_name\_compile.log" );
+ $resultctest = system ("make $crossexe_name > $crossexe_name\_compile.log" );
+ } else {
+# Make test
+ $exec_name = "bin/$opt_lang/test_$testname";
+ $crossexe_name = "bin/$opt_lang/ctest_$testname";
+ $resulttest = system ("make $exec_name > $exec_name\_compile.log" );
+ $resultctest = system ("make $crossexe_name > $crossexe_name\_compile.log" );
+ }
+ if ($resulttest) { test_error ("Compilation of the test failed."); }
+ if ($resultctest){ test_error ("Compilation of the crosstest failed."); }
+
+ if ($resulttest or $resultctest) {
+ print ".... failed\n";
+ return 0;
+ } else {
+ print ".... success\n";
+ return 1;
+ }
+}
+
+# Function which prepare the directory structure:
+sub init_directory_structure
+{
+ my ($language) = @_;
+ if (-e "bin" && -d "bin") { warning ("Old binary directory detected!");}
+ else { system ("mkdir bin"); }
+ if (-e "bin/$language" && -d "bin/$language") {
+ warning ("Old binary directory for language $language found.");}
+ else { system ("mkdir bin/$language"); }
+}
+
+# Function that generates the sourcecode for the given test
+sub make_src
+{
+ my ($testname, $orphan) = @_;
+ my $template_file;
+ my $src_name;
+
+ $template_file = "$dir/$testname.$extension";
+ if (!-e $template_file) { test_error ("Could not find template for \"$testname\""); }
+
+ print "Generating sources ..........";
+ if ($orphan) {
+# Make orphaned tests
+ $src_name = "bin/$opt_lang/orph_test_$testname.$extension";
+ $resulttest = system ("./$templateparsername --test --orphan $template_file $src_name");
+ $src_name = "bin/$opt_lang/orph_ctest_$testname.$extension";
+ $resultctest = system ("./$templateparsername --crosstest --orphan $template_file $src_name");
+ } else {
+# Make test
+ $src_name = "bin/$opt_lang/test_$testname.$extension";
+ $resulttest = system ("./$templateparsername --test --noorphan $template_file $src_name");
+ $src_name = "bin/$opt_lang/ctest_$testname.$extension";
+ $resultctest = system ("./$templateparsername --crosstest --noorphan $template_file $src_name");
+ }
+ if ($resulttest) { test_error ("Generation of sourcecode for the test failed."); }
+ if ($resultctest){ test_error ("Generation of sourcecode for the crosstest failed."); }
+
+ if ($resulttest or $resultctest) {
+ print ".... failed\n";
+ return 0;
+ } else {
+ print ".... success\n";
+ return 1;
+ }
+}
+
+# Function which checks if a given test is orphanable
+sub test_is_orphanable
+{
+ my ($testname) = @_;
+ my $src;
+ my $file = "$dir/$testname.$extension";
+ if(! -e $file){ test_error ("Could not find test file $file\n");}
+ open (TEST, "<$file") or test_error ("Could not open test file $file\n");
+ while (<TEST>) { $src .= $_; }
+ close (TEST);
+ return $src =~/ompts:orphan/;
+}
+
+sub write_result_file_head
+{
+ open (RESULTS, ">$opt_resultsfile") or error ("Could not open file '$opt_resultsfile' to write results.", 1);
+ $resultline = sprintf "%-25s %-s\n", "#Tested Directive", "\tt\tct\tot\toct";
+ print RESULTS $resultline;
+}
+
+# Function which adds a result to the list of results
+sub add_result
+{
+ my ($testname, $result) = @_;
+# print Dumper(@{$result});
+
+ $num_constructs++;
+
+ open (RESULTS, ">>$opt_resultsfile") or error ("Could not open file '$opt_resultsfile' to write results.", 1);
+
+ if (${$result}[0][0]) {
+ $num_tests ++;}
+
+ if ($opt_compile and ${$result}[0][1] eq 0) {
+ ${$result}[0][2]{test} = 'ce';
+ ${$result}[0][2]{crosstest} = '-';
+ $num_normal_tests_compile_error++;
+ $num_normal_tests_failed++;
+ }
+
+ if ($opt_run and ${$result}[0][2] and ${$result}[0][2]{test} ne 'ce') {
+ if (${$result}[0][2]{test} == 100) {
+ $num_normal_tests_successful++;
+ if (${$result}[0][2]{crosstest} == 100){
+ $num_normal_tests_verified++;}
+ } elsif (${$result}[0][2]{test} eq 'TO'){
+ $num_normal_tests_timed_out++;
+ $num_normal_tests_failed++;
+ } else {
+ $num_normal_tests_failed++;
+ }
+ }
+ $resultline = "${$result}[0][2]{test}\t${$result}[0][2]{crosstest}\t";
+
+ if (${$result}[1][0]) {
+ $num_tests ++;}
+ else { $resultline .= "-\t-\n"; }
+
+ if ($opt_compile and ${$result}[1][1] eq 0) {
+ ${$result}[1][2]{test} = 'ce';
+ ${$result}[1][2]{crosstest} = '-';
+ $num_orphaned_tests_compile_error++;
+ $num_orphaned_tests_failed++;
+ }
+
+ if ($opt_run and ${$result}[1][2] and ${$result}[1][2]{test} ne 'ce') {
+ if (${$result}[1][2]{test} == 100) {
+ $num_orphaned_tests_successful++;
+ if (${$result}[1][2]{crosstest} == 100){
+ $num_orphaned_tests_verified++;}
+ } elsif (${$result}[1][2]{test} eq 'TO'){
+ $num_orphaned_tests_timed_out++;
+ $num_orphaned_tests_failed++;
+ } else {
+ $num_orphaned_tests_failed++;
+ }
+ }
+ $resultline .= "${$result}[1][2]{test}\t${$result}[1][2]{crosstest}\n";
+
+ $num_failed_tests = $num_normal_tests_failed + $num_orphaned_tests_failed;
+ $num_failed_compilation = $num_normal_tests_compile_error + $num_orphaned_tests_compile_error;
+ $num_successful_tests = $num_normal_tests_successful + $num_orphaned_tests_successful;
+ $num_verified_tests = $num_normal_tests_verified + $num_orphaned_tests_verified;
+
+ $resultline2 = sprintf "%-25s %-s", "$testname", "\t$resultline";
+ print RESULTS $resultline2;
+}
+
+# Function which executes a single test
+sub execute_single_test
+{
+ my @result;
+ init_language_settings ($opt_lang);
+ init_directory_structure ($opt_lang);
+ log_message_add ("Testing for \"$opt_test\":");
+ print "Testing for \"$opt_test\":\n";
+# tests in normal mode
+ if ($opt_compile){ $result[0][0] = make_src ($opt_test, 0);
+ $result[0][1] = compile_src ($opt_test, 0);}
+ if ($opt_run && $result[0][1] == 1) {
+ $result[0][2] = {run_test ($opt_test, 0)};}
+# tests in orphaned mode
+ if ($opt_orphan && test_is_orphanable($opt_test)){
+ log_message_add ("Testing for \"$opt_test\" in orphaned mode:");
+ print "+ orphaned mode:\n";
+ if ($opt_compile) { $result[1][0] = make_src ($opt_test, 1);
+ $result[1][1] = compile_src ($opt_test, 1);}
+ if ($opt_run && $result[1][1] == 1) {
+ $result[1][2] = {run_test ($opt_test, 1)};}
+ }
+ add_result($opt_test, \@result);
+}
+
+# Function that prints info about a given test
+sub print_testinfo
+{
+ init_language_settings($opt_lang);
+ my $doc = "";
+ my $file = $dir."/".$opt_testinfo.".".$extension;
+ if (! -e $file) {error ("Could not find template for test $opt_testinfo", 5);}
+ open (TEST,"<$file") or error ("Could not open template file \"$file\" for test $opt_testinfo", 6);
+ while (<TEST>) {$doc .= $_;}
+ close (TEST);
+
+ (my $omp_version) = get_tag_values ("ompts:ompversion", $doc);
+ (my $dependences) = get_tag_values ("ompts:dependences", $doc);
+ (my $description) = get_tag_values ("ompts:testdescription", $doc);
+ my $orphanable = 'no';
+ if ($doc =~ /ompts:orphan/) {$orphanable = 'yes';}
+ print <<EOF;
+Info for test $opt_testinfo:
+Open MP standard: $omp_version
+Orphaned mode: $orphanable
+Dependencies: $dependences
+Description: $description
+EOF
+}
+
+# Function that initializes the settings for the given language
+sub init_language_settings
+{
+ my ($language) = @_;
+ foreach my $lang (@languages) {
+ (my $name) = get_tag_values ("languagename", $lang);
+ if ($name eq $language) {
+ ($extension) = get_tag_values ("fileextension", $lang);
+ ($dir) = get_tag_values ("dir", $lang);
+ ($templateparsername) = get_tag_values ("templateparsername", $lang);
+ last;
+ }
+ }
+ # Check if we found the specified language in the config file
+ if (!$extension and !$dir) {
+ error ("Language $language could not be found.\n", 3);
+ }
+}
+
+
+
+# Function that prints all available tests for the given language
+sub print_avail_tests
+{
+ init_language_settings($opt_lang);
+ my @tests;
+ opendir(DIR,"$dir") or error ("Could not open directory $dir", 4);
+ while($_ = readdir(DIR)) { if (/\.$extension$/) {s/\.$extension//; push (@tests, $_);}}
+ closedir(DIR);
+ print "Found ".(@tests)." tests:\n". "-" x 30 . "\n";
+ foreach (@tests) { print $_."\n";}
+}
+
+# Function that prints all available tests for the given language
+sub print_avail_langs
+{
+ if (@languages > 0) {
+ print "Available languages:\n";
+ foreach (@languages) {
+ (my $name) = get_tag_values ("languagename", $_);
+ print "$name\n";
+ }
+ } else {
+ print "No languages available\n";
+ }
+}
+
+# Function that prints the error message
+sub print_help_text
+{
+ print <<EOF;
+runtest.pl [options] [FILE]
+
+Executes the tests listed in FILE. FILE has to contain the names of the tests,
+one test per line. Lines starting with '#' will be ignored.
+A language has to be specified for all commands except --help and --listlanguages.
+
+Options:
+ --help displays this help message
+ --listlanguages lists all available languages
+ --lang=s select language
+ --list list available tests for a language
+ --testinfo=NAME show info for test NAME
+ --numthreads=NUM set number of threads (overwrites config file settings)
+ --test=NAME execute single test NAME
+ --nocompile do not compile tests
+ --norun do not run tests
+ --noorphan switch of orphaned tests
+ --resultfile=NAME use NAME as resultfile (overwrites config file settings)
+EOF
+}
+
+# Function that writes an error message for a failed test / part of a test
+sub test_error
+{
+ my ($message) = @_;
+ log_message_add ("ERROR: $message");
+ if ($display_errors eq 1) { print STDERR "ERROR: $message\n"; }
+}
+
+# Function that returns an warning message
+sub warning {
+ my ($message) = @_;
+ if ($display_warnings eq 1) { print "Warniong: $message\n"; }
+ log_message_add ("Warning: $message");
+}
+
+# Function that returns an error message and exits with the specified error code
+sub error {
+ my ($message, $error_code) = @_;
+ if ($display_errors eq 1) { print STDERR "ERROR: $message\n"; }
+ log_message_add ("ERROR: $message");
+ exit ($error_code);
+}
+
+# Function which adds an new entry into the logfile together with a timestamp
+sub log_message_add
+{
+ (my $message) = @_;
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst) = localtime();
+ if(length($hour) == 1) { $hour="0$hour"; }
+ if(length($min) == 1) { $min="0$min"; }
+ if(length($sec) == 1) { $sec="0$sec"; }
+ $mon=$mon+1;
+ $year=$year+1900;
+ open (LOGFILE,">>$logfile") or die "ERROR: Could not create $logfile\n";
+ print LOGFILE "$mday/$mon/$year $hour.$min.$sec: $message\n";
+}
diff --git a/final/testsuite/template_parser_c.pl b/final/testsuite/template_parser_c.pl
new file mode 100755
index 0000000..3d6f346
--- /dev/null
+++ b/final/testsuite/template_parser_c.pl
@@ -0,0 +1,114 @@
+#!/usr/bin/env perl
+
+# ompts_parser [option] INFILE OUTFILE
+#
+# Creats the tests and the crosstests for the OpenMP-Testsuite out of an templatefiles which are given to the programm.
+#
+# Options:
+# --test: make test
+# --crosstest: make crosstest
+# --orphan if possible generate tests using orphan
+#
+# Return:
+# Succes: 0
+# Template not found -1
+#
+
+# Using Getopt::long to extract the programm options
+use Getopt::Long;
+# Using functions: Set of subroutines to modify the testcode
+use ompts_parserFunctions;
+
+# Getting given options
+GetOptions("test" => \$test,"crosstest" => \$crosstest, "orphan!" => \$orphan);
+
+# Remaining arguments are the templatefiles.
+# Adding these to the list of to be parsed files if they exist.
+
+my $templatefile;
+my $sourcefile;
+my $mainprocsrc = "ompts_standaloneProc.c";
+
+$templatefile = $ARGV[0];
+$outfile = $ARGV[1];
+
+if (!-e $templatefile) {
+ print "Temaplte file not found";
+ exit -1;
+}
+
+
+# Checking if options were valid:
+#################################################################
+# preparations and checks for sourcefiles
+
+# Reading the template for the tests
+open(TEST,$templatefile) or die "Error: Could not open template $srcfile\n";
+while(<TEST>){ $src .= $_; }
+close(TEST);
+
+# Extracting the source for the mainprogramm and saving it in $mainprocsrc
+open(MAINPROC,$mainprocsrc) or die "Could not open the sourcefile for the main program $mainprocsrc";
+while(<MAINPROC>){ $mainproc .= $_; }
+close (MAINPROC);
+
+# Some temporary testinformation:
+my ($description) = get_tag_values ('ompts:testdescription',$src);
+my ($directive) = get_tag_values ('ompts:directive',$src);
+my ($functionname) = get_tag_values ('ompts:testcode:functionname',$src);
+
+open (OUTFILE,">$outfile") or die "Could not create the output file for $directive";
+
+# Creating the source for the test:
+my ($code) = get_tag_values('ompts:testcode',$src);
+# Putting together the functions and the mainprogramm:
+$code .= $mainproc;
+
+my $testprefix = "";
+
+# Make modifications for the orphaned testversion if necessary:
+if ($orphan) {
+# Get the global variables:
+ @defs = get_tag_values("ompts:orphan:vars",$code);
+ $orphvarsdef = "";
+ foreach (@defs) {
+ $orphvarsdef = join("\n",$orphvarsdef,$_);
+ }
+# Generate predeclarations for orpahn functions:
+ $orphfuncsdefs = orph_functions_declarations($code);
+# Generate the orphan functions:
+ $orphfuncs = create_orph_cfunctions($code);
+# Repla:e orphan regions by functioncalls:
+ $code = orphan_regions2cfunctions($code);
+# Deleting the former declarations of the variables in the orphan regions:
+ ($code) = delete_tags('ompts:orphan:vars',($code));
+# Put all together:
+ $code = "#include \"omp_testsuite.h\"\n" . $orphvarsdef . $orphfuncsdefs . $code . $orphfuncs;
+ $testprefix .= "orph_";
+}
+
+# Remove remaining marks for the orpahn regions and its variables:
+($code) = enlarge_tags('ompts:orphan','','',($code));
+($code) = enlarge_tags('ompts:orphan:vars','','',($code));
+
+if($test) {
+# Remove the marks for the testcode and remove the code for the crosstests:
+ ($code) = enlarge_tags('ompts:check','','',($code));
+ ($code) = delete_tags('ompts:crosscheck',($code));
+ $testprefix .= "test_";
+}
+elsif($crosstest) {
+# Remove the marks for the crosstestcode and remove the code for the tests:
+ ($code) = enlarge_tags('ompts:crosscheck','','',($code));
+ ($code) = delete_tags('ompts:check',($code));
+ $testprefix .= "ctest_";
+}
+# Making some final modifications:
+($code) = replace_tags('testfunctionname',$testprefix.$functionname,($code));
+($code) = replace_tags('directive',$directive,($code));
+($code) = replace_tags('description',$description,($code));
+($code) = enlarge_tags('ompts:testcode:functionname',$testprefix,'',($code) );
+# $code = "\#include \"omp_testsuite.h\"\n".$code;
+# Write the result into the file and close it:
+print OUTFILE $code;
+close(OUTFILE);
diff --git a/final/testsuite/template_parser_fortran.pl b/final/testsuite/template_parser_fortran.pl
new file mode 100755
index 0000000..570a4e0
--- /dev/null
+++ b/final/testsuite/template_parser_fortran.pl
@@ -0,0 +1,115 @@
+#!/usr/bin/env perl
+
+# ompts_parser [option] INFILE OUTFILE
+#
+# Creats the tests and the crosstests for the OpenMP-Testsuite out of an templatefiles which are given to the programm.
+#
+# Options:
+# --test: make test
+# --crosstest: make crosstest
+# --orphan if possible generate tests using orphan
+#
+# Return:
+# Succes: 0
+# Template not found -1
+#
+
+# Using Getopt::long to extract the programm options
+use Getopt::Long;
+# Using functions: Set of subroutines to modify the testcode
+use ompts_parserFunctions;
+
+# Getting given options
+GetOptions("test" => \$test,"crosstest" => \$crosstest, "orphan!" => \$orphan);
+
+# Remaining arguments are the templatefiles.
+# Adding these to the list of to be parsed files if they exist.
+
+my $templatefile;
+my $sourcefile;
+my $mainprocsrc = "ompts_standaloneProc.f";
+
+$templatefile = $ARGV[0];
+$outfile = $ARGV[1];
+
+if (!-e $templatefile) {
+ print "Temaplte file not found";
+ exit -1;
+}
+
+
+# Checking if options were valid:
+#################################################################
+# preparations and checks for sourcefiles
+
+# Reading the template for the tests
+open(TEST,$templatefile) or die "Error: Could not open template $srcfile\n";
+while(<TEST>){ $src .= $_; }
+close(TEST);
+
+# Extracting the source for the mainprogramm and saving it in $mainprocsrc
+open(MAINPROC,$mainprocsrc) or die "Could not open the sourcefile for the main program $mainprocsrc";
+while(<MAINPROC>){ $mainproc .= $_; }
+close (MAINPROC);
+
+# Some temporary testinformation:
+($description) = get_tag_values ('ompts:testdescription',$src);
+($directive) = get_tag_values ('ompts:directive',$src);
+($functionname) = get_tag_values ('ompts:testcode:functionname',$src);
+
+open (OUTFILE,">$outfile") or die "Could not create the output file for $directive";
+
+# Creating the source for the test:
+($code) = get_tag_values('ompts:testcode',$src);
+# Putting together the functions and the mainprogramm:
+$code .= $mainproc;
+
+#thanks to Dr. Yin Ma in Absoft, get the parameters <ompts:orphan:params> by joon
+ ($parms) = get_tag_values('ompts:orphan:parms',($code));
+ ($parms) = leave_single_space($parms);
+ ($code) = replace_tags('ompts:orphan:parms','',$code);
+
+# Make modifications for the orphaned testversion if necessary:
+if ($orphan) {
+# Get the global variables:
+ @defs = get_tag_values("ompts:orphan:vars",$code);
+ $orphvarsdef = "";
+ foreach (@defs) {
+ if (not /^[ ]*$/gs) { $orphvarsdef = join("\n",$orphvarsdef,$_); }
+ }
+# Generate the orphan subroutines:
+ $orphfuncs = create_orph_fortranfunctions ("", ($code),($parms));
+# Replace orphan regions by functioncalls:
+ ($code) = orphan_regions2fortranfunctions ("", ($code),($parms));
+ ($code) = enlarge_tags ('ompts:orphan:vars','','',($code));
+# to find orphan call statement and add parameters, by joon
+ ($code) = enlarge_tags('ompts:orphan:parms','','',($code));
+# Put all together:
+ $code = $code . $orphfuncs;
+}
+
+# Remove remaining marks for the orpahn regions and its variables:
+($code) = enlarge_tags('ompts:orphan','','',($code));
+($code) = enlarge_tags('ompts:orphan:vars','','',($code));
+# remove parameters between for orphaned directive parametes, added byjoon
+($code) = enlarge_tags('ompts:orphan:parms','','',($code));
+
+if($test) {
+# Remove the marks for the testcode and remove the code for the crosstests:
+ ($code) = enlarge_tags('ompts:check','','',($code));
+ ($code) = delete_tags('ompts:crosscheck',($code));
+}
+elsif($crosstest) {
+# Remove the marks for the crosstestcode and remove the code for the tests:
+ ($code) = enlarge_tags('ompts:crosscheck','','',($code));
+ ($code) = delete_tags('ompts:check',($code));
+}
+# Making some final modifications:
+($code) = replace_tags('testfunctionname',"test_".$functionname,($code));
+($code) = replace_tags('directive',$directive,($code));
+($code) = replace_tags('description',$description,($code));
+($code) = enlarge_tags('ompts:testcode:functionname',"test_",'',($code) );
+# $code = "\#include \"omp_testsuite.h\"\n".$code;
+# Write the result into the file and close it:
+print OUTFILE $code;
+close(OUTFILE);
diff --git a/final/testsuite/testlist-c.txt b/final/testsuite/testlist-c.txt
new file mode 100644
index 0000000..813a218
--- /dev/null
+++ b/final/testsuite/testlist-c.txt
@@ -0,0 +1,68 @@
+# List containing the tests of the OpenMPValidaion Suite available to check
+# the c implementation.
+has_openmp
+omp_atomic
+omp_barrier
+omp_critical
+omp_flush
+omp_for_firstprivate
+omp_for_lastprivate
+omp_for_ordered
+omp_for_private
+omp_for_reduction
+omp_for_schedule_dynamic
+omp_for_schedule_guided
+omp_for_schedule_static
+omp_for_nowait
+omp_get_num_threads
+omp_get_wtick
+omp_get_wtime
+omp_in_parallel
+omp_lock
+omp_master
+omp_nest_lock
+omp_parallel_copyin
+omp_parallel_for_firstprivate
+omp_parallel_for_lastprivate
+omp_parallel_for_ordered
+omp_parallel_for_private
+omp_parallel_for_reduction
+omp_parallel_num_threads
+omp_parallel_sections_firstprivate
+omp_parallel_sections_lastprivate
+omp_parallel_sections_private
+omp_parallel_sections_reduction
+omp_section_firstprivate
+omp_section_lastprivate
+omp_section_private
+omp_sections_reduction
+omp_sections_nowait
+omp_parallel_for_if
+omp_single_copyprivate
+omp_single_nowait
+omp_single_private
+omp_single
+omp_test_lock
+omp_test_nest_lock
+omp_threadprivate
+omp_parallel_default
+omp_parallel_shared
+omp_parallel_private
+omp_parallel_firstprivate
+omp_parallel_if
+omp_parallel_reduction
+
+# New tests for OpenMP 3.0
+omp_for_collapse
+omp_master_3
+omp_task
+omp_task_if
+omp_task_untied
+omp_task_shared
+omp_task_private
+omp_task_firstprivate
+omp_taskwait
+
+# New tests for OpenMP 3.1
+omp_taskyield
+omp_task_final
diff --git a/final/testsuite/testlist-f.txt b/final/testsuite/testlist-f.txt
new file mode 100644
index 0000000..55389a5
--- /dev/null
+++ b/final/testsuite/testlist-f.txt
@@ -0,0 +1,63 @@
+# List containing the tests of the OpenMPValidaion Suite available to check
+# the fortan implementation.
+do_firstprivate
+do_lastprivate
+do_ordered
+do_private
+do_reduction
+do_schedule_dynamic
+do_schedule_guided
+do_schedule_static
+has_openmp
+omp_atomic
+omp_barrier
+omp_copyin
+omp_critical
+omp_flush
+omp_get_num_threads
+omp_in_parallel
+omp_lock
+omp_master
+omp_nest_lock
+omp_test_nest_lock
+omp_nested
+omp_num_threads
+omp_testlock
+omp_threadprivate
+omp_get_wticks
+###omp_workshare_default
+omp_workshare
+### Braucht man den oder obigen erweitern?
+omp_wtime
+par_do_firstprivate
+par_do_lastprivate
+par_do_ordered
+par_do_private
+par_do_reduction
+par_section_firstprivate
+par_section_lastprivate
+par_section_private
+par_section_reduct
+section_firstprivate
+section_lastprivate
+section_private
+section_reduction
+omp_single
+single_copyprivate
+single_nowait
+single_private
+
+# New tests for OpenMP 3.0
+do_collapse
+omp_master_3
+omp_task
+omp_task_if
+omp_task_untied
+omp_task_shared
+omp_task_private
+omp_task_firstprivate
+omp_taskwait
+
+# New tests for OpenMP 3.1
+#omp_taskyield
+#omp_task_final
diff --git a/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.c b/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.c
new file mode 100644
index 0000000..ca01534
--- /dev/null
+++ b/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.c
@@ -0,0 +1,67 @@
+/******************************************************************************\
+ Extended version of omp_set_unset_lock.c for testing hinted locks.
+ Check to make sure OpenMP locks guarantee mutual
+ exclusion for multiple threads.
+\******************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <omp.h>
+
+void cscall(int id, int n[1000], int *passed, omp_lock_t *lock) {
+ int i;
+
+ omp_set_lock( lock );
+ for (i = 0; i < 1000; i++) {
+ n[i] = id;
+ }
+ for (i = 0; i < 1000; i++) {
+ if ( n[i] != id ) {
+ *passed = 0;
+ }
+ }
+ omp_unset_lock( lock );
+}
+
+int hinted_lock(kmp_lock_hint_t hint) {
+ int passed, n[1000], j, id;
+ omp_lock_t lock;
+
+ passed = 1;
+
+ kmp_init_lock_hinted(&lock, hint);
+
+ #pragma omp parallel shared(n, passed, lock) private(id, j)
+ {
+ id = omp_get_thread_num();
+ for (j = 1; j <= 10000; j++) {
+ cscall( id, n, &passed, &lock );
+ }
+ }
+
+ omp_destroy_lock(&lock);
+
+ if (passed) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+int main() {
+ int ret = 0;
+ ret += hinted_lock(kmp_lock_hint_none);
+ ret += hinted_lock(kmp_lock_hint_contended);
+ ret += hinted_lock(kmp_lock_hint_uncontended);
+ ret += hinted_lock(kmp_lock_hint_nonspeculative);
+ ret += hinted_lock(kmp_lock_hint_speculative);
+ // This one will emit Warning on machines with no TSX.
+ ret += hinted_lock(kmp_lock_hint_adaptive);
+ if (ret) {
+ printf(" Test %s failed\n", __FILE__);
+ return 1;
+ } else {
+ printf(" Test %s passed\n", __FILE__);
+ return 0;
+ }
+}
diff --git a/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.f b/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.f
new file mode 100644
index 0000000..f743d38
--- /dev/null
+++ b/final/testsuite/tests_to_integrate/omp_set_unset_lock_hinted.f
@@ -0,0 +1,90 @@
+!
+! Modified version of omp_set_unset_lock.F, using hinted lock API
+!
+ program omp_set_unset_lock_hinted
+
+ integer ret
+#if defined(_OPENMP)
+ include 'omp_lib.h'
+
+ ret = 0
+ call hinted_lock(kmp_lock_hint_none, ret)
+ call hinted_lock(kmp_lock_hint_contended, ret)
+ call hinted_lock(kmp_lock_hint_uncontended, ret)
+ call hinted_lock(kmp_lock_hint_nonspeculative, ret)
+ call hinted_lock(kmp_lock_hint_speculative, ret)
+ call hinted_lock(kmp_lock_hint_adaptive, ret)
+#else
+ ret = 0
+#endif
+
+ if (ret .eq. 0) then
+ print *, 'Test omp_set_unset_lock_hinted.f passed'
+ else
+ print *, 'Test omp_set_unset_lock_hinted.f failed'
+ endif
+
+ stop
+ end
+
+ subroutine hinted_lock(lock_hint, ret)
+#if defined(_OPENMP)
+ include 'omp_lib.h'
+ integer(omp_lock_kind) lock
+ integer(kmp_lock_hint_kind) lock_hint
+#else
+ integer lock
+ integer lock_hint
+#endif
+ integer ret
+ logical passed
+ integer n(1000), j, id
+
+ passed = .TRUE.
+
+ call kmp_init_lock_hinted(lock, lock_hint)
+
+!$omp parallel
+!$omp& shared (n,passed,lock)
+!$omp& private (id,j)
+#if defined(_OPENMP) && !defined(_ASSURE)
+ id = omp_get_thread_num()
+#else
+ id = 0
+#endif
+#if defined(_ASSURE)
+ do j = 1, 10
+#else
+ do j = 1, 10000
+#endif
+ call cscall(id, n, passed, lock)
+ enddo
+!$omp end parallel
+
+ call omp_destroy_lock(lock)
+
+ if (.not. passed) then
+ ret = ret + 1
+ endif
+
+ end
+
+ subroutine cscall(id, n, passed, lock)
+#if defined(_OPENMP)
+ include 'omp_lib.h'
+ integer(omp_lock_kind) lock
+#else
+ integer lock
+#endif
+ integer id, i, n(1000)
+ logical passed
+
+ call omp_set_lock(lock)
+ do i = 1,1000
+ n(i) = id
+ enddo
+ do i = 1,1000
+ if (n(i) .ne. id) passed = .FALSE.
+ enddo
+ call omp_unset_lock(lock)
+ end
diff --git a/final/www/README.txt b/final/www/README.txt
new file mode 100644
index 0000000..a86d3e8
--- /dev/null
+++ b/final/www/README.txt
@@ -0,0 +1,115 @@
+
+ README for the LLVM* OpenMP* Runtime Library
+ ============================================
+
+How to Build Documentation
+==========================
+
+The main documentation is in Doxygen* format, and this distribution
+should come with pre-built PDF documentation in doc/Reference.pdf.
+However, an HTML version can be built by executing:
+
+% doxygen doc/doxygen/config
+
+in the runtime directory.
+
+That will produce HTML documentation in the doc/doxygen/generated
+directory, which can be accessed by pointing a web browser at the
+index.html file there.
+
+If you don't have Doxygen installed, you can download it from
+www.doxygen.org.
+
+
+How to Build the LLVM* OpenMP* Runtime Library
+==============================================
+In-tree build:
+
+$ cd where-you-want-to-live
+Check out openmp into llvm/projects
+$ cd where-you-want-to-build
+$ mkdir build && cd build
+$ cmake path/to/llvm -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make omp
+
+Out-of-tree build:
+
+$ cd where-you-want-to-live
+Check out openmp
+$ cd where-you-want-to-live/openmp/runtime
+$ mkdir build && cd build
+$ cmake path/to/openmp -DCMAKE_C_COMPILER=<C compiler> -DCMAKE_CXX_COMPILER=<C++ compiler>
+$ make
+
+For details about building, please look at Build_With_CMake.txt
+
+Architectures Supported
+=======================
+* IA-32 architecture
+* Intel(R) 64 architecture
+* Intel(R) Many Integrated Core Architecture
+* ARM* architecture
+* Aarch64 (64-bit ARM) architecture
+* IBM(R) Power architecture (big endian)
+* IBM(R) Power architecture (little endian)
+
+Supported RTL Build Configurations
+==================================
+
+Supported Architectures: IA-32 architecture, Intel(R) 64, and
+Intel(R) Many Integrated Core Architecture
+
+ ----------------------------------------------
+ | icc/icl | gcc | clang |
+--------------|---------------|----------------------------|
+| Linux* OS | Yes(1,5) | Yes(2,4) | Yes(4,6,7) |
+| FreeBSD* | No | No | Yes(4,6,7,8) |
+| OS X* | Yes(1,3,4) | No | Yes(4,6,7) |
+| Windows* OS | Yes(1,4) | No | No |
+------------------------------------------------------------
+
+(1) On IA-32 architecture and Intel(R) 64, icc/icl versions 12.x are
+ supported (12.1 is recommended).
+(2) GCC* version 4.7 is supported.
+(3) For icc on OS X*, OS X* version 10.5.8 is supported.
+(4) Intel(R) Many Integrated Core Architecture not supported.
+(5) On Intel(R) Many Integrated Core Architecture, icc/icl versions 13.0
+ or later are required.
+(6) Clang* version 3.3 is supported.
+(7) Clang* currently does not offer a software-implemented 128 bit extended
+ precision type. Thus, all entry points reliant on this type are removed
+ from the library and cannot be called in the user program. The following
+ functions are not available:
+ __kmpc_atomic_cmplx16_*
+ __kmpc_atomic_float16_*
+ __kmpc_atomic_*_fp
+(8) Community contribution provided AS IS, not tested by Intel.
+
+Supported Architectures: IBM(R) Power 7 and Power 8
+
+ -----------------------------
+ | gcc | clang |
+--------------|------------|--------------|
+| Linux* OS | Yes(1,2) | Yes(3,4) |
+-------------------------------------------
+
+(1) On Power 7, gcc version 4.8.2 is supported.
+(2) On Power 8, gcc version 4.8.2 is supported.
+(3) On Power 7, clang version 3.7 is supported.
+(4) On Power 8, clang version 3.7 is supported.
+
+
+Front-end Compilers that work with this RTL
+===========================================
+
+The following compilers are known to do compatible code generation for
+this RTL: clang (from the OpenMP development branch at
+http://clang-omp.github.io/ ), Intel compilers, GCC. See the documentation
+for more details.
+
+-----------------------------------------------------------------------
+
+Notices
+=======
+
+*Other names and brands may be claimed as the property of others.
diff --git a/final/www/Reference.pdf b/final/www/Reference.pdf
new file mode 100644
index 0000000..e97c40c
--- /dev/null
+++ b/final/www/Reference.pdf
@@ -0,0 +1,13882 @@
+%PDF-1.4
+%ÐÔÅØ
+5 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+8 0 obj
+(\376\377\000L\000L\000V\000M\000\040\000\040\000O\000p\000e\000n\000M\000P\000\040\000R\000u\000n\000t\000i\000m\000e\000\040\000L\000i\000b\000r\000a\000r\000y\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e)
+endobj
+9 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+12 0 obj
+(\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)
+endobj
+13 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+16 0 obj
+(\376\377\000Q\000u\000i\000c\000k\000l\000y\000\040\000B\000u\000i\000l\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000R\000u\000n\000t\000i\000m\000e)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+20 0 obj
+(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000R\000T\000L\000\040\000B\000u\000i\000l\000d\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000s)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+24 0 obj
+(\376\377\000F\000r\000o\000n\000t\000-\000e\000n\000d\000\040\000C\000o\000m\000p\000i\000l\000e\000r\000s\000\040\000t\000h\000a\000t\000\040\000w\000o\000r\000k\000\040\000w\000i\000t\000h\000\040\000t\000h\000i\000s\000\040\000R\000T\000L)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.5) >>
+endobj
+28 0 obj
+(\376\377\000O\000u\000t\000l\000i\000n\000i\000n\000g)
+endobj
+29 0 obj
+<< /S /GoTo /D (subsection.1.5.1) >>
+endobj
+32 0 obj
+(\376\377\000A\000d\000d\000r\000e\000s\000s\000i\000n\000g\000\040\000s\000h\000a\000r\000e\000d\000\040\000v\000a\000r\000i\000a\000b\000l\000e\000s)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsubsection.1.5.1.1) >>
+endobj
+36 0 obj
+(\376\377\000C\000u\000r\000r\000e\000n\000t\000\040\000T\000e\000c\000h\000n\000i\000q\000u\000e)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.5.1.2) >>
+endobj
+40 0 obj
+(\376\377\000F\000u\000t\000u\000r\000e\000\040\000T\000e\000c\000h\000n\000i\000q\000u\000e)
+endobj
+41 0 obj
+<< /S /GoTo /D (section.1.6) >>
+endobj
+44 0 obj
+(\376\377\000L\000i\000b\000r\000a\000r\000y\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e\000s)
+endobj
+45 0 obj
+<< /S /GoTo /D (section.1.7) >>
+endobj
+48 0 obj
+(\376\377\000E\000x\000a\000m\000p\000l\000e\000s)
+endobj
+49 0 obj
+<< /S /GoTo /D (subsection.1.7.1) >>
+endobj
+52 0 obj
+(\376\377\000W\000o\000r\000k\000\040\000S\000h\000a\000r\000i\000n\000g\000\040\000E\000x\000a\000m\000p\000l\000e)
+endobj
+53 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+56 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+60 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000s)
+endobj
+61 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+64 0 obj
+(\376\377\000H\000i\000e\000r\000a\000r\000c\000h\000i\000c\000a\000l\000\040\000I\000n\000d\000e\000x)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+68 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000H\000i\000e\000r\000a\000r\000c\000h\000y)
+endobj
+69 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+72 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+76 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t)
+endobj
+77 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+80 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+81 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+84 0 obj
+(\376\377\000A\000t\000o\000m\000i\000c\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000s)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsection.5.1.1) >>
+endobj
+88 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+89 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+92 0 obj
+(\376\377\000W\000a\000i\000t\000/\000R\000e\000l\000e\000a\000s\000e\000\040\000o\000p\000e\000r\000a\000t\000i\000o\000n\000s)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+96 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+100 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsubsection.5.2.2.1) >>
+endobj
+104 0 obj
+(\376\377\000f\000l\000a\000g\000\137\000t\000y\000p\000e)
+endobj
+105 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+108 0 obj
+(\376\377\000B\000a\000s\000i\000c\000\040\000T\000y\000p\000e\000s)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsection.5.3.1) >>
+endobj
+112 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsection.5.3.2) >>
+endobj
+116 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.1) >>
+endobj
+120 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000A\000T\000O\000M\000I\000C\000\137\000R\000E\000D\000U\000C\000E)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.2) >>
+endobj
+124 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000A\000U\000T\000O\000P\000A\000R)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.3) >>
+endobj
+128 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000B\000A\000R\000R\000I\000E\000R\000\137\000E\000X\000P\000L)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.4) >>
+endobj
+132 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000B\000A\000R\000R\000I\000E\000R\000\137\000I\000M\000P\000L)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.5) >>
+endobj
+136 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000I\000M\000B)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2.6) >>
+endobj
+140 0 obj
+(\376\377\000K\000M\000P\000\137\000I\000D\000E\000N\000T\000\137\000K\000M\000P\000C)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsection.5.3.3) >>
+endobj
+144 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.5.3.3.1) >>
+endobj
+148 0 obj
+(\376\377\000i\000d\000e\000n\000t\000\137\000t)
+endobj
+149 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+152 0 obj
+(\376\377\000D\000e\000p\000r\000e\000c\000a\000t\000e\000d\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.5.4.1) >>
+endobj
+156 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.5.4.2) >>
+endobj
+160 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsubsection.5.4.2.1) >>
+endobj
+164 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000k\000\137\000t\000o\000\137\000f\000o\000r\000k)
+endobj
+165 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+168 0 obj
+(\376\377\000S\000t\000a\000r\000t\000u\000p\000\040\000a\000n\000d\000\040\000S\000h\000u\000t\000d\000o\000w\000n)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsection.5.5.1) >>
+endobj
+172 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsection.5.5.2) >>
+endobj
+176 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.5.5.2.1) >>
+endobj
+180 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000e\000g\000i\000n)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsubsection.5.5.2.2) >>
+endobj
+184 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d)
+endobj
+185 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+188 0 obj
+(\376\377\000P\000a\000r\000a\000l\000l\000e\000l\000\040\000\050\000f\000o\000r\000k\000/\000j\000o\000i\000n\000\051)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.5.6.1) >>
+endobj
+192 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.5.6.2) >>
+endobj
+196 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsubsection.5.6.2.1) >>
+endobj
+200 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000m\000i\000c\000r\000o)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.5.6.3) >>
+endobj
+204 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.1) >>
+endobj
+208 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000s\000e\000r\000i\000a\000l\000i\000z\000e\000d\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.2) >>
+endobj
+212 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000k\000\137\000c\000a\000l\000l)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.3) >>
+endobj
+216 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000k\000\137\000t\000e\000a\000m\000s)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.4) >>
+endobj
+220 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000p\000u\000s\000h\000\137\000n\000u\000m\000\137\000t\000e\000a\000m\000s)
+endobj
+221 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.5) >>
+endobj
+224 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000p\000u\000s\000h\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+225 0 obj
+<< /S /GoTo /D (subsubsection.5.6.3.6) >>
+endobj
+228 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000s\000e\000r\000i\000a\000l\000i\000z\000e\000d\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.5.7) >>
+endobj
+232 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.5.7.1) >>
+endobj
+236 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.5.7.2) >>
+endobj
+240 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.1) >>
+endobj
+244 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000o\000u\000n\000d\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.2) >>
+endobj
+248 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000o\000u\000n\000d\000\137\000t\000h\000r\000e\000a\000d\000\137\000n\000u\000m)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.3) >>
+endobj
+252 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000g\000l\000o\000b\000a\000l\000\137\000n\000u\000m\000\137\000t\000h\000r\000e\000a\000d\000s)
+endobj
+253 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.4) >>
+endobj
+256 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000g\000l\000o\000b\000a\000l\000\137\000t\000h\000r\000e\000a\000d\000\137\000n\000u\000m)
+endobj
+257 0 obj
+<< /S /GoTo /D (subsubsection.5.7.2.5) >>
+endobj
+260 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000i\000n\000\137\000p\000a\000r\000a\000l\000l\000e\000l)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.5.8) >>
+endobj
+264 0 obj
+(\376\377\000W\000o\000r\000k\000\040\000S\000h\000a\000r\000i\000n\000g)
+endobj
+265 0 obj
+<< /S /GoTo /D (subsection.5.8.1) >>
+endobj
+268 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+269 0 obj
+<< /S /GoTo /D (subsection.5.8.2) >>
+endobj
+272 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+273 0 obj
+<< /S /GoTo /D (subsubsection.5.8.2.1) >>
+endobj
+276 0 obj
+(\376\377\000s\000c\000h\000e\000d\000\137\000t\000y\000p\000e)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.5.8.3) >>
+endobj
+280 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.1) >>
+endobj
+284 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000c\000r\000i\000t\000i\000c\000a\000l)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.2) >>
+endobj
+288 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0004)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.3) >>
+endobj
+292 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0004\000u)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.4) >>
+endobj
+296 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0008)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.5) >>
+endobj
+300 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000f\000i\000n\000i\000\137\0008\000u)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.6) >>
+endobj
+304 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.7) >>
+endobj
+308 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+309 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.8) >>
+endobj
+312 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+313 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.9) >>
+endobj
+316 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.10) >>
+endobj
+320 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0004)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.11) >>
+endobj
+324 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0004\000u)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.12) >>
+endobj
+328 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0008)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.13) >>
+endobj
+332 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000n\000e\000x\000t\000\137\0008\000u)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.14) >>
+endobj
+336 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000d\000i\000s\000p\000a\000t\000c\000h\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.15) >>
+endobj
+340 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.16) >>
+endobj
+344 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.17) >>
+endobj
+348 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+349 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.18) >>
+endobj
+352 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000d\000i\000s\000t\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.19) >>
+endobj
+356 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000c\000r\000i\000t\000i\000c\000a\000l)
+endobj
+357 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.20) >>
+endobj
+360 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.21) >>
+endobj
+364 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000o\000r\000d\000e\000r\000e\000d)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.22) >>
+endobj
+368 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000s\000i\000n\000g\000l\000e)
+endobj
+369 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.23) >>
+endobj
+372 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000f\000i\000n\000i)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.24) >>
+endobj
+376 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.25) >>
+endobj
+380 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.26) >>
+endobj
+384 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+385 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.27) >>
+endobj
+388 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000o\000r\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+389 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.28) >>
+endobj
+392 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.29) >>
+endobj
+396 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000r\000d\000e\000r\000e\000d)
+endobj
+397 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.30) >>
+endobj
+400 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000s\000i\000n\000g\000l\000e)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.31) >>
+endobj
+404 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004)
+endobj
+405 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.32) >>
+endobj
+408 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0004\000u)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.33) >>
+endobj
+412 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008)
+endobj
+413 0 obj
+<< /S /GoTo /D (subsubsection.5.8.3.34) >>
+endobj
+416 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000e\000a\000m\000\137\000s\000t\000a\000t\000i\000c\000\137\000i\000n\000i\000t\000\137\0008\000u)
+endobj
+417 0 obj
+<< /S /GoTo /D (section.5.9) >>
+endobj
+420 0 obj
+(\376\377\000S\000y\000n\000c\000h\000r\000o\000n\000i\000z\000a\000t\000i\000o\000n)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.5.9.1) >>
+endobj
+424 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.5.9.2) >>
+endobj
+428 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.1) >>
+endobj
+432 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.2) >>
+endobj
+436 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.3) >>
+endobj
+440 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.4) >>
+endobj
+444 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000b\000a\000r\000r\000i\000e\000r\000\137\000m\000a\000s\000t\000e\000r)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.5) >>
+endobj
+448 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000r\000e\000d\000u\000c\000e)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.6) >>
+endobj
+452 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000e\000n\000d\000\137\000r\000e\000d\000u\000c\000e\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.7) >>
+endobj
+456 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000f\000l\000u\000s\000h)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.8) >>
+endobj
+460 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000r\000e\000d\000u\000c\000e)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.5.9.2.9) >>
+endobj
+464 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000r\000e\000d\000u\000c\000e\000\137\000n\000o\000w\000a\000i\000t)
+endobj
+465 0 obj
+<< /S /GoTo /D (section.5.10) >>
+endobj
+468 0 obj
+(\376\377\000T\000h\000r\000e\000a\000d\000\040\000p\000r\000i\000v\000a\000t\000e\000\040\000d\000a\000t\000a\000\040\000s\000u\000p\000p\000o\000r\000t)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsection.5.10.1) >>
+endobj
+472 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsection.5.10.2) >>
+endobj
+476 0 obj
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.1) >>
+endobj
+480 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000c\000t\000o\000r)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.2) >>
+endobj
+484 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000c\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+485 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.3) >>
+endobj
+488 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000t\000o\000r)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.4) >>
+endobj
+492 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000c\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+493 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.5) >>
+endobj
+496 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000d\000t\000o\000r)
+endobj
+497 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2.6) >>
+endobj
+500 0 obj
+(\376\377\000k\000m\000p\000c\000\137\000d\000t\000o\000r\000\137\000v\000e\000c)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsection.5.10.3) >>
+endobj
+504 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.1) >>
+endobj
+508 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000c\000o\000p\000y\000p\000r\000i\000v\000a\000t\000e)
+endobj
+509 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.2) >>
+endobj
+512 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000c\000a\000c\000h\000e\000d)
+endobj
+513 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.3) >>
+endobj
+516 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r)
+endobj
+517 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3.4) >>
+endobj
+520 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000t\000h\000r\000e\000a\000d\000p\000r\000i\000v\000a\000t\000e\000\137\000r\000e\000g\000i\000s\000t\000e\000r\000\137\000v\000e\000c)
+endobj
+521 0 obj
+<< /S /GoTo /D (section.5.11) >>
+endobj
+524 0 obj
+(\376\377\000S\000t\000a\000t\000i\000s\000t\000i\000c\000s\000\040\000G\000a\000t\000h\000e\000r\000i\000n\000g\000\040\000f\000r\000o\000m\000\040\000O\000M\000P\000T\000B)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.5.11.1) >>
+endobj
+528 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+529 0 obj
+<< /S /GoTo /D (subsection.5.11.2) >>
+endobj
+532 0 obj
+(\376\377\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s)
+endobj
+533 0 obj
+<< /S /GoTo /D (subsection.5.11.3) >>
+endobj
+536 0 obj
+(\376\377\000M\000a\000c\000r\000o\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+537 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.1) >>
+endobj
+540 0 obj
+(\376\377\000K\000M\000P\000\137\000C\000O\000U\000N\000T\000\137\000B\000L\000O\000C\000K)
+endobj
+541 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.2) >>
+endobj
+544 0 obj
+(\376\377\000K\000M\000P\000\137\000C\000O\000U\000N\000T\000\137\000V\000A\000L\000U\000E)
+endobj
+545 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.3) >>
+endobj
+548 0 obj
+(\376\377\000K\000M\000P\000\137\000F\000O\000R\000E\000A\000C\000H\000\137\000C\000O\000U\000N\000T\000E\000R)
+endobj
+549 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.4) >>
+endobj
+552 0 obj
+(\376\377\000K\000M\000P\000\137\000F\000O\000R\000E\000A\000C\000H\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+553 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.5) >>
+endobj
+556 0 obj
+(\376\377\000K\000M\000P\000\137\000O\000U\000T\000P\000U\000T\000\137\000S\000T\000A\000T\000S)
+endobj
+557 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.6) >>
+endobj
+560 0 obj
+(\376\377\000K\000M\000P\000\137\000R\000E\000S\000E\000T\000\137\000S\000T\000A\000T\000S)
+endobj
+561 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.7) >>
+endobj
+564 0 obj
+(\376\377\000K\000M\000P\000\137\000S\000T\000A\000R\000T\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+565 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.8) >>
+endobj
+568 0 obj
+(\376\377\000K\000M\000P\000\137\000S\000T\000O\000P\000\137\000E\000X\000P\000L\000I\000C\000I\000T\000\137\000T\000I\000M\000E\000R)
+endobj
+569 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3.9) >>
+endobj
+572 0 obj
+(\376\377\000K\000M\000P\000\137\000T\000I\000M\000E\000\137\000B\000L\000O\000C\000K)
+endobj
+573 0 obj
+<< /S /GoTo /D (section.5.12) >>
+endobj
+576 0 obj
+(\376\377\000T\000a\000s\000k\000i\000n\000g\000\040\000s\000u\000p\000p\000o\000r\000t)
+endobj
+577 0 obj
+<< /S /GoTo /D (subsection.5.12.1) >>
+endobj
+580 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+581 0 obj
+<< /S /GoTo /D (subsection.5.12.2) >>
+endobj
+584 0 obj
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+585 0 obj
+<< /S /GoTo /D (subsubsection.5.12.2.1) >>
+endobj
+588 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000m\000p\000\137\000t\000a\000s\000k\000\137\000w\000i\000t\000h\000\137\000d\000e\000p\000s)
+endobj
+589 0 obj
+<< /S /GoTo /D (subsubsection.5.12.2.2) >>
+endobj
+592 0 obj
+(\376\377\000\137\000\137\000k\000m\000p\000c\000\137\000o\000m\000p\000\137\000w\000a\000i\000t\000\137\000d\000e\000p\000s)
+endobj
+593 0 obj
+<< /S /GoTo /D (section.5.13) >>
+endobj
+596 0 obj
+(\376\377\000U\000s\000e\000r\000\040\000v\000i\000s\000i\000b\000l\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+597 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+600 0 obj
+(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+601 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+604 0 obj
+(\376\377\000h\000i\000e\000r\000a\000r\000c\000h\000y\000\137\000i\000n\000f\000o\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+605 0 obj
+<< /S /GoTo /D (subsection.6.1.1) >>
+endobj
+608 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+609 0 obj
+<< /S /GoTo /D (subsection.6.1.2) >>
+endobj
+612 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+613 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.1) >>
+endobj
+616 0 obj
+(\376\377\000d\000e\000p\000t\000h)
+endobj
+617 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.2) >>
+endobj
+620 0 obj
+(\376\377\000m\000a\000x\000L\000e\000a\000v\000e\000s)
+endobj
+621 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.3) >>
+endobj
+624 0 obj
+(\376\377\000m\000a\000x\000L\000e\000v\000e\000l\000s)
+endobj
+625 0 obj
+<< /S /GoTo /D (subsubsection.6.1.2.4) >>
+endobj
+628 0 obj
+(\376\377\000n\000u\000m\000P\000e\000r\000L\000e\000v\000e\000l)
+endobj
+629 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+632 0 obj
+(\376\377\000i\000d\000e\000n\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+633 0 obj
+<< /S /GoTo /D (subsection.6.2.1) >>
+endobj
+636 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+637 0 obj
+<< /S /GoTo /D (subsection.6.2.2) >>
+endobj
+640 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+641 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.1) >>
+endobj
+644 0 obj
+(\376\377\000f\000l\000a\000g\000s)
+endobj
+645 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.2) >>
+endobj
+648 0 obj
+(\376\377\000p\000s\000o\000u\000r\000c\000e)
+endobj
+649 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.3) >>
+endobj
+652 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0001)
+endobj
+653 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.4) >>
+endobj
+656 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0002)
+endobj
+657 0 obj
+<< /S /GoTo /D (subsubsection.6.2.2.5) >>
+endobj
+660 0 obj
+(\376\377\000r\000e\000s\000e\000r\000v\000e\000d\000\137\0003)
+endobj
+661 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+664 0 obj
+(\376\377\000k\000m\000p\000\137\000f\000l\000a\000g\000<\000\040\000P\000\040\000>\000\040\000C\000l\000a\000s\000s\000\040\000T\000e\000m\000p\000l\000a\000t\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+665 0 obj
+<< /S /GoTo /D (subsection.6.3.1) >>
+endobj
+668 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+669 0 obj
+<< /S /GoTo /D (subsection.6.3.2) >>
+endobj
+672 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+673 0 obj
+<< /S /GoTo /D (subsubsection.6.3.2.1) >>
+endobj
+676 0 obj
+(\376\377\000g\000e\000t)
+endobj
+677 0 obj
+<< /S /GoTo /D (subsubsection.6.3.2.2) >>
+endobj
+680 0 obj
+(\376\377\000g\000e\000t\000\137\000t\000y\000p\000e)
+endobj
+681 0 obj
+<< /S /GoTo /D (subsection.6.3.3) >>
+endobj
+684 0 obj
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+685 0 obj
+<< /S /GoTo /D (subsubsection.6.3.3.1) >>
+endobj
+688 0 obj
+(\376\377\000l\000o\000c)
+endobj
+689 0 obj
+<< /S /GoTo /D (subsubsection.6.3.3.2) >>
+endobj
+692 0 obj
+(\376\377\000t)
+endobj
+693 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+696 0 obj
+(\376\377\000s\000t\000a\000t\000s\000\137\000f\000l\000a\000g\000s\000\137\000e\000\040\000C\000l\000a\000s\000s\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+697 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+700 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+701 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+703 0 obj
+(\376\377\000I\000n\000d\000e\000x)
+endobj
+704 0 obj
+<< /S /GoTo /D [705 0 R /Fit ] >>
+endobj
+707 0 obj <<
+/Length 238
+/Filter /FlateDecode
+>>
+stream
+xÚ…ÐMKA àûþŠw„I“Ìw¢d‹¢‹¤KÇÒƒk)ì¿ww§Ö‚O !ïÁfýS/Ûjrc°`bvоE8c0R?ZÁKÝ4Š™ê§¹Òb}·ÍÝü^-ÚÛ10rä!=F+àP(”äÅiëìFÀDôÙÚÃg·ß¼çÂ7›åNõç^wJª¿apÉ„½aЖÐe–»\’û¼*ÖRÉ ŒýՇ깯Ã:weÀÑ ŸüˆäS¿`0Ù^,±èÏCúÇ}ÌÛÒˆ9VbwTÍ”djÒÀþùøu[}Yê\ž
+endstream
+endobj
+705 0 obj <<
+/Type /Page
+/Contents 707 0 R
+/Resources 706 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+>> endobj
+708 0 obj <<
+/D [705 0 R /XYZ 70.866 771.024 null]
+>> endobj
+706 0 obj <<
+/Font << /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+713 0 obj <<
+/Length 677
+/Filter /FlateDecode
+>>
+stream
+xÚ•TÛNÜ0}ÏWøÑ®ºÆ—ØIx+mA EPØ^$à!$f7í&Þ&^(_ß²7!U}ò±çÌÌÏØÌgÉÉ,9:-8Èq!%³'œK ²‚aIÁ¬w¡‡ÙEòy–üN¨õ"€nXyŽs–‚ªMíÌ‹¼xf RÁ±H¹ÅKp›|IÈ?3KŠÉ˜z†rû²VmÙÿœŽ£ÓTì8ÙèR¸è¾Ph ¯Vª»¼¸+ÛxZvu
+ðö­9 ëEi®@Þ,È\Aq>jK±W:8™fŒÛÄÕWïÀW”ˆo]%x#ìÈùûØQ¸PqWéugBòF È.û§ck'-g°ÖÕºU »pJ­º•»¿×i¾ˆö{&h@ŒPÚÍtŠ¨-âÛeØ^÷ú§mË…€ç{±ÖÎ6F‡„›PƒŸ/‡–M¥º!nŒ/PÀ6)ãýè¡„81cé;“J²·ÔØDãýøw ±ä‚ºwà\RLH\Þ½õT°È˜ØÑ£2°®Ì¦ î‘ 3ôúÜÕÑЖþ†£1¶ºZ–VVô(‡ƒAXõzåRØq0¯û“¥]òm¿7Ã[ÿŒÈì7ó?¿Ìø»HÌ2™ºê™˜çÔ2±”±þ3Õ©¾4£úqœ¿#.àxx«V0W;FQ~LØ1—a÷ä¦}ñéÔ·Õ¢m[­ Ì
+*2ž;A48+Òñëº'„GÖ®lg#ç&Î@HÑ<öþÑn[âDüI»^ýy{‚ê¯ø/)È}
+endstream
+endobj
+712 0 obj <<
+/Type /Page
+/Contents 713 0 R
+/Resources 711 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+>> endobj
+711 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+748 0 obj <<
+/Length 1140
+/Filter /FlateDecode
+>>
+stream
+xÚíš]w›6Çïó)¸„ T½ .ÛɲÙK—²õ¢ÛÉ¡˜ÆœbðxéÚo? ¶§v’sv:“‹`ˆ,Ù¿ç¯ÿ#=
+4 hÜ\Àæ
+0S/ÕåæâÊ»xs 50:Øð>‡sƒ ¸‹ oi|0'iR„I‘[y?o»’¿‘‘©õâþFöåÃ.çDõ › à0\w‚,És>ÿc¡:’­…áÊÖ˜«ÖÄ„É÷Tmÿ„è6»=ªÖ¢is· “ÅÛ¡ž8 Ûfº€
+Ú´¹/“"Z‡–…cΣ™ŸÉ Íoõ“[ùí³O~î}ãƒü#CD~±úqe;#ÚÂQÃF(4Paá\ ’¥Ë2(¢4éŽãbËfŒÕþšwüºF.‡¥”º¬ƒò[†æçXK᪌âe”<ÖwÅJkF
+ÈBf¥¡Nè„ëŒìObO4ûwåf“ÊyH¡Y„KÍÙ›ïÄA½ÊœäÇefÉ)ë«ù“÷&sFÒ=ÒT“¾¶(33éñv˜hГt½‰â0Ë¡ûJßõÍ?Š³Š bægý(*VMË(ßƪ;8ý_¡ÆG£fõ]YÄQ¢ ¤ƒ†Rz~ÎðŸÅG®wÜ~*fU2&›—ËeæykôùÊÏúbafúµü#ÿ£JqØsÁð9Ю0“C˜ Žƒ0W ©L“2Ëäʲ&ëYH ƒUý]ö2)Çè$Ž\æ&
+‡`b óº,Ê,<†%‚œ0mFp™Fê4H¹öjµ¨–r®“ÎfÀ’䆠¿Ð dôè“<úx© —ÙW½°\‡Ð1w¾N\䬡§åNÑæÎ÷jnì/ß­š|Ù$TÞÇ#|¶ð«Ù@Ööª6Q…Ç°±v-¬‹+‹tYÆaãTËВпîS¦ÔL¾W×>Ä‘Õ JàmÜ›aÛòE=pÞ(—µ¯=5Å‘"A¸”nEB´H~ŠBUá’ëƒ@å·Uøñ)’qŸ%m¤•Ì$ös½WTŸ¨NµÁʪrmw9 ÝQ+ÏÑŠ{²V
+l[«U'éþãC¡vh1&ÆEWãä ʃ%GÖžy^ùy³xiõÚ?Z x\ï¾ÔÒeÐi~NF?¡÷ £ýœ´~¾ðƒ,m@«sþ$Úzúv{!]|
+ÕÚ´
+endstream
+endobj
+747 0 obj <<
+/Type /Page
+/Contents 748 0 R
+/Resources 746 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R ]
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 604.987 273.726 615.377]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 589.033 156.569 597.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 569.434 224.147 580.016]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 551.727 253.511 562.309]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 534.127 284.247 544.602]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 516.313 145.101 526.895]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.5) >>
+>> endobj
+722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 498.606 254.45 508.981]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.5.1) >>
+>> endobj
+723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 481.006 255.621 491.481]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.5.1.1) >>
+>> endobj
+724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 463.299 251.64 473.567]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.5.1.2) >>
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 445.592 178.895 456.066]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.6) >>
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 427.885 149.082 438.153]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.7) >>
+>> endobj
+727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 410.07 233.28 420.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.7.1) >>
+>> endobj
+728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 383.952 143.966 392.405]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 366.254 143.604 374.738]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 338.244 163.647 346.89]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 318.762 172.628 329.237]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 292.537 136.506 301.182]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 274.758 148.58 283.529]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 246.829 185.937 255.474]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 227.346 183.378 237.821]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 209.639 221.956 219.908]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1.1) >>
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 191.932 206.941 202.407]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 174.225 221.956 184.493]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 156.518 276.39 166.786]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 138.703 218.833 149.286]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.2.2.1) >>
+>> endobj
+741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 121.104 157.475 131.372]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 103.397 221.956 113.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.1) >>
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 87.393 269.163 96.164]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.2) >>
+>> endobj
+744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 68.794 316.457 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.1) >>
+>> endobj
+750 0 obj <<
+/D [747 0 R /XYZ 70.866 635.428 null]
+>> endobj
+746 0 obj <<
+/Font << /F104 749 0 R /F93 714 0 R /F97 715 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+793 0 obj <<
+/Length 1242
+/Filter /FlateDecode
+>>
+stream
+xÚí›]sÚ8†ïù¾4¨ú–Ü»¤ÐÝа„ý˜I;
+ñ fºÙ_¿²-ˆ±Lc†d¦‹};âñÑ{Þ#ÙЙ:ÐùÔ¸6Þ}ôˆ#Ç9q†÷Ž€@ráĹuƒ ùmøÙ¡Œ=}]²÷Ãõ—açËð&>Öè 7>´»…”@bêŒçÛoЙècŸˆ'ïÉ™s‡2%z}æÜ4~m@Ó¬ô>«©¹áÀ4”²LC…€CæŽ
+fÛ‡ÐVëñJan°,Ò)®:÷€[‹&=f½ ñ. ©É–Rnw§Ü¾ÿ8_ŽýÅ£-üû&î"æÇ<_²
+h39R›™Ñæ›h¤¹QèF›e¬£Ð(ÄÍÃF×ÑdÑÔX¿ÛÆòZ¬_kZJ¬wÂj±>QRh銅Õbý:d‹ÅšÙb}§¦E”#\U?MK –ý30•–éJÆDÅ+zdä& ö›:êDˆôßÙLÍR%ø
+ܳïþZ¡Þ‹,Y ´ê%â±™‘WÆð:3ž¨ß¬´Úð]f¬Ç¢^ rq’ä™$™¨ú<¯–ºx¤âºÎʦf¸’ÚÛ½eØ’¼·ÓvÄ_+£Ä£Yðo\4ª‰¿Ô%d6±ZŠq†AY ¨$oßö|…?ÖpìÌ…DÝÃíº›¹’ƒ0#5š[CËWaÖ‰E‘îS\nÖ~wÕÍ<†¨{®ÍÑ««½îË~Äêa¥b™›¬my£•Œ,¾O«01<gÍnfÚâs'w &¦&ꨙ*§î$3w^h_<êÕÅgÉâS7,+êâóDƒ)Jˇ¨‡e_‡l±uò‹6ï»d¦Õ8Q+™1þ¿×bQ:ç {Ä5å'ûØíˆÙ¾œöâ)çƧ³ÅÝhV" ¸ÕE A½Qçã"åQ¸rž;³¦±¨^Æ(ñd9;¹2iìä{ïH˜ þ‘q/áÔΨ´~î‹©;´w܇¬]æi^ˆÀÒò"w.³cDW¥Êòl8ws9ÿ¿SdA¡¨Óâ÷˜eÆ_®ÇºÐb„ùŒF*?_š¨ùaº&6d=±qTôîÏÔ}ÎÅø˜¹¶ß–q€§ñ'[˜q@ô³¢ p}ÇäQ}R¡Z=¿ò¼}N: Ç£_&ÿ*óÊ&f K×yñ{ÂÓ­û&6ƒ?zãêê÷^ºv½Ta¯ÿBÝ ¡ä "“oÈ„6PÝ~ÒöBbÎÊ6›LðöœÁ&Œ‚¹Ñº«àn•X­éž»¸OÛX‹­Ä?OÓäæÿ0©+`
+endstream
+endobj
+792 0 obj <<
+/Type /Page
+/Contents 793 0 R
+/Resources 791 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 745 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ]
+>> endobj
+745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.989 282.09 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.2) >>
+>> endobj
+751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 741.292 306.514 750.748]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.3) >>
+>> endobj
+752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 723.594 304.514 733.051]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.4) >>
+>> endobj
+753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 705.897 254.689 715.354]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.5) >>
+>> endobj
+754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 688.2 264.65 697.863]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2.6) >>
+>> endobj
+755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 669.691 235.71 680.165]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.3) >>
+>> endobj
+756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 652.805 209.364 662.262]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.3.1) >>
+>> endobj
+757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 634.296 197.428 644.565]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 616.599 221.956 626.867]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 600.605 238.777 609.17]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.2) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 581.204 260.553 591.679]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.4.2.1) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 563.507 198.665 573.982]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 545.81 221.956 556.078]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5.1) >>
+>> endobj
+763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 529.816 238.777 538.381]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5.2) >>
+>> endobj
+764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 510.307 240.755 520.683]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.5.2.1) >>
+>> endobj
+765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 492.718 233.78 502.986]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.5.2.2) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 475.021 178.886 485.495]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 457.323 221.956 467.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.1) >>
+>> endobj
+768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 439.626 235.71 450.1]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.2) >>
+>> endobj
+769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 421.929 230.767 432.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.2.1) >>
+>> endobj
+770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 405.935 238.777 414.5]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6.3) >>
+>> endobj
+771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 386.534 310.423 396.802]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.1) >>
+>> endobj
+772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 368.837 252.071 379.311]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.2) >>
+>> endobj
+773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 351.139 263.036 361.614]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.3) >>
+>> endobj
+774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 333.442 289.998 343.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.4) >>
+>> endobj
+775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 315.745 295.485 326.013]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.5) >>
+>> endobj
+776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.047 290.482 308.316]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.6.3.6) >>
+>> endobj
+777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 282.054 185.422 290.825]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 262.653 221.956 272.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7.1) >>
+>> endobj
+779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 246.659 238.777 255.224]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7.2) >>
+>> endobj
+780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.258 300.972 237.527]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.1) >>
+>> endobj
+781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 209.561 296.489 219.829]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.2) >>
+>> endobj
+782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 191.756 299.968 202.132]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.3) >>
+>> endobj
+783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 174.059 295.485 184.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.4) >>
+>> endobj
+784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 156.469 259.593 166.737]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.7.2.5) >>
+>> endobj
+785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 138.664 164.029 149.246]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 121.074 221.956 131.343]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.1) >>
+>> endobj
+787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 103.377 276.39 113.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.2) >>
+>> endobj
+788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 85.68 228.301 95.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.2.1) >>
+>> endobj
+789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 69.686 238.777 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8.3) >>
+>> endobj
+791 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+836 0 obj <<
+/Length 996
+/Filter /FlateDecode
+>>
+stream
+xÚí›ËrÚ0†÷<…–fªû%˶If2¹´ Ó.’ ã'ñ4j̤éÓW¶1Å0Þ%–7ØB>ÿ:::H<NŸÇƒO'šµŒDP ¤&P`0ž‚[çËÕåøør|3¼ŸÆD¦ÊÞ ‚ ©¿ØÔ"€7}(aÀ› n÷Î
+l,ZÛÊ¡‚âá3­œÉä×láM¼È”¹Ä群ææßnG1æÀáˆsž]DsI´ýÀûéÚP£Åk
+eÊæ:Â
+-·q’"Îi°\¸±÷<¹Cˆ„Á„•‘ZKMmS£ ÔVelŠR›UÆöóR½Êê¨ñjÝWi5*Å^AÄöx2ÒJcr?3ìÔˆŒÙ Lí¦z‘Õ1Óû™õ"+{2Œ†#ÍHXè)rþÔx3…¤Í
+ø تº8P¼#¬h;V¤•ê¼¸h»ÑH›€õâÚ°beVñ¶¿7¾¾.ÓÌ6L¼Šé1QÓ<š,c7¼I‚ª6pŒZ6þÄá°*#Qôa1±vš’cRÔTKXêpXviª8ôt“N÷g\™’¤XÛI 
+Ù»Œý¨ HÝÃ+ÃÃxóhêGþ´LOÒcÛ`#lË |zñ«Ô¨šã­œ)Æû¥i!˾V=[ °¨>¶`2©š¹µØšE“´?ÛªI{¶ Wq6Õ}µ‰vj“aë¾ÚZb+.ê#9E…uûD»A[\Xìˆéë9î—#-..ꃼ ÆžfÍâj#öÝÙ‡¸#w©hW2½²ÝÒÌjµs‰Û}XEaÑFXÊbaY±fV6
+kÄ”š—‘%®c!œ›·Ð{Žæað× š‡• /ƉŻèÚ<æPµë5feߨÓ-ª”ç«»Á‹‰jŒ:•)-óÔé¢îaĈíÜ€WÜ…N÷¯&¬OV¡—RÍXϽÕÌãÚ‘°Ù%דݥ*…kð–÷[?¸ÑZÄÕUVʺøR3%0Én˜éJÒÌnU¬²Þsw]A‡ôt“p>4u¯É‹Ä•9èO+û1ug2¸„Š´9‘‘ŸHÁ¶Nˆ0…¹¤ôOýÐÜ8ŸÅrûsh¢Ó¼òÆ_d7Iæ<½¢dƒCr‡é"Gf––‡$I2e…óóÙÝÕÂ/¾%?ÐØ#=ZR•ž‘Ü„<,?‘r‡]·Ú¶šCBIÞæzÆÁÌ_Eð¹‰Nó–Õ<$¼å³Dºçí)mà‡eÂÿ
+endstream
+endobj
+835 0 obj <<
+/Type /Page
+/Contents 836 0 R
+/Resources 834 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 790 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R ]
+>> endobj
+790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.177 244.36 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.1) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 740.48 278.629 750.955]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.2) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 722.783 283.614 733.257]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.3) >>
+>> endobj
+796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 705.085 278.629 715.56]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.4) >>
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.388 283.614 697.863]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.5) >>
+>> endobj
+798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 669.691 278.629 679.959]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.6) >>
+>> endobj
+799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 651.994 283.614 662.262]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.7) >>
+>> endobj
+800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 634.296 278.629 644.565]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.8) >>
+>> endobj
+801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 616.599 283.614 626.867]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.9) >>
+>> endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 598.902 283.847 609.17]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.10) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 581.204 288.832 591.473]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.11) >>
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 563.507 283.847 573.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.12) >>
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 545.81 288.832 556.078]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.13) >>
+>> endobj
+806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 528.112 297.565 538.381]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.14) >>
+>> endobj
+807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 510.415 300.282 520.89]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.15) >>
+>> endobj
+808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 492.718 305.267 503.192]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.16) >>
+>> endobj
+809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 475.021 300.282 485.495]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.17) >>
+>> endobj
+810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 457.323 305.267 467.798]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.18) >>
+>> endobj
+811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 439.626 264.301 449.894]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.19) >>
+>> endobj
+812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 421.929 266.166 432.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.20) >>
+>> endobj
+813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 404.231 269.662 414.5]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.21) >>
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 386.426 262.185 396.802]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.22) >>
+>> endobj
+815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 368.837 271.375 379.311]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.23) >>
+>> endobj
+816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 351.139 281.345 361.614]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.24) >>
+>> endobj
+817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 333.442 286.33 343.917]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.25) >>
+>> endobj
+818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 315.745 281.345 326.219]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.26) >>
+>> endobj
+819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 298.047 286.33 308.522]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.27) >>
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 280.35 246.225 290.618]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.28) >>
+>> endobj
+821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 262.653 249.722 272.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.29) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 244.848 242.244 255.224]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.30) >>
+>> endobj
+823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 227.258 291.083 237.527]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.31) >>
+>> endobj
+824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 209.561 296.068 219.829]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.32) >>
+>> endobj
+825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 191.864 291.083 202.132]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.33) >>
+>> endobj
+826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 174.166 296.068 184.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.8.3.34) >>
+>> endobj
+827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 156.469 173.506 166.944]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.9) >>
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 138.772 221.956 149.04]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9.1) >>
+>> endobj
+829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 122.778 238.777 131.343]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9.2) >>
+>> endobj
+830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 103.377 244.862 113.645]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.1) >>
+>> endobj
+831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 85.68 277.248 95.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.2) >>
+>> endobj
+832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 67.983 307.876 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.3) >>
+>> endobj
+834 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+878 0 obj <<
+/Length 1260
+/Filter /FlateDecode
+>>
+stream
+xÚí›]W£8Çïû)¸„‹²yO˜;íT×™j]‹îžãÌá ÊK»”êøí7@ØZ^´èÎYm{ShHiøåŸçyò
+oIŠVIÅr¼d™ ââÿÂw5Á󢩥¤ö~øaRf ÛEŠ¯’ú
+Ñ•žÓ™…Óˆ¶<“+›[±Õzµ(Ñ
+Ê$›—@ZД^à·j~VN~m(¼&¨XÞ„uYzA>.*Üi‰ª1>B©)ódÔ(u ó$ æ¹£8ô“[©iEŠÓM^|O'ùÙðøÔݯ°Â`[³NŠi™x‚»ÄÓÛ¼6Yß"À"ñÔ,Ìû0žFi ”#¿°80} Ý¿JkÜÉyÅxr¼¾>p€ûA<-”ý
+ð‡ULK6Î’MŠ¢>4¢t Öã5“kJ ½*%{1ïÏ„‘žó?·ö„9p3'õ¿<_ Z& Ð.Y𶹖Xß” "Y°{yò&² ³X´\š¢³³ÓÉÌK”ÍñÂä6]c>–³yu’F?ºQn§ÁÒk‘R±¶Ò«‡›åÄD['†s'v>Os×阽ç¡Îçé ¶ÒzÜ;¯µF–ÛYW·{…r[ 6{WŠ­4ÌFœ‘t‡
+¢ÌÆÊtj3uǬ{e$c?)<_a•ÿ´”](
+Gr–Ÿ ¬
+endstream
+endobj
+877 0 obj <<
+/Type /Page
+/Contents 878 0 R
+/Resources 876 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 710 0 R
+/Annots [ 833 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R ]
+>> endobj
+833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 758.177 297.189 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.4) >>
+>> endobj
+837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 740.014 266.175 750.283]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.5) >>
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 721.851 296.803 732.12]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.6) >>
+>> endobj
+839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 703.688 237.761 714.163]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.7) >>
+>> endobj
+840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 685.525 246.234 695.794]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.8) >>
+>> endobj
+841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 667.362 276.862 677.631]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.9.2.9) >>
+>> endobj
+842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 649.199 220.13 659.468]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.10) >>
+>> endobj
+843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 631.036 221.956 641.305]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.1) >>
+>> endobj
+844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 612.873 235.71 623.348]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.2) >>
+>> endobj
+845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 594.71 228.283 604.978]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.1) >>
+>> endobj
+846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 576.547 246.996 586.815]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.2) >>
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 558.384 223.8 568.652]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.3) >>
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 540.221 242.513 550.489]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.4) >>
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 522.058 224.302 532.326]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.5) >>
+>> endobj
+850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 503.895 243.015 514.163]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2.6) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 487.436 238.777 496]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10.3) >>
+>> endobj
+852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 467.569 264.31 477.837]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.1) >>
+>> endobj
+853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 449.406 304.953 459.674]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.2) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 431.135 305.939 441.511]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.3) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 412.972 324.652 423.348]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3.4) >>
+>> endobj
+856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 394.809 242.393 405.391]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 376.754 221.956 387.022]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.1) >>
+>> endobj
+858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 360.294 230.94 368.859]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.2) >>
+>> endobj
+859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 342.131 269.163 350.902]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11.3) >>
+>> endobj
+860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 323.076 274.119 332.739]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.1) >>
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 304.913 273.123 314.576]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.2) >>
+>> endobj
+862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 286.75 300.013 296.413]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.3) >>
+>> endobj
+863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 268.587 328.427 278.25]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.4) >>
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 250.424 277.607 260.087]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.5) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 232.261 270.64 241.924]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.6) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 214.098 313.982 223.761]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.7) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 195.935 309.006 205.598]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.8) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 177.772 263.664 187.435]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3.9) >>
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 158.69 172.789 169.066]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.12) >>
+>> endobj
+870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 140.635 221.956 150.903]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.12.1) >>
+>> endobj
+871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 124.175 238.777 132.74]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.12.2) >>
+>> endobj
+872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 104.309 303.044 114.577]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.12.2.1) >>
+>> endobj
+873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 86.146 281.48 96.414]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.12.2.2) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 69.686 194.245 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.13) >>
+>> endobj
+876 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+907 0 obj <<
+/Length 1035
+/Filter /FlateDecode
+>>
+stream
+xÚíšÏsâ6Çïü:Ú+úmi§ÓCw7;ÝIv· ÓÒÆ…0ņÓ†ÿ¾’-;6¶³lfÚb.–ÄG§ï{9@àÃè§ñèì\Q ¡‚‚ñ”B€P(0ÏÀ÷öó§ñûOãkÿëø#`LBÎ¥ùtÞö—}8z?ý9Âæ¸AJ( Óxtó™iû¤J‚¿óž1`œBΨ©/Áõè—r«*ÆIçnÀ«§Ö)0DåB…`óòÞ.£ÍÆH(½w«é6ÖIe‹U’¯µœÄ|3{HËo±kÞŸûìœñÚÄ#
+¢@€CS275Ävr!¼û…N}Œ¼(Þûy»É"¹³•U±¢Úâ®tÞ SLusq7g̃~À9/
+Ñ(ø+¼û÷ bý
+3·¼Ú€| (%Þ;E‹¥ž9ЛijZ¸·X·­à&Àˆ‘ÿœ×úÀQËØ!q¬/u|k ¾ eQûgçc¯Åœ„jÀ
+(†Rⶹ%3%½™^g÷ûð; 'pôІ6=Àˆy4q ãèáBG>AæD#ÜÓ›}èT¢ïA|†Lë|íaWà]¶ø†„ |-_r”ý2Ç7±’cñ¹Õ Ô-aÄ=ˆè‚¡âû†Lœ´[ÌÌ‘Vp×Y!)¶Ó¬©åÌi×)çˆ"§‡ûXÅGR|û2(¾J“à ßwÀÚ­øHMñýŽæ­ãQÒAó½àÌl .5ßz³Ú¦mO—Ýg)RS|©ÞX/QéÙ·<¶„éQöËz “ðs 7l˜÷¦ác ÷ˆjêDõñzRzv€³sŒ‚Ja“­\A¢Ê íE‡F6#H(+{|éBBö˜äý±oˆªG-=;ö11Š>^/£L±e„þÏ$ηvVpH±híì Ë_¨÷V´S–Ÿo“iNxOšaÞɇ§…±[†Óš Ÿëìµ2Tƒ’©h“GÚ“l·nyÔ° º9]Öë‰]ótÚõìXoA+o±\M{öÁ[<Þ;Î9Zy‹¬}€!rz)ÓïîCºu:s:}c¼ÄÆ)õÍD?q™Áz’¶:–‚žrvû)òÝÙm6ÈèztÞ{£GQö…\å!b@C(¹C1w™èçdf,™{û·†0äa“VsÍ]¡¸œs ª¼ì$ «]vb
+SäЉNM\ꌢÔú¿ùÔæ)ÜŸTz]Tu%¼¨aú‘7Tïîìß+'..~½,jŸ×:¹t1µ
+ÍzTHe2‡Ü¸Š*ì¶NÁõª¯š›¸š”}®¶I¶ˆÛ¸Xܦ‘µaäíŠ'·v»R•XGò°›çt²Oøؼ
+endstream
+endobj
+906 0 obj <<
+/Type /Page
+/Contents 907 0 R
+/Resources 905 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 875 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R ]
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 759.953 178.477 768.598]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 740.553 233.894 751.028]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 722.929 221.956 733.197]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.1) >>
+>> endobj
+881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 707.008 258.7 715.573]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1.2) >>
+>> endobj
+882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 687.68 204.881 697.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.1) >>
+>> endobj
+883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 671.759 227.889 680.324]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.2) >>
+>> endobj
+884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 654.135 224.805 662.699]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.3) >>
+>> endobj
+885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 636.51 234.237 645.075]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.1.2.4) >>
+>> endobj
+886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 618.886 198.791 627.657]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 599.558 221.956 609.826]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 583.637 258.7 592.202]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 564.202 201.385 574.784]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.1) >>
+>> endobj
+890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 546.685 214.341 556.953]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.2) >>
+>> endobj
+891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 529.872 227.342 539.329]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.3) >>
+>> endobj
+892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 512.248 227.342 521.705]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.4) >>
+>> endobj
+893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 494.623 227.342 504.08]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.2.5) >>
+>> endobj
+894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 476.08 279.825 486.662]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 458.563 221.956 468.831]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 442.642 274.148 451.207]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 423.207 194.911 433.583]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.2.1) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 405.582 216.842 415.958]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.2.2) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 389.769 258.7 398.334]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 372.145 193.907 380.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.3.1) >>
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.608 354.52 184.94 363.085]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.3.3.2) >>
+>> endobj
+902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.814 335.085 231.042 345.667]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.728 317.568 221.956 327.836]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 279.281 99.805 289.025]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+905 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+912 0 obj <<
+/Length 19
+/Filter /FlateDecode
+>>
+stream
+xÚ3PHW0Ppç2ÀA
+endstream
+endobj
+911 0 obj <<
+/Type /Page
+/Contents 912 0 R
+/Resources 910 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+>> endobj
+910 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+916 0 obj <<
+/Length 1473
+/Filter /FlateDecode
+>>
+stream
+xÚÍW[oF~÷¯à¡JA {XîDm%×#7¶’¦V©©,ûlÍM°Øñ¿ïÌÎ.瀓¶QŸØÙ¹~sÁ³n,Ïz}ä™'ó#$ññúèÇË£Õ)÷B‹§,Êbn]^[‰ÇÒ8¶âÔcqâ[—ëûd›w²ì×÷S›;^þ¼DR|Ÿ^ê£Ïr£ˆ…©p~þÛ^[f‰å‡,I¥,ÌX’qàV\=/ ®…4 #°I³½íÊæâÝ!qIÈxQOX˜d†íýØHQ—äܹX÷98šÚôá¬ǯó¢<àõá êˆú,ã<Bu.Cæ¾åÆ £€ÔrÆ—{ž‡*z‡Gv» )Ú†4iÙ«Ó0²R–Åq ãê§,ä$ãr+Ç ¸ooÚb¬ËFâ[`oÊ¡
+ày6sÜ0Lì÷í(E®ƒ^ˆXæ«„»œ³,ŠHÜæ-?ã ¾$b#ú²Õ½yUa8Ë@ÏAÔ]¥¹¯ÇF¥K™ˆ!=ªXPH»QìÞNKÓj½ÅØ÷2£o–4­w[Â-øò_CPßZ
+x/zsBì7BaG}Ú&¡°„ ™{Ž2’ÔdQÑCWå¹–sôéÎñ#;U®<¬ôÝë¾­5P±~=ëÖ2Ô,(ÝC¡øâ©â¶Rv/W«Ô×kû›Ï!Þ5—](ÛØ òµ¹¨‰P¡R”òž|–ˆõO]• íÖ€E)L~͹&|ͤNÇ3ÜŦ˜£½áž½AæÛThÒ’°]Ux Ò/nbRU Ï9$
+¤/(p÷è¿b;TáøBĺœbm’û€ ,%XÂÙ“ƒh¯ù‚ ¡Ç<™®ëë®ûË(
+tù¶r87ÝþÇQTÑÜÐ¥3"þqc>EoÚ~ ·ºƒâ‚’?€b ò]Ýô$樆 Ör?HÚ¼ÝÕÉS0=¹ÈoU€©Õšéýl3o¾“mú³éŦ¥àÇÇ…¡zóšTZË@/„l’Óûõ¨ŠCM‚A¶öš¾´î½Šq'ro\Íœydòð0Ȳ†L>ôõ²Ô›Â¬o-ð«Ðqõ»Û+”]2ùI˜lV Ÿû¦Û‰f4SK=!ÀÒ›.ô²ÕÑ‘;Õ´/ ãšFVk$ […Ðq­,:»‰Û÷Ë {óŸŽEpR·
+Bhú@(¯ôDåK³hž)ÀshéÓ³ÆÅýÁ•}Y.ðý’Í*kWa¥˜eIšƒ}ÁÓ;å7ГÀÏbCÏ{¶ûÐŽî}ÞHW¶n%î¦6”€³Ë–Å-]%Aj Ͳ%ªªîê„æ/ˆððXÐõ¯ØžºWßnp€#IŒŠ|öl.õó2ŠPH$t–íJ¶+4š¾¸?\¿yuuruòöâÝÙù«÷ßw¢ïé‰öÂóÇ}ÞçÏ—ÜOú2™¬`‹™KX”ê[oGé¶×OÃáÿ†ŸpT¡·šU¿F
+ÿù߇ò×FÀÇÇ¿Ž]‡mŒCóQÛ/ŽÝËó½±LäIÛàd»ûœZÙ—g²—íïŒ)Ì™¾Ø
+ U=öøwÿ,ÐJI}èiõŠ­¤Ã³c¯šÅ<Ô_bõÑbÇâÄŽÃtSM4%bÎp‘7xû„âá î´jBðÕá¶1âx¡Ú|«6?[µâE/6Û…‰iÐC
+endstream
+endobj
+915 0 obj <<
+/Type /Page
+/Contents 916 0 R
+/Resources 914 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 913 0 R ]
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [232.239 506.533 335.85 517.008]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://openmp.org)>>
+>> endobj
+917 0 obj <<
+/D [915 0 R /XYZ 70.866 789.024 null]
+>> endobj
+6 0 obj <<
+/D [915 0 R /XYZ 70.866 771.024 null]
+>> endobj
+918 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+919 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+10 0 obj <<
+/D [915 0 R /XYZ 70.866 580.643 null]
+>> endobj
+921 0 obj <<
+/D [915 0 R /XYZ 210.362 462.213 null]
+>> endobj
+14 0 obj <<
+/D [915 0 R /XYZ 70.866 443.913 null]
+>> endobj
+922 0 obj <<
+/D [915 0 R /XYZ 70.866 169.258 null]
+>> endobj
+18 0 obj <<
+/D [915 0 R /XYZ 70.866 162.807 null]
+>> endobj
+914 0 obj <<
+/Font << /F104 749 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+925 0 obj <<
+/Length 2484
+/Filter /FlateDecode
+>>
+stream
+xÚµZÛrÛÈ}×W 6Sâs <Ù»‘Ë[v¼±TÙ¤ì-%”@€ €k«Rù÷ôÜ@€
+úxÛ—Gzòt7&(Š"'¡’ÞrT!1D9™È9> Î8'‘
+‚ ²4}•¥3øùð”I"A£éQ#ž© (Š0ï+ò¦CP œšL³0¡g*Àpˆp€û
+˜CHŠ‡¡œ0DðéZ } $°ŸçcL ¬< m
+ÿ5Ÿ‰5uÅQÔ
+Ÿ¼ç BœÄàúQÌÏ£ØÑ J“š [R¿žSbšI•>fL›Me+ð¤Xl ïü áb6ç\ø‚]š~S¬åæË3Â}YÕYYÔ¦ªoN¶YoÖëŠz O#­t ‹,³‹+™–«•,r¡`#etÐyG"àx[¥ÈV)UríB1p ö¥÷qô…ó­pº~=£¯–XÅMÃmðÒeª<êûª…ËÃÒ!à2ü}Òfîq¶ÔcõÎB†§Á¶Û!͇¤Pѯó”ó Ê«JýIZ.üX:¦¼б(›Ã‡×ÁÂGè>!&Xx¤PX¶Xúä ¼ÚñŒJþ¾Éª¸(¶êüèÊòá-‰x.PD cððÐö檟Ó@ì ±(tøÊ‹Ý+/ÝT•,šüÙì°(emZš"4ýr¹Tþª¬¬úóQ—Ëæ«:8°ú<[­s FŸ³Å$2ûÌJ‘JÆ·F!3´†°”#©¯ÍóZYHìß>njË Š©Ÿä¹™›h þ³‘».³¢©­9ä÷‘r)}-hý*™gI¡A¾Ù ûÍcV›½«niö¨ÁJ®traŽqaF—U¹²+í¼<»7ìîà L W4)¬ ±/]_ž;‰Y‹Ånjcâ
+
+kÐ}ñûòpUv|]7^4@Mb¼º<Ò©Ž*ã8è)5îxÉv¤-ÎE1™˜˜L¸ÉÔ b‚bŒ¹MÕð-²9FLý
+
+@ÅC®
+X¥v
+endstream
+endobj
+924 0 obj <<
+/Type /Page
+/Contents 925 0 R
+/Resources 923 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+>> endobj
+926 0 obj <<
+/D [924 0 R /XYZ 70.866 789.024 null]
+>> endobj
+927 0 obj <<
+/D [924 0 R /XYZ 70.866 381.721 null]
+>> endobj
+22 0 obj <<
+/D [924 0 R /XYZ 70.866 364.941 null]
+>> endobj
+928 0 obj <<
+/D [924 0 R /XYZ 257.237 302.896 null]
+>> endobj
+26 0 obj <<
+/D [924 0 R /XYZ 70.866 286.013 null]
+>> endobj
+923 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 2893
+/Filter /FlateDecode
+>>
+stream
+xÚ­Ë’ÛÆñ¾_Áœ¦D3x;'9ŽTrI±âÝŠ²K…@P¨õ&•O¿€Ø•Ö¥ƒÄyôôô»{ë­v+oõêêû›«ç/S•¸iù«›í*öÜ$ŠVqªÝH­nŠÕ{G¹Ñz£ãÄySÝž²Óz£<çžW^7}yÚfyÙ­»ùq‰†  ¦ƒ>.^ýýæêÓ•‚5o¥ôIâ&:X凫÷¿y«ö~\y®Ÿ&«;‚<¬‚ÐwÃÀ‡q½º¾úç•g“¬à’ÈMc?±iŽ”ë¢ÿGwJ ÆÕ!ü§àÿÓn5_úùÕàݨÐM>ú¹­
+>-W®Þo"Ïs¶mû«zðO·p*øÐiIEnìÇöú‡?½}÷átnúêP~ض§ˆ£=÷uÕ”Å˶ý¾-éÜy
+ÙK¤ªX
+€åj-²ø +ÇUI°²–‘âæ¯riH¢§ËxH—lT´=Î4þ£íyÐïKœÊ¬æÑöÜä}Õ6<k²Cù§)qfÄ h¦)`jǾB {@«çÆa¡ŠAÖ~à†qjL2t"Üó¢XÇNq*»®jv`–:qº}v* ^«ÐÉNUv `5ê@Ñó—Ah?Ü¢7ã¢[^':1âèܵ[þ%1àà§cÙ¼}‡ØÁ£âU
+H5‘®¼ÔÕ~ºòÁ¡"#yÏgÈÉõ ”T£#à‹w¯‡kNrQfM ¾¨CçÕõ½¡t»ö=`›ÜPº=µ‡­Æüx–·…¬÷-þ*”ßZ9,B˜~^k!È;tPŽÚ#A
+άéB;Û(Ãøë¦aÈŒT$Jíty{,yh–„* t4}V5¬E˜sr×?Œœ±×²ü/åÙa­Pu=ÏnåŒaD¨heµ SHëdÿÀl$ÏD›q>ÁîÏ1³;¨¹
+œóqÃVÀŽVóêC5ÍzAw„€y40½àk·Û®ì”„Íwd2 J*ŠGIE—š‹”’Œ»æ7㟼D»•é¨<˜Ù œcš¢ s¯J#Flb°4׸RgÍî, §ÕG”ƒ`xQïZ¹BäDgß-iCyÙ!;z‘IR3Ùoz9®\¸fb¹æ˜YǨ6d½À1Àà!£$
+£[0*(æuÏS*ÊPœ–à0¢ì´ˆa²ÞŒ8ŠÀÐl6-ÿJi£Sùé\q<†™u”±¹ˆÿÈ{äöÖÂOÕëÉÙhˆ+ݸ_.híˆéOëí\W”ÁpGB¬Qûv(Ài‡¹qЊïH½Â“!CÑÌ&7ÇÂf·‚ƒ)Ó'e½MÍ2ùÏ–|
+ß×;¾¾œu­¸Ø×Rqj’ÕaÈøµH—vŠ!¾ˆ_`î¥AÏß:„PnÁÛl©nÐlèÑ0s!Ž(àoS”ð|-8r
+«ñž'MYÒõ‰¥‡ƒ¥&DH ! $b#Ī¦.{™Íý׋|a0X±ýQÛ›y÷ýÈy¹B‡Ÿó¡ypÀ!“•Ã€% ¿Ÿ+’ȘÕáÊYþ²Â’aŠÁá‰,g†z­ã9™ž„"‚uXh¥aêå \3¹aAyÖI8®$„·)§ö™‰ïÒÊ2Ïš„Ÿ3‰õœIÆçÌäÈ¢ýBÓX+Œ ÛRžejz¨î{!rHòBÜX¹·IÏeo“µË󥶰Š\ø_׎õ¤-l%“R—Åõ…'ºÒnªTˆ—l¼¦5hyã§ô cüôCÏtóí'!ÏÕóO?½Ò7Pv腾ݵ•îë™C"n Ŷe^aÑóÛC3æÀ¬¾òƒy‡nì£dãGU¸ž—°
+Ð<e¤—=ëòP'ù$›E›“¡nL㻨¶C·žõ4”›Ì{燶8O»-ÃǞȓŽE®òäÓȯZ‡(þð†_uhÀßtÂ0r¾‡r6g{¹Y+ŒÉÇ™2P¬©ÈÈU±Ó&6OÀ4<?^¶]vÀM Ò®íά³ûÑS×÷ƒ§òöCy<•y6¼î^šø1òÓ[.P/ú¦ 6lDpžn$"Õm³3Eóð¢û6_÷ÆÎG¹»K±s½?÷…ÉÉ_f~ô6b»ê«¬®þ3|f´ úŠn&[Ë:_ä/|*ïÖçL:LCèMÞ¾Ïÿ Ö|¢2?Ψqaäf¡€TIäFÁPB!ÁŸ9!ü0=DÁ9üu{CoHóÉ}úô#«~"¯vsÄRÞx >É»G3å\ùÍÜó—Y»î¹Þ›ŒÌò¿0RpÝGXâ/hŒ‘¿¾ÀÙ±¤4•Á™j|´ìnIñ:ˆ\?TŠß¶§…Lœþj€Ÿ-! Ü4¹´#ù²0•ðÒßN„1¤ˆ§üå„ù#¨7â(°þ`"Ý(’’â–c¼4•(*tÌâu)‘Eûòë©GÊÿÎÓßù‘ÑŒ5óæÍ¿Þòh–ˆÇ?àPqèÆi`d2&á Õ¡ ó³P.ÿ0ÅÎD?´Ôø»ß@ÙÌ%ü+Ã%|
+endstream
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R ]
+>> endobj
+929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 164.653 144.523 175.128]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES) >>
+>> endobj
+930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 145.212 184.477 155.794]
+/Subtype /Link
+/A << /S /GoTo /D (group__DEPRECATED) >>
+>> endobj
+931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 125.877 185.714 136.46]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN) >>
+>> endobj
+932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 106.543 165.934 117.125]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL) >>
+>> endobj
+933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 87.209 172.471 97.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES) >>
+>> endobj
+934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 67.875 151.077 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING) >>
+>> endobj
+939 0 obj <<
+/D [937 0 R /XYZ 70.866 789.024 null]
+>> endobj
+940 0 obj <<
+/D [937 0 R /XYZ 70.866 711.958 null]
+>> endobj
+30 0 obj <<
+/D [937 0 R /XYZ 70.866 705.481 null]
+>> endobj
+941 0 obj <<
+/D [937 0 R /XYZ 267.799 638.063 null]
+>> endobj
+34 0 obj <<
+/D [937 0 R /XYZ 70.866 621.105 null]
+>> endobj
+942 0 obj <<
+/D [937 0 R /XYZ 138.731 527.328 null]
+>> endobj
+38 0 obj <<
+/D [937 0 R /XYZ 70.866 512.263 null]
+>> endobj
+943 0 obj <<
+/D [937 0 R /XYZ 309.53 273.748 null]
+>> endobj
+42 0 obj <<
+/D [937 0 R /XYZ 70.866 255.618 null]
+>> endobj
+936 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+962 0 obj <<
+/Length 2134
+/Filter /FlateDecode
+>>
+stream
+xÚåZ[Û6~÷¯°@`oÆ )‰ºÌlh›é m¦Í&ÞÍCZ´LÛÂÈ’+Éu§Eþ{yÕÅ¢=²›ÝØ—‘F"Ïõ;iAkeAënôålôâëбzžcÍ––Aày–ÚÀCÖla}»“©¢
+-T{ °]+ÞŒ>þ­{÷Ö^ŒÜX.v
+ž­]#<Yj¾ Ñ:Ÿ°8ìuž×TàBÝ­h¦1J}.¹”\eZñô–ÈAiJSè}R­ÊVMÏ”ÐÅcFêº(ã5ÆÑ0_cp>è·ïD|Ëx ô@‡ÁRñ¥¿0vÉòÃFŠì@€Ø_.ïà‘¬+NOË4'½5H¼ÈØ1T :CâÏy²0 dÒÐÍ9☧ƒÐU«q’íܾž)+‘ÿývŽ*^«Ÿ…ù¤¶ä\‰G#]Hƒ_Ê PëÀZh­¢ó¤§áoÛ‚¬6DÊ© b`™V¥N¡‘ò¨)˜6Á«ñÌß>¿.Ä›.Æž6®-h7ÿõC”G¥]I7T7§ÿtðøùómhÈœmõ*2Ï_NÚPãV’ew椅 ¿÷ÂÀ`> £L±Q%Y&+vÁã&¦†µÒ<(õŠó0±áX à\ÈïsðJðÃ+„VŒ!5ÐHÉöøò0±îWZ䇥p®N‘‘ë>·A«*Yü¯L8›Hû=eÇš(zØlãhNWÉáÖ¥E=Ïä%ÍcçJ)˜ôð‡…͆]×Õ2öâ…œ&ª_‡NV)¯Y^ÉW;ÆÝš”Ú%Õƒ<Eí‹;ª{ Aï
+q¾KÕŒ9Õ+ïëtµý¨í]Ó?hë|¯Œ©JmÛ”‘ToÅ3Ö§SmALv%Õsº^çKÖ¶š<­—,¶ÙKk== ·¿Ò¡/ôQ„v¶¨ÝêÅŒ¥½IDLøÚ©^$´IèííMž@îVi>'©–!÷ó»}¨3by)ºl3“_]Mj¾‹üH7 ‘¹šQô°>¬¨h¶RR†RÚ3´Ú™‰àÍÉÅùSµÛβ*X+tl‰ˆŒêf)ª"|Aóù« ÛBu5Ÿn†tõQBYr"}€±æOÃ<~è@ô·Ó}Îð¦uÏ´µµ¼`ûßÈè;ƒ‚'ÉUŽÓ•-ƃeJVe¿–ãœm³5m~{ÿ6zýêö»YôÅìûû×_Eïn_ýû«[Uõš›JZ a™ÐcÕ$K­{³MRªÊHlæ÷ó}¨ÜƒJ
+RWušÒiÅÁ%+æT›ÖBűFªG—õi½! 1€m«ªú»(M ÀµZ9G^}•.ë Ñ8¿L£¡Z±<í ³`Q.×[ã¶äXuMmˆtн“K8Š?¹Ló=-Ô
+´Ûnëû4©êû$‹™‰ŽÙiž% ¸ˆõÅ#jX•å  ™ü MýÚ0C8z¤Ã²î.’rKªxñ†,r‡¬Áþ•ÜÛ!ð‘+ql†q»VÅlë–X]Ãîµ¾O‘Ãv¢ag£½_'ǃíÃ#‘ùØî³êdlo{^H<8¾sVHžõ[ËÝ>jCüYƒnݾ8LM' gôÏ»NÄ5
+endstream
+endobj
+961 0 obj <<
+/Type /Page
+/Contents 962 0 R
+/Resources 960 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 909 0 R
+/Annots [ 935 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R ]
+>> endobj
+935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 758.177 207.178 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE) >>
+>> endobj
+950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 737.965 160.555 748.439]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION) >>
+>> endobj
+951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 717.752 170.426 728.226]
+/Subtype /Link
+/A << /S /GoTo /D (group__ATOMIC__OPS) >>
+>> endobj
+952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 697.431 229.442 708.013]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING) >>
+>> endobj
+953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 387.6 138.811 395.127]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) >>
+>> endobj
+954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 339.78 130.443 347.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) >>
+>> endobj
+955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.16 283.989 130.443 291.515]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.607 212.258 180.654 219.784]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.082 204.288 214.129 211.814]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.082 164.437 205.76 171.963]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) >>
+>> endobj
+959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.897 132.557 218.313 140.083]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) >>
+>> endobj
+963 0 obj <<
+/D [961 0 R /XYZ 70.866 789.024 null]
+>> endobj
+964 0 obj <<
+/D [961 0 R /XYZ 70.866 668.036 null]
+>> endobj
+46 0 obj <<
+/D [961 0 R /XYZ 70.866 661.463 null]
+>> endobj
+965 0 obj <<
+/D [961 0 R /XYZ 70.866 626.285 null]
+>> endobj
+50 0 obj <<
+/D [961 0 R /XYZ 70.866 626.285 null]
+>> endobj
+960 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+979 0 obj <<
+/Length 481
+/Filter /FlateDecode
+>>
+stream
+xÚSMoÓ@½ûWÌÑ<Ì~¯‹à€(•ªVÐÔ‚CZYi즖b'8´Bü÷n¼vã–
+—ÝÙ·oß¼Í,€à(xŸ¯?&,&Z H¯ÁZ­Á$5ƒ4‡iÈÐD176<¼Uëe±‰.ÓcÒ¢RÖÉt$µƒÃ4ø0‡°)kÑr ó*˜^äîîEbáGǬ@*J
+/á<8 ¨·çX.råæÖfO¡I_sV4&ÆÝŽªÐ i(ãûªÌ;“ƒ:LcMV³²ÎeM‘oçE¦.HQÏ#tiº¬}8yxµi›í¼ý«^[®ê¬Íºî
+mÇ^~zuF˜1¾//~×t–Ö—{ùÖïû4{ÆŸçw¹_ª}n•qø/8ü Üh9š(©P»­Ë{TÔE3k‹ÜÿŽUí÷¯‘Pá
+¹àg²­Û²*úåU3sé…w¹Ú9èã«HPx{·èEý´Ã÷Dv˜
+endstream
+endobj
+978 0 obj <<
+/Type /Page
+/Contents 979 0 R
+/Resources 977 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+980 0 obj <<
+/D [978 0 R /XYZ 70.866 789.024 null]
+>> endobj
+977 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+984 0 obj <<
+/Length 330
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËN1 ¼ç+|Ü=48ñÆIzD@EÕŠ×
+¥‡>ҪݖUð÷d_€
+WÔû¥ÎI§3XlÅdŠ°ŒC@IÞÁsÜBfHš¬ºðnÄ•ÀÖ½®~ã46Rþ‡±Ë¥¶œÕ¦šh…S)92Ö·BÊÙ!,›ÛvESïR2I7¼ û¦ÑÔVT¦éõQ÷‰›×*Õ˜ìÊÖ¸*Ùºû KoÉU‚”5ÒúìÇl>d©Iÿ1›y¥ íOv)aòòº®¡¨ãêü±½Qdžl
+endstream
+endobj
+983 0 obj <<
+/Type /Page
+/Contents 984 0 R
+/Resources 982 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+985 0 obj <<
+/D [983 0 R /XYZ 70.866 789.024 null]
+>> endobj
+982 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1001 0 obj <<
+/Length 650
+/Filter /FlateDecode
+>>
+stream
+xÚí˜AoÛ ÇïùíC`Àx·e[²NªV5žvèv`1iXÛ²I·îÓ’µU4ÕéÚu/y˜ˆz?Þ㜦´µ°¶Ùšé`œFŒ(À²„c.@Œ àp H3p¼ZÊʨ:"~NßÝrä¼#$Hë!c
+ïà¸ÌÖ¹rãŠL…ß÷øÙ¿L¿FŒ™÷Î#HY伈Ã!FùyçÙûM(&œG~,b7ô­ªÛeÅ"гҙ\7Ƶʅÿ#Ï]cå&yqc–­˜BG`ˆcÈ u³¼4åJÏÝè÷• $F4º,ìœQ"ÚhqgØ_÷þïºvÀ n´SËálˆi‚íÅ´Ãe·Æ0aÌ‘úR‹F›Ñ©Ê•lüÞ(o1Ãv?ö`»áÌX6Û JCLPpUÙ<Æ"þ_Ãû÷ÈáN)õZUµšK£2‡o².æ>èÁµ¯G³M·j73Òê¶â™uå¹ÂSš-×&+CÌ‚o…=¤8z
+ñ{F h'P'›cÉAy®¼ù„Z„
+JKÑ’º}-ua{­IòôÂúŒø±NüÒe­¤Ï¬£bÇŒ°`µÑùJ{RA*î(
+endstream
+endobj
+1000 0 obj <<
+/Type /Page
+/Contents 1001 0 R
+/Resources 999 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+/Annots [ 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R ]
+>> endobj
+986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.796 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 478.657 525.406 487.222]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.886 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 454.747 525.406 463.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 442.976 525.406 451.357]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 430.837 525.406 439.401]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 418.881 525.406 427.446]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.9) >>
+>> endobj
+995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 407.11 525.406 415.491]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.10) >>
+>> endobj
+996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 395.155 525.406 403.536]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 383.016 525.406 391.581]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.12) >>
+>> endobj
+998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 371.061 525.406 379.625]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.13) >>
+>> endobj
+1002 0 obj <<
+/D [1000 0 R /XYZ 70.866 789.024 null]
+>> endobj
+54 0 obj <<
+/D [1000 0 R /XYZ 70.866 771.024 null]
+>> endobj
+58 0 obj <<
+/D [1000 0 R /XYZ 70.866 585.116 null]
+>> endobj
+999 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1005 0 obj <<
+/Length 301
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËnÂ0¼û+öèꮽñ‹cÕú j”4!AB¨ôïëÄ ªÔSO;^Ç3»k@²›‚]ß{'¼1Å
+,
+g X¯„‘P”0ã.›# o¹<>k›“º<mCv¥¬ãU2©ù¹!²»‚}2yò"çœp*‡›ÍÊx7ä|µÌäš„Î)â-LÙ3ÃÎb_ÿhj%ÿ£Ø‡5BY“7a•n2ÉÈ&*¶Á†¡
+‡Å1”)[]¥ú–‘æ}sö (ê*J¤ª™tZe
+y}H‡ñøu’Ðã>T“§fZц¼%×’V ë/C~G¤ŽõÛ¶ŠTÏy9UÇÍ®ÛÄx³<,âwùwê,¾­3B~þ^·„Pµëêç×ö…xÓ
+endstream
+endobj
+1004 0 obj <<
+/Type /Page
+/Contents 1005 0 R
+/Resources 1003 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+1006 0 obj <<
+/D [1004 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1003 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1016 0 obj <<
+/Length 558
+/Filter /FlateDecode
+>>
+stream
+xÚí—]kÛ0†ïó+t)Á¬êèËò»XYºíj ßu#¸‰›¹N°Xþý¤J¸xiG²@ÁW’å£çœè}u’0´F ÝÌØa¤\ù©nfòÙÕ˜D`¨Ê4 ü¥Œ­‘6Œê”£|…nñuYl{Û’„sƒù‘y
+Ω`†{
+C‰RTšøTÙ¶h (¼$).«eQØçfe
+\\ÀZNvxvèú¢ï¢!º…õÿy”œÿb¿åQÑ>æ³ßeè'Ã
+endstream
+endobj
+1015 0 obj <<
+/Type /Page
+/Contents 1016 0 R
+/Resources 1014 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+/Annots [ 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R ]
+>> endobj
+1007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+1009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.612 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 478.657 525.406 487.222]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.702 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 454.747 525.406 463.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 442.792 525.406 451.357]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1017 0 obj <<
+/D [1015 0 R /XYZ 70.866 789.024 null]
+>> endobj
+62 0 obj <<
+/D [1015 0 R /XYZ 70.866 771.024 null]
+>> endobj
+66 0 obj <<
+/D [1015 0 R /XYZ 70.866 585.116 null]
+>> endobj
+1014 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1020 0 obj <<
+/Length 312
+/Filter /FlateDecode
+>>
+stream
+xÚ•QMOÂ@½ï¯˜c{`Ýé~”£QQQ¡Ñr
+3A}”}ÒñµëÚãc4zÇìñàêñSØ–d¼ Ü ‚„QÜäY·ò7DjQ¿e+.Iv˜Ég}ªv®Q-Ãzþ>—XYm~³O “óeÓ
+endstream
+endobj
+1019 0 obj <<
+/Type /Page
+/Contents 1020 0 R
+/Resources 1018 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 981 0 R
+>> endobj
+1021 0 obj <<
+/D [1019 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1018 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1032 0 obj <<
+/Length 520
+/Filter /FlateDecode
+>>
+stream
+xÚí–MoÔ0†ïù>&q=þŠƒ»€8 *·-Z¥‰·‰h“U’ðï×^Ñl·-R¥ž<öŽ;óZï,#„‘eÄö#åÊ…nXFoŠèdL0TåH±!£Fk¢ £:㤨É*~Û”ÛÉIʹ‰eò¥øx
+#©RTš=à²G¿ýCWÛ þ~sü–ኜæ
+Õ\ú¯jZÔ ðä¡jÜ ~¬Ûîú*ýŒJVi&tL”, êQf
+{Jh_Ý[­R9‹Ü!êââc ¹R^׶¶Ýt(¡F¡ÿS…žUþ•ùߪ¬½Ê_¯¶ë3ÆDyá@h‚@r´/®} ME¦qËuê+Ÿ138@÷rŸñùí#$¼¾Ï,Ñ\\/©ÏoàßѼñ§o'Õ9ÍÐf>1Nå4†74®íÜ1DF2ó ‹KL í¯¿Õ‘Î;£ãc›m+?=cŠ…ŒöÊÔ¡ö»Îÿ‡ð©Ø³ ˜§ ÙZÉ{µzWD?(vú.
+endstream
+endobj
+1031 0 obj <<
+/Type /Page
+/Contents 1032 0 R
+/Resources 1030 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R ]
+>> endobj
+1022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 512.819 141.716 523.294]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info) >>
+>> endobj
+1023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 514.523 525.406 523.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 502.568 105.474 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 502.568 525.406 511.132]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+1026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 488.801 148.859 499.383]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag) >>
+>> endobj
+1027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 490.612 525.406 499.177]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.043 476.846 138.865 487.428]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e) >>
+>> endobj
+1029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.443 466.702 525.406 475.267]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1033 0 obj <<
+/D [1031 0 R /XYZ 70.866 789.024 null]
+>> endobj
+70 0 obj <<
+/D [1031 0 R /XYZ 70.866 771.024 null]
+>> endobj
+74 0 obj <<
+/D [1031 0 R /XYZ 70.866 584.926 null]
+>> endobj
+1030 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1040 0 obj <<
+/Length 301
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËn1 ¼ç+|Ìš:q^˱/TêƒU{  ,¨Jÿ¾ÙÍ.ªÔSO;“ñØFXBŸ]ìò.'ð"·– X€Cá­—+a%%L¸TÙ´€F^ëø¯©^¯g‡Cv¡œç÷U2iø©æ±Û‚}0iò,ç½ðJÃû†M¦e|
+Ê=|5Ì hCÂhŠx cöÄ°µØÅ?šÆEÉÿ(vÃZ¡œÕõ°ÊXA^F¦°Q±™«ª°ŸC™fÛV)¾fdxW‡]ŠÚˆÒ$$©‡ªG6e‹L!ßîS2¾ŒzØ…jôXo+rÑPîÈ׆¤3Âåç¿!RËúmÛEªã<VÇÕ&´-Vóý,¶“È¿Se^;hñÍ6#ä§ïeCUs®n¿ñl?Zx„
+endstream
+endobj
+1039 0 obj <<
+/Type /Page
+/Contents 1040 0 R
+/Resources 1038 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1041 0 obj <<
+/D [1039 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1038 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1044 0 obj <<
+/Length 1917
+/Filter /FlateDecode
+>>
+stream
+xÚµZ[“›6}÷¯`¦/xR+º š¶3mÓ¤ÍL§Óvß’ÌkØ]&ظçòïûé†Á²\ú²!£ï|G{ö^¯°;"ÊÕOux½úùfõüÁGâ2$Þͽa$ÂÐ FaD½›Ä{ëÿòªô¸ÞP*|¾~óæÈ PŠT¡`oÃ9
+„ø£HNyjÆ¿,¶§]º¯â*+öW°®OÕΓ"I· !Cg†#²ÞŒ±ÿSUì²­áúó5Oiˆ† 1Š@ Í0
+0­¡kð—igyšØPÒr{Ìç@,þóW÷’aÈ, PÈ¥Á»yLK¥E$üûÓ~k¦§Oã£m?•šBõX3ìGs’íyª´Ëö¦¥z´#vñ~M¸ÿÅœ%Ù½˜¡³iú¸¦ îgi•¥–³¸·ÜN6Õ²­ ö­t0©øT $B! ê@Ö&°¿-vPå¨ÎˆŸ•¦5®ÌyžÝ©Kö«/æJUØžû<Û§®·áW¿/øußêÑàa£’jÚÇÕÉôËs‹\ž‡Â’) U·»5žcvS®âãCj'·Y•n-5ÁnBNüWVz9A’sy¶/«x¿µÚCöõñ÷Ÿ6ŒºL6 M˾«sž}PsK].3›“­ë|g/¡’¶‰ë#F~Õ©ùù·65^ˆdÄ„ó C¡ót©–ßöbQ@O½$0"ðWá]4®÷vÂ:ÈÀVÍÁ¶æ¯?˜~a—7wH5n«EÁÂü"˜¬™Ý7‡cü°‹
+xËü°Êµçüh¢ˆEMüòÙ³C vã†ÐqaÊîªSMy£²2Ëë¤×ôwŠÁ¤A2Õ¥…€‹Xœ2/¶^¬­ Û|m5Ôã.&dÆ™ågMø[¡ÌúI-€TYU¯p½gô€øvJP3v©¹”jí«k‡£†ø˜%öT 5–Ë¡€Ûnu ²À¥…î,ÓÀ.m¸VžÖ€_¯EÓèê„ëk–´ºðX¥Ã¾°
+»*qeÂ\vHu
+üw˜ãW­Zé–(øíµT
+%^¸TÜÞ~ض·Æc·÷Ùç4 nã$¹’ p=;r[œò¤½\Ïå[Å Ž Ô¹’swá#ÈþQv[#îL^tBuE‚ðˆV@ÝwÀ ìJ%V#÷ñî²°×$}7›t¿-7aW,M]Ç'qÛ¦/‡©+rÉEÿ–GÝuV̘Òi`‡‚qÎwÈ*Ö3ÊÓómhõëÍêßQÕÎ#n¿Â8CnãÛÝêí{ì%pí*RxŸtÏ{Ä¿sïŸÕ_M ‚pÈ=0ì†  ³±ŸAP[½ˆÔ>¢…G[xª™Ò‘(pÇÔ»W¶é­˜d ›E¢Ž,}ç—µú7ëP­Ò´+•` (€‹E£
+X˜ˆEdÔ3oÃð_~sðMn£ü€áG3w¥%ðÊyÒsG¶ˆô!A!ªã§ñöß`Öº‹~ÙGóveçpwžyo¥ì¥ñ2Ž$
+åÓ?¹Gø&·Q~Àñ£™»Ò«q<Óñ,@„/ãx¡È>¿Ã˜ñðÓx{„o0ßçÀ;PãGóve‡§Ég:žRDä2Ž§EÂFŸ'û¾`@úiÜ=Ò7ÙµöÕf4qW{xpr¦å á–±<¨l{^?ÅlŽê½œÀ"²ÏöÙÃceß.Ýe•ë¢Ç¹W\=I›6鞤5§­“ÓíÍÚhænÖ
+U%z tgîf H4uM[ŒP½ú óÜÂ9b\,÷q¢8ãë$
+»Ýò×ÿm1à…ÅÂp_%fÆQûêz Oû"1>ª®G
+endstream
+endobj
+1043 0 obj <<
+/Type /Page
+/Contents 1044 0 R
+/Resources 1042 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1045 0 obj <<
+/D [1043 0 R /XYZ 70.866 789.024 null]
+>> endobj
+78 0 obj <<
+/D [1043 0 R /XYZ 70.866 771.024 null]
+>> endobj
+968 0 obj <<
+/D [1043 0 R /XYZ 70.866 585.116 null]
+>> endobj
+82 0 obj <<
+/D [1043 0 R /XYZ 70.866 585.116 null]
+>> endobj
+86 0 obj <<
+/D [1043 0 R /XYZ 70.866 548.234 null]
+>> endobj
+1042 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R /F158 920 0 R /F93 714 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1051 0 obj <<
+/Length 2710
+/Filter /FlateDecode
+>>
+stream
+xÚÅZm“Û¶þ~¿‚Ÿ2TÇBñN0õx¦Ä™dì‰ë\›é8é O¢NŒ%R!)ŸÝ_ßÅ )R¤xG‘m>ØÂàîâÙ°Ï‚Ø{ð°÷ÝÍßnoþü:džB¡”Ì»ÝxFJJ/)’Ä»]{|¿Þþà1Á' Þ3½o³õq/–4Pþ7Ùê¸Ó2*“,Õƒo¾½½ùý†ÀXì‘Z¦RHQî­ö7~ÅÞžýàaÄBå=š‘{ †×:vÞO7¿ÁÎή,ý;NVCAX
+/!üª!0š P'ÂÀÅE®
+¸ µW
+qᎻ }Ê~´ GŠq«ós6Û£•vá†Ç˜O‹m†ˆ†l–ÓS¤ªHûjผCgwS)——÷ïñZ;€kxXÄÓ€+ˆS̱™È£òj7!C;Ê•j{1oé…_áà>ZswA˜š†{ StŽ@—îr1·>'ûÁþq?€þ ÊkôÏ´_~´Ò.𠂨‰/â4˜x L\àí“ôÀÏ ¼þLûeàG+í"(ñ‚ ÌñB ,\Ì¡ø÷O …}4
+˜€Y]TYE©5 Ú™Õv»žõ:^ÛæædªôË­ǺÛšÕØ–±h±d0¦5U÷¾ô7Çtegäú£Ò¶VÑ¡<‚t]‚\!
+iëÒ¸IZ³­Œ@ ÅqW¾°Ô½Åqó ÆôsJ
+ƒ8Uƒ´:”ý q\ƒ”V¬AÄÆ8ºT¤¾Ó$¸².B£dI°D’o $OUÿÇa•ÚDªü×õä8Wv:3{Kˆc ö›÷o«ù=Ä©yg;NþÞvegtê~ËlŸ¬Üp§¼‚Í
+Óx_KIÖqZÞ•m”À9 Q'©#2ÑÎ!§@:u'kXÆ›.æž3åJmZöÍé¡LÖ°Ztóö_ï¾5JCØ”XØcB ²¹F÷n[4_6­|[؆vÕ_Ú¾êY$'G/8(eÖV®èònA¹åÑ>.uˆ¿èw¯Šó§}EaB€Ñ'¨)DL(úÒ9dØØ!‚$vtµ,À Ñe;+ÈÉd2§€k@¸B–Õš[«”À:¢çš#·wd|qî6—ÌmÉÙ1_¹c—­.î…lAÒ+LìúDðaOûy’ çgÈÍ, i~¦„@öÇÁ°»ã@¯å/_§·ßËMµõ)û°ËÜæq´¶í>«jÇŽ¶ªëA(æØI2œc ‚‰Ž…œ.´×x½Íøõ:µý~mjZ½µÏwñÆòuž—¹{´±]Wˆ@ªiîž$ù›ë J>ÕÝD—‚Aœ¹ö|ÐÙ×)íwöIç)}6²äa;Ê©£ê:D𧮛žrêxílÁúP¶¶ÒQ㶩*ínåªg‰¾
+ås8Ïujû]ÜÔ:‰òŒ6ªë}×E¦9uŠçSIÍq= ß¡R"Áé3øΕjûÚÔú¿à;ãíz
+D"˜æíI2œ»6©Ç,|‡
+:„Ï`<WªíwwSë4Î3Þ¬®S@Çlšc'ÉpŽe
+ÑáosFlκ\ÏDU¬Ç ²¢Ë¾½Ns¿o›Š³*›O6gë·/§¯ù½ã(ÊÚ¼Î~%‚ú:Âr“žû"p ãÕ¨Z{ë.Ì]RýGS¡8ÏÚÚ@a©Zú}‹Dœ¢?K¬F¢xíŠn,‚ˆ'¿ñz*žÇ˸x¹J1Diñé0p¡J¿ˆK׳±¿æöòó*>T ™Ðõ]¤ h%Õ“mÜ{ç
+ÖµkVÙþ°‹«kÇæw­æV«÷²OTдÙeQÙ#VRõåå«ž
+ÌwU¨É7$n<sI¸ÿ暆?ƒz‰€«3ä(‡iÙé0jTÃûHÐQD¼)¢ÅÇ=JˆMB}®N:Jè…[IÕ¼•ÌŽå|ôòú'.ûCRI˜T€Dèâü½åT¹ú4~ΓêöÿǪLóäõ¿@ËÖžÆõÛéÛwvñ·¾¾„³â¬!ÁéDîÙ$pðdc`Q‚™Q¾¶
+ÒLRúáÇÃAW´8öËÂ>¯KðøìãóÜó U$àÒ/vdœ¶²Ù!ªÝˆ·w#áv#î;’-SVƒ'.ƒ+Ë8=Ù³´% *lï9É*Úœú–ðô÷
+öÓ˜*üŸ­ý͈#éæÙy½ÕT
+endstream
+endobj
+1050 0 obj <<
+/Type /Page
+/Contents 1051 0 R
+/Resources 1049 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1046 0 R 1047 0 R 1048 0 R ]
+>> endobj
+1046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.795 529.114 281.078 536.64]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.532 345.072 297.815 352.598]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.689 151.522 255.972 159.048]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1052 0 obj <<
+/D [1050 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1053 0 obj <<
+/D [1050 0 R /XYZ 70.866 570.145 null]
+>> endobj
+1054 0 obj <<
+/D [1050 0 R /XYZ 70.866 503.984 null]
+>> endobj
+1056 0 obj <<
+/D [1050 0 R /XYZ 70.866 398.447 null]
+>> endobj
+1057 0 obj <<
+/D [1050 0 R /XYZ 70.866 311.972 null]
+>> endobj
+1058 0 obj <<
+/D [1050 0 R /XYZ 70.866 98.181 null]
+>> endobj
+1049 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R /F158 920 0 R /F104 749 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1063 0 obj <<
+/Length 1153
+/Filter /FlateDecode
+>>
+stream
+xÚåX]ã&}ϯàÑ®fXÀÛÛªR«îŒ´ÚU·»Q«jv96IÜ:vãÉL}Á`ÇI3-<÷%Ëár¸_`Øî?.¯î²¤0c,Ë HLIF Ã`Y‚‡€BÞ’$ ~í¾*Lÿ繬ڦ ¿,ß‚8Ž M"¥t˜‚©–.Þ,_X À“æ4…)‰A±_<|A Tco‚Q–‚ã€Üƒ˜*e±VVƒO‹_hÎ6¦WØ2 ÑHWîxx¡8ÈE±«$/d/ ¶}.BŒ‚¼‘œw%w¹4£Mk%\¡n1 ªfkFÚ¢è…Å·‘åuµmxi…ë?Ô:‘ï:3Dƒc%wVnR[[Š{¾o…îÏv%eÖ¡6­Õ½,ŒÀ-Æ0£Ôì²??ÈÖ´,6íºÒ4t¯jLÛU…j3\ÿÀIU±ª–Ú`¹å]½6‚M¨˜i‚„{#Rl̺ã$ÁóÒ͹$†ð˜<8¶¯î0MƒY¥ÚŠ‰`[B¿xÞ2„‚ÕêÏý¡XåCà­¾“ÏþýJ”fð3¢Èj×ñ%¶6Ð>Þ/ÀÀ¨JÞÈ•<£
+#–ÍÙÔm1m«1Ù ,®"$Õ-Œ3³î&νv´.ù˾›ÀWÂ࿺é%ïÛ}>¶UyÍzWƒAoä »n>yè‰]w ‹ÐÖð ÔžLhÆÎ"&ŠaŠR1}­óŸ¤A]uÒô†´Wí¦oŠ©êÏÒù,µ?cÈh6Ö—ÊFT­jEw^·ä?‹)}ób%ÌtòÙ t¢¢ùÆŽwóˆ­ëV»©ô]µÇñˆÀÓÑj“zëZËDWÉÕáš3üÌÁ…Ýs>vC•Z\t§ä;6óÖå¢;·ÏTâ‡ø†ÜØÓ olmNíéuÔHnç¯[}6 æ0;›Ô7s±Î°ã‰–97uoŸKbM_Çô*ø6šÏS{S=ñ¯ò²«DMüwäª8Hôæà
+nʵÔ‡FSÖPÍeõ莼ԋÿ®ê Ï›ºÍeê3áàvç¿z =̽ϟܑ>zÕ ÎÑ1
+꣸¯Ý‘~zýœ=Lpuvãî¿ÆÏ­X»#}ò¥µ³bC ×ÂØíjw¤‹öH>=Ã-\m¬ ^Ä…7qáƒî×îHÞíÇÄ=·4ØCõñàê£pÔùÔz Ý ×»†ýµÓÐîn¸ÞëtëýŽ·Þ#iz¿¬éýÓ¦÷Ê2Þõ¦ûâµ—#šÀ”ø¼¯[ê£*añì½(¦1û}|¯¿;r9ÞrÇOßÂH]¨­ð·¯-$²-ÂÔ^¶£×ˆ¼ŽØxW'§»ú»w¿¾ŸËš÷Ì»2ÃéŒ
+“,ŸÍ>#YÔœ5U…dÄ|ìYíí%ü]µÃcÕð€tºá›þO­þtxzÞ
+endstream
+endobj
+1062 0 obj <<
+/Type /Page
+/Contents 1063 0 R
+/Resources 1061 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+/Annots [ 1059 0 R 1060 0 R ]
+>> endobj
+1059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.583 706.07 230.866 713.597]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.583 655.404 230.866 662.93]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1064 0 obj <<
+/D [1062 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1065 0 obj <<
+/D [1062 0 R /XYZ 70.866 615.524 null]
+>> endobj
+1066 0 obj <<
+/D [1062 0 R /XYZ 70.866 556.212 null]
+>> endobj
+1061 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F158 920 0 R /F104 749 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1069 0 obj <<
+/Length 666
+/Filter /FlateDecode
+>>
+stream
+xÚ•˜Ks›0Çï|
+ñ!ª„9vÚf&cOñ´‡4Ã`ƒ¦¼BPí|ûò0ÆqÍ»üѲÖ_ì‘ vc}\[¾Šù<ÐZ±õŽy‚ûZ3/p¸–l³{[êÅÃú–)8HÕÆõwWel²dqåx¾ý©Üš<)š¨IË¢ƒ­ÏkëÙ’-+˜|ËéûÜw€msëþA°¸ýí– ®Ÿí{2gà*îB÷ŒŒÝYß-1Õ)]ŸixÊŸ
+Õ’‹QiþÉ«m5ežnÃ]zHb'Œâ8ÜVMÿ‚]ym†zWaá"ÞPŠŒ"Φ¨œa ©ãô/ž¤åíè°N(ùwY5>% "Àx-É3<•KÕÉ£2qK†;O <IÉk2<IËK+v€-vqR?9Ä—õO’òfx’·Ž‘àËS†' ŽôióÉ™|¯¾<Õx’$¼&þƒuÚlð$E÷@“¼ A7WÞrͻǖñPHüÀü\hh“¡ùßl(çb°E1´ùÍà›ÆкÆÐÛÆú:O†'ÑÊáŒ×“—h¬ÙšÙƒwfo%dÆ~ß@ú¼ìõ€êõàL3È/kö ¤X@{= y=@{= y=@{=8çõä Nª6ÁìÁ;³7ƒëõ€äõ
+ûu¸³é¼ŽÛ$ %ìÃëc$Åéÿ}i’°
+endstream
+endobj
+1068 0 obj <<
+/Type /Page
+/Contents 1069 0 R
+/Resources 1067 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1034 0 R
+>> endobj
+1070 0 obj <<
+/D [1068 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1067 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1073 0 obj <<
+/Length 640
+/Filter /FlateDecode
+>>
+stream
+xÚ—]o›0†ïù¾$õl ¶é]§m‘ªVûh´]´"th|Õ Múïgpe¢çì
+ã<~yビ÷0òD™{Þ‡/± šÆR
+²XŨ–’¨8 ’“EFîýˆòÙE ´µiªbåÆ_Ûܤ›¢©_f‹k†‚FJXÑa Wý¬÷yá={ÜN2ÂÊZS„dUy÷Œdö³k¨ˆ5ÙdEÂÈŠ…½XIî¼ï;uË#M$•Ð§v%§ìà7IþTí*I·ÉºØåY˜¼ü.“U»ILþ:fäBY•wV`h'{'8úÜ g Âx·„“ãŽÆ9IÖ-FHo¡º[hwÄ¢ðë’¬xE He\MÜhQšwjºÿ86êÜè$Í28 ¶îhà†[¸Î–c£ÎJŠP>{½ù4ŠF½ÝnźlÒÆ,h0ÜKþŒ »R¥;èv[#\Ôp£Û•p§‹+ö°
+endstream
+endobj
+1072 0 obj <<
+/Type /Page
+/Contents 1073 0 R
+/Resources 1071 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1074 0 obj <<
+/D [1072 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1071 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1078 0 obj <<
+/Length 855
+/Filter /FlateDecode
+>>
+stream
+xÚ•Xmo›0þίðGZ×ÆØ\úqÚZ©jµ—FÛ¤®Š’@:´
+*³ÆšÜŸ¶ÇÚ²å,9BWqʾ]µ4D¶š\ á*â2¬7ùÁ˜¨5ÍêÁÍ7uQµ–ñ’³‹Dî,ÀÈiœÐ4q¡§?óFïY0Îã1Še˜7[·¢`<|­"ÁìÚf²»¶™»µ­YEœ…]¹Ða\ˆzå^l‹¿†~.91£
+¡9ë¹T™3¸rã"ŠYøÜæ[ãL£Ó„s½¼dÓˆëyµÚ£×xÙ^·Í³]¸³¿Czb¿
+ÎéDJ— ‹éZ÷YØƨjÃãÉM³WýJóát/õ¯GÀ%E'©€á „>çþ|g³_åf9›·uY,g«µ&ÌæY6ðIµã8r¶Ü´´5ã°ñgÅã.’C´{ô¬É¨ZÄF\Êù$"+eQù#ãŽNÙ­}wk aFŠuð=”Æ·d¶Ý‰Ø^F|Æãÿ„ð·<6ˆð2O¾qŸ/ xË d 0ªþª(U´*Fd
+endstream
+endobj
+1077 0 obj <<
+/Type /Page
+/Contents 1078 0 R
+/Resources 1076 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1079 0 obj <<
+/D [1077 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1080 0 obj <<
+/D [1077 0 R /XYZ 70.866 752 null]
+>> endobj
+1076 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1083 0 obj <<
+/Length 1075
+/Filter /FlateDecode
+>>
+stream
+xÚ­XYÛ6~÷¯à£¬Þ¢‚¶@¯] HÐ&k´I ȶ¼+Ä–\YÞ£¿¾¼dIŽ`“@ŸxèãÌpæÓC
+W3/vÂ
+7ÝçÇúPô°º*ªÖ¿ DÕfËêÁŽ÷uÙ}zŠ r%]í Ì—1AѶ˜7F‹ê8”ÿê:%ìFÞ`dû}XØÖzm•$…‡ñœ%i´xt «|g¢wŽ1L¹sëc¡52Ä­jÝYæ‡bm»ueÛöÑ}ëÍaÈ9ú<p‚:'ÜhÅ*¼ D€`
+¥”Ýo^Õ­E„D)ë0“Vði+NÓvêˆ9¯$Ê÷÷µ3H…?Uºˆ0ºh
+eÂ;e殲¹qÝœ
+áÉ؃+¥ìEfùz=±A §M–›ñòʶµÊ|1F‘É~nʵù”‰CÌO™ÑnóÅñ
+endstream
+endobj
+1082 0 obj <<
+/Type /Page
+/Contents 1083 0 R
+/Resources 1081 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1084 0 obj <<
+/D [1082 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1085 0 obj <<
+/D [1082 0 R /XYZ 70.866 663.484 null]
+>> endobj
+1081 0 obj <<
+/Font << /F93 714 0 R /F158 920 0 R /F104 749 0 R /F45 709 0 R /F170 1055 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1092 0 obj <<
+/Length 963
+/Filter /FlateDecode
+>>
+stream
+xÚ­VKÛ6¾ûWðH—O=r,œvÑvc´‡M°%ÚbW–\Inº)úß;)­,»Å¦è‰Ôóúfæ)Ú#ŠÞ¯¾ß¬nÞ¥%$"6;S’DŠSN"†6zÀœŸ7P’H&@oÞ5Å©ÒAÈ㯛ütÐuŸõ¦©íåÕÛÍê·ƒ»±Éf’„K”VŸ)*àì¢D¤ ú2Ü< ©QÒú¨ÐÇÕO+ê㤄+»µ‹šQ‰')cjwÄW„!£”â_Áqfú›{]鬳aó7GÝ!wCÌ“3¿Þ¼“j† ‹HœÄ(ä Àà|â\©¢‡P©ë:`ŸþÌbÐî=÷Ã-‹Ú'JE¶ìŸziÄÿù
+í€á½à müÝküFò?©=6uÞ´WþË ÏJåëDI¬ÒÈ¢Ž0
+IO…"Ì—j­ûÌTºp%Zë.oÍqꫨ …²H©ÔÙÛ”PaA#\hˆš×ÆyeP\¸ýîTç³£R·^ÏŽ•¶m?îG{U0…¿Øêê®÷2Š¸Âºr¢¾luV8Ýî¹Î˶©Í×læªÙ¹µ;uG]¦ÞûèF‡£p1ÌäÈI•r9f§6…³§AÝ–Àô”¤€óg'ÎZ?¨§n
+ÚU@#(¢Rß ëóz
+ð1T¦ö~Dâï¦èøø¤x:»™þ±õmø$åy‹^{h¨ÞßòÌŸAáq$-ž\ED$ n’,)½×µmìqŒÆ¼àmé…õÑm¸ð+eÊí˜xCùèóôoo¾s»àop÷£'•Jc‘ ó Çé«LÔó6P”àãûSÝ›ƒÇóÖlÛÌVuú)lg?ˆuc›áçýpA×Kˆÿµ ud
+endstream
+endobj
+1091 0 obj <<
+/Type /Page
+/Contents 1092 0 R
+/Resources 1090 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+/Annots [ 1086 0 R 1087 0 R 1088 0 R 1089 0 R ]
+>> endobj
+1086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 729.66 157.981 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.969 729.66 190.385 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39baa8e37e16d043d78e34da1d19387be5ba) >>
+>> endobj
+1088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.378 729.66 219.794 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) >>
+>> endobj
+1089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.787 729.66 271.628 740.242]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba9e8f1573ea73441426c6a6dda73b4e49) >>
+>> endobj
+1093 0 obj <<
+/D [1091 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1094 0 obj <<
+/D [1091 0 R /XYZ 70.866 771.024 null]
+>> endobj
+90 0 obj <<
+/D [1091 0 R /XYZ 70.866 771.024 null]
+>> endobj
+94 0 obj <<
+/D [1091 0 R /XYZ 70.866 715.416 null]
+>> endobj
+98 0 obj <<
+/D [1091 0 R /XYZ 70.866 643.945 null]
+>> endobj
+1095 0 obj <<
+/D [1091 0 R /XYZ 70.866 617.024 null]
+>> endobj
+102 0 obj <<
+/D [1091 0 R /XYZ 70.866 617.024 null]
+>> endobj
+1096 0 obj <<
+/D [1091 0 R /XYZ 88.314 535.933 null]
+>> endobj
+1098 0 obj <<
+/D [1091 0 R /XYZ 88.314 519.993 null]
+>> endobj
+1099 0 obj <<
+/D [1091 0 R /XYZ 88.314 504.053 null]
+>> endobj
+1090 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F173 1097 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1110 0 obj <<
+/Length 1349
+/Filter /FlateDecode
+>>
+stream
+xÚ½˜[sÚ8ÇßùžÙ‡Âª®–Ü·ÐNš°ÉRÒÝ™¤Ã8XI<›µÍn³Ÿ~u³Á\R`œ<$!Ÿó—ü;GG‚Þ£½/­Þ¨õñs@<ß'ÞèÁãß÷x€¼Qäݶ .æ¢Ý óxb›£ŽÛ/s™w~Œ¾z”À8Q&ÍéÞVÔú»…T'ôPeW 0õ&³ÖíèEê·¯$Þ¿fäÌ£L£ÚØÔûÖú£V0ÓMýá”#H=„A€[Õî#
+(Dº~¢‹+EÌ‹}+ó4NŠM]Ö¼ïàjd¸(Òî<´#¦S9ÿ«R˜Ù•4,ìXؾ°Tæ‹Ci —™L&Û¤ŽÇ&dsi|*½:/Ëh¼:‰;È úCGCI‡’øŠ&€R[B,Ø Ê&¼:(kn{¶jØ–‚Õ“5á#¤¦‹êŽMÍäBÿ"SuÂl[ýZdf¡åäÙáj?>܇™ãGfl_gR¥â:XÁd»â¤*7\ž¤‘<>0‚·Ì¢ôp`±PVü&²¨¶Äýý²h^°5·¿¶Ç%°õù–À.+飑Ô‘gói<‰N«àæU]»žH÷ÂQ †q$«8²#pT™¾5i
+EN„}­ ð€n
+kªÀ—c†îºÄºˆï3³Uå÷j)~–êÿùòhÈd}…ÿ„$[Ö
+endstream
+endobj
+1109 0 obj <<
+/Type /Page
+/Contents 1110 0 R
+/Resources 1108 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+/Annots [ 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R ]
+>> endobj
+1100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.227 729.56 172.659 740.035]
+/Subtype /Link
+/A << /S /GoTo /D (structident) >>
+>> endobj
+1101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.159 729.56 202.068 740.035]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 716.979 200.912 726.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) >>
+>> endobj
+1103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 703.587 210.873 713.25]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga50e3ecb5eb8d70f437a84a8b2bc9e88f) >>
+>> endobj
+1104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 690.195 228.312 699.858]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc) >>
+>> endobj
+1105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 676.802 262.68 686.465]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_gaf2f9e5d03f9f38651a3b8d5ef8635d44) >>
+>> endobj
+1106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 663.41 252.736 673.073]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga7358cc60d0f006b36752a1795e6d5d93) >>
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 650.018 250.737 659.681]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_gaaffb56f3d5bd8803b41e9862e2aeb863) >>
+>> endobj
+1111 0 obj <<
+/D [1109 0 R /XYZ 70.866 789.024 null]
+>> endobj
+944 0 obj <<
+/D [1109 0 R /XYZ 70.866 771.024 null]
+>> endobj
+106 0 obj <<
+/D [1109 0 R /XYZ 70.866 771.024 null]
+>> endobj
+110 0 obj <<
+/D [1109 0 R /XYZ 70.866 634.736 null]
+>> endobj
+114 0 obj <<
+/D [1109 0 R /XYZ 70.866 573.056 null]
+>> endobj
+1112 0 obj <<
+/D [1109 0 R /XYZ 70.866 547.994 null]
+>> endobj
+118 0 obj <<
+/D [1109 0 R /XYZ 70.866 547.994 null]
+>> endobj
+1113 0 obj <<
+/D [1109 0 R /XYZ 70.866 486.191 null]
+>> endobj
+122 0 obj <<
+/D [1109 0 R /XYZ 70.866 469.913 null]
+>> endobj
+1114 0 obj <<
+/D [1109 0 R /XYZ 70.866 392.174 null]
+>> endobj
+126 0 obj <<
+/D [1109 0 R /XYZ 70.866 375.896 null]
+>> endobj
+1115 0 obj <<
+/D [1109 0 R /XYZ 70.866 315.781 null]
+>> endobj
+130 0 obj <<
+/D [1109 0 R /XYZ 70.866 299.503 null]
+>> endobj
+1116 0 obj <<
+/D [1109 0 R /XYZ 70.866 239.388 null]
+>> endobj
+134 0 obj <<
+/D [1109 0 R /XYZ 70.866 223.11 null]
+>> endobj
+1117 0 obj <<
+/D [1109 0 R /XYZ 70.866 145.371 null]
+>> endobj
+138 0 obj <<
+/D [1109 0 R /XYZ 70.866 129.093 null]
+>> endobj
+1108 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1121 0 obj <<
+/Length 448
+/Filter /FlateDecode
+>>
+stream
+xÚ•“ÉnÛ0†ïz
+¥ƒ'ÃÊ1h °Ñ%B{Hƒ@–èD€-¹²„Öo_R¤'ð¥'gý8¿„ä… ¹KnŠäê6çÄ@®'ņh£Ñ9EIQ“Ç”±ì©¸'\
+”»ºÉ»êêqk³Ó&ýÔUãζC94]ë““ÏEò;¡. =õ4 ¤Ú%OHj»'<7äÏ”¹#BrÂÏØ’‡ä[‚‘Ioú#RS„"h™«snEgp x¶ ˆ˜™0éqok»qÌìóåaaÒÛ‚,˜
+endstream
+endobj
+1120 0 obj <<
+/Type /Page
+/Contents 1121 0 R
+/Resources 1119 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1075 0 R
+>> endobj
+1122 0 obj <<
+/D [1120 0 R /XYZ 70.866 789.024 null]
+>> endobj
+142 0 obj <<
+/D [1120 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1118 0 obj <<
+/D [1120 0 R /XYZ 70.866 751.762 null]
+>> endobj
+146 0 obj <<
+/D [1120 0 R /XYZ 70.866 751.762 null]
+>> endobj
+1119 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1127 0 obj <<
+/Length 1045
+/Filter /FlateDecode
+>>
+stream
+xÚ­Vßs›F~×_q0S_ö~yì8Î4ãLSGmìŒ#ä0B b4®ÿûìÁBjÑÇq|»÷íî· ä‰
+žP»'”{B;2<¡e²Û`ÄG”NY8Épc æè± 0f° $QN?§¨GQ/}áªu ¥•h]ØWÏЬtåkßlöAP-ôE—š
+äsà¸«è ¿µFQ‹.bU[—C«åz¦1Ôs›¨Òfh³.'lâê"6#,
+¬0ú|×4ŠÔDù\Ã5x ¬Œ(çgsO3)5È‡Ì ¶ËLÅ©;ˆÒX:,U¨p?iv8 àÃ#vd5öRŒ¿t½­éä nàâuÿ„CÇá@8ñß!};Æ11g”£È6¼ÌûƼÚ7«¦¦§šgç8$ÐÛž ~óã¼íÕ®‹¿zÄ*­w®¡« æw~hšªkjؤ4Ž«×)V8/²½±γÂÛešùž¿
+ýÀ<÷ÝP—<ï¶[7BHjšÐAiNj0Ë¼Ü öšrƒMqÏ©T˜-žÒi‘Vûq¾»Ðß¡PA·ù5õóÎóí˜ò׋ø~,º½ýës»ú}›Ÿ¿ô²‰‘7Â6Éo5‘<ÖÍ×
+ Ÿ!ïvEm<·Ùc»ÒÀ0ú°;üúºtñý÷õ©9c†
+endstream
+endobj
+1126 0 obj <<
+/Type /Page
+/Contents 1127 0 R
+/Resources 1125 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1123 0 R 1124 0 R ]
+>> endobj
+1123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 704.801 218.727 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__DEPRECATED_ga27292e41af4c26e0bdf45b12b1f76d5a) >>
+>> endobj
+1124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.213 704.801 251.122 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1128 0 obj <<
+/D [1126 0 R /XYZ 70.866 789.024 null]
+>> endobj
+945 0 obj <<
+/D [1126 0 R /XYZ 70.866 771.024 null]
+>> endobj
+150 0 obj <<
+/D [1126 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1129 0 obj <<
+/D [1126 0 R /XYZ 70.866 723.517 null]
+>> endobj
+154 0 obj <<
+/D [1126 0 R /XYZ 70.866 690.557 null]
+>> endobj
+158 0 obj <<
+/D [1126 0 R /XYZ 70.866 630.933 null]
+>> endobj
+1130 0 obj <<
+/D [1126 0 R /XYZ 70.866 606.078 null]
+>> endobj
+162 0 obj <<
+/D [1126 0 R /XYZ 70.866 606.078 null]
+>> endobj
+1132 0 obj <<
+/D [1126 0 R /XYZ 70.866 573.531 null]
+>> endobj
+1125 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 1555
+/Filter /FlateDecode
+>>
+stream
+xÚ½X[“›6~÷¯àfbEW$¥oM2I³É6»Ó>d3Öf½Lmp'M}„ÁÆîúÒ>!@:çèܾOÂÁ<ÀÁÛÑÏw£—o4 ÒqÌ‚»Ç@b¤â8š¢˜w³àKHyôõî}ÀGœ0X×|½.fëE©TáU1]/Ó¼Nê¬ÈÍäÑë»ÑŸ#sq@Z™J!Ey0]Ž¾|ÅÁ þ½0bZß›™Ë€ †7:Áíè×vvbD…š‡³š`Š4!¢kwLö† $¢1Á‡·uRÂ0ëõ
+L¦*Lò™Ü>­ëY~·¦ët
+1’BÇF!Æ #Ž©ÕõfOÍ ÷|ù†‹Ž“IŒ¤’èGZ
++àžRÑ[| ‡ß"*Â"›¹ÆŸåÜ9ös3ËD`2ùc¹šNÒy–oK1ÿï±À{%„ „¿IÝ[ ©! VÓfÇ„b„©ô p13Ó·öÆ‘VÄÏYÓˆˆð…M0q’å5£‘³ ³d^i¤oò˜P0Vf€´ tPšÏNqOšƒƒþÍ=„!ØÊ‘îÙìþpº ãH YO!Û GÄåøUZ'Ù"ui}•VÓ2[µ¹'!‹)G±ÐVÞÝSZ¹š~lºyMJÿ=b8,Jû²ÈʈàÐT|þa¿fyVgÉ"ûÛö»¾©7T®ÞÔzÎÎñî–©Û²/:·å.t¨”÷ú QÐz²‹·ÙÕëj„h¤0 „Hcr¨­A/ÕmOëH 1Œ-¡íŽ#©%±«“ñvsx,.¢•+Dïkµ=¨‰ˆ/«-Œ¡°Jû0Åå*k« Aœ‰Ýz"²›ÁzRÜ)¨nRßPh¸¢í\à—]·P.%òn¡6eß-¶ñ l
+6åš-&ÖŸYÒ`®±Ì]’T©›kp×<-å(‹ˆcŸc§éhù) zèx&‘¢Ç\ÆúËbØ€4‡H€Ø S€`ÊÌ5Û·iž–Iºë¿¡ß#žpoÓ•P枘;"즯XìI/ÝÞ~»¶£O«4¿¾iñJF2ÕtsâÖ|€zfW`ÔÏùÜÖ†QµÑ„¸e@ž[Ùkn“êý˜7Ò|ÛÅÿ
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1134 0 R 1135 0 R 1136 0 R 1137 0 R ]
+>> endobj
+1134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.693 173.789 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) >>
+>> endobj
+1135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.275 704.693 206.184 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 691.849 166.813 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) >>
+>> endobj
+1137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.299 691.849 199.208 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 70.866 789.024 null]
+>> endobj
+946 0 obj <<
+/D [1139 0 R /XYZ 70.866 771.024 null]
+>> endobj
+166 0 obj <<
+/D [1139 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1142 0 obj <<
+/D [1139 0 R /XYZ 70.866 723.517 null]
+>> endobj
+170 0 obj <<
+/D [1139 0 R /XYZ 70.866 677.605 null]
+>> endobj
+174 0 obj <<
+/D [1139 0 R /XYZ 70.866 618.089 null]
+>> endobj
+970 0 obj <<
+/D [1139 0 R /XYZ 70.866 593.127 null]
+>> endobj
+178 0 obj <<
+/D [1139 0 R /XYZ 70.866 593.127 null]
+>> endobj
+1143 0 obj <<
+/D [1139 0 R /XYZ 70.866 560.521 null]
+>> endobj
+971 0 obj <<
+/D [1139 0 R /XYZ 70.866 464.406 null]
+>> endobj
+182 0 obj <<
+/D [1139 0 R /XYZ 70.866 449.166 null]
+>> endobj
+1144 0 obj <<
+/D [1139 0 R /XYZ 70.866 418.306 null]
+>> endobj
+1138 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1163 0 obj <<
+/Length 2373
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[YÛF~Ÿ_A +Q»ï# ¯’M»v p(Ž†±®ˆT²Þ_¿ÕÍ&ÅÛ¢È1°/­ª®£«¾¯šÆÁ6ÀÁ÷|xóΰ@##% Ÿ…‘–2P†"I‚ÇMða!\®¨Ò‹Ÿ— /Âs¸ÛÅ»ü“Xàç%Å‹ãùÓ›ßÉ> Ëß8gH(Zœ *ì§ÿx|øãÀ‡8 ¥*­‘¦<ˆö~ÃÁ¾û!ÀˆüåVî.@·ÂvÁ¯ÿ|À~ûQa_Ú?Þ‚y@(2„ˆª9’ \³‡`ŒÁ Ê+Ñ "Zõèô
+1RÂH«+†Ç4×õ¸äzñùoâç´.Æÿ}óŽ‹Šû‰DJ«
+ È¥n[ JU3/Ñâ¼õù¥µ…¸âÅÏ>íOÑzŸDçcs;>ˆÕ«ÖÉ!c´càu$Yk ¥MŠ5ÛÝñ)Ü­³dómné|­%|Œø§ãå°qÒB×`yE5A ˆ5GZ¨\Ô»Ë!Ê’ãa| ùp ‹Øö„Ìû½vñ9]Ò—õaIðâ²_gK²x9Çá&í‰H6ñ! Õ6é8ødT8wÇȯV,ÝÛX»·¥Y¹M­³¬ˆ2H1 /À¯‚Îè×g[üŽg¨bñiAÍh»TÍàR™Åél. Ï[ÿí ‘ÃGÛ}‘…é§ú!¹zIÄ(ó^'“½.Mw6Çá¾È°xº×¥A˜±¼N»¼Nj^‡ 5¹õ}Ý¢^1~ÙÊuÔ‘i#à/ûæ0p4"ôÕBC‰é
+Ë,õ…S(³úÿì0phBÚÌv®žOãÜëI¸Kþkíˆ7ë“uÿÙæIŽb^% p:”¸ût ”ùÎ
+=…‰WHÜ}îB^wá«ûO$ Uÿ} °@Íà §X
+:à@jܧ¶;5ªZOGÀñ¹Ñ…Òh1›ÊL;,8gØÅ£ˆ¢øÚ3ÝwŸï¨£kGD`¥¦eÇxm'²€®PoÞÆ
+O×QÀ“–(¡¦cþëCñ?6¤½·à.tAJ€¿ñ9ÌŠ0mùßv”_|øk|Ê_P?þ§˜%À¾Ãô;&‹gèõ™†÷ïÿõcþê§S|øñ畃½ö¹k÷Àpœ®§Ýj»ˆ²@þr9dÉÞW’÷ÉÓÙåLy£S½Ýy{t7‚Ÿ·nA\¿<€”ù%?—è
+endstream
+endobj
+1162 0 obj <<
+/Type /Page
+/Contents 1163 0 R
+/Resources 1161 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R ]
+>> endobj
+1145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 704.693 203.669 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 646.862 228.519 657.444]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga345b3a5866deefefc91ae1e8958f49f4) >>
+>> endobj
+1147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.004 646.862 260.913 657.444]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 633.91 185.104 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) >>
+>> endobj
+1149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.59 633.91 217.499 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [305.433 633.91 355.745 644.492]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.41 620.959 222.953 631.541]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gaae9462b03457d809faeb3e767a5b2283) >>
+>> endobj
+1152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.36 620.959 255.269 631.541]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 596.052 196.07 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) >>
+>> endobj
+1154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.556 596.052 228.465 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.399 596.052 366.711 606.634]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) >>
+>> endobj
+1156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 583.101 223.516 593.683]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_ga7b1ba1cc8d9d2fea8654bbb1e59f079e) >>
+>> endobj
+1157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.001 583.101 255.91 593.683]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 570.149 243.456 580.731]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) >>
+>> endobj
+1159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.942 570.149 275.851 580.731]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.484 426.459 332.071 437.042]
+/Subtype /Link
+/A << /S /GoTo /D (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) >>
+>> endobj
+1164 0 obj <<
+/D [1162 0 R /XYZ 70.866 789.024 null]
+>> endobj
+947 0 obj <<
+/D [1162 0 R /XYZ 70.866 771.024 null]
+>> endobj
+186 0 obj <<
+/D [1162 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1165 0 obj <<
+/D [1162 0 R /XYZ 70.866 721.36 null]
+>> endobj
+1166 0 obj <<
+/D [1162 0 R /XYZ 70.866 665.685 null]
+>> endobj
+190 0 obj <<
+/D [1162 0 R /XYZ 70.866 555.905 null]
+>> endobj
+194 0 obj <<
+/D [1162 0 R /XYZ 70.866 496.389 null]
+>> endobj
+1167 0 obj <<
+/D [1162 0 R /XYZ 70.866 469.469 null]
+>> endobj
+198 0 obj <<
+/D [1162 0 R /XYZ 70.866 469.469 null]
+>> endobj
+1168 0 obj <<
+/D [1162 0 R /XYZ 70.866 411.292 null]
+>> endobj
+202 0 obj <<
+/D [1162 0 R /XYZ 70.866 317.163 null]
+>> endobj
+1169 0 obj <<
+/D [1162 0 R /XYZ 70.866 292.2 null]
+>> endobj
+206 0 obj <<
+/D [1162 0 R /XYZ 70.866 292.2 null]
+>> endobj
+1170 0 obj <<
+/D [1162 0 R /XYZ 70.866 259.594 null]
+>> endobj
+1171 0 obj <<
+/D [1162 0 R /XYZ 70.866 175.434 null]
+>> endobj
+210 0 obj <<
+/D [1162 0 R /XYZ 70.866 160.194 null]
+>> endobj
+1172 0 obj <<
+/D [1162 0 R /XYZ 70.866 129.276 null]
+>> endobj
+1161 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R /F170 1055 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1179 0 obj <<
+/Length 2568
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Mãƽϯ C$`§ÓßÝô1°³€±‹8ÞA|°GÃ+‰²De½ùõyM6ER¤¸â‡ñe$‘ͪêªêê÷Š=4x hðöîïwûG(KB­Eðð10”X­r¢Yððü¼àzùëÃ÷P’H&ð\~õ}ú|ÚÄË{nìâÛtuÚÆ»,Ê’tçß}÷p÷ÛÃX°³Lk‰å2Xmï~þ•ϸ÷}@‰mð9¹ ¤DI§c|¸û×­Û)U‡šZúmZ˜“­½]Ñ*;E›âûÇ¥ ‹ô°¼gjñÉßÞ=_VÑfsñè6YÒ,:ú¡Éîâþ!Æä!ñ?K® (+®î–Œ.NÛ§øPüN?–âèù¸„n’;“÷Ì o–Ç¿PÊwIî¿Â6/q“ì¼FnYS¨{¤ŒÀ§íþqu<í÷n†’.2²ÊÝQ•s¢ûx '2*k^„‚Ѫ0CMð¥ùÔä"MžÛe,$–ŠÀ0JŒa}E…çpÖ$pA¨`ƒ%ä‰ÐœãŠ^ˆR†3?VvKE$&;‡Vi S²©õ£ pzøÔ¡Ys"¥™E³V„ ÝÔœÅÑöˆTà.-u\,lŽ V®ÞäËõ1óãLb×nœ`D
+UŽCŽ‰b3åG(†ûA›tõƺ°”eÊQIÛ/“±r·pm‰M¯$»Lð.ó‘¿œží.n/å$šncDñúV®4,9ŠI—dImÏî;u•äÍò^[¹ „t9 •/ä¼ò»bÅúõðüÙXÏX¾Ò;Š _Ã?¸U¢mœ¡
+1¶8vËé”wy·«Œk+¦¿Œk†ªcÝÏ"ƒå³ÕîÓò>ÍH¨T#k ­'ÊŸÐÂ7$X™Ï]µù¥ìXµÍ‹!Ø<dM­ÇôtXùr ¢j/HvçÍ ›ÍöÊ.‹4…0>ÂÀvxܧÓB<I†±²(íáÄslj!F L•Kþ¥/ÆãôvǸ®6C!ØôCX–c©ãào6Éþ˜{`°õíàA„êñõ˜$Ã'€DìP_§%
+Ufž‰BŠh)oèŒTÛ‰‡Zçê 7°TB‹¹N
+ñ$>Ä®šQ1AVð5pz}çyÌ:¡]èqÊ»ÝÒ]GÅ-ä|=¶ƒmjÇ"•Ób;IF[ à &ö>B
+/:¸‘G ¬œçƦÅç“ätÌý&Ôÿ@!1¬? ·/¹*Ï׌Ћ‡uRŽ(:-x¾¼’î6_Šo.ÈIÑþr÷?^XÞÔSo~m‹q‘ǘÈãŠaº~‹ cY§ê%òÂp´Ë[GW›ó÷Ùê3®SƒkµV(¶HèÇM²M²FÎe—ǤK=Oi¶vp¸hÝ3£a6üt Þëœ.P7wŽ8¸ÑS:GC%ôtŽœ(¥õ-£9´úÎQCkçh­¾sÔÐúµÎÑz}稡·*÷×{G®u!Âÿ»ÞQ(rÎ2ƒgxˆ%#.òàF½wdˆ½8š½#I‰¼Œ[_ë¨ßqà†…|Ç #ˆµ|”ãzZG!x£žÃs;ë t¦ü|ýa
+~|½j°wFp»æºˆ˜¯ðŠ'¯ç“ ÷ ˆ\1ü€—ôu8è›i*2g!ãiêP =4• Vv KC©g©u¥ÇøD›ä¿Ë{»ˆ»¼f9á&œE½c :l¨GÖ—•°‡6¢îÝ|ä@¿m¤(„rÏð°Èçºg&³FI0ÍqÆ]8@9W Û<Êj9 ËÈÁ¤‡[8R‰W&=œj¢©š´N“Q &J€Ùy8 -
+”¹óŒÓÚ ”Jç¢<ƒíkÅÆIàßüL“áã‹J§¾ù)³ØíÊ/·Pž‘Ú»ÝV>Žó 7ªˈø†f„Œ«PÛ*aåšïªÓâ‘?—g~ÝV‹/%Iøp(ñáLòÆùJŠÊuVÞòзvôxížK°Å?爭 ^Û‚Cü‚ûoJ(÷ÉàòuÜzÉœ>&o®Ôvå\hñ'8¸’ܸòcŽçÜ)l\-ð€•¦þ´ý_ö‡èe s5à\Š7ÿR÷Ë¡g÷é
+endstream
+endobj
+1178 0 obj <<
+/Type /Page
+/Contents 1179 0 R
+/Resources 1177 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+>> endobj
+1180 0 obj <<
+/D [1178 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1175 0 obj <<
+/D [1178 0 R /XYZ 70.866 741.549 null]
+>> endobj
+214 0 obj <<
+/D [1178 0 R /XYZ 70.866 726.309 null]
+>> endobj
+1181 0 obj <<
+/D [1178 0 R /XYZ 70.866 695.391 null]
+>> endobj
+1174 0 obj <<
+/D [1178 0 R /XYZ 70.866 586.524 null]
+>> endobj
+218 0 obj <<
+/D [1178 0 R /XYZ 70.866 571.284 null]
+>> endobj
+1182 0 obj <<
+/D [1178 0 R /XYZ 70.866 540.366 null]
+>> endobj
+1173 0 obj <<
+/D [1178 0 R /XYZ 70.866 419.544 null]
+>> endobj
+222 0 obj <<
+/D [1178 0 R /XYZ 70.866 404.303 null]
+>> endobj
+1183 0 obj <<
+/D [1178 0 R /XYZ 70.866 373.386 null]
+>> endobj
+1176 0 obj <<
+/D [1178 0 R /XYZ 70.866 264.917 null]
+>> endobj
+226 0 obj <<
+/D [1178 0 R /XYZ 70.866 249.677 null]
+>> endobj
+1184 0 obj <<
+/D [1178 0 R /XYZ 70.866 218.759 null]
+>> endobj
+1177 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1197 0 obj <<
+/Length 1986
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKsãD¾çWè(W‘Ùy?8RËRPPÀ&‡]*¥ÈJ¢B–‚,³ì¿§{fdK¶ìDI‡Ä£yt÷|ÝÓ_ešÜ&4ùæì«Ë³7ïœH,qZ‹äò&1”X­ã8Ñ,¹\&REÌ✛^ÞµE¶ ío뛧iÓ®²®lêÅo—ß%R
+¢Œ
+›ø7À¨L'Ž15Ü‚f„ŽöÀ(¥»Mð° ¦F›x@OTB‰QN£šœ J$åAþ»M£ˆõXFü|óNªÆLcM&gTð‘s5Z›|8WJ§¿¯î¯Êº<"ˆímD󽟆‚‰ùÕmÕ\/XšUWßæU½`4ݬö%ã’TÑ…¦å²¨»«n´BÅ$¶Á=Ì9bÁcÑÝ)8}o³’8Ëú9U“ƒZ66çœSI¬qÉ9:Q±—$"Y¿"¸±ÛísqDhás"rÝl
+VÙ¢ðf ˆÑÒ{—;›Þ´ ^|ƒ´-B쯭Ɨ‰0X7õyom˜‚NB㨀=-û^„ç·XzŠ"ïÖýH/;
+¸˜e]/n=éþº°ÝØyQ܇ñ“2Õ_ª¾¤üK¡ûíñÝö¾ÿþ—&‰
+endstream
+endobj
+1196 0 obj <<
+/Type /Page
+/Contents 1197 0 R
+/Resources 1195 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+/Annots [ 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R ]
+>> endobj
+1185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 704.693 253.66 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f) >>
+>> endobj
+1186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.146 704.693 286.055 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 691.742 258.143 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga127cc7161bbef3ccd2446a9405973192) >>
+>> endobj
+1188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.629 691.742 290.538 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 678.898 254.664 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga9a981e3dcd9264c2cf5bd8a8cc6f16af) >>
+>> endobj
+1190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.15 678.898 287.059 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 665.946 259.147 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_gadcc691c6c7695988deba68a2de817a66) >>
+>> endobj
+1192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.633 665.946 291.542 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 652.995 217.768 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) >>
+>> endobj
+1194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.254 652.995 250.163 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1198 0 obj <<
+/D [1196 0 R /XYZ 70.866 789.024 null]
+>> endobj
+948 0 obj <<
+/D [1196 0 R /XYZ 70.866 771.024 null]
+>> endobj
+230 0 obj <<
+/D [1196 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1199 0 obj <<
+/D [1196 0 R /XYZ 70.866 723.517 null]
+>> endobj
+234 0 obj <<
+/D [1196 0 R /XYZ 70.866 638.751 null]
+>> endobj
+238 0 obj <<
+/D [1196 0 R /XYZ 70.866 579.128 null]
+>> endobj
+1200 0 obj <<
+/D [1196 0 R /XYZ 70.866 554.273 null]
+>> endobj
+242 0 obj <<
+/D [1196 0 R /XYZ 70.866 554.273 null]
+>> endobj
+1201 0 obj <<
+/D [1196 0 R /XYZ 70.866 521.725 null]
+>> endobj
+1202 0 obj <<
+/D [1196 0 R /XYZ 70.866 416.51 null]
+>> endobj
+246 0 obj <<
+/D [1196 0 R /XYZ 70.866 401.27 null]
+>> endobj
+1203 0 obj <<
+/D [1196 0 R /XYZ 70.866 370.41 null]
+>> endobj
+1204 0 obj <<
+/D [1196 0 R /XYZ 70.866 265.196 null]
+>> endobj
+250 0 obj <<
+/D [1196 0 R /XYZ 70.866 249.955 null]
+>> endobj
+1205 0 obj <<
+/D [1196 0 R /XYZ 70.866 219.038 null]
+>> endobj
+1195 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1210 0 obj <<
+/Length 1571
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKÛF ¾ûWèhñtÞ‹´Aƒi“E{HC–g½BdÉ‘¥¦é¯/ç!Û’×ÞuzYÉ#ù ù‘C.NÖ N^N~¼›üð³a‰FFJ–ÜÝ'
+#-e¢ E’$w«äÔêÙÇ»W qÂ`Ÿ_}S­ÚÂÎæTéé‹*k7¶lÒ&¯J'<ùénòyB@'d¯Sk¤)O²ÍäÃGœ¬àÛ«#ftòÅKn.ÜÙ(’÷“ß&ø'#8%A¸úÂþ‰1-sÂK›ð,ò2B%”„—ê><Ý–îŸ6ÛE¶k·ÛªžÍ9ž6(Cþ8Qá ¸ÇK€B0?‚“9£
+ÅE5œ_œs ÄÁìýáýÐ7N(FRUÄÈ
+r{ÑD9•£ÒÉ1‚8¤ BDõraBE•E™:€EBâÅ°ö13€¯”q/À˜€¿Î(Ÿ¦uº±­g„LwãºFu¿ŽV2ìžä|%“È1’B7ÑAüi%TT…Õ9 M€Ã¢Ç…=µ‹I•H(ùXp¥aùÐHýX³½úM ÒSCúVßWmÅZ ÒC!ÏËûÃSW—©˜nütŠPPÅ>áI|œ
+q^ÅÆø:ÆI9’ÚÒ AܧƒûÞÙ¦­Ëq²ݯç<™ÃÓèý»‡èúXý{,R1+ë¢ðwÿmº}iÖäÍ >öx¯XR`QC¢*$
+þãXcë*²ôu$qÇõ²O—‚ŽÕG6Ÿ…E`Lf™·Iwá„ÃŒíLž°ª“RuÂÝœ#ûI$IÄŸn¼Ó‹&ß:æ2Æ?9½DÀ° á@aÕgP\+ÃÒaœ¶SdËðµñµÂ­}ɃBæ9ãVÒðhËüsk;ñà·îû—Ü5ú{ó›ª\E9`í›í“™†<Ìà½q´t_:ZöÄ÷:©1,f¸ßÖ6ƒ}žiÑÆŸP˪±AÏ2.®Â|ÓÙw4÷::nG®.÷¡Èƒ;ܾÕnìèÃÄså·K<WíÏ&Þ79sÉLfôwÉøñH&.ɸrc‰¹ÅHæTvÑDv­ÕÓ‰ì¸ãDvŒûü@v £q ë;kĤH3v“
+Ú2Êz&¡øv…÷Ûcã0M‘ Ç"yÉX$¾ÏX³"B‡±«ÿi,‚þiÁžÔ2?MG‹À÷À
+nÌÓb|½Ž+Ç"ŽÁÚ<m,¢a;6t]S5ÖhÅùþجm ·ïâ´ƒj±Ÿ[.lÿj»†x>;×^B“pf¾ºäò¥T\ûÇ«wÖóZ]èMGš‡ÅÂÝ#‹=Yá(Ÿn¨ëúÔ‹ÎXq
+Æ‘kþwÜýo["ª\pŸP Ó\²!N?/miëÐÓy'D?ý1càí¸øÞn£¯X|bFØsLŸ3§Xwä*öá¯_ÿþ&¼½ímÀlÅt¸ˆ 11üô¢èÁ† ŸÑNæ]×Nzù²öMýÞÑÇNQy2~]{[]ü/P¦¦‰
+endstream
+endobj
+1209 0 obj <<
+/Type /Page
+/Contents 1210 0 R
+/Resources 1208 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1133 0 R
+>> endobj
+1211 0 obj <<
+/D [1209 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1206 0 obj <<
+/D [1209 0 R /XYZ 70.866 759.174 null]
+>> endobj
+254 0 obj <<
+/D [1209 0 R /XYZ 70.866 743.933 null]
+>> endobj
+1212 0 obj <<
+/D [1209 0 R /XYZ 70.866 713.016 null]
+>> endobj
+1207 0 obj <<
+/D [1209 0 R /XYZ 70.866 507.107 null]
+>> endobj
+258 0 obj <<
+/D [1209 0 R /XYZ 70.866 491.867 null]
+>> endobj
+1213 0 obj <<
+/D [1209 0 R /XYZ 70.866 461.007 null]
+>> endobj
+1208 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1296 0 obj <<
+/Length 1848
+/Filter /FlateDecode
+>>
+stream
+xÚí[Û®ÓF}ÏWø1‘È0÷#õ¥* !P[8j
+»D"¥• ­uóŽRQ;×{;BŽƒhB0àçc†ÃÝ]Næëô(ã…ýâc°œÅ÷ÛàÃŒþÝt²F„zSB/DfƧõv`³ÕfBÄø³™;ØÙ0ÈÜÏhöù¨Ý¾vK‹6<Þ ï. —pá‹IôiBÁÖe¶ì…=OâMš>†sfeÙŒøæ«xÎ;š™l·­â¢Ðf·ììrÙÝEö¤Ë¥ìHdE¢ø„îeæ)í
+~–D‹AŠ´±=Œb(†­²šÍàÀÅl=ßÇÒUï°À(cÐzÏê4Bë¦<ì¦é•‘dºhÂÞaÌÌáWìhR³Ú,L¬?š”âÏ.&ýy·ÚÜÎW³8\‚i¤n2ä  ¢_€%)ÚYúsBÅx.;‘DË”¨
+îYJ;ãÍ®X%‚¨àJh×rÙ'Â.l )(‹*D„KÎ`ý»Ç°°£0žñ³¨¢O³¥` Aœö|ÄŦ^:š@t5N¸ºp\ËÖVàXɃ¿ÊyÉáy•±}lÿ?][Tï0º Ê$‡^.R̹•‘ñE”—þ‡‘þ‡Zü—wè&Ò “rFV@fMé(]_b'ÿ4%ý&,vºº%Y&â<›Š±C ÿÕ$ ’@- ¤N9' |ó
+PUħÛî@J"Eɹ“(x‚Œ“e‚/J€Á.™€µf~œ D}QspA”AWFzµÏeêà:;]WÎjÞTV-µäëÔã‡F¦'Gù%
+L—þ—E\ŒSm¹FXŸ¹ƒÄD!cP®,&T«•³^šÞÎr?×g=ÆVa®û©«Ê)ð)“æTUW`·Iw<‰ÔöI¿+ØÛö!´D3ÊäXµ(ó¨úqìbÅLës÷È90]‘¦±?—f}Ä&M †%Í;i×1á÷Ä.dS ç©˜Â¼®ÄÆ™!à|"ûÍ|}ÁÂLÇ3p*Õ©ô(•J>`*µ‚¤Ryi*µNÒY™´K*åC§RýJ-©ÔêÙ«¤RëÌ®Rée‚u™JÏÛýÈv‹m«{ìfóÃÝnqÃ>±4X\ƒ$ý@R%%ð”^€ü.¹TÀº†˜¾žÝœá¢á†VÞ ï ð|¤Ø¹T Z£
+ *6dŽGÒ½•tãÅv²¥8A ã¼×c3[SrÃ8ØM®LQÔFŦ‡›u—õ‡=E§4¦=ØfÏv„—ˆá~ðåc±Ë–»ba´°›Ðº»D1FZ8{D‰sÙ0Ç-(œà`#ÂøyÅŠk¿Ö‚‚AE z<r1õC,’¥ QÊûi¶1YœøQly¥¡qIÎ54å~¿Hm‰•Æy”D§g:è÷,PU²{Knªp{uÑÕe êâjåu¢º4m{8ª.vø®C»LqÌ0§neÕE\©ºèÿguDŒ¥ºÈzu±ªl€êbW³³êrY°áƒÅö6)¬ÀáÊz¼KZ¼ð*U’WÞåI™{öy™—:ƒefÎ&*^eb\üù&Øf_(Ë?1ùÛAì ¦OŠw?˜w“6»ìÇË—¿½Ê¾ý¼ ¢W¿””CjULgÁ$ò-ÁT³ôÈJ¿¼N¢8\ùáínn\€Ç÷Ù?é«bù÷Ÿ6é^çý]z@2ü/.˜
+endstream
+endobj
+1295 0 obj <<
+/Type /Page
+/Contents 1296 0 R
+/Resources 1294 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R ]
+>> endobj
+1214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.604 704.887 167.45 715.155]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 692.824 158.824 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7ed3535e3c97c9c2ce299addd74b4a01) >>
+>> endobj
+1216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.501 692.824 248.28 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2a987351b9605b918693a17d4dd90772) >>
+>> endobj
+1217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.957 692.824 382.424 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) >>
+>> endobj
+1218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.101 692.824 468.401 703.2]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532) >>
+>> endobj
+1219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 680.977 182.477 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beae4b8e84801f56fdb39472c45762bd051) >>
+>> endobj
+1220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.662 680.977 271.44 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) >>
+>> endobj
+1221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.624 680.977 357.677 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a4a0dce1e919688bcd27411746b7ad8) >>
+>> endobj
+1222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.354 680.977 446.137 691.245]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1) >>
+>> endobj
+1223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 669.022 154.081 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beadb87fc98ffc6440f53caa1f5d6606512) >>
+>> endobj
+1224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.758 669.022 244.541 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beabbef146a7c8d44992e9c61bec2309348) >>
+>> endobj
+1225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.725 669.022 392.582 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea28ae6227a8117b9f39b797caf3211313) >>
+>> endobj
+1226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.766 669.022 501.924 679.29]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3) >>
+>> endobj
+1227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 656.959 157.327 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beac30b06c765f4623efb929a141ff9457e) >>
+>> endobj
+1228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.989 656.959 250.271 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7d1b46242e62919d0c5af733553351c3) >>
+>> endobj
+1229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.933 656.959 387.902 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea14900e8333498e699db5038b413fa53a) >>
+>> endobj
+1230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.564 656.959 477.366 667.335]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) >>
+>> endobj
+1231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 645.111 174.999 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea3dd2ff18afe8c14f3076694e52942ee5) >>
+>> endobj
+1232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.066 645.111 282.809 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea1fd38bd33c374db6667332f011a980d9) >>
+>> endobj
+1233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.876 645.111 378.157 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a30ec9215efb0a584597aeda2c03e19) >>
+>> endobj
+1234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.635 645.111 476.134 655.586]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea317dd63053ef79e3b3cea2ce2b676b38) >>
+>> endobj
+1235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 575.385 204.4 585.967]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga721f06c8017479ccc6cb46ae0552b597) >>
+>> endobj
+1236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.885 575.385 236.794 585.967]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 562.52 199.199 573.102]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaa290fe71698081e26ec234a234d2fdcc) >>
+>> endobj
+1238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.685 562.52 231.594 573.102]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 549.655 182.755 560.237]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gada4a8fc8b0a17d3109acdeaf2c9443ea) >>
+>> endobj
+1240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.241 549.655 215.15 560.237]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 536.79 202.696 547.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga06dfab09153c455fcaa609e97846b0d5) >>
+>> endobj
+1242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.182 536.79 235.091 547.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 523.925 177.393 534.507]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gafc4e7d07089576fe946c42777ef191cc) >>
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.879 523.925 209.788 534.507]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 511.06 197.334 521.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731) >>
+>> endobj
+1246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.82 511.06 229.729 521.642]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 498.195 200.419 508.777]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga794e820b3c076c766cef93bb414908cc) >>
+>> endobj
+1248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.904 498.195 232.813 508.777]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 485.33 195.218 495.912]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaa7d615b194c12278b00841852b0dff2b) >>
+>> endobj
+1250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.704 485.33 227.613 495.912]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 472.465 204.408 483.047]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga4bec24e63a011cc0bfca98e79f3c0b93) >>
+>> endobj
+1252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.894 472.465 236.803 483.047]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 445.31 211.662 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 445.31 244.057 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.969 445.31 401.815 455.892]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113 420.489 216.159 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaed75fbf8e655bc644d585a48e810bcfc) >>
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.156 420.489 248.065 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.728 420.489 403.574 431.072]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 395.669 211.662 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gafb31932f7af41b5db5e7d80b21926853) >>
+>> endobj
+1260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 395.669 244.057 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.969 395.669 401.815 406.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113 370.849 216.159 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882) >>
+>> endobj
+1263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.156 370.849 248.065 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.728 370.849 403.574 381.431]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.451 346.029 230.56 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga9a4e5434d7a476580c6ef7ad2c776bb5) >>
+>> endobj
+1266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.008 346.029 262.917 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.65 346.029 420.496 356.611]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) >>
+>> endobj
+1268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.31 321.209 210.701 331.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.759 321.209 243.668 331.791]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.899 296.388 216.276 306.971]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga9ef4cfec5c836de61180767240c7f380) >>
+>> endobj
+1271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.923 296.388 249.832 306.971]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.31 271.568 210.701 282.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d) >>
+>> endobj
+1273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.759 271.568 243.668 282.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.899 246.748 216.276 257.33]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) >>
+>> endobj
+1275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.923 246.748 249.832 257.33]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 221.928 211.662 232.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 221.928 244.057 232.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 209.063 211.662 219.645]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac9f8cad27477155b583b54848887997d) >>
+>> endobj
+1279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.148 209.063 244.057 219.645]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 196.198 216.647 206.78]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.133 196.198 249.042 206.78]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 183.333 216.647 193.915]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) >>
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.133 183.333 249.042 193.915]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.195 156.178 214.085 166.76]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.277 156.178 246.186 166.76]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115 131.358 220.875 141.94]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga305bbe90a798fdc8347aa809978365f5) >>
+>> endobj
+1287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.871 131.358 254.78 141.94]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.195 106.538 214.085 117.12]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) >>
+>> endobj
+1289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.277 106.538 246.186 117.12]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115 81.717 220.875 92.3]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645) >>
+>> endobj
+1291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.871 81.717 254.78 92.3]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1297 0 obj <<
+/D [1295 0 R /XYZ 70.866 789.024 null]
+>> endobj
+949 0 obj <<
+/D [1295 0 R /XYZ 70.866 771.024 null]
+>> endobj
+262 0 obj <<
+/D [1295 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1298 0 obj <<
+/D [1295 0 R /XYZ 70.866 723.517 null]
+>> endobj
+1299 0 obj <<
+/D [1295 0 R /XYZ 70.866 594.122 null]
+>> endobj
+1294 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1365 0 obj <<
+/Length 2351
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[£È~ï_”,­+u/ØǤ'mf´›NöafeÑPm£±Á1°“ίϩ lð¥Ç=J¤y¢€ªs«ïÜ
+p° pðÃÝŸîþø—˜Š¥dÁÃS 0Š¤ TL‘$ÁC|žýöðcÀGœ0XgŸ¾+³f­gsª¢ð¾L›.ê¤ÎËÂL¾{óp÷¯;sq@:šQ„"ʃts÷á7dðîÇ
+ò¡—¶vj‘,{^êUœûÍwã$nf·2öΪ¾F2¾%Ó'SÉ¿J2es»d:NþvÉt”þ­“)09‘L‡ÉT^œLÕ×H¦Ñ·dzód:’LÇÝèvÉtÊn•LÇéß6™Z/}Q2µ+Ï&SªPË/N¦²sÖZ'›3©¼…*Šç/L¢CO4µIôŒ°¾./Œ^@Zq$»’ôãŒã¾F-(
+#öÒ‘”KI¨!ôúŒÀ?vÚ§zÜ[Æ“]RH½%ÞÁ"*Éï“Œ©D18ÇU˜¼=àÉ«Þ$„ÛµI'"{ô-²Föñ’æõ#û(ß‹#û ¿ÐÛeèç
+˜adW¯Ù£ÿ“È^çÛ¿fdÇûkEv¹ì〿Qdÿß<¢ÂÀÇ\ ‚D)‚‘± Я°[ ĸÿÈ$”÷ÐU`èîuäk™v?‚»*ÝåÛî[ØšE0´Ð·&XéJ»‚§¦HÍêÊÝ&;ûœ‡MeY˜®Uw7ùf»Öæó[^,ÁLÖC¢ŒåÝiض»d¹Ifs ’—›­<µccG1’² ÙßQçýã´+íÕ9f@H ‘›žåÀ&9x+¤:´
+Ì}ÿ1O!&º³‡¤ÈF¦çñi½6à­z7ªF8êV§ »ï@›´®LtANn"…mçÀNRî¦ÿºÒ…kIW ÜÚì*Ü)L催çm“Z¯´¼u(EYþdáoŠÚ=êÊÜvèu:IWîqùä®@Ô ª|YXÄòEæ6Åþ± Û“èîµë¦Uø˜×m[]ë¥ÞyÒÏ[ma`Ðß߬ϫ܉ÁAéÅ.›h÷Ä ÄÃ"ÙøQÕ<A| ÿ¶ŠV£H1ä¬7 >ºOV‚SàP È=‘fŒŠ‚"€]A%#ÌþTc”"Þ«MJÓB€“˜šàbì&ÀA›bEZ¹'n×y‡Þ=éÌ>€óêà}e¶Å§Ì8
+«ÒQ6P06óÙŸt‚[ðx˜il!$—ÅúÙ2?Ýyͣř}›ê½ßà¡Ã¼·uhJ™s;ò'Ö}̽Û\­Sºææ±o¢8§]ÉrÙ¿
+#°¿Yæ7b«Nü’4)†”3][_á&/Z‰£*ËbøÄAnÛÌh›8ñ7†’ŸÖäSáÎ<‹!¼ê÷Ï , Rl¿ô攼·ýpÓªlÆÞžSMZÿ[Ö6©ÓÕäÙoÝwŠ?"U¸%ׯˆ$&Σ )#ÅÚEƉ÷Ybáåb7q>åÞúYm ûM6óšº2'§þ…ØcÞé¹ àëÃ)­Vîî¼@=öù¦#–Ôd·;K÷÷¼lFs‰-î|ØxrW{H^:wô¯V-µ.ún±JH뺤4ľ&¤ûšúšðM1Sa³Ñ»Ä+ •áÃŒG!¤@_'ý5Õýî4Âõ¸p=¦])ª[_]÷ÿì ºï®R«Rcp‘…ÉɧêÔ¹_8`zßÑÓÎÜ}} C¾ž…Ѿ"1Þ> €õȬè
+ËÍ1ŠMµE¡…Dd5éí“+~:ÛÛ…¨¾A ´+Ü4Ç”î¿ñxÓ.ü÷½;e]srAÙ¾÷ìÒqÆ*›bÌJMQî2¨ñü;¡“u㊡I™çžTž`y,´Ëng$–¢ë&ü|/RµÕiž¬óÿ5tvVChR”eQ'[¸;pé#zúúmwøv‹_$WKiR°¤$Ÿ²Tž²++GfÂÍwüÔÔžÀE'ë“&ÀÐv¨®ÎLÒTWUnsÜú¨Ê‚_6Ë•»ùÛ»Ÿïÿü×7÷ÿxûÆÇÂÂVáù®,6®è@æý>i Ÿ6¦—iÒ˜îÓâ)kº…^)7ýU<Ãñ9È‚žÙ…îlN†ã¸ó”Ⱦ¬†‡CRÓ0†nY´IžÑ׉:©ï‘€!±ïÌ|IXpT'å:ç}2ÀÑQ©Ž–Žý¦,Šè5?)·?QKD•äö”LHÄ"3‘”^…tar̾¡q×_Mk¾×>oR毘7"ì{L¿g²…ÝCçíÛ¾s£Ÿ¶ºx÷sw²&Q¬XäšBT<rö>[ ºïi
+_…ùãÎú}× ô›…ûÒNÏK;A‡&þ/( ”
+endstream
+endobj
+1364 0 obj <<
+/Type /Page
+/Contents 1365 0 R
+/Resources 1363 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1292 0 R 1293 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R ]
+>> endobj
+1292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.08 758.07 233.906 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.983 758.07 266.892 768.652]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.569 721.002 238.38 731.584]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga7054a4ec6bf4a65dda00a0aab75db65f) >>
+>> endobj
+1347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.946 721.002 270.855 731.584]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.08 683.934 233.906 694.517]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga21ff57e990e07b43d08dfb4214d928c8) >>
+>> endobj
+1349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.983 683.934 266.892 694.517]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.569 646.867 238.38 657.449]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac7d4d8d2d7f5d33b5c2b33d89b3ec0af) >>
+>> endobj
+1351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.946 646.867 270.855 657.449]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.285 595.061 224.913 605.643]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.195 595.061 258.104 605.643]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.358 569.948 228.97 580.53]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) >>
+>> endobj
+1355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.324 569.948 261.233 580.53]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.285 544.836 224.913 555.418]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970) >>
+>> endobj
+1357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.195 544.836 258.104 555.418]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.358 519.723 228.97 530.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga81091e3b6b3dfe02aab5e0a661f65433) >>
+>> endobj
+1359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.324 519.723 261.233 530.306]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.141 376.557 318.031 387.139]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.294 346.977 325.467 357.559]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.952 346.977 448.344 357.559]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1366 0 obj <<
+/D [1364 0 R /XYZ 70.866 789.024 null]
+>> endobj
+266 0 obj <<
+/D [1364 0 R /XYZ 70.866 493.147 null]
+>> endobj
+270 0 obj <<
+/D [1364 0 R /XYZ 70.866 310.23 null]
+>> endobj
+1301 0 obj <<
+/D [1364 0 R /XYZ 70.866 281.321 null]
+>> endobj
+274 0 obj <<
+/D [1364 0 R /XYZ 70.866 281.321 null]
+>> endobj
+1302 0 obj <<
+/D [1364 0 R /XYZ 88.314 200.035 null]
+>> endobj
+1303 0 obj <<
+/D [1364 0 R /XYZ 88.314 183.889 null]
+>> endobj
+1304 0 obj <<
+/D [1364 0 R /XYZ 88.314 167.743 null]
+>> endobj
+1305 0 obj <<
+/D [1364 0 R /XYZ 88.314 151.597 null]
+>> endobj
+1306 0 obj <<
+/D [1364 0 R /XYZ 88.314 135.45 null]
+>> endobj
+1307 0 obj <<
+/D [1364 0 R /XYZ 88.314 119.304 null]
+>> endobj
+1308 0 obj <<
+/D [1364 0 R /XYZ 88.314 103.158 null]
+>> endobj
+1309 0 obj <<
+/D [1364 0 R /XYZ 88.314 87.012 null]
+>> endobj
+1310 0 obj <<
+/D [1364 0 R /XYZ 88.314 70.866 null]
+>> endobj
+1363 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R /F104 749 0 R /F158 920 0 R /F173 1097 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1380 0 obj <<
+/Length 2093
+/Filter /FlateDecode
+>>
+stream
+xÚÕZMã6½÷¯ÐÑÒ ¿?r\$3@0ƒd3ìajYÝÚ–[Êlçק(’²d«eÙV»—v[¢ê=V‹¯háè9ÂÑû»=Ü}ûΰH##%‹ž"…‘–2R†"I¢‡eôy&žßS¥gÿ™K<+v/îÛ§U¼Ëòçùï?Fœ3$›õŒØ«w?<ÜýqGà"ŽHcXk¤)’ÍÝçßq´„{?F1££/õÈMÄãÖØ:út÷ï;ìÉâ6i¢Ú¬Á(#<R’ h¿l¶‹b7§x¶\TÛmº«9#ß¾ã¢=m°hø»áõ,‹*_ºŸæÌNß})vËt—ú;Ω˜Åë*ÝatYÞ{”{"á–Ël_î²GKµ*ÓžŒË,Y$s‚g«*”愤Ôk[s@˜5GgÕýŸX³öî‰é#ÂÁø(ÆC,AF]ıÊ÷Û4Éâuö×Fžcê
+$Œp†¾OØæY™¹Ò[[~ŽÔp¿c<¹OûÈÚß„YÌ™˜¡rä!)-ûQ»óˆ`¤„‘v8ºgi¡š}1`‰1ž½«òij zö}‘T›4·9—ÚnéC8x
+j¦éÖ®Þ5–‡« Ô¿/Í?Ûjï€r [!³}¿­^›Çwû®!S nd$l墧ÞMbƒÔ³å
+|+Ì  šBˆî"Àmσ ™T@öI.›òÑW35䤾¶«¡Ñ£°ô:¨û¢Ú%~{ñaoÍòƒ’³M}2T!)é Oã£$|Þâ[LøKŽÔÄÛ"Œ¡b
+ðµU¾†¶Ëë¢ìÝÔC ¯Cïô)¸ m¹Ú¥±—‹¹uÕæ1(É¡_Ìí4>`Bàc|“ dnPÃS•^XÅЭsÀ™Ìt¨µ^ÇDø*èþ
+:E›EN¢ª¤„´ñæÓÎâ>µš*ãX„„Ú»k$øÚý[§}*µ›ÔíŸ4©J×SÖ÷}‰³3½Í4Ì^‡çMO
+ÂWlP¼û25Y
+ùB/hL ´mƒé"ÙCCoSœãY‰’·{ÔN RBKÞî éè’ H3)oè /µ0ÐA2n3Lé §@õdu™í·q™ÌÕlÕ®\§1¸vFÜ¥P®aˆÐI`¡ÓGŽæƒÝ2”)ÍÈnyTW"GuËÃ=U11‰K¨†&†Ó®OÆvË^ÈÌ@!!ÅÅ}…Œ4@åëöU Ð$£7íV·Ùp‚ŒŒ …˜¦¯b„ƒQ>¢¯º¶WuP?µú*¿Ó¶;¬7õÇå„NÃ&
+p_¦:àgêÔ°®NuPõÿqã7KBã×ñÉW.TT—ÿh¡ºäÍ .Õí…j¨× é%¯"†÷%%ô"¶±:œi
+HOÿ Öû4Ow&Ÿ‡·'Yýò{y2ÝúI2ÿ‰‰ðçrì;L¿c2¼<C/Ï|øðëG÷ßOÛ4ÿøs“ÿ ••=v·!·?óÓÐa-eÍ)è/ö3œ_Èwµ†v'®ªuúªì‹%õáæës= Í{ü ~þ rµr
+endstream
+endobj
+1379 0 obj <<
+/Type /Page
+/Contents 1380 0 R
+/Resources 1378 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1375 0 R 1376 0 R ]
+>> endobj
+1375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 185.633 186.487 196.108]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 106.258 186.487 116.732]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1381 0 obj <<
+/D [1379 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1311 0 obj <<
+/D [1379 0 R /XYZ 88.314 761.061 null]
+>> endobj
+1312 0 obj <<
+/D [1379 0 R /XYZ 88.314 745.121 null]
+>> endobj
+1313 0 obj <<
+/D [1379 0 R /XYZ 88.314 729.181 null]
+>> endobj
+1314 0 obj <<
+/D [1379 0 R /XYZ 88.314 713.24 null]
+>> endobj
+1315 0 obj <<
+/D [1379 0 R /XYZ 88.314 697.3 null]
+>> endobj
+1316 0 obj <<
+/D [1379 0 R /XYZ 88.314 681.36 null]
+>> endobj
+1317 0 obj <<
+/D [1379 0 R /XYZ 88.314 665.42 null]
+>> endobj
+1318 0 obj <<
+/D [1379 0 R /XYZ 88.314 649.479 null]
+>> endobj
+1319 0 obj <<
+/D [1379 0 R /XYZ 88.314 633.539 null]
+>> endobj
+1320 0 obj <<
+/D [1379 0 R /XYZ 88.314 617.599 null]
+>> endobj
+1321 0 obj <<
+/D [1379 0 R /XYZ 88.314 601.659 null]
+>> endobj
+278 0 obj <<
+/D [1379 0 R /XYZ 70.866 558.937 null]
+>> endobj
+1326 0 obj <<
+/D [1379 0 R /XYZ 70.866 533.974 null]
+>> endobj
+282 0 obj <<
+/D [1379 0 R /XYZ 70.866 533.974 null]
+>> endobj
+1382 0 obj <<
+/D [1379 0 R /XYZ 70.866 501.368 null]
+>> endobj
+1338 0 obj <<
+/D [1379 0 R /XYZ 70.866 380.944 null]
+>> endobj
+286 0 obj <<
+/D [1379 0 R /XYZ 70.866 365.704 null]
+>> endobj
+1383 0 obj <<
+/D [1379 0 R /XYZ 70.866 334.786 null]
+>> endobj
+1340 0 obj <<
+/D [1379 0 R /XYZ 70.866 248.381 null]
+>> endobj
+290 0 obj <<
+/D [1379 0 R /XYZ 70.866 229.617 null]
+>> endobj
+1339 0 obj <<
+/D [1379 0 R /XYZ 70.866 169.005 null]
+>> endobj
+294 0 obj <<
+/D [1379 0 R /XYZ 70.866 150.242 null]
+>> endobj
+1341 0 obj <<
+/D [1379 0 R /XYZ 70.866 89.63 null]
+>> endobj
+298 0 obj <<
+/D [1379 0 R /XYZ 70.866 70.866 null]
+>> endobj
+1378 0 obj <<
+/Font << /F93 714 0 R /F173 1097 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1389 0 obj <<
+/Length 2871
+/Filter /FlateDecode
+>>
+stream
+xÚå\Ko#¹¾ûWè(+.ß=›`1ƒLÖNr˜, Ô¶#«=vÖùõ)v“rw«ßä8XìeZnQõë+‹Er0¢bö8ÃöñîÛðüËÝÍ÷?6ÓÈHÉfw3…‘–r¦ E’Ìî6³OsF¿Þý<c‚#Nü.û!Ûœ·ÉbI•žÿ˜­ÏÏÉî´:¥ÙÎ6¾ùëÝÍn´Å3r‘©5Ò”ÏÖÏ7Ÿ~ų |÷3(ÄŒž}Í[>ϸ`Hp‹±ÝÞüýW´Îµ%˜7¨+ Â^_41‹%ÁÏ[P>ÏÒ͵Z„¤1ËLe—Z` sÑ©$€2„+ ¡„
+¤(©öãËó~Ý 5ˆK”kD¯‚nÒã~uZ/Ôü©[ƒ’ÅÀÖ ÁªØÿƘîÒXá1P øFÍÊú >L5€ l¡kã(D$ñNŸnÀËïO®šh*A;Fg·ƒž°¢Q¢ì®Cs×h›­¿sªZJ¤„ò­À ®-B5Cšó&¡Z"ÁjNîNÅ ¯ë#†âK/OÅ°ºê€BB–l!HÞt¾ÿ‰—e.© `; 8’B¿ºM÷#Ûßãëø/ïnfŸò˜soÇǽóקûÂyîy
+þY‚6ÂG.õǤh–Ç©\ÌêT<·éÎ3ʵ(>eÅÓþƇ:
+ÌJ¬ªÛa(Ç(9,FÁ•@à;1Hi:ZB[”RV”@DõD)AdTSÖé*¨½aÊâ”ļ
+ž‚µD)E¢ Ú8%« üñÖ0¾Eé°0¥Õ€0¥†„)­Ew˜R)-b˜„jJÔ‰èˆS¯!ÔÆ©æ.€zìÒÑdît~n°.'à—Ià¸^<J6÷§—}Ò/bÐêíó| >6êÂ`2fÝæäv$0Ãœ\`d¨œdÎíçfcR¤Œìî€ÑH²(S`°1å;°dÆ AdI2ÂásKG(×=ÿAÕÀXWR(4ÖUmE1ÐLš€§6&dÚÑH Xým ®ûÅAŠAqÞ}iêL4RÐÖ âò¬L¹@®¯Ö6“ À¶,~ýÑN®«Ãê99%‡!óc³¬F™õo›Ö5’K$ÁÎuDƈ†é9Š ›ºAhd ªºd@ëÂÿËt*\qGŠ˜„cãÌ¡~
+hšâ5¤ðz*l%$°î£v<•Qo³óaíÒ.Рeq Ðàít‚×$€Fu‘A2‘à¾D±@"©A „H›´ÉjÂÞBä4Øf"K¨ï¶ÙçÕ¶àñôtHV›âs“.6GërÍÌÚFñ06ƒd861¤ð4L¬á@&aˆûÀv\»œ¢ÑIÐÍ„–‘o=rÁ©Ë‚Z˜«Ã5 AÒ0CD4
+£—24ºBÒ,Àš½`Á|>ÕÎàDÔf
+Ë ï³ó¯v†Y1çñsvÞu Éñª\Ñ`EP©‚¨ “á¸Ô6Å “j
+iHjñ)e—ÓP¹¬€þc¿Êáh®í¯yžpq$Ãq¨`½!Lœñ(”DŒ ŸUwp8 µ™Ã2èí)Ùûj“À™£3Ý­‰­¬»?]AêeAñ<;ìÉÂÙa|É“›¹­ú5o Bt‹èç>H†ãò|Ë 0îa=b`Õ!$,^ u«¿"i¡p3ýeÜ»'7™
+äémŒö³læF¸åÞ&äðp ¿¦§§ÞGë|͈°K· ÞÇ˸¶—‹~±\z\,™4󇙟w뢶k_ÀÈدIþµM=“â5Œ-0ëywJŸ÷UV|s<­àKŽç§âýªx½yÙ­žÓõj»})ÞûÌkãaøÙ!k¿ÛfY^þþ4°Ø\Y¢~KwE[§…k—¿Zóݳ£e-–àÇ<©Ê+Ø–—z=¸]ùúàÜ”óY5ˆ²Êº÷û×.ٿٳOÅKùÛ±Zñ¾|WÓÍ+dKê|DIùF%uÕ_R§aÍgœ‰tçö%u³èX %u‰À3.!)ÑWRW0b B8³»UÔž’ºA„ó(àš Íx¼½¤Ó€™M’ÛùS˜ÖŠºbø Šº"²¿¢ÎpEÝ&Ø=û~Á`Ša
+¤¡¤NC{íŽkÙ[P‡¡ÅTP×j\A]Èñu…»« vÂ4Š9¹0ˆ’š9Ï­ö„b”/™†ùNU‹ÖÍå\p[§àBƒ&,"aH
+Q˜è‡4—~tÔ»¤"XPEé€RHSVéÀÀšôôz:¥1EJAo>F£¦~µ+)¦Ãvåm\±'Ïè7L x9Ѓ÷ä™f+°'?VBÇž<ÓÐ5hO>ªÛ“¯ Ú“îöä+àÝ{ò1P‹=ù
+¨þïÉG0‰ß“¯ñ§Ü“`N¿'_7§äo±'¡~O~Xj{ò2Öž<S$oaOžA^h@T?÷äcèoÕpÝå·È$Ķ¼õíò‡Q¦Þ¨
+§ŒC^ÁÚ{Pa©Ò!,5é®l=jªî$¦l%±¦ûvÕ6ƒë^»sK"%,q;aõvvåÜŒV1ìÊí)pUÓ½£´ƒ{jS@fq¬
+aTÑV%&ЬHfd ³
+HbU}¦jÉ—Û°­‡d¾ö–üÊ.ï !as)GJ¢lØî5/wÕ´I{XØdqšöÕð*ìr‡Wµ?ž½ç?c/vXBXÜëPot¯ƒH“W)BN=…É(N»¡í¾2ü^‡½"£/¡¥ë^ÇDØƳnÔò½Žu¶|Ãc¼B×t€xU'L†£”sd‚¯ê¸9aþÒL÷‰¸Íœ–a§Üñ¯Ì5 BÞØ “áø„Ñ%‚o츩öP2qÛ!û{›Vu: ¸™ÐîÇ…Àó f °Ü?]]ÀlõèΩ&§j›Ì/œÓËqÂÔ0ôÏËü{õ“¯þøsqþõàÅÂ_ÓcÇe“ñæ¸v(¯ …Ép.E±ÍM#„ÝÎWê¿zTÇ…i¨ÍîTFmõ§WGh»R[õGl+¿?ƒ×¿78s¼\\VøýÒá6c{}͸ÝÓ »£$Âù V}¹ò§aù!Bli€y¯éºÙ2·ÙmÊ°ýns®ß}y wÝÝk²±Ê—"A$£ðcòq¢ŒÝÍ÷7’ö÷]“Ö4ÐFo)ƒö;ËñTp›ú¤óÛúÉè~^Q Xà]«ñ"üš¨áêNÏMÎúßåÿ{1‰¨²§ìì6€DLÛÝ/°¿œì’Ãê”l|öP<ÿe éþå­¿E™{bâþ—Â~Àô&=£ô•Ñ÷ïÿù¡øô·}²ûðñ²˜†+¦‹¢®(×-_WÓµ¢ìR'úÅ_É!ÒÏ{Ãâ¥tAçÅÿÇh¹'½<æ ’]e…
+>ó?ýÅ2ò
+endstream
+endobj
+1388 0 obj <<
+/Type /Page
+/Contents 1389 0 R
+/Resources 1387 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1377 0 R 1384 0 R 1385 0 R 1386 0 R ]
+>> endobj
+1377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 733.519 186.487 743.994]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 430.478 186.486 440.953]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 343.375 186.486 353.85]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 256.273 186.486 266.747]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1390 0 obj <<
+/D [1388 0 R /XYZ 70.866 789.024 null]
+>> endobj
+973 0 obj <<
+/D [1388 0 R /XYZ 70.866 716.891 null]
+>> endobj
+302 0 obj <<
+/D [1388 0 R /XYZ 70.866 701.65 null]
+>> endobj
+1391 0 obj <<
+/D [1388 0 R /XYZ 70.866 658.836 null]
+>> endobj
+1331 0 obj <<
+/D [1388 0 R /XYZ 70.866 500.953 null]
+>> endobj
+306 0 obj <<
+/D [1388 0 R /XYZ 70.866 485.712 null]
+>> endobj
+1332 0 obj <<
+/D [1388 0 R /XYZ 70.866 413.85 null]
+>> endobj
+310 0 obj <<
+/D [1388 0 R /XYZ 70.866 398.61 null]
+>> endobj
+1333 0 obj <<
+/D [1388 0 R /XYZ 70.866 326.747 null]
+>> endobj
+314 0 obj <<
+/D [1388 0 R /XYZ 70.866 311.507 null]
+>> endobj
+974 0 obj <<
+/D [1388 0 R /XYZ 70.866 239.645 null]
+>> endobj
+318 0 obj <<
+/D [1388 0 R /XYZ 70.866 224.404 null]
+>> endobj
+1392 0 obj <<
+/D [1388 0 R /XYZ 70.866 181.59 null]
+>> endobj
+1387 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F45 709 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1399 0 obj <<
+/Length 3216
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\YãÆ~Ÿ_AøIì´û>ü8^ÄX#Îî y°FâÌ;:¢#›Í¯OÙ¤ØR“ÉžEòDŠlÖÝÕ_›¢ÙsF³÷7º¿ùþ''2KœÖ"»Ê %VëÌ8N4ËîçÙoEìí7vò[M'ëíçòק—év±z¾ýãþçLJA”@³xB¼zóçû›Þ0¸H3V¶–X.³Ùòæ·?h6‡{?g”g³/ÅÈe&“Hì5ûtó·ê…­„+<ŃWQÙÐA;bMf´$®}Ì÷‡íjWˆuJïûŸ¤j<Í,‘Rfwp¤\”¯Wy©ôâ©<î_òmuiW¿Ü2´ÎíSo¢ýº<>ú¡s¤·ß•?ÿƒçùÖZ#Í/‹]^XôŽÃfp‹(Цã}¾‡±¶`_ž
+‚óAÕ3ŒÂ¨I),VûóùÃ0%Ï´ÒÄH×5`êºzö4(pF¸éM 2Á`WªÜ
+»J ¡e˜c^ãV…µ’B§Y­"L¤1«5dKhÖ;IA<Ë•|[õ‘˜ÿ¤„,ÇØ—1I/I)WéÑb`ŽuÇ-2n \'ë"<ÊÕ• ¨¾"j¹êˆZÙÀª$Fµ°ŠÈPöÝ>jR
+À«Š`ü„ß`Å9À¿€â•-Ÿú”çþ!ÔbûìÕùøþ&û­ÀcCjHöPÁã0« êù7‚¼â ^”9Zš¡@»/…6$‰¤¤4—  虂)"Aò¼ˆ©tIx#.dÞ ¹K£µC¿«3VæámPÃøUPP^³Ê+€ &”n Ȉ:…E¸•Dð‹t"A~ ÔG[Ä €ì)“øTHHŸ¢]ƒ³ÜÏûx)Š!Û𡲇8Ð(¢Ø‰ì]@ЊKHJ“¤%Ép„9³«–odWl€9kRØUbq`Ndo‚†vG«7Q‘ƪF ïaUæFšUQG(Ó)̪
+¦à컂gûÿÜL`”ª-åö¨PõÛTxÃÆà0é£Á@úÁ†­:ƒh‡¶µ5mk0e«Ö`hÙѽÁ†õ½Á”†íÝ”†´ÍA$Õ}’Þà0±¢½Á¦Xˆ0Uk0…IËÖ`Sô7è º7ƒ½^ËoÖ”þë–ËÉz1$v$v€R²A  ¶/…(*tÄÊ’—¼:¢
+©òTåÄmr1Ü^c“p„Ç… ¹J„¡¼«%iõu-Isͬ¯iJZÕ C¥„ÔH`AAC-N=ÑCíÆNJë5'_A<–ëBjÔ¼nºìf¸ñæ%Ÿ?ì¿nò{ň8"ôzü“œFe
+¨ ='˜
+2ɤ’†ÁºÜj̳Pö ™hˉ98û…ÖEsšýZñüÌz4„DÂlJÐtBRÜ^ÓC?ú¾jíº’ñ:°–჎ð8˜Í¡kÇ+Àa¹Õ R ­¶ºìn@I¨–S(` P¶uÊ)3îJŒ¨Á
+ uE¡%³Ì¸†%Z¨…†P¬7…Ø*
+ y"W(4¥\Û
+ Mh"®€®Ì)×'Œ,˜°Ñ‚Þ—„1¾º×.d¼ÛÃü‹˜+ Ð-_Neѳø¶7°fÀ²–‚+ƒ‰ lÈ‹%[‹Aı¿ÕYÜhm.#U®ÌÅâ¦Ð…÷ê‚Š`$°‰ 
+wê‰ö¥^ek-n8%Ìvw,ˆ®i´,ÚGCT¸º@Â/6: $a`R& S)©ø¸>§%RC«oƒK±Ôê}ï²V²GáÂ!3›¢ná®Ù‹Z uÅVfÜQë5&Ô/jsG”dÝeŽÓ
+uP0æÍÔ=l6ªÂâjÝ…yXÑi@UŽÒ׫j¯PÕ†šþˆ€5®*¾P¾°ÿ«ø>M&PU(ìŸÉ7ó* vühª=SÍ•ÎDUDy
+·J
+_SÀÒ|m
+ÞŸ»HàþáQ!0Š†“uWå×d¨ð­,¶qâQuû£ùÇ1-q0Œ<šì/ÇAS¾s€ØöVäÜŸŒBBuãbb2&p#ŒNQZ0 åÅKÆc'©5†±GB“ë‡:³#ÿ_·»±·g
+J«ãG‘(}h¡$blì´vÄaƒ Î×Ó-™±òá0¶Q6¹ÞWs¶ú -œ¾‹ò¼Rw½Å?sPàŒò~U£ðŒ”ÂÏúüÙ[õt Nƒã?ÒI|±««ÿA[å[ÿ·f¸r®ªÿ§àñS¾©vMø#­þÉ‹‰(ÿAèÊqüè¸þþKyö×M¾úå׺¯ñ[¾qUÍÜø@jE¸¨¹«ýbéCâÃâq‹›I ,¾z€øóמô¯ÏÅ€|tm!dþ ×¼Ó
+endstream
+endobj
+1398 0 obj <<
+/Type /Page
+/Contents 1399 0 R
+/Resources 1397 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1393 0 R 1394 0 R 1395 0 R 1396 0 R ]
+>> endobj
+1393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 617.053 191.705 627.528]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 529.95 191.705 540.425]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 442.848 191.705 453.322]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) >>
+>> endobj
+1396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 355.745 186.486 366.219]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) >>
+>> endobj
+1400 0 obj <<
+/D [1398 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1335 0 obj <<
+/D [1398 0 R /XYZ 70.866 687.528 null]
+>> endobj
+322 0 obj <<
+/D [1398 0 R /XYZ 70.866 672.287 null]
+>> endobj
+1336 0 obj <<
+/D [1398 0 R /XYZ 70.866 600.425 null]
+>> endobj
+326 0 obj <<
+/D [1398 0 R /XYZ 70.866 585.184 null]
+>> endobj
+1337 0 obj <<
+/D [1398 0 R /XYZ 70.866 513.322 null]
+>> endobj
+330 0 obj <<
+/D [1398 0 R /XYZ 70.866 498.082 null]
+>> endobj
+1334 0 obj <<
+/D [1398 0 R /XYZ 70.866 426.219 null]
+>> endobj
+334 0 obj <<
+/D [1398 0 R /XYZ 70.866 410.979 null]
+>> endobj
+1367 0 obj <<
+/D [1398 0 R /XYZ 70.866 291.913 null]
+>> endobj
+338 0 obj <<
+/D [1398 0 R /XYZ 70.866 276.672 null]
+>> endobj
+1401 0 obj <<
+/D [1398 0 R /XYZ 70.866 221.903 null]
+>> endobj
+1397 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1407 0 obj <<
+/Length 2903
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\ÝsÛ¸÷_ÁGi&Fñ ð;¹fæ&™^/žö!½ñÐcs"‹:‘jêÿ¾ ¤‰_’`_úH&Á]ìv÷‡%„£ÇGnþzwó—¿Å,Ò(–’Ew_#…‘–2R1E’Dw«èË‚ñåïw¿DLpÄ ƒçê«ŸŠÕ~-o©Ò‹÷EºÎ6URåÅÆ ¾ùùîæcqDZšZ#My”>ß|ùG+¸÷K„‹uô½ùqÁà†Ç:ú|óÜ'=ó”áf¢?'é“PñÕ~VOn†_— /ŠýÎýµß¤fª¥ýó)Û¹aIó%_8yš¬Ýõmr¼¨]ñ|Ä!Ù=Ö:p—_¶Y¹$bjÝáè–($Aøz¢wæ!FTw"æÏ´xÞî«úž´”ÍÕýv›íì×d³²_Ö…!þ}Ið¢¹÷Pì7«Ò>ÛŽ++¸ #AÇ£*Üð†z™¹±VG»#îeVÙ/F§æ3¯€#ðM:·DeK43¤þkþËRhÕ* XH«„‡%Å‹£.ÙhQ,Òýnç”h®î²de¿7ïŒ-¿‰ÖŽH™>eÆ'Ýë¢Øº'–dñ”8¢yi?A!©ÓÍCóÈaJ¢alò*·Ž ÿYR±HÖûÌQ±ŽÖí¬
+fvQ^ÎE”¶ƒÖEúÎ ò£D[%€ËŸ*…a…t`#qìù¦b´O
+à¡ÉUÑÒ–ÖÔ2Ý NY=xRp¬ÉAp[ôHNÁz±µ4ÅfŨSÌÀ0ê%¶¥ï´c¥VƒD
+Õ'$£‘ˆèNñɈÅpq9g(Žù ¸'¸#¯©ÜÔ %z\ŒX#Bu1¬lMôL1nYlð¼#m:ÌÑ\ å z0´ ¶˜wý ß2' Ô[‹RÄö¡ÏYæž1²ï~ûp}©Ãý½)’ïMÍzï
+ÁØ
+5¯0¦&ð
+«+Ú
+†ÌÏÀ+BèÀ+†n2(È-y¿ÜLÄÓr[œW'£†&±Dœ!„Àq óS¯'ð$ZÑSØLQ¨-ea©âõVû|aõ aÏA+,Çf¬îõðÂ2àˆñ׳ì$^Zwbƒ¥öõ ¦åPmš=š!iOpGÜ)¸ÂåêÒ)Äh\Û½ŸybÜ2M¤É7Â+úuñŠ8¯0ñ&xEÏí¯peœ\Ñ_9—ÂH…Cþ)™Ó_ ÁÕõW<®ãý•\]Åã:Ù_ ÁØõW<ÆSý•
+P{K¯pQ_;lÀ÷Vyz%€ÄMåõ$Õ_ !¬ë¯„6x%€¬MÅ“u¯ü™ý•
+ÁÀ´VÒç¼Iž³¾’„ ƒÃÍòJ#€v»µÍQh?½  1V»&pê’ÛEì_MtLv0ãú­m²(ûiõÒ<¾Û÷R?4" ¿Ž¾Ô/!ý‹žø„©¥e=˜=\
+2¡¦çüLLó36QevéM/U">ÍÍi²?d›lg÷=lð³Ÿÿ2}ÈæâçÌýˆeî÷þ%a?aú“ͯqÐïq|üøÏOöÛß·ÙæÓ¯­g@ªPL[u˜>MÏ›8Þ´=ÛÀøÛ~SåÍŽÊÇüaWç6$wÃóû¢À/õ€lã©Tü?I
+endstream
+endobj
+1406 0 obj <<
+/Type /Page
+/Contents 1407 0 R
+/Resources 1405 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1300 0 R
+/Annots [ 1402 0 R 1403 0 R 1404 0 R ]
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 617.585 208.14 628.059]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 518.527 208.14 529.002]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 419.469 208.14 429.944]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) >>
+>> endobj
+1408 0 obj <<
+/D [1406 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1368 0 obj <<
+/D [1406 0 R /XYZ 70.866 700.015 null]
+>> endobj
+342 0 obj <<
+/D [1406 0 R /XYZ 70.866 684.774 null]
+>> endobj
+1369 0 obj <<
+/D [1406 0 R /XYZ 70.866 600.957 null]
+>> endobj
+346 0 obj <<
+/D [1406 0 R /XYZ 70.866 585.716 null]
+>> endobj
+1370 0 obj <<
+/D [1406 0 R /XYZ 70.866 501.899 null]
+>> endobj
+350 0 obj <<
+/D [1406 0 R /XYZ 70.866 486.658 null]
+>> endobj
+1327 0 obj <<
+/D [1406 0 R /XYZ 70.866 402.841 null]
+>> endobj
+354 0 obj <<
+/D [1406 0 R /XYZ 70.866 387.601 null]
+>> endobj
+1409 0 obj <<
+/D [1406 0 R /XYZ 70.866 356.683 null]
+>> endobj
+1323 0 obj <<
+/D [1406 0 R /XYZ 70.866 248.214 null]
+>> endobj
+358 0 obj <<
+/D [1406 0 R /XYZ 70.866 232.974 null]
+>> endobj
+1410 0 obj <<
+/D [1406 0 R /XYZ 70.866 202.056 null]
+>> endobj
+1325 0 obj <<
+/D [1406 0 R /XYZ 70.866 117.522 null]
+>> endobj
+362 0 obj <<
+/D [1406 0 R /XYZ 70.866 101.694 null]
+>> endobj
+1405 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1414 0 obj <<
+/Length 2993
+/Filter /FlateDecode
+>>
+stream
+xÚÍ\IÛȾ÷¯ æ$îJí˃q ld2ÝÈœAC–ènÁjIÑ2ç×çÕBŠ‹É"¹X›|ÛWõê{õJÆÙs†³w}¼ûËß Ë42R²ìñk¦0ÒRfÊP$Iö¸Ê>ÏÒó{ªô췹ijÝá›ÿöð²8¬·ÏóßÎ8gH(2ÝLØ»wïïþ}Gà&ÎH)Xk¤)Ï–¯wŸÇÙ
+þös†3:ûÓ=ùšq¸¶Éîþq‡ƒ±å'¢Â^ÚàÁ¼âƒ4H«LIŽ$Üwý2§|¶8,^óS~˜2;: ¢£*®ÿõKÄØ ¿$2F”~M,ƒ ,E¦¸BD™.ð4AFˆ ÂPáJ
+ÁØ¢`2Æxö‡Í÷»èp¦ iC3 PÀxè
+`Ñ rA¹š ,ò¹aª–õöÄhÌ~jqéeH™ ëa0‹G”š>±Àôj „õ¡6†ð…üš$N®jó9ƒU|P` ¸…ímˆš„a…IZ¦O“á—q Ö@±'!j’bĹîAÔFª®â5­ÃˆZûb>ÜÀ&< ŠJ‚8IF€s$°N„ ÄaJ¬6¼:ÿŸ:ùÚHíq¤›Ê;ùZ;ºƒj""N£á#d´R5¡ ×ÒÀe?-<i‚™aáÉí…pK¬»c½±ˆq5…¯6E" Kd“ªy¦•ªÝsÊf/ë£Wôõ¼]ú¹hÕ_vçÍÊÿe·Ý|÷w¿+—‹Í&†~™S<ûîï7x ·¿¶DÏ9Wã¥ùêÊw'É&%øøVFÁ3JBÑÂ^8ȃC«Gö‡Ý)_:‰öka’xy”íZªAúDÁ{Ýdò1ÃÉ.‘óFl—õf»‚pD•Ow‡
+hç»VVºßBi ¼5­_ç
+ªšâã V¿˜Ã*X=‰Z­Pu­~Ìvrm —›ÿ;²­`Ù“ >ª1RœÖ“ʶ¸6¶:ݦv C×Í›˜nC†ycºÍ5À ó/eµN“á¹W@<´ž†ns—¿Ût{¤Ú( «i}ˆÑíVÚ5ÜŒ& ‚i“d’Œ
+3–ÙAZ*¡Ú1/JÉ›ÔÖÊ)”Zj'UMi7³›F­%v²¦µ‹Ö<M„-¯3õ¯a¸F”SØ—¨“b‚´¨©„qIie‘)Ö“E
+ÓƒErÓƒEjrƒEjx:ED ¾¤Â\¡ÐA"ié€m®Å=
+Á¥Jƒ3I†‡“a‰pB]ÉÿQ ´¶%wEÎ[á©<
+gM÷/ö@âÖ÷üðÜ]mQý`­ ³Ú­¶xæÒõå¾[<·€á–7г"IÛxO“F€¦·êž>#@9ÂIµD‚ËzbƒÛ9 ÆYUnƒº…¾‰½;o;2ùpc›¨•vÀ)IDÀDIœºOO€Â8"†Öʵv¼ÇiŽã]U|ooY/œÙ >9N:IF@ÚVú"•žÙv°¤%TPL_jU×°k;ÞãôÇñ®ª¿w§}%ÔƒíkÂ$|#< ê$j.`Ô0q qáq-*µ|;ÄãôÆ!®ªýh{Bá”âò¿æÛSƒ­h‚
+Âgïì=Uƒ>ÞÅrÉÉáN«ö)ÞX¢c_±¿OrQDËýåü@®¾´mØjS_ôhêÝT:#^`zdSߺ¡bm†6^aæVWÈÛJE‚Õuv6õc“è•qz¥¸½¯o
+øÜæ¶í,5¬ܳÃßÝ?¥?m&ðצ#Ë^õ[7ø,pROá«öGdª¾¾y{_ÞHHÂýW éÎ2«›4mÎFÚâ²ws_™î$Dl+~
+'8áXF9‘ÒÛ¿ªîî™Ö`†=¿o{¡¾{Èóð’õùðœÿõÃ]öٱק'ËØžB%óäÍ“%O<Úþ5ö-ŠtÈÙRü¿2Q%yõ|¯p-ßÍ·ùaQþº« ç¿YŽ]Ü|ÈÃö 'o)&"œÆe?bú#“E5KÃOLáËÇÿüä¯þ¾Ï·Ÿ~)§”ÐÊîîYj!2¼9·jV DY‰Ð¯g¨_CUðqýåàŽ'—¿H«þ:í§+÷¾?»òm-ÒáÿÈ6æ
+endstream
+endobj
+1413 0 obj <<
+/Type /Page
+/Contents 1414 0 R
+/Resources 1412 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1411 0 R ]
+>> endobj
+1411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 67.983 189.203 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1415 0 obj <<
+/D [1413 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1416 0 obj <<
+/D [1413 0 R /XYZ 70.866 771.488 null]
+>> endobj
+1329 0 obj <<
+/D [1413 0 R /XYZ 70.866 687.328 null]
+>> endobj
+366 0 obj <<
+/D [1413 0 R /XYZ 70.866 672.088 null]
+>> endobj
+1417 0 obj <<
+/D [1413 0 R /XYZ 70.866 641.17 null]
+>> endobj
+1330 0 obj <<
+/D [1413 0 R /XYZ 70.866 545.055 null]
+>> endobj
+370 0 obj <<
+/D [1413 0 R /XYZ 70.866 529.815 null]
+>> endobj
+1418 0 obj <<
+/D [1413 0 R /XYZ 70.866 498.897 null]
+>> endobj
+1342 0 obj <<
+/D [1413 0 R /XYZ 70.866 414.737 null]
+>> endobj
+374 0 obj <<
+/D [1413 0 R /XYZ 70.866 399.497 null]
+>> endobj
+1419 0 obj <<
+/D [1413 0 R /XYZ 70.866 356.682 null]
+>> endobj
+1343 0 obj <<
+/D [1413 0 R /XYZ 70.866 142.412 null]
+>> endobj
+378 0 obj <<
+/D [1413 0 R /XYZ 70.866 123.876 null]
+>> endobj
+1412 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F170 1055 0 R /F45 709 0 R /F158 920 0 R /F97 715 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1425 0 obj <<
+/Length 2471
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[[ÚH}ï_aÍH隺_æq”ÝH£D3›´v²#Dƒ»clÌf3¿~O¹lƒm°ñ´ö¥m ü]«Îwês5ž#½»ûùáîÇ¿;Yâ´ÑÃSd(±ZGÆq¢Yô°Œ>O„žþþðK$”$’ <W|û![îWñôž;y›-öë8Íçy’¥~ðÝßîþ¸cK#vi-±\F‹õÝçßi´Äo¿D”g£oÅÈu$• Jz«èÓÝ?îè±R5Ø©¡•¡oãSÊÓ¤°¢0lž‡ë*IKSbá&{
+WÿHåÇ×õf¶[|‰—d±ÙL…šÂJ¸ò†øË;¨<²„F÷‚ÃŒPÄA¸žÞ3Jéä?S.'Y²<
+ã‚8¦"Ãñ€S]aA.Ü!&Ç aˆV_ E4ëN0îˆAs:¸‚p,ì–Ž(cFѪ8"eêZŸ¦LM²mƒb͉G¯V„éºÚŸ½MîZI'ÈÖåN‚œ`¾6hu®²ðF¥œ2bU]§Åt S_Q¯ú'F¸j'K,ìY^Ž3‘Ã8®ý8ÁˆT‡qXG" b¦¶P •‡A«lñ¦t’b™©FaÞG„[E\#$
+ÌM!T«·çôân’.Ús†¡´‡Š97£8¡ î‡9`uŸ~m\d€7Å_Ò ZðÊ’ÝžPÛ{!ýB×Ñ=—xΆ§>Åqùwzû\zÿñÝ]ô¹ ¯³™çk³§©  O³Àgfž^ÌdMg¬ÌÍUÚ¬Å_D›e6›+h³$ÌØH#H¼em–@–¾š
+Œ8TÝE%±g xJƒv
+aoëXHbTÅDY$÷m‹ ˆ3ýÖ•ä¹›pŠúgÝ{Dr¾ò]ï±}múlPä´Å[¶ 5o_?ë °„"gFI®P(rÚµºÛÀ=õÕÚ¸n0ºµt7$“@˜anŒJ¡­…ì/§Ð²…6êU:϶¤Ð
+´½çܶñIá_Ç'¥èXs©¤l´!.¾\0ÊZæP7Z<¯²Çùª“A'%ld]MŸ@ eÖÖ­ËÞô|#”m‡§Ãµ¶žNZÃ$\ýª,—ño~ë;ßÎ×±ŸŒMvÍ¢EžþÚôNq LÔÝïá4\V +q¬ðV¡V(d¿CF‡žg-I´xN„ÆÒò{/k“» „lA(ª­Õ†)Á1%jZwÙ~»(ñÌ_ŠA’–%¾ÿ…4t˜9JŠæ,<ÏDÊoËñM2Êû]´´7æ˜*ìþ|^’Éãõ?Ë{DUª‡ioNõ¹òÜüË6ž/Ã}ê)Ì~ýXà:>w%¹·mç ¢ø¹[Äå$÷—ÑŒ< ð®±0‘Ô¶xŸXîcœï·i3¢ NJð,ßTáñòÝ}òT…>Ù'a÷%Û¯Êûد»ÿú?ñbŸÇÕà¸ÄpÌ‘£MDѱ?˜²>k† Ь—ù8å´
+hIô hû-ÙÅ~YLxãÀµä¢ë飸Ð]ì°}ó#é$'‹ ï„§~Œ Š·qºˆË|ŸàÇùr`tog!³4ì†ýŸy’{Ââ«Üpšê®: a„gO = Ñ_@ÛùVHÒÛ¼ £èô§#¤¨)E~‘€%¸ìfŽˆ2}âxá¾²Åë¿bÃ5#Þ‡ãØtGu܇lé¤*­úS8ŽZÃõ+s8
+O¾ùY^ºóC°ë‡ði1_­v>Ho<™“­9?
+Bhz"zžÓ9S?N¾ÈÖ›dUµ­³ N°Í–û
+\çéq’+ûù‰ýõ)S¨&Î6þcŸ`3PoQö8Ê$cCx}×K1ãf=þ5­ú×9Ð(ã;Pþˆ‚Æ“a$À¦D«wqoçyÕk­\ú—Å_}ù)Þ„^vx9e嶅‰Ÿ(ÿIèðéÉwj³2¸ïßÿóC¸ûu§~;S@‡ñ'/<ùUÈ´<g§5³áâÐ*ü¸Oód]ò}ò¸õAvè÷ŠßfÅøþ\ ˆÓÓÿ*ë«Ž
+endstream
+endobj
+1424 0 obj <<
+/Type /Page
+/Contents 1425 0 R
+/Resources 1423 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1421 0 R 1422 0 R ]
+>> endobj
+1421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 688.699 189.203 699.174]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 601.596 189.203 612.071]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) >>
+>> endobj
+1426 0 obj <<
+/D [1424 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1344 0 obj <<
+/D [1424 0 R /XYZ 70.866 759.174 null]
+>> endobj
+382 0 obj <<
+/D [1424 0 R /XYZ 70.866 743.933 null]
+>> endobj
+1345 0 obj <<
+/D [1424 0 R /XYZ 70.866 672.071 null]
+>> endobj
+386 0 obj <<
+/D [1424 0 R /XYZ 70.866 656.831 null]
+>> endobj
+1322 0 obj <<
+/D [1424 0 R /XYZ 70.866 584.968 null]
+>> endobj
+390 0 obj <<
+/D [1424 0 R /XYZ 70.866 569.728 null]
+>> endobj
+1427 0 obj <<
+/D [1424 0 R /XYZ 70.866 538.81 null]
+>> endobj
+1324 0 obj <<
+/D [1424 0 R /XYZ 70.866 403.617 null]
+>> endobj
+394 0 obj <<
+/D [1424 0 R /XYZ 70.866 388.377 null]
+>> endobj
+1428 0 obj <<
+/D [1424 0 R /XYZ 70.866 357.459 null]
+>> endobj
+1328 0 obj <<
+/D [1424 0 R /XYZ 70.866 273.3 null]
+>> endobj
+398 0 obj <<
+/D [1424 0 R /XYZ 70.866 258.059 null]
+>> endobj
+1429 0 obj <<
+/D [1424 0 R /XYZ 70.866 227.142 null]
+>> endobj
+1371 0 obj <<
+/D [1424 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1423 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1435 0 obj <<
+/Length 2603
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Ks㸾ëWð(U­¼{Lm2U[ÞÊfí$‡Ù-—,Ѷj$QÑc'“_ŸÆƒ)‰„§²'QØÝø> ÑÍn¯.>Œþü8úÓ_ +42R²âñ¥Pi) e(’¤xœÇéÉUzü¯‰ÄãjûÉ{x›në×Éo?œ3$™î ¦ìÝÑ_Gÿ¸‰ r¬5Ò”³Õèão¸˜Ão?1£‹Ïnäªà„q+lY<Œþ>ÂÁXŒ¨°—ö#˜N0OØ. Â'Æ#†™ÜŒñø÷ åãj1?·P†Œîi*»ìdÌѸS
+QÌn˜¡iCã‰|Zmf «¹A’ÉJEŒ6ÐÛ—ÓUB)
+;TçÀ•S˜¤ÊŽ«éÀ• ‰$1W.À ÓÄõ9*EZu¯Vîhâ9P5¿Us Õ;Žáx5¢¸#!Zá%ð;g°×áÄbààKG„zQK¯òЂ/¬£¯.4‰/ᙞvź¸BB›Ø®.x±¼¼híAÛ¾h‰‚pJdUÃ!ÂcÛÛ<È’ÝžÀvZò¨RP'š–u_a]¬g[´¶:4uaR"nòLC‚ùºß4f‚Ço‡õ§Ô4ÀSJA¿.$AÜ<ŽQs2z.î(¬z¿à‚‚_WþéŸmx<ÝNWå¾ÜNïÒ²’2›¿&ÃJÀ—™îðB#vÖóÁ†õ)U'¡0Ú{´hËàS’„Ì)ÂÀ1“c`•r1Ö°î«–GKBjH¬õ¡:lg¥OÌÀ «õ¹R)i3ÎI°Ñl·ˆËD’ቔFAÚB ƒôUaŒL½l€ÙÎdO½i&OÕ~XVÏÓ¥grÿ¶-§s2¦æóvcθ°"¥ƒø&#ð©á0†=5ŒOpŸœ¤ÔÚþô|²¡m£ý4'WàæÁzJ«°I­-žXçjñØïYwËFÓ×¾o6õœ+¡ ‰Ä÷ oe_4ñ¡ûW"H
+V~ª‰Ú³¸º„®»ç ì˜,s°/ÚI¯9 ©Ÿ7Rè;* €ÆÄÐá¹àÊ2<dç¼} “ÿåèøèBò§'…>Ù¨ðÉiO6fzâ‘®c&ÀoÈŒ~§L@D™
+endstream
+endobj
+1434 0 obj <<
+/Type /Page
+/Contents 1435 0 R
+/Resources 1433 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1430 0 R 1431 0 R 1432 0 R ]
+>> endobj
+1430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 469.362 198.94 479.836]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 382.259 198.94 392.733]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.313 295.156 198.94 305.631]
+/Subtype /Link
+/A << /S /GoTo /D (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) >>
+>> endobj
+1436 0 obj <<
+/D [1434 0 R /XYZ 70.866 789.024 null]
+>> endobj
+402 0 obj <<
+/D [1434 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1437 0 obj <<
+/D [1434 0 R /XYZ 70.866 733.983 null]
+>> endobj
+1372 0 obj <<
+/D [1434 0 R /XYZ 70.866 539.836 null]
+>> endobj
+406 0 obj <<
+/D [1434 0 R /XYZ 70.866 524.596 null]
+>> endobj
+1373 0 obj <<
+/D [1434 0 R /XYZ 70.866 452.733 null]
+>> endobj
+410 0 obj <<
+/D [1434 0 R /XYZ 70.866 437.493 null]
+>> endobj
+1374 0 obj <<
+/D [1434 0 R /XYZ 70.866 365.631 null]
+>> endobj
+414 0 obj <<
+/D [1434 0 R /XYZ 70.866 350.39 null]
+>> endobj
+1433 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1458 0 obj <<
+/Length 2161
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[ÛnÛF}÷Wð‘ªíÞ/},Ò(´MŒö!)Fbl¢åRTÓôë;C.)Þ$“m /Öm93{fçìá,Mƒ»€?Þ|{óík'KœÖ"¸ýJ¬ÖqœhÜn‚¡°‹?n
+„’D2×ß¾ÝmñbÉ _íÖ‡mœæQžìR|óÃíÍ_7 ÆÒ€Õ6­%–Ë`½½ùð 6ðÛO%ÂÙàK1rH%ˆ’èã!xóë õqR¾Å5£2`œ8ÆT3nÍ­WÄ-–ŒR¾ÿš®&¼ÏL…»4ù÷é° oŸ£œFû4X
+J$å¥éׇt&ömþõÛ×R50ešk‚%‡p* |ä\µ® >,•Òáß &ÿ—ÝyߣðÕêÏíãzõ‘RqØßwíàˆTÑ“6ÂdÙZ°p•·®…µ`qóbÎŒB¯2ŽÞpxgv’8[yØ­Á3kG´d0sÊ$¾!N±øeäX…Iœõa0c`x. b"¸Ì¾)kÂ\%i.xùñîa÷)zXåÉf'Gp=—8ñó8 
+ò]cµÚFû|2;d–(Å—AÌj¢%†•§›juÉgGÌh"Ç Ææ@Œ)Ù8Ħ®1\bÝ5¶Jwêü%ù³
+Æ+
+i´¼1
+‹ÙISY/8 ÿ¨DIʵç!ÿ2C(’^€ÀpÀu>?MN%m§1ÃÉ ­‰ãl6®”¢Ã•];RÌAŽp§cé…Ɇ5“µ’ÑûŸ"Gix‹q¨§6–L©Pué6Sž){f‰a“´ýe¬(.p17+²ËXq’ž¸žÝL5g ÑT?/+>Ë­–T LõÿŠOoRçÛ K¡¡^j”­û„ùŽÅ«8’‡x‘s Ÿöë,yì5-:Q§’èÊÞí}¼÷šÏu¿¢øeþûþp#‚†»¬ülbìè$é]ùMóF» (2fšÔOÐ'Èý«ŠŸ`¯ƒt®/ÓŸ±k8¨1„Å-ëÅÝêH1æ€áE 5#ÀPg:RœhW·£8¤O°©êÎU£9Ä1¼´Ä„/W,·¨±@´šÃ©´v¹¶SL1¶QŠ„4(½ÙŒØ£Liu§‚`œÔÌLs½àoݨåoü v¬–“©F2}`¸¢ÄQ>0Ž·©EI7~XEœÖ(ùf :‡Lá.‹®å; vãÚÑåÕþÕ ¨iìï}b¸¼°šúXѬ¤Úˈ_°¢ È; îÙ†m Úìþ:Ô•D PÆÙÖ0HI§jq¬˜­ä¬h'±£KÕÊm!ωÐŒ)¥tÜ©
+Úl}¡Ûv“V.w¬íu¿;dkOõAä >=¾
+·':÷ŠÃ‚Óü‚
+‰¹?<>baIæd}Z(µd †­ø¶”1•RÜòðlÆØi)»RPXh
+àSí=¯»ŽñÌNvÛ´ ˆz–À¥&ðl~B:i Õïfñª-êÛ¶×J;õ;‚‚Íâس[ÖvìO%Îj6oxŒdÓc$›%ÙìyÉæ,±RÍ‹ Œ(¡N¬ßAͦžÒlBÂͳ¸4m-‡T»æ´Í,ÚŠ“uñ¢MPA¤±Wm×Ù(wtØ ä<¢­ël„f»ÐëàNÞt:—d›_/9hnO¯Jðu6|‚ @fæQlÜWýˆ1Ší2çÃinú-Ø&ÐÏX0†]—Çé6žxxçˆv c<©ªGwÞÅù!ùt…{|¶ÄÂÖäEà®k‰×hù}\½9¾¿ßüûK«+ë«ê]…$6ú°ßç;‹e7>Ûya×e_’}\aB€ÈÚ|öß瑈Cîë’¯$¦×°ëÝöèÐÍ€¢-‡¥›V¼…Ì]
+)±xê¢d?ˆ@µ4Ó=H†
+ŽjlÕNl‹h5^D3Aݳ©hÙTÑbŒŠfÒµ6ƒŠFSRSÑSÝöUô{Ý
+ü¼ŠžÃ«WÑ-¯Oªè9{ÝrÜx¶§­RA-:>Ë„9Ç'*;Æ“e~ÁSå'º®æøDÕ~Ž®«ÀN“šÜè¤;Q<JxØV@{_^[ÂÐÕ¢S"ç$¼˜,á0…}a f2n®R×Ù(£°ˆ˜GÂ3HÒ#$ü…^µ]Óé\~z|ýä€ cäu ¾ÊF™`<¸`n Ïà~]FKøËœ§¹é{´„Ÿ@/`áÊÞùd oô,)C,Ÿòõ_špƒâ Ù@sÀ&Œ­íÑü1Nã,ª…gU2¿/Hkÿåûø±|Ã…¥LUŠò;Ê¿º:ÍæÇÓì7o~{[¾ûù1NßþRïœËË–Ï_)bÜÀ‰+l¤èº;óîæÉÖ—ù›äS†ŠžÑðkã6ákõÿ…¶þzW ˆÛÜ°bþÒÕ[ä
+endstream
+endobj
+1457 0 obj <<
+/Type /Page
+/Contents 1458 0 R
+/Resources 1456 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+/Annots [ 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R ]
+>> endobj
+1438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 704.801 170.794 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga90f0e4bf417a06cff2a4f895daa4ff37) >>
+>> endobj
+1439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.28 704.801 203.189 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 691.742 177.895 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga84b2ebeef737395dddd8ef446c071760) >>
+>> endobj
+1441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.381 691.742 210.29 702.324]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 678.79 235.422 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5) >>
+>> endobj
+1443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.908 678.79 267.817 689.372]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 665.839 230.222 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3) >>
+>> endobj
+1445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.708 665.839 262.617 676.421]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 652.887 266.051 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) >>
+>> endobj
+1447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.537 652.887 298.446 663.47]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.943 639.936 235.35 650.518]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) >>
+>> endobj
+1449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.149 639.936 268.058 650.518]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 615.029 229.837 625.612]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) >>
+>> endobj
+1451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.323 615.029 262.232 625.612]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.016 602.078 205.795 612.66]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga6a08af1c559012315e7e5be69f7fe608) >>
+>> endobj
+1453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.666 602.078 239.575 612.66]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.489 577.171 199.208 587.753]
+/Subtype /Link
+/A << /S /GoTo /D (group__SYNCHRONIZATION_ga2ead7ca8fe9886581c216ca8006ae3c9) >>
+>> endobj
+1455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.694 577.171 231.603 587.753]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1459 0 obj <<
+/D [1457 0 R /XYZ 70.866 789.024 null]
+>> endobj
+967 0 obj <<
+/D [1457 0 R /XYZ 70.866 771.024 null]
+>> endobj
+418 0 obj <<
+/D [1457 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1460 0 obj <<
+/D [1457 0 R /XYZ 70.866 723.517 null]
+>> endobj
+422 0 obj <<
+/D [1457 0 R /XYZ 70.866 562.927 null]
+>> endobj
+426 0 obj <<
+/D [1457 0 R /XYZ 70.866 503.411 null]
+>> endobj
+1461 0 obj <<
+/D [1457 0 R /XYZ 70.866 478.557 null]
+>> endobj
+430 0 obj <<
+/D [1457 0 R /XYZ 70.866 478.557 null]
+>> endobj
+1462 0 obj <<
+/D [1457 0 R /XYZ 70.866 445.95 null]
+>> endobj
+1463 0 obj <<
+/D [1457 0 R /XYZ 70.866 361.791 null]
+>> endobj
+434 0 obj <<
+/D [1457 0 R /XYZ 70.866 346.55 null]
+>> endobj
+1464 0 obj <<
+/D [1457 0 R /XYZ 70.866 315.633 null]
+>> endobj
+1465 0 obj <<
+/D [1457 0 R /XYZ 70.866 180.44 null]
+>> endobj
+438 0 obj <<
+/D [1457 0 R /XYZ 70.866 165.2 null]
+>> endobj
+1466 0 obj <<
+/D [1457 0 R /XYZ 70.866 134.282 null]
+>> endobj
+1456 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1473 0 obj <<
+/Length 2831
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[Ýoã6Ï_!ôÉ–ßûx×nb‹öºÁÝC[,[ÙkKYKî6û×ßðCŠh1Š-©ÁÝ‹%[ÔÌp†œùýH'œüpõ›«oÞh–¤HKÉ’›»Da”J™(M‘$ÉÍ6ùm%^_S•®Þ=–›5Á«ûÚâUU_²¦¨Êõ7?&œ3$©ö¦Í¯Wßß\}º"ð#NH':MQJy²Ù_ýöN¶ðìÇ#¦Óä³m¹O¸
+aBùèù!cÞÙù§÷ï7õñá¡òQCäÆf0¶O6ØÁ(L#ÑMMDÇbp6ô\l‡S˜˜%RH¤¸›{0ïu7ñz(C˜‘‹%D&'¡)êDµ±wl"fs8ôu ¥<EDð@) €ˆNIZH'ä.D ÓÌ3†z!-R˜ÌKèÕi¥½]¾¡f
+l 8IýÌ˵íaò•ÍûÆ7S‰†fTÚfq&Ûv0¦™kDT?‡*H¢m¹íkßèÄAH‰´mc`èª9”‚EÆÕ
+QŽ»¢lÙ†â®vÕm¶ZÇX
+IajÐ…ŒÄH´ÆÍåÛ`*>•Z›cU-Ì$P-Rp%…+E¸M ¿˜”‘²}nF!«xŒ‹<}«ö’‚#‰¯öi-"IgÄöVBúÆ€hFd@kWM‚áÀñ1 1¢I®ºÁË\)D1ª6„#€†¨&¡Öº:Ú"dO•¨(ïL15u
+Þ¾ƒh¡°ƒ”t‚ÃðÀ4NÇE¼âY2|ˆ1G
+«™!ÆPr8C:Ö¼?ýß7ÑÒÚFzšöx¤ûÊûø²Ø¢‘P^lÁ0 Bàt^(/—1ô„—%”´PÁ:âŸÕþa—[$­‰GÒps
+t×dUº'wÁ5s—'¬k¾…€”jì°®yäk¥À+@±,¥€,- „G-Rtß:¸o”•»G'çÖ¶Év»V›…‡OVccŒéL'
+l@Z?aÂ{*Á„C“®{sm»À‰PœØSyÝT€§¡¿¦Oœ¯~6”¢Ï`<dþ\ìv7Ýí­Ï4-ê/Ê!ìíx͉[M“rÛ¶ia¹ñŒ»;ä»<«óº“²wÐþf#|
+êfúuP·8u ˆWrê¾TÂê6¢¨RçÀî%´zØhÅÝK(õ¸;PzÈ·G[0ÿß
+ëÐ/s0¡jæDóB "”> Ôܸç"€–Ç<Ç` @k xŽÁ0¦B…¦m‰6Q§(Hx‘iËtTŸLÛðzd`R‚ž†ÜyãÒ­9EÌaäb’Á¸‚4£^™eð
+J{ñ«œ~,‹Oǧ™íl´ß¶Y“µ [Î?ò‘api†䀔ÓyKd<Ë;¹©^ÚW¯7EYÔ÷†5Qç?sÛ^áŽršÇ™»;;–4™_=u\L0awIb4Oc$•~*Ö#$bèR!» ={³Yw¬oKîLìºPᬭÛÞe¾ñ±¶1м(Oz¾©‡¼~¨Ê­é%k¢+œܵîmHõ7YP°¡"ΧvTIò:ÔNžM혀«˜Áì.0BìŒ$yÖvÊ:=­ëëeu ¨ô¤®¯ÒO¤È^ŠR–ЪÁ~Í­f”¬>gE3Î&MÏÕ™tò,Ø.Ï¢“êÅýΖpÙNQ¸fí\w’qƒÝŠu`Ü* (A§KÌV€Ö*ÃÙ:B$5¼I–˜>CŠÆáô™K#å¹4òr ^"œ¼2‹d†xÍÜ«š'ÃaQ5,µWŠШ³öª&ª"Ñ@ëR,òr‡á!vœÏ ñ,>ÄX~Xh¯ŠACvÉ^ÕDíñH•_È"/·f!gî[Í“áÂJµ‰_†FR­Q{zíE9Qs4¤}ůÇ"/ïÁ „F|Ö0˜ ãYI¥À†42p`„Fö NÖî’ù½ w¤­wüM=F%‘¯C¦ÔÙdŠB'ˆJg°©K%ŒÐ)
+`Zù>ƒO-¡Õª@«Á^G;džgTP’ËxÑ© ŽeãZH‡Õ+A:ÞWïçÉp…(…_hc€¤@õ9ÕF«B õ2H7Rü/·pÁø¼â?AƳYß8Ì2ë¨ï{'À#K|ÌpOÚN¦»™î‘5>³²Ù1T³hˆµ?”Â[uWs¤dÀ®ÝÁ™¹ËÝÑ»0wû|o–=úGÖÊrMVfa’;.éÜÜWÇ÷®Ù6ÈݺŸýjW=áêÖcr«Ã6÷çAÚ—6Uyí– %‡êpÕО҆.<•ÂÛÜÀŠGó‘o{æOJ©9QSìZ¨b «Ö6l«à>[³îý²jÂ3.e¾Éë:óÝ0ùmr‘•ìïZ°„TЯ±©¯±ÑÅ fkÅM^Úß|¹6b˜´V’âìdÉç4a$
+°Ÿö©Œ‘6âL° åä©]£Ý}ɨàeJÙ4žø„A¡aZÖ8ÒÌQ‹<tˆöEÖÈ—è‹„N>èKË1#©NbýÒTeÆCŠ,0Xs)I`ŸÙÕ~n°JÁ^¨`¨œï9HE M–ì*¥i¼Äèc) Ž¾ÿ]¥Ø‚€PPö.ùïqûi@†
+ o€Áàåy™²¦å'-#øÏš‰Ž´¼ËüÒóWLD{hý[L¿e~AîÎþ»Úó˜·oÿý“»û¨×O¿tž5ëD,u©N
+endstream
+endobj
+1472 0 obj <<
+/Type /Page
+/Contents 1473 0 R
+/Resources 1471 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+>> endobj
+1474 0 obj <<
+/D [1472 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1468 0 obj <<
+/D [1472 0 R /XYZ 70.866 687.528 null]
+>> endobj
+442 0 obj <<
+/D [1472 0 R /XYZ 70.866 672.287 null]
+>> endobj
+1475 0 obj <<
+/D [1472 0 R /XYZ 70.866 641.369 null]
+>> endobj
+1470 0 obj <<
+/D [1472 0 R /XYZ 70.866 545.255 null]
+>> endobj
+446 0 obj <<
+/D [1472 0 R /XYZ 70.866 530.014 null]
+>> endobj
+1476 0 obj <<
+/D [1472 0 R /XYZ 70.866 499.096 null]
+>> endobj
+976 0 obj <<
+/D [1472 0 R /XYZ 70.866 390.628 null]
+>> endobj
+450 0 obj <<
+/D [1472 0 R /XYZ 70.866 375.387 null]
+>> endobj
+1477 0 obj <<
+/D [1472 0 R /XYZ 70.866 344.47 null]
+>> endobj
+1467 0 obj <<
+/D [1472 0 R /XYZ 70.866 247.956 null]
+>> endobj
+454 0 obj <<
+/D [1472 0 R /XYZ 70.866 232.716 null]
+>> endobj
+1478 0 obj <<
+/D [1472 0 R /XYZ 70.866 201.857 null]
+>> endobj
+1469 0 obj <<
+/D [1472 0 R /XYZ 70.866 121.987 null]
+>> endobj
+458 0 obj <<
+/D [1472 0 R /XYZ 70.866 107.48 null]
+>> endobj
+1471 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1481 0 obj <<
+/Length 2136
+/Filter /FlateDecode
+>>
+stream
+xÚå[KoÛF¾ûWðHñvßÜZ¤-P$hší! Z¢"¥TÜô×w–\J|¬èð\r±dk9¯ïÛÙ™~¿úåæê§ß 42R²àæ>Pi)e(’$¸ÙïBŽWnþ˜àˆÏ•}µß·ñêš*¾Ø¯»8-¢"Ù§vñÕ¯7WŸ¯¬Å9ÉÔiʃõîêÝlà³?Œ˜ÑÁc¹rpÁàVÇ6x{õ×vvž^ö­}qÖÌæKƒ´
+”äHÂßKC_¯(£,ÚÅEœ­ óÒžh¯Šî§^¿„AŒ=á—Dƈ“_ Ë K(®QfH¬&ÈáDTT¸@Â(bB(0R`XÂí~ÝG•p„ÐSÕrÑÔ
+¸SCÚZóý1[;†¹Êß’ô~Åp¸ÏàWî.ÐNP…¤¤ ìÃÃ!özÂsD8€‡ $gŒâd2 Û™V¡~Øîï¢ím‘lpž¦Ýs_y…lñ1‹£Mõ>]ww°k/c;Ú¨>0 B‹xÜY2º”"®è\t9R
+À¢a
+9÷ÕÕi'kÀA'ŸZÝÂ@ö ò)÷mllj
+ðR4ÁÍé(©Ð†y²+T’Ö•i!lÅn'f|!¼¦Tq‚OåMæõFq Ø"Î@î´…S×—òþÕŸò$6O–•G-AXí°Ôªm¡½0¸DX)ž8-lÓc “Ö6ѶmAżö¡z ]„ƒÌ@•J:L£]ìßBT|Cs^ÔhÁûU&"¬µý“ÕVõ<DŠ@.„ ‚0–ßiJËlÒY=ò<Õe ×`4ÖËLi¹fpŠo˜ÒNTë½(ii]jJ;ÞÀ>< ãywóód8ˆ¥BZðeæ´„rN¾}N;Q»é¾òisÚñFõ‘RÌ»‡Ÿ'á Õ¬Àd™9-¦ì¾GÎi'ÚàÇØcÂwŸÓŽw¨-ˆ`Ã"žæÇ,ŽŽ7®™Órã#ç´-ð³£iÁ÷šÓŽw ¤½¢àó¾²3O†cÃpV²E洜ٻƒcÚ‰ÊýDh(_zJ;ÞÎ>V B˜y_›'Ãáe9b]`JËm}Låˆ)í4å~¸›Êà)íèöY¨žY·Ì’Q1“™ª][dJËì÷*ˆúÆ)íDÕ^b¶4¿)íxz 2›ÆÙ¼t‚Œ‘SZ{%¢ê1ëÔ)-ûq§´7µi™í¨žµ–usœåçDätóxã3¹?Ü]o#X\½LŠ¨ú´FÙCùõüöd—˜ìr¥¦Lv®côƒtÌ¿Ôÿª
+Šçf!]ÿ“…eÆ¿_ªéDÚ ñÿ÷_,
+endstream
+endobj
+1480 0 obj <<
+/Type /Page
+/Contents 1481 0 R
+/Resources 1479 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1420 0 R
+>> endobj
+1482 0 obj <<
+/D [1480 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1483 0 obj <<
+/D [1480 0 R /XYZ 70.866 771.488 null]
+>> endobj
+975 0 obj <<
+/D [1480 0 R /XYZ 70.866 562.572 null]
+>> endobj
+462 0 obj <<
+/D [1480 0 R /XYZ 70.866 547.331 null]
+>> endobj
+1484 0 obj <<
+/D [1480 0 R /XYZ 70.866 504.517 null]
+>> endobj
+1479 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F170 1055 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1507 0 obj <<
+/Length 1833
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKoÛF¾ëWðHÑfßÜZ¸$hší! ™ZËDeJ•è´î¯ï,¹¤IŠ’H‰  Ñär^ûÍ7³#á`ààõèçéèåµaFFJLo…‘–2P†"I‚é"ø
+DðxB•§w[;_ä×›müuLq8Om~c1OçùÕîa³Yoá‡éøËôMÀ9CB1P™ äÄÝý2ý5"p¤Ô«5Ò”ÑýèÓ,àÙ›
+‘Hi€~¤ÀƒLÀgJEíÝàÓD®ˆp/ü3ÜíÒGùC¶Š2ÎfÞo¢Y´ÞŒ7Î!ÆÙËÎé†`÷Êg,ðA¡!($¡MÒY=(
+DZ9¸=ºe-HÒˆÐþ@jBÞ Âe3Ì-v7"o
+8KîqÅ.&(ª;Ô,»c£½¤¢úrœP Y¥è™DÅÉ ¢ÂŒ ITœ<Õ±°t¡Ž+„uTX4ÉúY¨ñ (¡­Óš| ÌIí¢¬0–²ò†ºÚÚåÙfÖ®l²Lï2•Ð+Ÿ`¾ôqcöödå)Æ{Vþ¶ö:r}*ÄU©þ`•rNth‘¤F‚š¾mL#Æ„+$µèF­a>!a¥jˆ-.‘¤%‡N@„u«Á?0/€¢‚jBzñî·êÒ›{§áÁÕðþaXäwØBèñ)ïÕbí1{[ü¥Ì&ççÎw¡—Ëc§8<và#Ï»€×Ài›ò36àÿ¨6õø\mB ¤‰£)ÆQ1sc=Dü`ïʦóxeýhïÊî¢m¼q³·F;\3».IarÓ;»óƒÎÛrrW›vr7íÌîCµ8y¹~ð÷扟›¦µjcêVRQÏñ¾Ë´˜eŽ¹KT;¯×ÑÃ=œæ{~·)9†\IÙ´ª¼à‡JœF²­ÿ¯ëªáá`æp®N rYÍ“ýy3Ñ9B9N^Ðcg8šrÚ\Ε+gFíÆ0N¤µð4%f%ùE†¤‰é™Zõ?nJ s½„îQh#&™—Ly8èü­÷7<Ëѽ.àî?Wù#&%¾#H4GþCq<CîÉ]–=maºÝ¹³]fØÍÿ‹wE"YïXSe(n²„QzïZ¨ÎE—€Üx2CòžX®³‡È1[veYIœ¥Pn™·i'ÞpŠ/KÖ·O®¬l9ÿ3¢»Ãù]K=7>‘õÔ£Ï&õÓˆb2Dê9Q“Jêí«¥œÄtµ+$ ­«ýj£.ùÎaU¯íè˜ïüqåv¢CÛ.h ¨&\†eþÔ•žd
+M!²Î8?m·c‚ÃyV`OòÉu|‰¡{jµz‘ˆÿ¦4Þ.Ú§Ã%·û›â‚.æûÚ•uv®1òüärH)u?_¾ ÆOºÆOìÙð•Ì9>
+±®utKx‰Ô½üªuÁCVn¸!g%/ÚiÃÏH
+jÌ7M
+þl’‚h(Æ ‘NT%'Ú*6†æ˜¡“b†æUC×ë¥U† â0‹Vºê×éÂJL>q¬ñÀRX?Z°êZY)þ¦$"Ž‘Èô×Ðj2Dþ%)hÆœ—×—å?íÍEnêßߟJG‰¼,HÑñd[Âla¿SUäÐ4ëKª"FœhÑÐXt´nÛú ç5íó“¾âg‰Ð®(É+?ÝãîTîç]¯mb·óÔz2(üøÃYUÜüh7ùeþQx÷
+ÓWLú}s?e,6ñíÛßßåW¿nlòî}‰C‰Œb:ð‚öÌ´¹jV h·J~xHÒøÞGïm|³;ô”Ttã,ð×WkÇQÿ<.³6iFø?Ubá_
+endstream
+endobj
+1506 0 obj <<
+/Type /Page
+/Contents 1507 0 R
+/Resources 1505 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R ]
+>> endobj
+1485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.13 704.902 196.985 715.484]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.112 704.902 229.021 715.484]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.094 680.204 239.578 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) >>
+>> endobj
+1488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.668 680.204 272.577 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.215 680.204 386.56 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) >>
+>> endobj
+1490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.904 680.204 455.732 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) >>
+>> endobj
+1491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.559 680.204 525.406 690.787]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) >>
+>> endobj
+1492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.591 655.507 250.089 666.089]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab4aa3dff2b1b55b1abb002ef69c7efe7) >>
+>> endobj
+1493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.889 655.507 284.798 666.089]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.938 630.809 258.135 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaec6e88892a1b0b62287df5173a7f0336) >>
+>> endobj
+1495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.07 630.809 290.979 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.919 630.809 422.977 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) >>
+>> endobj
+1497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.971 630.809 510.512 641.391]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) >>
+>> endobj
+1498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.777 618.854 172.336 629.436]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) >>
+>> endobj
+1499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 592.419 204.176 602.894]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) >>
+>> endobj
+1500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 579.677 197.205 590.151]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) >>
+>> endobj
+1501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 566.934 208.659 577.409]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) >>
+>> endobj
+1502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 554.192 222.889 564.666]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) >>
+>> endobj
+1503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.358 541.449 215.917 551.924]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) >>
+>> endobj
+1504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.832 528.707 227.372 539.181]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) >>
+>> endobj
+1508 0 obj <<
+/D [1506 0 R /XYZ 70.866 789.024 null]
+>> endobj
+966 0 obj <<
+/D [1506 0 R /XYZ 70.866 771.024 null]
+>> endobj
+466 0 obj <<
+/D [1506 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1509 0 obj <<
+/D [1506 0 R /XYZ 70.866 723.517 null]
+>> endobj
+470 0 obj <<
+/D [1506 0 R /XYZ 70.866 514.659 null]
+>> endobj
+474 0 obj <<
+/D [1506 0 R /XYZ 70.866 455.34 null]
+>> endobj
+1510 0 obj <<
+/D [1506 0 R /XYZ 70.866 428.312 null]
+>> endobj
+478 0 obj <<
+/D [1506 0 R /XYZ 70.866 428.312 null]
+>> endobj
+1511 0 obj <<
+/D [1506 0 R /XYZ 70.866 368.782 null]
+>> endobj
+482 0 obj <<
+/D [1506 0 R /XYZ 70.866 353.738 null]
+>> endobj
+1512 0 obj <<
+/D [1506 0 R /XYZ 70.866 293.831 null]
+>> endobj
+486 0 obj <<
+/D [1506 0 R /XYZ 70.866 278.788 null]
+>> endobj
+1513 0 obj <<
+/D [1506 0 R /XYZ 70.866 218.88 null]
+>> endobj
+490 0 obj <<
+/D [1506 0 R /XYZ 70.866 203.837 null]
+>> endobj
+1514 0 obj <<
+/D [1506 0 R /XYZ 70.866 143.93 null]
+>> endobj
+494 0 obj <<
+/D [1506 0 R /XYZ 70.866 128.886 null]
+>> endobj
+1515 0 obj <<
+/D [1506 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1505 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1525 0 obj <<
+/Length 3631
+/Filter /FlateDecode
+>>
+stream
+xÚµ]sã¶ñÝ¿BRçŒàäuò6½´™Ë$M<íC’ñÐms*‹ªDÝõú뻋$!Y݇;R °»Øo,Ötö4£³ïnþtwóÕ‡\Ì2’k-fw3CI¦õÌäœh6»[Í~K¾øýîû™P’H&`ý¡^Öåâ–›lþm½<¼”›¦hªzƒ“oþrwóïs錵0³Œd\Ζ/7¿þNg+øöýŒ‘g³ÏvæËL*A”DëÙ/7¿¡žNJ¸ÂW|xª• ²5#4ЭƒD/n¥tÞ|Ù–«ò(æÙüÓ‚Ëy]­~£Š"ÁÀ3Ë×.0 [ýRá& 
+Óý¤½l—ã­3“Ãa0÷ÄÖмÝwb‡ h’t°ÅUSïHsM¸x¤9¼óÒOåØÆu 
+ ì7¯±P’¼ãó;'›}õßÅm6/ÇãJ£VNßW9ý]5¸'‹2(ÝW¤ŠÖÜ2Ð_)äì–K¢Uæ–ý´P8°iÊÝâVÈ|ÞÔð„±æ¹tÅn·`t^,qßVå¾éLÍK” ÷xØ,Ñ~ÈâV©|~Öëøn߸•Å‚ÍwOÖØÜ@µ÷hŸKÏ_ ¬“×’dy8Ü<Ã|;­·5š,[ËÞÆÛù¥\Ö›•GÞaöíð·wxyKêGë/nyÎH.90žJ;àn ÷(×%BÝ/€Ä.¥°Æ ¾Â®ù¶Dl*ë]ì’¢qÏuµñ.ˆ ®Ý[ý螸&8(0Î…
+Dxߤœ#Jè„3ªHÙOZ×Ëw)O
+M;ˆ
+9vo¢_ö&\âB€p ÌZðÔxCÚîà©©Vé-ä`Y˜vÜM T ù&ûfˆÁ>šÔ$Q`ž¶åµàK‚4 "¾Ž´BŠ˜g¦Oše
+ø·ÒþŸä"§DªÖ#Ÿˆ ¨1ò2å;ºo Fço±mH‰0«_M‘Þ,$-ùh³G².Ø°Pe gä!ƒ;*óÉç§òÎÎÒ‹!?o%Ÿ®¥“êA20B ÐB¥ØI2Î 3(³CŒYÈ1I¢?å¿dUUã*Úú®Fm:ïÓvÊñέªUÕñ_šæCt!;ºA.| ⃠×!ïå(vÅK‰©Äž}Væðkê´¤iF(ìòäiIC6 QþM``r¬f*Wp8)L˜íT·§j4æ<¸q¡
+èNv-Ú^ZËà4 Ihë¾>ì–>-
+Š.©¬6˜•b>ÎÕüåÈaVA¥5¿‚À‘x„á|’ˆ§Áð"Î ïÐf¢ˆ!è È8TIÉ.•8!ãëð¦eÜC»®Šµ“jó¼+‹•{N*Çåz1Qc™
+ hͦ‰{ /n©!ÆM–wêl¡„¹'pÌ Oü:üi‰ÇèŸËõ6ü±+¾DÂ^kïë»øído ¯6O‘šW…‹70–#€§OW¯ëÂ$^°ö
+¹úÄx§18¾(>@äƒÔúˆ\‡8­1^<a^Œp,SyÛòiUXϾ.ßcéQÎÙ×{w¨ú¹ÐÿG÷ƒ~½©}Õp<ç„Z\¼¥±HðNƒx]-.‡1fm€E5œ­¼C½¿ÇŠÝ}0–­ç«c2VÑ$ð·zÙ†-üf.ÒÚ茭ÕËÒ}km¿·Sp™wÜøýaW«eenü°)Ëømû)ÍO¼\‡}ÙÖ’£ƒu±ß×Ë
+&"t&矫æÙ½!%
+߃;fî¶Á}¯ –êm…,•Ït…{æ³7²7ÖŠ?pï°\ fu6VØó¼ûö\Ö~ÁsÂjGÙHÜ”­H–,"ôd†Y–E­±/òD”ÇW;V‚­Æ¬´'Mûâxgæ oõLÌíÍŒö†SÝ͈>N™ ”@Íœç=¿ È{·`2ž8?Ðå`ŒÂ¡ ©˜¦ÜvÌJ3ʃÈ<á±¹êpaU"S4ÜpHì«u“¼8rwhYŒÞÁûoËe…—Cá켓y¨p×8àn·`:ú;‚ŠŠÏMjüÙ^3Tÿ¶q“›€0¨'¾ãÀ÷ÏÏ¥ŸZ¸ã~Ì~u~Ì.¨<eÛ]¹WLRÞí¯6¬@‹ÀªÞQ¾óõ) *»']~þîföë­àâÕ8·p :‹(*äÆÂ?àŸ]l/­Wqê¢æÐï/nÐÞ“ÚUA¤XjµŸœwÁ€‚¿ðþÑ^ýÙ Âw KîÞ¯v ·³Vþí©Ü”‚/Œ…’`Y{jŒ³‚Οe‘ÅeCbq(F2ÍpêìqÂ~xì/íiµM_§HË¿_&£Á]ªêL"áýÄ¢øþ'}I G±ö’ØÇ
+Ñߪ Y›ýqhåÞZ¥BzæáòVÇð—Mhð%úRp±~Ù`vtÛ¥ p{åú>ÞVf±Ñ²€qT´£/Řý^m±HG¹þÌm.ŒÃðÛ«8ûÃuöÏÎÆu2.˜ïmW¬×>û)Ad†Ú5
+Y´þ몎dÖåõø­Úì›b³,½
+rCÔ|(yS/Ä]x‚ŸkÌtÞÑU,›CáiE’‘•¢áHa©Å§¯¬Ù¼Ñu0‰¹Í†dÇkûÃáÃi…XW{?Ï*<½¯Ý»i“o rªMQp^¹ ce•±²"¶Ðïð´ù‡ÀchÙ  4IŠD±xtˆÜÂA-¸:ðrÓ0J\ zgå^«·;yï†}\Ù
+zµäâRdڦ
+ösk7æ\ìé} * Ïå% œ~}O.ñÒÊé|P’ˆïzeà6BÆ~£Ñ[¸«_®ï@Ô¹<Ùx¿Ü¶ÛPª!Ë㽈½FAÁI¦U¯Q'rPX„‰aØM˜‘̈Ž2™_ÓMÄ1Ê.†êø’˜AQëÉfB%‰òM*/{HžÄ„ãF=TrjÞ‚N5ÉrÓ£`Y,2Ç•k2=ÒÃ(É”>«‡QžÓÃHÏèaÔÄtmOÉ pj`6oÂ8¸ƒÔ=ÖœnjwéOž‰ö?E WR7hÿˈ¤¢¯:Ç'Án»ê©–?ËR#«v«§Zï:‰oÖ” G\fo!0)ÉEÖgIºWSv½šçµLršŸË¿ž®‡IÙY«Îhu@@[cèS I æÌÖ1)s¢€¹¶u,8ñÿ{ëx¥0­ul wÉ°ûS¿Mç¤u„†.€“c×aMÞAö¾UãØÅôecKOÓz¦Áðò¥¹ýŸ‰=ŠH…­è^Dì¿ïOv]‰=-è1òëºÇ.'j,
+ôÑiÝcÓ`8éæì'7h8 ¡¬`¥ìÖq©^‡5-Ôé™}CƒòåÑþ¶ î‹©I
+ (5­[l'ë 2­<Ÿ*ëŒP–Ï2QUõŽÊû:ÌIy'÷dÓ~1¹#i„i¿
+endstream
+endobj
+1524 0 obj <<
+/Type /Page
+/Contents 1525 0 R
+/Resources 1523 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1521 0 R 1522 0 R ]
+>> endobj
+1521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.468 425.776 193.322 436.358]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.65 413.82 416.505 424.403]
+/Subtype /Link
+/A << /S /GoTo /D (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) >>
+>> endobj
+1526 0 obj <<
+/D [1524 0 R /XYZ 70.866 789.024 null]
+>> endobj
+498 0 obj <<
+/D [1524 0 R /XYZ 70.866 771.024 null]
+>> endobj
+502 0 obj <<
+/D [1524 0 R /XYZ 70.866 689.695 null]
+>> endobj
+1517 0 obj <<
+/D [1524 0 R /XYZ 70.866 664.733 null]
+>> endobj
+506 0 obj <<
+/D [1524 0 R /XYZ 70.866 664.733 null]
+>> endobj
+1527 0 obj <<
+/D [1524 0 R /XYZ 70.866 620.23 null]
+>> endobj
+1519 0 obj <<
+/D [1524 0 R /XYZ 70.866 191.927 null]
+>> endobj
+510 0 obj <<
+/D [1524 0 R /XYZ 70.866 176.687 null]
+>> endobj
+1528 0 obj <<
+/D [1524 0 R /XYZ 70.866 145.769 null]
+>> endobj
+1523 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F97 715 0 R /F45 709 0 R /F158 920 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1531 0 obj <<
+/Length 1859
+/Filter /FlateDecode
+>>
+stream
+xÚÅZ[¯ÚF~çWø¤°Ùû%/U«4‘¢DMÔ>¤Ñç«`(˜œ¤¿¾³ƒ×€1I_bvýÍx¾ÙÙÙ/ÆÉ}‚“—ƒ_&ƒ§/ K42R²dò9Qi)e(’$™Ì“C©ÒÃÉÃ&Îýýz“}Q<œ©ÿa>-¦þn»[¯W¸ÇÃbôqò*áœ!¡˜t€œÙ_¿Nÿ üˆ²·«5Ò”'³åàÃGœÌaìU‚3:yt3— 
+{k/á æ•W”i•(É‘„ßGïÒb·É·Î­c¼§/¸¨<M4âœ'c¸bÊüãëU–éÆ¿}±*41´Q‡(m ˆ °Ý§.4c¢
+â©hº` ÂFÜŠ RZÔ]ؤ÷ÙÖ¯ a¶>L ]–ˆlžæÅ]æ©ÄÀ<*Ý<‚
+Ó/za„t
+¶HÞ¿ØM@
+C¾²ÍÁc©r¤U¹#ôóº¸!.7£ÿ‡¸Á/7 I¹Rˆ+~•¸ÇIð©+B‹¸aˆ‡²çÎ3ↄúr «pre\×­^(n0FnáÅpò¤¤îÂ^ÜhX¦'AÍM,3Ûj˜ºå/é 2“ã6E…8’“‹ÁωpÊb䬠¢ >—è)0Ot²xBN„6ô”;›˜DL0z¡¦¢¸lj*mÈcƌ׋Ø9}E¨¦¾rÂw½Ÿ=¯ãÑ
+endstream
+endobj
+1530 0 obj <<
+/Type /Page
+/Contents 1531 0 R
+/Resources 1529 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+>> endobj
+1532 0 obj <<
+/D [1530 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1518 0 obj <<
+/D [1530 0 R /XYZ 70.866 699.483 null]
+>> endobj
+514 0 obj <<
+/D [1530 0 R /XYZ 70.866 684.242 null]
+>> endobj
+1533 0 obj <<
+/D [1530 0 R /XYZ 70.866 641.428 null]
+>> endobj
+1520 0 obj <<
+/D [1530 0 R /XYZ 70.866 508.252 null]
+>> endobj
+518 0 obj <<
+/D [1530 0 R /XYZ 70.866 493.011 null]
+>> endobj
+1534 0 obj <<
+/D [1530 0 R /XYZ 70.866 450.139 null]
+>> endobj
+1529 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1551 0 obj <<
+/Length 2049
+/Filter /FlateDecode
+>>
+stream
+xÚÅY[oÛÆ~÷¯ œ‡CÑvy' ô
+A ¢Iõ‡°îm‘È' µGm©&‡ +økV<-ùÏMqV¢ƒÈz2jØñÔ´³Ø$¾ÿOxjöŸÛë«Ë«0
+¯n¾§ÃØÄ¢ú«<K²öñ~y¦ÇF÷#÷MÝàz\]Ô.zu=¿üuîE¼a\mï럫¼LðñgˆÐˆöHà¢"œEá¢v]³8ª¶žâ
+àC À*“ÇË«¬.ý[ îÏVý+ÖòuqXŽK„ äÄwƒŽ#†ÎÑ‹JIîŠAóIüÞÞî0±ˆP[±$C°Y: Lw‚7RA"•o#t¿%ì@0—‡œèýÅõÝì0|
+E¼>¬³d-_³<WŽâU¬èU׬©Ê"Ås×ÑrfÎoÑÿÙÿ¹rF!¾‚°–oŒô=™¯8ñ9
+L€ýuz½ò]UƒR]<N,`öéâ8ħÎ3èZV_NT; V—Äz¢–Õ©u¾1!çwáí]ˆ• IJp¹ kp8l €<P«¾dÜ(·mµmEžšò쉄rÎå7;çød {µP0rbîð¾ì€­Íºñló]_Ì–3€;Œ¾‹.׺÷«ä²,*
+Š³o—QÇ'sUrÑ—}]Ÿ$wWM_‘‰Z½ùŠK¼#êzì5kã,çâM¾š¤Îªî2ï€)øÑ&®#s~¸ûA€#q#Þ›mU•2©`K Wu‰ÍÅ훣X/yö©ÜTÝ{=1¨Ž öõgxÇ}<µ,AbpÆåÿT¢åaÍ
+± ?ÕlYžÊ¥HOíZ ÝÐGª\ªQŠ'+bq"bbŽ ¸ÐS®²m8‚aà춒QDE Ë æÀPÖ…E¼\Û:íþtÒ!9`„Âõ´‚ZnWëA·{Õ¦ŽwûÄ›:ìñ†oÛÅ–ahÅ–l9/„ôûqžW¬¸¹í´\¡ÿ„U<8BS‹û1OMÉÓY1±LýïL\÷¢€²ï'6ÞÍdà9×<‹·™*ˆYÒÛ6ºåÜ À€ôètèÎSrŽ¢P£¢cÎ1cºÀZ‚ÄtÅï¤ÇÀgÅÈ;B˜â’À³|e”“
+x•Bt•ÄJ{‹RbõeÑ»y(æÌßÏ¿/®ÂpönÍ>ìI¿«•²{i€Ô@°²œ¸´„˜cúÕ½0¢E|D­ÀÒž9§3C:xpÇ'Ò\úòÐz³[b«ë÷اRV×_ǘðçÅìâõò ÒCÒX°ÓÙoÑàý8>ƒÓ@·LNGíqF¥öA+Ûy 2펬‰hBƒßq#¦?`ÐaS׊ϕˆH v„«m+Ðg1žfúeÿ…%d³/à\3ànÐq·Y—(ù¡ͱØ)È Þˆ^árCxžc0âÀ)IÛUJºÆj-¡eOVŠ¹Xtuw<rÝsY5nÙ9§ÕÏËB¼ú¹Ñ5~F1^aÌŠ•ÊÊo{Ó`—¨z'òou^<PPrý‡„Ý÷/¢ãß|Έê?NŽØ®Í‹78ûÂá F$rß²‚Õ`ÔJeß'8@6.™Ì¦%ŸÔpÄ›aýHÍ-W|Ý#z*õ^_¿¿¥GUôÐðÈwöãÂ`¤¶CLËTc㻫Ük¨•øöÂ:©¿Òý¬þåñìóŠ`Å.Äÿõ­…
+endstream
+endobj
+1550 0 obj <<
+/Type /Page
+/Contents 1551 0 R
+/Resources 1549 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R ]
+>> endobj
+1535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.694 704.765 172.516 715.347]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e) >>
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 632.2 246.236 642.782]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.498 617.624 311.673 627.251]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.106 617.624 390.481 627.251]
+/Subtype /Link
+/A << /S /GoTo /D (kmp__stats_8h_source) >>
+>> endobj
+1539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 604.448 274.65 615.03]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.178 589.872 354.926 599.499]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.587 576.696 209.795 587.278]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.654 536.989 221.322 547.571]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) >>
+>> endobj
+1543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.55 497.282 236.214 507.864]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) >>
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.85 457.575 262.377 468.157]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.98 430.947 434.25 440.67]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.604 417.867 256.154 428.45]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 378.16 223.829 388.742]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) >>
+>> endobj
+1548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.678 350.516 216.863 360.99]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) >>
+>> endobj
+1552 0 obj <<
+/D [1550 0 R /XYZ 70.866 789.024 null]
+>> endobj
+969 0 obj <<
+/D [1550 0 R /XYZ 70.866 771.024 null]
+>> endobj
+522 0 obj <<
+/D [1550 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1553 0 obj <<
+/D [1550 0 R /XYZ 70.866 723.426 null]
+>> endobj
+1554 0 obj <<
+/D [1550 0 R /XYZ 70.866 650.952 null]
+>> endobj
+526 0 obj <<
+/D [1550 0 R /XYZ 70.866 321.656 null]
+>> endobj
+1555 0 obj <<
+/D [1550 0 R /XYZ 500.469 267.124 null]
+>> endobj
+530 0 obj <<
+/D [1550 0 R /XYZ 70.866 249.956 null]
+>> endobj
+1549 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F170 1055 0 R /F11 908 0 R /F97 715 0 R /F158 920 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1574 0 obj <<
+/Length 2422
+/Filter /FlateDecode
+>>
+stream
+xÚÍZmsÚ:þž_á™~X˜ ºz·Ý;Cšå–´]Bº³Ó{‡qC˜‚ɵÍMûï÷èÅŽ††@Ë~ÁB–ÏstttôèHØ›zØ»:{3:ûímȼ
+l
+=»;Ö‹ˆB{ªC¡0%YéDÿlò3
+NÊä‚VR\,Wi‘dÊõê 7{Å Gap”^qâ#é¯yΫWjf(¿o꣈úáó;6Kã,Q!Nõ©šLe”ûí-¯OÐ $Œ˜°Ñ-4"ú¥»0äI<S.™˜ŠØXÍüQ8eÐ!µƒQa]!‡LämÊ[QÒ”xBZ¹+pýé
+…p¼ÉÇõ€L xõ¤OQè7Ê®-<@–Œâ:N£–
+‘Ôu\Bë KÑ6Z¥“²5°;ÊJÓljU^yŸuXOÇo? {Ý‹í,mtnÛ|$`¹iAaîIúlz
+6@÷.7 ÃD«›dI+'f$l}Q ù»)Ç %‰2舙™UEY¬ÊàSÛ"¶ïÁ(ѼބVB*Ã@»¯ch6oå¶+’h‘7 \DyQקìŸñrÝ?Û2K&«8©IQöqÞÓ¥2Ó£ú‰fÅZÓ(8ßä0€óJž]~DµaÍ ¤p¨6m¢Úþ.ªÍ=ûAÃé¶ÅžÁ´ipTÅ´Ià ~ên{[‰6C<àÑs©é,¦¦3ÖÓ¹‰<¬‰õnö «p}{V &G± õî`×6ÍÜ;dˆÁ7ÇÀ %‚9˜[¨·¢À¾ Ç@U˜sê neÞ,„¶áQ`9Pi:°Ç'Þ£Ù¤Qÿº™tÃ÷þQFM’Ò½gpîàù}‚ñ[“›hñ`BÝß:66­Ÿü[o¯¤›]èN&ùÚB쮵lªPÖ<"—¿ˆŽ .ÏCˆÔa2 ç!GŒÐãÐqú(ƒçÐñâ6Òq¶æû“ñ Ò­çhE¹ŸC²÷ïØƸ**²â‡É°¾(5ƒC}¢…A
+ÜR›§Ù½ÝA^Þì uìÉr¥ÙkI2ð‰¼"йŽe;ƒP4™¬E¥5®ßLïgnwœ½;¼9è ‡íñ_ cëîLå»ÕR¶ïî¬b|GØUƒe÷eŒ Ç0ñje»zc©´Ú0½xOÆù~{²gs`/HÒsÌ0çc$é•(Å͵J6 6
+¶ÑnÀMõܛŧBŸ|‡ wøËþÍhØs;êýMw8ì÷†§€¾öGý‹îàüg ’­°7ý÷Wƒ“Øúº 3í$¦õº×7§
+ªML]ªÛ ð/Ñ}Òõ¶Oú»Rz`ðD•ÙA żX$Q¾273À8,`š&ܦó$·Ÿ:‰]3³o`· BZÈÕú¬kïgñ}Sïâ(WÖdu‰8ùG[€2PC-ß¼ŠÌÃÜ 0åšzæĪÃYØiS÷‹YzMà'úfedu›c.«Ú¤uoËU237ÿ«l´ýÖÈ7¦´iÌç<“´&mõ²e
+4žbù( ûÜx./jKD}•­¬¥ŠaòÛ)r•¤IfAåHmõ?mžn+o’S Ì>1¦DØkL_3YæâéS.~0øtmou?$©Éƒ®±Qâ ä×/åbf[Õµˆ2Z¶‚WÏÊ£¦ÁìK¦ÒÊDßQ5å]U¾\ê ó}ª$麅ÿ;äñ
+endstream
+endobj
+1573 0 obj <<
+/Type /Page
+/Contents 1574 0 R
+/Resources 1572 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R ]
+>> endobj
+1566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.815 668.388 425.345 682.336]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.304 638.408 236.42 648.99]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) >>
+>> endobj
+1568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.304 451.089 235.424 461.564]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) >>
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.74 352.483 272.709 361.394]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) >>
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.368 181.291 294.897 191.765]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.266 181.291 382.461 191.765]
+/Subtype /Link
+/A << /S /GoTo /D (kmp__stats_8h_source) >>
+>> endobj
+1575 0 obj <<
+/D [1573 0 R /XYZ 70.866 789.024 null]
+>> endobj
+534 0 obj <<
+/D [1573 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1561 0 obj <<
+/D [1573 0 R /XYZ 70.866 753.828 null]
+>> endobj
+538 0 obj <<
+/D [1573 0 R /XYZ 70.866 753.828 null]
+>> endobj
+1576 0 obj <<
+/D [1573 0 R /XYZ 70.866 693.693 null]
+>> endobj
+1560 0 obj <<
+/D [1573 0 R /XYZ 70.866 592.2 null]
+>> endobj
+542 0 obj <<
+/D [1573 0 R /XYZ 70.866 576.96 null]
+>> endobj
+1577 0 obj <<
+/D [1573 0 R /XYZ 70.866 518.621 null]
+>> endobj
+1556 0 obj <<
+/D [1573 0 R /XYZ 70.866 434.461 null]
+>> endobj
+546 0 obj <<
+/D [1573 0 R /XYZ 70.866 419.221 null]
+>> endobj
+1578 0 obj <<
+/D [1573 0 R /XYZ 70.866 166.123 null]
+>> endobj
+1572 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F175 1131 0 R /F11 908 0 R /F45 709 0 R /F170 1055 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1584 0 obj <<
+/Length 2671
+/Filter /FlateDecode
+>>
+stream
+xÚ½]SÛHò_¡Û{8»*ž›O}äjHp»Xl’»ÊnQ ‘}–¼ÿ~»§gd 8ÀÙ'fZÝ==ý=âÁUÀƒ;ïÆ;ÿü¨ fIª`|DœÅaD‰d¡ÆÓàkO‡ýßÆ?Êh¦…‚ïììÑ|ºšeýŒâÞÞ|²ºÉŠ*­òyÀ;ÃñÎwÀò@Ô8ã˜ÅR“›¯¿ñ`
+k?œ©$n-äM bF#Y0Úùe‡7ùÔ¦ƒÏP0îÌWE•-ûÅ“Þu¶Ìh”ST×YA£ÅªªòâÊ­Óã磓ów‡Çï>|öi<<ý•^¤7<…ƒ¬jDÏ</ÜÜ]_òÞ|E/·}a€®ŸÓÓòGütg³ŽÏ‹,›ÖŸ¢ìy0‚%ÆÐF§ó¾æ= Z÷vžÂü’ž–;;H/ë,+éÝ
+ 0¼[!àTî`®²$(8ì5sЗËùÇìÁnÒɲÉć¾ö­4°Vµqþ`¡½8Q4oháWÎUzU6fÒåŠû‡z× ¥Ûõœ—En•Œ ¡Y^¸-G¼- üÂké·›Åy :jé±kf•3@J† d‚놖J‚¢iâÀ08Å4HsÞûû”8Bü2FÚÔ}aPAã L@ùEø˜òƒÅ%µæ[o3#À8"C¨BKŽO‡»ï÷;'œ…`2Û œ(¦”iþûäðàýÁx“²”!|mƒ²” MÔ¦<>8"ãDÒðEÔô J0p"ÞI¡âYÃõ
+c ê…gå>l‘Ò>Œý‡Öæ­~8tÏM¤2,â8Lè«Ïý g¶ÊÞ¶¾]ãx|,‰Tì´K*–šYk%Çà‰Êl™§3d»§³b?‰¨$Š‰µg¿p;l‘HNSGÁ ‚¹.šUº¬Î³bºe²èA²à„fÙ_Kó&-!R|wšSœ…ž{ƒ9ß~Ÿ OÏkM¶¼½ùŽ{>ÜÛm+¶DÈ"z"¡Cµ;uá
+v†ò¢ØT@¡Â×iÓkP8e’1“ܼR™ð"6TîL—WhÒ˨vkR‹êšäUÃéŒSª2óét5¿—x?¡“+ȳw¸yº€‚óWjÈóqt;ÈŽŒ.LðÐuYSä ùK_IqµHwÚÔ>˜i QN ¦˜Püçø ê%zGg£1Žxo÷óæÆûCšõÒÚñž[Eæõ³O{4­°ÔŽFòØ Gã»Ý=Zï|ú8êªÚ¾’ìïžœ ?ýÍa‰£uܶÃ:¤*Õ!UqÔÅŒ&çEVÒèÖ—º1ÖàÜhÚ‘‘«?c,6ç¨ëh6m §õ¼*³Ù%Mã~SOÀb¥J°¸YW¢ Tÿ²šQшP€ÖØQ‹®¼¬òI‰„ŠQÃÁÌ!kÉÉÅä5›2–H¦´CѳeL¥ôºÈ–tà锦/Ò2¯ý1‚n¡™¤Ìîhs]`„÷*BV—Õ|AS@ùË[czï€#ŒßO>ǨßWeåè5øÎx`z»Ítèˆs!ù#ŠoèÝÕî} Í8P >¦¬¨ _M*[ƒã꜋9ÈÝ}AÝ€õN`™D“WÿÂ×Ðâ„Å;‚ŸÎ‹TMF.løÂ!my8Mm¬¯±/ zc¿[ù¯!h×óÕlZ£{XàlÝç¤~í˜îký´‘€º™‹9òòG_šžãªÙWÐÿ_A$ñwi,˜VcÁ¼ ± tÂx’l£±  кJöøl|rÖQÛ‹X3#ÅV¨Æ“B4©ŽÆ»ãу•= Œ¥/®Áì}Àhw
+ˆÑV¨B¦'yÔ>F°UT³•HE ƒbc+ôcɤқjÔÑbjWá
+}B·[LÇVb彄s²Z.× ª‰è7ëÐ{¯¼„¨ZÃcœ{amþ¢:ZBÆÈ_Yù¼•>ºY nèU¥˜q+Àe˜ã–C;÷±¼S/})ôB.:K¡..Ü5ÁªêŠ£mÕ³*­ÕÍiÚC¦íkçoaó<Eø8Š§uâù8¼Œ’0n§ð˜pjÈ©0¯,ih/}pàóH;‰–©í%³ð¨è­ó‹þ ŠxoX`¢öG¾œTš"´= Ôé¿ü¡Œ¸n&À5øsÀ¹³ŽNÆïÎmþpp8üñ2Ÿe6iÛì
+­@cêP *ˆ¨7I)£Å윷lgr˜..1}âHØDgœ¢ÐܵsŠÔ„Ké•/J'q:/Êʺ;\ÄìŒ>ŸfË%ÍmH
+ž')¥ KtÔ!ªñ>Ôˆ{Ú¸km|ôcµ\euO·ÔX¥q8ï<!HËÍÔËíÍÁ.‰›""{ 'Vöø$ÙãÈV„ðô²W ·a£…Д^ËE6ÉQØu'‚Ãú²_
+ënÞë¬s*‚¼åAñºt dÈ×ï¬p2ÖØC‹£vÅØ4¨Å»×.Y™à ËW¬
+Ú´i®ËÅA"äCU—„üÅsYhbÐLCº¶…MHH~D¤ÚÛ謻¤–,–[9/ aɈ{çE&±I6µÚÎVÃ)Ù&Z^OÖ>"ÁëxíjŸ¸Á³·íÙfʉ˜Ý?@e»3Ïßl^NÖkî&s–.Jߧb›d¥gôþ¿(§kÒÅÉeý;L€üfùªFT$^çY½«ŒØS™pû÷,ÿûXÈd„ÿÈ\ÚXÁƒÊ…¡‹Îñ—¢õïD~o_ú
+ª 79Ê4Ê=¹0®õ¦ÞrùV…^²r-ÙÃÃÏG4:^d¹½{7ç"2éug†+ÕdÛ@‰^糧 A¹o7æK›J¸®hL]Ô;ÿã›íŸÞ]Y€¬è8úOH_œ
+endstream
+endobj
+1583 0 obj <<
+/Type /Page
+/Contents 1584 0 R
+/Resources 1582 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1516 0 R
+/Annots [ 1580 0 R ]
+>> endobj
+1580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.013 580.035 342.956 590.51]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1585 0 obj <<
+/D [1583 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1558 0 obj <<
+/D [1583 0 R /XYZ 70.866 729.594 null]
+>> endobj
+550 0 obj <<
+/D [1583 0 R /XYZ 70.866 714.354 null]
+>> endobj
+1586 0 obj <<
+/D [1583 0 R /XYZ 70.866 564.868 null]
+>> endobj
+1564 0 obj <<
+/D [1583 0 R /XYZ 70.866 379.877 null]
+>> endobj
+554 0 obj <<
+/D [1583 0 R /XYZ 70.866 364.637 null]
+>> endobj
+1587 0 obj <<
+/D [1583 0 R /XYZ 70.866 306.19 null]
+>> endobj
+1565 0 obj <<
+/D [1583 0 R /XYZ 70.866 177.71 null]
+>> endobj
+558 0 obj <<
+/D [1583 0 R /XYZ 70.866 163.054 null]
+>> endobj
+1562 0 obj <<
+/D [1583 0 R /XYZ 70.866 85.523 null]
+>> endobj
+562 0 obj <<
+/D [1583 0 R /XYZ 70.866 70.866 null]
+>> endobj
+1582 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F104 749 0 R /F175 1131 0 R /F158 920 0 R /F97 715 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1600 0 obj <<
+/Length 2398
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝsÛ6÷_ÁkJÍT,¾öáf’ÔIÓ:c×Ö]:“v<´H[K¤*Ñ—ëßÅ%‚"eÉâ´wO„ˆå~aw±?@("<x~¼?CzÏ7“³oßÅ4PQ, &÷D‘"1‰&ið9äÆ£1‘*¼©’*_Wùtm¿OªY¶Ê‹ûó~5"(,ö×åǫɛјbFqÈäè·Ég瓳ßÏ0ˆFÞˆR*R„ÓÅÙçßPÂÜ 'UðÅP.ÆiÄ…ñ<¸9ûù yÆ#0bV¡¦ähŒBá«4û!Rd -EáO¯v5ľW–û4oÅõ:Â`”-n&¯¯'R%8ÇCHU8â(ö¥žÿruñáí‡Áƒ@0Á2RÔ—;ùðñüúWÄ‘ HÞø€jE%°4¤E²È•Ï–F”ÖDÀ
+wØ e$1;Ö†…¢˜‘!œ h$(ñ½ð¸Xv(ÇQr
+(k*̪óÿ.çù4¯&ù"[é
+¬ [V‰¶iFv½-~ûŽ5‹Óü#Œ KcûéW7Æ
+Ú>åKí¥U°- –AVQî‹ý{A)‡”cCãq$iWuR:Gt®;}”ê0'ÒmžâpPZ.÷ÂQè¡ „‡òŽO†£[Vócá(åÄÁQµ£åòP Ê_ˆüXSþ!?僕§ôç§ñ°È)rè›@Ä;ú½Pn'öóÄþßc¿ã=³ÀBîÇÏ×ñ<zÁƒÂ‚0Ù‚¿^¯Âö²•õaʘcús Çô›Ä¾h¢HÎpøi–nÆàIMjŸ4LKèNa+ƒŽ˜
+dqBÍÃRÞeÕ <²-73‡žúyËÆî«’#ì…æÅuë±°VôÇ)¾À£ú3²AÄÎ-3MMžÀР_#ÝÍ7­ý¼¶/t Ôòþ3"Àiþd­"¬ÉÄpr“¬bs~(L"vd'Ôä0[g•ûüõ}Uµ?iE÷"p{Îb ahÎ!à©V–üX´(õ…¡5DÏ8Ê>…ZŽ±š ÞA«wŽÒĹX€t5ð!É‹—CZÅþH›i7\mÌûHµÎöcã—CÛ¸ Ú’=Щ€ÂˆN¾o-+Dé¶Sí¶a"`2±/us.Õ‰1´¶‡`L}¿ÓĘƋw#iN’ôz Ð= lýÇZ×¼%Щâ¢ØÆÕ¾º—†’0Ä ºSª/&‰(J5nET½¬-µ©2€ë½™¾G$ƒèÍôE"ñõîüÐ>ðB(€>Š„/´ñ+@@h±JS´ÄöA~†x$B.C
+è©/wxÌ¿Áú½›G@ïé+O,}‹¶ðô³]©û‰×ªõagÈeý¯JcíÓÎ!«µXÍ
+Iyv8ŒúØî>°Óh ¼&ÃN–íctwÊ/wNùÿÇÁ¶.ÌŸvÍz ¶¡æ™3ÇAÀ6‘ÖZ¶_(·l{bO‚Ö;ÚG·`åã Û]WX%N £Yô"eÂä<;)SqÄå ¾=uðEXÕO ka”ØV›áúEûcåî_5…šn•MËUêØÍ2Ÿ/ ÂÄ^~v"/Z”žû‰éÛõÜÓº÷΂ƒ‡i¶®l;ÿ4­JYÂU-^ßÊJ±¥÷®“Ž¿pb ÍŠ<+ª؉Oy5«¿5HÏó!‘
+‘[¤÷Y‘­’ªÖ¶vΧuýò&[Ú¡î‰0·#L¿Cä;*Ü¿Mt¹ryqñïîoÇˬ°àô‘ O,©²à ú½˜mQ¢Žª©57“£¹~*¶{ûE~·2YÛx¸éíïKs¬úǃ!€lnyøO Ô€
+endstream
+endobj
+1599 0 obj <<
+/Type /Page
+/Contents 1600 0 R
+/Resources 1598 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1581 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1604 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R ]
+>> endobj
+1581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [296.571 721.456 431.093 732.038]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.46 680.984 473.403 694.931]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.42 651.003 406.942 661.585]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.558 639.048 196.162 649.63]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.46 482.001 473.403 495.949]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) >>
+>> endobj
+1592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.892 452.128 245.838 462.603]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.012 452.128 525.406 462.603]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 440.173 207.378 450.647]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.237 440.173 399.184 450.647]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.408 428.218 402.355 438.692]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) >>
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [69.87 416.155 231.793 426.737]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) >>
+>> endobj
+1597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [88.823 241.19 200.427 251.665]
+/Subtype /Link
+/A << /S /GoTo /D (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) >>
+>> endobj
+1601 0 obj <<
+/D [1599 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1602 0 obj <<
+/D [1599 0 R /XYZ 70.866 706.289 null]
+>> endobj
+1563 0 obj <<
+/D [1599 0 R /XYZ 70.866 592.84 null]
+>> endobj
+566 0 obj <<
+/D [1599 0 R /XYZ 70.866 577.6 null]
+>> endobj
+1603 0 obj <<
+/D [1599 0 R /XYZ 70.866 507.306 null]
+>> endobj
+1559 0 obj <<
+/D [1599 0 R /XYZ 70.866 381.902 null]
+>> endobj
+570 0 obj <<
+/D [1599 0 R /XYZ 70.866 366.662 null]
+>> endobj
+1605 0 obj <<
+/D [1599 0 R /XYZ 70.866 296.368 null]
+>> endobj
+1598 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F175 1131 0 R /F11 908 0 R /F45 709 0 R /F170 1055 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1613 0 obj <<
+/Length 2988
+/Filter /FlateDecode
+>>
+stream
+xÚ½\Ys7~ׯ˜G²j‰
+(ù÷ÛÀ`È9Àcû%¦ÈawýõþÀÐäsB“o~¸¿ùîµå‰!V)žÜ?$š£T¢-Å’ûEòa$Ìø÷ûŸ.Œã÷ü»?¯ûe:ž€6£Ûõ|ÿ”®v³]¶^¹‡o^ÝßüqÃðYš°ƒLcˆ‘ÌŸn>üN“~öSB ·&yñO>%Br"…Ó±LÞÝüvCƒ”€t/Ý?ÁjFE€XÆdÙnÅ- —„ÁxÂ(¥£û±’£ÙöK¶úŒ&ƒm÷ÏÏë ~ªF;oq\UÐC‰–V9=4™pJ…\Åëýjî½­Êÿ~÷ZÈÒÞ2E´Ñ ê'VË\ÀG
+ de ð«üãƒ.£—Ä?c,»ÊXŠÆ²VÆ–XEÙù=n§˜f¹ Fêc) ,ƒÛt7Ë–é"¯·év¾Éž¥ëDòÆÄ‚(ir÷é6T¿‡C ð•EP¬,þÝ¡ðàs|pç
+íç;¿™äšuÑ° SZPQÝŠ*Ô¨ÆçjÛÉ曆®nVv†¥Œâ·¥ ˜ôä¹ÒŽý„=ÔõC/GÔ­%Šâ./«r>nªØŠ€i­¶,Ë Ã%>/TÕp—®"vc—Bí J1km«J×Q¹®‹›A”ZF¤Ûö²Rî¦V *·¯¿V –U[ªës"Z†D+–L¬²U­>UcŒÑC‘©uÏ ‰Ä½)¬Tkjù3•i¦C¦Ë)GanÖ¥Ó\0§€ ;.¸¢ŒS x¦« v5¹š–[WÃ=áü®£ésE$=pÌêÚžJõÅ0KرQÍ‹ol –Èó °œP#Y€•òšàX•) ’œ°éň¨%§"E¼åiÒ”Úk¬]/ó.<
+{Á§—Œ
+Eî¾’D­p-¸©yìT$:…–£Ø;[Uü•iSWu¬eC`‰SáOù5oEt¢[0„N þV{YçÀ´)(w¹C~cÚÔ߶àýæßýdäó
+endstream
+endobj
+1612 0 obj <<
+/Type /Page
+/Contents 1613 0 R
+/Resources 1611 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1607 0 R 1608 0 R 1609 0 R 1610 0 R ]
+>> endobj
+1607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.601 704.693 262.19 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__TASKING_ga8b2a95073f7a4a81055899ee6a93ecee) >>
+>> endobj
+1608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.646 704.693 295.555 715.275]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.38 667.831 214.404 678.413]
+/Subtype /Link
+/A << /S /GoTo /D (group__TASKING_gab53273918f995639450c4dcbed02df88) >>
+>> endobj
+1610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.781 667.831 246.69 678.413]
+/Subtype /Link
+/A << /S /GoTo /D (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) >>
+>> endobj
+1614 0 obj <<
+/D [1612 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1615 0 obj <<
+/D [1612 0 R /XYZ 70.866 771.024 null]
+>> endobj
+574 0 obj <<
+/D [1612 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1616 0 obj <<
+/D [1612 0 R /XYZ 70.866 723.517 null]
+>> endobj
+578 0 obj <<
+/D [1612 0 R /XYZ 70.866 641.74 null]
+>> endobj
+582 0 obj <<
+/D [1612 0 R /XYZ 70.866 582.116 null]
+>> endobj
+1617 0 obj <<
+/D [1612 0 R /XYZ 70.866 557.261 null]
+>> endobj
+586 0 obj <<
+/D [1612 0 R /XYZ 70.866 557.261 null]
+>> endobj
+1618 0 obj <<
+/D [1612 0 R /XYZ 70.866 512.758 null]
+>> endobj
+1619 0 obj <<
+/D [1612 0 R /XYZ 70.866 303.842 null]
+>> endobj
+590 0 obj <<
+/D [1612 0 R /XYZ 70.866 288.602 null]
+>> endobj
+1620 0 obj <<
+/D [1612 0 R /XYZ 70.866 245.787 null]
+>> endobj
+1611 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F175 1131 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1623 0 obj <<
+/Length 481
+/Filter /FlateDecode
+>>
+stream
+xÚ•RËNÜ0Ýç+¼t¤b®ß1˪ ú ´ Ê"“ñÌXÊx¦I¦-_;v  nºòõ}Ÿs. -tU¼¯‹óKÃQEŒRÕ¤TJ!mQÕkô€%¡¼<cºÂ÷ƒí“õË nURÀMŽÍÉ·£;ø¡|¬¯‘œHÍÃŒ©ƒ0Ñ[|¬‹Ÿ N@ôyPU‘Š ÔG@ë»F@¸©Ðï)s„ ÍDlÖ¡»âKyy LF3>
+(#†R¹£(×h(
+endstream
+endobj
+1622 0 obj <<
+/Type /Page
+/Contents 1623 0 R
+/Resources 1621 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+>> endobj
+1624 0 obj <<
+/D [1622 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1625 0 obj <<
+/D [1622 0 R /XYZ 70.866 771.024 null]
+>> endobj
+594 0 obj <<
+/D [1622 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1621 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1628 0 obj <<
+/Length 305
+/Filter /FlateDecode
+>>
+stream
+xÚ•QËnÂ0¼û+ö˜ꮽ~…cÕ ú j”ƒHBQPËß׉T©§žöáñìÌ.ÂÆì.g·ã™1ù,rg ØLr# /`‘hL—ùH+®…]wVçƒOo¤uÉ}½9—¾jV;®Z0{ÈÙ'‹ ®œÎq'lJ¶X"ámÈ)sðÕ!KPš¸VíŒÌÙ Ã^çÿpj(ÿÃ886\Z£ZÇRNN$7±37ö•?­_DÁTßSÒÉÐœûcL$õ…Ž™ Ê™XmS‰I}ŠÅtú6‹ÙÓÑW³çv[A ‚2K®$¬æ6Sâ?©Gý–­¹$9`^ÏU³/ûkL÷ëÓ*Œ˜\bgÝ*¸ ·J “ïË®øx®a¿ál?^Í{ž
+endstream
+endobj
+1627 0 obj <<
+/Type /Page
+/Contents 1628 0 R
+/Resources 1626 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+>> endobj
+1629 0 obj <<
+/D [1627 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1626 0 obj <<
+/Font << /F93 714 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1636 0 obj <<
+/Length 1506
+/Filter /FlateDecode
+>>
+stream
+xÚ½W[oÛ6~÷¯°¨Y^$R*¶í²+6 kó–-Ó–PYÒtiš¿CÊ–m%K»`O¤Ès¿|<¢Á. Á›WÂc»µË›Å«ëÅó׌FKHœJ\oEI"e J¤âÁõ&¸ ÉuÓ›v¹â< åòÓõÛ3A(…s"h­¬â˜DÉ( Ô]‡ìWu6ìMÕ뾨«Qó–z39I‹½)H T [®¥4Ì ÓêvÉâ0[ª0·›;§æ×ëÅß Œ4`‹$‰$bÉH*dí7Ÿh°Ë· S¤IpëH÷ ‰°+ƒ‹?'!;ÚÂb౦„B‹Šjku×èõ$
+ÁIDSúÔœð7PrÒ¹5U/¸¿µénw>ïïWI¸×_7KAÃ/K‡¦œ7ÄÖdZ@žDëÆ4}þ„šž¿NÕ´$IãtLÙGJÅ=æœX‘ÈÕ¸c«–Œ†ÃþÝ2¦P¦'A:µü_j!a„³ô´>ؾ÷uð¿–E7*†$duÕõ¸uÑ\²ð±£—| Fw®Æý=®M¼åÓÐ
+ `ÆYø›§GO@À­u£n;Ï–éî`8¤ë67ÒCëír)‡µªq=Æèæ"cyªÜ áuýl8Úz3d¦Ã–׸ô­1¸ë†¢×kÛØ¥?9Ê?ÒŸá™g.öE©=©­·ææ\Éйn†]Q¡oi瑃KŠÈ,®ŒÍ4Å4Ó#ZéÂgwŒ+ÜØäÛÕ²Œ.âëï…`a“œ<¼è%lq[˜ýz¯t¯ïøxA.ñ,™(: $Ø?3ÕAˆReQÚxúÐTljL/‡ºÉÛÂaþ•(Jú!Ó?»Î©GŽ™
+r¦Ø“¹ìÄ qÆ|ñâr®8{ j0M¦ñé1bn‚˜¦áøuYÞá6x:N/ŽÎÊôîعp /¬•±°±J-Õ½qì Ë¿ÐÚÞ¶3]é8¡¸Z;¤¶§»Óe[rZZ‡Ù<Qa£­‡v·më=îÚºö·®Áa¨t w¥Ñ0¢Öož6«[x®šº²Ï”6S7ì·ëSX¡WFð¬3Ž³£zŠ½GõÐúÒS;м½u5óU”îp¸rŠHÑ7 RÄŸ ‘NpBÀà,Ä'FHg=žÜ"è÷~^ÅêЬ`ʉ²7ß‹i
+è=…EœrBYtjÑ4üDËXøÅøŸSœ_/þa\e‡ßŠœ¥?=7œ*’Hu
+áoêÚ>‚B’¸–ÑCi“#$V±.gŸ`qÖ(@ìÊG¸Î›ÎãîNW^Å ·²°´›…q¯>¼àQî
+ä¯ßN"–vRŠî|nê°/XøÊä3vx+ŠÞÛZ|¶4ooþ´åü¯ßÃÀ·ô›`ß×ogÿ]PŸÿ
+endstream
+endobj
+1635 0 obj <<
+/Type /Page
+/Contents 1636 0 R
+/Resources 1634 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1630 0 R 1631 0 R 1632 0 R 1633 0 R ]
+>> endobj
+1630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.615 473.709 187.965 483.978]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba) >>
+>> endobj
+1631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.615 461.323 168.041 471.592]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) >>
+>> endobj
+1632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.089 448.937 204.871 459.206]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_a12fc455d853883d91e3a19567aaac3fe) >>
+>> endobj
+1633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.957 392.203 238.39 402.471]
+/Subtype /Link
+/A << /S /GoTo /D (classhierarchy__info_a4122e10b5d763f2ca3f13076f836ddfe) >>
+>> endobj
+1637 0 obj <<
+/D [1635 0 R /XYZ 70.866 789.024 null]
+>> endobj
+598 0 obj <<
+/D [1635 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1035 0 obj <<
+/D [1635 0 R /XYZ 70.866 584.926 null]
+>> endobj
+602 0 obj <<
+/D [1635 0 R /XYZ 70.866 584.926 null]
+>> endobj
+1638 0 obj <<
+/D [1635 0 R /XYZ 70.866 491.861 null]
+>> endobj
+1639 0 obj <<
+/D [1635 0 R /XYZ 70.866 410.263 null]
+>> endobj
+606 0 obj <<
+/D [1635 0 R /XYZ 70.866 378.491 null]
+>> endobj
+610 0 obj <<
+/D [1635 0 R /XYZ 70.866 266.018 null]
+>> endobj
+1640 0 obj <<
+/D [1635 0 R /XYZ 70.866 241.055 null]
+>> endobj
+614 0 obj <<
+/D [1635 0 R /XYZ 70.866 241.055 null]
+>> endobj
+1641 0 obj <<
+/D [1635 0 R /XYZ 70.866 155.549 null]
+>> endobj
+618 0 obj <<
+/D [1635 0 R /XYZ 70.866 140.841 null]
+>> endobj
+1642 0 obj <<
+/D [1635 0 R /XYZ 70.866 68.979 null]
+>> endobj
+1634 0 obj <<
+/Font << /F104 749 0 R /F158 920 0 R /F11 908 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1651 0 obj <<
+/Length 1870
+/Filter /FlateDecode
+>>
+stream
+xÚÅXÝ“Û4Ï_ápf8$[–||Ì
+>}=û.ˆF”Œ`£~YfM3½àR…×u¾[ëªÍZSW–wòÕlòÛ„+ X/R)¢xäëÉ«×4(à·ïJ¢Toç:ˆEDDl·(ƒ“Ÿ&Õ¤„ ;µ*Íh|BkP‘vj'„N¢é£”†¿®7Çš1&I*c·Ž'ç4o¤½Z'`œ’$‰ÇìLÕF|ÄU¸2z›m§L„ùT†+;¹?¡”$‘ì1RÀŸ°±B¦ZØë««uvw£§Œ…¿ë²qzt¾¾|‹ð^JâT<&*EA?ìÖ·z – Ö ?–zÑð÷)¡•éh¦òc»Ò~bÝ0e4̶ùʲßà Éô"Šâp67†÷“gåÃ2³­î„nuV4—y 0ë#KÿÂgs¹Éò)û5["wê6µÿÁþÓ­[“„î沪‹¡<ûÙ\^¸ àFR!¼ÖY¾2UÏ,%HÌ­1q¾´škO-êêÃÖOßXæ¬Â¯¶öãR#¡ÙèÜüB)Ï‘Ý´+?«jH±¼ÌÚ·Öm…/WºBY+Ü­ÓÊ}˜Æµ]ã¹mv·Mî
+ôüQ R‚D1´‡Æ
+”Ø­ŸMy ©ÒƒäyŒd1‰e2ÆÈ›a<A²Š4¤vP¡
+ÌœÐiK€L„àOc$L³Ž,öÈá)Qª—óÙÃ> DŠÔ-¹H‰9ø O3ôô3è ß0¹·øó¶Ýš[{j»VÔ@¸?>0쟯/__]¶K,3Ï› €‡œ]~SÎÙIU\œG$ŽÅ£ìl«f¶lþ‹­NÉÿ·£µs¾Ê?òºjÚ݉
+endstream
+endobj
+1650 0 obj <<
+/Type /Page
+/Contents 1651 0 R
+/Resources 1649 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1606 0 R
+/Annots [ 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R ]
+>> endobj
+1644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 418.052 185.517 428.32]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a8a098c07080704af1d89e401a1b4d10f) >>
+>> endobj
+1645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 404.5 159.559 415.082]
+/Subtype /Link
+/A << /S /GoTo /D (structident_afa1ec17df36c4bf1e36e97eab63953b9) >>
+>> endobj
+1646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 391.162 185.517 401.431]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a91db2d18476e0a527ba20e04ca2c3e74) >>
+>> endobj
+1647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.63 377.718 185.517 387.986]
+/Subtype /Link
+/A << /S /GoTo /D (structident_ae29e80f6fc150f73c1790c8796bcfd9f) >>
+>> endobj
+1648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.104 364.273 179.989 374.541]
+/Subtype /Link
+/A << /S /GoTo /D (structident_a8c2ccc106967f36d7191d59d4d5a65dc) >>
+>> endobj
+1652 0 obj <<
+/D [1650 0 R /XYZ 70.866 789.024 null]
+>> endobj
+622 0 obj <<
+/D [1650 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1643 0 obj <<
+/D [1650 0 R /XYZ 70.866 692.748 null]
+>> endobj
+626 0 obj <<
+/D [1650 0 R /XYZ 70.866 676.347 null]
+>> endobj
+972 0 obj <<
+/D [1650 0 R /XYZ 70.866 540.121 null]
+>> endobj
+630 0 obj <<
+/D [1650 0 R /XYZ 70.866 531.011 null]
+>> endobj
+1653 0 obj <<
+/D [1650 0 R /XYZ 70.866 437.262 null]
+>> endobj
+634 0 obj <<
+/D [1650 0 R /XYZ 70.866 348.867 null]
+>> endobj
+638 0 obj <<
+/D [1650 0 R /XYZ 70.866 270.334 null]
+>> endobj
+1654 0 obj <<
+/D [1650 0 R /XYZ 70.866 245.139 null]
+>> endobj
+642 0 obj <<
+/D [1650 0 R /XYZ 70.866 245.139 null]
+>> endobj
+1655 0 obj <<
+/D [1650 0 R /XYZ 70.866 165.687 null]
+>> endobj
+646 0 obj <<
+/D [1650 0 R /XYZ 70.866 149.285 null]
+>> endobj
+1649 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R /F158 920 0 R /F11 908 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1667 0 obj <<
+/Length 1449
+/Filter /FlateDecode
+>>
+stream
+xÚÕXmoÛ6þî_!`_dtfùNѬÍR h±­5¶i`È2ã•¥L–“æßï(R²d+Îk A Y"O÷òÜÝsÄÁ*ÀÁ»Ñ›Ùèõ©fA„´”,˜]
+£HÊ@iŠ$ fËà,”ˆ'TEá×õÕü Æ,®Æç³÷¯O 4l¦ÒnQäzßÏnEO<Áˆ2Ö¬øc@F„¸jür—Þ¬x›Å›So6–84ë«,®Œ{òÉ\XUMiòÄ="*Ì
+ý6ý3" ¤µ:ŠPDy¬Ggç8X»÷FLGÁM½rpÁàVÁ,ø<ús„»žäbÀ“’ ܸòÄ€ÿhžVi‘;ãÊ]³4÷JSLÜMqá®vKfÚŒ™Ñ%²FÀ—'D! *×â­½¬±wév,Ƈ·î~>‡ýɼø:¯Šy½´(Ç"¯_°ÀðOj±#ð°°vÙË;°‹`Þ1 >ÊÒ´……?€Á×
+¸—€’Zqp‰FŠˆcþØéÖ¹µSû'#)(A¤S!Í+FÁD…éÒäÕtZšÓ¢ðüp¨† jñ"úh°?}}ˆó¢‡Æ.&„
+ĉ&”£H¹ëtué‘°ð¡Þnš¦+§MÄ8«Ò";Îr¯6ÆïŠÅz=¦"4CyÁ?…àS°Â‚ ûØK Å
+"˜<)Ï×Æ㤧 }4Nò«4q–Ý>)>ع…‡ß¸.Jó
+M‹p†$»áuo)Àùi“à>Â`ÑÎFe‹ )/Ëb¸\y0:ÐDÁ
+oë4"¾RŸ˜*×-]¬NÌ&)Ó«ºÝ÷•W²]8D-¾j*Üaý`½ºSƒ».ï%ë•<^{$ íШ"åø‰‰â®"7*`NÌTDCÙϦß;QDð»ÚT§Â2„ÉQÁèTìÈI†Dšë½}K±ˆ÷XÚ›¸áXÉÇgiI«×¾U¸§‡™è ýTfÆ££ÄlÞhÑ4,ûó·ïd>Ìêóa¨ùÜè±¼'gGý±6ýŽäŠ$ÀµÕœ+\-¹ˆòNDépme´f€{µuÿxa*»TãèyÓ (}é,8ê½éte')S9CmO4¡aÓ ÷Éè(IkÒYš[äž6ˆ¡#?¡PDsà×™Â$f[Ùî  ˜ýLöÎN»é¡I®¿-±o~6W~ôaíÁŸŸš ›b:e²ÉyºËùþúèî~˜}Üü¬ ÷ÙÒ¥PN>ˆ„Ö:@ÚOÛ¼J×>©?¤‹2¶óQ{nØ=C<)l úv»ª˜~‚‡ÿk¨3o
+endstream
+endobj
+1666 0 obj <<
+/Type /Page
+/Contents 1667 0 R
+/Resources 1665 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R ]
+>> endobj
+1659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.895 338.293 155.35 348.876]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_af653ec27d16d63dab994e52ac6713aed) >>
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 324.893 133.154 335.475]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 324.893 170.041 335.475]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_a36961b6d49f84ab81365a9389613ea34) >>
+>> endobj
+1662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.895 267.238 154.346 275.722]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_a5d89de3bda829ab9be324007d915aa3b) >>
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [94.777 251.945 133.154 262.528]
+/Subtype /Link
+/A << /S /GoTo /D (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) >>
+>> endobj
+1664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.654 251.945 138.139 262.528]
+/Subtype /Link
+/A << /S /GoTo /D (classkmp__flag_aebad8727c9520d1bb2b2219c94cb3c62) >>
+>> endobj
+1668 0 obj <<
+/D [1666 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1656 0 obj <<
+/D [1666 0 R /XYZ 70.866 741.549 null]
+>> endobj
+650 0 obj <<
+/D [1666 0 R /XYZ 70.866 725.253 null]
+>> endobj
+1657 0 obj <<
+/D [1666 0 R /XYZ 70.866 665.134 null]
+>> endobj
+654 0 obj <<
+/D [1666 0 R /XYZ 70.866 648.838 null]
+>> endobj
+1658 0 obj <<
+/D [1666 0 R /XYZ 70.866 588.719 null]
+>> endobj
+658 0 obj <<
+/D [1666 0 R /XYZ 70.866 572.423 null]
+>> endobj
+1036 0 obj <<
+/D [1666 0 R /XYZ 70.866 460.218 null]
+>> endobj
+662 0 obj <<
+/D [1666 0 R /XYZ 70.866 451.168 null]
+>> endobj
+1669 0 obj <<
+/D [1666 0 R /XYZ 70.866 357.566 null]
+>> endobj
+1670 0 obj <<
+/D [1666 0 R /XYZ 70.866 284.618 null]
+>> endobj
+666 0 obj <<
+/D [1666 0 R /XYZ 70.866 236.645 null]
+>> endobj
+1671 0 obj <<
+/D [1666 0 R /XYZ 70.866 184.963 null]
+>> endobj
+670 0 obj <<
+/D [1666 0 R /XYZ 70.866 133.476 null]
+>> endobj
+1672 0 obj <<
+/D [1666 0 R /XYZ 70.866 108.302 null]
+>> endobj
+674 0 obj <<
+/D [1666 0 R /XYZ 70.866 108.302 null]
+>> endobj
+1665 0 obj <<
+/Font << /F93 714 0 R /F11 908 0 R /F45 709 0 R /F104 749 0 R /F158 920 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1684 0 obj <<
+/Length 1649
+/Filter /FlateDecode
+>>
+stream
+xÚíYßsÛD~Ï_¡‡Ú¾Þï“2ÀL!m‡Ò@iLyH;ž8dÉXç†ð׳§»“%EqíÐR˜áI’}ÚÛûv¿owm-"=?úvzôøY¢%R²hz)Œb)#•P$I4Gç#ÁÇï¦/"& Šƒ÷êO¿ËÓªO¨ŠG'ål³Ô…IMVvíÑÓéÑïG–âˆ4&ãÅ”G³åÑù;Íá»F,‰£›zå2â‚!Áíytvôóön6WD…½µï<Á¼å½LÀÅHIŽ$|^ûùZ›Íº¨j·úö?ã¢õ6‰ç<šÀSæ^7×ÚrUf…Ñk÷`J ߦ3³Iswÿc–.jÌ&DÉ8šÐIFÉ +h‘Õh¹·»æYáí å®åUc“æþ»ß–«‹›1£43kë´Òö]#wÊJ}ˆp4a ,œ31DOÆxdôr•§F[;ð"‰xÊZ‚$`ë£ÿ•_Ñ1­â$¬0·+]¤Kë3G¯,r‚¨¢aý7nE'¤bÔ°Ž -.¬mg×b±ýb`“#Ç;Ýîì2ä¨D Oz~î8ùññb<‰GÚÜ¥#l©HÆ I¾“ À¿¤!Â@ª3" ¥œ)›µ 蘷Xàñ$!ÔÞﳈ[§b1R¬Aæ<+lö½äÉäv ƒ+ôïñŽöxçØäB~—RlJIòq)E0R"‘SñDm9Å<£Nõò²V ˆÉIjRwG1÷ƒ6¢%±lm„È¿†¼;xõ~Lù¨÷²¼k@kå$EX‘6ãTAA–È°æƒÀ’¶£ÿ
+mÌÕ¡¬%PÍE—µ_LÇÄ&èJÑ¥Á k3Ï"¯%¡›mþ§ЭN¼çZ¬j£: ‘˜w*týQ @Ùè`ÎÙvrxú‡….´“]
+ƒ¹’{uée\<hæAXòÌËZ ÈåÝÞ)“Ô…”Øq8þˆ«QQþU²:ip©Õ«ï‡4Ùi j@ØN¨ç¥®ŠGþŒ…dSÅý åe¢hÊ ”}€ÿÓU”Ìtû‰rcVóÙÃRÝ lUö§e¨žš@  Ý—6ôâžð<²£W—Ý¥Ç F¤&(¶)·Q a°ZÝ H£ïV5]|œxzVmŠ´!V9>sØ ÇÀ‹Ò<T¾ j‰:,hlÿ ‘<D¾:¢U”ÅÄ WkÞ­öÇ=ù4tÉËÅÓÚo]˜ƒ¥ÌNzì|OØ¡Bó˜xØQŸ¥>ÏC?GYvÜ\kÿí§¯.ΦO¦gOß<ýqzÖ YèÁmϳ_õq=Qh|š ý3½ü€ÿ%Âß& ãÊžú*¢æqÀ Òÿ:÷Ü
+endstream
+endobj
+1683 0 obj <<
+/Type /Page
+/Contents 1684 0 R
+/Resources 1682 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R ]
+>> endobj
+1677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 202.575 207.394 212.844]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) >>
+>> endobj
+1678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 174.785 186.467 183.555]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_ab89a43b134178cd06845c54ca4d80e7f) >>
+>> endobj
+1679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 143.997 203.279 154.265]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_ac738a2dc47b270830803e943744f0d43) >>
+>> endobj
+1680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 116.207 203.413 124.976]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a0d979459c9a441d94294d52e0745399e) >>
+>> endobj
+1681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.079 85.311 190.735 95.687]
+/Subtype /Link
+/A << /S /GoTo /D (classstats__flags__e_a37c8b539cc437be55817a1f122698106) >>
+>> endobj
+1685 0 obj <<
+/D [1683 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1674 0 obj <<
+/D [1683 0 R /XYZ 70.866 716.062 null]
+>> endobj
+678 0 obj <<
+/D [1683 0 R /XYZ 70.866 699.181 null]
+>> endobj
+682 0 obj <<
+/D [1683 0 R /XYZ 70.866 595.58 null]
+>> endobj
+1675 0 obj <<
+/D [1683 0 R /XYZ 70.866 570.289 null]
+>> endobj
+686 0 obj <<
+/D [1683 0 R /XYZ 70.866 570.289 null]
+>> endobj
+1676 0 obj <<
+/D [1683 0 R /XYZ 70.866 490.633 null]
+>> endobj
+690 0 obj <<
+/D [1683 0 R /XYZ 70.866 473.753 null]
+>> endobj
+1037 0 obj <<
+/D [1683 0 R /XYZ 70.866 343.418 null]
+>> endobj
+694 0 obj <<
+/D [1683 0 R /XYZ 70.866 334.032 null]
+>> endobj
+1686 0 obj <<
+/D [1683 0 R /XYZ 70.866 221.897 null]
+>> endobj
+1579 0 obj <<
+/D [1683 0 R /XYZ 70.866 221.897 null]
+>> endobj
+1687 0 obj <<
+/D [1683 0 R /XYZ 70.866 191.108 null]
+>> endobj
+1688 0 obj <<
+/D [1683 0 R /XYZ 70.866 161.819 null]
+>> endobj
+1689 0 obj <<
+/D [1683 0 R /XYZ 70.866 132.53 null]
+>> endobj
+1690 0 obj <<
+/D [1683 0 R /XYZ 70.866 104.847 null]
+>> endobj
+1682 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F11 908 0 R /F158 920 0 R /F97 715 0 R /F170 1055 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1693 0 obj <<
+/Length 552
+/Filter /FlateDecode
+>>
+stream
+xÚ•SMs›0½ó+t„ƒ•Õ7øغÉL&™¶ ÓìŒc3Åà7ÿ¾’6öôÒÓ®¤åí{o@ô|Jƒ»û„¡'R2”îK‰TB±$(Ý¢e(1fTÅa×g}·^°,"ÝZŸ«¬ë†ôEïì›nuëè-}Dœ3,3ýšö6ø’¿b.‘sÓ8Æ1å(?Ë7@[óöˆ
+endstream
+endobj
+1692 0 obj <<
+/Type /Page
+/Contents 1693 0 R
+/Resources 1691 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+>> endobj
+1694 0 obj <<
+/D [1692 0 R /XYZ 70.866 789.024 null]
+>> endobj
+698 0 obj <<
+/D [1692 0 R /XYZ 70.866 771.024 null]
+>> endobj
+1691 0 obj <<
+/Font << /F93 714 0 R /F104 749 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1746 0 obj <<
+/Length 787
+/Filter /FlateDecode
+>>
+stream
+xÚÍ™]o›0†ïó+| ÒBŒ ŶVÝÕ´"í¢,ÜÄ 1Ìúñëg‘Ú&HËÇMmQðyô¾ÇpŽÁ@p9ƒoG ¹Å´.g_ýÙâ†@È à߃%´ˆçéÁµ&ÀÁq%CnÚ¶ñhþñ­¹¸p\@¬•çábæ.´ öÊg)Ýî’€Þ±45ç¶kž«
+«DÀ¢ZÐßÙô­ÛCÒ±êQ¹nÚv{ C‘%Lz !’‚:µÆŽÈ”"~ŠLÐ<’OÉ=!…:•OŸ#:ú’(é=‘H_¶O”OÉ7É‹˜ce“ÓDÕÛ¶ÃÁ"Ó¤ê-³p§ÌRC½¨º©¥hU2ÑLéz)¨…ÃÓëÍQ§££§èÈ(p-¥+7ÃQc k[Þ’
+endstream
+endobj
+1745 0 obj <<
+/Type /Page
+/Contents 1746 0 R
+/Resources 1744 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R ]
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 640.144 170.529 650.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 615.797 170.529 626.272]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 591.45 170.529 601.924]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.725 567.103 195.688 577.577]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.482 543.316 182.445 553.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.482 518.968 182.445 528.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 494.061 217.153 504.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 469.606 161.051 480.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 445.258 161.051 455.841]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 420.911 161.051 431.493]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 396.564 161.051 407.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 372.216 161.051 382.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 347.869 161.051 358.451]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 323.522 161.051 334.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 299.174 161.051 309.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 274.827 161.051 285.409]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 250.48 161.051 261.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 226.132 161.051 236.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 201.785 161.051 212.367]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 177.438 161.051 188.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 153.091 161.051 163.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 128.743 161.051 139.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 104.396 161.051 114.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 80.049 161.051 90.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 652.21 392.804 662.793]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.478 627.971 427.441 638.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 603.623 402.282 614.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 579.169 392.804 589.751]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 554.821 392.804 565.403]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 530.474 392.804 541.056]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 506.234 402.282 516.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 481.887 402.282 492.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 457.54 407.661 468.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 433.085 392.804 443.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 408.845 402.282 419.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 384.39 392.804 394.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 360.043 392.804 370.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 335.695 392.804 346.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 311.348 392.804 321.93]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 287.001 392.804 297.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 262.761 407.661 273.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.698 238.414 407.661 248.888]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 214.627 414.198 224.541]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 190.279 414.198 200.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.235 165.932 414.198 175.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 140.917 392.804 151.499]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.241 116.677 426.204 126.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.602 92.222 401.564 102.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.602 67.875 401.564 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1747 0 obj <<
+/D [1745 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1744 0 obj <<
+/Font << /F104 749 0 R /F45 709 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1815 0 obj <<
+/Length 1220
+/Filter /FlateDecode
+>>
+stream
+xÚÍš[s›8†ïý+¸43 ÇÞåàfÒÚ7&ÝΤ Å°1‡å°múëWBrj'Æ@ÇÜĶ€W¾ƒôIHs HƒSgpüÁF’¥Ø†$çN2b†dÚP1TÉñ¥ÛáåçóÑWù»óQÒ4¤è&¢Vt“µFÎàßJ¤>>oYŠ5É‹·ßäÓk%  Û’~VwF’¦S1‰-¤Ùà¯XeÒô L†ª€%Æ÷Qêá$óIFüŠNµêÒ‘ª*¶®óÛþ–&™|¤êÃ{ùšÖp¸üwÏßUàäÙ\ áúb ÝV·"C\çdTzC‚$-ó
+†e„ âFùs(ƒ?1•50¤ô^w± Îõ èàn÷øŸ$Œi«Ú@ _LdÄõóZã“ú´ôH-Ùì!ö‚,‰Ãßn&q“í®ã8‘éÐ~²?nXÔz²‡ÚsäD©»3 âãtÕ=tZN3jAz‹,ýp^PŸx8ŒÃkµ<$T¹/S™;PY½„*÷åÀ.TÕt™
+éÿdH熂`Ïõ‚-+S=ÅÁž>Ë[}·pù·¼LS6šÁEÓ\wÏÈ<Ì :ϼ5:Ú†ntAÇU ñz3¨*ÈB¼ï“"‰Bk_¥„OÉl™ÈÔÕ'ê@èj\÷ÔÍ—²Ž¬B0|HI“$T×%7Ù*ôI\ডCø nUäÓdŠ/ÏGŸ|rã\MO®;‚õ0ø#w99}¡Ô32úí¬£ÖFŸ“4#$`ÊØkã_ˆ¶8c=þ“{\$xmåî(¾qbðIZµI„"X3/`=?ÐI˜#4ô­oµšßo
+0á˃zÕ;ÆÚD›wTz2Ö4OÊÌ#»‰d¤ÚÎ>šÉÇjÇTj„¯-ˆvIö¥¬(©žåº±K)×&†X±svuC‹ÓñÕÙ§Z€ÛdåtŸ•sŠ ·Èã扷ÝeI$ªØÉÔiªÂ4}›]ÐS¼/'ã›Qoð´š"öu¨vB …ï!»gÅòaú¿ºq¦7ž9'Îì-#ÄhÉw=šjñÐÁñœËÉèí³ßlAÇ*Ÿö+zúÁÖù’îêù‰O-íŽ'=êÎdØ Êøžµm8ïycÊ8ÂnY$=À˜—t•ón´µXžß³
+­FJ2¿/þb(ýÈ´8êH™¦‡”ú(A¯Â:p¼IuÚo¨t!Ùk¬´ɽ`¯3JŸTG
+n¹(öº›O6½z ›Š»¼x°| ÂP ÉFöø¦+†!NÅ.HL²?G½IÌ?é¨ØnQŒ‡¤òò Vœq©º,Žôßø¢¦bë$³û1™<þ“ žLÙ@)IylYŒG5uÅ´µå{lc/îZ¥Öˆàòžë2.ÂHÌÃYejZ ó–ª²ßÏæš_óê¯YšZøÉû0L
+endstream
+endobj
+1814 0 obj <<
+/Type /Page
+/Contents 1815 0 R
+/Resources 1813 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R ]
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 746.115 161.051 756.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 722.312 175.908 732.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 698.402 175.908 708.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 674.491 170.529 684.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 650.581 170.529 661.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 626.671 175.908 637.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 602.653 161.051 613.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 578.742 161.051 589.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 554.832 161.051 565.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 530.922 161.051 541.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 507.011 161.051 517.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 483.209 217.153 493.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 459.298 217.153 469.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 435.388 217.153 445.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.512 414.004 160.475 424.479]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.609 392.621 134.572 402.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.697 381.226 133.66 390.934]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.422 369.271 206.385 379.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.021 357.315 178.984 367.023]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.983 345.36 188.946 355.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.562 323.416 174.525 333.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.885 311.461 184.848 321.936]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 287.551 162.423 298.025]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 254.212 203.964 264.686]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 230.302 203.964 240.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 206.391 203.964 216.866]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.001 182.481 203.964 192.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 159.131 126.182 168.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 125.124 143.119 135.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 101.214 143.119 111.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.535 79.938 142.498 90.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.214 67.983 129.177 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.974 758.738 383.937 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.89 746.774 380.853 756.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.322 734.81 390.285 744.518]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.047 712.738 338.01 722.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.47 700.106 357.433 710.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.426 688.25 370.389 698.518]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 676.846 383.39 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 664.882 383.39 674.59]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.427 652.918 383.39 662.626]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 628.43 386.25 638.698]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 594.287 471.169 604.869]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 570.359 471.169 580.941]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 546.539 386.25 556.807]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 522.611 386.25 532.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.287 498.683 386.25 508.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 474.648 471.169 485.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 450.72 471.169 461.302]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.206 426.792 471.169 437.374]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 402.864 392.804 413.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 378.936 392.804 389.519]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 355.009 392.804 365.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 331.081 392.804 341.663]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 307.153 392.804 317.735]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 283.225 392.804 293.807]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 259.297 392.804 269.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 235.37 392.804 245.952]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 211.442 392.804 222.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 187.514 392.804 198.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 163.586 392.804 174.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 139.658 392.804 150.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 115.731 392.804 126.313]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 91.803 392.804 102.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 67.875 392.804 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1816 0 obj <<
+/D [1814 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1813 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1906 0 obj <<
+/Length 1461
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÛr›H}×Wð(U­ñ\¸¦¶¶*NW;öÚ8Ù*'EaK¬.qœ¯ßf@âb9ö>Ðèô™îž3=€4“€t<:²F‡ïL,²©iX²n%Ȇ¦Iº‰d J–']UcòÍú )H“¡‚éï?½þþM­Ñ÷¤Ï—¿7 Ù@Šä.F×߀äÑï>H@Ʀ!Ý#’¢bY-ðérô÷T9)êN”AIênÛ©;·g¹ïÏvçyx7A`L¼‚,4e©ÒD2
+,ô ̆¨0â)¹¶ëfÑ–D®³æ q<ž±È¿¤ŽŒð§ž“9ü.¥9ÍrV­W`7 zva’4 ÉóÓ|ÙNü_øÐ{Ñ>ô^¬•
+Ë…ï&Q#½ó 5F·Z8A@Nä+PÁmuÃ9ü7òCú¶ÐBj-„dÝT–êÝÔ•¦U誥…óó„8¬ãaJý0÷ wBâÎÙÄl?ähãÑ%†Æi¿“GÕ!ƒÎç••ƒ5JÎu`ôÄù·ÍŶ]¬ zvJÄŠtÿ+”iWØô´¶VdCµ‰Ø.«î€¥Eì"mÃÕºàÆy:·E¢<
+VÙ[ˆâ~ø>6†»¬$t¨òUÑâ4Ê—4®5z‚ ³},«„nY.oφ’ÓÉ(î r›FÑU›Œâ}]¿JBZ6’fš˜ߨav®©Û†²iÀ§=¿1ˆ›¸ÌQ<ä1·à„^i*Ï<Þ
+ÛYiÐÊdÄÒ»!3¿/¨s^‰qOœ&d~JOõ)Ÿö±“ÍÉÒÇüÙm-øÝÙé¹uÔVguðÆÇÓsûÍÙÕ'Ë>:9{ó± QÝéØç×'WÓ`fÓË©e_Z¯­Ë60­•™õþtÚm–ú®p z¬“Šr/µ‡ôª±Ýy…þ/šQ[ZbcG\ë¹yã$"…HÒl_6@{á¤Ù`\Ô†k‡eÿ8ül/ôYá4`
+fG°âå.àz:¢Y–¸´ªÙ Ö'=dÂ
+h.*°Q6Í677´¯S[Íš@zbsÒ»¥f÷9·¯ˆ²Î¨ûÞÏæ¶Gâ´'ööP2ØÒíCP·Jeµð>\Öþ´âYt‘;¤w—»(§«¦g¥®wÒ½™#–×)Ï‚èÆ öÄy+t?ÒdÔ{SŒ. ç÷ôšv,)7Š‹Áºõ6 ¨K,x֡鉚Uß-À.ZçvØâüˆY”6ʆâãl­å=c»æ—͆û@<´Ö{Þ­ý²òöÃÊΪ¾éŠ£åUq¼eÃø©Ãz™XÌ·yè2íoÝ`6ˆê¶þ¥hÁùÙá ˆ“
+ð(m¿ÂBãÎÏw}ŒÚä ìôGÑ”(5.vºQBzBl?³·{¦§fvy-Ú‘õc: Èì\)¸“ž·¶ý Ã.Úèùiìd(ôme *Üš? YãIÈ=É–×mÿ…Qu™Î¡Ç?aÊåh2Ò5…½qFªF•Ò‘²F æÇ$$ ÝÃDå…üJóõãDÑ’BX\Tùį
+endstream
+endobj
+1905 0 obj <<
+/Type /Page
+/Contents 1906 0 R
+/Resources 1904 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1673 0 R
+/Annots [ 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R ]
+>> endobj
+1817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 746.065 161.051 756.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 722.056 161.051 732.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 698.046 161.051 708.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 674.037 161.051 684.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.088 650.027 161.051 660.609]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.243 626.018 119.206 636.394]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.175 614.013 141.137 624.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.239 602.676 118.202 612.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [97.273 590.671 109.236 600.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.678 577.999 149.641 588.581]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 554.097 217.153 564.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 530.087 217.153 540.356]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 506.078 217.153 516.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 482.068 217.153 492.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 458.059 217.153 468.327]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.19 434.05 217.153 444.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.945 410.04 175.908 420.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.156 375.134 143.119 385.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 340.444 162.423 350.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 316.434 162.423 326.909]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.461 281.636 162.423 292.11]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.02 258.842 155.983 269.317]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.755 246.838 234.718 257.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.403 234.833 176.366 245.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.369 222.828 187.332 233.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.33 210.823 214.293 221.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.817 198.819 219.78 209.087]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.814 186.814 214.777 197.082]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.099 174.809 155.062 185.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 151.36 126.182 161.068]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 116.562 126.182 126.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 92.552 126.182 102.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.219 68.543 126.182 78.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.841 746.088 392.804 756.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.552 734.214 407.515 744.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.841 722.125 396.804 732.501]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.865 710.251 389.828 720.519]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.281 698.162 451.244 708.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.204 686.848 430.167 696.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.209 674.867 429.172 684.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.725 662.885 426.688 672.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.749 650.904 419.712 660.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.437 638.254 371.4 648.836]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.394 626.38 382.357 636.855]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.947 614.398 400.91 624.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.333 602.417 433.296 612.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.962 590.435 463.925 600.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.274 578.454 453.237 588.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.26 566.472 422.223 576.74]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.889 554.491 452.852 564.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.846 542.509 393.809 552.984]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.319 530.527 402.282 540.796]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.948 518.546 432.911 528.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.909 484.072 374.872 494.655]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.676 472.091 381.639 482.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.129 460.217 459.092 470.485]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.565 448.235 437.528 458.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.31 436.814 394.272 446.728]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.058 424.272 457.021 434.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.575 412.291 452.537 422.559]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.053 400.201 456.016 410.577]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.57 388.22 451.533 398.596]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.679 376.346 415.642 386.614]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.017 364.364 428.98 374.633]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.395 352.383 420.358 362.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.039 340.401 461.002 350.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.025 328.312 461.988 338.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.737 316.33 480.7 326.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.369 304.456 384.332 314.725]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.081 292.475 403.044 302.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.886 280.493 379.848 290.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.598 268.512 398.561 278.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.388 256.53 380.351 266.798]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.1 244.549 399.063 254.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.132 222.725 403.095 232.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.957 187.691 362.92 198.273]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.957 175.709 362.92 186.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.382 163.727 385.345 174.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.829 151.854 415.791 162.328]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.918 139.764 374.881 150.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.916 127.783 372.879 138.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.445 115.909 400.408 126.177]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.714 103.927 434.677 114.402]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.699 91.946 439.662 102.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.714 79.964 434.677 90.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.699 67.983 439.662 78.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1907 0 obj <<
+/D [1905 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1904 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F11 908 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1959 0 obj <<
+/Length 688
+/Filter /FlateDecode
+>>
+stream
+xÚµ˜]o›0†ïù¾iñ ÆÆôrj­j÷ÑFÛ¤¬B48)j0Œuù÷3YÓe+87±1æñËy±cV
+Óã*bi„¨¦ê˜·>„™r]d&QUQ Øž³ºÑB½šjÒQnê!õB¦ÇÒŠY?j£6ËfbV“Þ,qµ–ãí¬ÇÏT=¡†Í­‘¦Ì}f©‚÷oxõˆcÒ¥óDa”r[ðã8ÿ+ÿuÂAȼcÎ7vg-zõ÷ÎZ|)í”O¹àe,yâ4úrÑ–ßLì]ã-/ÚŠ‡»¹¤­¹ø ygj»Ñ\-ë<ÌËöâêêëu[ûTpqý¹~q¥'PzÂ
+endstream
+endobj
+1958 0 obj <<
+/Type /Page
+/Contents 1959 0 R
+/Resources 1957 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1961 0 R
+/Annots [ 1903 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R ]
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.961 758.177 202.924 768.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.946 746.222 207.909 756.491]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.961 734.267 202.924 744.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.946 722.312 207.909 732.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.179 710.357 208.142 720.625]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.165 698.402 213.127 708.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.179 686.446 208.142 696.715]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.165 674.491 213.127 684.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.897 662.536 221.86 672.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.614 650.581 224.577 661.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.599 638.626 229.562 649.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.614 626.671 224.577 637.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.599 614.715 229.562 625.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.633 602.76 188.596 613.029]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.498 590.805 190.461 601.073]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.995 578.85 193.958 589.118]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.517 566.787 186.48 577.163]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.707 554.94 195.67 565.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.678 542.984 205.64 553.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.663 531.029 210.626 541.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.678 519.074 205.64 529.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.663 507.119 210.626 517.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.557 495.164 170.52 505.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.054 483.209 174.017 493.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.576 471.146 166.539 481.522]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.415 459.298 215.378 469.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.4 447.343 220.363 457.611]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.415 435.388 215.378 445.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.4 423.433 220.363 433.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.946 411.478 190.909 421.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.644 399.522 229.607 409.791]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.59 387.567 163.553 397.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.757 375.504 211.72 385.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.338 363.657 167.301 373.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.532 351.702 181.495 361.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.011 339.747 184.973 350.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.069 327.791 167.032 338.06]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.069 315.836 169.032 326.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.092 303.881 164.055 314.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.84 291.926 167.803 302.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.571 279.971 167.534 290.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.571 268.015 169.534 278.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.088 256.06 165.051 266.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.287 244.105 174.25 254.58]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.254 232.042 213.217 242.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.836 220.195 168.799 230.463]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.567 208.24 168.53 218.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.488 196.284 192.451 206.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.566 184.329 170.529 194.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.634 172.374 152.596 182.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1960 0 obj <<
+/D [1958 0 R /XYZ 70.866 789.024 null]
+>> endobj
+1957 0 obj <<
+/Font << /F93 714 0 R /F45 709 0 R /F97 715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1557 0 obj
+[705 0 R /Fit]
+endobj
+1963 0 obj
+[501 137 273 501 228 273 273 0 273 479 0 501 410 273 228 0 0 0 0 0 0 0 0 0 0 0 0 273 195 228 273 389 456 456 729 592 228 273 273 319 479 228 273 228 228 456 456 456 456 456 456 456 456 456 456 273 273 479 479 479 501 800 592 592 592 592 547 501 638 592 228 456 592 501 683 592 638 547 638 592 547 501 592 547 774 547 547 501 273 228 273 479 456 228 456 501 456 501 456 273 501 501 228 228 456 228 729 501 501 501 501 319 456 273 501 456 638 456 456 410]
+endobj
+1964 0 obj
+[611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778]
+endobj
+1965 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500]
+endobj
+1966 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+endobj
+1967 0 obj
+[777.8 500 777.8]
+endobj
+1968 0 obj
+[501 501 137 273 501 228 273 273 0 273 479 0 501 410 273 228 0 0 0 0 0 0 0 0 0 0 0 0 273 195 228 273 389 456 456 729 592 228 273 273 319 479 228 273 228 228 456 456 456 456 456 456 456 456 456 456 273 273 479 479 479 501 800 592 592 592 592 547 501 638 592 228 456 592 501 683 592 638 547 638 592 547 501 592 547 774 547 547 501 273 228 273 479 456 228 456 501 456 501 456 273 501 501 228 228 456 228 729 501 501 501 501 319 456 273 501 456 638 456 456 410]
+endobj
+1969 0 obj
+[500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.8 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500]
+endobj
+1970 0 obj
+[611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500]
+endobj
+1971 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 0 0 0 222 556 333 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 333 333 350 556 1000 333 1000 500 333 944 0 0 667 0 333 556 556 556 556 260 556 333 737 370 556 584 333 737]
+endobj
+1972 0 obj <<
+/Length1 771
+/Length2 1151
+/Length3 0
+/Length 1689
+/Filter /FlateDecode
+>>
+stream
+xÚ­RkTבª¡¬òRIÕzX%róÔ
+ ˆ±h €<$f&dJ2C‡ $ âƒJª²,b£Kž¢¢TXU꥖X…[ÀiáËëEªVEÀ×°®®KÿÞ5η÷>ß·gŸæ%gˆ l,ÁP‚Áar„ T&“rØ€<³Ù-‡•‚¡aJŽ@àVëµ€»°ùBÞ
+!O¡P,݈#©ø„Ò'E| ÒÁ8¢R¢@¦$4°Žì¡RjS!0ad‘V ÖOÞÈ
+³U_™Ÿxà¹ûµõnwÚg‹À\&s¸i |5‡M7¨û;(œƒi‹mq¥‚Õráì…~7å`÷q —%.¨¹)Röûì.º`ÀËòa·4?§$"V3ºàx…›ªf60¼šj×·nhÑ¡—
+ë×廥Õwr‹9éûhëSÆ_ÓþX²k泤—/{_¼5S[©L^vž'gÄúú Îôñ¦·³©Ž×¿²zÅ+5ßÜ'DÁ½N«Ìmº÷g7É@œàfžÇ­c_yÛ¸”ÂqÝþòÈ6ø~ßdÝ›(6Ø â/£ŸöW>þÏåóAn²$4¡7å\ômß+µ «ÂÜk f&Y›$’ª%M³±žù^Aî 溈£f·íR·¡è¡æ|¶ob|Ñ ¡ß¡îWC¿”ÄXGŽú-ÊuÚº m7óaôr“ÿï"kSŒþµ§¬?Ï[¶ŠÎf¬ÛŸv¢&²f‡ÎøD0gßqAýcŽCyöùg¢¦ŸÔex¨ó‰Üü|9½¶ñjíÂ¥(êee
+>×ÒŠâèàÉqS&÷Ügy‰©oºƒŽ®?\mÚ³ùÑ“Û+íÜH:õ÷ ¨éâ/Krßní ×;¹Š›Úlèýã–»?÷!‚­ç»ê½ã¾[ÔB­»ø¯±Uë\Wu´‰­÷-´ïŸ AÍ•ºZä1x%D™êcó´ÊÜ”>óD­Íéæ‚väõ©ª+w°gÕi?/bÍX¥•/•žÑ.·›qwæØÓÏÁçø–C×#ø 廡à;QF+&ïuMèóܯŽvüvv…L-{› ß—2_e4tÎËjê*]àRneøl;û™ékî7gÌ[ìæák¥QÐöšö7ܯE(œuœ­±÷ű¸Ž|‡s
+WS©_ æ¥uc†u¥ƒ}Çv]Ίù¸ÀzÏGáY*.yc¯¨j·/K<º5ªëÍ{/U;ªÐ†â¥Ñùª¶;É[WËêNîqÚÉ9¬É.îš[Ð<ká®-¿z<Y–)¯øvCÐ~~¦â¼„×<çGïÅEJÎ95T$®>”z_Ü‘ý"ø§ ÃF—<=g),x9¨é=ë_^,¾Ú)ºÝº—VÛ¥mª.-Ø+›[ã¶ñƒp—#íW…×]÷´·ó¾h§.#^½I8½Üã{cJ'¬Ûü8¼eM„mÁÂœ×ö6ºµ3óòD¥!]7wh’:n”åý†ÆȨmUæpbòXAm³ðŇY>¹ÿå)Õü±‹â–¤ë=_®ÛÅeKbÑ“ŠJbU7ožmÓ³¬¨#ùUÔÚþÿÍé'»
+endstream
+endobj
+1973 0 obj <<
+/Type /FontDescriptor
+/FontName /SYFPBV+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/greater/less)
+/FontFile 1972 0 R
+>> endobj
+1974 0 obj <<
+/Length1 818
+/Length2 998
+/Length3 0
+/Length 1559
+/Filter /FlateDecode
+>>
+stream
+xÚ­’yPgÆÕD‚¢b•ËÈ”ÑH²H`‚õ€(ŠšD¤Z—ì&Y »°Y$Ax¡(Å^(*V¼Eè` Š*PPŒ@”p‚x÷ØnPk‹ÿvöŸ}Ÿ÷ùÞï7Ïû9;øK\½"õ%pÊâ@^@(’„B<
+õ@
+\!woÿSSùbjñÇ(©È`¥
+ÔQŠBÇ7Â .X"aÞë`ÓÆpj™&
+¼¯îÁúZÓ)‘˜„ñ8<DéïËßÊ!—ÍÇ¥‚áràÆ÷
+csP‡h^n8,P)aÕ¿dž‡Q&ÿ$äÆuÂtFùÛ0||õ:W7pxÐpä<=ùÚÿ¥1$‰âÔà{£#ýRË0z (ªF¥ŒF=!™¸&ãòÖ“ñósj5áš½­<ÝÝhZRC´þá
+Ë%®­ç††.K_ao–è²bÿŸ™?J²³zªìxj}š&”_Xp´b´ø{*Øν¼i¤Õˆå¥™ñUùsr:­}гÒÒ3“‡ ãRï8\BOw—v›ìÙ:ecWÛøà1çƲq-io»>{fŃò@mŽpUl^œV,¸%v«”>¼`Ó¿¾a s^O›×½vDφš†×r³§§&ظ?ÂgćÀL86ð¶×ÇðH¦˜Æ¶‹þI—ëÛ$bó]—¼ÈÕù=Û×¢o
+^~äÚÙÊyWˆôÄrͬ ÉYÍx_¹Kv1›6©†5ßÛ³ùdFê¸}hØM“¢Öâ±aù ™`GC^J@~ûÜ-£úGôm¿ÞñBdyjêñ‰¶uNI&ñÒaÂg/›eŠ{éáßFïœHЙnÞQ“|w“G,kó™¹iû‘¾þ>o¦Ë­ÈêÆn·)¹Uá,žV³Ý.L3˜µ=:›e=`H3¯rjh›,`Y\s4g¨I¹~±Ÿ[ïX]dÝylÍ,ïbÇÄõ"m°»¥RàTÓÞòά$”sûoÍ&þj
+endstream
+endobj
+1975 0 obj <<
+/Type /FontDescriptor
+/FontName /YNRGLS+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/asteriskmath/backslash/bar/logicaland)
+/FontFile 1974 0 R
+>> endobj
+1976 0 obj <<
+/Length1 1612
+/Length2 17995
+/Length3 0
+/Length 18835
+/Filter /FlateDecode
+>>
+stream
+xÚ¬·eT]]³%Œ[€à.wwww'¸àçàî<¸»ww÷àî îè<ïÛ·oûõ÷§ûþØcìUUkÖ¬šµÖ9›ŠLUƒIÌÂÁ (í`ïÂÄÆÌÊPÙ™¹‚•ì™ÔV®€¿F.$** g © ÈÁ^ÒÔÈÐZ
+ÖÀ·²ìû¸ïƒ :fB½s65gŠ¹†Îµ™xªÌ§Íá'Ø'MÜ…¦×’SŠÃÁMWzʲÅgjž~Ñný„” ålѺúŸªÒîXKµ:[ç5“G»‹Û>·Y.†dKQúñ%!GPÆS â˜Íg‡ëœüÊðزÇH«< ô: sÄ!Gš/\°ÐãVäSÚŠÙé ±tPWÜ6?êrÔÄò—§}«)vz_EΊ ŠÃ‰1
+ëxùŒdÐ`ÏÅt0ž÷4Oîï<kóª?nó<Œ
+í…*i…ôM°3ÿÖsü[Ã''Rµ¨WÁ²ôÅϳBŠèÙ.Œ%hö#ð𯆳›_$éIm~Q¼Oª²I~ßãˆVÞì-Ñd5M¹´[Ñ^HÐÛ,¾#Áh2=¾_…n ãoÄ„LêX ‘Ñbfc9GÒPìÎÓ?]q’ÏÔ¬œ*&®õì š¢uæiuÂÙ?Éð4ÁE¬ÝØAœû¹˜ng¡ÎÛhjU?SGÆÜ2ÔPâíá}Ñ|ÇÓ ð~ù”Ô45¹BLÛ½E>UrÁÌ.ÎHò­,Ì^Ýâ6't\ƒyâcË$A…öñþulùù!IA(ö a¢#ΦӨÉÈÈláýáhÉPÓeðÜjÕír¯ëŠQi-!|qje•¿h°‹}Çxq0º@­F`=Äõ‘¢ú<`öÄöÆ?&õe½œiå,…šŽŽ“«G>òó¶#ã-UQa^4»¿ß¾Nrùq0õ¥V¦¦ÿðšiKa—¿óˆU{ùH–²·û#j/Aoë *c°ôFÌùÔü¢7âeäÔ<¶iÆ}ÆD6naåiÉ°:žµgÚwÎìm6Ö„¡ýç_™Ø¶Ëñ‚Dâ»Ø'C
+1ù_çñ•&
+BøÎØÊ%kàˆ”"úËþº\An¼¤ðò‹çk—èy;ÉdßN24¾Žútñ  ý*«Åªk¼ýÿ„œ^5»$ô|g>nP‚pTIf§‡Bù7²:•Þ¯`1O±Éå—uó'ê4·+¤XRüÓ)vè<WÕ§Q·Š'êöGïÀyîþD¹±’"Q^ŒdIQsæà A)V>R®5©¾¯¤ž<AݲÑFˆ]¯lÏÚ×fPó«ò¬–
+EŠžnŠýz:7Bo·«^ioårukN•4jÁ+í5c.l7×ôËê$Z?á·(N|qM¦¢´°byvŒÍeŽ'érÎi—Ù2:·‹
+<û±Iòºs‚ƒ
+õ5ôlŒÅnAD” ÃV«„¤6õ »¿Ó9Vkˆ·R’–ÑŦRýïñ0Ò¿ê<XcI"ÑÖm73*·² ¶W^rXuw.°K/*Å6{]yãH¸¤ÇÁåµì9UÙ—»€¢L x”híǶ×w´ß …teé‘Ǿ)iCåôï
+HšP€2ú7}­~n”34èDÈ Tz^óu±1Öúì
+ó¼ÆôgDÉúƒj3íV·­Á4j­·óŽÅΘÉlmxIM‰ê¹uÍCø÷¸i'‡¶Å¡ ,]¡YüèK_RÕñ<ùz}óKE‰(ž³ðŸ ó¶1-œŸ_uȪ;®úŸÛ¨! 3À׿…Ëyðé„£w¨[9¦³|`û
+~Q!WQ…;¾ú&úq”Ü*»*~[9¥rš
+‚•˜›ºÿÌÓÙ\ú)#ñÀöìóÁ‚ȪS4573lGGc~ãW·Õ‹S½ýÉU“—û„üŒPÔÍ¡!]ØVY”¾VK òâÖ™ ÖØSpé¦.ûBÎ1.e~F‡ož{.AI©¯!›„<âð½€ †ÐÝ  P2´nG D#N zÎY+×,0¾ìÿ$8.™“üvwe‰õ¦‘Å ‡¿_šøќٔBLâx¨=y8¶+mç.a$ë€kðäÿ< ¤i€RHêëO©¨W¡“å?˃ç>gíÖo¢Uòz“ SHôþM(¯×¯'5wc(XíIšvÝÁÄN¡,4ù®§{ü’|ð=©ÜIÕ‘Ñió[Ï€»hòv ÖÇpL—‚< QC³N±bæc
+Ô¹Œ6¦¨A†<°@o"±G‘M™&ïè‡
+‰X­‘ódÇè(ûqü¦¶»Y›z´+mó
+K‰”‰áNaèò™é{’EÒKsôÅFÛç³%n—†¶úêtÙ€4`"‘åÈnÎü‡êÝÏ[|tC$Ñâîž7r¿»69dÜ_ïçcÇÀ€ž{ü½²÷]¬ÏŸ35yË‘§ô[öv\Ð2˜ˆ pLKÛ§sÎýyXR^ÉngÍ"èGü Û?\ö9Eô±væ Æê½Ë²cv¥.)Õ³Š^m!wÞÔ©“¾Û*À±j³?ä…’ŧú•­¹ÃV«Ó{%Ñ„EzÁccþ@¦t÷·ŠU°Dl·Õ¥Žå2ÍîÜØ¥„ïLˆÆ/Ô‘ÜJ2’¦->«­”.Œ-CÆÔåǵ³'Dº. x¯’çm9ïTyýÌí¢´¬¹§>Xm þÉþÄÍ9é”ccI¨‘šŸ¬«KÅ…ž“ŽºîÐ8•¯7ÒÕ¤ÉÍZ©²³u©MåíAš7¡7¬dñobÂÁ5†_4çögŠç¶½_Úð¿,‰ Xt¶<0±ærG<×öè¡7?Ñôƒ^ó™1¸IرÈZñVH¢‹œšy «è¬Ödì‘_èéhv%Á¬{§â‡O½³K¦âz“×­ÌÎ-Ÿ\–†¯ù©ˆ¿Úå³-[°3«Š-´—ïpÕOi†NìVŸ†‚-.××|rC¢uÊ<ÛW²¨üÂy‡‡ÙP{§“ª÷Þ›Qi?ìä¯ QÄ韃V¸©wVfû`'†Ð(¼†÷ÄOïŒy"K½ÉŠšZn“õšpº½myÓ¥{cä~QÌ9ŠžÎÑ®ó`Œ'–´¨c«¦ƒ¡tÇ3EÖkq![3ä¿ñ»ûFK?jTü#ÇgEÀÉjë+µ4 ‘ÙàyOÞŠ@Û0@uU{ÖN*Þ`‡_ŸX€sUïRÝз&6š¿PçÿzŸ;0 ÆÏÖ£j‘Î|+wsËë¶Ø°¬
+¾Ï%Ž-ªZ,}Ç7’;øj7dߘüÂôƒÂoNË:ÕoôtY@ÿ¢ƒÉ%·÷ŽbŒÜéñV‚™š£­ì RÈà|˜•£ÿ0#ƒJ/äŸÄÜË<B¶›¸_Ó=¥¯.0!3—Žx„ &¥2*;–i„Èq®Hxz†@¿èÈ© »ú×ÜŽRšÉGçH°¸%ºü¨ÎmÍíqDr¿¦
+‡ìkòõ5tĵå踭Bpú©µ)Õe[Ij½²9.RþÉn…ˆ€*K'w´´/v›Š%Ç䪎ƒŽØ£R‹!Ä¿mÇiõñù ·Ž„í~ض€’ÅÕž²NÆד»ŒX’v”BYFïB}>:;Ùc÷ïŸ{QñîŸ1¶8ž„õ¸¦à~‚úìR¦•Ñï¯VÒI¤‹ØZÛÒe&Ù‰ˆïÊ>5ó~맡//Ì#qPº½Àu} ÑúáP)ÂXª°Î—¨.c+®sì±Í’ˆž¯Û…Pb5д3;Wðr«O{ÖÏÆ$˜8þÊ'Р:¾Ñ¤ßúM’-·=^Ò9̽ÿñ`­Ô>âZ1b"è¨lÔRvbD<ÀpªqÛÔˆqøöêãá$Tý}‹žý8\¼`¹ž‡qBÖ€vd œðèl1îäbÇ:ç*2YÓàIz÷»¢|ŸOÓOñÇÂOåAB VKìq õxÍ4ÑLê …(Œv¾’çà=PR/äTa¹CÞ†„´®:žƒ£Su?U“8Dû‡À;u¸)µÎŠç´€}‚D¾ βž€œŽ¸ŽfÃN Æå¬ß“ùQ‡Ù©ªaUJÞU~IÉÙ¢ù§¥˜JµK[¼8¢¯(qP­tØ7”ÞȆWššø,âî'œ0k¤¤V¢;I~ì5Iå*ø2²pF¬3_åÓ]lž!N!0åƧEv³»6`~mÛ£yv¯*êüó'öA2\Å'/pϵ3ù÷™÷Ì%L®IÀš ‚‚˜»Ø–\Z—æ8¯ŽÈíŠnôëhgg1µ²…6n¾`?Iaÿ^Üzün¤O\0㼞iÛjŒß´¿fKÙ„Jì9^QþOQ>ñO†;"Õ? ò‰e¡ü¢TÃjׇùû‰aùÏC8ÉZËápèã9ú|™Ø,mEÈŠ|fJ
+ʼîFò’Ñ ™ =hÚ„Û,›]4ǼFÚ³ƒu0 ))½þºÄGG ®Ý6Ge‡/µÊûâ\0Pw1¥¨ðI^¹'^ÙÝÚàéO;R¶öáy—Ì—Ö}‘ËXË'tSV0íÔ ï,ʼ)§Åšg&[ï9¶›˜±µ—†¥tM±"ÌFœŽ4‡†õÔƒ-JÆcúEš/òÂÐc–pÕGŠ4ô«*¾&¤<Ì“aL¥ÍeôúÆ"A¾CCâ7þDMYzŒ·)lý/xBЫ!¢È÷ÐD{6°š3炬ÓÓ*:BtýT€ ‘ÐãßFu³Vù75„5ÇÜ¥0Ý…êÝíR?^m‘:”md·zdePŤ¼˜…,Ÿð2CäïU{àtš6,Ã;Rä%é_jg}ê"ã(ðç¶ÍxU¾ñï5ʈ±1/Ákš§
+9š.¾ð¨½]Èx¬Òí}ÚEJª¶ñÁÜΪ¢o=åĶŠÍˆøx>L.b±sŠÔꤱÞ£
+^¤4ÜòmúVý›… Wv TFª½<#ÅZ³k+4ºÂzc'ºìNŸôôCìç lu¶åZÅídG×îôB®÷Š¶›C¡Y!äßk±×yAcB‹ø_y½Œ«£µ+ZR‡båzÿ Ç
+¢› øÿà3R´”`Ú’\Rcâ8Ü0YC "W%:z‹¤!j#(ÖÛ~ºÅ¼ð²ü”ìHü1y‚wí¸Ï…kºpÎaQwy#w=µcUüá¡“n1mùª¹»dj=fž\…–&¾FlÃêy]J³÷Ò§);™ô~ú¢6…@º xñ"¬2L-Md>v
+kež9ïž$0]:¿QIeÝAïF?aø|jÆAùT¤8Ìàòá«?¨’wÞã^ê!m{ÁôýÄLÆE,jÄ#‹­b†¿ŸHXû¦Ç&{ÔE™
+)÷( AyA0&fîÝ{´Ë2ØŠS²“;ÓKH&¼ˆÏXbÀŠ`=%£y–2J `ÊÔ1D'P\wêË?ŠãEWÓ
+#@
+O_”ÛªƒÚ¹^ø«ÑHEàô0Y*æcA]òˆâá “ƒƒí‡_¡ü%'~D\b48”›¼:ÿBÂn3¶]Q=dÿ.@W‚¹VdR–pg“a®n€£`BõN8å3ÏOVF꨻Ku¼? O8¦³Cž¿ÿìcuÆ¢L¶n°˜^sN‹dBG¥µK2¢1²ãÝU;©g´oyÍG”mÞng¸¤²¬²µœ)\i<Þ:^sSýuš“›¯!xj< ”$÷ ÝsÁ%'çþŒ2ƒ,g`ài›Åhí4@$ØKØrÓºÜPùh†Avçæq
+=ä2.“Ìããl 4'®ŸW‚…e÷ù¾n”Y8
+Y} ‰ÔȪk¦;Û(@ÜÀ¯b|JîÎåX­_[ê´aÕ¶16†ò3?,àÞÜ¥bp/ì9r Ø=[bž£)ÚâÆa‡6Å–«Ñ™Z.­?ÂÁ!qmhÌô0…ªNÑ>ôŒŸ2[S^7_]òø µuüp•Í­‰Rñð8‹•«#ÈE3È¿I=SÂ<Ô©ÌÊ9¿}Nê£dû ]{
+±%½÷ˆOÔï¦bЫ=–]BD  Î`…ì‚ežM›Ó&ªãû)O‡—®õçË^’Ìl™Ê“Â}RÆ÷<Ôx鸑øUŽ=wþÓåïùQÜ¡éå·Šû‡WÃõÜuíSÒ¹žöœ{}¦æƒNo;™Ç¬Ë­zO¤4>…æËB¨ÙvP _rëe¦êj<ˆ9×| Hú ÉžoJ¾%Š Žì¥$$,é^µzÂO>”vÄ8ÍFGÒ>Xȸ»`ª%"­:î­q³UdüÒúu,^2Ë:1‰–YòÐqDGÔ;M«4°Ia-³•¢ã©#-•ýH=Ö`³ÇðüT
+lÿ@À/pq5=+¸u9«Ä¾OæÓ^Yi`\Z*¼ý’JKΨ­•%ùA–Â'vÁÆv‡ªOÒsÏ°©¡ˆë”AÁÌ=?U:8±§$9×ÙÓéÝÖ0%Ù¾‚ú2Ë“ÄmqlR:ÜöMHLüâwæË-ŽÂM)
+}úïµø®Ú4Éèõ8 å¾›ŠG%5z †vOûå=-îXˆÌjE¦)ð.ôwUì›ëBKþ9Ÿz6ÏY°F‰‘…­SMüükUPOÿ7™ñRZ£¼W¸@p²7m2q5Žól3><‹Ÿáeñ1!ÜYé’[® <tiTžQNŽ˜XÝhv¸ƒ'GàGIXgô æ ´ñ-ûÉgê¦q;R[T¯ö²É7ãû$³ »™qAT(8<I——ïÀQ ¥•Ê½2 óT—5ɨ5 Ë
+Çm’2ð êÜpž—düÄßùÈ>D!€©ë3õ?¬[& |HÂåSðã¥úà¤äih¿1ÔqV4è”Ã÷!,Ÿ¤´OÖi‡µ àó±\ýY ½~›+Zï ‰3»…T¦ yëZXù¬5å…Í@:4–p= ñÀÍÄ›nŸÙlE¹ûÄä™,®{‹§L+zÀc?9ûf$|¸x cYÁfL×é¸é×°+‰ÚblÎY˜ÎeÚ?üfI‹S~+`•Áø3zÚãŠ
+×À|šZüä¬'æö r–
+b]¹ó¦>¥A“=Ó呧¡ÉÐÀ±žÆfá…ìËMï 2›™•·ÖCz®
+]»7q!ÐÔGþ<ý³Î
+ƪ»G¬O¾»wŽo'²ZiÑ¡¦I?qõñÑûýõƒ¼-Ü|¿BT€¥´¸JÖR_±'æÙT8âÄì9qØ x]ºVÑÖïLNYâê5Âz8£+¬È‰F)GŸhèÒ¹GšÄÒé
+¸_Ƚ±™z17ðê¢0ß2ÚÎÓþz“ð}XãÁ؉\·5¿­¢gÄ£õI0q1Ò?Œt¾DøÍ{´Õm%u‡px›þ±-o1‚ºQ?²i™,Q·óÙ=Š='9|šu£½å… 94éUÅôi,\˜æ7Þjèi983±CA¯
+]ùMØÅœ—⸟>ÓÿëË|R¹K‘ŒÎèzˆKgoŠÀ½žRÏýlíFÿú`¶K5Y˜II;zΙ‹ZÄ8áyµ/†S2…GaZf‹dŒÄ5d= ÁõøX]×måò£|Gñ3"óì<áó-†o_HÂDPüvg‘tó­û ÅŠôªX‰•t‰I@Ï„÷2o!?þÐä„vð$û
+)œûî4dº÷œ¼»…âB“gFôv®áæóo9âv¹‚¦H’T †ÑïÉ8Í»ÒIÏ€ò?Åó„¬D×5A­Gݦ\çï©óÊ$’bvZ:‚u FžŒÅ÷˜«•îSêzg¿$åMúvêîRlZvãâõ\s6JûX¤NC¿qt£Ò‡Èúïú1Þ
+ù½¼åŒÙ6pN÷iÌ1[^0Áóâ%›àrÏ…&ê ñ¾-Ìx} ´wÙ!¶«^˜fÝê#Ö+åæ`»‚Bt(Ò‰æñž{àîlíäð¢‘JøœÛbìî\8úL}¯n ;H7KE1Ð._캒RàekÇYD½{ŽO@Ô =Ëoy> kQðSyoýµ±}²Pw·ËREqÑÍ”I×BT‘ ]ÕÑZŒøà];ñÙ XòVIó»D§ q#ýY°ÿþ¥'óØ[Ç}­žó™è%BÙ’äÜ®oœí‘fv+Ž3Æ+) bü¸ãø›á‚bÒ̓uÐ@bdKÔ û3fÔH#«–ð¼•P‡vŸ˜K^v¤Oý°~ò»5ùèà ½áA¥¡ü^Ú¹ »=üŸeÂÚñR»²e¸™d©P¯7QÄcèòv"öJbÛWŸ®"«‹ã;8ëWjw;3,mxCÇÅC%½­;…JLïOxjxž8ËèqH &¬ã´áê‘GŒ"×ce÷ò˜J$cµ©Áiá öÔîÔçÃÜm¹¼ø²3­ˆüùmôø³œ¯"iP½‚jËÆ9BD;>¸?`
+ÙD
+Y¶P·‡!˜ø?fÍÞõ)ÞOâÁ­–îÕdÃñÍ{.nª*1³9îÏb9Êióœ_YŸuú¬9G'¢¦ÏEçZæïm­t $Õk„ ê“[¢WÊ–ŽHTèô,¢½ÀÔ¿/¾]EÓ:m¬!æëß*Ü” N{C2~Š|­,’¹‡w46žj Þó
+l]°ÿyV™Ù—ÀŠÒ£m
+uNÝEsh|†Þ½Þ¸nWd2$¨S´¤Á ¡Ú0X>”z¬£'òULÐ.љǵZÿéÐSCÕõñUðdÈAlV–•2·édˆs'{ßѳªÑ{Øþ 8GAÙL?¬çÔZ™
+ÿ~EØ/}狱IbeY]'œ½cu÷8ÔD)¬ tu½œ«RãtÓ¯˜‚A-Ý;]U¶ðú ¬^ߧF»ì,ó9ß13:cþ
+ð@ŸR7ƒ2! ä³Ô[ÏV yã9¢²)Ôé|§ÑSå7ÈìwÄ°†žd^ ƒ!s(Ž6ÈOËO‰7:f¨xž0äßt |¥èE´äίÙ- 58^)ŠØ¤›VË%ê²Löçt¹ÉÐΘcªWÑä½vô<)þí®õ»LϺl7â­ò¸lÔŸ#ƒ¦Ú¸ò¥žˆuá©”5Â"U.˜.…<ÊÌýaÐx4çcyaf2ï;< Ð ,5=ØÑzçO¶{¸›h mQÜx¬JZª¿±Žô»ÝóU°‚»k
+­¾0™wók!€ç‘øšðÒ¬‚¹ÎŒÚBl¿þ„·˜pÆ[;A!¡ºl‡†Öô¥×Žöß)À;aB’T½ö<©ÎÕØ&§À‹wŒiê[`?!¶Ee€u
+y3>ç"^8'‚œ´¤yùÉ %×ôª`çÚY+d#—ûO¥+_Ó0¸äßç}~Æ-»h^7ŒÓúÅ£QÐ<ï0€‚äƵ¿Ò äžq®Z˜ƒ@³S7^k‡~ÂÏw‹–ã*]Óç òD>Úc»äpú|º:a’<Ýñ=êéäUfÖ0—PÅ<¸XýjùÕþöÓM£Š4ÂDãB{wÉXN›À6 )6råÀO£¼s˸Ÿ¦Û`gU"º[9´yq|Éž¼ÌpÂé#ä¬ùôøéíïÌÎÿ,¥¡Ka#û’”bì‹dÍ–iæÓÒª9:Ðg¨Äjú¿@Gn±y—ÜÝ ²Tòör>O@Ætù½În㹎Àa½ÛÃY:¼‰„ùBÓC—„SîÚåvìã%ÑvQe©ÚF¸dÒö£ÆÇ]”3ÛP†óìÍBšýr‡„jú!1ÛaýNT\ÛbŽ\iLl´¿1UTDmŸÓ «  ä4zme”@÷Y9ÕëhÐ
+1EH —r•å£2©~fê¼jèÁGc¨t4Æ
+¼/Y} ª¤IÑR]¨ÿÙoÙ΃u=Ü…—Îî]‚¾ŠÌñ 䲌ü Á ¥&WbÉóéÔ&ßgH^.¢ˆ£x<˜ÊϸØ8T™w L SŒ3‚c˜-þHU :{³HÌX
+üØÛ°¸÷üŒ‹É÷>!™KʼiIªŠQOì d÷qòë<ùnnu¥¥$NÛ³gΘ‘³NWk9ǘDÙŠ]÷9Â2¼)x
+ƒvêZù+¹¶ ¨~±dÑÞ:£-Ê`„oˆ”‚ˆD“¢;¢ëê΄tÐ2MêàŽ>nÚ¾¤ÜiöknA [°|`¡M÷[½œiÀq µs¶Š®.åžš{˜m]ßšèd ’mOváT5oä©äÏM߉{§âÖ!Nbm°±±]ño¤4Á^‘Ðó]‘Q(,Šµ$ŽÄX³~É/à׺_+{K«D?ñfw‚|Îxo;Îá²×,ÄËB0À6:[¡Hôìò²r¸FãFŸ}(*ÉhvY@d“éßèÔ¾zÆx{¾ÖsÈ—ì/oJ‡Œå½xwš…¦†B¯-Tú‰à’ØEPÜo “•WÚwW·êZá|ý~¿nùxÜõg¹‹ëœwZ™à×>aF¤F+îc yYßgö&Ë)¨å¶;;C±>$B¯þ5]Jb_Ò‚¶Û3´ô4Ç«*ü¦³ƒ–Dû;Ͷoì鲑…1Ô˜°
+QpPŸja€hí¡ŒÀ›Ÿ·Çèñj¿3+YPÿhä$ÙøtÇ¡åÑkËGÀ¬ÆO‹&v7n©Ê2râøÎÓoÖã·'&Ipq^0‚[¶O,A­»„º*ÎPçüªJØí›MßÖÑŠî K¡›ÕÖçÜ—¢„"ŽÏPkÖ¼ñŽ“tjßÕ%–µ©ºg4¨H¢V"JJ$w
+mºWžœf¾·+2l¯{s™gb ñ:¨7œ>œäÌïDµ˜39ðNWÁ_Z¢Ôðþ0¾ %…ñoÑRÃëª1F.1ëÙLš˜W€]GU OÓx3è1øÂJ!¥ 9&™%¸1¼¨$Þuåܙ肻Ãê….ÈW£†ÓrÓ )Ø-ÖGt´n!ZV™ø!¤Á¦å÷5ƒYN4ƒÀ­ñAXl¹Š|AZ+#eÊÕ™ª£”êÔõãÙÃèE²³­þ3¹Z9<º[[&-™¢¥^ã<õÆgo1'j[;¶´™H[D²åh…ô‘yĦ”º ZOæö“¼îÀ±Ñåæ$ð ‡u‡?{%HÉÑŒ-®"*ó¨í’Öôö”ÇNf¡HzÒK,75…‹üÃI8¯`ÕÏË@fïÜlj¾Š1&7z×gÅ*ú§ú2˜Îà+›ÂzÈGyÛYå€wÇ k¢s®„dlÄÎRc®6¬®Û—¤¦&¶©‰A6Żֿ˥O®‚ÂôPñ¹)u°{‡Úuïí³4‘EÝùôg]N§‰Š~˜á4<¢ùµ‹=
+tŒNjÅ_—ëBÝ=pŽL<!kŸõ¾/;B:§O4¬8&—7>ésªXçÄ„ò¾ ñ<M÷á’Û:D'zÍl©UM¤$ììšÏɘ­äsyŠË*Æ;GŠ¤_P©+áš[X,«÷å²9‚µ`oŠ5öçƒO˜D ”Ê£êE~‰É¯äžEË4ó`»F* AŒ=}Û›Šáp1fÛ£”ÌUâ§i:‚„f
+¹McìQ§½;4¯¬Ânå 3˜úCzþý…'4[vhß-¼‡*åÕm¨z;Ÿ\a×Cl‘Û_wižÄ)Ä«Ù‡G—ë"« #øÕo"!RRá/þ|™4;×Ü(õ½qïÈ‹¯ ónž=çËét=1ê£"al)[D™Te< ã+3n¼Õxß#Ez¥-åÀõ¦ÐBÿ,BHf=ó§h\ªÒG«×Þôú܉&0øY5i NqLD;jãî³mÇfòж®1/S·±ã»Úò¾µô¯XØÃlZ±ñç±W ö:XMÈ›ã=iyÑIØmÓŸ$ìˆ}×Lê4tÛW…7\«\êË2)ýWÃüÄO:’5;6›ˆªË0¿ç†Åeœ 7v¬šÃ<óŽ^3¯–¬àE$æ¦5 2¤”C˜¬KàMLƒ`ð#ƒµõsÕÐET/ˆ•óCž:JèoHÐÐÐNºñUßÑ`˜Ü¹û„ﺄY@ûÌô–žˆä‘¦#¶ž¸Uu„ õÕHƒsóÅã
+”%Ó‡xþ ´ÙžÁ+R…”s;Ÿav—Tp³L;ÆgÕ­5ÍŸÌœ[èx_ñä–ù™ÑÐ}ýU9Œv
+1}
+°»0ZI+2`<{b 0ïì¯å0
+,x…¨1/æþácÒøúëÀCjÏå ™¸e~Û¯Úmô몤Ϩ=lË“©åð‰¾PîÛ϶ìű
+‰ÿ˜‡I'n§ó¥Ò\s¸ª›‘îäÿŽq÷ÑZu娤ªqb™³€Ý¡­uYšˆšÜô3¦5ß»£(y/RYf¨I^¢Ú’lÂa4ú·Úó8yO4Š¤ûÈúâÏÔ!VËååoï‚OÒ Ý×I°Rß~5HTfQ×>ž‚zw:ÝÐœ—†•-[JÑŸ*pØí<¾2™és{Œ¯ˆlåáÕ‚_&`YŸRègRUEl
+ur\Qåe^û UÌžoãû«o¹
+â Ü®
+˜§=.Xø?i“úï)ûVöãà²Q‰¸= S|
+›ÓÊI§v¨¼f6Ù‰Šg¡ôëªCê ìºTé4݉uuŸ/cÈ¥L|X,@¦,¸Ñ‘"‡þH^ÓælÀ(vFs?Ñc;ί5×HâC—Q‚;õ;»È@ìÜ)QùÏŒCEé»n¤!Õˆk躪zQ”¥TæJ¿T!ýëÎEÂÀ|%Æ{W½ß¡¢;ê*&þ³6Œ•O»}ƒ^ÿ€í–šÊ+˜ß–3¿G˜Qª2àb–k<ªÝjxßê±Î7`òð-óq ǤIy±VǺ*{e{üªÙUÚïHÊ]4é}M25µå˜<£u€dÑ@ÂÜ<âšsN§ æ±;5a¡6’¥x7§X„Þß –L¬–E¸*ÛÌcºÄÀh×Yˆ˜Ý´š€J]éQ;0OS0.ufbyšá9ù^º&aú½mævüëì%]è¤UŒ—š¢upŠèLj¿X·¯ë’Ï^JyQÄŠÙíÿž”kº&xp @¡(é·0¬9•Jò„èé{ íÕ n§—¼sÊ>Î*ÊER­1.pÄPKÁíäWÏn(:É÷B†ÿgÂp„tË$û¥›*x‘ç'9uœ³µS™ öƒ ý­z“CoWµó¶\ðâhiŒìêÙ?…ãP ž—+eŒ}ˆzO²žèõÏðž²LöY!ÛsØèù\AHüŠÛêwƒo™g¢‰é^üÎ1-*Í-0ƒ_º®XáûÉô;_ìw8Û+õ4kmÙÛÎ>’1<9
+ Ž½OÊ"\i&les!ÙÁÃnÊ”¦S‘ŒïŠK^oHk‡äùÌ:BáÞ󌣻SŒõãMLƒmÕ;îŠqEsë@P**„6 áG=V,vÐ)ÃnÛX“=UÝJ‚šÌSZÿa>dU²D¹¿NÈ¢y~*‘Jµ¡!jó¦ëé‚t¥®6/Ráuù’î^T@åïÊF›¶t„Ioþ|!W[–<sÙ‚Î2Š²éÈ—öCðÞlУÄC ¢¨)°~<|¼ÙÌÈÚ[BÄ^à
+ºÊ0ϲYãH('î‘“²__¡Ô2—¥Ä>åT!uã…WªgqõzEê±ê3`Å1E¹rµY¬PñdìuN”ƒÿV-*™éQ¹úx4²%Mù8pì4œ˜y+
+gÄÀˆ—’H(øÿÆÝöc-3YCOXYÆ®÷Ë”ü—nE;yèéu`ÍÙó&e@v+rŸ-ã…DïÜLQgøÎ.ÉáG~+çGlý 
+endstream
+endobj
+1977 0 obj <<
+/Type /FontDescriptor
+/FontName /YIQMNR+NimbusMonL-Regu
+/Flags 4
+/FontBBox [-12 -237 650 811]
+/Ascent 625
+/CapHeight 557
+/Descent -147
+/ItalicAngle 0
+/StemV 41
+/XHeight 426
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1976 0 R
+>> endobj
+1978 0 obj <<
+/Length1 1608
+/Length2 11068
+/Length3 0
+/Length 11895
+/Filter /FlateDecode
+>>
+stream
+xÚ­weT]Û’5nÁÝ9¸»Kp÷ Áƒôàî‚»%xp'8Á]Cpwww>î}Ýýz¼¯u¿{Œ½ªjÍšU³Ö{S“«ª3‹™;˜¥ì]˜ÙYØ
+
+Ìçä%Ì
+=ù@w›ü¾\PiÉãG„`‚ó8Wf1ÃjgCƒØV’D$bÔDG¬d³JùË7¯õŒI3
+oˆ‘\'áÑè´,ÐomíPÅÊÂÅ÷ÏßÁá"LÐ8ßê¶Ùª ‡Ì ÊH"?¨}¼±æÑ Ú® oÈÍ¡cùCÙAAº‚¤¸A¼wRÄ÷»J¶v#ûèc®…ÒA–¤÷Ú´ªõË Ù˜cýPÃø·v'é³ý
+óá®Oýèƺ<䲋!',k~
+)E›¬ÖKØ`N\Ô¦`(O‡^Úœ§ïêETZþG"…óú \*qðøÜŒ»È£±[ æ!´ll•ˆÒ‰‰®–вòÊ (âá3²Yííúƒ°þ'6ªØ¼±}ºÿ)
+Q´Iì¯ÂS ×9É nlo3åõ.i+<gi 7cbW kEÍ»¤V%OdmH}/×ȉv^j
+#Q*Àö•ÿÎòQz¦–e ÍCöjFÐ
+¼óÆ>Ø]ðàå¶U`ì E¹‹3s–ÀEWôÌ´aï1ÉwÝžúÞ⊶ùý©{ü–6Ïà§\ÁtolöPÞk!2ñîÏB©#¿–ïsè•ñåt„’Û§bœ£r4?–òœ‰Éñ£¾2ȹhBN”J˜OÈm3è,œJ_qšš©¤jydOú¶$fÎñ9Q­ØÃXK|ta““d7q,Ɉ"ÇK‡‚­%õ¾åûð4Ìëg0!:7‘\N”>3`ú($8Õ
+†áv§É~W:©­I"Aºªp2._yiäîèïI¢Ilû‰SÞpX
+wÆg~ÓÍÏêlOwL€æh¬¼M©~=Ï3 Œb"È”õi¾“NɈdVl•i=ÕZ3J‚ËUtØå<l˜fL´—ý¯ QDÎœ~¹8¡´Jü½åŠÂÃþ£›™ú¥âB¿à™«ÌãÍ©ú°Ã³€Ù¬ßŒ›’{ø·(‡¾ŒaolYÜàEèWªmFU=Šg píáµÏ°¦30"ƒÖÏm”ò¦Ø“UšE…]¤Ù³E·e-·âL£”H•xŸ†zƒc…F–_m‹PZ³
+7…ºó[%%e¬¶ž?û]^3âs Èav)Oö¸+_ªð„B´¢%&-ÚT]6ÅôL§ ÛI[VÅty‰÷ŽÄÜF gLHºÜWàÛÐDÄlVn…o#xìÖlèfÂÞŸPs¨[Mwl K¤g>%W[Òfè¼#j8T¡?Ðó
+ºé¸°‡”5lèùuõÒHˆ þ„èìò¼|ŽBµ ˆõã}¾Iq¼¶îçfÞ¤ÞC”_;\3ȧYÅï*{œuøývŠÉ/©OÖ}·°ßc7ŽKéÔ:úa;Ô:Þ}­/ä+.]Ÿ†8û'¯vg9ø7ÅD‚½cÔÒãô•³Óռʑø”búÏþ“§
+\ÕTµîá’?ç<‹ÃsõÂ`ò)z%k8¿C¾ôö8Baž"Zp×®Ú]HEÎ_öäuL~¿½\äEX †Ñ ˜$(nI–ñJ:Ysi£c'V‡+S”êRz=1ï¹U¨Ã=€i$ hK’Š†$ðz"î5ËÛ÷°ÇíV‰iñÁд”£® %Ç > “éU‡ñ¨WÏO) è5ØâÀ„‘ànOëULŽFd$—¾2ó/õÕÌü ÆY¹_Ÿøº*§.Ÿ²Ò6øͯ\øh§Cª„;XOô˜¶ñDÚ™²Xdˆf{;é)µ$æ™=GT¬)»’NE;s@#.ujÇä¥Ö3€î° Œí\G¼üca *EýóϽ UÕÞˤ̑ ÇE·oÕ‹ªÆ _t19^Žé¬Ò)Æ|µPîÓNû¼nʾ_ð1Ü0¯oîMƒC±ä¥&âŽüôJ™{8£fó` Fתô²•‡„ûþÚëÀ!å$K)îPš]‹o6oM>UÇê¤Áõa óckp4¢wŠŠL”Õúbœ”mAªq$)•2ùìÒ#0Ð_b°0>ª²ô5›ºÐ¡ÍŽS…þê` ÂÐJ)zR ;3U^{%;—LÏ›rø|k­TDøLãˆK"§ ÑRWHЭP•ò‚™ÿn
+_ Ä|¾VëEÃÞ;¢‰uíψ…ÇÈÐSx+Û—¢ÍêSǟþ„q¬¿*–w•>£rú }ë¡ÖI¦ó-ëLAwBž[NÂm#SèE—ÏäÐ2ºl“ÓöB³¸fÒÁ5>σíx3¾§×RoÓµlíNà ‘5ôô–{×ú¼ÁöíYaè£ËÒŒ¢7¿ è!Ã
+bˆØ6 
+
+NÀ Ò¿¨Û¹ á«D—â&ÞnÆ¿b£"†ùãKÉ0™`QÃï‚|+›FT}1º‘<4ߪÖÇíáS\“œ`,KÿÕØ•k'â-¢-ç€]=L ‹•‡:—Ð D”CÍŽsˆˆ]ES³ÖÚvïq¹1Ý”ÀcóZ€`yÌZ±—_XòêENN§4?>wX‰C¹’”Ðr‹xC=‹l°qk”P¡^LÜŸÍzs¾ßÉQ¥Û÷°\IªþtMÒÈ•û¡€]²³ðüÑfÆñÀiéVÇ´)BŠcÝÚ盎¦Ar8w¨¦y7ëäOáÓ4‡
+Ágƒ¼±Ìɼ¶*?ì‘Ò}/ÉG¨/žI†Rwô"j XHª=?èW}
+ê§Ý‰¨á\´õŸ|5àÞVø•.Ør¾FŽ<¸¢á³OŸ­a»('Êø8üšòp“Kr!H[CŸ*¼…ߨe¤7#±’Å®&~öÙ8 Óífm‹ÿOo¨‡K P9¤£ú['w‰¬Â©?[Ÿ2«bqú~so
+ëKš¨ó Ã<PyfjqÂé
+­¿GwÇê­< mí:\›DCæ—>PÀûw1Jà1u•0>)î,Õ÷®³Dü÷TeßìàYÀp95âødrtôVÊêå
+äg;­pÚfIv¤É@Kx&³ÂF(”Œûj}òý—È”Û(äå(PÅ~¡OÚ8Ž3å®Ä×&¿.õcTýþ˜0æ£ÿCÝë£dÃhæP!3–¤ñÛq(O1úÓ§nŠí GÚkRÙzú,-l5Y™ŸVÃA<í§£`åµ›Iq%c÷™^œÊ׃ˆ¢Ï…i%õrÀÝ Ú•ñI¼.?£ö±¶Âê`åÂ!ÙtO(BüCuŒG“iäÄÚ¥Ÿ§l ö†Ü}þTûÇŸ”Ï9iy_MmHÍÐ|üzíþx@]d<XßÜ2>uSb¬_ðm¤ï˜£CK²åüÔ>ß<Ï23+þ*þ«!轿T€ø¡X|•ÂS:8EyÏšÉÑñ ù¡/uŠõ&>ï«WÉü‡qTÞôìÚþ&¡“¥þ§UÊ2tÕWdºÒÛXQâµN*"Ì[î*¥Ø¸® ºU韧?äŠÁ½ZðÒ˜ÁÆÌ)Ì.ª<ÉÄ¿Xeÿã?mXœâ<˜#ëN6³U1=4Y"fì !·ÆÞ2"æá «üæ÷JÝA7ÜÎn+Í>Êf 3¢?Q(Áœ.lÐ G7UÐô¾Süøº#’¼é’H*Áp2@5Ëj ¾
+Ï”hß">2±«ïa$ù›ä„£duqé¯1”M£RD¸àV8ÛŠI¤6–\ãõÝ’"¼~^µ!¤ ÝƦI®[¾$”S?l?É°tßN¾#‚-ÍcüæÐðpH ØôvJ´:wŒÎ]¸š1È*LÖŒ¤XÕ\x£ï÷œ5?I?Ãévœ¡óœ–ÅÀœ' >ÏSO Ó ;^]ð%ù%«‰2ñÒÐоÅ|ôGÉõQãìbž"Œ`vvw?† •ªTPºöß`‰9šáùºÝ €Œ¹¨î.Fãgîœ|«UÏ‘t/~0¾¼CO׺JfeâÕ²!ÏfŠ´'ì--†&Õf)‹ÞLBÐr
+¯Ð{8uAží¨v·H ÞáùÄS~÷0™~kSœ£­€·Rd ò^Ûä‚ë3øóc;ÿ­1]ùòkê2ì‰(@ØFªAÛ~‹)³/ /§e0ƒÄÿ°R­äDŸÐ˜hêu^©`s ½r~ òùáH9Ë‘RQKñJþéI_©çÙâK¢¬Æ×bUó×âßú8æíî8-^ùmÇhc­ëÀx%i¯8>ä5Š¶òr[:éS
+¤b=»ÀüBñ œÉ†ˆeü
+º2Ê^I| &AÖòhêÃJÀyet…õ š$ú÷Æå3D¯«|ÇÞ7æÙž1>ìžá²36„ãúp¡‘¹NµœŒ¯†q|ÉbùŒ“D™7ÁM¼à›!|Ç”1NÞX­Ã_Õ“gK`2ÁO˜¼¬˜Âl„Q¤*ñÐpž…X8Öù¦ƒdxÈιa’‚ða° LíJ¨lœ gD_­®ÂÉOMœCo_{6SùF,`1îŒOg·0‹ò
+½LºyΪ<‘{qê×8ÃYîræ« ×ð½ãËø ¦µªdF΂•%_LŠMpc¤–Íà¹Ûs–;¦9®µ ‰~‡ ûqqçZ`ÂHæzÑûkӵǎÉëñ†0VQ%a4’O›ŒxÁ3b‚:ížH&ñTdX
+ï槫mØŒ¹$b…­ 0úBz‚Nö,áf/™JÉ6ï&Ç}ÊÇGÐÒGòŸC?*AÐ7 C¹’h¸7uvl
+»”s§23 ‰¯Veçê)SÇÉÁ Rѧ»óÇnPX[-
+ZyÛýyk_¬˜CbîÓ-…ÜæŽ)ºuÚÝÓ£A<a!ô9/A·8Ú‡X®ãÑžGþkâfC“O é•´½4BdÊÛj|ý¸¼¦!Ò^ž#k¼6ÐÏ:½òO^X™hˆ`ª]ŽUŸ°ƒ•÷~¤WŸy*E»˜ro”\­G•ï”ôÍ)2[$—é7 B}/Iöò `,r5èƒî¥<&"ÊÉ
+ËDƒ¯ëWy>
+CxM¥:Å´ˆçë©OÞŸy':›_a—4þŒ"ÂY¿}»ykªÛÀÕ„½WãuùfVdÏ·¸òMο"8E¢>YU  übÉ~.¾QzáUL†Ü#Ãõ¹> @uùžb¼Ïþ(0(¡Ò,òz|íM®ÌS³1gȽl•ï29G†A¢wÞg?96 “®8°jDSÛIð´)åUÏÓÆuÄ÷Á€
+BIôÉ”:åN‹¿ÚFd +‰Î8È„E´\Ly=æ´n
+ñçüC]ÙŸ8©K*™ÎG3V©ûòÈ}‘,cù(?pÎûlIiÃI—c|¹'Du\爌vKÁ[k¹ç]n" »]vÔ^¯~a
+¢è³J‚l'¾“ˆp~èAš {4H±3¢g½95ûŽ`[¦¨ú´ÂÀ?Á4 ò%Èð8¼¬©»»ÂûúŠ)Tõ
+Ž{±ƒpéS¦;'¤¥T»@Q©‡ªK0¯ÑxšÕOÊ¡Ç™$e>”'Ò_üXŽ·¡jˆ„çBh÷¬^U¼ˆàzH&¢ÒP{„jX{ìµ£(Ã߯ë–8ßk'Ð:aË$nMº5­øe³%ö³é>g„”ÂŒ¤àþ’7?wÝiCÞO.ônHèkL°\ÒH3 9¡ßhDÄãwhzùÀØo\ùå®ú.[5‚¤Þ5»Ô­x/°
+9«²¾&G£ÄWíî''}LœÐCöM1¬ùe{0jïp˜ûsMuˆxìB2Qy¬¼€ñ-ÔuÆFU¢Ô¸à»7ƒx1ØO„^Îs¥È00¼Ár™—f£0ΗÄ7¥ìäaÕ.€ç>ÊmTMùÍ4Ç[¿?È ´f7bÀ áˆ3†Ÿ¾Á®Ö‡Ñd|xc]Ëð6ê»p!ÔÜÙ–õ.eZÅA.E`”)kœ6º YDä Þ¥‹ß¯_c, ËN ÝØ)efUoêC¥ °¦v•€*HP:Á©6 Äe?úR‚˜ßîøs"·ìQéL5\ 3b[þíiª°ü ªø,ã©‹ÌÜD¯¼‰ÈÙ€8Àž-Ž…HãSÎçdò
+[›>2WB¹…:ú€ËŸ×\CU­Z™Ïyú&6U ÂOþaÊÙN™Ï32S¢F´+ìîÏ'°!sobýt«|Óõb8³¥îDY(îGhŸQƒ_Ù%³‘¡WºèÍ3«v«Måì£se]F 8Z¦>Ø–eA³Ò¶8®dD_½?a{yÝü¨t¹40‹¿(ˆµG8qV@ºñ©Ô Ó)Q­»åƒ…uù vÂÐáûš ¤¾2³ñÁÑ«á}mu-b˜M‚µý$5 £¥ùZZMLŠY\ŒáO³uLåÕß Lì2‹U' Ä(™ô2q\C΄šLV?’[ÙR°±Äwç« ºtA—óÛ¨xcR89¡†]ÜÅãÝ…H-vÞRAöHÃ@ßê%ˆ_ªŠKÃ8
+mPöŠ«ÖŒciŸÊ6È©Ã|³‹Œb¬ƒˆÎô¤yíAƒ|lïc)`Ð
+ò¶jHO¨a“þu˜7è*INcœà¬Û¡›"•4ÿ‚mŒ3è•“!|—¯ý]hY@Á½0KàX˜Óy ˜ÇnÑ›æØs°Äaª<Ëè³ìÏû³“UÓ·Ìq)J€¸m8Ù̃ Ò/ôÙô1”C“ñÀivâç3dö7L1£ì‹+ôzÎ Édñ¯Ö_ˆ´%ñÐ1²WéÑ´ø~Á¤®c{Œxð"ÍR bHq,L áù8ÒêTL ¦t€S«w˜µòy˜ûÓû ìæÏ áGªµgö=¤¶ ùÈ–›(³ëk<@mð­×B«7S ‹3vµÉ‰ÌP¿tõëßF’9YÎÒ¹$dç 9ÀòÔwæ¶wøYw,4ˆ´Û&w£^öÀš=ˆ²"ø¨Ó†t¢†Ü áJ„>!$+=†÷ÈðÝ6J ùoö}¨B‘ºËú]Æ—ªXj÷ÕÔ…†×šîZ?¯-Ò0ú)&v7½²9°xiìUÓÁŸ[:%­HC´)}˜¥ßˬ)eu\³7ù“Ì×
+ÍEƒÐYïLivvæd[ ºÛ`¶SÓo©ïÒ¹þ(Ø!Z¡šsÕq°gÙóe%µ 8¸u|4owaúØMz8T}ŒÚûy´ÉÅo¯F¢P舳~Ñ̓õ3–܉Àá¨kέ:ªM\M_¡ö¸W7×ÏgYœZd·ý(\AY²^ñò×Ëùò%ŸÚ5;Š}k/©|ªé~¹ë¼¬Ícáý¦‹.-áw(뤷$_îlã)ÄÆ$e4xvç]*!q"±ØK2,l°|ÓÌôÑ’Ëæ—ÊÙsž¤û¹»%¹íDÒ
+Ä—
+ƒýÜÃ;,'„dbï|ý_ÝŽzבHvÞÖ£±Î`»Öi(Lâèõï7g/:Iu®¢0=hüô§¬I­}|ÉÒºXjMöº‰Ë;M`{åò
+£-0Œ<¸û¶S¯pº|‹˜ Û&Z‘ØD“1ÄÙìmà¾%+*¹1‚é%i‘U(ƒ¬íS¼|ÛxrjªÙou LŒ¤9Ÿâ±ãˆxqÆÐo°¢CuîI4âJr¸Cx,ŽÛ ìts‹-ô‘îø¢t9-—}U™¹ÌY%5ßÅ渣Ѻ´c1«…oÔç-\‡¡™êŸá]gÃ]t|¥<غÜž·/¦JSè«A.‹®ß’£0´;‚0k0õx.LPî )»é›½=
+üìì–
+à­åôµÄäS¯ÈÏ+"%GŒ–…¨üÚÔ@¬˜™ÄzYjÂm}kýñ5Ü¥žÕ¦³jÈl¤£jûe¨}#³`7Úi,ч©4X[±¢~6ÐƯΎ 3eökð]­k§sÌ_ãgš4
+?UY¡h‘CQ¶ƒ¨ì!ÀP4YŽóÄÓPÔó.ÿ! 2
+endstream
+endobj
+1979 0 obj <<
+/Type /FontDescriptor
+/FontName /IKHYGL+NimbusSanL-Bold
+/Flags 4
+/FontBBox [-173 -307 1003 949]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 141
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/a/b/c/colon/d/e/eight/f/five/fl/four/g/h/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/seven/six/slash/t/three/two/u/underscore/v/x/y/z/zero)
+/FontFile 1978 0 R
+>> endobj
+1980 0 obj <<
+/Length1 1625
+/Length2 12510
+/Length3 0
+/Length 13352
+/Filter /FlateDecode
+>>
+stream
+xÚ­veTœ]—%îÁ] ww‚»»»TA
+ww <¸[ ÁÝ nÁ=¸»ò~Óݳ¾é_3ý£ÖzîÙçî³Ü³Šš\UƒY è`’v°wefga
+x·[:ü#ÈÑÙáÝÃî{'Supqu±p;ºÞ£ªJJÿK§ë'3׿±]Àï0ÀÁòÝè`áö7¥°wšwÔÕ lïpyºþe
+ Û¿Œ`i°'¨
+vµø°4³}¯Ö?v­w%ζ`{Ð{Wÿ)(€™íß0ÍO` û¿åçþz_”ÿ¦ü½QÿèfU”—ÒRÐgüïvë?žªï3àªéåø.îç¢ä
+;Î|”ÊBç4ºÝDç¾L<”šµ`$F”|ÅDýa esüFw' Moï•Û!ï>¹q–Qiú¢]‡“YWNð¢J4A,²öëTÄ-éD­MqSïVe YBSøž~œøŒæÎØm+w+oüÕYÔÝ)ÿof,³b­ö¾ËVabòÓZñB³×_+
+þ"6Pn7ÉñÁØ»7AÜ>[‘yÜ(`N3*á±”c9-^Yª¼Ý¦ÙUŸ I‚!*1¼m¡þŠ1;¶ NÁQ &bêûNiWbG³rˆÐ)lôíêga N³Ö㵠浨Ï»ï§>Ë` u¿ö%_ÞÕd^Œç~?óšæ4Þ¸¡ß6útq—Ÿ·›Ù¸‚ê>vë º³½°÷
+)y•;Ä@鵦÷›Æù4ƒm >œ üÀ0þÜ™ªŠ¼—H°y¶•žÉ´<¥ìþéÔT3‘=%Rò½ *d
+Ç-ºÄ¸,Û±çÎ H¬%2G>z&W4Uû1’EèsYOµ7ˆ¾ a R˜ŠL—µ¶Í¾8bxÍ£þðÉRnˆÕÅ#­Â’~q݇clÍ­’ò¦Þs…_„hFO°öÞñÅ ì†I¥Úµ”
+ \ØâÜ ©½h„Ш;)ŠÖõn3ŽËíkr'«á:Àœ.Œ\6„oîãT›èyx
+|ìõì|3ÕL¡²˜#@W;yø‚"˜Ü±–¾qP%o›¸¬
+f½:Êžn ZLúïK&’f7_ËÜý·hvµuqh¿sv4Ûe—oõnƒò¶âC6Tž® ŠHMžv\D"Q´¥c¶Q¥ž§,,u¤a\TU!’‘Ns„—O*¿ªÓÏOÈíwAxIÔ ZºXÆà±)dimüU"‹+é#€ÎJ¥•˜Ôòz4
+1yϦXWpÚ ¾b7{®¯( hÅ¢@65Œùs3ÓBÊ+¥¤N>›S4õ¡üfØbø=Y3‘Ÿ=¢Ö¥!¢byÎðEm ÅЙ¯<BAø[º^!0µß3”‹q[0¾'S2Ej¿ahXîÂd]h µ  ®4ß=ÑJ¯™û
+³¬ðÚWúÆÙÑ’à7Æ›!¶WÞ2¿GßuM!þ˜Ô–æÝYJ¬4Ê232VO¬=ëHöö4?4!˜uS¸Cá­…íØdÿRдrQ`bEêcS±’tÐï2³±¡T5ŸÙqêW­ýx×ð2*ØòÒ²m=Á․hñ©6“µÂœ¯Çl> ×@lSø@9ã¼à¬rNÔóM—ºîùî¾ |i™TË“ÏÚÄÔô¤¶›Çiþ¬Eùöi?fíykóoËc&Æ}Aÿ´Ö|gx{|Q›« 1缚%U¤!Òk6`Æ­N]o™­œyÓLé¬}d-`)KK-†¨ásA>âG'¦¼×ñ³K"Tçtû‘ö Œ®ûçeÕu¼šÄqÅλã­WõpÊá™±ª;˜—ßÄ”÷š³qQYµÙšÍçˆ?˜–GD=Y£Õ­â¶.¬Ÿ3‰h6>„áL½ŠË5¹þÞX<f™°pRõ&
+Ôý€?÷yúh÷2O&ŠªØqëfµ¿Ç3ùVoçH°
+ _*[FSÿê
+’§ ø¾×ث楑x–)v Sxè=; í+í\HTMn‹‡Ï‰aïýÇÅ-ŒC¥aJ"9§k¨rJ!!D>÷¥QÁ¥5÷Úè>c£ò æËkÄÏäíéj n¥j‘eó
+A8›ýÀš›Ú‘¢¤ÝÚ
+Y6›‘%Áõ´íCtŽ>(žµÌJðÝÍ„%…£3ŠyG[]\ç}Î
+ëja%I—ûÇè͸ê¼5<Ç£¾œ9£Ê:ZÏ‘C‰ ûÄ/{§ÃZ`=ÇÁüÖ;3i8*Asm64'±TО0/­Ræ±­Ì3Ô®0ýد3ÐHöÀQs"ñ´RXYõ#ü‰Ð•ºL…‡ ÉRÏàˆx¦gRü´-Õcá´8…¬qêÇ*<µšPÓ?:=éÏÂÇDÛ»T“Ûq}jÝ×Sëœ-oK¼Œ´<ëÇÈXm¶Â‰F Îgki¨ñ¸aÎ
+dn–±wH’W»hˆ¤iz*UGwnxôG•µ2ÊÍ‚˜_¸lóª£ÔPôö¨|z9îpúµæÌŸ+Ù‘Ðù Â1¢%Û*¾P]pÀ,]‚±b ùµUçpM‡ÍúêLD†(`͹#ÛBöÕÙ&¾í,rkK®K2®®…™fèF3Ëm® ÃØ È³û“'3ò0Î*•PßA}hL0Ž»ÝŒ©þ ¡¢5i’ìÃÊ4“yo#sz:®Oµ-}œOgºv7bN«ì‰Ž=èš•Ça’‹ìTDú+¦:Ë’›dIÖa'GÙ^€héôv–é«
+£iùå¹C‡È{¥¡¦‹shÏfuÃYFxô2–ÌUÊ&_Ïÿ%­RØ 7êÇ=²"Š:*jŒ/I(¦Ý0F;„º# _†§ì9â ¦”ã"NNR£Qz
+éÏ%†¶±3›~N!Hnk„~åî?“n.ܘJÜÒx~,`q$þVã¼.ÜH xRÁ/ Ý4ìuöL—ÀZ:­Óg»¤ £{^’ /âµÎ{.ßgKù¶ºÖàƒ0C êÜÝÛÍ‚nw^×YI}½ùwºyyˆªA³R›Fàéu(rrqx)ö„ž`¬µä”À…0‡Ø­¹ý …‹„ù»óýË‘ð‘zW#.Ä
+¾.3g~ÆÜ•žØ=¥à²ŸšÅU5·Ýñp³þôî ÙÇ‚šŽ}žK\ìsißÏÈǽÇ{Ÿ7øvV½ ¢WÀê#ôãFÐÓaœ#¼i”uã`Š/~‘ªi¥¦JD¼>ŽÎ'æPþtüŒBò½œ—ê*'N÷ \¡u)(hûÍõ¡‘k 6^èxQé–%³ Œ#ŠïE‘Íނրجš:4ïñ‹š”l²È/&~Û×…¬6ô5ÇÀm¼$‡¾s
+O5*žpºäÐÏé")˜R3ªµáÓ¿®ç Pižæò3ã`‘„ÿYN8h”L.0±P}¸ƒ½\05pÙ6‚2J™¶æ¹Šë(Š?ƒÎe¥+=œ¹#Q¥¾PÌÝ„tëê&Ç¡ÈËÕÄ©Q®2is™»™)–»4„üJ
+`xcñ-”Î_Y‹5Îe­ ]î®y4 7¥€jQu „¢Ÿëaà S[ª‡hu›¾`®‰’âǼxÝ„™ùI
+P;ÃÝ̆­ ¢’;e£ŒùŠ}«ö6|;a³Bj¢m6`FÈ=x×\j~dN÷Õ&Š·l†yVS/…cvÝ¡GˆwS”ð—X=¬Ø9—ùÂýöIh8±ûX’¦xŠ¡¶±Ð5ðL:Õ£ûƒ@ýYõô`:J{‘Vœì9Ï“_0¾È2K™Q¸É¿ERãàþ™V^bRc㔿:3 5-ÖF>ÿT„^â|ÄŒCê¦]Ã
+â0eªAÌ·¡Ô<=mSâtè»(u/«dµíƒ2Dµ´h»ÖÀ+þi­¨Gµâ—µÂ‚§Ý2Ò÷j_¶*òÉ”öLv“£…¡¬X¯‘ÓÛLP{9„“ë‡:ˆ\J%mFXZ³ é1éd¿&@“Þ1 pq…hº§Ù¢Íañ „ê ÿbð
+}qbîŸn½ÎABáÍ ¡ÉHŸS屉¥8Ì~U'8Öû&hÒeŸÇ±õ½m\öäg|ÄÛneÃ}qäm¦žÑŒÌý÷]Ÿê
+C†p÷ns|©ØëðXʹáú¯rôÌ8=Öá2Þ–•vÑ»6›§¥qGr¦ ¬7go˜®xƒ è7erÅ缺ÌEHKZCbvàÒ =äâ|r*RŸ¨Ò3|ÿcÁñýHi®jÕ ŽÿŠcú¯:°ß3 IÏÑYñÁÍó"0m„]~åñ6©{hW3ù)vÃD0(ìÚ6FÛ÷˲ªb%Ë2ZåÌ©1ºª’®6t iŠ1CC’(@ª½ã™×bº>Ñ b™zÑ\ÝðÛ^ŠXöÌÖˆ‚ÿF˜½ê·#³Q~œÌ² J²=SåT¸ðØ×{T~'JÊ nóß`fât.m ¡§q';Ô‚ñCçhæqø'AÑ•O3ŠiâÁfØ¿ <·90¬0ÉãRÅʦÚÛLûÀýø" y³¯kN5)ðAHp­0À²s;ÂtQ济7Îý´Œ”©Ú©x‡2&
+”m!mVeîÍMi3Ô\Á…+z'‹›\gxˆº¢MLX¿á-)©ÑÒN̕ߨ‰¶¸Ô£¿´«1Õvª*_Ë1ÄpŠyá¿ÎÑjýñ8ÏœdžÑ ^ëbü9¿¡c]wÀ×û‹ÑƒÓ1zt±GßÖëÉ 53o‹ûn«Ömö¸KáØÁ¡1ë'ù…è(!KÄèÐËÜ $_ùÖKèâHŠ
+z{>‚é¨õžh©b ¾ä ù3'Àì+È_PlÍkYb‘¼ID±+9C5NáövKbXÃ4\›FRl‚øÞc]sáq:™Ip˜d7V/ÛzX<—;ùS™ˆ´H¦¨iþ»3­3#¿1”µ$iÑ‘â TÝ>)¸¬ÄÇ?šjÔ¸zw6×]@f$>Éa[‘Ô/ \ o¦å£u1vß1¬‹Ûb*i+^Òf¹Ú9ZªÔYáüÅr~ä¸~â8Š`œ’­l>ö>!æ3 $9 ÷Þõ ³2¼PøÀÌü=:Sªk?¨‡ºÅlB÷†ù‚J !…CÌ…œ·ÑÑ°»™d.k¢¾\Öa4èVåpP·7GÍúP/,ÒLž³ÄŽèÁÊšÈanƒ¬V&´Z¾ï²>§ÂG !ò3©öѦ¿Lé 1/ˆùmRCY¼#b‰
+Uiˆ*—"ƒ‹ ƒ¦¢Ðc­XЉÚ%M¥ÎŠa=ìÞ'ÒçÎ’G¤ÇŽ½3õ’Â_}„:Øþ>½f¶¼æM¶ÈŠÂâªØרËåÉšÞiZæ Lºf„4)$mh`Æ糂âÂ0DoH„K—ðñ&dGtàÂ|9UÕ Hf8ô[ˆ+P*+¿ù0}m´Ã7Ë‘ÃrÎ_ص"ñ“x„©Û·§ë‚U‚­G´f”&ÏÈ·Ç:ûƒ¤Ð’oáÙv¹€õõÏš…xš@>OܘK½vE~'~î¹\[D÷+6Q`Ïq§Ñ¶ì19ilŠÁô;[ÔhÌaÓ´õwŠ…¤çRZí§µNL;hœÈè&Ó6!zx ¬SC±1Ésl£€‘¤9ɦդ崙/$ž¯]:!Úº¡u|»iÜH2(ÜÆKfšueZo9]
+ËŸwÓxe#t½Êçpú¼dl …ym»Ä¿,'–Ï8L¸aG«™z•®Y“€Cc^i“°œ¶1H4#aú›‹(áê¤9©•ë7^uªç|»|õ› _:×óN÷LúØæ£êù’æå‘ÈøóF3x×/¤3RDÃϧʷ‘}3y¢ô vÊG:§©ÀášÐ”‚*&_Ô‰Öêg»Ùyrµ<dEÐázâpl=¢/Z7ü¬¯Q¦<ì߃ï93âs†ð°C/tˆç÷ˆz G®ŒB)œ _ÇGXyc,–->¬AÓäþéÞw›E
+ÓõÀ¡!›Š"È“øS->šúdrAè†= ƒ£¿·FöBN³¼/4¸ª
+‚rWo‡CL:Í0?þgã·`":"ÿà¾''¾çßÒº‰¢Û-N|±­Ë’$|eÐ]œ^j¼ëÜmo—ƒ¥¹NÒ¯ìFšš—:û¬m )ïXáàì³|GÀu']Í%¿àÂe $ §¶æè»â9 ؃ýþæ§rÿ„„òY•ß–J£ŸitS¯Ê3Û(ÌPŒ
+ ’ÌË)L®2ÊÞž[Ti<_eWÊ´è^Õ…³èT‘#]Ž 7ð»-ª~ú¡*ƒâ*©áÎc3û…Ç]-LMÑ'ºÌ“m;8M£ihf?ÂZb•¼Ø¼àð^P2ý'ÊR¦Ÿa8Ü}¹X=ý¨Î§¢<éª,È5­S곩¨¦|ö'j¯KÅÁŒ€Òæà´¯ 6±š„~pË¿z Ó5!­À‡ÑÛŠ}ײ½+ÄŠrmÌÆ‚œ¤×fá#‚òþÎiX"·†šœ&ΦŽ#©M°‰NŠÄ`Æõ¡ŸW‘—Ÿ´2y$LÏFZ¨Ò­Nù“¬k¾=ýT0Ñ9.…qžyK‹„U tæeã¦jG÷²¼Z²>^´5G½”šä©»¿@ŠzL1’I“#PD.šoÉ=³b%ÞÛçÅ‹¼ Ø
+1}³J0Iµ‹‘»¸L„L_œáĘï&¤‘l°£,ÛòñÅôÞz¯óeðB¨Ù¤þ†N&íÍÃ=ñÞÈJ§þ
+q”Ç‹ý?VG ;¼\“!±žòyi\s3~°(¤¥A¾iëÄɯÍ
+œÅçîH¼AÆšVàB=z$o1*‚ƒ ‘¾¨A™‡pnŒvâmÔçT/7f¸+Ð&«ãÔÙŠ@ÕwnÚ¢l?9ì¶X`sf°‹Z'¹ïÈ<¼¡/Åk(dä
+]@•p@s•žE÷[ýÄ‚”%:÷ã`¦snŒ/G®CºÒ´ v×w߉*BgwªVN5Ú«Ãêc,¼÷!2yHFÓo£Æ7•åÛŸç‡û]Èà F1Jæq»*M.Q9>1ôœœkzÿgÇ8–|4áhXÎß>âB›em !ñ%o7þLh†A8ì«Ù¸?ºðÝíõWê^²¥¼¿ÉXÄ.ܯãË?t3 éýZ‘
+Û5²„kTÐí½‘DóƒhþÆ036â`渮](1š!6§ly—ÿù‰:ðm 3!Õbùú’Oê¹*š"E9ÓlÿwnÒ"@«=Úð;°£B1÷¬t‹•£í‹ÀÈ /ͧ|Œg¹Êé‰7ù?0p?²½@ªH ×’ çæÊ?B|íÃS]g—û›S~#oK<ÊŒª šK¿åBmø­àrðªÁ:©à!õÖôK
+´l§±¯žÄÚ5pnR¼°ž\<¬©Í …zÁˆ¡ÃPÍÝBÍwâ}×ñÆ*: 2‘Û¼5Ç>àõ''ÿ«u6ø-ä@Y–J(yÕüXŒ®¡ «€6¥éü²ÃÌ åh°NG‘=tîÐ>(§—­Jë£Ùå4¬@°°ßb­Ž)ª,ôï–Á¯ôT£sOãXrl
+¬9ý[£x :å˜t‘!Á<-Ùçµâ2¸la³…êaOŽÒœ±  ÙÎqsq
+`Dƒï‰JÅ8R,í.ñ‰áΦM|´.*J)°µýn¥„>pZÂí\“·ØX8ðrÿcO½›î‰(¾µ*õb_Òö
+|{ ñ1ãw/c,ò©/¤QfÛ C /´ãÒבzTa&ý`~úAâ"l±Nržpc…öeÓéÏ_è|–[¨%ÒK.á1“å™ÁR2é×d.ÊXVXÅýzŽ~¸‰G๡¦¥ê3$ƒï–ÌV…ð‡GP¢Å9È¥£)úvã“çÈùûWÑpÿùÉ*’åW¿^”•§Ì›/á8_$As|EðÙ4sAW?r!÷‰\Ô© ºƒú¦Ñx%‡ÙÑÑ"^.춤‹^«¥Íx¤‘¢: 7sGκ;NžÅ6Áҟߨz™&cÝír}IÓl÷ëÎt’ç/Ö˜ &þ
+`Œ¢ò »»{­*%q‚ø„)biËý°)ã­iql¨N¸†¾Xÿ(€Ú™FT„uÿpz.¼á÷œQ‚|PÆOËéšFôI[i¢Þʹm³Ü»mžY ÂäyGc±"Ñ“øâ_Ûkå}U=$§TØo¤–Ôã7~·;1«ŽÒi<Eùà #8k» ú8ñ6³44}´ýiÎ^]q4}Å>Žä»Q›Å¬ æXäo
+[*CþÄç†*ä4w‹éJ6?€V0:•¥_%¦°÷+<ÄO¬È3ƒxUâÀÙÁk¬ô1DõËBR%ÕTT!5T>¤3UÌz>f®¿WŽ>èdçÆß´ŒoŸ¹ò qõ¹~™"tÁ5ݯ*¹ <‰ênå½$Pæ*ºr¤è—<Áët8f©tœ­`{®!6YvÏ ö ùïªö­xFQ¯°
+4ë$ “X_Š?÷W€r
+ÍfHAzð‰d9„è´!é¡B¶§0~Š̱;|6oD×ušÌ±£ø`Žò3ñü§¶GëŸT´ƒ h&´¯­š—4!Òš•
+“deoöh\ɧk™ˆDד{kê¸
+€êIªã'´X:òæºIR/`žPî⽇dn®„9¦ôy*tVåR “…ÛÙüèÁ:—EóY%ªô™Bn§ÕÁŠáøõ9{Ý"ñÜÒTuŽÏá”î•9PÇñ©¢<€~Þm¹Þ™
+ÊPLÄ>È‘¡J,±+¡+¶_ w®õ S[N±†3:&\朋ürëBÃÀÝË
+¦K´9J-k‡ÑÛ^˜ázk¾l0ҵ ‘Œ¬0A$?QŠ=êŸhêÖ ö§ÂÎMu™BÃOk˜÷ãÓ$ !ôh!Ä"óbIÊcÉßo3Mþ…ER [m<h'èär‡ 0¡âÎïݦ‰À;þ§³ÓÕm4¸Åêã ón„Ç-Ðé
+¢ßüóÎ> ûµõ,d—W.È Ð—Ú‹nf4Ì 
+ØÈʯÓcIÖ_un`Oщü¾“,<²–6åh7Å$»›Ü–JËBéÿ©aI¬`YíQ :àbZéŠP kF9Y b Š@¥qkŸÄÊgœþrCTFýjbO Í
+m»ì€pçI¹9Iu‚PúH)ë;˜êÿvmÕÅ1<d-ÚÑàü¡[‹J]u¢…ä[ô<“×Ýhç/ŸŠ«Õì^æ» m*ê.òÄÇ^7®à³³}pCÕ²!‰®‹m”& ²5ÂWþÎ|…Šá§Œ°h²…'
+Æ1’Ä'i¯oÖ-0apn5UÎÜòµ“PWSW
+šikÝüvDÀ#°ßÌ‚M¾ ÿ½…¦x~æÈ ØJÔSPäsf¹Qþ'2dT@ ¼aø¸uŒ¢Z/ûtQµ!™ðÝsGç¬èØ&â’T&Ç& ˆ²ý›uã@äuâuÕZG7)|ô /zCND{‡ 4Ò’cAÒZ5ŽPfÀVùÙ̲Ù#2†–H÷ª»V;Ý@øq%žXÀò³3šÑbp¬þÐ%ʸù4¬ˆlÞåt¥”–xìç&‚’K·»¢vÙIÒb™ @æ %…èLÉ™ÖVM “ßü1|¸ÝJ
+]u©©E:7Ñí|›ó¾^'%–,öMøûÑ^Xª¤'d¤",mX#ƒ/QÅ-o‹.×SMV&¬3°ÿs*4ød¢ gƒ+„‹jà—‰v•pÛøÙ’ó?‚€V”˜J–¦³~ã³6„WÓqÐS´¹ìvn>^×Ph˜pzæT‚_­ZÓØÇßØýAÄ!²þ‚?y“Ë8õ¤ðaÎÌu æõš;j¦gƒî“¾ä´p ¸ù6Ò¨Fímæ«æ‘ñ³„R Èà¸ÞhÞbÂbEuB̪¬bL V0.¢SDF¡‹mø~ƒö’¬ˆÌU—#«‘){Jõæ÷›zE-¡í¥ˆ+x‚÷
+endstream
+endobj
+1981 0 obj <<
+/Type /FontDescriptor
+/FontName /LJEUKZ+NimbusSanL-BoldCond
+/Flags 4
+/FontBBox [-139 -307 822 975]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 114
+/XHeight 532
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 1980 0 R
+>> endobj
+1982 0 obj <<
+/Length1 1625
+/Length2 8021
+/Length3 0
+/Length 8852
+/Filter /FlateDecode
+>>
+stream
+xÚ­TeX”í¶¦A¤iº»A@$¤Sš†˜f¤¤»»[i¤»;i¤¤SBà ßÙ{Ÿë;û×9ûÇÌõ®u¯u¯|#­†6§´5Ĩ
+üwjújë
+¿ydd n
+bý{i´`ë‡=û§â7låƒ=Œ÷ÏÓ(ûòŸÝ€VØs3+ñ@ûÔŒ4D%IN߈œqW/j_´°Z§ ß·Ò*Zbþ«"ˆ«fLì®Ñ}úôöûK¶ŽgŽÌíÉÀƒ<Ê·ô¬ù„KLÍÂìþܦ…¸i»ú‘ž‡Sª+hFB<zßF4µL?ü kæ‡aþdõ¥wÍ÷}ÊpÅó¶J©Š!n!¨A"ª|÷c—)aûçsÏ`_oû1zçw
+öì˜GŒâ®h¸L¾ÎÙRFº%ž‘õzíMjF{gm¦£
+i}›«À±%VHô!•ˆ [0YòÛmݽØ=šâÇú[ü%n[?<bCAÓ4Ù¬Ã"$ÇêNmKâ7Ø_2²Ñ¢XÀyP¬éDÛ2罸=
+XcÔ#·y‘e”=û-‚yKŸ¤É Kþ}“VW6áÚ§Ûäé¿óâ>çAR¨ß×±”ß·³f‘óœÕŸüeÂíõD0'éfáh
+áÁnm4&lë°Ø:çÙ4xÅËÂÅï ®_U£Ïõxô$éã^õé2Æ“ßkÏR-°‹ £òLowÌ le`1ÐΰLh|§^Ô>𵉿ÓíÈÍm
+÷‹i“Œ«$0n
+89OZ~¯YÜUmD–pR',>‘Ôÿ±¡§I^±7s森ʡ'…ñh«Ö£`6Ï ¾3ÿhÒE)bfzÐDÃke7¤›œp•žjñ6‚J4?¬® ¾tR+ÒÂPË´·ˆ½‚ŸŸ N‹è½rbàÓPjIo-€y¤&&t®bö”«Ëå¯D¬ŠèÖÝ®åŒù0~ªC0y9X#P wqŽùŠÊ=M¬ç+7ePõÕ Â!„²ó'¯O!7v)·×ø2ŠÃÂ~MÕ¶Íî›ÙÛ‘_<³ôª‹#bv‚¼¹Ÿrr••¶÷ 'c1­lG>2QèÒfdûék|/xúÁ.Q¼å?×~M$ØÇm–ëo?úóʯñR¤S }ìÔ÷N)5˜5C¢©<kº%Fb!€ÑOØÈvè'p•£±LJ47%:¥[Fká&¼Ö._4ï}|nòHìd]æÖ’Wo&›Aû„H0×S±£À}É׳å:4[âø´¨6ÄþèY=Êì¡åÄÐ;!8×ƹ€éÖÔ9RæI\‹úㅽ »Ž›1"¶> ÷×m*
+|Ó¯hI-"d¼¦XR
+ {O
+;ïÕ¤1tù‰Ýä †U ]ys@BO“t«V;×Poè©çJÎúKcà< c×¢ÄË
+Ua]C~öóUr0ÕyÄ~1ž­¶³‹)ûãÒðj?`Ô1ÖÓٮܟb˜i{ßR?ôòé¼gVä"SF½¼ÒCÇ܆M Û/µBÛvg_‡sÕÈæù»”™åf ¦ÆL7¨L9䶼'5piçÀ÷"®fÜÝþ4(ø¼pD 5 |Îf\>(ŸL_Ókz³§Ó‰èûU%´™)¢YÙiþŽ¬]‰·þb$8¼™c£ªS~~­Ž(Ú1îyè3ôØBIšM*•wÎL…g—Á9zãs­Hjñ¨šÞg€!»1ì] [Ñ@Ã9ï4Ô½òA Ó,IÒ³\˜óS™PF¯¤…ÆÄo¡ÞT!†²Õš»ÔOs*-RûsXÂŒ†ìºÉHì¯Ùe¹YkéneÈ HrÌ¿ üâW o±ˆe²ÈÊjlÝp1î@#†Â”åŽûGÀÞ_ˆz8îºÏQç"azóürÚ+«U™Ÿ¼Ý¡uþÈ×\÷IšÎÜA/Š³¸8“îÑÁRw*äŽýhû4ó23÷Ö¼«(ƒUdJ¨»ÆɆڪ¨«¾ÕÙÙÒÕf/;;“
+uíˉü=fŸKWHl4ñgÜ›âÙŒ\¤]ÌÏù¢®ÍnÑLj[ÜY
+a§ÑÉé:ÃêNj›`¿ˆÒ½¯è“AáëwÝqÙy\‹6›OYŠÎí(¹P¯­2”¡¯”Ã:×­Ô™¯Bß¨Ý eÐ8MVˆmígâqؽ¥J¨Tû8™Çê …¥Åb' Ó¯–úïJ¼=¡Ô%­ŽÍ0L&ð%Ê9ËóvòhôøXµl(ih,ÌÄ"¢45_ߌƒ ixéÜóŠÛj«bQB¶J9ªÃòe±]àð¶ÊÅäÿôÍ©–òÄê‚)ª\’çÝE$Ïí4©~’-ÿ²#¥0öÉ·OÒ8¸$‹u”wºu5æî nEó]ñ¼ó
+'­#…Ÿ¿Š÷rgžŽ TˆÊº¨är»Þø]lÉó!7@¾°ì?~5±Ÿšîc÷ ^¾Dhè•îkçɶP`]ë-ËwºhbªˆÑ+S\Áì0½u>äÌ]ÖwË¿S¹y–âb3É<¦7XáS¹±M%փܥÖžû²©ª'#[¸™ ~e¦·Ø¢‡Žƒ ÝA×Z¸|Â_Ïzt þF’דˆ ó¿-p{‘3S§r$¦ð ŽùÑ}Úªõ¡{yèþ-¤÷q·£ÆcªÍN÷ý ªB²Ó+‘Î`姽¤kקt_ï/#ùžõ &(®­}ó»@îdèX.mîŸ 4Zá\ ÿYýTi¥s0z3¸æ½î[ìÅ]&ÕS_h€Ô:D2Ûeß*e$äMçBŒ1îðMfxRªºó¦‡Ö¸å'¶mP¡é̉]Ãvï9ÿBXvg–•YèB ¼ìù›­Ï{”ŒÃ霙ªy{MƒÁoù<sógbmÓi³M)=t-Ó"„30œÆ_h®ŒE)Ú`$˜Z(i¢¶?çü’¼é¿‹É~G‰¯ñH’¾|¼,0ÔW‹žB
+/Ögu»ÇÕ¾Ý9"meÈÎfD-1(ü2\س%ÛµÜfÄ!§yª¦G%àbÈÖÃ*òâ+‹®ƒœ_ÿÏ­«³hâJ »0ìggöõ÷¤T:á6~d«»Þë‰Õ¬¢Ñ’f7Ö~Ô¹LE5¬®ìûÏf´*Œ§$˜¹%Ð+1F)m÷Ãæ1Ý?^¾pGÕ_ú€í®<ž HßXùœ6c&SÅ°‰S¾‚f…"ñDœ¤J¯ªGœy-
+
+¹ìŽÇ2~."[šLHÝW¡@L ·¨YÐÊxv#*O“½^©^܈‚¤0Õ î?Uª Úš
+ë ˜{‰ç«ÕsKñóôO° ]|îT$°´/Ç=»Rò ZE8ÔÝ,÷Z4¨ñkæXEá¿)—AbpZŸ?kg_á("Šœ8=^Ën^¶-;±jÓ›¢Œô¶=í´ b¤Œø ™È…¢Å½»Ø. ŽâÉk‚å\FÞ§¶vF¹8ÄåS¡t(xæóùéJø¼Ò–?Uʨ€U(=a£¾fâjN¡"˜¿uš™ T £UÑ!]§¨û’{}`ÚC··ì½ñ>p{×ÿò¥9W“ óK§eº ÊÖyb6*©V5Úô9pÖy%šµÒj
+"ÏŸoã/õ‡õ.¼¦RfWL­£<îÏÔÌJMµÞ9â/ò‚e:Á·ŒÖ,ÏЛd«^Èñ»´É¯ +ý\Ø´!cšGŸ¤Eu a¾ü3qŽøF¬0¥Tù×ë] Ù…Þ¾Ë×K¦n6<}:ì¯ûð†]7€U“¦¾QÒ±6£ ¡ül¶©‚¶i;·Œßõޱמ
+w¼vMËt^27lüvÖÍ#Ã<@²”¸v)]Jcþ58lMÖOP_.>H³Üzu¥ÑÛuÕAÚ=Ë,Qd®<‚»¾quNÜÄ`k¿·*a=*÷•¦fx?šì«…Cúô«ðóÚ常×ü’Q1"ŒV]'î¡vÕ=èxÆÍc˜« ‹û¬æ1eeE§W+]­{Z(ª¦í¶†Ž¯YYyYAÁ qúÛ$'9ò Z¦´œÙôxG–V¶QA¯²•þ¤‰Ð/RzµÈæCÒÈ¥Ðe§¢e"MICGœ–@K¨#'¸)¡Eú™j{¬È¨¹S±·®K8K¾“aê[·°€
+ȳϺÄ1Ÿ¤­a…f¢ZÔø$õN8n-(¶?:èú7¨9ÿR«¹ür-ÍE•ˆ¶Ã@TÆ0¤uÛ©4¾ ior¾ÙhE±±Û¾E¿9÷m‹rQãí¿5º¹)îØx,žWí+ ]×H=î‰õúCœþ¨9õóºfÕôc¹Žô‡û%A<Ü 0±­bÆùlbÏH7íkŒÀ“û2ô>‚×Ö[Šÿ°c²"eíÞOÝ; ÙK=‚ɳ”òxäWÓ@[ž@CèÄ÷XŽf‘
+µkäÊòõ’Â
+´KµI¶MµO¤Ž…ýæ_ô²M—èI+»aWwòªJ‹%‚µV?œè&[ãõ¥ßö㤹a»¼Ÿ ù¼ƒ2Ež9Äßredÿk´Úäòý‡,þä«…jŠ•ÜÎw:²ú¾B¬‡+•]Å‹ ÝNúÏn]fn`葇DÝñ¹> –{Á;ÜZšú(„Ç\_˜ù/"\a”xêZŘMF+(=Æ[M'dÕ~qû¹]#Ãý*ÄâP@'½xÀÎ) Û“ó,›n-p3z‚|>Ï»Ë' àµRS „Q^§öèŽÞ2¿±äÍU(Z%›yçlž4&WO¢`¹¶Ú>=úÑŽz†ë±ñQ,å>& äG=¯—ôáÃÆ8ê§gÁähdsúY½¯#Ô‡ŸýhøzœRµòŽüXGÝèÕ~kÁî°|“wºí±ÅŠãðÕ‰›³oKçÜeØ~fÐÛg‘(A4cšçã…™ð<¨>‡É¯L¶.;âÕ–ñk…yá[?—¨q¬vñ•ÈW⮤Fkît³Î
+u/uóLúuúw¹ë‰ùf'ºl`k2¯ †¤Yý¯ºš ›E¾îM,„ÑîV‹kaÕ&kð–¹ÀÉ Z¿uZÙFI½‘Ò9é27Ö†
+U qì¼CW·KmR-þ°{/‚ouƳ6²ö…k“YË­I 9ˆ°xýà„ò~£Žâ%ÂJ S¶–sB¾Ó Q¥ÆüÎÄ7"rÓPœ[x-yüæãŒ]ýb‰¶K[òÒîW’ª>˜%?(J'8tö,5¢PÞÀJùfœ
+Z µ¬lƒɉ-ˆD7q‹jb]¢Ê°óŒœz´êŒœþ}oÉÛ\£clðKUûõÝÀLÓ_ŒÛ,M¶ûÁðECà£Ïé ’K·@“#¨0"0|vÐÖÇÙ9“£µg~¤s©vÝàèé“š«4ãåõ…ÕgÚ©¨}€†’dØŒßD@º2K/­½Aùœ!î`Î/·†yøP³wK°yù´&K..Lgø}ÛU¾˜1@H•DƒO€ë…„€ÍXp7†…ÅãZNbHFþ—FC#Ý[f”AN,DŠÝy¥LSCa=‘Á­^þm•­`ÍD8(bBtm„7íÜïÃ’5NRï?Ø®j •p˜ ’rá‰9¿ÇK«Ã`J
+XÙ½ÔïuÔ|FûöÓC!0{z˜öi°FZùÙ–‘ˆ`Z-´‰ÖÍÄ+75`æ°f9-žŸŒ$ý(äQ#Z`ýFry¥õ€ÔÉ9oÐLñh¹]´¦[M¾a€úɨ¸íS¥ƒrâÉT投Bß{$Ñ?'ÜofpºŒ{Ò˜— ”‡9} ³)
+Ok=¯,ß ÿ¬¶Ò 4a§¡w½H5h+ŽÖËadA~–Úß(šŠ¯Ú¦:4o”ñH\»âð*!’8ïÐRÚ3÷a k¥Ê9ÕV_ Žéêzûà]‘â滚ºp²X“6Ý8ºåaJqò¸§1Ýû0{/è†leox32­t3S‡±²»ö‡’ˆ?kÁ¡Ï´–¸Ïäçè—F´RK)õÕT­ú.ÌäÔv¯†“PÚ¼åé…ÈxžÂ–㩧§¦ ´õ.œ ,´&½}œË<6&³·Në«JñãŒÂJFÅÌG©Ô¾¬ˆeé§|†Žtc&’¿Bݾuù+g>Å<ÝÖí­ä˜å\\é…ÎÔ†*ªà°‘÷Wò&ù0ƒÁÀUlåpå³C!ÑT1ЇžÕª{¾®>~QåcÜßÕ»”!nŸ$`KA„½8!Wãâp®XA³8Ü©Š èqùÁúJ­èM| ò¶º©öÀÙ—!ñ
+g¼Þø‘JñLã¬+™¦‘¡‹~ÆWÉïŽf“(R Ùü€¶:ôŽÝû&³ûÝï[Á$ o;Ý·)¬à3×<ý&¼J%ßÁ+ž™3T÷Þ*%²ˆgÞå Û†Š6ájfªÞ/}„ÊfÙ#Oç¹÷Ó—]ǃeæÖzGs;ÇïfyðÞØëÞ} ¼³enrŒð¶3Æ݆çÔïAPžå³VåWZö=u=ŒoNû5ÄE%Mm¼‚ãäA‰M“–H2)’”x=—»Wê¤åG¿¸í–`4ëè"ÛdÙeO¯FõŠEô˜R¹w[íIZÄŒA¡þ2ÁíI4Ë5[TTB4׻ݓÁÚ]!S »Lz¦Ž=šïk›Z’¿òæ#¾5mK,žãá×åÜü‹‰ˆÊú-U’z64ê6ÎÊT«PWôb 5×ÓêN …îO4p)”~2g†º R…à'ðIµ@I¶ã
+E{Œá<^áe«5ÕôÄ;¢.ƒ®· …£”xˆÓB :†‘™ùjéžu­@[N?9¼bƒ!+ÞNÀžfiÏþûóŒ
+endstream
+endobj
+1983 0 obj <<
+/Type /FontDescriptor
+/FontName /VMTBGM+NimbusSanL-BoldItal
+/Flags 4
+/FontBBox [-177 -309 1107 953]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle -12
+/StemV 145
+/XHeight 532
+/CharSet (/a/b/c/d/e/f/fl/four/g/h/i/k/l/m/n/o/p/r/s/six/t/three/two/u/underscore/w)
+/FontFile 1982 0 R
+>> endobj
+1984 0 obj <<
+/Length1 1641
+/Length2 7418
+/Length3 0
+/Length 8257
+/Filter /FlateDecode
+>>
+stream
+xÚ­weT\ë²-÷,h·àÁÝ=ÁÝé麱@  Np Ü‚ îînA‚KðG²ß9ûŽýîûsïùÑ=ÖW³jÖ¬¯jÕ‹žZM“Mµ
+ؘVPg€ý_€åc¥àߥÁع$a
+úG£3ôÑÃá{$SƒÂà0Kg°#ð˜UMFî/psøïÜ0ð# €Z=z¡–.¿Kúƒ=Ò<¢ps0€ƒÜá¿sY€
+
+àâüËtqüæ
+rþsAL¿g†ùQ„9
+±÷
+±#íñÝ!‡÷.éEк•)¤$>ÍìA3Kø¶zV†‚ÉŽ"týóÂÙZÜ$rhQ´™…ã:5~\ªÿ&n3icùÉ°·Â
+þ[œªheå¾|&]?ÿr«É\ÃÒáe?ôÄ=T o»¾}d-õDì‘zAAü;$ÖíM`÷Îð]o<Þ½vûò‘½ÿU¾bóL|7.~’ÿtÜŒo6ÅsÖÛ²×ÕÉ=ü¥EØ8ßfNÖªXGvÝ9¢—Ñ[ËÎÏ‚p®g”8›Ÿ Œ¸Âl•á5ˆ\ µ'½†±‚î¹oˆ+ýEÌC\;$?;Ø­I†Ò-ŠöG
+uÏûüŠá®Ržͪ¥2ãO*“Òð%eaØË€ëÆ…‘·¢hI$OB· `—ø…š²•î¤Oü›rtk­|Ôd&‹ðØQ#òpÇ&¾–%4¶²‰‘¶Iƒu¨ *³j蓺}ž˵%÷*NÄírérÇYÖA&›¼±!JM³’¸Ïd—â@FítOÅ¢–ý<NaD݉kæŠ~ï yí)âµó·è+ʲ֓ þ5r¤< é¹é¦LéBBfï¬Ð]sKGçïê”4 Œ$ñÝqörÌSQhé‚ŽÑQ„ÐYNAw? ÙXZJUo²+¥^ÎàyÀÞL ð›64ñï®oŽçЕÄ8`˧nL¶ûAå×
+Ô2Ç£óœÃÕ+>âRÎ3nã÷|¨›tœêSdŠÏóØMIîÜËuæ õV{p&ïÀ“BïUlgÒ‹p°æ`X Xï~Ù$7Ió÷È5á™j[ó(iM…1¼#Rg˜¢J2SÂ
+Q5u:ÝZPiÈ×}O1/LTˆz(œ06’—cé”e¯ ožcŸ3R—ù¤OŽX¦ÇŽL¶ôQ‚
+[ò¡Œ²X6dW”ö®8Í2ÎGž¿FåúXZ–Ê KGËfDY#9ë9úDëÙÒIVè—ü¥äqâ…[hêHõm à¼^üÊ£?—…æàZK£º9wõâÃƵ=N*ÇÅ0A68ÞµŸY0ëåî'÷H#âT«fepê8æz{EnŸ7—99e÷“ÿì«1O¨tp¢$ÑÐìâbéÜÊã?¹¦QòbŽ½£vãó»ûºt;-sn¡ÀóŠëè.êüy´¥³Ÿéce éT>/¾Yûiò›ø…µ³ê\t(NsiÄûÚ:'‡6&Ò]±…$©|Ô²øã3"Åél ·íOOÖH¯û㻼žž:¿\Kª¯Tm* ÁcwƒÁîsyk<Uë|ÌVTè°—vjk_ãŒ%^Þ鑘7k½|ñ°>UxBGIIâ®RÌ÷Pœ­ÞJ Î,Üö»cŠ\iÞ,_½¹œ«$Ë­B‘'ÔëCà!”B[ЀÒUµ¸D^ç׺/?3sÑÿzI²ì¨ÙÔq„</ƒÍO«œoÉ%ÍðöARŸö’Ûðô›
+œíB9Ir<§ã±Ç¶îZu“gËÈÆ=H&„6YŒ>yK
+sIË>„fyÀ–µP²¯°Í™ñÜÀ˜ÛV­BiKUÕ–¨&½Z>lÜØQ}H½ñFÁõ)a”uv¤—GíXøwå7˜_sÊ£¨:Ð~¶œå†µ_[õu(SòØDɈ€i¥±nEÉOÞøŽ$èŒ^”è
+^"×Ð,¿Ô“ÍØ¿°×Ë‘ŒÓ¨~«Ø/Ý$–¸&•Ë·
+Úè4*Ö²k}%²Û
+ŒCuû­–œ0‘%Åû‰U(íu´}¸—oC¹ßN‹–‹ïÓeBM{"µì¨$>v•aÈë' …¬Â&ÙÈ\y)ŸÐ×Ý92NŸ’‰gý2nÉVåHÅyF
+_(¹¼Â]=±f m™±þ¢uw‡_©5gðV×A~ú‘°·ùÉ
+š_§œ!¨¹ŽÁA¸Ë5B¹o<}‹ŒÑ¹>¬±¨/ÃaˆfºQ†t™é!@@Ù8ØiûŸRuà(cÂNÖ}ð©Ú¨žŸA/‰²¼ÎëÔ“$joV¿ˆŽLŠì\ö‚¶Á#µ‚ýʯ<î¾”û6|irn9AÍ>øÎïÓ“4²9 3QÈ0Qﲂ¥no%H ¼†Þ9¼Ø¼ÉÌA»µ½Ss(x^â—áÂÔóŠ;fÕ=Q¬$H­‚ûvåŽnwØg}‰ðyHULOÑ;Î[™›$‘—ÊwWܳśóF‡³ rÓœ?Vj÷:nà{ A”Õ#Êîj-šDÑÇ9"ÀP„=Ÿ[“7(åŸ&ÃHÖ|²Gx÷‡ 8Žd„Ý"Ô‹j°
+›Âw
+L ·ãí;Gða-qÄX›z u@ôº[³·wÈ1',HûGSeÇíuXâ»ýPáëNãùzOègÏz‹¥8Ý’ù×Ç^š’¡±ÅÕ½ÅD§Îðâåأؑhæµ'd_y +èçDk¥¬°qáR«áNªki»ó6•Tù¨%”}2¢“xl#ŸštŽT™÷IsuZðxCèÄŸørÞ¿û‰¢„TÄ´ÙÁÅÌ%¤¶ÙZ×|DÜâ<CÆ=¯]gÈW©Æa0d"îÎØÔï±e…µƒ6¬"Å6ô£–¤Œx=ú3ó¯Ù_CûnÕ¼v¿˜^°±Æj_àgã UºïVË…TÕÑbO⨂gr@V­×bÅz;èúÞ%¦™x­[5§Ï3Ö:‚"jŽ4k~¨<õL&3ò`DT!A_hU'f¼²|6R.‘í¤¸xê|PA&ß%º¹Q¥òNã'—ô bN,d×ì&{Г=9× 6 L”NvÔµ° ë=Êzb4Yâ>Ò€C¯™—Ô«M°<÷ Mž&5P¢â2á‚Ó©£
+h x5—¿ù¸Q®T ™èí”á¤Ü
+6c1Ø2£N‘m½y
+Ý6`ø]ìnr¶{Yþ¨ær§1B‚y—óšSï›f¤z|Fu³à™ Väª}¡­Ð’Ò!˜Ó…üä4?:cXÉÅuã<
+Ex7ŒSûøÖöÑj˵Pðê§òPÐu:ž"æPÀ|z'ë„Ž„oˆÄ\tM?½šhÑ5×Kôa†åt¥ƒÀ9Ôƒ[RVRLo AÍXb_ɺqá¯I`õOëßîë+¨³ï s|ŽýT:ú:ž¦yüÐÕfôµíhá¥ëxŶzZ™“rQ!µÑGÔ&O!‘>Ç°æ+–å¬ìÁö»T­Ÿ_JÚÆ}ªFT«<è6ôoE(gIÑ
+–B·¾ic3(µ«(>_}(ìV s~üÜþ¹.c¡œ÷‡7«ak1õŠâ|š ÃXºîœ,u=—Ùf~\
+suz%Ýb6ê[ÊâBX1mûq™\§1(^¾½‹§™üO;挼ŸŠg±µ² ‹©eô}v~—¸B+·'³€á röŒòMùÒüo¨:Ë͉òÝ'dxÌ×ná•Ì÷/¼
+êÔn@äÏOŒÄžfðetß"‹« (óDTó:u4[…º…ÏCퟺbLÔ‡®V}v*t\C4áÙV7Ί¹?{î¯Õ,V °ÄPðøI†Aujœ|ï:iÜ\CüµïÿöéW'¿Ò…cJ˜1¶ÿøss®«üïí
+†¼|…ˆªÌÔnã×ÇŽbB«»µiO³ù™ÃwïKœYÄ:Á=v´2 FT»ù…Tà{Û—“yÄ;.lÞ¬ŠnBºyG‰[«:L®?Ø…Cø6çF:Dq%Oœz³Øfd²ö×ó©k2æÙl²M“Ÿ<”ße±lƘÞ
+#¸4Ÿïx¨_5óûòÄ¿ÌæÿDÆÞìg?´u¸Wrû0TûtGèSš– Nmrd,@%+²tR¿¼yà\R[¦‘¼–†Í…æHìï¨À¿Lw‚nžVž¨»‚6ÑÐ<òòç;vþ3xYÎ>;¦3™v®ýÓ}q.í8#ý²0?«Xñ(_-á]tsjyù7à вJÖ>gQb!y¯çKaD®çjg^ £¢]¦1·kˆ”öñ;ï¥"7bô{\n ₲둖"¢>à~ZN/
+çFS+tæÒÖ݉c4$vµ=…/ýÛI6Z×ñHK?T–¿©'ã+<ÂŽµp[_r#ªIr@+•yUˆQ¤§¿—ù;øT¸1ã£DokD ú7Å/¦xHOh\¶§+qgè«Ÿ•O%Ψ ÃƦ+O?â–É’
+Q©m¼´^fâ\x@&ýÆ·×#GªÓ¢[LÂõ=¨Ü> þý,ñi/>„š&¿S }Îs™VæÇ"£¸«‚ƒªùë«Ñj¹ÏXžþŽy] g·Ð±Û=\0ùž]sx´Êà9¿mÓ ;­®ÿÓYøûêê ×ïÞyAÆ ZÙØáßOÐuÌ›ïi»›g䟘Y8(‡éU™ÿGÞŽ–
+endstream
+endobj
+1985 0 obj <<
+/Type /FontDescriptor
+/FontName /GRJGEU+NimbusSanL-BoldCondItal
+/Flags 4
+/FontBBox [-143 -298 913 989]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle -9
+/StemV 120
+/XHeight 532
+/CharSet (/D/a/b/c/comma/d/e/f/fl/g/h/i/k/l/m/n/o/p/period/r/s/t/u/v/w/y/z)
+/FontFile 1984 0 R
+>> endobj
+1986 0 obj <<
+/Length1 1166
+/Length2 11406
+/Length3 0
+/Length 12187
+/Filter /FlateDecode
+>>
+stream
+xÚuveX[Ú-î!8[p×àîÜi qšÆƒk°`Á%8Á=hpwww‚»ssÎÜ™¹ßÌwŸúQ{¯õÖ+k¯zªh(T5˜Å,Í€ÒŽfv6€2ÈÞÌÕEÃÔA‘Yhå
+ør›¢ÐÐh‚ vÀÿ¢ÿ` )äè i
+ùÃkZ»”LÁ
+„
+üƒ±¸X²8
+”“ü¿Á ”cV@€›ƒŸ
+ é~(f­fA¾B¾û Ç#M(°ÈLe}%åN=>…ÃÓ¬~§Ì3®H“±œ{FjZžÛ$þã‹-ášîŽhISÖ—°g³—,¿ðeýNí"ãV'P
+ —¸nÞUŸÐ
+ÑD/ìI+YfëŽULÖôÕ¶]An÷»œ¬F*=f¬ØA@'`l«ÅBé£Û:¸fŽK€‰£’a¥ ùÚQòî£=]Póm–MÙîܬ`Ç¡L °â ôÁQQ,Å ²Ã×ÜÀa?òC*ÇpiÙüEXTn_(°Ñ“gR X«n=‹cà*µ8›­Fw^ž$_h¸åb­Ìø0Ø h¶
+í×,´âc¥Æ©T’Ã…ï®ü„Þ#~ËìãÝÀ£´.ýBôVÝÞz[Ñ—2)}>¼F*8íŒBV½WsZ®NÀkkõ KlØNðc?Âp½ns‹n¥ƒp$£)ïˆW.?©;ôFÿPRŠž[ÙV”¶Ý•˜[FÞ~ŠºÛÓÙÎm5-¬ÞÉ:…D¦ðåüm`Üû1lÐ/åÖ
+l¸òÚ&/×hµcêç$!8y&3BÉ>CN¥L^f0”žÍà +öG“t懂Æ\Ó°[—èkŸ_s|µpµØ¥ˆß2¿[áöü¿É«ˆ Ô&oÍ]mâÊòŠâkáT$žaó„P•,_Ù:¬ƒOŠh‘`àW(­‡ƒoaÑýú
+åü¢f"oÒ(€ö¸õ¥c¶84¡G–&Éx¨')ƒôßç Ï5ëæ”1•]¨_)zôì ­±Ñ·³A<ãHÆI¯CgÇŒ^ÎL¸=-yoøqx¥†bœVºoIçŒHuçã»ø®‘‹ê\=Í·¼Z’¹E"ñ¥­ ×[²ÂƒÎ
+.³Š iGJÓo¯¸šŽh%B`>þ:ÒÁÒÓ#dVj*œ¨…=Sh¹&ã»žÒ ˜,~cÿ@xØñÛYãõ
+Nã(
+¡$ÜÄÄh¤]˦i)\ òÉçgEïúÞ€Ç7„lØ'äÖžow+¤ÛB‹R½Ü)㶰6aoÃðYDxn3ý*—tz—/"k4>Úaêáò9|4#2)H¤ü,JN 7áYÃ5îËÌ ½{Ñ*UPÏâiÝ»§Râ7D–R@¸@‘Éùìò ÉÁô&ꔀ¹ëï9¨y5(n:éiS¼oé»hÚ ÔÞjW›î""÷ +Î(2Ž¤cýÕ  º˜ ‰¥+!Ä>¿DøÄ>X,6YÈq4¾Ïß¨Kh1‘%&ÿR;R…—±ûjOÝV‡7
+kàRs‰.es¨uÔ–›œ.ŽèM+TäHÈÅ+‹»R}/ku_ÓÖx8/ºÈ4Ū˜9íÏÊ©ý’V­ôÏiN€¨¬–8|ŠÁ|äg “Ãí õ`CÁ”ï_kQa×ᲡW¦€íÄ¿ë®’ø†$zyýµ¿ŽÕ¾ÚMR¯,ÔK
+¢¥ulînX\KšW:E›~„züá EM(Ô®ŸÕ–Ç‘1Îa'XyCx¶ÉlŽ$ÅI÷jÎßÉ•ý– b–h^2ø­H”PSç¸ B¡ÊXdÈâ‘1WúCH%ŒNj
+\³žˆ×<þ⪮}8ú»«ìµ¸n5+õH8³[ÂÂŒÃô–ëÇaø3¹æþŠ±u\½¹$ŸÈL™¶Ãõlï¼:ðHz`磽ÙËLçU'ž»ÀV›õ›eTUZ¸à ŸŸ  HÝÔP¼Ðµ1ü 5Í=†.ìb…lÔc÷¡þò.ÊØB èåVX7ë µ‚¸ÿ§³Ÿ¢y>lÙj³jƒeÏšÐöLÄÅ¥NüU/Ò1›P?¹Kã²<Œ·ˆÔ–¹ê’O؇ÞüHò6Âd&.6ɯ¡&xÏÈ'?^WºNw¨ΫdéBĶË#a)¯õ_Y6VÌã—Þ%PÍïòÄêðð A3ÂváK-²×œÇ K/Ûƒ–j²M»(¸‡ ÿ
+@=Œ³rn\  ò°†"=s'†ä7èý–?ë'—¾ç:WÇ)GgJŸ€÷!‰‡¥®[àUþTæʨü&™½sìFÛG 1l »ÿ^YSþ9;ƒºùÁ9Ò·ß²Mf³r<¼Š§BVgÓÝ*Z'«–3O0ú2ãD¯›z,ÇÒ¶Ã1Þ(¦uÅ0ÙÖÈ:UÀóºS¯öüYÙ•ðŠÎð*M_b±øÝ©¼f{«Ï>ƒ&ÒØOÍ{üÚ™(%C³?ÿ£î}Ÿ?biA_,ð…Æç ›
+Ë?6G †WX7˜r¯£mòªÉ¶*î]\ÏEîÀo‹‰L2(Œ‹”OðóªšÔ;Ÿöð=¾c„¤¢ábð‘¿ŠÉÄ,ì’„¯ù:LÍ Ž¯æµ·­&#`ÇÖ·Êø¸¹£è?øbÝßê|•º…)ê?øõn±¶ÙÚã`ÑU{„þ饲?Ì_ÿ ç)Ü ¨ïªô}ÃÜéqK¶†M3í©—±mï—CL®¼¾ðçý;.4uŸbéâÊÅ\lÕÔZr¸ç}d´ävzí·¯)±ïc¹(CVÍÐã綩@¼yF¯Ô—h1<Y¯úò ûeæ² q¸'ÅWo¿èjœ…Óïd¯Øpø7Lghõýê‚yG-¾ öÔg›  R#`C4æË¿9H?RvÿŶÇÊýÓHƒ:­·§¨æÁZÿWpq
+!u<?·Lmù—t7ÄÞÉŠ¸`8IJKÆÈŸÑ­˜”ùŸ>°>é®Ïˆ•4Æz2±<oÜ~{ŽpiØhÝ@lÓqU ›<7›…—‚o+¦RF³.ÿ«KÂE% #¿=?â*rÍw?¡ãŒž»‡Ñ ZœPš×j{¶%A©á|ääZdï<âod¼$ˆbVuª5×Æ{­#ö‡±SSk8Ï­ãV¼ªÖ’ô^<Φò]eÒ£ Äk#æÿÆŸ¬8ÈjII:ÓGsõãùe=ƒYÙƒ1ë‘Dè«^øݳ7Çô&äæˆünâÞìUoôꢎ„X骥…xéÙ&y;¥Î±ÃR^Ufß2’á.¥“—ꌧ”P@kò›aÎÂÙéÄé­NS¡ E,Œð½„xõ““ĉ¿2’~°Uþkç^Ü¢»µ¤§œ(ñÆ*ÆUJ¸2q€d@™[âk2-ª¿^v
+fifÉl1ç©]µS(¸Ù (—‘ðiêv<}oEŽXôås„yoq²A·9“øµ…cò2©bš‚ qÑw‹‹nÔS#Äí®‹`ñ1á_r9éOuBLÍVÉóEƘ²®0(³1¢‚æßKÎkC})Ÿz{hrçЕ'5ê–8}o9$’IÙM^¿Ç^œË²¬{H¯ÂœPáõ£r¼4_Ö/ÎÌàÀéö/0ÝW¥‡wˆRµ™=ÑTò8§³…ÝAH‘~^-SJÉë±N²•å½¯dÑrO! ›çt&„â'Ü5ãM£kësÕ0ìí%! £½ÿ9}®FQ@k??1òlŠ®`{îô m)¢I5X–¦ìQ$õ¾R­rP£v5K!Üg<›,Dc6"úX·Sßx­^àœ¬ŽZºÄÞéu7§»`ÛÉ´… ótÛL¸­}t÷ŽænBo(h/ö¸ |¡ð'¡NúX5™íâƒS%57Cm{^ÔºyÞfvÍÍ3þÒ;4nΘšQšJ†ƒž0°‹qìøÞ†Ì U÷Š‚FÔ7dãa¨E]Óòn'¥QÂ6 T…Öd–F¦BnK+¢„"ù¥:ÃB3´ù šNF®LEyš„a‹ŒïÁÓâ^
+¤žh}ë?XœÇ9ãBà=½ýâ$‘[ÜÊÿà=Ýz—NÐZ%`,©ªB-”WÏF ÅºÏë€#w,g²Ÿ¤Rzͱ»ôæç–ÿp³ßŠyz˜@>Äì@Œ„_D³˜úPŽï7µX¦£{µ2G'”K´ç/Öÿ~>ÔWj|AáñÅÒJbVê(ŠñiP¶¤]•‘ͧ€«±‘ =ŠVøÚ(¶ìl·mÛÝpÚç>²ªNfŸñ-8RLò¬Øþ
+91Yh“ŽŠ>„ƒ'óf8̆›d@†š3÷f45õÇQUôélûoä׫¿øJ Ô Òoéß׬µ0ÁD°ÕƒìL;¸K ˲VáDÈÓøœdjé-Â\¶§ ã±ê4õ\ïÙ`0´V’`?;Vjæú«ª¹GÞóˆ0…KÐ_®nUyÑ„=™¬8Ÿÿròº•wCr6lKM—I«<ĉL*rG}qÜ:š*¬Í(BÀßn•îì ñÔšôø*rªÂuzŽé¹Eþ:qƒ,ïÐõÚȨße"êfÐìqô–oìêãoYkß0Î4ñ£ö¾ =‹v[’TŸ'ƒu° ¯öŽ½3VT‰øbÑų–ƒú..uïÍ°×Ó?"¬Õrh ó>VÃ;NZ ?û|KY
+ý§´Ää>¤Œê‘âgI-C•µŸt£¿ሹáÍ0èoÔ¨³þ°†ê šHKÖm†%{êU·x²Y oæ× =—gªü•É c~㬄Jê g4ÀØ]Ú{ÞµõÊÈÈЉ½"Ê=öAë;þ¯vm ù
+ŒÐõ2|§e=ˆ¸h±f>™%ƒp[~ëasaPÁCËúå)àº,µ/Ïk7 ƒ¹\AÇo¤H6ö‰ÓCÑ Fÿ¨z[€UÁæÖ›£~xÃ{uG<#~ªº8È|eîðËö¥±ÄÈžORôD:þ³)Û)¡¡Ï $jUèŲÁzà¥} t]àPôÍ –¥2Æy£êÙSfý$­ñA]ÃÕ‡ç×Õx”[¦ºÄûÇ»®Bhè‘î Ox‚ áJÚ
+Ó©ƒR¹wW*OŽÕè^.^Wè{Isʼn>a/™¸K7ȳì)AZ¢–Çža<l’D¹ÊÆŠ+¨‡ Áñ??WíÄdÞß) –qÅ:É!¸Šx¦*‰ÇŒËýŒki¥Îuå¡–çWÕäé{—Ò|ªÃ¢œK²c³—uÀûÞAãi­ëS—b2†ÄäsoÛb@ï¯ôušæ+žR-„ÒêÛóŽ.?¦ÃŽn¥æ ¸†6Ñ3 s;LÙîk QOT$¼Êù&S@c~v.Q2Ã⶷5Í¢Õ‚tì ÉTøƒC °oy𜄸™ì%˜ jÁµ•´ï©S±§Ò:,~ærŠÍU½âqÆe ê‹à©€›´ 0^aC;A,Ô¼‰Aþ”‚ÆKéÓýIZÃoŠG“G#b¨ÝÎ-€MÝd’ØÃϼØOÝÖŽZ›ðŸÄÄwSÃêäÜ?0$Z+®N¥®Ä ÙÔ*7ïç¡HÊZÔòšøsê* »{“߶ÈóÔWvU´€ì”h=ù3Ï+2Þ°ª&V®×AHßu ÙÕxzšÊqÔí‚ 'WǘxS_h£Ëµ×å×õ”Ã.?W$u’vžùê·ˆV5áö ŒFÓˆ‹l„DH&ÉÜHÂM;aaä,ôŸÅ ñšhØ…R‹Ÿ )T{ÀMÐ[¢O]R¼GRÀñî(ÏX3š±Ó!²F‚
+B†ôŠŽW#©qvPç:Ä´§ïùÚ‘ðHz\…®v±»‘¦‹ôc¸¾´·ÕBÕÇ<bGdu.½Œƒ‰çŽ‹â~ጆs¨*8A»ŠŽì; “°
+¿ ¯ŠW‘Aá¦7Å´I¼Æ:1Ð<Ër1xI•>ð6” qò-f yÃÞ)tÉúp…LUÅðŽ(Þãò©Êzs@¢¢u •iÑ” OÌGú+6—ŽNêˆn'qùæ2HÐZ€¤-¾iïÀ'IgëàWÒÊ©§j·œÎtÒí·³öØo*Š’~—–×Á´FSi7¹L²šh\å(:õÁ\zIL?¤Æˆ‹A¯3}9xåù¹™¾ÛÝiʽ?%”~ã§äïÌvf…t ß g¼3T¨ãË´*­ÊVhVEe=qçç¼¢+_=˜¨\¢Ïú¨À¸ðGƒùHÛÂÓ¹R£Dg¾r˱bÓ¬ù]±UKmžã“D‹…ké6–èüg²‹]É@Ūck}-Ü[ÛhÚ2}Uƒ¾'íkbáb¹­ Ýä&"Et³%RIy ,k³9õnI) ‡RÎy˜ÉšËŒsÁ‚ošR]~Иï³=oª.­©ÇÿÉeãty–æ÷n•êˆ)t»ëþ¡.!]ˆŽÍÉ!·#«Tm.:|¾•·_2Êኾðêµl!; M®]15 E§o’HW¼d²Œ“Øî— ƒ‰’þO¿Ÿ@Íਜh"ºC.b:1fíÕ«ûH´VÁaî'S#:˜‘z?ŽÚ/ý³Yæ…ÕÏpk›ßì3”¡1£n°®ˆ4]Ê«#6u7¯ÄbÝBHÈo^üÎçú B›×OµÆ<’ƒÅm—ŠÂùjèLªç1 -žÁ—‹ùŒøÜ}”‘Ò™ ål!éQü
+ßÅ¡Q‘õ¶5©Ã+ ä™Ü/¿«ðŒcbn¹{D@ŒÍRÓxå-`ßOýµ6̓L;ÑãW£ºpÝÐüƒ;lõ8cæ\i°ÉìúÓß1ÉjçwP¢ä®<ÓÌ\%òª×6wo¨^Û–·8{X¶ÝhØ„gƒ6•X{eµSåŸOÓ„ÉÍrO¤ã/o—ÈÒ¶nŒJEdàÏ #yÚ(6–vúÂð0ƒJ{3¸»®H*‡¥µÁ¶b;3Nß“=üŸ7
+Òñ44ŸܵY2¬÷&
+Pí~£©äsöÊhK0oe‚-ý—wÞôÉ#L¸;.?
+!ëÈ*(ò0\±K*–î8>_͸ú`ö´L¢Xœ¦<4(‚¿· zSM„ø5þ8Š`XMº˜!ì
+ÚiWrRãÛúX?´_f@;•álBSÒS¤ˆ ,¹+9ú;D¾{± ~FÚïŸM²ÌÜ®Yxø®…az×+á©ŠX^/EÂv ½Õ0/¿HtE‡ÈI놨·ŒBm'»o¢-±Ã›ªò>¶¼fÐ$§ó³]Ì pÙ
+“4˜ŸÊœ¢nŸÙ5&Pv™U‘ŠE§W(5%åDlü>¦™Ê.1C£ÏlÙ+Cæ© O¯Ó#‹ðqîØù-*ûHáŒvß94bš°»¦rÈÄkY¸%µx: ÝI¬Ivßqžõ„SC‡"Uï>ŸŒ²[sÒ ½ü,° š¥zjo7sF|>n4¦8öÁ‚kó×á¯Vž‘ç\;o? }X’æb ¯¸?0Ðù¥žÈPE§·n4áU²e4yñɔٹ¡˜m‡D8qkfUÐQó)Iĉ¤ƒ6MGË%˜¶0¸ Måsá·÷¹U¨V=”bt$Ë6ÍL“ÐWCî×ú÷¶¿'[Îï95bë±3%x“×€¹¢‘¿¨DЩ:uö~aøŽ†tšá8AbP+·½Àæ`
+Ѭ–•U×s¡Tó˜w–cÕ´|žW²¹iñßüFt¬¶?mñÛ•ÂäÑfïä2gï,“ïiO¤Ñ/‘ÃÉsNYÇÝý`–ì„B“¿”ëÊ%Oð;ÛYïy+Ø®ñÏeHϾia‚É@ò´ÔýZçã¬,Ø€5,Pw ~ob¯éˆ%9Y
+Çíy‡¥ÔV+¸øJvå@¯o<HSOàrŠ\L¡Õ.¿Usˆš³·&©í–÷I×?S¸¶ÄF?Ks=¿`~(ÄÑ=(<„2ì.èÛ8{jðùq6)&‚ ]î^¯Ã¥/<•Xpþ.¢W‹¸kªw¡ˆ›×*
+¿ª_¸†¯‰Ÿ¶‚ç…‹vî×öå߀¾`½—î7H Ž&R6Nñëû ê­ÁNn7L|ª3¢Ô¾suÏ:÷r‰9TÝ=É”—“ã?0#g°v7•ÈòŸà°ßuµ ÚôrÉè}cV!d—¢á°¨<kpåy–°¡pµ´x%'/xA˜ñ'BŒÒ__/êûXQ4öÛjŸuš
+¸ÃÔáyúá<gÂÓü®¿:%µ<Hõ¼Yÿºäöä“êí(ì礠ãüaçåí Æ}óŽ-{©E6Üç—Þ\‚ï5ÖÁµ7DUÑÕQ» Ä‚î“F&¥û‰Â?”ÂN\yäµ±@Ðâò:¡FIçå<
+ë¤ËÉ1!ÝçøÂ/F<F·]J?ÀVaíã†xˆ$–¼µþç nD>Í7(ž †FÛÎ-Yñ¡ǯEhÙÛI{AÖ§ñí1ÞŒÓâý]
+y”WYÁ­’8:N)¹ö(wv6áiF±ëÆ«ÔYr®`3V½´˜ï_h¯7(ãá½ÞÀp‚8 =8èWªKÃ1=ê| д³ü'Óò™~êþ Ý‚Áä*x]´mº©¯b÷`Ö8œy-40nÏr)Fü†ŽqAöœQ»Ϩù!ö- Ö[.ú.BƒÅ|ÊÞà¢Yµïw #’‰FKÁI缤Ҝýy!•é»[Äìg€jε„³YÈçCõŸ„ùS¨ÖV›FóMCÁƒ¥­&nh ¢é¢|Tâ€]¹«Ùè“HùZ|ü¾ê9ó_6Ë°JÆŒŸË­ˬÖú`½÷ö
+²ñc¾ëíh¿*o¼œÙ`”dù)xW¡YC}w}][ó¥Ïmõæå¿”>")É”¥2Ù‹sß®—¡¢—ó„\*¡ë–‘’šÿ܆£t»*9ÿÄ,g#³¡ÄæTÒS§Bæs¥Ð6Ž™<¢¿ÐA$_xËÐÔoÒ\Y»÷úíJ±…
+•m·*š^?ãoÈy )oÖîh_ýã;Òqð£1àâÕÌÒ(&–.kMOäêÕÆÞž-ûã!Ù7ÎRds·¢RŸ$é—‰GVç»__Ùø.w½1›Éê¨æqk™UÔ¦Ågæ >3wtºº½Zk˜Asä¼wXËZ=§>Û§{#ÈaáS&•];x:‘@˸ÏØ›^?/D­PÿzphÀéÞJóYŸpáèVÜÍŸßuz„1›ÒDoÜ|œ,)Ÿ›üþ«,ñ‚]“+X3Í+þnF"ø”ôe
+[ÖA¡2–‡ãÙ™÷¤Ú8z6‚§ýàÿ)„òƒæÉ ù¬téG|§Ë’O×äÊü‚C´XŠÀcUƒ€¡AuDubRVŒ
+ÊÏŠåPù Ö±›é&[ÜÑæPqoÁšzsô0Q ªÕsÖ>:SqÿŽm÷ƒ‘à¸Õ½Ïµ;uOïg†Ù12Þ¾™ªÐ[‰²ìr„/?´ô¸H"oúÁ<Å~>rfb¹†ÕžÆžIÒüÒÙ"™Í‰'Ó9oh7ÈÆí=VõÜ ütY§Ãé 5*y5°!1øƒY8ñ./GðÉùŽ Álñ[Ú Î%™ì·dƒSï3 T8
+qÄ –v£Ç¶fÿ+Ž¥4I_9Ò§
+endstream
+endobj
+1987 0 obj <<
+/Type /FontDescriptor
+/FontName /PMLMKB+NimbusSanL-Regu
+/Flags 4
+/FontBBox [-174 -285 1001 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle 0
+/StemV 85
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/copyright/d/e/eight/endash/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedbl/quotedblright/quoteright/r/registered/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1986 0 R
+>> endobj
+1988 0 obj <<
+/Length1 1199
+/Length2 7889
+/Length3 0
+/Length 8673
+/Filter /FlateDecode
+>>
+stream
+xÚmweXœÙÒ-îîN‡àÞ¸÷àîk qèÆ݃»'Á œ Á4¸»»C øÈÌ™3÷̧¼{תZUµªö¦{¡¦É&aéd’ur„²Ù9…
+rµ;>CÒNn G¨¦›³³=d©‚8¹¹Z€ B
+ÿ=3@ÊÉÙËlm0jkè2±°°þm
+
+
+̽þB
+uâàp¶2=ÛØ!VìŽ (Ós±2Ž–RN¿ h¿õ“»‚,žóâø7 í<}þ²;ZþÑž¥›3‡¶#ØÅ ¤ ýŸ€gÚß6kÀËÉÅ)È)
+ãØ9gYb IzÞ¾”W¿üé‹Š}:Q©<Íp'Â
+í‘<V—ùƒ/)5>@”hƒ IîsWá{.‡ :weŽ~G»EÇ´»YxAo7µ:¿$ɶïá{ù3 ,Ï,Á!Dë™v×N÷6wTCÓc“àKÑÜ éh>Yú
+í¨ôd›šsã5•ÒÆÄÝ ëeçøý†ùìnS¯–óƒP£þ£ÈÂ÷·ó:î9ŸÛ†©}¥ë>ás½z4ÕãÑÛkJ+ßâ$éý¾'{þ5{h§^öã%baqpR8ô^ úª‚Ï 5Úü!cæ|è*¢Ãì0Ýᇸ¹<’Qø>™­èïg#dóï@${ JÍUÉxSr¤5C;1†žbÖQ «·Z‹Ê+3^\—d„©ml¢D¬XßïÇl‘ hÈîcp˜ºô?½¸ñ(ÿµñN‚wJ¾tS/ÍnÍØ.@ªÜ‹Tv+”²¥Ç`påo¦û4 üÁÈw¢ÀÕ ä(Ç Øнÿ‘P_‹[ﶿ+$ûÙïª(ʨb¦¤ä…ò‚œ€éåç½Ù6'qžþFùK¦ƒ…Å@…¯æ?&k!dSÈì¶`FF«Gl~ÿœòøÙ“«Ÿ`,,Ý&\4pžÀÉN{«írLÅwïL“ÅR ÑÀ<~ér5w6™\èÀi¶(JÖÞœsÈ >,$Õ­ÖEÓ4#P2bu|è¨Q˜g"Šjñþ…Þ[sà–£ÇÉ@¦ÛWÄvT–4W«<c/²
+¤Kr.²áæ´OÎióòœ¨Ñúm@¸êºâ»ðô^FxïN¥«AÛü‘‘•tJÉêž{|‡Í‰ È)-ÕÉÌ¥÷"CFçâ8¼w$¨O‰´b$w'phoìሮ?×77“jò?‰®KÓvÛåᾇºß-3$t˜£Ñr[¬âvA·^Å9¡´_ØN—­êpØ|³É1´^E5x ÏZ|b>¦ˆ„ y'E<ÆÝè;’‡ÃYûL©¹‹ð“öZy¯¯eõgIp
+[±õƒ6ļMð"×g{È›S—Å\TtÙG )ÄxƒD[Ñ[}ùë5¼ë«˜´ù ¶Iæe"l€; ¦xÈ_G1o­dÈK~iÓÚVF>Í‹Ý…c:‰ž‚Ü3–÷P™ZЯzßdN››ìåqk/‡~¾ûÊ|ÿ-4àE9«'ûÝeVšmÁèžìµ‰}Ìãáq'CBz"û">ü и;–öÀ×™P)(ÂRå-Q*¥fEY•¹‹ÙC¯ž°ü:ÖÓ/] L,@ÐÇoÓ»þ(ôH)›¸‹ýaOE)à ˆ¿‘â2ø5ô:! þQ=×Ë[Æc¦àôf¹Q<oY ûM/0ÿôÓ¦rÌZmHÒF«Ý.Ýãuú~Ÿ#·
+/Ç£MY g“®¹f…]+ò£ÐW «Í=f’ÌiŒµÌ%q—KxN?òMªŒíĺ÷æÖ•qˆ—B½(°ø}<erkë‚á añmèÀ¥JBÞåàoHrß©ïÒ®Êë%Mr|_%Ã(ßÔlHƒhVkõZ`¨l*Â?Û±¨0^ök[m¬¨&¼‡š¨RùGž˜ô«ÁeV;RiË«e\Ý©Q~?¬0ÒG?Þ OFÒ“5%R(Ìÿ Îy5%B“¢,˜Âpþ+y­4BÕ|*üŠÌ^
+Í ¦éé@E"’6§¹Š+Š´ƒüz†¦ÓhàJ’MÚpBàÀ΃”œ—.¶L_j°ˆêrÏRNnŠd.Eðr¼çñŠ‘•é_Dè}-b;ÚAè§gí(E
+7½s©M=µNAÕ`á?ÿ6§B6æ¿ZjMª~¿¯ZéH2
+iì<~Ï\*—ëŽÚêБZsÒ–ÅÀÈÆe¨³"ã÷š-r:I2qŸ§ÀÝ.¹ÿôö Q¹Í7RÊõI=söm!éQ‚›tàŽ|#Ù¯Ëå¼# ±Uýl«…ÕKúÒ/WøVÈ8&”Ñ7ìÖØR(ûüä/^€'¾¨Z´‡Ã,Q¶å‡ÐÕQqÈ[žü¼Ý€Çi.;£ˆrL`ˆÉ<eØ-aÉ“Í·6Kú}½`2°v„”Ý2ö-YcûLŸ°šr‚‡4g “ùúÖ¹’àÝ”“Ã-I¸#;c+K=døÊ›{)ÎhŠ‰ùN
+yÁñýœ’Y?6¿§\yeÒ¼Ù?ëÏþ)¥h “þ:±wDgKñæ3f„Y'T(q¨x¢¥¢Æb Ó%;È\a9üº5ÙPijÄߺç>áÇÝ4ÿHXÒÅ+Ú[®_ûæ#¯n£úï–*†eídøA©>ä»ØCBsv¶ù§qôêà"–Lâ6”Òˆ¯ºÄûnH
+P™³ágéó°ÙåÐ߬ñp "›7‘Œ¨O/yTâúœ8…ùö“UnÏìK;?V‹èö¡½<*ÜMd#o†§ F©T¿¤òv";Aè5—ìSá&¾ç›n¾xú%@œ~ÏY+½€Ÿƒ«ü¿_/ƒþzÖù¸Re!º®/°¬•ÍÔ Šåú4c2AJ¿}¹ ¬¢-}‘í3ËÒLd
+ÅÌèdOYM²¸n%14ÌõM—ð¼G´²>xG¯L×)µë{«×¶äM ŸNr7¿Žðå%+Oî™Ù íÒ ç N{À0…ÕÔëQf™A çNîtT½'“â õÎûbŸµÁÀy›y¦ÈÒy¿Øsuäó‘»âëê ¾…Í©üɽAø_{áhÅŽswçHźȊ%O]sw,qùlŽ”H7Uã—јŸªíUÍ\£ö·èèÞ(I{Ä·«¶é=ð 33ݨõã\9<%HÓs<®øµë10¡7eXAp«ˆ&O³`#×£¤Ù ÓUÛ‘‹¨Û}û}>R6†rÐR ¾±BWQÅÛÈ;åÓd9üFê»zµA-?L0(.w<‡{'¯„Š‰ýA7=I¡ôããÎ^8ö´úãȯàà©YÉk»Ø>9(×Áì‡6øtŒ÷Í
+iˆ‘5Ùå–¡I°-Ø9U¸Ì¢:œÌsyl‘‡$vÌ—m"Ûi'ÇAöL’bÇ‚èü‹s|AKꡃ궯BŸØˆAæ•|&"CåS«{ó<À <v%õaž|ì4ßGY…,„m†³È?4c§<Ï€kA‘Âú)ƒk+&IÙ´Ú æ)ÇYSþ*X64 sK;RKÎß²Üy½ñ2÷;Tô¶‘ãG…6Øù§}ëѤ‚­m¾Ó;ð…U ¾%=Gu¾µµH»á¹ŽýBÍHuŸÈ[½‹–çÞÅ\hNîýòõÂ
+\à× ¬®t·Ü¦㼌ök€¨TÈ»®kLØ>†²oi
+yêÉY$R~ÕúúxcÆý­²“^Û\ïMúKë̹´·¡TøTF¾üV›w µ@×R9ðSÕ<«¢S!;ê†nvÃGÛa´[IÒ˜N”…Çë´‘"IBÞP–Âœ1#Ú·­QµI©}#ÁšÕãt]£ò.çÝ4òÔѶëA1/Pæ’XsÙä5Z ïwa¿YÔ(³Ž®fÙóKÕê÷u,’µ¢ Ëû"ìûAΖmRgÚ†ôÀH^XGi=ÊìÆÙîòlx¢'‘HF½¯³Oà1©m£p°{k”Њu;×G¯%Þ Š- uÔÞ@
+mly“æëi”„KL+§Sœfߺ¶ Žò×Í#Wå÷ª¯¯£›ò<âD¼q¯ëGNiÙTÝDü"‚1c•£'É×…sfí¤ÀxÛï‹Æñs=Ϥ¹÷*ìá‚“ï`>ÅôíÁ§*ØÜÊ°4„ó}‚Ù­rÄ~\É»ë“jéÜ׻LJ_tîçáéºã³ ki®øŠ21:—êéE³2G°áýZ'ÖC!¹Ü›–AÁÒiÖ+Ð\]ž±ƒ3ò ^l³/KÌO7.6GãQþ¥I™ç’ÀI¾·¯=c¾4lsÝâ;ŒóiÁw'~W¼®®Íjw-4¶«ùÂÕë2¤~o0ÍôT>+Á¢NÂ!L¾1ì:¯uœèê8‚÷ð‘…ƒiõ0§ÛF­Ýœù@z"AåÏÈZî†Mœ“>QPÒ0¿´…~ÖÕË;åßmsõºÖÃ{wV‚¤ æ¼VÝJuæ—Ë‘P$Ðf§DÞnH·(ùI“N|ð Ù/¸CÌ°&°æ&}Lùk’¸£µn ðú‚Z¨G:·ÄüU\ kXæê~”°º« ×±}ñ|b 0#/z £GŒŒª½·}¡‚šd1¤R.˜ÖÖƒzàãt â!‹h—]Áµ»*FY_¾î¡êÁë€æQ„ù ¯]+ÂÞ|›‹x¯”(–&Ê9ºŽ|\;&n¶ª°…["tn‰xÜ¥ùCyKm˜<ÔðÅ‹_Ñjðw6[2g¬TÉï¢Ýœât2~Ý )…î’
+üòk?4pßq>ëE ƒm Å{GÒÏÙK—Å`qf*W´•ªc)#‡/¨Žk«hHͽ{ÅËÑH3 ä†† > wí¥ð¼#þ¡ˆ·¾X3<“UrüQ¦O¬‚ð5UÝ«>ŽXú`ô'›Î/“×’íî[1·!~7ÆØ78YMFúöœÇ„
+†*œG†ñÛ>s²@ý†L§O¼¦YXÞQÑ^ë)Üný‚€\Ž>§\©‰ó9tÆ#ž@»•\ÆëŠ úh‚|˜,ƒ×B»ˆæE ÈsoE1üðÉi~â—Äöt`Øëéú×¼›ÖZeð2pìwôL½ðG¯Xb}Kž‡|}d¬¡¦ès¹q!1§»÷©#2¬UGkñ§ßzÑe¦ØÓ«€Mû´,`Ë„B!Å ‡=míW¹/«×\Ñ‹%ßMš1“….½y1ÊÛ{6 `%’vÄ¿@Y“¢÷¾¹öTŒà ëǘџ‡äOW³”+f4Y 6Ýô’ê>›[î=ÆÏݤë•ÊÇÞžý âøÀÿsò3ª9x¤Dλ®ÛöØëæ£Ä9kú£KñíÔ)90ø[Á@«§káu–x+šøñ¶0µÊ¡¢Ž +ÒlL¸³Ð{ù]* ,꺒‘9ED¦h{ [#IG>m»J½ê*ÿɆùÝmÛ¤3H¡–9“隦²1¦Úl㌹œD¼Î„û°RÅ·—ìÓ‘h3æ
+ØTÿô^iI“·ÁË¡âüVí!®L˜Pƒ<g°® &>qÇK‹V¦-Æ)ÙÎGÅ’<ž°íêÌÛeêÚRŒ¤„¤H´Z‘Œë4šöÇÇ4#*~ éÉÇf2Xó„Šõ¡ê2­ìŒ-Æ͵æÔˆ,âïKz„E§½CRÆ€$hã‡|²N9¯ìt¢™`˜‘Ù¦×(iýªOý± m%ä!{ó¦M¨$ÓÒò„§‘,ΘÞZO‘e»´è=†ŸX´WÙ:Î6eÒ[æ¦ë,ƒÒ1à~8Š—<’Â)iT¤Öƒ¸jpj´i”5x#ˆó£_+bÐéb·ßøŒ#õ–f‹i>^âê[Jž¥ -SK/4Kh–aæ|µ º8Ì¥5^,1-07¸]”t‰´[k3qŽ}Ä6œT¾z웲¡÷QIœ_ÇQµ«ÛªcUàˆ·sa9îÛƒAp+4fü[‡ÌWZ¾Åh+Ü%V¹4õù·±Œ}?Ó›Ž©¤@TË“ÂÄ j»®}«‰ÞŸ_<’¶O=ëUC˜>WiIcZ­(zñ¹v§HF{øØáAö ûâÈ•¹z•VY±z©·&z_‡JËL8HGS³m}œ"*Sb‘†×‹d~'+øu¢]öÑëæú˜ÜXádgBn²Õj—+8™_ÑüÍ!„ö¾LᢚĂ˦ÊÓðɤQÚÄtd­;Ñœòӧά„7ËE”áWéç„1ÓÉæKÈMçßLG~pèF¤ªÅaă*¥\•çúeGWLOu­$HƒÔÄHO$fu|öðL’÷‰@Jœ .ã-ùÒnV vLþsС¼½=[ú#
+»á~³'±rCÁ­¡6ZÑ<NóÃT·÷Š™
+é¢ìŒåë×[}ý•óV ž†ÆvµÏÇQÍq+ô½Menµ›‹ªˆL;UG´èaŽÜÁNâ²n­>•'}š<Ö¸e¥·xêøÇ·Å™m»Ý‹Ý¿Â$¨·¬l^Tfixúµúôëüäš½¸Úž_ú¡‹£|I´ûTçÇÍLc”5Å—äáMøA½Ü5È>“‘XäfHIªjIÊ«–€x­dXu¢1/’.üX ÇÒ¹/×A)zAù€½)]B%šÊØ:3U¦],
+£‚ÊVä}VúÖÇ#*'ú(!6
+ÿ+웃8öMWã|©òf2©Fã’e®µo‘Þ[_ü"ÎK ®íúØ.~Xõ
+Ø ÿ\Ð VØKµïØË[Ä@ ¾Ì.¯âî·á’Ñ ®lñÂIDbÔìä${Ò#}-Ø)I É0A›ÆºÂÛ}–Õ»üÇÝ׉W`¥Y‘x <€¾ƒR}ǦB–†¬ÒÕ$ÐR! ¦­aß4c6KÖít&p*±kÝ,Gß/ ¢é#0nþ¶=!f¼2‚CnEÖUt¤£,Ð4ÝŽçê)ü|¶6Ü”-çα yH_(íwØË»|²oN•åV~ÆÈ^h#†Xë
+¿ƒÂÌä˜ÞÛn\³+<L@fÔÙ™ÑÞÓïÅÅšBû^±$V–ü}t9›ŽÀÝŠþÇG”LÏÇé,Z¼x†y5ý©Ü¶Á/„i"÷¤—¸§wè¿j¯0wø·žŽÂ?ØÉ+íÙGœïêæòl8ÏH
+W¯—…pEKi$_ éú‚¥àÎãšÙ‚Uάãa«š67e„§î4ïÈæ\â‹îÎý/¼Šh²ÊXˆ Òðsò/ÌTÎ]ª}@-OjQ MW.3YHe¯|¿îOIf.ŒW)3û\´¨b&ƒ.}ü'?EÆƨ¹û,½tŠ=zŸf& Íëiým)é…šxÌ$M áá’àptZ guþý…³,¨Òmcò¨”_ÑÍ!^‹jÓ—ŸïôTHûÖ¥T¯‰û:IòpöÔL–'ºSVkÉœ^¥àxCš*ÄÂB±_Ë<ŽAddÜö«4øn;Ø\ÞŽÙ.æ @ûõaD¾é2MMû#uŠ‹…Ûf¥È"J†VCª 裏”Jikv—»ÆÕ}6•Ppí•‹CÑr1ãÊòwש° %F1«þ!L©¡tÑl±JÑ”FB?¢ukª"ÏÚx×m”Mቋv!µ•S<Õhø’~4´é.
+ŒÒÉÁÀV)b¥?œßVÝû~WÉa¼øu<¿«ØXÂRSèv,'´|½˜Ó1¼4Ä8Y|s*{&Rãké§_'Ç0%+ñjñ ºä+ˆ­Þ¨Ú»À%Õ&*Pi;‰ttü«ºÎǺ?Þ⨹
+endstream
+endobj
+1989 0 obj <<
+/Type /FontDescriptor
+/FontName /BBKPKI+NimbusSanL-ReguItal
+/Flags 4
+/FontBBox [-178 -284 1108 953]
+/Ascent 712
+/CapHeight 712
+/Descent -213
+/ItalicAngle -12
+/StemV 88
+/XHeight 523
+/CharSet (/A/C/D/E/F/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/a/b/c/comma/d/e/f/fi/fl/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/quotedbl/quoteright/r/s/t/u/underscore/v/w/x/y/z/zero)
+/FontFile 1988 0 R
+>> endobj
+1962 0 obj <<
+/Type /Encoding
+/Differences [2/fi/fl 33/exclam/quotedbl/numbersign/dollar 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question 65/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 91/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright 148/quotedblright/bullet/endash 169/copyright 174/registered]
+>> endobj
+908 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SYFPBV+CMMI10
+/FontDescriptor 1973 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 1967 0 R
+>> endobj
+715 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YNRGLS+CMSY10
+/FontDescriptor 1975 0 R
+/FirstChar 3
+/LastChar 110
+/Widths 1969 0 R
+>> endobj
+920 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YIQMNR+NimbusMonL-Regu
+/FontDescriptor 1977 0 R
+/FirstChar 33
+/LastChar 125
+/Widths 1966 0 R
+/Encoding 1962 0 R
+>> endobj
+714 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IKHYGL+NimbusSanL-Bold
+/FontDescriptor 1979 0 R
+/FirstChar 3
+/LastChar 122
+/Widths 1970 0 R
+/Encoding 1962 0 R
+>> endobj
+749 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LJEUKZ+NimbusSanL-BoldCond
+/FontDescriptor 1981 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 1968 0 R
+/Encoding 1962 0 R
+>> endobj
+1097 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /VMTBGM+NimbusSanL-BoldItal
+/FontDescriptor 1983 0 R
+/FirstChar 3
+/LastChar 119
+/Widths 1964 0 R
+/Encoding 1962 0 R
+>> endobj
+1131 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GRJGEU+NimbusSanL-BoldCondItal
+/FontDescriptor 1985 0 R
+/FirstChar 3
+/LastChar 122
+/Widths 1963 0 R
+/Encoding 1962 0 R
+>> endobj
+709 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PMLMKB+NimbusSanL-Regu
+/FontDescriptor 1987 0 R
+/FirstChar 2
+/LastChar 174
+/Widths 1971 0 R
+/Encoding 1962 0 R
+>> endobj
+1055 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BBKPKI+NimbusSanL-ReguItal
+/FontDescriptor 1989 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 1965 0 R
+/Encoding 1962 0 R
+>> endobj
+710 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [705 0 R 712 0 R 747 0 R 792 0 R 835 0 R 877 0 R]
+>> endobj
+909 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [906 0 R 911 0 R 915 0 R 924 0 R 937 0 R 961 0 R]
+>> endobj
+981 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [978 0 R 983 0 R 1000 0 R 1004 0 R 1015 0 R 1019 0 R]
+>> endobj
+1034 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1031 0 R 1039 0 R 1043 0 R 1050 0 R 1062 0 R 1068 0 R]
+>> endobj
+1075 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1072 0 R 1077 0 R 1082 0 R 1091 0 R 1109 0 R 1120 0 R]
+>> endobj
+1133 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1990 0 R
+/Kids [1126 0 R 1139 0 R 1162 0 R 1178 0 R 1196 0 R 1209 0 R]
+>> endobj
+1300 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1295 0 R 1364 0 R 1379 0 R 1388 0 R 1398 0 R 1406 0 R]
+>> endobj
+1420 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1413 0 R 1424 0 R 1434 0 R 1457 0 R 1472 0 R 1480 0 R]
+>> endobj
+1516 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1506 0 R 1524 0 R 1530 0 R 1550 0 R 1573 0 R 1583 0 R]
+>> endobj
+1606 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1599 0 R 1612 0 R 1622 0 R 1627 0 R 1635 0 R 1650 0 R]
+>> endobj
+1673 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 1991 0 R
+/Kids [1666 0 R 1683 0 R 1692 0 R 1745 0 R 1814 0 R 1905 0 R]
+>> endobj
+1961 0 obj <<
+/Type /Pages
+/Count 1
+/Parent 1991 0 R
+/Kids [1958 0 R]
+>> endobj
+1990 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 1992 0 R
+/Kids [710 0 R 909 0 R 981 0 R 1034 0 R 1075 0 R 1133 0 R]
+>> endobj
+1991 0 obj <<
+/Type /Pages
+/Count 31
+/Parent 1992 0 R
+/Kids [1300 0 R 1420 0 R 1516 0 R 1606 0 R 1673 0 R 1961 0 R]
+>> endobj
+1992 0 obj <<
+/Type /Pages
+/Count 67
+/Kids [1990 0 R 1991 0 R]
+>> endobj
+1993 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 702 0 R
+/Count 7
+>> endobj
+702 0 obj <<
+/Title 703 0 R
+/A 701 0 R
+/Parent 1993 0 R
+/Prev 599 0 R
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 697 0 R
+/Parent 695 0 R
+>> endobj
+695 0 obj <<
+/Title 696 0 R
+/A 693 0 R
+/Parent 599 0 R
+/Prev 663 0 R
+/First 699 0 R
+/Last 699 0 R
+/Count -1
+>> endobj
+691 0 obj <<
+/Title 692 0 R
+/A 689 0 R
+/Parent 683 0 R
+/Prev 687 0 R
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 685 0 R
+/Parent 683 0 R
+/Next 691 0 R
+>> endobj
+683 0 obj <<
+/Title 684 0 R
+/A 681 0 R
+/Parent 663 0 R
+/Prev 671 0 R
+/First 687 0 R
+/Last 691 0 R
+/Count -2
+>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 671 0 R
+/Prev 675 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 671 0 R
+/Next 679 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 663 0 R
+/Prev 667 0 R
+/Next 683 0 R
+/First 675 0 R
+/Last 679 0 R
+/Count -2
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 663 0 R
+/Next 671 0 R
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 599 0 R
+/Prev 631 0 R
+/Next 695 0 R
+/First 667 0 R
+/Last 683 0 R
+/Count -3
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 639 0 R
+/Prev 655 0 R
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 639 0 R
+/Prev 651 0 R
+/Next 659 0 R
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 639 0 R
+/Prev 647 0 R
+/Next 655 0 R
+>> endobj
+647 0 obj <<
+/Title 648 0 R
+/A 645 0 R
+/Parent 639 0 R
+/Prev 643 0 R
+/Next 651 0 R
+>> endobj
+643 0 obj <<
+/Title 644 0 R
+/A 641 0 R
+/Parent 639 0 R
+/Next 647 0 R
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 637 0 R
+/Parent 631 0 R
+/Prev 635 0 R
+/First 643 0 R
+/Last 659 0 R
+/Count -5
+>> endobj
+635 0 obj <<
+/Title 636 0 R
+/A 633 0 R
+/Parent 631 0 R
+/Next 639 0 R
+>> endobj
+631 0 obj <<
+/Title 632 0 R
+/A 629 0 R
+/Parent 599 0 R
+/Prev 603 0 R
+/Next 663 0 R
+/First 635 0 R
+/Last 639 0 R
+/Count -2
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 625 0 R
+/Parent 611 0 R
+/Prev 623 0 R
+>> endobj
+623 0 obj <<
+/Title 624 0 R
+/A 621 0 R
+/Parent 611 0 R
+/Prev 619 0 R
+/Next 627 0 R
+>> endobj
+619 0 obj <<
+/Title 620 0 R
+/A 617 0 R
+/Parent 611 0 R
+/Prev 615 0 R
+/Next 623 0 R
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 613 0 R
+/Parent 611 0 R
+/Next 619 0 R
+>> endobj
+611 0 obj <<
+/Title 612 0 R
+/A 609 0 R
+/Parent 603 0 R
+/Prev 607 0 R
+/First 615 0 R
+/Last 627 0 R
+/Count -4
+>> endobj
+607 0 obj <<
+/Title 608 0 R
+/A 605 0 R
+/Parent 603 0 R
+/Next 611 0 R
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 601 0 R
+/Parent 599 0 R
+/Next 631 0 R
+/First 607 0 R
+/Last 611 0 R
+/Count -2
+>> endobj
+599 0 obj <<
+/Title 600 0 R
+/A 597 0 R
+/Parent 1993 0 R
+/Prev 79 0 R
+/Next 702 0 R
+/First 603 0 R
+/Last 695 0 R
+/Count -4
+>> endobj
+595 0 obj <<
+/Title 596 0 R
+/A 593 0 R
+/Parent 79 0 R
+/Prev 575 0 R
+>> endobj
+591 0 obj <<
+/Title 592 0 R
+/A 589 0 R
+/Parent 583 0 R
+/Prev 587 0 R
+>> endobj
+587 0 obj <<
+/Title 588 0 R
+/A 585 0 R
+/Parent 583 0 R
+/Next 591 0 R
+>> endobj
+583 0 obj <<
+/Title 584 0 R
+/A 581 0 R
+/Parent 575 0 R
+/Prev 579 0 R
+/First 587 0 R
+/Last 591 0 R
+/Count -2
+>> endobj
+579 0 obj <<
+/Title 580 0 R
+/A 577 0 R
+/Parent 575 0 R
+/Next 583 0 R
+>> endobj
+575 0 obj <<
+/Title 576 0 R
+/A 573 0 R
+/Parent 79 0 R
+/Prev 523 0 R
+/Next 595 0 R
+/First 579 0 R
+/Last 583 0 R
+/Count -2
+>> endobj
+571 0 obj <<
+/Title 572 0 R
+/A 569 0 R
+/Parent 535 0 R
+/Prev 567 0 R
+>> endobj
+567 0 obj <<
+/Title 568 0 R
+/A 565 0 R
+/Parent 535 0 R
+/Prev 563 0 R
+/Next 571 0 R
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 535 0 R
+/Prev 559 0 R
+/Next 567 0 R
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 535 0 R
+/Prev 555 0 R
+/Next 563 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 535 0 R
+/Prev 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 535 0 R
+/Prev 547 0 R
+/Next 555 0 R
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 535 0 R
+/Prev 543 0 R
+/Next 551 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 535 0 R
+/Prev 539 0 R
+/Next 547 0 R
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 535 0 R
+/Next 543 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 523 0 R
+/Prev 531 0 R
+/First 539 0 R
+/Last 571 0 R
+/Count -9
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 523 0 R
+/Prev 527 0 R
+/Next 535 0 R
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 523 0 R
+/Next 531 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 79 0 R
+/Prev 467 0 R
+/Next 575 0 R
+/First 527 0 R
+/Last 535 0 R
+/Count -3
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 503 0 R
+/Prev 515 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 503 0 R
+/Prev 511 0 R
+/Next 519 0 R
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 503 0 R
+/Prev 507 0 R
+/Next 515 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 503 0 R
+/Next 511 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 467 0 R
+/Prev 475 0 R
+/First 507 0 R
+/Last 519 0 R
+/Count -4
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 475 0 R
+/Prev 495 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 475 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 475 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 475 0 R
+/Prev 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 475 0 R
+/Prev 479 0 R
+/Next 487 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 467 0 R
+/Prev 471 0 R
+/Next 503 0 R
+/First 479 0 R
+/Last 499 0 R
+/Count -6
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 467 0 R
+/Next 475 0 R
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 79 0 R
+/Prev 419 0 R
+/Next 523 0 R
+/First 471 0 R
+/Last 503 0 R
+/Count -3
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 427 0 R
+/Prev 459 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 427 0 R
+/Prev 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 427 0 R
+/Prev 451 0 R
+/Next 459 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 427 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 427 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 427 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 427 0 R
+/Prev 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 427 0 R
+/Prev 431 0 R
+/Next 439 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 419 0 R
+/Prev 423 0 R
+/First 431 0 R
+/Last 463 0 R
+/Count -9
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 79 0 R
+/Prev 263 0 R
+/Next 467 0 R
+/First 423 0 R
+/Last 427 0 R
+/Count -2
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 279 0 R
+/Prev 411 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 279 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 279 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 279 0 R
+/Prev 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 279 0 R
+/Prev 395 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 279 0 R
+/Prev 391 0 R
+/Next 399 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 279 0 R
+/Prev 387 0 R
+/Next 395 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 279 0 R
+/Prev 383 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 279 0 R
+/Prev 379 0 R
+/Next 387 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 279 0 R
+/Prev 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 279 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 279 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 279 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 279 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 279 0 R
+/Prev 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 279 0 R
+/Prev 351 0 R
+/Next 359 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 279 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 279 0 R
+/Prev 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 279 0 R
+/Prev 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 279 0 R
+/Prev 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 279 0 R
+/Prev 331 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 279 0 R
+/Prev 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 279 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 279 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 279 0 R
+/Prev 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 279 0 R
+/Prev 311 0 R
+/Next 319 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 279 0 R
+/Prev 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 279 0 R
+/Prev 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 279 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 279 0 R
+/Prev 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 279 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 279 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 279 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 263 0 R
+/Prev 271 0 R
+/First 283 0 R
+/Last 415 0 R
+/Count -34
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 271 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 263 0 R
+/Prev 267 0 R
+/Next 279 0 R
+/First 275 0 R
+/Last 275 0 R
+/Count -1
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 79 0 R
+/Prev 231 0 R
+/Next 419 0 R
+/First 267 0 R
+/Last 279 0 R
+/Count -3
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 239 0 R
+/Prev 255 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 239 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 239 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 239 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 231 0 R
+/Prev 235 0 R
+/First 243 0 R
+/Last 259 0 R
+/Count -5
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 79 0 R
+/Prev 187 0 R
+/Next 263 0 R
+/First 235 0 R
+/Last 239 0 R
+/Count -2
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 203 0 R
+/Prev 223 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 203 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 203 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 203 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 203 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 187 0 R
+/Prev 195 0 R
+/First 207 0 R
+/Last 227 0 R
+/Count -6
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 195 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 187 0 R
+/Prev 191 0 R
+/Next 203 0 R
+/First 199 0 R
+/Last 199 0 R
+/Count -1
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 79 0 R
+/Prev 167 0 R
+/Next 231 0 R
+/First 191 0 R
+/Last 203 0 R
+/Count -3
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 175 0 R
+/Prev 179 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 167 0 R
+/Prev 171 0 R
+/First 179 0 R
+/Last 183 0 R
+/Count -2
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 79 0 R
+/Prev 151 0 R
+/Next 187 0 R
+/First 171 0 R
+/Last 175 0 R
+/Count -2
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 159 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 151 0 R
+/Prev 155 0 R
+/First 163 0 R
+/Last 163 0 R
+/Count -1
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 79 0 R
+/Prev 107 0 R
+/Next 167 0 R
+/First 155 0 R
+/Last 159 0 R
+/Count -2
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 143 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 107 0 R
+/Prev 115 0 R
+/First 147 0 R
+/Last 147 0 R
+/Count -1
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 115 0 R
+/Prev 135 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 115 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 115 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 115 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 115 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 107 0 R
+/Prev 111 0 R
+/Next 143 0 R
+/First 119 0 R
+/Last 139 0 R
+/Count -6
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 79 0 R
+/Prev 91 0 R
+/Next 151 0 R
+/First 111 0 R
+/Last 143 0 R
+/Count -3
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 99 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 91 0 R
+/Prev 95 0 R
+/First 103 0 R
+/Last 103 0 R
+/Count -1
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 79 0 R
+/Prev 83 0 R
+/Next 107 0 R
+/First 95 0 R
+/Last 99 0 R
+/Count -2
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 83 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 79 0 R
+/Next 91 0 R
+/First 87 0 R
+/Last 87 0 R
+/Count -1
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 1993 0 R
+/Prev 71 0 R
+/Next 599 0 R
+/First 83 0 R
+/Last 595 0 R
+/Count -13
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 71 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 1993 0 R
+/Prev 63 0 R
+/Next 79 0 R
+/First 75 0 R
+/Last 75 0 R
+/Count -1
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 63 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 1993 0 R
+/Prev 55 0 R
+/Next 71 0 R
+/First 67 0 R
+/Last 67 0 R
+/Count -1
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 55 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 1993 0 R
+/Prev 7 0 R
+/Next 63 0 R
+/First 59 0 R
+/Last 59 0 R
+/Count -1
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 47 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 7 0 R
+/Prev 43 0 R
+/First 51 0 R
+/Last 51 0 R
+/Count -1
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 7 0 R
+/Prev 27 0 R
+/Next 47 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 27 0 R
+/First 35 0 R
+/Last 39 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 7 0 R
+/Prev 23 0 R
+/Next 43 0 R
+/First 31 0 R
+/Last 31 0 R
+/Count -1
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 7 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 7 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 7 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 1993 0 R
+/Next 55 0 R
+/First 11 0 R
+/Last 47 0 R
+/Count -7
+>> endobj
+1994 0 obj <<
+/Names [(Doc-Start) 708 0 R (chapter*.1) 750 0 R (chapter.1) 6 0 R (chapter.2) 54 0 R (chapter.3) 62 0 R (chapter.4) 70 0 R]
+/Limits [(Doc-Start) (chapter.4)]
+>> endobj
+1995 0 obj <<
+/Names [(chapter.5) 78 0 R (chapter.6) 598 0 R (classhierarchy__info) 1035 0 R (classhierarchy__info_a12fc455d853883d91e3a19567aaac3fe) 1643 0 R (classhierarchy__info_a4122e10b5d763f2ca3f13076f836ddfe) 1641 0 R (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba) 1642 0 R]
+/Limits [(chapter.5) (classhierarchy__info_aafbad4b89a239ea459aaef1ab4908aba)]
+>> endobj
+1996 0 obj <<
+/Names [(classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) 1640 0 R (classkmp__flag) 1036 0 R (classkmp__flag_a36961b6d49f84ab81365a9389613ea34) 1674 0 R (classkmp__flag_a5d89de3bda829ab9be324007d915aa3b) 1675 0 R (classkmp__flag_aebad8727c9520d1bb2b2219c94cb3c62) 1676 0 R (classkmp__flag_af653ec27d16d63dab994e52ac6713aed) 1672 0 R]
+/Limits [(classhierarchy__info_aeebcad75a7d471e1b1fd37aab6216f22) (classkmp__flag_af653ec27d16d63dab994e52ac6713aed)]
+>> endobj
+1997 0 obj <<
+/Names [(classstats__flags__e) 1037 0 R (classstats__flags__e_a0d979459c9a441d94294d52e0745399e) 1689 0 R (classstats__flags__e_a37c8b539cc437be55817a1f122698106) 1690 0 R (classstats__flags__e_a3f4cdfcd6be0d93ac771c0e37c61567f) 1579 0 R (classstats__flags__e_ab89a43b134178cd06845c54ca4d80e7f) 1687 0 R (classstats__flags__e_ac738a2dc47b270830803e943744f0d43) 1688 0 R]
+/Limits [(classstats__flags__e) (classstats__flags__e_ac738a2dc47b270830803e943744f0d43)]
+>> endobj
+1998 0 obj <<
+/Names [(group__ATOMIC__OPS) 968 0 R (group__BASIC__TYPES) 944 0 R (group__BASIC__TYPES_ga50e3ecb5eb8d70f437a84a8b2bc9e88f) 1117 0 R (group__BASIC__TYPES_ga690fda6b92f039a72db263c6b4394ddb) 1118 0 R (group__BASIC__TYPES_ga7358cc60d0f006b36752a1795e6d5d93) 1114 0 R (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc) 1113 0 R]
+/Limits [(group__ATOMIC__OPS) (group__BASIC__TYPES_ga744ef043bd848d5e338b4c72ef247adc)]
+>> endobj
+1999 0 obj <<
+/Names [(group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) 1116 0 R (group__BASIC__TYPES_gaaffb56f3d5bd8803b41e9862e2aeb863) 1115 0 R (group__BASIC__TYPES_gaf2f9e5d03f9f38651a3b8d5ef8635d44) 1112 0 R (group__DEPRECATED) 945 0 R (group__DEPRECATED_ga27292e41af4c26e0bdf45b12b1f76d5a) 1130 0 R (group__PARALLEL) 947 0 R]
+/Limits [(group__BASIC__TYPES_ga951d8a0a41a4b285b3da9cabd7a99f85) (group__PARALLEL)]
+>> endobj
+2000 0 obj <<
+/Names [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) 1175 0 R (group__PARALLEL_ga345b3a5866deefefc91ae1e8958f49f4) 1173 0 R (group__PARALLEL_ga7b1ba1cc8d9d2fea8654bbb1e59f079e) 1176 0 R (group__PARALLEL_gaae9462b03457d809faeb3e767a5b2283) 1174 0 R (group__PARALLEL_gab49014fb4572e7d0f308fd9b1824daf7) 1167 0 R (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124) 1171 0 R]
+/Limits [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) (group__PARALLEL_gac2b7cc2fa78dde5381bcf00cfc48d124)]
+>> endobj
+2001 0 obj <<
+/Names [(group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) 1169 0 R (group__STARTUP__SHUTDOWN) 946 0 R (group__STARTUP__SHUTDOWN_ga53f4ef16321f42eeb3b8dd463b51f112) 970 0 R (group__STARTUP__SHUTDOWN_gacdedfb2c01fe256ad6c75507644bdfed) 971 0 R (group__STATS__GATHERING) 969 0 R (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66) 1556 0 R]
+/Limits [(group__PARALLEL_gac341818e68b06d910111e4cf08bb54dd) (group__STATS__GATHERING_ga49fb18e6ba9abac7dcf1f9a202741b66)]
+>> endobj
+2002 0 obj <<
+/Names [(group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) 1564 0 R (group__STATS__GATHERING_ga62f4b6e3a4ba48c04b172b97df137839) 1559 0 R (group__STATS__GATHERING_ga6e4f12c6bec4068d72ef9e84516ad01d) 1563 0 R (group__STATS__GATHERING_ga7691000a7864b475046ae62fcf0536ac) 1560 0 R (group__STATS__GATHERING_ga7fa64ec62947bf0b97f3f4778dd22196) 1561 0 R (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875) 1562 0 R]
+/Limits [(group__STATS__GATHERING_ga568b0fdabf6bf808dcb3b42b97c7bc26) (group__STATS__GATHERING_ga8b26485fe6ad4f74b63e54c42fcfd875)]
+>> endobj
+2003 0 obj <<
+/Names [(group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) 1565 0 R (group__STATS__GATHERING_gab0bd69c3ce378f4f7079276311e034c0) 1558 0 R (group__STATS__GATHERING_sec_stats_env_vars) 1555 0 R (group__SYNCHRONIZATION) 967 0 R (group__SYNCHRONIZATION_ga2ead7ca8fe9886581c216ca8006ae3c9) 1470 0 R (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3) 1468 0 R]
+/Limits [(group__STATS__GATHERING_gaa30e2155ac435335965e2e615c1eaea5) (group__SYNCHRONIZATION_ga35415691dad1e3430caa78c9d4b34cb3)]
+>> endobj
+2004 0 obj <<
+/Names [(group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) 1465 0 R (group__SYNCHRONIZATION_ga5c40184c6babbe35c50d43a47573c5c5) 976 0 R (group__SYNCHRONIZATION_ga6a08af1c559012315e7e5be69f7fe608) 1469 0 R (group__SYNCHRONIZATION_ga84b2ebeef737395dddd8ef446c071760) 1461 0 R (group__SYNCHRONIZATION_ga90f0e4bf417a06cff2a4f895daa4ff37) 1467 0 R (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5) 1463 0 R]
+/Limits [(group__SYNCHRONIZATION_ga5a51fa2c8f61d807895e377d6c732b16) (group__SYNCHRONIZATION_gacea2959cabb92c4a941087e524c5f3d5)]
+>> endobj
+2005 0 obj <<
+/Names [(group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) 975 0 R (group__TASKING) 1615 0 R (group__TASKING_ga8b2a95073f7a4a81055899ee6a93ecee) 1617 0 R (group__TASKING_gab53273918f995639450c4dcbed02df88) 1619 0 R (group__THREADPRIVATE) 966 0 R (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a) 1512 0 R]
+/Limits [(group__SYNCHRONIZATION_gafc5438d4c4f01dcd347d9bfde27f68e1) (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a)]
+>> endobj
+2006 0 obj <<
+/Names [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) 1518 0 R (group__THREADPRIVATE_ga1453eca6136fd77e5de88ea0e78cc7a4) 1517 0 R (group__THREADPRIVATE_gab4aa3dff2b1b55b1abb002ef69c7efe7) 1519 0 R (group__THREADPRIVATE_gab6148c019e88c8853596bf5f516373b4) 1510 0 R (group__THREADPRIVATE_gab7035b42d465074b31195534efb37e3b) 1515 0 R (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21) 1513 0 R]
+/Limits [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) (group__THREADPRIVATE_gac1f868aef7d531d34b91eaa57e339f21)]
+>> endobj
+2007 0 obj <<
+/Names [(group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) 1514 0 R (group__THREADPRIVATE_gaec6e88892a1b0b62287df5173a7f0336) 1520 0 R (group__THREADPRIVATE_gaf9503cacabf6cf90ed34f2727fc480bc) 1511 0 R (group__THREAD__STATES) 948 0 R (group__THREAD__STATES_ga127cc7161bbef3ccd2446a9405973192) 1204 0 R (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f) 1206 0 R]
+/Limits [(group__THREADPRIVATE_gad8268ac7d007fa1c3351da682c487c0f) (group__THREAD__STATES_ga39488769ed881a75703495759c0f109f)]
+>> endobj
+2008 0 obj <<
+/Names [(group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) 1207 0 R (group__THREAD__STATES_ga9a981e3dcd9264c2cf5bd8a8cc6f16af) 1202 0 R (group__THREAD__STATES_gadcc691c6c7695988deba68a2de817a66) 1200 0 R (group__USER) 1625 0 R (group__WAIT__RELEASE) 1094 0 R (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b) 1095 0 R]
+/Limits [(group__THREAD__STATES_ga5c4aad6e2e289283e9c58031f7c4e228) (group__WAIT__RELEASE_ga507a7197646f995b5529a68c1481e39b)]
+>> endobj
+2009 0 obj <<
+/Names [(group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) 1098 0 R (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba9e8f1573ea73441426c6a6dda73b4e49) 1099 0 R (group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39baa8e37e16d043d78e34da1d19387be5ba) 1096 0 R (group__WORK__SHARING) 949 0 R (group__WORK__SHARING_ga06dfab09153c455fcaa609e97846b0d5) 1325 0 R (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731) 1327 0 R]
+/Limits [(group__WAIT__RELEASE_gga507a7197646f995b5529a68c1481e39ba8b02d824728fb546d43123b8b069ed04) (group__WORK__SHARING_ga134f0e9d82a69403d9e167dbbf7ae731)]
+>> endobj
+2010 0 obj <<
+/Names [(group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) 1344 0 R (group__WORK__SHARING_ga21ff57e990e07b43d08dfb4214d928c8) 1369 0 R (group__WORK__SHARING_ga305bbe90a798fdc8347aa809978365f5) 1343 0 R (group__WORK__SHARING_ga4bec24e63a011cc0bfca98e79f3c0b93) 1330 0 R (group__WORK__SHARING_ga5671ff45051907f76cc3d214e1de854b) 974 0 R (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970) 1373 0 R]
+/Limits [(group__WORK__SHARING_ga20f319fbf345661d19fc6bfd325231a5) (group__WORK__SHARING_ga5d02abafbc1bf1f9c8d7f3d44ad85970)]
+>> endobj
+2011 0 obj <<
+/Names [(group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) 1338 0 R (group__WORK__SHARING_ga7054a4ec6bf4a65dda00a0aab75db65f) 1368 0 R (group__WORK__SHARING_ga721f06c8017479ccc6cb46ae0552b597) 1322 0 R (group__WORK__SHARING_ga794e820b3c076c766cef93bb414908cc) 1328 0 R (group__WORK__SHARING_ga81091e3b6b3dfe02aab5e0a661f65433) 1374 0 R (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645) 1345 0 R]
+/Limits [(group__WORK__SHARING_ga5f02c0e2081859da86664bfeaec6de62) (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645)]
+>> endobj
+2012 0 obj <<
+/Names [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) 1372 0 R (group__WORK__SHARING_ga9a4e5434d7a476580c6ef7ad2c776bb5) 1334 0 R (group__WORK__SHARING_ga9ef4cfec5c836de61180767240c7f380) 1335 0 R (group__WORK__SHARING_gaa290fe71698081e26ec234a234d2fdcc) 1323 0 R (group__WORK__SHARING_gaa7d615b194c12278b00841852b0dff2b) 1329 0 R (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24) 1367 0 R]
+/Limits [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) (group__WORK__SHARING_gab1acaeaf1525bb1d998ba2110c268b24)]
+>> endobj
+2013 0 obj <<
+/Names [(group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) 1337 0 R (group__WORK__SHARING_gab516cbd738ec072f4929faecbbc456f9) 1342 0 R (group__WORK__SHARING_gac43752941984fb8fda7dc8f2a430f4cb) 1371 0 R (group__WORK__SHARING_gac7d4d8d2d7f5d33b5c2b33d89b3ec0af) 1370 0 R (group__WORK__SHARING_gac9f8cad27477155b583b54848887997d) 1339 0 R (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d) 1336 0 R]
+/Limits [(group__WORK__SHARING_gab1eac772e1ef6ddc3a8512c00a4e78be) (group__WORK__SHARING_gad49ead8c4196b726b6f04d4b1d53d01d)]
+>> endobj
+2014 0 obj <<
+/Names [(group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) 1341 0 R (group__WORK__SHARING_gada4a8fc8b0a17d3109acdeaf2c9443ea) 1324 0 R (group__WORK__SHARING_gadcaf200537aaa0218a60c398438f81be) 1301 0 R (group__WORK__SHARING_gae991c61cbe8e2942fe1f757a65442b26) 973 0 R (group__WORK__SHARING_gaed75fbf8e655bc644d585a48e810bcfc) 1331 0 R (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882) 1333 0 R]
+/Limits [(group__WORK__SHARING_gad99af80b23202044e80aaed7d711b9ac) (group__WORK__SHARING_gaf047657f8ff072f15174f03ff80b4882)]
+>> endobj
+2015 0 obj <<
+/Names [(group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) 1340 0 R (group__WORK__SHARING_gafb31932f7af41b5db5e7d80b21926853) 1332 0 R (group__WORK__SHARING_gafc4e7d07089576fe946c42777ef191cc) 1326 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea14900e8333498e699db5038b413fa53a) 1316 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea1fd38bd33c374db6667332f011a980d9) 1319 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532) 1305 0 R]
+/Limits [(group__WORK__SHARING_gaf293aeef6b6f673f2d824171d6ec20e3) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea270b6b98ec2f9ec4832f7a59b0a0d532)]
+>> endobj
+2016 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) 1317 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea28ae6227a8117b9f39b797caf3211313) 1312 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2a987351b9605b918693a17d4dd90772) 1303 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea317dd63053ef79e3b3cea2ce2b676b38) 1321 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea3dd2ff18afe8c14f3076694e52942ee5) 1318 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3) 1313 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea2816d8223370b9c78f554321cd308b53) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea4132f477daf882e74036a9062a97b7a3)]
+>> endobj
+2017 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) 1304 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7d1b46242e62919d0c5af733553351c3) 1315 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea7ed3535e3c97c9c2ce299addd74b4a01) 1302 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a30ec9215efb0a584597aeda2c03e19) 1320 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea9a4a0dce1e919688bcd27411746b7ad8) 1308 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1) 1309 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81bea52b66fc7ba82beb3d6fbdb82a6ef045d) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1)]
+>> endobj
+2018 0 obj <<
+/Names [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) 1307 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beabbef146a7c8d44992e9c61bec2309348) 1311 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beac30b06c765f4623efb929a141ff9457e) 1314 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beadb87fc98ffc6440f53caa1f5d6606512) 1310 0 R (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beae4b8e84801f56fdb39472c45762bd051) 1306 0 R (index) 918 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) (index)]
+>> endobj
+2019 0 obj <<
+/Names [(index_SEC_EXAMPLES) 964 0 R (index_SEC_INTERFACES) 943 0 R (index_SEC_SEC_OT) 941 0 R (index_SEC_SEC_PT) 942 0 R (index_SEC_SHAREDVARS) 940 0 R (index_SEC_WORKSHARING_EXAMPLE) 965 0 R]
+/Limits [(index_SEC_EXAMPLES) (index_SEC_WORKSHARING_EXAMPLE)]
+>> endobj
+2020 0 obj <<
+/Names [(index_sec_building) 921 0 R (index_sec_frontend) 927 0 R (index_sec_intro) 919 0 R (index_sec_outlining) 928 0 R (index_sec_supported) 922 0 R (kmp__stats_8h_source) 1557 0 R]
+/Limits [(index_sec_building) (kmp__stats_8h_source)]
+>> endobj
+2021 0 obj <<
+/Names [(page.1) 917 0 R (page.10) 1021 0 R (page.11) 1033 0 R (page.12) 1041 0 R (page.13) 1045 0 R (page.14) 1052 0 R]
+/Limits [(page.1) (page.14)]
+>> endobj
+2022 0 obj <<
+/Names [(page.15) 1064 0 R (page.16) 1070 0 R (page.17) 1074 0 R (page.18) 1079 0 R (page.19) 1084 0 R (page.2) 926 0 R]
+/Limits [(page.15) (page.2)]
+>> endobj
+2023 0 obj <<
+/Names [(page.20) 1093 0 R (page.21) 1111 0 R (page.22) 1122 0 R (page.23) 1128 0 R (page.24) 1141 0 R (page.25) 1164 0 R]
+/Limits [(page.20) (page.25)]
+>> endobj
+2024 0 obj <<
+/Names [(page.26) 1180 0 R (page.27) 1198 0 R (page.28) 1211 0 R (page.29) 1297 0 R (page.3) 939 0 R (page.30) 1366 0 R]
+/Limits [(page.26) (page.30)]
+>> endobj
+2025 0 obj <<
+/Names [(page.31) 1381 0 R (page.32) 1390 0 R (page.33) 1400 0 R (page.34) 1408 0 R (page.35) 1415 0 R (page.36) 1426 0 R]
+/Limits [(page.31) (page.36)]
+>> endobj
+2026 0 obj <<
+/Names [(page.37) 1436 0 R (page.38) 1459 0 R (page.39) 1474 0 R (page.4) 963 0 R (page.40) 1482 0 R (page.41) 1508 0 R]
+/Limits [(page.37) (page.41)]
+>> endobj
+2027 0 obj <<
+/Names [(page.42) 1526 0 R (page.43) 1532 0 R (page.44) 1552 0 R (page.45) 1575 0 R (page.46) 1585 0 R (page.47) 1601 0 R]
+/Limits [(page.42) (page.47)]
+>> endobj
+2028 0 obj <<
+/Names [(page.48) 1614 0 R (page.49) 1624 0 R (page.5) 980 0 R (page.50) 1629 0 R (page.51) 1637 0 R (page.52) 1652 0 R]
+/Limits [(page.48) (page.52)]
+>> endobj
+2029 0 obj <<
+/Names [(page.53) 1668 0 R (page.54) 1685 0 R (page.55) 1694 0 R (page.56) 1747 0 R (page.57) 1816 0 R (page.58) 1907 0 R]
+/Limits [(page.53) (page.58)]
+>> endobj
+2030 0 obj <<
+/Names [(page.59) 1960 0 R (page.6) 985 0 R (page.7) 1002 0 R (page.8) 1006 0 R (page.9) 1017 0 R (section*.10) 1142 0 R]
+/Limits [(page.59) (section*.10)]
+>> endobj
+2031 0 obj <<
+/Names [(section*.11) 1165 0 R (section*.12) 1166 0 R (section*.13) 1199 0 R (section*.14) 1298 0 R (section*.15) 1299 0 R (section*.16) 1460 0 R]
+/Limits [(section*.11) (section*.16)]
+>> endobj
+2032 0 obj <<
+/Names [(section*.17) 1509 0 R (section*.18) 1553 0 R (section*.19) 1554 0 R (section*.2) 1053 0 R (section*.20) 1616 0 R (section*.21) 1638 0 R]
+/Limits [(section*.17) (section*.21)]
+>> endobj
+2033 0 obj <<
+/Names [(section*.22) 1639 0 R (section*.23) 1653 0 R (section*.24) 1669 0 R (section*.25) 1670 0 R (section*.26) 1671 0 R (section*.27) 1686 0 R]
+/Limits [(section*.22) (section*.27)]
+>> endobj
+2034 0 obj <<
+/Names [(section*.3) 1056 0 R (section*.4) 1058 0 R (section*.5) 1065 0 R (section*.6) 1066 0 R (section*.7) 1080 0 R (section*.8) 1085 0 R]
+/Limits [(section*.3) (section*.8)]
+>> endobj
+2035 0 obj <<
+/Names [(section*.9) 1129 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.1.5) 26 0 R]
+/Limits [(section*.9) (section.1.5)]
+>> endobj
+2036 0 obj <<
+/Names [(section.1.6) 42 0 R (section.1.7) 46 0 R (section.2.1) 58 0 R (section.3.1) 66 0 R (section.4.1) 74 0 R (section.5.1) 82 0 R]
+/Limits [(section.1.6) (section.5.1)]
+>> endobj
+2037 0 obj <<
+/Names [(section.5.10) 466 0 R (section.5.11) 522 0 R (section.5.12) 574 0 R (section.5.13) 594 0 R (section.5.2) 90 0 R (section.5.3) 106 0 R]
+/Limits [(section.5.10) (section.5.3)]
+>> endobj
+2038 0 obj <<
+/Names [(section.5.4) 150 0 R (section.5.5) 166 0 R (section.5.6) 186 0 R (section.5.7) 230 0 R (section.5.8) 262 0 R (section.5.9) 418 0 R]
+/Limits [(section.5.4) (section.5.9)]
+>> endobj
+2039 0 obj <<
+/Names [(section.6.1) 602 0 R (section.6.2) 630 0 R (section.6.3) 662 0 R (section.6.4) 694 0 R (structident) 972 0 R (structident_a8a098c07080704af1d89e401a1b4d10f) 1656 0 R]
+/Limits [(section.6.1) (structident_a8a098c07080704af1d89e401a1b4d10f)]
+>> endobj
+2040 0 obj <<
+/Names [(structident_a8c2ccc106967f36d7191d59d4d5a65dc) 1655 0 R (structident_a91db2d18476e0a527ba20e04ca2c3e74) 1657 0 R (structident_ae29e80f6fc150f73c1790c8796bcfd9f) 1658 0 R (structident_afa1ec17df36c4bf1e36e97eab63953b9) 1654 0 R (subsection.1.5.1) 30 0 R (subsection.1.7.1) 50 0 R]
+/Limits [(structident_a8c2ccc106967f36d7191d59d4d5a65dc) (subsection.1.7.1)]
+>> endobj
+2041 0 obj <<
+/Names [(subsection.5.1.1) 86 0 R (subsection.5.10.1) 470 0 R (subsection.5.10.2) 474 0 R (subsection.5.10.3) 502 0 R (subsection.5.11.1) 526 0 R (subsection.5.11.2) 530 0 R]
+/Limits [(subsection.5.1.1) (subsection.5.11.2)]
+>> endobj
+2042 0 obj <<
+/Names [(subsection.5.11.3) 534 0 R (subsection.5.12.1) 578 0 R (subsection.5.12.2) 582 0 R (subsection.5.2.1) 94 0 R (subsection.5.2.2) 98 0 R (subsection.5.3.1) 110 0 R]
+/Limits [(subsection.5.11.3) (subsection.5.3.1)]
+>> endobj
+2043 0 obj <<
+/Names [(subsection.5.3.2) 114 0 R (subsection.5.3.3) 142 0 R (subsection.5.4.1) 154 0 R (subsection.5.4.2) 158 0 R (subsection.5.5.1) 170 0 R (subsection.5.5.2) 174 0 R]
+/Limits [(subsection.5.3.2) (subsection.5.5.2)]
+>> endobj
+2044 0 obj <<
+/Names [(subsection.5.6.1) 190 0 R (subsection.5.6.2) 194 0 R (subsection.5.6.3) 202 0 R (subsection.5.7.1) 234 0 R (subsection.5.7.2) 238 0 R (subsection.5.8.1) 266 0 R]
+/Limits [(subsection.5.6.1) (subsection.5.8.1)]
+>> endobj
+2045 0 obj <<
+/Names [(subsection.5.8.2) 270 0 R (subsection.5.8.3) 278 0 R (subsection.5.9.1) 422 0 R (subsection.5.9.2) 426 0 R (subsection.6.1.1) 606 0 R (subsection.6.1.2) 610 0 R]
+/Limits [(subsection.5.8.2) (subsection.6.1.2)]
+>> endobj
+2046 0 obj <<
+/Names [(subsection.6.2.1) 634 0 R (subsection.6.2.2) 638 0 R (subsection.6.3.1) 666 0 R (subsection.6.3.2) 670 0 R (subsection.6.3.3) 682 0 R (subsection.6.4.1) 698 0 R]
+/Limits [(subsection.6.2.1) (subsection.6.4.1)]
+>> endobj
+2047 0 obj <<
+/Names [(subsubsection.1.5.1.1) 34 0 R (subsubsection.1.5.1.2) 38 0 R (subsubsection.5.10.2.1) 478 0 R (subsubsection.5.10.2.2) 482 0 R (subsubsection.5.10.2.3) 486 0 R (subsubsection.5.10.2.4) 490 0 R]
+/Limits [(subsubsection.1.5.1.1) (subsubsection.5.10.2.4)]
+>> endobj
+2048 0 obj <<
+/Names [(subsubsection.5.10.2.5) 494 0 R (subsubsection.5.10.2.6) 498 0 R (subsubsection.5.10.3.1) 506 0 R (subsubsection.5.10.3.2) 510 0 R (subsubsection.5.10.3.3) 514 0 R (subsubsection.5.10.3.4) 518 0 R]
+/Limits [(subsubsection.5.10.2.5) (subsubsection.5.10.3.4)]
+>> endobj
+2049 0 obj <<
+/Names [(subsubsection.5.11.3.1) 538 0 R (subsubsection.5.11.3.2) 542 0 R (subsubsection.5.11.3.3) 546 0 R (subsubsection.5.11.3.4) 550 0 R (subsubsection.5.11.3.5) 554 0 R (subsubsection.5.11.3.6) 558 0 R]
+/Limits [(subsubsection.5.11.3.1) (subsubsection.5.11.3.6)]
+>> endobj
+2050 0 obj <<
+/Names [(subsubsection.5.11.3.7) 562 0 R (subsubsection.5.11.3.8) 566 0 R (subsubsection.5.11.3.9) 570 0 R (subsubsection.5.12.2.1) 586 0 R (subsubsection.5.12.2.2) 590 0 R (subsubsection.5.2.2.1) 102 0 R]
+/Limits [(subsubsection.5.11.3.7) (subsubsection.5.2.2.1)]
+>> endobj
+2051 0 obj <<
+/Names [(subsubsection.5.3.2.1) 118 0 R (subsubsection.5.3.2.2) 122 0 R (subsubsection.5.3.2.3) 126 0 R (subsubsection.5.3.2.4) 130 0 R (subsubsection.5.3.2.5) 134 0 R (subsubsection.5.3.2.6) 138 0 R]
+/Limits [(subsubsection.5.3.2.1) (subsubsection.5.3.2.6)]
+>> endobj
+2052 0 obj <<
+/Names [(subsubsection.5.3.3.1) 146 0 R (subsubsection.5.4.2.1) 162 0 R (subsubsection.5.5.2.1) 178 0 R (subsubsection.5.5.2.2) 182 0 R (subsubsection.5.6.2.1) 198 0 R (subsubsection.5.6.3.1) 206 0 R]
+/Limits [(subsubsection.5.3.3.1) (subsubsection.5.6.3.1)]
+>> endobj
+2053 0 obj <<
+/Names [(subsubsection.5.6.3.2) 210 0 R (subsubsection.5.6.3.3) 214 0 R (subsubsection.5.6.3.4) 218 0 R (subsubsection.5.6.3.5) 222 0 R (subsubsection.5.6.3.6) 226 0 R (subsubsection.5.7.2.1) 242 0 R]
+/Limits [(subsubsection.5.6.3.2) (subsubsection.5.7.2.1)]
+>> endobj
+2054 0 obj <<
+/Names [(subsubsection.5.7.2.2) 246 0 R (subsubsection.5.7.2.3) 250 0 R (subsubsection.5.7.2.4) 254 0 R (subsubsection.5.7.2.5) 258 0 R (subsubsection.5.8.2.1) 274 0 R (subsubsection.5.8.3.1) 282 0 R]
+/Limits [(subsubsection.5.7.2.2) (subsubsection.5.8.3.1)]
+>> endobj
+2055 0 obj <<
+/Names [(subsubsection.5.8.3.10) 318 0 R (subsubsection.5.8.3.11) 322 0 R (subsubsection.5.8.3.12) 326 0 R (subsubsection.5.8.3.13) 330 0 R (subsubsection.5.8.3.14) 334 0 R (subsubsection.5.8.3.15) 338 0 R]
+/Limits [(subsubsection.5.8.3.10) (subsubsection.5.8.3.15)]
+>> endobj
+2056 0 obj <<
+/Names [(subsubsection.5.8.3.16) 342 0 R (subsubsection.5.8.3.17) 346 0 R (subsubsection.5.8.3.18) 350 0 R (subsubsection.5.8.3.19) 354 0 R (subsubsection.5.8.3.2) 286 0 R (subsubsection.5.8.3.20) 358 0 R]
+/Limits [(subsubsection.5.8.3.16) (subsubsection.5.8.3.20)]
+>> endobj
+2057 0 obj <<
+/Names [(subsubsection.5.8.3.21) 362 0 R (subsubsection.5.8.3.22) 366 0 R (subsubsection.5.8.3.23) 370 0 R (subsubsection.5.8.3.24) 374 0 R (subsubsection.5.8.3.25) 378 0 R (subsubsection.5.8.3.26) 382 0 R]
+/Limits [(subsubsection.5.8.3.21) (subsubsection.5.8.3.26)]
+>> endobj
+2058 0 obj <<
+/Names [(subsubsection.5.8.3.27) 386 0 R (subsubsection.5.8.3.28) 390 0 R (subsubsection.5.8.3.29) 394 0 R (subsubsection.5.8.3.3) 290 0 R (subsubsection.5.8.3.30) 398 0 R (subsubsection.5.8.3.31) 402 0 R]
+/Limits [(subsubsection.5.8.3.27) (subsubsection.5.8.3.31)]
+>> endobj
+2059 0 obj <<
+/Names [(subsubsection.5.8.3.32) 406 0 R (subsubsection.5.8.3.33) 410 0 R (subsubsection.5.8.3.34) 414 0 R (subsubsection.5.8.3.4) 294 0 R (subsubsection.5.8.3.5) 298 0 R (subsubsection.5.8.3.6) 302 0 R]
+/Limits [(subsubsection.5.8.3.32) (subsubsection.5.8.3.6)]
+>> endobj
+2060 0 obj <<
+/Names [(subsubsection.5.8.3.7) 306 0 R (subsubsection.5.8.3.8) 310 0 R (subsubsection.5.8.3.9) 314 0 R (subsubsection.5.9.2.1) 430 0 R (subsubsection.5.9.2.2) 434 0 R (subsubsection.5.9.2.3) 438 0 R]
+/Limits [(subsubsection.5.8.3.7) (subsubsection.5.9.2.3)]
+>> endobj
+2061 0 obj <<
+/Names [(subsubsection.5.9.2.4) 442 0 R (subsubsection.5.9.2.5) 446 0 R (subsubsection.5.9.2.6) 450 0 R (subsubsection.5.9.2.7) 454 0 R (subsubsection.5.9.2.8) 458 0 R (subsubsection.5.9.2.9) 462 0 R]
+/Limits [(subsubsection.5.9.2.4) (subsubsection.5.9.2.9)]
+>> endobj
+2062 0 obj <<
+/Names [(subsubsection.6.1.2.1) 614 0 R (subsubsection.6.1.2.2) 618 0 R (subsubsection.6.1.2.3) 622 0 R (subsubsection.6.1.2.4) 626 0 R (subsubsection.6.2.2.1) 642 0 R (subsubsection.6.2.2.2) 646 0 R]
+/Limits [(subsubsection.6.1.2.1) (subsubsection.6.2.2.2)]
+>> endobj
+2063 0 obj <<
+/Names [(subsubsection.6.2.2.3) 650 0 R (subsubsection.6.2.2.4) 654 0 R (subsubsection.6.2.2.5) 658 0 R (subsubsection.6.3.2.1) 674 0 R (subsubsection.6.3.2.2) 678 0 R (subsubsection.6.3.3.1) 686 0 R]
+/Limits [(subsubsection.6.2.2.3) (subsubsection.6.3.3.1)]
+>> endobj
+2064 0 obj <<
+/Names [(subsubsection.6.3.3.2) 690 0 R (table.5.1) 1054 0 R (table.5.10) 1182 0 R (table.5.11) 1183 0 R (table.5.12) 1184 0 R (table.5.13) 1201 0 R]
+/Limits [(subsubsection.6.3.3.2) (table.5.13)]
+>> endobj
+2065 0 obj <<
+/Names [(table.5.14) 1203 0 R (table.5.15) 1205 0 R (table.5.16) 1212 0 R (table.5.17) 1213 0 R (table.5.18) 1382 0 R (table.5.19) 1383 0 R]
+/Limits [(table.5.14) (table.5.19)]
+>> endobj
+2066 0 obj <<
+/Names [(table.5.2) 1057 0 R (table.5.20) 1391 0 R (table.5.21) 1392 0 R (table.5.22) 1401 0 R (table.5.23) 1409 0 R (table.5.24) 1410 0 R]
+/Limits [(table.5.2) (table.5.24)]
+>> endobj
+2067 0 obj <<
+/Names [(table.5.25) 1416 0 R (table.5.26) 1417 0 R (table.5.27) 1418 0 R (table.5.28) 1419 0 R (table.5.29) 1427 0 R (table.5.3) 1132 0 R]
+/Limits [(table.5.25) (table.5.3)]
+>> endobj
+2068 0 obj <<
+/Names [(table.5.30) 1428 0 R (table.5.31) 1429 0 R (table.5.32) 1437 0 R (table.5.33) 1462 0 R (table.5.34) 1464 0 R (table.5.35) 1466 0 R]
+/Limits [(table.5.30) (table.5.35)]
+>> endobj
+2069 0 obj <<
+/Names [(table.5.36) 1475 0 R (table.5.37) 1476 0 R (table.5.38) 1477 0 R (table.5.39) 1478 0 R (table.5.4) 1143 0 R (table.5.40) 1483 0 R]
+/Limits [(table.5.36) (table.5.40)]
+>> endobj
+2070 0 obj <<
+/Names [(table.5.41) 1484 0 R (table.5.42) 1527 0 R (table.5.43) 1528 0 R (table.5.44) 1533 0 R (table.5.45) 1534 0 R (table.5.46) 1576 0 R]
+/Limits [(table.5.41) (table.5.46)]
+>> endobj
+2071 0 obj <<
+/Names [(table.5.47) 1577 0 R (table.5.48) 1578 0 R (table.5.49) 1586 0 R (table.5.5) 1144 0 R (table.5.50) 1587 0 R (table.5.51) 1602 0 R]
+/Limits [(table.5.47) (table.5.51)]
+>> endobj
+2072 0 obj <<
+/Names [(table.5.52) 1603 0 R (table.5.53) 1605 0 R (table.5.54) 1618 0 R (table.5.55) 1620 0 R (table.5.6) 1168 0 R (table.5.7) 1170 0 R]
+/Limits [(table.5.52) (table.5.7)]
+>> endobj
+2073 0 obj <<
+/Names [(table.5.8) 1172 0 R (table.5.9) 1181 0 R]
+/Limits [(table.5.8) (table.5.9)]
+>> endobj
+2074 0 obj <<
+/Kids [1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R]
+/Limits [(Doc-Start) (group__PARALLEL)]
+>> endobj
+2075 0 obj <<
+/Kids [2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R]
+/Limits [(group__PARALLEL_ga1cab712d076ba1d2758b0c3bf5ffe38a) (group__THREADPRIVATE_ga0c2f8074a8474eee42bc96a4bdc7679a)]
+>> endobj
+2076 0 obj <<
+/Kids [2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R]
+/Limits [(group__THREADPRIVATE_ga120efa08eb51f45664477d30eff31916) (group__WORK__SHARING_ga91d58a0a222e1f75e1d5d65b8ece3645)]
+>> endobj
+2077 0 obj <<
+/Kids [2012 0 R 2013 0 R 2014 0 R 2015 0 R 2016 0 R 2017 0 R]
+/Limits [(group__WORK__SHARING_ga99c820d33a0515e359a8f3414d3e9392) (group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beaa0f903270046d7a28b002855648da9f1)]
+>> endobj
+2078 0 obj <<
+/Kids [2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R 2023 0 R]
+/Limits [(group__WORK__SHARING_ggadcaf200537aaa0218a60c398438f81beab1e0332cc09c1f3ee029b9fcc1c40ba0) (page.25)]
+>> endobj
+2079 0 obj <<
+/Kids [2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2029 0 R]
+/Limits [(page.26) (page.58)]
+>> endobj
+2080 0 obj <<
+/Kids [2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R 2035 0 R]
+/Limits [(page.59) (section.1.5)]
+>> endobj
+2081 0 obj <<
+/Kids [2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R]
+/Limits [(section.1.6) (subsection.5.11.2)]
+>> endobj
+2082 0 obj <<
+/Kids [2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R]
+/Limits [(subsection.5.11.3) (subsubsection.5.10.2.4)]
+>> endobj
+2083 0 obj <<
+/Kids [2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R]
+/Limits [(subsubsection.5.10.2.5) (subsubsection.5.7.2.1)]
+>> endobj
+2084 0 obj <<
+/Kids [2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R]
+/Limits [(subsubsection.5.7.2.2) (subsubsection.5.8.3.6)]
+>> endobj
+2085 0 obj <<
+/Kids [2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R]
+/Limits [(subsubsection.5.8.3.7) (table.5.19)]
+>> endobj
+2086 0 obj <<
+/Kids [2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R]
+/Limits [(table.5.2) (table.5.51)]
+>> endobj
+2087 0 obj <<
+/Kids [2072 0 R 2073 0 R]
+/Limits [(table.5.52) (table.5.9)]
+>> endobj
+2088 0 obj <<
+/Kids [2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R]
+/Limits [(Doc-Start) (page.58)]
+>> endobj
+2089 0 obj <<
+/Kids [2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R]
+/Limits [(page.59) (table.5.19)]
+>> endobj
+2090 0 obj <<
+/Kids [2086 0 R 2087 0 R]
+/Limits [(table.5.2) (table.5.9)]
+>> endobj
+2091 0 obj <<
+/Kids [2088 0 R 2089 0 R 2090 0 R]
+/Limits [(Doc-Start) (table.5.9)]
+>> endobj
+2092 0 obj <<
+/Dests 2091 0 R
+>> endobj
+2093 0 obj <<
+/Type /Catalog
+/Pages 1992 0 R
+/Outlines 1993 0 R
+/Names 2092 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 2 << /S /r >> 8 << /S /D >> ] >>
+/OpenAction 704 0 R
+>> endobj
+2094 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20150923130240-05'00')
+/ModDate (D:20150923130240-05'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 2095
+0000000001 65535 f
+0000000002 00000 f
+0000000003 00000 f
+0000000004 00000 f
+0000000000 00000 f
+0000000015 00000 n
+0000073727 00000 n
+0000435807 00000 n
+0000000060 00000 n
+0000000291 00000 n
+0000073908 00000 n
+0000435735 00000 n
+0000000338 00000 n
+0000000425 00000 n
+0000074030 00000 n
+0000435649 00000 n
+0000000473 00000 n
+0000000649 00000 n
+0000074151 00000 n
+0000435563 00000 n
+0000000697 00000 n
+0000000903 00000 n
+0000077130 00000 n
+0000435477 00000 n
+0000000951 00000 n
+0000001211 00000 n
+0000077252 00000 n
+0000435354 00000 n
+0000001259 00000 n
+0000001331 00000 n
+0000081676 00000 n
+0000435256 00000 n
+0000001384 00000 n
+0000001552 00000 n
+0000081798 00000 n
+0000435182 00000 n
+0000001610 00000 n
+0000001725 00000 n
+0000081920 00000 n
+0000435108 00000 n
+0000001783 00000 n
+0000001893 00000 n
+0000082041 00000 n
+0000435022 00000 n
+0000001941 00000 n
+0000002061 00000 n
+0000086779 00000 n
+0000434912 00000 n
+0000002109 00000 n
+0000002176 00000 n
+0000086900 00000 n
+0000434851 00000 n
+0000002229 00000 n
+0000002362 00000 n
+0000091640 00000 n
+0000434726 00000 n
+0000002408 00000 n
+0000002498 00000 n
+0000091701 00000 n
+0000434665 00000 n
+0000002546 00000 n
+0000002608 00000 n
+0000094487 00000 n
+0000434539 00000 n
+0000002654 00000 n
+0000002774 00000 n
+0000094548 00000 n
+0000434478 00000 n
+0000002822 00000 n
+0000002927 00000 n
+0000097503 00000 n
+0000434352 00000 n
+0000002973 00000 n
+0000003058 00000 n
+0000097564 00000 n
+0000434291 00000 n
+0000003106 00000 n
+0000003186 00000 n
+0000100565 00000 n
+0000434162 00000 n
+0000003232 00000 n
+0000003362 00000 n
+0000100688 00000 n
+0000434051 00000 n
+0000003410 00000 n
+0000003525 00000 n
+0000100749 00000 n
+0000433990 00000 n
+0000003578 00000 n
+0000003708 00000 n
+0000114060 00000 n
+0000433865 00000 n
+0000003756 00000 n
+0000003901 00000 n
+0000114121 00000 n
+0000433791 00000 n
+0000003954 00000 n
+0000004084 00000 n
+0000114182 00000 n
+0000433677 00000 n
+0000004137 00000 n
+0000004321 00000 n
+0000114306 00000 n
+0000433613 00000 n
+0000004380 00000 n
+0000004456 00000 n
+0000117984 00000 n
+0000433483 00000 n
+0000004505 00000 n
+0000004591 00000 n
+0000118046 00000 n
+0000433404 00000 n
+0000004645 00000 n
+0000004776 00000 n
+0000118108 00000 n
+0000433272 00000 n
+0000004830 00000 n
+0000005014 00000 n
+0000118233 00000 n
+0000433193 00000 n
+0000005073 00000 n
+0000005225 00000 n
+0000118358 00000 n
+0000433100 00000 n
+0000005284 00000 n
+0000005403 00000 n
+0000118483 00000 n
+0000433007 00000 n
+0000005462 00000 n
+0000005609 00000 n
+0000118608 00000 n
+0000432914 00000 n
+0000005668 00000 n
+0000005815 00000 n
+0000118733 00000 n
+0000432821 00000 n
+0000005874 00000 n
+0000005973 00000 n
+0000118857 00000 n
+0000432742 00000 n
+0000006032 00000 n
+0000006136 00000 n
+0000119748 00000 n
+0000432624 00000 n
+0000006190 00000 n
+0000006326 00000 n
+0000119873 00000 n
+0000432559 00000 n
+0000006385 00000 n
+0000006451 00000 n
+0000121846 00000 n
+0000432428 00000 n
+0000006500 00000 n
+0000006631 00000 n
+0000121971 00000 n
+0000432349 00000 n
+0000006685 00000 n
+0000006816 00000 n
+0000122033 00000 n
+0000432231 00000 n
+0000006870 00000 n
+0000007011 00000 n
+0000122158 00000 n
+0000432166 00000 n
+0000007070 00000 n
+0000007198 00000 n
+0000125161 00000 n
+0000432035 00000 n
+0000007247 00000 n
+0000007381 00000 n
+0000125286 00000 n
+0000431956 00000 n
+0000007435 00000 n
+0000007566 00000 n
+0000125348 00000 n
+0000431838 00000 n
+0000007620 00000 n
+0000007761 00000 n
+0000125472 00000 n
+0000431759 00000 n
+0000007820 00000 n
+0000007917 00000 n
+0000125659 00000 n
+0000431680 00000 n
+0000007976 00000 n
+0000008063 00000 n
+0000131920 00000 n
+0000431549 00000 n
+0000008112 00000 n
+0000008249 00000 n
+0000132107 00000 n
+0000431470 00000 n
+0000008303 00000 n
+0000008434 00000 n
+0000132169 00000 n
+0000431338 00000 n
+0000008488 00000 n
+0000008624 00000 n
+0000132294 00000 n
+0000431273 00000 n
+0000008683 00000 n
+0000008764 00000 n
+0000132419 00000 n
+0000431155 00000 n
+0000008818 00000 n
+0000008959 00000 n
+0000132542 00000 n
+0000431076 00000 n
+0000009018 00000 n
+0000009211 00000 n
+0000132728 00000 n
+0000430983 00000 n
+0000009270 00000 n
+0000009390 00000 n
+0000135909 00000 n
+0000430890 00000 n
+0000009449 00000 n
+0000009574 00000 n
+0000136097 00000 n
+0000430797 00000 n
+0000009633 00000 n
+0000009781 00000 n
+0000136285 00000 n
+0000430704 00000 n
+0000009840 00000 n
+0000009998 00000 n
+0000136473 00000 n
+0000430625 00000 n
+0000010057 00000 n
+0000010227 00000 n
+0000141154 00000 n
+0000430494 00000 n
+0000010276 00000 n
+0000010397 00000 n
+0000141279 00000 n
+0000430415 00000 n
+0000010451 00000 n
+0000010582 00000 n
+0000141341 00000 n
+0000430297 00000 n
+0000010636 00000 n
+0000010777 00000 n
+0000141466 00000 n
+0000430218 00000 n
+0000010836 00000 n
+0000010999 00000 n
+0000141653 00000 n
+0000430125 00000 n
+0000011058 00000 n
+0000011216 00000 n
+0000141839 00000 n
+0000430032 00000 n
+0000011275 00000 n
+0000011443 00000 n
+0000144009 00000 n
+0000429939 00000 n
+0000011502 00000 n
+0000011665 00000 n
+0000144197 00000 n
+0000429860 00000 n
+0000011724 00000 n
+0000011854 00000 n
+0000163454 00000 n
+0000429729 00000 n
+0000011903 00000 n
+0000011994 00000 n
+0000170320 00000 n
+0000429650 00000 n
+0000012048 00000 n
+0000012179 00000 n
+0000170382 00000 n
+0000429518 00000 n
+0000012233 00000 n
+0000012417 00000 n
+0000170506 00000 n
+0000429453 00000 n
+0000012476 00000 n
+0000012557 00000 n
+0000174749 00000 n
+0000429334 00000 n
+0000012611 00000 n
+0000012752 00000 n
+0000174874 00000 n
+0000429255 00000 n
+0000012811 00000 n
+0000012923 00000 n
+0000175062 00000 n
+0000429162 00000 n
+0000012982 00000 n
+0000013135 00000 n
+0000175250 00000 n
+0000429069 00000 n
+0000013194 00000 n
+0000013352 00000 n
+0000175375 00000 n
+0000428976 00000 n
+0000013411 00000 n
+0000013564 00000 n
+0000175498 00000 n
+0000428883 00000 n
+0000013623 00000 n
+0000013781 00000 n
+0000179771 00000 n
+0000428790 00000 n
+0000013840 00000 n
+0000013993 00000 n
+0000179958 00000 n
+0000428697 00000 n
+0000014052 00000 n
+0000014210 00000 n
+0000180082 00000 n
+0000428604 00000 n
+0000014269 00000 n
+0000014422 00000 n
+0000180206 00000 n
+0000428511 00000 n
+0000014481 00000 n
+0000014639 00000 n
+0000180330 00000 n
+0000428418 00000 n
+0000014699 00000 n
+0000014852 00000 n
+0000184983 00000 n
+0000428325 00000 n
+0000014912 00000 n
+0000015070 00000 n
+0000185108 00000 n
+0000428232 00000 n
+0000015130 00000 n
+0000015283 00000 n
+0000185233 00000 n
+0000428139 00000 n
+0000015343 00000 n
+0000015501 00000 n
+0000185358 00000 n
+0000428046 00000 n
+0000015561 00000 n
+0000015742 00000 n
+0000185483 00000 n
+0000427953 00000 n
+0000015802 00000 n
+0000015996 00000 n
+0000189615 00000 n
+0000427860 00000 n
+0000016056 00000 n
+0000016255 00000 n
+0000189740 00000 n
+0000427767 00000 n
+0000016315 00000 n
+0000016509 00000 n
+0000189865 00000 n
+0000427674 00000 n
+0000016569 00000 n
+0000016768 00000 n
+0000189990 00000 n
+0000427581 00000 n
+0000016828 00000 n
+0000016963 00000 n
+0000190178 00000 n
+0000427488 00000 n
+0000017023 00000 n
+0000017148 00000 n
+0000190366 00000 n
+0000427395 00000 n
+0000017208 00000 n
+0000017338 00000 n
+0000194188 00000 n
+0000427302 00000 n
+0000017398 00000 n
+0000017523 00000 n
+0000194375 00000 n
+0000427209 00000 n
+0000017583 00000 n
+0000017736 00000 n
+0000194563 00000 n
+0000427116 00000 n
+0000017796 00000 n
+0000017962 00000 n
+0000194751 00000 n
+0000427023 00000 n
+0000018022 00000 n
+0000018193 00000 n
+0000198198 00000 n
+0000426930 00000 n
+0000018253 00000 n
+0000018419 00000 n
+0000198323 00000 n
+0000426837 00000 n
+0000018479 00000 n
+0000018650 00000 n
+0000198448 00000 n
+0000426744 00000 n
+0000018710 00000 n
+0000018812 00000 n
+0000198635 00000 n
+0000426651 00000 n
+0000018872 00000 n
+0000018979 00000 n
+0000198821 00000 n
+0000426558 00000 n
+0000019039 00000 n
+0000019141 00000 n
+0000202666 00000 n
+0000426465 00000 n
+0000019201 00000 n
+0000019372 00000 n
+0000202854 00000 n
+0000426372 00000 n
+0000019432 00000 n
+0000019608 00000 n
+0000202979 00000 n
+0000426279 00000 n
+0000019668 00000 n
+0000019839 00000 n
+0000203104 00000 n
+0000426200 00000 n
+0000019899 00000 n
+0000020075 00000 n
+0000209553 00000 n
+0000426069 00000 n
+0000020124 00000 n
+0000020227 00000 n
+0000209678 00000 n
+0000425990 00000 n
+0000020281 00000 n
+0000020412 00000 n
+0000209740 00000 n
+0000425872 00000 n
+0000020466 00000 n
+0000020607 00000 n
+0000209865 00000 n
+0000425793 00000 n
+0000020666 00000 n
+0000020773 00000 n
+0000210052 00000 n
+0000425700 00000 n
+0000020832 00000 n
+0000020977 00000 n
+0000210238 00000 n
+0000425607 00000 n
+0000021036 00000 n
+0000021219 00000 n
+0000213666 00000 n
+0000425514 00000 n
+0000021278 00000 n
+0000021446 00000 n
+0000213854 00000 n
+0000425421 00000 n
+0000021505 00000 n
+0000021630 00000 n
+0000214041 00000 n
+0000425328 00000 n
+0000021689 00000 n
+0000021852 00000 n
+0000214228 00000 n
+0000425235 00000 n
+0000021911 00000 n
+0000022008 00000 n
+0000214416 00000 n
+0000425142 00000 n
+0000022067 00000 n
+0000022169 00000 n
+0000217163 00000 n
+0000425063 00000 n
+0000022228 00000 n
+0000022368 00000 n
+0000223759 00000 n
+0000424932 00000 n
+0000022418 00000 n
+0000022590 00000 n
+0000223884 00000 n
+0000424853 00000 n
+0000022645 00000 n
+0000022776 00000 n
+0000223946 00000 n
+0000424721 00000 n
+0000022831 00000 n
+0000022967 00000 n
+0000224070 00000 n
+0000424642 00000 n
+0000023027 00000 n
+0000023108 00000 n
+0000224195 00000 n
+0000424549 00000 n
+0000023168 00000 n
+0000023272 00000 n
+0000224320 00000 n
+0000424456 00000 n
+0000023332 00000 n
+0000023408 00000 n
+0000224444 00000 n
+0000424363 00000 n
+0000023468 00000 n
+0000023567 00000 n
+0000224568 00000 n
+0000424270 00000 n
+0000023627 00000 n
+0000023703 00000 n
+0000229144 00000 n
+0000424191 00000 n
+0000023763 00000 n
+0000023862 00000 n
+0000229206 00000 n
+0000424073 00000 n
+0000023917 00000 n
+0000024058 00000 n
+0000229331 00000 n
+0000423994 00000 n
+0000024118 00000 n
+0000024245 00000 n
+0000229518 00000 n
+0000423901 00000 n
+0000024305 00000 n
+0000024480 00000 n
+0000231990 00000 n
+0000423808 00000 n
+0000024540 00000 n
+0000024725 00000 n
+0000232178 00000 n
+0000423729 00000 n
+0000024785 00000 n
+0000024993 00000 n
+0000237703 00000 n
+0000423598 00000 n
+0000025043 00000 n
+0000025235 00000 n
+0000237891 00000 n
+0000423519 00000 n
+0000025290 00000 n
+0000025421 00000 n
+0000238017 00000 n
+0000423426 00000 n
+0000025476 00000 n
+0000025612 00000 n
+0000242155 00000 n
+0000423308 00000 n
+0000025667 00000 n
+0000025851 00000 n
+0000242280 00000 n
+0000423229 00000 n
+0000025911 00000 n
+0000026020 00000 n
+0000242466 00000 n
+0000423136 00000 n
+0000026080 00000 n
+0000026189 00000 n
+0000242653 00000 n
+0000423043 00000 n
+0000026249 00000 n
+0000026378 00000 n
+0000246172 00000 n
+0000422950 00000 n
+0000026438 00000 n
+0000026605 00000 n
+0000246360 00000 n
+0000422857 00000 n
+0000026665 00000 n
+0000026779 00000 n
+0000246546 00000 n
+0000422764 00000 n
+0000026839 00000 n
+0000026948 00000 n
+0000246670 00000 n
+0000422671 00000 n
+0000027008 00000 n
+0000027165 00000 n
+0000252211 00000 n
+0000422578 00000 n
+0000027225 00000 n
+0000027377 00000 n
+0000252397 00000 n
+0000422499 00000 n
+0000027437 00000 n
+0000027541 00000 n
+0000256824 00000 n
+0000422368 00000 n
+0000027591 00000 n
+0000027697 00000 n
+0000256949 00000 n
+0000422289 00000 n
+0000027752 00000 n
+0000027883 00000 n
+0000257010 00000 n
+0000422171 00000 n
+0000027938 00000 n
+0000028079 00000 n
+0000257135 00000 n
+0000422092 00000 n
+0000028139 00000 n
+0000028310 00000 n
+0000257323 00000 n
+0000422013 00000 n
+0000028370 00000 n
+0000028513 00000 n
+0000258403 00000 n
+0000421935 00000 n
+0000028563 00000 n
+0000028707 00000 n
+0000261850 00000 n
+0000421803 00000 n
+0000028754 00000 n
+0000028880 00000 n
+0000261975 00000 n
+0000421685 00000 n
+0000028929 00000 n
+0000029116 00000 n
+0000262163 00000 n
+0000421606 00000 n
+0000029170 00000 n
+0000029301 00000 n
+0000262225 00000 n
+0000421488 00000 n
+0000029355 00000 n
+0000029514 00000 n
+0000262350 00000 n
+0000421409 00000 n
+0000029573 00000 n
+0000029626 00000 n
+0000262475 00000 n
+0000421316 00000 n
+0000029685 00000 n
+0000029758 00000 n
+0000265859 00000 n
+0000421223 00000 n
+0000029817 00000 n
+0000029890 00000 n
+0000265984 00000 n
+0000421144 00000 n
+0000029949 00000 n
+0000030032 00000 n
+0000266108 00000 n
+0000421012 00000 n
+0000030081 00000 n
+0000030225 00000 n
+0000266233 00000 n
+0000420933 00000 n
+0000030279 00000 n
+0000030410 00000 n
+0000266295 00000 n
+0000420815 00000 n
+0000030464 00000 n
+0000030623 00000 n
+0000266420 00000 n
+0000420736 00000 n
+0000030682 00000 n
+0000030735 00000 n
+0000266545 00000 n
+0000420643 00000 n
+0000030794 00000 n
+0000030857 00000 n
+0000269756 00000 n
+0000420550 00000 n
+0000030916 00000 n
+0000030997 00000 n
+0000269881 00000 n
+0000420457 00000 n
+0000031056 00000 n
+0000031137 00000 n
+0000270006 00000 n
+0000420378 00000 n
+0000031196 00000 n
+0000031277 00000 n
+0000270131 00000 n
+0000420246 00000 n
+0000031326 00000 n
+0000031562 00000 n
+0000270319 00000 n
+0000420167 00000 n
+0000031616 00000 n
+0000031747 00000 n
+0000270444 00000 n
+0000420035 00000 n
+0000031801 00000 n
+0000031980 00000 n
+0000270569 00000 n
+0000419956 00000 n
+0000032039 00000 n
+0000032082 00000 n
+0000273796 00000 n
+0000419877 00000 n
+0000032141 00000 n
+0000032212 00000 n
+0000273858 00000 n
+0000419759 00000 n
+0000032266 00000 n
+0000032425 00000 n
+0000273982 00000 n
+0000419680 00000 n
+0000032484 00000 n
+0000032527 00000 n
+0000274107 00000 n
+0000419601 00000 n
+0000032586 00000 n
+0000032619 00000 n
+0000274232 00000 n
+0000419483 00000 n
+0000032668 00000 n
+0000032853 00000 n
+0000275646 00000 n
+0000419418 00000 n
+0000032907 00000 n
+0000033038 00000 n
+0000419338 00000 n
+0000033092 00000 n
+0000033145 00000 n
+0000033516 00000 n
+0000033696 00000 n
+0000033197 00000 n
+0000033635 00000 n
+0000417151 00000 n
+0000417502 00000 n
+0000034645 00000 n
+0000034526 00000 n
+0000033768 00000 n
+0000416441 00000 n
+0000416122 00000 n
+0000036327 00000 n
+0000036477 00000 n
+0000036630 00000 n
+0000036783 00000 n
+0000036936 00000 n
+0000037089 00000 n
+0000037242 00000 n
+0000037400 00000 n
+0000037564 00000 n
+0000037727 00000 n
+0000037880 00000 n
+0000038033 00000 n
+0000038190 00000 n
+0000038340 00000 n
+0000038493 00000 n
+0000038642 00000 n
+0000038795 00000 n
+0000038945 00000 n
+0000039097 00000 n
+0000039247 00000 n
+0000039400 00000 n
+0000039559 00000 n
+0000039712 00000 n
+0000039871 00000 n
+0000040029 00000 n
+0000040193 00000 n
+0000040346 00000 n
+0000040505 00000 n
+0000040662 00000 n
+0000042771 00000 n
+0000040885 00000 n
+0000035964 00000 n
+0000034743 00000 n
+0000416614 00000 n
+0000040824 00000 n
+0000042934 00000 n
+0000043098 00000 n
+0000043262 00000 n
+0000043426 00000 n
+0000043587 00000 n
+0000043745 00000 n
+0000043909 00000 n
+0000044062 00000 n
+0000044221 00000 n
+0000044379 00000 n
+0000044543 00000 n
+0000044696 00000 n
+0000044854 00000 n
+0000045013 00000 n
+0000045177 00000 n
+0000045340 00000 n
+0000045493 00000 n
+0000045652 00000 n
+0000045808 00000 n
+0000045972 00000 n
+0000046129 00000 n
+0000046293 00000 n
+0000046457 00000 n
+0000046621 00000 n
+0000046784 00000 n
+0000046948 00000 n
+0000047112 00000 n
+0000047265 00000 n
+0000047424 00000 n
+0000047583 00000 n
+0000047747 00000 n
+0000047911 00000 n
+0000048075 00000 n
+0000048239 00000 n
+0000048403 00000 n
+0000048556 00000 n
+0000048715 00000 n
+0000048873 00000 n
+0000049034 00000 n
+0000050817 00000 n
+0000049191 00000 n
+0000042320 00000 n
+0000040997 00000 n
+0000050980 00000 n
+0000051143 00000 n
+0000051307 00000 n
+0000051470 00000 n
+0000051634 00000 n
+0000051798 00000 n
+0000051962 00000 n
+0000052126 00000 n
+0000052290 00000 n
+0000052454 00000 n
+0000052619 00000 n
+0000052784 00000 n
+0000052948 00000 n
+0000053113 00000 n
+0000053277 00000 n
+0000053442 00000 n
+0000053607 00000 n
+0000053772 00000 n
+0000053937 00000 n
+0000054102 00000 n
+0000054265 00000 n
+0000054430 00000 n
+0000054595 00000 n
+0000054760 00000 n
+0000054924 00000 n
+0000055089 00000 n
+0000055253 00000 n
+0000055417 00000 n
+0000055582 00000 n
+0000055747 00000 n
+0000055912 00000 n
+0000056077 00000 n
+0000056242 00000 n
+0000056407 00000 n
+0000056560 00000 n
+0000056718 00000 n
+0000056877 00000 n
+0000057041 00000 n
+0000057202 00000 n
+0000059245 00000 n
+0000057364 00000 n
+0000050366 00000 n
+0000049289 00000 n
+0000059409 00000 n
+0000059573 00000 n
+0000059736 00000 n
+0000059900 00000 n
+0000060064 00000 n
+0000060228 00000 n
+0000060381 00000 n
+0000060541 00000 n
+0000060700 00000 n
+0000060864 00000 n
+0000061029 00000 n
+0000061192 00000 n
+0000061357 00000 n
+0000061522 00000 n
+0000061687 00000 n
+0000061843 00000 n
+0000062007 00000 n
+0000062172 00000 n
+0000062337 00000 n
+0000062502 00000 n
+0000062656 00000 n
+0000062816 00000 n
+0000062975 00000 n
+0000063135 00000 n
+0000063300 00000 n
+0000063465 00000 n
+0000063629 00000 n
+0000063793 00000 n
+0000063958 00000 n
+0000064122 00000 n
+0000064287 00000 n
+0000064452 00000 n
+0000064617 00000 n
+0000064770 00000 n
+0000064930 00000 n
+0000065089 00000 n
+0000065254 00000 n
+0000065416 00000 n
+0000067129 00000 n
+0000065568 00000 n
+0000058802 00000 n
+0000057462 00000 n
+0000067279 00000 n
+0000067432 00000 n
+0000067591 00000 n
+0000067748 00000 n
+0000067911 00000 n
+0000068075 00000 n
+0000068239 00000 n
+0000068402 00000 n
+0000068555 00000 n
+0000068714 00000 n
+0000068871 00000 n
+0000069035 00000 n
+0000069199 00000 n
+0000069363 00000 n
+0000069527 00000 n
+0000069690 00000 n
+0000069842 00000 n
+0000070001 00000 n
+0000070160 00000 n
+0000070324 00000 n
+0000070488 00000 n
+0000070645 00000 n
+0000070808 00000 n
+0000070970 00000 n
+0000071123 00000 n
+0000071282 00000 n
+0000071438 00000 n
+0000066782 00000 n
+0000065666 00000 n
+0000415977 00000 n
+0000417620 00000 n
+0000071768 00000 n
+0000071649 00000 n
+0000071549 00000 n
+0000073502 00000 n
+0000074211 00000 n
+0000073363 00000 n
+0000071809 00000 n
+0000073666 00000 n
+0000073786 00000 n
+0000073847 00000 n
+0000416267 00000 n
+0000073968 00000 n
+0000074090 00000 n
+0000077312 00000 n
+0000076889 00000 n
+0000074324 00000 n
+0000077008 00000 n
+0000077069 00000 n
+0000077190 00000 n
+0000080591 00000 n
+0000080752 00000 n
+0000080911 00000 n
+0000081076 00000 n
+0000081233 00000 n
+0000081394 00000 n
+0000084661 00000 n
+0000082101 00000 n
+0000080412 00000 n
+0000077438 00000 n
+0000081554 00000 n
+0000081615 00000 n
+0000081736 00000 n
+0000081858 00000 n
+0000081980 00000 n
+0000117922 00000 n
+0000121784 00000 n
+0000125099 00000 n
+0000131858 00000 n
+0000141092 00000 n
+0000163392 00000 n
+0000084823 00000 n
+0000084987 00000 n
+0000085147 00000 n
+0000085312 00000 n
+0000085511 00000 n
+0000085711 00000 n
+0000085863 00000 n
+0000086060 00000 n
+0000086258 00000 n
+0000086457 00000 n
+0000086960 00000 n
+0000084442 00000 n
+0000082227 00000 n
+0000086657 00000 n
+0000086718 00000 n
+0000086839 00000 n
+0000223697 00000 n
+0000209491 00000 n
+0000100626 00000 n
+0000237641 00000 n
+0000125410 00000 n
+0000125597 00000 n
+0000266046 00000 n
+0000179709 00000 n
+0000180268 00000 n
+0000217101 00000 n
+0000213979 00000 n
+0000087828 00000 n
+0000087648 00000 n
+0000087086 00000 n
+0000087767 00000 n
+0000417738 00000 n
+0000088518 00000 n
+0000088338 00000 n
+0000087927 00000 n
+0000088457 00000 n
+0000089572 00000 n
+0000089726 00000 n
+0000089880 00000 n
+0000090034 00000 n
+0000090188 00000 n
+0000090342 00000 n
+0000090496 00000 n
+0000090650 00000 n
+0000090804 00000 n
+0000090958 00000 n
+0000091112 00000 n
+0000091267 00000 n
+0000091422 00000 n
+0000091762 00000 n
+0000089335 00000 n
+0000088603 00000 n
+0000091577 00000 n
+0000092416 00000 n
+0000092231 00000 n
+0000091848 00000 n
+0000092353 00000 n
+0000093339 00000 n
+0000093494 00000 n
+0000093649 00000 n
+0000093804 00000 n
+0000093959 00000 n
+0000094114 00000 n
+0000094269 00000 n
+0000094609 00000 n
+0000093142 00000 n
+0000092502 00000 n
+0000094424 00000 n
+0000095288 00000 n
+0000095103 00000 n
+0000094709 00000 n
+0000095225 00000 n
+0000096183 00000 n
+0000096346 00000 n
+0000096501 00000 n
+0000096655 00000 n
+0000096810 00000 n
+0000096967 00000 n
+0000097122 00000 n
+0000097285 00000 n
+0000097625 00000 n
+0000095976 00000 n
+0000095374 00000 n
+0000097440 00000 n
+0000417860 00000 n
+0000261912 00000 n
+0000270068 00000 n
+0000274169 00000 n
+0000098294 00000 n
+0000098108 00000 n
+0000097725 00000 n
+0000098231 00000 n
+0000100810 00000 n
+0000100379 00000 n
+0000098380 00000 n
+0000100502 00000 n
+0000103904 00000 n
+0000104058 00000 n
+0000104213 00000 n
+0000104745 00000 n
+0000103742 00000 n
+0000100950 00000 n
+0000104368 00000 n
+0000104431 00000 n
+0000104494 00000 n
+0000417324 00000 n
+0000104557 00000 n
+0000104620 00000 n
+0000104683 00000 n
+0000106288 00000 n
+0000106442 00000 n
+0000106785 00000 n
+0000106135 00000 n
+0000104900 00000 n
+0000106596 00000 n
+0000106659 00000 n
+0000106722 00000 n
+0000107846 00000 n
+0000107660 00000 n
+0000106912 00000 n
+0000107783 00000 n
+0000108854 00000 n
+0000108668 00000 n
+0000107946 00000 n
+0000108791 00000 n
+0000417985 00000 n
+0000110136 00000 n
+0000109891 00000 n
+0000108954 00000 n
+0000110014 00000 n
+0000110077 00000 n
+0000111669 00000 n
+0000111420 00000 n
+0000110263 00000 n
+0000111543 00000 n
+0000111606 00000 n
+0000113040 00000 n
+0000113238 00000 n
+0000113470 00000 n
+0000113702 00000 n
+0000114557 00000 n
+0000112869 00000 n
+0000111824 00000 n
+0000113934 00000 n
+0000113997 00000 n
+0000114243 00000 n
+0000114368 00000 n
+0000416791 00000 n
+0000114431 00000 n
+0000114494 00000 n
+0000116323 00000 n
+0000116477 00000 n
+0000116674 00000 n
+0000116872 00000 n
+0000117069 00000 n
+0000117267 00000 n
+0000117464 00000 n
+0000117661 00000 n
+0000118919 00000 n
+0000116116 00000 n
+0000114685 00000 n
+0000117859 00000 n
+0000118170 00000 n
+0000118295 00000 n
+0000118420 00000 n
+0000118545 00000 n
+0000118670 00000 n
+0000118794 00000 n
+0000119810 00000 n
+0000119935 00000 n
+0000119562 00000 n
+0000119032 00000 n
+0000119685 00000 n
+0000121328 00000 n
+0000121523 00000 n
+0000122283 00000 n
+0000121175 00000 n
+0000120048 00000 n
+0000121721 00000 n
+0000121908 00000 n
+0000122095 00000 n
+0000416969 00000 n
+0000122220 00000 n
+0000418110 00000 n
+0000124234 00000 n
+0000124437 00000 n
+0000124635 00000 n
+0000124838 00000 n
+0000125784 00000 n
+0000124063 00000 n
+0000122426 00000 n
+0000125036 00000 n
+0000125223 00000 n
+0000125534 00000 n
+0000125721 00000 n
+0000128675 00000 n
+0000128869 00000 n
+0000129063 00000 n
+0000129261 00000 n
+0000129454 00000 n
+0000129650 00000 n
+0000129843 00000 n
+0000130036 00000 n
+0000130233 00000 n
+0000130426 00000 n
+0000130624 00000 n
+0000130818 00000 n
+0000131012 00000 n
+0000131209 00000 n
+0000131403 00000 n
+0000131601 00000 n
+0000132853 00000 n
+0000128396 00000 n
+0000125941 00000 n
+0000131795 00000 n
+0000131982 00000 n
+0000132044 00000 n
+0000132231 00000 n
+0000132356 00000 n
+0000132481 00000 n
+0000132602 00000 n
+0000132665 00000 n
+0000132790 00000 n
+0000136222 00000 n
+0000136034 00000 n
+0000135846 00000 n
+0000136410 00000 n
+0000136598 00000 n
+0000135660 00000 n
+0000133010 00000 n
+0000135783 00000 n
+0000135971 00000 n
+0000136159 00000 n
+0000136347 00000 n
+0000136535 00000 n
+0000139048 00000 n
+0000139246 00000 n
+0000139444 00000 n
+0000139643 00000 n
+0000139841 00000 n
+0000140040 00000 n
+0000140237 00000 n
+0000140436 00000 n
+0000140634 00000 n
+0000140832 00000 n
+0000141964 00000 n
+0000138823 00000 n
+0000136755 00000 n
+0000141029 00000 n
+0000141216 00000 n
+0000141403 00000 n
+0000141528 00000 n
+0000141591 00000 n
+0000141714 00000 n
+0000141776 00000 n
+0000141901 00000 n
+0000143946 00000 n
+0000144134 00000 n
+0000144322 00000 n
+0000143760 00000 n
+0000142107 00000 n
+0000143883 00000 n
+0000144071 00000 n
+0000144259 00000 n
+0000147232 00000 n
+0000147430 00000 n
+0000147660 00000 n
+0000147890 00000 n
+0000148121 00000 n
+0000148352 00000 n
+0000148584 00000 n
+0000148816 00000 n
+0000149049 00000 n
+0000149282 00000 n
+0000149513 00000 n
+0000149745 00000 n
+0000149977 00000 n
+0000150209 00000 n
+0000150441 00000 n
+0000150674 00000 n
+0000150907 00000 n
+0000151140 00000 n
+0000151372 00000 n
+0000151605 00000 n
+0000151838 00000 n
+0000152071 00000 n
+0000152267 00000 n
+0000152465 00000 n
+0000152663 00000 n
+0000152860 00000 n
+0000153059 00000 n
+0000153256 00000 n
+0000153454 00000 n
+0000153651 00000 n
+0000153850 00000 n
+0000154048 00000 n
+0000154246 00000 n
+0000154442 00000 n
+0000154640 00000 n
+0000154838 00000 n
+0000155036 00000 n
+0000155233 00000 n
+0000155432 00000 n
+0000155630 00000 n
+0000155828 00000 n
+0000156025 00000 n
+0000156223 00000 n
+0000156418 00000 n
+0000156616 00000 n
+0000156815 00000 n
+0000157014 00000 n
+0000157212 00000 n
+0000157411 00000 n
+0000157606 00000 n
+0000157804 00000 n
+0000158003 00000 n
+0000158201 00000 n
+0000158399 00000 n
+0000158597 00000 n
+0000158795 00000 n
+0000158993 00000 n
+0000159192 00000 n
+0000159390 00000 n
+0000159588 00000 n
+0000159786 00000 n
+0000159984 00000 n
+0000160181 00000 n
+0000160379 00000 n
+0000160576 00000 n
+0000160775 00000 n
+0000160973 00000 n
+0000161171 00000 n
+0000161368 00000 n
+0000161567 00000 n
+0000161765 00000 n
+0000161963 00000 n
+0000162160 00000 n
+0000162354 00000 n
+0000162550 00000 n
+0000162748 00000 n
+0000162945 00000 n
+0000163136 00000 n
+0000166494 00000 n
+0000166691 00000 n
+0000163642 00000 n
+0000146395 00000 n
+0000144465 00000 n
+0000163329 00000 n
+0000163516 00000 n
+0000163579 00000 n
+0000418235 00000 n
+0000170443 00000 n
+0000170568 00000 n
+0000170631 00000 n
+0000170694 00000 n
+0000170757 00000 n
+0000170820 00000 n
+0000170882 00000 n
+0000170945 00000 n
+0000171008 00000 n
+0000171070 00000 n
+0000174061 00000 n
+0000174124 00000 n
+0000174187 00000 n
+0000174250 00000 n
+0000174312 00000 n
+0000174373 00000 n
+0000174435 00000 n
+0000174497 00000 n
+0000174560 00000 n
+0000174623 00000 n
+0000174686 00000 n
+0000198385 00000 n
+0000190115 00000 n
+0000198572 00000 n
+0000190303 00000 n
+0000174811 00000 n
+0000189927 00000 n
+0000198760 00000 n
+0000194125 00000 n
+0000194312 00000 n
+0000179895 00000 n
+0000180020 00000 n
+0000180143 00000 n
+0000185295 00000 n
+0000184920 00000 n
+0000185045 00000 n
+0000185170 00000 n
+0000174999 00000 n
+0000175312 00000 n
+0000175187 00000 n
+0000175437 00000 n
+0000194500 00000 n
+0000194688 00000 n
+0000198135 00000 n
+0000198260 00000 n
+0000166888 00000 n
+0000167086 00000 n
+0000167284 00000 n
+0000167482 00000 n
+0000167680 00000 n
+0000167878 00000 n
+0000168076 00000 n
+0000168275 00000 n
+0000168473 00000 n
+0000168670 00000 n
+0000168867 00000 n
+0000169066 00000 n
+0000169264 00000 n
+0000169462 00000 n
+0000169660 00000 n
+0000169859 00000 n
+0000170058 00000 n
+0000171132 00000 n
+0000166188 00000 n
+0000163755 00000 n
+0000170257 00000 n
+0000185420 00000 n
+0000189552 00000 n
+0000189677 00000 n
+0000189802 00000 n
+0000198946 00000 n
+0000202791 00000 n
+0000202916 00000 n
+0000203041 00000 n
+0000173602 00000 n
+0000173800 00000 n
+0000178855 00000 n
+0000175559 00000 n
+0000173449 00000 n
+0000171274 00000 n
+0000173998 00000 n
+0000174936 00000 n
+0000175124 00000 n
+0000179053 00000 n
+0000179251 00000 n
+0000179448 00000 n
+0000180454 00000 n
+0000178684 00000 n
+0000175731 00000 n
+0000179646 00000 n
+0000179832 00000 n
+0000180392 00000 n
+0000184066 00000 n
+0000184264 00000 n
+0000184461 00000 n
+0000184659 00000 n
+0000185608 00000 n
+0000183895 00000 n
+0000180597 00000 n
+0000184857 00000 n
+0000185545 00000 n
+0000188898 00000 n
+0000189095 00000 n
+0000189292 00000 n
+0000190428 00000 n
+0000188736 00000 n
+0000185751 00000 n
+0000189489 00000 n
+0000190052 00000 n
+0000190240 00000 n
+0000193803 00000 n
+0000194813 00000 n
+0000193659 00000 n
+0000190585 00000 n
+0000193999 00000 n
+0000194062 00000 n
+0000194250 00000 n
+0000194437 00000 n
+0000194625 00000 n
+0000418360 00000 n
+0000197676 00000 n
+0000197874 00000 n
+0000199008 00000 n
+0000197523 00000 n
+0000194970 00000 n
+0000198072 00000 n
+0000198510 00000 n
+0000198697 00000 n
+0000198883 00000 n
+0000202012 00000 n
+0000202209 00000 n
+0000202406 00000 n
+0000203165 00000 n
+0000201850 00000 n
+0000199165 00000 n
+0000202603 00000 n
+0000202728 00000 n
+0000205848 00000 n
+0000206049 00000 n
+0000206246 00000 n
+0000206447 00000 n
+0000206644 00000 n
+0000206843 00000 n
+0000207040 00000 n
+0000207241 00000 n
+0000207439 00000 n
+0000207638 00000 n
+0000207835 00000 n
+0000208035 00000 n
+0000208233 00000 n
+0000208434 00000 n
+0000208632 00000 n
+0000208832 00000 n
+0000209029 00000 n
+0000209230 00000 n
+0000210361 00000 n
+0000205551 00000 n
+0000203308 00000 n
+0000209428 00000 n
+0000209615 00000 n
+0000209802 00000 n
+0000209927 00000 n
+0000209989 00000 n
+0000210113 00000 n
+0000210176 00000 n
+0000210298 00000 n
+0000214165 00000 n
+0000213603 00000 n
+0000214353 00000 n
+0000213791 00000 n
+0000214477 00000 n
+0000213417 00000 n
+0000210504 00000 n
+0000213540 00000 n
+0000213728 00000 n
+0000213916 00000 n
+0000214103 00000 n
+0000214290 00000 n
+0000217288 00000 n
+0000216852 00000 n
+0000214634 00000 n
+0000216975 00000 n
+0000217038 00000 n
+0000217225 00000 n
+0000219661 00000 n
+0000219859 00000 n
+0000220057 00000 n
+0000220256 00000 n
+0000220454 00000 n
+0000220652 00000 n
+0000220851 00000 n
+0000221050 00000 n
+0000221249 00000 n
+0000221447 00000 n
+0000221646 00000 n
+0000221843 00000 n
+0000222042 00000 n
+0000222241 00000 n
+0000222440 00000 n
+0000222639 00000 n
+0000222838 00000 n
+0000223037 00000 n
+0000223236 00000 n
+0000223435 00000 n
+0000224692 00000 n
+0000219346 00000 n
+0000217431 00000 n
+0000223634 00000 n
+0000223821 00000 n
+0000224007 00000 n
+0000224132 00000 n
+0000224257 00000 n
+0000224382 00000 n
+0000224506 00000 n
+0000224630 00000 n
+0000418485 00000 n
+0000229268 00000 n
+0000231927 00000 n
+0000229455 00000 n
+0000232115 00000 n
+0000228685 00000 n
+0000228884 00000 n
+0000229643 00000 n
+0000228532 00000 n
+0000224819 00000 n
+0000229081 00000 n
+0000229393 00000 n
+0000229580 00000 n
+0000232303 00000 n
+0000231741 00000 n
+0000229800 00000 n
+0000231864 00000 n
+0000232052 00000 n
+0000232240 00000 n
+0000234838 00000 n
+0000235002 00000 n
+0000235202 00000 n
+0000235404 00000 n
+0000235568 00000 n
+0000235768 00000 n
+0000235970 00000 n
+0000236172 00000 n
+0000236374 00000 n
+0000236575 00000 n
+0000236776 00000 n
+0000236975 00000 n
+0000237176 00000 n
+0000237377 00000 n
+0000238079 00000 n
+0000234577 00000 n
+0000232446 00000 n
+0000237578 00000 n
+0000237765 00000 n
+0000237828 00000 n
+0000237953 00000 n
+0000242590 00000 n
+0000321372 00000 n
+0000246109 00000 n
+0000252334 00000 n
+0000242405 00000 n
+0000242217 00000 n
+0000246608 00000 n
+0000252149 00000 n
+0000246297 00000 n
+0000246484 00000 n
+0000240927 00000 n
+0000241129 00000 n
+0000241328 00000 n
+0000241529 00000 n
+0000241726 00000 n
+0000241928 00000 n
+0000242778 00000 n
+0000240738 00000 n
+0000238234 00000 n
+0000242092 00000 n
+0000242342 00000 n
+0000242527 00000 n
+0000242715 00000 n
+0000274357 00000 n
+0000245845 00000 n
+0000249611 00000 n
+0000246731 00000 n
+0000245701 00000 n
+0000242948 00000 n
+0000246046 00000 n
+0000246234 00000 n
+0000246422 00000 n
+0000249813 00000 n
+0000250014 00000 n
+0000250215 00000 n
+0000250415 00000 n
+0000250616 00000 n
+0000250817 00000 n
+0000251219 00000 n
+0000251421 00000 n
+0000251623 00000 n
+0000251823 00000 n
+0000252522 00000 n
+0000249368 00000 n
+0000246888 00000 n
+0000252023 00000 n
+0000252086 00000 n
+0000252271 00000 n
+0000251019 00000 n
+0000252459 00000 n
+0000418610 00000 n
+0000255919 00000 n
+0000256111 00000 n
+0000256309 00000 n
+0000256501 00000 n
+0000257448 00000 n
+0000255748 00000 n
+0000252678 00000 n
+0000256698 00000 n
+0000256761 00000 n
+0000256886 00000 n
+0000257072 00000 n
+0000257197 00000 n
+0000257260 00000 n
+0000257385 00000 n
+0000258465 00000 n
+0000258154 00000 n
+0000257591 00000 n
+0000258277 00000 n
+0000258340 00000 n
+0000259151 00000 n
+0000258965 00000 n
+0000258578 00000 n
+0000259088 00000 n
+0000260996 00000 n
+0000261194 00000 n
+0000261392 00000 n
+0000261590 00000 n
+0000262599 00000 n
+0000260825 00000 n
+0000259237 00000 n
+0000261787 00000 n
+0000262037 00000 n
+0000262100 00000 n
+0000262287 00000 n
+0000262412 00000 n
+0000262537 00000 n
+0000265921 00000 n
+0000264858 00000 n
+0000265045 00000 n
+0000265231 00000 n
+0000265419 00000 n
+0000265607 00000 n
+0000266607 00000 n
+0000264678 00000 n
+0000262726 00000 n
+0000265796 00000 n
+0000266170 00000 n
+0000266357 00000 n
+0000266482 00000 n
+0000269693 00000 n
+0000269818 00000 n
+0000269943 00000 n
+0000268467 00000 n
+0000268658 00000 n
+0000268856 00000 n
+0000269048 00000 n
+0000269240 00000 n
+0000269438 00000 n
+0000270631 00000 n
+0000268278 00000 n
+0000266747 00000 n
+0000269630 00000 n
+0000270193 00000 n
+0000270256 00000 n
+0000270381 00000 n
+0000270506 00000 n
+0000418735 00000 n
+0000273733 00000 n
+0000273919 00000 n
+0000274044 00000 n
+0000272682 00000 n
+0000272880 00000 n
+0000273078 00000 n
+0000273276 00000 n
+0000273474 00000 n
+0000274671 00000 n
+0000272502 00000 n
+0000270771 00000 n
+0000273670 00000 n
+0000274294 00000 n
+0000274420 00000 n
+0000274483 00000 n
+0000274546 00000 n
+0000274608 00000 n
+0000275708 00000 n
+0000275460 00000 n
+0000274826 00000 n
+0000275583 00000 n
+0000277266 00000 n
+0000277417 00000 n
+0000277568 00000 n
+0000277718 00000 n
+0000277869 00000 n
+0000278019 00000 n
+0000278170 00000 n
+0000278320 00000 n
+0000278471 00000 n
+0000278622 00000 n
+0000278773 00000 n
+0000278924 00000 n
+0000279075 00000 n
+0000279226 00000 n
+0000279377 00000 n
+0000279528 00000 n
+0000279679 00000 n
+0000279829 00000 n
+0000279980 00000 n
+0000280131 00000 n
+0000280281 00000 n
+0000280432 00000 n
+0000280583 00000 n
+0000280734 00000 n
+0000280883 00000 n
+0000281033 00000 n
+0000281184 00000 n
+0000281335 00000 n
+0000281486 00000 n
+0000281637 00000 n
+0000281788 00000 n
+0000281939 00000 n
+0000282090 00000 n
+0000282240 00000 n
+0000282391 00000 n
+0000282541 00000 n
+0000282691 00000 n
+0000282842 00000 n
+0000282993 00000 n
+0000283143 00000 n
+0000283294 00000 n
+0000283445 00000 n
+0000283596 00000 n
+0000283747 00000 n
+0000283898 00000 n
+0000284049 00000 n
+0000284200 00000 n
+0000284351 00000 n
+0000284501 00000 n
+0000284713 00000 n
+0000276690 00000 n
+0000275821 00000 n
+0000284650 00000 n
+0000286822 00000 n
+0000286973 00000 n
+0000287124 00000 n
+0000287275 00000 n
+0000287426 00000 n
+0000287577 00000 n
+0000287728 00000 n
+0000287879 00000 n
+0000288030 00000 n
+0000288181 00000 n
+0000288332 00000 n
+0000288483 00000 n
+0000288633 00000 n
+0000288783 00000 n
+0000288933 00000 n
+0000289084 00000 n
+0000289235 00000 n
+0000289385 00000 n
+0000289536 00000 n
+0000289687 00000 n
+0000289837 00000 n
+0000289988 00000 n
+0000290139 00000 n
+0000290290 00000 n
+0000290441 00000 n
+0000290592 00000 n
+0000290743 00000 n
+0000290894 00000 n
+0000291045 00000 n
+0000291196 00000 n
+0000291347 00000 n
+0000291496 00000 n
+0000291645 00000 n
+0000291796 00000 n
+0000291946 00000 n
+0000292096 00000 n
+0000292246 00000 n
+0000292396 00000 n
+0000292546 00000 n
+0000292696 00000 n
+0000292845 00000 n
+0000292995 00000 n
+0000293144 00000 n
+0000293295 00000 n
+0000293446 00000 n
+0000293596 00000 n
+0000293746 00000 n
+0000293896 00000 n
+0000294046 00000 n
+0000294196 00000 n
+0000294347 00000 n
+0000294498 00000 n
+0000294649 00000 n
+0000294800 00000 n
+0000294951 00000 n
+0000295102 00000 n
+0000295253 00000 n
+0000295403 00000 n
+0000295553 00000 n
+0000295704 00000 n
+0000295855 00000 n
+0000296006 00000 n
+0000296157 00000 n
+0000296308 00000 n
+0000296458 00000 n
+0000296670 00000 n
+0000286102 00000 n
+0000284800 00000 n
+0000296607 00000 n
+0000299221 00000 n
+0000299372 00000 n
+0000299523 00000 n
+0000299674 00000 n
+0000299825 00000 n
+0000299976 00000 n
+0000300127 00000 n
+0000300278 00000 n
+0000300429 00000 n
+0000300579 00000 n
+0000300730 00000 n
+0000300880 00000 n
+0000301030 00000 n
+0000301180 00000 n
+0000301330 00000 n
+0000301480 00000 n
+0000301629 00000 n
+0000301779 00000 n
+0000301930 00000 n
+0000302081 00000 n
+0000302232 00000 n
+0000302382 00000 n
+0000302532 00000 n
+0000302683 00000 n
+0000302834 00000 n
+0000302985 00000 n
+0000303135 00000 n
+0000303285 00000 n
+0000303436 00000 n
+0000303587 00000 n
+0000303737 00000 n
+0000303887 00000 n
+0000304036 00000 n
+0000304185 00000 n
+0000304335 00000 n
+0000304486 00000 n
+0000304637 00000 n
+0000304788 00000 n
+0000304939 00000 n
+0000305090 00000 n
+0000305241 00000 n
+0000305392 00000 n
+0000305543 00000 n
+0000305692 00000 n
+0000305842 00000 n
+0000305992 00000 n
+0000306143 00000 n
+0000306294 00000 n
+0000306445 00000 n
+0000306594 00000 n
+0000306745 00000 n
+0000306896 00000 n
+0000307047 00000 n
+0000307198 00000 n
+0000307349 00000 n
+0000307500 00000 n
+0000307651 00000 n
+0000307802 00000 n
+0000307952 00000 n
+0000308102 00000 n
+0000308253 00000 n
+0000308404 00000 n
+0000308553 00000 n
+0000308704 00000 n
+0000308854 00000 n
+0000309005 00000 n
+0000309156 00000 n
+0000309307 00000 n
+0000309455 00000 n
+0000309606 00000 n
+0000309757 00000 n
+0000309908 00000 n
+0000310058 00000 n
+0000310208 00000 n
+0000310357 00000 n
+0000310508 00000 n
+0000310658 00000 n
+0000310808 00000 n
+0000310958 00000 n
+0000311109 00000 n
+0000311260 00000 n
+0000311411 00000 n
+0000311562 00000 n
+0000311713 00000 n
+0000311862 00000 n
+0000312011 00000 n
+0000313690 00000 n
+0000312223 00000 n
+0000298312 00000 n
+0000296769 00000 n
+0000312160 00000 n
+0000313841 00000 n
+0000313992 00000 n
+0000314143 00000 n
+0000314293 00000 n
+0000314444 00000 n
+0000314594 00000 n
+0000314745 00000 n
+0000314895 00000 n
+0000315045 00000 n
+0000315196 00000 n
+0000315345 00000 n
+0000315496 00000 n
+0000315646 00000 n
+0000315796 00000 n
+0000315947 00000 n
+0000316097 00000 n
+0000316247 00000 n
+0000316396 00000 n
+0000316546 00000 n
+0000316697 00000 n
+0000316847 00000 n
+0000316998 00000 n
+0000317148 00000 n
+0000317299 00000 n
+0000317450 00000 n
+0000317601 00000 n
+0000317750 00000 n
+0000317901 00000 n
+0000318050 00000 n
+0000318201 00000 n
+0000318352 00000 n
+0000318502 00000 n
+0000318651 00000 n
+0000318802 00000 n
+0000318952 00000 n
+0000319103 00000 n
+0000319253 00000 n
+0000319404 00000 n
+0000319555 00000 n
+0000319705 00000 n
+0000319856 00000 n
+0000320007 00000 n
+0000320157 00000 n
+0000320306 00000 n
+0000320457 00000 n
+0000320608 00000 n
+0000320757 00000 n
+0000320908 00000 n
+0000321059 00000 n
+0000321273 00000 n
+0000313105 00000 n
+0000312335 00000 n
+0000321210 00000 n
+0000418860 00000 n
+0000415458 00000 n
+0000321405 00000 n
+0000321877 00000 n
+0000322337 00000 n
+0000322814 00000 n
+0000323206 00000 n
+0000323242 00000 n
+0000323718 00000 n
+0000324337 00000 n
+0000324809 00000 n
+0000325475 00000 n
+0000327284 00000 n
+0000327519 00000 n
+0000329197 00000 n
+0000329457 00000 n
+0000348414 00000 n
+0000348978 00000 n
+0000360995 00000 n
+0000361420 00000 n
+0000374894 00000 n
+0000375352 00000 n
+0000384325 00000 n
+0000384635 00000 n
+0000393013 00000 n
+0000393316 00000 n
+0000405625 00000 n
+0000406257 00000 n
+0000415051 00000 n
+0000418940 00000 n
+0000419063 00000 n
+0000419189 00000 n
+0000419262 00000 n
+0000435917 00000 n
+0000436100 00000 n
+0000436481 00000 n
+0000436964 00000 n
+0000437449 00000 n
+0000437893 00000 n
+0000438327 00000 n
+0000438848 00000 n
+0000439346 00000 n
+0000439931 00000 n
+0000440460 00000 n
+0000441036 00000 n
+0000441511 00000 n
+0000442072 00000 n
+0000442601 00000 n
+0000443087 00000 n
+0000443748 00000 n
+0000444308 00000 n
+0000444869 00000 n
+0000445430 00000 n
+0000445991 00000 n
+0000446551 00000 n
+0000447248 00000 n
+0000448081 00000 n
+0000448914 00000 n
+0000449578 00000 n
+0000449859 00000 n
+0000450122 00000 n
+0000450296 00000 n
+0000450470 00000 n
+0000450647 00000 n
+0000450822 00000 n
+0000450999 00000 n
+0000451174 00000 n
+0000451351 00000 n
+0000451526 00000 n
+0000451703 00000 n
+0000451883 00000 n
+0000452092 00000 n
+0000452300 00000 n
+0000452509 00000 n
+0000452710 00000 n
+0000452907 00000 n
+0000453104 00000 n
+0000453311 00000 n
+0000453514 00000 n
+0000453786 00000 n
+0000454176 00000 n
+0000454424 00000 n
+0000454669 00000 n
+0000454912 00000 n
+0000455155 00000 n
+0000455398 00000 n
+0000455641 00000 n
+0000455927 00000 n
+0000456218 00000 n
+0000456509 00000 n
+0000456798 00000 n
+0000457081 00000 n
+0000457364 00000 n
+0000457647 00000 n
+0000457930 00000 n
+0000458221 00000 n
+0000458511 00000 n
+0000458802 00000 n
+0000459092 00000 n
+0000459379 00000 n
+0000459662 00000 n
+0000459945 00000 n
+0000460228 00000 n
+0000460511 00000 n
+0000460732 00000 n
+0000460933 00000 n
+0000461132 00000 n
+0000461331 00000 n
+0000461532 00000 n
+0000461732 00000 n
+0000461933 00000 n
+0000462133 00000 n
+0000462331 00000 n
+0000462440 00000 n
+0000462566 00000 n
+0000462773 00000 n
+0000462985 00000 n
+0000463231 00000 n
+0000463429 00000 n
+0000463545 00000 n
+0000463665 00000 n
+0000463795 00000 n
+0000463936 00000 n
+0000464081 00000 n
+0000464225 00000 n
+0000464358 00000 n
+0000464479 00000 n
+0000464564 00000 n
+0000464682 00000 n
+0000464801 00000 n
+0000464885 00000 n
+0000464978 00000 n
+0000465018 00000 n
+0000465218 00000 n
+trailer
+<< /Size 2095
+/Root 2093 0 R
+/Info 2094 0 R
+/ID [<3DEFD4030FD314449AEF8B957949E6D4> <3DEFD4030FD314449AEF8B957949E6D4>] >>
+startxref
+465550
+%%EOF
diff --git a/final/www/content.css b/final/www/content.css
new file mode 100644
index 0000000..dca6a32
--- /dev/null
+++ b/final/www/content.css
@@ -0,0 +1,27 @@
+html { margin: 0px; } body { margin: 8px; }
+
+html, body {
+ padding:0px;
+ font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222;
+ line-height:1.5;
+}
+
+h1, h2, h3, tt { color: #000 }
+
+h1 { padding-top:0px; margin-top:0px;}
+h2 { color:#333333; padding-top:0.5em; }
+h3 { padding-top: 0.5em; margin-bottom: -0.25em; color:#2d58b7}
+li { padding-bottom: 0.5em; }
+ul { padding-left:1.5em; }
+
+/* Slides */
+IMG.img_slide {
+ display: block;
+ margin-left: auto;
+ margin-right: auto
+}
+
+.itemTitle { color:#2d58b7 }
+
+/* Tables */
+tr { vertical-align:top }
diff --git a/final/www/index.html b/final/www/index.html
new file mode 100644
index 0000000..3aa682a
--- /dev/null
+++ b/final/www/index.html
@@ -0,0 +1,238 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head>
+ <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>OpenMP* : Support for the OpenMP language</title>
+ <link type="text/css" rel="stylesheet" href="menu.css">
+ <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+
+<body>
+<div id="menu">
+ <div>
+ <a href="http://llvm.org/">LLVM Home</a>
+ </div>
+
+ <div class="submenu">
+ <label>OpenMP Info</label>
+ <a href="/index.html">About</a>
+ </div>
+
+ <div class="submenu">
+ <label>Quick Links</label>
+ <a href="http://lists.llvm.org/mailman/listinfo/openmp-dev">openmp-dev</a>
+ <a href="http://lists.llvm.org/mailman/listinfo/openmp-commits">openmp-commits</a>
+ <a href="http://llvm.org/bugs/">Bug Reports</a>
+ <a href="http://llvm.org/svn/llvm-project/openmp/trunk/">Browse SVN</a>
+ <a href="http://llvm.org/viewvc/llvm-project/openmp/trunk/">Browse ViewVC</a>
+ </div>
+</div>
+
+<div id="content">
+ <!--*********************************************************************-->
+ <h1>OpenMP&reg;: Support for the OpenMP language</h1>
+ <!--*********************************************************************-->
+
+ <p>The OpenMP subproject of LLVM contains the
+ components required to build an executable OpenMP program that are
+ outside the compiler itself.
+ </p>
+
+ <p>Here you can find :-
+ <ul>
+ <li>
+ the code for the runtime library against which
+ code compiled by <tt>clang -fopenmp</tt> must be linked before it
+ can run.
+ </li>
+ <li>
+ the library that supports offload to target devices (in
+ "offload")
+ </li>
+ <li>
+ the OpenUH test-suite used to validate the OpenMP runtime
+ </li>
+ </ul>
+ </p>
+
+ <p>Support for the parts of the OpenMP 4.0 (and later) language that are not
+ associated with the "target" constructs are contained in the
+ "runtime" directory. Support for offloading computation via the
+ "target" directive is in the separate "offload" directory. That
+ builds a library that provides the interfaces for transferring code
+ and data to attached computational devices such as
+ the Intel&reg Xeon Phi&#0153 coprocessor or GPUs.
+ The README.txt in the "offload"
+ directory describes how to build the offload library.
+ </p>
+
+ <p>All of the code here is <a
+ href="http://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a>
+ under the MIT license and the UIUC License (a BSD-like license).
+ The LICENSE.txt file at the top of the OpenMP project contains
+ the license text and associated patent grants.
+ </p>
+
+ <!--=====================================================================-->
+ <h2 id="dir-structure">Status</h2>
+ <!--=====================================================================-->
+
+ <p>With the release of Clang 3.8.0, OpenMP 3.1 support is enabled in
+ Clang by default, and the OpenMP runtime is therefore built as a
+ normal part of the Clang build, and distributed with the binary
+ distributions.You do not, therefore, need explicitly to check out this code, or
+ build it out of tree; a normal Clang check out and build will
+ automatically include building these runtime libraries.
+ </p>
+
+ <!--=====================================================================-->
+ <h2 id="goals">Features and Goals</h2>
+ <!--=====================================================================-->
+
+ <ul>
+ <li>Support for the <a href="http://www.openmp.org/mp-documents/OpenMP3.1.pdf">OpenMP
+ 3.1 standard (PDF)</a> has been achieved in the Clang 3.8.0
+ release.
+ </li>
+
+ <li>Support for the
+ <a href="http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf">OpenMP
+ 4.0 standard (PDF)</a> and <a href="http://www.openmp.org/mp-documents/OpenMP4.5.pdf">OpenMP
+ 4.5 standard (PDF)</a> is now being implemented. (Some OpenMP 4.0
+ and 4.5 features are already available).
+ <li>High performance.</li>
+ <li>ABI compatibility with <a href="http://gcc.gnu.org">Gcc</a> and
+ <a href="http://software.intel.com/en-us/intel-compilers">Intel's
+ existing OpenMP compilers.</a>
+ We currently have binary compatibility with OpenMP
+ 3.1 code compiled by gcc 4.9, however we do not have support
+ for OpenMP 4.0 code that uses task cancellation when compiled
+ by gcc 4.9. How we will support such code remains a research issue.
+ </li>
+ </ul>
+
+ <!--=====================================================================-->
+ <h2 id="why">Why have the runtime code here?</h2>
+ <!--=====================================================================-->
+
+ <p>It makes sense to have the runtime sources in the same place
+ (and with the same license) as the compiler.
+ </p>
+
+ <!--=====================================================================-->
+ <h2 id="requirements">Platform Support</h2>
+ <!--=====================================================================-->
+
+ <p>The runtime can be built with gcc, icc or clang. However, note
+ that a runtime built with clang cannot be guaranteed to work with
+ OpenMP code compiled by the other compilers, since clang does not support
+ a 128-bit float type, and cannot therefore generate the code used
+ for reductions of that type (which may occur in user code compiled
+ by the other compilers).
+ </p>
+
+ <p>The OpenMP runtime is known to work on
+ <ul>
+ <li>ARM&reg;&nbsp; architecture processors</li>
+ <li>PowerPC&trade;&nbsp; processors</li>
+ <li>32 and 64 bit X86
+ processors when compiled with clang, with the Intel compiler
+ or with gcc, and also the Intel&reg;&nbsp;Xeon Phi&trade; product family, when compiled with
+ the Intel compiler.
+ </li>
+ </ul>
+ Ports to other architectures and operating systems are welcome.
+ </p>
+
+ <p>A full OS and archiecture compatibility matrix is in
+ <a href="README.txt">README.txt</a>
+ </p>
+
+
+ <!--=====================================================================-->
+ <h2>Get it and get involved!</h2>
+ <!--=====================================================================-->
+
+ <p>First please review our
+ <a href="http://llvm.org/docs/DeveloperPolicy.html">Developer's Policy</a>.
+
+ <p>To check out the code, use:</p>
+
+ <ul>
+ <li><code>svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp</code></li>
+ </ul>
+
+ <p>
+ Note that for an in-tree build, you should check out openmp to llvm/projects.
+ </p>
+
+ <p>In-tree build:</p>
+ <ul>
+ <li><code>cd where-you-want-to-live</code></li>
+ <li>Check out openmp into llvm/projects</li>
+ <li><code>cd where-you-want-to-build</code></li>
+ <li><code>mkdir build &amp;&amp; cd build</code></li>
+ <li><code>cmake path/to/llvm -DCMAKE_C_COMPILER=&lt;C compiler&gt; -DCMAKE_CXX_COMPILER=&lt;C++ compiler&gt;</code></li>
+ <li><code>make omp</code></li>
+ </ul>
+
+ <p>Out-of-tree build:</p>
+ <ul>
+ <li><code>cd where-you-want-to-live</code></li>
+ <li>Check out openmp</li>
+ <li><code>cd where-you-want-to-live/openmp/runtime</code></li>
+ <li><code>mkdir build &amp;&amp; cd build</code></li>
+ <li><code>cmake path/to/openmp -DCMAKE_C_COMPILER=&lt;C compiler&gt; -DCMAKE_CXX_COMPILER=&lt;C++ compiler&gt;</code></li>
+ <li><code>make</code></li>
+ </ul>
+
+ <p>Full details of how to build are in the
+ <a href="README.txt">README.txt</a> and Build_With_CMake.txt (inside the runtime/ subdirectory)
+ </p>
+
+ <!--=====================================================================-->
+ <h3>Notes</h3>
+ <!--=====================================================================-->
+
+<p>
+
+</p>
+
+ <p>Send discussions to the
+ (<a href="http://lists.llvm.org/mailman/listinfo/openmp-dev">OpenMP mailing list</a>).</p>
+
+
+ <!--=====================================================================-->
+ <h2>Design Documents</h2>
+ <!--=====================================================================-->
+
+<ul>
+<li><a href="Reference.pdf">Runtime design (PDF)</a></li>
+</ul>
+
+ <!--=====================================================================-->
+ <h2>Copyright notices</h2>
+ <!--=====================================================================-->
+<ul>
+<li>
+ The OpenMP name and the OpenMP logo are registered trademarks of the
+ OpenMP Architecture Review Board.
+</li>
+<li>
+ Intel is a trademark of Intel Corporation in the U.S. and/or other
+ countries.
+</li>
+<li>
+ PowerPC is a trademark of IBM Corporation in the U.S. and/or other
+ countries.
+</li>
+<li>
+ ARM is a trademark of ARM Corporation in the U.S. and/or
+ other countries.
+</li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/final/www/menu.css b/final/www/menu.css
new file mode 100644
index 0000000..4a887b1
--- /dev/null
+++ b/final/www/menu.css
@@ -0,0 +1,39 @@
+/***************/
+/* page layout */
+/***************/
+
+[id=menu] {
+ position:fixed;
+ width:25ex;
+}
+[id=content] {
+ /* ***** EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */
+ position:absolute;
+ left:29ex;
+ padding-right:4ex;
+}
+
+/**************/
+/* menu style */
+/**************/
+
+#menu .submenu {
+ padding-top:1em;
+ display:block;
+}
+
+#menu label {
+ display:block;
+ font-weight: bold;
+ text-align: center;
+ background-color: rgb(192,192,192);
+}
+#menu a {
+ padding:0 .2em;
+ display:block;
+ text-align: center;
+ background-color: rgb(235,235,235);
+}
+#menu a:visited {
+ color:rgb(100,50,100);
+}